<?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>94019</bug_id>
          
          <creation_ts>2012-08-14 13:50:35 -0700</creation_ts>
          <short_desc>De-inline stuff from RenderStyle.h</short_desc>
          <delta_ts>2012-08-16 09:53:51 -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>New Bugs</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>
          <dependson>94159</dependson>
          <blocked>93629</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>nbhargava</reporter>
          <assigned_to>nbhargava</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>jamesr</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>slewis</cc>
    
    <cc>tony</cc>
    
    <cc>tonyg</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>695355</commentid>
    <comment_count>0</comment_count>
    <who name="">nbhargava</who>
    <bug_when>2012-08-14 13:50:35 -0700</bug_when>
    <thetext>De-inline stuff from RenderStyle.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>695357</commentid>
    <comment_count>1</comment_count>
      <attachid>158409</attachid>
    <who name="">nbhargava</who>
    <bug_when>2012-08-14 13:52:24 -0700</bug_when>
    <thetext>Created attachment 158409
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>695377</commentid>
    <comment_count>2</comment_count>
      <attachid>158409</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-14 14:10:56 -0700</bug_when>
    <thetext>Comment on attachment 158409
Patch

This is the perf sensitive part of the change.  You&apos;ll need to watch the Chromium perf bots for any hiccup after this change.  You can ask Tony G or James R how to find/read them.  Most concerning is if the PLT results were to change.
If we see a negative perf change from this, we&apos;ll need to report it here in this bug, and very likely roll this change out.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>695434</commentid>
    <comment_count>3</comment_count>
      <attachid>158409</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-14 15:06:00 -0700</bug_when>
    <thetext>Comment on attachment 158409
Patch

Clearing flags on attachment: 158409

Committed r125612: &lt;http://trac.webkit.org/changeset/125612&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>695435</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-14 15:06:03 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696509</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-15 16:49:23 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 94159</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696512</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-08-15 16:51:27 -0700</bug_when>
    <thetext>Resolving again. However, I would have liked the commit message to say more about what performance analysis was done BEFORE the commit. I&apos;d prefer not to just rely on perf bots for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696517</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-15 16:58:11 -0700</bug_when>
    <thetext>Could you please explain what perf analysis you would like done before commit?

Particularly, what perf analysis you would perform yourself before making such a commit?

I believe the perf bots provide much better numbers than individuals are able to produce on their machines.  I think rollout here was arbitrary and pre-mature.

The bots are actively being watched, as noted:
https://bugs.webkit.org/show_bug.cgi?id=93629#c46</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696521</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-15 17:00:36 -0700</bug_when>
    <thetext>I see, it was never rolled out.  I remain interested in your suggestions. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696805</commentid>
    <comment_count>9</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-08-16 00:06:03 -0700</bug_when>
    <thetext>FWIW, the Chromium page cyclers didn&apos;t seem to regress:
http://build.chromium.org/f/chromium/perf/chromium-rel-win7-webkit/moz/report.html?history=150&amp;rev=-1
http://build.chromium.org/f/chromium/perf/chromium-rel-win7-webkit/intl1/report.html?history=150&amp;rev=-1
http://build.chromium.org/f/chromium/perf/chromium-rel-win7-webkit/intl2/report.html?history=150&amp;rev=-1

http://build.chromium.org/f/chromium/perf/mac-release-10.6-webkit-latest/moz/report.html?history=150&amp;rev=-1
http://build.chromium.org/f/chromium/perf/mac-release-10.6-webkit-latest/intl1/report.html?history=150&amp;rev=-1
http://build.chromium.org/f/chromium/perf/mac-release-10.6-webkit-latest/intl2/report.html?history=150&amp;rev=-1

http://build.chromium.org/f/chromium/perf/linux-release-webkit-latest/moz/report.html?history=150&amp;rev=-1
http://build.chromium.org/f/chromium/perf/linux-release-webkit-latest/intl1/report.html?history=150&amp;rev=-1
http://build.chromium.org/f/chromium/perf/linux-release-webkit-latest/intl2/report.html?history=150&amp;rev=-1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696821</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-16 00:17:33 -0700</bug_when>
    <thetext>Thank you Tony.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696982</commentid>
    <comment_count>11</comment_count>
      <attachid>158409</attachid>
    <who name="John Mellor">johnme</who>
    <bug_when>2012-08-16 03:39:29 -0700</bug_when>
    <thetext>Comment on attachment 158409
Patch

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

&gt; Source/WebCore/rendering/style/RenderStyle.h:-721
&gt; -    short verticalBorderSpacing() const { return inherited-&gt;vertical_border_spacing; }

What do we gain from un-inlining these two getters? They don&apos;t seem to require Font, or any other expensive includes?

&gt; Source/WebCore/rendering/style/RenderStyle.h:-1139
&gt; -    void setLineHeight(Length v) { SET_VAR(inherited, line_height, v) }

Ditto here, it doesn&apos;t seem feasible to remove the Length.h include. Is this change just for consistency (so all the line height methods are non-inline)?

&gt; Source/WebCore/rendering/style/RenderStyle.h:-1193
&gt; -    void setVerticalBorderSpacing(short v) { SET_VAR(inherited, vertical_border_spacing, v) }

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697234</commentid>
    <comment_count>12</comment_count>
    <who name="">nbhargava</who>
    <bug_when>2012-08-16 09:53:51 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; What do we gain from un-inlining these two getters? They don&apos;t seem to require Font, or any other expensive includes?

