<?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>66323</bug_id>
          
          <creation_ts>2011-08-16 13:01:54 -0700</creation_ts>
          <short_desc>Rename FontGtk.cpp to FontPango.cpp</short_desc>
          <delta_ts>2011-09-13 20:28:15 -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>Text</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Rafael Antognolli">antognolli+webkit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>antognolli+webkit</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>leandro</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>451809</commentid>
    <comment_count>0</comment_count>
    <who name="Rafael Antognolli">antognolli+webkit</who>
    <bug_when>2011-08-16 13:01:54 -0700</bug_when>
    <thetext>The content of this file is useful for the EFL port too, so I wouldn&apos;t like to just duplicate this code. Can we move it to FontPango.cpp or something else, so we can share the code?

I can send a patch making this change if necessary.

Additionally, the following two functions are giving me troubles to use this code:
 - gdk_cairo_region()
 - gdk_pango_layout_line_get_clip_region()

That&apos;s because they expect different parameters or return different types when using GTK 2 or GTK 3 api. Is there any cairo equivalent function to these two? And if not, can we just paste their code to FontPango.cpp (or whatever it gets to be named) and use it directly? They are two very small functions...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451816</commentid>
    <comment_count>1</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-08-16 13:08:45 -0700</bug_when>
    <thetext>For what it&apos;s worth, I plan to remove this file soon once the Harfbuzz-ng code has landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451834</commentid>
    <comment_count>2</comment_count>
    <who name="Rafael Antognolli">antognolli+webkit</who>
    <bug_when>2011-08-16 13:42:10 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; For what it&apos;s worth, I plan to remove this file soon once the Harfbuzz-ng code has landed.

Hmm... ok, that&apos;s nice. bug 26741 seems to be quite old, is this code getting in anytime soon?

And anyway, can&apos;t we have the current code shared for now, so the EFL port will also have the complex text support fully functional?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451868</commentid>
    <comment_count>3</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-08-16 14:29:51 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Hmm... ok, that&apos;s nice. bug 26741 seems to be quite old, is this code getting in anytime soon?

Harfbuzz-ng has been packaged and has shapers now, so we can make the switch as soon as I can coordinate with the Chromium team.

&gt; And anyway, can&apos;t we have the current code shared for now, so the EFL port will also have the complex text support fully functional?

Sounds reasonable. Might want to move all of the pango specific files to the &quot;pango&quot; subdirectory as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451972</commentid>
    <comment_count>4</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-08-16 16:38:44 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; Additionally, the following two functions are giving me troubles to use this code:
&gt;  - gdk_cairo_region()
&gt;  - gdk_pango_layout_line_get_clip_region()

For above functions,
How do you think about introducing CairoUtilities and PangoUtilities in efl/?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452616</commentid>
    <comment_count>5</comment_count>
    <who name="Rafael Antognolli">antognolli+webkit</who>
    <bug_when>2011-08-17 14:46:40 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #0)
&gt; &gt; Additionally, the following two functions are giving me troubles to use this code:
&gt; &gt;  - gdk_cairo_region()
&gt; &gt;  - gdk_pango_layout_line_get_clip_region()
&gt; 
&gt; For above functions,
&gt; How do you think about introducing CairoUtilities and PangoUtilities in efl/?

I think that idea is nice, but maybe just one of them for now. Will submit a patch for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455627</commentid>
    <comment_count>6</comment_count>
      <attachid>104895</attachid>
    <who name="Rafael Antognolli">antognolli+webkit</who>
    <bug_when>2011-08-23 12:53:36 -0700</bug_when>
    <thetext>Created attachment 104895
Move FontGtk.cpp to FontPango.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455628</commentid>
    <comment_count>7</comment_count>
      <attachid>104896</attachid>
    <who name="Rafael Antognolli">antognolli+webkit</who>
    <bug_when>2011-08-23 12:54:05 -0700</bug_when>
    <thetext>Created attachment 104896
Move FontEfl.cpp to FontFreeType.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455631</commentid>
    <comment_count>8</comment_count>
      <attachid>104898</attachid>
    <who name="Rafael Antognolli">antognolli+webkit</who>
    <bug_when>2011-08-23 12:54:37 -0700</bug_when>
    <thetext>Created attachment 104898
Add replacement functions for gdk ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455635</commentid>
    <comment_count>9</comment_count>
      <attachid>104899</attachid>
    <who name="Rafael Antognolli">antognolli+webkit</who>
    <bug_when>2011-08-23 12:55:47 -0700</bug_when>
    <thetext>Created attachment 104899
Make GTK build link with PangoUtilities.cpp too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455637</commentid>
    <comment_count>10</comment_count>
    <who name="Rafael Antognolli">antognolli+webkit</who>
    <bug_when>2011-08-23 12:58:21 -0700</bug_when>
    <thetext>I created the pango/PangoUtilities.cpp file, with the needed functions, and added another one to cairo/CairoUtilites.cpp. Of course I can move it to an efl/ specific directory, but I think it&apos;s useful for the GTK port too.

The patches are split based on what they do, but I can split them even more if necessary or just merge all of them (or open a bug for each of them).

What do you think about these patches? If they are ok, I&apos;m going to send the final versions with respective changelogs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455817</commentid>
    <comment_count>11</comment_count>
      <attachid>104898</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-08-23 16:46:00 -0700</bug_when>
    <thetext>Comment on attachment 104898
Add replacement functions for gdk ones.

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

&gt; Source/WebCore/platform/graphics/pango/FontPango.cpp:50
&gt; +#ifdef GTK_API_VERSION_2
&gt;  #include &lt;gdk/gdk.h&gt;
&gt; +#else
&gt; +#include &quot;PangoUtilities.h&quot;
&gt; +#endif

This should be split into a separate block.

&gt; Source/WebCore/platform/graphics/pango/FontPango.cpp:246
&gt; +#ifdef GTK_API_VERSION_2
&gt;          gdk_cairo_region(context, renderRegion);
&gt; +#else
&gt; +        appendRegionToCairoContext(context, renderRegion);
&gt; +#endif

This isn&apos;t correct, because it will have GTK+ 3.x use appendRegionToCairoContext and I don&apos;t think that&apos;s what you want. If you can use PLATFORM(GTK) or USE(GTK), that would be better.

&gt; Source/WebCore/platform/graphics/pango/PangoUtilities.cpp:6
&gt; +/*
&gt; + * Copyright (C) 2000 Red Hat, Inc.
&gt; + * Copyright (C) 2011 ProFUSION embedded systems
&gt; + *
&gt; + * This library is free software; you can redistribute it and/or
&gt; + * modify it under the terms of the GNU Lesser General Public

Where is this code from. What license was it originally under?

&gt; Source/WebCore/platform/graphics/pango/PangoUtilities.cpp:37
&gt; +    PangoRectangle logical_rect;
&gt; +    PangoLayoutLine* line = pango_layout_iter_get_line_readonly(iter);
&gt; +    cairo_region_t* clip_region = cairo_region_create();
&gt; +    pango_layout_iter_get_line_extents(iter, NULL, &amp;logical_rect);
&gt; +    int baseline = pango_layout_iter_get_baseline(iter);
&gt; +
&gt; +    int i = 0;
&gt; +    while (i &lt; n_ranges) {
&gt; +        int *pixel_ranges = NULL;
&gt; +        int n_pixel_ranges = 0;

This code isn&apos;t in WebKit style.

&gt; Source/WebCore/platform/graphics/pango/PangoUtilities.h:27
&gt; +#include &lt;cairo.h&gt;
&gt; +#include &lt;pango/pango.h&gt;
&gt; +

Typically we try to avoid system includes in headers if possible.

&gt; Source/WebCore/platform/graphics/pango/PangoUtilities.h:30
&gt; +cairo_region_t* pangoLayoutLineGetClipRegion(PangoLayoutLine* line, int x_origin, int y_origin, const int* index_ranges, int n_ranges);

Usually for function names we try to have the verb first like, getClipRegionFromPangoLayoutLine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455818</commentid>
    <comment_count>12</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-08-23 16:47:34 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=104899) [details]
&gt; Make GTK build link with PangoUtilities.cpp too.

Why is this patch necessary. PangoUtilities just contains a copy-and-pasted version of a GDK function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458244</commentid>
    <comment_count>13</comment_count>
    <who name="Rafael Antognolli">antognolli+webkit</who>
    <bug_when>2011-08-29 09:26:12 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 104898 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=104898&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/pango/FontPango.cpp:50
&gt; &gt; +#ifdef GTK_API_VERSION_2
&gt; &gt;  #include &lt;gdk/gdk.h&gt;
&gt; &gt; +#else
&gt; &gt; +#include &quot;PangoUtilities.h&quot;
&gt; &gt; +#endif
&gt; 
&gt; This should be split into a separate block.

Ok.

&gt; &gt; Source/WebCore/platform/graphics/pango/FontPango.cpp:246
&gt; &gt; +#ifdef GTK_API_VERSION_2
&gt; &gt;          gdk_cairo_region(context, renderRegion);
&gt; &gt; +#else
&gt; &gt; +        appendRegionToCairoContext(context, renderRegion);
&gt; &gt; +#endif
&gt; 
&gt; This isn&apos;t correct, because it will have GTK+ 3.x use appendRegionToCairoContext and I don&apos;t think that&apos;s what you want. If you can use PLATFORM(GTK) or USE(GTK), that would be better.

Ok, I thought it would be good for GTK to don&apos;t use Gdk functions too (I understood that you were moving away from it). Anyway, then I&apos;m not changing the GTK parts of the code on the next patch.

&gt; &gt; Source/WebCore/platform/graphics/pango/PangoUtilities.cpp:6
&gt; &gt; +/*
&gt; &gt; + * Copyright (C) 2000 Red Hat, Inc.
&gt; &gt; + * Copyright (C) 2011 ProFUSION embedded systems
&gt; &gt; + *
&gt; &gt; + * This library is free software; you can redistribute it and/or
&gt; &gt; + * modify it under the terms of the GNU Lesser General Public
&gt; 
&gt; Where is this code from. What license was it originally under?

It&apos;s from gdk-pango, and the license is this one (LGPL-2). Do you mean that I should reference the source?

&gt; &gt; Source/WebCore/platform/graphics/pango/PangoUtilities.cpp:37
&gt; &gt; +    PangoRectangle logical_rect;
&gt; &gt; +    PangoLayoutLine* line = pango_layout_iter_get_line_readonly(iter);
&gt; &gt; +    cairo_region_t* clip_region = cairo_region_create();
&gt; &gt; +    pango_layout_iter_get_line_extents(iter, NULL, &amp;logical_rect);
&gt; &gt; +    int baseline = pango_layout_iter_get_baseline(iter);
&gt; &gt; +
&gt; &gt; +    int i = 0;
&gt; &gt; +    while (i &lt; n_ranges) {
&gt; &gt; +        int *pixel_ranges = NULL;
&gt; &gt; +        int n_pixel_ranges = 0;
&gt; 
&gt; This code isn&apos;t in WebKit style.

Ok, sorry for that.

&gt; &gt; Source/WebCore/platform/graphics/pango/PangoUtilities.h:27
&gt; &gt; +#include &lt;cairo.h&gt;
&gt; &gt; +#include &lt;pango/pango.h&gt;
&gt; &gt; +
&gt; 
&gt; Typically we try to avoid system includes in headers if possible.

Ok, moving this to .cpp

&gt; &gt; Source/WebCore/platform/graphics/pango/PangoUtilities.h:30
&gt; &gt; +cairo_region_t* pangoLayoutLineGetClipRegion(PangoLayoutLine* line, int x_origin, int y_origin, const int* index_ranges, int n_ranges);
&gt; 
&gt; Usually for function names we try to have the verb first like, getClipRegionFromPangoLayoutLine.

Right.

Thanks a lot for reviewing, I&apos;m updating the patch and sending it again soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458246</commentid>
    <comment_count>14</comment_count>
    <who name="Rafael Antognolli">antognolli+webkit</who>
    <bug_when>2011-08-29 09:27:58 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #9)
&gt; &gt; Created an attachment (id=104899) [details] [details]
&gt; &gt; Make GTK build link with PangoUtilities.cpp too.
&gt; 
&gt; Why is this patch necessary. PangoUtilities just contains a copy-and-pasted version of a GDK function.

Because I thought it would be better to use the functions from PangoUtilities instead of GDK. Please don&apos;t consider this patch, as I told above I&apos;m not changing GTK anymore on the next ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461224</commentid>
    <comment_count>15</comment_count>
      <attachid>106133</attachid>
    <who name="Rafael Antognolli">antognolli+webkit</who>
    <bug_when>2011-09-02 08:06:12 -0700</bug_when>
    <thetext>Created attachment 106133
Move FontGtk.cpp to FontPango.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461227</commentid>
    <comment_count>16</comment_count>
      <attachid>106136</attachid>
    <who name="Rafael Antognolli">antognolli+webkit</who>
    <bug_when>2011-09-02 08:07:05 -0700</bug_when>
    <thetext>Created attachment 106136
Move FontEfl.cpp to FontFreeType.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461228</commentid>
    <comment_count>17</comment_count>
      <attachid>106137</attachid>
    <who name="Rafael Antognolli">antognolli+webkit</who>
    <bug_when>2011-09-02 08:08:57 -0700</bug_when>
    <thetext>Created attachment 106137
Add replacement functions for gdk ones.

Now I passed check-webkit-style on the patch, there&apos;s no complaint from it anymore. Please check if the mention about where the code comes from is correct. And thanks again for reviewing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461289</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-02 10:12:23 -0700</bug_when>
    <thetext>Attachment 106133 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/graphics/pango/FontPango.cpp:337:  Missing space after ,  [whitespace/comma] [3]
Source/WebCore/platform/graphics/pango/FontPango.cpp:355:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/graphics/pango/FontPango.cpp:426:  x_pos is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 3 in 3 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>461322</commentid>
    <comment_count>19</comment_count>
    <who name="Rafael Antognolli">antognolli+webkit</who>
    <bug_when>2011-09-02 10:51:56 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Attachment 106133 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
&gt; 
&gt; Source/WebCore/platform/graphics/pango/FontPango.cpp:337:  Missing space after ,  [whitespace/comma] [3]
&gt; Source/WebCore/platform/graphics/pango/FontPango.cpp:355:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
&gt; Source/WebCore/platform/graphics/pango/FontPango.cpp:426:  x_pos is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; Total errors found: 3 in 3 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

I didn&apos;t change this file on this patch, these errors were already there. Should I fix them too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462598</commentid>
    <comment_count>20</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-09-06 09:37:48 -0700</bug_when>
    <thetext>(In reply to comment #19)

&gt; I didn&apos;t change this file on this patch, these errors were already there. Should I fix them too?

Yes, please fix the other errors since you&apos;re touching the entire file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462600</commentid>
    <comment_count>21</comment_count>
      <attachid>106136</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-09-06 09:41:10 -0700</bug_when>
    <thetext>Comment on attachment 106136
Move FontEfl.cpp to FontFreeType.cpp

The internals of the GrahpicsContext are orthogonal to the font engine, thus I do not believe this patch makes sense. GTK+ uses Freetype for font layout and rendering, yet this file does not apply to it. I think this file is very particular to the EFL port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462938</commentid>
    <comment_count>22</comment_count>
      <attachid>106503</attachid>
    <who name="Rafael Antognolli">antognolli+webkit</who>
    <bug_when>2011-09-06 15:41:10 -0700</bug_when>
    <thetext>Created attachment 106503
Move FontGtk.cpp to FontPango.cpp

This patch contains the fixes so that webkit-check-style won&apos;t complain anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462944</commentid>
    <comment_count>23</comment_count>
      <attachid>106505</attachid>
    <who name="Rafael Antognolli">antognolli+webkit</who>
    <bug_when>2011-09-06 15:43:20 -0700</bug_when>
    <thetext>Created attachment 106505
Make EFL build use the right file

Now I don&apos;t rename the file anymore, just make the EFL build system use it in case we are not using Pango.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462948</commentid>
    <comment_count>24</comment_count>
      <attachid>106506</attachid>
    <who name="Rafael Antognolli">antognolli+webkit</who>
    <bug_when>2011-09-06 15:44:22 -0700</bug_when>
    <thetext>Created attachment 106506
Add replacement functions for gdk ones.

Just rebased the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464144</commentid>
    <comment_count>25</comment_count>
    <who name="Rafael Antognolli">antognolli+webkit</who>
    <bug_when>2011-09-08 10:35:05 -0700</bug_when>
    <thetext>Thanks for the review!
What about the two other patches?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464465</commentid>
    <comment_count>26</comment_count>
      <attachid>106506</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-09-08 16:07:30 -0700</bug_when>
    <thetext>Comment on attachment 106506
Add replacement functions for gdk ones.

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

&gt; Source/WebCore/platform/graphics/cairo/CairoUtilities.cpp:89
&gt; +    const int nBoxes = cairo_region_num_rectangles(region);

nBoxes -&gt; rectCount?

&gt; Source/WebCore/platform/graphics/cairo/CairoUtilities.cpp:94
&gt; +        cairo_rectangle_int_t box;
&gt; +        cairo_region_get_rectangle(region, i, &amp;box);
&gt; +        cairo_rectangle(to, box.x, box.y, box.width, box.height);
&gt; +    }

box -&gt; rect?

&gt; Source/WebCore/platform/graphics/pango/PangoUtilities.cpp:32
&gt; +static cairo_region_t* getLineClipRegionFromLayoutIter(PangoLayoutIter *iter, int xOrigin, int yOrigin, const int *indexRanges, int nRanges)

The asterisk on indexRanges should be on the type name.

&gt; Source/WebCore/platform/graphics/pango/PangoUtilities.cpp:43
&gt; +        int nPixelRanges = 0;

nPixelRange -&gt; pixelRangeCount.

&gt; Source/WebCore/platform/graphics/pango/PangoUtilities.cpp:71
&gt; +cairo_region_t* getClipRegionFromPangoLayoutLine(PangoLayoutLine* line, int xOrigin, int yOrigin, const int* indexRanges, int nRanges)

Instead of two variables to get the origin, I suggest using a const IntPoint&amp;. It looks like the origin is always 0, 0? Perhaps just ditch the parameters altogether. nRanges -&gt; rangeCount. Please try to avoid not-well-known abbreviations.

&gt; Source/WebCore/platform/graphics/pango/PangoUtilities.h:31
&gt; +cairo_region_t* getClipRegionFromPangoLayoutLine(PangoLayoutLine*, int, int, const int*, int);

You need the variable names here for generic types (int and int*).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464466</commentid>
    <comment_count>27</comment_count>
      <attachid>106503</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-09-08 16:08:28 -0700</bug_when>
    <thetext>Comment on attachment 106503
Move FontGtk.cpp to FontPango.cpp

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

&gt; Source/WebCore/ChangeLog:29
&gt; +        (WebCore::destroyPangoRegion):
&gt; +        (WebCore::getPangoRegionExtents):
&gt; +        (WebCore::utf16ToUtf8):
&gt; +        (WebCore::convertUniCharToUTF8):
&gt; +        (WebCore::setPangoAttributes):
&gt; +        (WebCore::Font::canReturnFallbackFontsForComplexText):
&gt; +        (WebCore::Font::canExpandAroundIdeographsInComplexText):
&gt; +        (WebCore::drawGlyphsShadow):
&gt; +        (WebCore::Font::drawComplexText):
&gt; +        (WebCore::Font::drawEmphasisMarksForComplexText):
&gt; +        (WebCore::getDefaultPangoLayout):
&gt; +        (WebCore::Font::floatWidthForComplexText):
&gt; +        (WebCore::Font::offsetForPositionForComplexText):
&gt; +        (WebCore::Font::selectionRectForComplexText):
&gt; +

You can just remove these lines, since you aren&apos;t filling them in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464640</commentid>
    <comment_count>28</comment_count>
      <attachid>106506</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-09-08 21:52:05 -0700</bug_when>
    <thetext>Comment on attachment 106506
Add replacement functions for gdk ones.

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

&gt; Source/cmake/FindPango.cmake:43
&gt;  set(Pango_PROCESS_INCLUDES Pango_INCLUDE_DIR Freetype_INCLUDE_DIRS)

I think you need to fix FreetypeXXX with PangoXXX as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464801</commentid>
    <comment_count>29</comment_count>
      <attachid>106872</attachid>
    <who name="Rafael Antognolli">antognolli+webkit</who>
    <bug_when>2011-09-09 08:16:46 -0700</bug_when>
    <thetext>Created attachment 106872
Move FontGtk.cpp to FontPango.cpp

Remove the empty description lines from ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464804</commentid>
    <comment_count>30</comment_count>
      <attachid>106873</attachid>
    <who name="Rafael Antognolli">antognolli+webkit</who>
    <bug_when>2011-09-09 08:22:43 -0700</bug_when>
    <thetext>Created attachment 106873
Add replacement functions for gdk ones.

I changed the function to receive only indexRange, with no origin, as you requested, and no rangeCount since it&apos;s always one range too. Is it ok now?

Gyuyoung, I didn&apos;t understand your comment, what do you want me to change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464970</commentid>
    <comment_count>31</comment_count>
      <attachid>106873</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-09-09 12:17:47 -0700</bug_when>
    <thetext>Comment on attachment 106873
Add replacement functions for gdk ones.

Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464988</commentid>
    <comment_count>32</comment_count>
      <attachid>106873</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-09 12:45:54 -0700</bug_when>
    <thetext>Comment on attachment 106873
Add replacement functions for gdk ones.

Rejecting attachment 106873 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
at 234.
Hunk #4 FAILED at 256.
Hunk #5 FAILED at 291.
Hunk #6 FAILED at 301.
6 out of 6 hunks FAILED -- saving rejects to file Source/WebCore/platform/graphics/pango/FontPango.cpp.rej
patching file Source/WebCore/platform/graphics/pango/PangoUtilities.cpp
patching file Source/WebCore/platform/graphics/pango/PangoUtilities.h
patching file Source/cmake/FindPango.cmake

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Martin Robinson&apos;, u&apos;--...&quot; exit_code: 1

Full output: http://queues.webkit.org/results/9621969</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465029</commentid>
    <comment_count>33</comment_count>
      <attachid>106872</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-09 14:39:10 -0700</bug_when>
    <thetext>Comment on attachment 106872
Move FontGtk.cpp to FontPango.cpp

Clearing flags on attachment: 106872

Committed r94874: &lt;http://trac.webkit.org/changeset/94874&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465048</commentid>
    <comment_count>34</comment_count>
      <attachid>106873</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-09 15:05:09 -0700</bug_when>
    <thetext>Comment on attachment 106873
Add replacement functions for gdk ones.

Clearing flags on attachment: 106873

Committed r94876: &lt;http://trac.webkit.org/changeset/94876&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465079</commentid>
    <comment_count>35</comment_count>
      <attachid>106505</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-09 16:13:19 -0700</bug_when>
    <thetext>Comment on attachment 106505
Make EFL build use the right file

Clearing flags on attachment: 106505

Committed r94886: &lt;http://trac.webkit.org/changeset/94886&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465080</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-09 16:13:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466800</commentid>
    <comment_count>37</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-09-13 20:28:15 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; Created an attachment (id=106873) [details]

&gt; Gyuyoung, I didn&apos;t understand your comment, what do you want me to change?

I file a bug for my comment. 
https://bugs.webkit.org/show_bug.cgi?id=68052</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104895</attachid>
            <date>2011-08-23 12:53:36 -0700</date>
            <delta_ts>2011-09-02 08:06:12 -0700</delta_ts>
            <desc>Move FontGtk.cpp to FontPango.cpp</desc>
            <filename>0001-moving-FontGtk-FontPango.patch</filename>
            <type>text/plain</type>
            <size>34017</size>
            <attacher name="Rafael Antognolli">antognolli+webkit</attacher>
            
              <data encoding="base64">RnJvbSA2MjdlMjhmODlhYmIxYTJkNzliZTIxMTFjNmJmZGFlY2IxNGRmNTQzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSYWZhZWwgQW50b2dub2xsaSA8YW50b2dub2xsaUBwcm9mdXNp
b24ubW9iaT4KRGF0ZTogRnJpLCAxOSBBdWcgMjAxMSAxNzo1MDo1MSAtMDMwMApTdWJqZWN0OiBb
UEFUQ0ggMS80XSBtb3ZpbmcgRm9udEd0ayAtPiBGb250UGFuZ28uCgotLS0KIFNvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAgIHwgICAgNCArLQogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRHdGsuY3BwICAgfCAgNDQ0IC0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAuLi4vV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250
UGFuZ28uY3BwICB8ICA0NDQgKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwg
NDQ3IGluc2VydGlvbnMoKyksIDQ0NSBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEd0ay5jcHAKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGFu
Z28uY3BwCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBi
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggM2FjMjUyNS4uNzg3ZjEw
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0zOTQ0LDcgKzM5NDQsNiBAQCB3
ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmgg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250R3RrLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVz
LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcCBc
CkBAIC00MDcwLDYgKzQwNjksNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0dseXBoUGFnZVRyZWVOb2RlRnJlZVR5cGUu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVG
b250RGF0YUZyZWVUeXBlLmNwcAogd2ViY29yZWd0a19zb3VyY2VzICs9IFwKKwlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGFuZ28uY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUu
Y3BwCiBlbmRpZiAjIEVORCBVU0VfRlJFRVRZUEUKIApAQCAtNDA4NCw2ICs0MDg0LDggQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5n
by9Gb250UGxhdGZvcm1EYXRhLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3BhbmdvL0dseXBoUGFnZVRyZWVOb2RlUGFuZ28uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9wYW5nby9TaW1wbGVGb250RGF0YVBhbmdvLmNwcAord2ViY29yZWd0a19z
b3VyY2VzICs9IFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250
UGFuZ28uY3BwCiBlbmRpZiAjIEVORCBVU0VfUEFOR08KIAogIyAtLS0tCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEd0ay5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEd0ay5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDgxOGQ0MmUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDQ0ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBt
aWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChjKSAyMDA3IEhpcm95dWtpIElrZXpv
ZQotICogQ29weXJpZ2h0IChjKSAyMDA3IEtvdWhlaSBTdXRvdQotICogQ29weXJpZ2h0IChDKSAy
MDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggWGFu
IExvcGV6IDx4YW5AZ25vbWUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQu
Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJGb250LmgiCi0KLSNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgotI2luY2x1ZGUg
IkdPd25QdHIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVk
ZSAiU2hhZG93Qmx1ci5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSAi
VGV4dFJ1bi5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8Z2RrL2dkay5oPgotI2lu
Y2x1ZGUgPHBhbmdvL3BhbmdvLmg+Ci0jaW5jbHVkZSA8cGFuZ28vcGFuZ29jYWlyby5oPgotCi0j
aWYgVVNFKEZSRUVUWVBFKQotI2luY2x1ZGUgPHBhbmdvL3BhbmdvZmMtZm9udG1hcC5oPgotI2Vu
ZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi10
eXBlZGVmIEdka1JlZ2lvbiogUGFuZ29SZWdpb25UeXBlOwotCi12b2lkIGRlc3Ryb3lQYW5nb1Jl
Z2lvbihQYW5nb1JlZ2lvblR5cGUgcmVnaW9uKQotewotICAgIGdka19yZWdpb25fZGVzdHJveShy
ZWdpb24pOwotfQotCi1JbnRSZWN0IGdldFBhbmdvUmVnaW9uRXh0ZW50cyhQYW5nb1JlZ2lvblR5
cGUgcmVnaW9uKQotewotICAgIEdka1JlY3RhbmdsZSByZWN0YW5nbGU7Ci0gICAgZ2RrX3JlZ2lv
bl9nZXRfY2xpcGJveChyZWdpb24sICZyZWN0YW5nbGUpOwotICAgIHJldHVybiBJbnRSZWN0KHJl
Y3RhbmdsZS54LCByZWN0YW5nbGUueSwgcmVjdGFuZ2xlLndpZHRoLCByZWN0YW5nbGUuaGVpZ2h0
KTsKLX0KLSNlbHNlCi10eXBlZGVmIGNhaXJvX3JlZ2lvbl90KiBQYW5nb1JlZ2lvblR5cGU7Ci0K
LXZvaWQgZGVzdHJveVBhbmdvUmVnaW9uKFBhbmdvUmVnaW9uVHlwZSByZWdpb24pCi17Ci0gICAg
Y2Fpcm9fcmVnaW9uX2Rlc3Ryb3kocmVnaW9uKTsKLX0KLQotSW50UmVjdCBnZXRQYW5nb1JlZ2lv
bkV4dGVudHMoUGFuZ29SZWdpb25UeXBlIHJlZ2lvbikKLXsKLSAgICBjYWlyb19yZWN0YW5nbGVf
aW50X3QgcmVjdGFuZ2xlOwotICAgIGNhaXJvX3JlZ2lvbl9nZXRfZXh0ZW50cyhyZWdpb24sICZy
ZWN0YW5nbGUpOwotICAgIHJldHVybiBJbnRSZWN0KHJlY3RhbmdsZS54LCByZWN0YW5nbGUueSwg
cmVjdGFuZ2xlLndpZHRoLCByZWN0YW5nbGUuaGVpZ2h0KTsKLX0KLSNlbmRpZgotCi0jZGVmaW5l
IElTX0hJR0hfU1VSUk9HQVRFKHUpICAoKFVDaGFyKSh1KSA+PSAoVUNoYXIpMHhkODAwICYmIChV
Q2hhcikodSkgPD0gKFVDaGFyKTB4ZGJmZikKLSNkZWZpbmUgSVNfTE9XX1NVUlJPR0FURSh1KSAg
KChVQ2hhcikodSkgPj0gKFVDaGFyKTB4ZGMwMCAmJiAoVUNoYXIpKHUpIDw9IChVQ2hhcikweGRm
ZmYpCi0KLXN0YXRpYyBnY2hhciogdXRmMTZUb1V0ZjgoY29uc3QgVUNoYXIqIGFUZXh0LCBnaW50
IGFMZW5ndGgsIGdpbnQgJmxlbmd0aCkKLXsKLSAgICBnYm9vbGVhbiBuZWVkQ29weSA9IEZBTFNF
OwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhTGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYg
KCFhVGV4dFtpXSB8fCBJU19MT1dfU1VSUk9HQVRFKGFUZXh0W2ldKSkgewotICAgICAgICAgICAg
bmVlZENvcHkgPSBUUlVFOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gCi0KLSAgICAg
ICAgaWYgKElTX0hJR0hfU1VSUk9HQVRFKGFUZXh0W2ldKSkgewotICAgICAgICAgICAgaWYgKGkg
PCBhTGVuZ3RoIC0gMSAmJiBJU19MT1dfU1VSUk9HQVRFKGFUZXh0W2krMV0pKQotICAgICAgICAg
ICAgICAgIGkrKzsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG5lZWRDb3B5
ID0gVFJVRTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIEdPd25QdHI8VUNoYXI+IGNvcGllZFN0cmluZzsKLSAgICBpZiAobmVl
ZENvcHkpIHsKLSAgICAgICAgLyogUGFuZ28gZG9lc24ndCBjb3JyZWN0bHkgaGFuZGxlIG51bHMu
ICBXZSBjb252ZXJ0IHRoZW0gdG8gMHhmZi4gKi8KLSAgICAgICAgLyogQWxzbyAidmFsaWRhdGUi
IFVURi0xNiB0ZXh0IHRvIG1ha2Ugc3VyZSBjb252ZXJzaW9uIGRvZXNuJ3QgZmFpbC4gKi8KLQot
ICAgICAgICBjb3BpZWRTdHJpbmcuc2V0KHN0YXRpY19jYXN0PFVDaGFyKj4oZ19tZW1kdXAoYVRl
eHQsIGFMZW5ndGggKiBzaXplb2YoYVRleHRbMF0pKSkpOwotICAgICAgICBVQ2hhciogcCA9IGNv
cGllZFN0cmluZy5nZXQoKTsKLQotICAgICAgICAvKiBkb24ndCBuZWVkIHRvIHJlc2V0IGkgKi8K
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhTGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAg
IGlmICghcFtpXSB8fCBJU19MT1dfU1VSUk9HQVRFKHBbaV0pKQotICAgICAgICAgICAgICAgIHBb
aV0gPSAweEZGRkQ7Ci0gICAgICAgICAgICBlbHNlIGlmIChJU19ISUdIX1NVUlJPR0FURShwW2ld
KSkgewotICAgICAgICAgICAgICAgIGlmIChpIDwgYUxlbmd0aCAtIDEgJiYgSVNfTE9XX1NVUlJP
R0FURShhVGV4dFtpKzFdKSkKLSAgICAgICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcFtpXSA9IDB4RkZGRDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIGFUZXh0ID0gcDsKLSAgICB9Ci0KLSAgICBnY2hhciog
dXRmOFRleHQ7Ci0gICAgZ2xvbmcgaXRlbXNXcml0dGVuOwotICAgIHV0ZjhUZXh0ID0gZ191dGYx
Nl90b191dGY4KHN0YXRpY19jYXN0PGNvbnN0IGd1bmljaGFyMio+KGFUZXh0KSwgYUxlbmd0aCwg
MCwgJml0ZW1zV3JpdHRlbiwgMCk7Ci0gICAgbGVuZ3RoID0gaXRlbXNXcml0dGVuOwotCi0gICAg
cmV0dXJuIHV0ZjhUZXh0OwotfQotCi1zdGF0aWMgZ2NoYXIqIGNvbnZlcnRVbmlDaGFyVG9VVEY4
KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBnaW50IGxlbmd0aCwgaW50IGZyb20sIGludCB0bykK
LXsKLSAgICBnaW50IG5ld0xlbmd0aCA9IDA7Ci0gICAgR093blB0cjxnY2hhcj4gdXRmOFRleHQo
dXRmMTZUb1V0ZjgoY2hhcmFjdGVycywgbGVuZ3RoLCBuZXdMZW5ndGgpKTsKLSAgICBpZiAoIXV0
ZjhUZXh0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGdjaGFyKiBwb3MgPSB1dGY4VGV4dC5n
ZXQoKTsKLSAgICBpZiAoZnJvbSA+IDApIHsKLSAgICAgICAgLy8gZGlzY2FyZCB0aGUgZmlyc3Qg
J2Zyb20nIGNoYXJhY3RlcnMKLSAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBkbyB0aGlzIGJl
Zm9yZSB0aGUgY29udmVyc2lvbiBwcm9iYWJseQotICAgICAgICBwb3MgPSBnX3V0Zjhfb2Zmc2V0
X3RvX3BvaW50ZXIodXRmOFRleHQuZ2V0KCksIGZyb20pOwotICAgIH0KLQotICAgIGdpbnQgbGVu
ID0gc3RybGVuKHBvcyk7Ci0gICAgR1N0cmluZyogcmV0ID0gZ19zdHJpbmdfbmV3X2xlbihOVUxM
LCBsZW4pOwotCi0gICAgLy8gcmVwbGFjZSBsaW5lIGJyZWFrIGJ5IHNwYWNlCi0gICAgd2hpbGUg
KGxlbiA+IDApIHsKLSAgICAgICAgZ2ludCBpbmRleCwgc3RhcnQ7Ci0gICAgICAgIHBhbmdvX2Zp
bmRfcGFyYWdyYXBoX2JvdW5kYXJ5KHBvcywgbGVuLCAmaW5kZXgsICZzdGFydCk7Ci0gICAgICAg
IGdfc3RyaW5nX2FwcGVuZF9sZW4ocmV0LCBwb3MsIGluZGV4KTsKLSAgICAgICAgaWYgKGluZGV4
ID09IHN0YXJ0KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGdfc3RyaW5nX2FwcGVuZF9j
KHJldCwgJyAnKTsKLSAgICAgICAgcG9zICs9IHN0YXJ0OwotICAgICAgICBsZW4gLT0gc3RhcnQ7
Ci0gICAgfQotICAgIHJldHVybiBnX3N0cmluZ19mcmVlKHJldCwgRkFMU0UpOwotfQotCi1zdGF0
aWMgdm9pZCBzZXRQYW5nb0F0dHJpYnV0ZXMoY29uc3QgRm9udCogZm9udCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBQYW5nb0xheW91dCogbGF5b3V0KQotewotI2lmIFVTRShGUkVFVFlQRSkKLSAgICBp
ZiAoZm9udC0+cHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkubV9wYXR0ZXJuKSB7Ci0gICAg
ICAgIFBhbmdvRm9udERlc2NyaXB0aW9uKiBkZXNjID0gcGFuZ29fZmNfZm9udF9kZXNjcmlwdGlv
bl9mcm9tX3BhdHRlcm4oZm9udC0+cHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkubV9wYXR0
ZXJuLmdldCgpLCBGQUxTRSk7Ci0gICAgICAgIHBhbmdvX2xheW91dF9zZXRfZm9udF9kZXNjcmlw
dGlvbihsYXlvdXQsIGRlc2MpOwotICAgICAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUo
ZGVzYyk7Ci0gICAgfQotI2VsaWYgVVNFKFBBTkdPKQotICAgIGlmIChmb250LT5wcmltYXJ5Rm9u
dCgpLT5wbGF0Zm9ybURhdGEoKS5tX2ZvbnQpIHsKLSAgICAgICAgUGFuZ29Gb250RGVzY3JpcHRp
b24qIGRlc2MgPSBwYW5nb19mb250X2Rlc2NyaWJlKGZvbnQtPnByaW1hcnlGb250KCktPnBsYXRm
b3JtRGF0YSgpLm1fZm9udCk7Ci0gICAgICAgIHBhbmdvX2xheW91dF9zZXRfZm9udF9kZXNjcmlw
dGlvbihsYXlvdXQsIGRlc2MpOwotICAgICAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUo
ZGVzYyk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBwYW5nb19sYXlvdXRfc2V0X2F1dG9fZGlyKGxh
eW91dCwgRkFMU0UpOwotCi0gICAgUGFuZ29Db250ZXh0KiBwYW5nb0NvbnRleHQgPSBwYW5nb19s
YXlvdXRfZ2V0X2NvbnRleHQobGF5b3V0KTsKLSAgICBQYW5nb0RpcmVjdGlvbiBkaXJlY3Rpb24g
PSBydW4ucnRsKCkgPyBQQU5HT19ESVJFQ1RJT05fUlRMIDogUEFOR09fRElSRUNUSU9OX0xUUjsK
LSAgICBwYW5nb19jb250ZXh0X3NldF9iYXNlX2RpcihwYW5nb0NvbnRleHQsIGRpcmVjdGlvbik7
Ci0gICAgUGFuZ29BdHRyTGlzdCogbGlzdCA9IHBhbmdvX2F0dHJfbGlzdF9uZXcoKTsKLSAgICBQ
YW5nb0F0dHJpYnV0ZSogYXR0cjsKLQotICAgIGF0dHIgPSBwYW5nb19hdHRyX3NpemVfbmV3X2Fi
c29sdXRlKGZvbnQtPnBpeGVsU2l6ZSgpICogUEFOR09fU0NBTEUpOwotICAgIGF0dHItPmVuZF9p
bmRleCA9IEdfTUFYVUlOVDsKLSAgICBwYW5nb19hdHRyX2xpc3RfaW5zZXJ0X2JlZm9yZShsaXN0
LCBhdHRyKTsKLQotICAgIGlmICghcnVuLnNwYWNpbmdEaXNhYmxlZCgpKSB7Ci0gICAgICAgIGF0
dHIgPSBwYW5nb19hdHRyX2xldHRlcl9zcGFjaW5nX25ldyhmb250LT5sZXR0ZXJTcGFjaW5nKCkg
KiBQQU5HT19TQ0FMRSk7Ci0gICAgICAgIGF0dHItPmVuZF9pbmRleCA9IEdfTUFYVUlOVDsKLSAg
ICAgICAgcGFuZ29fYXR0cl9saXN0X2luc2VydF9iZWZvcmUobGlzdCwgYXR0cik7Ci0gICAgfQot
Ci0gICAgLy8gUGFuZ28gZG9lcyBub3QgeWV0IHN1cHBvcnQgc3ludGhlc2lzaW5nIHNtYWxsIGNh
cHMKLSAgICAvLyBTZWUgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2
MTAKLQotICAgIHBhbmdvX2xheW91dF9zZXRfYXR0cmlidXRlcyhsYXlvdXQsIGxpc3QpOwotICAg
IHBhbmdvX2F0dHJfbGlzdF91bnJlZihsaXN0KTsKLX0KLQotYm9vbCBGb250OjpjYW5SZXR1cm5G
YWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCi17Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCBkcmF3R2x5cGhzU2hhZG93KEdyYXBo
aWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgUGFu
Z29MYXlvdXRMaW5lKiBsYXlvdXRMaW5lLCBQYW5nb1JlZ2lvblR5cGUgcmVuZGVyUmVnaW9uKQot
ewotICAgIFNoYWRvd0JsdXImIHNoYWRvdyA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCktPnNoYWRvd0JsdXIoKTsKLQotICAgIGlmICghKGdyYXBoaWNzQ29udGV4dC0+dGV4dERy
YXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZpbGwpIHx8IHNoYWRvdy50eXBlKCkgPT0gU2hhZG93Qmx1
cjo6Tm9TaGFkb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0UG9pbnQgdG90YWxPZmZz
ZXQocG9pbnQgKyBncmFwaGljc0NvbnRleHQtPnN0YXRlKCkuc2hhZG93T2Zmc2V0KTsKLQotICAg
IC8vIE9wdGltaXplIG5vbi1ibHVycnkgc2hhZG93cywgYnkganVzdCBkcmF3aW5nIHRleHQgd2l0
aG91dCB0aGUgU2hhZG93Qmx1ci4KLSAgICBpZiAoIXNoYWRvdy5tdXN0VXNlU2hhZG93Qmx1cihn
cmFwaGljc0NvbnRleHQpKSB7Ci0gICAgICAgIGNhaXJvX3QqIGNvbnRleHQgPSBncmFwaGljc0Nv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwotICAgICAgICBjYWlyb19zYXZlKGNvbnRl
eHQpOwotICAgICAgICBjYWlyb190cmFuc2xhdGUoY29udGV4dCwgdG90YWxPZmZzZXQueCgpLCB0
b3RhbE9mZnNldC55KCkpOwotCi0gICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY29udGV4
dCwgZ3JhcGhpY3NDb250ZXh0LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKLSAgICAgICAgZ2RrX2Nh
aXJvX3JlZ2lvbihjb250ZXh0LCByZW5kZXJSZWdpb24pOwotICAgICAgICBjYWlyb19jbGlwKGNv
bnRleHQpOwotICAgICAgICBwYW5nb19jYWlyb19zaG93X2xheW91dF9saW5lKGNvbnRleHQsIGxh
eW91dExpbmUpOwotCi0gICAgICAgIGNhaXJvX3Jlc3RvcmUoY29udGV4dCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgZXh0ZW50cyhnZXRQYW5nb1JlZ2lvbkV4dGVu
dHMocmVuZGVyUmVnaW9uKSk7Ci0gICAgZXh0ZW50cy5zZXRMb2NhdGlvbihGbG9hdFBvaW50KHBv
aW50LngoKSwgcG9pbnQueSgpIC0gZXh0ZW50cy5oZWlnaHQoKSkpOwotICAgIGlmIChHcmFwaGlj
c0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3cuYmVnaW5TaGFkb3dMYXllcihncmFwaGlj
c0NvbnRleHQsIGV4dGVudHMpKSB7Ci0gICAgICAgIGNhaXJvX3QqIGNhaXJvU2hhZG93Q29udGV4
dCA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwotICAgICAgICBjYWly
b190cmFuc2xhdGUoY2Fpcm9TaGFkb3dDb250ZXh0LCBwb2ludC54KCksIHBvaW50LnkoKSk7Ci0g
ICAgICAgIHBhbmdvX2NhaXJvX3Nob3dfbGF5b3V0X2xpbmUoY2Fpcm9TaGFkb3dDb250ZXh0LCBs
YXlvdXRMaW5lKTsKLQotICAgICAgICAvLyBXZSBuZWVkIHRoZSBjbGlwcGluZyByZWdpb24gdG8g
YmUgYWN0aXZlIHdoZW4gd2UgYmxpdCB0aGUgYmx1cnJlZCBzaGFkb3cgYmFjaywKLSAgICAgICAg
Ly8gYmVjYXVzZSB3ZSBkb24ndCB3YW50IGFueSBiaXRzIGFuZCBwaWVjZXMgb2YgY2hhcmFjdGVy
cyBvdXQgb2YgcmFuZ2UgdG8gYmUKLSAgICAgICAgLy8gZHJhd24uIFNpbmNlIFNoYWRvd0JsdXIg
ZXhwZWN0cyBhIGNvbnNpc3RlbnQgdHJhbnNmb3JtLCB3ZSBoYXZlIHRvIHVuZG8gdGhlCi0gICAg
ICAgIC8vIHRyYW5zbGF0aW9uIGJlZm9yZSBjYWxsaW5nIGVuZFNoYWRvd0xheWVyIGFzIHdlbGwu
Ci0gICAgICAgIGNhaXJvX3QqIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLT5jcigpOwotICAgICAgICBjYWlyb19zYXZlKGNvbnRleHQpOwotICAgICAgICBjYWly
b190cmFuc2xhdGUoY29udGV4dCwgdG90YWxPZmZzZXQueCgpLCB0b3RhbE9mZnNldC55KCkpOwot
ICAgICAgICBnZGtfY2Fpcm9fcmVnaW9uKGNvbnRleHQsIHJlbmRlclJlZ2lvbik7Ci0gICAgICAg
IGNhaXJvX2NsaXAoY29udGV4dCk7Ci0gICAgICAgIGNhaXJvX3RyYW5zbGF0ZShjb250ZXh0LCAt
dG90YWxPZmZzZXQueCgpLCAtdG90YWxPZmZzZXQueSgpKTsKLQotICAgICAgICBzaGFkb3cuZW5k
U2hhZG93TGF5ZXIoZ3JhcGhpY3NDb250ZXh0KTsKLSAgICAgICAgY2Fpcm9fcmVzdG9yZShjb250
ZXh0KTsKLSAgICB9Ci19Ci0KLXZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgaW50IGZyb20sIGludCB0bykgY29uc3QKLXsKLSNpZiBVU0UoRlJFRVRZUEUpCi0gICAgaWYg
KCFwcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5tX3BhdHRlcm4pIHsKLSAgICAgICAgZHJh
d1NpbXBsZVRleHQoY29udGV4dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8pOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5jcigpOwotICAgIFBhbmdvTGF5b3V0KiBsYXlvdXQgPSBwYW5nb19jYWlyb19j
cmVhdGVfbGF5b3V0KGNyKTsKLSAgICBzZXRQYW5nb0F0dHJpYnV0ZXModGhpcywgcnVuLCBsYXlv
dXQpOwotCi0gICAgZ2NoYXIqIHV0ZjggPSBjb252ZXJ0VW5pQ2hhclRvVVRGOChydW4uY2hhcmFj
dGVycygpLCBydW4ubGVuZ3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7Ci0gICAgcGFuZ29fbGF5b3V0
X3NldF90ZXh0KGxheW91dCwgdXRmOCwgLTEpOwotCi0gICAgLy8gT3VyIGxheW91dHMgYXJlIHNp
bmdsZSBsaW5lCi0gICAgUGFuZ29MYXlvdXRMaW5lKiBsYXlvdXRMaW5lID0gcGFuZ29fbGF5b3V0
X2dldF9saW5lX3JlYWRvbmx5KGxheW91dCwgMCk7Ci0KLSAgICAvLyBHZXQgdGhlIHJlZ2lvbiB3
aGVyZSB0aGlzIHRleHQgd2lsbCBiZSBsYWlkIG91dC4gV2Ugd2lsbCB1c2UgaXQgdG8gY2xpcAot
ICAgIC8vIHRoZSBDYWlybyBjb250ZXh0LCBmb3Igd2hlbiB3ZSBhcmUgb25seSBwYWludGluZyBw
YXJ0IG9mIHRoZSB0ZXh0IHJ1biBhbmQKLSAgICAvLyB0byBjYWxjdWxhdGUgdGhlIHNpemUgb2Yg
dGhlIHNoYWRvdyBidWZmZXIuCi0gICAgUGFuZ29SZWdpb25UeXBlIHBhcnRpYWxSZWdpb24gPSAw
OwotICAgIGNoYXIqIHN0YXJ0ID0gZ191dGY4X29mZnNldF90b19wb2ludGVyKHV0ZjgsIGZyb20p
OwotICAgIGNoYXIqIGVuZCA9IGdfdXRmOF9vZmZzZXRfdG9fcG9pbnRlcihzdGFydCwgdG8gLSBm
cm9tKTsKLSAgICBpbnQgcmFuZ2VzW10gPSB7c3RhcnQgLSB1dGY4LCBlbmQgLSB1dGY4fTsKLSAg
ICBwYXJ0aWFsUmVnaW9uID0gZ2RrX3BhbmdvX2xheW91dF9saW5lX2dldF9jbGlwX3JlZ2lvbihs
YXlvdXRMaW5lLCAwLCAwLCByYW5nZXMsIDEpOwotCi0gICAgZHJhd0dseXBoc1NoYWRvdyhjb250
ZXh0LCBwb2ludCwgbGF5b3V0TGluZSwgcGFydGlhbFJlZ2lvbik7Ci0KLSAgICBjYWlyb19zYXZl
KGNyKTsKLSAgICBjYWlyb190cmFuc2xhdGUoY3IsIHBvaW50LngoKSwgcG9pbnQueSgpKTsKLQot
ICAgIGZsb2F0IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOwotICAgIGNvbnRleHQtPmZpbGxDb2xv
cigpLmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgIGNhaXJvX3NldF9zb3Vy
Y2VfcmdiYShjciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgIGdka19jYWlyb19yZWdp
b24oY3IsIHBhcnRpYWxSZWdpb24pOwotICAgIGNhaXJvX2NsaXAoY3IpOwotCi0gICAgcGFuZ29f
Y2Fpcm9fc2hvd19sYXlvdXRfbGluZShjciwgbGF5b3V0TGluZSk7Ci0KLSAgICBpZiAoY29udGV4
dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkgewotICAgICAgICBDb2xvciBz
dHJva2VDb2xvciA9IGNvbnRleHQtPnN0cm9rZUNvbG9yKCk7Ci0gICAgICAgIHN0cm9rZUNvbG9y
LmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgICAgICBjYWlyb19zZXRfc291
cmNlX3JnYmEoY3IsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICAgICAgcGFuZ29fY2Fp
cm9fbGF5b3V0X2xpbmVfcGF0aChjciwgbGF5b3V0TGluZSk7Ci0gICAgICAgIGNhaXJvX3NldF9s
aW5lX3dpZHRoKGNyLCBjb250ZXh0LT5zdHJva2VUaGlja25lc3MoKSk7Ci0gICAgICAgIGNhaXJv
X3N0cm9rZShjcik7Ci0gICAgfQotCi0gICAgLy8gUGFuZ28gc29tZXRpbWVzIGxlYXZlcyBiZWhp
bmQgcGF0aHMgd2UgZG9uJ3Qgd2FudAotICAgIGNhaXJvX25ld19wYXRoKGNyKTsKLQotICAgIGRl
c3Ryb3lQYW5nb1JlZ2lvbihwYXJ0aWFsUmVnaW9uKTsKLSAgICBnX2ZyZWUodXRmOCk7Ci0gICAg
Z19vYmplY3RfdW5yZWYobGF5b3V0KTsKLQotICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwotfQotCi12
b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0
KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0
cmluZyYgLyogbWFyayAqLywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBm
cm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotLy8gV2Ugc2hvdWxkIGNyZWF0ZSB0aGUgbGF5b3V0IHdpdGggb3VyIGFjdHVhbCBjb250ZXh0
IGJ1dCB3ZSBjYW4ndCBhY2Nlc3MgaXQgZnJvbSBoZXJlLgotc3RhdGljIFBhbmdvTGF5b3V0KiBn
ZXREZWZhdWx0UGFuZ29MYXlvdXQoY29uc3QgVGV4dFJ1biYgcnVuKQotewotICAgIHN0YXRpYyBQ
YW5nb0ZvbnRNYXAqIG1hcCA9IHBhbmdvX2NhaXJvX2ZvbnRfbWFwX2dldF9kZWZhdWx0KCk7Ci0j
aWYgUEFOR09fVkVSU0lPTl9DSEVDSygxLDIxLDUpCi0gICAgc3RhdGljIFBhbmdvQ29udGV4dCog
cGFuZ29Db250ZXh0ID0gcGFuZ29fZm9udF9tYXBfY3JlYXRlX2NvbnRleHQobWFwKTsKLSNlbHNl
Ci0gICAgLy8gRGVwcmVjYXRlZCBpbiBQYW5nbyAxLjIxLgotICAgIHN0YXRpYyBQYW5nb0NvbnRl
eHQqIHBhbmdvQ29udGV4dCA9IHBhbmdvX2NhaXJvX2ZvbnRfbWFwX2NyZWF0ZV9jb250ZXh0KFBB
TkdPX0NBSVJPX0ZPTlRfTUFQKG1hcCkpOwotI2VuZGlmCi0gICAgUGFuZ29MYXlvdXQqIGxheW91
dCA9IHBhbmdvX2xheW91dF9uZXcocGFuZ29Db250ZXh0KTsKLQotICAgIHJldHVybiBsYXlvdXQ7
Ci19Ci0KLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5
cGhPdmVyZmxvdyogb3ZlcmZsb3cpIGNvbnN0Ci17Ci0jaWYgVVNFKEZSRUVUWVBFKQotICAgIGlm
ICghcHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkubV9wYXR0ZXJuKQotICAgICAgICByZXR1
cm4gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQocnVuLCAwLCBmYWxsYmFja0ZvbnRzLCBvdmVyZmxv
dyk7Ci0jZW5kaWYKLQotICAgIGlmIChydW4ubGVuZ3RoKCkgPT0gMCkKLSAgICAgICAgcmV0dXJu
IDAuMGY7Ci0KLSAgICBQYW5nb0xheW91dCogbGF5b3V0ID0gZ2V0RGVmYXVsdFBhbmdvTGF5b3V0
KHJ1bik7Ci0gICAgc2V0UGFuZ29BdHRyaWJ1dGVzKHRoaXMsIHJ1biwgbGF5b3V0KTsKLQotICAg
IGdjaGFyKiB1dGY4ID0gY29udmVydFVuaUNoYXJUb1VURjgocnVuLmNoYXJhY3RlcnMoKSwgcnVu
Lmxlbmd0aCgpLCAwLCBydW4ubGVuZ3RoKCkpOwotICAgIHBhbmdvX2xheW91dF9zZXRfdGV4dChs
YXlvdXQsIHV0ZjgsIC0xKTsKLQotICAgIGludCB3aWR0aDsKLSAgICBwYW5nb19sYXlvdXRfZ2V0
X3BpeGVsX3NpemUobGF5b3V0LCAmd2lkdGgsIDApOwotCi0gICAgZ19mcmVlKHV0ZjgpOwotICAg
IGdfb2JqZWN0X3VucmVmKGxheW91dCk7Ci0KLSAgICByZXR1cm4gd2lkdGg7Ci19Ci0KLWludCBG
b250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
ZmxvYXQgeEZsb2F0LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAotewotI2lmIFVT
RShGUkVFVFlQRSkKLSAgICBpZiAoIXByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpLm1fcGF0
dGVybikKLSAgICAgICAgcmV0dXJuIG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChydW4s
IHhGbG9hdCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwotI2VuZGlmCi0gICAgLy8gRklYTUU6IFRo
aXMgdHJ1bmNhdGlvbiBpcyBub3QgYSBwcm9ibGVtIGZvciBIVE1MLCBidXQgb25seSBhZmZlY3Rz
IFNWRywgd2hpY2ggcGFzc2VzIGZsb2F0aW5nLXBvaW50IG51bWJlcnMKLSAgICAvLyB0byBGb250
OjpvZmZzZXRGb3JQb3NpdGlvbigpLiBCdWcgaHR0cDovL3dlYmtpdC5vcmcvYi80MDY3MyB0cmFj
a3MgZml4aW5nIHRoaXMgcHJvYmxlbS4KLSAgICBpbnQgeCA9IHN0YXRpY19jYXN0PGludD4oeEZs
b2F0KTsKLQotICAgIFBhbmdvTGF5b3V0KiBsYXlvdXQgPSBnZXREZWZhdWx0UGFuZ29MYXlvdXQo
cnVuKTsKLSAgICBzZXRQYW5nb0F0dHJpYnV0ZXModGhpcywgcnVuLCBsYXlvdXQpOwotCi0gICAg
Z2NoYXIqIHV0ZjggPSBjb252ZXJ0VW5pQ2hhclRvVVRGOChydW4uY2hhcmFjdGVycygpLCBydW4u
bGVuZ3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7Ci0gICAgcGFuZ29fbGF5b3V0X3NldF90ZXh0KGxh
eW91dCwgdXRmOCwgLTEpOwotCi0gICAgaW50IGluZGV4LCB0cmFpbGluZzsKLSAgICBwYW5nb19s
YXlvdXRfeHlfdG9faW5kZXgobGF5b3V0LCB4ICogUEFOR09fU0NBTEUsIDEsICZpbmRleCwgJnRy
YWlsaW5nKTsKLSAgICBnbG9uZyBvZmZzZXQgPSBnX3V0ZjhfcG9pbnRlcl90b19vZmZzZXQodXRm
OCwgdXRmOCArIGluZGV4KTsKLSAgICBpZiAoaW5jbHVkZVBhcnRpYWxHbHlwaHMpCi0gICAgICAg
IG9mZnNldCArPSB0cmFpbGluZzsKLQotICAgIGdfZnJlZSh1dGY4KTsKLSAgICBnX29iamVjdF91
bnJlZihsYXlvdXQpOwotCi0gICAgcmV0dXJuIG9mZnNldDsKLX0KLQotRmxvYXRSZWN0IEZvbnQ6
OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKLXsKLSNpZiBV
U0UoRlJFRVRZUEUpCi0gICAgaWYgKCFwcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5tX3Bh
dHRlcm4pCi0gICAgICAgIHJldHVybiBzZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChydW4sIHBv
aW50LCBoLCBmcm9tLCB0byk7Ci0jZW5kaWYKLQotICAgIFBhbmdvTGF5b3V0KiBsYXlvdXQgPSBn
ZXREZWZhdWx0UGFuZ29MYXlvdXQocnVuKTsKLSAgICBzZXRQYW5nb0F0dHJpYnV0ZXModGhpcywg
cnVuLCBsYXlvdXQpOwotCi0gICAgZ2NoYXIqIHV0ZjggPSBjb252ZXJ0VW5pQ2hhclRvVVRGOChy
dW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7Ci0gICAgcGFu
Z29fbGF5b3V0X3NldF90ZXh0KGxheW91dCwgdXRmOCwgLTEpOwotCi0gICAgY2hhciogc3RhcnQg
PSBnX3V0Zjhfb2Zmc2V0X3RvX3BvaW50ZXIodXRmOCwgZnJvbSk7Ci0gICAgY2hhciogZW5kID0g
Z191dGY4X29mZnNldF90b19wb2ludGVyKHN0YXJ0LCB0byAtIGZyb20pOwotCi0gICAgaWYgKHJ1
bi5sdHIoKSkgewotICAgICAgICBmcm9tID0gc3RhcnQgLSB1dGY4OwotICAgICAgICB0byA9IGVu
ZCAtIHV0Zjg7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZnJvbSA9IGVuZCAtIHV0Zjg7Ci0gICAg
ICAgIHRvID0gc3RhcnQgLSB1dGY4OwotICAgIH0KLQotICAgIFBhbmdvTGF5b3V0TGluZSogbGF5
b3V0TGluZSA9IHBhbmdvX2xheW91dF9nZXRfbGluZV9yZWFkb25seShsYXlvdXQsIDApOwotICAg
IGludCB4X3BvczsKLQotICAgIHhfcG9zID0gMDsKLSAgICBpZiAoZnJvbSA8IGxheW91dExpbmUt
Pmxlbmd0aCkKLSAgICAgICAgcGFuZ29fbGF5b3V0X2xpbmVfaW5kZXhfdG9feChsYXlvdXRMaW5l
LCBmcm9tLCBGQUxTRSwgJnhfcG9zKTsKLSAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IFBBTkdPX1BJ
WEVMU19GTE9PUih4X3Bvcyk7Ci0KLSAgICB4X3BvcyA9IDA7Ci0gICAgaWYgKHJ1bi5sdHIoKSB8
fCB0byA8IGxheW91dExpbmUtPmxlbmd0aCkKLSAgICAgICAgcGFuZ29fbGF5b3V0X2xpbmVfaW5k
ZXhfdG9feChsYXlvdXRMaW5lLCB0bywgRkFMU0UsICZ4X3Bvcyk7Ci0gICAgZmxvYXQgYWZ0ZXJX
aWR0aCA9IFBBTkdPX1BJWEVMUyh4X3Bvcyk7Ci0KLSAgICBnX2ZyZWUodXRmOCk7Ci0gICAgZ19v
YmplY3RfdW5yZWYobGF5b3V0KTsKLQotICAgIHJldHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsg
YmVmb3JlV2lkdGgsIHBvaW50LnkoKSwgYWZ0ZXJXaWR0aCAtIGJlZm9yZVdpZHRoLCBoKTsKLX0K
LQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28v
Rm9udFBhbmdvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0Zv
bnRQYW5nby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE4ZDQyZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Bhbmdv
L0ZvbnRQYW5nby5jcHAKQEAgLTAsMCArMSw0NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJp
Z2h0IChjKSAyMDA3IEhpcm95dWtpIElrZXpvZQorICogQ29weXJpZ2h0IChjKSAyMDA3IEtvdWhl
aSBTdXRvdQorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggWGFuIExvcGV6IDx4YW5AZ25vbWUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250LmgiCisKKyNpbmNsdWRlICJD
YWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdPd25QdHIuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtQ29udGV4dENhaXJvLmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgorI2luY2x1ZGUgIlNp
bXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgPGNhaXJvLmg+
CisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPHBhbmdvL3BhbmdvLmg+CisjaW5jbHVk
ZSA8cGFuZ28vcGFuZ29jYWlyby5oPgorCisjaWYgVVNFKEZSRUVUWVBFKQorI2luY2x1ZGUgPHBh
bmdvL3BhbmdvZmMtZm9udG1hcC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
I2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCit0eXBlZGVmIEdka1JlZ2lvbiogUGFuZ29SZWdpb25U
eXBlOworCit2b2lkIGRlc3Ryb3lQYW5nb1JlZ2lvbihQYW5nb1JlZ2lvblR5cGUgcmVnaW9uKQor
eworICAgIGdka19yZWdpb25fZGVzdHJveShyZWdpb24pOworfQorCitJbnRSZWN0IGdldFBhbmdv
UmVnaW9uRXh0ZW50cyhQYW5nb1JlZ2lvblR5cGUgcmVnaW9uKQoreworICAgIEdka1JlY3Rhbmds
ZSByZWN0YW5nbGU7CisgICAgZ2RrX3JlZ2lvbl9nZXRfY2xpcGJveChyZWdpb24sICZyZWN0YW5n
bGUpOworICAgIHJldHVybiBJbnRSZWN0KHJlY3RhbmdsZS54LCByZWN0YW5nbGUueSwgcmVjdGFu
Z2xlLndpZHRoLCByZWN0YW5nbGUuaGVpZ2h0KTsKK30KKyNlbHNlCit0eXBlZGVmIGNhaXJvX3Jl
Z2lvbl90KiBQYW5nb1JlZ2lvblR5cGU7CisKK3ZvaWQgZGVzdHJveVBhbmdvUmVnaW9uKFBhbmdv
UmVnaW9uVHlwZSByZWdpb24pCit7CisgICAgY2Fpcm9fcmVnaW9uX2Rlc3Ryb3kocmVnaW9uKTsK
K30KKworSW50UmVjdCBnZXRQYW5nb1JlZ2lvbkV4dGVudHMoUGFuZ29SZWdpb25UeXBlIHJlZ2lv
bikKK3sKKyAgICBjYWlyb19yZWN0YW5nbGVfaW50X3QgcmVjdGFuZ2xlOworICAgIGNhaXJvX3Jl
Z2lvbl9nZXRfZXh0ZW50cyhyZWdpb24sICZyZWN0YW5nbGUpOworICAgIHJldHVybiBJbnRSZWN0
KHJlY3RhbmdsZS54LCByZWN0YW5nbGUueSwgcmVjdGFuZ2xlLndpZHRoLCByZWN0YW5nbGUuaGVp
Z2h0KTsKK30KKyNlbmRpZgorCisjZGVmaW5lIElTX0hJR0hfU1VSUk9HQVRFKHUpICAoKFVDaGFy
KSh1KSA+PSAoVUNoYXIpMHhkODAwICYmIChVQ2hhcikodSkgPD0gKFVDaGFyKTB4ZGJmZikKKyNk
ZWZpbmUgSVNfTE9XX1NVUlJPR0FURSh1KSAgKChVQ2hhcikodSkgPj0gKFVDaGFyKTB4ZGMwMCAm
JiAoVUNoYXIpKHUpIDw9IChVQ2hhcikweGRmZmYpCisKK3N0YXRpYyBnY2hhciogdXRmMTZUb1V0
ZjgoY29uc3QgVUNoYXIqIGFUZXh0LCBnaW50IGFMZW5ndGgsIGdpbnQgJmxlbmd0aCkKK3sKKyAg
ICBnYm9vbGVhbiBuZWVkQ29weSA9IEZBTFNFOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBh
TGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKCFhVGV4dFtpXSB8fCBJU19MT1dfU1VSUk9HQVRF
KGFUZXh0W2ldKSkgeworICAgICAgICAgICAgbmVlZENvcHkgPSBUUlVFOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0gCisKKyAgICAgICAgaWYgKElTX0hJR0hfU1VSUk9HQVRFKGFUZXh0
W2ldKSkgeworICAgICAgICAgICAgaWYgKGkgPCBhTGVuZ3RoIC0gMSAmJiBJU19MT1dfU1VSUk9H
QVRFKGFUZXh0W2krMV0pKQorICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIG5lZWRDb3B5ID0gVFJVRTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEdPd25QdHI8VUNoYXI+
IGNvcGllZFN0cmluZzsKKyAgICBpZiAobmVlZENvcHkpIHsKKyAgICAgICAgLyogUGFuZ28gZG9l
c24ndCBjb3JyZWN0bHkgaGFuZGxlIG51bHMuICBXZSBjb252ZXJ0IHRoZW0gdG8gMHhmZi4gKi8K
KyAgICAgICAgLyogQWxzbyAidmFsaWRhdGUiIFVURi0xNiB0ZXh0IHRvIG1ha2Ugc3VyZSBjb252
ZXJzaW9uIGRvZXNuJ3QgZmFpbC4gKi8KKworICAgICAgICBjb3BpZWRTdHJpbmcuc2V0KHN0YXRp
Y19jYXN0PFVDaGFyKj4oZ19tZW1kdXAoYVRleHQsIGFMZW5ndGggKiBzaXplb2YoYVRleHRbMF0p
KSkpOworICAgICAgICBVQ2hhciogcCA9IGNvcGllZFN0cmluZy5nZXQoKTsKKworICAgICAgICAv
KiBkb24ndCBuZWVkIHRvIHJlc2V0IGkgKi8KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBh
TGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmICghcFtpXSB8fCBJU19MT1dfU1VSUk9HQVRF
KHBbaV0pKQorICAgICAgICAgICAgICAgIHBbaV0gPSAweEZGRkQ7CisgICAgICAgICAgICBlbHNl
IGlmIChJU19ISUdIX1NVUlJPR0FURShwW2ldKSkgeworICAgICAgICAgICAgICAgIGlmIChpIDwg
YUxlbmd0aCAtIDEgJiYgSVNfTE9XX1NVUlJPR0FURShhVGV4dFtpKzFdKSkKKyAgICAgICAgICAg
ICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
cFtpXSA9IDB4RkZGRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGFUZXh0
ID0gcDsKKyAgICB9CisKKyAgICBnY2hhciogdXRmOFRleHQ7CisgICAgZ2xvbmcgaXRlbXNXcml0
dGVuOworICAgIHV0ZjhUZXh0ID0gZ191dGYxNl90b191dGY4KHN0YXRpY19jYXN0PGNvbnN0IGd1
bmljaGFyMio+KGFUZXh0KSwgYUxlbmd0aCwgMCwgJml0ZW1zV3JpdHRlbiwgMCk7CisgICAgbGVu
Z3RoID0gaXRlbXNXcml0dGVuOworCisgICAgcmV0dXJuIHV0ZjhUZXh0OworfQorCitzdGF0aWMg
Z2NoYXIqIGNvbnZlcnRVbmlDaGFyVG9VVEY4KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBnaW50
IGxlbmd0aCwgaW50IGZyb20sIGludCB0bykKK3sKKyAgICBnaW50IG5ld0xlbmd0aCA9IDA7Cisg
ICAgR093blB0cjxnY2hhcj4gdXRmOFRleHQodXRmMTZUb1V0ZjgoY2hhcmFjdGVycywgbGVuZ3Ro
LCBuZXdMZW5ndGgpKTsKKyAgICBpZiAoIXV0ZjhUZXh0KQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIGdjaGFyKiBwb3MgPSB1dGY4VGV4dC5nZXQoKTsKKyAgICBpZiAoZnJvbSA+IDApIHsKKyAg
ICAgICAgLy8gZGlzY2FyZCB0aGUgZmlyc3QgJ2Zyb20nIGNoYXJhY3RlcnMKKyAgICAgICAgLy8g
RklYTUU6IHdlIHNob3VsZCBkbyB0aGlzIGJlZm9yZSB0aGUgY29udmVyc2lvbiBwcm9iYWJseQor
ICAgICAgICBwb3MgPSBnX3V0Zjhfb2Zmc2V0X3RvX3BvaW50ZXIodXRmOFRleHQuZ2V0KCksIGZy
b20pOworICAgIH0KKworICAgIGdpbnQgbGVuID0gc3RybGVuKHBvcyk7CisgICAgR1N0cmluZyog
cmV0ID0gZ19zdHJpbmdfbmV3X2xlbihOVUxMLCBsZW4pOworCisgICAgLy8gcmVwbGFjZSBsaW5l
IGJyZWFrIGJ5IHNwYWNlCisgICAgd2hpbGUgKGxlbiA+IDApIHsKKyAgICAgICAgZ2ludCBpbmRl
eCwgc3RhcnQ7CisgICAgICAgIHBhbmdvX2ZpbmRfcGFyYWdyYXBoX2JvdW5kYXJ5KHBvcywgbGVu
LCAmaW5kZXgsICZzdGFydCk7CisgICAgICAgIGdfc3RyaW5nX2FwcGVuZF9sZW4ocmV0LCBwb3Ms
IGluZGV4KTsKKyAgICAgICAgaWYgKGluZGV4ID09IHN0YXJ0KQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGdfc3RyaW5nX2FwcGVuZF9jKHJldCwgJyAnKTsKKyAgICAgICAgcG9zICs9IHN0
YXJ0OworICAgICAgICBsZW4gLT0gc3RhcnQ7CisgICAgfQorICAgIHJldHVybiBnX3N0cmluZ19m
cmVlKHJldCwgRkFMU0UpOworfQorCitzdGF0aWMgdm9pZCBzZXRQYW5nb0F0dHJpYnV0ZXMoY29u
c3QgRm9udCogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBQYW5nb0xheW91dCogbGF5b3V0KQor
eworI2lmIFVTRShGUkVFVFlQRSkKKyAgICBpZiAoZm9udC0+cHJpbWFyeUZvbnQoKS0+cGxhdGZv
cm1EYXRhKCkubV9wYXR0ZXJuKSB7CisgICAgICAgIFBhbmdvRm9udERlc2NyaXB0aW9uKiBkZXNj
ID0gcGFuZ29fZmNfZm9udF9kZXNjcmlwdGlvbl9mcm9tX3BhdHRlcm4oZm9udC0+cHJpbWFyeUZv
bnQoKS0+cGxhdGZvcm1EYXRhKCkubV9wYXR0ZXJuLmdldCgpLCBGQUxTRSk7CisgICAgICAgIHBh
bmdvX2xheW91dF9zZXRfZm9udF9kZXNjcmlwdGlvbihsYXlvdXQsIGRlc2MpOworICAgICAgICBw
YW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUoZGVzYyk7CisgICAgfQorI2VsaWYgVVNFKFBBTkdP
KQorICAgIGlmIChmb250LT5wcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5tX2ZvbnQpIHsK
KyAgICAgICAgUGFuZ29Gb250RGVzY3JpcHRpb24qIGRlc2MgPSBwYW5nb19mb250X2Rlc2NyaWJl
KGZvbnQtPnByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpLm1fZm9udCk7CisgICAgICAgIHBh
bmdvX2xheW91dF9zZXRfZm9udF9kZXNjcmlwdGlvbihsYXlvdXQsIGRlc2MpOworICAgICAgICBw
YW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUoZGVzYyk7CisgICAgfQorI2VuZGlmCisKKyAgICBw
YW5nb19sYXlvdXRfc2V0X2F1dG9fZGlyKGxheW91dCwgRkFMU0UpOworCisgICAgUGFuZ29Db250
ZXh0KiBwYW5nb0NvbnRleHQgPSBwYW5nb19sYXlvdXRfZ2V0X2NvbnRleHQobGF5b3V0KTsKKyAg
ICBQYW5nb0RpcmVjdGlvbiBkaXJlY3Rpb24gPSBydW4ucnRsKCkgPyBQQU5HT19ESVJFQ1RJT05f
UlRMIDogUEFOR09fRElSRUNUSU9OX0xUUjsKKyAgICBwYW5nb19jb250ZXh0X3NldF9iYXNlX2Rp
cihwYW5nb0NvbnRleHQsIGRpcmVjdGlvbik7CisgICAgUGFuZ29BdHRyTGlzdCogbGlzdCA9IHBh
bmdvX2F0dHJfbGlzdF9uZXcoKTsKKyAgICBQYW5nb0F0dHJpYnV0ZSogYXR0cjsKKworICAgIGF0
dHIgPSBwYW5nb19hdHRyX3NpemVfbmV3X2Fic29sdXRlKGZvbnQtPnBpeGVsU2l6ZSgpICogUEFO
R09fU0NBTEUpOworICAgIGF0dHItPmVuZF9pbmRleCA9IEdfTUFYVUlOVDsKKyAgICBwYW5nb19h
dHRyX2xpc3RfaW5zZXJ0X2JlZm9yZShsaXN0LCBhdHRyKTsKKworICAgIGlmICghcnVuLnNwYWNp
bmdEaXNhYmxlZCgpKSB7CisgICAgICAgIGF0dHIgPSBwYW5nb19hdHRyX2xldHRlcl9zcGFjaW5n
X25ldyhmb250LT5sZXR0ZXJTcGFjaW5nKCkgKiBQQU5HT19TQ0FMRSk7CisgICAgICAgIGF0dHIt
PmVuZF9pbmRleCA9IEdfTUFYVUlOVDsKKyAgICAgICAgcGFuZ29fYXR0cl9saXN0X2luc2VydF9i
ZWZvcmUobGlzdCwgYXR0cik7CisgICAgfQorCisgICAgLy8gUGFuZ28gZG9lcyBub3QgeWV0IHN1
cHBvcnQgc3ludGhlc2lzaW5nIHNtYWxsIGNhcHMKKyAgICAvLyBTZWUgaHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MTAKKworICAgIHBhbmdvX2xheW91dF9zZXRfYXR0
cmlidXRlcyhsYXlvdXQsIGxpc3QpOworICAgIHBhbmdvX2F0dHJfbGlzdF91bnJlZihsaXN0KTsK
K30KKworYm9vbCBGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQor
eworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVv
Z3JhcGhzSW5Db21wbGV4VGV4dCgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMg
dm9pZCBkcmF3R2x5cGhzU2hhZG93KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgUGFuZ29MYXlvdXRMaW5lKiBsYXlvdXRMaW5lLCBQYW5n
b1JlZ2lvblR5cGUgcmVuZGVyUmVnaW9uKQoreworICAgIFNoYWRvd0JsdXImIHNoYWRvdyA9IGdy
YXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnNoYWRvd0JsdXIoKTsKKworICAgIGlm
ICghKGdyYXBoaWNzQ29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZpbGwpIHx8
IHNoYWRvdy50eXBlKCkgPT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpCisgICAgICAgIHJldHVybjsK
KworICAgIEZsb2F0UG9pbnQgdG90YWxPZmZzZXQocG9pbnQgKyBncmFwaGljc0NvbnRleHQtPnN0
YXRlKCkuc2hhZG93T2Zmc2V0KTsKKworICAgIC8vIE9wdGltaXplIG5vbi1ibHVycnkgc2hhZG93
cywgYnkganVzdCBkcmF3aW5nIHRleHQgd2l0aG91dCB0aGUgU2hhZG93Qmx1ci4KKyAgICBpZiAo
IXNoYWRvdy5tdXN0VXNlU2hhZG93Qmx1cihncmFwaGljc0NvbnRleHQpKSB7CisgICAgICAgIGNh
aXJvX3QqIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigp
OworICAgICAgICBjYWlyb19zYXZlKGNvbnRleHQpOworICAgICAgICBjYWlyb190cmFuc2xhdGUo
Y29udGV4dCwgdG90YWxPZmZzZXQueCgpLCB0b3RhbE9mZnNldC55KCkpOworCisgICAgICAgIHNl
dFNvdXJjZVJHQkFGcm9tQ29sb3IoY29udGV4dCwgZ3JhcGhpY3NDb250ZXh0LT5zdGF0ZSgpLnNo
YWRvd0NvbG9yKTsKKyAgICAgICAgZ2RrX2NhaXJvX3JlZ2lvbihjb250ZXh0LCByZW5kZXJSZWdp
b24pOworICAgICAgICBjYWlyb19jbGlwKGNvbnRleHQpOworICAgICAgICBwYW5nb19jYWlyb19z
aG93X2xheW91dF9saW5lKGNvbnRleHQsIGxheW91dExpbmUpOworCisgICAgICAgIGNhaXJvX3Jl
c3RvcmUoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGbG9hdFJlY3Qg
ZXh0ZW50cyhnZXRQYW5nb1JlZ2lvbkV4dGVudHMocmVuZGVyUmVnaW9uKSk7CisgICAgZXh0ZW50
cy5zZXRMb2NhdGlvbihGbG9hdFBvaW50KHBvaW50LngoKSwgcG9pbnQueSgpIC0gZXh0ZW50cy5o
ZWlnaHQoKSkpOworICAgIGlmIChHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFk
b3cuYmVnaW5TaGFkb3dMYXllcihncmFwaGljc0NvbnRleHQsIGV4dGVudHMpKSB7CisgICAgICAg
IGNhaXJvX3QqIGNhaXJvU2hhZG93Q29udGV4dCA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLT5jcigpOworICAgICAgICBjYWlyb190cmFuc2xhdGUoY2Fpcm9TaGFkb3dDb250ZXh0
LCBwb2ludC54KCksIHBvaW50LnkoKSk7CisgICAgICAgIHBhbmdvX2NhaXJvX3Nob3dfbGF5b3V0
X2xpbmUoY2Fpcm9TaGFkb3dDb250ZXh0LCBsYXlvdXRMaW5lKTsKKworICAgICAgICAvLyBXZSBu
ZWVkIHRoZSBjbGlwcGluZyByZWdpb24gdG8gYmUgYWN0aXZlIHdoZW4gd2UgYmxpdCB0aGUgYmx1
cnJlZCBzaGFkb3cgYmFjaywKKyAgICAgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCB3YW50IGFueSBi
aXRzIGFuZCBwaWVjZXMgb2YgY2hhcmFjdGVycyBvdXQgb2YgcmFuZ2UgdG8gYmUKKyAgICAgICAg
Ly8gZHJhd24uIFNpbmNlIFNoYWRvd0JsdXIgZXhwZWN0cyBhIGNvbnNpc3RlbnQgdHJhbnNmb3Jt
LCB3ZSBoYXZlIHRvIHVuZG8gdGhlCisgICAgICAgIC8vIHRyYW5zbGF0aW9uIGJlZm9yZSBjYWxs
aW5nIGVuZFNoYWRvd0xheWVyIGFzIHdlbGwuCisgICAgICAgIGNhaXJvX3QqIGNvbnRleHQgPSBn
cmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOworICAgICAgICBjYWlyb19z
YXZlKGNvbnRleHQpOworICAgICAgICBjYWlyb190cmFuc2xhdGUoY29udGV4dCwgdG90YWxPZmZz
ZXQueCgpLCB0b3RhbE9mZnNldC55KCkpOworICAgICAgICBnZGtfY2Fpcm9fcmVnaW9uKGNvbnRl
eHQsIHJlbmRlclJlZ2lvbik7CisgICAgICAgIGNhaXJvX2NsaXAoY29udGV4dCk7CisgICAgICAg
IGNhaXJvX3RyYW5zbGF0ZShjb250ZXh0LCAtdG90YWxPZmZzZXQueCgpLCAtdG90YWxPZmZzZXQu
eSgpKTsKKworICAgICAgICBzaGFkb3cuZW5kU2hhZG93TGF5ZXIoZ3JhcGhpY3NDb250ZXh0KTsK
KyAgICAgICAgY2Fpcm9fcmVzdG9yZShjb250ZXh0KTsKKyAgICB9Cit9CisKK3ZvaWQgRm9udDo6
ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYg
cnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3sK
KyNpZiBVU0UoRlJFRVRZUEUpCisgICAgaWYgKCFwcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEo
KS5tX3BhdHRlcm4pIHsKKyAgICAgICAgZHJhd1NpbXBsZVRleHQoY29udGV4dCwgcnVuLCBwb2lu
dCwgZnJvbSwgdG8pOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBjYWly
b190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOworICAgIFBhbmdvTGF5
b3V0KiBsYXlvdXQgPSBwYW5nb19jYWlyb19jcmVhdGVfbGF5b3V0KGNyKTsKKyAgICBzZXRQYW5n
b0F0dHJpYnV0ZXModGhpcywgcnVuLCBsYXlvdXQpOworCisgICAgZ2NoYXIqIHV0ZjggPSBjb252
ZXJ0VW5pQ2hhclRvVVRGOChydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCksIDAsIHJ1bi5s
ZW5ndGgoKSk7CisgICAgcGFuZ29fbGF5b3V0X3NldF90ZXh0KGxheW91dCwgdXRmOCwgLTEpOwor
CisgICAgLy8gT3VyIGxheW91dHMgYXJlIHNpbmdsZSBsaW5lCisgICAgUGFuZ29MYXlvdXRMaW5l
KiBsYXlvdXRMaW5lID0gcGFuZ29fbGF5b3V0X2dldF9saW5lX3JlYWRvbmx5KGxheW91dCwgMCk7
CisKKyAgICAvLyBHZXQgdGhlIHJlZ2lvbiB3aGVyZSB0aGlzIHRleHQgd2lsbCBiZSBsYWlkIG91
dC4gV2Ugd2lsbCB1c2UgaXQgdG8gY2xpcAorICAgIC8vIHRoZSBDYWlybyBjb250ZXh0LCBmb3Ig
d2hlbiB3ZSBhcmUgb25seSBwYWludGluZyBwYXJ0IG9mIHRoZSB0ZXh0IHJ1biBhbmQKKyAgICAv
LyB0byBjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIHNoYWRvdyBidWZmZXIuCisgICAgUGFuZ29S
ZWdpb25UeXBlIHBhcnRpYWxSZWdpb24gPSAwOworICAgIGNoYXIqIHN0YXJ0ID0gZ191dGY4X29m
ZnNldF90b19wb2ludGVyKHV0ZjgsIGZyb20pOworICAgIGNoYXIqIGVuZCA9IGdfdXRmOF9vZmZz
ZXRfdG9fcG9pbnRlcihzdGFydCwgdG8gLSBmcm9tKTsKKyAgICBpbnQgcmFuZ2VzW10gPSB7c3Rh
cnQgLSB1dGY4LCBlbmQgLSB1dGY4fTsKKyAgICBwYXJ0aWFsUmVnaW9uID0gZ2RrX3BhbmdvX2xh
eW91dF9saW5lX2dldF9jbGlwX3JlZ2lvbihsYXlvdXRMaW5lLCAwLCAwLCByYW5nZXMsIDEpOwor
CisgICAgZHJhd0dseXBoc1NoYWRvdyhjb250ZXh0LCBwb2ludCwgbGF5b3V0TGluZSwgcGFydGlh
bFJlZ2lvbik7CisKKyAgICBjYWlyb19zYXZlKGNyKTsKKyAgICBjYWlyb190cmFuc2xhdGUoY3Is
IHBvaW50LngoKSwgcG9pbnQueSgpKTsKKworICAgIGZsb2F0IHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhOworICAgIGNvbnRleHQtPmZpbGxDb2xvcigpLmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGEpOworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGEpOworICAgIGdka19jYWlyb19yZWdpb24oY3IsIHBhcnRpYWxSZWdpb24pOworICAgIGNh
aXJvX2NsaXAoY3IpOworCisgICAgcGFuZ29fY2Fpcm9fc2hvd19sYXlvdXRfbGluZShjciwgbGF5
b3V0TGluZSk7CisKKyAgICBpZiAoY29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9k
ZVN0cm9rZSkgeworICAgICAgICBDb2xvciBzdHJva2VDb2xvciA9IGNvbnRleHQtPnN0cm9rZUNv
bG9yKCk7CisgICAgICAgIHN0cm9rZUNvbG9yLmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGEpOworICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY3IsIHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhKTsKKyAgICAgICAgcGFuZ29fY2Fpcm9fbGF5b3V0X2xpbmVfcGF0aChjciwgbGF5b3V0
TGluZSk7CisgICAgICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNyLCBjb250ZXh0LT5zdHJva2VU
aGlja25lc3MoKSk7CisgICAgICAgIGNhaXJvX3N0cm9rZShjcik7CisgICAgfQorCisgICAgLy8g
UGFuZ28gc29tZXRpbWVzIGxlYXZlcyBiZWhpbmQgcGF0aHMgd2UgZG9uJ3Qgd2FudAorICAgIGNh
aXJvX25ld19wYXRoKGNyKTsKKworICAgIGRlc3Ryb3lQYW5nb1JlZ2lvbihwYXJ0aWFsUmVnaW9u
KTsKKyAgICBnX2ZyZWUodXRmOCk7CisgICAgZ19vYmplY3RfdW5yZWYobGF5b3V0KTsKKworICAg
IGNhaXJvX3Jlc3RvcmUoY3IpOworfQorCit2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9y
Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVu
JiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywgY29uc3QgRmxvYXRQ
b2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0Cit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworLy8gV2Ugc2hvdWxkIGNyZWF0ZSB0aGUgbGF5
b3V0IHdpdGggb3VyIGFjdHVhbCBjb250ZXh0IGJ1dCB3ZSBjYW4ndCBhY2Nlc3MgaXQgZnJvbSBo
ZXJlLgorc3RhdGljIFBhbmdvTGF5b3V0KiBnZXREZWZhdWx0UGFuZ29MYXlvdXQoY29uc3QgVGV4
dFJ1biYgcnVuKQoreworICAgIHN0YXRpYyBQYW5nb0ZvbnRNYXAqIG1hcCA9IHBhbmdvX2NhaXJv
X2ZvbnRfbWFwX2dldF9kZWZhdWx0KCk7CisjaWYgUEFOR09fVkVSU0lPTl9DSEVDSygxLDIxLDUp
CisgICAgc3RhdGljIFBhbmdvQ29udGV4dCogcGFuZ29Db250ZXh0ID0gcGFuZ29fZm9udF9tYXBf
Y3JlYXRlX2NvbnRleHQobWFwKTsKKyNlbHNlCisgICAgLy8gRGVwcmVjYXRlZCBpbiBQYW5nbyAx
LjIxLgorICAgIHN0YXRpYyBQYW5nb0NvbnRleHQqIHBhbmdvQ29udGV4dCA9IHBhbmdvX2NhaXJv
X2ZvbnRfbWFwX2NyZWF0ZV9jb250ZXh0KFBBTkdPX0NBSVJPX0ZPTlRfTUFQKG1hcCkpOworI2Vu
ZGlmCisgICAgUGFuZ29MYXlvdXQqIGxheW91dCA9IHBhbmdvX2xheW91dF9uZXcocGFuZ29Db250
ZXh0KTsKKworICAgIHJldHVybiBsYXlvdXQ7Cit9CisKK2Zsb2F0IEZvbnQ6OmZsb2F0V2lkdGhG
b3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogb3ZlcmZsb3cpIGNvbnN0Cit7
CisjaWYgVVNFKEZSRUVUWVBFKQorICAgIGlmICghcHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRh
KCkubV9wYXR0ZXJuKQorICAgICAgICByZXR1cm4gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQocnVu
LCAwLCBmYWxsYmFja0ZvbnRzLCBvdmVyZmxvdyk7CisjZW5kaWYKKworICAgIGlmIChydW4ubGVu
Z3RoKCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIDAuMGY7CisKKyAgICBQYW5nb0xheW91dCogbGF5
b3V0ID0gZ2V0RGVmYXVsdFBhbmdvTGF5b3V0KHJ1bik7CisgICAgc2V0UGFuZ29BdHRyaWJ1dGVz
KHRoaXMsIHJ1biwgbGF5b3V0KTsKKworICAgIGdjaGFyKiB1dGY4ID0gY29udmVydFVuaUNoYXJU
b1VURjgocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpLCAwLCBydW4ubGVuZ3RoKCkpOwor
ICAgIHBhbmdvX2xheW91dF9zZXRfdGV4dChsYXlvdXQsIHV0ZjgsIC0xKTsKKworICAgIGludCB3
aWR0aDsKKyAgICBwYW5nb19sYXlvdXRfZ2V0X3BpeGVsX3NpemUobGF5b3V0LCAmd2lkdGgsIDAp
OworCisgICAgZ19mcmVlKHV0ZjgpOworICAgIGdfb2JqZWN0X3VucmVmKGxheW91dCk7CisKKyAg
ICByZXR1cm4gd2lkdGg7Cit9CisKK2ludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBs
ZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeEZsb2F0LCBib29sIGluY2x1ZGVQYXJ0
aWFsR2x5cGhzKSBjb25zdAoreworI2lmIFVTRShGUkVFVFlQRSkKKyAgICBpZiAoIXByaW1hcnlG
b250KCktPnBsYXRmb3JtRGF0YSgpLm1fcGF0dGVybikKKyAgICAgICAgcmV0dXJuIG9mZnNldEZv
clBvc2l0aW9uRm9yU2ltcGxlVGV4dChydW4sIHhGbG9hdCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMp
OworI2VuZGlmCisgICAgLy8gRklYTUU6IFRoaXMgdHJ1bmNhdGlvbiBpcyBub3QgYSBwcm9ibGVt
IGZvciBIVE1MLCBidXQgb25seSBhZmZlY3RzIFNWRywgd2hpY2ggcGFzc2VzIGZsb2F0aW5nLXBv
aW50IG51bWJlcnMKKyAgICAvLyB0byBGb250OjpvZmZzZXRGb3JQb3NpdGlvbigpLiBCdWcgaHR0
cDovL3dlYmtpdC5vcmcvYi80MDY3MyB0cmFja3MgZml4aW5nIHRoaXMgcHJvYmxlbS4KKyAgICBp
bnQgeCA9IHN0YXRpY19jYXN0PGludD4oeEZsb2F0KTsKKworICAgIFBhbmdvTGF5b3V0KiBsYXlv
dXQgPSBnZXREZWZhdWx0UGFuZ29MYXlvdXQocnVuKTsKKyAgICBzZXRQYW5nb0F0dHJpYnV0ZXMo
dGhpcywgcnVuLCBsYXlvdXQpOworCisgICAgZ2NoYXIqIHV0ZjggPSBjb252ZXJ0VW5pQ2hhclRv
VVRGOChydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7Cisg
ICAgcGFuZ29fbGF5b3V0X3NldF90ZXh0KGxheW91dCwgdXRmOCwgLTEpOworCisgICAgaW50IGlu
ZGV4LCB0cmFpbGluZzsKKyAgICBwYW5nb19sYXlvdXRfeHlfdG9faW5kZXgobGF5b3V0LCB4ICog
UEFOR09fU0NBTEUsIDEsICZpbmRleCwgJnRyYWlsaW5nKTsKKyAgICBnbG9uZyBvZmZzZXQgPSBn
X3V0ZjhfcG9pbnRlcl90b19vZmZzZXQodXRmOCwgdXRmOCArIGluZGV4KTsKKyAgICBpZiAoaW5j
bHVkZVBhcnRpYWxHbHlwaHMpCisgICAgICAgIG9mZnNldCArPSB0cmFpbGluZzsKKworICAgIGdf
ZnJlZSh1dGY4KTsKKyAgICBnX29iamVjdF91bnJlZihsYXlvdXQpOworCisgICAgcmV0dXJuIG9m
ZnNldDsKK30KKworRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChj
b25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaCwgaW50IGZy
b20sIGludCB0bykgY29uc3QKK3sKKyNpZiBVU0UoRlJFRVRZUEUpCisgICAgaWYgKCFwcmltYXJ5
Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5tX3BhdHRlcm4pCisgICAgICAgIHJldHVybiBzZWxlY3Rp
b25SZWN0Rm9yU2ltcGxlVGV4dChydW4sIHBvaW50LCBoLCBmcm9tLCB0byk7CisjZW5kaWYKKwor
ICAgIFBhbmdvTGF5b3V0KiBsYXlvdXQgPSBnZXREZWZhdWx0UGFuZ29MYXlvdXQocnVuKTsKKyAg
ICBzZXRQYW5nb0F0dHJpYnV0ZXModGhpcywgcnVuLCBsYXlvdXQpOworCisgICAgZ2NoYXIqIHV0
ZjggPSBjb252ZXJ0VW5pQ2hhclRvVVRGOChydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCks
IDAsIHJ1bi5sZW5ndGgoKSk7CisgICAgcGFuZ29fbGF5b3V0X3NldF90ZXh0KGxheW91dCwgdXRm
OCwgLTEpOworCisgICAgY2hhciogc3RhcnQgPSBnX3V0Zjhfb2Zmc2V0X3RvX3BvaW50ZXIodXRm
OCwgZnJvbSk7CisgICAgY2hhciogZW5kID0gZ191dGY4X29mZnNldF90b19wb2ludGVyKHN0YXJ0
LCB0byAtIGZyb20pOworCisgICAgaWYgKHJ1bi5sdHIoKSkgeworICAgICAgICBmcm9tID0gc3Rh
cnQgLSB1dGY4OworICAgICAgICB0byA9IGVuZCAtIHV0Zjg7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZnJvbSA9IGVuZCAtIHV0Zjg7CisgICAgICAgIHRvID0gc3RhcnQgLSB1dGY4OworICAgIH0K
KworICAgIFBhbmdvTGF5b3V0TGluZSogbGF5b3V0TGluZSA9IHBhbmdvX2xheW91dF9nZXRfbGlu
ZV9yZWFkb25seShsYXlvdXQsIDApOworICAgIGludCB4X3BvczsKKworICAgIHhfcG9zID0gMDsK
KyAgICBpZiAoZnJvbSA8IGxheW91dExpbmUtPmxlbmd0aCkKKyAgICAgICAgcGFuZ29fbGF5b3V0
X2xpbmVfaW5kZXhfdG9feChsYXlvdXRMaW5lLCBmcm9tLCBGQUxTRSwgJnhfcG9zKTsKKyAgICBm
bG9hdCBiZWZvcmVXaWR0aCA9IFBBTkdPX1BJWEVMU19GTE9PUih4X3Bvcyk7CisKKyAgICB4X3Bv
cyA9IDA7CisgICAgaWYgKHJ1bi5sdHIoKSB8fCB0byA8IGxheW91dExpbmUtPmxlbmd0aCkKKyAg
ICAgICAgcGFuZ29fbGF5b3V0X2xpbmVfaW5kZXhfdG9feChsYXlvdXRMaW5lLCB0bywgRkFMU0Us
ICZ4X3Bvcyk7CisgICAgZmxvYXQgYWZ0ZXJXaWR0aCA9IFBBTkdPX1BJWEVMUyh4X3Bvcyk7CisK
KyAgICBnX2ZyZWUodXRmOCk7CisgICAgZ19vYmplY3RfdW5yZWYobGF5b3V0KTsKKworICAgIHJl
dHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsgYmVmb3JlV2lkdGgsIHBvaW50LnkoKSwgYWZ0ZXJX
aWR0aCAtIGJlZm9yZVdpZHRoLCBoKTsKK30KKworfQotLSAKMS43LjMuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104896</attachid>
            <date>2011-08-23 12:54:05 -0700</date>
            <delta_ts>2011-09-02 08:07:05 -0700</delta_ts>
            <desc>Move FontEfl.cpp to FontFreeType.cpp</desc>
            <filename>0002-moving-FontEfl-FontFreeType.patch</filename>
            <type>text/plain</type>
            <size>7005</size>
            <attacher name="Rafael Antognolli">antognolli+webkit</attacher>
            
              <data encoding="base64">RnJvbSA2N2M2Yjk1MzViZjMzOThiNzlhZDM5NDAyYmU4ZjkxYWQ2ZGM5MzE4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSYWZhZWwgQW50b2dub2xsaSA8YW50b2dub2xsaUBwcm9mdXNp
b24ubW9iaT4KRGF0ZTogRnJpLCAxOSBBdWcgMjAxMSAyMToyNjo1OCAtMDMwMApTdWJqZWN0OiBb
UEFUQ0ggMi80XSBtb3ZpbmcgRm9udEVmbCAtPiBGb250RnJlZVR5cGUKCi0tLQogU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0c0VmbC50eHQgICAgICAgICAgICAgICAgICAgfCAgICAzICstCiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvRm9udEVmbC5jcHAgICB8ICAgNzYgLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250RnJl
ZVR5cGUuY3BwICAgIHwgICA3NCArKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQs
IDc2IGluc2VydGlvbnMoKyksIDc3IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9Gb250RWZsLmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRG
cmVlVHlwZS5jcHAKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzRWZsLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHNFZmwudHh0CmluZGV4IGZlZWVhNmQuLjljZThm
MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHNFZmwudHh0CisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHNFZmwudHh0CkBAIC01NSw3ICs1NSw2IEBAIExJU1QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUwogICBwbGF0Zm9ybS9lZmwvVGVtcG9yYXJ5TGlua1N0dWJzLmNw
cAogICBwbGF0Zm9ybS9lZmwvV2lkZ2V0RWZsLmNwcAogICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZVNvdXJjZS5jcHAKLSAgcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRFZmwuY3BwCiAgIHBsYXRm
b3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0xheWVyRWZsLmNwcAogICBwbGF0Zm9ybS9ncmFwaGlj
cy9lZmwvSWNvbkVmbC5jcHAKICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ltYWdlRWZsLmNwcApA
QCAtMTA5LDYgKzEwOCw3IEBAIElGIChXVEZfVVNFX0NBSVJPKQogICAgICkKICAgICBMSVNUKEFQ
UEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9y
bWF0LmNwcAorICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udEZyZWVUeXBlLmNw
cAogICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3Bw
CiAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRh
RnJlZVR5cGUuY3BwCiAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZv
cm1EYXRhRnJlZVR5cGUuY3BwCkBAIC0xMjMsNiArMTIzLDcgQEAgSUYgKFdURl9VU0VfQ0FJUk8p
CiAgICAgICAke1BhbmdvX0lOQ0xVREVfRElSU30KICAgICApCiAgICAgTElTVChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCisgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGFuZ28uY3Bw
CiAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250Q2FjaGVQYW5nby5jcHAKICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFQYW5nby5jcHAK
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9Gb250RWZs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9Gb250RWZsLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNjYzdmZi4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvRm9udEVmbC5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwg
KGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtv
aXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVs
bGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8g
Tm9raWEgZGUgVGVjbm9sb2dpYQotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9O
IGVtYmVkZGVkIHN5c3RlbXMKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxl
Y3Ryb25pY3MKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250LmgiCi0KLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgot
I2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0KLSNpbmNsdWRlIDxjYWlyby5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0
bykgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZvbnQ6OmRyYXdF
bXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICov
LCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAq
LywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyog
dG8gKi8pIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBGb250Ojpj
YW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQotewotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4
dCgpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1mbG9hdCBGb250OjpmbG9hdFdpZHRoRm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEq
PiosIEdseXBoT3ZlcmZsb3cqKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIDAuMGY7Ci19Ci0KLWludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mLCBmbG9hdCwgYm9vbCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1GbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVj
dEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50LCBp
bnQsIGludCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBGbG9h
dFJlY3QoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZnJlZXR5cGUvRm9udEZyZWVUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRGcmVlVHlwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYmVlZGU0MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRGcmVlVHlwZS5jcHAKQEAgLTAsMCArMSw3
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3Jn
KQorICogQ29weXJpZ2h0IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3Jn
KQorICogQ29weXJpZ2h0IChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQor
ICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25v
bG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0
ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udC5oIgorCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTaW1w
bGVGb250RGF0YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRm9udDo6ZHJhd0Nv
bXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBv
aW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3ND
b250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0
b21pY1N0cmluZyYgLyogbWFyayAqLywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGlu
dCAvKiBmcm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworYm9vbCBGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQo
KQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJ
ZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitmbG9h
dCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiosIEdseXBoT3ZlcmZsb3cqKSBjb25zdAoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDAuMGY7Cit9CisKK2ludCBGb250OjpvZmZzZXRG
b3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBmbG9hdCwgYm9vbCkgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitGbG9hdFJl
Y3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25z
dCBGbG9hdFBvaW50JiwgaW50LCBpbnQsIGludCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBGbG9hdFJlY3QoKTsKK30KKworfQotLSAKMS43LjMuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104898</attachid>
            <date>2011-08-23 12:54:37 -0700</date>
            <delta_ts>2011-09-02 08:08:57 -0700</delta_ts>
            <desc>Add replacement functions for gdk ones.</desc>
            <filename>0003-Add-replacement-functions-for-gdk-ones.patch</filename>
            <type>text/plain</type>
            <size>12853</size>
            <attacher name="Rafael Antognolli">antognolli+webkit</attacher>
            
              <data encoding="base64">RnJvbSBlOTM5ZWI5NWQxZmM1NTg5ZWE2OGI3MjZiMGM0NjUxYWQ1YjkyYWQ5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSYWZhZWwgQW50b2dub2xsaSA8YW50b2dub2xsaUBwcm9mdXNp
b24ubW9iaT4KRGF0ZTogVHVlLCAyMyBBdWcgMjAxMSAxMzozMjoxMyAtMDMwMApTdWJqZWN0OiBb
UEFUQ0ggMy80XSBBZGQgcmVwbGFjZW1lbnQgZnVuY3Rpb25zIGZvciBnZGsgb25lcy4KClRoZSB3
aWxsIGFsbG93IHRoZSBFRkwgcG9ydCB0byBkb24ndCBkZXBlbmQgb24gZ2RrIGFueW1vcmUsIGFu
ZCBpcyBhCnN0ZXAgZm9yd2FyZCB0byByZW1vdmUgdGhhdCBkZXBlbmRlbmN5IGZyb20gR1RLMyB0
b28uCi0tLQogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQgICAgICAgICAgICAgICAg
ICAgfCAgICA0ICstCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMu
Y3BwICAgICB8ICAgMTQgKysrKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRp
bGl0aWVzLmggICAgICAgfCAgICAyICsKIC4uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Bh
bmdvL0ZvbnRQYW5nby5jcHAgIHwgICAyMyArKysrKy0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9w
YW5nby9QYW5nb1V0aWxpdGllcy5jcHAgICAgIHwgICA4MSArKysrKysrKysrKysrKysrKysrKwog
Li4uL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1BhbmdvVXRpbGl0aWVzLmggICAgICAgfCAgIDM0
ICsrKysrKysrCiBTb3VyY2UvY21ha2UvRmluZFBhbmdvLmNtYWtlICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgMTIgKysrCiA3IGZpbGVzIGNoYW5nZWQsIDE2OCBpbnNlcnRpb25zKCspLCAyIGRl
bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3BhbmdvL1BhbmdvVXRpbGl0aWVzLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1BhbmdvVXRpbGl0aWVzLmgKCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzRWZsLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHNFZmwudHh0CmluZGV4IDljZThmMWQuLjdlZjdhZmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHNFZmwudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHNFZmwudHh0CkBAIC0xMjksOSArMTI5LDExIEBAIElGIChXVEZfVVNFX0NBSVJPKQogICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBsYXRmb3JtRGF0YVBhbmdvLmNwcAogICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vR2x5cGhQYWdlVHJlZU5vZGVQYW5nby5jcHAKICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwCisgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9QYW5nb1V0aWxpdGllcy5jcHAKICAgICApCiAgICAg
TElTVChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMKLSAgICAgICR7UGFuZ29fTElCUkFSSUVTfQor
ICAgICAgJHtQYW5nb19MSUJSQVJZfQorICAgICAgJHtQYW5nb19DYWlyb19MSUJSQVJZfQogICAg
ICkKICAgRU5ESUYgKCkKIEVORElGICgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKaW5kZXggYjRhZGI2Yy4u
ODQ3MDE1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJ
T04gZW1iZWRkZWQgc3lzdGVtcwogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04
MCw2ICs4MSwxOSBAQCB2b2lkIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRleHQoY2Fpcm9f
dCogY29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCkKICAgICBhcHBlbmRQYXRoVG9DYWlyb0NvbnRl
eHQoY29udGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgoKS0+Y29udGV4dCgpKTsKIH0KIAordm9pZCBh
cHBlbmRSZWdpb25Ub0NhaXJvQ29udGV4dChjYWlyb190KiB0bywgY29uc3QgY2Fpcm9fcmVnaW9u
X3QqIHJlZ2lvbikKK3sKKyAgICBpZiAoIXJlZ2lvbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y29uc3QgaW50IG5fYm94ZXMgPSBjYWlyb19yZWdpb25fbnVtX3JlY3RhbmdsZXMocmVnaW9uKTsK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5fYm94ZXM7ICsraSkgeworICAgICAgICBjYWlyb19y
ZWN0YW5nbGVfaW50X3QgYm94OworICAgICAgICBjYWlyb19yZWdpb25fZ2V0X3JlY3RhbmdsZShy
ZWdpb24sIGksICZib3gpOworICAgICAgICBjYWlyb19yZWN0YW5nbGUodG8sIGJveC54LCBib3gu
eSwgYm94LndpZHRoLCBib3guaGVpZ2h0KTsKKyAgICB9Cit9CisKIGNhaXJvX29wZXJhdG9yX3Qg
dG9DYWlyb09wZXJhdG9yKENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAgIHN3aXRjaCAob3Ap
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Nh
aXJvVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9D
YWlyb1V0aWxpdGllcy5oCmluZGV4IDIxMTAwNTAuLjk2OTA3YmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaApA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw2ICs0NCw3IEBAIHZvaWQgc2V0U291cmNlUkdC
QUZyb21Db2xvcihjYWlyb190KiwgY29uc3QgQ29sb3ImKTsKIHZvaWQgYXBwZW5kUGF0aFRvQ2Fp
cm9Db250ZXh0KGNhaXJvX3QqIHRvLCBjYWlyb190KiBmcm9tKTsKIHZvaWQgc2V0UGF0aE9uQ2Fp
cm9Db250ZXh0KGNhaXJvX3QqIHRvLCBjYWlyb190KiBmcm9tKTsKIHZvaWQgYXBwZW5kV2ViQ29y
ZVBhdGhUb0NhaXJvQ29udGV4dChjYWlyb190KiBjb250ZXh0LCBjb25zdCBQYXRoJiBwYXRoKTsK
K3ZvaWQgYXBwZW5kUmVnaW9uVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCogdG8sIGNvbnN0IGNhaXJv
X3JlZ2lvbl90KiByZWdpb24pOwogY2Fpcm9fb3BlcmF0b3JfdCB0b0NhaXJvT3BlcmF0b3IoQ29t
cG9zaXRlT3BlcmF0b3Igb3ApOwogdm9pZCBkcmF3UGF0dGVyblRvQ2Fpcm9Db250ZXh0KGNhaXJv
X3QqIGNyLCBjYWlyb19zdXJmYWNlX3QqIGltYWdlLCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY2Fpcm9fb3BlcmF0b3JfdCBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9G
b250UGFuZ28uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9u
dFBhbmdvLmNwcAppbmRleCA4MThkNDJlLi4yYWJlYTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGFuZ28uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQYW5nby5jcHAKQEAgLTYsNiArNiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KICAq
IENvcHlyaWdodCAoQykgMjAwOCBYYW4gTG9wZXogPHhhbkBnbm9tZS5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04g
ZW1iZWRkZWQgc3lzdGVtcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTQyLDcgKzQzLDExIEBACiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNs
dWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpZmRlZiBHVEtfQVBJX1ZFUlNJ
T05fMgogI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNlbHNlCisjaW5jbHVkZSAiUGFuZ29VdGlsaXRp
ZXMuaCIKKyNlbmRpZgogI2luY2x1ZGUgPHBhbmdvL3BhbmdvLmg+CiAjaW5jbHVkZSA8cGFuZ28v
cGFuZ29jYWlyby5oPgogCkBAIC0yMzQsNyArMjM5LDExIEBAIHN0YXRpYyB2b2lkIGRyYXdHbHlw
aHNTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0UG9p
bnQmCiAgICAgICAgIGNhaXJvX3RyYW5zbGF0ZShjb250ZXh0LCB0b3RhbE9mZnNldC54KCksIHRv
dGFsT2Zmc2V0LnkoKSk7CiAKICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjb250ZXh0
LCBncmFwaGljc0NvbnRleHQtPnN0YXRlKCkuc2hhZG93Q29sb3IpOworI2lmZGVmIEdUS19BUElf
VkVSU0lPTl8yCiAgICAgICAgIGdka19jYWlyb19yZWdpb24oY29udGV4dCwgcmVuZGVyUmVnaW9u
KTsKKyNlbHNlCisgICAgICAgIGFwcGVuZFJlZ2lvblRvQ2Fpcm9Db250ZXh0KGNvbnRleHQsIHJl
bmRlclJlZ2lvbik7CisjZW5kaWYKICAgICAgICAgY2Fpcm9fY2xpcChjb250ZXh0KTsKICAgICAg
ICAgcGFuZ29fY2Fpcm9fc2hvd19sYXlvdXRfbGluZShjb250ZXh0LCBsYXlvdXRMaW5lKTsKIApA
QCAtMjU2LDcgKzI2NSwxMSBAQCBzdGF0aWMgdm9pZCBkcmF3R2x5cGhzU2hhZG93KEdyYXBoaWNz
Q29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JgogICAgICAgICBjYWly
b190KiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsK
ICAgICAgICAgY2Fpcm9fc2F2ZShjb250ZXh0KTsKICAgICAgICAgY2Fpcm9fdHJhbnNsYXRlKGNv
bnRleHQsIHRvdGFsT2Zmc2V0LngoKSwgdG90YWxPZmZzZXQueSgpKTsKKyNpZmRlZiBHVEtfQVBJ
X1ZFUlNJT05fMgogICAgICAgICBnZGtfY2Fpcm9fcmVnaW9uKGNvbnRleHQsIHJlbmRlclJlZ2lv
bik7CisjZWxzZQorICAgICAgICBhcHBlbmRSZWdpb25Ub0NhaXJvQ29udGV4dChjb250ZXh0LCBy
ZW5kZXJSZWdpb24pOworI2VuZGlmCiAgICAgICAgIGNhaXJvX2NsaXAoY29udGV4dCk7CiAgICAg
ICAgIGNhaXJvX3RyYW5zbGF0ZShjb250ZXh0LCAtdG90YWxPZmZzZXQueCgpLCAtdG90YWxPZmZz
ZXQueSgpKTsKIApAQCAtMjkxLDcgKzMwNCwxMSBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRgog
ICAgIGNoYXIqIHN0YXJ0ID0gZ191dGY4X29mZnNldF90b19wb2ludGVyKHV0ZjgsIGZyb20pOwog
ICAgIGNoYXIqIGVuZCA9IGdfdXRmOF9vZmZzZXRfdG9fcG9pbnRlcihzdGFydCwgdG8gLSBmcm9t
KTsKICAgICBpbnQgcmFuZ2VzW10gPSB7c3RhcnQgLSB1dGY4LCBlbmQgLSB1dGY4fTsKKyNpZmRl
ZiBHVEtfQVBJX1ZFUlNJT05fMgogICAgIHBhcnRpYWxSZWdpb24gPSBnZGtfcGFuZ29fbGF5b3V0
X2xpbmVfZ2V0X2NsaXBfcmVnaW9uKGxheW91dExpbmUsIDAsIDAsIHJhbmdlcywgMSk7CisjZWxz
ZQorICAgIHBhcnRpYWxSZWdpb24gPSBwYW5nb0xheW91dExpbmVHZXRDbGlwUmVnaW9uKGxheW91
dExpbmUsIDAsIDAsIHJhbmdlcywgMSk7CisjZW5kaWYKIAogICAgIGRyYXdHbHlwaHNTaGFkb3co
Y29udGV4dCwgcG9pbnQsIGxheW91dExpbmUsIHBhcnRpYWxSZWdpb24pOwogCkBAIC0zMDEsNyAr
MzE4LDExIEBAIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGCiAgICAgZmxvYXQgcmVkLCBncmVlbiwg
Ymx1ZSwgYWxwaGE7CiAgICAgY29udGV4dC0+ZmlsbENvbG9yKCkuZ2V0UkdCQShyZWQsIGdyZWVu
LCBibHVlLCBhbHBoYSk7CiAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNyLCByZWQsIGdyZWVu
LCBibHVlLCBhbHBoYSk7Ci0gICAgZ2RrX2NhaXJvX3JlZ2lvbihjciwgcGFydGlhbFJlZ2lvbik7
CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICAgICAgZ2RrX2NhaXJvX3JlZ2lvbihjciwg
cGFydGlhbFJlZ2lvbik7CisjZWxzZQorICAgICAgICBhcHBlbmRSZWdpb25Ub0NhaXJvQ29udGV4
dChjciwgcGFydGlhbFJlZ2lvbik7CisjZW5kaWYKICAgICBjYWlyb19jbGlwKGNyKTsKIAogICAg
IHBhbmdvX2NhaXJvX3Nob3dfbGF5b3V0X2xpbmUoY3IsIGxheW91dExpbmUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vUGFuZ29VdGlsaXRpZXMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vUGFuZ29VdGlsaXRp
ZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOWY4Y2QKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9QYW5n
b1V0aWxpdGllcy5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
MCBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUHJvRlVTSU9OIGVtYmVkZGVk
IHN5c3RlbXMKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0
b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUGFuZ29VdGlsaXRpZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
Y2Fpcm9fcmVnaW9uX3QqIGxheW91dEl0ZXJHZXRMaW5lQ2xpcFJlZ2lvbihQYW5nb0xheW91dEl0
ZXIgKml0ZXIsIGludCB4X29yaWdpbiwgaW50IHlfb3JpZ2luLCBjb25zdCBpbnQgKmluZGV4X3Jh
bmdlcywgaW50IG5fcmFuZ2VzKQoreworICAgIFBhbmdvUmVjdGFuZ2xlIGxvZ2ljYWxfcmVjdDsK
KyAgICBQYW5nb0xheW91dExpbmUqIGxpbmUgPSBwYW5nb19sYXlvdXRfaXRlcl9nZXRfbGluZV9y
ZWFkb25seShpdGVyKTsKKyAgICBjYWlyb19yZWdpb25fdCogY2xpcF9yZWdpb24gPSBjYWlyb19y
ZWdpb25fY3JlYXRlKCk7CisgICAgcGFuZ29fbGF5b3V0X2l0ZXJfZ2V0X2xpbmVfZXh0ZW50cyhp
dGVyLCBOVUxMLCAmbG9naWNhbF9yZWN0KTsKKyAgICBpbnQgYmFzZWxpbmUgPSBwYW5nb19sYXlv
dXRfaXRlcl9nZXRfYmFzZWxpbmUoaXRlcik7CisKKyAgICBpbnQgaSA9IDA7CisgICAgd2hpbGUg
KGkgPCBuX3JhbmdlcykgeworICAgICAgICBpbnQgKnBpeGVsX3JhbmdlcyA9IE5VTEw7CisgICAg
ICAgIGludCBuX3BpeGVsX3JhbmdlcyA9IDA7CisKKyAgICAgICAgaWYgKGluZGV4X3Jhbmdlc1tp
ICogMiArIDFdID49IGxpbmUtPnN0YXJ0X2luZGV4ICYmCisgICAgICAgICAgICBpbmRleF9yYW5n
ZXNbaSAqIDJdIDwgbGluZS0+c3RhcnRfaW5kZXggKyBsaW5lLT5sZW5ndGgpCisgICAgICAgICAg
ICBwYW5nb19sYXlvdXRfbGluZV9nZXRfeF9yYW5nZXMobGluZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleF9yYW5nZXNbaSAqIDJdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4X3Jhbmdlc1tpICogMiArIDFd
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwaXhlbF9yYW5n
ZXMsICZuX3BpeGVsX3Jhbmdlcyk7CisKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBuX3Bp
eGVsX3JhbmdlczsgKytqKSB7CisgICAgICAgICAgICBpbnQgeF9vZmYgPSBQQU5HT19QSVhFTFMo
cGl4ZWxfcmFuZ2VzWzIgKiBqXSAtIGxvZ2ljYWxfcmVjdC54KTsKKyAgICAgICAgICAgIGludCB5
X29mZiA9IFBBTkdPX1BJWEVMUyhiYXNlbGluZSAtIGxvZ2ljYWxfcmVjdC55KTsKKworICAgICAg
ICAgICAgY2Fpcm9fcmVjdGFuZ2xlX2ludF90IHJlY3Q7CisgICAgICAgICAgICByZWN0LnggPSB4
X29yaWdpbiArIHhfb2ZmOworICAgICAgICAgICAgcmVjdC55ID0geV9vcmlnaW4gLSB5X29mZjsK
KyAgICAgICAgICAgIHJlY3Qud2lkdGggPSBQQU5HT19QSVhFTFMocGl4ZWxfcmFuZ2VzWzIgKiBq
ICsgMV0gLSBsb2dpY2FsX3JlY3QueCkgLSB4X29mZjsKKyAgICAgICAgICAgIHJlY3QuaGVpZ2h0
ID0gUEFOR09fUElYRUxTKGJhc2VsaW5lIC0gbG9naWNhbF9yZWN0LnkgKyBsb2dpY2FsX3JlY3Qu
aGVpZ2h0KSAtIHlfb2ZmOworCisgICAgICAgICAgICBjYWlyb19yZWdpb25fdW5pb25fcmVjdGFu
Z2xlKGNsaXBfcmVnaW9uLCAmcmVjdCk7CisgICAgICAgIH0KKworICAgICAgICBmcmVlKHBpeGVs
X3Jhbmdlcyk7CisgICAgICAgICsraTsKKyAgICB9CisgICAgcmV0dXJuIGNsaXBfcmVnaW9uOwor
fQorCitjYWlyb19yZWdpb25fdCogcGFuZ29MYXlvdXRMaW5lR2V0Q2xpcFJlZ2lvbihQYW5nb0xh
eW91dExpbmUqIGxpbmUsIGludCB4X29yaWdpbiwgaW50IHlfb3JpZ2luLCBjb25zdCBpbnQqIGlu
ZGV4X3JhbmdlcywgaW50IG5fcmFuZ2VzKQoreworICAgIGlmICghaW5kZXhfcmFuZ2VzKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIFBhbmdvTGF5b3V0SXRlciogaXRlciA9IHBhbmdvX2xheW91
dF9nZXRfaXRlcihsaW5lLT5sYXlvdXQpOworICAgIHdoaWxlIChwYW5nb19sYXlvdXRfaXRlcl9n
ZXRfbGluZV9yZWFkb25seShpdGVyKSAhPSBsaW5lKQorICAgICAgICBwYW5nb19sYXlvdXRfaXRl
cl9uZXh0X2xpbmUgKGl0ZXIpOworCisgICAgY2Fpcm9fcmVnaW9uX3QqIGNsaXBfcmVnaW9uID0g
bGF5b3V0SXRlckdldExpbmVDbGlwUmVnaW9uKGl0ZXIsIHhfb3JpZ2luLCB5X29yaWdpbiwgaW5k
ZXhfcmFuZ2VzLCBuX3Jhbmdlcyk7CisKKyAgICBwYW5nb19sYXlvdXRfaXRlcl9mcmVlKGl0ZXIp
OworCisgICAgcmV0dXJuIGNsaXBfcmVnaW9uOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9QYW5n
b1V0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vUGFu
Z29VdGlsaXRpZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDNiY2Iw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFu
Z28vUGFuZ29VdGlsaXRpZXMuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDAwIFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04gZW1i
ZWRkZWQgc3lzdGVtcworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAq
IEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgUGFuZ29VdGlsaXRp
ZXNfaAorI2RlZmluZSBQYW5nb1V0aWxpdGllc19oCisKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVz
LmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxwYW5nby9wYW5nby5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NhaXJvX3JlZ2lvbl90KiBwYW5nb0xheW91dExpbmVHZXRDbGlw
UmVnaW9uKFBhbmdvTGF5b3V0TGluZSogbGluZSwgaW50IHhfb3JpZ2luLCBpbnQgeV9vcmlnaW4s
IGNvbnN0IGludCogaW5kZXhfcmFuZ2VzLCBpbnQgbl9yYW5nZXMpOworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQYW5nb1V0aWxpdGllc19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvY21ha2UvRmluZFBhbmdvLmNtYWtlIGIvU291cmNlL2NtYWtlL0ZpbmRQYW5nby5jbWFrZQpp
bmRleCAwZGY1NDdmLi5jNzFmMDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvRmluZFBhbmdv
LmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9GaW5kUGFuZ28uY21ha2UKQEAgLTEyLDYgKzEyLDcg
QEAgbGliZmluZF9wYWNrYWdlKFBhbmdvIEZyZWV0eXBlKQogCiAjIFVzZSBwa2ctY29uZmlnIHRv
IGdldCBoaW50cyBhYm91dCBwYXRocwogbGliZmluZF9wa2dfY2hlY2tfbW9kdWxlcyhQYW5nb19Q
S0dDT05GIHBhbmdvKQorbGliZmluZF9wa2dfY2hlY2tfbW9kdWxlcyhQYW5nb19DYWlyb19QS0dD
T05GIHBhbmdvKQogCiAjIEluY2x1ZGUgZGlyCiBmaW5kX3BhdGgoUGFuZ29fSU5DTFVERV9ESVIK
QEAgLTIwLDEyICsyMSwyMyBAQCBmaW5kX3BhdGgoUGFuZ29fSU5DTFVERV9ESVIKICAgUEFUSF9T
VUZGSVhFUyBwYW5nby0xLjAKICkKIAorZmluZF9wYXRoKFBhbmdvX0NhaXJvX0lOQ0xVREVfRElS
CisgIE5BTUVTIHBhbmdvL3BhbmdvY2Fpcm8uaAorICBQQVRIUyAke1BhbmdvX0NhaXJvX1BLR0NP
TkZfSU5DTFVERV9ESVJTfQorICBQQVRIX1NVRkZJWEVTIHBhbmdvLTEuMAorKQorCiAjIEZpbmFs
bHkgdGhlIGxpYnJhcnkgaXRzZWxmCiBmaW5kX2xpYnJhcnkoUGFuZ29fTElCUkFSWQogICBOQU1F
UyBwYW5nby0xLjAKICAgUEFUSFMgJHtQYW5nb19QS0dDT05GX0xJQlJBUllfRElSU30KICkKIAor
ZmluZF9saWJyYXJ5KFBhbmdvX0NhaXJvX0xJQlJBUlkKKyAgTkFNRVMgcGFuZ29jYWlyby0xLjAK
KyAgUEFUSFMgJHtQYW5nb19DYWlyb19QS0dDT05GX0xJQlJBUllfRElSU30KKykKKwogIyBTZXQg
dGhlIGluY2x1ZGUgZGlyIHZhcmlhYmxlcyBhbmQgdGhlIGxpYnJhcmllcyBhbmQgbGV0IGxpYmZp
bmRfcHJvY2VzcyBkbyB0aGUgcmVzdC4KICMgTk9URTogU2luZ3VsYXIgdmFyaWFibGVzIGZvciB0
aGlzIGxpYnJhcnksIHBsdXJhbCBmb3IgbGlicmFyaWVzIHRoaXMgdGhpcyBsaWIgZGVwZW5kcyBv
bi4KIHNldChQYW5nb19QUk9DRVNTX0lOQ0xVREVTIFBhbmdvX0lOQ0xVREVfRElSIEZyZWV0eXBl
X0lOQ0xVREVfRElSUykKLS0gCjEuNy4zLjQKCg==
</data>
<flag name="review"
          id="100934"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104899</attachid>
            <date>2011-08-23 12:55:47 -0700</date>
            <delta_ts>2011-08-29 09:28:23 -0700</delta_ts>
            <desc>Make GTK build link with PangoUtilities.cpp too.</desc>
            <filename>0004-Fixing-GTK3-build.patch</filename>
            <type>text/plain</type>
            <size>1426</size>
            <attacher name="Rafael Antognolli">antognolli+webkit</attacher>
            
              <data encoding="base64">RnJvbSA5YzhjMjQxMWQzMzkwZDAxMTI0ZjE0MWRiNDQ3YTllYjNjMGE5ZGRhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSYWZhZWwgQW50b2dub2xsaSA8YW50b2dub2xsaUBwcm9mdXNp
b24ubW9iaT4KRGF0ZTogVHVlLCAyMyBBdWcgMjAxMSAxMzo0MjozMiAtMDMwMApTdWJqZWN0OiBb
UEFUQ0ggNC80XSBGaXhpbmcgR1RLMyBidWlsZC4KCi0tLQogU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbSB8ICAgIDQgKysrKwogMSBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMo
KyksIDAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNzg3
ZjEwNi4uYTk0NGJmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC00MDY5LDYg
KzQwNjksOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZyZWV0eXBlL0dseXBoUGFnZVRyZWVOb2RlRnJlZVR5cGUuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVU
eXBlLmNwcAogd2ViY29yZWd0a19zb3VyY2VzICs9IFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9wYW5nby9QYW5nb1V0aWxpdGllcy5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3BhbmdvL1BhbmdvVXRpbGl0aWVzLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQYW5nby5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAK
IGVuZGlmICMgRU5EIFVTRV9GUkVFVFlQRQpAQCAtNDA3OCw2ICs0MDgwLDggQEAgZW5kaWYgIyBF
TkQgVVNFX0ZSRUVUWVBFCiAjIC0tLQogaWYgVVNFX1BBTkdPCiB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1BhbmdvVXRpbGl0aWVz
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vUGFuZ29VdGls
aXRpZXMuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udENh
Y2hlUGFuZ28uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9G
b250Q3VzdG9tUGxhdGZvcm1EYXRhUGFuZ28uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9wYW5nby9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwIFwKLS0gCjEuNy4zLjQK
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106133</attachid>
            <date>2011-09-02 08:06:12 -0700</date>
            <delta_ts>2011-09-06 15:41:10 -0700</delta_ts>
            <desc>Move FontGtk.cpp to FontPango.cpp</desc>
            <filename>move_fontgtk_to_fontpango.patch</filename>
            <type>text/plain</type>
            <size>34889</size>
            <attacher name="Rafael Antognolli">antognolli+webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkZmZiOGFlLi43ZGUwODM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIg
QEAKKzIwMTEtMDktMDIgIFJhZmFlbCBBbnRvZ25vbGxpICA8YW50b2dub2xsaUBwcm9mdXNpb24u
bW9iaT4KKworICAgICAgICBSZW5hbWUgRm9udEd0ay5jcHAgdG8gRm9udFBhbmdvLmNwcAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYzMjMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGZpbGUgd2ls
bCBiZSB1c2VkIGJ5IHRoZSBFRkwgcG9ydCB0b28sIGFuZCBzaW5jZSBpdCdzIG5vdCBHVEsKKyAg
ICAgICAgc3BlY2lmaWMgYW55bW9yZSwgcmVuYW1lIGl0IHRvIHNvbWV0aGluZyBiZXR0ZXIuCisK
KyAgICAgICAgTm8gbmV3IGZ1bmN0aW9uYWxpdHkgc28gbm8gbmV3IHRlc3RzLgorCisgICAgICAg
ICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9wYW5n
by9Gb250UGFuZ28uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0ZvbnRHdGsuY3BwLgorICAgICAgICAoV2ViQ29yZTo6ZGVzdHJveVBhbmdvUmVn
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFBhbmdvUmVnaW9uRXh0ZW50cyk6CisgICAgICAg
IChXZWJDb3JlOjp1dGYxNlRvVXRmOCk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VW5pQ2hh
clRvVVRGOCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRQYW5nb0F0dHJpYnV0ZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udDo6Y2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBs
ZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdHbHlwaHNTaGFkb3cpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6
OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
RGVmYXVsdFBhbmdvTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZsb2F0V2lkdGhG
b3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpvZmZzZXRGb3JQb3NpdGlv
bkZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNlbGVjdGlvblJlY3RG
b3JDb21wbGV4VGV4dCk6CisKIDIwMTEtMDktMDEgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTjogUmVuZGVyaW5nIGFydGlmYWN0cyBv
biBhIHJvdGF0ZWQsIHBhdHRlcm4gZmlsbGVkIFNWRyBzaGFwZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KaW5kZXggZTNjOTRkYi4uMTY4NDI0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCkBAIC0zOTU4LDcgKzM5NTgsNiBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VH
U3RyZWFtZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9Gb250R3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcCBcCkBAIC00MDg0LDYgKzQwODMsNyBAQCB3ZWJj
b3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0
eXBlL0dseXBoUGFnZVRyZWVOb2RlRnJlZVR5cGUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcAogd2ViY29y
ZWd0a19zb3VyY2VzICs9IFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5n
by9Gb250UGFuZ28uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVl
dHlwZS9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCiBlbmRpZiAjIEVORCBVU0VfRlJFRVRZ
UEUKIApAQCAtNDA5OCw2ICs0MDk4LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGxhdGZvcm1EYXRhLmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0dseXBoUGFnZVRyZWVOb2RlUGFu
Z28uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9TaW1wbGVG
b250RGF0YVBhbmdvLmNwcAord2ViY29yZWd0a19zb3VyY2VzICs9IFwKKwlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGFuZ28uY3BwCiBlbmRpZiAjIEVORCBVU0Vf
UEFOR08KIAogIyAtLS0tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvRm9udEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvRm9udEd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxOGQ0MmUuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRHdGsu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29w
eXJpZ2h0IChjKSAyMDA3IEhpcm95dWtpIElrZXpvZQotICogQ29weXJpZ2h0IChjKSAyMDA3IEtv
dWhlaSBTdXRvdQotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5j
b20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggWGFuIExvcGV6IDx4YW5AZ25vbWUub3JnPgotICog
Q29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250LmgiCi0KLSNpbmNsdWRl
ICJDYWlyb1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdPd25QdHIuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBs
YXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgotI2luY2x1ZGUg
IlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5oIgotI2luY2x1ZGUgPGNhaXJv
Lmg+Ci0jaW5jbHVkZSA8Z2RrL2dkay5oPgotI2luY2x1ZGUgPHBhbmdvL3BhbmdvLmg+Ci0jaW5j
bHVkZSA8cGFuZ28vcGFuZ29jYWlyby5oPgotCi0jaWYgVVNFKEZSRUVUWVBFKQotI2luY2x1ZGUg
PHBhbmdvL3BhbmdvZmMtZm9udG1hcC5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi10eXBlZGVmIEdka1JlZ2lvbiogUGFuZ29SZWdp
b25UeXBlOwotCi12b2lkIGRlc3Ryb3lQYW5nb1JlZ2lvbihQYW5nb1JlZ2lvblR5cGUgcmVnaW9u
KQotewotICAgIGdka19yZWdpb25fZGVzdHJveShyZWdpb24pOwotfQotCi1JbnRSZWN0IGdldFBh
bmdvUmVnaW9uRXh0ZW50cyhQYW5nb1JlZ2lvblR5cGUgcmVnaW9uKQotewotICAgIEdka1JlY3Rh
bmdsZSByZWN0YW5nbGU7Ci0gICAgZ2RrX3JlZ2lvbl9nZXRfY2xpcGJveChyZWdpb24sICZyZWN0
YW5nbGUpOwotICAgIHJldHVybiBJbnRSZWN0KHJlY3RhbmdsZS54LCByZWN0YW5nbGUueSwgcmVj
dGFuZ2xlLndpZHRoLCByZWN0YW5nbGUuaGVpZ2h0KTsKLX0KLSNlbHNlCi10eXBlZGVmIGNhaXJv
X3JlZ2lvbl90KiBQYW5nb1JlZ2lvblR5cGU7Ci0KLXZvaWQgZGVzdHJveVBhbmdvUmVnaW9uKFBh
bmdvUmVnaW9uVHlwZSByZWdpb24pCi17Ci0gICAgY2Fpcm9fcmVnaW9uX2Rlc3Ryb3kocmVnaW9u
KTsKLX0KLQotSW50UmVjdCBnZXRQYW5nb1JlZ2lvbkV4dGVudHMoUGFuZ29SZWdpb25UeXBlIHJl
Z2lvbikKLXsKLSAgICBjYWlyb19yZWN0YW5nbGVfaW50X3QgcmVjdGFuZ2xlOwotICAgIGNhaXJv
X3JlZ2lvbl9nZXRfZXh0ZW50cyhyZWdpb24sICZyZWN0YW5nbGUpOwotICAgIHJldHVybiBJbnRS
ZWN0KHJlY3RhbmdsZS54LCByZWN0YW5nbGUueSwgcmVjdGFuZ2xlLndpZHRoLCByZWN0YW5nbGUu
aGVpZ2h0KTsKLX0KLSNlbmRpZgotCi0jZGVmaW5lIElTX0hJR0hfU1VSUk9HQVRFKHUpICAoKFVD
aGFyKSh1KSA+PSAoVUNoYXIpMHhkODAwICYmIChVQ2hhcikodSkgPD0gKFVDaGFyKTB4ZGJmZikK
LSNkZWZpbmUgSVNfTE9XX1NVUlJPR0FURSh1KSAgKChVQ2hhcikodSkgPj0gKFVDaGFyKTB4ZGMw
MCAmJiAoVUNoYXIpKHUpIDw9IChVQ2hhcikweGRmZmYpCi0KLXN0YXRpYyBnY2hhciogdXRmMTZU
b1V0ZjgoY29uc3QgVUNoYXIqIGFUZXh0LCBnaW50IGFMZW5ndGgsIGdpbnQgJmxlbmd0aCkKLXsK
LSAgICBnYm9vbGVhbiBuZWVkQ29weSA9IEZBTFNFOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBhTGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKCFhVGV4dFtpXSB8fCBJU19MT1dfU1VSUk9H
QVRFKGFUZXh0W2ldKSkgewotICAgICAgICAgICAgbmVlZENvcHkgPSBUUlVFOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0gCi0KLSAgICAgICAgaWYgKElTX0hJR0hfU1VSUk9HQVRFKGFU
ZXh0W2ldKSkgewotICAgICAgICAgICAgaWYgKGkgPCBhTGVuZ3RoIC0gMSAmJiBJU19MT1dfU1VS
Uk9HQVRFKGFUZXh0W2krMV0pKQotICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgIG5lZWRDb3B5ID0gVFJVRTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEdPd25QdHI8VUNo
YXI+IGNvcGllZFN0cmluZzsKLSAgICBpZiAobmVlZENvcHkpIHsKLSAgICAgICAgLyogUGFuZ28g
ZG9lc24ndCBjb3JyZWN0bHkgaGFuZGxlIG51bHMuICBXZSBjb252ZXJ0IHRoZW0gdG8gMHhmZi4g
Ki8KLSAgICAgICAgLyogQWxzbyAidmFsaWRhdGUiIFVURi0xNiB0ZXh0IHRvIG1ha2Ugc3VyZSBj
b252ZXJzaW9uIGRvZXNuJ3QgZmFpbC4gKi8KLQotICAgICAgICBjb3BpZWRTdHJpbmcuc2V0KHN0
YXRpY19jYXN0PFVDaGFyKj4oZ19tZW1kdXAoYVRleHQsIGFMZW5ndGggKiBzaXplb2YoYVRleHRb
MF0pKSkpOwotICAgICAgICBVQ2hhciogcCA9IGNvcGllZFN0cmluZy5nZXQoKTsKLQotICAgICAg
ICAvKiBkb24ndCBuZWVkIHRvIHJlc2V0IGkgKi8KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBhTGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmICghcFtpXSB8fCBJU19MT1dfU1VSUk9H
QVRFKHBbaV0pKQotICAgICAgICAgICAgICAgIHBbaV0gPSAweEZGRkQ7Ci0gICAgICAgICAgICBl
bHNlIGlmIChJU19ISUdIX1NVUlJPR0FURShwW2ldKSkgewotICAgICAgICAgICAgICAgIGlmIChp
IDwgYUxlbmd0aCAtIDEgJiYgSVNfTE9XX1NVUlJPR0FURShhVGV4dFtpKzFdKSkKLSAgICAgICAg
ICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgcFtpXSA9IDB4RkZGRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGFU
ZXh0ID0gcDsKLSAgICB9Ci0KLSAgICBnY2hhciogdXRmOFRleHQ7Ci0gICAgZ2xvbmcgaXRlbXNX
cml0dGVuOwotICAgIHV0ZjhUZXh0ID0gZ191dGYxNl90b191dGY4KHN0YXRpY19jYXN0PGNvbnN0
IGd1bmljaGFyMio+KGFUZXh0KSwgYUxlbmd0aCwgMCwgJml0ZW1zV3JpdHRlbiwgMCk7Ci0gICAg
bGVuZ3RoID0gaXRlbXNXcml0dGVuOwotCi0gICAgcmV0dXJuIHV0ZjhUZXh0OwotfQotCi1zdGF0
aWMgZ2NoYXIqIGNvbnZlcnRVbmlDaGFyVG9VVEY4KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBn
aW50IGxlbmd0aCwgaW50IGZyb20sIGludCB0bykKLXsKLSAgICBnaW50IG5ld0xlbmd0aCA9IDA7
Ci0gICAgR093blB0cjxnY2hhcj4gdXRmOFRleHQodXRmMTZUb1V0ZjgoY2hhcmFjdGVycywgbGVu
Z3RoLCBuZXdMZW5ndGgpKTsKLSAgICBpZiAoIXV0ZjhUZXh0KQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIGdjaGFyKiBwb3MgPSB1dGY4VGV4dC5nZXQoKTsKLSAgICBpZiAoZnJvbSA+IDApIHsK
LSAgICAgICAgLy8gZGlzY2FyZCB0aGUgZmlyc3QgJ2Zyb20nIGNoYXJhY3RlcnMKLSAgICAgICAg
Ly8gRklYTUU6IHdlIHNob3VsZCBkbyB0aGlzIGJlZm9yZSB0aGUgY29udmVyc2lvbiBwcm9iYWJs
eQotICAgICAgICBwb3MgPSBnX3V0Zjhfb2Zmc2V0X3RvX3BvaW50ZXIodXRmOFRleHQuZ2V0KCks
IGZyb20pOwotICAgIH0KLQotICAgIGdpbnQgbGVuID0gc3RybGVuKHBvcyk7Ci0gICAgR1N0cmlu
ZyogcmV0ID0gZ19zdHJpbmdfbmV3X2xlbihOVUxMLCBsZW4pOwotCi0gICAgLy8gcmVwbGFjZSBs
aW5lIGJyZWFrIGJ5IHNwYWNlCi0gICAgd2hpbGUgKGxlbiA+IDApIHsKLSAgICAgICAgZ2ludCBp
bmRleCwgc3RhcnQ7Ci0gICAgICAgIHBhbmdvX2ZpbmRfcGFyYWdyYXBoX2JvdW5kYXJ5KHBvcywg
bGVuLCAmaW5kZXgsICZzdGFydCk7Ci0gICAgICAgIGdfc3RyaW5nX2FwcGVuZF9sZW4ocmV0LCBw
b3MsIGluZGV4KTsKLSAgICAgICAgaWYgKGluZGV4ID09IHN0YXJ0KQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGdfc3RyaW5nX2FwcGVuZF9jKHJldCwgJyAnKTsKLSAgICAgICAgcG9zICs9
IHN0YXJ0OwotICAgICAgICBsZW4gLT0gc3RhcnQ7Ci0gICAgfQotICAgIHJldHVybiBnX3N0cmlu
Z19mcmVlKHJldCwgRkFMU0UpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRQYW5nb0F0dHJpYnV0ZXMo
Y29uc3QgRm9udCogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBQYW5nb0xheW91dCogbGF5b3V0
KQotewotI2lmIFVTRShGUkVFVFlQRSkKLSAgICBpZiAoZm9udC0+cHJpbWFyeUZvbnQoKS0+cGxh
dGZvcm1EYXRhKCkubV9wYXR0ZXJuKSB7Ci0gICAgICAgIFBhbmdvRm9udERlc2NyaXB0aW9uKiBk
ZXNjID0gcGFuZ29fZmNfZm9udF9kZXNjcmlwdGlvbl9mcm9tX3BhdHRlcm4oZm9udC0+cHJpbWFy
eUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkubV9wYXR0ZXJuLmdldCgpLCBGQUxTRSk7Ci0gICAgICAg
IHBhbmdvX2xheW91dF9zZXRfZm9udF9kZXNjcmlwdGlvbihsYXlvdXQsIGRlc2MpOwotICAgICAg
ICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUoZGVzYyk7Ci0gICAgfQotI2VsaWYgVVNFKFBB
TkdPKQotICAgIGlmIChmb250LT5wcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5tX2ZvbnQp
IHsKLSAgICAgICAgUGFuZ29Gb250RGVzY3JpcHRpb24qIGRlc2MgPSBwYW5nb19mb250X2Rlc2Ny
aWJlKGZvbnQtPnByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpLm1fZm9udCk7Ci0gICAgICAg
IHBhbmdvX2xheW91dF9zZXRfZm9udF9kZXNjcmlwdGlvbihsYXlvdXQsIGRlc2MpOwotICAgICAg
ICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUoZGVzYyk7Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICBwYW5nb19sYXlvdXRfc2V0X2F1dG9fZGlyKGxheW91dCwgRkFMU0UpOwotCi0gICAgUGFuZ29D
b250ZXh0KiBwYW5nb0NvbnRleHQgPSBwYW5nb19sYXlvdXRfZ2V0X2NvbnRleHQobGF5b3V0KTsK
LSAgICBQYW5nb0RpcmVjdGlvbiBkaXJlY3Rpb24gPSBydW4ucnRsKCkgPyBQQU5HT19ESVJFQ1RJ
T05fUlRMIDogUEFOR09fRElSRUNUSU9OX0xUUjsKLSAgICBwYW5nb19jb250ZXh0X3NldF9iYXNl
X2RpcihwYW5nb0NvbnRleHQsIGRpcmVjdGlvbik7Ci0gICAgUGFuZ29BdHRyTGlzdCogbGlzdCA9
IHBhbmdvX2F0dHJfbGlzdF9uZXcoKTsKLSAgICBQYW5nb0F0dHJpYnV0ZSogYXR0cjsKLQotICAg
IGF0dHIgPSBwYW5nb19hdHRyX3NpemVfbmV3X2Fic29sdXRlKGZvbnQtPnBpeGVsU2l6ZSgpICog
UEFOR09fU0NBTEUpOwotICAgIGF0dHItPmVuZF9pbmRleCA9IEdfTUFYVUlOVDsKLSAgICBwYW5n
b19hdHRyX2xpc3RfaW5zZXJ0X2JlZm9yZShsaXN0LCBhdHRyKTsKLQotICAgIGlmICghcnVuLnNw
YWNpbmdEaXNhYmxlZCgpKSB7Ci0gICAgICAgIGF0dHIgPSBwYW5nb19hdHRyX2xldHRlcl9zcGFj
aW5nX25ldyhmb250LT5sZXR0ZXJTcGFjaW5nKCkgKiBQQU5HT19TQ0FMRSk7Ci0gICAgICAgIGF0
dHItPmVuZF9pbmRleCA9IEdfTUFYVUlOVDsKLSAgICAgICAgcGFuZ29fYXR0cl9saXN0X2luc2Vy
dF9iZWZvcmUobGlzdCwgYXR0cik7Ci0gICAgfQotCi0gICAgLy8gUGFuZ28gZG9lcyBub3QgeWV0
IHN1cHBvcnQgc3ludGhlc2lzaW5nIHNtYWxsIGNhcHMKLSAgICAvLyBTZWUgaHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MTAKLQotICAgIHBhbmdvX2xheW91dF9zZXRf
YXR0cmlidXRlcyhsYXlvdXQsIGxpc3QpOwotICAgIHBhbmdvX2F0dHJfbGlzdF91bnJlZihsaXN0
KTsKLX0KLQotYm9vbCBGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQo
KQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJ
ZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0
aWMgdm9pZCBkcmF3R2x5cGhzU2hhZG93KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgUGFuZ29MYXlvdXRMaW5lKiBsYXlvdXRMaW5lLCBQ
YW5nb1JlZ2lvblR5cGUgcmVuZGVyUmVnaW9uKQotewotICAgIFNoYWRvd0JsdXImIHNoYWRvdyA9
IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnNoYWRvd0JsdXIoKTsKLQotICAg
IGlmICghKGdyYXBoaWNzQ29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZpbGwp
IHx8IHNoYWRvdy50eXBlKCkgPT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEZsb2F0UG9pbnQgdG90YWxPZmZzZXQocG9pbnQgKyBncmFwaGljc0NvbnRleHQt
PnN0YXRlKCkuc2hhZG93T2Zmc2V0KTsKLQotICAgIC8vIE9wdGltaXplIG5vbi1ibHVycnkgc2hh
ZG93cywgYnkganVzdCBkcmF3aW5nIHRleHQgd2l0aG91dCB0aGUgU2hhZG93Qmx1ci4KLSAgICBp
ZiAoIXNoYWRvdy5tdXN0VXNlU2hhZG93Qmx1cihncmFwaGljc0NvbnRleHQpKSB7Ci0gICAgICAg
IGNhaXJvX3QqIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5j
cigpOwotICAgICAgICBjYWlyb19zYXZlKGNvbnRleHQpOwotICAgICAgICBjYWlyb190cmFuc2xh
dGUoY29udGV4dCwgdG90YWxPZmZzZXQueCgpLCB0b3RhbE9mZnNldC55KCkpOwotCi0gICAgICAg
IHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY29udGV4dCwgZ3JhcGhpY3NDb250ZXh0LT5zdGF0ZSgp
LnNoYWRvd0NvbG9yKTsKLSAgICAgICAgZ2RrX2NhaXJvX3JlZ2lvbihjb250ZXh0LCByZW5kZXJS
ZWdpb24pOwotICAgICAgICBjYWlyb19jbGlwKGNvbnRleHQpOwotICAgICAgICBwYW5nb19jYWly
b19zaG93X2xheW91dF9saW5lKGNvbnRleHQsIGxheW91dExpbmUpOwotCi0gICAgICAgIGNhaXJv
X3Jlc3RvcmUoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBGbG9hdFJl
Y3QgZXh0ZW50cyhnZXRQYW5nb1JlZ2lvbkV4dGVudHMocmVuZGVyUmVnaW9uKSk7Ci0gICAgZXh0
ZW50cy5zZXRMb2NhdGlvbihGbG9hdFBvaW50KHBvaW50LngoKSwgcG9pbnQueSgpIC0gZXh0ZW50
cy5oZWlnaHQoKSkpOwotICAgIGlmIChHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBz
aGFkb3cuYmVnaW5TaGFkb3dMYXllcihncmFwaGljc0NvbnRleHQsIGV4dGVudHMpKSB7Ci0gICAg
ICAgIGNhaXJvX3QqIGNhaXJvU2hhZG93Q29udGV4dCA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5jcigpOwotICAgICAgICBjYWlyb190cmFuc2xhdGUoY2Fpcm9TaGFkb3dDb250
ZXh0LCBwb2ludC54KCksIHBvaW50LnkoKSk7Ci0gICAgICAgIHBhbmdvX2NhaXJvX3Nob3dfbGF5
b3V0X2xpbmUoY2Fpcm9TaGFkb3dDb250ZXh0LCBsYXlvdXRMaW5lKTsKLQotICAgICAgICAvLyBX
ZSBuZWVkIHRoZSBjbGlwcGluZyByZWdpb24gdG8gYmUgYWN0aXZlIHdoZW4gd2UgYmxpdCB0aGUg
Ymx1cnJlZCBzaGFkb3cgYmFjaywKLSAgICAgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCB3YW50IGFu
eSBiaXRzIGFuZCBwaWVjZXMgb2YgY2hhcmFjdGVycyBvdXQgb2YgcmFuZ2UgdG8gYmUKLSAgICAg
ICAgLy8gZHJhd24uIFNpbmNlIFNoYWRvd0JsdXIgZXhwZWN0cyBhIGNvbnNpc3RlbnQgdHJhbnNm
b3JtLCB3ZSBoYXZlIHRvIHVuZG8gdGhlCi0gICAgICAgIC8vIHRyYW5zbGF0aW9uIGJlZm9yZSBj
YWxsaW5nIGVuZFNoYWRvd0xheWVyIGFzIHdlbGwuCi0gICAgICAgIGNhaXJvX3QqIGNvbnRleHQg
PSBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwotICAgICAgICBjYWly
b19zYXZlKGNvbnRleHQpOwotICAgICAgICBjYWlyb190cmFuc2xhdGUoY29udGV4dCwgdG90YWxP
ZmZzZXQueCgpLCB0b3RhbE9mZnNldC55KCkpOwotICAgICAgICBnZGtfY2Fpcm9fcmVnaW9uKGNv
bnRleHQsIHJlbmRlclJlZ2lvbik7Ci0gICAgICAgIGNhaXJvX2NsaXAoY29udGV4dCk7Ci0gICAg
ICAgIGNhaXJvX3RyYW5zbGF0ZShjb250ZXh0LCAtdG90YWxPZmZzZXQueCgpLCAtdG90YWxPZmZz
ZXQueSgpKTsKLQotICAgICAgICBzaGFkb3cuZW5kU2hhZG93TGF5ZXIoZ3JhcGhpY3NDb250ZXh0
KTsKLSAgICAgICAgY2Fpcm9fcmVzdG9yZShjb250ZXh0KTsKLSAgICB9Ci19Ci0KLXZvaWQgRm9u
dDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QK
LXsKLSNpZiBVU0UoRlJFRVRZUEUpCi0gICAgaWYgKCFwcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURh
dGEoKS5tX3BhdHRlcm4pIHsKLSAgICAgICAgZHJhd1NpbXBsZVRleHQoY29udGV4dCwgcnVuLCBw
b2ludCwgZnJvbSwgdG8pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBj
YWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwotICAgIFBhbmdv
TGF5b3V0KiBsYXlvdXQgPSBwYW5nb19jYWlyb19jcmVhdGVfbGF5b3V0KGNyKTsKLSAgICBzZXRQ
YW5nb0F0dHJpYnV0ZXModGhpcywgcnVuLCBsYXlvdXQpOwotCi0gICAgZ2NoYXIqIHV0ZjggPSBj
b252ZXJ0VW5pQ2hhclRvVVRGOChydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCksIDAsIHJ1
bi5sZW5ndGgoKSk7Ci0gICAgcGFuZ29fbGF5b3V0X3NldF90ZXh0KGxheW91dCwgdXRmOCwgLTEp
OwotCi0gICAgLy8gT3VyIGxheW91dHMgYXJlIHNpbmdsZSBsaW5lCi0gICAgUGFuZ29MYXlvdXRM
aW5lKiBsYXlvdXRMaW5lID0gcGFuZ29fbGF5b3V0X2dldF9saW5lX3JlYWRvbmx5KGxheW91dCwg
MCk7Ci0KLSAgICAvLyBHZXQgdGhlIHJlZ2lvbiB3aGVyZSB0aGlzIHRleHQgd2lsbCBiZSBsYWlk
IG91dC4gV2Ugd2lsbCB1c2UgaXQgdG8gY2xpcAotICAgIC8vIHRoZSBDYWlybyBjb250ZXh0LCBm
b3Igd2hlbiB3ZSBhcmUgb25seSBwYWludGluZyBwYXJ0IG9mIHRoZSB0ZXh0IHJ1biBhbmQKLSAg
ICAvLyB0byBjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIHNoYWRvdyBidWZmZXIuCi0gICAgUGFu
Z29SZWdpb25UeXBlIHBhcnRpYWxSZWdpb24gPSAwOwotICAgIGNoYXIqIHN0YXJ0ID0gZ191dGY4
X29mZnNldF90b19wb2ludGVyKHV0ZjgsIGZyb20pOwotICAgIGNoYXIqIGVuZCA9IGdfdXRmOF9v
ZmZzZXRfdG9fcG9pbnRlcihzdGFydCwgdG8gLSBmcm9tKTsKLSAgICBpbnQgcmFuZ2VzW10gPSB7
c3RhcnQgLSB1dGY4LCBlbmQgLSB1dGY4fTsKLSAgICBwYXJ0aWFsUmVnaW9uID0gZ2RrX3Bhbmdv
X2xheW91dF9saW5lX2dldF9jbGlwX3JlZ2lvbihsYXlvdXRMaW5lLCAwLCAwLCByYW5nZXMsIDEp
OwotCi0gICAgZHJhd0dseXBoc1NoYWRvdyhjb250ZXh0LCBwb2ludCwgbGF5b3V0TGluZSwgcGFy
dGlhbFJlZ2lvbik7Ci0KLSAgICBjYWlyb19zYXZlKGNyKTsKLSAgICBjYWlyb190cmFuc2xhdGUo
Y3IsIHBvaW50LngoKSwgcG9pbnQueSgpKTsKLQotICAgIGZsb2F0IHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhOwotICAgIGNvbnRleHQtPmZpbGxDb2xvcigpLmdldFJHQkEocmVkLCBncmVlbiwgYmx1
ZSwgYWxwaGEpOwotICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVkLCBncmVlbiwgYmx1
ZSwgYWxwaGEpOwotICAgIGdka19jYWlyb19yZWdpb24oY3IsIHBhcnRpYWxSZWdpb24pOwotICAg
IGNhaXJvX2NsaXAoY3IpOwotCi0gICAgcGFuZ29fY2Fpcm9fc2hvd19sYXlvdXRfbGluZShjciwg
bGF5b3V0TGluZSk7Ci0KLSAgICBpZiAoY29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0
TW9kZVN0cm9rZSkgewotICAgICAgICBDb2xvciBzdHJva2VDb2xvciA9IGNvbnRleHQtPnN0cm9r
ZUNvbG9yKCk7Ci0gICAgICAgIHN0cm9rZUNvbG9yLmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGEpOwotICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY3IsIHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKTsKLSAgICAgICAgcGFuZ29fY2Fpcm9fbGF5b3V0X2xpbmVfcGF0aChjciwgbGF5
b3V0TGluZSk7Ci0gICAgICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNyLCBjb250ZXh0LT5zdHJv
a2VUaGlja25lc3MoKSk7Ci0gICAgICAgIGNhaXJvX3N0cm9rZShjcik7Ci0gICAgfQotCi0gICAg
Ly8gUGFuZ28gc29tZXRpbWVzIGxlYXZlcyBiZWhpbmQgcGF0aHMgd2UgZG9uJ3Qgd2FudAotICAg
IGNhaXJvX25ld19wYXRoKGNyKTsKLQotICAgIGRlc3Ryb3lQYW5nb1JlZ2lvbihwYXJ0aWFsUmVn
aW9uKTsKLSAgICBnX2ZyZWUodXRmOCk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGF5b3V0KTsKLQot
ICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwotfQotCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtz
Rm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0
UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywgY29uc3QgRmxv
YXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotLy8gV2Ugc2hvdWxkIGNyZWF0ZSB0aGUg
bGF5b3V0IHdpdGggb3VyIGFjdHVhbCBjb250ZXh0IGJ1dCB3ZSBjYW4ndCBhY2Nlc3MgaXQgZnJv
bSBoZXJlLgotc3RhdGljIFBhbmdvTGF5b3V0KiBnZXREZWZhdWx0UGFuZ29MYXlvdXQoY29uc3Qg
VGV4dFJ1biYgcnVuKQotewotICAgIHN0YXRpYyBQYW5nb0ZvbnRNYXAqIG1hcCA9IHBhbmdvX2Nh
aXJvX2ZvbnRfbWFwX2dldF9kZWZhdWx0KCk7Ci0jaWYgUEFOR09fVkVSU0lPTl9DSEVDSygxLDIx
LDUpCi0gICAgc3RhdGljIFBhbmdvQ29udGV4dCogcGFuZ29Db250ZXh0ID0gcGFuZ29fZm9udF9t
YXBfY3JlYXRlX2NvbnRleHQobWFwKTsKLSNlbHNlCi0gICAgLy8gRGVwcmVjYXRlZCBpbiBQYW5n
byAxLjIxLgotICAgIHN0YXRpYyBQYW5nb0NvbnRleHQqIHBhbmdvQ29udGV4dCA9IHBhbmdvX2Nh
aXJvX2ZvbnRfbWFwX2NyZWF0ZV9jb250ZXh0KFBBTkdPX0NBSVJPX0ZPTlRfTUFQKG1hcCkpOwot
I2VuZGlmCi0gICAgUGFuZ29MYXlvdXQqIGxheW91dCA9IHBhbmdvX2xheW91dF9uZXcocGFuZ29D
b250ZXh0KTsKLQotICAgIHJldHVybiBsYXlvdXQ7Ci19Ci0KLWZsb2F0IEZvbnQ6OmZsb2F0V2lk
dGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogb3ZlcmZsb3cpIGNvbnN0
Ci17Ci0jaWYgVVNFKEZSRUVUWVBFKQotICAgIGlmICghcHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1E
YXRhKCkubV9wYXR0ZXJuKQotICAgICAgICByZXR1cm4gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQo
cnVuLCAwLCBmYWxsYmFja0ZvbnRzLCBvdmVyZmxvdyk7Ci0jZW5kaWYKLQotICAgIGlmIChydW4u
bGVuZ3RoKCkgPT0gMCkKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0KLSAgICBQYW5nb0xheW91dCog
bGF5b3V0ID0gZ2V0RGVmYXVsdFBhbmdvTGF5b3V0KHJ1bik7Ci0gICAgc2V0UGFuZ29BdHRyaWJ1
dGVzKHRoaXMsIHJ1biwgbGF5b3V0KTsKLQotICAgIGdjaGFyKiB1dGY4ID0gY29udmVydFVuaUNo
YXJUb1VURjgocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpLCAwLCBydW4ubGVuZ3RoKCkp
OwotICAgIHBhbmdvX2xheW91dF9zZXRfdGV4dChsYXlvdXQsIHV0ZjgsIC0xKTsKLQotICAgIGlu
dCB3aWR0aDsKLSAgICBwYW5nb19sYXlvdXRfZ2V0X3BpeGVsX3NpemUobGF5b3V0LCAmd2lkdGgs
IDApOwotCi0gICAgZ19mcmVlKHV0ZjgpOwotICAgIGdfb2JqZWN0X3VucmVmKGxheW91dCk7Ci0K
LSAgICByZXR1cm4gd2lkdGg7Ci19Ci0KLWludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNv
bXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeEZsb2F0LCBib29sIGluY2x1ZGVQ
YXJ0aWFsR2x5cGhzKSBjb25zdAotewotI2lmIFVTRShGUkVFVFlQRSkKLSAgICBpZiAoIXByaW1h
cnlGb250KCktPnBsYXRmb3JtRGF0YSgpLm1fcGF0dGVybikKLSAgICAgICAgcmV0dXJuIG9mZnNl
dEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChydW4sIHhGbG9hdCwgaW5jbHVkZVBhcnRpYWxHbHlw
aHMpOwotI2VuZGlmCi0gICAgLy8gRklYTUU6IFRoaXMgdHJ1bmNhdGlvbiBpcyBub3QgYSBwcm9i
bGVtIGZvciBIVE1MLCBidXQgb25seSBhZmZlY3RzIFNWRywgd2hpY2ggcGFzc2VzIGZsb2F0aW5n
LXBvaW50IG51bWJlcnMKLSAgICAvLyB0byBGb250OjpvZmZzZXRGb3JQb3NpdGlvbigpLiBCdWcg
aHR0cDovL3dlYmtpdC5vcmcvYi80MDY3MyB0cmFja3MgZml4aW5nIHRoaXMgcHJvYmxlbS4KLSAg
ICBpbnQgeCA9IHN0YXRpY19jYXN0PGludD4oeEZsb2F0KTsKLQotICAgIFBhbmdvTGF5b3V0KiBs
YXlvdXQgPSBnZXREZWZhdWx0UGFuZ29MYXlvdXQocnVuKTsKLSAgICBzZXRQYW5nb0F0dHJpYnV0
ZXModGhpcywgcnVuLCBsYXlvdXQpOwotCi0gICAgZ2NoYXIqIHV0ZjggPSBjb252ZXJ0VW5pQ2hh
clRvVVRGOChydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7
Ci0gICAgcGFuZ29fbGF5b3V0X3NldF90ZXh0KGxheW91dCwgdXRmOCwgLTEpOwotCi0gICAgaW50
IGluZGV4LCB0cmFpbGluZzsKLSAgICBwYW5nb19sYXlvdXRfeHlfdG9faW5kZXgobGF5b3V0LCB4
ICogUEFOR09fU0NBTEUsIDEsICZpbmRleCwgJnRyYWlsaW5nKTsKLSAgICBnbG9uZyBvZmZzZXQg
PSBnX3V0ZjhfcG9pbnRlcl90b19vZmZzZXQodXRmOCwgdXRmOCArIGluZGV4KTsKLSAgICBpZiAo
aW5jbHVkZVBhcnRpYWxHbHlwaHMpCi0gICAgICAgIG9mZnNldCArPSB0cmFpbGluZzsKLQotICAg
IGdfZnJlZSh1dGY4KTsKLSAgICBnX29iamVjdF91bnJlZihsYXlvdXQpOwotCi0gICAgcmV0dXJu
IG9mZnNldDsKLX0KLQotRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaCwgaW50
IGZyb20sIGludCB0bykgY29uc3QKLXsKLSNpZiBVU0UoRlJFRVRZUEUpCi0gICAgaWYgKCFwcmlt
YXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5tX3BhdHRlcm4pCi0gICAgICAgIHJldHVybiBzZWxl
Y3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChydW4sIHBvaW50LCBoLCBmcm9tLCB0byk7Ci0jZW5kaWYK
LQotICAgIFBhbmdvTGF5b3V0KiBsYXlvdXQgPSBnZXREZWZhdWx0UGFuZ29MYXlvdXQocnVuKTsK
LSAgICBzZXRQYW5nb0F0dHJpYnV0ZXModGhpcywgcnVuLCBsYXlvdXQpOwotCi0gICAgZ2NoYXIq
IHV0ZjggPSBjb252ZXJ0VW5pQ2hhclRvVVRGOChydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3Ro
KCksIDAsIHJ1bi5sZW5ndGgoKSk7Ci0gICAgcGFuZ29fbGF5b3V0X3NldF90ZXh0KGxheW91dCwg
dXRmOCwgLTEpOwotCi0gICAgY2hhciogc3RhcnQgPSBnX3V0Zjhfb2Zmc2V0X3RvX3BvaW50ZXIo
dXRmOCwgZnJvbSk7Ci0gICAgY2hhciogZW5kID0gZ191dGY4X29mZnNldF90b19wb2ludGVyKHN0
YXJ0LCB0byAtIGZyb20pOwotCi0gICAgaWYgKHJ1bi5sdHIoKSkgewotICAgICAgICBmcm9tID0g
c3RhcnQgLSB1dGY4OwotICAgICAgICB0byA9IGVuZCAtIHV0Zjg7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgZnJvbSA9IGVuZCAtIHV0Zjg7Ci0gICAgICAgIHRvID0gc3RhcnQgLSB1dGY4OwotICAg
IH0KLQotICAgIFBhbmdvTGF5b3V0TGluZSogbGF5b3V0TGluZSA9IHBhbmdvX2xheW91dF9nZXRf
bGluZV9yZWFkb25seShsYXlvdXQsIDApOwotICAgIGludCB4X3BvczsKLQotICAgIHhfcG9zID0g
MDsKLSAgICBpZiAoZnJvbSA8IGxheW91dExpbmUtPmxlbmd0aCkKLSAgICAgICAgcGFuZ29fbGF5
b3V0X2xpbmVfaW5kZXhfdG9feChsYXlvdXRMaW5lLCBmcm9tLCBGQUxTRSwgJnhfcG9zKTsKLSAg
ICBmbG9hdCBiZWZvcmVXaWR0aCA9IFBBTkdPX1BJWEVMU19GTE9PUih4X3Bvcyk7Ci0KLSAgICB4
X3BvcyA9IDA7Ci0gICAgaWYgKHJ1bi5sdHIoKSB8fCB0byA8IGxheW91dExpbmUtPmxlbmd0aCkK
LSAgICAgICAgcGFuZ29fbGF5b3V0X2xpbmVfaW5kZXhfdG9feChsYXlvdXRMaW5lLCB0bywgRkFM
U0UsICZ4X3Bvcyk7Ci0gICAgZmxvYXQgYWZ0ZXJXaWR0aCA9IFBBTkdPX1BJWEVMUyh4X3Bvcyk7
Ci0KLSAgICBnX2ZyZWUodXRmOCk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGF5b3V0KTsKLQotICAg
IHJldHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsgYmVmb3JlV2lkdGgsIHBvaW50LnkoKSwgYWZ0
ZXJXaWR0aCAtIGJlZm9yZVdpZHRoLCBoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBhbmdvLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQYW5nby5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uODE4ZDQyZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQYW5nby5jcHAKQEAgLTAsMCArMSw0
NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBt
aWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChjKSAyMDA3IEhpcm95dWtpIElrZXpv
ZQorICogQ29weXJpZ2h0IChjKSAyMDA3IEtvdWhlaSBTdXRvdQorICogQ29weXJpZ2h0IChDKSAy
MDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggWGFu
IExvcGV6IDx4YW5AZ25vbWUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQu
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJGb250LmgiCisKKyNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUg
IkdPd25QdHIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCisjaW5jbHVk
ZSAiU2hhZG93Qmx1ci5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAi
VGV4dFJ1bi5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2lu
Y2x1ZGUgPHBhbmdvL3BhbmdvLmg+CisjaW5jbHVkZSA8cGFuZ28vcGFuZ29jYWlyby5oPgorCisj
aWYgVVNFKEZSRUVUWVBFKQorI2luY2x1ZGUgPHBhbmdvL3BhbmdvZmMtZm9udG1hcC5oPgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCit0
eXBlZGVmIEdka1JlZ2lvbiogUGFuZ29SZWdpb25UeXBlOworCit2b2lkIGRlc3Ryb3lQYW5nb1Jl
Z2lvbihQYW5nb1JlZ2lvblR5cGUgcmVnaW9uKQoreworICAgIGdka19yZWdpb25fZGVzdHJveShy
ZWdpb24pOworfQorCitJbnRSZWN0IGdldFBhbmdvUmVnaW9uRXh0ZW50cyhQYW5nb1JlZ2lvblR5
cGUgcmVnaW9uKQoreworICAgIEdka1JlY3RhbmdsZSByZWN0YW5nbGU7CisgICAgZ2RrX3JlZ2lv
bl9nZXRfY2xpcGJveChyZWdpb24sICZyZWN0YW5nbGUpOworICAgIHJldHVybiBJbnRSZWN0KHJl
Y3RhbmdsZS54LCByZWN0YW5nbGUueSwgcmVjdGFuZ2xlLndpZHRoLCByZWN0YW5nbGUuaGVpZ2h0
KTsKK30KKyNlbHNlCit0eXBlZGVmIGNhaXJvX3JlZ2lvbl90KiBQYW5nb1JlZ2lvblR5cGU7CisK
K3ZvaWQgZGVzdHJveVBhbmdvUmVnaW9uKFBhbmdvUmVnaW9uVHlwZSByZWdpb24pCit7CisgICAg
Y2Fpcm9fcmVnaW9uX2Rlc3Ryb3kocmVnaW9uKTsKK30KKworSW50UmVjdCBnZXRQYW5nb1JlZ2lv
bkV4dGVudHMoUGFuZ29SZWdpb25UeXBlIHJlZ2lvbikKK3sKKyAgICBjYWlyb19yZWN0YW5nbGVf
aW50X3QgcmVjdGFuZ2xlOworICAgIGNhaXJvX3JlZ2lvbl9nZXRfZXh0ZW50cyhyZWdpb24sICZy
ZWN0YW5nbGUpOworICAgIHJldHVybiBJbnRSZWN0KHJlY3RhbmdsZS54LCByZWN0YW5nbGUueSwg
cmVjdGFuZ2xlLndpZHRoLCByZWN0YW5nbGUuaGVpZ2h0KTsKK30KKyNlbmRpZgorCisjZGVmaW5l
IElTX0hJR0hfU1VSUk9HQVRFKHUpICAoKFVDaGFyKSh1KSA+PSAoVUNoYXIpMHhkODAwICYmIChV
Q2hhcikodSkgPD0gKFVDaGFyKTB4ZGJmZikKKyNkZWZpbmUgSVNfTE9XX1NVUlJPR0FURSh1KSAg
KChVQ2hhcikodSkgPj0gKFVDaGFyKTB4ZGMwMCAmJiAoVUNoYXIpKHUpIDw9IChVQ2hhcikweGRm
ZmYpCisKK3N0YXRpYyBnY2hhciogdXRmMTZUb1V0ZjgoY29uc3QgVUNoYXIqIGFUZXh0LCBnaW50
IGFMZW5ndGgsIGdpbnQgJmxlbmd0aCkKK3sKKyAgICBnYm9vbGVhbiBuZWVkQ29weSA9IEZBTFNF
OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhTGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYg
KCFhVGV4dFtpXSB8fCBJU19MT1dfU1VSUk9HQVRFKGFUZXh0W2ldKSkgeworICAgICAgICAgICAg
bmVlZENvcHkgPSBUUlVFOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gCisKKyAgICAg
ICAgaWYgKElTX0hJR0hfU1VSUk9HQVRFKGFUZXh0W2ldKSkgeworICAgICAgICAgICAgaWYgKGkg
PCBhTGVuZ3RoIC0gMSAmJiBJU19MT1dfU1VSUk9HQVRFKGFUZXh0W2krMV0pKQorICAgICAgICAg
ICAgICAgIGkrKzsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG5lZWRDb3B5
ID0gVFJVRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIEdPd25QdHI8VUNoYXI+IGNvcGllZFN0cmluZzsKKyAgICBpZiAobmVl
ZENvcHkpIHsKKyAgICAgICAgLyogUGFuZ28gZG9lc24ndCBjb3JyZWN0bHkgaGFuZGxlIG51bHMu
ICBXZSBjb252ZXJ0IHRoZW0gdG8gMHhmZi4gKi8KKyAgICAgICAgLyogQWxzbyAidmFsaWRhdGUi
IFVURi0xNiB0ZXh0IHRvIG1ha2Ugc3VyZSBjb252ZXJzaW9uIGRvZXNuJ3QgZmFpbC4gKi8KKwor
ICAgICAgICBjb3BpZWRTdHJpbmcuc2V0KHN0YXRpY19jYXN0PFVDaGFyKj4oZ19tZW1kdXAoYVRl
eHQsIGFMZW5ndGggKiBzaXplb2YoYVRleHRbMF0pKSkpOworICAgICAgICBVQ2hhciogcCA9IGNv
cGllZFN0cmluZy5nZXQoKTsKKworICAgICAgICAvKiBkb24ndCBuZWVkIHRvIHJlc2V0IGkgKi8K
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhTGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
IGlmICghcFtpXSB8fCBJU19MT1dfU1VSUk9HQVRFKHBbaV0pKQorICAgICAgICAgICAgICAgIHBb
aV0gPSAweEZGRkQ7CisgICAgICAgICAgICBlbHNlIGlmIChJU19ISUdIX1NVUlJPR0FURShwW2ld
KSkgeworICAgICAgICAgICAgICAgIGlmIChpIDwgYUxlbmd0aCAtIDEgJiYgSVNfTE9XX1NVUlJP
R0FURShhVGV4dFtpKzFdKSkKKyAgICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcFtpXSA9IDB4RkZGRDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGFUZXh0ID0gcDsKKyAgICB9CisKKyAgICBnY2hhciog
dXRmOFRleHQ7CisgICAgZ2xvbmcgaXRlbXNXcml0dGVuOworICAgIHV0ZjhUZXh0ID0gZ191dGYx
Nl90b191dGY4KHN0YXRpY19jYXN0PGNvbnN0IGd1bmljaGFyMio+KGFUZXh0KSwgYUxlbmd0aCwg
MCwgJml0ZW1zV3JpdHRlbiwgMCk7CisgICAgbGVuZ3RoID0gaXRlbXNXcml0dGVuOworCisgICAg
cmV0dXJuIHV0ZjhUZXh0OworfQorCitzdGF0aWMgZ2NoYXIqIGNvbnZlcnRVbmlDaGFyVG9VVEY4
KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBnaW50IGxlbmd0aCwgaW50IGZyb20sIGludCB0bykK
K3sKKyAgICBnaW50IG5ld0xlbmd0aCA9IDA7CisgICAgR093blB0cjxnY2hhcj4gdXRmOFRleHQo
dXRmMTZUb1V0ZjgoY2hhcmFjdGVycywgbGVuZ3RoLCBuZXdMZW5ndGgpKTsKKyAgICBpZiAoIXV0
ZjhUZXh0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGdjaGFyKiBwb3MgPSB1dGY4VGV4dC5n
ZXQoKTsKKyAgICBpZiAoZnJvbSA+IDApIHsKKyAgICAgICAgLy8gZGlzY2FyZCB0aGUgZmlyc3Qg
J2Zyb20nIGNoYXJhY3RlcnMKKyAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBkbyB0aGlzIGJl
Zm9yZSB0aGUgY29udmVyc2lvbiBwcm9iYWJseQorICAgICAgICBwb3MgPSBnX3V0Zjhfb2Zmc2V0
X3RvX3BvaW50ZXIodXRmOFRleHQuZ2V0KCksIGZyb20pOworICAgIH0KKworICAgIGdpbnQgbGVu
ID0gc3RybGVuKHBvcyk7CisgICAgR1N0cmluZyogcmV0ID0gZ19zdHJpbmdfbmV3X2xlbihOVUxM
LCBsZW4pOworCisgICAgLy8gcmVwbGFjZSBsaW5lIGJyZWFrIGJ5IHNwYWNlCisgICAgd2hpbGUg
KGxlbiA+IDApIHsKKyAgICAgICAgZ2ludCBpbmRleCwgc3RhcnQ7CisgICAgICAgIHBhbmdvX2Zp
bmRfcGFyYWdyYXBoX2JvdW5kYXJ5KHBvcywgbGVuLCAmaW5kZXgsICZzdGFydCk7CisgICAgICAg
IGdfc3RyaW5nX2FwcGVuZF9sZW4ocmV0LCBwb3MsIGluZGV4KTsKKyAgICAgICAgaWYgKGluZGV4
ID09IHN0YXJ0KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGdfc3RyaW5nX2FwcGVuZF9j
KHJldCwgJyAnKTsKKyAgICAgICAgcG9zICs9IHN0YXJ0OworICAgICAgICBsZW4gLT0gc3RhcnQ7
CisgICAgfQorICAgIHJldHVybiBnX3N0cmluZ19mcmVlKHJldCwgRkFMU0UpOworfQorCitzdGF0
aWMgdm9pZCBzZXRQYW5nb0F0dHJpYnV0ZXMoY29uc3QgRm9udCogZm9udCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBQYW5nb0xheW91dCogbGF5b3V0KQoreworI2lmIFVTRShGUkVFVFlQRSkKKyAgICBp
ZiAoZm9udC0+cHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkubV9wYXR0ZXJuKSB7CisgICAg
ICAgIFBhbmdvRm9udERlc2NyaXB0aW9uKiBkZXNjID0gcGFuZ29fZmNfZm9udF9kZXNjcmlwdGlv
bl9mcm9tX3BhdHRlcm4oZm9udC0+cHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkubV9wYXR0
ZXJuLmdldCgpLCBGQUxTRSk7CisgICAgICAgIHBhbmdvX2xheW91dF9zZXRfZm9udF9kZXNjcmlw
dGlvbihsYXlvdXQsIGRlc2MpOworICAgICAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUo
ZGVzYyk7CisgICAgfQorI2VsaWYgVVNFKFBBTkdPKQorICAgIGlmIChmb250LT5wcmltYXJ5Rm9u
dCgpLT5wbGF0Zm9ybURhdGEoKS5tX2ZvbnQpIHsKKyAgICAgICAgUGFuZ29Gb250RGVzY3JpcHRp
b24qIGRlc2MgPSBwYW5nb19mb250X2Rlc2NyaWJlKGZvbnQtPnByaW1hcnlGb250KCktPnBsYXRm
b3JtRGF0YSgpLm1fZm9udCk7CisgICAgICAgIHBhbmdvX2xheW91dF9zZXRfZm9udF9kZXNjcmlw
dGlvbihsYXlvdXQsIGRlc2MpOworICAgICAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUo
ZGVzYyk7CisgICAgfQorI2VuZGlmCisKKyAgICBwYW5nb19sYXlvdXRfc2V0X2F1dG9fZGlyKGxh
eW91dCwgRkFMU0UpOworCisgICAgUGFuZ29Db250ZXh0KiBwYW5nb0NvbnRleHQgPSBwYW5nb19s
YXlvdXRfZ2V0X2NvbnRleHQobGF5b3V0KTsKKyAgICBQYW5nb0RpcmVjdGlvbiBkaXJlY3Rpb24g
PSBydW4ucnRsKCkgPyBQQU5HT19ESVJFQ1RJT05fUlRMIDogUEFOR09fRElSRUNUSU9OX0xUUjsK
KyAgICBwYW5nb19jb250ZXh0X3NldF9iYXNlX2RpcihwYW5nb0NvbnRleHQsIGRpcmVjdGlvbik7
CisgICAgUGFuZ29BdHRyTGlzdCogbGlzdCA9IHBhbmdvX2F0dHJfbGlzdF9uZXcoKTsKKyAgICBQ
YW5nb0F0dHJpYnV0ZSogYXR0cjsKKworICAgIGF0dHIgPSBwYW5nb19hdHRyX3NpemVfbmV3X2Fi
c29sdXRlKGZvbnQtPnBpeGVsU2l6ZSgpICogUEFOR09fU0NBTEUpOworICAgIGF0dHItPmVuZF9p
bmRleCA9IEdfTUFYVUlOVDsKKyAgICBwYW5nb19hdHRyX2xpc3RfaW5zZXJ0X2JlZm9yZShsaXN0
LCBhdHRyKTsKKworICAgIGlmICghcnVuLnNwYWNpbmdEaXNhYmxlZCgpKSB7CisgICAgICAgIGF0
dHIgPSBwYW5nb19hdHRyX2xldHRlcl9zcGFjaW5nX25ldyhmb250LT5sZXR0ZXJTcGFjaW5nKCkg
KiBQQU5HT19TQ0FMRSk7CisgICAgICAgIGF0dHItPmVuZF9pbmRleCA9IEdfTUFYVUlOVDsKKyAg
ICAgICAgcGFuZ29fYXR0cl9saXN0X2luc2VydF9iZWZvcmUobGlzdCwgYXR0cik7CisgICAgfQor
CisgICAgLy8gUGFuZ28gZG9lcyBub3QgeWV0IHN1cHBvcnQgc3ludGhlc2lzaW5nIHNtYWxsIGNh
cHMKKyAgICAvLyBTZWUgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2
MTAKKworICAgIHBhbmdvX2xheW91dF9zZXRfYXR0cmlidXRlcyhsYXlvdXQsIGxpc3QpOworICAg
IHBhbmdvX2F0dHJfbGlzdF91bnJlZihsaXN0KTsKK30KKworYm9vbCBGb250OjpjYW5SZXR1cm5G
YWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCit7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBkcmF3R2x5cGhzU2hhZG93KEdyYXBo
aWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgUGFu
Z29MYXlvdXRMaW5lKiBsYXlvdXRMaW5lLCBQYW5nb1JlZ2lvblR5cGUgcmVuZGVyUmVnaW9uKQor
eworICAgIFNoYWRvd0JsdXImIHNoYWRvdyA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCktPnNoYWRvd0JsdXIoKTsKKworICAgIGlmICghKGdyYXBoaWNzQ29udGV4dC0+dGV4dERy
YXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZpbGwpIHx8IHNoYWRvdy50eXBlKCkgPT0gU2hhZG93Qmx1
cjo6Tm9TaGFkb3cpCisgICAgICAgIHJldHVybjsKKworICAgIEZsb2F0UG9pbnQgdG90YWxPZmZz
ZXQocG9pbnQgKyBncmFwaGljc0NvbnRleHQtPnN0YXRlKCkuc2hhZG93T2Zmc2V0KTsKKworICAg
IC8vIE9wdGltaXplIG5vbi1ibHVycnkgc2hhZG93cywgYnkganVzdCBkcmF3aW5nIHRleHQgd2l0
aG91dCB0aGUgU2hhZG93Qmx1ci4KKyAgICBpZiAoIXNoYWRvdy5tdXN0VXNlU2hhZG93Qmx1cihn
cmFwaGljc0NvbnRleHQpKSB7CisgICAgICAgIGNhaXJvX3QqIGNvbnRleHQgPSBncmFwaGljc0Nv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOworICAgICAgICBjYWlyb19zYXZlKGNvbnRl
eHQpOworICAgICAgICBjYWlyb190cmFuc2xhdGUoY29udGV4dCwgdG90YWxPZmZzZXQueCgpLCB0
b3RhbE9mZnNldC55KCkpOworCisgICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY29udGV4
dCwgZ3JhcGhpY3NDb250ZXh0LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKKyAgICAgICAgZ2RrX2Nh
aXJvX3JlZ2lvbihjb250ZXh0LCByZW5kZXJSZWdpb24pOworICAgICAgICBjYWlyb19jbGlwKGNv
bnRleHQpOworICAgICAgICBwYW5nb19jYWlyb19zaG93X2xheW91dF9saW5lKGNvbnRleHQsIGxh
eW91dExpbmUpOworCisgICAgICAgIGNhaXJvX3Jlc3RvcmUoY29udGV4dCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgZXh0ZW50cyhnZXRQYW5nb1JlZ2lvbkV4dGVu
dHMocmVuZGVyUmVnaW9uKSk7CisgICAgZXh0ZW50cy5zZXRMb2NhdGlvbihGbG9hdFBvaW50KHBv
aW50LngoKSwgcG9pbnQueSgpIC0gZXh0ZW50cy5oZWlnaHQoKSkpOworICAgIGlmIChHcmFwaGlj
c0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3cuYmVnaW5TaGFkb3dMYXllcihncmFwaGlj
c0NvbnRleHQsIGV4dGVudHMpKSB7CisgICAgICAgIGNhaXJvX3QqIGNhaXJvU2hhZG93Q29udGV4
dCA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOworICAgICAgICBjYWly
b190cmFuc2xhdGUoY2Fpcm9TaGFkb3dDb250ZXh0LCBwb2ludC54KCksIHBvaW50LnkoKSk7Cisg
ICAgICAgIHBhbmdvX2NhaXJvX3Nob3dfbGF5b3V0X2xpbmUoY2Fpcm9TaGFkb3dDb250ZXh0LCBs
YXlvdXRMaW5lKTsKKworICAgICAgICAvLyBXZSBuZWVkIHRoZSBjbGlwcGluZyByZWdpb24gdG8g
YmUgYWN0aXZlIHdoZW4gd2UgYmxpdCB0aGUgYmx1cnJlZCBzaGFkb3cgYmFjaywKKyAgICAgICAg
Ly8gYmVjYXVzZSB3ZSBkb24ndCB3YW50IGFueSBiaXRzIGFuZCBwaWVjZXMgb2YgY2hhcmFjdGVy
cyBvdXQgb2YgcmFuZ2UgdG8gYmUKKyAgICAgICAgLy8gZHJhd24uIFNpbmNlIFNoYWRvd0JsdXIg
ZXhwZWN0cyBhIGNvbnNpc3RlbnQgdHJhbnNmb3JtLCB3ZSBoYXZlIHRvIHVuZG8gdGhlCisgICAg
ICAgIC8vIHRyYW5zbGF0aW9uIGJlZm9yZSBjYWxsaW5nIGVuZFNoYWRvd0xheWVyIGFzIHdlbGwu
CisgICAgICAgIGNhaXJvX3QqIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLT5jcigpOworICAgICAgICBjYWlyb19zYXZlKGNvbnRleHQpOworICAgICAgICBjYWly
b190cmFuc2xhdGUoY29udGV4dCwgdG90YWxPZmZzZXQueCgpLCB0b3RhbE9mZnNldC55KCkpOwor
ICAgICAgICBnZGtfY2Fpcm9fcmVnaW9uKGNvbnRleHQsIHJlbmRlclJlZ2lvbik7CisgICAgICAg
IGNhaXJvX2NsaXAoY29udGV4dCk7CisgICAgICAgIGNhaXJvX3RyYW5zbGF0ZShjb250ZXh0LCAt
dG90YWxPZmZzZXQueCgpLCAtdG90YWxPZmZzZXQueSgpKTsKKworICAgICAgICBzaGFkb3cuZW5k
U2hhZG93TGF5ZXIoZ3JhcGhpY3NDb250ZXh0KTsKKyAgICAgICAgY2Fpcm9fcmVzdG9yZShjb250
ZXh0KTsKKyAgICB9Cit9CisKK3ZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3sKKyNpZiBVU0UoRlJFRVRZUEUpCisgICAgaWYg
KCFwcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5tX3BhdHRlcm4pIHsKKyAgICAgICAgZHJh
d1NpbXBsZVRleHQoY29udGV4dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8pOworICAgICAgICByZXR1
cm47CisgICAgfQorI2VuZGlmCisKKyAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5jcigpOworICAgIFBhbmdvTGF5b3V0KiBsYXlvdXQgPSBwYW5nb19jYWlyb19j
cmVhdGVfbGF5b3V0KGNyKTsKKyAgICBzZXRQYW5nb0F0dHJpYnV0ZXModGhpcywgcnVuLCBsYXlv
dXQpOworCisgICAgZ2NoYXIqIHV0ZjggPSBjb252ZXJ0VW5pQ2hhclRvVVRGOChydW4uY2hhcmFj
dGVycygpLCBydW4ubGVuZ3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7CisgICAgcGFuZ29fbGF5b3V0
X3NldF90ZXh0KGxheW91dCwgdXRmOCwgLTEpOworCisgICAgLy8gT3VyIGxheW91dHMgYXJlIHNp
bmdsZSBsaW5lCisgICAgUGFuZ29MYXlvdXRMaW5lKiBsYXlvdXRMaW5lID0gcGFuZ29fbGF5b3V0
X2dldF9saW5lX3JlYWRvbmx5KGxheW91dCwgMCk7CisKKyAgICAvLyBHZXQgdGhlIHJlZ2lvbiB3
aGVyZSB0aGlzIHRleHQgd2lsbCBiZSBsYWlkIG91dC4gV2Ugd2lsbCB1c2UgaXQgdG8gY2xpcAor
ICAgIC8vIHRoZSBDYWlybyBjb250ZXh0LCBmb3Igd2hlbiB3ZSBhcmUgb25seSBwYWludGluZyBw
YXJ0IG9mIHRoZSB0ZXh0IHJ1biBhbmQKKyAgICAvLyB0byBjYWxjdWxhdGUgdGhlIHNpemUgb2Yg
dGhlIHNoYWRvdyBidWZmZXIuCisgICAgUGFuZ29SZWdpb25UeXBlIHBhcnRpYWxSZWdpb24gPSAw
OworICAgIGNoYXIqIHN0YXJ0ID0gZ191dGY4X29mZnNldF90b19wb2ludGVyKHV0ZjgsIGZyb20p
OworICAgIGNoYXIqIGVuZCA9IGdfdXRmOF9vZmZzZXRfdG9fcG9pbnRlcihzdGFydCwgdG8gLSBm
cm9tKTsKKyAgICBpbnQgcmFuZ2VzW10gPSB7c3RhcnQgLSB1dGY4LCBlbmQgLSB1dGY4fTsKKyAg
ICBwYXJ0aWFsUmVnaW9uID0gZ2RrX3BhbmdvX2xheW91dF9saW5lX2dldF9jbGlwX3JlZ2lvbihs
YXlvdXRMaW5lLCAwLCAwLCByYW5nZXMsIDEpOworCisgICAgZHJhd0dseXBoc1NoYWRvdyhjb250
ZXh0LCBwb2ludCwgbGF5b3V0TGluZSwgcGFydGlhbFJlZ2lvbik7CisKKyAgICBjYWlyb19zYXZl
KGNyKTsKKyAgICBjYWlyb190cmFuc2xhdGUoY3IsIHBvaW50LngoKSwgcG9pbnQueSgpKTsKKwor
ICAgIGZsb2F0IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOworICAgIGNvbnRleHQtPmZpbGxDb2xv
cigpLmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgIGNhaXJvX3NldF9zb3Vy
Y2VfcmdiYShjciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgIGdka19jYWlyb19yZWdp
b24oY3IsIHBhcnRpYWxSZWdpb24pOworICAgIGNhaXJvX2NsaXAoY3IpOworCisgICAgcGFuZ29f
Y2Fpcm9fc2hvd19sYXlvdXRfbGluZShjciwgbGF5b3V0TGluZSk7CisKKyAgICBpZiAoY29udGV4
dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkgeworICAgICAgICBDb2xvciBz
dHJva2VDb2xvciA9IGNvbnRleHQtPnN0cm9rZUNvbG9yKCk7CisgICAgICAgIHN0cm9rZUNvbG9y
LmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgICAgICBjYWlyb19zZXRfc291
cmNlX3JnYmEoY3IsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICAgICAgcGFuZ29fY2Fp
cm9fbGF5b3V0X2xpbmVfcGF0aChjciwgbGF5b3V0TGluZSk7CisgICAgICAgIGNhaXJvX3NldF9s
aW5lX3dpZHRoKGNyLCBjb250ZXh0LT5zdHJva2VUaGlja25lc3MoKSk7CisgICAgICAgIGNhaXJv
X3N0cm9rZShjcik7CisgICAgfQorCisgICAgLy8gUGFuZ28gc29tZXRpbWVzIGxlYXZlcyBiZWhp
bmQgcGF0aHMgd2UgZG9uJ3Qgd2FudAorICAgIGNhaXJvX25ld19wYXRoKGNyKTsKKworICAgIGRl
c3Ryb3lQYW5nb1JlZ2lvbihwYXJ0aWFsUmVnaW9uKTsKKyAgICBnX2ZyZWUodXRmOCk7CisgICAg
Z19vYmplY3RfdW5yZWYobGF5b3V0KTsKKworICAgIGNhaXJvX3Jlc3RvcmUoY3IpOworfQorCit2
b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0
KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0
cmluZyYgLyogbWFyayAqLywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBm
cm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworLy8gV2Ugc2hvdWxkIGNyZWF0ZSB0aGUgbGF5b3V0IHdpdGggb3VyIGFjdHVhbCBjb250ZXh0
IGJ1dCB3ZSBjYW4ndCBhY2Nlc3MgaXQgZnJvbSBoZXJlLgorc3RhdGljIFBhbmdvTGF5b3V0KiBn
ZXREZWZhdWx0UGFuZ29MYXlvdXQoY29uc3QgVGV4dFJ1biYgcnVuKQoreworICAgIHN0YXRpYyBQ
YW5nb0ZvbnRNYXAqIG1hcCA9IHBhbmdvX2NhaXJvX2ZvbnRfbWFwX2dldF9kZWZhdWx0KCk7Cisj
aWYgUEFOR09fVkVSU0lPTl9DSEVDSygxLDIxLDUpCisgICAgc3RhdGljIFBhbmdvQ29udGV4dCog
cGFuZ29Db250ZXh0ID0gcGFuZ29fZm9udF9tYXBfY3JlYXRlX2NvbnRleHQobWFwKTsKKyNlbHNl
CisgICAgLy8gRGVwcmVjYXRlZCBpbiBQYW5nbyAxLjIxLgorICAgIHN0YXRpYyBQYW5nb0NvbnRl
eHQqIHBhbmdvQ29udGV4dCA9IHBhbmdvX2NhaXJvX2ZvbnRfbWFwX2NyZWF0ZV9jb250ZXh0KFBB
TkdPX0NBSVJPX0ZPTlRfTUFQKG1hcCkpOworI2VuZGlmCisgICAgUGFuZ29MYXlvdXQqIGxheW91
dCA9IHBhbmdvX2xheW91dF9uZXcocGFuZ29Db250ZXh0KTsKKworICAgIHJldHVybiBsYXlvdXQ7
Cit9CisKK2Zsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5
cGhPdmVyZmxvdyogb3ZlcmZsb3cpIGNvbnN0Cit7CisjaWYgVVNFKEZSRUVUWVBFKQorICAgIGlm
ICghcHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkubV9wYXR0ZXJuKQorICAgICAgICByZXR1
cm4gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQocnVuLCAwLCBmYWxsYmFja0ZvbnRzLCBvdmVyZmxv
dyk7CisjZW5kaWYKKworICAgIGlmIChydW4ubGVuZ3RoKCkgPT0gMCkKKyAgICAgICAgcmV0dXJu
IDAuMGY7CisKKyAgICBQYW5nb0xheW91dCogbGF5b3V0ID0gZ2V0RGVmYXVsdFBhbmdvTGF5b3V0
KHJ1bik7CisgICAgc2V0UGFuZ29BdHRyaWJ1dGVzKHRoaXMsIHJ1biwgbGF5b3V0KTsKKworICAg
IGdjaGFyKiB1dGY4ID0gY29udmVydFVuaUNoYXJUb1VURjgocnVuLmNoYXJhY3RlcnMoKSwgcnVu
Lmxlbmd0aCgpLCAwLCBydW4ubGVuZ3RoKCkpOworICAgIHBhbmdvX2xheW91dF9zZXRfdGV4dChs
YXlvdXQsIHV0ZjgsIC0xKTsKKworICAgIGludCB3aWR0aDsKKyAgICBwYW5nb19sYXlvdXRfZ2V0
X3BpeGVsX3NpemUobGF5b3V0LCAmd2lkdGgsIDApOworCisgICAgZ19mcmVlKHV0ZjgpOworICAg
IGdfb2JqZWN0X3VucmVmKGxheW91dCk7CisKKyAgICByZXR1cm4gd2lkdGg7Cit9CisKK2ludCBG
b250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
ZmxvYXQgeEZsb2F0LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAoreworI2lmIFVT
RShGUkVFVFlQRSkKKyAgICBpZiAoIXByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpLm1fcGF0
dGVybikKKyAgICAgICAgcmV0dXJuIG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChydW4s
IHhGbG9hdCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOworI2VuZGlmCisgICAgLy8gRklYTUU6IFRo
aXMgdHJ1bmNhdGlvbiBpcyBub3QgYSBwcm9ibGVtIGZvciBIVE1MLCBidXQgb25seSBhZmZlY3Rz
IFNWRywgd2hpY2ggcGFzc2VzIGZsb2F0aW5nLXBvaW50IG51bWJlcnMKKyAgICAvLyB0byBGb250
OjpvZmZzZXRGb3JQb3NpdGlvbigpLiBCdWcgaHR0cDovL3dlYmtpdC5vcmcvYi80MDY3MyB0cmFj
a3MgZml4aW5nIHRoaXMgcHJvYmxlbS4KKyAgICBpbnQgeCA9IHN0YXRpY19jYXN0PGludD4oeEZs
b2F0KTsKKworICAgIFBhbmdvTGF5b3V0KiBsYXlvdXQgPSBnZXREZWZhdWx0UGFuZ29MYXlvdXQo
cnVuKTsKKyAgICBzZXRQYW5nb0F0dHJpYnV0ZXModGhpcywgcnVuLCBsYXlvdXQpOworCisgICAg
Z2NoYXIqIHV0ZjggPSBjb252ZXJ0VW5pQ2hhclRvVVRGOChydW4uY2hhcmFjdGVycygpLCBydW4u
bGVuZ3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7CisgICAgcGFuZ29fbGF5b3V0X3NldF90ZXh0KGxh
eW91dCwgdXRmOCwgLTEpOworCisgICAgaW50IGluZGV4LCB0cmFpbGluZzsKKyAgICBwYW5nb19s
YXlvdXRfeHlfdG9faW5kZXgobGF5b3V0LCB4ICogUEFOR09fU0NBTEUsIDEsICZpbmRleCwgJnRy
YWlsaW5nKTsKKyAgICBnbG9uZyBvZmZzZXQgPSBnX3V0ZjhfcG9pbnRlcl90b19vZmZzZXQodXRm
OCwgdXRmOCArIGluZGV4KTsKKyAgICBpZiAoaW5jbHVkZVBhcnRpYWxHbHlwaHMpCisgICAgICAg
IG9mZnNldCArPSB0cmFpbGluZzsKKworICAgIGdfZnJlZSh1dGY4KTsKKyAgICBnX29iamVjdF91
bnJlZihsYXlvdXQpOworCisgICAgcmV0dXJuIG9mZnNldDsKK30KKworRmxvYXRSZWN0IEZvbnQ6
OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3sKKyNpZiBV
U0UoRlJFRVRZUEUpCisgICAgaWYgKCFwcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5tX3Bh
dHRlcm4pCisgICAgICAgIHJldHVybiBzZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChydW4sIHBv
aW50LCBoLCBmcm9tLCB0byk7CisjZW5kaWYKKworICAgIFBhbmdvTGF5b3V0KiBsYXlvdXQgPSBn
ZXREZWZhdWx0UGFuZ29MYXlvdXQocnVuKTsKKyAgICBzZXRQYW5nb0F0dHJpYnV0ZXModGhpcywg
cnVuLCBsYXlvdXQpOworCisgICAgZ2NoYXIqIHV0ZjggPSBjb252ZXJ0VW5pQ2hhclRvVVRGOChy
dW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7CisgICAgcGFu
Z29fbGF5b3V0X3NldF90ZXh0KGxheW91dCwgdXRmOCwgLTEpOworCisgICAgY2hhciogc3RhcnQg
PSBnX3V0Zjhfb2Zmc2V0X3RvX3BvaW50ZXIodXRmOCwgZnJvbSk7CisgICAgY2hhciogZW5kID0g
Z191dGY4X29mZnNldF90b19wb2ludGVyKHN0YXJ0LCB0byAtIGZyb20pOworCisgICAgaWYgKHJ1
bi5sdHIoKSkgeworICAgICAgICBmcm9tID0gc3RhcnQgLSB1dGY4OworICAgICAgICB0byA9IGVu
ZCAtIHV0Zjg7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZnJvbSA9IGVuZCAtIHV0Zjg7CisgICAg
ICAgIHRvID0gc3RhcnQgLSB1dGY4OworICAgIH0KKworICAgIFBhbmdvTGF5b3V0TGluZSogbGF5
b3V0TGluZSA9IHBhbmdvX2xheW91dF9nZXRfbGluZV9yZWFkb25seShsYXlvdXQsIDApOworICAg
IGludCB4X3BvczsKKworICAgIHhfcG9zID0gMDsKKyAgICBpZiAoZnJvbSA8IGxheW91dExpbmUt
Pmxlbmd0aCkKKyAgICAgICAgcGFuZ29fbGF5b3V0X2xpbmVfaW5kZXhfdG9feChsYXlvdXRMaW5l
LCBmcm9tLCBGQUxTRSwgJnhfcG9zKTsKKyAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IFBBTkdPX1BJ
WEVMU19GTE9PUih4X3Bvcyk7CisKKyAgICB4X3BvcyA9IDA7CisgICAgaWYgKHJ1bi5sdHIoKSB8
fCB0byA8IGxheW91dExpbmUtPmxlbmd0aCkKKyAgICAgICAgcGFuZ29fbGF5b3V0X2xpbmVfaW5k
ZXhfdG9feChsYXlvdXRMaW5lLCB0bywgRkFMU0UsICZ4X3Bvcyk7CisgICAgZmxvYXQgYWZ0ZXJX
aWR0aCA9IFBBTkdPX1BJWEVMUyh4X3Bvcyk7CisKKyAgICBnX2ZyZWUodXRmOCk7CisgICAgZ19v
YmplY3RfdW5yZWYobGF5b3V0KTsKKworICAgIHJldHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsg
YmVmb3JlV2lkdGgsIHBvaW50LnkoKSwgYWZ0ZXJXaWR0aCAtIGJlZm9yZVdpZHRoLCBoKTsKK30K
KworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106136</attachid>
            <date>2011-09-02 08:07:05 -0700</date>
            <delta_ts>2011-09-06 15:43:20 -0700</delta_ts>
            <desc>Move FontEfl.cpp to FontFreeType.cpp</desc>
            <filename>move_fontefl_to_fontfreetype.patch</filename>
            <type>text/plain</type>
            <size>7672</size>
            <attacher name="Rafael Antognolli">antognolli+webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHNFZmwudHh0IGIvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKaW5kZXggZmVlZWE2ZC4uOWNlOGYxZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0c0VmbC50eHQKQEAgLTU1LDcgKzU1LDYgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCiAgIHBsYXRmb3JtL2VmbC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCiAgIHBsYXRmb3Jt
L2VmbC9XaWRnZXRFZmwuY3BwCiAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAot
ICBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvRm9udEVmbC5jcHAKICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWZsL0dyYXBoaWNzTGF5ZXJFZmwuY3BwCiAgIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9JY29uRWZs
LmNwcAogICBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvSW1hZ2VFZmwuY3BwCkBAIC0xMDksNiArMTA4
LDcgQEAgSUYgKFdURl9VU0VfQ0FJUk8pCiAgICAgKQogICAgIExJU1QoQVBQRU5EIFdlYkNvcmVf
U09VUkNFUwogICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCisgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250RnJlZVR5cGUuY3BwCiAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAK
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlw
ZS5jcHAKQEAgLTEyMyw2ICsxMjMsNyBAQCBJRiAoV1RGX1VTRV9DQUlSTykKICAgICAgICR7UGFu
Z29fSU5DTFVERV9ESVJTfQogICAgICkKICAgICBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
KyAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQYW5nby5jcHAKICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRDYWNoZVBhbmdvLmNwcAogICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvcGFuZ28vRm9udEN1c3RvbVBsYXRmb3JtRGF0YVBhbmdvLmNwcAogICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBsYXRmb3JtRGF0YVBhbmdvLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDdkZTA4MzUuLjA5MjY5ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwyOCBAQAogMjAxMS0wOS0w
MiAgUmFmYWVsIEFudG9nbm9sbGkgIDxhbnRvZ25vbGxpQHByb2Z1c2lvbi5tb2JpPgogCisgICAg
ICAgIFJlbmFtZSBGb250RWZsLmNwcCB0byBGb250RnJlZVR5cGUuY3BwCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjMyMworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgZmlsZSBjYW4gYmUgdXNlZCBi
eSBvdGhlciBwb3J0cywgYW5kIHRoZSBFRkwgcG9ydCB3aWxsIG5vdCB1c2UKKyAgICAgICAgb25s
eSBpdCBidXQgY2FuIHVzZSBGb250UGFuZ28uY3BwIGluc3RlYWQgKGlmIHBhbmdvIGJhY2tlbmQg
c3VwcG9ydCBpcworICAgICAgICBlbmFibGVkKS4KKworICAgICAgICBObyBuZXcgZnVuY3Rpb25h
bGl0eSBzbyBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzRWZsLnR4dDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250RnJlZVR5cGUuY3BwOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRFZmwuY3Bw
LgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udDo6Y2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnQ6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhU
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dCk6
CisKKzIwMTEtMDktMDIgIFJhZmFlbCBBbnRvZ25vbGxpICA8YW50b2dub2xsaUBwcm9mdXNpb24u
bW9iaT4KKwogICAgICAgICBSZW5hbWUgRm9udEd0ay5jcHAgdG8gRm9udFBhbmdvLmNwcAogICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYzMjMKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRFZmwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRFZmwuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2NjN2ZmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9Gb250RWZsLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlz
dG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJA
a2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tp
YSBkZSBUZWNub2xvZ2lhCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1i
ZWRkZWQgc3lzdGVtcwotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJv
bmljcwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLQotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5j
bHVkZSAiU2ltcGxlRm9udERhdGEuaCIKLQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBj
b25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRm9udDo6ZHJhd0VtcGhh
c2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNv
bnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBj
b25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAq
LykgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEZvbnQ6OmNhblJl
dHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIEZvbnQ6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCkK
LXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+Kiwg
R2x5cGhPdmVyZmxvdyopIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gMC4wZjsKLX0KLQotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYsIGZsb2F0LCBib29sKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQsIGludCwg
aW50KSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVj
dCgpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9mcmVldHlwZS9Gb250RnJlZVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZnJlZXR5cGUvRm9udEZyZWVUeXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5iZWVkZTQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udEZyZWVUeXBlLmNwcApAQCAtMCwwICsxLDc0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisg
KiBDb3B5cmlnaHQgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dp
YQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMK
KyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlNpbXBsZUZv
bnREYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGb250OjpkcmF3Q29tcGxl
eFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRl
eHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWlj
U3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8q
IGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCitib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEZvbnQ6OmNhbkV4cGFuZEFyb3VuZElkZW9n
cmFwaHNJbkNvbXBsZXhUZXh0KCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Zsb2F0IEZv
bnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25z
dCBTaW1wbGVGb250RGF0YSo+KiwgR2x5cGhPdmVyZmxvdyopIGNvbnN0Cit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMC4wZjsKK30KKworaW50IEZvbnQ6Om9mZnNldEZvclBv
c2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGZsb2F0LCBib29sKSBjb25zdAor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0Zsb2F0UmVjdCBG
b250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZs
b2F0UG9pbnQmLCBpbnQsIGludCwgaW50KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworfQorCit9Cg==
</data>
<flag name="review"
          id="102493"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106137</attachid>
            <date>2011-09-02 08:08:57 -0700</date>
            <delta_ts>2011-09-06 15:44:22 -0700</delta_ts>
            <desc>Add replacement functions for gdk ones.</desc>
            <filename>add_replacement_gdk_functions.patch</filename>
            <type>text/plain</type>
            <size>13680</size>
            <attacher name="Rafael Antognolli">antognolli+webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAyODBkOWE3Li44MWJhYWNh
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTEtMDktMDIgIFJhZmFlbCBBbnRvZ25vbGxpICA8YW50b2dub2xsaUBwcm9mdXNpb24ubW9i
aT4KKworICAgICAgICBBZGQgcmVwbGFjZW1lbnQgZnVuY3Rpb25zIGZvciBnZGsgb25lcy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MzIzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2UvY21h
a2UvRmluZFBhbmdvLmNtYWtlOgorCiAyMDExLTA4LTMwICBBYXJvbiBDb2x3ZWxsICA8YWNvbHdl
bGxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBNZWRpYVNvdXJjZSBBUEkgdG8gSFRNTE1l
ZGlhRWxlbWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzRWZsLnR4dAppbmRleCA5Y2U4ZjFkLi43ZWY3YWZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzRWZsLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzRWZsLnR4dApAQCAtMTI5LDkgKzEyOSwxMSBAQCBJRiAoV1RG
X1VTRV9DQUlSTykKICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQbGF0Zm9ybURh
dGFQYW5nby5jcHAKICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0dseXBoUGFnZVRyZWVO
b2RlUGFuZ28uY3BwCiAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9TaW1wbGVGb250RGF0
YVBhbmdvLmNwcAorICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vUGFuZ29VdGlsaXRpZXMu
Y3BwCiAgICAgKQogICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCi0gICAgICAke1Bh
bmdvX0xJQlJBUklFU30KKyAgICAgICR7UGFuZ29fTElCUkFSWX0KKyAgICAgICR7UGFuZ29fQ2Fp
cm9fTElCUkFSWX0KICAgICApCiAgIEVORElGICgpCiBFTkRJRiAoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDA5
MjY5ZDEuLjBmNGU5ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwyOCBAQAogMjAxMS0wOS0wMiAg
UmFmYWVsIEFudG9nbm9sbGkgIDxhbnRvZ25vbGxpQHByb2Z1c2lvbi5tb2JpPgogCisgICAgICAg
IEFkZCByZXBsYWNlbWVudCBmdW5jdGlvbnMgZm9yIGdkayBvbmVzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYzMjMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHdpbGwgYWxsb3cgdGhlIEVGTCBw
b3J0IHRvIGRvbid0IGRlcGVuZCBvbiBnZGsgYW55bW9yZS4KKworICAgICAgICBObyBuZXcgZnVu
Y3Rpb25hbGl0eSBzbyBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzRWZsLnR4
dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRSZWdpb25Ub0NhaXJvQ29udGV4dCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGFuZ28uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
ZHJhd0dseXBoc1NoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3Q29tcGxleFRl
eHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1BhbmdvVXRpbGl0aWVzLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpnZXRMaW5lQ2xpcFJlZ2lvbkZyb21MYXlvdXRJ
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmdldENsaXBSZWdpb25Gcm9tUGFuZ29MYXlvdXRMaW5l
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9QYW5nb1V0aWxpdGllcy5oOiBB
ZGRlZC4KKworMjAxMS0wOS0wMiAgUmFmYWVsIEFudG9nbm9sbGkgIDxhbnRvZ25vbGxpQHByb2Z1
c2lvbi5tb2JpPgorCiAgICAgICAgIFJlbmFtZSBGb250RWZsLmNwcCB0byBGb250RnJlZVR5cGUu
Y3BwCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjMy
MwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9D
YWlyb1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9DYWlyb1V0aWxpdGllcy5jcHAKaW5kZXggYjRhZGI2Yy4uMzQ4N2Y1MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0
aWVzLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlh
IFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MCw2ICs4MSwxOSBAQCB2b2lkIGFw
cGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCogY29udGV4dCwgY29uc3QgUGF0
aCYgcGF0aCkKICAgICBhcHBlbmRQYXRoVG9DYWlyb0NvbnRleHQoY29udGV4dCwgcGF0aC5wbGF0
Zm9ybVBhdGgoKS0+Y29udGV4dCgpKTsKIH0KIAordm9pZCBhcHBlbmRSZWdpb25Ub0NhaXJvQ29u
dGV4dChjYWlyb190KiB0bywgY29uc3QgY2Fpcm9fcmVnaW9uX3QqIHJlZ2lvbikKK3sKKyAgICBp
ZiAoIXJlZ2lvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgaW50IG5Cb3hlcyA9IGNh
aXJvX3JlZ2lvbl9udW1fcmVjdGFuZ2xlcyhyZWdpb24pOworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbkJveGVzOyArK2kpIHsKKyAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlX2ludF90IGJveDsKKyAg
ICAgICAgY2Fpcm9fcmVnaW9uX2dldF9yZWN0YW5nbGUocmVnaW9uLCBpLCAmYm94KTsKKyAgICAg
ICAgY2Fpcm9fcmVjdGFuZ2xlKHRvLCBib3gueCwgYm94LnksIGJveC53aWR0aCwgYm94LmhlaWdo
dCk7CisgICAgfQorfQorCiBjYWlyb19vcGVyYXRvcl90IHRvQ2Fpcm9PcGVyYXRvcihDb21wb3Np
dGVPcGVyYXRvciBvcCkKIHsKICAgICBzd2l0Y2ggKG9wKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaAppbmRleCAy
MTEwMDUwLi4zZDZlYjc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUHJv
RlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNDMsNiArNDQsNyBAQCB2b2lkIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY2Fpcm9fdCosIGNv
bnN0IENvbG9yJik7CiB2b2lkIGFwcGVuZFBhdGhUb0NhaXJvQ29udGV4dChjYWlyb190KiB0bywg
Y2Fpcm9fdCogZnJvbSk7CiB2b2lkIHNldFBhdGhPbkNhaXJvQ29udGV4dChjYWlyb190KiB0bywg
Y2Fpcm9fdCogZnJvbSk7CiB2b2lkIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRleHQoY2Fp
cm9fdCogY29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCk7Cit2b2lkIGFwcGVuZFJlZ2lvblRvQ2Fp
cm9Db250ZXh0KGNhaXJvX3QqLCBjb25zdCBjYWlyb19yZWdpb25fdCopOwogY2Fpcm9fb3BlcmF0
b3JfdCB0b0NhaXJvT3BlcmF0b3IoQ29tcG9zaXRlT3BlcmF0b3Igb3ApOwogdm9pZCBkcmF3UGF0
dGVyblRvQ2Fpcm9Db250ZXh0KGNhaXJvX3QqIGNyLCBjYWlyb19zdXJmYWNlX3QqIGltYWdlLCBj
b25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY2Fpcm9fb3BlcmF0b3JfdCBvcCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGFuZ28uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBhbmdvLmNwcAppbmRleCA4MThkNDJlLi5iYWE4NmZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250
UGFuZ28uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0Zv
bnRQYW5nby5jcHAKQEAgLTYsNiArNiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRv
a2VyIDxhbHBAYXRva2VyLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOCBYYW4gTG9wZXogPHhh
bkBnbm9tZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMSBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwogICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQyLDEwICs0MywxNSBAQAogI2luY2x1ZGUg
IlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgPGNhaXJv
Lmg+Ci0jaW5jbHVkZSA8Z2RrL2dkay5oPgogI2luY2x1ZGUgPHBhbmdvL3BhbmdvLmg+CiAjaW5j
bHVkZSA8cGFuZ28vcGFuZ29jYWlyby5oPgogCisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUg
PGdkay9nZGsuaD4KKyNlbHNlCisjaW5jbHVkZSAiUGFuZ29VdGlsaXRpZXMuaCIKKyNlbmRpZgor
CiAjaWYgVVNFKEZSRUVUWVBFKQogI2luY2x1ZGUgPHBhbmdvL3BhbmdvZmMtZm9udG1hcC5oPgog
I2VuZGlmCkBAIC0yMzQsNyArMjQwLDExIEBAIHN0YXRpYyB2b2lkIGRyYXdHbHlwaHNTaGFkb3co
R3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmCiAgICAg
ICAgIGNhaXJvX3RyYW5zbGF0ZShjb250ZXh0LCB0b3RhbE9mZnNldC54KCksIHRvdGFsT2Zmc2V0
LnkoKSk7CiAKICAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjb250ZXh0LCBncmFwaGlj
c0NvbnRleHQtPnN0YXRlKCkuc2hhZG93Q29sb3IpOworI2lmIFBMQVRGT1JNKEdUSykKICAgICAg
ICAgZ2RrX2NhaXJvX3JlZ2lvbihjb250ZXh0LCByZW5kZXJSZWdpb24pOworI2Vsc2UKKyAgICAg
ICAgYXBwZW5kUmVnaW9uVG9DYWlyb0NvbnRleHQoY29udGV4dCwgcmVuZGVyUmVnaW9uKTsKKyNl
bmRpZgogICAgICAgICBjYWlyb19jbGlwKGNvbnRleHQpOwogICAgICAgICBwYW5nb19jYWlyb19z
aG93X2xheW91dF9saW5lKGNvbnRleHQsIGxheW91dExpbmUpOwogCkBAIC0yNTYsNyArMjY2LDEx
IEBAIHN0YXRpYyB2b2lkIGRyYXdHbHlwaHNTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBncmFwaGlj
c0NvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmCiAgICAgICAgIGNhaXJvX3QqIGNvbnRleHQgPSBn
cmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwogICAgICAgICBjYWlyb19z
YXZlKGNvbnRleHQpOwogICAgICAgICBjYWlyb190cmFuc2xhdGUoY29udGV4dCwgdG90YWxPZmZz
ZXQueCgpLCB0b3RhbE9mZnNldC55KCkpOworI2lmIFBMQVRGT1JNKEdUSykKICAgICAgICAgZ2Rr
X2NhaXJvX3JlZ2lvbihjb250ZXh0LCByZW5kZXJSZWdpb24pOworI2Vsc2UKKyAgICAgICAgYXBw
ZW5kUmVnaW9uVG9DYWlyb0NvbnRleHQoY29udGV4dCwgcmVuZGVyUmVnaW9uKTsKKyNlbmRpZgog
ICAgICAgICBjYWlyb19jbGlwKGNvbnRleHQpOwogICAgICAgICBjYWlyb190cmFuc2xhdGUoY29u
dGV4dCwgLXRvdGFsT2Zmc2V0LngoKSwgLXRvdGFsT2Zmc2V0LnkoKSk7CiAKQEAgLTI5MSw3ICsz
MDUsMTEgQEAgdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEYKICAgICBjaGFyKiBzdGFydCA9IGdfdXRm
OF9vZmZzZXRfdG9fcG9pbnRlcih1dGY4LCBmcm9tKTsKICAgICBjaGFyKiBlbmQgPSBnX3V0Zjhf
b2Zmc2V0X3RvX3BvaW50ZXIoc3RhcnQsIHRvIC0gZnJvbSk7CiAgICAgaW50IHJhbmdlc1tdID0g
e3N0YXJ0IC0gdXRmOCwgZW5kIC0gdXRmOH07CisjaWYgUExBVEZPUk0oR1RLKQogICAgIHBhcnRp
YWxSZWdpb24gPSBnZGtfcGFuZ29fbGF5b3V0X2xpbmVfZ2V0X2NsaXBfcmVnaW9uKGxheW91dExp
bmUsIDAsIDAsIHJhbmdlcywgMSk7CisjZWxzZQorICAgIHBhcnRpYWxSZWdpb24gPSBnZXRDbGlw
UmVnaW9uRnJvbVBhbmdvTGF5b3V0TGluZShsYXlvdXRMaW5lLCAwLCAwLCByYW5nZXMsIDEpOwor
I2VuZGlmCiAKICAgICBkcmF3R2x5cGhzU2hhZG93KGNvbnRleHQsIHBvaW50LCBsYXlvdXRMaW5l
LCBwYXJ0aWFsUmVnaW9uKTsKIApAQCAtMzAxLDcgKzMxOSwxMSBAQCB2b2lkIEZvbnQ6OmRyYXdD
b21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRgogICAgIGZsb2F0IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOwogICAgIGNvbnRleHQt
PmZpbGxDb2xvcigpLmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogICAgIGNhaXJv
X3NldF9zb3VyY2VfcmdiYShjciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgIGdka19j
YWlyb19yZWdpb24oY3IsIHBhcnRpYWxSZWdpb24pOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAg
ICAgZ2RrX2NhaXJvX3JlZ2lvbihjciwgcGFydGlhbFJlZ2lvbik7CisjZWxzZQorICAgICAgICBh
cHBlbmRSZWdpb25Ub0NhaXJvQ29udGV4dChjciwgcGFydGlhbFJlZ2lvbik7CisjZW5kaWYKICAg
ICBjYWlyb19jbGlwKGNyKTsKIAogICAgIHBhbmdvX2NhaXJvX3Nob3dfbGF5b3V0X2xpbmUoY3Is
IGxheW91dExpbmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcGFuZ28vUGFuZ29VdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcGFuZ28vUGFuZ29VdGlsaXRpZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjg4NDM4MzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9wYW5nby9QYW5nb1V0aWxpdGllcy5jcHAKQEAgLTAsMCArMSw4NyBAQAor
LyoKKyAqIFRoaXMgY29kZSB3YXMgbW9zdGx5IGNvcGllZCBmcm9tIGdkay1wYW5nby4KKyAqIHNv
dXJjZTogaHR0cDovL2dpdC5nbm9tZS5vcmcvYnJvd3NlL2d0aysvdHJlZS9nZGsvZ2RrcGFuZ28u
YworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFuZ29VdGlsaXRpZXMuaCIKKworI2lu
Y2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8cGFuZ28vcGFuZ28uaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgY2Fpcm9fcmVnaW9uX3QqIGdldExpbmVDbGlwUmVnaW9uRnJvbUxh
eW91dEl0ZXIoUGFuZ29MYXlvdXRJdGVyICppdGVyLCBpbnQgeE9yaWdpbiwgaW50IHlPcmlnaW4s
IGNvbnN0IGludCAqaW5kZXhSYW5nZXMsIGludCBuUmFuZ2VzKQoreworICAgIFBhbmdvUmVjdGFu
Z2xlIGxvZ2ljYWxSZWN0OworICAgIFBhbmdvTGF5b3V0TGluZSogbGluZSA9IHBhbmdvX2xheW91
dF9pdGVyX2dldF9saW5lX3JlYWRvbmx5KGl0ZXIpOworICAgIGNhaXJvX3JlZ2lvbl90KiBjbGlw
UmVnaW9uID0gY2Fpcm9fcmVnaW9uX2NyZWF0ZSgpOworICAgIHBhbmdvX2xheW91dF9pdGVyX2dl
dF9saW5lX2V4dGVudHMoaXRlciwgMCwgJmxvZ2ljYWxSZWN0KTsKKyAgICBpbnQgYmFzZWxpbmUg
PSBwYW5nb19sYXlvdXRfaXRlcl9nZXRfYmFzZWxpbmUoaXRlcik7CisKKyAgICBpbnQgaSA9IDA7
CisgICAgd2hpbGUgKGkgPCBuUmFuZ2VzKSB7CisgICAgICAgIGludCogcGl4ZWxSYW5nZXMgPSAw
OworICAgICAgICBpbnQgblBpeGVsUmFuZ2VzID0gMDsKKworICAgICAgICBpZiAoaW5kZXhSYW5n
ZXNbaSAqIDIgKyAxXSA+PSBsaW5lLT5zdGFydF9pbmRleAorICAgICAgICAgICAgJiYgaW5kZXhS
YW5nZXNbaSAqIDJdIDwgbGluZS0+c3RhcnRfaW5kZXggKyBsaW5lLT5sZW5ndGgpCisgICAgICAg
ICAgICBwYW5nb19sYXlvdXRfbGluZV9nZXRfeF9yYW5nZXMobGluZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFJhbmdlc1tpICogMl0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhSYW5nZXNbaSAqIDIgKyAx
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGl4ZWxSYW5n
ZXMsICZuUGl4ZWxSYW5nZXMpOworCisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgblBpeGVs
UmFuZ2VzOyArK2opIHsKKyAgICAgICAgICAgIGludCB4T2ZmID0gUEFOR09fUElYRUxTKHBpeGVs
UmFuZ2VzWzIgKiBqXSAtIGxvZ2ljYWxSZWN0LngpOworICAgICAgICAgICAgaW50IHlPZmYgPSBQ
QU5HT19QSVhFTFMoYmFzZWxpbmUgLSBsb2dpY2FsUmVjdC55KTsKKworICAgICAgICAgICAgY2Fp
cm9fcmVjdGFuZ2xlX2ludF90IHJlY3Q7CisgICAgICAgICAgICByZWN0LnggPSB4T3JpZ2luICsg
eE9mZjsKKyAgICAgICAgICAgIHJlY3QueSA9IHlPcmlnaW4gLSB5T2ZmOworICAgICAgICAgICAg
cmVjdC53aWR0aCA9IFBBTkdPX1BJWEVMUyhwaXhlbFJhbmdlc1syICogaiArIDFdIC0gbG9naWNh
bFJlY3QueCkgLSB4T2ZmOworICAgICAgICAgICAgcmVjdC5oZWlnaHQgPSBQQU5HT19QSVhFTFMo
YmFzZWxpbmUgLSBsb2dpY2FsUmVjdC55ICsgbG9naWNhbFJlY3QuaGVpZ2h0KSAtIHlPZmY7CisK
KyAgICAgICAgICAgIGNhaXJvX3JlZ2lvbl91bmlvbl9yZWN0YW5nbGUoY2xpcFJlZ2lvbiwgJnJl
Y3QpOworICAgICAgICB9CisKKyAgICAgICAgZnJlZShwaXhlbFJhbmdlcyk7CisgICAgICAgICsr
aTsKKyAgICB9CisgICAgcmV0dXJuIGNsaXBSZWdpb247Cit9CisKK2NhaXJvX3JlZ2lvbl90KiBn
ZXRDbGlwUmVnaW9uRnJvbVBhbmdvTGF5b3V0TGluZShQYW5nb0xheW91dExpbmUqIGxpbmUsIGlu
dCB4T3JpZ2luLCBpbnQgeU9yaWdpbiwgY29uc3QgaW50KiBpbmRleFJhbmdlcywgaW50IG5SYW5n
ZXMpCit7CisgICAgaWYgKCFpbmRleFJhbmdlcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBQ
YW5nb0xheW91dEl0ZXIqIGl0ZXIgPSBwYW5nb19sYXlvdXRfZ2V0X2l0ZXIobGluZS0+bGF5b3V0
KTsKKyAgICB3aGlsZSAocGFuZ29fbGF5b3V0X2l0ZXJfZ2V0X2xpbmVfcmVhZG9ubHkoaXRlcikg
IT0gbGluZSkKKyAgICAgICAgcGFuZ29fbGF5b3V0X2l0ZXJfbmV4dF9saW5lKGl0ZXIpOworCisg
ICAgY2Fpcm9fcmVnaW9uX3QqIGNsaXBSZWdpb24gPSBnZXRMaW5lQ2xpcFJlZ2lvbkZyb21MYXlv
dXRJdGVyKGl0ZXIsIHhPcmlnaW4sIHlPcmlnaW4sIGluZGV4UmFuZ2VzLCBuUmFuZ2VzKTsKKwor
ICAgIHBhbmdvX2xheW91dF9pdGVyX2ZyZWUoaXRlcik7CisKKyAgICByZXR1cm4gY2xpcFJlZ2lv
bjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vUGFuZ29VdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1BhbmdvVXRpbGl0aWVzLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZlMzI5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1BhbmdvVXRpbGl0aWVzLmgKQEAgLTAs
MCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBSZWQgSGF0LCBJbmMuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KKyAqLworCisjaWZuZGVmIFBhbmdvVXRpbGl0aWVzX2gKKyNkZWZpbmUgUGFuZ29VdGlsaXRp
ZXNfaAorCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorCit0eXBlZGVmIHN0cnVjdCBfUGFu
Z29MYXlvdXRMaW5lIFBhbmdvTGF5b3V0TGluZTsKK3R5cGVkZWYgc3RydWN0IF9jYWlyb19yZWdp
b24gY2Fpcm9fcmVnaW9uX3Q7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2Fpcm9fcmVnaW9u
X3QqIGdldENsaXBSZWdpb25Gcm9tUGFuZ29MYXlvdXRMaW5lKFBhbmdvTGF5b3V0TGluZSosIGlu
dCwgaW50LCBjb25zdCBpbnQqLCBpbnQpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBQYW5nb1V0aWxpdGllc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvRmluZFBh
bmdvLmNtYWtlIGIvU291cmNlL2NtYWtlL0ZpbmRQYW5nby5jbWFrZQppbmRleCAwZGY1NDdmLi5j
NzFmMDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvRmluZFBhbmdvLmNtYWtlCisrKyBiL1Nv
dXJjZS9jbWFrZS9GaW5kUGFuZ28uY21ha2UKQEAgLTEyLDYgKzEyLDcgQEAgbGliZmluZF9wYWNr
YWdlKFBhbmdvIEZyZWV0eXBlKQogCiAjIFVzZSBwa2ctY29uZmlnIHRvIGdldCBoaW50cyBhYm91
dCBwYXRocwogbGliZmluZF9wa2dfY2hlY2tfbW9kdWxlcyhQYW5nb19QS0dDT05GIHBhbmdvKQor
bGliZmluZF9wa2dfY2hlY2tfbW9kdWxlcyhQYW5nb19DYWlyb19QS0dDT05GIHBhbmdvKQogCiAj
IEluY2x1ZGUgZGlyCiBmaW5kX3BhdGgoUGFuZ29fSU5DTFVERV9ESVIKQEAgLTIwLDEyICsyMSwy
MyBAQCBmaW5kX3BhdGgoUGFuZ29fSU5DTFVERV9ESVIKICAgUEFUSF9TVUZGSVhFUyBwYW5nby0x
LjAKICkKIAorZmluZF9wYXRoKFBhbmdvX0NhaXJvX0lOQ0xVREVfRElSCisgIE5BTUVTIHBhbmdv
L3BhbmdvY2Fpcm8uaAorICBQQVRIUyAke1BhbmdvX0NhaXJvX1BLR0NPTkZfSU5DTFVERV9ESVJT
fQorICBQQVRIX1NVRkZJWEVTIHBhbmdvLTEuMAorKQorCiAjIEZpbmFsbHkgdGhlIGxpYnJhcnkg
aXRzZWxmCiBmaW5kX2xpYnJhcnkoUGFuZ29fTElCUkFSWQogICBOQU1FUyBwYW5nby0xLjAKICAg
UEFUSFMgJHtQYW5nb19QS0dDT05GX0xJQlJBUllfRElSU30KICkKIAorZmluZF9saWJyYXJ5KFBh
bmdvX0NhaXJvX0xJQlJBUlkKKyAgTkFNRVMgcGFuZ29jYWlyby0xLjAKKyAgUEFUSFMgJHtQYW5n
b19DYWlyb19QS0dDT05GX0xJQlJBUllfRElSU30KKykKKwogIyBTZXQgdGhlIGluY2x1ZGUgZGly
IHZhcmlhYmxlcyBhbmQgdGhlIGxpYnJhcmllcyBhbmQgbGV0IGxpYmZpbmRfcHJvY2VzcyBkbyB0
aGUgcmVzdC4KICMgTk9URTogU2luZ3VsYXIgdmFyaWFibGVzIGZvciB0aGlzIGxpYnJhcnksIHBs
dXJhbCBmb3IgbGlicmFyaWVzIHRoaXMgdGhpcyBsaWIgZGVwZW5kcyBvbi4KIHNldChQYW5nb19Q
Uk9DRVNTX0lOQ0xVREVTIFBhbmdvX0lOQ0xVREVfRElSIEZyZWV0eXBlX0lOQ0xVREVfRElSUykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106503</attachid>
            <date>2011-09-06 15:41:10 -0700</date>
            <delta_ts>2011-09-09 08:16:46 -0700</delta_ts>
            <desc>Move FontGtk.cpp to FontPango.cpp</desc>
            <filename>webkit-patch1.patch</filename>
            <type>text/plain</type>
            <size>34882</size>
            <attacher name="Rafael Antognolli">antognolli+webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjZDVhYjM5Li5kODgyMmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIg
QEAKKzIwMTEtMDktMDIgIFJhZmFlbCBBbnRvZ25vbGxpICA8YW50b2dub2xsaUBwcm9mdXNpb24u
bW9iaT4KKworICAgICAgICBSZW5hbWUgRm9udEd0ay5jcHAgdG8gRm9udFBhbmdvLmNwcAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYzMjMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGZpbGUgd2ls
bCBiZSB1c2VkIGJ5IHRoZSBFRkwgcG9ydCB0b28sIGFuZCBzaW5jZSBpdCdzIG5vdCBHVEsKKyAg
ICAgICAgc3BlY2lmaWMgYW55bW9yZSwgcmVuYW1lIGl0IHRvIHNvbWV0aGluZyBiZXR0ZXIuCisK
KyAgICAgICAgTm8gbmV3IGZ1bmN0aW9uYWxpdHkgc28gbm8gbmV3IHRlc3RzLgorCisgICAgICAg
ICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9wYW5n
by9Gb250UGFuZ28uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0ZvbnRHdGsuY3BwLgorICAgICAgICAoV2ViQ29yZTo6ZGVzdHJveVBhbmdvUmVn
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFBhbmdvUmVnaW9uRXh0ZW50cyk6CisgICAgICAg
IChXZWJDb3JlOjp1dGYxNlRvVXRmOCk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VW5pQ2hh
clRvVVRGOCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRQYW5nb0F0dHJpYnV0ZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udDo6Y2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBs
ZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdHbHlwaHNTaGFkb3cpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6
OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
RGVmYXVsdFBhbmdvTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZsb2F0V2lkdGhG
b3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpvZmZzZXRGb3JQb3NpdGlv
bkZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNlbGVjdGlvblJlY3RG
b3JDb21wbGV4VGV4dCk6CisKIDIwMTEtMDktMDYgIE5vZWwgR29yZG9uICA8bm9lbC5nb3Jkb25A
Z21haWwuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bSBza2lhXSBKUEVHSW1hZ2VFbmNvZGVyOiBo
b2lzdCBjb25zdGFudHMgb3V0IG9mIHRoZSBlbmNvZGluZyBsb29wCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQppbmRleCBiYTc2Zjc4Li42MjMyN2VhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KQEAgLTM5NjAsNyArMzk2MCw2IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJj
ZUdTdHJlYW1lci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0ZvbnRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0ljb25HdGsuY3BwIFwKQEAgLTQwODYsNiArNDA4NSw3IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJl
ZXR5cGUvR2x5cGhQYWdlVHJlZU5vZGVGcmVlVHlwZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwCiB3ZWJj
b3JlZ3RrX3NvdXJjZXMgKz0gXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Bh
bmdvL0ZvbnRQYW5nby5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zy
ZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAKIGVuZGlmICMgRU5EIFVTRV9GUkVF
VFlQRQogCkBAIC00MTAwLDYgKzQxMDAsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQbGF0Zm9ybURhdGEuaCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vR2x5cGhQYWdlVHJlZU5vZGVQ
YW5nby5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1NpbXBs
ZUZvbnREYXRhUGFuZ28uY3BwCit3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAorCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQYW5nby5jcHAKIGVuZGlmICMgRU5EIFVT
RV9QQU5HTwogCiAjIC0tLS0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9Gb250R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9Gb250R3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE4ZDQyZS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEd0
ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0gKiBD
b3B5cmlnaHQgKGMpIDIwMDcgSGlyb3l1a2kgSWtlem9lCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcg
S291aGVpIFN1dG91Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2Vy
LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBYYW4gTG9wZXogPHhhbkBnbm9tZS5vcmc+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLQotI2luY2x1
ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR093blB0ci5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCi0jaW5jbHVk
ZSAiU2ltcGxlRm9udERhdGEuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCi0jaW5jbHVkZSA8Y2Fp
cm8uaD4KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSA8cGFuZ28vcGFuZ28uaD4KLSNp
bmNsdWRlIDxwYW5nby9wYW5nb2NhaXJvLmg+Ci0KLSNpZiBVU0UoRlJFRVRZUEUpCi0jaW5jbHVk
ZSA8cGFuZ28vcGFuZ29mYy1mb250bWFwLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLXR5cGVkZWYgR2RrUmVnaW9uKiBQYW5nb1Jl
Z2lvblR5cGU7Ci0KLXZvaWQgZGVzdHJveVBhbmdvUmVnaW9uKFBhbmdvUmVnaW9uVHlwZSByZWdp
b24pCi17Ci0gICAgZ2RrX3JlZ2lvbl9kZXN0cm95KHJlZ2lvbik7Ci19Ci0KLUludFJlY3QgZ2V0
UGFuZ29SZWdpb25FeHRlbnRzKFBhbmdvUmVnaW9uVHlwZSByZWdpb24pCi17Ci0gICAgR2RrUmVj
dGFuZ2xlIHJlY3RhbmdsZTsKLSAgICBnZGtfcmVnaW9uX2dldF9jbGlwYm94KHJlZ2lvbiwgJnJl
Y3RhbmdsZSk7Ci0gICAgcmV0dXJuIEludFJlY3QocmVjdGFuZ2xlLngsIHJlY3RhbmdsZS55LCBy
ZWN0YW5nbGUud2lkdGgsIHJlY3RhbmdsZS5oZWlnaHQpOwotfQotI2Vsc2UKLXR5cGVkZWYgY2Fp
cm9fcmVnaW9uX3QqIFBhbmdvUmVnaW9uVHlwZTsKLQotdm9pZCBkZXN0cm95UGFuZ29SZWdpb24o
UGFuZ29SZWdpb25UeXBlIHJlZ2lvbikKLXsKLSAgICBjYWlyb19yZWdpb25fZGVzdHJveShyZWdp
b24pOwotfQotCi1JbnRSZWN0IGdldFBhbmdvUmVnaW9uRXh0ZW50cyhQYW5nb1JlZ2lvblR5cGUg
cmVnaW9uKQotewotICAgIGNhaXJvX3JlY3RhbmdsZV9pbnRfdCByZWN0YW5nbGU7Ci0gICAgY2Fp
cm9fcmVnaW9uX2dldF9leHRlbnRzKHJlZ2lvbiwgJnJlY3RhbmdsZSk7Ci0gICAgcmV0dXJuIElu
dFJlY3QocmVjdGFuZ2xlLngsIHJlY3RhbmdsZS55LCByZWN0YW5nbGUud2lkdGgsIHJlY3Rhbmds
ZS5oZWlnaHQpOwotfQotI2VuZGlmCi0KLSNkZWZpbmUgSVNfSElHSF9TVVJST0dBVEUodSkgICgo
VUNoYXIpKHUpID49IChVQ2hhcikweGQ4MDAgJiYgKFVDaGFyKSh1KSA8PSAoVUNoYXIpMHhkYmZm
KQotI2RlZmluZSBJU19MT1dfU1VSUk9HQVRFKHUpICAoKFVDaGFyKSh1KSA+PSAoVUNoYXIpMHhk
YzAwICYmIChVQ2hhcikodSkgPD0gKFVDaGFyKTB4ZGZmZikKLQotc3RhdGljIGdjaGFyKiB1dGYx
NlRvVXRmOChjb25zdCBVQ2hhciogYVRleHQsIGdpbnQgYUxlbmd0aCwgZ2ludCAmbGVuZ3RoKQot
ewotICAgIGdib29sZWFuIG5lZWRDb3B5ID0gRkFMU0U7Ci0KLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IGFMZW5ndGg7IGkrKykgewotICAgICAgICBpZiAoIWFUZXh0W2ldIHx8IElTX0xPV19TVVJS
T0dBVEUoYVRleHRbaV0pKSB7Ci0gICAgICAgICAgICBuZWVkQ29weSA9IFRSVUU7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfSAKLQotICAgICAgICBpZiAoSVNfSElHSF9TVVJST0dBVEUo
YVRleHRbaV0pKSB7Ci0gICAgICAgICAgICBpZiAoaSA8IGFMZW5ndGggLSAxICYmIElTX0xPV19T
VVJST0dBVEUoYVRleHRbaSsxXSkpCi0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgbmVlZENvcHkgPSBUUlVFOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgR093blB0cjxV
Q2hhcj4gY29waWVkU3RyaW5nOwotICAgIGlmIChuZWVkQ29weSkgewotICAgICAgICAvKiBQYW5n
byBkb2Vzbid0IGNvcnJlY3RseSBoYW5kbGUgbnVscy4gIFdlIGNvbnZlcnQgdGhlbSB0byAweGZm
LiAqLwotICAgICAgICAvKiBBbHNvICJ2YWxpZGF0ZSIgVVRGLTE2IHRleHQgdG8gbWFrZSBzdXJl
IGNvbnZlcnNpb24gZG9lc24ndCBmYWlsLiAqLwotCi0gICAgICAgIGNvcGllZFN0cmluZy5zZXQo
c3RhdGljX2Nhc3Q8VUNoYXIqPihnX21lbWR1cChhVGV4dCwgYUxlbmd0aCAqIHNpemVvZihhVGV4
dFswXSkpKSk7Ci0gICAgICAgIFVDaGFyKiBwID0gY29waWVkU3RyaW5nLmdldCgpOwotCi0gICAg
ICAgIC8qIGRvbid0IG5lZWQgdG8gcmVzZXQgaSAqLwotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGFMZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaWYgKCFwW2ldIHx8IElTX0xPV19TVVJS
T0dBVEUocFtpXSkpCi0gICAgICAgICAgICAgICAgcFtpXSA9IDB4RkZGRDsKLSAgICAgICAgICAg
IGVsc2UgaWYgKElTX0hJR0hfU1VSUk9HQVRFKHBbaV0pKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGkgPCBhTGVuZ3RoIC0gMSAmJiBJU19MT1dfU1VSUk9HQVRFKGFUZXh0W2krMV0pKQotICAgICAg
ICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICBwW2ldID0gMHhGRkZEOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
YVRleHQgPSBwOwotICAgIH0KLQotICAgIGdjaGFyKiB1dGY4VGV4dDsKLSAgICBnbG9uZyBpdGVt
c1dyaXR0ZW47Ci0gICAgdXRmOFRleHQgPSBnX3V0ZjE2X3RvX3V0Zjgoc3RhdGljX2Nhc3Q8Y29u
c3QgZ3VuaWNoYXIyKj4oYVRleHQpLCBhTGVuZ3RoLCAwLCAmaXRlbXNXcml0dGVuLCAwKTsKLSAg
ICBsZW5ndGggPSBpdGVtc1dyaXR0ZW47Ci0KLSAgICByZXR1cm4gdXRmOFRleHQ7Ci19Ci0KLXN0
YXRpYyBnY2hhciogY29udmVydFVuaUNoYXJUb1VURjgoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IGdpbnQgbGVuZ3RoLCBpbnQgZnJvbSwgaW50IHRvKQotewotICAgIGdpbnQgbmV3TGVuZ3RoID0g
MDsKLSAgICBHT3duUHRyPGdjaGFyPiB1dGY4VGV4dCh1dGYxNlRvVXRmOChjaGFyYWN0ZXJzLCBs
ZW5ndGgsIG5ld0xlbmd0aCkpOwotICAgIGlmICghdXRmOFRleHQpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgZ2NoYXIqIHBvcyA9IHV0ZjhUZXh0LmdldCgpOwotICAgIGlmIChmcm9tID4gMCkg
ewotICAgICAgICAvLyBkaXNjYXJkIHRoZSBmaXJzdCAnZnJvbScgY2hhcmFjdGVycwotICAgICAg
ICAvLyBGSVhNRTogd2Ugc2hvdWxkIGRvIHRoaXMgYmVmb3JlIHRoZSBjb252ZXJzaW9uIHByb2Jh
Ymx5Ci0gICAgICAgIHBvcyA9IGdfdXRmOF9vZmZzZXRfdG9fcG9pbnRlcih1dGY4VGV4dC5nZXQo
KSwgZnJvbSk7Ci0gICAgfQotCi0gICAgZ2ludCBsZW4gPSBzdHJsZW4ocG9zKTsKLSAgICBHU3Ry
aW5nKiByZXQgPSBnX3N0cmluZ19uZXdfbGVuKE5VTEwsIGxlbik7Ci0KLSAgICAvLyByZXBsYWNl
IGxpbmUgYnJlYWsgYnkgc3BhY2UKLSAgICB3aGlsZSAobGVuID4gMCkgewotICAgICAgICBnaW50
IGluZGV4LCBzdGFydDsKLSAgICAgICAgcGFuZ29fZmluZF9wYXJhZ3JhcGhfYm91bmRhcnkocG9z
LCBsZW4sICZpbmRleCwgJnN0YXJ0KTsKLSAgICAgICAgZ19zdHJpbmdfYXBwZW5kX2xlbihyZXQs
IHBvcywgaW5kZXgpOwotICAgICAgICBpZiAoaW5kZXggPT0gc3RhcnQpCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZ19zdHJpbmdfYXBwZW5kX2MocmV0LCAnICcpOwotICAgICAgICBwb3Mg
Kz0gc3RhcnQ7Ci0gICAgICAgIGxlbiAtPSBzdGFydDsKLSAgICB9Ci0gICAgcmV0dXJuIGdfc3Ry
aW5nX2ZyZWUocmV0LCBGQUxTRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldFBhbmdvQXR0cmlidXRl
cyhjb25zdCBGb250KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIFBhbmdvTGF5b3V0KiBsYXlv
dXQpCi17Ci0jaWYgVVNFKEZSRUVUWVBFKQotICAgIGlmIChmb250LT5wcmltYXJ5Rm9udCgpLT5w
bGF0Zm9ybURhdGEoKS5tX3BhdHRlcm4pIHsKLSAgICAgICAgUGFuZ29Gb250RGVzY3JpcHRpb24q
IGRlc2MgPSBwYW5nb19mY19mb250X2Rlc2NyaXB0aW9uX2Zyb21fcGF0dGVybihmb250LT5wcmlt
YXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5tX3BhdHRlcm4uZ2V0KCksIEZBTFNFKTsKLSAgICAg
ICAgcGFuZ29fbGF5b3V0X3NldF9mb250X2Rlc2NyaXB0aW9uKGxheW91dCwgZGVzYyk7Ci0gICAg
ICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJlZShkZXNjKTsKLSAgICB9Ci0jZWxpZiBVU0Uo
UEFOR08pCi0gICAgaWYgKGZvbnQtPnByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpLm1fZm9u
dCkgewotICAgICAgICBQYW5nb0ZvbnREZXNjcmlwdGlvbiogZGVzYyA9IHBhbmdvX2ZvbnRfZGVz
Y3JpYmUoZm9udC0+cHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkubV9mb250KTsKLSAgICAg
ICAgcGFuZ29fbGF5b3V0X3NldF9mb250X2Rlc2NyaXB0aW9uKGxheW91dCwgZGVzYyk7Ci0gICAg
ICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJlZShkZXNjKTsKLSAgICB9Ci0jZW5kaWYKLQot
ICAgIHBhbmdvX2xheW91dF9zZXRfYXV0b19kaXIobGF5b3V0LCBGQUxTRSk7Ci0KLSAgICBQYW5n
b0NvbnRleHQqIHBhbmdvQ29udGV4dCA9IHBhbmdvX2xheW91dF9nZXRfY29udGV4dChsYXlvdXQp
OwotICAgIFBhbmdvRGlyZWN0aW9uIGRpcmVjdGlvbiA9IHJ1bi5ydGwoKSA/IFBBTkdPX0RJUkVD
VElPTl9SVEwgOiBQQU5HT19ESVJFQ1RJT05fTFRSOwotICAgIHBhbmdvX2NvbnRleHRfc2V0X2Jh
c2VfZGlyKHBhbmdvQ29udGV4dCwgZGlyZWN0aW9uKTsKLSAgICBQYW5nb0F0dHJMaXN0KiBsaXN0
ID0gcGFuZ29fYXR0cl9saXN0X25ldygpOwotICAgIFBhbmdvQXR0cmlidXRlKiBhdHRyOwotCi0g
ICAgYXR0ciA9IHBhbmdvX2F0dHJfc2l6ZV9uZXdfYWJzb2x1dGUoZm9udC0+cGl4ZWxTaXplKCkg
KiBQQU5HT19TQ0FMRSk7Ci0gICAgYXR0ci0+ZW5kX2luZGV4ID0gR19NQVhVSU5UOwotICAgIHBh
bmdvX2F0dHJfbGlzdF9pbnNlcnRfYmVmb3JlKGxpc3QsIGF0dHIpOwotCi0gICAgaWYgKCFydW4u
c3BhY2luZ0Rpc2FibGVkKCkpIHsKLSAgICAgICAgYXR0ciA9IHBhbmdvX2F0dHJfbGV0dGVyX3Nw
YWNpbmdfbmV3KGZvbnQtPmxldHRlclNwYWNpbmcoKSAqIFBBTkdPX1NDQUxFKTsKLSAgICAgICAg
YXR0ci0+ZW5kX2luZGV4ID0gR19NQVhVSU5UOwotICAgICAgICBwYW5nb19hdHRyX2xpc3RfaW5z
ZXJ0X2JlZm9yZShsaXN0LCBhdHRyKTsKLSAgICB9Ci0KLSAgICAvLyBQYW5nbyBkb2VzIG5vdCB5
ZXQgc3VwcG9ydCBzeW50aGVzaXNpbmcgc21hbGwgY2FwcwotICAgIC8vIFNlZSBodHRwOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTYxMAotCi0gICAgcGFuZ29fbGF5b3V0X3Nl
dF9hdHRyaWJ1dGVzKGxheW91dCwgbGlzdCk7Ci0gICAgcGFuZ29fYXR0cl9saXN0X3VucmVmKGxp
c3QpOwotfQotCi1ib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4
dCgpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEZvbnQ6OmNhbkV4cGFuZEFyb3Vu
ZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0
YXRpYyB2b2lkIGRyYXdHbHlwaHNTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRl
eHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBQYW5nb0xheW91dExpbmUqIGxheW91dExpbmUs
IFBhbmdvUmVnaW9uVHlwZSByZW5kZXJSZWdpb24pCi17Ci0gICAgU2hhZG93Qmx1ciYgc2hhZG93
ID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+c2hhZG93Qmx1cigpOwotCi0g
ICAgaWYgKCEoZ3JhcGhpY3NDb250ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlRmls
bCkgfHwgc2hhZG93LnR5cGUoKSA9PSBTaGFkb3dCbHVyOjpOb1NoYWRvdykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgRmxvYXRQb2ludCB0b3RhbE9mZnNldChwb2ludCArIGdyYXBoaWNzQ29udGV4
dC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQpOwotCi0gICAgLy8gT3B0aW1pemUgbm9uLWJsdXJyeSBz
aGFkb3dzLCBieSBqdXN0IGRyYXdpbmcgdGV4dCB3aXRob3V0IHRoZSBTaGFkb3dCbHVyLgotICAg
IGlmICghc2hhZG93Lm11c3RVc2VTaGFkb3dCbHVyKGdyYXBoaWNzQ29udGV4dCkpIHsKLSAgICAg
ICAgY2Fpcm9fdCogY29udGV4dCA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkt
PmNyKCk7Ci0gICAgICAgIGNhaXJvX3NhdmUoY29udGV4dCk7Ci0gICAgICAgIGNhaXJvX3RyYW5z
bGF0ZShjb250ZXh0LCB0b3RhbE9mZnNldC54KCksIHRvdGFsT2Zmc2V0LnkoKSk7Ci0KLSAgICAg
ICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjb250ZXh0LCBncmFwaGljc0NvbnRleHQtPnN0YXRl
KCkuc2hhZG93Q29sb3IpOwotICAgICAgICBnZGtfY2Fpcm9fcmVnaW9uKGNvbnRleHQsIHJlbmRl
clJlZ2lvbik7Ci0gICAgICAgIGNhaXJvX2NsaXAoY29udGV4dCk7Ci0gICAgICAgIHBhbmdvX2Nh
aXJvX3Nob3dfbGF5b3V0X2xpbmUoY29udGV4dCwgbGF5b3V0TGluZSk7Ci0KLSAgICAgICAgY2Fp
cm9fcmVzdG9yZShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEZsb2F0
UmVjdCBleHRlbnRzKGdldFBhbmdvUmVnaW9uRXh0ZW50cyhyZW5kZXJSZWdpb24pKTsKLSAgICBl
eHRlbnRzLnNldExvY2F0aW9uKEZsb2F0UG9pbnQocG9pbnQueCgpLCBwb2ludC55KCkgLSBleHRl
bnRzLmhlaWdodCgpKSk7Ci0gICAgaWYgKEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9
IHNoYWRvdy5iZWdpblNoYWRvd0xheWVyKGdyYXBoaWNzQ29udGV4dCwgZXh0ZW50cykpIHsKLSAg
ICAgICAgY2Fpcm9fdCogY2Fpcm9TaGFkb3dDb250ZXh0ID0gc2hhZG93Q29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCktPmNyKCk7Ci0gICAgICAgIGNhaXJvX3RyYW5zbGF0ZShjYWlyb1NoYWRvd0Nv
bnRleHQsIHBvaW50LngoKSwgcG9pbnQueSgpKTsKLSAgICAgICAgcGFuZ29fY2Fpcm9fc2hvd19s
YXlvdXRfbGluZShjYWlyb1NoYWRvd0NvbnRleHQsIGxheW91dExpbmUpOwotCi0gICAgICAgIC8v
IFdlIG5lZWQgdGhlIGNsaXBwaW5nIHJlZ2lvbiB0byBiZSBhY3RpdmUgd2hlbiB3ZSBibGl0IHRo
ZSBibHVycmVkIHNoYWRvdyBiYWNrLAotICAgICAgICAvLyBiZWNhdXNlIHdlIGRvbid0IHdhbnQg
YW55IGJpdHMgYW5kIHBpZWNlcyBvZiBjaGFyYWN0ZXJzIG91dCBvZiByYW5nZSB0byBiZQotICAg
ICAgICAvLyBkcmF3bi4gU2luY2UgU2hhZG93Qmx1ciBleHBlY3RzIGEgY29uc2lzdGVudCB0cmFu
c2Zvcm0sIHdlIGhhdmUgdG8gdW5kbyB0aGUKLSAgICAgICAgLy8gdHJhbnNsYXRpb24gYmVmb3Jl
IGNhbGxpbmcgZW5kU2hhZG93TGF5ZXIgYXMgd2VsbC4KLSAgICAgICAgY2Fpcm9fdCogY29udGV4
dCA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7Ci0gICAgICAgIGNh
aXJvX3NhdmUoY29udGV4dCk7Ci0gICAgICAgIGNhaXJvX3RyYW5zbGF0ZShjb250ZXh0LCB0b3Rh
bE9mZnNldC54KCksIHRvdGFsT2Zmc2V0LnkoKSk7Ci0gICAgICAgIGdka19jYWlyb19yZWdpb24o
Y29udGV4dCwgcmVuZGVyUmVnaW9uKTsKLSAgICAgICAgY2Fpcm9fY2xpcChjb250ZXh0KTsKLSAg
ICAgICAgY2Fpcm9fdHJhbnNsYXRlKGNvbnRleHQsIC10b3RhbE9mZnNldC54KCksIC10b3RhbE9m
ZnNldC55KCkpOwotCi0gICAgICAgIHNoYWRvdy5lbmRTaGFkb3dMYXllcihncmFwaGljc0NvbnRl
eHQpOwotICAgICAgICBjYWlyb19yZXN0b3JlKGNvbnRleHQpOwotICAgIH0KLX0KLQotdm9pZCBG
b250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0
UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dAotewotI2lmIFVTRShGUkVFVFlQRSkKLSAgICBpZiAoIXByaW1hcnlGb250KCktPnBsYXRmb3Jt
RGF0YSgpLm1fcGF0dGVybikgewotICAgICAgICBkcmF3U2ltcGxlVGV4dChjb250ZXh0LCBydW4s
IHBvaW50LCBmcm9tLCB0byk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAg
IGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7Ci0gICAgUGFu
Z29MYXlvdXQqIGxheW91dCA9IHBhbmdvX2NhaXJvX2NyZWF0ZV9sYXlvdXQoY3IpOwotICAgIHNl
dFBhbmdvQXR0cmlidXRlcyh0aGlzLCBydW4sIGxheW91dCk7Ci0KLSAgICBnY2hhciogdXRmOCA9
IGNvbnZlcnRVbmlDaGFyVG9VVEY4KHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSwgMCwg
cnVuLmxlbmd0aCgpKTsKLSAgICBwYW5nb19sYXlvdXRfc2V0X3RleHQobGF5b3V0LCB1dGY4LCAt
MSk7Ci0KLSAgICAvLyBPdXIgbGF5b3V0cyBhcmUgc2luZ2xlIGxpbmUKLSAgICBQYW5nb0xheW91
dExpbmUqIGxheW91dExpbmUgPSBwYW5nb19sYXlvdXRfZ2V0X2xpbmVfcmVhZG9ubHkobGF5b3V0
LCAwKTsKLQotICAgIC8vIEdldCB0aGUgcmVnaW9uIHdoZXJlIHRoaXMgdGV4dCB3aWxsIGJlIGxh
aWQgb3V0LiBXZSB3aWxsIHVzZSBpdCB0byBjbGlwCi0gICAgLy8gdGhlIENhaXJvIGNvbnRleHQs
IGZvciB3aGVuIHdlIGFyZSBvbmx5IHBhaW50aW5nIHBhcnQgb2YgdGhlIHRleHQgcnVuIGFuZAot
ICAgIC8vIHRvIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgc2hhZG93IGJ1ZmZlci4KLSAgICBQ
YW5nb1JlZ2lvblR5cGUgcGFydGlhbFJlZ2lvbiA9IDA7Ci0gICAgY2hhciogc3RhcnQgPSBnX3V0
Zjhfb2Zmc2V0X3RvX3BvaW50ZXIodXRmOCwgZnJvbSk7Ci0gICAgY2hhciogZW5kID0gZ191dGY4
X29mZnNldF90b19wb2ludGVyKHN0YXJ0LCB0byAtIGZyb20pOwotICAgIGludCByYW5nZXNbXSA9
IHtzdGFydCAtIHV0ZjgsIGVuZCAtIHV0Zjh9OwotICAgIHBhcnRpYWxSZWdpb24gPSBnZGtfcGFu
Z29fbGF5b3V0X2xpbmVfZ2V0X2NsaXBfcmVnaW9uKGxheW91dExpbmUsIDAsIDAsIHJhbmdlcywg
MSk7Ci0KLSAgICBkcmF3R2x5cGhzU2hhZG93KGNvbnRleHQsIHBvaW50LCBsYXlvdXRMaW5lLCBw
YXJ0aWFsUmVnaW9uKTsKLQotICAgIGNhaXJvX3NhdmUoY3IpOwotICAgIGNhaXJvX3RyYW5zbGF0
ZShjciwgcG9pbnQueCgpLCBwb2ludC55KCkpOwotCi0gICAgZmxvYXQgcmVkLCBncmVlbiwgYmx1
ZSwgYWxwaGE7Ci0gICAgY29udGV4dC0+ZmlsbENvbG9yKCkuZ2V0UkdCQShyZWQsIGdyZWVuLCBi
bHVlLCBhbHBoYSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNyLCByZWQsIGdyZWVuLCBi
bHVlLCBhbHBoYSk7Ci0gICAgZ2RrX2NhaXJvX3JlZ2lvbihjciwgcGFydGlhbFJlZ2lvbik7Ci0g
ICAgY2Fpcm9fY2xpcChjcik7Ci0KLSAgICBwYW5nb19jYWlyb19zaG93X2xheW91dF9saW5lKGNy
LCBsYXlvdXRMaW5lKTsKLQotICAgIGlmIChjb250ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRl
eHRNb2RlU3Ryb2tlKSB7Ci0gICAgICAgIENvbG9yIHN0cm9rZUNvbG9yID0gY29udGV4dC0+c3Ry
b2tlQ29sb3IoKTsKLSAgICAgICAgc3Ryb2tlQ29sb3IuZ2V0UkdCQShyZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7Ci0gICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVkLCBncmVlbiwg
Ymx1ZSwgYWxwaGEpOwotICAgICAgICBwYW5nb19jYWlyb19sYXlvdXRfbGluZV9wYXRoKGNyLCBs
YXlvdXRMaW5lKTsKLSAgICAgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgoY3IsIGNvbnRleHQtPnN0
cm9rZVRoaWNrbmVzcygpKTsKLSAgICAgICAgY2Fpcm9fc3Ryb2tlKGNyKTsKLSAgICB9Ci0KLSAg
ICAvLyBQYW5nbyBzb21ldGltZXMgbGVhdmVzIGJlaGluZCBwYXRocyB3ZSBkb24ndCB3YW50Ci0g
ICAgY2Fpcm9fbmV3X3BhdGgoY3IpOwotCi0gICAgZGVzdHJveVBhbmdvUmVnaW9uKHBhcnRpYWxS
ZWdpb24pOwotICAgIGdfZnJlZSh1dGY4KTsKLSAgICBnX29iamVjdF91bnJlZihsYXlvdXQpOwot
Ci0gICAgY2Fpcm9fcmVzdG9yZShjcik7Ci19Ci0KLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFy
a3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRl
eHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBG
bG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29u
c3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0vLyBXZSBzaG91bGQgY3JlYXRlIHRo
ZSBsYXlvdXQgd2l0aCBvdXIgYWN0dWFsIGNvbnRleHQgYnV0IHdlIGNhbid0IGFjY2VzcyBpdCBm
cm9tIGhlcmUuCi1zdGF0aWMgUGFuZ29MYXlvdXQqIGdldERlZmF1bHRQYW5nb0xheW91dChjb25z
dCBUZXh0UnVuJiBydW4pCi17Ci0gICAgc3RhdGljIFBhbmdvRm9udE1hcCogbWFwID0gcGFuZ29f
Y2Fpcm9fZm9udF9tYXBfZ2V0X2RlZmF1bHQoKTsKLSNpZiBQQU5HT19WRVJTSU9OX0NIRUNLKDEs
MjEsNSkKLSAgICBzdGF0aWMgUGFuZ29Db250ZXh0KiBwYW5nb0NvbnRleHQgPSBwYW5nb19mb250
X21hcF9jcmVhdGVfY29udGV4dChtYXApOwotI2Vsc2UKLSAgICAvLyBEZXByZWNhdGVkIGluIFBh
bmdvIDEuMjEuCi0gICAgc3RhdGljIFBhbmdvQ29udGV4dCogcGFuZ29Db250ZXh0ID0gcGFuZ29f
Y2Fpcm9fZm9udF9tYXBfY3JlYXRlX2NvbnRleHQoUEFOR09fQ0FJUk9fRk9OVF9NQVAobWFwKSk7
Ci0jZW5kaWYKLSAgICBQYW5nb0xheW91dCogbGF5b3V0ID0gcGFuZ29fbGF5b3V0X25ldyhwYW5n
b0NvbnRleHQpOwotCi0gICAgcmV0dXJuIGxheW91dDsKLX0KLQotZmxvYXQgRm9udDo6ZmxvYXRX
aWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBvdmVyZmxvdykgY29u
c3QKLXsKLSNpZiBVU0UoRlJFRVRZUEUpCi0gICAgaWYgKCFwcmltYXJ5Rm9udCgpLT5wbGF0Zm9y
bURhdGEoKS5tX3BhdHRlcm4pCi0gICAgICAgIHJldHVybiBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4
dChydW4sIDAsIGZhbGxiYWNrRm9udHMsIG92ZXJmbG93KTsKLSNlbmRpZgotCi0gICAgaWYgKHJ1
bi5sZW5ndGgoKSA9PSAwKQotICAgICAgICByZXR1cm4gMC4wZjsKLQotICAgIFBhbmdvTGF5b3V0
KiBsYXlvdXQgPSBnZXREZWZhdWx0UGFuZ29MYXlvdXQocnVuKTsKLSAgICBzZXRQYW5nb0F0dHJp
YnV0ZXModGhpcywgcnVuLCBsYXlvdXQpOwotCi0gICAgZ2NoYXIqIHV0ZjggPSBjb252ZXJ0VW5p
Q2hhclRvVVRGOChydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCksIDAsIHJ1bi5sZW5ndGgo
KSk7Ci0gICAgcGFuZ29fbGF5b3V0X3NldF90ZXh0KGxheW91dCwgdXRmOCwgLTEpOwotCi0gICAg
aW50IHdpZHRoOwotICAgIHBhbmdvX2xheW91dF9nZXRfcGl4ZWxfc2l6ZShsYXlvdXQsICZ3aWR0
aCwgMCk7Ci0KLSAgICBnX2ZyZWUodXRmOCk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGF5b3V0KTsK
LQotICAgIHJldHVybiB3aWR0aDsKLX0KLQotaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4RmxvYXQsIGJvb2wgaW5jbHVk
ZVBhcnRpYWxHbHlwaHMpIGNvbnN0Ci17Ci0jaWYgVVNFKEZSRUVUWVBFKQotICAgIGlmICghcHJp
bWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkubV9wYXR0ZXJuKQotICAgICAgICByZXR1cm4gb2Zm
c2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KHJ1biwgeEZsb2F0LCBpbmNsdWRlUGFydGlhbEds
eXBocyk7Ci0jZW5kaWYKLSAgICAvLyBGSVhNRTogVGhpcyB0cnVuY2F0aW9uIGlzIG5vdCBhIHBy
b2JsZW0gZm9yIEhUTUwsIGJ1dCBvbmx5IGFmZmVjdHMgU1ZHLCB3aGljaCBwYXNzZXMgZmxvYXRp
bmctcG9pbnQgbnVtYmVycwotICAgIC8vIHRvIEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKCkuIEJ1
ZyBodHRwOi8vd2Via2l0Lm9yZy9iLzQwNjczIHRyYWNrcyBmaXhpbmcgdGhpcyBwcm9ibGVtLgot
ICAgIGludCB4ID0gc3RhdGljX2Nhc3Q8aW50Pih4RmxvYXQpOwotCi0gICAgUGFuZ29MYXlvdXQq
IGxheW91dCA9IGdldERlZmF1bHRQYW5nb0xheW91dChydW4pOwotICAgIHNldFBhbmdvQXR0cmli
dXRlcyh0aGlzLCBydW4sIGxheW91dCk7Ci0KLSAgICBnY2hhciogdXRmOCA9IGNvbnZlcnRVbmlD
aGFyVG9VVEY4KHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSwgMCwgcnVuLmxlbmd0aCgp
KTsKLSAgICBwYW5nb19sYXlvdXRfc2V0X3RleHQobGF5b3V0LCB1dGY4LCAtMSk7Ci0KLSAgICBp
bnQgaW5kZXgsIHRyYWlsaW5nOwotICAgIHBhbmdvX2xheW91dF94eV90b19pbmRleChsYXlvdXQs
IHggKiBQQU5HT19TQ0FMRSwgMSwgJmluZGV4LCAmdHJhaWxpbmcpOwotICAgIGdsb25nIG9mZnNl
dCA9IGdfdXRmOF9wb2ludGVyX3RvX29mZnNldCh1dGY4LCB1dGY4ICsgaW5kZXgpOwotICAgIGlm
IChpbmNsdWRlUGFydGlhbEdseXBocykKLSAgICAgICAgb2Zmc2V0ICs9IHRyYWlsaW5nOwotCi0g
ICAgZ19mcmVlKHV0ZjgpOwotICAgIGdfb2JqZWN0X3VucmVmKGxheW91dCk7Ci0KLSAgICByZXR1
cm4gb2Zmc2V0OwotfQotCi1GbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBoLCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdAotewotI2lmIFVTRShGUkVFVFlQRSkKLSAgICBpZiAoIXBy
aW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpLm1fcGF0dGVybikKLSAgICAgICAgcmV0dXJuIHNl
bGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KHJ1biwgcG9pbnQsIGgsIGZyb20sIHRvKTsKLSNlbmRp
ZgotCi0gICAgUGFuZ29MYXlvdXQqIGxheW91dCA9IGdldERlZmF1bHRQYW5nb0xheW91dChydW4p
OwotICAgIHNldFBhbmdvQXR0cmlidXRlcyh0aGlzLCBydW4sIGxheW91dCk7Ci0KLSAgICBnY2hh
ciogdXRmOCA9IGNvbnZlcnRVbmlDaGFyVG9VVEY4KHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5n
dGgoKSwgMCwgcnVuLmxlbmd0aCgpKTsKLSAgICBwYW5nb19sYXlvdXRfc2V0X3RleHQobGF5b3V0
LCB1dGY4LCAtMSk7Ci0KLSAgICBjaGFyKiBzdGFydCA9IGdfdXRmOF9vZmZzZXRfdG9fcG9pbnRl
cih1dGY4LCBmcm9tKTsKLSAgICBjaGFyKiBlbmQgPSBnX3V0Zjhfb2Zmc2V0X3RvX3BvaW50ZXIo
c3RhcnQsIHRvIC0gZnJvbSk7Ci0KLSAgICBpZiAocnVuLmx0cigpKSB7Ci0gICAgICAgIGZyb20g
PSBzdGFydCAtIHV0Zjg7Ci0gICAgICAgIHRvID0gZW5kIC0gdXRmODsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBmcm9tID0gZW5kIC0gdXRmODsKLSAgICAgICAgdG8gPSBzdGFydCAtIHV0Zjg7Ci0g
ICAgfQotCi0gICAgUGFuZ29MYXlvdXRMaW5lKiBsYXlvdXRMaW5lID0gcGFuZ29fbGF5b3V0X2dl
dF9saW5lX3JlYWRvbmx5KGxheW91dCwgMCk7Ci0gICAgaW50IHhfcG9zOwotCi0gICAgeF9wb3Mg
PSAwOwotICAgIGlmIChmcm9tIDwgbGF5b3V0TGluZS0+bGVuZ3RoKQotICAgICAgICBwYW5nb19s
YXlvdXRfbGluZV9pbmRleF90b194KGxheW91dExpbmUsIGZyb20sIEZBTFNFLCAmeF9wb3MpOwot
ICAgIGZsb2F0IGJlZm9yZVdpZHRoID0gUEFOR09fUElYRUxTX0ZMT09SKHhfcG9zKTsKLQotICAg
IHhfcG9zID0gMDsKLSAgICBpZiAocnVuLmx0cigpIHx8IHRvIDwgbGF5b3V0TGluZS0+bGVuZ3Ro
KQotICAgICAgICBwYW5nb19sYXlvdXRfbGluZV9pbmRleF90b194KGxheW91dExpbmUsIHRvLCBG
QUxTRSwgJnhfcG9zKTsKLSAgICBmbG9hdCBhZnRlcldpZHRoID0gUEFOR09fUElYRUxTKHhfcG9z
KTsKLQotICAgIGdfZnJlZSh1dGY4KTsKLSAgICBnX29iamVjdF91bnJlZihsYXlvdXQpOwotCi0g
ICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54KCkgKyBiZWZvcmVXaWR0aCwgcG9pbnQueSgpLCBh
ZnRlcldpZHRoIC0gYmVmb3JlV2lkdGgsIGgpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGFuZ28uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBhbmdvLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDAxNTk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBhbmdvLmNwcApAQCAtMCwwICsx
LDQ0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVs
IG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSGlyb3l1a2kgSWtl
em9lCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgS291aGVpIFN1dG91CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBY
YW4gTG9wZXogPHhhbkBnbm9tZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0
ZC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZvbnQuaCIKKworI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVk
ZSAiR093blB0ci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNs
dWRlICJTaGFkb3dCbHVyLmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRl
ICJUZXh0UnVuLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxnZGsvZ2RrLmg+Cisj
aW5jbHVkZSA8cGFuZ28vcGFuZ28uaD4KKyNpbmNsdWRlIDxwYW5nby9wYW5nb2NhaXJvLmg+CisK
KyNpZiBVU0UoRlJFRVRZUEUpCisjaW5jbHVkZSA8cGFuZ28vcGFuZ29mYy1mb250bWFwLmg+Cisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIK
K3R5cGVkZWYgR2RrUmVnaW9uKiBQYW5nb1JlZ2lvblR5cGU7CisKK3ZvaWQgZGVzdHJveVBhbmdv
UmVnaW9uKFBhbmdvUmVnaW9uVHlwZSByZWdpb24pCit7CisgICAgZ2RrX3JlZ2lvbl9kZXN0cm95
KHJlZ2lvbik7Cit9CisKK0ludFJlY3QgZ2V0UGFuZ29SZWdpb25FeHRlbnRzKFBhbmdvUmVnaW9u
VHlwZSByZWdpb24pCit7CisgICAgR2RrUmVjdGFuZ2xlIHJlY3RhbmdsZTsKKyAgICBnZGtfcmVn
aW9uX2dldF9jbGlwYm94KHJlZ2lvbiwgJnJlY3RhbmdsZSk7CisgICAgcmV0dXJuIEludFJlY3Qo
cmVjdGFuZ2xlLngsIHJlY3RhbmdsZS55LCByZWN0YW5nbGUud2lkdGgsIHJlY3RhbmdsZS5oZWln
aHQpOworfQorI2Vsc2UKK3R5cGVkZWYgY2Fpcm9fcmVnaW9uX3QqIFBhbmdvUmVnaW9uVHlwZTsK
Kwordm9pZCBkZXN0cm95UGFuZ29SZWdpb24oUGFuZ29SZWdpb25UeXBlIHJlZ2lvbikKK3sKKyAg
ICBjYWlyb19yZWdpb25fZGVzdHJveShyZWdpb24pOworfQorCitJbnRSZWN0IGdldFBhbmdvUmVn
aW9uRXh0ZW50cyhQYW5nb1JlZ2lvblR5cGUgcmVnaW9uKQoreworICAgIGNhaXJvX3JlY3Rhbmds
ZV9pbnRfdCByZWN0YW5nbGU7CisgICAgY2Fpcm9fcmVnaW9uX2dldF9leHRlbnRzKHJlZ2lvbiwg
JnJlY3RhbmdsZSk7CisgICAgcmV0dXJuIEludFJlY3QocmVjdGFuZ2xlLngsIHJlY3RhbmdsZS55
LCByZWN0YW5nbGUud2lkdGgsIHJlY3RhbmdsZS5oZWlnaHQpOworfQorI2VuZGlmCisKKyNkZWZp
bmUgSVNfSElHSF9TVVJST0dBVEUodSkgICgoVUNoYXIpKHUpID49IChVQ2hhcikweGQ4MDAgJiYg
KFVDaGFyKSh1KSA8PSAoVUNoYXIpMHhkYmZmKQorI2RlZmluZSBJU19MT1dfU1VSUk9HQVRFKHUp
ICAoKFVDaGFyKSh1KSA+PSAoVUNoYXIpMHhkYzAwICYmIChVQ2hhcikodSkgPD0gKFVDaGFyKTB4
ZGZmZikKKworc3RhdGljIGdjaGFyKiB1dGYxNlRvVXRmOChjb25zdCBVQ2hhciogYVRleHQsIGdp
bnQgYUxlbmd0aCwgZ2ludCAmbGVuZ3RoKQoreworICAgIGdib29sZWFuIG5lZWRDb3B5ID0gRkFM
U0U7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFMZW5ndGg7IGkrKykgeworICAgICAgICBp
ZiAoIWFUZXh0W2ldIHx8IElTX0xPV19TVVJST0dBVEUoYVRleHRbaV0pKSB7CisgICAgICAgICAg
ICBuZWVkQ29weSA9IFRSVUU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSAKKworICAg
ICAgICBpZiAoSVNfSElHSF9TVVJST0dBVEUoYVRleHRbaV0pKSB7CisgICAgICAgICAgICBpZiAo
aSA8IGFMZW5ndGggLSAxICYmIElTX0xPV19TVVJST0dBVEUoYVRleHRbaSsxXSkpCisgICAgICAg
ICAgICAgICAgaSsrOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbmVlZENv
cHkgPSBUUlVFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgR093blB0cjxVQ2hhcj4gY29waWVkU3RyaW5nOworICAgIGlmIChu
ZWVkQ29weSkgeworICAgICAgICAvKiBQYW5nbyBkb2Vzbid0IGNvcnJlY3RseSBoYW5kbGUgbnVs
cy4gIFdlIGNvbnZlcnQgdGhlbSB0byAweGZmLiAqLworICAgICAgICAvKiBBbHNvICJ2YWxpZGF0
ZSIgVVRGLTE2IHRleHQgdG8gbWFrZSBzdXJlIGNvbnZlcnNpb24gZG9lc24ndCBmYWlsLiAqLwor
CisgICAgICAgIGNvcGllZFN0cmluZy5zZXQoc3RhdGljX2Nhc3Q8VUNoYXIqPihnX21lbWR1cChh
VGV4dCwgYUxlbmd0aCAqIHNpemVvZihhVGV4dFswXSkpKSk7CisgICAgICAgIFVDaGFyKiBwID0g
Y29waWVkU3RyaW5nLmdldCgpOworCisgICAgICAgIC8qIGRvbid0IG5lZWQgdG8gcmVzZXQgaSAq
LworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFMZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgaWYgKCFwW2ldIHx8IElTX0xPV19TVVJST0dBVEUocFtpXSkpCisgICAgICAgICAgICAgICAg
cFtpXSA9IDB4RkZGRDsKKyAgICAgICAgICAgIGVsc2UgaWYgKElTX0hJR0hfU1VSUk9HQVRFKHBb
aV0pKSB7CisgICAgICAgICAgICAgICAgaWYgKGkgPCBhTGVuZ3RoIC0gMSAmJiBJU19MT1dfU1VS
Uk9HQVRFKGFUZXh0W2krMV0pKQorICAgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwW2ldID0gMHhGRkZEOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgYVRleHQgPSBwOworICAgIH0KKworICAgIGdjaGFy
KiB1dGY4VGV4dDsKKyAgICBnbG9uZyBpdGVtc1dyaXR0ZW47CisgICAgdXRmOFRleHQgPSBnX3V0
ZjE2X3RvX3V0Zjgoc3RhdGljX2Nhc3Q8Y29uc3QgZ3VuaWNoYXIyKj4oYVRleHQpLCBhTGVuZ3Ro
LCAwLCAmaXRlbXNXcml0dGVuLCAwKTsKKyAgICBsZW5ndGggPSBpdGVtc1dyaXR0ZW47CisKKyAg
ICByZXR1cm4gdXRmOFRleHQ7Cit9CisKK3N0YXRpYyBnY2hhciogY29udmVydFVuaUNoYXJUb1VU
RjgoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGdpbnQgbGVuZ3RoLCBpbnQgZnJvbSwgaW50IHRv
KQoreworICAgIGdpbnQgbmV3TGVuZ3RoID0gMDsKKyAgICBHT3duUHRyPGdjaGFyPiB1dGY4VGV4
dCh1dGYxNlRvVXRmOChjaGFyYWN0ZXJzLCBsZW5ndGgsIG5ld0xlbmd0aCkpOworICAgIGlmICgh
dXRmOFRleHQpCisgICAgICAgIHJldHVybiAwOworCisgICAgZ2NoYXIqIHBvcyA9IHV0ZjhUZXh0
LmdldCgpOworICAgIGlmIChmcm9tID4gMCkgeworICAgICAgICAvLyBkaXNjYXJkIHRoZSBmaXJz
dCAnZnJvbScgY2hhcmFjdGVycworICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGRvIHRoaXMg
YmVmb3JlIHRoZSBjb252ZXJzaW9uIHByb2JhYmx5CisgICAgICAgIHBvcyA9IGdfdXRmOF9vZmZz
ZXRfdG9fcG9pbnRlcih1dGY4VGV4dC5nZXQoKSwgZnJvbSk7CisgICAgfQorCisgICAgZ2ludCBs
ZW4gPSBzdHJsZW4ocG9zKTsKKyAgICBHU3RyaW5nKiByZXQgPSBnX3N0cmluZ19uZXdfbGVuKE5V
TEwsIGxlbik7CisKKyAgICAvLyByZXBsYWNlIGxpbmUgYnJlYWsgYnkgc3BhY2UKKyAgICB3aGls
ZSAobGVuID4gMCkgeworICAgICAgICBnaW50IGluZGV4LCBzdGFydDsKKyAgICAgICAgcGFuZ29f
ZmluZF9wYXJhZ3JhcGhfYm91bmRhcnkocG9zLCBsZW4sICZpbmRleCwgJnN0YXJ0KTsKKyAgICAg
ICAgZ19zdHJpbmdfYXBwZW5kX2xlbihyZXQsIHBvcywgaW5kZXgpOworICAgICAgICBpZiAoaW5k
ZXggPT0gc3RhcnQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZ19zdHJpbmdfYXBwZW5k
X2MocmV0LCAnICcpOworICAgICAgICBwb3MgKz0gc3RhcnQ7CisgICAgICAgIGxlbiAtPSBzdGFy
dDsKKyAgICB9CisgICAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUocmV0LCBGQUxTRSk7Cit9CisKK3N0
YXRpYyB2b2lkIHNldFBhbmdvQXR0cmlidXRlcyhjb25zdCBGb250KiBmb250LCBjb25zdCBUZXh0
UnVuJiBydW4sIFBhbmdvTGF5b3V0KiBsYXlvdXQpCit7CisjaWYgVVNFKEZSRUVUWVBFKQorICAg
IGlmIChmb250LT5wcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5tX3BhdHRlcm4pIHsKKyAg
ICAgICAgUGFuZ29Gb250RGVzY3JpcHRpb24qIGRlc2MgPSBwYW5nb19mY19mb250X2Rlc2NyaXB0
aW9uX2Zyb21fcGF0dGVybihmb250LT5wcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5tX3Bh
dHRlcm4uZ2V0KCksIEZBTFNFKTsKKyAgICAgICAgcGFuZ29fbGF5b3V0X3NldF9mb250X2Rlc2Ny
aXB0aW9uKGxheW91dCwgZGVzYyk7CisgICAgICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJl
ZShkZXNjKTsKKyAgICB9CisjZWxpZiBVU0UoUEFOR08pCisgICAgaWYgKGZvbnQtPnByaW1hcnlG
b250KCktPnBsYXRmb3JtRGF0YSgpLm1fZm9udCkgeworICAgICAgICBQYW5nb0ZvbnREZXNjcmlw
dGlvbiogZGVzYyA9IHBhbmdvX2ZvbnRfZGVzY3JpYmUoZm9udC0+cHJpbWFyeUZvbnQoKS0+cGxh
dGZvcm1EYXRhKCkubV9mb250KTsKKyAgICAgICAgcGFuZ29fbGF5b3V0X3NldF9mb250X2Rlc2Ny
aXB0aW9uKGxheW91dCwgZGVzYyk7CisgICAgICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJl
ZShkZXNjKTsKKyAgICB9CisjZW5kaWYKKworICAgIHBhbmdvX2xheW91dF9zZXRfYXV0b19kaXIo
bGF5b3V0LCBGQUxTRSk7CisKKyAgICBQYW5nb0NvbnRleHQqIHBhbmdvQ29udGV4dCA9IHBhbmdv
X2xheW91dF9nZXRfY29udGV4dChsYXlvdXQpOworICAgIFBhbmdvRGlyZWN0aW9uIGRpcmVjdGlv
biA9IHJ1bi5ydGwoKSA/IFBBTkdPX0RJUkVDVElPTl9SVEwgOiBQQU5HT19ESVJFQ1RJT05fTFRS
OworICAgIHBhbmdvX2NvbnRleHRfc2V0X2Jhc2VfZGlyKHBhbmdvQ29udGV4dCwgZGlyZWN0aW9u
KTsKKyAgICBQYW5nb0F0dHJMaXN0KiBsaXN0ID0gcGFuZ29fYXR0cl9saXN0X25ldygpOworICAg
IFBhbmdvQXR0cmlidXRlKiBhdHRyOworCisgICAgYXR0ciA9IHBhbmdvX2F0dHJfc2l6ZV9uZXdf
YWJzb2x1dGUoZm9udC0+cGl4ZWxTaXplKCkgKiBQQU5HT19TQ0FMRSk7CisgICAgYXR0ci0+ZW5k
X2luZGV4ID0gR19NQVhVSU5UOworICAgIHBhbmdvX2F0dHJfbGlzdF9pbnNlcnRfYmVmb3JlKGxp
c3QsIGF0dHIpOworCisgICAgaWYgKCFydW4uc3BhY2luZ0Rpc2FibGVkKCkpIHsKKyAgICAgICAg
YXR0ciA9IHBhbmdvX2F0dHJfbGV0dGVyX3NwYWNpbmdfbmV3KGZvbnQtPmxldHRlclNwYWNpbmco
KSAqIFBBTkdPX1NDQUxFKTsKKyAgICAgICAgYXR0ci0+ZW5kX2luZGV4ID0gR19NQVhVSU5UOwor
ICAgICAgICBwYW5nb19hdHRyX2xpc3RfaW5zZXJ0X2JlZm9yZShsaXN0LCBhdHRyKTsKKyAgICB9
CisKKyAgICAvLyBQYW5nbyBkb2VzIG5vdCB5ZXQgc3VwcG9ydCBzeW50aGVzaXNpbmcgc21hbGwg
Y2FwcworICAgIC8vIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTYxMAorCisgICAgcGFuZ29fbGF5b3V0X3NldF9hdHRyaWJ1dGVzKGxheW91dCwgbGlzdCk7Cisg
ICAgcGFuZ29fYXR0cl9saXN0X3VucmVmKGxpc3QpOworfQorCitib29sIEZvbnQ6OmNhblJldHVy
bkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIEZvbnQ6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCkKK3sK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGRyYXdHbHlwaHNTaGFkb3coR3Jh
cGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBQ
YW5nb0xheW91dExpbmUqIGxheW91dExpbmUsIFBhbmdvUmVnaW9uVHlwZSByZW5kZXJSZWdpb24p
Cit7CisgICAgU2hhZG93Qmx1ciYgc2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+c2hhZG93Qmx1cigpOworCisgICAgaWYgKCEoZ3JhcGhpY3NDb250ZXh0LT50ZXh0
RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlRmlsbCkgfHwgc2hhZG93LnR5cGUoKSA9PSBTaGFkb3dC
bHVyOjpOb1NoYWRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgRmxvYXRQb2ludCB0b3RhbE9m
ZnNldChwb2ludCArIGdyYXBoaWNzQ29udGV4dC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQpOworCisg
ICAgLy8gT3B0aW1pemUgbm9uLWJsdXJyeSBzaGFkb3dzLCBieSBqdXN0IGRyYXdpbmcgdGV4dCB3
aXRob3V0IHRoZSBTaGFkb3dCbHVyLgorICAgIGlmICghc2hhZG93Lm11c3RVc2VTaGFkb3dCbHVy
KGdyYXBoaWNzQ29udGV4dCkpIHsKKyAgICAgICAgY2Fpcm9fdCogY29udGV4dCA9IGdyYXBoaWNz
Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CisgICAgICAgIGNhaXJvX3NhdmUoY29u
dGV4dCk7CisgICAgICAgIGNhaXJvX3RyYW5zbGF0ZShjb250ZXh0LCB0b3RhbE9mZnNldC54KCks
IHRvdGFsT2Zmc2V0LnkoKSk7CisKKyAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjb250
ZXh0LCBncmFwaGljc0NvbnRleHQtPnN0YXRlKCkuc2hhZG93Q29sb3IpOworICAgICAgICBnZGtf
Y2Fpcm9fcmVnaW9uKGNvbnRleHQsIHJlbmRlclJlZ2lvbik7CisgICAgICAgIGNhaXJvX2NsaXAo
Y29udGV4dCk7CisgICAgICAgIHBhbmdvX2NhaXJvX3Nob3dfbGF5b3V0X2xpbmUoY29udGV4dCwg
bGF5b3V0TGluZSk7CisKKyAgICAgICAgY2Fpcm9fcmVzdG9yZShjb250ZXh0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEZsb2F0UmVjdCBleHRlbnRzKGdldFBhbmdvUmVnaW9uRXh0
ZW50cyhyZW5kZXJSZWdpb24pKTsKKyAgICBleHRlbnRzLnNldExvY2F0aW9uKEZsb2F0UG9pbnQo
cG9pbnQueCgpLCBwb2ludC55KCkgLSBleHRlbnRzLmhlaWdodCgpKSk7CisgICAgaWYgKEdyYXBo
aWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IHNoYWRvdy5iZWdpblNoYWRvd0xheWVyKGdyYXBo
aWNzQ29udGV4dCwgZXh0ZW50cykpIHsKKyAgICAgICAgY2Fpcm9fdCogY2Fpcm9TaGFkb3dDb250
ZXh0ID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CisgICAgICAgIGNh
aXJvX3RyYW5zbGF0ZShjYWlyb1NoYWRvd0NvbnRleHQsIHBvaW50LngoKSwgcG9pbnQueSgpKTsK
KyAgICAgICAgcGFuZ29fY2Fpcm9fc2hvd19sYXlvdXRfbGluZShjYWlyb1NoYWRvd0NvbnRleHQs
IGxheW91dExpbmUpOworCisgICAgICAgIC8vIFdlIG5lZWQgdGhlIGNsaXBwaW5nIHJlZ2lvbiB0
byBiZSBhY3RpdmUgd2hlbiB3ZSBibGl0IHRoZSBibHVycmVkIHNoYWRvdyBiYWNrLAorICAgICAg
ICAvLyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgYW55IGJpdHMgYW5kIHBpZWNlcyBvZiBjaGFyYWN0
ZXJzIG91dCBvZiByYW5nZSB0byBiZQorICAgICAgICAvLyBkcmF3bi4gU2luY2UgU2hhZG93Qmx1
ciBleHBlY3RzIGEgY29uc2lzdGVudCB0cmFuc2Zvcm0sIHdlIGhhdmUgdG8gdW5kbyB0aGUKKyAg
ICAgICAgLy8gdHJhbnNsYXRpb24gYmVmb3JlIGNhbGxpbmcgZW5kU2hhZG93TGF5ZXIgYXMgd2Vs
bC4KKyAgICAgICAgY2Fpcm9fdCogY29udGV4dCA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCktPmNyKCk7CisgICAgICAgIGNhaXJvX3NhdmUoY29udGV4dCk7CisgICAgICAgIGNh
aXJvX3RyYW5zbGF0ZShjb250ZXh0LCB0b3RhbE9mZnNldC54KCksIHRvdGFsT2Zmc2V0LnkoKSk7
CisgICAgICAgIGdka19jYWlyb19yZWdpb24oY29udGV4dCwgcmVuZGVyUmVnaW9uKTsKKyAgICAg
ICAgY2Fpcm9fY2xpcChjb250ZXh0KTsKKyAgICAgICAgY2Fpcm9fdHJhbnNsYXRlKGNvbnRleHQs
IC10b3RhbE9mZnNldC54KCksIC10b3RhbE9mZnNldC55KCkpOworCisgICAgICAgIHNoYWRvdy5l
bmRTaGFkb3dMYXllcihncmFwaGljc0NvbnRleHQpOworICAgICAgICBjYWlyb19yZXN0b3JlKGNv
bnRleHQpOworICAgIH0KK30KKwordm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAoreworI2lmIFVTRShGUkVFVFlQRSkKKyAgICBp
ZiAoIXByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpLm1fcGF0dGVybikgeworICAgICAgICBk
cmF3U2ltcGxlVGV4dChjb250ZXh0LCBydW4sIHBvaW50LCBmcm9tLCB0byk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCktPmNyKCk7CisgICAgUGFuZ29MYXlvdXQqIGxheW91dCA9IHBhbmdvX2NhaXJv
X2NyZWF0ZV9sYXlvdXQoY3IpOworICAgIHNldFBhbmdvQXR0cmlidXRlcyh0aGlzLCBydW4sIGxh
eW91dCk7CisKKyAgICBnY2hhciogdXRmOCA9IGNvbnZlcnRVbmlDaGFyVG9VVEY4KHJ1bi5jaGFy
YWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSwgMCwgcnVuLmxlbmd0aCgpKTsKKyAgICBwYW5nb19sYXlv
dXRfc2V0X3RleHQobGF5b3V0LCB1dGY4LCAtMSk7CisKKyAgICAvLyBPdXIgbGF5b3V0cyBhcmUg
c2luZ2xlIGxpbmUKKyAgICBQYW5nb0xheW91dExpbmUqIGxheW91dExpbmUgPSBwYW5nb19sYXlv
dXRfZ2V0X2xpbmVfcmVhZG9ubHkobGF5b3V0LCAwKTsKKworICAgIC8vIEdldCB0aGUgcmVnaW9u
IHdoZXJlIHRoaXMgdGV4dCB3aWxsIGJlIGxhaWQgb3V0LiBXZSB3aWxsIHVzZSBpdCB0byBjbGlw
CisgICAgLy8gdGhlIENhaXJvIGNvbnRleHQsIGZvciB3aGVuIHdlIGFyZSBvbmx5IHBhaW50aW5n
IHBhcnQgb2YgdGhlIHRleHQgcnVuIGFuZAorICAgIC8vIHRvIGNhbGN1bGF0ZSB0aGUgc2l6ZSBv
ZiB0aGUgc2hhZG93IGJ1ZmZlci4KKyAgICBQYW5nb1JlZ2lvblR5cGUgcGFydGlhbFJlZ2lvbiA9
IDA7CisgICAgY2hhciogc3RhcnQgPSBnX3V0Zjhfb2Zmc2V0X3RvX3BvaW50ZXIodXRmOCwgZnJv
bSk7CisgICAgY2hhciogZW5kID0gZ191dGY4X29mZnNldF90b19wb2ludGVyKHN0YXJ0LCB0byAt
IGZyb20pOworICAgIGludCByYW5nZXNbXSA9IHtzdGFydCAtIHV0ZjgsIGVuZCAtIHV0Zjh9Owor
ICAgIHBhcnRpYWxSZWdpb24gPSBnZGtfcGFuZ29fbGF5b3V0X2xpbmVfZ2V0X2NsaXBfcmVnaW9u
KGxheW91dExpbmUsIDAsIDAsIHJhbmdlcywgMSk7CisKKyAgICBkcmF3R2x5cGhzU2hhZG93KGNv
bnRleHQsIHBvaW50LCBsYXlvdXRMaW5lLCBwYXJ0aWFsUmVnaW9uKTsKKworICAgIGNhaXJvX3Nh
dmUoY3IpOworICAgIGNhaXJvX3RyYW5zbGF0ZShjciwgcG9pbnQueCgpLCBwb2ludC55KCkpOwor
CisgICAgZmxvYXQgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7CisgICAgY29udGV4dC0+ZmlsbENv
bG9yKCkuZ2V0UkdCQShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CisgICAgY2Fpcm9fc2V0X3Nv
dXJjZV9yZ2JhKGNyLCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CisgICAgZ2RrX2NhaXJvX3Jl
Z2lvbihjciwgcGFydGlhbFJlZ2lvbik7CisgICAgY2Fpcm9fY2xpcChjcik7CisKKyAgICBwYW5n
b19jYWlyb19zaG93X2xheW91dF9saW5lKGNyLCBsYXlvdXRMaW5lKTsKKworICAgIGlmIChjb250
ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ryb2tlKSB7CisgICAgICAgIENvbG9y
IHN0cm9rZUNvbG9yID0gY29udGV4dC0+c3Ryb2tlQ29sb3IoKTsKKyAgICAgICAgc3Ryb2tlQ29s
b3IuZ2V0UkdCQShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CisgICAgICAgIGNhaXJvX3NldF9z
b3VyY2VfcmdiYShjciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgICAgICBwYW5nb19j
YWlyb19sYXlvdXRfbGluZV9wYXRoKGNyLCBsYXlvdXRMaW5lKTsKKyAgICAgICAgY2Fpcm9fc2V0
X2xpbmVfd2lkdGgoY3IsIGNvbnRleHQtPnN0cm9rZVRoaWNrbmVzcygpKTsKKyAgICAgICAgY2Fp
cm9fc3Ryb2tlKGNyKTsKKyAgICB9CisKKyAgICAvLyBQYW5nbyBzb21ldGltZXMgbGVhdmVzIGJl
aGluZCBwYXRocyB3ZSBkb24ndCB3YW50CisgICAgY2Fpcm9fbmV3X3BhdGgoY3IpOworCisgICAg
ZGVzdHJveVBhbmdvUmVnaW9uKHBhcnRpYWxSZWdpb24pOworICAgIGdfZnJlZSh1dGY4KTsKKyAg
ICBnX29iamVjdF91bnJlZihsYXlvdXQpOworCisgICAgY2Fpcm9fcmVzdG9yZShjcik7Cit9CisK
K3ZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRl
eHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWlj
U3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8q
IGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCisvLyBXZSBzaG91bGQgY3JlYXRlIHRoZSBsYXlvdXQgd2l0aCBvdXIgYWN0dWFsIGNvbnRl
eHQgYnV0IHdlIGNhbid0IGFjY2VzcyBpdCBmcm9tIGhlcmUuCitzdGF0aWMgUGFuZ29MYXlvdXQq
IGdldERlZmF1bHRQYW5nb0xheW91dChjb25zdCBUZXh0UnVuJiBydW4pCit7CisgICAgc3RhdGlj
IFBhbmdvRm9udE1hcCogbWFwID0gcGFuZ29fY2Fpcm9fZm9udF9tYXBfZ2V0X2RlZmF1bHQoKTsK
KyNpZiBQQU5HT19WRVJTSU9OX0NIRUNLKDEsIDIxLCA1KQorICAgIHN0YXRpYyBQYW5nb0NvbnRl
eHQqIHBhbmdvQ29udGV4dCA9IHBhbmdvX2ZvbnRfbWFwX2NyZWF0ZV9jb250ZXh0KG1hcCk7Cisj
ZWxzZQorICAgIC8vIERlcHJlY2F0ZWQgaW4gUGFuZ28gMS4yMS4KKyAgICBzdGF0aWMgUGFuZ29D
b250ZXh0KiBwYW5nb0NvbnRleHQgPSBwYW5nb19jYWlyb19mb250X21hcF9jcmVhdGVfY29udGV4
dChQQU5HT19DQUlST19GT05UX01BUChtYXApKTsKKyNlbmRpZgorICAgIFBhbmdvTGF5b3V0KiBs
YXlvdXQgPSBwYW5nb19sYXlvdXRfbmV3KHBhbmdvQ29udGV4dCk7CisKKyAgICByZXR1cm4gbGF5
b3V0OworfQorCitmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMs
IEdseXBoT3ZlcmZsb3cqIG92ZXJmbG93KSBjb25zdAoreworI2lmIFVTRShGUkVFVFlQRSkKKyAg
ICBpZiAoIXByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpLm1fcGF0dGVybikKKyAgICAgICAg
cmV0dXJuIGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KHJ1biwgMCwgZmFsbGJhY2tGb250cywgb3Zl
cmZsb3cpOworI2VuZGlmCisKKyAgICBpZiAoIXJ1bi5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJu
IDAuMGY7CisKKyAgICBQYW5nb0xheW91dCogbGF5b3V0ID0gZ2V0RGVmYXVsdFBhbmdvTGF5b3V0
KHJ1bik7CisgICAgc2V0UGFuZ29BdHRyaWJ1dGVzKHRoaXMsIHJ1biwgbGF5b3V0KTsKKworICAg
IGdjaGFyKiB1dGY4ID0gY29udmVydFVuaUNoYXJUb1VURjgocnVuLmNoYXJhY3RlcnMoKSwgcnVu
Lmxlbmd0aCgpLCAwLCBydW4ubGVuZ3RoKCkpOworICAgIHBhbmdvX2xheW91dF9zZXRfdGV4dChs
YXlvdXQsIHV0ZjgsIC0xKTsKKworICAgIGludCB3aWR0aDsKKyAgICBwYW5nb19sYXlvdXRfZ2V0
X3BpeGVsX3NpemUobGF5b3V0LCAmd2lkdGgsIDApOworCisgICAgZ19mcmVlKHV0ZjgpOworICAg
IGdfb2JqZWN0X3VucmVmKGxheW91dCk7CisKKyAgICByZXR1cm4gd2lkdGg7Cit9CisKK2ludCBG
b250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
ZmxvYXQgeEZsb2F0LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAoreworI2lmIFVT
RShGUkVFVFlQRSkKKyAgICBpZiAoIXByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpLm1fcGF0
dGVybikKKyAgICAgICAgcmV0dXJuIG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChydW4s
IHhGbG9hdCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOworI2VuZGlmCisgICAgLy8gRklYTUU6IFRo
aXMgdHJ1bmNhdGlvbiBpcyBub3QgYSBwcm9ibGVtIGZvciBIVE1MLCBidXQgb25seSBhZmZlY3Rz
IFNWRywgd2hpY2ggcGFzc2VzIGZsb2F0aW5nLXBvaW50IG51bWJlcnMKKyAgICAvLyB0byBGb250
OjpvZmZzZXRGb3JQb3NpdGlvbigpLiBCdWcgaHR0cDovL3dlYmtpdC5vcmcvYi80MDY3MyB0cmFj
a3MgZml4aW5nIHRoaXMgcHJvYmxlbS4KKyAgICBpbnQgeCA9IHN0YXRpY19jYXN0PGludD4oeEZs
b2F0KTsKKworICAgIFBhbmdvTGF5b3V0KiBsYXlvdXQgPSBnZXREZWZhdWx0UGFuZ29MYXlvdXQo
cnVuKTsKKyAgICBzZXRQYW5nb0F0dHJpYnV0ZXModGhpcywgcnVuLCBsYXlvdXQpOworCisgICAg
Z2NoYXIqIHV0ZjggPSBjb252ZXJ0VW5pQ2hhclRvVVRGOChydW4uY2hhcmFjdGVycygpLCBydW4u
bGVuZ3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7CisgICAgcGFuZ29fbGF5b3V0X3NldF90ZXh0KGxh
eW91dCwgdXRmOCwgLTEpOworCisgICAgaW50IGluZGV4LCB0cmFpbGluZzsKKyAgICBwYW5nb19s
YXlvdXRfeHlfdG9faW5kZXgobGF5b3V0LCB4ICogUEFOR09fU0NBTEUsIDEsICZpbmRleCwgJnRy
YWlsaW5nKTsKKyAgICBnbG9uZyBvZmZzZXQgPSBnX3V0ZjhfcG9pbnRlcl90b19vZmZzZXQodXRm
OCwgdXRmOCArIGluZGV4KTsKKyAgICBpZiAoaW5jbHVkZVBhcnRpYWxHbHlwaHMpCisgICAgICAg
IG9mZnNldCArPSB0cmFpbGluZzsKKworICAgIGdfZnJlZSh1dGY4KTsKKyAgICBnX29iamVjdF91
bnJlZihsYXlvdXQpOworCisgICAgcmV0dXJuIG9mZnNldDsKK30KKworRmxvYXRSZWN0IEZvbnQ6
OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3sKKyNpZiBV
U0UoRlJFRVRZUEUpCisgICAgaWYgKCFwcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5tX3Bh
dHRlcm4pCisgICAgICAgIHJldHVybiBzZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChydW4sIHBv
aW50LCBoLCBmcm9tLCB0byk7CisjZW5kaWYKKworICAgIFBhbmdvTGF5b3V0KiBsYXlvdXQgPSBn
ZXREZWZhdWx0UGFuZ29MYXlvdXQocnVuKTsKKyAgICBzZXRQYW5nb0F0dHJpYnV0ZXModGhpcywg
cnVuLCBsYXlvdXQpOworCisgICAgZ2NoYXIqIHV0ZjggPSBjb252ZXJ0VW5pQ2hhclRvVVRGOChy
dW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7CisgICAgcGFu
Z29fbGF5b3V0X3NldF90ZXh0KGxheW91dCwgdXRmOCwgLTEpOworCisgICAgY2hhciogc3RhcnQg
PSBnX3V0Zjhfb2Zmc2V0X3RvX3BvaW50ZXIodXRmOCwgZnJvbSk7CisgICAgY2hhciogZW5kID0g
Z191dGY4X29mZnNldF90b19wb2ludGVyKHN0YXJ0LCB0byAtIGZyb20pOworCisgICAgaWYgKHJ1
bi5sdHIoKSkgeworICAgICAgICBmcm9tID0gc3RhcnQgLSB1dGY4OworICAgICAgICB0byA9IGVu
ZCAtIHV0Zjg7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZnJvbSA9IGVuZCAtIHV0Zjg7CisgICAg
ICAgIHRvID0gc3RhcnQgLSB1dGY4OworICAgIH0KKworICAgIFBhbmdvTGF5b3V0TGluZSogbGF5
b3V0TGluZSA9IHBhbmdvX2xheW91dF9nZXRfbGluZV9yZWFkb25seShsYXlvdXQsIDApOworICAg
IGludCB4UG9zOworCisgICAgeFBvcyA9IDA7CisgICAgaWYgKGZyb20gPCBsYXlvdXRMaW5lLT5s
ZW5ndGgpCisgICAgICAgIHBhbmdvX2xheW91dF9saW5lX2luZGV4X3RvX3gobGF5b3V0TGluZSwg
ZnJvbSwgRkFMU0UsICZ4UG9zKTsKKyAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IFBBTkdPX1BJWEVM
U19GTE9PUih4UG9zKTsKKworICAgIHhQb3MgPSAwOworICAgIGlmIChydW4ubHRyKCkgfHwgdG8g
PCBsYXlvdXRMaW5lLT5sZW5ndGgpCisgICAgICAgIHBhbmdvX2xheW91dF9saW5lX2luZGV4X3Rv
X3gobGF5b3V0TGluZSwgdG8sIEZBTFNFLCAmeFBvcyk7CisgICAgZmxvYXQgYWZ0ZXJXaWR0aCA9
IFBBTkdPX1BJWEVMUyh4UG9zKTsKKworICAgIGdfZnJlZSh1dGY4KTsKKyAgICBnX29iamVjdF91
bnJlZihsYXlvdXQpOworCisgICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54KCkgKyBiZWZvcmVX
aWR0aCwgcG9pbnQueSgpLCBhZnRlcldpZHRoIC0gYmVmb3JlV2lkdGgsIGgpOworfQorCit9Cg==
</data>
<flag name="review"
          id="102951"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106505</attachid>
            <date>2011-09-06 15:43:20 -0700</date>
            <delta_ts>2011-09-09 16:13:19 -0700</delta_ts>
            <desc>Make EFL build use the right file</desc>
            <filename>webkit-patch2.patch</filename>
            <type>text/plain</type>
            <size>1900</size>
            <attacher name="Rafael Antognolli">antognolli+webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHNFZmwudHh0IGIvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKaW5kZXggZmVlZWE2ZC4uYzhhYThmZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0c0VmbC50eHQKQEAgLTU1LDcgKzU1LDYgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCiAgIHBsYXRmb3JtL2VmbC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCiAgIHBsYXRmb3Jt
L2VmbC9XaWRnZXRFZmwuY3BwCiAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAot
ICBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvRm9udEVmbC5jcHAKICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWZsL0dyYXBoaWNzTGF5ZXJFZmwuY3BwCiAgIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9JY29uRWZs
LmNwcAogICBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvSW1hZ2VFZmwuY3BwCkBAIC0xMDksNiArMTA4
LDcgQEAgSUYgKFdURl9VU0VfQ0FJUk8pCiAgICAgKQogICAgIExJU1QoQVBQRU5EIFdlYkNvcmVf
U09VUkNFUwogICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCisgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvRm9udEVmbC5jcHAKICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAogICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZnJlZXR5cGUvRm9udEN1c3RvbVBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcAogICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcApAQCAt
MTIzLDYgKzEyMyw3IEBAIElGIChXVEZfVVNFX0NBSVJPKQogICAgICAgJHtQYW5nb19JTkNMVURF
X0RJUlN9CiAgICAgKQogICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBhbmdvLmNwcAogICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvcGFuZ28vRm9udENhY2hlUGFuZ28uY3BwCiAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9wYW5n
by9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhUGFuZ28uY3BwCiAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9wYW5nby9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDg4MjJjZC4u
MWI1YmUyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTA5LTA2ICBSYWZhZWwg
QW50b2dub2xsaSAgPGFudG9nbm9sbGlAcHJvZnVzaW9uLm1vYmk+CisKKyAgICAgICAgTWFrZSB0
aGUgRUZMIHBvcnQgdXNlIHRoZSBjb3JyZWN0IHJlbmRlcmluZyBmaWxlLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYzMjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIGNvbXBpbGluZyB3aXRoIFBh
bmdvIHN1cHBvcnQsIHRoZSBFRkwgcG9ydCBzaG91bGQgdXNlCisgICAgICAgIEZvbnRQYW5nby5j
cHAgaW5zdGVhZCBvZiBGb250RWZsLmNwcCAod2hpY2ggaXMganVzdCBmdWxsIG9mIHN0dWJzKS4K
KworICAgICAgICBObyBuZXcgZnVuY3Rpb25hbGl0eSBzbyBubyBuZXcgdGVzdHMuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzRWZsLnR4dDoKKwogMjAxMS0wOS0wMiAgUmFmYWVsIEFudG9nbm9sbGkg
IDxhbnRvZ25vbGxpQHByb2Z1c2lvbi5tb2JpPgogCiAgICAgICAgIFJlbmFtZSBGb250R3RrLmNw
cCB0byBGb250UGFuZ28uY3BwCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106506</attachid>
            <date>2011-09-06 15:44:22 -0700</date>
            <delta_ts>2011-09-09 08:22:43 -0700</delta_ts>
            <desc>Add replacement functions for gdk ones.</desc>
            <filename>webkit-patch3.patch</filename>
            <type>text/plain</type>
            <size>13775</size>
            <attacher name="Rafael Antognolli">antognolli+webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA2N2YyNjYwLi40YzkwNTYw
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTEtMDktMDYgIFJhZmFlbCBBbnRvZ25vbGxpICA8YW50b2dub2xsaUBwcm9mdXNpb24ubW9i
aT4KKworICAgICAgICBBZGQgcmVwbGFjZW1lbnQgZnVuY3Rpb25zIGZvciBnZGsgb25lcy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MzIzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2UvY21h
a2UvRmluZFBhbmdvLmNtYWtlOgorCiAyMDExLTA5LTA2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjk0Mjc0KTogRm9ybU1hbmFnZXJUZXN0
LlByZXZpZXdGb3JtIGFuZCBGaWxsRm9ybU5vbkVtcHR5RmllbGQgZmFpbCBvbiBjaHJvbWl1bQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0c0VmbC50eHQgYi9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzRWZsLnR4dAppbmRleCBjOGFhOGZlLi4wNTRiNGYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzRWZsLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzRWZsLnR4dApAQCAtMTI5LDkgKzEyOSwxMSBAQCBJRiAoV1RGX1VTRV9DQUlSTykK
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5jcHAK
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0dseXBoUGFnZVRyZWVOb2RlUGFuZ28uY3Bw
CiAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9TaW1wbGVGb250RGF0YVBhbmdvLmNwcAor
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vUGFuZ29VdGlsaXRpZXMuY3BwCiAgICAgKQog
ICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCi0gICAgICAke1BhbmdvX0xJQlJBUklF
U30KKyAgICAgICR7UGFuZ29fTElCUkFSWX0KKyAgICAgICR7UGFuZ29fQ2Fpcm9fTElCUkFSWX0K
ICAgICApCiAgIEVORElGICgpCiBFTkRJRiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDFiNWJlMjguLjk0MTYx
NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNiArMSwzMCBAQAogMjAxMS0wOS0wNiAgUmFmYWVsIEFudG9n
bm9sbGkgIDxhbnRvZ25vbGxpQHByb2Z1c2lvbi5tb2JpPgogCisgICAgICAgIEFkZCByZXBsYWNl
bWVudCBmdW5jdGlvbnMgZm9yIGdkayBvbmVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYzMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIHdpbGwgYWxsb3cgdGhlIEVGTCBwb3J0IHRvIGRvbid0
IGRlcGVuZCBvbiBnZGsgYW55bW9yZS4KKworICAgICAgICBObyBuZXcgZnVuY3Rpb25hbGl0eSBz
byBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzRWZsLnR4dDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjphcHBlbmRSZWdpb25Ub0NhaXJvQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9wYW5nby9Gb250UGFuZ28uY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0dseXBoc1No
YWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3Q29tcGxleFRleHQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1BhbmdvVXRpbGl0aWVzLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpnZXRMaW5lQ2xpcFJlZ2lvbkZyb21MYXlvdXRJdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmdldENsaXBSZWdpb25Gcm9tUGFuZ29MYXlvdXRMaW5lKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9QYW5nb1V0aWxpdGllcy5oOiBBZGRlZC4KKworMjAx
MS0wOS0wNiAgUmFmYWVsIEFudG9nbm9sbGkgIDxhbnRvZ25vbGxpQHByb2Z1c2lvbi5tb2JpPgor
CiAgICAgICAgIE1ha2UgdGhlIEVGTCBwb3J0IHVzZSB0aGUgY29ycmVjdCByZW5kZXJpbmcgZmls
ZS4KKwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYz
MjMKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNw
cAppbmRleCBiNGFkYjZjLi4zNDg3ZjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0
IChDKSAyMDExIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTgwLDYgKzgxLDE5IEBAIHZvaWQgYXBwZW5kV2ViQ29yZVBhdGhUb0Nh
aXJvQ29udGV4dChjYWlyb190KiBjb250ZXh0LCBjb25zdCBQYXRoJiBwYXRoKQogICAgIGFwcGVu
ZFBhdGhUb0NhaXJvQ29udGV4dChjb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpLT5jb250ZXh0
KCkpOwogfQogCit2b2lkIGFwcGVuZFJlZ2lvblRvQ2Fpcm9Db250ZXh0KGNhaXJvX3QqIHRvLCBj
b25zdCBjYWlyb19yZWdpb25fdCogcmVnaW9uKQoreworICAgIGlmICghcmVnaW9uKQorICAgICAg
ICByZXR1cm47CisKKyAgICBjb25zdCBpbnQgbkJveGVzID0gY2Fpcm9fcmVnaW9uX251bV9yZWN0
YW5nbGVzKHJlZ2lvbik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuQm94ZXM7ICsraSkgewor
ICAgICAgICBjYWlyb19yZWN0YW5nbGVfaW50X3QgYm94OworICAgICAgICBjYWlyb19yZWdpb25f
Z2V0X3JlY3RhbmdsZShyZWdpb24sIGksICZib3gpOworICAgICAgICBjYWlyb19yZWN0YW5nbGUo
dG8sIGJveC54LCBib3gueSwgYm94LndpZHRoLCBib3guaGVpZ2h0KTsKKyAgICB9Cit9CisKIGNh
aXJvX29wZXJhdG9yX3QgdG9DYWlyb09wZXJhdG9yKENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewog
ICAgIHN3aXRjaCAob3ApIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCmluZGV4IDIxMTAwNTAuLjNkNmViNzkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRp
bGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fp
cm9VdGlsaXRpZXMuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
SWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04gZW1iZWRkZWQgc3lz
dGVtcwogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw2ICs0NCw3IEBAIHZv
aWQgc2V0U291cmNlUkdCQUZyb21Db2xvcihjYWlyb190KiwgY29uc3QgQ29sb3ImKTsKIHZvaWQg
YXBwZW5kUGF0aFRvQ2Fpcm9Db250ZXh0KGNhaXJvX3QqIHRvLCBjYWlyb190KiBmcm9tKTsKIHZv
aWQgc2V0UGF0aE9uQ2Fpcm9Db250ZXh0KGNhaXJvX3QqIHRvLCBjYWlyb190KiBmcm9tKTsKIHZv
aWQgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChjYWlyb190KiBjb250ZXh0LCBjb25z
dCBQYXRoJiBwYXRoKTsKK3ZvaWQgYXBwZW5kUmVnaW9uVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCos
IGNvbnN0IGNhaXJvX3JlZ2lvbl90Kik7CiBjYWlyb19vcGVyYXRvcl90IHRvQ2Fpcm9PcGVyYXRv
cihDb21wb3NpdGVPcGVyYXRvciBvcCk7CiB2b2lkIGRyYXdQYXR0ZXJuVG9DYWlyb0NvbnRleHQo
Y2Fpcm9fdCogY3IsIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UsIGNvbnN0IEludFNpemUmIGltYWdl
U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjYWlyb19vcGVyYXRvcl90IG9wLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Bh
bmdvL0ZvbnRQYW5nby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5n
by9Gb250UGFuZ28uY3BwCmluZGV4IDUwMDE1OTguLmUxOWUxMWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQYW5nby5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBhbmdvLmNwcApAQCAtNiw2
ICs2LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29t
PgogICogQ29weXJpZ2h0IChDKSAyMDA4IFhhbiBMb3BleiA8eGFuQGdub21lLm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDExIFByb0ZV
U0lPTiBlbWJlZGRlZCBzeXN0ZW1zCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dApAQCAtNDIsMTAgKzQzLDE1IEBACiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIK
ICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDxnZGsv
Z2RrLmg+CiAjaW5jbHVkZSA8cGFuZ28vcGFuZ28uaD4KICNpbmNsdWRlIDxwYW5nby9wYW5nb2Nh
aXJvLmg+CiAKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2Vsc2UK
KyNpbmNsdWRlICJQYW5nb1V0aWxpdGllcy5oIgorI2VuZGlmCisKICNpZiBVU0UoRlJFRVRZUEUp
CiAjaW5jbHVkZSA8cGFuZ28vcGFuZ29mYy1mb250bWFwLmg+CiAjZW5kaWYKQEAgLTIzNCw3ICsy
NDAsMTEgQEAgc3RhdGljIHZvaWQgZHJhd0dseXBoc1NoYWRvdyhHcmFwaGljc0NvbnRleHQqIGdy
YXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYKICAgICAgICAgY2Fpcm9fdHJhbnNsYXRl
KGNvbnRleHQsIHRvdGFsT2Zmc2V0LngoKSwgdG90YWxPZmZzZXQueSgpKTsKIAogICAgICAgICBz
ZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNvbnRleHQsIGdyYXBoaWNzQ29udGV4dC0+c3RhdGUoKS5z
aGFkb3dDb2xvcik7CisjaWYgUExBVEZPUk0oR1RLKQogICAgICAgICBnZGtfY2Fpcm9fcmVnaW9u
KGNvbnRleHQsIHJlbmRlclJlZ2lvbik7CisjZWxzZQorICAgICAgICBhcHBlbmRSZWdpb25Ub0Nh
aXJvQ29udGV4dChjb250ZXh0LCByZW5kZXJSZWdpb24pOworI2VuZGlmCiAgICAgICAgIGNhaXJv
X2NsaXAoY29udGV4dCk7CiAgICAgICAgIHBhbmdvX2NhaXJvX3Nob3dfbGF5b3V0X2xpbmUoY29u
dGV4dCwgbGF5b3V0TGluZSk7CiAKQEAgLTI1Niw3ICsyNjYsMTEgQEAgc3RhdGljIHZvaWQgZHJh
d0dseXBoc1NoYWRvdyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxv
YXRQb2ludCYKICAgICAgICAgY2Fpcm9fdCogY29udGV4dCA9IGdyYXBoaWNzQ29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCktPmNyKCk7CiAgICAgICAgIGNhaXJvX3NhdmUoY29udGV4dCk7CiAgICAg
ICAgIGNhaXJvX3RyYW5zbGF0ZShjb250ZXh0LCB0b3RhbE9mZnNldC54KCksIHRvdGFsT2Zmc2V0
LnkoKSk7CisjaWYgUExBVEZPUk0oR1RLKQogICAgICAgICBnZGtfY2Fpcm9fcmVnaW9uKGNvbnRl
eHQsIHJlbmRlclJlZ2lvbik7CisjZWxzZQorICAgICAgICBhcHBlbmRSZWdpb25Ub0NhaXJvQ29u
dGV4dChjb250ZXh0LCByZW5kZXJSZWdpb24pOworI2VuZGlmCiAgICAgICAgIGNhaXJvX2NsaXAo
Y29udGV4dCk7CiAgICAgICAgIGNhaXJvX3RyYW5zbGF0ZShjb250ZXh0LCAtdG90YWxPZmZzZXQu
eCgpLCAtdG90YWxPZmZzZXQueSgpKTsKIApAQCAtMjkxLDcgKzMwNSwxMSBAQCB2b2lkIEZvbnQ6
OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4m
IHJ1biwgY29uc3QgRgogICAgIGNoYXIqIHN0YXJ0ID0gZ191dGY4X29mZnNldF90b19wb2ludGVy
KHV0ZjgsIGZyb20pOwogICAgIGNoYXIqIGVuZCA9IGdfdXRmOF9vZmZzZXRfdG9fcG9pbnRlcihz
dGFydCwgdG8gLSBmcm9tKTsKICAgICBpbnQgcmFuZ2VzW10gPSB7c3RhcnQgLSB1dGY4LCBlbmQg
LSB1dGY4fTsKKyNpZiBQTEFURk9STShHVEspCiAgICAgcGFydGlhbFJlZ2lvbiA9IGdka19wYW5n
b19sYXlvdXRfbGluZV9nZXRfY2xpcF9yZWdpb24obGF5b3V0TGluZSwgMCwgMCwgcmFuZ2VzLCAx
KTsKKyNlbHNlCisgICAgcGFydGlhbFJlZ2lvbiA9IGdldENsaXBSZWdpb25Gcm9tUGFuZ29MYXlv
dXRMaW5lKGxheW91dExpbmUsIDAsIDAsIHJhbmdlcywgMSk7CisjZW5kaWYKIAogICAgIGRyYXdH
bHlwaHNTaGFkb3coY29udGV4dCwgcG9pbnQsIGxheW91dExpbmUsIHBhcnRpYWxSZWdpb24pOwog
CkBAIC0zMDEsNyArMzE5LDExIEBAIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGCiAgICAgZmxvYXQg
cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7CiAgICAgY29udGV4dC0+ZmlsbENvbG9yKCkuZ2V0UkdC
QShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNy
LCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgZ2RrX2NhaXJvX3JlZ2lvbihjciwgcGFy
dGlhbFJlZ2lvbik7CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBnZGtfY2Fpcm9fcmVnaW9u
KGNyLCBwYXJ0aWFsUmVnaW9uKTsKKyNlbHNlCisgICAgICAgIGFwcGVuZFJlZ2lvblRvQ2Fpcm9D
b250ZXh0KGNyLCBwYXJ0aWFsUmVnaW9uKTsKKyNlbmRpZgogICAgIGNhaXJvX2NsaXAoY3IpOwog
CiAgICAgcGFuZ29fY2Fpcm9fc2hvd19sYXlvdXRfbGluZShjciwgbGF5b3V0TGluZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9QYW5nb1V0aWxp
dGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9QYW5nb1V0
aWxpdGllcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg0MzgzMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Bhbmdv
L1BhbmdvVXRpbGl0aWVzLmNwcApAQCAtMCwwICsxLDg3IEBACisvKgorICogVGhpcyBjb2RlIHdh
cyBtb3N0bHkgY29waWVkIGZyb20gZ2RrLXBhbmdvLgorICogc291cmNlOiBodHRwOi8vZ2l0Lmdu
b21lLm9yZy9icm93c2UvZ3RrKy90cmVlL2dkay9nZGtwYW5nby5jCisgKgorICogQ29weXJpZ2h0
IChDKSAyMDAwIFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04g
ZW1iZWRkZWQgc3lzdGVtcworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwK
KyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJQYW5nb1V0aWxpdGllcy5oIgorCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNp
bmNsdWRlIDxwYW5nby9wYW5nby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBj
YWlyb19yZWdpb25fdCogZ2V0TGluZUNsaXBSZWdpb25Gcm9tTGF5b3V0SXRlcihQYW5nb0xheW91
dEl0ZXIgKml0ZXIsIGludCB4T3JpZ2luLCBpbnQgeU9yaWdpbiwgY29uc3QgaW50ICppbmRleFJh
bmdlcywgaW50IG5SYW5nZXMpCit7CisgICAgUGFuZ29SZWN0YW5nbGUgbG9naWNhbFJlY3Q7Cisg
ICAgUGFuZ29MYXlvdXRMaW5lKiBsaW5lID0gcGFuZ29fbGF5b3V0X2l0ZXJfZ2V0X2xpbmVfcmVh
ZG9ubHkoaXRlcik7CisgICAgY2Fpcm9fcmVnaW9uX3QqIGNsaXBSZWdpb24gPSBjYWlyb19yZWdp
b25fY3JlYXRlKCk7CisgICAgcGFuZ29fbGF5b3V0X2l0ZXJfZ2V0X2xpbmVfZXh0ZW50cyhpdGVy
LCAwLCAmbG9naWNhbFJlY3QpOworICAgIGludCBiYXNlbGluZSA9IHBhbmdvX2xheW91dF9pdGVy
X2dldF9iYXNlbGluZShpdGVyKTsKKworICAgIGludCBpID0gMDsKKyAgICB3aGlsZSAoaSA8IG5S
YW5nZXMpIHsKKyAgICAgICAgaW50KiBwaXhlbFJhbmdlcyA9IDA7CisgICAgICAgIGludCBuUGl4
ZWxSYW5nZXMgPSAwOworCisgICAgICAgIGlmIChpbmRleFJhbmdlc1tpICogMiArIDFdID49IGxp
bmUtPnN0YXJ0X2luZGV4CisgICAgICAgICAgICAmJiBpbmRleFJhbmdlc1tpICogMl0gPCBsaW5l
LT5zdGFydF9pbmRleCArIGxpbmUtPmxlbmd0aCkKKyAgICAgICAgICAgIHBhbmdvX2xheW91dF9s
aW5lX2dldF94X3JhbmdlcyhsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4UmFuZ2VzW2kgKiAyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleFJhbmdlc1tpICogMiArIDFdLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwaXhlbFJhbmdlcywgJm5QaXhlbFJhbmdlcyk7
CisKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBuUGl4ZWxSYW5nZXM7ICsraikgeworICAg
ICAgICAgICAgaW50IHhPZmYgPSBQQU5HT19QSVhFTFMocGl4ZWxSYW5nZXNbMiAqIGpdIC0gbG9n
aWNhbFJlY3QueCk7CisgICAgICAgICAgICBpbnQgeU9mZiA9IFBBTkdPX1BJWEVMUyhiYXNlbGlu
ZSAtIGxvZ2ljYWxSZWN0LnkpOworCisgICAgICAgICAgICBjYWlyb19yZWN0YW5nbGVfaW50X3Qg
cmVjdDsKKyAgICAgICAgICAgIHJlY3QueCA9IHhPcmlnaW4gKyB4T2ZmOworICAgICAgICAgICAg
cmVjdC55ID0geU9yaWdpbiAtIHlPZmY7CisgICAgICAgICAgICByZWN0LndpZHRoID0gUEFOR09f
UElYRUxTKHBpeGVsUmFuZ2VzWzIgKiBqICsgMV0gLSBsb2dpY2FsUmVjdC54KSAtIHhPZmY7Cisg
ICAgICAgICAgICByZWN0LmhlaWdodCA9IFBBTkdPX1BJWEVMUyhiYXNlbGluZSAtIGxvZ2ljYWxS
ZWN0LnkgKyBsb2dpY2FsUmVjdC5oZWlnaHQpIC0geU9mZjsKKworICAgICAgICAgICAgY2Fpcm9f
cmVnaW9uX3VuaW9uX3JlY3RhbmdsZShjbGlwUmVnaW9uLCAmcmVjdCk7CisgICAgICAgIH0KKwor
ICAgICAgICBmcmVlKHBpeGVsUmFuZ2VzKTsKKyAgICAgICAgKytpOworICAgIH0KKyAgICByZXR1
cm4gY2xpcFJlZ2lvbjsKK30KKworY2Fpcm9fcmVnaW9uX3QqIGdldENsaXBSZWdpb25Gcm9tUGFu
Z29MYXlvdXRMaW5lKFBhbmdvTGF5b3V0TGluZSogbGluZSwgaW50IHhPcmlnaW4sIGludCB5T3Jp
Z2luLCBjb25zdCBpbnQqIGluZGV4UmFuZ2VzLCBpbnQgblJhbmdlcykKK3sKKyAgICBpZiAoIWlu
ZGV4UmFuZ2VzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFBhbmdvTGF5b3V0SXRlciogaXRl
ciA9IHBhbmdvX2xheW91dF9nZXRfaXRlcihsaW5lLT5sYXlvdXQpOworICAgIHdoaWxlIChwYW5n
b19sYXlvdXRfaXRlcl9nZXRfbGluZV9yZWFkb25seShpdGVyKSAhPSBsaW5lKQorICAgICAgICBw
YW5nb19sYXlvdXRfaXRlcl9uZXh0X2xpbmUoaXRlcik7CisKKyAgICBjYWlyb19yZWdpb25fdCog
Y2xpcFJlZ2lvbiA9IGdldExpbmVDbGlwUmVnaW9uRnJvbUxheW91dEl0ZXIoaXRlciwgeE9yaWdp
biwgeU9yaWdpbiwgaW5kZXhSYW5nZXMsIG5SYW5nZXMpOworCisgICAgcGFuZ29fbGF5b3V0X2l0
ZXJfZnJlZShpdGVyKTsKKworICAgIHJldHVybiBjbGlwUmVnaW9uOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9wYW5nby9QYW5nb1V0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcGFuZ28vUGFuZ29VdGlsaXRpZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5mZmUzMjk1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcGFuZ28vUGFuZ29VdGlsaXRpZXMuaApAQCAtMCwwICsxLDM1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDAwIFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBQ
cm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
CisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1
aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYg
UGFuZ29VdGlsaXRpZXNfaAorI2RlZmluZSBQYW5nb1V0aWxpdGllc19oCisKKyNpbmNsdWRlICJH
cmFwaGljc1R5cGVzLmgiCisKK3R5cGVkZWYgc3RydWN0IF9QYW5nb0xheW91dExpbmUgUGFuZ29M
YXlvdXRMaW5lOwordHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3JlZ2lvbiBjYWlyb19yZWdpb25fdDsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjYWlyb19yZWdpb25fdCogZ2V0Q2xpcFJlZ2lvbkZy
b21QYW5nb0xheW91dExpbmUoUGFuZ29MYXlvdXRMaW5lKiwgaW50LCBpbnQsIGNvbnN0IGludCos
IGludCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBhbmdvVXRpbGl0
aWVzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9GaW5kUGFuZ28uY21ha2UgYi9Tb3VyY2Uv
Y21ha2UvRmluZFBhbmdvLmNtYWtlCmluZGV4IDBkZjU0N2YuLmM3MWYwNDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9jbWFrZS9GaW5kUGFuZ28uY21ha2UKKysrIGIvU291cmNlL2NtYWtlL0ZpbmRQYW5n
by5jbWFrZQpAQCAtMTIsNiArMTIsNyBAQCBsaWJmaW5kX3BhY2thZ2UoUGFuZ28gRnJlZXR5cGUp
CiAKICMgVXNlIHBrZy1jb25maWcgdG8gZ2V0IGhpbnRzIGFib3V0IHBhdGhzCiBsaWJmaW5kX3Br
Z19jaGVja19tb2R1bGVzKFBhbmdvX1BLR0NPTkYgcGFuZ28pCitsaWJmaW5kX3BrZ19jaGVja19t
b2R1bGVzKFBhbmdvX0NhaXJvX1BLR0NPTkYgcGFuZ28pCiAKICMgSW5jbHVkZSBkaXIKIGZpbmRf
cGF0aChQYW5nb19JTkNMVURFX0RJUgpAQCAtMjAsMTIgKzIxLDIzIEBAIGZpbmRfcGF0aChQYW5n
b19JTkNMVURFX0RJUgogICBQQVRIX1NVRkZJWEVTIHBhbmdvLTEuMAogKQogCitmaW5kX3BhdGgo
UGFuZ29fQ2Fpcm9fSU5DTFVERV9ESVIKKyAgTkFNRVMgcGFuZ28vcGFuZ29jYWlyby5oCisgIFBB
VEhTICR7UGFuZ29fQ2Fpcm9fUEtHQ09ORl9JTkNMVURFX0RJUlN9CisgIFBBVEhfU1VGRklYRVMg
cGFuZ28tMS4wCispCisKICMgRmluYWxseSB0aGUgbGlicmFyeSBpdHNlbGYKIGZpbmRfbGlicmFy
eShQYW5nb19MSUJSQVJZCiAgIE5BTUVTIHBhbmdvLTEuMAogICBQQVRIUyAke1BhbmdvX1BLR0NP
TkZfTElCUkFSWV9ESVJTfQogKQogCitmaW5kX2xpYnJhcnkoUGFuZ29fQ2Fpcm9fTElCUkFSWQor
ICBOQU1FUyBwYW5nb2NhaXJvLTEuMAorICBQQVRIUyAke1BhbmdvX0NhaXJvX1BLR0NPTkZfTElC
UkFSWV9ESVJTfQorKQorCiAjIFNldCB0aGUgaW5jbHVkZSBkaXIgdmFyaWFibGVzIGFuZCB0aGUg
bGlicmFyaWVzIGFuZCBsZXQgbGliZmluZF9wcm9jZXNzIGRvIHRoZSByZXN0LgogIyBOT1RFOiBT
aW5ndWxhciB2YXJpYWJsZXMgZm9yIHRoaXMgbGlicmFyeSwgcGx1cmFsIGZvciBsaWJyYXJpZXMg
dGhpcyB0aGlzIGxpYiBkZXBlbmRzIG9uLgogc2V0KFBhbmdvX1BST0NFU1NfSU5DTFVERVMgUGFu
Z29fSU5DTFVERV9ESVIgRnJlZXR5cGVfSU5DTFVERV9ESVJTKQo=
</data>
<flag name="review"
          id="102955"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106872</attachid>
            <date>2011-09-09 08:16:46 -0700</date>
            <delta_ts>2011-09-09 14:39:10 -0700</delta_ts>
            <desc>Move FontGtk.cpp to FontPango.cpp</desc>
            <filename>0001-moving-FontGtk-FontPango.patch</filename>
            <type>text/plain</type>
            <size>34878</size>
            <attacher name="Rafael Antognolli">antognolli+webkit</attacher>
            
              <data encoding="base64">RnJvbSBkYjI3YmRiYTkxMzRhZWQ4YjEzNjY0OTRlY2YwNmE1YWRjNzk3ZDRiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSYWZhZWwgQW50b2dub2xsaSA8YW50b2dub2xsaUBwcm9mdXNp
b24ubW9iaT4KRGF0ZTogRnJpLCAxOSBBdWcgMjAxMSAxNzo1MDo1MSAtMDMwMApTdWJqZWN0OiBb
UEFUQ0ggMS8zXSBtb3ZpbmcgRm9udEd0ayAtPiBGb250UGFuZ28uCgotLS0KIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNSArCiBTb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtICAgICAgICAgICAgICAgICB8ICAgIDQgKy0KIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250R3RrLmNwcCAgIHwgIDQ0NCAt
LS0tLS0tLS0tLS0tLS0tLS0tLQogLi4uL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28v
Rm9udFBhbmdvLmNwcCAgfCAgNDQ0ICsrKysrKysrKysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5n
ZWQsIDQ2MiBpbnNlcnRpb25zKCspLCA0NDUgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRHdGsuY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9u
dFBhbmdvLmNwcAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhMDgxYTVkLi4zZTI3MjVlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTggQEAKKzIwMTEtMDktMDIgIFJhZmFlbCBBbnRvZ25vbGxpICA8YW50b2dub2xs
aUBwcm9mdXNpb24ubW9iaT4KKworICAgICAgICBSZW5hbWUgRm9udEd0ay5jcHAgdG8gRm9udFBh
bmdvLmNwcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjYzMjMKKworICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCisKKyAgICAgICAg
VGhpcyBmaWxlIHdpbGwgYmUgdXNlZCBieSB0aGUgRUZMIHBvcnQgdG9vLCBhbmQgc2luY2UgaXQn
cyBub3QgR1RLCisgICAgICAgIHNwZWNpZmljIGFueW1vcmUsIHJlbmFtZSBpdCB0byBzb21ldGhp
bmcgYmV0dGVyLgorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5IHNvIG5vIG5ldyB0ZXN0
cy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvcGFuZ28vRm9udFBhbmdvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250R3RrLmNwcC4KKwogMjAxMS0wOS0wOSAgU2hlcmlm
ZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjk0ODQ1LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXgg
MTI5YTMwOS4uOWU1ZTNhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0zOTU5
LDcgKzM5NTksNiBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291
cmNlR1N0cmVhbWVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9D
b2xvckd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250
R3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJv
VXRpbGl0aWVzLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dk
a0NhaXJvVXRpbGl0aWVzLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9JY29uR3RrLmNwcCBcCkBAIC00MDg1LDYgKzQwODQsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0dseXBoUGFnZVRy
ZWVOb2RlRnJlZVR5cGUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
cmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcAogd2ViY29yZWd0a19zb3VyY2VzICs9
IFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGFuZ28uY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZv
cm1EYXRhRnJlZVR5cGUuY3BwCiBlbmRpZiAjIEVORCBVU0VfRlJFRVRZUEUKIApAQCAtNDA5OSw2
ICs0MDk5LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9wYW5nby9Gb250UGxhdGZvcm1EYXRhLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3BhbmdvL0dseXBoUGFnZVRyZWVOb2RlUGFuZ28uY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9TaW1wbGVGb250RGF0YVBhbmdvLmNw
cAord2ViY29yZWd0a19zb3VyY2VzICs9IFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9wYW5nby9Gb250UGFuZ28uY3BwCiBlbmRpZiAjIEVORCBVU0VfUEFOR08KIAogIyAtLS0t
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEd0
ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEd0ay5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxOGQ0MmUuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRHdGsuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYg
TWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChjKSAyMDA3
IEhpcm95dWtpIElrZXpvZQotICogQ29weXJpZ2h0IChjKSAyMDA3IEtvdWhlaSBTdXRvdQotICog
Q29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMDggWGFuIExvcGV6IDx4YW5AZ25vbWUub3JnPgotICogQ29weXJpZ2h0IChDKSAy
MDA4IE51YW50aSBMdGQuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250LmgiCi0KLSNpbmNsdWRlICJDYWlyb1V0aWxpdGll
cy5oIgotI2luY2x1ZGUgIkdPd25QdHIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENh
aXJvLmgiCi0jaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRh
LmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8
Z2RrL2dkay5oPgotI2luY2x1ZGUgPHBhbmdvL3BhbmdvLmg+Ci0jaW5jbHVkZSA8cGFuZ28vcGFu
Z29jYWlyby5oPgotCi0jaWYgVVNFKEZSRUVUWVBFKQotI2luY2x1ZGUgPHBhbmdvL3BhbmdvZmMt
Zm9udG1hcC5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmZGVmIEdUS19B
UElfVkVSU0lPTl8yCi10eXBlZGVmIEdka1JlZ2lvbiogUGFuZ29SZWdpb25UeXBlOwotCi12b2lk
IGRlc3Ryb3lQYW5nb1JlZ2lvbihQYW5nb1JlZ2lvblR5cGUgcmVnaW9uKQotewotICAgIGdka19y
ZWdpb25fZGVzdHJveShyZWdpb24pOwotfQotCi1JbnRSZWN0IGdldFBhbmdvUmVnaW9uRXh0ZW50
cyhQYW5nb1JlZ2lvblR5cGUgcmVnaW9uKQotewotICAgIEdka1JlY3RhbmdsZSByZWN0YW5nbGU7
Ci0gICAgZ2RrX3JlZ2lvbl9nZXRfY2xpcGJveChyZWdpb24sICZyZWN0YW5nbGUpOwotICAgIHJl
dHVybiBJbnRSZWN0KHJlY3RhbmdsZS54LCByZWN0YW5nbGUueSwgcmVjdGFuZ2xlLndpZHRoLCBy
ZWN0YW5nbGUuaGVpZ2h0KTsKLX0KLSNlbHNlCi10eXBlZGVmIGNhaXJvX3JlZ2lvbl90KiBQYW5n
b1JlZ2lvblR5cGU7Ci0KLXZvaWQgZGVzdHJveVBhbmdvUmVnaW9uKFBhbmdvUmVnaW9uVHlwZSBy
ZWdpb24pCi17Ci0gICAgY2Fpcm9fcmVnaW9uX2Rlc3Ryb3kocmVnaW9uKTsKLX0KLQotSW50UmVj
dCBnZXRQYW5nb1JlZ2lvbkV4dGVudHMoUGFuZ29SZWdpb25UeXBlIHJlZ2lvbikKLXsKLSAgICBj
YWlyb19yZWN0YW5nbGVfaW50X3QgcmVjdGFuZ2xlOwotICAgIGNhaXJvX3JlZ2lvbl9nZXRfZXh0
ZW50cyhyZWdpb24sICZyZWN0YW5nbGUpOwotICAgIHJldHVybiBJbnRSZWN0KHJlY3RhbmdsZS54
LCByZWN0YW5nbGUueSwgcmVjdGFuZ2xlLndpZHRoLCByZWN0YW5nbGUuaGVpZ2h0KTsKLX0KLSNl
bmRpZgotCi0jZGVmaW5lIElTX0hJR0hfU1VSUk9HQVRFKHUpICAoKFVDaGFyKSh1KSA+PSAoVUNo
YXIpMHhkODAwICYmIChVQ2hhcikodSkgPD0gKFVDaGFyKTB4ZGJmZikKLSNkZWZpbmUgSVNfTE9X
X1NVUlJPR0FURSh1KSAgKChVQ2hhcikodSkgPj0gKFVDaGFyKTB4ZGMwMCAmJiAoVUNoYXIpKHUp
IDw9IChVQ2hhcikweGRmZmYpCi0KLXN0YXRpYyBnY2hhciogdXRmMTZUb1V0ZjgoY29uc3QgVUNo
YXIqIGFUZXh0LCBnaW50IGFMZW5ndGgsIGdpbnQgJmxlbmd0aCkKLXsKLSAgICBnYm9vbGVhbiBu
ZWVkQ29weSA9IEZBTFNFOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhTGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgaWYgKCFhVGV4dFtpXSB8fCBJU19MT1dfU1VSUk9HQVRFKGFUZXh0W2ldKSkg
ewotICAgICAgICAgICAgbmVlZENvcHkgPSBUUlVFOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0gCi0KLSAgICAgICAgaWYgKElTX0hJR0hfU1VSUk9HQVRFKGFUZXh0W2ldKSkgewotICAg
ICAgICAgICAgaWYgKGkgPCBhTGVuZ3RoIC0gMSAmJiBJU19MT1dfU1VSUk9HQVRFKGFUZXh0W2kr
MV0pKQotICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIG5lZWRDb3B5ID0gVFJVRTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEdPd25QdHI8VUNoYXI+IGNvcGllZFN0cmlu
ZzsKLSAgICBpZiAobmVlZENvcHkpIHsKLSAgICAgICAgLyogUGFuZ28gZG9lc24ndCBjb3JyZWN0
bHkgaGFuZGxlIG51bHMuICBXZSBjb252ZXJ0IHRoZW0gdG8gMHhmZi4gKi8KLSAgICAgICAgLyog
QWxzbyAidmFsaWRhdGUiIFVURi0xNiB0ZXh0IHRvIG1ha2Ugc3VyZSBjb252ZXJzaW9uIGRvZXNu
J3QgZmFpbC4gKi8KLQotICAgICAgICBjb3BpZWRTdHJpbmcuc2V0KHN0YXRpY19jYXN0PFVDaGFy
Kj4oZ19tZW1kdXAoYVRleHQsIGFMZW5ndGggKiBzaXplb2YoYVRleHRbMF0pKSkpOwotICAgICAg
ICBVQ2hhciogcCA9IGNvcGllZFN0cmluZy5nZXQoKTsKLQotICAgICAgICAvKiBkb24ndCBuZWVk
IHRvIHJlc2V0IGkgKi8KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhTGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgICAgIGlmICghcFtpXSB8fCBJU19MT1dfU1VSUk9HQVRFKHBbaV0pKQotICAg
ICAgICAgICAgICAgIHBbaV0gPSAweEZGRkQ7Ci0gICAgICAgICAgICBlbHNlIGlmIChJU19ISUdI
X1NVUlJPR0FURShwW2ldKSkgewotICAgICAgICAgICAgICAgIGlmIChpIDwgYUxlbmd0aCAtIDEg
JiYgSVNfTE9XX1NVUlJPR0FURShhVGV4dFtpKzFdKSkKLSAgICAgICAgICAgICAgICAgICAgaSsr
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcFtpXSA9IDB4RkZG
RDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGFUZXh0ID0gcDsKLSAgICB9
Ci0KLSAgICBnY2hhciogdXRmOFRleHQ7Ci0gICAgZ2xvbmcgaXRlbXNXcml0dGVuOwotICAgIHV0
ZjhUZXh0ID0gZ191dGYxNl90b191dGY4KHN0YXRpY19jYXN0PGNvbnN0IGd1bmljaGFyMio+KGFU
ZXh0KSwgYUxlbmd0aCwgMCwgJml0ZW1zV3JpdHRlbiwgMCk7Ci0gICAgbGVuZ3RoID0gaXRlbXNX
cml0dGVuOwotCi0gICAgcmV0dXJuIHV0ZjhUZXh0OwotfQotCi1zdGF0aWMgZ2NoYXIqIGNvbnZl
cnRVbmlDaGFyVG9VVEY4KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBnaW50IGxlbmd0aCwgaW50
IGZyb20sIGludCB0bykKLXsKLSAgICBnaW50IG5ld0xlbmd0aCA9IDA7Ci0gICAgR093blB0cjxn
Y2hhcj4gdXRmOFRleHQodXRmMTZUb1V0ZjgoY2hhcmFjdGVycywgbGVuZ3RoLCBuZXdMZW5ndGgp
KTsKLSAgICBpZiAoIXV0ZjhUZXh0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGdjaGFyKiBw
b3MgPSB1dGY4VGV4dC5nZXQoKTsKLSAgICBpZiAoZnJvbSA+IDApIHsKLSAgICAgICAgLy8gZGlz
Y2FyZCB0aGUgZmlyc3QgJ2Zyb20nIGNoYXJhY3RlcnMKLSAgICAgICAgLy8gRklYTUU6IHdlIHNo
b3VsZCBkbyB0aGlzIGJlZm9yZSB0aGUgY29udmVyc2lvbiBwcm9iYWJseQotICAgICAgICBwb3Mg
PSBnX3V0Zjhfb2Zmc2V0X3RvX3BvaW50ZXIodXRmOFRleHQuZ2V0KCksIGZyb20pOwotICAgIH0K
LQotICAgIGdpbnQgbGVuID0gc3RybGVuKHBvcyk7Ci0gICAgR1N0cmluZyogcmV0ID0gZ19zdHJp
bmdfbmV3X2xlbihOVUxMLCBsZW4pOwotCi0gICAgLy8gcmVwbGFjZSBsaW5lIGJyZWFrIGJ5IHNw
YWNlCi0gICAgd2hpbGUgKGxlbiA+IDApIHsKLSAgICAgICAgZ2ludCBpbmRleCwgc3RhcnQ7Ci0g
ICAgICAgIHBhbmdvX2ZpbmRfcGFyYWdyYXBoX2JvdW5kYXJ5KHBvcywgbGVuLCAmaW5kZXgsICZz
dGFydCk7Ci0gICAgICAgIGdfc3RyaW5nX2FwcGVuZF9sZW4ocmV0LCBwb3MsIGluZGV4KTsKLSAg
ICAgICAgaWYgKGluZGV4ID09IHN0YXJ0KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGdf
c3RyaW5nX2FwcGVuZF9jKHJldCwgJyAnKTsKLSAgICAgICAgcG9zICs9IHN0YXJ0OwotICAgICAg
ICBsZW4gLT0gc3RhcnQ7Ci0gICAgfQotICAgIHJldHVybiBnX3N0cmluZ19mcmVlKHJldCwgRkFM
U0UpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRQYW5nb0F0dHJpYnV0ZXMoY29uc3QgRm9udCogZm9u
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBQYW5nb0xheW91dCogbGF5b3V0KQotewotI2lmIFVTRShG
UkVFVFlQRSkKLSAgICBpZiAoZm9udC0+cHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkubV9w
YXR0ZXJuKSB7Ci0gICAgICAgIFBhbmdvRm9udERlc2NyaXB0aW9uKiBkZXNjID0gcGFuZ29fZmNf
Zm9udF9kZXNjcmlwdGlvbl9mcm9tX3BhdHRlcm4oZm9udC0+cHJpbWFyeUZvbnQoKS0+cGxhdGZv
cm1EYXRhKCkubV9wYXR0ZXJuLmdldCgpLCBGQUxTRSk7Ci0gICAgICAgIHBhbmdvX2xheW91dF9z
ZXRfZm9udF9kZXNjcmlwdGlvbihsYXlvdXQsIGRlc2MpOwotICAgICAgICBwYW5nb19mb250X2Rl
c2NyaXB0aW9uX2ZyZWUoZGVzYyk7Ci0gICAgfQotI2VsaWYgVVNFKFBBTkdPKQotICAgIGlmIChm
b250LT5wcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5tX2ZvbnQpIHsKLSAgICAgICAgUGFu
Z29Gb250RGVzY3JpcHRpb24qIGRlc2MgPSBwYW5nb19mb250X2Rlc2NyaWJlKGZvbnQtPnByaW1h
cnlGb250KCktPnBsYXRmb3JtRGF0YSgpLm1fZm9udCk7Ci0gICAgICAgIHBhbmdvX2xheW91dF9z
ZXRfZm9udF9kZXNjcmlwdGlvbihsYXlvdXQsIGRlc2MpOwotICAgICAgICBwYW5nb19mb250X2Rl
c2NyaXB0aW9uX2ZyZWUoZGVzYyk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBwYW5nb19sYXlvdXRf
c2V0X2F1dG9fZGlyKGxheW91dCwgRkFMU0UpOwotCi0gICAgUGFuZ29Db250ZXh0KiBwYW5nb0Nv
bnRleHQgPSBwYW5nb19sYXlvdXRfZ2V0X2NvbnRleHQobGF5b3V0KTsKLSAgICBQYW5nb0RpcmVj
dGlvbiBkaXJlY3Rpb24gPSBydW4ucnRsKCkgPyBQQU5HT19ESVJFQ1RJT05fUlRMIDogUEFOR09f
RElSRUNUSU9OX0xUUjsKLSAgICBwYW5nb19jb250ZXh0X3NldF9iYXNlX2RpcihwYW5nb0NvbnRl
eHQsIGRpcmVjdGlvbik7Ci0gICAgUGFuZ29BdHRyTGlzdCogbGlzdCA9IHBhbmdvX2F0dHJfbGlz
dF9uZXcoKTsKLSAgICBQYW5nb0F0dHJpYnV0ZSogYXR0cjsKLQotICAgIGF0dHIgPSBwYW5nb19h
dHRyX3NpemVfbmV3X2Fic29sdXRlKGZvbnQtPnBpeGVsU2l6ZSgpICogUEFOR09fU0NBTEUpOwot
ICAgIGF0dHItPmVuZF9pbmRleCA9IEdfTUFYVUlOVDsKLSAgICBwYW5nb19hdHRyX2xpc3RfaW5z
ZXJ0X2JlZm9yZShsaXN0LCBhdHRyKTsKLQotICAgIGlmICghcnVuLnNwYWNpbmdEaXNhYmxlZCgp
KSB7Ci0gICAgICAgIGF0dHIgPSBwYW5nb19hdHRyX2xldHRlcl9zcGFjaW5nX25ldyhmb250LT5s
ZXR0ZXJTcGFjaW5nKCkgKiBQQU5HT19TQ0FMRSk7Ci0gICAgICAgIGF0dHItPmVuZF9pbmRleCA9
IEdfTUFYVUlOVDsKLSAgICAgICAgcGFuZ29fYXR0cl9saXN0X2luc2VydF9iZWZvcmUobGlzdCwg
YXR0cik7Ci0gICAgfQotCi0gICAgLy8gUGFuZ28gZG9lcyBub3QgeWV0IHN1cHBvcnQgc3ludGhl
c2lzaW5nIHNtYWxsIGNhcHMKLSAgICAvLyBTZWUgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU2MTAKLQotICAgIHBhbmdvX2xheW91dF9zZXRfYXR0cmlidXRlcyhsYXlv
dXQsIGxpc3QpOwotICAgIHBhbmdvX2F0dHJfbGlzdF91bnJlZihsaXN0KTsKLX0KLQotYm9vbCBG
b250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQotewotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21w
bGV4VGV4dCgpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCBkcmF3R2x5
cGhzU2hhZG93KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgUGFuZ29MYXlvdXRMaW5lKiBsYXlvdXRMaW5lLCBQYW5nb1JlZ2lvblR5cGUg
cmVuZGVyUmVnaW9uKQotewotICAgIFNoYWRvd0JsdXImIHNoYWRvdyA9IGdyYXBoaWNzQ29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCktPnNoYWRvd0JsdXIoKTsKLQotICAgIGlmICghKGdyYXBoaWNz
Q29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZpbGwpIHx8IHNoYWRvdy50eXBl
KCkgPT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0
UG9pbnQgdG90YWxPZmZzZXQocG9pbnQgKyBncmFwaGljc0NvbnRleHQtPnN0YXRlKCkuc2hhZG93
T2Zmc2V0KTsKLQotICAgIC8vIE9wdGltaXplIG5vbi1ibHVycnkgc2hhZG93cywgYnkganVzdCBk
cmF3aW5nIHRleHQgd2l0aG91dCB0aGUgU2hhZG93Qmx1ci4KLSAgICBpZiAoIXNoYWRvdy5tdXN0
VXNlU2hhZG93Qmx1cihncmFwaGljc0NvbnRleHQpKSB7Ci0gICAgICAgIGNhaXJvX3QqIGNvbnRl
eHQgPSBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwotICAgICAgICBj
YWlyb19zYXZlKGNvbnRleHQpOwotICAgICAgICBjYWlyb190cmFuc2xhdGUoY29udGV4dCwgdG90
YWxPZmZzZXQueCgpLCB0b3RhbE9mZnNldC55KCkpOwotCi0gICAgICAgIHNldFNvdXJjZVJHQkFG
cm9tQ29sb3IoY29udGV4dCwgZ3JhcGhpY3NDb250ZXh0LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsK
LSAgICAgICAgZ2RrX2NhaXJvX3JlZ2lvbihjb250ZXh0LCByZW5kZXJSZWdpb24pOwotICAgICAg
ICBjYWlyb19jbGlwKGNvbnRleHQpOwotICAgICAgICBwYW5nb19jYWlyb19zaG93X2xheW91dF9s
aW5lKGNvbnRleHQsIGxheW91dExpbmUpOwotCi0gICAgICAgIGNhaXJvX3Jlc3RvcmUoY29udGV4
dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgZXh0ZW50cyhnZXRQ
YW5nb1JlZ2lvbkV4dGVudHMocmVuZGVyUmVnaW9uKSk7Ci0gICAgZXh0ZW50cy5zZXRMb2NhdGlv
bihGbG9hdFBvaW50KHBvaW50LngoKSwgcG9pbnQueSgpIC0gZXh0ZW50cy5oZWlnaHQoKSkpOwot
ICAgIGlmIChHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3cuYmVnaW5TaGFk
b3dMYXllcihncmFwaGljc0NvbnRleHQsIGV4dGVudHMpKSB7Ci0gICAgICAgIGNhaXJvX3QqIGNh
aXJvU2hhZG93Q29udGV4dCA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigp
OwotICAgICAgICBjYWlyb190cmFuc2xhdGUoY2Fpcm9TaGFkb3dDb250ZXh0LCBwb2ludC54KCks
IHBvaW50LnkoKSk7Ci0gICAgICAgIHBhbmdvX2NhaXJvX3Nob3dfbGF5b3V0X2xpbmUoY2Fpcm9T
aGFkb3dDb250ZXh0LCBsYXlvdXRMaW5lKTsKLQotICAgICAgICAvLyBXZSBuZWVkIHRoZSBjbGlw
cGluZyByZWdpb24gdG8gYmUgYWN0aXZlIHdoZW4gd2UgYmxpdCB0aGUgYmx1cnJlZCBzaGFkb3cg
YmFjaywKLSAgICAgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCB3YW50IGFueSBiaXRzIGFuZCBwaWVj
ZXMgb2YgY2hhcmFjdGVycyBvdXQgb2YgcmFuZ2UgdG8gYmUKLSAgICAgICAgLy8gZHJhd24uIFNp
bmNlIFNoYWRvd0JsdXIgZXhwZWN0cyBhIGNvbnNpc3RlbnQgdHJhbnNmb3JtLCB3ZSBoYXZlIHRv
IHVuZG8gdGhlCi0gICAgICAgIC8vIHRyYW5zbGF0aW9uIGJlZm9yZSBjYWxsaW5nIGVuZFNoYWRv
d0xheWVyIGFzIHdlbGwuCi0gICAgICAgIGNhaXJvX3QqIGNvbnRleHQgPSBncmFwaGljc0NvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwotICAgICAgICBjYWlyb19zYXZlKGNvbnRleHQp
OwotICAgICAgICBjYWlyb190cmFuc2xhdGUoY29udGV4dCwgdG90YWxPZmZzZXQueCgpLCB0b3Rh
bE9mZnNldC55KCkpOwotICAgICAgICBnZGtfY2Fpcm9fcmVnaW9uKGNvbnRleHQsIHJlbmRlclJl
Z2lvbik7Ci0gICAgICAgIGNhaXJvX2NsaXAoY29udGV4dCk7Ci0gICAgICAgIGNhaXJvX3RyYW5z
bGF0ZShjb250ZXh0LCAtdG90YWxPZmZzZXQueCgpLCAtdG90YWxPZmZzZXQueSgpKTsKLQotICAg
ICAgICBzaGFkb3cuZW5kU2hhZG93TGF5ZXIoZ3JhcGhpY3NDb250ZXh0KTsKLSAgICAgICAgY2Fp
cm9fcmVzdG9yZShjb250ZXh0KTsKLSAgICB9Ci19Ci0KLXZvaWQgRm9udDo6ZHJhd0NvbXBsZXhU
ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKLXsKLSNpZiBVU0UoRlJF
RVRZUEUpCi0gICAgaWYgKCFwcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5tX3BhdHRlcm4p
IHsKLSAgICAgICAgZHJhd1NpbXBsZVRleHQoY29udGV4dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBjYWlyb190KiBjciA9IGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwotICAgIFBhbmdvTGF5b3V0KiBsYXlvdXQg
PSBwYW5nb19jYWlyb19jcmVhdGVfbGF5b3V0KGNyKTsKLSAgICBzZXRQYW5nb0F0dHJpYnV0ZXMo
dGhpcywgcnVuLCBsYXlvdXQpOwotCi0gICAgZ2NoYXIqIHV0ZjggPSBjb252ZXJ0VW5pQ2hhclRv
VVRGOChydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7Ci0g
ICAgcGFuZ29fbGF5b3V0X3NldF90ZXh0KGxheW91dCwgdXRmOCwgLTEpOwotCi0gICAgLy8gT3Vy
IGxheW91dHMgYXJlIHNpbmdsZSBsaW5lCi0gICAgUGFuZ29MYXlvdXRMaW5lKiBsYXlvdXRMaW5l
ID0gcGFuZ29fbGF5b3V0X2dldF9saW5lX3JlYWRvbmx5KGxheW91dCwgMCk7Ci0KLSAgICAvLyBH
ZXQgdGhlIHJlZ2lvbiB3aGVyZSB0aGlzIHRleHQgd2lsbCBiZSBsYWlkIG91dC4gV2Ugd2lsbCB1
c2UgaXQgdG8gY2xpcAotICAgIC8vIHRoZSBDYWlybyBjb250ZXh0LCBmb3Igd2hlbiB3ZSBhcmUg
b25seSBwYWludGluZyBwYXJ0IG9mIHRoZSB0ZXh0IHJ1biBhbmQKLSAgICAvLyB0byBjYWxjdWxh
dGUgdGhlIHNpemUgb2YgdGhlIHNoYWRvdyBidWZmZXIuCi0gICAgUGFuZ29SZWdpb25UeXBlIHBh
cnRpYWxSZWdpb24gPSAwOwotICAgIGNoYXIqIHN0YXJ0ID0gZ191dGY4X29mZnNldF90b19wb2lu
dGVyKHV0ZjgsIGZyb20pOwotICAgIGNoYXIqIGVuZCA9IGdfdXRmOF9vZmZzZXRfdG9fcG9pbnRl
cihzdGFydCwgdG8gLSBmcm9tKTsKLSAgICBpbnQgcmFuZ2VzW10gPSB7c3RhcnQgLSB1dGY4LCBl
bmQgLSB1dGY4fTsKLSAgICBwYXJ0aWFsUmVnaW9uID0gZ2RrX3BhbmdvX2xheW91dF9saW5lX2dl
dF9jbGlwX3JlZ2lvbihsYXlvdXRMaW5lLCAwLCAwLCByYW5nZXMsIDEpOwotCi0gICAgZHJhd0ds
eXBoc1NoYWRvdyhjb250ZXh0LCBwb2ludCwgbGF5b3V0TGluZSwgcGFydGlhbFJlZ2lvbik7Ci0K
LSAgICBjYWlyb19zYXZlKGNyKTsKLSAgICBjYWlyb190cmFuc2xhdGUoY3IsIHBvaW50LngoKSwg
cG9pbnQueSgpKTsKLQotICAgIGZsb2F0IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOwotICAgIGNv
bnRleHQtPmZpbGxDb2xvcigpLmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAg
IGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAg
IGdka19jYWlyb19yZWdpb24oY3IsIHBhcnRpYWxSZWdpb24pOwotICAgIGNhaXJvX2NsaXAoY3Ip
OwotCi0gICAgcGFuZ29fY2Fpcm9fc2hvd19sYXlvdXRfbGluZShjciwgbGF5b3V0TGluZSk7Ci0K
LSAgICBpZiAoY29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkgewot
ICAgICAgICBDb2xvciBzdHJva2VDb2xvciA9IGNvbnRleHQtPnN0cm9rZUNvbG9yKCk7Ci0gICAg
ICAgIHN0cm9rZUNvbG9yLmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgICAg
ICBjYWlyb19zZXRfc291cmNlX3JnYmEoY3IsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAg
ICAgICAgcGFuZ29fY2Fpcm9fbGF5b3V0X2xpbmVfcGF0aChjciwgbGF5b3V0TGluZSk7Ci0gICAg
ICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNyLCBjb250ZXh0LT5zdHJva2VUaGlja25lc3MoKSk7
Ci0gICAgICAgIGNhaXJvX3N0cm9rZShjcik7Ci0gICAgfQotCi0gICAgLy8gUGFuZ28gc29tZXRp
bWVzIGxlYXZlcyBiZWhpbmQgcGF0aHMgd2UgZG9uJ3Qgd2FudAotICAgIGNhaXJvX25ld19wYXRo
KGNyKTsKLQotICAgIGRlc3Ryb3lQYW5nb1JlZ2lvbihwYXJ0aWFsUmVnaW9uKTsKLSAgICBnX2Zy
ZWUodXRmOCk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGF5b3V0KTsKLQotICAgIGNhaXJvX3Jlc3Rv
cmUoY3IpOwotfQotCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQo
R3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8s
IGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9p
bnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0Ci17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotLy8gV2Ugc2hvdWxkIGNyZWF0ZSB0aGUgbGF5b3V0IHdpdGggb3Vy
IGFjdHVhbCBjb250ZXh0IGJ1dCB3ZSBjYW4ndCBhY2Nlc3MgaXQgZnJvbSBoZXJlLgotc3RhdGlj
IFBhbmdvTGF5b3V0KiBnZXREZWZhdWx0UGFuZ29MYXlvdXQoY29uc3QgVGV4dFJ1biYgcnVuKQot
ewotICAgIHN0YXRpYyBQYW5nb0ZvbnRNYXAqIG1hcCA9IHBhbmdvX2NhaXJvX2ZvbnRfbWFwX2dl
dF9kZWZhdWx0KCk7Ci0jaWYgUEFOR09fVkVSU0lPTl9DSEVDSygxLDIxLDUpCi0gICAgc3RhdGlj
IFBhbmdvQ29udGV4dCogcGFuZ29Db250ZXh0ID0gcGFuZ29fZm9udF9tYXBfY3JlYXRlX2NvbnRl
eHQobWFwKTsKLSNlbHNlCi0gICAgLy8gRGVwcmVjYXRlZCBpbiBQYW5nbyAxLjIxLgotICAgIHN0
YXRpYyBQYW5nb0NvbnRleHQqIHBhbmdvQ29udGV4dCA9IHBhbmdvX2NhaXJvX2ZvbnRfbWFwX2Ny
ZWF0ZV9jb250ZXh0KFBBTkdPX0NBSVJPX0ZPTlRfTUFQKG1hcCkpOwotI2VuZGlmCi0gICAgUGFu
Z29MYXlvdXQqIGxheW91dCA9IHBhbmdvX2xheW91dF9uZXcocGFuZ29Db250ZXh0KTsKLQotICAg
IHJldHVybiBsYXlvdXQ7Ci19Ci0KLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFs
bGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogb3ZlcmZsb3cpIGNvbnN0Ci17Ci0jaWYgVVNFKEZS
RUVUWVBFKQotICAgIGlmICghcHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkubV9wYXR0ZXJu
KQotICAgICAgICByZXR1cm4gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQocnVuLCAwLCBmYWxsYmFj
a0ZvbnRzLCBvdmVyZmxvdyk7Ci0jZW5kaWYKLQotICAgIGlmIChydW4ubGVuZ3RoKCkgPT0gMCkK
LSAgICAgICAgcmV0dXJuIDAuMGY7Ci0KLSAgICBQYW5nb0xheW91dCogbGF5b3V0ID0gZ2V0RGVm
YXVsdFBhbmdvTGF5b3V0KHJ1bik7Ci0gICAgc2V0UGFuZ29BdHRyaWJ1dGVzKHRoaXMsIHJ1biwg
bGF5b3V0KTsKLQotICAgIGdjaGFyKiB1dGY4ID0gY29udmVydFVuaUNoYXJUb1VURjgocnVuLmNo
YXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpLCAwLCBydW4ubGVuZ3RoKCkpOwotICAgIHBhbmdvX2xh
eW91dF9zZXRfdGV4dChsYXlvdXQsIHV0ZjgsIC0xKTsKLQotICAgIGludCB3aWR0aDsKLSAgICBw
YW5nb19sYXlvdXRfZ2V0X3BpeGVsX3NpemUobGF5b3V0LCAmd2lkdGgsIDApOwotCi0gICAgZ19m
cmVlKHV0ZjgpOwotICAgIGdfb2JqZWN0X3VucmVmKGxheW91dCk7Ci0KLSAgICByZXR1cm4gd2lk
dGg7Ci19Ci0KLWludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgZmxvYXQgeEZsb2F0LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBj
b25zdAotewotI2lmIFVTRShGUkVFVFlQRSkKLSAgICBpZiAoIXByaW1hcnlGb250KCktPnBsYXRm
b3JtRGF0YSgpLm1fcGF0dGVybikKLSAgICAgICAgcmV0dXJuIG9mZnNldEZvclBvc2l0aW9uRm9y
U2ltcGxlVGV4dChydW4sIHhGbG9hdCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwotI2VuZGlmCi0g
ICAgLy8gRklYTUU6IFRoaXMgdHJ1bmNhdGlvbiBpcyBub3QgYSBwcm9ibGVtIGZvciBIVE1MLCBi
dXQgb25seSBhZmZlY3RzIFNWRywgd2hpY2ggcGFzc2VzIGZsb2F0aW5nLXBvaW50IG51bWJlcnMK
LSAgICAvLyB0byBGb250OjpvZmZzZXRGb3JQb3NpdGlvbigpLiBCdWcgaHR0cDovL3dlYmtpdC5v
cmcvYi80MDY3MyB0cmFja3MgZml4aW5nIHRoaXMgcHJvYmxlbS4KLSAgICBpbnQgeCA9IHN0YXRp
Y19jYXN0PGludD4oeEZsb2F0KTsKLQotICAgIFBhbmdvTGF5b3V0KiBsYXlvdXQgPSBnZXREZWZh
dWx0UGFuZ29MYXlvdXQocnVuKTsKLSAgICBzZXRQYW5nb0F0dHJpYnV0ZXModGhpcywgcnVuLCBs
YXlvdXQpOwotCi0gICAgZ2NoYXIqIHV0ZjggPSBjb252ZXJ0VW5pQ2hhclRvVVRGOChydW4uY2hh
cmFjdGVycygpLCBydW4ubGVuZ3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7Ci0gICAgcGFuZ29fbGF5
b3V0X3NldF90ZXh0KGxheW91dCwgdXRmOCwgLTEpOwotCi0gICAgaW50IGluZGV4LCB0cmFpbGlu
ZzsKLSAgICBwYW5nb19sYXlvdXRfeHlfdG9faW5kZXgobGF5b3V0LCB4ICogUEFOR09fU0NBTEUs
IDEsICZpbmRleCwgJnRyYWlsaW5nKTsKLSAgICBnbG9uZyBvZmZzZXQgPSBnX3V0ZjhfcG9pbnRl
cl90b19vZmZzZXQodXRmOCwgdXRmOCArIGluZGV4KTsKLSAgICBpZiAoaW5jbHVkZVBhcnRpYWxH
bHlwaHMpCi0gICAgICAgIG9mZnNldCArPSB0cmFpbGluZzsKLQotICAgIGdfZnJlZSh1dGY4KTsK
LSAgICBnX29iamVjdF91bnJlZihsYXlvdXQpOwotCi0gICAgcmV0dXJuIG9mZnNldDsKLX0KLQot
RmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykg
Y29uc3QKLXsKLSNpZiBVU0UoRlJFRVRZUEUpCi0gICAgaWYgKCFwcmltYXJ5Rm9udCgpLT5wbGF0
Zm9ybURhdGEoKS5tX3BhdHRlcm4pCi0gICAgICAgIHJldHVybiBzZWxlY3Rpb25SZWN0Rm9yU2lt
cGxlVGV4dChydW4sIHBvaW50LCBoLCBmcm9tLCB0byk7Ci0jZW5kaWYKLQotICAgIFBhbmdvTGF5
b3V0KiBsYXlvdXQgPSBnZXREZWZhdWx0UGFuZ29MYXlvdXQocnVuKTsKLSAgICBzZXRQYW5nb0F0
dHJpYnV0ZXModGhpcywgcnVuLCBsYXlvdXQpOwotCi0gICAgZ2NoYXIqIHV0ZjggPSBjb252ZXJ0
VW5pQ2hhclRvVVRGOChydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCksIDAsIHJ1bi5sZW5n
dGgoKSk7Ci0gICAgcGFuZ29fbGF5b3V0X3NldF90ZXh0KGxheW91dCwgdXRmOCwgLTEpOwotCi0g
ICAgY2hhciogc3RhcnQgPSBnX3V0Zjhfb2Zmc2V0X3RvX3BvaW50ZXIodXRmOCwgZnJvbSk7Ci0g
ICAgY2hhciogZW5kID0gZ191dGY4X29mZnNldF90b19wb2ludGVyKHN0YXJ0LCB0byAtIGZyb20p
OwotCi0gICAgaWYgKHJ1bi5sdHIoKSkgewotICAgICAgICBmcm9tID0gc3RhcnQgLSB1dGY4Owot
ICAgICAgICB0byA9IGVuZCAtIHV0Zjg7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZnJvbSA9IGVu
ZCAtIHV0Zjg7Ci0gICAgICAgIHRvID0gc3RhcnQgLSB1dGY4OwotICAgIH0KLQotICAgIFBhbmdv
TGF5b3V0TGluZSogbGF5b3V0TGluZSA9IHBhbmdvX2xheW91dF9nZXRfbGluZV9yZWFkb25seShs
YXlvdXQsIDApOwotICAgIGludCB4X3BvczsKLQotICAgIHhfcG9zID0gMDsKLSAgICBpZiAoZnJv
bSA8IGxheW91dExpbmUtPmxlbmd0aCkKLSAgICAgICAgcGFuZ29fbGF5b3V0X2xpbmVfaW5kZXhf
dG9feChsYXlvdXRMaW5lLCBmcm9tLCBGQUxTRSwgJnhfcG9zKTsKLSAgICBmbG9hdCBiZWZvcmVX
aWR0aCA9IFBBTkdPX1BJWEVMU19GTE9PUih4X3Bvcyk7Ci0KLSAgICB4X3BvcyA9IDA7Ci0gICAg
aWYgKHJ1bi5sdHIoKSB8fCB0byA8IGxheW91dExpbmUtPmxlbmd0aCkKLSAgICAgICAgcGFuZ29f
bGF5b3V0X2xpbmVfaW5kZXhfdG9feChsYXlvdXRMaW5lLCB0bywgRkFMU0UsICZ4X3Bvcyk7Ci0g
ICAgZmxvYXQgYWZ0ZXJXaWR0aCA9IFBBTkdPX1BJWEVMUyh4X3Bvcyk7Ci0KLSAgICBnX2ZyZWUo
dXRmOCk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGF5b3V0KTsKLQotICAgIHJldHVybiBGbG9hdFJl
Y3QocG9pbnQueCgpICsgYmVmb3JlV2lkdGgsIHBvaW50LnkoKSwgYWZ0ZXJXaWR0aCAtIGJlZm9y
ZVdpZHRoLCBoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcGFuZ28vRm9udFBhbmdvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3BhbmdvL0ZvbnRQYW5nby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNTAwMTU5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3BhbmdvL0ZvbnRQYW5nby5jcHAKQEAgLTAsMCArMSw0NDQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWls
LmNvbQorICogQ29weXJpZ2h0IChjKSAyMDA3IEhpcm95dWtpIElrZXpvZQorICogQ29weXJpZ2h0
IChjKSAyMDA3IEtvdWhlaSBTdXRvdQorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8
YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggWGFuIExvcGV6IDx4YW5AZ25v
bWUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250Lmgi
CisKKyNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdPd25QdHIuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1ci5o
IgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2lu
Y2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPHBhbmdvL3Bh
bmdvLmg+CisjaW5jbHVkZSA8cGFuZ28vcGFuZ29jYWlyby5oPgorCisjaWYgVVNFKEZSRUVUWVBF
KQorI2luY2x1ZGUgPHBhbmdvL3BhbmdvZmMtZm9udG1hcC5oPgorI2VuZGlmCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCit0eXBlZGVmIEdka1JlZ2lv
biogUGFuZ29SZWdpb25UeXBlOworCit2b2lkIGRlc3Ryb3lQYW5nb1JlZ2lvbihQYW5nb1JlZ2lv
blR5cGUgcmVnaW9uKQoreworICAgIGdka19yZWdpb25fZGVzdHJveShyZWdpb24pOworfQorCitJ
bnRSZWN0IGdldFBhbmdvUmVnaW9uRXh0ZW50cyhQYW5nb1JlZ2lvblR5cGUgcmVnaW9uKQorewor
ICAgIEdka1JlY3RhbmdsZSByZWN0YW5nbGU7CisgICAgZ2RrX3JlZ2lvbl9nZXRfY2xpcGJveChy
ZWdpb24sICZyZWN0YW5nbGUpOworICAgIHJldHVybiBJbnRSZWN0KHJlY3RhbmdsZS54LCByZWN0
YW5nbGUueSwgcmVjdGFuZ2xlLndpZHRoLCByZWN0YW5nbGUuaGVpZ2h0KTsKK30KKyNlbHNlCit0
eXBlZGVmIGNhaXJvX3JlZ2lvbl90KiBQYW5nb1JlZ2lvblR5cGU7CisKK3ZvaWQgZGVzdHJveVBh
bmdvUmVnaW9uKFBhbmdvUmVnaW9uVHlwZSByZWdpb24pCit7CisgICAgY2Fpcm9fcmVnaW9uX2Rl
c3Ryb3kocmVnaW9uKTsKK30KKworSW50UmVjdCBnZXRQYW5nb1JlZ2lvbkV4dGVudHMoUGFuZ29S
ZWdpb25UeXBlIHJlZ2lvbikKK3sKKyAgICBjYWlyb19yZWN0YW5nbGVfaW50X3QgcmVjdGFuZ2xl
OworICAgIGNhaXJvX3JlZ2lvbl9nZXRfZXh0ZW50cyhyZWdpb24sICZyZWN0YW5nbGUpOworICAg
IHJldHVybiBJbnRSZWN0KHJlY3RhbmdsZS54LCByZWN0YW5nbGUueSwgcmVjdGFuZ2xlLndpZHRo
LCByZWN0YW5nbGUuaGVpZ2h0KTsKK30KKyNlbmRpZgorCisjZGVmaW5lIElTX0hJR0hfU1VSUk9H
QVRFKHUpICAoKFVDaGFyKSh1KSA+PSAoVUNoYXIpMHhkODAwICYmIChVQ2hhcikodSkgPD0gKFVD
aGFyKTB4ZGJmZikKKyNkZWZpbmUgSVNfTE9XX1NVUlJPR0FURSh1KSAgKChVQ2hhcikodSkgPj0g
KFVDaGFyKTB4ZGMwMCAmJiAoVUNoYXIpKHUpIDw9IChVQ2hhcikweGRmZmYpCisKK3N0YXRpYyBn
Y2hhciogdXRmMTZUb1V0ZjgoY29uc3QgVUNoYXIqIGFUZXh0LCBnaW50IGFMZW5ndGgsIGdpbnQg
Jmxlbmd0aCkKK3sKKyAgICBnYm9vbGVhbiBuZWVkQ29weSA9IEZBTFNFOworCisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBhTGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKCFhVGV4dFtpXSB8fCBJ
U19MT1dfU1VSUk9HQVRFKGFUZXh0W2ldKSkgeworICAgICAgICAgICAgbmVlZENvcHkgPSBUUlVF
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gCisKKyAgICAgICAgaWYgKElTX0hJR0hf
U1VSUk9HQVRFKGFUZXh0W2ldKSkgeworICAgICAgICAgICAgaWYgKGkgPCBhTGVuZ3RoIC0gMSAm
JiBJU19MT1dfU1VSUk9HQVRFKGFUZXh0W2krMV0pKQorICAgICAgICAgICAgICAgIGkrKzsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG5lZWRDb3B5ID0gVFJVRTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IEdPd25QdHI8VUNoYXI+IGNvcGllZFN0cmluZzsKKyAgICBpZiAobmVlZENvcHkpIHsKKyAgICAg
ICAgLyogUGFuZ28gZG9lc24ndCBjb3JyZWN0bHkgaGFuZGxlIG51bHMuICBXZSBjb252ZXJ0IHRo
ZW0gdG8gMHhmZi4gKi8KKyAgICAgICAgLyogQWxzbyAidmFsaWRhdGUiIFVURi0xNiB0ZXh0IHRv
IG1ha2Ugc3VyZSBjb252ZXJzaW9uIGRvZXNuJ3QgZmFpbC4gKi8KKworICAgICAgICBjb3BpZWRT
dHJpbmcuc2V0KHN0YXRpY19jYXN0PFVDaGFyKj4oZ19tZW1kdXAoYVRleHQsIGFMZW5ndGggKiBz
aXplb2YoYVRleHRbMF0pKSkpOworICAgICAgICBVQ2hhciogcCA9IGNvcGllZFN0cmluZy5nZXQo
KTsKKworICAgICAgICAvKiBkb24ndCBuZWVkIHRvIHJlc2V0IGkgKi8KKyAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBhTGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmICghcFtpXSB8fCBJ
U19MT1dfU1VSUk9HQVRFKHBbaV0pKQorICAgICAgICAgICAgICAgIHBbaV0gPSAweEZGRkQ7Cisg
ICAgICAgICAgICBlbHNlIGlmIChJU19ISUdIX1NVUlJPR0FURShwW2ldKSkgeworICAgICAgICAg
ICAgICAgIGlmIChpIDwgYUxlbmd0aCAtIDEgJiYgSVNfTE9XX1NVUlJPR0FURShhVGV4dFtpKzFd
KSkKKyAgICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgcFtpXSA9IDB4RkZGRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGFUZXh0ID0gcDsKKyAgICB9CisKKyAgICBnY2hhciogdXRmOFRleHQ7CisgICAg
Z2xvbmcgaXRlbXNXcml0dGVuOworICAgIHV0ZjhUZXh0ID0gZ191dGYxNl90b191dGY4KHN0YXRp
Y19jYXN0PGNvbnN0IGd1bmljaGFyMio+KGFUZXh0KSwgYUxlbmd0aCwgMCwgJml0ZW1zV3JpdHRl
biwgMCk7CisgICAgbGVuZ3RoID0gaXRlbXNXcml0dGVuOworCisgICAgcmV0dXJuIHV0ZjhUZXh0
OworfQorCitzdGF0aWMgZ2NoYXIqIGNvbnZlcnRVbmlDaGFyVG9VVEY4KGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCBnaW50IGxlbmd0aCwgaW50IGZyb20sIGludCB0bykKK3sKKyAgICBnaW50IG5l
d0xlbmd0aCA9IDA7CisgICAgR093blB0cjxnY2hhcj4gdXRmOFRleHQodXRmMTZUb1V0ZjgoY2hh
cmFjdGVycywgbGVuZ3RoLCBuZXdMZW5ndGgpKTsKKyAgICBpZiAoIXV0ZjhUZXh0KQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIGdjaGFyKiBwb3MgPSB1dGY4VGV4dC5nZXQoKTsKKyAgICBpZiAo
ZnJvbSA+IDApIHsKKyAgICAgICAgLy8gZGlzY2FyZCB0aGUgZmlyc3QgJ2Zyb20nIGNoYXJhY3Rl
cnMKKyAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBkbyB0aGlzIGJlZm9yZSB0aGUgY29udmVy
c2lvbiBwcm9iYWJseQorICAgICAgICBwb3MgPSBnX3V0Zjhfb2Zmc2V0X3RvX3BvaW50ZXIodXRm
OFRleHQuZ2V0KCksIGZyb20pOworICAgIH0KKworICAgIGdpbnQgbGVuID0gc3RybGVuKHBvcyk7
CisgICAgR1N0cmluZyogcmV0ID0gZ19zdHJpbmdfbmV3X2xlbihOVUxMLCBsZW4pOworCisgICAg
Ly8gcmVwbGFjZSBsaW5lIGJyZWFrIGJ5IHNwYWNlCisgICAgd2hpbGUgKGxlbiA+IDApIHsKKyAg
ICAgICAgZ2ludCBpbmRleCwgc3RhcnQ7CisgICAgICAgIHBhbmdvX2ZpbmRfcGFyYWdyYXBoX2Jv
dW5kYXJ5KHBvcywgbGVuLCAmaW5kZXgsICZzdGFydCk7CisgICAgICAgIGdfc3RyaW5nX2FwcGVu
ZF9sZW4ocmV0LCBwb3MsIGluZGV4KTsKKyAgICAgICAgaWYgKGluZGV4ID09IHN0YXJ0KQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGdfc3RyaW5nX2FwcGVuZF9jKHJldCwgJyAnKTsKKyAg
ICAgICAgcG9zICs9IHN0YXJ0OworICAgICAgICBsZW4gLT0gc3RhcnQ7CisgICAgfQorICAgIHJl
dHVybiBnX3N0cmluZ19mcmVlKHJldCwgRkFMU0UpOworfQorCitzdGF0aWMgdm9pZCBzZXRQYW5n
b0F0dHJpYnV0ZXMoY29uc3QgRm9udCogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBQYW5nb0xh
eW91dCogbGF5b3V0KQoreworI2lmIFVTRShGUkVFVFlQRSkKKyAgICBpZiAoZm9udC0+cHJpbWFy
eUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkubV9wYXR0ZXJuKSB7CisgICAgICAgIFBhbmdvRm9udERl
c2NyaXB0aW9uKiBkZXNjID0gcGFuZ29fZmNfZm9udF9kZXNjcmlwdGlvbl9mcm9tX3BhdHRlcm4o
Zm9udC0+cHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkubV9wYXR0ZXJuLmdldCgpLCBGQUxT
RSk7CisgICAgICAgIHBhbmdvX2xheW91dF9zZXRfZm9udF9kZXNjcmlwdGlvbihsYXlvdXQsIGRl
c2MpOworICAgICAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUoZGVzYyk7CisgICAgfQor
I2VsaWYgVVNFKFBBTkdPKQorICAgIGlmIChmb250LT5wcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURh
dGEoKS5tX2ZvbnQpIHsKKyAgICAgICAgUGFuZ29Gb250RGVzY3JpcHRpb24qIGRlc2MgPSBwYW5n
b19mb250X2Rlc2NyaWJlKGZvbnQtPnByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpLm1fZm9u
dCk7CisgICAgICAgIHBhbmdvX2xheW91dF9zZXRfZm9udF9kZXNjcmlwdGlvbihsYXlvdXQsIGRl
c2MpOworICAgICAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUoZGVzYyk7CisgICAgfQor
I2VuZGlmCisKKyAgICBwYW5nb19sYXlvdXRfc2V0X2F1dG9fZGlyKGxheW91dCwgRkFMU0UpOwor
CisgICAgUGFuZ29Db250ZXh0KiBwYW5nb0NvbnRleHQgPSBwYW5nb19sYXlvdXRfZ2V0X2NvbnRl
eHQobGF5b3V0KTsKKyAgICBQYW5nb0RpcmVjdGlvbiBkaXJlY3Rpb24gPSBydW4ucnRsKCkgPyBQ
QU5HT19ESVJFQ1RJT05fUlRMIDogUEFOR09fRElSRUNUSU9OX0xUUjsKKyAgICBwYW5nb19jb250
ZXh0X3NldF9iYXNlX2RpcihwYW5nb0NvbnRleHQsIGRpcmVjdGlvbik7CisgICAgUGFuZ29BdHRy
TGlzdCogbGlzdCA9IHBhbmdvX2F0dHJfbGlzdF9uZXcoKTsKKyAgICBQYW5nb0F0dHJpYnV0ZSog
YXR0cjsKKworICAgIGF0dHIgPSBwYW5nb19hdHRyX3NpemVfbmV3X2Fic29sdXRlKGZvbnQtPnBp
eGVsU2l6ZSgpICogUEFOR09fU0NBTEUpOworICAgIGF0dHItPmVuZF9pbmRleCA9IEdfTUFYVUlO
VDsKKyAgICBwYW5nb19hdHRyX2xpc3RfaW5zZXJ0X2JlZm9yZShsaXN0LCBhdHRyKTsKKworICAg
IGlmICghcnVuLnNwYWNpbmdEaXNhYmxlZCgpKSB7CisgICAgICAgIGF0dHIgPSBwYW5nb19hdHRy
X2xldHRlcl9zcGFjaW5nX25ldyhmb250LT5sZXR0ZXJTcGFjaW5nKCkgKiBQQU5HT19TQ0FMRSk7
CisgICAgICAgIGF0dHItPmVuZF9pbmRleCA9IEdfTUFYVUlOVDsKKyAgICAgICAgcGFuZ29fYXR0
cl9saXN0X2luc2VydF9iZWZvcmUobGlzdCwgYXR0cik7CisgICAgfQorCisgICAgLy8gUGFuZ28g
ZG9lcyBub3QgeWV0IHN1cHBvcnQgc3ludGhlc2lzaW5nIHNtYWxsIGNhcHMKKyAgICAvLyBTZWUg
aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MTAKKworICAgIHBhbmdv
X2xheW91dF9zZXRfYXR0cmlidXRlcyhsYXlvdXQsIGxpc3QpOworICAgIHBhbmdvX2F0dHJfbGlz
dF91bnJlZihsaXN0KTsKK30KKworYm9vbCBGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9y
Q29tcGxleFRleHQoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBGb250OjpjYW5F
eHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCit7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitzdGF0aWMgdm9pZCBkcmF3R2x5cGhzU2hhZG93KEdyYXBoaWNzQ29udGV4dCogZ3Jh
cGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgUGFuZ29MYXlvdXRMaW5lKiBs
YXlvdXRMaW5lLCBQYW5nb1JlZ2lvblR5cGUgcmVuZGVyUmVnaW9uKQoreworICAgIFNoYWRvd0Js
dXImIHNoYWRvdyA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnNoYWRvd0Js
dXIoKTsKKworICAgIGlmICghKGdyYXBoaWNzQ29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBU
ZXh0TW9kZUZpbGwpIHx8IHNoYWRvdy50eXBlKCkgPT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpCisg
ICAgICAgIHJldHVybjsKKworICAgIEZsb2F0UG9pbnQgdG90YWxPZmZzZXQocG9pbnQgKyBncmFw
aGljc0NvbnRleHQtPnN0YXRlKCkuc2hhZG93T2Zmc2V0KTsKKworICAgIC8vIE9wdGltaXplIG5v
bi1ibHVycnkgc2hhZG93cywgYnkganVzdCBkcmF3aW5nIHRleHQgd2l0aG91dCB0aGUgU2hhZG93
Qmx1ci4KKyAgICBpZiAoIXNoYWRvdy5tdXN0VXNlU2hhZG93Qmx1cihncmFwaGljc0NvbnRleHQp
KSB7CisgICAgICAgIGNhaXJvX3QqIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5jcigpOworICAgICAgICBjYWlyb19zYXZlKGNvbnRleHQpOworICAgICAgICBj
YWlyb190cmFuc2xhdGUoY29udGV4dCwgdG90YWxPZmZzZXQueCgpLCB0b3RhbE9mZnNldC55KCkp
OworCisgICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY29udGV4dCwgZ3JhcGhpY3NDb250
ZXh0LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKKyAgICAgICAgZ2RrX2NhaXJvX3JlZ2lvbihjb250
ZXh0LCByZW5kZXJSZWdpb24pOworICAgICAgICBjYWlyb19jbGlwKGNvbnRleHQpOworICAgICAg
ICBwYW5nb19jYWlyb19zaG93X2xheW91dF9saW5lKGNvbnRleHQsIGxheW91dExpbmUpOworCisg
ICAgICAgIGNhaXJvX3Jlc3RvcmUoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBGbG9hdFJlY3QgZXh0ZW50cyhnZXRQYW5nb1JlZ2lvbkV4dGVudHMocmVuZGVyUmVnaW9u
KSk7CisgICAgZXh0ZW50cy5zZXRMb2NhdGlvbihGbG9hdFBvaW50KHBvaW50LngoKSwgcG9pbnQu
eSgpIC0gZXh0ZW50cy5oZWlnaHQoKSkpOworICAgIGlmIChHcmFwaGljc0NvbnRleHQqIHNoYWRv
d0NvbnRleHQgPSBzaGFkb3cuYmVnaW5TaGFkb3dMYXllcihncmFwaGljc0NvbnRleHQsIGV4dGVu
dHMpKSB7CisgICAgICAgIGNhaXJvX3QqIGNhaXJvU2hhZG93Q29udGV4dCA9IHNoYWRvd0NvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOworICAgICAgICBjYWlyb190cmFuc2xhdGUoY2Fp
cm9TaGFkb3dDb250ZXh0LCBwb2ludC54KCksIHBvaW50LnkoKSk7CisgICAgICAgIHBhbmdvX2Nh
aXJvX3Nob3dfbGF5b3V0X2xpbmUoY2Fpcm9TaGFkb3dDb250ZXh0LCBsYXlvdXRMaW5lKTsKKwor
ICAgICAgICAvLyBXZSBuZWVkIHRoZSBjbGlwcGluZyByZWdpb24gdG8gYmUgYWN0aXZlIHdoZW4g
d2UgYmxpdCB0aGUgYmx1cnJlZCBzaGFkb3cgYmFjaywKKyAgICAgICAgLy8gYmVjYXVzZSB3ZSBk
b24ndCB3YW50IGFueSBiaXRzIGFuZCBwaWVjZXMgb2YgY2hhcmFjdGVycyBvdXQgb2YgcmFuZ2Ug
dG8gYmUKKyAgICAgICAgLy8gZHJhd24uIFNpbmNlIFNoYWRvd0JsdXIgZXhwZWN0cyBhIGNvbnNp
c3RlbnQgdHJhbnNmb3JtLCB3ZSBoYXZlIHRvIHVuZG8gdGhlCisgICAgICAgIC8vIHRyYW5zbGF0
aW9uIGJlZm9yZSBjYWxsaW5nIGVuZFNoYWRvd0xheWVyIGFzIHdlbGwuCisgICAgICAgIGNhaXJv
X3QqIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwor
ICAgICAgICBjYWlyb19zYXZlKGNvbnRleHQpOworICAgICAgICBjYWlyb190cmFuc2xhdGUoY29u
dGV4dCwgdG90YWxPZmZzZXQueCgpLCB0b3RhbE9mZnNldC55KCkpOworICAgICAgICBnZGtfY2Fp
cm9fcmVnaW9uKGNvbnRleHQsIHJlbmRlclJlZ2lvbik7CisgICAgICAgIGNhaXJvX2NsaXAoY29u
dGV4dCk7CisgICAgICAgIGNhaXJvX3RyYW5zbGF0ZShjb250ZXh0LCAtdG90YWxPZmZzZXQueCgp
LCAtdG90YWxPZmZzZXQueSgpKTsKKworICAgICAgICBzaGFkb3cuZW5kU2hhZG93TGF5ZXIoZ3Jh
cGhpY3NDb250ZXh0KTsKKyAgICAgICAgY2Fpcm9fcmVzdG9yZShjb250ZXh0KTsKKyAgICB9Cit9
CisKK3ZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGlu
dCB0bykgY29uc3QKK3sKKyNpZiBVU0UoRlJFRVRZUEUpCisgICAgaWYgKCFwcmltYXJ5Rm9udCgp
LT5wbGF0Zm9ybURhdGEoKS5tX3BhdHRlcm4pIHsKKyAgICAgICAgZHJhd1NpbXBsZVRleHQoY29u
dGV4dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8pOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vu
ZGlmCisKKyAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigp
OworICAgIFBhbmdvTGF5b3V0KiBsYXlvdXQgPSBwYW5nb19jYWlyb19jcmVhdGVfbGF5b3V0KGNy
KTsKKyAgICBzZXRQYW5nb0F0dHJpYnV0ZXModGhpcywgcnVuLCBsYXlvdXQpOworCisgICAgZ2No
YXIqIHV0ZjggPSBjb252ZXJ0VW5pQ2hhclRvVVRGOChydW4uY2hhcmFjdGVycygpLCBydW4ubGVu
Z3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7CisgICAgcGFuZ29fbGF5b3V0X3NldF90ZXh0KGxheW91
dCwgdXRmOCwgLTEpOworCisgICAgLy8gT3VyIGxheW91dHMgYXJlIHNpbmdsZSBsaW5lCisgICAg
UGFuZ29MYXlvdXRMaW5lKiBsYXlvdXRMaW5lID0gcGFuZ29fbGF5b3V0X2dldF9saW5lX3JlYWRv
bmx5KGxheW91dCwgMCk7CisKKyAgICAvLyBHZXQgdGhlIHJlZ2lvbiB3aGVyZSB0aGlzIHRleHQg
d2lsbCBiZSBsYWlkIG91dC4gV2Ugd2lsbCB1c2UgaXQgdG8gY2xpcAorICAgIC8vIHRoZSBDYWly
byBjb250ZXh0LCBmb3Igd2hlbiB3ZSBhcmUgb25seSBwYWludGluZyBwYXJ0IG9mIHRoZSB0ZXh0
IHJ1biBhbmQKKyAgICAvLyB0byBjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIHNoYWRvdyBidWZm
ZXIuCisgICAgUGFuZ29SZWdpb25UeXBlIHBhcnRpYWxSZWdpb24gPSAwOworICAgIGNoYXIqIHN0
YXJ0ID0gZ191dGY4X29mZnNldF90b19wb2ludGVyKHV0ZjgsIGZyb20pOworICAgIGNoYXIqIGVu
ZCA9IGdfdXRmOF9vZmZzZXRfdG9fcG9pbnRlcihzdGFydCwgdG8gLSBmcm9tKTsKKyAgICBpbnQg
cmFuZ2VzW10gPSB7c3RhcnQgLSB1dGY4LCBlbmQgLSB1dGY4fTsKKyAgICBwYXJ0aWFsUmVnaW9u
ID0gZ2RrX3BhbmdvX2xheW91dF9saW5lX2dldF9jbGlwX3JlZ2lvbihsYXlvdXRMaW5lLCAwLCAw
LCByYW5nZXMsIDEpOworCisgICAgZHJhd0dseXBoc1NoYWRvdyhjb250ZXh0LCBwb2ludCwgbGF5
b3V0TGluZSwgcGFydGlhbFJlZ2lvbik7CisKKyAgICBjYWlyb19zYXZlKGNyKTsKKyAgICBjYWly
b190cmFuc2xhdGUoY3IsIHBvaW50LngoKSwgcG9pbnQueSgpKTsKKworICAgIGZsb2F0IHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhOworICAgIGNvbnRleHQtPmZpbGxDb2xvcigpLmdldFJHQkEocmVk
LCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVk
LCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgIGdka19jYWlyb19yZWdpb24oY3IsIHBhcnRpYWxS
ZWdpb24pOworICAgIGNhaXJvX2NsaXAoY3IpOworCisgICAgcGFuZ29fY2Fpcm9fc2hvd19sYXlv
dXRfbGluZShjciwgbGF5b3V0TGluZSk7CisKKyAgICBpZiAoY29udGV4dC0+dGV4dERyYXdpbmdN
b2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkgeworICAgICAgICBDb2xvciBzdHJva2VDb2xvciA9IGNv
bnRleHQtPnN0cm9rZUNvbG9yKCk7CisgICAgICAgIHN0cm9rZUNvbG9yLmdldFJHQkEocmVkLCBn
cmVlbiwgYmx1ZSwgYWxwaGEpOworICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY3IsIHJl
ZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICAgICAgcGFuZ29fY2Fpcm9fbGF5b3V0X2xpbmVf
cGF0aChjciwgbGF5b3V0TGluZSk7CisgICAgICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNyLCBj
b250ZXh0LT5zdHJva2VUaGlja25lc3MoKSk7CisgICAgICAgIGNhaXJvX3N0cm9rZShjcik7Cisg
ICAgfQorCisgICAgLy8gUGFuZ28gc29tZXRpbWVzIGxlYXZlcyBiZWhpbmQgcGF0aHMgd2UgZG9u
J3Qgd2FudAorICAgIGNhaXJvX25ld19wYXRoKGNyKTsKKworICAgIGRlc3Ryb3lQYW5nb1JlZ2lv
bihwYXJ0aWFsUmVnaW9uKTsKKyAgICBnX2ZyZWUodXRmOCk7CisgICAgZ19vYmplY3RfdW5yZWYo
bGF5b3V0KTsKKworICAgIGNhaXJvX3Jlc3RvcmUoY3IpOworfQorCit2b2lkIEZvbnQ6OmRyYXdF
bXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICov
LCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAq
LywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyog
dG8gKi8pIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworLy8gV2Ugc2hvdWxk
IGNyZWF0ZSB0aGUgbGF5b3V0IHdpdGggb3VyIGFjdHVhbCBjb250ZXh0IGJ1dCB3ZSBjYW4ndCBh
Y2Nlc3MgaXQgZnJvbSBoZXJlLgorc3RhdGljIFBhbmdvTGF5b3V0KiBnZXREZWZhdWx0UGFuZ29M
YXlvdXQoY29uc3QgVGV4dFJ1biYgcnVuKQoreworICAgIHN0YXRpYyBQYW5nb0ZvbnRNYXAqIG1h
cCA9IHBhbmdvX2NhaXJvX2ZvbnRfbWFwX2dldF9kZWZhdWx0KCk7CisjaWYgUEFOR09fVkVSU0lP
Tl9DSEVDSygxLCAyMSwgNSkKKyAgICBzdGF0aWMgUGFuZ29Db250ZXh0KiBwYW5nb0NvbnRleHQg
PSBwYW5nb19mb250X21hcF9jcmVhdGVfY29udGV4dChtYXApOworI2Vsc2UKKyAgICAvLyBEZXBy
ZWNhdGVkIGluIFBhbmdvIDEuMjEuCisgICAgc3RhdGljIFBhbmdvQ29udGV4dCogcGFuZ29Db250
ZXh0ID0gcGFuZ29fY2Fpcm9fZm9udF9tYXBfY3JlYXRlX2NvbnRleHQoUEFOR09fQ0FJUk9fRk9O
VF9NQVAobWFwKSk7CisjZW5kaWYKKyAgICBQYW5nb0xheW91dCogbGF5b3V0ID0gcGFuZ29fbGF5
b3V0X25ldyhwYW5nb0NvbnRleHQpOworCisgICAgcmV0dXJuIGxheW91dDsKK30KKworZmxvYXQg
Rm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNl
dDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBv
dmVyZmxvdykgY29uc3QKK3sKKyNpZiBVU0UoRlJFRVRZUEUpCisgICAgaWYgKCFwcmltYXJ5Rm9u
dCgpLT5wbGF0Zm9ybURhdGEoKS5tX3BhdHRlcm4pCisgICAgICAgIHJldHVybiBmbG9hdFdpZHRo
Rm9yU2ltcGxlVGV4dChydW4sIDAsIGZhbGxiYWNrRm9udHMsIG92ZXJmbG93KTsKKyNlbmRpZgor
CisgICAgaWYgKCFydW4ubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAwLjBmOworCisgICAgUGFu
Z29MYXlvdXQqIGxheW91dCA9IGdldERlZmF1bHRQYW5nb0xheW91dChydW4pOworICAgIHNldFBh
bmdvQXR0cmlidXRlcyh0aGlzLCBydW4sIGxheW91dCk7CisKKyAgICBnY2hhciogdXRmOCA9IGNv
bnZlcnRVbmlDaGFyVG9VVEY4KHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSwgMCwgcnVu
Lmxlbmd0aCgpKTsKKyAgICBwYW5nb19sYXlvdXRfc2V0X3RleHQobGF5b3V0LCB1dGY4LCAtMSk7
CisKKyAgICBpbnQgd2lkdGg7CisgICAgcGFuZ29fbGF5b3V0X2dldF9waXhlbF9zaXplKGxheW91
dCwgJndpZHRoLCAwKTsKKworICAgIGdfZnJlZSh1dGY4KTsKKyAgICBnX29iamVjdF91bnJlZihs
YXlvdXQpOworCisgICAgcmV0dXJuIHdpZHRoOworfQorCitpbnQgRm9udDo6b2Zmc2V0Rm9yUG9z
aXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHhGbG9hdCwgYm9v
bCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKK3sKKyNpZiBVU0UoRlJFRVRZUEUpCisgICAg
aWYgKCFwcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5tX3BhdHRlcm4pCisgICAgICAgIHJl
dHVybiBvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQocnVuLCB4RmxvYXQsIGluY2x1ZGVQ
YXJ0aWFsR2x5cGhzKTsKKyNlbmRpZgorICAgIC8vIEZJWE1FOiBUaGlzIHRydW5jYXRpb24gaXMg
bm90IGEgcHJvYmxlbSBmb3IgSFRNTCwgYnV0IG9ubHkgYWZmZWN0cyBTVkcsIHdoaWNoIHBhc3Nl
cyBmbG9hdGluZy1wb2ludCBudW1iZXJzCisgICAgLy8gdG8gRm9udDo6b2Zmc2V0Rm9yUG9zaXRp
b24oKS4gQnVnIGh0dHA6Ly93ZWJraXQub3JnL2IvNDA2NzMgdHJhY2tzIGZpeGluZyB0aGlzIHBy
b2JsZW0uCisgICAgaW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+KHhGbG9hdCk7CisKKyAgICBQYW5n
b0xheW91dCogbGF5b3V0ID0gZ2V0RGVmYXVsdFBhbmdvTGF5b3V0KHJ1bik7CisgICAgc2V0UGFu
Z29BdHRyaWJ1dGVzKHRoaXMsIHJ1biwgbGF5b3V0KTsKKworICAgIGdjaGFyKiB1dGY4ID0gY29u
dmVydFVuaUNoYXJUb1VURjgocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpLCAwLCBydW4u
bGVuZ3RoKCkpOworICAgIHBhbmdvX2xheW91dF9zZXRfdGV4dChsYXlvdXQsIHV0ZjgsIC0xKTsK
KworICAgIGludCBpbmRleCwgdHJhaWxpbmc7CisgICAgcGFuZ29fbGF5b3V0X3h5X3RvX2luZGV4
KGxheW91dCwgeCAqIFBBTkdPX1NDQUxFLCAxLCAmaW5kZXgsICZ0cmFpbGluZyk7CisgICAgZ2xv
bmcgb2Zmc2V0ID0gZ191dGY4X3BvaW50ZXJfdG9fb2Zmc2V0KHV0ZjgsIHV0ZjggKyBpbmRleCk7
CisgICAgaWYgKGluY2x1ZGVQYXJ0aWFsR2x5cGhzKQorICAgICAgICBvZmZzZXQgKz0gdHJhaWxp
bmc7CisKKyAgICBnX2ZyZWUodXRmOCk7CisgICAgZ19vYmplY3RfdW5yZWYobGF5b3V0KTsKKwor
ICAgIHJldHVybiBvZmZzZXQ7Cit9CisKK0Zsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
aW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7CisjaWYgVVNFKEZSRUVUWVBFKQorICAg
IGlmICghcHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkubV9wYXR0ZXJuKQorICAgICAgICBy
ZXR1cm4gc2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQocnVuLCBwb2ludCwgaCwgZnJvbSwgdG8p
OworI2VuZGlmCisKKyAgICBQYW5nb0xheW91dCogbGF5b3V0ID0gZ2V0RGVmYXVsdFBhbmdvTGF5
b3V0KHJ1bik7CisgICAgc2V0UGFuZ29BdHRyaWJ1dGVzKHRoaXMsIHJ1biwgbGF5b3V0KTsKKwor
ICAgIGdjaGFyKiB1dGY4ID0gY29udmVydFVuaUNoYXJUb1VURjgocnVuLmNoYXJhY3RlcnMoKSwg
cnVuLmxlbmd0aCgpLCAwLCBydW4ubGVuZ3RoKCkpOworICAgIHBhbmdvX2xheW91dF9zZXRfdGV4
dChsYXlvdXQsIHV0ZjgsIC0xKTsKKworICAgIGNoYXIqIHN0YXJ0ID0gZ191dGY4X29mZnNldF90
b19wb2ludGVyKHV0ZjgsIGZyb20pOworICAgIGNoYXIqIGVuZCA9IGdfdXRmOF9vZmZzZXRfdG9f
cG9pbnRlcihzdGFydCwgdG8gLSBmcm9tKTsKKworICAgIGlmIChydW4ubHRyKCkpIHsKKyAgICAg
ICAgZnJvbSA9IHN0YXJ0IC0gdXRmODsKKyAgICAgICAgdG8gPSBlbmQgLSB1dGY4OworICAgIH0g
ZWxzZSB7CisgICAgICAgIGZyb20gPSBlbmQgLSB1dGY4OworICAgICAgICB0byA9IHN0YXJ0IC0g
dXRmODsKKyAgICB9CisKKyAgICBQYW5nb0xheW91dExpbmUqIGxheW91dExpbmUgPSBwYW5nb19s
YXlvdXRfZ2V0X2xpbmVfcmVhZG9ubHkobGF5b3V0LCAwKTsKKyAgICBpbnQgeFBvczsKKworICAg
IHhQb3MgPSAwOworICAgIGlmIChmcm9tIDwgbGF5b3V0TGluZS0+bGVuZ3RoKQorICAgICAgICBw
YW5nb19sYXlvdXRfbGluZV9pbmRleF90b194KGxheW91dExpbmUsIGZyb20sIEZBTFNFLCAmeFBv
cyk7CisgICAgZmxvYXQgYmVmb3JlV2lkdGggPSBQQU5HT19QSVhFTFNfRkxPT1IoeFBvcyk7CisK
KyAgICB4UG9zID0gMDsKKyAgICBpZiAocnVuLmx0cigpIHx8IHRvIDwgbGF5b3V0TGluZS0+bGVu
Z3RoKQorICAgICAgICBwYW5nb19sYXlvdXRfbGluZV9pbmRleF90b194KGxheW91dExpbmUsIHRv
LCBGQUxTRSwgJnhQb3MpOworICAgIGZsb2F0IGFmdGVyV2lkdGggPSBQQU5HT19QSVhFTFMoeFBv
cyk7CisKKyAgICBnX2ZyZWUodXRmOCk7CisgICAgZ19vYmplY3RfdW5yZWYobGF5b3V0KTsKKwor
ICAgIHJldHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsgYmVmb3JlV2lkdGgsIHBvaW50LnkoKSwg
YWZ0ZXJXaWR0aCAtIGJlZm9yZVdpZHRoLCBoKTsKK30KKworfQotLSAKMS43LjMuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106873</attachid>
            <date>2011-09-09 08:22:43 -0700</date>
            <delta_ts>2011-09-09 15:05:09 -0700</delta_ts>
            <desc>Add replacement functions for gdk ones.</desc>
            <filename>0003-Add-replacement-functions-for-gdk-ones.patch</filename>
            <type>text/plain</type>
            <size>14548</size>
            <attacher name="Rafael Antognolli">antognolli+webkit</attacher>
            
              <data encoding="base64">RnJvbSA3MzM0NDAzNTE5MDUyMjFmNmFmNDQ3YTExMzRlZTlkZDhlYjI3ZTM4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSYWZhZWwgQW50b2dub2xsaSA8YW50b2dub2xsaUBwcm9mdXNp
b24ubW9iaT4KRGF0ZTogVHVlLCA2IFNlcCAyMDExIDIwOjQyOjEwIC0wMzAwClN1YmplY3Q6IFtQ
QVRDSCAzLzNdIEFkZCByZXBsYWNlbWVudCBmdW5jdGlvbnMgZm9yIGdkayBvbmVzLgoKVGhpcyB3
aWxsIGFsbG93IHRoZSBFRkwgcG9ydCB0byBkb24ndCBkZXBlbmQgb24gZ2RrIGFueW1vcmUuCi0t
LQogQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICA5ICsrCiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzRWZsLnR4dCAgICAgICAgICAgICAgICAg
ICB8ICAgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAyMyArKysrKysKIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0
aWxpdGllcy5jcHAgICAgIHwgICAxNCArKysKIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9D
YWlyb1V0aWxpdGllcy5oICAgICAgIHwgICAgMiArCiAuLi4vV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9wYW5nby9Gb250UGFuZ28uY3BwICB8ICAgMjYgKysrKysrLQogLi4uL3BsYXRmb3JtL2dy
YXBoaWNzL3BhbmdvL1BhbmdvVXRpbGl0aWVzLmNwcCAgICAgfCAgIDg0ICsrKysrKysrKysrKysr
KysrKysrCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vUGFuZ29VdGlsaXRpZXMuaCAgICAg
ICB8ICAgMzUgKysrKysrKysKIFNvdXJjZS9jbWFrZS9GaW5kUGFuZ28uY21ha2UgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAxMiArKysKIDkgZmlsZXMgY2hhbmdlZCwgMjA2IGluc2VydGlvbnMo
KyksIDMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcGFuZ28vUGFuZ29VdGlsaXRpZXMuY3BwCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vUGFuZ29VdGlsaXRpZXMu
aAoKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBmNjIzM2ViLi44MTg0
ZGE3IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMTEtMDktMDYgIFJhZmFlbCBBbnRvZ25vbGxpICA8YW50b2dub2xsaUBwcm9mdXNpb24u
bW9iaT4KKworICAgICAgICBBZGQgcmVwbGFjZW1lbnQgZnVuY3Rpb25zIGZvciBnZGsgb25lcy4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MzIzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2Uv
Y21ha2UvRmluZFBhbmdvLmNtYWtlOgorCiAyMDExLTA5LTA4ICBNYXJrIFBpbGdyaW0gIDxwaWxn
cmltQGNocm9taXVtLm9yZz4KIAogICAgICAgICBUZXN0IGhvdyBIVE1MQW5jaG9yRWxlbWVudC5n
ZXRQYXJhbWV0ZXIgcmVhY3RzIHRvIHRvbyBmZXcgYXJndW1lbnRzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzRWZsLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHNF
ZmwudHh0CmluZGV4IGM4YWE4ZmUuLjA1NGI0ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHNFZmwudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHNFZmwudHh0
CkBAIC0xMjksOSArMTI5LDExIEBAIElGIChXVEZfVVNFX0NBSVJPKQogICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvcGFuZ28vRm9udFBsYXRmb3JtRGF0YVBhbmdvLmNwcAogICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvcGFuZ28vR2x5cGhQYWdlVHJlZU5vZGVQYW5nby5jcHAKICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3BhbmdvL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwCisgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9wYW5nby9QYW5nb1V0aWxpdGllcy5jcHAKICAgICApCiAgICAgTElTVChBUFBFTkQg
V2ViQ29yZV9MSUJSQVJJRVMKLSAgICAgICR7UGFuZ29fTElCUkFSSUVTfQorICAgICAgJHtQYW5n
b19MSUJSQVJZfQorICAgICAgJHtQYW5nb19DYWlyb19MSUJSQVJZfQogICAgICkKICAgRU5ESUYg
KCkKIEVORElGICgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzAxMzQwZC4uYTFlODc1YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSw1ICsxLDI4IEBACiAyMDExLTA5LTA2ICBSYWZhZWwgQW50b2dub2xsaSAgPGFudG9nbm9s
bGlAcHJvZnVzaW9uLm1vYmk+CiAKKyAgICAgICAgQWRkIHJlcGxhY2VtZW50IGZ1bmN0aW9ucyBm
b3IgZ2RrIG9uZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02NjMyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgd2lsbCBhbGxvdyB0aGUgRUZMIHBvcnQgdG8gZG9uJ3QgZGVwZW5kIG9uIGdkayBh
bnltb3JlLgorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5IHNvIG5vIG5ldyB0ZXN0cy4K
KworICAgICAgICAqIENNYWtlTGlzdHNFZmwudHh0OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFJl
Z2lvblRvQ2Fpcm9Db250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9D
YWlyb1V0aWxpdGllcy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQ
YW5nby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkcmF3R2x5cGhzU2hhZG93KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvcGFuZ28vUGFuZ29VdGlsaXRpZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmdldExpbmVDbGlwUmVnaW9uRnJvbUxheW91dEl0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
Q2xpcFJlZ2lvbkZyb21QYW5nb0xheW91dExpbmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3BhbmdvL1BhbmdvVXRpbGl0aWVzLmg6IEFkZGVkLgorCisyMDExLTA5LTA2ICBSYWZhZWwg
QW50b2dub2xsaSAgPGFudG9nbm9sbGlAcHJvZnVzaW9uLm1vYmk+CisKICAgICAgICAgTWFrZSB0
aGUgRUZMIHBvcnQgdXNlIHRoZSBjb3JyZWN0IHJlbmRlcmluZyBmaWxlLgogICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYzMjMKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMu
Y3BwCmluZGV4IGI0YWRiNmMuLjE2MzIyNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtODAsNiArODEsMTkgQEAgdm9pZCBhcHBlbmRXZWJDb3JlUGF0aFRv
Q2Fpcm9Db250ZXh0KGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgYXBw
ZW5kUGF0aFRvQ2Fpcm9Db250ZXh0KGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCktPmNvbnRl
eHQoKSk7CiB9CiAKK3ZvaWQgYXBwZW5kUmVnaW9uVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCogdG8s
IGNvbnN0IGNhaXJvX3JlZ2lvbl90KiByZWdpb24pCit7CisgICAgaWYgKCFyZWdpb24pCisgICAg
ICAgIHJldHVybjsKKworICAgIGNvbnN0IGludCByZWN0Q291bnQgPSBjYWlyb19yZWdpb25fbnVt
X3JlY3RhbmdsZXMocmVnaW9uKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3RDb3VudDsg
KytpKSB7CisgICAgICAgIGNhaXJvX3JlY3RhbmdsZV9pbnRfdCByZWN0OworICAgICAgICBjYWly
b19yZWdpb25fZ2V0X3JlY3RhbmdsZShyZWdpb24sIGksICZyZWN0KTsKKyAgICAgICAgY2Fpcm9f
cmVjdGFuZ2xlKHRvLCByZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOwor
ICAgIH0KK30KKwogY2Fpcm9fb3BlcmF0b3JfdCB0b0NhaXJvT3BlcmF0b3IoQ29tcG9zaXRlT3Bl
cmF0b3Igb3ApCiB7CiAgICAgc3dpdGNoIChvcCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmgKaW5kZXggMjExMDA1
MC4uM2Q2ZWI3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDExIFByb0ZVU0lP
TiBlbWJlZGRlZCBzeXN0ZW1zCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQz
LDYgKzQ0LDcgQEAgdm9pZCBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNhaXJvX3QqLCBjb25zdCBD
b2xvciYpOwogdm9pZCBhcHBlbmRQYXRoVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCogdG8sIGNhaXJv
X3QqIGZyb20pOwogdm9pZCBzZXRQYXRoT25DYWlyb0NvbnRleHQoY2Fpcm9fdCogdG8sIGNhaXJv
X3QqIGZyb20pOwogdm9pZCBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KGNhaXJvX3Qq
IGNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgpOwordm9pZCBhcHBlbmRSZWdpb25Ub0NhaXJvQ29u
dGV4dChjYWlyb190KiwgY29uc3QgY2Fpcm9fcmVnaW9uX3QqKTsKIGNhaXJvX29wZXJhdG9yX3Qg
dG9DYWlyb09wZXJhdG9yKENvbXBvc2l0ZU9wZXJhdG9yIG9wKTsKIHZvaWQgZHJhd1BhdHRlcm5U
b0NhaXJvQ29udGV4dChjYWlyb190KiBjciwgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3Qg
SW50U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5z
Zm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNhaXJvX29wZXJhdG9yX3Qgb3AsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBhbmdvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3BhbmdvL0ZvbnRQYW5nby5jcHAKaW5kZXggNTAwMTU5OC4uMjY4NGY1MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBhbmdv
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGFu
Z28uY3BwCkBAIC02LDYgKzYsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8
YWxwQGF0b2tlci5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggWGFuIExvcGV6IDx4YW5AZ25v
bWUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKICAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00MiwxMCArNDMsMTUgQEAKICNpbmNsdWRlICJTaW1w
bGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlIDxjYWlyby5oPgot
I2luY2x1ZGUgPGdkay9nZGsuaD4KICNpbmNsdWRlIDxwYW5nby9wYW5nby5oPgogI2luY2x1ZGUg
PHBhbmdvL3BhbmdvY2Fpcm8uaD4KIAorI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlIDxnZGsv
Z2RrLmg+CisjZWxzZQorI2luY2x1ZGUgIlBhbmdvVXRpbGl0aWVzLmgiCisjZW5kaWYKKwogI2lm
IFVTRShGUkVFVFlQRSkKICNpbmNsdWRlIDxwYW5nby9wYW5nb2ZjLWZvbnRtYXAuaD4KICNlbmRp
ZgpAQCAtMjM0LDcgKzI0MCwxMSBAQCBzdGF0aWMgdm9pZCBkcmF3R2x5cGhzU2hhZG93KEdyYXBo
aWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JgogICAgICAgICBj
YWlyb190cmFuc2xhdGUoY29udGV4dCwgdG90YWxPZmZzZXQueCgpLCB0b3RhbE9mZnNldC55KCkp
OwogCiAgICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY29udGV4dCwgZ3JhcGhpY3NDb250
ZXh0LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKKyNpZiBQTEFURk9STShHVEspCiAgICAgICAgIGdk
a19jYWlyb19yZWdpb24oY29udGV4dCwgcmVuZGVyUmVnaW9uKTsKKyNlbHNlCisgICAgICAgIGFw
cGVuZFJlZ2lvblRvQ2Fpcm9Db250ZXh0KGNvbnRleHQsIHJlbmRlclJlZ2lvbik7CisjZW5kaWYK
ICAgICAgICAgY2Fpcm9fY2xpcChjb250ZXh0KTsKICAgICAgICAgcGFuZ29fY2Fpcm9fc2hvd19s
YXlvdXRfbGluZShjb250ZXh0LCBsYXlvdXRMaW5lKTsKIApAQCAtMjU2LDcgKzI2NiwxMSBAQCBz
dGF0aWMgdm9pZCBkcmF3R2x5cGhzU2hhZG93KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250
ZXh0LCBjb25zdCBGbG9hdFBvaW50JgogICAgICAgICBjYWlyb190KiBjb250ZXh0ID0gZ3JhcGhp
Y3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKICAgICAgICAgY2Fpcm9fc2F2ZShj
b250ZXh0KTsKICAgICAgICAgY2Fpcm9fdHJhbnNsYXRlKGNvbnRleHQsIHRvdGFsT2Zmc2V0Lngo
KSwgdG90YWxPZmZzZXQueSgpKTsKKyNpZiBQTEFURk9STShHVEspCiAgICAgICAgIGdka19jYWly
b19yZWdpb24oY29udGV4dCwgcmVuZGVyUmVnaW9uKTsKKyNlbHNlCisgICAgICAgIGFwcGVuZFJl
Z2lvblRvQ2Fpcm9Db250ZXh0KGNvbnRleHQsIHJlbmRlclJlZ2lvbik7CisjZW5kaWYKICAgICAg
ICAgY2Fpcm9fY2xpcChjb250ZXh0KTsKICAgICAgICAgY2Fpcm9fdHJhbnNsYXRlKGNvbnRleHQs
IC10b3RhbE9mZnNldC54KCksIC10b3RhbE9mZnNldC55KCkpOwogCkBAIC0yOTEsNyArMzA1LDEx
IEBAIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGCiAgICAgY2hhciogc3RhcnQgPSBnX3V0Zjhfb2Zm
c2V0X3RvX3BvaW50ZXIodXRmOCwgZnJvbSk7CiAgICAgY2hhciogZW5kID0gZ191dGY4X29mZnNl
dF90b19wb2ludGVyKHN0YXJ0LCB0byAtIGZyb20pOwogICAgIGludCByYW5nZXNbXSA9IHtzdGFy
dCAtIHV0ZjgsIGVuZCAtIHV0Zjh9OworI2lmIFBMQVRGT1JNKEdUSykKICAgICBwYXJ0aWFsUmVn
aW9uID0gZ2RrX3BhbmdvX2xheW91dF9saW5lX2dldF9jbGlwX3JlZ2lvbihsYXlvdXRMaW5lLCAw
LCAwLCByYW5nZXMsIDEpOworI2Vsc2UKKyAgICBwYXJ0aWFsUmVnaW9uID0gZ2V0Q2xpcFJlZ2lv
bkZyb21QYW5nb0xheW91dExpbmUobGF5b3V0TGluZSwgcmFuZ2VzKTsKKyNlbmRpZgogCiAgICAg
ZHJhd0dseXBoc1NoYWRvdyhjb250ZXh0LCBwb2ludCwgbGF5b3V0TGluZSwgcGFydGlhbFJlZ2lv
bik7CiAKQEAgLTMwMSw3ICszMTksMTEgQEAgdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEYKICAgICBm
bG9hdCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsKICAgICBjb250ZXh0LT5maWxsQ29sb3IoKS5n
ZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICBjYWlyb19zZXRfc291cmNlX3Jn
YmEoY3IsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICBnZGtfY2Fpcm9fcmVnaW9uKGNy
LCBwYXJ0aWFsUmVnaW9uKTsKKyNpZiBQTEFURk9STShHVEspCisgICAgICAgIGdka19jYWlyb19y
ZWdpb24oY3IsIHBhcnRpYWxSZWdpb24pOworI2Vsc2UKKyAgICAgICAgYXBwZW5kUmVnaW9uVG9D
YWlyb0NvbnRleHQoY3IsIHBhcnRpYWxSZWdpb24pOworI2VuZGlmCiAgICAgY2Fpcm9fY2xpcChj
cik7CiAKICAgICBwYW5nb19jYWlyb19zaG93X2xheW91dF9saW5lKGNyLCBsYXlvdXRMaW5lKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1Bhbmdv
VXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1Bh
bmdvVXRpbGl0aWVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGRj
MTFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cGFuZ28vUGFuZ29VdGlsaXRpZXMuY3BwCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBUaGlzIGNv
ZGUgd2FzIG1vc3RseSBjb3BpZWQgZnJvbSBnZGstcGFuZ28uCisgKiBzb3VyY2U6IGh0dHA6Ly9n
aXQuZ25vbWUub3JnL2Jyb3dzZS9ndGsrL3RyZWUvZ2RrL2dka3BhbmdvLmMKKyAqCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDAgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDExIFByb0ZV
U0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAq
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUg
MzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlBhbmdvVXRpbGl0aWVzLmgiCisKKyNpbmNsdWRlIDxjYWlyby5o
PgorI2luY2x1ZGUgPHBhbmdvL3BhbmdvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Rh
dGljIGNhaXJvX3JlZ2lvbl90KiBnZXRMaW5lQ2xpcFJlZ2lvbkZyb21MYXlvdXRJdGVyKFBhbmdv
TGF5b3V0SXRlciogaXRlciwgY29uc3QgaW50KiBpbmRleFJhbmdlKQoreworICAgIFBhbmdvUmVj
dGFuZ2xlIGxvZ2ljYWxSZWN0OworICAgIFBhbmdvTGF5b3V0TGluZSogbGluZSA9IHBhbmdvX2xh
eW91dF9pdGVyX2dldF9saW5lX3JlYWRvbmx5KGl0ZXIpOworICAgIGNhaXJvX3JlZ2lvbl90KiBj
bGlwUmVnaW9uID0gY2Fpcm9fcmVnaW9uX2NyZWF0ZSgpOworICAgIHBhbmdvX2xheW91dF9pdGVy
X2dldF9saW5lX2V4dGVudHMoaXRlciwgMCwgJmxvZ2ljYWxSZWN0KTsKKyAgICBpbnQgYmFzZWxp
bmUgPSBwYW5nb19sYXlvdXRfaXRlcl9nZXRfYmFzZWxpbmUoaXRlcik7CisKKyAgICBpbnQqIHBp
eGVsUmFuZ2VzID0gMDsKKyAgICBpbnQgcGl4ZWxSYW5nZUNvdW50ID0gMDsKKworICAgIGlmIChp
bmRleFJhbmdlWzFdID49IGxpbmUtPnN0YXJ0X2luZGV4CisgICAgICAgICYmIGluZGV4UmFuZ2Vb
MF0gPCBsaW5lLT5zdGFydF9pbmRleCArIGxpbmUtPmxlbmd0aCkKKyAgICAgICAgcGFuZ29fbGF5
b3V0X2xpbmVfZ2V0X3hfcmFuZ2VzKGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmRleFJhbmdlWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5kZXhSYW5nZVsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZwaXhlbFJhbmdlcywgJnBpeGVsUmFuZ2VDb3VudCk7CisKKyAgICBmb3IgKGludCBq
ID0gMDsgaiA8IHBpeGVsUmFuZ2VDb3VudDsgKytqKSB7CisgICAgICAgIGludCBvZmZzZXRYID0g
UEFOR09fUElYRUxTKHBpeGVsUmFuZ2VzWzIgKiBqXSAtIGxvZ2ljYWxSZWN0LngpOworICAgICAg
ICBpbnQgb2Zmc2V0WSA9IFBBTkdPX1BJWEVMUyhiYXNlbGluZSAtIGxvZ2ljYWxSZWN0LnkpOwor
CisgICAgICAgIGNhaXJvX3JlY3RhbmdsZV9pbnRfdCByZWN0OworICAgICAgICByZWN0LnggPSBv
ZmZzZXRYOworICAgICAgICByZWN0LnkgPSAtb2Zmc2V0WTsKKyAgICAgICAgcmVjdC53aWR0aCA9
IFBBTkdPX1BJWEVMUyhwaXhlbFJhbmdlc1syICogaiArIDFdIC0gbG9naWNhbFJlY3QueCkgLSBv
ZmZzZXRYOworICAgICAgICByZWN0LmhlaWdodCA9IFBBTkdPX1BJWEVMUyhiYXNlbGluZSAtIGxv
Z2ljYWxSZWN0LnkgKyBsb2dpY2FsUmVjdC5oZWlnaHQpIC0gb2Zmc2V0WTsKKworICAgICAgICBj
YWlyb19yZWdpb25fdW5pb25fcmVjdGFuZ2xlKGNsaXBSZWdpb24sICZyZWN0KTsKKyAgICB9CisK
KyAgICBmcmVlKHBpeGVsUmFuZ2VzKTsKKworICAgIHJldHVybiBjbGlwUmVnaW9uOworfQorCitj
YWlyb19yZWdpb25fdCogZ2V0Q2xpcFJlZ2lvbkZyb21QYW5nb0xheW91dExpbmUoUGFuZ29MYXlv
dXRMaW5lKiBsaW5lLCBjb25zdCBpbnQqIGluZGV4UmFuZ2UpCit7CisgICAgaWYgKCFpbmRleFJh
bmdlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFBhbmdvTGF5b3V0SXRlciogaXRlciA9IHBh
bmdvX2xheW91dF9nZXRfaXRlcihsaW5lLT5sYXlvdXQpOworICAgIHdoaWxlIChwYW5nb19sYXlv
dXRfaXRlcl9nZXRfbGluZV9yZWFkb25seShpdGVyKSAhPSBsaW5lKQorICAgICAgICBwYW5nb19s
YXlvdXRfaXRlcl9uZXh0X2xpbmUoaXRlcik7CisKKyAgICBjYWlyb19yZWdpb25fdCogY2xpcFJl
Z2lvbiA9IGdldExpbmVDbGlwUmVnaW9uRnJvbUxheW91dEl0ZXIoaXRlciwgaW5kZXhSYW5nZSk7
CisKKyAgICBwYW5nb19sYXlvdXRfaXRlcl9mcmVlKGl0ZXIpOworCisgICAgcmV0dXJuIGNsaXBS
ZWdpb247Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL1BhbmdvVXRpbGl0aWVzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9QYW5nb1V0aWxpdGllcy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MDA2NzYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9QYW5nb1V0aWxpdGllcy5oCkBA
IC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgUmVkIEhhdCwgSW5jLgor
ICogQ29weXJpZ2h0IChDKSAyMDExIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3
LCBVU0EuCisgKi8KKworI2lmbmRlZiBQYW5nb1V0aWxpdGllc19oCisjZGVmaW5lIFBhbmdvVXRp
bGl0aWVzX2gKKworI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKwordHlwZWRlZiBzdHJ1Y3Qg
X1BhbmdvTGF5b3V0TGluZSBQYW5nb0xheW91dExpbmU7Cit0eXBlZGVmIHN0cnVjdCBfY2Fpcm9f
cmVnaW9uIGNhaXJvX3JlZ2lvbl90OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NhaXJvX3Jl
Z2lvbl90KiBnZXRDbGlwUmVnaW9uRnJvbVBhbmdvTGF5b3V0TGluZShQYW5nb0xheW91dExpbmUq
LCBjb25zdCBpbnQqIGluZGV4UmFuZ2UpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBQYW5nb1V0aWxpdGllc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvRmluZFBh
bmdvLmNtYWtlIGIvU291cmNlL2NtYWtlL0ZpbmRQYW5nby5jbWFrZQppbmRleCAwZGY1NDdmLi5j
NzFmMDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvRmluZFBhbmdvLmNtYWtlCisrKyBiL1Nv
dXJjZS9jbWFrZS9GaW5kUGFuZ28uY21ha2UKQEAgLTEyLDYgKzEyLDcgQEAgbGliZmluZF9wYWNr
YWdlKFBhbmdvIEZyZWV0eXBlKQogCiAjIFVzZSBwa2ctY29uZmlnIHRvIGdldCBoaW50cyBhYm91
dCBwYXRocwogbGliZmluZF9wa2dfY2hlY2tfbW9kdWxlcyhQYW5nb19QS0dDT05GIHBhbmdvKQor
bGliZmluZF9wa2dfY2hlY2tfbW9kdWxlcyhQYW5nb19DYWlyb19QS0dDT05GIHBhbmdvKQogCiAj
IEluY2x1ZGUgZGlyCiBmaW5kX3BhdGgoUGFuZ29fSU5DTFVERV9ESVIKQEAgLTIwLDEyICsyMSwy
MyBAQCBmaW5kX3BhdGgoUGFuZ29fSU5DTFVERV9ESVIKICAgUEFUSF9TVUZGSVhFUyBwYW5nby0x
LjAKICkKIAorZmluZF9wYXRoKFBhbmdvX0NhaXJvX0lOQ0xVREVfRElSCisgIE5BTUVTIHBhbmdv
L3BhbmdvY2Fpcm8uaAorICBQQVRIUyAke1BhbmdvX0NhaXJvX1BLR0NPTkZfSU5DTFVERV9ESVJT
fQorICBQQVRIX1NVRkZJWEVTIHBhbmdvLTEuMAorKQorCiAjIEZpbmFsbHkgdGhlIGxpYnJhcnkg
aXRzZWxmCiBmaW5kX2xpYnJhcnkoUGFuZ29fTElCUkFSWQogICBOQU1FUyBwYW5nby0xLjAKICAg
UEFUSFMgJHtQYW5nb19QS0dDT05GX0xJQlJBUllfRElSU30KICkKIAorZmluZF9saWJyYXJ5KFBh
bmdvX0NhaXJvX0xJQlJBUlkKKyAgTkFNRVMgcGFuZ29jYWlyby0xLjAKKyAgUEFUSFMgJHtQYW5n
b19DYWlyb19QS0dDT05GX0xJQlJBUllfRElSU30KKykKKwogIyBTZXQgdGhlIGluY2x1ZGUgZGly
IHZhcmlhYmxlcyBhbmQgdGhlIGxpYnJhcmllcyBhbmQgbGV0IGxpYmZpbmRfcHJvY2VzcyBkbyB0
aGUgcmVzdC4KICMgTk9URTogU2luZ3VsYXIgdmFyaWFibGVzIGZvciB0aGlzIGxpYnJhcnksIHBs
dXJhbCBmb3IgbGlicmFyaWVzIHRoaXMgdGhpcyBsaWIgZGVwZW5kcyBvbi4KIHNldChQYW5nb19Q
Uk9DRVNTX0lOQ0xVREVTIFBhbmdvX0lOQ0xVREVfRElSIEZyZWV0eXBlX0lOQ0xVREVfRElSUykK
LS0gCjEuNy4zLjQKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>