<?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>219304</bug_id>
          
          <creation_ts>2020-11-27 05:20:14 -0800</creation_ts>
          <short_desc>Move caret rect computation out of render tree</short_desc>
          <delta_ts>2020-11-28 11:38:17 -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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mifenton</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>samuel_white</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</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>1710283</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-11-27 05:20:14 -0800</bug_when>
    <thetext>Reduce code randomly sprinkled on renderers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710284</commentid>
    <comment_count>1</comment_count>
      <attachid>414938</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-11-27 05:24:53 -0800</bug_when>
    <thetext>Created attachment 414938
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710291</commentid>
    <comment_count>2</comment_count>
      <attachid>414941</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-11-27 06:46:36 -0800</bug_when>
    <thetext>Created attachment 414941
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710303</commentid>
    <comment_count>3</comment_count>
      <attachid>414941</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-11-27 08:35:14 -0800</bug_when>
    <thetext>Comment on attachment 414941
patch

v.nice</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710313</commentid>
    <comment_count>4</comment_count>
      <attachid>414948</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-11-27 09:01:59 -0800</bug_when>
    <thetext>Created attachment 414948
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710410</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-11-27 23:22:31 -0800</bug_when>
    <thetext>Tools/Scripts/svn-apply failed to apply attachment 414948 to trunk.
Please resolve the conflicts and upload a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710428</commentid>
    <comment_count>6</comment_count>
      <attachid>414978</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-11-28 10:23:13 -0800</bug_when>
    <thetext>Created attachment 414978
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710434</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-11-28 11:37:56 -0800</bug_when>
    <thetext>Committed r270220: &lt;https://trac.webkit.org/changeset/270220&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 414978.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710435</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-11-28 11:38:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/71775891&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414938</attachid>
            <date>2020-11-27 05:24:53 -0800</date>
            <delta_ts>2020-11-27 06:46:36 -0800</delta_ts>
            <desc>patch</desc>
            <filename>caret-rect-out-from-renderobject.patch</filename>
            <type>text/plain</type>
            <size>47733</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzMjNhYjZiNGU2YzQuLmU1MWExMmIwMDhmMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDYxIEBACisyMDIwLTExLTI3ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBNb3ZlIGNhcmV0IHJlY3QgY29tcHV0YXRpb24gb3V0IG9mIHJlbmRlciB0
cmVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTkz
MDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWR1
Y2UgY29kZSByYW5kb21seSBzcHJpbmtsZWQgb24gcmVuZGVyZXJzIGJ5IG1vdmluZyBpdCBpbnRv
IHN0YW5kYWxvbmUgZnVuY3Rpb25zLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hl
Ojpsb2NhbENhcmV0UmVjdEZvckNoYXJhY3Rlck9mZnNldCk6CisgICAgICAgICogZWRpdGluZy9S
ZW5kZXJlZFBvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmVkUG9zaXRpb246
OmFic29sdXRlUmVjdCBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9u
Lmg6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VmlzaWJsZVBvc2l0aW9uOjpsb2NhbENhcmV0UmVjdCBjb25zdCk6CisgICAgICAgICog
cmVuZGVyaW5nL0NhcmV0UmVjdENvbXB1dGF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpjb21wdXRlQ2FyZXRSZWN0Rm9yRW1wdHlFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbXB1dGVDYXJldFJlY3RGb3JMaW5lUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29t
cHV0ZUNhcmV0UmVjdEZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUNhcmV0UmVj
dEZvckxpbmVCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQ2FyZXRSZWN0Rm9yU1ZH
SW5saW5lVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQ2FyZXRSZWN0Rm9yQm94KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVDYXJldFJlY3RGb3JCbG9jayk6CisgICAgICAgIChX
ZWJDb3JlOjpjb21wdXRlQ2FyZXRSZWN0Rm9ySW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmNv
bXB1dGVMb2NhbENhcmV0UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL0NhcmV0UmVjdENvbXB1
dGF0aW9uLmg6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9jYWxDYXJldFJlY3QgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tG
bG93Ojpjb21wdXRlQ2FyZXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQmxvY2tGbG93Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eE1vZGVsT2JqZWN0Ojpsb2NhbENhcmV0UmVjdEZvckVtcHR5RWxlbWVudCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJ
bmxpbmU6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVySW5saW5lLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaW5lQnJlYWs6OmxvY2FsQ2FyZXRSZWN0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVj
dEVudW1zLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dDo6bG9jYWxDYXJldFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0lubGlu
ZVRleHQ6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaDoKKwogMjAyMC0xMS0yMiAgQW50dGkgS29pdmlz
dG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSW50ZWdyYXRpb25dIENvbnZl
cnQgc29tZSByZW1haW5pbmcgSW5saW5lQm94IGFjY2VzcyB0byB1c2UgaW5saW5lIGl0ZXJhdG9y
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CmluZGV4IDcyNjI4OTFlY2M2My4uNTEwM2YzYzM1ODJiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dApAQCAtMjE1Myw2ICsyMTUzLDcgQEAgcmVuZGVyaW5nL0JpZGlSdW4uY3BwCiByZW5kZXJp
bmcvQm9yZGVyRWRnZS5jcHAKIHJlbmRlcmluZy9CcmVha0xpbmVzLmNwcAogcmVuZGVyaW5nL0NT
U0ZpbHRlci5jcHAKK3JlbmRlcmluZy9DYXJldFJlY3RDb21wdXRhdGlvbi5jcHAKIHJlbmRlcmlu
Zy9DbGlwUmVjdC5jcHAKIHJlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5jcHAKIHJlbmRlcmlu
Zy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDkxZDc0Yzc0NTIyNS4uMjJiNWFkYjA2
MDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC01MTYwLDYgKzUxNjAsNyBAQAogCQlFNEU4QjRFQzIxNkI3OUU1MDBCODgzNEQg
LyogU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RThCNEVBMjE2Qjc5RTUwMEI4ODM0RCAvKiBTeXN0ZW1G
b250RGF0YWJhc2VDb3JlVGV4dC5oICovOyB9OwogCQlFNEU4QjRGNTIxNkI5NTY1MDBCODgzNEQg
LyogRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTRFOEI0RjIyMTZCOEI2MDAwQjg4MzREIC8qIEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlFNEU5NEQ2MTIyRkYxNThBMDBERDE5MUYgLyogQ29tcGxleExpbmVMYXlvdXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QTFBQzc4MjJG
QUZENTAwMDE3Qjc1QiAvKiBDb21wbGV4TGluZUxheW91dC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUU0RjBCRTMxMjU3MTJGNkUwMDlFNzQzMSAv
KiBDYXJldFJlY3RDb21wdXRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTRGMEJFMkUyNTcxMEE3NTAwOUU3NDMxIC8qIENhcmV0UmVjdENvbXB1
dGF0aW9uLmggKi87IH07CiAJCUU0RjlFRUYzMTU2REEwMDcwMEQyM0U3RSAvKiBTdHlsZVNoZWV0
Q29udGVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0RjlFRUYxMTU2RDg0QzQwMEQyM0U3RSAvKiBTdHlsZVNoZWV0Q29udGVudHMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNTA2MjA4NDI1NDA5
MTlDMDBDNDMwOTEgLyogQ29udGFjdHNSZXF1ZXN0RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTUwNjIwODMyNTQwOTE5QjAwQzQzMDkxIC8qIENv
bnRhY3RzUmVxdWVzdERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlFNTE2Njk5MTIwRkY5OTE4MDA5RDJDMjcgLyogTGlzdEJ1dHRvbkFycm93
QDJ4LnBuZyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTUxNjY5OEYyMEZGOTkxNjAwOUQyQzI3IC8qIExpc3RCdXR0b25BcnJvd0AyeC5wbmcgKi87IH07
CkBAIC0xNjMzNSw2ICsxNjMzNiw4IEBACiAJCUU0RThCNEVEMjE2Qjc5RjQwMEI4ODM0RCAvKiBT
eXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUU0RThCNEYwMjE2QjhCNUYwMEI4ODM0RCAvKiBGb250Q2FzY2FkZURl
c2NyaXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEU4
QjRGMjIxNkI4QjYwMDBCODgzNEQgLyogRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250Q2FzY2FkZURlc2NyaXB0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0RjBCRTJFMjU3MTBBNzUwMDlFNzQzMSAvKiBDYXJl
dFJlY3RDb21wdXRhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYXJl
dFJlY3RDb21wdXRhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEYwQkUz
MDI1NzEwQTc2MDA5RTc0MzEgLyogQ2FyZXRSZWN0Q29tcHV0YXRpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FyZXRSZWN0Q29tcHV0YXRpb24uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEY5RUVGMDE1NkQ4NEM0MDBEMjNFN0UgLyogU3R5
bGVTaGVldENvbnRlbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFN0eWxlU2hlZXRDb250ZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
RjlFRUYxMTU2RDg0QzQwMEQyM0U3RSAvKiBTdHlsZVNoZWV0Q29udGVudHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVTaGVldENvbnRlbnRzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUU0RkI0QjM1MjM5QkVCMTAwMDNDMzM2QSAvKiBMYXlvdXRJbnRl
Z3JhdGlvbklubGluZUNvbnRlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0SW50ZWdy
YXRpb25JbmxpbmVDb250ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4
MDIyLDcgKzE4MDI1LDYgQEAKIAkJCQlBMUNDNTY0QTFGNDYxM0JCMDBBNDU1NUIgLyogUGF5bWVu
dFJlcXVlc3QgKi8sCiAJCQkJMUQwMDI2OUEyMzc0QjlGODAwQ0E2Q0RGIC8qIFBpY3R1cmVJblBp
Y3R1cmUgKi8sCiAJCQkJQTlEMjQ3RjkwRDc1N0U0MTAwRkRGOTU5IC8qIFBsdWdpbnMgKi8sCi0J
CQkJODlGNjBCMTcxNTdGNkEwMjAwNzVFMTU3IC8qIFF1b3RhICovLAogCQkJCUJDOTg1NDQ2MENE
M0RBNUYwMDA2OUJDMSAvKiBSYW5nZXMgKi8sCiAJCQkJQ0Q4QzZDMjQyMkZEREE2NDAwQTcyMEFC
IC8qIFJlbW90ZVBsYXliYWNrICovLAogCQkJCTUxODJDMjRDMUYzMTQyMDkwMDU5QkE3QyAvKiBT
ZXJ2aWNlV29ya2VycyAqLywKQEAgLTI5NDQyLDYgKzI5NDQ0LDggQEAKIAkJCQk1ODk1NTZFQzE4
RDRBNDQwMDA3NjRCMDMgLyogQm9yZGVyRWRnZS5oICovLAogCQkJCUJDRUE0ODE1MDk3RDkzMDIw
MDk0QzlFNCAvKiBCcmVha0xpbmVzLmNwcCAqLywKIAkJCQlCQ0VBNDgxNjA5N0Q5MzAyMDA5NEM5
RTQgLyogQnJlYWtMaW5lcy5oICovLAorCQkJCUU0RjBCRTMwMjU3MTBBNzYwMDlFNzQzMSAvKiBD
YXJldFJlY3RDb21wdXRhdGlvbi5jcHAgKi8sCisJCQkJRTRGMEJFMkUyNTcxMEE3NTAwOUU3NDMx
IC8qIENhcmV0UmVjdENvbXB1dGF0aW9uLmggKi8sCiAJCQkJRkI5MkRGNDkxNUZFRDA4NzAwOTk0
NDMzIC8qIENsaXBQYXRoT3BlcmF0aW9uLmggKi8sCiAJCQkJNTgwMzcxNUYxQTY2RjAwQTAwQkFG
NTE5IC8qIENsaXBSZWN0LmNwcCAqLywKIAkJCQk1ODAzNzE2MDFBNjZGMDBBMDBCQUY1MTkgLyog
Q2xpcFJlY3QuaCAqLywKQEAgLTM1MTA5LDYgKzM1MTEzLDcgQEAKIAkJCQlBMEVFMERGODE0NEY4
MjU1MDBGODBCMEQgLyogV2ViR0xEZWJ1Z1NoYWRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTZF
M0ZBRThGMTQ3MzNGREIwMEU0MjMwNyAvKiBXZWJHTERlcHRoVGV4dHVyZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUIzMDY5NUUxOEIzRDM0NTAwOTlENUU4IC8qIFdlYkdMRHJhd0J1ZmZlcnMuaCBp
biBIZWFkZXJzICovLAorCQkJCUU0RjBCRTMxMjU3MTJGNkUwMDlFNzQzMSAvKiBDYXJldFJlY3RD
b21wdXRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkVCRjBFNTUxMkE4OTI5ODAwREIxNzA5
IC8qIFdlYkdMRXh0ZW5zaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlDRjEwNDJEMzJG
MDAwOUQ0NDcgLyogV2ViR0xGcmFtZWJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlGRkJG
M0YxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIuaCBpbiBIZWFkZXJzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggNzY5ZDFl
OWZkZTFkLi5mZmIyNjA1OWE3M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcApAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgIkFjY2Vzc2li
aWxpdHlUYWJsZVJvdy5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlUcmVlLmgiCiAjaW5jbHVk
ZSAiQWNjZXNzaWJpbGl0eVRyZWVJdGVtLmgiCisjaW5jbHVkZSAiQ2FyZXRSZWN0Q29tcHV0YXRp
b24uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVkaXRpbmcuaCIKICNpbmNs
dWRlICJFZGl0b3IuaCIKQEAgLTI5MDIsNyArMjkwMyw3IEBAIExheW91dFJlY3QgQVhPYmplY3RD
YWNoZTo6bG9jYWxDYXJldFJlY3RGb3JDaGFyYWN0ZXJPZmZzZXQoUmVuZGVyT2JqZWN0KiYgcmVu
ZGVyCiAgICAgaWYgKGlzPFJlbmRlckxpbmVCcmVhaz4ocmVuZGVyZXIpICYmIExheW91dEludGVn
cmF0aW9uOjpydW5Gb3IoZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPigqcmVuZGVyZXIpKSAhPSBy
dW5BbmRPZmZzZXQucnVuKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgcmV0dXJu
IHJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChydW5BbmRPZmZzZXQpOworICAgIHJldHVybiBjb21w
dXRlTG9jYWxDYXJldFJlY3QoKnJlbmRlcmVyLCBydW5BbmRPZmZzZXQpOwogfQogCiBJbnRSZWN0
IEFYT2JqZWN0Q2FjaGU6OmFic29sdXRlQ2FyZXRCb3VuZHNGb3JDaGFyYWN0ZXJPZmZzZXQoY29u
c3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9SZW5kZXJlZFBvc2l0aW9uLmNwcAppbmRleCAyNmQ3YTg1M2Y0MTAuLmRhYWRkZTk3Y2Vh
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uY3BwCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyZWRQb3Np
dGlvbi5oIgogCisjaW5jbHVkZSAiQ2FyZXRSZWN0Q29tcHV0YXRpb24uaCIKICNpbmNsdWRlICJJ
bmxpbmVSdW5BbmRPZmZzZXQuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVk
ZSAiVmlzaWJsZVBvc2l0aW9uLmgiCkBAIC0yMjYsNyArMjI3LDcgQEAgSW50UmVjdCBSZW5kZXJl
ZFBvc2l0aW9uOjphYnNvbHV0ZVJlY3QoQ2FyZXRSZWN0TW9kZSBjYXJldFJlY3RNb2RlKSBjb25z
dAogICAgIGlmIChpc051bGwoKSkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAotICAgIElu
dFJlY3QgbG9jYWxSZWN0ID0gc25hcHBlZEludFJlY3QobV9yZW5kZXJlci0+bG9jYWxDYXJldFJl
Y3QoeyBtX3J1biwgbV9vZmZzZXQgfSwgY2FyZXRSZWN0TW9kZSkpOworICAgIEludFJlY3QgbG9j
YWxSZWN0ID0gc25hcHBlZEludFJlY3QoY29tcHV0ZUxvY2FsQ2FyZXRSZWN0KCptX3JlbmRlcmVy
LCB7IG1fcnVuLCBtX29mZnNldCB9LCBjYXJldFJlY3RNb2RlKSk7CiAgICAgcmV0dXJuIGxvY2Fs
UmVjdCA9PSBJbnRSZWN0KCkgPyBJbnRSZWN0KCkgOiBtX3JlbmRlcmVyLT5sb2NhbFRvQWJzb2x1
dGVRdWFkKEZsb2F0UmVjdChsb2NhbFJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5oCmluZGV4IDM3ZjliMWNl
NjhkYS4uYWNhYzgwZTZjZWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
bmRlcmVkUG9zaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9z
aXRpb24uaApAQCAtMzAsNiArMzAsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNh
cmV0UmVjdENvbXB1dGF0aW9uLmgiCiAjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRl
cmF0b3IuaCIKICNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiVGV4dEFmZmluaXR5LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVQb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3Np
dGlvbi5jcHAKaW5kZXggNTlhNWZkNjc5ZGNjLi5lMGYxMzQ4ODY2MTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNs
dWRlICJWaXNpYmxlUG9zaXRpb24uaCIKIAogI2luY2x1ZGUgIkJvdW5kYXJ5UG9pbnQuaCIKKyNp
bmNsdWRlICJDYXJldFJlY3RDb21wdXRhdGlvbi5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRWRpdGluZy5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgpAQCAtNjQzLDcgKzY0
NCw3IEBAIGF1dG8gVmlzaWJsZVBvc2l0aW9uOjpsb2NhbENhcmV0UmVjdCgpIGNvbnN0IC0+IExv
Y2FsQ2FyZXRSZWN0CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIHJldHVybiB7IHJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChydW5BbmRPZmZzZXQpLCBjb25z
dF9jYXN0PFJlbmRlck9iamVjdCo+KHJlbmRlcmVyKSB9OworICAgIHJldHVybiB7IGNvbXB1dGVM
b2NhbENhcmV0UmVjdCgqcmVuZGVyZXIsIHJ1bkFuZE9mZnNldCksIGNvbnN0X2Nhc3Q8UmVuZGVy
T2JqZWN0Kj4ocmVuZGVyZXIpIH07CiB9CiAKIEludFJlY3QgVmlzaWJsZVBvc2l0aW9uOjphYnNv
bHV0ZUNhcmV0Qm91bmRzKGJvb2wqIGluc2lkZUZpeGVkKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NhcmV0UmVjdENvbXB1dGF0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9DYXJldFJlY3RDb21wdXRhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kMzcyNjcwZWMxMjIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ2FyZXRSZWN0Q29tcHV0YXRpb24uY3BwCkBAIC0w
LDAgKzEsMzE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkNhcmV0UmVjdENvbXB1dGF0aW9uLmgiCisKKyNpbmNsdWRlICJFZGl0aW5nLmgiCisjaW5jbHVk
ZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJMYXlvdXRJbnRl
Z3JhdGlvblJ1bkl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCisjaW5j
bHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCisjaW5j
bHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgTGF5b3V0UmVjdCBjb21wdXRlQ2FyZXRSZWN0
Rm9yRW1wdHlFbGVtZW50KGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiByZW5kZXJlciwgTGF5
b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCB0ZXh0SW5kZW50T2Zmc2V0LCBDYXJldFJlY3RNb2Rl
IGNhcmV0UmVjdE1vZGUpCit7CisgICAgQVNTRVJUKCFyZW5kZXJlci5maXJzdENoaWxkKCkpOwor
CisgICAgLy8gRklYTUU6IFRoaXMgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgZWl0aGVyIDpm
aXJzdC1saW5lIG9yIDpmaXJzdC1sZXR0ZXIKKyAgICAvLyBIb3dldmVyLCBhcyBzb29uIGFzIHNv
bWUgY29udGVudCBpcyBlbnRlcmVkLCB0aGUgbGluZSBib3hlcyB3aWxsIGJlCisgICAgLy8gY29u
c3RydWN0ZWQgYW5kIHRoaXMga2x1ZGdlIGlzIG5vdCBjYWxsZWQgYW55IG1vcmUuIFNvIG9ubHkg
dGhlIGNhcmV0IHNpemUKKyAgICAvLyBvZiBhbiBlbXB0eSA6Zmlyc3QtbGluZSdkIGJsb2NrIGlz
IHdyb25nLiBJIHRoaW5rIHdlIGNhbiBsaXZlIHdpdGggdGhhdC4KKyAgICBjb25zdCBSZW5kZXJT
dHlsZSYgY3VycmVudFN0eWxlID0gcmVuZGVyZXIuZmlyc3RMaW5lU3R5bGUoKTsKKworICAgIGVu
dW0gQ2FyZXRBbGlnbm1lbnQgeyBBbGlnbkxlZnQsIEFsaWduUmlnaHQsIEFsaWduQ2VudGVyIH07
CisKKyAgICBDYXJldEFsaWdubWVudCBhbGlnbm1lbnQgPSBBbGlnbkxlZnQ7CisKKyAgICBzd2l0
Y2ggKGN1cnJlbnRTdHlsZS50ZXh0QWxpZ24oKSkgeworICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6
TGVmdDoKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExlZnQ6CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Q2VudGVyOgorICAgIGNhc2UgVGV4dEFsaWduTW9k
ZTo6V2ViS2l0Q2VudGVyOgorICAgICAgICBhbGlnbm1lbnQgPSBBbGlnbkNlbnRlcjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKKyAgICBjYXNlIFRleHRB
bGlnbk1vZGU6OldlYktpdFJpZ2h0OgorICAgICAgICBhbGlnbm1lbnQgPSBBbGlnblJpZ2h0Owor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6CisgICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKKyAgICAgICAgaWYgKCFjdXJyZW50U3R5bGUuaXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpKQorICAgICAgICAgICAgYWxpZ25tZW50ID0gQWxpZ25SaWdodDsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6CisgICAgICAgIGlm
IChjdXJyZW50U3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQorICAgICAgICAgICAgYWxp
Z25tZW50ID0gQWxpZ25SaWdodDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgTGF5b3V0
VW5pdCB4ID0gcmVuZGVyZXIuYm9yZGVyTGVmdCgpICsgcmVuZGVyZXIucGFkZGluZ0xlZnQoKTsK
KyAgICBMYXlvdXRVbml0IG1heFggPSB3aWR0aCAtIHJlbmRlcmVyLmJvcmRlclJpZ2h0KCkgLSBy
ZW5kZXJlci5wYWRkaW5nUmlnaHQoKTsKKworICAgIHN3aXRjaCAoYWxpZ25tZW50KSB7CisgICAg
Y2FzZSBBbGlnbkxlZnQ6CisgICAgICAgIGlmIChjdXJyZW50U3R5bGUuaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpKQorICAgICAgICAgICAgeCArPSB0ZXh0SW5kZW50T2Zmc2V0OworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFsaWduQ2VudGVyOgorICAgICAgICB4ID0gKHggKyBtYXhYKSAvIDI7
CisgICAgICAgIGlmIChjdXJyZW50U3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQorICAg
ICAgICAgICAgeCArPSB0ZXh0SW5kZW50T2Zmc2V0IC8gMjsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeCAtPSB0ZXh0SW5kZW50T2Zmc2V0IC8gMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBbGlnblJpZ2h0OgorICAgICAgICB4ID0gbWF4WCAtIGNhcmV0V2lkdGg7CisgICAgICAgIGlm
ICghY3VycmVudFN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKKyAgICAgICAgICAgIHgg
LT0gdGV4dEluZGVudE9mZnNldDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHggPSBzdGQ6
Om1pbih4LCBzdGQ6Om1heDxMYXlvdXRVbml0PihtYXhYIC0gY2FyZXRXaWR0aCwgMCkpOworCisg
ICAgYXV0byBsaW5lSGVpZ2h0ID0gcmVuZGVyZXIubGluZUhlaWdodCh0cnVlLCBjdXJyZW50U3R5
bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxM
aW5lLCBQb3NpdGlvbk9mSW50ZXJpb3JMaW5lQm94ZXMpOworICAgIGF1dG8gaGVpZ2h0ID0gc3Rk
OjptaW4obGluZUhlaWdodCwgTGF5b3V0VW5pdCB7IGN1cnJlbnRTdHlsZS5mb250TWV0cmljcygp
LmhlaWdodCgpIH0pOworICAgIGF1dG8geSA9IHJlbmRlcmVyLnBhZGRpbmdUb3AoKSArIHJlbmRl
cmVyLmJvcmRlclRvcCgpICsgKGxpbmVIZWlnaHQgPiBoZWlnaHQgPyAobGluZUhlaWdodCAtIGhl
aWdodCkgLyAyIDogTGF5b3V0VW5pdCB7IH0pOworCisgICAgYXV0byByZWN0ID0gTGF5b3V0UmVj
dCh4LCB5LCBjYXJldFdpZHRoLCBoZWlnaHQpOworCisgICAgaWYgKGNhcmV0UmVjdE1vZGUgPT0g
Q2FyZXRSZWN0TW9kZTo6RXhwYW5kVG9FbmRPZkxpbmUpCisgICAgICAgIHJlY3Quc2hpZnRNYXhY
RWRnZVRvKHdpZHRoKTsKKworICAgIHJldHVybiBjdXJyZW50U3R5bGUuaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IHJlY3QgOiByZWN0LnRyYW5zcG9zZWRSZWN0KCk7Cit9CisKK3N0YXRpYyBM
YXlvdXRSZWN0IGNvbXB1dGVDYXJldFJlY3RGb3JMaW5lUG9zaXRpb24oY29uc3QgTGF5b3V0SW50
ZWdyYXRpb246OkxpbmVJdGVyYXRvciYgbGluZSwgZmxvYXQgbG9naWNhbExlZnRQb3NpdGlvbiwg
Q2FyZXRSZWN0TW9kZSBjYXJldFJlY3RNb2RlKQoreworICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9j
ayA9IGxpbmUtPmNvbnRhaW5pbmdCbG9jaygpOworICAgIGF1dG8gbGluZVNlbGVjdGlvblJlY3Qg
PSBsaW5lLT5zZWxlY3Rpb25SZWN0KCk7CisKKyAgICBpbnQgaGVpZ2h0ID0gbGluZVNlbGVjdGlv
blJlY3QuaGVpZ2h0KCk7CisgICAgaW50IHRvcCA9IGxpbmVTZWxlY3Rpb25SZWN0LnkoKTsKKwor
ICAgIC8vIERpc3RyaWJ1dGUgdGhlIGNhcmV0J3Mgd2lkdGggdG8gZWl0aGVyIHNpZGUgb2YgdGhl
IG9mZnNldC4KKyAgICBmbG9hdCBsZWZ0ID0gbG9naWNhbExlZnRQb3NpdGlvbjsKKyAgICBpbnQg
Y2FyZXRXaWR0aExlZnRPZk9mZnNldCA9IGNhcmV0V2lkdGggLyAyOworICAgIGxlZnQgLT0gY2Fy
ZXRXaWR0aExlZnRPZk9mZnNldDsKKyAgICBpbnQgY2FyZXRXaWR0aFJpZ2h0T2ZPZmZzZXQgPSBj
YXJldFdpZHRoIC0gY2FyZXRXaWR0aExlZnRPZk9mZnNldDsKKyAgICBsZWZ0ID0gcm91bmRmKGxl
ZnQpOworCisgICAgZmxvYXQgbGluZUxlZnQgPSBsaW5lU2VsZWN0aW9uUmVjdC54KCk7CisgICAg
ZmxvYXQgbGluZVJpZ2h0ID0gbGluZVNlbGVjdGlvblJlY3QubWF4WCgpOworCisgICAgYm9vbCBy
aWdodEFsaWduZWQgPSBmYWxzZTsKKyAgICBzd2l0Y2ggKGNvbnRhaW5pbmdCbG9jay5zdHlsZSgp
LnRleHRBbGlnbigpKSB7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKKyAgICBjYXNl
IFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0OgorICAgICAgICByaWdodEFsaWduZWQgPSB0cnVl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkxlZnQ6CisgICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Q2Vu
dGVyOgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVyOgorICAgICAgICBicmVh
azsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6CisgICAgY2FzZSBUZXh0QWxpZ25N
b2RlOjpTdGFydDoKKyAgICAgICAgcmlnaHRBbGlnbmVkID0gIWNvbnRhaW5pbmdCbG9jay5zdHls
ZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBU
ZXh0QWxpZ25Nb2RlOjpFbmQ6CisgICAgICAgIHJpZ2h0QWxpZ25lZCA9IGNvbnRhaW5pbmdCbG9j
ay5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgZmxvYXQgbGVmdEVkZ2UgPSBzdGQ6Om1pbjxmbG9hdD4oMCwgbGluZUxlZnQpOwor
ICAgIGZsb2F0IHJpZ2h0RWRnZSA9IHN0ZDo6bWF4PGZsb2F0Pihjb250YWluaW5nQmxvY2subG9n
aWNhbFdpZHRoKCksIGxpbmVSaWdodCk7CisKKyAgICBpZiAocmlnaHRBbGlnbmVkKSB7CisgICAg
ICAgIGxlZnQgPSBzdGQ6Om1heChsZWZ0LCBsZWZ0RWRnZSk7CisgICAgICAgIGxlZnQgPSBzdGQ6
Om1pbihsZWZ0LCBsaW5lUmlnaHQgLSBjYXJldFdpZHRoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBsZWZ0ID0gc3RkOjptaW4obGVmdCwgcmlnaHRFZGdlIC0gY2FyZXRXaWR0aFJpZ2h0T2ZPZmZz
ZXQpOworICAgICAgICBsZWZ0ID0gc3RkOjptYXgobGVmdCwgbGluZUxlZnQpOworICAgIH0KKwor
ICAgIGF1dG8gcmVjdCA9IEludFJlY3QobGVmdCwgdG9wLCBjYXJldFdpZHRoLCBoZWlnaHQpOwor
CisgICAgaWYgKGNhcmV0UmVjdE1vZGUgPT0gQ2FyZXRSZWN0TW9kZTo6RXhwYW5kVG9FbmRPZkxp
bmUpCisgICAgICAgIHJlY3Quc2hpZnRNYXhYRWRnZVRvKGxpbmVSaWdodCk7CisKKyAgICByZXR1
cm4gY29udGFpbmluZ0Jsb2NrLnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJl
Y3QgOiByZWN0LnRyYW5zcG9zZWRSZWN0KCk7Cit9CisKK3N0YXRpYyBMYXlvdXRSZWN0IGNvbXB1
dGVDYXJldFJlY3RGb3JUZXh0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYgcnVuQW5kT2Zmc2V0
LCBDYXJldFJlY3RNb2RlIGNhcmV0UmVjdE1vZGUpCit7CisgICAgaWYgKCFydW5BbmRPZmZzZXQu
cnVuKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byYgdGV4dFJ1biA9IGRvd25jYXN0
PExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3I+KHJ1bkFuZE9mZnNldC5ydW4pOwor
ICAgIGF1dG8gbGluZSA9IHRleHRSdW4ubGluZSgpOworCisgICAgZmxvYXQgcG9zaXRpb24gPSB0
ZXh0UnVuLT5wb3NpdGlvbkZvck9mZnNldChydW5BbmRPZmZzZXQub2Zmc2V0KTsKKyAgICByZXR1
cm4gY29tcHV0ZUNhcmV0UmVjdEZvckxpbmVQb3NpdGlvbihsaW5lLCBwb3NpdGlvbiwgY2FyZXRS
ZWN0TW9kZSk7Cit9CisKK3N0YXRpYyBMYXlvdXRSZWN0IGNvbXB1dGVDYXJldFJlY3RGb3JMaW5l
QnJlYWsoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiBydW5BbmRPZmZzZXQsIENhcmV0UmVjdE1v
ZGUgY2FyZXRSZWN0TW9kZSkKK3sKKyAgICBBU1NFUlQoIXJ1bkFuZE9mZnNldC5vZmZzZXQpOwor
CisgICAgaWYgKCFydW5BbmRPZmZzZXQucnVuKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
YXV0byBsaW5lID0gcnVuQW5kT2Zmc2V0LnJ1bi5saW5lKCk7CisgICAgcmV0dXJuIGNvbXB1dGVD
YXJldFJlY3RGb3JMaW5lUG9zaXRpb24obGluZSwgbGluZS0+Y29udGVudExvZ2ljYWxMZWZ0KCks
IGNhcmV0UmVjdE1vZGUpOworfQorCitzdGF0aWMgTGF5b3V0UmVjdCBjb21wdXRlQ2FyZXRSZWN0
Rm9yU1ZHSW5saW5lVGV4dChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmIHJ1bkFuZE9mZnNldCwg
Q2FyZXRSZWN0TW9kZSkKK3sKKyAgICBhdXRvKiBib3ggPSBydW5BbmRPZmZzZXQucnVuID8gcnVu
QW5kT2Zmc2V0LnJ1bi0+bGVnYWN5SW5saW5lQm94KCkgOiBudWxscHRyOworICAgIGF1dG8gY2Fy
ZXRPZmZzZXQgPSBydW5BbmRPZmZzZXQub2Zmc2V0OworCisgICAgaWYgKCFpczxJbmxpbmVUZXh0
Qm94Pihib3gpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byYgdGV4dEJveCA9IGRv
d25jYXN0PElubGluZVRleHRCb3g+KCpib3gpOworICAgIGlmIChjYXJldE9mZnNldCA8IHRleHRC
b3guc3RhcnQoKSB8fCBjYXJldE9mZnNldCA+IHRleHRCb3guc3RhcnQoKSArIHRleHRCb3gubGVu
KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICAvLyBVc2UgdGhlIGVkZ2Ugb2YgdGhlIHNl
bGVjdGlvbiByZWN0IHRvIGRldGVybWluZSB0aGUgY2FyZXQgcmVjdC4KKyAgICBpZiAoY2FyZXRP
ZmZzZXQgPCB0ZXh0Qm94LnN0YXJ0KCkgKyB0ZXh0Qm94LmxlbigpKSB7CisgICAgICAgIExheW91
dFJlY3QgcmVjdCA9IHRleHRCb3gubG9jYWxTZWxlY3Rpb25SZWN0KGNhcmV0T2Zmc2V0LCBjYXJl
dE9mZnNldCArIDEpOworICAgICAgICBMYXlvdXRVbml0IHggPSB0ZXh0Qm94LmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSA/IHJlY3QueCgpIDogcmVjdC5tYXhYKCk7CisgICAgICAgIHJldHVybiBM
YXlvdXRSZWN0KHgsIHJlY3QueSgpLCBjYXJldFdpZHRoLCByZWN0LmhlaWdodCgpKTsKKyAgICB9
CisKKyAgICBMYXlvdXRSZWN0IHJlY3QgPSB0ZXh0Qm94LmxvY2FsU2VsZWN0aW9uUmVjdChjYXJl
dE9mZnNldCAtIDEsIGNhcmV0T2Zmc2V0KTsKKyAgICBMYXlvdXRVbml0IHggPSB0ZXh0Qm94Lmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHJlY3QubWF4WCgpIDogcmVjdC54KCk7CisgICAgcmV0
dXJuIHsgeCwgcmVjdC55KCksIGNhcmV0V2lkdGgsIHJlY3QuaGVpZ2h0KCkgfTsKK30KKworc3Rh
dGljIExheW91dFJlY3QgY29tcHV0ZUNhcmV0UmVjdEZvckJveChjb25zdCBSZW5kZXJCb3gmIHJl
bmRlcmVyLCBjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmIHJ1bkFuZE9mZnNldCwgQ2FyZXRSZWN0
TW9kZSBjYXJldFJlY3RNb2RlKQoreworICAgIC8vIFZpc2libGVQb3NpdGlvbnMgYXQgb2Zmc2V0
cyBpbnNpZGUgY29udGFpbmVycyBlaXRoZXIgYSkgcmVmZXIgdG8gdGhlIHBvc2l0aW9ucyBiZWZv
cmUvYWZ0ZXIKKyAgICAvLyB0aG9zZSBjb250YWluZXJzICh0YWJsZXMgYW5kIHNlbGVjdCBlbGVt
ZW50cykgb3IgYikgcmVmZXIgdG8gdGhlIHBvc2l0aW9uIGluc2lkZSBhbiBlbXB0eSBibG9jay4K
KyAgICAvLyBUaGV5IG5ldmVyIHJlZmVyIHRvIGNoaWxkcmVuLgorICAgIC8vIEZJWE1FOiBQYWlu
dCB0aGUgY2FyZXRzIGluc2lkZSBlbXB0eSBibG9ja3MgZGlmZmVyZW50bHkgdGhhbiB0aGUgY2Fy
ZXRzIGJlZm9yZS9hZnRlciBlbGVtZW50cy4KKworICAgIExheW91dFJlY3QgcmVjdChyZW5kZXJl
ci5sb2NhdGlvbigpLCBMYXlvdXRTaXplKGNhcmV0V2lkdGgsIHJlbmRlcmVyLmhlaWdodCgpKSk7
CisgICAgYm9vbCBsdHIgPSBydW5BbmRPZmZzZXQucnVuID8gcnVuQW5kT2Zmc2V0LnJ1bi0+aXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpIDogcmVuZGVyZXIuc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCk7CisKKyAgICBpZiAoKCFydW5BbmRPZmZzZXQub2Zmc2V0KSBeIGx0cikKKyAgICAg
ICAgcmVjdC5tb3ZlKExheW91dFNpemUocmVuZGVyZXIud2lkdGgoKSAtIGNhcmV0V2lkdGgsIDBf
bHUpKTsKKworICAgIGlmIChydW5BbmRPZmZzZXQucnVuKSB7CisgICAgICAgIGF1dG8gbGluZSA9
IHJ1bkFuZE9mZnNldC5ydW4ubGluZSgpOworICAgICAgICBMYXlvdXRVbml0IHRvcCA9IGxpbmUt
PnRvcCgpOworICAgICAgICByZWN0LnNldFkodG9wKTsKKyAgICAgICAgcmVjdC5zZXRIZWlnaHQo
bGluZS0+Ym90dG9tKCkgLSB0b3ApOworICAgIH0KKworICAgIC8vIElmIGhlaWdodCBvZiBib3gg
aXMgc21hbGxlciB0aGFuIGZvbnQgaGVpZ2h0LCB1c2UgdGhlIGxhdHRlciBvbmUsCisgICAgLy8g
b3RoZXJ3aXNlIHRoZSBjYXJldCBtaWdodCBiZWNvbWUgaW52aXNpYmxlLgorICAgIC8vCisgICAg
Ly8gQWxzbywgaWYgdGhlIGJveCBpcyBub3QgYSByZXBsYWNlZCBlbGVtZW50LCBhbHdheXMgdXNl
IHRoZSBmb250IGhlaWdodC4KKyAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSAiYmlnIGNhcmV0IiBi
dWcgZGVzY3JpYmVkIGluOgorICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8zNzc3ODA0PiBEZWxldGlu
ZyBhbGwgY29udGVudCBpbiBhIGRvY3VtZW50IGNhbiByZXN1bHQgaW4gZ2lhbnQgdGFsbC1hcy13
aW5kb3cgaW5zZXJ0aW9uIHBvaW50CisgICAgLy8KKyAgICAvLyBGSVhNRTogaWdub3JpbmcgOmZp
cnN0LWxpbmUsIG1pc3NpbmcgZ29vZCByZWFzb24gdG8gdGFrZSBjYXJlIG9mCisgICAgTGF5b3V0
VW5pdCBmb250SGVpZ2h0ID0gcmVuZGVyZXIuc3R5bGUoKS5mb250TWV0cmljcygpLmhlaWdodCgp
OworICAgIGlmIChmb250SGVpZ2h0ID4gcmVjdC5oZWlnaHQoKSB8fCAoIXJlbmRlcmVyLmlzUmVw
bGFjZWQoKSAmJiAhcmVuZGVyZXIuaXNUYWJsZSgpKSkKKyAgICAgICAgcmVjdC5zZXRIZWlnaHQo
Zm9udEhlaWdodCk7CisKKyAgICAvLyBNb3ZlIHRvIGxvY2FsIGNvb3JkcworICAgIHJlY3QubW92
ZUJ5KC1yZW5kZXJlci5sb2NhdGlvbigpKTsKKworICAgIC8vIEZJWE1FOiBCb3JkZXIvcGFkZGlu
ZyBzaG91bGQgYmUgYWRkZWQgZm9yIGFsbCBlbGVtZW50cyBidXQgdGhpcyB3b3JrYXJvdW5kCisg
ICAgLy8gaXMgbmVlZGVkIGJlY2F1c2Ugd2UgdXNlIG9mZnNldHMgaW5zaWRlIGFuICJhdG9taWMi
IGVsZW1lbnQgdG8gcmVwcmVzZW50CisgICAgLy8gcG9zaXRpb25zIGJlZm9yZSBhbmQgYWZ0ZXIg
dGhlIGVsZW1lbnQgaW4gZGVwcmVjYXRlZCBlZGl0aW5nIG9mZnNldHMuCisgICAgaWYgKHJlbmRl
cmVyLmVsZW1lbnQoKSAmJiAhKGVkaXRpbmdJZ25vcmVzQ29udGVudCgqcmVuZGVyZXIuZWxlbWVu
dCgpKSB8fCBpc1JlbmRlcmVkVGFibGUocmVuZGVyZXIuZWxlbWVudCgpKSkpIHsKKyAgICAgICAg
cmVjdC5zZXRYKHJlY3QueCgpICsgcmVuZGVyZXIuYm9yZGVyTGVmdCgpICsgcmVuZGVyZXIucGFk
ZGluZ0xlZnQoKSk7CisgICAgICAgIHJlY3Quc2V0WShyZWN0LnkoKSArIHJlbmRlcmVyLnBhZGRp
bmdUb3AoKSArIHJlbmRlcmVyLmJvcmRlclRvcCgpKTsKKyAgICB9CisKKyAgICBpZiAoY2FyZXRS
ZWN0TW9kZSA9PSBDYXJldFJlY3RNb2RlOjpFeHBhbmRUb0VuZE9mTGluZSkKKyAgICAgICAgcmVj
dC5zaGlmdE1heFhFZGdlVG8ocmVuZGVyZXIueCgpICsgcmVuZGVyZXIud2lkdGgoKSk7CisKKyAg
ICByZXR1cm4gcmVuZGVyZXIuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJlY3QgOiByZWN0
LnRyYW5zcG9zZWRSZWN0KCk7Cit9CisKK3N0YXRpYyBMYXlvdXRSZWN0IGNvbXB1dGVDYXJldFJl
Y3RGb3JCbG9jayhjb25zdCBSZW5kZXJCbG9jayYgcmVuZGVyZXIsIGNvbnN0IElubGluZVJ1bkFu
ZE9mZnNldCYgcnVuQW5kT2Zmc2V0LCBDYXJldFJlY3RNb2RlIGNhcmV0UmVjdE1vZGUpCit7Cisg
ICAgLy8gRG8gdGhlIG5vcm1hbCBjYWxjdWxhdGlvbiBpbiBtb3N0IGNhc2VzLgorICAgIGlmIChy
ZW5kZXJlci5maXJzdENoaWxkKCkpCisgICAgICAgIHJldHVybiBjb21wdXRlQ2FyZXRSZWN0Rm9y
Qm94KHJlbmRlcmVyLCBydW5BbmRPZmZzZXQsIGNhcmV0UmVjdE1vZGUpOworCisgICAgcmV0dXJu
IGNvbXB1dGVDYXJldFJlY3RGb3JFbXB0eUVsZW1lbnQocmVuZGVyZXIsIHJlbmRlcmVyLndpZHRo
KCksIHJlbmRlcmVyLnRleHRJbmRlbnRPZmZzZXQoKSwgY2FyZXRSZWN0TW9kZSk7Cit9CisKK3N0
YXRpYyBMYXlvdXRSZWN0IGNvbXB1dGVDYXJldFJlY3RGb3JJbmxpbmUoY29uc3QgUmVuZGVySW5s
aW5lJiByZW5kZXJlcikKK3sKKyAgICBpZiAocmVuZGVyZXIuZmlyc3RDaGlsZCgpKSB7CisgICAg
ICAgIC8vIFRoaXMgY29uZGl0aW9uIGlzIHBvc3NpYmxlIGlmIHRoZSBSZW5kZXJJbmxpbmUgaXMg
YXQgYW4gZWRpdGluZyBib3VuZGFyeSwKKyAgICAgICAgLy8gaS5lLiB0aGUgVmlzaWJsZVBvc2l0
aW9uIGlzOgorICAgICAgICAvLyAgIDxSZW5kZXJJbmxpbmUgZWRpdGluZ0JvdW5kYXJ5PXRydWU+
fDxSZW5kZXJUZXh0PiA8L1JlbmRlclRleHQ+PC9SZW5kZXJJbmxpbmU+CisgICAgICAgIC8vIEZJ
WE1FOiBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIG1ha2UgdGhpcyByZXR1cm4gYSB2YWxpZCBy
ZWN0LCBub3RlIHRoYXQKKyAgICAgICAgLy8gdGhlcmUgYXJlIG5vIGxpbmUgYm94ZXMgY3JlYXRl
ZCBpbiB0aGUgYWJvdmUgY2FzZS4KKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBM
YXlvdXRSZWN0IGNhcmV0UmVjdCA9IGNvbXB1dGVDYXJldFJlY3RGb3JFbXB0eUVsZW1lbnQocmVu
ZGVyZXIsIHJlbmRlcmVyLmhvcml6b250YWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCksIDAsIENh
cmV0UmVjdE1vZGU6Ok5vcm1hbCk7CisKKyAgICBpZiAoSW5saW5lQm94KiBmaXJzdEJveCA9IHJl
bmRlcmVyLmZpcnN0TGluZUJveCgpKQorICAgICAgICBjYXJldFJlY3QubW92ZUJ5KExheW91dFBv
aW50KGZpcnN0Qm94LT50b3BMZWZ0KCkpKTsKKworICAgIHJldHVybiBjYXJldFJlY3Q7Cit9CisK
K0xheW91dFJlY3QgY29tcHV0ZUxvY2FsQ2FyZXRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVu
ZGVyZXIsIGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYgcnVuQW5kT2Zmc2V0LCBDYXJldFJlY3RN
b2RlIGNhcmV0UmVjdE1vZGUpCit7CisgICAgaWYgKGlzPFJlbmRlclNWR0lubGluZVRleHQ+KHJl
bmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVDYXJldFJlY3RGb3JTVkdJbmxpbmVUZXh0
KHJ1bkFuZE9mZnNldCwgY2FyZXRSZWN0TW9kZSk7CisKKyAgICBpZiAoaXM8UmVuZGVyVGV4dD4o
cmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gY29tcHV0ZUNhcmV0UmVjdEZvclRleHQocnVuQW5k
T2Zmc2V0LCBjYXJldFJlY3RNb2RlKTsKKworICAgIGlmIChpczxSZW5kZXJMaW5lQnJlYWs+KHJl
bmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVDYXJldFJlY3RGb3JMaW5lQnJlYWsocnVu
QW5kT2Zmc2V0LCBjYXJldFJlY3RNb2RlKTsKKworICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVu
ZGVyZXIpKQorICAgICAgICByZXR1cm4gY29tcHV0ZUNhcmV0UmVjdEZvckJsb2NrKGRvd25jYXN0
PFJlbmRlckJsb2NrPihyZW5kZXJlciksIHJ1bkFuZE9mZnNldCwgY2FyZXRSZWN0TW9kZSk7CisK
KyAgICBpZiAoaXM8UmVuZGVyQm94PihyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBjb21wdXRl
Q2FyZXRSZWN0Rm9yQm94KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpLCBydW5BbmRPZmZz
ZXQsIGNhcmV0UmVjdE1vZGUpOworCisgICAgaWYgKGlzPFJlbmRlcklubGluZT4ocmVuZGVyZXIp
KQorICAgICAgICByZXR1cm4gY29tcHV0ZUNhcmV0UmVjdEZvcklubGluZShkb3duY2FzdDxSZW5k
ZXJJbmxpbmU+KHJlbmRlcmVyKSk7CisKKyAgICByZXR1cm4geyB9OworfQorCit9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NhcmV0UmVjdENvbXB1dGF0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ2FyZXRSZWN0Q29tcHV0YXRpb24uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjczNjJhODQzYjNmNQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DYXJldFJlY3RDb21wdXRhdGlvbi5oCkBA
IC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIklu
bGluZVJ1bkFuZE9mZnNldC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdEVudW1zLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBDYXJldFJlY3RNb2RlIHsKKyAgICBOb3Jt
YWwsCisgICAgRXhwYW5kVG9FbmRPZkxpbmUKK307CisKK0xheW91dFJlY3QgY29tcHV0ZUxvY2Fs
Q2FyZXRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYs
IENhcmV0UmVjdE1vZGUgPSBDYXJldFJlY3RNb2RlOjpOb3JtYWwpOworCit9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggYzhkODFlZjI0ODY2Li4zNThkNjZm
OTg3MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMjg0
MSwxNSArMjg0MSw2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUhpdFRlc3RSZXN1bHQoSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYKICAgICB9CiB9CiAKLUxheW91
dFJlY3QgUmVuZGVyQmxvY2s6OmxvY2FsQ2FyZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNl
dCYgcnVuQW5kT2Zmc2V0LCBDYXJldFJlY3RNb2RlIGNhcmV0UmVjdE1vZGUpIGNvbnN0Ci17Ci0g
ICAgLy8gRG8gdGhlIG5vcm1hbCBjYWxjdWxhdGlvbiBpbiBtb3N0IGNhc2VzLgotICAgIGlmIChm
aXJzdENoaWxkKCkpCi0gICAgICAgIHJldHVybiBSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KHJ1
bkFuZE9mZnNldCwgY2FyZXRSZWN0TW9kZSk7Ci0KLSAgICByZXR1cm4gbG9jYWxDYXJldFJlY3RG
b3JFbXB0eUVsZW1lbnQod2lkdGgoKSwgdGV4dEluZGVudE9mZnNldCgpLCBjYXJldFJlY3RNb2Rl
KTsKLX0KLQogdm9pZCBSZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHNGb3JJbmxpbmVDaGls
ZHJlbihWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRl
ckxheWVyTW9kZWxPYmplY3QqKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCA3ZDM0MTRiNGM1ZjAuLmY5YjJkOThk
ZDlhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKQEAgLTQ4NCw4ICs0
ODQsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwYWludENvbnRpbnVhdGlvbk91dGxpbmVzKFBh
aW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2Fy
ZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYsIENhcmV0UmVjdE1vZGUpIGNvbnN0IGZp
bmFsOwotICAgIAogICAgIC8vIEZJWE1FLUJMT0NLRkxPVzogUmVtb3ZlIHZpcnR1YWxpemFpb24g
d2hlbiBhbGwgY2FsbGVycyBoYXZlIG1vdmVkIHRvIFJlbmRlckJsb2NrRmxvdwogICAgIHZpcnR1
YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnRXaXRoSW5saW5lQ2hpbGRyZW4oY29u
c3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciopOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4IGJiMjJmMzRm
ZDNmMy4uZWU4NDhiNjI3ZjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tGbG93LmNwcApAQCAtNDQzOCw1OSArNDQzOCw1IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93
Ojpjb21wdXRlSW5saW5lUHJlZmVycmVkTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dp
Y2FsCiAgICAgbWF4TG9naWNhbFdpZHRoID0gcHJlZmVycmVkV2lkdGgobWF4TG9naWNhbFdpZHRo
LCBpbmxpbmVNYXgpOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUNh
cmV0UmVjdChjb25zdCBMYXlvdXRSZWN0JiBsaW5lU2VsZWN0aW9uUmVjdCwgZmxvYXQgbG9naWNh
bExlZnRQb3NpdGlvbiwgdW5zaWduZWQgY2FyZXRXaWR0aCwgQ2FyZXRSZWN0TW9kZSBjYXJldFJl
Y3RNb2RlKSBjb25zdAotewotICAgIGludCBoZWlnaHQgPSBsaW5lU2VsZWN0aW9uUmVjdC5oZWln
aHQoKTsKLSAgICBpbnQgdG9wID0gbGluZVNlbGVjdGlvblJlY3QueSgpOwotCi0gICAgLy8gRGlz
dHJpYnV0ZSB0aGUgY2FyZXQncyB3aWR0aCB0byBlaXRoZXIgc2lkZSBvZiB0aGUgb2Zmc2V0Lgot
ICAgIGZsb2F0IGxlZnQgPSBsb2dpY2FsTGVmdFBvc2l0aW9uOwotICAgIGludCBjYXJldFdpZHRo
TGVmdE9mT2Zmc2V0ID0gY2FyZXRXaWR0aCAvIDI7Ci0gICAgbGVmdCAtPSBjYXJldFdpZHRoTGVm
dE9mT2Zmc2V0OwotICAgIGludCBjYXJldFdpZHRoUmlnaHRPZk9mZnNldCA9IGNhcmV0V2lkdGgg
LSBjYXJldFdpZHRoTGVmdE9mT2Zmc2V0OwotICAgIGxlZnQgPSByb3VuZGYobGVmdCk7Ci0KLSAg
ICBmbG9hdCBsaW5lTGVmdCA9IGxpbmVTZWxlY3Rpb25SZWN0LngoKTsKLSAgICBmbG9hdCBsaW5l
UmlnaHQgPSBsaW5lU2VsZWN0aW9uUmVjdC5tYXhYKCk7Ci0KLSAgICBib29sIHJpZ2h0QWxpZ25l
ZCA9IGZhbHNlOwotICAgIHN3aXRjaCAoc3R5bGUoKS50ZXh0QWxpZ24oKSkgewotICAgIGNhc2Ug
VGV4dEFsaWduTW9kZTo6UmlnaHQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdo
dDoKLSAgICAgICAgcmlnaHRBbGlnbmVkID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpMZWZ0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVm
dDoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRlcjoKLSAgICBjYXNlIFRleHRBbGlnbk1v
ZGU6OldlYktpdENlbnRlcjoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2Rl
OjpKdXN0aWZ5OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6U3RhcnQ6Ci0gICAgICAgIHJpZ2h0
QWxpZ25lZCA9ICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6Ci0gICAgICAgIHJpZ2h0QWxpZ25lZCA9
IHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBmbG9hdCBsZWZ0RWRnZSA9IHN0ZDo6bWluPGZsb2F0PigwLCBsaW5lTGVmdCk7Ci0g
ICAgZmxvYXQgcmlnaHRFZGdlID0gc3RkOjptYXg8ZmxvYXQ+KGxvZ2ljYWxXaWR0aCgpLCBsaW5l
UmlnaHQpOwotCi0gICAgaWYgKHJpZ2h0QWxpZ25lZCkgewotICAgICAgICBsZWZ0ID0gc3RkOjpt
YXgobGVmdCwgbGVmdEVkZ2UpOwotICAgICAgICBsZWZ0ID0gc3RkOjptaW4obGVmdCwgbGluZVJp
Z2h0IC0gY2FyZXRXaWR0aCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbGVmdCA9IHN0ZDo6bWlu
KGxlZnQsIHJpZ2h0RWRnZSAtIGNhcmV0V2lkdGhSaWdodE9mT2Zmc2V0KTsKLSAgICAgICAgbGVm
dCA9IHN0ZDo6bWF4KGxlZnQsIGxpbmVMZWZ0KTsKLSAgICB9Ci0KLSAgICBhdXRvIHJlY3QgPSBJ
bnRSZWN0KGxlZnQsIHRvcCwgY2FyZXRXaWR0aCwgaGVpZ2h0KTsKLQotICAgIGlmIChjYXJldFJl
Y3RNb2RlID09IENhcmV0UmVjdE1vZGU6OkV4cGFuZFRvRW5kT2ZMaW5lKQotICAgICAgICByZWN0
LnNoaWZ0TWF4WEVkZ2VUbyhsaW5lUmlnaHQpOwotCi0gICAgcmV0dXJuIHN0eWxlKCkuaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSA/IHJlY3QgOiByZWN0LnRyYW5zcG9zZWRSZWN0KCk7Ci19Ci0K
IH0KIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tGbG93LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tGbG93LmgKaW5kZXggZGQ0M2JjMWU4YWZkLi4zZDliNTFmMjg4ODAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKQEAgLTM5OCw3ICszOTgsNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBhZGRGbG9hdHNUb05ld1BhcmVudChSZW5kZXJCbG9ja0Zsb3cmIHRv
QmxvY2tGbG93KSBjb25zdDsKICAgICAKICAgICBMYXlvdXRVbml0IGVuZFBhZGRpbmdXaWR0aEZv
ckNhcmV0KCkgY29uc3Q7Ci0gICAgTGF5b3V0UmVjdCBjb21wdXRlQ2FyZXRSZWN0KGNvbnN0IExh
eW91dFJlY3QmIGxpbmVTZWxlY3Rpb25SZWN0LCBmbG9hdCBsb2dpY2FsTGVmdFBvc2l0aW9uLCB1
bnNpZ25lZCBjYXJldFdpZHRoLCBDYXJldFJlY3RNb2RlID0gQ2FyZXRSZWN0TW9kZTo6Tm9ybWFs
KSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIGJvb2wgc2hvdWxkUmVzZXRMb2dpY2FsSGVpZ2h0
QmVmb3JlTGF5b3V0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCAzMDdmOWIyYzdmMmYuLjQwNjUxOWYyYzY1
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTQ0MzIsNTUgKzQ0
MzIsNiBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0UmVw
bGFjZWQoTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdQogICAgIGNvbXB1dGVkVmFsdWVzLm1fcG9z
aXRpb24gPSBsb2dpY2FsVG9wUG9zOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckJveDo6bG9jYWxD
YXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiBydW5BbmRPZmZzZXQsIENhcmV0UmVj
dE1vZGUgY2FyZXRSZWN0TW9kZSkgY29uc3QKLXsKLSAgICAvLyBWaXNpYmxlUG9zaXRpb25zIGF0
IG9mZnNldHMgaW5zaWRlIGNvbnRhaW5lcnMgZWl0aGVyIGEpIHJlZmVyIHRvIHRoZSBwb3NpdGlv
bnMgYmVmb3JlL2FmdGVyCi0gICAgLy8gdGhvc2UgY29udGFpbmVycyAodGFibGVzIGFuZCBzZWxl
Y3QgZWxlbWVudHMpIG9yIGIpIHJlZmVyIHRvIHRoZSBwb3NpdGlvbiBpbnNpZGUgYW4gZW1wdHkg
YmxvY2suCi0gICAgLy8gVGhleSBuZXZlciByZWZlciB0byBjaGlsZHJlbi4KLSAgICAvLyBGSVhN
RTogUGFpbnQgdGhlIGNhcmV0cyBpbnNpZGUgZW1wdHkgYmxvY2tzIGRpZmZlcmVudGx5IHRoYW4g
dGhlIGNhcmV0cyBiZWZvcmUvYWZ0ZXIgZWxlbWVudHMuCi0KLSAgICBMYXlvdXRSZWN0IHJlY3Qo
bG9jYXRpb24oKSwgTGF5b3V0U2l6ZShjYXJldFdpZHRoLCBoZWlnaHQoKSkpOwotICAgIGJvb2wg
bHRyID0gcnVuQW5kT2Zmc2V0LnJ1biA/IHJ1bkFuZE9mZnNldC5ydW4tPmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSA6IHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwotCi0gICAgaWYg
KCghcnVuQW5kT2Zmc2V0Lm9mZnNldCkgXiBsdHIpCi0gICAgICAgIHJlY3QubW92ZShMYXlvdXRT
aXplKHdpZHRoKCkgLSBjYXJldFdpZHRoLCAwX2x1KSk7Ci0KLSAgICBpZiAocnVuQW5kT2Zmc2V0
LnJ1bikgewotICAgICAgICBhdXRvIGxpbmUgPSBydW5BbmRPZmZzZXQucnVuLmxpbmUoKTsKLSAg
ICAgICAgTGF5b3V0VW5pdCB0b3AgPSBsaW5lLT50b3AoKTsKLSAgICAgICAgcmVjdC5zZXRZKHRv
cCk7Ci0gICAgICAgIHJlY3Quc2V0SGVpZ2h0KGxpbmUtPmJvdHRvbSgpIC0gdG9wKTsKLSAgICB9
Ci0KLSAgICAvLyBJZiBoZWlnaHQgb2YgYm94IGlzIHNtYWxsZXIgdGhhbiBmb250IGhlaWdodCwg
dXNlIHRoZSBsYXR0ZXIgb25lLAotICAgIC8vIG90aGVyd2lzZSB0aGUgY2FyZXQgbWlnaHQgYmVj
b21lIGludmlzaWJsZS4KLSAgICAvLwotICAgIC8vIEFsc28sIGlmIHRoZSBib3ggaXMgbm90IGEg
cmVwbGFjZWQgZWxlbWVudCwgYWx3YXlzIHVzZSB0aGUgZm9udCBoZWlnaHQuCi0gICAgLy8gVGhp
cyBwcmV2ZW50cyB0aGUgImJpZyBjYXJldCIgYnVnIGRlc2NyaWJlZCBpbjoKLSAgICAvLyA8cmRh
cjovL3Byb2JsZW0vMzc3NzgwND4gRGVsZXRpbmcgYWxsIGNvbnRlbnQgaW4gYSBkb2N1bWVudCBj
YW4gcmVzdWx0IGluIGdpYW50IHRhbGwtYXMtd2luZG93IGluc2VydGlvbiBwb2ludAotICAgIC8v
Ci0gICAgLy8gRklYTUU6IGlnbm9yaW5nIDpmaXJzdC1saW5lLCBtaXNzaW5nIGdvb2QgcmVhc29u
IHRvIHRha2UgY2FyZSBvZgotICAgIExheW91dFVuaXQgZm9udEhlaWdodCA9IHN0eWxlKCkuZm9u
dE1ldHJpY3MoKS5oZWlnaHQoKTsKLSAgICBpZiAoZm9udEhlaWdodCA+IHJlY3QuaGVpZ2h0KCkg
fHwgKCFpc1JlcGxhY2VkKCkgJiYgIWlzVGFibGUoKSkpCi0gICAgICAgIHJlY3Quc2V0SGVpZ2h0
KGZvbnRIZWlnaHQpOwotCi0gICAgLy8gTW92ZSB0byBsb2NhbCBjb29yZHMKLSAgICByZWN0Lm1v
dmVCeSgtbG9jYXRpb24oKSk7Ci0KLSAgICAvLyBGSVhNRTogQm9yZGVyL3BhZGRpbmcgc2hvdWxk
IGJlIGFkZGVkIGZvciBhbGwgZWxlbWVudHMgYnV0IHRoaXMgd29ya2Fyb3VuZAotICAgIC8vIGlz
IG5lZWRlZCBiZWNhdXNlIHdlIHVzZSBvZmZzZXRzIGluc2lkZSBhbiAiYXRvbWljIiBlbGVtZW50
IHRvIHJlcHJlc2VudAotICAgIC8vIHBvc2l0aW9ucyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBlbGVt
ZW50IGluIGRlcHJlY2F0ZWQgZWRpdGluZyBvZmZzZXRzLgotICAgIGlmIChlbGVtZW50KCkgJiYg
IShlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKmVsZW1lbnQoKSkgfHwgaXNSZW5kZXJlZFRhYmxlKGVs
ZW1lbnQoKSkpKSB7Ci0gICAgICAgIHJlY3Quc2V0WChyZWN0LngoKSArIGJvcmRlckxlZnQoKSAr
IHBhZGRpbmdMZWZ0KCkpOwotICAgICAgICByZWN0LnNldFkocmVjdC55KCkgKyBwYWRkaW5nVG9w
KCkgKyBib3JkZXJUb3AoKSk7Ci0gICAgfQotCi0gICAgaWYgKGNhcmV0UmVjdE1vZGUgPT0gQ2Fy
ZXRSZWN0TW9kZTo6RXhwYW5kVG9FbmRPZkxpbmUpCi0gICAgICAgIHJlY3Quc2hpZnRNYXhYRWRn
ZVRvKHgoKSArIHdpZHRoKCkpOwotCi0gICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyByZWN0IDogcmVjdC50cmFuc3Bvc2VkUmVjdCgpOwotfQotCiBWaXNpYmxlUG9zaXRpb24g
UmVuZGVyQm94Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29u
c3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50KQogewogICAgIC8vIG5vIGNoaWxk
cmVuLi4ucmV0dXJuIHRoaXMgcmVuZGVyIG9iamVjdCdzIGVsZW1lbnQsIGlmIHRoZXJlIGlzIG9u
ZSwgYW5kIG9mZnNldCAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggM2Nk
ODBiY2QwNzJkLi4xMDI1OTI1NDY1OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmgKQEAgLTQ5Nyw4ICs0OTcsNiBAQCBvdmVycmlkZTsKICAgICBib29sIGlzVW5zcGxpdHRhYmxl
Rm9yUGFnaW5hdGlvbigpIGNvbnN0OwogCiAgICAgYm9vbCBzaG91bGRUcmVhdENoaWxkQXNSZXBs
YWNlZEluVGFibGVDZWxscygpIGNvbnN0OwotICAgIAotICAgIExheW91dFJlY3QgbG9jYWxDYXJl
dFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiwgQ2FyZXRSZWN0TW9kZSkgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICB2aXJ0dWFsIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlwUmVjdChjb25zdCBM
YXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiA9IG51bGxwdHIs
IE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNp
emUsIFBhaW50UGhhc2UgPSBQYWludFBoYXNlOjpCbG9ja0JhY2tncm91bmQpIGNvbnN0OwogICAg
IHZpcnR1YWwgTGF5b3V0UmVjdCBvdmVyZmxvd0NsaXBSZWN0Rm9yQ2hpbGRMYXllcnMoY29uc3Qg
TGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQs
IE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QgeyByZXR1cm4g
b3ZlcmZsb3dDbGlwUmVjdChsb2NhdGlvbiwgZnJhZ21lbnQsIHJlbGV2YW5jeSk7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4
IGI5ODI3YzhhMTRkMi4uODM4MjU2YzExZWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTI2MjYsNzggKzI2MjYsNiBAQCB2
b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjbGVhckZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dCgp
CiAgICAgZmlyc3RMZXR0ZXJSZW1haW5pbmdUZXh0TWFwKCkucmVtb3ZlKHRoaXMpOwogfQogCi1M
YXlvdXRSZWN0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpsb2NhbENhcmV0UmVjdEZvckVtcHR5RWxl
bWVudChMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IHRleHRJbmRlbnRPZmZzZXQsIENhcmV0
UmVjdE1vZGUgY2FyZXRSZWN0TW9kZSkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWZpcnN0Q2hpbGQo
KSk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBkb2VzIG5vdCB0YWtlIGludG8gYWNjb3VudCBlaXRo
ZXIgOmZpcnN0LWxpbmUgb3IgOmZpcnN0LWxldHRlcgotICAgIC8vIEhvd2V2ZXIsIGFzIHNvb24g
YXMgc29tZSBjb250ZW50IGlzIGVudGVyZWQsIHRoZSBsaW5lIGJveGVzIHdpbGwgYmUKLSAgICAv
LyBjb25zdHJ1Y3RlZCBhbmQgdGhpcyBrbHVkZ2UgaXMgbm90IGNhbGxlZCBhbnkgbW9yZS4gU28g
b25seSB0aGUgY2FyZXQgc2l6ZQotICAgIC8vIG9mIGFuIGVtcHR5IDpmaXJzdC1saW5lJ2QgYmxv
Y2sgaXMgd3JvbmcuIEkgdGhpbmsgd2UgY2FuIGxpdmUgd2l0aCB0aGF0LgotICAgIGNvbnN0IFJl
bmRlclN0eWxlJiBjdXJyZW50U3R5bGUgPSBmaXJzdExpbmVTdHlsZSgpOwotCi0gICAgZW51bSBD
YXJldEFsaWdubWVudCB7IGFsaWduTGVmdCwgYWxpZ25SaWdodCwgYWxpZ25DZW50ZXIgfTsKLQot
ICAgIENhcmV0QWxpZ25tZW50IGFsaWdubWVudCA9IGFsaWduTGVmdDsKLQotICAgIHN3aXRjaCAo
Y3VycmVudFN0eWxlLnRleHRBbGlnbigpKSB7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpMZWZ0
OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVmdDoKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpDZW50ZXI6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpX
ZWJLaXRDZW50ZXI6Ci0gICAgICAgIGFsaWdubWVudCA9IGFsaWduQ2VudGVyOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlJpZ2h0OgotICAgIGNhc2UgVGV4dEFsaWdu
TW9kZTo6V2ViS2l0UmlnaHQ6Ci0gICAgICAgIGFsaWdubWVudCA9IGFsaWduUmlnaHQ7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6SnVzdGlmeToKLSAgICBjYXNlIFRl
eHRBbGlnbk1vZGU6OlN0YXJ0OgotICAgICAgICBpZiAoIWN1cnJlbnRTdHlsZS5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICBhbGlnbm1lbnQgPSBhbGlnblJpZ2h0OwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkVuZDoKLSAgICAgICAgaWYgKGN1
cnJlbnRTdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICBhbGlnbm1l
bnQgPSBhbGlnblJpZ2h0OwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBMYXlvdXRVbml0
IHggPSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwotICAgIExheW91dFVuaXQgbWF4WCA9
IHdpZHRoIC0gYm9yZGVyUmlnaHQoKSAtIHBhZGRpbmdSaWdodCgpOwotCi0gICAgc3dpdGNoIChh
bGlnbm1lbnQpIHsKLSAgICBjYXNlIGFsaWduTGVmdDoKLSAgICAgICAgaWYgKGN1cnJlbnRTdHls
ZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICB4ICs9IHRleHRJbmRlbnRP
ZmZzZXQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgYWxpZ25DZW50ZXI6Ci0gICAgICAgIHgg
PSAoeCArIG1heFgpIC8gMjsKLSAgICAgICAgaWYgKGN1cnJlbnRTdHlsZS5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICB4ICs9IHRleHRJbmRlbnRPZmZzZXQgLyAyOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB4IC09IHRleHRJbmRlbnRPZmZzZXQgLyAyOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIGFsaWduUmlnaHQ6Ci0gICAgICAgIHggPSBtYXhYIC0gY2FyZXRX
aWR0aDsKLSAgICAgICAgaWYgKCFjdXJyZW50U3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
KQotICAgICAgICAgICAgeCAtPSB0ZXh0SW5kZW50T2Zmc2V0OwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgeCA9IHN0ZDo6bWluKHgsIHN0ZDo6bWF4PExheW91dFVuaXQ+KG1heFggLSBjYXJl
dFdpZHRoLCAwKSk7Ci0KLSAgICBhdXRvIGxpbmVIZWlnaHQgPSB0aGlzLT5saW5lSGVpZ2h0KHRy
dWUsIGN1cnJlbnRTdHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gSG9yaXpvbnRhbExp
bmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcyk7Ci0gICAgYXV0
byBoZWlnaHQgPSBzdGQ6Om1pbihsaW5lSGVpZ2h0LCBMYXlvdXRVbml0IHsgY3VycmVudFN0eWxl
LmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCkgfSk7Ci0gICAgYXV0byB5ID0gcGFkZGluZ1RvcCgpICsg
Ym9yZGVyVG9wKCkgKyAobGluZUhlaWdodCA+IGhlaWdodCA/IChsaW5lSGVpZ2h0IC0gaGVpZ2h0
KSAvIDIgOiBMYXlvdXRVbml0IHsgfSk7Ci0KLSAgICBhdXRvIHJlY3QgPSBMYXlvdXRSZWN0KHgs
IHksIGNhcmV0V2lkdGgsIGhlaWdodCk7Ci0KLSAgICBpZiAoY2FyZXRSZWN0TW9kZSA9PSBDYXJl
dFJlY3RNb2RlOjpFeHBhbmRUb0VuZE9mTGluZSkKLSAgICAgICAgcmVjdC5zaGlmdE1heFhFZGdl
VG8od2lkdGgpOwotCi0gICAgcmV0dXJuIGN1cnJlbnRTdHlsZS5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpID8gcmVjdCA6IHJlY3QudHJhbnNwb3NlZFJlY3QoKTsKLX0KLQogYm9vbCBSZW5kZXJC
b3hNb2RlbE9iamVjdDo6c2hvdWxkQW50aWFsaWFzTGluZXMoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQogewogICAgIC8vIEZJWE1FOiBXZSBtYXkgd2FudCB0byBub3QgYW50aWFsaWFzIHdoZW4g
c2NhbGVkIGJ5IGFuIGludGVncmFsIHZhbHVlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAppbmRleCA0ZTVhYmE2ZDA0NzMuLmE4ZGRhYTkwOGI2
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmgKQEAgLTI2MCw4ICsyNjAsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICBJbnRlcnBvbGF0aW9uUXVh
bGl0eSBjaG9vc2VJbnRlcnBvbGF0aW9uUXVhbGl0eShHcmFwaGljc0NvbnRleHQmLCBJbWFnZSYs
IGNvbnN0IHZvaWQqLCBjb25zdCBMYXlvdXRTaXplJik7CiAKLSAgICBMYXlvdXRSZWN0IGxvY2Fs
Q2FyZXRSZWN0Rm9yRW1wdHlFbGVtZW50KExheW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQgdGV4
dEluZGVudE9mZnNldCwgQ2FyZXRSZWN0TW9kZSA9IENhcmV0UmVjdE1vZGU6Ok5vcm1hbCkgY29u
c3Q7Ci0KICAgICBzdGF0aWMgYm9vbCBzaG91bGRBbnRpYWxpYXNMaW5lcyhHcmFwaGljc0NvbnRl
eHQmKTsKIAogICAgIHN0YXRpYyB2b2lkIGNsaXBSb3VuZGVkSW5uZXJSZWN0KEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGNsaXBSZWN0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKaW5kZXggYmQ1MjVl
MDE4YmRjLi4xYWQxMjQwZGU1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuY3BwCkBAIC0yMjgsMjUgKzIyOCw2IEBAIHZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVB
bHdheXNDcmVhdGVMaW5lQm94ZXMoYm9vbCBmdWxsTGF5b3V0KQogICAgIH0KIH0KIAotTGF5b3V0
UmVjdCBSZW5kZXJJbmxpbmU6OmxvY2FsQ2FyZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNl
dCYsIENhcmV0UmVjdE1vZGUpIGNvbnN0Ci17Ci0gICAgaWYgKGZpcnN0Q2hpbGQoKSkgewotICAg
ICAgICAvLyBUaGlzIGNvbmRpdGlvbiBpcyBwb3NzaWJsZSBpZiB0aGUgUmVuZGVySW5saW5lIGlz
IGF0IGFuIGVkaXRpbmcgYm91bmRhcnksCi0gICAgICAgIC8vIGkuZS4gdGhlIFZpc2libGVQb3Np
dGlvbiBpczoKLSAgICAgICAgLy8gICA8UmVuZGVySW5saW5lIGVkaXRpbmdCb3VuZGFyeT10cnVl
Pnw8UmVuZGVyVGV4dD4gPC9SZW5kZXJUZXh0PjwvUmVuZGVySW5saW5lPgotICAgICAgICAvLyBG
SVhNRTogbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBtYWtlIHRoaXMgcmV0dXJuIGEgdmFsaWQg
cmVjdCwgbm90ZSB0aGF0Ci0gICAgICAgIC8vIHRoZXJlIGFyZSBubyBsaW5lIGJveGVzIGNyZWF0
ZWQgaW4gdGhlIGFib3ZlIGNhc2UuCi0gICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7Ci0gICAg
fQotCi0gICAgTGF5b3V0UmVjdCBjYXJldFJlY3QgPSBsb2NhbENhcmV0UmVjdEZvckVtcHR5RWxl
bWVudChob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpLCAwKTsKLQotICAgIGlmIChJ
bmxpbmVCb3gqIGZpcnN0Qm94ID0gZmlyc3RMaW5lQm94KCkpCi0gICAgICAgIGNhcmV0UmVjdC5t
b3ZlQnkoTGF5b3V0UG9pbnQoZmlyc3RCb3gtPnRvcExlZnQoKSkpOwotCi0gICAgcmV0dXJuIGNh
cmV0UmVjdDsKLX0KLQogdm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgbV9saW5lQm94ZXMu
cGFpbnQodGhpcywgcGFpbnRJbmZvLCBwYWludE9mZnNldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW5saW5lLmgKaW5kZXggMDc3NDU5OWUxZWQ1Li44Nzg4ZmZkZWYwNDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKQEAgLTg2LDggKzg2LDYgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0QWx3YXlzQ3JlYXRlTGluZUJveGVzKCkgeyBzZXRSZW5kZXJJbmxp
bmVBbHdheXNDcmVhdGVzTGluZUJveGVzKHRydWUpOyB9CiAgICAgdm9pZCB1cGRhdGVBbHdheXND
cmVhdGVMaW5lQm94ZXMoYm9vbCBmdWxsTGF5b3V0KTsKIAotICAgIExheW91dFJlY3QgbG9jYWxD
YXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiwgQ2FyZXRSZWN0TW9kZSkgY29uc3Qg
ZmluYWw7Ci0KICAgICBib29sIGhpdFRlc3RDdWxsZWRJbmxpbmUoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29u
dGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpOwogCiBwcm90ZWN0
ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuY3BwCmluZGV4
IGIzNmNjZjU1OTQ1Mi4uM2ZjMTRiMzQwOTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGluZUJyZWFrLmNwcApAQCAtMTU5LDE4ICsxNTksNiBAQCB2b2lkIFJlbmRlckxp
bmVCcmVhazo6c2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUgc3RhdGUpCiAgICAgbV9p
bmxpbmVCb3hXcmFwcGVyLT5yb290KCkuc2V0SGFzU2VsZWN0ZWRDaGlsZHJlbihzdGF0ZSAhPSBI
aWdobGlnaHRTdGF0ZTo6Tm9uZSk7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyTGluZUJyZWFrOjps
b2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmIHJ1bkFuZE9mZnNldCwgQ2Fy
ZXRSZWN0TW9kZSBjYXJldFJlY3RNb2RlKSBjb25zdAotewotICAgIEFTU0VSVCghcnVuQW5kT2Zm
c2V0Lm9mZnNldCk7Ci0gICAgQVNTRVJUKHJ1bkFuZE9mZnNldC5ydW4gPT0gTGF5b3V0SW50ZWdy
YXRpb246OnJ1bkZvcigqdGhpcykpOwotCi0gICAgaWYgKCFydW5BbmRPZmZzZXQucnVuKQotICAg
ICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwotCi0gICAgYXV0byBsaW5lID0gcnVuQW5kT2Zmc2V0
LnJ1bi5saW5lKCk7Ci0gICAgcmV0dXJuIGxpbmUtPmNvbnRhaW5pbmdCbG9jaygpLmNvbXB1dGVD
YXJldFJlY3QobGluZS0+c2VsZWN0aW9uUmVjdCgpLCBsaW5lLT5jb250ZW50TG9naWNhbExlZnQo
KSwgY2FyZXRXaWR0aCwgY2FyZXRSZWN0TW9kZSk7Ci19Ci0KIEludFJlY3QgUmVuZGVyTGluZUJy
ZWFrOjpsaW5lc0JvdW5kaW5nQm94KCkgY29uc3QKIHsKICAgICBhdXRvIHJ1biA9IExheW91dElu
dGVncmF0aW9uOjpydW5Gb3IoKnRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpbmVCcmVhay5oCmluZGV4IGNkMmEyZWJmMzk0My4uNGZmMmQxZWI4NjFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oCkBAIC02Niw3ICs2Niw2IEBAIHBy
aXZhdGU6CiAgICAgaW50IGNhcmV0TWluT2Zmc2V0KCkgY29uc3QgZmluYWw7CiAgICAgaW50IGNh
cmV0TWF4T2Zmc2V0KCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBjYW5CZVNlbGVjdGlvbkxlYWYo
KSBjb25zdCBmaW5hbDsKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KGNvbnN0IElubGlu
ZVJ1bkFuZE9mZnNldCYsIENhcmV0UmVjdE1vZGUpIGNvbnN0IGZpbmFsOwogICAgIHZvaWQgc2V0
U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUpIGZpbmFsOwogCiAgICAgTGF5b3V0VW5pdCBs
aW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9u
TW9kZSkgY29uc3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCmluZGV4IDE3ZmMzM2Q0MWUwNC4uOTZlYWY0YjkzNjgxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMTQwMCwxMSArMTQwMCw2IEBAIExheW91dFNp
emUgUmVuZGVyT2JqZWN0OjpvZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIoUmVuZGVyRWxlbWVu
dCYgY29udGFpbmVyKSBjCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotTGF5b3V0UmVjdCBSZW5k
ZXJPYmplY3Q6OmxvY2FsQ2FyZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYsIENhcmV0
UmVjdE1vZGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIExheW91dFJlY3QoKTsKLX0KLQogYm9vbCBS
ZW5kZXJPYmplY3Q6OmlzUm9vdGVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gaXNEZXNjZW5kYW50
T2YoJnZpZXcoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXgg
YjkxNTkyMmIyMWU5Li42NDU3OTE4ODFmY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgKQEAgLTY3Miw5ICs2NzIsNiBAQCBwdWJsaWM6CiAgICAgLy8gV2hldGhlciBv
ciBub3QgYSBnaXZlbiBibG9jayBuZWVkcyB0byBwYWludCBzZWxlY3Rpb24gZ2Fwcy4KICAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkUGFpbnRTZWxlY3Rpb25HYXBzKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KIAotICAgIC8vIFJldHVybnMgdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBjYXJl
dCB3aXRoaW4gdGhpcyByZW5kZXIgb2JqZWN0LgotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBsb2Nh
bENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmLCBDYXJldFJlY3RNb2RlID0gQ2Fy
ZXRSZWN0TW9kZTo6Tm9ybWFsKSBjb25zdDsKLQogICAgIC8vIFdoZW4gcGVyZm9ybWluZyBhIGds
b2JhbCBkb2N1bWVudCB0ZWFyLWRvd24sIG9yIHdoZW4gZ29pbmcgaW50byB0aGUgYmFjay9mb3J3
YXJkIGNhY2hlLCB0aGUgcmVuZGVyZXIgb2YgdGhlIGRvY3VtZW50IGlzIGNsZWFyZWQuCiAgICAg
Ym9vbCByZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdEVudW1zLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0RW51bXMuaAppbmRleCAwNmU3NzMzMjA4YWIuLjM5OWVi
ZWIxNWQ2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dEVudW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdEVudW1z
LmgKQEAgLTYxLDEwICs2MSw0IEBAIGVudW0gTWFwQ29vcmRpbmF0ZXNNb2RlIHsKIH07CiB0eXBl
ZGVmIHVuc2lnbmVkIE1hcENvb3JkaW5hdGVzRmxhZ3M7CiAKLWVudW0gY2xhc3MgQ2FyZXRSZWN0
TW9kZSB7Ci0gICAgTm9ybWFsLAotICAgIEV4cGFuZFRvRW5kT2ZMaW5lCi19OwotCi0KIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAppbmRleCA4NWUwODJhMGRhZjcuLjIx
MGVkMjhjZTllMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcApAQCAt
Njk5LDE4ICs2OTksNiBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dDo6cG9zaXRpb25Gb3JQ
b2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsIGNvbnN0IFJlbgogICAgIHJldHVybiBjcmVh
dGVWaXNpYmxlUG9zaXRpb24oMCwgQWZmaW5pdHk6OkRvd25zdHJlYW0pOwogfQogCi1MYXlvdXRS
ZWN0IFJlbmRlclRleHQ6OmxvY2FsQ2FyZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYg
cnVuQW5kT2Zmc2V0LCBDYXJldFJlY3RNb2RlIGNhcmV0UmVjdE1vZGUpIGNvbnN0Ci17Ci0gICAg
aWYgKCFydW5BbmRPZmZzZXQucnVuKQotICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwotCi0g
ICAgYXV0byYgdGV4dFJ1biA9IGRvd25jYXN0PExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRl
cmF0b3I+KHJ1bkFuZE9mZnNldC5ydW4pOwotICAgIGF1dG8gbGluZSA9IHRleHRSdW4ubGluZSgp
OwotCi0gICAgZmxvYXQgcG9zaXRpb24gPSB0ZXh0UnVuLT5wb3NpdGlvbkZvck9mZnNldChydW5B
bmRPZmZzZXQub2Zmc2V0KTsKLSAgICByZXR1cm4gbGluZS0+Y29udGFpbmluZ0Jsb2NrKCkuY29t
cHV0ZUNhcmV0UmVjdChsaW5lLT5zZWxlY3Rpb25SZWN0KCksIHBvc2l0aW9uLCBjYXJldFdpZHRo
LCBjYXJldFJlY3RNb2RlKTsKLX0KLQogQUxXQVlTX0lOTElORSBmbG9hdCBSZW5kZXJUZXh0Ojp3
aWR0aEZyb21DYWNoZShjb25zdCBGb250Q2FzY2FkZSYgZiwgdW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkIGxlbiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMs
IEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3csIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkg
Y29uc3QKIHsKICAgICBpZiAoc3R5bGUuaGFzVGV4dENvbWJpbmUoKSAmJiBpczxSZW5kZXJDb21i
aW5lVGV4dD4oKnRoaXMpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAppbmRl
eCBiNWQyODU4OWNlYWMuLjZlNGE3MWUxN2U2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5oCkBAIC0yMDMsNyArMjAzLDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0U2Vs
ZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUpIGZpbmFsOwogICAgIExheW91dFJlY3Qgc2VsZWN0
aW9uUmVjdEZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENv
bnRhaW5lciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCA9IHRydWUpIGZpbmFsOwotICAgIExh
eW91dFJlY3QgbG9jYWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiwgQ2FyZXRS
ZWN0TW9kZSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgTGF5b3V0UmVjdCBjbGlwcGVkT3ZlcmZsb3dS
ZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyKSBjb25zdCBmaW5hbDsKIAogICAgIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0
aHMoZmxvYXQgbGVhZFdpZHRoLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiYgZmFsbGJhY2tGb250cywg
R2x5cGhPdmVyZmxvdyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKaW5kZXggZmJjYThmMzJjNGZhLi5mZGZiOTU4ZTc1ODQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5l
VGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxp
bmVUZXh0LmNwcApAQCAtMTE5LDMwICsxMTksNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW5saW5lVGV4
dEJveD4gUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y3JlYXRlVGV4dEJveCgpCiAgICAgcmV0dXJuIGJv
eDsgCiB9CiAKLUxheW91dFJlY3QgUmVuZGVyU1ZHSW5saW5lVGV4dDo6bG9jYWxDYXJldFJlY3Qo
Y29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiBydW5BbmRPZmZzZXQsIENhcmV0UmVjdE1vZGUpIGNv
bnN0Ci17Ci0gICAgYXV0byogYm94ID0gcnVuQW5kT2Zmc2V0LnJ1biA/IHJ1bkFuZE9mZnNldC5y
dW4tPmxlZ2FjeUlubGluZUJveCgpIDogbnVsbHB0cjsKLSAgICBhdXRvIGNhcmV0T2Zmc2V0ID0g
cnVuQW5kT2Zmc2V0Lm9mZnNldDsKLQotICAgIGlmICghaXM8SW5saW5lVGV4dEJveD4oYm94KSkK
LSAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKLQotICAgIGF1dG8mIHRleHRCb3ggPSBkb3du
Y2FzdDxJbmxpbmVUZXh0Qm94PigqYm94KTsKLSAgICBpZiAoY2FyZXRPZmZzZXQgPCB0ZXh0Qm94
LnN0YXJ0KCkgfHwgY2FyZXRPZmZzZXQgPiB0ZXh0Qm94LnN0YXJ0KCkgKyB0ZXh0Qm94Lmxlbigp
KQotICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwotCi0gICAgLy8gVXNlIHRoZSBlZGdlIG9m
IHRoZSBzZWxlY3Rpb24gcmVjdCB0byBkZXRlcm1pbmUgdGhlIGNhcmV0IHJlY3QuCi0gICAgaWYg
KGNhcmV0T2Zmc2V0IDwgdGV4dEJveC5zdGFydCgpICsgdGV4dEJveC5sZW4oKSkgewotICAgICAg
ICBMYXlvdXRSZWN0IHJlY3QgPSB0ZXh0Qm94LmxvY2FsU2VsZWN0aW9uUmVjdChjYXJldE9mZnNl
dCwgY2FyZXRPZmZzZXQgKyAxKTsKLSAgICAgICAgTGF5b3V0VW5pdCB4ID0gdGV4dEJveC5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyByZWN0LngoKSA6IHJlY3QubWF4WCgpOwotICAgICAgICBy
ZXR1cm4gTGF5b3V0UmVjdCh4LCByZWN0LnkoKSwgY2FyZXRXaWR0aCwgcmVjdC5oZWlnaHQoKSk7
Ci0gICAgfQotCi0gICAgTGF5b3V0UmVjdCByZWN0ID0gdGV4dEJveC5sb2NhbFNlbGVjdGlvblJl
Y3QoY2FyZXRPZmZzZXQgLSAxLCBjYXJldE9mZnNldCk7Ci0gICAgTGF5b3V0VW5pdCB4ID0gdGV4
dEJveC5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyByZWN0Lm1heFgoKSA6IHJlY3QueCgpOwot
ICAgIHJldHVybiBMYXlvdXRSZWN0KHgsIHJlY3QueSgpLCBjYXJldFdpZHRoLCByZWN0LmhlaWdo
dCgpKTsKLX0KLQogRmxvYXRSZWN0IFJlbmRlclNWR0lubGluZVRleHQ6OmZsb2F0TGluZXNCb3Vu
ZGluZ0JveCgpIGNvbnN0CiB7CiAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaAppbmRleCBi
YjJlYWZlY2U1ZTcuLjI4ZTk1YTBiYjRiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgKQEAgLTYyLDcgKzYyLDYgQEAgcHJpdmF0
ZToKICAgICBib29sIGlzU1ZHSW5saW5lVGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KIAogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91
dFBvaW50JiwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKSBvdmVycmlkZTsKLSAgICBM
YXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYsIENhcmV0
UmVjdE1vZGUpIGNvbnN0IG92ZXJyaWRlOwogICAgIEludFJlY3QgbGluZXNCb3VuZGluZ0JveCgp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVUZXh0Qm94PiBjcmVh
dGVUZXh0Qm94KCkgb3ZlcnJpZGU7CiAK
</data>
<flag name="commit-queue"
          id="431953"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414941</attachid>
            <date>2020-11-27 06:46:36 -0800</date>
            <delta_ts>2020-11-27 09:01:59 -0800</delta_ts>
            <desc>patch</desc>
            <filename>caret-rect-out-from-renderobject-2.patch</filename>
            <type>text/plain</type>
            <size>48372</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzMjNhYjZiNGU2YzQuLmU1MWExMmIwMDhmMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDYxIEBACisyMDIwLTExLTI3ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBNb3ZlIGNhcmV0IHJlY3QgY29tcHV0YXRpb24gb3V0IG9mIHJlbmRlciB0
cmVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTkz
MDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWR1
Y2UgY29kZSByYW5kb21seSBzcHJpbmtsZWQgb24gcmVuZGVyZXJzIGJ5IG1vdmluZyBpdCBpbnRv
IHN0YW5kYWxvbmUgZnVuY3Rpb25zLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hl
Ojpsb2NhbENhcmV0UmVjdEZvckNoYXJhY3Rlck9mZnNldCk6CisgICAgICAgICogZWRpdGluZy9S
ZW5kZXJlZFBvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmVkUG9zaXRpb246
OmFic29sdXRlUmVjdCBjb25zdCk6CisgICAgICAgICogZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9u
Lmg6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VmlzaWJsZVBvc2l0aW9uOjpsb2NhbENhcmV0UmVjdCBjb25zdCk6CisgICAgICAgICog
cmVuZGVyaW5nL0NhcmV0UmVjdENvbXB1dGF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpjb21wdXRlQ2FyZXRSZWN0Rm9yRW1wdHlFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbXB1dGVDYXJldFJlY3RGb3JMaW5lUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29t
cHV0ZUNhcmV0UmVjdEZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUNhcmV0UmVj
dEZvckxpbmVCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQ2FyZXRSZWN0Rm9yU1ZH
SW5saW5lVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQ2FyZXRSZWN0Rm9yQm94KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVDYXJldFJlY3RGb3JCbG9jayk6CisgICAgICAgIChX
ZWJDb3JlOjpjb21wdXRlQ2FyZXRSZWN0Rm9ySW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmNv
bXB1dGVMb2NhbENhcmV0UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL0NhcmV0UmVjdENvbXB1
dGF0aW9uLmg6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9jYWxDYXJldFJlY3QgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tG
bG93Ojpjb21wdXRlQ2FyZXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQmxvY2tGbG93Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eE1vZGVsT2JqZWN0Ojpsb2NhbENhcmV0UmVjdEZvckVtcHR5RWxlbWVudCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJ
bmxpbmU6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVySW5saW5lLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaW5lQnJlYWs6OmxvY2FsQ2FyZXRSZWN0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVj
dEVudW1zLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dDo6bG9jYWxDYXJldFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0lubGlu
ZVRleHQ6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaDoKKwogMjAyMC0xMS0yMiAgQW50dGkgS29pdmlz
dG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSW50ZWdyYXRpb25dIENvbnZl
cnQgc29tZSByZW1haW5pbmcgSW5saW5lQm94IGFjY2VzcyB0byB1c2UgaW5saW5lIGl0ZXJhdG9y
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CmluZGV4IDcyNjI4OTFlY2M2My4uNTEwM2YzYzM1ODJiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dApAQCAtMjE1Myw2ICsyMTUzLDcgQEAgcmVuZGVyaW5nL0JpZGlSdW4uY3BwCiByZW5kZXJp
bmcvQm9yZGVyRWRnZS5jcHAKIHJlbmRlcmluZy9CcmVha0xpbmVzLmNwcAogcmVuZGVyaW5nL0NT
U0ZpbHRlci5jcHAKK3JlbmRlcmluZy9DYXJldFJlY3RDb21wdXRhdGlvbi5jcHAKIHJlbmRlcmlu
Zy9DbGlwUmVjdC5jcHAKIHJlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5jcHAKIHJlbmRlcmlu
Zy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDkxZDc0Yzc0NTIyNS4uMjJiNWFkYjA2
MDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC01MTYwLDYgKzUxNjAsNyBAQAogCQlFNEU4QjRFQzIxNkI3OUU1MDBCODgzNEQg
LyogU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RThCNEVBMjE2Qjc5RTUwMEI4ODM0RCAvKiBTeXN0ZW1G
b250RGF0YWJhc2VDb3JlVGV4dC5oICovOyB9OwogCQlFNEU4QjRGNTIxNkI5NTY1MDBCODgzNEQg
LyogRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTRFOEI0RjIyMTZCOEI2MDAwQjg4MzREIC8qIEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlFNEU5NEQ2MTIyRkYxNThBMDBERDE5MUYgLyogQ29tcGxleExpbmVMYXlvdXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QTFBQzc4MjJG
QUZENTAwMDE3Qjc1QiAvKiBDb21wbGV4TGluZUxheW91dC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUU0RjBCRTMxMjU3MTJGNkUwMDlFNzQzMSAv
KiBDYXJldFJlY3RDb21wdXRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTRGMEJFMkUyNTcxMEE3NTAwOUU3NDMxIC8qIENhcmV0UmVjdENvbXB1
dGF0aW9uLmggKi87IH07CiAJCUU0RjlFRUYzMTU2REEwMDcwMEQyM0U3RSAvKiBTdHlsZVNoZWV0
Q29udGVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0RjlFRUYxMTU2RDg0QzQwMEQyM0U3RSAvKiBTdHlsZVNoZWV0Q29udGVudHMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNTA2MjA4NDI1NDA5
MTlDMDBDNDMwOTEgLyogQ29udGFjdHNSZXF1ZXN0RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTUwNjIwODMyNTQwOTE5QjAwQzQzMDkxIC8qIENv
bnRhY3RzUmVxdWVzdERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlFNTE2Njk5MTIwRkY5OTE4MDA5RDJDMjcgLyogTGlzdEJ1dHRvbkFycm93
QDJ4LnBuZyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTUxNjY5OEYyMEZGOTkxNjAwOUQyQzI3IC8qIExpc3RCdXR0b25BcnJvd0AyeC5wbmcgKi87IH07
CkBAIC0xNjMzNSw2ICsxNjMzNiw4IEBACiAJCUU0RThCNEVEMjE2Qjc5RjQwMEI4ODM0RCAvKiBT
eXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUU0RThCNEYwMjE2QjhCNUYwMEI4ODM0RCAvKiBGb250Q2FzY2FkZURl
c2NyaXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEU4
QjRGMjIxNkI4QjYwMDBCODgzNEQgLyogRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250Q2FzY2FkZURlc2NyaXB0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0RjBCRTJFMjU3MTBBNzUwMDlFNzQzMSAvKiBDYXJl
dFJlY3RDb21wdXRhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYXJl
dFJlY3RDb21wdXRhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEYwQkUz
MDI1NzEwQTc2MDA5RTc0MzEgLyogQ2FyZXRSZWN0Q29tcHV0YXRpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FyZXRSZWN0Q29tcHV0YXRpb24uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEY5RUVGMDE1NkQ4NEM0MDBEMjNFN0UgLyogU3R5
bGVTaGVldENvbnRlbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFN0eWxlU2hlZXRDb250ZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
RjlFRUYxMTU2RDg0QzQwMEQyM0U3RSAvKiBTdHlsZVNoZWV0Q29udGVudHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVTaGVldENvbnRlbnRzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUU0RkI0QjM1MjM5QkVCMTAwMDNDMzM2QSAvKiBMYXlvdXRJbnRl
Z3JhdGlvbklubGluZUNvbnRlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0SW50ZWdy
YXRpb25JbmxpbmVDb250ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4
MDIyLDcgKzE4MDI1LDYgQEAKIAkJCQlBMUNDNTY0QTFGNDYxM0JCMDBBNDU1NUIgLyogUGF5bWVu
dFJlcXVlc3QgKi8sCiAJCQkJMUQwMDI2OUEyMzc0QjlGODAwQ0E2Q0RGIC8qIFBpY3R1cmVJblBp
Y3R1cmUgKi8sCiAJCQkJQTlEMjQ3RjkwRDc1N0U0MTAwRkRGOTU5IC8qIFBsdWdpbnMgKi8sCi0J
CQkJODlGNjBCMTcxNTdGNkEwMjAwNzVFMTU3IC8qIFF1b3RhICovLAogCQkJCUJDOTg1NDQ2MENE
M0RBNUYwMDA2OUJDMSAvKiBSYW5nZXMgKi8sCiAJCQkJQ0Q4QzZDMjQyMkZEREE2NDAwQTcyMEFC
IC8qIFJlbW90ZVBsYXliYWNrICovLAogCQkJCTUxODJDMjRDMUYzMTQyMDkwMDU5QkE3QyAvKiBT
ZXJ2aWNlV29ya2VycyAqLywKQEAgLTI5NDQyLDYgKzI5NDQ0LDggQEAKIAkJCQk1ODk1NTZFQzE4
RDRBNDQwMDA3NjRCMDMgLyogQm9yZGVyRWRnZS5oICovLAogCQkJCUJDRUE0ODE1MDk3RDkzMDIw
MDk0QzlFNCAvKiBCcmVha0xpbmVzLmNwcCAqLywKIAkJCQlCQ0VBNDgxNjA5N0Q5MzAyMDA5NEM5
RTQgLyogQnJlYWtMaW5lcy5oICovLAorCQkJCUU0RjBCRTMwMjU3MTBBNzYwMDlFNzQzMSAvKiBD
YXJldFJlY3RDb21wdXRhdGlvbi5jcHAgKi8sCisJCQkJRTRGMEJFMkUyNTcxMEE3NTAwOUU3NDMx
IC8qIENhcmV0UmVjdENvbXB1dGF0aW9uLmggKi8sCiAJCQkJRkI5MkRGNDkxNUZFRDA4NzAwOTk0
NDMzIC8qIENsaXBQYXRoT3BlcmF0aW9uLmggKi8sCiAJCQkJNTgwMzcxNUYxQTY2RjAwQTAwQkFG
NTE5IC8qIENsaXBSZWN0LmNwcCAqLywKIAkJCQk1ODAzNzE2MDFBNjZGMDBBMDBCQUY1MTkgLyog
Q2xpcFJlY3QuaCAqLywKQEAgLTM1MTA5LDYgKzM1MTEzLDcgQEAKIAkJCQlBMEVFMERGODE0NEY4
MjU1MDBGODBCMEQgLyogV2ViR0xEZWJ1Z1NoYWRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTZF
M0ZBRThGMTQ3MzNGREIwMEU0MjMwNyAvKiBXZWJHTERlcHRoVGV4dHVyZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUIzMDY5NUUxOEIzRDM0NTAwOTlENUU4IC8qIFdlYkdMRHJhd0J1ZmZlcnMuaCBp
biBIZWFkZXJzICovLAorCQkJCUU0RjBCRTMxMjU3MTJGNkUwMDlFNzQzMSAvKiBDYXJldFJlY3RD
b21wdXRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkVCRjBFNTUxMkE4OTI5ODAwREIxNzA5
IC8qIFdlYkdMRXh0ZW5zaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlDRjEwNDJEMzJG
MDAwOUQ0NDcgLyogV2ViR0xGcmFtZWJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlGRkJG
M0YxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIuaCBpbiBIZWFkZXJzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggNzY5ZDFl
OWZkZTFkLi5mZmIyNjA1OWE3M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcApAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgIkFjY2Vzc2li
aWxpdHlUYWJsZVJvdy5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlUcmVlLmgiCiAjaW5jbHVk
ZSAiQWNjZXNzaWJpbGl0eVRyZWVJdGVtLmgiCisjaW5jbHVkZSAiQ2FyZXRSZWN0Q29tcHV0YXRp
b24uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVkaXRpbmcuaCIKICNpbmNs
dWRlICJFZGl0b3IuaCIKQEAgLTI5MDIsNyArMjkwMyw3IEBAIExheW91dFJlY3QgQVhPYmplY3RD
YWNoZTo6bG9jYWxDYXJldFJlY3RGb3JDaGFyYWN0ZXJPZmZzZXQoUmVuZGVyT2JqZWN0KiYgcmVu
ZGVyCiAgICAgaWYgKGlzPFJlbmRlckxpbmVCcmVhaz4ocmVuZGVyZXIpICYmIExheW91dEludGVn
cmF0aW9uOjpydW5Gb3IoZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPigqcmVuZGVyZXIpKSAhPSBy
dW5BbmRPZmZzZXQucnVuKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgcmV0dXJu
IHJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChydW5BbmRPZmZzZXQpOworICAgIHJldHVybiBjb21w
dXRlTG9jYWxDYXJldFJlY3QoKnJlbmRlcmVyLCBydW5BbmRPZmZzZXQpOwogfQogCiBJbnRSZWN0
IEFYT2JqZWN0Q2FjaGU6OmFic29sdXRlQ2FyZXRCb3VuZHNGb3JDaGFyYWN0ZXJPZmZzZXQoY29u
c3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9SZW5kZXJlZFBvc2l0aW9uLmNwcAppbmRleCAyNmQ3YTg1M2Y0MTAuLmRhYWRkZTk3Y2Vh
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uY3BwCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyZWRQb3Np
dGlvbi5oIgogCisjaW5jbHVkZSAiQ2FyZXRSZWN0Q29tcHV0YXRpb24uaCIKICNpbmNsdWRlICJJ
bmxpbmVSdW5BbmRPZmZzZXQuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVk
ZSAiVmlzaWJsZVBvc2l0aW9uLmgiCkBAIC0yMjYsNyArMjI3LDcgQEAgSW50UmVjdCBSZW5kZXJl
ZFBvc2l0aW9uOjphYnNvbHV0ZVJlY3QoQ2FyZXRSZWN0TW9kZSBjYXJldFJlY3RNb2RlKSBjb25z
dAogICAgIGlmIChpc051bGwoKSkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAotICAgIElu
dFJlY3QgbG9jYWxSZWN0ID0gc25hcHBlZEludFJlY3QobV9yZW5kZXJlci0+bG9jYWxDYXJldFJl
Y3QoeyBtX3J1biwgbV9vZmZzZXQgfSwgY2FyZXRSZWN0TW9kZSkpOworICAgIEludFJlY3QgbG9j
YWxSZWN0ID0gc25hcHBlZEludFJlY3QoY29tcHV0ZUxvY2FsQ2FyZXRSZWN0KCptX3JlbmRlcmVy
LCB7IG1fcnVuLCBtX29mZnNldCB9LCBjYXJldFJlY3RNb2RlKSk7CiAgICAgcmV0dXJuIGxvY2Fs
UmVjdCA9PSBJbnRSZWN0KCkgPyBJbnRSZWN0KCkgOiBtX3JlbmRlcmVyLT5sb2NhbFRvQWJzb2x1
dGVRdWFkKEZsb2F0UmVjdChsb2NhbFJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5oCmluZGV4IDM3ZjliMWNl
NjhkYS4uYWNhYzgwZTZjZWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
bmRlcmVkUG9zaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9z
aXRpb24uaApAQCAtMzAsNiArMzAsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNh
cmV0UmVjdENvbXB1dGF0aW9uLmgiCiAjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRl
cmF0b3IuaCIKICNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiVGV4dEFmZmluaXR5LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVQb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3Np
dGlvbi5jcHAKaW5kZXggNTlhNWZkNjc5ZGNjLi5lMGYxMzQ4ODY2MTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNs
dWRlICJWaXNpYmxlUG9zaXRpb24uaCIKIAogI2luY2x1ZGUgIkJvdW5kYXJ5UG9pbnQuaCIKKyNp
bmNsdWRlICJDYXJldFJlY3RDb21wdXRhdGlvbi5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRWRpdGluZy5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgpAQCAtNjQzLDcgKzY0
NCw3IEBAIGF1dG8gVmlzaWJsZVBvc2l0aW9uOjpsb2NhbENhcmV0UmVjdCgpIGNvbnN0IC0+IExv
Y2FsQ2FyZXRSZWN0CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIHJldHVybiB7IHJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChydW5BbmRPZmZzZXQpLCBjb25z
dF9jYXN0PFJlbmRlck9iamVjdCo+KHJlbmRlcmVyKSB9OworICAgIHJldHVybiB7IGNvbXB1dGVM
b2NhbENhcmV0UmVjdCgqcmVuZGVyZXIsIHJ1bkFuZE9mZnNldCksIGNvbnN0X2Nhc3Q8UmVuZGVy
T2JqZWN0Kj4ocmVuZGVyZXIpIH07CiB9CiAKIEludFJlY3QgVmlzaWJsZVBvc2l0aW9uOjphYnNv
bHV0ZUNhcmV0Qm91bmRzKGJvb2wqIGluc2lkZUZpeGVkKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NhcmV0UmVjdENvbXB1dGF0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9DYXJldFJlY3RDb21wdXRhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kMzcyNjcwZWMxMjIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ2FyZXRSZWN0Q29tcHV0YXRpb24uY3BwCkBAIC0w
LDAgKzEsMzE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkNhcmV0UmVjdENvbXB1dGF0aW9uLmgiCisKKyNpbmNsdWRlICJFZGl0aW5nLmgiCisjaW5jbHVk
ZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJMYXlvdXRJbnRl
Z3JhdGlvblJ1bkl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCisjaW5j
bHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCisjaW5j
bHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgTGF5b3V0UmVjdCBjb21wdXRlQ2FyZXRSZWN0
Rm9yRW1wdHlFbGVtZW50KGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiByZW5kZXJlciwgTGF5
b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCB0ZXh0SW5kZW50T2Zmc2V0LCBDYXJldFJlY3RNb2Rl
IGNhcmV0UmVjdE1vZGUpCit7CisgICAgQVNTRVJUKCFyZW5kZXJlci5maXJzdENoaWxkKCkpOwor
CisgICAgLy8gRklYTUU6IFRoaXMgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgZWl0aGVyIDpm
aXJzdC1saW5lIG9yIDpmaXJzdC1sZXR0ZXIKKyAgICAvLyBIb3dldmVyLCBhcyBzb29uIGFzIHNv
bWUgY29udGVudCBpcyBlbnRlcmVkLCB0aGUgbGluZSBib3hlcyB3aWxsIGJlCisgICAgLy8gY29u
c3RydWN0ZWQgYW5kIHRoaXMga2x1ZGdlIGlzIG5vdCBjYWxsZWQgYW55IG1vcmUuIFNvIG9ubHkg
dGhlIGNhcmV0IHNpemUKKyAgICAvLyBvZiBhbiBlbXB0eSA6Zmlyc3QtbGluZSdkIGJsb2NrIGlz
IHdyb25nLiBJIHRoaW5rIHdlIGNhbiBsaXZlIHdpdGggdGhhdC4KKyAgICBjb25zdCBSZW5kZXJT
dHlsZSYgY3VycmVudFN0eWxlID0gcmVuZGVyZXIuZmlyc3RMaW5lU3R5bGUoKTsKKworICAgIGVu
dW0gQ2FyZXRBbGlnbm1lbnQgeyBBbGlnbkxlZnQsIEFsaWduUmlnaHQsIEFsaWduQ2VudGVyIH07
CisKKyAgICBDYXJldEFsaWdubWVudCBhbGlnbm1lbnQgPSBBbGlnbkxlZnQ7CisKKyAgICBzd2l0
Y2ggKGN1cnJlbnRTdHlsZS50ZXh0QWxpZ24oKSkgeworICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6
TGVmdDoKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExlZnQ6CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Q2VudGVyOgorICAgIGNhc2UgVGV4dEFsaWduTW9k
ZTo6V2ViS2l0Q2VudGVyOgorICAgICAgICBhbGlnbm1lbnQgPSBBbGlnbkNlbnRlcjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKKyAgICBjYXNlIFRleHRB
bGlnbk1vZGU6OldlYktpdFJpZ2h0OgorICAgICAgICBhbGlnbm1lbnQgPSBBbGlnblJpZ2h0Owor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6CisgICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKKyAgICAgICAgaWYgKCFjdXJyZW50U3R5bGUuaXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpKQorICAgICAgICAgICAgYWxpZ25tZW50ID0gQWxpZ25SaWdodDsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6CisgICAgICAgIGlm
IChjdXJyZW50U3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQorICAgICAgICAgICAgYWxp
Z25tZW50ID0gQWxpZ25SaWdodDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgTGF5b3V0
VW5pdCB4ID0gcmVuZGVyZXIuYm9yZGVyTGVmdCgpICsgcmVuZGVyZXIucGFkZGluZ0xlZnQoKTsK
KyAgICBMYXlvdXRVbml0IG1heFggPSB3aWR0aCAtIHJlbmRlcmVyLmJvcmRlclJpZ2h0KCkgLSBy
ZW5kZXJlci5wYWRkaW5nUmlnaHQoKTsKKworICAgIHN3aXRjaCAoYWxpZ25tZW50KSB7CisgICAg
Y2FzZSBBbGlnbkxlZnQ6CisgICAgICAgIGlmIChjdXJyZW50U3R5bGUuaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpKQorICAgICAgICAgICAgeCArPSB0ZXh0SW5kZW50T2Zmc2V0OworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFsaWduQ2VudGVyOgorICAgICAgICB4ID0gKHggKyBtYXhYKSAvIDI7
CisgICAgICAgIGlmIChjdXJyZW50U3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQorICAg
ICAgICAgICAgeCArPSB0ZXh0SW5kZW50T2Zmc2V0IC8gMjsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeCAtPSB0ZXh0SW5kZW50T2Zmc2V0IC8gMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBbGlnblJpZ2h0OgorICAgICAgICB4ID0gbWF4WCAtIGNhcmV0V2lkdGg7CisgICAgICAgIGlm
ICghY3VycmVudFN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKKyAgICAgICAgICAgIHgg
LT0gdGV4dEluZGVudE9mZnNldDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHggPSBzdGQ6
Om1pbih4LCBzdGQ6Om1heDxMYXlvdXRVbml0PihtYXhYIC0gY2FyZXRXaWR0aCwgMCkpOworCisg
ICAgYXV0byBsaW5lSGVpZ2h0ID0gcmVuZGVyZXIubGluZUhlaWdodCh0cnVlLCBjdXJyZW50U3R5
bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxM
aW5lLCBQb3NpdGlvbk9mSW50ZXJpb3JMaW5lQm94ZXMpOworICAgIGF1dG8gaGVpZ2h0ID0gc3Rk
OjptaW4obGluZUhlaWdodCwgTGF5b3V0VW5pdCB7IGN1cnJlbnRTdHlsZS5mb250TWV0cmljcygp
LmhlaWdodCgpIH0pOworICAgIGF1dG8geSA9IHJlbmRlcmVyLnBhZGRpbmdUb3AoKSArIHJlbmRl
cmVyLmJvcmRlclRvcCgpICsgKGxpbmVIZWlnaHQgPiBoZWlnaHQgPyAobGluZUhlaWdodCAtIGhl
aWdodCkgLyAyIDogTGF5b3V0VW5pdCB7IH0pOworCisgICAgYXV0byByZWN0ID0gTGF5b3V0UmVj
dCh4LCB5LCBjYXJldFdpZHRoLCBoZWlnaHQpOworCisgICAgaWYgKGNhcmV0UmVjdE1vZGUgPT0g
Q2FyZXRSZWN0TW9kZTo6RXhwYW5kVG9FbmRPZkxpbmUpCisgICAgICAgIHJlY3Quc2hpZnRNYXhY
RWRnZVRvKHdpZHRoKTsKKworICAgIHJldHVybiBjdXJyZW50U3R5bGUuaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IHJlY3QgOiByZWN0LnRyYW5zcG9zZWRSZWN0KCk7Cit9CisKK3N0YXRpYyBM
YXlvdXRSZWN0IGNvbXB1dGVDYXJldFJlY3RGb3JMaW5lUG9zaXRpb24oY29uc3QgTGF5b3V0SW50
ZWdyYXRpb246OkxpbmVJdGVyYXRvciYgbGluZSwgZmxvYXQgbG9naWNhbExlZnRQb3NpdGlvbiwg
Q2FyZXRSZWN0TW9kZSBjYXJldFJlY3RNb2RlKQoreworICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9j
ayA9IGxpbmUtPmNvbnRhaW5pbmdCbG9jaygpOworICAgIGF1dG8gbGluZVNlbGVjdGlvblJlY3Qg
PSBsaW5lLT5zZWxlY3Rpb25SZWN0KCk7CisKKyAgICBpbnQgaGVpZ2h0ID0gbGluZVNlbGVjdGlv
blJlY3QuaGVpZ2h0KCk7CisgICAgaW50IHRvcCA9IGxpbmVTZWxlY3Rpb25SZWN0LnkoKTsKKwor
ICAgIC8vIERpc3RyaWJ1dGUgdGhlIGNhcmV0J3Mgd2lkdGggdG8gZWl0aGVyIHNpZGUgb2YgdGhl
IG9mZnNldC4KKyAgICBmbG9hdCBsZWZ0ID0gbG9naWNhbExlZnRQb3NpdGlvbjsKKyAgICBpbnQg
Y2FyZXRXaWR0aExlZnRPZk9mZnNldCA9IGNhcmV0V2lkdGggLyAyOworICAgIGxlZnQgLT0gY2Fy
ZXRXaWR0aExlZnRPZk9mZnNldDsKKyAgICBpbnQgY2FyZXRXaWR0aFJpZ2h0T2ZPZmZzZXQgPSBj
YXJldFdpZHRoIC0gY2FyZXRXaWR0aExlZnRPZk9mZnNldDsKKyAgICBsZWZ0ID0gcm91bmRmKGxl
ZnQpOworCisgICAgZmxvYXQgbGluZUxlZnQgPSBsaW5lU2VsZWN0aW9uUmVjdC54KCk7CisgICAg
ZmxvYXQgbGluZVJpZ2h0ID0gbGluZVNlbGVjdGlvblJlY3QubWF4WCgpOworCisgICAgYm9vbCBy
aWdodEFsaWduZWQgPSBmYWxzZTsKKyAgICBzd2l0Y2ggKGNvbnRhaW5pbmdCbG9jay5zdHlsZSgp
LnRleHRBbGlnbigpKSB7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKKyAgICBjYXNl
IFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0OgorICAgICAgICByaWdodEFsaWduZWQgPSB0cnVl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkxlZnQ6CisgICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Q2Vu
dGVyOgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVyOgorICAgICAgICBicmVh
azsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6CisgICAgY2FzZSBUZXh0QWxpZ25N
b2RlOjpTdGFydDoKKyAgICAgICAgcmlnaHRBbGlnbmVkID0gIWNvbnRhaW5pbmdCbG9jay5zdHls
ZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBU
ZXh0QWxpZ25Nb2RlOjpFbmQ6CisgICAgICAgIHJpZ2h0QWxpZ25lZCA9IGNvbnRhaW5pbmdCbG9j
ay5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgZmxvYXQgbGVmdEVkZ2UgPSBzdGQ6Om1pbjxmbG9hdD4oMCwgbGluZUxlZnQpOwor
ICAgIGZsb2F0IHJpZ2h0RWRnZSA9IHN0ZDo6bWF4PGZsb2F0Pihjb250YWluaW5nQmxvY2subG9n
aWNhbFdpZHRoKCksIGxpbmVSaWdodCk7CisKKyAgICBpZiAocmlnaHRBbGlnbmVkKSB7CisgICAg
ICAgIGxlZnQgPSBzdGQ6Om1heChsZWZ0LCBsZWZ0RWRnZSk7CisgICAgICAgIGxlZnQgPSBzdGQ6
Om1pbihsZWZ0LCBsaW5lUmlnaHQgLSBjYXJldFdpZHRoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBsZWZ0ID0gc3RkOjptaW4obGVmdCwgcmlnaHRFZGdlIC0gY2FyZXRXaWR0aFJpZ2h0T2ZPZmZz
ZXQpOworICAgICAgICBsZWZ0ID0gc3RkOjptYXgobGVmdCwgbGluZUxlZnQpOworICAgIH0KKwor
ICAgIGF1dG8gcmVjdCA9IEludFJlY3QobGVmdCwgdG9wLCBjYXJldFdpZHRoLCBoZWlnaHQpOwor
CisgICAgaWYgKGNhcmV0UmVjdE1vZGUgPT0gQ2FyZXRSZWN0TW9kZTo6RXhwYW5kVG9FbmRPZkxp
bmUpCisgICAgICAgIHJlY3Quc2hpZnRNYXhYRWRnZVRvKGxpbmVSaWdodCk7CisKKyAgICByZXR1
cm4gY29udGFpbmluZ0Jsb2NrLnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJl
Y3QgOiByZWN0LnRyYW5zcG9zZWRSZWN0KCk7Cit9CisKK3N0YXRpYyBMYXlvdXRSZWN0IGNvbXB1
dGVDYXJldFJlY3RGb3JUZXh0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYgcnVuQW5kT2Zmc2V0
LCBDYXJldFJlY3RNb2RlIGNhcmV0UmVjdE1vZGUpCit7CisgICAgaWYgKCFydW5BbmRPZmZzZXQu
cnVuKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byYgdGV4dFJ1biA9IGRvd25jYXN0
PExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3I+KHJ1bkFuZE9mZnNldC5ydW4pOwor
ICAgIGF1dG8gbGluZSA9IHRleHRSdW4ubGluZSgpOworCisgICAgZmxvYXQgcG9zaXRpb24gPSB0
ZXh0UnVuLT5wb3NpdGlvbkZvck9mZnNldChydW5BbmRPZmZzZXQub2Zmc2V0KTsKKyAgICByZXR1
cm4gY29tcHV0ZUNhcmV0UmVjdEZvckxpbmVQb3NpdGlvbihsaW5lLCBwb3NpdGlvbiwgY2FyZXRS
ZWN0TW9kZSk7Cit9CisKK3N0YXRpYyBMYXlvdXRSZWN0IGNvbXB1dGVDYXJldFJlY3RGb3JMaW5l
QnJlYWsoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiBydW5BbmRPZmZzZXQsIENhcmV0UmVjdE1v
ZGUgY2FyZXRSZWN0TW9kZSkKK3sKKyAgICBBU1NFUlQoIXJ1bkFuZE9mZnNldC5vZmZzZXQpOwor
CisgICAgaWYgKCFydW5BbmRPZmZzZXQucnVuKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
YXV0byBsaW5lID0gcnVuQW5kT2Zmc2V0LnJ1bi5saW5lKCk7CisgICAgcmV0dXJuIGNvbXB1dGVD
YXJldFJlY3RGb3JMaW5lUG9zaXRpb24obGluZSwgbGluZS0+Y29udGVudExvZ2ljYWxMZWZ0KCks
IGNhcmV0UmVjdE1vZGUpOworfQorCitzdGF0aWMgTGF5b3V0UmVjdCBjb21wdXRlQ2FyZXRSZWN0
Rm9yU1ZHSW5saW5lVGV4dChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmIHJ1bkFuZE9mZnNldCwg
Q2FyZXRSZWN0TW9kZSkKK3sKKyAgICBhdXRvKiBib3ggPSBydW5BbmRPZmZzZXQucnVuID8gcnVu
QW5kT2Zmc2V0LnJ1bi0+bGVnYWN5SW5saW5lQm94KCkgOiBudWxscHRyOworICAgIGF1dG8gY2Fy
ZXRPZmZzZXQgPSBydW5BbmRPZmZzZXQub2Zmc2V0OworCisgICAgaWYgKCFpczxJbmxpbmVUZXh0
Qm94Pihib3gpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byYgdGV4dEJveCA9IGRv
d25jYXN0PElubGluZVRleHRCb3g+KCpib3gpOworICAgIGlmIChjYXJldE9mZnNldCA8IHRleHRC
b3guc3RhcnQoKSB8fCBjYXJldE9mZnNldCA+IHRleHRCb3guc3RhcnQoKSArIHRleHRCb3gubGVu
KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICAvLyBVc2UgdGhlIGVkZ2Ugb2YgdGhlIHNl
bGVjdGlvbiByZWN0IHRvIGRldGVybWluZSB0aGUgY2FyZXQgcmVjdC4KKyAgICBpZiAoY2FyZXRP
ZmZzZXQgPCB0ZXh0Qm94LnN0YXJ0KCkgKyB0ZXh0Qm94LmxlbigpKSB7CisgICAgICAgIExheW91
dFJlY3QgcmVjdCA9IHRleHRCb3gubG9jYWxTZWxlY3Rpb25SZWN0KGNhcmV0T2Zmc2V0LCBjYXJl
dE9mZnNldCArIDEpOworICAgICAgICBMYXlvdXRVbml0IHggPSB0ZXh0Qm94LmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSA/IHJlY3QueCgpIDogcmVjdC5tYXhYKCk7CisgICAgICAgIHJldHVybiBM
YXlvdXRSZWN0KHgsIHJlY3QueSgpLCBjYXJldFdpZHRoLCByZWN0LmhlaWdodCgpKTsKKyAgICB9
CisKKyAgICBMYXlvdXRSZWN0IHJlY3QgPSB0ZXh0Qm94LmxvY2FsU2VsZWN0aW9uUmVjdChjYXJl
dE9mZnNldCAtIDEsIGNhcmV0T2Zmc2V0KTsKKyAgICBMYXlvdXRVbml0IHggPSB0ZXh0Qm94Lmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHJlY3QubWF4WCgpIDogcmVjdC54KCk7CisgICAgcmV0
dXJuIHsgeCwgcmVjdC55KCksIGNhcmV0V2lkdGgsIHJlY3QuaGVpZ2h0KCkgfTsKK30KKworc3Rh
dGljIExheW91dFJlY3QgY29tcHV0ZUNhcmV0UmVjdEZvckJveChjb25zdCBSZW5kZXJCb3gmIHJl
bmRlcmVyLCBjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmIHJ1bkFuZE9mZnNldCwgQ2FyZXRSZWN0
TW9kZSBjYXJldFJlY3RNb2RlKQoreworICAgIC8vIFZpc2libGVQb3NpdGlvbnMgYXQgb2Zmc2V0
cyBpbnNpZGUgY29udGFpbmVycyBlaXRoZXIgYSkgcmVmZXIgdG8gdGhlIHBvc2l0aW9ucyBiZWZv
cmUvYWZ0ZXIKKyAgICAvLyB0aG9zZSBjb250YWluZXJzICh0YWJsZXMgYW5kIHNlbGVjdCBlbGVt
ZW50cykgb3IgYikgcmVmZXIgdG8gdGhlIHBvc2l0aW9uIGluc2lkZSBhbiBlbXB0eSBibG9jay4K
KyAgICAvLyBUaGV5IG5ldmVyIHJlZmVyIHRvIGNoaWxkcmVuLgorICAgIC8vIEZJWE1FOiBQYWlu
dCB0aGUgY2FyZXRzIGluc2lkZSBlbXB0eSBibG9ja3MgZGlmZmVyZW50bHkgdGhhbiB0aGUgY2Fy
ZXRzIGJlZm9yZS9hZnRlciBlbGVtZW50cy4KKworICAgIExheW91dFJlY3QgcmVjdChyZW5kZXJl
ci5sb2NhdGlvbigpLCBMYXlvdXRTaXplKGNhcmV0V2lkdGgsIHJlbmRlcmVyLmhlaWdodCgpKSk7
CisgICAgYm9vbCBsdHIgPSBydW5BbmRPZmZzZXQucnVuID8gcnVuQW5kT2Zmc2V0LnJ1bi0+aXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpIDogcmVuZGVyZXIuc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCk7CisKKyAgICBpZiAoKCFydW5BbmRPZmZzZXQub2Zmc2V0KSBeIGx0cikKKyAgICAg
ICAgcmVjdC5tb3ZlKExheW91dFNpemUocmVuZGVyZXIud2lkdGgoKSAtIGNhcmV0V2lkdGgsIDBf
bHUpKTsKKworICAgIGlmIChydW5BbmRPZmZzZXQucnVuKSB7CisgICAgICAgIGF1dG8gbGluZSA9
IHJ1bkFuZE9mZnNldC5ydW4ubGluZSgpOworICAgICAgICBMYXlvdXRVbml0IHRvcCA9IGxpbmUt
PnRvcCgpOworICAgICAgICByZWN0LnNldFkodG9wKTsKKyAgICAgICAgcmVjdC5zZXRIZWlnaHQo
bGluZS0+Ym90dG9tKCkgLSB0b3ApOworICAgIH0KKworICAgIC8vIElmIGhlaWdodCBvZiBib3gg
aXMgc21hbGxlciB0aGFuIGZvbnQgaGVpZ2h0LCB1c2UgdGhlIGxhdHRlciBvbmUsCisgICAgLy8g
b3RoZXJ3aXNlIHRoZSBjYXJldCBtaWdodCBiZWNvbWUgaW52aXNpYmxlLgorICAgIC8vCisgICAg
Ly8gQWxzbywgaWYgdGhlIGJveCBpcyBub3QgYSByZXBsYWNlZCBlbGVtZW50LCBhbHdheXMgdXNl
IHRoZSBmb250IGhlaWdodC4KKyAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSAiYmlnIGNhcmV0IiBi
dWcgZGVzY3JpYmVkIGluOgorICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8zNzc3ODA0PiBEZWxldGlu
ZyBhbGwgY29udGVudCBpbiBhIGRvY3VtZW50IGNhbiByZXN1bHQgaW4gZ2lhbnQgdGFsbC1hcy13
aW5kb3cgaW5zZXJ0aW9uIHBvaW50CisgICAgLy8KKyAgICAvLyBGSVhNRTogaWdub3JpbmcgOmZp
cnN0LWxpbmUsIG1pc3NpbmcgZ29vZCByZWFzb24gdG8gdGFrZSBjYXJlIG9mCisgICAgTGF5b3V0
VW5pdCBmb250SGVpZ2h0ID0gcmVuZGVyZXIuc3R5bGUoKS5mb250TWV0cmljcygpLmhlaWdodCgp
OworICAgIGlmIChmb250SGVpZ2h0ID4gcmVjdC5oZWlnaHQoKSB8fCAoIXJlbmRlcmVyLmlzUmVw
bGFjZWQoKSAmJiAhcmVuZGVyZXIuaXNUYWJsZSgpKSkKKyAgICAgICAgcmVjdC5zZXRIZWlnaHQo
Zm9udEhlaWdodCk7CisKKyAgICAvLyBNb3ZlIHRvIGxvY2FsIGNvb3JkcworICAgIHJlY3QubW92
ZUJ5KC1yZW5kZXJlci5sb2NhdGlvbigpKTsKKworICAgIC8vIEZJWE1FOiBCb3JkZXIvcGFkZGlu
ZyBzaG91bGQgYmUgYWRkZWQgZm9yIGFsbCBlbGVtZW50cyBidXQgdGhpcyB3b3JrYXJvdW5kCisg
ICAgLy8gaXMgbmVlZGVkIGJlY2F1c2Ugd2UgdXNlIG9mZnNldHMgaW5zaWRlIGFuICJhdG9taWMi
IGVsZW1lbnQgdG8gcmVwcmVzZW50CisgICAgLy8gcG9zaXRpb25zIGJlZm9yZSBhbmQgYWZ0ZXIg
dGhlIGVsZW1lbnQgaW4gZGVwcmVjYXRlZCBlZGl0aW5nIG9mZnNldHMuCisgICAgaWYgKHJlbmRl
cmVyLmVsZW1lbnQoKSAmJiAhKGVkaXRpbmdJZ25vcmVzQ29udGVudCgqcmVuZGVyZXIuZWxlbWVu
dCgpKSB8fCBpc1JlbmRlcmVkVGFibGUocmVuZGVyZXIuZWxlbWVudCgpKSkpIHsKKyAgICAgICAg
cmVjdC5zZXRYKHJlY3QueCgpICsgcmVuZGVyZXIuYm9yZGVyTGVmdCgpICsgcmVuZGVyZXIucGFk
ZGluZ0xlZnQoKSk7CisgICAgICAgIHJlY3Quc2V0WShyZWN0LnkoKSArIHJlbmRlcmVyLnBhZGRp
bmdUb3AoKSArIHJlbmRlcmVyLmJvcmRlclRvcCgpKTsKKyAgICB9CisKKyAgICBpZiAoY2FyZXRS
ZWN0TW9kZSA9PSBDYXJldFJlY3RNb2RlOjpFeHBhbmRUb0VuZE9mTGluZSkKKyAgICAgICAgcmVj
dC5zaGlmdE1heFhFZGdlVG8ocmVuZGVyZXIueCgpICsgcmVuZGVyZXIud2lkdGgoKSk7CisKKyAg
ICByZXR1cm4gcmVuZGVyZXIuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJlY3QgOiByZWN0
LnRyYW5zcG9zZWRSZWN0KCk7Cit9CisKK3N0YXRpYyBMYXlvdXRSZWN0IGNvbXB1dGVDYXJldFJl
Y3RGb3JCbG9jayhjb25zdCBSZW5kZXJCbG9jayYgcmVuZGVyZXIsIGNvbnN0IElubGluZVJ1bkFu
ZE9mZnNldCYgcnVuQW5kT2Zmc2V0LCBDYXJldFJlY3RNb2RlIGNhcmV0UmVjdE1vZGUpCit7Cisg
ICAgLy8gRG8gdGhlIG5vcm1hbCBjYWxjdWxhdGlvbiBpbiBtb3N0IGNhc2VzLgorICAgIGlmIChy
ZW5kZXJlci5maXJzdENoaWxkKCkpCisgICAgICAgIHJldHVybiBjb21wdXRlQ2FyZXRSZWN0Rm9y
Qm94KHJlbmRlcmVyLCBydW5BbmRPZmZzZXQsIGNhcmV0UmVjdE1vZGUpOworCisgICAgcmV0dXJu
IGNvbXB1dGVDYXJldFJlY3RGb3JFbXB0eUVsZW1lbnQocmVuZGVyZXIsIHJlbmRlcmVyLndpZHRo
KCksIHJlbmRlcmVyLnRleHRJbmRlbnRPZmZzZXQoKSwgY2FyZXRSZWN0TW9kZSk7Cit9CisKK3N0
YXRpYyBMYXlvdXRSZWN0IGNvbXB1dGVDYXJldFJlY3RGb3JJbmxpbmUoY29uc3QgUmVuZGVySW5s
aW5lJiByZW5kZXJlcikKK3sKKyAgICBpZiAocmVuZGVyZXIuZmlyc3RDaGlsZCgpKSB7CisgICAg
ICAgIC8vIFRoaXMgY29uZGl0aW9uIGlzIHBvc3NpYmxlIGlmIHRoZSBSZW5kZXJJbmxpbmUgaXMg
YXQgYW4gZWRpdGluZyBib3VuZGFyeSwKKyAgICAgICAgLy8gaS5lLiB0aGUgVmlzaWJsZVBvc2l0
aW9uIGlzOgorICAgICAgICAvLyAgIDxSZW5kZXJJbmxpbmUgZWRpdGluZ0JvdW5kYXJ5PXRydWU+
fDxSZW5kZXJUZXh0PiA8L1JlbmRlclRleHQ+PC9SZW5kZXJJbmxpbmU+CisgICAgICAgIC8vIEZJ
WE1FOiBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIG1ha2UgdGhpcyByZXR1cm4gYSB2YWxpZCBy
ZWN0LCBub3RlIHRoYXQKKyAgICAgICAgLy8gdGhlcmUgYXJlIG5vIGxpbmUgYm94ZXMgY3JlYXRl
ZCBpbiB0aGUgYWJvdmUgY2FzZS4KKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBM
YXlvdXRSZWN0IGNhcmV0UmVjdCA9IGNvbXB1dGVDYXJldFJlY3RGb3JFbXB0eUVsZW1lbnQocmVu
ZGVyZXIsIHJlbmRlcmVyLmhvcml6b250YWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCksIDAsIENh
cmV0UmVjdE1vZGU6Ok5vcm1hbCk7CisKKyAgICBpZiAoSW5saW5lQm94KiBmaXJzdEJveCA9IHJl
bmRlcmVyLmZpcnN0TGluZUJveCgpKQorICAgICAgICBjYXJldFJlY3QubW92ZUJ5KExheW91dFBv
aW50KGZpcnN0Qm94LT50b3BMZWZ0KCkpKTsKKworICAgIHJldHVybiBjYXJldFJlY3Q7Cit9CisK
K0xheW91dFJlY3QgY29tcHV0ZUxvY2FsQ2FyZXRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVu
ZGVyZXIsIGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYgcnVuQW5kT2Zmc2V0LCBDYXJldFJlY3RN
b2RlIGNhcmV0UmVjdE1vZGUpCit7CisgICAgaWYgKGlzPFJlbmRlclNWR0lubGluZVRleHQ+KHJl
bmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVDYXJldFJlY3RGb3JTVkdJbmxpbmVUZXh0
KHJ1bkFuZE9mZnNldCwgY2FyZXRSZWN0TW9kZSk7CisKKyAgICBpZiAoaXM8UmVuZGVyVGV4dD4o
cmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gY29tcHV0ZUNhcmV0UmVjdEZvclRleHQocnVuQW5k
T2Zmc2V0LCBjYXJldFJlY3RNb2RlKTsKKworICAgIGlmIChpczxSZW5kZXJMaW5lQnJlYWs+KHJl
bmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVDYXJldFJlY3RGb3JMaW5lQnJlYWsocnVu
QW5kT2Zmc2V0LCBjYXJldFJlY3RNb2RlKTsKKworICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVu
ZGVyZXIpKQorICAgICAgICByZXR1cm4gY29tcHV0ZUNhcmV0UmVjdEZvckJsb2NrKGRvd25jYXN0
PFJlbmRlckJsb2NrPihyZW5kZXJlciksIHJ1bkFuZE9mZnNldCwgY2FyZXRSZWN0TW9kZSk7CisK
KyAgICBpZiAoaXM8UmVuZGVyQm94PihyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBjb21wdXRl
Q2FyZXRSZWN0Rm9yQm94KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpLCBydW5BbmRPZmZz
ZXQsIGNhcmV0UmVjdE1vZGUpOworCisgICAgaWYgKGlzPFJlbmRlcklubGluZT4ocmVuZGVyZXIp
KQorICAgICAgICByZXR1cm4gY29tcHV0ZUNhcmV0UmVjdEZvcklubGluZShkb3duY2FzdDxSZW5k
ZXJJbmxpbmU+KHJlbmRlcmVyKSk7CisKKyAgICByZXR1cm4geyB9OworfQorCit9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NhcmV0UmVjdENvbXB1dGF0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ2FyZXRSZWN0Q29tcHV0YXRpb24uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjczNjJhODQzYjNmNQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DYXJldFJlY3RDb21wdXRhdGlvbi5oCkBA
IC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIklu
bGluZVJ1bkFuZE9mZnNldC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdEVudW1zLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBDYXJldFJlY3RNb2RlIHsKKyAgICBOb3Jt
YWwsCisgICAgRXhwYW5kVG9FbmRPZkxpbmUKK307CisKK0xheW91dFJlY3QgY29tcHV0ZUxvY2Fs
Q2FyZXRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYs
IENhcmV0UmVjdE1vZGUgPSBDYXJldFJlY3RNb2RlOjpOb3JtYWwpOworCit9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggYzhkODFlZjI0ODY2Li4zNThkNjZm
OTg3MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMjg0
MSwxNSArMjg0MSw2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUhpdFRlc3RSZXN1bHQoSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYKICAgICB9CiB9CiAKLUxheW91
dFJlY3QgUmVuZGVyQmxvY2s6OmxvY2FsQ2FyZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNl
dCYgcnVuQW5kT2Zmc2V0LCBDYXJldFJlY3RNb2RlIGNhcmV0UmVjdE1vZGUpIGNvbnN0Ci17Ci0g
ICAgLy8gRG8gdGhlIG5vcm1hbCBjYWxjdWxhdGlvbiBpbiBtb3N0IGNhc2VzLgotICAgIGlmIChm
aXJzdENoaWxkKCkpCi0gICAgICAgIHJldHVybiBSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KHJ1
bkFuZE9mZnNldCwgY2FyZXRSZWN0TW9kZSk7Ci0KLSAgICByZXR1cm4gbG9jYWxDYXJldFJlY3RG
b3JFbXB0eUVsZW1lbnQod2lkdGgoKSwgdGV4dEluZGVudE9mZnNldCgpLCBjYXJldFJlY3RNb2Rl
KTsKLX0KLQogdm9pZCBSZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHNGb3JJbmxpbmVDaGls
ZHJlbihWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRl
ckxheWVyTW9kZWxPYmplY3QqKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCA3ZDM0MTRiNGM1ZjAuLmY5YjJkOThk
ZDlhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKQEAgLTQ4NCw4ICs0
ODQsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwYWludENvbnRpbnVhdGlvbk91dGxpbmVzKFBh
aW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2Fy
ZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYsIENhcmV0UmVjdE1vZGUpIGNvbnN0IGZp
bmFsOwotICAgIAogICAgIC8vIEZJWE1FLUJMT0NLRkxPVzogUmVtb3ZlIHZpcnR1YWxpemFpb24g
d2hlbiBhbGwgY2FsbGVycyBoYXZlIG1vdmVkIHRvIFJlbmRlckJsb2NrRmxvdwogICAgIHZpcnR1
YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnRXaXRoSW5saW5lQ2hpbGRyZW4oY29u
c3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciopOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4IGJiMjJmMzRm
ZDNmMy4uZWU4NDhiNjI3ZjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tGbG93LmNwcApAQCAtNDQzOCw1OSArNDQzOCw1IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93
Ojpjb21wdXRlSW5saW5lUHJlZmVycmVkTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dp
Y2FsCiAgICAgbWF4TG9naWNhbFdpZHRoID0gcHJlZmVycmVkV2lkdGgobWF4TG9naWNhbFdpZHRo
LCBpbmxpbmVNYXgpOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUNh
cmV0UmVjdChjb25zdCBMYXlvdXRSZWN0JiBsaW5lU2VsZWN0aW9uUmVjdCwgZmxvYXQgbG9naWNh
bExlZnRQb3NpdGlvbiwgdW5zaWduZWQgY2FyZXRXaWR0aCwgQ2FyZXRSZWN0TW9kZSBjYXJldFJl
Y3RNb2RlKSBjb25zdAotewotICAgIGludCBoZWlnaHQgPSBsaW5lU2VsZWN0aW9uUmVjdC5oZWln
aHQoKTsKLSAgICBpbnQgdG9wID0gbGluZVNlbGVjdGlvblJlY3QueSgpOwotCi0gICAgLy8gRGlz
dHJpYnV0ZSB0aGUgY2FyZXQncyB3aWR0aCB0byBlaXRoZXIgc2lkZSBvZiB0aGUgb2Zmc2V0Lgot
ICAgIGZsb2F0IGxlZnQgPSBsb2dpY2FsTGVmdFBvc2l0aW9uOwotICAgIGludCBjYXJldFdpZHRo
TGVmdE9mT2Zmc2V0ID0gY2FyZXRXaWR0aCAvIDI7Ci0gICAgbGVmdCAtPSBjYXJldFdpZHRoTGVm
dE9mT2Zmc2V0OwotICAgIGludCBjYXJldFdpZHRoUmlnaHRPZk9mZnNldCA9IGNhcmV0V2lkdGgg
LSBjYXJldFdpZHRoTGVmdE9mT2Zmc2V0OwotICAgIGxlZnQgPSByb3VuZGYobGVmdCk7Ci0KLSAg
ICBmbG9hdCBsaW5lTGVmdCA9IGxpbmVTZWxlY3Rpb25SZWN0LngoKTsKLSAgICBmbG9hdCBsaW5l
UmlnaHQgPSBsaW5lU2VsZWN0aW9uUmVjdC5tYXhYKCk7Ci0KLSAgICBib29sIHJpZ2h0QWxpZ25l
ZCA9IGZhbHNlOwotICAgIHN3aXRjaCAoc3R5bGUoKS50ZXh0QWxpZ24oKSkgewotICAgIGNhc2Ug
VGV4dEFsaWduTW9kZTo6UmlnaHQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdo
dDoKLSAgICAgICAgcmlnaHRBbGlnbmVkID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpMZWZ0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVm
dDoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRlcjoKLSAgICBjYXNlIFRleHRBbGlnbk1v
ZGU6OldlYktpdENlbnRlcjoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2Rl
OjpKdXN0aWZ5OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6U3RhcnQ6Ci0gICAgICAgIHJpZ2h0
QWxpZ25lZCA9ICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6Ci0gICAgICAgIHJpZ2h0QWxpZ25lZCA9
IHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBmbG9hdCBsZWZ0RWRnZSA9IHN0ZDo6bWluPGZsb2F0PigwLCBsaW5lTGVmdCk7Ci0g
ICAgZmxvYXQgcmlnaHRFZGdlID0gc3RkOjptYXg8ZmxvYXQ+KGxvZ2ljYWxXaWR0aCgpLCBsaW5l
UmlnaHQpOwotCi0gICAgaWYgKHJpZ2h0QWxpZ25lZCkgewotICAgICAgICBsZWZ0ID0gc3RkOjpt
YXgobGVmdCwgbGVmdEVkZ2UpOwotICAgICAgICBsZWZ0ID0gc3RkOjptaW4obGVmdCwgbGluZVJp
Z2h0IC0gY2FyZXRXaWR0aCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbGVmdCA9IHN0ZDo6bWlu
KGxlZnQsIHJpZ2h0RWRnZSAtIGNhcmV0V2lkdGhSaWdodE9mT2Zmc2V0KTsKLSAgICAgICAgbGVm
dCA9IHN0ZDo6bWF4KGxlZnQsIGxpbmVMZWZ0KTsKLSAgICB9Ci0KLSAgICBhdXRvIHJlY3QgPSBJ
bnRSZWN0KGxlZnQsIHRvcCwgY2FyZXRXaWR0aCwgaGVpZ2h0KTsKLQotICAgIGlmIChjYXJldFJl
Y3RNb2RlID09IENhcmV0UmVjdE1vZGU6OkV4cGFuZFRvRW5kT2ZMaW5lKQotICAgICAgICByZWN0
LnNoaWZ0TWF4WEVkZ2VUbyhsaW5lUmlnaHQpOwotCi0gICAgcmV0dXJuIHN0eWxlKCkuaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSA/IHJlY3QgOiByZWN0LnRyYW5zcG9zZWRSZWN0KCk7Ci19Ci0K
IH0KIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tGbG93LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tGbG93LmgKaW5kZXggZGQ0M2JjMWU4YWZkLi4zZDliNTFmMjg4ODAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKQEAgLTM5OCw3ICszOTgsNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBhZGRGbG9hdHNUb05ld1BhcmVudChSZW5kZXJCbG9ja0Zsb3cmIHRv
QmxvY2tGbG93KSBjb25zdDsKICAgICAKICAgICBMYXlvdXRVbml0IGVuZFBhZGRpbmdXaWR0aEZv
ckNhcmV0KCkgY29uc3Q7Ci0gICAgTGF5b3V0UmVjdCBjb21wdXRlQ2FyZXRSZWN0KGNvbnN0IExh
eW91dFJlY3QmIGxpbmVTZWxlY3Rpb25SZWN0LCBmbG9hdCBsb2dpY2FsTGVmdFBvc2l0aW9uLCB1
bnNpZ25lZCBjYXJldFdpZHRoLCBDYXJldFJlY3RNb2RlID0gQ2FyZXRSZWN0TW9kZTo6Tm9ybWFs
KSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIGJvb2wgc2hvdWxkUmVzZXRMb2dpY2FsSGVpZ2h0
QmVmb3JlTGF5b3V0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCAzMDdmOWIyYzdmMmYuLjQwNjUxOWYyYzY1
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTQ0MzIsNTUgKzQ0
MzIsNiBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0UmVw
bGFjZWQoTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdQogICAgIGNvbXB1dGVkVmFsdWVzLm1fcG9z
aXRpb24gPSBsb2dpY2FsVG9wUG9zOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckJveDo6bG9jYWxD
YXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiBydW5BbmRPZmZzZXQsIENhcmV0UmVj
dE1vZGUgY2FyZXRSZWN0TW9kZSkgY29uc3QKLXsKLSAgICAvLyBWaXNpYmxlUG9zaXRpb25zIGF0
IG9mZnNldHMgaW5zaWRlIGNvbnRhaW5lcnMgZWl0aGVyIGEpIHJlZmVyIHRvIHRoZSBwb3NpdGlv
bnMgYmVmb3JlL2FmdGVyCi0gICAgLy8gdGhvc2UgY29udGFpbmVycyAodGFibGVzIGFuZCBzZWxl
Y3QgZWxlbWVudHMpIG9yIGIpIHJlZmVyIHRvIHRoZSBwb3NpdGlvbiBpbnNpZGUgYW4gZW1wdHkg
YmxvY2suCi0gICAgLy8gVGhleSBuZXZlciByZWZlciB0byBjaGlsZHJlbi4KLSAgICAvLyBGSVhN
RTogUGFpbnQgdGhlIGNhcmV0cyBpbnNpZGUgZW1wdHkgYmxvY2tzIGRpZmZlcmVudGx5IHRoYW4g
dGhlIGNhcmV0cyBiZWZvcmUvYWZ0ZXIgZWxlbWVudHMuCi0KLSAgICBMYXlvdXRSZWN0IHJlY3Qo
bG9jYXRpb24oKSwgTGF5b3V0U2l6ZShjYXJldFdpZHRoLCBoZWlnaHQoKSkpOwotICAgIGJvb2wg
bHRyID0gcnVuQW5kT2Zmc2V0LnJ1biA/IHJ1bkFuZE9mZnNldC5ydW4tPmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSA6IHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwotCi0gICAgaWYg
KCghcnVuQW5kT2Zmc2V0Lm9mZnNldCkgXiBsdHIpCi0gICAgICAgIHJlY3QubW92ZShMYXlvdXRT
aXplKHdpZHRoKCkgLSBjYXJldFdpZHRoLCAwX2x1KSk7Ci0KLSAgICBpZiAocnVuQW5kT2Zmc2V0
LnJ1bikgewotICAgICAgICBhdXRvIGxpbmUgPSBydW5BbmRPZmZzZXQucnVuLmxpbmUoKTsKLSAg
ICAgICAgTGF5b3V0VW5pdCB0b3AgPSBsaW5lLT50b3AoKTsKLSAgICAgICAgcmVjdC5zZXRZKHRv
cCk7Ci0gICAgICAgIHJlY3Quc2V0SGVpZ2h0KGxpbmUtPmJvdHRvbSgpIC0gdG9wKTsKLSAgICB9
Ci0KLSAgICAvLyBJZiBoZWlnaHQgb2YgYm94IGlzIHNtYWxsZXIgdGhhbiBmb250IGhlaWdodCwg
dXNlIHRoZSBsYXR0ZXIgb25lLAotICAgIC8vIG90aGVyd2lzZSB0aGUgY2FyZXQgbWlnaHQgYmVj
b21lIGludmlzaWJsZS4KLSAgICAvLwotICAgIC8vIEFsc28sIGlmIHRoZSBib3ggaXMgbm90IGEg
cmVwbGFjZWQgZWxlbWVudCwgYWx3YXlzIHVzZSB0aGUgZm9udCBoZWlnaHQuCi0gICAgLy8gVGhp
cyBwcmV2ZW50cyB0aGUgImJpZyBjYXJldCIgYnVnIGRlc2NyaWJlZCBpbjoKLSAgICAvLyA8cmRh
cjovL3Byb2JsZW0vMzc3NzgwND4gRGVsZXRpbmcgYWxsIGNvbnRlbnQgaW4gYSBkb2N1bWVudCBj
YW4gcmVzdWx0IGluIGdpYW50IHRhbGwtYXMtd2luZG93IGluc2VydGlvbiBwb2ludAotICAgIC8v
Ci0gICAgLy8gRklYTUU6IGlnbm9yaW5nIDpmaXJzdC1saW5lLCBtaXNzaW5nIGdvb2QgcmVhc29u
IHRvIHRha2UgY2FyZSBvZgotICAgIExheW91dFVuaXQgZm9udEhlaWdodCA9IHN0eWxlKCkuZm9u
dE1ldHJpY3MoKS5oZWlnaHQoKTsKLSAgICBpZiAoZm9udEhlaWdodCA+IHJlY3QuaGVpZ2h0KCkg
fHwgKCFpc1JlcGxhY2VkKCkgJiYgIWlzVGFibGUoKSkpCi0gICAgICAgIHJlY3Quc2V0SGVpZ2h0
KGZvbnRIZWlnaHQpOwotCi0gICAgLy8gTW92ZSB0byBsb2NhbCBjb29yZHMKLSAgICByZWN0Lm1v
dmVCeSgtbG9jYXRpb24oKSk7Ci0KLSAgICAvLyBGSVhNRTogQm9yZGVyL3BhZGRpbmcgc2hvdWxk
IGJlIGFkZGVkIGZvciBhbGwgZWxlbWVudHMgYnV0IHRoaXMgd29ya2Fyb3VuZAotICAgIC8vIGlz
IG5lZWRlZCBiZWNhdXNlIHdlIHVzZSBvZmZzZXRzIGluc2lkZSBhbiAiYXRvbWljIiBlbGVtZW50
IHRvIHJlcHJlc2VudAotICAgIC8vIHBvc2l0aW9ucyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBlbGVt
ZW50IGluIGRlcHJlY2F0ZWQgZWRpdGluZyBvZmZzZXRzLgotICAgIGlmIChlbGVtZW50KCkgJiYg
IShlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKmVsZW1lbnQoKSkgfHwgaXNSZW5kZXJlZFRhYmxlKGVs
ZW1lbnQoKSkpKSB7Ci0gICAgICAgIHJlY3Quc2V0WChyZWN0LngoKSArIGJvcmRlckxlZnQoKSAr
IHBhZGRpbmdMZWZ0KCkpOwotICAgICAgICByZWN0LnNldFkocmVjdC55KCkgKyBwYWRkaW5nVG9w
KCkgKyBib3JkZXJUb3AoKSk7Ci0gICAgfQotCi0gICAgaWYgKGNhcmV0UmVjdE1vZGUgPT0gQ2Fy
ZXRSZWN0TW9kZTo6RXhwYW5kVG9FbmRPZkxpbmUpCi0gICAgICAgIHJlY3Quc2hpZnRNYXhYRWRn
ZVRvKHgoKSArIHdpZHRoKCkpOwotCi0gICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyByZWN0IDogcmVjdC50cmFuc3Bvc2VkUmVjdCgpOwotfQotCiBWaXNpYmxlUG9zaXRpb24g
UmVuZGVyQm94Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29u
c3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50KQogewogICAgIC8vIG5vIGNoaWxk
cmVuLi4ucmV0dXJuIHRoaXMgcmVuZGVyIG9iamVjdCdzIGVsZW1lbnQsIGlmIHRoZXJlIGlzIG9u
ZSwgYW5kIG9mZnNldCAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggM2Nk
ODBiY2QwNzJkLi4xMDI1OTI1NDY1OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmgKQEAgLTQ5Nyw4ICs0OTcsNiBAQCBvdmVycmlkZTsKICAgICBib29sIGlzVW5zcGxpdHRhYmxl
Rm9yUGFnaW5hdGlvbigpIGNvbnN0OwogCiAgICAgYm9vbCBzaG91bGRUcmVhdENoaWxkQXNSZXBs
YWNlZEluVGFibGVDZWxscygpIGNvbnN0OwotICAgIAotICAgIExheW91dFJlY3QgbG9jYWxDYXJl
dFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiwgQ2FyZXRSZWN0TW9kZSkgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICB2aXJ0dWFsIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlwUmVjdChjb25zdCBM
YXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiA9IG51bGxwdHIs
IE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNp
emUsIFBhaW50UGhhc2UgPSBQYWludFBoYXNlOjpCbG9ja0JhY2tncm91bmQpIGNvbnN0OwogICAg
IHZpcnR1YWwgTGF5b3V0UmVjdCBvdmVyZmxvd0NsaXBSZWN0Rm9yQ2hpbGRMYXllcnMoY29uc3Qg
TGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQs
IE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QgeyByZXR1cm4g
b3ZlcmZsb3dDbGlwUmVjdChsb2NhdGlvbiwgZnJhZ21lbnQsIHJlbGV2YW5jeSk7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4
IGI5ODI3YzhhMTRkMi4uODM4MjU2YzExZWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTI2MjYsNzggKzI2MjYsNiBAQCB2
b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjbGVhckZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dCgp
CiAgICAgZmlyc3RMZXR0ZXJSZW1haW5pbmdUZXh0TWFwKCkucmVtb3ZlKHRoaXMpOwogfQogCi1M
YXlvdXRSZWN0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpsb2NhbENhcmV0UmVjdEZvckVtcHR5RWxl
bWVudChMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IHRleHRJbmRlbnRPZmZzZXQsIENhcmV0
UmVjdE1vZGUgY2FyZXRSZWN0TW9kZSkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWZpcnN0Q2hpbGQo
KSk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBkb2VzIG5vdCB0YWtlIGludG8gYWNjb3VudCBlaXRo
ZXIgOmZpcnN0LWxpbmUgb3IgOmZpcnN0LWxldHRlcgotICAgIC8vIEhvd2V2ZXIsIGFzIHNvb24g
YXMgc29tZSBjb250ZW50IGlzIGVudGVyZWQsIHRoZSBsaW5lIGJveGVzIHdpbGwgYmUKLSAgICAv
LyBjb25zdHJ1Y3RlZCBhbmQgdGhpcyBrbHVkZ2UgaXMgbm90IGNhbGxlZCBhbnkgbW9yZS4gU28g
b25seSB0aGUgY2FyZXQgc2l6ZQotICAgIC8vIG9mIGFuIGVtcHR5IDpmaXJzdC1saW5lJ2QgYmxv
Y2sgaXMgd3JvbmcuIEkgdGhpbmsgd2UgY2FuIGxpdmUgd2l0aCB0aGF0LgotICAgIGNvbnN0IFJl
bmRlclN0eWxlJiBjdXJyZW50U3R5bGUgPSBmaXJzdExpbmVTdHlsZSgpOwotCi0gICAgZW51bSBD
YXJldEFsaWdubWVudCB7IGFsaWduTGVmdCwgYWxpZ25SaWdodCwgYWxpZ25DZW50ZXIgfTsKLQot
ICAgIENhcmV0QWxpZ25tZW50IGFsaWdubWVudCA9IGFsaWduTGVmdDsKLQotICAgIHN3aXRjaCAo
Y3VycmVudFN0eWxlLnRleHRBbGlnbigpKSB7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpMZWZ0
OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVmdDoKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpDZW50ZXI6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpX
ZWJLaXRDZW50ZXI6Ci0gICAgICAgIGFsaWdubWVudCA9IGFsaWduQ2VudGVyOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlJpZ2h0OgotICAgIGNhc2UgVGV4dEFsaWdu
TW9kZTo6V2ViS2l0UmlnaHQ6Ci0gICAgICAgIGFsaWdubWVudCA9IGFsaWduUmlnaHQ7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6SnVzdGlmeToKLSAgICBjYXNlIFRl
eHRBbGlnbk1vZGU6OlN0YXJ0OgotICAgICAgICBpZiAoIWN1cnJlbnRTdHlsZS5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICBhbGlnbm1lbnQgPSBhbGlnblJpZ2h0OwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkVuZDoKLSAgICAgICAgaWYgKGN1
cnJlbnRTdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICBhbGlnbm1l
bnQgPSBhbGlnblJpZ2h0OwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBMYXlvdXRVbml0
IHggPSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwotICAgIExheW91dFVuaXQgbWF4WCA9
IHdpZHRoIC0gYm9yZGVyUmlnaHQoKSAtIHBhZGRpbmdSaWdodCgpOwotCi0gICAgc3dpdGNoIChh
bGlnbm1lbnQpIHsKLSAgICBjYXNlIGFsaWduTGVmdDoKLSAgICAgICAgaWYgKGN1cnJlbnRTdHls
ZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICB4ICs9IHRleHRJbmRlbnRP
ZmZzZXQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgYWxpZ25DZW50ZXI6Ci0gICAgICAgIHgg
PSAoeCArIG1heFgpIC8gMjsKLSAgICAgICAgaWYgKGN1cnJlbnRTdHlsZS5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICB4ICs9IHRleHRJbmRlbnRPZmZzZXQgLyAyOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB4IC09IHRleHRJbmRlbnRPZmZzZXQgLyAyOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIGFsaWduUmlnaHQ6Ci0gICAgICAgIHggPSBtYXhYIC0gY2FyZXRX
aWR0aDsKLSAgICAgICAgaWYgKCFjdXJyZW50U3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
KQotICAgICAgICAgICAgeCAtPSB0ZXh0SW5kZW50T2Zmc2V0OwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgeCA9IHN0ZDo6bWluKHgsIHN0ZDo6bWF4PExheW91dFVuaXQ+KG1heFggLSBjYXJl
dFdpZHRoLCAwKSk7Ci0KLSAgICBhdXRvIGxpbmVIZWlnaHQgPSB0aGlzLT5saW5lSGVpZ2h0KHRy
dWUsIGN1cnJlbnRTdHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gSG9yaXpvbnRhbExp
bmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcyk7Ci0gICAgYXV0
byBoZWlnaHQgPSBzdGQ6Om1pbihsaW5lSGVpZ2h0LCBMYXlvdXRVbml0IHsgY3VycmVudFN0eWxl
LmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCkgfSk7Ci0gICAgYXV0byB5ID0gcGFkZGluZ1RvcCgpICsg
Ym9yZGVyVG9wKCkgKyAobGluZUhlaWdodCA+IGhlaWdodCA/IChsaW5lSGVpZ2h0IC0gaGVpZ2h0
KSAvIDIgOiBMYXlvdXRVbml0IHsgfSk7Ci0KLSAgICBhdXRvIHJlY3QgPSBMYXlvdXRSZWN0KHgs
IHksIGNhcmV0V2lkdGgsIGhlaWdodCk7Ci0KLSAgICBpZiAoY2FyZXRSZWN0TW9kZSA9PSBDYXJl
dFJlY3RNb2RlOjpFeHBhbmRUb0VuZE9mTGluZSkKLSAgICAgICAgcmVjdC5zaGlmdE1heFhFZGdl
VG8od2lkdGgpOwotCi0gICAgcmV0dXJuIGN1cnJlbnRTdHlsZS5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpID8gcmVjdCA6IHJlY3QudHJhbnNwb3NlZFJlY3QoKTsKLX0KLQogYm9vbCBSZW5kZXJC
b3hNb2RlbE9iamVjdDo6c2hvdWxkQW50aWFsaWFzTGluZXMoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQogewogICAgIC8vIEZJWE1FOiBXZSBtYXkgd2FudCB0byBub3QgYW50aWFsaWFzIHdoZW4g
c2NhbGVkIGJ5IGFuIGludGVncmFsIHZhbHVlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAppbmRleCA0ZTVhYmE2ZDA0NzMuLmE4ZGRhYTkwOGI2
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmgKQEAgLTI2MCw4ICsyNjAsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICBJbnRlcnBvbGF0aW9uUXVh
bGl0eSBjaG9vc2VJbnRlcnBvbGF0aW9uUXVhbGl0eShHcmFwaGljc0NvbnRleHQmLCBJbWFnZSYs
IGNvbnN0IHZvaWQqLCBjb25zdCBMYXlvdXRTaXplJik7CiAKLSAgICBMYXlvdXRSZWN0IGxvY2Fs
Q2FyZXRSZWN0Rm9yRW1wdHlFbGVtZW50KExheW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQgdGV4
dEluZGVudE9mZnNldCwgQ2FyZXRSZWN0TW9kZSA9IENhcmV0UmVjdE1vZGU6Ok5vcm1hbCkgY29u
c3Q7Ci0KICAgICBzdGF0aWMgYm9vbCBzaG91bGRBbnRpYWxpYXNMaW5lcyhHcmFwaGljc0NvbnRl
eHQmKTsKIAogICAgIHN0YXRpYyB2b2lkIGNsaXBSb3VuZGVkSW5uZXJSZWN0KEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGNsaXBSZWN0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKaW5kZXggYmQ1MjVl
MDE4YmRjLi4xYWQxMjQwZGU1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuY3BwCkBAIC0yMjgsMjUgKzIyOCw2IEBAIHZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVB
bHdheXNDcmVhdGVMaW5lQm94ZXMoYm9vbCBmdWxsTGF5b3V0KQogICAgIH0KIH0KIAotTGF5b3V0
UmVjdCBSZW5kZXJJbmxpbmU6OmxvY2FsQ2FyZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNl
dCYsIENhcmV0UmVjdE1vZGUpIGNvbnN0Ci17Ci0gICAgaWYgKGZpcnN0Q2hpbGQoKSkgewotICAg
ICAgICAvLyBUaGlzIGNvbmRpdGlvbiBpcyBwb3NzaWJsZSBpZiB0aGUgUmVuZGVySW5saW5lIGlz
IGF0IGFuIGVkaXRpbmcgYm91bmRhcnksCi0gICAgICAgIC8vIGkuZS4gdGhlIFZpc2libGVQb3Np
dGlvbiBpczoKLSAgICAgICAgLy8gICA8UmVuZGVySW5saW5lIGVkaXRpbmdCb3VuZGFyeT10cnVl
Pnw8UmVuZGVyVGV4dD4gPC9SZW5kZXJUZXh0PjwvUmVuZGVySW5saW5lPgotICAgICAgICAvLyBG
SVhNRTogbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBtYWtlIHRoaXMgcmV0dXJuIGEgdmFsaWQg
cmVjdCwgbm90ZSB0aGF0Ci0gICAgICAgIC8vIHRoZXJlIGFyZSBubyBsaW5lIGJveGVzIGNyZWF0
ZWQgaW4gdGhlIGFib3ZlIGNhc2UuCi0gICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7Ci0gICAg
fQotCi0gICAgTGF5b3V0UmVjdCBjYXJldFJlY3QgPSBsb2NhbENhcmV0UmVjdEZvckVtcHR5RWxl
bWVudChob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpLCAwKTsKLQotICAgIGlmIChJ
bmxpbmVCb3gqIGZpcnN0Qm94ID0gZmlyc3RMaW5lQm94KCkpCi0gICAgICAgIGNhcmV0UmVjdC5t
b3ZlQnkoTGF5b3V0UG9pbnQoZmlyc3RCb3gtPnRvcExlZnQoKSkpOwotCi0gICAgcmV0dXJuIGNh
cmV0UmVjdDsKLX0KLQogdm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgbV9saW5lQm94ZXMu
cGFpbnQodGhpcywgcGFpbnRJbmZvLCBwYWludE9mZnNldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW5saW5lLmgKaW5kZXggMDc3NDU5OWUxZWQ1Li44Nzg4ZmZkZWYwNDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKQEAgLTg2LDggKzg2LDYgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0QWx3YXlzQ3JlYXRlTGluZUJveGVzKCkgeyBzZXRSZW5kZXJJbmxp
bmVBbHdheXNDcmVhdGVzTGluZUJveGVzKHRydWUpOyB9CiAgICAgdm9pZCB1cGRhdGVBbHdheXND
cmVhdGVMaW5lQm94ZXMoYm9vbCBmdWxsTGF5b3V0KTsKIAotICAgIExheW91dFJlY3QgbG9jYWxD
YXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiwgQ2FyZXRSZWN0TW9kZSkgY29uc3Qg
ZmluYWw7Ci0KICAgICBib29sIGhpdFRlc3RDdWxsZWRJbmxpbmUoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29u
dGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpOwogCiBwcm90ZWN0
ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuY3BwCmluZGV4
IGIzNmNjZjU1OTQ1Mi4uOTk4ZmU0MDY3Y2FiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGluZUJyZWFrLmNwcApAQCAtMTU5LDE4ICsxNTksNiBAQCB2b2lkIFJlbmRlckxp
bmVCcmVhazo6c2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUgc3RhdGUpCiAgICAgbV9p
bmxpbmVCb3hXcmFwcGVyLT5yb290KCkuc2V0SGFzU2VsZWN0ZWRDaGlsZHJlbihzdGF0ZSAhPSBI
aWdobGlnaHRTdGF0ZTo6Tm9uZSk7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyTGluZUJyZWFrOjps
b2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmIHJ1bkFuZE9mZnNldCwgQ2Fy
ZXRSZWN0TW9kZSBjYXJldFJlY3RNb2RlKSBjb25zdAotewotICAgIEFTU0VSVCghcnVuQW5kT2Zm
c2V0Lm9mZnNldCk7Ci0gICAgQVNTRVJUKHJ1bkFuZE9mZnNldC5ydW4gPT0gTGF5b3V0SW50ZWdy
YXRpb246OnJ1bkZvcigqdGhpcykpOwotCi0gICAgaWYgKCFydW5BbmRPZmZzZXQucnVuKQotICAg
ICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwotCi0gICAgYXV0byBsaW5lID0gcnVuQW5kT2Zmc2V0
LnJ1bi5saW5lKCk7Ci0gICAgcmV0dXJuIGxpbmUtPmNvbnRhaW5pbmdCbG9jaygpLmNvbXB1dGVD
YXJldFJlY3QobGluZS0+c2VsZWN0aW9uUmVjdCgpLCBsaW5lLT5jb250ZW50TG9naWNhbExlZnQo
KSwgY2FyZXRXaWR0aCwgY2FyZXRSZWN0TW9kZSk7Ci19Ci0KIEludFJlY3QgUmVuZGVyTGluZUJy
ZWFrOjpsaW5lc0JvdW5kaW5nQm94KCkgY29uc3QKIHsKICAgICBhdXRvIHJ1biA9IExheW91dElu
dGVncmF0aW9uOjpydW5Gb3IoKnRoaXMpOwpAQCAtMjE0LDcgKzIwMiwxMCBAQCB2b2lkIFJlbmRl
ckxpbmVCcmVhazo6Y29sbGVjdFNlbGVjdGlvblJlY3RzKFZlY3RvcjxTZWxlY3Rpb25SZWN0PiYg
cmVjdHMsIHVuc2lnbgogICAgICAgICByZXR1cm47CiAgICAgYXV0byBsaW5lID0gcnVuLmxpbmUo
KTsKIAotICAgIExheW91dFJlY3QgcmVjdCA9IGxpbmUtPmNvbnRhaW5pbmdCbG9jaygpLmNvbXB1
dGVDYXJldFJlY3QobGluZS0+c2VsZWN0aW9uUmVjdCgpLCBsaW5lLT5jb250ZW50TG9naWNhbExl
ZnQoKSwgMCk7CisgICAgYXV0byBsaW5lU2VsZWN0aW9uUmVjdCA9IGxpbmUtPnNlbGVjdGlvblJl
Y3QoKTsKKyAgICBMYXlvdXRSZWN0IHJlY3QgPSBJbnRSZWN0KGxpbmUtPmNvbnRlbnRMb2dpY2Fs
TGVmdCgpLCBsaW5lU2VsZWN0aW9uUmVjdC55KCksIDAsIGxpbmVTZWxlY3Rpb25SZWN0LmhlaWdo
dCgpKTsKKyAgICBpZiAoIWxpbmUtPmlzSG9yaXpvbnRhbCgpKQorICAgICAgICByZWN0ID0gcmVj
dC50cmFuc3Bvc2VkUmVjdCgpOwogCiAgICAgaWYgKGxpbmUtPmxlZ2FjeVJvb3RJbmxpbmVCb3go
KSAmJiBsaW5lLT5sZWdhY3lSb290SW5saW5lQm94KCktPmlzRmlyc3RBZnRlclBhZ2VCcmVhaygp
KSB7CiAgICAgICAgIGlmIChydW4tPmlzSG9yaXpvbnRhbCgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oCmluZGV4IGNkMmEyZWJmMzk0My4uNGZmMmQxZWI4NjFl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oCkBAIC02Niw3
ICs2Niw2IEBAIHByaXZhdGU6CiAgICAgaW50IGNhcmV0TWluT2Zmc2V0KCkgY29uc3QgZmluYWw7
CiAgICAgaW50IGNhcmV0TWF4T2Zmc2V0KCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBjYW5CZVNl
bGVjdGlvbkxlYWYoKSBjb25zdCBmaW5hbDsKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0
KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYsIENhcmV0UmVjdE1vZGUpIGNvbnN0IGZpbmFsOwog
ICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUpIGZpbmFsOwogCiAgICAg
TGF5b3V0VW5pdCBsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwg
TGluZVBvc2l0aW9uTW9kZSkgY29uc3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCmluZGV4IDE3ZmMzM2Q0MWUwNC4uOTZlYWY0YjkzNjgxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMTQwMCwxMSArMTQwMCw2
IEBAIExheW91dFNpemUgUmVuZGVyT2JqZWN0OjpvZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIo
UmVuZGVyRWxlbWVudCYgY29udGFpbmVyKSBjCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotTGF5
b3V0UmVjdCBSZW5kZXJPYmplY3Q6OmxvY2FsQ2FyZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9m
ZnNldCYsIENhcmV0UmVjdE1vZGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIExheW91dFJlY3QoKTsK
LX0KLQogYm9vbCBSZW5kZXJPYmplY3Q6OmlzUm9vdGVkKCkgY29uc3QKIHsKICAgICByZXR1cm4g
aXNEZXNjZW5kYW50T2YoJnZpZXcoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmgKaW5kZXggYjkxNTkyMmIyMWU5Li42NDU3OTE4ODFmY2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTY3Miw5ICs2NzIsNiBAQCBwdWJsaWM6CiAgICAg
Ly8gV2hldGhlciBvciBub3QgYSBnaXZlbiBibG9jayBuZWVkcyB0byBwYWludCBzZWxlY3Rpb24g
Z2Fwcy4KICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUGFpbnRTZWxlY3Rpb25HYXBzKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KIAotICAgIC8vIFJldHVybnMgdGhlIGxvY2FsIGNvb3JkaW5hdGVz
IG9mIHRoZSBjYXJldCB3aXRoaW4gdGhpcyByZW5kZXIgb2JqZWN0LgotICAgIHZpcnR1YWwgTGF5
b3V0UmVjdCBsb2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmLCBDYXJldFJl
Y3RNb2RlID0gQ2FyZXRSZWN0TW9kZTo6Tm9ybWFsKSBjb25zdDsKLQogICAgIC8vIFdoZW4gcGVy
Zm9ybWluZyBhIGdsb2JhbCBkb2N1bWVudCB0ZWFyLWRvd24sIG9yIHdoZW4gZ29pbmcgaW50byB0
aGUgYmFjay9mb3J3YXJkIGNhY2hlLCB0aGUgcmVuZGVyZXIgb2YgdGhlIGRvY3VtZW50IGlzIGNs
ZWFyZWQuCiAgICAgYm9vbCByZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSBjb25zdDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdEVudW1zLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0RW51bXMuaAppbmRleCAwNmU3NzMz
MjA4YWIuLjM5OWViZWIxNWQ2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdEVudW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdEVudW1zLmgKQEAgLTYxLDEwICs2MSw0IEBAIGVudW0gTWFwQ29vcmRpbmF0ZXNNb2Rl
IHsKIH07CiB0eXBlZGVmIHVuc2lnbmVkIE1hcENvb3JkaW5hdGVzRmxhZ3M7CiAKLWVudW0gY2xh
c3MgQ2FyZXRSZWN0TW9kZSB7Ci0gICAgTm9ybWFsLAotICAgIEV4cGFuZFRvRW5kT2ZMaW5lCi19
OwotCi0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAppbmRleCA4NWUw
ODJhMGRhZjcuLjIxMGVkMjhjZTllMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcApAQCAtNjk5LDE4ICs2OTksNiBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dDo6
cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsIGNvbnN0IFJlbgogICAg
IHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24oMCwgQWZmaW5pdHk6OkRvd25zdHJlYW0pOwog
fQogCi1MYXlvdXRSZWN0IFJlbmRlclRleHQ6OmxvY2FsQ2FyZXRSZWN0KGNvbnN0IElubGluZVJ1
bkFuZE9mZnNldCYgcnVuQW5kT2Zmc2V0LCBDYXJldFJlY3RNb2RlIGNhcmV0UmVjdE1vZGUpIGNv
bnN0Ci17Ci0gICAgaWYgKCFydW5BbmRPZmZzZXQucnVuKQotICAgICAgICByZXR1cm4gTGF5b3V0
UmVjdCgpOwotCi0gICAgYXV0byYgdGV4dFJ1biA9IGRvd25jYXN0PExheW91dEludGVncmF0aW9u
OjpUZXh0UnVuSXRlcmF0b3I+KHJ1bkFuZE9mZnNldC5ydW4pOwotICAgIGF1dG8gbGluZSA9IHRl
eHRSdW4ubGluZSgpOwotCi0gICAgZmxvYXQgcG9zaXRpb24gPSB0ZXh0UnVuLT5wb3NpdGlvbkZv
ck9mZnNldChydW5BbmRPZmZzZXQub2Zmc2V0KTsKLSAgICByZXR1cm4gbGluZS0+Y29udGFpbmlu
Z0Jsb2NrKCkuY29tcHV0ZUNhcmV0UmVjdChsaW5lLT5zZWxlY3Rpb25SZWN0KCksIHBvc2l0aW9u
LCBjYXJldFdpZHRoLCBjYXJldFJlY3RNb2RlKTsKLX0KLQogQUxXQVlTX0lOTElORSBmbG9hdCBS
ZW5kZXJUZXh0Ojp3aWR0aEZyb21DYWNoZShjb25zdCBGb250Q2FzY2FkZSYgZiwgdW5zaWduZWQg
c3RhcnQsIHVuc2lnbmVkIGxlbiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBGb250Kj4qIGZh
bGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3csIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBpZiAoc3R5bGUuaGFzVGV4dENvbWJpbmUoKSAmJiBp
czxSZW5kZXJDb21iaW5lVGV4dD4oKnRoaXMpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHQuaAppbmRleCBiNWQyODU4OWNlYWMuLjZlNGE3MWUxN2U2ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dC5oCkBAIC0yMDMsNyArMjAzLDYgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUpIGZpbmFsOwogICAgIExheW91
dFJlY3Qgc2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCA9IHRydWUpIGZp
bmFsOwotICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zm
c2V0JiwgQ2FyZXRSZWN0TW9kZSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgTGF5b3V0UmVjdCBjbGlw
cGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBy
ZXBhaW50Q29udGFpbmVyKSBjb25zdCBmaW5hbDsKIAogICAgIHZvaWQgY29tcHV0ZVByZWZlcnJl
ZExvZ2ljYWxXaWR0aHMoZmxvYXQgbGVhZFdpZHRoLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiYgZmFs
bGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKaW5kZXggZmJjYThmMzJjNGZhLi5m
ZGZiOTU4ZTc1ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHSW5saW5lVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdJbmxpbmVUZXh0LmNwcApAQCAtMTE5LDMwICsxMTksNiBAQCBzdGQ6OnVuaXF1ZV9w
dHI8SW5saW5lVGV4dEJveD4gUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y3JlYXRlVGV4dEJveCgpCiAg
ICAgcmV0dXJuIGJveDsgCiB9CiAKLUxheW91dFJlY3QgUmVuZGVyU1ZHSW5saW5lVGV4dDo6bG9j
YWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiBydW5BbmRPZmZzZXQsIENhcmV0
UmVjdE1vZGUpIGNvbnN0Ci17Ci0gICAgYXV0byogYm94ID0gcnVuQW5kT2Zmc2V0LnJ1biA/IHJ1
bkFuZE9mZnNldC5ydW4tPmxlZ2FjeUlubGluZUJveCgpIDogbnVsbHB0cjsKLSAgICBhdXRvIGNh
cmV0T2Zmc2V0ID0gcnVuQW5kT2Zmc2V0Lm9mZnNldDsKLQotICAgIGlmICghaXM8SW5saW5lVGV4
dEJveD4oYm94KSkKLSAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKLQotICAgIGF1dG8mIHRl
eHRCb3ggPSBkb3duY2FzdDxJbmxpbmVUZXh0Qm94PigqYm94KTsKLSAgICBpZiAoY2FyZXRPZmZz
ZXQgPCB0ZXh0Qm94LnN0YXJ0KCkgfHwgY2FyZXRPZmZzZXQgPiB0ZXh0Qm94LnN0YXJ0KCkgKyB0
ZXh0Qm94LmxlbigpKQotICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwotCi0gICAgLy8gVXNl
IHRoZSBlZGdlIG9mIHRoZSBzZWxlY3Rpb24gcmVjdCB0byBkZXRlcm1pbmUgdGhlIGNhcmV0IHJl
Y3QuCi0gICAgaWYgKGNhcmV0T2Zmc2V0IDwgdGV4dEJveC5zdGFydCgpICsgdGV4dEJveC5sZW4o
KSkgewotICAgICAgICBMYXlvdXRSZWN0IHJlY3QgPSB0ZXh0Qm94LmxvY2FsU2VsZWN0aW9uUmVj
dChjYXJldE9mZnNldCwgY2FyZXRPZmZzZXQgKyAxKTsKLSAgICAgICAgTGF5b3V0VW5pdCB4ID0g
dGV4dEJveC5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyByZWN0LngoKSA6IHJlY3QubWF4WCgp
OwotICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCh4LCByZWN0LnkoKSwgY2FyZXRXaWR0aCwgcmVj
dC5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgTGF5b3V0UmVjdCByZWN0ID0gdGV4dEJveC5sb2Nh
bFNlbGVjdGlvblJlY3QoY2FyZXRPZmZzZXQgLSAxLCBjYXJldE9mZnNldCk7Ci0gICAgTGF5b3V0
VW5pdCB4ID0gdGV4dEJveC5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyByZWN0Lm1heFgoKSA6
IHJlY3QueCgpOwotICAgIHJldHVybiBMYXlvdXRSZWN0KHgsIHJlY3QueSgpLCBjYXJldFdpZHRo
LCByZWN0LmhlaWdodCgpKTsKLX0KLQogRmxvYXRSZWN0IFJlbmRlclNWR0lubGluZVRleHQ6OmZs
b2F0TGluZXNCb3VuZGluZ0JveCgpIGNvbnN0CiB7CiAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxp
bmVUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRl
eHQuaAppbmRleCBiYjJlYWZlY2U1ZTcuLjI4ZTk1YTBiYjRiZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgKQEAgLTYyLDcgKzYy
LDYgQEAgcHJpdmF0ZToKICAgICBib29sIGlzU1ZHSW5saW5lVGV4dCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50
KGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKSBvdmVy
cmlkZTsKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9m
ZnNldCYsIENhcmV0UmVjdE1vZGUpIGNvbnN0IG92ZXJyaWRlOwogICAgIEludFJlY3QgbGluZXNC
b3VuZGluZ0JveCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVU
ZXh0Qm94PiBjcmVhdGVUZXh0Qm94KCkgb3ZlcnJpZGU7CiAK
</data>
<flag name="review"
          id="431957"
          type_id="1"
          status="+"
          setter="zalan"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414948</attachid>
            <date>2020-11-27 09:01:59 -0800</date>
            <delta_ts>2020-11-28 10:23:13 -0800</delta_ts>
            <desc>patch</desc>
            <filename>caret-rect-out-from-renderobject-3.patch</filename>
            <type>text/plain</type>
            <size>48362</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzMjNhYjZiNGU2YzQuLjcxODEzOGE3ZTkwNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDYxIEBACisyMDIwLTExLTI3ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBNb3ZlIGNhcmV0IHJlY3QgY29tcHV0YXRpb24gb3V0IG9mIHJlbmRlciB0
cmVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTkz
MDQKKworICAgICAgICBSZXZpZXdlZCBieSBaYWxhbiBCdWp0YXMuCisKKyAgICAgICAgUmVkdWNl
IGNvZGUgcmFuZG9tbHkgc3ByaW5rbGVkIG9uIHJlbmRlcmVycyBieSBtb3ZpbmcgaXQgaW50byBz
dGFuZGFsb25lIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6
bG9jYWxDYXJldFJlY3RGb3JDaGFyYWN0ZXJPZmZzZXQpOgorICAgICAgICAqIGVkaXRpbmcvUmVu
ZGVyZWRQb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJlZFBvc2l0aW9uOjph
YnNvbHV0ZVJlY3QgY29uc3QpOgorICAgICAgICAqIGVkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5o
OgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlZpc2libGVQb3NpdGlvbjo6bG9jYWxDYXJldFJlY3QgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9DYXJldFJlY3RDb21wdXRhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZUNhcmV0UmVjdEZvckVtcHR5RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpj
b21wdXRlQ2FyZXRSZWN0Rm9yTGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1
dGVDYXJldFJlY3RGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVDYXJldFJlY3RG
b3JMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUNhcmV0UmVjdEZvclNWR0lu
bGluZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUNhcmV0UmVjdEZvckJveCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wdXRlQ2FyZXRSZWN0Rm9yQmxvY2spOgorICAgICAgICAoV2Vi
Q29yZTo6Y29tcHV0ZUNhcmV0UmVjdEZvcklubGluZSk6CisgICAgICAgIChXZWJDb3JlOjpjb21w
dXRlTG9jYWxDYXJldFJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9DYXJldFJlY3RDb21wdXRh
dGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQmxvY2tGbG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxv
dzo6Y29tcHV0ZUNhcmV0UmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJsb2NrRmxvdy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpsb2NhbENhcmV0UmVjdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hN
b2RlbE9iamVjdDo6bG9jYWxDYXJldFJlY3RGb3JFbXB0eUVsZW1lbnQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5s
aW5lOjpsb2NhbENhcmV0UmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlcklubGluZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGluZUJyZWFrOjpsb2NhbENhcmV0UmVjdCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0Ojpsb2NhbENhcmV0UmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3RF
bnVtcy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHQ6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHSW5saW5lVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbmxpbmVU
ZXh0Ojpsb2NhbENhcmV0UmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0Lmg6CisKIDIwMjAtMTEtMjIgIEFudHRpIEtvaXZpc3Rv
ICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0ludGVncmF0aW9uXSBDb252ZXJ0
IHNvbWUgcmVtYWluaW5nIElubGluZUJveCBhY2Nlc3MgdG8gdXNlIGlubGluZSBpdGVyYXRvcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAppbmRleCA3MjYyODkxZWNjNjMuLjUxMDNmM2MzNTgyYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKQEAgLTIxNTMsNiArMjE1Myw3IEBAIHJlbmRlcmluZy9CaWRpUnVuLmNwcAogcmVuZGVyaW5n
L0JvcmRlckVkZ2UuY3BwCiByZW5kZXJpbmcvQnJlYWtMaW5lcy5jcHAKIHJlbmRlcmluZy9DU1NG
aWx0ZXIuY3BwCityZW5kZXJpbmcvQ2FyZXRSZWN0Q29tcHV0YXRpb24uY3BwCiByZW5kZXJpbmcv
Q2xpcFJlY3QuY3BwCiByZW5kZXJpbmcvQ29tcGxleExpbmVMYXlvdXQuY3BwCiByZW5kZXJpbmcv
Q29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5MWQ3NGM3NDUyMjUuLjIyYjVhZGIwNjAz
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtNTE2MCw2ICs1MTYwLDcgQEAKIAkJRTRFOEI0RUMyMTZCNzlFNTAwQjg4MzREIC8q
IFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNEU4QjRFQTIxNkI3OUU1MDBCODgzNEQgLyogU3lzdGVtRm9u
dERhdGFiYXNlQ29yZVRleHQuaCAqLzsgfTsKIAkJRTRFOEI0RjUyMTZCOTU2NTAwQjg4MzREIC8q
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0RThCNEYyMjE2QjhCNjAwMEI4ODM0RCAvKiBGb250Q2FzY2FkZURl
c2NyaXB0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRTRFOTRENjEyMkZGMTU4QTAwREQxOTFGIC8qIENvbXBsZXhMaW5lTGF5b3V0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEExQUM3ODIyRkFG
RDUwMDAxN0I3NUIgLyogQ29tcGxleExpbmVMYXlvdXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFNEYwQkUzMTI1NzEyRjZFMDA5RTc0MzEgLyog
Q2FyZXRSZWN0Q29tcHV0YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0RjBCRTJFMjU3MTBBNzUwMDlFNzQzMSAvKiBDYXJldFJlY3RDb21wdXRh
dGlvbi5oICovOyB9OwogCQlFNEY5RUVGMzE1NkRBMDA3MDBEMjNFN0UgLyogU3R5bGVTaGVldENv
bnRlbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NEY5RUVGMTE1NkQ4NEM0MDBEMjNFN0UgLyogU3R5bGVTaGVldENvbnRlbnRzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTUwNjIwODQyNTQwOTE5
QzAwQzQzMDkxIC8qIENvbnRhY3RzUmVxdWVzdERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU1MDYyMDgzMjU0MDkxOUIwMEM0MzA5MSAvKiBDb250
YWN0c1JlcXVlc3REYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRTUxNjY5OTEyMEZGOTkxODAwOUQyQzI3IC8qIExpc3RCdXR0b25BcnJvd0Ay
eC5wbmcgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU1
MTY2OThGMjBGRjk5MTYwMDlEMkMyNyAvKiBMaXN0QnV0dG9uQXJyb3dAMngucG5nICovOyB9OwpA
QCAtMTYzMzUsNiArMTYzMzYsOCBAQAogCQlFNEU4QjRFRDIxNkI3OUY0MDBCODgzNEQgLyogU3lz
dGVtRm9udERhdGFiYXNlQ29yZVRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNEU4QjRGMDIxNkI4QjVGMDBCODgzNEQgLyogRm9udENhc2NhZGVEZXNj
cmlwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRFOEI0
RjIyMTZCOEI2MDAwQjg4MzREIC8qIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlFNEYwQkUyRTI1NzEwQTc1MDA5RTc0MzEgLyogQ2FyZXRS
ZWN0Q29tcHV0YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FyZXRS
ZWN0Q29tcHV0YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRGMEJFMzAy
NTcxMEE3NjAwOUU3NDMxIC8qIENhcmV0UmVjdENvbXB1dGF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhcmV0UmVjdENvbXB1dGF0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRGOUVFRjAxNTZEODRDNDAwRDIzRTdFIC8qIFN0eWxl
U2hlZXRDb250ZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
dHlsZVNoZWV0Q29udGVudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEY5
RUVGMTE1NkQ4NEM0MDBEMjNFN0UgLyogU3R5bGVTaGVldENvbnRlbnRzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlU2hlZXRDb250ZW50cy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNEZCNEIzNTIzOUJFQjEwMDAzQzMzNkEgLyogTGF5b3V0SW50ZWdy
YXRpb25JbmxpbmVDb250ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dEludGVncmF0
aW9uSW5saW5lQ29udGVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODAy
Miw3ICsxODAyNSw2IEBACiAJCQkJQTFDQzU2NEExRjQ2MTNCQjAwQTQ1NTVCIC8qIFBheW1lbnRS
ZXF1ZXN0ICovLAogCQkJCTFEMDAyNjlBMjM3NEI5RjgwMENBNkNERiAvKiBQaWN0dXJlSW5QaWN0
dXJlICovLAogCQkJCUE5RDI0N0Y5MEQ3NTdFNDEwMEZERjk1OSAvKiBQbHVnaW5zICovLAotCQkJ
CTg5RjYwQjE3MTU3RjZBMDIwMDc1RTE1NyAvKiBRdW90YSAqLywKIAkJCQlCQzk4NTQ0NjBDRDNE
QTVGMDAwNjlCQzEgLyogUmFuZ2VzICovLAogCQkJCUNEOEM2QzI0MjJGRERBNjQwMEE3MjBBQiAv
KiBSZW1vdGVQbGF5YmFjayAqLywKIAkJCQk1MTgyQzI0QzFGMzE0MjA5MDA1OUJBN0MgLyogU2Vy
dmljZVdvcmtlcnMgKi8sCkBAIC0yOTQ0Miw2ICsyOTQ0NCw4IEBACiAJCQkJNTg5NTU2RUMxOEQ0
QTQ0MDAwNzY0QjAzIC8qIEJvcmRlckVkZ2UuaCAqLywKIAkJCQlCQ0VBNDgxNTA5N0Q5MzAyMDA5
NEM5RTQgLyogQnJlYWtMaW5lcy5jcHAgKi8sCiAJCQkJQkNFQTQ4MTYwOTdEOTMwMjAwOTRDOUU0
IC8qIEJyZWFrTGluZXMuaCAqLywKKwkJCQlFNEYwQkUzMDI1NzEwQTc2MDA5RTc0MzEgLyogQ2Fy
ZXRSZWN0Q29tcHV0YXRpb24uY3BwICovLAorCQkJCUU0RjBCRTJFMjU3MTBBNzUwMDlFNzQzMSAv
KiBDYXJldFJlY3RDb21wdXRhdGlvbi5oICovLAogCQkJCUZCOTJERjQ5MTVGRUQwODcwMDk5NDQz
MyAvKiBDbGlwUGF0aE9wZXJhdGlvbi5oICovLAogCQkJCTU4MDM3MTVGMUE2NkYwMEEwMEJBRjUx
OSAvKiBDbGlwUmVjdC5jcHAgKi8sCiAJCQkJNTgwMzcxNjAxQTY2RjAwQTAwQkFGNTE5IC8qIENs
aXBSZWN0LmggKi8sCkBAIC0zNTEwOSw2ICszNTExMyw3IEBACiAJCQkJQTBFRTBERjgxNDRGODI1
NTAwRjgwQjBEIC8qIFdlYkdMRGVidWdTaGFkZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTNG
QUU4RjE0NzMzRkRCMDBFNDIzMDcgLyogV2ViR0xEZXB0aFRleHR1cmUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTVCMzA2OTVFMThCM0QzNDUwMDk5RDVFOCAvKiBXZWJHTERyYXdCdWZmZXJzLmggaW4g
SGVhZGVycyAqLywKKwkJCQlFNEYwQkUzMTI1NzEyRjZFMDA5RTc0MzEgLyogQ2FyZXRSZWN0Q29t
cHV0YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTZFQkYwRTU1MTJBODkyOTgwMERCMTcwOSAv
KiBXZWJHTEV4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlDN0I5Q0YxMDQyRDMyRjAw
MDlENDQ3IC8qIFdlYkdMRnJhbWVidWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RkZCRjNG
MTFDOTNFRTMwMDZBNzExOCAvKiBXZWJHTExheWVyLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4IDc2OWQxZTlm
ZGUxZC4uZmZiMjYwNTlhNzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5jcHAKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmls
aXR5VGFibGVSb3cuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VHJlZS5oIgogI2luY2x1ZGUg
IkFjY2Vzc2liaWxpdHlUcmVlSXRlbS5oIgorI2luY2x1ZGUgIkNhcmV0UmVjdENvbXB1dGF0aW9u
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFZGl0aW5nLmgiCiAjaW5jbHVk
ZSAiRWRpdG9yLmgiCkBAIC0yOTAyLDcgKzI5MDMsNyBAQCBMYXlvdXRSZWN0IEFYT2JqZWN0Q2Fj
aGU6OmxvY2FsQ2FyZXRSZWN0Rm9yQ2hhcmFjdGVyT2Zmc2V0KFJlbmRlck9iamVjdComIHJlbmRl
cgogICAgIGlmIChpczxSZW5kZXJMaW5lQnJlYWs+KHJlbmRlcmVyKSAmJiBMYXlvdXRJbnRlZ3Jh
dGlvbjo6cnVuRm9yKGRvd25jYXN0PFJlbmRlckxpbmVCcmVhaz4oKnJlbmRlcmVyKSkgIT0gcnVu
QW5kT2Zmc2V0LnJ1bikKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAotICAgIHJldHVybiBy
ZW5kZXJlci0+bG9jYWxDYXJldFJlY3QocnVuQW5kT2Zmc2V0KTsKKyAgICByZXR1cm4gY29tcHV0
ZUxvY2FsQ2FyZXRSZWN0KCpyZW5kZXJlciwgcnVuQW5kT2Zmc2V0KTsKIH0KIAogSW50UmVjdCBB
WE9iamVjdENhY2hlOjphYnNvbHV0ZUNhcmV0Qm91bmRzRm9yQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0
IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvUmVuZGVyZWRQb3NpdGlvbi5jcHAKaW5kZXggMjZkN2E4NTNmNDEwLi5kYWFkZGU5N2NlYTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmNwcApAQCAtMzEs
NiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlcmVkUG9zaXRp
b24uaCIKIAorI2luY2x1ZGUgIkNhcmV0UmVjdENvbXB1dGF0aW9uLmgiCiAjaW5jbHVkZSAiSW5s
aW5lUnVuQW5kT2Zmc2V0LmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUg
IlZpc2libGVQb3NpdGlvbi5oIgpAQCAtMjI2LDcgKzIyNyw3IEBAIEludFJlY3QgUmVuZGVyZWRQ
b3NpdGlvbjo6YWJzb2x1dGVSZWN0KENhcmV0UmVjdE1vZGUgY2FyZXRSZWN0TW9kZSkgY29uc3QK
ICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKLSAgICBJbnRS
ZWN0IGxvY2FsUmVjdCA9IHNuYXBwZWRJbnRSZWN0KG1fcmVuZGVyZXItPmxvY2FsQ2FyZXRSZWN0
KHsgbV9ydW4sIG1fb2Zmc2V0IH0sIGNhcmV0UmVjdE1vZGUpKTsKKyAgICBJbnRSZWN0IGxvY2Fs
UmVjdCA9IHNuYXBwZWRJbnRSZWN0KGNvbXB1dGVMb2NhbENhcmV0UmVjdCgqbV9yZW5kZXJlciwg
eyBtX3J1biwgbV9vZmZzZXQgfSwgY2FyZXRSZWN0TW9kZSkpOwogICAgIHJldHVybiBsb2NhbFJl
Y3QgPT0gSW50UmVjdCgpID8gSW50UmVjdCgpIDogbV9yZW5kZXJlci0+bG9jYWxUb0Fic29sdXRl
UXVhZChGbG9hdFJlY3QobG9jYWxSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uaAppbmRleCAzN2Y5YjFjZTY4
ZGEuLmFjYWM4MGU2Y2VmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW5k
ZXJlZFBvc2l0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0
aW9uLmgKQEAgLTMwLDYgKzMwLDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDYXJl
dFJlY3RDb21wdXRhdGlvbi5oIgogI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIgogI2luY2x1
ZGUgIlRleHRBZmZpbml0eS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9W
aXNpYmxlUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRp
b24uY3BwCmluZGV4IDU5YTVmZDY3OWRjYy4uZTBmMTM0ODg2NjE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVk
ZSAiVmlzaWJsZVBvc2l0aW9uLmgiCiAKICNpbmNsdWRlICJCb3VuZGFyeVBvaW50LmgiCisjaW5j
bHVkZSAiQ2FyZXRSZWN0Q29tcHV0YXRpb24uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIkVkaXRpbmcuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKQEAgLTY0Myw3ICs2NDQs
NyBAQCBhdXRvIFZpc2libGVQb3NpdGlvbjo6bG9jYWxDYXJldFJlY3QoKSBjb25zdCAtPiBMb2Nh
bENhcmV0UmVjdAogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICByZXR1cm4geyByZW5kZXJlci0+bG9jYWxDYXJldFJlY3QocnVuQW5kT2Zmc2V0KSwgY29uc3Rf
Y2FzdDxSZW5kZXJPYmplY3QqPihyZW5kZXJlcikgfTsKKyAgICByZXR1cm4geyBjb21wdXRlTG9j
YWxDYXJldFJlY3QoKnJlbmRlcmVyLCBydW5BbmRPZmZzZXQpLCBjb25zdF9jYXN0PFJlbmRlck9i
amVjdCo+KHJlbmRlcmVyKSB9OwogfQogCiBJbnRSZWN0IFZpc2libGVQb3NpdGlvbjo6YWJzb2x1
dGVDYXJldEJvdW5kcyhib29sKiBpbnNpZGVGaXhlZCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9DYXJldFJlY3RDb21wdXRhdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvQ2FyZXRSZWN0Q29tcHV0YXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZDM3MjY3MGVjMTIyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NhcmV0UmVjdENvbXB1dGF0aW9uLmNwcApAQCAtMCww
ICsxLDMxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJD
YXJldFJlY3RDb21wdXRhdGlvbi5oIgorCisjaW5jbHVkZSAiRWRpdGluZy5oIgorI2luY2x1ZGUg
IkxheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiTGF5b3V0SW50ZWdy
YXRpb25SdW5JdGVyYXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgorI2luY2x1
ZGUgIlJlbmRlcklubGluZS5oIgorI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgorI2luY2x1
ZGUgIlJlbmRlclNWR0lubGluZVRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIExheW91dFJlY3QgY29tcHV0ZUNhcmV0UmVjdEZv
ckVtcHR5RWxlbWVudChjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgcmVuZGVyZXIsIExheW91
dFVuaXQgd2lkdGgsIExheW91dFVuaXQgdGV4dEluZGVudE9mZnNldCwgQ2FyZXRSZWN0TW9kZSBj
YXJldFJlY3RNb2RlKQoreworICAgIEFTU0VSVCghcmVuZGVyZXIuZmlyc3RDaGlsZCgpKTsKKwor
ICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50IGVpdGhlciA6Zmly
c3QtbGluZSBvciA6Zmlyc3QtbGV0dGVyCisgICAgLy8gSG93ZXZlciwgYXMgc29vbiBhcyBzb21l
IGNvbnRlbnQgaXMgZW50ZXJlZCwgdGhlIGxpbmUgYm94ZXMgd2lsbCBiZQorICAgIC8vIGNvbnN0
cnVjdGVkIGFuZCB0aGlzIGtsdWRnZSBpcyBub3QgY2FsbGVkIGFueSBtb3JlLiBTbyBvbmx5IHRo
ZSBjYXJldCBzaXplCisgICAgLy8gb2YgYW4gZW1wdHkgOmZpcnN0LWxpbmUnZCBibG9jayBpcyB3
cm9uZy4gSSB0aGluayB3ZSBjYW4gbGl2ZSB3aXRoIHRoYXQuCisgICAgY29uc3QgUmVuZGVyU3R5
bGUmIGN1cnJlbnRTdHlsZSA9IHJlbmRlcmVyLmZpcnN0TGluZVN0eWxlKCk7CisKKyAgICBlbnVt
IENhcmV0QWxpZ25tZW50IHsgQWxpZ25MZWZ0LCBBbGlnblJpZ2h0LCBBbGlnbkNlbnRlciB9Owor
CisgICAgQ2FyZXRBbGlnbm1lbnQgYWxpZ25tZW50ID0gQWxpZ25MZWZ0OworCisgICAgc3dpdGNo
IChjdXJyZW50U3R5bGUudGV4dEFsaWduKCkpIHsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okxl
ZnQ6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgorICAgICAgICBicmVhazsK
KyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRlcjoKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6
OldlYktpdENlbnRlcjoKKyAgICAgICAgYWxpZ25tZW50ID0gQWxpZ25DZW50ZXI7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6CisgICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpXZWJLaXRSaWdodDoKKyAgICAgICAgYWxpZ25tZW50ID0gQWxpZ25SaWdodDsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OgorICAgIGNhc2Ug
VGV4dEFsaWduTW9kZTo6U3RhcnQ6CisgICAgICAgIGlmICghY3VycmVudFN0eWxlLmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSkKKyAgICAgICAgICAgIGFsaWdubWVudCA9IEFsaWduUmlnaHQ7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5kOgorICAgICAgICBpZiAo
Y3VycmVudFN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKKyAgICAgICAgICAgIGFsaWdu
bWVudCA9IEFsaWduUmlnaHQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIExheW91dFVu
aXQgeCA9IHJlbmRlcmVyLmJvcmRlckxlZnQoKSArIHJlbmRlcmVyLnBhZGRpbmdMZWZ0KCk7Cisg
ICAgTGF5b3V0VW5pdCBtYXhYID0gd2lkdGggLSByZW5kZXJlci5ib3JkZXJSaWdodCgpIC0gcmVu
ZGVyZXIucGFkZGluZ1JpZ2h0KCk7CisKKyAgICBzd2l0Y2ggKGFsaWdubWVudCkgeworICAgIGNh
c2UgQWxpZ25MZWZ0OgorICAgICAgICBpZiAoY3VycmVudFN0eWxlLmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSkKKyAgICAgICAgICAgIHggKz0gdGV4dEluZGVudE9mZnNldDsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBbGlnbkNlbnRlcjoKKyAgICAgICAgeCA9ICh4ICsgbWF4WCkgLyAyOwor
ICAgICAgICBpZiAoY3VycmVudFN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKKyAgICAg
ICAgICAgIHggKz0gdGV4dEluZGVudE9mZnNldCAvIDI7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHggLT0gdGV4dEluZGVudE9mZnNldCAvIDI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWxpZ25SaWdodDoKKyAgICAgICAgeCA9IG1heFggLSBjYXJldFdpZHRoOworICAgICAgICBpZiAo
IWN1cnJlbnRTdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCisgICAgICAgICAgICB4IC09
IHRleHRJbmRlbnRPZmZzZXQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB4ID0gc3RkOjpt
aW4oeCwgc3RkOjptYXg8TGF5b3V0VW5pdD4obWF4WCAtIGNhcmV0V2lkdGgsIDApKTsKKworICAg
IGF1dG8gbGluZUhlaWdodCA9IHJlbmRlcmVyLmxpbmVIZWlnaHQodHJ1ZSwgY3VycmVudFN0eWxl
LmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGlu
ZSwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKTsKKyAgICBhdXRvIGhlaWdodCA9IHN0ZDo6
bWluKGxpbmVIZWlnaHQsIExheW91dFVuaXQgeyBjdXJyZW50U3R5bGUuZm9udE1ldHJpY3MoKS5o
ZWlnaHQoKSB9KTsKKyAgICBhdXRvIHkgPSByZW5kZXJlci5wYWRkaW5nVG9wKCkgKyByZW5kZXJl
ci5ib3JkZXJUb3AoKSArIChsaW5lSGVpZ2h0ID4gaGVpZ2h0ID8gKGxpbmVIZWlnaHQgLSBoZWln
aHQpIC8gMiA6IExheW91dFVuaXQgeyB9KTsKKworICAgIGF1dG8gcmVjdCA9IExheW91dFJlY3Qo
eCwgeSwgY2FyZXRXaWR0aCwgaGVpZ2h0KTsKKworICAgIGlmIChjYXJldFJlY3RNb2RlID09IENh
cmV0UmVjdE1vZGU6OkV4cGFuZFRvRW5kT2ZMaW5lKQorICAgICAgICByZWN0LnNoaWZ0TWF4WEVk
Z2VUbyh3aWR0aCk7CisKKyAgICByZXR1cm4gY3VycmVudFN0eWxlLmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyByZWN0IDogcmVjdC50cmFuc3Bvc2VkUmVjdCgpOworfQorCitzdGF0aWMgTGF5
b3V0UmVjdCBjb21wdXRlQ2FyZXRSZWN0Rm9yTGluZVBvc2l0aW9uKGNvbnN0IExheW91dEludGVn
cmF0aW9uOjpMaW5lSXRlcmF0b3ImIGxpbmUsIGZsb2F0IGxvZ2ljYWxMZWZ0UG9zaXRpb24sIENh
cmV0UmVjdE1vZGUgY2FyZXRSZWN0TW9kZSkKK3sKKyAgICBhdXRvJiBjb250YWluaW5nQmxvY2sg
PSBsaW5lLT5jb250YWluaW5nQmxvY2soKTsKKyAgICBhdXRvIGxpbmVTZWxlY3Rpb25SZWN0ID0g
bGluZS0+c2VsZWN0aW9uUmVjdCgpOworCisgICAgaW50IGhlaWdodCA9IGxpbmVTZWxlY3Rpb25S
ZWN0LmhlaWdodCgpOworICAgIGludCB0b3AgPSBsaW5lU2VsZWN0aW9uUmVjdC55KCk7CisKKyAg
ICAvLyBEaXN0cmlidXRlIHRoZSBjYXJldCdzIHdpZHRoIHRvIGVpdGhlciBzaWRlIG9mIHRoZSBv
ZmZzZXQuCisgICAgZmxvYXQgbGVmdCA9IGxvZ2ljYWxMZWZ0UG9zaXRpb247CisgICAgaW50IGNh
cmV0V2lkdGhMZWZ0T2ZPZmZzZXQgPSBjYXJldFdpZHRoIC8gMjsKKyAgICBsZWZ0IC09IGNhcmV0
V2lkdGhMZWZ0T2ZPZmZzZXQ7CisgICAgaW50IGNhcmV0V2lkdGhSaWdodE9mT2Zmc2V0ID0gY2Fy
ZXRXaWR0aCAtIGNhcmV0V2lkdGhMZWZ0T2ZPZmZzZXQ7CisgICAgbGVmdCA9IHJvdW5kZihsZWZ0
KTsKKworICAgIGZsb2F0IGxpbmVMZWZ0ID0gbGluZVNlbGVjdGlvblJlY3QueCgpOworICAgIGZs
b2F0IGxpbmVSaWdodCA9IGxpbmVTZWxlY3Rpb25SZWN0Lm1heFgoKTsKKworICAgIGJvb2wgcmln
aHRBbGlnbmVkID0gZmFsc2U7CisgICAgc3dpdGNoIChjb250YWluaW5nQmxvY2suc3R5bGUoKS50
ZXh0QWxpZ24oKSkgeworICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6CisgICAgY2FzZSBU
ZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodDoKKyAgICAgICAgcmlnaHRBbGlnbmVkID0gdHJ1ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpMZWZ0OgorICAgIGNhc2Ug
VGV4dEFsaWduTW9kZTo6V2ViS2l0TGVmdDoKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRl
cjoKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdENlbnRlcjoKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OgorICAgIGNhc2UgVGV4dEFsaWduTW9k
ZTo6U3RhcnQ6CisgICAgICAgIHJpZ2h0QWxpZ25lZCA9ICFjb250YWluaW5nQmxvY2suc3R5bGUo
KS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4
dEFsaWduTW9kZTo6RW5kOgorICAgICAgICByaWdodEFsaWduZWQgPSBjb250YWluaW5nQmxvY2su
c3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGZsb2F0IGxlZnRFZGdlID0gc3RkOjptaW48ZmxvYXQ+KDAsIGxpbmVMZWZ0KTsKKyAg
ICBmbG9hdCByaWdodEVkZ2UgPSBzdGQ6Om1heDxmbG9hdD4oY29udGFpbmluZ0Jsb2NrLmxvZ2lj
YWxXaWR0aCgpLCBsaW5lUmlnaHQpOworCisgICAgaWYgKHJpZ2h0QWxpZ25lZCkgeworICAgICAg
ICBsZWZ0ID0gc3RkOjptYXgobGVmdCwgbGVmdEVkZ2UpOworICAgICAgICBsZWZ0ID0gc3RkOjpt
aW4obGVmdCwgbGluZVJpZ2h0IC0gY2FyZXRXaWR0aCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bGVmdCA9IHN0ZDo6bWluKGxlZnQsIHJpZ2h0RWRnZSAtIGNhcmV0V2lkdGhSaWdodE9mT2Zmc2V0
KTsKKyAgICAgICAgbGVmdCA9IHN0ZDo6bWF4KGxlZnQsIGxpbmVMZWZ0KTsKKyAgICB9CisKKyAg
ICBhdXRvIHJlY3QgPSBJbnRSZWN0KGxlZnQsIHRvcCwgY2FyZXRXaWR0aCwgaGVpZ2h0KTsKKwor
ICAgIGlmIChjYXJldFJlY3RNb2RlID09IENhcmV0UmVjdE1vZGU6OkV4cGFuZFRvRW5kT2ZMaW5l
KQorICAgICAgICByZWN0LnNoaWZ0TWF4WEVkZ2VUbyhsaW5lUmlnaHQpOworCisgICAgcmV0dXJu
IGNvbnRhaW5pbmdCbG9jay5zdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyByZWN0
IDogcmVjdC50cmFuc3Bvc2VkUmVjdCgpOworfQorCitzdGF0aWMgTGF5b3V0UmVjdCBjb21wdXRl
Q2FyZXRSZWN0Rm9yVGV4dChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmIHJ1bkFuZE9mZnNldCwg
Q2FyZXRSZWN0TW9kZSBjYXJldFJlY3RNb2RlKQoreworICAgIGlmICghcnVuQW5kT2Zmc2V0LnJ1
bikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8mIHRleHRSdW4gPSBkb3duY2FzdDxM
YXlvdXRJbnRlZ3JhdGlvbjo6VGV4dFJ1bkl0ZXJhdG9yPihydW5BbmRPZmZzZXQucnVuKTsKKyAg
ICBhdXRvIGxpbmUgPSB0ZXh0UnVuLmxpbmUoKTsKKworICAgIGZsb2F0IHBvc2l0aW9uID0gdGV4
dFJ1bi0+cG9zaXRpb25Gb3JPZmZzZXQocnVuQW5kT2Zmc2V0Lm9mZnNldCk7CisgICAgcmV0dXJu
IGNvbXB1dGVDYXJldFJlY3RGb3JMaW5lUG9zaXRpb24obGluZSwgcG9zaXRpb24sIGNhcmV0UmVj
dE1vZGUpOworfQorCitzdGF0aWMgTGF5b3V0UmVjdCBjb21wdXRlQ2FyZXRSZWN0Rm9yTGluZUJy
ZWFrKGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYgcnVuQW5kT2Zmc2V0LCBDYXJldFJlY3RNb2Rl
IGNhcmV0UmVjdE1vZGUpCit7CisgICAgQVNTRVJUKCFydW5BbmRPZmZzZXQub2Zmc2V0KTsKKwor
ICAgIGlmICghcnVuQW5kT2Zmc2V0LnJ1bikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1
dG8gbGluZSA9IHJ1bkFuZE9mZnNldC5ydW4ubGluZSgpOworICAgIHJldHVybiBjb21wdXRlQ2Fy
ZXRSZWN0Rm9yTGluZVBvc2l0aW9uKGxpbmUsIGxpbmUtPmNvbnRlbnRMb2dpY2FsTGVmdCgpLCBj
YXJldFJlY3RNb2RlKTsKK30KKworc3RhdGljIExheW91dFJlY3QgY29tcHV0ZUNhcmV0UmVjdEZv
clNWR0lubGluZVRleHQoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiBydW5BbmRPZmZzZXQsIENh
cmV0UmVjdE1vZGUpCit7CisgICAgYXV0byogYm94ID0gcnVuQW5kT2Zmc2V0LnJ1biA/IHJ1bkFu
ZE9mZnNldC5ydW4tPmxlZ2FjeUlubGluZUJveCgpIDogbnVsbHB0cjsKKyAgICBhdXRvIGNhcmV0
T2Zmc2V0ID0gcnVuQW5kT2Zmc2V0Lm9mZnNldDsKKworICAgIGlmICghaXM8SW5saW5lVGV4dEJv
eD4oYm94KSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8mIHRleHRCb3ggPSBkb3du
Y2FzdDxJbmxpbmVUZXh0Qm94PigqYm94KTsKKyAgICBpZiAoY2FyZXRPZmZzZXQgPCB0ZXh0Qm94
LnN0YXJ0KCkgfHwgY2FyZXRPZmZzZXQgPiB0ZXh0Qm94LnN0YXJ0KCkgKyB0ZXh0Qm94Lmxlbigp
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgLy8gVXNlIHRoZSBlZGdlIG9mIHRoZSBzZWxl
Y3Rpb24gcmVjdCB0byBkZXRlcm1pbmUgdGhlIGNhcmV0IHJlY3QuCisgICAgaWYgKGNhcmV0T2Zm
c2V0IDwgdGV4dEJveC5zdGFydCgpICsgdGV4dEJveC5sZW4oKSkgeworICAgICAgICBMYXlvdXRS
ZWN0IHJlY3QgPSB0ZXh0Qm94LmxvY2FsU2VsZWN0aW9uUmVjdChjYXJldE9mZnNldCwgY2FyZXRP
ZmZzZXQgKyAxKTsKKyAgICAgICAgTGF5b3V0VW5pdCB4ID0gdGV4dEJveC5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkgPyByZWN0LngoKSA6IHJlY3QubWF4WCgpOworICAgICAgICByZXR1cm4gTGF5
b3V0UmVjdCh4LCByZWN0LnkoKSwgY2FyZXRXaWR0aCwgcmVjdC5oZWlnaHQoKSk7CisgICAgfQor
CisgICAgTGF5b3V0UmVjdCByZWN0ID0gdGV4dEJveC5sb2NhbFNlbGVjdGlvblJlY3QoY2FyZXRP
ZmZzZXQgLSAxLCBjYXJldE9mZnNldCk7CisgICAgTGF5b3V0VW5pdCB4ID0gdGV4dEJveC5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyByZWN0Lm1heFgoKSA6IHJlY3QueCgpOworICAgIHJldHVy
biB7IHgsIHJlY3QueSgpLCBjYXJldFdpZHRoLCByZWN0LmhlaWdodCgpIH07Cit9CisKK3N0YXRp
YyBMYXlvdXRSZWN0IGNvbXB1dGVDYXJldFJlY3RGb3JCb3goY29uc3QgUmVuZGVyQm94JiByZW5k
ZXJlciwgY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiBydW5BbmRPZmZzZXQsIENhcmV0UmVjdE1v
ZGUgY2FyZXRSZWN0TW9kZSkKK3sKKyAgICAvLyBWaXNpYmxlUG9zaXRpb25zIGF0IG9mZnNldHMg
aW5zaWRlIGNvbnRhaW5lcnMgZWl0aGVyIGEpIHJlZmVyIHRvIHRoZSBwb3NpdGlvbnMgYmVmb3Jl
L2FmdGVyCisgICAgLy8gdGhvc2UgY29udGFpbmVycyAodGFibGVzIGFuZCBzZWxlY3QgZWxlbWVu
dHMpIG9yIGIpIHJlZmVyIHRvIHRoZSBwb3NpdGlvbiBpbnNpZGUgYW4gZW1wdHkgYmxvY2suCisg
ICAgLy8gVGhleSBuZXZlciByZWZlciB0byBjaGlsZHJlbi4KKyAgICAvLyBGSVhNRTogUGFpbnQg
dGhlIGNhcmV0cyBpbnNpZGUgZW1wdHkgYmxvY2tzIGRpZmZlcmVudGx5IHRoYW4gdGhlIGNhcmV0
cyBiZWZvcmUvYWZ0ZXIgZWxlbWVudHMuCisKKyAgICBMYXlvdXRSZWN0IHJlY3QocmVuZGVyZXIu
bG9jYXRpb24oKSwgTGF5b3V0U2l6ZShjYXJldFdpZHRoLCByZW5kZXJlci5oZWlnaHQoKSkpOwor
ICAgIGJvb2wgbHRyID0gcnVuQW5kT2Zmc2V0LnJ1biA/IHJ1bkFuZE9mZnNldC5ydW4tPmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSA6IHJlbmRlcmVyLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpOworCisgICAgaWYgKCghcnVuQW5kT2Zmc2V0Lm9mZnNldCkgXiBsdHIpCisgICAgICAg
IHJlY3QubW92ZShMYXlvdXRTaXplKHJlbmRlcmVyLndpZHRoKCkgLSBjYXJldFdpZHRoLCAwX2x1
KSk7CisKKyAgICBpZiAocnVuQW5kT2Zmc2V0LnJ1bikgeworICAgICAgICBhdXRvIGxpbmUgPSBy
dW5BbmRPZmZzZXQucnVuLmxpbmUoKTsKKyAgICAgICAgTGF5b3V0VW5pdCB0b3AgPSBsaW5lLT50
b3AoKTsKKyAgICAgICAgcmVjdC5zZXRZKHRvcCk7CisgICAgICAgIHJlY3Quc2V0SGVpZ2h0KGxp
bmUtPmJvdHRvbSgpIC0gdG9wKTsKKyAgICB9CisKKyAgICAvLyBJZiBoZWlnaHQgb2YgYm94IGlz
IHNtYWxsZXIgdGhhbiBmb250IGhlaWdodCwgdXNlIHRoZSBsYXR0ZXIgb25lLAorICAgIC8vIG90
aGVyd2lzZSB0aGUgY2FyZXQgbWlnaHQgYmVjb21lIGludmlzaWJsZS4KKyAgICAvLworICAgIC8v
IEFsc28sIGlmIHRoZSBib3ggaXMgbm90IGEgcmVwbGFjZWQgZWxlbWVudCwgYWx3YXlzIHVzZSB0
aGUgZm9udCBoZWlnaHQuCisgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgImJpZyBjYXJldCIgYnVn
IGRlc2NyaWJlZCBpbjoKKyAgICAvLyA8cmRhcjovL3Byb2JsZW0vMzc3NzgwND4gRGVsZXRpbmcg
YWxsIGNvbnRlbnQgaW4gYSBkb2N1bWVudCBjYW4gcmVzdWx0IGluIGdpYW50IHRhbGwtYXMtd2lu
ZG93IGluc2VydGlvbiBwb2ludAorICAgIC8vCisgICAgLy8gRklYTUU6IGlnbm9yaW5nIDpmaXJz
dC1saW5lLCBtaXNzaW5nIGdvb2QgcmVhc29uIHRvIHRha2UgY2FyZSBvZgorICAgIExheW91dFVu
aXQgZm9udEhlaWdodCA9IHJlbmRlcmVyLnN0eWxlKCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsK
KyAgICBpZiAoZm9udEhlaWdodCA+IHJlY3QuaGVpZ2h0KCkgfHwgKCFyZW5kZXJlci5pc1JlcGxh
Y2VkKCkgJiYgIXJlbmRlcmVyLmlzVGFibGUoKSkpCisgICAgICAgIHJlY3Quc2V0SGVpZ2h0KGZv
bnRIZWlnaHQpOworCisgICAgLy8gTW92ZSB0byBsb2NhbCBjb29yZHMKKyAgICByZWN0Lm1vdmVC
eSgtcmVuZGVyZXIubG9jYXRpb24oKSk7CisKKyAgICAvLyBGSVhNRTogQm9yZGVyL3BhZGRpbmcg
c2hvdWxkIGJlIGFkZGVkIGZvciBhbGwgZWxlbWVudHMgYnV0IHRoaXMgd29ya2Fyb3VuZAorICAg
IC8vIGlzIG5lZWRlZCBiZWNhdXNlIHdlIHVzZSBvZmZzZXRzIGluc2lkZSBhbiAiYXRvbWljIiBl
bGVtZW50IHRvIHJlcHJlc2VudAorICAgIC8vIHBvc2l0aW9ucyBiZWZvcmUgYW5kIGFmdGVyIHRo
ZSBlbGVtZW50IGluIGRlcHJlY2F0ZWQgZWRpdGluZyBvZmZzZXRzLgorICAgIGlmIChyZW5kZXJl
ci5lbGVtZW50KCkgJiYgIShlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKnJlbmRlcmVyLmVsZW1lbnQo
KSkgfHwgaXNSZW5kZXJlZFRhYmxlKHJlbmRlcmVyLmVsZW1lbnQoKSkpKSB7CisgICAgICAgIHJl
Y3Quc2V0WChyZWN0LngoKSArIHJlbmRlcmVyLmJvcmRlckxlZnQoKSArIHJlbmRlcmVyLnBhZGRp
bmdMZWZ0KCkpOworICAgICAgICByZWN0LnNldFkocmVjdC55KCkgKyByZW5kZXJlci5wYWRkaW5n
VG9wKCkgKyByZW5kZXJlci5ib3JkZXJUb3AoKSk7CisgICAgfQorCisgICAgaWYgKGNhcmV0UmVj
dE1vZGUgPT0gQ2FyZXRSZWN0TW9kZTo6RXhwYW5kVG9FbmRPZkxpbmUpCisgICAgICAgIHJlY3Qu
c2hpZnRNYXhYRWRnZVRvKHJlbmRlcmVyLngoKSArIHJlbmRlcmVyLndpZHRoKCkpOworCisgICAg
cmV0dXJuIHJlbmRlcmVyLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyByZWN0IDogcmVjdC50
cmFuc3Bvc2VkUmVjdCgpOworfQorCitzdGF0aWMgTGF5b3V0UmVjdCBjb21wdXRlQ2FyZXRSZWN0
Rm9yQmxvY2soY29uc3QgUmVuZGVyQmxvY2smIHJlbmRlcmVyLCBjb25zdCBJbmxpbmVSdW5BbmRP
ZmZzZXQmIHJ1bkFuZE9mZnNldCwgQ2FyZXRSZWN0TW9kZSBjYXJldFJlY3RNb2RlKQoreworICAg
IC8vIERvIHRoZSBub3JtYWwgY2FsY3VsYXRpb24gaW4gbW9zdCBjYXNlcy4KKyAgICBpZiAocmVu
ZGVyZXIuZmlyc3RDaGlsZCgpKQorICAgICAgICByZXR1cm4gY29tcHV0ZUNhcmV0UmVjdEZvckJv
eChyZW5kZXJlciwgcnVuQW5kT2Zmc2V0LCBjYXJldFJlY3RNb2RlKTsKKworICAgIHJldHVybiBj
b21wdXRlQ2FyZXRSZWN0Rm9yRW1wdHlFbGVtZW50KHJlbmRlcmVyLCByZW5kZXJlci53aWR0aCgp
LCByZW5kZXJlci50ZXh0SW5kZW50T2Zmc2V0KCksIGNhcmV0UmVjdE1vZGUpOworfQorCitzdGF0
aWMgTGF5b3V0UmVjdCBjb21wdXRlQ2FyZXRSZWN0Rm9ySW5saW5lKGNvbnN0IFJlbmRlcklubGlu
ZSYgcmVuZGVyZXIpCit7CisgICAgaWYgKHJlbmRlcmVyLmZpcnN0Q2hpbGQoKSkgeworICAgICAg
ICAvLyBUaGlzIGNvbmRpdGlvbiBpcyBwb3NzaWJsZSBpZiB0aGUgUmVuZGVySW5saW5lIGlzIGF0
IGFuIGVkaXRpbmcgYm91bmRhcnksCisgICAgICAgIC8vIGkuZS4gdGhlIFZpc2libGVQb3NpdGlv
biBpczoKKyAgICAgICAgLy8gICA8UmVuZGVySW5saW5lIGVkaXRpbmdCb3VuZGFyeT10cnVlPnw8
UmVuZGVyVGV4dD4gPC9SZW5kZXJUZXh0PjwvUmVuZGVySW5saW5lPgorICAgICAgICAvLyBGSVhN
RTogbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBtYWtlIHRoaXMgcmV0dXJuIGEgdmFsaWQgcmVj
dCwgbm90ZSB0aGF0CisgICAgICAgIC8vIHRoZXJlIGFyZSBubyBsaW5lIGJveGVzIGNyZWF0ZWQg
aW4gdGhlIGFib3ZlIGNhc2UuCisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgTGF5
b3V0UmVjdCBjYXJldFJlY3QgPSBjb21wdXRlQ2FyZXRSZWN0Rm9yRW1wdHlFbGVtZW50KHJlbmRl
cmVyLCByZW5kZXJlci5ob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpLCAwLCBDYXJl
dFJlY3RNb2RlOjpOb3JtYWwpOworCisgICAgaWYgKElubGluZUJveCogZmlyc3RCb3ggPSByZW5k
ZXJlci5maXJzdExpbmVCb3goKSkKKyAgICAgICAgY2FyZXRSZWN0Lm1vdmVCeShMYXlvdXRQb2lu
dChmaXJzdEJveC0+dG9wTGVmdCgpKSk7CisKKyAgICByZXR1cm4gY2FyZXRSZWN0OworfQorCitM
YXlvdXRSZWN0IGNvbXB1dGVMb2NhbENhcmV0UmVjdChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRl
cmVyLCBjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmIHJ1bkFuZE9mZnNldCwgQ2FyZXRSZWN0TW9k
ZSBjYXJldFJlY3RNb2RlKQoreworICAgIGlmIChpczxSZW5kZXJTVkdJbmxpbmVUZXh0PihyZW5k
ZXJlcikpCisgICAgICAgIHJldHVybiBjb21wdXRlQ2FyZXRSZWN0Rm9yU1ZHSW5saW5lVGV4dChy
dW5BbmRPZmZzZXQsIGNhcmV0UmVjdE1vZGUpOworCisgICAgaWYgKGlzPFJlbmRlclRleHQ+KHJl
bmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVDYXJldFJlY3RGb3JUZXh0KHJ1bkFuZE9m
ZnNldCwgY2FyZXRSZWN0TW9kZSk7CisKKyAgICBpZiAoaXM8UmVuZGVyTGluZUJyZWFrPihyZW5k
ZXJlcikpCisgICAgICAgIHJldHVybiBjb21wdXRlQ2FyZXRSZWN0Rm9yTGluZUJyZWFrKHJ1bkFu
ZE9mZnNldCwgY2FyZXRSZWN0TW9kZSk7CisKKyAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRl
cmVyKSkKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVDYXJldFJlY3RGb3JCbG9jayhkb3duY2FzdDxS
ZW5kZXJCbG9jaz4ocmVuZGVyZXIpLCBydW5BbmRPZmZzZXQsIGNhcmV0UmVjdE1vZGUpOworCisg
ICAgaWYgKGlzPFJlbmRlckJveD4ocmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gY29tcHV0ZUNh
cmV0UmVjdEZvckJveChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKSwgcnVuQW5kT2Zmc2V0
LCBjYXJldFJlY3RNb2RlKTsKKworICAgIGlmIChpczxSZW5kZXJJbmxpbmU+KHJlbmRlcmVyKSkK
KyAgICAgICAgcmV0dXJuIGNvbXB1dGVDYXJldFJlY3RGb3JJbmxpbmUoZG93bmNhc3Q8UmVuZGVy
SW5saW5lPihyZW5kZXJlcikpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DYXJldFJlY3RDb21wdXRhdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NhcmV0UmVjdENvbXB1dGF0aW9uLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43MzYyYTg0M2IzZjUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ2FyZXRSZWN0Q29tcHV0YXRpb24uaApAQCAt
MCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbmxp
bmVSdW5BbmRPZmZzZXQuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3RFbnVtcy5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xhc3MgQ2FyZXRSZWN0TW9kZSB7CisgICAgTm9ybWFs
LAorICAgIEV4cGFuZFRvRW5kT2ZMaW5lCit9OworCitMYXlvdXRSZWN0IGNvbXB1dGVMb2NhbENh
cmV0UmVjdChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmLCBD
YXJldFJlY3RNb2RlID0gQ2FyZXRSZWN0TW9kZTo6Tm9ybWFsKTsKKworfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IGM4ZDgxZWYyNDg2Ni4uMzU4ZDY2Zjk4
NzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTI4NDEs
MTUgKzI4NDEsNiBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVIaXRUZXN0UmVzdWx0KEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmCiAgICAgfQogfQogCi1MYXlvdXRS
ZWN0IFJlbmRlckJsb2NrOjpsb2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQm
IHJ1bkFuZE9mZnNldCwgQ2FyZXRSZWN0TW9kZSBjYXJldFJlY3RNb2RlKSBjb25zdAotewotICAg
IC8vIERvIHRoZSBub3JtYWwgY2FsY3VsYXRpb24gaW4gbW9zdCBjYXNlcy4KLSAgICBpZiAoZmly
c3RDaGlsZCgpKQotICAgICAgICByZXR1cm4gUmVuZGVyQm94Ojpsb2NhbENhcmV0UmVjdChydW5B
bmRPZmZzZXQsIGNhcmV0UmVjdE1vZGUpOwotCi0gICAgcmV0dXJuIGxvY2FsQ2FyZXRSZWN0Rm9y
RW1wdHlFbGVtZW50KHdpZHRoKCksIHRleHRJbmRlbnRPZmZzZXQoKSwgY2FyZXRSZWN0TW9kZSk7
Ci19Ci0KIHZvaWQgUmVuZGVyQmxvY2s6OmFkZEZvY3VzUmluZ1JlY3RzRm9ySW5saW5lQ2hpbGRy
ZW4oVmVjdG9yPExheW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJM
YXllck1vZGVsT2JqZWN0KikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5kZXggN2QzNDE0YjRjNWYwLi5mOWIyZDk4ZGQ5
YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC00ODQsOCArNDg0
LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcGFpbnRDb250aW51YXRpb25PdXRsaW5lcyhQYWlu
dEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogCi0gICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0
UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmLCBDYXJldFJlY3RNb2RlKSBjb25zdCBmaW5h
bDsKLSAgICAKICAgICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFJlbW92ZSB2aXJ0dWFsaXphaW9uIHdo
ZW4gYWxsIGNhbGxlcnMgaGF2ZSBtb3ZlZCB0byBSZW5kZXJCbG9ja0Zsb3cKICAgICB2aXJ0dWFs
IFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50V2l0aElubGluZUNoaWxkcmVuKGNvbnN0
IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAppbmRleCBiYjIyZjM0ZmQz
ZjMuLmVlODQ4YjYyN2Y5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrRmxvdy5jcHAKQEAgLTQ0MzgsNTkgKzQ0MzgsNSBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6
Y29tcHV0ZUlubGluZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9naWNh
bAogICAgIG1heExvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZFdpZHRoKG1heExvZ2ljYWxXaWR0aCwg
aW5saW5lTWF4KTsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVDYXJl
dFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbGluZVNlbGVjdGlvblJlY3QsIGZsb2F0IGxvZ2ljYWxM
ZWZ0UG9zaXRpb24sIHVuc2lnbmVkIGNhcmV0V2lkdGgsIENhcmV0UmVjdE1vZGUgY2FyZXRSZWN0
TW9kZSkgY29uc3QKLXsKLSAgICBpbnQgaGVpZ2h0ID0gbGluZVNlbGVjdGlvblJlY3QuaGVpZ2h0
KCk7Ci0gICAgaW50IHRvcCA9IGxpbmVTZWxlY3Rpb25SZWN0LnkoKTsKLQotICAgIC8vIERpc3Ry
aWJ1dGUgdGhlIGNhcmV0J3Mgd2lkdGggdG8gZWl0aGVyIHNpZGUgb2YgdGhlIG9mZnNldC4KLSAg
ICBmbG9hdCBsZWZ0ID0gbG9naWNhbExlZnRQb3NpdGlvbjsKLSAgICBpbnQgY2FyZXRXaWR0aExl
ZnRPZk9mZnNldCA9IGNhcmV0V2lkdGggLyAyOwotICAgIGxlZnQgLT0gY2FyZXRXaWR0aExlZnRP
Zk9mZnNldDsKLSAgICBpbnQgY2FyZXRXaWR0aFJpZ2h0T2ZPZmZzZXQgPSBjYXJldFdpZHRoIC0g
Y2FyZXRXaWR0aExlZnRPZk9mZnNldDsKLSAgICBsZWZ0ID0gcm91bmRmKGxlZnQpOwotCi0gICAg
ZmxvYXQgbGluZUxlZnQgPSBsaW5lU2VsZWN0aW9uUmVjdC54KCk7Ci0gICAgZmxvYXQgbGluZVJp
Z2h0ID0gbGluZVNlbGVjdGlvblJlY3QubWF4WCgpOwotCi0gICAgYm9vbCByaWdodEFsaWduZWQg
PSBmYWxzZTsKLSAgICBzd2l0Y2ggKHN0eWxlKCkudGV4dEFsaWduKCkpIHsKLSAgICBjYXNlIFRl
eHRBbGlnbk1vZGU6OlJpZ2h0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQ6
Ci0gICAgICAgIHJpZ2h0QWxpZ25lZCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
VGV4dEFsaWduTW9kZTo6TGVmdDoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExlZnQ6
Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpDZW50ZXI6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2Rl
OjpXZWJLaXRDZW50ZXI6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6
SnVzdGlmeToKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlN0YXJ0OgotICAgICAgICByaWdodEFs
aWduZWQgPSAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5kOgotICAgICAgICByaWdodEFsaWduZWQgPSBz
dHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgZmxvYXQgbGVmdEVkZ2UgPSBzdGQ6Om1pbjxmbG9hdD4oMCwgbGluZUxlZnQpOwotICAg
IGZsb2F0IHJpZ2h0RWRnZSA9IHN0ZDo6bWF4PGZsb2F0Pihsb2dpY2FsV2lkdGgoKSwgbGluZVJp
Z2h0KTsKLQotICAgIGlmIChyaWdodEFsaWduZWQpIHsKLSAgICAgICAgbGVmdCA9IHN0ZDo6bWF4
KGxlZnQsIGxlZnRFZGdlKTsKLSAgICAgICAgbGVmdCA9IHN0ZDo6bWluKGxlZnQsIGxpbmVSaWdo
dCAtIGNhcmV0V2lkdGgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGxlZnQgPSBzdGQ6Om1pbihs
ZWZ0LCByaWdodEVkZ2UgLSBjYXJldFdpZHRoUmlnaHRPZk9mZnNldCk7Ci0gICAgICAgIGxlZnQg
PSBzdGQ6Om1heChsZWZ0LCBsaW5lTGVmdCk7Ci0gICAgfQotCi0gICAgYXV0byByZWN0ID0gSW50
UmVjdChsZWZ0LCB0b3AsIGNhcmV0V2lkdGgsIGhlaWdodCk7Ci0KLSAgICBpZiAoY2FyZXRSZWN0
TW9kZSA9PSBDYXJldFJlY3RNb2RlOjpFeHBhbmRUb0VuZE9mTGluZSkKLSAgICAgICAgcmVjdC5z
aGlmdE1heFhFZGdlVG8obGluZVJpZ2h0KTsKLQotICAgIHJldHVybiBzdHlsZSgpLmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyByZWN0IDogcmVjdC50cmFuc3Bvc2VkUmVjdCgpOwotfQotCiB9
CiAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrRmxvdy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrRmxvdy5oCmluZGV4IGRkNDNiYzFlOGFmZC4uM2Q5YjUxZjI4ODgwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCkBAIC0zOTgsNyArMzk4LDYgQEAgcHVi
bGljOgogICAgIHZvaWQgYWRkRmxvYXRzVG9OZXdQYXJlbnQoUmVuZGVyQmxvY2tGbG93JiB0b0Js
b2NrRmxvdykgY29uc3Q7CiAgICAgCiAgICAgTGF5b3V0VW5pdCBlbmRQYWRkaW5nV2lkdGhGb3JD
YXJldCgpIGNvbnN0OwotICAgIExheW91dFJlY3QgY29tcHV0ZUNhcmV0UmVjdChjb25zdCBMYXlv
dXRSZWN0JiBsaW5lU2VsZWN0aW9uUmVjdCwgZmxvYXQgbG9naWNhbExlZnRQb3NpdGlvbiwgdW5z
aWduZWQgY2FyZXRXaWR0aCwgQ2FyZXRSZWN0TW9kZSA9IENhcmV0UmVjdE1vZGU6Ok5vcm1hbCkg
Y29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBib29sIHNob3VsZFJlc2V0TG9naWNhbEhlaWdodEJl
Zm9yZUxheW91dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggMzA3ZjliMmM3ZjJmLi40MDY1MTlmMmM2NTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC00NDMyLDU1ICs0NDMy
LDYgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodFJlcGxh
Y2VkKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHUKICAgICBjb21wdXRlZFZhbHVlcy5tX3Bvc2l0
aW9uID0gbG9naWNhbFRvcFBvczsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvY2FsQ2Fy
ZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYgcnVuQW5kT2Zmc2V0LCBDYXJldFJlY3RN
b2RlIGNhcmV0UmVjdE1vZGUpIGNvbnN0Ci17Ci0gICAgLy8gVmlzaWJsZVBvc2l0aW9ucyBhdCBv
ZmZzZXRzIGluc2lkZSBjb250YWluZXJzIGVpdGhlciBhKSByZWZlciB0byB0aGUgcG9zaXRpb25z
IGJlZm9yZS9hZnRlcgotICAgIC8vIHRob3NlIGNvbnRhaW5lcnMgKHRhYmxlcyBhbmQgc2VsZWN0
IGVsZW1lbnRzKSBvciBiKSByZWZlciB0byB0aGUgcG9zaXRpb24gaW5zaWRlIGFuIGVtcHR5IGJs
b2NrLgotICAgIC8vIFRoZXkgbmV2ZXIgcmVmZXIgdG8gY2hpbGRyZW4uCi0gICAgLy8gRklYTUU6
IFBhaW50IHRoZSBjYXJldHMgaW5zaWRlIGVtcHR5IGJsb2NrcyBkaWZmZXJlbnRseSB0aGFuIHRo
ZSBjYXJldHMgYmVmb3JlL2FmdGVyIGVsZW1lbnRzLgotCi0gICAgTGF5b3V0UmVjdCByZWN0KGxv
Y2F0aW9uKCksIExheW91dFNpemUoY2FyZXRXaWR0aCwgaGVpZ2h0KCkpKTsKLSAgICBib29sIGx0
ciA9IHJ1bkFuZE9mZnNldC5ydW4gPyBydW5BbmRPZmZzZXQucnVuLT5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkgOiBzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLQotICAgIGlmICgo
IXJ1bkFuZE9mZnNldC5vZmZzZXQpIF4gbHRyKQotICAgICAgICByZWN0Lm1vdmUoTGF5b3V0U2l6
ZSh3aWR0aCgpIC0gY2FyZXRXaWR0aCwgMF9sdSkpOwotCi0gICAgaWYgKHJ1bkFuZE9mZnNldC5y
dW4pIHsKLSAgICAgICAgYXV0byBsaW5lID0gcnVuQW5kT2Zmc2V0LnJ1bi5saW5lKCk7Ci0gICAg
ICAgIExheW91dFVuaXQgdG9wID0gbGluZS0+dG9wKCk7Ci0gICAgICAgIHJlY3Quc2V0WSh0b3Ap
OwotICAgICAgICByZWN0LnNldEhlaWdodChsaW5lLT5ib3R0b20oKSAtIHRvcCk7Ci0gICAgfQot
Ci0gICAgLy8gSWYgaGVpZ2h0IG9mIGJveCBpcyBzbWFsbGVyIHRoYW4gZm9udCBoZWlnaHQsIHVz
ZSB0aGUgbGF0dGVyIG9uZSwKLSAgICAvLyBvdGhlcndpc2UgdGhlIGNhcmV0IG1pZ2h0IGJlY29t
ZSBpbnZpc2libGUuCi0gICAgLy8KLSAgICAvLyBBbHNvLCBpZiB0aGUgYm94IGlzIG5vdCBhIHJl
cGxhY2VkIGVsZW1lbnQsIGFsd2F5cyB1c2UgdGhlIGZvbnQgaGVpZ2h0LgotICAgIC8vIFRoaXMg
cHJldmVudHMgdGhlICJiaWcgY2FyZXQiIGJ1ZyBkZXNjcmliZWQgaW46Ci0gICAgLy8gPHJkYXI6
Ly9wcm9ibGVtLzM3Nzc4MDQ+IERlbGV0aW5nIGFsbCBjb250ZW50IGluIGEgZG9jdW1lbnQgY2Fu
IHJlc3VsdCBpbiBnaWFudCB0YWxsLWFzLXdpbmRvdyBpbnNlcnRpb24gcG9pbnQKLSAgICAvLwot
ICAgIC8vIEZJWE1FOiBpZ25vcmluZyA6Zmlyc3QtbGluZSwgbWlzc2luZyBnb29kIHJlYXNvbiB0
byB0YWtlIGNhcmUgb2YKLSAgICBMYXlvdXRVbml0IGZvbnRIZWlnaHQgPSBzdHlsZSgpLmZvbnRN
ZXRyaWNzKCkuaGVpZ2h0KCk7Ci0gICAgaWYgKGZvbnRIZWlnaHQgPiByZWN0LmhlaWdodCgpIHx8
ICghaXNSZXBsYWNlZCgpICYmICFpc1RhYmxlKCkpKQotICAgICAgICByZWN0LnNldEhlaWdodChm
b250SGVpZ2h0KTsKLQotICAgIC8vIE1vdmUgdG8gbG9jYWwgY29vcmRzCi0gICAgcmVjdC5tb3Zl
QnkoLWxvY2F0aW9uKCkpOwotCi0gICAgLy8gRklYTUU6IEJvcmRlci9wYWRkaW5nIHNob3VsZCBi
ZSBhZGRlZCBmb3IgYWxsIGVsZW1lbnRzIGJ1dCB0aGlzIHdvcmthcm91bmQKLSAgICAvLyBpcyBu
ZWVkZWQgYmVjYXVzZSB3ZSB1c2Ugb2Zmc2V0cyBpbnNpZGUgYW4gImF0b21pYyIgZWxlbWVudCB0
byByZXByZXNlbnQKLSAgICAvLyBwb3NpdGlvbnMgYmVmb3JlIGFuZCBhZnRlciB0aGUgZWxlbWVu
dCBpbiBkZXByZWNhdGVkIGVkaXRpbmcgb2Zmc2V0cy4KLSAgICBpZiAoZWxlbWVudCgpICYmICEo
ZWRpdGluZ0lnbm9yZXNDb250ZW50KCplbGVtZW50KCkpIHx8IGlzUmVuZGVyZWRUYWJsZShlbGVt
ZW50KCkpKSkgewotICAgICAgICByZWN0LnNldFgocmVjdC54KCkgKyBib3JkZXJMZWZ0KCkgKyBw
YWRkaW5nTGVmdCgpKTsKLSAgICAgICAgcmVjdC5zZXRZKHJlY3QueSgpICsgcGFkZGluZ1RvcCgp
ICsgYm9yZGVyVG9wKCkpOwotICAgIH0KLQotICAgIGlmIChjYXJldFJlY3RNb2RlID09IENhcmV0
UmVjdE1vZGU6OkV4cGFuZFRvRW5kT2ZMaW5lKQotICAgICAgICByZWN0LnNoaWZ0TWF4WEVkZ2VU
byh4KCkgKyB3aWR0aCgpKTsKLQotICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgp
ID8gcmVjdCA6IHJlY3QudHJhbnNwb3NlZFJlY3QoKTsKLX0KLQogVmlzaWJsZVBvc2l0aW9uIFJl
bmRlckJveDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsIGNvbnN0
IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCkKIHsKICAgICAvLyBubyBjaGlsZHJl
bi4uLnJldHVybiB0aGlzIHJlbmRlciBvYmplY3QncyBlbGVtZW50LCBpZiB0aGVyZSBpcyBvbmUs
IGFuZCBvZmZzZXQgMApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCmluZGV4IDNjZDgw
YmNkMDcyZC4uMTAyNTkyNTQ2NTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5o
CkBAIC00OTcsOCArNDk3LDYgQEAgb3ZlcnJpZGU7CiAgICAgYm9vbCBpc1Vuc3BsaXR0YWJsZUZv
clBhZ2luYXRpb24oKSBjb25zdDsKIAogICAgIGJvb2wgc2hvdWxkVHJlYXRDaGlsZEFzUmVwbGFj
ZWRJblRhYmxlQ2VsbHMoKSBjb25zdDsKLSAgICAKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRS
ZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYsIENhcmV0UmVjdE1vZGUpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IG92ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5
b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogPSBudWxscHRyLCBP
dmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXpl
LCBQYWludFBoYXNlID0gUGFpbnRQaGFzZTo6QmxvY2tCYWNrZ3JvdW5kKSBjb25zdDsKICAgICB2
aXJ0dWFsIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlwUmVjdEZvckNoaWxkTGF5ZXJzKGNvbnN0IExh
eW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZyYWdtZW50LCBP
dmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0IHsgcmV0dXJuIG92
ZXJmbG93Q2xpcFJlY3QobG9jYXRpb24sIGZyYWdtZW50LCByZWxldmFuY3kpOyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCBi
OTgyN2M4YTE0ZDIuLjgzODI1NmMxMWVmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC0yNjI2LDc4ICsyNjI2LDYgQEAgdm9p
ZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2xlYXJGaXJzdExldHRlclJlbWFpbmluZ1RleHQoKQog
ICAgIGZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dE1hcCgpLnJlbW92ZSh0aGlzKTsKIH0KIAotTGF5
b3V0UmVjdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6bG9jYWxDYXJldFJlY3RGb3JFbXB0eUVsZW1l
bnQoTGF5b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCB0ZXh0SW5kZW50T2Zmc2V0LCBDYXJldFJl
Y3RNb2RlIGNhcmV0UmVjdE1vZGUpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFmaXJzdENoaWxkKCkp
OwotCi0gICAgLy8gRklYTUU6IFRoaXMgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgZWl0aGVy
IDpmaXJzdC1saW5lIG9yIDpmaXJzdC1sZXR0ZXIKLSAgICAvLyBIb3dldmVyLCBhcyBzb29uIGFz
IHNvbWUgY29udGVudCBpcyBlbnRlcmVkLCB0aGUgbGluZSBib3hlcyB3aWxsIGJlCi0gICAgLy8g
Y29uc3RydWN0ZWQgYW5kIHRoaXMga2x1ZGdlIGlzIG5vdCBjYWxsZWQgYW55IG1vcmUuIFNvIG9u
bHkgdGhlIGNhcmV0IHNpemUKLSAgICAvLyBvZiBhbiBlbXB0eSA6Zmlyc3QtbGluZSdkIGJsb2Nr
IGlzIHdyb25nLiBJIHRoaW5rIHdlIGNhbiBsaXZlIHdpdGggdGhhdC4KLSAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgY3VycmVudFN0eWxlID0gZmlyc3RMaW5lU3R5bGUoKTsKLQotICAgIGVudW0gQ2Fy
ZXRBbGlnbm1lbnQgeyBhbGlnbkxlZnQsIGFsaWduUmlnaHQsIGFsaWduQ2VudGVyIH07Ci0KLSAg
ICBDYXJldEFsaWdubWVudCBhbGlnbm1lbnQgPSBhbGlnbkxlZnQ7Ci0KLSAgICBzd2l0Y2ggKGN1
cnJlbnRTdHlsZS50ZXh0QWxpZ24oKSkgewotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoK
LSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExlZnQ6Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgVGV4dEFsaWduTW9kZTo6Q2VudGVyOgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2Vi
S2l0Q2VudGVyOgotICAgICAgICBhbGlnbm1lbnQgPSBhbGlnbkNlbnRlcjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKLSAgICBjYXNlIFRleHRBbGlnbk1v
ZGU6OldlYktpdFJpZ2h0OgotICAgICAgICBhbGlnbm1lbnQgPSBhbGlnblJpZ2h0OwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6Ci0gICAgY2FzZSBUZXh0
QWxpZ25Nb2RlOjpTdGFydDoKLSAgICAgICAgaWYgKCFjdXJyZW50U3R5bGUuaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpKQotICAgICAgICAgICAgYWxpZ25tZW50ID0gYWxpZ25SaWdodDsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6Ci0gICAgICAgIGlmIChjdXJy
ZW50U3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICAgICAgYWxpZ25tZW50
ID0gYWxpZ25SaWdodDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgTGF5b3V0VW5pdCB4
ID0gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsKLSAgICBMYXlvdXRVbml0IG1heFggPSB3
aWR0aCAtIGJvcmRlclJpZ2h0KCkgLSBwYWRkaW5nUmlnaHQoKTsKLQotICAgIHN3aXRjaCAoYWxp
Z25tZW50KSB7Ci0gICAgY2FzZSBhbGlnbkxlZnQ6Ci0gICAgICAgIGlmIChjdXJyZW50U3R5bGUu
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICAgICAgeCArPSB0ZXh0SW5kZW50T2Zm
c2V0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGFsaWduQ2VudGVyOgotICAgICAgICB4ID0g
KHggKyBtYXhYKSAvIDI7Ci0gICAgICAgIGlmIChjdXJyZW50U3R5bGUuaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpKQotICAgICAgICAgICAgeCArPSB0ZXh0SW5kZW50T2Zmc2V0IC8gMjsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgeCAtPSB0ZXh0SW5kZW50T2Zmc2V0IC8gMjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBhbGlnblJpZ2h0OgotICAgICAgICB4ID0gbWF4WCAtIGNhcmV0V2lk
dGg7Ci0gICAgICAgIGlmICghY3VycmVudFN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkK
LSAgICAgICAgICAgIHggLT0gdGV4dEluZGVudE9mZnNldDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIHggPSBzdGQ6Om1pbih4LCBzdGQ6Om1heDxMYXlvdXRVbml0PihtYXhYIC0gY2FyZXRX
aWR0aCwgMCkpOwotCi0gICAgYXV0byBsaW5lSGVpZ2h0ID0gdGhpcy0+bGluZUhlaWdodCh0cnVl
LCBjdXJyZW50U3R5bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IEhvcml6b250YWxMaW5l
IDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9mSW50ZXJpb3JMaW5lQm94ZXMpOwotICAgIGF1dG8g
aGVpZ2h0ID0gc3RkOjptaW4obGluZUhlaWdodCwgTGF5b3V0VW5pdCB7IGN1cnJlbnRTdHlsZS5m
b250TWV0cmljcygpLmhlaWdodCgpIH0pOwotICAgIGF1dG8geSA9IHBhZGRpbmdUb3AoKSArIGJv
cmRlclRvcCgpICsgKGxpbmVIZWlnaHQgPiBoZWlnaHQgPyAobGluZUhlaWdodCAtIGhlaWdodCkg
LyAyIDogTGF5b3V0VW5pdCB7IH0pOwotCi0gICAgYXV0byByZWN0ID0gTGF5b3V0UmVjdCh4LCB5
LCBjYXJldFdpZHRoLCBoZWlnaHQpOwotCi0gICAgaWYgKGNhcmV0UmVjdE1vZGUgPT0gQ2FyZXRS
ZWN0TW9kZTo6RXhwYW5kVG9FbmRPZkxpbmUpCi0gICAgICAgIHJlY3Quc2hpZnRNYXhYRWRnZVRv
KHdpZHRoKTsKLQotICAgIHJldHVybiBjdXJyZW50U3R5bGUuaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSA/IHJlY3QgOiByZWN0LnRyYW5zcG9zZWRSZWN0KCk7Ci19Ci0KIGJvb2wgUmVuZGVyQm94
TW9kZWxPYmplY3Q6OnNob3VsZEFudGlhbGlhc0xpbmVzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkKIHsKICAgICAvLyBGSVhNRTogV2UgbWF5IHdhbnQgdG8gbm90IGFudGlhbGlhcyB3aGVuIHNj
YWxlZCBieSBhbiBpbnRlZ3JhbCB2YWx1ZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmgKaW5kZXggNGU1YWJhNmQwNDczLi5hOGRkYWE5MDhiNjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5o
CkBAIC0yNjAsOCArMjYwLDYgQEAgcHJvdGVjdGVkOgogCiAgICAgSW50ZXJwb2xhdGlvblF1YWxp
dHkgY2hvb3NlSW50ZXJwb2xhdGlvblF1YWxpdHkoR3JhcGhpY3NDb250ZXh0JiwgSW1hZ2UmLCBj
b25zdCB2b2lkKiwgY29uc3QgTGF5b3V0U2l6ZSYpOwogCi0gICAgTGF5b3V0UmVjdCBsb2NhbENh
cmV0UmVjdEZvckVtcHR5RWxlbWVudChMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IHRleHRJ
bmRlbnRPZmZzZXQsIENhcmV0UmVjdE1vZGUgPSBDYXJldFJlY3RNb2RlOjpOb3JtYWwpIGNvbnN0
OwotCiAgICAgc3RhdGljIGJvb2wgc2hvdWxkQW50aWFsaWFzTGluZXMoR3JhcGhpY3NDb250ZXh0
Jik7CiAKICAgICBzdGF0aWMgdm9pZCBjbGlwUm91bmRlZElubmVyUmVjdChHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBjbGlwUmVjdCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCmluZGV4IGJkNTI1ZTAx
OGJkYy4uMWFkMTI0MGRlNTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW5saW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5s
aW5lLmNwcApAQCAtMjI4LDI1ICsyMjgsNiBAQCB2b2lkIFJlbmRlcklubGluZTo6dXBkYXRlQWx3
YXlzQ3JlYXRlTGluZUJveGVzKGJvb2wgZnVsbExheW91dCkKICAgICB9CiB9CiAKLUxheW91dFJl
Y3QgUmVuZGVySW5saW5lOjpsb2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQm
LCBDYXJldFJlY3RNb2RlKSBjb25zdAotewotICAgIGlmIChmaXJzdENoaWxkKCkpIHsKLSAgICAg
ICAgLy8gVGhpcyBjb25kaXRpb24gaXMgcG9zc2libGUgaWYgdGhlIFJlbmRlcklubGluZSBpcyBh
dCBhbiBlZGl0aW5nIGJvdW5kYXJ5LAotICAgICAgICAvLyBpLmUuIHRoZSBWaXNpYmxlUG9zaXRp
b24gaXM6Ci0gICAgICAgIC8vICAgPFJlbmRlcklubGluZSBlZGl0aW5nQm91bmRhcnk9dHJ1ZT58
PFJlbmRlclRleHQ+IDwvUmVuZGVyVGV4dD48L1JlbmRlcklubGluZT4KLSAgICAgICAgLy8gRklY
TUU6IG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gbWFrZSB0aGlzIHJldHVybiBhIHZhbGlkIHJl
Y3QsIG5vdGUgdGhhdAotICAgICAgICAvLyB0aGVyZSBhcmUgbm8gbGluZSBib3hlcyBjcmVhdGVk
IGluIHRoZSBhYm92ZSBjYXNlLgotICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwotICAgIH0K
LQotICAgIExheW91dFJlY3QgY2FyZXRSZWN0ID0gbG9jYWxDYXJldFJlY3RGb3JFbXB0eUVsZW1l
bnQoaG9yaXpvbnRhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSwgMCk7Ci0KLSAgICBpZiAoSW5s
aW5lQm94KiBmaXJzdEJveCA9IGZpcnN0TGluZUJveCgpKQotICAgICAgICBjYXJldFJlY3QubW92
ZUJ5KExheW91dFBvaW50KGZpcnN0Qm94LT50b3BMZWZ0KCkpKTsKLQotICAgIHJldHVybiBjYXJl
dFJlY3Q7Ci19Ci0KIHZvaWQgUmVuZGVySW5saW5lOjpwYWludChQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIG1fbGluZUJveGVzLnBh
aW50KHRoaXMsIHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcklubGluZS5oCmluZGV4IDA3NzQ1OTllMWVkNS4uODc4OGZmZGVmMDQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCkBAIC04Niw4ICs4Niw2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldEFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpIHsgc2V0UmVuZGVySW5saW5l
QWx3YXlzQ3JlYXRlc0xpbmVCb3hlcyh0cnVlKTsgfQogICAgIHZvaWQgdXBkYXRlQWx3YXlzQ3Jl
YXRlTGluZUJveGVzKGJvb2wgZnVsbExheW91dCk7CiAKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2Fy
ZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYsIENhcmV0UmVjdE1vZGUpIGNvbnN0IGZp
bmFsOwotCiAgICAgYm9vbCBoaXRUZXN0Q3VsbGVkSW5saW5lKGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRh
aW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KTsKIAogcHJvdGVjdGVk
OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcAppbmRleCBi
MzZjY2Y1NTk0NTIuLmY2ZmUwYzFkZjI3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpbmVCcmVhay5jcHAKQEAgLTE1OSwxOCArMTU5LDYgQEAgdm9pZCBSZW5kZXJMaW5l
QnJlYWs6OnNldFNlbGVjdGlvblN0YXRlKEhpZ2hsaWdodFN0YXRlIHN0YXRlKQogICAgIG1faW5s
aW5lQm94V3JhcHBlci0+cm9vdCgpLnNldEhhc1NlbGVjdGVkQ2hpbGRyZW4oc3RhdGUgIT0gSGln
aGxpZ2h0U3RhdGU6Ok5vbmUpOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckxpbmVCcmVhazo6bG9j
YWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiBydW5BbmRPZmZzZXQsIENhcmV0
UmVjdE1vZGUgY2FyZXRSZWN0TW9kZSkgY29uc3QKLXsKLSAgICBBU1NFUlQoIXJ1bkFuZE9mZnNl
dC5vZmZzZXQpOwotICAgIEFTU0VSVChydW5BbmRPZmZzZXQucnVuID09IExheW91dEludGVncmF0
aW9uOjpydW5Gb3IoKnRoaXMpKTsKLQotICAgIGlmICghcnVuQW5kT2Zmc2V0LnJ1bikKLSAgICAg
ICAgcmV0dXJuIExheW91dFJlY3QoKTsKLQotICAgIGF1dG8gbGluZSA9IHJ1bkFuZE9mZnNldC5y
dW4ubGluZSgpOwotICAgIHJldHVybiBsaW5lLT5jb250YWluaW5nQmxvY2soKS5jb21wdXRlQ2Fy
ZXRSZWN0KGxpbmUtPnNlbGVjdGlvblJlY3QoKSwgbGluZS0+Y29udGVudExvZ2ljYWxMZWZ0KCks
IGNhcmV0V2lkdGgsIGNhcmV0UmVjdE1vZGUpOwotfQotCiBJbnRSZWN0IFJlbmRlckxpbmVCcmVh
azo6bGluZXNCb3VuZGluZ0JveCgpIGNvbnN0CiB7CiAgICAgYXV0byBydW4gPSBMYXlvdXRJbnRl
Z3JhdGlvbjo6cnVuRm9yKCp0aGlzKTsKQEAgLTIxNCw3ICsyMDIsMTAgQEAgdm9pZCBSZW5kZXJM
aW5lQnJlYWs6OmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhWZWN0b3I8U2VsZWN0aW9uUmVjdD4mIHJl
Y3RzLCB1bnNpZ24KICAgICAgICAgcmV0dXJuOwogICAgIGF1dG8gbGluZSA9IHJ1bi5saW5lKCk7
CiAKLSAgICBMYXlvdXRSZWN0IHJlY3QgPSBsaW5lLT5jb250YWluaW5nQmxvY2soKS5jb21wdXRl
Q2FyZXRSZWN0KGxpbmUtPnNlbGVjdGlvblJlY3QoKSwgbGluZS0+Y29udGVudExvZ2ljYWxMZWZ0
KCksIDApOworICAgIGF1dG8gbGluZVNlbGVjdGlvblJlY3QgPSBsaW5lLT5zZWxlY3Rpb25SZWN0
KCk7CisgICAgTGF5b3V0UmVjdCByZWN0ID0gSW50UmVjdChydW4tPmxvZ2ljYWxMZWZ0KCksIGxp
bmVTZWxlY3Rpb25SZWN0LnkoKSwgMCwgbGluZVNlbGVjdGlvblJlY3QuaGVpZ2h0KCkpOworICAg
IGlmICghbGluZS0+aXNIb3Jpem9udGFsKCkpCisgICAgICAgIHJlY3QgPSByZWN0LnRyYW5zcG9z
ZWRSZWN0KCk7CiAKICAgICBpZiAobGluZS0+bGVnYWN5Um9vdElubGluZUJveCgpICYmIGxpbmUt
PmxlZ2FjeVJvb3RJbmxpbmVCb3goKS0+aXNGaXJzdEFmdGVyUGFnZUJyZWFrKCkpIHsKICAgICAg
ICAgaWYgKHJ1bi0+aXNIb3Jpem9udGFsKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGluZUJyZWFrLmgKaW5kZXggY2QyYTJlYmYzOTQzLi40ZmYyZDFlYjg2MWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmgKQEAgLTY2LDcgKzY2LDYgQEAg
cHJpdmF0ZToKICAgICBpbnQgY2FyZXRNaW5PZmZzZXQoKSBjb25zdCBmaW5hbDsKICAgICBpbnQg
Y2FyZXRNYXhPZmZzZXQoKSBjb25zdCBmaW5hbDsKICAgICBib29sIGNhbkJlU2VsZWN0aW9uTGVh
ZigpIGNvbnN0IGZpbmFsOwotICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoY29uc3QgSW5s
aW5lUnVuQW5kT2Zmc2V0JiwgQ2FyZXRSZWN0TW9kZSkgY29uc3QgZmluYWw7CiAgICAgdm9pZCBz
ZXRTZWxlY3Rpb25TdGF0ZShIaWdobGlnaHRTdGF0ZSkgZmluYWw7CiAKICAgICBMYXlvdXRVbml0
IGxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRp
b25Nb2RlKSBjb25zdCBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAKaW5kZXggMTdmYzMzZDQxZTA0Li45NmVhZjRiOTM2ODEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0xNDAwLDExICsxNDAwLDYgQEAgTGF5b3V0
U2l6ZSBSZW5kZXJPYmplY3Q6Om9mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcihSZW5kZXJFbGVt
ZW50JiBjb250YWluZXIpIGMKICAgICByZXR1cm4gb2Zmc2V0OwogfQogCi1MYXlvdXRSZWN0IFJl
bmRlck9iamVjdDo6bG9jYWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiwgQ2Fy
ZXRSZWN0TW9kZSkgY29uc3QKLXsKLSAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwotfQotCiBib29s
IFJlbmRlck9iamVjdDo6aXNSb290ZWQoKSBjb25zdAogewogICAgIHJldHVybiBpc0Rlc2NlbmRh
bnRPZigmdmlldygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRl
eCBiOTE1OTIyYjIxZTkuLjY0NTc5MTg4MWZjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaApAQCAtNjcyLDkgKzY3Miw2IEBAIHB1YmxpYzoKICAgICAvLyBXaGV0aGVy
IG9yIG5vdCBhIGdpdmVuIGJsb2NrIG5lZWRzIHRvIHBhaW50IHNlbGVjdGlvbiBnYXBzLgogICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRQYWludFNlbGVjdGlvbkdhcHMoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogCi0gICAgLy8gUmV0dXJucyB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIGNh
cmV0IHdpdGhpbiB0aGlzIHJlbmRlciBvYmplY3QuCi0gICAgdmlydHVhbCBMYXlvdXRSZWN0IGxv
Y2FsQ2FyZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYsIENhcmV0UmVjdE1vZGUgPSBD
YXJldFJlY3RNb2RlOjpOb3JtYWwpIGNvbnN0OwotCiAgICAgLy8gV2hlbiBwZXJmb3JtaW5nIGEg
Z2xvYmFsIGRvY3VtZW50IHRlYXItZG93biwgb3Igd2hlbiBnb2luZyBpbnRvIHRoZSBiYWNrL2Zv
cndhcmQgY2FjaGUsIHRoZSByZW5kZXJlciBvZiB0aGUgZG9jdW1lbnQgaXMgY2xlYXJlZC4KICAg
ICBib29sIHJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0RW51bXMuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RFbnVtcy5oCmluZGV4IDA2ZTc3MzMyMDhhYi4uMzk5
ZWJlYjE1ZDYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0RW51bXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0RW51
bXMuaApAQCAtNjEsMTAgKzYxLDQgQEAgZW51bSBNYXBDb29yZGluYXRlc01vZGUgewogfTsKIHR5
cGVkZWYgdW5zaWduZWQgTWFwQ29vcmRpbmF0ZXNGbGFnczsKIAotZW51bSBjbGFzcyBDYXJldFJl
Y3RNb2RlIHsKLSAgICBOb3JtYWwsCi0gICAgRXhwYW5kVG9FbmRPZkxpbmUKLX07Ci0KLQogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCmluZGV4IDg1ZTA4MmEwZGFmNy4u
MjEwZWQyOGNlOWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCkBA
IC02OTksMTggKzY5OSw2IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0Ojpwb3NpdGlvbkZv
clBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVuCiAgICAgcmV0dXJuIGNy
ZWF0ZVZpc2libGVQb3NpdGlvbigwLCBBZmZpbml0eTo6RG93bnN0cmVhbSk7CiB9CiAKLUxheW91
dFJlY3QgUmVuZGVyVGV4dDo6bG9jYWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0
JiBydW5BbmRPZmZzZXQsIENhcmV0UmVjdE1vZGUgY2FyZXRSZWN0TW9kZSkgY29uc3QKLXsKLSAg
ICBpZiAoIXJ1bkFuZE9mZnNldC5ydW4pCi0gICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7Ci0K
LSAgICBhdXRvJiB0ZXh0UnVuID0gZG93bmNhc3Q8TGF5b3V0SW50ZWdyYXRpb246OlRleHRSdW5J
dGVyYXRvcj4ocnVuQW5kT2Zmc2V0LnJ1bik7Ci0gICAgYXV0byBsaW5lID0gdGV4dFJ1bi5saW5l
KCk7Ci0KLSAgICBmbG9hdCBwb3NpdGlvbiA9IHRleHRSdW4tPnBvc2l0aW9uRm9yT2Zmc2V0KHJ1
bkFuZE9mZnNldC5vZmZzZXQpOwotICAgIHJldHVybiBsaW5lLT5jb250YWluaW5nQmxvY2soKS5j
b21wdXRlQ2FyZXRSZWN0KGxpbmUtPnNlbGVjdGlvblJlY3QoKSwgcG9zaXRpb24sIGNhcmV0V2lk
dGgsIGNhcmV0UmVjdE1vZGUpOwotfQotCiBBTFdBWVNfSU5MSU5FIGZsb2F0IFJlbmRlclRleHQ6
OndpZHRoRnJvbUNhY2hlKGNvbnN0IEZvbnRDYXNjYWRlJiBmLCB1bnNpZ25lZCBzdGFydCwgdW5z
aWduZWQgbGVuLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250
cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
KSBjb25zdAogewogICAgIGlmIChzdHlsZS5oYXNUZXh0Q29tYmluZSgpICYmIGlzPFJlbmRlckNv
bWJpbmVUZXh0PigqdGhpcykpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCmlu
ZGV4IGI1ZDI4NTg5Y2VhYy4uNmU0YTcxZTE3ZTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0LmgKQEAgLTIwMyw3ICsyMDMsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXRT
ZWxlY3Rpb25TdGF0ZShIaWdobGlnaHRTdGF0ZSkgZmluYWw7CiAgICAgTGF5b3V0UmVjdCBzZWxl
Y3Rpb25SZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgZmluYWw7Ci0gICAg
TGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmLCBDYXJl
dFJlY3RNb2RlKSBjb25zdCBvdmVycmlkZTsKICAgICBMYXlvdXRSZWN0IGNsaXBwZWRPdmVyZmxv
d1JlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250
YWluZXIpIGNvbnN0IGZpbmFsOwogCiAgICAgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdp
ZHRocyhmbG9hdCBsZWFkV2lkdGgsIEhhc2hTZXQ8Y29uc3QgRm9udCo+JiBmYWxsYmFja0ZvbnRz
LCBHbHlwaE92ZXJmbG93Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAppbmRleCBmYmNhOGYzMmM0ZmEuLmZkZmI5NThlNzU4
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxp
bmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lu
bGluZVRleHQuY3BwCkBAIC0xMTksMzAgKzExOSw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVU
ZXh0Qm94PiBSZW5kZXJTVkdJbmxpbmVUZXh0OjpjcmVhdGVUZXh0Qm94KCkKICAgICByZXR1cm4g
Ym94OyAKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpsb2NhbENhcmV0UmVj
dChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmIHJ1bkFuZE9mZnNldCwgQ2FyZXRSZWN0TW9kZSkg
Y29uc3QKLXsKLSAgICBhdXRvKiBib3ggPSBydW5BbmRPZmZzZXQucnVuID8gcnVuQW5kT2Zmc2V0
LnJ1bi0+bGVnYWN5SW5saW5lQm94KCkgOiBudWxscHRyOwotICAgIGF1dG8gY2FyZXRPZmZzZXQg
PSBydW5BbmRPZmZzZXQub2Zmc2V0OwotCi0gICAgaWYgKCFpczxJbmxpbmVUZXh0Qm94Pihib3gp
KQotICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwotCi0gICAgYXV0byYgdGV4dEJveCA9IGRv
d25jYXN0PElubGluZVRleHRCb3g+KCpib3gpOwotICAgIGlmIChjYXJldE9mZnNldCA8IHRleHRC
b3guc3RhcnQoKSB8fCBjYXJldE9mZnNldCA+IHRleHRCb3guc3RhcnQoKSArIHRleHRCb3gubGVu
KCkpCi0gICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7Ci0KLSAgICAvLyBVc2UgdGhlIGVkZ2Ug
b2YgdGhlIHNlbGVjdGlvbiByZWN0IHRvIGRldGVybWluZSB0aGUgY2FyZXQgcmVjdC4KLSAgICBp
ZiAoY2FyZXRPZmZzZXQgPCB0ZXh0Qm94LnN0YXJ0KCkgKyB0ZXh0Qm94LmxlbigpKSB7Ci0gICAg
ICAgIExheW91dFJlY3QgcmVjdCA9IHRleHRCb3gubG9jYWxTZWxlY3Rpb25SZWN0KGNhcmV0T2Zm
c2V0LCBjYXJldE9mZnNldCArIDEpOwotICAgICAgICBMYXlvdXRVbml0IHggPSB0ZXh0Qm94Lmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHJlY3QueCgpIDogcmVjdC5tYXhYKCk7Ci0gICAgICAg
IHJldHVybiBMYXlvdXRSZWN0KHgsIHJlY3QueSgpLCBjYXJldFdpZHRoLCByZWN0LmhlaWdodCgp
KTsKLSAgICB9Ci0KLSAgICBMYXlvdXRSZWN0IHJlY3QgPSB0ZXh0Qm94LmxvY2FsU2VsZWN0aW9u
UmVjdChjYXJldE9mZnNldCAtIDEsIGNhcmV0T2Zmc2V0KTsKLSAgICBMYXlvdXRVbml0IHggPSB0
ZXh0Qm94LmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHJlY3QubWF4WCgpIDogcmVjdC54KCk7
Ci0gICAgcmV0dXJuIExheW91dFJlY3QoeCwgcmVjdC55KCksIGNhcmV0V2lkdGgsIHJlY3QuaGVp
Z2h0KCkpOwotfQotCiBGbG9hdFJlY3QgUmVuZGVyU1ZHSW5saW5lVGV4dDo6ZmxvYXRMaW5lc0Jv
dW5kaW5nQm94KCkgY29uc3QKIHsKICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3g7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCmluZGV4
IGJiMmVhZmVjZTVlNy4uMjhlOTVhMGJiNGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaApAQCAtNjIsNyArNjIsNiBAQCBwcml2
YXRlOgogICAgIGJvb2wgaXNTVkdJbmxpbmVUZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5
b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciopIG92ZXJyaWRlOwotICAg
IExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiwgQ2Fy
ZXRSZWN0TW9kZSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgSW50UmVjdCBsaW5lc0JvdW5kaW5nQm94
KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElubGluZVRleHRCb3g+IGNy
ZWF0ZVRleHRCb3goKSBvdmVycmlkZTsKIAo=
</data>
<flag name="commit-queue"
          id="432011"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414978</attachid>
            <date>2020-11-28 10:23:13 -0800</date>
            <delta_ts>2020-11-28 11:37:57 -0800</delta_ts>
            <desc>patch</desc>
            <filename>caret-rect-out-from-renderobject-4.patch</filename>
            <type>text/plain</type>
            <size>47992</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0NjE3YjdiNzBhOTcuLmUzOTNkZDQ5ZDBiMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDYxIEBACisyMDIwLTExLTI3ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBNb3ZlIGNhcmV0IHJlY3QgY29tcHV0YXRpb24gb3V0IG9mIHJlbmRlciB0
cmVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTkz
MDQKKworICAgICAgICBSZXZpZXdlZCBieSBaYWxhbiBCdWp0YXMuCisKKyAgICAgICAgUmVkdWNl
IGNvZGUgcmFuZG9tbHkgc3ByaW5rbGVkIG9uIHJlbmRlcmVycyBieSBtb3ZpbmcgaXQgaW50byBz
dGFuZGFsb25lIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6
bG9jYWxDYXJldFJlY3RGb3JDaGFyYWN0ZXJPZmZzZXQpOgorICAgICAgICAqIGVkaXRpbmcvUmVu
ZGVyZWRQb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJlZFBvc2l0aW9uOjph
YnNvbHV0ZVJlY3QgY29uc3QpOgorICAgICAgICAqIGVkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5o
OgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlZpc2libGVQb3NpdGlvbjo6bG9jYWxDYXJldFJlY3QgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9DYXJldFJlY3RDb21wdXRhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZUNhcmV0UmVjdEZvckVtcHR5RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpj
b21wdXRlQ2FyZXRSZWN0Rm9yTGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1
dGVDYXJldFJlY3RGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVDYXJldFJlY3RG
b3JMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUNhcmV0UmVjdEZvclNWR0lu
bGluZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUNhcmV0UmVjdEZvckJveCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wdXRlQ2FyZXRSZWN0Rm9yQmxvY2spOgorICAgICAgICAoV2Vi
Q29yZTo6Y29tcHV0ZUNhcmV0UmVjdEZvcklubGluZSk6CisgICAgICAgIChXZWJDb3JlOjpjb21w
dXRlTG9jYWxDYXJldFJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9DYXJldFJlY3RDb21wdXRh
dGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQmxvY2tGbG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxv
dzo6Y29tcHV0ZUNhcmV0UmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJsb2NrRmxvdy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpsb2NhbENhcmV0UmVjdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hN
b2RlbE9iamVjdDo6bG9jYWxDYXJldFJlY3RGb3JFbXB0eUVsZW1lbnQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5s
aW5lOjpsb2NhbENhcmV0UmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlcklubGluZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGluZUJyZWFrOjpsb2NhbENhcmV0UmVjdCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0Ojpsb2NhbENhcmV0UmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3RF
bnVtcy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHQ6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHSW5saW5lVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbmxpbmVU
ZXh0Ojpsb2NhbENhcmV0UmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0Lmg6CisKIDIwMjAtMTEtMjggIERvbiBPbG1zdGVhZCAg
PGRvbi5vbG1zdGVhZEBzb255LmNvbT4KIAogICAgICAgICBSZW1vdmUgZW51bXMgZm9yIEdDR0xl
bnVtIGNvbnN0YW50cyBpbiBHcmFwaGljc0NvbnRleHRHTCBhbmQgRXh0ZW5zaW9uc0dMCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IGVkNzFjNmQ3MzQ5Yi4uOGEwMzBjNWU0OTc5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApA
QCAtMjE1NCw2ICsyMTU0LDcgQEAgcmVuZGVyaW5nL0JpZGlSdW4uY3BwCiByZW5kZXJpbmcvQm9y
ZGVyRWRnZS5jcHAKIHJlbmRlcmluZy9CcmVha0xpbmVzLmNwcAogcmVuZGVyaW5nL0NTU0ZpbHRl
ci5jcHAKK3JlbmRlcmluZy9DYXJldFJlY3RDb21wdXRhdGlvbi5jcHAKIHJlbmRlcmluZy9DbGlw
UmVjdC5jcHAKIHJlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5jcHAKIHJlbmRlcmluZy9Db250
ZW50ZnVsUGFpbnRDaGVja2VyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDNjNzBlMTFiMzZmNC4uOTk1MGNkZjllMjU2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC01MTYwLDYgKzUxNjAsNyBAQAogCQlFNEU4QjRFQzIxNkI3OUU1MDBCODgzNEQgLyogU3lz
dGVtRm9udERhdGFiYXNlQ29yZVRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0RThCNEVBMjE2Qjc5RTUwMEI4ODM0RCAvKiBTeXN0ZW1Gb250RGF0
YWJhc2VDb3JlVGV4dC5oICovOyB9OwogCQlFNEU4QjRGNTIxNkI5NTY1MDBCODgzNEQgLyogRm9u
dENhc2NhZGVEZXNjcmlwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTRFOEI0RjIyMTZCOEI2MDAwQjg4MzREIC8qIEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlFNEU5NEQ2MTIyRkYxNThBMDBERDE5MUYgLyogQ29tcGxleExpbmVMYXlvdXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QTFBQzc4MjJGQUZENTAw
MDE3Qjc1QiAvKiBDb21wbGV4TGluZUxheW91dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUU0RjBCRTMxMjU3MTJGNkUwMDlFNzQzMSAvKiBDYXJl
dFJlY3RDb21wdXRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTRGMEJFMkUyNTcxMEE3NTAwOUU3NDMxIC8qIENhcmV0UmVjdENvbXB1dGF0aW9u
LmggKi87IH07CiAJCUU0RjlFRUYzMTU2REEwMDcwMEQyM0U3RSAvKiBTdHlsZVNoZWV0Q29udGVu
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RjlF
RUYxMTU2RDg0QzQwMEQyM0U3RSAvKiBTdHlsZVNoZWV0Q29udGVudHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNTA2MjA4NDI1NDA5MTlDMDBD
NDMwOTEgLyogQ29udGFjdHNSZXF1ZXN0RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTUwNjIwODMyNTQwOTE5QjAwQzQzMDkxIC8qIENvbnRhY3Rz
UmVxdWVzdERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlFNTE2Njk5MTIwRkY5OTE4MDA5RDJDMjcgLyogTGlzdEJ1dHRvbkFycm93QDJ4LnBu
ZyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTUxNjY5
OEYyMEZGOTkxNjAwOUQyQzI3IC8qIExpc3RCdXR0b25BcnJvd0AyeC5wbmcgKi87IH07CkBAIC0x
NjMzNyw2ICsxNjMzOCw4IEBACiAJCUU0RThCNEVEMjE2Qjc5RjQwMEI4ODM0RCAvKiBTeXN0ZW1G
b250RGF0YWJhc2VDb3JlVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUU0RThCNEYwMjE2QjhCNUYwMEI4ODM0RCAvKiBGb250Q2FzY2FkZURlc2NyaXB0
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEU4QjRGMjIx
NkI4QjYwMDBCODgzNEQgLyogRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGb250Q2FzY2FkZURlc2NyaXB0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUU0RjBCRTJFMjU3MTBBNzUwMDlFNzQzMSAvKiBDYXJldFJlY3RD
b21wdXRhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYXJldFJlY3RD
b21wdXRhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEYwQkUzMDI1NzEw
QTc2MDA5RTc0MzEgLyogQ2FyZXRSZWN0Q29tcHV0YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ2FyZXRSZWN0Q29tcHV0YXRpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFNEY5RUVGMDE1NkQ4NEM0MDBEMjNFN0UgLyogU3R5bGVTaGVl
dENvbnRlbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxl
U2hlZXRDb250ZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RjlFRUYx
MTU2RDg0QzQwMEQyM0U3RSAvKiBTdHlsZVNoZWV0Q29udGVudHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVTaGVldENvbnRlbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUU0RkI0QjM1MjM5QkVCMTAwMDNDMzM2QSAvKiBMYXlvdXRJbnRlZ3JhdGlv
bklubGluZUNvbnRlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0SW50ZWdyYXRpb25J
bmxpbmVDb250ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5NDQ1LDYg
KzI5NDQ4LDggQEAKIAkJCQk1ODk1NTZFQzE4RDRBNDQwMDA3NjRCMDMgLyogQm9yZGVyRWRnZS5o
ICovLAogCQkJCUJDRUE0ODE1MDk3RDkzMDIwMDk0QzlFNCAvKiBCcmVha0xpbmVzLmNwcCAqLywK
IAkJCQlCQ0VBNDgxNjA5N0Q5MzAyMDA5NEM5RTQgLyogQnJlYWtMaW5lcy5oICovLAorCQkJCUU0
RjBCRTMwMjU3MTBBNzYwMDlFNzQzMSAvKiBDYXJldFJlY3RDb21wdXRhdGlvbi5jcHAgKi8sCisJ
CQkJRTRGMEJFMkUyNTcxMEE3NTAwOUU3NDMxIC8qIENhcmV0UmVjdENvbXB1dGF0aW9uLmggKi8s
CiAJCQkJRkI5MkRGNDkxNUZFRDA4NzAwOTk0NDMzIC8qIENsaXBQYXRoT3BlcmF0aW9uLmggKi8s
CiAJCQkJNTgwMzcxNUYxQTY2RjAwQTAwQkFGNTE5IC8qIENsaXBSZWN0LmNwcCAqLywKIAkJCQk1
ODAzNzE2MDFBNjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuaCAqLywKQEAgLTM1MTEyLDYgKzM1
MTE3LDcgQEAKIAkJCQlBMEVFMERGODE0NEY4MjU1MDBGODBCMEQgLyogV2ViR0xEZWJ1Z1NoYWRl
cnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFM0ZBRThGMTQ3MzNGREIwMEU0MjMwNyAvKiBXZWJH
TERlcHRoVGV4dHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUIzMDY5NUUxOEIzRDM0NTAwOTlE
NUU4IC8qIFdlYkdMRHJhd0J1ZmZlcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0RjBCRTMxMjU3
MTJGNkUwMDlFNzQzMSAvKiBDYXJldFJlY3RDb21wdXRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNkVCRjBFNTUxMkE4OTI5ODAwREIxNzA5IC8qIFdlYkdMRXh0ZW5zaW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0OUM3QjlDRjEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xGcmFtZWJ1ZmZlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDlGRkJGM0YxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5
ZXIuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAKaW5kZXggNzY5ZDFlOWZkZTFkLi5mZmIyNjA1OWE3M2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtNjQsNiAr
NjQsNyBAQAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlUYWJsZVJvdy5oIgogI2luY2x1ZGUgIkFj
Y2Vzc2liaWxpdHlUcmVlLmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVRyZWVJdGVtLmgiCisj
aW5jbHVkZSAiQ2FyZXRSZWN0Q29tcHV0YXRpb24uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkVkaXRpbmcuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKQEAgLTI5MDIsNyArMjkw
Myw3IEBAIExheW91dFJlY3QgQVhPYmplY3RDYWNoZTo6bG9jYWxDYXJldFJlY3RGb3JDaGFyYWN0
ZXJPZmZzZXQoUmVuZGVyT2JqZWN0KiYgcmVuZGVyCiAgICAgaWYgKGlzPFJlbmRlckxpbmVCcmVh
az4ocmVuZGVyZXIpICYmIExheW91dEludGVncmF0aW9uOjpydW5Gb3IoZG93bmNhc3Q8UmVuZGVy
TGluZUJyZWFrPigqcmVuZGVyZXIpKSAhPSBydW5BbmRPZmZzZXQucnVuKQogICAgICAgICByZXR1
cm4gSW50UmVjdCgpOwogCi0gICAgcmV0dXJuIHJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChydW5B
bmRPZmZzZXQpOworICAgIHJldHVybiBjb21wdXRlTG9jYWxDYXJldFJlY3QoKnJlbmRlcmVyLCBy
dW5BbmRPZmZzZXQpOwogfQogCiBJbnRSZWN0IEFYT2JqZWN0Q2FjaGU6OmFic29sdXRlQ2FyZXRC
b3VuZHNGb3JDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJP
ZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmNwcAppbmRl
eCAyNmQ3YTg1M2Y0MTAuLmRhYWRkZTk3Y2VhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1JlbmRlcmVkUG9zaXRpb24uY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiUmVuZGVyZWRQb3NpdGlvbi5oIgogCisjaW5jbHVkZSAiQ2FyZXRSZWN0
Q29tcHV0YXRpb24uaCIKICNpbmNsdWRlICJJbmxpbmVSdW5BbmRPZmZzZXQuaCIKICNpbmNsdWRl
ICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCkBAIC0yMjYs
NyArMjI3LDcgQEAgSW50UmVjdCBSZW5kZXJlZFBvc2l0aW9uOjphYnNvbHV0ZVJlY3QoQ2FyZXRS
ZWN0TW9kZSBjYXJldFJlY3RNb2RlKSBjb25zdAogICAgIGlmIChpc051bGwoKSkKICAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsKIAotICAgIEludFJlY3QgbG9jYWxSZWN0ID0gc25hcHBlZEludFJl
Y3QobV9yZW5kZXJlci0+bG9jYWxDYXJldFJlY3QoeyBtX3J1biwgbV9vZmZzZXQgfSwgY2FyZXRS
ZWN0TW9kZSkpOworICAgIEludFJlY3QgbG9jYWxSZWN0ID0gc25hcHBlZEludFJlY3QoY29tcHV0
ZUxvY2FsQ2FyZXRSZWN0KCptX3JlbmRlcmVyLCB7IG1fcnVuLCBtX29mZnNldCB9LCBjYXJldFJl
Y3RNb2RlKSk7CiAgICAgcmV0dXJuIGxvY2FsUmVjdCA9PSBJbnRSZWN0KCkgPyBJbnRSZWN0KCkg
OiBtX3JlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChsb2NhbFJlY3QpKS5l
bmNsb3NpbmdCb3VuZGluZ0JveCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVy
ZWRQb3NpdGlvbi5oCmluZGV4IDM3ZjliMWNlNjhkYS4uYWNhYzgwZTZjZWZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uaApAQCAtMzAsNiArMzAsNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNhcmV0UmVjdENvbXB1dGF0aW9uLmgiCiAjaW5jbHVk
ZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJMYXlvdXRJbnRl
Z3JhdGlvblJ1bkl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dEFmZmluaXR5LmgiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKaW5kZXggNTlhNWZkNjc5ZGNjLi5l
MGYxMzQ4ODY2MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBv
c2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5j
cHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKIAogI2lu
Y2x1ZGUgIkJvdW5kYXJ5UG9pbnQuaCIKKyNpbmNsdWRlICJDYXJldFJlY3RDb21wdXRhdGlvbi5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWRpdGluZy5oIgogI2luY2x1ZGUg
IkZsb2F0UXVhZC5oIgpAQCAtNjQzLDcgKzY0NCw3IEBAIGF1dG8gVmlzaWJsZVBvc2l0aW9uOjps
b2NhbENhcmV0UmVjdCgpIGNvbnN0IC0+IExvY2FsQ2FyZXRSZWN0CiAgICAgaWYgKCFyZW5kZXJl
cikKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVybiB7IHJlbmRlcmVyLT5sb2NhbENh
cmV0UmVjdChydW5BbmRPZmZzZXQpLCBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KHJlbmRlcmVy
KSB9OworICAgIHJldHVybiB7IGNvbXB1dGVMb2NhbENhcmV0UmVjdCgqcmVuZGVyZXIsIHJ1bkFu
ZE9mZnNldCksIGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4ocmVuZGVyZXIpIH07CiB9CiAKIElu
dFJlY3QgVmlzaWJsZVBvc2l0aW9uOjphYnNvbHV0ZUNhcmV0Qm91bmRzKGJvb2wqIGluc2lkZUZp
eGVkKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NhcmV0UmVj
dENvbXB1dGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DYXJldFJlY3RDb21w
dXRhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kMzcy
NjcwZWMxMjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ2Fy
ZXRSZWN0Q29tcHV0YXRpb24uY3BwCkBAIC0wLDAgKzEsMzE2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhcmV0UmVjdENvbXB1dGF0aW9uLmgiCisKKyNp
bmNsdWRlICJFZGl0aW5nLmgiCisjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0
b3IuaCIKKyNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgiCisjaW5jbHVk
ZSAiUmVuZGVyQmxvY2tGbG93LmgiCisjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5jbHVk
ZSAiUmVuZGVyTGluZUJyZWFrLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5oIgor
I2luY2x1ZGUgIlJlbmRlclRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
TGF5b3V0UmVjdCBjb21wdXRlQ2FyZXRSZWN0Rm9yRW1wdHlFbGVtZW50KGNvbnN0IFJlbmRlckJv
eE1vZGVsT2JqZWN0JiByZW5kZXJlciwgTGF5b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCB0ZXh0
SW5kZW50T2Zmc2V0LCBDYXJldFJlY3RNb2RlIGNhcmV0UmVjdE1vZGUpCit7CisgICAgQVNTRVJU
KCFyZW5kZXJlci5maXJzdENoaWxkKCkpOworCisgICAgLy8gRklYTUU6IFRoaXMgZG9lcyBub3Qg
dGFrZSBpbnRvIGFjY291bnQgZWl0aGVyIDpmaXJzdC1saW5lIG9yIDpmaXJzdC1sZXR0ZXIKKyAg
ICAvLyBIb3dldmVyLCBhcyBzb29uIGFzIHNvbWUgY29udGVudCBpcyBlbnRlcmVkLCB0aGUgbGlu
ZSBib3hlcyB3aWxsIGJlCisgICAgLy8gY29uc3RydWN0ZWQgYW5kIHRoaXMga2x1ZGdlIGlzIG5v
dCBjYWxsZWQgYW55IG1vcmUuIFNvIG9ubHkgdGhlIGNhcmV0IHNpemUKKyAgICAvLyBvZiBhbiBl
bXB0eSA6Zmlyc3QtbGluZSdkIGJsb2NrIGlzIHdyb25nLiBJIHRoaW5rIHdlIGNhbiBsaXZlIHdp
dGggdGhhdC4KKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgY3VycmVudFN0eWxlID0gcmVuZGVyZXIu
Zmlyc3RMaW5lU3R5bGUoKTsKKworICAgIGVudW0gQ2FyZXRBbGlnbm1lbnQgeyBBbGlnbkxlZnQs
IEFsaWduUmlnaHQsIEFsaWduQ2VudGVyIH07CisKKyAgICBDYXJldEFsaWdubWVudCBhbGlnbm1l
bnQgPSBBbGlnbkxlZnQ7CisKKyAgICBzd2l0Y2ggKGN1cnJlbnRTdHlsZS50ZXh0QWxpZ24oKSkg
eworICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6
OldlYktpdExlZnQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Q2Vu
dGVyOgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVyOgorICAgICAgICBhbGln
bm1lbnQgPSBBbGlnbkNlbnRlcjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0QWxpZ25N
b2RlOjpSaWdodDoKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0OgorICAgICAg
ICBhbGlnbm1lbnQgPSBBbGlnblJpZ2h0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHRB
bGlnbk1vZGU6Okp1c3RpZnk6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKKyAgICAg
ICAgaWYgKCFjdXJyZW50U3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQorICAgICAgICAg
ICAgYWxpZ25tZW50ID0gQWxpZ25SaWdodDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0
QWxpZ25Nb2RlOjpFbmQ6CisgICAgICAgIGlmIChjdXJyZW50U3R5bGUuaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpKQorICAgICAgICAgICAgYWxpZ25tZW50ID0gQWxpZ25SaWdodDsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgTGF5b3V0VW5pdCB4ID0gcmVuZGVyZXIuYm9yZGVyTGVmdCgp
ICsgcmVuZGVyZXIucGFkZGluZ0xlZnQoKTsKKyAgICBMYXlvdXRVbml0IG1heFggPSB3aWR0aCAt
IHJlbmRlcmVyLmJvcmRlclJpZ2h0KCkgLSByZW5kZXJlci5wYWRkaW5nUmlnaHQoKTsKKworICAg
IHN3aXRjaCAoYWxpZ25tZW50KSB7CisgICAgY2FzZSBBbGlnbkxlZnQ6CisgICAgICAgIGlmIChj
dXJyZW50U3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQorICAgICAgICAgICAgeCArPSB0
ZXh0SW5kZW50T2Zmc2V0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFsaWduQ2VudGVyOgor
ICAgICAgICB4ID0gKHggKyBtYXhYKSAvIDI7CisgICAgICAgIGlmIChjdXJyZW50U3R5bGUuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpKQorICAgICAgICAgICAgeCArPSB0ZXh0SW5kZW50T2Zmc2V0
IC8gMjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgeCAtPSB0ZXh0SW5kZW50T2Zmc2V0IC8g
MjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBbGlnblJpZ2h0OgorICAgICAgICB4ID0gbWF4
WCAtIGNhcmV0V2lkdGg7CisgICAgICAgIGlmICghY3VycmVudFN0eWxlLmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSkKKyAgICAgICAgICAgIHggLT0gdGV4dEluZGVudE9mZnNldDsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIHggPSBzdGQ6Om1pbih4LCBzdGQ6Om1heDxMYXlvdXRVbml0Piht
YXhYIC0gY2FyZXRXaWR0aCwgMCkpOworCisgICAgYXV0byBsaW5lSGVpZ2h0ID0gcmVuZGVyZXIu
bGluZUhlaWdodCh0cnVlLCBjdXJyZW50U3R5bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/
IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9mSW50ZXJpb3JMaW5lQm94
ZXMpOworICAgIGF1dG8gaGVpZ2h0ID0gc3RkOjptaW4obGluZUhlaWdodCwgTGF5b3V0VW5pdCB7
IGN1cnJlbnRTdHlsZS5mb250TWV0cmljcygpLmhlaWdodCgpIH0pOworICAgIGF1dG8geSA9IHJl
bmRlcmVyLnBhZGRpbmdUb3AoKSArIHJlbmRlcmVyLmJvcmRlclRvcCgpICsgKGxpbmVIZWlnaHQg
PiBoZWlnaHQgPyAobGluZUhlaWdodCAtIGhlaWdodCkgLyAyIDogTGF5b3V0VW5pdCB7IH0pOwor
CisgICAgYXV0byByZWN0ID0gTGF5b3V0UmVjdCh4LCB5LCBjYXJldFdpZHRoLCBoZWlnaHQpOwor
CisgICAgaWYgKGNhcmV0UmVjdE1vZGUgPT0gQ2FyZXRSZWN0TW9kZTo6RXhwYW5kVG9FbmRPZkxp
bmUpCisgICAgICAgIHJlY3Quc2hpZnRNYXhYRWRnZVRvKHdpZHRoKTsKKworICAgIHJldHVybiBj
dXJyZW50U3R5bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJlY3QgOiByZWN0LnRyYW5z
cG9zZWRSZWN0KCk7Cit9CisKK3N0YXRpYyBMYXlvdXRSZWN0IGNvbXB1dGVDYXJldFJlY3RGb3JM
aW5lUG9zaXRpb24oY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OkxpbmVJdGVyYXRvciYgbGluZSwg
ZmxvYXQgbG9naWNhbExlZnRQb3NpdGlvbiwgQ2FyZXRSZWN0TW9kZSBjYXJldFJlY3RNb2RlKQor
eworICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9jayA9IGxpbmUtPmNvbnRhaW5pbmdCbG9jaygpOwor
ICAgIGF1dG8gbGluZVNlbGVjdGlvblJlY3QgPSBsaW5lLT5zZWxlY3Rpb25SZWN0KCk7CisKKyAg
ICBpbnQgaGVpZ2h0ID0gbGluZVNlbGVjdGlvblJlY3QuaGVpZ2h0KCk7CisgICAgaW50IHRvcCA9
IGxpbmVTZWxlY3Rpb25SZWN0LnkoKTsKKworICAgIC8vIERpc3RyaWJ1dGUgdGhlIGNhcmV0J3Mg
d2lkdGggdG8gZWl0aGVyIHNpZGUgb2YgdGhlIG9mZnNldC4KKyAgICBmbG9hdCBsZWZ0ID0gbG9n
aWNhbExlZnRQb3NpdGlvbjsKKyAgICBpbnQgY2FyZXRXaWR0aExlZnRPZk9mZnNldCA9IGNhcmV0
V2lkdGggLyAyOworICAgIGxlZnQgLT0gY2FyZXRXaWR0aExlZnRPZk9mZnNldDsKKyAgICBpbnQg
Y2FyZXRXaWR0aFJpZ2h0T2ZPZmZzZXQgPSBjYXJldFdpZHRoIC0gY2FyZXRXaWR0aExlZnRPZk9m
ZnNldDsKKyAgICBsZWZ0ID0gcm91bmRmKGxlZnQpOworCisgICAgZmxvYXQgbGluZUxlZnQgPSBs
aW5lU2VsZWN0aW9uUmVjdC54KCk7CisgICAgZmxvYXQgbGluZVJpZ2h0ID0gbGluZVNlbGVjdGlv
blJlY3QubWF4WCgpOworCisgICAgYm9vbCByaWdodEFsaWduZWQgPSBmYWxzZTsKKyAgICBzd2l0
Y2ggKGNvbnRhaW5pbmdCbG9jay5zdHlsZSgpLnRleHRBbGlnbigpKSB7CisgICAgY2FzZSBUZXh0
QWxpZ25Nb2RlOjpSaWdodDoKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0Ogor
ICAgICAgICByaWdodEFsaWduZWQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRl
eHRBbGlnbk1vZGU6OkxlZnQ6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0Ogor
ICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Q2VudGVyOgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6
V2ViS2l0Q2VudGVyOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1
c3RpZnk6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKKyAgICAgICAgcmlnaHRBbGln
bmVkID0gIWNvbnRhaW5pbmdCbG9jay5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6CisgICAgICAgIHJp
Z2h0QWxpZ25lZCA9IGNvbnRhaW5pbmdCbG9jay5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZmxvYXQgbGVmdEVkZ2UgPSBzdGQ6
Om1pbjxmbG9hdD4oMCwgbGluZUxlZnQpOworICAgIGZsb2F0IHJpZ2h0RWRnZSA9IHN0ZDo6bWF4
PGZsb2F0Pihjb250YWluaW5nQmxvY2subG9naWNhbFdpZHRoKCksIGxpbmVSaWdodCk7CisKKyAg
ICBpZiAocmlnaHRBbGlnbmVkKSB7CisgICAgICAgIGxlZnQgPSBzdGQ6Om1heChsZWZ0LCBsZWZ0
RWRnZSk7CisgICAgICAgIGxlZnQgPSBzdGQ6Om1pbihsZWZ0LCBsaW5lUmlnaHQgLSBjYXJldFdp
ZHRoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0ID0gc3RkOjptaW4obGVmdCwgcmlnaHRF
ZGdlIC0gY2FyZXRXaWR0aFJpZ2h0T2ZPZmZzZXQpOworICAgICAgICBsZWZ0ID0gc3RkOjptYXgo
bGVmdCwgbGluZUxlZnQpOworICAgIH0KKworICAgIGF1dG8gcmVjdCA9IEludFJlY3QobGVmdCwg
dG9wLCBjYXJldFdpZHRoLCBoZWlnaHQpOworCisgICAgaWYgKGNhcmV0UmVjdE1vZGUgPT0gQ2Fy
ZXRSZWN0TW9kZTo6RXhwYW5kVG9FbmRPZkxpbmUpCisgICAgICAgIHJlY3Quc2hpZnRNYXhYRWRn
ZVRvKGxpbmVSaWdodCk7CisKKyAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrLnN0eWxlKCkuaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJlY3QgOiByZWN0LnRyYW5zcG9zZWRSZWN0KCk7Cit9
CisKK3N0YXRpYyBMYXlvdXRSZWN0IGNvbXB1dGVDYXJldFJlY3RGb3JUZXh0KGNvbnN0IElubGlu
ZVJ1bkFuZE9mZnNldCYgcnVuQW5kT2Zmc2V0LCBDYXJldFJlY3RNb2RlIGNhcmV0UmVjdE1vZGUp
Cit7CisgICAgaWYgKCFydW5BbmRPZmZzZXQucnVuKQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgYXV0byYgdGV4dFJ1biA9IGRvd25jYXN0PExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRl
cmF0b3I+KHJ1bkFuZE9mZnNldC5ydW4pOworICAgIGF1dG8gbGluZSA9IHRleHRSdW4ubGluZSgp
OworCisgICAgZmxvYXQgcG9zaXRpb24gPSB0ZXh0UnVuLT5wb3NpdGlvbkZvck9mZnNldChydW5B
bmRPZmZzZXQub2Zmc2V0KTsKKyAgICByZXR1cm4gY29tcHV0ZUNhcmV0UmVjdEZvckxpbmVQb3Np
dGlvbihsaW5lLCBwb3NpdGlvbiwgY2FyZXRSZWN0TW9kZSk7Cit9CisKK3N0YXRpYyBMYXlvdXRS
ZWN0IGNvbXB1dGVDYXJldFJlY3RGb3JMaW5lQnJlYWsoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0
JiBydW5BbmRPZmZzZXQsIENhcmV0UmVjdE1vZGUgY2FyZXRSZWN0TW9kZSkKK3sKKyAgICBBU1NF
UlQoIXJ1bkFuZE9mZnNldC5vZmZzZXQpOworCisgICAgaWYgKCFydW5BbmRPZmZzZXQucnVuKQor
ICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBsaW5lID0gcnVuQW5kT2Zmc2V0LnJ1bi5s
aW5lKCk7CisgICAgcmV0dXJuIGNvbXB1dGVDYXJldFJlY3RGb3JMaW5lUG9zaXRpb24obGluZSwg
bGluZS0+Y29udGVudExvZ2ljYWxMZWZ0KCksIGNhcmV0UmVjdE1vZGUpOworfQorCitzdGF0aWMg
TGF5b3V0UmVjdCBjb21wdXRlQ2FyZXRSZWN0Rm9yU1ZHSW5saW5lVGV4dChjb25zdCBJbmxpbmVS
dW5BbmRPZmZzZXQmIHJ1bkFuZE9mZnNldCwgQ2FyZXRSZWN0TW9kZSkKK3sKKyAgICBhdXRvKiBi
b3ggPSBydW5BbmRPZmZzZXQucnVuID8gcnVuQW5kT2Zmc2V0LnJ1bi0+bGVnYWN5SW5saW5lQm94
KCkgOiBudWxscHRyOworICAgIGF1dG8gY2FyZXRPZmZzZXQgPSBydW5BbmRPZmZzZXQub2Zmc2V0
OworCisgICAgaWYgKCFpczxJbmxpbmVUZXh0Qm94Pihib3gpKQorICAgICAgICByZXR1cm4geyB9
OworCisgICAgYXV0byYgdGV4dEJveCA9IGRvd25jYXN0PElubGluZVRleHRCb3g+KCpib3gpOwor
ICAgIGlmIChjYXJldE9mZnNldCA8IHRleHRCb3guc3RhcnQoKSB8fCBjYXJldE9mZnNldCA+IHRl
eHRCb3guc3RhcnQoKSArIHRleHRCb3gubGVuKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICAvLyBVc2UgdGhlIGVkZ2Ugb2YgdGhlIHNlbGVjdGlvbiByZWN0IHRvIGRldGVybWluZSB0aGUg
Y2FyZXQgcmVjdC4KKyAgICBpZiAoY2FyZXRPZmZzZXQgPCB0ZXh0Qm94LnN0YXJ0KCkgKyB0ZXh0
Qm94LmxlbigpKSB7CisgICAgICAgIExheW91dFJlY3QgcmVjdCA9IHRleHRCb3gubG9jYWxTZWxl
Y3Rpb25SZWN0KGNhcmV0T2Zmc2V0LCBjYXJldE9mZnNldCArIDEpOworICAgICAgICBMYXlvdXRV
bml0IHggPSB0ZXh0Qm94LmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHJlY3QueCgpIDogcmVj
dC5tYXhYKCk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KHgsIHJlY3QueSgpLCBjYXJldFdp
ZHRoLCByZWN0LmhlaWdodCgpKTsKKyAgICB9CisKKyAgICBMYXlvdXRSZWN0IHJlY3QgPSB0ZXh0
Qm94LmxvY2FsU2VsZWN0aW9uUmVjdChjYXJldE9mZnNldCAtIDEsIGNhcmV0T2Zmc2V0KTsKKyAg
ICBMYXlvdXRVbml0IHggPSB0ZXh0Qm94LmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHJlY3Qu
bWF4WCgpIDogcmVjdC54KCk7CisgICAgcmV0dXJuIHsgeCwgcmVjdC55KCksIGNhcmV0V2lkdGgs
IHJlY3QuaGVpZ2h0KCkgfTsKK30KKworc3RhdGljIExheW91dFJlY3QgY29tcHV0ZUNhcmV0UmVj
dEZvckJveChjb25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyLCBjb25zdCBJbmxpbmVSdW5BbmRPZmZz
ZXQmIHJ1bkFuZE9mZnNldCwgQ2FyZXRSZWN0TW9kZSBjYXJldFJlY3RNb2RlKQoreworICAgIC8v
IFZpc2libGVQb3NpdGlvbnMgYXQgb2Zmc2V0cyBpbnNpZGUgY29udGFpbmVycyBlaXRoZXIgYSkg
cmVmZXIgdG8gdGhlIHBvc2l0aW9ucyBiZWZvcmUvYWZ0ZXIKKyAgICAvLyB0aG9zZSBjb250YWlu
ZXJzICh0YWJsZXMgYW5kIHNlbGVjdCBlbGVtZW50cykgb3IgYikgcmVmZXIgdG8gdGhlIHBvc2l0
aW9uIGluc2lkZSBhbiBlbXB0eSBibG9jay4KKyAgICAvLyBUaGV5IG5ldmVyIHJlZmVyIHRvIGNo
aWxkcmVuLgorICAgIC8vIEZJWE1FOiBQYWludCB0aGUgY2FyZXRzIGluc2lkZSBlbXB0eSBibG9j
a3MgZGlmZmVyZW50bHkgdGhhbiB0aGUgY2FyZXRzIGJlZm9yZS9hZnRlciBlbGVtZW50cy4KKwor
ICAgIExheW91dFJlY3QgcmVjdChyZW5kZXJlci5sb2NhdGlvbigpLCBMYXlvdXRTaXplKGNhcmV0
V2lkdGgsIHJlbmRlcmVyLmhlaWdodCgpKSk7CisgICAgYm9vbCBsdHIgPSBydW5BbmRPZmZzZXQu
cnVuID8gcnVuQW5kT2Zmc2V0LnJ1bi0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIDogcmVuZGVy
ZXIuc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CisKKyAgICBpZiAoKCFydW5BbmRP
ZmZzZXQub2Zmc2V0KSBeIGx0cikKKyAgICAgICAgcmVjdC5tb3ZlKExheW91dFNpemUocmVuZGVy
ZXIud2lkdGgoKSAtIGNhcmV0V2lkdGgsIDBfbHUpKTsKKworICAgIGlmIChydW5BbmRPZmZzZXQu
cnVuKSB7CisgICAgICAgIGF1dG8gbGluZSA9IHJ1bkFuZE9mZnNldC5ydW4ubGluZSgpOworICAg
ICAgICBMYXlvdXRVbml0IHRvcCA9IGxpbmUtPnRvcCgpOworICAgICAgICByZWN0LnNldFkodG9w
KTsKKyAgICAgICAgcmVjdC5zZXRIZWlnaHQobGluZS0+Ym90dG9tKCkgLSB0b3ApOworICAgIH0K
KworICAgIC8vIElmIGhlaWdodCBvZiBib3ggaXMgc21hbGxlciB0aGFuIGZvbnQgaGVpZ2h0LCB1
c2UgdGhlIGxhdHRlciBvbmUsCisgICAgLy8gb3RoZXJ3aXNlIHRoZSBjYXJldCBtaWdodCBiZWNv
bWUgaW52aXNpYmxlLgorICAgIC8vCisgICAgLy8gQWxzbywgaWYgdGhlIGJveCBpcyBub3QgYSBy
ZXBsYWNlZCBlbGVtZW50LCBhbHdheXMgdXNlIHRoZSBmb250IGhlaWdodC4KKyAgICAvLyBUaGlz
IHByZXZlbnRzIHRoZSAiYmlnIGNhcmV0IiBidWcgZGVzY3JpYmVkIGluOgorICAgIC8vIDxyZGFy
Oi8vcHJvYmxlbS8zNzc3ODA0PiBEZWxldGluZyBhbGwgY29udGVudCBpbiBhIGRvY3VtZW50IGNh
biByZXN1bHQgaW4gZ2lhbnQgdGFsbC1hcy13aW5kb3cgaW5zZXJ0aW9uIHBvaW50CisgICAgLy8K
KyAgICAvLyBGSVhNRTogaWdub3JpbmcgOmZpcnN0LWxpbmUsIG1pc3NpbmcgZ29vZCByZWFzb24g
dG8gdGFrZSBjYXJlIG9mCisgICAgTGF5b3V0VW5pdCBmb250SGVpZ2h0ID0gcmVuZGVyZXIuc3R5
bGUoKS5mb250TWV0cmljcygpLmhlaWdodCgpOworICAgIGlmIChmb250SGVpZ2h0ID4gcmVjdC5o
ZWlnaHQoKSB8fCAoIXJlbmRlcmVyLmlzUmVwbGFjZWQoKSAmJiAhcmVuZGVyZXIuaXNUYWJsZSgp
KSkKKyAgICAgICAgcmVjdC5zZXRIZWlnaHQoZm9udEhlaWdodCk7CisKKyAgICAvLyBNb3ZlIHRv
IGxvY2FsIGNvb3JkcworICAgIHJlY3QubW92ZUJ5KC1yZW5kZXJlci5sb2NhdGlvbigpKTsKKwor
ICAgIC8vIEZJWE1FOiBCb3JkZXIvcGFkZGluZyBzaG91bGQgYmUgYWRkZWQgZm9yIGFsbCBlbGVt
ZW50cyBidXQgdGhpcyB3b3JrYXJvdW5kCisgICAgLy8gaXMgbmVlZGVkIGJlY2F1c2Ugd2UgdXNl
IG9mZnNldHMgaW5zaWRlIGFuICJhdG9taWMiIGVsZW1lbnQgdG8gcmVwcmVzZW50CisgICAgLy8g
cG9zaXRpb25zIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGVsZW1lbnQgaW4gZGVwcmVjYXRlZCBlZGl0
aW5nIG9mZnNldHMuCisgICAgaWYgKHJlbmRlcmVyLmVsZW1lbnQoKSAmJiAhKGVkaXRpbmdJZ25v
cmVzQ29udGVudCgqcmVuZGVyZXIuZWxlbWVudCgpKSB8fCBpc1JlbmRlcmVkVGFibGUocmVuZGVy
ZXIuZWxlbWVudCgpKSkpIHsKKyAgICAgICAgcmVjdC5zZXRYKHJlY3QueCgpICsgcmVuZGVyZXIu
Ym9yZGVyTGVmdCgpICsgcmVuZGVyZXIucGFkZGluZ0xlZnQoKSk7CisgICAgICAgIHJlY3Quc2V0
WShyZWN0LnkoKSArIHJlbmRlcmVyLnBhZGRpbmdUb3AoKSArIHJlbmRlcmVyLmJvcmRlclRvcCgp
KTsKKyAgICB9CisKKyAgICBpZiAoY2FyZXRSZWN0TW9kZSA9PSBDYXJldFJlY3RNb2RlOjpFeHBh
bmRUb0VuZE9mTGluZSkKKyAgICAgICAgcmVjdC5zaGlmdE1heFhFZGdlVG8ocmVuZGVyZXIueCgp
ICsgcmVuZGVyZXIud2lkdGgoKSk7CisKKyAgICByZXR1cm4gcmVuZGVyZXIuaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IHJlY3QgOiByZWN0LnRyYW5zcG9zZWRSZWN0KCk7Cit9CisKK3N0YXRp
YyBMYXlvdXRSZWN0IGNvbXB1dGVDYXJldFJlY3RGb3JCbG9jayhjb25zdCBSZW5kZXJCbG9jayYg
cmVuZGVyZXIsIGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYgcnVuQW5kT2Zmc2V0LCBDYXJldFJl
Y3RNb2RlIGNhcmV0UmVjdE1vZGUpCit7CisgICAgLy8gRG8gdGhlIG5vcm1hbCBjYWxjdWxhdGlv
biBpbiBtb3N0IGNhc2VzLgorICAgIGlmIChyZW5kZXJlci5maXJzdENoaWxkKCkpCisgICAgICAg
IHJldHVybiBjb21wdXRlQ2FyZXRSZWN0Rm9yQm94KHJlbmRlcmVyLCBydW5BbmRPZmZzZXQsIGNh
cmV0UmVjdE1vZGUpOworCisgICAgcmV0dXJuIGNvbXB1dGVDYXJldFJlY3RGb3JFbXB0eUVsZW1l
bnQocmVuZGVyZXIsIHJlbmRlcmVyLndpZHRoKCksIHJlbmRlcmVyLnRleHRJbmRlbnRPZmZzZXQo
KSwgY2FyZXRSZWN0TW9kZSk7Cit9CisKK3N0YXRpYyBMYXlvdXRSZWN0IGNvbXB1dGVDYXJldFJl
Y3RGb3JJbmxpbmUoY29uc3QgUmVuZGVySW5saW5lJiByZW5kZXJlcikKK3sKKyAgICBpZiAocmVu
ZGVyZXIuZmlyc3RDaGlsZCgpKSB7CisgICAgICAgIC8vIFRoaXMgY29uZGl0aW9uIGlzIHBvc3Np
YmxlIGlmIHRoZSBSZW5kZXJJbmxpbmUgaXMgYXQgYW4gZWRpdGluZyBib3VuZGFyeSwKKyAgICAg
ICAgLy8gaS5lLiB0aGUgVmlzaWJsZVBvc2l0aW9uIGlzOgorICAgICAgICAvLyAgIDxSZW5kZXJJ
bmxpbmUgZWRpdGluZ0JvdW5kYXJ5PXRydWU+fDxSZW5kZXJUZXh0PiA8L1JlbmRlclRleHQ+PC9S
ZW5kZXJJbmxpbmU+CisgICAgICAgIC8vIEZJWE1FOiBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRv
IG1ha2UgdGhpcyByZXR1cm4gYSB2YWxpZCByZWN0LCBub3RlIHRoYXQKKyAgICAgICAgLy8gdGhl
cmUgYXJlIG5vIGxpbmUgYm94ZXMgY3JlYXRlZCBpbiB0aGUgYWJvdmUgY2FzZS4KKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBMYXlvdXRSZWN0IGNhcmV0UmVjdCA9IGNvbXB1dGVD
YXJldFJlY3RGb3JFbXB0eUVsZW1lbnQocmVuZGVyZXIsIHJlbmRlcmVyLmhvcml6b250YWxCb3Jk
ZXJBbmRQYWRkaW5nRXh0ZW50KCksIDAsIENhcmV0UmVjdE1vZGU6Ok5vcm1hbCk7CisKKyAgICBp
ZiAoSW5saW5lQm94KiBmaXJzdEJveCA9IHJlbmRlcmVyLmZpcnN0TGluZUJveCgpKQorICAgICAg
ICBjYXJldFJlY3QubW92ZUJ5KExheW91dFBvaW50KGZpcnN0Qm94LT50b3BMZWZ0KCkpKTsKKwor
ICAgIHJldHVybiBjYXJldFJlY3Q7Cit9CisKK0xheW91dFJlY3QgY29tcHV0ZUxvY2FsQ2FyZXRS
ZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IElubGluZVJ1bkFuZE9mZnNl
dCYgcnVuQW5kT2Zmc2V0LCBDYXJldFJlY3RNb2RlIGNhcmV0UmVjdE1vZGUpCit7CisgICAgaWYg
KGlzPFJlbmRlclNWR0lubGluZVRleHQ+KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIGNvbXB1
dGVDYXJldFJlY3RGb3JTVkdJbmxpbmVUZXh0KHJ1bkFuZE9mZnNldCwgY2FyZXRSZWN0TW9kZSk7
CisKKyAgICBpZiAoaXM8UmVuZGVyVGV4dD4ocmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gY29t
cHV0ZUNhcmV0UmVjdEZvclRleHQocnVuQW5kT2Zmc2V0LCBjYXJldFJlY3RNb2RlKTsKKworICAg
IGlmIChpczxSZW5kZXJMaW5lQnJlYWs+KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIGNvbXB1
dGVDYXJldFJlY3RGb3JMaW5lQnJlYWsocnVuQW5kT2Zmc2V0LCBjYXJldFJlY3RNb2RlKTsKKwor
ICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gY29tcHV0
ZUNhcmV0UmVjdEZvckJsb2NrKGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlciksIHJ1bkFu
ZE9mZnNldCwgY2FyZXRSZWN0TW9kZSk7CisKKyAgICBpZiAoaXM8UmVuZGVyQm94PihyZW5kZXJl
cikpCisgICAgICAgIHJldHVybiBjb21wdXRlQ2FyZXRSZWN0Rm9yQm94KGRvd25jYXN0PFJlbmRl
ckJveD4ocmVuZGVyZXIpLCBydW5BbmRPZmZzZXQsIGNhcmV0UmVjdE1vZGUpOworCisgICAgaWYg
KGlzPFJlbmRlcklubGluZT4ocmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gY29tcHV0ZUNhcmV0
UmVjdEZvcklubGluZShkb3duY2FzdDxSZW5kZXJJbmxpbmU+KHJlbmRlcmVyKSk7CisKKyAgICBy
ZXR1cm4geyB9OworfQorCit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0NhcmV0UmVjdENvbXB1dGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ2FyZXRS
ZWN0Q29tcHV0YXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu
LjczNjJhODQzYjNmNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9DYXJldFJlY3RDb21wdXRhdGlvbi5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIklubGluZVJ1bkFuZE9mZnNldC5oIgorI2luY2x1ZGUg
IlJlbmRlck9iamVjdEVudW1zLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFz
cyBDYXJldFJlY3RNb2RlIHsKKyAgICBOb3JtYWwsCisgICAgRXhwYW5kVG9FbmRPZkxpbmUKK307
CisKK0xheW91dFJlY3QgY29tcHV0ZUxvY2FsQ2FyZXRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYsIENhcmV0UmVjdE1vZGUgPSBDYXJldFJlY3RNb2Rl
OjpOb3JtYWwpOworCit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAK
aW5kZXggYzhkODFlZjI0ODY2Li4zNThkNjZmOTg3MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMjg0MSwxNSArMjg0MSw2IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OnVwZGF0ZUhpdFRlc3RSZXN1bHQoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlv
dXRQb2ludCYKICAgICB9CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyQmxvY2s6OmxvY2FsQ2FyZXRS
ZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYgcnVuQW5kT2Zmc2V0LCBDYXJldFJlY3RNb2Rl
IGNhcmV0UmVjdE1vZGUpIGNvbnN0Ci17Ci0gICAgLy8gRG8gdGhlIG5vcm1hbCBjYWxjdWxhdGlv
biBpbiBtb3N0IGNhc2VzLgotICAgIGlmIChmaXJzdENoaWxkKCkpCi0gICAgICAgIHJldHVybiBS
ZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KHJ1bkFuZE9mZnNldCwgY2FyZXRSZWN0TW9kZSk7Ci0K
LSAgICByZXR1cm4gbG9jYWxDYXJldFJlY3RGb3JFbXB0eUVsZW1lbnQod2lkdGgoKSwgdGV4dElu
ZGVudE9mZnNldCgpLCBjYXJldFJlY3RNb2RlKTsKLX0KLQogdm9pZCBSZW5kZXJCbG9jazo6YWRk
Rm9jdXNSaW5nUmVjdHNGb3JJbmxpbmVDaGlsZHJlbihWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25z
dCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqKQogewogICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApp
bmRleCA3ZDM0MTRiNGM1ZjAuLmY5YjJkOThkZDlhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmgKQEAgLTQ4NCw4ICs0ODQsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBw
YWludENvbnRpbnVhdGlvbk91dGxpbmVzKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7
CiAKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNl
dCYsIENhcmV0UmVjdE1vZGUpIGNvbnN0IGZpbmFsOwotICAgIAogICAgIC8vIEZJWE1FLUJMT0NL
RkxPVzogUmVtb3ZlIHZpcnR1YWxpemFpb24gd2hlbiBhbGwgY2FsbGVycyBoYXZlIG1vdmVkIHRv
IFJlbmRlckJsb2NrRmxvdwogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9y
UG9pbnRXaXRoSW5saW5lQ2hpbGRyZW4oY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJG
cmFnbWVudENvbnRhaW5lciopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0Zsb3cuY3BwCmluZGV4IDNkYjdhODZhNjE1MS4uODVjM2I3MTNhOGI4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtNDQ0MCw1OSArNDQ0
MCw1IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW5saW5lUHJlZmVycmVkTG9naWNh
bFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsCiAgICAgbWF4TG9naWNhbFdpZHRoID0gcHJl
ZmVycmVkV2lkdGgobWF4TG9naWNhbFdpZHRoLCBpbmxpbmVNYXgpOwogfQogCi1MYXlvdXRSZWN0
IFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUNhcmV0UmVjdChjb25zdCBMYXlvdXRSZWN0JiBsaW5l
U2VsZWN0aW9uUmVjdCwgZmxvYXQgbG9naWNhbExlZnRQb3NpdGlvbiwgdW5zaWduZWQgY2FyZXRX
aWR0aCwgQ2FyZXRSZWN0TW9kZSBjYXJldFJlY3RNb2RlKSBjb25zdAotewotICAgIGludCBoZWln
aHQgPSBsaW5lU2VsZWN0aW9uUmVjdC5oZWlnaHQoKTsKLSAgICBpbnQgdG9wID0gbGluZVNlbGVj
dGlvblJlY3QueSgpOwotCi0gICAgLy8gRGlzdHJpYnV0ZSB0aGUgY2FyZXQncyB3aWR0aCB0byBl
aXRoZXIgc2lkZSBvZiB0aGUgb2Zmc2V0LgotICAgIGZsb2F0IGxlZnQgPSBsb2dpY2FsTGVmdFBv
c2l0aW9uOwotICAgIGludCBjYXJldFdpZHRoTGVmdE9mT2Zmc2V0ID0gY2FyZXRXaWR0aCAvIDI7
Ci0gICAgbGVmdCAtPSBjYXJldFdpZHRoTGVmdE9mT2Zmc2V0OwotICAgIGludCBjYXJldFdpZHRo
UmlnaHRPZk9mZnNldCA9IGNhcmV0V2lkdGggLSBjYXJldFdpZHRoTGVmdE9mT2Zmc2V0OwotICAg
IGxlZnQgPSByb3VuZGYobGVmdCk7Ci0KLSAgICBmbG9hdCBsaW5lTGVmdCA9IGxpbmVTZWxlY3Rp
b25SZWN0LngoKTsKLSAgICBmbG9hdCBsaW5lUmlnaHQgPSBsaW5lU2VsZWN0aW9uUmVjdC5tYXhY
KCk7Ci0KLSAgICBib29sIHJpZ2h0QWxpZ25lZCA9IGZhbHNlOwotICAgIHN3aXRjaCAoc3R5bGUo
KS50ZXh0QWxpZ24oKSkgewotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6Ci0gICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodDoKLSAgICAgICAgcmlnaHRBbGlnbmVkID0gdHJ1
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpMZWZ0OgotICAgIGNh
c2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVmdDoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNl
bnRlcjoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdENlbnRlcjoKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OgotICAgIGNhc2UgVGV4dEFsaWdu
TW9kZTo6U3RhcnQ6Ci0gICAgICAgIHJpZ2h0QWxpZ25lZCA9ICFzdHlsZSgpLmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpF
bmQ6Ci0gICAgICAgIHJpZ2h0QWxpZ25lZCA9IHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBmbG9hdCBsZWZ0RWRnZSA9IHN0ZDo6
bWluPGZsb2F0PigwLCBsaW5lTGVmdCk7Ci0gICAgZmxvYXQgcmlnaHRFZGdlID0gc3RkOjptYXg8
ZmxvYXQ+KGxvZ2ljYWxXaWR0aCgpLCBsaW5lUmlnaHQpOwotCi0gICAgaWYgKHJpZ2h0QWxpZ25l
ZCkgewotICAgICAgICBsZWZ0ID0gc3RkOjptYXgobGVmdCwgbGVmdEVkZ2UpOwotICAgICAgICBs
ZWZ0ID0gc3RkOjptaW4obGVmdCwgbGluZVJpZ2h0IC0gY2FyZXRXaWR0aCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgbGVmdCA9IHN0ZDo6bWluKGxlZnQsIHJpZ2h0RWRnZSAtIGNhcmV0V2lkdGhS
aWdodE9mT2Zmc2V0KTsKLSAgICAgICAgbGVmdCA9IHN0ZDo6bWF4KGxlZnQsIGxpbmVMZWZ0KTsK
LSAgICB9Ci0KLSAgICBhdXRvIHJlY3QgPSBJbnRSZWN0KGxlZnQsIHRvcCwgY2FyZXRXaWR0aCwg
aGVpZ2h0KTsKLQotICAgIGlmIChjYXJldFJlY3RNb2RlID09IENhcmV0UmVjdE1vZGU6OkV4cGFu
ZFRvRW5kT2ZMaW5lKQotICAgICAgICByZWN0LnNoaWZ0TWF4WEVkZ2VUbyhsaW5lUmlnaHQpOwot
Ci0gICAgcmV0dXJuIHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJlY3QgOiBy
ZWN0LnRyYW5zcG9zZWRSZWN0KCk7Ci19Ci0KIH0KIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKaW5kZXggZGQ0M2JjMWU4YWZk
Li4zZDliNTFmMjg4ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0Zsb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmgKQEAgLTM5OCw3ICszOTgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRGbG9hdHNUb05l
d1BhcmVudChSZW5kZXJCbG9ja0Zsb3cmIHRvQmxvY2tGbG93KSBjb25zdDsKICAgICAKICAgICBM
YXlvdXRVbml0IGVuZFBhZGRpbmdXaWR0aEZvckNhcmV0KCkgY29uc3Q7Ci0gICAgTGF5b3V0UmVj
dCBjb21wdXRlQ2FyZXRSZWN0KGNvbnN0IExheW91dFJlY3QmIGxpbmVTZWxlY3Rpb25SZWN0LCBm
bG9hdCBsb2dpY2FsTGVmdFBvc2l0aW9uLCB1bnNpZ25lZCBjYXJldFdpZHRoLCBDYXJldFJlY3RN
b2RlID0gQ2FyZXRSZWN0TW9kZTo6Tm9ybWFsKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIGJv
b2wgc2hvdWxkUmVzZXRMb2dpY2FsSGVpZ2h0QmVmb3JlTGF5b3V0KCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRl
eCAzMDdmOWIyYzdmMmYuLjQwNjUxOWYyYzY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAKQEAgLTQ0MzIsNTUgKzQ0MzIsNiBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0
ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0UmVwbGFjZWQoTG9naWNhbEV4dGVudENvbXB1dGVkVmFs
dQogICAgIGNvbXB1dGVkVmFsdWVzLm1fcG9zaXRpb24gPSBsb2dpY2FsVG9wUG9zOwogfQogCi1M
YXlvdXRSZWN0IFJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zm
c2V0JiBydW5BbmRPZmZzZXQsIENhcmV0UmVjdE1vZGUgY2FyZXRSZWN0TW9kZSkgY29uc3QKLXsK
LSAgICAvLyBWaXNpYmxlUG9zaXRpb25zIGF0IG9mZnNldHMgaW5zaWRlIGNvbnRhaW5lcnMgZWl0
aGVyIGEpIHJlZmVyIHRvIHRoZSBwb3NpdGlvbnMgYmVmb3JlL2FmdGVyCi0gICAgLy8gdGhvc2Ug
Y29udGFpbmVycyAodGFibGVzIGFuZCBzZWxlY3QgZWxlbWVudHMpIG9yIGIpIHJlZmVyIHRvIHRo
ZSBwb3NpdGlvbiBpbnNpZGUgYW4gZW1wdHkgYmxvY2suCi0gICAgLy8gVGhleSBuZXZlciByZWZl
ciB0byBjaGlsZHJlbi4KLSAgICAvLyBGSVhNRTogUGFpbnQgdGhlIGNhcmV0cyBpbnNpZGUgZW1w
dHkgYmxvY2tzIGRpZmZlcmVudGx5IHRoYW4gdGhlIGNhcmV0cyBiZWZvcmUvYWZ0ZXIgZWxlbWVu
dHMuCi0KLSAgICBMYXlvdXRSZWN0IHJlY3QobG9jYXRpb24oKSwgTGF5b3V0U2l6ZShjYXJldFdp
ZHRoLCBoZWlnaHQoKSkpOwotICAgIGJvb2wgbHRyID0gcnVuQW5kT2Zmc2V0LnJ1biA/IHJ1bkFu
ZE9mZnNldC5ydW4tPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA6IHN0eWxlKCkuaXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpOwotCi0gICAgaWYgKCghcnVuQW5kT2Zmc2V0Lm9mZnNldCkgXiBsdHIp
Ci0gICAgICAgIHJlY3QubW92ZShMYXlvdXRTaXplKHdpZHRoKCkgLSBjYXJldFdpZHRoLCAwX2x1
KSk7Ci0KLSAgICBpZiAocnVuQW5kT2Zmc2V0LnJ1bikgewotICAgICAgICBhdXRvIGxpbmUgPSBy
dW5BbmRPZmZzZXQucnVuLmxpbmUoKTsKLSAgICAgICAgTGF5b3V0VW5pdCB0b3AgPSBsaW5lLT50
b3AoKTsKLSAgICAgICAgcmVjdC5zZXRZKHRvcCk7Ci0gICAgICAgIHJlY3Quc2V0SGVpZ2h0KGxp
bmUtPmJvdHRvbSgpIC0gdG9wKTsKLSAgICB9Ci0KLSAgICAvLyBJZiBoZWlnaHQgb2YgYm94IGlz
IHNtYWxsZXIgdGhhbiBmb250IGhlaWdodCwgdXNlIHRoZSBsYXR0ZXIgb25lLAotICAgIC8vIG90
aGVyd2lzZSB0aGUgY2FyZXQgbWlnaHQgYmVjb21lIGludmlzaWJsZS4KLSAgICAvLwotICAgIC8v
IEFsc28sIGlmIHRoZSBib3ggaXMgbm90IGEgcmVwbGFjZWQgZWxlbWVudCwgYWx3YXlzIHVzZSB0
aGUgZm9udCBoZWlnaHQuCi0gICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgImJpZyBjYXJldCIgYnVn
IGRlc2NyaWJlZCBpbjoKLSAgICAvLyA8cmRhcjovL3Byb2JsZW0vMzc3NzgwND4gRGVsZXRpbmcg
YWxsIGNvbnRlbnQgaW4gYSBkb2N1bWVudCBjYW4gcmVzdWx0IGluIGdpYW50IHRhbGwtYXMtd2lu
ZG93IGluc2VydGlvbiBwb2ludAotICAgIC8vCi0gICAgLy8gRklYTUU6IGlnbm9yaW5nIDpmaXJz
dC1saW5lLCBtaXNzaW5nIGdvb2QgcmVhc29uIHRvIHRha2UgY2FyZSBvZgotICAgIExheW91dFVu
aXQgZm9udEhlaWdodCA9IHN0eWxlKCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKLSAgICBpZiAo
Zm9udEhlaWdodCA+IHJlY3QuaGVpZ2h0KCkgfHwgKCFpc1JlcGxhY2VkKCkgJiYgIWlzVGFibGUo
KSkpCi0gICAgICAgIHJlY3Quc2V0SGVpZ2h0KGZvbnRIZWlnaHQpOwotCi0gICAgLy8gTW92ZSB0
byBsb2NhbCBjb29yZHMKLSAgICByZWN0Lm1vdmVCeSgtbG9jYXRpb24oKSk7Ci0KLSAgICAvLyBG
SVhNRTogQm9yZGVyL3BhZGRpbmcgc2hvdWxkIGJlIGFkZGVkIGZvciBhbGwgZWxlbWVudHMgYnV0
IHRoaXMgd29ya2Fyb3VuZAotICAgIC8vIGlzIG5lZWRlZCBiZWNhdXNlIHdlIHVzZSBvZmZzZXRz
IGluc2lkZSBhbiAiYXRvbWljIiBlbGVtZW50IHRvIHJlcHJlc2VudAotICAgIC8vIHBvc2l0aW9u
cyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBlbGVtZW50IGluIGRlcHJlY2F0ZWQgZWRpdGluZyBvZmZz
ZXRzLgotICAgIGlmIChlbGVtZW50KCkgJiYgIShlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKmVsZW1l
bnQoKSkgfHwgaXNSZW5kZXJlZFRhYmxlKGVsZW1lbnQoKSkpKSB7Ci0gICAgICAgIHJlY3Quc2V0
WChyZWN0LngoKSArIGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkpOwotICAgICAgICByZWN0
LnNldFkocmVjdC55KCkgKyBwYWRkaW5nVG9wKCkgKyBib3JkZXJUb3AoKSk7Ci0gICAgfQotCi0g
ICAgaWYgKGNhcmV0UmVjdE1vZGUgPT0gQ2FyZXRSZWN0TW9kZTo6RXhwYW5kVG9FbmRPZkxpbmUp
Ci0gICAgICAgIHJlY3Quc2hpZnRNYXhYRWRnZVRvKHgoKSArIHdpZHRoKCkpOwotCi0gICAgcmV0
dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyByZWN0IDogcmVjdC50cmFuc3Bvc2VkUmVj
dCgpOwotfQotCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQm94Ojpwb3NpdGlvbkZvclBvaW50KGNv
bnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGZy
YWdtZW50KQogewogICAgIC8vIG5vIGNoaWxkcmVuLi4ucmV0dXJuIHRoaXMgcmVuZGVyIG9iamVj
dCdzIGVsZW1lbnQsIGlmIHRoZXJlIGlzIG9uZSwgYW5kIG9mZnNldCAwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggM2NkODBiY2QwNzJkLi4xMDI1OTI1NDY1OTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTQ5Nyw4ICs0OTcsNiBAQCBvdmVycmlk
ZTsKICAgICBib29sIGlzVW5zcGxpdHRhYmxlRm9yUGFnaW5hdGlvbigpIGNvbnN0OwogCiAgICAg
Ym9vbCBzaG91bGRUcmVhdENoaWxkQXNSZXBsYWNlZEluVGFibGVDZWxscygpIGNvbnN0OwotICAg
IAotICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0
JiwgQ2FyZXRSZWN0TW9kZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIExheW91dFJl
Y3Qgb3ZlcmZsb3dDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZy
YWdtZW50Q29udGFpbmVyKiA9IG51bGxwdHIsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5
ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIFBhaW50UGhhc2UgPSBQYWludFBoYXNlOjpC
bG9ja0JhY2tncm91bmQpIGNvbnN0OwogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdmVyZmxvd0Ns
aXBSZWN0Rm9yQ2hpbGRMYXllcnMoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJG
cmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5
IHJlbGV2YW5jeSkgY29uc3QgeyByZXR1cm4gb3ZlcmZsb3dDbGlwUmVjdChsb2NhdGlvbiwgZnJh
Z21lbnQsIHJlbGV2YW5jeSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IGI5ODI3YzhhMTRkMi4uODM4MjU2YzExZWYyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHAKQEAgLTI2MjYsNzggKzI2MjYsNiBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjbGVh
ckZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dCgpCiAgICAgZmlyc3RMZXR0ZXJSZW1haW5pbmdUZXh0
TWFwKCkucmVtb3ZlKHRoaXMpOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckJveE1vZGVsT2JqZWN0
Ojpsb2NhbENhcmV0UmVjdEZvckVtcHR5RWxlbWVudChMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRV
bml0IHRleHRJbmRlbnRPZmZzZXQsIENhcmV0UmVjdE1vZGUgY2FyZXRSZWN0TW9kZSkgY29uc3QK
LXsKLSAgICBBU1NFUlQoIWZpcnN0Q2hpbGQoKSk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBkb2Vz
IG5vdCB0YWtlIGludG8gYWNjb3VudCBlaXRoZXIgOmZpcnN0LWxpbmUgb3IgOmZpcnN0LWxldHRl
cgotICAgIC8vIEhvd2V2ZXIsIGFzIHNvb24gYXMgc29tZSBjb250ZW50IGlzIGVudGVyZWQsIHRo
ZSBsaW5lIGJveGVzIHdpbGwgYmUKLSAgICAvLyBjb25zdHJ1Y3RlZCBhbmQgdGhpcyBrbHVkZ2Ug
aXMgbm90IGNhbGxlZCBhbnkgbW9yZS4gU28gb25seSB0aGUgY2FyZXQgc2l6ZQotICAgIC8vIG9m
IGFuIGVtcHR5IDpmaXJzdC1saW5lJ2QgYmxvY2sgaXMgd3JvbmcuIEkgdGhpbmsgd2UgY2FuIGxp
dmUgd2l0aCB0aGF0LgotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjdXJyZW50U3R5bGUgPSBmaXJz
dExpbmVTdHlsZSgpOwotCi0gICAgZW51bSBDYXJldEFsaWdubWVudCB7IGFsaWduTGVmdCwgYWxp
Z25SaWdodCwgYWxpZ25DZW50ZXIgfTsKLQotICAgIENhcmV0QWxpZ25tZW50IGFsaWdubWVudCA9
IGFsaWduTGVmdDsKLQotICAgIHN3aXRjaCAoY3VycmVudFN0eWxlLnRleHRBbGlnbigpKSB7Ci0g
ICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpMZWZ0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2Vi
S2l0TGVmdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpDZW50ZXI6
Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXI6Ci0gICAgICAgIGFsaWdubWVu
dCA9IGFsaWduQ2VudGVyOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6
OlJpZ2h0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQ6Ci0gICAgICAgIGFs
aWdubWVudCA9IGFsaWduUmlnaHQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dEFsaWdu
TW9kZTo6SnVzdGlmeToKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlN0YXJ0OgotICAgICAgICBp
ZiAoIWN1cnJlbnRTdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICBh
bGlnbm1lbnQgPSBhbGlnblJpZ2h0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRleHRBbGln
bk1vZGU6OkVuZDoKLSAgICAgICAgaWYgKGN1cnJlbnRTdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkpCi0gICAgICAgICAgICBhbGlnbm1lbnQgPSBhbGlnblJpZ2h0OwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBMYXlvdXRVbml0IHggPSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVm
dCgpOwotICAgIExheW91dFVuaXQgbWF4WCA9IHdpZHRoIC0gYm9yZGVyUmlnaHQoKSAtIHBhZGRp
bmdSaWdodCgpOwotCi0gICAgc3dpdGNoIChhbGlnbm1lbnQpIHsKLSAgICBjYXNlIGFsaWduTGVm
dDoKLSAgICAgICAgaWYgKGN1cnJlbnRTdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0g
ICAgICAgICAgICB4ICs9IHRleHRJbmRlbnRPZmZzZXQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgYWxpZ25DZW50ZXI6Ci0gICAgICAgIHggPSAoeCArIG1heFgpIC8gMjsKLSAgICAgICAgaWYg
KGN1cnJlbnRTdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICB4ICs9
IHRleHRJbmRlbnRPZmZzZXQgLyAyOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB4IC09IHRl
eHRJbmRlbnRPZmZzZXQgLyAyOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGFsaWduUmlnaHQ6
Ci0gICAgICAgIHggPSBtYXhYIC0gY2FyZXRXaWR0aDsKLSAgICAgICAgaWYgKCFjdXJyZW50U3R5
bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICAgICAgeCAtPSB0ZXh0SW5kZW50
T2Zmc2V0OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgeCA9IHN0ZDo6bWluKHgsIHN0ZDo6
bWF4PExheW91dFVuaXQ+KG1heFggLSBjYXJldFdpZHRoLCAwKSk7Ci0KLSAgICBhdXRvIGxpbmVI
ZWlnaHQgPSB0aGlzLT5saW5lSGVpZ2h0KHRydWUsIGN1cnJlbnRTdHlsZS5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9uT2ZJ
bnRlcmlvckxpbmVCb3hlcyk7Ci0gICAgYXV0byBoZWlnaHQgPSBzdGQ6Om1pbihsaW5lSGVpZ2h0
LCBMYXlvdXRVbml0IHsgY3VycmVudFN0eWxlLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCkgfSk7Ci0g
ICAgYXV0byB5ID0gcGFkZGluZ1RvcCgpICsgYm9yZGVyVG9wKCkgKyAobGluZUhlaWdodCA+IGhl
aWdodCA/IChsaW5lSGVpZ2h0IC0gaGVpZ2h0KSAvIDIgOiBMYXlvdXRVbml0IHsgfSk7Ci0KLSAg
ICBhdXRvIHJlY3QgPSBMYXlvdXRSZWN0KHgsIHksIGNhcmV0V2lkdGgsIGhlaWdodCk7Ci0KLSAg
ICBpZiAoY2FyZXRSZWN0TW9kZSA9PSBDYXJldFJlY3RNb2RlOjpFeHBhbmRUb0VuZE9mTGluZSkK
LSAgICAgICAgcmVjdC5zaGlmdE1heFhFZGdlVG8od2lkdGgpOwotCi0gICAgcmV0dXJuIGN1cnJl
bnRTdHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gcmVjdCA6IHJlY3QudHJhbnNwb3Nl
ZFJlY3QoKTsKLX0KLQogYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6c2hvdWxkQW50aWFsaWFz
TGluZXMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAgIC8vIEZJWE1FOiBXZSBtYXkg
d2FudCB0byBub3QgYW50aWFsaWFzIHdoZW4gc2NhbGVkIGJ5IGFuIGludGVncmFsIHZhbHVlLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAppbmRl
eCA0ZTVhYmE2ZDA0NzMuLmE4ZGRhYTkwOGI2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgKQEAgLTI2MCw4ICsyNjAsNiBAQCBwcm90ZWN0
ZWQ6CiAKICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBjaG9vc2VJbnRlcnBvbGF0aW9uUXVhbGl0
eShHcmFwaGljc0NvbnRleHQmLCBJbWFnZSYsIGNvbnN0IHZvaWQqLCBjb25zdCBMYXlvdXRTaXpl
Jik7CiAKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0Rm9yRW1wdHlFbGVtZW50KExheW91
dFVuaXQgd2lkdGgsIExheW91dFVuaXQgdGV4dEluZGVudE9mZnNldCwgQ2FyZXRSZWN0TW9kZSA9
IENhcmV0UmVjdE1vZGU6Ok5vcm1hbCkgY29uc3Q7Ci0KICAgICBzdGF0aWMgYm9vbCBzaG91bGRB
bnRpYWxpYXNMaW5lcyhHcmFwaGljc0NvbnRleHQmKTsKIAogICAgIHN0YXRpYyB2b2lkIGNsaXBS
b3VuZGVkSW5uZXJSZWN0KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmIGNsaXBSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlcklubGluZS5jcHAKaW5kZXggYTg5YmViZmMyMzhlLi44YWJiZWVmYzc5N2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCkBAIC0yMzYsMjUgKzIzNiw2IEBA
IHZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVBbHdheXNDcmVhdGVMaW5lQm94ZXMoYm9vbCBmdWxs
TGF5b3V0KQogICAgIH0KIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJJbmxpbmU6OmxvY2FsQ2FyZXRS
ZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYsIENhcmV0UmVjdE1vZGUpIGNvbnN0Ci17Ci0g
ICAgaWYgKGZpcnN0Q2hpbGQoKSkgewotICAgICAgICAvLyBUaGlzIGNvbmRpdGlvbiBpcyBwb3Nz
aWJsZSBpZiB0aGUgUmVuZGVySW5saW5lIGlzIGF0IGFuIGVkaXRpbmcgYm91bmRhcnksCi0gICAg
ICAgIC8vIGkuZS4gdGhlIFZpc2libGVQb3NpdGlvbiBpczoKLSAgICAgICAgLy8gICA8UmVuZGVy
SW5saW5lIGVkaXRpbmdCb3VuZGFyeT10cnVlPnw8UmVuZGVyVGV4dD4gPC9SZW5kZXJUZXh0Pjwv
UmVuZGVySW5saW5lPgotICAgICAgICAvLyBGSVhNRTogbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0
byBtYWtlIHRoaXMgcmV0dXJuIGEgdmFsaWQgcmVjdCwgbm90ZSB0aGF0Ci0gICAgICAgIC8vIHRo
ZXJlIGFyZSBubyBsaW5lIGJveGVzIGNyZWF0ZWQgaW4gdGhlIGFib3ZlIGNhc2UuCi0gICAgICAg
IHJldHVybiBMYXlvdXRSZWN0KCk7Ci0gICAgfQotCi0gICAgTGF5b3V0UmVjdCBjYXJldFJlY3Qg
PSBsb2NhbENhcmV0UmVjdEZvckVtcHR5RWxlbWVudChob3Jpem9udGFsQm9yZGVyQW5kUGFkZGlu
Z0V4dGVudCgpLCAwKTsKLQotICAgIGlmIChJbmxpbmVCb3gqIGZpcnN0Qm94ID0gZmlyc3RMaW5l
Qm94KCkpCi0gICAgICAgIGNhcmV0UmVjdC5tb3ZlQnkoTGF5b3V0UG9pbnQoZmlyc3RCb3gtPnRv
cExlZnQoKSkpOwotCi0gICAgcmV0dXJuIGNhcmV0UmVjdDsKLX0KLQogdm9pZCBSZW5kZXJJbmxp
bmU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRP
ZmZzZXQpCiB7CiAgICAgbV9saW5lQm94ZXMucGFpbnQodGhpcywgcGFpbnRJbmZvLCBwYWludE9m
ZnNldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKaW5kZXggMDc3NDU5
OWUxZWQ1Li44Nzg4ZmZkZWYwNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5s
aW5lLmgKQEAgLTg2LDggKzg2LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QWx3YXlzQ3JlYXRl
TGluZUJveGVzKCkgeyBzZXRSZW5kZXJJbmxpbmVBbHdheXNDcmVhdGVzTGluZUJveGVzKHRydWUp
OyB9CiAgICAgdm9pZCB1cGRhdGVBbHdheXNDcmVhdGVMaW5lQm94ZXMoYm9vbCBmdWxsTGF5b3V0
KTsKIAotICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zm
c2V0JiwgQ2FyZXRSZWN0TW9kZSkgY29uc3QgZmluYWw7Ci0KICAgICBib29sIGhpdFRlc3RDdWxs
ZWRJbmxpbmUoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0
VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQpOwogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaW5lQnJlYWsuY3BwCmluZGV4IGIzNmNjZjU1OTQ1Mi4uZjZmZTBjMWRmMjcyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcApAQCAtMTU5
LDE4ICsxNTksNiBAQCB2b2lkIFJlbmRlckxpbmVCcmVhazo6c2V0U2VsZWN0aW9uU3RhdGUoSGln
aGxpZ2h0U3RhdGUgc3RhdGUpCiAgICAgbV9pbmxpbmVCb3hXcmFwcGVyLT5yb290KCkuc2V0SGFz
U2VsZWN0ZWRDaGlsZHJlbihzdGF0ZSAhPSBIaWdobGlnaHRTdGF0ZTo6Tm9uZSk7CiB9CiAKLUxh
eW91dFJlY3QgUmVuZGVyTGluZUJyZWFrOjpsb2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5B
bmRPZmZzZXQmIHJ1bkFuZE9mZnNldCwgQ2FyZXRSZWN0TW9kZSBjYXJldFJlY3RNb2RlKSBjb25z
dAotewotICAgIEFTU0VSVCghcnVuQW5kT2Zmc2V0Lm9mZnNldCk7Ci0gICAgQVNTRVJUKHJ1bkFu
ZE9mZnNldC5ydW4gPT0gTGF5b3V0SW50ZWdyYXRpb246OnJ1bkZvcigqdGhpcykpOwotCi0gICAg
aWYgKCFydW5BbmRPZmZzZXQucnVuKQotICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwotCi0g
ICAgYXV0byBsaW5lID0gcnVuQW5kT2Zmc2V0LnJ1bi5saW5lKCk7Ci0gICAgcmV0dXJuIGxpbmUt
PmNvbnRhaW5pbmdCbG9jaygpLmNvbXB1dGVDYXJldFJlY3QobGluZS0+c2VsZWN0aW9uUmVjdCgp
LCBsaW5lLT5jb250ZW50TG9naWNhbExlZnQoKSwgY2FyZXRXaWR0aCwgY2FyZXRSZWN0TW9kZSk7
Ci19Ci0KIEludFJlY3QgUmVuZGVyTGluZUJyZWFrOjpsaW5lc0JvdW5kaW5nQm94KCkgY29uc3QK
IHsKICAgICBhdXRvIHJ1biA9IExheW91dEludGVncmF0aW9uOjpydW5Gb3IoKnRoaXMpOwpAQCAt
MjE0LDcgKzIwMiwxMCBAQCB2b2lkIFJlbmRlckxpbmVCcmVhazo6Y29sbGVjdFNlbGVjdGlvblJl
Y3RzKFZlY3RvcjxTZWxlY3Rpb25SZWN0PiYgcmVjdHMsIHVuc2lnbgogICAgICAgICByZXR1cm47
CiAgICAgYXV0byBsaW5lID0gcnVuLmxpbmUoKTsKIAotICAgIExheW91dFJlY3QgcmVjdCA9IGxp
bmUtPmNvbnRhaW5pbmdCbG9jaygpLmNvbXB1dGVDYXJldFJlY3QobGluZS0+c2VsZWN0aW9uUmVj
dCgpLCBsaW5lLT5jb250ZW50TG9naWNhbExlZnQoKSwgMCk7CisgICAgYXV0byBsaW5lU2VsZWN0
aW9uUmVjdCA9IGxpbmUtPnNlbGVjdGlvblJlY3QoKTsKKyAgICBMYXlvdXRSZWN0IHJlY3QgPSBJ
bnRSZWN0KHJ1bi0+bG9naWNhbExlZnQoKSwgbGluZVNlbGVjdGlvblJlY3QueSgpLCAwLCBsaW5l
U2VsZWN0aW9uUmVjdC5oZWlnaHQoKSk7CisgICAgaWYgKCFsaW5lLT5pc0hvcml6b250YWwoKSkK
KyAgICAgICAgcmVjdCA9IHJlY3QudHJhbnNwb3NlZFJlY3QoKTsKIAogICAgIGlmIChsaW5lLT5s
ZWdhY3lSb290SW5saW5lQm94KCkgJiYgbGluZS0+bGVnYWN5Um9vdElubGluZUJveCgpLT5pc0Zp
cnN0QWZ0ZXJQYWdlQnJlYWsoKSkgewogICAgICAgICBpZiAocnVuLT5pc0hvcml6b250YWwoKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaAppbmRleCBjZDJhMmVi
ZjM5NDMuLjRmZjJkMWViODYxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpbmVCcmVhay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aW5lQnJlYWsuaApAQCAtNjYsNyArNjYsNiBAQCBwcml2YXRlOgogICAgIGludCBjYXJldE1pbk9m
ZnNldCgpIGNvbnN0IGZpbmFsOwogICAgIGludCBjYXJldE1heE9mZnNldCgpIGNvbnN0IGZpbmFs
OwogICAgIGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFmKCkgY29uc3QgZmluYWw7Ci0gICAgTGF5b3V0
UmVjdCBsb2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmLCBDYXJldFJlY3RN
b2RlKSBjb25zdCBmaW5hbDsKICAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKEhpZ2hsaWdodFN0
YXRlKSBmaW5hbDsKIAogICAgIExheW91dFVuaXQgbGluZUhlaWdodChib29sIGZpcnN0TGluZSwg
TGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUpIGNvbnN0IGZpbmFsOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCAxN2ZjMzNkNDFlMDQuLjk2
ZWFmNGI5MzY4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAK
QEAgLTE0MDAsMTEgKzE0MDAsNiBAQCBMYXlvdXRTaXplIFJlbmRlck9iamVjdDo6b2Zmc2V0RnJv
bUFuY2VzdG9yQ29udGFpbmVyKFJlbmRlckVsZW1lbnQmIGNvbnRhaW5lcikgYwogICAgIHJldHVy
biBvZmZzZXQ7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyT2JqZWN0Ojpsb2NhbENhcmV0UmVjdChj
b25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmLCBDYXJldFJlY3RNb2RlKSBjb25zdAotewotICAgIHJl
dHVybiBMYXlvdXRSZWN0KCk7Ci19Ci0KIGJvb2wgUmVuZGVyT2JqZWN0Ojppc1Jvb3RlZCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGlzRGVzY2VuZGFudE9mKCZ2aWV3KCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IGI5MTU5MjJiMjFlOS4uNjQ1NzkxODgxZmNh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC02NzIsOSArNjcy
LDYgQEAgcHVibGljOgogICAgIC8vIFdoZXRoZXIgb3Igbm90IGEgZ2l2ZW4gYmxvY2sgbmVlZHMg
dG8gcGFpbnQgc2VsZWN0aW9uIGdhcHMuCiAgICAgdmlydHVhbCBib29sIHNob3VsZFBhaW50U2Vs
ZWN0aW9uR2FwcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICAvLyBSZXR1cm5zIHRo
ZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgY2FyZXQgd2l0aGluIHRoaXMgcmVuZGVyIG9iamVj
dC4KLSAgICB2aXJ0dWFsIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVu
QW5kT2Zmc2V0JiwgQ2FyZXRSZWN0TW9kZSA9IENhcmV0UmVjdE1vZGU6Ok5vcm1hbCkgY29uc3Q7
Ci0KICAgICAvLyBXaGVuIHBlcmZvcm1pbmcgYSBnbG9iYWwgZG9jdW1lbnQgdGVhci1kb3duLCBv
ciB3aGVuIGdvaW5nIGludG8gdGhlIGJhY2svZm9yd2FyZCBjYWNoZSwgdGhlIHJlbmRlcmVyIG9m
IHRoZSBkb2N1bWVudCBpcyBjbGVhcmVkLgogICAgIGJvb2wgcmVuZGVyVHJlZUJlaW5nRGVzdHJv
eWVkKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3RFbnVtcy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdEVu
dW1zLmgKaW5kZXggMDZlNzczMzIwOGFiLi4zOTllYmViMTVkNjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RFbnVtcy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RFbnVtcy5oCkBAIC02MSwxMCArNjEsNCBAQCBlbnVt
IE1hcENvb3JkaW5hdGVzTW9kZSB7CiB9OwogdHlwZWRlZiB1bnNpZ25lZCBNYXBDb29yZGluYXRl
c0ZsYWdzOwogCi1lbnVtIGNsYXNzIENhcmV0UmVjdE1vZGUgewotICAgIE5vcm1hbCwKLSAgICBF
eHBhbmRUb0VuZE9mTGluZQotfTsKLQotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dC5jcHAKaW5kZXggODVlMDgyYTBkYWY3Li4yMTBlZDI4Y2U5ZTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAgLTY5OSwxOCArNjk5LDYgQEAgVmlzaWJsZVBv
c2l0aW9uIFJlbmRlclRleHQ6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBv
aW50LCBjb25zdCBSZW4KICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKDAsIEFmZmlu
aXR5OjpEb3duc3RyZWFtKTsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJUZXh0Ojpsb2NhbENhcmV0
UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmIHJ1bkFuZE9mZnNldCwgQ2FyZXRSZWN0TW9k
ZSBjYXJldFJlY3RNb2RlKSBjb25zdAotewotICAgIGlmICghcnVuQW5kT2Zmc2V0LnJ1bikKLSAg
ICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKLQotICAgIGF1dG8mIHRleHRSdW4gPSBkb3duY2Fz
dDxMYXlvdXRJbnRlZ3JhdGlvbjo6VGV4dFJ1bkl0ZXJhdG9yPihydW5BbmRPZmZzZXQucnVuKTsK
LSAgICBhdXRvIGxpbmUgPSB0ZXh0UnVuLmxpbmUoKTsKLQotICAgIGZsb2F0IHBvc2l0aW9uID0g
dGV4dFJ1bi0+cG9zaXRpb25Gb3JPZmZzZXQocnVuQW5kT2Zmc2V0Lm9mZnNldCk7Ci0gICAgcmV0
dXJuIGxpbmUtPmNvbnRhaW5pbmdCbG9jaygpLmNvbXB1dGVDYXJldFJlY3QobGluZS0+c2VsZWN0
aW9uUmVjdCgpLCBwb3NpdGlvbiwgY2FyZXRXaWR0aCwgY2FyZXRSZWN0TW9kZSk7Ci19Ci0KIEFM
V0FZU19JTkxJTkUgZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udENh
c2NhZGUmIGYsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hT
ZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJm
bG93LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgaWYgKHN0eWxlLmhh
c1RleHRDb21iaW5lKCkgJiYgaXM8UmVuZGVyQ29tYmluZVRleHQ+KCp0aGlzKSkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKaW5kZXggYjVkMjg1ODljZWFjLi42ZTRhNzFlMTdl
NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaApAQCAtMjAzLDcgKzIwMyw2
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKEhpZ2hsaWdodFN0YXRl
KSBmaW5hbDsKICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3RGb3JSZXBhaW50KGNvbnN0IFJl
bmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJs
ZUNvbnRlbnQgPSB0cnVlKSBmaW5hbDsKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KGNv
bnN0IElubGluZVJ1bkFuZE9mZnNldCYsIENhcmV0UmVjdE1vZGUpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoY29uc3QgUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikgY29uc3QgZmluYWw7CiAKICAgICB2
b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGZsb2F0IGxlYWRXaWR0aCwgSGFzaFNl
dDxjb25zdCBGb250Kj4mIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cmKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCmlu
ZGV4IGZiY2E4ZjMyYzRmYS4uZmRmYjk1OGU3NTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKQEAgLTExOSwzMCArMTE5
LDYgQEAgc3RkOjp1bmlxdWVfcHRyPElubGluZVRleHRCb3g+IFJlbmRlclNWR0lubGluZVRleHQ6
OmNyZWF0ZVRleHRCb3goKQogICAgIHJldHVybiBib3g7IAogfQogCi1MYXlvdXRSZWN0IFJlbmRl
clNWR0lubGluZVRleHQ6OmxvY2FsQ2FyZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYg
cnVuQW5kT2Zmc2V0LCBDYXJldFJlY3RNb2RlKSBjb25zdAotewotICAgIGF1dG8qIGJveCA9IHJ1
bkFuZE9mZnNldC5ydW4gPyBydW5BbmRPZmZzZXQucnVuLT5sZWdhY3lJbmxpbmVCb3goKSA6IG51
bGxwdHI7Ci0gICAgYXV0byBjYXJldE9mZnNldCA9IHJ1bkFuZE9mZnNldC5vZmZzZXQ7Ci0KLSAg
ICBpZiAoIWlzPElubGluZVRleHRCb3g+KGJveCkpCi0gICAgICAgIHJldHVybiBMYXlvdXRSZWN0
KCk7Ci0KLSAgICBhdXRvJiB0ZXh0Qm94ID0gZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oKmJveCk7
Ci0gICAgaWYgKGNhcmV0T2Zmc2V0IDwgdGV4dEJveC5zdGFydCgpIHx8IGNhcmV0T2Zmc2V0ID4g
dGV4dEJveC5zdGFydCgpICsgdGV4dEJveC5sZW4oKSkKLSAgICAgICAgcmV0dXJuIExheW91dFJl
Y3QoKTsKLQotICAgIC8vIFVzZSB0aGUgZWRnZSBvZiB0aGUgc2VsZWN0aW9uIHJlY3QgdG8gZGV0
ZXJtaW5lIHRoZSBjYXJldCByZWN0LgotICAgIGlmIChjYXJldE9mZnNldCA8IHRleHRCb3guc3Rh
cnQoKSArIHRleHRCb3gubGVuKCkpIHsKLSAgICAgICAgTGF5b3V0UmVjdCByZWN0ID0gdGV4dEJv
eC5sb2NhbFNlbGVjdGlvblJlY3QoY2FyZXRPZmZzZXQsIGNhcmV0T2Zmc2V0ICsgMSk7Ci0gICAg
ICAgIExheW91dFVuaXQgeCA9IHRleHRCb3guaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gcmVj
dC54KCkgOiByZWN0Lm1heFgoKTsKLSAgICAgICAgcmV0dXJuIExheW91dFJlY3QoeCwgcmVjdC55
KCksIGNhcmV0V2lkdGgsIHJlY3QuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIExheW91dFJlY3Qg
cmVjdCA9IHRleHRCb3gubG9jYWxTZWxlY3Rpb25SZWN0KGNhcmV0T2Zmc2V0IC0gMSwgY2FyZXRP
ZmZzZXQpOwotICAgIExheW91dFVuaXQgeCA9IHRleHRCb3guaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpID8gcmVjdC5tYXhYKCkgOiByZWN0LngoKTsKLSAgICByZXR1cm4gTGF5b3V0UmVjdCh4LCBy
ZWN0LnkoKSwgY2FyZXRXaWR0aCwgcmVjdC5oZWlnaHQoKSk7Ci19Ci0KIEZsb2F0UmVjdCBSZW5k
ZXJTVkdJbmxpbmVUZXh0OjpmbG9hdExpbmVzQm91bmRpbmdCb3goKSBjb25zdAogewogICAgIEZs
b2F0UmVjdCBib3VuZGluZ0JveDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgKaW5kZXggYmIyZWFmZWNlNWU3Li4yOGU5NWEwYmI0YmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5l
VGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5l
VGV4dC5oCkBAIC02Miw3ICs2Miw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc1NWR0lubGluZVRl
eHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKICAgICBWaXNpYmxlUG9zaXRp
b24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlckZyYWdt
ZW50Q29udGFpbmVyKikgb3ZlcnJpZGU7Ci0gICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChj
b25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmLCBDYXJldFJlY3RNb2RlKSBjb25zdCBvdmVycmlkZTsK
ICAgICBJbnRSZWN0IGxpbmVzQm91bmRpbmdCb3goKSBjb25zdCBvdmVycmlkZTsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW5saW5lVGV4dEJveD4gY3JlYXRlVGV4dEJveCgpIG92ZXJyaWRlOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>