<?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>204582</bug_id>
          
          <creation_ts>2019-11-25 08:37:15 -0800</creation_ts>
          <short_desc>[LFC][IFC] Rename LineLayout to LineLayoutContext</short_desc>
          <delta_ts>2019-11-25 09:29:42 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>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>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1593445</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-11-25 08:37:15 -0800</bug_when>
    <thetext>to emphasize that it&apos;s a context class for the inline content and not for a single line only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593446</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-25 08:37:35 -0800</bug_when>
    <thetext>&lt;rdar://problem/57474018&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593448</commentid>
    <comment_count>2</comment_count>
      <attachid>384300</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-11-25 08:41:07 -0800</bug_when>
    <thetext>Created attachment 384300
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593459</commentid>
    <comment_count>3</comment_count>
      <attachid>384300</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-25 09:29:40 -0800</bug_when>
    <thetext>Comment on attachment 384300
Patch

Clearing flags on attachment: 384300

Committed r252863: &lt;https://trac.webkit.org/changeset/252863&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593460</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-25 09:29:42 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384300</attachid>
            <date>2019-11-25 08:41:07 -0800</date>
            <delta_ts>2019-11-25 09:29:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204582-20191125084106.patch</filename>
            <type>text/plain</type>
            <size>59523</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyODYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODQyMDVmYzdjNWUzNjAz
