<?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>295667</bug_id>
          
          <creation_ts>2025-07-09 16:09:15 -0700</creation_ts>
          <short_desc>[Cleanup] Let&apos;s special-case RenderDeprecatedFlexibleBox&apos;s baseline position logic</short_desc>
          <delta_ts>2025-07-18 11:05:59 -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>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>2128846</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2025-07-09 16:09:15 -0700</bug_when>
    <thetext>ssia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2128847</commentid>
    <comment_count>1</comment_count>
      <attachid>475834</attachid>
    <who name="alan">zalan</who>
    <bug_when>2025-07-09 16:09:57 -0700</bug_when>
    <thetext>Created attachment 475834
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2128850</commentid>
    <comment_count>2</comment_count>
      <attachid>475835</attachid>
    <who name="alan">zalan</who>
    <bug_when>2025-07-09 16:11:19 -0700</bug_when>
    <thetext>Created attachment 475835
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2130687</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2025-07-16 16:10:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/156008397&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2131101</commentid>
    <comment_count>4</comment_count>
      <attachid>476089</attachid>
    <who name="alan">zalan</who>
    <bug_when>2025-07-18 05:18:24 -0700</bug_when>
    <thetext>Created attachment 476089
[fast-cq]Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2131193</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2025-07-18 11:05:58 -0700</bug_when>
    <thetext>Committed 297602@main (f91000cd7a66): &lt;https://commits.webkit.org/297602@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 476089.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>475834</attachid>
            <date>2025-07-09 16:09:57 -0700</date>
            <delta_ts>2025-07-18 05:18:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-295667-20250709160956.patch</filename>
            <type>text/plain</type>
            <size>3977</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">RnJvbSBiZTQ1OTI5OWZjZDVjMTNkN2QzMjZkOTg0MmQ2YTFmOGQ4YWM1MDVkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGFuIEJhcmFkbGF5IDx6YWxhbkBhcHBsZS5jb20+CkRhdGU6
IFdlZCwgOSBKdWwgMjAyNSAxNjowOToyMiAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIFtDbGVhbnVw
XSBMZXQncyBzcGVjaWFsLWNhc2UgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94J3MKIGJhc2Vs
aW5lIHBvc2l0aW9uIGxvZ2ljIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yOTU2NjcKClJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgoKKiBTb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Cb3hHZW9tZXRyeVVwZGF0ZXIuY3Bw
OgooV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OmJhc2VsaW5lUG9zaXRpb24pOgotLS0KIC4u
Li9MYXlvdXRJbnRlZ3JhdGlvbkJveEdlb21ldHJ5VXBkYXRlci5jcHAgICB8IDM0ICsrKysrKysr
KysrLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlv
bnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5
b3V0SW50ZWdyYXRpb25Cb3hHZW9tZXRyeVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uQm94R2VvbWV0cnlVcGRhdGVyLmNwcApp
bmRleCAzNTc3MTdhMTEwZDcuLjVhNzMwMTNkYWNjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uQm94R2VvbWV0cnlVcGRhdGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdy
YXRpb25Cb3hHZW9tZXRyeVVwZGF0ZXIuY3BwCkBAIC00NzIsNiArNDcyLDE5IEBAIExheW91dFVu
aXQgc3RhdGljIGJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyQm94JiByZW5kZXJCb3gpCiAg
ICAgICAgIHJldHVybiBzeW50aGVzaXplZEJhc2VsaW5lKHJlbmRlckJveCwgKnJlbmRlckJveC5w
YXJlbnRTdHlsZSgpLCB3cml0aW5nTW9kZS5pc0hvcml6b250YWwoKSA/IEhvcml6b250YWxMaW5l
IDogVmVydGljYWxMaW5lLCBCb3JkZXJCb3gpICsgcmVuZGVyQm94Lm1hcmdpbkxvZ2ljYWxIZWln
aHQoKTsKICAgICB9CiAKKyAgICBpZiAoQ2hlY2tlZFB0ciBkZXByZWNhdGVkRmxleEJveCA9IGR5
bmFtaWNEb3duY2FzdDxSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g+KHJlbmRlckJveCkpIHsK
KyAgICAgICAgLy8gSGlzdG9yaWNhbGx5LCB3ZSBkaWQgdGhpcyBjaGVjayBmb3IgYWxsIGJhc2Vs
aW5lcy4gQnV0IHdlIGNhbid0CisgICAgICAgIC8vIHJlbW92ZSB0aGlzIGNvZGUgZnJvbSBkZXBy
ZWNhdGVkIGZsZXhib3gsIGJlY2F1c2UgaXQgZWZmZWN0aXZlbHkKKyAgICAgICAgLy8gYnJlYWtz
IC13ZWJraXQtbGluZS1jbGFtcCwgd2hpY2ggaXMgdXNlZCBpbiB0aGUgd2lsZCAtLSB3ZSB3b3Vs
ZAorICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIGJhc2VsaW5lIGFzIGlmIC13ZWJraXQtbGluZS1j
bGFtcCB3YXNuJ3QgdXNlZC4KKyAgICAgICAgLy8gRm9yIHNpbXBsaWNpdHksIHdlIHVzZSB0aGlz
IGZvciBhbGwgdXNlcyBvZiBkZXByZWNhdGVkIGZsZXhib3guCisgICAgICAgIGF1dG8gYm90dG9t
T2ZDb250ZW50ID0gZGVwcmVjYXRlZEZsZXhCb3gtPmJvcmRlckJlZm9yZSgpICsgZGVwcmVjYXRl
ZEZsZXhCb3gtPnBhZGRpbmdCZWZvcmUoKSArIGRlcHJlY2F0ZWRGbGV4Qm94LT5jb250ZW50Qm94
TG9naWNhbEhlaWdodCgpOworICAgICAgICBhdXRvIGJhc2VsaW5lID0gbGFzdEluZmxvd0JveEJh
c2VsaW5lKCpkZXByZWNhdGVkRmxleEJveCk7CisgICAgICAgIGlmIChiYXNlbGluZSAmJiAqYmFz
ZWxpbmUgPD0gYm90dG9tT2ZDb250ZW50KQorICAgICAgICAgICAgcmV0dXJuIG1hcmdpbkJlZm9y
ZSArICpiYXNlbGluZTsKKyAgICAgICAgcmV0dXJuIHJvdW5kVG9JbnQoZGVwcmVjYXRlZEZsZXhC
b3gtPm1hcmdpbkJveExvZ2ljYWxIZWlnaHQod3JpdGluZ01vZGUpKTsKKyAgICB9CisKICAgICBp
ZiAocmVuZGVyQm94LnN0eWxlKCkuaGFzVXNlZEFwcGVhcmFuY2UoKSAmJiAhcmVuZGVyQm94LnRo
ZW1lKCkuaXNDb250cm9sQ29udGFpbmVyKHJlbmRlckJveC5zdHlsZSgpLnVzZWRBcHBlYXJhbmNl
KCkpKSB7CiAgICAgICAgIC8vIEZvciAibGVhZiIgdGhlbWUgb2JqZWN0cywgbGV0IHRoZSB0aGVt
ZSBkZWNpZGUgd2hhdCB0aGUgYmFzZWxpbmUgcG9zaXRpb24gaXMuCiAgICAgICAgIHJldHVybiBy
ZW5kZXJCb3gudGhlbWUoKS5iYXNlbGluZVBvc2l0aW9uKHJlbmRlckJveCk7CkBAIC01MTUsMjIg
KzUyOCwxMyBAQCBMYXlvdXRVbml0IHN0YXRpYyBiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRl
ckJveCYgcmVuZGVyQm94KQogICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVBcmVhLT5ob3Jp
em9udGFsU2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9mZnNldCgpLngoKTsK
ICAgICAgICAgfTsKIAotICAgICAgICBpZiAoIWlnbm9yZUJhc2VsaW5lKCkpIHsKLSAgICAgICAg
ICAgIGF1dG8gaW5saW5lQmxvY2tCYXNlbGluZVBvc2l0aW9uID0gaW5saW5lQmxvY2tCYXNlbGlu
ZShyZW5kZXJCb3gpOwotICAgICAgICAgICAgaWYgKGlzPFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJs
ZUJveD4ocmVuZGVyQm94KSAmJiBpbmxpbmVCbG9ja0Jhc2VsaW5lUG9zaXRpb24pIHsKLSAgICAg
ICAgICAgICAgICAvLyBIaXN0b3JpY2FsbHksIHdlIGRpZCB0aGlzIGNoZWNrIGZvciBhbGwgYmFz
ZWxpbmVzLiBCdXQgd2UgY2FuJ3QKLSAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhpcyBjb2Rl
IGZyb20gZGVwcmVjYXRlZCBmbGV4Ym94LCBiZWNhdXNlIGl0IGVmZmVjdGl2ZWx5Ci0gICAgICAg
ICAgICAgICAgLy8gYnJlYWtzIC13ZWJraXQtbGluZS1jbGFtcCwgd2hpY2ggaXMgdXNlZCBpbiB0
aGUgd2lsZCAtLSB3ZSB3b3VsZAotICAgICAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgYmFz
ZWxpbmUgYXMgaWYgLXdlYmtpdC1saW5lLWNsYW1wIHdhc24ndCB1c2VkLgotICAgICAgICAgICAg
ICAgIC8vIEZvciBzaW1wbGljaXR5LCB3ZSB1c2UgdGhpcyBmb3IgYWxsIHVzZXMgb2YgZGVwcmVj
YXRlZCBmbGV4Ym94LgotICAgICAgICAgICAgICAgIGF1dG8gYm90dG9tT2ZDb250ZW50ID0gcmVu
ZGVyQm94LmJvcmRlckJlZm9yZSgpICsgcmVuZGVyQm94LnBhZGRpbmdCZWZvcmUoKSArIHJlbmRl
ckJveC5jb250ZW50Qm94TG9naWNhbEhlaWdodCgpOwotICAgICAgICAgICAgICAgIGlmICgqaW5s
aW5lQmxvY2tCYXNlbGluZVBvc2l0aW9uID4gYm90dG9tT2ZDb250ZW50KQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcm91bmRUb0ludChyZW5kZXJCb3gubWFyZ2luQm94TG9naWNhbEhlaWdo
dCh3cml0aW5nTW9kZSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlubGluZUJs
b2NrQmFzZWxpbmVQb3NpdGlvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFyZ2luQmVmb3Jl
ICsgKmlubGluZUJsb2NrQmFzZWxpbmVQb3NpdGlvbjsKLSAgICAgICAgfQorICAgICAgICBpZiAo
aWdub3JlQmFzZWxpbmUoKSkKKyAgICAgICAgICAgIHJldHVybiByb3VuZFRvSW50KHJlbmRlckJv
eC5tYXJnaW5Cb3hMb2dpY2FsSGVpZ2h0KHdyaXRpbmdNb2RlKSk7CisKKyAgICAgICAgaWYgKGF1
dG8gaW5saW5lQmxvY2tCYXNlbGluZVBvc2l0aW9uID0gaW5saW5lQmxvY2tCYXNlbGluZShyZW5k
ZXJCb3gpKQorICAgICAgICAgICAgcmV0dXJuIG1hcmdpbkJlZm9yZSArICppbmxpbmVCbG9ja0Jh
c2VsaW5lUG9zaXRpb247CiAgICAgfQorCiAgICAgcmV0dXJuIHJvdW5kVG9JbnQocmVuZGVyQm94
Lm1hcmdpbkJveExvZ2ljYWxIZWlnaHQod3JpdGluZ01vZGUpKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>475835</attachid>
            <date>2025-07-09 16:11:19 -0700</date>
            <delta_ts>2025-07-14 16:12:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-295667-20250709161118.patch</filename>
            <type>text/plain</type>
            <size>79886</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">RnJvbSA2Nzg5MWZhNjc1YmNmZDVlOWNhYWVkZmIzNDgyZTg0OWY2ODkxODFmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGFuIEJhcmFkbGF5IDx6YWxhbkBhcHBsZS5jb20+CkRhdGU6
