<?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>80437</bug_id>
          
          <creation_ts>2012-03-06 12:34:12 -0800</creation_ts>
          <short_desc>Update usage of LayoutUnits in RenderBlock*</short_desc>
          <delta_ts>2012-03-16 03:53:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>60318</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Levi Weintraub">leviw</reporter>
          <assigned_to name="Levi Weintraub">leviw</assigned_to>
          <cc>darin</cc>
    
    <cc>eae</cc>
    
    <cc>eric</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>572071</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-06 12:34:12 -0800</bug_when>
    <thetext>Bringing RenderBlock and RenderBlockLineLayout up to date with our subpixellayout branch. There are a couple virtual methods to be changed that are being left out to be landed separately so the function signatures don&apos;t differ.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572213</commentid>
    <comment_count>1</comment_count>
      <attachid>130454</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-06 15:37:25 -0800</bug_when>
    <thetext>Created attachment 130454
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574416</commentid>
    <comment_count>2</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-08 17:25:31 -0800</bug_when>
    <thetext>Pinging reviewers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578598</commentid>
    <comment_count>3</comment_count>
      <attachid>130454</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-03-14 11:36:13 -0700</bug_when>
    <thetext>Comment on attachment 130454
Patch

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

&gt; Source/WebCore/ChangeLog:26
&gt; +        (WebCore::RenderBlock::newLine): Use a LayoutUnit the y position.

+for ?

&gt; Source/WebCore/rendering/InlineTextBox.cpp:482
&gt; +    LayoutUnit logicalStart = logicalLeftSide + (isHorizontal() ? adjustedPaintOffset.x() : adjustedPaintOffset.y());

Shouldn&apos;t we snap / round the result of the addition and not round first then do the addition?

&gt; Source/WebCore/rendering/RenderBlock.cpp:5397
&gt; -    LayoutUnit snappedResult = ceiledLayoutUnit(result);
&gt; +    LayoutUnit snappedResult = ceilf(result);

I don&apos;t understand why ceilf is better as snappedResult is still a LayoutUnit and that&apos;s what ceiledLayoutUnit returns.

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:137
&gt;          m_right = m_block-&gt;pixelSnappedLogicalLeftForFloat(newFloat);
&gt;          if (m_isFirstLine &amp;&amp; !m_block-&gt;style()-&gt;isLeftToRightDirection())
&gt; -            m_right -= m_block-&gt;textIndentOffset();
&gt; +            m_right -= roundToInt(m_block-&gt;textIndentOffset());

I wonder if we don&apos;t have some problem here as we round before adding. Same for m_left.

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:2694
&gt;      LayoutUnit firstLineEllipsisWidth = firstLineFont.width(constructTextRun(this, firstLineFont, &amp;horizontalEllipsis, 1, firstLineStyle()));
&gt; -    LayoutUnit ellipsisWidth = (font == firstLineFont) ? firstLineEllipsisWidth : font.width(constructTextRun(this, font, &amp;horizontalEllipsis, 1, style()));
&gt; +    LayoutUnit ellipsisWidth = (font == firstLineFont) ? firstLineEllipsisWidth : static_cast&lt;LayoutUnit&gt;(font.width(constructTextRun(this, font, &amp;horizontalEllipsis, 1, style())));

Shouldn&apos;t the ellipsisWidth be an int here (== device pixels) as it maps to the font&apos;s width?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578827</commentid>
    <comment_count>4</comment_count>
      <attachid>130454</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-14 15:06:51 -0700</bug_when>
    <thetext>Comment on attachment 130454
Patch

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

I&apos;m going to address a couple of the concerns and re-upload.

&gt;&gt; Source/WebCore/rendering/RenderBlock.cpp:5397
&gt;&gt; +    LayoutUnit snappedResult = ceilf(result);
&gt; 
&gt; I don&apos;t understand why ceilf is better as snappedResult is still a LayoutUnit and that&apos;s what ceiledLayoutUnit returns.

The intention with ceiledLayoutUnit was to ceil now, and preserve the precision in a LayoutUnit later. Unfortunately, here we actually need to ceil because blocks continue to paint on pixel boundaries, so we need to expand our width to ensure we contain the line. I&apos;ll write a better comment in the changelog.

&gt;&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:2694
&gt;&gt; +    LayoutUnit ellipsisWidth = (font == firstLineFont) ? firstLineEllipsisWidth : static_cast&lt;LayoutUnit&gt;(font.width(constructTextRun(this, font, &amp;horizontalEllipsis, 1, style())));
&gt; 
&gt; Shouldn&apos;t the ellipsisWidth be an int here (== device pixels) as it maps to the font&apos;s width?

font.width returns a float. Since we currently truncate to ints seemingly without a problem, maybe this is okay?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578913</commentid>
    <comment_count>5</comment_count>
      <attachid>131955</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-14 16:31:46 -0700</bug_when>
    <thetext>Created attachment 131955
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579033</commentid>
    <comment_count>6</comment_count>
      <attachid>131955</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-03-14 19:05:51 -0700</bug_when>
    <thetext>Comment on attachment 131955
Patch

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

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:652
&gt; +        LayoutUnit rootDescent = includeRootLine ? lineBox-&gt;renderer()-&gt;style(lineInfo.isFirstLine())-&gt;font().fontMetrics().descent() : 0;
&gt; +        LayoutUnit rootAscent = includeRootLine ? lineBox-&gt;renderer()-&gt;style(lineInfo.isFirstLine())-&gt;font().fontMetrics().ascent() : 0;
&gt; +        LayoutUnit boxAscent = renderer-&gt;style(lineInfo.isFirstLine())-&gt;font().fontMetrics().ascent() - baselineShift;
&gt; +        LayoutUnit boxDescent = renderer-&gt;style(lineInfo.isFirstLine())-&gt;font().fontMetrics().descent() + baselineShift;

Shouldn&apos;t it stay |int| to be coherent with the other change to |ellipsisWidth|?

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:2694
&gt; +    int firstLineEllipsisWidth = firstLineFont.width(constructTextRun(this, firstLineFont, &amp;horizontalEllipsis, 1, firstLineStyle()));
&gt; +    int ellipsisWidth = (font == firstLineFont) ? firstLineEllipsisWidth : font.width(constructTextRun(this, font, &amp;horizontalEllipsis, 1, style()));

&gt;&gt; Shouldn&apos;t the ellipsisWidth be an int here (== device pixels) as it maps to the font&apos;s width?
&gt;font.width returns a float. Since we currently truncate to ints seemingly without a problem, maybe this is okay?

I missed the fact that we did convert from float. The font code does a lot of truncating / rounding so I think it can go both ways. Just pick one between here and the above spot and let&apos;s document it and stick to it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579961</commentid>
    <comment_count>7</comment_count>
      <attachid>132163</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-03-15 17:43:10 -0700</bug_when>
    <thetext>Created attachment 132163
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580343</commentid>
    <comment_count>8</comment_count>
      <attachid>132163</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-16 03:53:15 -0700</bug_when>
    <thetext>Comment on attachment 132163
Patch for landing

Clearing flags on attachment: 132163

Committed r110983: &lt;http://trac.webkit.org/changeset/110983&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580344</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-16 03:53:19 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130454</attachid>
            <date>2012-03-06 15:37:25 -0800</date>
            <delta_ts>2012-03-14 16:31:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80437-20120306153724.patch</filename>
            <type>text/plain</type>
            <size>23144</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwOTk1MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDEyLTAzLTA2ICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBVcGRhdGUgdXNhZ2Ugb2Yg