inherited is of type StyleInheritedData, and StyleInheritedData.h includes Font. As a result, in order to effectively get rid of extraneous includes of Font from RenderStyle, you also have to remove function calls to things of StyleInheritedData. SET_VAR modifies the internal data of inherited, which is why those functions are de-inlined.

In terms of rough numbers, on my machine I get a drop-off of ~260s of CPU time in a build (so a serialized compilation would be 260s faster) of Chromium when this  change is made, along with the stuff from bug 93629.

That being said, if there are worries about problems with run-time speed due to de-inlining, I&apos;m very okay rolling this back.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158409</attachid>
            <date>2012-08-14 13:52:24 -0700</date>
            <delta_ts>2012-08-16 03:39:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94019-20120814135152.patch</filename>
            <type>text/plain</type>
            <size>15588</size>
            <attacher>nbhargava</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1NDI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjI3ZTNlZGNiYzQ1Mzg1
MDJhNzllNWY4NzgwZmI5NGZmNjAyYjhiNy4uMDY3N2MwOTZlZGRiMmZiZDVjM2VlNzhlOTA4MTll
NzExYmE1N2QzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEyLTA4LTE0ICBOaWto
aWwgQmhhcmdhdmEgIDxuYmhhcmdhdmFAZ29vZ2xlLmNvbT4KKworICAgICAgICBEZS1pbmxpbmUg
c3R1ZmYgZnJvbSBSZW5kZXJTdHlsZS5oCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05NDAxOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIERlLWlubGluZSB0aGluZ3MgZnJvbSBSZW5kZXJTdHlsZS5oIGluIHBy
ZXBhcmF0aW9uIG9mIGZpeGluZyBhIHNlcmllcyBvZgorICAgICAgICBlcnJhbnQgaW5jbHVkZXMu
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBEb2Vzbid0IGNoYW5nZSBmdW5jdGlvbmFsaXR5CisK
KyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6Omxpc3RTdHlsZUlt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRMaXN0U3R5bGVJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpjb2xv
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6c2V0Q29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU3R5bGU6Omhvcml6b250YWxCb3JkZXJTcGFjaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclN0eWxlOjp2ZXJ0aWNhbEJvcmRlclNwYWNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU3R5bGU6OnNldEhvcml6b250YWxCb3JkZXJTcGFjaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclN0eWxlOjpzZXRWZXJ0aWNhbEJvcmRlclNwYWNpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU3R5bGU6OmZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6
OmZvbnRNZXRyaWNzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpmb250RGVzY3Jp
cHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmZvbnRTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjp3b3JkU3BhY2luZyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTdHlsZTo6bGV0dGVyU3BhY2luZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
dHlsZTo6c2V0Rm9udERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxl
OjpsaW5lSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRMaW5lSGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpjb21wdXRlZExpbmVIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldFdvcmRTcGFjaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRMZXR0ZXJTcGFjaW5nKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaDoKKwogMjAxMi0wOC0xMyAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBnZXQg
cmlkIG9mIGJlZm9yZVRleHRDaGFuZ2VkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IGJkY2ExMjkx
ZDZiOWE2NDMxYTVjYzI0MTliODAyNWYyZjMyODUyMTkuLjM0ZGM4YzZiMDE4YjdiNmM3ZDYwODZi
NWE2MmUyODM4NjJjN2U4ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0xMDk5LDcgKzEwOTks
OSBAQCBfX1pOSzdXZWJDb3JlMTFIaXN0b3J5SXRlbThyZWZlcnJlckV2CiBfX1pOSzdXZWJDb3Jl
MTFIaXN0b3J5SXRlbTl1cmxTdHJpbmdFdgogX19aTks3V2ViQ29yZTExSGlzdG9yeUl0ZW05dmll
d1N0YXRlRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlckxheWVyMTlhYnNvbHV0ZUJvdW5kaW5nQm94
RXYKK19fWk5LN1dlYkNvcmUxMVJlbmRlclN0eWxlMTFmb250TWV0cmljc0V2CiBfX1pOSzdXZWJD
b3JlMTFSZW5kZXJTdHlsZTIxdmlzaXRlZERlcGVuZGVudENvbG9yRWkKK19fWk5LN1dlYkNvcmUx
MVJlbmRlclN0eWxlNGZvbnRFdgogX19aTks3V2ViQ29yZTExU2NyaXB0VmFsdWU5Z2V0U3RyaW5n
RVBOM0pTQzlFeGVjU3RhdGVFUk4zV1RGNlN0cmluZ0UKIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9i
amVjdDE0ZW5jbG9zaW5nTGF5ZXJFdgogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTVsb2Nh
bFRvQWJzb2x1dGVFUktOU18xMEZsb2F0UG9pbnRFYmIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCmluZGV4IDIzMDNmZmEwNDE0ZDgwNmRkZDkxOTcw
MDJlMDA5MWQ4N2I0MGQwOTUuLmVkOTQyNDRiMDMzYzBmNTJhMWMzN2JhNzg0MWMxM2VjZDA2MTc3
MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHls
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNw
cApAQCAtOTQzLDYgKzk0MywyMyBAQCBzdGF0aWMgZmxvYXQgY2FsY0NvbnN0cmFpbnRTY2FsZUZv
cihjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaQogICAgIHJldHVy
biBmYWN0b3I7CiB9CiAKK1N0eWxlSW1hZ2UqIFJlbmRlclN0eWxlOjpsaXN0U3R5bGVJbWFnZSgp
IGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+bGlzdF9zdHlsZV9pbWFnZS5nZXQoKTsgfQordm9p
ZCBSZW5kZXJTdHlsZTo6c2V0TGlzdFN0eWxlSW1hZ2UoUGFzc1JlZlB0cjxTdHlsZUltYWdlPiB2
KQoreworICAgIGlmIChpbmhlcml0ZWQtPmxpc3Rfc3R5bGVfaW1hZ2UgIT0gdikKKyAgICAgICAg
aW5oZXJpdGVkLmFjY2VzcygpLT5saXN0X3N0eWxlX2ltYWdlID0gdjsKK30KKworQ29sb3IgUmVu
ZGVyU3R5bGU6OmNvbG9yKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5jb2xvcjsgfQorQ29s
b3IgUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQ29sb3IoKSBjb25zdCB7IHJldHVybiBpbmhlcml0
ZWQtPnZpc2l0ZWRMaW5rQ29sb3I7IH0KK3ZvaWQgUmVuZGVyU3R5bGU6OnNldENvbG9yKGNvbnN0
IENvbG9yJiB2KSB7IFNFVF9WQVIoaW5oZXJpdGVkLCBjb2xvciwgdikgfTsKK3ZvaWQgUmVuZGVy
U3R5bGU6OnNldFZpc2l0ZWRMaW5rQ29sb3IoY29uc3QgQ29sb3ImIHYpIHsgU0VUX1ZBUihpbmhl
cml0ZWQsIHZpc2l0ZWRMaW5rQ29sb3IsIHYpIH0KKworc2hvcnQgUmVuZGVyU3R5bGU6Omhvcml6
b250YWxCb3JkZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5ob3Jpem9udGFs
X2JvcmRlcl9zcGFjaW5nOyB9CitzaG9ydCBSZW5kZXJTdHlsZTo6dmVydGljYWxCb3JkZXJTcGFj
aW5nKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT52ZXJ0aWNhbF9ib3JkZXJfc3BhY2luZzsg
fQordm9pZCBSZW5kZXJTdHlsZTo6c2V0SG9yaXpvbnRhbEJvcmRlclNwYWNpbmcoc2hvcnQgdikg
eyBTRVRfVkFSKGluaGVyaXRlZCwgaG9yaXpvbnRhbF9ib3JkZXJfc3BhY2luZywgdikgfQordm9p
ZCBSZW5kZXJTdHlsZTo6c2V0VmVydGljYWxCb3JkZXJTcGFjaW5nKHNob3J0IHYpIHsgU0VUX1ZB
Uihpbmhlcml0ZWQsIHZlcnRpY2FsX2JvcmRlcl9zcGFjaW5nLCB2KSB9CisKIFJvdW5kZWRSZWN0
IFJlbmRlclN0eWxlOjpnZXRSb3VuZGVkQm9yZGVyRm9yKGNvbnN0IExheW91dFJlY3QmIGJvcmRl
clJlY3QsIFJlbmRlclZpZXcqIHJlbmRlclZpZXcsIGJvb2wgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRn
ZSwgYm9vbCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSkgY29uc3QKIHsKICAgICBJbnRSZWN0IHNu
YXBwZWRCb3JkZXJSZWN0KHBpeGVsU25hcHBlZEludFJlY3QoYm9yZGVyUmVjdCkpOwpAQCAtMTE2
NSw2ICsxMTgyLDQ2IEBAIGNvbnN0IEFuaW1hdGlvbiogUmVuZGVyU3R5bGU6OnRyYW5zaXRpb25G
b3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25zCiAgICAgcmV0dXJuIDA7CiB9
CiAKK2NvbnN0IEZvbnQmIFJlbmRlclN0eWxlOjpmb250KCkgY29uc3QgeyByZXR1cm4gaW5oZXJp
dGVkLT5mb250OyB9Citjb25zdCBGb250TWV0cmljcyYgUmVuZGVyU3R5bGU6OmZvbnRNZXRyaWNz
KCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5mb250LmZvbnRNZXRyaWNzKCk7IH0KK2NvbnN0
IEZvbnREZXNjcmlwdGlvbiYgUmVuZGVyU3R5bGU6OmZvbnREZXNjcmlwdGlvbigpIGNvbnN0IHsg
cmV0dXJuIGluaGVyaXRlZC0+Zm9udC5mb250RGVzY3JpcHRpb24oKTsgfQoraW50IFJlbmRlclN0
eWxlOjpmb250U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9udC5waXhlbFNpemUo
KTsgfQorCitpbnQgUmVuZGVyU3R5bGU6OndvcmRTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gaW5o
ZXJpdGVkLT5mb250LndvcmRTcGFjaW5nKCk7IH0KK2ludCBSZW5kZXJTdHlsZTo6bGV0dGVyU3Bh
Y2luZygpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9udC5sZXR0ZXJTcGFjaW5nKCk7IH0K
KworYm9vbCBSZW5kZXJTdHlsZTo6c2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgdikKK3sKKyAgICBpZiAoaW5oZXJpdGVkLT5mb250LmZvbnREZXNjcmlwdGlvbigpICE9
IHYpIHsKKyAgICAgICAgaW5oZXJpdGVkLmFjY2VzcygpLT5mb250ID0gRm9udCh2LCBpbmhlcml0
ZWQtPmZvbnQubGV0dGVyU3BhY2luZygpLCBpbmhlcml0ZWQtPmZvbnQud29yZFNwYWNpbmcoKSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0xl
bmd0aCBSZW5kZXJTdHlsZTo6bGluZUhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+
bGluZV9oZWlnaHQ7IH0KK3ZvaWQgUmVuZGVyU3R5bGU6OnNldExpbmVIZWlnaHQoTGVuZ3RoIHYp
IHsgU0VUX1ZBUihpbmhlcml0ZWQsIGxpbmVfaGVpZ2h0LCB2KTsgfQorCitpbnQgUmVuZGVyU3R5
bGU6OmNvbXB1dGVkTGluZUhlaWdodChSZW5kZXJWaWV3KiByZW5kZXJWaWV3KSBjb25zdAorewor
ICAgIGNvbnN0IExlbmd0aCYgbGggPSBpbmhlcml0ZWQtPmxpbmVfaGVpZ2h0OworCisgICAgLy8g
TmVnYXRpdmUgdmFsdWUgbWVhbnMgdGhlIGxpbmUgaGVpZ2h0IGlzIG5vdCBzZXQuIFVzZSB0aGUg
Zm9udCdzIGJ1aWx0LWluIHNwYWNpbmcuCisgICAgaWYgKGxoLmlzTmVnYXRpdmUoKSkKKyAgICAg
ICAgcmV0dXJuIGZvbnRNZXRyaWNzKCkubGluZVNwYWNpbmcoKTsKKworICAgIGlmIChsaC5pc1Bl
cmNlbnQoKSkKKyAgICAgICAgcmV0dXJuIG1pbmltdW1WYWx1ZUZvckxlbmd0aChsaCwgZm9udFNp
emUoKSk7CisKKyAgICBpZiAobGguaXNWaWV3cG9ydFBlcmNlbnRhZ2UoKSkKKyAgICAgICAgcmV0
dXJuIHZhbHVlRm9yTGVuZ3RoKGxoLCAwLCByZW5kZXJWaWV3KTsKKworICAgIHJldHVybiBsaC52
YWx1ZSgpOworfQorCit2b2lkIFJlbmRlclN0eWxlOjpzZXRXb3JkU3BhY2luZyhpbnQgdikgeyBp
bmhlcml0ZWQuYWNjZXNzKCktPmZvbnQuc2V0V29yZFNwYWNpbmcodik7IH0KK3ZvaWQgUmVuZGVy
U3R5bGU6OnNldExldHRlclNwYWNpbmcoaW50IHYpIHsgaW5oZXJpdGVkLmFjY2VzcygpLT5mb250
LnNldExldHRlclNwYWNpbmcodik7IH0KKwogdm9pZCBSZW5kZXJTdHlsZTo6c2V0QmxlbmRlZEZv
bnRTaXplKGludCBzaXplKQogewogICAgIEZvbnRTZWxlY3RvciogY3VycmVudEZvbnRTZWxlY3Rv
ciA9IGZvbnQoKS5mb250U2VsZWN0b3IoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmgKaW5kZXggNWMwYmQ1ZGNmZDUyN2I5OGZhYjU2MzkyNDNjNzAyYWVh
MTA5OWI3ZS4uMzBlYmJjODg2YTRmYzQ2ODEzMjIwNTFhNDhjNWQ1ZmRkM2JjYzNjMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKQEAgLTU5NCwxOCAr
NTk0LDE4IEBAIHB1YmxpYzoKICAgICBFQ2xlYXIgY2xlYXIoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxFQ2xlYXI+KG5vbmluaGVyaXRlZF9mbGFncy5fY2xlYXIpOyB9CiAgICAgRVRhYmxl
TGF5b3V0IHRhYmxlTGF5b3V0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RVRhYmxlTGF5
b3V0Pihub25pbmhlcml0ZWRfZmxhZ3MuX3RhYmxlX2xheW91dCk7IH0KIAotICAgIGNvbnN0IEZv
bnQmIGZvbnQoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnQ7IH0KLSAgICBjb25zdCBG
b250TWV0cmljcyYgZm9udE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnQu
Zm9udE1ldHJpY3MoKTsgfQotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5mb250LmZvbnREZXNjcmlwdGlvbigpOyB9
Ci0gICAgaW50IGZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5mb250LnBpeGVs
U2l6ZSgpOyB9CisgICAgY29uc3QgRm9udCYgZm9udCgpIGNvbnN0OworICAgIGNvbnN0IEZvbnRN
ZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0OworICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uKCkgY29uc3Q7CisgICAgaW50IGZvbnRTaXplKCkgY29uc3Q7CiAKICAg
ICBMZW5ndGggdGV4dEluZGVudCgpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT5p
bmRlbnQ7IH0KICAgICBFVGV4dEFsaWduIHRleHRBbGlnbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PEVUZXh0QWxpZ24+KGluaGVyaXRlZF9mbGFncy5fdGV4dF9hbGlnbik7IH0KICAgICBF
VGV4dFRyYW5zZm9ybSB0ZXh0VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
RVRleHRUcmFuc2Zvcm0+KGluaGVyaXRlZF9mbGFncy5fdGV4dF90cmFuc2Zvcm0pOyB9CiAgICAg
RVRleHREZWNvcmF0aW9uIHRleHREZWNvcmF0aW9uc0luRWZmZWN0KCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8RVRleHREZWNvcmF0aW9uPihpbmhlcml0ZWRfZmxhZ3MuX3RleHRfZGVjb3Jh
dGlvbnMpOyB9CiAgICAgRVRleHREZWNvcmF0aW9uIHRleHREZWNvcmF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RVRleHREZWNvcmF0aW9uPih2aXN1YWwtPnRleHREZWNvcmF0aW9u
KTsgfQotICAgIGludCB3b3JkU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9u
dC53b3JkU3BhY2luZygpOyB9Ci0gICAgaW50IGxldHRlclNwYWNpbmcoKSBjb25zdCB7IHJldHVy
biBpbmhlcml0ZWQtPmZvbnQubGV0dGVyU3BhY2luZygpOyB9CisgICAgaW50IHdvcmRTcGFjaW5n
KCkgY29uc3Q7CisgICAgaW50IGxldHRlclNwYWNpbmcoKSBjb25zdDsKIAogICAgIGZsb2F0IHpv
b20oKSBjb25zdCB7IHJldHVybiB2aXN1YWwtPm1fem9vbTsgfQogICAgIGZsb2F0IGVmZmVjdGl2
ZVpvb20oKSBjb25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+bV9lZmZlY3RpdmVab29t
OyB9CkBAIC02MTMsMjMgKzYxMyw4IEBAIHB1YmxpYzoKICAgICBUZXh0RGlyZWN0aW9uIGRpcmVj
dGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFRleHREaXJlY3Rpb24+KGluaGVyaXRl
ZF9mbGFncy5fZGlyZWN0aW9uKTsgfQogICAgIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIGRpcmVjdGlvbigpID09IExUUjsgfQogCi0gICAgTGVuZ3RoIGxpbmVI
ZWlnaHQoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmxpbmVfaGVpZ2h0OyB9Ci0gICAgaW50
IGNvbXB1dGVkTGluZUhlaWdodChSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gMCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIGNvbnN0IExlbmd0aCYgbGggPSBpbmhlcml0ZWQtPmxpbmVfaGVpZ2h0Owot
Ci0gICAgICAgIC8vIE5lZ2F0aXZlIHZhbHVlIG1lYW5zIHRoZSBsaW5lIGhlaWdodCBpcyBub3Qg
c2V0LiAgVXNlIHRoZSBmb250J3MgYnVpbHQtaW4gc3BhY2luZy4KLSAgICAgICAgaWYgKGxoLmlz
TmVnYXRpdmUoKSkKLSAgICAgICAgICAgIHJldHVybiBmb250TWV0cmljcygpLmxpbmVTcGFjaW5n
KCk7Ci0KLSAgICAgICAgaWYgKGxoLmlzUGVyY2VudCgpKQotICAgICAgICAgICAgcmV0dXJuIG1p
bmltdW1WYWx1ZUZvckxlbmd0aChsaCwgZm9udFNpemUoKSk7Ci0KLSAgICAgICAgaWYgKGxoLmlz
Vmlld3BvcnRQZXJjZW50YWdlKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWVGb3JMZW5ndGgo
bGgsIDAsIHJlbmRlclZpZXcpOwotCi0gICAgICAgIHJldHVybiBsaC52YWx1ZSgpOwotICAgIH0K
KyAgICBMZW5ndGggbGluZUhlaWdodCgpIGNvbnN0OworICAgIGludCBjb21wdXRlZExpbmVIZWln
aHQoUmVuZGVyVmlldyogPSAwKSBjb25zdDsKIAogICAgIEVXaGl0ZVNwYWNlIHdoaXRlU3BhY2Uo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxFV2hpdGVTcGFjZT4oaW5oZXJpdGVkX2ZsYWdz
Ll93aGl0ZV9zcGFjZSk7IH0KICAgICBzdGF0aWMgYm9vbCBhdXRvV3JhcChFV2hpdGVTcGFjZSB3
cykKQEAgLTcxNyw4ICs3MDIsOCBAQCBwdWJsaWM6CiAgICAgU3R5bGVJbWFnZSogbWFza0JveElt
YWdlU291cmNlKCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbWFza0Jv
eEltYWdlLmltYWdlKCk7IH0KICAKICAgICBFQm9yZGVyQ29sbGFwc2UgYm9yZGVyQ29sbGFwc2Uo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxFQm9yZGVyQ29sbGFwc2U+KGluaGVyaXRlZF9m
bGFncy5fYm9yZGVyX2NvbGxhcHNlKTsgfQotICAgIHNob3J0IGhvcml6b250YWxCb3JkZXJTcGFj
aW5nKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5ob3Jpem9udGFsX2JvcmRlcl9zcGFjaW5n
OyB9Ci0gICAgc2hvcnQgdmVydGljYWxCb3JkZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gaW5o
ZXJpdGVkLT52ZXJ0aWNhbF9ib3JkZXJfc3BhY2luZzsgfQorICAgIHNob3J0IGhvcml6b250YWxC
b3JkZXJTcGFjaW5nKCkgY29uc3Q7CisgICAgc2hvcnQgdmVydGljYWxCb3JkZXJTcGFjaW5nKCkg
Y29uc3Q7CiAgICAgRUVtcHR5Q2VsbCBlbXB0eUNlbGxzKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8RUVtcHR5Q2VsbD4oaW5oZXJpdGVkX2ZsYWdzLl9lbXB0eV9jZWxscyk7IH0KICAgICBF
Q2FwdGlvblNpZGUgY2FwdGlvblNpZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxFQ2Fw
dGlvblNpZGU+KGluaGVyaXRlZF9mbGFncy5fY2FwdGlvbl9zaWRlKTsgfQogCkBAIC03MjYsNyAr
NzExLDcgQEAgcHVibGljOgogICAgIHNob3J0IGNvdW50ZXJSZXNldCgpIGNvbnN0IHsgcmV0dXJu
IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2NvdW50ZXJSZXNldDsgfQogCiAgICAgRUxpc3RTdHls
ZVR5cGUgbGlzdFN0eWxlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVMaXN0U3R5
bGVUeXBlPihpbmhlcml0ZWRfZmxhZ3MuX2xpc3Rfc3R5bGVfdHlwZSk7IH0KLSAgICBTdHlsZUlt
YWdlKiBsaXN0U3R5bGVJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+bGlzdF9zdHls
ZV9pbWFnZS5nZXQoKTsgfQorICAgIFN0eWxlSW1hZ2UqIGxpc3RTdHlsZUltYWdlKCkgY29uc3Q7
CiAgICAgRUxpc3RTdHlsZVBvc2l0aW9uIGxpc3RTdHlsZVBvc2l0aW9uKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8RUxpc3RTdHlsZVBvc2l0aW9uPihpbmhlcml0ZWRfZmxhZ3MuX2xpc3Rf
c3R5bGVfcG9zaXRpb24pOyB9CiAKICAgICBMZW5ndGggbWFyZ2luVG9wKCkgY29uc3QgeyByZXR1
cm4gc3Vycm91bmQtPm1hcmdpbi50b3AoKTsgfQpAQCAtMTExNiwxOSArMTEwMSwxMiBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRDbGVhcihFQ2xlYXIgdikgeyBub25pbmhlcml0ZWRfZmxhZ3MuX2Ns
ZWFyID0gdjsgfQogICAgIHZvaWQgc2V0VGFibGVMYXlvdXQoRVRhYmxlTGF5b3V0IHYpIHsgbm9u
aW5oZXJpdGVkX2ZsYWdzLl90YWJsZV9sYXlvdXQgPSB2OyB9CiAKLSAgICBib29sIHNldEZvbnRE
ZXNjcmlwdGlvbihjb25zdCBGb250RGVzY3JpcHRpb24mIHYpCi0gICAgewotICAgICAgICBpZiAo
aW5oZXJpdGVkLT5mb250LmZvbnREZXNjcmlwdGlvbigpICE9IHYpIHsKLSAgICAgICAgICAgIGlu
aGVyaXRlZC5hY2Nlc3MoKS0+Zm9udCA9IEZvbnQodiwgaW5oZXJpdGVkLT5mb250LmxldHRlclNw
YWNpbmcoKSwgaW5oZXJpdGVkLT5mb250LndvcmRTcGFjaW5nKCkpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBi
b29sIHNldEZvbnREZXNjcmlwdGlvbihjb25zdCBGb250RGVzY3JpcHRpb24mKTsKIAogICAgIC8v
IE9ubHkgdXNlZCBmb3IgYmxlbmRpbmcgZm9udCBzaXplcyB3aGVuIGFuaW1hdGluZywgb3IgTWF0
aE1MIGFub255bW91cyBibG9ja3MuCiAgICAgdm9pZCBzZXRCbGVuZGVkRm9udFNpemUoaW50KTsK
IAotICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgQ29sb3ImIHYpIHsgU0VUX1ZBUihpbmhlcml0ZWQs
IGNvbG9yLCB2KSB9CisgICAgdm9pZCBzZXRDb2xvcihjb25zdCBDb2xvciYpOwogICAgIHZvaWQg
c2V0VGV4dEluZGVudChMZW5ndGggdikgeyBTRVRfVkFSKHJhcmVJbmhlcml0ZWREYXRhLCBpbmRl
bnQsIHYpIH0KICAgICB2b2lkIHNldFRleHRBbGlnbihFVGV4dEFsaWduIHYpIHsgaW5oZXJpdGVk
X2ZsYWdzLl90ZXh0X2FsaWduID0gdjsgfQogICAgIHZvaWQgc2V0VGV4dFRyYW5zZm9ybShFVGV4
dFRyYW5zZm9ybSB2KSB7IGluaGVyaXRlZF9mbGFncy5fdGV4dF90cmFuc2Zvcm0gPSB2OyB9CkBA
IC0xMTM2LDcgKzExMTQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUZXh0RGVjb3JhdGlvbnNJ
bkVmZmVjdChFVGV4dERlY29yYXRpb24gdikgeyBpbmhlcml0ZWRfZmxhZ3MuX3RleHRfZGVjb3Jh
dGlvbnMgPSB2OyB9CiAgICAgdm9pZCBzZXRUZXh0RGVjb3JhdGlvbihFVGV4dERlY29yYXRpb24g
dikgeyBTRVRfVkFSKHZpc3VhbCwgdGV4dERlY29yYXRpb24sIHYpOyB9CiAgICAgdm9pZCBzZXRE
aXJlY3Rpb24oVGV4dERpcmVjdGlvbiB2KSB7IGluaGVyaXRlZF9mbGFncy5fZGlyZWN0aW9uID0g
djsgfQotICAgIHZvaWQgc2V0TGluZUhlaWdodChMZW5ndGggdikgeyBTRVRfVkFSKGluaGVyaXRl
ZCwgbGluZV9oZWlnaHQsIHYpIH0KKyAgICB2b2lkIHNldExpbmVIZWlnaHQoTGVuZ3RoKTsKICAg
ICBib29sIHNldFpvb20oZmxvYXQpOwogICAgIHZvaWQgc2V0Wm9vbVdpdGhvdXRSZXR1cm5WYWx1
ZShmbG9hdCBmKSB7IHNldFpvb20oZik7IH0KICAgICBib29sIHNldEVmZmVjdGl2ZVpvb20oZmxv
YXQpOwpAQCAtMTE1NSw4ICsxMTMzLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRXaGl0ZVNw
YWNlKEVXaGl0ZVNwYWNlIHYpIHsgaW5oZXJpdGVkX2ZsYWdzLl93aGl0ZV9zcGFjZSA9IHY7IH0K
IAotICAgIHZvaWQgc2V0V29yZFNwYWNpbmcoaW50IHYpIHsgaW5oZXJpdGVkLmFjY2VzcygpLT5m
b250LnNldFdvcmRTcGFjaW5nKHYpOyB9Ci0gICAgdm9pZCBzZXRMZXR0ZXJTcGFjaW5nKGludCB2
KSB7IGluaGVyaXRlZC5hY2Nlc3MoKS0+Zm9udC5zZXRMZXR0ZXJTcGFjaW5nKHYpOyB9CisgICAg
dm9pZCBzZXRXb3JkU3BhY2luZyhpbnQpOworICAgIHZvaWQgc2V0TGV0dGVyU3BhY2luZyhpbnQp
OwogCiAgICAgdm9pZCBjbGVhckJhY2tncm91bmRMYXllcnMoKSB7IG1fYmFja2dyb3VuZC5hY2Nl
c3MoKS0+bV9iYWNrZ3JvdW5kID0gRmlsbExheWVyKEJhY2tncm91bmRGaWxsTGF5ZXIpOyB9CiAg
ICAgdm9pZCBpbmhlcml0QmFja2dyb3VuZExheWVycyhjb25zdCBGaWxsTGF5ZXImIHBhcmVudCkg
eyBtX2JhY2tncm91bmQuYWNjZXNzKCktPm1fYmFja2dyb3VuZCA9IHBhcmVudDsgfQpAQCAtMTE4
OSw4ICsxMTY3LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0TWFza1NpemUoTGVuZ3RoU2l6ZSBs
KSB7IFNFVF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEsIG1fbWFzay5tX3NpemVMZW5ndGgsIGwp
IH0KIAogICAgIHZvaWQgc2V0Qm9yZGVyQ29sbGFwc2UoRUJvcmRlckNvbGxhcHNlIGNvbGxhcHNl
KSB7IGluaGVyaXRlZF9mbGFncy5fYm9yZGVyX2NvbGxhcHNlID0gY29sbGFwc2U7IH0KLSAgICB2
b2lkIHNldEhvcml6b250YWxCb3JkZXJTcGFjaW5nKHNob3J0IHYpIHsgU0VUX1ZBUihpbmhlcml0
ZWQsIGhvcml6b250YWxfYm9yZGVyX3NwYWNpbmcsIHYpIH0KLSAgICB2b2lkIHNldFZlcnRpY2Fs
Qm9yZGVyU3BhY2luZyhzaG9ydCB2KSB7IFNFVF9WQVIoaW5oZXJpdGVkLCB2ZXJ0aWNhbF9ib3Jk
ZXJfc3BhY2luZywgdikgfQorICAgIHZvaWQgc2V0SG9yaXpvbnRhbEJvcmRlclNwYWNpbmcoc2hv
cnQpOworICAgIHZvaWQgc2V0VmVydGljYWxCb3JkZXJTcGFjaW5nKHNob3J0KTsKICAgICB2b2lk
IHNldEVtcHR5Q2VsbHMoRUVtcHR5Q2VsbCB2KSB7IGluaGVyaXRlZF9mbGFncy5fZW1wdHlfY2Vs
bHMgPSB2OyB9CiAgICAgdm9pZCBzZXRDYXB0aW9uU2lkZShFQ2FwdGlvblNpZGUgdikgeyBpbmhl
cml0ZWRfZmxhZ3MuX2NhcHRpb25fc2lkZSA9IHY7IH0KIApAQCAtMTIwMSw3ICsxMTc5LDcgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0Q291bnRlclJlc2V0KHNob3J0IHYpIHsgU0VUX1ZBUihyYXJl
Tm9uSW5oZXJpdGVkRGF0YSwgbV9jb3VudGVyUmVzZXQsIHYpIH0KIAogICAgIHZvaWQgc2V0TGlz
dFN0eWxlVHlwZShFTGlzdFN0eWxlVHlwZSB2KSB7IGluaGVyaXRlZF9mbGFncy5fbGlzdF9zdHls
ZV90eXBlID0gdjsgfQotICAgIHZvaWQgc2V0TGlzdFN0eWxlSW1hZ2UoUGFzc1JlZlB0cjxTdHls
ZUltYWdlPiB2KSB7IGlmIChpbmhlcml0ZWQtPmxpc3Rfc3R5bGVfaW1hZ2UgIT0gdikgaW5oZXJp
dGVkLmFjY2VzcygpLT5saXN0X3N0eWxlX2ltYWdlID0gdjsgfQorICAgIHZvaWQgc2V0TGlzdFN0
eWxlSW1hZ2UoUGFzc1JlZlB0cjxTdHlsZUltYWdlPik7CiAgICAgdm9pZCBzZXRMaXN0U3R5bGVQ
b3NpdGlvbihFTGlzdFN0eWxlUG9zaXRpb24gdikgeyBpbmhlcml0ZWRfZmxhZ3MuX2xpc3Rfc3R5
bGVfcG9zaXRpb24gPSB2OyB9CiAKICAgICB2b2lkIHJlc2V0TWFyZ2luKCkgeyBTRVRfVkFSKHN1
cnJvdW5kLCBtYXJnaW4sIExlbmd0aEJveChGaXhlZCkpIH0KQEAgLTE3MTMsNyArMTY5MSw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgaW5pdGlhbEZpbHRl
cigpIHsgREVGSU5FX1NUQVRJQ19MT0NBTChGaWx0ZXJPcGVyYXRpb25zLCBvcHMsICgpKTsgcmV0
dXJuIG9wczsgfQogI2VuZGlmCiBwcml2YXRlOgotICAgIHZvaWQgc2V0VmlzaXRlZExpbmtDb2xv
cihjb25zdCBDb2xvciYgdikgeyBTRVRfVkFSKGluaGVyaXRlZCwgdmlzaXRlZExpbmtDb2xvciwg
dikgfQorICAgIHZvaWQgc2V0VmlzaXRlZExpbmtDb2xvcihjb25zdCBDb2xvciYpOwogICAgIHZv
aWQgc2V0VmlzaXRlZExpbmtCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIHYpIHsgU0VUX1ZB
UihyYXJlTm9uSW5oZXJpdGVkRGF0YSwgbV92aXNpdGVkTGlua0JhY2tncm91bmRDb2xvciwgdikg
fQogICAgIHZvaWQgc2V0VmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IoY29uc3QgQ29sb3ImIHYp
IHsgU0VUX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YSwgbV92aXNpdGVkTGlua0JvcmRlckxlZnRD
b2xvciwgdikgfQogICAgIHZvaWQgc2V0VmlzaXRlZExpbmtCb3JkZXJSaWdodENvbG9yKGNvbnN0
IENvbG9yJiB2KSB7IFNFVF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEsIG1fdmlzaXRlZExpbmtC
b3JkZXJSaWdodENvbG9yLCB2KSB9CkBAIC0xNzU5LDEzICsxNzM3LDEzIEBAIHByaXZhdGU6CiAg
ICAgQ29sb3IgYm9yZGVyVG9wQ29sb3IoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVy
LnRvcCgpLmNvbG9yKCk7IH0KICAgICBDb2xvciBib3JkZXJCb3R0b21Db2xvcigpIGNvbnN0IHsg
cmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIuYm90dG9tKCkuY29sb3IoKTsgfQogICAgIENvbG9yIGJh
Y2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZC0+Y29sb3IoKTsgfQot
ICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5jb2xvcjsgfQorICAg
IENvbG9yIGNvbG9yKCkgY29uc3Q7CiAgICAgQ29sb3IgY29sdW1uUnVsZUNvbG9yKCkgY29uc3Qg
eyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVsdGlDb2wtPm1fcnVsZS5jb2xvcigp
OyB9CiAgICAgQ29sb3Igb3V0bGluZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5k
LT5vdXRsaW5lKCkuY29sb3IoKTsgfQogICAgIENvbG9yIHRleHRFbXBoYXNpc0NvbG9yKCkgY29u
c3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRFbXBoYXNpc0NvbG9yOyB9CiAgICAg
Q29sb3IgdGV4dEZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT50
ZXh0RmlsbENvbG9yOyB9CiAgICAgQ29sb3IgdGV4dFN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1
cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRTdHJva2VDb2xvcjsgfQotICAgIENvbG9yIHZpc2l0
ZWRMaW5rQ29sb3IoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPnZpc2l0ZWRMaW5rQ29sb3I7
IH0KKyAgICBDb2xvciB2aXNpdGVkTGlua0NvbG9yKCkgY29uc3Q7CiAgICAgQ29sb3IgdmlzaXRl
ZExpbmtCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0
YS0+bV92aXNpdGVkTGlua0JhY2tncm91bmRDb2xvcjsgfQogICAgIENvbG9yIHZpc2l0ZWRMaW5r
Qm9yZGVyTGVmdENvbG9yKCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1f
dmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3I7IH0KICAgICBDb2xvciB2aXNpdGVkTGlua0JvcmRl
clJpZ2h0Q29sb3IoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV92aXNp
dGVkTGlua0JvcmRlclJpZ2h0Q29sb3I7IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>