IFNhdCwgNSBKdWwgMjAyNSAwODowNTowNSAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIFtDbGVhbnVw
XSBMZXQncyBzcGVjaWFsLWNhc2UgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94J3MKIGJhc2Vs
aW5lIHBvc2l0aW9uIGxvZ2ljIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yOTU2NjcKClJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgoKKiBTb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Cb3hHZW9tZXRyeVVwZGF0ZXIuY3Bw
OgooV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246Omxhc3RJbmZsb3dCb3hCYXNlbGluZSk6CihX
ZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6aW5saW5lQmxvY2tCYXNlbGluZSk6CihXZWJDb3Jl
OjpMYXlvdXRJbnRlZ3JhdGlvbjo6YmFzZWxpbmVQb3NpdGlvbik6CihXZWJDb3JlOjpMYXlvdXRJ
bnRlZ3JhdGlvbjo6c2V0SW50ZWdyYXRpb25CYXNlbGluZSk6CihXZWJDb3JlOjpMYXlvdXRJbnRl
Z3JhdGlvbjo6Qm94R2VvbWV0cnlVcGRhdGVyOjp1cGRhdGVCb3hHZW9tZXRyeUFmdGVySW50ZWdy
YXRpb25MYXlvdXQpOgoqIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DYXJldFJlY3RDb21wdXRh
dGlvbi5jcHA6CihXZWJDb3JlOjpjb21wdXRlQ2FyZXRSZWN0Rm9yRW1wdHlFbGVtZW50KToKKiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5TGluZUxheW91dC5jcHA6CihXZWJDb3JlOjpM
ZWdhY3lMaW5lTGF5b3V0OjpsYXlvdXRMaW5lQm94ZXMpOgoqIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJBdHRhY2htZW50LmNwcDoKKFdlYkNvcmU6OlJlbmRlckF0dGFjaG1lbnQ6OmJh
c2VsaW5lUG9zaXRpb24gY29uc3QpOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJBdHRhY2htZW50Lmg6CiogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcDoKKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsaW5lSGVpZ2h0IGNvbnN0KTogRGVsZXRl
ZC4KKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpiYXNlbGluZVBvc2l0aW9uIGNvbnN0KTogRGVsZXRl
ZC4KKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppbmxpbmVCbG9ja0Jhc2VsaW5lIGNvbnN0KToKKiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcDoKKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6
bGF5b3V0QmxvY2tXaXRoTm9DaGlsZHJlbik6CihXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6Omxh
eW91dEluRmxvd0NoaWxkcmVuKToKKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6YWRqdXN0SW5p
dGlhbExldHRlclBvc2l0aW9uKToKKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bGF5b3V0SW5s
aW5lQ29udGVudCk6CihXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmlubGluZUJsb2NrQmFzZWxp
bmUgY29uc3QpOgoqIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaDoK
KiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKFdlYkNvcmU6OlJlbmRl
ckJveDo6bGluZUhlaWdodCBjb25zdCk6CihXZWJDb3JlOjpSZW5kZXJCb3g6OmJhc2VsaW5lUG9z
aXRpb24gY29uc3QpOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guaDoKKFdlYkNvcmU6OlJlbmRlckJveDo6aW5saW5lQmxvY2tCYXNlbGluZSBjb25zdCk6Ciog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveElubGluZXMuaDoKKFdlYkNvcmU6OlJl
bmRlckJveDo6bWFyZ2luQm94TG9naWNhbEhlaWdodCBjb25zdCk6CiogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0Lmg6CiogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJ1dHRvbi5jcHA6CihXZWJDb3JlOjpzeW50aGVzaXplZEJhc2VsaW5lRnJvbUNv
bnRlbnRCb3gpOiBEZWxldGVkLgooV2ViQ29yZTo6UmVuZGVyQnV0dG9uOjpiYXNlbGluZVBvc2l0
aW9uIGNvbnN0KTogRGVsZXRlZC4KKiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0
dG9uLmg6CiogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJs
ZUJveC5jcHA6CihXZWJDb3JlOjpSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OmxheW91dEhv
cml6b250YWxCb3gpOgooV2ViQ29yZTo6UmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpsYXlv
dXRWZXJ0aWNhbEJveCk6CiogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxv
YWRDb250cm9sLmNwcDoKKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWludENv
bnRyb2wpOgoqIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHA6
CihXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6cGVyZm9ybUZsZXhMYXlvdXQpOgooV2ViQ29y
ZTo6UmVuZGVyRmxleGlibGVCb3g6OmJhc2VsaW5lUG9zaXRpb24gY29uc3QpOiBEZWxldGVkLgoo
V2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmlubGluZUJsb2NrQmFzZWxpbmUgY29uc3QpOgoq
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oOgoqIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcDoKKFdlYkNvcmU6OlJlbmRlckdyaWQ6Omxh
eW91dEdyaWQpOgooV2ViQ29yZTo6UmVuZGVyR3JpZDo6bGF5b3V0TWFzb25yeSk6CihXZWJDb3Jl
OjpSZW5kZXJHcmlkOjpiYXNlbGluZVBvc2l0aW9uIGNvbnN0KTogRGVsZXRlZC4KKFdlYkNvcmU6
OlJlbmRlckdyaWQ6OmlubGluZUJsb2NrQmFzZWxpbmUgY29uc3QpOgoqIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJHcmlkLmg6CiogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckltYWdlLmNwcDoKKFdlYkNvcmU6OlJlbmRlckltYWdlOjpiYXNlbGluZVBvc2l0aW9uIGNvbnN0
KTogRGVsZXRlZC4KKiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaDoKKiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKFdlYkNvcmU6OlJlbmRl
cklubGluZTo6bGluZUhlaWdodCBjb25zdCk6IERlbGV0ZWQuCihXZWJDb3JlOjpSZW5kZXJJbmxp
bmU6OmJhc2VsaW5lUG9zaXRpb24gY29uc3QpOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuaDoKKiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGluZUJyZWFrLmNwcDoKKFdlYkNvcmU6OlJlbmRlckxpbmVCcmVhazo6dXBkYXRlRnJvbVN0eWxl
KToKKFdlYkNvcmU6OlJlbmRlckxpbmVCcmVhazo6bGluZUhlaWdodCBjb25zdCk6IERlbGV0ZWQu
CihXZWJDb3JlOjpSZW5kZXJMaW5lQnJlYWs6OmJhc2VsaW5lUG9zaXRpb24gY29uc3QpOiBEZWxl
dGVkLgoqIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaDoKKiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CihXZWJDb3JlOjpSZW5kZXJM
aXN0Qm94OjpiYXNlbGluZVBvc2l0aW9uIGNvbnN0KTogRGVsZXRlZC4KKiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oOgoqIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0TWFya2VyLmNwcDoKKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OmxpbmVIZWln
aHQgY29uc3QpOiBEZWxldGVkLgooV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6YmFzZWxpbmVQ
b3NpdGlvbiBjb25zdCk6IERlbGV0ZWQuCiogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RNYXJrZXIuaDoKKiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3Qu
aDoKKiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcDoKKFdlYkNvcmU6
OlJlbmRlclNsaWRlcjo6YmFzZWxpbmVQb3NpdGlvbiBjb25zdCk6IERlbGV0ZWQuCiogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oOgoqIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZS5jcHA6CihXZWJDb3JlOjpSZW5kZXJUYWJsZTo6YmFzZWxpbmVQb3Np
dGlvbiBjb25zdCk6IERlbGV0ZWQuCihXZWJDb3JlOjpSZW5kZXJUYWJsZTo6aW5saW5lQmxvY2tC
YXNlbGluZSBjb25zdCk6CiogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmg6
CiogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcDoKKFdlYkNv
cmU6OlJlbmRlclRleHRDb250cm9sOjpjb21wdXRlTG9naWNhbEhlaWdodCBjb25zdCk6CiogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmg6CiogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcDoKKFdlYkNvcmU6OlJl
bmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpiYXNlbGluZVBvc2l0aW9uIGNvbnN0KTogRGVsZXRl
ZC4KKiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUu
aDoKKiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lV2lkdGguY3BwOgooV2ViQ29y
ZTo6TGluZVdpZHRoOjp1cGRhdGVBdmFpbGFibGVXaWR0aCk6CiogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHA6CihXZWJDb3JlOjpSZW5kZXJNYXRo
TUxCbG9jazo6YmFzZWxpbmVQb3NpdGlvbiBjb25zdCk6IERlbGV0ZWQuCiogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oOgotLS0KIC4uLi9MYXlvdXRJ
bnRlZ3JhdGlvbkJveEdlb21ldHJ5VXBkYXRlci5jcHAgICB8IDI2OCArKysrKysrKysrKysrKysr
Ky0KIC4uLi9yZW5kZXJpbmcvQ2FyZXRSZWN0Q29tcHV0YXRpb24uY3BwICAgICAgICB8ICAgMiAr
LQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUxpbmVMYXlvdXQuY3BwIHwgICAyICst
CiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQXR0YWNobWVudC5jcHAgfCAgMTQgLQog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckF0dGFjaG1lbnQuaCAgIHwgICAyIC0KIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgICAgICB8IDEwMSAtLS0tLS0t
CiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCAgICAgICAgfCAgIDUgLQog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAgIHwgIDcxICstLS0t
CiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmggICAgfCAgIDEgLQog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgICAgICAgIHwgIDE2ICstCiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggICAgICAgICAgfCAgIDcgKy0KIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hJbmxpbmVzLmggICB8ICAgMSArCiAuLi4v
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaCAgfCAgIDUgLQogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAgICAgIHwgIDE2IC0tCiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmggICAgICAgfCAgIDIgLQogLi4uL3JlbmRl
cmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwIHwgICA0ICstCiAuLi4vcmVuZGVy
aW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcCAgICAgfCAgIDQgKy0KIC4uLi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAgICB8ICAxOCArLQogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmggIHwgICAyIC0KIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcCAgICAgICB8ICAyMCArLQogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckdyaWQuaCAgICAgICAgIHwgICAyIC0KIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbWFnZS5jcHAgICAgICB8ICAxMiAtCiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW1hZ2UuaCAgICAgICAgfCAgIDIgLQogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcklubGluZS5jcHAgICAgIHwgIDEzIC0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuaCAgICAgICB8ICAgMyAtCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGluZUJyZWFrLmNwcCAgfCAgMjEgLS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaW5lQnJlYWsuaCAgICB8ICAgNSAtCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5jcHAgICAgfCAgMTIgLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guaCAgICAgIHwgICAxIC0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0TWFya2VyLmNwcCB8ICAxNCAtCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dE1hcmtlci5oICAgfCAgIDIgLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVM
aXN0LmggICAgIHwgICA3IC0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIu
Y3BwICAgICB8ICAgNiAtCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmgg
ICAgICAgfCAgIDEgLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcCAg
ICAgIHwgIDEzIC0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oICAgICAg
ICB8ICAgMiAtCiAuLi4vV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwICAg
fCAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oICB8
ICAgNSAtCiAuLi4vcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcCAgfCAg
IDUgLQogLi4uL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oICAgIHwgICAx
IC0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVXaWR0aC5jcHAgICB8ICAgMiAr
LQogLi4uL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwICAgIHwgICA4IC0K
IC4uLi9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmggICAgICB8ICAgMiAtCiA0
MyBmaWxlcyBjaGFuZ2VkLCAyODkgaW5zZXJ0aW9ucygrKSwgNDEzIGRlbGV0aW9ucygtKQoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3Jh
dGlvbkJveEdlb21ldHJ5VXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vTGF5b3V0SW50ZWdyYXRpb25Cb3hHZW9tZXRyeVVwZGF0ZXIuY3BwCmluZGV4IGM1YTE1
ZDA3YzM4NS4uNWE3MzAxM2RhY2MyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Cb3hHZW9tZXRyeVVwZGF0ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkJveEdl
b21ldHJ5VXBkYXRlci5jcHAKQEAgLTI4LDMwICsyOCw0MiBAQAogCiAjaW5jbHVkZSAiRm9ybWF0
dGluZ0NvbnN0cmFpbnRzLmgiCiAjaW5jbHVkZSAiSW5saW5lV2Fsa2VyLmgiCisjaW5jbHVkZSAi
TGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgiCisjaW5jbHVkZSAiTGVnYWN5UmVuZGVyU1ZH
Um9vdC5oIgorI2lmIEVOQUJMRShNVUxUSV9SRVBSRVNFTlRBVElPTl9IRUlDKQorI2luY2x1ZGUg
Ik11bHRpUmVwcmVzZW50YXRpb25IRUlDTWV0cmljcy5oIgorI2VuZGlmCiAjaW5jbHVkZSAiUmVu
ZGVyQXR0YWNobWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgogI2luY2x1ZGUg
IlJlbmRlckJveElubGluZXMuaCIKICNpbmNsdWRlICJSZW5kZXJCdXR0b24uaCIKICNpbmNsdWRl
ICJSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50
SW5saW5lcy5oIgorI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAi
UmVuZGVyRmxleGlibGVCb3guaCIKICNpbmNsdWRlICJSZW5kZXJGcmFtZVNldC5oIgogI2luY2x1
ZGUgIlJlbmRlckdyaWQuaCIKKyNpbmNsdWRlICJSZW5kZXJIVE1MQ2FudmFzLmgiCisjaW5jbHVk
ZSAiUmVuZGVySUZyYW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJS
ZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgog
I2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIK
ICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIu
aCIKICNpbmNsdWRlICJSZW5kZXJNYXRoTUxCbG9jay5oIgorI2luY2x1ZGUgIlJlbmRlck1lbnVM
aXN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGUu
aCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUlu
bGluZXMuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oIgorI2luY2x1
ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1l
LmgiCisjaW5jbHVkZSAiUmVuZGVyVmlld1RyYW5zaXRpb25DYXB0dXJlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXRJbnRlZ3JhdGlvbiB7CkBAIC0yODQsOCArMjk2
LDI1MyBAQCBzdGF0aWMgaW5saW5lIExheW91dFNpemUgc2Nyb2xsYmFyTG9naWNhbFNpemUoY29u
c3QgUmVuZGVyQm94JiByZW5kZXJlcikKICAgICByZXR1cm4geyBob3Jpem9udGFsU3BhY2VSZXNl
cnZlZEZvclNjcm9sbGJhciwgdmVydGljYWxTcGFjZVJlc2VydmVkRm9yU2Nyb2xsYmFyIH07CiB9
CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRJbnRlZ3JhdGlvbkJhc2VsaW5lKGNvbnN0IFJlbmRl
ckJveCYgcmVuZGVyQm94LCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKK3N0YXRpYyBzdGQ6Om9w
dGlvbmFsPExheW91dFVuaXQ+IGlubGluZUJsb2NrQmFzZWxpbmUoY29uc3QgUmVuZGVyQm94Jik7
CisKK3N0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gbGFzdEluZmxvd0JveEJhc2VsaW5lKGF1dG8m
IGJsb2NrQ29udGFpbmVyKQoreworICAgIGF1dG8gd3JpdGluZ01vZGUgPSBibG9ja0NvbnRhaW5l
ci5jb250YWluaW5nQmxvY2soKS0+d3JpdGluZ01vZGUoKTsKKyAgICBhdXRvIGhhdmVJbkZsb3dD
aGlsZCA9IGZhbHNlOworICAgIGZvciAoYXV0byogYm94ID0gYmxvY2tDb250YWluZXIubGFzdENo
aWxkQm94KCk7IGJveDsgYm94ID0gYm94LT5wcmV2aW91c1NpYmxpbmdCb3goKSkgeworICAgICAg
ICBpZiAoYm94LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgaGF2ZUluRmxvd0NoaWxkID0gdHJ1ZTsKKyAgICAgICAgaWYg
KGF1dG8gcmVzdWx0ID0gaW5saW5lQmxvY2tCYXNlbGluZSgqYm94KSkKKyAgICAgICAgICAgIHJl
dHVybiBMYXlvdXRVbml0IHsgKGJveC0+bG9naWNhbFRvcCgpICsgcmVzdWx0LnZhbHVlKCkpLnRv
SW50KCkgfTsgLy8gVHJhbnNsYXRlIHRvIG91ciBjb29yZGluYXRlIHNwYWNlLgorICAgIH0KKwor
ICAgIGlmICghaGF2ZUluRmxvd0NoaWxkICYmIGJsb2NrQ29udGFpbmVyLmhhc0xpbmVJZkVtcHR5
KCkpIHsKKyAgICAgICAgYXV0byYgZm9udE1ldHJpY3MgPSBibG9ja0NvbnRhaW5lci5maXJzdExp
bmVTdHlsZSgpLm1ldHJpY3NPZlByaW1hcnlGb250KCk7CisgICAgICAgIHJldHVybiBMYXlvdXRV
bml0IHsgTGF5b3V0VW5pdChmb250TWV0cmljcy5pbnRBc2NlbnQoKQorICAgICAgICAgICAgKyAo
YmxvY2tDb250YWluZXIubGluZUhlaWdodCgpIC0gZm9udE1ldHJpY3MuaW50SGVpZ2h0KCkpIC8g
MgorICAgICAgICAgICAgKyAod3JpdGluZ01vZGUuaXNIb3Jpem9udGFsKCkgPyBibG9ja0NvbnRh
aW5lci5ib3JkZXJUb3AoKSArIGJsb2NrQ29udGFpbmVyLnBhZGRpbmdUb3AoKSA6IGJsb2NrQ29u
dGFpbmVyLmJvcmRlclJpZ2h0KCkgKyBibG9ja0NvbnRhaW5lci5wYWRkaW5nUmlnaHQoKSkpLnRv
SW50KCkgfTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKworc3RhdGljIHN0ZDo6b3B0aW9u
YWw8TGF5b3V0VW5pdD4gaW5saW5lQmxvY2tCYXNlbGluZShjb25zdCBSZW5kZXJCb3gmIHJlbmRl
ckJveCkKK3sKKyAgICBhdXRvIHdyaXRpbmdNb2RlID0gcmVuZGVyQm94LmNvbnRhaW5pbmdCbG9j
aygpLT53cml0aW5nTW9kZSgpOworICAgIGF1dG8gbGluZURpcmVjdGlvbiA9IHdyaXRpbmdNb2Rl
LmlzSG9yaXpvbnRhbCgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExpbmU7CisKKyAgICBp
ZiAoaXM8UmVuZGVyVGFibGU+KHJlbmRlckJveCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICBpZiAoKGlzPFJlbmRlckZsZXhpYmxlQm94PihyZW5kZXJCb3gpIHx8IGlzPFJlbmRlckdyaWQ+
KHJlbmRlckJveCkpICYmICFpczxSZW5kZXJNZW51TGlzdD4ocmVuZGVyQm94KSAmJiAhaXM8UmVu
ZGVyVGV4dENvbnRyb2xJbm5lckNvbnRhaW5lcj4ocmVuZGVyQm94KSkKKyAgICAgICAgcmV0dXJu
IHJlbmRlckJveC5maXJzdExpbmVCYXNlbGluZSgpOworCisgICAgaWYgKHJlbmRlckJveC5pc1dy
aXRpbmdNb2RlUm9vdCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKHJlbmRlckJv
eC5zaG91bGRBcHBseUxheW91dENvbnRhaW5tZW50KCkpIHsKKyAgICAgICAgaWYgKHJlbmRlckJv
eC5pc0lubGluZSgpKQorICAgICAgICAgICAgcmV0dXJuIHN5bnRoZXNpemVkQmFzZWxpbmUocmVu
ZGVyQm94LCAqcmVuZGVyQm94LnBhcmVudFN0eWxlKCksIGxpbmVEaXJlY3Rpb24sIEJvcmRlckJv
eCkgKyAod3JpdGluZ01vZGUuaXNIb3Jpem9udGFsKCkgPyByZW5kZXJCb3gubWFyZ2luQm90dG9t
KCkgOiByZW5kZXJCb3gubWFyZ2luTGVmdCgpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICBpZiAoQ2hlY2tlZFB0ciBpbm5lckNvbnRhaW5lciA9IGR5bmFtaWNEb3duY2FzdDxS
ZW5kZXJUZXh0Q29udHJvbElubmVyQ29udGFpbmVyPihyZW5kZXJCb3gpKQorICAgICAgICByZXR1
cm4gbGFzdEluZmxvd0JveEJhc2VsaW5lKCppbm5lckNvbnRhaW5lcik7CisKKyAgICBpZiAoQ2hl
Y2tlZFB0ciBibG9ja0Zsb3cgPSBkeW5hbWljRG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PihyZW5k
ZXJCb3gpKSB7CisgICAgICAgIFJlZlB0ciBlbGVtZW50ID0gYmxvY2tGbG93LT5lbGVtZW50KCk7
CisgICAgICAgIGF1dG8gaXNGb3JtQ29udHJvbEVsZW1lbnQgPSBlbGVtZW50ICYmIGVsZW1lbnQt
PmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CisgICAgICAgIGlmIChibG9ja0Zsb3ctPnN0eWxlKCku
ZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpJbmxpbmVCbG9jaykgeworICAgICAgICAgICAgLy8g
VGhlIGJhc2VsaW5lIG9mIGFuICdpbmxpbmUtYmxvY2snIGlzIHRoZSBiYXNlbGluZSBvZiBpdHMg
bGFzdCBsaW5lIGJveCBpbiB0aGUgbm9ybWFsIGZsb3csIHVubGVzcyBpdCBoYXMgZWl0aGVyIG5v
IGluLWZsb3cgbGluZSBib3hlcyBvciBpZiBpdHMgJ292ZXJmbG93JworICAgICAgICAgICAgLy8g
cHJvcGVydHkgaGFzIGEgY29tcHV0ZWQgdmFsdWUgb3RoZXIgdGhhbiAndmlzaWJsZScuIHNlZSBo
dHRwczovL3d3dy53My5vcmcvVFIvQ1NTMjIvdmlzdWRldC5odG1sCisgICAgICAgICAgICBhdXRv
IHNob3VsZFN5bnRoZXNpemVCYXNlbGluZSA9ICFibG9ja0Zsb3ctPnN0eWxlKCkuaXNPdmVyZmxv
d1Zpc2libGUoKSAmJiAhaXNGb3JtQ29udHJvbEVsZW1lbnQgJiYgIWlzPFJlbmRlclRleHRDb250
cm9sSW5uZXJCbG9jaz4oKmJsb2NrRmxvdyk7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3ludGhl
c2l6ZUJhc2VsaW5lKQorICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBOb3RlIHRoYXQgaGVyZSB3ZSBvbmx5IHRha2UgdGhlIGxlZnQgYW5kIGJvdHRv
bSBpbnRvIGNvbnNpZGVyYXRpb24uIE91ciBjYWxsZXIgdGFrZXMgdGhlIHJpZ2h0IGFuZCB0b3Ag
aW50byBjb25zaWRlcmF0aW9uLgorICAgICAgICBMYXlvdXRVbml0IGxhc3RCYXNlbGluZTsKKyAg
ICAgICAgaWYgKCFibG9ja0Zsb3ctPmNoaWxkcmVuSW5saW5lKCkpIHsKKyAgICAgICAgICAgIGF1
dG8gaW5saW5lQmxvY2tCYXNlbGluZSA9IGxhc3RJbmZsb3dCb3hCYXNlbGluZSgqYmxvY2tGbG93
KTsKKyAgICAgICAgICAgIGlmICghaW5saW5lQmxvY2tCYXNlbGluZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4geyB9OworICAgICAgICAgICAgbGFzdEJhc2VsaW5lID0gKmlubGluZUJsb2NrQmFz
ZWxpbmU7CisgICAgICAgIH0gZWxzZSBpZiAoIWJsb2NrRmxvdy0+aGFzTGluZXMoKSkgeworICAg
ICAgICAgICAgaWYgKCFibG9ja0Zsb3ctPmhhc0xpbmVJZkVtcHR5KCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gYmxvY2tGbG93
LT5maXJzdExpbmVTdHlsZSgpLm1ldHJpY3NPZlByaW1hcnlGb250KCk7CisgICAgICAgICAgICBy
ZXR1cm4gTGF5b3V0VW5pdCB7IExheW91dFVuaXQoZm9udE1ldHJpY3MuaW50QXNjZW50KCkKKyAg
ICAgICAgICAgICAgICArIChibG9ja0Zsb3ctPmxpbmVIZWlnaHQoKSAtIGZvbnRNZXRyaWNzLmlu
dEhlaWdodCgpKSAvIDIKKyAgICAgICAgICAgICAgICArIChsaW5lRGlyZWN0aW9uID09IEhvcml6
b250YWxMaW5lID8gYmxvY2tGbG93LT5ib3JkZXJUb3AoKSArIGJsb2NrRmxvdy0+cGFkZGluZ1Rv
cCgpIDogYmxvY2tGbG93LT5ib3JkZXJSaWdodCgpICsgYmxvY2tGbG93LT5wYWRkaW5nUmlnaHQo
KSkpLnRvSW50KCkgfTsKKyAgICAgICAgfSBlbHNlIGlmIChibG9ja0Zsb3ctPnN2Z1RleHRMYXlv
dXQoKSkgeworICAgICAgICAgICAgYXV0byYgc3R5bGUgPSBibG9ja0Zsb3ctPmZpcnN0TGluZVN0
eWxlKCk7CisgICAgICAgICAgICAvLyBMZWdhY3lJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSW5C
bG9ja0RpcmVjdGlvbiB3aWxsIGZsaXAgbGluZXMgaW4gY2FzZSBvZiB2ZXJ0aWNhbExSIG1vZGUs
IHNvIHdlIGNhbiBhc3N1bWUgdmVydGljYWxSTCBmb3Igbm93LgorICAgICAgICAgICAgbGFzdEJh
c2VsaW5lID0gc3R5bGUubWV0cmljc09mUHJpbWFyeUZvbnQoKS5pbnRBc2NlbnQoYmxvY2tGbG93
LT5sZWdhY3lSb290Qm94KCktPmJhc2VsaW5lVHlwZSgpKSArIChzdHlsZS53cml0aW5nTW9kZSgp
LmlzTGluZUludmVydGVkKCkgPyBibG9ja0Zsb3ctPmxvZ2ljYWxIZWlnaHQoKSAtIGJsb2NrRmxv
dy0+bGVnYWN5Um9vdEJveCgpLT5sb2dpY2FsQm90dG9tKCkgOiBibG9ja0Zsb3ctPmxlZ2FjeVJv
b3RCb3goKS0+bG9naWNhbFRvcCgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChhdXRvKiBpbmxpbmVM
YXlvdXQgPSBibG9ja0Zsb3ctPmlubGluZUxheW91dCgpKQorICAgICAgICAgICAgbGFzdEJhc2Vs
aW5lID0gZmxvb3JUb0ludChpbmxpbmVMYXlvdXQtPmxhc3RMaW5lTG9naWNhbEJhc2VsaW5lKCkp
OworCisgICAgICAgIGlmIChibG9ja0Zsb3ctPnN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZs
b3c6OlZpc2libGUpCisgICAgICAgICAgICByZXR1cm4gbGFzdEJhc2VsaW5lOworCisgICAgICAg
IGF1dG8gYm94SGVpZ2h0ID0gc3ludGhlc2l6ZWRCYXNlbGluZShyZW5kZXJCb3gsICpibG9ja0Zs
b3ctPnBhcmVudFN0eWxlKCksIGxpbmVEaXJlY3Rpb24sIEJvcmRlckJveCkgKyAod3JpdGluZ01v
ZGUuaXNIb3Jpem9udGFsKCkgPyBibG9ja0Zsb3ctPm1hcmdpbkJvdHRvbSgpIDogYmxvY2tGbG93
LT5tYXJnaW5MZWZ0KCkpOworICAgICAgICAvLyBXaGlsZSBjc3MtYWxpZ24tMyBkZWZpbmVzIHRo
ZSBsYXN0IGJhc2VsaW5lIGZvcm0gYmxvY2sgY29udGFpbmVycyB3aGljaCBhcmUKKyAgICAgICAg
Ly8gc2Nyb2xsIGNvbnRhaW5lcnMgKHdpdGggYW4gaW5pdGlhbCBiYXNlbGluZS1zb3VyY2UgdmFs
dWUpIGFzIHRoZSBibG9jay1lbmQgbWFyZ2luCisgICAgICAgIC8vIGVkZ2UsIHdlIGluc3RlYWQg
bWFpbnRhaW4gb3VyIGxlZ2FjeSBiZWhhdmlvciBmb3IgZm9ybSBjb250cm9scyBhbmQgY29udGVu
dAorICAgICAgICAvLyBpbnNpZGUgZm9ybSBjb250cm9scyB0byBtYWludGFpbiBjb21wYXRpYmls
aXR5LgorICAgICAgICBhdXRvIGlzSW5Gb3JtQ29udHJvbCA9IGVsZW1lbnQgJiYgZWxlbWVudC0+
c2hhZG93SG9zdCgpICYmIGVsZW1lbnQtPnNoYWRvd0hvc3QoKS0+aXNGb3JtQ29udHJvbEVsZW1l
bnQoKTsKKyAgICAgICAgaWYgKGlzRm9ybUNvbnRyb2xFbGVtZW50IHx8IGlzSW5Gb3JtQ29udHJv
bCkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1pbihib3hIZWlnaHQsIGxhc3RCYXNlbGluZSk7
CisgICAgICAgIHJldHVybiBib3hIZWlnaHQ7CisgICAgfQorCisgICAgaWYgKENoZWNrZWRQdHIg
YmxvY2tSZW5kZXJlciA9IGR5bmFtaWNEb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyQm94KSkK
KyAgICAgICAgcmV0dXJuIGxhc3RJbmZsb3dCb3hCYXNlbGluZSgqYmxvY2tSZW5kZXJlcik7CisK
KyAgICByZXR1cm4geyB9OworfQorCitMYXlvdXRVbml0IHN0YXRpYyBiYXNlbGluZVBvc2l0aW9u
KGNvbnN0IFJlbmRlckJveCYgcmVuZGVyQm94KQoreworICAgIEFTU0VSVChyZW5kZXJCb3guaXNJ
bkZsb3coKSk7CisKKyAgICBhdXRvIHdyaXRpbmdNb2RlID0gcmVuZGVyQm94LmNvbnRhaW5pbmdC
bG9jaygpLT53cml0aW5nTW9kZSgpOworICAgIGF1dG8gbWFyZ2luQmVmb3JlID0gd3JpdGluZ01v
ZGUuaXNIb3Jpem9udGFsKCkgPyByZW5kZXJCb3gubWFyZ2luVG9wKCkgOiByZW5kZXJCb3gubWFy
Z2luUmlnaHQoKTsKKworICAgIGlmIChpczxSZW5kZXJJRnJhbWU+KHJlbmRlckJveCkKKyAgICAg
ICAgfHwgaXM8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KHJlbmRlckJveCkKKyAgICAgICAgfHwgaXM8
TGVnYWN5UmVuZGVyU1ZHUm9vdD4ocmVuZGVyQm94KQorICAgICAgICB8fCBpczxSZW5kZXJIVE1M
Q2FudmFzPihyZW5kZXJCb3gpCisgICAgICAgIHx8IGlzPFJlbmRlclZpZXdUcmFuc2l0aW9uQ2Fw
dHVyZT4ocmVuZGVyQm94KSkKKyAgICAgICAgcmV0dXJuIHJvdW5kVG9JbnQocmVuZGVyQm94Lm1h
cmdpbkJveExvZ2ljYWxIZWlnaHQod3JpdGluZ01vZGUpKTsKKworI2lmIEVOQUJMRShBVFRBQ0hN
RU5UX0VMRU1FTlQpCisgICAgaWYgKENoZWNrZWRQdHIgcmVuZGVyZXIgPSBkeW5hbWljRG93bmNh
c3Q8UmVuZGVyQXR0YWNobWVudD4ocmVuZGVyQm94KSkgeworICAgICAgICBpZiAoYXV0byogYmFz
ZWxpbmVFbGVtZW50ID0gcmVuZGVyZXItPmF0dGFjaG1lbnRFbGVtZW50KCkud2lkZUxheW91dElt
YWdlRWxlbWVudCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogYmFzZWxpbmVFbGVtZW50UmVu
ZGVyQm94ID0gYmFzZWxpbmVFbGVtZW50LT5yZW5kZXJCb3goKSkgeworICAgICAgICAgICAgICAg
IC8vIFRoaXMgaXMgdGhlIGJvdHRvbSBvZiB0aGUgaW1hZ2UgYXNzdW1pbmcgaXQgaXMgdmVydGlj
YWxseSBjZW50ZXJlZC4KKyAgICAgICAgICAgICAgICByZXR1cm4gKHJlbmRlcmVyLT5oZWlnaHQo
KSArIGJhc2VsaW5lRWxlbWVudFJlbmRlckJveC0+aGVpZ2h0KCkpIC8gMjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHRoZSBib3R0b20gb2YgdGhlIGF0dGFjaG1l
bnQgaWYgdGhlcmUgaXMgbm8gaW1hZ2UuCisgICAgICAgICAgICByZXR1cm4gcmVuZGVyZXItPmhl
aWdodCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZW5kZXJlci0+dGhlbWUoKS5hdHRh
Y2htZW50QmFzZWxpbmUoKnJlbmRlcmVyKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChDaGVj
a2VkUHRyIHJlbmRlcmVyID0gZHluYW1pY0Rvd25jYXN0PFJlbmRlckJ1dHRvbj4ocmVuZGVyQm94
KSkgeworICAgICAgICAvLyBXZSBjYW5ub3QgcmVseSBvbiBSZW5kZXJGbGV4aWJsZUJveDo6YmFz
ZWxpbmVQb3NpdGlvbigpIGJlY2F1c2Ugb2YgZmxleGJveGVzIGhhdmUgc29tZSBzcGVjaWFsIGJl
aGF2aW9yCisgICAgICAgIC8vIHJlZ2FyZGluZyBiYXNlbGluZXMgdGhhdCBzaG91bGRuJ3QgYXBw
bHkgdG8gYnV0dG9ucy4KKyAgICAgICAgaWYgKGF1dG8gYmFzZWxpbmUgPSByZW5kZXJCb3guZmly
c3RMaW5lQmFzZWxpbmUoKSkKKyAgICAgICAgICAgIHJldHVybiBtYXJnaW5CZWZvcmUgKyAqYmFz
ZWxpbmU7CisgICAgICAgIGF1dG8gY29udGVudEJveEJvdHRvbSA9IHdyaXRpbmdNb2RlLmlzSG9y
aXpvbnRhbCgpID8gcmVuZGVyZXItPmJvcmRlclRvcCgpICsgcmVuZGVyZXItPnBhZGRpbmdUb3Ao
KSArIHJlbmRlcmVyLT5jb250ZW50Qm94SGVpZ2h0KCkgOiByZW5kZXJlci0+Ym9yZGVyUmlnaHQo
KSArIHJlbmRlcmVyLT5wYWRkaW5nUmlnaHQoKSArIHJlbmRlcmVyLT5jb250ZW50Qm94V2lkdGgo
KTsKKyAgICAgICAgcmV0dXJuIG1hcmdpbkJlZm9yZSArIGNvbnRlbnRCb3hCb3R0b207CisgICAg
fQorCisgICAgaWYgKENoZWNrZWRQdHIgcmVuZGVyZXIgPSBkeW5hbWljRG93bmNhc3Q8UmVuZGVy
SW1hZ2U+KHJlbmRlckJveCkpIHsKKyAgICAgICAgYXV0byBvZmZzZXQgPSBMYXlvdXRVbml0IHsg
fTsKKyNpZiBFTkFCTEUoTVVMVElfUkVQUkVTRU5UQVRJT05fSEVJQykKKyAgICAgICAgaWYgKHJl
bmRlcmVyLT5pc011bHRpUmVwcmVzZW50YXRpb25IRUlDKCkpIHsKKyAgICAgICAgICAgIGF1dG8g
bWV0cmljcyA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS0+
bWV0cmljc0Zvck11bHRpUmVwcmVzZW50YXRpb25IRUlDKCk7CisgICAgICAgICAgICBvZmZzZXQg
PSBMYXlvdXRVbml0Ojpmcm9tRmxvYXRSb3VuZChtZXRyaWNzLmRlc2NlbnQpOworICAgICAgICB9
CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHJvdW5kVG9JbnQocmVuZGVyZXItPm1hcmdpbkJveExv
Z2ljYWxIZWlnaHQod3JpdGluZ01vZGUpKSAtIG9mZnNldDsKKyAgICB9CisKKyAgICBpZiAoQ2hl
Y2tlZFB0ciByZW5kZXJlciA9IGR5bmFtaWNEb3duY2FzdDxSZW5kZXJMaXN0Qm94PihyZW5kZXJC
b3gpKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGhhcmRjb2RlZCBiYXNlbGluZUFkanVzdG1l
bnQgaXMgd2hhdCB3ZSB1c2VkIHRvIGRvIGZvciB0aGUgb2xkCisgICAgICAgIC8vIHdpZGdldCwg
YnV0IEknbSBub3Qgc3VyZSB0aGlzIGlzIHJpZ2h0IGZvciB0aGUgbmV3IGNvbnRyb2wuCisgICAg
ICAgIGNvbnN0IGludCBiYXNlbGluZUFkanVzdG1lbnQgPSA3OworICAgICAgICBhdXRvIGJhc2Vs
aW5lID0gcm91bmRUb0ludChyZW5kZXJlci0+bWFyZ2luQm94TG9naWNhbEhlaWdodCh3cml0aW5n
TW9kZSkpOworICAgICAgICBpZiAocmVuZGVyZXItPnNob3VsZEFwcGx5TGF5b3V0Q29udGFpbm1l
bnQoKSkKKyAgICAgICAgICAgIHJldHVybiBiYXNlbGluZTsKKyAgICAgICAgcmV0dXJuIGJhc2Vs
aW5lIC0gYmFzZWxpbmVBZGp1c3RtZW50OworICAgIH0KKworICAgIGlmIChDaGVja2VkUHRyIHJl
bmRlcmVyID0gZHluYW1pY0Rvd25jYXN0PFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lPihyZW5k
ZXJCb3gpKQorICAgICAgICByZXR1cm4gcm91bmRUb0ludChyZW5kZXJlci0+bWFyZ2luQm94TG9n
aWNhbEhlaWdodCh3cml0aW5nTW9kZSkpOworCisgICAgaWYgKENoZWNrZWRQdHIgcmVuZGVyZXIg
PSBkeW5hbWljRG93bmNhc3Q8UmVuZGVyU2xpZGVyPihyZW5kZXJCb3gpKSB7CisgICAgICAgIC8v
IEZJWE1FOiBQYXRjaCB0aGlzIGZ1bmN0aW9uIGZvciB3cml0aW5nLW1vZGUuCisgICAgICAgIHJl
dHVybiByZW5kZXJlci0+aGVpZ2h0KCkgKyByZW5kZXJlci0+bWFyZ2luVG9wKCk7CisgICAgfQor
CisgICAgaWYgKENoZWNrZWRQdHIgcmVuZGVyZXIgPSBkeW5hbWljRG93bmNhc3Q8UmVuZGVyVGFi
bGU+KHJlbmRlckJveCkpIHsKKyAgICAgICAgaWYgKGF1dG8gYmFzZWxpbmVQb3MgPSByZW5kZXJC
b3guZmlyc3RMaW5lQmFzZWxpbmUoKSkKKyAgICAgICAgICAgIHJldHVybiBtYXJnaW5CZWZvcmUg
KyAqYmFzZWxpbmVQb3M7CisgICAgICAgIHJldHVybiByb3VuZFRvSW50KHJlbmRlcmVyLT5tYXJn
aW5Cb3hMb2dpY2FsSGVpZ2h0KHdyaXRpbmdNb2RlKSk7CisgICAgfQorCisgICAgaWYgKChpczxS
ZW5kZXJGbGV4aWJsZUJveD4ocmVuZGVyQm94KSB8fCBpczxSZW5kZXJHcmlkPihyZW5kZXJCb3gp
KSAmJiAhaXM8UmVuZGVyTWVudUxpc3Q+KHJlbmRlckJveCkpIHsKKyAgICAgICAgaWYgKGF1dG8g
YmFzZWxpbmUgPSByZW5kZXJCb3guZmlyc3RMaW5lQmFzZWxpbmUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBtYXJnaW5CZWZvcmUudG9JbnQoKSArICpiYXNlbGluZTsKKyAgICAgICAgcmV0dXJuIHN5
bnRoZXNpemVkQmFzZWxpbmUocmVuZGVyQm94LCAqcmVuZGVyQm94LnBhcmVudFN0eWxlKCksIHdy
aXRpbmdNb2RlLmlzSG9yaXpvbnRhbCgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExpbmUs
IEJvcmRlckJveCkgKyByZW5kZXJCb3gubWFyZ2luTG9naWNhbEhlaWdodCgpOworICAgIH0KKwor
ICAgIGlmIChDaGVja2VkUHRyIGRlcHJlY2F0ZWRGbGV4Qm94ID0gZHluYW1pY0Rvd25jYXN0PFJl
bmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveD4ocmVuZGVyQm94KSkgeworICAgICAgICAvLyBIaXN0
b3JpY2FsbHksIHdlIGRpZCB0aGlzIGNoZWNrIGZvciBhbGwgYmFzZWxpbmVzLiBCdXQgd2UgY2Fu
J3QKKyAgICAgICAgLy8gcmVtb3ZlIHRoaXMgY29kZSBmcm9tIGRlcHJlY2F0ZWQgZmxleGJveCwg
YmVjYXVzZSBpdCBlZmZlY3RpdmVseQorICAgICAgICAvLyBicmVha3MgLXdlYmtpdC1saW5lLWNs
YW1wLCB3aGljaCBpcyB1c2VkIGluIHRoZSB3aWxkIC0tIHdlIHdvdWxkCisgICAgICAgIC8vIGNh
bGN1bGF0ZSB0aGUgYmFzZWxpbmUgYXMgaWYgLXdlYmtpdC1saW5lLWNsYW1wIHdhc24ndCB1c2Vk
LgorICAgICAgICAvLyBGb3Igc2ltcGxpY2l0eSwgd2UgdXNlIHRoaXMgZm9yIGFsbCB1c2VzIG9m
IGRlcHJlY2F0ZWQgZmxleGJveC4KKyAgICAgICAgYXV0byBib3R0b21PZkNvbnRlbnQgPSBkZXBy
ZWNhdGVkRmxleEJveC0+Ym9yZGVyQmVmb3JlKCkgKyBkZXByZWNhdGVkRmxleEJveC0+cGFkZGlu
Z0JlZm9yZSgpICsgZGVwcmVjYXRlZEZsZXhCb3gtPmNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KCk7
CisgICAgICAgIGF1dG8gYmFzZWxpbmUgPSBsYXN0SW5mbG93Qm94QmFzZWxpbmUoKmRlcHJlY2F0
ZWRGbGV4Qm94KTsKKyAgICAgICAgaWYgKGJhc2VsaW5lICYmICpiYXNlbGluZSA8PSBib3R0b21P
ZkNvbnRlbnQpCisgICAgICAgICAgICByZXR1cm4gbWFyZ2luQmVmb3JlICsgKmJhc2VsaW5lOwor
ICAgICAgICByZXR1cm4gcm91bmRUb0ludChkZXByZWNhdGVkRmxleEJveC0+bWFyZ2luQm94TG9n
aWNhbEhlaWdodCh3cml0aW5nTW9kZSkpOworICAgIH0KKworICAgIGlmIChyZW5kZXJCb3guc3R5
bGUoKS5oYXNVc2VkQXBwZWFyYW5jZSgpICYmICFyZW5kZXJCb3gudGhlbWUoKS5pc0NvbnRyb2xD
b250YWluZXIocmVuZGVyQm94LnN0eWxlKCkudXNlZEFwcGVhcmFuY2UoKSkpIHsKKyAgICAgICAg
Ly8gRm9yICJsZWFmIiB0aGVtZSBvYmplY3RzLCBsZXQgdGhlIHRoZW1lIGRlY2lkZSB3aGF0IHRo
ZSBiYXNlbGluZSBwb3NpdGlvbiBpcy4KKyAgICAgICAgcmV0dXJuIHJlbmRlckJveC50aGVtZSgp
LmJhc2VsaW5lUG9zaXRpb24ocmVuZGVyQm94KTsKKyAgICB9CisKKyAgICBpZiAoQ2hlY2tlZFB0
ciByZW5kZXJlciA9IGR5bmFtaWNEb3duY2FzdDxSZW5kZXJMaXN0TWFya2VyPihyZW5kZXJCb3gp
KSB7CisgICAgICAgIGlmIChDaGVja2VkUHRyIGxpc3RJdGVtID0gcmVuZGVyZXItPmxpc3RJdGVt
KCk7IGxpc3RJdGVtICYmICFyZW5kZXJlci0+aXNJbWFnZSgpKSB7CisgICAgICAgICAgICBhdXRv
JiBmb250TWV0cmljcyA9IHJlbmRlcmVyLT5zdHlsZSgpLm1ldHJpY3NPZlByaW1hcnlGb250KCk7
CisgICAgICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCB7IGZvbnRNZXRyaWNzLmludEFzY2VudCgp
ICsgKHJlbmRlcmVyLT5saW5lSGVpZ2h0KCkgLSBmb250TWV0cmljcy5pbnRIZWlnaHQoKSkgLyAy
IH0udG9JbnQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcm91bmRUb0ludChyZW5kZXJC
b3gubWFyZ2luQm94TG9naWNhbEhlaWdodCh3cml0aW5nTW9kZSkpOworICAgIH0KKworI2lmIEVO
QUJMRShNQVRITUwpCisgICAgaWYgKGlzPFJlbmRlck1hdGhNTEJsb2NrPihyZW5kZXJCb3gpKSB7
CisgICAgICAgIGlmIChhdXRvIGJhc2VsaW5lID0gcmVuZGVyQm94LmZpcnN0TGluZUJhc2VsaW5l
KCkpCisgICAgICAgICAgICByZXR1cm4gKmJhc2VsaW5lOworICAgICAgICAvLyBGYWxsYmFjayB0
byByZWd1bGFyIGJsb2NrIGxldmVsIGJhc2VsaW5lLgorICAgIH0KKyNlbmRpZgorCisgICAgaWYg
KENoZWNrZWRQdHIgcmVuZGVyZXIgPSBkeW5hbWljRG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRl
ckJveCkpIHsKKyAgICAgICAgLy8gQ1NTMi4xIHN0YXRlcyB0aGF0IHRoZSBiYXNlbGluZSBvZiBh
biBpbmxpbmUgYmxvY2sgaXMgdGhlIGJhc2VsaW5lIG9mIHRoZSBsYXN0IGxpbmUgYm94IGluCisg
ICAgICAgIC8vIHRoZSBub3JtYWwgZmxvdy4gV2UgbWFrZSBhbiBleGNlcHRpb24gZm9yIG1hcnF1
ZWVzLCBzaW5jZSB0aGVpciBiYXNlbGluZXMgYXJlIG1lYW5pbmdsZXNzCisgICAgICAgIC8vICh0
aGUgY29udGVudCBpbnNpZGUgdGhlbSBtb3ZlcykuIFRoaXMgbWF0Y2hlcyBXaW5JRSBhcyB3ZWxs
LCB3aGljaCBqdXN0IGJvdHRvbS1hbGlnbnMgdGhlbS4KKyAgICAgICAgLy8gV2UgYWxzbyBnaXZl
IHVwIG9uIGZpbmRpbmcgYSBiYXNlbGluZSBpZiB3ZSBoYXZlIGEgdmVydGljYWwgc2Nyb2xsYmFy
LCBvciBpZiB3ZSBhcmUgc2Nyb2xsZWQKKyAgICAgICAgLy8gdmVydGljYWxseSAoZS5nLiwgYW4g
b3ZlcmZsb3c6aGlkZGVuIGJsb2NrIHRoYXQgaGFzIGhhZCBzY3JvbGxUb3AgbW92ZWQpLgorICAg
ICAgICBhdXRvIGlnbm9yZUJhc2VsaW5lID0gWyZdIHsKKyAgICAgICAgICAgIGlmIChyZW5kZXJl
ci0+aXNXcml0aW5nTW9kZVJvb3QoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgICAgICAgICAgQ2hlY2tlZFB0ciBzY3JvbGxhYmxlQXJlYSA9IHJlbmRlcmVyLT5sYXllcigp
ID8gcmVuZGVyZXItPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgICAg
ICAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlQXJlYS0+bWFycXVlZSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICBpZiAod3JpdGluZ01vZGUuaXNIb3Jp
em9udGFsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVBcmVhLT52ZXJ0aWNh
bFNjcm9sbGJhcigpIHx8IHNjcm9sbGFibGVBcmVhLT5zY3JvbGxPZmZzZXQoKS55KCk7CisgICAg
ICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxiYXIoKSB8fCBz
Y3JvbGxhYmxlQXJlYS0+c2Nyb2xsT2Zmc2V0KCkueCgpOworICAgICAgICB9OworCisgICAgICAg
IGlmIChpZ25vcmVCYXNlbGluZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJvdW5kVG9JbnQocmVu
ZGVyQm94Lm1hcmdpbkJveExvZ2ljYWxIZWlnaHQod3JpdGluZ01vZGUpKTsKKworICAgICAgICBp
ZiAoYXV0byBpbmxpbmVCbG9ja0Jhc2VsaW5lUG9zaXRpb24gPSBpbmxpbmVCbG9ja0Jhc2VsaW5l
KHJlbmRlckJveCkpCisgICAgICAgICAgICByZXR1cm4gbWFyZ2luQmVmb3JlICsgKmlubGluZUJs
b2NrQmFzZWxpbmVQb3NpdGlvbjsKKyAgICB9CisKKyAgICByZXR1cm4gcm91bmRUb0ludChyZW5k
ZXJCb3gubWFyZ2luQm94TG9naWNhbEhlaWdodCh3cml0aW5nTW9kZSkpOworfQorCitzdGF0aWMg
aW5saW5lIHZvaWQgc2V0SW50ZWdyYXRpb25CYXNlbGluZShjb25zdCBSZW5kZXJCb3gmIHJlbmRl
ckJveCkKIHsKKyAgICBpZiAocmVuZGVyQm94LmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9u
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgYXV0byBoYXNOb25TeW50aGV0aWNCYXNlbGlu
ZSA9IFsmXSB7CiAgICAgICAgIGlmIChhdXRvKiByZW5kZXJMaXN0TWFya2VyID0gZHluYW1pY0Rv
d25jYXN0PFJlbmRlckxpc3RNYXJrZXI+KHJlbmRlckJveCkpCiAgICAgICAgICAgICByZXR1cm4g
IXJlbmRlckxpc3RNYXJrZXItPmlzSW1hZ2UoKTsKQEAgLTMxNSwxMSArNTcyLDggQEAgc3RhdGlj
IGlubGluZSB2b2lkIHNldEludGVncmF0aW9uQmFzZWxpbmUoY29uc3QgUmVuZGVyQm94JiByZW5k
ZXJCb3gsIFdyaXRpbmdNb2QKICAgICAgICAgcmV0dXJuIGhhc0FwcGFyZWFuY2UgfHwgIWJsb2Nr
Rmxvdy0+Y2hpbGRyZW5JbmxpbmUoKSB8fCBibG9ja0Zsb3ctPmhhc0xpbmVzKCkgfHwgYmxvY2tG
bG93LT5oYXNMaW5lSWZFbXB0eSgpOwogICAgIH07CiAKLSAgICBpZiAoIWhhc05vblN5bnRoZXRp
Y0Jhc2VsaW5lKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gYmFzZWxpbmUgPSByZW5k
ZXJCb3guYmFzZWxpbmVQb3NpdGlvbihmYWxzZSAvKiBmaXJzdExpbmUgKi8sIHdyaXRpbmdNb2Rl
LmlzSG9yaXpvbnRhbCgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9u
T25Db250YWluaW5nTGluZSk7Ci0gICAgY29uc3RfY2FzdDxMYXlvdXQ6OkVsZW1lbnRCb3gmPigq
cmVuZGVyQm94LmxheW91dEJveCgpKS5zZXRCYXNlbGluZUZvckludGVncmF0aW9uKGJhc2VsaW5l
KTsKKyAgICBpZiAoaGFzTm9uU3ludGhldGljQmFzZWxpbmUoKSkKKyAgICAgICAgY29uc3RfY2Fz
dDxMYXlvdXQ6OkVsZW1lbnRCb3gmPigqcmVuZGVyQm94LmxheW91dEJveCgpKS5zZXRCYXNlbGlu
ZUZvckludGVncmF0aW9uKGJhc2VsaW5lUG9zaXRpb24ocmVuZGVyQm94KSk7CiB9CiAKIHZvaWQg
Qm94R2VvbWV0cnlVcGRhdGVyOjp1cGRhdGVMYXlvdXRCb3hEaW1lbnNpb25zKGNvbnN0IFJlbmRl
ckJveCYgcmVuZGVyQm94LCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGF2YWlsYWJsZVdpZHRo
LCBzdGQ6Om9wdGlvbmFsPExheW91dDo6SW50cmluc2ljV2lkdGhNb2RlPiBpbnRyaW5zaWNXaWR0
aE1vZGUpCkBAIC00ODcsNyArNzQxLDcgQEAgdm9pZCBCb3hHZW9tZXRyeVVwZGF0ZXI6OnVwZGF0
ZUJveEdlb21ldHJ5QWZ0ZXJJbnRlZ3JhdGlvbkxheW91dChjb25zdCBMYXlvdXQ6OkUKIAogICAg
IGF1dG8gaW50ZWdyYXRpb25BZGp1c3RtZW50cyA9IFsmXSB7CiAgICAgICAgIC8vIEZJWE1FOiBU
aGVzZSBzaG91bGQgZXZlbnR1YWxseSBiZSBhbGwgYWJzb3JiZWQgYnkgTEZDIGxheW91dC4KLSAg
ICAgICAgc2V0SW50ZWdyYXRpb25CYXNlbGluZSgqcmVuZGVyQm94LCB3cml0aW5nTW9kZSgpKTsK
KyAgICAgICAgc2V0SW50ZWdyYXRpb25CYXNlbGluZSgqcmVuZGVyQm94KTsKIAogICAgICAgICBp
ZiAoYXV0byogcmVuZGVyTGlzdE1hcmtlciA9IGR5bmFtaWNEb3duY2FzdDxSZW5kZXJMaXN0TWFy
a2VyPigqcmVuZGVyQm94KSkgewogICAgICAgICAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3gu
cGFyZW50KCkuc3R5bGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9D
YXJldFJlY3RDb21wdXRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ2FyZXRS
ZWN0Q29tcHV0YXRpb24uY3BwCmluZGV4IDEyYjg1NmVjZWIxNy4uYjY5MTc5NmRjZWUwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ2FyZXRSZWN0Q29tcHV0YXRpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DYXJldFJlY3RDb21wdXRhdGlvbi5jcHAK
QEAgLTExOCw3ICsxMTgsNyBAQCBzdGF0aWMgTGF5b3V0UmVjdCBjb21wdXRlQ2FyZXRSZWN0Rm9y
RW1wdHlFbGVtZW50KGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiByZQogICAgIH0KICAgICB4
ID0gc3RkOjptaW4oeCwgc3RkOjptYXg8TGF5b3V0VW5pdD4obWF4WCAtIGNhcmV0V2lkdGgoKSwg
MCkpOwogCi0gICAgYXV0byBsaW5lSGVpZ2h0ID0gcmVuZGVyZXIubGluZUhlaWdodCh0cnVlLCB3
cml0aW5nTW9kZS5pc0hvcml6b250YWwoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5l
LCBQb3NpdGlvbk9mSW50ZXJpb3JMaW5lQm94ZXMpOworICAgIGF1dG8gbGluZUhlaWdodCA9IExh
eW91dFVuaXQ6OmZyb21GbG9hdENlaWwoY3VycmVudFN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgp
KTsKICAgICBhdXRvIGhlaWdodCA9IHN0ZDo6bWluKGxpbmVIZWlnaHQsIExheW91dFVuaXQgeyBj
dXJyZW50U3R5bGUubWV0cmljc09mUHJpbWFyeUZvbnQoKS5oZWlnaHQoKSB9KTsKICAgICBhdXRv
IHkgPSByZW5kZXJlci5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkgKyAobGluZUhlaWdodCA+IGhl
aWdodCA/IChsaW5lSGVpZ2h0IC0gaGVpZ2h0KSAvIDIgOiBMYXlvdXRVbml0IHsgfSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmNwcAppbmRleCAyYjdh
NDE2ZDgzNmUuLjQ5ZWEwMzNmMDUwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xlZ2FjeUxpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9M
ZWdhY3lMaW5lTGF5b3V0LmNwcApAQCAtNTc2LDcgKzU3Niw3IEBAIHZvaWQgTGVnYWN5TGluZUxh
eW91dDo6bGF5b3V0TGluZUJveGVzKCkKICAgICB9CiAKICAgICBpZiAoIWxlZ2FjeVJvb3RCb3go
KSAmJiBtX2Zsb3cuaGFzTGluZUlmRW1wdHkoKSkKLSAgICAgICAgbV9mbG93LnNldExvZ2ljYWxI
ZWlnaHQobV9mbG93LmxvZ2ljYWxIZWlnaHQoKSArIG1fZmxvdy5saW5lSGVpZ2h0KHRydWUsIG1f
Zmxvdy5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNh
bExpbmUsIFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcykpOworICAgICAgICBtX2Zsb3cuc2V0
TG9naWNhbEhlaWdodChtX2Zsb3cubG9naWNhbEhlaWdodCgpICsgbV9mbG93LmxpbmVIZWlnaHQo
KSk7CiB9CiAKIHZvaWQgTGVnYWN5TGluZUxheW91dDo6YWRkT3ZlcmZsb3dGcm9tSW5saW5lQ2hp
bGRyZW4oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckF0dGFj
aG1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckF0dGFjaG1lbnQuY3Bw
CmluZGV4IDdjMDAwMWQ1YmZiZC4uNzNkZmE3MzRjNDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQXR0YWNobWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckF0dGFjaG1lbnQuY3BwCkBAIC0xMDMsMjAgKzEwMyw2IEBAIHZvaWQg
UmVuZGVyQXR0YWNobWVudDo6bGF5b3V0KCkKICAgICAgICAgbGF5b3V0U2hhZG93Q29udGVudChu
ZXdJbnRyaW5zaWNTaXplKTsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJBdHRhY2htZW50OjpiYXNl
bGluZVBvc2l0aW9uKGJvb2wsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlKSBj
b25zdAotewotICAgIGlmIChhdXRvKiBiYXNlbGluZUVsZW1lbnQgPSBhdHRhY2htZW50RWxlbWVu
dCgpLndpZGVMYXlvdXRJbWFnZUVsZW1lbnQoKSkgewotICAgICAgICBpZiAoYXV0byogYmFzZWxp
bmVFbGVtZW50UmVuZGVyQm94ID0gYmFzZWxpbmVFbGVtZW50LT5yZW5kZXJCb3goKSkgewotICAg
ICAgICAgICAgLy8gVGhpcyBpcyB0aGUgYm90dG9tIG9mIHRoZSBpbWFnZSBhc3N1bWluZyBpdCBp
cyB2ZXJ0aWNhbGx5IGNlbnRlcmVkLgotICAgICAgICAgICAgcmV0dXJuIChoZWlnaHQoKSArIGJh
c2VsaW5lRWxlbWVudFJlbmRlckJveC0+aGVpZ2h0KCkpIC8gMjsKLSAgICAgICAgfQotICAgICAg
ICAvLyBGYWxsYmFjayB0byB0aGUgYm90dG9tIG9mIHRoZSBhdHRhY2htZW50IGlmIHRoZXJlIGlz
IG5vIGltYWdlLgotICAgICAgICByZXR1cm4gaGVpZ2h0KCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRoZW1lKCkuYXR0YWNobWVudEJhc2VsaW5lKCp0aGlzKTsKLX0KLQogYm9vbCBSZW5kZXJBdHRh
Y2htZW50OjpzaG91bGREcmF3Qm9yZGVyKCkgY29uc3QKIHsKICAgICBpZiAoc3R5bGUoKS51c2Vk
QXBwZWFyYW5jZSgpID09IFN0eWxlQXBwZWFyYW5jZTo6Qm9yZGVybGVzc0F0dGFjaG1lbnQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQXR0YWNobWVudC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckF0dGFjaG1lbnQuaAppbmRleCBlNGM1MmU3
YjlhNjguLjA1ZWRhNzA5ZDQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckF0dGFjaG1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QXR0YWNobWVudC5oCkBAIC02NCw4ICs2NCw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGxheW91
dCgpIG92ZXJyaWRlOwogCi0gICAgTGF5b3V0VW5pdCBiYXNlbGluZVBvc2l0aW9uKGJvb2wsIExp
bmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlKSBjb25zdCBvdmVycmlkZTsKLQogICAg
IExheW91dFVuaXQgbV9taW5pbXVtSW50cmluc2ljV2lkdGg7CiAgICAgYm9vbCBtX3Nob3VsZERy
YXdCb3JkZXIgeyB0cnVlIH07CiAgICAgYm9vbCBtX2hhc1NoYWRvd0NvbnRyb2xzIHsgZmFsc2Ug
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDkyMWIxNDU0
NDM3MC4uY2RiOWI1MWE2MTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAKQEAgLTI0NzMsNzcgKzI0NzMsNiBAQCBib29sIFJlbmRlckJsb2NrOjpoYXNMaW5lSWZF
bXB0eSgpIGNvbnN0CiAgICAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC0+aXNSb290RWRpdGFi
bGVFbGVtZW50KCk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxpbmVIZWlnaHQoYm9v
bCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGluZVBvc2l0aW9uTW9k
ZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdAotewotICAgIC8vIElubGluZSBibG9ja3MgYXJlIHJl
cGxhY2VkIGVsZW1lbnRzLiBPdGhlcndpc2UsIGp1c3QgcGFzcyBvZmYgdG8KLSAgICAvLyB0aGUg
YmFzZSBjbGFzcy4gIElmIHdlJ3JlIGJlaW5nIHF1ZXJpZWQgYXMgdGhvdWdoIHdlJ3JlIHRoZSBy
b290IGxpbmUKLSAgICAvLyBib3gsIHRoZW4gdGhlIGZhY3QgdGhhdCB3ZSdyZSBhbiBpbmxpbmUt
YmxvY2sgaXMgaXJyZWxldmFudCwgYW5kIHdlIGJlaGF2ZQotICAgIC8vIGp1c3QgbGlrZSBhIGJs
b2NrLgotICAgIGlmIChpc0Jsb2NrTGV2ZWxSZXBsYWNlZE9yQXRvbWljSW5saW5lKCkgJiYgbGlu
ZVBvc2l0aW9uTW9kZSA9PSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpCi0gICAgICAgIHJldHVy
biBSZW5kZXJCb3g6OmxpbmVIZWlnaHQoZmlyc3RMaW5lLCBkaXJlY3Rpb24sIGxpbmVQb3NpdGlv
bk1vZGUpOwotCi0gICAgYXV0byYgbGluZVN0eWxlID0gZmlyc3RMaW5lID8gZmlyc3RMaW5lU3R5
bGUoKSA6IHN0eWxlKCk7Ci0gICAgcmV0dXJuIExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwobGlu
ZVN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJCbG9j
azo6YmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgZGly
ZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0Ci17Ci0gICAg
Ly8gSW5saW5lIGJsb2NrcyBhcmUgcmVwbGFjZWQgZWxlbWVudHMuIE90aGVyd2lzZSwganVzdCBw
YXNzIG9mZiB0bwotICAgIC8vIHRoZSBiYXNlIGNsYXNzLiAgSWYgd2UncmUgYmVpbmcgcXVlcmll
ZCBhcyB0aG91Z2ggd2UncmUgdGhlIHJvb3QgbGluZQotICAgIC8vIGJveCwgdGhlbiB0aGUgZmFj
dCB0aGF0IHdlJ3JlIGFuIGlubGluZS1ibG9jayBpcyBpcnJlbGV2YW50LCBhbmQgd2UgYmVoYXZl
Ci0gICAgLy8ganVzdCBsaWtlIGEgYmxvY2suCi0gICAgaWYgKGlzQmxvY2tMZXZlbFJlcGxhY2Vk
T3JBdG9taWNJbmxpbmUoKSAmJiBsaW5lUG9zaXRpb25Nb2RlID09IFBvc2l0aW9uT25Db250YWlu
aW5nTGluZSkgewotICAgICAgICAvLyBGb3IgImxlYWYiIHRoZW1lIG9iamVjdHMsIGxldCB0aGUg
dGhlbWUgZGVjaWRlIHdoYXQgdGhlIGJhc2VsaW5lIHBvc2l0aW9uIGlzLgotICAgICAgICAvLyBG
SVhNRTogTWlnaHQgYmUgYmV0dGVyIHRvIGhhdmUgYSBjdXN0b20gQ1NTIHByb3BlcnR5IGluc3Rl
YWQsIHNvIHRoYXQgaWYgdGhlIHRoZW1lCi0gICAgICAgIC8vIGlzIHR1cm5lZCBvZmYsIGNoZWNr
Ym94ZXMvcmFkaW9zIHdpbGwgc3RpbGwgaGF2ZSBkZWNlbnQgYmFzZWxpbmVzLgotICAgICAgICAv
LyBGSVhNRTogTmVlZCB0byBwYXRjaCBmb3JtIGNvbnRyb2xzIHRvIGRlYWwgd2l0aCB2ZXJ0aWNh
bCBsaW5lcy4KLSAgICAgICAgaWYgKHN0eWxlKCkuaGFzVXNlZEFwcGVhcmFuY2UoKSAmJiAhdGhl
bWUoKS5pc0NvbnRyb2xDb250YWluZXIoc3R5bGUoKS51c2VkQXBwZWFyYW5jZSgpKSkKLSAgICAg
ICAgICAgIHJldHVybiB0aGVtZSgpLmJhc2VsaW5lUG9zaXRpb24oKnRoaXMpOwotICAgICAgICAg
ICAgCi0gICAgICAgIC8vIENTUzIuMSBzdGF0ZXMgdGhhdCB0aGUgYmFzZWxpbmUgb2YgYW4gaW5s
aW5lIGJsb2NrIGlzIHRoZSBiYXNlbGluZSBvZiB0aGUgbGFzdCBsaW5lIGJveCBpbgotICAgICAg
ICAvLyB0aGUgbm9ybWFsIGZsb3cuICBXZSBtYWtlIGFuIGV4Y2VwdGlvbiBmb3IgbWFycXVlZXMs
IHNpbmNlIHRoZWlyIGJhc2VsaW5lcyBhcmUgbWVhbmluZ2xlc3MKLSAgICAgICAgLy8gKHRoZSBj
b250ZW50IGluc2lkZSB0aGVtIG1vdmVzKS4gIFRoaXMgbWF0Y2hlcyBXaW5JRSBhcyB3ZWxsLCB3
aGljaCBqdXN0IGJvdHRvbS1hbGlnbnMgdGhlbS4KLSAgICAgICAgLy8gV2UgYWxzbyBnaXZlIHVw
IG9uIGZpbmRpbmcgYSBiYXNlbGluZSBpZiB3ZSBoYXZlIGEgdmVydGljYWwgc2Nyb2xsYmFyLCBv
ciBpZiB3ZSBhcmUgc2Nyb2xsZWQKLSAgICAgICAgLy8gdmVydGljYWxseSAoZS5nLiwgYW4gb3Zl
cmZsb3c6aGlkZGVuIGJsb2NrIHRoYXQgaGFzIGhhZCBzY3JvbGxUb3AgbW92ZWQpLgotICAgICAg
ICBhdXRvIGlnbm9yZUJhc2VsaW5lID0gW3RoaXMsIGRpcmVjdGlvbl0oKSAtPiBib29sIHsKLSAg
ICAgICAgICAgIGlmIChpc1dyaXRpbmdNb2RlUm9vdCgpKQotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgICAgICAgICBDaGVja2VkUHRyIHNjcm9sbGFibGVBcmVhID0gbGF5ZXIo
KSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOwotICAgICAgICAgICAgaWYg
KCFzY3JvbGxhYmxlQXJlYSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgICAgIGlmIChzY3JvbGxhYmxlQXJlYS0+bWFycXVlZSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5l
KQotICAgICAgICAgICAgICAgIHJldHVybiBzY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxi
YXIoKSB8fCBzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT2Zmc2V0KCkueSgpOwotICAgICAgICAgICAg
cmV0dXJuIHNjcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJs
ZUFyZWEtPnNjcm9sbE9mZnNldCgpLngoKTsKLSAgICAgICAgfTsKLQotICAgICAgICBhdXRvIGJh
c2VsaW5lUG9zID0gaWdub3JlQmFzZWxpbmUoKSA/IHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4o
KSA6IGlubGluZUJsb2NrQmFzZWxpbmUoZGlyZWN0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChpc1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveCgpKSB7Ci0gICAgICAgICAgICAvLyBIaXN0
b3JpY2FsbHksIHdlIGRpZCB0aGlzIGNoZWNrIGZvciBhbGwgYmFzZWxpbmVzLiBCdXQgd2UgY2Fu
J3QKLSAgICAgICAgICAgIC8vIHJlbW92ZSB0aGlzIGNvZGUgZnJvbSBkZXByZWNhdGVkIGZsZXhi
b3gsIGJlY2F1c2UgaXQgZWZmZWN0aXZlbHkKLSAgICAgICAgICAgIC8vIGJyZWFrcyAtd2Via2l0
LWxpbmUtY2xhbXAsIHdoaWNoIGlzIHVzZWQgaW4gdGhlIHdpbGQgLS0gd2Ugd291bGQKLSAgICAg
ICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgYmFzZWxpbmUgYXMgaWYgLXdlYmtpdC1saW5lLWNsYW1w
IHdhc24ndCB1c2VkLgotICAgICAgICAgICAgLy8gRm9yIHNpbXBsaWNpdHksIHdlIHVzZSB0aGlz
IGZvciBhbGwgdXNlcyBvZiBkZXByZWNhdGVkIGZsZXhib3guCi0gICAgICAgICAgICBMYXlvdXRV
bml0IGJvdHRvbU9mQ29udGVudCA9IGRpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGluZSA/IGJvcmRl
clRvcCgpICsgcGFkZGluZ1RvcCgpICsgY29udGVudEJveEhlaWdodCgpIDogYm9yZGVyUmlnaHQo
KSArIHBhZGRpbmdSaWdodCgpICsgY29udGVudEJveFdpZHRoKCk7Ci0gICAgICAgICAgICBpZiAo
YmFzZWxpbmVQb3MgJiYgYmFzZWxpbmVQb3MudmFsdWUoKSA+IGJvdHRvbU9mQ29udGVudCkKLSAg
ICAgICAgICAgICAgICBiYXNlbGluZVBvcyA9IHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4oKTsK
LSAgICAgICAgfQotICAgICAgICBpZiAoYmFzZWxpbmVQb3MpCi0gICAgICAgICAgICByZXR1cm4g
ZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lID8gbWFyZ2luVG9wKCkgKyBiYXNlbGluZVBvcy52
YWx1ZSgpIDogbWFyZ2luUmlnaHQoKSArIGJhc2VsaW5lUG9zLnZhbHVlKCk7Ci0KLSAgICAgICAg
cmV0dXJuIFJlbmRlckJveDo6YmFzZWxpbmVQb3NpdGlvbihmaXJzdExpbmUsIGRpcmVjdGlvbiwg
bGluZVBvc2l0aW9uTW9kZSk7Ci0gICAgfQotCi0gICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
ID0gZmlyc3RMaW5lID8gZmlyc3RMaW5lU3R5bGUoKSA6IHRoaXMtPnN0eWxlKCk7Ci0gICAgY29u
c3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gc3R5bGUubWV0cmljc09mUHJpbWFyeUZvbnQo
KTsKLSAgICByZXR1cm4gTGF5b3V0VW5pdCB7IGZvbnRNZXRyaWNzLmludEFzY2VudCgpICsgKGxp
bmVIZWlnaHQoZmlyc3RMaW5lLCBkaXJlY3Rpb24sIGxpbmVQb3NpdGlvbk1vZGUpIC0gZm9udE1l
dHJpY3MuaW50SGVpZ2h0KCkpIC8gMiB9LnRvSW50KCk7Ci19Ci0KIHN0ZDo6b3B0aW9uYWw8TGF5
b3V0VW5pdD4gUmVuZGVyQmxvY2s6OmZpcnN0TGluZUJhc2VsaW5lKCkgY29uc3QKIHsKICAgICBp
ZiAoc2hvdWxkQXBwbHlMYXlvdXRDb250YWlubWVudCgpKQpAQCAtMjU3OCwzNiArMjUwNyw2IEBA
IHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gUmVuZGVyQmxvY2s6Omxhc3RMaW5lQmFzZWxpbmUo
KSBjb25zdAogICAgIHJldHVybiB7IH07CiB9CiAKLXN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4g
UmVuZGVyQmxvY2s6OmlubGluZUJsb2NrQmFzZWxpbmUoTGluZURpcmVjdGlvbk1vZGUgbGluZURp
cmVjdGlvbikgY29uc3QKLXsKLSAgICBpZiAoc2hvdWxkQXBwbHlMYXlvdXRDb250YWlubWVudCgp
KSB7Ci0gICAgICAgIGlmIChpc0lubGluZSgpKQotICAgICAgICAgICAgcmV0dXJuIHN5bnRoZXNp
emVkQmFzZWxpbmUoKnRoaXMsICpwYXJlbnRTdHlsZSgpLCBsaW5lRGlyZWN0aW9uLCBCb3JkZXJC
b3gpICsgKGxpbmVEaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyBtYXJnaW5Cb3R0b20oKSA6
IG1hcmdpbkxlZnQoKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgaWYgKGlz
V3JpdGluZ01vZGVSb290KCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBib29sIGhhdmVO
b3JtYWxGbG93Q2hpbGQgPSBmYWxzZTsKLSAgICBmb3IgKGF1dG8qIGJveCA9IGxhc3RDaGlsZEJv
eCgpOyBib3g7IGJveCA9IGJveC0+cHJldmlvdXNTaWJsaW5nQm94KCkpIHsKLSAgICAgICAgaWYg
KGJveC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGhhdmVOb3JtYWxGbG93Q2hpbGQgPSB0cnVlOwotICAgICAgICBpZiAo
YXV0byByZXN1bHQgPSBib3gtPmlubGluZUJsb2NrQmFzZWxpbmUobGluZURpcmVjdGlvbikpCi0g
ICAgICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCB7IChib3gtPmxvZ2ljYWxUb3AoKSArIHJlc3Vs
dC52YWx1ZSgpKS50b0ludCgpIH07IC8vIFRyYW5zbGF0ZSB0byBvdXIgY29vcmRpbmF0ZSBzcGFj
ZS4KLSAgICB9Ci0KLSAgICBpZiAoIWhhdmVOb3JtYWxGbG93Q2hpbGQgJiYgaGFzTGluZUlmRW1w
dHkoKSkgewotICAgICAgICBhdXRvJiBmb250TWV0cmljcyA9IGZpcnN0TGluZVN0eWxlKCkubWV0
cmljc09mUHJpbWFyeUZvbnQoKTsKLSAgICAgICAgcmV0dXJuIExheW91dFVuaXQgeyBMYXlvdXRV
bml0KGZvbnRNZXRyaWNzLmludEFzY2VudCgpCi0gICAgICAgICAgICArIChsaW5lSGVpZ2h0KHRy
dWUsIGxpbmVEaXJlY3Rpb24sIFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcykgLSBmb250TWV0
cmljcy5pbnRIZWlnaHQoKSkgLyAyCi0gICAgICAgICAgICArIChsaW5lRGlyZWN0aW9uID09IEhv
cml6b250YWxMaW5lID8gYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgOiBib3JkZXJSaWdodCgp
ICsgcGFkZGluZ1JpZ2h0KCkpKS50b0ludCgpIH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgfTsK
LX0KLQogc3RhdGljIGlubGluZSBib29sIGlzUmVuZGVyQmxvY2tGbG93T3JSZW5kZXJCdXR0b24o
UmVuZGVyRWxlbWVudCYgcmVuZGVyRWxlbWVudCkKIHsKICAgICAvLyBXZSBpbmNsdWRlIGlzUmVu
ZGVyQnV0dG9uIGluIHRoaXMgY2hlY2sgYmVjYXVzZSBidXR0b25zIGFyZSBpbXBsZW1lbnRlZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCAyMWQzZjc2ZjRjMDcuLjQ0
MDA1ZjFkMzkzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKQEAgLTY1
LDEwICs2NSw2IEBAIHByb3RlY3RlZDoKICAgICBSZW5kZXJCbG9jayhUeXBlLCBEb2N1bWVudCYs
IFJlbmRlclN0eWxlJiYsIE9wdGlvblNldDxUeXBlRmxhZz4sIFR5cGVTcGVjaWZpY0ZsYWdzID0g
eyB9KTsKIAogcHVibGljOgotICAgIC8vIFRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIG92ZXJyaWRk
ZW4gZm9yIGlubGluZS1ibG9jay4KLSAgICBMYXlvdXRVbml0IGxpbmVIZWlnaHQoYm9vbCBmaXJz
dExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25PbkNv
bnRhaW5pbmdMaW5lKSBjb25zdCBmaW5hbDsKLSAgICBMYXlvdXRVbml0IGJhc2VsaW5lUG9zaXRp
b24oYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0g
UG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdCBvdmVycmlkZTsKLQogICAgIC8vIEZJWE1F
LUJMT0NLRkxPVzogUmVtb3ZlIHZpcnR1YWxpemFpb24gd2hlbiBhbGwgY2FsbGVycyBoYXZlIG1v
dmVkIHRvIFJlbmRlckJsb2NrRmxvdwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVMaW5lcygpOwog
CkBAIC0yODksNyArMjg1LDYgQEAgcHJvdGVjdGVkOgogICAgIAogICAgIHN0ZDo6b3B0aW9uYWw8
TGF5b3V0VW5pdD4gZmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdCBvdmVycmlkZTsKICAgICBzdGQ6
Om9wdGlvbmFsPExheW91dFVuaXQ+IGxhc3RMaW5lQmFzZWxpbmUoKSBjb25zdCBvdmVycmlkZTsK
LSAgICBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGlubGluZUJsb2NrQmFzZWxpbmUoTGluZURp
cmVjdGlvbk1vZGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgLy8gRGVsYXkgdXBkYXRpbmcgc2Ny
b2xsYmFycyB1bnRpbCBlbmRBbmRDb21taXRVcGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXRUcmFu
c2FjdGlvbigpIGlzIGNhbGxlZC4gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkCiAgICAgLy8gd2hl
biBhIGZsZXhib3ggaXMgbGF5aW5nIG91dCBpdHMgZGVzY2VuZGFudHMuIElmIG11bHRpcGxlIGNh
bGxzIGFyZSBtYWRlIHRvIGJlZ2luVXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0VHJhbnNhY3Rp
b24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxv
dy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAppbmRl
eCA2MmI4ODY2YTkzOGQuLjNmYWYwZjQzZTJiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKQEAgLTQ2OCw3ICs0NjgsNyBAQCB2b2lkIFJlbmRlckJs
b2NrRmxvdzo6bGF5b3V0QmxvY2tXaXRoTm9DaGlsZHJlbigpCiAgICAgICAgICAgICBzZXRIYXNN
YXJnaW5CZWZvcmVRdWlyayhzdHlsZS5tYXJnaW5CZWZvcmUoKS5oYXNRdWlyaygpKTsKICAgICAg
ICAgICAgIHNldEhhc01hcmdpbkFmdGVyUXVpcmsoc3R5bGUubWFyZ2luQWZ0ZXIoKS5oYXNRdWly
aygpKTsKICAgICAgICAgfQotICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGJvcmRlckFuZFBhZGRp
bmdMb2dpY2FsSGVpZ2h0KCkgKyBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCkgKyAoaGFzTGluZUlm
RW1wdHkoKSA/IGxpbmVIZWlnaHQodHJ1ZSwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IEhv
cml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9mSW50ZXJpb3JMaW5lQm94ZXMp
IDogMF9sdSkpOworICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGJvcmRlckFuZFBhZGRpbmdMb2dp
Y2FsSGVpZ2h0KCkgKyBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCkgKyAoaGFzTGluZUlmRW1wdHko
KSA/IGxpbmVIZWlnaHQoKSA6IDBfbHUpKTsKICAgICAgICAgdXBkYXRlTG9naWNhbEhlaWdodCgp
OwogICAgIH07CiAgICAgY29tcHV0ZUJsb2NrQXhpc1NpemUoKTsKQEAgLTc4MCw3ICs3ODAsNyBA
QCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0SW5GbG93Q2hpbGRyZW4oUmVsYXlvdXRDaGls
ZHJlbiByZWxheW91dENoaWxkcmVuLCBMYQogCiAgICAgICAgIGF1dG8gbG9naWNhbEhlaWdodCA9
IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkgKyBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0
KCk7CiAgICAgICAgIGlmIChoYXNMaW5lSWZFbXB0eSgpKQotICAgICAgICAgICAgbG9naWNhbEhl
aWdodCArPSBsaW5lSGVpZ2h0KHRydWUsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBIb3Jp
em9udGFsTGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKTsK
KyAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQgKz0gbGluZUhlaWdodCgpOwogICAgICAgICBzZXRM
b2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQpOwogCiAgICAgICAgIHJlcGFpbnRMb2dpY2FsVG9w
ID0geyB9OwpAQCAtMjc0OSw3ICsyNzQ5LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFkanVz
dEluaXRpYWxMZXR0ZXJQb3NpdGlvbihSZW5kZXJCb3gmIGNoaWxkQm94LCBMYXlvdXRVbmkKICAg
ICBpZiAoIWZvbnRNZXRyaWNzLmNhcEhlaWdodCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBM
YXlvdXRVbml0IGhlaWdodE9mTGluZSA9IGxpbmVIZWlnaHQodHJ1ZSwgaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9mSW50
ZXJpb3JMaW5lQm94ZXMpOworICAgIExheW91dFVuaXQgaGVpZ2h0T2ZMaW5lID0gbGluZUhlaWdo
dCgpOwogICAgIExheW91dFVuaXQgYmVmb3JlTWFyZ2luQm9yZGVyUGFkZGluZyA9IGNoaWxkQm94
LmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKSArIGNoaWxkQm94Lm1hcmdpbkJlZm9yZSgpOwogICAg
IAogICAgIC8vIE1ha2UgYW4gYWRqdXN0bWVudCB0byBhbGlnbiB3aXRoIHRoZSBjYXAgaGVpZ2h0
IG9mIGEgdGhlb3JldGljYWwgYmxvY2sgbGluZS4KQEAgLTMyOTUsNjkgKzMyOTUsNiBAQCBzdGQ6
Om9wdGlvbmFsPExheW91dFVuaXQ+IFJlbmRlckJsb2NrRmxvdzo6bGFzdExpbmVCYXNlbGluZSgp
IGNvbnN0CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBS
ZW5kZXJCbG9ja0Zsb3c6OmlubGluZUJsb2NrQmFzZWxpbmUoTGluZURpcmVjdGlvbk1vZGUgbGlu
ZURpcmVjdGlvbikgY29uc3QKLXsKLSAgICBpZiAoaXNXcml0aW5nTW9kZVJvb3QoKSkKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLQotICAgIGlmIChzaG91bGRBcHBseUxheW91dENvbnRhaW5tZW50KCkp
Ci0gICAgICAgIHJldHVybiBSZW5kZXJCbG9jazo6aW5saW5lQmxvY2tCYXNlbGluZShsaW5lRGly
ZWN0aW9uKTsKLQotICAgIFJlZlB0ciBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpOwotICAgIGJv
b2wgaXNIVE1MRm9ybUNvbnRyb2xFbGVtZW50ID0gZWxlbWVudCAmJiBlbGVtZW50LT5pc0Zvcm1D
b250cm9sRWxlbWVudCgpOwotICAgIGlmIChzdHlsZSgpLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlw
ZTo6SW5saW5lQmxvY2spIHsKLSAgICAgICAgLy8gVGhlIGJhc2VsaW5lIG9mIGFuICdpbmxpbmUt
YmxvY2snIGlzIHRoZSBiYXNlbGluZSBvZiBpdHMgbGFzdCBsaW5lIGJveCBpbiB0aGUgbm9ybWFs
IGZsb3csIHVubGVzcyBpdCBoYXMgZWl0aGVyIG5vIGluLWZsb3cgbGluZSBib3hlcyBvciBpZiBp
dHMgJ292ZXJmbG93JwotICAgICAgICAvLyBwcm9wZXJ0eSBoYXMgYSBjb21wdXRlZCB2YWx1ZSBv
dGhlciB0aGFuICd2aXNpYmxlJy4gc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMi92aXN1
ZGV0Lmh0bWwKLSAgICAgICAgYXV0byBzaG91bGRTeW50aGVzaXplQmFzZWxpbmUgPSAhc3R5bGUo
KS5pc092ZXJmbG93VmlzaWJsZSgpICYmICFpc0hUTUxGb3JtQ29udHJvbEVsZW1lbnQgJiYgIWlz
UmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrKCk7Ci0gICAgICAgIGlmIChzaG91bGRTeW50aGVz
aXplQmFzZWxpbmUpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLSAgICAvLyBOb3Rl
IHRoYXQgaGVyZSB3ZSBvbmx5IHRha2UgdGhlIGxlZnQgYW5kIGJvdHRvbSBpbnRvIGNvbnNpZGVy
YXRpb24uIE91ciBjYWxsZXIgdGFrZXMgdGhlIHJpZ2h0IGFuZCB0b3AgaW50byBjb25zaWRlcmF0
aW9uLgotICAgIGF1dG8gYm94SGVpZ2h0ID0gc3ludGhlc2l6ZWRCYXNlbGluZSgqdGhpcywgKnBh
cmVudFN0eWxlKCksIGxpbmVEaXJlY3Rpb24sIEJvcmRlckJveCkgKyAobGluZURpcmVjdGlvbiA9
PSBIb3Jpem9udGFsTGluZSA/IG1fbWFyZ2luQm94LmJvdHRvbSgpIDogbV9tYXJnaW5Cb3gubGVm
dCgpKTsKLSAgICBMYXlvdXRVbml0IGxhc3RCYXNlbGluZTsKLSAgICBpZiAoIWNoaWxkcmVuSW5s
aW5lKCkpIHsKLSAgICAgICAgYXV0byBpbmxpbmVCbG9ja0Jhc2VsaW5lID0gUmVuZGVyQmxvY2s6
OmlubGluZUJsb2NrQmFzZWxpbmUobGluZURpcmVjdGlvbik7Ci0gICAgICAgIGlmICghaW5saW5l
QmxvY2tCYXNlbGluZSkKLSAgICAgICAgICAgIHJldHVybiBpbmxpbmVCbG9ja0Jhc2VsaW5lOwot
ICAgICAgICBsYXN0QmFzZWxpbmUgPSBpbmxpbmVCbG9ja0Jhc2VsaW5lLnZhbHVlKCk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgaWYgKCFoYXNMaW5lcygpKSB7Ci0gICAgICAgICAgICBpZiAoIWhh
c0xpbmVJZkVtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAg
ICAgICAgICAgIGNvbnN0IGF1dG8mIGZvbnRNZXRyaWNzID0gZmlyc3RMaW5lU3R5bGUoKS5tZXRy
aWNzT2ZQcmltYXJ5Rm9udCgpOwotICAgICAgICAgICAgcmV0dXJuIExheW91dFVuaXQgeyBMYXlv
dXRVbml0KGZvbnRNZXRyaWNzLmludEFzY2VudCgpCi0gICAgICAgICAgICAgICAgKyAobGluZUhl
aWdodCh0cnVlLCBsaW5lRGlyZWN0aW9uLCBQb3NpdGlvbk9mSW50ZXJpb3JMaW5lQm94ZXMpIC0g
Zm9udE1ldHJpY3MuaW50SGVpZ2h0KCkpIC8gMgotICAgICAgICAgICAgICAgICsgKGxpbmVEaXJl
Y3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSA6IGJv
cmRlclJpZ2h0KCkgKyBwYWRkaW5nUmlnaHQoKSkpLnRvSW50KCkgfTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChzdmdUZXh0TGF5b3V0KCkpIHsKLSAgICAgICAgICAgIGF1dG8mIHN0eWxlID0g
Zmlyc3RMaW5lU3R5bGUoKTsKLSAgICAgICAgICAgIC8vIExlZ2FjeUlubGluZUZsb3dCb3g6OnBs
YWNlQm94ZXNJbkJsb2NrRGlyZWN0aW9uIHdpbGwgZmxpcCBsaW5lcyBpbiBjYXNlIG9mIHZlcnRp
Y2FsTFIgbW9kZSwgc28gd2UgY2FuIGFzc3VtZSB2ZXJ0aWNhbFJMIGZvciBub3cuCi0gICAgICAg
ICAgICBsYXN0QmFzZWxpbmUgPSBzdHlsZS5tZXRyaWNzT2ZQcmltYXJ5Rm9udCgpLmludEFzY2Vu
dChsZWdhY3lSb290Qm94KCktPmJhc2VsaW5lVHlwZSgpKQotICAgICAgICAgICAgICAgICsgKHN0
eWxlLndyaXRpbmdNb2RlKCkuaXNMaW5lSW52ZXJ0ZWQoKSA/IGxvZ2ljYWxIZWlnaHQoKSAtIGxl
Z2FjeVJvb3RCb3goKS0+bG9naWNhbEJvdHRvbSgpIDogbGVnYWN5Um9vdEJveCgpLT5sb2dpY2Fs
VG9wKCkpOwotICAgICAgICB9IGVsc2UgaWYgKGlubGluZUxheW91dCgpKQotICAgICAgICAgICAg
bGFzdEJhc2VsaW5lID0gZmxvb3JUb0ludChpbmxpbmVMYXlvdXQoKS0+bGFzdExpbmVMb2dpY2Fs
QmFzZWxpbmUoKSk7Ci0gICAgfQotCi0gICAgaWYgKHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3Zl
cmZsb3c6OlZpc2libGUpCi0gICAgICAgIHJldHVybiBsYXN0QmFzZWxpbmU7Ci0KLSAgICAvLyBX
aGlsZSBjc3MtYWxpZ24tMyBkZWZpbmVzIHRoZSBsYXN0IGJhc2VsaW5lIGZvcm0gYmxvY2sgY29u
dGFpbmVycyB3aGljaCBhcmUKLSAgICAvLyBzY3JvbGwgY29udGFpbmVycyAod2l0aCBhbiBpbml0
aWFsIGJhc2VsaW5lLXNvdXJjZSB2YWx1ZSkgYXMgdGhlIGJsb2NrLWVuZCBtYXJnaW4KLSAgICAv
LyBlZGdlLCB3ZSBpbnN0ZWFkIG1haW50YWluIG91ciBsZWdhY3kgYmVoYXZpb3IgZm9yIGZvcm0g
Y29udHJvbHMgYW5kIGNvbnRlbnQKLSAgICAvLyBpbnNpZGUgZm9ybSBjb250cm9scyB0byBtYWlu
dGFpbiBjb21wYXRpYmlsaXR5LgotICAgIGF1dG8gaXNJbkZvcm1Db250cm9sID0gWyZdIHsKLSAg
ICAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBp
ZiAoUmVmUHRyIHNoYWRvd0hvc3QgPSBlbGVtZW50LT5zaGFkb3dIb3N0KCkpCi0gICAgICAgICAg
ICByZXR1cm4gc2hhZG93SG9zdC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH07Ci0gICAgaWYgKGlzSFRNTEZvcm1Db250cm9sRWxlbWVudCB8fCBp
c0luRm9ybUNvbnRyb2woKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWluKGJveEhlaWdodCwgbGFz
dEJhc2VsaW5lKTsKLSAgICByZXR1cm4gYm94SGVpZ2h0OwotfQotCiBMYXlvdXRVbml0IFJlbmRl
ckJsb2NrRmxvdzo6YWRqdXN0RW5jbG9zaW5nVG9wRm9yUHJlY2VkaW5nQmxvY2soTGF5b3V0VW5p
dCB0b3ApIGNvbnN0CiB7CiAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0
OjpIaWdobGlnaHRTdGF0ZTo6SW5zaWRlICYmIHNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2Jq
ZWN0OjpIaWdobGlnaHRTdGF0ZTo6RW5kKQpAQCAtNDA0NSw3ICszOTgyLDcgQEAgdm9pZCBSZW5k
ZXJCbG9ja0Zsb3c6OmxheW91dElubGluZUNvbnRlbnQoUmVsYXlvdXRDaGlsZHJlbiByZWxheW91
dENoaWxkcmVuLCBMYXkKICAgICBhdXRvIHBhcnRpYWxSZXBhaW50UmVjdCA9IGxheW91dEZvcm1h
dHRpbmdDb250ZXh0TGluZUxheW91dC5sYXlvdXQocmVsYXlvdXRDaGlsZHJlbiA9PSBSZWxheW91
dENoaWxkcmVuOjpZZXMgPyBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Rm9yY2VGdWxs
TGF5b3V0OjpZZXMgOiBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Rm9yY2VGdWxsTGF5
b3V0OjpObyk7CiAKICAgICBhdXRvIGJvcmRlckJveEJvdHRvbSA9IFsmXSB7Ci0gICAgICAgIGF1
dG8gY29udGVudEhlaWdodCA9ICFoYXNMaW5lcygpICYmIGhhc0xpbmVJZkVtcHR5KCkgPyBsaW5l
SGVpZ2h0KHRydWUsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBIb3Jpem9udGFsTGluZSA6
IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKSA6IGxheW91dEZvcm1h
dHRpbmdDb250ZXh0TGluZUxheW91dC5jb250ZW50TG9naWNhbEhlaWdodCgpOworICAgICAgICBh
dXRvIGNvbnRlbnRIZWlnaHQgPSAhaGFzTGluZXMoKSAmJiBoYXNMaW5lSWZFbXB0eSgpID8gbGlu
ZUhlaWdodCgpIDogbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNvbnRlbnRMb2dp
Y2FsSGVpZ2h0KCk7CiAgICAgICAgIHJldHVybiBib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkgKyBj
b250ZW50SGVpZ2h0ICsgYm9yZGVyQW5kUGFkZGluZ0FmdGVyKCkgKyBzY3JvbGxiYXJMb2dpY2Fs
SGVpZ2h0KCk7CiAgICAgfTsKICAgICBhdXRvIG5ld0JvcmRlckJveEJvdHRvbSA9IGJvcmRlckJv
eEJvdHRvbSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrRmxvdy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCmlu
ZGV4IDRjNzM5MTIxMWJhNS4uOGU0MGExNDZhMDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrRmxvdy5oCkBAIC00NDksNyArNDQ5LDYgQEAgcHJvdGVjdGVkOgogCiAg
ICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBmaXJzdExpbmVCYXNlbGluZSgpIGNvbnN0IG92
ZXJyaWRlOwogICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gbGFzdExpbmVCYXNlbGluZSgp
IGNvbnN0IG92ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gaW5saW5lQmxv
Y2tCYXNlbGluZShMaW5lRGlyZWN0aW9uTW9kZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lk
IHNldENvbXB1dGVkQ29sdW1uQ291bnRBbmRXaWR0aChpbnQsIExheW91dFVuaXQpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDhlM2Q4NWJiOGVlOC4uZjE3YzAy
MDE0NmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtNzksNiAr
NzksNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVySW5saW5lcy5oIgogI2luY2x1ZGUgIlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgor
I2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJNYXRoTUxCbG9j
ay5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRl
ck9iamVjdElubGluZXMuaCIKQEAgLTQ5NDQsMTggKzQ5NDUsMTUgQEAgYm9vbCBSZW5kZXJCb3g6
OmlzVW5zcGxpdHRhYmxlRm9yUGFnaW5hdGlvbigpIGNvbnN0CiAgICAgICAgIHx8IHNob3VsZEFw
cGx5U2l6ZUNvbnRhaW5tZW50KCk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyQm94OjpsaW5lSGVp
Z2h0KGJvb2wgLypmaXJzdExpbmUqLywgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5l
UG9zaXRpb25Nb2RlIC8qbGluZVBvc2l0aW9uTW9kZSovKSBjb25zdAorTGF5b3V0VW5pdCBSZW5k
ZXJCb3g6OmxpbmVIZWlnaHQoKSBjb25zdAogewotICAgIGlmIChpc0Jsb2NrTGV2ZWxSZXBsYWNl
ZE9yQXRvbWljSW5saW5lKCkpCi0gICAgICAgIHJldHVybiBkaXJlY3Rpb24gPT0gSG9yaXpvbnRh
bExpbmUgPyBtX21hcmdpbkJveC50b3AoKSArIGhlaWdodCgpICsgbV9tYXJnaW5Cb3guYm90dG9t
KCkgOiBtX21hcmdpbkJveC5yaWdodCgpICsgd2lkdGgoKSArIG1fbWFyZ2luQm94LmxlZnQoKTsK
LSAgICByZXR1cm4gMDsKLX0KKyAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KCp0aGlzKSB8fCAoaXM8
UmVuZGVyTGlzdE1hcmtlcj4oKnRoaXMpICYmICFkb3duY2FzdDxSZW5kZXJMaXN0TWFya2VyPigq
dGhpcykuaXNJbWFnZSgpKSkKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQ6OmZyb21GbG9hdENl
aWwoZmlyc3RMaW5lU3R5bGUoKS5jb21wdXRlZExpbmVIZWlnaHQoKSk7CiAKLUxheW91dFVuaXQg
UmVuZGVyQm94OjpiYXNlbGluZVBvc2l0aW9uKGJvb2wgLypmaXJzdExpbmUqLywgTGluZURpcmVj
dGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIC8qbGluZVBvc2l0aW9uTW9kZSov
KSBjb25zdAotewogICAgIGlmIChpc0Jsb2NrTGV2ZWxSZXBsYWNlZE9yQXRvbWljSW5saW5lKCkp
Ci0gICAgICAgIHJldHVybiByb3VuZFRvSW50KGRpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGluZSA/
IG1fbWFyZ2luQm94LnRvcCgpICsgaGVpZ2h0KCkgKyBtX21hcmdpbkJveC5ib3R0b20oKSA6IG1f
bWFyZ2luQm94LnJpZ2h0KCkgKyB3aWR0aCgpICsgbV9tYXJnaW5Cb3gubGVmdCgpKTsKLSAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG1hcmdpbkJlZm9yZSgpICsgbG9naWNhbEhlaWdodCgp
ICsgbWFyZ2luQWZ0ZXIoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIFJlbmRlckxheWVyKiBS
ZW5kZXJCb3g6OmVuY2xvc2luZ0Zsb2F0UGFpbnRpbmdMYXllcigpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggMTllMjI2ZTVjZjM1Li5mZjk1ZDk0NTM1ZWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTI0Miw2ICsyNDIsOCBAQCBwdWJs
aWM6CiAgICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1hcmdpblN0
YXJ0KHdyaXRpbmdNb2RlKCkpOyB9CiAgICAgTGF5b3V0VW5pdCBtYXJnaW5FbmQoKSBjb25zdCB7
IHJldHVybiBtYXJnaW5FbmQod3JpdGluZ01vZGUoKSk7IH0KIAorICAgIGlubGluZSBMYXlvdXRV
bml0IG1hcmdpbkJveExvZ2ljYWxIZWlnaHQoV3JpdGluZ01vZGUpIGNvbnN0OworCiAgICAgdm9p
ZCBzZXRNYXJnaW5CZWZvcmUoTGF5b3V0VW5pdCB2YWx1ZSwgY29uc3QgV3JpdGluZ01vZGUgd3Jp
dGluZ01vZGUpIHsgbV9tYXJnaW5Cb3guc2V0QmVmb3JlKHZhbHVlLCB3cml0aW5nTW9kZSk7IH0K
ICAgICB2b2lkIHNldE1hcmdpbkFmdGVyKExheW91dFVuaXQgdmFsdWUsIGNvbnN0IFdyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlKSB7IG1fbWFyZ2luQm94LnNldEFmdGVyKHZhbHVlLCB3cml0aW5nTW9k
ZSk7IH0KICAgICB2b2lkIHNldE1hcmdpblN0YXJ0KExheW91dFVuaXQgdmFsdWUsIGNvbnN0IFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlKSB7IG1fbWFyZ2luQm94LnNldFN0YXJ0KHZhbHVlLCB3cml0
aW5nTW9kZSk7IH0KQEAgLTUxOCw3ICs1MjAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVh
bCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGZpcnN0TGluZUJhc2VsaW5lKCkgY29uc3QgeyBy
ZXR1cm4geyB9OyB9CiAgICAgdmlydHVhbCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGxhc3RM
aW5lQmFzZWxpbmUoKSBjb25zdCB7IHJldHVybiB7IH07IH0KLSAgICB2aXJ0dWFsIHN0ZDo6b3B0
aW9uYWw8TGF5b3V0VW5pdD4gaW5saW5lQmxvY2tCYXNlbGluZShMaW5lRGlyZWN0aW9uTW9kZSkg
Y29uc3QgeyByZXR1cm4geyB9OyB9IC8vIFJldHVybnMgZW1wdHkgaWYgd2Ugc2hvdWxkIHNraXAg
dGhpcyBib3ggd2hlbiBjb21wdXRpbmcgdGhlIGJhc2VsaW5lIG9mIGFuIGlubGluZS1ibG9jay4K
KyAgICB2aXJ0dWFsIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gaW5saW5lQmxvY2tCYXNlbGlu
ZSgpIGNvbnN0IHsgcmV0dXJuIHsgfTsgfSAvLyBSZXR1cm5zIGVtcHR5IGlmIHdlIHNob3VsZCBz
a2lwIHRoaXMgYm94IHdoZW4gY29tcHV0aW5nIHRoZSBiYXNlbGluZSBvZiBhbiBpbmxpbmUtYmxv
Y2suCiAgICAgTGF5b3V0VW5pdCBzeW50aGVzaXplQmFzZWxpbmUoRm9udEJhc2VsaW5lIGJhc2Vs
aW5lVHlwZSwgQmFzZWxpbmVTeW50aGVzaXNFZGdlKSBjb25zdDsKIAogICAgIGJvb2wgc2hyaW5r
VG9Bdm9pZEZsb2F0cygpIGNvbnN0OwpAQCAtNTI2LDggKzUyOCw3IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgdm9pZCBtYXJrRm9yUGFnaW5hdGlvblJlbGF5b3V0SWZOZWVkZWQoKSB7IH0KICAg
ICAKLSAgICBMYXlvdXRVbml0IGxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rp
b25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25z
dCBvdmVycmlkZTsKLSAgICBMYXlvdXRVbml0IGJhc2VsaW5lUG9zaXRpb24oYm9vbCBmaXJzdExp
bmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25PbkNvbnRh
aW5pbmdMaW5lKSBjb25zdCBvdmVycmlkZTsKKyAgICBMYXlvdXRVbml0IGxpbmVIZWlnaHQoKSBj
b25zdDsKIAogICAgIExheW91dFVuaXQgb2Zmc2V0TGVmdCgpIGNvbnN0IG92ZXJyaWRlOwogICAg
IExheW91dFVuaXQgb2Zmc2V0VG9wKCkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94SW5saW5lcy5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveElubGluZXMuaAppbmRleCBiNjY1NjkzM2RjMjEuLjJiY2NjMmI1
MWQ2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveElubGlu
ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94SW5saW5lcy5oCkBA
IC0yNiw2ICsyNiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAoraW5saW5lIExheW91dFVu
aXQgUmVuZGVyQm94OjptYXJnaW5Cb3hMb2dpY2FsSGVpZ2h0KFdyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlKSBjb25zdCB7IHJldHVybiB3cml0aW5nTW9kZS5pc0hvcml6b250YWwoKSA/IG1fbWFyZ2lu
Qm94LnRvcCgpICsgaGVpZ2h0KCkgKyBtX21hcmdpbkJveC5ib3R0b20oKSA6IG1fbWFyZ2luQm94
LnJpZ2h0KCkgKyB3aWR0aCgpICsgbV9tYXJnaW5Cb3gubGVmdCgpOyB9CiBpbmxpbmUgTGF5b3V0
U2l6ZSBSZW5kZXJCb3g6OmJvcmRlckJveExvZ2ljYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbG9n
aWNhbFNpemUoKTsgfQogaW5saW5lIExheW91dFJlY3QgUmVuZGVyQm94OjpjbGllbnRCb3hSZWN0
KCkgY29uc3QgeyByZXR1cm4gTGF5b3V0UmVjdChjbGllbnRMZWZ0KCksIGNsaWVudFRvcCgpLCBj
bGllbnRXaWR0aCgpLCBjbGllbnRIZWlnaHQoKSk7IH0KIGlubGluZSBMYXlvdXRVbml0IFJlbmRl
ckJveDo6Y2xpZW50TGVmdCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRlckxlZnQoKTsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAppbmRleCAzZjIz
MDM3YTYyNDIuLmQ3MWIzNGZlMzA2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmgKQEAgLTMxLDcgKzMxLDYgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogLy8gTW9kZXMgZm9yIHNvbWUgb2YgdGhlIGxpbmUtcmVsYXRlZCBmdW5jdGlvbnMu
Ci1lbnVtIExpbmVQb3NpdGlvbk1vZGUgeyBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUsIFBvc2l0
aW9uT2ZJbnRlcmlvckxpbmVCb3hlcyB9OwogZW51bSBMaW5lRGlyZWN0aW9uTW9kZSB7IEhvcml6
b250YWxMaW5lLCBWZXJ0aWNhbExpbmUgfTsKIAogZW51bSBjbGFzcyBCbGVlZEF2b2lkYW5jZSA6
IHVpbnQ4X3QgewpAQCAtMTk0LDEwICsxOTMsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIExh
eW91dFVuaXQgY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudCgpIGNvbnN0Owog
Ci0gICAgLy8gT3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzIHRvIGRldGVybWluZSBsaW5lIGhlaWdo
dCBhbmQgYmFzZWxpbmUgcG9zaXRpb24uCi0gICAgdmlydHVhbCBMYXlvdXRVbml0IGxpbmVIZWln
aHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0g
UG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBMYXlvdXRV
bml0IGJhc2VsaW5lUG9zaXRpb24oYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBM
aW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdCA9IDA7Ci0K
ICAgICB2b2lkIG1hcEFic29sdXRlVG9Mb2NhbFBvaW50KE9wdGlvblNldDxNYXBDb29yZGluYXRl
c01vZGU+LCBUcmFuc2Zvcm1TdGF0ZSYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRT
ZWxlY3Rpb25TdGF0ZShIaWdobGlnaHRTdGF0ZSkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCmluZGV4IDAwNjgzYzU5YjM2Ni4uMjcxYjUzNjkwOTY1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcApAQCAtMTYxLDIy
ICsxNjEsNiBAQCBMYXlvdXRSZWN0IFJlbmRlckJ1dHRvbjo6Y29udHJvbENsaXBSZWN0KGNvbnN0
IExheW91dFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0KSBjbwogICAgIHJldHVybiBMYXlvdXRSZWN0
KGFkZGl0aW9uYWxPZmZzZXQueCgpICsgYm9yZGVyTGVmdCgpLCBhZGRpdGlvbmFsT2Zmc2V0Lnko
KSArIGJvcmRlclRvcCgpLCB3aWR0aCgpIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSwg
aGVpZ2h0KCkgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpKTsKIH0KIAotc3RhdGljIExh
eW91dFVuaXQgc3ludGhlc2l6ZWRCYXNlbGluZUZyb21Db250ZW50Qm94KGNvbnN0IFJlbmRlckJv
eCYgYm94LCBMaW5lRGlyZWN0aW9uTW9kZSBkaXJlY3Rpb24pCi17Ci0gICAgcmV0dXJuIGRpcmVj
dGlvbiA9PSBIb3Jpem9udGFsTGluZSA/IGJveC5ib3JkZXJUb3AoKSArIGJveC5wYWRkaW5nVG9w
KCkgKyBib3guY29udGVudEJveEhlaWdodCgpIDogYm94LmJvcmRlclJpZ2h0KCkgKyBib3gucGFk
ZGluZ1JpZ2h0KCkgKyBib3guY29udGVudEJveFdpZHRoKCk7Ci19Ci0KLUxheW91dFVuaXQgUmVu
ZGVyQnV0dG9uOjpiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9u
TW9kZSBkaXJlY3Rpb24sIExpbmVQb3NpdGlvbk1vZGUgbW9kZSkgY29uc3QKLXsKLSAgICBpZiAo
c2hvdWxkQXBwbHlMYXlvdXRDb250YWlubWVudCgpKQotICAgICAgICByZXR1cm4gUmVuZGVyRmxl
eGlibGVCb3g6OmJhc2VsaW5lUG9zaXRpb24oZmlyc3RMaW5lLCBkaXJlY3Rpb24sIG1vZGUpOwot
ICAgIC8vIFdlIGNhbm5vdCByZWx5IG9uIFJlbmRlckZsZXhpYmxlQm94OjpiYXNlbGluZVBvc2l0
aW9uKCkgYmVjYXVzZSBvZiBmbGV4Ym94ZXMgaGF2ZSBzb21lIHNwZWNpYWwgYmVoYXZpb3IKLSAg
ICAvLyByZWdhcmRpbmcgYmFzZWxpbmVzIHRoYXQgc2hvdWxkbid0IGFwcGx5IHRvIGJ1dHRvbnMu
Ci0gICAgTGF5b3V0VW5pdCBiYXNlbGluZSA9IGZpcnN0TGluZUJhc2VsaW5lKCkudmFsdWVfb3Io
c3ludGhlc2l6ZWRCYXNlbGluZUZyb21Db250ZW50Qm94KCp0aGlzLCBkaXJlY3Rpb24pKTsKLSAg
ICBMYXlvdXRVbml0IG1hcmdpbkFzY2VudCA9IGRpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGluZSA/
IG1hcmdpblRvcCgpIDogbWFyZ2luUmlnaHQoKTsKLSAgICByZXR1cm4gYmFzZWxpbmUgKyBtYXJn
aW5Bc2NlbnQ7Ci19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogdm9pZCBSZW5kZXJCdXR0
b246OmxheW91dCgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQnV0dG9uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmgKaW5k
ZXggODdjZjNhZWY0ZDAzLi5mNjhiNmY0ZGYxY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCdXR0b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQnV0dG9uLmgKQEAgLTY2LDggKzY2LDYgQEAgcHVibGljOgogICAgIFJlbmRlckJsb2Nr
KiBpbm5lclJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9pbm5lci5nZXQoKTsgfQogICAgIHZv
aWQgc2V0SW5uZXJSZW5kZXJlcihSZW5kZXJCbG9jayYpOwogCi0gICAgTGF5b3V0VW5pdCBiYXNl
bGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0
aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29uc3Qgb3ZlcnJpZGU7Ci0KIHBy
aXZhdGU6CiAgICAgdm9pZCBlbGVtZW50KCkgY29uc3QgPSBkZWxldGU7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5j
cHAKaW5kZXggYWY4ODZmNWUyZWI1Li4zMTk4ZDllOTRiZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCkBA
IC01MTAsNyArNTEwLDcgQEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OmxheW91
dEhvcml6b250YWxCb3goUmVsYXlvdXRDaGlsZHJlbiByZWxheW91dEMKICAgICAgICAgQVNTRVJU
KGNoaWxkSW5kZXggPT0gY2hpbGRMYXlvdXREZWx0YXMuc2l6ZSgpKTsKIAogICAgICAgICBpZiAo
IWl0ZXJhdG9yLmZpcnN0KCkgJiYgaGFzTGluZUlmRW1wdHkoKSkKLSAgICAgICAgICAgIHNldEhl
aWdodChoZWlnaHQoKSArIGxpbmVIZWlnaHQodHJ1ZSwgd3JpdGluZ01vZGUoKS5pc0hvcml6b250
YWwoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9mSW50ZXJpb3JM
aW5lQm94ZXMpKTsKKyAgICAgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArIGxpbmVIZWlnaHQo
KSk7CiAKICAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgdG9BZGQpOwogCkBAIC04NDgsNyAr
ODQ4LDcgQEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OmxheW91dFZlcnRpY2Fs
Qm94KFJlbGF5b3V0Q2hpbGRyZW4gcmVsYXlvdXRDaGkKICAgICAgICAgeVBvcyA9IGhlaWdodCgp
OwogCiAgICAgICAgIGlmICghaXRlcmF0b3IuZmlyc3QoKSAmJiBoYXNMaW5lSWZFbXB0eSgpKQot
ICAgICAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgbGluZUhlaWdodCh0cnVlLCB3cml0aW5n
TW9kZSgpLmlzSG9yaXpvbnRhbCgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExpbmUsIFBv
c2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcykpOworICAgICAgICAgICAgc2V0SGVpZ2h0KGhlaWdo
dCgpICsgbGluZUhlaWdodCgpKTsKIAogICAgICAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyB0b0Fk
ZCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBs
b2FkQ29udHJvbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2wuY3BwCmluZGV4IGYwMDg5NWM0YjdmNC4uZjVkNDNmNGQzYWVlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAK
QEAgLTIwNyw4ICsyMDcsOCBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWludENv
bnRyb2woUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaQogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICByZXR1cm4gcm91bmRUb0ludChiYXNlbGluZVBvc2l0aW9uKHRydWUsIGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9uT25Db250
YWluaW5nTGluZSkpOworICAgICAgICAgICAgLy8gRmlsZSB1cGxvYWQgYnV0dG9uIGlzIGRpc3Bs
YXk6IG5vbmUgKHNlZSA6OmZpbGUtc2VsZWN0b3ItYnV0dG9uKS4KKyAgICAgICAgICAgIHJldHVy
biByb3VuZFRvSW50KG1hcmdpbkJveExvZ2ljYWxIZWlnaHQoY29udGFpbmluZ0Jsb2NrKCktPndy
aXRpbmdNb2RlKCkpKTsKICAgICAgICAgfSgpOwogCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0
KCkuc2V0RmlsbENvbG9yKHN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmls
dGVyKENTU1Byb3BlcnR5Q29sb3IpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmxleGlibGVCb3guY3BwCmluZGV4IDhhNmFlNTNiYzM2OC4uMjhhMzhlZDkzMGMyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAKQEAgLTI2
NCwxNSArMjY0LDYgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6Y29tcHV0ZUNoaWxkSW50cmlu
c2ljTG9naWNhbFdpZHRocyhSZW5kZXJCb3gmIGZsZXhCb3hDaGkKICAgICBSZW5kZXJCbG9jazo6
Y29tcHV0ZUNoaWxkSW50cmluc2ljTG9naWNhbFdpZHRocyhmbGV4Qm94Q2hpbGQsIG1pblByZWZl
cnJlZExvZ2ljYWxXaWR0aCwgbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKTsKIH0KIAotTGF5b3V0
VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6YmFzZWxpbmVQb3NpdGlvbihib29sLCBMaW5lRGlyZWN0
aW9uTW9kZSBkaXJlY3Rpb24sIExpbmVQb3NpdGlvbk1vZGUpIGNvbnN0Ci17Ci0gICAgYXV0byBi
YXNlbGluZSA9IGZpcnN0TGluZUJhc2VsaW5lKCk7Ci0gICAgaWYgKCFiYXNlbGluZSkKLSAgICAg
ICAgcmV0dXJuIHN5bnRoZXNpemVkQmFzZWxpbmUoKnRoaXMsICpwYXJlbnRTdHlsZSgpLCBkaXJl
Y3Rpb24sIEJvcmRlckJveCkgKyBtYXJnaW5Mb2dpY2FsSGVpZ2h0KCk7Ci0KLSAgICByZXR1cm4g
YmFzZWxpbmUudmFsdWUoKSArIChkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyBtYXJnaW5U
b3AoKSA6IG1hcmdpblJpZ2h0KCkpLnRvSW50KCk7Ci19Ci0KIHN0ZDo6b3B0aW9uYWw8TGF5b3V0
VW5pdD4gUmVuZGVyRmxleGlibGVCb3g6OmZpcnN0TGluZUJhc2VsaW5lKCkgY29uc3QKIHsKICAg
ICBpZiAoKGlzV3JpdGluZ01vZGVSb290KCkgJiYgIWlzRmxleEl0ZW0oKSkgfHwgIW1fbnVtYmVy
T2ZGbGV4SXRlbXNPbkZpcnN0TGluZSB8fCBzaG91bGRBcHBseUxheW91dENvbnRhaW5tZW50KCkp
CkBAIC0zMjMsMTEgKzMxNCw2IEBAIHN0ZDo6b3B0aW9uYWwgPExheW91dFVuaXQ+IFJlbmRlckZs
ZXhpYmxlQm94OjpsYXN0TGluZUJhc2VsaW5lKCkgY29uc3QKICAgICByZXR1cm4gTGF5b3V0VW5p
dCB7IChiYXNlbGluZS52YWx1ZSgpICsgYmFzZWxpbmVGbGV4SXRlbS0+bG9naWNhbFRvcCgpKS50
b0ludCgpIH07CiB9CiAKLXN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gUmVuZGVyRmxleGlibGVC
b3g6OmlubGluZUJsb2NrQmFzZWxpbmUoTGluZURpcmVjdGlvbk1vZGUpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGZpcnN0TGluZUJhc2VsaW5lKCk7Ci19Ci0KIHN0YXRpYyBjb25zdCBTdHlsZUNvbnRl
bnRBbGlnbm1lbnREYXRhJiBjb250ZW50QWxpZ25tZW50Tm9ybWFsQmVoYXZpb3IoKQogewogICAg
IC8vIFRoZSBqdXN0aWZ5LWNvbnRlbnQgcHJvcGVydHkgYXBwbGllcyBhbG9uZyB0aGUgbWFpbiBh
eGlzLCBidXQgc2luY2UKQEAgLTEzNDYsNyArMTMzMiw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVC
b3g6OnBlcmZvcm1GbGV4TGF5b3V0KFJlbGF5b3V0Q2hpbGRyZW4gcmVsYXlvdXRDaGlsZHJlbikK
IAogICAgIGlmIChhbGxJdGVtcy5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKGhhc0xpbmVJZkVt
cHR5KCkpIHsKLSAgICAgICAgICAgIGF1dG8gbWluSGVpZ2h0ID0gYm9yZGVyQW5kUGFkZGluZ0xv
Z2ljYWxIZWlnaHQoKSArIGxpbmVIZWlnaHQodHJ1ZSwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9mSW50ZXJpb3JMaW5l
Qm94ZXMpICsgc2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpOworICAgICAgICAgICAgYXV0byBtaW5I
ZWlnaHQgPSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpICsgbGluZUhlaWdodCgpICsg
c2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpOwogICAgICAgICAgICAgaWYgKGhlaWdodCgpIDwgbWlu
SGVpZ2h0KQogICAgICAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQobWluSGVpZ2h0KTsKICAg
ICAgICAgfQpAQCAtMTQyMyw3ICsxNDA5LDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6cGVy
Zm9ybUZsZXhMYXlvdXQoUmVsYXlvdXRDaGlsZHJlbiByZWxheW91dENoaWxkcmVuKQogICAgICAg
ICAvLyBhIGxpbmUgYmVjYXVzZSBhbGwgb3VyIGNoaWxkcmVuIG1pZ2h0IGJlIG91dCBvZiBmbG93
IHBvc2l0aW9uZWQuCiAgICAgICAgIC8vIEluc3RlYWQgb2YganVzdCBjaGVja2luZyBpZiB3ZSBo
YXZlIGEgbGluZSwgbWFrZSBzdXJlIHRoZSBmbGV4Ym94CiAgICAgICAgIC8vIGhhcyBhdCBsZWFz
dCBhIGxpbmUncyB3b3J0aCBvZiBoZWlnaHQgdG8gY292ZXIgdGhpcyBjYXNlLgotICAgICAgICBM
YXlvdXRVbml0IG1pbkhlaWdodCA9IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkgKyBs
aW5lSGVpZ2h0KHRydWUsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBIb3Jpem9udGFsTGlu
ZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKSArIHNjcm9sbGJh
ckxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBtaW5IZWlnaHQgPSBib3JkZXJB
bmRQYWRkaW5nTG9naWNhbEhlaWdodCgpICsgbGluZUhlaWdodCgpICsgc2Nyb2xsYmFyTG9naWNh
bEhlaWdodCgpOwogICAgICAgICBpZiAoc2l6ZSgpLmhlaWdodCgpIDwgbWluSGVpZ2h0KQogICAg
ICAgICAgICAgc2V0TG9naWNhbEhlaWdodChtaW5IZWlnaHQpOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgKaW5kZXggZTY4Y2FkMjA3NmUzLi45
MmM1MmZlNjgzNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
bGV4aWJsZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJs
ZUJveC5oCkBAIC01NiwxMCArNTYsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5Ecm9wQW5vbnlt
b3VzQmxvY2tDaGlsZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdm9pZCBs
YXlvdXRCbG9jayhSZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0
ID0gMF9sdSkgZmluYWw7CiAKLSAgICBMYXlvdXRVbml0IGJhc2VsaW5lUG9zaXRpb24oYm9vbCBm
aXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25P
bkNvbnRhaW5pbmdMaW5lKSBjb25zdCBvdmVycmlkZTsKICAgICBzdGQ6Om9wdGlvbmFsPExheW91
dFVuaXQ+IGZpcnN0TGluZUJhc2VsaW5lKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgc3RkOjpvcHRp
b25hbDxMYXlvdXRVbml0PiBsYXN0TGluZUJhc2VsaW5lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
c3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBpbmxpbmVCbG9ja0Jhc2VsaW5lKExpbmVEaXJlY3Rp
b25Nb2RlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVE
aWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSopIG92ZXJyaWRlOwogICAgIGJvb2wgaGl0VGVz
dENoaWxkcmVuKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhp
dFRlc3RMb2NhdGlvbiYsIGNvbnN0IExheW91dFBvaW50JiBhZGp1c3RlZExvY2F0aW9uLCBIaXRU
ZXN0QWN0aW9uKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJHcmlkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNw
cAppbmRleCA0MmVlMjI4OWE1OGIuLjE3YmVkYWE1OWU4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJHcmlkLmNwcApAQCAtNDg5LDcgKzQ4OSw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6
bGF5b3V0R3JpZChSZWxheW91dENoaWxkcmVuIHJlbGF5b3V0Q2hpbGRyZW4pCiAgICAgICAgIC8v
IEdyaWQgY29udGFpbmVyIHNob3VsZCBoYXZlIHRoZSBtaW5pbXVtIGhlaWdodCBvZiBhIGxpbmUg
aWYgaXQncyBlZGl0YWJsZS4gVGhhdCBkb2VzIG5vdCBhZmZlY3QgdHJhY2sgc2l6aW5nIHRob3Vn
aC4KICAgICAgICAgaWYgKGhhc0xpbmVJZkVtcHR5KCkpIHsKICAgICAgICAgICAgIExheW91dFVu
aXQgbWluSGVpZ2h0Rm9yRW1wdHlMaW5lID0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQo
KQotICAgICAgICAgICAgICAgICsgbGluZUhlaWdodCh0cnVlLCBpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9uT2ZJbnRlcmlv
ckxpbmVCb3hlcykKKyAgICAgICAgICAgICAgICArIGxpbmVIZWlnaHQoKQogICAgICAgICAgICAg
ICAgICsgc2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpOwogICAgICAgICAgICAgc2V0TG9naWNhbEhl
aWdodChzdGQ6Om1heChsb2dpY2FsSGVpZ2h0KCksIG1pbkhlaWdodEZvckVtcHR5TGluZSkpOwog
ICAgICAgICB9CkBAIC02MjYsNyArNjI2LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpsYXlvdXRNYXNv
bnJ5KFJlbGF5b3V0Q2hpbGRyZW4gcmVsYXlvdXRDaGlsZHJlbikKICAgICAgICAgLy8gR3JpZCBj
b250YWluZXIgc2hvdWxkIGhhdmUgdGhlIG1pbmltdW0gaGVpZ2h0IG9mIGEgbGluZSBpZiBpdCdz
IGVkaXRhYmxlLiBUaGF0IGRvZXMgbm90IGFmZmVjdCB0cmFjayBzaXppbmcgdGhvdWdoLgogICAg
ICAgICBpZiAoaGFzTGluZUlmRW1wdHkoKSkgewogICAgICAgICAgICAgTGF5b3V0VW5pdCBtaW5I
ZWlnaHRGb3JFbXB0eUxpbmUgPSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpCi0gICAg
ICAgICAgICAgICAgKyBsaW5lSGVpZ2h0KHRydWUsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGluZUJv
eGVzKQorICAgICAgICAgICAgICAgICsgbGluZUhlaWdodCgpCiAgICAgICAgICAgICAgICAgKyBz
Y3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KHN0
ZDo6bWF4KGxvZ2ljYWxIZWlnaHQoKSwgbWluSGVpZ2h0Rm9yRW1wdHlMaW5lKSk7CiAgICAgICAg
IH0KQEAgLTIwMTEsMTcgKzIwMTEsNiBAQCBib29sIFJlbmRlckdyaWQ6OmlzQmFzZWxpbmVBbGln
bm1lbnRGb3JHcmlkSXRlbShjb25zdCBSZW5kZXJCb3gmIGdyaWRJdGVtLCBHcmlkVAogICAgIHJl
dHVybiBpc0Jhc2VsaW5lUG9zaXRpb24oYWxpZ24pICYmICFoYXNBdXRvTWFyZ2luczsKIH0KIAot
Ly8gRklYTUU6IFRoaXMgbG9naWMgaXMgc2hhcmVkIGJ5IFJlbmRlckZsZXhpYmxlQm94LCBzbyBp
dCBtaWdodCBiZSByZWZhY3RvcmVkIHNvbWVob3cuCi1MYXlvdXRVbml0IFJlbmRlckdyaWQ6OmJh
c2VsaW5lUG9zaXRpb24oYm9vbCwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9z
aXRpb25Nb2RlIG1vZGUpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09
IFBvc2l0aW9uT25Db250YWluaW5nTGluZSk7Ci0gICAgYXV0byBiYXNlbGluZSA9IGZpcnN0TGlu
ZUJhc2VsaW5lKCk7Ci0gICAgaWYgKCFiYXNlbGluZSkKLSAgICAgICAgcmV0dXJuIHN5bnRoZXNp
emVkQmFzZWxpbmUoKnRoaXMsICpwYXJlbnRTdHlsZSgpLCBkaXJlY3Rpb24sIEJvcmRlckJveCkg
KyBtYXJnaW5Mb2dpY2FsSGVpZ2h0KCk7Ci0KLSAgICByZXR1cm4gYmFzZWxpbmUudmFsdWUoKSAr
IChkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyBtYXJnaW5Ub3AoKSA6IG1hcmdpblJpZ2h0
KCkpLnRvSW50KCk7Ci19Ci0KIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gUmVuZGVyR3JpZDo6
Zmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdAogewogICAgIGlmICgoaXNXcml0aW5nTW9kZVJvb3Qo
KSAmJiAhaXNGbGV4SXRlbSgpKSB8fCAhY3VycmVudEdyaWQoKS5oYXNHcmlkSXRlbXMoKSB8fCBz
aG91bGRBcHBseUxheW91dENvbnRhaW5tZW50KCkpCkBAIC0yMDkwLDExICsyMDc5LDYgQEAgU2lu
Z2xlVGhyZWFkV2Vha1B0cjxSZW5kZXJCb3g+IFJlbmRlckdyaWQ6OmdldEJhc2VsaW5lR3JpZEl0
ZW0oSXRlbVBvc2l0aW9uIGFsaWcKICAgICByZXR1cm4gYmFzZWxpbmVHcmlkSXRlbTsKIH0KIAot
c3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBSZW5kZXJHcmlkOjppbmxpbmVCbG9ja0Jhc2VsaW5l
KExpbmVEaXJlY3Rpb25Nb2RlKSBjb25zdAotewotICAgIHJldHVybiBmaXJzdExpbmVCYXNlbGlu
ZSgpOwotfQotCiBMYXlvdXRVbml0IFJlbmRlckdyaWQ6OmNvbHVtbkF4aXNCYXNlbGluZU9mZnNl
dEZvckdyaWRJdGVtKGNvbnN0IFJlbmRlckJveCYgZ3JpZEl0ZW0pIGNvbnN0CiB7CiAgICAgLy8g
RklYTUUgOiBDU1MgTWFzb25yeSBkb2VzIG5vdCBwcm9wZXJseSBoYW5kbGUgYmFzZWxpbmUgY2Fs
Y3VsYXRpb25zIGN1cnJlbnRseS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJHcmlkLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCmlu
ZGV4IDI2OTA0MmY0ZTA4MC4uMmE5ZWFiMzkzZTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJHcmlkLmgKQEAgLTI3MCwxMSArMjcwLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0
ZUF1dG9NYXJnaW5zSW5Sb3dBeGlzSWZOZWVkZWQoUmVuZGVyQm94Jik7CiAgICAgYm9vbCBpc0No
aWxkRWxpZ2libGVGb3JNYXJnaW5UcmltKE1hcmdpblRyaW1UeXBlLCBjb25zdCBSZW5kZXJCb3gm
KSBjb25zdCBmaW5hbDsKIAotICAgIExheW91dFVuaXQgYmFzZWxpbmVQb3NpdGlvbihib29sIGZp
cnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9u
Q29udGFpbmluZ0xpbmUpIGNvbnN0IGZpbmFsOwogICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5p
dD4gZmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdCBmaW5hbDsKICAgICBzdGQ6Om9wdGlvbmFsPExh
eW91dFVuaXQ+IGxhc3RMaW5lQmFzZWxpbmUoKSBjb25zdCBmaW5hbDsKICAgICBTaW5nbGVUaHJl
YWRXZWFrUHRyPFJlbmRlckJveD4gZ2V0QmFzZWxpbmVHcmlkSXRlbShJdGVtUG9zaXRpb24gYWxp
Z25tZW50KSBjb25zdDsKLSAgICBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGlubGluZUJsb2Nr
QmFzZWxpbmUoTGluZURpcmVjdGlvbk1vZGUpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgaXNJbmxp
bmVCYXNlbGluZUFsaWduZWRDaGlsZChjb25zdCBSZW5kZXJCb3gmKSBjb25zdDsKIAogICAgIExh
eW91dFVuaXQgY29sdW1uQXhpc0Jhc2VsaW5lT2Zmc2V0Rm9yR3JpZEl0ZW0oY29uc3QgUmVuZGVy
Qm94JikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAppbmRl
eCBjZWVhNmFiY2FiMGYuLmVhZTFmYzg3MjdmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwCkBAIC0zMDYsMTggKzMwNiw2IEBAIExheW91dFVuaXQgUmVuZGVySW1h
Z2U6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0
PiBlCiAgICAgcmV0dXJuIFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVp
Z2h0KGVzdGltYXRlZFVzZWRXaWR0aCk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVySW1hZ2U6OmJh
c2VsaW5lUG9zaXRpb24oYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlv
biwgTGluZVBvc2l0aW9uTW9kZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdAotewotICAgIExheW91
dFVuaXQgb2Zmc2V0OwotI2lmIEVOQUJMRShNVUxUSV9SRVBSRVNFTlRBVElPTl9IRUlDKQotICAg
IGlmIChpc011bHRpUmVwcmVzZW50YXRpb25IRUlDKCkpIHsKLSAgICAgICAgYXV0byBtZXRyaWNz
ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCktPm1ldHJpY3NGb3JNdWx0aVJl
cHJlc2VudGF0aW9uSEVJQygpOwotICAgICAgICBvZmZzZXQgPSBMYXlvdXRVbml0Ojpmcm9tRmxv
YXRSb3VuZChtZXRyaWNzLmRlc2NlbnQpOwotICAgIH0KLSNlbmRpZgotICAgIHJldHVybiBSZW5k
ZXJCb3g6OmJhc2VsaW5lUG9zaXRpb24oZmlyc3RMaW5lLCBkaXJlY3Rpb24sIGxpbmVQb3NpdGlv
bk1vZGUpIC0gb2Zmc2V0OwotfQotCiB2b2lkIFJlbmRlckltYWdlOjppbWFnZUNoYW5nZWQoV3Jh
cHBlZEltYWdlUHRyIG5ld0ltYWdlLCBjb25zdCBJbnRSZWN0KiByZWN0KQogewogICAgIGlmIChy
ZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklt
YWdlLmgKaW5kZXggMDUxZDE1NjRjMzEyLi5jNWVkNDdmZmYxZTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbWFnZS5oCkBAIC0xMzgsOCArMTM4LDYgQEAgcHJpdmF0ZToKICAgICBM
YXlvdXRVbml0IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChTaG91bGRDb21wdXRlUHJlZmVy
cmVkID0gU2hvdWxkQ29tcHV0ZVByZWZlcnJlZDo6Q29tcHV0ZUFjdHVhbCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgTGF5b3V0VW5pdCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KHN0ZDo6b3B0
aW9uYWw8TGF5b3V0VW5pdD4gZXN0aW1hdGVkVXNlZFdpZHRoID0gc3RkOjpudWxsb3B0KSBjb25z
dCBvdmVycmlkZTsKIAotICAgIExheW91dFVuaXQgYmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0
TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29u
dGFpbmluZ0xpbmUpIGNvbnN0IG92ZXJyaWRlOwotCiAgICAgYm9vbCBzaG91bGRDb2xsYXBzZVRv
RW1wdHkoKSBjb25zdDsKIAogICAgIC8vIFRleHQgdG8gZGlzcGxheSBhcyBsb25nIGFzIHRoZSBp
bWFnZSBpc24ndCBhdmFpbGFibGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW5saW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwCmluZGV4IGJhNWVmOTM1ZTRkZi4uN2VmZWFhMGUyODBlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcApAQCAtODE3LDE5ICs4MTcsNiBAQCBMZWdhY3lJ
bmxpbmVGbG93Qm94KiBSZW5kZXJJbmxpbmU6OmNyZWF0ZUFuZEFwcGVuZElubGluZUZsb3dCb3go
KQogICAgIHJldHVybiBmbG93Qm94OwogfQogCi1MYXlvdXRVbml0IFJlbmRlcklubGluZTo6bGlu
ZUhlaWdodChib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgLypkaXJlY3Rpb24qLywg
TGluZVBvc2l0aW9uTW9kZSAvKmxpbmVQb3NpdGlvbk1vZGUqLykgY29uc3QKLXsKLSAgICBhdXRv
JiBsaW5lU3R5bGUgPSBmaXJzdExpbmUgPyBmaXJzdExpbmVTdHlsZSgpIDogc3R5bGUoKTsKLSAg
ICByZXR1cm4gTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChsaW5lU3R5bGUuY29tcHV0ZWRMaW5l
SGVpZ2h0KCkpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlcklubGluZTo6YmFzZWxpbmVQb3NpdGlv
bihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRp
b25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0Ci17Ci0gICAgYXV0byYgc3R5bGUgPSBmaXJz
dExpbmUgPyBmaXJzdExpbmVTdHlsZSgpIDogdGhpcy0+c3R5bGUoKTsKLSAgICBhdXRvJiBmb250
TWV0cmljcyA9IHN0eWxlLm1ldHJpY3NPZlByaW1hcnlGb250KCk7Ci0gICAgcmV0dXJuIExheW91
dFVuaXQgeyBmb250TWV0cmljcy5hc2NlbnQoKSArIChsaW5lSGVpZ2h0KGZpcnN0TGluZSwgZGly
ZWN0aW9uLCBsaW5lUG9zaXRpb25Nb2RlKSAtIGZvbnRNZXRyaWNzLmhlaWdodCgpKSAvIDIgfTsK
LX0KLQogTGF5b3V0U2l6ZSBSZW5kZXJJbmxpbmU6Om9mZnNldEZvckluRmxvd1Bvc2l0aW9uZWRJ
bmxpbmUoY29uc3QgUmVuZGVyQm94KiBjaGlsZCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogVGhp
cyBmdW5jdGlvbiBpc24ndCByaWdodCB3aXRoIG1peGVkIHdyaXRpbmcgbW9kZXMuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKaW5kZXggNzVlNmRiMmQ4N2QxLi4yNDM0YmU4
OGJmMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKQEAgLTEzOSw5
ICsxMzksNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaXJ0eUxpbmVGcm9tQ2hhbmdlZENoaWxk
KCkgZmluYWwgeyBtX2xlZ2FjeUxpbmVCb3hlcy5kaXJ0eUxpbmVGcm9tQ2hhbmdlZENoaWxkKCp0
aGlzKTsgfQogCi0gICAgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBMaW5l
RGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGlu
ZSkgY29uc3QgZmluYWw7Ci0gICAgTGF5b3V0VW5pdCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmly
c3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25D
b250YWluaW5nTGluZSkgY29uc3QgZmluYWw7Ci0gICAgCiAgICAgdm9pZCB1cGRhdGVIaXRUZXN0
UmVzdWx0KEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0IGZpbmFsOwog
CiAgICAgdm9pZCBpbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KiA9
IDApIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
bmVCcmVhay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNw
cAppbmRleCA0YjRkNzgzMjNjZWQuLjdlMGYyNmZmN2Q2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHAKQEAgLTU5LDI2ICs1OSw2IEBAIFJlbmRlckxp
bmVCcmVhazo6flJlbmRlckxpbmVCcmVhaygpCiB7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyTGlu
ZUJyZWFrOjpsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSAvKmRp
cmVjdGlvbiovLCBMaW5lUG9zaXRpb25Nb2RlIC8qbGluZVBvc2l0aW9uTW9kZSovKSBjb25zdAot
ewotICAgIGlmIChmaXJzdExpbmUpIHsKLSAgICAgICAgYXV0byYgZmlyc3RMaW5lU3R5bGUgPSB0
aGlzLT5maXJzdExpbmVTdHlsZSgpOwotICAgICAgICBpZiAoJmZpcnN0TGluZVN0eWxlICE9ICZz
dHlsZSgpKQotICAgICAgICAgICAgcmV0dXJuIExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwoZmly
c3RMaW5lU3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0KCkpOwotICAgIH0KLQotICAgIGlmICghbV9j
YWNoZWRMaW5lSGVpZ2h0KQotICAgICAgICBtX2NhY2hlZExpbmVIZWlnaHQgPSBMYXlvdXRVbml0
Ojpmcm9tRmxvYXRDZWlsKHN0eWxlKCkuY29tcHV0ZWRMaW5lSGVpZ2h0KCkpOwotICAgIHJldHVy
biAqbV9jYWNoZWRMaW5lSGVpZ2h0OwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxpbmVCcmVhazo6
YmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0
aW9uLCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0Ci17Ci0gICAgYXV0
byYgc3R5bGUgPSBmaXJzdExpbmUgPyBmaXJzdExpbmVTdHlsZSgpIDogdGhpcy0+c3R5bGUoKTsK
LSAgICBhdXRvJiBmb250TWV0cmljcyA9IHN0eWxlLm1ldHJpY3NPZlByaW1hcnlGb250KCk7Ci0g
ICAgcmV0dXJuIExheW91dFVuaXQgeyAoZm9udE1ldHJpY3MuYXNjZW50KCkgKyAobGluZUhlaWdo
dChmaXJzdExpbmUsIGRpcmVjdGlvbiwgbGluZVBvc2l0aW9uTW9kZSkgLSBmb250TWV0cmljcy5o
ZWlnaHQoKSkgLyAyKSB9OwotfQotCiBpbnQgUmVuZGVyTGluZUJyZWFrOjpjYXJldE1pbk9mZnNl
dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CkBAIC0xMzEsNyArMTExLDYgQEAgdm9pZCBSZW5k
ZXJMaW5lQnJlYWs6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29s
KiB3YXNGaXhlZCkgY28KIAogdm9pZCBSZW5kZXJMaW5lQnJlYWs6OnVwZGF0ZUZyb21TdHlsZSgp
CiB7Ci0gICAgbV9jYWNoZWRMaW5lSGVpZ2h0ID0geyB9OwogICAgIFJFTEVBU0VfQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXNJbmxpbmUoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaAppbmRleCBkZjExOThhNWZjZDUuLmJlYjM1OTNk
ZjEwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVh
ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaApAQCAt
NjEsOSArNjEsNiBAQCBwcml2YXRlOgogICAgIGludCBjYXJldE1heE9mZnNldCgpIGNvbnN0IGZp
bmFsOwogICAgIGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFmKCkgY29uc3QgZmluYWw7CiAKLSAgICBM
YXlvdXRVbml0IGxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBM
aW5lUG9zaXRpb25Nb2RlKSBjb25zdCBmaW5hbDsKLSAgICBMYXlvdXRVbml0IGJhc2VsaW5lUG9z
aXRpb24oYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2Rl
KSBjb25zdCBmaW5hbDsKLQogICAgIExheW91dFVuaXQgbWFyZ2luVG9wKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gMDsgfQogICAgIExheW91dFVuaXQgbWFyZ2luQm90dG9tKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gMDsgfQogICAgIExheW91dFVuaXQgbWFyZ2luTGVmdCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIDA7IH0KQEAgLTgwLDggKzc3LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRl
RnJvbVN0eWxlKCkgZmluYWw7CiAgICAgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gZmFsc2U7IH0KLQotICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0
PiBtX2NhY2hlZExpbmVIZWlnaHQgeyB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCmluZGV4IGNmNTNiYjhh
YjZhYS4uMGU0MjUyM2YxMjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guY3BwCkBAIC04NywxMCArODcsNiBAQCBjb25zdCBpbnQgb3B0aW9uc1NwYWNpbmdJbmxp
bmVTdGFydCA9IDI7CiAvLyBEZWZhdWx0IHNpemUgd2hlbiB0aGUgbXVsdGlwbGUgYXR0cmlidXRl
IGlzIHByZXNlbnQgYnV0IHNpemUgYXR0cmlidXRlIGlzIGFic2VudC4KIGNvbnN0IGludCBkZWZh
dWx0U2l6ZSA9IDQ7CiAKLS8vIEZJWE1FOiBUaGlzIGhhcmRjb2RlZCBiYXNlbGluZUFkanVzdG1l
bnQgaXMgd2hhdCB3ZSB1c2VkIHRvIGRvIGZvciB0aGUgb2xkCi0vLyB3aWRnZXQsIGJ1dCBJJ20g
bm90IHN1cmUgdGhpcyBpcyByaWdodCBmb3IgdGhlIG5ldyBjb250cm9sLgotY29uc3QgaW50IGJh
c2VsaW5lQWRqdXN0bWVudCA9IDc7Ci0KIFJlbmRlckxpc3RCb3g6OlJlbmRlckxpc3RCb3goSFRN
TFNlbGVjdEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCiAgICAgOiBSZW5k
ZXJCbG9ja0Zsb3coVHlwZTo6TGlzdEJveCwgZWxlbWVudCwgV1RGTW92ZShzdHlsZSkpCiB7CkBA
IC0zMDgsMTQgKzMwNCw2IEBAIFJlbmRlckJveDo6TG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVz
IFJlbmRlckxpc3RCb3g6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KExheW91CiAgICAgcmV0dXJuIFJl
bmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCwgbG9naWNhbFRvcCk7
CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyTGlzdEJveDo6YmFzZWxpbmVQb3NpdGlvbihib29sIGZp
cnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgbGluZURpcmVjdGlvbiwgTGluZVBvc2l0aW9uTW9k
ZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdAotewotICAgIGF1dG8gYmFzZWxpbmUgPSBSZW5kZXJC
b3g6OmJhc2VsaW5lUG9zaXRpb24oZmlyc3RMaW5lLCBsaW5lRGlyZWN0aW9uLCBsaW5lUG9zaXRp
b25Nb2RlKTsKLSAgICBpZiAoIXNob3VsZEFwcGx5TGF5b3V0Q29udGFpbm1lbnQoKSkKLSAgICAg
ICAgYmFzZWxpbmUgLT0gYmFzZWxpbmVBZGp1c3RtZW50OwotICAgIHJldHVybiBiYXNlbGluZTsK
LX0KLQogTGF5b3V0UmVjdCBSZW5kZXJMaXN0Qm94OjppdGVtQm91bmRpbmdCb3hSZWN0KGNvbnN0
IExheW91dFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0LCBpbnQgaW5kZXgpIGNvbnN0CiB7CiAgICAg
TGF5b3V0VW5pdCB4ID0gYWRkaXRpb25hbE9mZnNldC54KCkgKyBib3JkZXJMZWZ0KCkgKyBwYWRk
aW5nTGVmdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKaW5kZXgg
NGE1NDczZmUyMzA0Li4xMjFmZDM2YzhhMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guaApAQCAtOTcsNyArOTcsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21w
dXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsIExh
eW91dFVuaXQmIG1heExvZ2ljYWxXaWR0aCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb21w
dXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpIG92ZXJyaWRlOwotICAgIExheW91dFVuaXQgYmFz
ZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3Np
dGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0IG92ZXJyaWRlOwogICAg
IExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyBjb21wdXRlTG9naWNhbEhlaWdodChMYXlvdXRV
bml0IGxvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQgbG9naWNhbFRvcCkgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICB2b2lkIGxheW91dCgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCmluZGV4IDExNmY4YTYyMzE1ZS4uYmE4YjUwOGExYTE5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCkBA
IC00MjIsMjAgKzQyMiw2IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6dXBkYXRlSW5saW5lTWFy
Z2lucygpCiAgICAgbXV0YWJsZVN0eWxlKCkuc2V0TWFyZ2luRW5kKFN0eWxlOjpNYXJnaW5FZGdl
OjpGaXhlZCB7IG1hcmdpbkVuZCB9KTsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJMaXN0TWFya2Vy
OjpsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSBkaXJlY3Rpb24s
IExpbmVQb3NpdGlvbk1vZGUgbGluZVBvc2l0aW9uTW9kZSkgY29uc3QKLXsKLSAgICBpZiAoIWlz
SW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuIG1fbGlzdEl0ZW0tPmxpbmVIZWlnaHQoZmlyc3RMaW5l
LCBkaXJlY3Rpb24sIFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcyk7Ci0gICAgcmV0dXJuIFJl
bmRlckJveDo6bGluZUhlaWdodChmaXJzdExpbmUsIGRpcmVjdGlvbiwgbGluZVBvc2l0aW9uTW9k
ZSk7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyTGlzdE1hcmtlcjo6YmFzZWxpbmVQb3NpdGlvbihi
b29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRpb25N
b2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc0ltYWdlKCkpCi0gICAg
ICAgIHJldHVybiBtX2xpc3RJdGVtLT5iYXNlbGluZVBvc2l0aW9uKGZpcnN0TGluZSwgZGlyZWN0
aW9uLCBQb3NpdGlvbk9mSW50ZXJpb3JMaW5lQm94ZXMpOwotICAgIHJldHVybiBSZW5kZXJCb3g6
OmJhc2VsaW5lUG9zaXRpb24oZmlyc3RMaW5lLCBkaXJlY3Rpb24sIGxpbmVQb3NpdGlvbk1vZGUp
OwotfQotCiBib29sIFJlbmRlckxpc3RNYXJrZXI6OmlzSW5zaWRlKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gc3R5bGUoKS5saXN0U3R5bGVQb3NpdGlvbigpID09IExpc3RTdHlsZVBvc2l0aW9uOjpJ
bnNpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1h
cmtlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuaAppbmRl
eCAyNThjNmEwYjJkMzIuLjI2MWY4OWU0MmE3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdE1hcmtlci5oCkBAIC04MSw4ICs4MSw2IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIGZpbmFsOwogICAgIHZvaWQg
bGF5b3V0KCkgZmluYWw7CiAgICAgdm9pZCBpbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRyLCBj
b25zdCBJbnRSZWN0KikgZmluYWw7Ci0gICAgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KGJvb2wgZmly
c3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSkgY29uc3QgZmluYWw7
Ci0gICAgTGF5b3V0VW5pdCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lLCBMaW5lRGly
ZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSkgY29uc3QgZmluYWw7CiAgICAgTGF5b3V0UmVj
dCBzZWxlY3Rpb25SZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBy
ZXBhaW50Q29udGFpbmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50KSBmaW5hbDsKICAgICBi
b29sIGNhbkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAg
ICB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxl
JiBuZXdTdHlsZSkgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWVudUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlz
dC5oCmluZGV4IDU1MDJkMTc3ODM4OS4uNTUxN2FhNjkyNTA4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaApAQCAtMTI3LDE0ICsxMjcsNyBAQCBwcml2YXRlOgog
CiAgICAgYm9vbCBoYXNMaW5lSWZFbXB0eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KIAotICAgIC8vIEZsZXhib3ggZGVmaW5lcyBiYXNlbGluZXMgZGlmZmVyZW50bHkgdGhhbiBy
ZWd1bGFyIGJsb2Nrcy4KLSAgICAvLyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIG1lbnVs
aXN0cyBuZWVkIHRvIGRvIHRoZSByZWd1bGFyIGJsb2NrIGJlaGF2aW9yLgotICAgIExheW91dFVu
aXQgYmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgZGly
ZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIHBvc2l0aW9uKSBjb25zdCBvdmVycmlkZQotICAgIHsK
LSAgICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpiYXNlbGluZVBvc2l0aW9uKGZpcnN0TGluZSwg
ZGlyZWN0aW9uLCBwb3NpdGlvbik7Ci0gICAgfQogICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5p
dD4gZmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBSZW5kZXJCbG9j
azo6Zmlyc3RMaW5lQmFzZWxpbmUoKTsgfQotICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4g
aW5saW5lQmxvY2tCYXNlbGluZShMaW5lRGlyZWN0aW9uTW9kZSBkaXJlY3Rpb24pIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIFJlbmRlckJsb2NrOjppbmxpbmVCbG9ja0Jhc2VsaW5lKGRpcmVjdGlv
bik7IH0KIAogICAgIHZvaWQgZ2V0SXRlbUJhY2tncm91bmRDb2xvcih1bnNpZ25lZCBsaXN0SW5k
ZXgsIENvbG9yJiwgYm9vbCYgaXRlbUhhc0N1c3RvbUJhY2tncm91bmRDb2xvcikgY29uc3Q7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAKaW5kZXggNTQzOTI5ODZm
MjZhLi5mNjdlNWQxNDczNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTbGlkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlk
ZXIuY3BwCkBAIC03MiwxMiArNzIsNiBAQCBSZWY8SFRNTElucHV0RWxlbWVudD4gUmVuZGVyU2xp
ZGVyOjpwcm90ZWN0ZWRFbGVtZW50KCkgY29uc3QKICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTElu
cHV0RWxlbWVudD4obm9kZUZvck5vbkFub255bW91cygpKTsKIH0KIAotTGF5b3V0VW5pdCBSZW5k
ZXJTbGlkZXI6OmJhc2VsaW5lUG9zaXRpb24oYm9vbCAvKmZpcnN0TGluZSovLCBMaW5lRGlyZWN0
aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogUGF0Y2gg
dGhpcyBmdW5jdGlvbiBmb3Igd3JpdGluZy1tb2RlLgotICAgIHJldHVybiBoZWlnaHQoKSArIG1h
cmdpblRvcCgpOwotfQotCiB2b2lkIFJlbmRlclNsaWRlcjo6Y29tcHV0ZUludHJpbnNpY0xvZ2lj
YWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0JiBtYXhMb2dp
Y2FsV2lkdGgpIGNvbnN0CiB7CiAgICAgaWYgKHNob3VsZEFwcGx5U2l6ZU9ySW5saW5lU2l6ZUNv
bnRhaW5tZW50KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTbGlkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuaAppbmRl
eCA1ODNkODIzMThiNjcuLjEzMGM2M2Q1NGViYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNsaWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTbGlkZXIuaApAQCAtNDgsNyArNDgsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEFT
Q0lJTGl0ZXJhbCByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIlJlbmRlclNs
aWRlciJfczsgfQogCi0gICAgTGF5b3V0VW5pdCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RM
aW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250
YWluaW5nTGluZSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb21wdXRlSW50cmluc2ljTG9n
aWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsIExheW91dFVuaXQmIG1heExv
Z2ljYWxXaWR0aCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9n
aWNhbFdpZHRocygpIG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlLmNwcAppbmRleCBmMWMxNDFlZDRlMWQuLjZmMDE3M2NiM2UzZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCkBAIC0xNTgyLDE5ICsxNTgyLDYgQEAgUmVuZGVy
VGFibGVDZWxsKiBSZW5kZXJUYWJsZTo6Y2VsbEFmdGVyKGNvbnN0IFJlbmRlclRhYmxlQ2VsbCog
Y2VsbCkgY29uc3QKICAgICByZXR1cm4gY2VsbC0+c2VjdGlvbigpLT5wcmltYXJ5Q2VsbEF0KGNl
bGwtPnJvd0luZGV4KCksIGVmZkNvbCk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyVGFibGU6OmJh
c2VsaW5lUG9zaXRpb24oYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlv
biwgTGluZVBvc2l0aW9uTW9kZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdAotewotICAgIGlmIChh
dXRvIGJhc2VsaW5lUG9zID0gZmlyc3RMaW5lQmFzZWxpbmUoKSkKLSAgICAgICAgcmV0dXJuIChk
aXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyBtYXJnaW5Ub3AoKSA6IG1hcmdpblJpZ2h0KCkp
ICsgYmFzZWxpbmVQb3MudmFsdWUoKTsKLSAgICByZXR1cm4gUmVuZGVyQm94OjpiYXNlbGluZVBv
c2l0aW9uKGZpcnN0TGluZSwgZGlyZWN0aW9uLCBsaW5lUG9zaXRpb25Nb2RlKTsKLX0KLQotc3Rk
OjpvcHRpb25hbDxMYXlvdXRVbml0PiBSZW5kZXJUYWJsZTo6aW5saW5lQmxvY2tCYXNlbGluZShM
aW5lRGlyZWN0aW9uTW9kZSkgY29uc3QKLXsKLSAgICAvLyBUYWJsZXMgYXJlIHNraXBwZWQgd2hl
biBjb21wdXRpbmcgYW4gaW5saW5lLWJsb2NrJ3MgYmFzZWxpbmUuCi0gICAgcmV0dXJuIHN0ZDo6
b3B0aW9uYWw8TGF5b3V0VW5pdD4oKTsKLX0KLQogc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBS
ZW5kZXJUYWJsZTo6Zmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdAogewogICAgIC8vIFRoZSBiYXNl
bGluZSBvZiBhICd0YWJsZScgaXMgdGhlIHNhbWUgYXMgdGhlICdpbmxpbmUtdGFibGUnIGJhc2Vs
aW5lIHBlciBDU1MgMyBGbGV4Ym94IChDU1MgMi4xCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZS5oCmluZGV4IDE5Yzk3NDQxZTVjMC4uNmYyYTBmZTM2YmVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaApAQCAtMjMxLDEwICsyMzEsOCBAQCBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpIG92ZXJyaWRlOwogICAg
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlOwogCi0gICAg
TGF5b3V0VW5pdCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9u
TW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29uc3Qg
ZmluYWw7CiAgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBmaXJzdExpbmVCYXNlbGluZSgp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gbGFzdExpbmVC
YXNlbGluZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4g
aW5saW5lQmxvY2tCYXNlbGluZShMaW5lRGlyZWN0aW9uTW9kZSkgY29uc3QgZmluYWw7CiAKICAg
ICBSZW5kZXJUYWJsZUNvbCogc2xvd0NvbEVsZW1lbnQodW5zaWduZWQgY29sLCBib29sKiBzdGFy
dEVkZ2UsIGJvb2wqIGVuZEVkZ2UpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sLmNwcAppbmRleCAxMjM4YjZhYzFiMmEuLjliZjY1N2JjZjBh
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3Bw
CkBAIC0xMDgsNyArMTA4LDcgQEAgUmVuZGVyQm94OjpMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1
ZXMgUmVuZGVyVGV4dENvbnRyb2w6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KEwKIAogICAgIGlmIChS
ZW5kZXJCb3gqIGlubmVyVGV4dEJveCA9IGlubmVyVGV4dC0+cmVuZGVyQm94KCkpIHsKICAgICAg
ICAgTGF5b3V0VW5pdCBub25Db250ZW50SGVpZ2h0ID0gaW5uZXJUZXh0Qm94LT5ib3JkZXJBbmRQ
YWRkaW5nTG9naWNhbEhlaWdodCgpICsgaW5uZXJUZXh0Qm94LT5tYXJnaW5Mb2dpY2FsSGVpZ2h0
KCk7Ci0gICAgICAgIGxvZ2ljYWxIZWlnaHQgPSBjb21wdXRlQ29udHJvbExvZ2ljYWxIZWlnaHQo
aW5uZXJUZXh0Qm94LT5saW5lSGVpZ2h0KHRydWUsIEhvcml6b250YWxMaW5lLCBQb3NpdGlvbk9m
SW50ZXJpb3JMaW5lQm94ZXMpLCBub25Db250ZW50SGVpZ2h0KTsKKyAgICAgICAgbG9naWNhbEhl
aWdodCA9IGNvbXB1dGVDb250cm9sTG9naWNhbEhlaWdodChpbm5lclRleHRCb3gtPmxpbmVIZWln
aHQoKSwgbm9uQ29udGVudEhlaWdodCk7CiAKICAgICAgICAgLy8gV2UgYXJlIGFibGUgdG8gaGF2
ZSBhIGhvcml6b250YWwgc2Nyb2xsYmFyIGlmIHRoZSBvdmVyZmxvdyBzdHlsZSBpcyBzY3JvbGws
IG9yIGlmIGl0cyBhdXRvIGFuZCB0aGVyZSdzIG5vIHdvcmQgd3JhcC4KICAgICAgICAgYXV0byBz
aG91bGRJbmNsdWRlU2Nyb2xsYmFySGVpZ2h0ID0gWyZdIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgKaW5kZXggODJlMzJjMzk4ZGZkLi4yNDMwM2VhZDAx
NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCkBA
IC04OCwxMiArODgsNyBAQCBwdWJsaWM6CiAgICAgUmVuZGVyVGV4dENvbnRyb2xJbm5lckNvbnRh
aW5lcihFbGVtZW50JiwgUmVuZGVyU3R5bGUmJik7CiAgICAgdmlydHVhbCB+UmVuZGVyVGV4dENv
bnRyb2xJbm5lckNvbnRhaW5lcigpOwogCi0gICAgTGF5b3V0VW5pdCBiYXNlbGluZVBvc2l0aW9u
KGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSBkaXJlY3Rpb24sIExpbmVQb3NpdGlv
bk1vZGUgcG9zaXRpb24pIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICByZXR1cm4gUmVu
ZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24oZmlyc3RMaW5lLCBkaXJlY3Rpb24sIHBvc2l0aW9u
KTsKLSAgICB9CiAgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBmaXJzdExpbmVCYXNlbGlu
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFJlbmRlckJsb2NrOjpmaXJzdExpbmVCYXNlbGlu
ZSgpOyB9Ci0gICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBpbmxpbmVCbG9ja0Jhc2VsaW5l
KExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUmVu
ZGVyQmxvY2s6OmlubGluZUJsb2NrQmFzZWxpbmUoZGlyZWN0aW9uKTsgfQogCiBwcml2YXRlOgog
ICAgIGJvb2wgaXNGbGV4aWJsZUJveEltcGwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xNdWx0aUxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sTXVsdGlMaW5lLmNwcAppbmRleCA4NGIzZDZmNDFiMjAuLmM4NzY4OGYwMDhhNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5l
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0
aUxpbmUuY3BwCkBAIC05OCwxMSArOTgsNiBAQCBMYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9s
TXVsdGlMaW5lOjpjb21wdXRlQ29udHJvbExvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsaQogICAg
IHJldHVybiBsaW5lSGVpZ2h0ICogdGV4dEFyZWFFbGVtZW50KCkucm93cygpICsgbm9uQ29udGVu
dEhlaWdodDsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6YmFz
ZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9u
LCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IFJlbmRlckJveDo6YmFzZWxpbmVQb3NpdGlvbihmaXJzdExpbmUsIGRpcmVjdGlvbiwgbGluZVBv
c2l0aW9uTW9kZSk7Ci19Ci0KIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6OmxheW91
dEV4Y2x1ZGVkQ2hpbGRyZW4oUmVsYXlvdXRDaGlsZHJlbiByZWxheW91dENoaWxkcmVuKQogewog
ICAgIFJlbmRlclRleHRDb250cm9sOjpsYXlvdXRFeGNsdWRlZENoaWxkcmVuKHJlbGF5b3V0Q2hp
bGRyZW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sTXVsdGlMaW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xNdWx0aUxpbmUuaAppbmRleCBkZTE3YWRhM2Y1YmEuLjIzZWRjNmI2ZGY4NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5l
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlM
aW5lLmgKQEAgLTQ0LDcgKzQ0LDYgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBnZXRBdmVyYWdlQ2hh
cldpZHRoKCkgb3ZlcnJpZGU7CiAgICAgTGF5b3V0VW5pdCBwcmVmZXJyZWRDb250ZW50TG9naWNh
bFdpZHRoKGZsb2F0IGNoYXJXaWR0aCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgTGF5b3V0VW5pdCBj
b21wdXRlQ29udHJvbExvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsaW5lSGVpZ2h0LCBMYXlvdXRV
bml0IG5vbkNvbnRlbnRIZWlnaHQpIGNvbnN0IG92ZXJyaWRlOwotICAgIExheW91dFVuaXQgYmFz
ZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3Np
dGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgdm9pZCBsYXlvdXRFeGNsdWRlZENoaWxkcmVuKFJlbGF5b3V0Q2hpbGRyZW4pIG92ZXJyaWRl
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVXaWR0
aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lV2lkdGguY3BwCmluZGV4
IGJhMDk3YmJlMzYyMC4uMzkxMDVhMGExMGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbGluZS9MaW5lV2lkdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9saW5lL0xpbmVXaWR0aC5jcHAKQEAgLTY5LDcgKzY5LDcgQEAgYm9vbCBMaW5lV2lkdGg6OmZp
dHNPbkxpbmVFeGNsdWRpbmdUcmFpbGluZ0NvbGxhcHNlZFdoaXRlc3BhY2UoKSBjb25zdAogdm9p
ZCBMaW5lV2lkdGg6OnVwZGF0ZUF2YWlsYWJsZVdpZHRoKCkKIHsKICAgICBMYXlvdXRVbml0IGhl
aWdodCA9IG1fYmxvY2subG9naWNhbEhlaWdodCgpOwotICAgIGF1dG8gbGluZUhlaWdodCA9IHN0
ZDo6bWF4KDBfbHUsIG1fYmxvY2subGluZUhlaWdodCh0cnVlLCBtX2Jsb2NrLmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkgPyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25P
ZkludGVyaW9yTGluZUJveGVzKSk7CisgICAgYXV0byBsaW5lSGVpZ2h0ID0gc3RkOjptYXgoMF9s
dSwgbV9ibG9jay5saW5lSGVpZ2h0KCkpOwogICAgIG1fbGVmdCA9IG1fYmxvY2subG9naWNhbExl
ZnRPZmZzZXRGb3JMaW5lKGhlaWdodCwgbGluZUhlaWdodCk7CiAgICAgbV9yaWdodCA9IG1fYmxv
Y2subG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShoZWlnaHQsIGxpbmVIZWlnaHQpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2Nr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2su
Y3BwCmluZGV4IDVkMTY3YWVkNzY4Ny4uMWFkZWJlNTg0MThkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcApAQCAtOTUs
MTQgKzk1LDYgQEAgTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxCbG9jazo6bWlycm9ySWZOZWVkZWQo
TGF5b3V0VW5pdCBob3Jpem9udGFsT2Zmc2V0LCBMYXlvdXQKICAgICByZXR1cm4gaG9yaXpvbnRh
bE9mZnNldDsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxCbG9jazo6YmFzZWxpbmVQb3Np
dGlvbihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9z
aXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0Ci17Ci0gICAgaWYgKGxpbmVQb3NpdGlv
bk1vZGUgPT0gUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIHJldHVybiBmaXJzdExpbmVCYXNlbGluZSgpLnZhbHVlX29yKFJlbmRlckJsb2NrOjpi
YXNlbGluZVBvc2l0aW9uKGZpcnN0TGluZSwgZGlyZWN0aW9uLCBsaW5lUG9zaXRpb25Nb2RlKSk7
Ci19Ci0KIExheW91dFVuaXQgdG9Vc2VyVW5pdHMoY29uc3QgTWF0aE1MRWxlbWVudDo6TGVuZ3Ro
JiBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgTGF5b3V0VW5pdCYgcmVm
ZXJlbmNlVmFsdWUpCiB7CiAgICAgc3dpdGNoIChsZW5ndGgudHlwZSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oCmluZGV4IGIw
NWI2ZWQwNjU0ZC4uMzczYmI0YzgyODBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oCkBAIC01OSw4ICs1OSw2IEBAIHB1Ymxp
YzoKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2MTcu
CiAgICAgdmlydHVhbCBSZW5kZXJNYXRoTUxPcGVyYXRvciogdW5lbWJlbGxpc2hlZE9wZXJhdG9y
KCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogCi0gICAgTGF5b3V0VW5pdCBiYXNlbGluZVBv
c2l0aW9uKGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9k
ZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29uc3Qgb3ZlcnJpZGU7Ci0KIHByb3RlY3Rl
ZDoKICAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>476089</attachid>
            <date>2025-07-18 05:18:24 -0700</date>
            <delta_ts>2025-07-18 11:05:59 -0700</delta_ts>
            <desc>[fast-cq]Patch</desc>
            <filename>bug-295667-20250718051823.patch</filename>
            <type>text/plain</type>
            <size>3977</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">RnJvbSAzMzc5MzRjNDY0MjMxNmM3N2U0NmYwN2JhOGNlMWEyMmIxMDBkOTk1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGFuIEJhcmFkbGF5IDx6YWxhbkBhcHBsZS5jb20+CkRhdGU6