ZmNlYjQyMTUyYWQwYjBiYzVmZTdmZmRkNS4uY2YwOGRiNTZkNDhjOTAwZjc4OTA2NmQ5NjMyMmI5
OTA2ZGU5NWM5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE5LTExLTI1ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBSZW5hbWUg
TGluZUxheW91dCB0byBMaW5lTGF5b3V0Q29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0NTgyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81
NzQ3NDAxOD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBMaW5lTGF5b3V0Q29udGV4dCBpcyB0aGUgY29udGV4dCBmb3IgdGhlIGlubGluZSBjb250ZW50
IGFuZCBub3QganVzdCBmb3IgYSBzaW5nbGUgbGluZS4KKworICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5
b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OmNvbXB1dGVkSW50cmluc2ljV2lkdGhGb3JDb25zdHJhaW50IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0Zv
ckxpbmUpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRp
bmdDb250ZXh0Lmg6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGlu
ZUJyZWFrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnJlYWtlcjo6YnJl
YWtpbmdDb250ZXh0Rm9ySW5saW5lQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmVCcmVha2VyOjp3b3JkQnJlYWtpbmdCZWhhdmlvciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVCcmVha2VyOjp0cnlCcmVha2luZ1RleHRSdW4gY29uc3QpOgorICAg
ICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmg6CisgICAg
ICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGlu
ZUxheW91dC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmlubGluZUl0ZW1XaWR0aCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXRDb250ZXh0OjpVbmNvbW1pdHRl
ZENvbnRlbnQ6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXRDb250
ZXh0OjpVbmNvbW1pdHRlZENvbnRlbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUxheW91dENvbnRleHQ6OkxpbmVMYXlvdXRDb250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUxheW91dENvbnRleHQ6OmxheW91dExpbmUpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0Q29udGV4dDo6Y29tbWl0UGVuZGluZ0NvbnRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0Q29udGV4dDo6Y2xvc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0Q29udGV4dDo6cGxhY2VJbmxpbmVJdGVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUxheW91dENvbnRleHQ6OnByb2Nlc3NV
bmNvbW1pdHRlZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0
Q29udGV4dDo6c2hvdWxkUHJvY2Vzc1VuY29tbWl0dGVkQ29udGVudCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXRDb250ZXh0OjpVbmNvbW1pdHRlZENvbnRlbnQ6
OnRyaW0pOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250
ZXh0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVMaW5lTGF5b3V0LmguCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlv
dXRDb250ZXh0Ojpmb3JtYXR0aW5nQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmVMYXlvdXRDb250ZXh0OjpVbmNvbW1pdHRlZENvbnRlbnQ6OnJ1bnMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0Q29udGV4dDo6VW5jb21taXR0ZWRDb250
ZW50OjpydW5zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUxheW91dENv
bnRleHQ6OlVuY29tbWl0dGVkQ29udGVudDo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXRDb250ZXh0OjpVbmNvbW1pdHRlZENvbnRlbnQ6OnNpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0Q29udGV4dDo6VW5j
b21taXR0ZWRDb250ZW50Ojp3aWR0aCBjb25zdCk6CisKIDIwMTktMTEtMjUgIFphbGFuIEJ1anRh
cyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXSBQYXNzIFVzZWRIb3Jpem9udGFs
L1ZlcnRpY2FsVmFsdWVzIGluIGJ5IGNvbnN0IHJlZmVyZW5jZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA1
YjBkNGM5NDkwMDViZGI0MzFiM2EzZjAzZTEzYTZjMzkyMDRmNWZiLi4xNjA3NjgyMjI4OWIwMTQ2
ZjM4ODE3N2E2ZWIzMjk1M2FiYWRkYmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTQ0MCw4ICsxNDQw
LDggQEAgbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ1N0YXRlLmNwcAog
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lSXRlbS5jcHAKIGxheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUxpbmUuY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5l
QnJlYWtlci5jcHAKLWxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVMYXlvdXQuY3Bw
CiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5jcHAKK2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvdGV4dC9UZXh0VXRpbC5jcHAKIGxheW91dC9pbnZhbGlkYXRpb24vSW52YWxpZGF0aW9uQ29u
dGV4dC5jcHAKIGxheW91dC9pbnZhbGlkYXRpb24vSW52YWxpZGF0aW9uU3RhdGUuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
M2M3MWRkMDczMWMwODM2NDIzNzBkZDc0ZDJjNWU5YzNiMjZlN2QxYy4uNTM4NGY4MjcyMTNjNTBi
ZTJlNjVhZDQwODM4MmY1MzVjOTBiMzllZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjAyMyw3ICsyMDIzLDcgQEAKIAkJNkYw
Q0Q2OTUyMjlFRDMyNzAwQzU5OTRFIC8qIElubGluZUxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGMENENjk0MjI5RUQzMjcwMEM1OTk0RSAvKiBJ
bmxpbmVMaW5lLmggKi87IH07CiAJCTZGMUNDMURFMjI1RjhCNDkwMDcyMEFEMiAvKiBJbmxpbmVU
ZXh0SXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NkYxQ0MxREQyMjVGOEI0MjAwNzIwQUQyIC8qIElubGluZVRleHRJdGVtLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkYyNkJCNkMyMzM0M0U2RjAw
MkYyQkVBIC8qIExheW91dENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZGMjZCQjZCMjMzNDNFNUIwMDJGMkJFQSAvKiBMYXlvdXRDb250ZXh0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNkYy
NkVCNDgyMzQwMDRBNTAwNjkwNkUyIC8qIElubGluZUxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGMjZFQjQ2MjM0MDA0QTUwMDY5MDZF
MiAvKiBJbmxpbmVMaW5lTGF5b3V0LmggKi87IH07CisJCTZGMjZFQjQ4MjM0MDA0QTUwMDY5MDZF
MiAvKiBMaW5lTGF5b3V0Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkYyNkVCNDYyMzQwMDRBNTAwNjkwNkUyIC8qIExpbmVMYXlvdXRDb250
ZXh0LmggKi87IH07CiAJCTZGM0UxRjYyMjEzNjE0MjAwMEE2NUEwOCAvKiBGbG9hdEJveC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYzRTFGNjEyMTM2
MTQxNzAwQTY1QTA4IC8qIEZsb2F0Qm94LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkY3Nzg2ODgyMzQ5MUFEODAwNEQ5NjM2IC8qIERpc3BsYXlQ
YWludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
Rjc3ODY4NzIzNDkxQUQ3MDA0RDk2MzYgLyogRGlzcGxheVBhaW50ZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjdDQTNDNjIwOEMyOTU3MDAy
RjI5QUIgLyogTGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZGN0NBM0M0MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRTdGF0ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05MjUyLDEw
ICs5MjUyLDEwIEBACiAJCTZGMUNDMUREMjI1RjhCNDIwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRl
bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVUZXh0SXRlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2RjIyMkI3NDFBQjUyRDY0MDA5NDY1MUEgLyogV2ViR0xWZXJ0ZXhBcnJheU9i
amVjdEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYyMjJCNzUxQUI1MkQ4QTAwOTQ2NTFBIC8q
IFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNkYyNUIyMDAyMjBBODVBQjAwMDAwMTFCIC8qIElubGluZUxpbmVM
YXlvdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5saW5lTGluZUxheW91dC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGMjVCMjAwMjIwQTg1QUIwMDAwMDExQiAvKiBMaW5l
TGF5b3V0Q29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaW5lTGF5b3V0Q29udGV4dC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMjZCQjY5MjMzNDNFNUEwMDJGMkJF
QSAvKiBMYXlvdXRDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dENvbnRleHQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjI2QkI2QjIzMzQzRTVCMDAyRjJC
RUEgLyogTGF5b3V0Q29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRDb250ZXh0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZGMjZFQjQ2MjM0MDA0QTUwMDY5MDZFMiAvKiBJ
bmxpbmVMaW5lTGF5b3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGlu
ZUxpbmVMYXlvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkYyNkVCNDYyMzQw
MDRBNTAwNjkwNkUyIC8qIExpbmVMYXlvdXRDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExpbmVMYXlvdXRDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTZGMzVFRkFGMjE4N0NCRDUwMDQ0RTBGNCAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dEdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2RjNFMUY1RjIxMzYxNDE3MDBBNjVBMDggLyogRmxvYXRCb3guY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRmxvYXRCb3guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjNF
MUY2MTIxMzYxNDE3MDBBNjVBMDggLyogRmxvYXRCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxvYXRC
b3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NjkxLDEwICsxNjY5MSwxMCBA
QAogCQkJCTZGQjQ3RTYxMjI3NzQyNUEwMEM3QkNCMCAvKiBJbmxpbmVMaW5lQm94LmggKi8sCiAJ
CQkJNkZFMTk4MTMyMTc4Mzk3QjAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmNwcCAqLywK
IAkJCQk2RkUxOTgxNTIxNzgzOTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuaCAqLywK
LQkJCQk2RjI1QjIwMDIyMEE4NUFCMDAwMDAxMUIgLyogSW5saW5lTGluZUxheW91dC5jcHAgKi8s
Ci0JCQkJNkYyNkVCNDYyMzQwMDRBNTAwNjkwNkUyIC8qIElubGluZUxpbmVMYXlvdXQuaCAqLywK
IAkJCQk2RjFDQzFEQzIyNUY4QjQxMDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0uY3BwICovLAog
CQkJCTZGMUNDMUREMjI1RjhCNDIwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oICovLAorCQkJ
CTZGMjVCMjAwMjIwQTg1QUIwMDAwMDExQiAvKiBMaW5lTGF5b3V0Q29udGV4dC5jcHAgKi8sCisJ
CQkJNkYyNkVCNDYyMzQwMDRBNTAwNjkwNkUyIC8qIExpbmVMYXlvdXRDb250ZXh0LmggKi8sCiAJ
CQkpOwogCQkJcGF0aCA9IGlubGluZWZvcm1hdHRpbmc7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwpAQCAtMzAxNzYsNyArMzAxNzYsNiBAQAogCQkJCTZGMENENjk1MjI5RUQzMjcwMEM1OTk0
RSAvKiBJbmxpbmVMaW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkI0N0U2MzIyNzc0MjVBMDBD
N0JDQjAgLyogSW5saW5lTGluZUJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZFMTk4MTcyMTc4
Mzk3QzAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQk2
RjI2RUI0ODIzNDAwNEE1MDA2OTA2RTIgLyogSW5saW5lTGluZUxheW91dC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQUE0QzNBNzcwQjJCMTY3OTAwMjMzNEEyIC8qIElubGluZVN0eWxlU2hlZXRPd25l
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NUEwOTdEOTMwMjAwOTRDOUU0IC8qIElubGlu
ZVRleHRCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCTFDMDEwNzAxMTkyNTk0REYwMDhBNDIwMSAv
KiBJbmxpbmVUZXh0Qm94U3R5bGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzExODIsNiArMzExODEs
NyBAQAogCQkJCTg0NzMwRDkxMTI0OEYwQjMwMEQzQTlDOSAvKiBMaWdodFNvdXJjZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjIyMjc5NjUwRDAwQkYyMjAwNzFCNzgyIC8qIExpbmVhckdyYWRpZW50
QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUIzMUM5MUUxMEFFMUI4RTAwMEM3Qjky
IC8qIExpbmVDbGFtcFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RjI2RUI0ODIzNDAwNEE1
MDA2OTA2RTIgLyogTGluZUxheW91dENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZGRUZB
QjJBMTgzODBEQTAwMDUxNDUzNCAvKiBMaW5lTGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUU0ODRBMzNFMjMwNTUzMjUwMDlBREU2QSAvKiBMaW5lTGF5b3V0VHJhdmVyc2FsLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRkRCQzA0NzE4M0QyN0I3MDA0MDcxMDkgLyogTGluZVdpZHRoLmgg
aW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCA0
YmJmZTBhMzI1YWI2YzA5Y2ZlNmFkNzM4MWFmMjdmZDg5OTFjYjE1Li44YzdjMDE4ZDUxYTA0MmIw
YzQ3YjcwNjYwMjU5Mzg0YjY3Zjg1YzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQuY3BwCkBAIC05NCwxMyArOTQsMTMgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
bGluZUxheW91dChjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYgdXNlZEhvcml6b24KICAgICBh
dXRvJiBpbmxpbmVJdGVtcyA9IGZvcm1hdHRpbmdTdGF0ZSgpLmlubGluZUl0ZW1zKCk7CiAgICAg
YXV0byBsaW5lTG9naWNhbFRvcCA9IGdlb21ldHJ5Rm9yQm94KHJvb3QoKSkuY29udGVudEJveFRv
cCgpOwogICAgIHVuc2lnbmVkIGxlYWRpbmdJbmxpbmVJdGVtSW5kZXggPSAwOwotICAgIE9wdGlv
bmFsPExpbmVMYXlvdXQ6OlBhcnRpYWxDb250ZW50PiBsZWFkaW5nUGFydGlhbENvbnRlbnQ7Cisg
ICAgT3B0aW9uYWw8TGluZUxheW91dENvbnRleHQ6OlBhcnRpYWxDb250ZW50PiBsZWFkaW5nUGFy
dGlhbENvbnRlbnQ7CiAgICAgYXV0byBsaW5lID0gTGluZSB7ICp0aGlzLCByb290KCkuc3R5bGUo
KS50ZXh0QWxpZ24oKSwgTGluZTo6U2tpcEFsaWdubWVudDo6Tm8gfTsKLSAgICBhdXRvIGxpbmVM
YXlvdXQgPSBMaW5lTGF5b3V0IHsgKnRoaXMsIGlubGluZUl0ZW1zIH07CisgICAgYXV0byBsaW5l
TGF5b3V0Q29udGV4dCA9IExpbmVMYXlvdXRDb250ZXh0IHsgKnRoaXMsIGlubGluZUl0ZW1zIH07
CiAKICAgICB3aGlsZSAobGVhZGluZ0lubGluZUl0ZW1JbmRleCA8IGlubGluZUl0ZW1zLnNpemUo
KSkgewogICAgICAgICBsaW5lLmluaXRpYWxpemUoY29uc3RyYWludHNGb3JMaW5lKHVzZWRIb3Jp
em9udGFsVmFsdWVzLCBsaW5lTG9naWNhbFRvcCkpOwotICAgICAgICBhdXRvIGxpbmVDb250ZW50
ID0gbGluZUxheW91dC5sYXlvdXQobGluZSwgbGVhZGluZ0lubGluZUl0ZW1JbmRleCwgbGVhZGlu
Z1BhcnRpYWxDb250ZW50KTsKKyAgICAgICAgYXV0byBsaW5lQ29udGVudCA9IGxpbmVMYXlvdXRD
b250ZXh0LmxheW91dExpbmUobGluZSwgbGVhZGluZ0lubGluZUl0ZW1JbmRleCwgbGVhZGluZ1Bh
cnRpYWxDb250ZW50KTsKICAgICAgICAgc2V0RGlzcGxheUJveGVzRm9yTGluZShsaW5lQ29udGVu
dCwgdXNlZEhvcml6b250YWxWYWx1ZXMpOwogCiAgICAgICAgIGxlYWRpbmdQYXJ0aWFsQ29udGVu
dCA9IHsgfTsKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpsaW5lTGF5b3V0KGNvbnN0IFVzZWRIb3Jpem9udGFsVmFsdWVzJiB1c2VkSG9yaXpvbgogICAg
ICAgICAgICAgICAgIGxlYWRpbmdJbmxpbmVJdGVtSW5kZXggPSAqbGluZUNvbnRlbnQudHJhaWxp
bmdJbmxpbmVJdGVtSW5kZXg7CiAgICAgICAgICAgICAgICAgLy8gVHVybiBwcmV2aW91cyBsaW5l
J3Mgb3ZlcmZsb3cgY29udGVudCBsZW5ndGggaW50byB0aGUgbmV4dCBsaW5lJ3MgbGVhZGluZyBj
b250ZW50IHBhcnRpYWwgbGVuZ3RoLgogICAgICAgICAgICAgICAgIC8vICJzcDwtPmxpdGNvbnRl
bnQiIC0+IG92ZXJmbG93IGxlbmd0aDogMTAgLT4gbGVhZGluZyBwYXJ0aWFsIGNvbnRlbnQgbGVu
Z3RoOiAxMC4gCi0gICAgICAgICAgICAgICAgbGVhZGluZ1BhcnRpYWxDb250ZW50ID0gTGluZUxh
eW91dDo6UGFydGlhbENvbnRlbnQgeyBsaW5lQ29udGVudC50cmFpbGluZ1BhcnRpYWxDb250ZW50
LT5sZW5ndGggfTsKKyAgICAgICAgICAgICAgICBsZWFkaW5nUGFydGlhbENvbnRlbnQgPSBMaW5l
TGF5b3V0Q29udGV4dDo6UGFydGlhbENvbnRlbnQgeyBsaW5lQ29udGVudC50cmFpbGluZ1BhcnRp
YWxDb250ZW50LT5sZW5ndGggfTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAg
IGxlYWRpbmdJbmxpbmVJdGVtSW5kZXggPSAqbGluZUNvbnRlbnQudHJhaWxpbmdJbmxpbmVJdGVt
SW5kZXggKyAxOwogICAgICAgICB9IGVsc2UgewpAQCAtMjM0LDExICsyMzQsMTEgQEAgTGF5b3V0
VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aEZvckNv
bnN0cmFpbnQoY29uc3QgVXMKICAgICBMYXlvdXRVbml0IG1heGltdW1MaW5lV2lkdGg7CiAgICAg
dW5zaWduZWQgbGVhZGluZ0lubGluZUl0ZW1JbmRleCA9IDA7CiAgICAgYXV0byBsaW5lID0gTGlu
ZSB7ICp0aGlzLCByb290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKSwgTGluZTo6U2tpcEFsaWdubWVu
dDo6WWVzIH07Ci0gICAgYXV0byBsaW5lTGF5b3V0ID0gTGluZUxheW91dCB7ICp0aGlzLCBpbmxp
bmVJdGVtcyB9OworICAgIGF1dG8gbGluZUxheW91dENvbnRleHQgPSBMaW5lTGF5b3V0Q29udGV4
dCB7ICp0aGlzLCBpbmxpbmVJdGVtcyB9OwogICAgIHdoaWxlIChsZWFkaW5nSW5saW5lSXRlbUlu
ZGV4IDwgaW5saW5lSXRlbXMuc2l6ZSgpKSB7CiAgICAgICAgIC8vIE9ubHkgdGhlIGhvcml6dG9u
YWwgYXZhaWxhYmxlIHdpZHRoIGlzIGNvbnN0cmFpbmVkIHdoZW4gY29tcHV0aW5nIGludHJpbnNp
YyB3aWR0aC4KICAgICAgICAgbGluZS5pbml0aWFsaXplKExpbmU6OkNvbnN0cmFpbnRzIHsgeyB9
LCB1c2VkSG9yaXpvbnRhbFZhbHVlcy5jb25zdHJhaW50cy53aWR0aCwgZmFsc2UsIHsgfSB9KTsK
LSAgICAgICAgYXV0byBsaW5lQ29udGVudCA9IGxpbmVMYXlvdXQubGF5b3V0KGxpbmUsIGxlYWRp
bmdJbmxpbmVJdGVtSW5kZXgsIHsgfSk7CisgICAgICAgIGF1dG8gbGluZUNvbnRlbnQgPSBsaW5l
TGF5b3V0Q29udGV4dC5sYXlvdXRMaW5lKGxpbmUsIGxlYWRpbmdJbmxpbmVJdGVtSW5kZXgsIHsg
fSk7CiAKICAgICAgICAgbGVhZGluZ0lubGluZUl0ZW1JbmRleCA9ICpsaW5lQ29udGVudC50cmFp
bGluZ0lubGluZUl0ZW1JbmRleCArIDE7CiAgICAgICAgIExheW91dFVuaXQgZmxvYXRzV2lkdGg7
CkBAIC00MDcsNyArNDA3LDcgQEAgTGluZTo6Q29uc3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbnN0cmFpbnRzRm9yTGluZShjb25zdCBVc2VkSG9yaXpvbnQKICAgICByZXR1cm4g
TGluZTo6Q29uc3RyYWludHMgeyB7IGxpbmVMb2dpY2FsTGVmdCwgbGluZUxvZ2ljYWxUb3AgfSwg
YXZhaWxhYmxlV2lkdGgsIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCwgcXVpcmtzKCkubGluZUhl
aWdodENvbnN0cmFpbnRzKHJvb3QoKSkgfTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6c2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lTGF5b3V0OjpMaW5lQ29udGVu
dCYgbGluZUNvbnRlbnQsIGNvbnN0IFVzZWRIb3Jpem9udGFsVmFsdWVzJiB1c2VkSG9yaXpvbnRh
bFZhbHVlcykKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0Zv
ckxpbmUoY29uc3QgTGluZUxheW91dENvbnRleHQ6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCwg
Y29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMmIHVzZWRIb3Jpem9udGFsVmFsdWVzKQogewogICAg
IGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IHRoaXMtPmZvcm1hdHRpbmdTdGF0ZSgpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCA2OGM3MDc1YmY4NzFlY2Q2YzU4OWE1Y2U1
MTQzM2NhZWE0N2JhMTlmLi41MDQ0NDRmMmIyMjBhNDhhYWU4ZDMzOTk2MzNhMWUzYWQzNmQxNjNl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTI4LDcgKzI4LDcgQEAKICNp
ZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAogI2luY2x1ZGUgIkZvcm1hdHRp
bmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW5saW5lTGluZUxheW91dC5oIgorI2luY2x1ZGUgIkxp
bmVMYXlvdXRDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC05MCw3ICs5MCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvbGxl
Y3RJbmxpbmVDb250ZW50SWZOZWVkZWQoKTsKICAgICBMaW5lOjpDb25zdHJhaW50cyBjb25zdHJh
aW50c0ZvckxpbmUoY29uc3QgVXNlZEhvcml6b250YWxWYWx1ZXMmLCBjb25zdCBMYXlvdXRVbml0
IGxpbmVMb2dpY2FsVG9wKTsKLSAgICB2b2lkIHNldERpc3BsYXlCb3hlc0ZvckxpbmUoY29uc3Qg
TGluZUxheW91dDo6TGluZUNvbnRlbnQmLCBjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYpOwor
ICAgIHZvaWQgc2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lTGF5b3V0Q29udGV4dDo6
TGluZUNvbnRlbnQmLCBjb25zdCBVc2VkSG9yaXpvbnRhbFZhbHVlcyYpOwogICAgIHZvaWQgaW52
YWxpZGF0ZUZvcm1hdHRpbmdTdGF0ZShjb25zdCBJbnZhbGlkYXRpb25TdGF0ZSYpOwogCiAgICAg
Y29uc3QgSW5saW5lRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJl
dHVybiBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KEZvcm1hdHRpbmdDb250ZXh0Ojpm
b3JtYXR0aW5nU3RhdGUoKSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcAppbmRleCBjM2Q0YTkw
ZTZjOThkYTNkZmVhOTZlNjg5M2IyMTliNjJkNDY4YzU5Li5jZmRlZDZjMjNiYzBhNmZhY2FhYzI1
MDJjMWE3YWQ2YjI1YjdiZGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuY3BwCkBAIC00Nyw3ICs0
Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1RyYWlsaW5nV2hpdGVzcGFjZVdpdGhQcmVXcmFw
KGNvbnN0IElubGluZUl0ZW0mIHRyYWlsaW5nSW5sCiAgICAgcmV0dXJuIHRyYWlsaW5nSW5saW5l
SXRlbS5zdHlsZSgpLndoaXRlU3BhY2UoKSA9PSBXaGl0ZVNwYWNlOjpQcmVXcmFwICYmIGRvd25j
YXN0PElubGluZVRleHRJdGVtPih0cmFpbGluZ0lubGluZUl0ZW0pLmlzV2hpdGVzcGFjZSgpOwog
fQogCi1MaW5lQnJlYWtlcjo6QnJlYWtpbmdDb250ZXh0IExpbmVCcmVha2VyOjpicmVha2luZ0Nv
bnRleHRGb3JJbmxpbmVDb250ZW50KGNvbnN0IExpbmVMYXlvdXQ6OlJ1bkxpc3QmIHJ1bnMsIExh
eW91dFVuaXQgbG9naWNhbFdpZHRoLCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoLCBib29sIGxp
bmVJc0VtcHR5KQorTGluZUJyZWFrZXI6OkJyZWFraW5nQ29udGV4dCBMaW5lQnJlYWtlcjo6YnJl
YWtpbmdDb250ZXh0Rm9ySW5saW5lQ29udGVudChjb25zdCBMaW5lTGF5b3V0Q29udGV4dDo6UnVu
TGlzdCYgcnVucywgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIExheW91dFVuaXQgYXZhaWxhYmxl
V2lkdGgsIGJvb2wgbGluZUlzRW1wdHkpCiB7CiAgICAgaWYgKGxvZ2ljYWxXaWR0aCA8PSBhdmFp
bGFibGVXaWR0aCkKICAgICAgICAgcmV0dXJuIHsgQnJlYWtpbmdDb250ZXh0OjpDb250ZW50QnJl
YWs6OktlZXAsIHsgfSB9OwpAQCAtODcsNyArODcsNyBAQCBib29sIExpbmVCcmVha2VyOjpzaG91
bGRXcmFwRmxvYXRCb3goTGF5b3V0VW5pdCBmbG9hdExvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCBh
dgogICAgIHJldHVybiAhbGluZUlzRW1wdHkgJiYgZmxvYXRMb2dpY2FsV2lkdGggPiBhdmFpbGFi
bGVXaWR0aDsKIH0KIAotT3B0aW9uYWw8TGluZUJyZWFrZXI6OkJyZWFraW5nQ29udGV4dDo6VHJh
aWxpbmdQYXJ0aWFsQ29udGVudD4gTGluZUJyZWFrZXI6OndvcmRCcmVha2luZ0JlaGF2aW9yKGNv
bnN0IExpbmVMYXlvdXQ6OlJ1bkxpc3QmIHJ1bnMsIExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgp
IGNvbnN0CitPcHRpb25hbDxMaW5lQnJlYWtlcjo6QnJlYWtpbmdDb250ZXh0OjpUcmFpbGluZ1Bh
cnRpYWxDb250ZW50PiBMaW5lQnJlYWtlcjo6d29yZEJyZWFraW5nQmVoYXZpb3IoY29uc3QgTGlu
ZUxheW91dENvbnRleHQ6OlJ1bkxpc3QmIHJ1bnMsIExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgp
IGNvbnN0CiB7CiAgICAgLy8gQ2hlY2sgd2hlcmUgdGhlIG92ZXJmbG93IG9jY3VycyBhbmQgdXNl
IHRoZSBjb3JyZXNwb25kaW5nIHN0eWxlIHRvIGZpZ3VyZSBvdXQgdGhlIGJyZWFraW5nIGJlaGF2
aW91ci4KICAgICAvLyA8c3BhbiBzdHlsZT0id29yZC1icmVhazogbm9ybWFsIj5maXJzdDwvc3Bh
bj48c3BhbiBzdHlsZT0id29yZC1icmVhazogYnJlYWstYWxsIj5zZWNvbmQ8L3NwYW4+PHNwYW4g
c3R5bGU9IndvcmQtYnJlYWs6IG5vcm1hbCI+dGhpcmQ8L3NwYW4+CkBAIC0xMjAsNyArMTIwLDcg
QEAgT3B0aW9uYWw8TGluZUJyZWFrZXI6OkJyZWFraW5nQ29udGV4dDo6VHJhaWxpbmdQYXJ0aWFs
Q29udGVudD4gTGluZUJyZWFrZXI6OndvcmQKICAgICByZXR1cm4geyB9OwogfQogCi1PcHRpb25h
bDxMaW5lQnJlYWtlcjo6U3BsaXRMZW5ndGhBbmRXaWR0aD4gTGluZUJyZWFrZXI6OnRyeUJyZWFr
aW5nVGV4dFJ1bihjb25zdCBMaW5lTGF5b3V0OjpSdW4gb3ZlcmZsb3dSdW4sIExheW91dFVuaXQg
YXZhaWxhYmxlV2lkdGgpIGNvbnN0CitPcHRpb25hbDxMaW5lQnJlYWtlcjo6U3BsaXRMZW5ndGhB
bmRXaWR0aD4gTGluZUJyZWFrZXI6OnRyeUJyZWFraW5nVGV4dFJ1bihjb25zdCBMaW5lTGF5b3V0
Q29udGV4dDo6UnVuIG92ZXJmbG93UnVuLCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKSBjb25z
dAogewogICAgIEFTU0VSVChvdmVyZmxvd1J1bi5pbmxpbmVJdGVtLmlzVGV4dCgpKTsKICAgICBh
dXRvIGJyZWFrV29yZHMgPSBvdmVyZmxvd1J1bi5pbmxpbmVJdGVtLnN0eWxlKCkud29yZEJyZWFr
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVMaW5lQnJlYWtlci5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lTGluZUJyZWFrZXIuaAppbmRleCA0YzIwODc5NDQ1ZmMwOWFkN2RiZTU2ZjI3YmQw
Y2UzY2FmNGRlNzJiLi5mYzQ0ZDIyYWQyZTAyMzg2ZGVjNDgwMTBhMTY3ZGU0MDRjODMyYTljIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVM
aW5lQnJlYWtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmVCcmVha2VyLmgKQEAgLTI3LDggKzI3LDggQEAKIAogI2lmIEVOQUJMRShMQVlP
VVRfRk9STUFUVElOR19DT05URVhUKQogCi0jaW5jbHVkZSAiSW5saW5lTGluZUxheW91dC5oIgog
I2luY2x1ZGUgIkxheW91dFVuaXQuaCIKKyNpbmNsdWRlICJMaW5lTGF5b3V0Q29udGV4dC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKQEAgLTQ4LDE4ICs0OCwx
OCBAQCBwdWJsaWM6CiAgICAgICAgIH07CiAgICAgICAgIE9wdGlvbmFsPFRyYWlsaW5nUGFydGlh
bENvbnRlbnQ+IHRyYWlsaW5nUGFydGlhbENvbnRlbnQ7CiAgICAgfTsKLSAgICBCcmVha2luZ0Nv
bnRleHQgYnJlYWtpbmdDb250ZXh0Rm9ySW5saW5lQ29udGVudChjb25zdCBMaW5lTGF5b3V0OjpS
dW5MaXN0JiwgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIExheW91dFVuaXQgYXZhaWxhYmxlV2lk
dGgsIGJvb2wgbGluZUlzRW1wdHkpOworICAgIEJyZWFraW5nQ29udGV4dCBicmVha2luZ0NvbnRl
eHRGb3JJbmxpbmVDb250ZW50KGNvbnN0IExpbmVMYXlvdXRDb250ZXh0OjpSdW5MaXN0JiwgTGF5
b3V0VW5pdCBsb2dpY2FsV2lkdGgsIExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgsIGJvb2wgbGlu
ZUlzRW1wdHkpOwogICAgIGJvb2wgc2hvdWxkV3JhcEZsb2F0Qm94KExheW91dFVuaXQgZmxvYXRM
b2dpY2FsV2lkdGgsIExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgsIGJvb2wgbGluZUlzRW1wdHkp
OwogCiBwcml2YXRlOgogCi0gICAgT3B0aW9uYWw8QnJlYWtpbmdDb250ZXh0OjpUcmFpbGluZ1Bh
cnRpYWxDb250ZW50PiB3b3JkQnJlYWtpbmdCZWhhdmlvcihjb25zdCBMaW5lTGF5b3V0OjpSdW5M
aXN0JiwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCkgY29uc3Q7CisgICAgT3B0aW9uYWw8QnJl
YWtpbmdDb250ZXh0OjpUcmFpbGluZ1BhcnRpYWxDb250ZW50PiB3b3JkQnJlYWtpbmdCZWhhdmlv
cihjb25zdCBMaW5lTGF5b3V0Q29udGV4dDo6UnVuTGlzdCYsIExheW91dFVuaXQgYXZhaWxhYmxl
V2lkdGgpIGNvbnN0OwogCiAgICAgc3RydWN0IFNwbGl0TGVuZ3RoQW5kV2lkdGggewogICAgICAg
ICB1bnNpZ25lZCBsZW5ndGggeyAwIH07CiAgICAgICAgIExheW91dFVuaXQgbGVmdExvZ2ljYWxX
aWR0aDsKICAgICB9OwotICAgIE9wdGlvbmFsPFNwbGl0TGVuZ3RoQW5kV2lkdGg+IHRyeUJyZWFr
aW5nVGV4dFJ1bihjb25zdCBMaW5lTGF5b3V0OjpSdW4gb3ZlcmZsb3dSdW4sIExheW91dFVuaXQg
YXZhaWxhYmxlV2lkdGgpIGNvbnN0OworICAgIE9wdGlvbmFsPFNwbGl0TGVuZ3RoQW5kV2lkdGg+
IHRyeUJyZWFraW5nVGV4dFJ1bihjb25zdCBMaW5lTGF5b3V0Q29udGV4dDo6UnVuIG92ZXJmbG93
UnVuLCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKSBjb25zdDsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVMYXlv
dXQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGlu
ZUxheW91dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5YWM2ZjFmYmYxY2Fk
NjliZTlkMjdhMWQwNjYxZGY4YzY5MTMwZGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lTGluZUxheW91dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMzEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbmxpbmVMaW5lTGF5b3V0
LmgiCi0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLQotI2luY2x1ZGUg
IklubGluZUxpbmVCcmVha2VyLmgiCi0jaW5jbHVkZSAiTGF5b3V0Qm94LmgiCi0jaW5jbHVkZSAi
VGV4dFV0aWwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIExheW91dCB7Ci0K
LXN0YXRpYyBMYXlvdXRVbml0IGlubGluZUl0ZW1XaWR0aChjb25zdCBGb3JtYXR0aW5nQ29udGV4
dCYgZm9ybWF0dGluZ0NvbnRleHQsIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIExheW91
dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KQotewotICAgIGlmIChpbmxpbmVJdGVtLmlzRm9yY2Vk
TGluZUJyZWFrKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGlzPElubGluZVRleHRJ
dGVtPihpbmxpbmVJdGVtKSkgewotICAgICAgICBhdXRvJiBpbmxpbmVUZXh0SXRlbSA9IGRvd25j
YXN0PElubGluZVRleHRJdGVtPihpbmxpbmVJdGVtKTsKLSAgICAgICAgaWYgKGF1dG8gY29udGVu
dFdpZHRoID0gaW5saW5lVGV4dEl0ZW0ud2lkdGgoKSkKLSAgICAgICAgICAgIHJldHVybiAqY29u
dGVudFdpZHRoOwotICAgICAgICBhdXRvIGVuZCA9IGlubGluZVRleHRJdGVtLmlzQ29sbGFwc2li
bGUoKSA/IGlubGluZVRleHRJdGVtLnN0YXJ0KCkgKyAxIDogaW5saW5lVGV4dEl0ZW0uZW5kKCk7
Ci0gICAgICAgIHJldHVybiBUZXh0VXRpbDo6d2lkdGgoaW5saW5lVGV4dEl0ZW0ubGF5b3V0Qm94
KCksIGlubGluZVRleHRJdGVtLnN0YXJ0KCksIGVuZCwgY29udGVudExvZ2ljYWxMZWZ0KTsKLSAg
ICB9Ci0KLSAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVJdGVtLmxheW91dEJveCgpOwotICAg
IGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gobGF5
b3V0Qm94KTsKLQotICAgIGlmIChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAg
ICAgICAgcmV0dXJuIGJveEdlb21ldHJ5Lm1hcmdpbkJveFdpZHRoKCk7Ci0KLSAgICBpZiAobGF5
b3V0Qm94LnJlcGxhY2VkKCkpCi0gICAgICAgIHJldHVybiBib3hHZW9tZXRyeS53aWR0aCgpOwot
Ci0gICAgaWYgKGlubGluZUl0ZW0uaXNDb250YWluZXJTdGFydCgpKQotICAgICAgICByZXR1cm4g
Ym94R2VvbWV0cnkubWFyZ2luU3RhcnQoKSArIGJveEdlb21ldHJ5LmJvcmRlckxlZnQoKSArIGJv
eEdlb21ldHJ5LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKTsKLQotICAgIGlmIChpbmxpbmVJdGVt
LmlzQ29udGFpbmVyRW5kKCkpCi0gICAgICAgIHJldHVybiBib3hHZW9tZXRyeS5tYXJnaW5FbmQo
KSArIGJveEdlb21ldHJ5LmJvcmRlclJpZ2h0KCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nUmlnaHQo
KS52YWx1ZU9yKDApOwotCi0gICAgLy8gTm9uLXJlcGxhY2VkIGlubGluZSBib3ggKGUuZy4gaW5s
aW5lLWJsb2NrKQotICAgIHJldHVybiBib3hHZW9tZXRyeS53aWR0aCgpOwotfQotCi12b2lkIExp
bmVMYXlvdXQ6OlVuY29tbWl0dGVkQ29udGVudDo6YWRkKGNvbnN0IElubGluZUl0ZW0mIGlubGlu
ZUl0ZW0sIExheW91dFVuaXQgbG9naWNhbFdpZHRoKQotewotICAgIG1fdW5jb21taXR0ZWRSdW5z
LmFwcGVuZCh7IGlubGluZUl0ZW0sIGxvZ2ljYWxXaWR0aCB9KTsKLSAgICBtX3dpZHRoICs9IGxv
Z2ljYWxXaWR0aDsKLX0KLQotdm9pZCBMaW5lTGF5b3V0OjpVbmNvbW1pdHRlZENvbnRlbnQ6OnJl
c2V0KCkKLXsKLSAgICBtX3VuY29tbWl0dGVkUnVucy5jbGVhcigpOwotICAgIG1fd2lkdGggPSAw
OwotfQotCi1MaW5lTGF5b3V0OjpMaW5lTGF5b3V0KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250
ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgY29uc3QgSW5saW5lSXRlbXMmIGlubGluZUl0
ZW1zKQotICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCkKLSAgICAsIG1faW5saW5lSXRlbXMoaW5saW5lSXRlbXMpCi17Ci19Ci0KLUxpbmVMYXlv
dXQ6OkxpbmVDb250ZW50IExpbmVMYXlvdXQ6OmxheW91dChMaW5lJiBsaW5lLCB1bnNpZ25lZCBs
ZWFkaW5nSW5saW5lSXRlbUluZGV4LCBPcHRpb25hbDxQYXJ0aWFsQ29udGVudD4gbGVhZGluZ1Bh
cnRpYWxDb250ZW50KQotewotICAgIGF1dG8gaW5pdGlhbGl6ZSA9IFsmXSB7Ci0gICAgICAgIG1f
Y29tbWl0dGVkSW5saW5lSXRlbUNvdW50ID0gMDsKLSAgICAgICAgbV91bmNvbW1pdHRlZENvbnRl
bnQucmVzZXQoKTsKLSAgICAgICAgbV9sZWFkaW5nUGFydGlhbFRleHRJdGVtID0geyB9OwotICAg
ICAgICBtX3RyYWlsaW5nUGFydGlhbFRleHRJdGVtID0geyB9OwotICAgICAgICBtX292ZXJmbG93
VGV4dExlbmd0aCA9IHsgfTsKLSAgICB9OwotICAgIGluaXRpYWxpemUoKTsKLSAgICAvLyBJdGVy
YXRlIHRocm91Z2ggdGhlIGlubGluZSBjb250ZW50IGFuZCBwbGFjZSB0aGUgaW5saW5lIGJveGVz
IG9uIHRoZSBjdXJyZW50IGxpbmUuCi0gICAgLy8gU3RhcnQgd2l0aCB0aGUgcGFydGlhbCBsZWFk
aW5nIHRleHQgZnJvbSB0aGUgcHJldmlvdXMgbGluZS4KLSAgICBhdXRvIGZpcnN0Tm9uUGFydGlh
bElubGluZUl0ZW1JbmRleCA9IGxlYWRpbmdJbmxpbmVJdGVtSW5kZXg7Ci0gICAgaWYgKGxlYWRp
bmdQYXJ0aWFsQ29udGVudCkgewotICAgICAgICAvLyBIYW5kbGUgcGFydGlhbCBpbmxpbmUgaXRl
bSAoc3BsaXQgdGV4dCBmcm9tIHRoZSBwcmV2aW91cyBsaW5lKS4KLSAgICAgICAgYXV0byYgbGVh
ZGluZ1RleHRJdGVtID0gbV9pbmxpbmVJdGVtc1tsZWFkaW5nSW5saW5lSXRlbUluZGV4XTsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobGVhZGluZ1RleHRJdGVtLT5pc1RleHQoKSk7Ci0gICAgICAg
IC8vIENvbnN0cnVjdCBhIHBhcnRpYWwgbGVhZGluZyBpbmxpbmUgaXRlbS4KLSAgICAgICAgQVNT
RVJUKCFtX2xlYWRpbmdQYXJ0aWFsVGV4dEl0ZW0pOwotICAgICAgICBtX2xlYWRpbmdQYXJ0aWFs
VGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oKmxlYWRpbmdUZXh0SXRlbSkucmln
aHQobGVhZGluZ1BhcnRpYWxDb250ZW50LT5sZW5ndGgpOwotICAgICAgICBpZiAocGxhY2VJbmxp
bmVJdGVtKGxpbmUsICptX2xlYWRpbmdQYXJ0aWFsVGV4dEl0ZW0pID09IElzRW5kT2ZMaW5lOjpZ
ZXMpCi0gICAgICAgICAgICByZXR1cm4gY2xvc2UobGluZSwgbGVhZGluZ0lubGluZUl0ZW1JbmRl
eCk7Ci0gICAgICAgICsrZmlyc3ROb25QYXJ0aWFsSW5saW5lSXRlbUluZGV4OwotICAgIH0KLQot
ICAgIGZvciAoYXV0byBpbmxpbmVJdGVtSW5kZXggPSBmaXJzdE5vblBhcnRpYWxJbmxpbmVJdGVt
SW5kZXg7IGlubGluZUl0ZW1JbmRleCA8IG1faW5saW5lSXRlbXMuc2l6ZSgpOyArK2lubGluZUl0
ZW1JbmRleCkgewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBuZWVkIHRvIHJlLW1l
YXN1cmUgdGhlIGRyb3BwZWQsIHVuY29tbWl0dGVkIGNvbnRlbnQgd2hlbiByZS11c2luZyB0aGVt
IG9uIHRoZSBuZXh0IGxpbmUuCi0gICAgICAgIGlmIChwbGFjZUlubGluZUl0ZW0obGluZSwgKm1f
aW5saW5lSXRlbXNbaW5saW5lSXRlbUluZGV4XSkgPT0gSXNFbmRPZkxpbmU6OlllcykKLSAgICAg
ICAgICAgIHJldHVybiBjbG9zZShsaW5lLCBsZWFkaW5nSW5saW5lSXRlbUluZGV4KTsKLSAgICB9
Ci0gICAgLy8gQ2hlY2sgdGhlIHVuY29tbWl0dGVkIGNvbnRlbnQgd2hldGhlciB0aGV5IGZpdCBu
b3cgdGhhdCB3ZSBrbm93IHdlIGFyZSBhdCBhIGNvbW1pdCBib3VuZGFyeS4KLSAgICBpZiAoIW1f
dW5jb21taXR0ZWRDb250ZW50LmlzRW1wdHkoKSkKLSAgICAgICAgcHJvY2Vzc1VuY29tbWl0dGVk
Q29udGVudChsaW5lKTsKLSAgICByZXR1cm4gY2xvc2UobGluZSwgbGVhZGluZ0lubGluZUl0ZW1J
bmRleCk7Ci19Ci0KLXZvaWQgTGluZUxheW91dDo6Y29tbWl0UGVuZGluZ0NvbnRlbnQoTGluZSYg
bGluZSkKLXsKLSAgICBpZiAobV91bmNvbW1pdHRlZENvbnRlbnQuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgbV9jb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgKz0gbV91bmNvbW1pdHRl
ZENvbnRlbnQuc2l6ZSgpOwotICAgIGZvciAoYXV0byYgdW5jb21taXR0ZWRSdW4gOiBtX3VuY29t
bWl0dGVkQ29udGVudC5ydW5zKCkpCi0gICAgICAgIGxpbmUuYXBwZW5kKHVuY29tbWl0dGVkUnVu
LmlubGluZUl0ZW0sIHVuY29tbWl0dGVkUnVuLmxvZ2ljYWxXaWR0aCk7Ci0gICAgbV91bmNvbW1p
dHRlZENvbnRlbnQucmVzZXQoKTsKLX0KLQotTGluZUxheW91dDo6TGluZUNvbnRlbnQgTGluZUxh
eW91dDo6Y2xvc2UoTGluZSYgbGluZSwgdW5zaWduZWQgbGVhZGluZ0lubGluZUl0ZW1JbmRleCkK
LXsKLSAgICBBU1NFUlQobV9jb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgfHwgbGluZS5oYXNJbnRy
dXNpdmVGbG9hdCgpKTsKLSAgICBtX3VuY29tbWl0dGVkQ29udGVudC5yZXNldCgpOwotICAgIGlm
ICghbV9jb21taXR0ZWRJbmxpbmVJdGVtQ291bnQpCi0gICAgICAgIHJldHVybiBMaW5lQ29udGVu
dCB7IHsgfSwgeyB9LCBXVEZNb3ZlKG1fZmxvYXRzKSwgbGluZS5jbG9zZSgpLCBsaW5lLmxpbmVC
b3goKSB9OwotCi0gICAgT3B0aW9uYWw8UGFydGlhbENvbnRlbnQ+IG92ZXJmbG93Q29udGVudDsK
LSAgICBpZiAobV9vdmVyZmxvd1RleHRMZW5ndGgpCi0gICAgICAgIG92ZXJmbG93Q29udGVudCA9
IFBhcnRpYWxDb250ZW50IHsgKm1fb3ZlcmZsb3dUZXh0TGVuZ3RoIH07Ci0gICAgYXV0byB0cmFp
bGluZ0lubGluZUl0ZW1JbmRleCA9IGxlYWRpbmdJbmxpbmVJdGVtSW5kZXggKyBtX2NvbW1pdHRl
ZElubGluZUl0ZW1Db3VudCAtIDE7Ci0KLSAgICBhdXRvIGlzTGFzdExpbmVXaXRoSW5saW5lQ29u
dGVudCA9IFsmXSB7Ci0gICAgICAgIGlmIChvdmVyZmxvd0NvbnRlbnQpCi0gICAgICAgICAgICBy
ZXR1cm4gTGluZTo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObzsKLSAgICAgICAgLy8g
U2tpcCBmbG9hdHMgYmFja3dhcmRzIHRvIHNlZSBpZiB0aGlzIGlzIGdvaW5nIHRvIGJlIHRoZSBs
YXN0IGxpbmUgd2l0aCBpbmxpbmUgY29udGVudC4KLSAgICAgICAgZm9yIChhdXRvIGkgPSBtX2lu
bGluZUl0ZW1zLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgaWYgKCFtX2lubGluZUl0ZW1z
W2ldLT5pc0Zsb2F0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGkgPT0gdHJhaWxpbmdJbmxp
bmVJdGVtSW5kZXggPyBMaW5lOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6OlllcyA6IExp
bmU6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6Tm87Ci0gICAgICAgIH0KLSAgICAgICAg
Ly8gVGhlcmUgaGFzIHRvIGJlIGF0IGxlYXN0IG9uZSBub24tZmxvYXQgaXRlbS4KLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBMaW5lOjpJc0xhc3RMaW5lV2l0
aElubGluZUNvbnRlbnQ6Ok5vOwotICAgIH07Ci0KLSAgICByZXR1cm4gTGluZUNvbnRlbnQgeyB0
cmFpbGluZ0lubGluZUl0ZW1JbmRleCwgb3ZlcmZsb3dDb250ZW50LCBXVEZNb3ZlKG1fZmxvYXRz
KSwgbGluZS5jbG9zZShpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQoKSksIGxpbmUubGluZUJv
eCgpIH07Ci19Ci0KLUxpbmVMYXlvdXQ6OklzRW5kT2ZMaW5lIExpbmVMYXlvdXQ6OnBsYWNlSW5s
aW5lSXRlbShMaW5lJiBsaW5lLCBjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQotewotICAg
IGF1dG8gY3VycmVudExvZ2ljYWxSaWdodCA9IGxpbmUubGluZUJveCgpLmxvZ2ljYWxSaWdodCgp
OwotICAgIGF1dG8gaXRlbUxvZ2ljYWxXaWR0aCA9IGlubGluZUl0ZW1XaWR0aChmb3JtYXR0aW5n
Q29udGV4dCgpLCBpbmxpbmVJdGVtLCBjdXJyZW50TG9naWNhbFJpZ2h0KTsKLQotICAgIC8vIEZs
b2F0cyBhcmUgc3BlY2lhbCwgdGhleSBhcmUgaW50cnVzaXZlIGJ1dCB0aGV5IGRvbid0IHJlYWxs
eSBwYXJ0aWNpcGF0ZSBpbiB0aGUgbGluZSBsYXlvdXQgY29udGV4dC4KLSAgICBpZiAoaW5saW5l
SXRlbS5pc0Zsb2F0KCkpIHsKLSAgICAgICAgLy8gRklYTUU6IEl0IGdldHMgYSBiaXQgbW9yZSBj
b21wbGljYXRlZCB3aGVuIHRoZXJlJ3Mgc29tZSB1bmNvbW1pdHRlZCBjb250ZW50IHdoZXRoZXIg
dGhleSBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgbGluZQotICAgICAgICAvLyBlLmcu
IHRleHRfY29udGVudDxkaXYgc3R5bGU9ImZsb2F0OiBsZWZ0Ij48L2Rpdj5jb250aW51b3VzX3Rl
eHRfY29udGVudAotICAgICAgICAvLyBOb3Qgc3VyZSB3aGF0IHRvIGRvIHdoZW4gdGhlIGZsb2F0
IHRha2VzIHVwIHRoZSBhdmFpbGFibGUgc3BhY2UgYW5kIHdlJ3ZlIGdvdCBjb250aW51b3VzIGNv
bnRlbnQuIEJyb3dzZXIgZW5naW5lcyBkb24ndCBhZ3JlZS4KLSAgICAgICAgLy8gTGV0J3MganVz
dCBjb21taXQgdGhlIHBlbmRpbmcgY29udGVudCBhbmQgdHJ5IHBsYWNpbmcgdGhlIGZsb2F0IGZv
ciBub3cuCi0gICAgICAgIGlmICghbV91bmNvbW1pdHRlZENvbnRlbnQuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICBpZiAocHJvY2Vzc1VuY29tbWl0dGVkQ29udGVudChsaW5lKSA9PSBJc0VuZE9m
TGluZTo6WWVzKQotICAgICAgICAgICAgICAgIHJldHVybiBJc0VuZE9mTGluZTo6WWVzOwotICAg
ICAgICB9Ci0gICAgICAgIGF1dG8gbGluZUlzQ29uc2lkZXJlZEVtcHR5ID0gbGluZS5pc1Zpc3Vh
bGx5RW1wdHkoKSAmJiAhbGluZS5oYXNJbnRydXNpdmVGbG9hdCgpOwotICAgICAgICBpZiAoTGlu
ZUJyZWFrZXIoKS5zaG91bGRXcmFwRmxvYXRCb3goaXRlbUxvZ2ljYWxXaWR0aCwgbGluZS5hdmFp
bGFibGVXaWR0aCgpICsgbGluZS50cmFpbGluZ1RyaW1tYWJsZVdpZHRoKCksIGxpbmVJc0NvbnNp
ZGVyZWRFbXB0eSkpCi0gICAgICAgICAgICByZXR1cm4gSXNFbmRPZkxpbmU6OlllczsKLQotICAg
ICAgICAvLyBUaGlzIGZsb2F0IGNhbiBzaXQgb24gdGhlIGN1cnJlbnQgbGluZS4KLSAgICAgICAg
YXV0byYgZmxvYXRCb3ggPSBpbmxpbmVJdGVtLmxheW91dEJveCgpOwotICAgICAgICAvLyBTaHJp
bmsgYXZhaWxhYmxlIHNwYWNlIGZvciBjdXJyZW50IGxpbmUgYW5kIG1vdmUgZXhpc3RpbmcgaW5s
aW5lIHJ1bnMuCi0gICAgICAgIGZsb2F0Qm94LmlzTGVmdEZsb2F0aW5nUG9zaXRpb25lZCgpID8g
bGluZS5tb3ZlTG9naWNhbExlZnQoaXRlbUxvZ2ljYWxXaWR0aCkgOiBsaW5lLm1vdmVMb2dpY2Fs
UmlnaHQoaXRlbUxvZ2ljYWxXaWR0aCk7Ci0gICAgICAgIG1fZmxvYXRzLmFwcGVuZChtYWtlV2Vh
a1B0cihpbmxpbmVJdGVtKSk7Ci0gICAgICAgICsrbV9jb21taXR0ZWRJbmxpbmVJdGVtQ291bnQ7
Ci0gICAgICAgIGxpbmUuc2V0SGFzSW50cnVzaXZlRmxvYXQoKTsKLSAgICAgICAgcmV0dXJuIElz
RW5kT2ZMaW5lOjpObzsKLSAgICB9Ci0gICAgLy8gRm9yY2VkIGxpbmUgYnJlYWtzIGFyZSBhbHNv
IHNwZWNpYWwuCi0gICAgaWYgKGlubGluZUl0ZW0uaXNGb3JjZWRMaW5lQnJlYWsoKSkgewotICAg
ICAgICBhdXRvIGlzRW5kT2ZMaW5lID0gIW1fdW5jb21taXR0ZWRDb250ZW50LmlzRW1wdHkoKSA/
IHByb2Nlc3NVbmNvbW1pdHRlZENvbnRlbnQobGluZSkgOiBJc0VuZE9mTGluZTo6Tm87Ci0gICAg
ICAgIC8vIFdoZW4gdGhlIHVuY29tbWl0dGVkIGNvbnRlbnQgZml0cyhvciB0aGUgbGluZSBpcyBl
bXB0eSksIGFkZCB0aGUgbGluZSBicmVhayB0byB0aGlzIGxpbmUgYXMgd2VsbC4KLSAgICAgICAg
aWYgKGlzRW5kT2ZMaW5lID09IElzRW5kT2ZMaW5lOjpObykgewotICAgICAgICAgICAgbV91bmNv
bW1pdHRlZENvbnRlbnQuYWRkKGlubGluZUl0ZW0sIGl0ZW1Mb2dpY2FsV2lkdGgpOwotICAgICAg
ICAgICAgY29tbWl0UGVuZGluZ0NvbnRlbnQobGluZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIElzRW5kT2ZMaW5lOjpZZXM7Ci0gICAgfQotICAgIC8vCi0gICAgYXV0byBpc0VuZE9mTGlu
ZSA9IElzRW5kT2ZMaW5lOjpObzsKLSAgICBpZiAoIW1fdW5jb21taXR0ZWRDb250ZW50LmlzRW1w
dHkoKSAmJiBzaG91bGRQcm9jZXNzVW5jb21taXR0ZWRDb250ZW50KGlubGluZUl0ZW0pKQotICAg
ICAgICBpc0VuZE9mTGluZSA9IHByb2Nlc3NVbmNvbW1pdHRlZENvbnRlbnQobGluZSk7Ci0gICAg
Ly8gVGhlIGN1cnJlbnQgaXRlbSBtaWdodCBmaXQgYXMgd2VsbC4KLSAgICBpZiAoaXNFbmRPZkxp
bmUgPT0gSXNFbmRPZkxpbmU6Ok5vKQotICAgICAgICBtX3VuY29tbWl0dGVkQ29udGVudC5hZGQo
aW5saW5lSXRlbSwgaXRlbUxvZ2ljYWxXaWR0aCk7Ci0gICAgcmV0dXJuIGlzRW5kT2ZMaW5lOwot
fQotCi1MaW5lTGF5b3V0OjpJc0VuZE9mTGluZSBMaW5lTGF5b3V0Ojpwcm9jZXNzVW5jb21taXR0
ZWRDb250ZW50KExpbmUmIGxpbmUpCi17Ci0gICAgLy8gQ2hlY2sgaWYgdGhlIHBlbmRpbmcgY29u
dGVudCBmaXRzLgotICAgIGF1dG8gbGluZUlzQ29uc2lkZXJlZEVtcHR5ID0gbGluZS5pc1Zpc3Vh
bGx5RW1wdHkoKSAmJiAhbGluZS5oYXNJbnRydXNpdmVGbG9hdCgpOwotICAgIGF1dG8gYnJlYWtp
bmdDb250ZXh0ID0gTGluZUJyZWFrZXIoKS5icmVha2luZ0NvbnRleHRGb3JJbmxpbmVDb250ZW50
KG1fdW5jb21taXR0ZWRDb250ZW50LnJ1bnMoKSwgbV91bmNvbW1pdHRlZENvbnRlbnQud2lkdGgo
KSwgbGluZS5hdmFpbGFibGVXaWR0aCgpLCBsaW5lSXNDb25zaWRlcmVkRW1wdHkpOwotICAgIC8v
IFRoZSB1bmNvbW1pdHRlZCBjb250ZW50IGNhbiBmdWxseSwgcGFydGlhbGx5IGZpdCB0aGUgY3Vy
cmVudCBsaW5lIChjb21taXQvcGFydGlhbCBjb21taXQpIG9yIG5vdCBhdCBhbGwgKHJlc2V0KS4K
LSAgICBpZiAoYnJlYWtpbmdDb250ZXh0LmNvbnRlbnRCcmVhayA9PSBMaW5lQnJlYWtlcjo6QnJl
YWtpbmdDb250ZXh0OjpDb250ZW50QnJlYWs6OktlZXApCi0gICAgICAgIGNvbW1pdFBlbmRpbmdD
b250ZW50KGxpbmUpOwotICAgIGVsc2UgaWYgKGJyZWFraW5nQ29udGV4dC5jb250ZW50QnJlYWsg
PT0gTGluZUJyZWFrZXI6OkJyZWFraW5nQ29udGV4dDo6Q29udGVudEJyZWFrOjpTcGxpdCkgewot
ICAgICAgICBBU1NFUlQoYnJlYWtpbmdDb250ZXh0LnRyYWlsaW5nUGFydGlhbENvbnRlbnQpOwot
ICAgICAgICBBU1NFUlQobV91bmNvbW1pdHRlZENvbnRlbnQucnVucygpW2JyZWFraW5nQ29udGV4
dC50cmFpbGluZ1BhcnRpYWxDb250ZW50LT5ydW5JbmRleF0uaW5saW5lSXRlbS5pc1RleHQoKSk7
Ci0gICAgICAgIC8vIFR1cm4gdGhlIHVuY29tbWl0dGVkIHRyYWlsaW5nIHJ1biBpbnRvIGEgcGFy
dGlhbCB0cmFpbGluZyBydW4uCi0gICAgICAgIGF1dG8gb3ZlcmZsb3dJbmxpbmVUZXh0SXRlbUlu
ZGV4ID0gYnJlYWtpbmdDb250ZXh0LnRyYWlsaW5nUGFydGlhbENvbnRlbnQtPnJ1bkluZGV4Owot
ICAgICAgICBhdXRvJiBvdmVyZmxvd0lubGluZVRleHRJdGVtID0gZG93bmNhc3Q8SW5saW5lVGV4
dEl0ZW0+KG1fdW5jb21taXR0ZWRDb250ZW50LnJ1bnMoKVtvdmVyZmxvd0lubGluZVRleHRJdGVt
SW5kZXhdLmlubGluZUl0ZW0pOwotCi0gICAgICAgIC8vIENvbnN0cnVjdCBhIHBhcnRpYWwgdHJh
aWxpbmcgaW5saW5lIHJ1bi4KLSAgICAgICAgQVNTRVJUKCFtX3RyYWlsaW5nUGFydGlhbFRleHRJ
dGVtKTsKLSAgICAgICAgYXV0byB0cmFpbGluZ0NvbnRlbnRMZW5ndGggPSBicmVha2luZ0NvbnRl
eHQudHJhaWxpbmdQYXJ0aWFsQ29udGVudC0+bGVuZ3RoOwotICAgICAgICBtX3RyYWlsaW5nUGFy
dGlhbFRleHRJdGVtID0gb3ZlcmZsb3dJbmxpbmVUZXh0SXRlbS5sZWZ0KHRyYWlsaW5nQ29udGVu
dExlbmd0aCk7Ci0gICAgICAgIG1fb3ZlcmZsb3dUZXh0TGVuZ3RoID0gb3ZlcmZsb3dJbmxpbmVU
ZXh0SXRlbS5sZW5ndGgoKSAtIHRyYWlsaW5nQ29udGVudExlbmd0aDsKLSAgICAgICAgLy8gS2Vl
cCB0aGUgbm9uLW92ZXJmbG93IHBhcnQgb2YgdGhlIHVuY29tbWl0dGVkIHJ1bnMgYW5kIGFkZCB0
aGUgdHJhaWxpbmcgcGFydGlhbCBjb250ZW50LgotICAgICAgICBtX3VuY29tbWl0dGVkQ29udGVu
dC50cmltKG92ZXJmbG93SW5saW5lVGV4dEl0ZW1JbmRleCk7Ci0gICAgICAgIG1fdW5jb21taXR0
ZWRDb250ZW50LmFkZCgqbV90cmFpbGluZ1BhcnRpYWxUZXh0SXRlbSwgYnJlYWtpbmdDb250ZXh0
LnRyYWlsaW5nUGFydGlhbENvbnRlbnQtPmxvZ2ljYWxXaWR0aCk7Ci0gICAgICAgIGNvbW1pdFBl
bmRpbmdDb250ZW50KGxpbmUpOwotICAgIH0gZWxzZSBpZiAoYnJlYWtpbmdDb250ZXh0LmNvbnRl
bnRCcmVhayA9PSBMaW5lQnJlYWtlcjo6QnJlYWtpbmdDb250ZXh0OjpDb250ZW50QnJlYWs6Oldy
YXApCi0gICAgICAgIG1fdW5jb21taXR0ZWRDb250ZW50LnJlc2V0KCk7Ci0gICAgZWxzZQotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gYnJlYWtpbmdDb250ZXh0LmNv
bnRlbnRCcmVhayA9PSBMaW5lQnJlYWtlcjo6QnJlYWtpbmdDb250ZXh0OjpDb250ZW50QnJlYWs6
OktlZXAgPyBJc0VuZE9mTGluZTo6Tm8gOklzRW5kT2ZMaW5lOjpZZXM7Ci19Ci0KLWJvb2wgTGlu
ZUxheW91dDo6c2hvdWxkUHJvY2Vzc1VuY29tbWl0dGVkQ29udGVudChjb25zdCBJbmxpbmVJdGVt
JiBpbmxpbmVJdGVtKSBjb25zdAotewotICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9j
c3MtdGV4dC0zLyNsaW5lLWJyZWFrLWRldGFpbHMKLSAgICAvLyBGaWd1cmUgb3V0IGlmIHRoZSBu
ZXcgaW5jb21pbmcgY29udGVudCBwdXRzIHRoZSB1bmNvbW1pdHRlZCBjb250ZW50IG9uIGNvbW1p
dCBib3VuZGFyeS4KLSAgICAvLyBlLmcuIDxzcGFuPmNvbnRpbnVvdXM8L3NwYW4+IDwtIHVuY29t
aXR0ZWQgY29udGVudCAtPgotICAgIC8vIFtpbmxpbmUgY29udGFpbmVyIHN0YXJ0XVt0ZXh0IGNv
bnRlbnRdW2lubGluZSBjb250YWluZXIgZW5kXQotICAgIC8vIEFuIGluY29taW5nIDxpbWc+IGJv
eCB3b3VsZCBlbmFibGUgdXMgdG8gY29tbWl0IHRoZSAiPHNwYW4+Y29udGludW91czwvc3Bhbj4i
IGNvbnRlbnQKLSAgICAvLyB3aGlsZSBhZGRpdGlvbmFsIHRleHQgY29udGVudCB3b3VsZCBub3Qu
Ci0gICAgQVNTRVJUKCFpbmxpbmVJdGVtLmlzRmxvYXQoKSAmJiAhaW5saW5lSXRlbS5pc0ZvcmNl
ZExpbmVCcmVhaygpKTsKLSAgICBBU1NFUlQoIW1fdW5jb21taXR0ZWRDb250ZW50LmlzRW1wdHko
KSk7Ci0KLSAgICBhdXRvKiBsYXN0VW5jb21pdHRlZENvbnRlbnQgPSAmbV91bmNvbW1pdHRlZENv
bnRlbnQucnVucygpLmxhc3QoKS5pbmxpbmVJdGVtOwotICAgIGlmIChpbmxpbmVJdGVtLmlzVGV4
dCgpKSB7Ci0gICAgICAgIC8vIGFueSBjb250ZW50JyAnIC0+IHdoaXRlc3BhY2UgaXMgYWx3YXlz
IGEgY29tbWl0IGJvdW5kYXJ5LgotICAgICAgICBpZiAoZG93bmNhc3Q8SW5saW5lVGV4dEl0ZW0+
KGlubGluZUl0ZW0pLmlzV2hpdGVzcGFjZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIC8vIHRleHR0ZXh0IC0+IGNvbnRpbnVvdXMgY29udGVudC4KLSAgICAgICAgLy8gJyAn
dGV4dCAtPiBjb21taXQgYm91bmRhcnkuCi0gICAgICAgIGlmIChsYXN0VW5jb21pdHRlZENvbnRl
bnQtPmlzVGV4dCgpKQotICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PElubGluZVRleHRJdGVt
PigqbGFzdFVuY29taXR0ZWRDb250ZW50KS5pc1doaXRlc3BhY2UoKTsKLSAgICAgICAgLy8gPHNw
YW4+dGV4dCAtPiB0aGUgaW5saW5lIGNvbnRhaW5lciBzdGFydCBhbmQgdGhlIHRleHQgY29udGVu
dCBmb3JtIGFuIHVuYnJlYWthYmxlIGNvbnRpbnVvdXMgY29udGVudC4KLSAgICAgICAgaWYgKGxh
c3RVbmNvbWl0dGVkQ29udGVudC0+aXNDb250YWluZXJTdGFydCgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAvLyA8L3NwYW4+dGV4dCAtPiBuZWVkIHRvIGNoZWNrIHdoYXQn
cyBiZWZvcmUgdGhlIDwvc3Bhbj4uCi0gICAgICAgIC8vIHRleHQ8L3NwYW4+dGV4dCAtPiBjb250
aW51b3VzIGNvbnRlbnQKLSAgICAgICAgLy8gPGltZz48L3NwYW4+dGV4dCAtPiBjb21taXQgYm91
bmRheQotICAgICAgICBpZiAobGFzdFVuY29taXR0ZWRDb250ZW50LT5pc0NvbnRhaW5lckVuZCgp
KSB7Ci0gICAgICAgICAgICBhdXRvJiBydW5zID0gbV91bmNvbW1pdHRlZENvbnRlbnQucnVucygp
OwotICAgICAgICAgICAgLy8gdGV4dDwvc3Bhbj48c3Bhbj48L3NwYW4+PC9zcGFuPnRleHQgLT4g
Y2hlY2sgYWxsIHRoZSB3YXkgYmFjayB1bnRpbCB3ZSBoaXQgZWl0aGVyIGEgYm94IG9yIHNvbWUg
dGV4dAotICAgICAgICAgICAgZm9yIChhdXRvIGkgPSBtX3VuY29tbWl0dGVkQ29udGVudC5zaXpl
KCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBwcmV2aW91c0lubGluZUl0ZW0gPSBy
dW5zW2ldLmlubGluZUl0ZW07Ci0gICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzSW5saW5lSXRl
bS5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcHJldmlvdXNJbmxpbmVJdGVtLmlzQ29udGFpbmVyRW5k
KCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIEFTU0VS
VChwcmV2aW91c0lubGluZUl0ZW0uaXNUZXh0KCkgfHwgcHJldmlvdXNJbmxpbmVJdGVtLmlzQm94
KCkpOwotICAgICAgICAgICAgICAgIGxhc3RVbmNvbWl0dGVkQ29udGVudCA9ICZwcmV2aW91c0lu
bGluZUl0ZW07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAvLyBEaWQgbm90IGZpbmQgYW55IGNvbnRlbnQgKGUuZy4gPHNwYW4+PC9zcGFuPnRleHQp
Ci0gICAgICAgICAgICBpZiAobGFzdFVuY29taXR0ZWRDb250ZW50LT5pc0NvbnRhaW5lckVuZCgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAvLyA8
aW1nPnRleHQgLT4gdGhlIGlubGluZSBib3ggaXMgb24gYSBjb21taXQgYm91bmRhcnkuCi0gICAg
ICAgIGlmIChsYXN0VW5jb21pdHRlZENvbnRlbnQtPmlzQm94KCkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgaWYg
KGlubGluZUl0ZW0uaXNCb3goKSkgewotICAgICAgICAvLyA8c3Bhbj48aW1nPiAtPiB0aGUgaW5s
aW5lIGNvbnRhaW5lciBzdGFydCBhbmQgdGhlIGNvbnRlbnQgZm9ybSBhbiB1bmJyZWFrYWJsZSBj
b250aW51b3VzIGNvbnRlbnQuCi0gICAgICAgIGlmIChsYXN0VW5jb21pdHRlZENvbnRlbnQtPmlz
Q29udGFpbmVyU3RhcnQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8g
PC9zcGFuPjxpbWc+IC0+IG9rIHRvIGNvbW1pdCB0aGUgPC9zcGFuPi4KLSAgICAgICAgaWYgKGxh
c3RVbmNvbWl0dGVkQ29udGVudC0+aXNDb250YWluZXJFbmQoKSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAvLyA8aW1nPnRleHQgYW5kIDxpbWc+PGltZz4gLT4gdGhlc2UgY29t
YmluYXRpb25zIGFyZSBvayB0byBjb21taXQuCi0gICAgICAgIGlmIChsYXN0VW5jb21pdHRlZENv
bnRlbnQtPmlzVGV4dCgpIHx8IGxhc3RVbmNvbWl0dGVkQ29udGVudC0+aXNCb3goKSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9
Ci0KLSAgICBpZiAoaW5saW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgaW5saW5lSXRlbS5p
c0NvbnRhaW5lckVuZCgpKSB7Ci0gICAgICAgIC8vIDxzcGFuPjxzcGFuPiBvciA8L3NwYW4+PHNw
YW4+IC0+IGNhbid0IGNvbW1pdCB0aGUgcHJldmlvdXMgY29udGVudCB5ZXQuCi0gICAgICAgIGlm
IChsYXN0VW5jb21pdHRlZENvbnRlbnQtPmlzQ29udGFpbmVyU3RhcnQoKSB8fCBsYXN0VW5jb21p
dHRlZENvbnRlbnQtPmlzQ29udGFpbmVyRW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIC8vICcgJzxzcGFuPiAtPiBsZXQncyBjb21taXQgdGhlIHdoaXRlc3BhY2UKLSAg
ICAgICAgLy8gdGV4dDxzcGFuPiAtPiBidXQgbm90IHlldCB0aGUgbm9uLXdoaXRlc3BhY2U7IHdl
IG5lZWQgdG8ga25vdyB3aGF0IGNvbWVzIG5leHQgKGUuZy4gdGV4dDxzcGFuPnRleHQgb3IgdGV4
dDxzcGFuPjxpbWc+KS4KLSAgICAgICAgaWYgKGxhc3RVbmNvbWl0dGVkQ29udGVudC0+aXNUZXh0
KCkpCi0gICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8SW5saW5lVGV4dEl0ZW0+KCpsYXN0VW5j
b21pdHRlZENvbnRlbnQpLmlzV2hpdGVzcGFjZSgpOwotICAgICAgICAvLyA8aW1nPjxzcGFuPiAt
PiBpdCdzIG9rIHRvIGNvbW1pdCB0aGUgaW5saW5lIGJveCBjb250ZW50LgotICAgICAgICAvLyA8
aW1nPjwvc3Bhbj4gLT4gdGhlIGlubGluZSBib3ggYW5kIHRoZSBjbG9zaW5nIGlubGluZSBjb250
YWluZXIgZm9ybSBhbiB1bmJyZWFrYWJsZSBjb250aW51b3VzIGNvbnRlbnQuCi0gICAgICAgIGlm
IChsYXN0VW5jb21pdHRlZENvbnRlbnQtPmlzQm94KCkpCi0gICAgICAgICAgICByZXR1cm4gaW5s
aW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0KCk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIExpbmVMYXlvdXQ6OlVuY29tbWl0dGVkQ29udGVudDo6dHJpbSh1bnNpZ25lZCBu
ZXdTaXplKQotewotICAgIGZvciAoYXV0byBpID0gbV91bmNvbW1pdHRlZFJ1bnMuc2l6ZSgpOyBp
LS07KQotICAgICAgICBtX3dpZHRoIC09IG1fdW5jb21taXR0ZWRSdW5zW2ldLmxvZ2ljYWxXaWR0
aDsKLSAgICBtX3VuY29tbWl0dGVkUnVucy5zaHJpbmsobmV3U2l6ZSk7Ci19Ci0KLQotfQotfQot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUxpbmVMYXlvdXQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUxpbmVMYXlvdXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZDcxYjI5Zjg3NjM2ZWMzMzg1ZGY1NzE1NTAwMTI4NTZjOTYzZWYxNy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lTGF5b3V0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZP
Uk1BVFRJTkdfQ09OVEVYVCkKLQotI2luY2x1ZGUgIklubGluZUxpbmUuaCIKLSNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBMYXlvdXQg
ewotCi1jbGFzcyBMaW5lTGF5b3V0IHsKLXB1YmxpYzoKLSAgICBMaW5lTGF5b3V0KGNvbnN0IElu
bGluZUZvcm1hdHRpbmdDb250ZXh0JiwgY29uc3QgSW5saW5lSXRlbXMmKTsKLQotICAgIHN0cnVj
dCBQYXJ0aWFsQ29udGVudCB7Ci0gICAgICAgIC8vIFRoaXMgd2lsbCBwb3RlbnRpYWxseSBnYWlu
IHNvbWUgbW9yZSBtZW1iZXJzLiAKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoOwotICAgIH07Ci0g
ICAgc3RydWN0IExpbmVDb250ZW50IHsKLSAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IHRyYWls
aW5nSW5saW5lSXRlbUluZGV4OwotICAgICAgICBPcHRpb25hbDxQYXJ0aWFsQ29udGVudD4gdHJh
aWxpbmdQYXJ0aWFsQ29udGVudDsKLSAgICAgICAgVmVjdG9yPFdlYWtQdHI8SW5saW5lSXRlbT4+
IGZsb2F0czsKLSAgICAgICAgY29uc3QgTGluZTo6UnVuTGlzdCBydW5MaXN0OwotICAgICAgICBj
b25zdCBMaW5lQm94IGxpbmVCb3g7Ci0gICAgfTsKLSAgICBMaW5lQ29udGVudCBsYXlvdXQoTGlu
ZSYsIHVuc2lnbmVkIGxlYWRpbmdJbmxpbmVJdGVtSW5kZXgsIE9wdGlvbmFsPFBhcnRpYWxDb250
ZW50PiBsZWFkaW5nUGFydGlhbENvbnRlbnQpOwotCi0gICAgc3RydWN0IFJ1biB7Ci0gICAgICAg
IGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW07Ci0gICAgICAgIExheW91dFVuaXQgbG9naWNh
bFdpZHRoOwotICAgIH07Ci0KLSAgICB1c2luZyBSdW5MaXN0ID0gVmVjdG9yPFJ1biwgMzA+Owot
Ci1wcml2YXRlOgotICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5n
Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KLSAg
ICBlbnVtIGNsYXNzIElzRW5kT2ZMaW5lIHsgTm8sIFllcyB9OwotICAgIElzRW5kT2ZMaW5lIHBs
YWNlSW5saW5lSXRlbShMaW5lJiwgY29uc3QgSW5saW5lSXRlbSYpOwotICAgIHZvaWQgY29tbWl0
UGVuZGluZ0NvbnRlbnQoTGluZSYpOwotICAgIExpbmVDb250ZW50IGNsb3NlKExpbmUmLCB1bnNp
Z25lZCBsZWFkaW5nSW5saW5lSXRlbUluZGV4KTsKLSAgICBib29sIHNob3VsZFByb2Nlc3NVbmNv
bW1pdHRlZENvbnRlbnQoY29uc3QgSW5saW5lSXRlbSYpIGNvbnN0OwotICAgIElzRW5kT2ZMaW5l
IHByb2Nlc3NVbmNvbW1pdHRlZENvbnRlbnQoTGluZSYpOwotICAgIAotICAgIHN0cnVjdCBVbmNv
bW1pdHRlZENvbnRlbnQgewotICAgICAgICB2b2lkIGFkZChjb25zdCBJbmxpbmVJdGVtJiwgTGF5
b3V0VW5pdCBsb2dpY2FsV2lkdGgpOwotICAgICAgICB2b2lkIHJlc2V0KCk7Ci0gICAgICAgIHZv
aWQgdHJpbSh1bnNpZ25lZCBuZXdTaXplKTsKLQotICAgICAgICBSdW5MaXN0JiBydW5zKCkgeyBy
ZXR1cm4gbV91bmNvbW1pdHRlZFJ1bnM7IH0KLSAgICAgICAgY29uc3QgUnVuTGlzdCYgcnVucygp
IGNvbnN0IHsgcmV0dXJuIG1fdW5jb21taXR0ZWRSdW5zOyB9Ci0gICAgICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5jb21taXR0ZWRSdW5zLmlzRW1wdHkoKTsgfQotICAgICAg
ICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV91bmNvbW1pdHRlZFJ1bnMuc2l6ZSgp
OyB9Ci0gICAgICAgIExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9
Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBSdW5MaXN0IG1fdW5jb21taXR0ZWRSdW5zOwotICAg
ICAgICBMYXlvdXRVbml0IG1fd2lkdGg7Ci0gICAgfTsKLQotICAgIGNvbnN0IElubGluZUZvcm1h
dHRpbmdDb250ZXh0JiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OwotICAgIGNvbnN0IElubGlu
ZUl0ZW1zJiBtX2lubGluZUl0ZW1zOwotICAgIFVuY29tbWl0dGVkQ29udGVudCBtX3VuY29tbWl0
dGVkQ29udGVudDsKLSAgICB1bnNpZ25lZCBtX2NvbW1pdHRlZElubGluZUl0ZW1Db3VudCB7IDAg
fTsKLSAgICBWZWN0b3I8V2Vha1B0cjxJbmxpbmVJdGVtPj4gbV9mbG9hdHM7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPElubGluZVRleHRJdGVtPiBtX2xlYWRpbmdQYXJ0aWFsVGV4dEl0ZW07Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPElubGluZVRleHRJdGVtPiBtX3RyYWlsaW5nUGFydGlhbFRleHRJdGVt
OwotICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtX292ZXJmbG93VGV4dExlbmd0aDsKLX07Ci0KLX0K
LX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhNTM1ZmI5NjMy
NzMxNmY3MTgzM2Q1MzlmNzFlNTRjYTk1Njk0NTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5jcHAKQEAg
LTAsMCArMSwzMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiTGluZUxheW91dENvbnRleHQuaCIKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19D
T05URVhUKQorCisjaW5jbHVkZSAiSW5saW5lTGluZUJyZWFrZXIuaCIKKyNpbmNsdWRlICJMYXlv
dXRCb3guaCIKKyNpbmNsdWRlICJUZXh0VXRpbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citu
YW1lc3BhY2UgTGF5b3V0IHsKKworc3RhdGljIExheW91dFVuaXQgaW5saW5lSXRlbVdpZHRoKGNv
bnN0IEZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCwgY29uc3QgSW5saW5lSXRl
bSYgaW5saW5lSXRlbSwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpCit7CisgICAgaWYg
KGlubGluZUl0ZW0uaXNGb3JjZWRMaW5lQnJlYWsoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBpZiAoaXM8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pKSB7CisgICAgICAgIGF1dG8mIGlu
bGluZVRleHRJdGVtID0gZG93bmNhc3Q8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pOworICAg
ICAgICBpZiAoYXV0byBjb250ZW50V2lkdGggPSBpbmxpbmVUZXh0SXRlbS53aWR0aCgpKQorICAg
ICAgICAgICAgcmV0dXJuICpjb250ZW50V2lkdGg7CisgICAgICAgIGF1dG8gZW5kID0gaW5saW5l
VGV4dEl0ZW0uaXNDb2xsYXBzaWJsZSgpID8gaW5saW5lVGV4dEl0ZW0uc3RhcnQoKSArIDEgOiBp
bmxpbmVUZXh0SXRlbS5lbmQoKTsKKyAgICAgICAgcmV0dXJuIFRleHRVdGlsOjp3aWR0aChpbmxp
bmVUZXh0SXRlbS5sYXlvdXRCb3goKSwgaW5saW5lVGV4dEl0ZW0uc3RhcnQoKSwgZW5kLCBjb250
ZW50TG9naWNhbExlZnQpOworICAgIH0KKworICAgIGF1dG8mIGxheW91dEJveCA9IGlubGluZUl0
ZW0ubGF5b3V0Qm94KCk7CisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4
dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworCisgICAgaWYgKGxheW91dEJveC5pc0Zsb2F0
aW5nUG9zaXRpb25lZCgpKQorICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkubWFyZ2luQm94V2lk
dGgoKTsKKworICAgIGlmIChsYXlvdXRCb3gucmVwbGFjZWQoKSkKKyAgICAgICAgcmV0dXJuIGJv
eEdlb21ldHJ5LndpZHRoKCk7CisKKyAgICBpZiAoaW5saW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0
KCkpCisgICAgICAgIHJldHVybiBib3hHZW9tZXRyeS5tYXJnaW5TdGFydCgpICsgYm94R2VvbWV0
cnkuYm9yZGVyTGVmdCgpICsgYm94R2VvbWV0cnkucGFkZGluZ0xlZnQoKS52YWx1ZU9yKDApOwor
CisgICAgaWYgKGlubGluZUl0ZW0uaXNDb250YWluZXJFbmQoKSkKKyAgICAgICAgcmV0dXJuIGJv
eEdlb21ldHJ5Lm1hcmdpbkVuZCgpICsgYm94R2VvbWV0cnkuYm9yZGVyUmlnaHQoKSArIGJveEdl
b21ldHJ5LnBhZGRpbmdSaWdodCgpLnZhbHVlT3IoMCk7CisKKyAgICAvLyBOb24tcmVwbGFjZWQg
aW5saW5lIGJveCAoZS5nLiBpbmxpbmUtYmxvY2spCisgICAgcmV0dXJuIGJveEdlb21ldHJ5Lndp
ZHRoKCk7Cit9CisKK3ZvaWQgTGluZUxheW91dENvbnRleHQ6OlVuY29tbWl0dGVkQ29udGVudDo6
YWRkKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIExheW91dFVuaXQgbG9naWNhbFdpZHRo
KQoreworICAgIG1fdW5jb21taXR0ZWRSdW5zLmFwcGVuZCh7IGlubGluZUl0ZW0sIGxvZ2ljYWxX
aWR0aCB9KTsKKyAgICBtX3dpZHRoICs9IGxvZ2ljYWxXaWR0aDsKK30KKwordm9pZCBMaW5lTGF5
b3V0Q29udGV4dDo6VW5jb21taXR0ZWRDb250ZW50OjpyZXNldCgpCit7CisgICAgbV91bmNvbW1p
dHRlZFJ1bnMuY2xlYXIoKTsKKyAgICBtX3dpZHRoID0gMDsKK30KKworTGluZUxheW91dENvbnRl
eHQ6OkxpbmVMYXlvdXRDb250ZXh0KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxp
bmVGb3JtYXR0aW5nQ29udGV4dCwgY29uc3QgSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zKQorICAg
IDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKKyAg
ICAsIG1faW5saW5lSXRlbXMoaW5saW5lSXRlbXMpCit7Cit9CisKK0xpbmVMYXlvdXRDb250ZXh0
OjpMaW5lQ29udGVudCBMaW5lTGF5b3V0Q29udGV4dDo6bGF5b3V0TGluZShMaW5lJiBsaW5lLCB1
bnNpZ25lZCBsZWFkaW5nSW5saW5lSXRlbUluZGV4LCBPcHRpb25hbDxQYXJ0aWFsQ29udGVudD4g
bGVhZGluZ1BhcnRpYWxDb250ZW50KQoreworICAgIGF1dG8gaW5pdGlhbGl6ZSA9IFsmXSB7Cisg
ICAgICAgIG1fY29tbWl0dGVkSW5saW5lSXRlbUNvdW50ID0gMDsKKyAgICAgICAgbV91bmNvbW1p
dHRlZENvbnRlbnQucmVzZXQoKTsKKyAgICAgICAgbV9sZWFkaW5nUGFydGlhbFRleHRJdGVtID0g
eyB9OworICAgICAgICBtX3RyYWlsaW5nUGFydGlhbFRleHRJdGVtID0geyB9OworICAgICAgICBt
X292ZXJmbG93VGV4dExlbmd0aCA9IHsgfTsKKyAgICB9OworICAgIGluaXRpYWxpemUoKTsKKyAg
ICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGlubGluZSBjb250ZW50IGFuZCBwbGFjZSB0aGUgaW5s
aW5lIGJveGVzIG9uIHRoZSBjdXJyZW50IGxpbmUuCisgICAgLy8gU3RhcnQgd2l0aCB0aGUgcGFy
dGlhbCBsZWFkaW5nIHRleHQgZnJvbSB0aGUgcHJldmlvdXMgbGluZS4KKyAgICBhdXRvIGZpcnN0
Tm9uUGFydGlhbElubGluZUl0ZW1JbmRleCA9IGxlYWRpbmdJbmxpbmVJdGVtSW5kZXg7CisgICAg
aWYgKGxlYWRpbmdQYXJ0aWFsQ29udGVudCkgeworICAgICAgICAvLyBIYW5kbGUgcGFydGlhbCBp
bmxpbmUgaXRlbSAoc3BsaXQgdGV4dCBmcm9tIHRoZSBwcmV2aW91cyBsaW5lKS4KKyAgICAgICAg
YXV0byYgbGVhZGluZ1RleHRJdGVtID0gbV9pbmxpbmVJdGVtc1tsZWFkaW5nSW5saW5lSXRlbUlu
ZGV4XTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobGVhZGluZ1RleHRJdGVtLT5pc1RleHQoKSk7
CisgICAgICAgIC8vIENvbnN0cnVjdCBhIHBhcnRpYWwgbGVhZGluZyBpbmxpbmUgaXRlbS4KKyAg
ICAgICAgQVNTRVJUKCFtX2xlYWRpbmdQYXJ0aWFsVGV4dEl0ZW0pOworICAgICAgICBtX2xlYWRp
bmdQYXJ0aWFsVGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oKmxlYWRpbmdUZXh0
SXRlbSkucmlnaHQobGVhZGluZ1BhcnRpYWxDb250ZW50LT5sZW5ndGgpOworICAgICAgICBpZiAo
cGxhY2VJbmxpbmVJdGVtKGxpbmUsICptX2xlYWRpbmdQYXJ0aWFsVGV4dEl0ZW0pID09IElzRW5k
T2ZMaW5lOjpZZXMpCisgICAgICAgICAgICByZXR1cm4gY2xvc2UobGluZSwgbGVhZGluZ0lubGlu
ZUl0ZW1JbmRleCk7CisgICAgICAgICsrZmlyc3ROb25QYXJ0aWFsSW5saW5lSXRlbUluZGV4Owor
ICAgIH0KKworICAgIGZvciAoYXV0byBpbmxpbmVJdGVtSW5kZXggPSBmaXJzdE5vblBhcnRpYWxJ
bmxpbmVJdGVtSW5kZXg7IGlubGluZUl0ZW1JbmRleCA8IG1faW5saW5lSXRlbXMuc2l6ZSgpOyAr
K2lubGluZUl0ZW1JbmRleCkgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBuZWVk
IHRvIHJlLW1lYXN1cmUgdGhlIGRyb3BwZWQsIHVuY29tbWl0dGVkIGNvbnRlbnQgd2hlbiByZS11
c2luZyB0aGVtIG9uIHRoZSBuZXh0IGxpbmUuCisgICAgICAgIGlmIChwbGFjZUlubGluZUl0ZW0o
bGluZSwgKm1faW5saW5lSXRlbXNbaW5saW5lSXRlbUluZGV4XSkgPT0gSXNFbmRPZkxpbmU6Olll
cykKKyAgICAgICAgICAgIHJldHVybiBjbG9zZShsaW5lLCBsZWFkaW5nSW5saW5lSXRlbUluZGV4
KTsKKyAgICB9CisgICAgLy8gQ2hlY2sgdGhlIHVuY29tbWl0dGVkIGNvbnRlbnQgd2hldGhlciB0
aGV5IGZpdCBub3cgdGhhdCB3ZSBrbm93IHdlIGFyZSBhdCBhIGNvbW1pdCBib3VuZGFyeS4KKyAg
ICBpZiAoIW1fdW5jb21taXR0ZWRDb250ZW50LmlzRW1wdHkoKSkKKyAgICAgICAgcHJvY2Vzc1Vu
Y29tbWl0dGVkQ29udGVudChsaW5lKTsKKyAgICByZXR1cm4gY2xvc2UobGluZSwgbGVhZGluZ0lu
bGluZUl0ZW1JbmRleCk7Cit9CisKK3ZvaWQgTGluZUxheW91dENvbnRleHQ6OmNvbW1pdFBlbmRp
bmdDb250ZW50KExpbmUmIGxpbmUpCit7CisgICAgaWYgKG1fdW5jb21taXR0ZWRDb250ZW50Lmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29tbWl0dGVkSW5saW5lSXRlbUNvdW50
ICs9IG1fdW5jb21taXR0ZWRDb250ZW50LnNpemUoKTsKKyAgICBmb3IgKGF1dG8mIHVuY29tbWl0
dGVkUnVuIDogbV91bmNvbW1pdHRlZENvbnRlbnQucnVucygpKQorICAgICAgICBsaW5lLmFwcGVu
ZCh1bmNvbW1pdHRlZFJ1bi5pbmxpbmVJdGVtLCB1bmNvbW1pdHRlZFJ1bi5sb2dpY2FsV2lkdGgp
OworICAgIG1fdW5jb21taXR0ZWRDb250ZW50LnJlc2V0KCk7Cit9CisKK0xpbmVMYXlvdXRDb250
ZXh0OjpMaW5lQ29udGVudCBMaW5lTGF5b3V0Q29udGV4dDo6Y2xvc2UoTGluZSYgbGluZSwgdW5z
aWduZWQgbGVhZGluZ0lubGluZUl0ZW1JbmRleCkKK3sKKyAgICBBU1NFUlQobV9jb21taXR0ZWRJ
bmxpbmVJdGVtQ291bnQgfHwgbGluZS5oYXNJbnRydXNpdmVGbG9hdCgpKTsKKyAgICBtX3VuY29t
bWl0dGVkQ29udGVudC5yZXNldCgpOworICAgIGlmICghbV9jb21taXR0ZWRJbmxpbmVJdGVtQ291
bnQpCisgICAgICAgIHJldHVybiBMaW5lQ29udGVudCB7IHsgfSwgeyB9LCBXVEZNb3ZlKG1fZmxv
YXRzKSwgbGluZS5jbG9zZSgpLCBsaW5lLmxpbmVCb3goKSB9OworCisgICAgT3B0aW9uYWw8UGFy
dGlhbENvbnRlbnQ+IG92ZXJmbG93Q29udGVudDsKKyAgICBpZiAobV9vdmVyZmxvd1RleHRMZW5n
dGgpCisgICAgICAgIG92ZXJmbG93Q29udGVudCA9IFBhcnRpYWxDb250ZW50IHsgKm1fb3ZlcmZs
b3dUZXh0TGVuZ3RoIH07CisgICAgYXV0byB0cmFpbGluZ0lubGluZUl0ZW1JbmRleCA9IGxlYWRp
bmdJbmxpbmVJdGVtSW5kZXggKyBtX2NvbW1pdHRlZElubGluZUl0ZW1Db3VudCAtIDE7CisKKyAg
ICBhdXRvIGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCA9IFsmXSB7CisgICAgICAgIGlmIChv
dmVyZmxvd0NvbnRlbnQpCisgICAgICAgICAgICByZXR1cm4gTGluZTo6SXNMYXN0TGluZVdpdGhJ
bmxpbmVDb250ZW50OjpObzsKKyAgICAgICAgLy8gU2tpcCBmbG9hdHMgYmFja3dhcmRzIHRvIHNl
ZSBpZiB0aGlzIGlzIGdvaW5nIHRvIGJlIHRoZSBsYXN0IGxpbmUgd2l0aCBpbmxpbmUgY29udGVu
dC4KKyAgICAgICAgZm9yIChhdXRvIGkgPSBtX2lubGluZUl0ZW1zLnNpemUoKTsgaS0tOykgewor
ICAgICAgICAgICAgaWYgKCFtX2lubGluZUl0ZW1zW2ldLT5pc0Zsb2F0KCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGkgPT0gdHJhaWxpbmdJbmxpbmVJdGVtSW5kZXggPyBMaW5lOjpJc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQ6OlllcyA6IExpbmU6OklzTGFzdExpbmVXaXRoSW5saW5lQ29u
dGVudDo6Tm87CisgICAgICAgIH0KKyAgICAgICAgLy8gVGhlcmUgaGFzIHRvIGJlIGF0IGxlYXN0
IG9uZSBub24tZmxvYXQgaXRlbS4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBMaW5lOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Ok5vOworICAgIH07
CisKKyAgICByZXR1cm4gTGluZUNvbnRlbnQgeyB0cmFpbGluZ0lubGluZUl0ZW1JbmRleCwgb3Zl
cmZsb3dDb250ZW50LCBXVEZNb3ZlKG1fZmxvYXRzKSwgbGluZS5jbG9zZShpc0xhc3RMaW5lV2l0
aElubGluZUNvbnRlbnQoKSksIGxpbmUubGluZUJveCgpIH07Cit9CisKK0xpbmVMYXlvdXRDb250
ZXh0OjpJc0VuZE9mTGluZSBMaW5lTGF5b3V0Q29udGV4dDo6cGxhY2VJbmxpbmVJdGVtKExpbmUm
IGxpbmUsIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0pCit7CisgICAgYXV0byBjdXJyZW50
TG9naWNhbFJpZ2h0ID0gbGluZS5saW5lQm94KCkubG9naWNhbFJpZ2h0KCk7CisgICAgYXV0byBp
dGVtTG9naWNhbFdpZHRoID0gaW5saW5lSXRlbVdpZHRoKGZvcm1hdHRpbmdDb250ZXh0KCksIGlu
bGluZUl0ZW0sIGN1cnJlbnRMb2dpY2FsUmlnaHQpOworCisgICAgLy8gRmxvYXRzIGFyZSBzcGVj
aWFsLCB0aGV5IGFyZSBpbnRydXNpdmUgYnV0IHRoZXkgZG9uJ3QgcmVhbGx5IHBhcnRpY2lwYXRl
IGluIHRoZSBsaW5lIGxheW91dCBjb250ZXh0LgorICAgIGlmIChpbmxpbmVJdGVtLmlzRmxvYXQo
KSkgeworICAgICAgICAvLyBGSVhNRTogSXQgZ2V0cyBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkIHdo
ZW4gdGhlcmUncyBzb21lIHVuY29tbWl0dGVkIGNvbnRlbnQgd2hldGhlciB0aGV5IHNob3VsZCBi
ZSBhZGRlZCB0byB0aGUgY3VycmVudCBsaW5lCisgICAgICAgIC8vIGUuZy4gdGV4dF9jb250ZW50
PGRpdiBzdHlsZT0iZmxvYXQ6IGxlZnQiPjwvZGl2PmNvbnRpbnVvdXNfdGV4dF9jb250ZW50Cisg
ICAgICAgIC8vIE5vdCBzdXJlIHdoYXQgdG8gZG8gd2hlbiB0aGUgZmxvYXQgdGFrZXMgdXAgdGhl
IGF2YWlsYWJsZSBzcGFjZSBhbmQgd2UndmUgZ290IGNvbnRpbnVvdXMgY29udGVudC4gQnJvd3Nl
ciBlbmdpbmVzIGRvbid0IGFncmVlLgorICAgICAgICAvLyBMZXQncyBqdXN0IGNvbW1pdCB0aGUg
cGVuZGluZyBjb250ZW50IGFuZCB0cnkgcGxhY2luZyB0aGUgZmxvYXQgZm9yIG5vdy4KKyAgICAg
ICAgaWYgKCFtX3VuY29tbWl0dGVkQ29udGVudC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlm
IChwcm9jZXNzVW5jb21taXR0ZWRDb250ZW50KGxpbmUpID09IElzRW5kT2ZMaW5lOjpZZXMpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIElzRW5kT2ZMaW5lOjpZZXM7CisgICAgICAgIH0KKyAgICAg
ICAgYXV0byBsaW5lSXNDb25zaWRlcmVkRW1wdHkgPSBsaW5lLmlzVmlzdWFsbHlFbXB0eSgpICYm
ICFsaW5lLmhhc0ludHJ1c2l2ZUZsb2F0KCk7CisgICAgICAgIGlmIChMaW5lQnJlYWtlcigpLnNo
b3VsZFdyYXBGbG9hdEJveChpdGVtTG9naWNhbFdpZHRoLCBsaW5lLmF2YWlsYWJsZVdpZHRoKCkg
KyBsaW5lLnRyYWlsaW5nVHJpbW1hYmxlV2lkdGgoKSwgbGluZUlzQ29uc2lkZXJlZEVtcHR5KSkK
KyAgICAgICAgICAgIHJldHVybiBJc0VuZE9mTGluZTo6WWVzOworCisgICAgICAgIC8vIFRoaXMg
ZmxvYXQgY2FuIHNpdCBvbiB0aGUgY3VycmVudCBsaW5lLgorICAgICAgICBhdXRvJiBmbG9hdEJv
eCA9IGlubGluZUl0ZW0ubGF5b3V0Qm94KCk7CisgICAgICAgIC8vIFNocmluayBhdmFpbGFibGUg
c3BhY2UgZm9yIGN1cnJlbnQgbGluZSBhbmQgbW92ZSBleGlzdGluZyBpbmxpbmUgcnVucy4KKyAg
ICAgICAgZmxvYXRCb3guaXNMZWZ0RmxvYXRpbmdQb3NpdGlvbmVkKCkgPyBsaW5lLm1vdmVMb2dp
Y2FsTGVmdChpdGVtTG9naWNhbFdpZHRoKSA6IGxpbmUubW92ZUxvZ2ljYWxSaWdodChpdGVtTG9n
aWNhbFdpZHRoKTsKKyAgICAgICAgbV9mbG9hdHMuYXBwZW5kKG1ha2VXZWFrUHRyKGlubGluZUl0
ZW0pKTsKKyAgICAgICAgKyttX2NvbW1pdHRlZElubGluZUl0ZW1Db3VudDsKKyAgICAgICAgbGlu
ZS5zZXRIYXNJbnRydXNpdmVGbG9hdCgpOworICAgICAgICByZXR1cm4gSXNFbmRPZkxpbmU6Ok5v
OworICAgIH0KKyAgICAvLyBGb3JjZWQgbGluZSBicmVha3MgYXJlIGFsc28gc3BlY2lhbC4KKyAg
ICBpZiAoaW5saW5lSXRlbS5pc0ZvcmNlZExpbmVCcmVhaygpKSB7CisgICAgICAgIGF1dG8gaXNF
bmRPZkxpbmUgPSAhbV91bmNvbW1pdHRlZENvbnRlbnQuaXNFbXB0eSgpID8gcHJvY2Vzc1VuY29t
bWl0dGVkQ29udGVudChsaW5lKSA6IElzRW5kT2ZMaW5lOjpObzsKKyAgICAgICAgLy8gV2hlbiB0
aGUgdW5jb21taXR0ZWQgY29udGVudCBmaXRzKG9yIHRoZSBsaW5lIGlzIGVtcHR5KSwgYWRkIHRo
ZSBsaW5lIGJyZWFrIHRvIHRoaXMgbGluZSBhcyB3ZWxsLgorICAgICAgICBpZiAoaXNFbmRPZkxp
bmUgPT0gSXNFbmRPZkxpbmU6Ok5vKSB7CisgICAgICAgICAgICBtX3VuY29tbWl0dGVkQ29udGVu
dC5hZGQoaW5saW5lSXRlbSwgaXRlbUxvZ2ljYWxXaWR0aCk7CisgICAgICAgICAgICBjb21taXRQ
ZW5kaW5nQ29udGVudChsaW5lKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSXNFbmRPZkxp
bmU6OlllczsKKyAgICB9CisgICAgLy8KKyAgICBhdXRvIGlzRW5kT2ZMaW5lID0gSXNFbmRPZkxp
bmU6Ok5vOworICAgIGlmICghbV91bmNvbW1pdHRlZENvbnRlbnQuaXNFbXB0eSgpICYmIHNob3Vs
ZFByb2Nlc3NVbmNvbW1pdHRlZENvbnRlbnQoaW5saW5lSXRlbSkpCisgICAgICAgIGlzRW5kT2ZM
aW5lID0gcHJvY2Vzc1VuY29tbWl0dGVkQ29udGVudChsaW5lKTsKKyAgICAvLyBUaGUgY3VycmVu
dCBpdGVtIG1pZ2h0IGZpdCBhcyB3ZWxsLgorICAgIGlmIChpc0VuZE9mTGluZSA9PSBJc0VuZE9m
TGluZTo6Tm8pCisgICAgICAgIG1fdW5jb21taXR0ZWRDb250ZW50LmFkZChpbmxpbmVJdGVtLCBp
dGVtTG9naWNhbFdpZHRoKTsKKyAgICByZXR1cm4gaXNFbmRPZkxpbmU7Cit9CisKK0xpbmVMYXlv
dXRDb250ZXh0OjpJc0VuZE9mTGluZSBMaW5lTGF5b3V0Q29udGV4dDo6cHJvY2Vzc1VuY29tbWl0
dGVkQ29udGVudChMaW5lJiBsaW5lKQoreworICAgIC8vIENoZWNrIGlmIHRoZSBwZW5kaW5nIGNv
bnRlbnQgZml0cy4KKyAgICBhdXRvIGxpbmVJc0NvbnNpZGVyZWRFbXB0eSA9IGxpbmUuaXNWaXN1
YWxseUVtcHR5KCkgJiYgIWxpbmUuaGFzSW50cnVzaXZlRmxvYXQoKTsKKyAgICBhdXRvIGJyZWFr
aW5nQ29udGV4dCA9IExpbmVCcmVha2VyKCkuYnJlYWtpbmdDb250ZXh0Rm9ySW5saW5lQ29udGVu
dChtX3VuY29tbWl0dGVkQ29udGVudC5ydW5zKCksIG1fdW5jb21taXR0ZWRDb250ZW50LndpZHRo
KCksIGxpbmUuYXZhaWxhYmxlV2lkdGgoKSwgbGluZUlzQ29uc2lkZXJlZEVtcHR5KTsKKyAgICAv
LyBUaGUgdW5jb21taXR0ZWQgY29udGVudCBjYW4gZnVsbHksIHBhcnRpYWxseSBmaXQgdGhlIGN1
cnJlbnQgbGluZSAoY29tbWl0L3BhcnRpYWwgY29tbWl0KSBvciBub3QgYXQgYWxsIChyZXNldCku
CisgICAgaWYgKGJyZWFraW5nQ29udGV4dC5jb250ZW50QnJlYWsgPT0gTGluZUJyZWFrZXI6OkJy
ZWFraW5nQ29udGV4dDo6Q29udGVudEJyZWFrOjpLZWVwKQorICAgICAgICBjb21taXRQZW5kaW5n
Q29udGVudChsaW5lKTsKKyAgICBlbHNlIGlmIChicmVha2luZ0NvbnRleHQuY29udGVudEJyZWFr
ID09IExpbmVCcmVha2VyOjpCcmVha2luZ0NvbnRleHQ6OkNvbnRlbnRCcmVhazo6U3BsaXQpIHsK
KyAgICAgICAgQVNTRVJUKGJyZWFraW5nQ29udGV4dC50cmFpbGluZ1BhcnRpYWxDb250ZW50KTsK
KyAgICAgICAgQVNTRVJUKG1fdW5jb21taXR0ZWRDb250ZW50LnJ1bnMoKVticmVha2luZ0NvbnRl
eHQudHJhaWxpbmdQYXJ0aWFsQ29udGVudC0+cnVuSW5kZXhdLmlubGluZUl0ZW0uaXNUZXh0KCkp
OworICAgICAgICAvLyBUdXJuIHRoZSB1bmNvbW1pdHRlZCB0cmFpbGluZyBydW4gaW50byBhIHBh
cnRpYWwgdHJhaWxpbmcgcnVuLgorICAgICAgICBhdXRvIG92ZXJmbG93SW5saW5lVGV4dEl0ZW1J
bmRleCA9IGJyZWFraW5nQ29udGV4dC50cmFpbGluZ1BhcnRpYWxDb250ZW50LT5ydW5JbmRleDsK
KyAgICAgICAgYXV0byYgb3ZlcmZsb3dJbmxpbmVUZXh0SXRlbSA9IGRvd25jYXN0PElubGluZVRl
eHRJdGVtPihtX3VuY29tbWl0dGVkQ29udGVudC5ydW5zKClbb3ZlcmZsb3dJbmxpbmVUZXh0SXRl
bUluZGV4XS5pbmxpbmVJdGVtKTsKKworICAgICAgICAvLyBDb25zdHJ1Y3QgYSBwYXJ0aWFsIHRy
YWlsaW5nIGlubGluZSBydW4uCisgICAgICAgIEFTU0VSVCghbV90cmFpbGluZ1BhcnRpYWxUZXh0
SXRlbSk7CisgICAgICAgIGF1dG8gdHJhaWxpbmdDb250ZW50TGVuZ3RoID0gYnJlYWtpbmdDb250
ZXh0LnRyYWlsaW5nUGFydGlhbENvbnRlbnQtPmxlbmd0aDsKKyAgICAgICAgbV90cmFpbGluZ1Bh
cnRpYWxUZXh0SXRlbSA9IG92ZXJmbG93SW5saW5lVGV4dEl0ZW0ubGVmdCh0cmFpbGluZ0NvbnRl
bnRMZW5ndGgpOworICAgICAgICBtX292ZXJmbG93VGV4dExlbmd0aCA9IG92ZXJmbG93SW5saW5l
VGV4dEl0ZW0ubGVuZ3RoKCkgLSB0cmFpbGluZ0NvbnRlbnRMZW5ndGg7CisgICAgICAgIC8vIEtl
ZXAgdGhlIG5vbi1vdmVyZmxvdyBwYXJ0IG9mIHRoZSB1bmNvbW1pdHRlZCBydW5zIGFuZCBhZGQg
dGhlIHRyYWlsaW5nIHBhcnRpYWwgY29udGVudC4KKyAgICAgICAgbV91bmNvbW1pdHRlZENvbnRl
bnQudHJpbShvdmVyZmxvd0lubGluZVRleHRJdGVtSW5kZXgpOworICAgICAgICBtX3VuY29tbWl0
dGVkQ29udGVudC5hZGQoKm1fdHJhaWxpbmdQYXJ0aWFsVGV4dEl0ZW0sIGJyZWFraW5nQ29udGV4
dC50cmFpbGluZ1BhcnRpYWxDb250ZW50LT5sb2dpY2FsV2lkdGgpOworICAgICAgICBjb21taXRQ
ZW5kaW5nQ29udGVudChsaW5lKTsKKyAgICB9IGVsc2UgaWYgKGJyZWFraW5nQ29udGV4dC5jb250
ZW50QnJlYWsgPT0gTGluZUJyZWFrZXI6OkJyZWFraW5nQ29udGV4dDo6Q29udGVudEJyZWFrOjpX
cmFwKQorICAgICAgICBtX3VuY29tbWl0dGVkQ29udGVudC5yZXNldCgpOworICAgIGVsc2UKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGJyZWFraW5nQ29udGV4dC5j
b250ZW50QnJlYWsgPT0gTGluZUJyZWFrZXI6OkJyZWFraW5nQ29udGV4dDo6Q29udGVudEJyZWFr
OjpLZWVwID8gSXNFbmRPZkxpbmU6Ok5vIDpJc0VuZE9mTGluZTo6WWVzOworfQorCitib29sIExp
bmVMYXlvdXRDb250ZXh0OjpzaG91bGRQcm9jZXNzVW5jb21taXR0ZWRDb250ZW50KGNvbnN0IElu
bGluZUl0ZW0mIGlubGluZUl0ZW0pIGNvbnN0Cit7CisgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nz
d2cub3JnL2Nzcy10ZXh0LTMvI2xpbmUtYnJlYWstZGV0YWlscworICAgIC8vIEZpZ3VyZSBvdXQg
aWYgdGhlIG5ldyBpbmNvbWluZyBjb250ZW50IHB1dHMgdGhlIHVuY29tbWl0dGVkIGNvbnRlbnQg
b24gY29tbWl0IGJvdW5kYXJ5LgorICAgIC8vIGUuZy4gPHNwYW4+Y29udGludW91czwvc3Bhbj4g
PC0gdW5jb21pdHRlZCBjb250ZW50IC0+CisgICAgLy8gW2lubGluZSBjb250YWluZXIgc3RhcnRd
W3RleHQgY29udGVudF1baW5saW5lIGNvbnRhaW5lciBlbmRdCisgICAgLy8gQW4gaW5jb21pbmcg
PGltZz4gYm94IHdvdWxkIGVuYWJsZSB1cyB0byBjb21taXQgdGhlICI8c3Bhbj5jb250aW51b3Vz
PC9zcGFuPiIgY29udGVudAorICAgIC8vIHdoaWxlIGFkZGl0aW9uYWwgdGV4dCBjb250ZW50IHdv
dWxkIG5vdC4KKyAgICBBU1NFUlQoIWlubGluZUl0ZW0uaXNGbG9hdCgpICYmICFpbmxpbmVJdGVt
LmlzRm9yY2VkTGluZUJyZWFrKCkpOworICAgIEFTU0VSVCghbV91bmNvbW1pdHRlZENvbnRlbnQu
aXNFbXB0eSgpKTsKKworICAgIGF1dG8qIGxhc3RVbmNvbWl0dGVkQ29udGVudCA9ICZtX3VuY29t
bWl0dGVkQ29udGVudC5ydW5zKCkubGFzdCgpLmlubGluZUl0ZW07CisgICAgaWYgKGlubGluZUl0
ZW0uaXNUZXh0KCkpIHsKKyAgICAgICAgLy8gYW55IGNvbnRlbnQnICcgLT4gd2hpdGVzcGFjZSBp
cyBhbHdheXMgYSBjb21taXQgYm91bmRhcnkuCisgICAgICAgIGlmIChkb3duY2FzdDxJbmxpbmVU
ZXh0SXRlbT4oaW5saW5lSXRlbSkuaXNXaGl0ZXNwYWNlKCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgLy8gdGV4dHRleHQgLT4gY29udGludW91cyBjb250ZW50LgorICAgICAg
ICAvLyAnICd0ZXh0IC0+IGNvbW1pdCBib3VuZGFyeS4KKyAgICAgICAgaWYgKGxhc3RVbmNvbWl0
dGVkQ29udGVudC0+aXNUZXh0KCkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8SW5saW5l
VGV4dEl0ZW0+KCpsYXN0VW5jb21pdHRlZENvbnRlbnQpLmlzV2hpdGVzcGFjZSgpOworICAgICAg
ICAvLyA8c3Bhbj50ZXh0IC0+IHRoZSBpbmxpbmUgY29udGFpbmVyIHN0YXJ0IGFuZCB0aGUgdGV4
dCBjb250ZW50IGZvcm0gYW4gdW5icmVha2FibGUgY29udGludW91cyBjb250ZW50LgorICAgICAg
ICBpZiAobGFzdFVuY29taXR0ZWRDb250ZW50LT5pc0NvbnRhaW5lclN0YXJ0KCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIDwvc3Bhbj50ZXh0IC0+IG5lZWQgdG8gY2hl
Y2sgd2hhdCdzIGJlZm9yZSB0aGUgPC9zcGFuPi4KKyAgICAgICAgLy8gdGV4dDwvc3Bhbj50ZXh0
IC0+IGNvbnRpbnVvdXMgY29udGVudAorICAgICAgICAvLyA8aW1nPjwvc3Bhbj50ZXh0IC0+IGNv
bW1pdCBib3VuZGF5CisgICAgICAgIGlmIChsYXN0VW5jb21pdHRlZENvbnRlbnQtPmlzQ29udGFp
bmVyRW5kKCkpIHsKKyAgICAgICAgICAgIGF1dG8mIHJ1bnMgPSBtX3VuY29tbWl0dGVkQ29udGVu
dC5ydW5zKCk7CisgICAgICAgICAgICAvLyB0ZXh0PC9zcGFuPjxzcGFuPjwvc3Bhbj48L3NwYW4+
dGV4dCAtPiBjaGVjayBhbGwgdGhlIHdheSBiYWNrIHVudGlsIHdlIGhpdCBlaXRoZXIgYSBib3gg
b3Igc29tZSB0ZXh0CisgICAgICAgICAgICBmb3IgKGF1dG8gaSA9IG1fdW5jb21taXR0ZWRDb250
ZW50LnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIGF1dG8mIHByZXZpb3VzSW5saW5l
SXRlbSA9IHJ1bnNbaV0uaW5saW5lSXRlbTsKKyAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNJ
bmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBwcmV2aW91c0lubGluZUl0ZW0uaXNDb250
YWluZXJFbmQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKHByZXZpb3VzSW5saW5lSXRlbS5pc1RleHQoKSB8fCBwcmV2aW91c0lubGluZUl0
ZW0uaXNCb3goKSk7CisgICAgICAgICAgICAgICAgbGFzdFVuY29taXR0ZWRDb250ZW50ID0gJnBy
ZXZpb3VzSW5saW5lSXRlbTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIC8vIERpZCBub3QgZmluZCBhbnkgY29udGVudCAoZS5nLiA8c3Bhbj48L3Nw
YW4+dGV4dCkKKyAgICAgICAgICAgIGlmIChsYXN0VW5jb21pdHRlZENvbnRlbnQtPmlzQ29udGFp
bmVyRW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIC8vIDxpbWc+dGV4dCAtPiB0aGUgaW5saW5lIGJveCBpcyBvbiBhIGNvbW1pdCBib3VuZGFy
eS4KKyAgICAgICAgaWYgKGxhc3RVbmNvbWl0dGVkQ29udGVudC0+aXNCb3goKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisK
KyAgICBpZiAoaW5saW5lSXRlbS5pc0JveCgpKSB7CisgICAgICAgIC8vIDxzcGFuPjxpbWc+IC0+
IHRoZSBpbmxpbmUgY29udGFpbmVyIHN0YXJ0IGFuZCB0aGUgY29udGVudCBmb3JtIGFuIHVuYnJl
YWthYmxlIGNvbnRpbnVvdXMgY29udGVudC4KKyAgICAgICAgaWYgKGxhc3RVbmNvbWl0dGVkQ29u
dGVudC0+aXNDb250YWluZXJTdGFydCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAvLyA8L3NwYW4+PGltZz4gLT4gb2sgdG8gY29tbWl0IHRoZSA8L3NwYW4+LgorICAgICAg
ICBpZiAobGFzdFVuY29taXR0ZWRDb250ZW50LT5pc0NvbnRhaW5lckVuZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8vIDxpbWc+dGV4dCBhbmQgPGltZz48aW1nPiAtPiB0
aGVzZSBjb21iaW5hdGlvbnMgYXJlIG9rIHRvIGNvbW1pdC4KKyAgICAgICAgaWYgKGxhc3RVbmNv
bWl0dGVkQ29udGVudC0+aXNUZXh0KCkgfHwgbGFzdFVuY29taXR0ZWRDb250ZW50LT5pc0JveCgp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKworICAgIGlmIChpbmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBpbmxp
bmVJdGVtLmlzQ29udGFpbmVyRW5kKCkpIHsKKyAgICAgICAgLy8gPHNwYW4+PHNwYW4+IG9yIDwv
c3Bhbj48c3Bhbj4gLT4gY2FuJ3QgY29tbWl0IHRoZSBwcmV2aW91cyBjb250ZW50IHlldC4KKyAg
ICAgICAgaWYgKGxhc3RVbmNvbWl0dGVkQ29udGVudC0+aXNDb250YWluZXJTdGFydCgpIHx8IGxh
c3RVbmNvbWl0dGVkQ29udGVudC0+aXNDb250YWluZXJFbmQoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgLy8gJyAnPHNwYW4+IC0+IGxldCdzIGNvbW1pdCB0aGUgd2hpdGVz
cGFjZQorICAgICAgICAvLyB0ZXh0PHNwYW4+IC0+IGJ1dCBub3QgeWV0IHRoZSBub24td2hpdGVz
cGFjZTsgd2UgbmVlZCB0byBrbm93IHdoYXQgY29tZXMgbmV4dCAoZS5nLiB0ZXh0PHNwYW4+dGV4
dCBvciB0ZXh0PHNwYW4+PGltZz4pLgorICAgICAgICBpZiAobGFzdFVuY29taXR0ZWRDb250ZW50
LT5pc1RleHQoKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4o
Kmxhc3RVbmNvbWl0dGVkQ29udGVudCkuaXNXaGl0ZXNwYWNlKCk7CisgICAgICAgIC8vIDxpbWc+
PHNwYW4+IC0+IGl0J3Mgb2sgdG8gY29tbWl0IHRoZSBpbmxpbmUgYm94IGNvbnRlbnQuCisgICAg
ICAgIC8vIDxpbWc+PC9zcGFuPiAtPiB0aGUgaW5saW5lIGJveCBhbmQgdGhlIGNsb3NpbmcgaW5s
aW5lIGNvbnRhaW5lciBmb3JtIGFuIHVuYnJlYWthYmxlIGNvbnRpbnVvdXMgY29udGVudC4KKyAg
ICAgICAgaWYgKGxhc3RVbmNvbWl0dGVkQ29udGVudC0+aXNCb3goKSkKKyAgICAgICAgICAgIHJl
dHVybiBpbmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKTsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgTGluZUxheW91dENvbnRleHQ6OlVuY29tbWl0dGVkQ29udGVudDo6
dHJpbSh1bnNpZ25lZCBuZXdTaXplKQoreworICAgIGZvciAoYXV0byBpID0gbV91bmNvbW1pdHRl
ZFJ1bnMuc2l6ZSgpOyBpLS07KQorICAgICAgICBtX3dpZHRoIC09IG1fdW5jb21taXR0ZWRSdW5z
W2ldLmxvZ2ljYWxXaWR0aDsKKyAgICBtX3VuY29tbWl0dGVkUnVucy5zaHJpbmsobmV3U2l6ZSk7
Cit9CisKKworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkx
YzAzZDAxMzIyYTdjMDMzOTFhODczNGQ2NzY5OGM0ODg5MWU3YmIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4
dC5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiSW5saW5lTGluZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworY2xhc3MgTGlu
ZUxheW91dENvbnRleHQgeworcHVibGljOgorICAgIExpbmVMYXlvdXRDb250ZXh0KGNvbnN0IElu
bGluZUZvcm1hdHRpbmdDb250ZXh0JiwgY29uc3QgSW5saW5lSXRlbXMmKTsKKworICAgIHN0cnVj
dCBQYXJ0aWFsQ29udGVudCB7CisgICAgICAgIC8vIFRoaXMgd2lsbCBwb3RlbnRpYWxseSBnYWlu
IHNvbWUgbW9yZSBtZW1iZXJzLiAKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoOworICAgIH07Cisg
ICAgc3RydWN0IExpbmVDb250ZW50IHsKKyAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IHRyYWls
aW5nSW5saW5lSXRlbUluZGV4OworICAgICAgICBPcHRpb25hbDxQYXJ0aWFsQ29udGVudD4gdHJh
aWxpbmdQYXJ0aWFsQ29udGVudDsKKyAgICAgICAgVmVjdG9yPFdlYWtQdHI8SW5saW5lSXRlbT4+
IGZsb2F0czsKKyAgICAgICAgY29uc3QgTGluZTo6UnVuTGlzdCBydW5MaXN0OworICAgICAgICBj
b25zdCBMaW5lQm94IGxpbmVCb3g7CisgICAgfTsKKyAgICBMaW5lQ29udGVudCBsYXlvdXRMaW5l
KExpbmUmLCB1bnNpZ25lZCBsZWFkaW5nSW5saW5lSXRlbUluZGV4LCBPcHRpb25hbDxQYXJ0aWFs
Q29udGVudD4gbGVhZGluZ1BhcnRpYWxDb250ZW50KTsKKworICAgIHN0cnVjdCBSdW4geworICAg
ICAgICBjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtOworICAgICAgICBMYXlvdXRVbml0IGxv
Z2ljYWxXaWR0aDsKKyAgICB9OworCisgICAgdXNpbmcgUnVuTGlzdCA9IFZlY3RvcjxSdW4sIDMw
PjsKKworcHJpdmF0ZToKKyAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0
dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OyB9
CisgICAgZW51bSBjbGFzcyBJc0VuZE9mTGluZSB7IE5vLCBZZXMgfTsKKyAgICBJc0VuZE9mTGlu
ZSBwbGFjZUlubGluZUl0ZW0oTGluZSYsIGNvbnN0IElubGluZUl0ZW0mKTsKKyAgICB2b2lkIGNv
bW1pdFBlbmRpbmdDb250ZW50KExpbmUmKTsKKyAgICBMaW5lQ29udGVudCBjbG9zZShMaW5lJiwg
dW5zaWduZWQgbGVhZGluZ0lubGluZUl0ZW1JbmRleCk7CisgICAgYm9vbCBzaG91bGRQcm9jZXNz
VW5jb21taXR0ZWRDb250ZW50KGNvbnN0IElubGluZUl0ZW0mKSBjb25zdDsKKyAgICBJc0VuZE9m
TGluZSBwcm9jZXNzVW5jb21taXR0ZWRDb250ZW50KExpbmUmKTsKKyAgICAKKyAgICBzdHJ1Y3Qg
VW5jb21taXR0ZWRDb250ZW50IHsKKyAgICAgICAgdm9pZCBhZGQoY29uc3QgSW5saW5lSXRlbSYs
IExheW91dFVuaXQgbG9naWNhbFdpZHRoKTsKKyAgICAgICAgdm9pZCByZXNldCgpOworICAgICAg
ICB2b2lkIHRyaW0odW5zaWduZWQgbmV3U2l6ZSk7CisKKyAgICAgICAgUnVuTGlzdCYgcnVucygp
IHsgcmV0dXJuIG1fdW5jb21taXR0ZWRSdW5zOyB9CisgICAgICAgIGNvbnN0IFJ1bkxpc3QmIHJ1
bnMoKSBjb25zdCB7IHJldHVybiBtX3VuY29tbWl0dGVkUnVuczsgfQorICAgICAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3VuY29tbWl0dGVkUnVucy5pc0VtcHR5KCk7IH0KKyAg
ICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5jb21taXR0ZWRSdW5zLnNp
emUoKTsgfQorICAgICAgICBMYXlvdXRVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0
aDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgUnVuTGlzdCBtX3VuY29tbWl0dGVkUnVuczsK
KyAgICAgICAgTGF5b3V0VW5pdCBtX3dpZHRoOworICAgIH07CisKKyAgICBjb25zdCBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dCYgbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKKyAgICBjb25zdCBJ
bmxpbmVJdGVtcyYgbV9pbmxpbmVJdGVtczsKKyAgICBVbmNvbW1pdHRlZENvbnRlbnQgbV91bmNv
bW1pdHRlZENvbnRlbnQ7CisgICAgdW5zaWduZWQgbV9jb21taXR0ZWRJbmxpbmVJdGVtQ291bnQg
eyAwIH07CisgICAgVmVjdG9yPFdlYWtQdHI8SW5saW5lSXRlbT4+IG1fZmxvYXRzOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbmxpbmVUZXh0SXRlbT4gbV9sZWFkaW5nUGFydGlhbFRleHRJdGVtOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVUZXh0SXRlbT4gbV90cmFpbGluZ1BhcnRpYWxUZXh0
SXRlbTsKKyAgICBPcHRpb25hbDx1bnNpZ25lZD4gbV9vdmVyZmxvd1RleHRMZW5ndGg7Cit9Owor
Cit9Cit9CisjZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>