TGF5b3V0VW5pdHMgaW4gUmVuZGVyQmxvY2sqCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD04MDQzNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVwZGF0aW5nIExheW91dFVuaXQgdXNhZ2UgaW4gUmVuZGVyQmxv
Y2sgYW5kIFJlbmRlckJsb2NrTGluZUxheW91dC4gVGhpcyBiZXR0ZXIgcmVhZGllcyB0cnVuayBm
b3IKKyAgICAgICAgdGhlIHRyYW5zaXRpb24gdG8gc3VicGl4ZWwgbGF5b3V0LgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cy4gTm8gY2hhbmdlZCBiZWhhdmlvci4KKworICAgICAgICAqIHJlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBh
aW50KTogQWRkaW5nIHRoZSBwYWludCBvZmZzZXQgcm91bmRpbmcgcHJldmlvdXNseSBpbiBSZW5k
ZXJCbG9jazo6cGFpbnQuCisgICAgICAgICogcmVuZGVyaW5nL0xheW91dFR5cGVzLmg6CisgICAg
ICAgIChXZWJDb3JlOjpmbG9vclRvSW50KTogV2lsbCBmbG9vciBhIExheW91dFVuaXQgdG8gYW4g
aW50ZWdlciBvbmNlIHdlIHN3aXRjaCB0bworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdHMu
CisgICAgICAgIChXZWJDb3JlOjpib3VuZGVkTXVsdGlwbHkpOiBNZXRob2QgdGhhdCB3aWxsIHJl
dHVybiB0aGUgbXVsdGlwbGllZCByZXN1bHQgb2YgdHdvIExheW91dFVuaXRzCisgICAgICAgIG9y
IHRoZSBtYXgvbWluIExheW91dFVuaXQgaWYgdGhlIHJlc3VsdCBvdmVyZmxvd3MuIE9ubHkgZG9l
cyBhIHJlZ3VsYXIgbXVsdGlwbHkgd2hpbGUKKyAgICAgICAgTGF5b3V0VW5pdHMgYXJlIGludGVn
ZXJzIGluc3RlYWQgb2YgRnJhY3Rpb25hbExheW91dFVuaXRzLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpwYWludENvbnRlbnRzKTogUm91bmRpbmcgdGhlIHBhaW50T2Zmc2V0IGhl
cmUgZGlkbid0IHdvcmsgZm9yIGFsbAorICAgICAgICBpbmxpbmUgYmxvY2tzLiBUaGlzIHJvdW5k
aW5nIGlzIGFjdHVhbGx5IG9ubHkgbmVlZGVkIGZvciBJbmxpbmVUZXh0Qm94ZXMsIHNvIHRoZSBs
b2dpYyBoYXMKKyAgICAgICAgYmVlbiBtb3ZlZCB0aGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpuZXdMaW5lKTogVXNlIGEgTGF5b3V0VW5pdCB0aGUgeSBwb3NpdGlvbi4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2wpOiBQ
b2ludHMgZm9yIGhpdCB0ZXN0aW5nIG5lZWQgdG8gYmUgcm91bmRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpsYXlvdXRDb2x1bW5zKTogVXNpbmcgYm91bmRlZE11bHRpcGx5IGZv
ciBhIGNhbGN1bGF0aW9uIHByb25lIHRvIG92ZXJmbG93LgorICAgICAgICAoV2ViQ29yZTo6dXBk
YXRlUHJlZmVycmVkV2lkdGgpOiBSZXZlcnRpbmcgYmFjayB0byB1c2luZyBjZWlsZi4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzZXRQYWdlTG9naWNhbE9mZnNldCk6IExvZ2ljYWxP
ZmZzZXQgc2hvdWxkIGJlIGEgTGF5b3V0VW5pdC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjptYXJnaW5WYWx1ZXNGb3JDaGlsZCk6IE1hcmdpbnMgc2hvdWxkIGhhdmUgc3VicGl4ZWwg
cmVzb2x1dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVj
dHM6OmludGVydmFsRm9yRmxvYXRpbmdPYmplY3QpOiBJbnRlcnZhbHMgZm9yIGZsb2F0aW5nIG9i
amVjdHMKKyAgICAgICAgbmVlZCB0byB1c2UgcGl4ZWwgc25hcHBlZCB2YWx1ZXMgdG8gZ2l2ZSB0
aGUgcHJvcGVyIHJlc3VsdHMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGl4ZWxTbmFwcGVkTG9naWNhbExlZnRPZmZz
ZXRGb3JMaW5lKTogT25seSBtb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpw
aXhlbFNuYXBwZWRMb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKTogV2hpbGUgd2UgY2FuIHJvdW5k
IHRoZSBsZWZ0IG9mZnNldCwKKyAgICAgICAgY29sdW1ucyBhZGQgYW4gZXh0cmEgb2Zmc2V0IGF0
IHBhaW50IHRoYXQgY2FuJ3QgY3VycmVudGx5IGJlIHBsYW5uZWQgZm9yIGF0IGxpbmUtbGF5b3V0
IHRpbWUuIFRvCisgICAgICAgIGF2b2lkIGxheWluZyBvdXQgbGluZXMgdGhhdCBydW4gb2ZmIHRo
ZSBlbmQgb2YgY29sdW1ucywgd2UgZmxvb3IgdGhlIHJpZ2h0IG9mZnNldC4gVGhlIHJlc3VsdGlu
ZworICAgICAgICBsaW5lcyB3aWxsIGJlIHVwIHRvIDEgcGl4ZWwgc2hvcnRlciB0aGFuIHRoZXkg
cG90ZW50aWFsbHkgY291bGQgYmUuCisgICAgICAgIChSZW5kZXJCbG9jayk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OnBpeGVsU25hcHBlZFgpOiBVc2lu
ZyBjb3JyZXNwb25kaW5nIHBpeGVsU25hcHBlZFggdmFsdWUgZnJvbQorICAgICAgICBMYXlvdXRS
ZWN0cy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6cGl4
ZWxTbmFwcGVkTWF4WCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZs
b2F0aW5nT2JqZWN0OjpwaXhlbFNuYXBwZWRZKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OnBpeGVsU25hcHBlZE1heFkpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6cGl4ZWxTbmFwcGVk
V2lkdGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09i
amVjdDo6cGl4ZWxTbmFwcGVkSGVpZ2h0KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OnNo
cmlua0F2YWlsYWJsZVdpZHRoRm9yTmV3RmxvYXRJZk5lZWRlZCk6IExvZ2ljYWxIZWlnaHQgaXMg
YSBMYXlvdXRVbml0LiBBbHNvCisgICAgICAgIGZsb29yaW5nIHRleHRJbmRlbnRPZmZzZXQgdG8g
YW4gaW50ZWdlciB0byBtYXRjaCBvbGQgYmVoYXZpb3IuCisgICAgICAgIChXZWJDb3JlOjpMaW5l
V2lkdGg6OmZpdEJlbG93RmxvYXRzKTogVXNpbmcgTGF5b3V0VW5pdHMgZm9yIGZsb2F0IGxvZ2lj
YWwgdG9wIGFuZCBib3R0b21zLgorICAgICAgICAoV2ViQ29yZTo6c2V0TG9naWNhbFdpZHRoRm9y
VGV4dFJ1bik6IENvcnJlY3RpbmcgbnVtZXJvdXMgaW50ZWdlcnMgdGhhdCBzaG91bGQgYmUgTGF5
b3V0VW5pdHMuCisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0U3RhdGU6OmVuZExpbmVMb2dp
Y2FsVG9wKTogQ2hhbmdpbmcgdG8gYSBMYXlvdXRVbml0LgorICAgICAgICAoV2ViQ29yZTo6TGlu
ZUxheW91dFN0YXRlOjpzZXRFbmRMaW5lTG9naWNhbFRvcCk6IERpdHRvLgorICAgICAgICAoTGlu
ZUxheW91dFN0YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGlu
a1RvRW5kTGluZUlmTmVlZGVkKTogQ2FsY3VsYXRpbmcgb3ZlcmZsb3cgd2l0aCBMYXlvdXRVbml0
cy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbik6
IExvd2VzdEFsbG93ZWRQb3NpdGlvbiBzaG91bGQgYmUgc3VicGl4ZWwuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6Y2hlY2tMaW5lc0ZvclRleHRPdmVyZmxvdyk6IEFkZGluZyBhIG5l
Y2Vzc2FyeSBzdGF0aWNfY2FzdC4KKwogMjAxMi0wMy0wNiAgU3RlcGhlbiBXaGl0ZSAgPHNlbm9y
YmxhbmNvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCBy
MTA5ODI1LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNw
cAkocmV2aXNpb24gMTA5OTMzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzUsMTYgKzQ3NSwxNiBAQCB2b2lkIElubGlu
ZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAKICAgICBBU1NFUlQocGFpbnRJbmZvLnBo
YXNlICE9IFBhaW50UGhhc2VTZWxmT3V0bGluZSAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQ
aGFzZUNoaWxkT3V0bGluZXMpOwogCisgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNl
dCA9IHJvdW5kZWRJbnRQb2ludChwYWludE9mZnNldCk7CisKICAgICBMYXlvdXRVbml0IGxvZ2lj
YWxMZWZ0U2lkZSA9IGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3coKTsKICAgICBMYXlvdXRVbml0
IGxvZ2ljYWxSaWdodFNpZGUgPSBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdygpOwotICAgIExh
eW91dFVuaXQgbG9naWNhbFN0YXJ0ID0gbG9naWNhbExlZnRTaWRlICsgKGlzSG9yaXpvbnRhbCgp
ID8gcGFpbnRPZmZzZXQueCgpIDogcGFpbnRPZmZzZXQueSgpKTsKKyAgICBMYXlvdXRVbml0IGxv
Z2ljYWxTdGFydCA9IGxvZ2ljYWxMZWZ0U2lkZSArIChpc0hvcml6b250YWwoKSA/IGFkanVzdGVk
UGFpbnRPZmZzZXQueCgpIDogYWRqdXN0ZWRQYWludE9mZnNldC55KCkpOwogICAgIExheW91dFVu
aXQgbG9naWNhbEV4dGVudCA9IGxvZ2ljYWxSaWdodFNpZGUgLSBsb2dpY2FsTGVmdFNpZGU7CiAg
ICAgCiAgICAgTGF5b3V0VW5pdCBwYWludEVuZCA9IGlzSG9yaXpvbnRhbCgpID8gcGFpbnRJbmZv
LnJlY3QubWF4WCgpIDogcGFpbnRJbmZvLnJlY3QubWF4WSgpOwogICAgIExheW91dFVuaXQgcGFp
bnRTdGFydCA9IGlzSG9yaXpvbnRhbCgpID8gcGFpbnRJbmZvLnJlY3QueCgpIDogcGFpbnRJbmZv
LnJlY3QueSgpOwogICAgIAotICAgIExheW91dFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBw
YWludE9mZnNldDsKLSAgICAKICAgICBpZiAobG9naWNhbFN0YXJ0ID49IHBhaW50RW5kIHx8IGxv
Z2ljYWxTdGFydCArIGxvZ2ljYWxFeHRlbnQgPD0gcGFpbnRTdGFydCkKICAgICAgICAgcmV0dXJu
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMuaAkocmV2aXNpb24g
MTA5OTMzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEyMCw2ICsxMjAsMTEgQEAgaW5saW5lIGludCByb3VuZFRvSW50KExheW91
dFVuaXQgdmFsdWUpCiAgICAgcmV0dXJuIHZhbHVlOwogfQogCitpbmxpbmUgaW50IGZsb29yVG9J
bnQoTGF5b3V0VW5pdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKIGlubGluZSBM
YXlvdXRVbml0IHJvdW5kZWRMYXlvdXRVbml0KGZsb2F0IHZhbHVlKQogewogICAgIHJldHVybiBs
cm91bmRmKHZhbHVlKTsKQEAgLTE0NSw2ICsxNTAsMTEgQEAgaW5saW5lIExheW91dFVuaXQgbGF5
b3V0TW9kKGNvbnN0IExheW91dAogICAgIHJldHVybiBudW1lcmF0b3IgJSBkZW5vbWluYXRvcjsK
IH0KIAoraW5saW5lIExheW91dFVuaXQgYm91bmRlZE11bHRpcGx5KGNvbnN0IExheW91dFVuaXQm
IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEgKiBiOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBMYXlvdXRUeXBlc19oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDEwOTkzMykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3NjgsMTMgKzI3NjgsMTAgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb250ZW50cyhQ
YWludEluZgogICAgIGlmIChkb2N1bWVudCgpLT5kaWRMYXlvdXRXaXRoUGVuZGluZ1N0eWxlc2hl
ZXRzKCkgJiYgIWlzUmVuZGVyVmlldygpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBXZSBk
b24ndCB3YW50IHRvIGhhbmQgb2ZmIHBhaW50aW5nIGluIHRoZSBsaW5lIGJveCB0cmVlIHdpdGgg
dGhlIGFjY3VtdWxhdGVkIGVycm9yIG9mIHRoZSByZW5kZXIgdHJlZSwgYXMgdGhpcyB3aWxsIGNh
dXNlCi0gICAgLy8gdXMgdG8gbWVzcyB1cCBwYWludGluZyBhbGlnbmVkIHRoaW5ncyAoc3VjaCBh
cyB1bmRlcmxpbmVzIGluIHRleHQpIHdpdGggYm90aCB0aGUgcmVuZGVyIHRyZWUgYW5kIGxpbmUg
Ym94IHRyZWUncyBlcnJvci4KLSAgICBMYXlvdXRQb2ludCByb3VuZGVkUGFpbnRPZmZzZXQgPSBy
b3VuZGVkSW50UG9pbnQocGFpbnRPZmZzZXQpOwogICAgIGlmIChjaGlsZHJlbklubGluZSgpKQot
ICAgICAgICBtX2xpbmVCb3hlcy5wYWludCh0aGlzLCBwYWludEluZm8sIHJvdW5kZWRQYWludE9m
ZnNldCk7CisgICAgICAgIG1fbGluZUJveGVzLnBhaW50KHRoaXMsIHBhaW50SW5mbywgcGFpbnRP
ZmZzZXQpOwogICAgIGVsc2UKLSAgICAgICAgcGFpbnRDaGlsZHJlbihwYWludEluZm8sIHJvdW5k
ZWRQYWludE9mZnNldCk7CisgICAgICAgIHBhaW50Q2hpbGRyZW4ocGFpbnRJbmZvLCBwYWludE9m
ZnNldCk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKQEAgLTM3NzQsNyArMzc3
MSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6Om5ld0xpbmUoRUNsZWFyIGNsZWFyKQogewogICAgIHBv
c2l0aW9uTmV3RmxvYXRzKCk7CiAgICAgLy8gc2V0IHkgcG9zaXRpb24KLSAgICBpbnQgbmV3WSA9
IDA7CisgICAgTGF5b3V0VW5pdCBuZXdZID0gMDsKICAgICBzd2l0Y2ggKGNsZWFyKQogICAgIHsK
ICAgICAgICAgY2FzZSBDTEVGVDoKQEAgLTQ0NjUsNyArNDQ2Miw3IEBAIGJvb2wgUmVuZGVyQmxv
Y2s6OmlzUG9pbnRJbk92ZXJmbG93Q29udHIKICAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbGF5ZXIoKS0+aGl0VGVzdE92ZXJm
bG93Q29udHJvbHMocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3Vt
dWxhdGVkT2Zmc2V0KSk7CisgICAgcmV0dXJuIGxheWVyKCktPmhpdFRlc3RPdmVyZmxvd0NvbnRy
b2xzKHJlc3VsdCwgcm91bmRlZEludFBvaW50KHBvaW50SW5Db250YWluZXIgLSB0b0xheW91dFNp
emUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7CiB9CiAKIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKQEAgLTUwMDYs
NyArNTAwMyw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmxheW91dENvbHVtbnMoYm9vbCBoYXMKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2VMb2dpY2FsT2Zmc2V0KGJvcmRlckJl
Zm9yZSgpICsgcGFkZGluZ0JlZm9yZSgpICsgY29udGVudExvZ2ljYWxIZWlnaHQoKSkgLSBjb2xJ
bmZvLT5mb3JjZWRCcmVha09mZnNldCgpKTsKICAgICAgICAgICAgICAgICBjb2x1bW5IZWlnaHQg
PSBtYXgoY29sSW5mby0+bWluaW11bUNvbHVtbkhlaWdodCgpLCBkaXN0YW5jZUJldHdlZW5CcmVh
a3MpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRMb2dpY2FsSGVp
Z2h0KCkgPiBwYWdlTG9naWNhbEhlaWdodCAqIGRlc2lyZWRDb2x1bW5Db3VudCkgeworICAgICAg
ICB9IGVsc2UgaWYgKGNvbnRlbnRMb2dpY2FsSGVpZ2h0KCkgPiBib3VuZGVkTXVsdGlwbHkocGFn
ZUxvZ2ljYWxIZWlnaHQsIGRlc2lyZWRDb2x1bW5Db3VudCkpIHsKICAgICAgICAgICAgIC8vIE5v
dyB0aGF0IHdlIGtub3cgdGhlIGludHJpbnNpYyBoZWlnaHQgb2YgdGhlIGNvbHVtbnMsIHdlIGhh
dmUgdG8gcmViYWxhbmNlIHRoZW0uCiAgICAgICAgICAgICBjb2x1bW5IZWlnaHQgPSBtYXg8TGF5
b3V0VW5pdD4oY29sSW5mby0+bWluaW11bUNvbHVtbkhlaWdodCgpLCBjZWlsZigoZmxvYXQpY29u
dGVudExvZ2ljYWxIZWlnaHQoKSAvIGRlc2lyZWRDb2x1bW5Db3VudCkpOwogICAgICAgICB9CkBA
IC01Mzk3LDcgKzUzOTQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3RyaXBUcmFpbGluZ1NwYWNl
KGZsCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVQcmVmZXJyZWRXaWR0aChMYXlvdXRVbml0
JiBwcmVmZXJyZWRXaWR0aCwgZmxvYXQmIHJlc3VsdCkKIHsKLSAgICBMYXlvdXRVbml0IHNuYXBw
ZWRSZXN1bHQgPSBjZWlsZWRMYXlvdXRVbml0KHJlc3VsdCk7CisgICAgTGF5b3V0VW5pdCBzbmFw
cGVkUmVzdWx0ID0gY2VpbGYocmVzdWx0KTsKICAgICBwcmVmZXJyZWRXaWR0aCA9IG1heChzbmFw
cGVkUmVzdWx0LCBwcmVmZXJyZWRXaWR0aCk7CiB9CiAKQEAgLTYzNTMsNyArNjM1MCw3IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OnNldFBhZ2luYXRpb25TdHJ1dChMYXkKICAgICBtX3JhcmVEYXRhLT5t
X3BhZ2luYXRpb25TdHJ1dCA9IHN0cnV0OwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpzZXRQYWdl
TG9naWNhbE9mZnNldChpbnQgbG9naWNhbE9mZnNldCkKK3ZvaWQgUmVuZGVyQmxvY2s6OnNldFBh
Z2VMb2dpY2FsT2Zmc2V0KExheW91dFVuaXQgbG9naWNhbE9mZnNldCkKIHsKICAgICBpZiAoIW1f
cmFyZURhdGEpIHsKICAgICAgICAgaWYgKCFsb2dpY2FsT2Zmc2V0KQpAQCAtNzE1NiwxMyArNzE1
MywxMyBAQCB2b2lkIFJlbmRlckJsb2NrOjpzZXRNYXJnaW5BZnRlckZvckNoaWxkCiAKIFJlbmRl
ckJsb2NrOjpNYXJnaW5WYWx1ZXMgUmVuZGVyQmxvY2s6Om1hcmdpblZhbHVlc0ZvckNoaWxkKFJl
bmRlckJveCogY2hpbGQpCiB7Ci0gICAgaW50IGNoaWxkQmVmb3JlUG9zaXRpdmUgPSAwOwotICAg
IGludCBjaGlsZEJlZm9yZU5lZ2F0aXZlID0gMDsKLSAgICBpbnQgY2hpbGRBZnRlclBvc2l0aXZl
ID0gMDsKLSAgICBpbnQgY2hpbGRBZnRlck5lZ2F0aXZlID0gMDsKKyAgICBMYXlvdXRVbml0IGNo
aWxkQmVmb3JlUG9zaXRpdmUgPSAwOworICAgIExheW91dFVuaXQgY2hpbGRCZWZvcmVOZWdhdGl2
ZSA9IDA7CisgICAgTGF5b3V0VW5pdCBjaGlsZEFmdGVyUG9zaXRpdmUgPSAwOworICAgIExheW91
dFVuaXQgY2hpbGRBZnRlck5lZ2F0aXZlID0gMDsKIAotICAgIGludCBiZWZvcmVNYXJnaW4gPSAw
OwotICAgIGludCBhZnRlck1hcmdpbiA9IDA7CisgICAgTGF5b3V0VW5pdCBiZWZvcmVNYXJnaW4g
PSAwOworICAgIExheW91dFVuaXQgYWZ0ZXJNYXJnaW4gPSAwOwogCiAgICAgUmVuZGVyQmxvY2sq
IGNoaWxkUmVuZGVyQmxvY2sgPSBjaGlsZC0+aXNSZW5kZXJCbG9jaygpID8gdG9SZW5kZXJCbG9j
ayhjaGlsZCkgOiAwOwogICAgIApAQCAtNzI3MCw4ICs3MjY3LDggQEAgaW5saW5lIHZvaWQgUmVu
ZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0cwogaW5saW5lIFJlbmRlckJsb2NrOjpGbG9hdGluZ09i
amVjdEludGVydmFsIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmludGVydmFsRm9yRmxv
YXRpbmdPYmplY3QoRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQogewogICAgIGlmICht
X2hvcml6b250YWxXcml0aW5nTW9kZSkKLSAgICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpGbG9h
dGluZ09iamVjdEludGVydmFsKGZsb2F0aW5nT2JqZWN0LT55KCksIGZsb2F0aW5nT2JqZWN0LT5t
YXhZKCksIGZsb2F0aW5nT2JqZWN0KTsKLSAgICByZXR1cm4gUmVuZGVyQmxvY2s6OkZsb2F0aW5n
T2JqZWN0SW50ZXJ2YWwoZmxvYXRpbmdPYmplY3QtPngoKSwgZmxvYXRpbmdPYmplY3QtPm1heFgo
KSwgZmxvYXRpbmdPYmplY3QpOworICAgICAgICByZXR1cm4gUmVuZGVyQmxvY2s6OkZsb2F0aW5n
T2JqZWN0SW50ZXJ2YWwoZmxvYXRpbmdPYmplY3QtPnBpeGVsU25hcHBlZFkoKSwgZmxvYXRpbmdP
YmplY3QtPnBpeGVsU25hcHBlZE1heFkoKSwgZmxvYXRpbmdPYmplY3QpOworICAgIHJldHVybiBS
ZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RJbnRlcnZhbChmbG9hdGluZ09iamVjdC0+cGl4ZWxT
bmFwcGVkWCgpLCBmbG9hdGluZ09iamVjdC0+cGl4ZWxTbmFwcGVkTWF4WCgpLCBmbG9hdGluZ09i
amVjdCk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6YWRkUGxhY2Vk
T2JqZWN0KEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiAxMDk5MzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDYgKzE2
NiwxNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbG9naWNhbExlZnRPZmZzZXRG
b3JMaW5lKHBvc2l0aW9uLCBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQocG9zaXRpb24pLCBm
aXJzdExpbmUsIDApOwogICAgIH0KKyAgICBMYXlvdXRVbml0IHBpeGVsU25hcHBlZExvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9uLCBib29sIGZpcnN0TGluZSkgY29u
c3QgCisgICAgeworICAgICAgICByZXR1cm4gcm91bmRUb0ludChsb2dpY2FsTGVmdE9mZnNldEZv
ckxpbmUocG9zaXRpb24sIGZpcnN0TGluZSkpOworICAgIH0KKyAgICBMYXlvdXRVbml0IHBpeGVs
U25hcHBlZExvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwgYm9v
bCBmaXJzdExpbmUpIGNvbnN0IAorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IE11bHRpY29sdW1u
IGxheW91dHMgYnJlYWsgY2Fycnlpbmcgb3ZlciBzdWJwaXhlbCB2YWx1ZXMgdG8gdGhlIGxvZ2lj
YWwgcmlnaHQgb2Zmc2V0IGJlY2F1c2UgdGhlIGxpbmVzIG1heSBiZSBzaGlmdGVkCisgICAgICAg
IC8vIGJ5IGEgc3VicGl4ZWwgdmFsdWUgZm9yIGFsbCBidXQgdGhlIGZpcnN0IGNvbHVtbi4gVGhp
cyBjYW4gbGVhZCB0byB0aGUgYWN0dWFsIHBpeGVsIHNuYXBwZWQgd2lkdGggb2YgdGhlIGNvbHVt
biBiZWluZyBvZmYKKyAgICAgICAgLy8gYnkgb25lIHBpeGVsIHdoZW4gcmVuZGVyZWQgdmVyc3Vz
IGxheWVkIG91dCwgd2hpY2ggY2FuIHJlc3VsdCBpbiB0aGUgbGluZSBiZWluZyBjbGlwcGVkLiBG
b3Igbm93LCB3ZSBoYXZlIHRvIGZsb29yLgorICAgICAgICByZXR1cm4gZmxvb3JUb0ludChsb2dp
Y2FsUmlnaHRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBmaXJzdExpbmUpKTsKKyAgICB9CiAgICAg
TGF5b3V0VW5pdCBzdGFydE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwgYm9vbCBm
aXJzdExpbmUpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gc3R5bGUoKS0+aXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpID8gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBmaXJz
dExpbmUpCkBAIC0xNzcsMTcgKzE4OCw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIDogbG9naWNh
bFdpZHRoKCkgLSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBmaXJzdExpbmUp
OwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBUaGUgaW1wbGVtZW50YXRpb24gZm9yIHRoZXNlIGZ1
bmN0aW9ucyB3aWxsIGNoYW5nZSBvbmNlIHdlIG1vdmUgdG8gc3VicGl4ZWwgbGF5b3V0LiBTZWUg
YnVnIDYwMzE4LgotICAgIGludCBwaXhlbFNuYXBwZWRMb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5l
KExheW91dFVuaXQgcG9zaXRpb24sIGJvb2wgZmlyc3RMaW5lKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUocG9zaXRpb24sIGxvZ2ljYWxSaWdo
dE9mZnNldEZvckNvbnRlbnQocG9zaXRpb24pLCBmaXJzdExpbmUsIDApOwotICAgIH0KLQotICAg
IGludCBwaXhlbFNuYXBwZWRMb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBwb3Np
dGlvbiwgYm9vbCBmaXJzdExpbmUpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gcm91bmRU
b0ludChsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUocG9zaXRpb24sIGxvZ2ljYWxMZWZ0T2Zmc2V0
Rm9yQ29udGVudChwb3NpdGlvbiksIGZpcnN0TGluZSwgMCkpOwotICAgIH0KLSAgICAKICAgICBM
YXlvdXRVbml0IHN0YXJ0QWxpZ25lZE9mZnNldEZvckxpbmUoUmVuZGVyQm94KiBjaGlsZCwgTGF5
b3V0VW5pdCBwb3NpdGlvbiwgYm9vbCBmaXJzdExpbmUpOwogICAgIExheW91dFVuaXQgdGV4dElu
ZGVudE9mZnNldCgpIGNvbnN0OwogCkBAIC0yNjEsNyArMjYxLDcgQEAgcHVibGljOgogICAgIC8v
IFRoZSBwYWdlIGxvZ2ljYWwgb2Zmc2V0IGlzIHRoZSBvYmplY3QncyBvZmZzZXQgZnJvbSB0aGUg
dG9wIG9mIHRoZSBwYWdlIGluIHRoZSBwYWdlIHByb2dyZXNzaW9uCiAgICAgLy8gZGlyZWN0aW9u
IChzbyBhbiB4LW9mZnNldCBpbiB2ZXJ0aWNhbCB0ZXh0IGFuZCBhIHktb2Zmc2V0IGZvciBob3Jp
em9udGFsIHRleHQpLgogICAgIExheW91dFVuaXQgcGFnZUxvZ2ljYWxPZmZzZXQoKSBjb25zdCB7
IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9wYWdlTG9naWNhbE9mZnNldCA6IHpl
cm9MYXlvdXRVbml0OyB9Ci0gICAgdm9pZCBzZXRQYWdlTG9naWNhbE9mZnNldChpbnQpOworICAg
IHZvaWQgc2V0UGFnZUxvZ2ljYWxPZmZzZXQoTGF5b3V0VW5pdCk7CiAKICAgICBSb290SW5saW5l
Qm94KiBsaW5lR3JpZEJveCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRh
LT5tX2xpbmVHcmlkQm94IDogMDsgfQogICAgIHZvaWQgc2V0TGluZUdyaWRCb3goUm9vdElubGlu
ZUJveCogYm94KQpAQCAtNTk1LDEzICs1OTUsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgTGF5b3V0
VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LndpZHRoKCk7IH0KICAgICAg
ICAgTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC5oZWlnaHQo
KTsgfQogCi0gICAgICAgIC8vIEZJWE1FOiBUaGUgaW1wbGVtZW50YXRpb24gZm9yIHRoZXNlIGZ1
bmN0aW9ucyB3aWxsIGNoYW5nZSBvbmNlIHdlIG1vdmUgdG8gc3VicGl4ZWwgbGF5b3V0LiBTZWUg
YnVnIDYwMzE4LgotICAgICAgICBpbnQgcGl4ZWxTbmFwcGVkWCgpIGNvbnN0IHsgcmV0dXJuIHgo
KTsgfQotICAgICAgICBpbnQgcGl4ZWxTbmFwcGVkTWF4WCgpIGNvbnN0IHsgcmV0dXJuIG1heFgo
KTsgfQotICAgICAgICBpbnQgcGl4ZWxTbmFwcGVkWSgpIGNvbnN0IHsgcmV0dXJuIHkoKTsgfQot
ICAgICAgICBpbnQgcGl4ZWxTbmFwcGVkTWF4WSgpIGNvbnN0IHsgcmV0dXJuIG1heFkoKTsgfQot
ICAgICAgICBpbnQgcGl4ZWxTbmFwcGVkV2lkdGgoKSBjb25zdCB7IHJldHVybiB3aWR0aCgpOyB9
Ci0gICAgICAgIGludCBwaXhlbFNuYXBwZWRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBoZWlnaHQo
KTsgfQorICAgICAgICBpbnQgcGl4ZWxTbmFwcGVkWCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2Vk
KCkpOyByZXR1cm4gbV9mcmFtZVJlY3QucGl4ZWxTbmFwcGVkWCgpOyB9CisgICAgICAgIGludCBw
aXhlbFNuYXBwZWRNYXhYKCkgY29uc3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJldHVybiBtX2Zy
YW1lUmVjdC5waXhlbFNuYXBwZWRNYXhYKCk7IH0KKyAgICAgICAgaW50IHBpeGVsU25hcHBlZFko
KSBjb25zdCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0LnBpeGVsU25h
cHBlZFkoKTsgfQorICAgICAgICBpbnQgcGl4ZWxTbmFwcGVkTWF4WSgpIGNvbnN0IHsgQVNTRVJU
KGlzUGxhY2VkKCkpOyByZXR1cm4gbV9mcmFtZVJlY3QucGl4ZWxTbmFwcGVkTWF4WSgpOyB9Cisg
ICAgICAgIGludCBwaXhlbFNuYXBwZWRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0
LnBpeGVsU25hcHBlZFdpZHRoKCk7IH0KKyAgICAgICAgaW50IHBpeGVsU25hcHBlZEhlaWdodCgp
IGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LnBpeGVsU25hcHBlZEhlaWdodCgpOyB9CiAKICAg
ICAgICAgdm9pZCBzZXRYKExheW91dFVuaXQgeCkgeyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkp
OyBtX2ZyYW1lUmVjdC5zZXRYKHgpOyB9CiAgICAgICAgIHZvaWQgc2V0WShMYXlvdXRVbml0IHkp
IHsgQVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsgbV9mcmFtZVJlY3Quc2V0WSh5KTsgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91
dC5jcHAJKHJldmlzaW9uIDEwOTkzMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0xpbmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsMTggKzEyMywxOCBA
QCBpbmxpbmUgdm9pZCBMaW5lV2lkdGg6OnVwZGF0ZUF2YWlsYWJsZVdpCiAKIGlubGluZSB2b2lk
IExpbmVXaWR0aDo6c2hyaW5rQXZhaWxhYmxlV2lkdGhGb3JOZXdGbG9hdElmTmVlZGVkKFJlbmRl
ckJsb2NrOjpGbG9hdGluZ09iamVjdCogbmV3RmxvYXQpCiB7Ci0gICAgaW50IGhlaWdodCA9IG1f
YmxvY2stPmxvZ2ljYWxIZWlnaHQoKTsKKyAgICBMYXlvdXRVbml0IGhlaWdodCA9IG1fYmxvY2st
PmxvZ2ljYWxIZWlnaHQoKTsKICAgICBpZiAoaGVpZ2h0IDwgbV9ibG9jay0+bG9naWNhbFRvcEZv
ckZsb2F0KG5ld0Zsb2F0KSB8fCBoZWlnaHQgPj0gbV9ibG9jay0+bG9naWNhbEJvdHRvbUZvckZs
b2F0KG5ld0Zsb2F0KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG5ld0Zsb2F0LT50eXBl
KCkgPT0gUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpGbG9hdExlZnQpIHsKICAgICAgICAg
bV9sZWZ0ID0gbV9ibG9jay0+cGl4ZWxTbmFwcGVkTG9naWNhbFJpZ2h0Rm9yRmxvYXQobmV3Rmxv
YXQpOwogICAgICAgICBpZiAobV9pc0ZpcnN0TGluZSAmJiBtX2Jsb2NrLT5zdHlsZSgpLT5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICBtX2xlZnQgKz0gbV9ibG9jay0+dGV4
dEluZGVudE9mZnNldCgpOworICAgICAgICAgICAgbV9sZWZ0ICs9IHJvdW5kVG9JbnQobV9ibG9j
ay0+dGV4dEluZGVudE9mZnNldCgpKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX3JpZ2h0ID0g
bV9ibG9jay0+cGl4ZWxTbmFwcGVkTG9naWNhbExlZnRGb3JGbG9hdChuZXdGbG9hdCk7CiAgICAg
ICAgIGlmIChtX2lzRmlyc3RMaW5lICYmICFtX2Jsb2NrLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICBtX3JpZ2h0IC09IG1fYmxvY2stPnRleHRJbmRlbnRP
ZmZzZXQoKTsKKyAgICAgICAgICAgIG1fcmlnaHQgLT0gcm91bmRUb0ludChtX2Jsb2NrLT50ZXh0
SW5kZW50T2Zmc2V0KCkpOwogICAgIH0KIAogICAgIGNvbXB1dGVBdmFpbGFibGVXaWR0aEZyb21M
ZWZ0QW5kUmlnaHQoKTsKQEAgLTE1OSw4ICsxNTksOCBAQCB2b2lkIExpbmVXaWR0aDo6Zml0QmVs
b3dGbG9hdHMoKQogICAgIEFTU0VSVCghbV9jb21taXR0ZWRXaWR0aCk7CiAgICAgQVNTRVJUKCFm
aXRzT25MaW5lKCkpOwogCi0gICAgaW50IGZsb2F0TG9naWNhbEJvdHRvbTsKLSAgICBpbnQgbGFz
dEZsb2F0TG9naWNhbEJvdHRvbSA9IG1fYmxvY2stPmxvZ2ljYWxIZWlnaHQoKTsKKyAgICBMYXlv
dXRVbml0IGZsb2F0TG9naWNhbEJvdHRvbTsKKyAgICBMYXlvdXRVbml0IGxhc3RGbG9hdExvZ2lj
YWxCb3R0b20gPSBtX2Jsb2NrLT5sb2dpY2FsSGVpZ2h0KCk7CiAgICAgZmxvYXQgbmV3TGluZVdp
ZHRoID0gbV9hdmFpbGFibGVXaWR0aDsKICAgICBmbG9hdCBuZXdMaW5lTGVmdCA9IG1fbGVmdDsK
ICAgICBmbG9hdCBuZXdMaW5lUmlnaHQgPSBtX3JpZ2h0OwpAQCAtNjQ1LDE2ICs2NDUsMTYgQEAg
c3RhdGljIGlubGluZSB2b2lkIHNldExvZ2ljYWxXaWR0aEZvclRleAogICAgICAgICAvLyBJZiB3
ZSBkb24ndCBzdGljayBvdXQgb2YgdGhlIHJvb3QgbGluZSdzIGZvbnQgYm94LCB0aGVuIGRvbid0
IGJvdGhlciBjb21wdXRpbmcgb3VyIGdseXBoIG92ZXJmbG93LiBUaGlzIG9wdGltaXphdGlvbgog
ICAgICAgICAvLyB3aWxsIGtlZXAgdXMgZnJvbSBjb21wdXRpbmcgZ2x5cGggYm91bmRzIGluIG5l
YXJseSBhbGwgY2FzZXMuCiAgICAgICAgIGJvb2wgaW5jbHVkZVJvb3RMaW5lID0gbGluZUJveC0+
aW5jbHVkZXNSb290TGluZUJveEZvbnRPckxlYWRpbmcoKTsKLSAgICAgICAgaW50IGJhc2VsaW5l
U2hpZnQgPSBsaW5lQm94LT52ZXJ0aWNhbFBvc2l0aW9uRm9yQm94KHJ1bi0+bV9ib3gsIHZlcnRp
Y2FsUG9zaXRpb25DYWNoZSk7Ci0gICAgICAgIGludCByb290RGVzY2VudCA9IGluY2x1ZGVSb290
TGluZSA/IGxpbmVCb3gtPnJlbmRlcmVyKCktPnN0eWxlKGxpbmVJbmZvLmlzRmlyc3RMaW5lKCkp
LT5mb250KCkuZm9udE1ldHJpY3MoKS5kZXNjZW50KCkgOiAwOwotICAgICAgICBpbnQgcm9vdEFz
Y2VudCA9IGluY2x1ZGVSb290TGluZSA/IGxpbmVCb3gtPnJlbmRlcmVyKCktPnN0eWxlKGxpbmVJ
bmZvLmlzRmlyc3RMaW5lKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSA6IDA7Ci0g
ICAgICAgIGludCBib3hBc2NlbnQgPSByZW5kZXJlci0+c3R5bGUobGluZUluZm8uaXNGaXJzdExp
bmUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gYmFzZWxpbmVTaGlmdDsKLSAg
ICAgICAgaW50IGJveERlc2NlbnQgPSByZW5kZXJlci0+c3R5bGUobGluZUluZm8uaXNGaXJzdExp
bmUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmRlc2NlbnQoKSArIGJhc2VsaW5lU2hpZnQ7Cisg
ICAgICAgIExheW91dFVuaXQgYmFzZWxpbmVTaGlmdCA9IGxpbmVCb3gtPnZlcnRpY2FsUG9zaXRp
b25Gb3JCb3gocnVuLT5tX2JveCwgdmVydGljYWxQb3NpdGlvbkNhY2hlKTsKKyAgICAgICAgTGF5
b3V0VW5pdCByb290RGVzY2VudCA9IGluY2x1ZGVSb290TGluZSA/IGxpbmVCb3gtPnJlbmRlcmVy
KCktPnN0eWxlKGxpbmVJbmZvLmlzRmlyc3RMaW5lKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5k
ZXNjZW50KCkgOiAwOworICAgICAgICBMYXlvdXRVbml0IHJvb3RBc2NlbnQgPSBpbmNsdWRlUm9v
dExpbmUgPyBsaW5lQm94LT5yZW5kZXJlcigpLT5zdHlsZShsaW5lSW5mby5pc0ZpcnN0TGluZSgp
KS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgOiAwOworICAgICAgICBMYXlvdXRVbml0
IGJveEFzY2VudCA9IHJlbmRlcmVyLT5zdHlsZShsaW5lSW5mby5pc0ZpcnN0TGluZSgpKS0+Zm9u
dCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBiYXNlbGluZVNoaWZ0OworICAgICAgICBMYXlv
dXRVbml0IGJveERlc2NlbnQgPSByZW5kZXJlci0+c3R5bGUobGluZUluZm8uaXNGaXJzdExpbmUo
KSktPmZvbnQoKS5mb250TWV0cmljcygpLmRlc2NlbnQoKSArIGJhc2VsaW5lU2hpZnQ7CiAgICAg
ICAgIGlmIChib3hBc2NlbnQgPiByb290RGVzY2VudCB8fCAgYm94RGVzY2VudCA+IHJvb3RBc2Nl
bnQpCiAgICAgICAgICAgICBnbHlwaE92ZXJmbG93LmNvbXB1dGVCb3VuZHMgPSB0cnVlOyAKICAg
ICB9CiAgICAgCi0gICAgaW50IGh5cGhlbldpZHRoID0gMDsKKyAgICBMYXlvdXRVbml0IGh5cGhl
bldpZHRoID0gMDsKICAgICBpZiAodG9JbmxpbmVUZXh0Qm94KHJ1bi0+bV9ib3gpLT5oYXNIeXBo
ZW4oKSkgewogICAgICAgICBjb25zdCBGb250JiBmb250ID0gcmVuZGVyZXItPnN0eWxlKGxpbmVJ
bmZvLmlzRmlyc3RMaW5lKCkpLT5mb250KCk7CiAgICAgICAgIGh5cGhlbldpZHRoID0gbWVhc3Vy
ZUh5cGhlbldpZHRoKHJlbmRlcmVyLCBmb250KTsKQEAgLTExMDksOCArMTEwOSw4IEBAIHB1Ymxp
YzoKICAgICBMaW5lSW5mbyYgbGluZUluZm8oKSB7IHJldHVybiBtX2xpbmVJbmZvOyB9CiAgICAg
Y29uc3QgTGluZUluZm8mIGxpbmVJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9saW5lSW5mbzsgfQog
Ci0gICAgaW50IGVuZExpbmVMb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbV9lbmRMaW5lTG9n
aWNhbFRvcDsgfQotICAgIHZvaWQgc2V0RW5kTGluZUxvZ2ljYWxUb3AoaW50IGxvZ2ljYWxUb3Ap
IHsgbV9lbmRMaW5lTG9naWNhbFRvcCA9IGxvZ2ljYWxUb3A7IH0KKyAgICBMYXlvdXRVbml0IGVu
ZExpbmVMb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbV9lbmRMaW5lTG9naWNhbFRvcDsgfQor
ICAgIHZvaWQgc2V0RW5kTGluZUxvZ2ljYWxUb3AoTGF5b3V0VW5pdCBsb2dpY2FsVG9wKSB7IG1f
ZW5kTGluZUxvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wOyB9CiAKICAgICBSb290SW5saW5lQm94KiBl
bmRMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9lbmRMaW5lOyB9CiAgICAgdm9pZCBzZXRFbmRMaW5l
KFJvb3RJbmxpbmVCb3gqIGxpbmUpIHsgbV9lbmRMaW5lID0gbGluZTsgfQpAQCAtMTEyOSw3ICsx
MTI5LDcgQEAgcHJpdmF0ZToKICAgICBSb290SW5saW5lQm94KiBtX2VuZExpbmU7CiAgICAgTGlu
ZUluZm8gbV9saW5lSW5mbzsKICAgICB1bnNpZ25lZCBtX2Zsb2F0SW5kZXg7Ci0gICAgaW50IG1f
ZW5kTGluZUxvZ2ljYWxUb3A7CisgICAgTGF5b3V0VW5pdCBtX2VuZExpbmVMb2dpY2FsVG9wOwog
ICAgIGJvb2wgbV9lbmRMaW5lTWF0Y2hlZDsKICAgICBib29sIG1fY2hlY2tGb3JGbG9hdHNGcm9t
TGFzdExpbmU7CiAgICAgCkBAIC0xNDAwLDE5ICsxNDAwLDE5IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmxpbmtUb0VuZExpbmVJZk5lZWRlZCgKICAgICAgICAgLy8gVGhpcyBoYXMgdG8gYmUgZG9uZSBi
ZWZvcmUgYWRkaW5nIGluIHRoZSBib3R0b20gYm9yZGVyL3BhZGRpbmcsIG9yIHRoZSBmbG9hdCB3
aWxsCiAgICAgICAgIC8vIGluY2x1ZGUgdGhlIHBhZGRpbmcgaW5jb3JyZWN0bHkuIC1kd2gKICAg
ICAgICAgaWYgKGxheW91dFN0YXRlLmNoZWNrRm9yRmxvYXRzRnJvbUxhc3RMaW5lKCkpIHsKLSAg
ICAgICAgICAgIGludCBib3R0b21WaXN1YWxPdmVyZmxvdyA9IGxhc3RSb290Qm94KCktPmxvZ2lj
YWxCb3R0b21WaXN1YWxPdmVyZmxvdygpOwotICAgICAgICAgICAgaW50IGJvdHRvbUxheW91dE92
ZXJmbG93ID0gbGFzdFJvb3RCb3goKS0+bG9naWNhbEJvdHRvbUxheW91dE92ZXJmbG93KCk7Cisg
ICAgICAgICAgICBMYXlvdXRVbml0IGJvdHRvbVZpc3VhbE92ZXJmbG93ID0gbGFzdFJvb3RCb3go
KS0+bG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93KCk7CisgICAgICAgICAgICBMYXlvdXRVbml0
IGJvdHRvbUxheW91dE92ZXJmbG93ID0gbGFzdFJvb3RCb3goKS0+bG9naWNhbEJvdHRvbUxheW91
dE92ZXJmbG93KCk7CiAgICAgICAgICAgICBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3gqIHRy
YWlsaW5nRmxvYXRzTGluZUJveCA9IG5ldyAocmVuZGVyQXJlbmEoKSkgVHJhaWxpbmdGbG9hdHNS
b290SW5saW5lQm94KHRoaXMpOwogICAgICAgICAgICAgbV9saW5lQm94ZXMuYXBwZW5kTGluZUJv
eCh0cmFpbGluZ0Zsb2F0c0xpbmVCb3gpOwogICAgICAgICAgICAgdHJhaWxpbmdGbG9hdHNMaW5l
Qm94LT5zZXRDb25zdHJ1Y3RlZCgpOwogICAgICAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxi
YWNrRm9udHNNYXAgdGV4dEJveERhdGFNYXA7CiAgICAgICAgICAgICBWZXJ0aWNhbFBvc2l0aW9u
Q2FjaGUgdmVydGljYWxQb3NpdGlvbkNhY2hlOwotICAgICAgICAgICAgaW50IGJsb2NrTG9naWNh
bEhlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgICAgIExheW91dFVuaXQgYmxvY2tM
b2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwogICAgICAgICAgICAgdHJhaWxpbmdGbG9h
dHNMaW5lQm94LT5hbGlnbkJveGVzSW5CbG9ja0RpcmVjdGlvbihibG9ja0xvZ2ljYWxIZWlnaHQs
IHRleHRCb3hEYXRhTWFwLCB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUpOwogICAgICAgICAgICAgdHJh
aWxpbmdGbG9hdHNMaW5lQm94LT5zZXRMaW5lVG9wQm90dG9tUG9zaXRpb25zKGJsb2NrTG9naWNh
bEhlaWdodCwgYmxvY2tMb2dpY2FsSGVpZ2h0LCBibG9ja0xvZ2ljYWxIZWlnaHQsIGJsb2NrTG9n
aWNhbEhlaWdodCk7CiAgICAgICAgICAgICB0cmFpbGluZ0Zsb2F0c0xpbmVCb3gtPnNldFBhZ2lu
YXRlZExpbmVXaWR0aChhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JDb250ZW50KGJsb2NrTG9naWNh
bEhlaWdodCkpOwotICAgICAgICAgICAgSW50UmVjdCBsb2dpY2FsTGF5b3V0T3ZlcmZsb3coMCwg
YmxvY2tMb2dpY2FsSGVpZ2h0LCAxLCBib3R0b21MYXlvdXRPdmVyZmxvdyAtIGJsb2NrTG9naWNh
bEhlaWdodCk7Ci0gICAgICAgICAgICBJbnRSZWN0IGxvZ2ljYWxWaXN1YWxPdmVyZmxvdygwLCBi
bG9ja0xvZ2ljYWxIZWlnaHQsIDEsIGJvdHRvbVZpc3VhbE92ZXJmbG93IC0gYmxvY2tMb2dpY2Fs
SGVpZ2h0KTsKKyAgICAgICAgICAgIExheW91dFJlY3QgbG9naWNhbExheW91dE92ZXJmbG93KDAs
IGJsb2NrTG9naWNhbEhlaWdodCwgMSwgYm90dG9tTGF5b3V0T3ZlcmZsb3cgLSBibG9ja0xvZ2lj
YWxIZWlnaHQpOworICAgICAgICAgICAgTGF5b3V0UmVjdCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3co
MCwgYmxvY2tMb2dpY2FsSGVpZ2h0LCAxLCBib3R0b21WaXN1YWxPdmVyZmxvdyAtIGJsb2NrTG9n
aWNhbEhlaWdodCk7CiAgICAgICAgICAgICB0cmFpbGluZ0Zsb2F0c0xpbmVCb3gtPnNldE92ZXJm
bG93RnJvbUxvZ2ljYWxSZWN0cyhsb2dpY2FsTGF5b3V0T3ZlcmZsb3csIGxvZ2ljYWxWaXN1YWxP
dmVyZmxvdywgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT5saW5lVG9wKCksIHRyYWlsaW5nRmxvYXRz
TGluZUJveC0+bGluZUJvdHRvbSgpKTsKICAgICAgICAgfQogCkBAIC0xNTE3LDcgKzE1MTcsNyBA
QCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgLy8gRXhwYW5k
IHRoZSBsYXN0IGxpbmUgdG8gYWNjb21tb2RhdGUgUnVieSBhbmQgZW1waGFzaXMgbWFya3MuCiAg
ICAgaW50IGxhc3RMaW5lQW5ub3RhdGlvbnNBZGp1c3RtZW50ID0gMDsKICAgICBpZiAobGFzdFJv
b3RCb3goKSkgewotICAgICAgICBpbnQgbG93ZXN0QWxsb3dlZFBvc2l0aW9uID0gbWF4KGxhc3RS
b290Qm94KCktPmxpbmVCb3R0b20oKSwgbG9naWNhbEhlaWdodCgpICsgcGFkZGluZ0FmdGVyKCkp
OworICAgICAgICBMYXlvdXRVbml0IGxvd2VzdEFsbG93ZWRQb3NpdGlvbiA9IG1heChsYXN0Um9v
dEJveCgpLT5saW5lQm90dG9tKCksIGxvZ2ljYWxIZWlnaHQoKSArIHBhZGRpbmdBZnRlcigpKTsK
ICAgICAgICAgaWYgKCFzdHlsZSgpLT5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkpCiAgICAg
ICAgICAgICBsYXN0TGluZUFubm90YXRpb25zQWRqdXN0bWVudCA9IGxhc3RSb290Qm94KCktPmNv
bXB1dGVVbmRlckFubm90YXRpb25BZGp1c3RtZW50KGxvd2VzdEFsbG93ZWRQb3NpdGlvbik7CiAg
ICAgICAgIGVsc2UKQEAgLTI2OTEsNyArMjY5MSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNoZWNr
TGluZXNGb3JUZXh0T3ZlcmYKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywg
ZWxsaXBzaXNTdHIsICgmaG9yaXpvbnRhbEVsbGlwc2lzLCAxKSk7CiAgICAgY29uc3QgRm9udCYg
Zmlyc3RMaW5lRm9udCA9IGZpcnN0TGluZVN0eWxlKCktPmZvbnQoKTsKICAgICBMYXlvdXRVbml0
IGZpcnN0TGluZUVsbGlwc2lzV2lkdGggPSBmaXJzdExpbmVGb250LndpZHRoKGNvbnN0cnVjdFRl
eHRSdW4odGhpcywgZmlyc3RMaW5lRm9udCwgJmhvcml6b250YWxFbGxpcHNpcywgMSwgZmlyc3RM
aW5lU3R5bGUoKSkpOwotICAgIExheW91dFVuaXQgZWxsaXBzaXNXaWR0aCA9IChmb250ID09IGZp
cnN0TGluZUZvbnQpID8gZmlyc3RMaW5lRWxsaXBzaXNXaWR0aCA6IGZvbnQud2lkdGgoY29uc3Ry
dWN0VGV4dFJ1bih0aGlzLCBmb250LCAmaG9yaXpvbnRhbEVsbGlwc2lzLCAxLCBzdHlsZSgpKSk7
CisgICAgTGF5b3V0VW5pdCBlbGxpcHNpc1dpZHRoID0gKGZvbnQgPT0gZmlyc3RMaW5lRm9udCkg
PyBmaXJzdExpbmVFbGxpcHNpc1dpZHRoIDogc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oZm9udC53
aWR0aChjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsICZob3Jpem9udGFsRWxsaXBzaXMsIDEs
IHN0eWxlKCkpKSk7CiAKICAgICAvLyBGb3IgTFRSIHRleHQgdHJ1bmNhdGlvbiwgd2Ugd2FudCB0
byBnZXQgdGhlIHJpZ2h0IGVkZ2Ugb2Ygb3VyIHBhZGRpbmcgYm94LCBhbmQgdGhlbiB3ZSB3YW50
IHRvIHNlZQogICAgIC8vIGlmIHRoZSByaWdodCBlZGdlIG9mIGEgbGluZSBib3ggZXhjZWVkcyB0
aGF0LiAgRm9yIFJUTCwgd2UgdXNlIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIHBhZGRpbmcgYm94IGFu
ZAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131955</attachid>
            <date>2012-03-14 16:31:46 -0700</date>
            <delta_ts>2012-03-15 17:43:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80437-20120314163144.patch</filename>
            <type>text/plain</type>
            <size>23245</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMDc0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDEyLTAzLTA2ICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBVcGRhdGUgdXNhZ2Ugb2Yg