IFdlZCwgOSBKdWwgMjAyNSAxNjowOToyMiAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIFtDbGVhbnVw
XSBMZXQncyBzcGVjaWFsLWNhc2UgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94J3MKIGJhc2Vs
aW5lIHBvc2l0aW9uIGxvZ2ljIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yOTU2NjcKClJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgoKKiBTb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Cb3hHZW9tZXRyeVVwZGF0ZXIuY3Bw
OgooV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OmJhc2VsaW5lUG9zaXRpb24pOgotLS0KIC4u
Li9MYXlvdXRJbnRlZ3JhdGlvbkJveEdlb21ldHJ5VXBkYXRlci5jcHAgICB8IDM0ICsrKysrKysr
KysrLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlv
bnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5
b3V0SW50ZWdyYXRpb25Cb3hHZW9tZXRyeVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uQm94R2VvbWV0cnlVcGRhdGVyLmNwcApp
bmRleCAzNTc3MTdhMTEwZDcuLjVhNzMwMTNkYWNjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uQm94R2VvbWV0cnlVcGRhdGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdy
YXRpb25Cb3hHZW9tZXRyeVVwZGF0ZXIuY3BwCkBAIC00NzIsNiArNDcyLDE5IEBAIExheW91dFVu
aXQgc3RhdGljIGJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyQm94JiByZW5kZXJCb3gpCiAg
ICAgICAgIHJldHVybiBzeW50aGVzaXplZEJhc2VsaW5lKHJlbmRlckJveCwgKnJlbmRlckJveC5w
YXJlbnRTdHlsZSgpLCB3cml0aW5nTW9kZS5pc0hvcml6b250YWwoKSA/IEhvcml6b250YWxMaW5l
IDogVmVydGljYWxMaW5lLCBCb3JkZXJCb3gpICsgcmVuZGVyQm94Lm1hcmdpbkxvZ2ljYWxIZWln
aHQoKTsKICAgICB9CiAKKyAgICBpZiAoQ2hlY2tlZFB0ciBkZXByZWNhdGVkRmxleEJveCA9IGR5
bmFtaWNEb3duY2FzdDxSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g+KHJlbmRlckJveCkpIHsK
KyAgICAgICAgLy8gSGlzdG9yaWNhbGx5LCB3ZSBkaWQgdGhpcyBjaGVjayBmb3IgYWxsIGJhc2Vs
aW5lcy4gQnV0IHdlIGNhbid0CisgICAgICAgIC8vIHJlbW92ZSB0aGlzIGNvZGUgZnJvbSBkZXBy
ZWNhdGVkIGZsZXhib3gsIGJlY2F1c2UgaXQgZWZmZWN0aXZlbHkKKyAgICAgICAgLy8gYnJlYWtz
IC13ZWJraXQtbGluZS1jbGFtcCwgd2hpY2ggaXMgdXNlZCBpbiB0aGUgd2lsZCAtLSB3ZSB3b3Vs
ZAorICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIGJhc2VsaW5lIGFzIGlmIC13ZWJraXQtbGluZS1j
bGFtcCB3YXNuJ3QgdXNlZC4KKyAgICAgICAgLy8gRm9yIHNpbXBsaWNpdHksIHdlIHVzZSB0aGlz
IGZvciBhbGwgdXNlcyBvZiBkZXByZWNhdGVkIGZsZXhib3guCisgICAgICAgIGF1dG8gYm90dG9t
T2ZDb250ZW50ID0gZGVwcmVjYXRlZEZsZXhCb3gtPmJvcmRlckJlZm9yZSgpICsgZGVwcmVjYXRl
ZEZsZXhCb3gtPnBhZGRpbmdCZWZvcmUoKSArIGRlcHJlY2F0ZWRGbGV4Qm94LT5jb250ZW50Qm94
TG9naWNhbEhlaWdodCgpOworICAgICAgICBhdXRvIGJhc2VsaW5lID0gbGFzdEluZmxvd0JveEJh
c2VsaW5lKCpkZXByZWNhdGVkRmxleEJveCk7CisgICAgICAgIGlmIChiYXNlbGluZSAmJiAqYmFz
ZWxpbmUgPD0gYm90dG9tT2ZDb250ZW50KQorICAgICAgICAgICAgcmV0dXJuIG1hcmdpbkJlZm9y
ZSArICpiYXNlbGluZTsKKyAgICAgICAgcmV0dXJuIHJvdW5kVG9JbnQoZGVwcmVjYXRlZEZsZXhC
b3gtPm1hcmdpbkJveExvZ2ljYWxIZWlnaHQod3JpdGluZ01vZGUpKTsKKyAgICB9CisKICAgICBp
ZiAocmVuZGVyQm94LnN0eWxlKCkuaGFzVXNlZEFwcGVhcmFuY2UoKSAmJiAhcmVuZGVyQm94LnRo
ZW1lKCkuaXNDb250cm9sQ29udGFpbmVyKHJlbmRlckJveC5zdHlsZSgpLnVzZWRBcHBlYXJhbmNl
KCkpKSB7CiAgICAgICAgIC8vIEZvciAibGVhZiIgdGhlbWUgb2JqZWN0cywgbGV0IHRoZSB0aGVt
ZSBkZWNpZGUgd2hhdCB0aGUgYmFzZWxpbmUgcG9zaXRpb24gaXMuCiAgICAgICAgIHJldHVybiBy
ZW5kZXJCb3gudGhlbWUoKS5iYXNlbGluZVBvc2l0aW9uKHJlbmRlckJveCk7CkBAIC01MTUsMjIg
KzUyOCwxMyBAQCBMYXlvdXRVbml0IHN0YXRpYyBiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRl
ckJveCYgcmVuZGVyQm94KQogICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVBcmVhLT5ob3Jp
em9udGFsU2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9mZnNldCgpLngoKTsK
ICAgICAgICAgfTsKIAotICAgICAgICBpZiAoIWlnbm9yZUJhc2VsaW5lKCkpIHsKLSAgICAgICAg
ICAgIGF1dG8gaW5saW5lQmxvY2tCYXNlbGluZVBvc2l0aW9uID0gaW5saW5lQmxvY2tCYXNlbGlu
ZShyZW5kZXJCb3gpOwotICAgICAgICAgICAgaWYgKGlzPFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJs
ZUJveD4ocmVuZGVyQm94KSAmJiBpbmxpbmVCbG9ja0Jhc2VsaW5lUG9zaXRpb24pIHsKLSAgICAg
ICAgICAgICAgICAvLyBIaXN0b3JpY2FsbHksIHdlIGRpZCB0aGlzIGNoZWNrIGZvciBhbGwgYmFz
ZWxpbmVzLiBCdXQgd2UgY2FuJ3QKLSAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhpcyBjb2Rl
IGZyb20gZGVwcmVjYXRlZCBmbGV4Ym94LCBiZWNhdXNlIGl0IGVmZmVjdGl2ZWx5Ci0gICAgICAg
ICAgICAgICAgLy8gYnJlYWtzIC13ZWJraXQtbGluZS1jbGFtcCwgd2hpY2ggaXMgdXNlZCBpbiB0
aGUgd2lsZCAtLSB3ZSB3b3VsZAotICAgICAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgYmFz
ZWxpbmUgYXMgaWYgLXdlYmtpdC1saW5lLWNsYW1wIHdhc24ndCB1c2VkLgotICAgICAgICAgICAg
ICAgIC8vIEZvciBzaW1wbGljaXR5LCB3ZSB1c2UgdGhpcyBmb3IgYWxsIHVzZXMgb2YgZGVwcmVj
YXRlZCBmbGV4Ym94LgotICAgICAgICAgICAgICAgIGF1dG8gYm90dG9tT2ZDb250ZW50ID0gcmVu
ZGVyQm94LmJvcmRlckJlZm9yZSgpICsgcmVuZGVyQm94LnBhZGRpbmdCZWZvcmUoKSArIHJlbmRl
ckJveC5jb250ZW50Qm94TG9naWNhbEhlaWdodCgpOwotICAgICAgICAgICAgICAgIGlmICgqaW5s
aW5lQmxvY2tCYXNlbGluZVBvc2l0aW9uID4gYm90dG9tT2ZDb250ZW50KQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcm91bmRUb0ludChyZW5kZXJCb3gubWFyZ2luQm94TG9naWNhbEhlaWdo
dCh3cml0aW5nTW9kZSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlubGluZUJs
b2NrQmFzZWxpbmVQb3NpdGlvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFyZ2luQmVmb3Jl
ICsgKmlubGluZUJsb2NrQmFzZWxpbmVQb3NpdGlvbjsKLSAgICAgICAgfQorICAgICAgICBpZiAo
aWdub3JlQmFzZWxpbmUoKSkKKyAgICAgICAgICAgIHJldHVybiByb3VuZFRvSW50KHJlbmRlckJv
eC5tYXJnaW5Cb3hMb2dpY2FsSGVpZ2h0KHdyaXRpbmdNb2RlKSk7CisKKyAgICAgICAgaWYgKGF1
dG8gaW5saW5lQmxvY2tCYXNlbGluZVBvc2l0aW9uID0gaW5saW5lQmxvY2tCYXNlbGluZShyZW5k
ZXJCb3gpKQorICAgICAgICAgICAgcmV0dXJuIG1hcmdpbkJlZm9yZSArICppbmxpbmVCbG9ja0Jh
c2VsaW5lUG9zaXRpb247CiAgICAgfQorCiAgICAgcmV0dXJuIHJvdW5kVG9JbnQocmVuZGVyQm94
Lm1hcmdpbkJveExvZ2ljYWxIZWlnaHQod3JpdGluZ01vZGUpKTsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>