<?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>25566</bug_id>
          
          <creation_ts>2009-05-05 05:42:24 -0700</creation_ts>
          <short_desc>REGRESSION: text inputs with &quot;size&quot; are often smaller than before, but sometimes bigger (originally noticed in bugs.webkit.org text fields)</short_desc>
          <delta_ts>2010-02-12 19:20:36 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, Regression</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>25958</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Ojan Vafai">ojan</assigned_to>
          <cc>adele</cc>
    
    <cc>amanda</cc>
    
    <cc>ap</cc>
    
    <cc>bdakin</cc>
    
    <cc>darin</cc>
    
    <cc>hyatt</cc>
    
    <cc>ian</cc>
    
    <cc>mitz</cc>
    
    <cc>mrowe</cc>
    
    <cc>ojan</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>119955</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-05 05:42:24 -0700</bug_when>
    <thetext>REGRESSION: bugs.webkit.org text fields are much smaller in tot

I&apos;m not sure if this is good behavior or not.

I suspect this could be related to Ojan&apos;s recent avg-char width change.

Marking this as a regression for now, even though maybe it&apos;s a progression?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119956</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-05 06:00:20 -0700</bug_when>
    <thetext>Both text inputs and textareas are shorter than they used to be. It looks like we are closer to IE now (if anything, our text fields are still slightly wider).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119957</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-05 06:03:21 -0700</bug_when>
    <thetext>(measured in number of characters, that is)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119958</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-05 06:05:18 -0700</bug_when>
    <thetext>Textareas in particular are wider in IE in pixels, because they use a non-proportional font there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120059</commentid>
    <comment_count>4</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2009-05-05 21:11:32 -0700</bug_when>
    <thetext>I measured the width of the &quot;URL&quot; input as an example. It&apos;s an input size=60 with the default font. On Windows, we match IE exactly. On mac we&apos;re now considerably smaller, where we used to be considerably larger. There are a few issues at play here.

1. Our computation of maxCharWidth on the mac is often ~20px smaller than the windows value. I&apos;ve filed bug 25581 for that issue.
2. Our computation of avgCharWidth is sometimes off from Windows.
3. On Mac we use floats for avgCharWidth/maxCharWidth, but the Windows APIs return ints.
4. We use Lucida Grande as the default font on Macs and MS Shell Dlg/Monospace as the default font on Windows. Those fonts have different metrics. That we got the same numbers before was coincidence as best I can tell.

To give context the way we compute widths of text controls is:
input width = avgCharWidth*size + (maxCharWidth - avgCharWidth)
textarea width = avgCharWidth * cols

Here are offsetWidths for &lt;input size=60&gt; and &lt;textarea cols=60&gt; with the default font (Lucida Grande on Mac, MS Shell Dlg / MonoSpace on Win):

Browser                     Input   Textarea
IE                                 386     503
WebKit nightly win   386     503
WebKit nightly mac  344     345
Safari 4 beta win      426     509
Safari 4 beta mac     426     441

For font-family: monospace:
Browser                     Input   Textarea
IE                                 487     503
WebKit nightly win   486     503
WebKit nightly mac  430     441
Safari 4 beta win      486     509
Safari 4 beta mac     428     443

For font-family: arial:
Browser                     Input   Textarea
IE                                 395     383
WebKit nightly win   395     383
WebKit nightly mac  315     311
Safari 4 beta win      426     449
Safari 4 beta mac     368     383

In terms of default fonts being different, I don&apos;t know what we can do about that. In terms of getting different values for the widths, there&apos;s a number of options. I&apos;ll let bug 25581 be for maxCharWidth and focus on avgCharWidth here.

To get the correct avgCharWidth, I tried
-getting the value out of the OS/2 table
-computing it according to http://developer.apple.com/textfonts/TTRefMan/RM06/Chap6OS2.html
-computing it according to http://www.microsoft.com/typography/OTSpec/os2.htm#acw
-doing all of the above and round/ceil/flooring the result

