<?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>77783</bug_id>
          
          <creation_ts>2012-02-03 14:42:34 -0800</creation_ts>
          <short_desc>Convert RenderTheme over to LayoutUnits</short_desc>
          <delta_ts>2012-02-06 10:51:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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="Emil A Eklund">eae</reporter>
          <assigned_to name="Emil A Eklund">eae</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>leviw</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>549109</commentid>
    <comment_count>0</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-03 14:42:34 -0800</bug_when>
    <thetext>Change the RenderTheme classes to use the new layout abstraction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549140</commentid>
    <comment_count>1</comment_count>
      <attachid>125428</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-03 15:01:14 -0800</bug_when>
    <thetext>Created attachment 125428
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549143</commentid>
    <comment_count>2</comment_count>
      <attachid>125428</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-03 15:05:05 -0800</bug_when>
    <thetext>Comment on attachment 125428
Patch

LGTM.  This should have no fuctional change currently, correct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549144</commentid>
    <comment_count>3</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-02-03 15:08:01 -0800</bug_when>
    <thetext>&gt; This should have no fuctional change currently, correct?

Correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549401</commentid>
    <comment_count>4</comment_count>
      <attachid>125428</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-04 01:42:57 -0800</bug_when>
    <thetext>Comment on attachment 125428
Patch

Clearing flags on attachment: 125428

Committed r106734: &lt;http://trac.webkit.org/changeset/106734&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549402</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-04 01:43:02 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549441</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-02-04 09:52:31 -0800</bug_when>
    <thetext>&quot;the new layout abstraction&quot; might mean something to you, but it doesn&apos;t mean anything to me. Do you mean &quot;to the new layout units&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549446</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-04 10:56:24 -0800</bug_when>
    <thetext>This is all part of the effort to switch to a fixed-point layout.  See discussion in bug 60318 and various dependent bugs.  I believe there has also been discussion on #webkit.  Emil (eaa) and Levi (leviw) are the men behind the curtain and I&apos;m sure could explain at much greater lengths than I.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549571</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-02-05 01:35:03 -0800</bug_when>
    <thetext>After looking at the patch I could see what this was about. I could not tell from the too-obstuse bug title.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549654</commentid>
    <comment_count>9</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-02-05 17:45:32 -0800</bug_when>
    <thetext>We have the followings too:
 WebCore/platform/efl/RenderThemeEfl*
 WebCore/platform/gtk/RenderThemeGtk*
 WebCore/platform/qt/RenderThemeQt*
 WebCore/platform/wx/RenderThemeWx*</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125428</attachid>
            <date>2012-02-03 15:01:14 -0800</date>
            <delta_ts>2012-02-04 01:42:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77783-20120203150112.patch</filename>
            <type>text/plain</type>
            <size>34342</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjY5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDEyLTAyLTAzICBFbWlsIEEg
RWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKworICAgICAgICBDb252ZXJ0IFJlbmRlclRoZW1l
IG92ZXIgdG8gbmV3IGxheW91dCBhYnN0cmFjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc3ODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2UgdGhlIFJlbmRlclRoZW1lIGNsYXNzZXMgdG8g
dXNlIHRoZSBuZXcgbGF5b3V0IGFic3RyYWN0aW9uIGFzIGEKKyAgICAgICAgcGFydCBvZiB0aGUg
b25nb2luZyBjb252ZXJzaW9uIHdvcmsuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6dm9sdW1lU2xp
ZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OmJhc2VsaW5lUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVz
dFJlcGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjptZXRlclNpemVG
b3JCb3VuZHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5oOgorICAgICAgICAo
UmVuZGVyVGhlbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50Q2Fwc0xv
Y2tJbmRpY2F0b3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFj
Lmg6CisgICAgICAgIChSZW5kZXJUaGVtZUNocm9taXVtTWFjKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OnZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmNvbnZlcnRUb1BhaW50aW5nUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbik6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmg6CisgICAgICAgIChSZW5kZXJUaGVtZU1hYyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVNYWM6OmFkanVzdFJlcGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lTWFjOjppbmZsYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZU1hYzo6c2V0Q29udHJvbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6OnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
Om1ldGVyU2l6ZUZvckJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
cGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZU1hYzo6c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVNYWM6OnZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmJhc2VsaW5lUG9zaXRpb24pOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5oOgorICAgICAgICAoUmVuZGVyVGhlbWVTYWZhcmkp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6dm9s
dW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUaGVtZVdpbi5oOgorICAgICAgICAoUmVuZGVyVGhlbWVXaW4pOgorCiAyMDEyLTAyLTAzICBN
aWhuZWEgT3ZpZGVuaWUgIDxtaWhuZWFAYWRvYmUuY29tPgogCiAgICAgICAgIENyYXNoIGluIFJl
bmRlckZsb3dUaHJlYWQ6OnNldFJlZ2lvbkJveGVzUmVnaW9uU3R5bGUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkocmV2aXNpb24gMTA2NjgzKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQyLDcgKzI0Miw3IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKENTU1N0eWxlU2UK
ICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OnBhaW50KFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRo
ZW1lOjpwYWludChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBMYXlvdXRSZWN0JiByKQogewogICAgIC8vIElmIHBhaW50aW5nIGlzIGRpc2FibGVkLCBi
dXQgd2UgYXJlbid0IHVwZGF0aW5nIGNvbnRyb2wgdGludHMsIHRoZW4ganVzdCBiYWlsLgogICAg
IC8vIElmIHdlIGFyZSB1cGRhdGluZyBjb250cm9sIHRpbnRzLCBqdXN0IHNjaGVkdWxlIGEgcmVw
YWludCBpZiB0aGUgdGhlbWUgc3VwcG9ydHMgdGludGluZwpAQCAtNTAwLDEzICs1MDAsMTMgQEAg
U3RyaW5nIFJlbmRlclRoZW1lOjpmb3JtYXRNZWRpYUNvbnRyb2xzUgogICAgIHJldHVybiBmb3Jt
YXRNZWRpYUNvbnRyb2xzVGltZShjdXJyZW50VGltZSAtIGR1cmF0aW9uKTsKIH0KIAotSW50UG9p
bnQgUmVuZGVyVGhlbWU6OnZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKFJlbmRlckJv
eCogbXV0ZUJ1dHRvbkJveCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKK0xheW91dFBvaW50
IFJlbmRlclRoZW1lOjp2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihSZW5kZXJCb3gq
IG11dGVCdXR0b25Cb3gsIGNvbnN0IExheW91dFNpemUmIHNpemUpIGNvbnN0CiB7Ci0gICAgaW50
IHkgPSAtc2l6ZS5oZWlnaHQoKTsKKyAgICBMYXlvdXRVbml0IHkgPSAtc2l6ZS5oZWlnaHQoKTsK
ICAgICBGbG9hdFBvaW50IGFic1BvaW50ID0gbXV0ZUJ1dHRvbkJveC0+bG9jYWxUb0Fic29sdXRl
KEZsb2F0UG9pbnQobXV0ZUJ1dHRvbkJveC0+b2Zmc2V0TGVmdCgpLCB5KSwgdHJ1ZSwgdHJ1ZSk7
CiAgICAgaWYgKGFic1BvaW50LnkoKSA8IDApCiAgICAgICAgIHkgPSBtdXRlQnV0dG9uQm94LT5o
ZWlnaHQoKTsKLSAgICByZXR1cm4gSW50UG9pbnQoMCwgeSk7CisgICAgcmV0dXJuIExheW91dFBv
aW50KDAsIHkpOwogfQogCiAjZW5kaWYKQEAgLTYxMiw3ICs2MTIsNyBAQCBDb2xvciBSZW5kZXJU
aGVtZTo6cGxhdGZvcm1JbmFjdGl2ZUxpc3RCCiAgICAgcmV0dXJuIHBsYXRmb3JtSW5hY3RpdmVT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKTsKIH0KIAotaW50IFJlbmRlclRoZW1lOjpiYXNlbGlu
ZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK0xheW91dFVuaXQgUmVuZGVy
VGhlbWU6OmJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAogewog
ICAgIGlmICghby0+aXNCb3goKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC02NjIsNyArNjYyLDcg
QEAgYm9vbCBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKGNvbnN0IAogICAgIH0KIH0KIAot
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBv
LCBJbnRSZWN0JiByKQordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UmVwYWludFJlY3QoY29uc3Qg
UmVuZGVyT2JqZWN0KiBvLCBMYXlvdXRSZWN0JiByKQogewogI2lmIFVTRShORVdfVEhFTUUpCiAg
ICAgbV90aGVtZS0+aW5mbGF0ZUNvbnRyb2xQYWludFJlY3Qoby0+c3R5bGUoKS0+YXBwZWFyYW5j
ZSgpLCBjb250cm9sU3RhdGVzRm9yUmVuZGVyZXIobyksIHIsIG8tPnN0eWxlKCktPmVmZmVjdGl2
ZVpvb20oKSk7CkBAIC05MTksNyArOTE5LDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0TWV0
ZXJTdHlsZShDU1NTdAogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKLUlu
dFNpemUgUmVuZGVyVGhlbWU6Om1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlcios
IGNvbnN0IEludFJlY3QmIGJvdW5kcykgY29uc3QKK0xheW91dFNpemUgUmVuZGVyVGhlbWU6Om1l
dGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciosIGNvbnN0IExheW91dFJlY3QmIGJv
dW5kcykgY29uc3QKIHsKICAgICByZXR1cm4gYm91bmRzLnNpemUoKTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCShyZXZpc2lvbiAxMDY2ODMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkod29ya2luZyBjb3B5KQpAQCAtOTcs
NyArOTcsNyBAQCBwdWJsaWM6CiAgICAgLy8gQSBtZXRob2QgdG8gb2J0YWluIHRoZSBiYXNlbGlu
ZSBwb3NpdGlvbiBmb3IgYSAibGVhZiIgY29udHJvbC4gIFRoaXMgd2lsbCBvbmx5IGJlIHVzZWQg
aWYgYSBiYXNlbGluZQogICAgIC8vIHBvc2l0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGJ5IGV4
YW1pbmluZyBjaGlsZCBjb250ZW50LiBDaGVja2JveGVzIGFuZCByYWRpbyBidXR0b25zIGFyZSBl
eGFtcGxlcyBvZgogICAgIC8vIGNvbnRyb2xzIHRoYXQgbmVlZCB0byBkbyB0aGlzLgotICAgIHZp
cnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Cisg
ICAgdmlydHVhbCBMYXlvdXRVbml0IGJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0
KikgY29uc3Q7CiAKICAgICAvLyBBIG1ldGhvZCBmb3IgYXNraW5nIGlmIGEgY29udHJvbCBpcyBh
IGNvbnRhaW5lciBvciBub3QuICBMZWFmIGNvbnRyb2xzIGhhdmUgdG8gaGF2ZSBzb21lIHNwZWNp
YWwgYmVoYXZpb3IgKGxpa2UKICAgICAvLyB0aGUgYmFzZWxpbmUgcG9zaXRpb24gQVBJIGFib3Zl
KS4KQEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBTb21lIGNvbnRyb2xzIG1h
eSBzcGlsbCBvdXQgb2YgdGhlaXIgY29udGFpbmVycyAoZS5nLiwgdGhlIGNoZWNrIG9uIGFuIE9T
IFggY2hlY2tib3gpLiAgV2hlbiB0aGVzZSBjb250cm9scyByZXBhaW50LAogICAgIC8vIHRoZSB0
aGVtZSBuZWVkcyB0byBjb21tdW5pY2F0ZSB0aGlzIGluZmxhdGVkIHJlY3QgdG8gdGhlIGVuZ2lu
ZSBzbyB0aGF0IGl0IGNhbiBpbnZhbGlkYXRlIHRoZSB3aG9sZSBjb250cm9sLgotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqLCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCos
IExheW91dFJlY3QmKTsKIAogICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuZXZlciBh
IHJlbGV2YW50IHN0YXRlIGNoYW5nZXMgb24gYSBwYXJ0aWN1bGFyIHRoZW1lZCBvYmplY3QsIGUu
Zy4sIHRoZSBtb3VzZSBiZWNvbWVzIHByZXNzZWQKICAgICAvLyBvciBhIGNvbnRyb2wgYmVjb21l
cyBkaXNhYmxlZC4KQEAgLTE3Niw3ICsxNzYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTY3Jv
bGxiYXJDb250cm9sU2l6ZSBzY3JvbGxiYXJDb250cm9sU2l6ZUZvclBhcnQoQ29udHJvbFBhcnQp
IHsgcmV0dXJuIFJlZ3VsYXJTY3JvbGxiYXI7IH0KIAogICAgIC8vIE1ldGhvZCBmb3IgcGFpbnRp
bmcgdGhlIGNhcHMgbG9jayBpbmRpY2F0b3IKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9j
a0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
JikgeyByZXR1cm4gMDsgfTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRv
cihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRSZWN0JikgeyBy
ZXR1cm4gMDsgfTsKIAogI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCiAgICAgLy8gUmV0dXJucyB0
aGUgcmVwZWF0IGludGVydmFsIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIu
CkBAIC0xOTgsMTEgKzE5OCwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgZm9ybWF0
TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0
aW9uKSBjb25zdDsKICAgICAKICAgICAvLyBSZXR1cm5zIHRoZSBtZWRpYSB2b2x1bWUgc2xpZGVy
IGNvbnRhaW5lcidzIG9mZnNldCBmcm9tIHRoZSBtdXRlIGJ1dHRvbi4KLSAgICB2aXJ0dWFsIElu
dFBvaW50IHZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKFJlbmRlckJveCosIGNvbnN0
IEludFNpemUmKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFBvaW50IHZvbHVtZVNsaWRlck9m
ZnNldEZyb21NdXRlQnV0dG9uKFJlbmRlckJveCosIGNvbnN0IExheW91dFNpemUmKSBjb25zdDsK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FVEVSX1RBRykKLSAgICB2aXJ0dWFsIEludFNpemUgbWV0
ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiwgY29uc3QgSW50UmVjdCYpIGNvbnN0
OworICAgIHZpcnR1YWwgTGF5b3V0U2l6ZSBtZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVy
TWV0ZXIqLCBjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHN1cHBv
cnRzTWV0ZXIoQ29udHJvbFBhcnQpIGNvbnN0OwogI2VuZGlmCiAgICAgCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLmgJKHJldmlz
aW9uIDEwNjY4MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyKFJlbmRlck9iamVj
dCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNs
aWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKLSAgICB2aXJ0dWFsIEludFBvaW50IHZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9u
KFJlbmRlckJveCosIGNvbnN0IEludFNpemUmKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFBv
aW50IHZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKFJlbmRlckJveCosIGNvbnN0IExh
eW91dFNpemUmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgdXNlc01lZGlhQ29udHJvbFN0YXR1
c0Rpc3BsYXkoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBoYXNPd25EaXNh
YmxlZFN0YXRlSGFuZGxpbmdGb3IoQ29udHJvbFBhcnQpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
ICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21p
dW1NYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lQ2hyb21pdW1NYWMubW0JKHJldmlzaW9uIDEwNjY4MykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEs
NyArMjExLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhUwogICAg
IHJldHVybiBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06OnBhaW50TWVkaWFDb250cm9sc1Bh
cnQoTWVkaWFTbGlkZXJUaHVtYiwgb2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwogfQogCi1JbnRQ
b2ludCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjp2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1
dHRvbihSZW5kZXJCb3gqIG11dGVCdXR0b25Cb3gsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0
CitMYXlvdXRQb2ludCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjp2b2x1bWVTbGlkZXJPZmZzZXRG
cm9tTXV0ZUJ1dHRvbihSZW5kZXJCb3gqIG11dGVCdXR0b25Cb3gsIGNvbnN0IExheW91dFNpemUm
IHNpemUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjp2b2x1bWVTbGlkZXJPZmZz
ZXRGcm9tTXV0ZUJ1dHRvbihtdXRlQnV0dG9uQm94LCBzaXplKTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAko
cmV2aXNpb24gMTA2NjgzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDEwICsyNjAsMTAgQEAgdm9p
ZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0U2VhcgogICAgIHN0eWxlLT5zZXRIZWln
aHQoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7CiB9CiAKLUludFJlY3QgUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OmNvbnZlcnRUb1BhaW50aW5nUmVjdChSZW5kZXJPYmplY3QqIGlu
cHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCogcGFydFJlbmRlcmVyLCBJbnRSZWN0IHBh
cnRSZWN0LCBjb25zdCBJbnRSZWN0JiBsb2NhbE9mZnNldCkgY29uc3QKK0xheW91dFJlY3QgUmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWE6OmNvbnZlcnRUb1BhaW50aW5nUmVjdChSZW5kZXJPYmplY3Qq
IGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCogcGFydFJlbmRlcmVyLCBMYXlvdXRS
ZWN0IHBhcnRSZWN0LCBjb25zdCBJbnRSZWN0JiBsb2NhbE9mZnNldCkgY29uc3QKIHsKICAgICAv
LyBDb21wdXRlIGFuIG9mZnNldCBiZXR3ZWVuIHRoZSBwYXJ0IHJlbmRlcmVyIGFuZCB0aGUgaW5w
dXQgcmVuZGVyZXIuCi0gICAgSW50U2l6ZSBvZmZzZXRGcm9tSW5wdXRSZW5kZXJlciA9IC0ocGFy
dFJlbmRlcmVyLT5vZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIoaW5wdXRSZW5kZXJlcikpOwor
ICAgIExheW91dFNpemUgb2Zmc2V0RnJvbUlucHV0UmVuZGVyZXIgPSAtKHBhcnRSZW5kZXJlci0+
b2Zmc2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyKGlucHV0UmVuZGVyZXIpKTsKICAgICAvLyBNb3Zl
IHRoZSByZWN0IGludG8gcGFydFJlbmRlcmVyJ3MgY29vcmRzLgogICAgIHBhcnRSZWN0Lm1vdmUo
b2Zmc2V0RnJvbUlucHV0UmVuZGVyZXIpOwogICAgIC8vIEFjY291bnQgZm9yIHRoZSBsb2NhbCBk
cmF3aW5nIG9mZnNldC4KQEAgLTI3OSwxNyArMjc5LDE3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OnBhaW50U2VhcmMKICAgICBpZiAoIWlucHV0LT5yZW5kZXJlcigpLT5pc0JveCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgUmVuZGVyQm94KiBpbnB1dFJlbmRlckJveCA9
IHRvUmVuZGVyQm94KGlucHV0LT5yZW5kZXJlcigpKTsKLSAgICBJbnRSZWN0IGlucHV0Q29udGVu
dEJveCA9IGlucHV0UmVuZGVyQm94LT5jb250ZW50Qm94UmVjdCgpOworICAgIExheW91dFJlY3Qg
aW5wdXRDb250ZW50Qm94ID0gaW5wdXRSZW5kZXJCb3gtPmNvbnRlbnRCb3hSZWN0KCk7CiAKICAg
ICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBidXR0b24gc3RheXMgc3F1YXJlIGFuZCB3aWxsIGZp
dCBpbiBpdHMgcGFyZW50J3MgYm94LgotICAgIGludCBjYW5jZWxCdXR0b25TaXplID0gc3RkOjpt
aW4oaW5wdXRDb250ZW50Qm94LndpZHRoKCksIHN0ZDo6bWluKGlucHV0Q29udGVudEJveC5oZWln
aHQoKSwgci5oZWlnaHQoKSkpOworICAgIExheW91dFVuaXQgY2FuY2VsQnV0dG9uU2l6ZSA9IHN0
ZDo6bWluKGlucHV0Q29udGVudEJveC53aWR0aCgpLCBzdGQ6Om1pbjxMYXlvdXRVbml0PihpbnB1
dENvbnRlbnRCb3guaGVpZ2h0KCksIHIuaGVpZ2h0KCkpKTsKICAgICAvLyBDYWxjdWxhdGUgY2Fu
Y2VsIGJ1dHRvbidzIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSBpbnB1dCBlbGVtZW50Lgog
ICAgIC8vIENlbnRlciB0aGUgYnV0dG9uIHZlcnRpY2FsbHkuICBSb3VuZCB1cCB0aG91Z2gsIHNv
IGlmIGl0IGhhcyB0byBiZSBvbmUgcGl4ZWwgb2ZmLWNlbnRlciwgaXQgd2lsbAogICAgIC8vIGJl
IG9uZSBwaXhlbCBjbG9zZXIgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZmllbGQuICBUaGlzIHRlbmRz
IHRvIGxvb2sgYmV0dGVyIHdpdGggdGhlIHRleHQuCi0gICAgSW50UmVjdCBjYW5jZWxCdXR0b25S
ZWN0KGNhbmNlbEJ1dHRvbk9iamVjdC0+b2Zmc2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyKGlucHV0
UmVuZGVyQm94KS53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dENv
bnRlbnRCb3gueSgpICsgKGlucHV0Q29udGVudEJveC5oZWlnaHQoKSAtIGNhbmNlbEJ1dHRvblNp
emUgKyAxKSAvIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvblNp
emUsIGNhbmNlbEJ1dHRvblNpemUpOwotICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0gY29udmVy
dFRvUGFpbnRpbmdSZWN0KGlucHV0UmVuZGVyQm94LCBjYW5jZWxCdXR0b25PYmplY3QsIGNhbmNl
bEJ1dHRvblJlY3QsIHIpOworICAgIExheW91dFJlY3QgY2FuY2VsQnV0dG9uUmVjdChjYW5jZWxC
dXR0b25PYmplY3QtPm9mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcihpbnB1dFJlbmRlckJveCku
d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDb250ZW50Qm94
LnkoKSArIChpbnB1dENvbnRlbnRCb3guaGVpZ2h0KCkgLSBjYW5jZWxCdXR0b25TaXplICsgMSkg
LyAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b25TaXplLCBj
YW5jZWxCdXR0b25TaXplKTsKKyAgICBMYXlvdXRSZWN0IHBhaW50aW5nUmVjdCA9IGNvbnZlcnRU
b1BhaW50aW5nUmVjdChpbnB1dFJlbmRlckJveCwgY2FuY2VsQnV0dG9uT2JqZWN0LCBjYW5jZWxC
dXR0b25SZWN0LCByKTsKIAogICAgIHN0YXRpYyBJbWFnZSogY2FuY2VsSW1hZ2UgPSBJbWFnZTo6
bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaENhbmNlbCIpLmxlYWtSZWYoKTsKICAgICBzdGF0
aWMgSW1hZ2UqIGNhbmNlbFByZXNzZWRJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJj
ZSgic2VhcmNoQ2FuY2VsUHJlc3NlZCIpLmxlYWtSZWYoKTsKQEAgLTMyMiwxNyArMzIyLDE3IEBA
IGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmMKICAgICBpZiAoIWlucHV0
LT5yZW5kZXJlcigpLT5pc0JveCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgUmVuZGVy
Qm94KiBpbnB1dFJlbmRlckJveCA9IHRvUmVuZGVyQm94KGlucHV0LT5yZW5kZXJlcigpKTsKLSAg
ICBJbnRSZWN0IGlucHV0Q29udGVudEJveCA9IGlucHV0UmVuZGVyQm94LT5jb250ZW50Qm94UmVj
dCgpOworICAgIExheW91dFJlY3QgaW5wdXRDb250ZW50Qm94ID0gaW5wdXRSZW5kZXJCb3gtPmNv
bnRlbnRCb3hSZWN0KCk7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBkZWNvcmF0aW9u
IHN0YXlzIHNxdWFyZSBhbmQgd2lsbCBmaXQgaW4gaXRzIHBhcmVudCdzIGJveC4KLSAgICBpbnQg
bWFnbmlmaWVyU2l6ZSA9IHN0ZDo6bWluKGlucHV0Q29udGVudEJveC53aWR0aCgpLCBzdGQ6Om1p
bihpbnB1dENvbnRlbnRCb3guaGVpZ2h0KCksIHIuaGVpZ2h0KCkpKTsKKyAgICBMYXlvdXRVbml0
IG1hZ25pZmllclNpemUgPSBzdGQ6Om1pbihpbnB1dENvbnRlbnRCb3gud2lkdGgoKSwgc3RkOjpt
aW48TGF5b3V0VW5pdD4oaW5wdXRDb250ZW50Qm94LmhlaWdodCgpLCByLmhlaWdodCgpKSk7CiAg
ICAgLy8gQ2FsY3VsYXRlIGRlY29yYXRpb24ncyBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUg
aW5wdXQgZWxlbWVudC4KICAgICAvLyBDZW50ZXIgdGhlIGRlY29yYXRpb24gdmVydGljYWxseS4g
IFJvdW5kIHVwIHRob3VnaCwgc28gaWYgaXQgaGFzIHRvIGJlIG9uZSBwaXhlbCBvZmYtY2VudGVy
LCBpdCB3aWxsCiAgICAgLy8gYmUgb25lIHBpeGVsIGNsb3NlciB0byB0aGUgYm90dG9tIG9mIHRo
ZSBmaWVsZC4gIFRoaXMgdGVuZHMgdG8gbG9vayBiZXR0ZXIgd2l0aCB0aGUgdGV4dC4KLSAgICBJ
bnRSZWN0IG1hZ25pZmllclJlY3QobWFnbmlmaWVyT2JqZWN0LT5vZmZzZXRGcm9tQW5jZXN0b3JD
b250YWluZXIoaW5wdXRSZW5kZXJCb3gpLndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIGlucHV0Q29udGVudEJveC55KCkgKyAoaW5wdXRDb250ZW50Qm94LmhlaWdodCgpIC0gbWFn
bmlmaWVyU2l6ZSArIDEpIC8gMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbWFnbmlmaWVy
U2l6ZSwgbWFnbmlmaWVyU2l6ZSk7Ci0gICAgSW50UmVjdCBwYWludGluZ1JlY3QgPSBjb252ZXJ0
VG9QYWludGluZ1JlY3QoaW5wdXRSZW5kZXJCb3gsIG1hZ25pZmllck9iamVjdCwgbWFnbmlmaWVy
UmVjdCwgcik7CisgICAgTGF5b3V0UmVjdCBtYWduaWZpZXJSZWN0KG1hZ25pZmllck9iamVjdC0+
b2Zmc2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyKGlucHV0UmVuZGVyQm94KS53aWR0aCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dENvbnRlbnRCb3gueSgpICsgKGlucHV0Q29u
dGVudEJveC5oZWlnaHQoKSAtIG1hZ25pZmllclNpemUgKyAxKSAvIDIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hZ25pZmllclNpemUsIG1hZ25pZmllclNpemUpOworICAgIExheW91
dFJlY3QgcGFpbnRpbmdSZWN0ID0gY29udmVydFRvUGFpbnRpbmdSZWN0KGlucHV0UmVuZGVyQm94
LCBtYWduaWZpZXJPYmplY3QsIG1hZ25pZmllclJlY3QsIHIpOwogCiAgICAgc3RhdGljIEltYWdl
KiBtYWduaWZpZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoTWFn
bmlmaWVyIikubGVha1JlZigpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3SW1hZ2UobWFn
bmlmaWVySW1hZ2UsIG1hZ25pZmllck9iamVjdC0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBwYWlu
dGluZ1JlY3QpOwpAQCAtMzU3LDE1ICszNTcsMTUgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVt
U2tpYTo6cGFpbnRTZWFyYwogICAgIGlmICghaW5wdXQtPnJlbmRlcmVyKCktPmlzQm94KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBSZW5kZXJCb3gqIGlucHV0UmVuZGVyQm94ID0gdG9S
ZW5kZXJCb3goaW5wdXQtPnJlbmRlcmVyKCkpOwotICAgIEludFJlY3QgaW5wdXRDb250ZW50Qm94
ID0gaW5wdXRSZW5kZXJCb3gtPmNvbnRlbnRCb3hSZWN0KCk7CisgICAgTGF5b3V0UmVjdCBpbnB1
dENvbnRlbnRCb3ggPSBpbnB1dFJlbmRlckJveC0+Y29udGVudEJveFJlY3QoKTsKIAogICAgIC8v
IE1ha2Ugc3VyZSB0aGUgc2NhbGVkIGRlY29yYXRpb24gd2lsbCBmaXQgaW4gaXRzIHBhcmVudCdz
IGJveC4KLSAgICBpbnQgbWFnbmlmaWVySGVpZ2h0ID0gc3RkOjptaW4oaW5wdXRDb250ZW50Qm94
LmhlaWdodCgpLCByLmhlaWdodCgpKTsKLSAgICBpbnQgbWFnbmlmaWVyV2lkdGggPSBzdGQ6Om1p
bihpbnB1dENvbnRlbnRCb3gud2lkdGgoKSwgc3RhdGljX2Nhc3Q8aW50PihtYWduaWZpZXJIZWln
aHQgKiBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uV2lkdGggLyBkZWZhdWx0U2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUpKTsKLSAgICBJbnRSZWN0IG1hZ25pZmllclJlY3Qo
bWFnbmlmaWVyT2JqZWN0LT5vZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIoaW5wdXRSZW5kZXJC
b3gpLndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0Q29udGVudEJveC55
KCkgKyAoaW5wdXRDb250ZW50Qm94LmhlaWdodCgpIC0gbWFnbmlmaWVySGVpZ2h0ICsgMSkgLyAy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICBtYWduaWZpZXJXaWR0aCwgbWFnbmlmaWVySGVp
Z2h0KTsKLSAgICBJbnRSZWN0IHBhaW50aW5nUmVjdCA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChp
bnB1dFJlbmRlckJveCwgbWFnbmlmaWVyT2JqZWN0LCBtYWduaWZpZXJSZWN0LCByKTsKKyAgICBM
YXlvdXRVbml0IG1hZ25pZmllckhlaWdodCA9IHN0ZDo6bWluPExheW91dFVuaXQ+KGlucHV0Q29u
dGVudEJveC5oZWlnaHQoKSwgci5oZWlnaHQoKSk7CisgICAgTGF5b3V0VW5pdCBtYWduaWZpZXJX
aWR0aCA9IHN0ZDo6bWluPExheW91dFVuaXQ+KGlucHV0Q29udGVudEJveC53aWR0aCgpLCBtYWdu
aWZpZXJIZWlnaHQgKiBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uV2lkdGggLyBkZWZh
dWx0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUpOworICAgIExheW91dFJlY3QgbWFn
bmlmaWVyUmVjdChtYWduaWZpZXJPYmplY3QtPm9mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcihp
bnB1dFJlbmRlckJveCkud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5w
dXRDb250ZW50Qm94LnkoKSArIChpbnB1dENvbnRlbnRCb3guaGVpZ2h0KCkgLSBtYWduaWZpZXJI
ZWlnaHQgKyAxKSAvIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZ25pZmllcldp
ZHRoLCBtYWduaWZpZXJIZWlnaHQpOworICAgIExheW91dFJlY3QgcGFpbnRpbmdSZWN0ID0gY29u
dmVydFRvUGFpbnRpbmdSZWN0KGlucHV0UmVuZGVyQm94LCBtYWduaWZpZXJPYmplY3QsIG1hZ25p
ZmllclJlY3QsIHIpOwogCiAgICAgc3RhdGljIEltYWdlKiBtYWduaWZpZXJJbWFnZSA9IEltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoTWFnbmlmaWVyUmVzdWx0cyIpLmxlYWtSZWYo
KTsKICAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0ltYWdlKG1hZ25pZmllckltYWdlLCBtYWdu
aWZpZXJPYmplY3QtPnN0eWxlKCktPmNvbG9yU3BhY2UoKSwgcGFpbnRpbmdSZWN0KTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tp
YS5oCShyZXZpc2lvbiAxMDY2ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWEuaAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDcgKzE1Nyw3IEBAIHBy
aXZhdGU6CiAKICAgICBpbnQgbWVudUxpc3RJbnRlcm5hbFBhZGRpbmcoUmVuZGVyU3R5bGUqLCBp
bnQgcGFkZGluZ1R5cGUpIGNvbnN0OwogICAgIGJvb2wgcGFpbnRNZWRpYUJ1dHRvbkludGVybmFs
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmLCBJbWFnZSopOwotICAgIEludFJlY3Qg
Y29udmVydFRvUGFpbnRpbmdSZWN0KFJlbmRlck9iamVjdCogaW5wdXRSZW5kZXJlciwgY29uc3Qg
UmVuZGVyT2JqZWN0KiBwYXJ0UmVuZGVyZXIsIEludFJlY3QgcGFydFJlY3QsIGNvbnN0IEludFJl
Y3QmIGxvY2FsT2Zmc2V0KSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IGNvbnZlcnRUb1BhaW50aW5n
UmVjdChSZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCogcGFy
dFJlbmRlcmVyLCBMYXlvdXRSZWN0IHBhcnRSZWN0LCBjb25zdCBJbnRSZWN0JiBsb2NhbE9mZnNl
dCkgY29uc3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAkocmV2aXNpb24gMTA2NjgzKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIC8vIEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlm
IGFueSBjb250cm9sIHRpbnRpbmcgaXMgc3VwcG9ydGVkIGF0IGFsbC4KICAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNDb250cm9sVGludHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiwgSW50UmVj
dCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmpl
Y3QqLCBMYXlvdXRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNv
bnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQm9yZGVyRGF0YSYsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBGaWxsTGF5ZXImLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENv
bG9yKSBjb25zdDsKQEAgLTc0LDEyICs3NCwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQg
cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqKSBjb25zdDsKICAgICB2aXJ0dWFs
IGludCBwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSopIGNvbnN0OwogICAg
IAotICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRDYXBzTG9ja0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBMYXlvdXRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIGJvb2wgcG9wc01lbnVCeUFycm93S2V5cygp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KIAogI2lmIEVOQUJMRShNRVRFUl9UQUcp
Ci0gICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRl
ciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFNpemUgbWV0ZXJT
aXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiwgY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1ldGVyKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNNZXRlcihD
b250cm9sUGFydCkgY29uc3Q7CiAjZW5kaWYKQEAgLTE2OSw3ICsxNjksNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgdmlydHVhbCBib29sIHVzZXNNZWRpYUNvbnRyb2xTdGF0dXNEaXNwbGF5KCk7CiAgICAg
dmlydHVhbCBib29sIHVzZXNNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXIoKSBjb25zdDsKICAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqKSBjb25z
dDsKLSAgICB2aXJ0dWFsIEludFBvaW50IHZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9u
KFJlbmRlckJveCosIGNvbnN0IEludFNpemUmKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFBv
aW50IHZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKFJlbmRlckJveCosIGNvbnN0IExh
eW91dFNpemUmKSBjb25zdDsKICNlbmRpZgogICAgIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRT
aG93UGxhY2Vob2xkZXJXaGVuRm9jdXNlZCgpIGNvbnN0OwpAQCAtMTc3LDE0ICsxNzcsMTQgQEAg
cHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JX
aWR0aChjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBjb25zdCBGb250JiwgaW50IHdp
ZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKTsKIAotICAgIEludFJlY3QgaW5mbGF0ZVJl
Y3QoY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBjb25zdCBpbnQqIG1hcmdpbnMsIGZs
b2F0IHpvb21MZXZlbCA9IDEuMGYpIGNvbnN0OworICAgIExheW91dFJlY3QgaW5mbGF0ZVJlY3Qo
Y29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IEludFNpemUmLCBjb25zdCBpbnQqIG1hcmdpbnMsIGZs
b2F0IHpvb21MZXZlbCA9IDEuMGYpIGNvbnN0OwogCiAgICAgRmxvYXRSZWN0IGNvbnZlcnRUb1Bh
aW50aW5nUmVjdChjb25zdCBSZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRl
ck9iamVjdCogcGFydFJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIGlucHV0UmVjdCwgY29uc3Qg
SW50UmVjdCYgcikgY29uc3Q7CiAgICAgCiAgICAgLy8gR2V0IHRoZSBjb250cm9sIHNpemUgYmFz
ZWQgb2ZmIHRoZSBmb250LiAgVXNlZCBieSBzb21lIG9mIHRoZSBjb250cm9scyAobGlrZSBidXR0
b25zKS4KICAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplRm9yRm9udChSZW5kZXJTdHlsZSop
IGNvbnN0OwogICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemVGb3JTeXN0ZW1Gb250KFJlbmRl
clN0eWxlKikgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb250cm9sU2l6ZShOU0NlbGwqLCBjb25zdCBJ
bnRTaXplKiBzaXplcywgY29uc3QgSW50U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxldmVsID0g
MS4wZik7CisgICAgdm9pZCBzZXRDb250cm9sU2l6ZShOU0NlbGwqLCBjb25zdCBJbnRTaXplKiBz
aXplcywgY29uc3QgTGF5b3V0U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxldmVsID0gMS4wZik7
CiAgICAgdm9pZCBzZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUqLCBjb25zdCBJbnRTaXplKiBz
aXplcykgY29uc3Q7CiAgICAgSW50U2l6ZSBzaXplRm9yRm9udChSZW5kZXJTdHlsZSosIGNvbnN0
IEludFNpemUqIHNpemVzKSBjb25zdDsKICAgICBJbnRTaXplIHNpemVGb3JTeXN0ZW1Gb250KFJl
bmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwpAQCAtMTk5LDcgKzE5OSw3
IEBAIHByaXZhdGU6CiAKICAgICAvLyBIZWxwZXJzIGZvciBhZGp1c3RpbmcgYXBwZWFyYW5jZSBh
bmQgZm9yIHBhaW50aW5nCiAKLSAgICB2b2lkIHNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKGNvbnN0
IFJlbmRlck9iamVjdCosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHNldFBvcHVwQnV0dG9u
Q2VsbFN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IExheW91dFJlY3QmKTsKICAgICBj
b25zdCBJbnRTaXplKiBwb3B1cEJ1dHRvblNpemVzKCkgY29uc3Q7CiAgICAgY29uc3QgaW50KiBw
b3B1cEJ1dHRvbk1hcmdpbnMoKSBjb25zdDsKICAgICBjb25zdCBpbnQqIHBvcHVwQnV0dG9uUGFk
ZGluZyhOU0NvbnRyb2xTaXplKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDEwNjY4MykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTAwLDcgKzUw
MCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OmlzQ29udHJvbFN0eWxlZChjb24KICAgICByZXR1
cm4gUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChzdHlsZSwgYm9yZGVyLCBiYWNrZ3JvdW5k
LCBiYWNrZ3JvdW5kQ29sb3IpOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RSZXBh
aW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIG8sIEludFJlY3QmIHIpCit2b2lkIFJlbmRlclRo
ZW1lTWFjOjphZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIG8sIExheW91dFJl
Y3QmIHIpCiB7CiAgICAgQ29udHJvbFBhcnQgcGFydCA9IG8tPnN0eWxlKCktPmFwcGVhcmFuY2Uo
KTsKICAgICAKQEAgLTUzMSwxMyArNTMxLDEzIEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVz
dFJlcGFpbnRSZWN0KGMKICAgICB9CiB9CiAKLUludFJlY3QgUmVuZGVyVGhlbWVNYWM6OmluZmxh
dGVSZWN0KGNvbnN0IEludFJlY3QmIHIsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IGludCog
bWFyZ2lucywgZmxvYXQgem9vbUxldmVsKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJUaGVtZU1h
Yzo6aW5mbGF0ZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgciwgY29uc3QgSW50U2l6ZSYgc2l6ZSwg
Y29uc3QgaW50KiBtYXJnaW5zLCBmbG9hdCB6b29tTGV2ZWwpIGNvbnN0CiB7CiAgICAgLy8gT25s
eSBkbyB0aGUgaW5mbGF0aW9uIGlmIHRoZSBhdmFpbGFibGUgd2lkdGgvaGVpZ2h0IGFyZSB0b28g
c21hbGwuICBPdGhlcndpc2UgdHJ5IHRvCiAgICAgLy8gZml0IHRoZSBnbG93L2NoZWNrIHNwYWNl
IGludG8gdGhlIGF2YWlsYWJsZSBib3gncyB3aWR0aC9oZWlnaHQuCi0gICAgaW50IHdpZHRoRGVs
dGEgPSByLndpZHRoKCkgLSAoc2l6ZS53aWR0aCgpICsgbWFyZ2luc1tsZWZ0TWFyZ2luXSAqIHpv
b21MZXZlbCArIG1hcmdpbnNbcmlnaHRNYXJnaW5dICogem9vbUxldmVsKTsKLSAgICBpbnQgaGVp
Z2h0RGVsdGEgPSByLmhlaWdodCgpIC0gKHNpemUuaGVpZ2h0KCkgKyBtYXJnaW5zW3RvcE1hcmdp
bl0gKiB6b29tTGV2ZWwgKyBtYXJnaW5zW2JvdHRvbU1hcmdpbl0gKiB6b29tTGV2ZWwpOwotICAg
IEludFJlY3QgcmVzdWx0KHIpOworICAgIExheW91dFVuaXQgd2lkdGhEZWx0YSA9IHIud2lkdGgo
KSAtIChzaXplLndpZHRoKCkgKyBtYXJnaW5zW2xlZnRNYXJnaW5dICogem9vbUxldmVsICsgbWFy
Z2luc1tyaWdodE1hcmdpbl0gKiB6b29tTGV2ZWwpOworICAgIExheW91dFVuaXQgaGVpZ2h0RGVs
dGEgPSByLmhlaWdodCgpIC0gKHNpemUuaGVpZ2h0KCkgKyBtYXJnaW5zW3RvcE1hcmdpbl0gKiB6
b29tTGV2ZWwgKyBtYXJnaW5zW2JvdHRvbU1hcmdpbl0gKiB6b29tTGV2ZWwpOworICAgIExheW91
dFJlY3QgcmVzdWx0KHIpOwogICAgIGlmICh3aWR0aERlbHRhIDwgMCkgewogICAgICAgICByZXN1
bHQuc2V0WChyZXN1bHQueCgpIC0gbWFyZ2luc1tsZWZ0TWFyZ2luXSAqIHpvb21MZXZlbCk7CiAg
ICAgICAgIHJlc3VsdC5zZXRXaWR0aChyZXN1bHQud2lkdGgoKSAtIHdpZHRoRGVsdGEpOwpAQCAt
NjM5LDE0ICs2MzksMTQgQEAgTlNDb250cm9sU2l6ZSBSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFNp
egogICAgIHJldHVybiBOU01pbmlDb250cm9sU2l6ZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1h
Yzo6c2V0Q29udHJvbFNpemUoTlNDZWxsKiBjZWxsLCBjb25zdCBJbnRTaXplKiBzaXplcywgY29u
c3QgSW50U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxldmVsKQordm9pZCBSZW5kZXJUaGVtZU1h
Yzo6c2V0Q29udHJvbFNpemUoTlNDZWxsKiBjZWxsLCBjb25zdCBJbnRTaXplKiBzaXplcywgY29u
c3QgTGF5b3V0U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxldmVsKQogewogICAgIE5TQ29udHJv
bFNpemUgc2l6ZTsKLSAgICBpZiAobWluU2l6ZS53aWR0aCgpID49IHN0YXRpY19jYXN0PGludD4o
c2l6ZXNbTlNSZWd1bGFyQ29udHJvbFNpemVdLndpZHRoKCkgKiB6b29tTGV2ZWwpICYmCi0gICAg
ICAgIG1pblNpemUuaGVpZ2h0KCkgPj0gc3RhdGljX2Nhc3Q8aW50PihzaXplc1tOU1JlZ3VsYXJD
b250cm9sU2l6ZV0uaGVpZ2h0KCkgKiB6b29tTGV2ZWwpKQorICAgIGlmIChtaW5TaXplLndpZHRo
KCkgPj0gc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oc2l6ZXNbTlNSZWd1bGFyQ29udHJvbFNpemVd
LndpZHRoKCkgKiB6b29tTGV2ZWwpICYmCisgICAgICAgIG1pblNpemUuaGVpZ2h0KCkgPj0gc3Rh
dGljX2Nhc3Q8TGF5b3V0VW5pdD4oc2l6ZXNbTlNSZWd1bGFyQ29udHJvbFNpemVdLmhlaWdodCgp
ICogem9vbUxldmVsKSkKICAgICAgICAgc2l6ZSA9IE5TUmVndWxhckNvbnRyb2xTaXplOwotICAg
IGVsc2UgaWYgKG1pblNpemUud2lkdGgoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KHNpemVzW05TU21h
bGxDb250cm9sU2l6ZV0ud2lkdGgoKSAqIHpvb21MZXZlbCkgJiYKLSAgICAgICAgICAgICBtaW5T
aXplLmhlaWdodCgpID49IHN0YXRpY19jYXN0PGludD4oc2l6ZXNbTlNTbWFsbENvbnRyb2xTaXpl
XS5oZWlnaHQoKSAqIHpvb21MZXZlbCkpCisgICAgZWxzZSBpZiAobWluU2l6ZS53aWR0aCgpID49
IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KHNpemVzW05TU21hbGxDb250cm9sU2l6ZV0ud2lkdGgo
KSAqIHpvb21MZXZlbCkgJiYKKyAgICAgICAgICAgICBtaW5TaXplLmhlaWdodCgpID49IHN0YXRp
Y19jYXN0PExheW91dFVuaXQ+KHNpemVzW05TU21hbGxDb250cm9sU2l6ZV0uaGVpZ2h0KCkgKiB6
b29tTGV2ZWwpKQogICAgICAgICBzaXplID0gTlNTbWFsbENvbnRyb2xTaXplOwogICAgIGVsc2UK
ICAgICAgICAgc2l6ZSA9IE5TTWluaUNvbnRyb2xTaXplOwpAQCAtNzI5LDcgKzcyOSw3IEBAIHZv
aWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFRleHRGaWVsZFN0eWwKIHsKIH0KIAotYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRDYXBzTG9ja0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFJlY3QmIHIpCiB7CiAgICAgaWYgKHBhaW50SW5mby5j
b250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzky
LDcgKzc5Miw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3QoUmVuZGUKICAg
ICBzaXplLnNldFdpZHRoKHIud2lkdGgoKSk7CiAKICAgICAvLyBOb3cgaW5mbGF0ZSBpdCB0byBh
Y2NvdW50IGZvciB0aGUgc2hhZG93LgotICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gcjsKKyAg
ICBMYXlvdXRSZWN0IGluZmxhdGVkUmVjdCA9IHI7CiAgICAgaWYgKHIud2lkdGgoKSA+PSBtaW5p
bXVtTWVudUxpc3RTaXplKG8tPnN0eWxlKCkpKQogICAgICAgICBpbmZsYXRlZFJlY3QgPSBpbmZs
YXRlUmVjdChpbmZsYXRlZFJlY3QsIHNpemUsIHBvcHVwQnV0dG9uTWFyZ2lucygpLCB6b29tTGV2
ZWwpOwogCkBAIC04MTcsMTYgKzgxNywxNiBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1l
bnVMaXN0KFJlbmRlCiAKICNpZiBFTkFCTEUoTUVURVJfVEFHKQogCi1JbnRTaXplIFJlbmRlclRo
ZW1lTWFjOjptZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqIHJlbmRlck1ldGVy
LCBjb25zdCBJbnRSZWN0JiBib3VuZHMpIGNvbnN0CitMYXlvdXRTaXplIFJlbmRlclRoZW1lTWFj
OjptZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqIHJlbmRlck1ldGVyLCBjb25z
dCBMYXlvdXRSZWN0JiBib3VuZHMpIGNvbnN0CiB7CiAgICAgaWYgKE5vQ29udHJvbFBhcnQgPT0g
cmVuZGVyTWV0ZXItPnN0eWxlKCktPmFwcGVhcmFuY2UoKSkKICAgICAgICAgcmV0dXJuIGJvdW5k
cy5zaXplKCk7CiAKICAgICBOU0xldmVsSW5kaWNhdG9yQ2VsbCogY2VsbCA9IGxldmVsSW5kaWNh
dG9yRm9yKHJlbmRlck1ldGVyKTsKICAgICAvLyBNYWtlcyBlbm91Z2ggcm9vbSBmb3IgY2VsbCdz
IGludHJpbnNpYyBzaXplLgotICAgIE5TU2l6ZSBjZWxsU2l6ZSA9IFtjZWxsIGNlbGxTaXplRm9y
Qm91bmRzOkludFJlY3QoSW50UG9pbnQoKSwgYm91bmRzLnNpemUoKSldOwotICAgIHJldHVybiBJ
bnRTaXplKGJvdW5kcy53aWR0aCgpIDwgY2VsbFNpemUud2lkdGggPyBjZWxsU2l6ZS53aWR0aCA6
IGJvdW5kcy53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgIGJvdW5kcy5oZWlnaHQoKSA8IGNl
bGxTaXplLmhlaWdodCA/IGNlbGxTaXplLmhlaWdodCA6IGJvdW5kcy5oZWlnaHQoKSk7CisgICAg
TlNTaXplIGNlbGxTaXplID0gW2NlbGwgY2VsbFNpemVGb3JCb3VuZHM6TGF5b3V0UmVjdChMYXlv
dXRQb2ludCgpLCBib3VuZHMuc2l6ZSgpKV07CisgICAgcmV0dXJuIExheW91dFNpemUoYm91bmRz
LndpZHRoKCkgPCBjZWxsU2l6ZS53aWR0aCA/IGNlbGxTaXplLndpZHRoIDogYm91bmRzLndpZHRo
KCksCisgICAgICAgICAgICAgICAgICAgICAgYm91bmRzLmhlaWdodCgpIDwgY2VsbFNpemUuaGVp
Z2h0ID8gY2VsbFNpemUuaGVpZ2h0IDogYm91bmRzLmhlaWdodCgpKTsKIH0KIAogYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRNZXRlcihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC0xMTA2LDcgKzEx
MDYsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uCiAgICAgewog
ICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5j
b250ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCB0b3BHcmFkaWVu
dCk7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoUm91bmRl
ZFJlY3QoZW5jbG9zaW5nTGF5b3V0UmVjdCh0b3BHcmFkaWVudCksIGJvcmRlci5yYWRpaSgpLnRv
cExlZnQoKSwgYm9yZGVyLnJhZGlpKCkudG9wUmlnaHQoKSwgSW50U2l6ZSgpLCBJbnRTaXplKCkp
KTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChSb3VuZGVk
UmVjdChlbmNsb3NpbmdJbnRSZWN0KHRvcEdyYWRpZW50KSwgYm9yZGVyLnJhZGlpKCkudG9wTGVm
dCgpLCBib3JkZXIucmFkaWkoKS50b3BSaWdodCgpLCBJbnRTaXplKCksIEludFNpemUoKSkpOwog
ICAgICAgICBjb250ZXh0ID0gY2dDb250ZXh0Q29udGFpbmVyLmNvbnRleHQoKTsKICAgICAgICAg
Q0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgdG9wU2hhZGluZy5nZXQoKSk7CiAgICAgfQpA
QCAtMTExNCw3ICsxMTE0LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1
dHRvbgogICAgIGlmICghYm90dG9tR3JhZGllbnQuaXNFbXB0eSgpKSB7CiAgICAgICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogICAg
ICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGJvdHRvbUdyYWRpZW50KTsKLSAgICAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChSb3VuZGVkUmVjdChlbmNs
b3NpbmdMYXlvdXRSZWN0KGJvdHRvbUdyYWRpZW50KSwgSW50U2l6ZSgpLCBJbnRTaXplKCksIGJv
cmRlci5yYWRpaSgpLmJvdHRvbUxlZnQoKSwgYm9yZGVyLnJhZGlpKCkuYm90dG9tUmlnaHQoKSkp
OworICAgICAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKFJvdW5kZWRS
ZWN0KGVuY2xvc2luZ0ludFJlY3QoYm90dG9tR3JhZGllbnQpLCBJbnRTaXplKCksIEludFNpemUo
KSwgYm9yZGVyLnJhZGlpKCkuYm90dG9tTGVmdCgpLCBib3JkZXIucmFkaWkoKS5ib3R0b21SaWdo
dCgpKSk7CiAgICAgICAgIGNvbnRleHQgPSBjZ0NvbnRleHRDb250YWluZXIuY29udGV4dCgpOwog
ICAgICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBib3R0b21TaGFkaW5nLmdldCgp
KTsKICAgICB9CkBAIC0xMjc2LDcgKzEyNzYsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1
c3RNZW51TGlzdEJ1dHRvCiAgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6Omlu
aXRpYWxMaW5lSGVpZ2h0KCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRQb3B1cEJ1
dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QqIG8sIGNvbnN0IEludFJlY3QmIHIpCit2
b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IExheW91dFJlY3QmIHIpCiB7CiAgICAgTlNQb3BVcEJ1dHRvbkNlbGwq
IHBvcHVwQnV0dG9uID0gdGhpcy0+cG9wdXBCdXR0b24oKTsKIApAQCAtMTUzOCw5ICsxNTM4LDkg
QEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbgogI2lmIEVOQUJMRShJ
TlBVVF9TUEVFQ0gpCiAgICAgLy8gVGFrZSBjYXJlIG9mIGNhc2VzIHdoZXJlIHRoZSBjYW5jZWwg
YnV0dG9uIHdhcyBub3QgYWxpZ25lZCB3aXRoIHRoZSByaWdodCBib3JkZXIgb2YgdGhlIGlucHV0
IGVsZW1lbnQgKGZvciBlLmcuCiAgICAgLy8gd2hlbiBzcGVlY2ggaW5wdXQgaXMgZW5hYmxlZCBm
b3IgdGhlIGlucHV0IGVsZW1lbnQuCi0gICAgSW50UmVjdCBhYnNCb3VuZGluZ0JveCA9IGlucHV0
LT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpOwotICAgIGludCBhYnNSaWdo
dCA9IGFic0JvdW5kaW5nQm94LngoKSArIGFic0JvdW5kaW5nQm94LndpZHRoKCkgLSBpbnB1dC0+
cmVuZGVyQm94KCktPnBhZGRpbmdSaWdodCgpIC0gaW5wdXQtPnJlbmRlckJveCgpLT5ib3JkZXJS
aWdodCgpOwotICAgIGludCBzcGFjZVRvUmlnaHRPZkNhbmNlbEJ1dHRvbiA9IGFic1JpZ2h0IC0g
KHIueCgpICsgci53aWR0aCgpKTsKKyAgICBMYXlvdXRSZWN0IGFic0JvdW5kaW5nQm94ID0gaW5w
dXQtPnJlbmRlcmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCk7CisgICAgTGF5b3V0VW5p
dCBhYnNSaWdodCA9IGFic0JvdW5kaW5nQm94LngoKSArIGFic0JvdW5kaW5nQm94LndpZHRoKCkg
LSBpbnB1dC0+cmVuZGVyQm94KCktPnBhZGRpbmdSaWdodCgpIC0gaW5wdXQtPnJlbmRlckJveCgp
LT5ib3JkZXJSaWdodCgpOworICAgIExheW91dFVuaXQgc3BhY2VUb1JpZ2h0T2ZDYW5jZWxCdXR0
b24gPSBhYnNSaWdodCAtIChyLngoKSArIHIud2lkdGgoKSk7CiAgICAgbG9jYWxCb3VuZHMuc2V0
WChsb2NhbEJvdW5kcy54KCkgLSBzcGFjZVRvUmlnaHRPZkNhbmNlbEJ1dHRvbik7CiAjZW5kaWYK
IApAQCAtMjAyNCw3ICsyMDI0LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6dXNlc01lZGlhQ29u
dHJvbFZvbAogICAgIHJldHVybiBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpID09IE1lZGlhQ29udHJv
bGxlclRoZW1lUXVpY2tUaW1lOwogfQogCi1JbnRQb2ludCBSZW5kZXJUaGVtZU1hYzo6dm9sdW1l
U2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24oUmVuZGVyQm94KiBtdXRlQnV0dG9uQm94LCBjb25z
dCBJbnRTaXplJiBzaXplKSBjb25zdAorTGF5b3V0UG9pbnQgUmVuZGVyVGhlbWVNYWM6OnZvbHVt
ZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKFJlbmRlckJveCogbXV0ZUJ1dHRvbkJveCwgY29u
c3QgTGF5b3V0U2l6ZSYgc2l6ZSkgY29uc3QKIHsKICAgICByZXR1cm4gUmVuZGVyTWVkaWFDb250
cm9sczo6dm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24obXV0ZUJ1dHRvbkJveCwgc2l6
ZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNh
ZmFyaS5jcHAJKHJldmlzaW9uIDEwNjY4MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZVNhZmFyaS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMiw3ICszMTIsNyBAQCBJ
bnRSZWN0IFJlbmRlclRoZW1lU2FmYXJpOjppbmZsYXRlUmVjdChjCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotaW50IFJlbmRlclRoZW1lU2FmYXJpOjpiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJl
bmRlck9iamVjdCogbykgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyVGhlbWVTYWZhcmk6OmJhc2Vs
aW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAogewogICAgIGlmICghby0+
aXNCb3goKSkKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVTYWZhcmkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuaAkocmV2aXNpb24gMTA2NjgzKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmgJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDcgKzUyLDcgQEAgcHVibGljOgogICAgIC8vIEEgbWV0aG9kIHRvIG9idGFpbiB0aGUgYmFzZWxp
bmUgcG9zaXRpb24gZm9yIGEgImxlYWYiIGNvbnRyb2wuICBUaGlzIHdpbGwgb25seSBiZSB1c2Vk
IGlmIGEgYmFzZWxpbmUKICAgICAvLyBwb3NpdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBieSBl
eGFtaW5pbmcgY2hpbGQgY29udGVudC4gQ2hlY2tib3hlcyBhbmQgcmFkaW8gYnV0dG9ucyBhcmUg
ZXhhbXBsZXMgb2YKICAgICAvLyBjb250cm9scyB0aGF0IG5lZWQgdG8gZG8gdGhpcy4KLSAgICB2
aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0Owor
ICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVj
dCopIGNvbnN0OwogCiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSBjb250cm9sIGNoYW5n
ZXMgaXRzIHRpbnQgd2hlbiB0aGUgd2luZG93IGhhcyBmb2N1cyBvciBub3QuCiAgICAgdmlydHVh
bCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCShyZXZp
c2lvbiAxMDY2ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NzQsMTQgKzg3NCwxNCBAQCB2b2lkIFJlbmRlclRoZW1l
V2luOjphZGp1c3RTZWFyY2hGaWVsZFN0CiAKIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBJbnRSZWN0IGJvdW5kcyA9IHI7Cisg
ICAgTGF5b3V0UmVjdCBib3VuZHMgPSByOwogICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7CiAgICAg
aWYgKCFvLT5wYXJlbnQoKSB8fCAhby0+cGFyZW50KCktPmlzQm94KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKICAgICBSZW5kZXJCb3gqIHBhcmVudFJlbmRlckJveCA9IHRvUmVuZGVy
Qm94KG8tPnBhcmVudCgpKTsKIAotICAgIEludFJlY3QgcGFyZW50Qm94ID0gcGFyZW50UmVuZGVy
Qm94LT5hYnNvbHV0ZUNvbnRlbnRCb3goKTsKKyAgICBMYXlvdXRSZWN0IHBhcmVudEJveCA9IHBh
cmVudFJlbmRlckJveC0+YWJzb2x1dGVDb250ZW50Qm94KCk7CiAgICAgCiAgICAgLy8gTWFrZSBz
dXJlIHRoZSBzY2FsZWQgYnV0dG9uIHN0YXlzIHNxdWFyZSBhbmQgd2lsbCBmaXQgaW4gaXRzIHBh
cmVudCdzIGJveAogICAgIGJvdW5kcy5zZXRIZWlnaHQobWluKHBhcmVudEJveC53aWR0aCgpLCBt
aW4ocGFyZW50Qm94LmhlaWdodCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7CkBAIC05MjUsMTMgKzky
NSwxMyBAQCB2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFJlCiAKIGJvb2wg
UmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQog
ewotICAgIEludFJlY3QgYm91bmRzID0gcjsKKyAgICBMYXlvdXRSZWN0IGJvdW5kcyA9IHI7CiAg
ICAgQVNTRVJUKG8tPnBhcmVudCgpKTsKICAgICBpZiAoIW8tPnBhcmVudCgpIHx8ICFvLT5wYXJl
bnQoKS0+aXNCb3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIFJlbmRlckJv
eCogcGFyZW50UmVuZGVyQm94ID0gdG9SZW5kZXJCb3goby0+cGFyZW50KCkpOwotICAgIEludFJl
Y3QgcGFyZW50Qm94ID0gcGFyZW50UmVuZGVyQm94LT5hYnNvbHV0ZUNvbnRlbnRCb3goKTsKKyAg
ICBMYXlvdXRSZWN0IHBhcmVudEJveCA9IHBhcmVudFJlbmRlckJveC0+YWJzb2x1dGVDb250ZW50
Qm94KCk7CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgZGVjb3JhdGlvbiBzdGF5
cyBzcXVhcmUgYW5kIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3gKICAgICBib3VuZHMuc2V0
SGVpZ2h0KG1pbihwYXJlbnRCb3gud2lkdGgoKSwgbWluKHBhcmVudEJveC5oZWlnaHQoKSwgYm91
bmRzLmhlaWdodCgpKSkpOwpAQCAtOTU5LDcgKzk1OSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVXaW46
OmFkanVzdFNlYXJjaEZpZWxkUmUKIAogYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBJbnRSZWN0IGJvdW5kcyA9IHI7CisgICAg
TGF5b3V0UmVjdCBib3VuZHMgPSByOwogICAgIEFTU0VSVChvLT5wYXJlbnQoKSk7CiAgICAgaWYg
KCFvLT5wYXJlbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTY3LDExICs5NjcsMTEg
QEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZFJlcwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCiAgICAgUmVuZGVyQm94KiBwYXJlbnRSZW5kZXJCb3ggPSB0b1JlbmRl
ckJveChvLT5wYXJlbnQoKSk7Ci0gICAgSW50UmVjdCBwYXJlbnRCb3ggPSBwYXJlbnRSZW5kZXJC
b3gtPmFic29sdXRlQ29udGVudEJveCgpOworICAgIExheW91dFJlY3QgcGFyZW50Qm94ID0gcGFy
ZW50UmVuZGVyQm94LT5hYnNvbHV0ZUNvbnRlbnRCb3goKTsKICAgICAKICAgICAvLyBNYWtlIHN1
cmUgdGhlIHNjYWxlZCBkZWNvcmF0aW9uIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3gKICAg
ICBib3VuZHMuc2V0SGVpZ2h0KG1pbihwYXJlbnRCb3guaGVpZ2h0KCksIGJvdW5kcy5oZWlnaHQo
KSkpOwotICAgIGJvdW5kcy5zZXRXaWR0aChtaW4ocGFyZW50Qm94LndpZHRoKCksIHN0YXRpY19j
YXN0PGludD4oYm91bmRzLmhlaWdodCgpICogZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
bldpZHRoIC8gZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplKSkpOworICAg
IGJvdW5kcy5zZXRXaWR0aChtaW48TGF5b3V0VW5pdD4ocGFyZW50Qm94LndpZHRoKCksIGJvdW5k
cy5oZWlnaHQoKSAqIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25XaWR0aCAvIGRlZmF1
bHRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSkpOwogCiAgICAgLy8gQ2VudGVyIHRo
ZSBidXR0b24gdmVydGljYWxseS4gIFJvdW5kIHVwIHRob3VnaCwgc28gaWYgaXQgaGFzIHRvIGJl
IG9uZSBwaXhlbCBvZmYtY2VudGVyLCBpdCB3aWxsCiAgICAgLy8gYmUgb25lIHBpeGVsIGNsb3Nl
ciB0byB0aGUgYm90dG9tIG9mIHRoZSBmaWVsZC4gIFRoaXMgdGVuZHMgdG8gbG9vayBiZXR0ZXIg
d2l0aCB0aGUgdGV4dC4KQEAgLTExMTcsNyArMTExNyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVXaW46
OnBhaW50TWVkaWFWb2x1bWVTbGkKICAgICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sczo6cGFp
bnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYVZvbHVtZVNsaWRlclRodW1iLCBvLCBwYWludEluZm8s
IHIpOwogfQogCi1JbnRQb2ludCBSZW5kZXJUaGVtZVdpbjo6dm9sdW1lU2xpZGVyT2Zmc2V0RnJv
bU11dGVCdXR0b24oUmVuZGVyQm94KiBtdXRlQnV0dG9uQm94LCBjb25zdCBJbnRTaXplJiBzaXpl
KSBjb25zdAorTGF5b3V0UG9pbnQgUmVuZGVyVGhlbWVXaW46OnZvbHVtZVNsaWRlck9mZnNldEZy
b21NdXRlQnV0dG9uKFJlbmRlckJveCogbXV0ZUJ1dHRvbkJveCwgY29uc3QgTGF5b3V0U2l6ZSYg
c2l6ZSkgY29uc3QKIHsKICAgICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sczo6dm9sdW1lU2xp
ZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24obXV0ZUJ1dHRvbkJveCwgc2l6ZSk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uaAkocmV2aXNpb24gMTA2Njgz
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xp
ZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgSW50
UG9pbnQgdm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24oUmVuZGVyQm94KiwgY29uc3Qg
SW50U2l6ZSYpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0UG9pbnQgdm9sdW1lU2xpZGVyT2Zm
c2V0RnJvbU11dGVCdXR0b24oUmVuZGVyQm94KiwgY29uc3QgTGF5b3V0U2l6ZSYpIGNvbnN0Owog
I2VuZGlmCiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3Vz
ZWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>