TGF5b3V0VW5pdHMgaW4gUmVuZGVyQmxvY2sqCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD04MDQzNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVwZGF0aW5nIExheW91dFVuaXQgdXNhZ2UgaW4gUmVuZGVyQmxv
Y2sgYW5kIFJlbmRlckJsb2NrTGluZUxheW91dC4gVGhpcyBiZXR0ZXIgcmVhZGllcyB0cnVuayBm
b3IKKyAgICAgICAgdGhlIHRyYW5zaXRpb24gdG8gc3VicGl4ZWwgbGF5b3V0LgorCisgICAgICAg
IFNlZSBodHRwczovL3RyYWMud2Via2l0Lm9yZy93aWtpL0xheW91dFVuaXQgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIE5vIGNoYW5nZWQgYmVoYXZpb3IuCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVUZXh0Qm94OjpwYWludCk6IEFkZGluZyB0aGUgcGFpbnQgb2Zmc2V0IHJvdW5kaW5nIHBy
ZXZpb3VzbHkgaW4gUmVuZGVyQmxvY2s6OnBhaW50LgorICAgICAgICAqIHJlbmRlcmluZy9MYXlv
dXRUeXBlcy5oOgorICAgICAgICAoV2ViQ29yZTo6Zmxvb3JUb0ludCk6IFdpbGwgZmxvb3IgYSBM
YXlvdXRVbml0IHRvIGFuIGludGVnZXIgb25jZSB3ZSBzd2l0Y2ggdG8KKyAgICAgICAgRnJhY3Rp
b25hbExheW91dFVuaXRzLgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRlZE11bHRpcGx5KTogTWV0
aG9kIHRoYXQgd2lsbCByZXR1cm4gdGhlIG11bHRpcGxpZWQgcmVzdWx0IG9mIHR3byBMYXlvdXRV
bml0cworICAgICAgICBvciB0aGUgbWF4L21pbiBMYXlvdXRVbml0IGlmIHRoZSByZXN1bHQgb3Zl
cmZsb3dzLiBPbmx5IGRvZXMgYSByZWd1bGFyIG11bHRpcGx5IHdoaWxlCisgICAgICAgIExheW91
dFVuaXRzIGFyZSBpbnRlZ2VycyBpbnN0ZWFkIG9mIEZyYWN0aW9uYWxMYXlvdXRVbml0cy4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRDb250ZW50cyk6IFJvdW5kaW5nIHRo
ZSBwYWludE9mZnNldCBoZXJlIGRpZG4ndCB3b3JrIGZvciBhbGwKKyAgICAgICAgaW5saW5lIGJs
b2Nrcy4gVGhpcyByb3VuZGluZyBpcyBhY3R1YWxseSBvbmx5IG5lZWRlZCBmb3IgSW5saW5lVGV4
dEJveGVzLCBzbyB0aGUgbG9naWMgaGFzCisgICAgICAgIGJlZW4gbW92ZWQgdGhlcmUuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bmV3TGluZSk6IFVzZSBhIExheW91dFVuaXQgZm9y
IHRoZSB5IHBvc2l0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmlzUG9pbnRJ
bk92ZXJmbG93Q29udHJvbCk6IFBvaW50cyBmb3IgaGl0IHRlc3RpbmcgbmVlZCB0byBiZSByb3Vu
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dENvbHVtbnMpOiBVc2lu
ZyBib3VuZGVkTXVsdGlwbHkgZm9yIGEgY2FsY3VsYXRpb24gcHJvbmUgdG8gb3ZlcmZsb3cuCisg
ICAgICAgIChXZWJDb3JlOjp1cGRhdGVQcmVmZXJyZWRXaWR0aCk6IFJldmVydGluZyBiYWNrIHRv
IHVzaW5nIGNlaWxmLiBjZWlsZWRMYXlvdXRVbml0IHdhcyB0byBiZSB1bHRpbWF0ZWx5CisgICAg
ICAgIGNvbnZlcnRlZCB0byBqdXN0IGEgc3RyYWlnaHQgTGF5b3V0VW5pdCBjb25zdHJ1Y3RvciB0
byBwcmVzZXJ2ZSBwcmVjaXNpb24uIFRoaXMgcHJlY2lzaW9uIGRvZXNuJ3Qgd29yaworICAgICAg
ICBmb3IgdXMgaGVyZSBhcyB3ZSBzdGlsbCBwYWludCBCb3hlcy9CbG9ja3Mgb24gcGl4ZWwgYm91
bmRhcmllcywgc28gd2UgbmVlZCB0byBleHBhbmQgdG8gYSBwaXhlbCBzaXplCisgICAgICAgIHRo
YXQgZW5jbG9zZXMgdGhlIGNvbnRhaW5lZCB0ZXh0LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OnNldFBhZ2VMb2dpY2FsT2Zmc2V0KTogTG9naWNhbE9mZnNldCBzaG91bGQgYmUgYSBM
YXlvdXRVbml0LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om1hcmdpblZhbHVlc0Zv
ckNoaWxkKTogTWFyZ2lucyBzaG91bGQgaGF2ZSBzdWJwaXhlbCByZXNvbHV0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6aW50ZXJ2YWxGb3JGbG9h
dGluZ09iamVjdCk6IEludGVydmFscyBmb3IgZmxvYXRpbmcgb2JqZWN0cworICAgICAgICBuZWVk
IHRvIHVzZSBwaXhlbCBzbmFwcGVkIHZhbHVlcyB0byBnaXZlIHRoZSBwcm9wZXIgcmVzdWx0cy4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpwaXhlbFNuYXBwZWRMb2dpY2FsTGVmdE9mZnNldEZvckxpbmUpOiBPbmx5IG1v
dmVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBpeGVsU25hcHBlZExvZ2ljYWxS
aWdodE9mZnNldEZvckxpbmUpOiBXaGlsZSB3ZSBjYW4gcm91bmQgdGhlIGxlZnQgb2Zmc2V0LAor
ICAgICAgICBjb2x1bW5zIGFkZCBhbiBleHRyYSBvZmZzZXQgYXQgcGFpbnQgdGhhdCBjYW4ndCBj
dXJyZW50bHkgYmUgcGxhbm5lZCBmb3IgYXQgbGluZS1sYXlvdXQgdGltZS4gVG8KKyAgICAgICAg
YXZvaWQgbGF5aW5nIG91dCBsaW5lcyB0aGF0IHJ1biBvZmYgdGhlIGVuZCBvZiBjb2x1bW5zLCB3
ZSBmbG9vciB0aGUgcmlnaHQgb2Zmc2V0LiBUaGUgcmVzdWx0aW5nCisgICAgICAgIGxpbmVzIHdp
bGwgYmUgdXAgdG8gMSBwaXhlbCBzaG9ydGVyIHRoYW4gdGhleSBwb3RlbnRpYWxseSBjb3VsZCBi
ZS4KKyAgICAgICAgKFJlbmRlckJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpGbG9hdGluZ09iamVjdDo6cGl4ZWxTbmFwcGVkWCk6IFVzaW5nIGNvcnJlc3BvbmRpbmcgcGl4
ZWxTbmFwcGVkWCB2YWx1ZSBmcm9tCisgICAgICAgIExheW91dFJlY3RzLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpwaXhlbFNuYXBwZWRNYXhYKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OnBpeGVs
U25hcHBlZFkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGlu
Z09iamVjdDo6cGl4ZWxTbmFwcGVkTWF4WSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpwaXhlbFNuYXBwZWRXaWR0aCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpwaXhlbFNuYXBwZWRI
ZWlnaHQpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVXaWR0aDo6c2hyaW5rQXZhaWxhYmxlV2lkdGhG
b3JOZXdGbG9hdElmTmVlZGVkKTogTG9naWNhbEhlaWdodCBpcyBhIExheW91dFVuaXQuIEFsc28K
KyAgICAgICAgZmxvb3JpbmcgdGV4dEluZGVudE9mZnNldCB0byBhbiBpbnRlZ2VyIHRvIG1hdGNo
IG9sZCBiZWhhdmlvci4KKyAgICAgICAgKFdlYkNvcmU6OkxpbmVXaWR0aDo6Zml0QmVsb3dGbG9h
dHMpOiBVc2luZyBMYXlvdXRVbml0cyBmb3IgZmxvYXQgbG9naWNhbCB0b3AgYW5kIGJvdHRvbXMu
CisgICAgICAgIChXZWJDb3JlOjpzZXRMb2dpY2FsV2lkdGhGb3JUZXh0UnVuKTogQ29ycmVjdGlu
ZyBudW1lcm91cyBpbnRlZ2VycyB0aGF0IHNob3VsZCBiZSBMYXlvdXRVbml0cy4KKyAgICAgICAg
KFdlYkNvcmU6OkxpbmVMYXlvdXRTdGF0ZTo6ZW5kTGluZUxvZ2ljYWxUb3ApOiBDaGFuZ2luZyB0
byBhIExheW91dFVuaXQuCisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0U3RhdGU6OnNldEVu
ZExpbmVMb2dpY2FsVG9wKTogRGl0dG8uCisgICAgICAgIChMaW5lTGF5b3V0U3RhdGUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsaW5rVG9FbmRMaW5lSWZOZWVkZWQp
OiBDYWxjdWxhdGluZyBvdmVyZmxvdyB3aXRoIExheW91dFVuaXRzLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKTogTG93ZXN0QWxsb3dlZFBvc2l0
aW9uIHNob3VsZCBiZSBzdWJwaXhlbC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpj
aGVja0xpbmVzRm9yVGV4dE92ZXJmbG93KTogUmV2ZXJ0aW5nIGVsbGlwc2lzIHdpZHRoIGNhbGN1
bGF0aW9uIHRvIGludGVnZXJzCisgICAgICAgIGFzIHRoaXMgdmFsdWUgY2FuIGJlIHNlZW4gYXMg
cmVwcmVzZW50aW5nIHBpeGVscyBvbiBzY3JlZW4uCisKIDIwMTItMDMtMTQgIFphbGFuIEJ1anRh
cyAgPHpidWp0YXNAZ21haWwuY29tPgogCiAgICAgICAgIEZyYW1lIGZsYXR0ZW5pbmcgQVNTRVJU
KCFuZWVkc0xheW91dCgpKSBpbiBGcmFtZVZpZXc6OnBhaW50Q29udGVudHMoKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gMTEwNzQw
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00ODMsNyArNDgzLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWlu
dEluZm8mIHBhaQogICAgIExheW91dFVuaXQgcGFpbnRFbmQgPSBpc0hvcml6b250YWwoKSA/IHBh
aW50SW5mby5yZWN0Lm1heFgoKSA6IHBhaW50SW5mby5yZWN0Lm1heFkoKTsKICAgICBMYXlvdXRV
bml0IHBhaW50U3RhcnQgPSBpc0hvcml6b250YWwoKSA/IHBhaW50SW5mby5yZWN0LngoKSA6IHBh
aW50SW5mby5yZWN0LnkoKTsKICAgICAKLSAgICBMYXlvdXRQb2ludCBhZGp1c3RlZFBhaW50T2Zm
c2V0ID0gcGFpbnRPZmZzZXQ7CisgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9
IHJvdW5kZWRJbnRQb2ludChwYWludE9mZnNldCk7CiAgICAgCiAgICAgaWYgKGxvZ2ljYWxTdGFy
dCA+PSBwYWludEVuZCB8fCBsb2dpY2FsU3RhcnQgKyBsb2dpY2FsRXh0ZW50IDw9IHBhaW50U3Rh
cnQpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlv
dXRUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRU
eXBlcy5oCShyZXZpc2lvbiAxMTA3NDApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5
b3V0VHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDYgKzEyMCwxMSBAQCBpbmxpbmUgaW50
IHJvdW5kVG9JbnQoTGF5b3V0VW5pdCB2YWx1ZSkKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKK2lu
bGluZSBpbnQgZmxvb3JUb0ludChMYXlvdXRVbml0IHZhbHVlKQoreworICAgIHJldHVybiB2YWx1
ZTsKK30KKwogaW5saW5lIExheW91dFVuaXQgcm91bmRlZExheW91dFVuaXQoZmxvYXQgdmFsdWUp
CiB7CiAgICAgcmV0dXJuIGxyb3VuZGYodmFsdWUpOwpAQCAtMTU1LDYgKzE2MCwxMSBAQCBpbmxp
bmUgYm9vbCBpc0ludGVnZXJWYWx1ZShjb25zdCBMYXlvdXRVCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKK2lubGluZSBMYXlvdXRVbml0IGJvdW5kZWRNdWx0aXBseShjb25zdCBMYXlvdXRVbml0JiBh
LCBjb25zdCBMYXlvdXRVbml0JiBiKQoreworICAgIHJldHVybiBhICogYjsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gTGF5b3V0VHlwZXNfaApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxMTA3NDApCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzgwLDEzICsyNzgwLDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q29udGVudHMoUGFp
bnRJbmYKICAgICBpZiAoZG9jdW1lbnQoKS0+ZGlkTGF5b3V0V2l0aFBlbmRpbmdTdHlsZXNoZWV0
cygpICYmICFpc1JlbmRlclZpZXcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gV2UgZG9u
J3Qgd2FudCB0byBoYW5kIG9mZiBwYWludGluZyBpbiB0aGUgbGluZSBib3ggdHJlZSB3aXRoIHRo
ZSBhY2N1bXVsYXRlZCBlcnJvciBvZiB0aGUgcmVuZGVyIHRyZWUsIGFzIHRoaXMgd2lsbCBjYXVz
ZQotICAgIC8vIHVzIHRvIG1lc3MgdXAgcGFpbnRpbmcgYWxpZ25lZCB0aGluZ3MgKHN1Y2ggYXMg
dW5kZXJsaW5lcyBpbiB0ZXh0KSB3aXRoIGJvdGggdGhlIHJlbmRlciB0cmVlIGFuZCBsaW5lIGJv
eCB0cmVlJ3MgZXJyb3IuCi0gICAgTGF5b3V0UG9pbnQgcm91bmRlZFBhaW50T2Zmc2V0ID0gcm91
bmRlZEludFBvaW50KHBhaW50T2Zmc2V0KTsKICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkKLSAg
ICAgICAgbV9saW5lQm94ZXMucGFpbnQodGhpcywgcGFpbnRJbmZvLCByb3VuZGVkUGFpbnRPZmZz
ZXQpOworICAgICAgICBtX2xpbmVCb3hlcy5wYWludCh0aGlzLCBwYWludEluZm8sIHBhaW50T2Zm
c2V0KTsKICAgICBlbHNlCi0gICAgICAgIHBhaW50Q2hpbGRyZW4ocGFpbnRJbmZvLCByb3VuZGVk
UGFpbnRPZmZzZXQpOworICAgICAgICBwYWludENoaWxkcmVuKHBhaW50SW5mbywgcGFpbnRPZmZz
ZXQpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpwYWludENoaWxkcmVuKFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCkBAIC0zNzg2LDcgKzM3ODMs
NyBAQCB2b2lkIFJlbmRlckJsb2NrOjpuZXdMaW5lKEVDbGVhciBjbGVhcikKIHsKICAgICBwb3Np
dGlvbk5ld0Zsb2F0cygpOwogICAgIC8vIHNldCB5IHBvc2l0aW9uCi0gICAgaW50IG5ld1kgPSAw
OworICAgIExheW91dFVuaXQgbmV3WSA9IDA7CiAgICAgc3dpdGNoIChjbGVhcikKICAgICB7CiAg
ICAgICAgIGNhc2UgQ0xFRlQ6CkBAIC00NDc3LDcgKzQ0NzQsNyBAQCBib29sIFJlbmRlckJsb2Nr
Ojppc1BvaW50SW5PdmVyZmxvd0NvbnRyCiAgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSB8fCAh
aGFzTGF5ZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGxheWVyKCkt
PmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAtIHRvTGF5
b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpOworICAgIHJldHVybiBsYXllcigpLT5oaXRUZXN0
T3ZlcmZsb3dDb250cm9scyhyZXN1bHQsIHJvdW5kZWRJbnRQb2ludChwb2ludEluQ29udGFpbmVy
IC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSkpOwogfQogCiBib29sIFJlbmRlckJs
b2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3Qg
TGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rp
b24pCkBAIC01MDE4LDcgKzUwMTUsNyBAQCBib29sIFJlbmRlckJsb2NrOjpsYXlvdXRDb2x1bW5z
KGJvb2wgaGFzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlTG9naWNhbE9m
ZnNldChib3JkZXJCZWZvcmUoKSArIHBhZGRpbmdCZWZvcmUoKSArIGNvbnRlbnRMb2dpY2FsSGVp
Z2h0KCkpIC0gY29sSW5mby0+Zm9yY2VkQnJlYWtPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAg
Y29sdW1uSGVpZ2h0ID0gbWF4KGNvbEluZm8tPm1pbmltdW1Db2x1bW5IZWlnaHQoKSwgZGlzdGFu
Y2VCZXR3ZWVuQnJlYWtzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjb250
ZW50TG9naWNhbEhlaWdodCgpID4gcGFnZUxvZ2ljYWxIZWlnaHQgKiBkZXNpcmVkQ29sdW1uQ291
bnQpIHsKKyAgICAgICAgfSBlbHNlIGlmIChjb250ZW50TG9naWNhbEhlaWdodCgpID4gYm91bmRl
ZE11bHRpcGx5KHBhZ2VMb2dpY2FsSGVpZ2h0LCBkZXNpcmVkQ29sdW1uQ291bnQpKSB7CiAgICAg
ICAgICAgICAvLyBOb3cgdGhhdCB3ZSBrbm93IHRoZSBpbnRyaW5zaWMgaGVpZ2h0IG9mIHRoZSBj
b2x1bW5zLCB3ZSBoYXZlIHRvIHJlYmFsYW5jZSB0aGVtLgogICAgICAgICAgICAgY29sdW1uSGVp
Z2h0ID0gbWF4PExheW91dFVuaXQ+KGNvbEluZm8tPm1pbmltdW1Db2x1bW5IZWlnaHQoKSwgY2Vp
bGYoKGZsb2F0KWNvbnRlbnRMb2dpY2FsSGVpZ2h0KCkgLyBkZXNpcmVkQ29sdW1uQ291bnQpKTsK
ICAgICAgICAgfQpAQCAtNTQwOSw3ICs1NDA2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHN0cmlw
VHJhaWxpbmdTcGFjZShmbAogCiBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlUHJlZmVycmVkV2lk
dGgoTGF5b3V0VW5pdCYgcHJlZmVycmVkV2lkdGgsIGZsb2F0JiByZXN1bHQpCiB7Ci0gICAgTGF5
b3V0VW5pdCBzbmFwcGVkUmVzdWx0ID0gY2VpbGVkTGF5b3V0VW5pdChyZXN1bHQpOworICAgIExh
eW91dFVuaXQgc25hcHBlZFJlc3VsdCA9IGNlaWxmKHJlc3VsdCk7CiAgICAgcHJlZmVycmVkV2lk
dGggPSBtYXgoc25hcHBlZFJlc3VsdCwgcHJlZmVycmVkV2lkdGgpOwogfQogCkBAIC02MzY1LDcg
KzYzNjIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpzZXRQYWdpbmF0aW9uU3RydXQoTGF5CiAgICAg
bV9yYXJlRGF0YS0+bV9wYWdpbmF0aW9uU3RydXQgPSBzdHJ1dDsKIH0KIAotdm9pZCBSZW5kZXJC
bG9jazo6c2V0UGFnZUxvZ2ljYWxPZmZzZXQoaW50IGxvZ2ljYWxPZmZzZXQpCit2b2lkIFJlbmRl
ckJsb2NrOjpzZXRQYWdlTG9naWNhbE9mZnNldChMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXQpCiB7
CiAgICAgaWYgKCFtX3JhcmVEYXRhKSB7CiAgICAgICAgIGlmICghbG9naWNhbE9mZnNldCkKQEAg
LTcxNjgsMTMgKzcxNjUsMTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2V0TWFyZ2luQWZ0ZXJGb3JD
aGlsZAogCiBSZW5kZXJCbG9jazo6TWFyZ2luVmFsdWVzIFJlbmRlckJsb2NrOjptYXJnaW5WYWx1
ZXNGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKQogewotICAgIGludCBjaGlsZEJlZm9yZVBvc2l0
aXZlID0gMDsKLSAgICBpbnQgY2hpbGRCZWZvcmVOZWdhdGl2ZSA9IDA7Ci0gICAgaW50IGNoaWxk
QWZ0ZXJQb3NpdGl2ZSA9IDA7Ci0gICAgaW50IGNoaWxkQWZ0ZXJOZWdhdGl2ZSA9IDA7CisgICAg
TGF5b3V0VW5pdCBjaGlsZEJlZm9yZVBvc2l0aXZlID0gMDsKKyAgICBMYXlvdXRVbml0IGNoaWxk
QmVmb3JlTmVnYXRpdmUgPSAwOworICAgIExheW91dFVuaXQgY2hpbGRBZnRlclBvc2l0aXZlID0g
MDsKKyAgICBMYXlvdXRVbml0IGNoaWxkQWZ0ZXJOZWdhdGl2ZSA9IDA7CiAKLSAgICBpbnQgYmVm
b3JlTWFyZ2luID0gMDsKLSAgICBpbnQgYWZ0ZXJNYXJnaW4gPSAwOworICAgIExheW91dFVuaXQg
YmVmb3JlTWFyZ2luID0gMDsKKyAgICBMYXlvdXRVbml0IGFmdGVyTWFyZ2luID0gMDsKIAogICAg
IFJlbmRlckJsb2NrKiBjaGlsZFJlbmRlckJsb2NrID0gY2hpbGQtPmlzUmVuZGVyQmxvY2soKSA/
IHRvUmVuZGVyQmxvY2soY2hpbGQpIDogMDsKICAgICAKQEAgLTcyODIsOCArNzI3OSw4IEBAIGlu
bGluZSB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHMKIGlubGluZSBSZW5kZXJCbG9j
azo6RmxvYXRpbmdPYmplY3RJbnRlcnZhbCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpp
bnRlcnZhbEZvckZsb2F0aW5nT2JqZWN0KEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkK
IHsKICAgICBpZiAobV9ob3Jpem9udGFsV3JpdGluZ01vZGUpCi0gICAgICAgIHJldHVybiBSZW5k
ZXJCbG9jazo6RmxvYXRpbmdPYmplY3RJbnRlcnZhbChmbG9hdGluZ09iamVjdC0+eSgpLCBmbG9h
dGluZ09iamVjdC0+bWF4WSgpLCBmbG9hdGluZ09iamVjdCk7Ci0gICAgcmV0dXJuIFJlbmRlckJs
b2NrOjpGbG9hdGluZ09iamVjdEludGVydmFsKGZsb2F0aW5nT2JqZWN0LT54KCksIGZsb2F0aW5n
T2JqZWN0LT5tYXhYKCksIGZsb2F0aW5nT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIFJlbmRlckJs
b2NrOjpGbG9hdGluZ09iamVjdEludGVydmFsKGZsb2F0aW5nT2JqZWN0LT5waXhlbFNuYXBwZWRZ
KCksIGZsb2F0aW5nT2JqZWN0LT5waXhlbFNuYXBwZWRNYXhZKCksIGZsb2F0aW5nT2JqZWN0KTsK
KyAgICByZXR1cm4gUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0SW50ZXJ2YWwoZmxvYXRpbmdP
YmplY3QtPnBpeGVsU25hcHBlZFgoKSwgZmxvYXRpbmdPYmplY3QtPnBpeGVsU25hcHBlZE1heFgo
KSwgZmxvYXRpbmdPYmplY3QpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVj
dHM6OmFkZFBsYWNlZE9iamVjdChGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gMTEwNzQwKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE2Niw2ICsxNjYsMTcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGxvZ2lj
YWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50
KHBvc2l0aW9uKSwgZmlyc3RMaW5lLCAwKTsKICAgICB9CisgICAgTGF5b3V0VW5pdCBwaXhlbFNu
YXBwZWRMb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwgYm9vbCBm
aXJzdExpbmUpIGNvbnN0IAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJvdW5kVG9JbnQobG9naWNh
bExlZnRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBmaXJzdExpbmUpKTsKKyAgICB9CisgICAgTGF5
b3V0VW5pdCBwaXhlbFNuYXBwZWRMb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQg
cG9zaXRpb24sIGJvb2wgZmlyc3RMaW5lKSBjb25zdCAKKyAgICB7CisgICAgICAgIC8vIEZJWE1F
OiBNdWx0aWNvbHVtbiBsYXlvdXRzIGJyZWFrIGNhcnJ5aW5nIG92ZXIgc3VicGl4ZWwgdmFsdWVz
IHRvIHRoZSBsb2dpY2FsIHJpZ2h0IG9mZnNldCBiZWNhdXNlIHRoZSBsaW5lcyBtYXkgYmUgc2hp
ZnRlZAorICAgICAgICAvLyBieSBhIHN1YnBpeGVsIHZhbHVlIGZvciBhbGwgYnV0IHRoZSBmaXJz
dCBjb2x1bW4uIFRoaXMgY2FuIGxlYWQgdG8gdGhlIGFjdHVhbCBwaXhlbCBzbmFwcGVkIHdpZHRo
IG9mIHRoZSBjb2x1bW4gYmVpbmcgb2ZmCisgICAgICAgIC8vIGJ5IG9uZSBwaXhlbCB3aGVuIHJl
bmRlcmVkIHZlcnN1cyBsYXllZCBvdXQsIHdoaWNoIGNhbiByZXN1bHQgaW4gdGhlIGxpbmUgYmVp
bmcgY2xpcHBlZC4gRm9yIG5vdywgd2UgaGF2ZSB0byBmbG9vci4KKyAgICAgICAgcmV0dXJuIGZs
b29yVG9JbnQobG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgZmlyc3RMaW5lKSk7
CisgICAgfQogICAgIExheW91dFVuaXQgc3RhcnRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9z
aXRpb24sIGJvb2wgZmlyc3RMaW5lKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHN0eWxl
KCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShw
b3NpdGlvbiwgZmlyc3RMaW5lKQpAQCAtMTc3LDE3ICsxODgsNiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICA6IGxvZ2ljYWxXaWR0aCgpIC0gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShwb3NpdGlv
biwgZmlyc3RMaW5lKTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogVGhlIGltcGxlbWVudGF0aW9u
IGZvciB0aGVzZSBmdW5jdGlvbnMgd2lsbCBjaGFuZ2Ugb25jZSB3ZSBtb3ZlIHRvIHN1YnBpeGVs
IGxheW91dC4gU2VlIGJ1ZyA2MDMxOC4KLSAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNhbFJpZ2h0
T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9uLCBib29sIGZpcnN0TGluZSkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKHBvc2l0aW9u
LCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KHBvc2l0aW9uKSwgZmlyc3RMaW5lLCAwKTsK
LSAgICB9Ci0KLSAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKExh
eW91dFVuaXQgcG9zaXRpb24sIGJvb2wgZmlyc3RMaW5lKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIHJvdW5kVG9JbnQobG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBsb2dp
Y2FsTGVmdE9mZnNldEZvckNvbnRlbnQocG9zaXRpb24pLCBmaXJzdExpbmUsIDApKTsKLSAgICB9
Ci0gICAgCiAgICAgTGF5b3V0VW5pdCBzdGFydEFsaWduZWRPZmZzZXRGb3JMaW5lKFJlbmRlckJv
eCogY2hpbGQsIExheW91dFVuaXQgcG9zaXRpb24sIGJvb2wgZmlyc3RMaW5lKTsKICAgICBMYXlv
dXRVbml0IHRleHRJbmRlbnRPZmZzZXQoKSBjb25zdDsKIApAQCAtMjYxLDcgKzI2MSw3IEBAIHB1
YmxpYzoKICAgICAvLyBUaGUgcGFnZSBsb2dpY2FsIG9mZnNldCBpcyB0aGUgb2JqZWN0J3Mgb2Zm
c2V0IGZyb20gdGhlIHRvcCBvZiB0aGUgcGFnZSBpbiB0aGUgcGFnZSBwcm9ncmVzc2lvbgogICAg
IC8vIGRpcmVjdGlvbiAoc28gYW4geC1vZmZzZXQgaW4gdmVydGljYWwgdGV4dCBhbmQgYSB5LW9m
ZnNldCBmb3IgaG9yaXpvbnRhbCB0ZXh0KS4KICAgICBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsT2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fcGFnZUxvZ2lj
YWxPZmZzZXQgOiB6ZXJvTGF5b3V0VW5pdDsgfQotICAgIHZvaWQgc2V0UGFnZUxvZ2ljYWxPZmZz
ZXQoaW50KTsKKyAgICB2b2lkIHNldFBhZ2VMb2dpY2FsT2Zmc2V0KExheW91dFVuaXQpOwogCiAg
ICAgUm9vdElubGluZUJveCogbGluZUdyaWRCb3goKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRh
ID8gbV9yYXJlRGF0YS0+bV9saW5lR3JpZEJveCA6IDA7IH0KICAgICB2b2lkIHNldExpbmVHcmlk
Qm94KFJvb3RJbmxpbmVCb3gqIGJveCkKQEAgLTU5NywxMyArNTk3LDEyIEBAIHByaXZhdGU6CiAg
ICAgICAgIExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC53aWR0
aCgpOyB9CiAgICAgICAgIExheW91dFVuaXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFt
ZVJlY3QuaGVpZ2h0KCk7IH0KIAotICAgICAgICAvLyBGSVhNRTogVGhlIGltcGxlbWVudGF0aW9u
IGZvciB0aGVzZSBmdW5jdGlvbnMgd2lsbCBjaGFuZ2Ugb25jZSB3ZSBtb3ZlIHRvIHN1YnBpeGVs
IGxheW91dC4gU2VlIGJ1ZyA2MDMxOC4KLSAgICAgICAgaW50IHBpeGVsU25hcHBlZFgoKSBjb25z
dCB7IHJldHVybiB4KCk7IH0KLSAgICAgICAgaW50IHBpeGVsU25hcHBlZE1heFgoKSBjb25zdCB7
IHJldHVybiBtYXhYKCk7IH0KLSAgICAgICAgaW50IHBpeGVsU25hcHBlZFkoKSBjb25zdCB7IHJl
dHVybiB5KCk7IH0KLSAgICAgICAgaW50IHBpeGVsU25hcHBlZE1heFkoKSBjb25zdCB7IHJldHVy
biBtYXhZKCk7IH0KLSAgICAgICAgaW50IHBpeGVsU25hcHBlZFdpZHRoKCkgY29uc3QgeyByZXR1
cm4gd2lkdGgoKTsgfQotICAgICAgICBpbnQgcGl4ZWxTbmFwcGVkSGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gaGVpZ2h0KCk7IH0KKyAgICAgICAgaW50IHBpeGVsU25hcHBlZFgoKSBjb25zdCB7IEFT
U0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0LnBpeGVsU25hcHBlZFgoKTsgfQor
ICAgICAgICBpbnQgcGl4ZWxTbmFwcGVkTWF4WCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkp
OyByZXR1cm4gbV9mcmFtZVJlY3QucGl4ZWxTbmFwcGVkTWF4WCgpOyB9CisgICAgICAgIGludCBw
aXhlbFNuYXBwZWRZKCkgY29uc3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJldHVybiBtX2ZyYW1l
UmVjdC5waXhlbFNuYXBwZWRZKCk7IH0KKyAgICAgICAgaW50IHBpeGVsU25hcHBlZE1heFkoKSBj
b25zdCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0LnBpeGVsU25hcHBl
ZE1heFkoKTsgfQorICAgICAgICBpbnQgcGl4ZWxTbmFwcGVkV2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX2ZyYW1lUmVjdC5waXhlbFNuYXBwZWRXaWR0aCgpOyB9CisgICAgICAgIGludCBwaXhlbFNu
YXBwZWRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC5waXhlbFNuYXBwZWRIZWln
aHQoKTsgfQogCiAgICAgICAgIHZvaWQgc2V0WChMYXlvdXRVbml0IHgpIHsgQVNTRVJUKCFpc0lu
UGxhY2VkVHJlZSgpKTsgbV9mcmFtZVJlY3Quc2V0WCh4KTsgfQogICAgICAgICB2b2lkIHNldFko
TGF5b3V0VW5pdCB5KSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0LnNl
dFkoeSk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVM
YXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0xpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAxMTA3NDApCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIz
LDE4ICsxMjMsMTggQEAgaW5saW5lIHZvaWQgTGluZVdpZHRoOjp1cGRhdGVBdmFpbGFibGVXaQog
CiBpbmxpbmUgdm9pZCBMaW5lV2lkdGg6OnNocmlua0F2YWlsYWJsZVdpZHRoRm9yTmV3RmxvYXRJ
Zk5lZWRlZChSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqIG5ld0Zsb2F0KQogewotICAgIGlu
dCBoZWlnaHQgPSBtX2Jsb2NrLT5sb2dpY2FsSGVpZ2h0KCk7CisgICAgTGF5b3V0VW5pdCBoZWln
aHQgPSBtX2Jsb2NrLT5sb2dpY2FsSGVpZ2h0KCk7CiAgICAgaWYgKGhlaWdodCA8IG1fYmxvY2st
PmxvZ2ljYWxUb3BGb3JGbG9hdChuZXdGbG9hdCkgfHwgaGVpZ2h0ID49IG1fYmxvY2stPmxvZ2lj
YWxCb3R0b21Gb3JGbG9hdChuZXdGbG9hdCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChu
ZXdGbG9hdC0+dHlwZSgpID09IFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0
KSB7CiAgICAgICAgIG1fbGVmdCA9IG1fYmxvY2stPnBpeGVsU25hcHBlZExvZ2ljYWxSaWdodEZv
ckZsb2F0KG5ld0Zsb2F0KTsKICAgICAgICAgaWYgKG1faXNGaXJzdExpbmUgJiYgbV9ibG9jay0+
c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICAgICAgbV9sZWZ0ICs9
IG1fYmxvY2stPnRleHRJbmRlbnRPZmZzZXQoKTsKKyAgICAgICAgICAgIG1fbGVmdCArPSBmbG9v
clRvSW50KG1fYmxvY2stPnRleHRJbmRlbnRPZmZzZXQoKSk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgbV9yaWdodCA9IG1fYmxvY2stPnBpeGVsU25hcHBlZExvZ2ljYWxMZWZ0Rm9yRmxvYXQobmV3
RmxvYXQpOwogICAgICAgICBpZiAobV9pc0ZpcnN0TGluZSAmJiAhbV9ibG9jay0+c3R5bGUoKS0+
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICAgICAgbV9yaWdodCAtPSBtX2Jsb2Nr
LT50ZXh0SW5kZW50T2Zmc2V0KCk7CisgICAgICAgICAgICBtX3JpZ2h0IC09IGZsb29yVG9JbnQo
bV9ibG9jay0+dGV4dEluZGVudE9mZnNldCgpKTsKICAgICB9CiAKICAgICBjb21wdXRlQXZhaWxh
YmxlV2lkdGhGcm9tTGVmdEFuZFJpZ2h0KCk7CkBAIC0xNTksOCArMTU5LDggQEAgdm9pZCBMaW5l
V2lkdGg6OmZpdEJlbG93RmxvYXRzKCkKICAgICBBU1NFUlQoIW1fY29tbWl0dGVkV2lkdGgpOwog
ICAgIEFTU0VSVCghZml0c09uTGluZSgpKTsKIAotICAgIGludCBmbG9hdExvZ2ljYWxCb3R0b207
Ci0gICAgaW50IGxhc3RGbG9hdExvZ2ljYWxCb3R0b20gPSBtX2Jsb2NrLT5sb2dpY2FsSGVpZ2h0
KCk7CisgICAgTGF5b3V0VW5pdCBmbG9hdExvZ2ljYWxCb3R0b207CisgICAgTGF5b3V0VW5pdCBs
YXN0RmxvYXRMb2dpY2FsQm90dG9tID0gbV9ibG9jay0+bG9naWNhbEhlaWdodCgpOwogICAgIGZs
b2F0IG5ld0xpbmVXaWR0aCA9IG1fYXZhaWxhYmxlV2lkdGg7CiAgICAgZmxvYXQgbmV3TGluZUxl
ZnQgPSBtX2xlZnQ7CiAgICAgZmxvYXQgbmV3TGluZVJpZ2h0ID0gbV9yaWdodDsKQEAgLTY0NSwx
NiArNjQ1LDE2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRMb2dpY2FsV2lkdGhGb3JUZXgKICAg
ICAgICAgLy8gSWYgd2UgZG9uJ3Qgc3RpY2sgb3V0IG9mIHRoZSByb290IGxpbmUncyBmb250IGJv
eCwgdGhlbiBkb24ndCBib3RoZXIgY29tcHV0aW5nIG91ciBnbHlwaCBvdmVyZmxvdy4gVGhpcyBv
cHRpbWl6YXRpb24KICAgICAgICAgLy8gd2lsbCBrZWVwIHVzIGZyb20gY29tcHV0aW5nIGdseXBo
IGJvdW5kcyBpbiBuZWFybHkgYWxsIGNhc2VzLgogICAgICAgICBib29sIGluY2x1ZGVSb290TGlu
ZSA9IGxpbmVCb3gtPmluY2x1ZGVzUm9vdExpbmVCb3hGb250T3JMZWFkaW5nKCk7Ci0gICAgICAg
IGludCBiYXNlbGluZVNoaWZ0ID0gbGluZUJveC0+dmVydGljYWxQb3NpdGlvbkZvckJveChydW4t
Pm1fYm94LCB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUpOwotICAgICAgICBpbnQgcm9vdERlc2NlbnQg
PSBpbmNsdWRlUm9vdExpbmUgPyBsaW5lQm94LT5yZW5kZXJlcigpLT5zdHlsZShsaW5lSW5mby5p
c0ZpcnN0TGluZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpIDogMDsKLSAgICAg
ICAgaW50IHJvb3RBc2NlbnQgPSBpbmNsdWRlUm9vdExpbmUgPyBsaW5lQm94LT5yZW5kZXJlcigp
LT5zdHlsZShsaW5lSW5mby5pc0ZpcnN0TGluZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNj
ZW50KCkgOiAwOwotICAgICAgICBpbnQgYm94QXNjZW50ID0gcmVuZGVyZXItPnN0eWxlKGxpbmVJ
bmZvLmlzRmlyc3RMaW5lKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGJhc2Vs
aW5lU2hpZnQ7Ci0gICAgICAgIGludCBib3hEZXNjZW50ID0gcmVuZGVyZXItPnN0eWxlKGxpbmVJ
bmZvLmlzRmlyc3RMaW5lKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5kZXNjZW50KCkgKyBiYXNl
bGluZVNoaWZ0OworICAgICAgICBMYXlvdXRVbml0IGJhc2VsaW5lU2hpZnQgPSBsaW5lQm94LT52
ZXJ0aWNhbFBvc2l0aW9uRm9yQm94KHJ1bi0+bV9ib3gsIHZlcnRpY2FsUG9zaXRpb25DYWNoZSk7
CisgICAgICAgIExheW91dFVuaXQgcm9vdERlc2NlbnQgPSBpbmNsdWRlUm9vdExpbmUgPyBsaW5l
Qm94LT5yZW5kZXJlcigpLT5zdHlsZShsaW5lSW5mby5pc0ZpcnN0TGluZSgpKS0+Zm9udCgpLmZv
bnRNZXRyaWNzKCkuZGVzY2VudCgpIDogMDsKKyAgICAgICAgTGF5b3V0VW5pdCByb290QXNjZW50
ID0gaW5jbHVkZVJvb3RMaW5lID8gbGluZUJveC0+cmVuZGVyZXIoKS0+c3R5bGUobGluZUluZm8u
aXNGaXJzdExpbmUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIDogMDsKKyAgICAg
ICAgTGF5b3V0VW5pdCBib3hBc2NlbnQgPSByZW5kZXJlci0+c3R5bGUobGluZUluZm8uaXNGaXJz
dExpbmUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gYmFzZWxpbmVTaGlmdDsK
KyAgICAgICAgTGF5b3V0VW5pdCBib3hEZXNjZW50ID0gcmVuZGVyZXItPnN0eWxlKGxpbmVJbmZv
LmlzRmlyc3RMaW5lKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5kZXNjZW50KCkgKyBiYXNlbGlu
ZVNoaWZ0OwogICAgICAgICBpZiAoYm94QXNjZW50ID4gcm9vdERlc2NlbnQgfHwgIGJveERlc2Nl
bnQgPiByb290QXNjZW50KQogICAgICAgICAgICAgZ2x5cGhPdmVyZmxvdy5jb21wdXRlQm91bmRz
ID0gdHJ1ZTsgCiAgICAgfQogICAgIAotICAgIGludCBoeXBoZW5XaWR0aCA9IDA7CisgICAgTGF5
b3V0VW5pdCBoeXBoZW5XaWR0aCA9IDA7CiAgICAgaWYgKHRvSW5saW5lVGV4dEJveChydW4tPm1f
Ym94KS0+aGFzSHlwaGVuKCkpIHsKICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHJlbmRlcmVy
LT5zdHlsZShsaW5lSW5mby5pc0ZpcnN0TGluZSgpKS0+Zm9udCgpOwogICAgICAgICBoeXBoZW5X
aWR0aCA9IG1lYXN1cmVIeXBoZW5XaWR0aChyZW5kZXJlciwgZm9udCk7CkBAIC0xMTA5LDggKzEx
MDksOCBAQCBwdWJsaWM6CiAgICAgTGluZUluZm8mIGxpbmVJbmZvKCkgeyByZXR1cm4gbV9saW5l
SW5mbzsgfQogICAgIGNvbnN0IExpbmVJbmZvJiBsaW5lSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1f
bGluZUluZm87IH0KIAotICAgIGludCBlbmRMaW5lTG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJu
IG1fZW5kTGluZUxvZ2ljYWxUb3A7IH0KLSAgICB2b2lkIHNldEVuZExpbmVMb2dpY2FsVG9wKGlu
dCBsb2dpY2FsVG9wKSB7IG1fZW5kTGluZUxvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wOyB9CisgICAg
TGF5b3V0VW5pdCBlbmRMaW5lTG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kTGluZUxv
Z2ljYWxUb3A7IH0KKyAgICB2b2lkIHNldEVuZExpbmVMb2dpY2FsVG9wKExheW91dFVuaXQgbG9n
aWNhbFRvcCkgeyBtX2VuZExpbmVMb2dpY2FsVG9wID0gbG9naWNhbFRvcDsgfQogCiAgICAgUm9v
dElubGluZUJveCogZW5kTGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kTGluZTsgfQogICAgIHZv
aWQgc2V0RW5kTGluZShSb290SW5saW5lQm94KiBsaW5lKSB7IG1fZW5kTGluZSA9IGxpbmU7IH0K
QEAgLTExMjksNyArMTEyOSw3IEBAIHByaXZhdGU6CiAgICAgUm9vdElubGluZUJveCogbV9lbmRM
aW5lOwogICAgIExpbmVJbmZvIG1fbGluZUluZm87CiAgICAgdW5zaWduZWQgbV9mbG9hdEluZGV4
OwotICAgIGludCBtX2VuZExpbmVMb2dpY2FsVG9wOworICAgIExheW91dFVuaXQgbV9lbmRMaW5l
TG9naWNhbFRvcDsKICAgICBib29sIG1fZW5kTGluZU1hdGNoZWQ7CiAgICAgYm9vbCBtX2NoZWNr
Rm9yRmxvYXRzRnJvbUxhc3RMaW5lOwogICAgIApAQCAtMTQwMCwxOSArMTQwMCwxOSBAQCB2b2lk
IFJlbmRlckJsb2NrOjpsaW5rVG9FbmRMaW5lSWZOZWVkZWQoCiAgICAgICAgIC8vIFRoaXMgaGFz
IHRvIGJlIGRvbmUgYmVmb3JlIGFkZGluZyBpbiB0aGUgYm90dG9tIGJvcmRlci9wYWRkaW5nLCBv
ciB0aGUgZmxvYXQgd2lsbAogICAgICAgICAvLyBpbmNsdWRlIHRoZSBwYWRkaW5nIGluY29ycmVj
dGx5LiAtZHdoCiAgICAgICAgIGlmIChsYXlvdXRTdGF0ZS5jaGVja0ZvckZsb2F0c0Zyb21MYXN0
TGluZSgpKSB7Ci0gICAgICAgICAgICBpbnQgYm90dG9tVmlzdWFsT3ZlcmZsb3cgPSBsYXN0Um9v
dEJveCgpLT5sb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3coKTsKLSAgICAgICAgICAgIGludCBi
b3R0b21MYXlvdXRPdmVyZmxvdyA9IGxhc3RSb290Qm94KCktPmxvZ2ljYWxCb3R0b21MYXlvdXRP
dmVyZmxvdygpOworICAgICAgICAgICAgTGF5b3V0VW5pdCBib3R0b21WaXN1YWxPdmVyZmxvdyA9
IGxhc3RSb290Qm94KCktPmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdygpOworICAgICAgICAg
ICAgTGF5b3V0VW5pdCBib3R0b21MYXlvdXRPdmVyZmxvdyA9IGxhc3RSb290Qm94KCktPmxvZ2lj
YWxCb3R0b21MYXlvdXRPdmVyZmxvdygpOwogICAgICAgICAgICAgVHJhaWxpbmdGbG9hdHNSb290
SW5saW5lQm94KiB0cmFpbGluZ0Zsb2F0c0xpbmVCb3ggPSBuZXcgKHJlbmRlckFyZW5hKCkpIFRy
YWlsaW5nRmxvYXRzUm9vdElubGluZUJveCh0aGlzKTsKICAgICAgICAgICAgIG1fbGluZUJveGVz
LmFwcGVuZExpbmVCb3godHJhaWxpbmdGbG9hdHNMaW5lQm94KTsKICAgICAgICAgICAgIHRyYWls
aW5nRmxvYXRzTGluZUJveC0+c2V0Q29uc3RydWN0ZWQoKTsKICAgICAgICAgICAgIEdseXBoT3Zl
cmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwIHRleHRCb3hEYXRhTWFwOwogICAgICAgICAgICAgVmVy
dGljYWxQb3NpdGlvbkNhY2hlIHZlcnRpY2FsUG9zaXRpb25DYWNoZTsKLSAgICAgICAgICAgIGlu
dCBibG9ja0xvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgICAgICBMYXlv
dXRVbml0IGJsb2NrTG9naWNhbEhlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgICAg
IHRyYWlsaW5nRmxvYXRzTGluZUJveC0+YWxpZ25Cb3hlc0luQmxvY2tEaXJlY3Rpb24oYmxvY2tM
b2dpY2FsSGVpZ2h0LCB0ZXh0Qm94RGF0YU1hcCwgdmVydGljYWxQb3NpdGlvbkNhY2hlKTsKICAg
ICAgICAgICAgIHRyYWlsaW5nRmxvYXRzTGluZUJveC0+c2V0TGluZVRvcEJvdHRvbVBvc2l0aW9u
cyhibG9ja0xvZ2ljYWxIZWlnaHQsIGJsb2NrTG9naWNhbEhlaWdodCwgYmxvY2tMb2dpY2FsSGVp
Z2h0LCBibG9ja0xvZ2ljYWxIZWlnaHQpOwogICAgICAgICAgICAgdHJhaWxpbmdGbG9hdHNMaW5l
Qm94LT5zZXRQYWdpbmF0ZWRMaW5lV2lkdGgoYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yQ29udGVu
dChibG9ja0xvZ2ljYWxIZWlnaHQpKTsKLSAgICAgICAgICAgIEludFJlY3QgbG9naWNhbExheW91
dE92ZXJmbG93KDAsIGJsb2NrTG9naWNhbEhlaWdodCwgMSwgYm90dG9tTGF5b3V0T3ZlcmZsb3cg
LSBibG9ja0xvZ2ljYWxIZWlnaHQpOwotICAgICAgICAgICAgSW50UmVjdCBsb2dpY2FsVmlzdWFs
T3ZlcmZsb3coMCwgYmxvY2tMb2dpY2FsSGVpZ2h0LCAxLCBib3R0b21WaXN1YWxPdmVyZmxvdyAt
IGJsb2NrTG9naWNhbEhlaWdodCk7CisgICAgICAgICAgICBMYXlvdXRSZWN0IGxvZ2ljYWxMYXlv
dXRPdmVyZmxvdygwLCBibG9ja0xvZ2ljYWxIZWlnaHQsIDEsIGJvdHRvbUxheW91dE92ZXJmbG93
IC0gYmxvY2tMb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgICAgIExheW91dFJlY3QgbG9naWNhbFZp
c3VhbE92ZXJmbG93KDAsIGJsb2NrTG9naWNhbEhlaWdodCwgMSwgYm90dG9tVmlzdWFsT3ZlcmZs
b3cgLSBibG9ja0xvZ2ljYWxIZWlnaHQpOwogICAgICAgICAgICAgdHJhaWxpbmdGbG9hdHNMaW5l
Qm94LT5zZXRPdmVyZmxvd0Zyb21Mb2dpY2FsUmVjdHMobG9naWNhbExheW91dE92ZXJmbG93LCBs
b2dpY2FsVmlzdWFsT3ZlcmZsb3csIHRyYWlsaW5nRmxvYXRzTGluZUJveC0+bGluZVRvcCgpLCB0
cmFpbGluZ0Zsb2F0c0xpbmVCb3gtPmxpbmVCb3R0b20oKSk7CiAgICAgICAgIH0KIApAQCAtMTUx
Nyw3ICsxNTE3LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgog
ICAgIC8vIEV4cGFuZCB0aGUgbGFzdCBsaW5lIHRvIGFjY29tbW9kYXRlIFJ1YnkgYW5kIGVtcGhh
c2lzIG1hcmtzLgogICAgIGludCBsYXN0TGluZUFubm90YXRpb25zQWRqdXN0bWVudCA9IDA7CiAg
ICAgaWYgKGxhc3RSb290Qm94KCkpIHsKLSAgICAgICAgaW50IGxvd2VzdEFsbG93ZWRQb3NpdGlv
biA9IG1heChsYXN0Um9vdEJveCgpLT5saW5lQm90dG9tKCksIGxvZ2ljYWxIZWlnaHQoKSArIHBh
ZGRpbmdBZnRlcigpKTsKKyAgICAgICAgTGF5b3V0VW5pdCBsb3dlc3RBbGxvd2VkUG9zaXRpb24g
PSBtYXgobGFzdFJvb3RCb3goKS0+bGluZUJvdHRvbSgpLCBsb2dpY2FsSGVpZ2h0KCkgKyBwYWRk
aW5nQWZ0ZXIoKSk7CiAgICAgICAgIGlmICghc3R5bGUoKS0+aXNGbGlwcGVkTGluZXNXcml0aW5n
TW9kZSgpKQogICAgICAgICAgICAgbGFzdExpbmVBbm5vdGF0aW9uc0FkanVzdG1lbnQgPSBsYXN0
Um9vdEJveCgpLT5jb21wdXRlVW5kZXJBbm5vdGF0aW9uQWRqdXN0bWVudChsb3dlc3RBbGxvd2Vk
UG9zaXRpb24pOwogICAgICAgICBlbHNlCkBAIC0yNjkwLDggKzI2OTAsOCBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpjaGVja0xpbmVzRm9yVGV4dE92ZXJmCiAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0
eWxlKCktPmZvbnQoKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZWxs
aXBzaXNTdHIsICgmaG9yaXpvbnRhbEVsbGlwc2lzLCAxKSk7CiAgICAgY29uc3QgRm9udCYgZmly
c3RMaW5lRm9udCA9IGZpcnN0TGluZVN0eWxlKCktPmZvbnQoKTsKLSAgICBMYXlvdXRVbml0IGZp
cnN0TGluZUVsbGlwc2lzV2lkdGggPSBmaXJzdExpbmVGb250LndpZHRoKGNvbnN0cnVjdFRleHRS
dW4odGhpcywgZmlyc3RMaW5lRm9udCwgJmhvcml6b250YWxFbGxpcHNpcywgMSwgZmlyc3RMaW5l
U3R5bGUoKSkpOwotICAgIExheW91dFVuaXQgZWxsaXBzaXNXaWR0aCA9IChmb250ID09IGZpcnN0
TGluZUZvbnQpID8gZmlyc3RMaW5lRWxsaXBzaXNXaWR0aCA6IGZvbnQud2lkdGgoY29uc3RydWN0
VGV4dFJ1bih0aGlzLCBmb250LCAmaG9yaXpvbnRhbEVsbGlwc2lzLCAxLCBzdHlsZSgpKSk7Cisg
ICAgaW50IGZpcnN0TGluZUVsbGlwc2lzV2lkdGggPSBmaXJzdExpbmVGb250LndpZHRoKGNvbnN0
cnVjdFRleHRSdW4odGhpcywgZmlyc3RMaW5lRm9udCwgJmhvcml6b250YWxFbGxpcHNpcywgMSwg
Zmlyc3RMaW5lU3R5bGUoKSkpOworICAgIGludCBlbGxpcHNpc1dpZHRoID0gKGZvbnQgPT0gZmly
c3RMaW5lRm9udCkgPyBmaXJzdExpbmVFbGxpcHNpc1dpZHRoIDogZm9udC53aWR0aChjb25zdHJ1
Y3RUZXh0UnVuKHRoaXMsIGZvbnQsICZob3Jpem9udGFsRWxsaXBzaXMsIDEsIHN0eWxlKCkpKTsK
IAogICAgIC8vIEZvciBMVFIgdGV4dCB0cnVuY2F0aW9uLCB3ZSB3YW50IHRvIGdldCB0aGUgcmln
aHQgZWRnZSBvZiBvdXIgcGFkZGluZyBib3gsIGFuZCB0aGVuIHdlIHdhbnQgdG8gc2VlCiAgICAg
Ly8gaWYgdGhlIHJpZ2h0IGVkZ2Ugb2YgYSBsaW5lIGJveCBleGNlZWRzIHRoYXQuICBGb3IgUlRM
LCB3ZSB1c2UgdGhlIGxlZnQgZWRnZSBvZiB0aGUgcGFkZGluZyBib3ggYW5kCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132163</attachid>
            <date>2012-03-15 17:43:10 -0700</date>
            <delta_ts>2012-03-16 03:53:14 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-80437-20120315174309.patch</filename>
            <type>text/plain</type>
            <size>21580</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMDg1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDEyLTAzLTE1ICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBVcGRhdGUgdXNhZ2Ugb2Yg