None of those gave numbers that exactly matched Windows metrics. The thing currently checked in implements the Apple style avgCharWidth (http://developer.apple.com/textfonts/TTRefMan/RM06/Chap6OS2.html).

So, some options moving forward:
1. Get the old metrics on the Mac by setting avgCharWidth=width(&apos;0&apos;), maxCharWidth=0.
2. Same as above, but use the new maxCharWidth value that we compute.
3. Try and figure out exactly how Windows computes the avgCharWidth it returns (e.g. by generating fonts with known metrics and seeing what Windows returns).
4. Live with what we have now and just improve maxCharWidth (i.e. fix bug 25581), which would improve metrics for text inputs only.
5. Hard-code values for the 10+ fonts we care about and then fallback to one of the above methods.

I cringe at saying this, but I lean towards option 5. It&apos;s the only way we can match IE metrics here, short of doing option 3, which I&apos;m skeptical can really succeed. There are cases where the old metrics are better and cases where the new metrics are better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121168</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-05-13 17:12:10 -0700</bug_when>
    <thetext>&lt;rdar://problem/6885824&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121172</commentid>
    <comment_count>6</comment_count>
      <attachid>30302</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-05-13 17:20:29 -0700</bug_when>
    <thetext>Created attachment 30302
Testcase

It seems wrong that &lt;input size=&quot;60&quot;&gt; doesn&apos;t show 60 characters. Testcase attached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121178</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-05-13 17:40:36 -0700</bug_when>
    <thetext>HTML5 spec isn&apos;t really precise on what &quot;size&quot; means; it just says &quot;the user agent should ensure that at least that many characters are visible.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121179</commentid>
    <comment_count>8</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2009-05-13 17:42:30 -0700</bug_when>
    <thetext>It&apos;s defined in detail in the rendering section:

http://www.whatwg.org/specs/web-apps/current-work/#the-input-element-as-a-text-entry-widget</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121403</commentid>
    <comment_count>9</comment_count>
    <who name="John Sullivan">sullivan</who>
    <bug_when>2009-05-14 16:22:30 -0700</bug_when>
    <thetext>This isn&apos;t as simple as all text fields getting thinner. On https://bugs.webkit.org/, three of the four text fields got thinner since Safari 4 Public Beta, but one of them (the bug number field in the footer) got wider.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121605</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-15 17:20:27 -0700</bug_when>
    <thetext>It&apos;s somewhat odd that we continue to mark this as a regression.  This was a very conscious behavior change, the intent was to match IE&apos;s size=/cols= behavior exactly (which has been done on windows).

The current decision on the table is what option that Ojan listed in comment #4 (https://bugs.webkit.org/show_bug.cgi?id=25566#c4) we want to pursue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122285</commentid>
    <comment_count>11</comment_count>
      <attachid>30527</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2009-05-21 01:26:29 -0700</bug_when>
    <thetext>Created attachment 30527
Sample code for retreiving the avgCharWidth/maxCharWidth from the hhea/hmtx tables.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122288</commentid>
    <comment_count>12</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2009-05-21 01:29:04 -0700</bug_when>
    <thetext>That patch isn&apos;t for review, it&apos;s just to show my final attempt at getting the same metrics as those Windows returns. This works well for some fonts (e.g. verdana, arial), but not others (e.g. courier new). 

It might be possible to iterate on this and get better results for the fonts that aren&apos;t good right now, but my hopes are not high. I lean towards just having a hard-coded table of font-name -&gt; avgCharWidth, maxCharWidth.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122623</commentid>
    <comment_count>13</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2009-05-22 02:44:09 -0700</bug_when>
    <thetext>I have a fix:
1. Windows uses a 13px default font for textareas and inputs. Mac uses 11px. col/size width calculations depend on 13px metrics. We need a quirk for this in RenderTextControl (i.e. pass 13 instead of 11 when the FontDescription is using the default font size instead of an explicit size).
2. Explicitly set font-sizes for textareas and inputs will match if we use rounded OS/2 avgCharWidth values.

Fonts that have a non-positive (invalid) OS/2 avgCharWidth value should use the width of &apos;0&apos; in order to match Safari 3. I have filed a follow-up bug 25958 to investigate matching IE in these cases. I have only seen these for Mac fonts (which are not an IE-compat issue).

Also, maxCharWidth still needs to be investigated. This is bug 25581. This is lower impact, however, as maxCharWidth has a fixed effect (~10px depending on the font), whereas avgCharWidth has an effect proportional to the size/cols value.

Sadly, I&apos;m about to get on a plane to head off to vacation for one week. :( I will not have internet access. I intend to post a patch to fix this as described above on June 1st. If someone feels the urge to fix it before then, feel free.

I&apos;ll address bugs 25581 and 25958 once this bug is fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177322</commentid>
    <comment_count>14</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-01-05 12:53:57 -0800</bug_when>
    <thetext>A bit delayed, but I&apos;m finally back to addressing this. Patch coming soon. There hasn&apos;t been a Safari release with any of the text control width changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177325</commentid>
    <comment_count>15</comment_count>
      <attachid>45923</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-01-05 12:58:37 -0800</bug_when>
    <thetext>Created attachment 45923
Improve text control intrinsic widths.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177327</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-05 12:59:34 -0800</bug_when>
    <thetext>Attachment 45923 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/rendering/RenderTextControlSingleLine.cpp:384:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/rendering/RenderTextControl.cpp:520:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/rendering/RenderTextControlMultiLine.cpp:85:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177330</commentid>
    <comment_count>17</comment_count>
      <attachid>45923</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-01-05 13:02:01 -0800</bug_when>
    <thetext>Comment on attachment 45923
Improve text control intrinsic widths.

Bugzilla-tool is causing me problems. This is ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177343</commentid>
    <comment_count>18</comment_count>
      <attachid>45925</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-01-05 13:18:10 -0800</bug_when>
    <thetext>Created attachment 45925
New results for Leopard. Still need to get results for Tiger/Windows.

All the interesting changes are in fast/forms/text-control-intrinsic-widths-expected.txt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177353</commentid>
    <comment_count>19</comment_count>
      <attachid>45929</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-01-05 13:28:25 -0800</bug_when>
    <thetext>Created attachment 45929
Improve text control intrinsic widths. Linter errors fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177362</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-05 13:31:58 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45929 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178386</commentid>
    <comment_count>21</comment_count>
      <attachid>45929</attachid>
    <who name="">mitz</who>
    <bug_when>2010-01-07 14:36:26 -0800</bug_when>
    <thetext>Comment on attachment 45929
Improve text control intrinsic widths. Linter errors fixed.

&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; index 769fd6f..6fcc124 100644
&gt; --- a/WebCore/ChangeLog
&gt; +++ b/WebCore/ChangeLog

The entire history and rationale for the change don’t really belong in the change log entry. The references to the bugs should suffice.

&gt;      m_avgCharWidth = 0.f;
&gt; +    m_maxCharWidth = 0.f;

The preferred style is &quot;0&quot;, without the &quot;.f&quot;.

&gt; +    CFDataRef os2Table = CGFontCopyTableForTag(m_platformData.cgFont(), &apos;OS/2&apos;);
&gt; +    if (os2Table) {

Since it’s only used in the scope of the if statement, you can define os2Table in the if statement itself:
       if (CFDataRef os2Table = CGFontCopyTableForTagm_platformData.cgFont(), &apos;OS/2&apos;))

You are also failing release the CFDataRef. You should call CFRelease(os2Table) at the end of the block. Alternatively, you can use a RetainPtr&lt;CFDataRef&gt; like this:
       RetainPtr&lt;CFDataRef&gt; os2Table(AdoptCF, CGFontCopyTableFromTag(…

&gt; +        const UInt8* os2 = CFDataGetBytePtr(os2Table);
&gt; +        SInt16 os2AvgCharWidth = os2[2]*256 + os2[3];

You must check that os2Table is at least 4 bytes long before doing this!

&gt; +    CFDataRef headTable = CGFontCopyTableForTag(m_platformData.cgFont(), &apos;head&apos;);
&gt; +    if (headTable) {
&gt; +        const UInt8* head = CFDataGetBytePtr(headTable);
&gt; +        ushort uxMin = head[36]*256 + head[37];
&gt; +        ushort uxMax = head[40]*256 + head[41];
&gt; +        SInt16 xMin = static_cast&lt;SInt16&gt;(uxMin);
&gt; +        SInt16 xMax = static_cast&lt;SInt16&gt;(uxMax);
&gt; +        float diff = static_cast&lt;float&gt;(xMax - xMin);
&gt; +        m_maxCharWidth = scaleEmToUnits(diff, m_unitsPerEm) * m_platformData.m_size;
&gt; +    }

Same comments apply here.

&gt; +    static HashMap&lt;AtomicString, bool&gt;* fontFamiliesWithInvalidCharWidthMap = 0;
&gt; +    
&gt; +    if (!fontFamiliesWithInvalidCharWidthMap) {
&gt; +        fontFamiliesWithInvalidCharWidthMap = new HashMap&lt;AtomicString, bool&gt;;
&gt; +        
&gt; +        for (unsigned i = 0; i &lt; sizeof(fontFamiliesWithInvalidCharWidth) / sizeof(fontFamiliesWithInvalidCharWidth[0]); i++)
&gt; +            fontFamiliesWithInvalidCharWidthMap-&gt;set(AtomicString(fontFamiliesWithInvalidCharWidth[i]), true);
&gt; +    }
&gt; +
&gt; +    return !fontFamiliesWithInvalidCharWidthMap-&gt;get(family);

It looks like you’re using a HashMap where everything maps to &apos;true&apos;. You can use a HashSet!

r- based on the above issues, but ultimately I think Hyatt should weigh in on questions of substance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178855</commentid>
    <comment_count>22</comment_count>
      <attachid>46171</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-01-08 16:04:06 -0800</bug_when>
    <thetext>Created attachment 46171
Improve text control intrinsic widths. Addressed mitz&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178858</commentid>
    <comment_count>23</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-01-08 16:06:17 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; The entire history and rationale for the change don’t really belong in the
&gt; change log entry. The references to the bugs should suffice.

Fair enough. I was mostly trying to capture the list of sites that would be fixed, some of which are only in chromium internal bugs from before we launched.

&gt; I think Hyatt should weigh in on questions of substance.

Agreed. Hyatt?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187856</commentid>
    <comment_count>24</comment_count>
      <attachid>46171</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-02-04 10:40:21 -0800</bug_when>
    <thetext>Comment on attachment 46171
Improve text control intrinsic widths. Addressed mitz&apos;s comments.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187987</commentid>
    <comment_count>25</comment_count>
      <attachid>45925</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-04 15:57:39 -0800</bug_when>
    <thetext>Comment on attachment 45925
New results for Leopard. Still need to get results for Tiger/Windows.

Since hyatt r+&apos;d the actual code change, rs=me on the layout test updates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190139</commentid>
    <comment_count>26</comment_count>
      <attachid>48664</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-02-12 13:54:12 -0800</bug_when>
    <thetext>Created attachment 48664
Minor changes to compile on Tiger

Only changes from patch 46171 are to add the copyFontTableForTag method (CGFontCopyTableForTag doesn&apos;t exist on Tiger) and to move the implementation of scaleEmToUnits from RenderTextControl.h to RenderTextControl.cpp. Sorry to add another iteration to this review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190145</commentid>
    <comment_count>27</comment_count>
      <attachid>48664</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-02-12 14:10:27 -0800</bug_when>
    <thetext>Comment on attachment 48664
Minor changes to compile on Tiger

Marking as a patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190235</commentid>
    <comment_count>28</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-02-12 19:20:36 -0800</bug_when>
    <thetext>Committed r54748: &lt;http://trac.webkit.org/changeset/54748&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>30302</attachid>
            <date>2009-05-13 17:20:29 -0700</date>
            <delta_ts>2009-05-13 17:20:29 -0700</delta_ts>
            <desc>Testcase</desc>
            <filename>input.html</filename>
            <type>text/html</type>
            <size>508</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFs
Ly9FTiIKICAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cgo8aHRtbCBs
YW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVu
dD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KICA8dGl0bGU+aW5wdXQgc2l6ZTwvdGl0bGU+
CjwvaGVhZD4KPGJvZHk+CgogIDxpbnB1dCBuYW1lPSJzaG9ydF9kZXNjIiBhY2Nlc3NrZXk9InMi
CiAgICAgICAgIHZhbHVlPSJ4eHh4eHh4eHh8eHh4eHh4eHh4fHh4eHh4eHh4eHx4eHh4eHh4eHh8
eHh4eHh4eHh4fHh4eHh4eHh4eHwiIHNpemU9IjYwIj48YnI+CiAgPHNwYW4gc3R5bGU9ImZvbnQ6
IC13ZWJraXQtc21hbGwtY29udHJvbDsiPnh4eHh4eHh4eHx4eHh4eHh4eHh8eHh4eHh4eHh4fHh4
eHh4eHh4eHx4eHh4eHh4eHh8eHh4eHh4eHh4fDwvc3Bhbj4KPC9ib2R5Pgo8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30527</attachid>
            <date>2009-05-21 01:26:29 -0700</date>
            <delta_ts>2010-01-05 12:48:59 -0800</delta_ts>
            <desc>Sample code for retreiving the avgCharWidth/maxCharWidth from the hhea/hmtx tables.</desc>
            <filename>Sample-code-for-retreiving-the-avgCharWidth-maxCharWidth-from-the-hhea-hmtx-tables..patch</filename>
            <type>text/plain</type>
            <size>5529</size>
            <attacher name="Ojan Vafai">ojan</attacher>
            
              <data encoding="base64">YzM2YjFmNTY2Y2MxYzNmYzI4Zjc3MmM3Mjk1OGU3OGMyNjlhNWVlNwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0gYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQppbmRleCA2YjliZmUx
Li41NTU0YWViIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1w
bGVGb250RGF0YU1hYy5tbQorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1w
bGVGb250RGF0YU1hYy5tbQpAQCAtNDEsNiArNDEsNyBAQAogI2ltcG9ydCA8QXBwS2l0L0FwcEtp
dC5oPgogI2ltcG9ydCA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+
CiAjaW1wb3J0IDxmbG9hdC5oPgorI2ltcG9ydCA8bWF0aC5oPgogI2ltcG9ydCA8dW5pY29kZS91
Y2hhci5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbXBvcnQgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KQEAgLTI3NCwzNCArMjc1LDg4IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtSW5pdCgpCiAgICAgICAgIG1feEhlaWdodCA9IFttX2ZvbnQuZm9udCgpIHhIZWlnaHRdOwog
fQogCisjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKK3N0YXRpYyBDRk11dGFibGVEYXRhUmVmIFNp
bXBsZUZvbnREYXRhOjpjb3B5Rm9udFRhYmxlRm9yVGFnKEFUU0ZvbnRSZWYgYXRzRm9udCwgRm91
ckNoYXJDb2RlIHRhYmxlTmFtZSkKK3sKKyAgICBCeXRlQ291bnQgdGFibGVTaXplOworICAgIGlm
IChBVFNGb250R2V0VGFibGUoYXRzRm9udCwgdGFibGVOYW1lLCAwLCAwLCBOVUxMLCAmdGFibGVT
aXplKSAhPSBub0VycikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgQ0ZEYXRhUmVmIGRhdGEg
PSBDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIHRhYmxlU2l6ZSk7Cisg
ICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBDRkRhdGFJbmNyZWFzZUxl
bmd0aChkYXRhLCB0YWJsZVNpemUpOworICAgIGlmIChBVFNGb250R2V0VGFibGUoYXRzRm9udCwg
dGFibGVOYW1lLCAwLCB0YWJsZVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBDRkRhdGFH
ZXRNdXRhYmxlQnl0ZVB0cihkYXRhKSwgJnRhYmxlU2l6ZSkgIT0gbm9FcnIpIHsKKyAgICAgICAg
Q0ZSZWxlYXNlKGRhdGEpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJu
IGRhdGE7Cit9CisjZW5kaWYKKyAgICAKIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hh
cldpZHRoSW5pdCgpCiB7CisgICAgLy8gUmV0cmlldmUgdGhlIG1heGltdW0gY2hhcmFjdGVyIHdp
ZHRoIGZyb20gdGhlICdoaGVhJyB0YWJsZSBpZiBhdmFpbGFibGUsCisgICAgLy8gYW5kIHNjYW4g
dGhlICdobXR4JyB0YWJsZSB0byBjYWxjdWxhdGUgYXZnZXJhZ2UgY2hhcmFjdGVyIHdpZHRoIGFj
Y29yZGluZyB0bworICAgIC8vIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L09U
U1BFQy9vczIuaHRtI2FjdworICAgIC8vIFRoaXMgc2VlbXMgdG8gZ2V0IGEgZGlmZmVyZW50IHZh
bHVlIGZvciBzb21lIGZvbnRzIHRoYW4gcmVhZGluZyB0aGUgdmFsdWUKKyAgICAvLyBvdXQgb2Yg
dGhlIE9TLzIgdGFibGUuCisgICAgCiAgICAgbV9hdmdDaGFyV2lkdGggPSAwLmY7CisgICAgbV9t
YXhDaGFyV2lkdGggPSAwLmY7CisjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICBBVFNGb250
UmVmIGF0c0ZvbnQgPQorICAgICAgICBGTUdldEFUU0ZvbnRSZWZGcm9tRm9udChmb250RGF0YS0+
bV9mb250Lm1fYXRzdUZvbnRJRCk7CisgICAgQ0ZNdXRhYmxlRGF0YVJlZiBoaGVhVGFibGUgPSBj
b3B5Rm9udFRhYmxlRm9yVGFnKGF0c0ZvbnQsICdoaGVhJyk7CisgICAgQ0ZNdXRhYmxlRGF0YVJl
ZiBobXR4VGFibGUgPSBjb3B5Rm9udFRhYmxlRm9yVGFnKGF0c0ZvbnQsICdobXR4Jyk7CisgICAg
Q0ZNdXRhYmxlRGF0YVJlZiBtYXhwVGFibGUgPSBjb3B5Rm9udFRhYmxlRm9yVGFnKGF0c0ZvbnQs
ICdtYXhwJyk7CisjZWxzZQorICAgIENGRGF0YVJlZiBoaGVhVGFibGUgPSBDR0ZvbnRDb3B5VGFi
bGVGb3JUYWcobV9mb250LmNnRm9udCgpLCAnaGhlYScpOworICAgIENGRGF0YVJlZiBobXR4VGFi
bGUgPSBDR0ZvbnRDb3B5VGFibGVGb3JUYWcobV9mb250LmNnRm9udCgpLCAnaG10eCcpOworICAg
IENGRGF0YVJlZiBtYXhwVGFibGUgPSBDR0ZvbnRDb3B5VGFibGVGb3JUYWcobV9mb250LmNnRm9u
dCgpLCAnbWF4cCcpOworI2VuZGlmCisgICAgaWYgKGhoZWFUYWJsZSAmJiBDRkRhdGFHZXRMZW5n
dGgoaGhlYVRhYmxlKSA+PSAzNikgeworICAgICAgICBjb25zdCBVSW50OCogaGhlYSA9IENGRGF0
YUdldEJ5dGVQdHIoaGhlYVRhYmxlKTsKKworICAgICAgICBpbnQgbWF4QWR2YW5jZUluRlVuaXRz
ID0gaGhlYVsxMF0gKiAyNTYgKyBoaGVhWzExXTsKKyAgICAgICAgbV9tYXhDaGFyV2lkdGggPSBz
Y2FsZUVtVG9Vbml0cyhtYXhBZHZhbmNlSW5GVW5pdHMsIG1fdW5pdHNQZXJFbSkgKiBtX2ZvbnQu
bV9zaXplOworICAgICAgICBpZiAoaG10eFRhYmxlKSB7CisgICAgICAgICAgICBjb25zdCBVSW50
OCogaG10eCA9IENGRGF0YUdldEJ5dGVQdHIoaG10eFRhYmxlKTsKKyAgICAgICAgICAgIGludCBu
dW1iZXJPZkhvcml6b250YWxNZXRyaWNzID0gaGhlYVszNF0gKiAyNTYgKyBoaGVhWzM1XTsKKyAg
ICAgICAgICAgIGludCBpOworICAgICAgICAgICAgaW50IHRvdGFsV2lkdGggPSAwOworICAgICAg
ICAgICAgaW50IG51bU5vblplcm9XaWR0aE1ldHJpY3MgPSAwOworICAgICAgICAgICAgaW50IGFk
dmFuY2VXaWR0aDsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1iZXJPZkhvcml6b250
YWxNZXRyaWNzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhZHZhbmNlV2lkdGggPSBobXR4W2kq
NF0gKiAyNTYgKyBobXR4W2kqNCsxXTsKKyAgICAgICAgICAgICAgICBpZiAoYWR2YW5jZVdpZHRo
KSB7CisgICAgICAgICAgICAgICAgICAgIG51bU5vblplcm9XaWR0aE1ldHJpY3MrKzsKKyAgICAg
ICAgICAgICAgICAgICAgdG90YWxXaWR0aCArPSBhZHZhbmNlV2lkdGg7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQogCi0gICAgLy8gQ2FsY3VsYXRlIGF2Z0NoYXJXaWR0aCBhY2Nv
cmRpbmcgdG8gaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vdGV4dGZvbnRzL1RUUmVmTWFuL1JN
MDYvQ2hhcDZPUzIuaHRtbAotICAgIC8vIFdlIGNhbiB0cnkgZ3JhYmJpbmcgaXQgb3V0IG9mIHRo
ZSBPUy8yIHRhYmxlIG9yIHZpYSBBVFNGb250R2V0SG9yaXpvbnRhbE1ldHJpY3MsIGJ1dAotICAg
IC8vIEFUU0ZvbnRHZXRIb3Jpem9udGFsTWV0cmljcyBuZXZlciBzZWVtcyB0byByZXR1cm4gYSBu
b24temVybyB2YWx1ZSBhbmQgdGhlIE9TLzIgdGFibGUKLSAgICAvLyBjb250YWlucyB6ZXJvIGZv
ciBhIGxhcmdlIG51bWJlciBvZiBmb250cy4KLSAgICBHbHlwaFBhZ2UqIGdseXBoUGFnZVplcm8g
PSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENoaWxkKHRoaXMsIDApLT5wYWdlKCk7Ci0gICAg
aWYgKGdseXBoUGFnZVplcm8pIHsKLSAgICAgICAgc3RhdGljIGludCB3ZWlnaHRzW10gPSB7IDY0
LCAxNCwgMjcsIDM1LCAxMDAsIDIwLCAxNCwgNDIsIDYzLCAzLCA2LCAzNSwgMjAsIDU2LCA1Niwg
MTcsIDQsIDQ5LCA1NiwgNzEsIDMxLCAxMCwgMTgsIDMsIDE4LCAyLCAxNjYgfTsKLSAgICAgICAg
aW50IG51bUdseXBocyA9IDI3OwotICAgICAgICBBU1NFUlQobnVtR2x5cGhzID09IHNpemVvZih3
ZWlnaHRzKSAvIHNpemVvZihpbnQpKTsKLSAgICAgICAgLy8gQ29tcHV0ZSB0aGUgd2VpZ2h0ZWQg
c3VtIG9mIHRoZSBzcGFjZSBjaGFyYWN0ZXIgYW5kIHRoZSBsb3dlcmNhc2UgbGV0dGVycyBpbiB0
aGUgTGF0aW4gYWxwaGFiZXQuCi0gICAgICAgIGZsb2F0IHN1bSA9IDAuZjsKLSAgICAgICAgaW50
IHRvdGFsV2VpZ2h0ID0gMDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7
IGkrKykgewotICAgICAgICAgICAgR2x5cGggZ2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERh
dGFGb3JDaGFyYWN0ZXIoKGkgPCAyNiA/IGkgKyAnYScgOiAnICcpKS5nbHlwaDsKLSAgICAgICAg
ICAgIGlmIChnbHlwaCkgewotICAgICAgICAgICAgICAgIHRvdGFsV2VpZ2h0ICs9IHdlaWdodHNb
aV07Ci0gICAgICAgICAgICAgICAgc3VtICs9IHdpZHRoRm9yR2x5cGgoZ2x5cGgpICogd2VpZ2h0
c1tpXTsKKyAgICAgICAgICAgIC8vIFNvbWUgZml4ZWQtd2lkdGggZm9udHMgaGF2ZSBleHRyYSBn
bHlwaHMgYXQgdGhhdCBhbGwgaGF2ZSB0aGUgYWR2YW5jZSBvZgorICAgICAgICAgICAgLy8gdGhl
IGxhc3QgYWR2YW5jZVdpZHRoIGluIHRoZSBobXR4IHRhYmxlLiBUaGUgbnVtYmVyIG9mIHN1Y2gg
Z2x5cGhzIGlzCisgICAgICAgICAgICAvLyB0aGUgdG90YWwgbnVtYmVyIG9mIGdseXBocyAtIG51
bWJlciBvZiBnbHlwaHMgaW4gdGhlIGhtdHggdGFibGUuCisgICAgICAgICAgICBpZiAobWF4cFRh
YmxlKSB7CisgICAgICAgICAgICAgICAgY29uc3QgVUludDgqIG1heHAgPSBDRkRhdGFHZXRCeXRl
UHRyKG1heHBUYWJsZSk7CisgICAgICAgICAgICAgICAgaW50IG51bUdseXBocyA9IG1heHBbNF0g
KiAyNTYgKyBtYXhwWzVdOworICAgICAgICAgICAgICAgIGludCBudW1GaXhlZFdpZHRoR2x5cGhz
ID0gbnVtR2x5cGhzIC0gbnVtYmVyT2ZIb3Jpem9udGFsTWV0cmljczsKKyAgICAgICAgICAgICAg
ICBpZiAoYWR2YW5jZVdpZHRoICYmIG51bUZpeGVkV2lkdGhHbHlwaHMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdG90YWxXaWR0aCArPSBudW1GaXhlZFdpZHRoR2x5cGhzICogYWR2YW5jZVdpZHRo
OworICAgICAgICAgICAgICAgICAgICBudW1Ob25aZXJvV2lkdGhNZXRyaWNzICs9IG51bUdseXBo
cyAtIG51bWJlck9mSG9yaXpvbnRhbE1ldHJpY3M7CisgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodG90YWxXaWR0aCkKKyAgICAg
ICAgICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9IHJvdW5kZihzY2FsZUVtVG9Vbml0cygodG90YWxX
aWR0aCAvIG51bU5vblplcm9XaWR0aE1ldHJpY3MpLCBtX3VuaXRzUGVyRW0pICogbV9mb250Lm1f
c2l6ZSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHN1bSA+IDAuZiAmJiB0b3RhbFdlaWdodCA+
IDApCi0gICAgICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9IHN1bSAvIHRvdGFsV2VpZ2h0OwogICAg
IH0KKyAgICBpZiAoaGhlYVRhYmxlKQorICAgICAgICBDRlJlbGVhc2UoaGhlYVRhYmxlKTsKKyAg
ICBpZiAoaG10eFRhYmxlKQorICAgICAgICBDRlJlbGVhc2UoaG10eFRhYmxlKTsKIAotICAgIG1f
bWF4Q2hhcldpZHRoID0gMC5mOwogICAgIGlmIChtX2ZvbnQuZm9udCgpKQogICAgICAgICBtX21h
eENoYXJXaWR0aCA9IFttX2ZvbnQuZm9udCgpIG1heGltdW1BZHZhbmNlbWVudF0ud2lkdGg7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45923</attachid>
            <date>2010-01-05 12:58:37 -0800</date>
            <delta_ts>2010-01-05 13:28:37 -0800</delta_ts>
            <desc>Improve text control intrinsic widths.</desc>
            <filename>bug-25566-20100105125836.patch</filename>
            <type>text/plain</type>
            <size>15360</size>
            <attacher name="Ojan Vafai">ojan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzY5ZmQ2Zi4uNmZjYzEyNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MSBAQAorMjAxMC0wMS0wNSAgT2phbiBWYWZhaSAg
PG9qYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEltcHJvdmUgdGV4dCBjb250cm9sIGludHJpbnNpYyB3aWR0aHMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTU2NgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU1ODEKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1OTU4CisKKyAgICAgICAg
Rm9yIE1hYyBmb250cyB0aGF0IGhhdmUgaW52YWxpZCBhdmdDaGFyV2lkdGggZW50cmllcyBpbiB0
aGUgT1MvMiB0YWJsZSwKKyAgICAgICAgZmFsbGJhY2sgdG8gdGhlIFNhZmFyaSA0LSBiZWhhdmlv
ciBvZiB1c2luZyB0aGUgd2lkdGggb2YgYSB6ZXJvLiBGb3Igb3RoZXIKKyAgICAgICAgZm9udHMs
IG1ha2UgTWFjIG1hdGNoIFdpbmRvd3MgKGFuZCB0aHVzIElFKSBtZXRyaWNzLgorICAgICAgICAK
KyAgICAgICAgVGhpcyBpcyBqdXN0IGZvciBjb21wdXRpbmcgdGhlIHdpZHRoIG9mIHRleHQgY29u
dHJvbHMgYmFzZWQgb2ZmIHRoZQorICAgICAgICBzaXplL2NvbHMgYXR0cmlidXRlcywgc28gdGhl
cmUgYXJlIGEgbnVtYmVyIG9mIHNpdGVzIHRoYXQgZGVwZW5kIG9uCisgICAgICAgIElFIG1ldHJp
Y3MgKHNlZSBiZWxvdykuCisKKyAgICAgICAgTHVjaWRhIEdyYW5kZSBpcyBoYXJkLWNvZGVkIHRv
IG1hdGNoIE1TIFNoZWxsIERsZyBmb3IgaW5wdXRzIGFuZAorICAgICAgICBDb3VyaWVyIE5ldyBm
b3IgdGV4dGFyZWFzIGluIG9yZGVyIHRvIG1hdGNoIFNhZmFyaSBXaW4sIEZpcmVmb3ggYW5kLCBp
bgorICAgICAgICBzb21lIGNhc2VzIElFIChJRSB1c2VzIGRpZmZlcmVudCBkZWZhdWx0IGZvbnRz
IGRlcGVuZGluZyBvbiBlbmNvZGluZykuCisgICAgICAgIEEgbnVtYmVyIG9mIHRoZSBmaXhlZCBz
aXRlcyBsaXN0ZWQgYmVsb3cgZGVwZW5kIG9uIHRoaXMuCisKKyAgICAgICAgVGhpcyBpbXByb3Zl
cyBvbiB0aGUgYmVoYXZpb3IgaW4gdGhlIGN1cnJlbnQgbmlnaHRsaWVzIGJlY2F1c2UgaXQKKyAg
ICAgICAgcmVkdWNlcyB0aGUgbGlrZWxpaG9vZCBvZiByZWdyZXNzaW9ucyBmb3IgTWFjIGZvbnRz
IGFuZCBtb3JlIGFjY3VyYXRlbHkKKyAgICAgICAgbWF0Y2hlcyBJRSBtZXRyaWNzIGZvciBvdGhl
ciBmb250cy4gU2luY2Ugbm8gU2FmYXJpIGJyb3dzZXIgaGFzIHNoaXBwZWQKKyAgICAgICAgd2l0
aCB0aGUgYmVoYXZpb3IgaW4gdGhlIG5pZ2h0bGllcywgdGhlcmUncyBzdGlsbCByb29tIHRvIGlt
cHJvdmUgb24gaXQKKyAgICAgICAgd2l0aG91dCBjaGFuZ2luZyB0ZXh0IGNvbnRyb2wgd2lkdGhz
IGZvciBtb3JlIHRoYW4gb25lIHJlbGVhc2UuCisgICAgICAgIAorICAgICAgICBUaGUgb25seSBj
YXNlIHdoZXJlIHdlIHN0aWxsIGRvbid0IG1hdGNoIFdpbmRvd3MgaXMgaWYgbm8gZm9udC1zaXpl
IGlzCisgICAgICAgIHNldC4gVGhlIGRlZmF1bHQgZm9udC1zaXplIGZvciBmb3JtIGNvbnRyb2xz
IG9uIHRoZSBNYWMgaXMgc21hbGxlciBhbmQKKyAgICAgICAgdGh1cyB0ZXh0LWNvbnRyb2wgd2lk
dGhzIHdpbGwgYmUgc2xpZ2h0bHkgc21hbGxlci4KKyAgICAgICAgCisgICAgICAgIFRoZXJlIGlz
IG9uZSBrbm93biByZWdyZXNzaW9uIGZyb20gdGhpcyBjaGFuZ2U6IGh0dHA6Ly93d3cuYnVybGlu
Z3RvbmNvYXRmYWN0b3J5LmNvbS8KKyAgICAgICAgVGhhdCBzaXRlIGJyZWFrcyBiZWNhdXNlIHdl
IG1hdGNoIElFIHdpZHRocywgYnV0IGFsc28gaW5jbHVkZSBpbnRyaW5zaWMKKyAgICAgICAgbWFy
Z2lucy4KKworICAgICAgICBUaGUgZm9sbG93aW5nIHNpdGVzIGFyZSBmaXhlZCBieSB0aGlzIGNo
YW5nZSAoYXMgY29tcGFyZWQgdG8gdGhlCisgICAgICAgIFNhZmFyaSA0IGJlaGF2aW9yKToKKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3ODkKKyAg
ICAgICAgIC1odHRwOi8vd2FuZ3lvdWdhbWUud2FuZ3lvdS5jb20vICAoc2VlIHNjcmVlbnNob3Qg
aW4gYnVnIHRvIHNlZSB3aGVyZQorICAgICAgICAgICAgdG8gY2xpY2sgdG8gc2hvdyB0aGUgYnJv
a2VuIGVsZW1lbnQpCisgICAgICAgICAtaHR0cDovL3ZpcC5ib2tlZS5jb20vcmVnaXN0ZXIucGhw
CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTg0
CisgICAgICAgICAtaHR0cDovL2FuYWx5emVyLmZjMi5jb20vICAoaGVhZGVycyBpbiBsZWZ0IGNv
bHVtbiBvZmZzZXQgYnkgYSBmZXcgcGl4ZWxzKQorCisgICAgICAgIGh0dHA6Ly93ZW5odWEuYmFp
ZHUuY29tLworICAgICAgICBodHRwOi8vYm9vay5iYWlkdS5jb20vCisgICAgICAgIGh0dHA6Ly9o
b3RlbHMubGFzdG1pbnV0ZS5jb20uYXUvYWNjb21tb2RhdGlvbi9zZWFyY2hwYW5lbAorICAgICAg
ICBodHRwOi8vd3d3LmFkZS5zdGF0ZS5hei51cy8KKyAgICAgICAgaHR0cDovL3Nhdm9pci1tYWln
cmlyLjNzdWlzc2VzLmZyLyAgKGxvb2sgYXQgZm9ybSBoYXMgMyBpbnB1dCB0ZXh0IGJveGVzCisg
ICAgICAgICAgdGhhdCBhcmUgbXVjaCBzbWFsbGVyIHRoYW4gaW4gSUUvRkYvT3BlcmEpCisgICAg
ICAgIGh0dHA6Ly9sYWR5LmF0bmV4dC5jb20vdG9vbHMvYm1pLmNmbSAgKFRoZXJlJ3Mgc29tZSB3
aGl0ZXNwYWNlIGluCisgICAgICAgICAgYmV0d2VlbiB0aGUgaW1hZ2UgYW5kIHRoZSB0ZXh0Zmll
bGQgYXQgdGhlIGJvdHRvbSkKKyAgICAgICAgaHR0cDovL2Jsb2cub25ldC5wbC8gCisgICAgICAg
IGh0dHA6Ly93d3cudHJhbnNhdGhvbGlkYXlzLmNvbS8KKyAgICAgICAgaHR0cDovL2llZWV4cGxv
cmUuaWVlZS5vcmcvWHBsb3JlL2d1ZXN0aG9tZS5qc3AKKworICAgICAgICBObyBuZXcgdGVzdHMu
IENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHRDb250cm9sOjpoYXNWYWxpZEF2Z0NoYXJXaWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6Z2V0QXZnQ2hhcldpZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHRDb250cm9sOjpjYWxjUHJlZldpZHRocyk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbDo6c2NhbGVFbVRvVW5pdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbE11bHRpTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbE11
bHRpTGluZTo6Z2V0QXZnQ2hhcldpZHRoKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xNdWx0aUxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6Z2V0QXZnQ2hhcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6cHJlZmVycmVkQ29udGVudFdpZHRoKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmg6CisKIDIwMTAtMDEtMDUgIFlvbmcg
TGkgIDx5b2xpQHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFj
Lm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0K
aW5kZXggYzQ2YmExYy4uZTMzZjQ0YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0KKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0KQEAgLTI3OCwzMyArMjc4LDI1IEBAIHZvaWQg
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCiB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybUNoYXJXaWR0aEluaXQoKQogewogICAgIG1fYXZnQ2hhcldpZHRoID0gMC5mOwotCi0gICAg
Ly8gQ2FsY3VsYXRlIGF2Z0NoYXJXaWR0aCBhY2NvcmRpbmcgdG8gaHR0cDovL2RldmVsb3Blci5h
cHBsZS5jb20vdGV4dGZvbnRzL1RUUmVmTWFuL1JNMDYvQ2hhcDZPUzIuaHRtbAotICAgIC8vIFdl
IGNhbiB0cnkgZ3JhYmJpbmcgaXQgb3V0IG9mIHRoZSBPUy8yIHRhYmxlIG9yIHZpYSBBVFNGb250
R2V0SG9yaXpvbnRhbE1ldHJpY3MsIGJ1dAotICAgIC8vIEFUU0ZvbnRHZXRIb3Jpem9udGFsTWV0
cmljcyBuZXZlciBzZWVtcyB0byByZXR1cm4gYSBub24temVybyB2YWx1ZSBhbmQgdGhlIE9TLzIg
dGFibGUKLSAgICAvLyBjb250YWlucyB6ZXJvIGZvciBhIGxhcmdlIG51bWJlciBvZiBmb250cy4K
LSAgICBHbHlwaFBhZ2UqIGdseXBoUGFnZVplcm8gPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9v
dENoaWxkKHRoaXMsIDApLT5wYWdlKCk7Ci0gICAgaWYgKGdseXBoUGFnZVplcm8pIHsKLSAgICAg
ICAgc3RhdGljIGludCB3ZWlnaHRzW10gPSB7IDY0LCAxNCwgMjcsIDM1LCAxMDAsIDIwLCAxNCwg
NDIsIDYzLCAzLCA2LCAzNSwgMjAsIDU2LCA1NiwgMTcsIDQsIDQ5LCA1NiwgNzEsIDMxLCAxMCwg
MTgsIDMsIDE4LCAyLCAxNjYgfTsKLSAgICAgICAgaW50IG51bUdseXBocyA9IDI3OwotICAgICAg
ICBBU1NFUlQobnVtR2x5cGhzID09IHNpemVvZih3ZWlnaHRzKSAvIHNpemVvZihpbnQpKTsKLSAg
ICAgICAgLy8gQ29tcHV0ZSB0aGUgd2VpZ2h0ZWQgc3VtIG9mIHRoZSBzcGFjZSBjaGFyYWN0ZXIg
YW5kIHRoZSBsb3dlcmNhc2UgbGV0dGVycyBpbiB0aGUgTGF0aW4gYWxwaGFiZXQuCi0gICAgICAg
IGZsb2F0IHN1bSA9IDAuZjsKLSAgICAgICAgaW50IHRvdGFsV2VpZ2h0ID0gMDsKLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykgewotICAgICAgICAgICAgR2x5cGgg
Z2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoKGkgPCAyNiA/IGkg
KyAnYScgOiAnICcpKS5nbHlwaDsKLSAgICAgICAgICAgIGlmIChnbHlwaCkgewotICAgICAgICAg
ICAgICAgIHRvdGFsV2VpZ2h0ICs9IHdlaWdodHNbaV07Ci0gICAgICAgICAgICAgICAgc3VtICs9
IHdpZHRoRm9yR2x5cGgoZ2x5cGgpICogd2VpZ2h0c1tpXTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBpZiAoc3VtID4gMC5mICYmIHRvdGFsV2VpZ2h0ID4gMCkKLSAgICAgICAg
ICAgIG1fYXZnQ2hhcldpZHRoID0gc3VtIC8gdG90YWxXZWlnaHQ7CisgICAgbV9tYXhDaGFyV2lk
dGggPSAwLmY7CisgICAgCisgICAgQ0ZEYXRhUmVmIG9zMlRhYmxlID0gQ0dGb250Q29weVRhYmxl
Rm9yVGFnKG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpLCAnT1MvMicpOworICAgIGlmIChvczJUYWJs
ZSkgeworICAgICAgICBjb25zdCBVSW50OCogb3MyID0gQ0ZEYXRhR2V0Qnl0ZVB0cihvczJUYWJs
ZSk7CisgICAgICAgIFNJbnQxNiBvczJBdmdDaGFyV2lkdGggPSBvczJbMl0qMjU2ICsgb3MyWzNd
OworICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9IHNjYWxlRW1Ub1VuaXRzKG9zMkF2Z0NoYXJXaWR0
aCwgbV91bml0c1BlckVtKSAqIG1fcGxhdGZvcm1EYXRhLm1fc2l6ZTsKICAgICB9CiAKLSAgICBt
X21heENoYXJXaWR0aCA9IDAuZjsKLSAgICBpZiAobV9wbGF0Zm9ybURhdGEuZm9udCgpKQotICAg
ICAgICBtX21heENoYXJXaWR0aCA9IFttX3BsYXRmb3JtRGF0YS5mb250KCkgbWF4aW11bUFkdmFu
Y2VtZW50XS53aWR0aDsKKyAgICBDRkRhdGFSZWYgaGVhZFRhYmxlID0gQ0dGb250Q29weVRhYmxl
Rm9yVGFnKG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpLCAnaGVhZCcpOworICAgIGlmIChoZWFkVGFi
bGUpIHsKKyAgICAgICAgY29uc3QgVUludDgqIGhlYWQgPSBDRkRhdGFHZXRCeXRlUHRyKGhlYWRU
YWJsZSk7CisgICAgICAgIHVzaG9ydCB1eE1pbiA9IGhlYWRbMzZdKjI1NiArIGhlYWRbMzddOwor
ICAgICAgICB1c2hvcnQgdXhNYXggPSBoZWFkWzQwXSoyNTYgKyBoZWFkWzQxXTsKKyAgICAgICAg
U0ludDE2IHhNaW4gPSBzdGF0aWNfY2FzdDxTSW50MTY+KHV4TWluKTsKKyAgICAgICAgU0ludDE2
IHhNYXggPSBzdGF0aWNfY2FzdDxTSW50MTY+KHV4TWF4KTsKKyAgICAgICAgZmxvYXQgZGlmZiA9
IHN0YXRpY19jYXN0PGZsb2F0Pih4TWF4IC0geE1pbik7CisgICAgICAgIG1fbWF4Q2hhcldpZHRo
ID0gc2NhbGVFbVRvVW5pdHMoZGlmZiwgbV91bml0c1BlckVtKSAqIG1fcGxhdGZvcm1EYXRhLm1f
c2l6ZTsKKyAgICB9CiAKICAgICAvLyBGYWxsYmFjayB0byBhIGNyb3NzLXBsYXRmb3JtIGVzdGlt
YXRlLCB3aGljaCB3aWxsIHBvcHVsYXRlIHRoZXNlIHZhbHVlcyBpZiB0aGV5IGFyZSBub24tcG9z
aXRpdmUuCiAgICAgaW5pdENoYXJXaWR0aHMoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sLmNwcAppbmRleCA2ZTNjYWJiLi5jYWFlYWY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2wuY3BwCkBAIC00NTksNiArNDU5LDczIEBAIEludFJlY3QgUmVuZGVyVGV4
dENvbnRyb2w6OmNvbnRyb2xDbGlwUmVjdChpbnQgdHgsIGludCB0eSkgY29uc3QKICAgICByZXR1
cm4gY2xpcFJlY3Q7CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyKiBmb250RmFtaWxpZXNXaXRoSW52
YWxpZENoYXJXaWR0aFtdID0geworICAgICJBbWVyaWNhbiBUeXBld3JpdGVyIiwKKyAgICAiQXJp
YWwgSGVicmV3IiwKKyAgICAiQ2hhbGtib2FyZCIsCisgICAgIkNvY2hpbiIsCisgICAgIkNvcnNp
dmEgSGVicmV3IiwKKyAgICAiQ291cmllciIsCisgICAgIkV1cGhlbWlhIFVDQVMiLAorICAgICJH
ZW5ldmEiLAorICAgICJHaWxsIFNhbnMiLAorICAgICJIZWkiLAorICAgICJIZWx2ZXRpY2EiLAor
ICAgICJIb2VmbGVyIFRleHQiLAorICAgICJJbmFpTWF0aGkiLAorICAgICJLYWkiLAorICAgICJM
dWNpZGEgR3JhbmRlIiwKKyAgICAiTWFya2VyIEZlbHQiLAorICAgICJNb25hY28iLAorICAgICJN
c2h0YWthbiIsCisgICAgIk5ldyBQZW5pbmltIE1UIiwKKyAgICAiT3Nha2EiLAorICAgICJSYWFu
YW5hIiwKKyAgICAiU1RIZWl0aSIsCisgICAgIlN5bWJvbCIsCisgICAgIlRpbWVzIiwKKyAgICAi
QXBwbGUgQnJhaWxsZSIsCisgICAgIkFwcGxlIExpR290aGljIiwKKyAgICAiQXBwbGUgTGlTdW5n
IiwKKyAgICAiQXBwbGUgU3ltYm9scyIsCisgICAgIkFwcGxlR290aGljIiwKKyAgICAiQXBwbGVN
eXVuZ2pvIiwKKyAgICAiI0d1bmdTZW8iLAorICAgICIjSGVhZExpbmVBIiwKKyAgICAiI1BDTXl1
bmdqbyIsCisgICAgIiNQaWxHaSIsCit9OworCisvLyBGb3IgZm9udCBmYW1pbGllcyB3aGVyZSBh
bnkgb2YgdGhlIGZvbnRzIGRvbid0IGhhdmUgYSB2YWxpZCBlbnRyeSBpbiB0aGUgT1MvMiB0YWJs
ZQorLy8gZm9yIGF2Z0NoYXJXaWR0aCwgZmFsbGJhY2sgdG8gdGhlIGxlZ2FjeSB3ZWJraXQgYmVo
YXZpb3Igb2YgZ2V0dGluZyB0aGUgYXZnQ2hhcldpZHRoCisvLyBmcm9tIHRoZSB3aWR0aCBvZiBh
ICcwJy4gVGhpcyBvbmx5IHNlZW1zIHRvIGFwcGx5IHRvIGEgZml4ZWQgbnVtYmVyIG9mIE1hYyBm
b250cywKKy8vIGJ1dCwgaW4gb3JkZXIgdG8gZ2V0IHNpbWlsYXIgcmVuZGVyaW5nIGFjcm9zcyBw
bGF0Zm9ybXMsIHdlIGRvIHRoaXMgY2hlY2sgZm9yCisvLyBhbGwgcGxhdGZvcm1zLgorYm9vbCBS
ZW5kZXJUZXh0Q29udHJvbDo6aGFzVmFsaWRBdmdDaGFyV2lkdGgoQXRvbWljU3RyaW5nIGZhbWls
eSkKK3sKKyAgICBzdGF0aWMgSGFzaE1hcDxBdG9taWNTdHJpbmcsIGJvb2w+KiBmb250RmFtaWxp
ZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcCA9IDA7CisgICAgCisgICAgaWYgKCFmb250RmFtaWxp
ZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcCkgeworICAgICAgICBmb250RmFtaWxpZXNXaXRoSW52
YWxpZENoYXJXaWR0aE1hcCA9IG5ldyBIYXNoTWFwPEF0b21pY1N0cmluZywgYm9vbD47CisgICAg
ICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZW9mKGZvbnRGYW1pbGll
c1dpdGhJbnZhbGlkQ2hhcldpZHRoKSAvIHNpemVvZihmb250RmFtaWxpZXNXaXRoSW52YWxpZENo
YXJXaWR0aFswXSk7IGkrKykKKyAgICAgICAgICAgIGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hh
cldpZHRoTWFwLT5zZXQoQXRvbWljU3RyaW5nKGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldp
ZHRoW2ldKSwgdHJ1ZSk7CisgICAgfQorCisgICAgcmV0dXJuICFmb250RmFtaWxpZXNXaXRoSW52
YWxpZENoYXJXaWR0aE1hcC0+Z2V0KGZhbWlseSk7Cit9CisKK2Zsb2F0IFJlbmRlclRleHRDb250
cm9sOjpnZXRBdmdDaGFyV2lkdGgoQXRvbWljU3RyaW5nIGZhbWlseSkKK3sKKyAgICBpZiAoaGFz
VmFsaWRBdmdDaGFyV2lkdGgoZmFtaWx5KSkKKyAgICAgICAgcmV0dXJuIHJvdW5kZihzdHlsZSgp
LT5mb250KCkucHJpbWFyeUZvbnQoKS0+YXZnQ2hhcldpZHRoKCkpOworICAgIGVsc2UgeworICAg
ICAgICBjb25zdCBVQ2hhciBjaCA9ICcwJzsgCisgICAgICAgIHJldHVybiBzdHlsZSgpLT5mb250
KCkuZmxvYXRXaWR0aChUZXh0UnVuKCZjaCwgMSwgZmFsc2UsIDAsIDAsIGZhbHNlLCBmYWxzZSwg
ZmFsc2UpKTsKKyAgICB9Cit9CisgICAgCisKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmNhbGNQ
cmVmV2lkdGhzKCkKIHsKICAgICBBU1NFUlQocHJlZldpZHRoc0RpcnR5KCkpOwpAQCAtNDcwLDgg
KzUzNyw4IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmNhbGNQcmVmV2lkdGhzKCkKICAgICAg
ICAgbV9taW5QcmVmV2lkdGggPSBtX21heFByZWZXaWR0aCA9IGNhbGNDb250ZW50Qm94V2lkdGgo
c3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gVXNlIGF2
ZXJhZ2UgY2hhcmFjdGVyIHdpZHRoLiBNYXRjaGVzIElFLgotICAgICAgICBmbG9hdCBjaGFyV2lk
dGggPSBzdHlsZSgpLT5mb250KCkucHJpbWFyeUZvbnQoKS0+YXZnQ2hhcldpZHRoKCk7Ci0gICAg
ICAgIG1fbWF4UHJlZldpZHRoID0gcHJlZmVycmVkQ29udGVudFdpZHRoKGNoYXJXaWR0aCkgKyBt
X2lubmVyVGV4dC0+cmVuZGVyQm94KCktPnBhZGRpbmdMZWZ0KCkgKyBtX2lubmVyVGV4dC0+cmVu
ZGVyQm94KCktPnBhZGRpbmdSaWdodCgpOworICAgICAgICBBdG9taWNTdHJpbmcgZmFtaWx5ID0g
c3R5bGUoKS0+Zm9udCgpLmZhbWlseSgpLmZhbWlseSgpOworICAgICAgICBtX21heFByZWZXaWR0
aCA9IHByZWZlcnJlZENvbnRlbnRXaWR0aChnZXRBdmdDaGFyV2lkdGgoZmFtaWx5KSkgKyBtX2lu
bmVyVGV4dC0+cmVuZGVyQm94KCktPnBhZGRpbmdMZWZ0KCkgKyBtX2lubmVyVGV4dC0+cmVuZGVy
Qm94KCktPnBhZGRpbmdSaWdodCgpOwogICAgIH0KIAogICAgIGlmIChzdHlsZSgpLT5taW5XaWR0
aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkgPiAwKSB7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaAppbmRleCBkMWYzNzQ5Li4wYWRjZThmIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCisrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgKQEAgLTc0LDYgKzc0LDEyIEBAIHByb3Rl
Y3RlZDoKICAgICBpbnQgdGV4dEJsb2NrV2lkdGgoKSBjb25zdDsKICAgICBpbnQgdGV4dEJsb2Nr
SGVpZ2h0KCkgY29uc3Q7CiAKKyAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIHVuaXRzUGVyRW0gdmFs
dWUgZm9yIE1TIFNoZWxsIERsZyBhbmQgQ291cmllciBOZXcgZnJvbSB0aGUgImhlYWQiIGZvbnQg
dGFibGUuCisgICAgc3RhdGljIGNvbnN0IGZsb2F0IHVuaXRzUGVyRW0gPSAyMDQ4LjBmOworICAg
IGZsb2F0IHNjYWxlRW1Ub1VuaXRzKGludCB4KSBjb25zdCB7IHJldHVybiByb3VuZGYoc3R5bGUo
KS0+Zm9udCgpLnNpemUoKSAqIHggLyB1bml0c1BlckVtKTsgfQorCisgICAgc3RhdGljIGJvb2wg
aGFzVmFsaWRBdmdDaGFyV2lkdGgoQXRvbWljU3RyaW5nIGZhbWlseSk7CisgICAgdmlydHVhbCBm
bG9hdCBnZXRBdmdDaGFyV2lkdGgoQXRvbWljU3RyaW5nIGZhbWlseSk7CiAgICAgdmlydHVhbCBp
bnQgcHJlZmVycmVkQ29udGVudFdpZHRoKGZsb2F0IGNoYXJXaWR0aCkgY29uc3QgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RDb250cm9sSGVpZ2h0QmFzZWRPbkxpbmVIZWlnaHQoaW50IGxp
bmVIZWlnaHQpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2FjaGVTZWxlY3Rpb24oaW50IHN0YXJ0
LCBpbnQgZW5kKSA9IDA7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbE11bHRpTGluZS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bE11bHRpTGluZS5jcHAKaW5kZXggZGZjOTY2YS4uMTQ0NmI0ZSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCisrKyBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcApAQCAtNzcsNiArNzcsMTcg
QEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6Zm9yd2FyZEV2ZW50KEV2ZW50KiBl
dmVudCkKICAgICBSZW5kZXJUZXh0Q29udHJvbDo6Zm9yd2FyZEV2ZW50KGV2ZW50KTsKIH0KIAor
ZmxvYXQgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6OmdldEF2Z0NoYXJXaWR0aChBdG9taWNT
dHJpbmcgZmFtaWx5KQoreworICAgIC8vIFNpbmNlIEx1Y2lkYSBHcmFuZGUgaXMgdGhlIGRlZmF1
bHQgZm9udCwgd2Ugd2FudCB0aGlzIHRvIG1hdGNoIHRoZSB3aWR0aAorICAgIC8vIG9mIENvdXJp
ZXIgTmV3LCB0aGUgZGVmYXVsdCBmb250IGZvciB0ZXh0YXJlYXMgaW4gSUUsIEZpcmVmb3ggYW5k
IFNhZmFyaSBXaW4uCisgICAgLy8gMTIyOSBpcyB0aGUgYXZnQ2hhcldpZHRoIHZhbHVlIGluIHRo
ZSBPUy8yIHRhYmxlIGZvciBDb3VyaWVyIE5ldy4KKyAgICBpZiAoZmFtaWx5ID09IEF0b21pY1N0
cmluZygiTHVjaWRhIEdyYW5kZSIpKQorICAgICAgICByZXR1cm4gc2NhbGVFbVRvVW5pdHMoMTIy
OSk7CisgICAgZWxzZSAKKyAgICAgICAgcmV0dXJuIFJlbmRlclRleHRDb250cm9sOjpnZXRBdmdD
aGFyV2lkdGgoZmFtaWx5KTsKK30KKwogaW50IFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpw
cmVmZXJyZWRDb250ZW50V2lkdGgoZmxvYXQgY2hhcldpZHRoKSBjb25zdAogewogICAgIGludCBm
YWN0b3IgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50Kj4obm9kZSgpKS0+Y29scygp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmUuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmgKaW5k
ZXggMzM3MWE4Zi4uZmJjYTMwOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmUuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbE11bHRpTGluZS5oCkBAIC00MCw2ICs0MCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAKKyAgICB2
aXJ0dWFsIGZsb2F0IGdldEF2Z0NoYXJXaWR0aChBdG9taWNTdHJpbmcgZmFtaWx5KTsKICAgICB2
aXJ0dWFsIGludCBwcmVmZXJyZWRDb250ZW50V2lkdGgoZmxvYXQgY2hhcldpZHRoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0Q29udHJvbEhlaWdodEJhc2VkT25MaW5lSGVpZ2h0KGlu
dCBsaW5lSGVpZ2h0KTsKICAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmly
c3RMaW5lLCBib29sIGlzUm9vdExpbmVCb3gpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKaW5kZXggZTMzNDJkZC4uNWM0YTNi
NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwCkBAIC0zNzQsNyArMzc0LDE5IEBAIGludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OnRleHRCbG9ja1dpZHRoKCkgY29uc3QKIAogICAgIHJldHVybiB3aWR0aDsKIH0KLQorICAg
IAorZmxvYXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpnZXRBdmdDaGFyV2lkdGgoQXRv
bWljU3RyaW5nIGZhbWlseSkKK3sKKyAgICAvLyBTaW5jZSBMdWNpZGEgR3JhbmRlIGlzIHRoZSBk
ZWZhdWx0IGZvbnQsIHdlIHdhbnQgdGhpcyB0byBtYXRjaCB0aGUgd2lkdGgKKyAgICAvLyBvZiBN
UyBTaGVsbCBEbGcsIHRoZSBkZWZhdWx0IGZvbnQgZm9yIHRleHRhcmVhcyBpbiBGaXJlZm94LCBT
YWZhcmkgV2luIGFuZAorICAgIC8vIElFIGZvciBzb21lIGVuY29kaW5ncyAoaW4gSUUsIHRoZSBk
ZWZhdWx0IGZvbnQgaXMgZW5jb2Rpbmcgc3BlY2lmaWMpLgorICAgIC8vIDkwMSBpcyB0aGUgYXZn
Q2hhcldpZHRoIHZhbHVlIGluIHRoZSBPUy8yIHRhYmxlIGZvciBNUyBTaGVsbCBEbGcuCisgICAg
aWYgKGZhbWlseSA9PSBBdG9taWNTdHJpbmcoIkx1Y2lkYSBHcmFuZGUiKSkKKyAgICAgICAgcmV0
dXJuIHNjYWxlRW1Ub1VuaXRzKDkwMSk7CisgICAgZWxzZSAKKyAgICAgICAgcmV0dXJuIFJlbmRl
clRleHRDb250cm9sOjpnZXRBdmdDaGFyV2lkdGgoZmFtaWx5KTsKK30KKyAgICAKIGludCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnByZWZlcnJlZENvbnRlbnRXaWR0aChmbG9hdCBjaGFy
V2lkdGgpIGNvbnN0CiB7CiAgICAgaW50IGZhY3RvciA9IGlucHV0RWxlbWVudCgpLT5zaXplKCk7
CkBAIC0zODMsOCArMzk1LDIwIEBAIGludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnBy
ZWZlcnJlZENvbnRlbnRXaWR0aChmbG9hdCBjaGFyV2lkdGgpIGNvbnN0CiAKICAgICBpbnQgcmVz
dWx0ID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsZihjaGFyV2lkdGggKiBmYWN0b3IpKTsKIAorICAg
IGZsb2F0IG1heENoYXJXaWR0aCA9IDAuZjsKKyAgICBBdG9taWNTdHJpbmcgZmFtaWx5ID0gc3R5
bGUoKS0+Zm9udCgpLmZhbWlseSgpLmZhbWlseSgpOworICAgIC8vIFNpbmNlIEx1Y2lkYSBHcmFu
ZGUgaXMgdGhlIGRlZmF1bHQgZm9udCwgd2Ugd2FudCB0aGlzIHRvIG1hdGNoIHRoZSB3aWR0aAor
ICAgIC8vIG9mIE1TIFNoZWxsIERsZywgdGhlIGRlZmF1bHQgZm9udCBmb3IgdGV4dGFyZWFzIGlu
IEZpcmVmb3gsIFNhZmFyaSBXaW4gYW5kCisgICAgLy8gSUUgZm9yIHNvbWUgZW5jb2RpbmdzIChp
biBJRSwgdGhlIGRlZmF1bHQgZm9udCBpcyBlbmNvZGluZyBzcGVjaWZpYykuCisgICAgLy8gNDAy
NyBpcyB0aGUgKHhNYXggLSB4TWluKSB2YWx1ZSBpbiB0aGUgImhlYWQiIGZvbnQgdGFibGUgZm9y
IE1TIFNoZWxsIERsZy4KKyAgICBpZiAoZmFtaWx5ID09IEF0b21pY1N0cmluZygiTHVjaWRhIEdy
YW5kZSIpKQorICAgICAgICBtYXhDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyg0MDI3KTsKKyAg
ICBlbHNlIGlmIChoYXNWYWxpZEF2Z0NoYXJXaWR0aChmYW1pbHkpKQorICAgICAgICBtYXhDaGFy
V2lkdGggPSByb3VuZGYoc3R5bGUoKS0+Zm9udCgpLnByaW1hcnlGb250KCktPm1heENoYXJXaWR0
aCgpKTsKKwogICAgIC8vIEZvciB0ZXh0IGlucHV0cywgSUUgYWRkcyBzb21lIGV4dHJhIHdpZHRo
LgotICAgIHJlc3VsdCArPSBzdHlsZSgpLT5mb250KCkucHJpbWFyeUZvbnQoKS0+bWF4Q2hhcldp
ZHRoKCkgLSBjaGFyV2lkdGg7CisgICAgaWYgKG1heENoYXJXaWR0aCA+IDAuZikKKyAgICAgICAg
cmVzdWx0ICs9IG1heENoYXJXaWR0aCAtIGNoYXJXaWR0aDsKIAogICAgIGlmIChSZW5kZXJCb3gq
IHJlc3VsdHNSZW5kZXJlciA9IG1fcmVzdWx0c0J1dHRvbiA/IG1fcmVzdWx0c0J1dHRvbi0+cmVu
ZGVyQm94KCkgOiAwKQogICAgICAgICByZXN1bHQgKz0gcmVzdWx0c1JlbmRlcmVyLT5ib3JkZXJM
ZWZ0KCkgKyByZXN1bHRzUmVuZGVyZXItPmJvcmRlclJpZ2h0KCkgKwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmggYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAppbmRleCBlNDdkODdlLi45Mjcz
NDhiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuaApAQCAtNzUsNiArNzUsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwo
U2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEu
MGYsIE5vZGUqKiBzdG9wTm9kZSA9IDApOwogCiAgICAgaW50IHRleHRCbG9ja1dpZHRoKCkgY29u
c3Q7CisgICAgdmlydHVhbCBmbG9hdCBnZXRBdmdDaGFyV2lkdGgoQXRvbWljU3RyaW5nIGZhbWls
eSk7CiAgICAgdmlydHVhbCBpbnQgcHJlZmVycmVkQ29udGVudFdpZHRoKGZsb2F0IGNoYXJXaWR0
aCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdENvbnRyb2xIZWlnaHRCYXNlZE9uTGlu
ZUhlaWdodChpbnQgbGluZUhlaWdodCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45925</attachid>
            <date>2010-01-05 13:18:10 -0800</date>
            <delta_ts>2010-02-04 15:57:39 -0800</delta_ts>
            <desc>New results for Leopard. Still need to get results for Tiger/Windows.</desc>
            <filename>0001-Layout-test-rebaselines-for-Leopard-still-need-to-d.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Ojan Vafai">ojan</attacher>
            
              <data encoding="base64"></data>
<flag name="review"
          id="28091"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45929</attachid>
            <date>2010-01-05 13:28:25 -0800</date>
            <delta_ts>2010-01-08 16:03:43 -0800</delta_ts>
            <desc>Improve text control intrinsic widths. Linter errors fixed.</desc>
            <filename>bug-25566-20100105132824.patch</filename>
            <type>text/plain</type>
            <size>15307</size>
            <attacher name="Ojan Vafai">ojan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzY5ZmQ2Zi4uNmZjYzEyNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MSBAQAorMjAxMC0wMS0wNSAgT2phbiBWYWZhaSAg
PG9qYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEltcHJvdmUgdGV4dCBjb250cm9sIGludHJpbnNpYyB3aWR0aHMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTU2NgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU1ODEKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1OTU4CisKKyAgICAgICAg
Rm9yIE1hYyBmb250cyB0aGF0IGhhdmUgaW52YWxpZCBhdmdDaGFyV2lkdGggZW50cmllcyBpbiB0
aGUgT1MvMiB0YWJsZSwKKyAgICAgICAgZmFsbGJhY2sgdG8gdGhlIFNhZmFyaSA0LSBiZWhhdmlv
ciBvZiB1c2luZyB0aGUgd2lkdGggb2YgYSB6ZXJvLiBGb3Igb3RoZXIKKyAgICAgICAgZm9udHMs
IG1ha2UgTWFjIG1hdGNoIFdpbmRvd3MgKGFuZCB0aHVzIElFKSBtZXRyaWNzLgorICAgICAgICAK
KyAgICAgICAgVGhpcyBpcyBqdXN0IGZvciBjb21wdXRpbmcgdGhlIHdpZHRoIG9mIHRleHQgY29u
dHJvbHMgYmFzZWQgb2ZmIHRoZQorICAgICAgICBzaXplL2NvbHMgYXR0cmlidXRlcywgc28gdGhl
cmUgYXJlIGEgbnVtYmVyIG9mIHNpdGVzIHRoYXQgZGVwZW5kIG9uCisgICAgICAgIElFIG1ldHJp
Y3MgKHNlZSBiZWxvdykuCisKKyAgICAgICAgTHVjaWRhIEdyYW5kZSBpcyBoYXJkLWNvZGVkIHRv
IG1hdGNoIE1TIFNoZWxsIERsZyBmb3IgaW5wdXRzIGFuZAorICAgICAgICBDb3VyaWVyIE5ldyBm
b3IgdGV4dGFyZWFzIGluIG9yZGVyIHRvIG1hdGNoIFNhZmFyaSBXaW4sIEZpcmVmb3ggYW5kLCBp
bgorICAgICAgICBzb21lIGNhc2VzIElFIChJRSB1c2VzIGRpZmZlcmVudCBkZWZhdWx0IGZvbnRz
IGRlcGVuZGluZyBvbiBlbmNvZGluZykuCisgICAgICAgIEEgbnVtYmVyIG9mIHRoZSBmaXhlZCBz
aXRlcyBsaXN0ZWQgYmVsb3cgZGVwZW5kIG9uIHRoaXMuCisKKyAgICAgICAgVGhpcyBpbXByb3Zl
cyBvbiB0aGUgYmVoYXZpb3IgaW4gdGhlIGN1cnJlbnQgbmlnaHRsaWVzIGJlY2F1c2UgaXQKKyAg
ICAgICAgcmVkdWNlcyB0aGUgbGlrZWxpaG9vZCBvZiByZWdyZXNzaW9ucyBmb3IgTWFjIGZvbnRz
IGFuZCBtb3JlIGFjY3VyYXRlbHkKKyAgICAgICAgbWF0Y2hlcyBJRSBtZXRyaWNzIGZvciBvdGhl
ciBmb250cy4gU2luY2Ugbm8gU2FmYXJpIGJyb3dzZXIgaGFzIHNoaXBwZWQKKyAgICAgICAgd2l0
aCB0aGUgYmVoYXZpb3IgaW4gdGhlIG5pZ2h0bGllcywgdGhlcmUncyBzdGlsbCByb29tIHRvIGlt
cHJvdmUgb24gaXQKKyAgICAgICAgd2l0aG91dCBjaGFuZ2luZyB0ZXh0IGNvbnRyb2wgd2lkdGhz
IGZvciBtb3JlIHRoYW4gb25lIHJlbGVhc2UuCisgICAgICAgIAorICAgICAgICBUaGUgb25seSBj
YXNlIHdoZXJlIHdlIHN0aWxsIGRvbid0IG1hdGNoIFdpbmRvd3MgaXMgaWYgbm8gZm9udC1zaXpl
IGlzCisgICAgICAgIHNldC4gVGhlIGRlZmF1bHQgZm9udC1zaXplIGZvciBmb3JtIGNvbnRyb2xz
IG9uIHRoZSBNYWMgaXMgc21hbGxlciBhbmQKKyAgICAgICAgdGh1cyB0ZXh0LWNvbnRyb2wgd2lk
dGhzIHdpbGwgYmUgc2xpZ2h0bHkgc21hbGxlci4KKyAgICAgICAgCisgICAgICAgIFRoZXJlIGlz
IG9uZSBrbm93biByZWdyZXNzaW9uIGZyb20gdGhpcyBjaGFuZ2U6IGh0dHA6Ly93d3cuYnVybGlu
Z3RvbmNvYXRmYWN0b3J5LmNvbS8KKyAgICAgICAgVGhhdCBzaXRlIGJyZWFrcyBiZWNhdXNlIHdl
IG1hdGNoIElFIHdpZHRocywgYnV0IGFsc28gaW5jbHVkZSBpbnRyaW5zaWMKKyAgICAgICAgbWFy
Z2lucy4KKworICAgICAgICBUaGUgZm9sbG93aW5nIHNpdGVzIGFyZSBmaXhlZCBieSB0aGlzIGNo
YW5nZSAoYXMgY29tcGFyZWQgdG8gdGhlCisgICAgICAgIFNhZmFyaSA0IGJlaGF2aW9yKToKKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3ODkKKyAg
ICAgICAgIC1odHRwOi8vd2FuZ3lvdWdhbWUud2FuZ3lvdS5jb20vICAoc2VlIHNjcmVlbnNob3Qg
aW4gYnVnIHRvIHNlZSB3aGVyZQorICAgICAgICAgICAgdG8gY2xpY2sgdG8gc2hvdyB0aGUgYnJv
a2VuIGVsZW1lbnQpCisgICAgICAgICAtaHR0cDovL3ZpcC5ib2tlZS5jb20vcmVnaXN0ZXIucGhw
CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTg0
CisgICAgICAgICAtaHR0cDovL2FuYWx5emVyLmZjMi5jb20vICAoaGVhZGVycyBpbiBsZWZ0IGNv
bHVtbiBvZmZzZXQgYnkgYSBmZXcgcGl4ZWxzKQorCisgICAgICAgIGh0dHA6Ly93ZW5odWEuYmFp
ZHUuY29tLworICAgICAgICBodHRwOi8vYm9vay5iYWlkdS5jb20vCisgICAgICAgIGh0dHA6Ly9o
b3RlbHMubGFzdG1pbnV0ZS5jb20uYXUvYWNjb21tb2RhdGlvbi9zZWFyY2hwYW5lbAorICAgICAg
ICBodHRwOi8vd3d3LmFkZS5zdGF0ZS5hei51cy8KKyAgICAgICAgaHR0cDovL3Nhdm9pci1tYWln
cmlyLjNzdWlzc2VzLmZyLyAgKGxvb2sgYXQgZm9ybSBoYXMgMyBpbnB1dCB0ZXh0IGJveGVzCisg
ICAgICAgICAgdGhhdCBhcmUgbXVjaCBzbWFsbGVyIHRoYW4gaW4gSUUvRkYvT3BlcmEpCisgICAg
ICAgIGh0dHA6Ly9sYWR5LmF0bmV4dC5jb20vdG9vbHMvYm1pLmNmbSAgKFRoZXJlJ3Mgc29tZSB3
aGl0ZXNwYWNlIGluCisgICAgICAgICAgYmV0d2VlbiB0aGUgaW1hZ2UgYW5kIHRoZSB0ZXh0Zmll
bGQgYXQgdGhlIGJvdHRvbSkKKyAgICAgICAgaHR0cDovL2Jsb2cub25ldC5wbC8gCisgICAgICAg
IGh0dHA6Ly93d3cudHJhbnNhdGhvbGlkYXlzLmNvbS8KKyAgICAgICAgaHR0cDovL2llZWV4cGxv
cmUuaWVlZS5vcmcvWHBsb3JlL2d1ZXN0aG9tZS5qc3AKKworICAgICAgICBObyBuZXcgdGVzdHMu
IENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHRDb250cm9sOjpoYXNWYWxpZEF2Z0NoYXJXaWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6Z2V0QXZnQ2hhcldpZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHRDb250cm9sOjpjYWxjUHJlZldpZHRocyk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbDo6c2NhbGVFbVRvVW5pdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbE11bHRpTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbE11
bHRpTGluZTo6Z2V0QXZnQ2hhcldpZHRoKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xNdWx0aUxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6Z2V0QXZnQ2hhcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6cHJlZmVycmVkQ29udGVudFdpZHRoKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmg6CisKIDIwMTAtMDEtMDUgIFlvbmcg
TGkgIDx5b2xpQHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFj
Lm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0K
aW5kZXggYzQ2YmExYy4uZTMzZjQ0YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0KKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0KQEAgLTI3OCwzMyArMjc4LDI1IEBAIHZvaWQg
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCiB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybUNoYXJXaWR0aEluaXQoKQogewogICAgIG1fYXZnQ2hhcldpZHRoID0gMC5mOwotCi0gICAg
Ly8gQ2FsY3VsYXRlIGF2Z0NoYXJXaWR0aCBhY2NvcmRpbmcgdG8gaHR0cDovL2RldmVsb3Blci5h
cHBsZS5jb20vdGV4dGZvbnRzL1RUUmVmTWFuL1JNMDYvQ2hhcDZPUzIuaHRtbAotICAgIC8vIFdl
IGNhbiB0cnkgZ3JhYmJpbmcgaXQgb3V0IG9mIHRoZSBPUy8yIHRhYmxlIG9yIHZpYSBBVFNGb250
R2V0SG9yaXpvbnRhbE1ldHJpY3MsIGJ1dAotICAgIC8vIEFUU0ZvbnRHZXRIb3Jpem9udGFsTWV0
cmljcyBuZXZlciBzZWVtcyB0byByZXR1cm4gYSBub24temVybyB2YWx1ZSBhbmQgdGhlIE9TLzIg
dGFibGUKLSAgICAvLyBjb250YWlucyB6ZXJvIGZvciBhIGxhcmdlIG51bWJlciBvZiBmb250cy4K
LSAgICBHbHlwaFBhZ2UqIGdseXBoUGFnZVplcm8gPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9v
dENoaWxkKHRoaXMsIDApLT5wYWdlKCk7Ci0gICAgaWYgKGdseXBoUGFnZVplcm8pIHsKLSAgICAg
ICAgc3RhdGljIGludCB3ZWlnaHRzW10gPSB7IDY0LCAxNCwgMjcsIDM1LCAxMDAsIDIwLCAxNCwg
NDIsIDYzLCAzLCA2LCAzNSwgMjAsIDU2LCA1NiwgMTcsIDQsIDQ5LCA1NiwgNzEsIDMxLCAxMCwg
MTgsIDMsIDE4LCAyLCAxNjYgfTsKLSAgICAgICAgaW50IG51bUdseXBocyA9IDI3OwotICAgICAg
ICBBU1NFUlQobnVtR2x5cGhzID09IHNpemVvZih3ZWlnaHRzKSAvIHNpemVvZihpbnQpKTsKLSAg
ICAgICAgLy8gQ29tcHV0ZSB0aGUgd2VpZ2h0ZWQgc3VtIG9mIHRoZSBzcGFjZSBjaGFyYWN0ZXIg
YW5kIHRoZSBsb3dlcmNhc2UgbGV0dGVycyBpbiB0aGUgTGF0aW4gYWxwaGFiZXQuCi0gICAgICAg
IGZsb2F0IHN1bSA9IDAuZjsKLSAgICAgICAgaW50IHRvdGFsV2VpZ2h0ID0gMDsKLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykgewotICAgICAgICAgICAgR2x5cGgg
Z2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoKGkgPCAyNiA/IGkg
KyAnYScgOiAnICcpKS5nbHlwaDsKLSAgICAgICAgICAgIGlmIChnbHlwaCkgewotICAgICAgICAg
ICAgICAgIHRvdGFsV2VpZ2h0ICs9IHdlaWdodHNbaV07Ci0gICAgICAgICAgICAgICAgc3VtICs9
IHdpZHRoRm9yR2x5cGgoZ2x5cGgpICogd2VpZ2h0c1tpXTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBpZiAoc3VtID4gMC5mICYmIHRvdGFsV2VpZ2h0ID4gMCkKLSAgICAgICAg
ICAgIG1fYXZnQ2hhcldpZHRoID0gc3VtIC8gdG90YWxXZWlnaHQ7CisgICAgbV9tYXhDaGFyV2lk
dGggPSAwLmY7CisgICAgCisgICAgQ0ZEYXRhUmVmIG9zMlRhYmxlID0gQ0dGb250Q29weVRhYmxl
Rm9yVGFnKG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpLCAnT1MvMicpOworICAgIGlmIChvczJUYWJs
ZSkgeworICAgICAgICBjb25zdCBVSW50OCogb3MyID0gQ0ZEYXRhR2V0Qnl0ZVB0cihvczJUYWJs
ZSk7CisgICAgICAgIFNJbnQxNiBvczJBdmdDaGFyV2lkdGggPSBvczJbMl0qMjU2ICsgb3MyWzNd
OworICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9IHNjYWxlRW1Ub1VuaXRzKG9zMkF2Z0NoYXJXaWR0
aCwgbV91bml0c1BlckVtKSAqIG1fcGxhdGZvcm1EYXRhLm1fc2l6ZTsKICAgICB9CiAKLSAgICBt
X21heENoYXJXaWR0aCA9IDAuZjsKLSAgICBpZiAobV9wbGF0Zm9ybURhdGEuZm9udCgpKQotICAg
ICAgICBtX21heENoYXJXaWR0aCA9IFttX3BsYXRmb3JtRGF0YS5mb250KCkgbWF4aW11bUFkdmFu
Y2VtZW50XS53aWR0aDsKKyAgICBDRkRhdGFSZWYgaGVhZFRhYmxlID0gQ0dGb250Q29weVRhYmxl
Rm9yVGFnKG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpLCAnaGVhZCcpOworICAgIGlmIChoZWFkVGFi
bGUpIHsKKyAgICAgICAgY29uc3QgVUludDgqIGhlYWQgPSBDRkRhdGFHZXRCeXRlUHRyKGhlYWRU
YWJsZSk7CisgICAgICAgIHVzaG9ydCB1eE1pbiA9IGhlYWRbMzZdKjI1NiArIGhlYWRbMzddOwor
ICAgICAgICB1c2hvcnQgdXhNYXggPSBoZWFkWzQwXSoyNTYgKyBoZWFkWzQxXTsKKyAgICAgICAg
U0ludDE2IHhNaW4gPSBzdGF0aWNfY2FzdDxTSW50MTY+KHV4TWluKTsKKyAgICAgICAgU0ludDE2
IHhNYXggPSBzdGF0aWNfY2FzdDxTSW50MTY+KHV4TWF4KTsKKyAgICAgICAgZmxvYXQgZGlmZiA9
IHN0YXRpY19jYXN0PGZsb2F0Pih4TWF4IC0geE1pbik7CisgICAgICAgIG1fbWF4Q2hhcldpZHRo
ID0gc2NhbGVFbVRvVW5pdHMoZGlmZiwgbV91bml0c1BlckVtKSAqIG1fcGxhdGZvcm1EYXRhLm1f
c2l6ZTsKKyAgICB9CiAKICAgICAvLyBGYWxsYmFjayB0byBhIGNyb3NzLXBsYXRmb3JtIGVzdGlt
YXRlLCB3aGljaCB3aWxsIHBvcHVsYXRlIHRoZXNlIHZhbHVlcyBpZiB0aGV5IGFyZSBub24tcG9z
aXRpdmUuCiAgICAgaW5pdENoYXJXaWR0aHMoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sLmNwcAppbmRleCA2ZTNjYWJiLi4zYTZkYjFmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2wuY3BwCkBAIC00NTksNiArNDU5LDcyIEBAIEludFJlY3QgUmVuZGVyVGV4
dENvbnRyb2w6OmNvbnRyb2xDbGlwUmVjdChpbnQgdHgsIGludCB0eSkgY29uc3QKICAgICByZXR1
cm4gY2xpcFJlY3Q7CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyKiBmb250RmFtaWxpZXNXaXRoSW52
YWxpZENoYXJXaWR0aFtdID0geworICAgICJBbWVyaWNhbiBUeXBld3JpdGVyIiwKKyAgICAiQXJp
YWwgSGVicmV3IiwKKyAgICAiQ2hhbGtib2FyZCIsCisgICAgIkNvY2hpbiIsCisgICAgIkNvcnNp
dmEgSGVicmV3IiwKKyAgICAiQ291cmllciIsCisgICAgIkV1cGhlbWlhIFVDQVMiLAorICAgICJH
ZW5ldmEiLAorICAgICJHaWxsIFNhbnMiLAorICAgICJIZWkiLAorICAgICJIZWx2ZXRpY2EiLAor
ICAgICJIb2VmbGVyIFRleHQiLAorICAgICJJbmFpTWF0aGkiLAorICAgICJLYWkiLAorICAgICJM
dWNpZGEgR3JhbmRlIiwKKyAgICAiTWFya2VyIEZlbHQiLAorICAgICJNb25hY28iLAorICAgICJN
c2h0YWthbiIsCisgICAgIk5ldyBQZW5pbmltIE1UIiwKKyAgICAiT3Nha2EiLAorICAgICJSYWFu
YW5hIiwKKyAgICAiU1RIZWl0aSIsCisgICAgIlN5bWJvbCIsCisgICAgIlRpbWVzIiwKKyAgICAi
QXBwbGUgQnJhaWxsZSIsCisgICAgIkFwcGxlIExpR290aGljIiwKKyAgICAiQXBwbGUgTGlTdW5n
IiwKKyAgICAiQXBwbGUgU3ltYm9scyIsCisgICAgIkFwcGxlR290aGljIiwKKyAgICAiQXBwbGVN
eXVuZ2pvIiwKKyAgICAiI0d1bmdTZW8iLAorICAgICIjSGVhZExpbmVBIiwKKyAgICAiI1BDTXl1
bmdqbyIsCisgICAgIiNQaWxHaSIsCit9OworCisvLyBGb3IgZm9udCBmYW1pbGllcyB3aGVyZSBh
bnkgb2YgdGhlIGZvbnRzIGRvbid0IGhhdmUgYSB2YWxpZCBlbnRyeSBpbiB0aGUgT1MvMiB0YWJs
ZQorLy8gZm9yIGF2Z0NoYXJXaWR0aCwgZmFsbGJhY2sgdG8gdGhlIGxlZ2FjeSB3ZWJraXQgYmVo
YXZpb3Igb2YgZ2V0dGluZyB0aGUgYXZnQ2hhcldpZHRoCisvLyBmcm9tIHRoZSB3aWR0aCBvZiBh
ICcwJy4gVGhpcyBvbmx5IHNlZW1zIHRvIGFwcGx5IHRvIGEgZml4ZWQgbnVtYmVyIG9mIE1hYyBm
b250cywKKy8vIGJ1dCwgaW4gb3JkZXIgdG8gZ2V0IHNpbWlsYXIgcmVuZGVyaW5nIGFjcm9zcyBw
bGF0Zm9ybXMsIHdlIGRvIHRoaXMgY2hlY2sgZm9yCisvLyBhbGwgcGxhdGZvcm1zLgorYm9vbCBS
ZW5kZXJUZXh0Q29udHJvbDo6aGFzVmFsaWRBdmdDaGFyV2lkdGgoQXRvbWljU3RyaW5nIGZhbWls
eSkKK3sKKyAgICBzdGF0aWMgSGFzaE1hcDxBdG9taWNTdHJpbmcsIGJvb2w+KiBmb250RmFtaWxp
ZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcCA9IDA7CisgICAgCisgICAgaWYgKCFmb250RmFtaWxp
ZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcCkgeworICAgICAgICBmb250RmFtaWxpZXNXaXRoSW52
YWxpZENoYXJXaWR0aE1hcCA9IG5ldyBIYXNoTWFwPEF0b21pY1N0cmluZywgYm9vbD47CisgICAg
ICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZW9mKGZvbnRGYW1pbGll
c1dpdGhJbnZhbGlkQ2hhcldpZHRoKSAvIHNpemVvZihmb250RmFtaWxpZXNXaXRoSW52YWxpZENo
YXJXaWR0aFswXSk7IGkrKykKKyAgICAgICAgICAgIGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hh
cldpZHRoTWFwLT5zZXQoQXRvbWljU3RyaW5nKGZvbnRGYW1pbGllc1dpdGhJbnZhbGlkQ2hhcldp
ZHRoW2ldKSwgdHJ1ZSk7CisgICAgfQorCisgICAgcmV0dXJuICFmb250RmFtaWxpZXNXaXRoSW52
YWxpZENoYXJXaWR0aE1hcC0+Z2V0KGZhbWlseSk7Cit9CisKK2Zsb2F0IFJlbmRlclRleHRDb250
cm9sOjpnZXRBdmdDaGFyV2lkdGgoQXRvbWljU3RyaW5nIGZhbWlseSkKK3sKKyAgICBpZiAoaGFz
VmFsaWRBdmdDaGFyV2lkdGgoZmFtaWx5KSkKKyAgICAgICAgcmV0dXJuIHJvdW5kZihzdHlsZSgp
LT5mb250KCkucHJpbWFyeUZvbnQoKS0+YXZnQ2hhcldpZHRoKCkpOworCisgICAgY29uc3QgVUNo
YXIgY2ggPSAnMCc7IAorICAgIHJldHVybiBzdHlsZSgpLT5mb250KCkuZmxvYXRXaWR0aChUZXh0
UnVuKCZjaCwgMSwgZmFsc2UsIDAsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UpKTsKK30KKyAgICAK
Kwogdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6Y2FsY1ByZWZXaWR0aHMoKQogewogICAgIEFTU0VS
VChwcmVmV2lkdGhzRGlydHkoKSk7CkBAIC00NzAsOCArNTM2LDggQEAgdm9pZCBSZW5kZXJUZXh0
Q29udHJvbDo6Y2FsY1ByZWZXaWR0aHMoKQogICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4
UHJlZldpZHRoID0gY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkp
OwogICAgIGVsc2UgewogICAgICAgICAvLyBVc2UgYXZlcmFnZSBjaGFyYWN0ZXIgd2lkdGguIE1h
dGNoZXMgSUUuCi0gICAgICAgIGZsb2F0IGNoYXJXaWR0aCA9IHN0eWxlKCktPmZvbnQoKS5wcmlt
YXJ5Rm9udCgpLT5hdmdDaGFyV2lkdGgoKTsKLSAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBwcmVm
ZXJyZWRDb250ZW50V2lkdGgoY2hhcldpZHRoKSArIG1faW5uZXJUZXh0LT5yZW5kZXJCb3goKS0+
cGFkZGluZ0xlZnQoKSArIG1faW5uZXJUZXh0LT5yZW5kZXJCb3goKS0+cGFkZGluZ1JpZ2h0KCk7
CisgICAgICAgIEF0b21pY1N0cmluZyBmYW1pbHkgPSBzdHlsZSgpLT5mb250KCkuZmFtaWx5KCku
ZmFtaWx5KCk7CisgICAgICAgIG1fbWF4UHJlZldpZHRoID0gcHJlZmVycmVkQ29udGVudFdpZHRo
KGdldEF2Z0NoYXJXaWR0aChmYW1pbHkpKSArIG1faW5uZXJUZXh0LT5yZW5kZXJCb3goKS0+cGFk
ZGluZ0xlZnQoKSArIG1faW5uZXJUZXh0LT5yZW5kZXJCb3goKS0+cGFkZGluZ1JpZ2h0KCk7CiAg
ICAgfQogCiAgICAgaWYgKHN0eWxlKCktPm1pbldpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCkt
Pm1pbldpZHRoKCkudmFsdWUoKSA+IDApIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bC5oCmluZGV4IGQxZjM3NDkuLjBhZGNlOGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2wuaApAQCAtNzQsNiArNzQsMTIgQEAgcHJvdGVjdGVkOgogICAgIGludCB0ZXh0QmxvY2tX
aWR0aCgpIGNvbnN0OwogICAgIGludCB0ZXh0QmxvY2tIZWlnaHQoKSBjb25zdDsKIAorICAgIC8v
IFRoaXMgbWF0Y2hlcyB0aGUgdW5pdHNQZXJFbSB2YWx1ZSBmb3IgTVMgU2hlbGwgRGxnIGFuZCBD
b3VyaWVyIE5ldyBmcm9tIHRoZSAiaGVhZCIgZm9udCB0YWJsZS4KKyAgICBzdGF0aWMgY29uc3Qg
ZmxvYXQgdW5pdHNQZXJFbSA9IDIwNDguMGY7CisgICAgZmxvYXQgc2NhbGVFbVRvVW5pdHMoaW50
IHgpIGNvbnN0IHsgcmV0dXJuIHJvdW5kZihzdHlsZSgpLT5mb250KCkuc2l6ZSgpICogeCAvIHVu
aXRzUGVyRW0pOyB9CisKKyAgICBzdGF0aWMgYm9vbCBoYXNWYWxpZEF2Z0NoYXJXaWR0aChBdG9t
aWNTdHJpbmcgZmFtaWx5KTsKKyAgICB2aXJ0dWFsIGZsb2F0IGdldEF2Z0NoYXJXaWR0aChBdG9t
aWNTdHJpbmcgZmFtaWx5KTsKICAgICB2aXJ0dWFsIGludCBwcmVmZXJyZWRDb250ZW50V2lkdGgo
ZmxvYXQgY2hhcldpZHRoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdENvbnRy
b2xIZWlnaHRCYXNlZE9uTGluZUhlaWdodChpbnQgbGluZUhlaWdodCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBjYWNoZVNlbGVjdGlvbihpbnQgc3RhcnQsIGludCBlbmQpID0gMDsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcCBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcAppbmRleCBkZmM5
NjZhLi41YmE0MGQxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbE11bHRpTGluZS5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xNdWx0aUxpbmUuY3BwCkBAIC03Nyw2ICs3NywxNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9s
TXVsdGlMaW5lOjpmb3J3YXJkRXZlbnQoRXZlbnQqIGV2ZW50KQogICAgIFJlbmRlclRleHRDb250
cm9sOjpmb3J3YXJkRXZlbnQoZXZlbnQpOwogfQogCitmbG9hdCBSZW5kZXJUZXh0Q29udHJvbE11
bHRpTGluZTo6Z2V0QXZnQ2hhcldpZHRoKEF0b21pY1N0cmluZyBmYW1pbHkpCit7CisgICAgLy8g
U2luY2UgTHVjaWRhIEdyYW5kZSBpcyB0aGUgZGVmYXVsdCBmb250LCB3ZSB3YW50IHRoaXMgdG8g
bWF0Y2ggdGhlIHdpZHRoCisgICAgLy8gb2YgQ291cmllciBOZXcsIHRoZSBkZWZhdWx0IGZvbnQg
Zm9yIHRleHRhcmVhcyBpbiBJRSwgRmlyZWZveCBhbmQgU2FmYXJpIFdpbi4KKyAgICAvLyAxMjI5
IGlzIHRoZSBhdmdDaGFyV2lkdGggdmFsdWUgaW4gdGhlIE9TLzIgdGFibGUgZm9yIENvdXJpZXIg
TmV3LgorICAgIGlmIChmYW1pbHkgPT0gQXRvbWljU3RyaW5nKCJMdWNpZGEgR3JhbmRlIikpCisg
ICAgICAgIHJldHVybiBzY2FsZUVtVG9Vbml0cygxMjI5KTsKKworICAgIHJldHVybiBSZW5kZXJU
ZXh0Q29udHJvbDo6Z2V0QXZnQ2hhcldpZHRoKGZhbWlseSk7Cit9CisKIGludCBSZW5kZXJUZXh0
Q29udHJvbE11bHRpTGluZTo6cHJlZmVycmVkQ29udGVudFdpZHRoKGZsb2F0IGNoYXJXaWR0aCkg
Y29uc3QKIHsKICAgICBpbnQgZmFjdG9yID0gc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVu
dCo+KG5vZGUoKSktPmNvbHMoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sTXVsdGlMaW5lLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbE11bHRpTGluZS5oCmluZGV4IDMzNzFhOGYuLmZiY2EzMDggMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmgKKysrIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaApAQCAtNDAsNiArNDAsNyBAQCBw
cml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRl
c3RBY3Rpb24pOwogCisgICAgdmlydHVhbCBmbG9hdCBnZXRBdmdDaGFyV2lkdGgoQXRvbWljU3Ry
aW5nIGZhbWlseSk7CiAgICAgdmlydHVhbCBpbnQgcHJlZmVycmVkQ29udGVudFdpZHRoKGZsb2F0
IGNoYXJXaWR0aCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdENvbnRyb2xIZWlnaHRC
YXNlZE9uTGluZUhlaWdodChpbnQgbGluZUhlaWdodCk7CiAgICAgdmlydHVhbCBpbnQgYmFzZWxp
bmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94KSBjb25zdDsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5j
cHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCmlu
ZGV4IGUzMzQyZGQuLmRiYzAyMmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcApAQCAtMzc0LDcgKzM3NCwxOSBAQCBpbnQgUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0QmxvY2tXaWR0aCgpIGNvbnN0CiAKICAgICByZXR1
cm4gd2lkdGg7CiB9CisgICAgCitmbG9hdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omdl
dEF2Z0NoYXJXaWR0aChBdG9taWNTdHJpbmcgZmFtaWx5KQoreworICAgIC8vIFNpbmNlIEx1Y2lk
YSBHcmFuZGUgaXMgdGhlIGRlZmF1bHQgZm9udCwgd2Ugd2FudCB0aGlzIHRvIG1hdGNoIHRoZSB3
aWR0aAorICAgIC8vIG9mIE1TIFNoZWxsIERsZywgdGhlIGRlZmF1bHQgZm9udCBmb3IgdGV4dGFy
ZWFzIGluIEZpcmVmb3gsIFNhZmFyaSBXaW4gYW5kCisgICAgLy8gSUUgZm9yIHNvbWUgZW5jb2Rp
bmdzIChpbiBJRSwgdGhlIGRlZmF1bHQgZm9udCBpcyBlbmNvZGluZyBzcGVjaWZpYykuCisgICAg
Ly8gOTAxIGlzIHRoZSBhdmdDaGFyV2lkdGggdmFsdWUgaW4gdGhlIE9TLzIgdGFibGUgZm9yIE1T
IFNoZWxsIERsZy4KKyAgICBpZiAoZmFtaWx5ID09IEF0b21pY1N0cmluZygiTHVjaWRhIEdyYW5k
ZSIpKQorICAgICAgICByZXR1cm4gc2NhbGVFbVRvVW5pdHMoOTAxKTsKIAorICAgIHJldHVybiBS
ZW5kZXJUZXh0Q29udHJvbDo6Z2V0QXZnQ2hhcldpZHRoKGZhbWlseSk7Cit9CisgICAgCiBpbnQg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwcmVmZXJyZWRDb250ZW50V2lkdGgoZmxvYXQg
Y2hhcldpZHRoKSBjb25zdAogewogICAgIGludCBmYWN0b3IgPSBpbnB1dEVsZW1lbnQoKS0+c2l6
ZSgpOwpAQCAtMzgzLDggKzM5NSwyMCBAQCBpbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjpwcmVmZXJyZWRDb250ZW50V2lkdGgoZmxvYXQgY2hhcldpZHRoKSBjb25zdAogCiAgICAgaW50
IHJlc3VsdCA9IHN0YXRpY19jYXN0PGludD4oY2VpbGYoY2hhcldpZHRoICogZmFjdG9yKSk7CiAK
KyAgICBmbG9hdCBtYXhDaGFyV2lkdGggPSAwLmY7CisgICAgQXRvbWljU3RyaW5nIGZhbWlseSA9
IHN0eWxlKCktPmZvbnQoKS5mYW1pbHkoKS5mYW1pbHkoKTsKKyAgICAvLyBTaW5jZSBMdWNpZGEg
R3JhbmRlIGlzIHRoZSBkZWZhdWx0IGZvbnQsIHdlIHdhbnQgdGhpcyB0byBtYXRjaCB0aGUgd2lk
dGgKKyAgICAvLyBvZiBNUyBTaGVsbCBEbGcsIHRoZSBkZWZhdWx0IGZvbnQgZm9yIHRleHRhcmVh
cyBpbiBGaXJlZm94LCBTYWZhcmkgV2luIGFuZAorICAgIC8vIElFIGZvciBzb21lIGVuY29kaW5n
cyAoaW4gSUUsIHRoZSBkZWZhdWx0IGZvbnQgaXMgZW5jb2Rpbmcgc3BlY2lmaWMpLgorICAgIC8v
IDQwMjcgaXMgdGhlICh4TWF4IC0geE1pbikgdmFsdWUgaW4gdGhlICJoZWFkIiBmb250IHRhYmxl
IGZvciBNUyBTaGVsbCBEbGcuCisgICAgaWYgKGZhbWlseSA9PSBBdG9taWNTdHJpbmcoIkx1Y2lk
YSBHcmFuZGUiKSkKKyAgICAgICAgbWF4Q2hhcldpZHRoID0gc2NhbGVFbVRvVW5pdHMoNDAyNyk7
CisgICAgZWxzZSBpZiAoaGFzVmFsaWRBdmdDaGFyV2lkdGgoZmFtaWx5KSkKKyAgICAgICAgbWF4
Q2hhcldpZHRoID0gcm91bmRmKHN0eWxlKCktPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5tYXhDaGFy
V2lkdGgoKSk7CisKICAgICAvLyBGb3IgdGV4dCBpbnB1dHMsIElFIGFkZHMgc29tZSBleHRyYSB3
aWR0aC4KLSAgICByZXN1bHQgKz0gc3R5bGUoKS0+Zm9udCgpLnByaW1hcnlGb250KCktPm1heENo
YXJXaWR0aCgpIC0gY2hhcldpZHRoOworICAgIGlmIChtYXhDaGFyV2lkdGggPiAwLmYpCisgICAg
ICAgIHJlc3VsdCArPSBtYXhDaGFyV2lkdGggLSBjaGFyV2lkdGg7CiAKICAgICBpZiAoUmVuZGVy
Qm94KiByZXN1bHRzUmVuZGVyZXIgPSBtX3Jlc3VsdHNCdXR0b24gPyBtX3Jlc3VsdHNCdXR0b24t
PnJlbmRlckJveCgpIDogMCkKICAgICAgICAgcmVzdWx0ICs9IHJlc3VsdHNSZW5kZXJlci0+Ym9y
ZGVyTGVmdCgpICsgcmVzdWx0c1JlbmRlcmVyLT5ib3JkZXJSaWdodCgpICsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKaW5kZXggZTQ3ZDg3ZS4u
OTI3MzQ4YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmgKQEAgLTc1LDYgKzc1LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgc2Ny
b2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIg
PSAxLjBmLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKIAogICAgIGludCB0ZXh0QmxvY2tXaWR0aCgp
IGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgZ2V0QXZnQ2hhcldpZHRoKEF0b21pY1N0cmluZyBm
YW1pbHkpOwogICAgIHZpcnR1YWwgaW50IHByZWZlcnJlZENvbnRlbnRXaWR0aChmbG9hdCBjaGFy
V2lkdGgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RDb250cm9sSGVpZ2h0QmFzZWRP
bkxpbmVIZWlnaHQoaW50IGxpbmVIZWlnaHQpOwogCg==
</data>
<flag name="review"
          id="28100"
          type_id="1"
          status="-"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46171</attachid>
            <date>2010-01-08 16:04:06 -0800</date>
            <delta_ts>2010-02-12 13:54:12 -0800</delta_ts>
            <desc>Improve text control intrinsic widths. Addressed mitz&apos;s comments.</desc>
            <filename>bug-25566-20100108160405.patch</filename>
            <type>text/plain</type>
            <size>13573</size>
            <attacher name="Ojan Vafai">ojan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
N2E2MmNkMS4uNGE2MDI3ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAxMC0wMS0wNSAgT2phbiBWYWZhaSAg
PG9qYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEltcHJvdmUgdGV4dCBjb250cm9sIGludHJpbnNpYyB3aWR0aHMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTU2NgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU1ODEKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1OTU4CisKKyAgICAgICAg
Rm9yIE1hYyBmb250cyB0aGF0IGhhdmUgaW52YWxpZCBhdmdDaGFyV2lkdGggZW50cmllcyBpbiB0
aGUgT1MvMiB0YWJsZSwKKyAgICAgICAgZmFsbGJhY2sgdG8gdGhlIFNhZmFyaSA0LSBiZWhhdmlv
ciBvZiB1c2luZyB0aGUgd2lkdGggb2YgYSB6ZXJvLiBGb3Igb3RoZXIKKyAgICAgICAgZm9udHMs
IG1ha2UgTWFjIG1hdGNoIFdpbmRvd3MgKGFuZCB0aHVzIElFKSBtZXRyaWNzLgorCisgICAgICAg
IEx1Y2lkYSBHcmFuZGUgaXMgaGFyZC1jb2RlZCB0byBtYXRjaCBNUyBTaGVsbCBEbGcgZm9yIGlu
cHV0cyBhbmQKKyAgICAgICAgQ291cmllciBOZXcgZm9yIHRleHRhcmVhcyBpbiBvcmRlciB0byBt
YXRjaCBTYWZhcmkgV2luLCBGaXJlZm94IGFuZCwgaW4KKyAgICAgICAgc29tZSBjYXNlcyBJRSAo
SUUgdXNlcyBkaWZmZXJlbnQgZGVmYXVsdCBmb250cyBkZXBlbmRpbmcgb24gZW5jb2RpbmcpLgor
CisgICAgICAgIFRoZSBvbmx5IGNhc2Ugd2hlcmUgd2Ugc3RpbGwgZG9uJ3QgbWF0Y2ggV2luZG93
cyBpcyBpZiBubyBmb250LXNpemUgaXMKKyAgICAgICAgc2V0LiBUaGUgZGVmYXVsdCBmb250LXNp
emUgZm9yIGZvcm0gY29udHJvbHMgb24gdGhlIE1hYyBpcyBzbWFsbGVyIGFuZAorICAgICAgICB0
aHVzIHRleHQtY29udHJvbCB3aWR0aHMgd2lsbCBiZSBzbGlnaHRseSBzbWFsbGVyLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cy4gQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjopOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6Omhhc1ZhbGlkQXZnQ2hhcldpZHRo
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpnZXRBdmdDaGFyV2lkdGgp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OmNhbGNQcmVmV2lkdGhzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHRDb250cm9sOjpzY2FsZUVtVG9Vbml0cyk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpnZXRBdmdDaGFyV2lkdGgpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpnZXRBdmdDaGFyV2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwcmVmZXJyZWRDb250ZW50V2lkdGgp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaDoKKwog
MjAxMC0wMS0wOCAgTHVpeiBBZ29zdGluaSAgPGx1aXouYWdvc3RpbmlAb3BlbmJvc3NhLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1t
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0KaW5k
ZXggMGM0OTZhNC4uNGFkZjIxNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0KKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0KQEAgLTI3NywzNCArMjc3LDI2IEBAIHZvaWQgU2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCiAKIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtQ2hhcldpZHRoSW5pdCgpCiB7Ci0gICAgbV9hdmdDaGFyV2lkdGggPSAwLmY7Ci0KLSAgICAv
LyBDYWxjdWxhdGUgYXZnQ2hhcldpZHRoIGFjY29yZGluZyB0byBodHRwOi8vZGV2ZWxvcGVyLmFw
cGxlLmNvbS90ZXh0Zm9udHMvVFRSZWZNYW4vUk0wNi9DaGFwNk9TMi5odG1sCi0gICAgLy8gV2Ug
Y2FuIHRyeSBncmFiYmluZyBpdCBvdXQgb2YgdGhlIE9TLzIgdGFibGUgb3IgdmlhIEFUU0ZvbnRH
ZXRIb3Jpem9udGFsTWV0cmljcywgYnV0Ci0gICAgLy8gQVRTRm9udEdldEhvcml6b250YWxNZXRy
aWNzIG5ldmVyIHNlZW1zIHRvIHJldHVybiBhIG5vbi16ZXJvIHZhbHVlIGFuZCB0aGUgT1MvMiB0
YWJsZQotICAgIC8vIGNvbnRhaW5zIHplcm8gZm9yIGEgbGFyZ2UgbnVtYmVyIG9mIGZvbnRzLgot
ICAgIEdseXBoUGFnZSogZ2x5cGhQYWdlWmVybyA9IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290
Q2hpbGQodGhpcywgMCktPnBhZ2UoKTsKLSAgICBpZiAoZ2x5cGhQYWdlWmVybykgewotICAgICAg
ICBzdGF0aWMgaW50IHdlaWdodHNbXSA9IHsgNjQsIDE0LCAyNywgMzUsIDEwMCwgMjAsIDE0LCA0
MiwgNjMsIDMsIDYsIDM1LCAyMCwgNTYsIDU2LCAxNywgNCwgNDksIDU2LCA3MSwgMzEsIDEwLCAx
OCwgMywgMTgsIDIsIDE2NiB9OwotICAgICAgICBpbnQgbnVtR2x5cGhzID0gMjc7Ci0gICAgICAg
IEFTU0VSVChudW1HbHlwaHMgPT0gc2l6ZW9mKHdlaWdodHMpIC8gc2l6ZW9mKGludCkpOwotICAg
ICAgICAvLyBDb21wdXRlIHRoZSB3ZWlnaHRlZCBzdW0gb2YgdGhlIHNwYWNlIGNoYXJhY3RlciBh
bmQgdGhlIGxvd2VyY2FzZSBsZXR0ZXJzIGluIHRoZSBMYXRpbiBhbHBoYWJldC4KLSAgICAgICAg
ZmxvYXQgc3VtID0gMC5mOwotICAgICAgICBpbnQgdG90YWxXZWlnaHQgPSAwOwotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG51bUdseXBoczsgaSsrKSB7Ci0gICAgICAgICAgICBHbHlwaCBn
bHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNoYXJhY3RlcigoaSA8IDI2ID8gaSAr
ICdhJyA6ICcgJykpLmdseXBoOwotICAgICAgICAgICAgaWYgKGdseXBoKSB7Ci0gICAgICAgICAg
ICAgICAgdG90YWxXZWlnaHQgKz0gd2VpZ2h0c1tpXTsKLSAgICAgICAgICAgICAgICBzdW0gKz0g
d2lkdGhGb3JHbHlwaChnbHlwaCkgKiB3ZWlnaHRzW2ldOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGlmIChzdW0gPiAwLmYgJiYgdG90YWxXZWlnaHQgPiAwKQotICAgICAgICAg
ICAgbV9hdmdDaGFyV2lkdGggPSBzdW0gLyB0b3RhbFdlaWdodDsKKyAgICBtX2F2Z0NoYXJXaWR0
aCA9IDA7CisgICAgbV9tYXhDaGFyV2lkdGggPSAwOworICAgIAorICAgIFJldGFpblB0cjxDRkRh
dGFSZWY+IG9zMlRhYmxlKEFkb3B0Q0YsIENHRm9udENvcHlUYWJsZUZvclRhZyhtX3BsYXRmb3Jt
RGF0YS5jZ0ZvbnQoKSwgJ09TLzInKSk7CisgICAgaWYgKG9zMlRhYmxlICYmIENGRGF0YUdldExl
bmd0aChvczJUYWJsZS5nZXQoKSkgPj0gNCkgeworICAgICAgICBjb25zdCBVSW50OCogb3MyID0g
Q0ZEYXRhR2V0Qnl0ZVB0cihvczJUYWJsZS5nZXQoKSk7CisgICAgICAgIFNJbnQxNiBvczJBdmdD
aGFyV2lkdGggPSBvczJbMl0gKiAyNTYgKyBvczJbM107CisgICAgICAgIG1fYXZnQ2hhcldpZHRo
ID0gc2NhbGVFbVRvVW5pdHMob3MyQXZnQ2hhcldpZHRoLCBtX3VuaXRzUGVyRW0pICogbV9wbGF0
Zm9ybURhdGEubV9zaXplOwogICAgIH0KIAotICAgIG1fbWF4Q2hhcldpZHRoID0gMC5mOwotICAg
IGlmIChtX3BsYXRmb3JtRGF0YS5mb250KCkpCi0gICAgICAgIG1fbWF4Q2hhcldpZHRoID0gW21f
cGxhdGZvcm1EYXRhLmZvbnQoKSBtYXhpbXVtQWR2YW5jZW1lbnRdLndpZHRoOworICAgIFJldGFp
blB0cjxDRkRhdGFSZWY+IGhlYWRUYWJsZShBZG9wdENGLCBDR0ZvbnRDb3B5VGFibGVGb3JUYWco
bV9wbGF0Zm9ybURhdGEuY2dGb250KCksICdoZWFkJykpOworICAgIGlmIChoZWFkVGFibGUgJiYg
Q0ZEYXRhR2V0TGVuZ3RoKGhlYWRUYWJsZS5nZXQoKSkgPj0gNDIpIHsKKyAgICAgICAgY29uc3Qg
VUludDgqIGhlYWQgPSBDRkRhdGFHZXRCeXRlUHRyKGhlYWRUYWJsZS5nZXQoKSk7CisgICAgICAg
IHVzaG9ydCB1eE1pbiA9IGhlYWRbMzZdICogMjU2ICsgaGVhZFszN107CisgICAgICAgIHVzaG9y
dCB1eE1heCA9IGhlYWRbNDBdICogMjU2ICsgaGVhZFs0MV07CisgICAgICAgIFNJbnQxNiB4TWlu
ID0gc3RhdGljX2Nhc3Q8U0ludDE2Pih1eE1pbik7CisgICAgICAgIFNJbnQxNiB4TWF4ID0gc3Rh
dGljX2Nhc3Q8U0ludDE2Pih1eE1heCk7CisgICAgICAgIGZsb2F0IGRpZmYgPSBzdGF0aWNfY2Fz
dDxmbG9hdD4oeE1heCAtIHhNaW4pOworICAgICAgICBtX21heENoYXJXaWR0aCA9IHNjYWxlRW1U
b1VuaXRzKGRpZmYsIG1fdW5pdHNQZXJFbSkgKiBtX3BsYXRmb3JtRGF0YS5tX3NpemU7CisgICAg
fQogCiAgICAgLy8gRmFsbGJhY2sgdG8gYSBjcm9zcy1wbGF0Zm9ybSBlc3RpbWF0ZSwgd2hpY2gg
d2lsbCBwb3B1bGF0ZSB0aGVzZSB2YWx1ZXMgaWYgdGhleSBhcmUgbm9uLXBvc2l0aXZlLgogICAg
IGluaXRDaGFyV2lkdGhzKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAK
aW5kZXggNmUzY2FiYi4uOGE3ZmVmZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2wuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sLmNwcApAQCAtNDU5LDYgKzQ1OSw3MiBAQCBJbnRSZWN0IFJlbmRlclRleHRDb250cm9sOjpj
b250cm9sQ2xpcFJlY3QoaW50IHR4LCBpbnQgdHkpIGNvbnN0CiAgICAgcmV0dXJuIGNsaXBSZWN0
OwogfQogCitzdGF0aWMgY29uc3QgY2hhciogZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lk
dGhbXSA9IHsKKyAgICAiQW1lcmljYW4gVHlwZXdyaXRlciIsCisgICAgIkFyaWFsIEhlYnJldyIs
CisgICAgIkNoYWxrYm9hcmQiLAorICAgICJDb2NoaW4iLAorICAgICJDb3JzaXZhIEhlYnJldyIs
CisgICAgIkNvdXJpZXIiLAorICAgICJFdXBoZW1pYSBVQ0FTIiwKKyAgICAiR2VuZXZhIiwKKyAg
ICAiR2lsbCBTYW5zIiwKKyAgICAiSGVpIiwKKyAgICAiSGVsdmV0aWNhIiwKKyAgICAiSG9lZmxl
ciBUZXh0IiwKKyAgICAiSW5haU1hdGhpIiwKKyAgICAiS2FpIiwKKyAgICAiTHVjaWRhIEdyYW5k
ZSIsCisgICAgIk1hcmtlciBGZWx0IiwKKyAgICAiTW9uYWNvIiwKKyAgICAiTXNodGFrYW4iLAor
ICAgICJOZXcgUGVuaW5pbSBNVCIsCisgICAgIk9zYWthIiwKKyAgICAiUmFhbmFuYSIsCisgICAg
IlNUSGVpdGkiLAorICAgICJTeW1ib2wiLAorICAgICJUaW1lcyIsCisgICAgIkFwcGxlIEJyYWls
bGUiLAorICAgICJBcHBsZSBMaUdvdGhpYyIsCisgICAgIkFwcGxlIExpU3VuZyIsCisgICAgIkFw
cGxlIFN5bWJvbHMiLAorICAgICJBcHBsZUdvdGhpYyIsCisgICAgIkFwcGxlTXl1bmdqbyIsCisg
ICAgIiNHdW5nU2VvIiwKKyAgICAiI0hlYWRMaW5lQSIsCisgICAgIiNQQ015dW5nam8iLAorICAg
ICIjUGlsR2kiLAorfTsKKworLy8gRm9yIGZvbnQgZmFtaWxpZXMgd2hlcmUgYW55IG9mIHRoZSBm
b250cyBkb24ndCBoYXZlIGEgdmFsaWQgZW50cnkgaW4gdGhlIE9TLzIgdGFibGUKKy8vIGZvciBh
dmdDaGFyV2lkdGgsIGZhbGxiYWNrIHRvIHRoZSBsZWdhY3kgd2Via2l0IGJlaGF2aW9yIG9mIGdl
dHRpbmcgdGhlIGF2Z0NoYXJXaWR0aAorLy8gZnJvbSB0aGUgd2lkdGggb2YgYSAnMCcuIFRoaXMg
b25seSBzZWVtcyB0byBhcHBseSB0byBhIGZpeGVkIG51bWJlciBvZiBNYWMgZm9udHMsCisvLyBi
dXQsIGluIG9yZGVyIHRvIGdldCBzaW1pbGFyIHJlbmRlcmluZyBhY3Jvc3MgcGxhdGZvcm1zLCB3
ZSBkbyB0aGlzIGNoZWNrIGZvcgorLy8gYWxsIHBsYXRmb3Jtcy4KK2Jvb2wgUmVuZGVyVGV4dENv
bnRyb2w6Omhhc1ZhbGlkQXZnQ2hhcldpZHRoKEF0b21pY1N0cmluZyBmYW1pbHkpCit7CisgICAg
c3RhdGljIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiogZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFy
V2lkdGhNYXAgPSAwOworICAgIAorICAgIGlmICghZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFy
V2lkdGhNYXApIHsKKyAgICAgICAgZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAg
PSBuZXcgSGFzaFNldDxBdG9taWNTdHJpbmc+OworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpemVvZihmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aCkg
LyBzaXplb2YoZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhbMF0pOyBpKyspCisgICAg
ICAgICAgICBmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcC0+YWRkKEF0b21pY1N0
cmluZyhmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aFtpXSkpOworICAgIH0KKworICAg
IHJldHVybiAhZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAtPmNvbnRhaW5zKGZh
bWlseSk7Cit9CisKK2Zsb2F0IFJlbmRlclRleHRDb250cm9sOjpnZXRBdmdDaGFyV2lkdGgoQXRv
bWljU3RyaW5nIGZhbWlseSkKK3sKKyAgICBpZiAoaGFzVmFsaWRBdmdDaGFyV2lkdGgoZmFtaWx5
KSkKKyAgICAgICAgcmV0dXJuIHJvdW5kZihzdHlsZSgpLT5mb250KCkucHJpbWFyeUZvbnQoKS0+
YXZnQ2hhcldpZHRoKCkpOworCisgICAgY29uc3QgVUNoYXIgY2ggPSAnMCc7IAorICAgIHJldHVy
biBzdHlsZSgpLT5mb250KCkuZmxvYXRXaWR0aChUZXh0UnVuKCZjaCwgMSwgZmFsc2UsIDAsIDAs
IGZhbHNlLCBmYWxzZSwgZmFsc2UpKTsKK30KKyAgICAKKwogdm9pZCBSZW5kZXJUZXh0Q29udHJv
bDo6Y2FsY1ByZWZXaWR0aHMoKQogewogICAgIEFTU0VSVChwcmVmV2lkdGhzRGlydHkoKSk7CkBA
IC00NzAsOCArNTM2LDggQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6Y2FsY1ByZWZXaWR0aHMo
KQogICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoID0gY2FsY0NvbnRlbnRC
b3hXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOwogICAgIGVsc2UgewogICAgICAgICAv
LyBVc2UgYXZlcmFnZSBjaGFyYWN0ZXIgd2lkdGguIE1hdGNoZXMgSUUuCi0gICAgICAgIGZsb2F0
IGNoYXJXaWR0aCA9IHN0eWxlKCktPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5hdmdDaGFyV2lkdGgo
KTsKLSAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBwcmVmZXJyZWRDb250ZW50V2lkdGgoY2hhcldp
ZHRoKSArIG1faW5uZXJUZXh0LT5yZW5kZXJCb3goKS0+cGFkZGluZ0xlZnQoKSArIG1faW5uZXJU
ZXh0LT5yZW5kZXJCb3goKS0+cGFkZGluZ1JpZ2h0KCk7CisgICAgICAgIEF0b21pY1N0cmluZyBm
YW1pbHkgPSBzdHlsZSgpLT5mb250KCkuZmFtaWx5KCkuZmFtaWx5KCk7CisgICAgICAgIG1fbWF4
UHJlZldpZHRoID0gcHJlZmVycmVkQ29udGVudFdpZHRoKGdldEF2Z0NoYXJXaWR0aChmYW1pbHkp
KSArIG1faW5uZXJUZXh0LT5yZW5kZXJCb3goKS0+cGFkZGluZ0xlZnQoKSArIG1faW5uZXJUZXh0
LT5yZW5kZXJCb3goKS0+cGFkZGluZ1JpZ2h0KCk7CiAgICAgfQogCiAgICAgaWYgKHN0eWxlKCkt
Pm1pbldpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSA+IDAp
IHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmggYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCmluZGV4IGQxZjM3NDkuLjBhZGNl
OGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgKKysr
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaApAQCAtNzQsNiArNzQsMTIg
QEAgcHJvdGVjdGVkOgogICAgIGludCB0ZXh0QmxvY2tXaWR0aCgpIGNvbnN0OwogICAgIGludCB0
ZXh0QmxvY2tIZWlnaHQoKSBjb25zdDsKIAorICAgIC8vIFRoaXMgbWF0Y2hlcyB0aGUgdW5pdHNQ
ZXJFbSB2YWx1ZSBmb3IgTVMgU2hlbGwgRGxnIGFuZCBDb3VyaWVyIE5ldyBmcm9tIHRoZSAiaGVh
ZCIgZm9udCB0YWJsZS4KKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgdW5pdHNQZXJFbSA9IDIwNDgu
MGY7CisgICAgZmxvYXQgc2NhbGVFbVRvVW5pdHMoaW50IHgpIGNvbnN0IHsgcmV0dXJuIHJvdW5k
ZihzdHlsZSgpLT5mb250KCkuc2l6ZSgpICogeCAvIHVuaXRzUGVyRW0pOyB9CisKKyAgICBzdGF0
aWMgYm9vbCBoYXNWYWxpZEF2Z0NoYXJXaWR0aChBdG9taWNTdHJpbmcgZmFtaWx5KTsKKyAgICB2
aXJ0dWFsIGZsb2F0IGdldEF2Z0NoYXJXaWR0aChBdG9taWNTdHJpbmcgZmFtaWx5KTsKICAgICB2
aXJ0dWFsIGludCBwcmVmZXJyZWRDb250ZW50V2lkdGgoZmxvYXQgY2hhcldpZHRoKSBjb25zdCA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdENvbnRyb2xIZWlnaHRCYXNlZE9uTGluZUhlaWdo
dChpbnQgbGluZUhlaWdodCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjYWNoZVNlbGVjdGlvbihp
bnQgc3RhcnQsIGludCBlbmQpID0gMDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sTXVsdGlMaW5lLmNwcAppbmRleCBkZmM5NjZhLi41YmE0MGQxIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAKKysrIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCkBAIC03Nyw2
ICs3NywxNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpmb3J3YXJkRXZlbnQo
RXZlbnQqIGV2ZW50KQogICAgIFJlbmRlclRleHRDb250cm9sOjpmb3J3YXJkRXZlbnQoZXZlbnQp
OwogfQogCitmbG9hdCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6Z2V0QXZnQ2hhcldpZHRo
KEF0b21pY1N0cmluZyBmYW1pbHkpCit7CisgICAgLy8gU2luY2UgTHVjaWRhIEdyYW5kZSBpcyB0
aGUgZGVmYXVsdCBmb250LCB3ZSB3YW50IHRoaXMgdG8gbWF0Y2ggdGhlIHdpZHRoCisgICAgLy8g
b2YgQ291cmllciBOZXcsIHRoZSBkZWZhdWx0IGZvbnQgZm9yIHRleHRhcmVhcyBpbiBJRSwgRmly
ZWZveCBhbmQgU2FmYXJpIFdpbi4KKyAgICAvLyAxMjI5IGlzIHRoZSBhdmdDaGFyV2lkdGggdmFs
dWUgaW4gdGhlIE9TLzIgdGFibGUgZm9yIENvdXJpZXIgTmV3LgorICAgIGlmIChmYW1pbHkgPT0g
QXRvbWljU3RyaW5nKCJMdWNpZGEgR3JhbmRlIikpCisgICAgICAgIHJldHVybiBzY2FsZUVtVG9V
bml0cygxMjI5KTsKKworICAgIHJldHVybiBSZW5kZXJUZXh0Q29udHJvbDo6Z2V0QXZnQ2hhcldp
ZHRoKGZhbWlseSk7Cit9CisKIGludCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6cHJlZmVy
cmVkQ29udGVudFdpZHRoKGZsb2F0IGNoYXJXaWR0aCkgY29uc3QKIHsKICAgICBpbnQgZmFjdG9y
ID0gc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudCo+KG5vZGUoKSktPmNvbHMoKTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmgg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oCmluZGV4IDMz
NzFhOGYuLmZiY2EzMDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sTXVsdGlMaW5lLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xNdWx0aUxpbmUuaApAQCAtNDAsNiArNDAsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBi
b29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGlu
dCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCisgICAgdmlydHVh
bCBmbG9hdCBnZXRBdmdDaGFyV2lkdGgoQXRvbWljU3RyaW5nIGZhbWlseSk7CiAgICAgdmlydHVh
bCBpbnQgcHJlZmVycmVkQ29udGVudFdpZHRoKGZsb2F0IGNoYXJXaWR0aCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIGFkanVzdENvbnRyb2xIZWlnaHRCYXNlZE9uTGluZUhlaWdodChpbnQgbGlu
ZUhlaWdodCk7CiAgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGlu
ZSwgYm9vbCBpc1Jvb3RMaW5lQm94KSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCmluZGV4IGUzMzQyZGQuLmRiYzAyMmQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5j
cHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNw
cApAQCAtMzc0LDcgKzM3NCwxOSBAQCBpbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp0
ZXh0QmxvY2tXaWR0aCgpIGNvbnN0CiAKICAgICByZXR1cm4gd2lkdGg7CiB9CisgICAgCitmbG9h
dCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmdldEF2Z0NoYXJXaWR0aChBdG9taWNTdHJp
bmcgZmFtaWx5KQoreworICAgIC8vIFNpbmNlIEx1Y2lkYSBHcmFuZGUgaXMgdGhlIGRlZmF1bHQg
Zm9udCwgd2Ugd2FudCB0aGlzIHRvIG1hdGNoIHRoZSB3aWR0aAorICAgIC8vIG9mIE1TIFNoZWxs
IERsZywgdGhlIGRlZmF1bHQgZm9udCBmb3IgdGV4dGFyZWFzIGluIEZpcmVmb3gsIFNhZmFyaSBX
aW4gYW5kCisgICAgLy8gSUUgZm9yIHNvbWUgZW5jb2RpbmdzIChpbiBJRSwgdGhlIGRlZmF1bHQg
Zm9udCBpcyBlbmNvZGluZyBzcGVjaWZpYykuCisgICAgLy8gOTAxIGlzIHRoZSBhdmdDaGFyV2lk
dGggdmFsdWUgaW4gdGhlIE9TLzIgdGFibGUgZm9yIE1TIFNoZWxsIERsZy4KKyAgICBpZiAoZmFt
aWx5ID09IEF0b21pY1N0cmluZygiTHVjaWRhIEdyYW5kZSIpKQorICAgICAgICByZXR1cm4gc2Nh
bGVFbVRvVW5pdHMoOTAxKTsKIAorICAgIHJldHVybiBSZW5kZXJUZXh0Q29udHJvbDo6Z2V0QXZn
Q2hhcldpZHRoKGZhbWlseSk7Cit9CisgICAgCiBpbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpwcmVmZXJyZWRDb250ZW50V2lkdGgoZmxvYXQgY2hhcldpZHRoKSBjb25zdAogewogICAg
IGludCBmYWN0b3IgPSBpbnB1dEVsZW1lbnQoKS0+c2l6ZSgpOwpAQCAtMzgzLDggKzM5NSwyMCBA
QCBpbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwcmVmZXJyZWRDb250ZW50V2lkdGgo
ZmxvYXQgY2hhcldpZHRoKSBjb25zdAogCiAgICAgaW50IHJlc3VsdCA9IHN0YXRpY19jYXN0PGlu
dD4oY2VpbGYoY2hhcldpZHRoICogZmFjdG9yKSk7CiAKKyAgICBmbG9hdCBtYXhDaGFyV2lkdGgg
PSAwLmY7CisgICAgQXRvbWljU3RyaW5nIGZhbWlseSA9IHN0eWxlKCktPmZvbnQoKS5mYW1pbHko
KS5mYW1pbHkoKTsKKyAgICAvLyBTaW5jZSBMdWNpZGEgR3JhbmRlIGlzIHRoZSBkZWZhdWx0IGZv
bnQsIHdlIHdhbnQgdGhpcyB0byBtYXRjaCB0aGUgd2lkdGgKKyAgICAvLyBvZiBNUyBTaGVsbCBE
bGcsIHRoZSBkZWZhdWx0IGZvbnQgZm9yIHRleHRhcmVhcyBpbiBGaXJlZm94LCBTYWZhcmkgV2lu
IGFuZAorICAgIC8vIElFIGZvciBzb21lIGVuY29kaW5ncyAoaW4gSUUsIHRoZSBkZWZhdWx0IGZv
bnQgaXMgZW5jb2Rpbmcgc3BlY2lmaWMpLgorICAgIC8vIDQwMjcgaXMgdGhlICh4TWF4IC0geE1p
bikgdmFsdWUgaW4gdGhlICJoZWFkIiBmb250IHRhYmxlIGZvciBNUyBTaGVsbCBEbGcuCisgICAg
aWYgKGZhbWlseSA9PSBBdG9taWNTdHJpbmcoIkx1Y2lkYSBHcmFuZGUiKSkKKyAgICAgICAgbWF4
Q2hhcldpZHRoID0gc2NhbGVFbVRvVW5pdHMoNDAyNyk7CisgICAgZWxzZSBpZiAoaGFzVmFsaWRB
dmdDaGFyV2lkdGgoZmFtaWx5KSkKKyAgICAgICAgbWF4Q2hhcldpZHRoID0gcm91bmRmKHN0eWxl
KCktPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5tYXhDaGFyV2lkdGgoKSk7CisKICAgICAvLyBGb3Ig
dGV4dCBpbnB1dHMsIElFIGFkZHMgc29tZSBleHRyYSB3aWR0aC4KLSAgICByZXN1bHQgKz0gc3R5
bGUoKS0+Zm9udCgpLnByaW1hcnlGb250KCktPm1heENoYXJXaWR0aCgpIC0gY2hhcldpZHRoOwor
ICAgIGlmIChtYXhDaGFyV2lkdGggPiAwLmYpCisgICAgICAgIHJlc3VsdCArPSBtYXhDaGFyV2lk
dGggLSBjaGFyV2lkdGg7CiAKICAgICBpZiAoUmVuZGVyQm94KiByZXN1bHRzUmVuZGVyZXIgPSBt
X3Jlc3VsdHNCdXR0b24gPyBtX3Jlc3VsdHNCdXR0b24tPnJlbmRlckJveCgpIDogMCkKICAgICAg
ICAgcmVzdWx0ICs9IHJlc3VsdHNSZW5kZXJlci0+Ym9yZGVyTGVmdCgpICsgcmVzdWx0c1JlbmRl
cmVyLT5ib3JkZXJSaWdodCgpICsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmgKaW5kZXggZTQ3ZDg3ZS4uOTI3MzQ4YiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKKysrIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKQEAgLTc1LDYgKzc1LDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxLjBmLCBOb2RlKiogc3RvcE5vZGUg
PSAwKTsKIAogICAgIGludCB0ZXh0QmxvY2tXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxv
YXQgZ2V0QXZnQ2hhcldpZHRoKEF0b21pY1N0cmluZyBmYW1pbHkpOwogICAgIHZpcnR1YWwgaW50
IHByZWZlcnJlZENvbnRlbnRXaWR0aChmbG9hdCBjaGFyV2lkdGgpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RDb250cm9sSGVpZ2h0QmFzZWRPbkxpbmVIZWlnaHQoaW50IGxpbmVIZWln
aHQpOwogCg==
</data>
<flag name="review"
          id="28393"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48664</attachid>
            <date>2010-02-12 13:54:12 -0800</date>
            <delta_ts>2010-02-12 15:06:14 -0800</delta_ts>
            <desc>Minor changes to compile on Tiger</desc>
            <filename>foo.diff</filename>
            <type>text/plain</type>
            <size>14577</size>
            <attacher name="Ojan Vafai">ojan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWRkZjlkNS4uYTFkYWNlNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAxMC0wMS0wNSAgT2phbiBWYWZhaSAg
PG9qYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEltcHJvdmUgdGV4dCBjb250cm9sIGludHJpbnNpYyB3aWR0aHMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTU2NgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU1ODEKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1OTU4CisKKyAgICAgICAg
Rm9yIE1hYyBmb250cyB0aGF0IGhhdmUgaW52YWxpZCBhdmdDaGFyV2lkdGggZW50cmllcyBpbiB0
aGUgT1MvMiB0YWJsZSwKKyAgICAgICAgZmFsbGJhY2sgdG8gdGhlIFNhZmFyaSA0LSBiZWhhdmlv
ciBvZiB1c2luZyB0aGUgd2lkdGggb2YgYSB6ZXJvLiBGb3Igb3RoZXIKKyAgICAgICAgZm9udHMs
IG1ha2UgTWFjIG1hdGNoIFdpbmRvd3MgKGFuZCB0aHVzIElFKSBtZXRyaWNzLgorCisgICAgICAg
IEx1Y2lkYSBHcmFuZGUgaXMgaGFyZC1jb2RlZCB0byBtYXRjaCBNUyBTaGVsbCBEbGcgZm9yIGlu
cHV0cyBhbmQKKyAgICAgICAgQ291cmllciBOZXcgZm9yIHRleHRhcmVhcyBpbiBvcmRlciB0byBt
YXRjaCBTYWZhcmkgV2luLCBGaXJlZm94IGFuZCwgaW4KKyAgICAgICAgc29tZSBjYXNlcyBJRSAo
SUUgdXNlcyBkaWZmZXJlbnQgZGVmYXVsdCBmb250cyBkZXBlbmRpbmcgb24gZW5jb2RpbmcpLgor
CisgICAgICAgIFRoZSBvbmx5IGNhc2Ugd2hlcmUgd2Ugc3RpbGwgZG9uJ3QgbWF0Y2ggV2luZG93
cyBpcyBpZiBubyBmb250LXNpemUgaXMKKyAgICAgICAgc2V0LiBUaGUgZGVmYXVsdCBmb250LXNp
emUgZm9yIGZvcm0gY29udHJvbHMgb24gdGhlIE1hYyBpcyBzbWFsbGVyIGFuZAorICAgICAgICB0
aHVzIHRleHQtY29udHJvbCB3aWR0aHMgd2lsbCBiZSBzbGlnaHRseSBzbWFsbGVyLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cy4gQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjopOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6Omhhc1ZhbGlkQXZnQ2hhcldpZHRo
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpnZXRBdmdDaGFyV2lkdGgp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OmNhbGNQcmVmV2lkdGhzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHRDb250cm9sOjpzY2FsZUVtVG9Vbml0cyk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpnZXRBdmdDaGFyV2lkdGgpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpnZXRBdmdDaGFyV2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwcmVmZXJyZWRDb250ZW50V2lkdGgp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaDoKKwog
MjAxMC0wMi0xMSAgU3RldmUgQmxvY2sgIDxzdGV2ZWJsb2NrQGdvb2dsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0gYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQppbmRleCBlZjdjNThmLi4wOTk0N2Q4
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0
YU1hYy5tbQorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0
YU1hYy5tbQpAQCAtMjczLDM3ICsyNzMsNTQgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1Jbml0KCkKICAgICB9IGVsc2UKICAgICAgICAgbV94SGVpZ2h0ID0gW21fcGxhdGZvcm1EYXRh
LmZvbnQoKSB4SGVpZ2h0XTsKIH0KKyAgICAKK3N0YXRpYyBDRkRhdGFSZWYgY29weUZvbnRUYWJs
ZUZvclRhZyhGb250UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0YSwgRm91ckNoYXJDb2RlIHRhYmxl
TmFtZSkKK3sKKyNpZmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIEFUU0ZvbnRSZWYgYXRzRm9u
dCA9IEZNR2V0QVRTRm9udFJlZkZyb21Gb250KHBsYXRmb3JtRGF0YS5tX2F0c3VGb250SUQpOwor
CisgICAgQnl0ZUNvdW50IHRhYmxlU2l6ZTsKKyAgICBpZiAoQVRTRm9udEdldFRhYmxlKGF0c0Zv
bnQsIHRhYmxlTmFtZSwgMCwgMCwgTlVMTCwgJnRhYmxlU2l6ZSkgIT0gbm9FcnIpCisgICAgICAg
IHJldHVybiAwOworICAgIAorICAgIENGTXV0YWJsZURhdGFSZWYgZGF0YSA9IENGRGF0YUNyZWF0
ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdGFibGVTaXplKTsKKyAgICBpZiAoIWRhdGEp
CisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIENGRGF0YUluY3JlYXNlTGVuZ3RoKGRhdGEs
IHRhYmxlU2l6ZSk7CisgICAgaWYgKEFUU0ZvbnRHZXRUYWJsZShhdHNGb250LCB0YWJsZU5hbWUs
IDAsIHRhYmxlU2l6ZSwgQ0ZEYXRhR2V0TXV0YWJsZUJ5dGVQdHIoZGF0YSksICZ0YWJsZVNpemUp
ICE9IG5vRXJyKSB7CisgICAgICAgIENGUmVsZWFzZShkYXRhKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIAorICAgIHJldHVybiBkYXRhOworI2Vsc2UKKyAgICByZXR1cm4gQ0dGb250
Q29weVRhYmxlRm9yVGFnKHBsYXRmb3JtRGF0YS5jZ0ZvbnQoKSwgdGFibGVOYW1lKTsKKyNlbmRp
ZgorfQogCiB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQogewot
ICAgIG1fYXZnQ2hhcldpZHRoID0gMC5mOwotCi0gICAgLy8gQ2FsY3VsYXRlIGF2Z0NoYXJXaWR0
aCBhY2NvcmRpbmcgdG8gaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vdGV4dGZvbnRzL1RUUmVm
TWFuL1JNMDYvQ2hhcDZPUzIuaHRtbAotICAgIC8vIFdlIGNhbiB0cnkgZ3JhYmJpbmcgaXQgb3V0
IG9mIHRoZSBPUy8yIHRhYmxlIG9yIHZpYSBBVFNGb250R2V0SG9yaXpvbnRhbE1ldHJpY3MsIGJ1
dAotICAgIC8vIEFUU0ZvbnRHZXRIb3Jpem9udGFsTWV0cmljcyBuZXZlciBzZWVtcyB0byByZXR1
cm4gYSBub24temVybyB2YWx1ZSBhbmQgdGhlIE9TLzIgdGFibGUKLSAgICAvLyBjb250YWlucyB6
ZXJvIGZvciBhIGxhcmdlIG51bWJlciBvZiBmb250cy4KLSAgICBHbHlwaFBhZ2UqIGdseXBoUGFn
ZVplcm8gPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENoaWxkKHRoaXMsIDApLT5wYWdlKCk7
Ci0gICAgaWYgKGdseXBoUGFnZVplcm8pIHsKLSAgICAgICAgc3RhdGljIGludCB3ZWlnaHRzW10g
PSB7IDY0LCAxNCwgMjcsIDM1LCAxMDAsIDIwLCAxNCwgNDIsIDYzLCAzLCA2LCAzNSwgMjAsIDU2
LCA1NiwgMTcsIDQsIDQ5LCA1NiwgNzEsIDMxLCAxMCwgMTgsIDMsIDE4LCAyLCAxNjYgfTsKLSAg
ICAgICAgaW50IG51bUdseXBocyA9IDI3OwotICAgICAgICBBU1NFUlQobnVtR2x5cGhzID09IHNp
emVvZih3ZWlnaHRzKSAvIHNpemVvZihpbnQpKTsKLSAgICAgICAgLy8gQ29tcHV0ZSB0aGUgd2Vp
Z2h0ZWQgc3VtIG9mIHRoZSBzcGFjZSBjaGFyYWN0ZXIgYW5kIHRoZSBsb3dlcmNhc2UgbGV0dGVy
cyBpbiB0aGUgTGF0aW4gYWxwaGFiZXQuCi0gICAgICAgIGZsb2F0IHN1bSA9IDAuZjsKLSAgICAg
ICAgaW50IHRvdGFsV2VpZ2h0ID0gMDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1H
bHlwaHM7IGkrKykgewotICAgICAgICAgICAgR2x5cGggZ2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIoKGkgPCAyNiA/IGkgKyAnYScgOiAnICcpKS5nbHlwaDsKLSAg
ICAgICAgICAgIGlmIChnbHlwaCkgewotICAgICAgICAgICAgICAgIHRvdGFsV2VpZ2h0ICs9IHdl
aWdodHNbaV07Ci0gICAgICAgICAgICAgICAgc3VtICs9IHdpZHRoRm9yR2x5cGgoZ2x5cGgpICog
d2VpZ2h0c1tpXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoc3VtID4g
MC5mICYmIHRvdGFsV2VpZ2h0ID4gMCkKLSAgICAgICAgICAgIG1fYXZnQ2hhcldpZHRoID0gc3Vt
IC8gdG90YWxXZWlnaHQ7CisgICAgbV9hdmdDaGFyV2lkdGggPSAwOworICAgIG1fbWF4Q2hhcldp
ZHRoID0gMDsKKyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBvczJUYWJsZShBZG9wdENG
LCBjb3B5Rm9udFRhYmxlRm9yVGFnKG1fcGxhdGZvcm1EYXRhLCAnT1MvMicpKTsKKyAgICBpZiAo
b3MyVGFibGUgJiYgQ0ZEYXRhR2V0TGVuZ3RoKG9zMlRhYmxlLmdldCgpKSA+PSA0KSB7CisgICAg
ICAgIGNvbnN0IFVJbnQ4KiBvczIgPSBDRkRhdGFHZXRCeXRlUHRyKG9zMlRhYmxlLmdldCgpKTsK
KyAgICAgICAgU0ludDE2IG9zMkF2Z0NoYXJXaWR0aCA9IG9zMlsyXSAqIDI1NiArIG9zMlszXTsK
KyAgICAgICAgbV9hdmdDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyhvczJBdmdDaGFyV2lkdGgs
IG1fdW5pdHNQZXJFbSkgKiBtX3BsYXRmb3JtRGF0YS5tX3NpemU7CiAgICAgfQogCi0gICAgbV9t
YXhDaGFyV2lkdGggPSAwLmY7Ci0gICAgaWYgKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkKLSAgICAg
ICAgbV9tYXhDaGFyV2lkdGggPSBbbV9wbGF0Zm9ybURhdGEuZm9udCgpIG1heGltdW1BZHZhbmNl
bWVudF0ud2lkdGg7CisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gaGVhZFRhYmxlKEFkb3B0Q0Ys
IGNvcHlGb250VGFibGVGb3JUYWcobV9wbGF0Zm9ybURhdGEsICdoZWFkJykpOworICAgIGlmICho
ZWFkVGFibGUgJiYgQ0ZEYXRhR2V0TGVuZ3RoKGhlYWRUYWJsZS5nZXQoKSkgPj0gNDIpIHsKKyAg
ICAgICAgY29uc3QgVUludDgqIGhlYWQgPSBDRkRhdGFHZXRCeXRlUHRyKGhlYWRUYWJsZS5nZXQo
KSk7CisgICAgICAgIHVzaG9ydCB1eE1pbiA9IGhlYWRbMzZdICogMjU2ICsgaGVhZFszN107Cisg
ICAgICAgIHVzaG9ydCB1eE1heCA9IGhlYWRbNDBdICogMjU2ICsgaGVhZFs0MV07CisgICAgICAg
IFNJbnQxNiB4TWluID0gc3RhdGljX2Nhc3Q8U0ludDE2Pih1eE1pbik7CisgICAgICAgIFNJbnQx
NiB4TWF4ID0gc3RhdGljX2Nhc3Q8U0ludDE2Pih1eE1heCk7CisgICAgICAgIGZsb2F0IGRpZmYg
PSBzdGF0aWNfY2FzdDxmbG9hdD4oeE1heCAtIHhNaW4pOworICAgICAgICBtX21heENoYXJXaWR0
aCA9IHNjYWxlRW1Ub1VuaXRzKGRpZmYsIG1fdW5pdHNQZXJFbSkgKiBtX3BsYXRmb3JtRGF0YS5t
X3NpemU7CisgICAgfQogCiAgICAgLy8gRmFsbGJhY2sgdG8gYSBjcm9zcy1wbGF0Zm9ybSBlc3Rp
bWF0ZSwgd2hpY2ggd2lsbCBwb3B1bGF0ZSB0aGVzZSB2YWx1ZXMgaWYgdGhleSBhcmUgbm9uLXBv
c2l0aXZlLgogICAgIGluaXRDaGFyV2lkdGhzKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbC5jcHAKaW5kZXggYzBiYTA3MC4uZDE4OTQwYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sLmNwcApAQCAtNDU5LDYgKzQ1OSw3OCBAQCBJbnRSZWN0IFJlbmRlclRl
eHRDb250cm9sOjpjb250cm9sQ2xpcFJlY3QoaW50IHR4LCBpbnQgdHkpIGNvbnN0CiAgICAgcmV0
dXJuIGNsaXBSZWN0OwogfQogCitzdGF0aWMgY29uc3QgY2hhciogZm9udEZhbWlsaWVzV2l0aElu
dmFsaWRDaGFyV2lkdGhbXSA9IHsKKyAgICAiQW1lcmljYW4gVHlwZXdyaXRlciIsCisgICAgIkFy
aWFsIEhlYnJldyIsCisgICAgIkNoYWxrYm9hcmQiLAorICAgICJDb2NoaW4iLAorICAgICJDb3Jz
aXZhIEhlYnJldyIsCisgICAgIkNvdXJpZXIiLAorICAgICJFdXBoZW1pYSBVQ0FTIiwKKyAgICAi
R2VuZXZhIiwKKyAgICAiR2lsbCBTYW5zIiwKKyAgICAiSGVpIiwKKyAgICAiSGVsdmV0aWNhIiwK
KyAgICAiSG9lZmxlciBUZXh0IiwKKyAgICAiSW5haU1hdGhpIiwKKyAgICAiS2FpIiwKKyAgICAi
THVjaWRhIEdyYW5kZSIsCisgICAgIk1hcmtlciBGZWx0IiwKKyAgICAiTW9uYWNvIiwKKyAgICAi
TXNodGFrYW4iLAorICAgICJOZXcgUGVuaW5pbSBNVCIsCisgICAgIk9zYWthIiwKKyAgICAiUmFh
bmFuYSIsCisgICAgIlNUSGVpdGkiLAorICAgICJTeW1ib2wiLAorICAgICJUaW1lcyIsCisgICAg
IkFwcGxlIEJyYWlsbGUiLAorICAgICJBcHBsZSBMaUdvdGhpYyIsCisgICAgIkFwcGxlIExpU3Vu
ZyIsCisgICAgIkFwcGxlIFN5bWJvbHMiLAorICAgICJBcHBsZUdvdGhpYyIsCisgICAgIkFwcGxl
TXl1bmdqbyIsCisgICAgIiNHdW5nU2VvIiwKKyAgICAiI0hlYWRMaW5lQSIsCisgICAgIiNQQ015
dW5nam8iLAorICAgICIjUGlsR2kiLAorfTsKKworLy8gRm9yIGZvbnQgZmFtaWxpZXMgd2hlcmUg
YW55IG9mIHRoZSBmb250cyBkb24ndCBoYXZlIGEgdmFsaWQgZW50cnkgaW4gdGhlIE9TLzIgdGFi
bGUKKy8vIGZvciBhdmdDaGFyV2lkdGgsIGZhbGxiYWNrIHRvIHRoZSBsZWdhY3kgd2Via2l0IGJl
aGF2aW9yIG9mIGdldHRpbmcgdGhlIGF2Z0NoYXJXaWR0aAorLy8gZnJvbSB0aGUgd2lkdGggb2Yg
YSAnMCcuIFRoaXMgb25seSBzZWVtcyB0byBhcHBseSB0byBhIGZpeGVkIG51bWJlciBvZiBNYWMg
Zm9udHMsCisvLyBidXQsIGluIG9yZGVyIHRvIGdldCBzaW1pbGFyIHJlbmRlcmluZyBhY3Jvc3Mg
cGxhdGZvcm1zLCB3ZSBkbyB0aGlzIGNoZWNrIGZvcgorLy8gYWxsIHBsYXRmb3Jtcy4KK2Jvb2wg
UmVuZGVyVGV4dENvbnRyb2w6Omhhc1ZhbGlkQXZnQ2hhcldpZHRoKEF0b21pY1N0cmluZyBmYW1p
bHkpCit7CisgICAgc3RhdGljIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiogZm9udEZhbWlsaWVzV2l0
aEludmFsaWRDaGFyV2lkdGhNYXAgPSAwOworICAgIAorICAgIGlmICghZm9udEZhbWlsaWVzV2l0
aEludmFsaWRDaGFyV2lkdGhNYXApIHsKKyAgICAgICAgZm9udEZhbWlsaWVzV2l0aEludmFsaWRD
aGFyV2lkdGhNYXAgPSBuZXcgSGFzaFNldDxBdG9taWNTdHJpbmc+OworICAgICAgICAKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZihmb250RmFtaWxpZXNXaXRoSW52YWxp
ZENoYXJXaWR0aCkgLyBzaXplb2YoZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhbMF0p
OyBpKyspCisgICAgICAgICAgICBmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aE1hcC0+
YWRkKEF0b21pY1N0cmluZyhmb250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aFtpXSkpOwor
ICAgIH0KKworICAgIHJldHVybiAhZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhNYXAt
PmNvbnRhaW5zKGZhbWlseSk7Cit9CisKK2Zsb2F0IFJlbmRlclRleHRDb250cm9sOjpnZXRBdmdD
aGFyV2lkdGgoQXRvbWljU3RyaW5nIGZhbWlseSkKK3sKKyAgICBpZiAoaGFzVmFsaWRBdmdDaGFy
V2lkdGgoZmFtaWx5KSkKKyAgICAgICAgcmV0dXJuIHJvdW5kZihzdHlsZSgpLT5mb250KCkucHJp
bWFyeUZvbnQoKS0+YXZnQ2hhcldpZHRoKCkpOworCisgICAgY29uc3QgVUNoYXIgY2ggPSAnMCc7
IAorICAgIHJldHVybiBzdHlsZSgpLT5mb250KCkuZmxvYXRXaWR0aChUZXh0UnVuKCZjaCwgMSwg
ZmFsc2UsIDAsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UpKTsKK30KKworZmxvYXQgUmVuZGVyVGV4
dENvbnRyb2w6OnNjYWxlRW1Ub1VuaXRzKGludCB4KSBjb25zdAoreworICAgIC8vIFRoaXMgbWF0
Y2hlcyB0aGUgdW5pdHNQZXJFbSB2YWx1ZSBmb3IgTVMgU2hlbGwgRGxnIGFuZCBDb3VyaWVyIE5l
dyBmcm9tIHRoZSAiaGVhZCIgZm9udCB0YWJsZS4KKyAgICBmbG9hdCB1bml0c1BlckVtID0gMjA0
OC4wZjsKKyAgICByZXR1cm4gcm91bmRmKHN0eWxlKCktPmZvbnQoKS5zaXplKCkgKiB4IC8gdW5p
dHNQZXJFbSk7Cit9CisKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmNhbGNQcmVmV2lkdGhzKCkK
IHsKICAgICBBU1NFUlQocHJlZldpZHRoc0RpcnR5KCkpOwpAQCAtNDcwLDggKzU0Miw4IEBAIHZv
aWQgUmVuZGVyVGV4dENvbnRyb2w6OmNhbGNQcmVmV2lkdGhzKCkKICAgICAgICAgbV9taW5QcmVm
V2lkdGggPSBtX21heFByZWZXaWR0aCA9IGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+d2lk
dGgoKS52YWx1ZSgpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gVXNlIGF2ZXJhZ2UgY2hhcmFj
dGVyIHdpZHRoLiBNYXRjaGVzIElFLgotICAgICAgICBmbG9hdCBjaGFyV2lkdGggPSBzdHlsZSgp
LT5mb250KCkucHJpbWFyeUZvbnQoKS0+YXZnQ2hhcldpZHRoKCk7Ci0gICAgICAgIG1fbWF4UHJl
ZldpZHRoID0gcHJlZmVycmVkQ29udGVudFdpZHRoKGNoYXJXaWR0aCkgKyBtX2lubmVyVGV4dC0+
cmVuZGVyQm94KCktPnBhZGRpbmdMZWZ0KCkgKyBtX2lubmVyVGV4dC0+cmVuZGVyQm94KCktPnBh
ZGRpbmdSaWdodCgpOworICAgICAgICBBdG9taWNTdHJpbmcgZmFtaWx5ID0gc3R5bGUoKS0+Zm9u
dCgpLmZhbWlseSgpLmZhbWlseSgpOworICAgICAgICBtX21heFByZWZXaWR0aCA9IHByZWZlcnJl
ZENvbnRlbnRXaWR0aChnZXRBdmdDaGFyV2lkdGgoZmFtaWx5KSkgKyBtX2lubmVyVGV4dC0+cmVu
ZGVyQm94KCktPnBhZGRpbmdMZWZ0KCkgKyBtX2lubmVyVGV4dC0+cmVuZGVyQm94KCktPnBhZGRp
bmdSaWdodCgpOwogICAgIH0KIAogICAgIGlmIChzdHlsZSgpLT5taW5XaWR0aCgpLmlzRml4ZWQo
KSAmJiBzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkgPiAwKSB7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2wuaAppbmRleCBkMWYzNzQ5Li43YjIxMGZjIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sLmgKQEAgLTc0LDYgKzc0LDEyIEBAIHByb3RlY3RlZDoKICAgICBp
bnQgdGV4dEJsb2NrV2lkdGgoKSBjb25zdDsKICAgICBpbnQgdGV4dEJsb2NrSGVpZ2h0KCkgY29u
c3Q7CiAKKyAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIHVuaXRzUGVyRW0gdmFsdWUgZm9yIE1TIFNo
ZWxsIERsZyBhbmQgQ291cmllciBOZXcgZnJvbSB0aGUgImhlYWQiIGZvbnQgdGFibGUuCisgICAg
c3RhdGljIGNvbnN0IGZsb2F0IHVuaXRzUGVyRW0gPSAyMDQ4LjBmOworICAgIGZsb2F0IHNjYWxl
RW1Ub1VuaXRzKGludCB4KSBjb25zdDsKKworICAgIHN0YXRpYyBib29sIGhhc1ZhbGlkQXZnQ2hh
cldpZHRoKEF0b21pY1N0cmluZyBmYW1pbHkpOworICAgIHZpcnR1YWwgZmxvYXQgZ2V0QXZnQ2hh
cldpZHRoKEF0b21pY1N0cmluZyBmYW1pbHkpOwogICAgIHZpcnR1YWwgaW50IHByZWZlcnJlZENv
bnRlbnRXaWR0aChmbG9hdCBjaGFyV2lkdGgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0Q29udHJvbEhlaWdodEJhc2VkT25MaW5lSGVpZ2h0KGludCBsaW5lSGVpZ2h0KSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIGNhY2hlU2VsZWN0aW9uKGludCBzdGFydCwgaW50IGVuZCkgPSAw
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmUuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3Bw
CmluZGV4IDJlZWM3ZmIuLmFmNDIyNTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAKQEAgLTc3LDYgKzc3LDE3IEBAIHZvaWQgUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmU6OmZvcndhcmRFdmVudChFdmVudCogZXZlbnQpCiAgICAgUmVu
ZGVyVGV4dENvbnRyb2w6OmZvcndhcmRFdmVudChldmVudCk7CiB9CiAKK2Zsb2F0IFJlbmRlclRl
eHRDb250cm9sTXVsdGlMaW5lOjpnZXRBdmdDaGFyV2lkdGgoQXRvbWljU3RyaW5nIGZhbWlseSkK
K3sKKyAgICAvLyBTaW5jZSBMdWNpZGEgR3JhbmRlIGlzIHRoZSBkZWZhdWx0IGZvbnQsIHdlIHdh
bnQgdGhpcyB0byBtYXRjaCB0aGUgd2lkdGgKKyAgICAvLyBvZiBDb3VyaWVyIE5ldywgdGhlIGRl
ZmF1bHQgZm9udCBmb3IgdGV4dGFyZWFzIGluIElFLCBGaXJlZm94IGFuZCBTYWZhcmkgV2luLgor
ICAgIC8vIDEyMjkgaXMgdGhlIGF2Z0NoYXJXaWR0aCB2YWx1ZSBpbiB0aGUgT1MvMiB0YWJsZSBm
b3IgQ291cmllciBOZXcuCisgICAgaWYgKGZhbWlseSA9PSBBdG9taWNTdHJpbmcoIkx1Y2lkYSBH
cmFuZGUiKSkKKyAgICAgICAgcmV0dXJuIHNjYWxlRW1Ub1VuaXRzKDEyMjkpOworCisgICAgcmV0
dXJuIFJlbmRlclRleHRDb250cm9sOjpnZXRBdmdDaGFyV2lkdGgoZmFtaWx5KTsKK30KKwogaW50
IFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpwcmVmZXJyZWRDb250ZW50V2lkdGgoZmxvYXQg
Y2hhcldpZHRoKSBjb25zdAogewogICAgIGludCBmYWN0b3IgPSBzdGF0aWNfY2FzdDxIVE1MVGV4
dEFyZWFFbGVtZW50Kj4obm9kZSgpKS0+Y29scygpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sTXVsdGlMaW5lLmgKaW5kZXggMzM3MWE4Zi4uZmJjYTMwOCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaAorKysg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oCkBAIC00MCw2
ICs0MCw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGlu
dCB0eSwgSGl0VGVzdEFjdGlvbik7CiAKKyAgICB2aXJ0dWFsIGZsb2F0IGdldEF2Z0NoYXJXaWR0
aChBdG9taWNTdHJpbmcgZmFtaWx5KTsKICAgICB2aXJ0dWFsIGludCBwcmVmZXJyZWRDb250ZW50
V2lkdGgoZmxvYXQgY2hhcldpZHRoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0Q29u
dHJvbEhlaWdodEJhc2VkT25MaW5lSGVpZ2h0KGludCBsaW5lSGVpZ2h0KTsKICAgICB2aXJ0dWFs
IGludCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lLCBib29sIGlzUm9vdExpbmVCb3gp
IGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZS5jcHAKaW5kZXggMWM4MzQ2Ni4uYTc2MmFjNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCkBAIC0zNzQsNyArMzc0LDE5IEBA
IGludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnRleHRCbG9ja1dpZHRoKCkgY29uc3QK
IAogICAgIHJldHVybiB3aWR0aDsKIH0KKyAgICAKK2Zsb2F0IFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6Z2V0QXZnQ2hhcldpZHRoKEF0b21pY1N0cmluZyBmYW1pbHkpCit7CisgICAgLy8g
U2luY2UgTHVjaWRhIEdyYW5kZSBpcyB0aGUgZGVmYXVsdCBmb250LCB3ZSB3YW50IHRoaXMgdG8g
bWF0Y2ggdGhlIHdpZHRoCisgICAgLy8gb2YgTVMgU2hlbGwgRGxnLCB0aGUgZGVmYXVsdCBmb250
IGZvciB0ZXh0YXJlYXMgaW4gRmlyZWZveCwgU2FmYXJpIFdpbiBhbmQKKyAgICAvLyBJRSBmb3Ig
c29tZSBlbmNvZGluZ3MgKGluIElFLCB0aGUgZGVmYXVsdCBmb250IGlzIGVuY29kaW5nIHNwZWNp
ZmljKS4KKyAgICAvLyA5MDEgaXMgdGhlIGF2Z0NoYXJXaWR0aCB2YWx1ZSBpbiB0aGUgT1MvMiB0
YWJsZSBmb3IgTVMgU2hlbGwgRGxnLgorICAgIGlmIChmYW1pbHkgPT0gQXRvbWljU3RyaW5nKCJM
dWNpZGEgR3JhbmRlIikpCisgICAgICAgIHJldHVybiBzY2FsZUVtVG9Vbml0cyg5MDEpOwogCisg
ICAgcmV0dXJuIFJlbmRlclRleHRDb250cm9sOjpnZXRBdmdDaGFyV2lkdGgoZmFtaWx5KTsKK30K
KyAgICAKIGludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnByZWZlcnJlZENvbnRlbnRX
aWR0aChmbG9hdCBjaGFyV2lkdGgpIGNvbnN0CiB7CiAgICAgaW50IGZhY3RvciA9IGlucHV0RWxl
bWVudCgpLT5zaXplKCk7CkBAIC0zODMsOCArMzk1LDIwIEBAIGludCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OnByZWZlcnJlZENvbnRlbnRXaWR0aChmbG9hdCBjaGFyV2lkdGgpIGNvbnN0
CiAKICAgICBpbnQgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsZihjaGFyV2lkdGggKiBm
YWN0b3IpKTsKIAorICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IDAuZjsKKyAgICBBdG9taWNTdHJp
bmcgZmFtaWx5ID0gc3R5bGUoKS0+Zm9udCgpLmZhbWlseSgpLmZhbWlseSgpOworICAgIC8vIFNp
bmNlIEx1Y2lkYSBHcmFuZGUgaXMgdGhlIGRlZmF1bHQgZm9udCwgd2Ugd2FudCB0aGlzIHRvIG1h
dGNoIHRoZSB3aWR0aAorICAgIC8vIG9mIE1TIFNoZWxsIERsZywgdGhlIGRlZmF1bHQgZm9udCBm
b3IgdGV4dGFyZWFzIGluIEZpcmVmb3gsIFNhZmFyaSBXaW4gYW5kCisgICAgLy8gSUUgZm9yIHNv
bWUgZW5jb2RpbmdzIChpbiBJRSwgdGhlIGRlZmF1bHQgZm9udCBpcyBlbmNvZGluZyBzcGVjaWZp
YykuCisgICAgLy8gNDAyNyBpcyB0aGUgKHhNYXggLSB4TWluKSB2YWx1ZSBpbiB0aGUgImhlYWQi
IGZvbnQgdGFibGUgZm9yIE1TIFNoZWxsIERsZy4KKyAgICBpZiAoZmFtaWx5ID09IEF0b21pY1N0
cmluZygiTHVjaWRhIEdyYW5kZSIpKQorICAgICAgICBtYXhDaGFyV2lkdGggPSBzY2FsZUVtVG9V
bml0cyg0MDI3KTsKKyAgICBlbHNlIGlmIChoYXNWYWxpZEF2Z0NoYXJXaWR0aChmYW1pbHkpKQor
ICAgICAgICBtYXhDaGFyV2lkdGggPSByb3VuZGYoc3R5bGUoKS0+Zm9udCgpLnByaW1hcnlGb250
KCktPm1heENoYXJXaWR0aCgpKTsKKwogICAgIC8vIEZvciB0ZXh0IGlucHV0cywgSUUgYWRkcyBz
b21lIGV4dHJhIHdpZHRoLgotICAgIHJlc3VsdCArPSBzdHlsZSgpLT5mb250KCkucHJpbWFyeUZv
bnQoKS0+bWF4Q2hhcldpZHRoKCkgLSBjaGFyV2lkdGg7CisgICAgaWYgKG1heENoYXJXaWR0aCA+
IDAuZikKKyAgICAgICAgcmVzdWx0ICs9IG1heENoYXJXaWR0aCAtIGNoYXJXaWR0aDsKIAogICAg
IGlmIChSZW5kZXJCb3gqIHJlc3VsdHNSZW5kZXJlciA9IG1fcmVzdWx0c0J1dHRvbiA/IG1fcmVz
dWx0c0J1dHRvbi0+cmVuZGVyQm94KCkgOiAwKQogICAgICAgICByZXN1bHQgKz0gcmVzdWx0c1Jl
bmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZXN1bHRzUmVuZGVyZXItPmJvcmRlclJpZ2h0KCkgKwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAppbmRl
eCBlMzBmZjBkLi5hYTFmMWUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuaApAQCAtNzUsNiArNzUsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQg
bXVsdGlwbGllciA9IDEuMGYsIE5vZGUqKiBzdG9wTm9kZSA9IDApOwogCiAgICAgaW50IHRleHRC
bG9ja1dpZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBnZXRBdmdDaGFyV2lkdGgoQXRv
bWljU3RyaW5nIGZhbWlseSk7CiAgICAgdmlydHVhbCBpbnQgcHJlZmVycmVkQ29udGVudFdpZHRo
KGZsb2F0IGNoYXJXaWR0aCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdENvbnRyb2xI
ZWlnaHRCYXNlZE9uTGluZUhlaWdodChpbnQgbGluZUhlaWdodCk7CiAK
</data>
<flag name="review"
          id="31380"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>