TGF5b3V0VW5pdHMgaW4gUmVuZGVyQmxvY2sqCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD04MDQzNworCisgICAgICAgIFJldmlld2VkIGJ5IEp1bGllbiBD
aGFmZnJhaXguCisKKyAgICAgICAgVXBkYXRpbmcgTGF5b3V0VW5pdCB1c2FnZSBpbiBSZW5kZXJC
bG9jayBhbmQgUmVuZGVyQmxvY2tMaW5lTGF5b3V0LiBUaGlzIGJldHRlciByZWFkaWVzIHRydW5r
IGZvcgorICAgICAgICB0aGUgdHJhbnNpdGlvbiB0byBzdWJwaXhlbCBsYXlvdXQuCisKKyAgICAg
ICAgU2VlIGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL3dpa2kvTGF5b3V0VW5pdCBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gTm8gY2hhbmdlZCBiZWhhdmlvci4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZVRleHRCb3g6OnBhaW50KTogQWRkaW5nIHRoZSBwYWludCBvZmZzZXQgcm91bmRpbmcg
cHJldmlvdXNseSBpbiBSZW5kZXJCbG9jazo6cGFpbnQuCisgICAgICAgICogcmVuZGVyaW5nL0xh
eW91dFR5cGVzLmg6CisgICAgICAgIChXZWJDb3JlOjpmbG9vclRvSW50KTogV2lsbCBmbG9vciBh
IExheW91dFVuaXQgdG8gYW4gaW50ZWdlciBvbmNlIHdlIHN3aXRjaCB0bworICAgICAgICBGcmFj
dGlvbmFsTGF5b3V0VW5pdHMuCisgICAgICAgIChXZWJDb3JlOjpib3VuZGVkTXVsdGlwbHkpOiBN
ZXRob2QgdGhhdCB3aWxsIHJldHVybiB0aGUgbXVsdGlwbGllZCByZXN1bHQgb2YgdHdvIExheW91
dFVuaXRzCisgICAgICAgIG9yIHRoZSBtYXgvbWluIExheW91dFVuaXQgaWYgdGhlIHJlc3VsdCBv
dmVyZmxvd3MuIE9ubHkgZG9lcyBhIHJlZ3VsYXIgbXVsdGlwbHkgd2hpbGUKKyAgICAgICAgTGF5
b3V0VW5pdHMgYXJlIGludGVnZXJzIGluc3RlYWQgb2YgRnJhY3Rpb25hbExheW91dFVuaXRzLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludENvbnRlbnRzKTogUm91bmRpbmcg
dGhlIHBhaW50T2Zmc2V0IGhlcmUgZGlkbid0IHdvcmsgZm9yIGFsbAorICAgICAgICBpbmxpbmUg
YmxvY2tzLiBUaGlzIHJvdW5kaW5nIGlzIGFjdHVhbGx5IG9ubHkgbmVlZGVkIGZvciBJbmxpbmVU
ZXh0Qm94ZXMsIHNvIHRoZSBsb2dpYyBoYXMKKyAgICAgICAgYmVlbiBtb3ZlZCB0aGVyZS4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpuZXdMaW5lKTogVXNlIGEgTGF5b3V0VW5pdCBm
b3IgdGhlIHkgcG9zaXRpb24uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aXNQb2lu
dEluT3ZlcmZsb3dDb250cm9sKTogUG9pbnRzIGZvciBoaXQgdGVzdGluZyBuZWVkIHRvIGJlIHJv
dW5kZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0Q29sdW1ucyk6IFVz
aW5nIGJvdW5kZWRNdWx0aXBseSBmb3IgYSBjYWxjdWxhdGlvbiBwcm9uZSB0byBvdmVyZmxvdy4K
KyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVByZWZlcnJlZFdpZHRoKTogUmV2ZXJ0aW5nIGJhY2sg
dG8gdXNpbmcgY2VpbGYuIGNlaWxlZExheW91dFVuaXQgd2FzIHRvIGJlIHVsdGltYXRlbHkKKyAg
ICAgICAgY29udmVydGVkIHRvIGp1c3QgYSBzdHJhaWdodCBMYXlvdXRVbml0IGNvbnN0cnVjdG9y
IHRvIHByZXNlcnZlIHByZWNpc2lvbi4gVGhpcyBwcmVjaXNpb24gZG9lc24ndCB3b3JrCisgICAg
ICAgIGZvciB1cyBoZXJlIGFzIHdlIHN0aWxsIHBhaW50IEJveGVzL0Jsb2NrcyBvbiBwaXhlbCBi
b3VuZGFyaWVzLCBzbyB3ZSBuZWVkIHRvIGV4cGFuZCB0byBhIHBpeGVsIHNpemUKKyAgICAgICAg
dGhhdCBlbmNsb3NlcyB0aGUgY29udGFpbmVkIHRleHQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6c2V0UGFnZUxvZ2ljYWxPZmZzZXQpOiBMb2dpY2FsT2Zmc2V0IHNob3VsZCBiZSBh
IExheW91dFVuaXQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bWFyZ2luVmFsdWVz
Rm9yQ2hpbGQpOiBNYXJnaW5zIHNob3VsZCBoYXZlIHN1YnBpeGVsIHJlc29sdXRpb24uCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjppbnRlcnZhbEZvckZs
b2F0aW5nT2JqZWN0KTogSW50ZXJ2YWxzIGZvciBmbG9hdGluZyBvYmplY3RzCisgICAgICAgIG5l
ZWQgdG8gdXNlIHBpeGVsIHNuYXBwZWQgdmFsdWVzIHRvIGdpdmUgdGhlIHByb3BlciByZXN1bHRz
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OnBpeGVsU25hcHBlZExvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZSk6IE9ubHkg
bW92ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGl4ZWxTbmFwcGVkTG9naWNh
bFJpZ2h0T2Zmc2V0Rm9yTGluZSk6IFdoaWxlIHdlIGNhbiByb3VuZCB0aGUgbGVmdCBvZmZzZXQs
CisgICAgICAgIGNvbHVtbnMgYWRkIGFuIGV4dHJhIG9mZnNldCBhdCBwYWludCB0aGF0IGNhbid0
IGN1cnJlbnRseSBiZSBwbGFubmVkIGZvciBhdCBsaW5lLWxheW91dCB0aW1lLiBUbworICAgICAg
ICBhdm9pZCBsYXlpbmcgb3V0IGxpbmVzIHRoYXQgcnVuIG9mZiB0aGUgZW5kIG9mIGNvbHVtbnMs
IHdlIGZsb29yIHRoZSByaWdodCBvZmZzZXQuIFRoZSByZXN1bHRpbmcKKyAgICAgICAgbGluZXMg
d2lsbCBiZSB1cCB0byAxIHBpeGVsIHNob3J0ZXIgdGhhbiB0aGV5IHBvdGVudGlhbGx5IGNvdWxk
IGJlLgorICAgICAgICAoUmVuZGVyQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OkZsb2F0aW5nT2JqZWN0OjpwaXhlbFNuYXBwZWRYKTogVXNpbmcgY29ycmVzcG9uZGluZyBw
aXhlbFNuYXBwZWRYIHZhbHVlIGZyb20KKyAgICAgICAgTGF5b3V0UmVjdHMuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OnBpeGVsU25hcHBlZE1heFgpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdDo6cGl4
ZWxTbmFwcGVkWSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0
aW5nT2JqZWN0OjpwaXhlbFNuYXBwZWRNYXhZKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OnBpeGVsU25hcHBlZFdpZHRoKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OnBpeGVsU25hcHBl
ZEhlaWdodCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlv
dXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0
aEZvck5ld0Zsb2F0SWZOZWVkZWQpOiBMb2dpY2FsSGVpZ2h0IGlzIGEgTGF5b3V0VW5pdC4gQWxz
bworICAgICAgICBmbG9vcmluZyB0ZXh0SW5kZW50T2Zmc2V0IHRvIGFuIGludGVnZXIgdG8gbWF0
Y2ggb2xkIGJlaGF2aW9yLgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjpmaXRCZWxvd0Zs
b2F0cyk6IFVzaW5nIExheW91dFVuaXRzIGZvciBmbG9hdCBsb2dpY2FsIHRvcCBhbmQgYm90dG9t
cy4KKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRTdGF0ZTo6ZW5kTGluZUxvZ2ljYWxUb3Ap
OiBDaGFuZ2luZyB0byBhIExheW91dFVuaXQuCisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0
U3RhdGU6OnNldEVuZExpbmVMb2dpY2FsVG9wKTogRGl0dG8uCisgICAgICAgIChMaW5lTGF5b3V0
U3RhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsaW5rVG9FbmRM
aW5lSWZOZWVkZWQpOiBDYWxjdWxhdGluZyBvdmVyZmxvdyB3aXRoIExheW91dFVuaXRzLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKTogTG93ZXN0
QWxsb3dlZFBvc2l0aW9uIHNob3VsZCBiZSBzdWJwaXhlbC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpjaGVja0xpbmVzRm9yVGV4dE92ZXJmbG93KTogUmV2ZXJ0aW5nIGVsbGlwc2lz
IHdpZHRoIGNhbGN1bGF0aW9uIHRvIGludGVnZXJzCisgICAgICAgIGFzIHRoaXMgdmFsdWUgY2Fu
IGJlIHNlZW4gYXMgcmVwcmVzZW50aW5nIHBpeGVscyBvbiBzY3JlZW4uCisKIDIwMTItMDMtMTUg
IFBldGVyIFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwuY29tPgogCiAgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IE1vdmUgYWxsIGluY2x1ZGVzIGJlaGluZCBFTkFCTEUoSU5TUEVDVE9SKSBndWFyZHMK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlz
aW9uIDExMDg1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDgzLDcgKzQ4Myw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6
cGFpbnQoUGFpbnRJbmZvJiBwYWkKICAgICBMYXlvdXRVbml0IHBhaW50RW5kID0gaXNIb3Jpem9u
dGFsKCkgPyBwYWludEluZm8ucmVjdC5tYXhYKCkgOiBwYWludEluZm8ucmVjdC5tYXhZKCk7CiAg
ICAgTGF5b3V0VW5pdCBwYWludFN0YXJ0ID0gaXNIb3Jpem9udGFsKCkgPyBwYWludEluZm8ucmVj
dC54KCkgOiBwYWludEluZm8ucmVjdC55KCk7CiAgICAgCi0gICAgTGF5b3V0UG9pbnQgYWRqdXN0
ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0OworICAgIExheW91dFBvaW50IGFkanVzdGVkUGFp
bnRPZmZzZXQgPSByb3VuZGVkSW50UG9pbnQocGFpbnRPZmZzZXQpOwogICAgIAogICAgIGlmIChs
b2dpY2FsU3RhcnQgPj0gcGFpbnRFbmQgfHwgbG9naWNhbFN0YXJ0ICsgbG9naWNhbEV4dGVudCA8
PSBwYWludFN0YXJ0KQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTGF5b3V0VHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTGF5b3V0VHlwZXMuaAkocmV2aXNpb24gMTEwODU0KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xheW91dFR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw2ICsxMjAsMTEgQEAg
aW5saW5lIGludCByb3VuZFRvSW50KExheW91dFVuaXQgdmFsdWUpCiAgICAgcmV0dXJuIHZhbHVl
OwogfQogCitpbmxpbmUgaW50IGZsb29yVG9JbnQoTGF5b3V0VW5pdCB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gdmFsdWU7Cit9CisKIGlubGluZSBMYXlvdXRVbml0IHJvdW5kZWRMYXlvdXRVbml0KGZs
b2F0IHZhbHVlKQogewogICAgIHJldHVybiBscm91bmRmKHZhbHVlKTsKQEAgLTE1NSw2ICsxNjAs
MTEgQEAgaW5saW5lIGJvb2wgaXNJbnRlZ2VyVmFsdWUoY29uc3QgTGF5b3V0VQogICAgIHJldHVy
biB0cnVlOwogfQogCitpbmxpbmUgTGF5b3V0VW5pdCBib3VuZGVkTXVsdGlwbHkoY29uc3QgTGF5
b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKK3sKKyAgICByZXR1cm4gYSAqIGI7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIExheW91dFR5cGVzX2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTEw
ODU0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjc4MCwxMyArMjc4MCwxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENv
bnRlbnRzKFBhaW50SW5mCiAgICAgaWYgKGRvY3VtZW50KCktPmRpZExheW91dFdpdGhQZW5kaW5n
U3R5bGVzaGVldHMoKSAmJiAhaXNSZW5kZXJWaWV3KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IC8vIFdlIGRvbid0IHdhbnQgdG8gaGFuZCBvZmYgcGFpbnRpbmcgaW4gdGhlIGxpbmUgYm94IHRy
ZWUgd2l0aCB0aGUgYWNjdW11bGF0ZWQgZXJyb3Igb2YgdGhlIHJlbmRlciB0cmVlLCBhcyB0aGlz
IHdpbGwgY2F1c2UKLSAgICAvLyB1cyB0byBtZXNzIHVwIHBhaW50aW5nIGFsaWduZWQgdGhpbmdz
IChzdWNoIGFzIHVuZGVybGluZXMgaW4gdGV4dCkgd2l0aCBib3RoIHRoZSByZW5kZXIgdHJlZSBh
bmQgbGluZSBib3ggdHJlZSdzIGVycm9yLgotICAgIExheW91dFBvaW50IHJvdW5kZWRQYWludE9m
ZnNldCA9IHJvdW5kZWRJbnRQb2ludChwYWludE9mZnNldCk7CiAgICAgaWYgKGNoaWxkcmVuSW5s
aW5lKCkpCi0gICAgICAgIG1fbGluZUJveGVzLnBhaW50KHRoaXMsIHBhaW50SW5mbywgcm91bmRl
ZFBhaW50T2Zmc2V0KTsKKyAgICAgICAgbV9saW5lQm94ZXMucGFpbnQodGhpcywgcGFpbnRJbmZv
LCBwYWludE9mZnNldCk7CiAgICAgZWxzZQotICAgICAgICBwYWludENoaWxkcmVuKHBhaW50SW5m
bywgcm91bmRlZFBhaW50T2Zmc2V0KTsKKyAgICAgICAgcGFpbnRDaGlsZHJlbihwYWludEluZm8s
IHBhaW50T2Zmc2V0KTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDaGlsZHJlbihQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQpAQCAtMzc4
Niw3ICszNzgzLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bmV3TGluZShFQ2xlYXIgY2xlYXIpCiB7
CiAgICAgcG9zaXRpb25OZXdGbG9hdHMoKTsKICAgICAvLyBzZXQgeSBwb3NpdGlvbgotICAgIGlu
dCBuZXdZID0gMDsKKyAgICBMYXlvdXRVbml0IG5ld1kgPSAwOwogICAgIHN3aXRjaCAoY2xlYXIp
CiAgICAgewogICAgICAgICBjYXNlIENMRUZUOgpAQCAtNDQ3Nyw3ICs0NDc0LDcgQEAgYm9vbCBS
ZW5kZXJCbG9jazo6aXNQb2ludEluT3ZlcmZsb3dDb250cgogICAgIGlmICghc2Nyb2xsc092ZXJm
bG93KCkgfHwgIWhhc0xheWVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVy
biBsYXllcigpLT5oaXRUZXN0T3ZlcmZsb3dDb250cm9scyhyZXN1bHQsIHBvaW50SW5Db250YWlu
ZXIgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKTsKKyAgICByZXR1cm4gbGF5ZXIo
KS0+aGl0VGVzdE92ZXJmbG93Q29udHJvbHMocmVzdWx0LCByb3VuZGVkSW50UG9pbnQocG9pbnRJ
bkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpKTsKIH0KIAogYm9v
bCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWlu
ZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBo
aXRUZXN0QWN0aW9uKQpAQCAtNTAxOCw3ICs1MDE1LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6bGF5
b3V0Q29sdW1ucyhib29sIGhhcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFn
ZUxvZ2ljYWxPZmZzZXQoYm9yZGVyQmVmb3JlKCkgKyBwYWRkaW5nQmVmb3JlKCkgKyBjb250ZW50
TG9naWNhbEhlaWdodCgpKSAtIGNvbEluZm8tPmZvcmNlZEJyZWFrT2Zmc2V0KCkpOwogICAgICAg
ICAgICAgICAgIGNvbHVtbkhlaWdodCA9IG1heChjb2xJbmZvLT5taW5pbXVtQ29sdW1uSGVpZ2h0
KCksIGRpc3RhbmNlQmV0d2VlbkJyZWFrcyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSBpZiAoY29udGVudExvZ2ljYWxIZWlnaHQoKSA+IHBhZ2VMb2dpY2FsSGVpZ2h0ICogZGVzaXJl
ZENvbHVtbkNvdW50KSB7CisgICAgICAgIH0gZWxzZSBpZiAoY29udGVudExvZ2ljYWxIZWlnaHQo
KSA+IGJvdW5kZWRNdWx0aXBseShwYWdlTG9naWNhbEhlaWdodCwgZGVzaXJlZENvbHVtbkNvdW50
KSkgewogICAgICAgICAgICAgLy8gTm93IHRoYXQgd2Uga25vdyB0aGUgaW50cmluc2ljIGhlaWdo
dCBvZiB0aGUgY29sdW1ucywgd2UgaGF2ZSB0byByZWJhbGFuY2UgdGhlbS4KICAgICAgICAgICAg
IGNvbHVtbkhlaWdodCA9IG1heDxMYXlvdXRVbml0Pihjb2xJbmZvLT5taW5pbXVtQ29sdW1uSGVp
Z2h0KCksIGNlaWxmKChmbG9hdCljb250ZW50TG9naWNhbEhlaWdodCgpIC8gZGVzaXJlZENvbHVt
bkNvdW50KSk7CiAgICAgICAgIH0KQEAgLTU0MDksNyArNTQwNiw3IEBAIHN0YXRpYyBpbmxpbmUg
dm9pZCBzdHJpcFRyYWlsaW5nU3BhY2UoZmwKIAogc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZVBy
ZWZlcnJlZFdpZHRoKExheW91dFVuaXQmIHByZWZlcnJlZFdpZHRoLCBmbG9hdCYgcmVzdWx0KQog
ewotICAgIExheW91dFVuaXQgc25hcHBlZFJlc3VsdCA9IGNlaWxlZExheW91dFVuaXQocmVzdWx0
KTsKKyAgICBMYXlvdXRVbml0IHNuYXBwZWRSZXN1bHQgPSBjZWlsZihyZXN1bHQpOwogICAgIHBy
ZWZlcnJlZFdpZHRoID0gbWF4KHNuYXBwZWRSZXN1bHQsIHByZWZlcnJlZFdpZHRoKTsKIH0KIApA
QCAtNjM2OSw3ICs2MzY2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2V0UGFnaW5hdGlvblN0cnV0
KExheQogICAgIG1fcmFyZURhdGEtPm1fcGFnaW5hdGlvblN0cnV0ID0gc3RydXQ7CiB9CiAKLXZv
aWQgUmVuZGVyQmxvY2s6OnNldFBhZ2VMb2dpY2FsT2Zmc2V0KGludCBsb2dpY2FsT2Zmc2V0KQor
dm9pZCBSZW5kZXJCbG9jazo6c2V0UGFnZUxvZ2ljYWxPZmZzZXQoTGF5b3V0VW5pdCBsb2dpY2Fs
T2Zmc2V0KQogewogICAgIGlmICghbV9yYXJlRGF0YSkgewogICAgICAgICBpZiAoIWxvZ2ljYWxP
ZmZzZXQpCkBAIC03MTcyLDEzICs3MTY5LDEzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnNldE1hcmdp
bkFmdGVyRm9yQ2hpbGQKIAogUmVuZGVyQmxvY2s6Ok1hcmdpblZhbHVlcyBSZW5kZXJCbG9jazo6
bWFyZ2luVmFsdWVzRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCkKIHsKLSAgICBpbnQgY2hpbGRC
ZWZvcmVQb3NpdGl2ZSA9IDA7Ci0gICAgaW50IGNoaWxkQmVmb3JlTmVnYXRpdmUgPSAwOwotICAg
IGludCBjaGlsZEFmdGVyUG9zaXRpdmUgPSAwOwotICAgIGludCBjaGlsZEFmdGVyTmVnYXRpdmUg
PSAwOworICAgIExheW91dFVuaXQgY2hpbGRCZWZvcmVQb3NpdGl2ZSA9IDA7CisgICAgTGF5b3V0
VW5pdCBjaGlsZEJlZm9yZU5lZ2F0aXZlID0gMDsKKyAgICBMYXlvdXRVbml0IGNoaWxkQWZ0ZXJQ
b3NpdGl2ZSA9IDA7CisgICAgTGF5b3V0VW5pdCBjaGlsZEFmdGVyTmVnYXRpdmUgPSAwOwogCi0g
ICAgaW50IGJlZm9yZU1hcmdpbiA9IDA7Ci0gICAgaW50IGFmdGVyTWFyZ2luID0gMDsKKyAgICBM
YXlvdXRVbml0IGJlZm9yZU1hcmdpbiA9IDA7CisgICAgTGF5b3V0VW5pdCBhZnRlck1hcmdpbiA9
IDA7CiAKICAgICBSZW5kZXJCbG9jayogY2hpbGRSZW5kZXJCbG9jayA9IGNoaWxkLT5pc1JlbmRl
ckJsb2NrKCkgPyB0b1JlbmRlckJsb2NrKGNoaWxkKSA6IDA7CiAgICAgCkBAIC03Mjg2LDggKzcy
ODMsOCBAQCBpbmxpbmUgdm9pZCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzCiBpbmxpbmUg
UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0SW50ZXJ2YWwgUmVuZGVyQmxvY2s6OkZsb2F0aW5n
T2JqZWN0czo6aW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdChGbG9hdGluZ09iamVjdCogZmxvYXRp
bmdPYmplY3QpCiB7CiAgICAgaWYgKG1faG9yaXpvbnRhbFdyaXRpbmdNb2RlKQotICAgICAgICBy
ZXR1cm4gUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0SW50ZXJ2YWwoZmxvYXRpbmdPYmplY3Qt
PnkoKSwgZmxvYXRpbmdPYmplY3QtPm1heFkoKSwgZmxvYXRpbmdPYmplY3QpOwotICAgIHJldHVy
biBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RJbnRlcnZhbChmbG9hdGluZ09iamVjdC0+eCgp
LCBmbG9hdGluZ09iamVjdC0+bWF4WCgpLCBmbG9hdGluZ09iamVjdCk7CisgICAgICAgIHJldHVy
biBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RJbnRlcnZhbChmbG9hdGluZ09iamVjdC0+cGl4
ZWxTbmFwcGVkWSgpLCBmbG9hdGluZ09iamVjdC0+cGl4ZWxTbmFwcGVkTWF4WSgpLCBmbG9hdGlu
Z09iamVjdCk7CisgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdEludGVydmFs
KGZsb2F0aW5nT2JqZWN0LT5waXhlbFNuYXBwZWRYKCksIGZsb2F0aW5nT2JqZWN0LT5waXhlbFNu
YXBwZWRNYXhYKCksIGZsb2F0aW5nT2JqZWN0KTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6Rmxv
YXRpbmdPYmplY3RzOjphZGRQbGFjZWRPYmplY3QoRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2Jq
ZWN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9u
IDExMDg1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjYsNiArMTY2LDE3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJl
dHVybiBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUocG9zaXRpb24sIGxvZ2ljYWxMZWZ0T2Zmc2V0
Rm9yQ29udGVudChwb3NpdGlvbiksIGZpcnN0TGluZSwgMCk7CiAgICAgfQorICAgIExheW91dFVu
aXQgcGl4ZWxTbmFwcGVkTG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRp
b24sIGJvb2wgZmlyc3RMaW5lKSBjb25zdCAKKyAgICB7CisgICAgICAgIHJldHVybiByb3VuZFRv
SW50KGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgZmlyc3RMaW5lKSk7CisgICAg
fQorICAgIExheW91dFVuaXQgcGl4ZWxTbmFwcGVkTG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShM
YXlvdXRVbml0IHBvc2l0aW9uLCBib29sIGZpcnN0TGluZSkgY29uc3QgCisgICAgeworICAgICAg
ICAvLyBGSVhNRTogTXVsdGljb2x1bW4gbGF5b3V0cyBicmVhayBjYXJyeWluZyBvdmVyIHN1YnBp
eGVsIHZhbHVlcyB0byB0aGUgbG9naWNhbCByaWdodCBvZmZzZXQgYmVjYXVzZSB0aGUgbGluZXMg
bWF5IGJlIHNoaWZ0ZWQKKyAgICAgICAgLy8gYnkgYSBzdWJwaXhlbCB2YWx1ZSBmb3IgYWxsIGJ1
dCB0aGUgZmlyc3QgY29sdW1uLiBUaGlzIGNhbiBsZWFkIHRvIHRoZSBhY3R1YWwgcGl4ZWwgc25h
cHBlZCB3aWR0aCBvZiB0aGUgY29sdW1uIGJlaW5nIG9mZgorICAgICAgICAvLyBieSBvbmUgcGl4
ZWwgd2hlbiByZW5kZXJlZCB2ZXJzdXMgbGF5ZWQgb3V0LCB3aGljaCBjYW4gcmVzdWx0IGluIHRo
ZSBsaW5lIGJlaW5nIGNsaXBwZWQuIEZvciBub3csIHdlIGhhdmUgdG8gZmxvb3IuCisgICAgICAg
IHJldHVybiBmbG9vclRvSW50KGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUocG9zaXRpb24sIGZp
cnN0TGluZSkpOworICAgIH0KICAgICBMYXlvdXRVbml0IHN0YXJ0T2Zmc2V0Rm9yTGluZShMYXlv
dXRVbml0IHBvc2l0aW9uLCBib29sIGZpcnN0TGluZSkgY29uc3QKICAgICB7CiAgICAgICAgIHJl
dHVybiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBsb2dpY2FsTGVmdE9mZnNl
dEZvckxpbmUocG9zaXRpb24sIGZpcnN0TGluZSkKQEAgLTE3NywxNyArMTg4LDYgQEAgcHVibGlj
OgogICAgICAgICAgICAgOiBsb2dpY2FsV2lkdGgoKSAtIGxvZ2ljYWxSaWdodE9mZnNldEZvckxp
bmUocG9zaXRpb24sIGZpcnN0TGluZSk7CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFRoZSBpbXBs
ZW1lbnRhdGlvbiBmb3IgdGhlc2UgZnVuY3Rpb25zIHdpbGwgY2hhbmdlIG9uY2Ugd2UgbW92ZSB0
byBzdWJwaXhlbCBsYXlvdXQuIFNlZSBidWcgNjAzMTguCi0gICAgaW50IHBpeGVsU25hcHBlZExv
Z2ljYWxSaWdodE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwgYm9vbCBmaXJzdExp
bmUpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGlu
ZShwb3NpdGlvbiwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChwb3NpdGlvbiksIGZpcnN0
TGluZSwgMCk7Ci0gICAgfQotCi0gICAgaW50IHBpeGVsU25hcHBlZExvZ2ljYWxMZWZ0T2Zmc2V0
Rm9yTGluZShMYXlvdXRVbml0IHBvc2l0aW9uLCBib29sIGZpcnN0TGluZSkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiByb3VuZFRvSW50KGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3Np
dGlvbiwgbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KHBvc2l0aW9uKSwgZmlyc3RMaW5lLCAw
KSk7Ci0gICAgfQotICAgIAogICAgIExheW91dFVuaXQgc3RhcnRBbGlnbmVkT2Zmc2V0Rm9yTGlu
ZShSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0IHBvc2l0aW9uLCBib29sIGZpcnN0TGluZSk7
CiAgICAgTGF5b3V0VW5pdCB0ZXh0SW5kZW50T2Zmc2V0KCkgY29uc3Q7CiAKQEAgLTI2MSw3ICsy
NjEsNyBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIHBhZ2UgbG9naWNhbCBvZmZzZXQgaXMgdGhlIG9i
amVjdCdzIG9mZnNldCBmcm9tIHRoZSB0b3Agb2YgdGhlIHBhZ2UgaW4gdGhlIHBhZ2UgcHJvZ3Jl
c3Npb24KICAgICAvLyBkaXJlY3Rpb24gKHNvIGFuIHgtb2Zmc2V0IGluIHZlcnRpY2FsIHRleHQg
YW5kIGEgeS1vZmZzZXQgZm9yIGhvcml6b250YWwgdGV4dCkuCiAgICAgTGF5b3V0VW5pdCBwYWdl
TG9naWNhbE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5t
X3BhZ2VMb2dpY2FsT2Zmc2V0IDogemVyb0xheW91dFVuaXQ7IH0KLSAgICB2b2lkIHNldFBhZ2VM
b2dpY2FsT2Zmc2V0KGludCk7CisgICAgdm9pZCBzZXRQYWdlTG9naWNhbE9mZnNldChMYXlvdXRV
bml0KTsKIAogICAgIFJvb3RJbmxpbmVCb3gqIGxpbmVHcmlkQm94KCkgY29uc3QgeyByZXR1cm4g
bV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fbGluZUdyaWRCb3ggOiAwOyB9CiAgICAgdm9pZCBz
ZXRMaW5lR3JpZEJveChSb290SW5saW5lQm94KiBib3gpCkBAIC02MDAsMTMgKzYwMCwxMiBAQCBw
cml2YXRlOgogICAgICAgICBMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9mcmFt
ZVJlY3Qud2lkdGgoKTsgfQogICAgICAgICBMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0
dXJuIG1fZnJhbWVSZWN0LmhlaWdodCgpOyB9CiAKLSAgICAgICAgLy8gRklYTUU6IFRoZSBpbXBs
ZW1lbnRhdGlvbiBmb3IgdGhlc2UgZnVuY3Rpb25zIHdpbGwgY2hhbmdlIG9uY2Ugd2UgbW92ZSB0
byBzdWJwaXhlbCBsYXlvdXQuIFNlZSBidWcgNjAzMTguCi0gICAgICAgIGludCBwaXhlbFNuYXBw
ZWRYKCkgY29uc3QgeyByZXR1cm4geCgpOyB9Ci0gICAgICAgIGludCBwaXhlbFNuYXBwZWRNYXhY
KCkgY29uc3QgeyByZXR1cm4gbWF4WCgpOyB9Ci0gICAgICAgIGludCBwaXhlbFNuYXBwZWRZKCkg
Y29uc3QgeyByZXR1cm4geSgpOyB9Ci0gICAgICAgIGludCBwaXhlbFNuYXBwZWRNYXhZKCkgY29u
c3QgeyByZXR1cm4gbWF4WSgpOyB9Ci0gICAgICAgIGludCBwaXhlbFNuYXBwZWRXaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIHdpZHRoKCk7IH0KLSAgICAgICAgaW50IHBpeGVsU25hcHBlZEhlaWdodCgp
IGNvbnN0IHsgcmV0dXJuIGhlaWdodCgpOyB9CisgICAgICAgIGludCBwaXhlbFNuYXBwZWRYKCkg
Y29uc3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJldHVybiBtX2ZyYW1lUmVjdC5waXhlbFNuYXBw
ZWRYKCk7IH0KKyAgICAgICAgaW50IHBpeGVsU25hcHBlZE1heFgoKSBjb25zdCB7IEFTU0VSVChp
c1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0LnBpeGVsU25hcHBlZE1heFgoKTsgfQorICAg
ICAgICBpbnQgcGl4ZWxTbmFwcGVkWSgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1
cm4gbV9mcmFtZVJlY3QucGl4ZWxTbmFwcGVkWSgpOyB9CisgICAgICAgIGludCBwaXhlbFNuYXBw
ZWRNYXhZKCkgY29uc3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJldHVybiBtX2ZyYW1lUmVjdC5w
aXhlbFNuYXBwZWRNYXhZKCk7IH0KKyAgICAgICAgaW50IHBpeGVsU25hcHBlZFdpZHRoKCkgY29u
c3QgeyByZXR1cm4gbV9mcmFtZVJlY3QucGl4ZWxTbmFwcGVkV2lkdGgoKTsgfQorICAgICAgICBp
bnQgcGl4ZWxTbmFwcGVkSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3QucGl4ZWxT
bmFwcGVkSGVpZ2h0KCk7IH0KIAogICAgICAgICB2b2lkIHNldFgoTGF5b3V0VW5pdCB4KSB7IEFT
U0VSVCghaXNJblBsYWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0LnNldFgoeCk7IH0KICAgICAgICAg
dm9pZCBzZXRZKExheW91dFVuaXQgeSkgeyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBtX2Zy
YW1lUmVjdC5zZXRZKHkpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2aXNpb24gMTEwODU0KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMywxOCArMTIzLDE4IEBAIGlubGluZSB2b2lkIExpbmVXaWR0aDo6dXBkYXRlQXZh
aWxhYmxlV2kKIAogaW5saW5lIHZvaWQgTGluZVdpZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZv
ck5ld0Zsb2F0SWZOZWVkZWQoUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBuZXdGbG9hdCkK
IHsKLSAgICBpbnQgaGVpZ2h0ID0gbV9ibG9jay0+bG9naWNhbEhlaWdodCgpOworICAgIExheW91
dFVuaXQgaGVpZ2h0ID0gbV9ibG9jay0+bG9naWNhbEhlaWdodCgpOwogICAgIGlmIChoZWlnaHQg
PCBtX2Jsb2NrLT5sb2dpY2FsVG9wRm9yRmxvYXQobmV3RmxvYXQpIHx8IGhlaWdodCA+PSBtX2Js
b2NrLT5sb2dpY2FsQm90dG9tRm9yRmxvYXQobmV3RmxvYXQpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBpZiAobmV3RmxvYXQtPnR5cGUoKSA9PSBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6
OkZsb2F0TGVmdCkgewogICAgICAgICBtX2xlZnQgPSBtX2Jsb2NrLT5waXhlbFNuYXBwZWRMb2dp
Y2FsUmlnaHRGb3JGbG9hdChuZXdGbG9hdCk7CiAgICAgICAgIGlmIChtX2lzRmlyc3RMaW5lICYm
IG1fYmxvY2stPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAgICAgICAg
IG1fbGVmdCArPSBtX2Jsb2NrLT50ZXh0SW5kZW50T2Zmc2V0KCk7CisgICAgICAgICAgICBtX2xl
ZnQgKz0gZmxvb3JUb0ludChtX2Jsb2NrLT50ZXh0SW5kZW50T2Zmc2V0KCkpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIG1fcmlnaHQgPSBtX2Jsb2NrLT5waXhlbFNuYXBwZWRMb2dpY2FsTGVmdEZv
ckZsb2F0KG5ld0Zsb2F0KTsKICAgICAgICAgaWYgKG1faXNGaXJzdExpbmUgJiYgIW1fYmxvY2st
PnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAgICAgICAgIG1fcmlnaHQg
LT0gbV9ibG9jay0+dGV4dEluZGVudE9mZnNldCgpOworICAgICAgICAgICAgbV9yaWdodCAtPSBm
bG9vclRvSW50KG1fYmxvY2stPnRleHRJbmRlbnRPZmZzZXQoKSk7CiAgICAgfQogCiAgICAgY29t
cHV0ZUF2YWlsYWJsZVdpZHRoRnJvbUxlZnRBbmRSaWdodCgpOwpAQCAtMTU5LDggKzE1OSw4IEBA
IHZvaWQgTGluZVdpZHRoOjpmaXRCZWxvd0Zsb2F0cygpCiAgICAgQVNTRVJUKCFtX2NvbW1pdHRl
ZFdpZHRoKTsKICAgICBBU1NFUlQoIWZpdHNPbkxpbmUoKSk7CiAKLSAgICBpbnQgZmxvYXRMb2dp
Y2FsQm90dG9tOwotICAgIGludCBsYXN0RmxvYXRMb2dpY2FsQm90dG9tID0gbV9ibG9jay0+bG9n
aWNhbEhlaWdodCgpOworICAgIExheW91dFVuaXQgZmxvYXRMb2dpY2FsQm90dG9tOworICAgIExh
eW91dFVuaXQgbGFzdEZsb2F0TG9naWNhbEJvdHRvbSA9IG1fYmxvY2stPmxvZ2ljYWxIZWlnaHQo
KTsKICAgICBmbG9hdCBuZXdMaW5lV2lkdGggPSBtX2F2YWlsYWJsZVdpZHRoOwogICAgIGZsb2F0
IG5ld0xpbmVMZWZ0ID0gbV9sZWZ0OwogICAgIGZsb2F0IG5ld0xpbmVSaWdodCA9IG1fcmlnaHQ7
CkBAIC02NTQsNyArNjU0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldExvZ2ljYWxXaWR0aEZv
clRleAogICAgICAgICAgICAgZ2x5cGhPdmVyZmxvdy5jb21wdXRlQm91bmRzID0gdHJ1ZTsgCiAg
ICAgfQogICAgIAotICAgIGludCBoeXBoZW5XaWR0aCA9IDA7CisgICAgTGF5b3V0VW5pdCBoeXBo
ZW5XaWR0aCA9IDA7CiAgICAgaWYgKHRvSW5saW5lVGV4dEJveChydW4tPm1fYm94KS0+aGFzSHlw
aGVuKCkpIHsKICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHJlbmRlcmVyLT5zdHlsZShsaW5l
SW5mby5pc0ZpcnN0TGluZSgpKS0+Zm9udCgpOwogICAgICAgICBoeXBoZW5XaWR0aCA9IG1lYXN1
cmVIeXBoZW5XaWR0aChyZW5kZXJlciwgZm9udCk7CkBAIC0xMTA5LDggKzExMDksOCBAQCBwdWJs
aWM6CiAgICAgTGluZUluZm8mIGxpbmVJbmZvKCkgeyByZXR1cm4gbV9saW5lSW5mbzsgfQogICAg
IGNvbnN0IExpbmVJbmZvJiBsaW5lSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUluZm87IH0K
IAotICAgIGludCBlbmRMaW5lTG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kTGluZUxv
Z2ljYWxUb3A7IH0KLSAgICB2b2lkIHNldEVuZExpbmVMb2dpY2FsVG9wKGludCBsb2dpY2FsVG9w
KSB7IG1fZW5kTGluZUxvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wOyB9CisgICAgTGF5b3V0VW5pdCBl
bmRMaW5lTG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kTGluZUxvZ2ljYWxUb3A7IH0K
KyAgICB2b2lkIHNldEVuZExpbmVMb2dpY2FsVG9wKExheW91dFVuaXQgbG9naWNhbFRvcCkgeyBt
X2VuZExpbmVMb2dpY2FsVG9wID0gbG9naWNhbFRvcDsgfQogCiAgICAgUm9vdElubGluZUJveCog
ZW5kTGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kTGluZTsgfQogICAgIHZvaWQgc2V0RW5kTGlu
ZShSb290SW5saW5lQm94KiBsaW5lKSB7IG1fZW5kTGluZSA9IGxpbmU7IH0KQEAgLTExMjksNyAr
MTEyOSw3IEBAIHByaXZhdGU6CiAgICAgUm9vdElubGluZUJveCogbV9lbmRMaW5lOwogICAgIExp
bmVJbmZvIG1fbGluZUluZm87CiAgICAgdW5zaWduZWQgbV9mbG9hdEluZGV4OwotICAgIGludCBt
X2VuZExpbmVMb2dpY2FsVG9wOworICAgIExheW91dFVuaXQgbV9lbmRMaW5lTG9naWNhbFRvcDsK
ICAgICBib29sIG1fZW5kTGluZU1hdGNoZWQ7CiAgICAgYm9vbCBtX2NoZWNrRm9yRmxvYXRzRnJv
bUxhc3RMaW5lOwogICAgIApAQCAtMTQwMCwxOSArMTQwMCwxOSBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpsaW5rVG9FbmRMaW5lSWZOZWVkZWQoCiAgICAgICAgIC8vIFRoaXMgaGFzIHRvIGJlIGRvbmUg
YmVmb3JlIGFkZGluZyBpbiB0aGUgYm90dG9tIGJvcmRlci9wYWRkaW5nLCBvciB0aGUgZmxvYXQg
d2lsbAogICAgICAgICAvLyBpbmNsdWRlIHRoZSBwYWRkaW5nIGluY29ycmVjdGx5LiAtZHdoCiAg
ICAgICAgIGlmIChsYXlvdXRTdGF0ZS5jaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSgpKSB7Ci0g
ICAgICAgICAgICBpbnQgYm90dG9tVmlzdWFsT3ZlcmZsb3cgPSBsYXN0Um9vdEJveCgpLT5sb2dp
Y2FsQm90dG9tVmlzdWFsT3ZlcmZsb3coKTsKLSAgICAgICAgICAgIGludCBib3R0b21MYXlvdXRP
dmVyZmxvdyA9IGxhc3RSb290Qm94KCktPmxvZ2ljYWxCb3R0b21MYXlvdXRPdmVyZmxvdygpOwor
ICAgICAgICAgICAgTGF5b3V0VW5pdCBib3R0b21WaXN1YWxPdmVyZmxvdyA9IGxhc3RSb290Qm94
KCktPmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdygpOworICAgICAgICAgICAgTGF5b3V0VW5p
dCBib3R0b21MYXlvdXRPdmVyZmxvdyA9IGxhc3RSb290Qm94KCktPmxvZ2ljYWxCb3R0b21MYXlv
dXRPdmVyZmxvdygpOwogICAgICAgICAgICAgVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94KiB0
cmFpbGluZ0Zsb2F0c0xpbmVCb3ggPSBuZXcgKHJlbmRlckFyZW5hKCkpIFRyYWlsaW5nRmxvYXRz
Um9vdElubGluZUJveCh0aGlzKTsKICAgICAgICAgICAgIG1fbGluZUJveGVzLmFwcGVuZExpbmVC
b3godHJhaWxpbmdGbG9hdHNMaW5lQm94KTsKICAgICAgICAgICAgIHRyYWlsaW5nRmxvYXRzTGlu
ZUJveC0+c2V0Q29uc3RydWN0ZWQoKTsKICAgICAgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxs
YmFja0ZvbnRzTWFwIHRleHRCb3hEYXRhTWFwOwogICAgICAgICAgICAgVmVydGljYWxQb3NpdGlv
bkNhY2hlIHZlcnRpY2FsUG9zaXRpb25DYWNoZTsKLSAgICAgICAgICAgIGludCBibG9ja0xvZ2lj
YWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgICAgICBMYXlvdXRVbml0IGJsb2Nr
TG9naWNhbEhlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgICAgIHRyYWlsaW5nRmxv
YXRzTGluZUJveC0+YWxpZ25Cb3hlc0luQmxvY2tEaXJlY3Rpb24oYmxvY2tMb2dpY2FsSGVpZ2h0
LCB0ZXh0Qm94RGF0YU1hcCwgdmVydGljYWxQb3NpdGlvbkNhY2hlKTsKICAgICAgICAgICAgIHRy
YWlsaW5nRmxvYXRzTGluZUJveC0+c2V0TGluZVRvcEJvdHRvbVBvc2l0aW9ucyhibG9ja0xvZ2lj
YWxIZWlnaHQsIGJsb2NrTG9naWNhbEhlaWdodCwgYmxvY2tMb2dpY2FsSGVpZ2h0LCBibG9ja0xv
Z2ljYWxIZWlnaHQpOwogICAgICAgICAgICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT5zZXRQYWdp
bmF0ZWRMaW5lV2lkdGgoYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yQ29udGVudChibG9ja0xvZ2lj
YWxIZWlnaHQpKTsKLSAgICAgICAgICAgIEludFJlY3QgbG9naWNhbExheW91dE92ZXJmbG93KDAs
IGJsb2NrTG9naWNhbEhlaWdodCwgMSwgYm90dG9tTGF5b3V0T3ZlcmZsb3cgLSBibG9ja0xvZ2lj
YWxIZWlnaHQpOwotICAgICAgICAgICAgSW50UmVjdCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3coMCwg
YmxvY2tMb2dpY2FsSGVpZ2h0LCAxLCBib3R0b21WaXN1YWxPdmVyZmxvdyAtIGJsb2NrTG9naWNh
bEhlaWdodCk7CisgICAgICAgICAgICBMYXlvdXRSZWN0IGxvZ2ljYWxMYXlvdXRPdmVyZmxvdygw
LCBibG9ja0xvZ2ljYWxIZWlnaHQsIDEsIGJvdHRvbUxheW91dE92ZXJmbG93IC0gYmxvY2tMb2dp
Y2FsSGVpZ2h0KTsKKyAgICAgICAgICAgIExheW91dFJlY3QgbG9naWNhbFZpc3VhbE92ZXJmbG93
KDAsIGJsb2NrTG9naWNhbEhlaWdodCwgMSwgYm90dG9tVmlzdWFsT3ZlcmZsb3cgLSBibG9ja0xv
Z2ljYWxIZWlnaHQpOwogICAgICAgICAgICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT5zZXRPdmVy
Zmxvd0Zyb21Mb2dpY2FsUmVjdHMobG9naWNhbExheW91dE92ZXJmbG93LCBsb2dpY2FsVmlzdWFs
T3ZlcmZsb3csIHRyYWlsaW5nRmxvYXRzTGluZUJveC0+bGluZVRvcCgpLCB0cmFpbGluZ0Zsb2F0
c0xpbmVCb3gtPmxpbmVCb3R0b20oKSk7CiAgICAgICAgIH0KIApAQCAtMTUxNyw3ICsxNTE3LDcg
QEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgIC8vIEV4cGFu
ZCB0aGUgbGFzdCBsaW5lIHRvIGFjY29tbW9kYXRlIFJ1YnkgYW5kIGVtcGhhc2lzIG1hcmtzLgog
ICAgIGludCBsYXN0TGluZUFubm90YXRpb25zQWRqdXN0bWVudCA9IDA7CiAgICAgaWYgKGxhc3RS
b290Qm94KCkpIHsKLSAgICAgICAgaW50IGxvd2VzdEFsbG93ZWRQb3NpdGlvbiA9IG1heChsYXN0
Um9vdEJveCgpLT5saW5lQm90dG9tKCksIGxvZ2ljYWxIZWlnaHQoKSArIHBhZGRpbmdBZnRlcigp
KTsKKyAgICAgICAgTGF5b3V0VW5pdCBsb3dlc3RBbGxvd2VkUG9zaXRpb24gPSBtYXgobGFzdFJv
b3RCb3goKS0+bGluZUJvdHRvbSgpLCBsb2dpY2FsSGVpZ2h0KCkgKyBwYWRkaW5nQWZ0ZXIoKSk7
CiAgICAgICAgIGlmICghc3R5bGUoKS0+aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpKQogICAg
ICAgICAgICAgbGFzdExpbmVBbm5vdGF0aW9uc0FkanVzdG1lbnQgPSBsYXN0Um9vdEJveCgpLT5j
b21wdXRlVW5kZXJBbm5vdGF0aW9uQWRqdXN0bWVudChsb3dlc3RBbGxvd2VkUG9zaXRpb24pOwog
ICAgICAgICBlbHNlCkBAIC0yNjkwLDggKzI2OTAsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjaGVj
a0xpbmVzRm9yVGV4dE92ZXJmCiAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQo
KTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZWxsaXBzaXNTdHIsICgm
aG9yaXpvbnRhbEVsbGlwc2lzLCAxKSk7CiAgICAgY29uc3QgRm9udCYgZmlyc3RMaW5lRm9udCA9
IGZpcnN0TGluZVN0eWxlKCktPmZvbnQoKTsKLSAgICBMYXlvdXRVbml0IGZpcnN0TGluZUVsbGlw
c2lzV2lkdGggPSBmaXJzdExpbmVGb250LndpZHRoKGNvbnN0cnVjdFRleHRSdW4odGhpcywgZmly
c3RMaW5lRm9udCwgJmhvcml6b250YWxFbGxpcHNpcywgMSwgZmlyc3RMaW5lU3R5bGUoKSkpOwot
ICAgIExheW91dFVuaXQgZWxsaXBzaXNXaWR0aCA9IChmb250ID09IGZpcnN0TGluZUZvbnQpID8g
Zmlyc3RMaW5lRWxsaXBzaXNXaWR0aCA6IGZvbnQud2lkdGgoY29uc3RydWN0VGV4dFJ1bih0aGlz
LCBmb250LCAmaG9yaXpvbnRhbEVsbGlwc2lzLCAxLCBzdHlsZSgpKSk7CisgICAgaW50IGZpcnN0
TGluZUVsbGlwc2lzV2lkdGggPSBmaXJzdExpbmVGb250LndpZHRoKGNvbnN0cnVjdFRleHRSdW4o
dGhpcywgZmlyc3RMaW5lRm9udCwgJmhvcml6b250YWxFbGxpcHNpcywgMSwgZmlyc3RMaW5lU3R5
bGUoKSkpOworICAgIGludCBlbGxpcHNpc1dpZHRoID0gKGZvbnQgPT0gZmlyc3RMaW5lRm9udCkg
PyBmaXJzdExpbmVFbGxpcHNpc1dpZHRoIDogZm9udC53aWR0aChjb25zdHJ1Y3RUZXh0UnVuKHRo
aXMsIGZvbnQsICZob3Jpem9udGFsRWxsaXBzaXMsIDEsIHN0eWxlKCkpKTsKIAogICAgIC8vIEZv
ciBMVFIgdGV4dCB0cnVuY2F0aW9uLCB3ZSB3YW50IHRvIGdldCB0aGUgcmlnaHQgZWRnZSBvZiBv
dXIgcGFkZGluZyBib3gsIGFuZCB0aGVuIHdlIHdhbnQgdG8gc2VlCiAgICAgLy8gaWYgdGhlIHJp
Z2h0IGVkZ2Ugb2YgYSBsaW5lIGJveCBleGNlZWRzIHRoYXQuICBGb3IgUlRMLCB3ZSB1c2UgdGhl
IGxlZnQgZWRnZSBvZiB0aGUgcGFkZGluZyBib3ggYW5kCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>