<?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>216914</bug_id>
          
          <creation_ts>2020-09-23 22:57:24 -0700</creation_ts>
          <short_desc>Remove Simple Line Layout</short_desc>
          <delta_ts>2020-09-25 06:17:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=122458</see_also>
          <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>
          <dependson>216928</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>annulen</cc>
    
    <cc>apinheiro</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</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>ryuan.choi</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</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>1691388</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-09-23 22:57:24 -0700</bug_when>
    <thetext>LFC is better and faster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691389</commentid>
    <comment_count>1</comment_count>
      <attachid>409533</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-09-23 22:59:08 -0700</bug_when>
    <thetext>Created attachment 409533
wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691397</commentid>
    <comment_count>2</comment_count>
      <attachid>409535</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-09-23 23:19:20 -0700</bug_when>
    <thetext>Created attachment 409535
wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691420</commentid>
    <comment_count>3</comment_count>
      <attachid>409539</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-09-24 01:24:22 -0700</bug_when>
    <thetext>Created attachment 409539
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691426</commentid>
    <comment_count>4</comment_count>
      <attachid>409541</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-09-24 01:37:39 -0700</bug_when>
    <thetext>Created attachment 409541
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691508</commentid>
    <comment_count>5</comment_count>
      <attachid>409541</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-24 07:35:46 -0700</bug_when>
    <thetext>Comment on attachment 409541
patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691540</commentid>
    <comment_count>6</comment_count>
      <attachid>409583</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-09-24 09:11:29 -0700</bug_when>
    <thetext>Created attachment 409583
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691784</commentid>
    <comment_count>7</comment_count>
      <attachid>409658</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-09-24 22:56:16 -0700</bug_when>
    <thetext>Created attachment 409658
test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691855</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-25 06:16:27 -0700</bug_when>
    <thetext>Committed r267565: &lt;https://trac.webkit.org/changeset/267565&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 409583.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691856</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-25 06:17:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/69566968&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409533</attachid>
            <date>2020-09-23 22:59:08 -0700</date>
            <delta_ts>2020-09-23 23:19:20 -0700</delta_ts>
            <desc>wip</desc>
            <filename>delete-sll.patch</filename>
            <type>text/plain</type>
            <size>221409</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKaW5kZXggYTQzZmI5NzFjMDAwLi42NDQ5M2JiN2EwNTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CkBAIC0yMTk5LDEzICsyMTk5LDYgQEAgcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCiByZW5k
ZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCiByZW5k
ZXJpbmcvU2Nyb2xsQWxpZ25tZW50LmNwcAotcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3Bw
Ci1yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNwcAotcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwCi1yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1
bmN0aW9ucy5jcHAKLXJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5jcHAKLXJl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwCi1yZW5kZXJpbmcvU2ltcGxlTGlu
ZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmNwcAogcmVuZGVyaW5nL1RhYmxlTGF5b3V0LmNw
cAogcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHAKIHJlbmRlcmluZy9UZXh0UGFp
bnRTdHlsZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCA4MWM2MTAzN2IyMWYuLmFhNzk0OTJjNGNhMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzY5LDcg
KzM2OSw2IEBACiAJCTBGRkQ0NUFBMjQzQzMwMjcwMDBENEJFQSAvKiBTY3JvbGxpbmdUcmVlTGF0
Y2hpbmdDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkZENDVBNzI0M0JGMjU3MDAwRDRCRUEgLyogU2Nyb2xsaW5nVHJlZUxhdGNoaW5n
Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGRkQ0RDYxMTg2NTFGQTMwMDUxMkY2RSAvKiBBc3luY1Njcm9sbGluZ0Nvb3JkaW5h
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZE
NEQ1RjE4NjUxRkEzMDA1MTJGNkUgLyogQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTEwRkIwODRCMTRF
MTVDN0UwMEEzREI5OCAvKiBQdWJsaWNVUkxNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMEZCMDg0QTE0RTE1QzdFMDBBM0RCOTggLyogUHVi
bGljVVJMTWFuYWdlci5oICovOyB9OwotCQkxMTJCMzRENTFFNjBCOTgzMDBCQjMxMEEgLyogU2lt
cGxlTGluZUxheW91dFBhZ2luYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDExMkIzNEQ0MUU2MEI5ODMwMEJCMzEwQSAvKiBTaW1wbGVMaW5lTGF5
b3V0UGFnaW5hdGlvbi5oICovOyB9OwogCQkxMTMxMENGMjIwQkE0QTMyMDA2NUE4RDAgLyogTGF5
b3V0VHJlZUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDExMTAwRkQ3MjA5NTE0REYwMDgxQUE2QyAvKiBMYXlvdXRUcmVlQnVpbGRlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTExMzEwQ0Yz
MjBCQTRBMzcwMDY1QThEMCAvKiBMYXlvdXRSZXBsYWNlZEJveC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTExQzYxNTYyMEFEMUFFMTAwNUI4MkZBIC8q
IExheW91dFJlcGxhY2VkQm94LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTEzMTBDRjQyMEJBNEEzRDAwNjVBOEQwIC8qIExheW91dEl0ZXJhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMTEwMEZD
NzIwOTI3NjRDMDA4MUFBNkMgLyogTGF5b3V0SXRlcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzkzLDcgKzM5Miw2IEBACiAJCTExOTlG
QTQ2MjA4RTM1QTMwMDIzNThDQyAvKiBMYXlvdXRDb250YWluZXJCb3guaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExOTlGQTQ0MjA4RTM1QTMwMDIzNThD
QyAvKiBMYXlvdXRDb250YWluZXJCb3guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxMTk5RkE1QjIwOEUzQzdGMDAyMzU4Q0MgLyogRGlzcGxheUJv
eC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTE5OUZB
NTkyMDhFM0M3RjAwMjM1OENDIC8qIERpc3BsYXlCb3guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxMUNCMjc4OTIwM0JBNTcwMDA0QTFEQzkgLyog
UmVuZGVyVHJlZUJ1aWxkZXJGdWxsU2NyZWVuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxMUNCMjc4NzIwM0JBNTcwMDA0QTFEQzkgLyogUmVuZGVyVHJl
ZUJ1aWxkZXJGdWxsU2NyZWVuLmggKi87IH07Ci0JCTExRTA2N0VFMUU2MjQ2RTUwMDE2MkQxNiAv
KiBTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDExRTA2N0VEMUU2MjQ2RTUwMDE2MkQxNiAvKiBTaW1wbGVMaW5l
TGF5b3V0Q292ZXJhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkxNDAwRDdBODE3MTM2RUE3MDA3N0NFMDUgLyogU2NyaXB0V3JhcHBhYmxlSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQw
MEQ3QTcxNzEzNkVBNzAwNzdDRTA1IC8qIFNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAzQjk5NzA5RUIx
M0FGMDA3OTdDN0YgLyogRE9NV2luZG93LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNDAzQjk5NTA5RUIxM0FGMDA3OTdDN0YgLyogRE9NV2luZG93Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwM0JB
MEYwOUVCMThGOTAwNzk3QzdGIC8qIEpTRE9NV2luZG93LmggaW4gQ29weSBHZW5lcmF0ZWQgSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAzQkEwRTA5RUIxOEY4
MDA3OTdDN0YgLyogSlNET01XaW5kb3cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMTg3Nyw5ICsxODc1LDcgQEAKIAkJNTgwMzcxNjQxQTY2RjFE
MzAwQkFGNTE5IC8qIExheWVyRnJhZ21lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU4MDM3MTYzMUE2NkYxRDMwMEJBRjUxOSAvKiBMYXllckZyYWdt
ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NTgyNEFCQTMxQUU4MTExNjAwOTA3NEI3IC8qIFJ1YnlFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODI0QUJBMTFBRTgxMTE2MDA5MDc0Qjcg
LyogUnVieUVsZW1lbnQuaCAqLzsgfTsKIAkJNTgyNEFCQTcxQUU4MTM4NDAwOTA3NEI3IC8qIFJ1
YnlUZXh0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTgyNEFCQTUxQUU4MTM4NDAwOTA3NEI3IC8qIFJ1YnlUZXh0RWxlbWVudC5oICovOyB9
OwotCQk1ODJDQjA1MzFBNzhBMTRCMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dFRleHRGcmFn
bWVudEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1ODJDQjA1MjFBNzhBMTRCMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dFRleHRGcmFn
bWVudEl0ZXJhdG9yLmggKi87IH07CiAJCTU4MkRFMzI1MUMzMEM4NTQwMEJFMDJBOCAvKiBUZXh0
RGVjb3JhdGlvblBhaW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU4MkRFMzIzMUMzMEM4NTQwMEJFMDJBOCAvKiBUZXh0RGVjb3JhdGlvblBhaW50
ZXIuaCAqLzsgfTsKLQkJNTg1RDZFMDQxQTFBNzkyRTAwRkE0RjEyIC8qIFNpbXBsZUxpbmVMYXlv
dXRGbG93Q29udGVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU4NUQ2RTAyMUExQTc5MkUwMEZBNEYxMiAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0Nv
bnRlbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNTg5NTU2RUQxOEQ0QTQ0MDAwNzY0QjAzIC8qIEJvcmRlckVkZ2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4OTU1NkVDMThENEE0NDAwMDc2NEIw
MyAvKiBCb3JkZXJFZGdlLmggKi87IH07CiAJCTU4QjJGOUY0MjIzMkQ0NTMwMDkzOEQ2MyAvKiBS
ZXNpemVPYnNlcnZhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNThCMkY5RjMyMjMyRDQzRjAwOTM4RDYzIC8qIFJlc2l6ZU9ic2VydmF0aW9uLmgg
Ki87IH07CiAJCTU4QjJGOUY1MjIzMkQ0NTgwMDkzOEQ2MyAvKiBSZXNpemVPYnNlcnZlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNThCMkY5RUMyMjMy
RDQzQjAwOTM4RDYzIC8qIFJlc2l6ZU9ic2VydmVyLmggKi87IH07CkBAIC00OTg1LDcgKzQ5ODEs
NiBAQAogCQlFNDI5NUZBNDEyQjA2MTRFMDBEMUFDRTAgLyogUmVzb3VyY2VMb2FkUHJpb3JpdHku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0Mjk1RkEz
MTJCMDYxNEUwMEQxQUNFMCAvKiBSZXNvdXJjZUxvYWRQcmlvcml0eS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0MkU3NkRDMUM3QUY3NzYwMEUz
NjE0RCAvKiBTdHlsZVVwZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQyRTc2REIxQzdBRjc3NjAwRTM2MTREIC8qIFN0eWxlVXBkYXRlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQzMTA1QkIx
Njc1MEYxNjAwREIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MzEwNUJBMTY3NTBGMTYwMERCMkZCOCAvKiBOb2Rl
VHJhdmVyc2FsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKLQkJRTQzNDNEMjMyMzkyNzc4NDAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxTaW1w
bGVQYXRoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NDM0M0QyMTIzOTI3NzgzMDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGgu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDM0
M0QyNTIzOTI3NzkwMDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDM0M0QyNDIz
OTI3NzhGMDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQzQTAyM0IxN0VC
MzcwQTAwNENERDI1IC8qIFJlbmRlckVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0M0EwMjNBMTdFQjM3MEEwMDRDREQyNSAvKiBSZW5kZXJF
bGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRTQzQUY4RTcxQUM1QjdFQzAwQ0E3MTdFIC8qIENhY2hlVmFsaWRhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQUY4RTUxQUM1QjdERDAw
Q0E3MTdFIC8qIENhY2hlVmFsaWRhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC01MDQwLDcgKzUwMzUsNiBAQAogCQlFNDgxMzdCOTFEQjNC
NTI2MDA1QzU5QkYgLyogU3R5bGVWYWxpZGl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4MTM3QjgxREIzQjUyNjAwNUM1OUJGIC8qIFN0eWxlVmFs
aWRpdHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlFNDg0QTMzRTIzMDU1MzI1MDA5QURFNkEgLyogTGluZUxheW91dFRyYXZlcnNhbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4NEEzM0IyMzA1NTMw
MzAwOUFERTZBIC8qIExpbmVMYXlvdXRUcmF2ZXJzYWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDg2M0NGRTIzODQyRTlFMDA5NzIxNTggLyog
UnVsZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0ODYzQ0ZEMjM4NDJFOUUwMDk3MjE1OCAvKiBSdWxlRGF0YS5oICovOyB9OwotCQlFNDg5NDRB
MzE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4OTQ0QTExODBCNTdEODAwRjE2NUQ4IC8q
IFNpbXBsZUxpbmVMYXlvdXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlFNDk0NkVBRjE1NkU2NEREMDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDk0NkVB
RDE1NkU2NEREMDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5QkQ5RkExMzFGRDJFRDAwM0M1NkYw
IC8qIENTU1ZhbHVlUG9vbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTQ5QkQ5RjkxMzFGRDJFRDAwM0M1NkYwIC8qIENTU1ZhbHVlUG9vbC5oICovOyB9
OwogCQlFNEE3OTk1MjIwRUU0QjE0MDBDMTk1NjggLyogQ1NTUGFyc2VyQ29udGV4dC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBNzk5NEUyMEVFNEFF
MTAwQzE5NTY4IC8qIENTU1BhcnNlckNvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTA4MSw4ICs1MDc1LDYgQEAKIAkJRTRFOEI0RUMy
MTZCNzlFNTAwQjg4MzREIC8qIFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEU4QjRFQTIxNkI3OUU1MDBC
ODgzNEQgLyogU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQuaCAqLzsgfTsKIAkJRTRFOEI0RjUy
MTZCOTU2NTAwQjg4MzREIC8qIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RThCNEYyMjE2QjhCNjAwMEI4ODM0
RCAvKiBGb250Q2FzY2FkZURlc2NyaXB0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTRFOTRENjEyMkZGMTU4QTAwREQxOTFGIC8qIENvbXBs
ZXhMaW5lTGF5b3V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNEExQUM3ODIyRkFGRDUwMDAxN0I3NUIgLyogQ29tcGxleExpbmVMYXlvdXQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlFNEU5QjExOTE4
MTA5MTZGMDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEU5QjExODE4MTA5MTZGMDAzQUND
REYgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRTRFOUIxMUQxODE0NTY5QzAwM0FDQ0RGIC8qIFNp
bXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0RTlCMTFDMTgxNDU2OUMwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5
b3V0RnVuY3Rpb25zLmggKi87IH07CiAJCUU0RjlFRUYzMTU2REEwMDcwMEQyM0U3RSAvKiBTdHls
ZVNoZWV0Q29udGVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0RjlFRUYxMTU2RDg0QzQwMEQyM0U3RSAvKiBTdHlsZVNoZWV0Q29udGVudHMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNTE2Njk5
MTIwRkY5OTE4MDA5RDJDMjcgLyogTGlzdEJ1dHRvbkFycm93QDJ4LnBuZyBpbiBSZXNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTUxNjY5OEYyMEZGOTkxNjAwOUQy
QzI3IC8qIExpc3RCdXR0b25BcnJvd0AyeC5wbmcgKi87IH07CiAJCUU1MTc2NzAzMjBCODhDMTQw
MEQ0MTE2NyAvKiBEYXRhTGlzdFN1Z2dlc3Rpb25JbmZvcm1hdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTUxNzY3MDIyMEI4OEMxNDAwRDQxMTY3
IC8qIERhdGFMaXN0U3VnZ2VzdGlvbkluZm9ybWF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTYwOTcsOCArNjA4OSw2IEBACiAJCTExMTAw
RkQ3MjA5NTE0REYwMDgxQUE2QyAvKiBMYXlvdXRUcmVlQnVpbGRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBMYXlvdXRUcmVlQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMTFD
NjE1NjIwQUQxQUUxMDA1QjgyRkEgLyogTGF5b3V0UmVwbGFjZWRCb3guaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTGF5b3V0UmVwbGFjZWRCb3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTEx
QzYxNTcyMEFEMUFFMTAwNUI4MkZBIC8qIExheW91dFJlcGxhY2VkQm94LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IExheW91dFJlcGxhY2VkQm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMTEyQjM0RDAxRTYwQjhBNzAwQkIzMTBBIC8qIFNpbXBsZUxpbmVMYXlvdXRQYWdpbmF0
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVM
YXlvdXRQYWdpbmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTEyQjM0
RDQxRTYwQjk4MzAwQkIzMTBBIC8qIFNpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExMzQwOUQ3MjAzRTAzODAwMEM2NjkxNSAv
KiBSZW5kZXJUcmVlQnVpbGRlckNvbnRpbnVhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW5kZXJUcmVlQnVpbGRlckNvbnRpbnVhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTExMzQwOUQ4MjAzRTAzODAwMEM2NjkxNSAvKiBSZW5kZXJUcmVlQnVpbGRlckNvbnRp
bnVhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUcmVlQnVpbGRlckNvbnRpbnVhdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMTNEMEI0RjFGOUZERDJCMDBGNjExQkIg
LyogRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGcmFtZVZp
ZXdMYXlvdXRDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYxNDcs
OCArNjEzNyw2IEBACiAJCTExQ0IyNzg2MjAzQkE1NzAwMDRBMURDOSAvKiBSZW5kZXJUcmVlQnVp
bGRlckZ1bGxTY3JlZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJG
dWxsU2NyZWVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTFDQjI3ODcyMDNC
QTU3MDAwNEExREM5IC8qIFJlbmRlclRyZWVCdWlsZGVyRnVsbFNjcmVlbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW5kZXJUcmVlQnVpbGRlckZ1bGxTY3JlZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMTFEMTlDMkUyMzE1OUJBRTAwOEYyNEQzIC8qIFRhYmxlRm9ybWF0dGluZ0NvbnRl
eHRHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUYWJsZUZvcm1hdHRpbmdDb250ZXh0
R2VvbWV0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxMUUwNjdFQjFFNjI0
NjEzMDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTExRTA2N0VEMUU2MjQ2RTUwMDE2MkQxNiAvKiBT
aW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTExRkYwMkQ1MjBCQTNDODEwMDgzRjI1QiAvKiBWZXJpZmljYXRpb24uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVmVyaWZpY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTJGNzVBOUE4NkVBMDNEQUYyNEI3OTcxIC8qIElTT1Byb3RlY3Rpb25TeXN0ZW1TcGVjaWZp
Y0hlYWRlckJveC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJU09Qcm90ZWN0
aW9uU3lzdGVtU3BlY2lmaWNIZWFkZXJCb3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTQwMEQ3QTcxNzEzNkVBNzAwNzdDRTA1IC8qIFNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTE3MywxMyArOTE2MSw4IEBACiAJCTU4
MjRBQkExMUFFODExMTYwMDkwNzRCNyAvKiBSdWJ5RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSdWJ5RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1ODI0QUJBNDFBRTgxMzg0MDA5MDc0QjcgLyogUnVieVRleHRFbGVtZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJ1YnlUZXh0RWxlbWVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU4MjRBQkE1MUFFODEzODQwMDkwNzRCNyAvKiBS
dWJ5VGV4dEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUnVieVRl
eHRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU4MkNCMDUyMUE3OEEx
NEIwMEFGRkNDNCAvKiBTaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVu
dEl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU4MkNCMDU0MUE3OEEy
QjIwMEFGRkNDNCAvKiBTaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlTGluZUxheW91dFRleHRG
cmFnbWVudEl0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTgyREUz
MjIxQzMwQzg1NDAwQkUwMkE4IC8qIFRleHREZWNvcmF0aW9uUGFpbnRlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1ODJERTMyMzFDMzBDODU0MDBCRTAyQTggLyog
VGV4dERlY29yYXRpb25QYWludGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRleHREZWNvcmF0aW9uUGFpbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1
ODVENkRGQjFBMTUzNTU2MDBGQTRGMTIgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRSZXNv
bHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU4NUQ2RTAxMUExQTc5MkUw
MEZBNEYxMiAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1ODVENkUwMjFBMUE3OTJFMDBGQTRGMTIg
LyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTU4ODRGRTU2MjI4MTNFMkQwMDQwQUZGNiAvKiBKU1Jlc2l6ZU9ic2Vy
dmVyRW50cnlDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNSZXNpemVPYnNlcnZlckVudHJ5Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTg5NTU2RUMxOEQ0QTQ0MDAwNzY0QjAzIC8qIEJvcmRlckVkZ2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQm9yZGVyRWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1OEFFRTJGMzE4RDRCQ0NGMDAyMkU3RkUgLyogQm9yZGVyRWRnZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCb3JkZXJFZGdlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1ODM2LDcgKzE1ODE5LDYgQEAKIAkJRTQzMTA1QkEx
Njc1MEYxNjAwREIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTm9kZVRyYXZlcnNhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDMxMkFCNTI0QjMyNjU2MDA2NzgzNDkgLyogTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dEludGVncmF0
aW9uUGFnaW5hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MzEyQUI3
MjRCMzI2NTYwMDY3ODM0OSAvKiBMYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0MzQzRDIxMjM5Mjc3ODMwMEVCQkI2NiAv
KiBMaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxlUGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxlUGF0aC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNDM0M0QyNDIzOTI3NzhGMDBFQkJCNjYgLyogTGluZUxheW91dFRy
YXZlcnNhbENvbXBsZXhQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExp
bmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFNDNBMDIzQTE3RUIzNzBBMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUU0M0EwMjNDMTdFQjM3MTMwMDRDREQyNSAvKiBSZW5kZXJFbGVtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckVsZW1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU5MjgsOCArMTU5MTAsNiBAQAog
CQlFNDg0QTMzRDIzMDU1MzAzMDA5QURFNkEgLyogTGluZUxheW91dFRyYXZlcnNhbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaW5lTGF5b3V0VHJhdmVyc2FsLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ4NjNDRkEyMzg0MkU4NzAwOTcyMTU4
IC8qIFJ1bGVEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJ1
bGVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ4NjNDRkQyMzg0MkU5
RTAwOTcyMTU4IC8qIFJ1bGVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJ1bGVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0ODk0NEEwMTgwQjU3
RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlFNDg5NDRBMTE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0OTQ2RUFDMTU2RTY0REQwMEQzMjk3RiAvKiBT
dHlsZVJ1bGVJbXBvcnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3R5bGVSdWxlSW1wb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ5NDZF
QUQxNTZFNjRERDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdHlsZVJ1bGVJbXBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTQ5QkQ5RjkxMzFGRDJFRDAwM0M1NkYwIC8qIENTU1ZhbHVlUG9vbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NWYWx1ZVBvb2wuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MDE5LDkgKzE1OTk5LDYgQEAKIAkJRTRFOEI0RUQyMTZCNzlG
NDAwQjg4MzREIC8qIFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRFOEI0RjAyMTZCOEI1RjAwQjg4MzREIC8q
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUU0RThCNEYyMjE2QjhCNjAwMEI4ODM0RCAvKiBGb250Q2FzY2FkZURlc2NyaXB0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTRFOUIxMTgxODEwOTE2RjAw
M0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRTRFOUIxMUExODE0NTY5MjAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlv
dXRGdW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2lt
cGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUU0RTlCMTFDMTgxNDU2OUMwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlv
bnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRGOUVFRjAxNTZEODRDNDAwRDIz
RTdFIC8qIFN0eWxlU2hlZXRDb250ZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTdHlsZVNoZWV0Q29udGVudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFNEY5RUVGMTE1NkQ4NEM0MDBEMjNFN0UgLyogU3R5bGVTaGVldENvbnRlbnRzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlU2hlZXRDb250ZW50cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEZCNEIzNTIzOUJFQjEwMDAzQzMzNkEgLyog
RGlzcGxheUlubGluZUNvbnRlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlzcGxheUlubGlu
ZUNvbnRlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjkxMTgsMjAgKzI5
MDk1LDYgQEAKIAkJCQlBOENGRjVEQTBBMTU1QTA1MDAwQTQyMzQgLyogUm9vdElubGluZUJveC5o
ICovLAogCQkJCTVEOTI1QjY1MEY2NEQ0REQwMEI4NDdGMCAvKiBTY3JvbGxBbGlnbm1lbnQuY3Bw
ICovLAogCQkJCTVEOTI1QjY2MEY2NEQ0REQwMEI4NDdGMCAvKiBTY3JvbGxBbGlnbm1lbnQuaCAq
LywKLQkJCQlFNDg5NDRBMDE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5jcHAg
Ki8sCi0JCQkJRTQ4OTQ0QTExODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCAq
LywKLQkJCQkxMUUwNjdFQjFFNjI0NjEzMDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVy
YWdlLmNwcCAqLywKLQkJCQkxMUUwNjdFRDFFNjI0NkU1MDAxNjJEMTYgLyogU2ltcGxlTGluZUxh
eW91dENvdmVyYWdlLmggKi8sCi0JCQkJNTg1RDZFMDExQTFBNzkyRTAwRkE0RjEyIC8qIFNpbXBs
ZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwICovLAotCQkJCTU4NUQ2RTAyMUExQTc5MkUwMEZB
NEYxMiAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmggKi8sCi0JCQkJRTRFOUIxMUEx
ODE0NTY5MjAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwICovLAotCQkJ
CUU0RTlCMTFDMTgxNDU2OUMwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmgg
Ki8sCi0JCQkJMTEyQjM0RDAxRTYwQjhBNzAwQkIzMTBBIC8qIFNpbXBsZUxpbmVMYXlvdXRQYWdp
bmF0aW9uLmNwcCAqLywKLQkJCQkxMTJCMzRENDFFNjBCOTgzMDBCQjMxMEEgLyogU2ltcGxlTGlu
ZUxheW91dFBhZ2luYXRpb24uaCAqLywKLQkJCQk1ODVENkRGQjFBMTUzNTU2MDBGQTRGMTIgLyog
U2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNwcCAqLywKLQkJCQlFNEU5QjExODE4MTA5MTZGMDAz
QUNDREYgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmggKi8sCi0JCQkJNTgyQ0IwNTQxQTc4
QTJCMjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5jcHAg
Ki8sCi0JCQkJNTgyQ0IwNTIxQTc4QTE0QjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRUZXh0
RnJhZ21lbnRJdGVyYXRvci5oICovLAogCQkJCUUzMUNENzUwMjI5Rjc0OTUwMEZCREExOSAvKiBU
YWJsZUxheW91dC5jcHAgKi8sCiAJCQkJQThDRkYwNEMwQTE1NEYwOTAwMEE0MjM0IC8qIFRhYmxl
TGF5b3V0LmggKi8sCiAJCQkJMEY1NERDRTMxODgxMDUxRDAwM0VFREJCIC8qIFRleHRBdXRvU2l6
aW5nLmNwcCAqLywKQEAgLTMwMjEzLDcgKzMwMTc2LDYgQEAKIAkJCQlFNDg0QTMzQjIzMDU1MzAz
MDA5QURFNkEgLyogTGluZUxheW91dFRyYXZlcnNhbC5oICovLAogCQkJCUU0MzQzRDI0MjM5Mjc3
OEYwMEVCQkI2NiAvKiBMaW5lTGF5b3V0VHJhdmVyc2FsQ29tcGxleFBhdGguaCAqLywKIAkJCQlF
NDUxQzYyNzIzOTI5M0VCMDA5OTMxOTAgLyogTGluZUxheW91dFRyYXZlcnNhbERpc3BsYXlSdW5Q
YXRoLmggKi8sCi0JCQkJRTQzNDNEMjEyMzkyNzc4MzAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2
ZXJzYWxTaW1wbGVQYXRoLmggKi8sCiAJCQkJRkZEQkMwNDYxODNEMjdCNzAwNDA3MTA5IC8qIExp
bmVXaWR0aC5jcHAgKi8sCiAJCQkJRkZEQkMwNDUxODNEMjdCNzAwNDA3MTA5IC8qIExpbmVXaWR0
aC5oICovLAogCQkJCUZGQUMzMEZEMTg0RkIxNDUwMDhDNEYxRSAvKiBUcmFpbGluZ09iamVjdHMu
Y3BwICovLApAQCAtMzI3OTMsNyArMzI3NTUsNiBAQAogCQkJCUU0ODRBMzNFMjMwNTUzMjUwMDlB
REU2QSAvKiBMaW5lTGF5b3V0VHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDM0M0Qy
NTIzOTI3NzkwMDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFNDUxQzYyODIzOTI5M0VDMDA5OTMxOTAgLyogTGluZUxheW91dFRy
YXZlcnNhbERpc3BsYXlSdW5QYXRoLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDM0M0QyMzIzOTI3
Nzg0MDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZGREJDMDQ3MTgzRDI3QjcwMDQwNzEwOSAvKiBMaW5lV2lkdGguaCBpbiBIZWFk
ZXJzICovLAogCQkJCUNCQTlEQzBCMURGNDRERjQwMDA1Njc1QyAvKiBMaW5rSGVhZGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTQzQjI2MzFEREQxNTIwMDAxNEZBQzYgLyogTGlua0ljb24uaCBp
biBIZWFkZXJzICovLApAQCAtMzM3OTIsMTMgKzMzNzUzLDYgQEAKIAkJCQk5MzMwOUVBMzA5OUVC
NzhDMDA1NkU1ODEgLyogU2hhcmVkVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCURGMTlFMkFD
MjQ3NzJCQzEwMDdCREFDQiAvKiBTaG91bGRSZWxheFRoaXJkUGFydHlDb29raWVCbG9ja2luZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODM2MkU4QzEyMENFRjlDQjAwMjQ1ODg2IC8qIFNob3VsZFRy
ZWF0QXNDb250aW51aW5nTG9hZC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQ4OTQ0QTMxODBCNTdE
ODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTExRTA2
N0VFMUU2MjQ2RTUwMDE2MkQxNiAvKiBTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTU4NUQ2RTA0MUExQTc5MkUwMEZBNEYxMiAvKiBTaW1wbGVMaW5lTGF5b3V0
Rmxvd0NvbnRlbnRzLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNEU5QjExRDE4MTQ1NjlDMDAzQUND
REYgLyogU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTEy
QjM0RDUxRTYwQjk4MzAwQkIzMTBBIC8qIFNpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmggaW4g
SGVhZGVycyAqLywKLQkJCQlFNEU5QjExOTE4MTA5MTZGMDAzQUNDREYgLyogU2ltcGxlTGluZUxh
eW91dFJlc29sdmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk1ODJDQjA1MzFBNzhBMTRCMDBBRkZD
QzQgLyogU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5MzE2RERGQjI0MEM2NEI0MDA5MzQwQUEgLyogU2ltcGxlUmFuZ2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUM1QTFFQTdEMTUyQkNGMDgwMDREMDBCNiAvKiBTaW1wbGlmeU1hcmt1cENv
bW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3MkE3RjIxMUM2RTU3MTkwMDlDNjE0OSAvKiBT
aW11bGF0ZWRDbGljay5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYTG9nZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQVhMb2dnZXIuY3BwCmluZGV4IDY4MzliNjMxZjFhNS4uNGY1YzZiNWVjNTA3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYTG9nZ2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYTG9nZ2VyLmNwcApAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgIkFYSXNvbGF0ZWRPYmplY3QuaCIKICNlbmRpZgogI2luY2x1ZGUgIkFYT2JqZWN0
Q2FjaGUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oCmlu
ZGV4IDdmMGY1OTRmMTYxMi4uYmY1NjZjZmJjY2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaApA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJUZXh0
SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCisjaW5jbHVkZSAiV2lk
Z2V0LmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmFyaWFu
dC5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKaW5kZXggYjZhMjdk
ZDg3NGIyLi41ZTU4MTRkN2RmNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5jcHAKQEAgLTU0LDkgKzU0LDYgQEAKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgog
I2luY2x1ZGUgIlJlbmRlclRleHRGcmFnbWVudC5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIK
LSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0LmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91
dEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oIgogI2lu
Y2x1ZGUgIlRleHRCb3VuZGFyaWVzLmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1l
bnRzLmgiCiAjaW5jbHVkZSAiVGV4dFBsYWNlaG9sZGVyRWxlbWVudC5oIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvVmVyaWZpY2F0aW9uLmNwcAppbmRleCBiNjI5MjkwODNmYWMuLjkzZTA2MWY1ZjNiNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHAKQEAgLTcwLDQ4ICs3MCw2IEBA
IHN0YXRpYyBib29sIGFyZUVzc2VudGlhbGx5RXF1YWwoTGF5b3V0UmVjdCBhLCBMYXlvdXRSZWN0
IGIpCiAgICAgICAgICYmIGFyZUVzc2VudGlhbGx5RXF1YWwoYS5oZWlnaHQoKSwgYi5oZWlnaHQo
KSk7CiB9CiAKLXN0YXRpYyBib29sIG91dHB1dE1pc21hdGNoaW5nU2ltcGxlTGluZUluZm9ybWF0
aW9uSWZOZWVkZWQoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0
U3RhdGUsIGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgYmxvY2tGbG93LCBjb25zdCBDb250YWluZXJC
b3gmIGlubGluZUZvcm1hdHRpbmdSb290KQotewotICAgIGF1dG8qIGxpbmVMYXlvdXREYXRhID0g
YmxvY2tGbG93LnNpbXBsZUxpbmVMYXlvdXQoKTsKLSAgICBpZiAoIWxpbmVMYXlvdXREYXRhKSB7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBhdXRvJiBpbmxpbmVGb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZS5lc3Rh
Ymxpc2hlZEZvcm1hdHRpbmdTdGF0ZShpbmxpbmVGb3JtYXR0aW5nUm9vdCk7Ci0gICAgYXV0byYg
bGluZVJ1bnMgPSBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KGlubGluZUZvcm1hdHRp
bmdTdGF0ZSkubGluZVJ1bnMoKTsKLQotICAgIGlmIChsaW5lUnVucy5zaXplKCkgIT0gbGluZUxh
eW91dERhdGEtPnJ1bkNvdW50KCkpIHsKLSAgICAgICAgc3RyZWFtIDw8ICJNaXNtYXRjaGluZyBu
dW1iZXIgb2YgcnVuczogc2ltcGxlIHJ1bnMoIiA8PCBsaW5lTGF5b3V0RGF0YS0+cnVuQ291bnQo
KSA8PCAiKSBpbmxpbmUgcnVucygiIDw8IGxpbmVSdW5zLnNpemUoKSA8PCAiKSI7Ci0gICAgICAg
IHN0cmVhbS5uZXh0TGluZSgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBh
dXRvIG1pc21hdGNoZWQgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlu
ZUxheW91dERhdGEtPnJ1bkNvdW50KCk7ICsraSkgewotICAgICAgICBhdXRvJiBzaW1wbGVSdW4g
PSBsaW5lTGF5b3V0RGF0YS0+cnVuQXQoaSk7Ci0gICAgICAgIGF1dG8mIGxpbmVSdW4gPSBsaW5l
UnVuc1tpXTsKLSAgICAgICAgYXV0byBtYXRjaGluZ1J1bnMgPSBhcmVFc3NlbnRpYWxseUVxdWFs
KHNpbXBsZVJ1bi5sb2dpY2FsTGVmdCwgbGluZVJ1bi5sb2dpY2FsTGVmdCgpKSAmJiBhcmVFc3Nl
bnRpYWxseUVxdWFsKHNpbXBsZVJ1bi5sb2dpY2FsUmlnaHQsIGxpbmVSdW4ubG9naWNhbFJpZ2h0
KCkpOwotICAgICAgICBpZiAobWF0Y2hpbmdSdW5zICYmIGxpbmVSdW4udGV4dCgpKSB7Ci0gICAg
ICAgICAgICBtYXRjaGluZ1J1bnMgPSBzaW1wbGVSdW4uc3RhcnQgPT0gbGluZVJ1bi50ZXh0KCkt
PnN0YXJ0KCkgJiYgc2ltcGxlUnVuLmVuZCA9PSBsaW5lUnVuLnRleHQoKS0+ZW5kKCk7Ci0gICAg
ICAgICAgICAvLyBTTEwgaGFuZGxlcyBzdHJpbmdzIGluIGEgbW9yZSBjb25jYXRlbmF0ZWQgZm9y
bWF0IDxkaXY+Zm9vPGJyPmJhcjwvZGl2PiAtPiBmb28gLT4gMCwzIGJhciAtPiAzLDYgdnMuIDAs
MyBhbmQgMCwzCi0gICAgICAgICAgICBpZiAoIW1hdGNoaW5nUnVucykKLSAgICAgICAgICAgICAg
ICBtYXRjaGluZ1J1bnMgPSAoc2ltcGxlUnVuLmVuZCAtIHNpbXBsZVJ1bi5zdGFydCkgPT0gKGxp
bmVSdW4udGV4dCgpLT5lbmQoKSAtIGxpbmVSdW4udGV4dCgpLT5zdGFydCgpKTsKLSAgICAgICAg
fQotICAgICAgICBpZiAobWF0Y2hpbmdSdW5zKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgc3RyZWFtIDw8ICJNaXNtYXRjaGluZzogc2ltcGxlIHJ1bigiIDw8IHNpbXBsZVJ1bi5z
dGFydCA8PCAiLCAiIDw8IHNpbXBsZVJ1bi5lbmQgPDwgIikgKCIgPDwgc2ltcGxlUnVuLmxvZ2lj
YWxMZWZ0IDw8ICIsICIgPDwgc2ltcGxlUnVuLmxvZ2ljYWxSaWdodCA8PCAiKSI7Ci0gICAgICAg
IHN0cmVhbSA8PCAiIGlubGluZSBydW4iOwotICAgICAgICBpZiAobGluZVJ1bi50ZXh0KCkpCi0g
ICAgICAgICAgICBzdHJlYW0gPDwgIiAoIiA8PCBsaW5lUnVuLnRleHQoKS0+c3RhcnQoKSA8PCAi
LCAiIDw8IGxpbmVSdW4udGV4dCgpLT5lbmQoKSA8PCAiKSI7Ci0gICAgICAgIHN0cmVhbSA8PCAi
ICgiIDw8IGxpbmVSdW4ubG9naWNhbExlZnQoKSA8PCAiLCAiIDw8IGxpbmVSdW4ubG9naWNhbFRv
cCgpIDw8ICIpICgiIDw8IGxpbmVSdW4ubG9naWNhbFdpZHRoKCkgPDwgIngiIDw8IGxpbmVSdW4u
bG9naWNhbEhlaWdodCgpIDw8ICIpIjsKLSAgICAgICAgc3RyZWFtLm5leHRMaW5lKCk7Ci0gICAg
ICAgIG1pc21hdGNoZWQgPSB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gbWlzbWF0Y2hlZDsKLX0K
LQogc3RhdGljIGJvb2wgY2hlY2tGb3JNYXRjaGluZ05vblRleHRSdW5zKGNvbnN0IExpbmVSdW4m
IGxpbmVSdW4sIGNvbnN0IFdlYkNvcmU6OklubGluZUJveCYgaW5saW5lQm94KQogewogICAgIHJl
dHVybiBhcmVFc3NlbnRpYWxseUVxdWFsKGlubGluZUJveC5sZWZ0KCksIGxpbmVSdW4ubG9naWNh
bExlZnQoKSkKQEAgLTM1OSw3ICszMTcsNyBAQCBzdGF0aWMgYm9vbCB2ZXJpZnlBbmRPdXRwdXRT
dWJ0cmVlKFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgTGF5b3V0U3RhdGUmIGNvbnRleAogCiAg
ICAgICAgICAgICBhdXRvJiBibG9ja0Zsb3cgPSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpj
aGlsZFJlbmRlcmVyKTsKICAgICAgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdSb290ID0gZG93bmNh
c3Q8Q29udGFpbmVyQm94PigqY2hpbGRMYXlvdXRCb3gpOwotICAgICAgICAgICAgbWlzbXRhY2hp
bmdHZW9tZXRyeSB8PSBibG9ja0Zsb3cubGluZUxheW91dFBhdGgoKSA9PSBSZW5kZXJCbG9ja0Zs
b3c6OlNpbXBsZUxpbmVzUGF0aCA/IG91dHB1dE1pc21hdGNoaW5nU2ltcGxlTGluZUluZm9ybWF0
aW9uSWZOZWVkZWQoc3RyZWFtLCBjb250ZXh0LCBibG9ja0Zsb3csIGZvcm1hdHRpbmdSb290KSA6
IG91dHB1dE1pc21hdGNoaW5nQ29tcGxleExpbmVJbmZvcm1hdGlvbklmTmVlZGVkKHN0cmVhbSwg
Y29udGV4dCwgYmxvY2tGbG93LCBmb3JtYXR0aW5nUm9vdCk7CisgICAgICAgICAgICBtaXNtdGFj
aGluZ0dlb21ldHJ5IHw9IG91dHB1dE1pc21hdGNoaW5nQ29tcGxleExpbmVJbmZvcm1hdGlvbklm
TmVlZGVkKHN0cmVhbSwgY29udGV4dCwgYmxvY2tGbG93LCBmb3JtYXR0aW5nUm9vdCk7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBhdXRvIG1pc21hdGNoaW5nU3VidHJlZUdlb21ldHJ5
ID0gdmVyaWZ5QW5kT3V0cHV0U3VidHJlZShzdHJlYW0sIGNvbnRleHQsIGRvd25jYXN0PFJlbmRl
ckJveD4oKmNoaWxkUmVuZGVyZXIpLCAqY2hpbGRMYXlvdXRCb3gpOwogICAgICAgICAgICAgbWlz
bXRhY2hpbmdHZW9tZXRyeSB8PSBtaXNtYXRjaGluZ1N1YnRyZWVHZW9tZXRyeTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxp
bmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dElu
dGVncmF0aW9uTGluZUxheW91dC5jcHAKaW5kZXggZjI5OTg3ZDI0MzU1Li42YzZkMDZkZTE3M2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRl
Z3JhdGlvbkxpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3Jh
dGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwCkBAIC00OCw3ICs0OCw2IEBACiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMu
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXQuaCIK
ICNpbmNsdWRlICJUZXh0RGVjb3JhdGlvblBhaW50ZXIuaCIKICNpbmNsdWRlICJUZXh0UGFpbnRl
ci5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5
b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRl
Z3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uY3BwCmluZGV4IDg2MmI0OGM4YTk1
Ny4uOGZjYjRlYTk0Y2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcApAQCAt
MzAsOCArMzAsNiBAQAogCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJSZW5k
ZXJCbG9ja0Zsb3cuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0LmgiCi0jaW5jbHVkZSAi
U2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1l
c3BhY2UgTGF5b3V0SW50ZWdyYXRpb24gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0NvbXBsZXhMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9D
b21wbGV4TGluZUxheW91dC5jcHAKaW5kZXggZTVjYzk5MjZhNmRhLi5lN2QxZTM0ZTgwZjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbXBsZXhMaW5lTGF5b3V0LmNwcApAQCAt
MTY5Nyw4ICsxNjk3LDYgQEAgdm9pZCBDb21wbGV4TGluZUxheW91dDo6bGlua1RvRW5kTGluZUlm
TmVlZGVkKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUpCiAKIHZvaWQgQ29tcGxleExpbmVM
YXlvdXQ6OmxheW91dExpbmVCb3hlcyhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQm
IHJlcGFpbnRMb2dpY2FsVG9wLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbEJvdHRvbSkKIHsK
LSAgICBBU1NFUlQoIW1fZmxvdy5zaW1wbGVMaW5lTGF5b3V0KCkpOwotCiAgICAgbV9mbG93LnNl
dExvZ2ljYWxIZWlnaHQobV9mbG93LmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKSk7CiAgICAgCiAg
ICAgLy8gTGF5IG91dCBvdXIgaHlwb3RoZXRpY2FsIGdyaWQgbGluZSBhcyB0aG91Z2ggaXQgb2Nj
dXJzIGF0IHRoZSB0b3Agb2YgdGhlIGJsb2NrLgpAQCAtMjEyOCw4ICsyMTI2LDYgQEAgYm9vbCBD
b21wbGV4TGluZUxheW91dDo6bWF0Y2hlZEVuZExpbmUoTGluZUxheW91dFN0YXRlJiBsYXlvdXRT
dGF0ZSwgY29uc3QgSW5saW4KIAogdm9pZCBDb21wbGV4TGluZUxheW91dDo6YWRkT3ZlcmZsb3dG
cm9tSW5saW5lQ2hpbGRyZW4oKQogewotICAgIEFTU0VSVCghbV9mbG93LnNpbXBsZUxpbmVMYXlv
dXQoKSk7Ci0KICAgICBMYXlvdXRVbml0IGVuZFBhZGRpbmcgPSBtX2Zsb3cuaGFzT3ZlcmZsb3dD
bGlwKCkgPyBtX2Zsb3cucGFkZGluZ0VuZCgpIDogMF9sdTsKICAgICAvLyBGSVhNRTogTmVlZCB0
byBmaW5kIGFub3RoZXIgd2F5IHRvIGRvIHRoaXMsIHNpbmNlIHNjcm9sbGJhcnMgY291bGQgc2hv
dyB3aGVuIHdlIGRvbid0IHdhbnQgdGhlbSB0by4KICAgICBpZiAoIWVuZFBhZGRpbmcpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4IGI0MzA3ZDc5
NWM3MS4uZWIxMGFlYWI4ODVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tGbG93LmNwcApAQCAtNTQsOSArNTQsNiBAQAogI2luY2x1ZGUgIlJlbmRlclRyZWVCdWls
ZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0j
aW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIlNpbXBsZUxp
bmVMYXlvdXRQYWdpbmF0aW9uLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dFJlc29sdmVy
LmgiCiAjaW5jbHVkZSAiVGV4dEF1dG9TaXppbmcuaCIKICNpbmNsdWRlICJWZXJ0aWNhbFBvc2l0
aW9uQ2FjaGUuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKQEAgLTY2OSwyNiArNjY2
LDE2IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxkcmVuKGJvb2wgcmVs
YXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgbWF4CiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5
b3V0SW5saW5lQ2hpbGRyZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiByZXBh
aW50TG9naWNhbFRvcCwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxCb3R0b20pCiB7CiAgICAg
YXV0byBjb21wdXRlTGluZUxheW91dFBhdGggPSBbJl0gewotICAgICAgICBib29sIGlzSW50ZWdy
YXRpb25FbmFibGVkID0gZmFsc2U7CiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRF
WFQpCiAgICAgICAgIGlmIChMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Y2FuVXNlRm9y
KCp0aGlzKSkKICAgICAgICAgICAgIHJldHVybiBMYXlvdXRGb3JtYXR0aW5nQ29udGV4dFBhdGg7
Ci0gICAgICAgIGlzSW50ZWdyYXRpb25FbmFibGVkID0gTGF5b3V0SW50ZWdyYXRpb246OkxpbmVM
YXlvdXQ6OmlzRW5hYmxlZCgpOwogI2VuZGlmCi0gICAgICAgIGlmICghaXNJbnRlZ3JhdGlvbkVu
YWJsZWQgJiYgU2ltcGxlTGluZUxheW91dDo6Y2FuVXNlRm9yKCp0aGlzKSkKLSAgICAgICAgICAg
IHJldHVybiBTaW1wbGVMaW5lc1BhdGg7Ci0KICAgICAgICAgcmV0dXJuIExpbmVCb3hlc1BhdGg7
CiAgICAgfTsKIAogICAgIGlmIChsaW5lTGF5b3V0UGF0aCgpID09IFVuZGV0ZXJtaW5lZFBhdGgp
CiAgICAgICAgIHNldExpbmVMYXlvdXRQYXRoKGNvbXB1dGVMaW5lTGF5b3V0UGF0aCgpKTsKIAot
ICAgIGlmIChsaW5lTGF5b3V0UGF0aCgpID09IFNpbXBsZUxpbmVzUGF0aCkgewotICAgICAgICBs
YXlvdXRTaW1wbGVMaW5lcyhyZWxheW91dENoaWxkcmVuLCByZXBhaW50TG9naWNhbFRvcCwgcmVw
YWludExvZ2ljYWxCb3R0b20pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAjaWYgRU5BQkxF
KExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAgICAgaWYgKGxpbmVMYXlvdXRQYXRoKCkgPT0g
TGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRQYXRoKSB7CiAgICAgICAgIGxheW91dExGQ0xpbmVzKHJl
bGF5b3V0Q2hpbGRyZW4sIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbEJvdHRvbSk7
CkBAIC0yMTA4LDggKzIwOTUsNiBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6c3R5bGVEaWRDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbAogICAgICAgICBh
dXRvIHNob3VsZEludmFsaWRhdGVMaW5lTGF5b3V0UGF0aCA9IFsmXSB7CiAgICAgICAgICAgICBp
ZiAoc2VsZk5lZWRzTGF5b3V0KCkgfHwgY29tcGxleExpbmVMYXlvdXQoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChzaW1wbGVMaW5lTGF5b3V0KCkgJiYg
IVNpbXBsZUxpbmVMYXlvdXQ6OmNhblVzZUZvckFmdGVyU3R5bGVDaGFuZ2UoKnRoaXMsIGRpZmYp
KQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFU
VElOR19DT05URVhUKQogICAgICAgICAgICAgaWYgKGxheW91dEZvcm1hdHRpbmdDb250ZXh0TGlu
ZUxheW91dCgpICYmICFMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Y2FuVXNlRm9yQWZ0
ZXJTdHlsZUNoYW5nZSgqdGhpcywgZGlmZikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0yOTg5LDkgKzI5NzQsNiBAQCBib29sIFJlbmRlckJsb2NrRmxvdzo6aGl0VGVzdElubGlu
ZUNoaWxkcmVuKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZQogewogICAgIEFT
U0VSVChjaGlsZHJlbklubGluZSgpKTsKIAotICAgIGlmIChzaW1wbGVMaW5lTGF5b3V0KCkpCi0g
ICAgICAgIHJldHVybiBTaW1wbGVMaW5lTGF5b3V0OjpoaXRUZXN0RmxvdygqdGhpcywgKnNpbXBs
ZUxpbmVMYXlvdXQoKSwgcmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBhY2N1
bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFjdGlvbik7Ci0KICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1B
VFRJTkdfQ09OVEVYVCkKICAgICBpZiAobGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0
KCkpCiAgICAgICAgIHJldHVybiBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKS0+
aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIGFjY3VtdWxhdGVk
T2Zmc2V0LCBoaXRUZXN0QWN0aW9uKTsKQEAgLTMwMDIsMTIgKzI5ODQsNiBAQCBib29sIFJlbmRl
ckJsb2NrRmxvdzo6aGl0VGVzdElubGluZUNoaWxkcmVuKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZQogCiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6YWRkT3ZlcmZsb3dGcm9tSW5s
aW5lQ2hpbGRyZW4oKQogewotICAgIGlmIChhdXRvIHNpbXBsZUxpbmVMYXlvdXQgPSB0aGlzLT5z
aW1wbGVMaW5lTGF5b3V0KCkpIHsKLSAgICAgICAgQVNTRVJUKCFoYXNPdmVyZmxvd0NsaXAoKSk7
Ci0gICAgICAgIFNpbXBsZUxpbmVMYXlvdXQ6OmNvbGxlY3RGbG93T3ZlcmZsb3coKnRoaXMsICpz
aW1wbGVMaW5lTGF5b3V0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogI2lmIEVOQUJMRShM
QVlPVVRfRk9STUFUVElOR19DT05URVhUKQogICAgIGlmIChsYXlvdXRGb3JtYXR0aW5nQ29udGV4
dExpbmVMYXlvdXQoKSkgewogICAgICAgICBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlv
dXQoKS0+Y29sbGVjdE92ZXJmbG93KCp0aGlzKTsKQEAgLTMwOTcsMTEgKzMwNzMsNiBAQCB2b2lk
IFJlbmRlckJsb2NrRmxvdzo6bWFya0xpbmVzRGlydHlJbkJsb2NrUmFuZ2UoTGF5b3V0VW5pdCBs
b2dpY2FsVG9wLCBMYXlvdXRVbgogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGbG9hdHMgY3Vy
cmVudGx5IGFmZmVjdCB0aGUgY2hvaWNlIG9mIGxheW91dCBwYXRoLgotICAgIGlmIChzaW1wbGVM
aW5lTGF5b3V0KCkpIHsKLSAgICAgICAgaW52YWxpZGF0ZUxpbmVMYXlvdXRQYXRoKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKICAgICBpZiAobGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCkpIHsKICAgICAg
ICAgaW52YWxpZGF0ZUxpbmVMYXlvdXRQYXRoKCk7CkBAIC0zMTM4LDkgKzMxMDksNiBAQCBPcHRp
b25hbDxpbnQ+IFJlbmRlckJsb2NrRmxvdzo6Zmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdAogICAg
ICAgICByZXR1cm4gZmxvb3JUb0ludChsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQo
KS0+Zmlyc3RMaW5lQmFzZWxpbmUoKSk7CiAjZW5kaWYKIAotICAgIGlmIChzaW1wbGVMaW5lTGF5
b3V0KCkpCi0gICAgICAgIHJldHVybiB7IFNpbXBsZUxpbmVMYXlvdXQ6OmNvbXB1dGVGbG93Rmly
c3RMaW5lQmFzZWxpbmUoKnRoaXMsICpzaW1wbGVMaW5lTGF5b3V0KCkpIH07Ci0KICAgICBBU1NF
UlQoZmlyc3RSb290Qm94KCkpOwogICAgIGlmIChzdHlsZSgpLmlzRmxpcHBlZExpbmVzV3JpdGlu
Z01vZGUoKSkKICAgICAgICAgcmV0dXJuIGZpcnN0Um9vdEJveCgpLT5sb2dpY2FsVG9wKCkgKyBm
aXJzdExpbmVTdHlsZSgpLmZvbnRNZXRyaWNzKCkuZGVzY2VudChmaXJzdFJvb3RCb3goKS0+YmFz
ZWxpbmVUeXBlKCkpOwpAQCAtMzE1NCw3ICszMTIyLDcgQEAgT3B0aW9uYWw8aW50PiBSZW5kZXJC
bG9ja0Zsb3c6OmlubGluZUJsb2NrQmFzZWxpbmUoTGluZURpcmVjdGlvbk1vZGUgbGluZURpcmVj
dGkKIAogICAgIC8vIE5vdGUgdGhhdCBoZXJlIHdlIG9ubHkgdGFrZSB0aGUgbGVmdCBhbmQgYm90
dG9tIGludG8gY29uc2lkZXJhdGlvbi4gT3VyIGNhbGxlciB0YWtlcyB0aGUgcmlnaHQgYW5kIHRv
cCBpbnRvIGNvbnNpZGVyYXRpb24uCiAgICAgZmxvYXQgYm94SGVpZ2h0ID0gbGluZURpcmVjdGlv
biA9PSBIb3Jpem9udGFsTGluZSA/IGhlaWdodCgpICsgbV9tYXJnaW5Cb3guYm90dG9tKCkgOiB3
aWR0aCgpICsgbV9tYXJnaW5Cb3gubGVmdCgpOwotICAgIGZsb2F0IGxhc3RCYXNlbGluZTsKKyAg
ICBmbG9hdCBsYXN0QmFzZWxpbmUgPSAwOwogICAgIGlmICghY2hpbGRyZW5JbmxpbmUoKSkgewog
ICAgICAgICBPcHRpb25hbDxpbnQ+IGlubGluZUJsb2NrQmFzZWxpbmUgPSBSZW5kZXJCbG9jazo6
aW5saW5lQmxvY2tCYXNlbGluZShsaW5lRGlyZWN0aW9uKTsKICAgICAgICAgaWYgKCFpbmxpbmVC
bG9ja0Jhc2VsaW5lKQpAQCAtMzE3MCwxOSArMzEzOCwxNyBAQCBPcHRpb25hbDxpbnQ+IFJlbmRl
ckJsb2NrRmxvdzo6aW5saW5lQmxvY2tCYXNlbGluZShMaW5lRGlyZWN0aW9uTW9kZSBsaW5lRGly
ZWN0aQogICAgICAgICAgICAgICAgICsgKGxpbmVEaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUg
PyBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSA6IGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nUmln
aHQoKSkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHNpbXBsZUxpbmVMYXlvdXQoKSkKLSAg
ICAgICAgICAgIGxhc3RCYXNlbGluZSA9IFNpbXBsZUxpbmVMYXlvdXQ6OmNvbXB1dGVGbG93TGFz
dExpbmVCYXNlbGluZSgqdGhpcywgKnNpbXBsZUxpbmVMYXlvdXQoKSk7Ci0jaWYgRU5BQkxFKExB
WU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0gICAgICAgIGVsc2UgaWYgKGxheW91dEZvcm1hdHRp
bmdDb250ZXh0TGluZUxheW91dCgpKQotICAgICAgICAgICAgbGFzdEJhc2VsaW5lID0gZmxvb3JU
b0ludChsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKS0+bGFzdExpbmVCYXNlbGlu
ZSgpKTsKLSNlbmRpZgotICAgICAgICBlbHNlIHsKKyAgICAgICAgaWYgKGNvbXBsZXhMaW5lTGF5
b3V0KCkpIHsKICAgICAgICAgICAgIGJvb2wgaXNGaXJzdExpbmUgPSBsYXN0Um9vdEJveCgpID09
IGZpcnN0Um9vdEJveCgpOwogICAgICAgICAgICAgY29uc3QgYXV0byYgc3R5bGUgPSBpc0ZpcnN0
TGluZSA/IGZpcnN0TGluZVN0eWxlKCkgOiB0aGlzLT5zdHlsZSgpOwogICAgICAgICAgICAgLy8g
SW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0luQmxvY2tEaXJlY3Rpb24gd2lsbCBmbGlwIGxpbmVz
IGluIGNhc2Ugb2YgdmVydGljYWxMUiBtb2RlLCBzbyB3ZSBjYW4gYXNzdW1lIHZlcnRpY2FsUkwg
Zm9yIG5vdy4KICAgICAgICAgICAgIGxhc3RCYXNlbGluZSA9IHN0eWxlLmZvbnRNZXRyaWNzKCku
YXNjZW50KGxhc3RSb290Qm94KCktPmJhc2VsaW5lVHlwZSgpKQogICAgICAgICAgICAgICAgICsg
KHN0eWxlLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/IGxvZ2ljYWxIZWlnaHQoKSAtIGxh
c3RSb290Qm94KCktPmxvZ2ljYWxCb3R0b20oKSA6IGxhc3RSb290Qm94KCktPmxvZ2ljYWxUb3Ao
KSk7CiAgICAgICAgIH0KKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKyAg
ICAgICAgZWxzZSBpZiAobGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCkpCisgICAg
ICAgICAgICBsYXN0QmFzZWxpbmUgPSBmbG9vclRvSW50KGxheW91dEZvcm1hdHRpbmdDb250ZXh0
TGluZUxheW91dCgpLT5sYXN0TGluZUJhc2VsaW5lKCkpOworI2VuZGlmCiAgICAgfQogICAgIC8v
IEFjY29yZGluZyB0byB0aGUgQ1NTIHNwZWMgaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvdmlz
dWRldC5odG1sLCB3ZSBzaG91bGRuJ3QgYmUgcGVyZm9ybWluZyB0aGlzIG1pbiwgYnV0IHNob3Vs
ZAogICAgIC8vIGluc3RlYWQgYmUgcmV0dXJuaW5nIGJveEhlaWdodCBkaXJlY3RseS4gSG93ZXZl
ciwgd2UgZmVlbCB0aGF0IGEgbWluIGhlcmUgaXMgYmV0dGVyIGJlaGF2aW9yIChhbmQgaXMgY29u
c2lzdGVudApAQCAtMzIwMCw4ICszMTY2LDYgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnNldFNl
bGVjdGlvblN0YXRlKEhpZ2hsaWdodFN0YXRlIHN0YXRlKQogR2FwUmVjdHMgUmVuZGVyQmxvY2tG
bG93OjppbmxpbmVTZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExh
eW91dFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBv
ZmZzZXRGcm9tUm9vdEJsb2NrLAogICAgIExheW91dFVuaXQmIGxhc3RMb2dpY2FsVG9wLCBMYXlv
dXRVbml0JiBsYXN0TG9naWNhbExlZnQsIExheW91dFVuaXQmIGxhc3RMb2dpY2FsUmlnaHQsIGNv
bnN0IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMmIGNhY2hlLCBjb25zdCBQYWludEluZm8q
IHBhaW50SW5mbykKIHsKLSAgICBBU1NFUlQoIXNpbXBsZUxpbmVMYXlvdXQoKSk7Ci0KICAgICBH
YXBSZWN0cyByZXN1bHQ7CiAKICAgICBib29sIGNvbnRhaW5zU3RhcnQgPSBzZWxlY3Rpb25TdGF0
ZSgpID09IEhpZ2hsaWdodFN0YXRlOjpTdGFydCB8fCBzZWxlY3Rpb25TdGF0ZSgpID09IEhpZ2hs
aWdodFN0YXRlOjpCb3RoOwpAQCAtMzMxNyw5ICszMjgxLDYgQEAgaW50IFJlbmRlckJsb2NrRmxv
dzo6bGluZUNvdW50KCkgY29uc3QKICAgICAgICAgaWYgKGxheW91dEZvcm1hdHRpbmdDb250ZXh0
TGluZUxheW91dCgpKQogICAgICAgICAgICAgcmV0dXJuIGxheW91dEZvcm1hdHRpbmdDb250ZXh0
TGluZUxheW91dCgpLT5saW5lQ291bnQoKTsKICNlbmRpZgotICAgICAgICBpZiAoc2ltcGxlTGlu
ZUxheW91dCgpKQotICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUxpbmVMYXlvdXQoKS0+bGluZUNv
dW50KCk7Ci0KICAgICAgICAgaWYgKGNvbXBsZXhMaW5lTGF5b3V0KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gY29tcGxleExpbmVMYXlvdXQoKS0+bGluZUNvdW50KCk7CiAKQEAgLTM1NzUsMTAgKzM1
MzYsOCBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlvbkZvclBvaW50
V2l0aElubGluZUNoaWxkcmVuKGNvbnN0IExheW91dAogCiBQb3NpdGlvbiBSZW5kZXJCbG9ja0Zs
b3c6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQogewotICAgIC8v
IEZJWE1FOiBJdCBzdXBwb3J0cyBzaW5nbGUgdGV4dCBjaGlsZCBvbmx5ICh3aGljaCBpcyB0aGUg
bWFqb3JpdHkgb2Ygc2ltcGxlIGxpbmUgbGF5b3V0IHN1cHBvcnRlZCBjb250ZW50IGF0IHRoaXMg
cG9pbnQpLgotICAgIGlmICghc2ltcGxlTGluZUxheW91dCgpIHx8IGZpcnN0Q2hpbGQoKSAhPSBs
YXN0Q2hpbGQoKSB8fCAhaXM8UmVuZGVyVGV4dD4oZmlyc3RDaGlsZCgpKSkKLSAgICAgICAgcmV0
dXJuIHBvc2l0aW9uRm9yUG9pbnQocG9pbnQsIG51bGxwdHIpLmRlZXBFcXVpdmFsZW50KCk7Ci0g
ICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRleHQ+KCpmaXJzdENoaWxkKCkpLnBvc2l0aW9uRm9y
UG9pbnQocG9pbnQpOworICAgIC8vIEZJWE1FOiBUaGlzIGZvcmNlcyBDb21wbGV4IExpbmUgTGF5
b3V0LgorICAgIHJldHVybiBwb3NpdGlvbkZvclBvaW50KHBvaW50LCBudWxscHRyKS5kZWVwRXF1
aXZhbGVudCgpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlv
bkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVuZGVyRnJhZ21lbnRD
b250YWluZXIqKQpAQCAtMzYwOSwxMSArMzU2OCw2IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpw
YWludElubGluZUNoaWxkcmVuKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2lu
CiAgICAgfQogI2VuZGlmCiAKLSAgICBpZiAoYXV0byBzaW1wbGVMaW5lTGF5b3V0ID0gdGhpcy0+
c2ltcGxlTGluZUxheW91dCgpKSB7Ci0gICAgICAgIFNpbXBsZUxpbmVMYXlvdXQ6OnBhaW50Rmxv
dygqdGhpcywgKnNpbXBsZUxpbmVMYXlvdXQsIHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKGNvbXBsZXhMaW5lTGF5b3V0KCkpCiAgICAg
ICAgIGNvbXBsZXhMaW5lTGF5b3V0KCktPmxpbmVCb3hlcygpLnBhaW50KHRoaXMsIHBhaW50SW5m
bywgcGFpbnRPZmZzZXQpOwogfQpAQCAtMzY3MSw4ICszNjI1LDYgQEAgYm9vbCBSZW5kZXJCbG9j
a0Zsb3c6Omhhc0xpbmVzKCkgY29uc3QKICAgICBpZiAobGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRM
aW5lTGF5b3V0KCkpCiAgICAgICAgIHJldHVybiBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVM
YXlvdXQoKS0+bGluZUNvdW50KCk7CiAjZW5kaWYKLSAgICBpZiAoc2ltcGxlTGluZUxheW91dCgp
KQotICAgICAgICByZXR1cm4gc2ltcGxlTGluZUxheW91dCgpLT5saW5lQ291bnQoKTsKIAogICAg
IHJldHVybiBjb21wbGV4TGluZUxheW91dCgpICYmIGNvbXBsZXhMaW5lTGF5b3V0KCktPmxpbmVC
b3hlcygpLmZpcnN0TGluZUJveCgpOwogfQpAQCAtMzY4MiwxNSArMzYzNCwxMSBAQCB2b2lkIFJl
bmRlckJsb2NrRmxvdzo6aW52YWxpZGF0ZUxpbmVMYXlvdXRQYXRoKCkKICAgICBzd2l0Y2ggKGxp
bmVMYXlvdXRQYXRoKCkpIHsKICAgICBjYXNlIFVuZGV0ZXJtaW5lZFBhdGg6CiAgICAgY2FzZSBG
b3JjZUxpbmVCb3hlc1BhdGg6Ci0gICAgICAgIEFTU0VSVCghc2ltcGxlTGluZUxheW91dCgpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgTGluZUJveGVzUGF0aDoKLSAgICAgICAgQVNTRVJU
KCFzaW1wbGVMaW5lTGF5b3V0KCkpOwogICAgICAgICBzZXRMaW5lTGF5b3V0UGF0aChVbmRldGVy
bWluZWRQYXRoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgTGF5b3V0Rm9ybWF0dGluZ0Nv
bnRleHRQYXRoOiAvLyBGSVhNRTogTm90IGFsbCBjbGllbnRzIG9mIGludmFsaWRhdGVMaW5lTGF5
b3V0UGF0aCgpIGFjdHVhbGx5IG5lZWQgdG8gd2lwZSB0aGUgbGF5b3V0LgotICAgIGNhc2UgU2lt
cGxlTGluZXNQYXRoOgotICAgICAgICAvLyBUaGUgc2ltcGxlIGxpbmUgbGF5b3V0IG1heSBoYXZl
IGJlY29tZSBpbnZhbGlkLgogICAgICAgICBtX2xpbmVMYXlvdXQgPSBXVEY6Ok1vbm9zdGF0ZSgp
OwogICAgICAgICBzZXRMaW5lTGF5b3V0UGF0aChVbmRldGVybWluZWRQYXRoKTsKICAgICAgICAg
aWYgKG5lZWRzTGF5b3V0KCkpCkBAIC0zNzAyLDMyICszNjUwLDYgQEAgdm9pZCBSZW5kZXJCbG9j
a0Zsb3c6OmludmFsaWRhdGVMaW5lTGF5b3V0UGF0aCgpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRTaW1wbGVMaW5lcyhib29sIHJl
bGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsVG9wLCBMYXlvdXRVbml0
JiByZXBhaW50TG9naWNhbEJvdHRvbSkKLXsKLSAgICBib29sIG5lZWRzTGF5b3V0ID0gc2VsZk5l
ZWRzTGF5b3V0KCkgfHwgcmVsYXlvdXRDaGlsZHJlbiB8fCAhc2ltcGxlTGluZUxheW91dCgpOwot
ICAgIGlmIChuZWVkc0xheW91dCkKLSAgICAgICAgbV9saW5lTGF5b3V0ID0gU2ltcGxlTGluZUxh
eW91dDo6Y3JlYXRlKCp0aGlzKTsKLQotICAgIGF1dG8mIHNpbXBsZUxpbmVMYXlvdXQgPSAqdGhp
cy0+c2ltcGxlTGluZUxheW91dCgpOwotCi0gICAgaWYgKHZpZXcoKS5mcmFtZVZpZXcoKS5sYXlv
dXRDb250ZXh0KCkubGF5b3V0U3RhdGUoKSAmJiB2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29u
dGV4dCgpLmxheW91dFN0YXRlKCktPmlzUGFnaW5hdGVkKCkpIHsKLSAgICAgICAgc2ltcGxlTGlu
ZUxheW91dC5zZXRJc1BhZ2luYXRlZCgpOwotICAgICAgICBTaW1wbGVMaW5lTGF5b3V0OjphZGp1
c3RMaW5lUG9zaXRpb25zRm9yUGFnaW5hdGlvbihzaW1wbGVMaW5lTGF5b3V0LCAqdGhpcyk7Ci0g
ICAgfQotCi0gICAgZm9yIChhdXRvJiByZW5kZXJlciA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9i
amVjdD4oKnRoaXMpKSB7Ci0gICAgICAgIGlmIChpczxSZW5kZXJUZXh0PihyZW5kZXJlcikpCi0g
ICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJUZXh0PihyZW5kZXJlcikuZGVsZXRlTGluZUJveGVz
KCk7Ci0gICAgICAgIHJlbmRlcmVyLmNsZWFyTmVlZHNMYXlvdXQoKTsKLSAgICB9Ci0KLSAgICBM
YXlvdXRVbml0IGxpbmVMYXlvdXRIZWlnaHQgPSBTaW1wbGVMaW5lTGF5b3V0Ojpjb21wdXRlRmxv
d0hlaWdodCgqdGhpcywgc2ltcGxlTGluZUxheW91dCk7Ci0gICAgTGF5b3V0VW5pdCBsaW5lTGF5
b3V0VG9wID0gYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpOwotICAgIHJlcGFpbnRMb2dpY2FsVG9w
ID0gbGluZUxheW91dFRvcDsKLSAgICByZXBhaW50TG9naWNhbEJvdHRvbSA9IG5lZWRzTGF5b3V0
ID8gcmVwYWludExvZ2ljYWxUb3AgKyBsaW5lTGF5b3V0SGVpZ2h0ICsgYm9yZGVyQW5kUGFkZGlu
Z0FmdGVyKCkgOiByZXBhaW50TG9naWNhbFRvcDsKLSAgICBzZXRMb2dpY2FsSGVpZ2h0KGxpbmVM
YXlvdXRUb3AgKyBsaW5lTGF5b3V0SGVpZ2h0ICsgYm9yZGVyQW5kUGFkZGluZ0FmdGVyKCkpOwot
fQotCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiB2b2lkIFJlbmRlckJs
b2NrRmxvdzo6bGF5b3V0TEZDTGluZXMoYm9vbCwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxU
b3AsIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsQm90dG9tKQogewpAQCAtMzc2OCwxMSArMzY5
MCw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjplbnN1cmVMaW5lQm94ZXMoKQogICAgIGlmIChj
b21wbGV4TGluZUxheW91dCgpIHx8ICFoYXNMaW5lTGF5b3V0KCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGF1dG8gc2ltcGxlTGluZUxheW91dCA9IG1ha2VSZWZQdHIodGhpcy0+c2ltcGxlTGlu
ZUxheW91dCgpKTsKLQogICAgIGJvb2wgbmVlZHNUb1BhZ2luYXRlQ29tcGxleExpbmVzID0gWyZd
IHsKLSAgICAgICAgaWYgKHNpbXBsZUxpbmVMYXlvdXQgJiYgc2ltcGxlTGluZUxheW91dC0+aXNQ
YWdpbmF0ZWQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwogI2lmIEVOQUJMRShMQVlPVVRf
Rk9STUFUVElOR19DT05URVhUKQogICAgICAgICBpZiAobGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRM
aW5lTGF5b3V0KCkgJiYgbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCktPmlzUGFn
aW5hdGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM3ODIsMTMgKzM3MDAsNiBA
QCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6ZW5zdXJlTGluZUJveGVzKCkKIAogICAgIG1fbGluZUxh
eW91dCA9IG1ha2VVbmlxdWU8Q29tcGxleExpbmVMYXlvdXQ+KCp0aGlzKTsKIAotICAgIGlmIChz
aW1wbGVMaW5lTGF5b3V0KSB7Ci0gICAgICAgIGlmIChTaW1wbGVMaW5lTGF5b3V0OjpjYW5Vc2VG
b3JMaW5lQm94VHJlZSgqdGhpcywgKnNpbXBsZUxpbmVMYXlvdXQpKSB7Ci0gICAgICAgICAgICBT
aW1wbGVMaW5lTGF5b3V0OjpnZW5lcmF0ZUxpbmVCb3hUcmVlKCp0aGlzLCAqc2ltcGxlTGluZUxh
eW91dCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBhdXRv
JiBjb21wbGV4TGluZUxheW91dCA9ICp0aGlzLT5jb21wbGV4TGluZUxheW91dCgpOwogCiAjaWYg
QVNTRVJUX0VOQUJMRUQKQEAgLTM4MjIsOSArMzczMyw2IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93
OjpvdXRwdXRMaW5lVHJlZUFuZE1hcmsoV1RGOjpUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IElu
bGluCiB7CiAgICAgZm9yIChjb25zdCBSb290SW5saW5lQm94KiByb290ID0gZmlyc3RSb290Qm94
KCk7IHJvb3Q7IHJvb3QgPSByb290LT5uZXh0Um9vdEJveCgpKQogICAgICAgICByb290LT5vdXRw
dXRMaW5lVHJlZUFuZE1hcmsoc3RyZWFtLCBtYXJrZWRCb3gsIGRlcHRoKTsKLQotICAgIGlmIChh
dXRvIHNpbXBsZUxpbmVMYXlvdXQgPSB0aGlzLT5zaW1wbGVMaW5lTGF5b3V0KCkpCi0gICAgICAg
IFNpbXBsZUxpbmVMYXlvdXQ6Om91dHB1dExpbmVMYXlvdXRGb3JGbG93KHN0cmVhbSwgKnRoaXMs
ICpzaW1wbGVMaW5lTGF5b3V0LCBkZXB0aCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCmluZGV4IGEyMTIwNzNmMGQxYS4uOWFmYTllOWFj
YmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCkBAIC0y
Nyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiTGluZVdpZHRoLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxv
Y2suaCIKICNpbmNsdWRlICJSZW5kZXJMaW5lQm94TGlzdC5oIgotI2luY2x1ZGUgIlNpbXBsZUxp
bmVMYXlvdXQuaCIKICNpbmNsdWRlICJUcmFpbGluZ09iamVjdHMuaCIKICNpbmNsdWRlIDxtZW1v
cnk+CiAKQEAgLTM0NCw3ICszNDMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNMaW5lcygpIGNv
bnN0OwogICAgIHZvaWQgaW52YWxpZGF0ZUxpbmVMYXlvdXRQYXRoKCkgZmluYWw7CiAKLSAgICBl
bnVtIExpbmVMYXlvdXRQYXRoIHsgVW5kZXRlcm1pbmVkUGF0aCA9IDAsIFNpbXBsZUxpbmVzUGF0
aCwgTGluZUJveGVzUGF0aCwgTGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRQYXRoLCBGb3JjZUxpbmVC
b3hlc1BhdGggfTsKKyAgICBlbnVtIExpbmVMYXlvdXRQYXRoIHsgVW5kZXRlcm1pbmVkUGF0aCA9
IDAsIExpbmVCb3hlc1BhdGgsIExheW91dEZvcm1hdHRpbmdDb250ZXh0UGF0aCwgRm9yY2VMaW5l
Qm94ZXNQYXRoIH07CiAgICAgTGluZUxheW91dFBhdGggbGluZUxheW91dFBhdGgoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxMaW5lTGF5b3V0UGF0aD4ocmVuZGVyQmxvY2tGbG93TGluZUxh
eW91dFBhdGgoKSk7IH0KICAgICB2b2lkIHNldExpbmVMYXlvdXRQYXRoKExpbmVMYXlvdXRQYXRo
IHBhdGgpIHsgc2V0UmVuZGVyQmxvY2tGbG93TGluZUxheW91dFBhdGgocGF0aCk7IH0KIApAQCAt
MzU5LDggKzM1OCw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY29udGFpbnNOb25aZXJvQmlkaUxl
dmVsKCkgY29uc3Q7CiAKLSAgICBjb25zdCBTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQqIHNpbXBs
ZUxpbmVMYXlvdXQoKSBjb25zdDsKLSAgICBTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQqIHNpbXBs
ZUxpbmVMYXlvdXQoKTsKICAgICBjb25zdCBDb21wbGV4TGluZUxheW91dCogY29tcGxleExpbmVM
YXlvdXQoKSBjb25zdDsKICAgICBDb21wbGV4TGluZUxheW91dCogY29tcGxleExpbmVMYXlvdXQo
KTsKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKQEAgLTU0MywxMSArNTQw
LDggQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGJvb2wgaGFzTGluZUxheW91dCgpIGNvbnN0
OwotICAgIGJvb2wgaGFzU2ltcGxlTGluZUxheW91dCgpIGNvbnN0OwogICAgIGJvb2wgaGFzQ29t
cGxleExpbmVMYXlvdXQoKSBjb25zdDsKIAotICAgIHZvaWQgbGF5b3V0U2ltcGxlTGluZXMoYm9v
bCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbFRvcCwgTGF5b3V0
VW5pdCYgcmVwYWludExvZ2ljYWxCb3R0b20pOwotCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRU
SU5HX0NPTlRFWFQpCiAgICAgYm9vbCBoYXNMYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlv
dXQoKSBjb25zdDsKICAgICB2b2lkIGxheW91dExGQ0xpbmVzKGJvb2wgcmVsYXlvdXRDaGlsZHJl
biwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxUb3AsIExheW91dFVuaXQmIHJlcGFpbnRMb2dp
Y2FsQm90dG9tKTsKQEAgLTU5Miw3ICs1ODYsNiBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAg
IFZhcmlhbnQ8CiAgICAgICAgIFdURjo6TW9ub3N0YXRlLAotICAgICAgICBSZWY8U2ltcGxlTGlu
ZUxheW91dDo6TGF5b3V0PiwKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkK
ICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPExheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0PiwK
ICNlbmRpZgpAQCAtNjI0LDIxICs2MTcsNiBAQCBpbmxpbmUgQ29tcGxleExpbmVMYXlvdXQqIFJl
bmRlckJsb2NrRmxvdzo6Y29tcGxleExpbmVMYXlvdXQoKQogICAgIHJldHVybiBoYXNDb21wbGV4
TGluZUxheW91dCgpID8gV1RGOjpnZXQ8c3RkOjp1bmlxdWVfcHRyPENvbXBsZXhMaW5lTGF5b3V0
Pj4obV9saW5lTGF5b3V0KS5nZXQoKSA6IG51bGxwdHI7CiB9CiAKLWlubGluZSBib29sIFJlbmRl
ckJsb2NrRmxvdzo6aGFzU2ltcGxlTGluZUxheW91dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdU
Rjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPFNpbXBsZUxpbmVMYXlvdXQ6OkxheW91dD4+KG1fbGlu
ZUxheW91dCk7Ci19Ci0KLWlubGluZSBjb25zdCBTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQqIFJl
bmRlckJsb2NrRmxvdzo6c2ltcGxlTGluZUxheW91dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGhh
c1NpbXBsZUxpbmVMYXlvdXQoKSA/IFdURjo6Z2V0PFJlZjxTaW1wbGVMaW5lTGF5b3V0OjpMYXlv
dXQ+PihtX2xpbmVMYXlvdXQpLnB0cigpIDogbnVsbHB0cjsKLX0KLQotaW5saW5lIFNpbXBsZUxp
bmVMYXlvdXQ6OkxheW91dCogUmVuZGVyQmxvY2tGbG93OjpzaW1wbGVMaW5lTGF5b3V0KCkKLXsK
LSAgICByZXR1cm4gaGFzU2ltcGxlTGluZUxheW91dCgpID8gV1RGOjpnZXQ8UmVmPFNpbXBsZUxp
bmVMYXlvdXQ6OkxheW91dD4+KG1fbGluZUxheW91dCkucHRyKCkgOiBudWxscHRyOwotfQotCiAj
aWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiBpbmxpbmUgYm9vbCBSZW5kZXJC
bG9ja0Zsb3c6Omhhc0xheW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dCgpIGNvbnN0CiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRlZEZs
b3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmNw
cAppbmRleCAwZGQzOGVjMmZkMTAuLjQyZGMxOTIwNTNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRlZEZsb3cuY3BwCkBAIC00NTAsNyArNDUwLDcg
QEAgdm9pZCBSZW5kZXJGcmFnbWVudGVkRmxvdzo6cmVtb3ZlUmVuZGVyQm94RnJhZ21lbnRJbmZv
KFJlbmRlckJveCYgYm94KQogCiB2b2lkIFJlbmRlckZyYWdtZW50ZWRGbG93OjpyZW1vdmVMaW5l
RnJhZ21lbnRJbmZvKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgYmxvY2tGbG93KQogewotICAgIGlm
ICghbV9saW5lVG9GcmFnbWVudE1hcCB8fCBibG9ja0Zsb3cubGluZUxheW91dFBhdGgoKSA9PSBT
aW1wbGVMaW5lc1BhdGgpCisgICAgaWYgKCFtX2xpbmVUb0ZyYWdtZW50TWFwKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBmb3IgKGF1dG8qIGN1cnIgPSBibG9ja0Zsb3cuZmlyc3RSb290Qm94KCk7
IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0Um9vdEJveCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHQuY3BwCmluZGV4IGQ0NjEzNjY4YTI3Mi4uOGUwZWIyNzhjYzRlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCkBAIC00Niw3ICs0Niw2IEBACiAjaW5j
bHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCIK
ICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGdW5jdGlv
bnMuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5o
IgogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgpAQCAtNDQzLDIzICs0NDIsMTMgQEAgVmVj
dG9yPEZsb2F0UXVhZD4gUmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFkc0ZvclJhbmdlKHVuc2lnbmVk
IHN0YXJ0LCB1bnNpZ25lZCBlbmQKICAgICBBU1NFUlQoc3RhcnQgPD0gSU5UX01BWCk7CiAgICAg
c3RhcnQgPSBzdGQ6Om1pbihzdGFydCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElOVF9NQVgpKTsK
ICAgICBlbmQgPSBzdGQ6Om1pbihlbmQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihJTlRfTUFYKSk7
Ci0gICAgaWYgKHNpbXBsZUxpbmVMYXlvdXQoKSAmJiAhdXNlU2VsZWN0aW9uSGVpZ2h0KQotICAg
ICAgICByZXR1cm4gY29sbGVjdEFic29sdXRlUXVhZHNGb3JSYW5nZSgqdGhpcywgc3RhcnQsIGVu
ZCwgKnNpbXBsZUxpbmVMYXlvdXQoKSwgaWdub3JlRW1wdHlUZXh0U2VsZWN0aW9ucywgd2FzRml4
ZWQpOworCiAgICAgY29uc3RfY2FzdDxSZW5kZXJUZXh0Jj4oKnRoaXMpLmVuc3VyZUxpbmVCb3hl
cygpOwogICAgIHJldHVybiBtX2xpbmVCb3hlcy5hYnNvbHV0ZVF1YWRzRm9yUmFuZ2UoKnRoaXMs
IHN0YXJ0LCBlbmQsIHVzZVNlbGVjdGlvbkhlaWdodCwgaWdub3JlRW1wdHlUZXh0U2VsZWN0aW9u
cywgd2FzRml4ZWQpOwogfQogCiBQb3NpdGlvbiBSZW5kZXJUZXh0Ojpwb3NpdGlvbkZvclBvaW50
KGNvbnN0IExheW91dFBvaW50JiBwb2ludCkKIHsKLSAgICBpZiAoc2ltcGxlTGluZUxheW91dCgp
ICYmIHBhcmVudCgpLT5maXJzdENoaWxkKCkgPT0gcGFyZW50KCktPmxhc3RDaGlsZCgpKSB7Ci0g
ICAgICAgIGF1dG8gb2Zmc2V0ID0gU2ltcGxlTGluZUxheW91dDo6dGV4dE9mZnNldEZvclBvaW50
KHBvaW50LCAqdGhpcywgKnNpbXBsZUxpbmVMYXlvdXQoKSk7Ci0gICAgICAgIC8vIERpZCBub3Qg
ZmluZCBhIHZhbGlkIG9mZnNldC4gRmFsbCBiYWNrIHRvIHRoZSBub3JtYWwgbGluZSBsYXlvdXQg
YmFzZWQgUG9zaXRpb24uCi0gICAgICAgIGlmIChvZmZzZXQgPT0gdGV4dCgpLmxlbmd0aCgpKQot
ICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uRm9yUG9pbnQocG9pbnQsIG51bGxwdHIpLmRlZXBF
cXVpdmFsZW50KCk7Ci0gICAgICAgIGF1dG8gcG9zaXRpb24gPSBQb3NpdGlvbih0ZXh0Tm9kZSgp
LCBvZmZzZXQpOwotICAgICAgICBBU1NFUlQocG9zaXRpb24gPT0gcG9zaXRpb25Gb3JQb2ludChw
b2ludCwgbnVsbHB0cikuZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgIHJldHVybiBwb3NpdGlv
bjsKLSAgICB9CiAgICAgcmV0dXJuIHBvc2l0aW9uRm9yUG9pbnQocG9pbnQsIG51bGxwdHIpLmRl
ZXBFcXVpdmFsZW50KCk7CiB9CiAKQEAgLTEwNzYsNyArMTA2NSw3IEBAIHZvaWQgUmVuZGVyVGV4
dDo6c2V0VGV4dFdpdGhPZmZzZXQoY29uc3QgU3RyaW5nJiBuZXdUZXh0LCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnCiAgICAgaW50IGRlbHRhID0gbmV3VGV4dC5sZW5ndGgoKSAtIHRleHQoKS5sZW5n
dGgoKTsKICAgICB1bnNpZ25lZCBlbmQgPSBvZmZzZXQgKyBsZW5ndGg7CiAKLSAgICBtX2xpbmVz
RGlydHkgPSBzaW1wbGVMaW5lTGF5b3V0KCkgfHwgbV9saW5lQm94ZXMuZGlydHlSYW5nZSgqdGhp
cywgb2Zmc2V0LCBlbmQsIGRlbHRhKTsKKyAgICBtX2xpbmVzRGlydHkgPSBtX2xpbmVCb3hlcy5k
aXJ0eVJhbmdlKCp0aGlzLCBvZmZzZXQsIGVuZCwgZGVsdGEpOwogCiAgICAgc2V0VGV4dChuZXdU
ZXh0LCBmb3JjZSB8fCBtX2xpbmVzRGlydHkpOwogfQpAQCAtMTMwMCwxMyArMTI4OSw2IEBAIHZv
aWQgUmVuZGVyVGV4dDo6ZW5zdXJlTGluZUJveGVzKCkKICAgICBkb3duY2FzdDxSZW5kZXJCbG9j
a0Zsb3c+KCpwYXJlbnQoKSkuZW5zdXJlTGluZUJveGVzKCk7CiB9CiAKLWNvbnN0IFNpbXBsZUxp
bmVMYXlvdXQ6OkxheW91dCogUmVuZGVyVGV4dDo6c2ltcGxlTGluZUxheW91dCgpIGNvbnN0Ci17
Ci0gICAgaWYgKCFpczxSZW5kZXJCbG9ja0Zsb3c+KCpwYXJlbnQoKSkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpwYXJlbnQo
KSkuc2ltcGxlTGluZUxheW91dCgpOwotfQotCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5H
X0NPTlRFWFQpCiBjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dCogUmVuZGVyVGV4
dDo6bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCkgY29uc3QKIHsKQEAgLTEzMTgs
OCArMTMwMCw2IEBAIGNvbnN0IExheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0KiBSZW5kZXJU
ZXh0OjpsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvCiAKIGJvb2wgUmVuZGVyVGV4dDo6
dXNlc0NvbXBsZXhMaW5lTGF5b3V0UGF0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKHNpbXBsZUxpbmVM
YXlvdXQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFU
VElOR19DT05URVhUKQogICAgIGlmIChsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTM4OCw3ICsxMzY4LDYgQEAgSW50UmVjdCBS
ZW5kZXJUZXh0OjpsaW5lc0JvdW5kaW5nQm94KCkgY29uc3QKIAogTGF5b3V0UmVjdCBSZW5kZXJU
ZXh0OjpsaW5lc1Zpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3goKSBjb25zdAogewotICAgIEFTU0VS
VCghc2ltcGxlTGluZUxheW91dCgpKTsKICAgICByZXR1cm4gbV9saW5lQm94ZXMudmlzdWFsT3Zl
cmZsb3dCb3VuZGluZ0JveCgqdGhpcyk7CiB9CiAKQEAgLTE0MTEsNyArMTM5MCw2IEBAIExheW91
dFJlY3QgUmVuZGVyVGV4dDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoY29uc3QgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjCiBMYXlvdXRSZWN0IFJlbmRlclRleHQ6OmNvbGxlY3RTZWxlY3Rp
b25SZWN0c0ZvckxpbmVCb3hlcyhjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50LCBWZWN0b3I8TGF5b3V0UmVjdD4q
IHJlY3RzKQogewogICAgIEFTU0VSVCghbmVlZHNMYXlvdXQoKSk7Ci0gICAgQVNTRVJUKCFzaW1w
bGVMaW5lTGF5b3V0KCkpOwogCiAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gSGlnaGxpZ2h0
U3RhdGU6Ok5vbmUpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHQuaAppbmRleCAwMDc5MzI0OTYyZjQuLjI5MWQxOTQ3YTY3YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCkBAIC0yNCw3ICsyNCw2IEBACiAKICNp
bmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dExpbmVCb3hlcy5o
IgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXQuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRv
ci5oPgpAQCAtMTY5LDcgKzE2OCw2IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdm9pZCBlbnN1
cmVMaW5lQm94ZXMoKTsKLSAgICBjb25zdCBTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQqIHNpbXBs
ZUxpbmVMYXlvdXQoKSBjb25zdDsKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKICAgICBjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dCogbGF5b3V0Rm9ybWF0
dGluZ0NvbnRleHRMaW5lTGF5b3V0KCkgY29uc3Q7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZTI4ZWFiM2FjNTAyLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA1MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNpbXBsZUxp
bmVMYXlvdXQuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgotI2lu
Y2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaCIKLSNp
bmNsdWRlICJIaXRUZXN0TG9jYXRpb24uaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgot
I2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJIeXBoZW5hdGlvbi5oIgotI2lu
Y2x1ZGUgIklubGluZVRleHRCb3guaCIKLSNpbmNsdWRlICJMaW5lV2lkdGguaCIKLSNpbmNsdWRl
ICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGFpbnRJbmZvLmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxv
Y2tGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJl
bmRlckZyYWdtZW50ZWRGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCi0jaW5j
bHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIK
LSNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIK
LSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRl
ICJTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxh
eW91dEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oIgot
I2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oIgotI2luY2x1
ZGUgIlRleHQuaCIKLSNpbmNsdWRlICJUZXh0UGFpbnRTdHlsZS5oIgotI2luY2x1ZGUgPHBhbC9M
b2dnaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBTaW1wbGVMaW5lTGF5
b3V0IHsKLQotI2lmbmRlZiBOREVCVUcKLSNkZWZpbmUgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lG
X05FRURFRChyZWFzb24sIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKSB7IFwKLSAgICAgICAgcmVh
c29ucyB8PSByZWFzb247IFwKLSAgICAgICAgaWYgKGluY2x1ZGVSZWFzb25zID09IEluY2x1ZGVS
ZWFzb25zOjpGaXJzdCkgXAotICAgICAgICAgICAgcmV0dXJuIHJlYXNvbnM7IFwKLSAgICB9Ci0j
ZWxzZQotI2RlZmluZSBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbiwgcmVh
c29ucywgaW5jbHVkZVJlYXNvbnMpIHsgXAotICAgICAgICBBU1NFUlRfVU5VU0VEKGluY2x1ZGVS
ZWFzb25zLCBpbmNsdWRlUmVhc29ucyA9PSBJbmNsdWRlUmVhc29uczo6Rmlyc3QpOyBcCi0gICAg
ICAgIHJlYXNvbnMgfD0gcmVhc29uOyBcCi0gICAgICAgIHJldHVybiByZWFzb25zOyBcCi0gICAg
fQotI2VuZGlmCi0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IEF2b2lkYW5j
ZVJlYXNvbkZsYWdzIGNhblVzZUZvckNoYXJhY3RlcihDaGFyYWN0ZXJUeXBlLCBib29sIHRleHRJ
c0p1c3RpZmllZCwgSW5jbHVkZVJlYXNvbnMpOwotCi10ZW1wbGF0ZTw+IEF2b2lkYW5jZVJlYXNv
bkZsYWdzIGNhblVzZUZvckNoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIsIGJvb2wgdGV4dElzSnVz
dGlmaWVkLCBJbmNsdWRlUmVhc29ucyBpbmNsdWRlUmVhc29ucykKLXsKLSAgICBBdm9pZGFuY2VS
ZWFzb25GbGFncyByZWFzb25zID0geyB9OwotICAgIGlmICh0ZXh0SXNKdXN0aWZpZWQpIHsKLSAg
ICAgICAgLy8gSW5jbHVkZSBjaGFyYWN0ZXJzIHVwIHRvIExhdGluIEV4dGVuZGVkLUIgYW5kIHNv
bWUgcHVuY3R1YXRpb24gcmFuZ2Ugd2hlbiB0ZXh0IGlzIGp1c3RpZmllZC4KLSAgICAgICAgYm9v
bCBpc0xhdGluSW5jbHVkaW5nRXh0ZW5kZWRCID0gY2hhcmFjdGVyIDw9IDB4MDFGRjsKLSAgICAg
ICAgYm9vbCBpc1B1bmN0dWF0aW9uUmFuZ2UgPSBjaGFyYWN0ZXIgPj0gMHgyMDEwICYmIGNoYXJh
Y3RlciA8PSAweDIwMjc7Ci0gICAgICAgIGlmICghKGlzTGF0aW5JbmNsdWRpbmdFeHRlbmRlZEIg
fHwgaXNQdW5jdHVhdGlvblJhbmdlKSkKLSAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVS
Tl9JRl9ORUVERUQoRmxvd0hhc0p1c3RpZmllZE5vbkxhdGluVGV4dCwgcmVhc29ucywgaW5jbHVk
ZVJlYXNvbnMpOwotICAgIH0KLQotICAgIGlmIChVMTZfSVNfU1VSUk9HQVRFKGNoYXJhY3Rlcikp
Ci0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRIYXNTdXJy
b2dhdGVQYWlyLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgCi0gICAgVUNoYXJEaXJl
Y3Rpb24gZGlyZWN0aW9uID0gdV9jaGFyRGlyZWN0aW9uKGNoYXJhY3Rlcik7Ci0gICAgaWYgKGRp
cmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xFRlQgfHwgZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVG
VF9BUkFCSUMKLSAgICAgICAgfHwgZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJ
TkcgfHwgZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVF9PVkVSUklERQotICAgICAgICB8fCBk
aXJlY3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hUX0VNQkVERElORyB8fCBkaXJlY3Rpb24gPT0gVV9M
RUZUX1RPX1JJR0hUX09WRVJSSURFCi0gICAgICAgIHx8IGRpcmVjdGlvbiA9PSBVX1BPUF9ESVJF
Q1RJT05BTF9GT1JNQVQgfHwgZGlyZWN0aW9uID09IFVfQk9VTkRBUllfTkVVVFJBTCkKLSAgICAg
ICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93VGV4dEhhc0RpcmVjdGlvbkNo
YXJhY3RlciwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotCi0gICAgcmV0dXJuIHJlYXNvbnM7
Ci19Ci0KLXRlbXBsYXRlPD4gQXZvaWRhbmNlUmVhc29uRmxhZ3MgY2FuVXNlRm9yQ2hhcmFjdGVy
KExDaGFyLCBib29sLCBJbmNsdWRlUmVhc29ucykKLXsKLSAgICByZXR1cm4geyB9OwotfQotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBBdm9pZGFuY2VSZWFzb25G
bGFncyBjYW5Vc2VGb3JUZXh0KGNvbnN0IENoYXJhY3RlclR5cGUqIHRleHQsIHVuc2lnbmVkIGxl
bmd0aCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnRDYXNjYWRlLCBPcHRpb25hbDxmbG9hdD4gbGlu
ZUhlaWdodENvbnN0cmFpbnQsCi0gICAgYm9vbCB0ZXh0SXNKdXN0aWZpZWQsIEluY2x1ZGVSZWFz
b25zIGluY2x1ZGVSZWFzb25zKQotewotICAgIEF2b2lkYW5jZVJlYXNvbkZsYWdzIHJlYXNvbnMg
PSB7IH07Ci0gICAgYXV0byYgcHJpbWFyeUZvbnQgPSBmb250Q2FzY2FkZS5wcmltYXJ5Rm9udCgp
OwotICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gcHJpbWFyeUZvbnQuZm9udE1ldHJpY3MoKTsKLSAg
ICBhdXRvIGF2YWlsYWJsZVNwYWNlRm9yR2x5cGhBc2NlbnQgPSBmb250TWV0cmljcy5hc2NlbnQo
KTsKLSAgICBhdXRvIGF2YWlsYWJsZVNwYWNlRm9yR2x5cGhEZXNjZW50ID0gZm9udE1ldHJpY3Mu
ZGVzY2VudCgpOwotICAgIGlmIChsaW5lSGVpZ2h0Q29uc3RyYWludCkgewotICAgICAgICBhdXRv
IGxpbmVIZWlnaHRQYWRkaW5nID0gKmxpbmVIZWlnaHRDb25zdHJhaW50IC0gZm9udE1ldHJpY3Mu
aGVpZ2h0KCk7Ci0gICAgICAgIGF2YWlsYWJsZVNwYWNlRm9yR2x5cGhBc2NlbnQgKz0gbGluZUhl
aWdodFBhZGRpbmcgLyAyOwotICAgICAgICBhdmFpbGFibGVTcGFjZUZvckdseXBoRGVzY2VudCAr
PSBsaW5lSGVpZ2h0UGFkZGluZyAvIDI7Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8gY2hhcmFjdGVyID0gdGV4dFtpXTsK
LSAgICAgICAgaWYgKEZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gc29mdEh5cGhlbikK
LSAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRIYXNT
b2Z0SHlwaGVuLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0KLSAgICAgICAgYXV0byBjaGFy
YWN0ZXJSZWFzb25zID0gY2FuVXNlRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgdGV4dElzSnVzdGlm
aWVkLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXJSZWFzb25zICE9IE5v
UmVhc29uKQotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChjaGFy
YWN0ZXJSZWFzb25zLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0KLSAgICAgICAgYXV0byBn
bHlwaERhdGEgPSBmb250Q2FzY2FkZS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBm
YWxzZSk7Ci0gICAgICAgIGlmICghZ2x5cGhEYXRhLmlzVmFsaWQoKSB8fCBnbHlwaERhdGEuZm9u
dCAhPSAmcHJpbWFyeUZvbnQpCi0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZf
TkVFREVEKEZsb3dQcmltYXJ5Rm9udElzSW5zdWZmaWNpZW50LCByZWFzb25zLCBpbmNsdWRlUmVh
c29ucyk7Ci0KLSAgICAgICAgaWYgKGxpbmVIZWlnaHRDb25zdHJhaW50KSB7Ci0gICAgICAgICAg
ICBhdXRvIGJvdW5kcyA9IHByaW1hcnlGb250LmJvdW5kc0ZvckdseXBoKGdseXBoRGF0YS5nbHlw
aCk7Ci0gICAgICAgICAgICBpZiAoY2VpbGYoLWJvdW5kcy55KCkpID4gYXZhaWxhYmxlU3BhY2VG
b3JHbHlwaEFzY2VudCB8fCBjZWlsZihib3VuZHMubWF4WSgpKSA+IGF2YWlsYWJsZVNwYWNlRm9y
R2x5cGhEZXNjZW50KQotICAgICAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9O
RUVERUQoRmxvd0ZvbnRIYXNPdmVyZmxvd0dseXBoLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlYXNvbnM7Ci19Ci0KLXN0YXRpYyBBdm9p
ZGFuY2VSZWFzb25GbGFncyBjYW5Vc2VGb3JUZXh0KFN0cmluZ1ZpZXcgdGV4dCwgY29uc3QgRm9u
dENhc2NhZGUmIGZvbnRDYXNjYWRlLCBPcHRpb25hbDxmbG9hdD4gbGluZUhlaWdodENvbnN0cmFp
bnQsIGJvb2wgdGV4dElzSnVzdGlmaWVkLCBJbmNsdWRlUmVhc29ucyBpbmNsdWRlUmVhc29ucykK
LXsKLSAgICBpZiAodGV4dC5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGNhblVzZUZvclRleHQo
dGV4dC5jaGFyYWN0ZXJzOCgpLCB0ZXh0Lmxlbmd0aCgpLCBmb250Q2FzY2FkZSwgbGluZUhlaWdo
dENvbnN0cmFpbnQsIHRleHRJc0p1c3RpZmllZCwgaW5jbHVkZVJlYXNvbnMpOwotICAgIHJldHVy
biBjYW5Vc2VGb3JUZXh0KHRleHQuY2hhcmFjdGVyczE2KCksIHRleHQubGVuZ3RoKCksIGZvbnRD
YXNjYWRlLCBsaW5lSGVpZ2h0Q29uc3RyYWludCwgdGV4dElzSnVzdGlmaWVkLCBpbmNsdWRlUmVh
c29ucyk7Ci19Ci0KLXN0YXRpYyBBdm9pZGFuY2VSZWFzb25GbGFncyBjYW5Vc2VGb3JGb250QW5k
VGV4dChjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIEluY2x1ZGVSZWFzb25zIGluY2x1ZGVS
ZWFzb25zKQotewotICAgIEF2b2lkYW5jZVJlYXNvbkZsYWdzIHJlYXNvbnMgPSB7IH07Ci0gICAg
Ly8gV2UgYXNzdW1lIHRoYXQgYWxsIGxpbmVzIGhhdmUgbWV0cmljcyBiYXNlZCBwdXJlbHkgb24g
dGhlIHByaW1hcnkgZm9udC4KLSAgICBjb25zdCBhdXRvJiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsK
LSAgICBhdXRvJiBmb250Q2FzY2FkZSA9IHN0eWxlLmZvbnRDYXNjYWRlKCk7Ci0gICAgaWYgKGZv
bnRDYXNjYWRlLnByaW1hcnlGb250KCkuaXNJbnRlcnN0aXRpYWwoKSkKLSAgICAgICAgU0VUX1JF
QVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SXNNaXNzaW5nUHJpbWFyeUZvbnQsIHJlYXNv
bnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBPcHRpb25hbDxmbG9hdD4gbGluZUhlaWdodENvbnN0
cmFpbnQ7Ci0gICAgaWYgKHN0eWxlLmxpbmVCb3hDb250YWluKCkuY29udGFpbnMoTGluZUJveENv
bnRhaW46OkdseXBocykpCi0gICAgICAgIGxpbmVIZWlnaHRDb25zdHJhaW50ID0gbGluZUhlaWdo
dEZyb21GbG93KGZsb3cpLnRvRmxvYXQoKTsKLSAgICBib29sIGZsb3dJc0p1c3RpZmllZCA9IHN0
eWxlLnRleHRBbGlnbigpID09IFRleHRBbGlnbk1vZGU6Okp1c3RpZnk7Ci0gICAgZm9yIChjb25z
dCBhdXRvJiB0ZXh0UmVuZGVyZXIgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJUZXh0PihmbG93KSkg
ewotICAgICAgICAvLyBGSVhNRTogRG8gbm90IHJldHVybiB1bnRpbCBhZnRlciBjaGVja2luZyBh
bGwgY2hpbGRyZW4uCi0gICAgICAgIGlmICh0ZXh0UmVuZGVyZXIudGV4dCgpLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRJc0Vt
cHR5LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgICAgIGlmICh0ZXh0UmVuZGVyZXIu
aXNDb21iaW5lVGV4dCgpKQotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05F
RURFRChGbG93VGV4dElzQ29tYmluZVRleHQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAg
ICAgICAgaWYgKHRleHRSZW5kZXJlci5pc0NvdW50ZXIoKSkKLSAgICAgICAgICAgIFNFVF9SRUFT
T05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRJc1JlbmRlckNvdW50ZXIsIHJlYXNvbnMs
IGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgaWYgKHRleHRSZW5kZXJlci5pc1F1b3RlKCkpCi0g
ICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dUZXh0SXNSZW5k
ZXJRdW90ZSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgICAgICBpZiAodGV4dFJlbmRl
cmVyLmlzVGV4dEZyYWdtZW50KCkpCi0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5f
SUZfTkVFREVEKEZsb3dUZXh0SXNUZXh0RnJhZ21lbnQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25z
KTsKLSAgICAgICAgaWYgKHRleHRSZW5kZXJlci5pc1NWR0lubGluZVRleHQoKSkKLSAgICAgICAg
ICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRJc1NWR0lubGluZVRl
eHQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgaWYgKCF0ZXh0UmVuZGVyZXIu
Y2FuVXNlU2ltcGxlRm9udENvZGVQYXRoKCkpIHsKLSAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8g
Y2hlY2sgdGhlIGNvZGUgcGF0aCBhdCB0aGlzIHBvaW50LiBXZSBhbHJlYWR5IGtub3cgaXQgY2Fu
J3QgYmUgc2ltcGxlLgotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURF
RChGbG93SGFzQ29tcGxleEZvbnRDb2RlUGF0aCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgVGV4dFJ1biBydW4oU3RyaW5nKHRleHRSZW5k
ZXJlci50ZXh0KCkpKTsKLSAgICAgICAgICAgIHJ1bi5zZXRDaGFyYWN0ZXJTY2FuRm9yQ29kZVBh
dGgoZmFsc2UpOwotICAgICAgICAgICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkuY29kZVBhdGgo
cnVuKSAhPSBGb250Q2FzY2FkZTo6U2ltcGxlKQotICAgICAgICAgICAgICAgIFNFVF9SRUFTT05f
QU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc0NvbXBsZXhGb250Q29kZVBhdGgsIHJlYXNvbnMs
IGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gdGV4dFJlYXNvbnMg
PSBjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJlci5zdHJpbmdWaWV3KCksIGZvbnRDYXNjYWRlLCBs
aW5lSGVpZ2h0Q29uc3RyYWludCwgZmxvd0lzSnVzdGlmaWVkLCBpbmNsdWRlUmVhc29ucyk7Ci0g
ICAgICAgIGlmICh0ZXh0UmVhc29ucyAhPSBOb1JlYXNvbikKLSAgICAgICAgICAgIFNFVF9SRUFT
T05fQU5EX1JFVFVSTl9JRl9ORUVERUQodGV4dFJlYXNvbnMsIHJlYXNvbnMsIGluY2x1ZGVSZWFz
b25zKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlYXNvbnM7Ci19Ci0KLXN0YXRpYyBBdm9pZGFuY2VS
ZWFzb25GbGFncyBjYW5Vc2VGb3JTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEluY2x1
ZGVSZWFzb25zIGluY2x1ZGVSZWFzb25zKQotewotICAgIEF2b2lkYW5jZVJlYXNvbkZsYWdzIHJl
YXNvbnMgPSB7IH07Ci0gICAgaWYgKHN0eWxlLnRleHRPdmVyZmxvdygpID09IFRleHRPdmVyZmxv
dzo6RWxsaXBzaXMpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxv
d0hhc1RleHRPdmVyZmxvdywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmIChzdHls
ZS50ZXh0VW5kZXJsaW5lUG9zaXRpb24oKSAhPSBUZXh0VW5kZXJsaW5lUG9zaXRpb246OkF1dG8g
fHwgIXN0eWxlLnRleHRVbmRlcmxpbmVPZmZzZXQoKS5pc0F1dG8oKSB8fCAhc3R5bGUudGV4dERl
Y29yYXRpb25UaGlja25lc3MoKS5pc0F1dG8oKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVU
VVJOX0lGX05FRURFRChGbG93SGFzVW5zdXBwb3J0ZWRVbmRlcmxpbmVEZWNvcmF0aW9uLCByZWFz
b25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgLy8gTm9uLXZpc2libGUgb3ZlcmZsb3cgc2hvdWxk
IGJlIHByZXR0eSBlYXN5IHRvIHN1cHBvcnQuCi0gICAgaWYgKHN0eWxlLm92ZXJmbG93WCgpICE9
IE92ZXJmbG93OjpWaXNpYmxlIHx8IHN0eWxlLm92ZXJmbG93WSgpICE9IE92ZXJmbG93OjpWaXNp
YmxlKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNPdmVy
Zmxvd05vdFZpc2libGUsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoIXN0eWxl
LmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJO
X0lGX05FRURFRChGbG93SXNOb3RMVFIsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBp
ZiAoIShzdHlsZS5saW5lQm94Q29udGFpbigpLmNvbnRhaW5zKExpbmVCb3hDb250YWluOjpCbG9j
aykpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNMaW5l
Qm94Q29udGFpblByb3BlcnR5LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0
eWxlLndyaXRpbmdNb2RlKCkgIT0gV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tKQotICAgICAgICBT
RVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJc05vdFRvcFRvQm90dG9tLCByZWFz
b25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLmxpbmVCcmVhaygpICE9IExpbmVC
cmVhazo6QXV0bykKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93
SGFzTGluZUJyZWFrLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLnVu
aWNvZGVCaWRpKCkgIT0gVUJOb3JtYWwpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9J
Rl9ORUVERUQoRmxvd0hhc05vbk5vcm1hbFVuaWNvZGVCaURpLCByZWFzb25zLCBpbmNsdWRlUmVh
c29ucyk7Ci0gICAgaWYgKHN0eWxlLnJ0bE9yZGVyaW5nKCkgIT0gT3JkZXI6OkxvZ2ljYWwpCi0g
ICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1JUTE9yZGVyaW5n
LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLmxpbmVBbGlnbigpICE9
IExpbmVBbGlnbjo6Tm9uZSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURF
RChGbG93SGFzTGluZUFsaWduRWRnZXMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBp
ZiAoc3R5bGUubGluZVNuYXAoKSAhPSBMaW5lU25hcDo6Tm9uZSkKLSAgICAgICAgU0VUX1JFQVNP
Tl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzTGluZVNuYXAsIHJlYXNvbnMsIGluY2x1ZGVS
ZWFzb25zKTsKLSAgICBpZiAoc3R5bGUudGV4dEVtcGhhc2lzRmlsbCgpICE9IFRleHRFbXBoYXNp
c0ZpbGw6OkZpbGxlZCB8fCBzdHlsZS50ZXh0RW1waGFzaXNNYXJrKCkgIT0gVGV4dEVtcGhhc2lz
TWFyazo6Tm9uZSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93
SGFzVGV4dEVtcGhhc2lzRmlsbE9yTWFyaywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAg
IGlmIChzdHlsZS50ZXh0U2hhZG93KCkpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9J
Rl9ORUVERUQoRmxvd0hhc1RleHRTaGFkb3csIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAg
ICBpZiAoc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OkZpcnN0TGluZSkpCi0gICAgICAg
IFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1BzZXVkb0ZpcnN0TGluZSwg
cmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmIChzdHlsZS5oYXNQc2V1ZG9TdHlsZShQ
c2V1ZG9JZDo6Rmlyc3RMZXR0ZXIpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZf
TkVFREVEKEZsb3dIYXNQc2V1ZG9GaXJzdExldHRlciwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMp
OwotICAgIGlmIChzdHlsZS5oYXNUZXh0Q29tYmluZSgpKQotICAgICAgICBTRVRfUkVBU09OX0FO
RF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNUZXh0Q29tYmluZSwgcmVhc29ucywgaW5jbHVkZVJl
YXNvbnMpOwotICAgIGlmIChzdHlsZS5iYWNrZ3JvdW5kQ2xpcCgpID09IEZpbGxCb3g6OlRleHQp
Ci0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1RleHRGaWxs
Qm94LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLmJvcmRlckZpdCgp
ID09IEJvcmRlckZpdDo6TGluZXMpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9O
RUVERUQoRmxvd0hhc0JvcmRlckZpdExpbmVzLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0g
ICAgaWYgKHN0eWxlLmxpbmVCcmVhaygpICE9IExpbmVCcmVhazo6QXV0bykKLSAgICAgICAgU0VU
X1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzTm9uQXV0b0xpbmVCcmVhaywgcmVh
c29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmIChzdHlsZS5uYnNwTW9kZSgpICE9IE5CU1BN
b2RlOjpOb3JtYWwpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxv
d0hhc1dlYktpdE5CU1BNb2RlLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgLy8gU3Bl
Y2lhbCBoYW5kbGluZyBvZiB0ZXh0LXNlY3VyaXR5OmRpc2MgaXMgbm90IHlldCBpbXBsZW1lbnRl
ZCBpbiB0aGUgc2ltcGxlIGxpbmUgbGF5b3V0IGNvZGUgcGF0aC4KLSAgICAvLyBTZWUgUmVuZGVy
QmxvY2s6OnVwZGF0ZVNlY3VyaXR5RGlzY0NoYXJhY3RlcnMuCi0gICAgaWYgKHN0eWxlLnRleHRT
ZWN1cml0eSgpICE9IFRleHRTZWN1cml0eTo6Tm9uZSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRf
UkVUVVJOX0lGX05FRURFRChGbG93SGFzVGV4dFNlY3VyaXR5LCByZWFzb25zLCBpbmNsdWRlUmVh
c29ucyk7Ci0gICAgaWYgKHN0eWxlLmh5cGhlbnMoKSA9PSBIeXBoZW5zOjpBdXRvKSB7Ci0gICAg
ICAgIGF1dG8gdGV4dFJlYXNvbnMgPSBjYW5Vc2VGb3JUZXh0KHN0eWxlLmh5cGhlblN0cmluZygp
LCBzdHlsZS5mb250Q2FzY2FkZSgpLCBXVEY6Om51bGxvcHQsIGZhbHNlLCBpbmNsdWRlUmVhc29u
cyk7Ci0gICAgICAgIGlmICh0ZXh0UmVhc29ucyAhPSBOb1JlYXNvbikKLSAgICAgICAgICAgIFNF
VF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQodGV4dFJlYXNvbnMsIHJlYXNvbnMsIGluY2x1
ZGVSZWFzb25zKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlYXNvbnM7Ci19Ci0KLUF2b2lkYW5jZVJl
YXNvbkZsYWdzIGNhblVzZUZvcldpdGhSZWFzb24oY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93
LCBJbmNsdWRlUmVhc29ucyBpbmNsdWRlUmVhc29ucykKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAg
c3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VG
bGFnLCBbXSB7Ci0gICAgICAgIFBBTDo6cmVnaXN0ZXJOb3RpZnlDYWxsYmFjaygiY29tLmFwcGxl
LldlYktpdC5zaG93U2ltcGxlTGluZUxheW91dENvdmVyYWdlIiwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHsgcHJpbnRTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UgfSk7Ci0gICAgICAgIFBBTDo6cmVn
aXN0ZXJOb3RpZnlDYWxsYmFjaygiY29tLmFwcGxlLldlYktpdC5zaG93U2ltcGxlTGluZUxheW91
dFJlYXNvbnMiLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4geyBwcmludFNpbXBsZUxpbmVMYXlvdXRC
bG9ja0xpc3QgfSk7Ci0gICAgICAgIFBBTDo6cmVnaXN0ZXJOb3RpZnlDYWxsYmFjaygiY29tLmFw
cGxlLldlYktpdC50b2dnbGVTaW1wbGVMaW5lTGF5b3V0IiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+
IHsgdG9nZ2xlU2ltcGxlTGluZUxheW91dCB9KTsKLSAgICB9KTsKLSNlbmRpZgotICAgIEF2b2lk
YW5jZVJlYXNvbkZsYWdzIHJlYXNvbnMgPSB7IH07Ci0gICAgaWYgKCFmbG93LnNldHRpbmdzKCku
c2ltcGxlTGluZUxheW91dEVuYWJsZWQoKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJO
X0lGX05FRURFRChGZWF0dXJlSXNEaXNhYmxlZCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwot
ICAgIGlmICghZmxvdy5wYXJlbnQoKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lG
X05FRURFRChGbG93SGFzTm9QYXJlbnQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBp
ZiAoIWZsb3cuZmlyc3RDaGlsZCgpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZf
TkVFREVEKEZsb3dIYXNOb0NoaWxkLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYg
KGZsb3cuZnJhZ21lbnRlZEZsb3dTdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6Tm90SW5zaWRlRnJh
Z21lbnRlZEZsb3cpIHsKLSAgICAgICAgYXV0byogZnJhZ21lbnRlZEZsb3cgPSBmbG93LmVuY2xv
c2luZ0ZyYWdtZW50ZWRGbG93KCk7Ci0gICAgICAgIGlmICghaXM8UmVuZGVyTXVsdGlDb2x1bW5G
bG93PihmcmFnbWVudGVkRmxvdykpCi0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5f
SUZfTkVFREVEKEZsb3dJc0luc2lkZUFOb25NdWx0aUNvbHVtblRocmVhZCwgcmVhc29ucywgaW5j
bHVkZVJlYXNvbnMpOwotICAgICAgICBhdXRvJiBjb2x1bW5UaHJlYWQgPSBkb3duY2FzdDxSZW5k
ZXJNdWx0aUNvbHVtbkZsb3c+KCpmcmFnbWVudGVkRmxvdyk7Ci0gICAgICAgIGlmIChjb2x1bW5U
aHJlYWQucGFyZW50KCkgIT0gJmZsb3cudmlldygpKQotICAgICAgICAgICAgU0VUX1JFQVNPTl9B
TkRfUkVUVVJOX0lGX05FRURFRChNdWx0aUNvbHVtbkZsb3dJc05vdFRvcExldmVsLCByZWFzb25z
LCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgICAgIGlmIChjb2x1bW5UaHJlYWQuaGFzQ29sdW1uU3Bh
bm5lcigpKQotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChNdWx0
aUNvbHVtbkZsb3dIYXNDb2x1bW5TcGFubmVyLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0g
ICAgICAgIGF1dG8mIHN0eWxlID0gZmxvdy5zdHlsZSgpOwotICAgICAgICBpZiAoc3R5bGUudmVy
dGljYWxBbGlnbigpICE9IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lKQotICAgICAgICAgICAgU0VU
X1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChNdWx0aUNvbHVtbkZsb3dWZXJ0aWNhbEFsaWdu
LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgICAgIGlmIChzdHlsZS5pc0Zsb2F0aW5n
KCkpCi0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKE11bHRpQ29s
dW1uRmxvd0lzRmxvYXRpbmcsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICB9Ci0gICAg
aWYgKCFmbG93LmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIFNFVF9SRUFTT05f
QU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc0hvcml6b25hbFdyaXRpbmdNb2RlLCByZWFzb25z
LCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKGZsb3cuaGFzT3V0bGluZSgpKQotICAgICAgICBT
RVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNPdXRsaW5lLCByZWFzb25zLCBp
bmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKGZsb3cuaXNSdWJ5VGV4dCgpIHx8IGZsb3cuaXNSdWJ5
QmFzZSgpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJc1J1
YnksIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoIWZsb3cuc3R5bGUoKS5oYW5n
aW5nUHVuY3R1YXRpb24oKS5pc0VtcHR5KCkpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVS
Tl9JRl9ORUVERUQoRmxvd0hhc0hhbmdpbmdQdW5jdHVhdGlvbiwgcmVhc29ucywgaW5jbHVkZVJl
YXNvbnMpOwotICAgIAotICAgIC8vIFByaW50aW5nIGRvZXMgcGFnaW5hdGlvbiB3aXRob3V0IGEg
ZmxvdyB0aHJlYWQuCi0gICAgaWYgKGZsb3cuZG9jdW1lbnQoKS5wYWdpbmF0ZWQoKSkKLSAgICAg
ICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SXNQYWdpbmF0ZWQsIHJlYXNv
bnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoZmxvdy5maXJzdExpbmVCbG9jaygpKQotICAg
ICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNQc2V1ZG9GaXJzdExp
bmUsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoZmxvdy5pc0Fub255bW91c0Js
b2NrKCkgJiYgZmxvdy5wYXJlbnQoKS0+c3R5bGUoKS50ZXh0T3ZlcmZsb3coKSA9PSBUZXh0T3Zl
cmZsb3c6OkVsbGlwc2lzKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVE
KEZsb3dIYXNUZXh0T3ZlcmZsb3csIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAo
Zmxvdy5wYXJlbnQoKS0+aXNEZXByZWNhdGVkRmxleGlibGVCb3goKSkKLSAgICAgICAgU0VUX1JF
QVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SXNEZXByaWNhdGVkRmxleEJveCwgcmVhc29u
cywgaW5jbHVkZVJlYXNvbnMpOwotICAgIC8vIEZJWE1FOiBQbGFjZWhvbGRlcnMgZG8gc29tZXRo
aW5nIHN0cmFuZ2UuCi0gICAgaWYgKGlzPFJlbmRlclRleHRDb250cm9sPigqZmxvdy5wYXJlbnQo
KSkgJiYgZG93bmNhc3Q8UmVuZGVyVGV4dENvbnRyb2w+KCpmbG93LnBhcmVudCgpKS50ZXh0Rm9y
bUNvbnRyb2xFbGVtZW50KCkucGxhY2Vob2xkZXJFbGVtZW50KCkpCi0gICAgICAgIFNFVF9SRUFT
T05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1BhcmVudElzUGxhY2Vob2xkZXJFbGVtZW50LCBy
ZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudGF0aW9uIG9m
IHdyYXA9aGFyZCBsb29rcyBpbnRvIGxpbmVib3hlcy4KLSAgICBpZiAoZmxvdy5wYXJlbnQoKS0+
aXNUZXh0QXJlYSgpICYmIGZsb3cucGFyZW50KCktPmVsZW1lbnQoKS0+aGFzQXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OndyYXBBdHRyKSkKLSAgICAgICAgU0VUX1JF
QVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93UGFyZW50SXNUZXh0QXJlYVdpdGhXcmFwcGlu
ZywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIC8vIFRoaXMgY3VycmVudGx5IGNvdmVy
cyA8YmxvY2tmbG93PiN0ZXh0PC9ibG9ja2Zsb3c+LCA8YmxvY2tmbG93PiN0ZXh0PGJyPjwvYmxv
Y2tmbG93PiBhbmQgbXV0aXBsZSAoc2libGluZykgUmVuZGVyVGV4dCBjYXNlcy4KLSAgICAvLyBU
aGUgPGJsb2NrZmxvdz48aW5saW5lPiN0ZXh0PC9pbmxpbmU+PC9ibG9ja2Zsb3c+IGNhc2UgaXMg
YWxzbyBwb3B1bGFyIGFuZCBzaG91bGQgYmUgcmVsYXRpdmVseSBlYXN5IHRvIGNvdmVyLgotICAg
IGZvciAoY29uc3QgYXV0byogY2hpbGQgPSBmbG93LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7KSB7Ci0g
ICAgICAgIGlmIChjaGlsZC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hs
aWdodFN0YXRlOjpOb25lKQotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05F
RURFRChGbG93Q2hpbGRJc1NlbGVjdGVkLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAg
ICAgIGlmIChpczxSZW5kZXJUZXh0PigqY2hpbGQpKSB7Ci0gICAgICAgICAgICBjb25zdCBhdXRv
JiByZW5kZXJUZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmNoaWxkKTsKLSAgICAgICAgICAg
IGlmIChyZW5kZXJUZXh0LnRleHROb2RlKCkgJiYgIXJlbmRlclRleHQuZG9jdW1lbnQoKS5tYXJr
ZXJzKCkubWFya2Vyc0ZvcigqcmVuZGVyVGV4dC50ZXh0Tm9kZSgpKS5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SW5jbHVkZXNE
b2N1bWVudE1hcmtlcnMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgICAgIGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoaXM8UmVuZGVyTGluZUJyZWFrPihjaGlsZCkgJiYgIWRvd25jYXN0
PFJlbmRlckxpbmVCcmVhaz4oKmNoaWxkKS5pc1dCUigpICYmIGNoaWxkLT5zdHlsZSgpLmNsZWFy
KCkgPT0gQ2xlYXI6Ok5vbmUpIHsKLSAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBTRVRfUkVB
U09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNOb25TdXBwb3J0ZWRDaGlsZCwgcmVhc29u
cywgaW5jbHVkZVJlYXNvbnMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgYXV0byBzdHls
ZVJlYXNvbnMgPSBjYW5Vc2VGb3JTdHlsZShmbG93LnN0eWxlKCksIGluY2x1ZGVSZWFzb25zKTsK
LSAgICBpZiAoc3R5bGVSZWFzb25zICE9IE5vUmVhc29uKQotICAgICAgICBTRVRfUkVBU09OX0FO
RF9SRVRVUk5fSUZfTkVFREVEKHN0eWxlUmVhc29ucywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMp
OwotICAgIC8vIFdlIGNhbid0IHVzZSB0aGUgY29kZSBwYXRoIGlmIGFueSBsaW5lcyB3b3VsZCBu
ZWVkIHRvIGJlIHNoaWZ0ZWQgYmVsb3cgZmxvYXRzLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZG9uJ3Qg
a2VlcCBwZXItbGluZSB5IGNvb3JkaW5hdGVzLgotICAgIGlmIChmbG93LmNvbnRhaW5zRmxvYXRz
KCkpIHsKLSAgICAgICAgZmxvYXQgbWluaW11bVdpZHRoTmVlZGVkID0gc3RkOjpudW1lcmljX2xp
bWl0czxmbG9hdD46Om1heCgpOwotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRleHRSZW5kZXJl
ciA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlclRleHQ+KGZsb3cpKSB7Ci0gICAgICAgICAgICBtaW5p
bXVtV2lkdGhOZWVkZWQgPSBzdGQ6Om1pbihtaW5pbXVtV2lkdGhOZWVkZWQsIHRleHRSZW5kZXJl
ci5taW5Mb2dpY2FsV2lkdGgoKSk7Ci0KLSAgICAgICAgICAgIGZvciAoYXV0byYgZmxvYXRpbmdP
YmplY3QgOiAqZmxvdy5mbG9hdGluZ09iamVjdFNldCgpKSB7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKGZsb2F0aW5nT2JqZWN0KTsKLSAgICAgICAgICAgICAgICAvLyBpZiBhIGZsb2F0IGhhcyBh
IHNoYXBlLCB3ZSBjYW5ub3QgdGVsbCBpZiBjb250ZW50IHdpbGwgbmVlZCB0byBiZSBzaGlmdGVk
IHVudGlsIGFmdGVyIHdlIGxheSBpdCBvdXQsCi0gICAgICAgICAgICAgICAgLy8gc2luY2UgdGhl
IGFtb3VudCBvZiBzcGFjZSBpcyBub3QgdW5pZm9ybSBmb3IgdGhlIGhlaWdodCBvZiB0aGUgZmxv
YXQuCi0gICAgICAgICAgICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLnNoYXBl
T3V0c2lkZUluZm8oKSkKLSAgICAgICAgICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJO
X0lGX05FRURFRChGbG93SGFzVW5zdXBwb3J0ZWRGbG9hdCwgcmVhc29ucywgaW5jbHVkZVJlYXNv
bnMpOwotICAgICAgICAgICAgICAgIGZsb2F0IGF2YWlsYWJsZVdpZHRoID0gZmxvdy5hdmFpbGFi
bGVMb2dpY2FsV2lkdGhGb3JMaW5lKGZsb2F0aW5nT2JqZWN0LT55KCksIERvTm90SW5kZW50VGV4
dCk7Ci0gICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZVdpZHRoIDwgbWluaW11bVdpZHRoTmVl
ZGVkKQotICAgICAgICAgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVE
KEZsb3dIYXNVbnN1cHBvcnRlZEZsb2F0LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYXV0byBmb250QW5kVGV4dFJlYXNvbnMg
PSBjYW5Vc2VGb3JGb250QW5kVGV4dChmbG93LCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKGZv
bnRBbmRUZXh0UmVhc29ucyAhPSBOb1JlYXNvbikKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVU
VVJOX0lGX05FRURFRChmb250QW5kVGV4dFJlYXNvbnMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25z
KTsKLSAgICByZXR1cm4gcmVhc29uczsKLX0KLQotYm9vbCBjYW5Vc2VGb3IoY29uc3QgUmVuZGVy
QmxvY2tGbG93JiBmbG93KQotewotICAgIHJldHVybiBjYW5Vc2VGb3JXaXRoUmVhc29uKGZsb3cs
IEluY2x1ZGVSZWFzb25zOjpGaXJzdCkgPT0gTm9SZWFzb247Ci19Ci0KLWJvb2wgY2FuVXNlRm9y
QWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrQ29udGFpbmVyLCBT
dHlsZURpZmZlcmVuY2UgZGlmZikKLXsKLSAgICBzd2l0Y2ggKGRpZmYpIHsKLSAgICBjYXNlIFN0
eWxlRGlmZmVyZW5jZTo6RXF1YWw6Ci0gICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6OlJlY29tcG9z
aXRlTGF5ZXI6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgU3R5bGVEaWZmZXJlbmNl
OjpSZXBhaW50OgotICAgIGNhc2UgU3R5bGVEaWZmZXJlbmNlOjpSZXBhaW50SWZUZXh0T3JCb3Jk
ZXJPck91dGxpbmU6Ci0gICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6OlJlcGFpbnRMYXllcjoKLSAg
ICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGRvIGEgbW9yZSBmb2N1c2VkIHN0eWxlIGNoZWNrIGJ5
IG1hdGNoaW5nIFJlbmRlcmVyU3R5bGU6OmNoYW5nZVJlcXVpcmVzUmVwYWludCZjby4KLSAgICAg
ICAgcmV0dXJuIGNhblVzZUZvclN0eWxlKGJsb2NrQ29udGFpbmVyLnN0eWxlKCksIEluY2x1ZGVS
ZWFzb25zOjpGaXJzdCkgPT0gTm9SZWFzb247Ci0gICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6Okxh
eW91dFBvc2l0aW9uZWRNb3ZlbWVudE9ubHk6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNh
c2UgU3R5bGVEaWZmZXJlbmNlOjpTaW1wbGlmaWVkTGF5b3V0OgotICAgIGNhc2UgU3R5bGVEaWZm
ZXJlbmNlOjpTaW1wbGlmaWVkTGF5b3V0QW5kUG9zaXRpb25lZE1vdmVtZW50OgotICAgICAgICBy
ZXR1cm4gY2FuVXNlRm9yU3R5bGUoYmxvY2tDb250YWluZXIuc3R5bGUoKSwgSW5jbHVkZVJlYXNv
bnM6OkZpcnN0KSA9PSBOb1JlYXNvbjsKLSAgICBjYXNlIFN0eWxlRGlmZmVyZW5jZTo6TGF5b3V0
OgotICAgIGNhc2UgU3R5bGVEaWZmZXJlbmNlOjpOZXdTdHlsZToKLSAgICAgICAgcmV0dXJuIGNh
blVzZUZvcihibG9ja0NvbnRhaW5lcik7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBjYW5Vc2VGb3IoYmxvY2tDb250YWluZXIpOwotfQotCi1zdGF0aWMgdm9p
ZCByZXZlcnRBbGxSdW5zT25DdXJyZW50TGluZShMYXlvdXQ6OlJ1blZlY3RvciYgcnVucykKLXsK
LSAgICB3aGlsZSAoIXJ1bnMuaXNFbXB0eSgpICYmICFydW5zLmxhc3QoKS5pc0VuZE9mTGluZSkK
LSAgICAgICAgcnVucy5yZW1vdmVMYXN0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJldmVydFJ1bnMo
TGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIHVuc2lnbmVkIHBvc2l0aW9uVG9SZXZlcnRUbywgZmxv
YXQgd2lkdGgpCi17Ci0gICAgd2hpbGUgKHJ1bnMuc2l6ZSgpKSB7Ci0gICAgICAgIGF1dG8mIGxh
c3RSdW4gPSBydW5zLmxhc3QoKTsKLSAgICAgICAgaWYgKGxhc3RSdW4uZW5kIDw9IHBvc2l0aW9u
VG9SZXZlcnRUbykKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAobGFzdFJ1bi5zdGFy
dCA+PSBwb3NpdGlvblRvUmV2ZXJ0VG8pIHsKLSAgICAgICAgICAgIC8vIFJldmVydCB0aGlzIHJ1
biBjb21wbGV0ZWx5LgotICAgICAgICAgICAgd2lkdGggLT0gKGxhc3RSdW4ubG9naWNhbFJpZ2h0
IC0gbGFzdFJ1bi5sb2dpY2FsTGVmdCk7Ci0gICAgICAgICAgICBydW5zLnJlbW92ZUxhc3QoKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxhc3RSdW4ubG9naWNhbFJpZ2h0IC09IHdp
ZHRoOwotICAgICAgICAgICAgd2lkdGggPSAwOwotICAgICAgICAgICAgbGFzdFJ1bi5lbmQgPSBw
b3NpdGlvblRvUmV2ZXJ0VG87Ci0gICAgICAgICAgICAvLyBQYXJ0aWFsIHJlbW92YWwuCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotY2xhc3MgTGluZVN0YXRlIHsK
LXB1YmxpYzoKLSAgICB2b2lkIHNldEF2YWlsYWJsZVdpZHRoKGZsb2F0IHdpZHRoKSB7IG1fYXZh
aWxhYmxlV2lkdGggPSB3aWR0aDsgfQotICAgIHZvaWQgc2V0Q29sbGFwZWRXaGl0ZXNwYWNlV2lk
dGgoZmxvYXQgd2lkdGgpIHsgbV9jb2xsYXBzZWRXaGl0ZXNwYWNlV2lkdGggPSB3aWR0aDsgfQot
ICAgIHZvaWQgc2V0TG9naWNhbExlZnRPZmZzZXQoZmxvYXQgb2Zmc2V0KSB7IG1fbG9naWNhbExl
ZnRPZmZzZXQgPSBvZmZzZXQ7IH0KLSAgICB2b2lkIHNldE92ZXJmbG93ZWRGcmFnbWVudChjb25z
dCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudCkgeyBtX292ZXJm
bG93ZWRGcmFnbWVudCA9IGZyYWdtZW50OyB9Ci0gICAgdm9pZCBzZXROZWVkc0FsbEZyYWdtZW50
cygpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1fZnJhZ21lbnRzKTsKLSAgICAgICAgbV9mcmFn
bWVudHMuZW1wbGFjZSgpOwotICAgIH0KLSAgICB2b2lkIHNldEh5cGhlbmF0aW9uRGlzYWJsZWQo
KSB7IG1faHlwaGVuYXRpb25EaXNhYmxlZCA9IHRydWU7IH0KLSAgICBib29sIGlzSHlwaGVuYXRp
b25EaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faHlwaGVuYXRpb25EaXNhYmxlZDsgfQotCi0g
ICAgZmxvYXQgYXZhaWxhYmxlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2F2YWlsYWJsZVdpZHRo
OyB9Ci0gICAgZmxvYXQgbG9naWNhbExlZnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2lj
YWxMZWZ0T2Zmc2V0OyB9Ci0gICAgY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFn
bWVudCYgb3ZlcmZsb3dlZEZyYWdtZW50KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvd2VkRnJh
Z21lbnQ7IH0KLSAgICBib29sIGhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbGFzdEZyYWdtZW50LnR5cGUoKSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdt
ZW50OjpXaGl0ZXNwYWNlICYmIG1fbGFzdEZyYWdtZW50Lmxlbmd0aCgpID4gMDsgfQotICAgIGJv
b2wgaGFzV2hpdGVzcGFjZUZyYWdtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFdoaXRlc3Bh
Y2VGcmFnbWVudCAhPSBXVEY6Om51bGxvcHQ7IH0KLSAgICBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6
VGV4dEZyYWdtZW50IGxhc3RGcmFnbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEZyYWdtZW50
OyB9Ci0gICAgYm9vbCBpc1doaXRlc3BhY2VPbmx5KCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGlu
Z1doaXRlc3BhY2VXaWR0aCAmJiBtX3J1bnNXaWR0aCA9PSBtX3RyYWlsaW5nV2hpdGVzcGFjZVdp
ZHRoOyB9Ci0gICAgYm9vbCBmaXRzKGZsb2F0IGV4dHJhKSBjb25zdCB7IHJldHVybiBtX2F2YWls
YWJsZVdpZHRoID49IG1fcnVuc1dpZHRoICsgZXh0cmE7IH0KLSAgICBib29sIGZpcnN0Q2hhcmFj
dGVyRml0cygpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RDaGFyYWN0ZXJGaXRzOyB9Ci0gICAgZmxv
YXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3J1bnNXaWR0aDsgfQotICAgIHN0ZDo6cGFpcjx1
bnNpZ25lZCwgYm9vbD4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCh1bnNpZ25lZCBmcm9tLCB1
bnNpZ25lZCB0bykgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2ZyYWdtZW50cyk7Ci0g
ICAgICAgIC8vIGxpbmVicmVhayBydW5zIGFyZSBzcGVjaWFsLgotICAgICAgICBpZiAoZnJvbSA9
PSB0bykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcigwLCBmYWxzZSk7Ci0gICAg
ICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSAwOwotICAgICAgICBhdXRv
IHByZXZpb3VzRnJhZ21lbnRUeXBlID0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVu
dDo6Q29udGVudEVuZDsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBmcmFnbWVudCA6ICptX2Zy
YWdtZW50cykgewotICAgICAgICAgICAgaWYgKGZyYWdtZW50LmVuZCgpIDw9IGZyb20pCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBhdXRvIGN1cnJlbnRGcmFnbWVudFR5
cGUgPSBmcmFnbWVudC50eXBlKCk7Ci0gICAgICAgICAgICBhdXRvIGV4cGFuc2lvbk9wcG9ydHVu
aXR5ID0gdGhpcy0+ZXhwYW5zaW9uT3Bwb3J0dW5pdHkoY3VycmVudEZyYWdtZW50VHlwZSwgcHJl
dmlvdXNGcmFnbWVudFR5cGUpOwotICAgICAgICAgICAgaWYgKGV4cGFuc2lvbk9wcG9ydHVuaXR5
KQotICAgICAgICAgICAgICAgICsrZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsKLSAgICAgICAg
ICAgIHByZXZpb3VzRnJhZ21lbnRUeXBlID0gY3VycmVudEZyYWdtZW50VHlwZTsKLSAgICAgICAg
ICAgIGlmIChmcmFnbWVudC5lbmQoKSA+PSB0bykKLSAgICAgICAgICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3BhaXIoZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCwgZXhwYW5zaW9uT3Bwb3J0dW5p
dHkpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm4gc3RkOjptYWtlX3BhaXIoZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCwgZmFsc2UpOwot
ICAgIH0KLQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIW1f
bGFzdEZyYWdtZW50LmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICBpZiAoIW1fbGFzdENvbXBsZXRlRnJhZ21lbnQuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gbV9sYXN0RnJhZ21lbnQub3ZlcmxhcHNUb05leHRS
ZW5kZXJlcigpOwotICAgIH0KLQotICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZW5kUG9zaXRp
b25Gb3JDb2xsYXBzZWRGcmFnbWVudChjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZy
YWdtZW50JiBmcmFnbWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmcmFnbWVudC5pc0NvbGxh
cHNlZCgpID8gZnJhZ21lbnQuc3RhcnQoKSArIDEgOiBmcmFnbWVudC5lbmQoKTsKLSAgICB9Ci0K
LSAgICB2b2lkIGFwcGVuZEZyYWdtZW50QW5kQ3JlYXRlUnVuSWZOZWVkZWQoY29uc3QgVGV4dEZy
YWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCYgZnJhZ21lbnQsIExheW91dDo6UnVuVmVjdG9y
JiBydW5zKQotICAgIHsKLSAgICAgICAgLy8gQWRqdXN0IGVuZCBwb3NpdGlvbiB3aGlsZSBjb2xs
YXBzaW5nLgotICAgICAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IGVuZFBvc2l0aW9uRm9yQ29s
bGFwc2VkRnJhZ21lbnQoZnJhZ21lbnQpOwotICAgICAgICAvLyBOZXcgbGluZSBuZWVkcyBuZXcg
cnVuLgotICAgICAgICBpZiAoIW1fcnVuc1dpZHRoKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1f
dW5jb21wbGV0ZWRXaWR0aCk7Ci0gICAgICAgICAgICBydW5zLmFwcGVuZChSdW4oZnJhZ21lbnQu
c3RhcnQoKSwgZW5kUG9zaXRpb24sIG1fcnVuc1dpZHRoLCBtX3J1bnNXaWR0aCArIGZyYWdtZW50
LndpZHRoKCksIGZhbHNlLCBmcmFnbWVudC5oYXNIeXBoZW4oKSwgZnJhZ21lbnQuaXNMaW5lQnJl
YWsoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQWR2YW5jZSBsYXN0IGNv
bXBsZXRlZCBmcmFnbWVudCB3aGVuIHRoZSBwcmV2aW91cyBmcmFnbWVudCBpcyBhbGwgc2V0IChp
bmNsdWRpbmcgbXVsdGlwbGUgcGFydHMgYWNyb3NzIHJlbmRlcmVycykKLSAgICAgICAgICAgIGlm
ICgobV9sYXN0RnJhZ21lbnQudHlwZSgpICE9IGZyYWdtZW50LnR5cGUoKSkgfHwgIW1fbGFzdEZy
YWdtZW50Lm92ZXJsYXBzVG9OZXh0UmVuZGVyZXIoKSkgewotICAgICAgICAgICAgICAgIG1fbGFz
dENvbXBsZXRlRnJhZ21lbnQgPSBtX2xhc3RGcmFnbWVudDsKLSAgICAgICAgICAgICAgICBtX3Vu
Y29tcGxldGVkV2lkdGggPSBmcmFnbWVudC53aWR0aCgpOwotICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgbV91bmNvbXBsZXRlZFdpZHRoICs9IGZyYWdtZW50LndpZHRoKCk7Ci0g
ICAgICAgICAgICAvLyBDb2xsYXBzZSBuZWlnaGJvdXJpbmcgd2hpdGVzcGFjZSwgaWYgdGhleSBh
cmUgYWNyb3NzIG11bHRpcGxlIHJlbmRlcmVycyBhbmQgYXJlIG5vdCBjb2xsYXBzZWQgeWV0Lgot
ICAgICAgICAgICAgaWYgKG1fbGFzdEZyYWdtZW50LmlzQ29sbGFwc2libGUoKSAmJiBmcmFnbWVu
dC5pc0NvbGxhcHNpYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9sYXN0RnJhZ21l
bnQuaXNMYXN0SW5SZW5kZXJlcigpKTsKLSAgICAgICAgICAgICAgICBpZiAoIW1fbGFzdEZyYWdt
ZW50LmlzQ29sbGFwc2VkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTGluZSB3aWR0aCBu
ZWVkcyB0byBiZSBhZGp1c3RlZCBzbyB0aGF0IG5vdyBpdCB0YWtlcyBjb2xsYXBzaW5nIGludG8g
Y29uc2lkZXJhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgbV9ydW5zV2lkdGggLT0gKG1fbGFz
dEZyYWdtZW50LndpZHRoKCkgLSBtX2NvbGxhcHNlZFdoaXRlc3BhY2VXaWR0aCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaXMgY29sbGFwc2Vk
IGNvbXBsZXRlbHkuIE5vIHJ1biBpcyBuZWVkZWQuCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgUnVuJiBsYXN0UnVuID0gcnVucy5sYXN0KCk7Ci0g
ICAgICAgICAgICBpZiAobV9sYXN0RnJhZ21lbnQuaXNMYXN0SW5SZW5kZXJlcigpIHx8IG1fbGFz
dEZyYWdtZW50LmlzQ29sbGFwc2VkKCkgfHwgZnJhZ21lbnQuaXNMaW5lQnJlYWsoKSB8fCBsYXN0
UnVuLmlzTGluZUJyZWFrKQotICAgICAgICAgICAgICAgIHJ1bnMuYXBwZW5kKFJ1bihmcmFnbWVu
dC5zdGFydCgpLCBlbmRQb3NpdGlvbiwgbV9ydW5zV2lkdGgsIG1fcnVuc1dpZHRoICsgZnJhZ21l
bnQud2lkdGgoKSwgZmFsc2UsIGZyYWdtZW50Lmhhc0h5cGhlbigpLCBmcmFnbWVudC5pc0xpbmVC
cmVhaygpKSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBsYXN0UnVuLmVu
ZCA9IGVuZFBvc2l0aW9uOwotICAgICAgICAgICAgICAgIGxhc3RSdW4ubG9naWNhbFJpZ2h0ICs9
IGZyYWdtZW50LndpZHRoKCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFsYXN0UnVuLmhhc0h5
cGhlbik7Ci0gICAgICAgICAgICAgICAgbGFzdFJ1bi5oYXNIeXBoZW4gPSBmcmFnbWVudC5oYXNI
eXBoZW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtX3J1bnNXaWR0aCAr
PSBmcmFnbWVudC53aWR0aCgpOwotICAgICAgICBtX2xhc3RGcmFnbWVudCA9IGZyYWdtZW50Owot
ICAgICAgICBpZiAobV9mcmFnbWVudHMpCi0gICAgICAgICAgICAoKm1fZnJhZ21lbnRzKS5hcHBl
bmQoZnJhZ21lbnQpOwotCi0gICAgICAgIGlmIChmcmFnbWVudC50eXBlKCkgPT0gVGV4dEZyYWdt
ZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6V2hpdGVzcGFjZSkgewotICAgICAgICAgICAgbV90
cmFpbGluZ1doaXRlc3BhY2VXaWR0aCArPSBmcmFnbWVudC53aWR0aCgpOwotICAgICAgICAgICAg
bV9sYXN0V2hpdGVzcGFjZUZyYWdtZW50ID0gZnJhZ21lbnQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoID0gMDsKLSAgICAgICAgICAgIG1f
bGFzdE5vbldoaXRlc3BhY2VGcmFnbWVudCA9IGZyYWdtZW50OwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCFtX2ZpcnN0Q2hhcmFjdGVyRml0cykKLSAgICAgICAgICAgIG1fZmlyc3RDaGFyYWN0
ZXJGaXRzID0gZnJhZ21lbnQuc3RhcnQoKSArIDEgPiBlbmRQb3NpdGlvbiB8fCBtX3J1bnNXaWR0
aCA8PSBtX2F2YWlsYWJsZVdpZHRoOwotICAgIH0KLQotICAgIFRleHRGcmFnbWVudEl0ZXJhdG9y
OjpUZXh0RnJhZ21lbnQgcmV2ZXJ0VG9MYXN0Q29tcGxldGVGcmFnbWVudChMYXlvdXQ6OlJ1blZl
Y3RvciYgcnVucykKLSAgICB7Ci0gICAgICAgIGlmICghbV91bmNvbXBsZXRlZFdpZHRoKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQobV9sYXN0RnJhZ21lbnQgPT0gbV9sYXN0Q29tcGxldGVGcmFnbWVu
dCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9sYXN0RnJhZ21lbnQ7Ci0gICAgICAgIH0KLSAgICAg
ICAgQVNTRVJUKG1fbGFzdEZyYWdtZW50LmlzVmFsaWQoKSk7Ci0gICAgICAgIG1fcnVuc1dpZHRo
IC09IG1fdW5jb21wbGV0ZWRXaWR0aDsKLSAgICAgICAgcmV2ZXJ0UnVucyhydW5zLCBlbmRQb3Np
dGlvbkZvckNvbGxhcHNlZEZyYWdtZW50KG1fbGFzdENvbXBsZXRlRnJhZ21lbnQpLCBtX3VuY29t
cGxldGVkV2lkdGgpOwotICAgICAgICBtX3VuY29tcGxldGVkV2lkdGggPSAwOwotICAgICAgICBB
U1NFUlQobV9sYXN0Q29tcGxldGVGcmFnbWVudC5pc1ZhbGlkKCkpOwotICAgICAgICByZXR1cm4g
bV9sYXN0Q29tcGxldGVGcmFnbWVudDsKLSAgICB9Ci0KLSAgICB2b2lkIHJlbW92ZVRyYWlsaW5n
V2hpdGVzcGFjZShMYXlvdXQ6OlJ1blZlY3RvciYgcnVucykKLSAgICB7Ci0gICAgICAgIGlmICgh
aGFzVHJhaWxpbmdXaGl0ZXNwYWNlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlm
IChtX2xhc3ROb25XaGl0ZXNwYWNlRnJhZ21lbnQpIHsKLSAgICAgICAgICAgIGF1dG8gbmVlZHNS
ZXZlcnRpbmcgPSBtX2xhc3ROb25XaGl0ZXNwYWNlRnJhZ21lbnQtPmVuZCgpICE9IG1fbGFzdEZy
YWdtZW50LmVuZCgpOwotICAgICAgICAgICAgLy8gVHJhaWxpbmcgd2hpdGVzcGFjZSBmcmFnbWVu
dCBtaWdodCBhY3R1YWxseSBoYXZlIHplcm8gbGVuZ3RoLgotICAgICAgICAgICAgQVNTRVJUKG5l
ZWRzUmV2ZXJ0aW5nIHx8ICFtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKTsKLSAgICAgICAgICAg
IGlmIChuZWVkc1JldmVydGluZykgewotICAgICAgICAgICAgICAgIHJldmVydFJ1bnMocnVucywg
bV9sYXN0Tm9uV2hpdGVzcGFjZUZyYWdtZW50LT5lbmQoKSwgbV90cmFpbGluZ1doaXRlc3BhY2VX
aWR0aCk7Ci0gICAgICAgICAgICAgICAgbV9ydW5zV2lkdGggLT0gbV90cmFpbGluZ1doaXRlc3Bh
Y2VXaWR0aDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNl
V2lkdGggPSAwOwotICAgICAgICAgICAgbV9sYXN0RnJhZ21lbnQgPSAqbV9sYXN0Tm9uV2hpdGVz
cGFjZUZyYWdtZW50OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8v
IFRoaXMgbGluZSBpcyBhbGwgd2hpdGVzcGFjZS4KLSAgICAgICAgcmV2ZXJ0QWxsUnVuc09uQ3Vy
cmVudExpbmUocnVucyk7Ci0gICAgICAgIG1fcnVuc1dpZHRoID0gMDsKLSAgICAgICAgbV90cmFp
bGluZ1doaXRlc3BhY2VXaWR0aCA9IDA7Ci0gICAgICAgIC8vIEZJWE1FOiBNYWtlIG1fbGFzdEZy
YWdtZW50IG9wdGlvbmFsLgotICAgICAgICBtX2xhc3RGcmFnbWVudCA9IFRleHRGcmFnbWVudEl0
ZXJhdG9yOjpUZXh0RnJhZ21lbnQoKTsKLSAgICB9Ci0KLSAgICBmbG9hdCB0cmFpbGluZ1doaXRl
c3BhY2VXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGg7IH0K
LQotcHJpdmF0ZToKLSAgICBib29sIGV4cGFuc2lvbk9wcG9ydHVuaXR5KFRleHRGcmFnbWVudEl0
ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OlR5cGUgY3VycmVudEZyYWdtZW50VHlwZSwgVGV4dEZyYWdt
ZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6VHlwZSBwcmV2aW91c0ZyYWdtZW50VHlwZSkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAoY3VycmVudEZyYWdtZW50VHlwZSA9PSBUZXh0RnJh
Z21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlCi0gICAgICAgICAgICB8fCAo
Y3VycmVudEZyYWdtZW50VHlwZSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50
OjpOb25XaGl0ZXNwYWNlICYmIHByZXZpb3VzRnJhZ21lbnRUeXBlID09IFRleHRGcmFnbWVudEl0
ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6Ok5vbldoaXRlc3BhY2UpKTsKLSAgICB9Ci0KLSAgICBmbG9h
dCBtX2F2YWlsYWJsZVdpZHRoIHsgMCB9OwotICAgIGZsb2F0IG1fbG9naWNhbExlZnRPZmZzZXQg
eyAwIH07Ci0gICAgZmxvYXQgbV9ydW5zV2lkdGggeyAwIH07Ci0gICAgVGV4dEZyYWdtZW50SXRl
cmF0b3I6OlRleHRGcmFnbWVudCBtX292ZXJmbG93ZWRGcmFnbWVudDsKLSAgICBUZXh0RnJhZ21l
bnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IG1fbGFzdEZyYWdtZW50OwotICAgIE9wdGlvbmFsPFRl
eHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ+IG1fbGFzdE5vbldoaXRlc3BhY2VGcmFn
bWVudDsKLSAgICBPcHRpb25hbDxUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50PiBt
X2xhc3RXaGl0ZXNwYWNlRnJhZ21lbnQ7Ci0gICAgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRG
cmFnbWVudCBtX2xhc3RDb21wbGV0ZUZyYWdtZW50OwotICAgIGZsb2F0IG1fdW5jb21wbGV0ZWRX
aWR0aCB7IDAgfTsKLSAgICBmbG9hdCBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoIHsgMCB9OyAv
LyBVc2UgdGhpcyB0byByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZSB3aXRob3V0IHJlLW1lc3Vy
aW5nIHRoZSB0ZXh0LgotICAgIGZsb2F0IG1fY29sbGFwc2VkV2hpdGVzcGFjZVdpZHRoIHsgMCB9
OwotICAgIC8vIEhhdmluZyBvbmUgY2hhcmFjdGVyIG9uIHRoZSBsaW5lIGRvZXMgbm90IG5lY2Vz
c2FyaWx5IG1lYW4gaXQgYWN0dWFsbHkgZml0cy4KLSAgICAvLyBGaXJzdCBjaGFyYWN0ZXIgb2Yg
dGhlIGZpcnN0IGZyYWdtZW50IG1pZ2h0IGJlIGZvcmNlZCBvbiB0byB0aGUgY3VycmVudCBsaW5l
IGV2ZW4gaWYgaXQgZG9lcyBub3QgZml0LgotICAgIGJvb2wgbV9maXJzdENoYXJhY3RlckZpdHMg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9oeXBoZW5hdGlvbkRpc2FibGVkIHsgZmFsc2UgfTsKLSAg
ICBPcHRpb25hbDxWZWN0b3I8VGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCwgMzA+
PiBtX2ZyYWdtZW50czsKLX07Ci0KLXN0YXRpYyBmbG9hdCBjb21wdXRlTGluZUxlZnQoY29uc3Qg
TGluZVN0YXRlJiBsaW5lLCBUZXh0QWxpZ25Nb2RlIHRleHRBbGlnbiwgZmxvYXQmIGhhbmdpbmdX
aGl0ZXNwYWNlV2lkdGgpCi17Ci0gICAgZmxvYXQgdG90YWxXaWR0aCA9IGxpbmUud2lkdGgoKSAt
IGhhbmdpbmdXaGl0ZXNwYWNlV2lkdGg7Ci0gICAgZmxvYXQgcmVtYWluaW5nV2lkdGggPSBsaW5l
LmF2YWlsYWJsZVdpZHRoKCkgLSB0b3RhbFdpZHRoOwotICAgIGZsb2F0IGxlZnQgPSBsaW5lLmxv
Z2ljYWxMZWZ0T2Zmc2V0KCk7Ci0gICAgc3dpdGNoICh0ZXh0QWxpZ24pIHsKLSAgICBjYXNlIFRl
eHRBbGlnbk1vZGU6OkxlZnQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0Ogot
ICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6U3RhcnQ6Ci0gICAgICAgIGhhbmdpbmdXaGl0ZXNwYWNl
V2lkdGggPSBzdGQ6Om1heCgwLmYsIHN0ZDo6bWluKGhhbmdpbmdXaGl0ZXNwYWNlV2lkdGgsIHJl
bWFpbmluZ1dpZHRoKSk7Ci0gICAgICAgIHJldHVybiBsZWZ0OwotICAgIGNhc2UgVGV4dEFsaWdu
TW9kZTo6UmlnaHQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodDoKLSAgICBj
YXNlIFRleHRBbGlnbk1vZGU6OkVuZDoKLSAgICAgICAgaGFuZ2luZ1doaXRlc3BhY2VXaWR0aCA9
IDA7Ci0gICAgICAgIHJldHVybiBsZWZ0ICsgc3RkOjptYXg8ZmxvYXQ+KHJlbWFpbmluZ1dpZHRo
LCAwKTsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRlcjoKLSAgICBjYXNlIFRleHRBbGln
bk1vZGU6OldlYktpdENlbnRlcjoKLSAgICAgICAgaGFuZ2luZ1doaXRlc3BhY2VXaWR0aCA9IHN0
ZDo6bWF4KDAuZiwgc3RkOjptaW4oaGFuZ2luZ1doaXRlc3BhY2VXaWR0aCwgKHJlbWFpbmluZ1dp
ZHRoICsgMSkgLyAyKSk7Ci0gICAgICAgIHJldHVybiBsZWZ0ICsgc3RkOjptYXg8ZmxvYXQ+KHJl
bWFpbmluZ1dpZHRoIC8gMiwgMCk7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5Ogot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgYm9vbCBw
cmVXcmFwKGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpTdHlsZSYgc3R5bGUpCi17Ci0gICAg
cmV0dXJuIHN0eWxlLndyYXBMaW5lcyAmJiAhc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlICYmICFz
dHlsZS5icmVha1NwYWNlczsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlTGluZUNvbnN0cmFpbnMo
Y29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBMaW5lU3RhdGUmIGxpbmUsIGNvbnN0IExpbmVT
dGF0ZSYgcHJldmlvdXNMaW5lLCB1bnNpZ25lZCYgbnVtYmVyT2ZQcmVjZWRpbmdMaW5lc1dpdGhI
eXBoZW4sIGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpTdHlsZSYgc3R5bGUsIGJvb2wgaXNG
aXJzdExpbmUpCi17Ci0gICAgYm9vbCBzaG91bGRBcHBseVRleHRJbmRlbnQgPSAhZmxvdy5pc0Fu
b255bW91cygpIHx8IGZsb3cucGFyZW50KCktPmZpcnN0Q2hpbGQoKSA9PSAmZmxvdzsKLSAgICBM
YXlvdXRVbml0IGhlaWdodCA9IGZsb3cubG9naWNhbEhlaWdodCgpOwotICAgIExheW91dFVuaXQg
bG9naWNhbEhlaWdodCA9IGZsb3cubWluTGluZUhlaWdodEZvclJlcGxhY2VkUmVuZGVyZXIoZmFs
c2UsIDApOwotICAgIGxpbmUuc2V0TG9naWNhbExlZnRPZmZzZXQoZmxvdy5sb2dpY2FsTGVmdE9m
ZnNldEZvckxpbmUoaGVpZ2h0LCBEb05vdEluZGVudFRleHQsIGxvZ2ljYWxIZWlnaHQpICsgKHNo
b3VsZEFwcGx5VGV4dEluZGVudCAmJiBpc0ZpcnN0TGluZSA/IGZsb3cudGV4dEluZGVudE9mZnNl
dCgpIDogMF9sdSkpOwotICAgIGZsb2F0IGxvZ2ljYWxSaWdodE9mZnNldCA9IGZsb3cubG9naWNh
bFJpZ2h0T2Zmc2V0Rm9yTGluZShoZWlnaHQsIERvTm90SW5kZW50VGV4dCwgbG9naWNhbEhlaWdo
dCk7Ci0gICAgbGluZS5zZXRBdmFpbGFibGVXaWR0aChzdGQ6Om1heDxmbG9hdD4oMCwgbG9naWNh
bFJpZ2h0T2Zmc2V0IC0gbGluZS5sb2dpY2FsTGVmdE9mZnNldCgpKSk7Ci0gICAgaWYgKHN0eWxl
LnRleHRBbGlnbiA9PSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KQotICAgICAgICBsaW5lLnNldE5l
ZWRzQWxsRnJhZ21lbnRzKCk7Ci0gICAgbnVtYmVyT2ZQcmVjZWRpbmdMaW5lc1dpdGhIeXBoZW4g
PSAocHJldmlvdXNMaW5lLmlzRW1wdHkoKSB8fCAhcHJldmlvdXNMaW5lLmxhc3RGcmFnbWVudCgp
Lmhhc0h5cGhlbigpKSA/IDAgOiBudW1iZXJPZlByZWNlZGluZ0xpbmVzV2l0aEh5cGhlbiArIDE7
Ci0gICAgaWYgKHN0eWxlLmh5cGhlbkxpbWl0TGluZXMgJiYgbnVtYmVyT2ZQcmVjZWRpbmdMaW5l
c1dpdGhIeXBoZW4gPj0gKnN0eWxlLmh5cGhlbkxpbWl0TGluZXMpCi0gICAgICAgIGxpbmUuc2V0
SHlwaGVuYXRpb25EaXNhYmxlZCgpOwotICAgIGxpbmUuc2V0Q29sbGFwZWRXaGl0ZXNwYWNlV2lk
dGgoc3R5bGUuZm9udC5zcGFjZVdpZHRoKCkgKyBzdHlsZS53b3JkU3BhY2luZyk7Ci19Ci0KLXN0
cnVjdCBTcGxpdEZyYWdtZW50RGF0YSB7Ci0gICAgdW5zaWduZWQgcG9zaXRpb247Ci0gICAgZmxv
YXQgd2lkdGg7Ci19Owotc3RhdGljIE9wdGlvbmFsPHVuc2lnbmVkPiBoeXBoZW5Qb3NpdGlvbkZv
ckZyYWdtZW50KFNwbGl0RnJhZ21lbnREYXRhIHNwbGl0RGF0YSwgY29uc3QgVGV4dEZyYWdtZW50
SXRlcmF0b3I6OlRleHRGcmFnbWVudCYgZnJhZ21lbnRUb1NwbGl0LAotICAgIGNvbnN0IExpbmVT
dGF0ZSYgbGluZSwgY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3ImIHRleHRGcmFnbWVudEl0ZXJh
dG9yLCBmbG9hdCBhdmFpbGFibGVXaWR0aCkKLXsKLSAgICBhdXRvJiBzdHlsZSA9IHRleHRGcmFn
bWVudEl0ZXJhdG9yLnN0eWxlKCk7Ci0gICAgaWYgKCFzdHlsZS5zaG91bGRIeXBoZW5hdGUgfHwg
bGluZS5pc0h5cGhlbmF0aW9uRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3Igd2Via2l0Lm9yZy9i
LzE2OTYxMy4gU2VlIG1heFByZWZpeFdpZHRoIGNvbXB1dGF0aW9uIGluIHRyeUh5cGhlbmF0aW5n
KCkuCi0gICAgLy8gSXQgZG9lcyBub3Qgd29yayBwcm9wZXJseSB3aXRoIG5vbi1jb2xsYXBzZWQg
bGVhZGluZyB0YWJzIHdoZW4gZm9udCBpcyBlbmxhcmdlZC4KLSAgICBhdXRvIGFkanVzdGVkQXZh
aWxhYmxlV2lkdGggPSBhdmFpbGFibGVXaWR0aCAtIHN0eWxlLmh5cGhlblN0cmluZ1dpZHRoOwot
ICAgIGlmICghbGluZS5pc0VtcHR5KCkpCi0gICAgICAgIGFkanVzdGVkQXZhaWxhYmxlV2lkdGgg
Kz0gc3R5bGUuZm9udC5zcGFjZVdpZHRoKCk7Ci0gICAgaWYgKCFlbm91Z2hXaWR0aEZvckh5cGhl
bmF0aW9uKGFkanVzdGVkQXZhaWxhYmxlV2lkdGgsIHN0eWxlLmZvbnQucGl4ZWxTaXplKCkpKQot
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgLy8gV2UgbWlnaHQgYmUgYWJsZSB0
byBmaXQgdGhlIGh5cGhlbiBhdCB0aGUgc3BsaXQgcG9zaXRpb24uCi0gICAgYXV0byBzcGxpdFBv
c2l0aW9uV2l0aEh5cGhlbiA9IHNwbGl0RGF0YS5wb3NpdGlvbjsKLSAgICAvLyBGaW5kIGEgc3Bs
aXR0aW5nIHBvc2l0aW9uIHdoZXJlIGh5cGhlbiBzdXJlbHkgZml0cy4KLSAgICB1bnNpZ25lZCBz
dGFydCA9IGZyYWdtZW50VG9TcGxpdC5zdGFydCgpOwotICAgIGF1dG8gbGVmdFNpZGVXaWR0aCA9
IHNwbGl0RGF0YS53aWR0aDsKLSAgICB3aGlsZSAobGVmdFNpZGVXaWR0aCArIHN0eWxlLmh5cGhl
blN0cmluZ1dpZHRoID4gYXZhaWxhYmxlV2lkdGgpIHsKLSAgICAgICAgaWYgKC0tc3BsaXRQb3Np
dGlvbldpdGhIeXBoZW4gPD0gc3RhcnQpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OyAvLyBObyBzcGFjZSBmb3IgaHlwaGVuLgotICAgICAgICBsZWZ0U2lkZVdpZHRoIC09IHRleHRG
cmFnbWVudEl0ZXJhdG9yLnRleHRXaWR0aChzcGxpdFBvc2l0aW9uV2l0aEh5cGhlbiwgc3BsaXRQ
b3NpdGlvbldpdGhIeXBoZW4gKyAxLCAwKTsKLSAgICB9Ci0gICAgQVNTRVJUKHNwbGl0UG9zaXRp
b25XaXRoSHlwaGVuID4gc3RhcnQpOwotICAgIHJldHVybiB0ZXh0RnJhZ21lbnRJdGVyYXRvci5s
YXN0SHlwaGVuUG9zaXRpb24oZnJhZ21lbnRUb1NwbGl0LCBzcGxpdFBvc2l0aW9uV2l0aEh5cGhl
biArIDEpOwotfQotCi1zdGF0aWMgU3BsaXRGcmFnbWVudERhdGEgc3BsaXQoY29uc3QgVGV4dEZy
YWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCYgZnJhZ21lbnQsIGZsb2F0IGF2YWlsYWJsZVdp
ZHRoLAotICAgIGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yJiB0ZXh0RnJhZ21lbnRJdGVyYXRv
cikKLXsKLSAgICBBU1NFUlQoYXZhaWxhYmxlV2lkdGggPj0gMCk7Ci0gICAgYXV0byBsZWZ0ID0g
ZnJhZ21lbnQuc3RhcnQoKTsKLSAgICAvLyBQYXRob2xvZ2ljYWwgY2FzZSBvZiAoZXh0cmVtZWx5
KWxvbmcgc3RyaW5nIGFuZCBuYXJyb3cgbGluZXMuCi0gICAgLy8gQWRqdXN0IHRoZSByYW5nZSBz
byB0aGF0IHdlIGNhbiBwaWNrIGEgcmVhc29uYWJsZSBtaWRwb2ludC4KLSAgICBhdXRvIGF2ZXJh
Z2VDaGFyYWN0ZXJXaWR0aCA9IGZyYWdtZW50LndpZHRoKCkgLyBmcmFnbWVudC5sZW5ndGgoKTsK
LSAgICBhdXRvIHJpZ2h0ID0gc3RkOjptaW48dW5zaWduZWQ+KGxlZnQgKyAoMiAqIGF2YWlsYWJs
ZVdpZHRoIC8gYXZlcmFnZUNoYXJhY3RlcldpZHRoKSwgZnJhZ21lbnQuZW5kKCkgLSAxKTsKLSAg
ICAvLyBQcmVzZXJ2ZSB0aGUgbGVmdCB3aWR0aCBmb3IgdGhlIGZpbmFsIHNwbGl0IHBvc2l0aW9u
IHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byByZW1lYXN1cmUgdGhlIGxlZnQgc2lkZSBhZ2Fpbi4K
LSAgICBmbG9hdCBsZWZ0U2lkZVdpZHRoID0gMDsKLSAgICB3aGlsZSAobGVmdCA8IHJpZ2h0KSB7
Ci0gICAgICAgIGF1dG8gbWlkZGxlID0gKGxlZnQgKyByaWdodCkgLyAyOwotICAgICAgICBhdXRv
IHdpZHRoID0gdGV4dEZyYWdtZW50SXRlcmF0b3IudGV4dFdpZHRoKGZyYWdtZW50LnN0YXJ0KCks
IG1pZGRsZSArIDEsIDApOwotICAgICAgICBpZiAod2lkdGggPCBhdmFpbGFibGVXaWR0aCkgewot
ICAgICAgICAgICAgbGVmdCA9IG1pZGRsZSArIDE7Ci0gICAgICAgICAgICBsZWZ0U2lkZVdpZHRo
ID0gd2lkdGg7Ci0gICAgICAgIH0gZWxzZSBpZiAod2lkdGggPiBhdmFpbGFibGVXaWR0aCkKLSAg
ICAgICAgICAgIHJpZ2h0ID0gbWlkZGxlOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJp
Z2h0ID0gbWlkZGxlICsgMTsKLSAgICAgICAgICAgIGxlZnRTaWRlV2lkdGggPSB3aWR0aDsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB7IHJpZ2h0LCBs
ZWZ0U2lkZVdpZHRoIH07Ci19Ci0KLXN0YXRpYyBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZy
YWdtZW50IHNwbGl0RnJhZ21lbnRUb0ZpdExpbmUoVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRG
cmFnbWVudCYgZnJhZ21lbnRUb1NwbGl0LAotICAgIGNvbnN0IExpbmVTdGF0ZSYgbGluZSwgY29u
c3QgVGV4dEZyYWdtZW50SXRlcmF0b3ImIHRleHRGcmFnbWVudEl0ZXJhdG9yKQotewotICAgIGF1
dG8gYXZhaWxhYmxlV2lkdGggPSBsaW5lLmF2YWlsYWJsZVdpZHRoKCkgLSBsaW5lLndpZHRoKCk7
Ci0gICAgYXV0byBzcGxpdEZyYWdtZW50RGF0YSA9IHNwbGl0KGZyYWdtZW50VG9TcGxpdCwgYXZh
aWxhYmxlV2lkdGgsIHRleHRGcmFnbWVudEl0ZXJhdG9yKTsKLSAgICBPcHRpb25hbDx1bnNpZ25l
ZD4gaHlwaGVuUG9zaXRpb24gPSBXVEY6Om51bGxvcHQ7Ci0gICAgLy8gRG9lcyBmaXJzdCBjaGFy
YWN0ZXIgZml0IHRoaXMgbGluZT8KLSAgICBpZiAoc3BsaXRGcmFnbWVudERhdGEucG9zaXRpb24g
PT0gZnJhZ21lbnRUb1NwbGl0LnN0YXJ0KCkpIHsKLSAgICAgICAgLy8gS2VlcCBhdCBsZWFzdCBv
bmUgY2hhcmFjdGVyIG9uIGVtcHR5IGxpbmVzLgotICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBzcGxpdEZyYWdtZW50RGF0YS53aWR0aCA9IHRleHRGcmFnbWVudEl0ZXJh
dG9yLnRleHRXaWR0aChmcmFnbWVudFRvU3BsaXQuc3RhcnQoKSwgKytzcGxpdEZyYWdtZW50RGF0
YS5wb3NpdGlvbiwgMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaHlwaGVuUG9zaXRpb24gPSBo
eXBoZW5Qb3NpdGlvbkZvckZyYWdtZW50KHNwbGl0RnJhZ21lbnREYXRhLCBmcmFnbWVudFRvU3Bs
aXQsIGxpbmUsIHRleHRGcmFnbWVudEl0ZXJhdG9yLCBhdmFpbGFibGVXaWR0aCk7Ci0gICAgICAg
IGlmIChoeXBoZW5Qb3NpdGlvbikgewotICAgICAgICAgICAgc3BsaXRGcmFnbWVudERhdGEucG9z
aXRpb24gPSAqaHlwaGVuUG9zaXRpb247Ci0gICAgICAgICAgICBzcGxpdEZyYWdtZW50RGF0YS53
aWR0aCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLnRleHRXaWR0aChmcmFnbWVudFRvU3BsaXQuc3Rh
cnQoKSwgc3BsaXRGcmFnbWVudERhdGEucG9zaXRpb24sIDApOwotICAgICAgICB9Ci0gICAgfQot
ICAgIC8vIElmIHRoZSByaWdodCBzaWRlIHN1cmVseSBkb2VzIG5vdCBmaXQgdGhlIChuZXh0KWxp
bmUsIHdlIGRvbid0IG5lZWQgdGhlIHdpZHRoIHRvIGJlIGtlcm5pbmcvbGlnYXR1cmUgYWRqdXN0
ZWQuCi0gICAgLy8gUGFydCBvZiBpdCBnZXRzIHJlLW1lYXN1cmVkIGFzIHRoZSBsZWZ0IHNpZGUg
ZHVyaW5nIG5leHQgc3BsaXQuCi0gICAgLy8gVGhpcyBzYXZlcyBtZWFzdXJpbmcgbG9uZyBjaHVu
ayBvZiB0ZXh0IHJlcGVhdGVkbHkgKHNlZSBwYXRob2xvZ2ljYWwgY2FzZSBhdCA6OnNwbGl0KS4K
LSAgICBhdXRvIHJpZ2h0U2lkZVdpZHRoID0gZnJhZ21lbnRUb1NwbGl0LndpZHRoKCkgLSBzcGxp
dEZyYWdtZW50RGF0YS53aWR0aDsKLSAgICBpZiAocmlnaHRTaWRlV2lkdGggPCAyICogYXZhaWxh
YmxlV2lkdGgpCi0gICAgICAgIHJpZ2h0U2lkZVdpZHRoID0gdGV4dEZyYWdtZW50SXRlcmF0b3Iu
dGV4dFdpZHRoKHNwbGl0RnJhZ21lbnREYXRhLnBvc2l0aW9uLCBmcmFnbWVudFRvU3BsaXQuZW5k
KCksIDApOwotICAgIHJldHVybiBoeXBoZW5Qb3NpdGlvbiA/IGZyYWdtZW50VG9TcGxpdC5zcGxp
dFdpdGhIeXBoZW4oc3BsaXRGcmFnbWVudERhdGEucG9zaXRpb24sIHRleHRGcmFnbWVudEl0ZXJh
dG9yLnN0eWxlKCkuaHlwaGVuU3RyaW5nV2lkdGgsCi0gICAgICAgIHNwbGl0RnJhZ21lbnREYXRh
LndpZHRoLCByaWdodFNpZGVXaWR0aCkgOiBmcmFnbWVudFRvU3BsaXQuc3BsaXQoc3BsaXRGcmFn
bWVudERhdGEucG9zaXRpb24sIHNwbGl0RnJhZ21lbnREYXRhLndpZHRoLCByaWdodFNpZGVXaWR0
aCk7Ci19Ci0KLWVudW0gUHJlV3JhcExpbmVCcmVha1J1bGUgeyBQcmVzZXJ2ZSwgSWdub3JlIH07
Ci0KLXN0YXRpYyBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IGNvbnN1bWVMaW5l
QnJlYWtJZk5lZWRlZChjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBm
cmFnbWVudCwgVGV4dEZyYWdtZW50SXRlcmF0b3ImIHRleHRGcmFnbWVudEl0ZXJhdG9yLCBMaW5l
U3RhdGUmIGxpbmUsIExheW91dDo6UnVuVmVjdG9yJiBydW5zLAotICAgIFByZVdyYXBMaW5lQnJl
YWtSdWxlIHByZVdyYXBMaW5lQnJlYWtSdWxlID0gUHJlV3JhcExpbmVCcmVha1J1bGU6OlByZXNl
cnZlKQotewotICAgIGlmICghZnJhZ21lbnQuaXNMaW5lQnJlYWsoKSkKLSAgICAgICAgcmV0dXJu
IGZyYWdtZW50OwotCi0gICAgYm9vbCBpc0hhcmRMaW5lYnJlYWsgPSBmcmFnbWVudC50eXBlKCkg
PT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6SGFyZExpbmVCcmVhazsKLSAg
ICAvLyA8YnI+IGFsd2F5cyBwcm9kdWNlcyBhIHJ1bi4gKHJlcXVpcmVkIGJ5IHRlc3Rpbmcgb3V0
cHV0KQotICAgIGlmIChpc0hhcmRMaW5lYnJlYWspCi0gICAgICAgIGxpbmUuYXBwZW5kRnJhZ21l
bnRBbmRDcmVhdGVSdW5JZk5lZWRlZChmcmFnbWVudCwgcnVucyk7Ci0KLSAgICBhdXRvJiBzdHls
ZSA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLnN0eWxlKCk7Ci0gICAgaWYgKHN0eWxlLnByZXNlcnZl
TmV3bGluZSAmJiBwcmVXcmFwTGluZUJyZWFrUnVsZSA9PSBQcmVXcmFwTGluZUJyZWFrUnVsZTo6
UHJlc2VydmUpIHsKLSAgICAgICAgaWYgKCFpc0hhcmRMaW5lYnJlYWspCi0gICAgICAgICAgICBy
ZXR1cm4gZnJhZ21lbnQ7Ci0gICAgfQotICAgIHJldHVybiB0ZXh0RnJhZ21lbnRJdGVyYXRvci5u
ZXh0VGV4dEZyYWdtZW50KCk7Ci19Ci0KLXN0YXRpYyBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4
dEZyYWdtZW50IHNraXBXaGl0ZXNwYWNlSWZOZWVkZWQoY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0
b3I6OlRleHRGcmFnbWVudCYgZnJhZ21lbnQsIFRleHRGcmFnbWVudEl0ZXJhdG9yJiB0ZXh0RnJh
Z21lbnRJdGVyYXRvcikKLXsKLSAgICBpZiAoIXRleHRGcmFnbWVudEl0ZXJhdG9yLnN0eWxlKCku
Y29sbGFwc2VXaGl0ZXNwYWNlKQotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0KLSAgICBUZXh0
RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IGZpcnN0Tm9uV2hpdGVzcGFjZUZyYWdtZW50
ID0gZnJhZ21lbnQ7Ci0gICAgd2hpbGUgKGZpcnN0Tm9uV2hpdGVzcGFjZUZyYWdtZW50LnR5cGUo
KSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlKQotICAg
ICAgICBmaXJzdE5vbldoaXRlc3BhY2VGcmFnbWVudCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLm5l
eHRUZXh0RnJhZ21lbnQoKTsKLSAgICByZXR1cm4gZmlyc3ROb25XaGl0ZXNwYWNlRnJhZ21lbnQ7
Ci19Ci0KLXN0YXRpYyBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IGZpcnN0RnJh
Z21lbnQoVGV4dEZyYWdtZW50SXRlcmF0b3ImIHRleHRGcmFnbWVudEl0ZXJhdG9yLCBMaW5lU3Rh
dGUmIGN1cnJlbnRMaW5lLCBjb25zdCBMaW5lU3RhdGUmIHByZXZpb3VzTGluZSwgTGF5b3V0OjpS
dW5WZWN0b3ImIHJ1bnMpCi17Ci0gICAgLy8gSGFuZGxlIG92ZXJmbG93IGZyYWdtZW50IGZyb20g
cHJldmlvdXMgbGluZS4KLSAgICBhdXRvIG92ZXJmbG93ZWRGcmFnbWVudCA9IHByZXZpb3VzTGlu
ZS5vdmVyZmxvd2VkRnJhZ21lbnQoKTsKLSAgICBpZiAob3ZlcmZsb3dlZEZyYWdtZW50LmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIHNraXBXaGl0ZXNwYWNlSWZOZWVkZWQodGV4dEZyYWdtZW50
SXRlcmF0b3IubmV4dFRleHRGcmFnbWVudCgpLCB0ZXh0RnJhZ21lbnRJdGVyYXRvcik7Ci0KLSAg
ICBpZiAob3ZlcmZsb3dlZEZyYWdtZW50LnR5cGUoKSAhPSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6
VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlKQotICAgICAgICByZXR1cm4gb3ZlcmZsb3dlZEZyYWdt
ZW50OwotCi0gICAgLy8gTGVhZGluZyB3aGl0ZXNwYWNlIGhhbmRsaW5nLgotICAgIGF1dG8mIHN0
eWxlID0gdGV4dEZyYWdtZW50SXRlcmF0b3Iuc3R5bGUoKTsKLSAgICBpZiAoc3R5bGUuYnJlYWtT
cGFjZXMpIHsKLSAgICAgICAgLy8gTGVhZGluZyB3aGl0ZXNwYWNlIGNyZWF0ZWQgYWZ0ZXIgYnJl
YWtpbmcgdGhlIHByZXZpb3VzIGxpbmUuCi0gICAgICAgIC8vIEJyZWFraW5nIGJlZm9yZSB0aGUg
Zmlyc3Qgc3BhY2UgYWZ0ZXIgYSB3b3JkIGlzIG9ubHkgYWxsb3dlZCBpbiBjb21iaW5hdGlvbiB3
aXRoIGJyZWFrLWFsbCBvciBicmVhay13b3JkLgotICAgICAgICBpZiAoc3R5bGUuYnJlYWtGaXJz
dFdvcmRPbk92ZXJmbG93IHx8IHByZXZpb3VzTGluZS5oYXNUcmFpbGluZ1doaXRlc3BhY2UoKSkK
LSAgICAgICAgICAgIHJldHVybiBvdmVyZmxvd2VkRnJhZ21lbnQ7Ci0gICAgfQotICAgIC8vIFNw
ZWNpYWwgb3ZlcmZsb3cgcHJlLXdyYXAgd2hpdGVzcGFjZSBoYW5kbGluZzogc2tpcCB0aGUgb3Zl
cmZsb3dlZCB3aGl0ZXNwYWNlIChldmVuIHdoZW4gc3R5bGUgc2F5cyBub3QtY29sbGFwc2libGUp
Ci0gICAgLy8gaWYgd2UgbWFuYWdlIHRvIGZpdCBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIG9uIHRo
ZSBwcmV2aW91cyBsaW5lLgotICAgIGlmICgoc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlIHx8IHN0
eWxlLndyYXBMaW5lcykgJiYgcHJldmlvdXNMaW5lLmZpcnN0Q2hhcmFjdGVyRml0cygpKSB7Ci0g
ICAgICAgIC8vIElmIHNraXBwaW5nIHRoZSB3aGl0ZXNwYWNlIHB1dHMgdXMgb24gYSBuZXdsaW5l
LCBza2lwIHRoZSBuZXdsaW5lIHRvbyBhcyB3ZSBhbHJlYWR5IHdyYXBwZWQgdGhlIGxpbmUuCi0g
ICAgICAgIGF1dG8gZmlyc3RGcmFnbWVudENhbmRpZGF0ZSA9IGNvbnN1bWVMaW5lQnJlYWtJZk5l
ZWRlZCh0ZXh0RnJhZ21lbnRJdGVyYXRvci5uZXh0VGV4dEZyYWdtZW50KCksIHRleHRGcmFnbWVu
dEl0ZXJhdG9yLCBjdXJyZW50TGluZSwgcnVucywKLSAgICAgICAgICAgIHByZVdyYXAoc3R5bGUp
ID8gUHJlV3JhcExpbmVCcmVha1J1bGU6Oklnbm9yZSA6IFByZVdyYXBMaW5lQnJlYWtSdWxlOjpQ
cmVzZXJ2ZSk7Ci0gICAgICAgIHJldHVybiBza2lwV2hpdGVzcGFjZUlmTmVlZGVkKGZpcnN0RnJh
Z21lbnRDYW5kaWRhdGUsIHRleHRGcmFnbWVudEl0ZXJhdG9yKTsKLSAgICB9Ci0gICAgcmV0dXJu
IHNraXBXaGl0ZXNwYWNlSWZOZWVkZWQob3ZlcmZsb3dlZEZyYWdtZW50LCB0ZXh0RnJhZ21lbnRJ
dGVyYXRvcik7Ci19Ci0KLXN0YXRpYyB2b2lkIGZvcmNlRnJhZ21lbnRUb0xpbmUoTGluZVN0YXRl
JiBsaW5lLCBUZXh0RnJhZ21lbnRJdGVyYXRvciYgdGV4dEZyYWdtZW50SXRlcmF0b3IsIExheW91
dDo6UnVuVmVjdG9yJiBydW5zLCBjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdt
ZW50JiBmcmFnbWVudCkKLXsKLSAgICBsaW5lLmFwcGVuZEZyYWdtZW50QW5kQ3JlYXRlUnVuSWZO
ZWVkZWQoZnJhZ21lbnQsIHJ1bnMpOwotICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBtb3JlIGZy
YWdtZW50cyB0byBhZGQgdG8gdGhlIGN1cnJlbnQgbGluZS4KLSAgICBhdXRvIG5leHRGcmFnbWVu
dCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQoKTsKLSAgICBpZiAoZnJh
Z21lbnQub3ZlcmxhcHNUb05leHRSZW5kZXJlcigpKSB7Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7
Ci0gICAgICAgICAgICBpZiAobmV4dEZyYWdtZW50LnR5cGUoKSAhPSBmcmFnbWVudC50eXBlKCkp
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBsaW5lLmFwcGVuZEZyYWdtZW50
QW5kQ3JlYXRlUnVuSWZOZWVkZWQobmV4dEZyYWdtZW50LCBydW5zKTsKLSAgICAgICAgICAgIC8v
IERvZXMgaXQgb3ZlcmxhcCB0byB0aGUgbmV4dCBzZWdtZW50PwotICAgICAgICAgICAgaWYgKCFu
ZXh0RnJhZ21lbnQub3ZlcmxhcHNUb05leHRSZW5kZXJlcigpKQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIG5leHRGcmFnbWVudCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLm5l
eHRUZXh0RnJhZ21lbnQoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvLyBXaGVuIHRoZSBmb3Jj
ZWQgZnJhZ21lbnQgaXMgZm9sbG93ZWQgYnkgZWl0aGVyIHdoaXRlc3BhY2UgYW5kL29yIGxpbmUg
YnJlYWssIGNvbnN1bWUgdGhlbSB0b28sIG90aGVyd2lzZSB3ZSBlbmQgdXAgd2l0aCBhbiBleHRy
YSB3aGl0ZXNwYWNlIGFuZC9vciBsaW5lIGJyZWFrLgotICAgIG5leHRGcmFnbWVudCA9IHNraXBX
aGl0ZXNwYWNlSWZOZWVkZWQobmV4dEZyYWdtZW50LCB0ZXh0RnJhZ21lbnRJdGVyYXRvcik7Ci0g
ICAgbmV4dEZyYWdtZW50ID0gY29uc3VtZUxpbmVCcmVha0lmTmVlZGVkKG5leHRGcmFnbWVudCwg
dGV4dEZyYWdtZW50SXRlcmF0b3IsIGxpbmUsIHJ1bnMpOwotICAgIGxpbmUuc2V0T3ZlcmZsb3dl
ZEZyYWdtZW50KG5leHRGcmFnbWVudCk7Ci19Ci0KLXN0YXRpYyBib29sIGNyZWF0ZUxpbmVSdW5z
KExpbmVTdGF0ZSYgbGluZSwgY29uc3QgTGluZVN0YXRlJiBwcmV2aW91c0xpbmUsIExheW91dDo6
UnVuVmVjdG9yJiBydW5zLCBUZXh0RnJhZ21lbnRJdGVyYXRvciYgdGV4dEZyYWdtZW50SXRlcmF0
b3IpCi17Ci0gICAgY29uc3QgYXV0byYgc3R5bGUgPSB0ZXh0RnJhZ21lbnRJdGVyYXRvci5zdHls
ZSgpOwotICAgIGJvb2wgbGluZUNhbkJlV3JhcHBlZCA9IHN0eWxlLndyYXBMaW5lcyB8fCBzdHls
ZS5icmVha0ZpcnN0V29yZE9uT3ZlcmZsb3cgfHwgc3R5bGUuYnJlYWtBbnlXb3JkT25PdmVyZmxv
dzsKLSAgICBhdXRvIGZyYWdtZW50ID0gZmlyc3RGcmFnbWVudCh0ZXh0RnJhZ21lbnRJdGVyYXRv
ciwgbGluZSwgcHJldmlvdXNMaW5lLCBydW5zKTsKLSAgICB3aGlsZSAoZnJhZ21lbnQudHlwZSgp
ICE9IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OkNvbnRlbnRFbmQpIHsKLSAg
ICAgICAgLy8gSGFyZCBhbmQgc29mdCBsaW5lYnJlYWtzLgotICAgICAgICBpZiAoZnJhZ21lbnQu
aXNMaW5lQnJlYWsoKSkgewotICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXcgbGluZSBmcmFnbWVu
dCBvbmx5IGlmIHRoZXJlJ3Mgbm90aGluZyBvbiB0aGUgbGluZS4gKG90aGVyd2lzZSB0aGUgZXh0
cmEgbmV3IGxpbmUgY2hhcmFjdGVyIHdvdWxkIHNob3cgdXAgYXQgdGhlIGVuZCBvZiB0aGUgY29u
dGVudC4pCi0gICAgICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkgfHwgZnJhZ21lbnQudHlwZSgp
ID09IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OkhhcmRMaW5lQnJlYWsgfHwg
cHJlV3JhcChzdHlsZSkgfHwgc3R5bGUucHJlc2VydmVOZXdsaW5lKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHN0eWxlLnRleHRBbGlnbiA9PSBUZXh0QWxpZ25Nb2RlOjpSaWdodCB8fCBzdHlsZS50
ZXh0QWxpZ24gPT0gVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQpCi0gICAgICAgICAgICAgICAg
ICAgIGxpbmUucmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKHJ1bnMpOwotICAgICAgICAgICAgICAg
IGxpbmUuYXBwZW5kRnJhZ21lbnRBbmRDcmVhdGVSdW5JZk5lZWRlZChmcmFnbWVudCwgcnVucyk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBp
ZiAobGluZUNhbkJlV3JhcHBlZCAmJiAhbGluZS5maXRzKGZyYWdtZW50LndpZHRoKCkpKSB7Ci0g
ICAgICAgICAgICAvLyBPdmVyZmxvdyB3cmFwcGluZyBiZWhhdmlvdXI6Ci0gICAgICAgICAgICAv
LyAxLiBXaGl0ZXNhcGNlIGNvbGxhcHNlIG9uOiB3aGl0ZXNwYWNlIGlzIHNraXBwZWQuIEp1bXAg
dG8gbmV4dCBsaW5lLgotICAgICAgICAgICAgLy8gMi4gV2hpdGVzcGFjZSBjb2xsYXBzZSBvZmY6
IHdoaXRlc3BhY2UgaXMgd3JhcHBlZC4KLSAgICAgICAgICAgIC8vIDMuIEZpcnN0LCBub24td2hp
dGVzcGFjZSBmcmFnbWVudCBpcyBlaXRoZXIgd3JhcHBlZCBvciBrZXB0IG9uIHRoZSBsaW5lLiAo
ZGVwZW5kcyBvbiBvdmVyZmxvdy13cmFwKQotICAgICAgICAgICAgLy8gNS4gTm9uLXdoaXRlc3Bh
Y2UgZnJhZ21lbnQgd2hlbiB0aGVyZSdzIGFscmVhZHkgYW5vdGhlciBmcmFnbWVudCBvbiB0aGUg
bGluZSBlaXRoZXIgZ2V0cyB3cmFwcGVkICh3b3JkLWJyZWFrOiBicmVhay1hbGwpCi0gICAgICAg
ICAgICAvLyBvciBnZXRzIHB1c2hlZCB0byB0aGUgbmV4dCBsaW5lLgotICAgICAgICAgICAgYm9v
bCBlbXB0eUxpbmUgPSBsaW5lLmlzRW1wdHkoKTsKLSAgICAgICAgICAgIC8vIFdoaXRlc3BhY2Ug
ZnJhZ21lbnQuCi0gICAgICAgICAgICBpZiAoZnJhZ21lbnQudHlwZSgpID09IFRleHRGcmFnbWVu
dEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFB1
c2ggY29sbGFwYXNlZCB3aGl0ZXNwYWNlIHRvIHRoZSBuZXh0IGxpbmUuCi0gICAgICAgICAgICAg
ICAgICAgIGxpbmUuc2V0T3ZlcmZsb3dlZEZyYWdtZW50KGZyYWdtZW50KTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChz
dHlsZS5icmVha1NwYWNlcyAmJiBsaW5lLmhhc1doaXRlc3BhY2VGcmFnbWVudHMoKSAmJiBmcmFn
bWVudC5sZW5ndGgoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEJyZWFraW5nIGJl
Zm9yZSB0aGUgZmlyc3Qgc3BhY2UgYWZ0ZXIgYSB3b3JkIGlzIG5vdCBhbGxvd2VkIGlmIHRoZXJl
IGFyZSBwcmV2aW91cyBicmVha2luZyBvcHBvcnR1bml0aWVzIGluIHRoZSBsaW5lLgotICAgICAg
ICAgICAgICAgICAgICB0ZXh0RnJhZ21lbnRJdGVyYXRvci5yZXZlcnRUb0VuZE9mRnJhZ21lbnQo
bGluZS5yZXZlcnRUb0xhc3RDb21wbGV0ZUZyYWdtZW50KHJ1bnMpKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChwcmVX
cmFwKHN0eWxlKSkgewotICAgICAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZEZyYWdtZW50QW5k
Q3JlYXRlUnVuSWZOZWVkZWQoZnJhZ21lbnQsIHJ1bnMpOwotICAgICAgICAgICAgICAgICAgICBm
cmFnbWVudCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQobGluZS53aWR0
aCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50LmlzTGluZUJyZWFrKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgbGlu
ZS5zZXRPdmVyZmxvd2VkRnJhZ21lbnQoZnJhZ21lbnQpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gU3BsaXQgdGhlIHdo
aXRlc3BhY2U7IGxlZnQgcGFydCBzdGF5cyBvbiB0aGlzIGxpbmUsIHJpZ2h0IGlzIHB1c2hlZCB0
byBuZXh0IGxpbmUuCi0gICAgICAgICAgICAgICAgbGluZS5zZXRPdmVyZmxvd2VkRnJhZ21lbnQo
c3BsaXRGcmFnbWVudFRvRml0TGluZShmcmFnbWVudCwgbGluZSwgdGV4dEZyYWdtZW50SXRlcmF0
b3IpKTsKLSAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZEZyYWdtZW50QW5kQ3JlYXRlUnVuSWZO
ZWVkZWQoZnJhZ21lbnQsIHJ1bnMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgLy8gTm9uLXdoaXRlc3BhY2UgZnJhZ21lbnQuICghc3R5bGUud3Jh
cExpbmVzOiBidWcxMzgxMDIocHJlc2VydmUgZXhpc3RpbmcgYmVoYXZpb3IpCi0gICAgICAgICAg
ICBpZiAoKChlbXB0eUxpbmUgJiYgc3R5bGUuYnJlYWtGaXJzdFdvcmRPbk92ZXJmbG93KSB8fCBz
dHlsZS5icmVha0FueVdvcmRPbk92ZXJmbG93KSB8fCAhc3R5bGUud3JhcExpbmVzKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGZyYWdtZW50OyAobW9kaWZpZWQpZnJhZ21lbnQgc3Rh
eXMgb24gdGhpcyBsaW5lLCBvdmVyZmxvd2VkRnJhZ21lbnQgaXMgcHVzaGVkIHRvIG5leHQgbGlu
ZS4KLSAgICAgICAgICAgICAgICBsaW5lLnNldE92ZXJmbG93ZWRGcmFnbWVudChzcGxpdEZyYWdt
ZW50VG9GaXRMaW5lKGZyYWdtZW50LCBsaW5lLCB0ZXh0RnJhZ21lbnRJdGVyYXRvcikpOwotICAg
ICAgICAgICAgICAgIGxpbmUuYXBwZW5kRnJhZ21lbnRBbmRDcmVhdGVSdW5JZk5lZWRlZChmcmFn
bWVudCwgcnVucyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBBU1NFUlQoZnJhZ21lbnQudHlwZSgpID09IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpU
ZXh0RnJhZ21lbnQ6Ok5vbldoaXRlc3BhY2UpOwotICAgICAgICAgICAgLy8gRmluZCBvdXQgaWYg
dGhpcyBub24td2hpdGVzcGFjZSBmcmFnbWVudCBoYXMgYSBoeXBoZW4gd2hlcmUgd2UgY2FuIGJy
ZWFrLgotICAgICAgICAgICAgaWYgKHN0eWxlLnNob3VsZEh5cGhlbmF0ZSkgewotICAgICAgICAg
ICAgICAgIGF1dG8gZnJhZ21lbnRUb1NwbGl0ID0gZnJhZ21lbnQ7Ci0gICAgICAgICAgICAgICAg
Ly8gU3BsaXQgYW5kIGNoZWNrIGlmIHdlIGFjdHVhbGx5IGVuZGVkIHVwIHdpdGggYSBoeXBoZW4u
Ci0gICAgICAgICAgICAgICAgYXV0byBvdmVyZmxvd0ZyYWdtZW50ID0gc3BsaXRGcmFnbWVudFRv
Rml0TGluZShmcmFnbWVudFRvU3BsaXQsIGxpbmUsIHRleHRGcmFnbWVudEl0ZXJhdG9yKTsKLSAg
ICAgICAgICAgICAgICBpZiAoZnJhZ21lbnRUb1NwbGl0Lmhhc0h5cGhlbigpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGxpbmUuc2V0T3ZlcmZsb3dlZEZyYWdtZW50KG92ZXJmbG93RnJhZ21lbnQp
OwotICAgICAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZEZyYWdtZW50QW5kQ3JlYXRlUnVuSWZO
ZWVkZWQoZnJhZ21lbnRUb1NwbGl0LCBydW5zKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIE5vIGh5cGhlbiwgbm8gc3Bs
aXQuCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBOb24tYnJlYWthYmxlIG5vbi13aGl0
ZXNwYWNlIGZpcnN0IGZyYWdtZW50LiBBZGQgaXQgdG8gdGhlIGN1cnJlbnQgbGluZS4gLWl0IG92
ZXJmbG93cyB0aG91Z2guCi0gICAgICAgICAgICBpZiAoZW1wdHlMaW5lKSB7Ci0gICAgICAgICAg
ICAgICAgZm9yY2VGcmFnbWVudFRvTGluZShsaW5lLCB0ZXh0RnJhZ21lbnRJdGVyYXRvciwgcnVu
cywgZnJhZ21lbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgLy8gTm9uLWJyZWFrYWJsZSBub24td2hpdGVzcGFjZSBmcmFnbWVudCB3aGVuIHRo
ZXJlJ3MgYWxyZWFkeSBjb250ZW50IG9uIHRoZSBsaW5lLiBQdXNoIGl0IHRvIHRoZSBuZXh0IGxp
bmUuCi0gICAgICAgICAgICBBU1NFUlQobGluZS5sYXN0RnJhZ21lbnQoKS5pc1ZhbGlkKCkpOwot
ICAgICAgICAgICAgaWYgKGxpbmUubGFzdEZyYWdtZW50KCkub3ZlcmxhcHNUb05leHRSZW5kZXJl
cigpKSB7Ci0gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBmcmFnbWVudCBpcyBhIGNv
bnRpbnVhdGlvbiBvZiBhIHByZXZpb3VzIHNlZ21lbnQuIEluIHN1Y2ggY2FzZXMsIHdlIG5lZWQg
dG8gcmVtb3ZlIHRoZW0gYWxsLgotICAgICAgICAgICAgICAgIHRleHRGcmFnbWVudEl0ZXJhdG9y
LnJldmVydFRvRW5kT2ZGcmFnbWVudChsaW5lLnJldmVydFRvTGFzdENvbXBsZXRlRnJhZ21lbnQo
cnVucykpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbGluZS5zZXRPdmVyZmxvd2VkRnJhZ21lbnQoZnJhZ21lbnQpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgbGluZS5hcHBlbmRGcmFnbWVudEFuZENyZWF0ZVJ1bklm
TmVlZGVkKGZyYWdtZW50LCBydW5zKTsKLSAgICAgICAgLy8gRmluZCB0aGUgbmV4dCB0ZXh0IGZy
YWdtZW50LgotICAgICAgICBmcmFnbWVudCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLm5leHRUZXh0
RnJhZ21lbnQobGluZS53aWR0aCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIChmcmFnbWVudC50eXBl
KCkgPT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6Q29udGVudEVuZCAmJiBs
aW5lLm92ZXJmbG93ZWRGcmFnbWVudCgpLmlzRW1wdHkoKSkgfHwgbGluZS5vdmVyZmxvd2VkRnJh
Z21lbnQoKS50eXBlKCkgPT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6Q29u
dGVudEVuZDsKLX0KLQotc3RhdGljIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9y
KGJvb2wgaXNBZnRlckV4cGFuc2lvbiwgYm9vbCBsYXN0UnVuT25MaW5lKQotewotICAgIEV4cGFu
c2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yOwotICAgIGV4cGFuc2lvbkJlaGF2aW9yID0g
aXNBZnRlckV4cGFuc2lvbiA/IEZvcmJpZExlZnRFeHBhbnNpb24gOiBBbGxvd0xlZnRFeHBhbnNp
b247Ci0gICAgZXhwYW5zaW9uQmVoYXZpb3IgfD0gbGFzdFJ1bk9uTGluZSA/IEZvcmJpZFJpZ2h0
RXhwYW5zaW9uIDogQWxsb3dSaWdodEV4cGFuc2lvbjsKLSAgICByZXR1cm4gZXhwYW5zaW9uQmVo
YXZpb3I7Ci19Ci0KLXN0YXRpYyB2b2lkIGp1c3RpZnlSdW5zKGNvbnN0IExpbmVTdGF0ZSYgbGlu
ZSwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIHVuc2lnbmVkIGZpcnN0UnVuSW5kZXgpCi17Ci0g
ICAgQVNTRVJUKHJ1bnMuc2l6ZSgpKTsKLSAgICBhdXRvIHdpZHRoVG9EaXN0cmlidXRlID0gbGlu
ZS5hdmFpbGFibGVXaWR0aCgpIC0gbGluZS53aWR0aCgpOwotICAgIGlmICh3aWR0aFRvRGlzdHJp
YnV0ZSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGxhc3RSdW5JbmRleCA9IHJ1
bnMuc2l6ZSgpIC0gMTsKLSAgICBBU1NFUlQoZmlyc3RSdW5JbmRleCA8PSBsYXN0UnVuSW5kZXgp
OwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8dW5zaWduZWQsIEV4cGFuc2lvbkJlaGF2aW9yPj4gZXhw
YW5zaW9uT3Bwb3J0dW5pdHlMaXN0OwotICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnRPblRoaXNMaW5lID0gMDsKLSAgICBhdXRvIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOwot
ICAgIGZvciAoYXV0byBpID0gZmlyc3RSdW5JbmRleDsgaSA8PSBsYXN0UnVuSW5kZXg7ICsraSkg
ewotICAgICAgICBjb25zdCBhdXRvJiBydW4gPSBydW5zLmF0KGkpOwotICAgICAgICB1bnNpZ25l
ZCBvcHBvcnR1bml0eUNvdW50SW5SdW4gPSAwOwotICAgICAgICBzdGQ6OnRpZShvcHBvcnR1bml0
eUNvdW50SW5SdW4sIGlzQWZ0ZXJFeHBhbnNpb24pID0gbGluZS5leHBhbnNpb25PcHBvcnR1bml0
eUNvdW50KHJ1bi5zdGFydCwgcnVuLmVuZCk7Ci0gICAgICAgIGV4cGFuc2lvbk9wcG9ydHVuaXR5
TGlzdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIob3Bwb3J0dW5pdHlDb3VudEluUnVuLCBleHBhbnNp
b25CZWhhdmlvcihpc0FmdGVyRXhwYW5zaW9uLCBpID09IGxhc3RSdW5JbmRleCkpKTsKLSAgICAg
ICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudE9uVGhpc0xpbmUgKz0gb3Bwb3J0dW5pdHlDb3Vu
dEluUnVuOwotICAgIH0KLSAgICBpZiAoIWV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRPblRoaXNM
aW5lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoZXhwYW5zaW9uT3Bwb3J0dW5pdHlM
aXN0LnNpemUoKSA9PSBsYXN0UnVuSW5kZXggLSBmaXJzdFJ1bkluZGV4ICsgMSk7Ci0gICAgYXV0
byBleHBhbnNpb24gPSB3aWR0aFRvRGlzdHJpYnV0ZSAvIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291
bnRPblRoaXNMaW5lOwotICAgIGZsb2F0IGFjY3VtdWxhdGVkRXhwYW5zaW9uID0gMDsKLSAgICBm
b3IgKGF1dG8gaSA9IGZpcnN0UnVuSW5kZXg7IGkgPD0gbGFzdFJ1bkluZGV4OyArK2kpIHsKLSAg
ICAgICAgYXV0byYgcnVuID0gcnVucy5hdChpKTsKLSAgICAgICAgdW5zaWduZWQgb3Bwb3J0dW5p
dHlDb3VudEluUnVuOwotICAgICAgICBzdGQ6OnRpZShvcHBvcnR1bml0eUNvdW50SW5SdW4sIHJ1
bi5leHBhbnNpb25CZWhhdmlvcikgPSBleHBhbnNpb25PcHBvcnR1bml0eUxpc3QuYXQoaSAtIGZp
cnN0UnVuSW5kZXgpOwotICAgICAgICBydW4uZXhwYW5zaW9uID0gb3Bwb3J0dW5pdHlDb3VudElu
UnVuICogZXhwYW5zaW9uOwotICAgICAgICBydW4ubG9naWNhbExlZnQgKz0gYWNjdW11bGF0ZWRF
eHBhbnNpb247Ci0gICAgICAgIHJ1bi5sb2dpY2FsUmlnaHQgKz0gKGFjY3VtdWxhdGVkRXhwYW5z
aW9uICsgcnVuLmV4cGFuc2lvbik7Ci0gICAgICAgIGFjY3VtdWxhdGVkRXhwYW5zaW9uICs9IHJ1
bi5leHBhbnNpb247Ci0gICAgfQotfQotCi1zdGF0aWMgVGV4dEFsaWduTW9kZSB0ZXh0QWxpZ25G
b3JMaW5lKGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpTdHlsZSYgc3R5bGUsIGJvb2wgbGFz
dExpbmUpCi17Ci0gICAgLy8gRmFsbGJhY2sgdG8gVGV4dEFsaWduTW9kZTo6TGVmdCAoU1RBUlQp
IGFsaWdubWVudCBmb3Igbm9uLWNvbGxhcHNhYmxlIGNvbnRlbnQgYW5kIGZvciB0aGUgbGFzdCBs
aW5lIGJlZm9yZSBhIGZvcmNlZCBicmVhayBvciB0aGUgZW5kIG9mIHRoZSBibG9jay4KLSAgICBh
dXRvIHRleHRBbGlnbiA9IHN0eWxlLnRleHRBbGlnbjsKLSAgICBpZiAodGV4dEFsaWduID09IFRl
eHRBbGlnbk1vZGU6Okp1c3RpZnkgJiYgKCFzdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2UgfHwgbGFz
dExpbmUpKQotICAgICAgICB0ZXh0QWxpZ24gPSBUZXh0QWxpZ25Nb2RlOjpMZWZ0OwotICAgIHJl
dHVybiB0ZXh0QWxpZ247Ci19Ci0KLXN0YXRpYyB2b2lkIGNsb3NlTGluZUVuZGluZ0FuZEFkanVz
dFJ1bnMoTGluZVN0YXRlJiBsaW5lLCBMYXlvdXQ6OlJ1blZlY3RvciYgcnVucywgT3B0aW9uYWw8
dW5zaWduZWQ+IGxhc3RSdW5JbmRleE9mUHJldmlvdXNMaW5lLCB1bnNpZ25lZCYgbGluZUNvdW50
LAotICAgIGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yJiB0ZXh0RnJhZ21lbnRJdGVyYXRvciwg
Ym9vbCBsYXN0TGluZUluRmxvdykKLXsKLSAgICBpZiAoIXJ1bnMuc2l6ZSgpIHx8IChsYXN0UnVu
SW5kZXhPZlByZXZpb3VzTGluZSAmJiBydW5zLnNpemUoKSAtIDEgPT0gbGFzdFJ1bkluZGV4T2ZQ
cmV2aW91c0xpbmUudmFsdWUoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IGF1dG8m
IHN0eWxlID0gdGV4dEZyYWdtZW50SXRlcmF0b3Iuc3R5bGUoKTsKLQotICAgIGlmIChzdHlsZS5j
b2xsYXBzZVdoaXRlc3BhY2UpCi0gICAgICAgIGxpbmUucmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNl
KHJ1bnMpOwotCi0gICAgaWYgKCFydW5zLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gQWRqdXN0IHJ1bnMnIHBvc2l0aW9uIGJ5IHRha2luZyBsaW5lJ3MgYWxpZ25tZW50IGludG8g
YWNjb3VudC4KLSAgICBhdXRvIGZpcnN0UnVuSW5kZXggPSBsYXN0UnVuSW5kZXhPZlByZXZpb3Vz
TGluZSA/IGxhc3RSdW5JbmRleE9mUHJldmlvdXNMaW5lLnZhbHVlKCkgKyAxIDogMDsKLSAgICBh
dXRvIGxpbmVMb2dpY2FsTGVmdCA9IGxpbmUubG9naWNhbExlZnRPZmZzZXQoKTsKLSAgICBhdXRv
IHRleHRBbGlnbiA9IHRleHRBbGlnbkZvckxpbmUoc3R5bGUsIGxhc3RMaW5lSW5GbG93IHx8IChs
aW5lLmxhc3RGcmFnbWVudCgpLmlzVmFsaWQoKSAmJiBsaW5lLmxhc3RGcmFnbWVudCgpLnR5cGUo
KSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpIYXJkTGluZUJyZWFrKSk7
Ci0KLSAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXRleHQtMy8jd2hpdGUtc3BhY2Ut
cGhhc2UtMgotICAgIGJvb2wgc2hvdWxkSGFuZ1RyYWlsaW5nV2hpdGVzcGFjZSA9IHN0eWxlLndy
YXBMaW5lcyAmJiBsaW5lLnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCk7Ci0gICAgYXV0byBoYW5n
aW5nV2hpdGVzcGFjZVdpZHRoID0gc2hvdWxkSGFuZ1RyYWlsaW5nV2hpdGVzcGFjZSA/IGxpbmUu
dHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKSA6IDA7Ci0KLSAgICBpZiAodGV4dEFsaWduID09IFRl
eHRBbGlnbk1vZGU6Okp1c3RpZnkpIHsKLSAgICAgICAganVzdGlmeVJ1bnMobGluZSwgcnVucywg
Zmlyc3RSdW5JbmRleCk7Ci0gICAgICAgIGhhbmdpbmdXaGl0ZXNwYWNlV2lkdGggPSAwOwotICAg
IH0gZWxzZQotICAgICAgICBsaW5lTG9naWNhbExlZnQgPSBjb21wdXRlTGluZUxlZnQobGluZSwg
dGV4dEFsaWduLCBoYW5naW5nV2hpdGVzcGFjZVdpZHRoKTsKLQotICAgIGZvciAoYXV0byBpID0g
Zmlyc3RSdW5JbmRleDsgaSA8IHJ1bnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcnVuc1tpXS5s
b2dpY2FsTGVmdCArPSBsaW5lTG9naWNhbExlZnQ7Ci0gICAgICAgIHJ1bnNbaV0ubG9naWNhbFJp
Z2h0ICs9IGxpbmVMb2dpY2FsTGVmdDsKLSAgICB9Ci0KLSAgICBpZiAoc2hvdWxkSGFuZ1RyYWls
aW5nV2hpdGVzcGFjZSAmJiBoYW5naW5nV2hpdGVzcGFjZVdpZHRoIDwgbGluZS50cmFpbGluZ1do
aXRlc3BhY2VXaWR0aCgpKQotICAgICAgICBydW5zLmxhc3QoKS5sb2dpY2FsUmlnaHQgPSBydW5z
Lmxhc3QoKS5sb2dpY2FsUmlnaHQgLSAobGluZS50cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpIC0g
aGFuZ2luZ1doaXRlc3BhY2VXaWR0aCk7Ci0KLSAgICBydW5zLmxhc3QoKS5pc0VuZE9mTGluZSA9
IHRydWU7Ci0gICAgKytsaW5lQ291bnQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGNyZWF0ZVRleHRSdW5z
KExheW91dDo6UnVuVmVjdG9yJiBydW5zLCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIHVuc2lnbmVk
JiBsaW5lQ291bnQpCi17Ci0gICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQmVmb3JlID0g
Zmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7Ci0gICAgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0
ID0gbGluZUhlaWdodEZyb21GbG93KGZsb3cpOwotICAgIExpbmVTdGF0ZSBsaW5lOwotICAgIHVu
c2lnbmVkIG51bWJlck9mUHJlY2VkaW5nTGluZXNXaXRoSHlwaGVuID0gMDsKLSAgICBib29sIGlz
RW5kT2ZDb250ZW50ID0gZmFsc2U7Ci0gICAgVGV4dEZyYWdtZW50SXRlcmF0b3IgdGV4dEZyYWdt
ZW50SXRlcmF0b3IgPSBUZXh0RnJhZ21lbnRJdGVyYXRvcihmbG93KTsKLSAgICBPcHRpb25hbDx1
bnNpZ25lZD4gbGFzdFJ1bkluZGV4T2ZQcmV2aW91c0xpbmU7Ci0gICAgZG8gewotICAgICAgICBm
bG93LnNldExvZ2ljYWxIZWlnaHQobGluZUhlaWdodCAqIGxpbmVDb3VudCArIGJvcmRlckFuZFBh
ZGRpbmdCZWZvcmUpOwotICAgICAgICBMaW5lU3RhdGUgcHJldmlvdXNMaW5lID0gbGluZTsKLSAg
ICAgICAgbGluZSA9IExpbmVTdGF0ZSgpOwotICAgICAgICB1cGRhdGVMaW5lQ29uc3RyYWlucyhm
bG93LCBsaW5lLCBwcmV2aW91c0xpbmUsIG51bWJlck9mUHJlY2VkaW5nTGluZXNXaXRoSHlwaGVu
LCB0ZXh0RnJhZ21lbnRJdGVyYXRvci5zdHlsZSgpLCAhbGluZUNvdW50KTsKLSAgICAgICAgaXNF
bmRPZkNvbnRlbnQgPSBjcmVhdGVMaW5lUnVucyhsaW5lLCBwcmV2aW91c0xpbmUsIHJ1bnMsIHRl
eHRGcmFnbWVudEl0ZXJhdG9yKTsKLSAgICAgICAgY2xvc2VMaW5lRW5kaW5nQW5kQWRqdXN0UnVu
cyhsaW5lLCBydW5zLCBsYXN0UnVuSW5kZXhPZlByZXZpb3VzTGluZSwgbGluZUNvdW50LCB0ZXh0
RnJhZ21lbnRJdGVyYXRvciwgaXNFbmRPZkNvbnRlbnQpOwotICAgICAgICBpZiAocnVucy5zaXpl
KCkpCi0gICAgICAgICAgICBsYXN0UnVuSW5kZXhPZlByZXZpb3VzTGluZSA9IHJ1bnMuc2l6ZSgp
IC0gMTsKLSAgICB9IHdoaWxlICghaXNFbmRPZkNvbnRlbnQpOwotfQotCi1SZWY8TGF5b3V0PiBj
cmVhdGUoUmVuZGVyQmxvY2tGbG93JiBmbG93KQotewotICAgIHVuc2lnbmVkIGxpbmVDb3VudCA9
IDA7Ci0gICAgTGF5b3V0OjpSdW5WZWN0b3IgcnVuczsKLSAgICBjcmVhdGVUZXh0UnVucyhydW5z
LCBmbG93LCBsaW5lQ291bnQpOwotICAgIHJldHVybiBMYXlvdXQ6OmNyZWF0ZShydW5zLCBsaW5l
Q291bnQsIGZsb3cpOwotfQotCi1SZWY8TGF5b3V0PiBMYXlvdXQ6OmNyZWF0ZShjb25zdCBSdW5W
ZWN0b3ImIHJ1blZlY3RvciwgdW5zaWduZWQgbGluZUNvdW50LCBjb25zdCBSZW5kZXJCbG9ja0Zs
b3cmIGJsb2NrRmxvdykKLXsKLSAgICB2b2lkKiBzbG90ID0gV1RGOjpmYXN0TWFsbG9jKHNpemVv
ZihMYXlvdXQpICsgc2l6ZW9mKFJ1bikgKiBydW5WZWN0b3Iuc2l6ZSgpKTsKLSAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyAoTm90TnVsbCwgc2xvdCkgTGF5b3V0KHJ1blZlY3RvciwgbGluZUNvdW50
LCBibG9ja0Zsb3cpKTsKLX0KLQotTGF5b3V0OjpMYXlvdXQoY29uc3QgUnVuVmVjdG9yJiBydW5W
ZWN0b3IsIHVuc2lnbmVkIGxpbmVDb3VudCwgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBibG9ja0Zs
b3cpCi0gICAgOiBtX2xpbmVDb3VudChsaW5lQ291bnQpCi0gICAgLCBtX3J1bkNvdW50KHJ1blZl
Y3Rvci5zaXplKCkpCi0gICAgLCBtX2Jsb2NrRmxvd1JlbmRlcmVyKGJsb2NrRmxvdykKLXsKLSAg
ICBtZW1jcHkobV9ydW5zLCBydW5WZWN0b3IuZGF0YSgpLCBtX3J1bkNvdW50ICogc2l6ZW9mKFJ1
bikpOwotfQotCi1jb25zdCBSdW5SZXNvbHZlciYgTGF5b3V0OjpydW5SZXNvbHZlcigpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtX3J1blJlc29sdmVyKQotICAgICAgICBtX3J1blJlc29sdmVyID0gbWFr
ZVVuaXF1ZTxSdW5SZXNvbHZlcj4obV9ibG9ja0Zsb3dSZW5kZXJlciwgKnRoaXMpOwotICAgIHJl
dHVybiAqbV9ydW5SZXNvbHZlcjsKLX0KLQotTGF5b3V0Ojp+TGF5b3V0KCkKLXsKLSAgICBzaW1w
bGVMaW5lTGF5b3V0V2lsbEJlRGVsZXRlZCgqdGhpcyk7Ci19Ci0KLX0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4ZDE2OTI2Y2VjM2IuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29u
c3RhbnRzLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmgiCi0jaW5jbHVk
ZSAiVGV4dEZsYWdzLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBDT01Q
SUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHB1c2gpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJs
ZTogNDIwMCkgLy8gRGlzYWJsZSAiemVyby1zaXplZCBhcnJheSBpbiBzdHJ1Y3QvdW5pb24iIHdh
cm5pbmcKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlbmRlckJsb2Nr
RmxvdzsKLQotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewotCi1jbGFzcyBSdW5SZXNvbHZl
cjsKLQotYm9vbCBjYW5Vc2VGb3IoY29uc3QgUmVuZGVyQmxvY2tGbG93Jik7Ci1ib29sIGNhblVz
ZUZvckFmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyQmxvY2tGbG93JiwgU3R5bGVEaWZmZXJl
bmNlKTsKLUF2b2lkYW5jZVJlYXNvbkZsYWdzIGNhblVzZUZvcldpdGhSZWFzb24oY29uc3QgUmVu
ZGVyQmxvY2tGbG93JiwgSW5jbHVkZVJlYXNvbnMpOwotCi1zdHJ1Y3QgUnVuIHsKLSNpZiBDT01Q
SUxFUihNU1ZDKQotICAgIFJ1bigpIHsgfQotI2VuZGlmCi0gICAgUnVuKHVuc2lnbmVkIHN0YXJ0
LCB1bnNpZ25lZCBlbmQsIGZsb2F0IGxvZ2ljYWxMZWZ0LCBmbG9hdCBsb2dpY2FsUmlnaHQsIGJv
b2wgaXNFbmRPZkxpbmUsIGJvb2wgaGFzSHlwaGVuLCBib29sIGlzTGluZUJyZWFrKQotICAgICAg
ICA6IGVuZChlbmQpCi0gICAgICAgICwgc3RhcnQoc3RhcnQpCi0gICAgICAgICwgaXNFbmRPZkxp
bmUoaXNFbmRPZkxpbmUpCi0gICAgICAgICwgaGFzSHlwaGVuKGhhc0h5cGhlbikKLSAgICAgICAg
LCBpc0xpbmVCcmVhayhpc0xpbmVCcmVhaykKLSAgICAgICAgLCBsb2dpY2FsTGVmdChsb2dpY2Fs
TGVmdCkKLSAgICAgICAgLCBsb2dpY2FsUmlnaHQobG9naWNhbFJpZ2h0KQotICAgIHsgfQotCi0g
ICAgdW5zaWduZWQgZW5kOwotICAgIHVuc2lnbmVkIHN0YXJ0IDogMjk7Ci0gICAgdW5zaWduZWQg
aXNFbmRPZkxpbmUgOiAxOwotICAgIHVuc2lnbmVkIGhhc0h5cGhlbiA6IDE7Ci0gICAgdW5zaWdu
ZWQgaXNMaW5lQnJlYWsgOiAxOwotICAgIGZsb2F0IGxvZ2ljYWxMZWZ0OwotICAgIGZsb2F0IGxv
Z2ljYWxSaWdodDsKLSAgICAvLyBUT0RPOiBNb3ZlIHRoZXNlIG9wdGlvbmFsIGl0ZW1zIG91dCBv
ZiBTaW1wbGVMaW5lTGF5b3V0OjpSdW4gdG8gYSBzdXBwbGVtZW50YXJ5IHN0cnVjdHVyZS4KLSAg
ICBmbG9hdCBleHBhbnNpb24geyAwIH07Ci0gICAgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9u
QmVoYXZpb3IgeyBGb3JiaWRMZWZ0RXhwYW5zaW9uIHwgRm9yYmlkUmlnaHRFeHBhbnNpb24gfTsK
LX07Ci0KLXN0cnVjdCBTaW1wbGVMaW5lU3RydXQgewotICAgIHVuc2lnbmVkIGxpbmVCcmVhazsK
LSAgICBmbG9hdCBvZmZzZXQ7Ci19OwotCi1jbGFzcyBMYXlvdXQgOiBwdWJsaWMgUmVmQ291bnRl
ZDxMYXlvdXQ+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICB1
c2luZyBSdW5WZWN0b3IgPSBWZWN0b3I8UnVuLCAxMD47Ci0gICAgdXNpbmcgU2ltcGxlTGluZVN0
cnV0cyA9IFZlY3RvcjxTaW1wbGVMaW5lU3RydXQsIDQ+OwotICAgIHN0YXRpYyBSZWY8TGF5b3V0
PiBjcmVhdGUoY29uc3QgUnVuVmVjdG9yJiwgdW5zaWduZWQgbGluZUNvdW50LCBjb25zdCBSZW5k
ZXJCbG9ja0Zsb3cmKTsKLQotICAgIH5MYXlvdXQoKTsKLQotICAgIHVuc2lnbmVkIGxpbmVDb3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNvdW50OyB9Ci0KLSAgICB1bnNpZ25lZCBydW5Db3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcnVuQ291bnQ7IH0KLSAgICBjb25zdCBSdW4mIHJ1bkF0KHVu
c2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fcnVuc1tpXTsgfQotCi0gICAgdm9pZCBzZXRJc1Bh
Z2luYXRlZCgpIHsgbV9pc1BhZ2luYXRlZCA9IHRydWU7IH0KLSAgICBib29sIGlzUGFnaW5hdGVk
KCkgY29uc3QgeyByZXR1cm4gbV9pc1BhZ2luYXRlZDsgfQotICAgIGJvb2wgaGFzTGluZVN0cnV0
cygpIGNvbnN0IHsgcmV0dXJuICFtX2xpbmVTdHJ1dHMuaXNFbXB0eSgpOyB9Ci0gICAgdm9pZCBz
ZXRMaW5lU3RydXRzKFNpbXBsZUxpbmVTdHJ1dHMmJiBsaW5lU3RydXRzKSB7IG1fbGluZVN0cnV0
cyA9IGxpbmVTdHJ1dHM7IH0KLSAgICBjb25zdCBTaW1wbGVMaW5lU3RydXRzJiBzdHJ1dHMoKSBj
b25zdCB7IHJldHVybiBtX2xpbmVTdHJ1dHM7IH0KLSAgICBjb25zdCBSdW5SZXNvbHZlciYgcnVu
UmVzb2x2ZXIoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBMYXlvdXQoY29uc3QgUnVuVmVjdG9y
JiwgdW5zaWduZWQgbGluZUNvdW50LCBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmKTsKLQotICAgIHVu
c2lnbmVkIG1fbGluZUNvdW50OwotICAgIHVuc2lnbmVkIG1fcnVuQ291bnQ7Ci0gICAgYm9vbCBt
X2lzUGFnaW5hdGVkIHsgZmFsc2UgfTsKLSAgICBTaW1wbGVMaW5lU3RydXRzIG1fbGluZVN0cnV0
czsKLSAgICBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIG1fYmxvY2tGbG93UmVuZGVyZXI7Ci0gICAg
bXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8UnVuUmVzb2x2ZXI+IG1fcnVuUmVzb2x2ZXI7Ci0gICAg
UnVuIG1fcnVuc1swXTsKLX07Ci0KLVJlZjxMYXlvdXQ+IGNyZWF0ZShSZW5kZXJCbG9ja0Zsb3cm
KTsKLQotfQotfQotCi0jaWYgQ09NUElMRVIoTVNWQykKLSNwcmFnbWEgd2FybmluZyhwb3ApCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5
b3V0Q292ZXJhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRDb3ZlcmFnZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NjgxMTYzODI4
MC4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0Q292ZXJhZ2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzcyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dENv
dmVyYWdlLmgiCi0KLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2tG
bG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRl
clN0eWxlLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgi
Ci0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlv
dXQgewotCi0jaWZuZGVmIE5ERUJVRwotc3RhdGljIHZvaWQgcHJpbnRSZWFzb24oQXZvaWRhbmNl
UmVhc29uIHJlYXNvbiwgVGV4dFN0cmVhbSYgc3RyZWFtKQotewotICAgIHN3aXRjaCAocmVhc29u
KSB7Ci0gICAgY2FzZSBGbG93SXNJbnNpZGVBTm9uTXVsdGlDb2x1bW5UaHJlYWQ6Ci0gICAgICAg
IHN0cmVhbSA8PCAiZmxvdyBpcyBpbnNpZGUgYSBub24tbXVsdGljb2x1bW4gY29udGFpbmVyIjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzSG9yaXpvbmFsV3JpdGluZ01vZGU6Ci0g
ICAgICAgIHN0cmVhbSA8PCAiaG9yaXpvbnRhbCB3cml0aW5nIG1vZGUiOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZsb3dIYXNPdXRsaW5lOgotICAgICAgICBzdHJlYW0gPDwgIm91dGxpbmUi
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dJc1J1Ynk6Ci0gICAgICAgIHN0cmVhbSA8
PCAicnVieSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc0hhbmdpbmdQdW5jdHVh
dGlvbjoKLSAgICAgICAgc3RyZWFtIDw8ICJoYW5naW5nIHB1bmN0dWF0aW9uIjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGbG93SXNQYWdpbmF0ZWQ6Ci0gICAgICAgIHN0cmVhbSA8PCAicGFn
aW5hdGVkIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzVGV4dE92ZXJmbG93Ogot
ICAgICAgICBzdHJlYW0gPDwgInRleHQtb3ZlcmZsb3ciOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZsb3dJc0RlcHJpY2F0ZWRGbGV4Qm94OgotICAgICAgICBzdHJlYW0gPDwgImRlcHJpY2F0
ZWRGbGV4Qm94IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93UGFyZW50SXNQbGFjZWhv
bGRlckVsZW1lbnQ6Ci0gICAgICAgIHN0cmVhbSA8PCAicGxhY2Vob2xkZXIgZWxlbWVudCI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd1BhcmVudElzVGV4dEFyZWFXaXRoV3JhcHBpbmc6
Ci0gICAgICAgIHN0cmVhbSA8PCAid3JhcHBpbmcgdGV4dGFyZWEiOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZsb3dIYXNOb25TdXBwb3J0ZWRDaGlsZDoKLSAgICAgICAgc3RyZWFtIDw8ICJu
ZXN0ZWQgcmVuZGVyZXJzIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzVW5zdXBw
b3J0ZWRGbG9hdDoKLSAgICAgICAgc3RyZWFtIDw8ICJjb21wbGljYXRlZCBmbG9hdCI7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc1Vuc3VwcG9ydGVkVW5kZXJsaW5lRGVjb3JhdGlv
bjoKLSAgICAgICAgc3RyZWFtIDw8ICJ0ZXh0LXVuZGVybGluZS1wb3NpdGlvbjogdW5kZXIiOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNKdXN0aWZpZWROb25MYXRpblRleHQ6Ci0g
ICAgICAgIHN0cmVhbSA8PCAidGV4dC1hbGlnbjoganVzdGlmeSB3aXRoIG5vbi1sYXRpbiB0ZXh0
IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzT3ZlcmZsb3dOb3RWaXNpYmxlOgot
ICAgICAgICBzdHJlYW0gPDwgIm92ZXJmbG93OiBoaWRkZW4gfCBzY3JvbGwgfCBhdXRvIjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzV2ViS2l0TkJTUE1vZGU6Ci0gICAgICAgIHN0
cmVhbSA8PCAiLXdlYmtpdC1uYnNwLW1vZGU6IHNwYWNlIjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGbG93SXNOb3RMVFI6Ci0gICAgICAgIHN0cmVhbSA8PCAiZGlyIGlzIG5vdCBMVFIiOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNMaW5lQm94Q29udGFpblByb3BlcnR5Ogot
ICAgICAgICBzdHJlYW0gPDwgImxpbmUtYm94LWNvbnRhaW4gdmFsdWUgaW5kaWNhdGVzIHZhcmlh
YmxlIGxpbmUgaGVpZ2h0IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SXNOb3RUb3BU
b0JvdHRvbToKLSAgICAgICAgc3RyZWFtIDw8ICJub24gdG9wLXRvLWJvdHRvbSBmbG93IjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzTGluZUJyZWFrOgotICAgICAgICBzdHJlYW0g
PDwgImxpbmUtYnJlYWsgcHJvcGVydHkiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dI
YXNOb25Ob3JtYWxVbmljb2RlQmlEaToKLSAgICAgICAgc3RyZWFtIDw8ICJub24tbm9ybWFsIFVu
aWNvZGUgYmlkaSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc1JUTE9yZGVyaW5n
OgotICAgICAgICBzdHJlYW0gPDwgIi13ZWJraXQtcnRsLW9yZGVyaW5nIjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBGbG93SGFzTGluZUFsaWduRWRnZXM6Ci0gICAgICAgIHN0cmVhbSA8PCAi
LXdlYmtpdC1saW5lLWFsaWduIGVkZ2VzIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93
SGFzTGluZVNuYXA6Ci0gICAgICAgIHN0cmVhbSA8PCAiLXdlYmtpdC1saW5lLXNuYXAgcHJvcGVy
dHkiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNUZXh0RW1waGFzaXNGaWxsT3JN
YXJrOgotICAgICAgICBzdHJlYW0gPDwgInRleHQtZW1waGFzaXMgKGZpbGwvbWFyaykiOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNQc2V1ZG9GaXJzdExpbmU6Ci0gICAgICAgIHN0
cmVhbSA8PCAiZmlyc3QtbGluZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc1Bz
ZXVkb0ZpcnN0TGV0dGVyOgotICAgICAgICBzdHJlYW0gPDwgImZpcnN0LWxldHRlciI7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc1RleHRDb21iaW5lOgotICAgICAgICBzdHJlYW0g
PDwgInRleHQgY29tYmluZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc1RleHRG
aWxsQm94OgotICAgICAgICBzdHJlYW0gPDwgImJhY2tncm91bmQtY29sb3IgKHRleHQtZmlsbCki
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNCb3JkZXJGaXRMaW5lczoKLSAgICAg
ICAgc3RyZWFtIDw8ICItd2Via2l0LWJvcmRlci1maXQiOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZsb3dIYXNOb25BdXRvTGluZUJyZWFrOgotICAgICAgICBzdHJlYW0gPDwgImxpbmUtYnJl
YWsgaXMgbm90IGF1dG8iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNUZXh0U2Vj
dXJpdHk6Ci0gICAgICAgIHN0cmVhbSA8PCAidGV4dC1zZWN1cml0eSBpcyBub3Qgbm9uZSI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc1NWR0ZvbnQ6Ci0gICAgICAgIHN0cmVhbSA8
PCAiU1ZHIGZvbnQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dUZXh0SGFzU29mdEh5
cGhlbjoKLSAgICAgICAgc3RyZWFtIDw8ICJzb2Z0IGh5cGhlbiBjaGFyYWN0ZXIiOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEZsb3dUZXh0SGFzRGlyZWN0aW9uQ2hhcmFjdGVyOgotICAgICAg
ICBzdHJlYW0gPDwgImRpcmVjdGlvbiBjaGFyYWN0ZXIiOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZsb3dJc01pc3NpbmdQcmltYXJ5Rm9udDoKLSAgICAgICAgc3RyZWFtIDw8ICJtaXNzaW5n
IHByaW1hcnkgZm9udCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd1ByaW1hcnlGb250
SXNJbnN1ZmZpY2llbnQ6Ci0gICAgICAgIHN0cmVhbSA8PCAibWlzc2luZyBnbHlwaCBvciBnbHlw
aCBuZWVkcyBhbm90aGVyIGZvbnQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dUZXh0
SXNDb21iaW5lVGV4dDoKLSAgICAgICAgc3RyZWFtIDw8ICJ0ZXh0IGlzIGNvbWJpbmUiOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dUZXh0SXNSZW5kZXJDb3VudGVyOgotICAgICAgICBz
dHJlYW0gPDwgInVuc3VwcG9ydGVkIFJlbmRlckNvdW50ZXIiOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZsb3dUZXh0SXNSZW5kZXJRdW90ZToKLSAgICAgICAgc3RyZWFtIDw8ICJ1bnN1cHBv
cnRlZCBSZW5kZXJRdW90ZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd1RleHRJc1Rl
eHRGcmFnbWVudDoKLSAgICAgICAgc3RyZWFtIDw8ICJ1bnN1cHBvcnRlZCBUZXh0RnJhZ21lbnQi
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dUZXh0SXNTVkdJbmxpbmVUZXh0OgotICAg
ICAgICBzdHJlYW0gPDwgInVuc3VwcG9ydGVkIFNWR0lubGluZVRleHQiOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZsb3dIYXNDb21wbGV4Rm9udENvZGVQYXRoOgotICAgICAgICBzdHJlYW0g
PDwgInRleHQgd2l0aCBjb21wbGV4IGZvbnQgY29kZXBhdGgiOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZsb3dIYXNUZXh0U2hhZG93OgotICAgICAgICBzdHJlYW0gPDwgInRleHQtc2hhZG93
IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93Q2hpbGRJc1NlbGVjdGVkOgotICAgICAg
ICBzdHJlYW0gPDwgInNlbGVjdGVkIGNvbnRlbnQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEZsb3dGb250SGFzT3ZlcmZsb3dHbHlwaDoKLSAgICAgICAgc3RyZWFtIDw8ICItd2Via2l0LWxp
bmUtYm94LWNvbnRhaW46IGdseXBocyB3aXRoIG92ZXJmbG93aW5nIHRleHQuIjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGbG93VGV4dEhhc1N1cnJvZ2F0ZVBhaXI6Ci0gICAgICAgIHN0cmVh
bSA8PCAic3Vycm9nYXRlIHBhaXIiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE11bHRpQ29s
dW1uRmxvd0lzTm90VG9wTGV2ZWw6Ci0gICAgICAgIHN0cmVhbSA8PCAibm9uIHRvcCBsZXZlbCBj
b2x1bW4iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE11bHRpQ29sdW1uRmxvd0hhc0NvbHVt
blNwYW5uZXI6Ci0gICAgICAgIHN0cmVhbSA8PCAiY29sdW1uIGhhcyBzcGFubmVyIjsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBNdWx0aUNvbHVtbkZsb3dWZXJ0aWNhbEFsaWduOgotICAgICAg
ICBzdHJlYW0gPDwgImNvbHVtbiB3aXRoIHZlcnRpY2FsLWFsaWduICE9IGJhc2VsaW5lIjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNdWx0aUNvbHVtbkZsb3dJc0Zsb2F0aW5nOgotICAgICAg
ICBzdHJlYW0gPDwgImNvbHVtbiB3aXRoIGZsb2F0aW5nIG9iamVjdHMiOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZsb3dJbmNsdWRlc0RvY3VtZW50TWFya2VyczoKLSAgICAgICAgc3RyZWFt
IDw8ICJ0ZXh0IGluY2x1ZGVzIGRvY3VtZW50IG1hcmtlcnMiOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZsb3dUZXh0SXNFbXB0eToKLSAgICBjYXNlIEZsb3dIYXNOb0NoaWxkOgotICAgIGNh
c2UgRmxvd0hhc05vUGFyZW50OgotICAgIGNhc2UgRmVhdHVyZUlzRGlzYWJsZWQ6Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBwcmludFJlYXNv
bnMoQXZvaWRhbmNlUmVhc29uRmxhZ3MgcmVhc29ucywgVGV4dFN0cmVhbSYgc3RyZWFtKQotewot
ICAgIGJvb2wgZmlyc3QgPSB0cnVlOwotICAgIGZvciAoYXV0byByZWFzb25JdGVtID0gRW5kT2ZS
ZWFzb25zID4+IDE7IHJlYXNvbkl0ZW0gIT0gTm9SZWFzb247IHJlYXNvbkl0ZW0gPj49IDEpIHsK
LSAgICAgICAgaWYgKCEocmVhc29ucyAmIHJlYXNvbkl0ZW0pKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIHN0cmVhbSA8PCAoZmlyc3QgPyAiICIgOiAiLCAiKTsKLSAgICAgICAgZmly
c3QgPSBmYWxzZTsKLSAgICAgICAgcHJpbnRSZWFzb24ocmVhc29uSXRlbSwgc3RyZWFtKTsKLSAg
ICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50VGV4dEZvclN1YnRyZWUoY29uc3QgUmVuZGVyT2Jq
ZWN0JiByZW5kZXJlciwgdW5zaWduZWQmIGNoYXJhY3RlcnNMZWZ0LCBUZXh0U3RyZWFtJiBzdHJl
YW0pCi17Ci0gICAgaWYgKCFjaGFyYWN0ZXJzTGVmdCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
IChpczxSZW5kZXJUZXh0PihyZW5kZXJlcikpIHsKLSAgICAgICAgU3RyaW5nIHRleHQgPSBkb3du
Y2FzdDxSZW5kZXJUZXh0PihyZW5kZXJlcikudGV4dCgpOwotICAgICAgICB0ZXh0ID0gdGV4dC5z
dHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgdW5zaWduZWQgbGVuID0gc3RkOjptaW4oY2hhcmFj
dGVyc0xlZnQsIHRleHQubGVuZ3RoKCkpOwotICAgICAgICBzdHJlYW0gPDwgdGV4dC5sZWZ0KGxl
bik7Ci0gICAgICAgIGNoYXJhY3RlcnNMZWZ0IC09IGxlbjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpZiAoIWlzPFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGZvciAoY29uc3QgYXV0byogY2hpbGQgPSBkb3duY2FzdDxSZW5kZXJFbGVtZW50Pihy
ZW5kZXJlcikuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KSkKLSAgICAgICAgcHJpbnRUZXh0Rm9yU3VidHJlZSgqY2hpbGQsIGNoYXJhY3RlcnNMZWZ0LCBz
dHJlYW0pOwotfQotCi1zdGF0aWMgdW5zaWduZWQgdGV4dExlbmd0aEZvclN1YnRyZWUoY29uc3Qg
UmVuZGVyT2JqZWN0JiByZW5kZXJlcikKLXsKLSAgICBpZiAoaXM8UmVuZGVyVGV4dD4ocmVuZGVy
ZXIpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGV4dD4ocmVuZGVyZXIpLnRleHQo
KS5sZW5ndGgoKTsKLSAgICBpZiAoIWlzPFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IDA7Ci0gICAgZm9yIChjb25z
dCBhdXRvKiBjaGlsZCA9IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKS5maXJzdENo
aWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICB0ZXh0
TGVuZ3RoICs9IHRleHRMZW5ndGhGb3JTdWJ0cmVlKCpjaGlsZCk7Ci0gICAgcmV0dXJuIHRleHRM
ZW5ndGg7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbGxlY3ROb25FbXB0eUxlYWZSZW5kZXJCbG9ja0Zs
b3dzKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIEhhc2hTZXQ8Y29uc3QgUmVuZGVyQmxv
Y2tGbG93Kj4mIGxlYWZSZW5kZXJlcnMpCi17Ci0gICAgaWYgKGlzPFJlbmRlclRleHQ+KHJlbmRl
cmVyKSkgewotICAgICAgICBpZiAoIWRvd25jYXN0PFJlbmRlclRleHQ+KHJlbmRlcmVyKS50ZXh0
KCkubGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIC8vIEZpbmQgUmVuZGVy
QmxvY2tGbG93IGFuY2VzdG9yLgotICAgICAgICBmb3IgKGNvbnN0IGF1dG8qIGN1cnJlbnQgPSBy
ZW5kZXJlci5wYXJlbnQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudCgpKSB7
Ci0gICAgICAgICAgICBpZiAoIWlzPFJlbmRlckJsb2NrRmxvdz4oY3VycmVudCkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBsZWFmUmVuZGVyZXJzLmFkZChkb3duY2Fz
dDxSZW5kZXJCbG9ja0Zsb3c+KGN1cnJlbnQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFpczxSZW5kZXJFbGVtZW50Pihy
ZW5kZXJlcikpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKGNvbnN0IGF1dG8qIGNoaWxkID0g
ZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNvbGxlY3ROb25FbXB0eUxlYWZS
ZW5kZXJCbG9ja0Zsb3dzKCpjaGlsZCwgbGVhZlJlbmRlcmVycyk7Ci19Ci0KLXN0YXRpYyB2b2lk
IGNvbGxlY3ROb25FbXB0eUxlYWZSZW5kZXJCbG9ja0Zsb3dzRm9yQ3VycmVudFBhZ2UoSGFzaFNl
dDxjb25zdCBSZW5kZXJCbG9ja0Zsb3cqPiYgbGVhZlJlbmRlcmVycykKLXsKLSAgICBmb3IgKGNv
bnN0IGF1dG8qIGRvY3VtZW50IDogRG9jdW1lbnQ6OmFsbERvY3VtZW50cygpKSB7Ci0gICAgICAg
IGlmICghZG9jdW1lbnQtPnJlbmRlclZpZXcoKSB8fCBkb2N1bWVudC0+YmFja0ZvcndhcmRDYWNo
ZVN0YXRlKCkgIT0gRG9jdW1lbnQ6Ok5vdEluQmFja0ZvcndhcmRDYWNoZSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAoIWRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpICYmICFk
b2N1bWVudC0+aXNYSFRNTERvY3VtZW50KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgY29sbGVjdE5vbkVtcHR5TGVhZlJlbmRlckJsb2NrRmxvd3MoKmRvY3VtZW50LT5yZW5kZXJW
aWV3KCksIGxlYWZSZW5kZXJlcnMpOwotICAgIH0KLX0KLQotdm9pZCB0b2dnbGVTaW1wbGVMaW5l
TGF5b3V0KCkKLXsKLSAgICBmb3IgKGF1dG8qIGRvY3VtZW50IDogRG9jdW1lbnQ6OmFsbERvY3Vt
ZW50cygpKSB7Ci0gICAgICAgIGF1dG8mIHNldHRpbmdzID0gZG9jdW1lbnQtPm11dGFibGVTZXR0
aW5ncygpOwotICAgICAgICBzZXR0aW5ncy5zZXRTaW1wbGVMaW5lTGF5b3V0RW5hYmxlZCghc2V0
dGluZ3Muc2ltcGxlTGluZUxheW91dEVuYWJsZWQoKSk7Ci0gICAgfQotfQotCi12b2lkIHByaW50
U2ltcGxlTGluZUxheW91dEJsb2NrTGlzdCgpCi17Ci0gICAgSGFzaFNldDxjb25zdCBSZW5kZXJC
bG9ja0Zsb3cqPiBsZWFmUmVuZGVyZXJzOwotICAgIGNvbGxlY3ROb25FbXB0eUxlYWZSZW5kZXJC
bG9ja0Zsb3dzRm9yQ3VycmVudFBhZ2UobGVhZlJlbmRlcmVycyk7Ci0gICAgaWYgKCFsZWFmUmVu
ZGVyZXJzLnNpemUoKSkgewotICAgICAgICBXVEZMb2dBbHdheXMoIk5vIHRleHQgZm91bmQgaW4g
dGhpcyBkb2N1bWVudFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgVGV4dFN0cmVh
bSBzdHJlYW07Ci0gICAgc3RyZWFtIDw8ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7Ci0gICAgZm9yIChjb25zdCBhdXRvKiBmbG93IDogbGVh
ZlJlbmRlcmVycykgewotICAgICAgICBhdXRvIHJlYXNvbiA9IGNhblVzZUZvcldpdGhSZWFzb24o
KmZsb3csIEluY2x1ZGVSZWFzb25zOjpBbGwpOwotICAgICAgICBpZiAocmVhc29uID09IE5vUmVh
c29uKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVuc2lnbmVkIHByaW50ZWRMZW5n
dGggPSAzMDsKLSAgICAgICAgc3RyZWFtIDw8ICJcIiI7Ci0gICAgICAgIHByaW50VGV4dEZvclN1
YnRyZWUoKmZsb3csIHByaW50ZWRMZW5ndGgsIHN0cmVhbSk7Ci0gICAgICAgIGZvciAoO3ByaW50
ZWRMZW5ndGggPiAwOyAtLXByaW50ZWRMZW5ndGgpCi0gICAgICAgICAgICBzdHJlYW0gPDwgIiAi
OwotICAgICAgICBzdHJlYW0gPDwgIlwiKCIgPDwgdGV4dExlbmd0aEZvclN1YnRyZWUoKmZsb3cp
IDw8ICIpOiI7Ci0gICAgICAgIHByaW50UmVhc29ucyhyZWFzb24sIHN0cmVhbSk7Ci0gICAgICAg
IHN0cmVhbSA8PCAiXG4iOwotICAgIH0KLSAgICBzdHJlYW0gPDwgIi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKLSAgICBXVEZMb2dBbHdheXMo
IiVzIiwgc3RyZWFtLnJlbGVhc2UoKS51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBwcmludFNp
bXBsZUxpbmVMYXlvdXRDb3ZlcmFnZSgpCi17Ci0gICAgSGFzaFNldDxjb25zdCBSZW5kZXJCbG9j
a0Zsb3cqPiBsZWFmUmVuZGVyZXJzOwotICAgIGNvbGxlY3ROb25FbXB0eUxlYWZSZW5kZXJCbG9j
a0Zsb3dzRm9yQ3VycmVudFBhZ2UobGVhZlJlbmRlcmVycyk7Ci0gICAgaWYgKCFsZWFmUmVuZGVy
ZXJzLnNpemUoKSkgewotICAgICAgICBXVEZMb2dBbHdheXMoIk5vIHRleHQgZm91bmQgaW4gdGhp
cyBkb2N1bWVudFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgVGV4dFN0cmVhbSBz
dHJlYW07Ci0gICAgSGFzaE1hcDxBdm9pZGFuY2VSZWFzb24sIHVuc2lnbmVkPiBmbG93U3RhdGlz
dGljczsKLSAgICB1bnNpZ25lZCB0ZXh0TGVuZ3RoID0gMDsKLSAgICB1bnNpZ25lZCB1bnN1cHBv
cnRlZFRleHRMZW5ndGggPSAwOwotICAgIHVuc2lnbmVkIG51bWJlck9mVW5zdXBwb3J0ZWRMZWFm
QmxvY2tzID0gMDsKLSAgICB1bnNpZ25lZCBzdXBwb3J0ZWRCdXRGb3JjZWRUb0xpbmVMYXlvdXRU
ZXh0TGVuZ3RoID0gMDsKLSAgICB1bnNpZ25lZCBudW1iZXJPZlN1cHBvcnRlZEJ1dEZvcmNlZFRv
TGluZUxheW91dExlYWZCbG9ja3MgPSAwOwotICAgIGZvciAoY29uc3QgYXV0byogZmxvdyA6IGxl
YWZSZW5kZXJlcnMpIHsKLSAgICAgICAgYXV0byBmbG93TGVuZ3RoID0gdGV4dExlbmd0aEZvclN1
YnRyZWUoKmZsb3cpOwotICAgICAgICB0ZXh0TGVuZ3RoICs9IGZsb3dMZW5ndGg7Ci0gICAgICAg
IGF1dG8gcmVhc29ucyA9IGNhblVzZUZvcldpdGhSZWFzb24oKmZsb3csIEluY2x1ZGVSZWFzb25z
OjpBbGwpOwotICAgICAgICBpZiAocmVhc29ucyA9PSBOb1JlYXNvbikgewotICAgICAgICAgICAg
aWYgKGZsb3ctPmxpbmVMYXlvdXRQYXRoKCkgPT0gUmVuZGVyQmxvY2tGbG93OjpGb3JjZUxpbmVC
b3hlc1BhdGgpIHsKLSAgICAgICAgICAgICAgICBzdXBwb3J0ZWRCdXRGb3JjZWRUb0xpbmVMYXlv
dXRUZXh0TGVuZ3RoICs9IGZsb3dMZW5ndGg7Ci0gICAgICAgICAgICAgICAgKytudW1iZXJPZlN1
cHBvcnRlZEJ1dEZvcmNlZFRvTGluZUxheW91dExlYWZCbG9ja3M7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICArK251bWJlck9mVW5zdXBw
b3J0ZWRMZWFmQmxvY2tzOwotICAgICAgICB1bnN1cHBvcnRlZFRleHRMZW5ndGggKz0gZmxvd0xl
bmd0aDsKLSAgICAgICAgZm9yIChhdXRvIHJlYXNvbkl0ZW0gPSBFbmRPZlJlYXNvbnMgPj4gMTsg
cmVhc29uSXRlbSAhPSBOb1JlYXNvbjsgcmVhc29uSXRlbSA+Pj0gMSkgewotICAgICAgICAgICAg
aWYgKCEocmVhc29ucyAmIHJlYXNvbkl0ZW0pKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBmbG93U3RhdGlzdGljcy5hZGQocmVhc29uSXRlbSwg
Zmxvd0xlbmd0aCk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAg
ICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gZmxvd0xlbmd0aDsKLSAgICAgICAg
fQotICAgIH0KLSAgICBzdHJlYW0gPDwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKLSAgICBzdHJlYW0gPDwgIk51bWJlciBvZiBibG9ja3M6
IHRvdGFsKCIgPDwgIGxlYWZSZW5kZXJlcnMuc2l6ZSgpIDw8ICIpIG5vbi1zaW1wbGUoIiA8PCBu
dW1iZXJPZlVuc3VwcG9ydGVkTGVhZkJsb2NrcyA8PCAiKVxuQ29udGVudCBsZW5ndGg6IHRvdGFs
KCIgPDwKLSAgICAgICAgdGV4dExlbmd0aCA8PCAiKSBub24tc2ltcGxlKCIgPDwgdW5zdXBwb3J0
ZWRUZXh0TGVuZ3RoIDw8ICIpXG4iOwotICAgIGZvciAoY29uc3QgYXV0byYgcmVhc29uRW50cnkg
OiBmbG93U3RhdGlzdGljcykgewotICAgICAgICBwcmludFJlYXNvbihyZWFzb25FbnRyeS5rZXks
IHN0cmVhbSk7Ci0gICAgICAgIHN0cmVhbSA8PCAiOiAiIDw8IChmbG9hdClyZWFzb25FbnRyeS52
YWx1ZSAvIChmbG9hdCl0ZXh0TGVuZ3RoICogMTAwIDw8ICIlXG4iOwotICAgIH0KLSAgICBpZiAo
c3VwcG9ydGVkQnV0Rm9yY2VkVG9MaW5lTGF5b3V0VGV4dExlbmd0aCkgewotICAgICAgICBzdHJl
YW0gPDwgIlNpbXBsZSBsaW5lIGxheW91dCBwb3RlbnRpYWwgY292ZXJhZ2U6ICIgPDwgKGZsb2F0
KSh0ZXh0TGVuZ3RoIC0gdW5zdXBwb3J0ZWRUZXh0TGVuZ3RoKSAvIChmbG9hdCl0ZXh0TGVuZ3Ro
ICogMTAwIDw8ICIlXG5cbiI7Ci0gICAgICAgIHN0cmVhbSA8PCAiU2ltcGxlIGxpbmUgbGF5b3V0
IGFjdHVhbCBjb3ZlcmFnZTogIiA8PCAoZmxvYXQpKHRleHRMZW5ndGggLSB1bnN1cHBvcnRlZFRl
eHRMZW5ndGggLSBzdXBwb3J0ZWRCdXRGb3JjZWRUb0xpbmVMYXlvdXRUZXh0TGVuZ3RoKSAvIChm
bG9hdCl0ZXh0TGVuZ3RoICogMTAwIDw8ICIlXG5Gb3JjZWQgbGluZSBsYXlvdXQgYmxvY2tzOiAi
IDw8IG51bWJlck9mU3VwcG9ydGVkQnV0Rm9yY2VkVG9MaW5lTGF5b3V0TGVhZkJsb2NrcyA8PCAi
IGNvbnRlbnQgbGVuZ3RoOiAiIDw8IHN1cHBvcnRlZEJ1dEZvcmNlZFRvTGluZUxheW91dFRleHRM
ZW5ndGggPDwgIigiIDw8IChmbG9hdClzdXBwb3J0ZWRCdXRGb3JjZWRUb0xpbmVMYXlvdXRUZXh0
TGVuZ3RoIC8gKGZsb2F0KXRleHRMZW5ndGggKiAxMDAgPDwgIiUpIjsKLSAgICB9IGVsc2UKLSAg
ICAgICAgc3RyZWFtIDw8ICJTaW1wbGUgbGluZSBsYXlvdXQgY292ZXJhZ2U6ICIgPDwgKGZsb2F0
KSh0ZXh0TGVuZ3RoIC0gdW5zdXBwb3J0ZWRUZXh0TGVuZ3RoKSAvIChmbG9hdCl0ZXh0TGVuZ3Ro
ICogMTAwIDw8ICIlIjsKLSAgICBzdHJlYW0gPDwgIlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iOwotICAgIFdURkxvZ0Fsd2F5cygiJXMiLCBz
dHJlYW0ucmVsZWFzZSgpLnV0ZjgoKS5kYXRhKCkpOwotfQotI2VuZGlmCi0KLX0KLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgyNGU5NTBjNGEwLi4wMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewot
Ci0jaWZuZGVmIE5ERUJVRwotdm9pZCBwcmludFNpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZSgpOwot
dm9pZCBwcmludFNpbXBsZUxpbmVMYXlvdXRCbG9ja0xpc3QoKTsKLXZvaWQgdG9nZ2xlU2ltcGxl
TGluZUxheW91dCgpOwotI2VuZGlmCi0KLWVudW0gQXZvaWRhbmNlUmVhc29uXyA6IHVpbnQ2NF90
IHsKLSAgICBGbG93SXNJbnNpZGVBTm9uTXVsdGlDb2x1bW5UaHJlYWQgICAgID0gMUxMVSAgPDwg
MCwKLSAgICBGbG93SGFzSG9yaXpvbmFsV3JpdGluZ01vZGUgICAgICAgICAgID0gMUxMVSAgPDwg
MSwKLSAgICBGbG93SGFzT3V0bGluZSAgICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwg
MiwKLSAgICBGbG93SXNSdWJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwg
MywKLSAgICBGbG93SXNQYWdpbmF0ZWQgICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwg
NCwKLSAgICBGbG93SGFzVGV4dE92ZXJmbG93ICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwg
NSwKLSAgICBGbG93SXNEZXByaWNhdGVkRmxleEJveCAgICAgICAgICAgICAgID0gMUxMVSAgPDwg
NiwKLSAgICBGbG93UGFyZW50SXNQbGFjZWhvbGRlckVsZW1lbnQgICAgICAgID0gMUxMVSAgPDwg
NywKLSAgICBGbG93UGFyZW50SXNUZXh0QXJlYVdpdGhXcmFwcGluZyAgICAgID0gMUxMVSAgPDwg
OCwKLSAgICBGbG93SGFzTm9uU3VwcG9ydGVkQ2hpbGQgICAgICAgICAgICAgID0gMUxMVSAgPDwg
OSwKLSAgICBGbG93SGFzVW5zdXBwb3J0ZWRGbG9hdCAgICAgICAgICAgICAgID0gMUxMVSAgPDwg
MTAsCi0gICAgRmxvd0hhc1Vuc3VwcG9ydGVkVW5kZXJsaW5lRGVjb3JhdGlvbiA9IDFMTFUgIDw8
IDExLAotICAgIEZsb3dIYXNKdXN0aWZpZWROb25MYXRpblRleHQgICAgICAgICAgPSAxTExVICA8
PCAxMiwKLSAgICBGbG93SGFzT3ZlcmZsb3dOb3RWaXNpYmxlICAgICAgICAgICAgID0gMUxMVSAg
PDwgMTMsCi0gICAgRmxvd0hhc1dlYktpdE5CU1BNb2RlICAgICAgICAgICAgICAgICA9IDFMTFUg
IDw8IDE0LAotICAgIEZsb3dJc05vdExUUiAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxTExV
ICA8PCAxNSwKLSAgICBGbG93SGFzTGluZUJveENvbnRhaW5Qcm9wZXJ0eSAgICAgICAgID0gMUxM
VSAgPDwgMTYsCi0gICAgRmxvd0lzTm90VG9wVG9Cb3R0b20gICAgICAgICAgICAgICAgICA9IDFM
TFUgIDw8IDE3LAotICAgIEZsb3dIYXNMaW5lQnJlYWsgICAgICAgICAgICAgICAgICAgICAgPSAx
TExVICA8PCAxOCwKLSAgICBGbG93SGFzTm9uTm9ybWFsVW5pY29kZUJpRGkgICAgICAgICAgID0g
MUxMVSAgPDwgMTksCi0gICAgRmxvd0hhc1JUTE9yZGVyaW5nICAgICAgICAgICAgICAgICAgICA9
IDFMTFUgIDw8IDIwLAotICAgIEZsb3dIYXNMaW5lQWxpZ25FZGdlcyAgICAgICAgICAgICAgICAg
PSAxTExVICA8PCAyMSwKLSAgICBGbG93SGFzTGluZVNuYXAgICAgICAgICAgICAgICAgICAgICAg
ID0gMUxMVSAgPDwgMjIsCi0gICAgRmxvd0hhc1RleHRFbXBoYXNpc0ZpbGxPck1hcmsgICAgICAg
ICA9IDFMTFUgIDw8IDIzLAotICAgIEZsb3dIYXNUZXh0U2hhZG93ICAgICAgICAgICAgICAgICAg
ICAgPSAxTExVICA8PCAyNCwKLSAgICBGbG93SGFzUHNldWRvRmlyc3RMaW5lICAgICAgICAgICAg
ICAgID0gMUxMVSAgPDwgMjUsCi0gICAgRmxvd0hhc1BzZXVkb0ZpcnN0TGV0dGVyICAgICAgICAg
ICAgICA9IDFMTFUgIDw8IDI2LAotICAgIEZsb3dIYXNUZXh0Q29tYmluZSAgICAgICAgICAgICAg
ICAgICAgPSAxTExVICA8PCAyNywKLSAgICBGbG93SGFzVGV4dEZpbGxCb3ggICAgICAgICAgICAg
ICAgICAgID0gMUxMVSAgPDwgMjgsCi0gICAgRmxvd0hhc0JvcmRlckZpdExpbmVzICAgICAgICAg
ICAgICAgICA9IDFMTFUgIDw8IDI5LAotICAgIEZsb3dIYXNOb25BdXRvTGluZUJyZWFrICAgICAg
ICAgICAgICAgPSAxTExVICA8PCAzMCwKLSAgICBGbG93SGFzVGV4dFNlY3VyaXR5ICAgICAgICAg
ICAgICAgICAgID0gMUxMVSAgPDwgMzEsCi0gICAgRmxvd0hhc1NWR0ZvbnQgICAgICAgICAgICAg
ICAgICAgICAgICA9IDFMTFUgIDw8IDMyLAotICAgIEZsb3dUZXh0SXNFbXB0eSAgICAgICAgICAg
ICAgICAgICAgICAgPSAxTExVICA8PCAzMywKLSAgICBGbG93VGV4dEhhc1NvZnRIeXBoZW4gICAg
ICAgICAgICAgICAgID0gMUxMVSAgPDwgMzQsCi0gICAgRmxvd1RleHRIYXNEaXJlY3Rpb25DaGFy
YWN0ZXIgICAgICAgICA9IDFMTFUgIDw8IDM1LAotICAgIEZsb3dJc01pc3NpbmdQcmltYXJ5Rm9u
dCAgICAgICAgICAgICAgPSAxTExVICA8PCAzNiwKLSAgICBGbG93UHJpbWFyeUZvbnRJc0luc3Vm
ZmljaWVudCAgICAgICAgID0gMUxMVSAgPDwgMzcsCi0gICAgRmxvd1RleHRJc0NvbWJpbmVUZXh0
ICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDM4LAotICAgIEZsb3dUZXh0SXNSZW5kZXJDb3Vu
dGVyICAgICAgICAgICAgICAgPSAxTExVICA8PCAzOSwKLSAgICBGbG93VGV4dElzUmVuZGVyUXVv
dGUgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgNDAsCi0gICAgRmxvd1RleHRJc1RleHRGcmFn
bWVudCAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDQxLAotICAgIEZsb3dUZXh0SXNTVkdJbmxp
bmVUZXh0ICAgICAgICAgICAgICAgPSAxTExVICA8PCA0MiwKLSAgICBGbG93SGFzQ29tcGxleEZv
bnRDb2RlUGF0aCAgICAgICAgICAgID0gMUxMVSAgPDwgNDMsCi0gICAgRmVhdHVyZUlzRGlzYWJs
ZWQgICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDQ0LAotICAgIEZsb3dIYXNOb1BhcmVu
dCAgICAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCA0NSwKLSAgICBGbG93SGFzTm9DaGls
ZCAgICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgNDYsCi0gICAgRmxvd0NoaWxkSXNT
ZWxlY3RlZCAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDQ3LAotICAgIEZsb3dIYXNIYW5n
aW5nUHVuY3R1YXRpb24gICAgICAgICAgICAgPSAxTExVICA8PCA0OCwKLSAgICBGbG93Rm9udEhh
c092ZXJmbG93R2x5cGggICAgICAgICAgICAgID0gMUxMVSAgPDwgNDksCi0gICAgRmxvd1RleHRI
YXNTdXJyb2dhdGVQYWlyICAgICAgICAgICAgICA9IDFMTFUgIDw8IDUwLAotICAgIE11bHRpQ29s
dW1uRmxvd0lzTm90VG9wTGV2ZWwgICAgICAgICAgPSAxTExVICA8PCA1MSwKLSAgICBNdWx0aUNv
bHVtbkZsb3dIYXNDb2x1bW5TcGFubmVyICAgICAgID0gMUxMVSAgPDwgNTIsCi0gICAgTXVsdGlD
b2x1bW5GbG93VmVydGljYWxBbGlnbiAgICAgICAgICA9IDFMTFUgIDw8IDUzLAotICAgIE11bHRp
Q29sdW1uRmxvd0lzRmxvYXRpbmcgICAgICAgICAgICAgPSAxTExVICA8PCA1NCwKLSAgICBGbG93
SW5jbHVkZXNEb2N1bWVudE1hcmtlcnMgICAgICAgICAgID0gMUxMVSAgPDwgNTUsCi0gICAgRW5k
T2ZSZWFzb25zICAgICAgICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDU2Ci19OwotY29u
c3QgdW5zaWduZWQgTm9SZWFzb24gPSAwOwotCi10eXBlZGVmIHVpbnQ2NF90IEF2b2lkYW5jZVJl
YXNvbjsKLXR5cGVkZWYgdWludDY0X3QgQXZvaWRhbmNlUmVhc29uRmxhZ3M7Ci0KLWVudW0gY2xh
c3MgSW5jbHVkZVJlYXNvbnMgeyBGaXJzdCAsIEFsbCB9OwotCi19Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5YjM2YTBmMzI3NS4uMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0Nv
bnRlbnRzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50
cy5oIgotCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyQ2hp
bGRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgotI2luY2x1ZGUgIlJl
bmRlclRleHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIFNpbXBsZUxpbmVM
YXlvdXQgewotCi1zdGF0aWMgVmVjdG9yPEZsb3dDb250ZW50czo6U2VnbWVudD4gaW5pdGlhbGl6
ZVNlZ21lbnRzKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKLXsKLSAgICB1bnNpZ25lZCBu
dW1iZXJPZkNoaWxkcmVuID0gMDsKLSAgICBhdXRvIGNoaWxkcmVuID0gY2hpbGRyZW5PZlR5cGU8
UmVuZGVyT2JqZWN0PihmbG93KTsKLSAgICBmb3IgKGF1dG8gaXQgPSBjaGlsZHJlbi5iZWdpbigp
LCBlbmQgPSBjaGlsZHJlbi5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICArK251bWJl
ck9mQ2hpbGRyZW47Ci0gICAgVmVjdG9yPEZsb3dDb250ZW50czo6U2VnbWVudD4gc2VnbWVudHM7
Ci0gICAgc2VnbWVudHMucmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mQ2hpbGRyZW4pOwotICAgIHVu
c2lnbmVkIHN0YXJ0UG9zaXRpb24gPSAwOwotICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJl
bk9mVHlwZTxSZW5kZXJPYmplY3Q+KGZsb3cpKSB7Ci0gICAgICAgIGlmIChpczxSZW5kZXJUZXh0
PihjaGlsZCkpIHsKLSAgICAgICAgICAgIGF1dG8mIHRleHRDaGlsZCA9IGRvd25jYXN0PFJlbmRl
clRleHQ+KGNoaWxkKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSB0ZXh0Q2hp
bGQudGV4dCgpLmxlbmd0aCgpOwotICAgICAgICAgICAgc2VnbWVudHMuYXBwZW5kKEZsb3dDb250
ZW50czo6U2VnbWVudCB7IHN0YXJ0UG9zaXRpb24sIHN0YXJ0UG9zaXRpb24gKyB0ZXh0TGVuZ3Ro
LCB0ZXh0Q2hpbGQudGV4dCgpLAotICAgICAgICAgICAgICAgIHRleHRDaGlsZCwgdGV4dENoaWxk
LmNhblVzZVNpbXBsaWZpZWRUZXh0TWVhc3VyaW5nKCkgfSk7Ci0gICAgICAgICAgICBzdGFydFBv
c2l0aW9uICs9IHRleHRMZW5ndGg7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoaXM8UmVuZGVyTGluZUJyZWFrPihjaGlsZCkpIHsKLSAgICAgICAgICAgIHNl
Z21lbnRzLmFwcGVuZChGbG93Q29udGVudHM6OlNlZ21lbnQgeyBzdGFydFBvc2l0aW9uLCBzdGFy
dFBvc2l0aW9uLCBTdHJpbmcoKSwgY2hpbGQsIHRydWUgfSk7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAg
cmV0dXJuIHNlZ21lbnRzOwotfQotCi1GbG93Q29udGVudHM6OkZsb3dDb250ZW50cyhjb25zdCBS
ZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCi0gICAgOiBtX3NlZ21lbnRzKGluaXRpYWxpemVTZWdtZW50
cyhmbG93KSkKLXsKLX0KLQotdW5zaWduZWQgRmxvd0NvbnRlbnRzOjpzZWdtZW50SW5kZXhGb3JS
dW5TbG93KHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpIGNvbnN0Ci17Ci0gICAgYXV0byBp
c0VtcHR5UmFuZ2UgPSBzdGFydCA9PSBlbmQ7Ci0gICAgYXV0byBpdCA9IHN0ZDo6bG93ZXJfYm91
bmQobV9zZWdtZW50cy5iZWdpbigpLCBtX3NlZ21lbnRzLmVuZCgpLCBzdGFydCwgW2lzRW1wdHlS
YW5nZV0oY29uc3QgU2VnbWVudCYgc2VnbWVudCwgdW5zaWduZWQgc3RhcnQpIHsKLSAgICAgICAg
Ly8gRklYTUU6IFRoaXMgYWx3YXlzIGZpbmQgdGhlIGZpcnN0IGVtcHR5IHJ1biAoLnZzIHN1YnNl
cXVlbnQgPGJyPiBlbGVtZW50cykKLSAgICAgICAgcmV0dXJuIChpc0VtcHR5UmFuZ2UgJiYgc2Vn
bWVudC5zdGFydCA9PSBzZWdtZW50LmVuZCkgPyBzZWdtZW50LnN0YXJ0IDwgc3RhcnQgOiBzZWdt
ZW50LmVuZCA8PSBzdGFydDsKLSAgICB9KTsKLSAgICBBU1NFUlQoaXQgIT0gbV9zZWdtZW50cy5l
bmQoKSk7Ci0gICAgQVNTRVJUKGVuZCA8PSBpdC0+ZW5kKTsKLSAgICBtX2xhc3RTZWdtZW50SW5k
ZXggPSBpdCAtIG1fc2VnbWVudHMuYmVnaW4oKTsKLSAgICByZXR1cm4gbV9sYXN0U2VnbWVudElu
ZGV4OwotfQotCi19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Np
bXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZGU2M2Y2ODZhZDE0Li4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDg1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlJlbmRlck9i
amVjdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBSZW5kZXJCbG9ja0Zsb3c7Ci0K
LW5hbWVzcGFjZSBTaW1wbGVMaW5lTGF5b3V0IHsKLQotY2xhc3MgRmxvd0NvbnRlbnRzIHsKLXB1
YmxpYzoKLSAgICBGbG93Q29udGVudHMoY29uc3QgUmVuZGVyQmxvY2tGbG93Jik7Ci0KLSAgICBz
dHJ1Y3QgU2VnbWVudCB7Ci0gICAgICAgIHVuc2lnbmVkIHRvU2VnbWVudFBvc2l0aW9uKHVuc2ln
bmVkIHBvc2l0aW9uKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocG9zaXRp
b24gPj0gc3RhcnQpOwotICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uIC0gc3RhcnQ7Ci0gICAg
ICAgIH0KLSAgICAgICAgdW5zaWduZWQgdG9SZW5kZXJQb3NpdGlvbih1bnNpZ25lZCBwb3NpdGlv
bikgY29uc3QgeyByZXR1cm4gc3RhcnQgKyBwb3NpdGlvbjsgfQotICAgICAgICB1bnNpZ25lZCBz
dGFydDsKLSAgICAgICAgdW5zaWduZWQgZW5kOwotICAgICAgICBTdHJpbmdWaWV3IHRleHQ7Ci0g
ICAgICAgIGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXI7Ci0gICAgICAgIGJvb2wgY2FuVXNl
U2ltcGxpZmllZFRleHRNZWFzdXJpbmc7Ci0gICAgfTsKLSAgICBjb25zdCBTZWdtZW50JiBzZWdt
ZW50Rm9yUnVuKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpIGNvbnN0OwotICAgIGNvbnN0
IFNlZ21lbnQmIHNlZ21lbnRGb3JQb3NpdGlvbih1bnNpZ25lZCkgY29uc3Q7Ci0KLSAgICB0eXBl
ZGVmIFZlY3RvcjxTZWdtZW50LCA4Pjo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7Ci0gICAgSXRl
cmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3NlZ21lbnRzLmJlZ2luKCk7IH0KLSAgICBJ
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3NlZ21lbnRzLmVuZCgpOyB9Ci0KLXByaXZh
dGU6Ci0gICAgdW5zaWduZWQgc2VnbWVudEluZGV4Rm9yUnVuU2xvdyh1bnNpZ25lZCBzdGFydCwg
dW5zaWduZWQgZW5kKSBjb25zdDsKLSAgICBjb25zdCBWZWN0b3I8U2VnbWVudD4gbV9zZWdtZW50
czsKLSAgICBtdXRhYmxlIHVuc2lnbmVkIG1fbGFzdFNlZ21lbnRJbmRleCB7IDAgfTsKLX07Ci0K
LWlubGluZSBjb25zdCBGbG93Q29udGVudHM6OlNlZ21lbnQmIEZsb3dDb250ZW50czo6c2VnbWVu
dEZvclJ1bih1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKSBjb25zdAotewotICAgIEFTU0VS
VChzdGFydCA8PSBlbmQpOwotICAgIGF1dG8gaXNFbXB0eVJhbmdlID0gc3RhcnQgPT0gZW5kOwot
ICAgIGF1dG8mIGxhc3RTZWdtZW50ID0gbV9zZWdtZW50c1ttX2xhc3RTZWdtZW50SW5kZXhdOwot
ICAgIGlmICgobGFzdFNlZ21lbnQuc3RhcnQgPD0gc3RhcnQgJiYgZW5kIDw9IGxhc3RTZWdtZW50
LmVuZCkgJiYgKCFpc0VtcHR5UmFuZ2UgfHwgZW5kICE9IGxhc3RTZWdtZW50LmVuZCkpCi0gICAg
ICAgIHJldHVybiBtX3NlZ21lbnRzW21fbGFzdFNlZ21lbnRJbmRleF07Ci0gICAgcmV0dXJuIG1f
c2VnbWVudHNbc2VnbWVudEluZGV4Rm9yUnVuU2xvdyhzdGFydCwgZW5kKV07Ci19Ci0KLWlubGlu
ZSBjb25zdCBGbG93Q29udGVudHM6OlNlZ21lbnQmIEZsb3dDb250ZW50czo6c2VnbWVudEZvclBv
c2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAotewotICAgIGF1dG8gaXQgPSBzdGQ6Omxv
d2VyX2JvdW5kKG1fc2VnbWVudHMuYmVnaW4oKSwgbV9zZWdtZW50cy5lbmQoKSwgcG9zaXRpb24s
IFtdKGNvbnN0IFNlZ21lbnQmIHNlZ21lbnQsIHVuc2lnbmVkIHBvc2l0aW9uKSB7Ci0gICAgICAg
IHJldHVybiBzZWdtZW50LmVuZCA8PSBwb3NpdGlvbjsKLSAgICB9KTsKLSAgICBBU1NFUlQoaXQg
IT0gbV9zZWdtZW50cy5lbmQoKSk7Ci0gICAgcmV0dXJuIG1fc2VnbWVudHNbaXQgLSBtX3NlZ21l
bnRzLmJlZ2luKCldOwotfQotCi19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDE2Y2MwYjZkMzgyNC4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDM3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaCIKLQotI2luY2x1ZGUgIkJpZGlSdW4uaCIK
LSNpbmNsdWRlICJCaWRpUnVuTGlzdC5oIgotI2luY2x1ZGUgIkV2ZW50UmVnaW9uLmgiCi0jaW5j
bHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKLSNpbmNsdWRlICJIaXRUZXN0TG9jYXRpb24uaCIKLSNpbmNsdWRlICJIaXRU
ZXN0UmVxdWVzdC5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJJbmxp
bmVUZXh0Qm94LmgiCi0jaW5jbHVkZSAiTGluZUluZm8uaCIKLSNpbmNsdWRlICJQYWludEluZm8u
aCIKLSNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJDaGlsZEl0
ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJT
dHlsZS5oIgotI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3Lmgi
Ci0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0Rmxvd0Nv
bnRlbnRzLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmgiCi0jaW5jbHVk
ZSAiVGV4dC5oIgotI2luY2x1ZGUgIlRleHREZWNvcmF0aW9uUGFpbnRlci5oIgotI2luY2x1ZGUg
IlRleHRQYWludFN0eWxlLmgiCi0jaW5jbHVkZSAiVGV4dFBhaW50ZXIuaCIKLSNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0KLSNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCi0jaW5j
bHVkZSA8c3RkaW8uaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2Ug
U2ltcGxlTGluZUxheW91dCB7Ci0KLUZsb2F0UmVjdCBjb21wdXRlT3ZlcmZsb3coY29uc3QgUmVu
ZGVyQmxvY2tGbG93JiBmbG93LCBjb25zdCBGbG9hdFJlY3QmIGxheW91dFJlY3QpCi17Ci0gICAg
YXV0byBvdmVyZmxvd1JlY3QgPSBsYXlvdXRSZWN0OwotICAgIGF1dG8gdmlld3BvcnRTaXplID0g
Zmxvdy5mcmFtZSgpLnZpZXcoKSA/IGZsb3cuZnJhbWUoKS52aWV3KCktPnNpemUoKSA6IEludFNp
emUoKTsKLSAgICBhdXRvIHN0cm9rZU92ZXJmbG93ID0gc3RkOjpjZWlsKGZsb3cuc3R5bGUoKS5j
b21wdXRlZFN0cm9rZVdpZHRoKHZpZXdwb3J0U2l6ZSkpOwotICAgIG92ZXJmbG93UmVjdC5pbmZs
YXRlKHN0cm9rZU92ZXJmbG93KTsKLQotICAgIGF1dG8gbGV0dGVyU3BhY2luZyA9IGZsb3cuc3R5
bGUoKS5mb250Q2FzY2FkZSgpLmxldHRlclNwYWNpbmcoKTsKLSAgICBpZiAobGV0dGVyU3BhY2lu
ZyA+PSAwKQotICAgICAgICByZXR1cm4gb3ZlcmZsb3dSZWN0OwotICAgIC8vIExhc3QgbGV0dGVy
J3MgbmVnYXRpdmUgc3BhY2luZyBzaHJpbmtzIGxheW91dCByZWN0LiBQdXNoIGl0IHRvIHZpc3Vh
bCBvdmVyZmxvdy4KLSAgICBvdmVyZmxvd1JlY3QuZXhwYW5kKC1sZXR0ZXJTcGFjaW5nLCAwKTsK
LSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0OwotfQotCi12b2lkIHBhaW50Rmxvdyhjb25zdCBSZW5k
ZXJCbG9ja0Zsb3cmIGZsb3csIGNvbnN0IExheW91dCYgbGF5b3V0LCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQotewotICAgIGlmIChwYWludElu
Zm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6RXZlbnRSZWdpb24pIHsKLSAgICAgICAgaWYgKCFmbG93
LnZpc2libGVUb0hpdFRlc3RpbmcoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYXV0
byBwYWludFJlY3QgPSBwYWludEluZm8ucmVjdDsKLSAgICAgICAgcGFpbnRSZWN0Lm1vdmVCeSgt
cGFpbnRPZmZzZXQpOwotICAgICAgICBmb3IgKGF1dG8gcnVuIDogbGF5b3V0LnJ1blJlc29sdmVy
KCkucmFuZ2VGb3JSZWN0KHBhaW50UmVjdCkpIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCB2aXN1
YWxPdmVyZmxvd1JlY3QgPSBjb21wdXRlT3ZlcmZsb3coZmxvdywgcnVuLnJlY3QoKSk7Ci0gICAg
ICAgICAgICBwYWludEluZm8uZXZlbnRSZWdpb25Db250ZXh0LT51bml0ZShlbmNsb3NpbmdJbnRS
ZWN0KHZpc3VhbE92ZXJmbG93UmVjdCksIGZsb3cuc3R5bGUoKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFz
ZTo6Rm9yZWdyb3VuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgc3R5bGUgPSBmbG93
LnN0eWxlKCk7Ci0gICAgaWYgKHN0eWxlLnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNp
YmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUZXh0UGFpbnRlciB0ZXh0UGFpbnRlcihwYWlu
dEluZm8uY29udGV4dCgpKTsKLSAgICB0ZXh0UGFpbnRlci5zZXRGb250KHN0eWxlLmZvbnRDYXNj
YWRlKCkpOwotICAgIHRleHRQYWludGVyLnNldFN0eWxlKGNvbXB1dGVUZXh0UGFpbnRTdHlsZShm
bG93LmZyYW1lKCksIHN0eWxlLCBwYWludEluZm8pKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxT
aGFkb3dEYXRhPiBkZWJ1Z1NoYWRvdyA9IG51bGxwdHI7Ci0gICAgaWYgKGZsb3cuc2V0dGluZ3Mo
KS5zaW1wbGVMaW5lTGF5b3V0RGVidWdCb3JkZXJzRW5hYmxlZCgpKSB7Ci0gICAgICAgIGRlYnVn
U2hhZG93ID0gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPihJbnRQb2ludCgwLCAwKSwgMTAsIDIwLCBT
aGFkb3dTdHlsZTo6Tm9ybWFsLCB0cnVlLCBDb2xvcjo6Z3JlZW4uY29sb3JXaXRoQWxwaGFCeXRl
KDIwMCkpOwotICAgICAgICB0ZXh0UGFpbnRlci5zZXRTaGFkb3coZGVidWdTaGFkb3cuZ2V0KCkp
OwotICAgIH0KLQotICAgIE9wdGlvbmFsPFRleHREZWNvcmF0aW9uUGFpbnRlcj4gdGV4dERlY29y
YXRpb25QYWludGVyOwotICAgIGlmICghc3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVyID0gY2hp
bGRyZW5PZlR5cGU8UmVuZGVyVGV4dD4oZmxvdykuZmlyc3QoKTsKLSAgICAgICAgaWYgKHRleHRS
ZW5kZXJlcikgewotICAgICAgICAgICAgdGV4dERlY29yYXRpb25QYWludGVyLmVtcGxhY2UocGFp
bnRJbmZvLmNvbnRleHQoKSwgc3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKSwgKnRleHRS
ZW5kZXJlciwgZmFsc2UsIHN0eWxlLmZvbnRDYXNjYWRlKCkpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgTGF5b3V0UmVjdCBwYWludFJlY3QgPSBwYWludEluZm8ucmVjdDsKLSAgICBwYWludFJl
Y3QubW92ZUJ5KC1wYWludE9mZnNldCk7Ci0KLSAgICBhdXRvJiByZXNvbHZlciA9IGxheW91dC5y
dW5SZXNvbHZlcigpOwotICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gZmxvdy5kb2N1bWVu
dCgpLmRldmljZVNjYWxlRmFjdG9yKCk7Ci0gICAgZm9yIChhdXRvIHJ1biA6IHJlc29sdmVyLnJh
bmdlRm9yUmVjdChwYWludFJlY3QpKSB7Ci0gICAgICAgIGlmIChydW4uc3RhcnQoKSA9PSBydW4u
ZW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBGbG9hdFJlY3QgcmVjdCA9
IHJ1bi5yZWN0KCk7Ci0gICAgICAgIEZsb2F0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3QgPSBjb21w
dXRlT3ZlcmZsb3coZmxvdywgcmVjdCk7Ci0gICAgICAgIGlmIChwYWludFJlY3QueSgpID4gdmlz
dWFsT3ZlcmZsb3dSZWN0Lm1heFkoKSB8fCBwYWludFJlY3QubWF4WSgpIDwgdmlzdWFsT3ZlcmZs
b3dSZWN0LnkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFN0cmluZyB0ZXh0
V2l0aEh5cGhlbjsKLSAgICAgICAgaWYgKHJ1bi5oYXNIeXBoZW4oKSkKLSAgICAgICAgICAgIHRl
eHRXaXRoSHlwaGVuID0gcnVuLnRleHRXaXRoSHlwaGVuKCk7Ci0gICAgICAgIC8vIHhQb3MgaXMg
cmVsYXRpdmUgdG8gdGhlIGxpbmUgYm94J3MgbG9naWNhbCBsZWZ0LgotICAgICAgICAvLyBXZSBk
b24ndCBoYXZlIGFueSBsaW5lIGdlb21ldHJ5IGhlcmUgaW4gU0xMLCBzbyBsZXQncyBnZXQgdGhl
IGZpcnN0IHJ1bidzIGxvZ2ljYWwgbGVmdCBpbiB0aGUgY3VycmVudCBsaW5lIGFuZCB1c2UgaXQg
YXMgdGhlIGxpbmUncyBsb2dpY2FsIGxlZnQuCi0gICAgICAgIGF1dG8gbGluZUxvZ2ljYWxMZWZ0
ID0gKCpyZXNvbHZlci5yYW5nZUZvckxpbmUocnVuLmxpbmVJbmRleCgpKS5iZWdpbigpKS5sb2dp
Y2FsTGVmdCgpOwotICAgICAgICBUZXh0UnVuIHRleHRSdW4geyBydW4uaGFzSHlwaGVuKCkgPyB0
ZXh0V2l0aEh5cGhlbiA6IHJ1bi50ZXh0KCksIHJ1bi5sb2dpY2FsTGVmdCgpIC0gbGluZUxvZ2lj
YWxMZWZ0LCBydW4uZXhwYW5zaW9uKCksIHJ1bi5leHBhbnNpb25CZWhhdmlvcigpIH07Ci0gICAg
ICAgIHRleHRSdW4uc2V0VGFiU2l6ZSghc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCksIHN0eWxl
LnRhYlNpemUoKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbiB7IHJlY3QueCgpICsg
cGFpbnRPZmZzZXQueCgpLCByb3VuZFRvRGV2aWNlUGl4ZWwocnVuLmJhc2VsaW5lUG9zaXRpb24o
KSArIHBhaW50T2Zmc2V0LnkoKSwgZGV2aWNlU2NhbGVGYWN0b3IpIH07Ci0KLSAgICAgICAgdGV4
dFBhaW50ZXIuc2V0R2x5cGhEaXNwbGF5TGlzdElmTmVlZGVkKHJ1bi5zaW1wbGVSdW4oKSwgcGFp
bnRJbmZvLCBzdHlsZS5mb250Q2FzY2FkZSgpLCBwYWludEluZm8uY29udGV4dCgpLCB0ZXh0UnVu
KTsKLSAgICAgICAgdGV4dFBhaW50ZXIucGFpbnQodGV4dFJ1biwgcmVjdCwgdGV4dE9yaWdpbik7
Ci0gICAgICAgIGlmICh0ZXh0RGVjb3JhdGlvblBhaW50ZXIpIHsKLSAgICAgICAgICAgIHRleHRE
ZWNvcmF0aW9uUGFpbnRlci0+c2V0V2lkdGgocmVjdC53aWR0aCgpKTsKLSAgICAgICAgICAgIHRl
eHREZWNvcmF0aW9uUGFpbnRlci0+cGFpbnRUZXh0RGVjb3JhdGlvbih0ZXh0UnVuLCB0ZXh0T3Jp
Z2luLCByZWN0LmxvY2F0aW9uKCkgKyBwYWludE9mZnNldCk7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLWJvb2wgaGl0VGVzdEZsb3coY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBjb25zdCBM
YXlvdXQmIGxheW91dCwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBj
b25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVz
dEFjdGlvbikKLXsKLSAgICBpZiAoaGl0VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3VuZCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFsYXlvdXQucnVuQ291bnQoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byYgc3R5bGUgPSBmbG93LnN0eWxlKCk7Ci0g
ICAgaWYgKHN0eWxlLnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNpYmxlIHx8IHN0eWxl
LnBvaW50ZXJFdmVudHMoKSA9PSBQb2ludGVyRXZlbnRzOjpOb25lKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBMYXlvdXRSZWN0IHJhbmdlUmVjdCA9IGxvY2F0aW9uSW5Db250YWluZXIu
Ym91bmRpbmdCb3goKTsKLSAgICByYW5nZVJlY3QubW92ZUJ5KC1hY2N1bXVsYXRlZE9mZnNldCk7
Ci0gICAgYXV0byByZXNvbHZlciA9IGxpbmVSZXNvbHZlcihsYXlvdXQucnVuUmVzb2x2ZXIoKSk7
Ci0gICAgYXV0byByYW5nZSA9IHJlc29sdmVyLnJhbmdlRm9yUmVjdChyYW5nZVJlY3QpOwotICAg
IGZvciAoYXV0byBpdCA9IHJhbmdlLmJlZ2luKCksIGVuZCA9IHJhbmdlLmVuZCgpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgYXV0byBsaW5lUmVjdCA9ICppdDsKLSAgICAgICAgbGluZVJl
Y3QubW92ZUJ5KGFjY3VtdWxhdGVkT2Zmc2V0KTsKLSAgICAgICAgYXV0byYgcmVuZGVyZXIgPSBj
b25zdF9jYXN0PFJlbmRlck9iamVjdCY+KGl0LnJlbmRlcmVyKCkpOwotICAgICAgICBpZiAoIWxv
Y2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhsaW5lUmVjdCkpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgcmVuZGVyZXIudXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxvY2F0
aW9uSW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkp
OwotICAgICAgICBpZiAocmVzdWx0LmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQocmVuZGVy
ZXIubm9kZUZvckhpdFRlc3QoKSwgcmVxdWVzdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgbGluZVJl
Y3QpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgY29sbGVjdEZsb3dPdmVyZmxvdyhS
ZW5kZXJCbG9ja0Zsb3cmIGZsb3csIGNvbnN0IExheW91dCYgbGF5b3V0KQotewotICAgIGZvciAo
YXV0byBsaW5lUmVjdCA6IGxpbmVSZXNvbHZlcihsYXlvdXQucnVuUmVzb2x2ZXIoKSkpIHsKLSAg
ICAgICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3QgPSBMYXlvdXRSZWN0KGNvbXB1dGVP
dmVyZmxvdyhmbG93LCBsaW5lUmVjdCkpOwotICAgICAgICBmbG93LmFkZExheW91dE92ZXJmbG93
KExheW91dFJlY3QobGluZVJlY3QpKTsKLSAgICAgICAgZmxvdy5hZGRWaXN1YWxPdmVyZmxvdyh2
aXN1YWxPdmVyZmxvd1JlY3QpOwotICAgIH0KLX0KLQotdW5zaWduZWQgdGV4dE9mZnNldEZvclBv
aW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyZXIs
IGNvbnN0IExheW91dCYgbGF5b3V0KQotewotICAgIGF1dG8mIGZsb3cgPSBkb3duY2FzdDxSZW5k
ZXJCbG9ja0Zsb3c+KCpyZW5kZXJlci5wYXJlbnQoKSk7Ci0gICAgQVNTRVJUKGZsb3cuZmlyc3RD
aGlsZCgpID09IGZsb3cubGFzdENoaWxkKCkpOwotICAgIGF1dG8mIHJlc29sdmVyID0gbGF5b3V0
LnJ1blJlc29sdmVyKCk7Ci0gICAgYXV0byBpdCA9IHJlc29sdmVyLnJ1bkZvclBvaW50KHBvaW50
KTsKLSAgICBpZiAoaXQgPT0gcmVzb2x2ZXIuZW5kKCkpCi0gICAgICAgIHJldHVybiByZW5kZXJl
ci50ZXh0KCkubGVuZ3RoKCk7Ci0gICAgYXV0byBydW4gPSAqaXQ7Ci0gICAgYXV0byYgc3R5bGUg
PSBmbG93LnN0eWxlKCk7Ci0gICAgVGV4dFJ1biB0ZXh0UnVuKHJ1bi50ZXh0KCksIHJ1bi5sb2dp
Y2FsTGVmdCgpLCBydW4uZXhwYW5zaW9uKCksIHJ1bi5leHBhbnNpb25CZWhhdmlvcigpKTsKLSAg
ICB0ZXh0UnVuLnNldFRhYlNpemUoIXN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpLCBzdHlsZS50
YWJTaXplKCkpOwotICAgIHJldHVybiBydW4uc3RhcnQoKSArIHN0eWxlLmZvbnRDYXNjYWRlKCku
b2Zmc2V0Rm9yUG9zaXRpb24odGV4dFJ1biwgcG9pbnQueCgpIC0gcnVuLmxvZ2ljYWxMZWZ0KCks
IHRydWUpOwotfQotCi1WZWN0b3I8RmxvYXRRdWFkPiBjb2xsZWN0QWJzb2x1dGVRdWFkc0ZvclJh
bmdlKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25l
ZCBlbmQsIGNvbnN0IExheW91dCYgbGF5b3V0LCBib29sIGlnbm9yZUVtcHR5VGV4dFNlbGVjdGlv
bnMsIGJvb2wqIHdhc0ZpeGVkKQotewotICAgIGF1dG8mIHN0eWxlID0gZG93bmNhc3Q8UmVuZGVy
QmxvY2tGbG93PigqcmVuZGVyZXIucGFyZW50KCkpLnN0eWxlKCk7Ci0gICAgVmVjdG9yPEZsb2F0
UXVhZD4gcXVhZHM7Ci0gICAgYXV0byYgcmVzb2x2ZXIgPSBsYXlvdXQucnVuUmVzb2x2ZXIoKTsK
LSAgICBmb3IgKGF1dG8gcnVuIDogcmVzb2x2ZXIucmFuZ2VGb3JSZW5kZXJlcldpdGhPZmZzZXRz
KHJlbmRlcmVyLCBzdGFydCwgZW5kKSkgewotICAgICAgICBpZiAoaWdub3JlRW1wdHlUZXh0U2Vs
ZWN0aW9ucyAmJiBydW4uc3RhcnQoKSA9PSBydW4uZW5kKCkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgLy8gVGhpcyBydW4gaXMgZnVsbHkgY29udGFpbmVkLgotICAgICAgICBpZiAo
c3RhcnQgPD0gcnVuLnN0YXJ0KCkgJiYgZW5kID49IHJ1bi5lbmQoKSkgewotICAgICAgICAgICAg
cXVhZHMuYXBwZW5kKHJlbmRlcmVyLmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKHJ1bi5y
ZWN0KCkpLCBVc2VUcmFuc2Zvcm1zLCB3YXNGaXhlZCkpOwotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gUGFydGlhbGx5IGNvbnRhaW5lZCBydW4uCi0gICAgICAg
IFRleHRSdW4gdGV4dFJ1bihydW4udGV4dCgpLCBydW4ubG9naWNhbExlZnQoKSwgcnVuLmV4cGFu
c2lvbigpLCBydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSk7Ci0gICAgICAgIHRleHRSdW4uc2V0VGFi
U2l6ZSghc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCksIHN0eWxlLnRhYlNpemUoKSk7Ci0gICAg
ICAgIExheW91dFJlY3QgcnVuUmVjdChydW4ucmVjdCgpKTsKLSAgICAgICAgLy8gU3BlY2lhbCBj
YXNlIGVtcHR5IHJhbmdlcy4KLSAgICAgICAgaWYgKHN0YXJ0ID09IGVuZCkgewotICAgICAgICAg
ICAgcnVuUmVjdC5zZXRXaWR0aCgwKTsKLSAgICAgICAgICAgIHF1YWRzLmFwcGVuZChyZW5kZXJl
ci5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChydW5SZWN0KSwgVXNlVHJhbnNmb3Jtcywg
d2FzRml4ZWQpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGF1
dG8gbG9jYWxTdGFydCA9IHN0ZDo6bWF4KHJ1bi5zdGFydCgpLCBzdGFydCkgLSBydW4uc3RhcnQo
KTsKLSAgICAgICAgYXV0byBsb2NhbEVuZCA9IHN0ZDo6bWluKHJ1bi5lbmQoKSwgZW5kKSAtIHJ1
bi5zdGFydCgpOwotICAgICAgICBBU1NFUlQobG9jYWxTdGFydCA8PSBsb2NhbEVuZCk7Ci0gICAg
ICAgIHN0eWxlLmZvbnRDYXNjYWRlKCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1
biwgcnVuUmVjdCwgbG9jYWxTdGFydCwgbG9jYWxFbmQpOwotICAgICAgICBydW5SZWN0ID0gc25h
cHBlZFNlbGVjdGlvblJlY3QocnVuUmVjdCwgcnVuLmxvZ2ljYWxSaWdodCgpLCBydW5SZWN0Lnko
KSwgcnVuUmVjdC5oZWlnaHQoKSwgdHJ1ZSAvKiBpc0hvcml6b250YWwgKi8pOwotICAgICAgICBx
dWFkcy5hcHBlbmQocmVuZGVyZXIubG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQocnVuUmVj
dCksIFVzZVRyYW5zZm9ybXMsIHdhc0ZpeGVkKSk7Ci0gICAgfQotICAgIHJldHVybiBxdWFkczsK
LX0KLQotdm9pZCBzaW1wbGVMaW5lTGF5b3V0V2lsbEJlRGVsZXRlZChjb25zdCBMYXlvdXQmIGxh
eW91dCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGF5b3V0LnJ1bkNvdW50KCk7
ICsraSkKLSAgICAgICAgVGV4dFBhaW50ZXI6OnJlbW92ZUdseXBoRGlzcGxheUxpc3QobGF5b3V0
LnJ1bkF0KGkpKTsKLX0KLQotYm9vbCBjYW5Vc2VGb3JMaW5lQm94VHJlZShSZW5kZXJCbG9ja0Zs
b3cmIGZsb3csIGNvbnN0IExheW91dCYgbGF5b3V0KQotewotICAgIC8vIExpbmUgYnJlYWtpbmcg
cmVxdWlyZXMgc29tZSBjb250ZXh0IHRoYXQgU0xMIGNhbid0IHByb3ZpZGUgYXQgdGhlIG1vbWVu
dCAoc2VlIFJvb3RJbmxpbmVCb3g6OnNldExpbmVCcmVha0luZm8pLgotICAgIGlmIChsYXlvdXQu
bGluZUNvdW50KCkgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobGF5b3V0
LmlzUGFnaW5hdGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAoZmxv
dy5zdHlsZSgpLnByZXNlcnZlTmV3bGluZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgaWYgKCFmbG93LmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAotICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJPYmplY3Q+KGZs
b3cpKSB7Ci0gICAgICAgIGlmICghaXM8UmVuZGVyVGV4dD4oY2hpbGQpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAvLyBTaW1wbGUgbGluZSBsYXlvdXQgaXRlcmF0b3IgY2Fu
J3QgaGFuZGxlIHJlbmRlcmVycyB3aXRoIHplcm8gbGVuZ3RoIHByb3Blcmx5LgotICAgICAgICBp
ZiAoIWRvd25jYXN0PFJlbmRlclRleHQ+KGNoaWxkKS5sZW5ndGgoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIGlu
aXRpYWxpemVJbmxpbmVUZXh0Qm94KFJlbmRlckJsb2NrRmxvdyYgZmxvdywgSW5saW5lVGV4dEJv
eCYgaW5saW5lVGV4dEJveCwgY29uc3QgUnVuUmVzb2x2ZXI6OlJ1biYgcnVuKQotewotICAgIGlu
bGluZVRleHRCb3guc2V0TG9naWNhbExlZnQocnVuLmxvZ2ljYWxMZWZ0KCkpOwotICAgIGlubGlu
ZVRleHRCb3guc2V0TG9naWNhbFRvcChydW4ucmVjdCgpLnkoKSk7Ci0gICAgaW5saW5lVGV4dEJv
eC5zZXRMb2dpY2FsV2lkdGgocnVuLmxvZ2ljYWxSaWdodCgpIC0gcnVuLmxvZ2ljYWxMZWZ0KCkp
OwotICAgIGF1dG8gb3ZlcmZsb3dSZWN0ID0gY29tcHV0ZU92ZXJmbG93KGNvbnN0X2Nhc3Q8UmVu
ZGVyQmxvY2tGbG93Jj4oZmxvdyksIHJ1bi5yZWN0KCkpOwotICAgIGlmIChvdmVyZmxvd1JlY3Qg
IT0gcnVuLnJlY3QoKSkKLSAgICAgICAgaW5saW5lVGV4dEJveC5zZXRMb2dpY2FsT3ZlcmZsb3dS
ZWN0KExheW91dFJlY3Qob3ZlcmZsb3dSZWN0KSk7Ci0KLSAgICBpbmxpbmVUZXh0Qm94LnNldEhh
c0h5cGhlbihydW4uaGFzSHlwaGVuKCkpOwotICAgIGlubGluZVRleHRCb3guc2V0RXhwYW5zaW9u
V2l0aG91dEdyb3dpbmcocnVuLmV4cGFuc2lvbigpKTsKLQotICAgIGF1dG8gZXhwYW5zaW9uQmVo
YXZpb3IgPSBydW4uZXhwYW5zaW9uQmVoYXZpb3IoKTsKLSAgICBpbmxpbmVUZXh0Qm94LnNldENh
bkhhdmVMZWZ0RXhwYW5zaW9uKGV4cGFuc2lvbkJlaGF2aW9yICYgQWxsb3dMZWZ0RXhwYW5zaW9u
KTsKLSAgICBpbmxpbmVUZXh0Qm94LnNldENhbkhhdmVSaWdodEV4cGFuc2lvbihleHBhbnNpb25C
ZWhhdmlvciAmIEFsbG93UmlnaHRFeHBhbnNpb24pOwotICAgIGlmIChleHBhbnNpb25CZWhhdmlv
ciAmIEZvcmNlUmlnaHRFeHBhbnNpb24pCi0gICAgICAgIGlubGluZVRleHRCb3guc2V0Rm9yY2VS
aWdodEV4cGFuc2lvbigpOwotICAgIGlmIChleHBhbnNpb25CZWhhdmlvciAmIEZvcmNlTGVmdEV4
cGFuc2lvbikKLSAgICAgICAgaW5saW5lVGV4dEJveC5zZXRGb3JjZUxlZnRFeHBhbnNpb24oKTsK
LX0KLQotdm9pZCBnZW5lcmF0ZUxpbmVCb3hUcmVlKFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29u
c3QgTGF5b3V0JiBsYXlvdXQpCi17Ci0gICAgQVNTRVJUKCFmbG93LmNvbXBsZXhMaW5lTGF5b3V0
KCktPmxpbmVCb3hlcygpLmZpcnN0TGluZUJveCgpKTsKLSAgICBpZiAoIWxheW91dC5ydW5Db3Vu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWY8QmlkaUNvbnRleHQ+IGJpZGlDb250ZXh0
ID0gQmlkaUNvbnRleHQ6OmNyZWF0ZSgwLCBVX0xFRlRfVE9fUklHSFQpOwotICAgIGF1dG8mIHJl
c29sdmVyID0gbGF5b3V0LnJ1blJlc29sdmVyKCk7Ci0gICAgdW5zaWduZWQgbGluZUluZGV4ID0g
MDsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBhdXRvIHJhbmdlID0gcmVzb2x2ZXIucmFu
Z2VGb3JMaW5lKGxpbmVJbmRleCsrKTsKLSAgICAgICAgaWYgKHJhbmdlLmJlZ2luKCkgPT0gcmFu
Z2UuZW5kKCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBHZW5lcmF0ZSBiaWRp
IHJ1bnMgb3V0IG9mIHNpbXBsZSBsaW5lIGxheW91dCBydW5zLgotICAgICAgICBCaWRpUnVuTGlz
dDxCaWRpUnVuPiBiaWRpUnVuczsKLSAgICAgICAgZm9yIChhdXRvIGl0ID0gcmFuZ2UuYmVnaW4o
KTsgaXQgIT0gcmFuZ2UuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIGF1dG8gcnVuID0gKml0
OwotICAgICAgICAgICAgYmlkaVJ1bnMuYXBwZW5kUnVuKG1ha2VVbmlxdWU8QmlkaVJ1bj4ocnVu
LmxvY2FsU3RhcnQoKSwgcnVuLmxvY2FsRW5kKCksIGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Jj4o
cnVuLnJlbmRlcmVyKCkpLCBiaWRpQ29udGV4dC5wdHIoKSwgVV9MRUZUX1RPX1JJR0hUKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBMaW5lSW5mbyBsaW5lSW5mbzsKLSAgICAgICAgbGluZUluZm8u
c2V0Rmlyc3RMaW5lKCFmbG93LmNvbXBsZXhMaW5lTGF5b3V0KCktPmxpbmVCb3hlcygpLmZpcnN0
TGluZUJveCgpKTsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgbmVlZGVkIGZvciBmbG93IGJv
eGVzIC1idXQgd2UgZG9uJ3QgaGF2ZSB0aGVtIHlldC4KLSAgICAgICAgLy8gbGluZUluZm8uc2V0
TGFzdExpbmUobGFzdExpbmUpOwotICAgICAgICBsaW5lSW5mby5zZXRFbXB0eSghYmlkaVJ1bnMu
cnVuQ291bnQoKSk7Ci0gICAgICAgIGJpZGlSdW5zLnNldExvZ2ljYWxseUxhc3RSdW4oYmlkaVJ1
bnMubGFzdFJ1bigpKTsKLSAgICAgICAgYXV0byogcm9vdCA9IGZsb3cuY29tcGxleExpbmVMYXlv
dXQoKS0+Y29uc3RydWN0TGluZShiaWRpUnVucywgbGluZUluZm8pOwotICAgICAgICBiaWRpUnVu
cy5jbGVhcigpOwotICAgICAgICBpZiAoIXJvb3QpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBhdXRvJiByb290TGluZUJveCA9ICpyb290OwotICAgICAgICBhdXRvIGl0ID0gcmFu
Z2UuYmVnaW4oKTsKLSAgICAgICAgZmxvYXQgbGluZVdpZHRoID0gMDsKLSAgICAgICAgLy8gU2V0
IHRoZSBnZW9tZXRyeSBmb3IgdGhlIGlubGluZWJveGVzLgotICAgICAgICBmb3IgKGF1dG8qIGlu
bGluZUJveCA9IHJvb3RMaW5lQm94LmZpcnN0Q2hpbGQoKTsgaW5saW5lQm94ICYmIGl0ICE9IHJh
bmdlLmVuZCgpOyBpbmxpbmVCb3ggPSBpbmxpbmVCb3gtPm5leHRPbkxpbmUoKSwgKytpdCkgewot
ICAgICAgICAgICAgYXV0byBydW4gPSAqaXQ7Ci0gICAgICAgICAgICBpbml0aWFsaXplSW5saW5l
VGV4dEJveChmbG93LCBkb3duY2FzdDxJbmxpbmVUZXh0Qm94PigqaW5saW5lQm94KSwgcnVuKTsK
LSAgICAgICAgICAgIGxpbmVXaWR0aCArPSBpbmxpbmVCb3gtPmxvZ2ljYWxXaWR0aCgpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gRmluaXNoIHNldHRpbmcgdXAgdGhlIHJvb3RsaW5lLgotICAg
ICAgICBhdXRvIGl0ZXIgPSByYW5nZS5iZWdpbigpOwotICAgICAgICBhdXRvIGZpcnN0UnVuID0g
Kml0ZXI7Ci0gICAgICAgIHJvb3RMaW5lQm94LnNldExvZ2ljYWxMZWZ0KGZpcnN0UnVuLmxvZ2lj
YWxMZWZ0KCkpOwotICAgICAgICByb290TGluZUJveC5zZXRMb2dpY2FsV2lkdGgobGluZVdpZHRo
KTsKLSAgICAgICAgYXV0byBsaW5lVG9wID0gZmlyc3RSdW4ucmVjdCgpLnkoKTsKLSAgICAgICAg
YXV0byBsaW5lSGVpZ2h0ID0gZmlyc3RSdW4ucmVjdCgpLmhlaWdodCgpOwotICAgICAgICByb290
TGluZUJveC5zZXRMb2dpY2FsVG9wKGxpbmVUb3ApOwotICAgICAgICByb290TGluZUJveC5zZXRM
aW5lVG9wQm90dG9tUG9zaXRpb25zKExheW91dFVuaXQobGluZVRvcCksIExheW91dFVuaXQobGlu
ZVRvcCArIGxpbmVIZWlnaHQpLCBMYXlvdXRVbml0KGxpbmVUb3ApLCBMYXlvdXRVbml0KGxpbmVU
b3AgKyBsaW5lSGVpZ2h0KSk7Ci0gICAgfQotfQotCi0jaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5H
KQotc3RhdGljIHZvaWQgcHJpbnRQcmVmaXgoVGV4dFN0cmVhbSYgc3RyZWFtLCBpbnQmIHByaW50
ZWRDaGFyYWN0ZXJzLCBpbnQgZGVwdGgpCi17Ci0gICAgc3RyZWFtIDw8ICItLS0tLS0tLSAtLSI7
Ci0gICAgcHJpbnRlZENoYXJhY3RlcnMgPSAwOwotICAgIHdoaWxlICgrK3ByaW50ZWRDaGFyYWN0
ZXJzIDw9IGRlcHRoICogMikKLSAgICAgICAgc3RyZWFtIDw8ICIgIjsKLX0KLQotdm9pZCBvdXRw
dXRMaW5lTGF5b3V0Rm9yRmxvdyhUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IFJlbmRlckJsb2Nr
RmxvdyYsIGNvbnN0IExheW91dCYgbGF5b3V0LCBpbnQgZGVwdGgpCi17Ci0gICAgaW50IHByaW50
ZWRDaGFyYWN0ZXJzID0gMDsKLSAgICBwcmludFByZWZpeChzdHJlYW0sIHByaW50ZWRDaGFyYWN0
ZXJzLCBkZXB0aCk7Ci0KLSAgICBzdHJlYW0gPDwgIlNpbXBsZUxpbmVMYXlvdXQgKCIgPDwgbGF5
b3V0LmxpbmVDb3VudCgpIDw8ICIgbGluZXMsICIgPDwgbGF5b3V0LnJ1bkNvdW50KCkgPDwgIiBy
dW5zKSAoIiA8PCAmbGF5b3V0IDw8ICIpIjsKLSAgICBzdHJlYW0ubmV4dExpbmUoKTsKLSAgICAr
K2RlcHRoOwotCi0gICAgZm9yIChhdXRvIHJ1biA6IGxheW91dC5ydW5SZXNvbHZlcigpKSB7Ci0g
ICAgICAgIEZsb2F0UmVjdCByZWN0ID0gcnVuLnJlY3QoKTsKLSAgICAgICAgcHJpbnRQcmVmaXgo
c3RyZWFtLCBwcmludGVkQ2hhcmFjdGVycywgZGVwdGgpOwotICAgICAgICBpZiAocnVuLnN0YXJ0
KCkgPCBydW4uZW5kKCkpIHsKLSAgICAgICAgICAgIHN0cmVhbSA8PCAibGluZSAiIDw8IHJ1bi5s
aW5lSW5kZXgoKSA8PCAiIHJ1bigiIDw8IHJ1bi5zdGFydCgpIDw8ICIsICIgPDwgcnVuLmVuZCgp
IDw8ICIpICIgPDwgcmVjdCA8PCAiIFwiIiA8PCBydW4udGV4dCgpLnRvU3RyaW5nV2l0aG91dENv
cHlpbmcoKS51dGY4KCkuZGF0YSgpIDw8ICJcIiI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBBU1NFUlQocnVuLnN0YXJ0KCkgPT0gcnVuLmVuZCgpKTsKLSAgICAgICAgICAgIHN0cmVh
bSA8PCAibGluZSBicmVhayAiIDw8IHJ1bi5saW5lSW5kZXgoKSA8PCAiIHJ1bigiIDw8IHJ1bi5z
dGFydCgpIDw8ICIsICIgPDwgcnVuLmVuZCgpIDw8ICIpICIgPDwgcmVjdDsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBzdHJlYW0ubmV4dExpbmUoKTsKLX0KLSNlbmRpZgotCi19Ci19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThjN2Q0Y2RhZDllLi4wMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMu
aAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0
LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgSGl0VGVzdExvY2F0aW9uOwotY2xhc3MgSGl0VGVzdFJlcXVlc3Q7Ci1jbGFz
cyBIaXRUZXN0UmVzdWx0OwotY2xhc3MgUmVuZGVyQmxvY2tGbG93Owotc3RydWN0IFBhaW50SW5m
bzsKLQotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewotY2xhc3MgRmxvd0NvbnRlbnRzOwot
Ci1MYXlvdXRVbml0IGNvbXB1dGVGbG93SGVpZ2h0KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYsIGNv
bnN0IExheW91dCYpOwotTGF5b3V0VW5pdCBjb21wdXRlRmxvd0ZpcnN0TGluZUJhc2VsaW5lKGNv
bnN0IFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IExheW91dCYpOwotTGF5b3V0VW5pdCBjb21wdXRl
Rmxvd0xhc3RMaW5lQmFzZWxpbmUoY29uc3QgUmVuZGVyQmxvY2tGbG93JiwgY29uc3QgTGF5b3V0
Jik7Ci1GbG9hdFJlY3QgY29tcHV0ZU92ZXJmbG93KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYsIGNv
bnN0IEZsb2F0UmVjdCYpOwotCi12b2lkIHBhaW50Rmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cm
LCBjb25zdCBMYXlvdXQmLCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZz
ZXQpOwotYm9vbCBoaXRUZXN0Rmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmLCBjb25zdCBMYXlv
dXQmLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0
TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7Ci12b2lkIGNvbGxlY3RGbG93T3ZlcmZsb3coUmVu
ZGVyQmxvY2tGbG93JiwgY29uc3QgTGF5b3V0Jik7Ci0KLXVuc2lnbmVkIHRleHRPZmZzZXRGb3JQ
b2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlclRleHQmLCBjb25zdCBMYXlvdXQm
KTsKLVZlY3RvcjxGbG9hdFF1YWQ+IGNvbGxlY3RBYnNvbHV0ZVF1YWRzRm9yUmFuZ2UoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgY29uc3QgTGF5b3V0
JiwgYm9vbCBpZ25vcmVFbXB0eVRleHRTZWxlY3Rpb25zLCBib29sKiB3YXNGaXhlZCk7Ci0KLUxh
eW91dFVuaXQgbGluZUhlaWdodEZyb21GbG93KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYpOwotTGF5
b3V0VW5pdCBiYXNlbGluZUZyb21GbG93KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYpOwotCi1ib29s
IGNhblVzZUZvckxpbmVCb3hUcmVlKFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IExheW91dCYpOwot
dm9pZCBnZW5lcmF0ZUxpbmVCb3hUcmVlKFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IExheW91dCYp
OwotCi12b2lkIHNpbXBsZUxpbmVMYXlvdXRXaWxsQmVEZWxldGVkKGNvbnN0IExheW91dCYpOwot
Ci0jaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQotdm9pZCBvdXRwdXRMaW5lTGF5b3V0Rm9yRmxv
dyhXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmLCBjb25zdCBMYXlvdXQm
LCBpbnQgZGVwdGgpOwotI2VuZGlmCi0KLX0KLQotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQg
ewotCi1pbmxpbmUgTGF5b3V0VW5pdCBjb21wdXRlRmxvd0hlaWdodChjb25zdCBSZW5kZXJCbG9j
a0Zsb3cmIGZsb3csIGNvbnN0IExheW91dCYgbGF5b3V0KQotewotICAgIGF1dG8gZmxvd0hlaWdo
dCA9IGxpbmVIZWlnaHRGcm9tRmxvdyhmbG93KSAqIGxheW91dC5saW5lQ291bnQoKTsKLSAgICBp
ZiAoIWxheW91dC5oYXNMaW5lU3RydXRzKCkpCi0gICAgICAgIHJldHVybiBmbG93SGVpZ2h0Owot
ICAgIGZvciAoYXV0byYgc3RydXRFbnRyeSA6IGxheW91dC5zdHJ1dHMoKSkKLSAgICAgICAgZmxv
d0hlaWdodCArPSBzdHJ1dEVudHJ5Lm9mZnNldDsKLSAgICByZXR1cm4gZmxvd0hlaWdodDsKLX0K
LQotaW5saW5lIExheW91dFVuaXQgY29tcHV0ZUZsb3dGaXJzdExpbmVCYXNlbGluZShjb25zdCBS
ZW5kZXJCbG9ja0Zsb3cmIGZsb3csIGNvbnN0IExheW91dCYgbGF5b3V0KQotewotICAgIEFTU0VS
VF9VTlVTRUQobGF5b3V0LCBsYXlvdXQubGluZUNvdW50KCkpOwotICAgIHJldHVybiBmbG93LmJv
cmRlckFuZFBhZGRpbmdCZWZvcmUoKSArIGJhc2VsaW5lRnJvbUZsb3coZmxvdyk7Ci19Ci0KLWlu
bGluZSBMYXlvdXRVbml0IGNvbXB1dGVGbG93TGFzdExpbmVCYXNlbGluZShjb25zdCBSZW5kZXJC
bG9ja0Zsb3cmIGZsb3csIGNvbnN0IExheW91dCYgbGF5b3V0KQotewotICAgIEFTU0VSVChsYXlv
dXQubGluZUNvdW50KCkpOwotICAgIHJldHVybiBmbG93LmJvcmRlckFuZFBhZGRpbmdCZWZvcmUo
KSArIGxpbmVIZWlnaHRGcm9tRmxvdyhmbG93KSAqIChsYXlvdXQubGluZUNvdW50KCkgLSAxKSAr
IGJhc2VsaW5lRnJvbUZsb3coZmxvdyk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IGxpbmVIZWln
aHRGcm9tRmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCi17Ci0gICAgcmV0dXJuIGZs
b3cubGluZUhlaWdodChmYWxzZSwgSG9yaXpvbnRhbExpbmUsIFBvc2l0aW9uT2ZJbnRlcmlvckxp
bmVCb3hlcyk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IGJhc2VsaW5lRnJvbUZsb3coY29uc3Qg
UmVuZGVyQmxvY2tGbG93JiBmbG93KQotewotICAgIHJldHVybiBmbG93LmJhc2VsaW5lUG9zaXRp
b24oQWxwaGFiZXRpY0Jhc2VsaW5lLCBmYWxzZSwgSG9yaXpvbnRhbExpbmUsIFBvc2l0aW9uT2ZJ
bnRlcmlvckxpbmVCb3hlcyk7Ci19Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFBhZ2luYXRpb24uY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAxYzhkZTcwZWZlN2MuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFBhZ2luYXRpb24uY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dFBhZ2luYXRpb24uaCIKLQotI2luY2x1ZGUgIkZv
bnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCi0jaW5jbHVkZSAiU2lt
cGxlTGluZUxheW91dC5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewotCi1z
dHJ1Y3QgUGFnaW5hdGVkTGluZSB7Ci0gICAgTGF5b3V0VW5pdCB0b3A7Ci0gICAgTGF5b3V0VW5p
dCBib3R0b207Ci0gICAgTGF5b3V0VW5pdCBoZWlnaHQ7IC8vIFNhbWUgdmFsdWUgZm9yIGVhY2gg
bGluZXMgYXRtLgotfTsKLXVzaW5nIFBhZ2luYXRlZExpbmVzID0gVmVjdG9yPFBhZ2luYXRlZExp
bmUsIDIwPjsKLQotc3RhdGljIFBhZ2luYXRlZExpbmUgY29tcHV0ZUxpbmVUb3BBbmRCb3R0b21X
aXRoT3ZlcmZsb3coY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCB1bnNpZ25lZCBsaW5lSW5k
ZXgsIExheW91dDo6U2ltcGxlTGluZVN0cnV0cyYgc3RydXRzKQotewotICAgIC8vIEZJWE1FOiBB
ZGQgdmlzdWFsT3ZlcmZsb3dGb3JEZWNvcmF0aW9ucy4KLSAgICBhdXRvJiBmb250TWV0cmljcyA9
IGZsb3cuc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCk7Ci0gICAgYXV0byBhc2Nl
bnQgPSBmb250TWV0cmljcy5hc2NlbnQoKTsKLSAgICBhdXRvIGRlc2NlbnQgPSBmb250TWV0cmlj
cy5kZXNjZW50KCk7Ci0gICAgYXV0byBsaW5lSGVpZ2h0ID0gbGluZUhlaWdodEZyb21GbG93KGZs
b3cpOwotICAgIExheW91dFVuaXQgb2Zmc2V0ID0gZmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVmb3Jl
KCk7Ci0gICAgZm9yIChhdXRvJiBzdHJ1dCA6IHN0cnV0cykgewotICAgICAgICBpZiAoc3RydXQu
bGluZUJyZWFrID4gbGluZUluZGV4KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG9mZnNl
dCArPSBzdHJ1dC5vZmZzZXQ7Ci0gICAgfQotICAgIGlmIChhc2NlbnQgKyBkZXNjZW50IDw9IGxp
bmVIZWlnaHQpIHsKLSAgICAgICAgYXV0byB0b3BQb3NpdGlvbiA9IGxpbmVJbmRleCAqIGxpbmVI
ZWlnaHQgKyBvZmZzZXQ7Ci0gICAgICAgIHJldHVybiB7IHRvcFBvc2l0aW9uLCB0b3BQb3NpdGlv
biArIGxpbmVIZWlnaHQsIGxpbmVIZWlnaHQgfTsKLSAgICB9Ci0gICAgYXV0byBiYXNlbGluZSA9
IGJhc2VsaW5lRnJvbUZsb3coZmxvdyk7Ci0gICAgYXV0byB0b3BQb3NpdGlvbiA9IGxpbmVJbmRl
eCAqIGxpbmVIZWlnaHQgKyBvZmZzZXQgKyBiYXNlbGluZSAtIGFzY2VudDsKLSAgICBhdXRvIGJv
dHRvbVBvc2l0aW9uID0gdG9wUG9zaXRpb24gKyBhc2NlbnQgKyBkZXNjZW50OwotICAgIHJldHVy
biB7IHRvcFBvc2l0aW9uLCBib3R0b21Qb3NpdGlvbiwgYm90dG9tUG9zaXRpb24gLSB0b3BQb3Np
dGlvbiB9OwotfQotCi1zdGF0aWMgdW5zaWduZWQgY29tcHV0ZUxpbmVCcmVha0luZGV4KHVuc2ln
bmVkIGJyZWFrQ2FuZGlkYXRlLCB1bnNpZ25lZCBsaW5lQ291bnQsIGludCBvcnBoYW5zTmVlZGVk
LCBpbnQgd2lkb3dzTmVlZGVkLAotICAgIGNvbnN0IExheW91dDo6U2ltcGxlTGluZVN0cnV0cyYg
c3RydXRzKQotewotICAgIC8vIEZpcnN0IGxpbmUgZG9lcyBub3QgZml0IHRoZSBjdXJyZW50IHBh
Z2UuCi0gICAgaWYgKCFicmVha0NhbmRpZGF0ZSkKLSAgICAgICAgcmV0dXJuIGJyZWFrQ2FuZGlk
YXRlOwotICAgIAotICAgIGludCB3aWRvd3NPblRoZU5leHRQYWdlID0gbGluZUNvdW50IC0gYnJl
YWtDYW5kaWRhdGU7Ci0gICAgaWYgKHdpZG93c05lZWRlZCA8PSB3aWRvd3NPblRoZU5leHRQYWdl
KQotICAgICAgICByZXR1cm4gYnJlYWtDYW5kaWRhdGU7Ci0gICAgLy8gT25seSBicmVhayBhZnRl
ciB0aGUgZmlyc3QgbGluZSB3aXRoIHdpZG93cy4KLSAgICBhdXRvIGxpbmVCcmVhayA9IHN0ZDo6
bWF4PGludD4obGluZUNvdW50IC0gd2lkb3dzTmVlZGVkLCAxKTsKLSAgICBpZiAob3JwaGFuc05l
ZWRlZCA+IGxpbmVCcmVhaykKLSAgICAgICAgcmV0dXJuIGJyZWFrQ2FuZGlkYXRlOwotICAgIC8v
IEJyZWFrIG9uIGN1cnJlbnQgcGFnZSBvbmx5LgotICAgIGlmIChzdHJ1dHMuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gbGluZUJyZWFrOwotICAgIEFTU0VSVChzdHJ1dHMubGFzdCgpLmxpbmVC
cmVhayArIDEgPCBsaW5lQ291bnQpOwotICAgIHJldHVybiBzdGQ6Om1heDx1bnNpZ25lZD4oc3Ry
dXRzLmxhc3QoKS5saW5lQnJlYWsgKyAxLCBsaW5lQnJlYWspOwotfQotCi1zdGF0aWMgTGF5b3V0
VW5pdCBjb21wdXRlT2Zmc2V0QWZ0ZXJMaW5lQnJlYWsoTGF5b3V0VW5pdCBsaW5lQnJlYWtQb3Np
dGlvbiwgYm9vbCBpc0ZpcnN0TGluZSwgYm9vbCBhdFRoZVRvcE9mQ29sdW1uT3JQYWdlLCBjb25z
dCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCi17Ci0gICAgLy8gTm8gb2Zmc2V0IGZvciB0b3Agb2Yg
dGhlIHBhZ2UgbGluZXMgdW5sZXNzIHdpZG93cyBwdXNoZWQgdGhlIGxpbmUgYnJlYWsuCi0gICAg
TGF5b3V0VW5pdCBvZmZzZXQgPSBpc0ZpcnN0TGluZSA/IGZsb3cuYm9yZGVyQW5kUGFkZGluZ0Jl
Zm9yZSgpIDogMF9sdTsKLSAgICBpZiAoYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSkKLSAgICAgICAg
cmV0dXJuIG9mZnNldDsKLSAgICByZXR1cm4gb2Zmc2V0ICsgZmxvdy5wYWdlUmVtYWluaW5nTG9n
aWNhbEhlaWdodEZvck9mZnNldChsaW5lQnJlYWtQb3NpdGlvbiwgUmVuZGVyQmxvY2tGbG93OjpF
eGNsdWRlUGFnZUJvdW5kYXJ5KTsKLX0KLQotc3RhdGljIHZvaWQgc2V0UGFnZUJyZWFrRm9yTGlu
ZSh1bnNpZ25lZCBsaW5lQnJlYWtJbmRleCwgUGFnaW5hdGVkTGluZXMmIGxpbmVzLCBSZW5kZXJC
bG9ja0Zsb3cmIGZsb3csIExheW91dDo6U2ltcGxlTGluZVN0cnV0cyYgc3RydXRzLAotICAgIGJv
b2wgYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSwgYm9vbCBsaW5lRG9lc05vdEZpdCkKLXsKLSAgICBh
dXRvIGxpbmUgPSBsaW5lcy5hdChsaW5lQnJlYWtJbmRleCk7Ci0gICAgYXV0byByZW1haW5pbmdM
b2dpY2FsSGVpZ2h0ID0gZmxvdy5wYWdlUmVtYWluaW5nTG9naWNhbEhlaWdodEZvck9mZnNldChs
aW5lLnRvcCwgUmVuZGVyQmxvY2tGbG93OjpFeGNsdWRlUGFnZUJvdW5kYXJ5KTsKLSAgICBhdXRv
JiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKLSAgICBhdXRvIGZpcnN0TGluZURvZXNOb3RGaXQgPSAh
bGluZUJyZWFrSW5kZXggJiYgbGluZS5oZWlnaHQgPCBmbG93LnBhZ2VMb2dpY2FsSGVpZ2h0Rm9y
T2Zmc2V0KGxpbmUudG9wKTsKLSAgICBhdXRvIG1vdmVPcnBoYW5Ub05leHRDb2x1bW4gPSBsaW5l
RG9lc05vdEZpdCAmJiAhc3R5bGUuaGFzQXV0b09ycGhhbnMoKSAmJiBzdHlsZS5vcnBoYW5zKCkg
PiAoc2hvcnQpbGluZUJyZWFrSW5kZXg7Ci0gICAgaWYgKGZpcnN0TGluZURvZXNOb3RGaXQgfHwg
bW92ZU9ycGhhblRvTmV4dENvbHVtbikgewotICAgICAgICBhdXRvIGZpcnN0TGluZSA9IGxpbmVz
LmZpcnN0KCk7Ci0gICAgICAgIGF1dG8gZmlyc3RMaW5lT3ZlcmZsb3dSZWN0ID0gY29tcHV0ZU92
ZXJmbG93KGZsb3csIExheW91dFJlY3QoMF9sdSwgZmlyc3RMaW5lLnRvcCwgMF9sdSwgZmlyc3RM
aW5lLmhlaWdodCkpOwotICAgICAgICBhdXRvIGZpcnN0TGluZVVwcGVyT3ZlcmhhbmcgPSBzdGQ6
Om1heChMYXlvdXRVbml0KC1maXJzdExpbmVPdmVyZmxvd1JlY3QueSgpKSwgMF9sdSk7Ci0gICAg
ICAgIGZsb3cuc2V0UGFnaW5hdGlvblN0cnV0KGxpbmUudG9wICsgcmVtYWluaW5nTG9naWNhbEhl
aWdodCArIGZpcnN0TGluZVVwcGVyT3ZlcmhhbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGlmIChhdFRoZVRvcE9mQ29sdW1uT3JQYWdlKQotICAgICAgICBmbG93LnNldFBhZ2VCcmVh
ayhsaW5lLnRvcCwgbGluZS5oZWlnaHQpOwotICAgIGVsc2UKLSAgICAgICAgZmxvdy5zZXRQYWdl
QnJlYWsobGluZS50b3AsIGxpbmUuaGVpZ2h0IC0gcmVtYWluaW5nTG9naWNhbEhlaWdodCk7Ci0g
ICAgc3RydXRzLmFwcGVuZCh7IGxpbmVCcmVha0luZGV4LCBjb21wdXRlT2Zmc2V0QWZ0ZXJMaW5l
QnJlYWsobGluZXNbbGluZUJyZWFrSW5kZXhdLnRvcCwgIWxpbmVCcmVha0luZGV4LCBhdFRoZVRv
cE9mQ29sdW1uT3JQYWdlLCBmbG93KSB9KTsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlTWluaW11
bVBhZ2VIZWlnaHQoUmVuZGVyQmxvY2tGbG93JiBmbG93LCB1bnNpZ25lZCBsaW5lQ291bnQpCi17
Ci0gICAgYXV0byYgc3R5bGUgPSBmbG93LnN0eWxlKCk7Ci0gICAgYXV0byB3aWRvd3MgPSBzdHls
ZS5oYXNBdXRvV2lkb3dzKCkgPyAxIDogc3RkOjptYXg8aW50PihzdHlsZS53aWRvd3MoKSwgMSk7
Ci0gICAgYXV0byBvcnBoYW5zID0gc3R5bGUuaGFzQXV0b09ycGhhbnMoKSA/IDEgOiBzdGQ6Om1h
eDxpbnQ+KHN0eWxlLm9ycGhhbnMoKSwgMSk7Ci0gICAgYXV0byBtaW5pbXVtTGluZUNvdW50ID0g
c3RkOjptaW48dW5zaWduZWQ+KHN0ZDo6bWF4KHdpZG93cywgb3JwaGFucyksIGxpbmVDb3VudCk7
Ci0gICAgZmxvdy51cGRhdGVNaW5pbXVtUGFnZUhlaWdodCgwLCBtaW5pbXVtTGluZUNvdW50ICog
bGluZUhlaWdodEZyb21GbG93KGZsb3cpKTsKLX0KLQotdm9pZCBhZGp1c3RMaW5lUG9zaXRpb25z
Rm9yUGFnaW5hdGlvbihTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQmIHNpbXBsZUxpbmVzLCBSZW5k
ZXJCbG9ja0Zsb3cmIGZsb3cpCi17Ci0gICAgTGF5b3V0OjpTaW1wbGVMaW5lU3RydXRzIHN0cnV0
czsKLSAgICBhdXRvIGxpbmVDb3VudCA9IHNpbXBsZUxpbmVzLmxpbmVDb3VudCgpOwotICAgIHVw
ZGF0ZU1pbmltdW1QYWdlSGVpZ2h0KGZsb3csIGxpbmVDb3VudCk7Ci0gICAgLy8gRmlyc3QgcGFz
cyB3aXRoIG5vIHBhZ2luYXRpb24gb2Zmc2V0PwotICAgIGlmICghZmxvdy5wYWdlTG9naWNhbEhl
aWdodEZvck9mZnNldCgwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGxpbmVJbmRl
eCA9IDA7Ci0gICAgYXV0byB3aWRvd3MgPSBmbG93LnN0eWxlKCkuaGFzQXV0b1dpZG93cygpID8g
MSA6IHN0ZDo6bWF4PGludD4oZmxvdy5zdHlsZSgpLndpZG93cygpLCAxKTsKLSAgICBhdXRvIG9y
cGhhbnMgPSBmbG93LnN0eWxlKCkuaGFzQXV0b09ycGhhbnMoKSA/IDEgOiBzdGQ6Om1heDxpbnQ+
KGZsb3cuc3R5bGUoKS5vcnBoYW5zKCksIDEpOwotICAgIFBhZ2luYXRlZExpbmVzIGxpbmVzOwot
ICAgIGZvciAodW5zaWduZWQgcnVuSW5kZXggPSAwOyBydW5JbmRleCA8IHNpbXBsZUxpbmVzLnJ1
bkNvdW50KCk7ICsrcnVuSW5kZXgpIHsKLSAgICAgICAgYXV0byYgcnVuID0gc2ltcGxlTGluZXMu
cnVuQXQocnVuSW5kZXgpOwotICAgICAgICBpZiAoIXJ1bi5pc0VuZE9mTGluZSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8gbGluZSA9IGNvbXB1dGVMaW5lVG9wQW5kQm90
dG9tV2l0aE92ZXJmbG93KGZsb3csIGxpbmVJbmRleCwgc3RydXRzKTsKLSAgICAgICAgbGluZXMu
YXBwZW5kKGxpbmUpOwotICAgICAgICBhdXRvIHJlbWFpbmluZ0hlaWdodCA9IGZsb3cucGFnZVJl
bWFpbmluZ0xvZ2ljYWxIZWlnaHRGb3JPZmZzZXQobGluZS50b3AsIFJlbmRlckJsb2NrRmxvdzo6
RXhjbHVkZVBhZ2VCb3VuZGFyeSk7Ci0gICAgICAgIGF1dG8gYXRUaGVUb3BPZkNvbHVtbk9yUGFn
ZSA9IGZsb3cucGFnZUxvZ2ljYWxIZWlnaHRGb3JPZmZzZXQobGluZS50b3ApID09IHJlbWFpbmlu
Z0hlaWdodDsKLSAgICAgICAgYXV0byBsaW5lRG9lc05vdEZpdCA9IGxpbmUuaGVpZ2h0ID4gcmVt
YWluaW5nSGVpZ2h0OwotICAgICAgICBpZiAobGluZURvZXNOb3RGaXQgfHwgKGF0VGhlVG9wT2ZD
b2x1bW5PclBhZ2UgJiYgbGluZUluZGV4KSkgewotICAgICAgICAgICAgYXV0byBsaW5lQnJlYWtJ
bmRleCA9IGNvbXB1dGVMaW5lQnJlYWtJbmRleChsaW5lSW5kZXgsIGxpbmVDb3VudCwgb3JwaGFu
cywgd2lkb3dzLCBzdHJ1dHMpOwotICAgICAgICAgICAgLy8gQXJlIHdlIHN0aWxsIGF0IHRoZSB0
b3Agb2YgdGhlIGNvbHVtbi9wYWdlPwotICAgICAgICAgICAgYXRUaGVUb3BPZkNvbHVtbk9yUGFn
ZSA9IGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UgPyBsaW5lSW5kZXggPT0gbGluZUJyZWFrSW5kZXgg
OiBmYWxzZTsKLSAgICAgICAgICAgIHNldFBhZ2VCcmVha0ZvckxpbmUobGluZUJyZWFrSW5kZXgs
IGxpbmVzLCBmbG93LCBzdHJ1dHMsIGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UsIGxpbmVEb2VzTm90
Rml0KTsKLSAgICAgICAgICAgIC8vIFJlY29tcHV0ZSBsaW5lIHBvc2l0aW9ucyB0aGF0IHdlIGFs
cmVhZHkgdmlzaXRlZCBidXQgd2lkb3cgYnJlYWsgcHVzaGVkIHRoZW0gdG8gYSBuZXcgcGFnZS4K
LSAgICAgICAgICAgIGZvciAoYXV0byBpID0gbGluZUJyZWFrSW5kZXg7IGkgPCBsaW5lcy5zaXpl
KCk7ICsraSkKLSAgICAgICAgICAgICAgICBsaW5lcy5hdChpKSA9IGNvbXB1dGVMaW5lVG9wQW5k
Qm90dG9tV2l0aE92ZXJmbG93KGZsb3csIGksIHN0cnV0cyk7Ci0gICAgICAgIH0KLSAgICAgICAg
KytsaW5lSW5kZXg7Ci0gICAgfQotICAgIHNpbXBsZUxpbmVzLnNldExpbmVTdHJ1dHMoV1RGTW92
ZShzdHJ1dHMpKTsKLX0KLQotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1NpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvU2ltcGxlTGluZUxheW91dFBhZ2luYXRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZGQ2YTE3YzBlNWM5Li4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwz
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgUmVuZGVyQmxvY2tGbG93OwotCi1uYW1lc3BhY2UgU2ltcGxlTGluZUxheW91
dCB7Ci0KLWNsYXNzIExheW91dDsKLSAgICAKLXZvaWQgYWRqdXN0TGluZVBvc2l0aW9uc0ZvclBh
Z2luYXRpb24oTGF5b3V0JiwgUmVuZGVyQmxvY2tGbG93Jik7Ci0KLX0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzYTZjMTg4MTI4ZS4uMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMzQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmgiCi0KLSNpbmNs
dWRlICJJbmxpbmVUZXh0Qm94U3R5bGUuaCIKLSNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIK
LSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0RnVu
Y3Rpb25zLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBTaW1wbGVMaW5lTGF5
b3V0IHsKLQotc3RhdGljIEZsb2F0UG9pbnQgbGluZVBvc2l0aW9uKGZsb2F0IGxvZ2ljYWxMZWZ0
LCBmbG9hdCBsb2dpY2FsVG9wKQotewotICAgIHJldHVybiBGbG9hdFBvaW50KGxvZ2ljYWxMZWZ0
LCByb3VuZGYobG9naWNhbFRvcCkpOwotfQotCi1zdGF0aWMgRmxvYXRTaXplIGxpbmVTaXplKGZs
b2F0IGxvZ2ljYWxMZWZ0LCBmbG9hdCBsb2dpY2FsUmlnaHQsIGZsb2F0IGhlaWdodCkKLXsKLSAg
ICByZXR1cm4gRmxvYXRTaXplKGxvZ2ljYWxSaWdodCAtIGxvZ2ljYWxMZWZ0LCBoZWlnaHQpOwot
fQotCi1SdW5SZXNvbHZlcjo6UnVuOjpSdW4oY29uc3QgSXRlcmF0b3ImIGl0ZXJhdG9yKQotICAg
IDogbV9pdGVyYXRvcihpdGVyYXRvcikKLXsKLX0KLQotU3RyaW5nIFJ1blJlc29sdmVyOjpSdW46
OnRleHRXaXRoSHlwaGVuKCkgY29uc3QKLXsKLSAgICBhdXRvJiBydW4gPSBtX2l0ZXJhdG9yLnNp
bXBsZVJ1bigpOwotICAgIEFTU0VSVChydW4uaGFzSHlwaGVuKTsKLSAgICAvLyBFbXB0eSBydW5z
IHNob3VsZCBub3QgaGF2ZSBoeXBoZW4uCi0gICAgQVNTRVJUKHJ1bi5zdGFydCA8IHJ1bi5lbmQp
OwotICAgIGF1dG8mIHNlZ21lbnQgPSBtX2l0ZXJhdG9yLnJlc29sdmVyKCkubV9mbG93Q29udGVu
dHMuc2VnbWVudEZvclJ1bihydW4uc3RhcnQsIHJ1bi5lbmQpOwotICAgIGF1dG8gdGV4dCA9IFN0
cmluZ1ZpZXcoc2VnbWVudC50ZXh0KS5zdWJzdHJpbmcoc2VnbWVudC50b1NlZ21lbnRQb3NpdGlv
bihydW4uc3RhcnQpLCBydW4uZW5kIC0gcnVuLnN0YXJ0KTsKLSAgICByZXR1cm4gbWFrZVN0cmlu
Zyh0ZXh0LCBtX2l0ZXJhdG9yLnJlc29sdmVyKCkuZmxvdygpLnN0eWxlKCkuaHlwaGVuU3RyaW5n
KCkpOwotfQotCi1GbG9hdFJlY3QgUnVuUmVzb2x2ZXI6OlJ1bjo6cmVjdCgpIGNvbnN0Ci17Ci0g
ICAgYXV0byYgcnVuID0gbV9pdGVyYXRvci5zaW1wbGVSdW4oKTsKLSAgICBhdXRvJiByZXNvbHZl
ciA9IG1faXRlcmF0b3IucmVzb2x2ZXIoKTsKLSAgICBmbG9hdCBiYXNlbGluZSA9IGNvbXB1dGVC
YXNlbGluZVBvc2l0aW9uKCk7Ci0gICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IGxpbmVQb3NpdGlv
bihydW4ubG9naWNhbExlZnQsIGJhc2VsaW5lIC0gcmVzb2x2ZXIubV9hc2NlbnQpOwotICAgIEZs
b2F0U2l6ZSBzaXplID0gbGluZVNpemUocnVuLmxvZ2ljYWxMZWZ0LCBydW4ubG9naWNhbFJpZ2h0
LCByZXNvbHZlci5tX2FzY2VudCArIHJlc29sdmVyLm1fZGVzY2VudCArIHJlc29sdmVyLm1fdmlz
dWFsT3ZlcmZsb3dPZmZzZXQpOwotCi0gICAgcmV0dXJuIEZsb2F0UmVjdChwb3NpdGlvbiwgc2l6
ZSk7Ci19Ci0KLVN0cmluZ1ZpZXcgUnVuUmVzb2x2ZXI6OlJ1bjo6dGV4dCgpIGNvbnN0Ci17Ci0g
ICAgYXV0byYgcnVuID0gbV9pdGVyYXRvci5zaW1wbGVSdW4oKTsKLSAgICBBU1NFUlQocnVuLnN0
YXJ0IDwgcnVuLmVuZCk7Ci0gICAgYXV0byYgc2VnbWVudCA9IG1faXRlcmF0b3IucmVzb2x2ZXIo
KS5tX2Zsb3dDb250ZW50cy5zZWdtZW50Rm9yUnVuKHJ1bi5zdGFydCwgcnVuLmVuZCk7Ci0gICAg
Ly8gV2UgY3VycmVudGx5IHNwbGl0IHJ1bnMgb24gc2VnbWVudCBib3VuZGFyaWVzIChkaWZmZXJl
bnQgUmVuZGVyT2JqZWN0KS4KLSAgICBBU1NFUlQocnVuLmVuZCA8PSBzZWdtZW50LmVuZCk7Ci0g
ICAgcmV0dXJuIFN0cmluZ1ZpZXcoc2VnbWVudC50ZXh0KS5zdWJzdHJpbmcoc2VnbWVudC50b1Nl
Z21lbnRQb3NpdGlvbihydW4uc3RhcnQpLCBydW4uZW5kIC0gcnVuLnN0YXJ0KTsKLX0KLQotY29u
c3QgUmVuZGVyT2JqZWN0JiBSdW5SZXNvbHZlcjo6UnVuOjpyZW5kZXJlcigpIGNvbnN0Ci17Ci0g
ICAgYXV0byYgcnVuID0gbV9pdGVyYXRvci5zaW1wbGVSdW4oKTsKLSAgICAvLyBGbG93Q29udGVu
dHMgY2Fubm90IGRpZmZlcmVudGlhdGUgZW1wdHkgcnVucy4KLSAgICBBU1NFUlQocnVuLnN0YXJ0
ICE9IHJ1bi5lbmQpOwotICAgIHJldHVybiBtX2l0ZXJhdG9yLnJlc29sdmVyKCkubV9mbG93Q29u
dGVudHMuc2VnbWVudEZvclJ1bihydW4uc3RhcnQsIHJ1bi5lbmQpLnJlbmRlcmVyOwotfQotCi11
bnNpZ25lZCBSdW5SZXNvbHZlcjo6UnVuOjpsb2NhbFN0YXJ0KCkgY29uc3QKLXsKLSAgICBhdXRv
JiBydW4gPSBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpOwotICAgIC8vIEZsb3dDb250ZW50cyBjYW5u
b3QgZGlmZmVyZW50aWF0ZSBlbXB0eSBydW5zLgotICAgIEFTU0VSVChydW4uc3RhcnQgIT0gcnVu
LmVuZCk7Ci0gICAgcmV0dXJuIG1faXRlcmF0b3IucmVzb2x2ZXIoKS5tX2Zsb3dDb250ZW50cy5z
ZWdtZW50Rm9yUnVuKHJ1bi5zdGFydCwgcnVuLmVuZCkudG9TZWdtZW50UG9zaXRpb24ocnVuLnN0
YXJ0KTsKLX0KLQotdW5zaWduZWQgUnVuUmVzb2x2ZXI6OlJ1bjo6bG9jYWxFbmQoKSBjb25zdAot
ewotICAgIGF1dG8mIHJ1biA9IG1faXRlcmF0b3Iuc2ltcGxlUnVuKCk7Ci0gICAgLy8gRmxvd0Nv
bnRlbnRzIGNhbm5vdCBkaWZmZXJlbnRpYXRlIGVtcHR5IHJ1bnMuCi0gICAgQVNTRVJUKHJ1bi5z
dGFydCAhPSBydW4uZW5kKTsKLSAgICByZXR1cm4gbV9pdGVyYXRvci5yZXNvbHZlcigpLm1fZmxv
d0NvbnRlbnRzLnNlZ21lbnRGb3JSdW4ocnVuLnN0YXJ0LCBydW4uZW5kKS50b1NlZ21lbnRQb3Np
dGlvbihydW4uZW5kKTsKLX0KLQotUnVuUmVzb2x2ZXI6Okl0ZXJhdG9yOjpJdGVyYXRvcihjb25z
dCBSdW5SZXNvbHZlciYgcmVzb2x2ZXIsIHVuc2lnbmVkIHJ1bkluZGV4LCB1bnNpZ25lZCBsaW5l
SW5kZXgpCi0gICAgOiBtX2xheW91dCgmcmVzb2x2ZXIubV9sYXlvdXQpCi0gICAgLCBtX3Jlc29s
dmVyKCZyZXNvbHZlcikKLSAgICAsIG1fcnVuSW5kZXgocnVuSW5kZXgpCi0gICAgLCBtX2xpbmVJ
bmRleChsaW5lSW5kZXgpCi17Ci0gICAgQVNTRVJUKCZyZXNvbHZlciA9PSAmbV9sYXlvdXQtPnJ1
blJlc29sdmVyKCkpOwotfQotCi1SdW5SZXNvbHZlcjo6SXRlcmF0b3ImIFJ1blJlc29sdmVyOjpJ
dGVyYXRvcjo6YWR2YW5jZSgpCi17Ci0gICAgaWYgKHNpbXBsZVJ1bigpLmlzRW5kT2ZMaW5lKQot
ICAgICAgICArK21fbGluZUluZGV4OwotICAgICsrbV9ydW5JbmRleDsKLSAgICByZXR1cm4gKnRo
aXM7Ci19Ci0KLVJ1blJlc29sdmVyOjpJdGVyYXRvciYgUnVuUmVzb2x2ZXI6Okl0ZXJhdG9yOjph
ZHZhbmNlTGluZXModW5zaWduZWQgbGluZUNvdW50KQotewotICAgIHVuc2lnbmVkIHJ1bkNvdW50
ID0gbGF5b3V0KCkucnVuQ291bnQoKTsKLSAgICBpZiAocnVuQ291bnQgPT0gbGF5b3V0KCkubGlu
ZUNvdW50KCkpIHsKLSAgICAgICAgbV9ydW5JbmRleCA9IHN0ZDo6bWluKHJ1bkNvdW50LCBtX3J1
bkluZGV4ICsgbGluZUNvdW50KTsKLSAgICAgICAgbV9saW5lSW5kZXggPSBtX3J1bkluZGV4Owot
ICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIHVuc2lnbmVkIHRhcmdldCA9IG1fbGlu
ZUluZGV4ICsgbGluZUNvdW50OwotICAgIHdoaWxlIChtX2xpbmVJbmRleCA8IHRhcmdldCAmJiBt
X3J1bkluZGV4IDwgcnVuQ291bnQpCi0gICAgICAgIGFkdmFuY2UoKTsKLQotICAgIHJldHVybiAq
dGhpczsKLX0KLQotUnVuUmVzb2x2ZXI6OlJ1blJlc29sdmVyKGNvbnN0IFJlbmRlckJsb2NrRmxv
dyYgZmxvdywgY29uc3QgTGF5b3V0JiBsYXlvdXQpCi0gICAgOiBtX2Zsb3dSZW5kZXJlcihmbG93
KQotICAgICwgbV9sYXlvdXQobGF5b3V0KQotICAgICwgbV9mbG93Q29udGVudHMoZmxvdykKLSAg
ICAsIG1fbGluZUhlaWdodChsaW5lSGVpZ2h0RnJvbUZsb3coZmxvdykpCi0gICAgLCBtX2Jhc2Vs
aW5lKGJhc2VsaW5lRnJvbUZsb3coZmxvdykpCi0gICAgLCBtX2JvcmRlckFuZFBhZGRpbmdCZWZv
cmUoZmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkpCi0gICAgLCBtX2FzY2VudChmbG93LnN0
eWxlKCkuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpKQotICAgICwgbV9kZXNj
ZW50KGZsb3cuc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpKQot
ICAgICwgbV92aXN1YWxPdmVyZmxvd09mZnNldCh2aXN1YWxPdmVyZmxvd0ZvckRlY29yYXRpb25z
KGZsb3cuc3R5bGUoKSwgbnVsbHB0cikuYm90dG9tKQotewotfQotCi11bnNpZ25lZCBSdW5SZXNv
bHZlcjo6YWRqdXN0TGluZUluZGV4Rm9yU3RydXRzKExheW91dFVuaXQgeSwgSW5kZXhUeXBlIHR5
cGUsIHVuc2lnbmVkIGxpbmVJbmRleENhbmRpZGF0ZSkgY29uc3QKLXsKLSAgICBhdXRvJiBzdHJ1
dHMgPSBtX2xheW91dC5zdHJ1dHMoKTsKLSAgICAvLyBXZSBuZWVkIHRvIG9mZnNldCB0aGUgbGlu
ZUluZGV4IHdpdGggbGluZSBzdHJ1dHMgd2hlbiB0aGVyZSdzIGFuIGFjdHVhbCBzdHJ1dCBiZWZv
cmUgdGhlIGNhbmRpZGF0ZS4KLSAgICBhdXRvJiBzdHJ1dCA9IHN0cnV0cy5maXJzdCgpOwotICAg
IGlmIChzdHJ1dC5saW5lQnJlYWsgPj0gbGluZUluZGV4Q2FuZGlkYXRlKQotICAgICAgICByZXR1
cm4gbGluZUluZGV4Q2FuZGlkYXRlOwotICAgIHVuc2lnbmVkIHN0cnV0SW5kZXggPSAwOwotICAg
IE9wdGlvbmFsPHVuc2lnbmVkPiBsYXN0SW5kZXhDYW5kaWRhdGU7Ci0gICAgYXV0byB0b3AgPSBz
dHJ1dC5saW5lQnJlYWsgKiBtX2xpbmVIZWlnaHQ7Ci0gICAgYXV0byBsaW5lSGVpZ2h0V2l0aE92
ZXJmbG93ID0gbV9saW5lSGVpZ2h0OwotICAgIC8vIElmIGZvbnQgaXMgbGFyZ2VyIHRoYW4gdGhl
IGxpbmUgaGVpZ2h0IChnbHlwaHMgb3ZlcmZsb3cpLCB1c2UgdGhlIGZvbnQgc2l6ZSB3aGVuIGNo
ZWNraW5nIGxpbmUgYm91bmRhcmllcy4KLSAgICBpZiAobV9hc2NlbnQgKyBtX2Rlc2NlbnQgPiBt
X2xpbmVIZWlnaHQpIHsKLSAgICAgICAgbGluZUhlaWdodFdpdGhPdmVyZmxvdyA9IG1fYXNjZW50
ICsgbV9kZXNjZW50OwotICAgICAgICB0b3AgKz0gbV9iYXNlbGluZSAtIG1fYXNjZW50OwotICAg
IH0KLSAgICBhdXRvIGJvdHRvbSA9IHRvcCArIGxpbmVIZWlnaHRXaXRoT3ZlcmZsb3c7Ci0gICAg
Zm9yIChhdXRvIGxpbmVJbmRleCA9IHN0cnV0LmxpbmVCcmVhazsgbGluZUluZGV4IDwgbV9sYXlv
dXQubGluZUNvdW50KCk7ICsrbGluZUluZGV4KSB7Ci0gICAgICAgIGZsb2F0IHN0cnV0T2Zmc2V0
ID0gMDsKLSAgICAgICAgaWYgKHN0cnV0SW5kZXggPCBzdHJ1dHMuc2l6ZSgpICYmIHN0cnV0cy5h
dChzdHJ1dEluZGV4KS5saW5lQnJlYWsgPT0gbGluZUluZGV4KQotICAgICAgICAgICAgc3RydXRP
ZmZzZXQgPSBzdHJ1dHMuYXQoc3RydXRJbmRleCsrKS5vZmZzZXQ7Ci0gICAgICAgIGJvdHRvbSA9
IHRvcCArIHN0cnV0T2Zmc2V0ICsgbGluZUhlaWdodFdpdGhPdmVyZmxvdzsKLSAgICAgICAgaWYg
KHkgPj0gdG9wICYmIHkgPCBib3R0b20pIHsKLSAgICAgICAgICAgIGlmICh0eXBlID09IEluZGV4
VHlwZTo6Rmlyc3QpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmVJbmRleDsKLSAgICAgICAg
ICAgIGxhc3RJbmRleENhbmRpZGF0ZSA9IGxpbmVJbmRleDsKLSAgICAgICAgfSBlbHNlIGlmIChs
YXN0SW5kZXhDYW5kaWRhdGUpCi0gICAgICAgICAgICByZXR1cm4gKmxhc3RJbmRleENhbmRpZGF0
ZTsKLSAgICAgICAgdG9wICs9IG1fbGluZUhlaWdodCArIHN0cnV0T2Zmc2V0OwotICAgIH0KLSAg
ICBpZiAobGFzdEluZGV4Q2FuZGlkYXRlIHx8IHkgPj0gYm90dG9tKQotICAgICAgICByZXR1cm4g
bV9sYXlvdXQubGluZUNvdW50KCkgLSAxOwotICAgIC8vIFdlIG1pc3NlZCB0aGUgbGluZS4KLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbGluZUluZGV4Q2FuZGlkYXRlOwot
fQotCi11bnNpZ25lZCBSdW5SZXNvbHZlcjo6bGluZUluZGV4Rm9ySGVpZ2h0KExheW91dFVuaXQg
aGVpZ2h0LCBJbmRleFR5cGUgdHlwZSkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9saW5lSGVpZ2h0
KTsKLSAgICBmbG9hdCB5ID0gaGVpZ2h0IC0gbV9ib3JkZXJBbmRQYWRkaW5nQmVmb3JlOwotICAg
IC8vIExpbmVzIG1heSBvdmVybGFwLCBhZGp1c3QgdG8gZ2V0IHRoZSBmaXJzdCBvciBsYXN0IGxp
bmUgYXQgdGhpcyBoZWlnaHQuCi0gICAgYXV0byBhZGp1c3RlZFkgPSB5OwotICAgIGlmICh0eXBl
ID09IEluZGV4VHlwZTo6Rmlyc3QpCi0gICAgICAgIGFkanVzdGVkWSArPSBtX2xpbmVIZWlnaHQg
LSAobV9iYXNlbGluZSArIG1fZGVzY2VudCk7Ci0gICAgZWxzZQotICAgICAgICBhZGp1c3RlZFkg
LT0gbV9iYXNlbGluZSAtIG1fYXNjZW50OwotICAgIGFkanVzdGVkWSA9IHN0ZDo6bWF4PGZsb2F0
PihhZGp1c3RlZFksIDApOwotICAgIGF1dG8gbGluZUluZGV4Q2FuZGlkYXRlID0gIHN0ZDo6bWlu
PHVuc2lnbmVkPihhZGp1c3RlZFkgLyBtX2xpbmVIZWlnaHQsIG1fbGF5b3V0LmxpbmVDb3VudCgp
IC0gMSk7Ci0gICAgaWYgKG1fbGF5b3V0Lmhhc0xpbmVTdHJ1dHMoKSkKLSAgICAgICAgcmV0dXJu
IGFkanVzdExpbmVJbmRleEZvclN0cnV0cyhMYXlvdXRVbml0KHkpLCB0eXBlLCBsaW5lSW5kZXhD
YW5kaWRhdGUpOwotICAgIHJldHVybiBsaW5lSW5kZXhDYW5kaWRhdGU7Ci19Ci0KLVdURjo6SXRl
cmF0b3JSYW5nZTxSdW5SZXNvbHZlcjo6SXRlcmF0b3I+IFJ1blJlc29sdmVyOjpyYW5nZUZvclJl
Y3QoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkgY29uc3QKLXsgCi0gICAgaWYgKCFtX2xpbmVIZWln
aHQpCi0gICAgICAgIHJldHVybiB7IGJlZ2luKCksIGVuZCgpIH07Ci0KLSAgICB1bnNpZ25lZCBm
aXJzdExpbmUgPSBsaW5lSW5kZXhGb3JIZWlnaHQocmVjdC55KCksIEluZGV4VHlwZTo6Rmlyc3Qp
OwotICAgIHVuc2lnbmVkIGxhc3RMaW5lID0gc3RkOjptYXgoZmlyc3RMaW5lLCBsaW5lSW5kZXhG
b3JIZWlnaHQocmVjdC5tYXhZKCksIEluZGV4VHlwZTo6TGFzdCkpOwotICAgIGF1dG8gcmFuZ2VC
ZWdpbiA9IGJlZ2luKCkuYWR2YW5jZUxpbmVzKGZpcnN0TGluZSk7Ci0gICAgaWYgKHJhbmdlQmVn
aW4gPT0gZW5kKCkpCi0gICAgICAgIHJldHVybiB7IGVuZCgpLCBlbmQoKSB9OwotICAgIGF1dG8g
cmFuZ2VFbmQgPSByYW5nZUJlZ2luOwotICAgIEFTU0VSVChsYXN0TGluZSA+PSBmaXJzdExpbmUp
OwotICAgIHJhbmdlRW5kLmFkdmFuY2VMaW5lcyhsYXN0TGluZSAtIGZpcnN0TGluZSArIDEpOwot
ICAgIHJldHVybiB7IHJhbmdlQmVnaW4sIHJhbmdlRW5kIH07Ci19Ci0KLVdURjo6SXRlcmF0b3JS
YW5nZTxSdW5SZXNvbHZlcjo6SXRlcmF0b3I+IFJ1blJlc29sdmVyOjpyYW5nZUZvckxpbmUodW5z
aWduZWQgbGluZUluZGV4KSBjb25zdAotewotICAgIGF1dG8gcmFuZ2VCZWdpbiA9IGJlZ2luKCku
YWR2YW5jZUxpbmVzKGxpbmVJbmRleCk7Ci0gICAgaWYgKHJhbmdlQmVnaW4gPT0gZW5kKCkpCi0g
ICAgICAgIHJldHVybiB7IGVuZCgpLCBlbmQoKSB9OwotICAgIGF1dG8gcmFuZ2VFbmQgPSByYW5n
ZUJlZ2luOwotICAgIHJhbmdlRW5kLmFkdmFuY2VMaW5lcygxKTsKLSAgICByZXR1cm4geyByYW5n
ZUJlZ2luLCByYW5nZUVuZCB9OwotfQotCi1XVEY6Okl0ZXJhdG9yUmFuZ2U8UnVuUmVzb2x2ZXI6
Okl0ZXJhdG9yPiBSdW5SZXNvbHZlcjo6cmFuZ2VGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmpl
Y3QmIHJlbmRlcmVyKSBjb25zdAotewotICAgIGlmIChiZWdpbigpID09IGVuZCgpKQotICAgICAg
ICByZXR1cm4geyBlbmQoKSwgZW5kKCkgfTsKLSAgICBGbG93Q29udGVudHM6Okl0ZXJhdG9yIHNl
Z21lbnQgPSBtX2Zsb3dDb250ZW50cy5iZWdpbigpOwotICAgIGF1dG8gcnVuID0gYmVnaW4oKTsK
LSAgICBBU1NFUlQoc2VnbWVudC0+c3RhcnQgPD0gKCpydW4pLnN0YXJ0KCkpOwotICAgIC8vIE1v
dmUgcnVuIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlZ21lbnQuCi0gICAgd2hpbGUgKCZzZWdt
ZW50LT5yZW5kZXJlciAhPSAmcmVuZGVyZXIgJiYgcnVuICE9IGVuZCgpKSB7Ci0gICAgICAgIGlm
ICgoKnJ1bikuc3RhcnQoKSA9PSBzZWdtZW50LT5zdGFydCAmJiAoKnJ1bikuZW5kKCkgPT0gc2Vn
bWVudC0+ZW5kKSB7Ci0gICAgICAgICAgICArK3J1bjsKLSAgICAgICAgICAgICsrc2VnbWVudDsK
LSAgICAgICAgfSBlbHNlIGlmICgoKnJ1bikuc3RhcnQoKSA8IHNlZ21lbnQtPmVuZCkKLSAgICAg
ICAgICAgICsrcnVuOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICArK3NlZ21lbnQ7Ci0gICAg
ICAgIEFTU0VSVChzZWdtZW50ICE9IG1fZmxvd0NvbnRlbnRzLmVuZCgpKTsKLSAgICB9Ci0gICAg
Ly8gRG8gd2UgYWN0dWFsbHkgaGF2ZSBhIHJ1biBmb3IgdGhpcyByZW5kZXJlcj8KLSAgICAvLyBD
b2xsYXBzZWQgd2hpdGVzcGFjZSB3aXRoIGRlZGljYXRlZCByZW5kZXJlciBjb3VsZCBlbmQgdXAg
d2l0aCBubyBydW4gYXQgYWxsLgotICAgIGlmIChydW4gPT0gZW5kKCkgfHwgKHNlZ21lbnQtPnN0
YXJ0ICE9IHNlZ21lbnQtPmVuZCAmJiBzZWdtZW50LT5lbmQgPD0gKCpydW4pLnN0YXJ0KCkpKQot
ICAgICAgICByZXR1cm4geyBlbmQoKSwgZW5kKCkgfTsKLQotICAgIGF1dG8gcmFuZ2VCZWdpbiA9
IHJ1bjsKLSAgICAvLyBNb3ZlIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBzZWdtZW50LgotICAgIHdo
aWxlIChydW4gIT0gZW5kKCkgJiYgKCpydW4pLnN0YXJ0KCkgPCBzZWdtZW50LT5lbmQpCi0gICAg
ICAgICsrcnVuOwotICAgIC8vIFNwZWNpYWwgY2FzZSB3aGVuIHNlZ21lbnQgPT0gcnVuLgotICAg
IGlmIChydW4gPT0gcmFuZ2VCZWdpbikKLSAgICAgICAgKytydW47Ci0gICAgcmV0dXJuIHsgcmFu
Z2VCZWdpbiwgcnVuIH07Ci19Ci0KLVJ1blJlc29sdmVyOjpJdGVyYXRvciBSdW5SZXNvbHZlcjo6
cnVuRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdAotewotICAgIGlmICgh
bV9saW5lSGVpZ2h0KQotICAgICAgICByZXR1cm4gZW5kKCk7Ci0gICAgaWYgKGJlZ2luKCkgPT0g
ZW5kKCkpCi0gICAgICAgIHJldHVybiBlbmQoKTsKLSAgICB1bnNpZ25lZCBsaW5lSW5kZXggPSBs
aW5lSW5kZXhGb3JIZWlnaHQocG9pbnQueSgpLCBJbmRleFR5cGU6Okxhc3QpOwotICAgIGF1dG8g
eCA9IHBvaW50LngoKSAtIG1fYm9yZGVyQW5kUGFkZGluZ0JlZm9yZTsKLSAgICBhdXRvIGl0ID0g
YmVnaW4oKTsKLSAgICBpdC5hZHZhbmNlTGluZXMobGluZUluZGV4KTsKLSAgICAvLyBQb2ludCBp
cyBhdCB0aGUgbGVmdCBzaWRlIG9mIHRoZSBmaXJzdCBydW4gb24gdGhpcyBsaW5lLgotICAgIGlm
ICgoKml0KS5sb2dpY2FsTGVmdCgpID4geCkKLSAgICAgICAgcmV0dXJuIGl0OwotICAgIC8vIEFk
dmFuY2UgdG8gdGhlIGZpcnN0IGNhbmRpZGF0ZSBydW4gb24gdGhpcyBsaW5lLgotICAgIHdoaWxl
IChpdCAhPSBlbmQoKSAmJiAoKml0KS5sb2dpY2FsUmlnaHQoKSA8IHggJiYgbGluZUluZGV4ID09
IGl0LmxpbmVJbmRleCgpKQotICAgICAgICArK2l0OwotICAgIC8vIFdlIGp1bXBlZCB0byB0aGUg
bmV4dCBsaW5lIHNvIHRoZSBwb2ludCBpcyBhdCB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgcHJldmlv
dXMgbGluZS4KLSAgICBpZiAoaXQubGluZUluZGV4KCkgPiBsaW5lSW5kZXgpCi0gICAgICAgIHJl
dHVybiAtLWl0OwotICAgIC8vIE5vdyB3ZSBoYXZlIGEgY2FuZGlkYXRlIHJ1bi4KLSAgICAvLyBG
aW5kIHRoZSBsYXN0IHJ1biB0aGF0IHN0aWxsIGNvbnRhaW5zIHRoaXMgcG9pbnQgKHRha2luZyBv
dmVybGFwcGluZyBydW5zIHdpdGggb2RkIHdvcmQgc3BhY2luZyB2YWx1ZXMgaW50byBhY2NvdW50
KS4KLSAgICB3aGlsZSAoaXQgIT0gZW5kKCkgJiYgKCppdCkubG9naWNhbExlZnQoKSA8PSB4ICYm
IGxpbmVJbmRleCA9PSBpdC5saW5lSW5kZXgoKSkKLSAgICAgICAgKytpdDsKLSAgICByZXR1cm4g
LS1pdDsKLX0KLQotV1RGOjpJdGVyYXRvclJhbmdlPFJ1blJlc29sdmVyOjpJdGVyYXRvcj4gUnVu
UmVzb2x2ZXI6OnJhbmdlRm9yUmVuZGVyZXJXaXRoT2Zmc2V0cyhjb25zdCBSZW5kZXJPYmplY3Qm
IHJlbmRlcmVyLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KSBjb25z
dAotewotICAgIEFTU0VSVChzdGFydE9mZnNldCA8PSBlbmRPZmZzZXQpOwotICAgIGF1dG8gcmFu
Z2UgPSByYW5nZUZvclJlbmRlcmVyKHJlbmRlcmVyKTsKLSAgICBpZiAocmFuZ2UuYmVnaW4oKSA9
PSByYW5nZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHsgZW5kKCksIGVuZCgpIH07Ci0gICAgYXV0
byBpdCA9IHJhbmdlLmJlZ2luKCk7Ci0gICAgYXV0byBsb2NhbEVuZCA9ICgqaXQpLnN0YXJ0KCkg
KyBlbmRPZmZzZXQ7Ci0gICAgLy8gQWR2YW5jZSB0byB0aGUgZmlyc3QgcnVuIGJlZm9yZSB0aGUg
c3RhcnQgb2Zmc2V0LiBPbmx5IHRoZSBmaXJzdCBub2RlIGluIGEgcmFuZ2UgY2FuIGhhdmUgYSBz
dGFydE9mZnNldC4KLSAgICAvLyBOb3RlIHRoYXQgdGhlIHN0YXJ0IG9mZnNldCBtYXkgY29pbmNp
ZGUgd2l0aCB0aGUgZW5kIG9mIGEgcnVuLiBUaGUgcnVuIGlzIHN0aWxsIGNvbnNpZGVyZWQgc28g
dGhhdCB3ZQotICAgIC8vIGNhbiByZXR1cm4gYW4gZW1wdHkgcmVjdCwgd2hpY2ggY29uZm9ybXMg
dG8gdGhlIGJlaGF2aW9yIG9mIEVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKS4KLSAgICB3aGlsZSAo
aXQgIT0gcmFuZ2UuZW5kKCkgJiYgKCppdCkuZW5kKCkgPCBzdGFydE9mZnNldCkKLSAgICAgICAg
KytpdDsKLSAgICBpZiAoaXQgPT0gcmFuZ2UuZW5kKCkpCi0gICAgICAgIHJldHVybiB7IGVuZCgp
LCBlbmQoKSB9OwotICAgIGF1dG8gcmFuZ2VCZWdpbiA9IGl0OwotICAgIC8vIFNwZWNpYWwgY2Fz
ZSBlbXB0eSByYW5nZXMgdGhhdCBzdGFydCBhdCB0aGUgZWRnZSBvZiB0aGUgcnVuLiBBcHBhcmVu
dGx5IG5vcm1hbCBsaW5lIGxheW91dCBpbmNsdWRlIHRob3NlLgotICAgIGlmIChsb2NhbEVuZCA9
PSBzdGFydE9mZnNldCAmJiAoKml0KS5zdGFydCgpID09IGxvY2FsRW5kKQotICAgICAgICByZXR1
cm4geyByYW5nZUJlZ2luLCArK2l0IH07Ci0gICAgLy8gQWR2YW5jZSBiZXlvbmQgdGhlIGxhc3Qg
cnVuIHdpdGggdGhlIGVuZCBvZmZzZXQuCi0gICAgd2hpbGUgKGl0ICE9IHJhbmdlLmVuZCgpICYm
ICgqaXQpLnN0YXJ0KCkgPCBsb2NhbEVuZCkKLSAgICAgICAgKytpdDsKLSAgICByZXR1cm4geyBy
YW5nZUJlZ2luLCBpdCB9OwotfQotCi1MaW5lUmVzb2x2ZXI6Okl0ZXJhdG9yOjpJdGVyYXRvcihS
dW5SZXNvbHZlcjo6SXRlcmF0b3IgcnVuSXRlcmF0b3IpCi0gICAgOiBtX3J1bkl0ZXJhdG9yKHJ1
bkl0ZXJhdG9yKQotewotfQotCi1GbG9hdFJlY3QgTGluZVJlc29sdmVyOjpJdGVyYXRvcjo6b3Bl
cmF0b3IqKCkgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBjdXJyZW50TGluZSA9IG1fcnVuSXRlcmF0
b3IubGluZUluZGV4KCk7Ci0gICAgYXV0byBpdCA9IG1fcnVuSXRlcmF0b3I7Ci0gICAgRmxvYXRS
ZWN0IHJlY3QgPSAoKml0KS5yZWN0KCk7Ci0gICAgd2hpbGUgKGl0LmFkdmFuY2UoKS5saW5lSW5k
ZXgoKSA9PSBjdXJyZW50TGluZSkKLSAgICAgICAgcmVjdC51bml0ZSgoKml0KS5yZWN0KCkpOwot
ICAgIHJldHVybiByZWN0OwotfQotCi1jb25zdCBSZW5kZXJPYmplY3QmIExpbmVSZXNvbHZlcjo6
SXRlcmF0b3I6OnJlbmRlcmVyKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogVGhpcyB3b3JrcyBh
cyBsb25nIGFzIHdlJ3ZlIGdvdCBvbmx5IG9uZSByZW5kZXJlciBwZXIgbGluZS4KLSAgICBhdXRv
IHJ1biA9ICptX3J1bkl0ZXJhdG9yOwotICAgIHJldHVybiBtX3J1bkl0ZXJhdG9yLnJlc29sdmVy
KCkuZmxvd0NvbnRlbnRzKCkuc2VnbWVudEZvclJ1bihydW4uc3RhcnQoKSwgcnVuLmVuZCgpKS5y
ZW5kZXJlcjsKLX0KLQotTGluZVJlc29sdmVyOjpMaW5lUmVzb2x2ZXIoY29uc3QgUnVuUmVzb2x2
ZXImIHJ1blJlc29sdmVyKQotICAgIDogbV9ydW5SZXNvbHZlcihydW5SZXNvbHZlcikKLXsKLX0K
LQotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXRSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRSZXNvbHZlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzYwMDQ3ZjU1NzMu
LjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxh
eW91dFJlc29sdmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMTcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgotI2luY2x1ZGUgIlJl
bmRlckJsb2NrRmxvdy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXQuaCIKLSNpbmNsdWRl
ICJTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmgiCi0jaW5jbHVkZSA8d3RmL0l0ZXJhdG9y
UmFuZ2UuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewotCi1jbGFzcyBSdW5SZXNvbHZl
ciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgY2xhc3MgSXRl
cmF0b3I7Ci0KLSAgICBjbGFzcyBSdW4gewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQg
UnVuKGNvbnN0IEl0ZXJhdG9yJik7Ci0KLSAgICAgICAgLy8gUG9zaXRpb24gcmVsYXRpdmUgdG8g
dGhlIGVuY2xvc2luZyBmbG93IGJsb2NrLgotICAgICAgICB1bnNpZ25lZCBzdGFydCgpIGNvbnN0
OwotICAgICAgICB1bnNpZ25lZCBlbmQoKSBjb25zdDsKLSAgICAgICAgLy8gUG9zaXRpb24gcmVs
YXRpdmUgdG8gdGhlIGFjdHVhbCByZW5kZXJlci4KLSAgICAgICAgdW5zaWduZWQgbG9jYWxTdGFy
dCgpIGNvbnN0OwotICAgICAgICB1bnNpZ25lZCBsb2NhbEVuZCgpIGNvbnN0OwotCi0gICAgICAg
IGZsb2F0IGxvZ2ljYWxMZWZ0KCkgY29uc3Q7Ci0gICAgICAgIGZsb2F0IGxvZ2ljYWxSaWdodCgp
IGNvbnN0OwotCi0gICAgICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3Q7Ci0gICAgICAgIGZsb2F0
IGV4cGFuc2lvbigpIGNvbnN0OwotICAgICAgICBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25C
ZWhhdmlvcigpIGNvbnN0OwotICAgICAgICBpbnQgYmFzZWxpbmVQb3NpdGlvbigpIGNvbnN0Owot
ICAgICAgICBpbnQgYmFzZWxpbmUoKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdG9yLnJlc29sdmVy
KCkubV9iYXNlbGluZTsgfQotICAgICAgICBTdHJpbmdWaWV3IHRleHQoKSBjb25zdDsKLSAgICAg
ICAgU3RyaW5nIHRleHRXaXRoSHlwaGVuKCkgY29uc3Q7Ci0gICAgICAgIGNvbnN0IFJlbmRlck9i
amVjdCYgcmVuZGVyZXIoKSBjb25zdDsKLSAgICAgICAgYm9vbCBpc0VuZE9mTGluZSgpIGNvbnN0
OwotICAgICAgICBib29sIGhhc0h5cGhlbigpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0b3Iuc2lt
cGxlUnVuKCkuaGFzSHlwaGVuOyB9Ci0gICAgICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBjb25zdCB7
IHJldHVybiBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpLmlzTGluZUJyZWFrOyB9Ci0gICAgICAgIGNv
bnN0IFNpbXBsZUxpbmVMYXlvdXQ6OlJ1biYgc2ltcGxlUnVuKCkgY29uc3QgeyByZXR1cm4gbV9p
dGVyYXRvci5zaW1wbGVSdW4oKTsgfQotCi0gICAgICAgIHVuc2lnbmVkIGxpbmVJbmRleCgpIGNv
bnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZmxvYXQgY29tcHV0ZUJhc2VsaW5lUG9zaXRp
b24oKSBjb25zdDsKLSAgICAgICAgdm9pZCBjb25zdHJ1Y3RTdHJpbmdGb3JIeXBoZW5JZk5lZWRl
ZCgpOwotCi0gICAgICAgIGNvbnN0IEl0ZXJhdG9yJiBtX2l0ZXJhdG9yOwotICAgIH07Ci0KLSAg
ICBjbGFzcyBJdGVyYXRvciB7Ci0gICAgZnJpZW5kIGNsYXNzIFJ1bjsKLSAgICBmcmllbmQgY2xh
c3MgUnVuUmVzb2x2ZXI7Ci0gICAgZnJpZW5kIGNsYXNzIExpbmVSZXNvbHZlcjsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIEl0ZXJhdG9yKGNvbnN0IFJ1blJlc29sdmVyJiwgdW5zaWduZWQgcnVuSW5k
ZXgsIHVuc2lnbmVkIGxpbmVJbmRleCk7Ci0KLSAgICAgICAgSXRlcmF0b3ImIG9wZXJhdG9yKyso
KTsKLSAgICAgICAgSXRlcmF0b3ImIG9wZXJhdG9yLS0oKTsKLQotICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsKLSAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEl0ZXJhdG9yJikgY29uc3Q7Ci0KLSAgICAgICAgUnVuIG9wZXJhdG9yKigpIGNvbnN0Owot
Ci0gICAgICAgIGJvb2wgYXRCZWdpbigpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAg
Y29uc3QgU2ltcGxlTGluZUxheW91dDo6UnVuJiBzaW1wbGVSdW4oKSBjb25zdDsKLSAgICAgICAg
dW5zaWduZWQgbGluZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9saW5lSW5kZXg7IH0KLSAgICAg
ICAgSXRlcmF0b3ImIGFkdmFuY2UoKTsKLSAgICAgICAgSXRlcmF0b3ImIGFkdmFuY2VMaW5lcyh1
bnNpZ25lZCk7Ci0gICAgICAgIGNvbnN0IFJ1blJlc29sdmVyJiByZXNvbHZlcigpIGNvbnN0IHsg
cmV0dXJuICptX3Jlc29sdmVyOyB9Ci0gICAgICAgIGNvbnN0IExheW91dCYgbGF5b3V0KCkgY29u
c3QgeyByZXR1cm4gKm1fbGF5b3V0OyB9Ci0KLSAgICAgICAgUmVmUHRyPGNvbnN0IExheW91dD4g
bV9sYXlvdXQ7Ci0gICAgICAgIGNvbnN0IFJ1blJlc29sdmVyKiBtX3Jlc29sdmVyOwotICAgICAg
ICB1bnNpZ25lZCBtX3J1bkluZGV4OwotICAgICAgICB1bnNpZ25lZCBtX2xpbmVJbmRleDsKLSAg
ICB9OwotCi0gICAgUnVuUmVzb2x2ZXIoY29uc3QgUmVuZGVyQmxvY2tGbG93JiwgY29uc3QgTGF5
b3V0Jik7Ci0KLSAgICBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3coKSBjb25zdCB7IHJldHVy
biBtX2Zsb3dSZW5kZXJlcjsgfQotICAgIGNvbnN0IEZsb3dDb250ZW50cyYgZmxvd0NvbnRlbnRz
KCkgY29uc3QgeyByZXR1cm4gbV9mbG93Q29udGVudHM7IH0KLSAgICBJdGVyYXRvciBiZWdpbigp
IGNvbnN0OwotICAgIEl0ZXJhdG9yIGVuZCgpIGNvbnN0OwotCi0gICAgV1RGOjpJdGVyYXRvclJh
bmdlPEl0ZXJhdG9yPiByYW5nZUZvclJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwotICAg
IFdURjo6SXRlcmF0b3JSYW5nZTxJdGVyYXRvcj4gcmFuZ2VGb3JSZW5kZXJlcihjb25zdCBSZW5k
ZXJPYmplY3QmKSBjb25zdDsKLSAgICBXVEY6Okl0ZXJhdG9yUmFuZ2U8SXRlcmF0b3I+IHJhbmdl
Rm9yTGluZSh1bnNpZ25lZCBsaW5lSW5kZXgpIGNvbnN0OwotICAgIEl0ZXJhdG9yIHJ1bkZvclBv
aW50KGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7Ci0gICAgV1RGOjpJdGVyYXRvclJhbmdlPEl0
ZXJhdG9yPiByYW5nZUZvclJlbmRlcmVyV2l0aE9mZnNldHMoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
dW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgZW51
bSBjbGFzcyBJbmRleFR5cGUgeyBGaXJzdCwgTGFzdCB9OwotICAgIHVuc2lnbmVkIGxpbmVJbmRl
eEZvckhlaWdodChMYXlvdXRVbml0LCBJbmRleFR5cGUpIGNvbnN0OwotICAgIHVuc2lnbmVkIGFk
anVzdExpbmVJbmRleEZvclN0cnV0cyhMYXlvdXRVbml0LCBJbmRleFR5cGUsIHVuc2lnbmVkIGxp
bmVJbmRleENhbmRpZGF0ZSkgY29uc3Q7Ci0KLSAgICBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIG1f
Zmxvd1JlbmRlcmVyOwotICAgIGNvbnN0IExheW91dCYgbV9sYXlvdXQ7Ci0gICAgY29uc3QgRmxv
d0NvbnRlbnRzIG1fZmxvd0NvbnRlbnRzOwotICAgIGNvbnN0IExheW91dFVuaXQgbV9saW5lSGVp
Z2h0OwotICAgIGNvbnN0IExheW91dFVuaXQgbV9iYXNlbGluZTsKLSAgICBjb25zdCBMYXlvdXRV
bml0IG1fYm9yZGVyQW5kUGFkZGluZ0JlZm9yZTsKLSAgICBjb25zdCBmbG9hdCBtX2FzY2VudDsK
LSAgICBjb25zdCBmbG9hdCBtX2Rlc2NlbnQ7Ci0gICAgY29uc3QgZmxvYXQgbV92aXN1YWxPdmVy
Zmxvd09mZnNldDsKLX07Ci0KLWNsYXNzIExpbmVSZXNvbHZlciB7Ci1wdWJsaWM6Ci0gICAgY2xh
c3MgSXRlcmF0b3IgewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgSXRlcmF0b3IoUnVu
UmVzb2x2ZXI6Okl0ZXJhdG9yKTsKLQotICAgICAgICBJdGVyYXRvciYgb3BlcmF0b3IrKygpOwot
ICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsKLSAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJikgY29uc3Q7Ci0KLSAgICAgICAgRmxvYXRS
ZWN0IG9wZXJhdG9yKigpIGNvbnN0OwotICAgICAgICAvLyBGSVhNRTogVXNlIGEgbGlzdCB0byBz
dXBwb3J0IG11bHRpcGxlIHJlbmRlcmVycyBwZXIgbGluZS4KLSAgICAgICAgY29uc3QgUmVuZGVy
T2JqZWN0JiByZW5kZXJlcigpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUnVuUmVz
b2x2ZXI6Okl0ZXJhdG9yIG1fcnVuSXRlcmF0b3I7Ci0gICAgfTsKLQotICAgIExpbmVSZXNvbHZl
cihjb25zdCBSdW5SZXNvbHZlciYpOwotCi0gICAgSXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKLSAg
ICBJdGVyYXRvciBlbmQoKSBjb25zdDsKLQotICAgIFdURjo6SXRlcmF0b3JSYW5nZTxJdGVyYXRv
cj4gcmFuZ2VGb3JSZWN0KGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAg
ICBjb25zdCBSdW5SZXNvbHZlciYgbV9ydW5SZXNvbHZlcjsKLX07Ci0KLVJ1blJlc29sdmVyIHJ1
blJlc29sdmVyKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IExheW91dCYpOwotTGluZVJl
c29sdmVyIGxpbmVSZXNvbHZlcihjb25zdCBSdW5SZXNvbHZlciYpOwotCi1pbmxpbmUgdW5zaWdu
ZWQgUnVuUmVzb2x2ZXI6OlJ1bjo6c3RhcnQoKSBjb25zdAotewotICAgIHJldHVybiBtX2l0ZXJh
dG9yLnNpbXBsZVJ1bigpLnN0YXJ0OwotfQotCi1pbmxpbmUgdW5zaWduZWQgUnVuUmVzb2x2ZXI6
OlJ1bjo6ZW5kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pdGVyYXRvci5zaW1wbGVSdW4oKS5l
bmQ7Ci19Ci0KLWlubGluZSBmbG9hdCBSdW5SZXNvbHZlcjo6UnVuOjpsb2dpY2FsTGVmdCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1faXRlcmF0b3Iuc2ltcGxlUnVuKCkubG9naWNhbExlZnQ7Ci19
Ci0KLWlubGluZSBmbG9hdCBSdW5SZXNvbHZlcjo6UnVuOjpsb2dpY2FsUmlnaHQoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpLmxvZ2ljYWxSaWdodDsKLX0KLQot
aW5saW5lIGZsb2F0IFJ1blJlc29sdmVyOjpSdW46OmV4cGFuc2lvbigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1faXRlcmF0b3Iuc2ltcGxlUnVuKCkuZXhwYW5zaW9uOwotfQotCi1pbmxpbmUgRXhw
YW5zaW9uQmVoYXZpb3IgUnVuUmVzb2x2ZXI6OlJ1bjo6ZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25z
dAotewotICAgIHJldHVybiBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpLmV4cGFuc2lvbkJlaGF2aW9y
OwotfQotCi1pbmxpbmUgaW50IFJ1blJlc29sdmVyOjpSdW46OmJhc2VsaW5lUG9zaXRpb24oKSBj
b25zdAotewotICAgIHJldHVybiByb3VuZFRvSW50KGNvbXB1dGVCYXNlbGluZVBvc2l0aW9uKCkp
OwotfQotCi1pbmxpbmUgYm9vbCBSdW5SZXNvbHZlcjo6UnVuOjppc0VuZE9mTGluZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1faXRlcmF0b3Iuc2ltcGxlUnVuKCkuaXNFbmRPZkxpbmU7Ci19Ci0K
LWlubGluZSB1bnNpZ25lZCBSdW5SZXNvbHZlcjo6UnVuOjpsaW5lSW5kZXgoKSBjb25zdAotewot
ICAgIHJldHVybiBtX2l0ZXJhdG9yLmxpbmVJbmRleCgpOwotfQotCi1pbmxpbmUgUnVuUmVzb2x2
ZXI6Okl0ZXJhdG9yJiBSdW5SZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yKysoKQotewotICAg
IHJldHVybiBhZHZhbmNlKCk7Ci19Ci0KLWlubGluZSBmbG9hdCBSdW5SZXNvbHZlcjo6UnVuOjpj
b21wdXRlQmFzZWxpbmVQb3NpdGlvbigpIGNvbnN0Ci17Ci0gICAgYXV0byYgcmVzb2x2ZXIgPSBt
X2l0ZXJhdG9yLnJlc29sdmVyKCk7Ci0gICAgYXV0byBvZmZzZXQgPSByZXNvbHZlci5tX2JvcmRl
ckFuZFBhZGRpbmdCZWZvcmUgKyByZXNvbHZlci5tX2xpbmVIZWlnaHQgKiBsaW5lSW5kZXgoKTsK
LSAgICBpZiAoIW1faXRlcmF0b3IubGF5b3V0KCkuaGFzTGluZVN0cnV0cygpKQotICAgICAgICBy
ZXR1cm4gb2Zmc2V0ICsgcmVzb2x2ZXIubV9iYXNlbGluZTsKLSAgICBmb3IgKGF1dG8mIHN0cnV0
RW50cnkgOiByZXNvbHZlci5tX2xheW91dC5zdHJ1dHMoKSkgewotICAgICAgICBpZiAoc3RydXRF
bnRyeS5saW5lQnJlYWsgPiBsaW5lSW5kZXgoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBvZmZzZXQgKz0gc3RydXRFbnRyeS5vZmZzZXQ7Ci0gICAgfQotICAgIHJldHVybiBvZmZzZXQg
KyByZXNvbHZlci5tX2Jhc2VsaW5lOwotfQotCi1pbmxpbmUgUnVuUmVzb2x2ZXI6Okl0ZXJhdG9y
JiBSdW5SZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yLS0oKQotewotICAgIC0tbV9ydW5JbmRl
eDsKLSAgICBpZiAoc2ltcGxlUnVuKCkuaXNFbmRPZkxpbmUpCi0gICAgICAgIC0tbV9saW5lSW5k
ZXg7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1pbmxpbmUgYm9vbCBSdW5SZXNvbHZlcjo6SXRl
cmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdAotewotICAgIEFT
U0VSVChtX3Jlc29sdmVyID09IG90aGVyLm1fcmVzb2x2ZXIpOwotICAgIHJldHVybiBtX3J1bklu
ZGV4ID09IG90aGVyLm1fcnVuSW5kZXg7Ci19Ci0KLWlubGluZSBib29sIFJ1blJlc29sdmVyOjpJ
dGVyYXRvcjo6b3BlcmF0b3IhPShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotfQotCi1pbmxpbmUgUnVuUmVzb2x2ZXI6OlJ1biBS
dW5SZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yKigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFJ1
bigqdGhpcyk7Ci19Ci0KLWlubGluZSBib29sIFJ1blJlc29sdmVyOjpJdGVyYXRvcjo6YXRCZWdp
bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICp0aGlzID09IHJlc29sdmVyKCkuYmVnaW4oKTsKLX0K
LQotaW5saW5lIGNvbnN0IFNpbXBsZUxpbmVMYXlvdXQ6OlJ1biYgUnVuUmVzb2x2ZXI6Okl0ZXJh
dG9yOjpzaW1wbGVSdW4oKSBjb25zdAotewotICAgIHJldHVybiBsYXlvdXQoKS5ydW5BdChtX3J1
bkluZGV4KTsKLX0KLQotaW5saW5lIFJ1blJlc29sdmVyOjpJdGVyYXRvciBSdW5SZXNvbHZlcjo6
YmVnaW4oKSBjb25zdAotewotICAgIHJldHVybiBJdGVyYXRvcigqdGhpcywgMCwgMCk7Ci19Ci0K
LWlubGluZSBSdW5SZXNvbHZlcjo6SXRlcmF0b3IgUnVuUmVzb2x2ZXI6OmVuZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIEl0ZXJhdG9yKCp0aGlzLCBtX2xheW91dC5ydW5Db3VudCgpLCBtX2xheW91
dC5saW5lQ291bnQoKSk7Ci19Ci0KLWlubGluZSBMaW5lUmVzb2x2ZXI6Okl0ZXJhdG9yJiBMaW5l
UmVzb2x2ZXI6Okl0ZXJhdG9yOjpvcGVyYXRvcisrKCkKLXsKLSAgICBtX3J1bkl0ZXJhdG9yLmFk
dmFuY2VMaW5lcygxKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLWlubGluZSBib29sIExpbmVS
ZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25z
dAotewotICAgIHJldHVybiBtX3J1bkl0ZXJhdG9yID09IG90aGVyLm1fcnVuSXRlcmF0b3I7Ci19
Ci0KLWlubGluZSBib29sIExpbmVSZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yIT0oY29uc3Qg
SXRlcmF0b3ImIG90aGVyKSBjb25zdAotewotICAgIHJldHVybiBtX3J1bkl0ZXJhdG9yICE9IG90
aGVyLm1fcnVuSXRlcmF0b3I7Ci19Ci0KLWlubGluZSBMaW5lUmVzb2x2ZXI6Okl0ZXJhdG9yIExp
bmVSZXNvbHZlcjo6YmVnaW4oKSBjb25zdAotewotICAgIHJldHVybiBJdGVyYXRvcihtX3J1blJl
c29sdmVyLmJlZ2luKCkpOwotfQotCi1pbmxpbmUgTGluZVJlc29sdmVyOjpJdGVyYXRvciBMaW5l
UmVzb2x2ZXI6OmVuZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEl0ZXJhdG9yKG1fcnVuUmVzb2x2
ZXIuZW5kKCkpOwotfQotCi1pbmxpbmUgV1RGOjpJdGVyYXRvclJhbmdlPExpbmVSZXNvbHZlcjo6
SXRlcmF0b3I+IExpbmVSZXNvbHZlcjo6cmFuZ2VGb3JSZWN0KGNvbnN0IExheW91dFJlY3QmIHJl
Y3QpIGNvbnN0Ci17Ci0gICAgYXV0byBydW5SYW5nZSA9IG1fcnVuUmVzb2x2ZXIucmFuZ2VGb3JS
ZWN0KHJlY3QpOwotICAgIHJldHVybiB7IEl0ZXJhdG9yKHJ1blJhbmdlLmJlZ2luKCkpLCBJdGVy
YXRvcihydW5SYW5nZS5lbmQoKSkgfTsKLX0KLQotaW5saW5lIExpbmVSZXNvbHZlciBsaW5lUmVz
b2x2ZXIoY29uc3QgUnVuUmVzb2x2ZXImIHJ1blJlc29sdmVyKQotewotICAgIHJldHVybiBMaW5l
UmVzb2x2ZXIocnVuUmVzb2x2ZXIpOwotfQotCi19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRl
cmF0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTI3ZDc0NTEzM2EuLjAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91
dFRleHRGcmFnbWVudEl0ZXJhdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI2OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVM
YXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oIgotCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIK
LSNpbmNsdWRlICJIeXBoZW5hdGlvbi5oIgotI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgot
I2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5
b3V0Rmxvd0NvbnRlbnRzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBTaW1w
bGVMaW5lTGF5b3V0IHsKLQotVGV4dEZyYWdtZW50SXRlcmF0b3I6OlN0eWxlOjpTdHlsZShjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUpCi0gICAgOiBmb250KHN0eWxlLmZvbnRDYXNjYWRlKCkpCi0g
ICAgLCB0ZXh0QWxpZ24oc3R5bGUudGV4dEFsaWduKCkpCi0gICAgLCBoYXNLZXJuaW5nT3JMaWdh
dHVyZXMoZm9udC5lbmFibGVLZXJuaW5nKCkgfHwgZm9udC5yZXF1aXJlc1NoYXBpbmcoKSkKLSAg
ICAsIGNvbGxhcHNlV2hpdGVzcGFjZShzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSkKLSAgICAs
IHByZXNlcnZlTmV3bGluZShzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUoKSkKLSAgICAsIHdyYXBMaW5l
cyhzdHlsZS5hdXRvV3JhcCgpKQotICAgICwgYnJlYWtTcGFjZXMoc3R5bGUud2hpdGVTcGFjZSgp
ID09IFdoaXRlU3BhY2U6OkJyZWFrU3BhY2VzKQotICAgICwgYnJlYWtBbnlXb3JkT25PdmVyZmxv
dyhzdHlsZS53b3JkQnJlYWsoKSA9PSBXb3JkQnJlYWs6OkJyZWFrQWxsICYmIHdyYXBMaW5lcykK
LSAgICAsIGJyZWFrV29yZE9uT3ZlcmZsb3coc3R5bGUuYnJlYWtXb3JkcygpICYmICh3cmFwTGlu
ZXMgfHwgcHJlc2VydmVOZXdsaW5lKSkKLSAgICAsIGJyZWFrRmlyc3RXb3JkT25PdmVyZmxvdyhi
cmVha0FueVdvcmRPbk92ZXJmbG93IHx8IGJyZWFrV29yZE9uT3ZlcmZsb3cpCi0gICAgLCBicmVh
a05CU1Aod3JhcExpbmVzICYmIHN0eWxlLm5ic3BNb2RlKCkgPT0gTkJTUE1vZGU6OlNwYWNlKQot
ICAgICwga2VlcEFsbFdvcmRzRm9yQ0pLKHN0eWxlLndvcmRCcmVhaygpID09IFdvcmRCcmVhazo6
S2VlcEFsbCkKLSAgICAsIHdvcmRTcGFjaW5nKGZvbnQud29yZFNwYWNpbmcoKSkKLSAgICAsIHRh
YldpZHRoKGNvbGxhcHNlV2hpdGVzcGFjZSA/IFRhYlNpemUoMCkgOiBzdHlsZS50YWJTaXplKCkp
Ci0gICAgLCBzaG91bGRIeXBoZW5hdGUoc3R5bGUuaHlwaGVucygpID09IEh5cGhlbnM6OkF1dG8g
JiYgY2FuSHlwaGVuYXRlKHN0eWxlLmNvbXB1dGVkTG9jYWxlKCkpKQotICAgICwgaHlwaGVuU3Ry
aW5nV2lkdGgoc2hvdWxkSHlwaGVuYXRlID8gZm9udC53aWR0aChUZXh0UnVuKFN0cmluZyhzdHls
ZS5oeXBoZW5TdHJpbmcoKSkpKSA6IDApCi0gICAgLCBoeXBoZW5MaW1pdEJlZm9yZShzdHlsZS5o
eXBoZW5hdGlvbkxpbWl0QmVmb3JlKCkgPCAwID8gMiA6IHN0eWxlLmh5cGhlbmF0aW9uTGltaXRC
ZWZvcmUoKSkKLSAgICAsIGh5cGhlbkxpbWl0QWZ0ZXIoc3R5bGUuaHlwaGVuYXRpb25MaW1pdEFm
dGVyKCkgPCAwID8gMiA6IHN0eWxlLmh5cGhlbmF0aW9uTGltaXRBZnRlcigpKQotICAgICwgbG9j
YWxlKHN0eWxlLmNvbXB1dGVkTG9jYWxlKCkpCi17Ci0gICAgaWYgKHN0eWxlLmh5cGhlbmF0aW9u
TGltaXRMaW5lcygpID4gLTEpCi0gICAgICAgIGh5cGhlbkxpbWl0TGluZXMgPSBzdHlsZS5oeXBo
ZW5hdGlvbkxpbWl0TGluZXMoKTsKLX0KLQotVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFn
bWVudEl0ZXJhdG9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKLSAgICA6IG1fZmxvd0Nv
bnRlbnRzKGZsb3cpCi0gICAgLCBtX2N1cnJlbnRTZWdtZW50KG1fZmxvd0NvbnRlbnRzLmJlZ2lu
KCkpCi0gICAgLCBtX2xpbmVCcmVha0l0ZXJhdG9yKG1fY3VycmVudFNlZ21lbnQtPnRleHQsIGZs
b3cuc3R5bGUoKS5jb21wdXRlZExvY2FsZSgpKQotICAgICwgbV9zdHlsZShmbG93LnN0eWxlKCkp
Ci17Ci19Ci0KLVRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgVGV4dEZyYWdtZW50
SXRlcmF0b3I6Om5leHRUZXh0RnJhZ21lbnQoZmxvYXQgeFBvc2l0aW9uKQotewotICAgIFRleHRG
cmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgbmV4dEZyYWdtZW50ID0gZmluZE5leHRUZXh0
RnJhZ21lbnQoeFBvc2l0aW9uKTsKLSAgICBtX2F0RW5kT2ZTZWdtZW50ID0gKG1fY3VycmVudFNl
Z21lbnQgPT0gbV9mbG93Q29udGVudHMuZW5kKCkpIHx8IChtX3Bvc2l0aW9uID09IG1fY3VycmVu
dFNlZ21lbnQtPmVuZCk7Ci0gICAgcmV0dXJuIG5leHRGcmFnbWVudDsKLX0KLQotVGV4dEZyYWdt
ZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6ZmluZE5leHRU
ZXh0RnJhZ21lbnQoZmxvYXQgeFBvc2l0aW9uKQotewotICAgIC8vIEEgZnJhZ21lbnQgY2FuIGVp
dGhlciBiZQotICAgIC8vIDEuIGxpbmUgYnJlYWsgd2hlbiA8YnI+IGlzIHByZXNlbnQgb3IgcHJl
c2VydmVOZXdsaW5lIGlzIG9uIChub3QgY29uc2lkZXJlZCBhcyB3aGl0ZXNwYWNlKSBvcgotICAg
IC8vIDIuIHdoaXRlc3BhY2UgKGNvbGxhc3BlZCwgbm9uLWNvbGxhcHNlZCBtdWx0aSBvciBzaW5n
bGUpIG9yCi0gICAgLy8gMy4gbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycy4KLSAgICAvLyA0LiBj
b250ZW50IGVuZC4KLSAgICBBU1NFUlQobV9jdXJyZW50U2VnbWVudCAhPSBtX2Zsb3dDb250ZW50
cy5lbmQoKSk7Ci0gICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IG1fcG9zaXRpb247Ci0gICAg
aWYgKG1fYXRFbmRPZlNlZ21lbnQpCi0gICAgICAgICsrbV9jdXJyZW50U2VnbWVudDsKLQotICAg
IGlmIChtX2N1cnJlbnRTZWdtZW50ID09IG1fZmxvd0NvbnRlbnRzLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gVGV4dEZyYWdtZW50KHN0YXJ0UG9zaXRpb24sIHN0YXJ0UG9zaXRpb24sIDAsIFRleHRG
cmFnbWVudDo6Q29udGVudEVuZCk7Ci0gICAgaWYgKGlzSGFyZExpbmVCcmVhayhtX2N1cnJlbnRT
ZWdtZW50KSkKLSAgICAgICAgcmV0dXJuIFRleHRGcmFnbWVudChzdGFydFBvc2l0aW9uLCBzdGFy
dFBvc2l0aW9uLCAwLCBUZXh0RnJhZ21lbnQ6OkhhcmRMaW5lQnJlYWspOwotICAgIGlmIChpc1Nv
ZnRMaW5lQnJlYWsoc3RhcnRQb3NpdGlvbikpIHsKLSAgICAgICAgdW5zaWduZWQgZW5kUG9zaXRp
b24gPSArK21fcG9zaXRpb247Ci0gICAgICAgIHJldHVybiBUZXh0RnJhZ21lbnQoc3RhcnRQb3Np
dGlvbiwgZW5kUG9zaXRpb24sIDAsIFRleHRGcmFnbWVudDo6U29mdExpbmVCcmVhayk7Ci0gICAg
fQotICAgIGZsb2F0IHdpZHRoID0gMDsKLSAgICBib29sIG92ZXJsYXBwaW5nRnJhZ21lbnQgPSBm
YWxzZTsKLSAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHNraXBUb05leHRQb3NpdGlvbihQb3Np
dGlvblR5cGU6Ok5vbldoaXRlc3BhY2UsIHN0YXJ0UG9zaXRpb24sIHdpZHRoLCB4UG9zaXRpb24s
IG92ZXJsYXBwaW5nRnJhZ21lbnQpOwotICAgIHVuc2lnbmVkIHNlZ21lbnRFbmRQb3NpdGlvbiA9
IG1fY3VycmVudFNlZ21lbnQtPmVuZDsKLSAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbiA8PSBlbmRQ
b3NpdGlvbik7Ci0gICAgaWYgKHN0YXJ0UG9zaXRpb24gPCBlbmRQb3NpdGlvbikgewotICAgICAg
ICBib29sIG11bHRpcGxlV2hpdGVzcGFjZSA9IHN0YXJ0UG9zaXRpb24gKyAxIDwgZW5kUG9zaXRp
b247Ci0gICAgICAgIGJvb2wgaXNDb2xsYXBzZWQgPSBtdWx0aXBsZVdoaXRlc3BhY2UgJiYgbV9z
dHlsZS5jb2xsYXBzZVdoaXRlc3BhY2U7Ci0gICAgICAgIG1fcG9zaXRpb24gPSBlbmRQb3NpdGlv
bjsKLSAgICAgICAgcmV0dXJuIFRleHRGcmFnbWVudChzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlv
biwgd2lkdGgsIFRleHRGcmFnbWVudDo6V2hpdGVzcGFjZSwgZW5kUG9zaXRpb24gPT0gc2VnbWVu
dEVuZFBvc2l0aW9uLCBmYWxzZSwgaXNDb2xsYXBzZWQsIG1fc3R5bGUuY29sbGFwc2VXaGl0ZXNw
YWNlKTsKLSAgICB9Ci0gICAgZW5kUG9zaXRpb24gPSBza2lwVG9OZXh0UG9zaXRpb24oUG9zaXRp
b25UeXBlOjpCcmVha2FibGUsIHN0YXJ0UG9zaXRpb24sIHdpZHRoLCB4UG9zaXRpb24sIG92ZXJs
YXBwaW5nRnJhZ21lbnQpOwotICAgIG1fcG9zaXRpb24gPSBlbmRQb3NpdGlvbjsKLSAgICByZXR1
cm4gVGV4dEZyYWdtZW50KHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCB3aWR0aCwgVGV4dEZy
YWdtZW50OjpOb25XaGl0ZXNwYWNlLCBlbmRQb3NpdGlvbiA9PSBzZWdtZW50RW5kUG9zaXRpb24s
IG92ZXJsYXBwaW5nRnJhZ21lbnQsIGZhbHNlLCBmYWxzZSk7Ci19Ci0KLXZvaWQgVGV4dEZyYWdt
ZW50SXRlcmF0b3I6OnJldmVydFRvRW5kT2ZGcmFnbWVudChjb25zdCBUZXh0RnJhZ21lbnQmIGZy
YWdtZW50KQotewotICAgIEFTU0VSVChtX3Bvc2l0aW9uID49IGZyYWdtZW50LmVuZCgpKTsKLSAg
ICB3aGlsZSAobV9jdXJyZW50U2VnbWVudC0+c3RhcnQgPiBmcmFnbWVudC5lbmQoKSkKLSAgICAg
ICAgLS1tX2N1cnJlbnRTZWdtZW50OwotICAgIC8vIFRPRE86IEl0IHJldmVydHMgdG8gdGhlIGxh
c3QgZnJhZ21lbnQgb24gdGhlIHNhbWUgcG9zaXRpb24sIGJ1dCB0aGF0J3Mgb2sgZm9yIG5vdyBh
cyB3ZSBkb24ndCBuZWVkIHRvCi0gICAgLy8gZGlmZmVyZW50aWF0ZSBtdWx0aXBsZSByZW5kZXJl
cnMgb24gdGhlIHNhbWUgcG9zaXRpb24uCi0gICAgbV9wb3NpdGlvbiA9IGZyYWdtZW50LmVuZCgp
OwotICAgIG1fYXRFbmRPZlNlZ21lbnQgPSBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNp
Z25lZCBuZXh0QnJlYWthYmxlUG9zaXRpb25JblNlZ21lbnQoTGF6eUxpbmVCcmVha0l0ZXJhdG9y
JiBsaW5lQnJlYWtJdGVyYXRvciwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgYm9vbCBicmVha05C
U1AsIGJvb2wga2VlcEFsbFdvcmRzRm9yQ0pLKQotewotICAgIGlmIChrZWVwQWxsV29yZHNGb3JD
SkspIHsKLSAgICAgICAgaWYgKGJyZWFrTkJTUCkKLSAgICAgICAgICAgIHJldHVybiBuZXh0QnJl
YWthYmxlUG9zaXRpb25LZWVwaW5nQWxsV29yZHMobGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9z
aXRpb24pOwotICAgICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uS2VlcGluZ0FsbFdv
cmRzSWdub3JpbmdOQlNQKGxpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKLSAgICB9
Ci0KLSAgICBpZiAobGluZUJyZWFrSXRlcmF0b3IubW9kZSgpID09IExpbmVCcmVha0l0ZXJhdG9y
TW9kZTo6RGVmYXVsdCkgewotICAgICAgICBpZiAoYnJlYWtOQlNQKQotICAgICAgICAgICAgcmV0
dXJuIFdlYkNvcmU6Om5leHRCcmVha2FibGVQb3NpdGlvbihsaW5lQnJlYWtJdGVyYXRvciwgc3Rh
cnRQb3NpdGlvbik7Ci0gICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25JZ25vcmlu
Z05CU1AobGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgIH0KLQotICAgIGlm
IChicmVha05CU1ApCi0gICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25XaXRob3V0
U2hvcnRjdXQobGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgIHJldHVybiBu
ZXh0QnJlYWthYmxlUG9zaXRpb25JZ25vcmluZ05CU1BXaXRob3V0U2hvcnRjdXQobGluZUJyZWFr
SXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotfQotCi11bnNpZ25lZCBUZXh0RnJhZ21lbnRJdGVy
YXRvcjo6bmV4dEJyZWFrYWJsZVBvc2l0aW9uKGNvbnN0IEZsb3dDb250ZW50czo6U2VnbWVudCYg
c2VnbWVudCwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbikKLXsKLSAgICBBU1NFUlQoc3RhcnRQb3Np
dGlvbiA8IHNlZ21lbnQuZW5kKTsKLSAgICBTdHJpbmdWaWV3IGN1cnJlbnRUZXh0ID0gbV9saW5l
QnJlYWtJdGVyYXRvci5zdHJpbmdWaWV3KCk7Ci0gICAgU3RyaW5nVmlldyBzZWdtZW50VGV4dCA9
IFN0cmluZ1ZpZXcoc2VnbWVudC50ZXh0KTsKLSAgICBpZiAoc2VnbWVudFRleHQgIT0gY3VycmVu
dFRleHQpIHsKLSAgICAgICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IGN1cnJlbnRUZXh0Lmxlbmd0
aCgpOwotICAgICAgICBVQ2hhciBsYXN0Q2hhcmFjdGVyID0gdGV4dExlbmd0aCA+IDAgPyBjdXJy
ZW50VGV4dFt0ZXh0TGVuZ3RoIC0gMV0gOiAwOwotICAgICAgICBVQ2hhciBzZWNvbmRUb0xhc3RD
aGFyYWN0ZXIgPSB0ZXh0TGVuZ3RoID4gMSA/IGN1cnJlbnRUZXh0W3RleHRMZW5ndGggLSAyXSA6
IDA7Ci0gICAgICAgIG1fbGluZUJyZWFrSXRlcmF0b3Iuc2V0UHJpb3JDb250ZXh0KGxhc3RDaGFy
YWN0ZXIsIHNlY29uZFRvTGFzdENoYXJhY3Rlcik7Ci0gICAgICAgIG1fbGluZUJyZWFrSXRlcmF0
b3IucmVzZXRTdHJpbmdBbmRSZWxlYXNlSXRlcmF0b3Ioc2VnbWVudC50ZXh0LCBtX3N0eWxlLmxv
Y2FsZSwgTGluZUJyZWFrSXRlcmF0b3JNb2RlOjpEZWZhdWx0KTsKLSAgICB9Ci0gICAgcmV0dXJu
IHNlZ21lbnQudG9SZW5kZXJQb3NpdGlvbihuZXh0QnJlYWthYmxlUG9zaXRpb25JblNlZ21lbnQo
bV9saW5lQnJlYWtJdGVyYXRvciwgc2VnbWVudC50b1NlZ21lbnRQb3NpdGlvbihzdGFydFBvc2l0
aW9uKSwgbV9zdHlsZS5icmVha05CU1AsIG1fc3R5bGUua2VlcEFsbFdvcmRzRm9yQ0pLKSk7Ci19
Ci0KLXVuc2lnbmVkIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpuZXh0Tm9uV2hpdGVzcGFjZVBvc2l0
aW9uKGNvbnN0IEZsb3dDb250ZW50czo6U2VnbWVudCYgc2VnbWVudCwgdW5zaWduZWQgc3RhcnRQ
b3NpdGlvbikKLXsKLSAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbiA8IHNlZ21lbnQuZW5kKTsKLSAg
ICB1bnNpZ25lZCBwb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247Ci0gICAgZm9yICg7IHBvc2l0aW9u
IDwgc2VnbWVudC5lbmQ7ICsrcG9zaXRpb24pIHsKLSAgICAgICAgYXV0byBjaGFyYWN0ZXIgPSBz
ZWdtZW50LnRleHRbc2VnbWVudC50b1NlZ21lbnRQb3NpdGlvbihwb3NpdGlvbildOwotICAgICAg
ICBib29sIGlzV2hpdGVzcGFjZSA9IGNoYXJhY3RlciA9PSAnICcgfHwgY2hhcmFjdGVyID09ICdc
dCcgfHwgKCFtX3N0eWxlLnByZXNlcnZlTmV3bGluZSAmJiBjaGFyYWN0ZXIgPT0gJ1xuJyk7Ci0g
ICAgICAgIGlmICghaXNXaGl0ZXNwYWNlKQotICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwot
ICAgIH0KLSAgICByZXR1cm4gcG9zaXRpb247Ci19Ci0KLU9wdGlvbmFsPHVuc2lnbmVkPiBUZXh0
RnJhZ21lbnRJdGVyYXRvcjo6bGFzdEh5cGhlblBvc2l0aW9uKGNvbnN0IFRleHRGcmFnbWVudEl0
ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIHJ1biwgdW5zaWduZWQgYmVmb3JlKSBjb25zdAotewotICAg
IEFTU0VSVChydW4uc3RhcnQoKSA8IGJlZm9yZSk7Ci0gICAgYXV0byYgc2VnbWVudCA9ICptX2N1
cnJlbnRTZWdtZW50OwotICAgIEFTU0VSVChzZWdtZW50LnN0YXJ0IDw9IGJlZm9yZSAmJiBiZWZv
cmUgPD0gc2VnbWVudC5lbmQpOwotICAgIEFTU0VSVChpczxSZW5kZXJUZXh0PihzZWdtZW50LnJl
bmRlcmVyKSk7Ci0gICAgaWYgKCFtX3N0eWxlLnNob3VsZEh5cGhlbmF0ZSB8fCBydW4udHlwZSgp
ICE9IFRleHRGcmFnbWVudDo6Tm9uV2hpdGVzcGFjZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLSAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgZW5vdWdoIGNoYXJhY3RlcnMgaW4gdGhl
IHJ1bi4KLSAgICB1bnNpZ25lZCBydW5MZW5ndGggPSBydW4uZW5kKCkgLSBydW4uc3RhcnQoKTsK
LSAgICBpZiAobV9zdHlsZS5oeXBoZW5MaW1pdEJlZm9yZSA+PSBydW5MZW5ndGggfHwgbV9zdHls
ZS5oeXBoZW5MaW1pdEFmdGVyID49IHJ1bkxlbmd0aCB8fCBtX3N0eWxlLmh5cGhlbkxpbWl0QmVm
b3JlICsgbV9zdHlsZS5oeXBoZW5MaW1pdEFmdGVyID4gcnVuTGVuZ3RoKQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotICAgIGF1dG8gcnVuU3RhcnQgPSBzZWdtZW50LnRvU2VnbWVudFBv
c2l0aW9uKHJ1bi5zdGFydCgpKTsKLSAgICBhdXRvIGJlZm9yZUluZGV4ID0gc2VnbWVudC50b1Nl
Z21lbnRQb3NpdGlvbihiZWZvcmUpIC0gcnVuU3RhcnQ7Ci0gICAgaWYgKGJlZm9yZUluZGV4IDw9
IG1fc3R5bGUuaHlwaGVuTGltaXRCZWZvcmUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0gICAgLy8gQWRqdXN0IGJlZm9yZSBpbmRleCB0byBhY2NvbW1vZGF0ZSB0aGUgbGltaXQtYWZ0
ZXIgdmFsdWUgKHRoaXMgaXMgdGhlIGxhc3QgcG90ZW50aWFsIGh5cGhlbiBsb2NhdGlvbikuCi0g
ICAgYmVmb3JlSW5kZXggPSBzdGQ6Om1pbihiZWZvcmVJbmRleCwgcnVuTGVuZ3RoIC0gbV9zdHls
ZS5oeXBoZW5MaW1pdEFmdGVyICsgMSk7Ci0gICAgYXV0byBzdWJzdHJpbmdGb3JIeXBoZW5hdGlv
biA9IFN0cmluZ1ZpZXcoc2VnbWVudC50ZXh0KS5zdWJzdHJpbmcocnVuU3RhcnQsIHJ1bi5lbmQo
KSAtIHJ1bi5zdGFydCgpKTsKLSAgICBhdXRvIGh5cGhlbkxvY2F0aW9uID0gbGFzdEh5cGhlbkxv
Y2F0aW9uKHN1YnN0cmluZ0Zvckh5cGhlbmF0aW9uLCBiZWZvcmVJbmRleCwgbV9zdHlsZS5sb2Nh
bGUpOwotICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBlbm91Z2ggY2hhcmFjdGVycyBiZWZvcmUg
YW5kIGFmdGVyIHRoZSBoeXBoZW4uCi0gICAgaWYgKGh5cGhlbkxvY2F0aW9uICYmIGh5cGhlbkxv
Y2F0aW9uID49IG1fc3R5bGUuaHlwaGVuTGltaXRCZWZvcmUgJiYgbV9zdHlsZS5oeXBoZW5MaW1p
dEFmdGVyIDw9IChydW5MZW5ndGggLSBoeXBoZW5Mb2NhdGlvbikpCi0gICAgICAgIHJldHVybiBz
ZWdtZW50LnRvUmVuZGVyUG9zaXRpb24oaHlwaGVuTG9jYXRpb24gKyBydW5TdGFydCk7Ci0gICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotdW5zaWduZWQgVGV4dEZyYWdtZW50SXRlcmF0b3I6
OnNraXBUb05leHRQb3NpdGlvbihQb3NpdGlvblR5cGUgcG9zaXRpb25UeXBlLCB1bnNpZ25lZCBz
dGFydFBvc2l0aW9uLCBmbG9hdCYgd2lkdGgsIGZsb2F0IHhQb3NpdGlvbiwgYm9vbCYgb3Zlcmxh
cHBpbmdGcmFnbWVudCkKLXsKLSAgICBvdmVybGFwcGluZ0ZyYWdtZW50ID0gZmFsc2U7Ci0gICAg
dW5zaWduZWQgY3VycmVudFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKLSAgICB1bnNpZ25lZCBu
ZXh0UG9zaXRpb24gPSBjdXJyZW50UG9zaXRpb247Ci0gICAgLy8gQ29sbGFwc2VkIHdoaXRlc3Bh
Y2UgaGFzIGNvbnN0YW50IHdpZHRoLiBEbyBub3QgbWVhc3VyZSBpdC4KLSAgICBpZiAocG9zaXRp
b25UeXBlID09IE5vbldoaXRlc3BhY2UpCi0gICAgICAgIG5leHRQb3NpdGlvbiA9IG5leHROb25X
aGl0ZXNwYWNlUG9zaXRpb24oKm1fY3VycmVudFNlZ21lbnQsIGN1cnJlbnRQb3NpdGlvbik7Ci0g
ICAgZWxzZSBpZiAocG9zaXRpb25UeXBlID09IEJyZWFrYWJsZSkgewotICAgICAgICBuZXh0UG9z
aXRpb24gPSBuZXh0QnJlYWthYmxlUG9zaXRpb24oKm1fY3VycmVudFNlZ21lbnQsIGN1cnJlbnRQ
b3NpdGlvbik7Ci0gICAgICAgIC8vIG5leHRCcmVha2FibGVQb3NpdGlvbiByZXR1cm5zIHRoZSBz
YW1lIHBvc2l0aW9uIGZvciBjZXJ0YWluIGNoYXJhY3RlcnMgc3VjaCBhcyBoeXBoZW5zLiBDYWxs
IG5leHQgYWdhaW4gd2l0aCBtb2RpZmllZCBwb3NpdGlvbiB1bmxlc3Mgd2UgYXJlIGF0IHRoZSBl
bmQgb2YgdGhlIHNlZ21lbnQuCi0gICAgICAgIGJvb2wgc2tpcEN1cnJlbnRQb3NpdGlvbiA9IG5l
eHRQb3NpdGlvbiA9PSBjdXJyZW50UG9zaXRpb247Ci0gICAgICAgIGlmIChza2lwQ3VycmVudFBv
c2l0aW9uKSB7Ci0gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBza2lwcGluZyB0aGUgbGFzdCBj
aGFyYWN0ZXIgaW4gdGhlIHNlZ21lbnQsIGp1c3QgbW92ZSB0byB0aGUgZW5kIG9mIHRoZSBzZWdt
ZW50IGFuZCB3ZSdsbCBjaGVjayB0aGUgbmV4dCBzZWdtZW50IHdoZXRoZXIgaXQgaXMgYW4gb3Zl
cmxhcHBpbmcgZnJhZ21lbnQuCi0gICAgICAgICAgICBBU1NFUlQoY3VycmVudFBvc2l0aW9uIDwg
bV9jdXJyZW50U2VnbWVudC0+ZW5kKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50UG9zaXRpb24g
PT0gbV9jdXJyZW50U2VnbWVudC0+ZW5kIC0gMSkKLSAgICAgICAgICAgICAgICBuZXh0UG9zaXRp
b24gPSBtX2N1cnJlbnRTZWdtZW50LT5lbmQ7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgbmV4dFBvc2l0aW9uID0gbmV4dEJyZWFrYWJsZVBvc2l0aW9uKCptX2N1cnJlbnRTZWdt
ZW50LCBjdXJyZW50UG9zaXRpb24gKyAxKTsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSBuZWVk
IHRvIGtub3cgd2hldGhlciB0aGUgd29yZCBhY3R1YWxseSBmaW5pc2hlcyBhdCB0aGUgZW5kIG9m
IHRoaXMgcmVuZGVyZXIgb3Igbm90LgotICAgICAgICBpZiAobmV4dFBvc2l0aW9uID09IG1fY3Vy
cmVudFNlZ21lbnQtPmVuZCkgewotICAgICAgICAgICAgY29uc3QgYXV0byBuZXh0U2VnbWVudCA9
IG1fY3VycmVudFNlZ21lbnQgKyAxOwotICAgICAgICAgICAgaWYgKG5leHRTZWdtZW50ICE9IG1f
Zmxvd0NvbnRlbnRzLmVuZCgpICYmICFpc0hhcmRMaW5lQnJlYWsobmV4dFNlZ21lbnQpKQotICAg
ICAgICAgICAgICAgIG92ZXJsYXBwaW5nRnJhZ21lbnQgPSBuZXh0UG9zaXRpb24gPCBuZXh0QnJl
YWthYmxlUG9zaXRpb24oKm5leHRTZWdtZW50LCBuZXh0UG9zaXRpb24pOwotICAgICAgICB9Ci0g
ICAgfQotICAgIHdpZHRoID0gMDsKLSAgICBpZiAobmV4dFBvc2l0aW9uID09IGN1cnJlbnRQb3Np
dGlvbikKLSAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3NpdGlvbjsKLSAgICAvLyBCb3RoIG5vbi1j
b2xsYXBzZWQgd2hpdGVzcGFjZSBhbmQgbm9uLXdoaXRlc3BhY2UgcnVucyBuZWVkIHRvIGJlIG1l
YXN1cmVkLgotICAgIGJvb2wgbWVhc3VyZVRleHQgPSBwb3NpdGlvblR5cGUgIT0gTm9uV2hpdGVz
cGFjZSB8fCAhbV9zdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2U7Ci0gICAgaWYgKG1lYXN1cmVUZXh0
KQotICAgICAgICB3aWR0aCA9IHRoaXMtPnRleHRXaWR0aChjdXJyZW50UG9zaXRpb24sIG5leHRQ
b3NpdGlvbiwgeFBvc2l0aW9uKTsKLSAgICBlbHNlIGlmIChzdGFydFBvc2l0aW9uIDwgbmV4dFBv
c2l0aW9uKQotICAgICAgICB3aWR0aCA9IG1fc3R5bGUuZm9udC5zcGFjZVdpZHRoKCkgKyBtX3N0
eWxlLndvcmRTcGFjaW5nOwotICAgIHJldHVybiBuZXh0UG9zaXRpb247Ci19Ci0KLWZsb2F0IFRl
eHRGcmFnbWVudEl0ZXJhdG9yOjp0ZXh0V2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8s
IGZsb2F0IHhQb3NpdGlvbikgY29uc3QKLXsKLSAgICBhdXRvJiBzZWdtZW50ID0gKm1fY3VycmVu
dFNlZ21lbnQ7Ci0gICAgQVNTRVJUKHNlZ21lbnQuc3RhcnQgPD0gZnJvbSAmJiBmcm9tIDw9IHNl
Z21lbnQuZW5kICYmIHNlZ21lbnQuc3RhcnQgPD0gdG8gJiYgdG8gPD0gc2VnbWVudC5lbmQpOwot
ICAgIEFTU0VSVChpczxSZW5kZXJUZXh0PihzZWdtZW50LnJlbmRlcmVyKSk7Ci0gICAgaWYgKCFt
X3N0eWxlLmZvbnQuc2l6ZSgpIHx8IGZyb20gPT0gdG8pCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgdW5zaWduZWQgc2VnbWVudEZyb20gPSBzZWdtZW50LnRvU2VnbWVudFBvc2l0aW9uKGZyb20p
OwotICAgIHVuc2lnbmVkIHNlZ21lbnRUbyA9IHNlZ21lbnQudG9TZWdtZW50UG9zaXRpb24odG8p
OwotICAgIGlmIChtX3N0eWxlLmZvbnQuaXNGaXhlZFBpdGNoKCkpCi0gICAgICAgIHJldHVybiBk
b3duY2FzdDxSZW5kZXJUZXh0PihzZWdtZW50LnJlbmRlcmVyKS53aWR0aChzZWdtZW50RnJvbSwg
c2VnbWVudFRvIC0gc2VnbWVudEZyb20sIG1fc3R5bGUuZm9udCwgeFBvc2l0aW9uLCBudWxscHRy
LCBudWxscHRyKTsKLQotICAgIGJvb2wgbWVhc3VyZVdpdGhFbmRTcGFjZSA9IG1fc3R5bGUuaGFz
S2VybmluZ09yTGlnYXR1cmVzICYmIG1fc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlCi0gICAgICAg
ICYmIHNlZ21lbnRUbyA8IHNlZ21lbnQudGV4dC5sZW5ndGgoKSAmJiBzZWdtZW50LnRleHRbc2Vn
bWVudFRvXSA9PSAnICc7Ci0gICAgaWYgKG1lYXN1cmVXaXRoRW5kU3BhY2UpCi0gICAgICAgICsr
c2VnbWVudFRvOwotICAgIGZsb2F0IHdpZHRoID0gMDsKLSAgICBpZiAoc2VnbWVudC5jYW5Vc2VT
aW1wbGlmaWVkVGV4dE1lYXN1cmluZykKLSAgICAgICAgd2lkdGggPSBtX3N0eWxlLmZvbnQud2lk
dGhGb3JTaW1wbGVUZXh0KFN0cmluZ1ZpZXcoc2VnbWVudC50ZXh0KS5zdWJzdHJpbmcoc2VnbWVu
dEZyb20sIHNlZ21lbnRUbyAtIHNlZ21lbnRGcm9tKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFRl
eHRSdW4gcnVuKFN0cmluZ1ZpZXcoc2VnbWVudC50ZXh0KS5zdWJzdHJpbmcoc2VnbWVudEZyb20s
IHNlZ21lbnRUbyAtIHNlZ21lbnRGcm9tKSwgeFBvc2l0aW9uKTsKLSAgICAgICAgaWYgKG1fc3R5
bGUudGFiV2lkdGgpCi0gICAgICAgICAgICBydW4uc2V0VGFiU2l6ZSh0cnVlLCBtX3N0eWxlLnRh
YldpZHRoKTsKLSAgICAgICAgd2lkdGggPSBtX3N0eWxlLmZvbnQud2lkdGgocnVuKTsKLSAgICB9
Ci0gICAgaWYgKG1lYXN1cmVXaXRoRW5kU3BhY2UpCi0gICAgICAgIHdpZHRoIC09IChtX3N0eWxl
LmZvbnQuc3BhY2VXaWR0aCgpICsgbV9zdHlsZS53b3JkU3BhY2luZyk7Ci0gICAgcmV0dXJuIHN0
ZDo6bWF4PGZsb2F0PigwLCB3aWR0aCk7Ci19Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRl
cmF0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZjOWMzN2Q2M2NiLi4wMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRU
ZXh0RnJhZ21lbnRJdGVyYXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQnJlYWtMaW5lcy5oIgot
I2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRG
bG93Q29udGVudHMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJCbG9j
a0Zsb3c7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKLQotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQg
ewotCi1jbGFzcyBUZXh0RnJhZ21lbnRJdGVyYXRvciAgewotcHVibGljOgotICAgIFRleHRGcmFn
bWVudEl0ZXJhdG9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYpOwotICAgIGNsYXNzIFRleHRGcmFn
bWVudCB7Ci0gICAgcHVibGljOgotICAgICAgICBlbnVtIFR5cGUgeyBJbnZhbGlkLCBDb250ZW50
RW5kLCBTb2Z0TGluZUJyZWFrLCBIYXJkTGluZUJyZWFrLCBXaGl0ZXNwYWNlLCBOb25XaGl0ZXNw
YWNlIH07Ci0gICAgICAgIFRleHRGcmFnbWVudCgpID0gZGVmYXVsdDsKLSAgICAgICAgVGV4dEZy
YWdtZW50KHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGZsb2F0IHdpZHRoLCBUeXBlIHR5
cGUsIGJvb2wgaXNMYXN0SW5SZW5kZXJlciA9IGZhbHNlLCBib29sIG92ZXJsYXBzVG9OZXh0UmVu
ZGVyZXIgPSBmYWxzZSwgYm9vbCBpc0NvbGxhcHNlZCA9IGZhbHNlLCBib29sIGlzQ29sbGFwc2li
bGUgPSBmYWxzZSkKLSAgICAgICAgICAgIDogbV9zdGFydChzdGFydCkKLSAgICAgICAgICAgICwg
bV9lbmQoZW5kKQotICAgICAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQotICAgICAgICAgICAgLCBt
X3R5cGUodHlwZSkKLSAgICAgICAgICAgICwgbV9pc0xhc3RJblJlbmRlcmVyKGlzTGFzdEluUmVu
ZGVyZXIpCi0gICAgICAgICAgICAsIG1fb3ZlcmxhcHNUb05leHRSZW5kZXJlcihvdmVybGFwc1Rv
TmV4dFJlbmRlcmVyKQotICAgICAgICAgICAgLCBtX2lzQ29sbGFwc2VkKGlzQ29sbGFwc2VkKQot
ICAgICAgICAgICAgLCBtX2lzQ29sbGFwc2libGUoaXNDb2xsYXBzaWJsZSkKLSAgICAgICAgewot
ICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
ICE9IEludmFsaWQ7IH0KLSAgICAgICAgdW5zaWduZWQgc3RhcnQoKSBjb25zdCB7IHJldHVybiBt
X3N0YXJ0OyB9Ci0gICAgICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9
Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgQVNTRVJUKG1fZW5kID49IG1fc3Rh
cnQpOyByZXR1cm4gbV9lbmQgLSBtX3N0YXJ0OyB9Ci0gICAgICAgIGZsb2F0IHdpZHRoKCkgY29u
c3QgeyByZXR1cm4gbV93aWR0aDsgfQotICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KLSAgICAgICAgYm9vbCBvdmVybGFwc1RvTmV4dFJlbmRlcmVyKCkgY29uc3Qg
eyByZXR1cm4gbV9vdmVybGFwc1RvTmV4dFJlbmRlcmVyOyB9Ci0gICAgICAgIGJvb2wgaXNMYXN0
SW5SZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1faXNMYXN0SW5SZW5kZXJlcjsgfQotICAgICAg
ICBib29sIGlzTGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFNvZnRMaW5lQnJl
YWsgfHwgbV90eXBlID09IEhhcmRMaW5lQnJlYWs7IH0KLSAgICAgICAgYm9vbCBpc0NvbGxhcHNl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb2xsYXBzZWQ7IH0KLSAgICAgICAgYm9vbCBpc0NvbGxh
cHNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbGxhcHNpYmxlOyB9Ci0gICAgICAgIGJvb2wg
aGFzSHlwaGVuKCkgY29uc3QgeyByZXR1cm4gbV9oYXNIeXBoZW47IH0KLQotICAgICAgICBib29s
IGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBzdGFydCgpID09IGVuZCgpICYmICFpc0xpbmVCcmVh
aygpOyB9Ci0gICAgICAgIFRleHRGcmFnbWVudCBzcGxpdCh1bnNpZ25lZCBzcGxpdFBvc2l0aW9u
LCBmbG9hdCBsZWZ0U2lkZVdpZHRoLCBmbG9hdCByaWdodFNpZGVXaWR0aCk7Ci0gICAgICAgIFRl
eHRGcmFnbWVudCBzcGxpdFdpdGhIeXBoZW4odW5zaWduZWQgaHlwaGVuUG9zaXRpb24sIGZsb2F0
IGh5cGhlblN0cmluZ1dpZHRoLCBmbG9hdCBsZWZ0U2lkZVdpZHRoLCBmbG9hdCByaWdodFNpZGVX
aWR0aCk7Ci0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0RnJhZ21lbnQmIG90aGVy
KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9zdGFydCA9PSBvdGhlci5t
X3N0YXJ0Ci0gICAgICAgICAgICAgICAgJiYgbV9lbmQgPT0gb3RoZXIubV9lbmQKLSAgICAgICAg
ICAgICAgICAmJiBtX3dpZHRoID09IG90aGVyLm1fd2lkdGgKLSAgICAgICAgICAgICAgICAmJiBt
X3R5cGUgPT0gb3RoZXIubV90eXBlCi0gICAgICAgICAgICAgICAgJiYgbV9pc0xhc3RJblJlbmRl
cmVyID09IG90aGVyLm1faXNMYXN0SW5SZW5kZXJlcgotICAgICAgICAgICAgICAgICYmIG1fb3Zl
cmxhcHNUb05leHRSZW5kZXJlciA9PSBvdGhlci5tX292ZXJsYXBzVG9OZXh0UmVuZGVyZXIKLSAg
ICAgICAgICAgICAgICAmJiBtX2lzQ29sbGFwc2VkID09IG90aGVyLm1faXNDb2xsYXBzZWQKLSAg
ICAgICAgICAgICAgICAmJiBtX2lzQ29sbGFwc2libGUgPT0gb3RoZXIubV9pc0NvbGxhcHNpYmxl
Ci0gICAgICAgICAgICAgICAgJiYgbV9oYXNIeXBoZW4gPT0gb3RoZXIubV9oYXNIeXBoZW47Ci0g
ICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHVuc2lnbmVkIG1fc3RhcnQgeyAwIH07
Ci0gICAgICAgIHVuc2lnbmVkIG1fZW5kIHsgMCB9OwotICAgICAgICBmbG9hdCBtX3dpZHRoIHsg
MCB9OwotICAgICAgICBUeXBlIG1fdHlwZSB7IEludmFsaWQgfTsKLSAgICAgICAgYm9vbCBtX2lz
TGFzdEluUmVuZGVyZXIgeyBmYWxzZSB9OwotICAgICAgICBib29sIG1fb3ZlcmxhcHNUb05leHRS
ZW5kZXJlciB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgbV9pc0NvbGxhcHNlZCB7IGZhbHNlIH07
Ci0gICAgICAgIGJvb2wgbV9pc0NvbGxhcHNpYmxlIHsgZmFsc2UgfTsKLSAgICAgICAgYm9vbCBt
X2hhc0h5cGhlbiB7IGZhbHNlIH07Ci0gICAgfTsKLSAgICBUZXh0RnJhZ21lbnQgbmV4dFRleHRG
cmFnbWVudChmbG9hdCB4UG9zaXRpb24gPSAwKTsKLSAgICB2b2lkIHJldmVydFRvRW5kT2ZGcmFn
bWVudChjb25zdCBUZXh0RnJhZ21lbnQmKTsKLQotICAgIC8vIEZJWE1FOiBUaGVzZSBmdW5jdGlv
bnMgYmVsb3cgc2hvdWxkIGJlIGRlY291cGxlZCBmcm9tIHRoZSB0ZXh0IGl0ZXJhdG9yLgotICAg
IGZsb2F0IHRleHRXaWR0aCh1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBlbmRQb3Np
dGlvbiwgZmxvYXQgeFBvc2l0aW9uKSBjb25zdDsKLSAgICBPcHRpb25hbDx1bnNpZ25lZD4gbGFz
dEh5cGhlblBvc2l0aW9uKGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQm
IHJ1biwgdW5zaWduZWQgYmVmb3JlSW5kZXgpIGNvbnN0OwotCi0gICAgc3RydWN0IFN0eWxlIHsK
LSAgICAgICAgZXhwbGljaXQgU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmKTsKLQotICAgICAgICBj
b25zdCBGb250Q2FzY2FkZSYgZm9udDsKLSAgICAgICAgVGV4dEFsaWduTW9kZSB0ZXh0QWxpZ247
Ci0gICAgICAgIGJvb2wgaGFzS2VybmluZ09yTGlnYXR1cmVzOwotICAgICAgICBib29sIGNvbGxh
cHNlV2hpdGVzcGFjZTsKLSAgICAgICAgYm9vbCBwcmVzZXJ2ZU5ld2xpbmU7Ci0gICAgICAgIGJv
b2wgd3JhcExpbmVzOwotICAgICAgICBib29sIGJyZWFrU3BhY2VzOwotICAgICAgICBib29sIGJy
ZWFrQW55V29yZE9uT3ZlcmZsb3c7Ci0gICAgICAgIGJvb2wgYnJlYWtXb3JkT25PdmVyZmxvdzsK
LSAgICAgICAgYm9vbCBicmVha0ZpcnN0V29yZE9uT3ZlcmZsb3c7Ci0gICAgICAgIGJvb2wgYnJl
YWtOQlNQOwotICAgICAgICBib29sIGtlZXBBbGxXb3Jkc0ZvckNKSzsKLSAgICAgICAgZmxvYXQg
d29yZFNwYWNpbmc7Ci0gICAgICAgIFRhYlNpemUgdGFiV2lkdGg7Ci0gICAgICAgIGJvb2wgc2hv
dWxkSHlwaGVuYXRlOwotICAgICAgICBmbG9hdCBoeXBoZW5TdHJpbmdXaWR0aDsKLSAgICAgICAg
dW5zaWduZWQgaHlwaGVuTGltaXRCZWZvcmU7Ci0gICAgICAgIHVuc2lnbmVkIGh5cGhlbkxpbWl0
QWZ0ZXI7Ci0gICAgICAgIEF0b21TdHJpbmcgbG9jYWxlOwotICAgICAgICBPcHRpb25hbDx1bnNp
Z25lZD4gaHlwaGVuTGltaXRMaW5lczsKLSAgICB9OwotICAgIGNvbnN0IFN0eWxlJiBzdHlsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0KLQotcHJpdmF0ZToKLSAgICBUZXh0RnJhZ21lbnQg
ZmluZE5leHRUZXh0RnJhZ21lbnQoZmxvYXQgeFBvc2l0aW9uKTsKLSAgICBlbnVtIFBvc2l0aW9u
VHlwZSB7IEJyZWFrYWJsZSwgTm9uV2hpdGVzcGFjZSB9OwotICAgIHVuc2lnbmVkIHNraXBUb05l
eHRQb3NpdGlvbihQb3NpdGlvblR5cGUsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIGZsb2F0JiB3
aWR0aCwgZmxvYXQgeFBvc2l0aW9uLCBib29sJiBvdmVybGFwcGluZ0ZyYWdtZW50KTsKLSAgICBi
b29sIGlzU29mdExpbmVCcmVhayh1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7Ci0gICAgYm9vbCBp
c0hhcmRMaW5lQnJlYWsoY29uc3QgRmxvd0NvbnRlbnRzOjpJdGVyYXRvciYgc2VnbWVudCkgY29u
c3Q7Ci0gICAgdW5zaWduZWQgbmV4dEJyZWFrYWJsZVBvc2l0aW9uKGNvbnN0IEZsb3dDb250ZW50
czo6U2VnbWVudCYsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24pOwotICAgIHVuc2lnbmVkIG5leHRO
b25XaGl0ZXNwYWNlUG9zaXRpb24oY29uc3QgRmxvd0NvbnRlbnRzOjpTZWdtZW50JiwgdW5zaWdu
ZWQgc3RhcnRQb3NpdGlvbik7Ci0KLSAgICBGbG93Q29udGVudHMgbV9mbG93Q29udGVudHM7Ci0g
ICAgRmxvd0NvbnRlbnRzOjpJdGVyYXRvciBtX2N1cnJlbnRTZWdtZW50OwotICAgIExhenlMaW5l
QnJlYWtJdGVyYXRvciBtX2xpbmVCcmVha0l0ZXJhdG9yOwotICAgIGNvbnN0IFN0eWxlIG1fc3R5
bGU7Ci0gICAgdW5zaWduZWQgbV9wb3NpdGlvbiB7IDAgfTsKLSAgICBib29sIG1fYXRFbmRPZlNl
Z21lbnQgeyBmYWxzZSB9OwotfTsKLQotaW5saW5lIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0
RnJhZ21lbnQgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6c3BsaXQodW5zaWdu
ZWQgc3BsaXRQb3NpdGlvbiwgZmxvYXQgbGVmdFNpZGVXaWR0aCwgZmxvYXQgcmlnaHRTaWRlV2lk
dGgpCi17Ci0gICAgYXV0byB1cGRhdGVGcmFnbWVudFByb3BlcnRpZXMgPSBbXSAoVGV4dEZyYWdt
ZW50JiBmcmFnbWVudCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgZmxvYXQgd2lkdGgp
Ci0gICAgewotICAgICAgICBmcmFnbWVudC5tX3N0YXJ0ID0gc3RhcnQ7Ci0gICAgICAgIGZyYWdt
ZW50Lm1fZW5kID0gZW5kOwotICAgICAgICBmcmFnbWVudC5tX3dpZHRoID0gd2lkdGg7Ci0gICAg
ICAgIGlmIChmcmFnbWVudC5zdGFydCgpICsgMSA+IGZyYWdtZW50LmVuZCgpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBmcmFnbWVudC5tX2lzQ29sbGFwc2VkID0gZmFsc2U7Ci0gICAg
fTsKLQotICAgIFRleHRGcmFnbWVudCByaWdodFNpZGUoKnRoaXMpOwotICAgIHVwZGF0ZUZyYWdt
ZW50UHJvcGVydGllcygqdGhpcywgc3RhcnQoKSwgc3BsaXRQb3NpdGlvbiwgbGVmdFNpZGVXaWR0
aCk7Ci0gICAgdXBkYXRlRnJhZ21lbnRQcm9wZXJ0aWVzKHJpZ2h0U2lkZSwgc3BsaXRQb3NpdGlv
biwgcmlnaHRTaWRlLmVuZCgpLCByaWdodFNpZGVXaWR0aCk7Ci0gICAgcmV0dXJuIHJpZ2h0U2lk
ZTsKLX0KLQotaW5saW5lIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgVGV4dEZy
YWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6c3BsaXRXaXRoSHlwaGVuKHVuc2lnbmVkIGh5
cGhlblBvc2l0aW9uLCBmbG9hdCBoeXBoZW5TdHJpbmdXaWR0aCwKLSAgICBmbG9hdCBsZWZ0U2lk
ZVdpZHRoLCBmbG9hdCByaWdodFNpZGVXaWR0aCkKLXsKLSAgICBhdXRvIHJpZ2h0U2lkZSA9IHNw
bGl0KGh5cGhlblBvc2l0aW9uLCBsZWZ0U2lkZVdpZHRoLCByaWdodFNpZGVXaWR0aCk7Ci0gICAg
bV9oYXNIeXBoZW4gPSB0cnVlOwotICAgIG1fd2lkdGggKz0gaHlwaGVuU3RyaW5nV2lkdGg7Ci0g
ICAgcmV0dXJuIHJpZ2h0U2lkZTsKLX0KLQotaW5saW5lIGJvb2wgVGV4dEZyYWdtZW50SXRlcmF0
b3I6OmlzU29mdExpbmVCcmVhayh1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKLXsKLSAgICBjb25z
dCBhdXRvJiBzZWdtZW50ID0gKm1fY3VycmVudFNlZ21lbnQ7Ci0gICAgQVNTRVJUKHNlZ21lbnQu
c3RhcnQgPD0gcG9zaXRpb24gJiYgcG9zaXRpb24gPCBzZWdtZW50LmVuZCk7Ci0gICAgcmV0dXJu
IG1fc3R5bGUucHJlc2VydmVOZXdsaW5lICYmIHNlZ21lbnQudGV4dFtwb3NpdGlvbiAtIHNlZ21l
bnQuc3RhcnRdID09ICdcbic7Ci19Ci0KLWlubGluZSBib29sIFRleHRGcmFnbWVudEl0ZXJhdG9y
Ojppc0hhcmRMaW5lQnJlYWsoY29uc3QgRmxvd0NvbnRlbnRzOjpJdGVyYXRvciYgc2VnbWVudCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQoc2VnbWVudC0+c3RhcnQgIT0gc2VnbWVudC0+ZW5kIHx8IChz
ZWdtZW50LT5zdGFydCA9PSBzZWdtZW50LT5lbmQgJiYgaXM8UmVuZGVyTGluZUJyZWFrPihzZWdt
ZW50LT5yZW5kZXJlcikpKTsKLSAgICByZXR1cm4gc2VnbWVudC0+c3RhcnQgPT0gc2VnbWVudC0+
ZW5kOwotfQotCi19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4
dFBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcApp
bmRleCBhNzBhODhlNmJhNDMuLjk1Y2U4N2Y5YTFkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dFBhaW50ZXIuY3BwCkBAIC0yMjgsNyArMjI4LDYgQEAgdm9pZCBUZXh0UGFpbnRlcjo6
cGFpbnRSYW5nZShjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBGbG9hdFJlY3QmIGJveFJl
Y3QsIGMKIHZvaWQgVGV4dFBhaW50ZXI6OmNsZWFyR2x5cGhEaXNwbGF5TGlzdHMoKQogewogICAg
IEdseXBoRGlzcGxheUxpc3RDYWNoZTxJbmxpbmVUZXh0Qm94Pjo6c2luZ2xldG9uKCkuY2xlYXIo
KTsKLSAgICBHbHlwaERpc3BsYXlMaXN0Q2FjaGU8U2ltcGxlTGluZUxheW91dDo6UnVuPjo6c2lu
Z2xldG9uKCkuY2xlYXIoKTsKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkK
ICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5sYXlvdXRG
b3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxlZCgpKQogICAgICAgICBHbHlwaERpc3Bs
YXlMaXN0Q2FjaGU8RGlzcGxheTo6UnVuPjo6c2luZ2xldG9uKCkuY2xlYXIoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5jcHAK
aW5kZXggNTFlZjIxZmEzYTU3Li5hMDJlODQ0NDcwZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuY3BwCkBAIC04MSwxMSAr
ODEsNiBAQCBzdGF0aWMgY29uc3QgUmVuZGVyQmxvY2tGbG93KiBsaW5lTGF5b3V0U3lzdGVtRmxv
d0ZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdAogVGV4dEJveEl0ZXJhdG9yIGZpcnN0VGV4
dEJveEZvcihjb25zdCBSZW5kZXJUZXh0JiB0ZXh0KQogewogICAgIGlmIChhdXRvKiBmbG93ID0g
bGluZUxheW91dFN5c3RlbUZsb3dGb3JSZW5kZXJlcih0ZXh0KSkgewotICAgICAgICBpZiAoYXV0
byogc2ltcGxlTGluZUxheW91dCA9IGZsb3ctPnNpbXBsZUxpbmVMYXlvdXQoKSkgewotICAgICAg
ICAgICAgYXV0byByYW5nZSA9IHNpbXBsZUxpbmVMYXlvdXQtPnJ1blJlc29sdmVyKCkucmFuZ2VG
b3JSZW5kZXJlcih0ZXh0KTsKLSAgICAgICAgICAgIHJldHVybiB7IFNpbXBsZVBhdGggeyByYW5n
ZS5iZWdpbigpLCByYW5nZS5lbmQoKSB9IH07Ci0gICAgICAgIH0KLQogI2lmIEVOQUJMRShMQVlP
VVRfRk9STUFUVElOR19DT05URVhUKQogICAgICAgICBpZiAoYXV0byogbGF5b3V0Rm9ybWF0dGlu
Z0NvbnRleHRMaW5lTGF5b3V0ID0gZmxvdy0+bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5
b3V0KCkpCiAgICAgICAgICAgICByZXR1cm4gbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5
b3V0LT50ZXh0Qm94ZXNGb3IodGV4dCk7CkBAIC0xMjksMTEgKzEyNCw2IEBAIGJvb2wgRWxlbWVu
dEJveEl0ZXJhdG9yOjphdEVuZCgpIGNvbnN0CiBFbGVtZW50Qm94SXRlcmF0b3IgZWxlbWVudEJv
eEZvcihjb25zdCBSZW5kZXJMaW5lQnJlYWsmIHJlbmRlckVsZW1lbnQpCiB7CiAgICAgaWYgKGF1
dG8qIGZsb3cgPSBsaW5lTGF5b3V0U3lzdGVtRmxvd0ZvclJlbmRlcmVyKHJlbmRlckVsZW1lbnQp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBzaW1wbGVMaW5lTGF5b3V0ID0gZmxvdy0+c2ltcGxlTGlu
ZUxheW91dCgpKSB7Ci0gICAgICAgICAgICBhdXRvIHJhbmdlID0gc2ltcGxlTGluZUxheW91dC0+
cnVuUmVzb2x2ZXIoKS5yYW5nZUZvclJlbmRlcmVyKHJlbmRlckVsZW1lbnQpOwotICAgICAgICAg
ICAgcmV0dXJuIHsgU2ltcGxlUGF0aChyYW5nZS5iZWdpbigpLCByYW5nZS5lbmQoKSkgfTsKLSAg
ICAgICAgfQotCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAgICAgICAg
IGlmIChhdXRvKiBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQgPSBmbG93LT5sYXlv
dXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKSkKICAgICAgICAgICAgIHJldHVybiBsYXlv
dXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQtPmVsZW1lbnRCb3hGb3IocmVuZGVyRWxlbWVu
dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0
VHJhdmVyc2FsLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJh
dmVyc2FsLmgKaW5kZXggZDczMDQ5NzQxNTNiLi4wMWY2OTg5N2QyZTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmgKQEAgLTI4
LDcgKzI4LDYgQEAKICNpbmNsdWRlICJJbmxpbmVFbGVtZW50Qm94LmgiCiAjaW5jbHVkZSAiTGlu
ZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmgiCiAjaW5jbHVkZSAiTGluZUxheW91dFRyYXZl
cnNhbERpc3BsYXlSdW5QYXRoLmgiCi0jaW5jbHVkZSAiTGluZUxheW91dFRyYXZlcnNhbFNpbXBs
ZVBhdGguaCIKICNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC00OSw4ICs0OCw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdf
Q09OVEVYVCkKICAgICAgICAgRGlzcGxheVJ1blBhdGgsCiAjZW5kaWYKLSAgICAgICAgQ29tcGxl
eFBhdGgsCi0gICAgICAgIFNpbXBsZVBhdGgKKyAgICAgICAgQ29tcGxleFBhdGgKICAgICA+Owog
CiAgICAgQm94KFBhdGhWYXJpYW50JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjZDNjMjNmNzA5OC4uMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQ
YXRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJMaW5lTGF5b3V0VHJhdmVyc2FsLmgiCi0jaW5jbHVkZSAiU2lt
cGxlTGluZUxheW91dFJlc29sdmVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFj
ZSBMaW5lTGF5b3V0VHJhdmVyc2FsIHsKLQotY2xhc3MgU2ltcGxlUGF0aCB7Ci1wdWJsaWM6Ci0g
ICAgU2ltcGxlUGF0aChTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3IgaXRl
cmF0b3IsIFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvciBlbmQpCi0gICAg
ICAgIDogbV9pdGVyYXRvcihpdGVyYXRvcikKLSAgICAgICAgLCBtX2VuZChlbmQpCi0gICAgeyB9
Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuICgqbV9pdGVyYXRvcikucmVj
dCgpOyB9Ci0KLSAgICBmbG9hdCBiYXNlbGluZSgpIGNvbnN0IHsgcmV0dXJuICgqbV9pdGVyYXRv
cikuYmFzZWxpbmUoKTsgfQotCi0gICAgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQotICAgIGJvb2wgZGlyT3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQotICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBjb25zdCB7IHJldHVybiAoKm1faXRlcmF0b3IpLmlz
TGluZUJyZWFrKCk7IH0KLQotICAgIGJvb2wgdXNlTGluZUJyZWFrQm94UmVuZGVyVHJlZUR1bXBR
dWlyaygpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAobV9pdGVyYXRvci5hdEJlZ2luKCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8gcHJldmlvdXMgPSBtX2l0ZXJh
dG9yOwotICAgICAgICAtLXByZXZpb3VzOwotICAgICAgICByZXR1cm4gISgqcHJldmlvdXMpLmlz
RW5kT2ZMaW5lKCk7Ci0gICAgfQotCi0gICAgYm9vbCBoYXNIeXBoZW4oKSBjb25zdCB7IHJldHVy
biAoKm1faXRlcmF0b3IpLmhhc0h5cGhlbigpOyB9Ci0gICAgU3RyaW5nVmlldyB0ZXh0KCkgY29u
c3QgeyByZXR1cm4gKCptX2l0ZXJhdG9yKS50ZXh0KCk7IH0KLSAgICB1bnNpZ25lZCBsb2NhbFN0
YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gKCptX2l0ZXJhdG9yKS5sb2NhbFN0YXJ0KCk7IH0K
LSAgICB1bnNpZ25lZCBsb2NhbEVuZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuICgqbV9pdGVyYXRv
cikubG9jYWxFbmQoKTsgfQotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuICgq
bV9pdGVyYXRvcikuZW5kKCkgLSAoKm1faXRlcmF0b3IpLnN0YXJ0KCk7IH0KLQotICAgIGJvb2wg
aXNMYXN0T25MaW5lKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGF1dG8gbmV4dCA9IG1faXRlcmF0
b3I7Ci0gICAgICAgICsrbmV4dDsKLSAgICAgICAgcmV0dXJuIG5leHQgPT0gbV9lbmQgfHwgKCpt
X2l0ZXJhdG9yKS5saW5lSW5kZXgoKSAhPSAoKm5leHQpLmxpbmVJbmRleCgpOwotICAgIH0KLSAg
ICBib29sIGlzTGFzdCgpIGNvbnN0Ci0gICAgewotICAgICAgICBhdXRvIG5leHQgPSBtX2l0ZXJh
dG9yOwotICAgICAgICArK25leHQ7Ci0gICAgICAgIHJldHVybiBuZXh0ID09IG1fZW5kOwotICAg
IH07Ci0KLSAgICB2b2lkIHRyYXZlcnNlTmV4dFRleHRCb3hJblZpc3VhbE9yZGVyKCkKLSAgICB7
Ci0gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY3VycmVudGx5IG9ubHkgdXNlZCBmb3IgY29u
c2VjdXRpdmUgdGV4dCBydW5zLgotICAgICAgICArK21faXRlcmF0b3I7Ci0gICAgfQotICAgIHZv
aWQgdHJhdmVyc2VOZXh0VGV4dEJveEluVGV4dE9yZGVyKCkgeyAgdHJhdmVyc2VOZXh0VGV4dEJv
eEluVmlzdWFsT3JkZXIoKTsgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNpbXBsZVBh
dGgmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdG9yID09IG90aGVyLm1faXRlcmF0b3I7
IH0KLSAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRvciA9PSBtX2VuZDsg
fQotCi1wcml2YXRlOgotICAgIFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRv
ciBtX2l0ZXJhdG9yOwotICAgIFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRv
ciBtX2VuZDsKLX07Ci0KLX0KLX0K
</data>
<flag name="commit-queue"
          id="425274"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409535</attachid>
            <date>2020-09-23 23:19:20 -0700</date>
            <delta_ts>2020-09-24 01:24:22 -0700</delta_ts>
            <desc>wip</desc>
            <filename>delete-sll-2.patch</filename>
            <type>text/plain</type>
            <size>222189</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlCmluZGV4IDM4YzA2YjhiYmRjYy4uMGQyZTFkNmZhNmU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hl
YWRlcnMuY21ha2UKQEAgLTE0MTYsMTUgKzE0MTYsMTAgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUwogICAgIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuaAogICAgIHJlbmRl
cmluZy9Sb290SW5saW5lQm94LmgKICAgICByZW5kZXJpbmcvU2Nyb2xsQWxpZ25tZW50LmgKLSAg
ICByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5oCi0gICAgcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXRDb3ZlcmFnZS5oCi0gICAgcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVu
dHMuaAotICAgIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaAogCiAgICAgcmVu
ZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5oCiAgICAgcmVuZGVyaW5nL2xpbmUvTGlu
ZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmgKICAgICByZW5kZXJpbmcvbGluZS9MaW5lTGF5
b3V0VHJhdmVyc2FsRGlzcGxheVJ1blBhdGguaAotICAgIHJlbmRlcmluZy9saW5lL0xpbmVMYXlv
dXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmgKICAgICByZW5kZXJpbmcvbGluZS9MaW5lV2lkdGguaAog
ICAgIHJlbmRlcmluZy9saW5lL1RyYWlsaW5nT2JqZWN0cy5oCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXgg
YTQzZmI5NzFjMDAwLi42NDQ5M2JiN2EwNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMTk5LDEzICsy
MTk5LDYgQEAgcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0
LmNwcAogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCiByZW5kZXJpbmcvU2Nyb2xsQWxpZ25t
ZW50LmNwcAotcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCi1yZW5kZXJpbmcvU2ltcGxl
TGluZUxheW91dENvdmVyYWdlLmNwcAotcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29u
dGVudHMuY3BwCi1yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAKLXJlbmRl
cmluZy9TaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5jcHAKLXJlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0UmVzb2x2ZXIuY3BwCi1yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVu
dEl0ZXJhdG9yLmNwcAogcmVuZGVyaW5nL1RhYmxlTGF5b3V0LmNwcAogcmVuZGVyaW5nL1RleHRE
ZWNvcmF0aW9uUGFpbnRlci5jcHAKIHJlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4
MWM2MTAzN2IyMWYuLmFhNzk0OTJjNGNhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzY5LDcgKzM2OSw2IEBACiAJCTBGRkQ0
NUFBMjQzQzMwMjcwMDBENEJFQSAvKiBTY3JvbGxpbmdUcmVlTGF0Y2hpbmdDb250cm9sbGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZENDVBNzI0
M0JGMjU3MDAwRDRCRUEgLyogU2Nyb2xsaW5nVHJlZUxhdGNoaW5nQ29udHJvbGxlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRkQ0RDYxMTg2
NTFGQTMwMDUxMkY2RSAvKiBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZENEQ1RjE4NjUxRkEzMDA1MTJG
NkUgLyogQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTEwRkIwODRCMTRFMTVDN0UwMEEzREI5OCAvKiBQ
dWJsaWNVUkxNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxMEZCMDg0QTE0RTE1QzdFMDBBM0RCOTggLyogUHVibGljVVJMTWFuYWdlci5oICov
OyB9OwotCQkxMTJCMzRENTFFNjBCOTgzMDBCQjMxMEEgLyogU2ltcGxlTGluZUxheW91dFBhZ2lu
YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDEx
MkIzNEQ0MUU2MEI5ODMwMEJCMzEwQSAvKiBTaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5oICov
OyB9OwogCQkxMTMxMENGMjIwQkE0QTMyMDA2NUE4RDAgLyogTGF5b3V0VHJlZUJ1aWxkZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExMTAwRkQ3MjA5
NTE0REYwMDgxQUE2QyAvKiBMYXlvdXRUcmVlQnVpbGRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTExMzEwQ0YzMjBCQTRBMzcwMDY1QThEMCAv
KiBMYXlvdXRSZXBsYWNlZEJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTExQzYxNTYyMEFEMUFFMTAwNUI4MkZBIC8qIExheW91dFJlcGxhY2VkQm94
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTEz
MTBDRjQyMEJBNEEzRDAwNjVBOEQwIC8qIExheW91dEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMTEwMEZDNzIwOTI3NjRDMDA4MUFBNkMg
LyogTGF5b3V0SXRlcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMzkzLDcgKzM5Miw2IEBACiAJCTExOTlGQTQ2MjA4RTM1QTMwMDIzNThD
QyAvKiBMYXlvdXRDb250YWluZXJCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDExOTlGQTQ0MjA4RTM1QTMwMDIzNThDQyAvKiBMYXlvdXRDb250YWlu
ZXJCb3guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxMTk5RkE1QjIwOEUzQzdGMDAyMzU4Q0MgLyogRGlzcGxheUJveC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTE5OUZBNTkyMDhFM0M3RjAwMjM1OEND
IC8qIERpc3BsYXlCb3guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkxMUNCMjc4OTIwM0JBNTcwMDA0QTFEQzkgLyogUmVuZGVyVHJlZUJ1aWxkZXJG
dWxsU2NyZWVuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxMUNCMjc4NzIwM0JBNTcwMDA0QTFEQzkgLyogUmVuZGVyVHJlZUJ1aWxkZXJGdWxsU2NyZWVu
LmggKi87IH07Ci0JCTExRTA2N0VFMUU2MjQ2RTUwMDE2MkQxNiAvKiBTaW1wbGVMaW5lTGF5b3V0
Q292ZXJhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDExRTA2N0VEMUU2MjQ2RTUwMDE2MkQxNiAvKiBTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAwRDdB
ODE3MTM2RUE3MDA3N0NFMDUgLyogU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMEQ3QTcxNzEzNkVBNzAwNzdD
RTA1IC8qIFNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAzQjk5NzA5RUIxM0FGMDA3OTdDN0YgLyogRE9N
V2luZG93LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDAzQjk5NTA5RUIxM0FGMDA3OTdDN0YgLyogRE9NV2luZG93LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwM0JBMEYwOUVCMThGOTAwNzk3QzdG
IC8qIEpTRE9NV2luZG93LmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAzQkEwRTA5RUIxOEY4MDA3OTdDN0YgLyogSlNET01X
aW5kb3cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMTg3Nyw5ICsxODc1LDcgQEAKIAkJNTgwMzcxNjQxQTY2RjFEMzAwQkFGNTE5IC8qIExheWVy
RnJhZ21lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU4MDM3MTYzMUE2NkYxRDMwMEJBRjUxOSAvKiBMYXllckZyYWdtZW50LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTgyNEFCQTMxQUU4MTExNjAw
OTA3NEI3IC8qIFJ1YnlFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1ODI0QUJBMTFBRTgxMTE2MDA5MDc0QjcgLyogUnVieUVsZW1lbnQuaCAq
LzsgfTsKIAkJNTgyNEFCQTcxQUU4MTM4NDAwOTA3NEI3IC8qIFJ1YnlUZXh0RWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTgyNEFCQTUxQUU4
MTM4NDAwOTA3NEI3IC8qIFJ1YnlUZXh0RWxlbWVudC5oICovOyB9OwotCQk1ODJDQjA1MzFBNzhB
MTRCMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODJDQjA1MjFBNzhB
MTRCMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmggKi87
IH07CiAJCTU4MkRFMzI1MUMzMEM4NTQwMEJFMDJBOCAvKiBUZXh0RGVjb3JhdGlvblBhaW50ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4MkRFMzIz
MUMzMEM4NTQwMEJFMDJBOCAvKiBUZXh0RGVjb3JhdGlvblBhaW50ZXIuaCAqLzsgfTsKLQkJNTg1
RDZFMDQxQTFBNzkyRTAwRkE0RjEyIC8qIFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4NUQ2RTAyMUEx
QTc5MkUwMEZBNEYxMiAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTg5NTU2RUQxOEQ0QTQ0
MDAwNzY0QjAzIC8qIEJvcmRlckVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU4OTU1NkVDMThENEE0NDAwMDc2NEIwMyAvKiBCb3JkZXJFZGdlLmgg
Ki87IH07CiAJCTU4QjJGOUY0MjIzMkQ0NTMwMDkzOEQ2MyAvKiBSZXNpemVPYnNlcnZhdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNThCMkY5RjMy
MjMyRDQzRjAwOTM4RDYzIC8qIFJlc2l6ZU9ic2VydmF0aW9uLmggKi87IH07CiAJCTU4QjJGOUY1
MjIzMkQ0NTgwMDkzOEQ2MyAvKiBSZXNpemVPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNThCMkY5RUMyMjMyRDQzQjAwOTM4RDYzIC8qIFJl
c2l6ZU9ic2VydmVyLmggKi87IH07CkBAIC00OTg1LDcgKzQ5ODEsNiBAQAogCQlFNDI5NUZBNDEy
QjA2MTRFMDBEMUFDRTAgLyogUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0Mjk1RkEzMTJCMDYxNEUwMEQxQUNFMCAv
KiBSZXNvdXJjZUxvYWRQcmlvcml0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUU0MkU3NkRDMUM3QUY3NzYwMEUzNjE0RCAvKiBTdHlsZVVwZGF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQyRTc2
REIxQzdBRjc3NjAwRTM2MTREIC8qIFN0eWxlVXBkYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQzMTA1QkIxNjc1MEYxNjAwREIyRkI4IC8q
IE5vZGVUcmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0MzEwNUJBMTY3NTBGMTYwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRTQzNDNEMjMyMzky
Nzc4NDAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDM0M0QyMTIzOTI3NzgzMDBF
QkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDM0M0QyNTIzOTI3NzkwMDBFQkJC
NjYgLyogTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDM0M0QyNDIzOTI3NzhGMDBFQkJCNjYgLyog
TGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQzQTAyM0IxN0VCMzcwQTAwNENERDI1IC8qIFJl
bmRlckVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0M0EwMjNBMTdFQjM3MEEwMDRDREQyNSAvKiBSZW5kZXJFbGVtZW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQzQUY4RTcxQUM1QjdF
QzAwQ0E3MTdFIC8qIENhY2hlVmFsaWRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQUY4RTUxQUM1QjdERDAwQ0E3MTdFIC8qIENhY2hlVmFs
aWRhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC01MDQwLDcgKzUwMzUsNiBAQAogCQlFNDgxMzdCOTFEQjNCNTI2MDA1QzU5QkYgLyogU3R5
bGVWYWxpZGl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTQ4MTM3QjgxREIzQjUyNjAwNUM1OUJGIC8qIFN0eWxlVmFsaWRpdHkuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDg0QTMzRTIzMDU1MzI1
MDA5QURFNkEgLyogTGluZUxheW91dFRyYXZlcnNhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4NEEzM0IyMzA1NTMwMzAwOUFERTZBIC8qIExpbmVM
YXlvdXRUcmF2ZXJzYWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlFNDg2M0NGRTIzODQyRTlFMDA5NzIxNTggLyogUnVsZURhdGEuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODYzQ0ZEMjM4NDJFOUUw
MDk3MjE1OCAvKiBSdWxlRGF0YS5oICovOyB9OwotCQlFNDg5NDRBMzE4MEI1N0Q4MDBGMTY1RDgg
LyogU2ltcGxlTGluZUxheW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQ4OTQ0QTExODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDk0
NkVBRjE1NkU2NEREMDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDk0NkVBRDE1NkU2NEREMDBEMzI5N0Yg
LyogU3R5bGVSdWxlSW1wb3J0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRTQ5QkQ5RkExMzFGRDJFRDAwM0M1NkYwIC8qIENTU1ZhbHVlUG9vbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5QkQ5Rjkx
MzFGRDJFRDAwM0M1NkYwIC8qIENTU1ZhbHVlUG9vbC5oICovOyB9OwogCQlFNEE3OTk1MjIwRUU0
QjE0MDBDMTk1NjggLyogQ1NTUGFyc2VyQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBNzk5NEUyMEVFNEFFMTAwQzE5NTY4IC8qIENTU1Bh
cnNlckNvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtNTA4MSw4ICs1MDc1LDYgQEAKIAkJRTRFOEI0RUMyMTZCNzlFNTAwQjg4MzREIC8q
IFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNEU4QjRFQTIxNkI3OUU1MDBCODgzNEQgLyogU3lzdGVtRm9u
dERhdGFiYXNlQ29yZVRleHQuaCAqLzsgfTsKIAkJRTRFOEI0RjUyMTZCOTU2NTAwQjg4MzREIC8q
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0RThCNEYyMjE2QjhCNjAwMEI4ODM0RCAvKiBGb250Q2FzY2FkZURl
c2NyaXB0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRTRFOTRENjEyMkZGMTU4QTAwREQxOTFGIC8qIENvbXBsZXhMaW5lTGF5b3V0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEExQUM3ODIyRkFG
RDUwMDAxN0I3NUIgLyogQ29tcGxleExpbmVMYXlvdXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlFNEU5QjExOTE4MTA5MTZGMDAzQUNDREYgLyog
U2ltcGxlTGluZUxheW91dFJlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNEU5QjExODE4MTA5MTZGMDAzQUNDREYgLyogU2ltcGxlTGluZUxh
eW91dFJlc29sdmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJRTRFOUIxMUQxODE0NTY5QzAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRGdW5j
dGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
RTlCMTFDMTgxNDU2OUMwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmggKi87
IH07CiAJCUU0RjlFRUYzMTU2REEwMDcwMEQyM0U3RSAvKiBTdHlsZVNoZWV0Q29udGVudHMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RjlFRUYxMTU2
RDg0QzQwMEQyM0U3RSAvKiBTdHlsZVNoZWV0Q29udGVudHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNTE2Njk5MTIwRkY5OTE4MDA5RDJDMjcg
LyogTGlzdEJ1dHRvbkFycm93QDJ4LnBuZyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTUxNjY5OEYyMEZGOTkxNjAwOUQyQzI3IC8qIExpc3RCdXR0b25B
cnJvd0AyeC5wbmcgKi87IH07CiAJCUU1MTc2NzAzMjBCODhDMTQwMEQ0MTE2NyAvKiBEYXRhTGlz
dFN1Z2dlc3Rpb25JbmZvcm1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTUxNzY3MDIyMEI4OEMxNDAwRDQxMTY3IC8qIERhdGFMaXN0U3VnZ2Vz
dGlvbkluZm9ybWF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTYwOTcsOCArNjA4OSw2IEBACiAJCTExMTAwRkQ3MjA5NTE0REYwMDgxQUE2
QyAvKiBMYXlvdXRUcmVlQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRUcmVlQnVpbGRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMTFDNjE1NjIwQUQxQUUxMDA1Qjgy
RkEgLyogTGF5b3V0UmVwbGFjZWRCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0UmVwbGFjZWRC
b3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTExQzYxNTcyMEFEMUFFMTAwNUI4
MkZBIC8qIExheW91dFJlcGxhY2VkQm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dFJl
cGxhY2VkQm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTEyQjM0RDAxRTYw
QjhBNzAwQkIzMTBBIC8qIFNpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTEyQjM0RDQxRTYwQjk4MzAwQkIzMTBB
IC8qIFNpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTExMzQwOUQ3MjAzRTAzODAwMEM2NjkxNSAvKiBSZW5kZXJUcmVlQnVpbGRl
ckNvbnRpbnVhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUcmVlQnVpbGRlckNv
bnRpbnVhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExMzQwOUQ4MjAz
RTAzODAwMEM2NjkxNSAvKiBSZW5kZXJUcmVlQnVpbGRlckNvbnRpbnVhdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW5kZXJUcmVlQnVpbGRlckNvbnRpbnVhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxMTNEMEI0RjFGOUZERDJCMDBGNjExQkIgLyogRnJhbWVWaWV3TGF5b3V0
Q29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGcmFtZVZpZXdMYXlvdXRDb250ZXh0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYxNDcsOCArNjEzNyw2IEBACiAJCTEx
Q0IyNzg2MjAzQkE1NzAwMDRBMURDOSAvKiBSZW5kZXJUcmVlQnVpbGRlckZ1bGxTY3JlZW4uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJGdWxsU2NyZWVuLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTFDQjI3ODcyMDNCQTU3MDAwNEExREM5IC8qIFJl
bmRlclRyZWVCdWlsZGVyRnVsbFNjcmVlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUcmVlQnVp
bGRlckZ1bGxTY3JlZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTFEMTlDMkUy
MzE1OUJBRTAwOEYyNEQzIC8qIFRhYmxlRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUYWJsZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxMUUwNjdFQjFFNjI0NjEzMDAxNjJEMTYgLyogU2lt
cGxlTGluZUxheW91dENvdmVyYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTExRTA2N0VEMUU2MjQ2RTUwMDE2MkQxNiAvKiBTaW1wbGVMaW5lTGF5b3V0Q292
ZXJhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlTGluZUxheW91
dENvdmVyYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExRkYwMkQ1MjBCQTND
ODEwMDgzRjI1QiAvKiBWZXJpZmljYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmVyaWZp
Y2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTJGNzVBOUE4NkVBMDNE
QUYyNEI3OTcxIC8qIElTT1Byb3RlY3Rpb25TeXN0ZW1TcGVjaWZpY0hlYWRlckJveC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJU09Qcm90ZWN0aW9uU3lzdGVtU3BlY2lmaWNI
ZWFkZXJCb3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMEQ3QTcxNzEzNkVB
NzAwNzdDRTA1IC8qIFNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtOTE3MywxMyArOTE2MSw4IEBACiAJCTU4MjRBQkExMUFFODExMTYwMDkw
NzRCNyAvKiBSdWJ5RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
dWJ5RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1ODI0QUJBNDFBRTgx
Mzg0MDA5MDc0QjcgLyogUnVieVRleHRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJ1YnlUZXh0RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTU4MjRBQkE1MUFFODEzODQwMDkwNzRCNyAvKiBSdWJ5VGV4dEVsZW1lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUnVieVRleHRFbGVtZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU4MkNCMDUyMUE3OEExNEIwMEFGRkNDNCAvKiBTaW1w
bGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU4MkNCMDU0MUE3OEEyQjIwMEFGRkNDNCAvKiBTaW1w
bGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTgyREUzMjIxQzMwQzg1NDAwQkUwMkE4
IC8qIFRleHREZWNvcmF0aW9uUGFpbnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1ODJERTMyMzFDMzBDODU0MDBCRTAyQTggLyogVGV4dERlY29yYXRpb25QYWlu
dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHREZWNvcmF0aW9uUGFp
bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1ODVENkRGQjFBMTUzNTU2MDBG
QTRGMTIgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU4NUQ2RTAxMUExQTc5MkUwMEZBNEYxMiAvKiBTaW1wbGVM
aW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1ODVENkUwMjFBMUE3OTJFMDBGQTRGMTIgLyogU2ltcGxlTGluZUxheW91
dEZsb3dDb250ZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVM
aW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU4
ODRGRTU2MjI4MTNFMkQwMDQwQUZGNiAvKiBKU1Jlc2l6ZU9ic2VydmVyRW50cnlDdXN0b20uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNSZXNpemVPYnNlcnZlckVu
dHJ5Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTg5NTU2RUMxOEQ0
QTQ0MDAwNzY0QjAzIC8qIEJvcmRlckVkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQm9yZGVyRWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1OEFFRTJG
MzE4RDRCQ0NGMDAyMkU3RkUgLyogQm9yZGVyRWRnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBCb3JkZXJFZGdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTE1ODM2LDcgKzE1ODE5LDYgQEAKIAkJRTQzMTA1QkExNjc1MEYxNjAwREIyRkI4IC8q
IE5vZGVUcmF2ZXJzYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9kZVRy
YXZlcnNhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDMxMkFCNTI0QjMyNjU2
MDA2NzgzNDkgLyogTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MzEyQUI3MjRCMzI2NTYwMDY3ODM0OSAv
KiBMYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUU0MzQzRDIxMjM5Mjc3ODMwMEVCQkI2NiAvKiBMaW5lTGF5b3V0VHJhdmVy
c2FsU2ltcGxlUGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaW5lTGF5
b3V0VHJhdmVyc2FsU2ltcGxlUGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
NDM0M0QyNDIzOTI3NzhGMDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRo
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpbmVMYXlvdXRUcmF2ZXJzYWxD
b21wbGV4UGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDNBMDIzQTE3RUIz
NzBBMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW5kZXJFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
M0EwMjNDMTdFQjM3MTMwMDRDREQyNSAvKiBSZW5kZXJFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTU5MjgsOCArMTU5MTAsNiBAQAogCQlFNDg0QTMzRDIzMDU1MzAz
MDA5QURFNkEgLyogTGluZUxheW91dFRyYXZlcnNhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBMaW5lTGF5b3V0VHJhdmVyc2FsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTQ4NjNDRkEyMzg0MkU4NzAwOTcyMTU4IC8qIFJ1bGVEYXRhLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJ1bGVEYXRhLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ4NjNDRkQyMzg0MkU5RTAwOTcyMTU4IC8qIFJ1bGVE
YXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJ1bGVEYXRhLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0ODk0NEEwMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1w
bGVMaW5lTGF5b3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNp
bXBsZUxpbmVMYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNDg5NDRB
MTE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUU0OTQ2RUFDMTU2RTY0REQwMEQzMjk3RiAvKiBTdHlsZVJ1bGVJbXBvcnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVSdWxlSW1wb3J0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ5NDZFQUQxNTZFNjRERDAwRDMyOTdG
IC8qIFN0eWxlUnVsZUltcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dHlsZVJ1bGVJbXBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ5QkQ5Rjkx
MzFGRDJFRDAwM0M1NkYwIC8qIENTU1ZhbHVlUG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDU1NWYWx1ZVBvb2wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE2MDE5LDkgKzE1OTk5LDYgQEAKIAkJRTRFOEI0RUQyMTZCNzlGNDAwQjg4MzREIC8qIFN5c3Rl
bUZvbnREYXRhYmFzZUNvcmVUZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTRFOEI0RjAyMTZCOEI1RjAwQjg4MzREIC8qIEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RThCNEYy
MjE2QjhCNjAwMEI4ODM0RCAvKiBGb250Q2FzY2FkZURlc2NyaXB0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTRFOUIxMTgxODEwOTE2RjAwM0FDQ0RGIC8qIFNpbXBsZUxp
bmVMYXlvdXRSZXNvbHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1w
bGVMaW5lTGF5b3V0UmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTRF
OUIxMUExODE0NTY5MjAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlTGluZUxheW91dEZ1bmN0
aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0RTlCMTFDMTgxNDU2OUMw
MDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTRGOUVFRjAxNTZEODRDNDAwRDIzRTdFIC8qIFN0eWxlU2hlZXRD
b250ZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZVNo
ZWV0Q29udGVudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEY5RUVGMTE1
NkQ4NEM0MDBEMjNFN0UgLyogU3R5bGVTaGVldENvbnRlbnRzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFN0eWxlU2hlZXRDb250ZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFNEZCNEIzNTIzOUJFQjEwMDAzQzMzNkEgLyogRGlzcGxheUlubGluZUNvbnRl
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlzcGxheUlubGluZUNvbnRlbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjkxMTgsMjAgKzI5MDk1LDYgQEAKIAkJCQlBOENG
RjVEQTBBMTU1QTA1MDAwQTQyMzQgLyogUm9vdElubGluZUJveC5oICovLAogCQkJCTVEOTI1QjY1
MEY2NEQ0REQwMEI4NDdGMCAvKiBTY3JvbGxBbGlnbm1lbnQuY3BwICovLAogCQkJCTVEOTI1QjY2
MEY2NEQ0REQwMEI4NDdGMCAvKiBTY3JvbGxBbGlnbm1lbnQuaCAqLywKLQkJCQlFNDg5NDRBMDE4
MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5jcHAgKi8sCi0JCQkJRTQ4OTQ0QTEx
ODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCAqLywKLQkJCQkxMUUwNjdFQjFF
NjI0NjEzMDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNwcCAqLywKLQkJCQkx
MUUwNjdFRDFFNjI0NkU1MDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmggKi8s
Ci0JCQkJNTg1RDZFMDExQTFBNzkyRTAwRkE0RjEyIC8qIFNpbXBsZUxpbmVMYXlvdXRGbG93Q29u
dGVudHMuY3BwICovLAotCQkJCTU4NUQ2RTAyMUExQTc5MkUwMEZBNEYxMiAvKiBTaW1wbGVMaW5l
TGF5b3V0Rmxvd0NvbnRlbnRzLmggKi8sCi0JCQkJRTRFOUIxMUExODE0NTY5MjAwM0FDQ0RGIC8q
IFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwICovLAotCQkJCUU0RTlCMTFDMTgxNDU2OUMw
MDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmggKi8sCi0JCQkJMTEyQjM0RDAx
RTYwQjhBNzAwQkIzMTBBIC8qIFNpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmNwcCAqLywKLQkJ
CQkxMTJCMzRENDFFNjBCOTgzMDBCQjMxMEEgLyogU2ltcGxlTGluZUxheW91dFBhZ2luYXRpb24u
aCAqLywKLQkJCQk1ODVENkRGQjFBMTUzNTU2MDBGQTRGMTIgLyogU2ltcGxlTGluZUxheW91dFJl
c29sdmVyLmNwcCAqLywKLQkJCQlFNEU5QjExODE4MTA5MTZGMDAzQUNDREYgLyogU2ltcGxlTGlu
ZUxheW91dFJlc29sdmVyLmggKi8sCi0JCQkJNTgyQ0IwNTQxQTc4QTJCMjAwQUZGQ0M0IC8qIFNp
bXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5jcHAgKi8sCi0JCQkJNTgyQ0IwNTIx
QTc4QTE0QjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5o
ICovLAogCQkJCUUzMUNENzUwMjI5Rjc0OTUwMEZCREExOSAvKiBUYWJsZUxheW91dC5jcHAgKi8s
CiAJCQkJQThDRkYwNEMwQTE1NEYwOTAwMEE0MjM0IC8qIFRhYmxlTGF5b3V0LmggKi8sCiAJCQkJ
MEY1NERDRTMxODgxMDUxRDAwM0VFREJCIC8qIFRleHRBdXRvU2l6aW5nLmNwcCAqLywKQEAgLTMw
MjEzLDcgKzMwMTc2LDYgQEAKIAkJCQlFNDg0QTMzQjIzMDU1MzAzMDA5QURFNkEgLyogTGluZUxh
eW91dFRyYXZlcnNhbC5oICovLAogCQkJCUU0MzQzRDI0MjM5Mjc3OEYwMEVCQkI2NiAvKiBMaW5l
TGF5b3V0VHJhdmVyc2FsQ29tcGxleFBhdGguaCAqLywKIAkJCQlFNDUxQzYyNzIzOTI5M0VCMDA5
OTMxOTAgLyogTGluZUxheW91dFRyYXZlcnNhbERpc3BsYXlSdW5QYXRoLmggKi8sCi0JCQkJRTQz
NDNEMjEyMzkyNzc4MzAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmgg
Ki8sCiAJCQkJRkZEQkMwNDYxODNEMjdCNzAwNDA3MTA5IC8qIExpbmVXaWR0aC5jcHAgKi8sCiAJ
CQkJRkZEQkMwNDUxODNEMjdCNzAwNDA3MTA5IC8qIExpbmVXaWR0aC5oICovLAogCQkJCUZGQUMz
MEZEMTg0RkIxNDUwMDhDNEYxRSAvKiBUcmFpbGluZ09iamVjdHMuY3BwICovLApAQCAtMzI3OTMs
NyArMzI3NTUsNiBAQAogCQkJCUU0ODRBMzNFMjMwNTUzMjUwMDlBREU2QSAvKiBMaW5lTGF5b3V0
VHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDM0M0QyNTIzOTI3NzkwMDBFQkJCNjYg
LyogTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
NDUxQzYyODIzOTI5M0VDMDA5OTMxOTAgLyogTGluZUxheW91dFRyYXZlcnNhbERpc3BsYXlSdW5Q
YXRoLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDM0M0QyMzIzOTI3Nzg0MDBFQkJCNjYgLyogTGlu
ZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCBpbiBIZWFkZXJzICovLAogCQkJCUZGREJDMDQ3
MTgzRDI3QjcwMDQwNzEwOSAvKiBMaW5lV2lkdGguaCBpbiBIZWFkZXJzICovLAogCQkJCUNCQTlE
QzBCMURGNDRERjQwMDA1Njc1QyAvKiBMaW5rSGVhZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MTQzQjI2MzFEREQxNTIwMDAxNEZBQzYgLyogTGlua0ljb24uaCBpbiBIZWFkZXJzICovLApAQCAt
MzM3OTIsMTMgKzMzNzUzLDYgQEAKIAkJCQk5MzMwOUVBMzA5OUVCNzhDMDA1NkU1ODEgLyogU2hh
cmVkVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCURGMTlFMkFDMjQ3NzJCQzEwMDdCREFDQiAv
KiBTaG91bGRSZWxheFRoaXJkUGFydHlDb29raWVCbG9ja2luZy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODM2MkU4QzEyMENFRjlDQjAwMjQ1ODg2IC8qIFNob3VsZFRyZWF0QXNDb250aW51aW5nTG9h
ZC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQ4OTQ0QTMxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBs
ZUxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTExRTA2N0VFMUU2MjQ2RTUwMDE2MkQx
NiAvKiBTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTU4NUQ2
RTA0MUExQTc5MkUwMEZBNEYxMiAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmggaW4g
SGVhZGVycyAqLywKLQkJCQlFNEU5QjExRDE4MTQ1NjlDMDAzQUNDREYgLyogU2ltcGxlTGluZUxh
eW91dEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTEyQjM0RDUxRTYwQjk4MzAwQkIz
MTBBIC8qIFNpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQlF
NEU5QjExOTE4MTA5MTZGMDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmggaW4g
SGVhZGVycyAqLywKLQkJCQk1ODJDQjA1MzFBNzhBMTRCMDBBRkZDQzQgLyogU2ltcGxlTGluZUxh
eW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzE2RERGQjI0
MEM2NEI0MDA5MzQwQUEgLyogU2ltcGxlUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1QTFF
QTdEMTUyQkNGMDgwMDREMDBCNiAvKiBTaW1wbGlmeU1hcmt1cENvbW1hbmQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTU3MkE3RjIxMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5oIGlu
IEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
TG9nZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhMb2dnZXIuY3BwCmlu
ZGV4IDY4MzliNjMxZjFhNS4uNGY1YzZiNWVjNTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYTG9nZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYTG9nZ2VyLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkFYSXNvbGF0
ZWRPYmplY3QuaCIKICNlbmRpZgogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oCmluZGV4IDdmMGY1OTRmMTYxMi4u
YmY1NjZjZmJjY2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaApAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNs
dWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKaW5kZXggYjZhMjdkZDg3NGIyLi41ZTU4MTRkN2Rm
NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTU0LDkgKzU0
LDYgQEAKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgogI2luY2x1ZGUgIlJlbmRlclRl
eHRGcmFnbWVudC5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKLSNpbmNsdWRlICJTaW1wbGVM
aW5lTGF5b3V0LmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oIgotI2lu
Y2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oIgogI2luY2x1ZGUgIlRleHRCb3VuZGFy
aWVzLmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCiAjaW5jbHVkZSAi
VGV4dFBsYWNlaG9sZGVyRWxlbWVudC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L1ZlcmlmaWNhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZpY2F0aW9u
LmNwcAppbmRleCBiNjI5MjkwODNmYWMuLjkzZTA2MWY1ZjNiNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L1ZlcmlmaWNhdGlvbi5jcHAKQEAgLTcwLDQ4ICs3MCw2IEBAIHN0YXRpYyBib29sIGFyZUVz
c2VudGlhbGx5RXF1YWwoTGF5b3V0UmVjdCBhLCBMYXlvdXRSZWN0IGIpCiAgICAgICAgICYmIGFy
ZUVzc2VudGlhbGx5RXF1YWwoYS5oZWlnaHQoKSwgYi5oZWlnaHQoKSk7CiB9CiAKLXN0YXRpYyBi
b29sIG91dHB1dE1pc21hdGNoaW5nU2ltcGxlTGluZUluZm9ybWF0aW9uSWZOZWVkZWQoVGV4dFN0
cmVhbSYgc3RyZWFtLCBjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IFJlbmRl
ckJsb2NrRmxvdyYgYmxvY2tGbG93LCBjb25zdCBDb250YWluZXJCb3gmIGlubGluZUZvcm1hdHRp
bmdSb290KQotewotICAgIGF1dG8qIGxpbmVMYXlvdXREYXRhID0gYmxvY2tGbG93LnNpbXBsZUxp
bmVMYXlvdXQoKTsKLSAgICBpZiAoIWxpbmVMYXlvdXREYXRhKSB7Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBhdXRvJiBp
bmxpbmVGb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZS5lc3RhYmxpc2hlZEZvcm1hdHRpbmdT
dGF0ZShpbmxpbmVGb3JtYXR0aW5nUm9vdCk7Ci0gICAgYXV0byYgbGluZVJ1bnMgPSBkb3duY2Fz
dDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KGlubGluZUZvcm1hdHRpbmdTdGF0ZSkubGluZVJ1bnMo
KTsKLQotICAgIGlmIChsaW5lUnVucy5zaXplKCkgIT0gbGluZUxheW91dERhdGEtPnJ1bkNvdW50
KCkpIHsKLSAgICAgICAgc3RyZWFtIDw8ICJNaXNtYXRjaGluZyBudW1iZXIgb2YgcnVuczogc2lt
cGxlIHJ1bnMoIiA8PCBsaW5lTGF5b3V0RGF0YS0+cnVuQ291bnQoKSA8PCAiKSBpbmxpbmUgcnVu
cygiIDw8IGxpbmVSdW5zLnNpemUoKSA8PCAiKSI7Ci0gICAgICAgIHN0cmVhbS5uZXh0TGluZSgp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBhdXRvIG1pc21hdGNoZWQgPSBm
YWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGluZUxheW91dERhdGEtPnJ1bkNv
dW50KCk7ICsraSkgewotICAgICAgICBhdXRvJiBzaW1wbGVSdW4gPSBsaW5lTGF5b3V0RGF0YS0+
cnVuQXQoaSk7Ci0gICAgICAgIGF1dG8mIGxpbmVSdW4gPSBsaW5lUnVuc1tpXTsKLSAgICAgICAg
YXV0byBtYXRjaGluZ1J1bnMgPSBhcmVFc3NlbnRpYWxseUVxdWFsKHNpbXBsZVJ1bi5sb2dpY2Fs
TGVmdCwgbGluZVJ1bi5sb2dpY2FsTGVmdCgpKSAmJiBhcmVFc3NlbnRpYWxseUVxdWFsKHNpbXBs
ZVJ1bi5sb2dpY2FsUmlnaHQsIGxpbmVSdW4ubG9naWNhbFJpZ2h0KCkpOwotICAgICAgICBpZiAo
bWF0Y2hpbmdSdW5zICYmIGxpbmVSdW4udGV4dCgpKSB7Ci0gICAgICAgICAgICBtYXRjaGluZ1J1
bnMgPSBzaW1wbGVSdW4uc3RhcnQgPT0gbGluZVJ1bi50ZXh0KCktPnN0YXJ0KCkgJiYgc2ltcGxl
UnVuLmVuZCA9PSBsaW5lUnVuLnRleHQoKS0+ZW5kKCk7Ci0gICAgICAgICAgICAvLyBTTEwgaGFu
ZGxlcyBzdHJpbmdzIGluIGEgbW9yZSBjb25jYXRlbmF0ZWQgZm9ybWF0IDxkaXY+Zm9vPGJyPmJh
cjwvZGl2PiAtPiBmb28gLT4gMCwzIGJhciAtPiAzLDYgdnMuIDAsMyBhbmQgMCwzCi0gICAgICAg
ICAgICBpZiAoIW1hdGNoaW5nUnVucykKLSAgICAgICAgICAgICAgICBtYXRjaGluZ1J1bnMgPSAo
c2ltcGxlUnVuLmVuZCAtIHNpbXBsZVJ1bi5zdGFydCkgPT0gKGxpbmVSdW4udGV4dCgpLT5lbmQo
KSAtIGxpbmVSdW4udGV4dCgpLT5zdGFydCgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobWF0
Y2hpbmdSdW5zKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgc3RyZWFtIDw8ICJN
aXNtYXRjaGluZzogc2ltcGxlIHJ1bigiIDw8IHNpbXBsZVJ1bi5zdGFydCA8PCAiLCAiIDw8IHNp
bXBsZVJ1bi5lbmQgPDwgIikgKCIgPDwgc2ltcGxlUnVuLmxvZ2ljYWxMZWZ0IDw8ICIsICIgPDwg
c2ltcGxlUnVuLmxvZ2ljYWxSaWdodCA8PCAiKSI7Ci0gICAgICAgIHN0cmVhbSA8PCAiIGlubGlu
ZSBydW4iOwotICAgICAgICBpZiAobGluZVJ1bi50ZXh0KCkpCi0gICAgICAgICAgICBzdHJlYW0g
PDwgIiAoIiA8PCBsaW5lUnVuLnRleHQoKS0+c3RhcnQoKSA8PCAiLCAiIDw8IGxpbmVSdW4udGV4
dCgpLT5lbmQoKSA8PCAiKSI7Ci0gICAgICAgIHN0cmVhbSA8PCAiICgiIDw8IGxpbmVSdW4ubG9n
aWNhbExlZnQoKSA8PCAiLCAiIDw8IGxpbmVSdW4ubG9naWNhbFRvcCgpIDw8ICIpICgiIDw8IGxp
bmVSdW4ubG9naWNhbFdpZHRoKCkgPDwgIngiIDw8IGxpbmVSdW4ubG9naWNhbEhlaWdodCgpIDw8
ICIpIjsKLSAgICAgICAgc3RyZWFtLm5leHRMaW5lKCk7Ci0gICAgICAgIG1pc21hdGNoZWQgPSB0
cnVlOwotICAgIH0KLSAgICByZXR1cm4gbWlzbWF0Y2hlZDsKLX0KLQogc3RhdGljIGJvb2wgY2hl
Y2tGb3JNYXRjaGluZ05vblRleHRSdW5zKGNvbnN0IExpbmVSdW4mIGxpbmVSdW4sIGNvbnN0IFdl
YkNvcmU6OklubGluZUJveCYgaW5saW5lQm94KQogewogICAgIHJldHVybiBhcmVFc3NlbnRpYWxs
eUVxdWFsKGlubGluZUJveC5sZWZ0KCksIGxpbmVSdW4ubG9naWNhbExlZnQoKSkKQEAgLTM1OSw3
ICszMTcsNyBAQCBzdGF0aWMgYm9vbCB2ZXJpZnlBbmRPdXRwdXRTdWJ0cmVlKFRleHRTdHJlYW0m
IHN0cmVhbSwgY29uc3QgTGF5b3V0U3RhdGUmIGNvbnRleAogCiAgICAgICAgICAgICBhdXRvJiBi
bG9ja0Zsb3cgPSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpjaGlsZFJlbmRlcmVyKTsKICAg
ICAgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdSb290ID0gZG93bmNhc3Q8Q29udGFpbmVyQm94Pigq
Y2hpbGRMYXlvdXRCb3gpOwotICAgICAgICAgICAgbWlzbXRhY2hpbmdHZW9tZXRyeSB8PSBibG9j
a0Zsb3cubGluZUxheW91dFBhdGgoKSA9PSBSZW5kZXJCbG9ja0Zsb3c6OlNpbXBsZUxpbmVzUGF0
aCA/IG91dHB1dE1pc21hdGNoaW5nU2ltcGxlTGluZUluZm9ybWF0aW9uSWZOZWVkZWQoc3RyZWFt
LCBjb250ZXh0LCBibG9ja0Zsb3csIGZvcm1hdHRpbmdSb290KSA6IG91dHB1dE1pc21hdGNoaW5n
Q29tcGxleExpbmVJbmZvcm1hdGlvbklmTmVlZGVkKHN0cmVhbSwgY29udGV4dCwgYmxvY2tGbG93
LCBmb3JtYXR0aW5nUm9vdCk7CisgICAgICAgICAgICBtaXNtdGFjaGluZ0dlb21ldHJ5IHw9IG91
dHB1dE1pc21hdGNoaW5nQ29tcGxleExpbmVJbmZvcm1hdGlvbklmTmVlZGVkKHN0cmVhbSwgY29u
dGV4dCwgYmxvY2tGbG93LCBmb3JtYXR0aW5nUm9vdCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBhdXRvIG1pc21hdGNoaW5nU3VidHJlZUdlb21ldHJ5ID0gdmVyaWZ5QW5kT3V0cHV0
U3VidHJlZShzdHJlYW0sIGNvbnRleHQsIGRvd25jYXN0PFJlbmRlckJveD4oKmNoaWxkUmVuZGVy
ZXIpLCAqY2hpbGRMYXlvdXRCb3gpOwogICAgICAgICAgICAgbWlzbXRhY2hpbmdHZW9tZXRyeSB8
PSBtaXNtYXRjaGluZ1N1YnRyZWVHZW9tZXRyeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91
dC5jcHAKaW5kZXggZjI5OTg3ZDI0MzU1Li42YzZkMDZkZTE3M2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3Jh
dGlvbkxpbmVMYXlvdXQuY3BwCkBAIC00OCw3ICs0OCw2IEBACiAjaW5jbHVkZSAiUmVuZGVyVmll
dy5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTZXR0
aW5ncy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXQuaCIKICNpbmNsdWRlICJUZXh0RGVj
b3JhdGlvblBhaW50ZXIuaCIKICNpbmNsdWRlICJUZXh0UGFpbnRlci5oIgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25QYWdp
bmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRl
Z3JhdGlvblBhZ2luYXRpb24uY3BwCmluZGV4IDg2MmI0OGM4YTk1Ny4uOGZjYjRlYTk0Y2M2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdy
YXRpb25QYWdpbmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRp
b24vTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcApAQCAtMzAsOCArMzAsNiBAQAogCiAj
aW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKLSNp
bmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0LmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZ1
bmN0aW9ucy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0SW50ZWdy
YXRpb24gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbXBsZXhMaW5l
TGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5j
cHAKaW5kZXggZTVjYzk5MjZhNmRhLi5lN2QxZTM0ZTgwZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0NvbXBsZXhMaW5lTGF5b3V0LmNwcApAQCAtMTY5Nyw4ICsxNjk3LDYgQEAg
dm9pZCBDb21wbGV4TGluZUxheW91dDo6bGlua1RvRW5kTGluZUlmTmVlZGVkKExpbmVMYXlvdXRT
dGF0ZSYgbGF5b3V0U3RhdGUpCiAKIHZvaWQgQ29tcGxleExpbmVMYXlvdXQ6OmxheW91dExpbmVC
b3hlcyhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsVG9w
LCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbEJvdHRvbSkKIHsKLSAgICBBU1NFUlQoIW1fZmxv
dy5zaW1wbGVMaW5lTGF5b3V0KCkpOwotCiAgICAgbV9mbG93LnNldExvZ2ljYWxIZWlnaHQobV9m
bG93LmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKSk7CiAgICAgCiAgICAgLy8gTGF5IG91dCBvdXIg
aHlwb3RoZXRpY2FsIGdyaWQgbGluZSBhcyB0aG91Z2ggaXQgb2NjdXJzIGF0IHRoZSB0b3Agb2Yg
dGhlIGJsb2NrLgpAQCAtMjEyOCw4ICsyMTI2LDYgQEAgYm9vbCBDb21wbGV4TGluZUxheW91dDo6
bWF0Y2hlZEVuZExpbmUoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgSW5saW4K
IAogdm9pZCBDb21wbGV4TGluZUxheW91dDo6YWRkT3ZlcmZsb3dGcm9tSW5saW5lQ2hpbGRyZW4o
KQogewotICAgIEFTU0VSVCghbV9mbG93LnNpbXBsZUxpbmVMYXlvdXQoKSk7Ci0KICAgICBMYXlv
dXRVbml0IGVuZFBhZGRpbmcgPSBtX2Zsb3cuaGFzT3ZlcmZsb3dDbGlwKCkgPyBtX2Zsb3cucGFk
ZGluZ0VuZCgpIDogMF9sdTsKICAgICAvLyBGSVhNRTogTmVlZCB0byBmaW5kIGFub3RoZXIgd2F5
IHRvIGRvIHRoaXMsIHNpbmNlIHNjcm9sbGJhcnMgY291bGQgc2hvdyB3aGVuIHdlIGRvbid0IHdh
bnQgdGhlbSB0by4KICAgICBpZiAoIWVuZFBhZGRpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4IGI0MzA3ZDc5NWM3MS4uZWIxMGFlYWI4ODVh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAt
NTQsOSArNTQsNiBAQAogI2luY2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGlu
ZUxheW91dEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9u
LmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVGV4
dEF1dG9TaXppbmcuaCIKICNpbmNsdWRlICJWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUuaCIKICNpbmNs
dWRlICJWaXNpYmxlUG9zaXRpb24uaCIKQEAgLTY2OSwyNiArNjY2LDE2IEBAIHZvaWQgUmVuZGVy
QmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5
b3V0VW5pdCYgbWF4CiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0SW5saW5lQ2hpbGRyZW4o
Ym9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbFRvcCwgTGF5
b3V0VW5pdCYgcmVwYWludExvZ2ljYWxCb3R0b20pCiB7CiAgICAgYXV0byBjb21wdXRlTGluZUxh
eW91dFBhdGggPSBbJl0gewotICAgICAgICBib29sIGlzSW50ZWdyYXRpb25FbmFibGVkID0gZmFs
c2U7CiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAgICAgICAgIGlmIChM
YXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Y2FuVXNlRm9yKCp0aGlzKSkKICAgICAgICAg
ICAgIHJldHVybiBMYXlvdXRGb3JtYXR0aW5nQ29udGV4dFBhdGg7Ci0gICAgICAgIGlzSW50ZWdy
YXRpb25FbmFibGVkID0gTGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmlzRW5hYmxlZCgp
OwogI2VuZGlmCi0gICAgICAgIGlmICghaXNJbnRlZ3JhdGlvbkVuYWJsZWQgJiYgU2ltcGxlTGlu
ZUxheW91dDo6Y2FuVXNlRm9yKCp0aGlzKSkKLSAgICAgICAgICAgIHJldHVybiBTaW1wbGVMaW5l
c1BhdGg7Ci0KICAgICAgICAgcmV0dXJuIExpbmVCb3hlc1BhdGg7CiAgICAgfTsKIAogICAgIGlm
IChsaW5lTGF5b3V0UGF0aCgpID09IFVuZGV0ZXJtaW5lZFBhdGgpCiAgICAgICAgIHNldExpbmVM
YXlvdXRQYXRoKGNvbXB1dGVMaW5lTGF5b3V0UGF0aCgpKTsKIAotICAgIGlmIChsaW5lTGF5b3V0
UGF0aCgpID09IFNpbXBsZUxpbmVzUGF0aCkgewotICAgICAgICBsYXlvdXRTaW1wbGVMaW5lcyhy
ZWxheW91dENoaWxkcmVuLCByZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxCb3R0b20p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5H
X0NPTlRFWFQpCiAgICAgaWYgKGxpbmVMYXlvdXRQYXRoKCkgPT0gTGF5b3V0Rm9ybWF0dGluZ0Nv
bnRleHRQYXRoKSB7CiAgICAgICAgIGxheW91dExGQ0xpbmVzKHJlbGF5b3V0Q2hpbGRyZW4sIHJl
cGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbEJvdHRvbSk7CkBAIC0yMTA4LDggKzIwOTUs
NiBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNl
IGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbAogICAgICAgICBhdXRvIHNob3VsZEludmFsaWRh
dGVMaW5lTGF5b3V0UGF0aCA9IFsmXSB7CiAgICAgICAgICAgICBpZiAoc2VsZk5lZWRzTGF5b3V0
KCkgfHwgY29tcGxleExpbmVMYXlvdXQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICAgIGlmIChzaW1wbGVMaW5lTGF5b3V0KCkgJiYgIVNpbXBsZUxpbmVMYXlvdXQ6
OmNhblVzZUZvckFmdGVyU3R5bGVDaGFuZ2UoKnRoaXMsIGRpZmYpKQotICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogICAg
ICAgICAgICAgaWYgKGxheW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dCgpICYmICFMYXlv
dXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Y2FuVXNlRm9yQWZ0ZXJTdHlsZUNoYW5nZSgqdGhp
cywgZGlmZikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yOTg5LDkgKzI5NzQs
NiBAQCBib29sIFJlbmRlckJsb2NrRmxvdzo6aGl0VGVzdElubGluZUNoaWxkcmVuKGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZQogewogICAgIEFTU0VSVChjaGlsZHJlbklubGlu
ZSgpKTsKIAotICAgIGlmIChzaW1wbGVMaW5lTGF5b3V0KCkpCi0gICAgICAgIHJldHVybiBTaW1w
bGVMaW5lTGF5b3V0OjpoaXRUZXN0RmxvdygqdGhpcywgKnNpbXBsZUxpbmVMYXlvdXQoKSwgcmVx
dWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgaGl0
VGVzdEFjdGlvbik7Ci0KICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKICAg
ICBpZiAobGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCkpCiAgICAgICAgIHJldHVy
biBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKS0+aGl0VGVzdChyZXF1ZXN0LCBy
ZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0
aW9uKTsKQEAgLTMwMDIsMTIgKzI5ODQsNiBAQCBib29sIFJlbmRlckJsb2NrRmxvdzo6aGl0VGVz
dElubGluZUNoaWxkcmVuKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZQogCiB2
b2lkIFJlbmRlckJsb2NrRmxvdzo6YWRkT3ZlcmZsb3dGcm9tSW5saW5lQ2hpbGRyZW4oKQogewot
ICAgIGlmIChhdXRvIHNpbXBsZUxpbmVMYXlvdXQgPSB0aGlzLT5zaW1wbGVMaW5lTGF5b3V0KCkp
IHsKLSAgICAgICAgQVNTRVJUKCFoYXNPdmVyZmxvd0NsaXAoKSk7Ci0gICAgICAgIFNpbXBsZUxp
bmVMYXlvdXQ6OmNvbGxlY3RGbG93T3ZlcmZsb3coKnRoaXMsICpzaW1wbGVMaW5lTGF5b3V0KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19D
T05URVhUKQogICAgIGlmIChsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKSkgewog
ICAgICAgICBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKS0+Y29sbGVjdE92ZXJm
bG93KCp0aGlzKTsKQEAgLTMwOTcsMTEgKzMwNzMsNiBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6
bWFya0xpbmVzRGlydHlJbkJsb2NrUmFuZ2UoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRV
bgogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGbG9hdHMgY3VycmVudGx5IGFmZmVjdCB0aGUg
Y2hvaWNlIG9mIGxheW91dCBwYXRoLgotICAgIGlmIChzaW1wbGVMaW5lTGF5b3V0KCkpIHsKLSAg
ICAgICAgaW52YWxpZGF0ZUxpbmVMYXlvdXRQYXRoKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKICAgICBpZiAobGF5b3V0
Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCkpIHsKICAgICAgICAgaW52YWxpZGF0ZUxpbmVM
YXlvdXRQYXRoKCk7CkBAIC0zMTM4LDkgKzMxMDksNiBAQCBPcHRpb25hbDxpbnQ+IFJlbmRlckJs
b2NrRmxvdzo6Zmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdAogICAgICAgICByZXR1cm4gZmxvb3JU
b0ludChsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKS0+Zmlyc3RMaW5lQmFzZWxp
bmUoKSk7CiAjZW5kaWYKIAotICAgIGlmIChzaW1wbGVMaW5lTGF5b3V0KCkpCi0gICAgICAgIHJl
dHVybiB7IFNpbXBsZUxpbmVMYXlvdXQ6OmNvbXB1dGVGbG93Rmlyc3RMaW5lQmFzZWxpbmUoKnRo
aXMsICpzaW1wbGVMaW5lTGF5b3V0KCkpIH07Ci0KICAgICBBU1NFUlQoZmlyc3RSb290Qm94KCkp
OwogICAgIGlmIChzdHlsZSgpLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSkKICAgICAgICAg
cmV0dXJuIGZpcnN0Um9vdEJveCgpLT5sb2dpY2FsVG9wKCkgKyBmaXJzdExpbmVTdHlsZSgpLmZv
bnRNZXRyaWNzKCkuZGVzY2VudChmaXJzdFJvb3RCb3goKS0+YmFzZWxpbmVUeXBlKCkpOwpAQCAt
MzE1NCw3ICszMTIyLDcgQEAgT3B0aW9uYWw8aW50PiBSZW5kZXJCbG9ja0Zsb3c6OmlubGluZUJs
b2NrQmFzZWxpbmUoTGluZURpcmVjdGlvbk1vZGUgbGluZURpcmVjdGkKIAogICAgIC8vIE5vdGUg
dGhhdCBoZXJlIHdlIG9ubHkgdGFrZSB0aGUgbGVmdCBhbmQgYm90dG9tIGludG8gY29uc2lkZXJh
dGlvbi4gT3VyIGNhbGxlciB0YWtlcyB0aGUgcmlnaHQgYW5kIHRvcCBpbnRvIGNvbnNpZGVyYXRp
b24uCiAgICAgZmxvYXQgYm94SGVpZ2h0ID0gbGluZURpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGlu
ZSA/IGhlaWdodCgpICsgbV9tYXJnaW5Cb3guYm90dG9tKCkgOiB3aWR0aCgpICsgbV9tYXJnaW5C
b3gubGVmdCgpOwotICAgIGZsb2F0IGxhc3RCYXNlbGluZTsKKyAgICBmbG9hdCBsYXN0QmFzZWxp
bmUgPSAwOwogICAgIGlmICghY2hpbGRyZW5JbmxpbmUoKSkgewogICAgICAgICBPcHRpb25hbDxp
bnQ+IGlubGluZUJsb2NrQmFzZWxpbmUgPSBSZW5kZXJCbG9jazo6aW5saW5lQmxvY2tCYXNlbGlu
ZShsaW5lRGlyZWN0aW9uKTsKICAgICAgICAgaWYgKCFpbmxpbmVCbG9ja0Jhc2VsaW5lKQpAQCAt
MzE3MCwxOSArMzEzOCwxNyBAQCBPcHRpb25hbDxpbnQ+IFJlbmRlckJsb2NrRmxvdzo6aW5saW5l
QmxvY2tCYXNlbGluZShMaW5lRGlyZWN0aW9uTW9kZSBsaW5lRGlyZWN0aQogICAgICAgICAgICAg
ICAgICsgKGxpbmVEaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyBib3JkZXJUb3AoKSArIHBh
ZGRpbmdUb3AoKSA6IGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nUmlnaHQoKSkpOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKHNpbXBsZUxpbmVMYXlvdXQoKSkKLSAgICAgICAgICAgIGxhc3RCYXNl
bGluZSA9IFNpbXBsZUxpbmVMYXlvdXQ6OmNvbXB1dGVGbG93TGFzdExpbmVCYXNlbGluZSgqdGhp
cywgKnNpbXBsZUxpbmVMYXlvdXQoKSk7Ci0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NP
TlRFWFQpCi0gICAgICAgIGVsc2UgaWYgKGxheW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91
dCgpKQotICAgICAgICAgICAgbGFzdEJhc2VsaW5lID0gZmxvb3JUb0ludChsYXlvdXRGb3JtYXR0
aW5nQ29udGV4dExpbmVMYXlvdXQoKS0+bGFzdExpbmVCYXNlbGluZSgpKTsKLSNlbmRpZgotICAg
ICAgICBlbHNlIHsKKyAgICAgICAgaWYgKGNvbXBsZXhMaW5lTGF5b3V0KCkpIHsKICAgICAgICAg
ICAgIGJvb2wgaXNGaXJzdExpbmUgPSBsYXN0Um9vdEJveCgpID09IGZpcnN0Um9vdEJveCgpOwog
ICAgICAgICAgICAgY29uc3QgYXV0byYgc3R5bGUgPSBpc0ZpcnN0TGluZSA/IGZpcnN0TGluZVN0
eWxlKCkgOiB0aGlzLT5zdHlsZSgpOwogICAgICAgICAgICAgLy8gSW5saW5lRmxvd0JveDo6cGxh
Y2VCb3hlc0luQmxvY2tEaXJlY3Rpb24gd2lsbCBmbGlwIGxpbmVzIGluIGNhc2Ugb2YgdmVydGlj
YWxMUiBtb2RlLCBzbyB3ZSBjYW4gYXNzdW1lIHZlcnRpY2FsUkwgZm9yIG5vdy4KICAgICAgICAg
ICAgIGxhc3RCYXNlbGluZSA9IHN0eWxlLmZvbnRNZXRyaWNzKCkuYXNjZW50KGxhc3RSb290Qm94
KCktPmJhc2VsaW5lVHlwZSgpKQogICAgICAgICAgICAgICAgICsgKHN0eWxlLmlzRmxpcHBlZExp
bmVzV3JpdGluZ01vZGUoKSA/IGxvZ2ljYWxIZWlnaHQoKSAtIGxhc3RSb290Qm94KCktPmxvZ2lj
YWxCb3R0b20oKSA6IGxhc3RSb290Qm94KCktPmxvZ2ljYWxUb3AoKSk7CiAgICAgICAgIH0KKyNp
ZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKyAgICAgICAgZWxzZSBpZiAobGF5
b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCkpCisgICAgICAgICAgICBsYXN0QmFzZWxp
bmUgPSBmbG9vclRvSW50KGxheW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dCgpLT5sYXN0
TGluZUJhc2VsaW5lKCkpOworI2VuZGlmCiAgICAgfQogICAgIC8vIEFjY29yZGluZyB0byB0aGUg
Q1NTIHNwZWMgaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvdmlzdWRldC5odG1sLCB3ZSBzaG91
bGRuJ3QgYmUgcGVyZm9ybWluZyB0aGlzIG1pbiwgYnV0IHNob3VsZAogICAgIC8vIGluc3RlYWQg
YmUgcmV0dXJuaW5nIGJveEhlaWdodCBkaXJlY3RseS4gSG93ZXZlciwgd2UgZmVlbCB0aGF0IGEg
bWluIGhlcmUgaXMgYmV0dGVyIGJlaGF2aW9yIChhbmQgaXMgY29uc2lzdGVudApAQCAtMzIwMCw4
ICszMTY2LDYgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnNldFNlbGVjdGlvblN0YXRlKEhpZ2hs
aWdodFN0YXRlIHN0YXRlKQogR2FwUmVjdHMgUmVuZGVyQmxvY2tGbG93OjppbmxpbmVTZWxlY3Rp
b25HYXBzKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByb290Qmxv
Y2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2Nr
LAogICAgIExheW91dFVuaXQmIGxhc3RMb2dpY2FsVG9wLCBMYXlvdXRVbml0JiBsYXN0TG9naWNh
bExlZnQsIExheW91dFVuaXQmIGxhc3RMb2dpY2FsUmlnaHQsIGNvbnN0IExvZ2ljYWxTZWxlY3Rp
b25PZmZzZXRDYWNoZXMmIGNhY2hlLCBjb25zdCBQYWludEluZm8qIHBhaW50SW5mbykKIHsKLSAg
ICBBU1NFUlQoIXNpbXBsZUxpbmVMYXlvdXQoKSk7Ci0KICAgICBHYXBSZWN0cyByZXN1bHQ7CiAK
ICAgICBib29sIGNvbnRhaW5zU3RhcnQgPSBzZWxlY3Rpb25TdGF0ZSgpID09IEhpZ2hsaWdodFN0
YXRlOjpTdGFydCB8fCBzZWxlY3Rpb25TdGF0ZSgpID09IEhpZ2hsaWdodFN0YXRlOjpCb3RoOwpA
QCAtMzMxNyw5ICszMjgxLDYgQEAgaW50IFJlbmRlckJsb2NrRmxvdzo6bGluZUNvdW50KCkgY29u
c3QKICAgICAgICAgaWYgKGxheW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dCgpKQogICAg
ICAgICAgICAgcmV0dXJuIGxheW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dCgpLT5saW5l
Q291bnQoKTsKICNlbmRpZgotICAgICAgICBpZiAoc2ltcGxlTGluZUxheW91dCgpKQotICAgICAg
ICAgICAgcmV0dXJuIHNpbXBsZUxpbmVMYXlvdXQoKS0+bGluZUNvdW50KCk7Ci0KICAgICAgICAg
aWYgKGNvbXBsZXhMaW5lTGF5b3V0KCkpCiAgICAgICAgICAgICByZXR1cm4gY29tcGxleExpbmVM
YXlvdXQoKS0+bGluZUNvdW50KCk7CiAKQEAgLTM1NzUsMTAgKzM1MzYsOCBAQCBWaXNpYmxlUG9z
aXRpb24gUmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlvbkZvclBvaW50V2l0aElubGluZUNoaWxkcmVu
KGNvbnN0IExheW91dAogCiBQb3NpdGlvbiBSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9uRm9yUG9p
bnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQogewotICAgIC8vIEZJWE1FOiBJdCBzdXBwb3J0
cyBzaW5nbGUgdGV4dCBjaGlsZCBvbmx5ICh3aGljaCBpcyB0aGUgbWFqb3JpdHkgb2Ygc2ltcGxl
IGxpbmUgbGF5b3V0IHN1cHBvcnRlZCBjb250ZW50IGF0IHRoaXMgcG9pbnQpLgotICAgIGlmICgh
c2ltcGxlTGluZUxheW91dCgpIHx8IGZpcnN0Q2hpbGQoKSAhPSBsYXN0Q2hpbGQoKSB8fCAhaXM8
UmVuZGVyVGV4dD4oZmlyc3RDaGlsZCgpKSkKLSAgICAgICAgcmV0dXJuIHBvc2l0aW9uRm9yUG9p
bnQocG9pbnQsIG51bGxwdHIpLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgcmV0dXJuIGRvd25jYXN0
PFJlbmRlclRleHQ+KCpmaXJzdENoaWxkKCkpLnBvc2l0aW9uRm9yUG9pbnQocG9pbnQpOworICAg
IC8vIEZJWE1FOiBUaGlzIGZvcmNlcyBDb21wbGV4IExpbmUgTGF5b3V0LgorICAgIHJldHVybiBw
b3NpdGlvbkZvclBvaW50KHBvaW50LCBudWxscHRyKS5kZWVwRXF1aXZhbGVudCgpOwogfQogCiBW
aXNpYmxlUG9zaXRpb24gUmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExh
eW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKQpAQCAtMzYw
OSwxMSArMzU2OCw2IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpwYWludElubGluZUNoaWxkcmVu
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2luCiAgICAgfQogI2VuZGlmCiAK
LSAgICBpZiAoYXV0byBzaW1wbGVMaW5lTGF5b3V0ID0gdGhpcy0+c2ltcGxlTGluZUxheW91dCgp
KSB7Ci0gICAgICAgIFNpbXBsZUxpbmVMYXlvdXQ6OnBhaW50RmxvdygqdGhpcywgKnNpbXBsZUxp
bmVMYXlvdXQsIHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCiAgICAgaWYgKGNvbXBsZXhMaW5lTGF5b3V0KCkpCiAgICAgICAgIGNvbXBsZXhMaW5lTGF5
b3V0KCktPmxpbmVCb3hlcygpLnBhaW50KHRoaXMsIHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwog
fQpAQCAtMzY3MSw4ICszNjI1LDYgQEAgYm9vbCBSZW5kZXJCbG9ja0Zsb3c6Omhhc0xpbmVzKCkg
Y29uc3QKICAgICBpZiAobGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCkpCiAgICAg
ICAgIHJldHVybiBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKS0+bGluZUNvdW50
KCk7CiAjZW5kaWYKLSAgICBpZiAoc2ltcGxlTGluZUxheW91dCgpKQotICAgICAgICByZXR1cm4g
c2ltcGxlTGluZUxheW91dCgpLT5saW5lQ291bnQoKTsKIAogICAgIHJldHVybiBjb21wbGV4TGlu
ZUxheW91dCgpICYmIGNvbXBsZXhMaW5lTGF5b3V0KCktPmxpbmVCb3hlcygpLmZpcnN0TGluZUJv
eCgpOwogfQpAQCAtMzY4MiwxNSArMzYzNCwxMSBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6aW52
YWxpZGF0ZUxpbmVMYXlvdXRQYXRoKCkKICAgICBzd2l0Y2ggKGxpbmVMYXlvdXRQYXRoKCkpIHsK
ICAgICBjYXNlIFVuZGV0ZXJtaW5lZFBhdGg6CiAgICAgY2FzZSBGb3JjZUxpbmVCb3hlc1BhdGg6
Ci0gICAgICAgIEFTU0VSVCghc2ltcGxlTGluZUxheW91dCgpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIGNhc2UgTGluZUJveGVzUGF0aDoKLSAgICAgICAgQVNTRVJUKCFzaW1wbGVMaW5lTGF5b3V0
KCkpOwogICAgICAgICBzZXRMaW5lTGF5b3V0UGF0aChVbmRldGVybWluZWRQYXRoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgTGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRQYXRoOiAvLyBGSVhN
RTogTm90IGFsbCBjbGllbnRzIG9mIGludmFsaWRhdGVMaW5lTGF5b3V0UGF0aCgpIGFjdHVhbGx5
IG5lZWQgdG8gd2lwZSB0aGUgbGF5b3V0LgotICAgIGNhc2UgU2ltcGxlTGluZXNQYXRoOgotICAg
ICAgICAvLyBUaGUgc2ltcGxlIGxpbmUgbGF5b3V0IG1heSBoYXZlIGJlY29tZSBpbnZhbGlkLgog
ICAgICAgICBtX2xpbmVMYXlvdXQgPSBXVEY6Ok1vbm9zdGF0ZSgpOwogICAgICAgICBzZXRMaW5l
TGF5b3V0UGF0aChVbmRldGVybWluZWRQYXRoKTsKICAgICAgICAgaWYgKG5lZWRzTGF5b3V0KCkp
CkBAIC0zNzAyLDMyICszNjUwLDYgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmludmFsaWRhdGVM
aW5lTGF5b3V0UGF0aCgpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgUmVu
ZGVyQmxvY2tGbG93OjpsYXlvdXRTaW1wbGVMaW5lcyhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExh
eW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsVG9wLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbEJv
dHRvbSkKLXsKLSAgICBib29sIG5lZWRzTGF5b3V0ID0gc2VsZk5lZWRzTGF5b3V0KCkgfHwgcmVs
YXlvdXRDaGlsZHJlbiB8fCAhc2ltcGxlTGluZUxheW91dCgpOwotICAgIGlmIChuZWVkc0xheW91
dCkKLSAgICAgICAgbV9saW5lTGF5b3V0ID0gU2ltcGxlTGluZUxheW91dDo6Y3JlYXRlKCp0aGlz
KTsKLQotICAgIGF1dG8mIHNpbXBsZUxpbmVMYXlvdXQgPSAqdGhpcy0+c2ltcGxlTGluZUxheW91
dCgpOwotCi0gICAgaWYgKHZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkubGF5b3V0
U3RhdGUoKSAmJiB2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmxheW91dFN0YXRl
KCktPmlzUGFnaW5hdGVkKCkpIHsKLSAgICAgICAgc2ltcGxlTGluZUxheW91dC5zZXRJc1BhZ2lu
YXRlZCgpOwotICAgICAgICBTaW1wbGVMaW5lTGF5b3V0OjphZGp1c3RMaW5lUG9zaXRpb25zRm9y
UGFnaW5hdGlvbihzaW1wbGVMaW5lTGF5b3V0LCAqdGhpcyk7Ci0gICAgfQotCi0gICAgZm9yIChh
dXRvJiByZW5kZXJlciA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4oKnRoaXMpKSB7Ci0g
ICAgICAgIGlmIChpczxSZW5kZXJUZXh0PihyZW5kZXJlcikpCi0gICAgICAgICAgICBkb3duY2Fz
dDxSZW5kZXJUZXh0PihyZW5kZXJlcikuZGVsZXRlTGluZUJveGVzKCk7Ci0gICAgICAgIHJlbmRl
cmVyLmNsZWFyTmVlZHNMYXlvdXQoKTsKLSAgICB9Ci0KLSAgICBMYXlvdXRVbml0IGxpbmVMYXlv
dXRIZWlnaHQgPSBTaW1wbGVMaW5lTGF5b3V0Ojpjb21wdXRlRmxvd0hlaWdodCgqdGhpcywgc2lt
cGxlTGluZUxheW91dCk7Ci0gICAgTGF5b3V0VW5pdCBsaW5lTGF5b3V0VG9wID0gYm9yZGVyQW5k
UGFkZGluZ0JlZm9yZSgpOwotICAgIHJlcGFpbnRMb2dpY2FsVG9wID0gbGluZUxheW91dFRvcDsK
LSAgICByZXBhaW50TG9naWNhbEJvdHRvbSA9IG5lZWRzTGF5b3V0ID8gcmVwYWludExvZ2ljYWxU
b3AgKyBsaW5lTGF5b3V0SGVpZ2h0ICsgYm9yZGVyQW5kUGFkZGluZ0FmdGVyKCkgOiByZXBhaW50
TG9naWNhbFRvcDsKLSAgICBzZXRMb2dpY2FsSGVpZ2h0KGxpbmVMYXlvdXRUb3AgKyBsaW5lTGF5
b3V0SGVpZ2h0ICsgYm9yZGVyQW5kUGFkZGluZ0FmdGVyKCkpOwotfQotCiAjaWYgRU5BQkxFKExB
WU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0TEZD
TGluZXMoYm9vbCwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxUb3AsIExheW91dFVuaXQmIHJl
cGFpbnRMb2dpY2FsQm90dG9tKQogewpAQCAtMzc2OCwxMSArMzY5MCw3IEBAIHZvaWQgUmVuZGVy
QmxvY2tGbG93OjplbnN1cmVMaW5lQm94ZXMoKQogICAgIGlmIChjb21wbGV4TGluZUxheW91dCgp
IHx8ICFoYXNMaW5lTGF5b3V0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc2ltcGxl
TGluZUxheW91dCA9IG1ha2VSZWZQdHIodGhpcy0+c2ltcGxlTGluZUxheW91dCgpKTsKLQogICAg
IGJvb2wgbmVlZHNUb1BhZ2luYXRlQ29tcGxleExpbmVzID0gWyZdIHsKLSAgICAgICAgaWYgKHNp
bXBsZUxpbmVMYXlvdXQgJiYgc2ltcGxlTGluZUxheW91dC0+aXNQYWdpbmF0ZWQoKSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhU
KQogICAgICAgICBpZiAobGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCkgJiYgbGF5
b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCktPmlzUGFnaW5hdGVkKCkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM3ODIsMTMgKzM3MDAsNiBAQCB2b2lkIFJlbmRlckJsb2Nr
Rmxvdzo6ZW5zdXJlTGluZUJveGVzKCkKIAogICAgIG1fbGluZUxheW91dCA9IG1ha2VVbmlxdWU8
Q29tcGxleExpbmVMYXlvdXQ+KCp0aGlzKTsKIAotICAgIGlmIChzaW1wbGVMaW5lTGF5b3V0KSB7
Ci0gICAgICAgIGlmIChTaW1wbGVMaW5lTGF5b3V0OjpjYW5Vc2VGb3JMaW5lQm94VHJlZSgqdGhp
cywgKnNpbXBsZUxpbmVMYXlvdXQpKSB7Ci0gICAgICAgICAgICBTaW1wbGVMaW5lTGF5b3V0Ojpn
ZW5lcmF0ZUxpbmVCb3hUcmVlKCp0aGlzLCAqc2ltcGxlTGluZUxheW91dCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBhdXRvJiBjb21wbGV4TGluZUxheW91
dCA9ICp0aGlzLT5jb21wbGV4TGluZUxheW91dCgpOwogCiAjaWYgQVNTRVJUX0VOQUJMRUQKQEAg
LTM4MjIsOSArMzczMyw2IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpvdXRwdXRMaW5lVHJlZUFu
ZE1hcmsoV1RGOjpUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IElubGluCiB7CiAgICAgZm9yIChj
b25zdCBSb290SW5saW5lQm94KiByb290ID0gZmlyc3RSb290Qm94KCk7IHJvb3Q7IHJvb3QgPSBy
b290LT5uZXh0Um9vdEJveCgpKQogICAgICAgICByb290LT5vdXRwdXRMaW5lVHJlZUFuZE1hcmso
c3RyZWFtLCBtYXJrZWRCb3gsIGRlcHRoKTsKLQotICAgIGlmIChhdXRvIHNpbXBsZUxpbmVMYXlv
dXQgPSB0aGlzLT5zaW1wbGVMaW5lTGF5b3V0KCkpCi0gICAgICAgIFNpbXBsZUxpbmVMYXlvdXQ6
Om91dHB1dExpbmVMYXlvdXRGb3JGbG93KHN0cmVhbSwgKnRoaXMsICpzaW1wbGVMaW5lTGF5b3V0
LCBkZXB0aCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrRmxvdy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrRmxvdy5oCmluZGV4IGEyMTIwNzNmMGQxYS4uOWFmYTllOWFjYmY3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5j
bHVkZSAiTGluZVdpZHRoLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJS
ZW5kZXJMaW5lQm94TGlzdC5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXQuaCIKICNpbmNs
dWRlICJUcmFpbGluZ09iamVjdHMuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAKQEAgLTM0NCw3ICsz
NDMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNMaW5lcygpIGNvbnN0OwogICAgIHZvaWQgaW52
YWxpZGF0ZUxpbmVMYXlvdXRQYXRoKCkgZmluYWw7CiAKLSAgICBlbnVtIExpbmVMYXlvdXRQYXRo
IHsgVW5kZXRlcm1pbmVkUGF0aCA9IDAsIFNpbXBsZUxpbmVzUGF0aCwgTGluZUJveGVzUGF0aCwg
TGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRQYXRoLCBGb3JjZUxpbmVCb3hlc1BhdGggfTsKKyAgICBl
bnVtIExpbmVMYXlvdXRQYXRoIHsgVW5kZXRlcm1pbmVkUGF0aCA9IDAsIExpbmVCb3hlc1BhdGgs
IExheW91dEZvcm1hdHRpbmdDb250ZXh0UGF0aCwgRm9yY2VMaW5lQm94ZXNQYXRoIH07CiAgICAg
TGluZUxheW91dFBhdGggbGluZUxheW91dFBhdGgoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxMaW5lTGF5b3V0UGF0aD4ocmVuZGVyQmxvY2tGbG93TGluZUxheW91dFBhdGgoKSk7IH0KICAg
ICB2b2lkIHNldExpbmVMYXlvdXRQYXRoKExpbmVMYXlvdXRQYXRoIHBhdGgpIHsgc2V0UmVuZGVy
QmxvY2tGbG93TGluZUxheW91dFBhdGgocGF0aCk7IH0KIApAQCAtMzU5LDggKzM1OCw2IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgY29udGFpbnNOb25aZXJvQmlkaUxldmVsKCkgY29uc3Q7CiAKLSAg
ICBjb25zdCBTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQqIHNpbXBsZUxpbmVMYXlvdXQoKSBjb25z
dDsKLSAgICBTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQqIHNpbXBsZUxpbmVMYXlvdXQoKTsKICAg
ICBjb25zdCBDb21wbGV4TGluZUxheW91dCogY29tcGxleExpbmVMYXlvdXQoKSBjb25zdDsKICAg
ICBDb21wbGV4TGluZUxheW91dCogY29tcGxleExpbmVMYXlvdXQoKTsKICNpZiBFTkFCTEUoTEFZ
T1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKQEAgLTU0MywxMSArNTQwLDggQEAgcHVibGljOgogCiBw
cml2YXRlOgogICAgIGJvb2wgaGFzTGluZUxheW91dCgpIGNvbnN0OwotICAgIGJvb2wgaGFzU2lt
cGxlTGluZUxheW91dCgpIGNvbnN0OwogICAgIGJvb2wgaGFzQ29tcGxleExpbmVMYXlvdXQoKSBj
b25zdDsKIAotICAgIHZvaWQgbGF5b3V0U2ltcGxlTGluZXMoYm9vbCByZWxheW91dENoaWxkcmVu
LCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbFRvcCwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2lj
YWxCb3R0b20pOwotCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAgICAg
Ym9vbCBoYXNMYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKSBjb25zdDsKICAgICB2
b2lkIGxheW91dExGQ0xpbmVzKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgcmVw
YWludExvZ2ljYWxUb3AsIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKQEAgLTU5
Miw3ICs1ODYsNiBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIFZhcmlhbnQ8CiAgICAgICAg
IFdURjo6TW9ub3N0YXRlLAotICAgICAgICBSZWY8U2ltcGxlTGluZUxheW91dDo6TGF5b3V0PiwK
ICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKICAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPExheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0PiwKICNlbmRpZgpAQCAtNjI0LDIx
ICs2MTcsNiBAQCBpbmxpbmUgQ29tcGxleExpbmVMYXlvdXQqIFJlbmRlckJsb2NrRmxvdzo6Y29t
cGxleExpbmVMYXlvdXQoKQogICAgIHJldHVybiBoYXNDb21wbGV4TGluZUxheW91dCgpID8gV1RG
OjpnZXQ8c3RkOjp1bmlxdWVfcHRyPENvbXBsZXhMaW5lTGF5b3V0Pj4obV9saW5lTGF5b3V0KS5n
ZXQoKSA6IG51bGxwdHI7CiB9CiAKLWlubGluZSBib29sIFJlbmRlckJsb2NrRmxvdzo6aGFzU2lt
cGxlTGluZUxheW91dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8UmVmPFNpbXBsZUxpbmVMYXlvdXQ6OkxheW91dD4+KG1fbGluZUxheW91dCk7Ci19Ci0KLWlu
bGluZSBjb25zdCBTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQqIFJlbmRlckJsb2NrRmxvdzo6c2lt
cGxlTGluZUxheW91dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGhhc1NpbXBsZUxpbmVMYXlvdXQo
KSA/IFdURjo6Z2V0PFJlZjxTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQ+PihtX2xpbmVMYXlvdXQp
LnB0cigpIDogbnVsbHB0cjsKLX0KLQotaW5saW5lIFNpbXBsZUxpbmVMYXlvdXQ6OkxheW91dCog
UmVuZGVyQmxvY2tGbG93OjpzaW1wbGVMaW5lTGF5b3V0KCkKLXsKLSAgICByZXR1cm4gaGFzU2lt
cGxlTGluZUxheW91dCgpID8gV1RGOjpnZXQ8UmVmPFNpbXBsZUxpbmVMYXlvdXQ6OkxheW91dD4+
KG1fbGluZUxheW91dCkucHRyKCkgOiBudWxscHRyOwotfQotCiAjaWYgRU5BQkxFKExBWU9VVF9G
T1JNQVRUSU5HX0NPTlRFWFQpCiBpbmxpbmUgYm9vbCBSZW5kZXJCbG9ja0Zsb3c6Omhhc0xheW91
dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dCgpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRlZEZsb3cuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmNwcAppbmRleCAwZGQzOGVjMmZk
MTAuLjQyZGMxOTIwNTNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZyYWdtZW50ZWRGbG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRnJhZ21lbnRlZEZsb3cuY3BwCkBAIC00NTAsNyArNDUwLDcgQEAgdm9pZCBSZW5kZXJGcmFn
bWVudGVkRmxvdzo6cmVtb3ZlUmVuZGVyQm94RnJhZ21lbnRJbmZvKFJlbmRlckJveCYgYm94KQog
CiB2b2lkIFJlbmRlckZyYWdtZW50ZWRGbG93OjpyZW1vdmVMaW5lRnJhZ21lbnRJbmZvKGNvbnN0
IFJlbmRlckJsb2NrRmxvdyYgYmxvY2tGbG93KQogewotICAgIGlmICghbV9saW5lVG9GcmFnbWVu
dE1hcCB8fCBibG9ja0Zsb3cubGluZUxheW91dFBhdGgoKSA9PSBTaW1wbGVMaW5lc1BhdGgpCisg
ICAgaWYgKCFtX2xpbmVUb0ZyYWdtZW50TWFwKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3Ig
KGF1dG8qIGN1cnIgPSBibG9ja0Zsb3cuZmlyc3RSb290Qm94KCk7IGN1cnI7IGN1cnIgPSBjdXJy
LT5uZXh0Um9vdEJveCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCmlu
ZGV4IGQ0NjEzNjY4YTI3Mi4uOGUwZWIyNzhjYzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHQuY3BwCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgogI2luY2x1ZGUgIlJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCIKICNpbmNsdWRlICJTZXR0aW5n
cy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJU
ZXh0LmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1ZGUgIlZpc2li
bGVQb3NpdGlvbi5oIgpAQCAtNDQzLDIzICs0NDIsMTMgQEAgVmVjdG9yPEZsb2F0UXVhZD4gUmVu
ZGVyVGV4dDo6YWJzb2x1dGVRdWFkc0ZvclJhbmdlKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBl
bmQKICAgICBBU1NFUlQoc3RhcnQgPD0gSU5UX01BWCk7CiAgICAgc3RhcnQgPSBzdGQ6Om1pbihz
dGFydCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElOVF9NQVgpKTsKICAgICBlbmQgPSBzdGQ6Om1p
bihlbmQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihJTlRfTUFYKSk7Ci0gICAgaWYgKHNpbXBsZUxp
bmVMYXlvdXQoKSAmJiAhdXNlU2VsZWN0aW9uSGVpZ2h0KQotICAgICAgICByZXR1cm4gY29sbGVj
dEFic29sdXRlUXVhZHNGb3JSYW5nZSgqdGhpcywgc3RhcnQsIGVuZCwgKnNpbXBsZUxpbmVMYXlv
dXQoKSwgaWdub3JlRW1wdHlUZXh0U2VsZWN0aW9ucywgd2FzRml4ZWQpOworCiAgICAgY29uc3Rf
Y2FzdDxSZW5kZXJUZXh0Jj4oKnRoaXMpLmVuc3VyZUxpbmVCb3hlcygpOwogICAgIHJldHVybiBt
X2xpbmVCb3hlcy5hYnNvbHV0ZVF1YWRzRm9yUmFuZ2UoKnRoaXMsIHN0YXJ0LCBlbmQsIHVzZVNl
bGVjdGlvbkhlaWdodCwgaWdub3JlRW1wdHlUZXh0U2VsZWN0aW9ucywgd2FzRml4ZWQpOwogfQog
CiBQb3NpdGlvbiBSZW5kZXJUZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50
JiBwb2ludCkKIHsKLSAgICBpZiAoc2ltcGxlTGluZUxheW91dCgpICYmIHBhcmVudCgpLT5maXJz
dENoaWxkKCkgPT0gcGFyZW50KCktPmxhc3RDaGlsZCgpKSB7Ci0gICAgICAgIGF1dG8gb2Zmc2V0
ID0gU2ltcGxlTGluZUxheW91dDo6dGV4dE9mZnNldEZvclBvaW50KHBvaW50LCAqdGhpcywgKnNp
bXBsZUxpbmVMYXlvdXQoKSk7Ci0gICAgICAgIC8vIERpZCBub3QgZmluZCBhIHZhbGlkIG9mZnNl
dC4gRmFsbCBiYWNrIHRvIHRoZSBub3JtYWwgbGluZSBsYXlvdXQgYmFzZWQgUG9zaXRpb24uCi0g
ICAgICAgIGlmIChvZmZzZXQgPT0gdGV4dCgpLmxlbmd0aCgpKQotICAgICAgICAgICAgcmV0dXJu
IHBvc2l0aW9uRm9yUG9pbnQocG9pbnQsIG51bGxwdHIpLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAg
ICAgIGF1dG8gcG9zaXRpb24gPSBQb3NpdGlvbih0ZXh0Tm9kZSgpLCBvZmZzZXQpOwotICAgICAg
ICBBU1NFUlQocG9zaXRpb24gPT0gcG9zaXRpb25Gb3JQb2ludChwb2ludCwgbnVsbHB0cikuZGVl
cEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgIHJldHVybiBwb3NpdGlvbjsKLSAgICB9CiAgICAgcmV0
dXJuIHBvc2l0aW9uRm9yUG9pbnQocG9pbnQsIG51bGxwdHIpLmRlZXBFcXVpdmFsZW50KCk7CiB9
CiAKQEAgLTEwNzYsNyArMTA2NSw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6c2V0VGV4dFdpdGhPZmZz
ZXQoY29uc3QgU3RyaW5nJiBuZXdUZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnCiAgICAgaW50
IGRlbHRhID0gbmV3VGV4dC5sZW5ndGgoKSAtIHRleHQoKS5sZW5ndGgoKTsKICAgICB1bnNpZ25l
ZCBlbmQgPSBvZmZzZXQgKyBsZW5ndGg7CiAKLSAgICBtX2xpbmVzRGlydHkgPSBzaW1wbGVMaW5l
TGF5b3V0KCkgfHwgbV9saW5lQm94ZXMuZGlydHlSYW5nZSgqdGhpcywgb2Zmc2V0LCBlbmQsIGRl
bHRhKTsKKyAgICBtX2xpbmVzRGlydHkgPSBtX2xpbmVCb3hlcy5kaXJ0eVJhbmdlKCp0aGlzLCBv
ZmZzZXQsIGVuZCwgZGVsdGEpOwogCiAgICAgc2V0VGV4dChuZXdUZXh0LCBmb3JjZSB8fCBtX2xp
bmVzRGlydHkpOwogfQpAQCAtMTMwMCwxMyArMTI4OSw2IEBAIHZvaWQgUmVuZGVyVGV4dDo6ZW5z
dXJlTGluZUJveGVzKCkKICAgICBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpwYXJlbnQoKSku
ZW5zdXJlTGluZUJveGVzKCk7CiB9CiAKLWNvbnN0IFNpbXBsZUxpbmVMYXlvdXQ6OkxheW91dCog
UmVuZGVyVGV4dDo6c2ltcGxlTGluZUxheW91dCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpczxSZW5k
ZXJCbG9ja0Zsb3c+KCpwYXJlbnQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJl
dHVybiBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpwYXJlbnQoKSkuc2ltcGxlTGluZUxheW91
dCgpOwotfQotCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiBjb25zdCBM
YXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dCogUmVuZGVyVGV4dDo6bGF5b3V0Rm9ybWF0dGlu
Z0NvbnRleHRMaW5lTGF5b3V0KCkgY29uc3QKIHsKQEAgLTEzMTgsOCArMTMwMCw2IEBAIGNvbnN0
IExheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0KiBSZW5kZXJUZXh0OjpsYXlvdXRGb3JtYXR0
aW5nQ29udGV4dExpbmVMYXlvCiAKIGJvb2wgUmVuZGVyVGV4dDo6dXNlc0NvbXBsZXhMaW5lTGF5
b3V0UGF0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKHNpbXBsZUxpbmVMYXlvdXQoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogICAg
IGlmIChsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMTM4OCw3ICsxMzY4LDYgQEAgSW50UmVjdCBSZW5kZXJUZXh0OjpsaW5lc0Jv
dW5kaW5nQm94KCkgY29uc3QKIAogTGF5b3V0UmVjdCBSZW5kZXJUZXh0OjpsaW5lc1Zpc3VhbE92
ZXJmbG93Qm91bmRpbmdCb3goKSBjb25zdAogewotICAgIEFTU0VSVCghc2ltcGxlTGluZUxheW91
dCgpKTsKICAgICByZXR1cm4gbV9saW5lQm94ZXMudmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveCgq
dGhpcyk7CiB9CiAKQEAgLTE0MTEsNyArMTM5MCw2IEBAIExheW91dFJlY3QgUmVuZGVyVGV4dDo6
Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
CiBMYXlvdXRSZWN0IFJlbmRlclRleHQ6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c0ZvckxpbmVCb3hl
cyhjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGNs
aXBUb1Zpc2libGVDb250ZW50LCBWZWN0b3I8TGF5b3V0UmVjdD4qIHJlY3RzKQogewogICAgIEFT
U0VSVCghbmVlZHNMYXlvdXQoKSk7Ci0gICAgQVNTRVJUKCFzaW1wbGVMaW5lTGF5b3V0KCkpOwog
CiAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gSGlnaGxpZ2h0U3RhdGU6Ok5vbmUpCiAgICAg
ICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQu
aAppbmRleCAwMDc5MzI0OTYyZjQuLjI5MWQxOTQ3YTY3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dC5oCkBAIC0yNCw3ICsyNCw2IEBACiAKICNpbmNsdWRlICJSZW5kZXJFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dExpbmVCb3hlcy5oIgotI2luY2x1ZGUgIlNpbXBs
ZUxpbmVMYXlvdXQuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oPgpAQCAtMTY5LDcgKzE2
OCw2IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdm9pZCBlbnN1cmVMaW5lQm94ZXMoKTsKLSAg
ICBjb25zdCBTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQqIHNpbXBsZUxpbmVMYXlvdXQoKSBjb25z
dDsKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKICAgICBjb25zdCBMYXlv
dXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dCogbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5
b3V0KCkgY29uc3Q7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9TaW1wbGVMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI4ZWFiM2FjNTAy
Li4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA1MiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXQuaCIKLQotI2lu
Y2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5o
IgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIaXRUZXN0TG9j
YXRpb24uaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgotI2luY2x1ZGUgIkhpdFRlc3RS
ZXN1bHQuaCIKLSNpbmNsdWRlICJIeXBoZW5hdGlvbi5oIgotI2luY2x1ZGUgIklubGluZVRleHRC
b3guaCIKLSNpbmNsdWRlICJMaW5lV2lkdGguaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5j
bHVkZSAiUGFpbnRJbmZvLmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCi0jaW5jbHVk
ZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50ZWRGbG93
LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCi0jaW5jbHVkZSAiUmVuZGVyTXVsdGlD
b2x1bW5GbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJSZW5kZXJU
ZXh0LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKLSNpbmNsdWRlICJSZW5kZXJW
aWV3LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0
Rmxvd0NvbnRlbnRzLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oIgot
I2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oIgotI2luY2x1ZGUgIlNpbXBsZUxp
bmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlRleHQuaCIKLSNpbmNs
dWRlICJUZXh0UGFpbnRTdHlsZS5oIgotI2luY2x1ZGUgPHBhbC9Mb2dnaW5nLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBTaW1wbGVMaW5lTGF5b3V0IHsKLQotI2lmbmRlZiBO
REVCVUcKLSNkZWZpbmUgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb24sIHJl
YXNvbnMsIGluY2x1ZGVSZWFzb25zKSB7IFwKLSAgICAgICAgcmVhc29ucyB8PSByZWFzb247IFwK
LSAgICAgICAgaWYgKGluY2x1ZGVSZWFzb25zID09IEluY2x1ZGVSZWFzb25zOjpGaXJzdCkgXAot
ICAgICAgICAgICAgcmV0dXJuIHJlYXNvbnM7IFwKLSAgICB9Ci0jZWxzZQotI2RlZmluZSBTRVRf
UkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbiwgcmVhc29ucywgaW5jbHVkZVJlYXNv
bnMpIHsgXAotICAgICAgICBBU1NFUlRfVU5VU0VEKGluY2x1ZGVSZWFzb25zLCBpbmNsdWRlUmVh
c29ucyA9PSBJbmNsdWRlUmVhc29uczo6Rmlyc3QpOyBcCi0gICAgICAgIHJlYXNvbnMgfD0gcmVh
c29uOyBcCi0gICAgICAgIHJldHVybiByZWFzb25zOyBcCi0gICAgfQotI2VuZGlmCi0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IEF2b2lkYW5jZVJlYXNvbkZsYWdzIGNhblVz
ZUZvckNoYXJhY3RlcihDaGFyYWN0ZXJUeXBlLCBib29sIHRleHRJc0p1c3RpZmllZCwgSW5jbHVk
ZVJlYXNvbnMpOwotCi10ZW1wbGF0ZTw+IEF2b2lkYW5jZVJlYXNvbkZsYWdzIGNhblVzZUZvckNo
YXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIsIGJvb2wgdGV4dElzSnVzdGlmaWVkLCBJbmNsdWRlUmVh
c29ucyBpbmNsdWRlUmVhc29ucykKLXsKLSAgICBBdm9pZGFuY2VSZWFzb25GbGFncyByZWFzb25z
ID0geyB9OwotICAgIGlmICh0ZXh0SXNKdXN0aWZpZWQpIHsKLSAgICAgICAgLy8gSW5jbHVkZSBj
aGFyYWN0ZXJzIHVwIHRvIExhdGluIEV4dGVuZGVkLUIgYW5kIHNvbWUgcHVuY3R1YXRpb24gcmFu
Z2Ugd2hlbiB0ZXh0IGlzIGp1c3RpZmllZC4KLSAgICAgICAgYm9vbCBpc0xhdGluSW5jbHVkaW5n
RXh0ZW5kZWRCID0gY2hhcmFjdGVyIDw9IDB4MDFGRjsKLSAgICAgICAgYm9vbCBpc1B1bmN0dWF0
aW9uUmFuZ2UgPSBjaGFyYWN0ZXIgPj0gMHgyMDEwICYmIGNoYXJhY3RlciA8PSAweDIwMjc7Ci0g
ICAgICAgIGlmICghKGlzTGF0aW5JbmNsdWRpbmdFeHRlbmRlZEIgfHwgaXNQdW5jdHVhdGlvblJh
bmdlKSkKLSAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hh
c0p1c3RpZmllZE5vbkxhdGluVGV4dCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIH0K
LQotICAgIGlmIChVMTZfSVNfU1VSUk9HQVRFKGNoYXJhY3RlcikpCi0gICAgICAgIFNFVF9SRUFT
T05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRIYXNTdXJyb2dhdGVQYWlyLCByZWFzb25z
LCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgCi0gICAgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uID0g
dV9jaGFyRGlyZWN0aW9uKGNoYXJhY3Rlcik7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBVX1JJR0hU
X1RPX0xFRlQgfHwgZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVF9BUkFCSUMKLSAgICAgICAg
fHwgZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkcgfHwgZGlyZWN0aW9uID09
IFVfUklHSFRfVE9fTEVGVF9PVkVSUklERQotICAgICAgICB8fCBkaXJlY3Rpb24gPT0gVV9MRUZU
X1RPX1JJR0hUX0VNQkVERElORyB8fCBkaXJlY3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hUX09WRVJS
SURFCi0gICAgICAgIHx8IGRpcmVjdGlvbiA9PSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQgfHwg
ZGlyZWN0aW9uID09IFVfQk9VTkRBUllfTkVVVFJBTCkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRf
UkVUVVJOX0lGX05FRURFRChGbG93VGV4dEhhc0RpcmVjdGlvbkNoYXJhY3RlciwgcmVhc29ucywg
aW5jbHVkZVJlYXNvbnMpOwotCi0gICAgcmV0dXJuIHJlYXNvbnM7Ci19Ci0KLXRlbXBsYXRlPD4g
QXZvaWRhbmNlUmVhc29uRmxhZ3MgY2FuVXNlRm9yQ2hhcmFjdGVyKExDaGFyLCBib29sLCBJbmNs
dWRlUmVhc29ucykKLXsKLSAgICByZXR1cm4geyB9OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBBdm9pZGFuY2VSZWFzb25GbGFncyBjYW5Vc2VGb3JUZXh0
KGNvbnN0IENoYXJhY3RlclR5cGUqIHRleHQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udENh
c2NhZGUmIGZvbnRDYXNjYWRlLCBPcHRpb25hbDxmbG9hdD4gbGluZUhlaWdodENvbnN0cmFpbnQs
Ci0gICAgYm9vbCB0ZXh0SXNKdXN0aWZpZWQsIEluY2x1ZGVSZWFzb25zIGluY2x1ZGVSZWFzb25z
KQotewotICAgIEF2b2lkYW5jZVJlYXNvbkZsYWdzIHJlYXNvbnMgPSB7IH07Ci0gICAgYXV0byYg
cHJpbWFyeUZvbnQgPSBmb250Q2FzY2FkZS5wcmltYXJ5Rm9udCgpOwotICAgIGF1dG8mIGZvbnRN
ZXRyaWNzID0gcHJpbWFyeUZvbnQuZm9udE1ldHJpY3MoKTsKLSAgICBhdXRvIGF2YWlsYWJsZVNw
YWNlRm9yR2x5cGhBc2NlbnQgPSBmb250TWV0cmljcy5hc2NlbnQoKTsKLSAgICBhdXRvIGF2YWls
YWJsZVNwYWNlRm9yR2x5cGhEZXNjZW50ID0gZm9udE1ldHJpY3MuZGVzY2VudCgpOwotICAgIGlm
IChsaW5lSGVpZ2h0Q29uc3RyYWludCkgewotICAgICAgICBhdXRvIGxpbmVIZWlnaHRQYWRkaW5n
ID0gKmxpbmVIZWlnaHRDb25zdHJhaW50IC0gZm9udE1ldHJpY3MuaGVpZ2h0KCk7Ci0gICAgICAg
IGF2YWlsYWJsZVNwYWNlRm9yR2x5cGhBc2NlbnQgKz0gbGluZUhlaWdodFBhZGRpbmcgLyAyOwot
ICAgICAgICBhdmFpbGFibGVTcGFjZUZvckdseXBoRGVzY2VudCArPSBsaW5lSGVpZ2h0UGFkZGlu
ZyAvIDI7Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KSB7Ci0gICAgICAgIGF1dG8gY2hhcmFjdGVyID0gdGV4dFtpXTsKLSAgICAgICAgaWYgKEZvbnRD
YXNjYWRlOjp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gc29mdEh5cGhlbikKLSAgICAgICAgICAgIFNFVF9S
RUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRIYXNTb2Z0SHlwaGVuLCByZWFzb25z
LCBpbmNsdWRlUmVhc29ucyk7Ci0KLSAgICAgICAgYXV0byBjaGFyYWN0ZXJSZWFzb25zID0gY2Fu
VXNlRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgdGV4dElzSnVzdGlmaWVkLCBpbmNsdWRlUmVhc29u
cyk7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXJSZWFzb25zICE9IE5vUmVhc29uKQotICAgICAgICAg
ICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChjaGFyYWN0ZXJSZWFzb25zLCByZWFz
b25zLCBpbmNsdWRlUmVhc29ucyk7Ci0KLSAgICAgICAgYXV0byBnbHlwaERhdGEgPSBmb250Q2Fz
Y2FkZS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSk7Ci0gICAgICAgIGlm
ICghZ2x5cGhEYXRhLmlzVmFsaWQoKSB8fCBnbHlwaERhdGEuZm9udCAhPSAmcHJpbWFyeUZvbnQp
Ci0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dQcmltYXJ5
Rm9udElzSW5zdWZmaWNpZW50LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0KLSAgICAgICAg
aWYgKGxpbmVIZWlnaHRDb25zdHJhaW50KSB7Ci0gICAgICAgICAgICBhdXRvIGJvdW5kcyA9IHBy
aW1hcnlGb250LmJvdW5kc0ZvckdseXBoKGdseXBoRGF0YS5nbHlwaCk7Ci0gICAgICAgICAgICBp
ZiAoY2VpbGYoLWJvdW5kcy55KCkpID4gYXZhaWxhYmxlU3BhY2VGb3JHbHlwaEFzY2VudCB8fCBj
ZWlsZihib3VuZHMubWF4WSgpKSA+IGF2YWlsYWJsZVNwYWNlRm9yR2x5cGhEZXNjZW50KQotICAg
ICAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0ZvbnRIYXNP
dmVyZmxvd0dseXBoLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIHJlYXNvbnM7Ci19Ci0KLXN0YXRpYyBBdm9pZGFuY2VSZWFzb25GbGFncyBj
YW5Vc2VGb3JUZXh0KFN0cmluZ1ZpZXcgdGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnRDYXNj
YWRlLCBPcHRpb25hbDxmbG9hdD4gbGluZUhlaWdodENvbnN0cmFpbnQsIGJvb2wgdGV4dElzSnVz
dGlmaWVkLCBJbmNsdWRlUmVhc29ucyBpbmNsdWRlUmVhc29ucykKLXsKLSAgICBpZiAodGV4dC5p
czhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGNhblVzZUZvclRleHQodGV4dC5jaGFyYWN0ZXJzOCgp
LCB0ZXh0Lmxlbmd0aCgpLCBmb250Q2FzY2FkZSwgbGluZUhlaWdodENvbnN0cmFpbnQsIHRleHRJ
c0p1c3RpZmllZCwgaW5jbHVkZVJlYXNvbnMpOwotICAgIHJldHVybiBjYW5Vc2VGb3JUZXh0KHRl
eHQuY2hhcmFjdGVyczE2KCksIHRleHQubGVuZ3RoKCksIGZvbnRDYXNjYWRlLCBsaW5lSGVpZ2h0
Q29uc3RyYWludCwgdGV4dElzSnVzdGlmaWVkLCBpbmNsdWRlUmVhc29ucyk7Ci19Ci0KLXN0YXRp
YyBBdm9pZGFuY2VSZWFzb25GbGFncyBjYW5Vc2VGb3JGb250QW5kVGV4dChjb25zdCBSZW5kZXJC
bG9ja0Zsb3cmIGZsb3csIEluY2x1ZGVSZWFzb25zIGluY2x1ZGVSZWFzb25zKQotewotICAgIEF2
b2lkYW5jZVJlYXNvbkZsYWdzIHJlYXNvbnMgPSB7IH07Ci0gICAgLy8gV2UgYXNzdW1lIHRoYXQg
YWxsIGxpbmVzIGhhdmUgbWV0cmljcyBiYXNlZCBwdXJlbHkgb24gdGhlIHByaW1hcnkgZm9udC4K
LSAgICBjb25zdCBhdXRvJiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKLSAgICBhdXRvJiBmb250Q2Fz
Y2FkZSA9IHN0eWxlLmZvbnRDYXNjYWRlKCk7Ci0gICAgaWYgKGZvbnRDYXNjYWRlLnByaW1hcnlG
b250KCkuaXNJbnRlcnN0aXRpYWwoKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lG
X05FRURFRChGbG93SXNNaXNzaW5nUHJpbWFyeUZvbnQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25z
KTsKLSAgICBPcHRpb25hbDxmbG9hdD4gbGluZUhlaWdodENvbnN0cmFpbnQ7Ci0gICAgaWYgKHN0
eWxlLmxpbmVCb3hDb250YWluKCkuY29udGFpbnMoTGluZUJveENvbnRhaW46OkdseXBocykpCi0g
ICAgICAgIGxpbmVIZWlnaHRDb25zdHJhaW50ID0gbGluZUhlaWdodEZyb21GbG93KGZsb3cpLnRv
RmxvYXQoKTsKLSAgICBib29sIGZsb3dJc0p1c3RpZmllZCA9IHN0eWxlLnRleHRBbGlnbigpID09
IFRleHRBbGlnbk1vZGU6Okp1c3RpZnk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB0ZXh0UmVuZGVy
ZXIgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJUZXh0PihmbG93KSkgewotICAgICAgICAvLyBGSVhN
RTogRG8gbm90IHJldHVybiB1bnRpbCBhZnRlciBjaGVja2luZyBhbGwgY2hpbGRyZW4uCi0gICAg
ICAgIGlmICh0ZXh0UmVuZGVyZXIudGV4dCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIFNFVF9S
RUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRJc0VtcHR5LCByZWFzb25zLCBpbmNs
dWRlUmVhc29ucyk7Ci0gICAgICAgIGlmICh0ZXh0UmVuZGVyZXIuaXNDb21iaW5lVGV4dCgpKQot
ICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93VGV4dElzQ29t
YmluZVRleHQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgaWYgKHRleHRSZW5k
ZXJlci5pc0NvdW50ZXIoKSkKLSAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9O
RUVERUQoRmxvd1RleHRJc1JlbmRlckNvdW50ZXIsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsK
LSAgICAgICAgaWYgKHRleHRSZW5kZXJlci5pc1F1b3RlKCkpCi0gICAgICAgICAgICBTRVRfUkVB
U09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dUZXh0SXNSZW5kZXJRdW90ZSwgcmVhc29ucywg
aW5jbHVkZVJlYXNvbnMpOwotICAgICAgICBpZiAodGV4dFJlbmRlcmVyLmlzVGV4dEZyYWdtZW50
KCkpCi0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dUZXh0
SXNUZXh0RnJhZ21lbnQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgaWYgKHRl
eHRSZW5kZXJlci5pc1NWR0lubGluZVRleHQoKSkKLSAgICAgICAgICAgIFNFVF9SRUFTT05fQU5E
X1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRJc1NWR0lubGluZVRleHQsIHJlYXNvbnMsIGluY2x1
ZGVSZWFzb25zKTsKLSAgICAgICAgaWYgKCF0ZXh0UmVuZGVyZXIuY2FuVXNlU2ltcGxlRm9udENv
ZGVQYXRoKCkpIHsKLSAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgcGF0
aCBhdCB0aGlzIHBvaW50LiBXZSBhbHJlYWR5IGtub3cgaXQgY2FuJ3QgYmUgc2ltcGxlLgotICAg
ICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzQ29tcGxleEZv
bnRDb2RlUGF0aCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgVGV4dFJ1biBydW4oU3RyaW5nKHRleHRSZW5kZXJlci50ZXh0KCkpKTsKLSAg
ICAgICAgICAgIHJ1bi5zZXRDaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGgoZmFsc2UpOwotICAgICAg
ICAgICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkuY29kZVBhdGgocnVuKSAhPSBGb250Q2FzY2Fk
ZTo6U2ltcGxlKQotICAgICAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVE
RUQoRmxvd0hhc0NvbXBsZXhGb250Q29kZVBhdGgsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gdGV4dFJlYXNvbnMgPSBjYW5Vc2VGb3JUZXh0KHRl
eHRSZW5kZXJlci5zdHJpbmdWaWV3KCksIGZvbnRDYXNjYWRlLCBsaW5lSGVpZ2h0Q29uc3RyYWlu
dCwgZmxvd0lzSnVzdGlmaWVkLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgICAgIGlmICh0ZXh0UmVh
c29ucyAhPSBOb1JlYXNvbikKLSAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9O
RUVERUQodGV4dFJlYXNvbnMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICB9Ci0gICAg
cmV0dXJuIHJlYXNvbnM7Ci19Ci0KLXN0YXRpYyBBdm9pZGFuY2VSZWFzb25GbGFncyBjYW5Vc2VG
b3JTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEluY2x1ZGVSZWFzb25zIGluY2x1ZGVS
ZWFzb25zKQotewotICAgIEF2b2lkYW5jZVJlYXNvbkZsYWdzIHJlYXNvbnMgPSB7IH07Ci0gICAg
aWYgKHN0eWxlLnRleHRPdmVyZmxvdygpID09IFRleHRPdmVyZmxvdzo6RWxsaXBzaXMpCi0gICAg
ICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1RleHRPdmVyZmxvdywg
cmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmIChzdHlsZS50ZXh0VW5kZXJsaW5lUG9z
aXRpb24oKSAhPSBUZXh0VW5kZXJsaW5lUG9zaXRpb246OkF1dG8gfHwgIXN0eWxlLnRleHRVbmRl
cmxpbmVPZmZzZXQoKS5pc0F1dG8oKSB8fCAhc3R5bGUudGV4dERlY29yYXRpb25UaGlja25lc3Mo
KS5pc0F1dG8oKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93
SGFzVW5zdXBwb3J0ZWRVbmRlcmxpbmVEZWNvcmF0aW9uLCByZWFzb25zLCBpbmNsdWRlUmVhc29u
cyk7Ci0gICAgLy8gTm9uLXZpc2libGUgb3ZlcmZsb3cgc2hvdWxkIGJlIHByZXR0eSBlYXN5IHRv
IHN1cHBvcnQuCi0gICAgaWYgKHN0eWxlLm92ZXJmbG93WCgpICE9IE92ZXJmbG93OjpWaXNpYmxl
IHx8IHN0eWxlLm92ZXJmbG93WSgpICE9IE92ZXJmbG93OjpWaXNpYmxlKQotICAgICAgICBTRVRf
UkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNPdmVyZmxvd05vdFZpc2libGUsIHJl
YXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoIXN0eWxlLmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SXNO
b3RMVFIsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoIShzdHlsZS5saW5lQm94
Q29udGFpbigpLmNvbnRhaW5zKExpbmVCb3hDb250YWluOjpCbG9jaykpKQotICAgICAgICBTRVRf
UkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNMaW5lQm94Q29udGFpblByb3BlcnR5
LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLndyaXRpbmdNb2RlKCkg
IT0gV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRV
Uk5fSUZfTkVFREVEKEZsb3dJc05vdFRvcFRvQm90dG9tLCByZWFzb25zLCBpbmNsdWRlUmVhc29u
cyk7Ci0gICAgaWYgKHN0eWxlLmxpbmVCcmVhaygpICE9IExpbmVCcmVhazo6QXV0bykKLSAgICAg
ICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzTGluZUJyZWFrLCByZWFz
b25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLnVuaWNvZGVCaWRpKCkgIT0gVUJO
b3JtYWwpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc05v
bk5vcm1hbFVuaWNvZGVCaURpLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0
eWxlLnJ0bE9yZGVyaW5nKCkgIT0gT3JkZXI6OkxvZ2ljYWwpCi0gICAgICAgIFNFVF9SRUFTT05f
QU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1JUTE9yZGVyaW5nLCByZWFzb25zLCBpbmNsdWRl
UmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLmxpbmVBbGlnbigpICE9IExpbmVBbGlnbjo6Tm9uZSkK
LSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzTGluZUFsaWdu
RWRnZXMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoc3R5bGUubGluZVNuYXAo
KSAhPSBMaW5lU25hcDo6Tm9uZSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05F
RURFRChGbG93SGFzTGluZVNuYXAsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAo
c3R5bGUudGV4dEVtcGhhc2lzRmlsbCgpICE9IFRleHRFbXBoYXNpc0ZpbGw6OkZpbGxlZCB8fCBz
dHlsZS50ZXh0RW1waGFzaXNNYXJrKCkgIT0gVGV4dEVtcGhhc2lzTWFyazo6Tm9uZSkKLSAgICAg
ICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzVGV4dEVtcGhhc2lzRmls
bE9yTWFyaywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmIChzdHlsZS50ZXh0U2hh
ZG93KCkpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1Rl
eHRTaGFkb3csIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoc3R5bGUuaGFzUHNl
dWRvU3R5bGUoUHNldWRvSWQ6OkZpcnN0TGluZSkpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JF
VFVSTl9JRl9ORUVERUQoRmxvd0hhc1BzZXVkb0ZpcnN0TGluZSwgcmVhc29ucywgaW5jbHVkZVJl
YXNvbnMpOwotICAgIGlmIChzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6Rmlyc3RMZXR0
ZXIpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNQc2V1
ZG9GaXJzdExldHRlciwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmIChzdHlsZS5o
YXNUZXh0Q29tYmluZSgpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVE
KEZsb3dIYXNUZXh0Q29tYmluZSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmIChz
dHlsZS5iYWNrZ3JvdW5kQ2xpcCgpID09IEZpbGxCb3g6OlRleHQpCi0gICAgICAgIFNFVF9SRUFT
T05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1RleHRGaWxsQm94LCByZWFzb25zLCBpbmNs
dWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLmJvcmRlckZpdCgpID09IEJvcmRlckZpdDo6TGlu
ZXMpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc0JvcmRl
ckZpdExpbmVzLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLmxpbmVC
cmVhaygpICE9IExpbmVCcmVhazo6QXV0bykKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJO
X0lGX05FRURFRChGbG93SGFzTm9uQXV0b0xpbmVCcmVhaywgcmVhc29ucywgaW5jbHVkZVJlYXNv
bnMpOwotICAgIGlmIChzdHlsZS5uYnNwTW9kZSgpICE9IE5CU1BNb2RlOjpOb3JtYWwpCi0gICAg
ICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1dlYktpdE5CU1BNb2Rl
LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgLy8gU3BlY2lhbCBoYW5kbGluZyBvZiB0
ZXh0LXNlY3VyaXR5OmRpc2MgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBpbiB0aGUgc2ltcGxlIGxp
bmUgbGF5b3V0IGNvZGUgcGF0aC4KLSAgICAvLyBTZWUgUmVuZGVyQmxvY2s6OnVwZGF0ZVNlY3Vy
aXR5RGlzY0NoYXJhY3RlcnMuCi0gICAgaWYgKHN0eWxlLnRleHRTZWN1cml0eSgpICE9IFRleHRT
ZWN1cml0eTo6Tm9uZSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChG
bG93SGFzVGV4dFNlY3VyaXR5LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0
eWxlLmh5cGhlbnMoKSA9PSBIeXBoZW5zOjpBdXRvKSB7Ci0gICAgICAgIGF1dG8gdGV4dFJlYXNv
bnMgPSBjYW5Vc2VGb3JUZXh0KHN0eWxlLmh5cGhlblN0cmluZygpLCBzdHlsZS5mb250Q2FzY2Fk
ZSgpLCBXVEY6Om51bGxvcHQsIGZhbHNlLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgICAgIGlmICh0
ZXh0UmVhc29ucyAhPSBOb1JlYXNvbikKLSAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVS
Tl9JRl9ORUVERUQodGV4dFJlYXNvbnMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICB9
Ci0gICAgcmV0dXJuIHJlYXNvbnM7Ci19Ci0KLUF2b2lkYW5jZVJlYXNvbkZsYWdzIGNhblVzZUZv
cldpdGhSZWFzb24oY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBJbmNsdWRlUmVhc29ucyBp
bmNsdWRlUmVhc29ucykKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAgc3RhdGljIHN0ZDo6b25jZV9m
bGFnIG9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7Ci0gICAgICAg
IFBBTDo6cmVnaXN0ZXJOb3RpZnlDYWxsYmFjaygiY29tLmFwcGxlLldlYktpdC5zaG93U2ltcGxl
TGluZUxheW91dENvdmVyYWdlIiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHsgcHJpbnRTaW1wbGVM
aW5lTGF5b3V0Q292ZXJhZ2UgfSk7Ci0gICAgICAgIFBBTDo6cmVnaXN0ZXJOb3RpZnlDYWxsYmFj
aygiY29tLmFwcGxlLldlYktpdC5zaG93U2ltcGxlTGluZUxheW91dFJlYXNvbnMiLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4geyBwcmludFNpbXBsZUxpbmVMYXlvdXRCbG9ja0xpc3QgfSk7Ci0gICAg
ICAgIFBBTDo6cmVnaXN0ZXJOb3RpZnlDYWxsYmFjaygiY29tLmFwcGxlLldlYktpdC50b2dnbGVT
aW1wbGVMaW5lTGF5b3V0IiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHsgdG9nZ2xlU2ltcGxlTGlu
ZUxheW91dCB9KTsKLSAgICB9KTsKLSNlbmRpZgotICAgIEF2b2lkYW5jZVJlYXNvbkZsYWdzIHJl
YXNvbnMgPSB7IH07Ci0gICAgaWYgKCFmbG93LnNldHRpbmdzKCkuc2ltcGxlTGluZUxheW91dEVu
YWJsZWQoKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGZWF0dXJl
SXNEaXNhYmxlZCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmICghZmxvdy5wYXJl
bnQoKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzTm9Q
YXJlbnQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoIWZsb3cuZmlyc3RDaGls
ZCgpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNOb0No
aWxkLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKGZsb3cuZnJhZ21lbnRlZEZs
b3dTdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6Tm90SW5zaWRlRnJhZ21lbnRlZEZsb3cpIHsKLSAg
ICAgICAgYXV0byogZnJhZ21lbnRlZEZsb3cgPSBmbG93LmVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93
KCk7Ci0gICAgICAgIGlmICghaXM8UmVuZGVyTXVsdGlDb2x1bW5GbG93PihmcmFnbWVudGVkRmxv
dykpCi0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJc0lu
c2lkZUFOb25NdWx0aUNvbHVtblRocmVhZCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAg
ICAgICBhdXRvJiBjb2x1bW5UaHJlYWQgPSBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtbkZsb3c+
KCpmcmFnbWVudGVkRmxvdyk7Ci0gICAgICAgIGlmIChjb2x1bW5UaHJlYWQucGFyZW50KCkgIT0g
JmZsb3cudmlldygpKQotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURF
RChNdWx0aUNvbHVtbkZsb3dJc05vdFRvcExldmVsLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7
Ci0gICAgICAgIGlmIChjb2x1bW5UaHJlYWQuaGFzQ29sdW1uU3Bhbm5lcigpKQotICAgICAgICAg
ICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChNdWx0aUNvbHVtbkZsb3dIYXNDb2x1
bW5TcGFubmVyLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgICAgIGF1dG8mIHN0eWxl
ID0gZmxvdy5zdHlsZSgpOwotICAgICAgICBpZiAoc3R5bGUudmVydGljYWxBbGlnbigpICE9IFZl
cnRpY2FsQWxpZ246OkJhc2VsaW5lKQotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJO
X0lGX05FRURFRChNdWx0aUNvbHVtbkZsb3dWZXJ0aWNhbEFsaWduLCByZWFzb25zLCBpbmNsdWRl
UmVhc29ucyk7Ci0gICAgICAgIGlmIChzdHlsZS5pc0Zsb2F0aW5nKCkpCi0gICAgICAgICAgICBT
RVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKE11bHRpQ29sdW1uRmxvd0lzRmxvYXRpbmcs
IHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICB9Ci0gICAgaWYgKCFmbG93LmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVE
RUQoRmxvd0hhc0hvcml6b25hbFdyaXRpbmdNb2RlLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7
Ci0gICAgaWYgKGZsb3cuaGFzT3V0bGluZSgpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRV
Uk5fSUZfTkVFREVEKEZsb3dIYXNPdXRsaW5lLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0g
ICAgaWYgKGZsb3cuaXNSdWJ5VGV4dCgpIHx8IGZsb3cuaXNSdWJ5QmFzZSgpKQotICAgICAgICBT
RVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJc1J1YnksIHJlYXNvbnMsIGluY2x1
ZGVSZWFzb25zKTsKLSAgICBpZiAoIWZsb3cuc3R5bGUoKS5oYW5naW5nUHVuY3R1YXRpb24oKS5p
c0VtcHR5KCkpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hh
c0hhbmdpbmdQdW5jdHVhdGlvbiwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIAotICAg
IC8vIFByaW50aW5nIGRvZXMgcGFnaW5hdGlvbiB3aXRob3V0IGEgZmxvdyB0aHJlYWQuCi0gICAg
aWYgKGZsb3cuZG9jdW1lbnQoKS5wYWdpbmF0ZWQoKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRf
UkVUVVJOX0lGX05FRURFRChGbG93SXNQYWdpbmF0ZWQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25z
KTsKLSAgICBpZiAoZmxvdy5maXJzdExpbmVCbG9jaygpKQotICAgICAgICBTRVRfUkVBU09OX0FO
RF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNQc2V1ZG9GaXJzdExpbmUsIHJlYXNvbnMsIGluY2x1
ZGVSZWFzb25zKTsKLSAgICBpZiAoZmxvdy5pc0Fub255bW91c0Jsb2NrKCkgJiYgZmxvdy5wYXJl
bnQoKS0+c3R5bGUoKS50ZXh0T3ZlcmZsb3coKSA9PSBUZXh0T3ZlcmZsb3c6OkVsbGlwc2lzKQot
ICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNUZXh0T3ZlcmZs
b3csIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoZmxvdy5wYXJlbnQoKS0+aXNE
ZXByZWNhdGVkRmxleGlibGVCb3goKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lG
X05FRURFRChGbG93SXNEZXByaWNhdGVkRmxleEJveCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMp
OwotICAgIC8vIEZJWE1FOiBQbGFjZWhvbGRlcnMgZG8gc29tZXRoaW5nIHN0cmFuZ2UuCi0gICAg
aWYgKGlzPFJlbmRlclRleHRDb250cm9sPigqZmxvdy5wYXJlbnQoKSkgJiYgZG93bmNhc3Q8UmVu
ZGVyVGV4dENvbnRyb2w+KCpmbG93LnBhcmVudCgpKS50ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCku
cGxhY2Vob2xkZXJFbGVtZW50KCkpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9O
RUVERUQoRmxvd1BhcmVudElzUGxhY2Vob2xkZXJFbGVtZW50LCByZWFzb25zLCBpbmNsdWRlUmVh
c29ucyk7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudGF0aW9uIG9mIHdyYXA9aGFyZCBsb29rcyBp
bnRvIGxpbmVib3hlcy4KLSAgICBpZiAoZmxvdy5wYXJlbnQoKS0+aXNUZXh0QXJlYSgpICYmIGZs
b3cucGFyZW50KCktPmVsZW1lbnQoKS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihIVE1MTmFtZXM6OndyYXBBdHRyKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lG
X05FRURFRChGbG93UGFyZW50SXNUZXh0QXJlYVdpdGhXcmFwcGluZywgcmVhc29ucywgaW5jbHVk
ZVJlYXNvbnMpOwotICAgIC8vIFRoaXMgY3VycmVudGx5IGNvdmVycyA8YmxvY2tmbG93PiN0ZXh0
PC9ibG9ja2Zsb3c+LCA8YmxvY2tmbG93PiN0ZXh0PGJyPjwvYmxvY2tmbG93PiBhbmQgbXV0aXBs
ZSAoc2libGluZykgUmVuZGVyVGV4dCBjYXNlcy4KLSAgICAvLyBUaGUgPGJsb2NrZmxvdz48aW5s
aW5lPiN0ZXh0PC9pbmxpbmU+PC9ibG9ja2Zsb3c+IGNhc2UgaXMgYWxzbyBwb3B1bGFyIGFuZCBz
aG91bGQgYmUgcmVsYXRpdmVseSBlYXN5IHRvIGNvdmVyLgotICAgIGZvciAoY29uc3QgYXV0byog
Y2hpbGQgPSBmbG93LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7KSB7Ci0gICAgICAgIGlmIChjaGlsZC0+
c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lKQot
ICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93Q2hpbGRJc1Nl
bGVjdGVkLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgICAgIGlmIChpczxSZW5kZXJU
ZXh0PigqY2hpbGQpKSB7Ci0gICAgICAgICAgICBjb25zdCBhdXRvJiByZW5kZXJUZXh0ID0gZG93
bmNhc3Q8UmVuZGVyVGV4dD4oKmNoaWxkKTsKLSAgICAgICAgICAgIGlmIChyZW5kZXJUZXh0LnRl
eHROb2RlKCkgJiYgIXJlbmRlclRleHQuZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcigq
cmVuZGVyVGV4dC50ZXh0Tm9kZSgpKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgU0VUX1JF
QVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SW5jbHVkZXNEb2N1bWVudE1hcmtlcnMsIHJl
YXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
aXM8UmVuZGVyTGluZUJyZWFrPihjaGlsZCkgJiYgIWRvd25jYXN0PFJlbmRlckxpbmVCcmVhaz4o
KmNoaWxkKS5pc1dCUigpICYmIGNoaWxkLT5zdHlsZSgpLmNsZWFyKCkgPT0gQ2xlYXI6Ok5vbmUp
IHsKLSAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZf
TkVFREVEKEZsb3dIYXNOb25TdXBwb3J0ZWRDaGlsZCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgYXV0byBzdHlsZVJlYXNvbnMgPSBjYW5Vc2VG
b3JTdHlsZShmbG93LnN0eWxlKCksIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoc3R5bGVSZWFz
b25zICE9IE5vUmVhc29uKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVE
KHN0eWxlUmVhc29ucywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIC8vIFdlIGNhbid0
IHVzZSB0aGUgY29kZSBwYXRoIGlmIGFueSBsaW5lcyB3b3VsZCBuZWVkIHRvIGJlIHNoaWZ0ZWQg
YmVsb3cgZmxvYXRzLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZG9uJ3Qga2VlcCBwZXItbGluZSB5IGNv
b3JkaW5hdGVzLgotICAgIGlmIChmbG93LmNvbnRhaW5zRmxvYXRzKCkpIHsKLSAgICAgICAgZmxv
YXQgbWluaW11bVdpZHRoTmVlZGVkID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgp
OwotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRleHRSZW5kZXJlciA6IGNoaWxkcmVuT2ZUeXBl
PFJlbmRlclRleHQ+KGZsb3cpKSB7Ci0gICAgICAgICAgICBtaW5pbXVtV2lkdGhOZWVkZWQgPSBz
dGQ6Om1pbihtaW5pbXVtV2lkdGhOZWVkZWQsIHRleHRSZW5kZXJlci5taW5Mb2dpY2FsV2lkdGgo
KSk7Ci0KLSAgICAgICAgICAgIGZvciAoYXV0byYgZmxvYXRpbmdPYmplY3QgOiAqZmxvdy5mbG9h
dGluZ09iamVjdFNldCgpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGZsb2F0aW5nT2JqZWN0
KTsKLSAgICAgICAgICAgICAgICAvLyBpZiBhIGZsb2F0IGhhcyBhIHNoYXBlLCB3ZSBjYW5ub3Qg
dGVsbCBpZiBjb250ZW50IHdpbGwgbmVlZCB0byBiZSBzaGlmdGVkIHVudGlsIGFmdGVyIHdlIGxh
eSBpdCBvdXQsCi0gICAgICAgICAgICAgICAgLy8gc2luY2UgdGhlIGFtb3VudCBvZiBzcGFjZSBp
cyBub3QgdW5pZm9ybSBmb3IgdGhlIGhlaWdodCBvZiB0aGUgZmxvYXQuCi0gICAgICAgICAgICAg
ICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLnNoYXBlT3V0c2lkZUluZm8oKSkKLSAg
ICAgICAgICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFz
VW5zdXBwb3J0ZWRGbG9hdCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgICAgICAgICAg
ICAgIGZsb2F0IGF2YWlsYWJsZVdpZHRoID0gZmxvdy5hdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JM
aW5lKGZsb2F0aW5nT2JqZWN0LT55KCksIERvTm90SW5kZW50VGV4dCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGF2YWlsYWJsZVdpZHRoIDwgbWluaW11bVdpZHRoTmVlZGVkKQotICAgICAgICAgICAg
ICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNVbnN1cHBvcnRl
ZEZsb2F0LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgYXV0byBmb250QW5kVGV4dFJlYXNvbnMgPSBjYW5Vc2VGb3JGb250QW5k
VGV4dChmbG93LCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKGZvbnRBbmRUZXh0UmVhc29ucyAh
PSBOb1JlYXNvbikKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChmb250
QW5kVGV4dFJlYXNvbnMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICByZXR1cm4gcmVh
c29uczsKLX0KLQotYm9vbCBjYW5Vc2VGb3IoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQot
ewotICAgIHJldHVybiBjYW5Vc2VGb3JXaXRoUmVhc29uKGZsb3csIEluY2x1ZGVSZWFzb25zOjpG
aXJzdCkgPT0gTm9SZWFzb247Ci19Ci0KLWJvb2wgY2FuVXNlRm9yQWZ0ZXJTdHlsZUNoYW5nZShj
b25zdCBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrQ29udGFpbmVyLCBTdHlsZURpZmZlcmVuY2UgZGlm
ZikKLXsKLSAgICBzd2l0Y2ggKGRpZmYpIHsKLSAgICBjYXNlIFN0eWxlRGlmZmVyZW5jZTo6RXF1
YWw6Ci0gICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6OlJlY29tcG9zaXRlTGF5ZXI6Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIGNhc2UgU3R5bGVEaWZmZXJlbmNlOjpSZXBhaW50OgotICAgIGNh
c2UgU3R5bGVEaWZmZXJlbmNlOjpSZXBhaW50SWZUZXh0T3JCb3JkZXJPck91dGxpbmU6Ci0gICAg
Y2FzZSBTdHlsZURpZmZlcmVuY2U6OlJlcGFpbnRMYXllcjoKLSAgICAgICAgLy8gRklYTUU6IFdl
IGNvdWxkIGRvIGEgbW9yZSBmb2N1c2VkIHN0eWxlIGNoZWNrIGJ5IG1hdGNoaW5nIFJlbmRlcmVy
U3R5bGU6OmNoYW5nZVJlcXVpcmVzUmVwYWludCZjby4KLSAgICAgICAgcmV0dXJuIGNhblVzZUZv
clN0eWxlKGJsb2NrQ29udGFpbmVyLnN0eWxlKCksIEluY2x1ZGVSZWFzb25zOjpGaXJzdCkgPT0g
Tm9SZWFzb247Ci0gICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6OkxheW91dFBvc2l0aW9uZWRNb3Zl
bWVudE9ubHk6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgU3R5bGVEaWZmZXJlbmNl
OjpTaW1wbGlmaWVkTGF5b3V0OgotICAgIGNhc2UgU3R5bGVEaWZmZXJlbmNlOjpTaW1wbGlmaWVk
TGF5b3V0QW5kUG9zaXRpb25lZE1vdmVtZW50OgotICAgICAgICByZXR1cm4gY2FuVXNlRm9yU3R5
bGUoYmxvY2tDb250YWluZXIuc3R5bGUoKSwgSW5jbHVkZVJlYXNvbnM6OkZpcnN0KSA9PSBOb1Jl
YXNvbjsKLSAgICBjYXNlIFN0eWxlRGlmZmVyZW5jZTo6TGF5b3V0OgotICAgIGNhc2UgU3R5bGVE
aWZmZXJlbmNlOjpOZXdTdHlsZToKLSAgICAgICAgcmV0dXJuIGNhblVzZUZvcihibG9ja0NvbnRh
aW5lcik7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBjYW5V
c2VGb3IoYmxvY2tDb250YWluZXIpOwotfQotCi1zdGF0aWMgdm9pZCByZXZlcnRBbGxSdW5zT25D
dXJyZW50TGluZShMYXlvdXQ6OlJ1blZlY3RvciYgcnVucykKLXsKLSAgICB3aGlsZSAoIXJ1bnMu
aXNFbXB0eSgpICYmICFydW5zLmxhc3QoKS5pc0VuZE9mTGluZSkKLSAgICAgICAgcnVucy5yZW1v
dmVMYXN0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJldmVydFJ1bnMoTGF5b3V0OjpSdW5WZWN0b3Im
IHJ1bnMsIHVuc2lnbmVkIHBvc2l0aW9uVG9SZXZlcnRUbywgZmxvYXQgd2lkdGgpCi17Ci0gICAg
d2hpbGUgKHJ1bnMuc2l6ZSgpKSB7Ci0gICAgICAgIGF1dG8mIGxhc3RSdW4gPSBydW5zLmxhc3Qo
KTsKLSAgICAgICAgaWYgKGxhc3RSdW4uZW5kIDw9IHBvc2l0aW9uVG9SZXZlcnRUbykKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBpZiAobGFzdFJ1bi5zdGFydCA+PSBwb3NpdGlvblRvUmV2
ZXJ0VG8pIHsKLSAgICAgICAgICAgIC8vIFJldmVydCB0aGlzIHJ1biBjb21wbGV0ZWx5LgotICAg
ICAgICAgICAgd2lkdGggLT0gKGxhc3RSdW4ubG9naWNhbFJpZ2h0IC0gbGFzdFJ1bi5sb2dpY2Fs
TGVmdCk7Ci0gICAgICAgICAgICBydW5zLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGxhc3RSdW4ubG9naWNhbFJpZ2h0IC09IHdpZHRoOwotICAgICAgICAgICAg
d2lkdGggPSAwOwotICAgICAgICAgICAgbGFzdFJ1bi5lbmQgPSBwb3NpdGlvblRvUmV2ZXJ0VG87
Ci0gICAgICAgICAgICAvLyBQYXJ0aWFsIHJlbW92YWwuCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotY2xhc3MgTGluZVN0YXRlIHsKLXB1YmxpYzoKLSAgICB2b2lk
IHNldEF2YWlsYWJsZVdpZHRoKGZsb2F0IHdpZHRoKSB7IG1fYXZhaWxhYmxlV2lkdGggPSB3aWR0
aDsgfQotICAgIHZvaWQgc2V0Q29sbGFwZWRXaGl0ZXNwYWNlV2lkdGgoZmxvYXQgd2lkdGgpIHsg
bV9jb2xsYXBzZWRXaGl0ZXNwYWNlV2lkdGggPSB3aWR0aDsgfQotICAgIHZvaWQgc2V0TG9naWNh
bExlZnRPZmZzZXQoZmxvYXQgb2Zmc2V0KSB7IG1fbG9naWNhbExlZnRPZmZzZXQgPSBvZmZzZXQ7
IH0KLSAgICB2b2lkIHNldE92ZXJmbG93ZWRGcmFnbWVudChjb25zdCBUZXh0RnJhZ21lbnRJdGVy
YXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudCkgeyBtX292ZXJmbG93ZWRGcmFnbWVudCA9IGZy
YWdtZW50OyB9Ci0gICAgdm9pZCBzZXROZWVkc0FsbEZyYWdtZW50cygpCi0gICAgewotICAgICAg
ICBBU1NFUlQoIW1fZnJhZ21lbnRzKTsKLSAgICAgICAgbV9mcmFnbWVudHMuZW1wbGFjZSgpOwot
ICAgIH0KLSAgICB2b2lkIHNldEh5cGhlbmF0aW9uRGlzYWJsZWQoKSB7IG1faHlwaGVuYXRpb25E
aXNhYmxlZCA9IHRydWU7IH0KLSAgICBib29sIGlzSHlwaGVuYXRpb25EaXNhYmxlZCgpIGNvbnN0
IHsgcmV0dXJuIG1faHlwaGVuYXRpb25EaXNhYmxlZDsgfQotCi0gICAgZmxvYXQgYXZhaWxhYmxl
V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2F2YWlsYWJsZVdpZHRoOyB9Ci0gICAgZmxvYXQgbG9n
aWNhbExlZnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxMZWZ0T2Zmc2V0OyB9Ci0g
ICAgY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCYgb3ZlcmZsb3dlZEZy
YWdtZW50KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvd2VkRnJhZ21lbnQ7IH0KLSAgICBib29s
IGhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEZyYWdtZW50LnR5
cGUoKSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlICYm
IG1fbGFzdEZyYWdtZW50Lmxlbmd0aCgpID4gMDsgfQotICAgIGJvb2wgaGFzV2hpdGVzcGFjZUZy
YWdtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFdoaXRlc3BhY2VGcmFnbWVudCAhPSBXVEY6
Om51bGxvcHQ7IH0KLSAgICBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IGxhc3RG
cmFnbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEZyYWdtZW50OyB9Ci0gICAgYm9vbCBpc1do
aXRlc3BhY2VPbmx5KCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCAm
JiBtX3J1bnNXaWR0aCA9PSBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoOyB9Ci0gICAgYm9vbCBm
aXRzKGZsb2F0IGV4dHJhKSBjb25zdCB7IHJldHVybiBtX2F2YWlsYWJsZVdpZHRoID49IG1fcnVu
c1dpZHRoICsgZXh0cmE7IH0KLSAgICBib29sIGZpcnN0Q2hhcmFjdGVyRml0cygpIGNvbnN0IHsg
cmV0dXJuIG1fZmlyc3RDaGFyYWN0ZXJGaXRzOyB9Ci0gICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX3J1bnNXaWR0aDsgfQotICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2ZyYWdtZW50cyk7Ci0gICAgICAgIC8vIGxpbmVicmVh
ayBydW5zIGFyZSBzcGVjaWFsLgotICAgICAgICBpZiAoZnJvbSA9PSB0bykKLSAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfcGFpcigwLCBmYWxzZSk7Ci0gICAgICAgIHVuc2lnbmVkIGV4cGFu
c2lvbk9wcG9ydHVuaXR5Q291bnQgPSAwOwotICAgICAgICBhdXRvIHByZXZpb3VzRnJhZ21lbnRU
eXBlID0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6Q29udGVudEVuZDsKLSAg
ICAgICAgZm9yIChjb25zdCBhdXRvJiBmcmFnbWVudCA6ICptX2ZyYWdtZW50cykgewotICAgICAg
ICAgICAgaWYgKGZyYWdtZW50LmVuZCgpIDw9IGZyb20pCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBhdXRvIGN1cnJlbnRGcmFnbWVudFR5cGUgPSBmcmFnbWVudC50eXBl
KCk7Ci0gICAgICAgICAgICBhdXRvIGV4cGFuc2lvbk9wcG9ydHVuaXR5ID0gdGhpcy0+ZXhwYW5z
aW9uT3Bwb3J0dW5pdHkoY3VycmVudEZyYWdtZW50VHlwZSwgcHJldmlvdXNGcmFnbWVudFR5cGUp
OwotICAgICAgICAgICAgaWYgKGV4cGFuc2lvbk9wcG9ydHVuaXR5KQotICAgICAgICAgICAgICAg
ICsrZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsKLSAgICAgICAgICAgIHByZXZpb3VzRnJhZ21l
bnRUeXBlID0gY3VycmVudEZyYWdtZW50VHlwZTsKLSAgICAgICAgICAgIGlmIChmcmFnbWVudC5l
bmQoKSA+PSB0bykKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudCwgZXhwYW5zaW9uT3Bwb3J0dW5pdHkpOwotICAgICAgICB9Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIoZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCwgZmFsc2UpOwotICAgIH0KLQotICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIW1fbGFzdEZyYWdtZW50LmlzVmFs
aWQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIW1fbGFzdENvbXBs
ZXRlRnJhZ21lbnQuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICByZXR1cm4gbV9sYXN0RnJhZ21lbnQub3ZlcmxhcHNUb05leHRSZW5kZXJlcigpOwotICAgIH0K
LQotICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZW5kUG9zaXRpb25Gb3JDb2xsYXBzZWRGcmFn
bWVudChjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBmcmFnbWVudC5pc0NvbGxhcHNlZCgpID8gZnJhZ21lbnQu
c3RhcnQoKSArIDEgOiBmcmFnbWVudC5lbmQoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGVuZEZy
YWdtZW50QW5kQ3JlYXRlUnVuSWZOZWVkZWQoY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRl
eHRGcmFnbWVudCYgZnJhZ21lbnQsIExheW91dDo6UnVuVmVjdG9yJiBydW5zKQotICAgIHsKLSAg
ICAgICAgLy8gQWRqdXN0IGVuZCBwb3NpdGlvbiB3aGlsZSBjb2xsYXBzaW5nLgotICAgICAgICB1
bnNpZ25lZCBlbmRQb3NpdGlvbiA9IGVuZFBvc2l0aW9uRm9yQ29sbGFwc2VkRnJhZ21lbnQoZnJh
Z21lbnQpOwotICAgICAgICAvLyBOZXcgbGluZSBuZWVkcyBuZXcgcnVuLgotICAgICAgICBpZiAo
IW1fcnVuc1dpZHRoKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fdW5jb21wbGV0ZWRXaWR0aCk7
Ci0gICAgICAgICAgICBydW5zLmFwcGVuZChSdW4oZnJhZ21lbnQuc3RhcnQoKSwgZW5kUG9zaXRp
b24sIG1fcnVuc1dpZHRoLCBtX3J1bnNXaWR0aCArIGZyYWdtZW50LndpZHRoKCksIGZhbHNlLCBm
cmFnbWVudC5oYXNIeXBoZW4oKSwgZnJhZ21lbnQuaXNMaW5lQnJlYWsoKSkpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgLy8gQWR2YW5jZSBsYXN0IGNvbXBsZXRlZCBmcmFnbWVudCB3
aGVuIHRoZSBwcmV2aW91cyBmcmFnbWVudCBpcyBhbGwgc2V0IChpbmNsdWRpbmcgbXVsdGlwbGUg
cGFydHMgYWNyb3NzIHJlbmRlcmVycykKLSAgICAgICAgICAgIGlmICgobV9sYXN0RnJhZ21lbnQu
dHlwZSgpICE9IGZyYWdtZW50LnR5cGUoKSkgfHwgIW1fbGFzdEZyYWdtZW50Lm92ZXJsYXBzVG9O
ZXh0UmVuZGVyZXIoKSkgewotICAgICAgICAgICAgICAgIG1fbGFzdENvbXBsZXRlRnJhZ21lbnQg
PSBtX2xhc3RGcmFnbWVudDsKLSAgICAgICAgICAgICAgICBtX3VuY29tcGxldGVkV2lkdGggPSBm
cmFnbWVudC53aWR0aCgpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV91
bmNvbXBsZXRlZFdpZHRoICs9IGZyYWdtZW50LndpZHRoKCk7Ci0gICAgICAgICAgICAvLyBDb2xs
YXBzZSBuZWlnaGJvdXJpbmcgd2hpdGVzcGFjZSwgaWYgdGhleSBhcmUgYWNyb3NzIG11bHRpcGxl
IHJlbmRlcmVycyBhbmQgYXJlIG5vdCBjb2xsYXBzZWQgeWV0LgotICAgICAgICAgICAgaWYgKG1f
bGFzdEZyYWdtZW50LmlzQ29sbGFwc2libGUoKSAmJiBmcmFnbWVudC5pc0NvbGxhcHNpYmxlKCkp
IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9sYXN0RnJhZ21lbnQuaXNMYXN0SW5SZW5kZXJl
cigpKTsKLSAgICAgICAgICAgICAgICBpZiAoIW1fbGFzdEZyYWdtZW50LmlzQ29sbGFwc2VkKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTGluZSB3aWR0aCBuZWVkcyB0byBiZSBhZGp1c3Rl
ZCBzbyB0aGF0IG5vdyBpdCB0YWtlcyBjb2xsYXBzaW5nIGludG8gY29uc2lkZXJhdGlvbi4KLSAg
ICAgICAgICAgICAgICAgICAgbV9ydW5zV2lkdGggLT0gKG1fbGFzdEZyYWdtZW50LndpZHRoKCkg
LSBtX2NvbGxhcHNlZFdoaXRlc3BhY2VXaWR0aCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaXMgY29sbGFwc2VkIGNvbXBsZXRlbHkuIE5vIHJ1
biBpcyBuZWVkZWQuCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgUnVuJiBsYXN0UnVuID0gcnVucy5sYXN0KCk7Ci0gICAgICAgICAgICBpZiAobV9s
YXN0RnJhZ21lbnQuaXNMYXN0SW5SZW5kZXJlcigpIHx8IG1fbGFzdEZyYWdtZW50LmlzQ29sbGFw
c2VkKCkgfHwgZnJhZ21lbnQuaXNMaW5lQnJlYWsoKSB8fCBsYXN0UnVuLmlzTGluZUJyZWFrKQot
ICAgICAgICAgICAgICAgIHJ1bnMuYXBwZW5kKFJ1bihmcmFnbWVudC5zdGFydCgpLCBlbmRQb3Np
dGlvbiwgbV9ydW5zV2lkdGgsIG1fcnVuc1dpZHRoICsgZnJhZ21lbnQud2lkdGgoKSwgZmFsc2Us
IGZyYWdtZW50Lmhhc0h5cGhlbigpLCBmcmFnbWVudC5pc0xpbmVCcmVhaygpKSk7Ci0gICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBsYXN0UnVuLmVuZCA9IGVuZFBvc2l0aW9uOwot
ICAgICAgICAgICAgICAgIGxhc3RSdW4ubG9naWNhbFJpZ2h0ICs9IGZyYWdtZW50LndpZHRoKCk7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFsYXN0UnVuLmhhc0h5cGhlbik7Ci0gICAgICAgICAg
ICAgICAgbGFzdFJ1bi5oYXNIeXBoZW4gPSBmcmFnbWVudC5oYXNIeXBoZW4oKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBtX3J1bnNXaWR0aCArPSBmcmFnbWVudC53aWR0aCgp
OwotICAgICAgICBtX2xhc3RGcmFnbWVudCA9IGZyYWdtZW50OwotICAgICAgICBpZiAobV9mcmFn
bWVudHMpCi0gICAgICAgICAgICAoKm1fZnJhZ21lbnRzKS5hcHBlbmQoZnJhZ21lbnQpOwotCi0g
ICAgICAgIGlmIChmcmFnbWVudC50eXBlKCkgPT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRG
cmFnbWVudDo6V2hpdGVzcGFjZSkgewotICAgICAgICAgICAgbV90cmFpbGluZ1doaXRlc3BhY2VX
aWR0aCArPSBmcmFnbWVudC53aWR0aCgpOwotICAgICAgICAgICAgbV9sYXN0V2hpdGVzcGFjZUZy
YWdtZW50ID0gZnJhZ21lbnQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX3RyYWls
aW5nV2hpdGVzcGFjZVdpZHRoID0gMDsKLSAgICAgICAgICAgIG1fbGFzdE5vbldoaXRlc3BhY2VG
cmFnbWVudCA9IGZyYWdtZW50OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtX2ZpcnN0Q2hh
cmFjdGVyRml0cykKLSAgICAgICAgICAgIG1fZmlyc3RDaGFyYWN0ZXJGaXRzID0gZnJhZ21lbnQu
c3RhcnQoKSArIDEgPiBlbmRQb3NpdGlvbiB8fCBtX3J1bnNXaWR0aCA8PSBtX2F2YWlsYWJsZVdp
ZHRoOwotICAgIH0KLQotICAgIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgcmV2
ZXJ0VG9MYXN0Q29tcGxldGVGcmFnbWVudChMYXlvdXQ6OlJ1blZlY3RvciYgcnVucykKLSAgICB7
Ci0gICAgICAgIGlmICghbV91bmNvbXBsZXRlZFdpZHRoKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
bV9sYXN0RnJhZ21lbnQgPT0gbV9sYXN0Q29tcGxldGVGcmFnbWVudCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbV9sYXN0RnJhZ21lbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKG1fbGFzdEZy
YWdtZW50LmlzVmFsaWQoKSk7Ci0gICAgICAgIG1fcnVuc1dpZHRoIC09IG1fdW5jb21wbGV0ZWRX
aWR0aDsKLSAgICAgICAgcmV2ZXJ0UnVucyhydW5zLCBlbmRQb3NpdGlvbkZvckNvbGxhcHNlZEZy
YWdtZW50KG1fbGFzdENvbXBsZXRlRnJhZ21lbnQpLCBtX3VuY29tcGxldGVkV2lkdGgpOwotICAg
ICAgICBtX3VuY29tcGxldGVkV2lkdGggPSAwOwotICAgICAgICBBU1NFUlQobV9sYXN0Q29tcGxl
dGVGcmFnbWVudC5pc1ZhbGlkKCkpOwotICAgICAgICByZXR1cm4gbV9sYXN0Q29tcGxldGVGcmFn
bWVudDsKLSAgICB9Ci0KLSAgICB2b2lkIHJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZShMYXlvdXQ6
OlJ1blZlY3RvciYgcnVucykKLSAgICB7Ci0gICAgICAgIGlmICghaGFzVHJhaWxpbmdXaGl0ZXNw
YWNlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChtX2xhc3ROb25XaGl0ZXNw
YWNlRnJhZ21lbnQpIHsKLSAgICAgICAgICAgIGF1dG8gbmVlZHNSZXZlcnRpbmcgPSBtX2xhc3RO
b25XaGl0ZXNwYWNlRnJhZ21lbnQtPmVuZCgpICE9IG1fbGFzdEZyYWdtZW50LmVuZCgpOwotICAg
ICAgICAgICAgLy8gVHJhaWxpbmcgd2hpdGVzcGFjZSBmcmFnbWVudCBtaWdodCBhY3R1YWxseSBo
YXZlIHplcm8gbGVuZ3RoLgotICAgICAgICAgICAgQVNTRVJUKG5lZWRzUmV2ZXJ0aW5nIHx8ICFt
X3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKTsKLSAgICAgICAgICAgIGlmIChuZWVkc1JldmVydGlu
ZykgewotICAgICAgICAgICAgICAgIHJldmVydFJ1bnMocnVucywgbV9sYXN0Tm9uV2hpdGVzcGFj
ZUZyYWdtZW50LT5lbmQoKSwgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCk7Ci0gICAgICAgICAg
ICAgICAgbV9ydW5zV2lkdGggLT0gbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggPSAwOwotICAgICAg
ICAgICAgbV9sYXN0RnJhZ21lbnQgPSAqbV9sYXN0Tm9uV2hpdGVzcGFjZUZyYWdtZW50OwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIFRoaXMgbGluZSBpcyBhbGwg
d2hpdGVzcGFjZS4KLSAgICAgICAgcmV2ZXJ0QWxsUnVuc09uQ3VycmVudExpbmUocnVucyk7Ci0g
ICAgICAgIG1fcnVuc1dpZHRoID0gMDsKLSAgICAgICAgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0
aCA9IDA7Ci0gICAgICAgIC8vIEZJWE1FOiBNYWtlIG1fbGFzdEZyYWdtZW50IG9wdGlvbmFsLgot
ICAgICAgICBtX2xhc3RGcmFnbWVudCA9IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21l
bnQoKTsKLSAgICB9Ci0KLSAgICBmbG9hdCB0cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGg7IH0KLQotcHJpdmF0ZToKLSAgICBi
b29sIGV4cGFuc2lvbk9wcG9ydHVuaXR5KFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21l
bnQ6OlR5cGUgY3VycmVudEZyYWdtZW50VHlwZSwgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRG
cmFnbWVudDo6VHlwZSBwcmV2aW91c0ZyYWdtZW50VHlwZSkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiAoY3VycmVudEZyYWdtZW50VHlwZSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4
dEZyYWdtZW50OjpXaGl0ZXNwYWNlCi0gICAgICAgICAgICB8fCAoY3VycmVudEZyYWdtZW50VHlw
ZSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpOb25XaGl0ZXNwYWNlICYm
IHByZXZpb3VzRnJhZ21lbnRUeXBlID09IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21l
bnQ6Ok5vbldoaXRlc3BhY2UpKTsKLSAgICB9Ci0KLSAgICBmbG9hdCBtX2F2YWlsYWJsZVdpZHRo
IHsgMCB9OwotICAgIGZsb2F0IG1fbG9naWNhbExlZnRPZmZzZXQgeyAwIH07Ci0gICAgZmxvYXQg
bV9ydW5zV2lkdGggeyAwIH07Ci0gICAgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVu
dCBtX292ZXJmbG93ZWRGcmFnbWVudDsKLSAgICBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZy
YWdtZW50IG1fbGFzdEZyYWdtZW50OwotICAgIE9wdGlvbmFsPFRleHRGcmFnbWVudEl0ZXJhdG9y
OjpUZXh0RnJhZ21lbnQ+IG1fbGFzdE5vbldoaXRlc3BhY2VGcmFnbWVudDsKLSAgICBPcHRpb25h
bDxUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50PiBtX2xhc3RXaGl0ZXNwYWNlRnJh
Z21lbnQ7Ci0gICAgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCBtX2xhc3RDb21w
bGV0ZUZyYWdtZW50OwotICAgIGZsb2F0IG1fdW5jb21wbGV0ZWRXaWR0aCB7IDAgfTsKLSAgICBm
bG9hdCBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoIHsgMCB9OyAvLyBVc2UgdGhpcyB0byByZW1v
dmUgdHJhaWxpbmcgd2hpdGVzcGFjZSB3aXRob3V0IHJlLW1lc3VyaW5nIHRoZSB0ZXh0LgotICAg
IGZsb2F0IG1fY29sbGFwc2VkV2hpdGVzcGFjZVdpZHRoIHsgMCB9OwotICAgIC8vIEhhdmluZyBv
bmUgY2hhcmFjdGVyIG9uIHRoZSBsaW5lIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gaXQgYWN0
dWFsbHkgZml0cy4KLSAgICAvLyBGaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGZpcnN0IGZyYWdtZW50
IG1pZ2h0IGJlIGZvcmNlZCBvbiB0byB0aGUgY3VycmVudCBsaW5lIGV2ZW4gaWYgaXQgZG9lcyBu
b3QgZml0LgotICAgIGJvb2wgbV9maXJzdENoYXJhY3RlckZpdHMgeyBmYWxzZSB9OwotICAgIGJv
b2wgbV9oeXBoZW5hdGlvbkRpc2FibGVkIHsgZmFsc2UgfTsKLSAgICBPcHRpb25hbDxWZWN0b3I8
VGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCwgMzA+PiBtX2ZyYWdtZW50czsKLX07
Ci0KLXN0YXRpYyBmbG9hdCBjb21wdXRlTGluZUxlZnQoY29uc3QgTGluZVN0YXRlJiBsaW5lLCBU
ZXh0QWxpZ25Nb2RlIHRleHRBbGlnbiwgZmxvYXQmIGhhbmdpbmdXaGl0ZXNwYWNlV2lkdGgpCi17
Ci0gICAgZmxvYXQgdG90YWxXaWR0aCA9IGxpbmUud2lkdGgoKSAtIGhhbmdpbmdXaGl0ZXNwYWNl
V2lkdGg7Ci0gICAgZmxvYXQgcmVtYWluaW5nV2lkdGggPSBsaW5lLmF2YWlsYWJsZVdpZHRoKCkg
LSB0b3RhbFdpZHRoOwotICAgIGZsb2F0IGxlZnQgPSBsaW5lLmxvZ2ljYWxMZWZ0T2Zmc2V0KCk7
Ci0gICAgc3dpdGNoICh0ZXh0QWxpZ24pIHsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkxlZnQ6
Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgotICAgIGNhc2UgVGV4dEFsaWdu
TW9kZTo6U3RhcnQ6Ci0gICAgICAgIGhhbmdpbmdXaGl0ZXNwYWNlV2lkdGggPSBzdGQ6Om1heCgw
LmYsIHN0ZDo6bWluKGhhbmdpbmdXaGl0ZXNwYWNlV2lkdGgsIHJlbWFpbmluZ1dpZHRoKSk7Ci0g
ICAgICAgIHJldHVybiBsZWZ0OwotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6Ci0gICAg
Y2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodDoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6
OkVuZDoKLSAgICAgICAgaGFuZ2luZ1doaXRlc3BhY2VXaWR0aCA9IDA7Ci0gICAgICAgIHJldHVy
biBsZWZ0ICsgc3RkOjptYXg8ZmxvYXQ+KHJlbWFpbmluZ1dpZHRoLCAwKTsKLSAgICBjYXNlIFRl
eHRBbGlnbk1vZGU6OkNlbnRlcjoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdENlbnRl
cjoKLSAgICAgICAgaGFuZ2luZ1doaXRlc3BhY2VXaWR0aCA9IHN0ZDo6bWF4KDAuZiwgc3RkOjpt
aW4oaGFuZ2luZ1doaXRlc3BhY2VXaWR0aCwgKHJlbWFpbmluZ1dpZHRoICsgMSkgLyAyKSk7Ci0g
ICAgICAgIHJldHVybiBsZWZ0ICsgc3RkOjptYXg8ZmxvYXQ+KHJlbWFpbmluZ1dpZHRoIC8gMiwg
MCk7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OgotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgYm9vbCBwcmVXcmFwKGNvbnN0IFRleHRG
cmFnbWVudEl0ZXJhdG9yOjpTdHlsZSYgc3R5bGUpCi17Ci0gICAgcmV0dXJuIHN0eWxlLndyYXBM
aW5lcyAmJiAhc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlICYmICFzdHlsZS5icmVha1NwYWNlczsK
LX0KLQotc3RhdGljIHZvaWQgdXBkYXRlTGluZUNvbnN0cmFpbnMoY29uc3QgUmVuZGVyQmxvY2tG
bG93JiBmbG93LCBMaW5lU3RhdGUmIGxpbmUsIGNvbnN0IExpbmVTdGF0ZSYgcHJldmlvdXNMaW5l
LCB1bnNpZ25lZCYgbnVtYmVyT2ZQcmVjZWRpbmdMaW5lc1dpdGhIeXBoZW4sIGNvbnN0IFRleHRG
cmFnbWVudEl0ZXJhdG9yOjpTdHlsZSYgc3R5bGUsIGJvb2wgaXNGaXJzdExpbmUpCi17Ci0gICAg
Ym9vbCBzaG91bGRBcHBseVRleHRJbmRlbnQgPSAhZmxvdy5pc0Fub255bW91cygpIHx8IGZsb3cu
cGFyZW50KCktPmZpcnN0Q2hpbGQoKSA9PSAmZmxvdzsKLSAgICBMYXlvdXRVbml0IGhlaWdodCA9
IGZsb3cubG9naWNhbEhlaWdodCgpOwotICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IGZs
b3cubWluTGluZUhlaWdodEZvclJlcGxhY2VkUmVuZGVyZXIoZmFsc2UsIDApOwotICAgIGxpbmUu
c2V0TG9naWNhbExlZnRPZmZzZXQoZmxvdy5sb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoaGVpZ2h0
LCBEb05vdEluZGVudFRleHQsIGxvZ2ljYWxIZWlnaHQpICsgKHNob3VsZEFwcGx5VGV4dEluZGVu
dCAmJiBpc0ZpcnN0TGluZSA/IGZsb3cudGV4dEluZGVudE9mZnNldCgpIDogMF9sdSkpOwotICAg
IGZsb2F0IGxvZ2ljYWxSaWdodE9mZnNldCA9IGZsb3cubG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGlu
ZShoZWlnaHQsIERvTm90SW5kZW50VGV4dCwgbG9naWNhbEhlaWdodCk7Ci0gICAgbGluZS5zZXRB
dmFpbGFibGVXaWR0aChzdGQ6Om1heDxmbG9hdD4oMCwgbG9naWNhbFJpZ2h0T2Zmc2V0IC0gbGlu
ZS5sb2dpY2FsTGVmdE9mZnNldCgpKSk7Ci0gICAgaWYgKHN0eWxlLnRleHRBbGlnbiA9PSBUZXh0
QWxpZ25Nb2RlOjpKdXN0aWZ5KQotICAgICAgICBsaW5lLnNldE5lZWRzQWxsRnJhZ21lbnRzKCk7
Ci0gICAgbnVtYmVyT2ZQcmVjZWRpbmdMaW5lc1dpdGhIeXBoZW4gPSAocHJldmlvdXNMaW5lLmlz
RW1wdHkoKSB8fCAhcHJldmlvdXNMaW5lLmxhc3RGcmFnbWVudCgpLmhhc0h5cGhlbigpKSA/IDAg
OiBudW1iZXJPZlByZWNlZGluZ0xpbmVzV2l0aEh5cGhlbiArIDE7Ci0gICAgaWYgKHN0eWxlLmh5
cGhlbkxpbWl0TGluZXMgJiYgbnVtYmVyT2ZQcmVjZWRpbmdMaW5lc1dpdGhIeXBoZW4gPj0gKnN0
eWxlLmh5cGhlbkxpbWl0TGluZXMpCi0gICAgICAgIGxpbmUuc2V0SHlwaGVuYXRpb25EaXNhYmxl
ZCgpOwotICAgIGxpbmUuc2V0Q29sbGFwZWRXaGl0ZXNwYWNlV2lkdGgoc3R5bGUuZm9udC5zcGFj
ZVdpZHRoKCkgKyBzdHlsZS53b3JkU3BhY2luZyk7Ci19Ci0KLXN0cnVjdCBTcGxpdEZyYWdtZW50
RGF0YSB7Ci0gICAgdW5zaWduZWQgcG9zaXRpb247Ci0gICAgZmxvYXQgd2lkdGg7Ci19Owotc3Rh
dGljIE9wdGlvbmFsPHVuc2lnbmVkPiBoeXBoZW5Qb3NpdGlvbkZvckZyYWdtZW50KFNwbGl0RnJh
Z21lbnREYXRhIHNwbGl0RGF0YSwgY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFn
bWVudCYgZnJhZ21lbnRUb1NwbGl0LAotICAgIGNvbnN0IExpbmVTdGF0ZSYgbGluZSwgY29uc3Qg
VGV4dEZyYWdtZW50SXRlcmF0b3ImIHRleHRGcmFnbWVudEl0ZXJhdG9yLCBmbG9hdCBhdmFpbGFi
bGVXaWR0aCkKLXsKLSAgICBhdXRvJiBzdHlsZSA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLnN0eWxl
KCk7Ci0gICAgaWYgKCFzdHlsZS5zaG91bGRIeXBoZW5hdGUgfHwgbGluZS5pc0h5cGhlbmF0aW9u
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIC8vIEZJWE1F
OiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3Igd2Via2l0Lm9yZy9iLzE2OTYxMy4gU2VlIG1heFBy
ZWZpeFdpZHRoIGNvbXB1dGF0aW9uIGluIHRyeUh5cGhlbmF0aW5nKCkuCi0gICAgLy8gSXQgZG9l
cyBub3Qgd29yayBwcm9wZXJseSB3aXRoIG5vbi1jb2xsYXBzZWQgbGVhZGluZyB0YWJzIHdoZW4g
Zm9udCBpcyBlbmxhcmdlZC4KLSAgICBhdXRvIGFkanVzdGVkQXZhaWxhYmxlV2lkdGggPSBhdmFp
bGFibGVXaWR0aCAtIHN0eWxlLmh5cGhlblN0cmluZ1dpZHRoOwotICAgIGlmICghbGluZS5pc0Vt
cHR5KCkpCi0gICAgICAgIGFkanVzdGVkQXZhaWxhYmxlV2lkdGggKz0gc3R5bGUuZm9udC5zcGFj
ZVdpZHRoKCk7Ci0gICAgaWYgKCFlbm91Z2hXaWR0aEZvckh5cGhlbmF0aW9uKGFkanVzdGVkQXZh
aWxhYmxlV2lkdGgsIHN0eWxlLmZvbnQucGl4ZWxTaXplKCkpKQotICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotCi0gICAgLy8gV2UgbWlnaHQgYmUgYWJsZSB0byBmaXQgdGhlIGh5cGhlbiBh
dCB0aGUgc3BsaXQgcG9zaXRpb24uCi0gICAgYXV0byBzcGxpdFBvc2l0aW9uV2l0aEh5cGhlbiA9
IHNwbGl0RGF0YS5wb3NpdGlvbjsKLSAgICAvLyBGaW5kIGEgc3BsaXR0aW5nIHBvc2l0aW9uIHdo
ZXJlIGh5cGhlbiBzdXJlbHkgZml0cy4KLSAgICB1bnNpZ25lZCBzdGFydCA9IGZyYWdtZW50VG9T
cGxpdC5zdGFydCgpOwotICAgIGF1dG8gbGVmdFNpZGVXaWR0aCA9IHNwbGl0RGF0YS53aWR0aDsK
LSAgICB3aGlsZSAobGVmdFNpZGVXaWR0aCArIHN0eWxlLmh5cGhlblN0cmluZ1dpZHRoID4gYXZh
aWxhYmxlV2lkdGgpIHsKLSAgICAgICAgaWYgKC0tc3BsaXRQb3NpdGlvbldpdGhIeXBoZW4gPD0g
c3RhcnQpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OyAvLyBObyBzcGFjZSBmb3Ig
aHlwaGVuLgotICAgICAgICBsZWZ0U2lkZVdpZHRoIC09IHRleHRGcmFnbWVudEl0ZXJhdG9yLnRl
eHRXaWR0aChzcGxpdFBvc2l0aW9uV2l0aEh5cGhlbiwgc3BsaXRQb3NpdGlvbldpdGhIeXBoZW4g
KyAxLCAwKTsKLSAgICB9Ci0gICAgQVNTRVJUKHNwbGl0UG9zaXRpb25XaXRoSHlwaGVuID4gc3Rh
cnQpOwotICAgIHJldHVybiB0ZXh0RnJhZ21lbnRJdGVyYXRvci5sYXN0SHlwaGVuUG9zaXRpb24o
ZnJhZ21lbnRUb1NwbGl0LCBzcGxpdFBvc2l0aW9uV2l0aEh5cGhlbiArIDEpOwotfQotCi1zdGF0
aWMgU3BsaXRGcmFnbWVudERhdGEgc3BsaXQoY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRl
eHRGcmFnbWVudCYgZnJhZ21lbnQsIGZsb2F0IGF2YWlsYWJsZVdpZHRoLAotICAgIGNvbnN0IFRl
eHRGcmFnbWVudEl0ZXJhdG9yJiB0ZXh0RnJhZ21lbnRJdGVyYXRvcikKLXsKLSAgICBBU1NFUlQo
YXZhaWxhYmxlV2lkdGggPj0gMCk7Ci0gICAgYXV0byBsZWZ0ID0gZnJhZ21lbnQuc3RhcnQoKTsK
LSAgICAvLyBQYXRob2xvZ2ljYWwgY2FzZSBvZiAoZXh0cmVtZWx5KWxvbmcgc3RyaW5nIGFuZCBu
YXJyb3cgbGluZXMuCi0gICAgLy8gQWRqdXN0IHRoZSByYW5nZSBzbyB0aGF0IHdlIGNhbiBwaWNr
IGEgcmVhc29uYWJsZSBtaWRwb2ludC4KLSAgICBhdXRvIGF2ZXJhZ2VDaGFyYWN0ZXJXaWR0aCA9
IGZyYWdtZW50LndpZHRoKCkgLyBmcmFnbWVudC5sZW5ndGgoKTsKLSAgICBhdXRvIHJpZ2h0ID0g
c3RkOjptaW48dW5zaWduZWQ+KGxlZnQgKyAoMiAqIGF2YWlsYWJsZVdpZHRoIC8gYXZlcmFnZUNo
YXJhY3RlcldpZHRoKSwgZnJhZ21lbnQuZW5kKCkgLSAxKTsKLSAgICAvLyBQcmVzZXJ2ZSB0aGUg
bGVmdCB3aWR0aCBmb3IgdGhlIGZpbmFsIHNwbGl0IHBvc2l0aW9uIHNvIHRoYXQgd2UgZG9uJ3Qg
bmVlZCB0byByZW1lYXN1cmUgdGhlIGxlZnQgc2lkZSBhZ2Fpbi4KLSAgICBmbG9hdCBsZWZ0U2lk
ZVdpZHRoID0gMDsKLSAgICB3aGlsZSAobGVmdCA8IHJpZ2h0KSB7Ci0gICAgICAgIGF1dG8gbWlk
ZGxlID0gKGxlZnQgKyByaWdodCkgLyAyOwotICAgICAgICBhdXRvIHdpZHRoID0gdGV4dEZyYWdt
ZW50SXRlcmF0b3IudGV4dFdpZHRoKGZyYWdtZW50LnN0YXJ0KCksIG1pZGRsZSArIDEsIDApOwot
ICAgICAgICBpZiAod2lkdGggPCBhdmFpbGFibGVXaWR0aCkgewotICAgICAgICAgICAgbGVmdCA9
IG1pZGRsZSArIDE7Ci0gICAgICAgICAgICBsZWZ0U2lkZVdpZHRoID0gd2lkdGg7Ci0gICAgICAg
IH0gZWxzZSBpZiAod2lkdGggPiBhdmFpbGFibGVXaWR0aCkKLSAgICAgICAgICAgIHJpZ2h0ID0g
bWlkZGxlOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJpZ2h0ID0gbWlkZGxlICsgMTsK
LSAgICAgICAgICAgIGxlZnRTaWRlV2lkdGggPSB3aWR0aDsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB7IHJpZ2h0LCBsZWZ0U2lkZVdpZHRoIH07Ci19
Ci0KLXN0YXRpYyBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IHNwbGl0RnJhZ21l
bnRUb0ZpdExpbmUoVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCYgZnJhZ21lbnRU
b1NwbGl0LAotICAgIGNvbnN0IExpbmVTdGF0ZSYgbGluZSwgY29uc3QgVGV4dEZyYWdtZW50SXRl
cmF0b3ImIHRleHRGcmFnbWVudEl0ZXJhdG9yKQotewotICAgIGF1dG8gYXZhaWxhYmxlV2lkdGgg
PSBsaW5lLmF2YWlsYWJsZVdpZHRoKCkgLSBsaW5lLndpZHRoKCk7Ci0gICAgYXV0byBzcGxpdEZy
YWdtZW50RGF0YSA9IHNwbGl0KGZyYWdtZW50VG9TcGxpdCwgYXZhaWxhYmxlV2lkdGgsIHRleHRG
cmFnbWVudEl0ZXJhdG9yKTsKLSAgICBPcHRpb25hbDx1bnNpZ25lZD4gaHlwaGVuUG9zaXRpb24g
PSBXVEY6Om51bGxvcHQ7Ci0gICAgLy8gRG9lcyBmaXJzdCBjaGFyYWN0ZXIgZml0IHRoaXMgbGlu
ZT8KLSAgICBpZiAoc3BsaXRGcmFnbWVudERhdGEucG9zaXRpb24gPT0gZnJhZ21lbnRUb1NwbGl0
LnN0YXJ0KCkpIHsKLSAgICAgICAgLy8gS2VlcCBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIG9uIGVt
cHR5IGxpbmVzLgotICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBzcGxp
dEZyYWdtZW50RGF0YS53aWR0aCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLnRleHRXaWR0aChmcmFn
bWVudFRvU3BsaXQuc3RhcnQoKSwgKytzcGxpdEZyYWdtZW50RGF0YS5wb3NpdGlvbiwgMCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaHlwaGVuUG9zaXRpb24gPSBoeXBoZW5Qb3NpdGlvbkZvckZy
YWdtZW50KHNwbGl0RnJhZ21lbnREYXRhLCBmcmFnbWVudFRvU3BsaXQsIGxpbmUsIHRleHRGcmFn
bWVudEl0ZXJhdG9yLCBhdmFpbGFibGVXaWR0aCk7Ci0gICAgICAgIGlmIChoeXBoZW5Qb3NpdGlv
bikgewotICAgICAgICAgICAgc3BsaXRGcmFnbWVudERhdGEucG9zaXRpb24gPSAqaHlwaGVuUG9z
aXRpb247Ci0gICAgICAgICAgICBzcGxpdEZyYWdtZW50RGF0YS53aWR0aCA9IHRleHRGcmFnbWVu
dEl0ZXJhdG9yLnRleHRXaWR0aChmcmFnbWVudFRvU3BsaXQuc3RhcnQoKSwgc3BsaXRGcmFnbWVu
dERhdGEucG9zaXRpb24sIDApOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIElmIHRoZSByaWdo
dCBzaWRlIHN1cmVseSBkb2VzIG5vdCBmaXQgdGhlIChuZXh0KWxpbmUsIHdlIGRvbid0IG5lZWQg
dGhlIHdpZHRoIHRvIGJlIGtlcm5pbmcvbGlnYXR1cmUgYWRqdXN0ZWQuCi0gICAgLy8gUGFydCBv
ZiBpdCBnZXRzIHJlLW1lYXN1cmVkIGFzIHRoZSBsZWZ0IHNpZGUgZHVyaW5nIG5leHQgc3BsaXQu
Ci0gICAgLy8gVGhpcyBzYXZlcyBtZWFzdXJpbmcgbG9uZyBjaHVuayBvZiB0ZXh0IHJlcGVhdGVk
bHkgKHNlZSBwYXRob2xvZ2ljYWwgY2FzZSBhdCA6OnNwbGl0KS4KLSAgICBhdXRvIHJpZ2h0U2lk
ZVdpZHRoID0gZnJhZ21lbnRUb1NwbGl0LndpZHRoKCkgLSBzcGxpdEZyYWdtZW50RGF0YS53aWR0
aDsKLSAgICBpZiAocmlnaHRTaWRlV2lkdGggPCAyICogYXZhaWxhYmxlV2lkdGgpCi0gICAgICAg
IHJpZ2h0U2lkZVdpZHRoID0gdGV4dEZyYWdtZW50SXRlcmF0b3IudGV4dFdpZHRoKHNwbGl0RnJh
Z21lbnREYXRhLnBvc2l0aW9uLCBmcmFnbWVudFRvU3BsaXQuZW5kKCksIDApOwotICAgIHJldHVy
biBoeXBoZW5Qb3NpdGlvbiA/IGZyYWdtZW50VG9TcGxpdC5zcGxpdFdpdGhIeXBoZW4oc3BsaXRG
cmFnbWVudERhdGEucG9zaXRpb24sIHRleHRGcmFnbWVudEl0ZXJhdG9yLnN0eWxlKCkuaHlwaGVu
U3RyaW5nV2lkdGgsCi0gICAgICAgIHNwbGl0RnJhZ21lbnREYXRhLndpZHRoLCByaWdodFNpZGVX
aWR0aCkgOiBmcmFnbWVudFRvU3BsaXQuc3BsaXQoc3BsaXRGcmFnbWVudERhdGEucG9zaXRpb24s
IHNwbGl0RnJhZ21lbnREYXRhLndpZHRoLCByaWdodFNpZGVXaWR0aCk7Ci19Ci0KLWVudW0gUHJl
V3JhcExpbmVCcmVha1J1bGUgeyBQcmVzZXJ2ZSwgSWdub3JlIH07Ci0KLXN0YXRpYyBUZXh0RnJh
Z21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IGNvbnN1bWVMaW5lQnJlYWtJZk5lZWRlZChjb25z
dCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudCwgVGV4dEZyYWdt
ZW50SXRlcmF0b3ImIHRleHRGcmFnbWVudEl0ZXJhdG9yLCBMaW5lU3RhdGUmIGxpbmUsIExheW91
dDo6UnVuVmVjdG9yJiBydW5zLAotICAgIFByZVdyYXBMaW5lQnJlYWtSdWxlIHByZVdyYXBMaW5l
QnJlYWtSdWxlID0gUHJlV3JhcExpbmVCcmVha1J1bGU6OlByZXNlcnZlKQotewotICAgIGlmICgh
ZnJhZ21lbnQuaXNMaW5lQnJlYWsoKSkKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotCi0gICAg
Ym9vbCBpc0hhcmRMaW5lYnJlYWsgPSBmcmFnbWVudC50eXBlKCkgPT0gVGV4dEZyYWdtZW50SXRl
cmF0b3I6OlRleHRGcmFnbWVudDo6SGFyZExpbmVCcmVhazsKLSAgICAvLyA8YnI+IGFsd2F5cyBw
cm9kdWNlcyBhIHJ1bi4gKHJlcXVpcmVkIGJ5IHRlc3Rpbmcgb3V0cHV0KQotICAgIGlmIChpc0hh
cmRMaW5lYnJlYWspCi0gICAgICAgIGxpbmUuYXBwZW5kRnJhZ21lbnRBbmRDcmVhdGVSdW5JZk5l
ZWRlZChmcmFnbWVudCwgcnVucyk7Ci0KLSAgICBhdXRvJiBzdHlsZSA9IHRleHRGcmFnbWVudEl0
ZXJhdG9yLnN0eWxlKCk7Ci0gICAgaWYgKHN0eWxlLnByZXNlcnZlTmV3bGluZSAmJiBwcmVXcmFw
TGluZUJyZWFrUnVsZSA9PSBQcmVXcmFwTGluZUJyZWFrUnVsZTo6UHJlc2VydmUpIHsKLSAgICAg
ICAgaWYgKCFpc0hhcmRMaW5lYnJlYWspCi0gICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0g
ICAgfQotICAgIHJldHVybiB0ZXh0RnJhZ21lbnRJdGVyYXRvci5uZXh0VGV4dEZyYWdtZW50KCk7
Ci19Ci0KLXN0YXRpYyBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IHNraXBXaGl0
ZXNwYWNlSWZOZWVkZWQoY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCYg
ZnJhZ21lbnQsIFRleHRGcmFnbWVudEl0ZXJhdG9yJiB0ZXh0RnJhZ21lbnRJdGVyYXRvcikKLXsK
LSAgICBpZiAoIXRleHRGcmFnbWVudEl0ZXJhdG9yLnN0eWxlKCkuY29sbGFwc2VXaGl0ZXNwYWNl
KQotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0KLSAgICBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6
VGV4dEZyYWdtZW50IGZpcnN0Tm9uV2hpdGVzcGFjZUZyYWdtZW50ID0gZnJhZ21lbnQ7Ci0gICAg
d2hpbGUgKGZpcnN0Tm9uV2hpdGVzcGFjZUZyYWdtZW50LnR5cGUoKSA9PSBUZXh0RnJhZ21lbnRJ
dGVyYXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlKQotICAgICAgICBmaXJzdE5vbldoaXRl
c3BhY2VGcmFnbWVudCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQoKTsK
LSAgICByZXR1cm4gZmlyc3ROb25XaGl0ZXNwYWNlRnJhZ21lbnQ7Ci19Ci0KLXN0YXRpYyBUZXh0
RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IGZpcnN0RnJhZ21lbnQoVGV4dEZyYWdtZW50
SXRlcmF0b3ImIHRleHRGcmFnbWVudEl0ZXJhdG9yLCBMaW5lU3RhdGUmIGN1cnJlbnRMaW5lLCBj
b25zdCBMaW5lU3RhdGUmIHByZXZpb3VzTGluZSwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMpCi17
Ci0gICAgLy8gSGFuZGxlIG92ZXJmbG93IGZyYWdtZW50IGZyb20gcHJldmlvdXMgbGluZS4KLSAg
ICBhdXRvIG92ZXJmbG93ZWRGcmFnbWVudCA9IHByZXZpb3VzTGluZS5vdmVyZmxvd2VkRnJhZ21l
bnQoKTsKLSAgICBpZiAob3ZlcmZsb3dlZEZyYWdtZW50LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIHNraXBXaGl0ZXNwYWNlSWZOZWVkZWQodGV4dEZyYWdtZW50SXRlcmF0b3IubmV4dFRleHRG
cmFnbWVudCgpLCB0ZXh0RnJhZ21lbnRJdGVyYXRvcik7Ci0KLSAgICBpZiAob3ZlcmZsb3dlZEZy
YWdtZW50LnR5cGUoKSAhPSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0
ZXNwYWNlKQotICAgICAgICByZXR1cm4gb3ZlcmZsb3dlZEZyYWdtZW50OwotCi0gICAgLy8gTGVh
ZGluZyB3aGl0ZXNwYWNlIGhhbmRsaW5nLgotICAgIGF1dG8mIHN0eWxlID0gdGV4dEZyYWdtZW50
SXRlcmF0b3Iuc3R5bGUoKTsKLSAgICBpZiAoc3R5bGUuYnJlYWtTcGFjZXMpIHsKLSAgICAgICAg
Ly8gTGVhZGluZyB3aGl0ZXNwYWNlIGNyZWF0ZWQgYWZ0ZXIgYnJlYWtpbmcgdGhlIHByZXZpb3Vz
IGxpbmUuCi0gICAgICAgIC8vIEJyZWFraW5nIGJlZm9yZSB0aGUgZmlyc3Qgc3BhY2UgYWZ0ZXIg
YSB3b3JkIGlzIG9ubHkgYWxsb3dlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGJyZWFrLWFsbCBvciBi
cmVhay13b3JkLgotICAgICAgICBpZiAoc3R5bGUuYnJlYWtGaXJzdFdvcmRPbk92ZXJmbG93IHx8
IHByZXZpb3VzTGluZS5oYXNUcmFpbGluZ1doaXRlc3BhY2UoKSkKLSAgICAgICAgICAgIHJldHVy
biBvdmVyZmxvd2VkRnJhZ21lbnQ7Ci0gICAgfQotICAgIC8vIFNwZWNpYWwgb3ZlcmZsb3cgcHJl
LXdyYXAgd2hpdGVzcGFjZSBoYW5kbGluZzogc2tpcCB0aGUgb3ZlcmZsb3dlZCB3aGl0ZXNwYWNl
IChldmVuIHdoZW4gc3R5bGUgc2F5cyBub3QtY29sbGFwc2libGUpCi0gICAgLy8gaWYgd2UgbWFu
YWdlIHRvIGZpdCBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIG9uIHRoZSBwcmV2aW91cyBsaW5lLgot
ICAgIGlmICgoc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlIHx8IHN0eWxlLndyYXBMaW5lcykgJiYg
cHJldmlvdXNMaW5lLmZpcnN0Q2hhcmFjdGVyRml0cygpKSB7Ci0gICAgICAgIC8vIElmIHNraXBw
aW5nIHRoZSB3aGl0ZXNwYWNlIHB1dHMgdXMgb24gYSBuZXdsaW5lLCBza2lwIHRoZSBuZXdsaW5l
IHRvbyBhcyB3ZSBhbHJlYWR5IHdyYXBwZWQgdGhlIGxpbmUuCi0gICAgICAgIGF1dG8gZmlyc3RG
cmFnbWVudENhbmRpZGF0ZSA9IGNvbnN1bWVMaW5lQnJlYWtJZk5lZWRlZCh0ZXh0RnJhZ21lbnRJ
dGVyYXRvci5uZXh0VGV4dEZyYWdtZW50KCksIHRleHRGcmFnbWVudEl0ZXJhdG9yLCBjdXJyZW50
TGluZSwgcnVucywKLSAgICAgICAgICAgIHByZVdyYXAoc3R5bGUpID8gUHJlV3JhcExpbmVCcmVh
a1J1bGU6Oklnbm9yZSA6IFByZVdyYXBMaW5lQnJlYWtSdWxlOjpQcmVzZXJ2ZSk7Ci0gICAgICAg
IHJldHVybiBza2lwV2hpdGVzcGFjZUlmTmVlZGVkKGZpcnN0RnJhZ21lbnRDYW5kaWRhdGUsIHRl
eHRGcmFnbWVudEl0ZXJhdG9yKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNraXBXaGl0ZXNwYWNlSWZO
ZWVkZWQob3ZlcmZsb3dlZEZyYWdtZW50LCB0ZXh0RnJhZ21lbnRJdGVyYXRvcik7Ci19Ci0KLXN0
YXRpYyB2b2lkIGZvcmNlRnJhZ21lbnRUb0xpbmUoTGluZVN0YXRlJiBsaW5lLCBUZXh0RnJhZ21l
bnRJdGVyYXRvciYgdGV4dEZyYWdtZW50SXRlcmF0b3IsIExheW91dDo6UnVuVmVjdG9yJiBydW5z
LCBjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudCkKLXsK
LSAgICBsaW5lLmFwcGVuZEZyYWdtZW50QW5kQ3JlYXRlUnVuSWZOZWVkZWQoZnJhZ21lbnQsIHJ1
bnMpOwotICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBtb3JlIGZyYWdtZW50cyB0byBhZGQgdG8g
dGhlIGN1cnJlbnQgbGluZS4KLSAgICBhdXRvIG5leHRGcmFnbWVudCA9IHRleHRGcmFnbWVudEl0
ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQoKTsKLSAgICBpZiAoZnJhZ21lbnQub3ZlcmxhcHNUb05l
eHRSZW5kZXJlcigpKSB7Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICBpZiAo
bmV4dEZyYWdtZW50LnR5cGUoKSAhPSBmcmFnbWVudC50eXBlKCkpCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBsaW5lLmFwcGVuZEZyYWdtZW50QW5kQ3JlYXRlUnVuSWZOZWVk
ZWQobmV4dEZyYWdtZW50LCBydW5zKTsKLSAgICAgICAgICAgIC8vIERvZXMgaXQgb3ZlcmxhcCB0
byB0aGUgbmV4dCBzZWdtZW50PwotICAgICAgICAgICAgaWYgKCFuZXh0RnJhZ21lbnQub3Zlcmxh
cHNUb05leHRSZW5kZXJlcigpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IG5leHRGcmFnbWVudCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQoKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICAvLyBXaGVuIHRoZSBmb3JjZWQgZnJhZ21lbnQgaXMgZm9s
bG93ZWQgYnkgZWl0aGVyIHdoaXRlc3BhY2UgYW5kL29yIGxpbmUgYnJlYWssIGNvbnN1bWUgdGhl
bSB0b28sIG90aGVyd2lzZSB3ZSBlbmQgdXAgd2l0aCBhbiBleHRyYSB3aGl0ZXNwYWNlIGFuZC9v
ciBsaW5lIGJyZWFrLgotICAgIG5leHRGcmFnbWVudCA9IHNraXBXaGl0ZXNwYWNlSWZOZWVkZWQo
bmV4dEZyYWdtZW50LCB0ZXh0RnJhZ21lbnRJdGVyYXRvcik7Ci0gICAgbmV4dEZyYWdtZW50ID0g
Y29uc3VtZUxpbmVCcmVha0lmTmVlZGVkKG5leHRGcmFnbWVudCwgdGV4dEZyYWdtZW50SXRlcmF0
b3IsIGxpbmUsIHJ1bnMpOwotICAgIGxpbmUuc2V0T3ZlcmZsb3dlZEZyYWdtZW50KG5leHRGcmFn
bWVudCk7Ci19Ci0KLXN0YXRpYyBib29sIGNyZWF0ZUxpbmVSdW5zKExpbmVTdGF0ZSYgbGluZSwg
Y29uc3QgTGluZVN0YXRlJiBwcmV2aW91c0xpbmUsIExheW91dDo6UnVuVmVjdG9yJiBydW5zLCBU
ZXh0RnJhZ21lbnRJdGVyYXRvciYgdGV4dEZyYWdtZW50SXRlcmF0b3IpCi17Ci0gICAgY29uc3Qg
YXV0byYgc3R5bGUgPSB0ZXh0RnJhZ21lbnRJdGVyYXRvci5zdHlsZSgpOwotICAgIGJvb2wgbGlu
ZUNhbkJlV3JhcHBlZCA9IHN0eWxlLndyYXBMaW5lcyB8fCBzdHlsZS5icmVha0ZpcnN0V29yZE9u
T3ZlcmZsb3cgfHwgc3R5bGUuYnJlYWtBbnlXb3JkT25PdmVyZmxvdzsKLSAgICBhdXRvIGZyYWdt
ZW50ID0gZmlyc3RGcmFnbWVudCh0ZXh0RnJhZ21lbnRJdGVyYXRvciwgbGluZSwgcHJldmlvdXNM
aW5lLCBydW5zKTsKLSAgICB3aGlsZSAoZnJhZ21lbnQudHlwZSgpICE9IFRleHRGcmFnbWVudEl0
ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OkNvbnRlbnRFbmQpIHsKLSAgICAgICAgLy8gSGFyZCBhbmQg
c29mdCBsaW5lYnJlYWtzLgotICAgICAgICBpZiAoZnJhZ21lbnQuaXNMaW5lQnJlYWsoKSkgewot
ICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXcgbGluZSBmcmFnbWVudCBvbmx5IGlmIHRoZXJlJ3Mg
bm90aGluZyBvbiB0aGUgbGluZS4gKG90aGVyd2lzZSB0aGUgZXh0cmEgbmV3IGxpbmUgY2hhcmFj
dGVyIHdvdWxkIHNob3cgdXAgYXQgdGhlIGVuZCBvZiB0aGUgY29udGVudC4pCi0gICAgICAgICAg
ICBpZiAobGluZS5pc0VtcHR5KCkgfHwgZnJhZ21lbnQudHlwZSgpID09IFRleHRGcmFnbWVudEl0
ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OkhhcmRMaW5lQnJlYWsgfHwgcHJlV3JhcChzdHlsZSkgfHwg
c3R5bGUucHJlc2VydmVOZXdsaW5lKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0eWxlLnRleHRB
bGlnbiA9PSBUZXh0QWxpZ25Nb2RlOjpSaWdodCB8fCBzdHlsZS50ZXh0QWxpZ24gPT0gVGV4dEFs
aWduTW9kZTo6V2ViS2l0UmlnaHQpCi0gICAgICAgICAgICAgICAgICAgIGxpbmUucmVtb3ZlVHJh
aWxpbmdXaGl0ZXNwYWNlKHJ1bnMpOwotICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kRnJhZ21l
bnRBbmRDcmVhdGVSdW5JZk5lZWRlZChmcmFnbWVudCwgcnVucyk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobGluZUNhbkJlV3JhcHBl
ZCAmJiAhbGluZS5maXRzKGZyYWdtZW50LndpZHRoKCkpKSB7Ci0gICAgICAgICAgICAvLyBPdmVy
ZmxvdyB3cmFwcGluZyBiZWhhdmlvdXI6Ci0gICAgICAgICAgICAvLyAxLiBXaGl0ZXNhcGNlIGNv
bGxhcHNlIG9uOiB3aGl0ZXNwYWNlIGlzIHNraXBwZWQuIEp1bXAgdG8gbmV4dCBsaW5lLgotICAg
ICAgICAgICAgLy8gMi4gV2hpdGVzcGFjZSBjb2xsYXBzZSBvZmY6IHdoaXRlc3BhY2UgaXMgd3Jh
cHBlZC4KLSAgICAgICAgICAgIC8vIDMuIEZpcnN0LCBub24td2hpdGVzcGFjZSBmcmFnbWVudCBp
cyBlaXRoZXIgd3JhcHBlZCBvciBrZXB0IG9uIHRoZSBsaW5lLiAoZGVwZW5kcyBvbiBvdmVyZmxv
dy13cmFwKQotICAgICAgICAgICAgLy8gNS4gTm9uLXdoaXRlc3BhY2UgZnJhZ21lbnQgd2hlbiB0
aGVyZSdzIGFscmVhZHkgYW5vdGhlciBmcmFnbWVudCBvbiB0aGUgbGluZSBlaXRoZXIgZ2V0cyB3
cmFwcGVkICh3b3JkLWJyZWFrOiBicmVhay1hbGwpCi0gICAgICAgICAgICAvLyBvciBnZXRzIHB1
c2hlZCB0byB0aGUgbmV4dCBsaW5lLgotICAgICAgICAgICAgYm9vbCBlbXB0eUxpbmUgPSBsaW5l
LmlzRW1wdHkoKTsKLSAgICAgICAgICAgIC8vIFdoaXRlc3BhY2UgZnJhZ21lbnQuCi0gICAgICAg
ICAgICBpZiAoZnJhZ21lbnQudHlwZSgpID09IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJh
Z21lbnQ6OldoaXRlc3BhY2UpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3R5bGUuY29sbGFwc2VX
aGl0ZXNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFB1c2ggY29sbGFwYXNlZCB3aGl0
ZXNwYWNlIHRvIHRoZSBuZXh0IGxpbmUuCi0gICAgICAgICAgICAgICAgICAgIGxpbmUuc2V0T3Zl
cmZsb3dlZEZyYWdtZW50KGZyYWdtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChzdHlsZS5icmVha1NwYWNlcyAm
JiBsaW5lLmhhc1doaXRlc3BhY2VGcmFnbWVudHMoKSAmJiBmcmFnbWVudC5sZW5ndGgoKSA9PSAx
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEJyZWFraW5nIGJlZm9yZSB0aGUgZmlyc3Qgc3Bh
Y2UgYWZ0ZXIgYSB3b3JkIGlzIG5vdCBhbGxvd2VkIGlmIHRoZXJlIGFyZSBwcmV2aW91cyBicmVh
a2luZyBvcHBvcnR1bml0aWVzIGluIHRoZSBsaW5lLgotICAgICAgICAgICAgICAgICAgICB0ZXh0
RnJhZ21lbnRJdGVyYXRvci5yZXZlcnRUb0VuZE9mRnJhZ21lbnQobGluZS5yZXZlcnRUb0xhc3RD
b21wbGV0ZUZyYWdtZW50KHJ1bnMpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChwcmVXcmFwKHN0eWxlKSkgewotICAg
ICAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZEZyYWdtZW50QW5kQ3JlYXRlUnVuSWZOZWVkZWQo
ZnJhZ21lbnQsIHJ1bnMpOwotICAgICAgICAgICAgICAgICAgICBmcmFnbWVudCA9IHRleHRGcmFn
bWVudEl0ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQobGluZS53aWR0aCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGZyYWdtZW50LmlzTGluZUJyZWFrKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgbGluZS5zZXRPdmVyZmxvd2VkRnJh
Z21lbnQoZnJhZ21lbnQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gU3BsaXQgdGhlIHdoaXRlc3BhY2U7IGxlZnQgcGFy
dCBzdGF5cyBvbiB0aGlzIGxpbmUsIHJpZ2h0IGlzIHB1c2hlZCB0byBuZXh0IGxpbmUuCi0gICAg
ICAgICAgICAgICAgbGluZS5zZXRPdmVyZmxvd2VkRnJhZ21lbnQoc3BsaXRGcmFnbWVudFRvRml0
TGluZShmcmFnbWVudCwgbGluZSwgdGV4dEZyYWdtZW50SXRlcmF0b3IpKTsKLSAgICAgICAgICAg
ICAgICBsaW5lLmFwcGVuZEZyYWdtZW50QW5kQ3JlYXRlUnVuSWZOZWVkZWQoZnJhZ21lbnQsIHJ1
bnMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ly8gTm9uLXdoaXRlc3BhY2UgZnJhZ21lbnQuICghc3R5bGUud3JhcExpbmVzOiBidWcxMzgxMDIo
cHJlc2VydmUgZXhpc3RpbmcgYmVoYXZpb3IpCi0gICAgICAgICAgICBpZiAoKChlbXB0eUxpbmUg
JiYgc3R5bGUuYnJlYWtGaXJzdFdvcmRPbk92ZXJmbG93KSB8fCBzdHlsZS5icmVha0FueVdvcmRP
bk92ZXJmbG93KSB8fCAhc3R5bGUud3JhcExpbmVzKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3Bs
aXQgdGhlIGZyYWdtZW50OyAobW9kaWZpZWQpZnJhZ21lbnQgc3RheXMgb24gdGhpcyBsaW5lLCBv
dmVyZmxvd2VkRnJhZ21lbnQgaXMgcHVzaGVkIHRvIG5leHQgbGluZS4KLSAgICAgICAgICAgICAg
ICBsaW5lLnNldE92ZXJmbG93ZWRGcmFnbWVudChzcGxpdEZyYWdtZW50VG9GaXRMaW5lKGZyYWdt
ZW50LCBsaW5lLCB0ZXh0RnJhZ21lbnRJdGVyYXRvcikpOwotICAgICAgICAgICAgICAgIGxpbmUu
YXBwZW5kRnJhZ21lbnRBbmRDcmVhdGVSdW5JZk5lZWRlZChmcmFnbWVudCwgcnVucyk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlQoZnJh
Z21lbnQudHlwZSgpID09IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6Ok5vbldo
aXRlc3BhY2UpOwotICAgICAgICAgICAgLy8gRmluZCBvdXQgaWYgdGhpcyBub24td2hpdGVzcGFj
ZSBmcmFnbWVudCBoYXMgYSBoeXBoZW4gd2hlcmUgd2UgY2FuIGJyZWFrLgotICAgICAgICAgICAg
aWYgKHN0eWxlLnNob3VsZEh5cGhlbmF0ZSkgewotICAgICAgICAgICAgICAgIGF1dG8gZnJhZ21l
bnRUb1NwbGl0ID0gZnJhZ21lbnQ7Ci0gICAgICAgICAgICAgICAgLy8gU3BsaXQgYW5kIGNoZWNr
IGlmIHdlIGFjdHVhbGx5IGVuZGVkIHVwIHdpdGggYSBoeXBoZW4uCi0gICAgICAgICAgICAgICAg
YXV0byBvdmVyZmxvd0ZyYWdtZW50ID0gc3BsaXRGcmFnbWVudFRvRml0TGluZShmcmFnbWVudFRv
U3BsaXQsIGxpbmUsIHRleHRGcmFnbWVudEl0ZXJhdG9yKTsKLSAgICAgICAgICAgICAgICBpZiAo
ZnJhZ21lbnRUb1NwbGl0Lmhhc0h5cGhlbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmUu
c2V0T3ZlcmZsb3dlZEZyYWdtZW50KG92ZXJmbG93RnJhZ21lbnQpOwotICAgICAgICAgICAgICAg
ICAgICBsaW5lLmFwcGVuZEZyYWdtZW50QW5kQ3JlYXRlUnVuSWZOZWVkZWQoZnJhZ21lbnRUb1Nw
bGl0LCBydW5zKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIC8vIE5vIGh5cGhlbiwgbm8gc3BsaXQuCi0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAvLyBOb24tYnJlYWthYmxlIG5vbi13aGl0ZXNwYWNlIGZpcnN0IGZyYWdt
ZW50LiBBZGQgaXQgdG8gdGhlIGN1cnJlbnQgbGluZS4gLWl0IG92ZXJmbG93cyB0aG91Z2guCi0g
ICAgICAgICAgICBpZiAoZW1wdHlMaW5lKSB7Ci0gICAgICAgICAgICAgICAgZm9yY2VGcmFnbWVu
dFRvTGluZShsaW5lLCB0ZXh0RnJhZ21lbnRJdGVyYXRvciwgcnVucywgZnJhZ21lbnQpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gTm9uLWJy
ZWFrYWJsZSBub24td2hpdGVzcGFjZSBmcmFnbWVudCB3aGVuIHRoZXJlJ3MgYWxyZWFkeSBjb250
ZW50IG9uIHRoZSBsaW5lLiBQdXNoIGl0IHRvIHRoZSBuZXh0IGxpbmUuCi0gICAgICAgICAgICBB
U1NFUlQobGluZS5sYXN0RnJhZ21lbnQoKS5pc1ZhbGlkKCkpOwotICAgICAgICAgICAgaWYgKGxp
bmUubGFzdEZyYWdtZW50KCkub3ZlcmxhcHNUb05leHRSZW5kZXJlcigpKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBmcmFnbWVudCBpcyBhIGNvbnRpbnVhdGlvbiBvZiBhIHBy
ZXZpb3VzIHNlZ21lbnQuIEluIHN1Y2ggY2FzZXMsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZW0gYWxs
LgotICAgICAgICAgICAgICAgIHRleHRGcmFnbWVudEl0ZXJhdG9yLnJldmVydFRvRW5kT2ZGcmFn
bWVudChsaW5lLnJldmVydFRvTGFzdENvbXBsZXRlRnJhZ21lbnQocnVucykpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGluZS5zZXRPdmVyZmxv
d2VkRnJhZ21lbnQoZnJhZ21lbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgbGluZS5hcHBlbmRGcmFnbWVudEFuZENyZWF0ZVJ1bklmTmVlZGVkKGZyYWdtZW50LCBy
dW5zKTsKLSAgICAgICAgLy8gRmluZCB0aGUgbmV4dCB0ZXh0IGZyYWdtZW50LgotICAgICAgICBm
cmFnbWVudCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQobGluZS53aWR0
aCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIChmcmFnbWVudC50eXBlKCkgPT0gVGV4dEZyYWdtZW50
SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6Q29udGVudEVuZCAmJiBsaW5lLm92ZXJmbG93ZWRGcmFn
bWVudCgpLmlzRW1wdHkoKSkgfHwgbGluZS5vdmVyZmxvd2VkRnJhZ21lbnQoKS50eXBlKCkgPT0g
VGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6Q29udGVudEVuZDsKLX0KLQotc3Rh
dGljIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKGJvb2wgaXNBZnRlckV4cGFu
c2lvbiwgYm9vbCBsYXN0UnVuT25MaW5lKQotewotICAgIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFu
c2lvbkJlaGF2aW9yOwotICAgIGV4cGFuc2lvbkJlaGF2aW9yID0gaXNBZnRlckV4cGFuc2lvbiA/
IEZvcmJpZExlZnRFeHBhbnNpb24gOiBBbGxvd0xlZnRFeHBhbnNpb247Ci0gICAgZXhwYW5zaW9u
QmVoYXZpb3IgfD0gbGFzdFJ1bk9uTGluZSA/IEZvcmJpZFJpZ2h0RXhwYW5zaW9uIDogQWxsb3dS
aWdodEV4cGFuc2lvbjsKLSAgICByZXR1cm4gZXhwYW5zaW9uQmVoYXZpb3I7Ci19Ci0KLXN0YXRp
YyB2b2lkIGp1c3RpZnlSdW5zKGNvbnN0IExpbmVTdGF0ZSYgbGluZSwgTGF5b3V0OjpSdW5WZWN0
b3ImIHJ1bnMsIHVuc2lnbmVkIGZpcnN0UnVuSW5kZXgpCi17Ci0gICAgQVNTRVJUKHJ1bnMuc2l6
ZSgpKTsKLSAgICBhdXRvIHdpZHRoVG9EaXN0cmlidXRlID0gbGluZS5hdmFpbGFibGVXaWR0aCgp
IC0gbGluZS53aWR0aCgpOwotICAgIGlmICh3aWR0aFRvRGlzdHJpYnV0ZSA8PSAwKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBhdXRvIGxhc3RSdW5JbmRleCA9IHJ1bnMuc2l6ZSgpIC0gMTsKLSAg
ICBBU1NFUlQoZmlyc3RSdW5JbmRleCA8PSBsYXN0UnVuSW5kZXgpOwotICAgIFZlY3RvcjxzdGQ6
OnBhaXI8dW5zaWduZWQsIEV4cGFuc2lvbkJlaGF2aW9yPj4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlM
aXN0OwotICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRPblRoaXNMaW5lID0g
MDsKLSAgICBhdXRvIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOwotICAgIGZvciAoYXV0byBpID0g
Zmlyc3RSdW5JbmRleDsgaSA8PSBsYXN0UnVuSW5kZXg7ICsraSkgewotICAgICAgICBjb25zdCBh
dXRvJiBydW4gPSBydW5zLmF0KGkpOwotICAgICAgICB1bnNpZ25lZCBvcHBvcnR1bml0eUNvdW50
SW5SdW4gPSAwOwotICAgICAgICBzdGQ6OnRpZShvcHBvcnR1bml0eUNvdW50SW5SdW4sIGlzQWZ0
ZXJFeHBhbnNpb24pID0gbGluZS5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KHJ1bi5zdGFydCwg
cnVuLmVuZCk7Ci0gICAgICAgIGV4cGFuc2lvbk9wcG9ydHVuaXR5TGlzdC5hcHBlbmQoc3RkOjpt
YWtlX3BhaXIob3Bwb3J0dW5pdHlDb3VudEluUnVuLCBleHBhbnNpb25CZWhhdmlvcihpc0FmdGVy
RXhwYW5zaW9uLCBpID09IGxhc3RSdW5JbmRleCkpKTsKLSAgICAgICAgZXhwYW5zaW9uT3Bwb3J0
dW5pdHlDb3VudE9uVGhpc0xpbmUgKz0gb3Bwb3J0dW5pdHlDb3VudEluUnVuOwotICAgIH0KLSAg
ICBpZiAoIWV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRPblRoaXNMaW5lKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBBU1NFUlQoZXhwYW5zaW9uT3Bwb3J0dW5pdHlMaXN0LnNpemUoKSA9PSBsYXN0
UnVuSW5kZXggLSBmaXJzdFJ1bkluZGV4ICsgMSk7Ci0gICAgYXV0byBleHBhbnNpb24gPSB3aWR0
aFRvRGlzdHJpYnV0ZSAvIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRPblRoaXNMaW5lOwotICAg
IGZsb2F0IGFjY3VtdWxhdGVkRXhwYW5zaW9uID0gMDsKLSAgICBmb3IgKGF1dG8gaSA9IGZpcnN0
UnVuSW5kZXg7IGkgPD0gbGFzdFJ1bkluZGV4OyArK2kpIHsKLSAgICAgICAgYXV0byYgcnVuID0g
cnVucy5hdChpKTsKLSAgICAgICAgdW5zaWduZWQgb3Bwb3J0dW5pdHlDb3VudEluUnVuOwotICAg
ICAgICBzdGQ6OnRpZShvcHBvcnR1bml0eUNvdW50SW5SdW4sIHJ1bi5leHBhbnNpb25CZWhhdmlv
cikgPSBleHBhbnNpb25PcHBvcnR1bml0eUxpc3QuYXQoaSAtIGZpcnN0UnVuSW5kZXgpOwotICAg
ICAgICBydW4uZXhwYW5zaW9uID0gb3Bwb3J0dW5pdHlDb3VudEluUnVuICogZXhwYW5zaW9uOwot
ICAgICAgICBydW4ubG9naWNhbExlZnQgKz0gYWNjdW11bGF0ZWRFeHBhbnNpb247Ci0gICAgICAg
IHJ1bi5sb2dpY2FsUmlnaHQgKz0gKGFjY3VtdWxhdGVkRXhwYW5zaW9uICsgcnVuLmV4cGFuc2lv
bik7Ci0gICAgICAgIGFjY3VtdWxhdGVkRXhwYW5zaW9uICs9IHJ1bi5leHBhbnNpb247Ci0gICAg
fQotfQotCi1zdGF0aWMgVGV4dEFsaWduTW9kZSB0ZXh0QWxpZ25Gb3JMaW5lKGNvbnN0IFRleHRG
cmFnbWVudEl0ZXJhdG9yOjpTdHlsZSYgc3R5bGUsIGJvb2wgbGFzdExpbmUpCi17Ci0gICAgLy8g
RmFsbGJhY2sgdG8gVGV4dEFsaWduTW9kZTo6TGVmdCAoU1RBUlQpIGFsaWdubWVudCBmb3Igbm9u
LWNvbGxhcHNhYmxlIGNvbnRlbnQgYW5kIGZvciB0aGUgbGFzdCBsaW5lIGJlZm9yZSBhIGZvcmNl
ZCBicmVhayBvciB0aGUgZW5kIG9mIHRoZSBibG9jay4KLSAgICBhdXRvIHRleHRBbGlnbiA9IHN0
eWxlLnRleHRBbGlnbjsKLSAgICBpZiAodGV4dEFsaWduID09IFRleHRBbGlnbk1vZGU6Okp1c3Rp
ZnkgJiYgKCFzdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2UgfHwgbGFzdExpbmUpKQotICAgICAgICB0
ZXh0QWxpZ24gPSBUZXh0QWxpZ25Nb2RlOjpMZWZ0OwotICAgIHJldHVybiB0ZXh0QWxpZ247Ci19
Ci0KLXN0YXRpYyB2b2lkIGNsb3NlTGluZUVuZGluZ0FuZEFkanVzdFJ1bnMoTGluZVN0YXRlJiBs
aW5lLCBMYXlvdXQ6OlJ1blZlY3RvciYgcnVucywgT3B0aW9uYWw8dW5zaWduZWQ+IGxhc3RSdW5J
bmRleE9mUHJldmlvdXNMaW5lLCB1bnNpZ25lZCYgbGluZUNvdW50LAotICAgIGNvbnN0IFRleHRG
cmFnbWVudEl0ZXJhdG9yJiB0ZXh0RnJhZ21lbnRJdGVyYXRvciwgYm9vbCBsYXN0TGluZUluRmxv
dykKLXsKLSAgICBpZiAoIXJ1bnMuc2l6ZSgpIHx8IChsYXN0UnVuSW5kZXhPZlByZXZpb3VzTGlu
ZSAmJiBydW5zLnNpemUoKSAtIDEgPT0gbGFzdFJ1bkluZGV4T2ZQcmV2aW91c0xpbmUudmFsdWUo
KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IGF1dG8mIHN0eWxlID0gdGV4dEZyYWdt
ZW50SXRlcmF0b3Iuc3R5bGUoKTsKLQotICAgIGlmIChzdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2Up
Ci0gICAgICAgIGxpbmUucmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKHJ1bnMpOwotCi0gICAgaWYg
KCFydW5zLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQWRqdXN0IHJ1bnMnIHBv
c2l0aW9uIGJ5IHRha2luZyBsaW5lJ3MgYWxpZ25tZW50IGludG8gYWNjb3VudC4KLSAgICBhdXRv
IGZpcnN0UnVuSW5kZXggPSBsYXN0UnVuSW5kZXhPZlByZXZpb3VzTGluZSA/IGxhc3RSdW5JbmRl
eE9mUHJldmlvdXNMaW5lLnZhbHVlKCkgKyAxIDogMDsKLSAgICBhdXRvIGxpbmVMb2dpY2FsTGVm
dCA9IGxpbmUubG9naWNhbExlZnRPZmZzZXQoKTsKLSAgICBhdXRvIHRleHRBbGlnbiA9IHRleHRB
bGlnbkZvckxpbmUoc3R5bGUsIGxhc3RMaW5lSW5GbG93IHx8IChsaW5lLmxhc3RGcmFnbWVudCgp
LmlzVmFsaWQoKSAmJiBsaW5lLmxhc3RGcmFnbWVudCgpLnR5cGUoKSA9PSBUZXh0RnJhZ21lbnRJ
dGVyYXRvcjo6VGV4dEZyYWdtZW50OjpIYXJkTGluZUJyZWFrKSk7Ci0KLSAgICAvLyBodHRwczov
L3d3dy53My5vcmcvVFIvY3NzLXRleHQtMy8jd2hpdGUtc3BhY2UtcGhhc2UtMgotICAgIGJvb2wg
c2hvdWxkSGFuZ1RyYWlsaW5nV2hpdGVzcGFjZSA9IHN0eWxlLndyYXBMaW5lcyAmJiBsaW5lLnRy
YWlsaW5nV2hpdGVzcGFjZVdpZHRoKCk7Ci0gICAgYXV0byBoYW5naW5nV2hpdGVzcGFjZVdpZHRo
ID0gc2hvdWxkSGFuZ1RyYWlsaW5nV2hpdGVzcGFjZSA/IGxpbmUudHJhaWxpbmdXaGl0ZXNwYWNl
V2lkdGgoKSA6IDA7Ci0KLSAgICBpZiAodGV4dEFsaWduID09IFRleHRBbGlnbk1vZGU6Okp1c3Rp
ZnkpIHsKLSAgICAgICAganVzdGlmeVJ1bnMobGluZSwgcnVucywgZmlyc3RSdW5JbmRleCk7Ci0g
ICAgICAgIGhhbmdpbmdXaGl0ZXNwYWNlV2lkdGggPSAwOwotICAgIH0gZWxzZQotICAgICAgICBs
aW5lTG9naWNhbExlZnQgPSBjb21wdXRlTGluZUxlZnQobGluZSwgdGV4dEFsaWduLCBoYW5naW5n
V2hpdGVzcGFjZVdpZHRoKTsKLQotICAgIGZvciAoYXV0byBpID0gZmlyc3RSdW5JbmRleDsgaSA8
IHJ1bnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcnVuc1tpXS5sb2dpY2FsTGVmdCArPSBsaW5l
TG9naWNhbExlZnQ7Ci0gICAgICAgIHJ1bnNbaV0ubG9naWNhbFJpZ2h0ICs9IGxpbmVMb2dpY2Fs
TGVmdDsKLSAgICB9Ci0KLSAgICBpZiAoc2hvdWxkSGFuZ1RyYWlsaW5nV2hpdGVzcGFjZSAmJiBo
YW5naW5nV2hpdGVzcGFjZVdpZHRoIDwgbGluZS50cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpKQot
ICAgICAgICBydW5zLmxhc3QoKS5sb2dpY2FsUmlnaHQgPSBydW5zLmxhc3QoKS5sb2dpY2FsUmln
aHQgLSAobGluZS50cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpIC0gaGFuZ2luZ1doaXRlc3BhY2VX
aWR0aCk7Ci0KLSAgICBydW5zLmxhc3QoKS5pc0VuZE9mTGluZSA9IHRydWU7Ci0gICAgKytsaW5l
Q291bnQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGNyZWF0ZVRleHRSdW5zKExheW91dDo6UnVuVmVjdG9y
JiBydW5zLCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIHVuc2lnbmVkJiBsaW5lQ291bnQpCi17Ci0g
ICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQmVmb3JlID0gZmxvdy5ib3JkZXJBbmRQYWRk
aW5nQmVmb3JlKCk7Ci0gICAgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0ID0gbGluZUhlaWdodEZyb21G
bG93KGZsb3cpOwotICAgIExpbmVTdGF0ZSBsaW5lOwotICAgIHVuc2lnbmVkIG51bWJlck9mUHJl
Y2VkaW5nTGluZXNXaXRoSHlwaGVuID0gMDsKLSAgICBib29sIGlzRW5kT2ZDb250ZW50ID0gZmFs
c2U7Ci0gICAgVGV4dEZyYWdtZW50SXRlcmF0b3IgdGV4dEZyYWdtZW50SXRlcmF0b3IgPSBUZXh0
RnJhZ21lbnRJdGVyYXRvcihmbG93KTsKLSAgICBPcHRpb25hbDx1bnNpZ25lZD4gbGFzdFJ1bklu
ZGV4T2ZQcmV2aW91c0xpbmU7Ci0gICAgZG8gewotICAgICAgICBmbG93LnNldExvZ2ljYWxIZWln
aHQobGluZUhlaWdodCAqIGxpbmVDb3VudCArIGJvcmRlckFuZFBhZGRpbmdCZWZvcmUpOwotICAg
ICAgICBMaW5lU3RhdGUgcHJldmlvdXNMaW5lID0gbGluZTsKLSAgICAgICAgbGluZSA9IExpbmVT
dGF0ZSgpOwotICAgICAgICB1cGRhdGVMaW5lQ29uc3RyYWlucyhmbG93LCBsaW5lLCBwcmV2aW91
c0xpbmUsIG51bWJlck9mUHJlY2VkaW5nTGluZXNXaXRoSHlwaGVuLCB0ZXh0RnJhZ21lbnRJdGVy
YXRvci5zdHlsZSgpLCAhbGluZUNvdW50KTsKLSAgICAgICAgaXNFbmRPZkNvbnRlbnQgPSBjcmVh
dGVMaW5lUnVucyhsaW5lLCBwcmV2aW91c0xpbmUsIHJ1bnMsIHRleHRGcmFnbWVudEl0ZXJhdG9y
KTsKLSAgICAgICAgY2xvc2VMaW5lRW5kaW5nQW5kQWRqdXN0UnVucyhsaW5lLCBydW5zLCBsYXN0
UnVuSW5kZXhPZlByZXZpb3VzTGluZSwgbGluZUNvdW50LCB0ZXh0RnJhZ21lbnRJdGVyYXRvciwg
aXNFbmRPZkNvbnRlbnQpOwotICAgICAgICBpZiAocnVucy5zaXplKCkpCi0gICAgICAgICAgICBs
YXN0UnVuSW5kZXhPZlByZXZpb3VzTGluZSA9IHJ1bnMuc2l6ZSgpIC0gMTsKLSAgICB9IHdoaWxl
ICghaXNFbmRPZkNvbnRlbnQpOwotfQotCi1SZWY8TGF5b3V0PiBjcmVhdGUoUmVuZGVyQmxvY2tG
bG93JiBmbG93KQotewotICAgIHVuc2lnbmVkIGxpbmVDb3VudCA9IDA7Ci0gICAgTGF5b3V0OjpS
dW5WZWN0b3IgcnVuczsKLSAgICBjcmVhdGVUZXh0UnVucyhydW5zLCBmbG93LCBsaW5lQ291bnQp
OwotICAgIHJldHVybiBMYXlvdXQ6OmNyZWF0ZShydW5zLCBsaW5lQ291bnQsIGZsb3cpOwotfQot
Ci1SZWY8TGF5b3V0PiBMYXlvdXQ6OmNyZWF0ZShjb25zdCBSdW5WZWN0b3ImIHJ1blZlY3Rvciwg
dW5zaWduZWQgbGluZUNvdW50LCBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrRmxvdykKLXsK
LSAgICB2b2lkKiBzbG90ID0gV1RGOjpmYXN0TWFsbG9jKHNpemVvZihMYXlvdXQpICsgc2l6ZW9m
KFJ1bikgKiBydW5WZWN0b3Iuc2l6ZSgpKTsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyAoTm90
TnVsbCwgc2xvdCkgTGF5b3V0KHJ1blZlY3RvciwgbGluZUNvdW50LCBibG9ja0Zsb3cpKTsKLX0K
LQotTGF5b3V0OjpMYXlvdXQoY29uc3QgUnVuVmVjdG9yJiBydW5WZWN0b3IsIHVuc2lnbmVkIGxp
bmVDb3VudCwgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBibG9ja0Zsb3cpCi0gICAgOiBtX2xpbmVD
b3VudChsaW5lQ291bnQpCi0gICAgLCBtX3J1bkNvdW50KHJ1blZlY3Rvci5zaXplKCkpCi0gICAg
LCBtX2Jsb2NrRmxvd1JlbmRlcmVyKGJsb2NrRmxvdykKLXsKLSAgICBtZW1jcHkobV9ydW5zLCBy
dW5WZWN0b3IuZGF0YSgpLCBtX3J1bkNvdW50ICogc2l6ZW9mKFJ1bikpOwotfQotCi1jb25zdCBS
dW5SZXNvbHZlciYgTGF5b3V0OjpydW5SZXNvbHZlcigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3J1
blJlc29sdmVyKQotICAgICAgICBtX3J1blJlc29sdmVyID0gbWFrZVVuaXF1ZTxSdW5SZXNvbHZl
cj4obV9ibG9ja0Zsb3dSZW5kZXJlciwgKnRoaXMpOwotICAgIHJldHVybiAqbV9ydW5SZXNvbHZl
cjsKLX0KLQotTGF5b3V0Ojp+TGF5b3V0KCkKLXsKLSAgICBzaW1wbGVMaW5lTGF5b3V0V2lsbEJl
RGVsZXRlZCgqdGhpcyk7Ci19Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDE2OTI2Y2Vj
M2IuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGlu
ZUxheW91dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCi0jaW5jbHVk
ZSAiU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmgiCi0jaW5jbHVkZSAiVGV4dEZsYWdzLmgiCi0j
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdt
YSB3YXJuaW5nKHB1c2gpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDIwMCkgLy8gRGlzYWJs
ZSAiemVyby1zaXplZCBhcnJheSBpbiBzdHJ1Y3QvdW5pb24iIHdhcm5pbmcKLSNlbmRpZgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlbmRlckJsb2NrRmxvdzsKLQotbmFtZXNwYWNl
IFNpbXBsZUxpbmVMYXlvdXQgewotCi1jbGFzcyBSdW5SZXNvbHZlcjsKLQotYm9vbCBjYW5Vc2VG
b3IoY29uc3QgUmVuZGVyQmxvY2tGbG93Jik7Ci1ib29sIGNhblVzZUZvckFmdGVyU3R5bGVDaGFu
Z2UoY29uc3QgUmVuZGVyQmxvY2tGbG93JiwgU3R5bGVEaWZmZXJlbmNlKTsKLUF2b2lkYW5jZVJl
YXNvbkZsYWdzIGNhblVzZUZvcldpdGhSZWFzb24oY29uc3QgUmVuZGVyQmxvY2tGbG93JiwgSW5j
bHVkZVJlYXNvbnMpOwotCi1zdHJ1Y3QgUnVuIHsKLSNpZiBDT01QSUxFUihNU1ZDKQotICAgIFJ1
bigpIHsgfQotI2VuZGlmCi0gICAgUnVuKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGZs
b2F0IGxvZ2ljYWxMZWZ0LCBmbG9hdCBsb2dpY2FsUmlnaHQsIGJvb2wgaXNFbmRPZkxpbmUsIGJv
b2wgaGFzSHlwaGVuLCBib29sIGlzTGluZUJyZWFrKQotICAgICAgICA6IGVuZChlbmQpCi0gICAg
ICAgICwgc3RhcnQoc3RhcnQpCi0gICAgICAgICwgaXNFbmRPZkxpbmUoaXNFbmRPZkxpbmUpCi0g
ICAgICAgICwgaGFzSHlwaGVuKGhhc0h5cGhlbikKLSAgICAgICAgLCBpc0xpbmVCcmVhayhpc0xp
bmVCcmVhaykKLSAgICAgICAgLCBsb2dpY2FsTGVmdChsb2dpY2FsTGVmdCkKLSAgICAgICAgLCBs
b2dpY2FsUmlnaHQobG9naWNhbFJpZ2h0KQotICAgIHsgfQotCi0gICAgdW5zaWduZWQgZW5kOwot
ICAgIHVuc2lnbmVkIHN0YXJ0IDogMjk7Ci0gICAgdW5zaWduZWQgaXNFbmRPZkxpbmUgOiAxOwot
ICAgIHVuc2lnbmVkIGhhc0h5cGhlbiA6IDE7Ci0gICAgdW5zaWduZWQgaXNMaW5lQnJlYWsgOiAx
OwotICAgIGZsb2F0IGxvZ2ljYWxMZWZ0OwotICAgIGZsb2F0IGxvZ2ljYWxSaWdodDsKLSAgICAv
LyBUT0RPOiBNb3ZlIHRoZXNlIG9wdGlvbmFsIGl0ZW1zIG91dCBvZiBTaW1wbGVMaW5lTGF5b3V0
OjpSdW4gdG8gYSBzdXBwbGVtZW50YXJ5IHN0cnVjdHVyZS4KLSAgICBmbG9hdCBleHBhbnNpb24g
eyAwIH07Ci0gICAgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IgeyBGb3JiaWRM
ZWZ0RXhwYW5zaW9uIHwgRm9yYmlkUmlnaHRFeHBhbnNpb24gfTsKLX07Ci0KLXN0cnVjdCBTaW1w
bGVMaW5lU3RydXQgewotICAgIHVuc2lnbmVkIGxpbmVCcmVhazsKLSAgICBmbG9hdCBvZmZzZXQ7
Ci19OwotCi1jbGFzcyBMYXlvdXQgOiBwdWJsaWMgUmVmQ291bnRlZDxMYXlvdXQ+IHsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICB1c2luZyBSdW5WZWN0b3IgPSBW
ZWN0b3I8UnVuLCAxMD47Ci0gICAgdXNpbmcgU2ltcGxlTGluZVN0cnV0cyA9IFZlY3RvcjxTaW1w
bGVMaW5lU3RydXQsIDQ+OwotICAgIHN0YXRpYyBSZWY8TGF5b3V0PiBjcmVhdGUoY29uc3QgUnVu
VmVjdG9yJiwgdW5zaWduZWQgbGluZUNvdW50LCBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmKTsKLQot
ICAgIH5MYXlvdXQoKTsKLQotICAgIHVuc2lnbmVkIGxpbmVDb3VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGluZUNvdW50OyB9Ci0KLSAgICB1bnNpZ25lZCBydW5Db3VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fcnVuQ291bnQ7IH0KLSAgICBjb25zdCBSdW4mIHJ1bkF0KHVuc2lnbmVkIGkpIGNvbnN0IHsg
cmV0dXJuIG1fcnVuc1tpXTsgfQotCi0gICAgdm9pZCBzZXRJc1BhZ2luYXRlZCgpIHsgbV9pc1Bh
Z2luYXRlZCA9IHRydWU7IH0KLSAgICBib29sIGlzUGFnaW5hdGVkKCkgY29uc3QgeyByZXR1cm4g
bV9pc1BhZ2luYXRlZDsgfQotICAgIGJvb2wgaGFzTGluZVN0cnV0cygpIGNvbnN0IHsgcmV0dXJu
ICFtX2xpbmVTdHJ1dHMuaXNFbXB0eSgpOyB9Ci0gICAgdm9pZCBzZXRMaW5lU3RydXRzKFNpbXBs
ZUxpbmVTdHJ1dHMmJiBsaW5lU3RydXRzKSB7IG1fbGluZVN0cnV0cyA9IGxpbmVTdHJ1dHM7IH0K
LSAgICBjb25zdCBTaW1wbGVMaW5lU3RydXRzJiBzdHJ1dHMoKSBjb25zdCB7IHJldHVybiBtX2xp
bmVTdHJ1dHM7IH0KLSAgICBjb25zdCBSdW5SZXNvbHZlciYgcnVuUmVzb2x2ZXIoKSBjb25zdDsK
LQotcHJpdmF0ZToKLSAgICBMYXlvdXQoY29uc3QgUnVuVmVjdG9yJiwgdW5zaWduZWQgbGluZUNv
dW50LCBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmKTsKLQotICAgIHVuc2lnbmVkIG1fbGluZUNvdW50
OwotICAgIHVuc2lnbmVkIG1fcnVuQ291bnQ7Ci0gICAgYm9vbCBtX2lzUGFnaW5hdGVkIHsgZmFs
c2UgfTsKLSAgICBTaW1wbGVMaW5lU3RydXRzIG1fbGluZVN0cnV0czsKLSAgICBjb25zdCBSZW5k
ZXJCbG9ja0Zsb3cmIG1fYmxvY2tGbG93UmVuZGVyZXI7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1
ZV9wdHI8UnVuUmVzb2x2ZXI+IG1fcnVuUmVzb2x2ZXI7Ci0gICAgUnVuIG1fcnVuc1swXTsKLX07
Ci0KLVJlZjxMYXlvdXQ+IGNyZWF0ZShSZW5kZXJCbG9ja0Zsb3cmKTsKLQotfQotfQotCi0jaWYg
Q09NUElMRVIoTVNWQykKLSNwcmFnbWEgd2FybmluZyhwb3ApCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NjgxMTYzODI4MC4uMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMzcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmgiCi0KLSNpbmNs
dWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCi0jaW5jbHVkZSAi
UmVuZGVyQ2hpbGRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU2ltcGxl
TGluZUxheW91dC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewotCi0jaWZuZGVmIE5E
RUJVRwotc3RhdGljIHZvaWQgcHJpbnRSZWFzb24oQXZvaWRhbmNlUmVhc29uIHJlYXNvbiwgVGV4
dFN0cmVhbSYgc3RyZWFtKQotewotICAgIHN3aXRjaCAocmVhc29uKSB7Ci0gICAgY2FzZSBGbG93
SXNJbnNpZGVBTm9uTXVsdGlDb2x1bW5UaHJlYWQ6Ci0gICAgICAgIHN0cmVhbSA8PCAiZmxvdyBp
cyBpbnNpZGUgYSBub24tbXVsdGljb2x1bW4gY29udGFpbmVyIjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBGbG93SGFzSG9yaXpvbmFsV3JpdGluZ01vZGU6Ci0gICAgICAgIHN0cmVhbSA8PCAi
aG9yaXpvbnRhbCB3cml0aW5nIG1vZGUiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dI
YXNPdXRsaW5lOgotICAgICAgICBzdHJlYW0gPDwgIm91dGxpbmUiOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZsb3dJc1J1Ynk6Ci0gICAgICAgIHN0cmVhbSA8PCAicnVieSI7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc0hhbmdpbmdQdW5jdHVhdGlvbjoKLSAgICAgICAgc3Ry
ZWFtIDw8ICJoYW5naW5nIHB1bmN0dWF0aW9uIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
bG93SXNQYWdpbmF0ZWQ6Ci0gICAgICAgIHN0cmVhbSA8PCAicGFnaW5hdGVkIjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzVGV4dE92ZXJmbG93OgotICAgICAgICBzdHJlYW0gPDwg
InRleHQtb3ZlcmZsb3ciOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dJc0RlcHJpY2F0
ZWRGbGV4Qm94OgotICAgICAgICBzdHJlYW0gPDwgImRlcHJpY2F0ZWRGbGV4Qm94IjsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93UGFyZW50SXNQbGFjZWhvbGRlckVsZW1lbnQ6Ci0gICAg
ICAgIHN0cmVhbSA8PCAicGxhY2Vob2xkZXIgZWxlbWVudCI7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRmxvd1BhcmVudElzVGV4dEFyZWFXaXRoV3JhcHBpbmc6Ci0gICAgICAgIHN0cmVhbSA8
PCAid3JhcHBpbmcgdGV4dGFyZWEiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNO
b25TdXBwb3J0ZWRDaGlsZDoKLSAgICAgICAgc3RyZWFtIDw8ICJuZXN0ZWQgcmVuZGVyZXJzIjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzVW5zdXBwb3J0ZWRGbG9hdDoKLSAgICAg
ICAgc3RyZWFtIDw8ICJjb21wbGljYXRlZCBmbG9hdCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRmxvd0hhc1Vuc3VwcG9ydGVkVW5kZXJsaW5lRGVjb3JhdGlvbjoKLSAgICAgICAgc3RyZWFt
IDw8ICJ0ZXh0LXVuZGVybGluZS1wb3NpdGlvbjogdW5kZXIiOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZsb3dIYXNKdXN0aWZpZWROb25MYXRpblRleHQ6Ci0gICAgICAgIHN0cmVhbSA8PCAi
dGV4dC1hbGlnbjoganVzdGlmeSB3aXRoIG5vbi1sYXRpbiB0ZXh0IjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGbG93SGFzT3ZlcmZsb3dOb3RWaXNpYmxlOgotICAgICAgICBzdHJlYW0gPDwg
Im92ZXJmbG93OiBoaWRkZW4gfCBzY3JvbGwgfCBhdXRvIjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGbG93SGFzV2ViS2l0TkJTUE1vZGU6Ci0gICAgICAgIHN0cmVhbSA8PCAiLXdlYmtpdC1u
YnNwLW1vZGU6IHNwYWNlIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SXNOb3RMVFI6
Ci0gICAgICAgIHN0cmVhbSA8PCAiZGlyIGlzIG5vdCBMVFIiOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZsb3dIYXNMaW5lQm94Q29udGFpblByb3BlcnR5OgotICAgICAgICBzdHJlYW0gPDwg
ImxpbmUtYm94LWNvbnRhaW4gdmFsdWUgaW5kaWNhdGVzIHZhcmlhYmxlIGxpbmUgaGVpZ2h0IjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SXNOb3RUb3BUb0JvdHRvbToKLSAgICAgICAg
c3RyZWFtIDw8ICJub24gdG9wLXRvLWJvdHRvbSBmbG93IjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGbG93SGFzTGluZUJyZWFrOgotICAgICAgICBzdHJlYW0gPDwgImxpbmUtYnJlYWsgcHJv
cGVydHkiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNOb25Ob3JtYWxVbmljb2Rl
QmlEaToKLSAgICAgICAgc3RyZWFtIDw8ICJub24tbm9ybWFsIFVuaWNvZGUgYmlkaSI7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc1JUTE9yZGVyaW5nOgotICAgICAgICBzdHJlYW0g
PDwgIi13ZWJraXQtcnRsLW9yZGVyaW5nIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93
SGFzTGluZUFsaWduRWRnZXM6Ci0gICAgICAgIHN0cmVhbSA8PCAiLXdlYmtpdC1saW5lLWFsaWdu
IGVkZ2VzIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzTGluZVNuYXA6Ci0gICAg
ICAgIHN0cmVhbSA8PCAiLXdlYmtpdC1saW5lLXNuYXAgcHJvcGVydHkiOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZsb3dIYXNUZXh0RW1waGFzaXNGaWxsT3JNYXJrOgotICAgICAgICBzdHJl
YW0gPDwgInRleHQtZW1waGFzaXMgKGZpbGwvbWFyaykiOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZsb3dIYXNQc2V1ZG9GaXJzdExpbmU6Ci0gICAgICAgIHN0cmVhbSA8PCAiZmlyc3QtbGlu
ZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc1BzZXVkb0ZpcnN0TGV0dGVyOgot
ICAgICAgICBzdHJlYW0gPDwgImZpcnN0LWxldHRlciI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRmxvd0hhc1RleHRDb21iaW5lOgotICAgICAgICBzdHJlYW0gPDwgInRleHQgY29tYmluZSI7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc1RleHRGaWxsQm94OgotICAgICAgICBz
dHJlYW0gPDwgImJhY2tncm91bmQtY29sb3IgKHRleHQtZmlsbCkiOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZsb3dIYXNCb3JkZXJGaXRMaW5lczoKLSAgICAgICAgc3RyZWFtIDw8ICItd2Vi
a2l0LWJvcmRlci1maXQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNOb25BdXRv
TGluZUJyZWFrOgotICAgICAgICBzdHJlYW0gPDwgImxpbmUtYnJlYWsgaXMgbm90IGF1dG8iOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNUZXh0U2VjdXJpdHk6Ci0gICAgICAgIHN0
cmVhbSA8PCAidGV4dC1zZWN1cml0eSBpcyBub3Qgbm9uZSI7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRmxvd0hhc1NWR0ZvbnQ6Ci0gICAgICAgIHN0cmVhbSA8PCAiU1ZHIGZvbnQiOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dUZXh0SGFzU29mdEh5cGhlbjoKLSAgICAgICAgc3Ry
ZWFtIDw8ICJzb2Z0IGh5cGhlbiBjaGFyYWN0ZXIiOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEZsb3dUZXh0SGFzRGlyZWN0aW9uQ2hhcmFjdGVyOgotICAgICAgICBzdHJlYW0gPDwgImRpcmVj
dGlvbiBjaGFyYWN0ZXIiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dJc01pc3NpbmdQ
cmltYXJ5Rm9udDoKLSAgICAgICAgc3RyZWFtIDw8ICJtaXNzaW5nIHByaW1hcnkgZm9udCI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd1ByaW1hcnlGb250SXNJbnN1ZmZpY2llbnQ6Ci0g
ICAgICAgIHN0cmVhbSA8PCAibWlzc2luZyBnbHlwaCBvciBnbHlwaCBuZWVkcyBhbm90aGVyIGZv
bnQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dUZXh0SXNDb21iaW5lVGV4dDoKLSAg
ICAgICAgc3RyZWFtIDw8ICJ0ZXh0IGlzIGNvbWJpbmUiOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZsb3dUZXh0SXNSZW5kZXJDb3VudGVyOgotICAgICAgICBzdHJlYW0gPDwgInVuc3VwcG9y
dGVkIFJlbmRlckNvdW50ZXIiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dUZXh0SXNS
ZW5kZXJRdW90ZToKLSAgICAgICAgc3RyZWFtIDw8ICJ1bnN1cHBvcnRlZCBSZW5kZXJRdW90ZSI7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd1RleHRJc1RleHRGcmFnbWVudDoKLSAgICAg
ICAgc3RyZWFtIDw8ICJ1bnN1cHBvcnRlZCBUZXh0RnJhZ21lbnQiOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZsb3dUZXh0SXNTVkdJbmxpbmVUZXh0OgotICAgICAgICBzdHJlYW0gPDwgInVu
c3VwcG9ydGVkIFNWR0lubGluZVRleHQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dI
YXNDb21wbGV4Rm9udENvZGVQYXRoOgotICAgICAgICBzdHJlYW0gPDwgInRleHQgd2l0aCBjb21w
bGV4IGZvbnQgY29kZXBhdGgiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNUZXh0
U2hhZG93OgotICAgICAgICBzdHJlYW0gPDwgInRleHQtc2hhZG93IjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGbG93Q2hpbGRJc1NlbGVjdGVkOgotICAgICAgICBzdHJlYW0gPDwgInNlbGVj
dGVkIGNvbnRlbnQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dGb250SGFzT3ZlcmZs
b3dHbHlwaDoKLSAgICAgICAgc3RyZWFtIDw8ICItd2Via2l0LWxpbmUtYm94LWNvbnRhaW46IGds
eXBocyB3aXRoIG92ZXJmbG93aW5nIHRleHQuIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
bG93VGV4dEhhc1N1cnJvZ2F0ZVBhaXI6Ci0gICAgICAgIHN0cmVhbSA8PCAic3Vycm9nYXRlIHBh
aXIiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE11bHRpQ29sdW1uRmxvd0lzTm90VG9wTGV2
ZWw6Ci0gICAgICAgIHN0cmVhbSA8PCAibm9uIHRvcCBsZXZlbCBjb2x1bW4iOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIE11bHRpQ29sdW1uRmxvd0hhc0NvbHVtblNwYW5uZXI6Ci0gICAgICAg
IHN0cmVhbSA8PCAiY29sdW1uIGhhcyBzcGFubmVyIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBNdWx0aUNvbHVtbkZsb3dWZXJ0aWNhbEFsaWduOgotICAgICAgICBzdHJlYW0gPDwgImNvbHVt
biB3aXRoIHZlcnRpY2FsLWFsaWduICE9IGJhc2VsaW5lIjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBNdWx0aUNvbHVtbkZsb3dJc0Zsb2F0aW5nOgotICAgICAgICBzdHJlYW0gPDwgImNvbHVt
biB3aXRoIGZsb2F0aW5nIG9iamVjdHMiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dJ
bmNsdWRlc0RvY3VtZW50TWFya2VyczoKLSAgICAgICAgc3RyZWFtIDw8ICJ0ZXh0IGluY2x1ZGVz
IGRvY3VtZW50IG1hcmtlcnMiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dUZXh0SXNF
bXB0eToKLSAgICBjYXNlIEZsb3dIYXNOb0NoaWxkOgotICAgIGNhc2UgRmxvd0hhc05vUGFyZW50
OgotICAgIGNhc2UgRmVhdHVyZUlzRGlzYWJsZWQ6Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBwcmludFJlYXNvbnMoQXZvaWRhbmNlUmVhc29u
RmxhZ3MgcmVhc29ucywgVGV4dFN0cmVhbSYgc3RyZWFtKQotewotICAgIGJvb2wgZmlyc3QgPSB0
cnVlOwotICAgIGZvciAoYXV0byByZWFzb25JdGVtID0gRW5kT2ZSZWFzb25zID4+IDE7IHJlYXNv
bkl0ZW0gIT0gTm9SZWFzb247IHJlYXNvbkl0ZW0gPj49IDEpIHsKLSAgICAgICAgaWYgKCEocmVh
c29ucyAmIHJlYXNvbkl0ZW0pKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHN0cmVh
bSA8PCAoZmlyc3QgPyAiICIgOiAiLCAiKTsKLSAgICAgICAgZmlyc3QgPSBmYWxzZTsKLSAgICAg
ICAgcHJpbnRSZWFzb24ocmVhc29uSXRlbSwgc3RyZWFtKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2
b2lkIHByaW50VGV4dEZvclN1YnRyZWUoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgdW5z
aWduZWQmIGNoYXJhY3RlcnNMZWZ0LCBUZXh0U3RyZWFtJiBzdHJlYW0pCi17Ci0gICAgaWYgKCFj
aGFyYWN0ZXJzTGVmdCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChpczxSZW5kZXJUZXh0Pihy
ZW5kZXJlcikpIHsKLSAgICAgICAgU3RyaW5nIHRleHQgPSBkb3duY2FzdDxSZW5kZXJUZXh0Pihy
ZW5kZXJlcikudGV4dCgpOwotICAgICAgICB0ZXh0ID0gdGV4dC5zdHJpcFdoaXRlU3BhY2UoKTsK
LSAgICAgICAgdW5zaWduZWQgbGVuID0gc3RkOjptaW4oY2hhcmFjdGVyc0xlZnQsIHRleHQubGVu
Z3RoKCkpOwotICAgICAgICBzdHJlYW0gPDwgdGV4dC5sZWZ0KGxlbik7Ci0gICAgICAgIGNoYXJh
Y3RlcnNMZWZ0IC09IGxlbjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWlzPFJl
bmRlckVsZW1lbnQ+KHJlbmRlcmVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZvciAoY29uc3Qg
YXV0byogY2hpbGQgPSBkb3duY2FzdDxSZW5kZXJFbGVtZW50PihyZW5kZXJlcikuZmlyc3RDaGls
ZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgcHJpbnRU
ZXh0Rm9yU3VidHJlZSgqY2hpbGQsIGNoYXJhY3RlcnNMZWZ0LCBzdHJlYW0pOwotfQotCi1zdGF0
aWMgdW5zaWduZWQgdGV4dExlbmd0aEZvclN1YnRyZWUoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5k
ZXJlcikKLXsKLSAgICBpZiAoaXM8UmVuZGVyVGV4dD4ocmVuZGVyZXIpKQotICAgICAgICByZXR1
cm4gZG93bmNhc3Q8UmVuZGVyVGV4dD4ocmVuZGVyZXIpLnRleHQoKS5sZW5ndGgoKTsKLSAgICBp
ZiAoIWlzPFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
dW5zaWduZWQgdGV4dExlbmd0aCA9IDA7Ci0gICAgZm9yIChjb25zdCBhdXRvKiBjaGlsZCA9IGRv
d25jYXN0PFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICB0ZXh0TGVuZ3RoICs9IHRleHRMZW5n
dGhGb3JTdWJ0cmVlKCpjaGlsZCk7Ci0gICAgcmV0dXJuIHRleHRMZW5ndGg7Ci19Ci0KLXN0YXRp
YyB2b2lkIGNvbGxlY3ROb25FbXB0eUxlYWZSZW5kZXJCbG9ja0Zsb3dzKGNvbnN0IFJlbmRlck9i
amVjdCYgcmVuZGVyZXIsIEhhc2hTZXQ8Y29uc3QgUmVuZGVyQmxvY2tGbG93Kj4mIGxlYWZSZW5k
ZXJlcnMpCi17Ci0gICAgaWYgKGlzPFJlbmRlclRleHQ+KHJlbmRlcmVyKSkgewotICAgICAgICBp
ZiAoIWRvd25jYXN0PFJlbmRlclRleHQ+KHJlbmRlcmVyKS50ZXh0KCkubGVuZ3RoKCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIC8vIEZpbmQgUmVuZGVyQmxvY2tGbG93IGFuY2VzdG9y
LgotICAgICAgICBmb3IgKGNvbnN0IGF1dG8qIGN1cnJlbnQgPSByZW5kZXJlci5wYXJlbnQoKTsg
Y3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudCgpKSB7Ci0gICAgICAgICAgICBpZiAo
IWlzPFJlbmRlckJsb2NrRmxvdz4oY3VycmVudCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBsZWFmUmVuZGVyZXJzLmFkZChkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+
KGN1cnJlbnQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaWYgKCFpczxSZW5kZXJFbGVtZW50PihyZW5kZXJlcikpCi0gICAgICAg
IHJldHVybjsKLSAgICBmb3IgKGNvbnN0IGF1dG8qIGNoaWxkID0gZG93bmNhc3Q8UmVuZGVyRWxl
bWVudD4ocmVuZGVyZXIpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCkpCi0gICAgICAgIGNvbGxlY3ROb25FbXB0eUxlYWZSZW5kZXJCbG9ja0Zsb3dzKCpj
aGlsZCwgbGVhZlJlbmRlcmVycyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbGxlY3ROb25FbXB0eUxl
YWZSZW5kZXJCbG9ja0Zsb3dzRm9yQ3VycmVudFBhZ2UoSGFzaFNldDxjb25zdCBSZW5kZXJCbG9j
a0Zsb3cqPiYgbGVhZlJlbmRlcmVycykKLXsKLSAgICBmb3IgKGNvbnN0IGF1dG8qIGRvY3VtZW50
IDogRG9jdW1lbnQ6OmFsbERvY3VtZW50cygpKSB7Ci0gICAgICAgIGlmICghZG9jdW1lbnQtPnJl
bmRlclZpZXcoKSB8fCBkb2N1bWVudC0+YmFja0ZvcndhcmRDYWNoZVN0YXRlKCkgIT0gRG9jdW1l
bnQ6Ok5vdEluQmFja0ZvcndhcmRDYWNoZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAoIWRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpICYmICFkb2N1bWVudC0+aXNYSFRNTERv
Y3VtZW50KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29sbGVjdE5vbkVtcHR5
TGVhZlJlbmRlckJsb2NrRmxvd3MoKmRvY3VtZW50LT5yZW5kZXJWaWV3KCksIGxlYWZSZW5kZXJl
cnMpOwotICAgIH0KLX0KLQotdm9pZCB0b2dnbGVTaW1wbGVMaW5lTGF5b3V0KCkKLXsKLSAgICBm
b3IgKGF1dG8qIGRvY3VtZW50IDogRG9jdW1lbnQ6OmFsbERvY3VtZW50cygpKSB7Ci0gICAgICAg
IGF1dG8mIHNldHRpbmdzID0gZG9jdW1lbnQtPm11dGFibGVTZXR0aW5ncygpOwotICAgICAgICBz
ZXR0aW5ncy5zZXRTaW1wbGVMaW5lTGF5b3V0RW5hYmxlZCghc2V0dGluZ3Muc2ltcGxlTGluZUxh
eW91dEVuYWJsZWQoKSk7Ci0gICAgfQotfQotCi12b2lkIHByaW50U2ltcGxlTGluZUxheW91dEJs
b2NrTGlzdCgpCi17Ci0gICAgSGFzaFNldDxjb25zdCBSZW5kZXJCbG9ja0Zsb3cqPiBsZWFmUmVu
ZGVyZXJzOwotICAgIGNvbGxlY3ROb25FbXB0eUxlYWZSZW5kZXJCbG9ja0Zsb3dzRm9yQ3VycmVu
dFBhZ2UobGVhZlJlbmRlcmVycyk7Ci0gICAgaWYgKCFsZWFmUmVuZGVyZXJzLnNpemUoKSkgewot
ICAgICAgICBXVEZMb2dBbHdheXMoIk5vIHRleHQgZm91bmQgaW4gdGhpcyBkb2N1bWVudFxuIik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgVGV4dFN0cmVhbSBzdHJlYW07Ci0gICAgc3Ry
ZWFtIDw8ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS1cbiI7Ci0gICAgZm9yIChjb25zdCBhdXRvKiBmbG93IDogbGVhZlJlbmRlcmVycykgewotICAg
ICAgICBhdXRvIHJlYXNvbiA9IGNhblVzZUZvcldpdGhSZWFzb24oKmZsb3csIEluY2x1ZGVSZWFz
b25zOjpBbGwpOwotICAgICAgICBpZiAocmVhc29uID09IE5vUmVhc29uKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIHVuc2lnbmVkIHByaW50ZWRMZW5ndGggPSAzMDsKLSAgICAgICAg
c3RyZWFtIDw8ICJcIiI7Ci0gICAgICAgIHByaW50VGV4dEZvclN1YnRyZWUoKmZsb3csIHByaW50
ZWRMZW5ndGgsIHN0cmVhbSk7Ci0gICAgICAgIGZvciAoO3ByaW50ZWRMZW5ndGggPiAwOyAtLXBy
aW50ZWRMZW5ndGgpCi0gICAgICAgICAgICBzdHJlYW0gPDwgIiAiOwotICAgICAgICBzdHJlYW0g
PDwgIlwiKCIgPDwgdGV4dExlbmd0aEZvclN1YnRyZWUoKmZsb3cpIDw8ICIpOiI7Ci0gICAgICAg
IHByaW50UmVhc29ucyhyZWFzb24sIHN0cmVhbSk7Ci0gICAgICAgIHN0cmVhbSA8PCAiXG4iOwot
ICAgIH0KLSAgICBzdHJlYW0gPDwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLVxuIjsKLSAgICBXVEZMb2dBbHdheXMoIiVzIiwgc3RyZWFtLnJlbGVh
c2UoKS51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBwcmludFNpbXBsZUxpbmVMYXlvdXRDb3Zl
cmFnZSgpCi17Ci0gICAgSGFzaFNldDxjb25zdCBSZW5kZXJCbG9ja0Zsb3cqPiBsZWFmUmVuZGVy
ZXJzOwotICAgIGNvbGxlY3ROb25FbXB0eUxlYWZSZW5kZXJCbG9ja0Zsb3dzRm9yQ3VycmVudFBh
Z2UobGVhZlJlbmRlcmVycyk7Ci0gICAgaWYgKCFsZWFmUmVuZGVyZXJzLnNpemUoKSkgewotICAg
ICAgICBXVEZMb2dBbHdheXMoIk5vIHRleHQgZm91bmQgaW4gdGhpcyBkb2N1bWVudFxuIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgVGV4dFN0cmVhbSBzdHJlYW07Ci0gICAgSGFzaE1h
cDxBdm9pZGFuY2VSZWFzb24sIHVuc2lnbmVkPiBmbG93U3RhdGlzdGljczsKLSAgICB1bnNpZ25l
ZCB0ZXh0TGVuZ3RoID0gMDsKLSAgICB1bnNpZ25lZCB1bnN1cHBvcnRlZFRleHRMZW5ndGggPSAw
OwotICAgIHVuc2lnbmVkIG51bWJlck9mVW5zdXBwb3J0ZWRMZWFmQmxvY2tzID0gMDsKLSAgICB1
bnNpZ25lZCBzdXBwb3J0ZWRCdXRGb3JjZWRUb0xpbmVMYXlvdXRUZXh0TGVuZ3RoID0gMDsKLSAg
ICB1bnNpZ25lZCBudW1iZXJPZlN1cHBvcnRlZEJ1dEZvcmNlZFRvTGluZUxheW91dExlYWZCbG9j
a3MgPSAwOwotICAgIGZvciAoY29uc3QgYXV0byogZmxvdyA6IGxlYWZSZW5kZXJlcnMpIHsKLSAg
ICAgICAgYXV0byBmbG93TGVuZ3RoID0gdGV4dExlbmd0aEZvclN1YnRyZWUoKmZsb3cpOwotICAg
ICAgICB0ZXh0TGVuZ3RoICs9IGZsb3dMZW5ndGg7Ci0gICAgICAgIGF1dG8gcmVhc29ucyA9IGNh
blVzZUZvcldpdGhSZWFzb24oKmZsb3csIEluY2x1ZGVSZWFzb25zOjpBbGwpOwotICAgICAgICBp
ZiAocmVhc29ucyA9PSBOb1JlYXNvbikgewotICAgICAgICAgICAgaWYgKGZsb3ctPmxpbmVMYXlv
dXRQYXRoKCkgPT0gUmVuZGVyQmxvY2tGbG93OjpGb3JjZUxpbmVCb3hlc1BhdGgpIHsKLSAgICAg
ICAgICAgICAgICBzdXBwb3J0ZWRCdXRGb3JjZWRUb0xpbmVMYXlvdXRUZXh0TGVuZ3RoICs9IGZs
b3dMZW5ndGg7Ci0gICAgICAgICAgICAgICAgKytudW1iZXJPZlN1cHBvcnRlZEJ1dEZvcmNlZFRv
TGluZUxheW91dExlYWZCbG9ja3M7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotICAgICAgICArK251bWJlck9mVW5zdXBwb3J0ZWRMZWFmQmxvY2tzOwot
ICAgICAgICB1bnN1cHBvcnRlZFRleHRMZW5ndGggKz0gZmxvd0xlbmd0aDsKLSAgICAgICAgZm9y
IChhdXRvIHJlYXNvbkl0ZW0gPSBFbmRPZlJlYXNvbnMgPj4gMTsgcmVhc29uSXRlbSAhPSBOb1Jl
YXNvbjsgcmVhc29uSXRlbSA+Pj0gMSkgewotICAgICAgICAgICAgaWYgKCEocmVhc29ucyAmIHJl
YXNvbkl0ZW0pKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSBmbG93U3RhdGlzdGljcy5hZGQocmVhc29uSXRlbSwgZmxvd0xlbmd0aCk7Ci0gICAg
ICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUgKz0gZmxvd0xlbmd0aDsKLSAgICAgICAgfQotICAgIH0KLSAgICBzdHJl
YW0gPDwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LVxuIjsKLSAgICBzdHJlYW0gPDwgIk51bWJlciBvZiBibG9ja3M6IHRvdGFsKCIgPDwgIGxlYWZS
ZW5kZXJlcnMuc2l6ZSgpIDw8ICIpIG5vbi1zaW1wbGUoIiA8PCBudW1iZXJPZlVuc3VwcG9ydGVk
TGVhZkJsb2NrcyA8PCAiKVxuQ29udGVudCBsZW5ndGg6IHRvdGFsKCIgPDwKLSAgICAgICAgdGV4
dExlbmd0aCA8PCAiKSBub24tc2ltcGxlKCIgPDwgdW5zdXBwb3J0ZWRUZXh0TGVuZ3RoIDw8ICIp
XG4iOwotICAgIGZvciAoY29uc3QgYXV0byYgcmVhc29uRW50cnkgOiBmbG93U3RhdGlzdGljcykg
ewotICAgICAgICBwcmludFJlYXNvbihyZWFzb25FbnRyeS5rZXksIHN0cmVhbSk7Ci0gICAgICAg
IHN0cmVhbSA8PCAiOiAiIDw8IChmbG9hdClyZWFzb25FbnRyeS52YWx1ZSAvIChmbG9hdCl0ZXh0
TGVuZ3RoICogMTAwIDw8ICIlXG4iOwotICAgIH0KLSAgICBpZiAoc3VwcG9ydGVkQnV0Rm9yY2Vk
VG9MaW5lTGF5b3V0VGV4dExlbmd0aCkgewotICAgICAgICBzdHJlYW0gPDwgIlNpbXBsZSBsaW5l
IGxheW91dCBwb3RlbnRpYWwgY292ZXJhZ2U6ICIgPDwgKGZsb2F0KSh0ZXh0TGVuZ3RoIC0gdW5z
dXBwb3J0ZWRUZXh0TGVuZ3RoKSAvIChmbG9hdCl0ZXh0TGVuZ3RoICogMTAwIDw8ICIlXG5cbiI7
Ci0gICAgICAgIHN0cmVhbSA8PCAiU2ltcGxlIGxpbmUgbGF5b3V0IGFjdHVhbCBjb3ZlcmFnZTog
IiA8PCAoZmxvYXQpKHRleHRMZW5ndGggLSB1bnN1cHBvcnRlZFRleHRMZW5ndGggLSBzdXBwb3J0
ZWRCdXRGb3JjZWRUb0xpbmVMYXlvdXRUZXh0TGVuZ3RoKSAvIChmbG9hdCl0ZXh0TGVuZ3RoICog
MTAwIDw8ICIlXG5Gb3JjZWQgbGluZSBsYXlvdXQgYmxvY2tzOiAiIDw8IG51bWJlck9mU3VwcG9y
dGVkQnV0Rm9yY2VkVG9MaW5lTGF5b3V0TGVhZkJsb2NrcyA8PCAiIGNvbnRlbnQgbGVuZ3RoOiAi
IDw8IHN1cHBvcnRlZEJ1dEZvcmNlZFRvTGluZUxheW91dFRleHRMZW5ndGggPDwgIigiIDw8IChm
bG9hdClzdXBwb3J0ZWRCdXRGb3JjZWRUb0xpbmVMYXlvdXRUZXh0TGVuZ3RoIC8gKGZsb2F0KXRl
eHRMZW5ndGggKiAxMDAgPDwgIiUpIjsKLSAgICB9IGVsc2UKLSAgICAgICAgc3RyZWFtIDw8ICJT
aW1wbGUgbGluZSBsYXlvdXQgY292ZXJhZ2U6ICIgPDwgKGZsb2F0KSh0ZXh0TGVuZ3RoIC0gdW5z
dXBwb3J0ZWRUZXh0TGVuZ3RoKSAvIChmbG9hdCl0ZXh0TGVuZ3RoICogMTAwIDw8ICIlIjsKLSAg
ICBzdHJlYW0gPDwgIlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tXG4iOwotICAgIFdURkxvZ0Fsd2F5cygiJXMiLCBzdHJlYW0ucmVsZWFzZSgpLnV0
ZjgoKS5kYXRhKCkpOwotfQotI2VuZGlmCi0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMzgyNGU5NTBjNGEwLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewotCi0jaWZuZGVmIE5ERUJVRwot
dm9pZCBwcmludFNpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZSgpOwotdm9pZCBwcmludFNpbXBsZUxp
bmVMYXlvdXRCbG9ja0xpc3QoKTsKLXZvaWQgdG9nZ2xlU2ltcGxlTGluZUxheW91dCgpOwotI2Vu
ZGlmCi0KLWVudW0gQXZvaWRhbmNlUmVhc29uXyA6IHVpbnQ2NF90IHsKLSAgICBGbG93SXNJbnNp
ZGVBTm9uTXVsdGlDb2x1bW5UaHJlYWQgICAgID0gMUxMVSAgPDwgMCwKLSAgICBGbG93SGFzSG9y
aXpvbmFsV3JpdGluZ01vZGUgICAgICAgICAgID0gMUxMVSAgPDwgMSwKLSAgICBGbG93SGFzT3V0
bGluZSAgICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMiwKLSAgICBGbG93SXNSdWJ5
ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMywKLSAgICBGbG93SXNQYWdp
bmF0ZWQgICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgNCwKLSAgICBGbG93SGFzVGV4
dE92ZXJmbG93ICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgNSwKLSAgICBGbG93SXNEZXBy
aWNhdGVkRmxleEJveCAgICAgICAgICAgICAgID0gMUxMVSAgPDwgNiwKLSAgICBGbG93UGFyZW50
SXNQbGFjZWhvbGRlckVsZW1lbnQgICAgICAgID0gMUxMVSAgPDwgNywKLSAgICBGbG93UGFyZW50
SXNUZXh0QXJlYVdpdGhXcmFwcGluZyAgICAgID0gMUxMVSAgPDwgOCwKLSAgICBGbG93SGFzTm9u
U3VwcG9ydGVkQ2hpbGQgICAgICAgICAgICAgID0gMUxMVSAgPDwgOSwKLSAgICBGbG93SGFzVW5z
dXBwb3J0ZWRGbG9hdCAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMTAsCi0gICAgRmxvd0hhc1Vu
c3VwcG9ydGVkVW5kZXJsaW5lRGVjb3JhdGlvbiA9IDFMTFUgIDw8IDExLAotICAgIEZsb3dIYXNK
dXN0aWZpZWROb25MYXRpblRleHQgICAgICAgICAgPSAxTExVICA8PCAxMiwKLSAgICBGbG93SGFz
T3ZlcmZsb3dOb3RWaXNpYmxlICAgICAgICAgICAgID0gMUxMVSAgPDwgMTMsCi0gICAgRmxvd0hh
c1dlYktpdE5CU1BNb2RlICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDE0LAotICAgIEZsb3dJ
c05vdExUUiAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAxNSwKLSAgICBGbG93
SGFzTGluZUJveENvbnRhaW5Qcm9wZXJ0eSAgICAgICAgID0gMUxMVSAgPDwgMTYsCi0gICAgRmxv
d0lzTm90VG9wVG9Cb3R0b20gICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDE3LAotICAgIEZs
b3dIYXNMaW5lQnJlYWsgICAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAxOCwKLSAgICBG
bG93SGFzTm9uTm9ybWFsVW5pY29kZUJpRGkgICAgICAgICAgID0gMUxMVSAgPDwgMTksCi0gICAg
Rmxvd0hhc1JUTE9yZGVyaW5nICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDIwLAotICAg
IEZsb3dIYXNMaW5lQWxpZ25FZGdlcyAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAyMSwKLSAg
ICBGbG93SGFzTGluZVNuYXAgICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjIsCi0g
ICAgRmxvd0hhc1RleHRFbXBoYXNpc0ZpbGxPck1hcmsgICAgICAgICA9IDFMTFUgIDw8IDIzLAot
ICAgIEZsb3dIYXNUZXh0U2hhZG93ICAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAyNCwK
LSAgICBGbG93SGFzUHNldWRvRmlyc3RMaW5lICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjUs
Ci0gICAgRmxvd0hhc1BzZXVkb0ZpcnN0TGV0dGVyICAgICAgICAgICAgICA9IDFMTFUgIDw8IDI2
LAotICAgIEZsb3dIYXNUZXh0Q29tYmluZSAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAy
NywKLSAgICBGbG93SGFzVGV4dEZpbGxCb3ggICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwg
MjgsCi0gICAgRmxvd0hhc0JvcmRlckZpdExpbmVzICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8
IDI5LAotICAgIEZsb3dIYXNOb25BdXRvTGluZUJyZWFrICAgICAgICAgICAgICAgPSAxTExVICA8
PCAzMCwKLSAgICBGbG93SGFzVGV4dFNlY3VyaXR5ICAgICAgICAgICAgICAgICAgID0gMUxMVSAg
PDwgMzEsCi0gICAgRmxvd0hhc1NWR0ZvbnQgICAgICAgICAgICAgICAgICAgICAgICA9IDFMTFUg
IDw8IDMyLAotICAgIEZsb3dUZXh0SXNFbXB0eSAgICAgICAgICAgICAgICAgICAgICAgPSAxTExV
ICA8PCAzMywKLSAgICBGbG93VGV4dEhhc1NvZnRIeXBoZW4gICAgICAgICAgICAgICAgID0gMUxM
VSAgPDwgMzQsCi0gICAgRmxvd1RleHRIYXNEaXJlY3Rpb25DaGFyYWN0ZXIgICAgICAgICA9IDFM
TFUgIDw8IDM1LAotICAgIEZsb3dJc01pc3NpbmdQcmltYXJ5Rm9udCAgICAgICAgICAgICAgPSAx
TExVICA8PCAzNiwKLSAgICBGbG93UHJpbWFyeUZvbnRJc0luc3VmZmljaWVudCAgICAgICAgID0g
MUxMVSAgPDwgMzcsCi0gICAgRmxvd1RleHRJc0NvbWJpbmVUZXh0ICAgICAgICAgICAgICAgICA9
IDFMTFUgIDw8IDM4LAotICAgIEZsb3dUZXh0SXNSZW5kZXJDb3VudGVyICAgICAgICAgICAgICAg
PSAxTExVICA8PCAzOSwKLSAgICBGbG93VGV4dElzUmVuZGVyUXVvdGUgICAgICAgICAgICAgICAg
ID0gMUxMVSAgPDwgNDAsCi0gICAgRmxvd1RleHRJc1RleHRGcmFnbWVudCAgICAgICAgICAgICAg
ICA9IDFMTFUgIDw8IDQxLAotICAgIEZsb3dUZXh0SXNTVkdJbmxpbmVUZXh0ICAgICAgICAgICAg
ICAgPSAxTExVICA8PCA0MiwKLSAgICBGbG93SGFzQ29tcGxleEZvbnRDb2RlUGF0aCAgICAgICAg
ICAgID0gMUxMVSAgPDwgNDMsCi0gICAgRmVhdHVyZUlzRGlzYWJsZWQgICAgICAgICAgICAgICAg
ICAgICA9IDFMTFUgIDw8IDQ0LAotICAgIEZsb3dIYXNOb1BhcmVudCAgICAgICAgICAgICAgICAg
ICAgICAgPSAxTExVICA8PCA0NSwKLSAgICBGbG93SGFzTm9DaGlsZCAgICAgICAgICAgICAgICAg
ICAgICAgID0gMUxMVSAgPDwgNDYsCi0gICAgRmxvd0NoaWxkSXNTZWxlY3RlZCAgICAgICAgICAg
ICAgICAgICA9IDFMTFUgIDw8IDQ3LAotICAgIEZsb3dIYXNIYW5naW5nUHVuY3R1YXRpb24gICAg
ICAgICAgICAgPSAxTExVICA8PCA0OCwKLSAgICBGbG93Rm9udEhhc092ZXJmbG93R2x5cGggICAg
ICAgICAgICAgID0gMUxMVSAgPDwgNDksCi0gICAgRmxvd1RleHRIYXNTdXJyb2dhdGVQYWlyICAg
ICAgICAgICAgICA9IDFMTFUgIDw8IDUwLAotICAgIE11bHRpQ29sdW1uRmxvd0lzTm90VG9wTGV2
ZWwgICAgICAgICAgPSAxTExVICA8PCA1MSwKLSAgICBNdWx0aUNvbHVtbkZsb3dIYXNDb2x1bW5T
cGFubmVyICAgICAgID0gMUxMVSAgPDwgNTIsCi0gICAgTXVsdGlDb2x1bW5GbG93VmVydGljYWxB
bGlnbiAgICAgICAgICA9IDFMTFUgIDw8IDUzLAotICAgIE11bHRpQ29sdW1uRmxvd0lzRmxvYXRp
bmcgICAgICAgICAgICAgPSAxTExVICA8PCA1NCwKLSAgICBGbG93SW5jbHVkZXNEb2N1bWVudE1h
cmtlcnMgICAgICAgICAgID0gMUxMVSAgPDwgNTUsCi0gICAgRW5kT2ZSZWFzb25zICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDU2Ci19OwotY29uc3QgdW5zaWduZWQgTm9SZWFz
b24gPSAwOwotCi10eXBlZGVmIHVpbnQ2NF90IEF2b2lkYW5jZVJlYXNvbjsKLXR5cGVkZWYgdWlu
dDY0X3QgQXZvaWRhbmNlUmVhc29uRmxhZ3M7Ci0KLWVudW0gY2xhc3MgSW5jbHVkZVJlYXNvbnMg
eyBGaXJzdCAsIEFsbCB9OwotCi19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDI5YjM2YTBmMzI3NS4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oIgotCi0jaW5jbHVkZSAi
UmVuZGVyQmxvY2tGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgotI2lu
Y2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgotI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewotCi1zdGF0aWMg
VmVjdG9yPEZsb3dDb250ZW50czo6U2VnbWVudD4gaW5pdGlhbGl6ZVNlZ21lbnRzKGNvbnN0IFJl
bmRlckJsb2NrRmxvdyYgZmxvdykKLXsKLSAgICB1bnNpZ25lZCBudW1iZXJPZkNoaWxkcmVuID0g
MDsKLSAgICBhdXRvIGNoaWxkcmVuID0gY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0PihmbG93
KTsKLSAgICBmb3IgKGF1dG8gaXQgPSBjaGlsZHJlbi5iZWdpbigpLCBlbmQgPSBjaGlsZHJlbi5l
bmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICArK251bWJlck9mQ2hpbGRyZW47Ci0gICAg
VmVjdG9yPEZsb3dDb250ZW50czo6U2VnbWVudD4gc2VnbWVudHM7Ci0gICAgc2VnbWVudHMucmVz
ZXJ2ZUNhcGFjaXR5KG51bWJlck9mQ2hpbGRyZW4pOwotICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRp
b24gPSAwOwotICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJPYmpl
Y3Q+KGZsb3cpKSB7Ci0gICAgICAgIGlmIChpczxSZW5kZXJUZXh0PihjaGlsZCkpIHsKLSAgICAg
ICAgICAgIGF1dG8mIHRleHRDaGlsZCA9IGRvd25jYXN0PFJlbmRlclRleHQ+KGNoaWxkKTsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSB0ZXh0Q2hpbGQudGV4dCgpLmxlbmd0aCgp
OwotICAgICAgICAgICAgc2VnbWVudHMuYXBwZW5kKEZsb3dDb250ZW50czo6U2VnbWVudCB7IHN0
YXJ0UG9zaXRpb24sIHN0YXJ0UG9zaXRpb24gKyB0ZXh0TGVuZ3RoLCB0ZXh0Q2hpbGQudGV4dCgp
LAotICAgICAgICAgICAgICAgIHRleHRDaGlsZCwgdGV4dENoaWxkLmNhblVzZVNpbXBsaWZpZWRU
ZXh0TWVhc3VyaW5nKCkgfSk7Ci0gICAgICAgICAgICBzdGFydFBvc2l0aW9uICs9IHRleHRMZW5n
dGg7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaXM8UmVu
ZGVyTGluZUJyZWFrPihjaGlsZCkpIHsKLSAgICAgICAgICAgIHNlZ21lbnRzLmFwcGVuZChGbG93
Q29udGVudHM6OlNlZ21lbnQgeyBzdGFydFBvc2l0aW9uLCBzdGFydFBvc2l0aW9uLCBTdHJpbmco
KSwgY2hpbGQsIHRydWUgfSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNlZ21lbnRzOwot
fQotCi1GbG93Q29udGVudHM6OkZsb3dDb250ZW50cyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZs
b3cpCi0gICAgOiBtX3NlZ21lbnRzKGluaXRpYWxpemVTZWdtZW50cyhmbG93KSkKLXsKLX0KLQot
dW5zaWduZWQgRmxvd0NvbnRlbnRzOjpzZWdtZW50SW5kZXhGb3JSdW5TbG93KHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBlbmQpIGNvbnN0Ci17Ci0gICAgYXV0byBpc0VtcHR5UmFuZ2UgPSBzdGFy
dCA9PSBlbmQ7Ci0gICAgYXV0byBpdCA9IHN0ZDo6bG93ZXJfYm91bmQobV9zZWdtZW50cy5iZWdp
bigpLCBtX3NlZ21lbnRzLmVuZCgpLCBzdGFydCwgW2lzRW1wdHlSYW5nZV0oY29uc3QgU2VnbWVu
dCYgc2VnbWVudCwgdW5zaWduZWQgc3RhcnQpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgYWx3
YXlzIGZpbmQgdGhlIGZpcnN0IGVtcHR5IHJ1biAoLnZzIHN1YnNlcXVlbnQgPGJyPiBlbGVtZW50
cykKLSAgICAgICAgcmV0dXJuIChpc0VtcHR5UmFuZ2UgJiYgc2VnbWVudC5zdGFydCA9PSBzZWdt
ZW50LmVuZCkgPyBzZWdtZW50LnN0YXJ0IDwgc3RhcnQgOiBzZWdtZW50LmVuZCA8PSBzdGFydDsK
LSAgICB9KTsKLSAgICBBU1NFUlQoaXQgIT0gbV9zZWdtZW50cy5lbmQoKSk7Ci0gICAgQVNTRVJU
KGVuZCA8PSBpdC0+ZW5kKTsKLSAgICBtX2xhc3RTZWdtZW50SW5kZXggPSBpdCAtIG1fc2VnbWVu
dHMuYmVnaW4oKTsKLSAgICByZXR1cm4gbV9sYXN0U2VnbWVudEluZGV4OwotfQotCi19Ci19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dD
b250ZW50cy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93
Q29udGVudHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU2M2Y2ODZhZDE0Li4w
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRGbG93Q29udGVudHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci1jbGFzcyBSZW5kZXJCbG9ja0Zsb3c7Ci0KLW5hbWVzcGFjZSBTaW1wbGVM
aW5lTGF5b3V0IHsKLQotY2xhc3MgRmxvd0NvbnRlbnRzIHsKLXB1YmxpYzoKLSAgICBGbG93Q29u
dGVudHMoY29uc3QgUmVuZGVyQmxvY2tGbG93Jik7Ci0KLSAgICBzdHJ1Y3QgU2VnbWVudCB7Ci0g
ICAgICAgIHVuc2lnbmVkIHRvU2VnbWVudFBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25z
dAotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocG9zaXRpb24gPj0gc3RhcnQpOwotICAg
ICAgICAgICAgcmV0dXJuIHBvc2l0aW9uIC0gc3RhcnQ7Ci0gICAgICAgIH0KLSAgICAgICAgdW5z
aWduZWQgdG9SZW5kZXJQb3NpdGlvbih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QgeyByZXR1cm4g
c3RhcnQgKyBwb3NpdGlvbjsgfQotICAgICAgICB1bnNpZ25lZCBzdGFydDsKLSAgICAgICAgdW5z
aWduZWQgZW5kOwotICAgICAgICBTdHJpbmdWaWV3IHRleHQ7Ci0gICAgICAgIGNvbnN0IFJlbmRl
ck9iamVjdCYgcmVuZGVyZXI7Ci0gICAgICAgIGJvb2wgY2FuVXNlU2ltcGxpZmllZFRleHRNZWFz
dXJpbmc7Ci0gICAgfTsKLSAgICBjb25zdCBTZWdtZW50JiBzZWdtZW50Rm9yUnVuKHVuc2lnbmVk
IHN0YXJ0LCB1bnNpZ25lZCBlbmQpIGNvbnN0OwotICAgIGNvbnN0IFNlZ21lbnQmIHNlZ21lbnRG
b3JQb3NpdGlvbih1bnNpZ25lZCkgY29uc3Q7Ci0KLSAgICB0eXBlZGVmIFZlY3RvcjxTZWdtZW50
LCA4Pjo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7Ci0gICAgSXRlcmF0b3IgYmVnaW4oKSBjb25z
dCB7IHJldHVybiBtX3NlZ21lbnRzLmJlZ2luKCk7IH0KLSAgICBJdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBtX3NlZ21lbnRzLmVuZCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgdW5zaWduZWQg
c2VnbWVudEluZGV4Rm9yUnVuU2xvdyh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKSBjb25z
dDsKLSAgICBjb25zdCBWZWN0b3I8U2VnbWVudD4gbV9zZWdtZW50czsKLSAgICBtdXRhYmxlIHVu
c2lnbmVkIG1fbGFzdFNlZ21lbnRJbmRleCB7IDAgfTsKLX07Ci0KLWlubGluZSBjb25zdCBGbG93
Q29udGVudHM6OlNlZ21lbnQmIEZsb3dDb250ZW50czo6c2VnbWVudEZvclJ1bih1bnNpZ25lZCBz
dGFydCwgdW5zaWduZWQgZW5kKSBjb25zdAotewotICAgIEFTU0VSVChzdGFydCA8PSBlbmQpOwot
ICAgIGF1dG8gaXNFbXB0eVJhbmdlID0gc3RhcnQgPT0gZW5kOwotICAgIGF1dG8mIGxhc3RTZWdt
ZW50ID0gbV9zZWdtZW50c1ttX2xhc3RTZWdtZW50SW5kZXhdOwotICAgIGlmICgobGFzdFNlZ21l
bnQuc3RhcnQgPD0gc3RhcnQgJiYgZW5kIDw9IGxhc3RTZWdtZW50LmVuZCkgJiYgKCFpc0VtcHR5
UmFuZ2UgfHwgZW5kICE9IGxhc3RTZWdtZW50LmVuZCkpCi0gICAgICAgIHJldHVybiBtX3NlZ21l
bnRzW21fbGFzdFNlZ21lbnRJbmRleF07Ci0gICAgcmV0dXJuIG1fc2VnbWVudHNbc2VnbWVudElu
ZGV4Rm9yUnVuU2xvdyhzdGFydCwgZW5kKV07Ci19Ci0KLWlubGluZSBjb25zdCBGbG93Q29udGVu
dHM6OlNlZ21lbnQmIEZsb3dDb250ZW50czo6c2VnbWVudEZvclBvc2l0aW9uKHVuc2lnbmVkIHBv
c2l0aW9uKSBjb25zdAotewotICAgIGF1dG8gaXQgPSBzdGQ6Omxvd2VyX2JvdW5kKG1fc2VnbWVu
dHMuYmVnaW4oKSwgbV9zZWdtZW50cy5lbmQoKSwgcG9zaXRpb24sIFtdKGNvbnN0IFNlZ21lbnQm
IHNlZ21lbnQsIHVuc2lnbmVkIHBvc2l0aW9uKSB7Ci0gICAgICAgIHJldHVybiBzZWdtZW50LmVu
ZCA8PSBwb3NpdGlvbjsKLSAgICB9KTsKLSAgICBBU1NFUlQoaXQgIT0gbV9zZWdtZW50cy5lbmQo
KSk7Ci0gICAgcmV0dXJuIG1fc2VnbWVudHNbaXQgLSBtX3NlZ21lbnRzLmJlZ2luKCldOwotfQot
Ci19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxh
eW91dEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxh
eW91dEZ1bmN0aW9ucy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2Y2MwYjZk
MzgyNC4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0RnVuY3Rpb25zLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM3NSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlv
dXRGdW5jdGlvbnMuaCIKLQotI2luY2x1ZGUgIkJpZGlSdW4uaCIKLSNpbmNsdWRlICJCaWRpUnVu
TGlzdC5oIgotI2luY2x1ZGUgIkV2ZW50UmVnaW9uLmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgi
Ci0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJIaXRUZXN0TG9jYXRpb24uaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgotI2lu
Y2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCi0jaW5j
bHVkZSAiTGluZUluZm8uaCIKLSNpbmNsdWRlICJQYWludEluZm8uaCIKLSNpbmNsdWRlICJSZW5k
ZXJCbG9ja0Zsb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCi0jaW5jbHVk
ZSAiUmVuZGVySXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUg
IlJlbmRlclRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmgiCi0jaW5jbHVk
ZSAiU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmgiCi0jaW5jbHVkZSAiVGV4dC5oIgotI2luY2x1
ZGUgIlRleHREZWNvcmF0aW9uUGFpbnRlci5oIgotI2luY2x1ZGUgIlRleHRQYWludFN0eWxlLmgi
Ci0jaW5jbHVkZSAiVGV4dFBhaW50ZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+Ci0KLSNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNl
bmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7
Ci0KLUZsb2F0UmVjdCBjb21wdXRlT3ZlcmZsb3coY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93
LCBjb25zdCBGbG9hdFJlY3QmIGxheW91dFJlY3QpCi17Ci0gICAgYXV0byBvdmVyZmxvd1JlY3Qg
PSBsYXlvdXRSZWN0OwotICAgIGF1dG8gdmlld3BvcnRTaXplID0gZmxvdy5mcmFtZSgpLnZpZXco
KSA/IGZsb3cuZnJhbWUoKS52aWV3KCktPnNpemUoKSA6IEludFNpemUoKTsKLSAgICBhdXRvIHN0
cm9rZU92ZXJmbG93ID0gc3RkOjpjZWlsKGZsb3cuc3R5bGUoKS5jb21wdXRlZFN0cm9rZVdpZHRo
KHZpZXdwb3J0U2l6ZSkpOwotICAgIG92ZXJmbG93UmVjdC5pbmZsYXRlKHN0cm9rZU92ZXJmbG93
KTsKLQotICAgIGF1dG8gbGV0dGVyU3BhY2luZyA9IGZsb3cuc3R5bGUoKS5mb250Q2FzY2FkZSgp
LmxldHRlclNwYWNpbmcoKTsKLSAgICBpZiAobGV0dGVyU3BhY2luZyA+PSAwKQotICAgICAgICBy
ZXR1cm4gb3ZlcmZsb3dSZWN0OwotICAgIC8vIExhc3QgbGV0dGVyJ3MgbmVnYXRpdmUgc3BhY2lu
ZyBzaHJpbmtzIGxheW91dCByZWN0LiBQdXNoIGl0IHRvIHZpc3VhbCBvdmVyZmxvdy4KLSAgICBv
dmVyZmxvd1JlY3QuZXhwYW5kKC1sZXR0ZXJTcGFjaW5nLCAwKTsKLSAgICByZXR1cm4gb3ZlcmZs
b3dSZWN0OwotfQotCi12b2lkIHBhaW50Rmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cs
IGNvbnN0IExheW91dCYgbGF5b3V0LCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0KQotewotICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQ
aGFzZTo6RXZlbnRSZWdpb24pIHsKLSAgICAgICAgaWYgKCFmbG93LnZpc2libGVUb0hpdFRlc3Rp
bmcoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYXV0byBwYWludFJlY3QgPSBwYWlu
dEluZm8ucmVjdDsKLSAgICAgICAgcGFpbnRSZWN0Lm1vdmVCeSgtcGFpbnRPZmZzZXQpOwotICAg
ICAgICBmb3IgKGF1dG8gcnVuIDogbGF5b3V0LnJ1blJlc29sdmVyKCkucmFuZ2VGb3JSZWN0KHBh
aW50UmVjdCkpIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3QgPSBj
b21wdXRlT3ZlcmZsb3coZmxvdywgcnVuLnJlY3QoKSk7Ci0gICAgICAgICAgICBwYWludEluZm8u
ZXZlbnRSZWdpb25Db250ZXh0LT51bml0ZShlbmNsb3NpbmdJbnRSZWN0KHZpc3VhbE92ZXJmbG93
UmVjdCksIGZsb3cuc3R5bGUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgc3R5bGUgPSBmbG93LnN0eWxlKCk7Ci0gICAgaWYg
KHN0eWxlLnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNpYmxlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBUZXh0UGFpbnRlciB0ZXh0UGFpbnRlcihwYWludEluZm8uY29udGV4dCgpKTsK
LSAgICB0ZXh0UGFpbnRlci5zZXRGb250KHN0eWxlLmZvbnRDYXNjYWRlKCkpOwotICAgIHRleHRQ
YWludGVyLnNldFN0eWxlKGNvbXB1dGVUZXh0UGFpbnRTdHlsZShmbG93LmZyYW1lKCksIHN0eWxl
LCBwYWludEluZm8pKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBkZWJ1Z1No
YWRvdyA9IG51bGxwdHI7Ci0gICAgaWYgKGZsb3cuc2V0dGluZ3MoKS5zaW1wbGVMaW5lTGF5b3V0
RGVidWdCb3JkZXJzRW5hYmxlZCgpKSB7Ci0gICAgICAgIGRlYnVnU2hhZG93ID0gbWFrZVVuaXF1
ZTxTaGFkb3dEYXRhPihJbnRQb2ludCgwLCAwKSwgMTAsIDIwLCBTaGFkb3dTdHlsZTo6Tm9ybWFs
LCB0cnVlLCBDb2xvcjo6Z3JlZW4uY29sb3JXaXRoQWxwaGFCeXRlKDIwMCkpOwotICAgICAgICB0
ZXh0UGFpbnRlci5zZXRTaGFkb3coZGVidWdTaGFkb3cuZ2V0KCkpOwotICAgIH0KLQotICAgIE9w
dGlvbmFsPFRleHREZWNvcmF0aW9uUGFpbnRlcj4gdGV4dERlY29yYXRpb25QYWludGVyOwotICAg
IGlmICghc3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgY29uc3QgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVyID0gY2hpbGRyZW5PZlR5cGU8UmVuZGVy
VGV4dD4oZmxvdykuZmlyc3QoKTsKLSAgICAgICAgaWYgKHRleHRSZW5kZXJlcikgewotICAgICAg
ICAgICAgdGV4dERlY29yYXRpb25QYWludGVyLmVtcGxhY2UocGFpbnRJbmZvLmNvbnRleHQoKSwg
c3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKSwgKnRleHRSZW5kZXJlciwgZmFsc2UsIHN0
eWxlLmZvbnRDYXNjYWRlKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgTGF5b3V0UmVjdCBw
YWludFJlY3QgPSBwYWludEluZm8ucmVjdDsKLSAgICBwYWludFJlY3QubW92ZUJ5KC1wYWludE9m
ZnNldCk7Ci0KLSAgICBhdXRvJiByZXNvbHZlciA9IGxheW91dC5ydW5SZXNvbHZlcigpOwotICAg
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gZmxvdy5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFj
dG9yKCk7Ci0gICAgZm9yIChhdXRvIHJ1biA6IHJlc29sdmVyLnJhbmdlRm9yUmVjdChwYWludFJl
Y3QpKSB7Ci0gICAgICAgIGlmIChydW4uc3RhcnQoKSA9PSBydW4uZW5kKCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBGbG9hdFJlY3QgcmVjdCA9IHJ1bi5yZWN0KCk7Ci0gICAg
ICAgIEZsb2F0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3QgPSBjb21wdXRlT3ZlcmZsb3coZmxvdywg
cmVjdCk7Ci0gICAgICAgIGlmIChwYWludFJlY3QueSgpID4gdmlzdWFsT3ZlcmZsb3dSZWN0Lm1h
eFkoKSB8fCBwYWludFJlY3QubWF4WSgpIDwgdmlzdWFsT3ZlcmZsb3dSZWN0LnkoKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFN0cmluZyB0ZXh0V2l0aEh5cGhlbjsKLSAgICAg
ICAgaWYgKHJ1bi5oYXNIeXBoZW4oKSkKLSAgICAgICAgICAgIHRleHRXaXRoSHlwaGVuID0gcnVu
LnRleHRXaXRoSHlwaGVuKCk7Ci0gICAgICAgIC8vIHhQb3MgaXMgcmVsYXRpdmUgdG8gdGhlIGxp
bmUgYm94J3MgbG9naWNhbCBsZWZ0LgotICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGFueSBsaW5l
IGdlb21ldHJ5IGhlcmUgaW4gU0xMLCBzbyBsZXQncyBnZXQgdGhlIGZpcnN0IHJ1bidzIGxvZ2lj
YWwgbGVmdCBpbiB0aGUgY3VycmVudCBsaW5lIGFuZCB1c2UgaXQgYXMgdGhlIGxpbmUncyBsb2dp
Y2FsIGxlZnQuCi0gICAgICAgIGF1dG8gbGluZUxvZ2ljYWxMZWZ0ID0gKCpyZXNvbHZlci5yYW5n
ZUZvckxpbmUocnVuLmxpbmVJbmRleCgpKS5iZWdpbigpKS5sb2dpY2FsTGVmdCgpOwotICAgICAg
ICBUZXh0UnVuIHRleHRSdW4geyBydW4uaGFzSHlwaGVuKCkgPyB0ZXh0V2l0aEh5cGhlbiA6IHJ1
bi50ZXh0KCksIHJ1bi5sb2dpY2FsTGVmdCgpIC0gbGluZUxvZ2ljYWxMZWZ0LCBydW4uZXhwYW5z
aW9uKCksIHJ1bi5leHBhbnNpb25CZWhhdmlvcigpIH07Ci0gICAgICAgIHRleHRSdW4uc2V0VGFi
U2l6ZSghc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCksIHN0eWxlLnRhYlNpemUoKSk7Ci0gICAg
ICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbiB7IHJlY3QueCgpICsgcGFpbnRPZmZzZXQueCgpLCBy
b3VuZFRvRGV2aWNlUGl4ZWwocnVuLmJhc2VsaW5lUG9zaXRpb24oKSArIHBhaW50T2Zmc2V0Lnko
KSwgZGV2aWNlU2NhbGVGYWN0b3IpIH07Ci0KLSAgICAgICAgdGV4dFBhaW50ZXIuc2V0R2x5cGhE
aXNwbGF5TGlzdElmTmVlZGVkKHJ1bi5zaW1wbGVSdW4oKSwgcGFpbnRJbmZvLCBzdHlsZS5mb250
Q2FzY2FkZSgpLCBwYWludEluZm8uY29udGV4dCgpLCB0ZXh0UnVuKTsKLSAgICAgICAgdGV4dFBh
aW50ZXIucGFpbnQodGV4dFJ1biwgcmVjdCwgdGV4dE9yaWdpbik7Ci0gICAgICAgIGlmICh0ZXh0
RGVjb3JhdGlvblBhaW50ZXIpIHsKLSAgICAgICAgICAgIHRleHREZWNvcmF0aW9uUGFpbnRlci0+
c2V0V2lkdGgocmVjdC53aWR0aCgpKTsKLSAgICAgICAgICAgIHRleHREZWNvcmF0aW9uUGFpbnRl
ci0+cGFpbnRUZXh0RGVjb3JhdGlvbih0ZXh0UnVuLCB0ZXh0T3JpZ2luLCByZWN0LmxvY2F0aW9u
KCkgKyBwYWludE9mZnNldCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgaGl0VGVzdEZs
b3coY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBjb25zdCBMYXlvdXQmIGxheW91dCwgY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3Qg
SGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKLXsKLSAgICBp
ZiAoaGl0VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3VuZCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKCFsYXlvdXQucnVuQ291bnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgYXV0byYgc3R5bGUgPSBmbG93LnN0eWxlKCk7Ci0gICAgaWYgKHN0eWxlLnZpc2li
aWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNpYmxlIHx8IHN0eWxlLnBvaW50ZXJFdmVudHMoKSA9
PSBQb2ludGVyRXZlbnRzOjpOb25lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBMYXlv
dXRSZWN0IHJhbmdlUmVjdCA9IGxvY2F0aW9uSW5Db250YWluZXIuYm91bmRpbmdCb3goKTsKLSAg
ICByYW5nZVJlY3QubW92ZUJ5KC1hY2N1bXVsYXRlZE9mZnNldCk7Ci0gICAgYXV0byByZXNvbHZl
ciA9IGxpbmVSZXNvbHZlcihsYXlvdXQucnVuUmVzb2x2ZXIoKSk7Ci0gICAgYXV0byByYW5nZSA9
IHJlc29sdmVyLnJhbmdlRm9yUmVjdChyYW5nZVJlY3QpOwotICAgIGZvciAoYXV0byBpdCA9IHJh
bmdlLmJlZ2luKCksIGVuZCA9IHJhbmdlLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgYXV0byBsaW5lUmVjdCA9ICppdDsKLSAgICAgICAgbGluZVJlY3QubW92ZUJ5KGFjY3VtdWxh
dGVkT2Zmc2V0KTsKLSAgICAgICAgYXV0byYgcmVuZGVyZXIgPSBjb25zdF9jYXN0PFJlbmRlck9i
amVjdCY+KGl0LnJlbmRlcmVyKCkpOwotICAgICAgICBpZiAoIWxvY2F0aW9uSW5Db250YWluZXIu
aW50ZXJzZWN0cyhsaW5lUmVjdCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmVu
ZGVyZXIudXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIucG9p
bnQoKSAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpOwotICAgICAgICBpZiAocmVz
dWx0LmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQocmVuZGVyZXIubm9kZUZvckhpdFRlc3Qo
KSwgcmVxdWVzdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgbGluZVJlY3QpID09IEhpdFRlc3RQcm9n
cmVzczo6U3RvcCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgY29sbGVjdEZsb3dPdmVyZmxvdyhSZW5kZXJCbG9ja0Zsb3cmIGZs
b3csIGNvbnN0IExheW91dCYgbGF5b3V0KQotewotICAgIGZvciAoYXV0byBsaW5lUmVjdCA6IGxp
bmVSZXNvbHZlcihsYXlvdXQucnVuUmVzb2x2ZXIoKSkpIHsKLSAgICAgICAgTGF5b3V0UmVjdCB2
aXN1YWxPdmVyZmxvd1JlY3QgPSBMYXlvdXRSZWN0KGNvbXB1dGVPdmVyZmxvdyhmbG93LCBsaW5l
UmVjdCkpOwotICAgICAgICBmbG93LmFkZExheW91dE92ZXJmbG93KExheW91dFJlY3QobGluZVJl
Y3QpKTsKLSAgICAgICAgZmxvdy5hZGRWaXN1YWxPdmVyZmxvdyh2aXN1YWxPdmVyZmxvd1JlY3Qp
OwotICAgIH0KLX0KLQotdW5zaWduZWQgdGV4dE9mZnNldEZvclBvaW50KGNvbnN0IExheW91dFBv
aW50JiBwb2ludCwgY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyZXIsIGNvbnN0IExheW91dCYgbGF5
b3V0KQotewotICAgIGF1dG8mIGZsb3cgPSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5k
ZXJlci5wYXJlbnQoKSk7Ci0gICAgQVNTRVJUKGZsb3cuZmlyc3RDaGlsZCgpID09IGZsb3cubGFz
dENoaWxkKCkpOwotICAgIGF1dG8mIHJlc29sdmVyID0gbGF5b3V0LnJ1blJlc29sdmVyKCk7Ci0g
ICAgYXV0byBpdCA9IHJlc29sdmVyLnJ1bkZvclBvaW50KHBvaW50KTsKLSAgICBpZiAoaXQgPT0g
cmVzb2x2ZXIuZW5kKCkpCi0gICAgICAgIHJldHVybiByZW5kZXJlci50ZXh0KCkubGVuZ3RoKCk7
Ci0gICAgYXV0byBydW4gPSAqaXQ7Ci0gICAgYXV0byYgc3R5bGUgPSBmbG93LnN0eWxlKCk7Ci0g
ICAgVGV4dFJ1biB0ZXh0UnVuKHJ1bi50ZXh0KCksIHJ1bi5sb2dpY2FsTGVmdCgpLCBydW4uZXhw
YW5zaW9uKCksIHJ1bi5leHBhbnNpb25CZWhhdmlvcigpKTsKLSAgICB0ZXh0UnVuLnNldFRhYlNp
emUoIXN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpLCBzdHlsZS50YWJTaXplKCkpOwotICAgIHJl
dHVybiBydW4uc3RhcnQoKSArIHN0eWxlLmZvbnRDYXNjYWRlKCkub2Zmc2V0Rm9yUG9zaXRpb24o
dGV4dFJ1biwgcG9pbnQueCgpIC0gcnVuLmxvZ2ljYWxMZWZ0KCksIHRydWUpOwotfQotCi1WZWN0
b3I8RmxvYXRRdWFkPiBjb2xsZWN0QWJzb2x1dGVRdWFkc0ZvclJhbmdlKGNvbnN0IFJlbmRlck9i
amVjdCYgcmVuZGVyZXIsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGNvbnN0IExheW91
dCYgbGF5b3V0LCBib29sIGlnbm9yZUVtcHR5VGV4dFNlbGVjdGlvbnMsIGJvb2wqIHdhc0ZpeGVk
KQotewotICAgIGF1dG8mIHN0eWxlID0gZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PigqcmVuZGVy
ZXIucGFyZW50KCkpLnN0eWxlKCk7Ci0gICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7Ci0gICAg
YXV0byYgcmVzb2x2ZXIgPSBsYXlvdXQucnVuUmVzb2x2ZXIoKTsKLSAgICBmb3IgKGF1dG8gcnVu
IDogcmVzb2x2ZXIucmFuZ2VGb3JSZW5kZXJlcldpdGhPZmZzZXRzKHJlbmRlcmVyLCBzdGFydCwg
ZW5kKSkgewotICAgICAgICBpZiAoaWdub3JlRW1wdHlUZXh0U2VsZWN0aW9ucyAmJiBydW4uc3Rh
cnQoKSA9PSBydW4uZW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgLy8gVGhp
cyBydW4gaXMgZnVsbHkgY29udGFpbmVkLgotICAgICAgICBpZiAoc3RhcnQgPD0gcnVuLnN0YXJ0
KCkgJiYgZW5kID49IHJ1bi5lbmQoKSkgewotICAgICAgICAgICAgcXVhZHMuYXBwZW5kKHJlbmRl
cmVyLmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKHJ1bi5yZWN0KCkpLCBVc2VUcmFuc2Zv
cm1zLCB3YXNGaXhlZCkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAg
ICAgLy8gUGFydGlhbGx5IGNvbnRhaW5lZCBydW4uCi0gICAgICAgIFRleHRSdW4gdGV4dFJ1bihy
dW4udGV4dCgpLCBydW4ubG9naWNhbExlZnQoKSwgcnVuLmV4cGFuc2lvbigpLCBydW4uZXhwYW5z
aW9uQmVoYXZpb3IoKSk7Ci0gICAgICAgIHRleHRSdW4uc2V0VGFiU2l6ZSghc3R5bGUuY29sbGFw
c2VXaGl0ZVNwYWNlKCksIHN0eWxlLnRhYlNpemUoKSk7Ci0gICAgICAgIExheW91dFJlY3QgcnVu
UmVjdChydW4ucmVjdCgpKTsKLSAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGVtcHR5IHJhbmdlcy4K
LSAgICAgICAgaWYgKHN0YXJ0ID09IGVuZCkgewotICAgICAgICAgICAgcnVuUmVjdC5zZXRXaWR0
aCgwKTsKLSAgICAgICAgICAgIHF1YWRzLmFwcGVuZChyZW5kZXJlci5sb2NhbFRvQWJzb2x1dGVR
dWFkKEZsb2F0UXVhZChydW5SZWN0KSwgVXNlVHJhbnNmb3Jtcywgd2FzRml4ZWQpKTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGF1dG8gbG9jYWxTdGFydCA9IHN0
ZDo6bWF4KHJ1bi5zdGFydCgpLCBzdGFydCkgLSBydW4uc3RhcnQoKTsKLSAgICAgICAgYXV0byBs
b2NhbEVuZCA9IHN0ZDo6bWluKHJ1bi5lbmQoKSwgZW5kKSAtIHJ1bi5zdGFydCgpOwotICAgICAg
ICBBU1NFUlQobG9jYWxTdGFydCA8PSBsb2NhbEVuZCk7Ci0gICAgICAgIHN0eWxlLmZvbnRDYXNj
YWRlKCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1biwgcnVuUmVjdCwgbG9jYWxT
dGFydCwgbG9jYWxFbmQpOwotICAgICAgICBydW5SZWN0ID0gc25hcHBlZFNlbGVjdGlvblJlY3Qo
cnVuUmVjdCwgcnVuLmxvZ2ljYWxSaWdodCgpLCBydW5SZWN0LnkoKSwgcnVuUmVjdC5oZWlnaHQo
KSwgdHJ1ZSAvKiBpc0hvcml6b250YWwgKi8pOwotICAgICAgICBxdWFkcy5hcHBlbmQocmVuZGVy
ZXIubG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQocnVuUmVjdCksIFVzZVRyYW5zZm9ybXMs
IHdhc0ZpeGVkKSk7Ci0gICAgfQotICAgIHJldHVybiBxdWFkczsKLX0KLQotdm9pZCBzaW1wbGVM
aW5lTGF5b3V0V2lsbEJlRGVsZXRlZChjb25zdCBMYXlvdXQmIGxheW91dCkKLXsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGF5b3V0LnJ1bkNvdW50KCk7ICsraSkKLSAgICAgICAgVGV4
dFBhaW50ZXI6OnJlbW92ZUdseXBoRGlzcGxheUxpc3QobGF5b3V0LnJ1bkF0KGkpKTsKLX0KLQot
Ym9vbCBjYW5Vc2VGb3JMaW5lQm94VHJlZShSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIGNvbnN0IExh
eW91dCYgbGF5b3V0KQotewotICAgIC8vIExpbmUgYnJlYWtpbmcgcmVxdWlyZXMgc29tZSBjb250
ZXh0IHRoYXQgU0xMIGNhbid0IHByb3ZpZGUgYXQgdGhlIG1vbWVudCAoc2VlIFJvb3RJbmxpbmVC
b3g6OnNldExpbmVCcmVha0luZm8pLgotICAgIGlmIChsYXlvdXQubGluZUNvdW50KCkgPiAxKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobGF5b3V0LmlzUGFnaW5hdGVkKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAoZmxvdy5zdHlsZSgpLnByZXNlcnZl
TmV3bGluZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKCFmbG93LmZp
cnN0Q2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGZvciAoYXV0byYg
Y2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJPYmplY3Q+KGZsb3cpKSB7Ci0gICAgICAgIGlm
ICghaXM8UmVuZGVyVGV4dD4oY2hpbGQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAvLyBTaW1wbGUgbGluZSBsYXlvdXQgaXRlcmF0b3IgY2FuJ3QgaGFuZGxlIHJlbmRlcmVy
cyB3aXRoIHplcm8gbGVuZ3RoIHByb3Blcmx5LgotICAgICAgICBpZiAoIWRvd25jYXN0PFJlbmRl
clRleHQ+KGNoaWxkKS5sZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIGluaXRpYWxpemVJbmxpbmVUZXh0
Qm94KFJlbmRlckJsb2NrRmxvdyYgZmxvdywgSW5saW5lVGV4dEJveCYgaW5saW5lVGV4dEJveCwg
Y29uc3QgUnVuUmVzb2x2ZXI6OlJ1biYgcnVuKQotewotICAgIGlubGluZVRleHRCb3guc2V0TG9n
aWNhbExlZnQocnVuLmxvZ2ljYWxMZWZ0KCkpOwotICAgIGlubGluZVRleHRCb3guc2V0TG9naWNh
bFRvcChydW4ucmVjdCgpLnkoKSk7Ci0gICAgaW5saW5lVGV4dEJveC5zZXRMb2dpY2FsV2lkdGgo
cnVuLmxvZ2ljYWxSaWdodCgpIC0gcnVuLmxvZ2ljYWxMZWZ0KCkpOwotICAgIGF1dG8gb3ZlcmZs
b3dSZWN0ID0gY29tcHV0ZU92ZXJmbG93KGNvbnN0X2Nhc3Q8UmVuZGVyQmxvY2tGbG93Jj4oZmxv
dyksIHJ1bi5yZWN0KCkpOwotICAgIGlmIChvdmVyZmxvd1JlY3QgIT0gcnVuLnJlY3QoKSkKLSAg
ICAgICAgaW5saW5lVGV4dEJveC5zZXRMb2dpY2FsT3ZlcmZsb3dSZWN0KExheW91dFJlY3Qob3Zl
cmZsb3dSZWN0KSk7Ci0KLSAgICBpbmxpbmVUZXh0Qm94LnNldEhhc0h5cGhlbihydW4uaGFzSHlw
aGVuKCkpOwotICAgIGlubGluZVRleHRCb3guc2V0RXhwYW5zaW9uV2l0aG91dEdyb3dpbmcocnVu
LmV4cGFuc2lvbigpKTsKLQotICAgIGF1dG8gZXhwYW5zaW9uQmVoYXZpb3IgPSBydW4uZXhwYW5z
aW9uQmVoYXZpb3IoKTsKLSAgICBpbmxpbmVUZXh0Qm94LnNldENhbkhhdmVMZWZ0RXhwYW5zaW9u
KGV4cGFuc2lvbkJlaGF2aW9yICYgQWxsb3dMZWZ0RXhwYW5zaW9uKTsKLSAgICBpbmxpbmVUZXh0
Qm94LnNldENhbkhhdmVSaWdodEV4cGFuc2lvbihleHBhbnNpb25CZWhhdmlvciAmIEFsbG93Umln
aHRFeHBhbnNpb24pOwotICAgIGlmIChleHBhbnNpb25CZWhhdmlvciAmIEZvcmNlUmlnaHRFeHBh
bnNpb24pCi0gICAgICAgIGlubGluZVRleHRCb3guc2V0Rm9yY2VSaWdodEV4cGFuc2lvbigpOwot
ICAgIGlmIChleHBhbnNpb25CZWhhdmlvciAmIEZvcmNlTGVmdEV4cGFuc2lvbikKLSAgICAgICAg
aW5saW5lVGV4dEJveC5zZXRGb3JjZUxlZnRFeHBhbnNpb24oKTsKLX0KLQotdm9pZCBnZW5lcmF0
ZUxpbmVCb3hUcmVlKFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29uc3QgTGF5b3V0JiBsYXlvdXQp
Ci17Ci0gICAgQVNTRVJUKCFmbG93LmNvbXBsZXhMaW5lTGF5b3V0KCktPmxpbmVCb3hlcygpLmZp
cnN0TGluZUJveCgpKTsKLSAgICBpZiAoIWxheW91dC5ydW5Db3VudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBSZWY8QmlkaUNvbnRleHQ+IGJpZGlDb250ZXh0ID0gQmlkaUNvbnRleHQ6OmNy
ZWF0ZSgwLCBVX0xFRlRfVE9fUklHSFQpOwotICAgIGF1dG8mIHJlc29sdmVyID0gbGF5b3V0LnJ1
blJlc29sdmVyKCk7Ci0gICAgdW5zaWduZWQgbGluZUluZGV4ID0gMDsKLSAgICB3aGlsZSAodHJ1
ZSkgewotICAgICAgICBhdXRvIHJhbmdlID0gcmVzb2x2ZXIucmFuZ2VGb3JMaW5lKGxpbmVJbmRl
eCsrKTsKLSAgICAgICAgaWYgKHJhbmdlLmJlZ2luKCkgPT0gcmFuZ2UuZW5kKCkpCi0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAvLyBHZW5lcmF0ZSBiaWRpIHJ1bnMgb3V0IG9mIHNpbXBs
ZSBsaW5lIGxheW91dCBydW5zLgotICAgICAgICBCaWRpUnVuTGlzdDxCaWRpUnVuPiBiaWRpUnVu
czsKLSAgICAgICAgZm9yIChhdXRvIGl0ID0gcmFuZ2UuYmVnaW4oKTsgaXQgIT0gcmFuZ2UuZW5k
KCk7ICsraXQpIHsKLSAgICAgICAgICAgIGF1dG8gcnVuID0gKml0OwotICAgICAgICAgICAgYmlk
aVJ1bnMuYXBwZW5kUnVuKG1ha2VVbmlxdWU8QmlkaVJ1bj4ocnVuLmxvY2FsU3RhcnQoKSwgcnVu
LmxvY2FsRW5kKCksIGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Jj4ocnVuLnJlbmRlcmVyKCkpLCBi
aWRpQ29udGV4dC5wdHIoKSwgVV9MRUZUX1RPX1JJR0hUKSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBMaW5lSW5mbyBsaW5lSW5mbzsKLSAgICAgICAgbGluZUluZm8uc2V0Rmlyc3RMaW5lKCFmbG93
LmNvbXBsZXhMaW5lTGF5b3V0KCktPmxpbmVCb3hlcygpLmZpcnN0TGluZUJveCgpKTsKLSAgICAg
ICAgLy8gRklYTUU6IFRoaXMgaXMgbmVlZGVkIGZvciBmbG93IGJveGVzIC1idXQgd2UgZG9uJ3Qg
aGF2ZSB0aGVtIHlldC4KLSAgICAgICAgLy8gbGluZUluZm8uc2V0TGFzdExpbmUobGFzdExpbmUp
OwotICAgICAgICBsaW5lSW5mby5zZXRFbXB0eSghYmlkaVJ1bnMucnVuQ291bnQoKSk7Ci0gICAg
ICAgIGJpZGlSdW5zLnNldExvZ2ljYWxseUxhc3RSdW4oYmlkaVJ1bnMubGFzdFJ1bigpKTsKLSAg
ICAgICAgYXV0byogcm9vdCA9IGZsb3cuY29tcGxleExpbmVMYXlvdXQoKS0+Y29uc3RydWN0TGlu
ZShiaWRpUnVucywgbGluZUluZm8pOwotICAgICAgICBiaWRpUnVucy5jbGVhcigpOwotICAgICAg
ICBpZiAoIXJvb3QpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdXRvJiByb290
TGluZUJveCA9ICpyb290OwotICAgICAgICBhdXRvIGl0ID0gcmFuZ2UuYmVnaW4oKTsKLSAgICAg
ICAgZmxvYXQgbGluZVdpZHRoID0gMDsKLSAgICAgICAgLy8gU2V0IHRoZSBnZW9tZXRyeSBmb3Ig
dGhlIGlubGluZWJveGVzLgotICAgICAgICBmb3IgKGF1dG8qIGlubGluZUJveCA9IHJvb3RMaW5l
Qm94LmZpcnN0Q2hpbGQoKTsgaW5saW5lQm94ICYmIGl0ICE9IHJhbmdlLmVuZCgpOyBpbmxpbmVC
b3ggPSBpbmxpbmVCb3gtPm5leHRPbkxpbmUoKSwgKytpdCkgewotICAgICAgICAgICAgYXV0byBy
dW4gPSAqaXQ7Ci0gICAgICAgICAgICBpbml0aWFsaXplSW5saW5lVGV4dEJveChmbG93LCBkb3du
Y2FzdDxJbmxpbmVUZXh0Qm94PigqaW5saW5lQm94KSwgcnVuKTsKLSAgICAgICAgICAgIGxpbmVX
aWR0aCArPSBpbmxpbmVCb3gtPmxvZ2ljYWxXaWR0aCgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gRmluaXNoIHNldHRpbmcgdXAgdGhlIHJvb3RsaW5lLgotICAgICAgICBhdXRvIGl0ZXIgPSBy
YW5nZS5iZWdpbigpOwotICAgICAgICBhdXRvIGZpcnN0UnVuID0gKml0ZXI7Ci0gICAgICAgIHJv
b3RMaW5lQm94LnNldExvZ2ljYWxMZWZ0KGZpcnN0UnVuLmxvZ2ljYWxMZWZ0KCkpOwotICAgICAg
ICByb290TGluZUJveC5zZXRMb2dpY2FsV2lkdGgobGluZVdpZHRoKTsKLSAgICAgICAgYXV0byBs
aW5lVG9wID0gZmlyc3RSdW4ucmVjdCgpLnkoKTsKLSAgICAgICAgYXV0byBsaW5lSGVpZ2h0ID0g
Zmlyc3RSdW4ucmVjdCgpLmhlaWdodCgpOwotICAgICAgICByb290TGluZUJveC5zZXRMb2dpY2Fs
VG9wKGxpbmVUb3ApOwotICAgICAgICByb290TGluZUJveC5zZXRMaW5lVG9wQm90dG9tUG9zaXRp
b25zKExheW91dFVuaXQobGluZVRvcCksIExheW91dFVuaXQobGluZVRvcCArIGxpbmVIZWlnaHQp
LCBMYXlvdXRVbml0KGxpbmVUb3ApLCBMYXlvdXRVbml0KGxpbmVUb3AgKyBsaW5lSGVpZ2h0KSk7
Ci0gICAgfQotfQotCi0jaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQotc3RhdGljIHZvaWQgcHJp
bnRQcmVmaXgoVGV4dFN0cmVhbSYgc3RyZWFtLCBpbnQmIHByaW50ZWRDaGFyYWN0ZXJzLCBpbnQg
ZGVwdGgpCi17Ci0gICAgc3RyZWFtIDw8ICItLS0tLS0tLSAtLSI7Ci0gICAgcHJpbnRlZENoYXJh
Y3RlcnMgPSAwOwotICAgIHdoaWxlICgrK3ByaW50ZWRDaGFyYWN0ZXJzIDw9IGRlcHRoICogMikK
LSAgICAgICAgc3RyZWFtIDw8ICIgIjsKLX0KLQotdm9pZCBvdXRwdXRMaW5lTGF5b3V0Rm9yRmxv
dyhUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IExheW91
dCYgbGF5b3V0LCBpbnQgZGVwdGgpCi17Ci0gICAgaW50IHByaW50ZWRDaGFyYWN0ZXJzID0gMDsK
LSAgICBwcmludFByZWZpeChzdHJlYW0sIHByaW50ZWRDaGFyYWN0ZXJzLCBkZXB0aCk7Ci0KLSAg
ICBzdHJlYW0gPDwgIlNpbXBsZUxpbmVMYXlvdXQgKCIgPDwgbGF5b3V0LmxpbmVDb3VudCgpIDw8
ICIgbGluZXMsICIgPDwgbGF5b3V0LnJ1bkNvdW50KCkgPDwgIiBydW5zKSAoIiA8PCAmbGF5b3V0
IDw8ICIpIjsKLSAgICBzdHJlYW0ubmV4dExpbmUoKTsKLSAgICArK2RlcHRoOwotCi0gICAgZm9y
IChhdXRvIHJ1biA6IGxheW91dC5ydW5SZXNvbHZlcigpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBy
ZWN0ID0gcnVuLnJlY3QoKTsKLSAgICAgICAgcHJpbnRQcmVmaXgoc3RyZWFtLCBwcmludGVkQ2hh
cmFjdGVycywgZGVwdGgpOwotICAgICAgICBpZiAocnVuLnN0YXJ0KCkgPCBydW4uZW5kKCkpIHsK
LSAgICAgICAgICAgIHN0cmVhbSA8PCAibGluZSAiIDw8IHJ1bi5saW5lSW5kZXgoKSA8PCAiIHJ1
bigiIDw8IHJ1bi5zdGFydCgpIDw8ICIsICIgPDwgcnVuLmVuZCgpIDw8ICIpICIgPDwgcmVjdCA8
PCAiIFwiIiA8PCBydW4udGV4dCgpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKS51dGY4KCkuZGF0
YSgpIDw8ICJcIiI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQocnVuLnN0
YXJ0KCkgPT0gcnVuLmVuZCgpKTsKLSAgICAgICAgICAgIHN0cmVhbSA8PCAibGluZSBicmVhayAi
IDw8IHJ1bi5saW5lSW5kZXgoKSA8PCAiIHJ1bigiIDw8IHJ1bi5zdGFydCgpIDw8ICIsICIgPDwg
cnVuLmVuZCgpIDw8ICIpICIgPDwgcmVjdDsKLSAgICAgICAgfQotICAgIH0KLSAgICBzdHJlYW0u
bmV4dExpbmUoKTsKLX0KLSNlbmRpZgotCi19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOThjN2Q0Y2RhZDllLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaAorKysgL2Rldi9udWxsCkBA
IC0xLDEwNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJS
ZW5kZXJCbG9ja0Zsb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCi0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSGl0VGVz
dExvY2F0aW9uOwotY2xhc3MgSGl0VGVzdFJlcXVlc3Q7Ci1jbGFzcyBIaXRUZXN0UmVzdWx0Owot
Y2xhc3MgUmVuZGVyQmxvY2tGbG93Owotc3RydWN0IFBhaW50SW5mbzsKLQotbmFtZXNwYWNlIFNp
bXBsZUxpbmVMYXlvdXQgewotY2xhc3MgRmxvd0NvbnRlbnRzOwotCi1MYXlvdXRVbml0IGNvbXB1
dGVGbG93SGVpZ2h0KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IExheW91dCYpOwotTGF5
b3V0VW5pdCBjb21wdXRlRmxvd0ZpcnN0TGluZUJhc2VsaW5lKGNvbnN0IFJlbmRlckJsb2NrRmxv
dyYsIGNvbnN0IExheW91dCYpOwotTGF5b3V0VW5pdCBjb21wdXRlRmxvd0xhc3RMaW5lQmFzZWxp
bmUoY29uc3QgUmVuZGVyQmxvY2tGbG93JiwgY29uc3QgTGF5b3V0Jik7Ci1GbG9hdFJlY3QgY29t
cHV0ZU92ZXJmbG93KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IEZsb2F0UmVjdCYpOwot
Ci12b2lkIHBhaW50Rmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmLCBjb25zdCBMYXlvdXQmLCBQ
YWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpOwotYm9vbCBoaXRUZXN0
Rmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmLCBjb25zdCBMYXlvdXQmLCBjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9u
SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVz
dEFjdGlvbik7Ci12b2lkIGNvbGxlY3RGbG93T3ZlcmZsb3coUmVuZGVyQmxvY2tGbG93JiwgY29u
c3QgTGF5b3V0Jik7Ci0KLXVuc2lnbmVkIHRleHRPZmZzZXRGb3JQb2ludChjb25zdCBMYXlvdXRQ
b2ludCYsIGNvbnN0IFJlbmRlclRleHQmLCBjb25zdCBMYXlvdXQmKTsKLVZlY3RvcjxGbG9hdFF1
YWQ+IGNvbGxlY3RBYnNvbHV0ZVF1YWRzRm9yUmFuZ2UoY29uc3QgUmVuZGVyT2JqZWN0JiwgdW5z
aWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgY29uc3QgTGF5b3V0JiwgYm9vbCBpZ25vcmVFbXB0
eVRleHRTZWxlY3Rpb25zLCBib29sKiB3YXNGaXhlZCk7Ci0KLUxheW91dFVuaXQgbGluZUhlaWdo
dEZyb21GbG93KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYpOwotTGF5b3V0VW5pdCBiYXNlbGluZUZy
b21GbG93KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYpOwotCi1ib29sIGNhblVzZUZvckxpbmVCb3hU
cmVlKFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IExheW91dCYpOwotdm9pZCBnZW5lcmF0ZUxpbmVC
b3hUcmVlKFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IExheW91dCYpOwotCi12b2lkIHNpbXBsZUxp
bmVMYXlvdXRXaWxsQmVEZWxldGVkKGNvbnN0IExheW91dCYpOwotCi0jaWYgRU5BQkxFKFRSRUVf
REVCVUdHSU5HKQotdm9pZCBvdXRwdXRMaW5lTGF5b3V0Rm9yRmxvdyhXVEY6OlRleHRTdHJlYW0m
LCBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmLCBjb25zdCBMYXlvdXQmLCBpbnQgZGVwdGgpOwotI2Vu
ZGlmCi0KLX0KLQotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewotCi1pbmxpbmUgTGF5b3V0
VW5pdCBjb21wdXRlRmxvd0hlaWdodChjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIGNvbnN0
IExheW91dCYgbGF5b3V0KQotewotICAgIGF1dG8gZmxvd0hlaWdodCA9IGxpbmVIZWlnaHRGcm9t
RmxvdyhmbG93KSAqIGxheW91dC5saW5lQ291bnQoKTsKLSAgICBpZiAoIWxheW91dC5oYXNMaW5l
U3RydXRzKCkpCi0gICAgICAgIHJldHVybiBmbG93SGVpZ2h0OwotICAgIGZvciAoYXV0byYgc3Ry
dXRFbnRyeSA6IGxheW91dC5zdHJ1dHMoKSkKLSAgICAgICAgZmxvd0hlaWdodCArPSBzdHJ1dEVu
dHJ5Lm9mZnNldDsKLSAgICByZXR1cm4gZmxvd0hlaWdodDsKLX0KLQotaW5saW5lIExheW91dFVu
aXQgY29tcHV0ZUZsb3dGaXJzdExpbmVCYXNlbGluZShjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZs
b3csIGNvbnN0IExheW91dCYgbGF5b3V0KQotewotICAgIEFTU0VSVF9VTlVTRUQobGF5b3V0LCBs
YXlvdXQubGluZUNvdW50KCkpOwotICAgIHJldHVybiBmbG93LmJvcmRlckFuZFBhZGRpbmdCZWZv
cmUoKSArIGJhc2VsaW5lRnJvbUZsb3coZmxvdyk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IGNv
bXB1dGVGbG93TGFzdExpbmVCYXNlbGluZShjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIGNv
bnN0IExheW91dCYgbGF5b3V0KQotewotICAgIEFTU0VSVChsYXlvdXQubGluZUNvdW50KCkpOwot
ICAgIHJldHVybiBmbG93LmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKSArIGxpbmVIZWlnaHRGcm9t
RmxvdyhmbG93KSAqIChsYXlvdXQubGluZUNvdW50KCkgLSAxKSArIGJhc2VsaW5lRnJvbUZsb3co
Zmxvdyk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IGxpbmVIZWlnaHRGcm9tRmxvdyhjb25zdCBS
ZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCi17Ci0gICAgcmV0dXJuIGZsb3cubGluZUhlaWdodChmYWxz
ZSwgSG9yaXpvbnRhbExpbmUsIFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcyk7Ci19Ci0KLWlu
bGluZSBMYXlvdXRVbml0IGJhc2VsaW5lRnJvbUZsb3coY29uc3QgUmVuZGVyQmxvY2tGbG93JiBm
bG93KQotewotICAgIHJldHVybiBmbG93LmJhc2VsaW5lUG9zaXRpb24oQWxwaGFiZXRpY0Jhc2Vs
aW5lLCBmYWxzZSwgSG9yaXpvbnRhbExpbmUsIFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcyk7
Ci19Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0UGFnaW5hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxl
TGluZUxheW91dFBhZ2luYXRpb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
YzhkZTcwZWZlN2MuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
U2ltcGxlTGluZUxheW91dFBhZ2luYXRpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxl
TGluZUxheW91dFBhZ2luYXRpb24uaCIKLQotI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5j
bHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dC5oIgot
I2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewotCi1zdHJ1Y3QgUGFnaW5hdGVkTGlu
ZSB7Ci0gICAgTGF5b3V0VW5pdCB0b3A7Ci0gICAgTGF5b3V0VW5pdCBib3R0b207Ci0gICAgTGF5
b3V0VW5pdCBoZWlnaHQ7IC8vIFNhbWUgdmFsdWUgZm9yIGVhY2ggbGluZXMgYXRtLgotfTsKLXVz
aW5nIFBhZ2luYXRlZExpbmVzID0gVmVjdG9yPFBhZ2luYXRlZExpbmUsIDIwPjsKLQotc3RhdGlj
IFBhZ2luYXRlZExpbmUgY29tcHV0ZUxpbmVUb3BBbmRCb3R0b21XaXRoT3ZlcmZsb3coY29uc3Qg
UmVuZGVyQmxvY2tGbG93JiBmbG93LCB1bnNpZ25lZCBsaW5lSW5kZXgsIExheW91dDo6U2ltcGxl
TGluZVN0cnV0cyYgc3RydXRzKQotewotICAgIC8vIEZJWE1FOiBBZGQgdmlzdWFsT3ZlcmZsb3dG
b3JEZWNvcmF0aW9ucy4KLSAgICBhdXRvJiBmb250TWV0cmljcyA9IGZsb3cuc3R5bGUoKS5mb250
Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCk7Ci0gICAgYXV0byBhc2NlbnQgPSBmb250TWV0cmljcy5h
c2NlbnQoKTsKLSAgICBhdXRvIGRlc2NlbnQgPSBmb250TWV0cmljcy5kZXNjZW50KCk7Ci0gICAg
YXV0byBsaW5lSGVpZ2h0ID0gbGluZUhlaWdodEZyb21GbG93KGZsb3cpOwotICAgIExheW91dFVu
aXQgb2Zmc2V0ID0gZmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7Ci0gICAgZm9yIChhdXRv
JiBzdHJ1dCA6IHN0cnV0cykgewotICAgICAgICBpZiAoc3RydXQubGluZUJyZWFrID4gbGluZUlu
ZGV4KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG9mZnNldCArPSBzdHJ1dC5vZmZzZXQ7
Ci0gICAgfQotICAgIGlmIChhc2NlbnQgKyBkZXNjZW50IDw9IGxpbmVIZWlnaHQpIHsKLSAgICAg
ICAgYXV0byB0b3BQb3NpdGlvbiA9IGxpbmVJbmRleCAqIGxpbmVIZWlnaHQgKyBvZmZzZXQ7Ci0g
ICAgICAgIHJldHVybiB7IHRvcFBvc2l0aW9uLCB0b3BQb3NpdGlvbiArIGxpbmVIZWlnaHQsIGxp
bmVIZWlnaHQgfTsKLSAgICB9Ci0gICAgYXV0byBiYXNlbGluZSA9IGJhc2VsaW5lRnJvbUZsb3co
Zmxvdyk7Ci0gICAgYXV0byB0b3BQb3NpdGlvbiA9IGxpbmVJbmRleCAqIGxpbmVIZWlnaHQgKyBv
ZmZzZXQgKyBiYXNlbGluZSAtIGFzY2VudDsKLSAgICBhdXRvIGJvdHRvbVBvc2l0aW9uID0gdG9w
UG9zaXRpb24gKyBhc2NlbnQgKyBkZXNjZW50OwotICAgIHJldHVybiB7IHRvcFBvc2l0aW9uLCBi
b3R0b21Qb3NpdGlvbiwgYm90dG9tUG9zaXRpb24gLSB0b3BQb3NpdGlvbiB9OwotfQotCi1zdGF0
aWMgdW5zaWduZWQgY29tcHV0ZUxpbmVCcmVha0luZGV4KHVuc2lnbmVkIGJyZWFrQ2FuZGlkYXRl
LCB1bnNpZ25lZCBsaW5lQ291bnQsIGludCBvcnBoYW5zTmVlZGVkLCBpbnQgd2lkb3dzTmVlZGVk
LAotICAgIGNvbnN0IExheW91dDo6U2ltcGxlTGluZVN0cnV0cyYgc3RydXRzKQotewotICAgIC8v
IEZpcnN0IGxpbmUgZG9lcyBub3QgZml0IHRoZSBjdXJyZW50IHBhZ2UuCi0gICAgaWYgKCFicmVh
a0NhbmRpZGF0ZSkKLSAgICAgICAgcmV0dXJuIGJyZWFrQ2FuZGlkYXRlOwotICAgIAotICAgIGlu
dCB3aWRvd3NPblRoZU5leHRQYWdlID0gbGluZUNvdW50IC0gYnJlYWtDYW5kaWRhdGU7Ci0gICAg
aWYgKHdpZG93c05lZWRlZCA8PSB3aWRvd3NPblRoZU5leHRQYWdlKQotICAgICAgICByZXR1cm4g
YnJlYWtDYW5kaWRhdGU7Ci0gICAgLy8gT25seSBicmVhayBhZnRlciB0aGUgZmlyc3QgbGluZSB3
aXRoIHdpZG93cy4KLSAgICBhdXRvIGxpbmVCcmVhayA9IHN0ZDo6bWF4PGludD4obGluZUNvdW50
IC0gd2lkb3dzTmVlZGVkLCAxKTsKLSAgICBpZiAob3JwaGFuc05lZWRlZCA+IGxpbmVCcmVhaykK
LSAgICAgICAgcmV0dXJuIGJyZWFrQ2FuZGlkYXRlOwotICAgIC8vIEJyZWFrIG9uIGN1cnJlbnQg
cGFnZSBvbmx5LgotICAgIGlmIChzdHJ1dHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbGlu
ZUJyZWFrOwotICAgIEFTU0VSVChzdHJ1dHMubGFzdCgpLmxpbmVCcmVhayArIDEgPCBsaW5lQ291
bnQpOwotICAgIHJldHVybiBzdGQ6Om1heDx1bnNpZ25lZD4oc3RydXRzLmxhc3QoKS5saW5lQnJl
YWsgKyAxLCBsaW5lQnJlYWspOwotfQotCi1zdGF0aWMgTGF5b3V0VW5pdCBjb21wdXRlT2Zmc2V0
QWZ0ZXJMaW5lQnJlYWsoTGF5b3V0VW5pdCBsaW5lQnJlYWtQb3NpdGlvbiwgYm9vbCBpc0ZpcnN0
TGluZSwgYm9vbCBhdFRoZVRvcE9mQ29sdW1uT3JQYWdlLCBjb25zdCBSZW5kZXJCbG9ja0Zsb3cm
IGZsb3cpCi17Ci0gICAgLy8gTm8gb2Zmc2V0IGZvciB0b3Agb2YgdGhlIHBhZ2UgbGluZXMgdW5s
ZXNzIHdpZG93cyBwdXNoZWQgdGhlIGxpbmUgYnJlYWsuCi0gICAgTGF5b3V0VW5pdCBvZmZzZXQg
PSBpc0ZpcnN0TGluZSA/IGZsb3cuYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpIDogMF9sdTsKLSAg
ICBpZiAoYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSkKLSAgICAgICAgcmV0dXJuIG9mZnNldDsKLSAg
ICByZXR1cm4gb2Zmc2V0ICsgZmxvdy5wYWdlUmVtYWluaW5nTG9naWNhbEhlaWdodEZvck9mZnNl
dChsaW5lQnJlYWtQb3NpdGlvbiwgUmVuZGVyQmxvY2tGbG93OjpFeGNsdWRlUGFnZUJvdW5kYXJ5
KTsKLX0KLQotc3RhdGljIHZvaWQgc2V0UGFnZUJyZWFrRm9yTGluZSh1bnNpZ25lZCBsaW5lQnJl
YWtJbmRleCwgUGFnaW5hdGVkTGluZXMmIGxpbmVzLCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIExh
eW91dDo6U2ltcGxlTGluZVN0cnV0cyYgc3RydXRzLAotICAgIGJvb2wgYXRUaGVUb3BPZkNvbHVt
bk9yUGFnZSwgYm9vbCBsaW5lRG9lc05vdEZpdCkKLXsKLSAgICBhdXRvIGxpbmUgPSBsaW5lcy5h
dChsaW5lQnJlYWtJbmRleCk7Ci0gICAgYXV0byByZW1haW5pbmdMb2dpY2FsSGVpZ2h0ID0gZmxv
dy5wYWdlUmVtYWluaW5nTG9naWNhbEhlaWdodEZvck9mZnNldChsaW5lLnRvcCwgUmVuZGVyQmxv
Y2tGbG93OjpFeGNsdWRlUGFnZUJvdW5kYXJ5KTsKLSAgICBhdXRvJiBzdHlsZSA9IGZsb3cuc3R5
bGUoKTsKLSAgICBhdXRvIGZpcnN0TGluZURvZXNOb3RGaXQgPSAhbGluZUJyZWFrSW5kZXggJiYg
bGluZS5oZWlnaHQgPCBmbG93LnBhZ2VMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KGxpbmUudG9wKTsK
LSAgICBhdXRvIG1vdmVPcnBoYW5Ub05leHRDb2x1bW4gPSBsaW5lRG9lc05vdEZpdCAmJiAhc3R5
bGUuaGFzQXV0b09ycGhhbnMoKSAmJiBzdHlsZS5vcnBoYW5zKCkgPiAoc2hvcnQpbGluZUJyZWFr
SW5kZXg7Ci0gICAgaWYgKGZpcnN0TGluZURvZXNOb3RGaXQgfHwgbW92ZU9ycGhhblRvTmV4dENv
bHVtbikgewotICAgICAgICBhdXRvIGZpcnN0TGluZSA9IGxpbmVzLmZpcnN0KCk7Ci0gICAgICAg
IGF1dG8gZmlyc3RMaW5lT3ZlcmZsb3dSZWN0ID0gY29tcHV0ZU92ZXJmbG93KGZsb3csIExheW91
dFJlY3QoMF9sdSwgZmlyc3RMaW5lLnRvcCwgMF9sdSwgZmlyc3RMaW5lLmhlaWdodCkpOwotICAg
ICAgICBhdXRvIGZpcnN0TGluZVVwcGVyT3ZlcmhhbmcgPSBzdGQ6Om1heChMYXlvdXRVbml0KC1m
aXJzdExpbmVPdmVyZmxvd1JlY3QueSgpKSwgMF9sdSk7Ci0gICAgICAgIGZsb3cuc2V0UGFnaW5h
dGlvblN0cnV0KGxpbmUudG9wICsgcmVtYWluaW5nTG9naWNhbEhlaWdodCArIGZpcnN0TGluZVVw
cGVyT3ZlcmhhbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChhdFRoZVRvcE9m
Q29sdW1uT3JQYWdlKQotICAgICAgICBmbG93LnNldFBhZ2VCcmVhayhsaW5lLnRvcCwgbGluZS5o
ZWlnaHQpOwotICAgIGVsc2UKLSAgICAgICAgZmxvdy5zZXRQYWdlQnJlYWsobGluZS50b3AsIGxp
bmUuaGVpZ2h0IC0gcmVtYWluaW5nTG9naWNhbEhlaWdodCk7Ci0gICAgc3RydXRzLmFwcGVuZCh7
IGxpbmVCcmVha0luZGV4LCBjb21wdXRlT2Zmc2V0QWZ0ZXJMaW5lQnJlYWsobGluZXNbbGluZUJy
ZWFrSW5kZXhdLnRvcCwgIWxpbmVCcmVha0luZGV4LCBhdFRoZVRvcE9mQ29sdW1uT3JQYWdlLCBm
bG93KSB9KTsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlTWluaW11bVBhZ2VIZWlnaHQoUmVuZGVy
QmxvY2tGbG93JiBmbG93LCB1bnNpZ25lZCBsaW5lQ291bnQpCi17Ci0gICAgYXV0byYgc3R5bGUg
PSBmbG93LnN0eWxlKCk7Ci0gICAgYXV0byB3aWRvd3MgPSBzdHlsZS5oYXNBdXRvV2lkb3dzKCkg
PyAxIDogc3RkOjptYXg8aW50PihzdHlsZS53aWRvd3MoKSwgMSk7Ci0gICAgYXV0byBvcnBoYW5z
ID0gc3R5bGUuaGFzQXV0b09ycGhhbnMoKSA/IDEgOiBzdGQ6Om1heDxpbnQ+KHN0eWxlLm9ycGhh
bnMoKSwgMSk7Ci0gICAgYXV0byBtaW5pbXVtTGluZUNvdW50ID0gc3RkOjptaW48dW5zaWduZWQ+
KHN0ZDo6bWF4KHdpZG93cywgb3JwaGFucyksIGxpbmVDb3VudCk7Ci0gICAgZmxvdy51cGRhdGVN
aW5pbXVtUGFnZUhlaWdodCgwLCBtaW5pbXVtTGluZUNvdW50ICogbGluZUhlaWdodEZyb21GbG93
KGZsb3cpKTsKLX0KLQotdm9pZCBhZGp1c3RMaW5lUG9zaXRpb25zRm9yUGFnaW5hdGlvbihTaW1w
bGVMaW5lTGF5b3V0OjpMYXlvdXQmIHNpbXBsZUxpbmVzLCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cp
Ci17Ci0gICAgTGF5b3V0OjpTaW1wbGVMaW5lU3RydXRzIHN0cnV0czsKLSAgICBhdXRvIGxpbmVD
b3VudCA9IHNpbXBsZUxpbmVzLmxpbmVDb3VudCgpOwotICAgIHVwZGF0ZU1pbmltdW1QYWdlSGVp
Z2h0KGZsb3csIGxpbmVDb3VudCk7Ci0gICAgLy8gRmlyc3QgcGFzcyB3aXRoIG5vIHBhZ2luYXRp
b24gb2Zmc2V0PwotICAgIGlmICghZmxvdy5wYWdlTG9naWNhbEhlaWdodEZvck9mZnNldCgwKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGxpbmVJbmRleCA9IDA7Ci0gICAgYXV0byB3
aWRvd3MgPSBmbG93LnN0eWxlKCkuaGFzQXV0b1dpZG93cygpID8gMSA6IHN0ZDo6bWF4PGludD4o
Zmxvdy5zdHlsZSgpLndpZG93cygpLCAxKTsKLSAgICBhdXRvIG9ycGhhbnMgPSBmbG93LnN0eWxl
KCkuaGFzQXV0b09ycGhhbnMoKSA/IDEgOiBzdGQ6Om1heDxpbnQ+KGZsb3cuc3R5bGUoKS5vcnBo
YW5zKCksIDEpOwotICAgIFBhZ2luYXRlZExpbmVzIGxpbmVzOwotICAgIGZvciAodW5zaWduZWQg
cnVuSW5kZXggPSAwOyBydW5JbmRleCA8IHNpbXBsZUxpbmVzLnJ1bkNvdW50KCk7ICsrcnVuSW5k
ZXgpIHsKLSAgICAgICAgYXV0byYgcnVuID0gc2ltcGxlTGluZXMucnVuQXQocnVuSW5kZXgpOwot
ICAgICAgICBpZiAoIXJ1bi5pc0VuZE9mTGluZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIGF1dG8gbGluZSA9IGNvbXB1dGVMaW5lVG9wQW5kQm90dG9tV2l0aE92ZXJmbG93KGZs
b3csIGxpbmVJbmRleCwgc3RydXRzKTsKLSAgICAgICAgbGluZXMuYXBwZW5kKGxpbmUpOwotICAg
ICAgICBhdXRvIHJlbWFpbmluZ0hlaWdodCA9IGZsb3cucGFnZVJlbWFpbmluZ0xvZ2ljYWxIZWln
aHRGb3JPZmZzZXQobGluZS50b3AsIFJlbmRlckJsb2NrRmxvdzo6RXhjbHVkZVBhZ2VCb3VuZGFy
eSk7Ci0gICAgICAgIGF1dG8gYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSA9IGZsb3cucGFnZUxvZ2lj
YWxIZWlnaHRGb3JPZmZzZXQobGluZS50b3ApID09IHJlbWFpbmluZ0hlaWdodDsKLSAgICAgICAg
YXV0byBsaW5lRG9lc05vdEZpdCA9IGxpbmUuaGVpZ2h0ID4gcmVtYWluaW5nSGVpZ2h0OwotICAg
ICAgICBpZiAobGluZURvZXNOb3RGaXQgfHwgKGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UgJiYgbGlu
ZUluZGV4KSkgewotICAgICAgICAgICAgYXV0byBsaW5lQnJlYWtJbmRleCA9IGNvbXB1dGVMaW5l
QnJlYWtJbmRleChsaW5lSW5kZXgsIGxpbmVDb3VudCwgb3JwaGFucywgd2lkb3dzLCBzdHJ1dHMp
OwotICAgICAgICAgICAgLy8gQXJlIHdlIHN0aWxsIGF0IHRoZSB0b3Agb2YgdGhlIGNvbHVtbi9w
YWdlPwotICAgICAgICAgICAgYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSA9IGF0VGhlVG9wT2ZDb2x1
bW5PclBhZ2UgPyBsaW5lSW5kZXggPT0gbGluZUJyZWFrSW5kZXggOiBmYWxzZTsKLSAgICAgICAg
ICAgIHNldFBhZ2VCcmVha0ZvckxpbmUobGluZUJyZWFrSW5kZXgsIGxpbmVzLCBmbG93LCBzdHJ1
dHMsIGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UsIGxpbmVEb2VzTm90Rml0KTsKLSAgICAgICAgICAg
IC8vIFJlY29tcHV0ZSBsaW5lIHBvc2l0aW9ucyB0aGF0IHdlIGFscmVhZHkgdmlzaXRlZCBidXQg
d2lkb3cgYnJlYWsgcHVzaGVkIHRoZW0gdG8gYSBuZXcgcGFnZS4KLSAgICAgICAgICAgIGZvciAo
YXV0byBpID0gbGluZUJyZWFrSW5kZXg7IGkgPCBsaW5lcy5zaXplKCk7ICsraSkKLSAgICAgICAg
ICAgICAgICBsaW5lcy5hdChpKSA9IGNvbXB1dGVMaW5lVG9wQW5kQm90dG9tV2l0aE92ZXJmbG93
KGZsb3csIGksIHN0cnV0cyk7Ci0gICAgICAgIH0KLSAgICAgICAgKytsaW5lSW5kZXg7Ci0gICAg
fQotICAgIHNpbXBsZUxpbmVzLnNldExpbmVTdHJ1dHMoV1RGTW92ZShzdHJ1dHMpKTsKLX0KLQot
fQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRQYWdpbmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91
dFBhZ2luYXRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ2YTE3YzBlNWM5
Li4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXRQYWdpbmF0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVy
QmxvY2tGbG93OwotCi1uYW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7Ci0KLWNsYXNzIExheW91
dDsKLSAgICAKLXZvaWQgYWRqdXN0TGluZVBvc2l0aW9uc0ZvclBhZ2luYXRpb24oTGF5b3V0Jiwg
UmVuZGVyQmxvY2tGbG93Jik7Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGQzYTZjMTg4MTI4ZS4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMzQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmgiCi0KLSNpbmNsdWRlICJJbmxpbmVUZXh0Qm94
U3R5bGUuaCIKLSNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJP
YmplY3QuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBTaW1wbGVMaW5lTGF5b3V0IHsKLQotc3RhdGljIEZs
b2F0UG9pbnQgbGluZVBvc2l0aW9uKGZsb2F0IGxvZ2ljYWxMZWZ0LCBmbG9hdCBsb2dpY2FsVG9w
KQotewotICAgIHJldHVybiBGbG9hdFBvaW50KGxvZ2ljYWxMZWZ0LCByb3VuZGYobG9naWNhbFRv
cCkpOwotfQotCi1zdGF0aWMgRmxvYXRTaXplIGxpbmVTaXplKGZsb2F0IGxvZ2ljYWxMZWZ0LCBm
bG9hdCBsb2dpY2FsUmlnaHQsIGZsb2F0IGhlaWdodCkKLXsKLSAgICByZXR1cm4gRmxvYXRTaXpl
KGxvZ2ljYWxSaWdodCAtIGxvZ2ljYWxMZWZ0LCBoZWlnaHQpOwotfQotCi1SdW5SZXNvbHZlcjo6
UnVuOjpSdW4oY29uc3QgSXRlcmF0b3ImIGl0ZXJhdG9yKQotICAgIDogbV9pdGVyYXRvcihpdGVy
YXRvcikKLXsKLX0KLQotU3RyaW5nIFJ1blJlc29sdmVyOjpSdW46OnRleHRXaXRoSHlwaGVuKCkg
Y29uc3QKLXsKLSAgICBhdXRvJiBydW4gPSBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpOwotICAgIEFT
U0VSVChydW4uaGFzSHlwaGVuKTsKLSAgICAvLyBFbXB0eSBydW5zIHNob3VsZCBub3QgaGF2ZSBo
eXBoZW4uCi0gICAgQVNTRVJUKHJ1bi5zdGFydCA8IHJ1bi5lbmQpOwotICAgIGF1dG8mIHNlZ21l
bnQgPSBtX2l0ZXJhdG9yLnJlc29sdmVyKCkubV9mbG93Q29udGVudHMuc2VnbWVudEZvclJ1bihy
dW4uc3RhcnQsIHJ1bi5lbmQpOwotICAgIGF1dG8gdGV4dCA9IFN0cmluZ1ZpZXcoc2VnbWVudC50
ZXh0KS5zdWJzdHJpbmcoc2VnbWVudC50b1NlZ21lbnRQb3NpdGlvbihydW4uc3RhcnQpLCBydW4u
ZW5kIC0gcnVuLnN0YXJ0KTsKLSAgICByZXR1cm4gbWFrZVN0cmluZyh0ZXh0LCBtX2l0ZXJhdG9y
LnJlc29sdmVyKCkuZmxvdygpLnN0eWxlKCkuaHlwaGVuU3RyaW5nKCkpOwotfQotCi1GbG9hdFJl
Y3QgUnVuUmVzb2x2ZXI6OlJ1bjo6cmVjdCgpIGNvbnN0Ci17Ci0gICAgYXV0byYgcnVuID0gbV9p
dGVyYXRvci5zaW1wbGVSdW4oKTsKLSAgICBhdXRvJiByZXNvbHZlciA9IG1faXRlcmF0b3IucmVz
b2x2ZXIoKTsKLSAgICBmbG9hdCBiYXNlbGluZSA9IGNvbXB1dGVCYXNlbGluZVBvc2l0aW9uKCk7
Ci0gICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IGxpbmVQb3NpdGlvbihydW4ubG9naWNhbExlZnQs
IGJhc2VsaW5lIC0gcmVzb2x2ZXIubV9hc2NlbnQpOwotICAgIEZsb2F0U2l6ZSBzaXplID0gbGlu
ZVNpemUocnVuLmxvZ2ljYWxMZWZ0LCBydW4ubG9naWNhbFJpZ2h0LCByZXNvbHZlci5tX2FzY2Vu
dCArIHJlc29sdmVyLm1fZGVzY2VudCArIHJlc29sdmVyLm1fdmlzdWFsT3ZlcmZsb3dPZmZzZXQp
OwotCi0gICAgcmV0dXJuIEZsb2F0UmVjdChwb3NpdGlvbiwgc2l6ZSk7Ci19Ci0KLVN0cmluZ1Zp
ZXcgUnVuUmVzb2x2ZXI6OlJ1bjo6dGV4dCgpIGNvbnN0Ci17Ci0gICAgYXV0byYgcnVuID0gbV9p
dGVyYXRvci5zaW1wbGVSdW4oKTsKLSAgICBBU1NFUlQocnVuLnN0YXJ0IDwgcnVuLmVuZCk7Ci0g
ICAgYXV0byYgc2VnbWVudCA9IG1faXRlcmF0b3IucmVzb2x2ZXIoKS5tX2Zsb3dDb250ZW50cy5z
ZWdtZW50Rm9yUnVuKHJ1bi5zdGFydCwgcnVuLmVuZCk7Ci0gICAgLy8gV2UgY3VycmVudGx5IHNw
bGl0IHJ1bnMgb24gc2VnbWVudCBib3VuZGFyaWVzIChkaWZmZXJlbnQgUmVuZGVyT2JqZWN0KS4K
LSAgICBBU1NFUlQocnVuLmVuZCA8PSBzZWdtZW50LmVuZCk7Ci0gICAgcmV0dXJuIFN0cmluZ1Zp
ZXcoc2VnbWVudC50ZXh0KS5zdWJzdHJpbmcoc2VnbWVudC50b1NlZ21lbnRQb3NpdGlvbihydW4u
c3RhcnQpLCBydW4uZW5kIC0gcnVuLnN0YXJ0KTsKLX0KLQotY29uc3QgUmVuZGVyT2JqZWN0JiBS
dW5SZXNvbHZlcjo6UnVuOjpyZW5kZXJlcigpIGNvbnN0Ci17Ci0gICAgYXV0byYgcnVuID0gbV9p
dGVyYXRvci5zaW1wbGVSdW4oKTsKLSAgICAvLyBGbG93Q29udGVudHMgY2Fubm90IGRpZmZlcmVu
dGlhdGUgZW1wdHkgcnVucy4KLSAgICBBU1NFUlQocnVuLnN0YXJ0ICE9IHJ1bi5lbmQpOwotICAg
IHJldHVybiBtX2l0ZXJhdG9yLnJlc29sdmVyKCkubV9mbG93Q29udGVudHMuc2VnbWVudEZvclJ1
bihydW4uc3RhcnQsIHJ1bi5lbmQpLnJlbmRlcmVyOwotfQotCi11bnNpZ25lZCBSdW5SZXNvbHZl
cjo6UnVuOjpsb2NhbFN0YXJ0KCkgY29uc3QKLXsKLSAgICBhdXRvJiBydW4gPSBtX2l0ZXJhdG9y
LnNpbXBsZVJ1bigpOwotICAgIC8vIEZsb3dDb250ZW50cyBjYW5ub3QgZGlmZmVyZW50aWF0ZSBl
bXB0eSBydW5zLgotICAgIEFTU0VSVChydW4uc3RhcnQgIT0gcnVuLmVuZCk7Ci0gICAgcmV0dXJu
IG1faXRlcmF0b3IucmVzb2x2ZXIoKS5tX2Zsb3dDb250ZW50cy5zZWdtZW50Rm9yUnVuKHJ1bi5z
dGFydCwgcnVuLmVuZCkudG9TZWdtZW50UG9zaXRpb24ocnVuLnN0YXJ0KTsKLX0KLQotdW5zaWdu
ZWQgUnVuUmVzb2x2ZXI6OlJ1bjo6bG9jYWxFbmQoKSBjb25zdAotewotICAgIGF1dG8mIHJ1biA9
IG1faXRlcmF0b3Iuc2ltcGxlUnVuKCk7Ci0gICAgLy8gRmxvd0NvbnRlbnRzIGNhbm5vdCBkaWZm
ZXJlbnRpYXRlIGVtcHR5IHJ1bnMuCi0gICAgQVNTRVJUKHJ1bi5zdGFydCAhPSBydW4uZW5kKTsK
LSAgICByZXR1cm4gbV9pdGVyYXRvci5yZXNvbHZlcigpLm1fZmxvd0NvbnRlbnRzLnNlZ21lbnRG
b3JSdW4ocnVuLnN0YXJ0LCBydW4uZW5kKS50b1NlZ21lbnRQb3NpdGlvbihydW4uZW5kKTsKLX0K
LQotUnVuUmVzb2x2ZXI6Okl0ZXJhdG9yOjpJdGVyYXRvcihjb25zdCBSdW5SZXNvbHZlciYgcmVz
b2x2ZXIsIHVuc2lnbmVkIHJ1bkluZGV4LCB1bnNpZ25lZCBsaW5lSW5kZXgpCi0gICAgOiBtX2xh
eW91dCgmcmVzb2x2ZXIubV9sYXlvdXQpCi0gICAgLCBtX3Jlc29sdmVyKCZyZXNvbHZlcikKLSAg
ICAsIG1fcnVuSW5kZXgocnVuSW5kZXgpCi0gICAgLCBtX2xpbmVJbmRleChsaW5lSW5kZXgpCi17
Ci0gICAgQVNTRVJUKCZyZXNvbHZlciA9PSAmbV9sYXlvdXQtPnJ1blJlc29sdmVyKCkpOwotfQot
Ci1SdW5SZXNvbHZlcjo6SXRlcmF0b3ImIFJ1blJlc29sdmVyOjpJdGVyYXRvcjo6YWR2YW5jZSgp
Ci17Ci0gICAgaWYgKHNpbXBsZVJ1bigpLmlzRW5kT2ZMaW5lKQotICAgICAgICArK21fbGluZUlu
ZGV4OwotICAgICsrbV9ydW5JbmRleDsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVJ1blJlc29s
dmVyOjpJdGVyYXRvciYgUnVuUmVzb2x2ZXI6Okl0ZXJhdG9yOjphZHZhbmNlTGluZXModW5zaWdu
ZWQgbGluZUNvdW50KQotewotICAgIHVuc2lnbmVkIHJ1bkNvdW50ID0gbGF5b3V0KCkucnVuQ291
bnQoKTsKLSAgICBpZiAocnVuQ291bnQgPT0gbGF5b3V0KCkubGluZUNvdW50KCkpIHsKLSAgICAg
ICAgbV9ydW5JbmRleCA9IHN0ZDo6bWluKHJ1bkNvdW50LCBtX3J1bkluZGV4ICsgbGluZUNvdW50
KTsKLSAgICAgICAgbV9saW5lSW5kZXggPSBtX3J1bkluZGV4OwotICAgICAgICByZXR1cm4gKnRo
aXM7Ci0gICAgfQotICAgIHVuc2lnbmVkIHRhcmdldCA9IG1fbGluZUluZGV4ICsgbGluZUNvdW50
OwotICAgIHdoaWxlIChtX2xpbmVJbmRleCA8IHRhcmdldCAmJiBtX3J1bkluZGV4IDwgcnVuQ291
bnQpCi0gICAgICAgIGFkdmFuY2UoKTsKLQotICAgIHJldHVybiAqdGhpczsKLX0KLQotUnVuUmVz
b2x2ZXI6OlJ1blJlc29sdmVyKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29uc3QgTGF5
b3V0JiBsYXlvdXQpCi0gICAgOiBtX2Zsb3dSZW5kZXJlcihmbG93KQotICAgICwgbV9sYXlvdXQo
bGF5b3V0KQotICAgICwgbV9mbG93Q29udGVudHMoZmxvdykKLSAgICAsIG1fbGluZUhlaWdodChs
aW5lSGVpZ2h0RnJvbUZsb3coZmxvdykpCi0gICAgLCBtX2Jhc2VsaW5lKGJhc2VsaW5lRnJvbUZs
b3coZmxvdykpCi0gICAgLCBtX2JvcmRlckFuZFBhZGRpbmdCZWZvcmUoZmxvdy5ib3JkZXJBbmRQ
YWRkaW5nQmVmb3JlKCkpCi0gICAgLCBtX2FzY2VudChmbG93LnN0eWxlKCkuZm9udENhc2NhZGUo
KS5mb250TWV0cmljcygpLmFzY2VudCgpKQotICAgICwgbV9kZXNjZW50KGZsb3cuc3R5bGUoKS5m
b250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpKQotICAgICwgbV92aXN1YWxPdmVy
Zmxvd09mZnNldCh2aXN1YWxPdmVyZmxvd0ZvckRlY29yYXRpb25zKGZsb3cuc3R5bGUoKSwgbnVs
bHB0cikuYm90dG9tKQotewotfQotCi11bnNpZ25lZCBSdW5SZXNvbHZlcjo6YWRqdXN0TGluZUlu
ZGV4Rm9yU3RydXRzKExheW91dFVuaXQgeSwgSW5kZXhUeXBlIHR5cGUsIHVuc2lnbmVkIGxpbmVJ
bmRleENhbmRpZGF0ZSkgY29uc3QKLXsKLSAgICBhdXRvJiBzdHJ1dHMgPSBtX2xheW91dC5zdHJ1
dHMoKTsKLSAgICAvLyBXZSBuZWVkIHRvIG9mZnNldCB0aGUgbGluZUluZGV4IHdpdGggbGluZSBz
dHJ1dHMgd2hlbiB0aGVyZSdzIGFuIGFjdHVhbCBzdHJ1dCBiZWZvcmUgdGhlIGNhbmRpZGF0ZS4K
LSAgICBhdXRvJiBzdHJ1dCA9IHN0cnV0cy5maXJzdCgpOwotICAgIGlmIChzdHJ1dC5saW5lQnJl
YWsgPj0gbGluZUluZGV4Q2FuZGlkYXRlKQotICAgICAgICByZXR1cm4gbGluZUluZGV4Q2FuZGlk
YXRlOwotICAgIHVuc2lnbmVkIHN0cnV0SW5kZXggPSAwOwotICAgIE9wdGlvbmFsPHVuc2lnbmVk
PiBsYXN0SW5kZXhDYW5kaWRhdGU7Ci0gICAgYXV0byB0b3AgPSBzdHJ1dC5saW5lQnJlYWsgKiBt
X2xpbmVIZWlnaHQ7Ci0gICAgYXV0byBsaW5lSGVpZ2h0V2l0aE92ZXJmbG93ID0gbV9saW5lSGVp
Z2h0OwotICAgIC8vIElmIGZvbnQgaXMgbGFyZ2VyIHRoYW4gdGhlIGxpbmUgaGVpZ2h0IChnbHlw
aHMgb3ZlcmZsb3cpLCB1c2UgdGhlIGZvbnQgc2l6ZSB3aGVuIGNoZWNraW5nIGxpbmUgYm91bmRh
cmllcy4KLSAgICBpZiAobV9hc2NlbnQgKyBtX2Rlc2NlbnQgPiBtX2xpbmVIZWlnaHQpIHsKLSAg
ICAgICAgbGluZUhlaWdodFdpdGhPdmVyZmxvdyA9IG1fYXNjZW50ICsgbV9kZXNjZW50OwotICAg
ICAgICB0b3AgKz0gbV9iYXNlbGluZSAtIG1fYXNjZW50OwotICAgIH0KLSAgICBhdXRvIGJvdHRv
bSA9IHRvcCArIGxpbmVIZWlnaHRXaXRoT3ZlcmZsb3c7Ci0gICAgZm9yIChhdXRvIGxpbmVJbmRl
eCA9IHN0cnV0LmxpbmVCcmVhazsgbGluZUluZGV4IDwgbV9sYXlvdXQubGluZUNvdW50KCk7ICsr
bGluZUluZGV4KSB7Ci0gICAgICAgIGZsb2F0IHN0cnV0T2Zmc2V0ID0gMDsKLSAgICAgICAgaWYg
KHN0cnV0SW5kZXggPCBzdHJ1dHMuc2l6ZSgpICYmIHN0cnV0cy5hdChzdHJ1dEluZGV4KS5saW5l
QnJlYWsgPT0gbGluZUluZGV4KQotICAgICAgICAgICAgc3RydXRPZmZzZXQgPSBzdHJ1dHMuYXQo
c3RydXRJbmRleCsrKS5vZmZzZXQ7Ci0gICAgICAgIGJvdHRvbSA9IHRvcCArIHN0cnV0T2Zmc2V0
ICsgbGluZUhlaWdodFdpdGhPdmVyZmxvdzsKLSAgICAgICAgaWYgKHkgPj0gdG9wICYmIHkgPCBi
b3R0b20pIHsKLSAgICAgICAgICAgIGlmICh0eXBlID09IEluZGV4VHlwZTo6Rmlyc3QpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGxpbmVJbmRleDsKLSAgICAgICAgICAgIGxhc3RJbmRleENhbmRp
ZGF0ZSA9IGxpbmVJbmRleDsKLSAgICAgICAgfSBlbHNlIGlmIChsYXN0SW5kZXhDYW5kaWRhdGUp
Ci0gICAgICAgICAgICByZXR1cm4gKmxhc3RJbmRleENhbmRpZGF0ZTsKLSAgICAgICAgdG9wICs9
IG1fbGluZUhlaWdodCArIHN0cnV0T2Zmc2V0OwotICAgIH0KLSAgICBpZiAobGFzdEluZGV4Q2Fu
ZGlkYXRlIHx8IHkgPj0gYm90dG9tKQotICAgICAgICByZXR1cm4gbV9sYXlvdXQubGluZUNvdW50
KCkgLSAxOwotICAgIC8vIFdlIG1pc3NlZCB0aGUgbGluZS4KLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gbGluZUluZGV4Q2FuZGlkYXRlOwotfQotCi11bnNpZ25lZCBSdW5S
ZXNvbHZlcjo6bGluZUluZGV4Rm9ySGVpZ2h0KExheW91dFVuaXQgaGVpZ2h0LCBJbmRleFR5cGUg
dHlwZSkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9saW5lSGVpZ2h0KTsKLSAgICBmbG9hdCB5ID0g
aGVpZ2h0IC0gbV9ib3JkZXJBbmRQYWRkaW5nQmVmb3JlOwotICAgIC8vIExpbmVzIG1heSBvdmVy
bGFwLCBhZGp1c3QgdG8gZ2V0IHRoZSBmaXJzdCBvciBsYXN0IGxpbmUgYXQgdGhpcyBoZWlnaHQu
Ci0gICAgYXV0byBhZGp1c3RlZFkgPSB5OwotICAgIGlmICh0eXBlID09IEluZGV4VHlwZTo6Rmly
c3QpCi0gICAgICAgIGFkanVzdGVkWSArPSBtX2xpbmVIZWlnaHQgLSAobV9iYXNlbGluZSArIG1f
ZGVzY2VudCk7Ci0gICAgZWxzZQotICAgICAgICBhZGp1c3RlZFkgLT0gbV9iYXNlbGluZSAtIG1f
YXNjZW50OwotICAgIGFkanVzdGVkWSA9IHN0ZDo6bWF4PGZsb2F0PihhZGp1c3RlZFksIDApOwot
ICAgIGF1dG8gbGluZUluZGV4Q2FuZGlkYXRlID0gIHN0ZDo6bWluPHVuc2lnbmVkPihhZGp1c3Rl
ZFkgLyBtX2xpbmVIZWlnaHQsIG1fbGF5b3V0LmxpbmVDb3VudCgpIC0gMSk7Ci0gICAgaWYgKG1f
bGF5b3V0Lmhhc0xpbmVTdHJ1dHMoKSkKLSAgICAgICAgcmV0dXJuIGFkanVzdExpbmVJbmRleEZv
clN0cnV0cyhMYXlvdXRVbml0KHkpLCB0eXBlLCBsaW5lSW5kZXhDYW5kaWRhdGUpOwotICAgIHJl
dHVybiBsaW5lSW5kZXhDYW5kaWRhdGU7Ci19Ci0KLVdURjo6SXRlcmF0b3JSYW5nZTxSdW5SZXNv
bHZlcjo6SXRlcmF0b3I+IFJ1blJlc29sdmVyOjpyYW5nZUZvclJlY3QoY29uc3QgTGF5b3V0UmVj
dCYgcmVjdCkgY29uc3QKLXsgCi0gICAgaWYgKCFtX2xpbmVIZWlnaHQpCi0gICAgICAgIHJldHVy
biB7IGJlZ2luKCksIGVuZCgpIH07Ci0KLSAgICB1bnNpZ25lZCBmaXJzdExpbmUgPSBsaW5lSW5k
ZXhGb3JIZWlnaHQocmVjdC55KCksIEluZGV4VHlwZTo6Rmlyc3QpOwotICAgIHVuc2lnbmVkIGxh
c3RMaW5lID0gc3RkOjptYXgoZmlyc3RMaW5lLCBsaW5lSW5kZXhGb3JIZWlnaHQocmVjdC5tYXhZ
KCksIEluZGV4VHlwZTo6TGFzdCkpOwotICAgIGF1dG8gcmFuZ2VCZWdpbiA9IGJlZ2luKCkuYWR2
YW5jZUxpbmVzKGZpcnN0TGluZSk7Ci0gICAgaWYgKHJhbmdlQmVnaW4gPT0gZW5kKCkpCi0gICAg
ICAgIHJldHVybiB7IGVuZCgpLCBlbmQoKSB9OwotICAgIGF1dG8gcmFuZ2VFbmQgPSByYW5nZUJl
Z2luOwotICAgIEFTU0VSVChsYXN0TGluZSA+PSBmaXJzdExpbmUpOwotICAgIHJhbmdlRW5kLmFk
dmFuY2VMaW5lcyhsYXN0TGluZSAtIGZpcnN0TGluZSArIDEpOwotICAgIHJldHVybiB7IHJhbmdl
QmVnaW4sIHJhbmdlRW5kIH07Ci19Ci0KLVdURjo6SXRlcmF0b3JSYW5nZTxSdW5SZXNvbHZlcjo6
SXRlcmF0b3I+IFJ1blJlc29sdmVyOjpyYW5nZUZvckxpbmUodW5zaWduZWQgbGluZUluZGV4KSBj
b25zdAotewotICAgIGF1dG8gcmFuZ2VCZWdpbiA9IGJlZ2luKCkuYWR2YW5jZUxpbmVzKGxpbmVJ
bmRleCk7Ci0gICAgaWYgKHJhbmdlQmVnaW4gPT0gZW5kKCkpCi0gICAgICAgIHJldHVybiB7IGVu
ZCgpLCBlbmQoKSB9OwotICAgIGF1dG8gcmFuZ2VFbmQgPSByYW5nZUJlZ2luOwotICAgIHJhbmdl
RW5kLmFkdmFuY2VMaW5lcygxKTsKLSAgICByZXR1cm4geyByYW5nZUJlZ2luLCByYW5nZUVuZCB9
OwotfQotCi1XVEY6Okl0ZXJhdG9yUmFuZ2U8UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yPiBSdW5SZXNv
bHZlcjo6cmFuZ2VGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKSBjb25z
dAotewotICAgIGlmIChiZWdpbigpID09IGVuZCgpKQotICAgICAgICByZXR1cm4geyBlbmQoKSwg
ZW5kKCkgfTsKLSAgICBGbG93Q29udGVudHM6Okl0ZXJhdG9yIHNlZ21lbnQgPSBtX2Zsb3dDb250
ZW50cy5iZWdpbigpOwotICAgIGF1dG8gcnVuID0gYmVnaW4oKTsKLSAgICBBU1NFUlQoc2VnbWVu
dC0+c3RhcnQgPD0gKCpydW4pLnN0YXJ0KCkpOwotICAgIC8vIE1vdmUgcnVuIHRvIHRoZSBiZWdp
bm5pbmcgb2YgdGhlIHNlZ21lbnQuCi0gICAgd2hpbGUgKCZzZWdtZW50LT5yZW5kZXJlciAhPSAm
cmVuZGVyZXIgJiYgcnVuICE9IGVuZCgpKSB7Ci0gICAgICAgIGlmICgoKnJ1bikuc3RhcnQoKSA9
PSBzZWdtZW50LT5zdGFydCAmJiAoKnJ1bikuZW5kKCkgPT0gc2VnbWVudC0+ZW5kKSB7Ci0gICAg
ICAgICAgICArK3J1bjsKLSAgICAgICAgICAgICsrc2VnbWVudDsKLSAgICAgICAgfSBlbHNlIGlm
ICgoKnJ1bikuc3RhcnQoKSA8IHNlZ21lbnQtPmVuZCkKLSAgICAgICAgICAgICsrcnVuOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICArK3NlZ21lbnQ7Ci0gICAgICAgIEFTU0VSVChzZWdtZW50
ICE9IG1fZmxvd0NvbnRlbnRzLmVuZCgpKTsKLSAgICB9Ci0gICAgLy8gRG8gd2UgYWN0dWFsbHkg
aGF2ZSBhIHJ1biBmb3IgdGhpcyByZW5kZXJlcj8KLSAgICAvLyBDb2xsYXBzZWQgd2hpdGVzcGFj
ZSB3aXRoIGRlZGljYXRlZCByZW5kZXJlciBjb3VsZCBlbmQgdXAgd2l0aCBubyBydW4gYXQgYWxs
LgotICAgIGlmIChydW4gPT0gZW5kKCkgfHwgKHNlZ21lbnQtPnN0YXJ0ICE9IHNlZ21lbnQtPmVu
ZCAmJiBzZWdtZW50LT5lbmQgPD0gKCpydW4pLnN0YXJ0KCkpKQotICAgICAgICByZXR1cm4geyBl
bmQoKSwgZW5kKCkgfTsKLQotICAgIGF1dG8gcmFuZ2VCZWdpbiA9IHJ1bjsKLSAgICAvLyBNb3Zl
IGJleW9uZCB0aGUgZW5kIG9mIHRoZSBzZWdtZW50LgotICAgIHdoaWxlIChydW4gIT0gZW5kKCkg
JiYgKCpydW4pLnN0YXJ0KCkgPCBzZWdtZW50LT5lbmQpCi0gICAgICAgICsrcnVuOwotICAgIC8v
IFNwZWNpYWwgY2FzZSB3aGVuIHNlZ21lbnQgPT0gcnVuLgotICAgIGlmIChydW4gPT0gcmFuZ2VC
ZWdpbikKLSAgICAgICAgKytydW47Ci0gICAgcmV0dXJuIHsgcmFuZ2VCZWdpbiwgcnVuIH07Ci19
Ci0KLVJ1blJlc29sdmVyOjpJdGVyYXRvciBSdW5SZXNvbHZlcjo6cnVuRm9yUG9pbnQoY29uc3Qg
TGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdAotewotICAgIGlmICghbV9saW5lSGVpZ2h0KQotICAg
ICAgICByZXR1cm4gZW5kKCk7Ci0gICAgaWYgKGJlZ2luKCkgPT0gZW5kKCkpCi0gICAgICAgIHJl
dHVybiBlbmQoKTsKLSAgICB1bnNpZ25lZCBsaW5lSW5kZXggPSBsaW5lSW5kZXhGb3JIZWlnaHQo
cG9pbnQueSgpLCBJbmRleFR5cGU6Okxhc3QpOwotICAgIGF1dG8geCA9IHBvaW50LngoKSAtIG1f
Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZTsKLSAgICBhdXRvIGl0ID0gYmVnaW4oKTsKLSAgICBpdC5h
ZHZhbmNlTGluZXMobGluZUluZGV4KTsKLSAgICAvLyBQb2ludCBpcyBhdCB0aGUgbGVmdCBzaWRl
IG9mIHRoZSBmaXJzdCBydW4gb24gdGhpcyBsaW5lLgotICAgIGlmICgoKml0KS5sb2dpY2FsTGVm
dCgpID4geCkKLSAgICAgICAgcmV0dXJuIGl0OwotICAgIC8vIEFkdmFuY2UgdG8gdGhlIGZpcnN0
IGNhbmRpZGF0ZSBydW4gb24gdGhpcyBsaW5lLgotICAgIHdoaWxlIChpdCAhPSBlbmQoKSAmJiAo
Kml0KS5sb2dpY2FsUmlnaHQoKSA8IHggJiYgbGluZUluZGV4ID09IGl0LmxpbmVJbmRleCgpKQot
ICAgICAgICArK2l0OwotICAgIC8vIFdlIGp1bXBlZCB0byB0aGUgbmV4dCBsaW5lIHNvIHRoZSBw
b2ludCBpcyBhdCB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgcHJldmlvdXMgbGluZS4KLSAgICBpZiAo
aXQubGluZUluZGV4KCkgPiBsaW5lSW5kZXgpCi0gICAgICAgIHJldHVybiAtLWl0OwotICAgIC8v
IE5vdyB3ZSBoYXZlIGEgY2FuZGlkYXRlIHJ1bi4KLSAgICAvLyBGaW5kIHRoZSBsYXN0IHJ1biB0
aGF0IHN0aWxsIGNvbnRhaW5zIHRoaXMgcG9pbnQgKHRha2luZyBvdmVybGFwcGluZyBydW5zIHdp
dGggb2RkIHdvcmQgc3BhY2luZyB2YWx1ZXMgaW50byBhY2NvdW50KS4KLSAgICB3aGlsZSAoaXQg
IT0gZW5kKCkgJiYgKCppdCkubG9naWNhbExlZnQoKSA8PSB4ICYmIGxpbmVJbmRleCA9PSBpdC5s
aW5lSW5kZXgoKSkKLSAgICAgICAgKytpdDsKLSAgICByZXR1cm4gLS1pdDsKLX0KLQotV1RGOjpJ
dGVyYXRvclJhbmdlPFJ1blJlc29sdmVyOjpJdGVyYXRvcj4gUnVuUmVzb2x2ZXI6OnJhbmdlRm9y
UmVuZGVyZXJXaXRoT2Zmc2V0cyhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KSBjb25zdAotewotICAgIEFTU0VSVChz
dGFydE9mZnNldCA8PSBlbmRPZmZzZXQpOwotICAgIGF1dG8gcmFuZ2UgPSByYW5nZUZvclJlbmRl
cmVyKHJlbmRlcmVyKTsKLSAgICBpZiAocmFuZ2UuYmVnaW4oKSA9PSByYW5nZS5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIHsgZW5kKCksIGVuZCgpIH07Ci0gICAgYXV0byBpdCA9IHJhbmdlLmJlZ2lu
KCk7Ci0gICAgYXV0byBsb2NhbEVuZCA9ICgqaXQpLnN0YXJ0KCkgKyBlbmRPZmZzZXQ7Ci0gICAg
Ly8gQWR2YW5jZSB0byB0aGUgZmlyc3QgcnVuIGJlZm9yZSB0aGUgc3RhcnQgb2Zmc2V0LiBPbmx5
IHRoZSBmaXJzdCBub2RlIGluIGEgcmFuZ2UgY2FuIGhhdmUgYSBzdGFydE9mZnNldC4KLSAgICAv
LyBOb3RlIHRoYXQgdGhlIHN0YXJ0IG9mZnNldCBtYXkgY29pbmNpZGUgd2l0aCB0aGUgZW5kIG9m
IGEgcnVuLiBUaGUgcnVuIGlzIHN0aWxsIGNvbnNpZGVyZWQgc28gdGhhdCB3ZQotICAgIC8vIGNh
biByZXR1cm4gYW4gZW1wdHkgcmVjdCwgd2hpY2ggY29uZm9ybXMgdG8gdGhlIGJlaGF2aW9yIG9m
IEVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKS4KLSAgICB3aGlsZSAoaXQgIT0gcmFuZ2UuZW5kKCkg
JiYgKCppdCkuZW5kKCkgPCBzdGFydE9mZnNldCkKLSAgICAgICAgKytpdDsKLSAgICBpZiAoaXQg
PT0gcmFuZ2UuZW5kKCkpCi0gICAgICAgIHJldHVybiB7IGVuZCgpLCBlbmQoKSB9OwotICAgIGF1
dG8gcmFuZ2VCZWdpbiA9IGl0OwotICAgIC8vIFNwZWNpYWwgY2FzZSBlbXB0eSByYW5nZXMgdGhh
dCBzdGFydCBhdCB0aGUgZWRnZSBvZiB0aGUgcnVuLiBBcHBhcmVudGx5IG5vcm1hbCBsaW5lIGxh
eW91dCBpbmNsdWRlIHRob3NlLgotICAgIGlmIChsb2NhbEVuZCA9PSBzdGFydE9mZnNldCAmJiAo
Kml0KS5zdGFydCgpID09IGxvY2FsRW5kKQotICAgICAgICByZXR1cm4geyByYW5nZUJlZ2luLCAr
K2l0IH07Ci0gICAgLy8gQWR2YW5jZSBiZXlvbmQgdGhlIGxhc3QgcnVuIHdpdGggdGhlIGVuZCBv
ZmZzZXQuCi0gICAgd2hpbGUgKGl0ICE9IHJhbmdlLmVuZCgpICYmICgqaXQpLnN0YXJ0KCkgPCBs
b2NhbEVuZCkKLSAgICAgICAgKytpdDsKLSAgICByZXR1cm4geyByYW5nZUJlZ2luLCBpdCB9Owot
fQotCi1MaW5lUmVzb2x2ZXI6Okl0ZXJhdG9yOjpJdGVyYXRvcihSdW5SZXNvbHZlcjo6SXRlcmF0
b3IgcnVuSXRlcmF0b3IpCi0gICAgOiBtX3J1bkl0ZXJhdG9yKHJ1bkl0ZXJhdG9yKQotewotfQot
Ci1GbG9hdFJlY3QgTGluZVJlc29sdmVyOjpJdGVyYXRvcjo6b3BlcmF0b3IqKCkgY29uc3QKLXsK
LSAgICB1bnNpZ25lZCBjdXJyZW50TGluZSA9IG1fcnVuSXRlcmF0b3IubGluZUluZGV4KCk7Ci0g
ICAgYXV0byBpdCA9IG1fcnVuSXRlcmF0b3I7Ci0gICAgRmxvYXRSZWN0IHJlY3QgPSAoKml0KS5y
ZWN0KCk7Ci0gICAgd2hpbGUgKGl0LmFkdmFuY2UoKS5saW5lSW5kZXgoKSA9PSBjdXJyZW50TGlu
ZSkKLSAgICAgICAgcmVjdC51bml0ZSgoKml0KS5yZWN0KCkpOwotICAgIHJldHVybiByZWN0Owot
fQotCi1jb25zdCBSZW5kZXJPYmplY3QmIExpbmVSZXNvbHZlcjo6SXRlcmF0b3I6OnJlbmRlcmVy
KCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogVGhpcyB3b3JrcyBhcyBsb25nIGFzIHdlJ3ZlIGdv
dCBvbmx5IG9uZSByZW5kZXJlciBwZXIgbGluZS4KLSAgICBhdXRvIHJ1biA9ICptX3J1bkl0ZXJh
dG9yOwotICAgIHJldHVybiBtX3J1bkl0ZXJhdG9yLnJlc29sdmVyKCkuZmxvd0NvbnRlbnRzKCku
c2VnbWVudEZvclJ1bihydW4uc3RhcnQoKSwgcnVuLmVuZCgpKS5yZW5kZXJlcjsKLX0KLQotTGlu
ZVJlc29sdmVyOjpMaW5lUmVzb2x2ZXIoY29uc3QgUnVuUmVzb2x2ZXImIHJ1blJlc29sdmVyKQot
ICAgIDogbV9ydW5SZXNvbHZlcihydW5SZXNvbHZlcikKLXsKLX0KLQotfQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzYwMDQ3ZjU1NzMuLjAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwzMTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgotI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgot
I2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXQuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0
Rmxvd0NvbnRlbnRzLmgiCi0jaW5jbHVkZSA8d3RmL0l0ZXJhdG9yUmFuZ2UuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNl
IFNpbXBsZUxpbmVMYXlvdXQgewotCi1jbGFzcyBSdW5SZXNvbHZlciB7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgY2xhc3MgSXRlcmF0b3I7Ci0KLSAgICBjbGFz
cyBSdW4gewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgUnVuKGNvbnN0IEl0ZXJhdG9y
Jik7Ci0KLSAgICAgICAgLy8gUG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIGVuY2xvc2luZyBmbG93
IGJsb2NrLgotICAgICAgICB1bnNpZ25lZCBzdGFydCgpIGNvbnN0OwotICAgICAgICB1bnNpZ25l
ZCBlbmQoKSBjb25zdDsKLSAgICAgICAgLy8gUG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIGFjdHVh
bCByZW5kZXJlci4KLSAgICAgICAgdW5zaWduZWQgbG9jYWxTdGFydCgpIGNvbnN0OwotICAgICAg
ICB1bnNpZ25lZCBsb2NhbEVuZCgpIGNvbnN0OwotCi0gICAgICAgIGZsb2F0IGxvZ2ljYWxMZWZ0
KCkgY29uc3Q7Ci0gICAgICAgIGZsb2F0IGxvZ2ljYWxSaWdodCgpIGNvbnN0OwotCi0gICAgICAg
IEZsb2F0UmVjdCByZWN0KCkgY29uc3Q7Ci0gICAgICAgIGZsb2F0IGV4cGFuc2lvbigpIGNvbnN0
OwotICAgICAgICBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvcigpIGNvbnN0Owot
ICAgICAgICBpbnQgYmFzZWxpbmVQb3NpdGlvbigpIGNvbnN0OwotICAgICAgICBpbnQgYmFzZWxp
bmUoKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdG9yLnJlc29sdmVyKCkubV9iYXNlbGluZTsgfQot
ICAgICAgICBTdHJpbmdWaWV3IHRleHQoKSBjb25zdDsKLSAgICAgICAgU3RyaW5nIHRleHRXaXRo
SHlwaGVuKCkgY29uc3Q7Ci0gICAgICAgIGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIoKSBj
b25zdDsKLSAgICAgICAgYm9vbCBpc0VuZE9mTGluZSgpIGNvbnN0OwotICAgICAgICBib29sIGhh
c0h5cGhlbigpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0b3Iuc2ltcGxlUnVuKCkuaGFzSHlwaGVu
OyB9Ci0gICAgICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdG9y
LnNpbXBsZVJ1bigpLmlzTGluZUJyZWFrOyB9Ci0gICAgICAgIGNvbnN0IFNpbXBsZUxpbmVMYXlv
dXQ6OlJ1biYgc2ltcGxlUnVuKCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRvci5zaW1wbGVSdW4o
KTsgfQotCi0gICAgICAgIHVuc2lnbmVkIGxpbmVJbmRleCgpIGNvbnN0OwotCi0gICAgcHJpdmF0
ZToKLSAgICAgICAgZmxvYXQgY29tcHV0ZUJhc2VsaW5lUG9zaXRpb24oKSBjb25zdDsKLSAgICAg
ICAgdm9pZCBjb25zdHJ1Y3RTdHJpbmdGb3JIeXBoZW5JZk5lZWRlZCgpOwotCi0gICAgICAgIGNv
bnN0IEl0ZXJhdG9yJiBtX2l0ZXJhdG9yOwotICAgIH07Ci0KLSAgICBjbGFzcyBJdGVyYXRvciB7
Ci0gICAgZnJpZW5kIGNsYXNzIFJ1bjsKLSAgICBmcmllbmQgY2xhc3MgUnVuUmVzb2x2ZXI7Ci0g
ICAgZnJpZW5kIGNsYXNzIExpbmVSZXNvbHZlcjsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEl0ZXJh
dG9yKGNvbnN0IFJ1blJlc29sdmVyJiwgdW5zaWduZWQgcnVuSW5kZXgsIHVuc2lnbmVkIGxpbmVJ
bmRleCk7Ci0KLSAgICAgICAgSXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKLSAgICAgICAgSXRlcmF0
b3ImIG9wZXJhdG9yLS0oKTsKLQotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0
b3ImKSBjb25zdDsKLSAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJikgY29u
c3Q7Ci0KLSAgICAgICAgUnVuIG9wZXJhdG9yKigpIGNvbnN0OwotCi0gICAgICAgIGJvb2wgYXRC
ZWdpbigpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgY29uc3QgU2ltcGxlTGluZUxh
eW91dDo6UnVuJiBzaW1wbGVSdW4oKSBjb25zdDsKLSAgICAgICAgdW5zaWduZWQgbGluZUluZGV4
KCkgY29uc3QgeyByZXR1cm4gbV9saW5lSW5kZXg7IH0KLSAgICAgICAgSXRlcmF0b3ImIGFkdmFu
Y2UoKTsKLSAgICAgICAgSXRlcmF0b3ImIGFkdmFuY2VMaW5lcyh1bnNpZ25lZCk7Ci0gICAgICAg
IGNvbnN0IFJ1blJlc29sdmVyJiByZXNvbHZlcigpIGNvbnN0IHsgcmV0dXJuICptX3Jlc29sdmVy
OyB9Ci0gICAgICAgIGNvbnN0IExheW91dCYgbGF5b3V0KCkgY29uc3QgeyByZXR1cm4gKm1fbGF5
b3V0OyB9Ci0KLSAgICAgICAgUmVmUHRyPGNvbnN0IExheW91dD4gbV9sYXlvdXQ7Ci0gICAgICAg
IGNvbnN0IFJ1blJlc29sdmVyKiBtX3Jlc29sdmVyOwotICAgICAgICB1bnNpZ25lZCBtX3J1bklu
ZGV4OwotICAgICAgICB1bnNpZ25lZCBtX2xpbmVJbmRleDsKLSAgICB9OwotCi0gICAgUnVuUmVz
b2x2ZXIoY29uc3QgUmVuZGVyQmxvY2tGbG93JiwgY29uc3QgTGF5b3V0Jik7Ci0KLSAgICBjb25z
dCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3coKSBjb25zdCB7IHJldHVybiBtX2Zsb3dSZW5kZXJlcjsg
fQotICAgIGNvbnN0IEZsb3dDb250ZW50cyYgZmxvd0NvbnRlbnRzKCkgY29uc3QgeyByZXR1cm4g
bV9mbG93Q29udGVudHM7IH0KLSAgICBJdGVyYXRvciBiZWdpbigpIGNvbnN0OwotICAgIEl0ZXJh
dG9yIGVuZCgpIGNvbnN0OwotCi0gICAgV1RGOjpJdGVyYXRvclJhbmdlPEl0ZXJhdG9yPiByYW5n
ZUZvclJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwotICAgIFdURjo6SXRlcmF0b3JSYW5n
ZTxJdGVyYXRvcj4gcmFuZ2VGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdDsK
LSAgICBXVEY6Okl0ZXJhdG9yUmFuZ2U8SXRlcmF0b3I+IHJhbmdlRm9yTGluZSh1bnNpZ25lZCBs
aW5lSW5kZXgpIGNvbnN0OwotICAgIEl0ZXJhdG9yIHJ1bkZvclBvaW50KGNvbnN0IExheW91dFBv
aW50JikgY29uc3Q7Ci0gICAgV1RGOjpJdGVyYXRvclJhbmdlPEl0ZXJhdG9yPiByYW5nZUZvclJl
bmRlcmVyV2l0aE9mZnNldHMoY29uc3QgUmVuZGVyT2JqZWN0JiwgdW5zaWduZWQgc3RhcnQsIHVu
c2lnbmVkIGVuZCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgZW51bSBjbGFzcyBJbmRleFR5cGUg
eyBGaXJzdCwgTGFzdCB9OwotICAgIHVuc2lnbmVkIGxpbmVJbmRleEZvckhlaWdodChMYXlvdXRV
bml0LCBJbmRleFR5cGUpIGNvbnN0OwotICAgIHVuc2lnbmVkIGFkanVzdExpbmVJbmRleEZvclN0
cnV0cyhMYXlvdXRVbml0LCBJbmRleFR5cGUsIHVuc2lnbmVkIGxpbmVJbmRleENhbmRpZGF0ZSkg
Y29uc3Q7Ci0KLSAgICBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIG1fZmxvd1JlbmRlcmVyOwotICAg
IGNvbnN0IExheW91dCYgbV9sYXlvdXQ7Ci0gICAgY29uc3QgRmxvd0NvbnRlbnRzIG1fZmxvd0Nv
bnRlbnRzOwotICAgIGNvbnN0IExheW91dFVuaXQgbV9saW5lSGVpZ2h0OwotICAgIGNvbnN0IExh
eW91dFVuaXQgbV9iYXNlbGluZTsKLSAgICBjb25zdCBMYXlvdXRVbml0IG1fYm9yZGVyQW5kUGFk
ZGluZ0JlZm9yZTsKLSAgICBjb25zdCBmbG9hdCBtX2FzY2VudDsKLSAgICBjb25zdCBmbG9hdCBt
X2Rlc2NlbnQ7Ci0gICAgY29uc3QgZmxvYXQgbV92aXN1YWxPdmVyZmxvd09mZnNldDsKLX07Ci0K
LWNsYXNzIExpbmVSZXNvbHZlciB7Ci1wdWJsaWM6Ci0gICAgY2xhc3MgSXRlcmF0b3IgewotICAg
IHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgSXRlcmF0b3IoUnVuUmVzb2x2ZXI6Okl0ZXJhdG9y
KTsKLQotICAgICAgICBJdGVyYXRvciYgb3BlcmF0b3IrKygpOwotICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsKLSAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEl0ZXJhdG9yJikgY29uc3Q7Ci0KLSAgICAgICAgRmxvYXRSZWN0IG9wZXJhdG9yKigpIGNv
bnN0OwotICAgICAgICAvLyBGSVhNRTogVXNlIGEgbGlzdCB0byBzdXBwb3J0IG11bHRpcGxlIHJl
bmRlcmVycyBwZXIgbGluZS4KLSAgICAgICAgY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcigp
IGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUnVuUmVzb2x2ZXI6Okl0ZXJhdG9yIG1f
cnVuSXRlcmF0b3I7Ci0gICAgfTsKLQotICAgIExpbmVSZXNvbHZlcihjb25zdCBSdW5SZXNvbHZl
ciYpOwotCi0gICAgSXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKLSAgICBJdGVyYXRvciBlbmQoKSBj
b25zdDsKLQotICAgIFdURjo6SXRlcmF0b3JSYW5nZTxJdGVyYXRvcj4gcmFuZ2VGb3JSZWN0KGNv
bnN0IExheW91dFJlY3QmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBjb25zdCBSdW5SZXNvbHZl
ciYgbV9ydW5SZXNvbHZlcjsKLX07Ci0KLVJ1blJlc29sdmVyIHJ1blJlc29sdmVyKGNvbnN0IFJl
bmRlckJsb2NrRmxvdyYsIGNvbnN0IExheW91dCYpOwotTGluZVJlc29sdmVyIGxpbmVSZXNvbHZl
cihjb25zdCBSdW5SZXNvbHZlciYpOwotCi1pbmxpbmUgdW5zaWduZWQgUnVuUmVzb2x2ZXI6OlJ1
bjo6c3RhcnQoKSBjb25zdAotewotICAgIHJldHVybiBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpLnN0
YXJ0OwotfQotCi1pbmxpbmUgdW5zaWduZWQgUnVuUmVzb2x2ZXI6OlJ1bjo6ZW5kKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9pdGVyYXRvci5zaW1wbGVSdW4oKS5lbmQ7Ci19Ci0KLWlubGluZSBm
bG9hdCBSdW5SZXNvbHZlcjo6UnVuOjpsb2dpY2FsTGVmdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1faXRlcmF0b3Iuc2ltcGxlUnVuKCkubG9naWNhbExlZnQ7Ci19Ci0KLWlubGluZSBmbG9hdCBS
dW5SZXNvbHZlcjo6UnVuOjpsb2dpY2FsUmlnaHQoKSBjb25zdAotewotICAgIHJldHVybiBtX2l0
ZXJhdG9yLnNpbXBsZVJ1bigpLmxvZ2ljYWxSaWdodDsKLX0KLQotaW5saW5lIGZsb2F0IFJ1blJl
c29sdmVyOjpSdW46OmV4cGFuc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faXRlcmF0b3Iu
c2ltcGxlUnVuKCkuZXhwYW5zaW9uOwotfQotCi1pbmxpbmUgRXhwYW5zaW9uQmVoYXZpb3IgUnVu
UmVzb2x2ZXI6OlJ1bjo6ZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25zdAotewotICAgIHJldHVybiBt
X2l0ZXJhdG9yLnNpbXBsZVJ1bigpLmV4cGFuc2lvbkJlaGF2aW9yOwotfQotCi1pbmxpbmUgaW50
IFJ1blJlc29sdmVyOjpSdW46OmJhc2VsaW5lUG9zaXRpb24oKSBjb25zdAotewotICAgIHJldHVy
biByb3VuZFRvSW50KGNvbXB1dGVCYXNlbGluZVBvc2l0aW9uKCkpOwotfQotCi1pbmxpbmUgYm9v
bCBSdW5SZXNvbHZlcjo6UnVuOjppc0VuZE9mTGluZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
aXRlcmF0b3Iuc2ltcGxlUnVuKCkuaXNFbmRPZkxpbmU7Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBS
dW5SZXNvbHZlcjo6UnVuOjpsaW5lSW5kZXgoKSBjb25zdAotewotICAgIHJldHVybiBtX2l0ZXJh
dG9yLmxpbmVJbmRleCgpOwotfQotCi1pbmxpbmUgUnVuUmVzb2x2ZXI6Okl0ZXJhdG9yJiBSdW5S
ZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yKysoKQotewotICAgIHJldHVybiBhZHZhbmNlKCk7
Ci19Ci0KLWlubGluZSBmbG9hdCBSdW5SZXNvbHZlcjo6UnVuOjpjb21wdXRlQmFzZWxpbmVQb3Np
dGlvbigpIGNvbnN0Ci17Ci0gICAgYXV0byYgcmVzb2x2ZXIgPSBtX2l0ZXJhdG9yLnJlc29sdmVy
KCk7Ci0gICAgYXV0byBvZmZzZXQgPSByZXNvbHZlci5tX2JvcmRlckFuZFBhZGRpbmdCZWZvcmUg
KyByZXNvbHZlci5tX2xpbmVIZWlnaHQgKiBsaW5lSW5kZXgoKTsKLSAgICBpZiAoIW1faXRlcmF0
b3IubGF5b3V0KCkuaGFzTGluZVN0cnV0cygpKQotICAgICAgICByZXR1cm4gb2Zmc2V0ICsgcmVz
b2x2ZXIubV9iYXNlbGluZTsKLSAgICBmb3IgKGF1dG8mIHN0cnV0RW50cnkgOiByZXNvbHZlci5t
X2xheW91dC5zdHJ1dHMoKSkgewotICAgICAgICBpZiAoc3RydXRFbnRyeS5saW5lQnJlYWsgPiBs
aW5lSW5kZXgoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBvZmZzZXQgKz0gc3RydXRF
bnRyeS5vZmZzZXQ7Ci0gICAgfQotICAgIHJldHVybiBvZmZzZXQgKyByZXNvbHZlci5tX2Jhc2Vs
aW5lOwotfQotCi1pbmxpbmUgUnVuUmVzb2x2ZXI6Okl0ZXJhdG9yJiBSdW5SZXNvbHZlcjo6SXRl
cmF0b3I6Om9wZXJhdG9yLS0oKQotewotICAgIC0tbV9ydW5JbmRleDsKLSAgICBpZiAoc2ltcGxl
UnVuKCkuaXNFbmRPZkxpbmUpCi0gICAgICAgIC0tbV9saW5lSW5kZXg7Ci0gICAgcmV0dXJuICp0
aGlzOwotfQotCi1pbmxpbmUgYm9vbCBSdW5SZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yPT0o
Y29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdAotewotICAgIEFTU0VSVChtX3Jlc29sdmVyID09
IG90aGVyLm1fcmVzb2x2ZXIpOwotICAgIHJldHVybiBtX3J1bkluZGV4ID09IG90aGVyLm1fcnVu
SW5kZXg7Ci19Ci0KLWlubGluZSBib29sIFJ1blJlc29sdmVyOjpJdGVyYXRvcjo6b3BlcmF0b3Ih
PShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOwotfQotCi1pbmxpbmUgUnVuUmVzb2x2ZXI6OlJ1biBSdW5SZXNvbHZlcjo6SXRlcmF0
b3I6Om9wZXJhdG9yKigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFJ1bigqdGhpcyk7Ci19Ci0KLWlu
bGluZSBib29sIFJ1blJlc29sdmVyOjpJdGVyYXRvcjo6YXRCZWdpbigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuICp0aGlzID09IHJlc29sdmVyKCkuYmVnaW4oKTsKLX0KLQotaW5saW5lIGNvbnN0IFNp
bXBsZUxpbmVMYXlvdXQ6OlJ1biYgUnVuUmVzb2x2ZXI6Okl0ZXJhdG9yOjpzaW1wbGVSdW4oKSBj
b25zdAotewotICAgIHJldHVybiBsYXlvdXQoKS5ydW5BdChtX3J1bkluZGV4KTsKLX0KLQotaW5s
aW5lIFJ1blJlc29sdmVyOjpJdGVyYXRvciBSdW5SZXNvbHZlcjo6YmVnaW4oKSBjb25zdAotewot
ICAgIHJldHVybiBJdGVyYXRvcigqdGhpcywgMCwgMCk7Ci19Ci0KLWlubGluZSBSdW5SZXNvbHZl
cjo6SXRlcmF0b3IgUnVuUmVzb2x2ZXI6OmVuZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEl0ZXJh
dG9yKCp0aGlzLCBtX2xheW91dC5ydW5Db3VudCgpLCBtX2xheW91dC5saW5lQ291bnQoKSk7Ci19
Ci0KLWlubGluZSBMaW5lUmVzb2x2ZXI6Okl0ZXJhdG9yJiBMaW5lUmVzb2x2ZXI6Okl0ZXJhdG9y
OjpvcGVyYXRvcisrKCkKLXsKLSAgICBtX3J1bkl0ZXJhdG9yLmFkdmFuY2VMaW5lcygxKTsKLSAg
ICByZXR1cm4gKnRoaXM7Ci19Ci0KLWlubGluZSBib29sIExpbmVSZXNvbHZlcjo6SXRlcmF0b3I6
Om9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdAotewotICAgIHJldHVybiBt
X3J1bkl0ZXJhdG9yID09IG90aGVyLm1fcnVuSXRlcmF0b3I7Ci19Ci0KLWlubGluZSBib29sIExp
bmVSZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBj
b25zdAotewotICAgIHJldHVybiBtX3J1bkl0ZXJhdG9yICE9IG90aGVyLm1fcnVuSXRlcmF0b3I7
Ci19Ci0KLWlubGluZSBMaW5lUmVzb2x2ZXI6Okl0ZXJhdG9yIExpbmVSZXNvbHZlcjo6YmVnaW4o
KSBjb25zdAotewotICAgIHJldHVybiBJdGVyYXRvcihtX3J1blJlc29sdmVyLmJlZ2luKCkpOwot
fQotCi1pbmxpbmUgTGluZVJlc29sdmVyOjpJdGVyYXRvciBMaW5lUmVzb2x2ZXI6OmVuZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIEl0ZXJhdG9yKG1fcnVuUmVzb2x2ZXIuZW5kKCkpOwotfQotCi1p
bmxpbmUgV1RGOjpJdGVyYXRvclJhbmdlPExpbmVSZXNvbHZlcjo6SXRlcmF0b3I+IExpbmVSZXNv
bHZlcjo6cmFuZ2VGb3JSZWN0KGNvbnN0IExheW91dFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAg
YXV0byBydW5SYW5nZSA9IG1fcnVuUmVzb2x2ZXIucmFuZ2VGb3JSZWN0KHJlY3QpOwotICAgIHJl
dHVybiB7IEl0ZXJhdG9yKHJ1blJhbmdlLmJlZ2luKCkpLCBJdGVyYXRvcihydW5SYW5nZS5lbmQo
KSkgfTsKLX0KLQotaW5saW5lIExpbmVSZXNvbHZlciBsaW5lUmVzb2x2ZXIoY29uc3QgUnVuUmVz
b2x2ZXImIHJ1blJlc29sdmVyKQotewotICAgIHJldHVybiBMaW5lUmVzb2x2ZXIocnVuUmVzb2x2
ZXIpOwotfQotCi19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTI3ZDc0NTEzM2EuLjAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJh
dG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJ
dGVyYXRvci5oIgotCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJIeXBoZW5h
dGlvbi5oIgotI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgotI2luY2x1ZGUgIlJlbmRlckNo
aWxkSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBTaW1wbGVMaW5lTGF5b3V0IHsKLQot
VGV4dEZyYWdtZW50SXRlcmF0b3I6OlN0eWxlOjpTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUpCi0gICAgOiBmb250KHN0eWxlLmZvbnRDYXNjYWRlKCkpCi0gICAgLCB0ZXh0QWxpZ24oc3R5
bGUudGV4dEFsaWduKCkpCi0gICAgLCBoYXNLZXJuaW5nT3JMaWdhdHVyZXMoZm9udC5lbmFibGVL
ZXJuaW5nKCkgfHwgZm9udC5yZXF1aXJlc1NoYXBpbmcoKSkKLSAgICAsIGNvbGxhcHNlV2hpdGVz
cGFjZShzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSkKLSAgICAsIHByZXNlcnZlTmV3bGluZShz
dHlsZS5wcmVzZXJ2ZU5ld2xpbmUoKSkKLSAgICAsIHdyYXBMaW5lcyhzdHlsZS5hdXRvV3JhcCgp
KQotICAgICwgYnJlYWtTcGFjZXMoc3R5bGUud2hpdGVTcGFjZSgpID09IFdoaXRlU3BhY2U6OkJy
ZWFrU3BhY2VzKQotICAgICwgYnJlYWtBbnlXb3JkT25PdmVyZmxvdyhzdHlsZS53b3JkQnJlYWso
KSA9PSBXb3JkQnJlYWs6OkJyZWFrQWxsICYmIHdyYXBMaW5lcykKLSAgICAsIGJyZWFrV29yZE9u
T3ZlcmZsb3coc3R5bGUuYnJlYWtXb3JkcygpICYmICh3cmFwTGluZXMgfHwgcHJlc2VydmVOZXds
aW5lKSkKLSAgICAsIGJyZWFrRmlyc3RXb3JkT25PdmVyZmxvdyhicmVha0FueVdvcmRPbk92ZXJm
bG93IHx8IGJyZWFrV29yZE9uT3ZlcmZsb3cpCi0gICAgLCBicmVha05CU1Aod3JhcExpbmVzICYm
IHN0eWxlLm5ic3BNb2RlKCkgPT0gTkJTUE1vZGU6OlNwYWNlKQotICAgICwga2VlcEFsbFdvcmRz
Rm9yQ0pLKHN0eWxlLndvcmRCcmVhaygpID09IFdvcmRCcmVhazo6S2VlcEFsbCkKLSAgICAsIHdv
cmRTcGFjaW5nKGZvbnQud29yZFNwYWNpbmcoKSkKLSAgICAsIHRhYldpZHRoKGNvbGxhcHNlV2hp
dGVzcGFjZSA/IFRhYlNpemUoMCkgOiBzdHlsZS50YWJTaXplKCkpCi0gICAgLCBzaG91bGRIeXBo
ZW5hdGUoc3R5bGUuaHlwaGVucygpID09IEh5cGhlbnM6OkF1dG8gJiYgY2FuSHlwaGVuYXRlKHN0
eWxlLmNvbXB1dGVkTG9jYWxlKCkpKQotICAgICwgaHlwaGVuU3RyaW5nV2lkdGgoc2hvdWxkSHlw
aGVuYXRlID8gZm9udC53aWR0aChUZXh0UnVuKFN0cmluZyhzdHlsZS5oeXBoZW5TdHJpbmcoKSkp
KSA6IDApCi0gICAgLCBoeXBoZW5MaW1pdEJlZm9yZShzdHlsZS5oeXBoZW5hdGlvbkxpbWl0QmVm
b3JlKCkgPCAwID8gMiA6IHN0eWxlLmh5cGhlbmF0aW9uTGltaXRCZWZvcmUoKSkKLSAgICAsIGh5
cGhlbkxpbWl0QWZ0ZXIoc3R5bGUuaHlwaGVuYXRpb25MaW1pdEFmdGVyKCkgPCAwID8gMiA6IHN0
eWxlLmh5cGhlbmF0aW9uTGltaXRBZnRlcigpKQotICAgICwgbG9jYWxlKHN0eWxlLmNvbXB1dGVk
TG9jYWxlKCkpCi17Ci0gICAgaWYgKHN0eWxlLmh5cGhlbmF0aW9uTGltaXRMaW5lcygpID4gLTEp
Ci0gICAgICAgIGh5cGhlbkxpbWl0TGluZXMgPSBzdHlsZS5oeXBoZW5hdGlvbkxpbWl0TGluZXMo
KTsKLX0KLQotVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudEl0ZXJhdG9yKGNvbnN0
IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKLSAgICA6IG1fZmxvd0NvbnRlbnRzKGZsb3cpCi0gICAg
LCBtX2N1cnJlbnRTZWdtZW50KG1fZmxvd0NvbnRlbnRzLmJlZ2luKCkpCi0gICAgLCBtX2xpbmVC
cmVha0l0ZXJhdG9yKG1fY3VycmVudFNlZ21lbnQtPnRleHQsIGZsb3cuc3R5bGUoKS5jb21wdXRl
ZExvY2FsZSgpKQotICAgICwgbV9zdHlsZShmbG93LnN0eWxlKCkpCi17Ci19Ci0KLVRleHRGcmFn
bWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgVGV4dEZyYWdtZW50SXRlcmF0b3I6Om5leHRUZXh0
RnJhZ21lbnQoZmxvYXQgeFBvc2l0aW9uKQotewotICAgIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpU
ZXh0RnJhZ21lbnQgbmV4dEZyYWdtZW50ID0gZmluZE5leHRUZXh0RnJhZ21lbnQoeFBvc2l0aW9u
KTsKLSAgICBtX2F0RW5kT2ZTZWdtZW50ID0gKG1fY3VycmVudFNlZ21lbnQgPT0gbV9mbG93Q29u
dGVudHMuZW5kKCkpIHx8IChtX3Bvc2l0aW9uID09IG1fY3VycmVudFNlZ21lbnQtPmVuZCk7Ci0g
ICAgcmV0dXJuIG5leHRGcmFnbWVudDsKLX0KLQotVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRG
cmFnbWVudCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6ZmluZE5leHRUZXh0RnJhZ21lbnQoZmxvYXQg
eFBvc2l0aW9uKQotewotICAgIC8vIEEgZnJhZ21lbnQgY2FuIGVpdGhlciBiZQotICAgIC8vIDEu
IGxpbmUgYnJlYWsgd2hlbiA8YnI+IGlzIHByZXNlbnQgb3IgcHJlc2VydmVOZXdsaW5lIGlzIG9u
IChub3QgY29uc2lkZXJlZCBhcyB3aGl0ZXNwYWNlKSBvcgotICAgIC8vIDIuIHdoaXRlc3BhY2Ug
KGNvbGxhc3BlZCwgbm9uLWNvbGxhcHNlZCBtdWx0aSBvciBzaW5nbGUpIG9yCi0gICAgLy8gMy4g
bm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycy4KLSAgICAvLyA0LiBjb250ZW50IGVuZC4KLSAgICBB
U1NFUlQobV9jdXJyZW50U2VnbWVudCAhPSBtX2Zsb3dDb250ZW50cy5lbmQoKSk7Ci0gICAgdW5z
aWduZWQgc3RhcnRQb3NpdGlvbiA9IG1fcG9zaXRpb247Ci0gICAgaWYgKG1fYXRFbmRPZlNlZ21l
bnQpCi0gICAgICAgICsrbV9jdXJyZW50U2VnbWVudDsKLQotICAgIGlmIChtX2N1cnJlbnRTZWdt
ZW50ID09IG1fZmxvd0NvbnRlbnRzLmVuZCgpKQotICAgICAgICByZXR1cm4gVGV4dEZyYWdtZW50
KHN0YXJ0UG9zaXRpb24sIHN0YXJ0UG9zaXRpb24sIDAsIFRleHRGcmFnbWVudDo6Q29udGVudEVu
ZCk7Ci0gICAgaWYgKGlzSGFyZExpbmVCcmVhayhtX2N1cnJlbnRTZWdtZW50KSkKLSAgICAgICAg
cmV0dXJuIFRleHRGcmFnbWVudChzdGFydFBvc2l0aW9uLCBzdGFydFBvc2l0aW9uLCAwLCBUZXh0
RnJhZ21lbnQ6OkhhcmRMaW5lQnJlYWspOwotICAgIGlmIChpc1NvZnRMaW5lQnJlYWsoc3RhcnRQ
b3NpdGlvbikpIHsKLSAgICAgICAgdW5zaWduZWQgZW5kUG9zaXRpb24gPSArK21fcG9zaXRpb247
Ci0gICAgICAgIHJldHVybiBUZXh0RnJhZ21lbnQoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24s
IDAsIFRleHRGcmFnbWVudDo6U29mdExpbmVCcmVhayk7Ci0gICAgfQotICAgIGZsb2F0IHdpZHRo
ID0gMDsKLSAgICBib29sIG92ZXJsYXBwaW5nRnJhZ21lbnQgPSBmYWxzZTsKLSAgICB1bnNpZ25l
ZCBlbmRQb3NpdGlvbiA9IHNraXBUb05leHRQb3NpdGlvbihQb3NpdGlvblR5cGU6Ok5vbldoaXRl
c3BhY2UsIHN0YXJ0UG9zaXRpb24sIHdpZHRoLCB4UG9zaXRpb24sIG92ZXJsYXBwaW5nRnJhZ21l
bnQpOwotICAgIHVuc2lnbmVkIHNlZ21lbnRFbmRQb3NpdGlvbiA9IG1fY3VycmVudFNlZ21lbnQt
PmVuZDsKLSAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbiA8PSBlbmRQb3NpdGlvbik7Ci0gICAgaWYg
KHN0YXJ0UG9zaXRpb24gPCBlbmRQb3NpdGlvbikgewotICAgICAgICBib29sIG11bHRpcGxlV2hp
dGVzcGFjZSA9IHN0YXJ0UG9zaXRpb24gKyAxIDwgZW5kUG9zaXRpb247Ci0gICAgICAgIGJvb2wg
aXNDb2xsYXBzZWQgPSBtdWx0aXBsZVdoaXRlc3BhY2UgJiYgbV9zdHlsZS5jb2xsYXBzZVdoaXRl
c3BhY2U7Ci0gICAgICAgIG1fcG9zaXRpb24gPSBlbmRQb3NpdGlvbjsKLSAgICAgICAgcmV0dXJu
IFRleHRGcmFnbWVudChzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgd2lkdGgsIFRleHRGcmFn
bWVudDo6V2hpdGVzcGFjZSwgZW5kUG9zaXRpb24gPT0gc2VnbWVudEVuZFBvc2l0aW9uLCBmYWxz
ZSwgaXNDb2xsYXBzZWQsIG1fc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlKTsKLSAgICB9Ci0gICAg
ZW5kUG9zaXRpb24gPSBza2lwVG9OZXh0UG9zaXRpb24oUG9zaXRpb25UeXBlOjpCcmVha2FibGUs
IHN0YXJ0UG9zaXRpb24sIHdpZHRoLCB4UG9zaXRpb24sIG92ZXJsYXBwaW5nRnJhZ21lbnQpOwot
ICAgIG1fcG9zaXRpb24gPSBlbmRQb3NpdGlvbjsKLSAgICByZXR1cm4gVGV4dEZyYWdtZW50KHN0
YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCB3aWR0aCwgVGV4dEZyYWdtZW50OjpOb25XaGl0ZXNw
YWNlLCBlbmRQb3NpdGlvbiA9PSBzZWdtZW50RW5kUG9zaXRpb24sIG92ZXJsYXBwaW5nRnJhZ21l
bnQsIGZhbHNlLCBmYWxzZSk7Ci19Ci0KLXZvaWQgVGV4dEZyYWdtZW50SXRlcmF0b3I6OnJldmVy
dFRvRW5kT2ZGcmFnbWVudChjb25zdCBUZXh0RnJhZ21lbnQmIGZyYWdtZW50KQotewotICAgIEFT
U0VSVChtX3Bvc2l0aW9uID49IGZyYWdtZW50LmVuZCgpKTsKLSAgICB3aGlsZSAobV9jdXJyZW50
U2VnbWVudC0+c3RhcnQgPiBmcmFnbWVudC5lbmQoKSkKLSAgICAgICAgLS1tX2N1cnJlbnRTZWdt
ZW50OwotICAgIC8vIFRPRE86IEl0IHJldmVydHMgdG8gdGhlIGxhc3QgZnJhZ21lbnQgb24gdGhl
IHNhbWUgcG9zaXRpb24sIGJ1dCB0aGF0J3Mgb2sgZm9yIG5vdyBhcyB3ZSBkb24ndCBuZWVkIHRv
Ci0gICAgLy8gZGlmZmVyZW50aWF0ZSBtdWx0aXBsZSByZW5kZXJlcnMgb24gdGhlIHNhbWUgcG9z
aXRpb24uCi0gICAgbV9wb3NpdGlvbiA9IGZyYWdtZW50LmVuZCgpOwotICAgIG1fYXRFbmRPZlNl
Z21lbnQgPSBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBuZXh0QnJlYWthYmxl
UG9zaXRpb25JblNlZ21lbnQoTGF6eUxpbmVCcmVha0l0ZXJhdG9yJiBsaW5lQnJlYWtJdGVyYXRv
ciwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgYm9vbCBicmVha05CU1AsIGJvb2wga2VlcEFsbFdv
cmRzRm9yQ0pLKQotewotICAgIGlmIChrZWVwQWxsV29yZHNGb3JDSkspIHsKLSAgICAgICAgaWYg
KGJyZWFrTkJTUCkKLSAgICAgICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25LZWVw
aW5nQWxsV29yZHMobGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgICAgICBy
ZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uS2VlcGluZ0FsbFdvcmRzSWdub3JpbmdOQlNQKGxp
bmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKLSAgICB9Ci0KLSAgICBpZiAobGluZUJy
ZWFrSXRlcmF0b3IubW9kZSgpID09IExpbmVCcmVha0l0ZXJhdG9yTW9kZTo6RGVmYXVsdCkgewot
ICAgICAgICBpZiAoYnJlYWtOQlNQKQotICAgICAgICAgICAgcmV0dXJuIFdlYkNvcmU6Om5leHRC
cmVha2FibGVQb3NpdGlvbihsaW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7Ci0gICAg
ICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25JZ25vcmluZ05CU1AobGluZUJyZWFrSXRl
cmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgIH0KLQotICAgIGlmIChicmVha05CU1ApCi0gICAg
ICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25XaXRob3V0U2hvcnRjdXQobGluZUJyZWFr
SXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRp
b25JZ25vcmluZ05CU1BXaXRob3V0U2hvcnRjdXQobGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9z
aXRpb24pOwotfQotCi11bnNpZ25lZCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6bmV4dEJyZWFrYWJs
ZVBvc2l0aW9uKGNvbnN0IEZsb3dDb250ZW50czo6U2VnbWVudCYgc2VnbWVudCwgdW5zaWduZWQg
c3RhcnRQb3NpdGlvbikKLXsKLSAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbiA8IHNlZ21lbnQuZW5k
KTsKLSAgICBTdHJpbmdWaWV3IGN1cnJlbnRUZXh0ID0gbV9saW5lQnJlYWtJdGVyYXRvci5zdHJp
bmdWaWV3KCk7Ci0gICAgU3RyaW5nVmlldyBzZWdtZW50VGV4dCA9IFN0cmluZ1ZpZXcoc2VnbWVu
dC50ZXh0KTsKLSAgICBpZiAoc2VnbWVudFRleHQgIT0gY3VycmVudFRleHQpIHsKLSAgICAgICAg
dW5zaWduZWQgdGV4dExlbmd0aCA9IGN1cnJlbnRUZXh0Lmxlbmd0aCgpOwotICAgICAgICBVQ2hh
ciBsYXN0Q2hhcmFjdGVyID0gdGV4dExlbmd0aCA+IDAgPyBjdXJyZW50VGV4dFt0ZXh0TGVuZ3Ro
IC0gMV0gOiAwOwotICAgICAgICBVQ2hhciBzZWNvbmRUb0xhc3RDaGFyYWN0ZXIgPSB0ZXh0TGVu
Z3RoID4gMSA/IGN1cnJlbnRUZXh0W3RleHRMZW5ndGggLSAyXSA6IDA7Ci0gICAgICAgIG1fbGlu
ZUJyZWFrSXRlcmF0b3Iuc2V0UHJpb3JDb250ZXh0KGxhc3RDaGFyYWN0ZXIsIHNlY29uZFRvTGFz
dENoYXJhY3Rlcik7Ci0gICAgICAgIG1fbGluZUJyZWFrSXRlcmF0b3IucmVzZXRTdHJpbmdBbmRS
ZWxlYXNlSXRlcmF0b3Ioc2VnbWVudC50ZXh0LCBtX3N0eWxlLmxvY2FsZSwgTGluZUJyZWFrSXRl
cmF0b3JNb2RlOjpEZWZhdWx0KTsKLSAgICB9Ci0gICAgcmV0dXJuIHNlZ21lbnQudG9SZW5kZXJQ
b3NpdGlvbihuZXh0QnJlYWthYmxlUG9zaXRpb25JblNlZ21lbnQobV9saW5lQnJlYWtJdGVyYXRv
ciwgc2VnbWVudC50b1NlZ21lbnRQb3NpdGlvbihzdGFydFBvc2l0aW9uKSwgbV9zdHlsZS5icmVh
a05CU1AsIG1fc3R5bGUua2VlcEFsbFdvcmRzRm9yQ0pLKSk7Ci19Ci0KLXVuc2lnbmVkIFRleHRG
cmFnbWVudEl0ZXJhdG9yOjpuZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKGNvbnN0IEZsb3dDb250
ZW50czo6U2VnbWVudCYgc2VnbWVudCwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbikKLXsKLSAgICBB
U1NFUlQoc3RhcnRQb3NpdGlvbiA8IHNlZ21lbnQuZW5kKTsKLSAgICB1bnNpZ25lZCBwb3NpdGlv
biA9IHN0YXJ0UG9zaXRpb247Ci0gICAgZm9yICg7IHBvc2l0aW9uIDwgc2VnbWVudC5lbmQ7ICsr
cG9zaXRpb24pIHsKLSAgICAgICAgYXV0byBjaGFyYWN0ZXIgPSBzZWdtZW50LnRleHRbc2VnbWVu
dC50b1NlZ21lbnRQb3NpdGlvbihwb3NpdGlvbildOwotICAgICAgICBib29sIGlzV2hpdGVzcGFj
ZSA9IGNoYXJhY3RlciA9PSAnICcgfHwgY2hhcmFjdGVyID09ICdcdCcgfHwgKCFtX3N0eWxlLnBy
ZXNlcnZlTmV3bGluZSAmJiBjaGFyYWN0ZXIgPT0gJ1xuJyk7Ci0gICAgICAgIGlmICghaXNXaGl0
ZXNwYWNlKQotICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwotICAgIH0KLSAgICByZXR1cm4g
cG9zaXRpb247Ci19Ci0KLU9wdGlvbmFsPHVuc2lnbmVkPiBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6
bGFzdEh5cGhlblBvc2l0aW9uKGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21l
bnQmIHJ1biwgdW5zaWduZWQgYmVmb3JlKSBjb25zdAotewotICAgIEFTU0VSVChydW4uc3RhcnQo
KSA8IGJlZm9yZSk7Ci0gICAgYXV0byYgc2VnbWVudCA9ICptX2N1cnJlbnRTZWdtZW50OwotICAg
IEFTU0VSVChzZWdtZW50LnN0YXJ0IDw9IGJlZm9yZSAmJiBiZWZvcmUgPD0gc2VnbWVudC5lbmQp
OwotICAgIEFTU0VSVChpczxSZW5kZXJUZXh0PihzZWdtZW50LnJlbmRlcmVyKSk7Ci0gICAgaWYg
KCFtX3N0eWxlLnNob3VsZEh5cGhlbmF0ZSB8fCBydW4udHlwZSgpICE9IFRleHRGcmFnbWVudDo6
Tm9uV2hpdGVzcGFjZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAvLyBDaGVj
ayBpZiB0aGVyZSBhcmUgZW5vdWdoIGNoYXJhY3RlcnMgaW4gdGhlIHJ1bi4KLSAgICB1bnNpZ25l
ZCBydW5MZW5ndGggPSBydW4uZW5kKCkgLSBydW4uc3RhcnQoKTsKLSAgICBpZiAobV9zdHlsZS5o
eXBoZW5MaW1pdEJlZm9yZSA+PSBydW5MZW5ndGggfHwgbV9zdHlsZS5oeXBoZW5MaW1pdEFmdGVy
ID49IHJ1bkxlbmd0aCB8fCBtX3N0eWxlLmh5cGhlbkxpbWl0QmVmb3JlICsgbV9zdHlsZS5oeXBo
ZW5MaW1pdEFmdGVyID4gcnVuTGVuZ3RoKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
ICAgIGF1dG8gcnVuU3RhcnQgPSBzZWdtZW50LnRvU2VnbWVudFBvc2l0aW9uKHJ1bi5zdGFydCgp
KTsKLSAgICBhdXRvIGJlZm9yZUluZGV4ID0gc2VnbWVudC50b1NlZ21lbnRQb3NpdGlvbihiZWZv
cmUpIC0gcnVuU3RhcnQ7Ci0gICAgaWYgKGJlZm9yZUluZGV4IDw9IG1fc3R5bGUuaHlwaGVuTGlt
aXRCZWZvcmUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgLy8gQWRqdXN0IGJl
Zm9yZSBpbmRleCB0byBhY2NvbW1vZGF0ZSB0aGUgbGltaXQtYWZ0ZXIgdmFsdWUgKHRoaXMgaXMg
dGhlIGxhc3QgcG90ZW50aWFsIGh5cGhlbiBsb2NhdGlvbikuCi0gICAgYmVmb3JlSW5kZXggPSBz
dGQ6Om1pbihiZWZvcmVJbmRleCwgcnVuTGVuZ3RoIC0gbV9zdHlsZS5oeXBoZW5MaW1pdEFmdGVy
ICsgMSk7Ci0gICAgYXV0byBzdWJzdHJpbmdGb3JIeXBoZW5hdGlvbiA9IFN0cmluZ1ZpZXcoc2Vn
bWVudC50ZXh0KS5zdWJzdHJpbmcocnVuU3RhcnQsIHJ1bi5lbmQoKSAtIHJ1bi5zdGFydCgpKTsK
LSAgICBhdXRvIGh5cGhlbkxvY2F0aW9uID0gbGFzdEh5cGhlbkxvY2F0aW9uKHN1YnN0cmluZ0Zv
ckh5cGhlbmF0aW9uLCBiZWZvcmVJbmRleCwgbV9zdHlsZS5sb2NhbGUpOwotICAgIC8vIENoZWNr
IGlmIHRoZXJlIGFyZSBlbm91Z2ggY2hhcmFjdGVycyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBoeXBo
ZW4uCi0gICAgaWYgKGh5cGhlbkxvY2F0aW9uICYmIGh5cGhlbkxvY2F0aW9uID49IG1fc3R5bGUu
aHlwaGVuTGltaXRCZWZvcmUgJiYgbV9zdHlsZS5oeXBoZW5MaW1pdEFmdGVyIDw9IChydW5MZW5n
dGggLSBoeXBoZW5Mb2NhdGlvbikpCi0gICAgICAgIHJldHVybiBzZWdtZW50LnRvUmVuZGVyUG9z
aXRpb24oaHlwaGVuTG9jYXRpb24gKyBydW5TdGFydCk7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLX0KLQotdW5zaWduZWQgVGV4dEZyYWdtZW50SXRlcmF0b3I6OnNraXBUb05leHRQb3NpdGlv
bihQb3NpdGlvblR5cGUgcG9zaXRpb25UeXBlLCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCBmbG9h
dCYgd2lkdGgsIGZsb2F0IHhQb3NpdGlvbiwgYm9vbCYgb3ZlcmxhcHBpbmdGcmFnbWVudCkKLXsK
LSAgICBvdmVybGFwcGluZ0ZyYWdtZW50ID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgY3VycmVudFBv
c2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKLSAgICB1bnNpZ25lZCBuZXh0UG9zaXRpb24gPSBjdXJy
ZW50UG9zaXRpb247Ci0gICAgLy8gQ29sbGFwc2VkIHdoaXRlc3BhY2UgaGFzIGNvbnN0YW50IHdp
ZHRoLiBEbyBub3QgbWVhc3VyZSBpdC4KLSAgICBpZiAocG9zaXRpb25UeXBlID09IE5vbldoaXRl
c3BhY2UpCi0gICAgICAgIG5leHRQb3NpdGlvbiA9IG5leHROb25XaGl0ZXNwYWNlUG9zaXRpb24o
Km1fY3VycmVudFNlZ21lbnQsIGN1cnJlbnRQb3NpdGlvbik7Ci0gICAgZWxzZSBpZiAocG9zaXRp
b25UeXBlID09IEJyZWFrYWJsZSkgewotICAgICAgICBuZXh0UG9zaXRpb24gPSBuZXh0QnJlYWth
YmxlUG9zaXRpb24oKm1fY3VycmVudFNlZ21lbnQsIGN1cnJlbnRQb3NpdGlvbik7Ci0gICAgICAg
IC8vIG5leHRCcmVha2FibGVQb3NpdGlvbiByZXR1cm5zIHRoZSBzYW1lIHBvc2l0aW9uIGZvciBj
ZXJ0YWluIGNoYXJhY3RlcnMgc3VjaCBhcyBoeXBoZW5zLiBDYWxsIG5leHQgYWdhaW4gd2l0aCBt
b2RpZmllZCBwb3NpdGlvbiB1bmxlc3Mgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIHNlZ21lbnQu
Ci0gICAgICAgIGJvb2wgc2tpcEN1cnJlbnRQb3NpdGlvbiA9IG5leHRQb3NpdGlvbiA9PSBjdXJy
ZW50UG9zaXRpb247Ci0gICAgICAgIGlmIChza2lwQ3VycmVudFBvc2l0aW9uKSB7Ci0gICAgICAg
ICAgICAvLyBXaGVuIHdlIGFyZSBza2lwcGluZyB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIHNl
Z21lbnQsIGp1c3QgbW92ZSB0byB0aGUgZW5kIG9mIHRoZSBzZWdtZW50IGFuZCB3ZSdsbCBjaGVj
ayB0aGUgbmV4dCBzZWdtZW50IHdoZXRoZXIgaXQgaXMgYW4gb3ZlcmxhcHBpbmcgZnJhZ21lbnQu
Ci0gICAgICAgICAgICBBU1NFUlQoY3VycmVudFBvc2l0aW9uIDwgbV9jdXJyZW50U2VnbWVudC0+
ZW5kKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50UG9zaXRpb24gPT0gbV9jdXJyZW50U2VnbWVu
dC0+ZW5kIC0gMSkKLSAgICAgICAgICAgICAgICBuZXh0UG9zaXRpb24gPSBtX2N1cnJlbnRTZWdt
ZW50LT5lbmQ7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbmV4dFBvc2l0aW9u
ID0gbmV4dEJyZWFrYWJsZVBvc2l0aW9uKCptX2N1cnJlbnRTZWdtZW50LCBjdXJyZW50UG9zaXRp
b24gKyAxKTsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSBuZWVkIHRvIGtub3cgd2hldGhlciB0
aGUgd29yZCBhY3R1YWxseSBmaW5pc2hlcyBhdCB0aGUgZW5kIG9mIHRoaXMgcmVuZGVyZXIgb3Ig
bm90LgotICAgICAgICBpZiAobmV4dFBvc2l0aW9uID09IG1fY3VycmVudFNlZ21lbnQtPmVuZCkg
ewotICAgICAgICAgICAgY29uc3QgYXV0byBuZXh0U2VnbWVudCA9IG1fY3VycmVudFNlZ21lbnQg
KyAxOwotICAgICAgICAgICAgaWYgKG5leHRTZWdtZW50ICE9IG1fZmxvd0NvbnRlbnRzLmVuZCgp
ICYmICFpc0hhcmRMaW5lQnJlYWsobmV4dFNlZ21lbnQpKQotICAgICAgICAgICAgICAgIG92ZXJs
YXBwaW5nRnJhZ21lbnQgPSBuZXh0UG9zaXRpb24gPCBuZXh0QnJlYWthYmxlUG9zaXRpb24oKm5l
eHRTZWdtZW50LCBuZXh0UG9zaXRpb24pOwotICAgICAgICB9Ci0gICAgfQotICAgIHdpZHRoID0g
MDsKLSAgICBpZiAobmV4dFBvc2l0aW9uID09IGN1cnJlbnRQb3NpdGlvbikKLSAgICAgICAgcmV0
dXJuIGN1cnJlbnRQb3NpdGlvbjsKLSAgICAvLyBCb3RoIG5vbi1jb2xsYXBzZWQgd2hpdGVzcGFj
ZSBhbmQgbm9uLXdoaXRlc3BhY2UgcnVucyBuZWVkIHRvIGJlIG1lYXN1cmVkLgotICAgIGJvb2wg
bWVhc3VyZVRleHQgPSBwb3NpdGlvblR5cGUgIT0gTm9uV2hpdGVzcGFjZSB8fCAhbV9zdHlsZS5j
b2xsYXBzZVdoaXRlc3BhY2U7Ci0gICAgaWYgKG1lYXN1cmVUZXh0KQotICAgICAgICB3aWR0aCA9
IHRoaXMtPnRleHRXaWR0aChjdXJyZW50UG9zaXRpb24sIG5leHRQb3NpdGlvbiwgeFBvc2l0aW9u
KTsKLSAgICBlbHNlIGlmIChzdGFydFBvc2l0aW9uIDwgbmV4dFBvc2l0aW9uKQotICAgICAgICB3
aWR0aCA9IG1fc3R5bGUuZm9udC5zcGFjZVdpZHRoKCkgKyBtX3N0eWxlLndvcmRTcGFjaW5nOwot
ICAgIHJldHVybiBuZXh0UG9zaXRpb247Ci19Ci0KLWZsb2F0IFRleHRGcmFnbWVudEl0ZXJhdG9y
Ojp0ZXh0V2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIGZsb2F0IHhQb3NpdGlvbikg
Y29uc3QKLXsKLSAgICBhdXRvJiBzZWdtZW50ID0gKm1fY3VycmVudFNlZ21lbnQ7Ci0gICAgQVNT
RVJUKHNlZ21lbnQuc3RhcnQgPD0gZnJvbSAmJiBmcm9tIDw9IHNlZ21lbnQuZW5kICYmIHNlZ21l
bnQuc3RhcnQgPD0gdG8gJiYgdG8gPD0gc2VnbWVudC5lbmQpOwotICAgIEFTU0VSVChpczxSZW5k
ZXJUZXh0PihzZWdtZW50LnJlbmRlcmVyKSk7Ci0gICAgaWYgKCFtX3N0eWxlLmZvbnQuc2l6ZSgp
IHx8IGZyb20gPT0gdG8pCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgdW5zaWduZWQgc2VnbWVu
dEZyb20gPSBzZWdtZW50LnRvU2VnbWVudFBvc2l0aW9uKGZyb20pOwotICAgIHVuc2lnbmVkIHNl
Z21lbnRUbyA9IHNlZ21lbnQudG9TZWdtZW50UG9zaXRpb24odG8pOwotICAgIGlmIChtX3N0eWxl
LmZvbnQuaXNGaXhlZFBpdGNoKCkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJUZXh0
PihzZWdtZW50LnJlbmRlcmVyKS53aWR0aChzZWdtZW50RnJvbSwgc2VnbWVudFRvIC0gc2VnbWVu
dEZyb20sIG1fc3R5bGUuZm9udCwgeFBvc2l0aW9uLCBudWxscHRyLCBudWxscHRyKTsKLQotICAg
IGJvb2wgbWVhc3VyZVdpdGhFbmRTcGFjZSA9IG1fc3R5bGUuaGFzS2VybmluZ09yTGlnYXR1cmVz
ICYmIG1fc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlCi0gICAgICAgICYmIHNlZ21lbnRUbyA8IHNl
Z21lbnQudGV4dC5sZW5ndGgoKSAmJiBzZWdtZW50LnRleHRbc2VnbWVudFRvXSA9PSAnICc7Ci0g
ICAgaWYgKG1lYXN1cmVXaXRoRW5kU3BhY2UpCi0gICAgICAgICsrc2VnbWVudFRvOwotICAgIGZs
b2F0IHdpZHRoID0gMDsKLSAgICBpZiAoc2VnbWVudC5jYW5Vc2VTaW1wbGlmaWVkVGV4dE1lYXN1
cmluZykKLSAgICAgICAgd2lkdGggPSBtX3N0eWxlLmZvbnQud2lkdGhGb3JTaW1wbGVUZXh0KFN0
cmluZ1ZpZXcoc2VnbWVudC50ZXh0KS5zdWJzdHJpbmcoc2VnbWVudEZyb20sIHNlZ21lbnRUbyAt
IHNlZ21lbnRGcm9tKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFRleHRSdW4gcnVuKFN0cmluZ1Zp
ZXcoc2VnbWVudC50ZXh0KS5zdWJzdHJpbmcoc2VnbWVudEZyb20sIHNlZ21lbnRUbyAtIHNlZ21l
bnRGcm9tKSwgeFBvc2l0aW9uKTsKLSAgICAgICAgaWYgKG1fc3R5bGUudGFiV2lkdGgpCi0gICAg
ICAgICAgICBydW4uc2V0VGFiU2l6ZSh0cnVlLCBtX3N0eWxlLnRhYldpZHRoKTsKLSAgICAgICAg
d2lkdGggPSBtX3N0eWxlLmZvbnQud2lkdGgocnVuKTsKLSAgICB9Ci0gICAgaWYgKG1lYXN1cmVX
aXRoRW5kU3BhY2UpCi0gICAgICAgIHdpZHRoIC09IChtX3N0eWxlLmZvbnQuc3BhY2VXaWR0aCgp
ICsgbV9zdHlsZS53b3JkU3BhY2luZyk7Ci0gICAgcmV0dXJuIHN0ZDo6bWF4PGZsb2F0PigwLCB3
aWR0aCk7Ci19Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZjOWMzN2Q2M2NiLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRv
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQnJlYWtMaW5lcy5oIgotI2luY2x1ZGUgIlJlbmRlckxp
bmVCcmVhay5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJCbG9ja0Zsb3c7Ci1jbGFzcyBSZW5k
ZXJTdHlsZTsKLQotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewotCi1jbGFzcyBUZXh0RnJh
Z21lbnRJdGVyYXRvciAgewotcHVibGljOgotICAgIFRleHRGcmFnbWVudEl0ZXJhdG9yKGNvbnN0
IFJlbmRlckJsb2NrRmxvdyYpOwotICAgIGNsYXNzIFRleHRGcmFnbWVudCB7Ci0gICAgcHVibGlj
OgotICAgICAgICBlbnVtIFR5cGUgeyBJbnZhbGlkLCBDb250ZW50RW5kLCBTb2Z0TGluZUJyZWFr
LCBIYXJkTGluZUJyZWFrLCBXaGl0ZXNwYWNlLCBOb25XaGl0ZXNwYWNlIH07Ci0gICAgICAgIFRl
eHRGcmFnbWVudCgpID0gZGVmYXVsdDsKLSAgICAgICAgVGV4dEZyYWdtZW50KHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBlbmQsIGZsb2F0IHdpZHRoLCBUeXBlIHR5cGUsIGJvb2wgaXNMYXN0SW5S
ZW5kZXJlciA9IGZhbHNlLCBib29sIG92ZXJsYXBzVG9OZXh0UmVuZGVyZXIgPSBmYWxzZSwgYm9v
bCBpc0NvbGxhcHNlZCA9IGZhbHNlLCBib29sIGlzQ29sbGFwc2libGUgPSBmYWxzZSkKLSAgICAg
ICAgICAgIDogbV9zdGFydChzdGFydCkKLSAgICAgICAgICAgICwgbV9lbmQoZW5kKQotICAgICAg
ICAgICAgLCBtX3dpZHRoKHdpZHRoKQotICAgICAgICAgICAgLCBtX3R5cGUodHlwZSkKLSAgICAg
ICAgICAgICwgbV9pc0xhc3RJblJlbmRlcmVyKGlzTGFzdEluUmVuZGVyZXIpCi0gICAgICAgICAg
ICAsIG1fb3ZlcmxhcHNUb05leHRSZW5kZXJlcihvdmVybGFwc1RvTmV4dFJlbmRlcmVyKQotICAg
ICAgICAgICAgLCBtX2lzQ29sbGFwc2VkKGlzQ29sbGFwc2VkKQotICAgICAgICAgICAgLCBtX2lz
Q29sbGFwc2libGUoaXNDb2xsYXBzaWJsZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAg
ICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV90eXBlICE9IEludmFsaWQ7IH0KLSAg
ICAgICAgdW5zaWduZWQgc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9Ci0gICAgICAg
IHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9Ci0gICAgICAgIHVuc2lnbmVk
IGxlbmd0aCgpIGNvbnN0IHsgQVNTRVJUKG1fZW5kID49IG1fc3RhcnQpOyByZXR1cm4gbV9lbmQg
LSBtX3N0YXJ0OyB9Ci0gICAgICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0
aDsgfQotICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICAg
ICAgYm9vbCBvdmVybGFwc1RvTmV4dFJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9vdmVybGFw
c1RvTmV4dFJlbmRlcmVyOyB9Ci0gICAgICAgIGJvb2wgaXNMYXN0SW5SZW5kZXJlcigpIGNvbnN0
IHsgcmV0dXJuIG1faXNMYXN0SW5SZW5kZXJlcjsgfQotICAgICAgICBib29sIGlzTGluZUJyZWFr
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFNvZnRMaW5lQnJlYWsgfHwgbV90eXBlID09IEhh
cmRMaW5lQnJlYWs7IH0KLSAgICAgICAgYm9vbCBpc0NvbGxhcHNlZCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNDb2xsYXBzZWQ7IH0KLSAgICAgICAgYm9vbCBpc0NvbGxhcHNpYmxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0NvbGxhcHNpYmxlOyB9Ci0gICAgICAgIGJvb2wgaGFzSHlwaGVuKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNIeXBoZW47IH0KLQotICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiBzdGFydCgpID09IGVuZCgpICYmICFpc0xpbmVCcmVhaygpOyB9Ci0gICAgICAgIFRl
eHRGcmFnbWVudCBzcGxpdCh1bnNpZ25lZCBzcGxpdFBvc2l0aW9uLCBmbG9hdCBsZWZ0U2lkZVdp
ZHRoLCBmbG9hdCByaWdodFNpZGVXaWR0aCk7Ci0gICAgICAgIFRleHRGcmFnbWVudCBzcGxpdFdp
dGhIeXBoZW4odW5zaWduZWQgaHlwaGVuUG9zaXRpb24sIGZsb2F0IGh5cGhlblN0cmluZ1dpZHRo
LCBmbG9hdCBsZWZ0U2lkZVdpZHRoLCBmbG9hdCByaWdodFNpZGVXaWR0aCk7Ci0gICAgICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBUZXh0RnJhZ21lbnQmIG90aGVyKSBjb25zdAotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gbV9zdGFydCA9PSBvdGhlci5tX3N0YXJ0Ci0gICAgICAgICAg
ICAgICAgJiYgbV9lbmQgPT0gb3RoZXIubV9lbmQKLSAgICAgICAgICAgICAgICAmJiBtX3dpZHRo
ID09IG90aGVyLm1fd2lkdGgKLSAgICAgICAgICAgICAgICAmJiBtX3R5cGUgPT0gb3RoZXIubV90
eXBlCi0gICAgICAgICAgICAgICAgJiYgbV9pc0xhc3RJblJlbmRlcmVyID09IG90aGVyLm1faXNM
YXN0SW5SZW5kZXJlcgotICAgICAgICAgICAgICAgICYmIG1fb3ZlcmxhcHNUb05leHRSZW5kZXJl
ciA9PSBvdGhlci5tX292ZXJsYXBzVG9OZXh0UmVuZGVyZXIKLSAgICAgICAgICAgICAgICAmJiBt
X2lzQ29sbGFwc2VkID09IG90aGVyLm1faXNDb2xsYXBzZWQKLSAgICAgICAgICAgICAgICAmJiBt
X2lzQ29sbGFwc2libGUgPT0gb3RoZXIubV9pc0NvbGxhcHNpYmxlCi0gICAgICAgICAgICAgICAg
JiYgbV9oYXNIeXBoZW4gPT0gb3RoZXIubV9oYXNIeXBoZW47Ci0gICAgICAgIH0KLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIHVuc2lnbmVkIG1fc3RhcnQgeyAwIH07Ci0gICAgICAgIHVuc2lnbmVk
IG1fZW5kIHsgMCB9OwotICAgICAgICBmbG9hdCBtX3dpZHRoIHsgMCB9OwotICAgICAgICBUeXBl
IG1fdHlwZSB7IEludmFsaWQgfTsKLSAgICAgICAgYm9vbCBtX2lzTGFzdEluUmVuZGVyZXIgeyBm
YWxzZSB9OwotICAgICAgICBib29sIG1fb3ZlcmxhcHNUb05leHRSZW5kZXJlciB7IGZhbHNlIH07
Ci0gICAgICAgIGJvb2wgbV9pc0NvbGxhcHNlZCB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgbV9p
c0NvbGxhcHNpYmxlIHsgZmFsc2UgfTsKLSAgICAgICAgYm9vbCBtX2hhc0h5cGhlbiB7IGZhbHNl
IH07Ci0gICAgfTsKLSAgICBUZXh0RnJhZ21lbnQgbmV4dFRleHRGcmFnbWVudChmbG9hdCB4UG9z
aXRpb24gPSAwKTsKLSAgICB2b2lkIHJldmVydFRvRW5kT2ZGcmFnbWVudChjb25zdCBUZXh0RnJh
Z21lbnQmKTsKLQotICAgIC8vIEZJWE1FOiBUaGVzZSBmdW5jdGlvbnMgYmVsb3cgc2hvdWxkIGJl
IGRlY291cGxlZCBmcm9tIHRoZSB0ZXh0IGl0ZXJhdG9yLgotICAgIGZsb2F0IHRleHRXaWR0aCh1
bnNpZ25lZCBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlvbiwgZmxvYXQgeFBvc2l0
aW9uKSBjb25zdDsKLSAgICBPcHRpb25hbDx1bnNpZ25lZD4gbGFzdEh5cGhlblBvc2l0aW9uKGNv
bnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIHJ1biwgdW5zaWduZWQgYmVm
b3JlSW5kZXgpIGNvbnN0OwotCi0gICAgc3RydWN0IFN0eWxlIHsKLSAgICAgICAgZXhwbGljaXQg
U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmKTsKLQotICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udDsKLSAgICAgICAgVGV4dEFsaWduTW9kZSB0ZXh0QWxpZ247Ci0gICAgICAgIGJvb2wgaGFz
S2VybmluZ09yTGlnYXR1cmVzOwotICAgICAgICBib29sIGNvbGxhcHNlV2hpdGVzcGFjZTsKLSAg
ICAgICAgYm9vbCBwcmVzZXJ2ZU5ld2xpbmU7Ci0gICAgICAgIGJvb2wgd3JhcExpbmVzOwotICAg
ICAgICBib29sIGJyZWFrU3BhY2VzOwotICAgICAgICBib29sIGJyZWFrQW55V29yZE9uT3ZlcmZs
b3c7Ci0gICAgICAgIGJvb2wgYnJlYWtXb3JkT25PdmVyZmxvdzsKLSAgICAgICAgYm9vbCBicmVh
a0ZpcnN0V29yZE9uT3ZlcmZsb3c7Ci0gICAgICAgIGJvb2wgYnJlYWtOQlNQOwotICAgICAgICBi
b29sIGtlZXBBbGxXb3Jkc0ZvckNKSzsKLSAgICAgICAgZmxvYXQgd29yZFNwYWNpbmc7Ci0gICAg
ICAgIFRhYlNpemUgdGFiV2lkdGg7Ci0gICAgICAgIGJvb2wgc2hvdWxkSHlwaGVuYXRlOwotICAg
ICAgICBmbG9hdCBoeXBoZW5TdHJpbmdXaWR0aDsKLSAgICAgICAgdW5zaWduZWQgaHlwaGVuTGlt
aXRCZWZvcmU7Ci0gICAgICAgIHVuc2lnbmVkIGh5cGhlbkxpbWl0QWZ0ZXI7Ci0gICAgICAgIEF0
b21TdHJpbmcgbG9jYWxlOwotICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gaHlwaGVuTGltaXRM
aW5lczsKLSAgICB9OwotICAgIGNvbnN0IFN0eWxlJiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3R5bGU7IH0KLQotcHJpdmF0ZToKLSAgICBUZXh0RnJhZ21lbnQgZmluZE5leHRUZXh0RnJhZ21l
bnQoZmxvYXQgeFBvc2l0aW9uKTsKLSAgICBlbnVtIFBvc2l0aW9uVHlwZSB7IEJyZWFrYWJsZSwg
Tm9uV2hpdGVzcGFjZSB9OwotICAgIHVuc2lnbmVkIHNraXBUb05leHRQb3NpdGlvbihQb3NpdGlv
blR5cGUsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIGZsb2F0JiB3aWR0aCwgZmxvYXQgeFBvc2l0
aW9uLCBib29sJiBvdmVybGFwcGluZ0ZyYWdtZW50KTsKLSAgICBib29sIGlzU29mdExpbmVCcmVh
ayh1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7Ci0gICAgYm9vbCBpc0hhcmRMaW5lQnJlYWsoY29u
c3QgRmxvd0NvbnRlbnRzOjpJdGVyYXRvciYgc2VnbWVudCkgY29uc3Q7Ci0gICAgdW5zaWduZWQg
bmV4dEJyZWFrYWJsZVBvc2l0aW9uKGNvbnN0IEZsb3dDb250ZW50czo6U2VnbWVudCYsIHVuc2ln
bmVkIHN0YXJ0UG9zaXRpb24pOwotICAgIHVuc2lnbmVkIG5leHROb25XaGl0ZXNwYWNlUG9zaXRp
b24oY29uc3QgRmxvd0NvbnRlbnRzOjpTZWdtZW50JiwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbik7
Ci0KLSAgICBGbG93Q29udGVudHMgbV9mbG93Q29udGVudHM7Ci0gICAgRmxvd0NvbnRlbnRzOjpJ
dGVyYXRvciBtX2N1cnJlbnRTZWdtZW50OwotICAgIExhenlMaW5lQnJlYWtJdGVyYXRvciBtX2xp
bmVCcmVha0l0ZXJhdG9yOwotICAgIGNvbnN0IFN0eWxlIG1fc3R5bGU7Ci0gICAgdW5zaWduZWQg
bV9wb3NpdGlvbiB7IDAgfTsKLSAgICBib29sIG1fYXRFbmRPZlNlZ21lbnQgeyBmYWxzZSB9Owot
fTsKLQotaW5saW5lIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgVGV4dEZyYWdt
ZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6c3BsaXQodW5zaWduZWQgc3BsaXRQb3NpdGlvbiwg
ZmxvYXQgbGVmdFNpZGVXaWR0aCwgZmxvYXQgcmlnaHRTaWRlV2lkdGgpCi17Ci0gICAgYXV0byB1
cGRhdGVGcmFnbWVudFByb3BlcnRpZXMgPSBbXSAoVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgdW5z
aWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgZmxvYXQgd2lkdGgpCi0gICAgewotICAgICAgICBm
cmFnbWVudC5tX3N0YXJ0ID0gc3RhcnQ7Ci0gICAgICAgIGZyYWdtZW50Lm1fZW5kID0gZW5kOwot
ICAgICAgICBmcmFnbWVudC5tX3dpZHRoID0gd2lkdGg7Ci0gICAgICAgIGlmIChmcmFnbWVudC5z
dGFydCgpICsgMSA+IGZyYWdtZW50LmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBmcmFnbWVudC5tX2lzQ29sbGFwc2VkID0gZmFsc2U7Ci0gICAgfTsKLQotICAgIFRleHRGcmFn
bWVudCByaWdodFNpZGUoKnRoaXMpOwotICAgIHVwZGF0ZUZyYWdtZW50UHJvcGVydGllcygqdGhp
cywgc3RhcnQoKSwgc3BsaXRQb3NpdGlvbiwgbGVmdFNpZGVXaWR0aCk7Ci0gICAgdXBkYXRlRnJh
Z21lbnRQcm9wZXJ0aWVzKHJpZ2h0U2lkZSwgc3BsaXRQb3NpdGlvbiwgcmlnaHRTaWRlLmVuZCgp
LCByaWdodFNpZGVXaWR0aCk7Ci0gICAgcmV0dXJuIHJpZ2h0U2lkZTsKLX0KLQotaW5saW5lIFRl
eHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRl
eHRGcmFnbWVudDo6c3BsaXRXaXRoSHlwaGVuKHVuc2lnbmVkIGh5cGhlblBvc2l0aW9uLCBmbG9h
dCBoeXBoZW5TdHJpbmdXaWR0aCwKLSAgICBmbG9hdCBsZWZ0U2lkZVdpZHRoLCBmbG9hdCByaWdo
dFNpZGVXaWR0aCkKLXsKLSAgICBhdXRvIHJpZ2h0U2lkZSA9IHNwbGl0KGh5cGhlblBvc2l0aW9u
LCBsZWZ0U2lkZVdpZHRoLCByaWdodFNpZGVXaWR0aCk7Ci0gICAgbV9oYXNIeXBoZW4gPSB0cnVl
OwotICAgIG1fd2lkdGggKz0gaHlwaGVuU3RyaW5nV2lkdGg7Ci0gICAgcmV0dXJuIHJpZ2h0U2lk
ZTsKLX0KLQotaW5saW5lIGJvb2wgVGV4dEZyYWdtZW50SXRlcmF0b3I6OmlzU29mdExpbmVCcmVh
ayh1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKLXsKLSAgICBjb25zdCBhdXRvJiBzZWdtZW50ID0g
Km1fY3VycmVudFNlZ21lbnQ7Ci0gICAgQVNTRVJUKHNlZ21lbnQuc3RhcnQgPD0gcG9zaXRpb24g
JiYgcG9zaXRpb24gPCBzZWdtZW50LmVuZCk7Ci0gICAgcmV0dXJuIG1fc3R5bGUucHJlc2VydmVO
ZXdsaW5lICYmIHNlZ21lbnQudGV4dFtwb3NpdGlvbiAtIHNlZ21lbnQuc3RhcnRdID09ICdcbic7
Ci19Ci0KLWlubGluZSBib29sIFRleHRGcmFnbWVudEl0ZXJhdG9yOjppc0hhcmRMaW5lQnJlYWso
Y29uc3QgRmxvd0NvbnRlbnRzOjpJdGVyYXRvciYgc2VnbWVudCkgY29uc3QKLXsKLSAgICBBU1NF
UlQoc2VnbWVudC0+c3RhcnQgIT0gc2VnbWVudC0+ZW5kIHx8IChzZWdtZW50LT5zdGFydCA9PSBz
ZWdtZW50LT5lbmQgJiYgaXM8UmVuZGVyTGluZUJyZWFrPihzZWdtZW50LT5yZW5kZXJlcikpKTsK
LSAgICByZXR1cm4gc2VnbWVudC0+c3RhcnQgPT0gc2VnbWVudC0+ZW5kOwotfQotCi19Ci19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAppbmRleCBhNzBhODhlNmJhNDMu
Ljk1Y2U4N2Y5YTFkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQ
YWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3Bw
CkBAIC0yMjgsNyArMjI4LDYgQEAgdm9pZCBUZXh0UGFpbnRlcjo6cGFpbnRSYW5nZShjb25zdCBU
ZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGMKIHZvaWQgVGV4dFBh
aW50ZXI6OmNsZWFyR2x5cGhEaXNwbGF5TGlzdHMoKQogewogICAgIEdseXBoRGlzcGxheUxpc3RD
YWNoZTxJbmxpbmVUZXh0Qm94Pjo6c2luZ2xldG9uKCkuY2xlYXIoKTsKLSAgICBHbHlwaERpc3Bs
YXlMaXN0Q2FjaGU8U2ltcGxlTGluZUxheW91dDo6UnVuPjo6c2luZ2xldG9uKCkuY2xlYXIoKTsK
ICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKICAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5sYXlvdXRGb3JtYXR0aW5nQ29udGV4dElu
dGVncmF0aW9uRW5hYmxlZCgpKQogICAgICAgICBHbHlwaERpc3BsYXlMaXN0Q2FjaGU8RGlzcGxh
eTo6UnVuPjo6c2luZ2xldG9uKCkuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5jcHAKaW5kZXggNTFlZjIxZmEzYTU3
Li5hMDJlODQ0NDcwZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5l
L0xpbmVMYXlvdXRUcmF2ZXJzYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9s
aW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuY3BwCkBAIC04MSwxMSArODEsNiBAQCBzdGF0aWMgY29u
c3QgUmVuZGVyQmxvY2tGbG93KiBsaW5lTGF5b3V0U3lzdGVtRmxvd0ZvclJlbmRlcmVyKGNvbnN0
IFJlbmRlck9iamVjdAogVGV4dEJveEl0ZXJhdG9yIGZpcnN0VGV4dEJveEZvcihjb25zdCBSZW5k
ZXJUZXh0JiB0ZXh0KQogewogICAgIGlmIChhdXRvKiBmbG93ID0gbGluZUxheW91dFN5c3RlbUZs
b3dGb3JSZW5kZXJlcih0ZXh0KSkgewotICAgICAgICBpZiAoYXV0byogc2ltcGxlTGluZUxheW91
dCA9IGZsb3ctPnNpbXBsZUxpbmVMYXlvdXQoKSkgewotICAgICAgICAgICAgYXV0byByYW5nZSA9
IHNpbXBsZUxpbmVMYXlvdXQtPnJ1blJlc29sdmVyKCkucmFuZ2VGb3JSZW5kZXJlcih0ZXh0KTsK
LSAgICAgICAgICAgIHJldHVybiB7IFNpbXBsZVBhdGggeyByYW5nZS5iZWdpbigpLCByYW5nZS5l
bmQoKSB9IH07Ci0gICAgICAgIH0KLQogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05U
RVhUKQogICAgICAgICBpZiAoYXV0byogbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0
ID0gZmxvdy0+bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCkpCiAgICAgICAgICAg
ICByZXR1cm4gbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LT50ZXh0Qm94ZXNGb3Io
dGV4dCk7CkBAIC0xMjksMTEgKzEyNCw2IEBAIGJvb2wgRWxlbWVudEJveEl0ZXJhdG9yOjphdEVu
ZCgpIGNvbnN0CiBFbGVtZW50Qm94SXRlcmF0b3IgZWxlbWVudEJveEZvcihjb25zdCBSZW5kZXJM
aW5lQnJlYWsmIHJlbmRlckVsZW1lbnQpCiB7CiAgICAgaWYgKGF1dG8qIGZsb3cgPSBsaW5lTGF5
b3V0U3lzdGVtRmxvd0ZvclJlbmRlcmVyKHJlbmRlckVsZW1lbnQpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBzaW1wbGVMaW5lTGF5b3V0ID0gZmxvdy0+c2ltcGxlTGluZUxheW91dCgpKSB7Ci0gICAg
ICAgICAgICBhdXRvIHJhbmdlID0gc2ltcGxlTGluZUxheW91dC0+cnVuUmVzb2x2ZXIoKS5yYW5n
ZUZvclJlbmRlcmVyKHJlbmRlckVsZW1lbnQpOwotICAgICAgICAgICAgcmV0dXJuIHsgU2ltcGxl
UGF0aChyYW5nZS5iZWdpbigpLCByYW5nZS5lbmQoKSkgfTsKLSAgICAgICAgfQotCiAjaWYgRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAgICAgICAgIGlmIChhdXRvKiBsYXlvdXRG
b3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQgPSBmbG93LT5sYXlvdXRGb3JtYXR0aW5nQ29udGV4
dExpbmVMYXlvdXQoKSkKICAgICAgICAgICAgIHJldHVybiBsYXlvdXRGb3JtYXR0aW5nQ29udGV4
dExpbmVMYXlvdXQtPmVsZW1lbnRCb3hGb3IocmVuZGVyRWxlbWVudCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmgKaW5kZXggZDcz
MDQ5NzQxNTNiLi4wMWY2OTg5N2QyZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmgKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNs
dWRlICJJbmxpbmVFbGVtZW50Qm94LmgiCiAjaW5jbHVkZSAiTGluZUxheW91dFRyYXZlcnNhbENv
bXBsZXhQYXRoLmgiCiAjaW5jbHVkZSAiTGluZUxheW91dFRyYXZlcnNhbERpc3BsYXlSdW5QYXRo
LmgiCi0jaW5jbHVkZSAiTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCIKICNpbmNsdWRl
IDx3dGYvVmFyaWFudC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00OSw4ICs0OCw3IEBA
IHB1YmxpYzoKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKICAgICAgICAg
RGlzcGxheVJ1blBhdGgsCiAjZW5kaWYKLSAgICAgICAgQ29tcGxleFBhdGgsCi0gICAgICAgIFNp
bXBsZVBhdGgKKyAgICAgICAgQ29tcGxleFBhdGgKICAgICA+OwogCiAgICAgQm94KFBhdGhWYXJp
YW50JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxh
eW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5l
L0xpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDBjZDNjMjNmNzA5OC4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw5NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
ICJMaW5lTGF5b3V0VHJhdmVyc2FsLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dFJlc29s
dmVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBMaW5lTGF5b3V0VHJhdmVy
c2FsIHsKLQotY2xhc3MgU2ltcGxlUGF0aCB7Ci1wdWJsaWM6Ci0gICAgU2ltcGxlUGF0aChTaW1w
bGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3IgaXRlcmF0b3IsIFNpbXBsZUxpbmVM
YXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvciBlbmQpCi0gICAgICAgIDogbV9pdGVyYXRvcihp
dGVyYXRvcikKLSAgICAgICAgLCBtX2VuZChlbmQpCi0gICAgeyB9Ci0KLSAgICBGbG9hdFJlY3Qg
cmVjdCgpIGNvbnN0IHsgcmV0dXJuICgqbV9pdGVyYXRvcikucmVjdCgpOyB9Ci0KLSAgICBmbG9h
dCBiYXNlbGluZSgpIGNvbnN0IHsgcmV0dXJuICgqbV9pdGVyYXRvcikuYmFzZWxpbmUoKTsgfQot
Ci0gICAgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIGJv
b2wgZGlyT3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgaXNMaW5l
QnJlYWsoKSBjb25zdCB7IHJldHVybiAoKm1faXRlcmF0b3IpLmlzTGluZUJyZWFrKCk7IH0KLQot
ICAgIGJvb2wgdXNlTGluZUJyZWFrQm94UmVuZGVyVHJlZUR1bXBRdWlyaygpIGNvbnN0Ci0gICAg
ewotICAgICAgICBpZiAobV9pdGVyYXRvci5hdEJlZ2luKCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGF1dG8gcHJldmlvdXMgPSBtX2l0ZXJhdG9yOwotICAgICAgICAtLXBy
ZXZpb3VzOwotICAgICAgICByZXR1cm4gISgqcHJldmlvdXMpLmlzRW5kT2ZMaW5lKCk7Ci0gICAg
fQotCi0gICAgYm9vbCBoYXNIeXBoZW4oKSBjb25zdCB7IHJldHVybiAoKm1faXRlcmF0b3IpLmhh
c0h5cGhlbigpOyB9Ci0gICAgU3RyaW5nVmlldyB0ZXh0KCkgY29uc3QgeyByZXR1cm4gKCptX2l0
ZXJhdG9yKS50ZXh0KCk7IH0KLSAgICB1bnNpZ25lZCBsb2NhbFN0YXJ0T2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gKCptX2l0ZXJhdG9yKS5sb2NhbFN0YXJ0KCk7IH0KLSAgICB1bnNpZ25lZCBsb2Nh
bEVuZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuICgqbV9pdGVyYXRvcikubG9jYWxFbmQoKTsgfQot
ICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuICgqbV9pdGVyYXRvcikuZW5kKCkg
LSAoKm1faXRlcmF0b3IpLnN0YXJ0KCk7IH0KLQotICAgIGJvb2wgaXNMYXN0T25MaW5lKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIGF1dG8gbmV4dCA9IG1faXRlcmF0b3I7Ci0gICAgICAgICsrbmV4
dDsKLSAgICAgICAgcmV0dXJuIG5leHQgPT0gbV9lbmQgfHwgKCptX2l0ZXJhdG9yKS5saW5lSW5k
ZXgoKSAhPSAoKm5leHQpLmxpbmVJbmRleCgpOwotICAgIH0KLSAgICBib29sIGlzTGFzdCgpIGNv
bnN0Ci0gICAgewotICAgICAgICBhdXRvIG5leHQgPSBtX2l0ZXJhdG9yOwotICAgICAgICArK25l
eHQ7Ci0gICAgICAgIHJldHVybiBuZXh0ID09IG1fZW5kOwotICAgIH07Ci0KLSAgICB2b2lkIHRy
YXZlcnNlTmV4dFRleHRCb3hJblZpc3VhbE9yZGVyKCkKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMg
ZnVuY3Rpb24gaXMgY3VycmVudGx5IG9ubHkgdXNlZCBmb3IgY29uc2VjdXRpdmUgdGV4dCBydW5z
LgotICAgICAgICArK21faXRlcmF0b3I7Ci0gICAgfQotICAgIHZvaWQgdHJhdmVyc2VOZXh0VGV4
dEJveEluVGV4dE9yZGVyKCkgeyAgdHJhdmVyc2VOZXh0VGV4dEJveEluVmlzdWFsT3JkZXIoKTsg
fQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNpbXBsZVBhdGgmIG90aGVyKSBjb25zdCB7
IHJldHVybiBtX2l0ZXJhdG9yID09IG90aGVyLm1faXRlcmF0b3I7IH0KLSAgICBib29sIGF0RW5k
KCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRvciA9PSBtX2VuZDsgfQotCi1wcml2YXRlOgotICAg
IFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvciBtX2l0ZXJhdG9yOwotICAg
IFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvciBtX2VuZDsKLX07Ci0KLX0K
LX0K
</data>
<flag name="commit-queue"
          id="425275"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409539</attachid>
            <date>2020-09-24 01:24:22 -0700</date>
            <delta_ts>2020-09-24 01:39:58 -0700</delta_ts>
            <desc>patch</desc>
            <filename>delete-sll-3.patch</filename>
            <type>text/plain</type>
            <size>226770</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwZjI4OTNlMTdiNzcuLjZlOWViNzdkMTJjOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDgwIEBACisyMDIwLTA5LTI0ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmUgU2ltcGxlIExpbmUgTGF5b3V0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY5MTQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCBpcyBhbHJlYWR5IGZ1bGx5IGNvdmVy
ZWQgYnkgTEZDIGFuZCBzbyB1bnVzZWQuIFJlbW92ZSB0aGUgY29kZS4KKworICAgICAgICAqIEhl
YWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhMb2dn
ZXIuY3BwOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVy
ZmFjZS5oOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKiBs
YXlvdXQvVmVyaWZpY2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6dmVyaWZ5
QW5kT3V0cHV0U3VidHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Om91dHB1dE1pc21h
dGNoaW5nU2ltcGxlTGluZUluZm9ybWF0aW9uSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAq
IGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwOgorICAg
ICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uY3Bw
OgorICAgICAgICAqIHJlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wbGV4TGluZUxheW91dDo6bGF5b3V0TGluZUJveGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBsZXhMaW5lTGF5b3V0OjphZGRPdmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbik6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxheW91dElubGluZUNoaWxkcmVuKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2tGbG93OjpoaXRUZXN0SW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2tGbG93OjphZGRPdmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6Om1hcmtMaW5lc0RpcnR5SW5CbG9ja1Jh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Zmlyc3RMaW5lQmFzZWxp
bmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjppbmxpbmVCbG9j
a0Jhc2VsaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6aW5s
aW5lU2VsZWN0aW9uR2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6Omxp
bmVDb3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0
aW9uRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpwYWludElu
bGluZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6aGFzTGlu
ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjppbnZhbGlkYXRl
TGluZUxheW91dFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjplbnN1
cmVMaW5lQm94ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpvdXRwdXRM
aW5lVHJlZUFuZE1hcmsgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93
OjpsYXlvdXRTaW1wbGVMaW5lcyk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJsb2NrRmxvdy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpoYXNTaW1w
bGVMaW5lTGF5b3V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrRmxvdzo6c2ltcGxlTGluZUxheW91dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnNpbXBsZUxpbmVMYXlvdXQpOiBEZWxldGVkLgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJGcmFnbWVudGVkRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJGcmFnbWVudGVkRmxvdzo6cmVtb3ZlTGluZUZyYWdtZW50SW5mbyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4
dDo6YWJzb2x1dGVRdWFkc0ZvclJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHQ6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6
c2V0VGV4dFdpdGhPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6dXNlc0Nv
bXBsZXhMaW5lTGF5b3V0UGF0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
OjpsaW5lc1Zpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzRm9yTGluZUJveGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnNpbXBsZUxpbmVMYXlvdXQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1NpbXBsZUxpbmVMYXlvdXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXRDb3ZlcmFnZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxp
bmVMYXlvdXRDb3ZlcmFnZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcv
U2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRl
cmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oOiBSZW1vdmVkLgorICAgICAgICAq
IHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oOiBSZW1vdmVk
LgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0
b3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4
dEZyYWdtZW50SXRlcmF0b3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dFBh
aW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFBhaW50ZXI6OmNsZWFyR2x5cGhEaXNw
bGF5TGlzdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Zmlyc3RUZXh0Qm94
Rm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OmVsZW1lbnRCb3hG
b3IpOgorICAgICAgICAqIHJlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxlUGF0aC5oOiBS
ZW1vdmVkLgorCiAyMDIwLTA5LTIzICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlh
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBwcm9zcGVjdGl2ZSBHVEsgYnVpbGQgZml4IGFm
dGVyIHIyNjc0NDkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCAzOGMwNmI4YmJkY2MuLjBkMmUxZDZm
YTZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xNDE2LDE1ICsxNDE2LDEwIEBAIHNldChXZWJD
b3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0
LmgKICAgICByZW5kZXJpbmcvUm9vdElubGluZUJveC5oCiAgICAgcmVuZGVyaW5nL1Njcm9sbEFs
aWdubWVudC5oCi0gICAgcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuaAotICAgIHJlbmRlcmlu
Zy9TaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuaAotICAgIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5
b3V0Rmxvd0NvbnRlbnRzLmgKLSAgICByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFJlc29sdmVy
LmgKIAogICAgIHJlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuaAogICAgIHJlbmRl
cmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5oCiAgICAgcmVuZGVyaW5n
L2xpbmUvTGluZUxheW91dFRyYXZlcnNhbERpc3BsYXlSdW5QYXRoLmgKLSAgICByZW5kZXJpbmcv
bGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxlUGF0aC5oCiAgICAgcmVuZGVyaW5nL2xpbmUv
TGluZVdpZHRoLmgKICAgICByZW5kZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMuaAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IGE0M2ZiOTcxYzAwMC4uNjQ0OTNiYjdhMDUyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApA
QCAtMjE5OSwxMyArMjE5OSw2IEBAIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAogcmVuZGVyaW5n
L1JlbmRlcldpZGdldC5jcHAKIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAogcmVuZGVyaW5n
L1Njcm9sbEFsaWdubWVudC5jcHAKLXJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAotcmVu
ZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5jcHAKLXJlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0Rmxvd0NvbnRlbnRzLmNwcAotcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlv
bnMuY3BwCi1yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFBhZ2luYXRpb24uY3BwCi1yZW5kZXJp
bmcvU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNwcAotcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRUZXh0RnJhZ21lbnRJdGVyYXRvci5jcHAKIHJlbmRlcmluZy9UYWJsZUxheW91dC5jcHAKIHJl
bmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwCiByZW5kZXJpbmcvVGV4dFBhaW50U3R5
bGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggODFjNjEwMzdiMjFmLi5hYTc5NDkyYzRjYTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM2OSw3ICszNjks
NiBAQAogCQkwRkZENDVBQTI0M0MzMDI3MDAwRDRCRUEgLyogU2Nyb2xsaW5nVHJlZUxhdGNoaW5n
Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZGRDQ1QTcyNDNCRjI1NzAwMEQ0QkVBIC8qIFNjcm9sbGluZ1RyZWVMYXRjaGluZ0NvbnRy
b2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkZENEQ2MTE4NjUxRkEzMDA1MTJGNkUgLyogQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGRDRENUYx
ODY1MUZBMzAwNTEyRjZFIC8qIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxMEZCMDg0QjE0RTE1QzdF
MDBBM0RCOTggLyogUHVibGljVVJMTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTBGQjA4NEExNEUxNUM3RTAwQTNEQjk4IC8qIFB1YmxpY1VS
TE1hbmFnZXIuaCAqLzsgfTsKLQkJMTEyQjM0RDUxRTYwQjk4MzAwQkIzMTBBIC8qIFNpbXBsZUxp
bmVMYXlvdXRQYWdpbmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxMTJCMzRENDFFNjBCOTgzMDBCQjMxMEEgLyogU2ltcGxlTGluZUxheW91dFBh
Z2luYXRpb24uaCAqLzsgfTsKIAkJMTEzMTBDRjIyMEJBNEEzMjAwNjVBOEQwIC8qIExheW91dFRy
ZWVCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxMTEwMEZENzIwOTUxNERGMDA4MUFBNkMgLyogTGF5b3V0VHJlZUJ1aWxkZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxMTMxMENGMzIwQkE0
QTM3MDA2NUE4RDAgLyogTGF5b3V0UmVwbGFjZWRCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExMUM2MTU2MjBBRDFBRTEwMDVCODJGQSAvKiBMYXlv
dXRSZXBsYWNlZEJveC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTExMzEwQ0Y0MjBCQTRBM0QwMDY1QThEMCAvKiBMYXlvdXRJdGVyYXRvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTExMDBGQzcyMDky
NzY0QzAwODFBQTZDIC8qIExheW91dEl0ZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM5Myw3ICszOTIsNiBAQAogCQkxMTk5RkE0NjIw
OEUzNUEzMDAyMzU4Q0MgLyogTGF5b3V0Q29udGFpbmVyQm94LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMTk5RkE0NDIwOEUzNUEzMDAyMzU4Q0MgLyog
TGF5b3V0Q29udGFpbmVyQm94LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTE5OUZBNUIyMDhFM0M3RjAwMjM1OENDIC8qIERpc3BsYXlCb3guaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExOTlGQTU5MjA4
RTNDN0YwMDIzNThDQyAvKiBEaXNwbGF5Qm94LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTFDQjI3ODkyMDNCQTU3MDAwNEExREM5IC8qIFJlbmRl
clRyZWVCdWlsZGVyRnVsbFNjcmVlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTFDQjI3ODcyMDNCQTU3MDAwNEExREM5IC8qIFJlbmRlclRyZWVCdWls
ZGVyRnVsbFNjcmVlbi5oICovOyB9OwotCQkxMUUwNjdFRTFFNjI0NkU1MDAxNjJEMTYgLyogU2lt
cGxlTGluZUxheW91dENvdmVyYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxMUUwNjdFRDFFNjI0NkU1MDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91
dENvdmVyYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMTQwMEQ3QTgxNzEzNkVBNzAwNzdDRTA1IC8qIFNjcmlwdFdyYXBwYWJsZUlubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDBEN0E3
MTcxMzZFQTcwMDc3Q0UwNSAvKiBTY3JpcHRXcmFwcGFibGVJbmxpbmVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwM0I5OTcwOUVCMTNBRjAw
Nzk3QzdGIC8qIERPTVdpbmRvdy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQwM0I5OTUwOUVCMTNBRjAwNzk3QzdGIC8qIERPTVdpbmRvdy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MDNCQTBGMDlF
QjE4RjkwMDc5N0M3RiAvKiBKU0RPTVdpbmRvdy5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwM0JBMEUwOUVCMThGODAwNzk3
QzdGIC8qIEpTRE9NV2luZG93LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTE4NzcsOSArMTg3NSw3IEBACiAJCTU4MDM3MTY0MUE2NkYxRDMwMEJB
RjUxOSAvKiBMYXllckZyYWdtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1ODAzNzE2MzFBNjZGMUQzMDBCQUY1MTkgLyogTGF5ZXJGcmFnbWVudC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU4MjRB
QkEzMUFFODExMTYwMDkwNzRCNyAvKiBSdWJ5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTgyNEFCQTExQUU4MTExNjAwOTA3NEI3IC8qIFJ1
YnlFbGVtZW50LmggKi87IH07CiAJCTU4MjRBQkE3MUFFODEzODQwMDkwNzRCNyAvKiBSdWJ5VGV4
dEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU4MjRBQkE1MUFFODEzODQwMDkwNzRCNyAvKiBSdWJ5VGV4dEVsZW1lbnQuaCAqLzsgfTsKLQkJ
NTgyQ0IwNTMxQTc4QTE0QjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJ
dGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTgyQ0IwNTIxQTc4QTE0QjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJ
dGVyYXRvci5oICovOyB9OwogCQk1ODJERTMyNTFDMzBDODU0MDBCRTAyQTggLyogVGV4dERlY29y
YXRpb25QYWludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1ODJERTMyMzFDMzBDODU0MDBCRTAyQTggLyogVGV4dERlY29yYXRpb25QYWludGVyLmgg
Ki87IH07Ci0JCTU4NUQ2RTA0MUExQTc5MkUwMEZBNEYxMiAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxv
d0NvbnRlbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1ODVENkUwMjFBMUE3OTJFMDBGQTRGMTIgLyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU4
OTU1NkVEMThENEE0NDAwMDc2NEIwMyAvKiBCb3JkZXJFZGdlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODk1NTZFQzE4RDRBNDQwMDA3NjRCMDMgLyog
Qm9yZGVyRWRnZS5oICovOyB9OwogCQk1OEIyRjlGNDIyMzJENDUzMDA5MzhENjMgLyogUmVzaXpl
T2JzZXJ2YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU4QjJGOUYzMjIzMkQ0M0YwMDkzOEQ2MyAvKiBSZXNpemVPYnNlcnZhdGlvbi5oICovOyB9
OwogCQk1OEIyRjlGNTIyMzJENDU4MDA5MzhENjMgLyogUmVzaXplT2JzZXJ2ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4QjJGOUVDMjIzMkQ0M0Iw
MDkzOEQ2MyAvKiBSZXNpemVPYnNlcnZlci5oICovOyB9OwpAQCAtNDk4NSw3ICs0OTgxLDYgQEAK
IAkJRTQyOTVGQTQxMkIwNjE0RTAwRDFBQ0UwIC8qIFJlc291cmNlTG9hZFByaW9yaXR5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDI5NUZBMzEyQjA2
MTRFMDBEMUFDRTAgLyogUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDJFNzZEQzFDN0FGNzc2MDBFMzYxNEQg
LyogU3R5bGVVcGRhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0MkU3NkRCMUM3QUY3NzYwMEUzNjE0RCAvKiBTdHlsZVVwZGF0ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0MzEwNUJCMTY3NTBG
MTYwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNDMxMDVCQTE2NzUwRjE2MDBEQjJGQjggLyogTm9kZVRyYXZl
cnNhbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CUU0MzQzRDIzMjM5Mjc3ODQwMEVCQkI2NiAvKiBMaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxlUGF0
aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzNDNE
MjEyMzkyNzc4MzAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQzNDNEMjUy
MzkyNzc5MDAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzNDNEMjQyMzkyNzc4
RjAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0M0EwMjNCMTdFQjM3MEEw
MDRDREQyNSAvKiBSZW5kZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNDNBMDIzQTE3RUIzNzBBMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVu
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0
M0FGOEU3MUFDNUI3RUMwMENBNzE3RSAvKiBDYWNoZVZhbGlkYXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0M0FGOEU1MUFDNUI3REQwMENBNzE3
RSAvKiBDYWNoZVZhbGlkYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtNTA0MCw3ICs1MDM1LDYgQEAKIAkJRTQ4MTM3QjkxREIzQjUyNjAw
NUM1OUJGIC8qIFN0eWxlVmFsaWRpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0ODEzN0I4MURCM0I1MjYwMDVDNTlCRiAvKiBTdHlsZVZhbGlkaXR5
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ4
NEEzM0UyMzA1NTMyNTAwOUFERTZBIC8qIExpbmVMYXlvdXRUcmF2ZXJzYWwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODRBMzNCMjMwNTUzMDMwMDlB
REU2QSAvKiBMaW5lTGF5b3V0VHJhdmVyc2FsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ4NjNDRkUyMzg0MkU5RTAwOTcyMTU4IC8qIFJ1bGVE
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDg2
M0NGRDIzODQyRTlFMDA5NzIxNTggLyogUnVsZURhdGEuaCAqLzsgfTsKLQkJRTQ4OTQ0QTMxODBC
NTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODk0NEExMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1w
bGVMaW5lTGF5b3V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRTQ5NDZFQUYxNTZFNjRERDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5NDZFQUQxNTZF
NjRERDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0OUJEOUZBMTMxRkQyRUQwMDNDNTZGMCAvKiBD
U1NWYWx1ZVBvb2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0OUJEOUY5MTMxRkQyRUQwMDNDNTZGMCAvKiBDU1NWYWx1ZVBvb2wuaCAqLzsgfTsKIAkJ
RTRBNzk5NTIyMEVFNEIxNDAwQzE5NTY4IC8qIENTU1BhcnNlckNvbnRleHQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QTc5OTRFMjBFRTRBRTEwMEMx
OTU2OCAvKiBDU1NQYXJzZXJDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTUwODEsOCArNTA3NSw2IEBACiAJCUU0RThCNEVDMjE2Qjc5
RTUwMEI4ODM0RCAvKiBTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRFOEI0RUEyMTZCNzlFNTAwQjg4MzRE
IC8qIFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmggKi87IH07CiAJCUU0RThCNEY1MjE2Qjk1
NjUwMEI4ODM0RCAvKiBGb250Q2FzY2FkZURlc2NyaXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEU4QjRGMjIxNkI4QjYwMDBCODgzNEQgLyog
Rm9udENhc2NhZGVEZXNjcmlwdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUU0RTk0RDYxMjJGRjE1OEEwMEREMTkxRiAvKiBDb21wbGV4TGlu
ZUxheW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTRBMUFDNzgyMkZBRkQ1MDAwMTdCNzVCIC8qIENvbXBsZXhMaW5lTGF5b3V0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRTRFOUIxMTkxODEwOTE2
RjAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRFOUIxMTgxODEwOTE2RjAwM0FDQ0RGIC8q
IFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCUU0RTlCMTFEMTgxNDU2OUMwMDNBQ0NERiAvKiBTaW1wbGVM
aW5lTGF5b3V0RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNEU5QjExQzE4MTQ1NjlDMDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dEZ1
bmN0aW9ucy5oICovOyB9OwogCQlFNEY5RUVGMzE1NkRBMDA3MDBEMjNFN0UgLyogU3R5bGVTaGVl
dENvbnRlbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNEY5RUVGMTE1NkQ4NEM0MDBEMjNFN0UgLyogU3R5bGVTaGVldENvbnRlbnRzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTUxNjY5OTEyMEZG
OTkxODAwOUQyQzI3IC8qIExpc3RCdXR0b25BcnJvd0AyeC5wbmcgaW4gUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU1MTY2OThGMjBGRjk5MTYwMDlEMkMyNyAv
KiBMaXN0QnV0dG9uQXJyb3dAMngucG5nICovOyB9OwogCQlFNTE3NjcwMzIwQjg4QzE0MDBENDEx
NjcgLyogRGF0YUxpc3RTdWdnZXN0aW9uSW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU1MTc2NzAyMjBCODhDMTQwMEQ0MTE2NyAvKiBE
YXRhTGlzdFN1Z2dlc3Rpb25JbmZvcm1hdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02MDk3LDggKzYwODksNiBAQAogCQkxMTEwMEZENzIw
OTUxNERGMDA4MUFBNkMgLyogTGF5b3V0VHJlZUJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5
b3V0VHJlZUJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTExQzYxNTYy
MEFEMUFFMTAwNUI4MkZBIC8qIExheW91dFJlcGxhY2VkQm94LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExh
eW91dFJlcGxhY2VkQm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExMUM2MTU3
MjBBRDFBRTEwMDVCODJGQSAvKiBMYXlvdXRSZXBsYWNlZEJveC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBMYXlvdXRSZXBsYWNlZEJveC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTExMkIzNEQwMUU2MEI4QTcwMEJCMzEwQSAvKiBTaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0
UGFnaW5hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTExMkIzNEQ0MUU2
MEI5ODMwMEJCMzEwQSAvKiBTaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMTM0MDlENzIwM0UwMzgwMDBDNjY5MTUgLyogUmVu
ZGVyVHJlZUJ1aWxkZXJDb250aW51YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVy
VHJlZUJ1aWxkZXJDb250aW51YXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxMTM0MDlEODIwM0UwMzgwMDBDNjY5MTUgLyogUmVuZGVyVHJlZUJ1aWxkZXJDb250aW51YXRp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJDb250aW51YXRpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTEzRDBCNEYxRjlGREQyQjAwRjYxMUJCIC8qIEZy
YW1lVmlld0xheW91dENvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnJhbWVWaWV3TGF5
b3V0Q29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MTQ3LDggKzYx
MzcsNiBAQAogCQkxMUNCMjc4NjIwM0JBNTcwMDA0QTFEQzkgLyogUmVuZGVyVHJlZUJ1aWxkZXJG
dWxsU2NyZWVuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclRyZWVCdWlsZGVyRnVsbFNj
cmVlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExQ0IyNzg3MjAzQkE1NzAw
MDRBMURDOSAvKiBSZW5kZXJUcmVlQnVpbGRlckZ1bGxTY3JlZW4uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyVHJlZUJ1aWxkZXJGdWxsU2NyZWVuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTExRDE5QzJFMjMxNTlCQUUwMDhGMjREMyAvKiBUYWJsZUZvcm1hdHRpbmdDb250ZXh0R2Vv
bWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGFibGVGb3JtYXR0aW5nQ29udGV4dEdlb21l
dHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTFFMDY3RUIxRTYyNDYxMzAw
MTYyRDE2IC8qIFNpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkxMUUwNjdFRDFFNjI0NkU1MDAxNjJEMTYgLyogU2ltcGxl
TGluZUxheW91dENvdmVyYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNp
bXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
MUZGMDJENTIwQkEzQzgxMDA4M0YyNUIgLyogVmVyaWZpY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFZlcmlmaWNhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTEy
Rjc1QTlBODZFQTAzREFGMjRCNzk3MSAvKiBJU09Qcm90ZWN0aW9uU3lzdGVtU3BlY2lmaWNIZWFk
ZXJCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSVNPUHJvdGVjdGlvblN5
c3RlbVNwZWNpZmljSGVhZGVyQm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
MDBEN0E3MTcxMzZFQTcwMDc3Q0UwNSAvKiBTY3JpcHRXcmFwcGFibGVJbmxpbmVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFdyYXBwYWJsZUlubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkxNzMsMTMgKzkxNjEsOCBAQAogCQk1ODI0QUJB
MTFBRTgxMTE2MDA5MDc0QjcgLyogUnVieUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUnVieUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTgyNEFCQTQxQUU4MTM4NDAwOTA3NEI3IC8qIFJ1YnlUZXh0RWxlbWVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSdWJ5VGV4dEVsZW1lbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1ODI0QUJBNTFBRTgxMzg0MDA5MDc0QjcgLyogUnVieVRl
eHRFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJ1YnlUZXh0RWxl
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1ODJDQjA1MjFBNzhBMTRCMDBB
RkZDQzQgLyogU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVy
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1ODJDQjA1NDFBNzhBMkIyMDBB
RkZDQzQgLyogU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21l
bnRJdGVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU4MkRFMzIyMUMz
MEM4NTQwMEJFMDJBOCAvKiBUZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dERlY29yYXRpb25QYWludGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTgyREUzMjMxQzMwQzg1NDAwQkUwMkE4IC8qIFRleHRE
ZWNvcmF0aW9uUGFpbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0
RGVjb3JhdGlvblBhaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTg1RDZE
RkIxQTE1MzU1NjAwRkE0RjEyIC8qIFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1ODVENkUwMTFBMUE3OTJFMDBGQTRG
MTIgLyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTg1RDZFMDIxQTFBNzkyRTAwRkE0RjEyIC8qIFNp
bXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1ODg0RkU1NjIyODEzRTJEMDA0MEFGRjYgLyogSlNSZXNpemVPYnNlcnZlckVu
dHJ5Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmVz
aXplT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTU4OTU1NkVDMThENEE0NDAwMDc2NEIwMyAvKiBCb3JkZXJFZGdlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEJvcmRlckVkZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNThBRUUyRjMxOEQ0QkNDRjAwMjJFN0ZFIC8qIEJvcmRlckVkZ2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQm9yZGVyRWRnZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xNTgzNiw3ICsxNTgxOSw2IEBACiAJCUU0MzEwNUJBMTY3NTBG
MTYwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE5vZGVUcmF2ZXJzYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQz
MTJBQjUyNEIzMjY1NjAwNjc4MzQ5IC8qIExheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRJbnRlZ3JhdGlvblBh
Z2luYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDMxMkFCNzI0QjMy
NjU2MDA2NzgzNDkgLyogTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNDM0M0QyMTIzOTI3NzgzMDBFQkJCNjYgLyogTGlu
ZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTQzNDNEMjQyMzkyNzc4RjAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJz
YWxDb21wbGV4UGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaW5lTGF5
b3V0VHJhdmVyc2FsQ29tcGxleFBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTQzQTAyM0ExN0VCMzcwQTAwNENERDI1IC8qIFJlbmRlckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFNDNBMDIzQzE3RUIzNzEzMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJFbGVtZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1OTI4LDggKzE1OTEwLDYgQEAKIAkJRTQ4
NEEzM0QyMzA1NTMwMzAwOUFERTZBIC8qIExpbmVMYXlvdXRUcmF2ZXJzYWwuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGluZUxheW91dFRyYXZlcnNhbC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0ODYzQ0ZBMjM4NDJFODcwMDk3MjE1OCAvKiBS
dWxlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSdWxlRGF0
YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0ODYzQ0ZEMjM4NDJFOUUwMDk3
MjE1OCAvKiBSdWxlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSdWxl
RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNDg5NDRBMDE4MEI1N0Q4MDBG
MTY1RDggLyogU2ltcGxlTGluZUxheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRTQ4OTQ0QTExODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlTGluZUxheW91dC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFNDk0NkVBQzE1NkU2NEREMDBEMzI5N0YgLyogU3R5bGVS
dWxlSW1wb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxl
UnVsZUltcG9ydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0OTQ2RUFEMTU2
RTY0REQwMEQzMjk3RiAvKiBTdHlsZVJ1bGVJbXBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3R5bGVSdWxlSW1wb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUU0OUJEOUY5MTMxRkQyRUQwMDNDNTZGMCAvKiBDU1NWYWx1ZVBvb2wuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTVmFsdWVQb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNjAxOSw5ICsxNTk5OSw2IEBACiAJCUU0RThCNEVEMjE2Qjc5RjQwMEI4
ODM0RCAvKiBTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RThCNEYwMjE2QjhCNUYwMEI4ODM0RCAvKiBGb250
Q2FzY2FkZURlc2NyaXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFNEU4QjRGMjIxNkI4QjYwMDBCODgzNEQgLyogRm9udENhc2NhZGVEZXNjcmlwdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250Q2FzY2FkZURlc2NyaXB0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0RTlCMTE4MTgxMDkxNkYwMDNBQ0NE
RiAvKiBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUU0RTlCMTFBMTgxNDU2OTIwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVu
Y3Rpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxp
bmVMYXlvdXRGdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNEU5
QjExQzE4MTQ1NjlDMDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RjlFRUYwMTU2RDg0QzQwMEQyM0U3RSAv
KiBTdHlsZVNoZWV0Q29udGVudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU3R5bGVTaGVldENvbnRlbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTRGOUVFRjExNTZEODRDNDAwRDIzRTdFIC8qIFN0eWxlU2hlZXRDb250ZW50cy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVNoZWV0Q29udGVudHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRGQjRCMzUyMzlCRUIxMDAwM0MzMzZBIC8qIERpc3Bs
YXlJbmxpbmVDb250ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlJbmxpbmVDb250
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5MTE4LDIwICsyOTA5NSw2
IEBACiAJCQkJQThDRkY1REEwQTE1NUEwNTAwMEE0MjM0IC8qIFJvb3RJbmxpbmVCb3guaCAqLywK
IAkJCQk1RDkyNUI2NTBGNjRENEREMDBCODQ3RjAgLyogU2Nyb2xsQWxpZ25tZW50LmNwcCAqLywK
IAkJCQk1RDkyNUI2NjBGNjRENEREMDBCODQ3RjAgLyogU2Nyb2xsQWxpZ25tZW50LmggKi8sCi0J
CQkJRTQ4OTQ0QTAxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuY3BwICovLAot
CQkJCUU0ODk0NEExMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmggKi8sCi0J
CQkJMTFFMDY3RUIxRTYyNDYxMzAwMTYyRDE2IC8qIFNpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5j
cHAgKi8sCi0JCQkJMTFFMDY3RUQxRTYyNDZFNTAwMTYyRDE2IC8qIFNpbXBsZUxpbmVMYXlvdXRD
b3ZlcmFnZS5oICovLAotCQkJCTU4NUQ2RTAxMUExQTc5MkUwMEZBNEYxMiAvKiBTaW1wbGVMaW5l
TGF5b3V0Rmxvd0NvbnRlbnRzLmNwcCAqLywKLQkJCQk1ODVENkUwMjFBMUE3OTJFMDBGQTRGMTIg
LyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oICovLAotCQkJCUU0RTlCMTFBMTgxNDU2
OTIwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcCAqLywKLQkJCQlFNEU5
QjExQzE4MTQ1NjlDMDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oICovLAot
CQkJCTExMkIzNEQwMUU2MEI4QTcwMEJCMzEwQSAvKiBTaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlv
bi5jcHAgKi8sCi0JCQkJMTEyQjM0RDQxRTYwQjk4MzAwQkIzMTBBIC8qIFNpbXBsZUxpbmVMYXlv
dXRQYWdpbmF0aW9uLmggKi8sCi0JCQkJNTg1RDZERkIxQTE1MzU1NjAwRkE0RjEyIC8qIFNpbXBs
ZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAgKi8sCi0JCQkJRTRFOUIxMTgxODEwOTE2RjAwM0FDQ0RG
IC8qIFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oICovLAotCQkJCTU4MkNCMDU0MUE3OEEyQjIw
MEFGRkNDNCAvKiBTaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwICovLAot
CQkJCTU4MkNCMDUyMUE3OEExNEIwMEFGRkNDNCAvKiBTaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdt
ZW50SXRlcmF0b3IuaCAqLywKIAkJCQlFMzFDRDc1MDIyOUY3NDk1MDBGQkRBMTkgLyogVGFibGVM
YXlvdXQuY3BwICovLAogCQkJCUE4Q0ZGMDRDMEExNTRGMDkwMDBBNDIzNCAvKiBUYWJsZUxheW91
dC5oICovLAogCQkJCTBGNTREQ0UzMTg4MTA1MUQwMDNFRURCQiAvKiBUZXh0QXV0b1NpemluZy5j
cHAgKi8sCkBAIC0zMDIxMyw3ICszMDE3Niw2IEBACiAJCQkJRTQ4NEEzM0IyMzA1NTMwMzAwOUFE
RTZBIC8qIExpbmVMYXlvdXRUcmF2ZXJzYWwuaCAqLywKIAkJCQlFNDM0M0QyNDIzOTI3NzhGMDBF
QkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggKi8sCiAJCQkJRTQ1MUM2
MjcyMzkyOTNFQjAwOTkzMTkwIC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxEaXNwbGF5UnVuUGF0aC5o
ICovLAotCQkJCUU0MzQzRDIxMjM5Mjc3ODMwMEVCQkI2NiAvKiBMaW5lTGF5b3V0VHJhdmVyc2Fs
U2ltcGxlUGF0aC5oICovLAogCQkJCUZGREJDMDQ2MTgzRDI3QjcwMDQwNzEwOSAvKiBMaW5lV2lk
dGguY3BwICovLAogCQkJCUZGREJDMDQ1MTgzRDI3QjcwMDQwNzEwOSAvKiBMaW5lV2lkdGguaCAq
LywKIAkJCQlGRkFDMzBGRDE4NEZCMTQ1MDA4QzRGMUUgLyogVHJhaWxpbmdPYmplY3RzLmNwcCAq
LywKQEAgLTMyNzkzLDcgKzMyNzU1LDYgQEAKIAkJCQlFNDg0QTMzRTIzMDU1MzI1MDA5QURFNkEg
LyogTGluZUxheW91dFRyYXZlcnNhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQzNDNEMjUyMzky
Nzc5MDAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTQ1MUM2MjgyMzkyOTNFQzAwOTkzMTkwIC8qIExpbmVMYXlvdXRUcmF2ZXJz
YWxEaXNwbGF5UnVuUGF0aC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQzNDNEMjMyMzkyNzc4NDAw
RUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGRkRCQzA0NzE4M0QyN0I3MDA0MDcxMDkgLyogTGluZVdpZHRoLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDQkE5REMwQjFERjQ0REY0MDAwNTY3NUMgLyogTGlua0hlYWRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTE0M0IyNjMxREREMTUyMDAwMTRGQUM2IC8qIExpbmtJY29uLmggaW4gSGVh
ZGVycyAqLywKQEAgLTMzNzkyLDEzICszMzc1Myw2IEBACiAJCQkJOTMzMDlFQTMwOTlFQjc4QzAw
NTZFNTgxIC8qIFNoYXJlZFRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlERjE5RTJBQzI0Nzcy
QkMxMDA3QkRBQ0IgLyogU2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29va2llQmxvY2tpbmcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTgzNjJFOEMxMjBDRUY5Q0IwMDI0NTg4NiAvKiBTaG91bGRUcmVhdEFz
Q29udGludWluZ0xvYWQuaCBpbiBIZWFkZXJzICovLAotCQkJCUU0ODk0NEEzMTgwQjU3RDgwMEYx
NjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmggaW4gSGVhZGVycyAqLywKLQkJCQkxMUUwNjdFRTFF
NjI0NkU1MDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmggaW4gSGVhZGVycyAq
LywKLQkJCQk1ODVENkUwNDFBMUE3OTJFMDBGQTRGMTIgLyogU2ltcGxlTGluZUxheW91dEZsb3dD
b250ZW50cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTRFOUIxMUQxODE0NTY5QzAwM0FDQ0RGIC8q
IFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAotCQkJCTExMkIzNEQ1
MUU2MEI5ODMwMEJCMzEwQSAvKiBTaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJRTRFOUIxMTkxODEwOTE2RjAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRS
ZXNvbHZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTgyQ0IwNTMxQTc4QTE0QjAwQUZGQ0M0IC8q
IFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTMxNkRERkIyNDBDNjRCNDAwOTM0MEFBIC8qIFNpbXBsZVJhbmdlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDNUExRUE3RDE1MkJDRjA4MDA0RDAwQjYgLyogU2ltcGxpZnlNYXJrdXBDb21tYW5k
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzJBN0YyMTFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxh
dGVkQ2xpY2suaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWExvZ2dlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
TG9nZ2VyLmNwcAppbmRleCA2ODM5YjYzMWYxYTUuLjRmNWM2YjVlYzUwNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWExvZ2dlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWExvZ2dlci5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNs
dWRlICJBWElzb2xhdGVkT2JqZWN0LmgiCiAjZW5kaWYKICNpbmNsdWRlICJBWE9iamVjdENhY2hl
LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaAppbmRleCA3
ZjBmNTk0ZjE2MTIuLjI3YzM5ZDdlOWQzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgorI2luY2x1ZGUgIldpZGdldC5o
IgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4K
IApAQCAtNDAsNiArNDEsMTAgQEAKICNpbmNsdWRlICJDT01QdHIuaCIKICNlbmRpZgogCisjaWYg
VVNFKEFUSykKKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisjZW5kaWYKKwogI2lmIFBM
QVRGT1JNKENPQ09BKQogT0JKQ19DTEFTUyBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcjsK
IHR5cGVkZWYgV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKaW5kZXggYjZh
MjdkZDg3NGIyLi41ZTU4MTRkN2RmNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVy
YXRvci5jcHAKQEAgLTU0LDkgKzU0LDYgQEAKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5o
IgogI2luY2x1ZGUgIlJlbmRlclRleHRGcmFnbWVudC5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3Qu
aCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0LmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxh
eW91dEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oIgog
I2luY2x1ZGUgIlRleHRCb3VuZGFyaWVzLmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVs
ZW1lbnRzLmgiCiAjaW5jbHVkZSAiVGV4dFBsYWNlaG9sZGVyRWxlbWVudC5oIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcAppbmRleCBiNjI5MjkwODNmYWMuLjkzZTA2MWY1ZjNi
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHAKQEAgLTcwLDQ4ICs3MCw2
IEBAIHN0YXRpYyBib29sIGFyZUVzc2VudGlhbGx5RXF1YWwoTGF5b3V0UmVjdCBhLCBMYXlvdXRS
ZWN0IGIpCiAgICAgICAgICYmIGFyZUVzc2VudGlhbGx5RXF1YWwoYS5oZWlnaHQoKSwgYi5oZWln
aHQoKSk7CiB9CiAKLXN0YXRpYyBib29sIG91dHB1dE1pc21hdGNoaW5nU2ltcGxlTGluZUluZm9y
bWF0aW9uSWZOZWVkZWQoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBMYXlvdXRTdGF0ZSYgbGF5
b3V0U3RhdGUsIGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgYmxvY2tGbG93LCBjb25zdCBDb250YWlu
ZXJCb3gmIGlubGluZUZvcm1hdHRpbmdSb290KQotewotICAgIGF1dG8qIGxpbmVMYXlvdXREYXRh
ID0gYmxvY2tGbG93LnNpbXBsZUxpbmVMYXlvdXQoKTsKLSAgICBpZiAoIWxpbmVMYXlvdXREYXRh
KSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBhdXRvJiBpbmxpbmVGb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZS5l
c3RhYmxpc2hlZEZvcm1hdHRpbmdTdGF0ZShpbmxpbmVGb3JtYXR0aW5nUm9vdCk7Ci0gICAgYXV0
byYgbGluZVJ1bnMgPSBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KGlubGluZUZvcm1h
dHRpbmdTdGF0ZSkubGluZVJ1bnMoKTsKLQotICAgIGlmIChsaW5lUnVucy5zaXplKCkgIT0gbGlu
ZUxheW91dERhdGEtPnJ1bkNvdW50KCkpIHsKLSAgICAgICAgc3RyZWFtIDw8ICJNaXNtYXRjaGlu
ZyBudW1iZXIgb2YgcnVuczogc2ltcGxlIHJ1bnMoIiA8PCBsaW5lTGF5b3V0RGF0YS0+cnVuQ291
bnQoKSA8PCAiKSBpbmxpbmUgcnVucygiIDw8IGxpbmVSdW5zLnNpemUoKSA8PCAiKSI7Ci0gICAg
ICAgIHN0cmVhbS5uZXh0TGluZSgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBhdXRvIG1pc21hdGNoZWQgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGluZUxheW91dERhdGEtPnJ1bkNvdW50KCk7ICsraSkgewotICAgICAgICBhdXRvJiBzaW1wbGVS
dW4gPSBsaW5lTGF5b3V0RGF0YS0+cnVuQXQoaSk7Ci0gICAgICAgIGF1dG8mIGxpbmVSdW4gPSBs
aW5lUnVuc1tpXTsKLSAgICAgICAgYXV0byBtYXRjaGluZ1J1bnMgPSBhcmVFc3NlbnRpYWxseUVx
dWFsKHNpbXBsZVJ1bi5sb2dpY2FsTGVmdCwgbGluZVJ1bi5sb2dpY2FsTGVmdCgpKSAmJiBhcmVF
c3NlbnRpYWxseUVxdWFsKHNpbXBsZVJ1bi5sb2dpY2FsUmlnaHQsIGxpbmVSdW4ubG9naWNhbFJp
Z2h0KCkpOwotICAgICAgICBpZiAobWF0Y2hpbmdSdW5zICYmIGxpbmVSdW4udGV4dCgpKSB7Ci0g
ICAgICAgICAgICBtYXRjaGluZ1J1bnMgPSBzaW1wbGVSdW4uc3RhcnQgPT0gbGluZVJ1bi50ZXh0
KCktPnN0YXJ0KCkgJiYgc2ltcGxlUnVuLmVuZCA9PSBsaW5lUnVuLnRleHQoKS0+ZW5kKCk7Ci0g
ICAgICAgICAgICAvLyBTTEwgaGFuZGxlcyBzdHJpbmdzIGluIGEgbW9yZSBjb25jYXRlbmF0ZWQg
Zm9ybWF0IDxkaXY+Zm9vPGJyPmJhcjwvZGl2PiAtPiBmb28gLT4gMCwzIGJhciAtPiAzLDYgdnMu
IDAsMyBhbmQgMCwzCi0gICAgICAgICAgICBpZiAoIW1hdGNoaW5nUnVucykKLSAgICAgICAgICAg
ICAgICBtYXRjaGluZ1J1bnMgPSAoc2ltcGxlUnVuLmVuZCAtIHNpbXBsZVJ1bi5zdGFydCkgPT0g
KGxpbmVSdW4udGV4dCgpLT5lbmQoKSAtIGxpbmVSdW4udGV4dCgpLT5zdGFydCgpKTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAobWF0Y2hpbmdSdW5zKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgc3RyZWFtIDw8ICJNaXNtYXRjaGluZzogc2ltcGxlIHJ1bigiIDw8IHNpbXBsZVJ1
bi5zdGFydCA8PCAiLCAiIDw8IHNpbXBsZVJ1bi5lbmQgPDwgIikgKCIgPDwgc2ltcGxlUnVuLmxv
Z2ljYWxMZWZ0IDw8ICIsICIgPDwgc2ltcGxlUnVuLmxvZ2ljYWxSaWdodCA8PCAiKSI7Ci0gICAg
ICAgIHN0cmVhbSA8PCAiIGlubGluZSBydW4iOwotICAgICAgICBpZiAobGluZVJ1bi50ZXh0KCkp
Ci0gICAgICAgICAgICBzdHJlYW0gPDwgIiAoIiA8PCBsaW5lUnVuLnRleHQoKS0+c3RhcnQoKSA8
PCAiLCAiIDw8IGxpbmVSdW4udGV4dCgpLT5lbmQoKSA8PCAiKSI7Ci0gICAgICAgIHN0cmVhbSA8
PCAiICgiIDw8IGxpbmVSdW4ubG9naWNhbExlZnQoKSA8PCAiLCAiIDw8IGxpbmVSdW4ubG9naWNh
bFRvcCgpIDw8ICIpICgiIDw8IGxpbmVSdW4ubG9naWNhbFdpZHRoKCkgPDwgIngiIDw8IGxpbmVS
dW4ubG9naWNhbEhlaWdodCgpIDw8ICIpIjsKLSAgICAgICAgc3RyZWFtLm5leHRMaW5lKCk7Ci0g
ICAgICAgIG1pc21hdGNoZWQgPSB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gbWlzbWF0Y2hlZDsK
LX0KLQogc3RhdGljIGJvb2wgY2hlY2tGb3JNYXRjaGluZ05vblRleHRSdW5zKGNvbnN0IExpbmVS
dW4mIGxpbmVSdW4sIGNvbnN0IFdlYkNvcmU6OklubGluZUJveCYgaW5saW5lQm94KQogewogICAg
IHJldHVybiBhcmVFc3NlbnRpYWxseUVxdWFsKGlubGluZUJveC5sZWZ0KCksIGxpbmVSdW4ubG9n
aWNhbExlZnQoKSkKQEAgLTM1OSw3ICszMTcsNyBAQCBzdGF0aWMgYm9vbCB2ZXJpZnlBbmRPdXRw
dXRTdWJ0cmVlKFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgTGF5b3V0U3RhdGUmIGNvbnRleAog
CiAgICAgICAgICAgICBhdXRvJiBibG9ja0Zsb3cgPSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+
KCpjaGlsZFJlbmRlcmVyKTsKICAgICAgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdSb290ID0gZG93
bmNhc3Q8Q29udGFpbmVyQm94PigqY2hpbGRMYXlvdXRCb3gpOwotICAgICAgICAgICAgbWlzbXRh
Y2hpbmdHZW9tZXRyeSB8PSBibG9ja0Zsb3cubGluZUxheW91dFBhdGgoKSA9PSBSZW5kZXJCbG9j
a0Zsb3c6OlNpbXBsZUxpbmVzUGF0aCA/IG91dHB1dE1pc21hdGNoaW5nU2ltcGxlTGluZUluZm9y
bWF0aW9uSWZOZWVkZWQoc3RyZWFtLCBjb250ZXh0LCBibG9ja0Zsb3csIGZvcm1hdHRpbmdSb290
KSA6IG91dHB1dE1pc21hdGNoaW5nQ29tcGxleExpbmVJbmZvcm1hdGlvbklmTmVlZGVkKHN0cmVh
bSwgY29udGV4dCwgYmxvY2tGbG93LCBmb3JtYXR0aW5nUm9vdCk7CisgICAgICAgICAgICBtaXNt
dGFjaGluZ0dlb21ldHJ5IHw9IG91dHB1dE1pc21hdGNoaW5nQ29tcGxleExpbmVJbmZvcm1hdGlv
bklmTmVlZGVkKHN0cmVhbSwgY29udGV4dCwgYmxvY2tGbG93LCBmb3JtYXR0aW5nUm9vdCk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBhdXRvIG1pc21hdGNoaW5nU3VidHJlZUdlb21l
dHJ5ID0gdmVyaWZ5QW5kT3V0cHV0U3VidHJlZShzdHJlYW0sIGNvbnRleHQsIGRvd25jYXN0PFJl
bmRlckJveD4oKmNoaWxkUmVuZGVyZXIpLCAqY2hpbGRMYXlvdXRCb3gpOwogICAgICAgICAgICAg
bWlzbXRhY2hpbmdHZW9tZXRyeSB8PSBtaXNtYXRjaGluZ1N1YnRyZWVHZW9tZXRyeTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlv
bkxpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91
dEludGVncmF0aW9uTGluZUxheW91dC5jcHAKaW5kZXggZjI5OTg3ZDI0MzU1Li42YzZkMDZkZTE3
M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJ
bnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRl
Z3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwCkBAIC00OCw3ICs0OCw2IEBA
CiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXQu
aCIKICNpbmNsdWRlICJUZXh0RGVjb3JhdGlvblBhaW50ZXIuaCIKICNpbmNsdWRlICJUZXh0UGFp
bnRlci5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24v
TGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uY3BwCmluZGV4IDg2MmI0OGM4
YTk1Ny4uOGZjYjRlYTk0Y2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50
ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcApA
QCAtMzAsOCArMzAsNiBAQAogCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJS
ZW5kZXJCbG9ja0Zsb3cuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0LmgiCi0jaW5jbHVk
ZSAiU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBu
YW1lc3BhY2UgTGF5b3V0SW50ZWdyYXRpb24gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0NvbXBsZXhMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9Db21wbGV4TGluZUxheW91dC5jcHAKaW5kZXggZTVjYzk5MjZhNmRhLi5lN2QxZTM0ZTgwZjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbXBsZXhMaW5lTGF5b3V0LmNwcApA
QCAtMTY5Nyw4ICsxNjk3LDYgQEAgdm9pZCBDb21wbGV4TGluZUxheW91dDo6bGlua1RvRW5kTGlu
ZUlmTmVlZGVkKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUpCiAKIHZvaWQgQ29tcGxleExp
bmVMYXlvdXQ6OmxheW91dExpbmVCb3hlcyhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVu
aXQmIHJlcGFpbnRMb2dpY2FsVG9wLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbEJvdHRvbSkK
IHsKLSAgICBBU1NFUlQoIW1fZmxvdy5zaW1wbGVMaW5lTGF5b3V0KCkpOwotCiAgICAgbV9mbG93
LnNldExvZ2ljYWxIZWlnaHQobV9mbG93LmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKSk7CiAgICAg
CiAgICAgLy8gTGF5IG91dCBvdXIgaHlwb3RoZXRpY2FsIGdyaWQgbGluZSBhcyB0aG91Z2ggaXQg
b2NjdXJzIGF0IHRoZSB0b3Agb2YgdGhlIGJsb2NrLgpAQCAtMjEyOCw4ICsyMTI2LDYgQEAgYm9v
bCBDb21wbGV4TGluZUxheW91dDo6bWF0Y2hlZEVuZExpbmUoTGluZUxheW91dFN0YXRlJiBsYXlv
dXRTdGF0ZSwgY29uc3QgSW5saW4KIAogdm9pZCBDb21wbGV4TGluZUxheW91dDo6YWRkT3ZlcmZs
b3dGcm9tSW5saW5lQ2hpbGRyZW4oKQogewotICAgIEFTU0VSVCghbV9mbG93LnNpbXBsZUxpbmVM
YXlvdXQoKSk7Ci0KICAgICBMYXlvdXRVbml0IGVuZFBhZGRpbmcgPSBtX2Zsb3cuaGFzT3ZlcmZs
b3dDbGlwKCkgPyBtX2Zsb3cucGFkZGluZ0VuZCgpIDogMF9sdTsKICAgICAvLyBGSVhNRTogTmVl
ZCB0byBmaW5kIGFub3RoZXIgd2F5IHRvIGRvIHRoaXMsIHNpbmNlIHNjcm9sbGJhcnMgY291bGQg
c2hvdyB3aGVuIHdlIGRvbid0IHdhbnQgdGhlbSB0by4KICAgICBpZiAoIWVuZFBhZGRpbmcpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4IGI0MzA3
ZDc5NWM3MS4uZWIxMGFlYWI4ODVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tGbG93LmNwcApAQCAtNTQsOSArNTQsNiBAQAogI2luY2x1ZGUgIlJlbmRlclRyZWVC
dWlsZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgi
Ci0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIlNpbXBs
ZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dFJlc29s
dmVyLmgiCiAjaW5jbHVkZSAiVGV4dEF1dG9TaXppbmcuaCIKICNpbmNsdWRlICJWZXJ0aWNhbFBv
c2l0aW9uQ2FjaGUuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKQEAgLTY2OSwyNiAr
NjY2LDE2IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxkcmVuKGJvb2wg
cmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgbWF4CiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6
bGF5b3V0SW5saW5lQ2hpbGRyZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiBy
ZXBhaW50TG9naWNhbFRvcCwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxCb3R0b20pCiB7CiAg
ICAgYXV0byBjb21wdXRlTGluZUxheW91dFBhdGggPSBbJl0gewotICAgICAgICBib29sIGlzSW50
ZWdyYXRpb25FbmFibGVkID0gZmFsc2U7CiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NP
TlRFWFQpCiAgICAgICAgIGlmIChMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Y2FuVXNl
Rm9yKCp0aGlzKSkKICAgICAgICAgICAgIHJldHVybiBMYXlvdXRGb3JtYXR0aW5nQ29udGV4dFBh
dGg7Ci0gICAgICAgIGlzSW50ZWdyYXRpb25FbmFibGVkID0gTGF5b3V0SW50ZWdyYXRpb246Okxp
bmVMYXlvdXQ6OmlzRW5hYmxlZCgpOwogI2VuZGlmCi0gICAgICAgIGlmICghaXNJbnRlZ3JhdGlv
bkVuYWJsZWQgJiYgU2ltcGxlTGluZUxheW91dDo6Y2FuVXNlRm9yKCp0aGlzKSkKLSAgICAgICAg
ICAgIHJldHVybiBTaW1wbGVMaW5lc1BhdGg7Ci0KICAgICAgICAgcmV0dXJuIExpbmVCb3hlc1Bh
dGg7CiAgICAgfTsKIAogICAgIGlmIChsaW5lTGF5b3V0UGF0aCgpID09IFVuZGV0ZXJtaW5lZFBh
dGgpCiAgICAgICAgIHNldExpbmVMYXlvdXRQYXRoKGNvbXB1dGVMaW5lTGF5b3V0UGF0aCgpKTsK
IAotICAgIGlmIChsaW5lTGF5b3V0UGF0aCgpID09IFNpbXBsZUxpbmVzUGF0aCkgewotICAgICAg
ICBsYXlvdXRTaW1wbGVMaW5lcyhyZWxheW91dENoaWxkcmVuLCByZXBhaW50TG9naWNhbFRvcCwg
cmVwYWludExvZ2ljYWxCb3R0b20pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAjaWYgRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAgICAgaWYgKGxpbmVMYXlvdXRQYXRoKCkg
PT0gTGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRQYXRoKSB7CiAgICAgICAgIGxheW91dExGQ0xpbmVz
KHJlbGF5b3V0Q2hpbGRyZW4sIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbEJvdHRv
bSk7CkBAIC0yMTA4LDggKzIwOTUsNiBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6c3R5bGVEaWRD
aGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbAogICAgICAg
ICBhdXRvIHNob3VsZEludmFsaWRhdGVMaW5lTGF5b3V0UGF0aCA9IFsmXSB7CiAgICAgICAgICAg
ICBpZiAoc2VsZk5lZWRzTGF5b3V0KCkgfHwgY29tcGxleExpbmVMYXlvdXQoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChzaW1wbGVMaW5lTGF5b3V0KCkg
JiYgIVNpbXBsZUxpbmVMYXlvdXQ6OmNhblVzZUZvckFmdGVyU3R5bGVDaGFuZ2UoKnRoaXMsIGRp
ZmYpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogI2lmIEVOQUJMRShMQVlPVVRfRk9S
TUFUVElOR19DT05URVhUKQogICAgICAgICAgICAgaWYgKGxheW91dEZvcm1hdHRpbmdDb250ZXh0
TGluZUxheW91dCgpICYmICFMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Y2FuVXNlRm9y
QWZ0ZXJTdHlsZUNoYW5nZSgqdGhpcywgZGlmZikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC0yOTg5LDkgKzI5NzQsNiBAQCBib29sIFJlbmRlckJsb2NrRmxvdzo6aGl0VGVzdElu
bGluZUNoaWxkcmVuKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZQogewogICAg
IEFTU0VSVChjaGlsZHJlbklubGluZSgpKTsKIAotICAgIGlmIChzaW1wbGVMaW5lTGF5b3V0KCkp
Ci0gICAgICAgIHJldHVybiBTaW1wbGVMaW5lTGF5b3V0OjpoaXRUZXN0RmxvdygqdGhpcywgKnNp
bXBsZUxpbmVMYXlvdXQoKSwgcmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBh
Y2N1bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFjdGlvbik7Ci0KICNpZiBFTkFCTEUoTEFZT1VUX0ZP
Uk1BVFRJTkdfQ09OVEVYVCkKICAgICBpZiAobGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5
b3V0KCkpCiAgICAgICAgIHJldHVybiBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQo
KS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIGFjY3VtdWxh
dGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKTsKQEAgLTMwMDIsMTIgKzI5ODQsNiBAQCBib29sIFJl
bmRlckJsb2NrRmxvdzo6aGl0VGVzdElubGluZUNoaWxkcmVuKGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZQogCiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6YWRkT3ZlcmZsb3dGcm9t
SW5saW5lQ2hpbGRyZW4oKQogewotICAgIGlmIChhdXRvIHNpbXBsZUxpbmVMYXlvdXQgPSB0aGlz
LT5zaW1wbGVMaW5lTGF5b3V0KCkpIHsKLSAgICAgICAgQVNTRVJUKCFoYXNPdmVyZmxvd0NsaXAo
KSk7Ci0gICAgICAgIFNpbXBsZUxpbmVMYXlvdXQ6OmNvbGxlY3RGbG93T3ZlcmZsb3coKnRoaXMs
ICpzaW1wbGVMaW5lTGF5b3V0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogI2lmIEVOQUJM
RShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogICAgIGlmIChsYXlvdXRGb3JtYXR0aW5nQ29u
dGV4dExpbmVMYXlvdXQoKSkgewogICAgICAgICBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVM
YXlvdXQoKS0+Y29sbGVjdE92ZXJmbG93KCp0aGlzKTsKQEAgLTMwOTcsMTEgKzMwNzMsNiBAQCB2
b2lkIFJlbmRlckJsb2NrRmxvdzo6bWFya0xpbmVzRGlydHlJbkJsb2NrUmFuZ2UoTGF5b3V0VW5p
dCBsb2dpY2FsVG9wLCBMYXlvdXRVbgogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGbG9hdHMg
Y3VycmVudGx5IGFmZmVjdCB0aGUgY2hvaWNlIG9mIGxheW91dCBwYXRoLgotICAgIGlmIChzaW1w
bGVMaW5lTGF5b3V0KCkpIHsKLSAgICAgICAgaW52YWxpZGF0ZUxpbmVMYXlvdXRQYXRoKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09O
VEVYVCkKICAgICBpZiAobGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCkpIHsKICAg
ICAgICAgaW52YWxpZGF0ZUxpbmVMYXlvdXRQYXRoKCk7CkBAIC0zMTM4LDkgKzMxMDksNiBAQCBP
cHRpb25hbDxpbnQ+IFJlbmRlckJsb2NrRmxvdzo6Zmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdAog
ICAgICAgICByZXR1cm4gZmxvb3JUb0ludChsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlv
dXQoKS0+Zmlyc3RMaW5lQmFzZWxpbmUoKSk7CiAjZW5kaWYKIAotICAgIGlmIChzaW1wbGVMaW5l
TGF5b3V0KCkpCi0gICAgICAgIHJldHVybiB7IFNpbXBsZUxpbmVMYXlvdXQ6OmNvbXB1dGVGbG93
Rmlyc3RMaW5lQmFzZWxpbmUoKnRoaXMsICpzaW1wbGVMaW5lTGF5b3V0KCkpIH07Ci0KICAgICBB
U1NFUlQoZmlyc3RSb290Qm94KCkpOwogICAgIGlmIChzdHlsZSgpLmlzRmxpcHBlZExpbmVzV3Jp
dGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIGZpcnN0Um9vdEJveCgpLT5sb2dpY2FsVG9wKCkg
KyBmaXJzdExpbmVTdHlsZSgpLmZvbnRNZXRyaWNzKCkuZGVzY2VudChmaXJzdFJvb3RCb3goKS0+
YmFzZWxpbmVUeXBlKCkpOwpAQCAtMzE1NCw3ICszMTIyLDcgQEAgT3B0aW9uYWw8aW50PiBSZW5k
ZXJCbG9ja0Zsb3c6OmlubGluZUJsb2NrQmFzZWxpbmUoTGluZURpcmVjdGlvbk1vZGUgbGluZURp
cmVjdGkKIAogICAgIC8vIE5vdGUgdGhhdCBoZXJlIHdlIG9ubHkgdGFrZSB0aGUgbGVmdCBhbmQg
Ym90dG9tIGludG8gY29uc2lkZXJhdGlvbi4gT3VyIGNhbGxlciB0YWtlcyB0aGUgcmlnaHQgYW5k
IHRvcCBpbnRvIGNvbnNpZGVyYXRpb24uCiAgICAgZmxvYXQgYm94SGVpZ2h0ID0gbGluZURpcmVj
dGlvbiA9PSBIb3Jpem9udGFsTGluZSA/IGhlaWdodCgpICsgbV9tYXJnaW5Cb3guYm90dG9tKCkg
OiB3aWR0aCgpICsgbV9tYXJnaW5Cb3gubGVmdCgpOwotICAgIGZsb2F0IGxhc3RCYXNlbGluZTsK
KyAgICBmbG9hdCBsYXN0QmFzZWxpbmUgPSAwOwogICAgIGlmICghY2hpbGRyZW5JbmxpbmUoKSkg
ewogICAgICAgICBPcHRpb25hbDxpbnQ+IGlubGluZUJsb2NrQmFzZWxpbmUgPSBSZW5kZXJCbG9j
azo6aW5saW5lQmxvY2tCYXNlbGluZShsaW5lRGlyZWN0aW9uKTsKICAgICAgICAgaWYgKCFpbmxp
bmVCbG9ja0Jhc2VsaW5lKQpAQCAtMzE3MCwxOSArMzEzOCwxNyBAQCBPcHRpb25hbDxpbnQ+IFJl
bmRlckJsb2NrRmxvdzo6aW5saW5lQmxvY2tCYXNlbGluZShMaW5lRGlyZWN0aW9uTW9kZSBsaW5l
RGlyZWN0aQogICAgICAgICAgICAgICAgICsgKGxpbmVEaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExp
bmUgPyBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSA6IGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5n
UmlnaHQoKSkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHNpbXBsZUxpbmVMYXlvdXQoKSkK
LSAgICAgICAgICAgIGxhc3RCYXNlbGluZSA9IFNpbXBsZUxpbmVMYXlvdXQ6OmNvbXB1dGVGbG93
TGFzdExpbmVCYXNlbGluZSgqdGhpcywgKnNpbXBsZUxpbmVMYXlvdXQoKSk7Ci0jaWYgRU5BQkxF
KExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0gICAgICAgIGVsc2UgaWYgKGxheW91dEZvcm1h
dHRpbmdDb250ZXh0TGluZUxheW91dCgpKQotICAgICAgICAgICAgbGFzdEJhc2VsaW5lID0gZmxv
b3JUb0ludChsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKS0+bGFzdExpbmVCYXNl
bGluZSgpKTsKLSNlbmRpZgotICAgICAgICBlbHNlIHsKKyAgICAgICAgaWYgKGNvbXBsZXhMaW5l
TGF5b3V0KCkpIHsKICAgICAgICAgICAgIGJvb2wgaXNGaXJzdExpbmUgPSBsYXN0Um9vdEJveCgp
ID09IGZpcnN0Um9vdEJveCgpOwogICAgICAgICAgICAgY29uc3QgYXV0byYgc3R5bGUgPSBpc0Zp
cnN0TGluZSA/IGZpcnN0TGluZVN0eWxlKCkgOiB0aGlzLT5zdHlsZSgpOwogICAgICAgICAgICAg
Ly8gSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0luQmxvY2tEaXJlY3Rpb24gd2lsbCBmbGlwIGxp
bmVzIGluIGNhc2Ugb2YgdmVydGljYWxMUiBtb2RlLCBzbyB3ZSBjYW4gYXNzdW1lIHZlcnRpY2Fs
UkwgZm9yIG5vdy4KICAgICAgICAgICAgIGxhc3RCYXNlbGluZSA9IHN0eWxlLmZvbnRNZXRyaWNz
KCkuYXNjZW50KGxhc3RSb290Qm94KCktPmJhc2VsaW5lVHlwZSgpKQogICAgICAgICAgICAgICAg
ICsgKHN0eWxlLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/IGxvZ2ljYWxIZWlnaHQoKSAt
IGxhc3RSb290Qm94KCktPmxvZ2ljYWxCb3R0b20oKSA6IGxhc3RSb290Qm94KCktPmxvZ2ljYWxU
b3AoKSk7CiAgICAgICAgIH0KKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkK
KyAgICAgICAgZWxzZSBpZiAobGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCkpCisg
ICAgICAgICAgICBsYXN0QmFzZWxpbmUgPSBmbG9vclRvSW50KGxheW91dEZvcm1hdHRpbmdDb250
ZXh0TGluZUxheW91dCgpLT5sYXN0TGluZUJhc2VsaW5lKCkpOworI2VuZGlmCiAgICAgfQogICAg
IC8vIEFjY29yZGluZyB0byB0aGUgQ1NTIHNwZWMgaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEv
dmlzdWRldC5odG1sLCB3ZSBzaG91bGRuJ3QgYmUgcGVyZm9ybWluZyB0aGlzIG1pbiwgYnV0IHNo
b3VsZAogICAgIC8vIGluc3RlYWQgYmUgcmV0dXJuaW5nIGJveEhlaWdodCBkaXJlY3RseS4gSG93
ZXZlciwgd2UgZmVlbCB0aGF0IGEgbWluIGhlcmUgaXMgYmV0dGVyIGJlaGF2aW9yIChhbmQgaXMg
Y29uc2lzdGVudApAQCAtMzIwMCw4ICszMTY2LDYgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnNl
dFNlbGVjdGlvblN0YXRlKEhpZ2hsaWdodFN0YXRlIHN0YXRlKQogR2FwUmVjdHMgUmVuZGVyQmxv
Y2tGbG93OjppbmxpbmVTZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0
IExheW91dFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRTaXpl
JiBvZmZzZXRGcm9tUm9vdEJsb2NrLAogICAgIExheW91dFVuaXQmIGxhc3RMb2dpY2FsVG9wLCBM
YXlvdXRVbml0JiBsYXN0TG9naWNhbExlZnQsIExheW91dFVuaXQmIGxhc3RMb2dpY2FsUmlnaHQs
IGNvbnN0IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMmIGNhY2hlLCBjb25zdCBQYWludElu
Zm8qIHBhaW50SW5mbykKIHsKLSAgICBBU1NFUlQoIXNpbXBsZUxpbmVMYXlvdXQoKSk7Ci0KICAg
ICBHYXBSZWN0cyByZXN1bHQ7CiAKICAgICBib29sIGNvbnRhaW5zU3RhcnQgPSBzZWxlY3Rpb25T
dGF0ZSgpID09IEhpZ2hsaWdodFN0YXRlOjpTdGFydCB8fCBzZWxlY3Rpb25TdGF0ZSgpID09IEhp
Z2hsaWdodFN0YXRlOjpCb3RoOwpAQCAtMzMxNyw5ICszMjgxLDYgQEAgaW50IFJlbmRlckJsb2Nr
Rmxvdzo6bGluZUNvdW50KCkgY29uc3QKICAgICAgICAgaWYgKGxheW91dEZvcm1hdHRpbmdDb250
ZXh0TGluZUxheW91dCgpKQogICAgICAgICAgICAgcmV0dXJuIGxheW91dEZvcm1hdHRpbmdDb250
ZXh0TGluZUxheW91dCgpLT5saW5lQ291bnQoKTsKICNlbmRpZgotICAgICAgICBpZiAoc2ltcGxl
TGluZUxheW91dCgpKQotICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUxpbmVMYXlvdXQoKS0+bGlu
ZUNvdW50KCk7Ci0KICAgICAgICAgaWYgKGNvbXBsZXhMaW5lTGF5b3V0KCkpCiAgICAgICAgICAg
ICByZXR1cm4gY29tcGxleExpbmVMYXlvdXQoKS0+bGluZUNvdW50KCk7CiAKQEAgLTM1NzUsMTAg
KzM1MzYsOCBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlvbkZvclBv
aW50V2l0aElubGluZUNoaWxkcmVuKGNvbnN0IExheW91dAogCiBQb3NpdGlvbiBSZW5kZXJCbG9j
a0Zsb3c6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQogewotICAg
IC8vIEZJWE1FOiBJdCBzdXBwb3J0cyBzaW5nbGUgdGV4dCBjaGlsZCBvbmx5ICh3aGljaCBpcyB0
aGUgbWFqb3JpdHkgb2Ygc2ltcGxlIGxpbmUgbGF5b3V0IHN1cHBvcnRlZCBjb250ZW50IGF0IHRo
aXMgcG9pbnQpLgotICAgIGlmICghc2ltcGxlTGluZUxheW91dCgpIHx8IGZpcnN0Q2hpbGQoKSAh
PSBsYXN0Q2hpbGQoKSB8fCAhaXM8UmVuZGVyVGV4dD4oZmlyc3RDaGlsZCgpKSkKLSAgICAgICAg
cmV0dXJuIHBvc2l0aW9uRm9yUG9pbnQocG9pbnQsIG51bGxwdHIpLmRlZXBFcXVpdmFsZW50KCk7
Ci0gICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRleHQ+KCpmaXJzdENoaWxkKCkpLnBvc2l0aW9u
Rm9yUG9pbnQocG9pbnQpOworICAgIC8vIEZJWE1FOiBUaGlzIGZvcmNlcyBDb21wbGV4IExpbmUg
TGF5b3V0LgorICAgIHJldHVybiBwb3NpdGlvbkZvclBvaW50KHBvaW50LCBudWxscHRyKS5kZWVw
RXF1aXZhbGVudCgpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQmxvY2tGbG93Ojpwb3Np
dGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVuZGVyRnJhZ21l
bnRDb250YWluZXIqKQpAQCAtMzYwOSwxMSArMzU2OCw2IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93
OjpwYWludElubGluZUNoaWxkcmVuKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQ
b2luCiAgICAgfQogI2VuZGlmCiAKLSAgICBpZiAoYXV0byBzaW1wbGVMaW5lTGF5b3V0ID0gdGhp
cy0+c2ltcGxlTGluZUxheW91dCgpKSB7Ci0gICAgICAgIFNpbXBsZUxpbmVMYXlvdXQ6OnBhaW50
RmxvdygqdGhpcywgKnNpbXBsZUxpbmVMYXlvdXQsIHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKGNvbXBsZXhMaW5lTGF5b3V0KCkpCiAg
ICAgICAgIGNvbXBsZXhMaW5lTGF5b3V0KCktPmxpbmVCb3hlcygpLnBhaW50KHRoaXMsIHBhaW50
SW5mbywgcGFpbnRPZmZzZXQpOwogfQpAQCAtMzY3MSw4ICszNjI1LDYgQEAgYm9vbCBSZW5kZXJC
bG9ja0Zsb3c6Omhhc0xpbmVzKCkgY29uc3QKICAgICBpZiAobGF5b3V0Rm9ybWF0dGluZ0NvbnRl
eHRMaW5lTGF5b3V0KCkpCiAgICAgICAgIHJldHVybiBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExp
bmVMYXlvdXQoKS0+bGluZUNvdW50KCk7CiAjZW5kaWYKLSAgICBpZiAoc2ltcGxlTGluZUxheW91
dCgpKQotICAgICAgICByZXR1cm4gc2ltcGxlTGluZUxheW91dCgpLT5saW5lQ291bnQoKTsKIAog
ICAgIHJldHVybiBjb21wbGV4TGluZUxheW91dCgpICYmIGNvbXBsZXhMaW5lTGF5b3V0KCktPmxp
bmVCb3hlcygpLmZpcnN0TGluZUJveCgpOwogfQpAQCAtMzY4MiwxNSArMzYzNCwxMSBAQCB2b2lk
IFJlbmRlckJsb2NrRmxvdzo6aW52YWxpZGF0ZUxpbmVMYXlvdXRQYXRoKCkKICAgICBzd2l0Y2gg
KGxpbmVMYXlvdXRQYXRoKCkpIHsKICAgICBjYXNlIFVuZGV0ZXJtaW5lZFBhdGg6CiAgICAgY2Fz
ZSBGb3JjZUxpbmVCb3hlc1BhdGg6Ci0gICAgICAgIEFTU0VSVCghc2ltcGxlTGluZUxheW91dCgp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgTGluZUJveGVzUGF0aDoKLSAgICAgICAgQVNT
RVJUKCFzaW1wbGVMaW5lTGF5b3V0KCkpOwogICAgICAgICBzZXRMaW5lTGF5b3V0UGF0aChVbmRl
dGVybWluZWRQYXRoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgTGF5b3V0Rm9ybWF0dGlu
Z0NvbnRleHRQYXRoOiAvLyBGSVhNRTogTm90IGFsbCBjbGllbnRzIG9mIGludmFsaWRhdGVMaW5l
TGF5b3V0UGF0aCgpIGFjdHVhbGx5IG5lZWQgdG8gd2lwZSB0aGUgbGF5b3V0LgotICAgIGNhc2Ug
U2ltcGxlTGluZXNQYXRoOgotICAgICAgICAvLyBUaGUgc2ltcGxlIGxpbmUgbGF5b3V0IG1heSBo
YXZlIGJlY29tZSBpbnZhbGlkLgogICAgICAgICBtX2xpbmVMYXlvdXQgPSBXVEY6Ok1vbm9zdGF0
ZSgpOwogICAgICAgICBzZXRMaW5lTGF5b3V0UGF0aChVbmRldGVybWluZWRQYXRoKTsKICAgICAg
ICAgaWYgKG5lZWRzTGF5b3V0KCkpCkBAIC0zNzAyLDMyICszNjUwLDYgQEAgdm9pZCBSZW5kZXJC
bG9ja0Zsb3c6OmludmFsaWRhdGVMaW5lTGF5b3V0UGF0aCgpCiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRTaW1wbGVMaW5lcyhib29s
IHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsVG9wLCBMYXlvdXRV
bml0JiByZXBhaW50TG9naWNhbEJvdHRvbSkKLXsKLSAgICBib29sIG5lZWRzTGF5b3V0ID0gc2Vs
Zk5lZWRzTGF5b3V0KCkgfHwgcmVsYXlvdXRDaGlsZHJlbiB8fCAhc2ltcGxlTGluZUxheW91dCgp
OwotICAgIGlmIChuZWVkc0xheW91dCkKLSAgICAgICAgbV9saW5lTGF5b3V0ID0gU2ltcGxlTGlu
ZUxheW91dDo6Y3JlYXRlKCp0aGlzKTsKLQotICAgIGF1dG8mIHNpbXBsZUxpbmVMYXlvdXQgPSAq
dGhpcy0+c2ltcGxlTGluZUxheW91dCgpOwotCi0gICAgaWYgKHZpZXcoKS5mcmFtZVZpZXcoKS5s
YXlvdXRDb250ZXh0KCkubGF5b3V0U3RhdGUoKSAmJiB2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0
Q29udGV4dCgpLmxheW91dFN0YXRlKCktPmlzUGFnaW5hdGVkKCkpIHsKLSAgICAgICAgc2ltcGxl
TGluZUxheW91dC5zZXRJc1BhZ2luYXRlZCgpOwotICAgICAgICBTaW1wbGVMaW5lTGF5b3V0Ojph
ZGp1c3RMaW5lUG9zaXRpb25zRm9yUGFnaW5hdGlvbihzaW1wbGVMaW5lTGF5b3V0LCAqdGhpcyk7
Ci0gICAgfQotCi0gICAgZm9yIChhdXRvJiByZW5kZXJlciA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRl
ck9iamVjdD4oKnRoaXMpKSB7Ci0gICAgICAgIGlmIChpczxSZW5kZXJUZXh0PihyZW5kZXJlcikp
Ci0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJUZXh0PihyZW5kZXJlcikuZGVsZXRlTGluZUJv
eGVzKCk7Ci0gICAgICAgIHJlbmRlcmVyLmNsZWFyTmVlZHNMYXlvdXQoKTsKLSAgICB9Ci0KLSAg
ICBMYXlvdXRVbml0IGxpbmVMYXlvdXRIZWlnaHQgPSBTaW1wbGVMaW5lTGF5b3V0Ojpjb21wdXRl
Rmxvd0hlaWdodCgqdGhpcywgc2ltcGxlTGluZUxheW91dCk7Ci0gICAgTGF5b3V0VW5pdCBsaW5l
TGF5b3V0VG9wID0gYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpOwotICAgIHJlcGFpbnRMb2dpY2Fs
VG9wID0gbGluZUxheW91dFRvcDsKLSAgICByZXBhaW50TG9naWNhbEJvdHRvbSA9IG5lZWRzTGF5
b3V0ID8gcmVwYWludExvZ2ljYWxUb3AgKyBsaW5lTGF5b3V0SGVpZ2h0ICsgYm9yZGVyQW5kUGFk
ZGluZ0FmdGVyKCkgOiByZXBhaW50TG9naWNhbFRvcDsKLSAgICBzZXRMb2dpY2FsSGVpZ2h0KGxp
bmVMYXlvdXRUb3AgKyBsaW5lTGF5b3V0SGVpZ2h0ICsgYm9yZGVyQW5kUGFkZGluZ0FmdGVyKCkp
OwotfQotCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiB2b2lkIFJlbmRl
ckJsb2NrRmxvdzo6bGF5b3V0TEZDTGluZXMoYm9vbCwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2lj
YWxUb3AsIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsQm90dG9tKQogewpAQCAtMzc2OCwxMSAr
MzY5MCw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjplbnN1cmVMaW5lQm94ZXMoKQogICAgIGlm
IChjb21wbGV4TGluZUxheW91dCgpIHx8ICFoYXNMaW5lTGF5b3V0KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gc2ltcGxlTGluZUxheW91dCA9IG1ha2VSZWZQdHIodGhpcy0+c2ltcGxl
TGluZUxheW91dCgpKTsKLQogICAgIGJvb2wgbmVlZHNUb1BhZ2luYXRlQ29tcGxleExpbmVzID0g
WyZdIHsKLSAgICAgICAgaWYgKHNpbXBsZUxpbmVMYXlvdXQgJiYgc2ltcGxlTGluZUxheW91dC0+
aXNQYWdpbmF0ZWQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwogI2lmIEVOQUJMRShMQVlP
VVRfRk9STUFUVElOR19DT05URVhUKQogICAgICAgICBpZiAobGF5b3V0Rm9ybWF0dGluZ0NvbnRl
eHRMaW5lTGF5b3V0KCkgJiYgbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCktPmlz
UGFnaW5hdGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM3ODIsMTMgKzM3MDAs
NiBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6ZW5zdXJlTGluZUJveGVzKCkKIAogICAgIG1fbGlu
ZUxheW91dCA9IG1ha2VVbmlxdWU8Q29tcGxleExpbmVMYXlvdXQ+KCp0aGlzKTsKIAotICAgIGlm
IChzaW1wbGVMaW5lTGF5b3V0KSB7Ci0gICAgICAgIGlmIChTaW1wbGVMaW5lTGF5b3V0OjpjYW5V
c2VGb3JMaW5lQm94VHJlZSgqdGhpcywgKnNpbXBsZUxpbmVMYXlvdXQpKSB7Ci0gICAgICAgICAg
ICBTaW1wbGVMaW5lTGF5b3V0OjpnZW5lcmF0ZUxpbmVCb3hUcmVlKCp0aGlzLCAqc2ltcGxlTGlu
ZUxheW91dCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBh
dXRvJiBjb21wbGV4TGluZUxheW91dCA9ICp0aGlzLT5jb21wbGV4TGluZUxheW91dCgpOwogCiAj
aWYgQVNTRVJUX0VOQUJMRUQKQEAgLTM4MjIsOSArMzczMyw2IEBAIHZvaWQgUmVuZGVyQmxvY2tG
bG93OjpvdXRwdXRMaW5lVHJlZUFuZE1hcmsoV1RGOjpUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0
IElubGluCiB7CiAgICAgZm9yIChjb25zdCBSb290SW5saW5lQm94KiByb290ID0gZmlyc3RSb290
Qm94KCk7IHJvb3Q7IHJvb3QgPSByb290LT5uZXh0Um9vdEJveCgpKQogICAgICAgICByb290LT5v
dXRwdXRMaW5lVHJlZUFuZE1hcmsoc3RyZWFtLCBtYXJrZWRCb3gsIGRlcHRoKTsKLQotICAgIGlm
IChhdXRvIHNpbXBsZUxpbmVMYXlvdXQgPSB0aGlzLT5zaW1wbGVMaW5lTGF5b3V0KCkpCi0gICAg
ICAgIFNpbXBsZUxpbmVMYXlvdXQ6Om91dHB1dExpbmVMYXlvdXRGb3JGbG93KHN0cmVhbSwgKnRo
aXMsICpzaW1wbGVMaW5lTGF5b3V0LCBkZXB0aCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCmluZGV4IGEyMTIwNzNmMGQxYS4uOWFmYTll
OWFjYmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCkBA
IC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiTGluZVdpZHRoLmgiCiAjaW5jbHVkZSAiUmVuZGVy
QmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJMaW5lQm94TGlzdC5oIgotI2luY2x1ZGUgIlNpbXBs
ZUxpbmVMYXlvdXQuaCIKICNpbmNsdWRlICJUcmFpbGluZ09iamVjdHMuaCIKICNpbmNsdWRlIDxt
ZW1vcnk+CiAKQEAgLTM0NCw3ICszNDMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNMaW5lcygp
IGNvbnN0OwogICAgIHZvaWQgaW52YWxpZGF0ZUxpbmVMYXlvdXRQYXRoKCkgZmluYWw7CiAKLSAg
ICBlbnVtIExpbmVMYXlvdXRQYXRoIHsgVW5kZXRlcm1pbmVkUGF0aCA9IDAsIFNpbXBsZUxpbmVz
UGF0aCwgTGluZUJveGVzUGF0aCwgTGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRQYXRoLCBGb3JjZUxp
bmVCb3hlc1BhdGggfTsKKyAgICBlbnVtIExpbmVMYXlvdXRQYXRoIHsgVW5kZXRlcm1pbmVkUGF0
aCA9IDAsIExpbmVCb3hlc1BhdGgsIExheW91dEZvcm1hdHRpbmdDb250ZXh0UGF0aCwgRm9yY2VM
aW5lQm94ZXNQYXRoIH07CiAgICAgTGluZUxheW91dFBhdGggbGluZUxheW91dFBhdGgoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxMaW5lTGF5b3V0UGF0aD4ocmVuZGVyQmxvY2tGbG93TGlu
ZUxheW91dFBhdGgoKSk7IH0KICAgICB2b2lkIHNldExpbmVMYXlvdXRQYXRoKExpbmVMYXlvdXRQ
YXRoIHBhdGgpIHsgc2V0UmVuZGVyQmxvY2tGbG93TGluZUxheW91dFBhdGgocGF0aCk7IH0KIApA
QCAtMzU5LDggKzM1OCw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY29udGFpbnNOb25aZXJvQmlk
aUxldmVsKCkgY29uc3Q7CiAKLSAgICBjb25zdCBTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQqIHNp
bXBsZUxpbmVMYXlvdXQoKSBjb25zdDsKLSAgICBTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQqIHNp
bXBsZUxpbmVMYXlvdXQoKTsKICAgICBjb25zdCBDb21wbGV4TGluZUxheW91dCogY29tcGxleExp
bmVMYXlvdXQoKSBjb25zdDsKICAgICBDb21wbGV4TGluZUxheW91dCogY29tcGxleExpbmVMYXlv
dXQoKTsKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKQEAgLTU0MywxMSAr
NTQwLDggQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGJvb2wgaGFzTGluZUxheW91dCgpIGNv
bnN0OwotICAgIGJvb2wgaGFzU2ltcGxlTGluZUxheW91dCgpIGNvbnN0OwogICAgIGJvb2wgaGFz
Q29tcGxleExpbmVMYXlvdXQoKSBjb25zdDsKIAotICAgIHZvaWQgbGF5b3V0U2ltcGxlTGluZXMo
Ym9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbFRvcCwgTGF5
b3V0VW5pdCYgcmVwYWludExvZ2ljYWxCb3R0b20pOwotCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JN
QVRUSU5HX0NPTlRFWFQpCiAgICAgYm9vbCBoYXNMYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVM
YXlvdXQoKSBjb25zdDsKICAgICB2b2lkIGxheW91dExGQ0xpbmVzKGJvb2wgcmVsYXlvdXRDaGls
ZHJlbiwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxUb3AsIExheW91dFVuaXQmIHJlcGFpbnRM
b2dpY2FsQm90dG9tKTsKQEAgLTU5Miw3ICs1ODYsNiBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgog
ICAgIFZhcmlhbnQ8CiAgICAgICAgIFdURjo6TW9ub3N0YXRlLAotICAgICAgICBSZWY8U2ltcGxl
TGluZUxheW91dDo6TGF5b3V0PiwKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPExheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0
PiwKICNlbmRpZgpAQCAtNjI0LDIxICs2MTcsNiBAQCBpbmxpbmUgQ29tcGxleExpbmVMYXlvdXQq
IFJlbmRlckJsb2NrRmxvdzo6Y29tcGxleExpbmVMYXlvdXQoKQogICAgIHJldHVybiBoYXNDb21w
bGV4TGluZUxheW91dCgpID8gV1RGOjpnZXQ8c3RkOjp1bmlxdWVfcHRyPENvbXBsZXhMaW5lTGF5
b3V0Pj4obV9saW5lTGF5b3V0KS5nZXQoKSA6IG51bGxwdHI7CiB9CiAKLWlubGluZSBib29sIFJl
bmRlckJsb2NrRmxvdzo6aGFzU2ltcGxlTGluZUxheW91dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPFNpbXBsZUxpbmVMYXlvdXQ6OkxheW91dD4+KG1f
bGluZUxheW91dCk7Ci19Ci0KLWlubGluZSBjb25zdCBTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQq
IFJlbmRlckJsb2NrRmxvdzo6c2ltcGxlTGluZUxheW91dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGhhc1NpbXBsZUxpbmVMYXlvdXQoKSA/IFdURjo6Z2V0PFJlZjxTaW1wbGVMaW5lTGF5b3V0OjpM
YXlvdXQ+PihtX2xpbmVMYXlvdXQpLnB0cigpIDogbnVsbHB0cjsKLX0KLQotaW5saW5lIFNpbXBs
ZUxpbmVMYXlvdXQ6OkxheW91dCogUmVuZGVyQmxvY2tGbG93OjpzaW1wbGVMaW5lTGF5b3V0KCkK
LXsKLSAgICByZXR1cm4gaGFzU2ltcGxlTGluZUxheW91dCgpID8gV1RGOjpnZXQ8UmVmPFNpbXBs
ZUxpbmVMYXlvdXQ6OkxheW91dD4+KG1fbGluZUxheW91dCkucHRyKCkgOiBudWxscHRyOwotfQot
CiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiBpbmxpbmUgYm9vbCBSZW5k
ZXJCbG9ja0Zsb3c6Omhhc0xheW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dCgpIGNvbnN0
CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRl
ZEZsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93
LmNwcAppbmRleCAwZGQzOGVjMmZkMTAuLjQyZGMxOTIwNTNiZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRlZEZsb3cuY3BwCkBAIC00NTAsNyArNDUw
LDcgQEAgdm9pZCBSZW5kZXJGcmFnbWVudGVkRmxvdzo6cmVtb3ZlUmVuZGVyQm94RnJhZ21lbnRJ
bmZvKFJlbmRlckJveCYgYm94KQogCiB2b2lkIFJlbmRlckZyYWdtZW50ZWRGbG93OjpyZW1vdmVM
aW5lRnJhZ21lbnRJbmZvKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgYmxvY2tGbG93KQogewotICAg
IGlmICghbV9saW5lVG9GcmFnbWVudE1hcCB8fCBibG9ja0Zsb3cubGluZUxheW91dFBhdGgoKSA9
PSBTaW1wbGVMaW5lc1BhdGgpCisgICAgaWYgKCFtX2xpbmVUb0ZyYWdtZW50TWFwKQogICAgICAg
ICByZXR1cm47CiAKICAgICBmb3IgKGF1dG8qIGN1cnIgPSBibG9ja0Zsb3cuZmlyc3RSb290Qm94
KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0Um9vdEJveCgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHQuY3BwCmluZGV4IGQ0NjEzNjY4YTI3Mi4uOGUwZWIyNzhjYzRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCkBAIC00Niw3ICs0Niw2IEBACiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJlbmRlcmVkRG9jdW1lbnRNYXJrZXIu
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGdW5j
dGlvbnMuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rl
ci5oIgogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgpAQCAtNDQzLDIzICs0NDIsMTMgQEAg
VmVjdG9yPEZsb2F0UXVhZD4gUmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFkc0ZvclJhbmdlKHVuc2ln
bmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQKICAgICBBU1NFUlQoc3RhcnQgPD0gSU5UX01BWCk7CiAg
ICAgc3RhcnQgPSBzdGQ6Om1pbihzdGFydCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElOVF9NQVgp
KTsKICAgICBlbmQgPSBzdGQ6Om1pbihlbmQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihJTlRfTUFY
KSk7Ci0gICAgaWYgKHNpbXBsZUxpbmVMYXlvdXQoKSAmJiAhdXNlU2VsZWN0aW9uSGVpZ2h0KQot
ICAgICAgICByZXR1cm4gY29sbGVjdEFic29sdXRlUXVhZHNGb3JSYW5nZSgqdGhpcywgc3RhcnQs
IGVuZCwgKnNpbXBsZUxpbmVMYXlvdXQoKSwgaWdub3JlRW1wdHlUZXh0U2VsZWN0aW9ucywgd2Fz
Rml4ZWQpOworCiAgICAgY29uc3RfY2FzdDxSZW5kZXJUZXh0Jj4oKnRoaXMpLmVuc3VyZUxpbmVC
b3hlcygpOwogICAgIHJldHVybiBtX2xpbmVCb3hlcy5hYnNvbHV0ZVF1YWRzRm9yUmFuZ2UoKnRo
aXMsIHN0YXJ0LCBlbmQsIHVzZVNlbGVjdGlvbkhlaWdodCwgaWdub3JlRW1wdHlUZXh0U2VsZWN0
aW9ucywgd2FzRml4ZWQpOwogfQogCiBQb3NpdGlvbiBSZW5kZXJUZXh0Ojpwb3NpdGlvbkZvclBv
aW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCkKIHsKLSAgICBpZiAoc2ltcGxlTGluZUxheW91
dCgpICYmIHBhcmVudCgpLT5maXJzdENoaWxkKCkgPT0gcGFyZW50KCktPmxhc3RDaGlsZCgpKSB7
Ci0gICAgICAgIGF1dG8gb2Zmc2V0ID0gU2ltcGxlTGluZUxheW91dDo6dGV4dE9mZnNldEZvclBv
aW50KHBvaW50LCAqdGhpcywgKnNpbXBsZUxpbmVMYXlvdXQoKSk7Ci0gICAgICAgIC8vIERpZCBu
b3QgZmluZCBhIHZhbGlkIG9mZnNldC4gRmFsbCBiYWNrIHRvIHRoZSBub3JtYWwgbGluZSBsYXlv
dXQgYmFzZWQgUG9zaXRpb24uCi0gICAgICAgIGlmIChvZmZzZXQgPT0gdGV4dCgpLmxlbmd0aCgp
KQotICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uRm9yUG9pbnQocG9pbnQsIG51bGxwdHIpLmRl
ZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgIGF1dG8gcG9zaXRpb24gPSBQb3NpdGlvbih0ZXh0Tm9k
ZSgpLCBvZmZzZXQpOwotICAgICAgICBBU1NFUlQocG9zaXRpb24gPT0gcG9zaXRpb25Gb3JQb2lu
dChwb2ludCwgbnVsbHB0cikuZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgIHJldHVybiBwb3Np
dGlvbjsKLSAgICB9CiAgICAgcmV0dXJuIHBvc2l0aW9uRm9yUG9pbnQocG9pbnQsIG51bGxwdHIp
LmRlZXBFcXVpdmFsZW50KCk7CiB9CiAKQEAgLTEwNzYsNyArMTA2NSw3IEBAIHZvaWQgUmVuZGVy
VGV4dDo6c2V0VGV4dFdpdGhPZmZzZXQoY29uc3QgU3RyaW5nJiBuZXdUZXh0LCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnCiAgICAgaW50IGRlbHRhID0gbmV3VGV4dC5sZW5ndGgoKSAtIHRleHQoKS5s
ZW5ndGgoKTsKICAgICB1bnNpZ25lZCBlbmQgPSBvZmZzZXQgKyBsZW5ndGg7CiAKLSAgICBtX2xp
bmVzRGlydHkgPSBzaW1wbGVMaW5lTGF5b3V0KCkgfHwgbV9saW5lQm94ZXMuZGlydHlSYW5nZSgq
dGhpcywgb2Zmc2V0LCBlbmQsIGRlbHRhKTsKKyAgICBtX2xpbmVzRGlydHkgPSBtX2xpbmVCb3hl
cy5kaXJ0eVJhbmdlKCp0aGlzLCBvZmZzZXQsIGVuZCwgZGVsdGEpOwogCiAgICAgc2V0VGV4dChu
ZXdUZXh0LCBmb3JjZSB8fCBtX2xpbmVzRGlydHkpOwogfQpAQCAtMTMwMCwxMyArMTI4OSw2IEBA
IHZvaWQgUmVuZGVyVGV4dDo6ZW5zdXJlTGluZUJveGVzKCkKICAgICBkb3duY2FzdDxSZW5kZXJC
bG9ja0Zsb3c+KCpwYXJlbnQoKSkuZW5zdXJlTGluZUJveGVzKCk7CiB9CiAKLWNvbnN0IFNpbXBs
ZUxpbmVMYXlvdXQ6OkxheW91dCogUmVuZGVyVGV4dDo6c2ltcGxlTGluZUxheW91dCgpIGNvbnN0
Ci17Ci0gICAgaWYgKCFpczxSZW5kZXJCbG9ja0Zsb3c+KCpwYXJlbnQoKSkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpwYXJl
bnQoKSkuc2ltcGxlTGluZUxheW91dCgpOwotfQotCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRU
SU5HX0NPTlRFWFQpCiBjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dCogUmVuZGVy
VGV4dDo6bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCkgY29uc3QKIHsKQEAgLTEz
MTgsOCArMTMwMCw2IEBAIGNvbnN0IExheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0KiBSZW5k
ZXJUZXh0OjpsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvCiAKIGJvb2wgUmVuZGVyVGV4
dDo6dXNlc0NvbXBsZXhMaW5lTGF5b3V0UGF0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKHNpbXBsZUxp
bmVMYXlvdXQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogI2lmIEVOQUJMRShMQVlPVVRfRk9S
TUFUVElOR19DT05URVhUKQogICAgIGlmIChsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlv
dXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTM4OCw3ICsxMzY4LDYgQEAgSW50UmVj
dCBSZW5kZXJUZXh0OjpsaW5lc0JvdW5kaW5nQm94KCkgY29uc3QKIAogTGF5b3V0UmVjdCBSZW5k
ZXJUZXh0OjpsaW5lc1Zpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3goKSBjb25zdAogewotICAgIEFT
U0VSVCghc2ltcGxlTGluZUxheW91dCgpKTsKICAgICByZXR1cm4gbV9saW5lQm94ZXMudmlzdWFs
T3ZlcmZsb3dCb3VuZGluZ0JveCgqdGhpcyk7CiB9CiAKQEAgLTE0MTEsNyArMTM5MCw2IEBAIExh
eW91dFJlY3QgUmVuZGVyVGV4dDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoY29uc3Qg
UmVuZGVyTGF5ZXJNb2RlbE9iamVjCiBMYXlvdXRSZWN0IFJlbmRlclRleHQ6OmNvbGxlY3RTZWxl
Y3Rpb25SZWN0c0ZvckxpbmVCb3hlcyhjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBh
aW50Q29udGFpbmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50LCBWZWN0b3I8TGF5b3V0UmVj
dD4qIHJlY3RzKQogewogICAgIEFTU0VSVCghbmVlZHNMYXlvdXQoKSk7Ci0gICAgQVNTRVJUKCFz
aW1wbGVMaW5lTGF5b3V0KCkpOwogCiAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gSGlnaGxp
Z2h0U3RhdGU6Ok5vbmUpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuaAppbmRleCAwMDc5MzI0OTYyZjQuLjI5MWQxOTQ3YTY3YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCkBAIC0yNCw3ICsyNCw2IEBACiAK
ICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dExpbmVCb3hl
cy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXQuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0QnJlYWtJdGVy
YXRvci5oPgpAQCAtMTY5LDcgKzE2OCw2IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdm9pZCBl
bnN1cmVMaW5lQm94ZXMoKTsKLSAgICBjb25zdCBTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQqIHNp
bXBsZUxpbmVMYXlvdXQoKSBjb25zdDsKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09O
VEVYVCkKICAgICBjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dCogbGF5b3V0Rm9y
bWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCkgY29uc3Q7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZTI4ZWFiM2FjNTAyLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA1MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNpbXBs
ZUxpbmVMYXlvdXQuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgot
I2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaCIK
LSNpbmNsdWRlICJIaXRUZXN0TG9jYXRpb24uaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5o
IgotI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJIeXBoZW5hdGlvbi5oIgot
I2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKLSNpbmNsdWRlICJMaW5lV2lkdGguaCIKLSNpbmNs
dWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGFpbnRJbmZvLmgiCi0jaW5jbHVkZSAiUmVuZGVy
QmxvY2tGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgotI2luY2x1ZGUg
IlJlbmRlckZyYWdtZW50ZWRGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCi0j
aW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUu
aCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wu
aCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNs
dWRlICJTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGlu
ZUxheW91dEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5o
IgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oIgotI2lu
Y2x1ZGUgIlRleHQuaCIKLSNpbmNsdWRlICJUZXh0UGFpbnRTdHlsZS5oIgotI2luY2x1ZGUgPHBh
bC9Mb2dnaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBTaW1wbGVMaW5l
TGF5b3V0IHsKLQotI2lmbmRlZiBOREVCVUcKLSNkZWZpbmUgU0VUX1JFQVNPTl9BTkRfUkVUVVJO
X0lGX05FRURFRChyZWFzb24sIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKSB7IFwKLSAgICAgICAg
cmVhc29ucyB8PSByZWFzb247IFwKLSAgICAgICAgaWYgKGluY2x1ZGVSZWFzb25zID09IEluY2x1
ZGVSZWFzb25zOjpGaXJzdCkgXAotICAgICAgICAgICAgcmV0dXJuIHJlYXNvbnM7IFwKLSAgICB9
Ci0jZWxzZQotI2RlZmluZSBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbiwg
cmVhc29ucywgaW5jbHVkZVJlYXNvbnMpIHsgXAotICAgICAgICBBU1NFUlRfVU5VU0VEKGluY2x1
ZGVSZWFzb25zLCBpbmNsdWRlUmVhc29ucyA9PSBJbmNsdWRlUmVhc29uczo6Rmlyc3QpOyBcCi0g
ICAgICAgIHJlYXNvbnMgfD0gcmVhc29uOyBcCi0gICAgICAgIHJldHVybiByZWFzb25zOyBcCi0g
ICAgfQotI2VuZGlmCi0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IEF2b2lk
YW5jZVJlYXNvbkZsYWdzIGNhblVzZUZvckNoYXJhY3RlcihDaGFyYWN0ZXJUeXBlLCBib29sIHRl
eHRJc0p1c3RpZmllZCwgSW5jbHVkZVJlYXNvbnMpOwotCi10ZW1wbGF0ZTw+IEF2b2lkYW5jZVJl
YXNvbkZsYWdzIGNhblVzZUZvckNoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIsIGJvb2wgdGV4dElz
SnVzdGlmaWVkLCBJbmNsdWRlUmVhc29ucyBpbmNsdWRlUmVhc29ucykKLXsKLSAgICBBdm9pZGFu
Y2VSZWFzb25GbGFncyByZWFzb25zID0geyB9OwotICAgIGlmICh0ZXh0SXNKdXN0aWZpZWQpIHsK
LSAgICAgICAgLy8gSW5jbHVkZSBjaGFyYWN0ZXJzIHVwIHRvIExhdGluIEV4dGVuZGVkLUIgYW5k
IHNvbWUgcHVuY3R1YXRpb24gcmFuZ2Ugd2hlbiB0ZXh0IGlzIGp1c3RpZmllZC4KLSAgICAgICAg
Ym9vbCBpc0xhdGluSW5jbHVkaW5nRXh0ZW5kZWRCID0gY2hhcmFjdGVyIDw9IDB4MDFGRjsKLSAg
ICAgICAgYm9vbCBpc1B1bmN0dWF0aW9uUmFuZ2UgPSBjaGFyYWN0ZXIgPj0gMHgyMDEwICYmIGNo
YXJhY3RlciA8PSAweDIwMjc7Ci0gICAgICAgIGlmICghKGlzTGF0aW5JbmNsdWRpbmdFeHRlbmRl
ZEIgfHwgaXNQdW5jdHVhdGlvblJhbmdlKSkKLSAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JF
VFVSTl9JRl9ORUVERUQoRmxvd0hhc0p1c3RpZmllZE5vbkxhdGluVGV4dCwgcmVhc29ucywgaW5j
bHVkZVJlYXNvbnMpOwotICAgIH0KLQotICAgIGlmIChVMTZfSVNfU1VSUk9HQVRFKGNoYXJhY3Rl
cikpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRIYXNT
dXJyb2dhdGVQYWlyLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgCi0gICAgVUNoYXJE
aXJlY3Rpb24gZGlyZWN0aW9uID0gdV9jaGFyRGlyZWN0aW9uKGNoYXJhY3Rlcik7Ci0gICAgaWYg
KGRpcmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xFRlQgfHwgZGlyZWN0aW9uID09IFVfUklHSFRfVE9f
TEVGVF9BUkFCSUMKLSAgICAgICAgfHwgZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVF9FTUJF
RERJTkcgfHwgZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVF9PVkVSUklERQotICAgICAgICB8
fCBkaXJlY3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hUX0VNQkVERElORyB8fCBkaXJlY3Rpb24gPT0g
VV9MRUZUX1RPX1JJR0hUX09WRVJSSURFCi0gICAgICAgIHx8IGRpcmVjdGlvbiA9PSBVX1BPUF9E
SVJFQ1RJT05BTF9GT1JNQVQgfHwgZGlyZWN0aW9uID09IFVfQk9VTkRBUllfTkVVVFJBTCkKLSAg
ICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93VGV4dEhhc0RpcmVjdGlv
bkNoYXJhY3RlciwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotCi0gICAgcmV0dXJuIHJlYXNv
bnM7Ci19Ci0KLXRlbXBsYXRlPD4gQXZvaWRhbmNlUmVhc29uRmxhZ3MgY2FuVXNlRm9yQ2hhcmFj
dGVyKExDaGFyLCBib29sLCBJbmNsdWRlUmVhc29ucykKLXsKLSAgICByZXR1cm4geyB9OwotfQot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBBdm9pZGFuY2VSZWFz
b25GbGFncyBjYW5Vc2VGb3JUZXh0KGNvbnN0IENoYXJhY3RlclR5cGUqIHRleHQsIHVuc2lnbmVk
IGxlbmd0aCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnRDYXNjYWRlLCBPcHRpb25hbDxmbG9hdD4g
bGluZUhlaWdodENvbnN0cmFpbnQsCi0gICAgYm9vbCB0ZXh0SXNKdXN0aWZpZWQsIEluY2x1ZGVS
ZWFzb25zIGluY2x1ZGVSZWFzb25zKQotewotICAgIEF2b2lkYW5jZVJlYXNvbkZsYWdzIHJlYXNv
bnMgPSB7IH07Ci0gICAgYXV0byYgcHJpbWFyeUZvbnQgPSBmb250Q2FzY2FkZS5wcmltYXJ5Rm9u
dCgpOwotICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gcHJpbWFyeUZvbnQuZm9udE1ldHJpY3MoKTsK
LSAgICBhdXRvIGF2YWlsYWJsZVNwYWNlRm9yR2x5cGhBc2NlbnQgPSBmb250TWV0cmljcy5hc2Nl
bnQoKTsKLSAgICBhdXRvIGF2YWlsYWJsZVNwYWNlRm9yR2x5cGhEZXNjZW50ID0gZm9udE1ldHJp
Y3MuZGVzY2VudCgpOwotICAgIGlmIChsaW5lSGVpZ2h0Q29uc3RyYWludCkgewotICAgICAgICBh
dXRvIGxpbmVIZWlnaHRQYWRkaW5nID0gKmxpbmVIZWlnaHRDb25zdHJhaW50IC0gZm9udE1ldHJp
Y3MuaGVpZ2h0KCk7Ci0gICAgICAgIGF2YWlsYWJsZVNwYWNlRm9yR2x5cGhBc2NlbnQgKz0gbGlu
ZUhlaWdodFBhZGRpbmcgLyAyOwotICAgICAgICBhdmFpbGFibGVTcGFjZUZvckdseXBoRGVzY2Vu
dCArPSBsaW5lSGVpZ2h0UGFkZGluZyAvIDI7Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8gY2hhcmFjdGVyID0gdGV4dFtp
XTsKLSAgICAgICAgaWYgKEZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gc29mdEh5cGhl
bikKLSAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRI
YXNTb2Z0SHlwaGVuLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0KLSAgICAgICAgYXV0byBj
aGFyYWN0ZXJSZWFzb25zID0gY2FuVXNlRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgdGV4dElzSnVz
dGlmaWVkLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXJSZWFzb25zICE9
IE5vUmVhc29uKQotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChj
aGFyYWN0ZXJSZWFzb25zLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0KLSAgICAgICAgYXV0
byBnbHlwaERhdGEgPSBmb250Q2FzY2FkZS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVy
LCBmYWxzZSk7Ci0gICAgICAgIGlmICghZ2x5cGhEYXRhLmlzVmFsaWQoKSB8fCBnbHlwaERhdGEu
Zm9udCAhPSAmcHJpbWFyeUZvbnQpCi0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5f
SUZfTkVFREVEKEZsb3dQcmltYXJ5Rm9udElzSW5zdWZmaWNpZW50LCByZWFzb25zLCBpbmNsdWRl
UmVhc29ucyk7Ci0KLSAgICAgICAgaWYgKGxpbmVIZWlnaHRDb25zdHJhaW50KSB7Ci0gICAgICAg
ICAgICBhdXRvIGJvdW5kcyA9IHByaW1hcnlGb250LmJvdW5kc0ZvckdseXBoKGdseXBoRGF0YS5n
bHlwaCk7Ci0gICAgICAgICAgICBpZiAoY2VpbGYoLWJvdW5kcy55KCkpID4gYXZhaWxhYmxlU3Bh
Y2VGb3JHbHlwaEFzY2VudCB8fCBjZWlsZihib3VuZHMubWF4WSgpKSA+IGF2YWlsYWJsZVNwYWNl
Rm9yR2x5cGhEZXNjZW50KQotICAgICAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9J
Rl9ORUVERUQoRmxvd0ZvbnRIYXNPdmVyZmxvd0dseXBoLCByZWFzb25zLCBpbmNsdWRlUmVhc29u
cyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlYXNvbnM7Ci19Ci0KLXN0YXRpYyBB
dm9pZGFuY2VSZWFzb25GbGFncyBjYW5Vc2VGb3JUZXh0KFN0cmluZ1ZpZXcgdGV4dCwgY29uc3Qg
Rm9udENhc2NhZGUmIGZvbnRDYXNjYWRlLCBPcHRpb25hbDxmbG9hdD4gbGluZUhlaWdodENvbnN0
cmFpbnQsIGJvb2wgdGV4dElzSnVzdGlmaWVkLCBJbmNsdWRlUmVhc29ucyBpbmNsdWRlUmVhc29u
cykKLXsKLSAgICBpZiAodGV4dC5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGNhblVzZUZvclRl
eHQodGV4dC5jaGFyYWN0ZXJzOCgpLCB0ZXh0Lmxlbmd0aCgpLCBmb250Q2FzY2FkZSwgbGluZUhl
aWdodENvbnN0cmFpbnQsIHRleHRJc0p1c3RpZmllZCwgaW5jbHVkZVJlYXNvbnMpOwotICAgIHJl
dHVybiBjYW5Vc2VGb3JUZXh0KHRleHQuY2hhcmFjdGVyczE2KCksIHRleHQubGVuZ3RoKCksIGZv
bnRDYXNjYWRlLCBsaW5lSGVpZ2h0Q29uc3RyYWludCwgdGV4dElzSnVzdGlmaWVkLCBpbmNsdWRl
UmVhc29ucyk7Ci19Ci0KLXN0YXRpYyBBdm9pZGFuY2VSZWFzb25GbGFncyBjYW5Vc2VGb3JGb250
QW5kVGV4dChjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIEluY2x1ZGVSZWFzb25zIGluY2x1
ZGVSZWFzb25zKQotewotICAgIEF2b2lkYW5jZVJlYXNvbkZsYWdzIHJlYXNvbnMgPSB7IH07Ci0g
ICAgLy8gV2UgYXNzdW1lIHRoYXQgYWxsIGxpbmVzIGhhdmUgbWV0cmljcyBiYXNlZCBwdXJlbHkg
b24gdGhlIHByaW1hcnkgZm9udC4KLSAgICBjb25zdCBhdXRvJiBzdHlsZSA9IGZsb3cuc3R5bGUo
KTsKLSAgICBhdXRvJiBmb250Q2FzY2FkZSA9IHN0eWxlLmZvbnRDYXNjYWRlKCk7Ci0gICAgaWYg
KGZvbnRDYXNjYWRlLnByaW1hcnlGb250KCkuaXNJbnRlcnN0aXRpYWwoKSkKLSAgICAgICAgU0VU
X1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SXNNaXNzaW5nUHJpbWFyeUZvbnQsIHJl
YXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBPcHRpb25hbDxmbG9hdD4gbGluZUhlaWdodENv
bnN0cmFpbnQ7Ci0gICAgaWYgKHN0eWxlLmxpbmVCb3hDb250YWluKCkuY29udGFpbnMoTGluZUJv
eENvbnRhaW46OkdseXBocykpCi0gICAgICAgIGxpbmVIZWlnaHRDb25zdHJhaW50ID0gbGluZUhl
aWdodEZyb21GbG93KGZsb3cpLnRvRmxvYXQoKTsKLSAgICBib29sIGZsb3dJc0p1c3RpZmllZCA9
IHN0eWxlLnRleHRBbGlnbigpID09IFRleHRBbGlnbk1vZGU6Okp1c3RpZnk7Ci0gICAgZm9yIChj
b25zdCBhdXRvJiB0ZXh0UmVuZGVyZXIgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJUZXh0PihmbG93
KSkgewotICAgICAgICAvLyBGSVhNRTogRG8gbm90IHJldHVybiB1bnRpbCBhZnRlciBjaGVja2lu
ZyBhbGwgY2hpbGRyZW4uCi0gICAgICAgIGlmICh0ZXh0UmVuZGVyZXIudGV4dCgpLmlzRW1wdHko
KSkKLSAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRJ
c0VtcHR5LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgICAgIGlmICh0ZXh0UmVuZGVy
ZXIuaXNDb21iaW5lVGV4dCgpKQotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lG
X05FRURFRChGbG93VGV4dElzQ29tYmluZVRleHQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsK
LSAgICAgICAgaWYgKHRleHRSZW5kZXJlci5pc0NvdW50ZXIoKSkKLSAgICAgICAgICAgIFNFVF9S
RUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRJc1JlbmRlckNvdW50ZXIsIHJlYXNv
bnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgaWYgKHRleHRSZW5kZXJlci5pc1F1b3RlKCkp
Ci0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dUZXh0SXNS
ZW5kZXJRdW90ZSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgICAgICBpZiAodGV4dFJl
bmRlcmVyLmlzVGV4dEZyYWdtZW50KCkpCi0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRV
Uk5fSUZfTkVFREVEKEZsb3dUZXh0SXNUZXh0RnJhZ21lbnQsIHJlYXNvbnMsIGluY2x1ZGVSZWFz
b25zKTsKLSAgICAgICAgaWYgKHRleHRSZW5kZXJlci5pc1NWR0lubGluZVRleHQoKSkKLSAgICAg
ICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRJc1NWR0lubGlu
ZVRleHQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgaWYgKCF0ZXh0UmVuZGVy
ZXIuY2FuVXNlU2ltcGxlRm9udENvZGVQYXRoKCkpIHsKLSAgICAgICAgICAgIC8vIE5vIG5lZWQg
dG8gY2hlY2sgdGhlIGNvZGUgcGF0aCBhdCB0aGlzIHBvaW50LiBXZSBhbHJlYWR5IGtub3cgaXQg
Y2FuJ3QgYmUgc2ltcGxlLgotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05F
RURFRChGbG93SGFzQ29tcGxleEZvbnRDb2RlUGF0aCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgVGV4dFJ1biBydW4oU3RyaW5nKHRleHRS
ZW5kZXJlci50ZXh0KCkpKTsKLSAgICAgICAgICAgIHJ1bi5zZXRDaGFyYWN0ZXJTY2FuRm9yQ29k
ZVBhdGgoZmFsc2UpOwotICAgICAgICAgICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkuY29kZVBh
dGgocnVuKSAhPSBGb250Q2FzY2FkZTo6U2ltcGxlKQotICAgICAgICAgICAgICAgIFNFVF9SRUFT
T05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc0NvbXBsZXhGb250Q29kZVBhdGgsIHJlYXNv
bnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gdGV4dFJlYXNv
bnMgPSBjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJlci5zdHJpbmdWaWV3KCksIGZvbnRDYXNjYWRl
LCBsaW5lSGVpZ2h0Q29uc3RyYWludCwgZmxvd0lzSnVzdGlmaWVkLCBpbmNsdWRlUmVhc29ucyk7
Ci0gICAgICAgIGlmICh0ZXh0UmVhc29ucyAhPSBOb1JlYXNvbikKLSAgICAgICAgICAgIFNFVF9S
RUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQodGV4dFJlYXNvbnMsIHJlYXNvbnMsIGluY2x1ZGVS
ZWFzb25zKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlYXNvbnM7Ci19Ci0KLXN0YXRpYyBBdm9pZGFu
Y2VSZWFzb25GbGFncyBjYW5Vc2VGb3JTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIElu
Y2x1ZGVSZWFzb25zIGluY2x1ZGVSZWFzb25zKQotewotICAgIEF2b2lkYW5jZVJlYXNvbkZsYWdz
IHJlYXNvbnMgPSB7IH07Ci0gICAgaWYgKHN0eWxlLnRleHRPdmVyZmxvdygpID09IFRleHRPdmVy
Zmxvdzo6RWxsaXBzaXMpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQo
Rmxvd0hhc1RleHRPdmVyZmxvdywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmIChz
dHlsZS50ZXh0VW5kZXJsaW5lUG9zaXRpb24oKSAhPSBUZXh0VW5kZXJsaW5lUG9zaXRpb246OkF1
dG8gfHwgIXN0eWxlLnRleHRVbmRlcmxpbmVPZmZzZXQoKS5pc0F1dG8oKSB8fCAhc3R5bGUudGV4
dERlY29yYXRpb25UaGlja25lc3MoKS5pc0F1dG8oKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRf
UkVUVVJOX0lGX05FRURFRChGbG93SGFzVW5zdXBwb3J0ZWRVbmRlcmxpbmVEZWNvcmF0aW9uLCBy
ZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgLy8gTm9uLXZpc2libGUgb3ZlcmZsb3cgc2hv
dWxkIGJlIHByZXR0eSBlYXN5IHRvIHN1cHBvcnQuCi0gICAgaWYgKHN0eWxlLm92ZXJmbG93WCgp
ICE9IE92ZXJmbG93OjpWaXNpYmxlIHx8IHN0eWxlLm92ZXJmbG93WSgpICE9IE92ZXJmbG93OjpW
aXNpYmxlKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNP
dmVyZmxvd05vdFZpc2libGUsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoIXN0
eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVU
VVJOX0lGX05FRURFRChGbG93SXNOb3RMVFIsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAg
ICBpZiAoIShzdHlsZS5saW5lQm94Q29udGFpbigpLmNvbnRhaW5zKExpbmVCb3hDb250YWluOjpC
bG9jaykpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNM
aW5lQm94Q29udGFpblByb3BlcnR5LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYg
KHN0eWxlLndyaXRpbmdNb2RlKCkgIT0gV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tKQotICAgICAg
ICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJc05vdFRvcFRvQm90dG9tLCBy
ZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLmxpbmVCcmVhaygpICE9IExp
bmVCcmVhazo6QXV0bykKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChG
bG93SGFzTGluZUJyZWFrLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0eWxl
LnVuaWNvZGVCaWRpKCkgIT0gVUJOb3JtYWwpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVS
Tl9JRl9ORUVERUQoRmxvd0hhc05vbk5vcm1hbFVuaWNvZGVCaURpLCByZWFzb25zLCBpbmNsdWRl
UmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLnJ0bE9yZGVyaW5nKCkgIT0gT3JkZXI6OkxvZ2ljYWwp
Ci0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1JUTE9yZGVy
aW5nLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLmxpbmVBbGlnbigp
ICE9IExpbmVBbGlnbjo6Tm9uZSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05F
RURFRChGbG93SGFzTGluZUFsaWduRWRnZXMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAg
ICBpZiAoc3R5bGUubGluZVNuYXAoKSAhPSBMaW5lU25hcDo6Tm9uZSkKLSAgICAgICAgU0VUX1JF
QVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzTGluZVNuYXAsIHJlYXNvbnMsIGluY2x1
ZGVSZWFzb25zKTsKLSAgICBpZiAoc3R5bGUudGV4dEVtcGhhc2lzRmlsbCgpICE9IFRleHRFbXBo
YXNpc0ZpbGw6OkZpbGxlZCB8fCBzdHlsZS50ZXh0RW1waGFzaXNNYXJrKCkgIT0gVGV4dEVtcGhh
c2lzTWFyazo6Tm9uZSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChG
bG93SGFzVGV4dEVtcGhhc2lzRmlsbE9yTWFyaywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwot
ICAgIGlmIChzdHlsZS50ZXh0U2hhZG93KCkpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVS
Tl9JRl9ORUVERUQoRmxvd0hhc1RleHRTaGFkb3csIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsK
LSAgICBpZiAoc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OkZpcnN0TGluZSkpCi0gICAg
ICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1BzZXVkb0ZpcnN0TGlu
ZSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmIChzdHlsZS5oYXNQc2V1ZG9TdHls
ZShQc2V1ZG9JZDo6Rmlyc3RMZXR0ZXIpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5f
SUZfTkVFREVEKEZsb3dIYXNQc2V1ZG9GaXJzdExldHRlciwgcmVhc29ucywgaW5jbHVkZVJlYXNv
bnMpOwotICAgIGlmIChzdHlsZS5oYXNUZXh0Q29tYmluZSgpKQotICAgICAgICBTRVRfUkVBU09O
X0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNUZXh0Q29tYmluZSwgcmVhc29ucywgaW5jbHVk
ZVJlYXNvbnMpOwotICAgIGlmIChzdHlsZS5iYWNrZ3JvdW5kQ2xpcCgpID09IEZpbGxCb3g6OlRl
eHQpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1RleHRG
aWxsQm94LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLmJvcmRlckZp
dCgpID09IEJvcmRlckZpdDo6TGluZXMpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9J
Rl9ORUVERUQoRmxvd0hhc0JvcmRlckZpdExpbmVzLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7
Ci0gICAgaWYgKHN0eWxlLmxpbmVCcmVhaygpICE9IExpbmVCcmVhazo6QXV0bykKLSAgICAgICAg
U0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzTm9uQXV0b0xpbmVCcmVhaywg
cmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmIChzdHlsZS5uYnNwTW9kZSgpICE9IE5C
U1BNb2RlOjpOb3JtYWwpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQo
Rmxvd0hhc1dlYktpdE5CU1BNb2RlLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgLy8g
U3BlY2lhbCBoYW5kbGluZyBvZiB0ZXh0LXNlY3VyaXR5OmRpc2MgaXMgbm90IHlldCBpbXBsZW1l
bnRlZCBpbiB0aGUgc2ltcGxlIGxpbmUgbGF5b3V0IGNvZGUgcGF0aC4KLSAgICAvLyBTZWUgUmVu
ZGVyQmxvY2s6OnVwZGF0ZVNlY3VyaXR5RGlzY0NoYXJhY3RlcnMuCi0gICAgaWYgKHN0eWxlLnRl
eHRTZWN1cml0eSgpICE9IFRleHRTZWN1cml0eTo6Tm9uZSkKLSAgICAgICAgU0VUX1JFQVNPTl9B
TkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzVGV4dFNlY3VyaXR5LCByZWFzb25zLCBpbmNsdWRl
UmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLmh5cGhlbnMoKSA9PSBIeXBoZW5zOjpBdXRvKSB7Ci0g
ICAgICAgIGF1dG8gdGV4dFJlYXNvbnMgPSBjYW5Vc2VGb3JUZXh0KHN0eWxlLmh5cGhlblN0cmlu
ZygpLCBzdHlsZS5mb250Q2FzY2FkZSgpLCBXVEY6Om51bGxvcHQsIGZhbHNlLCBpbmNsdWRlUmVh
c29ucyk7Ci0gICAgICAgIGlmICh0ZXh0UmVhc29ucyAhPSBOb1JlYXNvbikKLSAgICAgICAgICAg
IFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQodGV4dFJlYXNvbnMsIHJlYXNvbnMsIGlu
Y2x1ZGVSZWFzb25zKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlYXNvbnM7Ci19Ci0KLUF2b2lkYW5j
ZVJlYXNvbkZsYWdzIGNhblVzZUZvcldpdGhSZWFzb24oY29uc3QgUmVuZGVyQmxvY2tGbG93JiBm
bG93LCBJbmNsdWRlUmVhc29ucyBpbmNsdWRlUmVhc29ucykKLXsKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKG9u
Y2VGbGFnLCBbXSB7Ci0gICAgICAgIFBBTDo6cmVnaXN0ZXJOb3RpZnlDYWxsYmFjaygiY29tLmFw
cGxlLldlYktpdC5zaG93U2ltcGxlTGluZUxheW91dENvdmVyYWdlIiwgV1RGOjpGdW5jdGlvbjx2
b2lkKCk+IHsgcHJpbnRTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UgfSk7Ci0gICAgICAgIFBBTDo6
cmVnaXN0ZXJOb3RpZnlDYWxsYmFjaygiY29tLmFwcGxlLldlYktpdC5zaG93U2ltcGxlTGluZUxh
eW91dFJlYXNvbnMiLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4geyBwcmludFNpbXBsZUxpbmVMYXlv
dXRCbG9ja0xpc3QgfSk7Ci0gICAgICAgIFBBTDo6cmVnaXN0ZXJOb3RpZnlDYWxsYmFjaygiY29t
LmFwcGxlLldlYktpdC50b2dnbGVTaW1wbGVMaW5lTGF5b3V0IiwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHsgdG9nZ2xlU2ltcGxlTGluZUxheW91dCB9KTsKLSAgICB9KTsKLSNlbmRpZgotICAgIEF2
b2lkYW5jZVJlYXNvbkZsYWdzIHJlYXNvbnMgPSB7IH07Ci0gICAgaWYgKCFmbG93LnNldHRpbmdz
KCkuc2ltcGxlTGluZUxheW91dEVuYWJsZWQoKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVU
VVJOX0lGX05FRURFRChGZWF0dXJlSXNEaXNhYmxlZCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMp
OwotICAgIGlmICghZmxvdy5wYXJlbnQoKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJO
X0lGX05FRURFRChGbG93SGFzTm9QYXJlbnQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAg
ICBpZiAoIWZsb3cuZmlyc3RDaGlsZCgpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5f
SUZfTkVFREVEKEZsb3dIYXNOb0NoaWxkLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAg
aWYgKGZsb3cuZnJhZ21lbnRlZEZsb3dTdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6Tm90SW5zaWRl
RnJhZ21lbnRlZEZsb3cpIHsKLSAgICAgICAgYXV0byogZnJhZ21lbnRlZEZsb3cgPSBmbG93LmVu
Y2xvc2luZ0ZyYWdtZW50ZWRGbG93KCk7Ci0gICAgICAgIGlmICghaXM8UmVuZGVyTXVsdGlDb2x1
bW5GbG93PihmcmFnbWVudGVkRmxvdykpCi0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRV
Uk5fSUZfTkVFREVEKEZsb3dJc0luc2lkZUFOb25NdWx0aUNvbHVtblRocmVhZCwgcmVhc29ucywg
aW5jbHVkZVJlYXNvbnMpOwotICAgICAgICBhdXRvJiBjb2x1bW5UaHJlYWQgPSBkb3duY2FzdDxS
ZW5kZXJNdWx0aUNvbHVtbkZsb3c+KCpmcmFnbWVudGVkRmxvdyk7Ci0gICAgICAgIGlmIChjb2x1
bW5UaHJlYWQucGFyZW50KCkgIT0gJmZsb3cudmlldygpKQotICAgICAgICAgICAgU0VUX1JFQVNP
Tl9BTkRfUkVUVVJOX0lGX05FRURFRChNdWx0aUNvbHVtbkZsb3dJc05vdFRvcExldmVsLCByZWFz
b25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgICAgIGlmIChjb2x1bW5UaHJlYWQuaGFzQ29sdW1u
U3Bhbm5lcigpKQotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChN
dWx0aUNvbHVtbkZsb3dIYXNDb2x1bW5TcGFubmVyLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7
Ci0gICAgICAgIGF1dG8mIHN0eWxlID0gZmxvdy5zdHlsZSgpOwotICAgICAgICBpZiAoc3R5bGUu
dmVydGljYWxBbGlnbigpICE9IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lKQotICAgICAgICAgICAg
U0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChNdWx0aUNvbHVtbkZsb3dWZXJ0aWNhbEFs
aWduLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgICAgIGlmIChzdHlsZS5pc0Zsb2F0
aW5nKCkpCi0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKE11bHRp
Q29sdW1uRmxvd0lzRmxvYXRpbmcsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICB9Ci0g
ICAgaWYgKCFmbG93LmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIFNFVF9SRUFT
T05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc0hvcml6b25hbFdyaXRpbmdNb2RlLCByZWFz
b25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKGZsb3cuaGFzT3V0bGluZSgpKQotICAgICAg
ICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNPdXRsaW5lLCByZWFzb25z
LCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKGZsb3cuaXNSdWJ5VGV4dCgpIHx8IGZsb3cuaXNS
dWJ5QmFzZSgpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJ
c1J1YnksIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoIWZsb3cuc3R5bGUoKS5o
YW5naW5nUHVuY3R1YXRpb24oKS5pc0VtcHR5KCkpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JF
VFVSTl9JRl9ORUVERUQoRmxvd0hhc0hhbmdpbmdQdW5jdHVhdGlvbiwgcmVhc29ucywgaW5jbHVk
ZVJlYXNvbnMpOwotICAgIAotICAgIC8vIFByaW50aW5nIGRvZXMgcGFnaW5hdGlvbiB3aXRob3V0
IGEgZmxvdyB0aHJlYWQuCi0gICAgaWYgKGZsb3cuZG9jdW1lbnQoKS5wYWdpbmF0ZWQoKSkKLSAg
ICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SXNQYWdpbmF0ZWQsIHJl
YXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoZmxvdy5maXJzdExpbmVCbG9jaygpKQot
ICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNQc2V1ZG9GaXJz
dExpbmUsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoZmxvdy5pc0Fub255bW91
c0Jsb2NrKCkgJiYgZmxvdy5wYXJlbnQoKS0+c3R5bGUoKS50ZXh0T3ZlcmZsb3coKSA9PSBUZXh0
T3ZlcmZsb3c6OkVsbGlwc2lzKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVF
REVEKEZsb3dIYXNUZXh0T3ZlcmZsb3csIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBp
ZiAoZmxvdy5wYXJlbnQoKS0+aXNEZXByZWNhdGVkRmxleGlibGVCb3goKSkKLSAgICAgICAgU0VU
X1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SXNEZXByaWNhdGVkRmxleEJveCwgcmVh
c29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIC8vIEZJWE1FOiBQbGFjZWhvbGRlcnMgZG8gc29t
ZXRoaW5nIHN0cmFuZ2UuCi0gICAgaWYgKGlzPFJlbmRlclRleHRDb250cm9sPigqZmxvdy5wYXJl
bnQoKSkgJiYgZG93bmNhc3Q8UmVuZGVyVGV4dENvbnRyb2w+KCpmbG93LnBhcmVudCgpKS50ZXh0
Rm9ybUNvbnRyb2xFbGVtZW50KCkucGxhY2Vob2xkZXJFbGVtZW50KCkpCi0gICAgICAgIFNFVF9S
RUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1BhcmVudElzUGxhY2Vob2xkZXJFbGVtZW50
LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudGF0aW9u
IG9mIHdyYXA9aGFyZCBsb29rcyBpbnRvIGxpbmVib3hlcy4KLSAgICBpZiAoZmxvdy5wYXJlbnQo
KS0+aXNUZXh0QXJlYSgpICYmIGZsb3cucGFyZW50KCktPmVsZW1lbnQoKS0+aGFzQXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OndyYXBBdHRyKSkKLSAgICAgICAgU0VU
X1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93UGFyZW50SXNUZXh0QXJlYVdpdGhXcmFw
cGluZywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIC8vIFRoaXMgY3VycmVudGx5IGNv
dmVycyA8YmxvY2tmbG93PiN0ZXh0PC9ibG9ja2Zsb3c+LCA8YmxvY2tmbG93PiN0ZXh0PGJyPjwv
YmxvY2tmbG93PiBhbmQgbXV0aXBsZSAoc2libGluZykgUmVuZGVyVGV4dCBjYXNlcy4KLSAgICAv
LyBUaGUgPGJsb2NrZmxvdz48aW5saW5lPiN0ZXh0PC9pbmxpbmU+PC9ibG9ja2Zsb3c+IGNhc2Ug
aXMgYWxzbyBwb3B1bGFyIGFuZCBzaG91bGQgYmUgcmVsYXRpdmVseSBlYXN5IHRvIGNvdmVyLgot
ICAgIGZvciAoY29uc3QgYXV0byogY2hpbGQgPSBmbG93LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7KSB7
Ci0gICAgICAgIGlmIChjaGlsZC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6Okhp
Z2hsaWdodFN0YXRlOjpOb25lKQotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lG
X05FRURFRChGbG93Q2hpbGRJc1NlbGVjdGVkLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0g
ICAgICAgIGlmIChpczxSZW5kZXJUZXh0PigqY2hpbGQpKSB7Ci0gICAgICAgICAgICBjb25zdCBh
dXRvJiByZW5kZXJUZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmNoaWxkKTsKLSAgICAgICAg
ICAgIGlmIChyZW5kZXJUZXh0LnRleHROb2RlKCkgJiYgIXJlbmRlclRleHQuZG9jdW1lbnQoKS5t
YXJrZXJzKCkubWFya2Vyc0ZvcigqcmVuZGVyVGV4dC50ZXh0Tm9kZSgpKS5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SW5jbHVk
ZXNEb2N1bWVudE1hcmtlcnMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgICAg
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoaXM8UmVuZGVyTGluZUJyZWFrPihjaGlsZCkgJiYgIWRvd25j
YXN0PFJlbmRlckxpbmVCcmVhaz4oKmNoaWxkKS5pc1dCUigpICYmIGNoaWxkLT5zdHlsZSgpLmNs
ZWFyKCkgPT0gQ2xlYXI6Ok5vbmUpIHsKLSAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBTRVRf
UkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNOb25TdXBwb3J0ZWRDaGlsZCwgcmVh
c29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgYXV0byBz
dHlsZVJlYXNvbnMgPSBjYW5Vc2VGb3JTdHlsZShmbG93LnN0eWxlKCksIGluY2x1ZGVSZWFzb25z
KTsKLSAgICBpZiAoc3R5bGVSZWFzb25zICE9IE5vUmVhc29uKQotICAgICAgICBTRVRfUkVBU09O
X0FORF9SRVRVUk5fSUZfTkVFREVEKHN0eWxlUmVhc29ucywgcmVhc29ucywgaW5jbHVkZVJlYXNv
bnMpOwotICAgIC8vIFdlIGNhbid0IHVzZSB0aGUgY29kZSBwYXRoIGlmIGFueSBsaW5lcyB3b3Vs
ZCBuZWVkIHRvIGJlIHNoaWZ0ZWQgYmVsb3cgZmxvYXRzLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZG9u
J3Qga2VlcCBwZXItbGluZSB5IGNvb3JkaW5hdGVzLgotICAgIGlmIChmbG93LmNvbnRhaW5zRmxv
YXRzKCkpIHsKLSAgICAgICAgZmxvYXQgbWluaW11bVdpZHRoTmVlZGVkID0gc3RkOjpudW1lcmlj
X2xpbWl0czxmbG9hdD46Om1heCgpOwotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRleHRSZW5k
ZXJlciA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlclRleHQ+KGZsb3cpKSB7Ci0gICAgICAgICAgICBt
aW5pbXVtV2lkdGhOZWVkZWQgPSBzdGQ6Om1pbihtaW5pbXVtV2lkdGhOZWVkZWQsIHRleHRSZW5k
ZXJlci5taW5Mb2dpY2FsV2lkdGgoKSk7Ci0KLSAgICAgICAgICAgIGZvciAoYXV0byYgZmxvYXRp
bmdPYmplY3QgOiAqZmxvdy5mbG9hdGluZ09iamVjdFNldCgpKSB7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKGZsb2F0aW5nT2JqZWN0KTsKLSAgICAgICAgICAgICAgICAvLyBpZiBhIGZsb2F0IGhh
cyBhIHNoYXBlLCB3ZSBjYW5ub3QgdGVsbCBpZiBjb250ZW50IHdpbGwgbmVlZCB0byBiZSBzaGlm
dGVkIHVudGlsIGFmdGVyIHdlIGxheSBpdCBvdXQsCi0gICAgICAgICAgICAgICAgLy8gc2luY2Ug
dGhlIGFtb3VudCBvZiBzcGFjZSBpcyBub3QgdW5pZm9ybSBmb3IgdGhlIGhlaWdodCBvZiB0aGUg
ZmxvYXQuCi0gICAgICAgICAgICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLnNo
YXBlT3V0c2lkZUluZm8oKSkKLSAgICAgICAgICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVU
VVJOX0lGX05FRURFRChGbG93SGFzVW5zdXBwb3J0ZWRGbG9hdCwgcmVhc29ucywgaW5jbHVkZVJl
YXNvbnMpOwotICAgICAgICAgICAgICAgIGZsb2F0IGF2YWlsYWJsZVdpZHRoID0gZmxvdy5hdmFp
bGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lKGZsb2F0aW5nT2JqZWN0LT55KCksIERvTm90SW5kZW50
VGV4dCk7Ci0gICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZVdpZHRoIDwgbWluaW11bVdpZHRo
TmVlZGVkKQotICAgICAgICAgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVF
REVEKEZsb3dIYXNVbnN1cHBvcnRlZEZsb2F0LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYXV0byBmb250QW5kVGV4dFJlYXNv
bnMgPSBjYW5Vc2VGb3JGb250QW5kVGV4dChmbG93LCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYg
KGZvbnRBbmRUZXh0UmVhc29ucyAhPSBOb1JlYXNvbikKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRf
UkVUVVJOX0lGX05FRURFRChmb250QW5kVGV4dFJlYXNvbnMsIHJlYXNvbnMsIGluY2x1ZGVSZWFz
b25zKTsKLSAgICByZXR1cm4gcmVhc29uczsKLX0KLQotYm9vbCBjYW5Vc2VGb3IoY29uc3QgUmVu
ZGVyQmxvY2tGbG93JiBmbG93KQotewotICAgIHJldHVybiBjYW5Vc2VGb3JXaXRoUmVhc29uKGZs
b3csIEluY2x1ZGVSZWFzb25zOjpGaXJzdCkgPT0gTm9SZWFzb247Ci19Ci0KLWJvb2wgY2FuVXNl
Rm9yQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrQ29udGFpbmVy
LCBTdHlsZURpZmZlcmVuY2UgZGlmZikKLXsKLSAgICBzd2l0Y2ggKGRpZmYpIHsKLSAgICBjYXNl
IFN0eWxlRGlmZmVyZW5jZTo6RXF1YWw6Ci0gICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6OlJlY29t
cG9zaXRlTGF5ZXI6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgU3R5bGVEaWZmZXJl
bmNlOjpSZXBhaW50OgotICAgIGNhc2UgU3R5bGVEaWZmZXJlbmNlOjpSZXBhaW50SWZUZXh0T3JC
b3JkZXJPck91dGxpbmU6Ci0gICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6OlJlcGFpbnRMYXllcjoK
LSAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGRvIGEgbW9yZSBmb2N1c2VkIHN0eWxlIGNoZWNr
IGJ5IG1hdGNoaW5nIFJlbmRlcmVyU3R5bGU6OmNoYW5nZVJlcXVpcmVzUmVwYWludCZjby4KLSAg
ICAgICAgcmV0dXJuIGNhblVzZUZvclN0eWxlKGJsb2NrQ29udGFpbmVyLnN0eWxlKCksIEluY2x1
ZGVSZWFzb25zOjpGaXJzdCkgPT0gTm9SZWFzb247Ci0gICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6
OkxheW91dFBvc2l0aW9uZWRNb3ZlbWVudE9ubHk6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGNhc2UgU3R5bGVEaWZmZXJlbmNlOjpTaW1wbGlmaWVkTGF5b3V0OgotICAgIGNhc2UgU3R5bGVE
aWZmZXJlbmNlOjpTaW1wbGlmaWVkTGF5b3V0QW5kUG9zaXRpb25lZE1vdmVtZW50OgotICAgICAg
ICByZXR1cm4gY2FuVXNlRm9yU3R5bGUoYmxvY2tDb250YWluZXIuc3R5bGUoKSwgSW5jbHVkZVJl
YXNvbnM6OkZpcnN0KSA9PSBOb1JlYXNvbjsKLSAgICBjYXNlIFN0eWxlRGlmZmVyZW5jZTo6TGF5
b3V0OgotICAgIGNhc2UgU3R5bGVEaWZmZXJlbmNlOjpOZXdTdHlsZToKLSAgICAgICAgcmV0dXJu
IGNhblVzZUZvcihibG9ja0NvbnRhaW5lcik7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBjYW5Vc2VGb3IoYmxvY2tDb250YWluZXIpOwotfQotCi1zdGF0aWMg
dm9pZCByZXZlcnRBbGxSdW5zT25DdXJyZW50TGluZShMYXlvdXQ6OlJ1blZlY3RvciYgcnVucykK
LXsKLSAgICB3aGlsZSAoIXJ1bnMuaXNFbXB0eSgpICYmICFydW5zLmxhc3QoKS5pc0VuZE9mTGlu
ZSkKLSAgICAgICAgcnVucy5yZW1vdmVMYXN0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJldmVydFJ1
bnMoTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIHVuc2lnbmVkIHBvc2l0aW9uVG9SZXZlcnRUbywg
ZmxvYXQgd2lkdGgpCi17Ci0gICAgd2hpbGUgKHJ1bnMuc2l6ZSgpKSB7Ci0gICAgICAgIGF1dG8m
IGxhc3RSdW4gPSBydW5zLmxhc3QoKTsKLSAgICAgICAgaWYgKGxhc3RSdW4uZW5kIDw9IHBvc2l0
aW9uVG9SZXZlcnRUbykKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAobGFzdFJ1bi5z
dGFydCA+PSBwb3NpdGlvblRvUmV2ZXJ0VG8pIHsKLSAgICAgICAgICAgIC8vIFJldmVydCB0aGlz
IHJ1biBjb21wbGV0ZWx5LgotICAgICAgICAgICAgd2lkdGggLT0gKGxhc3RSdW4ubG9naWNhbFJp
Z2h0IC0gbGFzdFJ1bi5sb2dpY2FsTGVmdCk7Ci0gICAgICAgICAgICBydW5zLnJlbW92ZUxhc3Qo
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxhc3RSdW4ubG9naWNhbFJpZ2h0IC09
IHdpZHRoOwotICAgICAgICAgICAgd2lkdGggPSAwOwotICAgICAgICAgICAgbGFzdFJ1bi5lbmQg
PSBwb3NpdGlvblRvUmV2ZXJ0VG87Ci0gICAgICAgICAgICAvLyBQYXJ0aWFsIHJlbW92YWwuCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotY2xhc3MgTGluZVN0YXRl
IHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEF2YWlsYWJsZVdpZHRoKGZsb2F0IHdpZHRoKSB7IG1f
YXZhaWxhYmxlV2lkdGggPSB3aWR0aDsgfQotICAgIHZvaWQgc2V0Q29sbGFwZWRXaGl0ZXNwYWNl
V2lkdGgoZmxvYXQgd2lkdGgpIHsgbV9jb2xsYXBzZWRXaGl0ZXNwYWNlV2lkdGggPSB3aWR0aDsg
fQotICAgIHZvaWQgc2V0TG9naWNhbExlZnRPZmZzZXQoZmxvYXQgb2Zmc2V0KSB7IG1fbG9naWNh
bExlZnRPZmZzZXQgPSBvZmZzZXQ7IH0KLSAgICB2b2lkIHNldE92ZXJmbG93ZWRGcmFnbWVudChj
b25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudCkgeyBtX292
ZXJmbG93ZWRGcmFnbWVudCA9IGZyYWdtZW50OyB9Ci0gICAgdm9pZCBzZXROZWVkc0FsbEZyYWdt
ZW50cygpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1fZnJhZ21lbnRzKTsKLSAgICAgICAgbV9m
cmFnbWVudHMuZW1wbGFjZSgpOwotICAgIH0KLSAgICB2b2lkIHNldEh5cGhlbmF0aW9uRGlzYWJs
ZWQoKSB7IG1faHlwaGVuYXRpb25EaXNhYmxlZCA9IHRydWU7IH0KLSAgICBib29sIGlzSHlwaGVu
YXRpb25EaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faHlwaGVuYXRpb25EaXNhYmxlZDsgfQot
Ci0gICAgZmxvYXQgYXZhaWxhYmxlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2F2YWlsYWJsZVdp
ZHRoOyB9Ci0gICAgZmxvYXQgbG9naWNhbExlZnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2xv
Z2ljYWxMZWZ0T2Zmc2V0OyB9Ci0gICAgY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRG
cmFnbWVudCYgb3ZlcmZsb3dlZEZyYWdtZW50KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvd2Vk
RnJhZ21lbnQ7IH0KLSAgICBib29sIGhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbGFzdEZyYWdtZW50LnR5cGUoKSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZy
YWdtZW50OjpXaGl0ZXNwYWNlICYmIG1fbGFzdEZyYWdtZW50Lmxlbmd0aCgpID4gMDsgfQotICAg
IGJvb2wgaGFzV2hpdGVzcGFjZUZyYWdtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFdoaXRl
c3BhY2VGcmFnbWVudCAhPSBXVEY6Om51bGxvcHQ7IH0KLSAgICBUZXh0RnJhZ21lbnRJdGVyYXRv
cjo6VGV4dEZyYWdtZW50IGxhc3RGcmFnbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEZyYWdt
ZW50OyB9Ci0gICAgYm9vbCBpc1doaXRlc3BhY2VPbmx5KCkgY29uc3QgeyByZXR1cm4gbV90cmFp
bGluZ1doaXRlc3BhY2VXaWR0aCAmJiBtX3J1bnNXaWR0aCA9PSBtX3RyYWlsaW5nV2hpdGVzcGFj
ZVdpZHRoOyB9Ci0gICAgYm9vbCBmaXRzKGZsb2F0IGV4dHJhKSBjb25zdCB7IHJldHVybiBtX2F2
YWlsYWJsZVdpZHRoID49IG1fcnVuc1dpZHRoICsgZXh0cmE7IH0KLSAgICBib29sIGZpcnN0Q2hh
cmFjdGVyRml0cygpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RDaGFyYWN0ZXJGaXRzOyB9Ci0gICAg
ZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3J1bnNXaWR0aDsgfQotICAgIHN0ZDo6cGFp
cjx1bnNpZ25lZCwgYm9vbD4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCh1bnNpZ25lZCBmcm9t
LCB1bnNpZ25lZCB0bykgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2ZyYWdtZW50cyk7
Ci0gICAgICAgIC8vIGxpbmVicmVhayBydW5zIGFyZSBzcGVjaWFsLgotICAgICAgICBpZiAoZnJv
bSA9PSB0bykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcigwLCBmYWxzZSk7Ci0g
ICAgICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSAwOwotICAgICAgICBh
dXRvIHByZXZpb3VzRnJhZ21lbnRUeXBlID0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFn
bWVudDo6Q29udGVudEVuZDsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBmcmFnbWVudCA6ICpt
X2ZyYWdtZW50cykgewotICAgICAgICAgICAgaWYgKGZyYWdtZW50LmVuZCgpIDw9IGZyb20pCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBhdXRvIGN1cnJlbnRGcmFnbWVu
dFR5cGUgPSBmcmFnbWVudC50eXBlKCk7Ci0gICAgICAgICAgICBhdXRvIGV4cGFuc2lvbk9wcG9y
dHVuaXR5ID0gdGhpcy0+ZXhwYW5zaW9uT3Bwb3J0dW5pdHkoY3VycmVudEZyYWdtZW50VHlwZSwg
cHJldmlvdXNGcmFnbWVudFR5cGUpOwotICAgICAgICAgICAgaWYgKGV4cGFuc2lvbk9wcG9ydHVu
aXR5KQotICAgICAgICAgICAgICAgICsrZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsKLSAgICAg
ICAgICAgIHByZXZpb3VzRnJhZ21lbnRUeXBlID0gY3VycmVudEZyYWdtZW50VHlwZTsKLSAgICAg
ICAgICAgIGlmIChmcmFnbWVudC5lbmQoKSA+PSB0bykKLSAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3BhaXIoZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCwgZXhwYW5zaW9uT3Bwb3J0
dW5pdHkpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCwgZmFsc2Up
OwotICAgIH0KLQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAo
IW1fbGFzdEZyYWdtZW50LmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBpZiAoIW1fbGFzdENvbXBsZXRlRnJhZ21lbnQuaXNFbXB0eSgpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gbV9sYXN0RnJhZ21lbnQub3ZlcmxhcHNUb05l
eHRSZW5kZXJlcigpOwotICAgIH0KLQotICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZW5kUG9z
aXRpb25Gb3JDb2xsYXBzZWRGcmFnbWVudChjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4
dEZyYWdtZW50JiBmcmFnbWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmcmFnbWVudC5pc0Nv
bGxhcHNlZCgpID8gZnJhZ21lbnQuc3RhcnQoKSArIDEgOiBmcmFnbWVudC5lbmQoKTsKLSAgICB9
Ci0KLSAgICB2b2lkIGFwcGVuZEZyYWdtZW50QW5kQ3JlYXRlUnVuSWZOZWVkZWQoY29uc3QgVGV4
dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCYgZnJhZ21lbnQsIExheW91dDo6UnVuVmVj
dG9yJiBydW5zKQotICAgIHsKLSAgICAgICAgLy8gQWRqdXN0IGVuZCBwb3NpdGlvbiB3aGlsZSBj
b2xsYXBzaW5nLgotICAgICAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IGVuZFBvc2l0aW9uRm9y
Q29sbGFwc2VkRnJhZ21lbnQoZnJhZ21lbnQpOwotICAgICAgICAvLyBOZXcgbGluZSBuZWVkcyBu
ZXcgcnVuLgotICAgICAgICBpZiAoIW1fcnVuc1dpZHRoKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
IW1fdW5jb21wbGV0ZWRXaWR0aCk7Ci0gICAgICAgICAgICBydW5zLmFwcGVuZChSdW4oZnJhZ21l
bnQuc3RhcnQoKSwgZW5kUG9zaXRpb24sIG1fcnVuc1dpZHRoLCBtX3J1bnNXaWR0aCArIGZyYWdt
ZW50LndpZHRoKCksIGZhbHNlLCBmcmFnbWVudC5oYXNIeXBoZW4oKSwgZnJhZ21lbnQuaXNMaW5l
QnJlYWsoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQWR2YW5jZSBsYXN0
IGNvbXBsZXRlZCBmcmFnbWVudCB3aGVuIHRoZSBwcmV2aW91cyBmcmFnbWVudCBpcyBhbGwgc2V0
IChpbmNsdWRpbmcgbXVsdGlwbGUgcGFydHMgYWNyb3NzIHJlbmRlcmVycykKLSAgICAgICAgICAg
IGlmICgobV9sYXN0RnJhZ21lbnQudHlwZSgpICE9IGZyYWdtZW50LnR5cGUoKSkgfHwgIW1fbGFz
dEZyYWdtZW50Lm92ZXJsYXBzVG9OZXh0UmVuZGVyZXIoKSkgewotICAgICAgICAgICAgICAgIG1f
bGFzdENvbXBsZXRlRnJhZ21lbnQgPSBtX2xhc3RGcmFnbWVudDsKLSAgICAgICAgICAgICAgICBt
X3VuY29tcGxldGVkV2lkdGggPSBmcmFnbWVudC53aWR0aCgpOwotICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgbV91bmNvbXBsZXRlZFdpZHRoICs9IGZyYWdtZW50LndpZHRoKCk7
Ci0gICAgICAgICAgICAvLyBDb2xsYXBzZSBuZWlnaGJvdXJpbmcgd2hpdGVzcGFjZSwgaWYgdGhl
eSBhcmUgYWNyb3NzIG11bHRpcGxlIHJlbmRlcmVycyBhbmQgYXJlIG5vdCBjb2xsYXBzZWQgeWV0
LgotICAgICAgICAgICAgaWYgKG1fbGFzdEZyYWdtZW50LmlzQ29sbGFwc2libGUoKSAmJiBmcmFn
bWVudC5pc0NvbGxhcHNpYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9sYXN0RnJh
Z21lbnQuaXNMYXN0SW5SZW5kZXJlcigpKTsKLSAgICAgICAgICAgICAgICBpZiAoIW1fbGFzdEZy
YWdtZW50LmlzQ29sbGFwc2VkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTGluZSB3aWR0
aCBuZWVkcyB0byBiZSBhZGp1c3RlZCBzbyB0aGF0IG5vdyBpdCB0YWtlcyBjb2xsYXBzaW5nIGlu
dG8gY29uc2lkZXJhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgbV9ydW5zV2lkdGggLT0gKG1f
bGFzdEZyYWdtZW50LndpZHRoKCkgLSBtX2NvbGxhcHNlZFdoaXRlc3BhY2VXaWR0aCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaXMgY29sbGFw
c2VkIGNvbXBsZXRlbHkuIE5vIHJ1biBpcyBuZWVkZWQuCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUnVuJiBsYXN0UnVuID0gcnVucy5sYXN0KCk7
Ci0gICAgICAgICAgICBpZiAobV9sYXN0RnJhZ21lbnQuaXNMYXN0SW5SZW5kZXJlcigpIHx8IG1f
bGFzdEZyYWdtZW50LmlzQ29sbGFwc2VkKCkgfHwgZnJhZ21lbnQuaXNMaW5lQnJlYWsoKSB8fCBs
YXN0UnVuLmlzTGluZUJyZWFrKQotICAgICAgICAgICAgICAgIHJ1bnMuYXBwZW5kKFJ1bihmcmFn
bWVudC5zdGFydCgpLCBlbmRQb3NpdGlvbiwgbV9ydW5zV2lkdGgsIG1fcnVuc1dpZHRoICsgZnJh
Z21lbnQud2lkdGgoKSwgZmFsc2UsIGZyYWdtZW50Lmhhc0h5cGhlbigpLCBmcmFnbWVudC5pc0xp
bmVCcmVhaygpKSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBsYXN0UnVu
LmVuZCA9IGVuZFBvc2l0aW9uOwotICAgICAgICAgICAgICAgIGxhc3RSdW4ubG9naWNhbFJpZ2h0
ICs9IGZyYWdtZW50LndpZHRoKCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFsYXN0UnVuLmhh
c0h5cGhlbik7Ci0gICAgICAgICAgICAgICAgbGFzdFJ1bi5oYXNIeXBoZW4gPSBmcmFnbWVudC5o
YXNIeXBoZW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtX3J1bnNXaWR0
aCArPSBmcmFnbWVudC53aWR0aCgpOwotICAgICAgICBtX2xhc3RGcmFnbWVudCA9IGZyYWdtZW50
OwotICAgICAgICBpZiAobV9mcmFnbWVudHMpCi0gICAgICAgICAgICAoKm1fZnJhZ21lbnRzKS5h
cHBlbmQoZnJhZ21lbnQpOwotCi0gICAgICAgIGlmIChmcmFnbWVudC50eXBlKCkgPT0gVGV4dEZy
YWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6V2hpdGVzcGFjZSkgewotICAgICAgICAgICAg
bV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCArPSBmcmFnbWVudC53aWR0aCgpOwotICAgICAgICAg
ICAgbV9sYXN0V2hpdGVzcGFjZUZyYWdtZW50ID0gZnJhZ21lbnQ7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoID0gMDsKLSAgICAgICAgICAg
IG1fbGFzdE5vbldoaXRlc3BhY2VGcmFnbWVudCA9IGZyYWdtZW50OwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKCFtX2ZpcnN0Q2hhcmFjdGVyRml0cykKLSAgICAgICAgICAgIG1fZmlyc3RDaGFy
YWN0ZXJGaXRzID0gZnJhZ21lbnQuc3RhcnQoKSArIDEgPiBlbmRQb3NpdGlvbiB8fCBtX3J1bnNX
aWR0aCA8PSBtX2F2YWlsYWJsZVdpZHRoOwotICAgIH0KLQotICAgIFRleHRGcmFnbWVudEl0ZXJh
dG9yOjpUZXh0RnJhZ21lbnQgcmV2ZXJ0VG9MYXN0Q29tcGxldGVGcmFnbWVudChMYXlvdXQ6OlJ1
blZlY3RvciYgcnVucykKLSAgICB7Ci0gICAgICAgIGlmICghbV91bmNvbXBsZXRlZFdpZHRoKSB7
Ci0gICAgICAgICAgICBBU1NFUlQobV9sYXN0RnJhZ21lbnQgPT0gbV9sYXN0Q29tcGxldGVGcmFn
bWVudCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9sYXN0RnJhZ21lbnQ7Ci0gICAgICAgIH0KLSAg
ICAgICAgQVNTRVJUKG1fbGFzdEZyYWdtZW50LmlzVmFsaWQoKSk7Ci0gICAgICAgIG1fcnVuc1dp
ZHRoIC09IG1fdW5jb21wbGV0ZWRXaWR0aDsKLSAgICAgICAgcmV2ZXJ0UnVucyhydW5zLCBlbmRQ
b3NpdGlvbkZvckNvbGxhcHNlZEZyYWdtZW50KG1fbGFzdENvbXBsZXRlRnJhZ21lbnQpLCBtX3Vu
Y29tcGxldGVkV2lkdGgpOwotICAgICAgICBtX3VuY29tcGxldGVkV2lkdGggPSAwOwotICAgICAg
ICBBU1NFUlQobV9sYXN0Q29tcGxldGVGcmFnbWVudC5pc1ZhbGlkKCkpOwotICAgICAgICByZXR1
cm4gbV9sYXN0Q29tcGxldGVGcmFnbWVudDsKLSAgICB9Ci0KLSAgICB2b2lkIHJlbW92ZVRyYWls
aW5nV2hpdGVzcGFjZShMYXlvdXQ6OlJ1blZlY3RvciYgcnVucykKLSAgICB7Ci0gICAgICAgIGlm
ICghaGFzVHJhaWxpbmdXaGl0ZXNwYWNlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGlmIChtX2xhc3ROb25XaGl0ZXNwYWNlRnJhZ21lbnQpIHsKLSAgICAgICAgICAgIGF1dG8gbmVl
ZHNSZXZlcnRpbmcgPSBtX2xhc3ROb25XaGl0ZXNwYWNlRnJhZ21lbnQtPmVuZCgpICE9IG1fbGFz
dEZyYWdtZW50LmVuZCgpOwotICAgICAgICAgICAgLy8gVHJhaWxpbmcgd2hpdGVzcGFjZSBmcmFn
bWVudCBtaWdodCBhY3R1YWxseSBoYXZlIHplcm8gbGVuZ3RoLgotICAgICAgICAgICAgQVNTRVJU
KG5lZWRzUmV2ZXJ0aW5nIHx8ICFtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKTsKLSAgICAgICAg
ICAgIGlmIChuZWVkc1JldmVydGluZykgewotICAgICAgICAgICAgICAgIHJldmVydFJ1bnMocnVu
cywgbV9sYXN0Tm9uV2hpdGVzcGFjZUZyYWdtZW50LT5lbmQoKSwgbV90cmFpbGluZ1doaXRlc3Bh
Y2VXaWR0aCk7Ci0gICAgICAgICAgICAgICAgbV9ydW5zV2lkdGggLT0gbV90cmFpbGluZ1doaXRl
c3BhY2VXaWR0aDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNw
YWNlV2lkdGggPSAwOwotICAgICAgICAgICAgbV9sYXN0RnJhZ21lbnQgPSAqbV9sYXN0Tm9uV2hp
dGVzcGFjZUZyYWdtZW50OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IC8vIFRoaXMgbGluZSBpcyBhbGwgd2hpdGVzcGFjZS4KLSAgICAgICAgcmV2ZXJ0QWxsUnVuc09u
Q3VycmVudExpbmUocnVucyk7Ci0gICAgICAgIG1fcnVuc1dpZHRoID0gMDsKLSAgICAgICAgbV90
cmFpbGluZ1doaXRlc3BhY2VXaWR0aCA9IDA7Ci0gICAgICAgIC8vIEZJWE1FOiBNYWtlIG1fbGFz
dEZyYWdtZW50IG9wdGlvbmFsLgotICAgICAgICBtX2xhc3RGcmFnbWVudCA9IFRleHRGcmFnbWVu
dEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQoKTsKLSAgICB9Ci0KLSAgICBmbG9hdCB0cmFpbGluZ1do
aXRlc3BhY2VXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGg7
IH0KLQotcHJpdmF0ZToKLSAgICBib29sIGV4cGFuc2lvbk9wcG9ydHVuaXR5KFRleHRGcmFnbWVu
dEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OlR5cGUgY3VycmVudEZyYWdtZW50VHlwZSwgVGV4dEZy
YWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6VHlwZSBwcmV2aW91c0ZyYWdtZW50VHlwZSkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAoY3VycmVudEZyYWdtZW50VHlwZSA9PSBUZXh0
RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlCi0gICAgICAgICAgICB8
fCAoY3VycmVudEZyYWdtZW50VHlwZSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdt
ZW50OjpOb25XaGl0ZXNwYWNlICYmIHByZXZpb3VzRnJhZ21lbnRUeXBlID09IFRleHRGcmFnbWVu
dEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6Ok5vbldoaXRlc3BhY2UpKTsKLSAgICB9Ci0KLSAgICBm
bG9hdCBtX2F2YWlsYWJsZVdpZHRoIHsgMCB9OwotICAgIGZsb2F0IG1fbG9naWNhbExlZnRPZmZz
ZXQgeyAwIH07Ci0gICAgZmxvYXQgbV9ydW5zV2lkdGggeyAwIH07Ci0gICAgVGV4dEZyYWdtZW50
SXRlcmF0b3I6OlRleHRGcmFnbWVudCBtX292ZXJmbG93ZWRGcmFnbWVudDsKLSAgICBUZXh0RnJh
Z21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IG1fbGFzdEZyYWdtZW50OwotICAgIE9wdGlvbmFs
PFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ+IG1fbGFzdE5vbldoaXRlc3BhY2VG
cmFnbWVudDsKLSAgICBPcHRpb25hbDxUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50
PiBtX2xhc3RXaGl0ZXNwYWNlRnJhZ21lbnQ7Ci0gICAgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRl
eHRGcmFnbWVudCBtX2xhc3RDb21wbGV0ZUZyYWdtZW50OwotICAgIGZsb2F0IG1fdW5jb21wbGV0
ZWRXaWR0aCB7IDAgfTsKLSAgICBmbG9hdCBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoIHsgMCB9
OyAvLyBVc2UgdGhpcyB0byByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZSB3aXRob3V0IHJlLW1l
c3VyaW5nIHRoZSB0ZXh0LgotICAgIGZsb2F0IG1fY29sbGFwc2VkV2hpdGVzcGFjZVdpZHRoIHsg
MCB9OwotICAgIC8vIEhhdmluZyBvbmUgY2hhcmFjdGVyIG9uIHRoZSBsaW5lIGRvZXMgbm90IG5l
Y2Vzc2FyaWx5IG1lYW4gaXQgYWN0dWFsbHkgZml0cy4KLSAgICAvLyBGaXJzdCBjaGFyYWN0ZXIg
b2YgdGhlIGZpcnN0IGZyYWdtZW50IG1pZ2h0IGJlIGZvcmNlZCBvbiB0byB0aGUgY3VycmVudCBs
aW5lIGV2ZW4gaWYgaXQgZG9lcyBub3QgZml0LgotICAgIGJvb2wgbV9maXJzdENoYXJhY3RlckZp
dHMgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oeXBoZW5hdGlvbkRpc2FibGVkIHsgZmFsc2UgfTsK
LSAgICBPcHRpb25hbDxWZWN0b3I8VGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCwg
MzA+PiBtX2ZyYWdtZW50czsKLX07Ci0KLXN0YXRpYyBmbG9hdCBjb21wdXRlTGluZUxlZnQoY29u
c3QgTGluZVN0YXRlJiBsaW5lLCBUZXh0QWxpZ25Nb2RlIHRleHRBbGlnbiwgZmxvYXQmIGhhbmdp
bmdXaGl0ZXNwYWNlV2lkdGgpCi17Ci0gICAgZmxvYXQgdG90YWxXaWR0aCA9IGxpbmUud2lkdGgo
KSAtIGhhbmdpbmdXaGl0ZXNwYWNlV2lkdGg7Ci0gICAgZmxvYXQgcmVtYWluaW5nV2lkdGggPSBs
aW5lLmF2YWlsYWJsZVdpZHRoKCkgLSB0b3RhbFdpZHRoOwotICAgIGZsb2F0IGxlZnQgPSBsaW5l
LmxvZ2ljYWxMZWZ0T2Zmc2V0KCk7Ci0gICAgc3dpdGNoICh0ZXh0QWxpZ24pIHsKLSAgICBjYXNl
IFRleHRBbGlnbk1vZGU6OkxlZnQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0
OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6U3RhcnQ6Ci0gICAgICAgIGhhbmdpbmdXaGl0ZXNw
YWNlV2lkdGggPSBzdGQ6Om1heCgwLmYsIHN0ZDo6bWluKGhhbmdpbmdXaGl0ZXNwYWNlV2lkdGgs
IHJlbWFpbmluZ1dpZHRoKSk7Ci0gICAgICAgIHJldHVybiBsZWZ0OwotICAgIGNhc2UgVGV4dEFs
aWduTW9kZTo6UmlnaHQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodDoKLSAg
ICBjYXNlIFRleHRBbGlnbk1vZGU6OkVuZDoKLSAgICAgICAgaGFuZ2luZ1doaXRlc3BhY2VXaWR0
aCA9IDA7Ci0gICAgICAgIHJldHVybiBsZWZ0ICsgc3RkOjptYXg8ZmxvYXQ+KHJlbWFpbmluZ1dp
ZHRoLCAwKTsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRlcjoKLSAgICBjYXNlIFRleHRB
bGlnbk1vZGU6OldlYktpdENlbnRlcjoKLSAgICAgICAgaGFuZ2luZ1doaXRlc3BhY2VXaWR0aCA9
IHN0ZDo6bWF4KDAuZiwgc3RkOjptaW4oaGFuZ2luZ1doaXRlc3BhY2VXaWR0aCwgKHJlbWFpbmlu
Z1dpZHRoICsgMSkgLyAyKSk7Ci0gICAgICAgIHJldHVybiBsZWZ0ICsgc3RkOjptYXg8ZmxvYXQ+
KHJlbWFpbmluZ1dpZHRoIC8gMiwgMCk7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5
OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgYm9v
bCBwcmVXcmFwKGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpTdHlsZSYgc3R5bGUpCi17Ci0g
ICAgcmV0dXJuIHN0eWxlLndyYXBMaW5lcyAmJiAhc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlICYm
ICFzdHlsZS5icmVha1NwYWNlczsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlTGluZUNvbnN0cmFp
bnMoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBMaW5lU3RhdGUmIGxpbmUsIGNvbnN0IExp
bmVTdGF0ZSYgcHJldmlvdXNMaW5lLCB1bnNpZ25lZCYgbnVtYmVyT2ZQcmVjZWRpbmdMaW5lc1dp
dGhIeXBoZW4sIGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpTdHlsZSYgc3R5bGUsIGJvb2wg
aXNGaXJzdExpbmUpCi17Ci0gICAgYm9vbCBzaG91bGRBcHBseVRleHRJbmRlbnQgPSAhZmxvdy5p
c0Fub255bW91cygpIHx8IGZsb3cucGFyZW50KCktPmZpcnN0Q2hpbGQoKSA9PSAmZmxvdzsKLSAg
ICBMYXlvdXRVbml0IGhlaWdodCA9IGZsb3cubG9naWNhbEhlaWdodCgpOwotICAgIExheW91dFVu
aXQgbG9naWNhbEhlaWdodCA9IGZsb3cubWluTGluZUhlaWdodEZvclJlcGxhY2VkUmVuZGVyZXIo
ZmFsc2UsIDApOwotICAgIGxpbmUuc2V0TG9naWNhbExlZnRPZmZzZXQoZmxvdy5sb2dpY2FsTGVm
dE9mZnNldEZvckxpbmUoaGVpZ2h0LCBEb05vdEluZGVudFRleHQsIGxvZ2ljYWxIZWlnaHQpICsg
KHNob3VsZEFwcGx5VGV4dEluZGVudCAmJiBpc0ZpcnN0TGluZSA/IGZsb3cudGV4dEluZGVudE9m
ZnNldCgpIDogMF9sdSkpOwotICAgIGZsb2F0IGxvZ2ljYWxSaWdodE9mZnNldCA9IGZsb3cubG9n
aWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShoZWlnaHQsIERvTm90SW5kZW50VGV4dCwgbG9naWNhbEhl
aWdodCk7Ci0gICAgbGluZS5zZXRBdmFpbGFibGVXaWR0aChzdGQ6Om1heDxmbG9hdD4oMCwgbG9n
aWNhbFJpZ2h0T2Zmc2V0IC0gbGluZS5sb2dpY2FsTGVmdE9mZnNldCgpKSk7Ci0gICAgaWYgKHN0
eWxlLnRleHRBbGlnbiA9PSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KQotICAgICAgICBsaW5lLnNl
dE5lZWRzQWxsRnJhZ21lbnRzKCk7Ci0gICAgbnVtYmVyT2ZQcmVjZWRpbmdMaW5lc1dpdGhIeXBo
ZW4gPSAocHJldmlvdXNMaW5lLmlzRW1wdHkoKSB8fCAhcHJldmlvdXNMaW5lLmxhc3RGcmFnbWVu
dCgpLmhhc0h5cGhlbigpKSA/IDAgOiBudW1iZXJPZlByZWNlZGluZ0xpbmVzV2l0aEh5cGhlbiAr
IDE7Ci0gICAgaWYgKHN0eWxlLmh5cGhlbkxpbWl0TGluZXMgJiYgbnVtYmVyT2ZQcmVjZWRpbmdM
aW5lc1dpdGhIeXBoZW4gPj0gKnN0eWxlLmh5cGhlbkxpbWl0TGluZXMpCi0gICAgICAgIGxpbmUu
c2V0SHlwaGVuYXRpb25EaXNhYmxlZCgpOwotICAgIGxpbmUuc2V0Q29sbGFwZWRXaGl0ZXNwYWNl
V2lkdGgoc3R5bGUuZm9udC5zcGFjZVdpZHRoKCkgKyBzdHlsZS53b3JkU3BhY2luZyk7Ci19Ci0K
LXN0cnVjdCBTcGxpdEZyYWdtZW50RGF0YSB7Ci0gICAgdW5zaWduZWQgcG9zaXRpb247Ci0gICAg
ZmxvYXQgd2lkdGg7Ci19Owotc3RhdGljIE9wdGlvbmFsPHVuc2lnbmVkPiBoeXBoZW5Qb3NpdGlv
bkZvckZyYWdtZW50KFNwbGl0RnJhZ21lbnREYXRhIHNwbGl0RGF0YSwgY29uc3QgVGV4dEZyYWdt
ZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCYgZnJhZ21lbnRUb1NwbGl0LAotICAgIGNvbnN0IExp
bmVTdGF0ZSYgbGluZSwgY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3ImIHRleHRGcmFnbWVudEl0
ZXJhdG9yLCBmbG9hdCBhdmFpbGFibGVXaWR0aCkKLXsKLSAgICBhdXRvJiBzdHlsZSA9IHRleHRG
cmFnbWVudEl0ZXJhdG9yLnN0eWxlKCk7Ci0gICAgaWYgKCFzdHlsZS5zaG91bGRIeXBoZW5hdGUg
fHwgbGluZS5pc0h5cGhlbmF0aW9uRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3Igd2Via2l0Lm9y
Zy9iLzE2OTYxMy4gU2VlIG1heFByZWZpeFdpZHRoIGNvbXB1dGF0aW9uIGluIHRyeUh5cGhlbmF0
aW5nKCkuCi0gICAgLy8gSXQgZG9lcyBub3Qgd29yayBwcm9wZXJseSB3aXRoIG5vbi1jb2xsYXBz
ZWQgbGVhZGluZyB0YWJzIHdoZW4gZm9udCBpcyBlbmxhcmdlZC4KLSAgICBhdXRvIGFkanVzdGVk
QXZhaWxhYmxlV2lkdGggPSBhdmFpbGFibGVXaWR0aCAtIHN0eWxlLmh5cGhlblN0cmluZ1dpZHRo
OwotICAgIGlmICghbGluZS5pc0VtcHR5KCkpCi0gICAgICAgIGFkanVzdGVkQXZhaWxhYmxlV2lk
dGggKz0gc3R5bGUuZm9udC5zcGFjZVdpZHRoKCk7Ci0gICAgaWYgKCFlbm91Z2hXaWR0aEZvckh5
cGhlbmF0aW9uKGFkanVzdGVkQXZhaWxhYmxlV2lkdGgsIHN0eWxlLmZvbnQucGl4ZWxTaXplKCkp
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgLy8gV2UgbWlnaHQgYmUgYWJs
ZSB0byBmaXQgdGhlIGh5cGhlbiBhdCB0aGUgc3BsaXQgcG9zaXRpb24uCi0gICAgYXV0byBzcGxp
dFBvc2l0aW9uV2l0aEh5cGhlbiA9IHNwbGl0RGF0YS5wb3NpdGlvbjsKLSAgICAvLyBGaW5kIGEg
c3BsaXR0aW5nIHBvc2l0aW9uIHdoZXJlIGh5cGhlbiBzdXJlbHkgZml0cy4KLSAgICB1bnNpZ25l
ZCBzdGFydCA9IGZyYWdtZW50VG9TcGxpdC5zdGFydCgpOwotICAgIGF1dG8gbGVmdFNpZGVXaWR0
aCA9IHNwbGl0RGF0YS53aWR0aDsKLSAgICB3aGlsZSAobGVmdFNpZGVXaWR0aCArIHN0eWxlLmh5
cGhlblN0cmluZ1dpZHRoID4gYXZhaWxhYmxlV2lkdGgpIHsKLSAgICAgICAgaWYgKC0tc3BsaXRQ
b3NpdGlvbldpdGhIeXBoZW4gPD0gc3RhcnQpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OyAvLyBObyBzcGFjZSBmb3IgaHlwaGVuLgotICAgICAgICBsZWZ0U2lkZVdpZHRoIC09IHRl
eHRGcmFnbWVudEl0ZXJhdG9yLnRleHRXaWR0aChzcGxpdFBvc2l0aW9uV2l0aEh5cGhlbiwgc3Bs
aXRQb3NpdGlvbldpdGhIeXBoZW4gKyAxLCAwKTsKLSAgICB9Ci0gICAgQVNTRVJUKHNwbGl0UG9z
aXRpb25XaXRoSHlwaGVuID4gc3RhcnQpOwotICAgIHJldHVybiB0ZXh0RnJhZ21lbnRJdGVyYXRv
ci5sYXN0SHlwaGVuUG9zaXRpb24oZnJhZ21lbnRUb1NwbGl0LCBzcGxpdFBvc2l0aW9uV2l0aEh5
cGhlbiArIDEpOwotfQotCi1zdGF0aWMgU3BsaXRGcmFnbWVudERhdGEgc3BsaXQoY29uc3QgVGV4
dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCYgZnJhZ21lbnQsIGZsb2F0IGF2YWlsYWJs
ZVdpZHRoLAotICAgIGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yJiB0ZXh0RnJhZ21lbnRJdGVy
YXRvcikKLXsKLSAgICBBU1NFUlQoYXZhaWxhYmxlV2lkdGggPj0gMCk7Ci0gICAgYXV0byBsZWZ0
ID0gZnJhZ21lbnQuc3RhcnQoKTsKLSAgICAvLyBQYXRob2xvZ2ljYWwgY2FzZSBvZiAoZXh0cmVt
ZWx5KWxvbmcgc3RyaW5nIGFuZCBuYXJyb3cgbGluZXMuCi0gICAgLy8gQWRqdXN0IHRoZSByYW5n
ZSBzbyB0aGF0IHdlIGNhbiBwaWNrIGEgcmVhc29uYWJsZSBtaWRwb2ludC4KLSAgICBhdXRvIGF2
ZXJhZ2VDaGFyYWN0ZXJXaWR0aCA9IGZyYWdtZW50LndpZHRoKCkgLyBmcmFnbWVudC5sZW5ndGgo
KTsKLSAgICBhdXRvIHJpZ2h0ID0gc3RkOjptaW48dW5zaWduZWQ+KGxlZnQgKyAoMiAqIGF2YWls
YWJsZVdpZHRoIC8gYXZlcmFnZUNoYXJhY3RlcldpZHRoKSwgZnJhZ21lbnQuZW5kKCkgLSAxKTsK
LSAgICAvLyBQcmVzZXJ2ZSB0aGUgbGVmdCB3aWR0aCBmb3IgdGhlIGZpbmFsIHNwbGl0IHBvc2l0
aW9uIHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byByZW1lYXN1cmUgdGhlIGxlZnQgc2lkZSBhZ2Fp
bi4KLSAgICBmbG9hdCBsZWZ0U2lkZVdpZHRoID0gMDsKLSAgICB3aGlsZSAobGVmdCA8IHJpZ2h0
KSB7Ci0gICAgICAgIGF1dG8gbWlkZGxlID0gKGxlZnQgKyByaWdodCkgLyAyOwotICAgICAgICBh
dXRvIHdpZHRoID0gdGV4dEZyYWdtZW50SXRlcmF0b3IudGV4dFdpZHRoKGZyYWdtZW50LnN0YXJ0
KCksIG1pZGRsZSArIDEsIDApOwotICAgICAgICBpZiAod2lkdGggPCBhdmFpbGFibGVXaWR0aCkg
ewotICAgICAgICAgICAgbGVmdCA9IG1pZGRsZSArIDE7Ci0gICAgICAgICAgICBsZWZ0U2lkZVdp
ZHRoID0gd2lkdGg7Ci0gICAgICAgIH0gZWxzZSBpZiAod2lkdGggPiBhdmFpbGFibGVXaWR0aCkK
LSAgICAgICAgICAgIHJpZ2h0ID0gbWlkZGxlOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IHJpZ2h0ID0gbWlkZGxlICsgMTsKLSAgICAgICAgICAgIGxlZnRTaWRlV2lkdGggPSB3aWR0aDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB7IHJpZ2h0
LCBsZWZ0U2lkZVdpZHRoIH07Ci19Ci0KLXN0YXRpYyBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4
dEZyYWdtZW50IHNwbGl0RnJhZ21lbnRUb0ZpdExpbmUoVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRl
eHRGcmFnbWVudCYgZnJhZ21lbnRUb1NwbGl0LAotICAgIGNvbnN0IExpbmVTdGF0ZSYgbGluZSwg
Y29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3ImIHRleHRGcmFnbWVudEl0ZXJhdG9yKQotewotICAg
IGF1dG8gYXZhaWxhYmxlV2lkdGggPSBsaW5lLmF2YWlsYWJsZVdpZHRoKCkgLSBsaW5lLndpZHRo
KCk7Ci0gICAgYXV0byBzcGxpdEZyYWdtZW50RGF0YSA9IHNwbGl0KGZyYWdtZW50VG9TcGxpdCwg
YXZhaWxhYmxlV2lkdGgsIHRleHRGcmFnbWVudEl0ZXJhdG9yKTsKLSAgICBPcHRpb25hbDx1bnNp
Z25lZD4gaHlwaGVuUG9zaXRpb24gPSBXVEY6Om51bGxvcHQ7Ci0gICAgLy8gRG9lcyBmaXJzdCBj
aGFyYWN0ZXIgZml0IHRoaXMgbGluZT8KLSAgICBpZiAoc3BsaXRGcmFnbWVudERhdGEucG9zaXRp
b24gPT0gZnJhZ21lbnRUb1NwbGl0LnN0YXJ0KCkpIHsKLSAgICAgICAgLy8gS2VlcCBhdCBsZWFz
dCBvbmUgY2hhcmFjdGVyIG9uIGVtcHR5IGxpbmVzLgotICAgICAgICBpZiAobGluZS5pc0VtcHR5
KCkpCi0gICAgICAgICAgICBzcGxpdEZyYWdtZW50RGF0YS53aWR0aCA9IHRleHRGcmFnbWVudEl0
ZXJhdG9yLnRleHRXaWR0aChmcmFnbWVudFRvU3BsaXQuc3RhcnQoKSwgKytzcGxpdEZyYWdtZW50
RGF0YS5wb3NpdGlvbiwgMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaHlwaGVuUG9zaXRpb24g
PSBoeXBoZW5Qb3NpdGlvbkZvckZyYWdtZW50KHNwbGl0RnJhZ21lbnREYXRhLCBmcmFnbWVudFRv
U3BsaXQsIGxpbmUsIHRleHRGcmFnbWVudEl0ZXJhdG9yLCBhdmFpbGFibGVXaWR0aCk7Ci0gICAg
ICAgIGlmIChoeXBoZW5Qb3NpdGlvbikgewotICAgICAgICAgICAgc3BsaXRGcmFnbWVudERhdGEu
cG9zaXRpb24gPSAqaHlwaGVuUG9zaXRpb247Ci0gICAgICAgICAgICBzcGxpdEZyYWdtZW50RGF0
YS53aWR0aCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLnRleHRXaWR0aChmcmFnbWVudFRvU3BsaXQu
c3RhcnQoKSwgc3BsaXRGcmFnbWVudERhdGEucG9zaXRpb24sIDApOwotICAgICAgICB9Ci0gICAg
fQotICAgIC8vIElmIHRoZSByaWdodCBzaWRlIHN1cmVseSBkb2VzIG5vdCBmaXQgdGhlIChuZXh0
KWxpbmUsIHdlIGRvbid0IG5lZWQgdGhlIHdpZHRoIHRvIGJlIGtlcm5pbmcvbGlnYXR1cmUgYWRq
dXN0ZWQuCi0gICAgLy8gUGFydCBvZiBpdCBnZXRzIHJlLW1lYXN1cmVkIGFzIHRoZSBsZWZ0IHNp
ZGUgZHVyaW5nIG5leHQgc3BsaXQuCi0gICAgLy8gVGhpcyBzYXZlcyBtZWFzdXJpbmcgbG9uZyBj
aHVuayBvZiB0ZXh0IHJlcGVhdGVkbHkgKHNlZSBwYXRob2xvZ2ljYWwgY2FzZSBhdCA6OnNwbGl0
KS4KLSAgICBhdXRvIHJpZ2h0U2lkZVdpZHRoID0gZnJhZ21lbnRUb1NwbGl0LndpZHRoKCkgLSBz
cGxpdEZyYWdtZW50RGF0YS53aWR0aDsKLSAgICBpZiAocmlnaHRTaWRlV2lkdGggPCAyICogYXZh
aWxhYmxlV2lkdGgpCi0gICAgICAgIHJpZ2h0U2lkZVdpZHRoID0gdGV4dEZyYWdtZW50SXRlcmF0
b3IudGV4dFdpZHRoKHNwbGl0RnJhZ21lbnREYXRhLnBvc2l0aW9uLCBmcmFnbWVudFRvU3BsaXQu
ZW5kKCksIDApOwotICAgIHJldHVybiBoeXBoZW5Qb3NpdGlvbiA/IGZyYWdtZW50VG9TcGxpdC5z
cGxpdFdpdGhIeXBoZW4oc3BsaXRGcmFnbWVudERhdGEucG9zaXRpb24sIHRleHRGcmFnbWVudEl0
ZXJhdG9yLnN0eWxlKCkuaHlwaGVuU3RyaW5nV2lkdGgsCi0gICAgICAgIHNwbGl0RnJhZ21lbnRE
YXRhLndpZHRoLCByaWdodFNpZGVXaWR0aCkgOiBmcmFnbWVudFRvU3BsaXQuc3BsaXQoc3BsaXRG
cmFnbWVudERhdGEucG9zaXRpb24sIHNwbGl0RnJhZ21lbnREYXRhLndpZHRoLCByaWdodFNpZGVX
aWR0aCk7Ci19Ci0KLWVudW0gUHJlV3JhcExpbmVCcmVha1J1bGUgeyBQcmVzZXJ2ZSwgSWdub3Jl
IH07Ci0KLXN0YXRpYyBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IGNvbnN1bWVM
aW5lQnJlYWtJZk5lZWRlZChjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50
JiBmcmFnbWVudCwgVGV4dEZyYWdtZW50SXRlcmF0b3ImIHRleHRGcmFnbWVudEl0ZXJhdG9yLCBM
aW5lU3RhdGUmIGxpbmUsIExheW91dDo6UnVuVmVjdG9yJiBydW5zLAotICAgIFByZVdyYXBMaW5l
QnJlYWtSdWxlIHByZVdyYXBMaW5lQnJlYWtSdWxlID0gUHJlV3JhcExpbmVCcmVha1J1bGU6OlBy
ZXNlcnZlKQotewotICAgIGlmICghZnJhZ21lbnQuaXNMaW5lQnJlYWsoKSkKLSAgICAgICAgcmV0
dXJuIGZyYWdtZW50OwotCi0gICAgYm9vbCBpc0hhcmRMaW5lYnJlYWsgPSBmcmFnbWVudC50eXBl
KCkgPT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6SGFyZExpbmVCcmVhazsK
LSAgICAvLyA8YnI+IGFsd2F5cyBwcm9kdWNlcyBhIHJ1bi4gKHJlcXVpcmVkIGJ5IHRlc3Rpbmcg
b3V0cHV0KQotICAgIGlmIChpc0hhcmRMaW5lYnJlYWspCi0gICAgICAgIGxpbmUuYXBwZW5kRnJh
Z21lbnRBbmRDcmVhdGVSdW5JZk5lZWRlZChmcmFnbWVudCwgcnVucyk7Ci0KLSAgICBhdXRvJiBz
dHlsZSA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLnN0eWxlKCk7Ci0gICAgaWYgKHN0eWxlLnByZXNl
cnZlTmV3bGluZSAmJiBwcmVXcmFwTGluZUJyZWFrUnVsZSA9PSBQcmVXcmFwTGluZUJyZWFrUnVs
ZTo6UHJlc2VydmUpIHsKLSAgICAgICAgaWYgKCFpc0hhcmRMaW5lYnJlYWspCi0gICAgICAgICAg
ICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAgfQotICAgIHJldHVybiB0ZXh0RnJhZ21lbnRJdGVyYXRv
ci5uZXh0VGV4dEZyYWdtZW50KCk7Ci19Ci0KLXN0YXRpYyBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6
VGV4dEZyYWdtZW50IHNraXBXaGl0ZXNwYWNlSWZOZWVkZWQoY29uc3QgVGV4dEZyYWdtZW50SXRl
cmF0b3I6OlRleHRGcmFnbWVudCYgZnJhZ21lbnQsIFRleHRGcmFnbWVudEl0ZXJhdG9yJiB0ZXh0
RnJhZ21lbnRJdGVyYXRvcikKLXsKLSAgICBpZiAoIXRleHRGcmFnbWVudEl0ZXJhdG9yLnN0eWxl
KCkuY29sbGFwc2VXaGl0ZXNwYWNlKQotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0KLSAgICBU
ZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IGZpcnN0Tm9uV2hpdGVzcGFjZUZyYWdt
ZW50ID0gZnJhZ21lbnQ7Ci0gICAgd2hpbGUgKGZpcnN0Tm9uV2hpdGVzcGFjZUZyYWdtZW50LnR5
cGUoKSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlKQot
ICAgICAgICBmaXJzdE5vbldoaXRlc3BhY2VGcmFnbWVudCA9IHRleHRGcmFnbWVudEl0ZXJhdG9y
Lm5leHRUZXh0RnJhZ21lbnQoKTsKLSAgICByZXR1cm4gZmlyc3ROb25XaGl0ZXNwYWNlRnJhZ21l
bnQ7Ci19Ci0KLXN0YXRpYyBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IGZpcnN0
RnJhZ21lbnQoVGV4dEZyYWdtZW50SXRlcmF0b3ImIHRleHRGcmFnbWVudEl0ZXJhdG9yLCBMaW5l
U3RhdGUmIGN1cnJlbnRMaW5lLCBjb25zdCBMaW5lU3RhdGUmIHByZXZpb3VzTGluZSwgTGF5b3V0
OjpSdW5WZWN0b3ImIHJ1bnMpCi17Ci0gICAgLy8gSGFuZGxlIG92ZXJmbG93IGZyYWdtZW50IGZy
b20gcHJldmlvdXMgbGluZS4KLSAgICBhdXRvIG92ZXJmbG93ZWRGcmFnbWVudCA9IHByZXZpb3Vz
TGluZS5vdmVyZmxvd2VkRnJhZ21lbnQoKTsKLSAgICBpZiAob3ZlcmZsb3dlZEZyYWdtZW50Lmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHNraXBXaGl0ZXNwYWNlSWZOZWVkZWQodGV4dEZyYWdt
ZW50SXRlcmF0b3IubmV4dFRleHRGcmFnbWVudCgpLCB0ZXh0RnJhZ21lbnRJdGVyYXRvcik7Ci0K
LSAgICBpZiAob3ZlcmZsb3dlZEZyYWdtZW50LnR5cGUoKSAhPSBUZXh0RnJhZ21lbnRJdGVyYXRv
cjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlKQotICAgICAgICByZXR1cm4gb3ZlcmZsb3dlZEZy
YWdtZW50OwotCi0gICAgLy8gTGVhZGluZyB3aGl0ZXNwYWNlIGhhbmRsaW5nLgotICAgIGF1dG8m
IHN0eWxlID0gdGV4dEZyYWdtZW50SXRlcmF0b3Iuc3R5bGUoKTsKLSAgICBpZiAoc3R5bGUuYnJl
YWtTcGFjZXMpIHsKLSAgICAgICAgLy8gTGVhZGluZyB3aGl0ZXNwYWNlIGNyZWF0ZWQgYWZ0ZXIg
YnJlYWtpbmcgdGhlIHByZXZpb3VzIGxpbmUuCi0gICAgICAgIC8vIEJyZWFraW5nIGJlZm9yZSB0
aGUgZmlyc3Qgc3BhY2UgYWZ0ZXIgYSB3b3JkIGlzIG9ubHkgYWxsb3dlZCBpbiBjb21iaW5hdGlv
biB3aXRoIGJyZWFrLWFsbCBvciBicmVhay13b3JkLgotICAgICAgICBpZiAoc3R5bGUuYnJlYWtG
aXJzdFdvcmRPbk92ZXJmbG93IHx8IHByZXZpb3VzTGluZS5oYXNUcmFpbGluZ1doaXRlc3BhY2Uo
KSkKLSAgICAgICAgICAgIHJldHVybiBvdmVyZmxvd2VkRnJhZ21lbnQ7Ci0gICAgfQotICAgIC8v
IFNwZWNpYWwgb3ZlcmZsb3cgcHJlLXdyYXAgd2hpdGVzcGFjZSBoYW5kbGluZzogc2tpcCB0aGUg
b3ZlcmZsb3dlZCB3aGl0ZXNwYWNlIChldmVuIHdoZW4gc3R5bGUgc2F5cyBub3QtY29sbGFwc2li
bGUpCi0gICAgLy8gaWYgd2UgbWFuYWdlIHRvIGZpdCBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIG9u
IHRoZSBwcmV2aW91cyBsaW5lLgotICAgIGlmICgoc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlIHx8
IHN0eWxlLndyYXBMaW5lcykgJiYgcHJldmlvdXNMaW5lLmZpcnN0Q2hhcmFjdGVyRml0cygpKSB7
Ci0gICAgICAgIC8vIElmIHNraXBwaW5nIHRoZSB3aGl0ZXNwYWNlIHB1dHMgdXMgb24gYSBuZXds
aW5lLCBza2lwIHRoZSBuZXdsaW5lIHRvbyBhcyB3ZSBhbHJlYWR5IHdyYXBwZWQgdGhlIGxpbmUu
Ci0gICAgICAgIGF1dG8gZmlyc3RGcmFnbWVudENhbmRpZGF0ZSA9IGNvbnN1bWVMaW5lQnJlYWtJ
Zk5lZWRlZCh0ZXh0RnJhZ21lbnRJdGVyYXRvci5uZXh0VGV4dEZyYWdtZW50KCksIHRleHRGcmFn
bWVudEl0ZXJhdG9yLCBjdXJyZW50TGluZSwgcnVucywKLSAgICAgICAgICAgIHByZVdyYXAoc3R5
bGUpID8gUHJlV3JhcExpbmVCcmVha1J1bGU6Oklnbm9yZSA6IFByZVdyYXBMaW5lQnJlYWtSdWxl
OjpQcmVzZXJ2ZSk7Ci0gICAgICAgIHJldHVybiBza2lwV2hpdGVzcGFjZUlmTmVlZGVkKGZpcnN0
RnJhZ21lbnRDYW5kaWRhdGUsIHRleHRGcmFnbWVudEl0ZXJhdG9yKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHNraXBXaGl0ZXNwYWNlSWZOZWVkZWQob3ZlcmZsb3dlZEZyYWdtZW50LCB0ZXh0RnJhZ21l
bnRJdGVyYXRvcik7Ci19Ci0KLXN0YXRpYyB2b2lkIGZvcmNlRnJhZ21lbnRUb0xpbmUoTGluZVN0
YXRlJiBsaW5lLCBUZXh0RnJhZ21lbnRJdGVyYXRvciYgdGV4dEZyYWdtZW50SXRlcmF0b3IsIExh
eW91dDo6UnVuVmVjdG9yJiBydW5zLCBjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZy
YWdtZW50JiBmcmFnbWVudCkKLXsKLSAgICBsaW5lLmFwcGVuZEZyYWdtZW50QW5kQ3JlYXRlUnVu
SWZOZWVkZWQoZnJhZ21lbnQsIHJ1bnMpOwotICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBtb3Jl
IGZyYWdtZW50cyB0byBhZGQgdG8gdGhlIGN1cnJlbnQgbGluZS4KLSAgICBhdXRvIG5leHRGcmFn
bWVudCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQoKTsKLSAgICBpZiAo
ZnJhZ21lbnQub3ZlcmxhcHNUb05leHRSZW5kZXJlcigpKSB7Ci0gICAgICAgIHdoaWxlICh0cnVl
KSB7Ci0gICAgICAgICAgICBpZiAobmV4dEZyYWdtZW50LnR5cGUoKSAhPSBmcmFnbWVudC50eXBl
KCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBsaW5lLmFwcGVuZEZyYWdt
ZW50QW5kQ3JlYXRlUnVuSWZOZWVkZWQobmV4dEZyYWdtZW50LCBydW5zKTsKLSAgICAgICAgICAg
IC8vIERvZXMgaXQgb3ZlcmxhcCB0byB0aGUgbmV4dCBzZWdtZW50PwotICAgICAgICAgICAgaWYg
KCFuZXh0RnJhZ21lbnQub3ZlcmxhcHNUb05leHRSZW5kZXJlcigpKQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIG5leHRGcmFnbWVudCA9IHRleHRGcmFnbWVudEl0ZXJhdG9y
Lm5leHRUZXh0RnJhZ21lbnQoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvLyBXaGVuIHRoZSBm
b3JjZWQgZnJhZ21lbnQgaXMgZm9sbG93ZWQgYnkgZWl0aGVyIHdoaXRlc3BhY2UgYW5kL29yIGxp
bmUgYnJlYWssIGNvbnN1bWUgdGhlbSB0b28sIG90aGVyd2lzZSB3ZSBlbmQgdXAgd2l0aCBhbiBl
eHRyYSB3aGl0ZXNwYWNlIGFuZC9vciBsaW5lIGJyZWFrLgotICAgIG5leHRGcmFnbWVudCA9IHNr
aXBXaGl0ZXNwYWNlSWZOZWVkZWQobmV4dEZyYWdtZW50LCB0ZXh0RnJhZ21lbnRJdGVyYXRvcik7
Ci0gICAgbmV4dEZyYWdtZW50ID0gY29uc3VtZUxpbmVCcmVha0lmTmVlZGVkKG5leHRGcmFnbWVu
dCwgdGV4dEZyYWdtZW50SXRlcmF0b3IsIGxpbmUsIHJ1bnMpOwotICAgIGxpbmUuc2V0T3ZlcmZs
b3dlZEZyYWdtZW50KG5leHRGcmFnbWVudCk7Ci19Ci0KLXN0YXRpYyBib29sIGNyZWF0ZUxpbmVS
dW5zKExpbmVTdGF0ZSYgbGluZSwgY29uc3QgTGluZVN0YXRlJiBwcmV2aW91c0xpbmUsIExheW91
dDo6UnVuVmVjdG9yJiBydW5zLCBUZXh0RnJhZ21lbnRJdGVyYXRvciYgdGV4dEZyYWdtZW50SXRl
cmF0b3IpCi17Ci0gICAgY29uc3QgYXV0byYgc3R5bGUgPSB0ZXh0RnJhZ21lbnRJdGVyYXRvci5z
dHlsZSgpOwotICAgIGJvb2wgbGluZUNhbkJlV3JhcHBlZCA9IHN0eWxlLndyYXBMaW5lcyB8fCBz
dHlsZS5icmVha0ZpcnN0V29yZE9uT3ZlcmZsb3cgfHwgc3R5bGUuYnJlYWtBbnlXb3JkT25PdmVy
ZmxvdzsKLSAgICBhdXRvIGZyYWdtZW50ID0gZmlyc3RGcmFnbWVudCh0ZXh0RnJhZ21lbnRJdGVy
YXRvciwgbGluZSwgcHJldmlvdXNMaW5lLCBydW5zKTsKLSAgICB3aGlsZSAoZnJhZ21lbnQudHlw
ZSgpICE9IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OkNvbnRlbnRFbmQpIHsK
LSAgICAgICAgLy8gSGFyZCBhbmQgc29mdCBsaW5lYnJlYWtzLgotICAgICAgICBpZiAoZnJhZ21l
bnQuaXNMaW5lQnJlYWsoKSkgewotICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXcgbGluZSBmcmFn
bWVudCBvbmx5IGlmIHRoZXJlJ3Mgbm90aGluZyBvbiB0aGUgbGluZS4gKG90aGVyd2lzZSB0aGUg
ZXh0cmEgbmV3IGxpbmUgY2hhcmFjdGVyIHdvdWxkIHNob3cgdXAgYXQgdGhlIGVuZCBvZiB0aGUg
Y29udGVudC4pCi0gICAgICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkgfHwgZnJhZ21lbnQudHlw
ZSgpID09IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OkhhcmRMaW5lQnJlYWsg
fHwgcHJlV3JhcChzdHlsZSkgfHwgc3R5bGUucHJlc2VydmVOZXdsaW5lKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHN0eWxlLnRleHRBbGlnbiA9PSBUZXh0QWxpZ25Nb2RlOjpSaWdodCB8fCBzdHls
ZS50ZXh0QWxpZ24gPT0gVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQpCi0gICAgICAgICAgICAg
ICAgICAgIGxpbmUucmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKHJ1bnMpOwotICAgICAgICAgICAg
ICAgIGxpbmUuYXBwZW5kRnJhZ21lbnRBbmRDcmVhdGVSdW5JZk5lZWRlZChmcmFnbWVudCwgcnVu
cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBpZiAobGluZUNhbkJlV3JhcHBlZCAmJiAhbGluZS5maXRzKGZyYWdtZW50LndpZHRoKCkpKSB7
Ci0gICAgICAgICAgICAvLyBPdmVyZmxvdyB3cmFwcGluZyBiZWhhdmlvdXI6Ci0gICAgICAgICAg
ICAvLyAxLiBXaGl0ZXNhcGNlIGNvbGxhcHNlIG9uOiB3aGl0ZXNwYWNlIGlzIHNraXBwZWQuIEp1
bXAgdG8gbmV4dCBsaW5lLgotICAgICAgICAgICAgLy8gMi4gV2hpdGVzcGFjZSBjb2xsYXBzZSBv
ZmY6IHdoaXRlc3BhY2UgaXMgd3JhcHBlZC4KLSAgICAgICAgICAgIC8vIDMuIEZpcnN0LCBub24t
d2hpdGVzcGFjZSBmcmFnbWVudCBpcyBlaXRoZXIgd3JhcHBlZCBvciBrZXB0IG9uIHRoZSBsaW5l
LiAoZGVwZW5kcyBvbiBvdmVyZmxvdy13cmFwKQotICAgICAgICAgICAgLy8gNS4gTm9uLXdoaXRl
c3BhY2UgZnJhZ21lbnQgd2hlbiB0aGVyZSdzIGFscmVhZHkgYW5vdGhlciBmcmFnbWVudCBvbiB0
aGUgbGluZSBlaXRoZXIgZ2V0cyB3cmFwcGVkICh3b3JkLWJyZWFrOiBicmVhay1hbGwpCi0gICAg
ICAgICAgICAvLyBvciBnZXRzIHB1c2hlZCB0byB0aGUgbmV4dCBsaW5lLgotICAgICAgICAgICAg
Ym9vbCBlbXB0eUxpbmUgPSBsaW5lLmlzRW1wdHkoKTsKLSAgICAgICAgICAgIC8vIFdoaXRlc3Bh
Y2UgZnJhZ21lbnQuCi0gICAgICAgICAgICBpZiAoZnJhZ21lbnQudHlwZSgpID09IFRleHRGcmFn
bWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IFB1c2ggY29sbGFwYXNlZCB3aGl0ZXNwYWNlIHRvIHRoZSBuZXh0IGxpbmUuCi0gICAgICAgICAg
ICAgICAgICAgIGxpbmUuc2V0T3ZlcmZsb3dlZEZyYWdtZW50KGZyYWdtZW50KTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlm
IChzdHlsZS5icmVha1NwYWNlcyAmJiBsaW5lLmhhc1doaXRlc3BhY2VGcmFnbWVudHMoKSAmJiBm
cmFnbWVudC5sZW5ndGgoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEJyZWFraW5n
IGJlZm9yZSB0aGUgZmlyc3Qgc3BhY2UgYWZ0ZXIgYSB3b3JkIGlzIG5vdCBhbGxvd2VkIGlmIHRo
ZXJlIGFyZSBwcmV2aW91cyBicmVha2luZyBvcHBvcnR1bml0aWVzIGluIHRoZSBsaW5lLgotICAg
ICAgICAgICAgICAgICAgICB0ZXh0RnJhZ21lbnRJdGVyYXRvci5yZXZlcnRUb0VuZE9mRnJhZ21l
bnQobGluZS5yZXZlcnRUb0xhc3RDb21wbGV0ZUZyYWdtZW50KHJ1bnMpKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChw
cmVXcmFwKHN0eWxlKSkgewotICAgICAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZEZyYWdtZW50
QW5kQ3JlYXRlUnVuSWZOZWVkZWQoZnJhZ21lbnQsIHJ1bnMpOwotICAgICAgICAgICAgICAgICAg
ICBmcmFnbWVudCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQobGluZS53
aWR0aCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50LmlzTGluZUJyZWFrKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAg
bGluZS5zZXRPdmVyZmxvd2VkRnJhZ21lbnQoZnJhZ21lbnQpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gU3BsaXQgdGhl
IHdoaXRlc3BhY2U7IGxlZnQgcGFydCBzdGF5cyBvbiB0aGlzIGxpbmUsIHJpZ2h0IGlzIHB1c2hl
ZCB0byBuZXh0IGxpbmUuCi0gICAgICAgICAgICAgICAgbGluZS5zZXRPdmVyZmxvd2VkRnJhZ21l
bnQoc3BsaXRGcmFnbWVudFRvRml0TGluZShmcmFnbWVudCwgbGluZSwgdGV4dEZyYWdtZW50SXRl
cmF0b3IpKTsKLSAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZEZyYWdtZW50QW5kQ3JlYXRlUnVu
SWZOZWVkZWQoZnJhZ21lbnQsIHJ1bnMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgLy8gTm9uLXdoaXRlc3BhY2UgZnJhZ21lbnQuICghc3R5bGUu
d3JhcExpbmVzOiBidWcxMzgxMDIocHJlc2VydmUgZXhpc3RpbmcgYmVoYXZpb3IpCi0gICAgICAg
ICAgICBpZiAoKChlbXB0eUxpbmUgJiYgc3R5bGUuYnJlYWtGaXJzdFdvcmRPbk92ZXJmbG93KSB8
fCBzdHlsZS5icmVha0FueVdvcmRPbk92ZXJmbG93KSB8fCAhc3R5bGUud3JhcExpbmVzKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGZyYWdtZW50OyAobW9kaWZpZWQpZnJhZ21lbnQg
c3RheXMgb24gdGhpcyBsaW5lLCBvdmVyZmxvd2VkRnJhZ21lbnQgaXMgcHVzaGVkIHRvIG5leHQg
bGluZS4KLSAgICAgICAgICAgICAgICBsaW5lLnNldE92ZXJmbG93ZWRGcmFnbWVudChzcGxpdEZy
YWdtZW50VG9GaXRMaW5lKGZyYWdtZW50LCBsaW5lLCB0ZXh0RnJhZ21lbnRJdGVyYXRvcikpOwot
ICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kRnJhZ21lbnRBbmRDcmVhdGVSdW5JZk5lZWRlZChm
cmFnbWVudCwgcnVucyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBBU1NFUlQoZnJhZ21lbnQudHlwZSgpID09IFRleHRGcmFnbWVudEl0ZXJhdG9y
OjpUZXh0RnJhZ21lbnQ6Ok5vbldoaXRlc3BhY2UpOwotICAgICAgICAgICAgLy8gRmluZCBvdXQg
aWYgdGhpcyBub24td2hpdGVzcGFjZSBmcmFnbWVudCBoYXMgYSBoeXBoZW4gd2hlcmUgd2UgY2Fu
IGJyZWFrLgotICAgICAgICAgICAgaWYgKHN0eWxlLnNob3VsZEh5cGhlbmF0ZSkgewotICAgICAg
ICAgICAgICAgIGF1dG8gZnJhZ21lbnRUb1NwbGl0ID0gZnJhZ21lbnQ7Ci0gICAgICAgICAgICAg
ICAgLy8gU3BsaXQgYW5kIGNoZWNrIGlmIHdlIGFjdHVhbGx5IGVuZGVkIHVwIHdpdGggYSBoeXBo
ZW4uCi0gICAgICAgICAgICAgICAgYXV0byBvdmVyZmxvd0ZyYWdtZW50ID0gc3BsaXRGcmFnbWVu
dFRvRml0TGluZShmcmFnbWVudFRvU3BsaXQsIGxpbmUsIHRleHRGcmFnbWVudEl0ZXJhdG9yKTsK
LSAgICAgICAgICAgICAgICBpZiAoZnJhZ21lbnRUb1NwbGl0Lmhhc0h5cGhlbigpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGxpbmUuc2V0T3ZlcmZsb3dlZEZyYWdtZW50KG92ZXJmbG93RnJhZ21l
bnQpOwotICAgICAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZEZyYWdtZW50QW5kQ3JlYXRlUnVu
SWZOZWVkZWQoZnJhZ21lbnRUb1NwbGl0LCBydW5zKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIE5vIGh5cGhlbiwgbm8g
c3BsaXQuCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBOb24tYnJlYWthYmxlIG5vbi13
aGl0ZXNwYWNlIGZpcnN0IGZyYWdtZW50LiBBZGQgaXQgdG8gdGhlIGN1cnJlbnQgbGluZS4gLWl0
IG92ZXJmbG93cyB0aG91Z2guCi0gICAgICAgICAgICBpZiAoZW1wdHlMaW5lKSB7Ci0gICAgICAg
ICAgICAgICAgZm9yY2VGcmFnbWVudFRvTGluZShsaW5lLCB0ZXh0RnJhZ21lbnRJdGVyYXRvciwg
cnVucywgZnJhZ21lbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgLy8gTm9uLWJyZWFrYWJsZSBub24td2hpdGVzcGFjZSBmcmFnbWVudCB3aGVu
IHRoZXJlJ3MgYWxyZWFkeSBjb250ZW50IG9uIHRoZSBsaW5lLiBQdXNoIGl0IHRvIHRoZSBuZXh0
IGxpbmUuCi0gICAgICAgICAgICBBU1NFUlQobGluZS5sYXN0RnJhZ21lbnQoKS5pc1ZhbGlkKCkp
OwotICAgICAgICAgICAgaWYgKGxpbmUubGFzdEZyYWdtZW50KCkub3ZlcmxhcHNUb05leHRSZW5k
ZXJlcigpKSB7Ci0gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBmcmFnbWVudCBpcyBh
IGNvbnRpbnVhdGlvbiBvZiBhIHByZXZpb3VzIHNlZ21lbnQuIEluIHN1Y2ggY2FzZXMsIHdlIG5l
ZWQgdG8gcmVtb3ZlIHRoZW0gYWxsLgotICAgICAgICAgICAgICAgIHRleHRGcmFnbWVudEl0ZXJh
dG9yLnJldmVydFRvRW5kT2ZGcmFnbWVudChsaW5lLnJldmVydFRvTGFzdENvbXBsZXRlRnJhZ21l
bnQocnVucykpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbGluZS5zZXRPdmVyZmxvd2VkRnJhZ21lbnQoZnJhZ21lbnQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbGluZS5hcHBlbmRGcmFnbWVudEFuZENyZWF0ZVJ1
bklmTmVlZGVkKGZyYWdtZW50LCBydW5zKTsKLSAgICAgICAgLy8gRmluZCB0aGUgbmV4dCB0ZXh0
IGZyYWdtZW50LgotICAgICAgICBmcmFnbWVudCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLm5leHRU
ZXh0RnJhZ21lbnQobGluZS53aWR0aCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIChmcmFnbWVudC50
eXBlKCkgPT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6Q29udGVudEVuZCAm
JiBsaW5lLm92ZXJmbG93ZWRGcmFnbWVudCgpLmlzRW1wdHkoKSkgfHwgbGluZS5vdmVyZmxvd2Vk
RnJhZ21lbnQoKS50eXBlKCkgPT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6
Q29udGVudEVuZDsKLX0KLQotc3RhdGljIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2
aW9yKGJvb2wgaXNBZnRlckV4cGFuc2lvbiwgYm9vbCBsYXN0UnVuT25MaW5lKQotewotICAgIEV4
cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yOwotICAgIGV4cGFuc2lvbkJlaGF2aW9y
ID0gaXNBZnRlckV4cGFuc2lvbiA/IEZvcmJpZExlZnRFeHBhbnNpb24gOiBBbGxvd0xlZnRFeHBh
bnNpb247Ci0gICAgZXhwYW5zaW9uQmVoYXZpb3IgfD0gbGFzdFJ1bk9uTGluZSA/IEZvcmJpZFJp
Z2h0RXhwYW5zaW9uIDogQWxsb3dSaWdodEV4cGFuc2lvbjsKLSAgICByZXR1cm4gZXhwYW5zaW9u
QmVoYXZpb3I7Ci19Ci0KLXN0YXRpYyB2b2lkIGp1c3RpZnlSdW5zKGNvbnN0IExpbmVTdGF0ZSYg
bGluZSwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIHVuc2lnbmVkIGZpcnN0UnVuSW5kZXgpCi17
Ci0gICAgQVNTRVJUKHJ1bnMuc2l6ZSgpKTsKLSAgICBhdXRvIHdpZHRoVG9EaXN0cmlidXRlID0g
bGluZS5hdmFpbGFibGVXaWR0aCgpIC0gbGluZS53aWR0aCgpOwotICAgIGlmICh3aWR0aFRvRGlz
dHJpYnV0ZSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGxhc3RSdW5JbmRleCA9
IHJ1bnMuc2l6ZSgpIC0gMTsKLSAgICBBU1NFUlQoZmlyc3RSdW5JbmRleCA8PSBsYXN0UnVuSW5k
ZXgpOwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8dW5zaWduZWQsIEV4cGFuc2lvbkJlaGF2aW9yPj4g
ZXhwYW5zaW9uT3Bwb3J0dW5pdHlMaXN0OwotICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnRPblRoaXNMaW5lID0gMDsKLSAgICBhdXRvIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVl
OwotICAgIGZvciAoYXV0byBpID0gZmlyc3RSdW5JbmRleDsgaSA8PSBsYXN0UnVuSW5kZXg7ICsr
aSkgewotICAgICAgICBjb25zdCBhdXRvJiBydW4gPSBydW5zLmF0KGkpOwotICAgICAgICB1bnNp
Z25lZCBvcHBvcnR1bml0eUNvdW50SW5SdW4gPSAwOwotICAgICAgICBzdGQ6OnRpZShvcHBvcnR1
bml0eUNvdW50SW5SdW4sIGlzQWZ0ZXJFeHBhbnNpb24pID0gbGluZS5leHBhbnNpb25PcHBvcnR1
bml0eUNvdW50KHJ1bi5zdGFydCwgcnVuLmVuZCk7Ci0gICAgICAgIGV4cGFuc2lvbk9wcG9ydHVu
aXR5TGlzdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIob3Bwb3J0dW5pdHlDb3VudEluUnVuLCBleHBh
bnNpb25CZWhhdmlvcihpc0FmdGVyRXhwYW5zaW9uLCBpID09IGxhc3RSdW5JbmRleCkpKTsKLSAg
ICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudE9uVGhpc0xpbmUgKz0gb3Bwb3J0dW5pdHlD
b3VudEluUnVuOwotICAgIH0KLSAgICBpZiAoIWV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRPblRo
aXNMaW5lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoZXhwYW5zaW9uT3Bwb3J0dW5p
dHlMaXN0LnNpemUoKSA9PSBsYXN0UnVuSW5kZXggLSBmaXJzdFJ1bkluZGV4ICsgMSk7Ci0gICAg
YXV0byBleHBhbnNpb24gPSB3aWR0aFRvRGlzdHJpYnV0ZSAvIGV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnRPblRoaXNMaW5lOwotICAgIGZsb2F0IGFjY3VtdWxhdGVkRXhwYW5zaW9uID0gMDsKLSAg
ICBmb3IgKGF1dG8gaSA9IGZpcnN0UnVuSW5kZXg7IGkgPD0gbGFzdFJ1bkluZGV4OyArK2kpIHsK
LSAgICAgICAgYXV0byYgcnVuID0gcnVucy5hdChpKTsKLSAgICAgICAgdW5zaWduZWQgb3Bwb3J0
dW5pdHlDb3VudEluUnVuOwotICAgICAgICBzdGQ6OnRpZShvcHBvcnR1bml0eUNvdW50SW5SdW4s
IHJ1bi5leHBhbnNpb25CZWhhdmlvcikgPSBleHBhbnNpb25PcHBvcnR1bml0eUxpc3QuYXQoaSAt
IGZpcnN0UnVuSW5kZXgpOwotICAgICAgICBydW4uZXhwYW5zaW9uID0gb3Bwb3J0dW5pdHlDb3Vu
dEluUnVuICogZXhwYW5zaW9uOwotICAgICAgICBydW4ubG9naWNhbExlZnQgKz0gYWNjdW11bGF0
ZWRFeHBhbnNpb247Ci0gICAgICAgIHJ1bi5sb2dpY2FsUmlnaHQgKz0gKGFjY3VtdWxhdGVkRXhw
YW5zaW9uICsgcnVuLmV4cGFuc2lvbik7Ci0gICAgICAgIGFjY3VtdWxhdGVkRXhwYW5zaW9uICs9
IHJ1bi5leHBhbnNpb247Ci0gICAgfQotfQotCi1zdGF0aWMgVGV4dEFsaWduTW9kZSB0ZXh0QWxp
Z25Gb3JMaW5lKGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpTdHlsZSYgc3R5bGUsIGJvb2wg
bGFzdExpbmUpCi17Ci0gICAgLy8gRmFsbGJhY2sgdG8gVGV4dEFsaWduTW9kZTo6TGVmdCAoU1RB
UlQpIGFsaWdubWVudCBmb3Igbm9uLWNvbGxhcHNhYmxlIGNvbnRlbnQgYW5kIGZvciB0aGUgbGFz
dCBsaW5lIGJlZm9yZSBhIGZvcmNlZCBicmVhayBvciB0aGUgZW5kIG9mIHRoZSBibG9jay4KLSAg
ICBhdXRvIHRleHRBbGlnbiA9IHN0eWxlLnRleHRBbGlnbjsKLSAgICBpZiAodGV4dEFsaWduID09
IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkgJiYgKCFzdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2UgfHwg
bGFzdExpbmUpKQotICAgICAgICB0ZXh0QWxpZ24gPSBUZXh0QWxpZ25Nb2RlOjpMZWZ0OwotICAg
IHJldHVybiB0ZXh0QWxpZ247Ci19Ci0KLXN0YXRpYyB2b2lkIGNsb3NlTGluZUVuZGluZ0FuZEFk
anVzdFJ1bnMoTGluZVN0YXRlJiBsaW5lLCBMYXlvdXQ6OlJ1blZlY3RvciYgcnVucywgT3B0aW9u
YWw8dW5zaWduZWQ+IGxhc3RSdW5JbmRleE9mUHJldmlvdXNMaW5lLCB1bnNpZ25lZCYgbGluZUNv
dW50LAotICAgIGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yJiB0ZXh0RnJhZ21lbnRJdGVyYXRv
ciwgYm9vbCBsYXN0TGluZUluRmxvdykKLXsKLSAgICBpZiAoIXJ1bnMuc2l6ZSgpIHx8IChsYXN0
UnVuSW5kZXhPZlByZXZpb3VzTGluZSAmJiBydW5zLnNpemUoKSAtIDEgPT0gbGFzdFJ1bkluZGV4
T2ZQcmV2aW91c0xpbmUudmFsdWUoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IGF1
dG8mIHN0eWxlID0gdGV4dEZyYWdtZW50SXRlcmF0b3Iuc3R5bGUoKTsKLQotICAgIGlmIChzdHls
ZS5jb2xsYXBzZVdoaXRlc3BhY2UpCi0gICAgICAgIGxpbmUucmVtb3ZlVHJhaWxpbmdXaGl0ZXNw
YWNlKHJ1bnMpOwotCi0gICAgaWYgKCFydW5zLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gQWRqdXN0IHJ1bnMnIHBvc2l0aW9uIGJ5IHRha2luZyBsaW5lJ3MgYWxpZ25tZW50IGlu
dG8gYWNjb3VudC4KLSAgICBhdXRvIGZpcnN0UnVuSW5kZXggPSBsYXN0UnVuSW5kZXhPZlByZXZp
b3VzTGluZSA/IGxhc3RSdW5JbmRleE9mUHJldmlvdXNMaW5lLnZhbHVlKCkgKyAxIDogMDsKLSAg
ICBhdXRvIGxpbmVMb2dpY2FsTGVmdCA9IGxpbmUubG9naWNhbExlZnRPZmZzZXQoKTsKLSAgICBh
dXRvIHRleHRBbGlnbiA9IHRleHRBbGlnbkZvckxpbmUoc3R5bGUsIGxhc3RMaW5lSW5GbG93IHx8
IChsaW5lLmxhc3RGcmFnbWVudCgpLmlzVmFsaWQoKSAmJiBsaW5lLmxhc3RGcmFnbWVudCgpLnR5
cGUoKSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpIYXJkTGluZUJyZWFr
KSk7Ci0KLSAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXRleHQtMy8jd2hpdGUtc3Bh
Y2UtcGhhc2UtMgotICAgIGJvb2wgc2hvdWxkSGFuZ1RyYWlsaW5nV2hpdGVzcGFjZSA9IHN0eWxl
LndyYXBMaW5lcyAmJiBsaW5lLnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCk7Ci0gICAgYXV0byBo
YW5naW5nV2hpdGVzcGFjZVdpZHRoID0gc2hvdWxkSGFuZ1RyYWlsaW5nV2hpdGVzcGFjZSA/IGxp
bmUudHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKSA6IDA7Ci0KLSAgICBpZiAodGV4dEFsaWduID09
IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpIHsKLSAgICAgICAganVzdGlmeVJ1bnMobGluZSwgcnVu
cywgZmlyc3RSdW5JbmRleCk7Ci0gICAgICAgIGhhbmdpbmdXaGl0ZXNwYWNlV2lkdGggPSAwOwot
ICAgIH0gZWxzZQotICAgICAgICBsaW5lTG9naWNhbExlZnQgPSBjb21wdXRlTGluZUxlZnQobGlu
ZSwgdGV4dEFsaWduLCBoYW5naW5nV2hpdGVzcGFjZVdpZHRoKTsKLQotICAgIGZvciAoYXV0byBp
ID0gZmlyc3RSdW5JbmRleDsgaSA8IHJ1bnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcnVuc1tp
XS5sb2dpY2FsTGVmdCArPSBsaW5lTG9naWNhbExlZnQ7Ci0gICAgICAgIHJ1bnNbaV0ubG9naWNh
bFJpZ2h0ICs9IGxpbmVMb2dpY2FsTGVmdDsKLSAgICB9Ci0KLSAgICBpZiAoc2hvdWxkSGFuZ1Ry
YWlsaW5nV2hpdGVzcGFjZSAmJiBoYW5naW5nV2hpdGVzcGFjZVdpZHRoIDwgbGluZS50cmFpbGlu
Z1doaXRlc3BhY2VXaWR0aCgpKQotICAgICAgICBydW5zLmxhc3QoKS5sb2dpY2FsUmlnaHQgPSBy
dW5zLmxhc3QoKS5sb2dpY2FsUmlnaHQgLSAobGluZS50cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgp
IC0gaGFuZ2luZ1doaXRlc3BhY2VXaWR0aCk7Ci0KLSAgICBydW5zLmxhc3QoKS5pc0VuZE9mTGlu
ZSA9IHRydWU7Ci0gICAgKytsaW5lQ291bnQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGNyZWF0ZVRleHRS
dW5zKExheW91dDo6UnVuVmVjdG9yJiBydW5zLCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIHVuc2ln
bmVkJiBsaW5lQ291bnQpCi17Ci0gICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQmVmb3Jl
ID0gZmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7Ci0gICAgTGF5b3V0VW5pdCBsaW5lSGVp
Z2h0ID0gbGluZUhlaWdodEZyb21GbG93KGZsb3cpOwotICAgIExpbmVTdGF0ZSBsaW5lOwotICAg
IHVuc2lnbmVkIG51bWJlck9mUHJlY2VkaW5nTGluZXNXaXRoSHlwaGVuID0gMDsKLSAgICBib29s
IGlzRW5kT2ZDb250ZW50ID0gZmFsc2U7Ci0gICAgVGV4dEZyYWdtZW50SXRlcmF0b3IgdGV4dEZy
YWdtZW50SXRlcmF0b3IgPSBUZXh0RnJhZ21lbnRJdGVyYXRvcihmbG93KTsKLSAgICBPcHRpb25h
bDx1bnNpZ25lZD4gbGFzdFJ1bkluZGV4T2ZQcmV2aW91c0xpbmU7Ci0gICAgZG8gewotICAgICAg
ICBmbG93LnNldExvZ2ljYWxIZWlnaHQobGluZUhlaWdodCAqIGxpbmVDb3VudCArIGJvcmRlckFu
ZFBhZGRpbmdCZWZvcmUpOwotICAgICAgICBMaW5lU3RhdGUgcHJldmlvdXNMaW5lID0gbGluZTsK
LSAgICAgICAgbGluZSA9IExpbmVTdGF0ZSgpOwotICAgICAgICB1cGRhdGVMaW5lQ29uc3RyYWlu
cyhmbG93LCBsaW5lLCBwcmV2aW91c0xpbmUsIG51bWJlck9mUHJlY2VkaW5nTGluZXNXaXRoSHlw
aGVuLCB0ZXh0RnJhZ21lbnRJdGVyYXRvci5zdHlsZSgpLCAhbGluZUNvdW50KTsKLSAgICAgICAg
aXNFbmRPZkNvbnRlbnQgPSBjcmVhdGVMaW5lUnVucyhsaW5lLCBwcmV2aW91c0xpbmUsIHJ1bnMs
IHRleHRGcmFnbWVudEl0ZXJhdG9yKTsKLSAgICAgICAgY2xvc2VMaW5lRW5kaW5nQW5kQWRqdXN0
UnVucyhsaW5lLCBydW5zLCBsYXN0UnVuSW5kZXhPZlByZXZpb3VzTGluZSwgbGluZUNvdW50LCB0
ZXh0RnJhZ21lbnRJdGVyYXRvciwgaXNFbmRPZkNvbnRlbnQpOwotICAgICAgICBpZiAocnVucy5z
aXplKCkpCi0gICAgICAgICAgICBsYXN0UnVuSW5kZXhPZlByZXZpb3VzTGluZSA9IHJ1bnMuc2l6
ZSgpIC0gMTsKLSAgICB9IHdoaWxlICghaXNFbmRPZkNvbnRlbnQpOwotfQotCi1SZWY8TGF5b3V0
PiBjcmVhdGUoUmVuZGVyQmxvY2tGbG93JiBmbG93KQotewotICAgIHVuc2lnbmVkIGxpbmVDb3Vu
dCA9IDA7Ci0gICAgTGF5b3V0OjpSdW5WZWN0b3IgcnVuczsKLSAgICBjcmVhdGVUZXh0UnVucyhy
dW5zLCBmbG93LCBsaW5lQ291bnQpOwotICAgIHJldHVybiBMYXlvdXQ6OmNyZWF0ZShydW5zLCBs
aW5lQ291bnQsIGZsb3cpOwotfQotCi1SZWY8TGF5b3V0PiBMYXlvdXQ6OmNyZWF0ZShjb25zdCBS
dW5WZWN0b3ImIHJ1blZlY3RvciwgdW5zaWduZWQgbGluZUNvdW50LCBjb25zdCBSZW5kZXJCbG9j
a0Zsb3cmIGJsb2NrRmxvdykKLXsKLSAgICB2b2lkKiBzbG90ID0gV1RGOjpmYXN0TWFsbG9jKHNp
emVvZihMYXlvdXQpICsgc2l6ZW9mKFJ1bikgKiBydW5WZWN0b3Iuc2l6ZSgpKTsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyAoTm90TnVsbCwgc2xvdCkgTGF5b3V0KHJ1blZlY3RvciwgbGluZUNv
dW50LCBibG9ja0Zsb3cpKTsKLX0KLQotTGF5b3V0OjpMYXlvdXQoY29uc3QgUnVuVmVjdG9yJiBy
dW5WZWN0b3IsIHVuc2lnbmVkIGxpbmVDb3VudCwgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBibG9j
a0Zsb3cpCi0gICAgOiBtX2xpbmVDb3VudChsaW5lQ291bnQpCi0gICAgLCBtX3J1bkNvdW50KHJ1
blZlY3Rvci5zaXplKCkpCi0gICAgLCBtX2Jsb2NrRmxvd1JlbmRlcmVyKGJsb2NrRmxvdykKLXsK
LSAgICBtZW1jcHkobV9ydW5zLCBydW5WZWN0b3IuZGF0YSgpLCBtX3J1bkNvdW50ICogc2l6ZW9m
KFJ1bikpOwotfQotCi1jb25zdCBSdW5SZXNvbHZlciYgTGF5b3V0OjpydW5SZXNvbHZlcigpIGNv
bnN0Ci17Ci0gICAgaWYgKCFtX3J1blJlc29sdmVyKQotICAgICAgICBtX3J1blJlc29sdmVyID0g
bWFrZVVuaXF1ZTxSdW5SZXNvbHZlcj4obV9ibG9ja0Zsb3dSZW5kZXJlciwgKnRoaXMpOwotICAg
IHJldHVybiAqbV9ydW5SZXNvbHZlcjsKLX0KLQotTGF5b3V0Ojp+TGF5b3V0KCkKLXsKLSAgICBz
aW1wbGVMaW5lTGF5b3V0V2lsbEJlRGVsZXRlZCgqdGhpcyk7Ci19Ci0KLX0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA4ZDE2OTI2Y2VjM2IuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlJlbmRlclN0eWxl
Q29uc3RhbnRzLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmgiCi0jaW5j
bHVkZSAiVGV4dEZsYWdzLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBD
T01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHB1c2gpCi0jcHJhZ21hIHdhcm5pbmcoZGlz
YWJsZTogNDIwMCkgLy8gRGlzYWJsZSAiemVyby1zaXplZCBhcnJheSBpbiBzdHJ1Y3QvdW5pb24i
IHdhcm5pbmcKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlbmRlckJs
b2NrRmxvdzsKLQotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewotCi1jbGFzcyBSdW5SZXNv
bHZlcjsKLQotYm9vbCBjYW5Vc2VGb3IoY29uc3QgUmVuZGVyQmxvY2tGbG93Jik7Ci1ib29sIGNh
blVzZUZvckFmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyQmxvY2tGbG93JiwgU3R5bGVEaWZm
ZXJlbmNlKTsKLUF2b2lkYW5jZVJlYXNvbkZsYWdzIGNhblVzZUZvcldpdGhSZWFzb24oY29uc3Qg
UmVuZGVyQmxvY2tGbG93JiwgSW5jbHVkZVJlYXNvbnMpOwotCi1zdHJ1Y3QgUnVuIHsKLSNpZiBD
T01QSUxFUihNU1ZDKQotICAgIFJ1bigpIHsgfQotI2VuZGlmCi0gICAgUnVuKHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBlbmQsIGZsb2F0IGxvZ2ljYWxMZWZ0LCBmbG9hdCBsb2dpY2FsUmlnaHQs
IGJvb2wgaXNFbmRPZkxpbmUsIGJvb2wgaGFzSHlwaGVuLCBib29sIGlzTGluZUJyZWFrKQotICAg
ICAgICA6IGVuZChlbmQpCi0gICAgICAgICwgc3RhcnQoc3RhcnQpCi0gICAgICAgICwgaXNFbmRP
ZkxpbmUoaXNFbmRPZkxpbmUpCi0gICAgICAgICwgaGFzSHlwaGVuKGhhc0h5cGhlbikKLSAgICAg
ICAgLCBpc0xpbmVCcmVhayhpc0xpbmVCcmVhaykKLSAgICAgICAgLCBsb2dpY2FsTGVmdChsb2dp
Y2FsTGVmdCkKLSAgICAgICAgLCBsb2dpY2FsUmlnaHQobG9naWNhbFJpZ2h0KQotICAgIHsgfQot
Ci0gICAgdW5zaWduZWQgZW5kOwotICAgIHVuc2lnbmVkIHN0YXJ0IDogMjk7Ci0gICAgdW5zaWdu
ZWQgaXNFbmRPZkxpbmUgOiAxOwotICAgIHVuc2lnbmVkIGhhc0h5cGhlbiA6IDE7Ci0gICAgdW5z
aWduZWQgaXNMaW5lQnJlYWsgOiAxOwotICAgIGZsb2F0IGxvZ2ljYWxMZWZ0OwotICAgIGZsb2F0
IGxvZ2ljYWxSaWdodDsKLSAgICAvLyBUT0RPOiBNb3ZlIHRoZXNlIG9wdGlvbmFsIGl0ZW1zIG91
dCBvZiBTaW1wbGVMaW5lTGF5b3V0OjpSdW4gdG8gYSBzdXBwbGVtZW50YXJ5IHN0cnVjdHVyZS4K
LSAgICBmbG9hdCBleHBhbnNpb24geyAwIH07Ci0gICAgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5z
aW9uQmVoYXZpb3IgeyBGb3JiaWRMZWZ0RXhwYW5zaW9uIHwgRm9yYmlkUmlnaHRFeHBhbnNpb24g
fTsKLX07Ci0KLXN0cnVjdCBTaW1wbGVMaW5lU3RydXQgewotICAgIHVuc2lnbmVkIGxpbmVCcmVh
azsKLSAgICBmbG9hdCBvZmZzZXQ7Ci19OwotCi1jbGFzcyBMYXlvdXQgOiBwdWJsaWMgUmVmQ291
bnRlZDxMYXlvdXQ+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICB1c2luZyBSdW5WZWN0b3IgPSBWZWN0b3I8UnVuLCAxMD47Ci0gICAgdXNpbmcgU2ltcGxlTGlu
ZVN0cnV0cyA9IFZlY3RvcjxTaW1wbGVMaW5lU3RydXQsIDQ+OwotICAgIHN0YXRpYyBSZWY8TGF5
b3V0PiBjcmVhdGUoY29uc3QgUnVuVmVjdG9yJiwgdW5zaWduZWQgbGluZUNvdW50LCBjb25zdCBS
ZW5kZXJCbG9ja0Zsb3cmKTsKLQotICAgIH5MYXlvdXQoKTsKLQotICAgIHVuc2lnbmVkIGxpbmVD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNvdW50OyB9Ci0KLSAgICB1bnNpZ25lZCBydW5D
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcnVuQ291bnQ7IH0KLSAgICBjb25zdCBSdW4mIHJ1bkF0
KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fcnVuc1tpXTsgfQotCi0gICAgdm9pZCBzZXRJ
c1BhZ2luYXRlZCgpIHsgbV9pc1BhZ2luYXRlZCA9IHRydWU7IH0KLSAgICBib29sIGlzUGFnaW5h
dGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1BhZ2luYXRlZDsgfQotICAgIGJvb2wgaGFzTGluZVN0
cnV0cygpIGNvbnN0IHsgcmV0dXJuICFtX2xpbmVTdHJ1dHMuaXNFbXB0eSgpOyB9Ci0gICAgdm9p
ZCBzZXRMaW5lU3RydXRzKFNpbXBsZUxpbmVTdHJ1dHMmJiBsaW5lU3RydXRzKSB7IG1fbGluZVN0
cnV0cyA9IGxpbmVTdHJ1dHM7IH0KLSAgICBjb25zdCBTaW1wbGVMaW5lU3RydXRzJiBzdHJ1dHMo
KSBjb25zdCB7IHJldHVybiBtX2xpbmVTdHJ1dHM7IH0KLSAgICBjb25zdCBSdW5SZXNvbHZlciYg
cnVuUmVzb2x2ZXIoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBMYXlvdXQoY29uc3QgUnVuVmVj
dG9yJiwgdW5zaWduZWQgbGluZUNvdW50LCBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmKTsKLQotICAg
IHVuc2lnbmVkIG1fbGluZUNvdW50OwotICAgIHVuc2lnbmVkIG1fcnVuQ291bnQ7Ci0gICAgYm9v
bCBtX2lzUGFnaW5hdGVkIHsgZmFsc2UgfTsKLSAgICBTaW1wbGVMaW5lU3RydXRzIG1fbGluZVN0
cnV0czsKLSAgICBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIG1fYmxvY2tGbG93UmVuZGVyZXI7Ci0g
ICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8UnVuUmVzb2x2ZXI+IG1fcnVuUmVzb2x2ZXI7Ci0g
ICAgUnVuIG1fcnVuc1swXTsKLX07Ci0KLVJlZjxMYXlvdXQ+IGNyZWF0ZShSZW5kZXJCbG9ja0Zs
b3cmKTsKLQotfQotfQotCi0jaWYgQ09NUElMRVIoTVNWQykKLSNwcmFnbWEgd2FybmluZyhwb3Ap
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0Q292ZXJhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXRDb3ZlcmFnZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NjgxMTYz
ODI4MC4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0Q292ZXJhZ2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzcyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91
dENvdmVyYWdlLmgiCi0KLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxv
Y2tGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlNldHRpbmdz
LmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1Rl
eHRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIFNpbXBsZUxpbmVM
YXlvdXQgewotCi0jaWZuZGVmIE5ERUJVRwotc3RhdGljIHZvaWQgcHJpbnRSZWFzb24oQXZvaWRh
bmNlUmVhc29uIHJlYXNvbiwgVGV4dFN0cmVhbSYgc3RyZWFtKQotewotICAgIHN3aXRjaCAocmVh
c29uKSB7Ci0gICAgY2FzZSBGbG93SXNJbnNpZGVBTm9uTXVsdGlDb2x1bW5UaHJlYWQ6Ci0gICAg
ICAgIHN0cmVhbSA8PCAiZmxvdyBpcyBpbnNpZGUgYSBub24tbXVsdGljb2x1bW4gY29udGFpbmVy
IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzSG9yaXpvbmFsV3JpdGluZ01vZGU6
Ci0gICAgICAgIHN0cmVhbSA8PCAiaG9yaXpvbnRhbCB3cml0aW5nIG1vZGUiOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZsb3dIYXNPdXRsaW5lOgotICAgICAgICBzdHJlYW0gPDwgIm91dGxp
bmUiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dJc1J1Ynk6Ci0gICAgICAgIHN0cmVh
bSA8PCAicnVieSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc0hhbmdpbmdQdW5j
dHVhdGlvbjoKLSAgICAgICAgc3RyZWFtIDw8ICJoYW5naW5nIHB1bmN0dWF0aW9uIjsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SXNQYWdpbmF0ZWQ6Ci0gICAgICAgIHN0cmVhbSA8PCAi
cGFnaW5hdGVkIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzVGV4dE92ZXJmbG93
OgotICAgICAgICBzdHJlYW0gPDwgInRleHQtb3ZlcmZsb3ciOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZsb3dJc0RlcHJpY2F0ZWRGbGV4Qm94OgotICAgICAgICBzdHJlYW0gPDwgImRlcHJp
Y2F0ZWRGbGV4Qm94IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93UGFyZW50SXNQbGFj
ZWhvbGRlckVsZW1lbnQ6Ci0gICAgICAgIHN0cmVhbSA8PCAicGxhY2Vob2xkZXIgZWxlbWVudCI7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd1BhcmVudElzVGV4dEFyZWFXaXRoV3JhcHBp
bmc6Ci0gICAgICAgIHN0cmVhbSA8PCAid3JhcHBpbmcgdGV4dGFyZWEiOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZsb3dIYXNOb25TdXBwb3J0ZWRDaGlsZDoKLSAgICAgICAgc3RyZWFtIDw8
ICJuZXN0ZWQgcmVuZGVyZXJzIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzVW5z
dXBwb3J0ZWRGbG9hdDoKLSAgICAgICAgc3RyZWFtIDw8ICJjb21wbGljYXRlZCBmbG9hdCI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc1Vuc3VwcG9ydGVkVW5kZXJsaW5lRGVjb3Jh
dGlvbjoKLSAgICAgICAgc3RyZWFtIDw8ICJ0ZXh0LXVuZGVybGluZS1wb3NpdGlvbjogdW5kZXIi
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNKdXN0aWZpZWROb25MYXRpblRleHQ6
Ci0gICAgICAgIHN0cmVhbSA8PCAidGV4dC1hbGlnbjoganVzdGlmeSB3aXRoIG5vbi1sYXRpbiB0
ZXh0IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzT3ZlcmZsb3dOb3RWaXNpYmxl
OgotICAgICAgICBzdHJlYW0gPDwgIm92ZXJmbG93OiBoaWRkZW4gfCBzY3JvbGwgfCBhdXRvIjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzV2ViS2l0TkJTUE1vZGU6Ci0gICAgICAg
IHN0cmVhbSA8PCAiLXdlYmtpdC1uYnNwLW1vZGU6IHNwYWNlIjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBGbG93SXNOb3RMVFI6Ci0gICAgICAgIHN0cmVhbSA8PCAiZGlyIGlzIG5vdCBMVFIi
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNMaW5lQm94Q29udGFpblByb3BlcnR5
OgotICAgICAgICBzdHJlYW0gPDwgImxpbmUtYm94LWNvbnRhaW4gdmFsdWUgaW5kaWNhdGVzIHZh
cmlhYmxlIGxpbmUgaGVpZ2h0IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SXNOb3RU
b3BUb0JvdHRvbToKLSAgICAgICAgc3RyZWFtIDw8ICJub24gdG9wLXRvLWJvdHRvbSBmbG93IjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzTGluZUJyZWFrOgotICAgICAgICBzdHJl
YW0gPDwgImxpbmUtYnJlYWsgcHJvcGVydHkiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZs
b3dIYXNOb25Ob3JtYWxVbmljb2RlQmlEaToKLSAgICAgICAgc3RyZWFtIDw8ICJub24tbm9ybWFs
IFVuaWNvZGUgYmlkaSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc1JUTE9yZGVy
aW5nOgotICAgICAgICBzdHJlYW0gPDwgIi13ZWJraXQtcnRsLW9yZGVyaW5nIjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzTGluZUFsaWduRWRnZXM6Ci0gICAgICAgIHN0cmVhbSA8
PCAiLXdlYmtpdC1saW5lLWFsaWduIGVkZ2VzIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
bG93SGFzTGluZVNuYXA6Ci0gICAgICAgIHN0cmVhbSA8PCAiLXdlYmtpdC1saW5lLXNuYXAgcHJv
cGVydHkiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNUZXh0RW1waGFzaXNGaWxs
T3JNYXJrOgotICAgICAgICBzdHJlYW0gPDwgInRleHQtZW1waGFzaXMgKGZpbGwvbWFyaykiOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNQc2V1ZG9GaXJzdExpbmU6Ci0gICAgICAg
IHN0cmVhbSA8PCAiZmlyc3QtbGluZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hh
c1BzZXVkb0ZpcnN0TGV0dGVyOgotICAgICAgICBzdHJlYW0gPDwgImZpcnN0LWxldHRlciI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc1RleHRDb21iaW5lOgotICAgICAgICBzdHJl
YW0gPDwgInRleHQgY29tYmluZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc1Rl
eHRGaWxsQm94OgotICAgICAgICBzdHJlYW0gPDwgImJhY2tncm91bmQtY29sb3IgKHRleHQtZmls
bCkiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNCb3JkZXJGaXRMaW5lczoKLSAg
ICAgICAgc3RyZWFtIDw8ICItd2Via2l0LWJvcmRlci1maXQiOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZsb3dIYXNOb25BdXRvTGluZUJyZWFrOgotICAgICAgICBzdHJlYW0gPDwgImxpbmUt
YnJlYWsgaXMgbm90IGF1dG8iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNUZXh0
U2VjdXJpdHk6Ci0gICAgICAgIHN0cmVhbSA8PCAidGV4dC1zZWN1cml0eSBpcyBub3Qgbm9uZSI7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc1NWR0ZvbnQ6Ci0gICAgICAgIHN0cmVh
bSA8PCAiU1ZHIGZvbnQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dUZXh0SGFzU29m
dEh5cGhlbjoKLSAgICAgICAgc3RyZWFtIDw8ICJzb2Z0IGh5cGhlbiBjaGFyYWN0ZXIiOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dUZXh0SGFzRGlyZWN0aW9uQ2hhcmFjdGVyOgotICAg
ICAgICBzdHJlYW0gPDwgImRpcmVjdGlvbiBjaGFyYWN0ZXIiOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZsb3dJc01pc3NpbmdQcmltYXJ5Rm9udDoKLSAgICAgICAgc3RyZWFtIDw8ICJtaXNz
aW5nIHByaW1hcnkgZm9udCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd1ByaW1hcnlG
b250SXNJbnN1ZmZpY2llbnQ6Ci0gICAgICAgIHN0cmVhbSA8PCAibWlzc2luZyBnbHlwaCBvciBn
bHlwaCBuZWVkcyBhbm90aGVyIGZvbnQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dU
ZXh0SXNDb21iaW5lVGV4dDoKLSAgICAgICAgc3RyZWFtIDw8ICJ0ZXh0IGlzIGNvbWJpbmUiOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dUZXh0SXNSZW5kZXJDb3VudGVyOgotICAgICAg
ICBzdHJlYW0gPDwgInVuc3VwcG9ydGVkIFJlbmRlckNvdW50ZXIiOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZsb3dUZXh0SXNSZW5kZXJRdW90ZToKLSAgICAgICAgc3RyZWFtIDw8ICJ1bnN1
cHBvcnRlZCBSZW5kZXJRdW90ZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd1RleHRJ
c1RleHRGcmFnbWVudDoKLSAgICAgICAgc3RyZWFtIDw8ICJ1bnN1cHBvcnRlZCBUZXh0RnJhZ21l
bnQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dUZXh0SXNTVkdJbmxpbmVUZXh0Ogot
ICAgICAgICBzdHJlYW0gPDwgInVuc3VwcG9ydGVkIFNWR0lubGluZVRleHQiOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZsb3dIYXNDb21wbGV4Rm9udENvZGVQYXRoOgotICAgICAgICBzdHJl
YW0gPDwgInRleHQgd2l0aCBjb21wbGV4IGZvbnQgY29kZXBhdGgiOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZsb3dIYXNUZXh0U2hhZG93OgotICAgICAgICBzdHJlYW0gPDwgInRleHQtc2hh
ZG93IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93Q2hpbGRJc1NlbGVjdGVkOgotICAg
ICAgICBzdHJlYW0gPDwgInNlbGVjdGVkIGNvbnRlbnQiOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZsb3dGb250SGFzT3ZlcmZsb3dHbHlwaDoKLSAgICAgICAgc3RyZWFtIDw8ICItd2Via2l0
LWxpbmUtYm94LWNvbnRhaW46IGdseXBocyB3aXRoIG92ZXJmbG93aW5nIHRleHQuIjsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93VGV4dEhhc1N1cnJvZ2F0ZVBhaXI6Ci0gICAgICAgIHN0
cmVhbSA8PCAic3Vycm9nYXRlIHBhaXIiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE11bHRp
Q29sdW1uRmxvd0lzTm90VG9wTGV2ZWw6Ci0gICAgICAgIHN0cmVhbSA8PCAibm9uIHRvcCBsZXZl
bCBjb2x1bW4iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE11bHRpQ29sdW1uRmxvd0hhc0Nv
bHVtblNwYW5uZXI6Ci0gICAgICAgIHN0cmVhbSA8PCAiY29sdW1uIGhhcyBzcGFubmVyIjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNdWx0aUNvbHVtbkZsb3dWZXJ0aWNhbEFsaWduOgotICAg
ICAgICBzdHJlYW0gPDwgImNvbHVtbiB3aXRoIHZlcnRpY2FsLWFsaWduICE9IGJhc2VsaW5lIjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNdWx0aUNvbHVtbkZsb3dJc0Zsb2F0aW5nOgotICAg
ICAgICBzdHJlYW0gPDwgImNvbHVtbiB3aXRoIGZsb2F0aW5nIG9iamVjdHMiOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZsb3dJbmNsdWRlc0RvY3VtZW50TWFya2VyczoKLSAgICAgICAgc3Ry
ZWFtIDw8ICJ0ZXh0IGluY2x1ZGVzIGRvY3VtZW50IG1hcmtlcnMiOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZsb3dUZXh0SXNFbXB0eToKLSAgICBjYXNlIEZsb3dIYXNOb0NoaWxkOgotICAg
IGNhc2UgRmxvd0hhc05vUGFyZW50OgotICAgIGNhc2UgRmVhdHVyZUlzRGlzYWJsZWQ6Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBwcmludFJl
YXNvbnMoQXZvaWRhbmNlUmVhc29uRmxhZ3MgcmVhc29ucywgVGV4dFN0cmVhbSYgc3RyZWFtKQot
ewotICAgIGJvb2wgZmlyc3QgPSB0cnVlOwotICAgIGZvciAoYXV0byByZWFzb25JdGVtID0gRW5k
T2ZSZWFzb25zID4+IDE7IHJlYXNvbkl0ZW0gIT0gTm9SZWFzb247IHJlYXNvbkl0ZW0gPj49IDEp
IHsKLSAgICAgICAgaWYgKCEocmVhc29ucyAmIHJlYXNvbkl0ZW0pKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIHN0cmVhbSA8PCAoZmlyc3QgPyAiICIgOiAiLCAiKTsKLSAgICAgICAg
Zmlyc3QgPSBmYWxzZTsKLSAgICAgICAgcHJpbnRSZWFzb24ocmVhc29uSXRlbSwgc3RyZWFtKTsK
LSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50VGV4dEZvclN1YnRyZWUoY29uc3QgUmVuZGVy
T2JqZWN0JiByZW5kZXJlciwgdW5zaWduZWQmIGNoYXJhY3RlcnNMZWZ0LCBUZXh0U3RyZWFtJiBz
dHJlYW0pCi17Ci0gICAgaWYgKCFjaGFyYWN0ZXJzTGVmdCkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmIChpczxSZW5kZXJUZXh0PihyZW5kZXJlcikpIHsKLSAgICAgICAgU3RyaW5nIHRleHQgPSBk
b3duY2FzdDxSZW5kZXJUZXh0PihyZW5kZXJlcikudGV4dCgpOwotICAgICAgICB0ZXh0ID0gdGV4
dC5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgdW5zaWduZWQgbGVuID0gc3RkOjptaW4oY2hh
cmFjdGVyc0xlZnQsIHRleHQubGVuZ3RoKCkpOwotICAgICAgICBzdHJlYW0gPDwgdGV4dC5sZWZ0
KGxlbik7Ci0gICAgICAgIGNoYXJhY3RlcnNMZWZ0IC09IGxlbjsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpZiAoIWlzPFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGZvciAoY29uc3QgYXV0byogY2hpbGQgPSBkb3duY2FzdDxSZW5kZXJFbGVtZW50
PihyZW5kZXJlcikuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkKLSAgICAgICAgcHJpbnRUZXh0Rm9yU3VidHJlZSgqY2hpbGQsIGNoYXJhY3RlcnNMZWZ0
LCBzdHJlYW0pOwotfQotCi1zdGF0aWMgdW5zaWduZWQgdGV4dExlbmd0aEZvclN1YnRyZWUoY29u
c3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikKLXsKLSAgICBpZiAoaXM8UmVuZGVyVGV4dD4ocmVu
ZGVyZXIpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGV4dD4ocmVuZGVyZXIpLnRl
eHQoKS5sZW5ndGgoKTsKLSAgICBpZiAoIWlzPFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IDA7Ci0gICAgZm9yIChj
b25zdCBhdXRvKiBjaGlsZCA9IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKS5maXJz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICB0
ZXh0TGVuZ3RoICs9IHRleHRMZW5ndGhGb3JTdWJ0cmVlKCpjaGlsZCk7Ci0gICAgcmV0dXJuIHRl
eHRMZW5ndGg7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbGxlY3ROb25FbXB0eUxlYWZSZW5kZXJCbG9j
a0Zsb3dzKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIEhhc2hTZXQ8Y29uc3QgUmVuZGVy
QmxvY2tGbG93Kj4mIGxlYWZSZW5kZXJlcnMpCi17Ci0gICAgaWYgKGlzPFJlbmRlclRleHQ+KHJl
bmRlcmVyKSkgewotICAgICAgICBpZiAoIWRvd25jYXN0PFJlbmRlclRleHQ+KHJlbmRlcmVyKS50
ZXh0KCkubGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIC8vIEZpbmQgUmVu
ZGVyQmxvY2tGbG93IGFuY2VzdG9yLgotICAgICAgICBmb3IgKGNvbnN0IGF1dG8qIGN1cnJlbnQg
PSByZW5kZXJlci5wYXJlbnQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudCgp
KSB7Ci0gICAgICAgICAgICBpZiAoIWlzPFJlbmRlckJsb2NrRmxvdz4oY3VycmVudCkpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBsZWFmUmVuZGVyZXJzLmFkZChkb3du
Y2FzdDxSZW5kZXJCbG9ja0Zsb3c+KGN1cnJlbnQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFpczxSZW5kZXJFbGVtZW50
PihyZW5kZXJlcikpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKGNvbnN0IGF1dG8qIGNoaWxk
ID0gZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNvbGxlY3ROb25FbXB0eUxl
YWZSZW5kZXJCbG9ja0Zsb3dzKCpjaGlsZCwgbGVhZlJlbmRlcmVycyk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGNvbGxlY3ROb25FbXB0eUxlYWZSZW5kZXJCbG9ja0Zsb3dzRm9yQ3VycmVudFBhZ2UoSGFz
aFNldDxjb25zdCBSZW5kZXJCbG9ja0Zsb3cqPiYgbGVhZlJlbmRlcmVycykKLXsKLSAgICBmb3Ig
KGNvbnN0IGF1dG8qIGRvY3VtZW50IDogRG9jdW1lbnQ6OmFsbERvY3VtZW50cygpKSB7Ci0gICAg
ICAgIGlmICghZG9jdW1lbnQtPnJlbmRlclZpZXcoKSB8fCBkb2N1bWVudC0+YmFja0ZvcndhcmRD
YWNoZVN0YXRlKCkgIT0gRG9jdW1lbnQ6Ok5vdEluQmFja0ZvcndhcmRDYWNoZSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpICYm
ICFkb2N1bWVudC0+aXNYSFRNTERvY3VtZW50KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgY29sbGVjdE5vbkVtcHR5TGVhZlJlbmRlckJsb2NrRmxvd3MoKmRvY3VtZW50LT5yZW5k
ZXJWaWV3KCksIGxlYWZSZW5kZXJlcnMpOwotICAgIH0KLX0KLQotdm9pZCB0b2dnbGVTaW1wbGVM
aW5lTGF5b3V0KCkKLXsKLSAgICBmb3IgKGF1dG8qIGRvY3VtZW50IDogRG9jdW1lbnQ6OmFsbERv
Y3VtZW50cygpKSB7Ci0gICAgICAgIGF1dG8mIHNldHRpbmdzID0gZG9jdW1lbnQtPm11dGFibGVT
ZXR0aW5ncygpOwotICAgICAgICBzZXR0aW5ncy5zZXRTaW1wbGVMaW5lTGF5b3V0RW5hYmxlZCgh
c2V0dGluZ3Muc2ltcGxlTGluZUxheW91dEVuYWJsZWQoKSk7Ci0gICAgfQotfQotCi12b2lkIHBy
aW50U2ltcGxlTGluZUxheW91dEJsb2NrTGlzdCgpCi17Ci0gICAgSGFzaFNldDxjb25zdCBSZW5k
ZXJCbG9ja0Zsb3cqPiBsZWFmUmVuZGVyZXJzOwotICAgIGNvbGxlY3ROb25FbXB0eUxlYWZSZW5k
ZXJCbG9ja0Zsb3dzRm9yQ3VycmVudFBhZ2UobGVhZlJlbmRlcmVycyk7Ci0gICAgaWYgKCFsZWFm
UmVuZGVyZXJzLnNpemUoKSkgewotICAgICAgICBXVEZMb2dBbHdheXMoIk5vIHRleHQgZm91bmQg
aW4gdGhpcyBkb2N1bWVudFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgVGV4dFN0
cmVhbSBzdHJlYW07Ci0gICAgc3RyZWFtIDw8ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7Ci0gICAgZm9yIChjb25zdCBhdXRvKiBmbG93IDog
bGVhZlJlbmRlcmVycykgewotICAgICAgICBhdXRvIHJlYXNvbiA9IGNhblVzZUZvcldpdGhSZWFz
b24oKmZsb3csIEluY2x1ZGVSZWFzb25zOjpBbGwpOwotICAgICAgICBpZiAocmVhc29uID09IE5v
UmVhc29uKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVuc2lnbmVkIHByaW50ZWRM
ZW5ndGggPSAzMDsKLSAgICAgICAgc3RyZWFtIDw8ICJcIiI7Ci0gICAgICAgIHByaW50VGV4dEZv
clN1YnRyZWUoKmZsb3csIHByaW50ZWRMZW5ndGgsIHN0cmVhbSk7Ci0gICAgICAgIGZvciAoO3By
aW50ZWRMZW5ndGggPiAwOyAtLXByaW50ZWRMZW5ndGgpCi0gICAgICAgICAgICBzdHJlYW0gPDwg
IiAiOwotICAgICAgICBzdHJlYW0gPDwgIlwiKCIgPDwgdGV4dExlbmd0aEZvclN1YnRyZWUoKmZs
b3cpIDw8ICIpOiI7Ci0gICAgICAgIHByaW50UmVhc29ucyhyZWFzb24sIHN0cmVhbSk7Ci0gICAg
ICAgIHN0cmVhbSA8PCAiXG4iOwotICAgIH0KLSAgICBzdHJlYW0gPDwgIi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKLSAgICBXVEZMb2dBbHdh
eXMoIiVzIiwgc3RyZWFtLnJlbGVhc2UoKS51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBwcmlu
dFNpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZSgpCi17Ci0gICAgSGFzaFNldDxjb25zdCBSZW5kZXJC
bG9ja0Zsb3cqPiBsZWFmUmVuZGVyZXJzOwotICAgIGNvbGxlY3ROb25FbXB0eUxlYWZSZW5kZXJC
bG9ja0Zsb3dzRm9yQ3VycmVudFBhZ2UobGVhZlJlbmRlcmVycyk7Ci0gICAgaWYgKCFsZWFmUmVu
ZGVyZXJzLnNpemUoKSkgewotICAgICAgICBXVEZMb2dBbHdheXMoIk5vIHRleHQgZm91bmQgaW4g
dGhpcyBkb2N1bWVudFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgVGV4dFN0cmVh
bSBzdHJlYW07Ci0gICAgSGFzaE1hcDxBdm9pZGFuY2VSZWFzb24sIHVuc2lnbmVkPiBmbG93U3Rh
dGlzdGljczsKLSAgICB1bnNpZ25lZCB0ZXh0TGVuZ3RoID0gMDsKLSAgICB1bnNpZ25lZCB1bnN1
cHBvcnRlZFRleHRMZW5ndGggPSAwOwotICAgIHVuc2lnbmVkIG51bWJlck9mVW5zdXBwb3J0ZWRM
ZWFmQmxvY2tzID0gMDsKLSAgICB1bnNpZ25lZCBzdXBwb3J0ZWRCdXRGb3JjZWRUb0xpbmVMYXlv
dXRUZXh0TGVuZ3RoID0gMDsKLSAgICB1bnNpZ25lZCBudW1iZXJPZlN1cHBvcnRlZEJ1dEZvcmNl
ZFRvTGluZUxheW91dExlYWZCbG9ja3MgPSAwOwotICAgIGZvciAoY29uc3QgYXV0byogZmxvdyA6
IGxlYWZSZW5kZXJlcnMpIHsKLSAgICAgICAgYXV0byBmbG93TGVuZ3RoID0gdGV4dExlbmd0aEZv
clN1YnRyZWUoKmZsb3cpOwotICAgICAgICB0ZXh0TGVuZ3RoICs9IGZsb3dMZW5ndGg7Ci0gICAg
ICAgIGF1dG8gcmVhc29ucyA9IGNhblVzZUZvcldpdGhSZWFzb24oKmZsb3csIEluY2x1ZGVSZWFz
b25zOjpBbGwpOwotICAgICAgICBpZiAocmVhc29ucyA9PSBOb1JlYXNvbikgewotICAgICAgICAg
ICAgaWYgKGZsb3ctPmxpbmVMYXlvdXRQYXRoKCkgPT0gUmVuZGVyQmxvY2tGbG93OjpGb3JjZUxp
bmVCb3hlc1BhdGgpIHsKLSAgICAgICAgICAgICAgICBzdXBwb3J0ZWRCdXRGb3JjZWRUb0xpbmVM
YXlvdXRUZXh0TGVuZ3RoICs9IGZsb3dMZW5ndGg7Ci0gICAgICAgICAgICAgICAgKytudW1iZXJP
ZlN1cHBvcnRlZEJ1dEZvcmNlZFRvTGluZUxheW91dExlYWZCbG9ja3M7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICArK251bWJlck9mVW5z
dXBwb3J0ZWRMZWFmQmxvY2tzOwotICAgICAgICB1bnN1cHBvcnRlZFRleHRMZW5ndGggKz0gZmxv
d0xlbmd0aDsKLSAgICAgICAgZm9yIChhdXRvIHJlYXNvbkl0ZW0gPSBFbmRPZlJlYXNvbnMgPj4g
MTsgcmVhc29uSXRlbSAhPSBOb1JlYXNvbjsgcmVhc29uSXRlbSA+Pj0gMSkgewotICAgICAgICAg
ICAgaWYgKCEocmVhc29ucyAmIHJlYXNvbkl0ZW0pKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBmbG93U3RhdGlzdGljcy5hZGQocmVhc29uSXRl
bSwgZmxvd0xlbmd0aCk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAg
ICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gZmxvd0xlbmd0aDsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBzdHJlYW0gPDwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKLSAgICBzdHJlYW0gPDwgIk51bWJlciBvZiBibG9j
a3M6IHRvdGFsKCIgPDwgIGxlYWZSZW5kZXJlcnMuc2l6ZSgpIDw8ICIpIG5vbi1zaW1wbGUoIiA8
PCBudW1iZXJPZlVuc3VwcG9ydGVkTGVhZkJsb2NrcyA8PCAiKVxuQ29udGVudCBsZW5ndGg6IHRv
dGFsKCIgPDwKLSAgICAgICAgdGV4dExlbmd0aCA8PCAiKSBub24tc2ltcGxlKCIgPDwgdW5zdXBw
b3J0ZWRUZXh0TGVuZ3RoIDw8ICIpXG4iOwotICAgIGZvciAoY29uc3QgYXV0byYgcmVhc29uRW50
cnkgOiBmbG93U3RhdGlzdGljcykgewotICAgICAgICBwcmludFJlYXNvbihyZWFzb25FbnRyeS5r
ZXksIHN0cmVhbSk7Ci0gICAgICAgIHN0cmVhbSA8PCAiOiAiIDw8IChmbG9hdClyZWFzb25FbnRy
eS52YWx1ZSAvIChmbG9hdCl0ZXh0TGVuZ3RoICogMTAwIDw8ICIlXG4iOwotICAgIH0KLSAgICBp
ZiAoc3VwcG9ydGVkQnV0Rm9yY2VkVG9MaW5lTGF5b3V0VGV4dExlbmd0aCkgewotICAgICAgICBz
dHJlYW0gPDwgIlNpbXBsZSBsaW5lIGxheW91dCBwb3RlbnRpYWwgY292ZXJhZ2U6ICIgPDwgKGZs
b2F0KSh0ZXh0TGVuZ3RoIC0gdW5zdXBwb3J0ZWRUZXh0TGVuZ3RoKSAvIChmbG9hdCl0ZXh0TGVu
Z3RoICogMTAwIDw8ICIlXG5cbiI7Ci0gICAgICAgIHN0cmVhbSA8PCAiU2ltcGxlIGxpbmUgbGF5
b3V0IGFjdHVhbCBjb3ZlcmFnZTogIiA8PCAoZmxvYXQpKHRleHRMZW5ndGggLSB1bnN1cHBvcnRl
ZFRleHRMZW5ndGggLSBzdXBwb3J0ZWRCdXRGb3JjZWRUb0xpbmVMYXlvdXRUZXh0TGVuZ3RoKSAv
IChmbG9hdCl0ZXh0TGVuZ3RoICogMTAwIDw8ICIlXG5Gb3JjZWQgbGluZSBsYXlvdXQgYmxvY2tz
OiAiIDw8IG51bWJlck9mU3VwcG9ydGVkQnV0Rm9yY2VkVG9MaW5lTGF5b3V0TGVhZkJsb2NrcyA8
PCAiIGNvbnRlbnQgbGVuZ3RoOiAiIDw8IHN1cHBvcnRlZEJ1dEZvcmNlZFRvTGluZUxheW91dFRl
eHRMZW5ndGggPDwgIigiIDw8IChmbG9hdClzdXBwb3J0ZWRCdXRGb3JjZWRUb0xpbmVMYXlvdXRU
ZXh0TGVuZ3RoIC8gKGZsb2F0KXRleHRMZW5ndGggKiAxMDAgPDwgIiUpIjsKLSAgICB9IGVsc2UK
LSAgICAgICAgc3RyZWFtIDw8ICJTaW1wbGUgbGluZSBsYXlvdXQgY292ZXJhZ2U6ICIgPDwgKGZs
b2F0KSh0ZXh0TGVuZ3RoIC0gdW5zdXBwb3J0ZWRUZXh0TGVuZ3RoKSAvIChmbG9hdCl0ZXh0TGVu
Z3RoICogMTAwIDw8ICIlIjsKLSAgICBzdHJlYW0gPDwgIlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iOwotICAgIFdURkxvZ0Fsd2F5cygiJXMi
LCBzdHJlYW0ucmVsZWFzZSgpLnV0ZjgoKS5kYXRhKCkpOwotfQotI2VuZGlmCi0KLX0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Q292ZXJh
Z2UuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2Uu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgyNGU5NTBjNGEwLi4wMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRDb3ZlcmFn
ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQg
ewotCi0jaWZuZGVmIE5ERUJVRwotdm9pZCBwcmludFNpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZSgp
Owotdm9pZCBwcmludFNpbXBsZUxpbmVMYXlvdXRCbG9ja0xpc3QoKTsKLXZvaWQgdG9nZ2xlU2lt
cGxlTGluZUxheW91dCgpOwotI2VuZGlmCi0KLWVudW0gQXZvaWRhbmNlUmVhc29uXyA6IHVpbnQ2
NF90IHsKLSAgICBGbG93SXNJbnNpZGVBTm9uTXVsdGlDb2x1bW5UaHJlYWQgICAgID0gMUxMVSAg
PDwgMCwKLSAgICBGbG93SGFzSG9yaXpvbmFsV3JpdGluZ01vZGUgICAgICAgICAgID0gMUxMVSAg
PDwgMSwKLSAgICBGbG93SGFzT3V0bGluZSAgICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAg
PDwgMiwKLSAgICBGbG93SXNSdWJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAg
PDwgMywKLSAgICBGbG93SXNQYWdpbmF0ZWQgICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAg
PDwgNCwKLSAgICBGbG93SGFzVGV4dE92ZXJmbG93ICAgICAgICAgICAgICAgICAgID0gMUxMVSAg
PDwgNSwKLSAgICBGbG93SXNEZXByaWNhdGVkRmxleEJveCAgICAgICAgICAgICAgID0gMUxMVSAg
PDwgNiwKLSAgICBGbG93UGFyZW50SXNQbGFjZWhvbGRlckVsZW1lbnQgICAgICAgID0gMUxMVSAg
PDwgNywKLSAgICBGbG93UGFyZW50SXNUZXh0QXJlYVdpdGhXcmFwcGluZyAgICAgID0gMUxMVSAg
PDwgOCwKLSAgICBGbG93SGFzTm9uU3VwcG9ydGVkQ2hpbGQgICAgICAgICAgICAgID0gMUxMVSAg
PDwgOSwKLSAgICBGbG93SGFzVW5zdXBwb3J0ZWRGbG9hdCAgICAgICAgICAgICAgID0gMUxMVSAg
PDwgMTAsCi0gICAgRmxvd0hhc1Vuc3VwcG9ydGVkVW5kZXJsaW5lRGVjb3JhdGlvbiA9IDFMTFUg
IDw8IDExLAotICAgIEZsb3dIYXNKdXN0aWZpZWROb25MYXRpblRleHQgICAgICAgICAgPSAxTExV
ICA8PCAxMiwKLSAgICBGbG93SGFzT3ZlcmZsb3dOb3RWaXNpYmxlICAgICAgICAgICAgID0gMUxM
VSAgPDwgMTMsCi0gICAgRmxvd0hhc1dlYktpdE5CU1BNb2RlICAgICAgICAgICAgICAgICA9IDFM
TFUgIDw8IDE0LAotICAgIEZsb3dJc05vdExUUiAgICAgICAgICAgICAgICAgICAgICAgICAgPSAx
TExVICA8PCAxNSwKLSAgICBGbG93SGFzTGluZUJveENvbnRhaW5Qcm9wZXJ0eSAgICAgICAgID0g
MUxMVSAgPDwgMTYsCi0gICAgRmxvd0lzTm90VG9wVG9Cb3R0b20gICAgICAgICAgICAgICAgICA9
IDFMTFUgIDw8IDE3LAotICAgIEZsb3dIYXNMaW5lQnJlYWsgICAgICAgICAgICAgICAgICAgICAg
PSAxTExVICA8PCAxOCwKLSAgICBGbG93SGFzTm9uTm9ybWFsVW5pY29kZUJpRGkgICAgICAgICAg
ID0gMUxMVSAgPDwgMTksCi0gICAgRmxvd0hhc1JUTE9yZGVyaW5nICAgICAgICAgICAgICAgICAg
ICA9IDFMTFUgIDw8IDIwLAotICAgIEZsb3dIYXNMaW5lQWxpZ25FZGdlcyAgICAgICAgICAgICAg
ICAgPSAxTExVICA8PCAyMSwKLSAgICBGbG93SGFzTGluZVNuYXAgICAgICAgICAgICAgICAgICAg
ICAgID0gMUxMVSAgPDwgMjIsCi0gICAgRmxvd0hhc1RleHRFbXBoYXNpc0ZpbGxPck1hcmsgICAg
ICAgICA9IDFMTFUgIDw8IDIzLAotICAgIEZsb3dIYXNUZXh0U2hhZG93ICAgICAgICAgICAgICAg
ICAgICAgPSAxTExVICA8PCAyNCwKLSAgICBGbG93SGFzUHNldWRvRmlyc3RMaW5lICAgICAgICAg
ICAgICAgID0gMUxMVSAgPDwgMjUsCi0gICAgRmxvd0hhc1BzZXVkb0ZpcnN0TGV0dGVyICAgICAg
ICAgICAgICA9IDFMTFUgIDw8IDI2LAotICAgIEZsb3dIYXNUZXh0Q29tYmluZSAgICAgICAgICAg
ICAgICAgICAgPSAxTExVICA8PCAyNywKLSAgICBGbG93SGFzVGV4dEZpbGxCb3ggICAgICAgICAg
ICAgICAgICAgID0gMUxMVSAgPDwgMjgsCi0gICAgRmxvd0hhc0JvcmRlckZpdExpbmVzICAgICAg
ICAgICAgICAgICA9IDFMTFUgIDw8IDI5LAotICAgIEZsb3dIYXNOb25BdXRvTGluZUJyZWFrICAg
ICAgICAgICAgICAgPSAxTExVICA8PCAzMCwKLSAgICBGbG93SGFzVGV4dFNlY3VyaXR5ICAgICAg
ICAgICAgICAgICAgID0gMUxMVSAgPDwgMzEsCi0gICAgRmxvd0hhc1NWR0ZvbnQgICAgICAgICAg
ICAgICAgICAgICAgICA9IDFMTFUgIDw8IDMyLAotICAgIEZsb3dUZXh0SXNFbXB0eSAgICAgICAg
ICAgICAgICAgICAgICAgPSAxTExVICA8PCAzMywKLSAgICBGbG93VGV4dEhhc1NvZnRIeXBoZW4g
ICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMzQsCi0gICAgRmxvd1RleHRIYXNEaXJlY3Rpb25D
aGFyYWN0ZXIgICAgICAgICA9IDFMTFUgIDw8IDM1LAotICAgIEZsb3dJc01pc3NpbmdQcmltYXJ5
Rm9udCAgICAgICAgICAgICAgPSAxTExVICA8PCAzNiwKLSAgICBGbG93UHJpbWFyeUZvbnRJc0lu
c3VmZmljaWVudCAgICAgICAgID0gMUxMVSAgPDwgMzcsCi0gICAgRmxvd1RleHRJc0NvbWJpbmVU
ZXh0ICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDM4LAotICAgIEZsb3dUZXh0SXNSZW5kZXJD
b3VudGVyICAgICAgICAgICAgICAgPSAxTExVICA8PCAzOSwKLSAgICBGbG93VGV4dElzUmVuZGVy
UXVvdGUgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgNDAsCi0gICAgRmxvd1RleHRJc1RleHRG
cmFnbWVudCAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDQxLAotICAgIEZsb3dUZXh0SXNTVkdJ
bmxpbmVUZXh0ICAgICAgICAgICAgICAgPSAxTExVICA8PCA0MiwKLSAgICBGbG93SGFzQ29tcGxl
eEZvbnRDb2RlUGF0aCAgICAgICAgICAgID0gMUxMVSAgPDwgNDMsCi0gICAgRmVhdHVyZUlzRGlz
YWJsZWQgICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDQ0LAotICAgIEZsb3dIYXNOb1Bh
cmVudCAgICAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCA0NSwKLSAgICBGbG93SGFzTm9D
aGlsZCAgICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgNDYsCi0gICAgRmxvd0NoaWxk
SXNTZWxlY3RlZCAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDQ3LAotICAgIEZsb3dIYXNI
YW5naW5nUHVuY3R1YXRpb24gICAgICAgICAgICAgPSAxTExVICA8PCA0OCwKLSAgICBGbG93Rm9u
dEhhc092ZXJmbG93R2x5cGggICAgICAgICAgICAgID0gMUxMVSAgPDwgNDksCi0gICAgRmxvd1Rl
eHRIYXNTdXJyb2dhdGVQYWlyICAgICAgICAgICAgICA9IDFMTFUgIDw8IDUwLAotICAgIE11bHRp
Q29sdW1uRmxvd0lzTm90VG9wTGV2ZWwgICAgICAgICAgPSAxTExVICA8PCA1MSwKLSAgICBNdWx0
aUNvbHVtbkZsb3dIYXNDb2x1bW5TcGFubmVyICAgICAgID0gMUxMVSAgPDwgNTIsCi0gICAgTXVs
dGlDb2x1bW5GbG93VmVydGljYWxBbGlnbiAgICAgICAgICA9IDFMTFUgIDw8IDUzLAotICAgIE11
bHRpQ29sdW1uRmxvd0lzRmxvYXRpbmcgICAgICAgICAgICAgPSAxTExVICA8PCA1NCwKLSAgICBG
bG93SW5jbHVkZXNEb2N1bWVudE1hcmtlcnMgICAgICAgICAgID0gMUxMVSAgPDwgNTUsCi0gICAg
RW5kT2ZSZWFzb25zICAgICAgICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDU2Ci19Owot
Y29uc3QgdW5zaWduZWQgTm9SZWFzb24gPSAwOwotCi10eXBlZGVmIHVpbnQ2NF90IEF2b2lkYW5j
ZVJlYXNvbjsKLXR5cGVkZWYgdWludDY0X3QgQXZvaWRhbmNlUmVhc29uRmxhZ3M7Ci0KLWVudW0g
Y2xhc3MgSW5jbHVkZVJlYXNvbnMgeyBGaXJzdCAsIEFsbCB9OwotCi19Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50
cy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5YjM2YTBmMzI3NS4uMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxv
d0NvbnRlbnRzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZsb3dDb250
ZW50cy5oIgotCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVy
Q2hpbGRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgotI2luY2x1ZGUg
IlJlbmRlclRleHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIFNpbXBsZUxp
bmVMYXlvdXQgewotCi1zdGF0aWMgVmVjdG9yPEZsb3dDb250ZW50czo6U2VnbWVudD4gaW5pdGlh
bGl6ZVNlZ21lbnRzKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKLXsKLSAgICB1bnNpZ25l
ZCBudW1iZXJPZkNoaWxkcmVuID0gMDsKLSAgICBhdXRvIGNoaWxkcmVuID0gY2hpbGRyZW5PZlR5
cGU8UmVuZGVyT2JqZWN0PihmbG93KTsKLSAgICBmb3IgKGF1dG8gaXQgPSBjaGlsZHJlbi5iZWdp
bigpLCBlbmQgPSBjaGlsZHJlbi5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICArK251
bWJlck9mQ2hpbGRyZW47Ci0gICAgVmVjdG9yPEZsb3dDb250ZW50czo6U2VnbWVudD4gc2VnbWVu
dHM7Ci0gICAgc2VnbWVudHMucmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mQ2hpbGRyZW4pOwotICAg
IHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSAwOwotICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGls
ZHJlbk9mVHlwZTxSZW5kZXJPYmplY3Q+KGZsb3cpKSB7Ci0gICAgICAgIGlmIChpczxSZW5kZXJU
ZXh0PihjaGlsZCkpIHsKLSAgICAgICAgICAgIGF1dG8mIHRleHRDaGlsZCA9IGRvd25jYXN0PFJl
bmRlclRleHQ+KGNoaWxkKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSB0ZXh0
Q2hpbGQudGV4dCgpLmxlbmd0aCgpOwotICAgICAgICAgICAgc2VnbWVudHMuYXBwZW5kKEZsb3dD
b250ZW50czo6U2VnbWVudCB7IHN0YXJ0UG9zaXRpb24sIHN0YXJ0UG9zaXRpb24gKyB0ZXh0TGVu
Z3RoLCB0ZXh0Q2hpbGQudGV4dCgpLAotICAgICAgICAgICAgICAgIHRleHRDaGlsZCwgdGV4dENo
aWxkLmNhblVzZVNpbXBsaWZpZWRUZXh0TWVhc3VyaW5nKCkgfSk7Ci0gICAgICAgICAgICBzdGFy
dFBvc2l0aW9uICs9IHRleHRMZW5ndGg7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fQotICAgICAgICBpZiAoaXM8UmVuZGVyTGluZUJyZWFrPihjaGlsZCkpIHsKLSAgICAgICAgICAg
IHNlZ21lbnRzLmFwcGVuZChGbG93Q29udGVudHM6OlNlZ21lbnQgeyBzdGFydFBvc2l0aW9uLCBz
dGFydFBvc2l0aW9uLCBTdHJpbmcoKSwgY2hpbGQsIHRydWUgfSk7Ci0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHNlZ21lbnRzOwotfQotCi1GbG93Q29udGVudHM6OkZsb3dDb250ZW50cyhjb25z
dCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCi0gICAgOiBtX3NlZ21lbnRzKGluaXRpYWxpemVTZWdt
ZW50cyhmbG93KSkKLXsKLX0KLQotdW5zaWduZWQgRmxvd0NvbnRlbnRzOjpzZWdtZW50SW5kZXhG
b3JSdW5TbG93KHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpIGNvbnN0Ci17Ci0gICAgYXV0
byBpc0VtcHR5UmFuZ2UgPSBzdGFydCA9PSBlbmQ7Ci0gICAgYXV0byBpdCA9IHN0ZDo6bG93ZXJf
Ym91bmQobV9zZWdtZW50cy5iZWdpbigpLCBtX3NlZ21lbnRzLmVuZCgpLCBzdGFydCwgW2lzRW1w
dHlSYW5nZV0oY29uc3QgU2VnbWVudCYgc2VnbWVudCwgdW5zaWduZWQgc3RhcnQpIHsKLSAgICAg
ICAgLy8gRklYTUU6IFRoaXMgYWx3YXlzIGZpbmQgdGhlIGZpcnN0IGVtcHR5IHJ1biAoLnZzIHN1
YnNlcXVlbnQgPGJyPiBlbGVtZW50cykKLSAgICAgICAgcmV0dXJuIChpc0VtcHR5UmFuZ2UgJiYg
c2VnbWVudC5zdGFydCA9PSBzZWdtZW50LmVuZCkgPyBzZWdtZW50LnN0YXJ0IDwgc3RhcnQgOiBz
ZWdtZW50LmVuZCA8PSBzdGFydDsKLSAgICB9KTsKLSAgICBBU1NFUlQoaXQgIT0gbV9zZWdtZW50
cy5lbmQoKSk7Ci0gICAgQVNTRVJUKGVuZCA8PSBpdC0+ZW5kKTsKLSAgICBtX2xhc3RTZWdtZW50
SW5kZXggPSBpdCAtIG1fc2VnbWVudHMuYmVnaW4oKTsKLSAgICByZXR1cm4gbV9sYXN0U2VnbWVu
dEluZGV4OwotfQotCi19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
U2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZGU2M2Y2ODZhZDE0Li4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaAorKysgL2Rldi9udWxsCkBAIC0x
LDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlJlbmRl
ck9iamVjdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBSZW5kZXJCbG9ja0Zsb3c7
Ci0KLW5hbWVzcGFjZSBTaW1wbGVMaW5lTGF5b3V0IHsKLQotY2xhc3MgRmxvd0NvbnRlbnRzIHsK
LXB1YmxpYzoKLSAgICBGbG93Q29udGVudHMoY29uc3QgUmVuZGVyQmxvY2tGbG93Jik7Ci0KLSAg
ICBzdHJ1Y3QgU2VnbWVudCB7Ci0gICAgICAgIHVuc2lnbmVkIHRvU2VnbWVudFBvc2l0aW9uKHVu
c2lnbmVkIHBvc2l0aW9uKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocG9z
aXRpb24gPj0gc3RhcnQpOwotICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uIC0gc3RhcnQ7Ci0g
ICAgICAgIH0KLSAgICAgICAgdW5zaWduZWQgdG9SZW5kZXJQb3NpdGlvbih1bnNpZ25lZCBwb3Np
dGlvbikgY29uc3QgeyByZXR1cm4gc3RhcnQgKyBwb3NpdGlvbjsgfQotICAgICAgICB1bnNpZ25l
ZCBzdGFydDsKLSAgICAgICAgdW5zaWduZWQgZW5kOwotICAgICAgICBTdHJpbmdWaWV3IHRleHQ7
Ci0gICAgICAgIGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXI7Ci0gICAgICAgIGJvb2wgY2Fu
VXNlU2ltcGxpZmllZFRleHRNZWFzdXJpbmc7Ci0gICAgfTsKLSAgICBjb25zdCBTZWdtZW50JiBz
ZWdtZW50Rm9yUnVuKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpIGNvbnN0OwotICAgIGNv
bnN0IFNlZ21lbnQmIHNlZ21lbnRGb3JQb3NpdGlvbih1bnNpZ25lZCkgY29uc3Q7Ci0KLSAgICB0
eXBlZGVmIFZlY3RvcjxTZWdtZW50LCA4Pjo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7Ci0gICAg
SXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3NlZ21lbnRzLmJlZ2luKCk7IH0KLSAg
ICBJdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3NlZ21lbnRzLmVuZCgpOyB9Ci0KLXBy
aXZhdGU6Ci0gICAgdW5zaWduZWQgc2VnbWVudEluZGV4Rm9yUnVuU2xvdyh1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQgZW5kKSBjb25zdDsKLSAgICBjb25zdCBWZWN0b3I8U2VnbWVudD4gbV9zZWdt
ZW50czsKLSAgICBtdXRhYmxlIHVuc2lnbmVkIG1fbGFzdFNlZ21lbnRJbmRleCB7IDAgfTsKLX07
Ci0KLWlubGluZSBjb25zdCBGbG93Q29udGVudHM6OlNlZ21lbnQmIEZsb3dDb250ZW50czo6c2Vn
bWVudEZvclJ1bih1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKSBjb25zdAotewotICAgIEFT
U0VSVChzdGFydCA8PSBlbmQpOwotICAgIGF1dG8gaXNFbXB0eVJhbmdlID0gc3RhcnQgPT0gZW5k
OwotICAgIGF1dG8mIGxhc3RTZWdtZW50ID0gbV9zZWdtZW50c1ttX2xhc3RTZWdtZW50SW5kZXhd
OwotICAgIGlmICgobGFzdFNlZ21lbnQuc3RhcnQgPD0gc3RhcnQgJiYgZW5kIDw9IGxhc3RTZWdt
ZW50LmVuZCkgJiYgKCFpc0VtcHR5UmFuZ2UgfHwgZW5kICE9IGxhc3RTZWdtZW50LmVuZCkpCi0g
ICAgICAgIHJldHVybiBtX3NlZ21lbnRzW21fbGFzdFNlZ21lbnRJbmRleF07Ci0gICAgcmV0dXJu
IG1fc2VnbWVudHNbc2VnbWVudEluZGV4Rm9yUnVuU2xvdyhzdGFydCwgZW5kKV07Ci19Ci0KLWlu
bGluZSBjb25zdCBGbG93Q29udGVudHM6OlNlZ21lbnQmIEZsb3dDb250ZW50czo6c2VnbWVudEZv
clBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAotewotICAgIGF1dG8gaXQgPSBzdGQ6
Omxvd2VyX2JvdW5kKG1fc2VnbWVudHMuYmVnaW4oKSwgbV9zZWdtZW50cy5lbmQoKSwgcG9zaXRp
b24sIFtdKGNvbnN0IFNlZ21lbnQmIHNlZ21lbnQsIHVuc2lnbmVkIHBvc2l0aW9uKSB7Ci0gICAg
ICAgIHJldHVybiBzZWdtZW50LmVuZCA8PSBwb3NpdGlvbjsKLSAgICB9KTsKLSAgICBBU1NFUlQo
aXQgIT0gbV9zZWdtZW50cy5lbmQoKSk7Ci0gICAgcmV0dXJuIG1fc2VnbWVudHNbaXQgLSBtX3Nl
Z21lbnRzLmJlZ2luKCldOwotfQotCi19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDE2Y2MwYjZkMzgyNC4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDM3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaCIKLQotI2luY2x1ZGUgIkJpZGlSdW4u
aCIKLSNpbmNsdWRlICJCaWRpUnVuTGlzdC5oIgotI2luY2x1ZGUgIkV2ZW50UmVnaW9uLmgiCi0j
aW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIaXRUZXN0TG9jYXRpb24uaCIKLSNpbmNsdWRlICJI
aXRUZXN0UmVxdWVzdC5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJJ
bmxpbmVUZXh0Qm94LmgiCi0jaW5jbHVkZSAiTGluZUluZm8uaCIKLSNpbmNsdWRlICJQYWludElu
Zm8uaCIKLSNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJDaGls
ZEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5k
ZXJTdHlsZS5oIgotI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0Rmxv
d0NvbnRlbnRzLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmgiCi0jaW5j
bHVkZSAiVGV4dC5oIgotI2luY2x1ZGUgIlRleHREZWNvcmF0aW9uUGFpbnRlci5oIgotI2luY2x1
ZGUgIlRleHRQYWludFN0eWxlLmgiCi0jaW5jbHVkZSAiVGV4dFBhaW50ZXIuaCIKLSNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0KLSNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCi0j
aW5jbHVkZSA8c3RkaW8uaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3Bh
Y2UgU2ltcGxlTGluZUxheW91dCB7Ci0KLUZsb2F0UmVjdCBjb21wdXRlT3ZlcmZsb3coY29uc3Qg
UmVuZGVyQmxvY2tGbG93JiBmbG93LCBjb25zdCBGbG9hdFJlY3QmIGxheW91dFJlY3QpCi17Ci0g
ICAgYXV0byBvdmVyZmxvd1JlY3QgPSBsYXlvdXRSZWN0OwotICAgIGF1dG8gdmlld3BvcnRTaXpl
ID0gZmxvdy5mcmFtZSgpLnZpZXcoKSA/IGZsb3cuZnJhbWUoKS52aWV3KCktPnNpemUoKSA6IElu
dFNpemUoKTsKLSAgICBhdXRvIHN0cm9rZU92ZXJmbG93ID0gc3RkOjpjZWlsKGZsb3cuc3R5bGUo
KS5jb21wdXRlZFN0cm9rZVdpZHRoKHZpZXdwb3J0U2l6ZSkpOwotICAgIG92ZXJmbG93UmVjdC5p
bmZsYXRlKHN0cm9rZU92ZXJmbG93KTsKLQotICAgIGF1dG8gbGV0dGVyU3BhY2luZyA9IGZsb3cu
c3R5bGUoKS5mb250Q2FzY2FkZSgpLmxldHRlclNwYWNpbmcoKTsKLSAgICBpZiAobGV0dGVyU3Bh
Y2luZyA+PSAwKQotICAgICAgICByZXR1cm4gb3ZlcmZsb3dSZWN0OwotICAgIC8vIExhc3QgbGV0
dGVyJ3MgbmVnYXRpdmUgc3BhY2luZyBzaHJpbmtzIGxheW91dCByZWN0LiBQdXNoIGl0IHRvIHZp
c3VhbCBvdmVyZmxvdy4KLSAgICBvdmVyZmxvd1JlY3QuZXhwYW5kKC1sZXR0ZXJTcGFjaW5nLCAw
KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0OwotfQotCi12b2lkIHBhaW50Rmxvdyhjb25zdCBS
ZW5kZXJCbG9ja0Zsb3cmIGZsb3csIGNvbnN0IExheW91dCYgbGF5b3V0LCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQotewotICAgIGlmIChwYWlu
dEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6RXZlbnRSZWdpb24pIHsKLSAgICAgICAgaWYgKCFm
bG93LnZpc2libGVUb0hpdFRlc3RpbmcoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
YXV0byBwYWludFJlY3QgPSBwYWludEluZm8ucmVjdDsKLSAgICAgICAgcGFpbnRSZWN0Lm1vdmVC
eSgtcGFpbnRPZmZzZXQpOwotICAgICAgICBmb3IgKGF1dG8gcnVuIDogbGF5b3V0LnJ1blJlc29s
dmVyKCkucmFuZ2VGb3JSZWN0KHBhaW50UmVjdCkpIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCB2
aXN1YWxPdmVyZmxvd1JlY3QgPSBjb21wdXRlT3ZlcmZsb3coZmxvdywgcnVuLnJlY3QoKSk7Ci0g
ICAgICAgICAgICBwYWludEluZm8uZXZlbnRSZWdpb25Db250ZXh0LT51bml0ZShlbmNsb3NpbmdJ
bnRSZWN0KHZpc3VhbE92ZXJmbG93UmVjdCksIGZsb3cuc3R5bGUoKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQ
aGFzZTo6Rm9yZWdyb3VuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgc3R5bGUgPSBm
bG93LnN0eWxlKCk7Ci0gICAgaWYgKHN0eWxlLnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpW
aXNpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUZXh0UGFpbnRlciB0ZXh0UGFpbnRlcihw
YWludEluZm8uY29udGV4dCgpKTsKLSAgICB0ZXh0UGFpbnRlci5zZXRGb250KHN0eWxlLmZvbnRD
YXNjYWRlKCkpOwotICAgIHRleHRQYWludGVyLnNldFN0eWxlKGNvbXB1dGVUZXh0UGFpbnRTdHls
ZShmbG93LmZyYW1lKCksIHN0eWxlLCBwYWludEluZm8pKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0
cjxTaGFkb3dEYXRhPiBkZWJ1Z1NoYWRvdyA9IG51bGxwdHI7Ci0gICAgaWYgKGZsb3cuc2V0dGlu
Z3MoKS5zaW1wbGVMaW5lTGF5b3V0RGVidWdCb3JkZXJzRW5hYmxlZCgpKSB7Ci0gICAgICAgIGRl
YnVnU2hhZG93ID0gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPihJbnRQb2ludCgwLCAwKSwgMTAsIDIw
LCBTaGFkb3dTdHlsZTo6Tm9ybWFsLCB0cnVlLCBDb2xvcjo6Z3JlZW4uY29sb3JXaXRoQWxwaGFC
eXRlKDIwMCkpOwotICAgICAgICB0ZXh0UGFpbnRlci5zZXRTaGFkb3coZGVidWdTaGFkb3cuZ2V0
KCkpOwotICAgIH0KLQotICAgIE9wdGlvbmFsPFRleHREZWNvcmF0aW9uUGFpbnRlcj4gdGV4dERl
Y29yYXRpb25QYWludGVyOwotICAgIGlmICghc3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3Qo
KS5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVyID0g
Y2hpbGRyZW5PZlR5cGU8UmVuZGVyVGV4dD4oZmxvdykuZmlyc3QoKTsKLSAgICAgICAgaWYgKHRl
eHRSZW5kZXJlcikgewotICAgICAgICAgICAgdGV4dERlY29yYXRpb25QYWludGVyLmVtcGxhY2Uo
cGFpbnRJbmZvLmNvbnRleHQoKSwgc3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKSwgKnRl
eHRSZW5kZXJlciwgZmFsc2UsIHN0eWxlLmZvbnRDYXNjYWRlKCkpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgTGF5b3V0UmVjdCBwYWludFJlY3QgPSBwYWludEluZm8ucmVjdDsKLSAgICBwYWlu
dFJlY3QubW92ZUJ5KC1wYWludE9mZnNldCk7Ci0KLSAgICBhdXRvJiByZXNvbHZlciA9IGxheW91
dC5ydW5SZXNvbHZlcigpOwotICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gZmxvdy5kb2N1
bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7Ci0gICAgZm9yIChhdXRvIHJ1biA6IHJlc29sdmVy
LnJhbmdlRm9yUmVjdChwYWludFJlY3QpKSB7Ci0gICAgICAgIGlmIChydW4uc3RhcnQoKSA9PSBy
dW4uZW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBGbG9hdFJlY3QgcmVj
dCA9IHJ1bi5yZWN0KCk7Ci0gICAgICAgIEZsb2F0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3QgPSBj
b21wdXRlT3ZlcmZsb3coZmxvdywgcmVjdCk7Ci0gICAgICAgIGlmIChwYWludFJlY3QueSgpID4g
dmlzdWFsT3ZlcmZsb3dSZWN0Lm1heFkoKSB8fCBwYWludFJlY3QubWF4WSgpIDwgdmlzdWFsT3Zl
cmZsb3dSZWN0LnkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFN0cmluZyB0
ZXh0V2l0aEh5cGhlbjsKLSAgICAgICAgaWYgKHJ1bi5oYXNIeXBoZW4oKSkKLSAgICAgICAgICAg
IHRleHRXaXRoSHlwaGVuID0gcnVuLnRleHRXaXRoSHlwaGVuKCk7Ci0gICAgICAgIC8vIHhQb3Mg
aXMgcmVsYXRpdmUgdG8gdGhlIGxpbmUgYm94J3MgbG9naWNhbCBsZWZ0LgotICAgICAgICAvLyBX
ZSBkb24ndCBoYXZlIGFueSBsaW5lIGdlb21ldHJ5IGhlcmUgaW4gU0xMLCBzbyBsZXQncyBnZXQg
dGhlIGZpcnN0IHJ1bidzIGxvZ2ljYWwgbGVmdCBpbiB0aGUgY3VycmVudCBsaW5lIGFuZCB1c2Ug
aXQgYXMgdGhlIGxpbmUncyBsb2dpY2FsIGxlZnQuCi0gICAgICAgIGF1dG8gbGluZUxvZ2ljYWxM
ZWZ0ID0gKCpyZXNvbHZlci5yYW5nZUZvckxpbmUocnVuLmxpbmVJbmRleCgpKS5iZWdpbigpKS5s
b2dpY2FsTGVmdCgpOwotICAgICAgICBUZXh0UnVuIHRleHRSdW4geyBydW4uaGFzSHlwaGVuKCkg
PyB0ZXh0V2l0aEh5cGhlbiA6IHJ1bi50ZXh0KCksIHJ1bi5sb2dpY2FsTGVmdCgpIC0gbGluZUxv
Z2ljYWxMZWZ0LCBydW4uZXhwYW5zaW9uKCksIHJ1bi5leHBhbnNpb25CZWhhdmlvcigpIH07Ci0g
ICAgICAgIHRleHRSdW4uc2V0VGFiU2l6ZSghc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCksIHN0
eWxlLnRhYlNpemUoKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbiB7IHJlY3QueCgp
ICsgcGFpbnRPZmZzZXQueCgpLCByb3VuZFRvRGV2aWNlUGl4ZWwocnVuLmJhc2VsaW5lUG9zaXRp
b24oKSArIHBhaW50T2Zmc2V0LnkoKSwgZGV2aWNlU2NhbGVGYWN0b3IpIH07Ci0KLSAgICAgICAg
dGV4dFBhaW50ZXIuc2V0R2x5cGhEaXNwbGF5TGlzdElmTmVlZGVkKHJ1bi5zaW1wbGVSdW4oKSwg
cGFpbnRJbmZvLCBzdHlsZS5mb250Q2FzY2FkZSgpLCBwYWludEluZm8uY29udGV4dCgpLCB0ZXh0
UnVuKTsKLSAgICAgICAgdGV4dFBhaW50ZXIucGFpbnQodGV4dFJ1biwgcmVjdCwgdGV4dE9yaWdp
bik7Ci0gICAgICAgIGlmICh0ZXh0RGVjb3JhdGlvblBhaW50ZXIpIHsKLSAgICAgICAgICAgIHRl
eHREZWNvcmF0aW9uUGFpbnRlci0+c2V0V2lkdGgocmVjdC53aWR0aCgpKTsKLSAgICAgICAgICAg
IHRleHREZWNvcmF0aW9uUGFpbnRlci0+cGFpbnRUZXh0RGVjb3JhdGlvbih0ZXh0UnVuLCB0ZXh0
T3JpZ2luLCByZWN0LmxvY2F0aW9uKCkgKyBwYWludE9mZnNldCk7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLWJvb2wgaGl0VGVzdEZsb3coY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBjb25z
dCBMYXlvdXQmIGxheW91dCwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RS
ZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVy
LCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0
VGVzdEFjdGlvbikKLXsKLSAgICBpZiAoaGl0VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3Vu
ZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFsYXlvdXQucnVuQ291bnQoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byYgc3R5bGUgPSBmbG93LnN0eWxlKCk7
Ci0gICAgaWYgKHN0eWxlLnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNpYmxlIHx8IHN0
eWxlLnBvaW50ZXJFdmVudHMoKSA9PSBQb2ludGVyRXZlbnRzOjpOb25lKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBMYXlvdXRSZWN0IHJhbmdlUmVjdCA9IGxvY2F0aW9uSW5Db250YWlu
ZXIuYm91bmRpbmdCb3goKTsKLSAgICByYW5nZVJlY3QubW92ZUJ5KC1hY2N1bXVsYXRlZE9mZnNl
dCk7Ci0gICAgYXV0byByZXNvbHZlciA9IGxpbmVSZXNvbHZlcihsYXlvdXQucnVuUmVzb2x2ZXIo
KSk7Ci0gICAgYXV0byByYW5nZSA9IHJlc29sdmVyLnJhbmdlRm9yUmVjdChyYW5nZVJlY3QpOwot
ICAgIGZvciAoYXV0byBpdCA9IHJhbmdlLmJlZ2luKCksIGVuZCA9IHJhbmdlLmVuZCgpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgYXV0byBsaW5lUmVjdCA9ICppdDsKLSAgICAgICAgbGlu
ZVJlY3QubW92ZUJ5KGFjY3VtdWxhdGVkT2Zmc2V0KTsKLSAgICAgICAgYXV0byYgcmVuZGVyZXIg
PSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCY+KGl0LnJlbmRlcmVyKCkpOwotICAgICAgICBpZiAo
IWxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhsaW5lUmVjdCkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgcmVuZGVyZXIudXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxv
Y2F0aW9uSW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNl
dCkpOwotICAgICAgICBpZiAocmVzdWx0LmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQocmVu
ZGVyZXIubm9kZUZvckhpdFRlc3QoKSwgcmVxdWVzdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgbGlu
ZVJlY3QpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgY29sbGVjdEZsb3dPdmVyZmxv
dyhSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIGNvbnN0IExheW91dCYgbGF5b3V0KQotewotICAgIGZv
ciAoYXV0byBsaW5lUmVjdCA6IGxpbmVSZXNvbHZlcihsYXlvdXQucnVuUmVzb2x2ZXIoKSkpIHsK
LSAgICAgICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3QgPSBMYXlvdXRSZWN0KGNvbXB1
dGVPdmVyZmxvdyhmbG93LCBsaW5lUmVjdCkpOwotICAgICAgICBmbG93LmFkZExheW91dE92ZXJm
bG93KExheW91dFJlY3QobGluZVJlY3QpKTsKLSAgICAgICAgZmxvdy5hZGRWaXN1YWxPdmVyZmxv
dyh2aXN1YWxPdmVyZmxvd1JlY3QpOwotICAgIH0KLX0KLQotdW5zaWduZWQgdGV4dE9mZnNldEZv
clBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVy
ZXIsIGNvbnN0IExheW91dCYgbGF5b3V0KQotewotICAgIGF1dG8mIGZsb3cgPSBkb3duY2FzdDxS
ZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlci5wYXJlbnQoKSk7Ci0gICAgQVNTRVJUKGZsb3cuZmly
c3RDaGlsZCgpID09IGZsb3cubGFzdENoaWxkKCkpOwotICAgIGF1dG8mIHJlc29sdmVyID0gbGF5
b3V0LnJ1blJlc29sdmVyKCk7Ci0gICAgYXV0byBpdCA9IHJlc29sdmVyLnJ1bkZvclBvaW50KHBv
aW50KTsKLSAgICBpZiAoaXQgPT0gcmVzb2x2ZXIuZW5kKCkpCi0gICAgICAgIHJldHVybiByZW5k
ZXJlci50ZXh0KCkubGVuZ3RoKCk7Ci0gICAgYXV0byBydW4gPSAqaXQ7Ci0gICAgYXV0byYgc3R5
bGUgPSBmbG93LnN0eWxlKCk7Ci0gICAgVGV4dFJ1biB0ZXh0UnVuKHJ1bi50ZXh0KCksIHJ1bi5s
b2dpY2FsTGVmdCgpLCBydW4uZXhwYW5zaW9uKCksIHJ1bi5leHBhbnNpb25CZWhhdmlvcigpKTsK
LSAgICB0ZXh0UnVuLnNldFRhYlNpemUoIXN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpLCBzdHls
ZS50YWJTaXplKCkpOwotICAgIHJldHVybiBydW4uc3RhcnQoKSArIHN0eWxlLmZvbnRDYXNjYWRl
KCkub2Zmc2V0Rm9yUG9zaXRpb24odGV4dFJ1biwgcG9pbnQueCgpIC0gcnVuLmxvZ2ljYWxMZWZ0
KCksIHRydWUpOwotfQotCi1WZWN0b3I8RmxvYXRRdWFkPiBjb2xsZWN0QWJzb2x1dGVRdWFkc0Zv
clJhbmdlKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIHVuc2lnbmVkIHN0YXJ0LCB1bnNp
Z25lZCBlbmQsIGNvbnN0IExheW91dCYgbGF5b3V0LCBib29sIGlnbm9yZUVtcHR5VGV4dFNlbGVj
dGlvbnMsIGJvb2wqIHdhc0ZpeGVkKQotewotICAgIGF1dG8mIHN0eWxlID0gZG93bmNhc3Q8UmVu
ZGVyQmxvY2tGbG93PigqcmVuZGVyZXIucGFyZW50KCkpLnN0eWxlKCk7Ci0gICAgVmVjdG9yPEZs
b2F0UXVhZD4gcXVhZHM7Ci0gICAgYXV0byYgcmVzb2x2ZXIgPSBsYXlvdXQucnVuUmVzb2x2ZXIo
KTsKLSAgICBmb3IgKGF1dG8gcnVuIDogcmVzb2x2ZXIucmFuZ2VGb3JSZW5kZXJlcldpdGhPZmZz
ZXRzKHJlbmRlcmVyLCBzdGFydCwgZW5kKSkgewotICAgICAgICBpZiAoaWdub3JlRW1wdHlUZXh0
U2VsZWN0aW9ucyAmJiBydW4uc3RhcnQoKSA9PSBydW4uZW5kKCkpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgLy8gVGhpcyBydW4gaXMgZnVsbHkgY29udGFpbmVkLgotICAgICAgICBp
ZiAoc3RhcnQgPD0gcnVuLnN0YXJ0KCkgJiYgZW5kID49IHJ1bi5lbmQoKSkgewotICAgICAgICAg
ICAgcXVhZHMuYXBwZW5kKHJlbmRlcmVyLmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKHJ1
bi5yZWN0KCkpLCBVc2VUcmFuc2Zvcm1zLCB3YXNGaXhlZCkpOwotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gUGFydGlhbGx5IGNvbnRhaW5lZCBydW4uCi0gICAg
ICAgIFRleHRSdW4gdGV4dFJ1bihydW4udGV4dCgpLCBydW4ubG9naWNhbExlZnQoKSwgcnVuLmV4
cGFuc2lvbigpLCBydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSk7Ci0gICAgICAgIHRleHRSdW4uc2V0
VGFiU2l6ZSghc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCksIHN0eWxlLnRhYlNpemUoKSk7Ci0g
ICAgICAgIExheW91dFJlY3QgcnVuUmVjdChydW4ucmVjdCgpKTsKLSAgICAgICAgLy8gU3BlY2lh
bCBjYXNlIGVtcHR5IHJhbmdlcy4KLSAgICAgICAgaWYgKHN0YXJ0ID09IGVuZCkgewotICAgICAg
ICAgICAgcnVuUmVjdC5zZXRXaWR0aCgwKTsKLSAgICAgICAgICAgIHF1YWRzLmFwcGVuZChyZW5k
ZXJlci5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChydW5SZWN0KSwgVXNlVHJhbnNmb3Jt
cywgd2FzRml4ZWQpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAg
IGF1dG8gbG9jYWxTdGFydCA9IHN0ZDo6bWF4KHJ1bi5zdGFydCgpLCBzdGFydCkgLSBydW4uc3Rh
cnQoKTsKLSAgICAgICAgYXV0byBsb2NhbEVuZCA9IHN0ZDo6bWluKHJ1bi5lbmQoKSwgZW5kKSAt
IHJ1bi5zdGFydCgpOwotICAgICAgICBBU1NFUlQobG9jYWxTdGFydCA8PSBsb2NhbEVuZCk7Ci0g
ICAgICAgIHN0eWxlLmZvbnRDYXNjYWRlKCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQodGV4
dFJ1biwgcnVuUmVjdCwgbG9jYWxTdGFydCwgbG9jYWxFbmQpOwotICAgICAgICBydW5SZWN0ID0g
c25hcHBlZFNlbGVjdGlvblJlY3QocnVuUmVjdCwgcnVuLmxvZ2ljYWxSaWdodCgpLCBydW5SZWN0
LnkoKSwgcnVuUmVjdC5oZWlnaHQoKSwgdHJ1ZSAvKiBpc0hvcml6b250YWwgKi8pOwotICAgICAg
ICBxdWFkcy5hcHBlbmQocmVuZGVyZXIubG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQocnVu
UmVjdCksIFVzZVRyYW5zZm9ybXMsIHdhc0ZpeGVkKSk7Ci0gICAgfQotICAgIHJldHVybiBxdWFk
czsKLX0KLQotdm9pZCBzaW1wbGVMaW5lTGF5b3V0V2lsbEJlRGVsZXRlZChjb25zdCBMYXlvdXQm
IGxheW91dCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGF5b3V0LnJ1bkNvdW50
KCk7ICsraSkKLSAgICAgICAgVGV4dFBhaW50ZXI6OnJlbW92ZUdseXBoRGlzcGxheUxpc3QobGF5
b3V0LnJ1bkF0KGkpKTsKLX0KLQotYm9vbCBjYW5Vc2VGb3JMaW5lQm94VHJlZShSZW5kZXJCbG9j
a0Zsb3cmIGZsb3csIGNvbnN0IExheW91dCYgbGF5b3V0KQotewotICAgIC8vIExpbmUgYnJlYWtp
bmcgcmVxdWlyZXMgc29tZSBjb250ZXh0IHRoYXQgU0xMIGNhbid0IHByb3ZpZGUgYXQgdGhlIG1v
bWVudCAoc2VlIFJvb3RJbmxpbmVCb3g6OnNldExpbmVCcmVha0luZm8pLgotICAgIGlmIChsYXlv
dXQubGluZUNvdW50KCkgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobGF5
b3V0LmlzUGFnaW5hdGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAo
Zmxvdy5zdHlsZSgpLnByZXNlcnZlTmV3bGluZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgCi0gICAgaWYgKCFmbG93LmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJPYmplY3Q+
KGZsb3cpKSB7Ci0gICAgICAgIGlmICghaXM8UmVuZGVyVGV4dD4oY2hpbGQpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAvLyBTaW1wbGUgbGluZSBsYXlvdXQgaXRlcmF0b3Ig
Y2FuJ3QgaGFuZGxlIHJlbmRlcmVycyB3aXRoIHplcm8gbGVuZ3RoIHByb3Blcmx5LgotICAgICAg
ICBpZiAoIWRvd25jYXN0PFJlbmRlclRleHQ+KGNoaWxkKS5sZW5ndGgoKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lk
IGluaXRpYWxpemVJbmxpbmVUZXh0Qm94KFJlbmRlckJsb2NrRmxvdyYgZmxvdywgSW5saW5lVGV4
dEJveCYgaW5saW5lVGV4dEJveCwgY29uc3QgUnVuUmVzb2x2ZXI6OlJ1biYgcnVuKQotewotICAg
IGlubGluZVRleHRCb3guc2V0TG9naWNhbExlZnQocnVuLmxvZ2ljYWxMZWZ0KCkpOwotICAgIGlu
bGluZVRleHRCb3guc2V0TG9naWNhbFRvcChydW4ucmVjdCgpLnkoKSk7Ci0gICAgaW5saW5lVGV4
dEJveC5zZXRMb2dpY2FsV2lkdGgocnVuLmxvZ2ljYWxSaWdodCgpIC0gcnVuLmxvZ2ljYWxMZWZ0
KCkpOwotICAgIGF1dG8gb3ZlcmZsb3dSZWN0ID0gY29tcHV0ZU92ZXJmbG93KGNvbnN0X2Nhc3Q8
UmVuZGVyQmxvY2tGbG93Jj4oZmxvdyksIHJ1bi5yZWN0KCkpOwotICAgIGlmIChvdmVyZmxvd1Jl
Y3QgIT0gcnVuLnJlY3QoKSkKLSAgICAgICAgaW5saW5lVGV4dEJveC5zZXRMb2dpY2FsT3ZlcmZs
b3dSZWN0KExheW91dFJlY3Qob3ZlcmZsb3dSZWN0KSk7Ci0KLSAgICBpbmxpbmVUZXh0Qm94LnNl
dEhhc0h5cGhlbihydW4uaGFzSHlwaGVuKCkpOwotICAgIGlubGluZVRleHRCb3guc2V0RXhwYW5z
aW9uV2l0aG91dEdyb3dpbmcocnVuLmV4cGFuc2lvbigpKTsKLQotICAgIGF1dG8gZXhwYW5zaW9u
QmVoYXZpb3IgPSBydW4uZXhwYW5zaW9uQmVoYXZpb3IoKTsKLSAgICBpbmxpbmVUZXh0Qm94LnNl
dENhbkhhdmVMZWZ0RXhwYW5zaW9uKGV4cGFuc2lvbkJlaGF2aW9yICYgQWxsb3dMZWZ0RXhwYW5z
aW9uKTsKLSAgICBpbmxpbmVUZXh0Qm94LnNldENhbkhhdmVSaWdodEV4cGFuc2lvbihleHBhbnNp
b25CZWhhdmlvciAmIEFsbG93UmlnaHRFeHBhbnNpb24pOwotICAgIGlmIChleHBhbnNpb25CZWhh
dmlvciAmIEZvcmNlUmlnaHRFeHBhbnNpb24pCi0gICAgICAgIGlubGluZVRleHRCb3guc2V0Rm9y
Y2VSaWdodEV4cGFuc2lvbigpOwotICAgIGlmIChleHBhbnNpb25CZWhhdmlvciAmIEZvcmNlTGVm
dEV4cGFuc2lvbikKLSAgICAgICAgaW5saW5lVGV4dEJveC5zZXRGb3JjZUxlZnRFeHBhbnNpb24o
KTsKLX0KLQotdm9pZCBnZW5lcmF0ZUxpbmVCb3hUcmVlKFJlbmRlckJsb2NrRmxvdyYgZmxvdywg
Y29uc3QgTGF5b3V0JiBsYXlvdXQpCi17Ci0gICAgQVNTRVJUKCFmbG93LmNvbXBsZXhMaW5lTGF5
b3V0KCktPmxpbmVCb3hlcygpLmZpcnN0TGluZUJveCgpKTsKLSAgICBpZiAoIWxheW91dC5ydW5D
b3VudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWY8QmlkaUNvbnRleHQ+IGJpZGlDb250
ZXh0ID0gQmlkaUNvbnRleHQ6OmNyZWF0ZSgwLCBVX0xFRlRfVE9fUklHSFQpOwotICAgIGF1dG8m
IHJlc29sdmVyID0gbGF5b3V0LnJ1blJlc29sdmVyKCk7Ci0gICAgdW5zaWduZWQgbGluZUluZGV4
ID0gMDsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBhdXRvIHJhbmdlID0gcmVzb2x2ZXIu
cmFuZ2VGb3JMaW5lKGxpbmVJbmRleCsrKTsKLSAgICAgICAgaWYgKHJhbmdlLmJlZ2luKCkgPT0g
cmFuZ2UuZW5kKCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBHZW5lcmF0ZSBi
aWRpIHJ1bnMgb3V0IG9mIHNpbXBsZSBsaW5lIGxheW91dCBydW5zLgotICAgICAgICBCaWRpUnVu
TGlzdDxCaWRpUnVuPiBiaWRpUnVuczsKLSAgICAgICAgZm9yIChhdXRvIGl0ID0gcmFuZ2UuYmVn
aW4oKTsgaXQgIT0gcmFuZ2UuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIGF1dG8gcnVuID0g
Kml0OwotICAgICAgICAgICAgYmlkaVJ1bnMuYXBwZW5kUnVuKG1ha2VVbmlxdWU8QmlkaVJ1bj4o
cnVuLmxvY2FsU3RhcnQoKSwgcnVuLmxvY2FsRW5kKCksIGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0
Jj4ocnVuLnJlbmRlcmVyKCkpLCBiaWRpQ29udGV4dC5wdHIoKSwgVV9MRUZUX1RPX1JJR0hUKSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBMaW5lSW5mbyBsaW5lSW5mbzsKLSAgICAgICAgbGluZUlu
Zm8uc2V0Rmlyc3RMaW5lKCFmbG93LmNvbXBsZXhMaW5lTGF5b3V0KCktPmxpbmVCb3hlcygpLmZp
cnN0TGluZUJveCgpKTsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgbmVlZGVkIGZvciBmbG93
IGJveGVzIC1idXQgd2UgZG9uJ3QgaGF2ZSB0aGVtIHlldC4KLSAgICAgICAgLy8gbGluZUluZm8u
c2V0TGFzdExpbmUobGFzdExpbmUpOwotICAgICAgICBsaW5lSW5mby5zZXRFbXB0eSghYmlkaVJ1
bnMucnVuQ291bnQoKSk7Ci0gICAgICAgIGJpZGlSdW5zLnNldExvZ2ljYWxseUxhc3RSdW4oYmlk
aVJ1bnMubGFzdFJ1bigpKTsKLSAgICAgICAgYXV0byogcm9vdCA9IGZsb3cuY29tcGxleExpbmVM
YXlvdXQoKS0+Y29uc3RydWN0TGluZShiaWRpUnVucywgbGluZUluZm8pOwotICAgICAgICBiaWRp
UnVucy5jbGVhcigpOwotICAgICAgICBpZiAoIXJvb3QpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBhdXRvJiByb290TGluZUJveCA9ICpyb290OwotICAgICAgICBhdXRvIGl0ID0g
cmFuZ2UuYmVnaW4oKTsKLSAgICAgICAgZmxvYXQgbGluZVdpZHRoID0gMDsKLSAgICAgICAgLy8g
U2V0IHRoZSBnZW9tZXRyeSBmb3IgdGhlIGlubGluZWJveGVzLgotICAgICAgICBmb3IgKGF1dG8q
IGlubGluZUJveCA9IHJvb3RMaW5lQm94LmZpcnN0Q2hpbGQoKTsgaW5saW5lQm94ICYmIGl0ICE9
IHJhbmdlLmVuZCgpOyBpbmxpbmVCb3ggPSBpbmxpbmVCb3gtPm5leHRPbkxpbmUoKSwgKytpdCkg
ewotICAgICAgICAgICAgYXV0byBydW4gPSAqaXQ7Ci0gICAgICAgICAgICBpbml0aWFsaXplSW5s
aW5lVGV4dEJveChmbG93LCBkb3duY2FzdDxJbmxpbmVUZXh0Qm94PigqaW5saW5lQm94KSwgcnVu
KTsKLSAgICAgICAgICAgIGxpbmVXaWR0aCArPSBpbmxpbmVCb3gtPmxvZ2ljYWxXaWR0aCgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gRmluaXNoIHNldHRpbmcgdXAgdGhlIHJvb3RsaW5lLgot
ICAgICAgICBhdXRvIGl0ZXIgPSByYW5nZS5iZWdpbigpOwotICAgICAgICBhdXRvIGZpcnN0UnVu
ID0gKml0ZXI7Ci0gICAgICAgIHJvb3RMaW5lQm94LnNldExvZ2ljYWxMZWZ0KGZpcnN0UnVuLmxv
Z2ljYWxMZWZ0KCkpOwotICAgICAgICByb290TGluZUJveC5zZXRMb2dpY2FsV2lkdGgobGluZVdp
ZHRoKTsKLSAgICAgICAgYXV0byBsaW5lVG9wID0gZmlyc3RSdW4ucmVjdCgpLnkoKTsKLSAgICAg
ICAgYXV0byBsaW5lSGVpZ2h0ID0gZmlyc3RSdW4ucmVjdCgpLmhlaWdodCgpOwotICAgICAgICBy
b290TGluZUJveC5zZXRMb2dpY2FsVG9wKGxpbmVUb3ApOwotICAgICAgICByb290TGluZUJveC5z
ZXRMaW5lVG9wQm90dG9tUG9zaXRpb25zKExheW91dFVuaXQobGluZVRvcCksIExheW91dFVuaXQo
bGluZVRvcCArIGxpbmVIZWlnaHQpLCBMYXlvdXRVbml0KGxpbmVUb3ApLCBMYXlvdXRVbml0KGxp
bmVUb3AgKyBsaW5lSGVpZ2h0KSk7Ci0gICAgfQotfQotCi0jaWYgRU5BQkxFKFRSRUVfREVCVUdH
SU5HKQotc3RhdGljIHZvaWQgcHJpbnRQcmVmaXgoVGV4dFN0cmVhbSYgc3RyZWFtLCBpbnQmIHBy
aW50ZWRDaGFyYWN0ZXJzLCBpbnQgZGVwdGgpCi17Ci0gICAgc3RyZWFtIDw8ICItLS0tLS0tLSAt
LSI7Ci0gICAgcHJpbnRlZENoYXJhY3RlcnMgPSAwOwotICAgIHdoaWxlICgrK3ByaW50ZWRDaGFy
YWN0ZXJzIDw9IGRlcHRoICogMikKLSAgICAgICAgc3RyZWFtIDw8ICIgIjsKLX0KLQotdm9pZCBv
dXRwdXRMaW5lTGF5b3V0Rm9yRmxvdyhUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IFJlbmRlckJs
b2NrRmxvdyYsIGNvbnN0IExheW91dCYgbGF5b3V0LCBpbnQgZGVwdGgpCi17Ci0gICAgaW50IHBy
aW50ZWRDaGFyYWN0ZXJzID0gMDsKLSAgICBwcmludFByZWZpeChzdHJlYW0sIHByaW50ZWRDaGFy
YWN0ZXJzLCBkZXB0aCk7Ci0KLSAgICBzdHJlYW0gPDwgIlNpbXBsZUxpbmVMYXlvdXQgKCIgPDwg
bGF5b3V0LmxpbmVDb3VudCgpIDw8ICIgbGluZXMsICIgPDwgbGF5b3V0LnJ1bkNvdW50KCkgPDwg
IiBydW5zKSAoIiA8PCAmbGF5b3V0IDw8ICIpIjsKLSAgICBzdHJlYW0ubmV4dExpbmUoKTsKLSAg
ICArK2RlcHRoOwotCi0gICAgZm9yIChhdXRvIHJ1biA6IGxheW91dC5ydW5SZXNvbHZlcigpKSB7
Ci0gICAgICAgIEZsb2F0UmVjdCByZWN0ID0gcnVuLnJlY3QoKTsKLSAgICAgICAgcHJpbnRQcmVm
aXgoc3RyZWFtLCBwcmludGVkQ2hhcmFjdGVycywgZGVwdGgpOwotICAgICAgICBpZiAocnVuLnN0
YXJ0KCkgPCBydW4uZW5kKCkpIHsKLSAgICAgICAgICAgIHN0cmVhbSA8PCAibGluZSAiIDw8IHJ1
bi5saW5lSW5kZXgoKSA8PCAiIHJ1bigiIDw8IHJ1bi5zdGFydCgpIDw8ICIsICIgPDwgcnVuLmVu
ZCgpIDw8ICIpICIgPDwgcmVjdCA8PCAiIFwiIiA8PCBydW4udGV4dCgpLnRvU3RyaW5nV2l0aG91
dENvcHlpbmcoKS51dGY4KCkuZGF0YSgpIDw8ICJcIiI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBBU1NFUlQocnVuLnN0YXJ0KCkgPT0gcnVuLmVuZCgpKTsKLSAgICAgICAgICAgIHN0
cmVhbSA8PCAibGluZSBicmVhayAiIDw8IHJ1bi5saW5lSW5kZXgoKSA8PCAiIHJ1bigiIDw8IHJ1
bi5zdGFydCgpIDw8ICIsICIgPDwgcnVuLmVuZCgpIDw8ICIpICIgPDwgcmVjdDsKLSAgICAgICAg
fQotICAgIH0KLSAgICBzdHJlYW0ubmV4dExpbmUoKTsKLX0KLSNlbmRpZgotCi19Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9u
cy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThjN2Q0Y2RhZDllLi4wMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlv
bnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJU
ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgSGl0VGVzdExvY2F0aW9uOwotY2xhc3MgSGl0VGVzdFJlcXVlc3Q7Ci1j
bGFzcyBIaXRUZXN0UmVzdWx0OwotY2xhc3MgUmVuZGVyQmxvY2tGbG93Owotc3RydWN0IFBhaW50
SW5mbzsKLQotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewotY2xhc3MgRmxvd0NvbnRlbnRz
OwotCi1MYXlvdXRVbml0IGNvbXB1dGVGbG93SGVpZ2h0KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYs
IGNvbnN0IExheW91dCYpOwotTGF5b3V0VW5pdCBjb21wdXRlRmxvd0ZpcnN0TGluZUJhc2VsaW5l
KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IExheW91dCYpOwotTGF5b3V0VW5pdCBjb21w
dXRlRmxvd0xhc3RMaW5lQmFzZWxpbmUoY29uc3QgUmVuZGVyQmxvY2tGbG93JiwgY29uc3QgTGF5
b3V0Jik7Ci1GbG9hdFJlY3QgY29tcHV0ZU92ZXJmbG93KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYs
IGNvbnN0IEZsb2F0UmVjdCYpOwotCi12b2lkIHBhaW50Rmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zs
b3cmLCBjb25zdCBMYXlvdXQmLCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRP
ZmZzZXQpOwotYm9vbCBoaXRUZXN0Rmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmLCBjb25zdCBM
YXlvdXQmLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRU
ZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7Ci12b2lkIGNvbGxlY3RGbG93T3ZlcmZsb3co
UmVuZGVyQmxvY2tGbG93JiwgY29uc3QgTGF5b3V0Jik7Ci0KLXVuc2lnbmVkIHRleHRPZmZzZXRG
b3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlclRleHQmLCBjb25zdCBMYXlv
dXQmKTsKLVZlY3RvcjxGbG9hdFF1YWQ+IGNvbGxlY3RBYnNvbHV0ZVF1YWRzRm9yUmFuZ2UoY29u
c3QgUmVuZGVyT2JqZWN0JiwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgY29uc3QgTGF5
b3V0JiwgYm9vbCBpZ25vcmVFbXB0eVRleHRTZWxlY3Rpb25zLCBib29sKiB3YXNGaXhlZCk7Ci0K
LUxheW91dFVuaXQgbGluZUhlaWdodEZyb21GbG93KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYpOwot
TGF5b3V0VW5pdCBiYXNlbGluZUZyb21GbG93KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYpOwotCi1i
b29sIGNhblVzZUZvckxpbmVCb3hUcmVlKFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IExheW91dCYp
Owotdm9pZCBnZW5lcmF0ZUxpbmVCb3hUcmVlKFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IExheW91
dCYpOwotCi12b2lkIHNpbXBsZUxpbmVMYXlvdXRXaWxsQmVEZWxldGVkKGNvbnN0IExheW91dCYp
OwotCi0jaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQotdm9pZCBvdXRwdXRMaW5lTGF5b3V0Rm9y
RmxvdyhXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmLCBjb25zdCBMYXlv
dXQmLCBpbnQgZGVwdGgpOwotI2VuZGlmCi0KLX0KLQotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlv
dXQgewotCi1pbmxpbmUgTGF5b3V0VW5pdCBjb21wdXRlRmxvd0hlaWdodChjb25zdCBSZW5kZXJC
bG9ja0Zsb3cmIGZsb3csIGNvbnN0IExheW91dCYgbGF5b3V0KQotewotICAgIGF1dG8gZmxvd0hl
aWdodCA9IGxpbmVIZWlnaHRGcm9tRmxvdyhmbG93KSAqIGxheW91dC5saW5lQ291bnQoKTsKLSAg
ICBpZiAoIWxheW91dC5oYXNMaW5lU3RydXRzKCkpCi0gICAgICAgIHJldHVybiBmbG93SGVpZ2h0
OwotICAgIGZvciAoYXV0byYgc3RydXRFbnRyeSA6IGxheW91dC5zdHJ1dHMoKSkKLSAgICAgICAg
Zmxvd0hlaWdodCArPSBzdHJ1dEVudHJ5Lm9mZnNldDsKLSAgICByZXR1cm4gZmxvd0hlaWdodDsK
LX0KLQotaW5saW5lIExheW91dFVuaXQgY29tcHV0ZUZsb3dGaXJzdExpbmVCYXNlbGluZShjb25z
dCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIGNvbnN0IExheW91dCYgbGF5b3V0KQotewotICAgIEFT
U0VSVF9VTlVTRUQobGF5b3V0LCBsYXlvdXQubGluZUNvdW50KCkpOwotICAgIHJldHVybiBmbG93
LmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKSArIGJhc2VsaW5lRnJvbUZsb3coZmxvdyk7Ci19Ci0K
LWlubGluZSBMYXlvdXRVbml0IGNvbXB1dGVGbG93TGFzdExpbmVCYXNlbGluZShjb25zdCBSZW5k
ZXJCbG9ja0Zsb3cmIGZsb3csIGNvbnN0IExheW91dCYgbGF5b3V0KQotewotICAgIEFTU0VSVChs
YXlvdXQubGluZUNvdW50KCkpOwotICAgIHJldHVybiBmbG93LmJvcmRlckFuZFBhZGRpbmdCZWZv
cmUoKSArIGxpbmVIZWlnaHRGcm9tRmxvdyhmbG93KSAqIChsYXlvdXQubGluZUNvdW50KCkgLSAx
KSArIGJhc2VsaW5lRnJvbUZsb3coZmxvdyk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IGxpbmVI
ZWlnaHRGcm9tRmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCi17Ci0gICAgcmV0dXJu
IGZsb3cubGluZUhlaWdodChmYWxzZSwgSG9yaXpvbnRhbExpbmUsIFBvc2l0aW9uT2ZJbnRlcmlv
ckxpbmVCb3hlcyk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IGJhc2VsaW5lRnJvbUZsb3coY29u
c3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQotewotICAgIHJldHVybiBmbG93LmJhc2VsaW5lUG9z
aXRpb24oQWxwaGFiZXRpY0Jhc2VsaW5lLCBmYWxzZSwgSG9yaXpvbnRhbExpbmUsIFBvc2l0aW9u
T2ZJbnRlcmlvckxpbmVCb3hlcyk7Ci19Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFBhZ2luYXRpb24uY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAxYzhkZTcwZWZlN2MuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFBhZ2luYXRpb24uY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dFBhZ2luYXRpb24uaCIKLQotI2luY2x1ZGUg
IkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCi0jaW5jbHVkZSAi
U2ltcGxlTGluZUxheW91dC5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewot
Ci1zdHJ1Y3QgUGFnaW5hdGVkTGluZSB7Ci0gICAgTGF5b3V0VW5pdCB0b3A7Ci0gICAgTGF5b3V0
VW5pdCBib3R0b207Ci0gICAgTGF5b3V0VW5pdCBoZWlnaHQ7IC8vIFNhbWUgdmFsdWUgZm9yIGVh
Y2ggbGluZXMgYXRtLgotfTsKLXVzaW5nIFBhZ2luYXRlZExpbmVzID0gVmVjdG9yPFBhZ2luYXRl
ZExpbmUsIDIwPjsKLQotc3RhdGljIFBhZ2luYXRlZExpbmUgY29tcHV0ZUxpbmVUb3BBbmRCb3R0
b21XaXRoT3ZlcmZsb3coY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCB1bnNpZ25lZCBsaW5l
SW5kZXgsIExheW91dDo6U2ltcGxlTGluZVN0cnV0cyYgc3RydXRzKQotewotICAgIC8vIEZJWE1F
OiBBZGQgdmlzdWFsT3ZlcmZsb3dGb3JEZWNvcmF0aW9ucy4KLSAgICBhdXRvJiBmb250TWV0cmlj
cyA9IGZsb3cuc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCk7Ci0gICAgYXV0byBh
c2NlbnQgPSBmb250TWV0cmljcy5hc2NlbnQoKTsKLSAgICBhdXRvIGRlc2NlbnQgPSBmb250TWV0
cmljcy5kZXNjZW50KCk7Ci0gICAgYXV0byBsaW5lSGVpZ2h0ID0gbGluZUhlaWdodEZyb21GbG93
KGZsb3cpOwotICAgIExheW91dFVuaXQgb2Zmc2V0ID0gZmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVm
b3JlKCk7Ci0gICAgZm9yIChhdXRvJiBzdHJ1dCA6IHN0cnV0cykgewotICAgICAgICBpZiAoc3Ry
dXQubGluZUJyZWFrID4gbGluZUluZGV4KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG9m
ZnNldCArPSBzdHJ1dC5vZmZzZXQ7Ci0gICAgfQotICAgIGlmIChhc2NlbnQgKyBkZXNjZW50IDw9
IGxpbmVIZWlnaHQpIHsKLSAgICAgICAgYXV0byB0b3BQb3NpdGlvbiA9IGxpbmVJbmRleCAqIGxp
bmVIZWlnaHQgKyBvZmZzZXQ7Ci0gICAgICAgIHJldHVybiB7IHRvcFBvc2l0aW9uLCB0b3BQb3Np
dGlvbiArIGxpbmVIZWlnaHQsIGxpbmVIZWlnaHQgfTsKLSAgICB9Ci0gICAgYXV0byBiYXNlbGlu
ZSA9IGJhc2VsaW5lRnJvbUZsb3coZmxvdyk7Ci0gICAgYXV0byB0b3BQb3NpdGlvbiA9IGxpbmVJ
bmRleCAqIGxpbmVIZWlnaHQgKyBvZmZzZXQgKyBiYXNlbGluZSAtIGFzY2VudDsKLSAgICBhdXRv
IGJvdHRvbVBvc2l0aW9uID0gdG9wUG9zaXRpb24gKyBhc2NlbnQgKyBkZXNjZW50OwotICAgIHJl
dHVybiB7IHRvcFBvc2l0aW9uLCBib3R0b21Qb3NpdGlvbiwgYm90dG9tUG9zaXRpb24gLSB0b3BQ
b3NpdGlvbiB9OwotfQotCi1zdGF0aWMgdW5zaWduZWQgY29tcHV0ZUxpbmVCcmVha0luZGV4KHVu
c2lnbmVkIGJyZWFrQ2FuZGlkYXRlLCB1bnNpZ25lZCBsaW5lQ291bnQsIGludCBvcnBoYW5zTmVl
ZGVkLCBpbnQgd2lkb3dzTmVlZGVkLAotICAgIGNvbnN0IExheW91dDo6U2ltcGxlTGluZVN0cnV0
cyYgc3RydXRzKQotewotICAgIC8vIEZpcnN0IGxpbmUgZG9lcyBub3QgZml0IHRoZSBjdXJyZW50
IHBhZ2UuCi0gICAgaWYgKCFicmVha0NhbmRpZGF0ZSkKLSAgICAgICAgcmV0dXJuIGJyZWFrQ2Fu
ZGlkYXRlOwotICAgIAotICAgIGludCB3aWRvd3NPblRoZU5leHRQYWdlID0gbGluZUNvdW50IC0g
YnJlYWtDYW5kaWRhdGU7Ci0gICAgaWYgKHdpZG93c05lZWRlZCA8PSB3aWRvd3NPblRoZU5leHRQ
YWdlKQotICAgICAgICByZXR1cm4gYnJlYWtDYW5kaWRhdGU7Ci0gICAgLy8gT25seSBicmVhayBh
ZnRlciB0aGUgZmlyc3QgbGluZSB3aXRoIHdpZG93cy4KLSAgICBhdXRvIGxpbmVCcmVhayA9IHN0
ZDo6bWF4PGludD4obGluZUNvdW50IC0gd2lkb3dzTmVlZGVkLCAxKTsKLSAgICBpZiAob3JwaGFu
c05lZWRlZCA+IGxpbmVCcmVhaykKLSAgICAgICAgcmV0dXJuIGJyZWFrQ2FuZGlkYXRlOwotICAg
IC8vIEJyZWFrIG9uIGN1cnJlbnQgcGFnZSBvbmx5LgotICAgIGlmIChzdHJ1dHMuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gbGluZUJyZWFrOwotICAgIEFTU0VSVChzdHJ1dHMubGFzdCgpLmxp
bmVCcmVhayArIDEgPCBsaW5lQ291bnQpOwotICAgIHJldHVybiBzdGQ6Om1heDx1bnNpZ25lZD4o
c3RydXRzLmxhc3QoKS5saW5lQnJlYWsgKyAxLCBsaW5lQnJlYWspOwotfQotCi1zdGF0aWMgTGF5
b3V0VW5pdCBjb21wdXRlT2Zmc2V0QWZ0ZXJMaW5lQnJlYWsoTGF5b3V0VW5pdCBsaW5lQnJlYWtQ
b3NpdGlvbiwgYm9vbCBpc0ZpcnN0TGluZSwgYm9vbCBhdFRoZVRvcE9mQ29sdW1uT3JQYWdlLCBj
b25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCi17Ci0gICAgLy8gTm8gb2Zmc2V0IGZvciB0b3Ag
b2YgdGhlIHBhZ2UgbGluZXMgdW5sZXNzIHdpZG93cyBwdXNoZWQgdGhlIGxpbmUgYnJlYWsuCi0g
ICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBpc0ZpcnN0TGluZSA/IGZsb3cuYm9yZGVyQW5kUGFkZGlu
Z0JlZm9yZSgpIDogMF9sdTsKLSAgICBpZiAoYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSkKLSAgICAg
ICAgcmV0dXJuIG9mZnNldDsKLSAgICByZXR1cm4gb2Zmc2V0ICsgZmxvdy5wYWdlUmVtYWluaW5n
TG9naWNhbEhlaWdodEZvck9mZnNldChsaW5lQnJlYWtQb3NpdGlvbiwgUmVuZGVyQmxvY2tGbG93
OjpFeGNsdWRlUGFnZUJvdW5kYXJ5KTsKLX0KLQotc3RhdGljIHZvaWQgc2V0UGFnZUJyZWFrRm9y
TGluZSh1bnNpZ25lZCBsaW5lQnJlYWtJbmRleCwgUGFnaW5hdGVkTGluZXMmIGxpbmVzLCBSZW5k
ZXJCbG9ja0Zsb3cmIGZsb3csIExheW91dDo6U2ltcGxlTGluZVN0cnV0cyYgc3RydXRzLAotICAg
IGJvb2wgYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSwgYm9vbCBsaW5lRG9lc05vdEZpdCkKLXsKLSAg
ICBhdXRvIGxpbmUgPSBsaW5lcy5hdChsaW5lQnJlYWtJbmRleCk7Ci0gICAgYXV0byByZW1haW5p
bmdMb2dpY2FsSGVpZ2h0ID0gZmxvdy5wYWdlUmVtYWluaW5nTG9naWNhbEhlaWdodEZvck9mZnNl
dChsaW5lLnRvcCwgUmVuZGVyQmxvY2tGbG93OjpFeGNsdWRlUGFnZUJvdW5kYXJ5KTsKLSAgICBh
dXRvJiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKLSAgICBhdXRvIGZpcnN0TGluZURvZXNOb3RGaXQg
PSAhbGluZUJyZWFrSW5kZXggJiYgbGluZS5oZWlnaHQgPCBmbG93LnBhZ2VMb2dpY2FsSGVpZ2h0
Rm9yT2Zmc2V0KGxpbmUudG9wKTsKLSAgICBhdXRvIG1vdmVPcnBoYW5Ub05leHRDb2x1bW4gPSBs
aW5lRG9lc05vdEZpdCAmJiAhc3R5bGUuaGFzQXV0b09ycGhhbnMoKSAmJiBzdHlsZS5vcnBoYW5z
KCkgPiAoc2hvcnQpbGluZUJyZWFrSW5kZXg7Ci0gICAgaWYgKGZpcnN0TGluZURvZXNOb3RGaXQg
fHwgbW92ZU9ycGhhblRvTmV4dENvbHVtbikgewotICAgICAgICBhdXRvIGZpcnN0TGluZSA9IGxp
bmVzLmZpcnN0KCk7Ci0gICAgICAgIGF1dG8gZmlyc3RMaW5lT3ZlcmZsb3dSZWN0ID0gY29tcHV0
ZU92ZXJmbG93KGZsb3csIExheW91dFJlY3QoMF9sdSwgZmlyc3RMaW5lLnRvcCwgMF9sdSwgZmly
c3RMaW5lLmhlaWdodCkpOwotICAgICAgICBhdXRvIGZpcnN0TGluZVVwcGVyT3ZlcmhhbmcgPSBz
dGQ6Om1heChMYXlvdXRVbml0KC1maXJzdExpbmVPdmVyZmxvd1JlY3QueSgpKSwgMF9sdSk7Ci0g
ICAgICAgIGZsb3cuc2V0UGFnaW5hdGlvblN0cnV0KGxpbmUudG9wICsgcmVtYWluaW5nTG9naWNh
bEhlaWdodCArIGZpcnN0TGluZVVwcGVyT3ZlcmhhbmcpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGlmIChhdFRoZVRvcE9mQ29sdW1uT3JQYWdlKQotICAgICAgICBmbG93LnNldFBhZ2VC
cmVhayhsaW5lLnRvcCwgbGluZS5oZWlnaHQpOwotICAgIGVsc2UKLSAgICAgICAgZmxvdy5zZXRQ
YWdlQnJlYWsobGluZS50b3AsIGxpbmUuaGVpZ2h0IC0gcmVtYWluaW5nTG9naWNhbEhlaWdodCk7
Ci0gICAgc3RydXRzLmFwcGVuZCh7IGxpbmVCcmVha0luZGV4LCBjb21wdXRlT2Zmc2V0QWZ0ZXJM
aW5lQnJlYWsobGluZXNbbGluZUJyZWFrSW5kZXhdLnRvcCwgIWxpbmVCcmVha0luZGV4LCBhdFRo
ZVRvcE9mQ29sdW1uT3JQYWdlLCBmbG93KSB9KTsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlTWlu
aW11bVBhZ2VIZWlnaHQoUmVuZGVyQmxvY2tGbG93JiBmbG93LCB1bnNpZ25lZCBsaW5lQ291bnQp
Ci17Ci0gICAgYXV0byYgc3R5bGUgPSBmbG93LnN0eWxlKCk7Ci0gICAgYXV0byB3aWRvd3MgPSBz
dHlsZS5oYXNBdXRvV2lkb3dzKCkgPyAxIDogc3RkOjptYXg8aW50PihzdHlsZS53aWRvd3MoKSwg
MSk7Ci0gICAgYXV0byBvcnBoYW5zID0gc3R5bGUuaGFzQXV0b09ycGhhbnMoKSA/IDEgOiBzdGQ6
Om1heDxpbnQ+KHN0eWxlLm9ycGhhbnMoKSwgMSk7Ci0gICAgYXV0byBtaW5pbXVtTGluZUNvdW50
ID0gc3RkOjptaW48dW5zaWduZWQ+KHN0ZDo6bWF4KHdpZG93cywgb3JwaGFucyksIGxpbmVDb3Vu
dCk7Ci0gICAgZmxvdy51cGRhdGVNaW5pbXVtUGFnZUhlaWdodCgwLCBtaW5pbXVtTGluZUNvdW50
ICogbGluZUhlaWdodEZyb21GbG93KGZsb3cpKTsKLX0KLQotdm9pZCBhZGp1c3RMaW5lUG9zaXRp
b25zRm9yUGFnaW5hdGlvbihTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQmIHNpbXBsZUxpbmVzLCBS
ZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCi17Ci0gICAgTGF5b3V0OjpTaW1wbGVMaW5lU3RydXRzIHN0
cnV0czsKLSAgICBhdXRvIGxpbmVDb3VudCA9IHNpbXBsZUxpbmVzLmxpbmVDb3VudCgpOwotICAg
IHVwZGF0ZU1pbmltdW1QYWdlSGVpZ2h0KGZsb3csIGxpbmVDb3VudCk7Ci0gICAgLy8gRmlyc3Qg
cGFzcyB3aXRoIG5vIHBhZ2luYXRpb24gb2Zmc2V0PwotICAgIGlmICghZmxvdy5wYWdlTG9naWNh
bEhlaWdodEZvck9mZnNldCgwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGxpbmVJ
bmRleCA9IDA7Ci0gICAgYXV0byB3aWRvd3MgPSBmbG93LnN0eWxlKCkuaGFzQXV0b1dpZG93cygp
ID8gMSA6IHN0ZDo6bWF4PGludD4oZmxvdy5zdHlsZSgpLndpZG93cygpLCAxKTsKLSAgICBhdXRv
IG9ycGhhbnMgPSBmbG93LnN0eWxlKCkuaGFzQXV0b09ycGhhbnMoKSA/IDEgOiBzdGQ6Om1heDxp
bnQ+KGZsb3cuc3R5bGUoKS5vcnBoYW5zKCksIDEpOwotICAgIFBhZ2luYXRlZExpbmVzIGxpbmVz
OwotICAgIGZvciAodW5zaWduZWQgcnVuSW5kZXggPSAwOyBydW5JbmRleCA8IHNpbXBsZUxpbmVz
LnJ1bkNvdW50KCk7ICsrcnVuSW5kZXgpIHsKLSAgICAgICAgYXV0byYgcnVuID0gc2ltcGxlTGlu
ZXMucnVuQXQocnVuSW5kZXgpOwotICAgICAgICBpZiAoIXJ1bi5pc0VuZE9mTGluZSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8gbGluZSA9IGNvbXB1dGVMaW5lVG9wQW5k
Qm90dG9tV2l0aE92ZXJmbG93KGZsb3csIGxpbmVJbmRleCwgc3RydXRzKTsKLSAgICAgICAgbGlu
ZXMuYXBwZW5kKGxpbmUpOwotICAgICAgICBhdXRvIHJlbWFpbmluZ0hlaWdodCA9IGZsb3cucGFn
ZVJlbWFpbmluZ0xvZ2ljYWxIZWlnaHRGb3JPZmZzZXQobGluZS50b3AsIFJlbmRlckJsb2NrRmxv
dzo6RXhjbHVkZVBhZ2VCb3VuZGFyeSk7Ci0gICAgICAgIGF1dG8gYXRUaGVUb3BPZkNvbHVtbk9y
UGFnZSA9IGZsb3cucGFnZUxvZ2ljYWxIZWlnaHRGb3JPZmZzZXQobGluZS50b3ApID09IHJlbWFp
bmluZ0hlaWdodDsKLSAgICAgICAgYXV0byBsaW5lRG9lc05vdEZpdCA9IGxpbmUuaGVpZ2h0ID4g
cmVtYWluaW5nSGVpZ2h0OwotICAgICAgICBpZiAobGluZURvZXNOb3RGaXQgfHwgKGF0VGhlVG9w
T2ZDb2x1bW5PclBhZ2UgJiYgbGluZUluZGV4KSkgewotICAgICAgICAgICAgYXV0byBsaW5lQnJl
YWtJbmRleCA9IGNvbXB1dGVMaW5lQnJlYWtJbmRleChsaW5lSW5kZXgsIGxpbmVDb3VudCwgb3Jw
aGFucywgd2lkb3dzLCBzdHJ1dHMpOwotICAgICAgICAgICAgLy8gQXJlIHdlIHN0aWxsIGF0IHRo
ZSB0b3Agb2YgdGhlIGNvbHVtbi9wYWdlPwotICAgICAgICAgICAgYXRUaGVUb3BPZkNvbHVtbk9y
UGFnZSA9IGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UgPyBsaW5lSW5kZXggPT0gbGluZUJyZWFrSW5k
ZXggOiBmYWxzZTsKLSAgICAgICAgICAgIHNldFBhZ2VCcmVha0ZvckxpbmUobGluZUJyZWFrSW5k
ZXgsIGxpbmVzLCBmbG93LCBzdHJ1dHMsIGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UsIGxpbmVEb2Vz
Tm90Rml0KTsKLSAgICAgICAgICAgIC8vIFJlY29tcHV0ZSBsaW5lIHBvc2l0aW9ucyB0aGF0IHdl
IGFscmVhZHkgdmlzaXRlZCBidXQgd2lkb3cgYnJlYWsgcHVzaGVkIHRoZW0gdG8gYSBuZXcgcGFn
ZS4KLSAgICAgICAgICAgIGZvciAoYXV0byBpID0gbGluZUJyZWFrSW5kZXg7IGkgPCBsaW5lcy5z
aXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBsaW5lcy5hdChpKSA9IGNvbXB1dGVMaW5lVG9w
QW5kQm90dG9tV2l0aE92ZXJmbG93KGZsb3csIGksIHN0cnV0cyk7Ci0gICAgICAgIH0KLSAgICAg
ICAgKytsaW5lSW5kZXg7Ci0gICAgfQotICAgIHNpbXBsZUxpbmVzLnNldExpbmVTdHJ1dHMoV1RG
TW92ZShzdHJ1dHMpKTsKLX0KLQotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvU2ltcGxlTGluZUxheW91dFBhZ2luYXRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZGQ2YTE3YzBlNWM5Li4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgUmVuZGVyQmxvY2tGbG93OwotCi1uYW1lc3BhY2UgU2ltcGxlTGluZUxh
eW91dCB7Ci0KLWNsYXNzIExheW91dDsKLSAgICAKLXZvaWQgYWRqdXN0TGluZVBvc2l0aW9uc0Zv
clBhZ2luYXRpb24oTGF5b3V0JiwgUmVuZGVyQmxvY2tGbG93Jik7Ci0KLX0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzYTZjMTg4MTI4ZS4uMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmgiCi0KLSNp
bmNsdWRlICJJbmxpbmVUZXh0Qm94U3R5bGUuaCIKLSNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cu
aCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0
RnVuY3Rpb25zLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBTaW1wbGVMaW5l
TGF5b3V0IHsKLQotc3RhdGljIEZsb2F0UG9pbnQgbGluZVBvc2l0aW9uKGZsb2F0IGxvZ2ljYWxM
ZWZ0LCBmbG9hdCBsb2dpY2FsVG9wKQotewotICAgIHJldHVybiBGbG9hdFBvaW50KGxvZ2ljYWxM
ZWZ0LCByb3VuZGYobG9naWNhbFRvcCkpOwotfQotCi1zdGF0aWMgRmxvYXRTaXplIGxpbmVTaXpl
KGZsb2F0IGxvZ2ljYWxMZWZ0LCBmbG9hdCBsb2dpY2FsUmlnaHQsIGZsb2F0IGhlaWdodCkKLXsK
LSAgICByZXR1cm4gRmxvYXRTaXplKGxvZ2ljYWxSaWdodCAtIGxvZ2ljYWxMZWZ0LCBoZWlnaHQp
OwotfQotCi1SdW5SZXNvbHZlcjo6UnVuOjpSdW4oY29uc3QgSXRlcmF0b3ImIGl0ZXJhdG9yKQot
ICAgIDogbV9pdGVyYXRvcihpdGVyYXRvcikKLXsKLX0KLQotU3RyaW5nIFJ1blJlc29sdmVyOjpS
dW46OnRleHRXaXRoSHlwaGVuKCkgY29uc3QKLXsKLSAgICBhdXRvJiBydW4gPSBtX2l0ZXJhdG9y
LnNpbXBsZVJ1bigpOwotICAgIEFTU0VSVChydW4uaGFzSHlwaGVuKTsKLSAgICAvLyBFbXB0eSBy
dW5zIHNob3VsZCBub3QgaGF2ZSBoeXBoZW4uCi0gICAgQVNTRVJUKHJ1bi5zdGFydCA8IHJ1bi5l
bmQpOwotICAgIGF1dG8mIHNlZ21lbnQgPSBtX2l0ZXJhdG9yLnJlc29sdmVyKCkubV9mbG93Q29u
dGVudHMuc2VnbWVudEZvclJ1bihydW4uc3RhcnQsIHJ1bi5lbmQpOwotICAgIGF1dG8gdGV4dCA9
IFN0cmluZ1ZpZXcoc2VnbWVudC50ZXh0KS5zdWJzdHJpbmcoc2VnbWVudC50b1NlZ21lbnRQb3Np
dGlvbihydW4uc3RhcnQpLCBydW4uZW5kIC0gcnVuLnN0YXJ0KTsKLSAgICByZXR1cm4gbWFrZVN0
cmluZyh0ZXh0LCBtX2l0ZXJhdG9yLnJlc29sdmVyKCkuZmxvdygpLnN0eWxlKCkuaHlwaGVuU3Ry
aW5nKCkpOwotfQotCi1GbG9hdFJlY3QgUnVuUmVzb2x2ZXI6OlJ1bjo6cmVjdCgpIGNvbnN0Ci17
Ci0gICAgYXV0byYgcnVuID0gbV9pdGVyYXRvci5zaW1wbGVSdW4oKTsKLSAgICBhdXRvJiByZXNv
bHZlciA9IG1faXRlcmF0b3IucmVzb2x2ZXIoKTsKLSAgICBmbG9hdCBiYXNlbGluZSA9IGNvbXB1
dGVCYXNlbGluZVBvc2l0aW9uKCk7Ci0gICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IGxpbmVQb3Np
dGlvbihydW4ubG9naWNhbExlZnQsIGJhc2VsaW5lIC0gcmVzb2x2ZXIubV9hc2NlbnQpOwotICAg
IEZsb2F0U2l6ZSBzaXplID0gbGluZVNpemUocnVuLmxvZ2ljYWxMZWZ0LCBydW4ubG9naWNhbFJp
Z2h0LCByZXNvbHZlci5tX2FzY2VudCArIHJlc29sdmVyLm1fZGVzY2VudCArIHJlc29sdmVyLm1f
dmlzdWFsT3ZlcmZsb3dPZmZzZXQpOwotCi0gICAgcmV0dXJuIEZsb2F0UmVjdChwb3NpdGlvbiwg
c2l6ZSk7Ci19Ci0KLVN0cmluZ1ZpZXcgUnVuUmVzb2x2ZXI6OlJ1bjo6dGV4dCgpIGNvbnN0Ci17
Ci0gICAgYXV0byYgcnVuID0gbV9pdGVyYXRvci5zaW1wbGVSdW4oKTsKLSAgICBBU1NFUlQocnVu
LnN0YXJ0IDwgcnVuLmVuZCk7Ci0gICAgYXV0byYgc2VnbWVudCA9IG1faXRlcmF0b3IucmVzb2x2
ZXIoKS5tX2Zsb3dDb250ZW50cy5zZWdtZW50Rm9yUnVuKHJ1bi5zdGFydCwgcnVuLmVuZCk7Ci0g
ICAgLy8gV2UgY3VycmVudGx5IHNwbGl0IHJ1bnMgb24gc2VnbWVudCBib3VuZGFyaWVzIChkaWZm
ZXJlbnQgUmVuZGVyT2JqZWN0KS4KLSAgICBBU1NFUlQocnVuLmVuZCA8PSBzZWdtZW50LmVuZCk7
Ci0gICAgcmV0dXJuIFN0cmluZ1ZpZXcoc2VnbWVudC50ZXh0KS5zdWJzdHJpbmcoc2VnbWVudC50
b1NlZ21lbnRQb3NpdGlvbihydW4uc3RhcnQpLCBydW4uZW5kIC0gcnVuLnN0YXJ0KTsKLX0KLQot
Y29uc3QgUmVuZGVyT2JqZWN0JiBSdW5SZXNvbHZlcjo6UnVuOjpyZW5kZXJlcigpIGNvbnN0Ci17
Ci0gICAgYXV0byYgcnVuID0gbV9pdGVyYXRvci5zaW1wbGVSdW4oKTsKLSAgICAvLyBGbG93Q29u
dGVudHMgY2Fubm90IGRpZmZlcmVudGlhdGUgZW1wdHkgcnVucy4KLSAgICBBU1NFUlQocnVuLnN0
YXJ0ICE9IHJ1bi5lbmQpOwotICAgIHJldHVybiBtX2l0ZXJhdG9yLnJlc29sdmVyKCkubV9mbG93
Q29udGVudHMuc2VnbWVudEZvclJ1bihydW4uc3RhcnQsIHJ1bi5lbmQpLnJlbmRlcmVyOwotfQot
Ci11bnNpZ25lZCBSdW5SZXNvbHZlcjo6UnVuOjpsb2NhbFN0YXJ0KCkgY29uc3QKLXsKLSAgICBh
dXRvJiBydW4gPSBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpOwotICAgIC8vIEZsb3dDb250ZW50cyBj
YW5ub3QgZGlmZmVyZW50aWF0ZSBlbXB0eSBydW5zLgotICAgIEFTU0VSVChydW4uc3RhcnQgIT0g
cnVuLmVuZCk7Ci0gICAgcmV0dXJuIG1faXRlcmF0b3IucmVzb2x2ZXIoKS5tX2Zsb3dDb250ZW50
cy5zZWdtZW50Rm9yUnVuKHJ1bi5zdGFydCwgcnVuLmVuZCkudG9TZWdtZW50UG9zaXRpb24ocnVu
LnN0YXJ0KTsKLX0KLQotdW5zaWduZWQgUnVuUmVzb2x2ZXI6OlJ1bjo6bG9jYWxFbmQoKSBjb25z
dAotewotICAgIGF1dG8mIHJ1biA9IG1faXRlcmF0b3Iuc2ltcGxlUnVuKCk7Ci0gICAgLy8gRmxv
d0NvbnRlbnRzIGNhbm5vdCBkaWZmZXJlbnRpYXRlIGVtcHR5IHJ1bnMuCi0gICAgQVNTRVJUKHJ1
bi5zdGFydCAhPSBydW4uZW5kKTsKLSAgICByZXR1cm4gbV9pdGVyYXRvci5yZXNvbHZlcigpLm1f
Zmxvd0NvbnRlbnRzLnNlZ21lbnRGb3JSdW4ocnVuLnN0YXJ0LCBydW4uZW5kKS50b1NlZ21lbnRQ
b3NpdGlvbihydW4uZW5kKTsKLX0KLQotUnVuUmVzb2x2ZXI6Okl0ZXJhdG9yOjpJdGVyYXRvcihj
b25zdCBSdW5SZXNvbHZlciYgcmVzb2x2ZXIsIHVuc2lnbmVkIHJ1bkluZGV4LCB1bnNpZ25lZCBs
aW5lSW5kZXgpCi0gICAgOiBtX2xheW91dCgmcmVzb2x2ZXIubV9sYXlvdXQpCi0gICAgLCBtX3Jl
c29sdmVyKCZyZXNvbHZlcikKLSAgICAsIG1fcnVuSW5kZXgocnVuSW5kZXgpCi0gICAgLCBtX2xp
bmVJbmRleChsaW5lSW5kZXgpCi17Ci0gICAgQVNTRVJUKCZyZXNvbHZlciA9PSAmbV9sYXlvdXQt
PnJ1blJlc29sdmVyKCkpOwotfQotCi1SdW5SZXNvbHZlcjo6SXRlcmF0b3ImIFJ1blJlc29sdmVy
OjpJdGVyYXRvcjo6YWR2YW5jZSgpCi17Ci0gICAgaWYgKHNpbXBsZVJ1bigpLmlzRW5kT2ZMaW5l
KQotICAgICAgICArK21fbGluZUluZGV4OwotICAgICsrbV9ydW5JbmRleDsKLSAgICByZXR1cm4g
KnRoaXM7Ci19Ci0KLVJ1blJlc29sdmVyOjpJdGVyYXRvciYgUnVuUmVzb2x2ZXI6Okl0ZXJhdG9y
OjphZHZhbmNlTGluZXModW5zaWduZWQgbGluZUNvdW50KQotewotICAgIHVuc2lnbmVkIHJ1bkNv
dW50ID0gbGF5b3V0KCkucnVuQ291bnQoKTsKLSAgICBpZiAocnVuQ291bnQgPT0gbGF5b3V0KCku
bGluZUNvdW50KCkpIHsKLSAgICAgICAgbV9ydW5JbmRleCA9IHN0ZDo6bWluKHJ1bkNvdW50LCBt
X3J1bkluZGV4ICsgbGluZUNvdW50KTsKLSAgICAgICAgbV9saW5lSW5kZXggPSBtX3J1bkluZGV4
OwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIHVuc2lnbmVkIHRhcmdldCA9IG1f
bGluZUluZGV4ICsgbGluZUNvdW50OwotICAgIHdoaWxlIChtX2xpbmVJbmRleCA8IHRhcmdldCAm
JiBtX3J1bkluZGV4IDwgcnVuQ291bnQpCi0gICAgICAgIGFkdmFuY2UoKTsKLQotICAgIHJldHVy
biAqdGhpczsKLX0KLQotUnVuUmVzb2x2ZXI6OlJ1blJlc29sdmVyKGNvbnN0IFJlbmRlckJsb2Nr
RmxvdyYgZmxvdywgY29uc3QgTGF5b3V0JiBsYXlvdXQpCi0gICAgOiBtX2Zsb3dSZW5kZXJlcihm
bG93KQotICAgICwgbV9sYXlvdXQobGF5b3V0KQotICAgICwgbV9mbG93Q29udGVudHMoZmxvdykK
LSAgICAsIG1fbGluZUhlaWdodChsaW5lSGVpZ2h0RnJvbUZsb3coZmxvdykpCi0gICAgLCBtX2Jh
c2VsaW5lKGJhc2VsaW5lRnJvbUZsb3coZmxvdykpCi0gICAgLCBtX2JvcmRlckFuZFBhZGRpbmdC
ZWZvcmUoZmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkpCi0gICAgLCBtX2FzY2VudChmbG93
LnN0eWxlKCkuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpKQotICAgICwgbV9k
ZXNjZW50KGZsb3cuc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuZGVzY2VudCgp
KQotICAgICwgbV92aXN1YWxPdmVyZmxvd09mZnNldCh2aXN1YWxPdmVyZmxvd0ZvckRlY29yYXRp
b25zKGZsb3cuc3R5bGUoKSwgbnVsbHB0cikuYm90dG9tKQotewotfQotCi11bnNpZ25lZCBSdW5S
ZXNvbHZlcjo6YWRqdXN0TGluZUluZGV4Rm9yU3RydXRzKExheW91dFVuaXQgeSwgSW5kZXhUeXBl
IHR5cGUsIHVuc2lnbmVkIGxpbmVJbmRleENhbmRpZGF0ZSkgY29uc3QKLXsKLSAgICBhdXRvJiBz
dHJ1dHMgPSBtX2xheW91dC5zdHJ1dHMoKTsKLSAgICAvLyBXZSBuZWVkIHRvIG9mZnNldCB0aGUg
bGluZUluZGV4IHdpdGggbGluZSBzdHJ1dHMgd2hlbiB0aGVyZSdzIGFuIGFjdHVhbCBzdHJ1dCBi
ZWZvcmUgdGhlIGNhbmRpZGF0ZS4KLSAgICBhdXRvJiBzdHJ1dCA9IHN0cnV0cy5maXJzdCgpOwot
ICAgIGlmIChzdHJ1dC5saW5lQnJlYWsgPj0gbGluZUluZGV4Q2FuZGlkYXRlKQotICAgICAgICBy
ZXR1cm4gbGluZUluZGV4Q2FuZGlkYXRlOwotICAgIHVuc2lnbmVkIHN0cnV0SW5kZXggPSAwOwot
ICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBsYXN0SW5kZXhDYW5kaWRhdGU7Ci0gICAgYXV0byB0b3Ag
PSBzdHJ1dC5saW5lQnJlYWsgKiBtX2xpbmVIZWlnaHQ7Ci0gICAgYXV0byBsaW5lSGVpZ2h0V2l0
aE92ZXJmbG93ID0gbV9saW5lSGVpZ2h0OwotICAgIC8vIElmIGZvbnQgaXMgbGFyZ2VyIHRoYW4g
dGhlIGxpbmUgaGVpZ2h0IChnbHlwaHMgb3ZlcmZsb3cpLCB1c2UgdGhlIGZvbnQgc2l6ZSB3aGVu
IGNoZWNraW5nIGxpbmUgYm91bmRhcmllcy4KLSAgICBpZiAobV9hc2NlbnQgKyBtX2Rlc2NlbnQg
PiBtX2xpbmVIZWlnaHQpIHsKLSAgICAgICAgbGluZUhlaWdodFdpdGhPdmVyZmxvdyA9IG1fYXNj
ZW50ICsgbV9kZXNjZW50OwotICAgICAgICB0b3AgKz0gbV9iYXNlbGluZSAtIG1fYXNjZW50Owot
ICAgIH0KLSAgICBhdXRvIGJvdHRvbSA9IHRvcCArIGxpbmVIZWlnaHRXaXRoT3ZlcmZsb3c7Ci0g
ICAgZm9yIChhdXRvIGxpbmVJbmRleCA9IHN0cnV0LmxpbmVCcmVhazsgbGluZUluZGV4IDwgbV9s
YXlvdXQubGluZUNvdW50KCk7ICsrbGluZUluZGV4KSB7Ci0gICAgICAgIGZsb2F0IHN0cnV0T2Zm
c2V0ID0gMDsKLSAgICAgICAgaWYgKHN0cnV0SW5kZXggPCBzdHJ1dHMuc2l6ZSgpICYmIHN0cnV0
cy5hdChzdHJ1dEluZGV4KS5saW5lQnJlYWsgPT0gbGluZUluZGV4KQotICAgICAgICAgICAgc3Ry
dXRPZmZzZXQgPSBzdHJ1dHMuYXQoc3RydXRJbmRleCsrKS5vZmZzZXQ7Ci0gICAgICAgIGJvdHRv
bSA9IHRvcCArIHN0cnV0T2Zmc2V0ICsgbGluZUhlaWdodFdpdGhPdmVyZmxvdzsKLSAgICAgICAg
aWYgKHkgPj0gdG9wICYmIHkgPCBib3R0b20pIHsKLSAgICAgICAgICAgIGlmICh0eXBlID09IElu
ZGV4VHlwZTo6Rmlyc3QpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmVJbmRleDsKLSAgICAg
ICAgICAgIGxhc3RJbmRleENhbmRpZGF0ZSA9IGxpbmVJbmRleDsKLSAgICAgICAgfSBlbHNlIGlm
IChsYXN0SW5kZXhDYW5kaWRhdGUpCi0gICAgICAgICAgICByZXR1cm4gKmxhc3RJbmRleENhbmRp
ZGF0ZTsKLSAgICAgICAgdG9wICs9IG1fbGluZUhlaWdodCArIHN0cnV0T2Zmc2V0OwotICAgIH0K
LSAgICBpZiAobGFzdEluZGV4Q2FuZGlkYXRlIHx8IHkgPj0gYm90dG9tKQotICAgICAgICByZXR1
cm4gbV9sYXlvdXQubGluZUNvdW50KCkgLSAxOwotICAgIC8vIFdlIG1pc3NlZCB0aGUgbGluZS4K
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbGluZUluZGV4Q2FuZGlkYXRl
OwotfQotCi11bnNpZ25lZCBSdW5SZXNvbHZlcjo6bGluZUluZGV4Rm9ySGVpZ2h0KExheW91dFVu
aXQgaGVpZ2h0LCBJbmRleFR5cGUgdHlwZSkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9saW5lSGVp
Z2h0KTsKLSAgICBmbG9hdCB5ID0gaGVpZ2h0IC0gbV9ib3JkZXJBbmRQYWRkaW5nQmVmb3JlOwot
ICAgIC8vIExpbmVzIG1heSBvdmVybGFwLCBhZGp1c3QgdG8gZ2V0IHRoZSBmaXJzdCBvciBsYXN0
IGxpbmUgYXQgdGhpcyBoZWlnaHQuCi0gICAgYXV0byBhZGp1c3RlZFkgPSB5OwotICAgIGlmICh0
eXBlID09IEluZGV4VHlwZTo6Rmlyc3QpCi0gICAgICAgIGFkanVzdGVkWSArPSBtX2xpbmVIZWln
aHQgLSAobV9iYXNlbGluZSArIG1fZGVzY2VudCk7Ci0gICAgZWxzZQotICAgICAgICBhZGp1c3Rl
ZFkgLT0gbV9iYXNlbGluZSAtIG1fYXNjZW50OwotICAgIGFkanVzdGVkWSA9IHN0ZDo6bWF4PGZs
b2F0PihhZGp1c3RlZFksIDApOwotICAgIGF1dG8gbGluZUluZGV4Q2FuZGlkYXRlID0gIHN0ZDo6
bWluPHVuc2lnbmVkPihhZGp1c3RlZFkgLyBtX2xpbmVIZWlnaHQsIG1fbGF5b3V0LmxpbmVDb3Vu
dCgpIC0gMSk7Ci0gICAgaWYgKG1fbGF5b3V0Lmhhc0xpbmVTdHJ1dHMoKSkKLSAgICAgICAgcmV0
dXJuIGFkanVzdExpbmVJbmRleEZvclN0cnV0cyhMYXlvdXRVbml0KHkpLCB0eXBlLCBsaW5lSW5k
ZXhDYW5kaWRhdGUpOwotICAgIHJldHVybiBsaW5lSW5kZXhDYW5kaWRhdGU7Ci19Ci0KLVdURjo6
SXRlcmF0b3JSYW5nZTxSdW5SZXNvbHZlcjo6SXRlcmF0b3I+IFJ1blJlc29sdmVyOjpyYW5nZUZv
clJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkgY29uc3QKLXsgCi0gICAgaWYgKCFtX2xpbmVI
ZWlnaHQpCi0gICAgICAgIHJldHVybiB7IGJlZ2luKCksIGVuZCgpIH07Ci0KLSAgICB1bnNpZ25l
ZCBmaXJzdExpbmUgPSBsaW5lSW5kZXhGb3JIZWlnaHQocmVjdC55KCksIEluZGV4VHlwZTo6Rmly
c3QpOwotICAgIHVuc2lnbmVkIGxhc3RMaW5lID0gc3RkOjptYXgoZmlyc3RMaW5lLCBsaW5lSW5k
ZXhGb3JIZWlnaHQocmVjdC5tYXhZKCksIEluZGV4VHlwZTo6TGFzdCkpOwotICAgIGF1dG8gcmFu
Z2VCZWdpbiA9IGJlZ2luKCkuYWR2YW5jZUxpbmVzKGZpcnN0TGluZSk7Ci0gICAgaWYgKHJhbmdl
QmVnaW4gPT0gZW5kKCkpCi0gICAgICAgIHJldHVybiB7IGVuZCgpLCBlbmQoKSB9OwotICAgIGF1
dG8gcmFuZ2VFbmQgPSByYW5nZUJlZ2luOwotICAgIEFTU0VSVChsYXN0TGluZSA+PSBmaXJzdExp
bmUpOwotICAgIHJhbmdlRW5kLmFkdmFuY2VMaW5lcyhsYXN0TGluZSAtIGZpcnN0TGluZSArIDEp
OwotICAgIHJldHVybiB7IHJhbmdlQmVnaW4sIHJhbmdlRW5kIH07Ci19Ci0KLVdURjo6SXRlcmF0
b3JSYW5nZTxSdW5SZXNvbHZlcjo6SXRlcmF0b3I+IFJ1blJlc29sdmVyOjpyYW5nZUZvckxpbmUo
dW5zaWduZWQgbGluZUluZGV4KSBjb25zdAotewotICAgIGF1dG8gcmFuZ2VCZWdpbiA9IGJlZ2lu
KCkuYWR2YW5jZUxpbmVzKGxpbmVJbmRleCk7Ci0gICAgaWYgKHJhbmdlQmVnaW4gPT0gZW5kKCkp
Ci0gICAgICAgIHJldHVybiB7IGVuZCgpLCBlbmQoKSB9OwotICAgIGF1dG8gcmFuZ2VFbmQgPSBy
YW5nZUJlZ2luOwotICAgIHJhbmdlRW5kLmFkdmFuY2VMaW5lcygxKTsKLSAgICByZXR1cm4geyBy
YW5nZUJlZ2luLCByYW5nZUVuZCB9OwotfQotCi1XVEY6Okl0ZXJhdG9yUmFuZ2U8UnVuUmVzb2x2
ZXI6Okl0ZXJhdG9yPiBSdW5SZXNvbHZlcjo6cmFuZ2VGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJP
YmplY3QmIHJlbmRlcmVyKSBjb25zdAotewotICAgIGlmIChiZWdpbigpID09IGVuZCgpKQotICAg
ICAgICByZXR1cm4geyBlbmQoKSwgZW5kKCkgfTsKLSAgICBGbG93Q29udGVudHM6Okl0ZXJhdG9y
IHNlZ21lbnQgPSBtX2Zsb3dDb250ZW50cy5iZWdpbigpOwotICAgIGF1dG8gcnVuID0gYmVnaW4o
KTsKLSAgICBBU1NFUlQoc2VnbWVudC0+c3RhcnQgPD0gKCpydW4pLnN0YXJ0KCkpOwotICAgIC8v
IE1vdmUgcnVuIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlZ21lbnQuCi0gICAgd2hpbGUgKCZz
ZWdtZW50LT5yZW5kZXJlciAhPSAmcmVuZGVyZXIgJiYgcnVuICE9IGVuZCgpKSB7Ci0gICAgICAg
IGlmICgoKnJ1bikuc3RhcnQoKSA9PSBzZWdtZW50LT5zdGFydCAmJiAoKnJ1bikuZW5kKCkgPT0g
c2VnbWVudC0+ZW5kKSB7Ci0gICAgICAgICAgICArK3J1bjsKLSAgICAgICAgICAgICsrc2VnbWVu
dDsKLSAgICAgICAgfSBlbHNlIGlmICgoKnJ1bikuc3RhcnQoKSA8IHNlZ21lbnQtPmVuZCkKLSAg
ICAgICAgICAgICsrcnVuOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICArK3NlZ21lbnQ7Ci0g
ICAgICAgIEFTU0VSVChzZWdtZW50ICE9IG1fZmxvd0NvbnRlbnRzLmVuZCgpKTsKLSAgICB9Ci0g
ICAgLy8gRG8gd2UgYWN0dWFsbHkgaGF2ZSBhIHJ1biBmb3IgdGhpcyByZW5kZXJlcj8KLSAgICAv
LyBDb2xsYXBzZWQgd2hpdGVzcGFjZSB3aXRoIGRlZGljYXRlZCByZW5kZXJlciBjb3VsZCBlbmQg
dXAgd2l0aCBubyBydW4gYXQgYWxsLgotICAgIGlmIChydW4gPT0gZW5kKCkgfHwgKHNlZ21lbnQt
PnN0YXJ0ICE9IHNlZ21lbnQtPmVuZCAmJiBzZWdtZW50LT5lbmQgPD0gKCpydW4pLnN0YXJ0KCkp
KQotICAgICAgICByZXR1cm4geyBlbmQoKSwgZW5kKCkgfTsKLQotICAgIGF1dG8gcmFuZ2VCZWdp
biA9IHJ1bjsKLSAgICAvLyBNb3ZlIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBzZWdtZW50LgotICAg
IHdoaWxlIChydW4gIT0gZW5kKCkgJiYgKCpydW4pLnN0YXJ0KCkgPCBzZWdtZW50LT5lbmQpCi0g
ICAgICAgICsrcnVuOwotICAgIC8vIFNwZWNpYWwgY2FzZSB3aGVuIHNlZ21lbnQgPT0gcnVuLgot
ICAgIGlmIChydW4gPT0gcmFuZ2VCZWdpbikKLSAgICAgICAgKytydW47Ci0gICAgcmV0dXJuIHsg
cmFuZ2VCZWdpbiwgcnVuIH07Ci19Ci0KLVJ1blJlc29sdmVyOjpJdGVyYXRvciBSdW5SZXNvbHZl
cjo6cnVuRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdAotewotICAgIGlm
ICghbV9saW5lSGVpZ2h0KQotICAgICAgICByZXR1cm4gZW5kKCk7Ci0gICAgaWYgKGJlZ2luKCkg
PT0gZW5kKCkpCi0gICAgICAgIHJldHVybiBlbmQoKTsKLSAgICB1bnNpZ25lZCBsaW5lSW5kZXgg
PSBsaW5lSW5kZXhGb3JIZWlnaHQocG9pbnQueSgpLCBJbmRleFR5cGU6Okxhc3QpOwotICAgIGF1
dG8geCA9IHBvaW50LngoKSAtIG1fYm9yZGVyQW5kUGFkZGluZ0JlZm9yZTsKLSAgICBhdXRvIGl0
ID0gYmVnaW4oKTsKLSAgICBpdC5hZHZhbmNlTGluZXMobGluZUluZGV4KTsKLSAgICAvLyBQb2lu
dCBpcyBhdCB0aGUgbGVmdCBzaWRlIG9mIHRoZSBmaXJzdCBydW4gb24gdGhpcyBsaW5lLgotICAg
IGlmICgoKml0KS5sb2dpY2FsTGVmdCgpID4geCkKLSAgICAgICAgcmV0dXJuIGl0OwotICAgIC8v
IEFkdmFuY2UgdG8gdGhlIGZpcnN0IGNhbmRpZGF0ZSBydW4gb24gdGhpcyBsaW5lLgotICAgIHdo
aWxlIChpdCAhPSBlbmQoKSAmJiAoKml0KS5sb2dpY2FsUmlnaHQoKSA8IHggJiYgbGluZUluZGV4
ID09IGl0LmxpbmVJbmRleCgpKQotICAgICAgICArK2l0OwotICAgIC8vIFdlIGp1bXBlZCB0byB0
aGUgbmV4dCBsaW5lIHNvIHRoZSBwb2ludCBpcyBhdCB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgcHJl
dmlvdXMgbGluZS4KLSAgICBpZiAoaXQubGluZUluZGV4KCkgPiBsaW5lSW5kZXgpCi0gICAgICAg
IHJldHVybiAtLWl0OwotICAgIC8vIE5vdyB3ZSBoYXZlIGEgY2FuZGlkYXRlIHJ1bi4KLSAgICAv
LyBGaW5kIHRoZSBsYXN0IHJ1biB0aGF0IHN0aWxsIGNvbnRhaW5zIHRoaXMgcG9pbnQgKHRha2lu
ZyBvdmVybGFwcGluZyBydW5zIHdpdGggb2RkIHdvcmQgc3BhY2luZyB2YWx1ZXMgaW50byBhY2Nv
dW50KS4KLSAgICB3aGlsZSAoaXQgIT0gZW5kKCkgJiYgKCppdCkubG9naWNhbExlZnQoKSA8PSB4
ICYmIGxpbmVJbmRleCA9PSBpdC5saW5lSW5kZXgoKSkKLSAgICAgICAgKytpdDsKLSAgICByZXR1
cm4gLS1pdDsKLX0KLQotV1RGOjpJdGVyYXRvclJhbmdlPFJ1blJlc29sdmVyOjpJdGVyYXRvcj4g
UnVuUmVzb2x2ZXI6OnJhbmdlRm9yUmVuZGVyZXJXaXRoT2Zmc2V0cyhjb25zdCBSZW5kZXJPYmpl
Y3QmIHJlbmRlcmVyLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KSBj
b25zdAotewotICAgIEFTU0VSVChzdGFydE9mZnNldCA8PSBlbmRPZmZzZXQpOwotICAgIGF1dG8g
cmFuZ2UgPSByYW5nZUZvclJlbmRlcmVyKHJlbmRlcmVyKTsKLSAgICBpZiAocmFuZ2UuYmVnaW4o
KSA9PSByYW5nZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHsgZW5kKCksIGVuZCgpIH07Ci0gICAg
YXV0byBpdCA9IHJhbmdlLmJlZ2luKCk7Ci0gICAgYXV0byBsb2NhbEVuZCA9ICgqaXQpLnN0YXJ0
KCkgKyBlbmRPZmZzZXQ7Ci0gICAgLy8gQWR2YW5jZSB0byB0aGUgZmlyc3QgcnVuIGJlZm9yZSB0
aGUgc3RhcnQgb2Zmc2V0LiBPbmx5IHRoZSBmaXJzdCBub2RlIGluIGEgcmFuZ2UgY2FuIGhhdmUg
YSBzdGFydE9mZnNldC4KLSAgICAvLyBOb3RlIHRoYXQgdGhlIHN0YXJ0IG9mZnNldCBtYXkgY29p
bmNpZGUgd2l0aCB0aGUgZW5kIG9mIGEgcnVuLiBUaGUgcnVuIGlzIHN0aWxsIGNvbnNpZGVyZWQg
c28gdGhhdCB3ZQotICAgIC8vIGNhbiByZXR1cm4gYW4gZW1wdHkgcmVjdCwgd2hpY2ggY29uZm9y
bXMgdG8gdGhlIGJlaGF2aW9yIG9mIEVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKS4KLSAgICB3aGls
ZSAoaXQgIT0gcmFuZ2UuZW5kKCkgJiYgKCppdCkuZW5kKCkgPCBzdGFydE9mZnNldCkKLSAgICAg
ICAgKytpdDsKLSAgICBpZiAoaXQgPT0gcmFuZ2UuZW5kKCkpCi0gICAgICAgIHJldHVybiB7IGVu
ZCgpLCBlbmQoKSB9OwotICAgIGF1dG8gcmFuZ2VCZWdpbiA9IGl0OwotICAgIC8vIFNwZWNpYWwg
Y2FzZSBlbXB0eSByYW5nZXMgdGhhdCBzdGFydCBhdCB0aGUgZWRnZSBvZiB0aGUgcnVuLiBBcHBh
cmVudGx5IG5vcm1hbCBsaW5lIGxheW91dCBpbmNsdWRlIHRob3NlLgotICAgIGlmIChsb2NhbEVu
ZCA9PSBzdGFydE9mZnNldCAmJiAoKml0KS5zdGFydCgpID09IGxvY2FsRW5kKQotICAgICAgICBy
ZXR1cm4geyByYW5nZUJlZ2luLCArK2l0IH07Ci0gICAgLy8gQWR2YW5jZSBiZXlvbmQgdGhlIGxh
c3QgcnVuIHdpdGggdGhlIGVuZCBvZmZzZXQuCi0gICAgd2hpbGUgKGl0ICE9IHJhbmdlLmVuZCgp
ICYmICgqaXQpLnN0YXJ0KCkgPCBsb2NhbEVuZCkKLSAgICAgICAgKytpdDsKLSAgICByZXR1cm4g
eyByYW5nZUJlZ2luLCBpdCB9OwotfQotCi1MaW5lUmVzb2x2ZXI6Okl0ZXJhdG9yOjpJdGVyYXRv
cihSdW5SZXNvbHZlcjo6SXRlcmF0b3IgcnVuSXRlcmF0b3IpCi0gICAgOiBtX3J1bkl0ZXJhdG9y
KHJ1bkl0ZXJhdG9yKQotewotfQotCi1GbG9hdFJlY3QgTGluZVJlc29sdmVyOjpJdGVyYXRvcjo6
b3BlcmF0b3IqKCkgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBjdXJyZW50TGluZSA9IG1fcnVuSXRl
cmF0b3IubGluZUluZGV4KCk7Ci0gICAgYXV0byBpdCA9IG1fcnVuSXRlcmF0b3I7Ci0gICAgRmxv
YXRSZWN0IHJlY3QgPSAoKml0KS5yZWN0KCk7Ci0gICAgd2hpbGUgKGl0LmFkdmFuY2UoKS5saW5l
SW5kZXgoKSA9PSBjdXJyZW50TGluZSkKLSAgICAgICAgcmVjdC51bml0ZSgoKml0KS5yZWN0KCkp
OwotICAgIHJldHVybiByZWN0OwotfQotCi1jb25zdCBSZW5kZXJPYmplY3QmIExpbmVSZXNvbHZl
cjo6SXRlcmF0b3I6OnJlbmRlcmVyKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogVGhpcyB3b3Jr
cyBhcyBsb25nIGFzIHdlJ3ZlIGdvdCBvbmx5IG9uZSByZW5kZXJlciBwZXIgbGluZS4KLSAgICBh
dXRvIHJ1biA9ICptX3J1bkl0ZXJhdG9yOwotICAgIHJldHVybiBtX3J1bkl0ZXJhdG9yLnJlc29s
dmVyKCkuZmxvd0NvbnRlbnRzKCkuc2VnbWVudEZvclJ1bihydW4uc3RhcnQoKSwgcnVuLmVuZCgp
KS5yZW5kZXJlcjsKLX0KLQotTGluZVJlc29sdmVyOjpMaW5lUmVzb2x2ZXIoY29uc3QgUnVuUmVz
b2x2ZXImIHJ1blJlc29sdmVyKQotICAgIDogbV9ydW5SZXNvbHZlcihydW5SZXNvbHZlcikKLXsK
LX0KLQotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxp
bmVMYXlvdXRSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXRSZXNvbHZlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzYwMDQ3ZjU1
NzMuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGlu
ZUxheW91dFJlc29sdmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMTcgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgotI2luY2x1ZGUg
IlJlbmRlckJsb2NrRmxvdy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXQuaCIKLSNpbmNs
dWRlICJTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmgiCi0jaW5jbHVkZSA8d3RmL0l0ZXJh
dG9yUmFuZ2UuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewotCi1jbGFzcyBSdW5SZXNv
bHZlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgY2xhc3Mg
SXRlcmF0b3I7Ci0KLSAgICBjbGFzcyBSdW4gewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGlj
aXQgUnVuKGNvbnN0IEl0ZXJhdG9yJik7Ci0KLSAgICAgICAgLy8gUG9zaXRpb24gcmVsYXRpdmUg
dG8gdGhlIGVuY2xvc2luZyBmbG93IGJsb2NrLgotICAgICAgICB1bnNpZ25lZCBzdGFydCgpIGNv
bnN0OwotICAgICAgICB1bnNpZ25lZCBlbmQoKSBjb25zdDsKLSAgICAgICAgLy8gUG9zaXRpb24g
cmVsYXRpdmUgdG8gdGhlIGFjdHVhbCByZW5kZXJlci4KLSAgICAgICAgdW5zaWduZWQgbG9jYWxT
dGFydCgpIGNvbnN0OwotICAgICAgICB1bnNpZ25lZCBsb2NhbEVuZCgpIGNvbnN0OwotCi0gICAg
ICAgIGZsb2F0IGxvZ2ljYWxMZWZ0KCkgY29uc3Q7Ci0gICAgICAgIGZsb2F0IGxvZ2ljYWxSaWdo
dCgpIGNvbnN0OwotCi0gICAgICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3Q7Ci0gICAgICAgIGZs
b2F0IGV4cGFuc2lvbigpIGNvbnN0OwotICAgICAgICBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNp
b25CZWhhdmlvcigpIGNvbnN0OwotICAgICAgICBpbnQgYmFzZWxpbmVQb3NpdGlvbigpIGNvbnN0
OwotICAgICAgICBpbnQgYmFzZWxpbmUoKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdG9yLnJlc29s
dmVyKCkubV9iYXNlbGluZTsgfQotICAgICAgICBTdHJpbmdWaWV3IHRleHQoKSBjb25zdDsKLSAg
ICAgICAgU3RyaW5nIHRleHRXaXRoSHlwaGVuKCkgY29uc3Q7Ci0gICAgICAgIGNvbnN0IFJlbmRl
ck9iamVjdCYgcmVuZGVyZXIoKSBjb25zdDsKLSAgICAgICAgYm9vbCBpc0VuZE9mTGluZSgpIGNv
bnN0OwotICAgICAgICBib29sIGhhc0h5cGhlbigpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0b3Iu
c2ltcGxlUnVuKCkuaGFzSHlwaGVuOyB9Ci0gICAgICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBjb25z
dCB7IHJldHVybiBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpLmlzTGluZUJyZWFrOyB9Ci0gICAgICAg
IGNvbnN0IFNpbXBsZUxpbmVMYXlvdXQ6OlJ1biYgc2ltcGxlUnVuKCkgY29uc3QgeyByZXR1cm4g
bV9pdGVyYXRvci5zaW1wbGVSdW4oKTsgfQotCi0gICAgICAgIHVuc2lnbmVkIGxpbmVJbmRleCgp
IGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZmxvYXQgY29tcHV0ZUJhc2VsaW5lUG9z
aXRpb24oKSBjb25zdDsKLSAgICAgICAgdm9pZCBjb25zdHJ1Y3RTdHJpbmdGb3JIeXBoZW5JZk5l
ZWRlZCgpOwotCi0gICAgICAgIGNvbnN0IEl0ZXJhdG9yJiBtX2l0ZXJhdG9yOwotICAgIH07Ci0K
LSAgICBjbGFzcyBJdGVyYXRvciB7Ci0gICAgZnJpZW5kIGNsYXNzIFJ1bjsKLSAgICBmcmllbmQg
Y2xhc3MgUnVuUmVzb2x2ZXI7Ci0gICAgZnJpZW5kIGNsYXNzIExpbmVSZXNvbHZlcjsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIEl0ZXJhdG9yKGNvbnN0IFJ1blJlc29sdmVyJiwgdW5zaWduZWQgcnVu
SW5kZXgsIHVuc2lnbmVkIGxpbmVJbmRleCk7Ci0KLSAgICAgICAgSXRlcmF0b3ImIG9wZXJhdG9y
KysoKTsKLSAgICAgICAgSXRlcmF0b3ImIG9wZXJhdG9yLS0oKTsKLQotICAgICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsKLSAgICAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEl0ZXJhdG9yJikgY29uc3Q7Ci0KLSAgICAgICAgUnVuIG9wZXJhdG9yKigpIGNvbnN0
OwotCi0gICAgICAgIGJvb2wgYXRCZWdpbigpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgY29uc3QgU2ltcGxlTGluZUxheW91dDo6UnVuJiBzaW1wbGVSdW4oKSBjb25zdDsKLSAgICAg
ICAgdW5zaWduZWQgbGluZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9saW5lSW5kZXg7IH0KLSAg
ICAgICAgSXRlcmF0b3ImIGFkdmFuY2UoKTsKLSAgICAgICAgSXRlcmF0b3ImIGFkdmFuY2VMaW5l
cyh1bnNpZ25lZCk7Ci0gICAgICAgIGNvbnN0IFJ1blJlc29sdmVyJiByZXNvbHZlcigpIGNvbnN0
IHsgcmV0dXJuICptX3Jlc29sdmVyOyB9Ci0gICAgICAgIGNvbnN0IExheW91dCYgbGF5b3V0KCkg
Y29uc3QgeyByZXR1cm4gKm1fbGF5b3V0OyB9Ci0KLSAgICAgICAgUmVmUHRyPGNvbnN0IExheW91
dD4gbV9sYXlvdXQ7Ci0gICAgICAgIGNvbnN0IFJ1blJlc29sdmVyKiBtX3Jlc29sdmVyOwotICAg
ICAgICB1bnNpZ25lZCBtX3J1bkluZGV4OwotICAgICAgICB1bnNpZ25lZCBtX2xpbmVJbmRleDsK
LSAgICB9OwotCi0gICAgUnVuUmVzb2x2ZXIoY29uc3QgUmVuZGVyQmxvY2tGbG93JiwgY29uc3Qg
TGF5b3V0Jik7Ci0KLSAgICBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3coKSBjb25zdCB7IHJl
dHVybiBtX2Zsb3dSZW5kZXJlcjsgfQotICAgIGNvbnN0IEZsb3dDb250ZW50cyYgZmxvd0NvbnRl
bnRzKCkgY29uc3QgeyByZXR1cm4gbV9mbG93Q29udGVudHM7IH0KLSAgICBJdGVyYXRvciBiZWdp
bigpIGNvbnN0OwotICAgIEl0ZXJhdG9yIGVuZCgpIGNvbnN0OwotCi0gICAgV1RGOjpJdGVyYXRv
clJhbmdlPEl0ZXJhdG9yPiByYW5nZUZvclJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0Owot
ICAgIFdURjo6SXRlcmF0b3JSYW5nZTxJdGVyYXRvcj4gcmFuZ2VGb3JSZW5kZXJlcihjb25zdCBS
ZW5kZXJPYmplY3QmKSBjb25zdDsKLSAgICBXVEY6Okl0ZXJhdG9yUmFuZ2U8SXRlcmF0b3I+IHJh
bmdlRm9yTGluZSh1bnNpZ25lZCBsaW5lSW5kZXgpIGNvbnN0OwotICAgIEl0ZXJhdG9yIHJ1bkZv
clBvaW50KGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7Ci0gICAgV1RGOjpJdGVyYXRvclJhbmdl
PEl0ZXJhdG9yPiByYW5nZUZvclJlbmRlcmVyV2l0aE9mZnNldHMoY29uc3QgUmVuZGVyT2JqZWN0
JiwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAg
ZW51bSBjbGFzcyBJbmRleFR5cGUgeyBGaXJzdCwgTGFzdCB9OwotICAgIHVuc2lnbmVkIGxpbmVJ
bmRleEZvckhlaWdodChMYXlvdXRVbml0LCBJbmRleFR5cGUpIGNvbnN0OwotICAgIHVuc2lnbmVk
IGFkanVzdExpbmVJbmRleEZvclN0cnV0cyhMYXlvdXRVbml0LCBJbmRleFR5cGUsIHVuc2lnbmVk
IGxpbmVJbmRleENhbmRpZGF0ZSkgY29uc3Q7Ci0KLSAgICBjb25zdCBSZW5kZXJCbG9ja0Zsb3cm
IG1fZmxvd1JlbmRlcmVyOwotICAgIGNvbnN0IExheW91dCYgbV9sYXlvdXQ7Ci0gICAgY29uc3Qg
Rmxvd0NvbnRlbnRzIG1fZmxvd0NvbnRlbnRzOwotICAgIGNvbnN0IExheW91dFVuaXQgbV9saW5l
SGVpZ2h0OwotICAgIGNvbnN0IExheW91dFVuaXQgbV9iYXNlbGluZTsKLSAgICBjb25zdCBMYXlv
dXRVbml0IG1fYm9yZGVyQW5kUGFkZGluZ0JlZm9yZTsKLSAgICBjb25zdCBmbG9hdCBtX2FzY2Vu
dDsKLSAgICBjb25zdCBmbG9hdCBtX2Rlc2NlbnQ7Ci0gICAgY29uc3QgZmxvYXQgbV92aXN1YWxP
dmVyZmxvd09mZnNldDsKLX07Ci0KLWNsYXNzIExpbmVSZXNvbHZlciB7Ci1wdWJsaWM6Ci0gICAg
Y2xhc3MgSXRlcmF0b3IgewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgSXRlcmF0b3Io
UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yKTsKLQotICAgICAgICBJdGVyYXRvciYgb3BlcmF0b3IrKygp
OwotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsKLSAgICAg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJikgY29uc3Q7Ci0KLSAgICAgICAgRmxv
YXRSZWN0IG9wZXJhdG9yKigpIGNvbnN0OwotICAgICAgICAvLyBGSVhNRTogVXNlIGEgbGlzdCB0
byBzdXBwb3J0IG11bHRpcGxlIHJlbmRlcmVycyBwZXIgbGluZS4KLSAgICAgICAgY29uc3QgUmVu
ZGVyT2JqZWN0JiByZW5kZXJlcigpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUnVu
UmVzb2x2ZXI6Okl0ZXJhdG9yIG1fcnVuSXRlcmF0b3I7Ci0gICAgfTsKLQotICAgIExpbmVSZXNv
bHZlcihjb25zdCBSdW5SZXNvbHZlciYpOwotCi0gICAgSXRlcmF0b3IgYmVnaW4oKSBjb25zdDsK
LSAgICBJdGVyYXRvciBlbmQoKSBjb25zdDsKLQotICAgIFdURjo6SXRlcmF0b3JSYW5nZTxJdGVy
YXRvcj4gcmFuZ2VGb3JSZWN0KGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKLQotcHJpdmF0ZToK
LSAgICBjb25zdCBSdW5SZXNvbHZlciYgbV9ydW5SZXNvbHZlcjsKLX07Ci0KLVJ1blJlc29sdmVy
IHJ1blJlc29sdmVyKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IExheW91dCYpOwotTGlu
ZVJlc29sdmVyIGxpbmVSZXNvbHZlcihjb25zdCBSdW5SZXNvbHZlciYpOwotCi1pbmxpbmUgdW5z
aWduZWQgUnVuUmVzb2x2ZXI6OlJ1bjo6c3RhcnQoKSBjb25zdAotewotICAgIHJldHVybiBtX2l0
ZXJhdG9yLnNpbXBsZVJ1bigpLnN0YXJ0OwotfQotCi1pbmxpbmUgdW5zaWduZWQgUnVuUmVzb2x2
ZXI6OlJ1bjo6ZW5kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pdGVyYXRvci5zaW1wbGVSdW4o
KS5lbmQ7Ci19Ci0KLWlubGluZSBmbG9hdCBSdW5SZXNvbHZlcjo6UnVuOjpsb2dpY2FsTGVmdCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faXRlcmF0b3Iuc2ltcGxlUnVuKCkubG9naWNhbExlZnQ7
Ci19Ci0KLWlubGluZSBmbG9hdCBSdW5SZXNvbHZlcjo6UnVuOjpsb2dpY2FsUmlnaHQoKSBjb25z
dAotewotICAgIHJldHVybiBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpLmxvZ2ljYWxSaWdodDsKLX0K
LQotaW5saW5lIGZsb2F0IFJ1blJlc29sdmVyOjpSdW46OmV4cGFuc2lvbigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1faXRlcmF0b3Iuc2ltcGxlUnVuKCkuZXhwYW5zaW9uOwotfQotCi1pbmxpbmUg
RXhwYW5zaW9uQmVoYXZpb3IgUnVuUmVzb2x2ZXI6OlJ1bjo6ZXhwYW5zaW9uQmVoYXZpb3IoKSBj
b25zdAotewotICAgIHJldHVybiBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpLmV4cGFuc2lvbkJlaGF2
aW9yOwotfQotCi1pbmxpbmUgaW50IFJ1blJlc29sdmVyOjpSdW46OmJhc2VsaW5lUG9zaXRpb24o
KSBjb25zdAotewotICAgIHJldHVybiByb3VuZFRvSW50KGNvbXB1dGVCYXNlbGluZVBvc2l0aW9u
KCkpOwotfQotCi1pbmxpbmUgYm9vbCBSdW5SZXNvbHZlcjo6UnVuOjppc0VuZE9mTGluZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1faXRlcmF0b3Iuc2ltcGxlUnVuKCkuaXNFbmRPZkxpbmU7Ci19
Ci0KLWlubGluZSB1bnNpZ25lZCBSdW5SZXNvbHZlcjo6UnVuOjpsaW5lSW5kZXgoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2l0ZXJhdG9yLmxpbmVJbmRleCgpOwotfQotCi1pbmxpbmUgUnVuUmVz
b2x2ZXI6Okl0ZXJhdG9yJiBSdW5SZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yKysoKQotewot
ICAgIHJldHVybiBhZHZhbmNlKCk7Ci19Ci0KLWlubGluZSBmbG9hdCBSdW5SZXNvbHZlcjo6UnVu
Ojpjb21wdXRlQmFzZWxpbmVQb3NpdGlvbigpIGNvbnN0Ci17Ci0gICAgYXV0byYgcmVzb2x2ZXIg
PSBtX2l0ZXJhdG9yLnJlc29sdmVyKCk7Ci0gICAgYXV0byBvZmZzZXQgPSByZXNvbHZlci5tX2Jv
cmRlckFuZFBhZGRpbmdCZWZvcmUgKyByZXNvbHZlci5tX2xpbmVIZWlnaHQgKiBsaW5lSW5kZXgo
KTsKLSAgICBpZiAoIW1faXRlcmF0b3IubGF5b3V0KCkuaGFzTGluZVN0cnV0cygpKQotICAgICAg
ICByZXR1cm4gb2Zmc2V0ICsgcmVzb2x2ZXIubV9iYXNlbGluZTsKLSAgICBmb3IgKGF1dG8mIHN0
cnV0RW50cnkgOiByZXNvbHZlci5tX2xheW91dC5zdHJ1dHMoKSkgewotICAgICAgICBpZiAoc3Ry
dXRFbnRyeS5saW5lQnJlYWsgPiBsaW5lSW5kZXgoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBvZmZzZXQgKz0gc3RydXRFbnRyeS5vZmZzZXQ7Ci0gICAgfQotICAgIHJldHVybiBvZmZz
ZXQgKyByZXNvbHZlci5tX2Jhc2VsaW5lOwotfQotCi1pbmxpbmUgUnVuUmVzb2x2ZXI6Okl0ZXJh
dG9yJiBSdW5SZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yLS0oKQotewotICAgIC0tbV9ydW5J
bmRleDsKLSAgICBpZiAoc2ltcGxlUnVuKCkuaXNFbmRPZkxpbmUpCi0gICAgICAgIC0tbV9saW5l
SW5kZXg7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1pbmxpbmUgYm9vbCBSdW5SZXNvbHZlcjo6
SXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdAotewotICAg
IEFTU0VSVChtX3Jlc29sdmVyID09IG90aGVyLm1fcmVzb2x2ZXIpOwotICAgIHJldHVybiBtX3J1
bkluZGV4ID09IG90aGVyLm1fcnVuSW5kZXg7Ci19Ci0KLWlubGluZSBib29sIFJ1blJlc29sdmVy
OjpJdGVyYXRvcjo6b3BlcmF0b3IhPShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotfQotCi1pbmxpbmUgUnVuUmVzb2x2ZXI6OlJ1
biBSdW5SZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yKigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IFJ1bigqdGhpcyk7Ci19Ci0KLWlubGluZSBib29sIFJ1blJlc29sdmVyOjpJdGVyYXRvcjo6YXRC
ZWdpbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICp0aGlzID09IHJlc29sdmVyKCkuYmVnaW4oKTsK
LX0KLQotaW5saW5lIGNvbnN0IFNpbXBsZUxpbmVMYXlvdXQ6OlJ1biYgUnVuUmVzb2x2ZXI6Okl0
ZXJhdG9yOjpzaW1wbGVSdW4oKSBjb25zdAotewotICAgIHJldHVybiBsYXlvdXQoKS5ydW5BdCht
X3J1bkluZGV4KTsKLX0KLQotaW5saW5lIFJ1blJlc29sdmVyOjpJdGVyYXRvciBSdW5SZXNvbHZl
cjo6YmVnaW4oKSBjb25zdAotewotICAgIHJldHVybiBJdGVyYXRvcigqdGhpcywgMCwgMCk7Ci19
Ci0KLWlubGluZSBSdW5SZXNvbHZlcjo6SXRlcmF0b3IgUnVuUmVzb2x2ZXI6OmVuZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIEl0ZXJhdG9yKCp0aGlzLCBtX2xheW91dC5ydW5Db3VudCgpLCBtX2xh
eW91dC5saW5lQ291bnQoKSk7Ci19Ci0KLWlubGluZSBMaW5lUmVzb2x2ZXI6Okl0ZXJhdG9yJiBM
aW5lUmVzb2x2ZXI6Okl0ZXJhdG9yOjpvcGVyYXRvcisrKCkKLXsKLSAgICBtX3J1bkl0ZXJhdG9y
LmFkdmFuY2VMaW5lcygxKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLWlubGluZSBib29sIExp
bmVSZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBj
b25zdAotewotICAgIHJldHVybiBtX3J1bkl0ZXJhdG9yID09IG90aGVyLm1fcnVuSXRlcmF0b3I7
Ci19Ci0KLWlubGluZSBib29sIExpbmVSZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yIT0oY29u
c3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdAotewotICAgIHJldHVybiBtX3J1bkl0ZXJhdG9yICE9
IG90aGVyLm1fcnVuSXRlcmF0b3I7Ci19Ci0KLWlubGluZSBMaW5lUmVzb2x2ZXI6Okl0ZXJhdG9y
IExpbmVSZXNvbHZlcjo6YmVnaW4oKSBjb25zdAotewotICAgIHJldHVybiBJdGVyYXRvcihtX3J1
blJlc29sdmVyLmJlZ2luKCkpOwotfQotCi1pbmxpbmUgTGluZVJlc29sdmVyOjpJdGVyYXRvciBM
aW5lUmVzb2x2ZXI6OmVuZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEl0ZXJhdG9yKG1fcnVuUmVz
b2x2ZXIuZW5kKCkpOwotfQotCi1pbmxpbmUgV1RGOjpJdGVyYXRvclJhbmdlPExpbmVSZXNvbHZl
cjo6SXRlcmF0b3I+IExpbmVSZXNvbHZlcjo6cmFuZ2VGb3JSZWN0KGNvbnN0IExheW91dFJlY3Qm
IHJlY3QpIGNvbnN0Ci17Ci0gICAgYXV0byBydW5SYW5nZSA9IG1fcnVuUmVzb2x2ZXIucmFuZ2VG
b3JSZWN0KHJlY3QpOwotICAgIHJldHVybiB7IEl0ZXJhdG9yKHJ1blJhbmdlLmJlZ2luKCkpLCBJ
dGVyYXRvcihydW5SYW5nZS5lbmQoKSkgfTsKLX0KLQotaW5saW5lIExpbmVSZXNvbHZlciBsaW5l
UmVzb2x2ZXIoY29uc3QgUnVuUmVzb2x2ZXImIHJ1blJlc29sdmVyKQotewotICAgIHJldHVybiBM
aW5lUmVzb2x2ZXIocnVuUmVzb2x2ZXIpOwotfQotCi19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50
SXRlcmF0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTI3ZDc0NTEzM2Eu
LjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxh
eW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI2OSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNpbXBsZUxp
bmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oIgotCi0jaW5jbHVkZSAiRm9udENhc2NhZGUu
aCIKLSNpbmNsdWRlICJIeXBoZW5hdGlvbi5oIgotI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5o
IgotI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5l
TGF5b3V0Rmxvd0NvbnRlbnRzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBT
aW1wbGVMaW5lTGF5b3V0IHsKLQotVGV4dEZyYWdtZW50SXRlcmF0b3I6OlN0eWxlOjpTdHlsZShj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCi0gICAgOiBmb250KHN0eWxlLmZvbnRDYXNjYWRlKCkp
Ci0gICAgLCB0ZXh0QWxpZ24oc3R5bGUudGV4dEFsaWduKCkpCi0gICAgLCBoYXNLZXJuaW5nT3JM
aWdhdHVyZXMoZm9udC5lbmFibGVLZXJuaW5nKCkgfHwgZm9udC5yZXF1aXJlc1NoYXBpbmcoKSkK
LSAgICAsIGNvbGxhcHNlV2hpdGVzcGFjZShzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSkKLSAg
ICAsIHByZXNlcnZlTmV3bGluZShzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUoKSkKLSAgICAsIHdyYXBM
aW5lcyhzdHlsZS5hdXRvV3JhcCgpKQotICAgICwgYnJlYWtTcGFjZXMoc3R5bGUud2hpdGVTcGFj
ZSgpID09IFdoaXRlU3BhY2U6OkJyZWFrU3BhY2VzKQotICAgICwgYnJlYWtBbnlXb3JkT25PdmVy
ZmxvdyhzdHlsZS53b3JkQnJlYWsoKSA9PSBXb3JkQnJlYWs6OkJyZWFrQWxsICYmIHdyYXBMaW5l
cykKLSAgICAsIGJyZWFrV29yZE9uT3ZlcmZsb3coc3R5bGUuYnJlYWtXb3JkcygpICYmICh3cmFw
TGluZXMgfHwgcHJlc2VydmVOZXdsaW5lKSkKLSAgICAsIGJyZWFrRmlyc3RXb3JkT25PdmVyZmxv
dyhicmVha0FueVdvcmRPbk92ZXJmbG93IHx8IGJyZWFrV29yZE9uT3ZlcmZsb3cpCi0gICAgLCBi
cmVha05CU1Aod3JhcExpbmVzICYmIHN0eWxlLm5ic3BNb2RlKCkgPT0gTkJTUE1vZGU6OlNwYWNl
KQotICAgICwga2VlcEFsbFdvcmRzRm9yQ0pLKHN0eWxlLndvcmRCcmVhaygpID09IFdvcmRCcmVh
azo6S2VlcEFsbCkKLSAgICAsIHdvcmRTcGFjaW5nKGZvbnQud29yZFNwYWNpbmcoKSkKLSAgICAs
IHRhYldpZHRoKGNvbGxhcHNlV2hpdGVzcGFjZSA/IFRhYlNpemUoMCkgOiBzdHlsZS50YWJTaXpl
KCkpCi0gICAgLCBzaG91bGRIeXBoZW5hdGUoc3R5bGUuaHlwaGVucygpID09IEh5cGhlbnM6OkF1
dG8gJiYgY2FuSHlwaGVuYXRlKHN0eWxlLmNvbXB1dGVkTG9jYWxlKCkpKQotICAgICwgaHlwaGVu
U3RyaW5nV2lkdGgoc2hvdWxkSHlwaGVuYXRlID8gZm9udC53aWR0aChUZXh0UnVuKFN0cmluZyhz
dHlsZS5oeXBoZW5TdHJpbmcoKSkpKSA6IDApCi0gICAgLCBoeXBoZW5MaW1pdEJlZm9yZShzdHls
ZS5oeXBoZW5hdGlvbkxpbWl0QmVmb3JlKCkgPCAwID8gMiA6IHN0eWxlLmh5cGhlbmF0aW9uTGlt
aXRCZWZvcmUoKSkKLSAgICAsIGh5cGhlbkxpbWl0QWZ0ZXIoc3R5bGUuaHlwaGVuYXRpb25MaW1p
dEFmdGVyKCkgPCAwID8gMiA6IHN0eWxlLmh5cGhlbmF0aW9uTGltaXRBZnRlcigpKQotICAgICwg
bG9jYWxlKHN0eWxlLmNvbXB1dGVkTG9jYWxlKCkpCi17Ci0gICAgaWYgKHN0eWxlLmh5cGhlbmF0
aW9uTGltaXRMaW5lcygpID4gLTEpCi0gICAgICAgIGh5cGhlbkxpbWl0TGluZXMgPSBzdHlsZS5o
eXBoZW5hdGlvbkxpbWl0TGluZXMoKTsKLX0KLQotVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRG
cmFnbWVudEl0ZXJhdG9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKLSAgICA6IG1fZmxv
d0NvbnRlbnRzKGZsb3cpCi0gICAgLCBtX2N1cnJlbnRTZWdtZW50KG1fZmxvd0NvbnRlbnRzLmJl
Z2luKCkpCi0gICAgLCBtX2xpbmVCcmVha0l0ZXJhdG9yKG1fY3VycmVudFNlZ21lbnQtPnRleHQs
IGZsb3cuc3R5bGUoKS5jb21wdXRlZExvY2FsZSgpKQotICAgICwgbV9zdHlsZShmbG93LnN0eWxl
KCkpCi17Ci19Ci0KLVRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgVGV4dEZyYWdt
ZW50SXRlcmF0b3I6Om5leHRUZXh0RnJhZ21lbnQoZmxvYXQgeFBvc2l0aW9uKQotewotICAgIFRl
eHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgbmV4dEZyYWdtZW50ID0gZmluZE5leHRU
ZXh0RnJhZ21lbnQoeFBvc2l0aW9uKTsKLSAgICBtX2F0RW5kT2ZTZWdtZW50ID0gKG1fY3VycmVu
dFNlZ21lbnQgPT0gbV9mbG93Q29udGVudHMuZW5kKCkpIHx8IChtX3Bvc2l0aW9uID09IG1fY3Vy
cmVudFNlZ21lbnQtPmVuZCk7Ci0gICAgcmV0dXJuIG5leHRGcmFnbWVudDsKLX0KLQotVGV4dEZy
YWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6ZmluZE5l
eHRUZXh0RnJhZ21lbnQoZmxvYXQgeFBvc2l0aW9uKQotewotICAgIC8vIEEgZnJhZ21lbnQgY2Fu
IGVpdGhlciBiZQotICAgIC8vIDEuIGxpbmUgYnJlYWsgd2hlbiA8YnI+IGlzIHByZXNlbnQgb3Ig
cHJlc2VydmVOZXdsaW5lIGlzIG9uIChub3QgY29uc2lkZXJlZCBhcyB3aGl0ZXNwYWNlKSBvcgot
ICAgIC8vIDIuIHdoaXRlc3BhY2UgKGNvbGxhc3BlZCwgbm9uLWNvbGxhcHNlZCBtdWx0aSBvciBz
aW5nbGUpIG9yCi0gICAgLy8gMy4gbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycy4KLSAgICAvLyA0
LiBjb250ZW50IGVuZC4KLSAgICBBU1NFUlQobV9jdXJyZW50U2VnbWVudCAhPSBtX2Zsb3dDb250
ZW50cy5lbmQoKSk7Ci0gICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IG1fcG9zaXRpb247Ci0g
ICAgaWYgKG1fYXRFbmRPZlNlZ21lbnQpCi0gICAgICAgICsrbV9jdXJyZW50U2VnbWVudDsKLQot
ICAgIGlmIChtX2N1cnJlbnRTZWdtZW50ID09IG1fZmxvd0NvbnRlbnRzLmVuZCgpKQotICAgICAg
ICByZXR1cm4gVGV4dEZyYWdtZW50KHN0YXJ0UG9zaXRpb24sIHN0YXJ0UG9zaXRpb24sIDAsIFRl
eHRGcmFnbWVudDo6Q29udGVudEVuZCk7Ci0gICAgaWYgKGlzSGFyZExpbmVCcmVhayhtX2N1cnJl
bnRTZWdtZW50KSkKLSAgICAgICAgcmV0dXJuIFRleHRGcmFnbWVudChzdGFydFBvc2l0aW9uLCBz
dGFydFBvc2l0aW9uLCAwLCBUZXh0RnJhZ21lbnQ6OkhhcmRMaW5lQnJlYWspOwotICAgIGlmIChp
c1NvZnRMaW5lQnJlYWsoc3RhcnRQb3NpdGlvbikpIHsKLSAgICAgICAgdW5zaWduZWQgZW5kUG9z
aXRpb24gPSArK21fcG9zaXRpb247Ci0gICAgICAgIHJldHVybiBUZXh0RnJhZ21lbnQoc3RhcnRQ
b3NpdGlvbiwgZW5kUG9zaXRpb24sIDAsIFRleHRGcmFnbWVudDo6U29mdExpbmVCcmVhayk7Ci0g
ICAgfQotICAgIGZsb2F0IHdpZHRoID0gMDsKLSAgICBib29sIG92ZXJsYXBwaW5nRnJhZ21lbnQg
PSBmYWxzZTsKLSAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHNraXBUb05leHRQb3NpdGlvbihQ
b3NpdGlvblR5cGU6Ok5vbldoaXRlc3BhY2UsIHN0YXJ0UG9zaXRpb24sIHdpZHRoLCB4UG9zaXRp
b24sIG92ZXJsYXBwaW5nRnJhZ21lbnQpOwotICAgIHVuc2lnbmVkIHNlZ21lbnRFbmRQb3NpdGlv
biA9IG1fY3VycmVudFNlZ21lbnQtPmVuZDsKLSAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbiA8PSBl
bmRQb3NpdGlvbik7Ci0gICAgaWYgKHN0YXJ0UG9zaXRpb24gPCBlbmRQb3NpdGlvbikgewotICAg
ICAgICBib29sIG11bHRpcGxlV2hpdGVzcGFjZSA9IHN0YXJ0UG9zaXRpb24gKyAxIDwgZW5kUG9z
aXRpb247Ci0gICAgICAgIGJvb2wgaXNDb2xsYXBzZWQgPSBtdWx0aXBsZVdoaXRlc3BhY2UgJiYg
bV9zdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2U7Ci0gICAgICAgIG1fcG9zaXRpb24gPSBlbmRQb3Np
dGlvbjsKLSAgICAgICAgcmV0dXJuIFRleHRGcmFnbWVudChzdGFydFBvc2l0aW9uLCBlbmRQb3Np
dGlvbiwgd2lkdGgsIFRleHRGcmFnbWVudDo6V2hpdGVzcGFjZSwgZW5kUG9zaXRpb24gPT0gc2Vn
bWVudEVuZFBvc2l0aW9uLCBmYWxzZSwgaXNDb2xsYXBzZWQsIG1fc3R5bGUuY29sbGFwc2VXaGl0
ZXNwYWNlKTsKLSAgICB9Ci0gICAgZW5kUG9zaXRpb24gPSBza2lwVG9OZXh0UG9zaXRpb24oUG9z
aXRpb25UeXBlOjpCcmVha2FibGUsIHN0YXJ0UG9zaXRpb24sIHdpZHRoLCB4UG9zaXRpb24sIG92
ZXJsYXBwaW5nRnJhZ21lbnQpOwotICAgIG1fcG9zaXRpb24gPSBlbmRQb3NpdGlvbjsKLSAgICBy
ZXR1cm4gVGV4dEZyYWdtZW50KHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCB3aWR0aCwgVGV4
dEZyYWdtZW50OjpOb25XaGl0ZXNwYWNlLCBlbmRQb3NpdGlvbiA9PSBzZWdtZW50RW5kUG9zaXRp
b24sIG92ZXJsYXBwaW5nRnJhZ21lbnQsIGZhbHNlLCBmYWxzZSk7Ci19Ci0KLXZvaWQgVGV4dEZy
YWdtZW50SXRlcmF0b3I6OnJldmVydFRvRW5kT2ZGcmFnbWVudChjb25zdCBUZXh0RnJhZ21lbnQm
IGZyYWdtZW50KQotewotICAgIEFTU0VSVChtX3Bvc2l0aW9uID49IGZyYWdtZW50LmVuZCgpKTsK
LSAgICB3aGlsZSAobV9jdXJyZW50U2VnbWVudC0+c3RhcnQgPiBmcmFnbWVudC5lbmQoKSkKLSAg
ICAgICAgLS1tX2N1cnJlbnRTZWdtZW50OwotICAgIC8vIFRPRE86IEl0IHJldmVydHMgdG8gdGhl
IGxhc3QgZnJhZ21lbnQgb24gdGhlIHNhbWUgcG9zaXRpb24sIGJ1dCB0aGF0J3Mgb2sgZm9yIG5v
dyBhcyB3ZSBkb24ndCBuZWVkIHRvCi0gICAgLy8gZGlmZmVyZW50aWF0ZSBtdWx0aXBsZSByZW5k
ZXJlcnMgb24gdGhlIHNhbWUgcG9zaXRpb24uCi0gICAgbV9wb3NpdGlvbiA9IGZyYWdtZW50LmVu
ZCgpOwotICAgIG1fYXRFbmRPZlNlZ21lbnQgPSBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSB1
bnNpZ25lZCBuZXh0QnJlYWthYmxlUG9zaXRpb25JblNlZ21lbnQoTGF6eUxpbmVCcmVha0l0ZXJh
dG9yJiBsaW5lQnJlYWtJdGVyYXRvciwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgYm9vbCBicmVh
a05CU1AsIGJvb2wga2VlcEFsbFdvcmRzRm9yQ0pLKQotewotICAgIGlmIChrZWVwQWxsV29yZHNG
b3JDSkspIHsKLSAgICAgICAgaWYgKGJyZWFrTkJTUCkKLSAgICAgICAgICAgIHJldHVybiBuZXh0
QnJlYWthYmxlUG9zaXRpb25LZWVwaW5nQWxsV29yZHMobGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0
UG9zaXRpb24pOwotICAgICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uS2VlcGluZ0Fs
bFdvcmRzSWdub3JpbmdOQlNQKGxpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKLSAg
ICB9Ci0KLSAgICBpZiAobGluZUJyZWFrSXRlcmF0b3IubW9kZSgpID09IExpbmVCcmVha0l0ZXJh
dG9yTW9kZTo6RGVmYXVsdCkgewotICAgICAgICBpZiAoYnJlYWtOQlNQKQotICAgICAgICAgICAg
cmV0dXJuIFdlYkNvcmU6Om5leHRCcmVha2FibGVQb3NpdGlvbihsaW5lQnJlYWtJdGVyYXRvciwg
c3RhcnRQb3NpdGlvbik7Ci0gICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25JZ25v
cmluZ05CU1AobGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgIH0KLQotICAg
IGlmIChicmVha05CU1ApCi0gICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25XaXRo
b3V0U2hvcnRjdXQobGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgIHJldHVy
biBuZXh0QnJlYWthYmxlUG9zaXRpb25JZ25vcmluZ05CU1BXaXRob3V0U2hvcnRjdXQobGluZUJy
ZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotfQotCi11bnNpZ25lZCBUZXh0RnJhZ21lbnRJ
dGVyYXRvcjo6bmV4dEJyZWFrYWJsZVBvc2l0aW9uKGNvbnN0IEZsb3dDb250ZW50czo6U2VnbWVu
dCYgc2VnbWVudCwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbikKLXsKLSAgICBBU1NFUlQoc3RhcnRQ
b3NpdGlvbiA8IHNlZ21lbnQuZW5kKTsKLSAgICBTdHJpbmdWaWV3IGN1cnJlbnRUZXh0ID0gbV9s
aW5lQnJlYWtJdGVyYXRvci5zdHJpbmdWaWV3KCk7Ci0gICAgU3RyaW5nVmlldyBzZWdtZW50VGV4
dCA9IFN0cmluZ1ZpZXcoc2VnbWVudC50ZXh0KTsKLSAgICBpZiAoc2VnbWVudFRleHQgIT0gY3Vy
cmVudFRleHQpIHsKLSAgICAgICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IGN1cnJlbnRUZXh0Lmxl
bmd0aCgpOwotICAgICAgICBVQ2hhciBsYXN0Q2hhcmFjdGVyID0gdGV4dExlbmd0aCA+IDAgPyBj
dXJyZW50VGV4dFt0ZXh0TGVuZ3RoIC0gMV0gOiAwOwotICAgICAgICBVQ2hhciBzZWNvbmRUb0xh
c3RDaGFyYWN0ZXIgPSB0ZXh0TGVuZ3RoID4gMSA/IGN1cnJlbnRUZXh0W3RleHRMZW5ndGggLSAy
XSA6IDA7Ci0gICAgICAgIG1fbGluZUJyZWFrSXRlcmF0b3Iuc2V0UHJpb3JDb250ZXh0KGxhc3RD
aGFyYWN0ZXIsIHNlY29uZFRvTGFzdENoYXJhY3Rlcik7Ci0gICAgICAgIG1fbGluZUJyZWFrSXRl
cmF0b3IucmVzZXRTdHJpbmdBbmRSZWxlYXNlSXRlcmF0b3Ioc2VnbWVudC50ZXh0LCBtX3N0eWxl
LmxvY2FsZSwgTGluZUJyZWFrSXRlcmF0b3JNb2RlOjpEZWZhdWx0KTsKLSAgICB9Ci0gICAgcmV0
dXJuIHNlZ21lbnQudG9SZW5kZXJQb3NpdGlvbihuZXh0QnJlYWthYmxlUG9zaXRpb25JblNlZ21l
bnQobV9saW5lQnJlYWtJdGVyYXRvciwgc2VnbWVudC50b1NlZ21lbnRQb3NpdGlvbihzdGFydFBv
c2l0aW9uKSwgbV9zdHlsZS5icmVha05CU1AsIG1fc3R5bGUua2VlcEFsbFdvcmRzRm9yQ0pLKSk7
Ci19Ci0KLXVuc2lnbmVkIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpuZXh0Tm9uV2hpdGVzcGFjZVBv
c2l0aW9uKGNvbnN0IEZsb3dDb250ZW50czo6U2VnbWVudCYgc2VnbWVudCwgdW5zaWduZWQgc3Rh
cnRQb3NpdGlvbikKLXsKLSAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbiA8IHNlZ21lbnQuZW5kKTsK
LSAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247Ci0gICAgZm9yICg7IHBvc2l0
aW9uIDwgc2VnbWVudC5lbmQ7ICsrcG9zaXRpb24pIHsKLSAgICAgICAgYXV0byBjaGFyYWN0ZXIg
PSBzZWdtZW50LnRleHRbc2VnbWVudC50b1NlZ21lbnRQb3NpdGlvbihwb3NpdGlvbildOwotICAg
ICAgICBib29sIGlzV2hpdGVzcGFjZSA9IGNoYXJhY3RlciA9PSAnICcgfHwgY2hhcmFjdGVyID09
ICdcdCcgfHwgKCFtX3N0eWxlLnByZXNlcnZlTmV3bGluZSAmJiBjaGFyYWN0ZXIgPT0gJ1xuJyk7
Ci0gICAgICAgIGlmICghaXNXaGl0ZXNwYWNlKQotICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9u
OwotICAgIH0KLSAgICByZXR1cm4gcG9zaXRpb247Ci19Ci0KLU9wdGlvbmFsPHVuc2lnbmVkPiBU
ZXh0RnJhZ21lbnRJdGVyYXRvcjo6bGFzdEh5cGhlblBvc2l0aW9uKGNvbnN0IFRleHRGcmFnbWVu
dEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIHJ1biwgdW5zaWduZWQgYmVmb3JlKSBjb25zdAotewot
ICAgIEFTU0VSVChydW4uc3RhcnQoKSA8IGJlZm9yZSk7Ci0gICAgYXV0byYgc2VnbWVudCA9ICpt
X2N1cnJlbnRTZWdtZW50OwotICAgIEFTU0VSVChzZWdtZW50LnN0YXJ0IDw9IGJlZm9yZSAmJiBi
ZWZvcmUgPD0gc2VnbWVudC5lbmQpOwotICAgIEFTU0VSVChpczxSZW5kZXJUZXh0PihzZWdtZW50
LnJlbmRlcmVyKSk7Ci0gICAgaWYgKCFtX3N0eWxlLnNob3VsZEh5cGhlbmF0ZSB8fCBydW4udHlw
ZSgpICE9IFRleHRGcmFnbWVudDo6Tm9uV2hpdGVzcGFjZSkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLSAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgZW5vdWdoIGNoYXJhY3RlcnMgaW4g
dGhlIHJ1bi4KLSAgICB1bnNpZ25lZCBydW5MZW5ndGggPSBydW4uZW5kKCkgLSBydW4uc3RhcnQo
KTsKLSAgICBpZiAobV9zdHlsZS5oeXBoZW5MaW1pdEJlZm9yZSA+PSBydW5MZW5ndGggfHwgbV9z
dHlsZS5oeXBoZW5MaW1pdEFmdGVyID49IHJ1bkxlbmd0aCB8fCBtX3N0eWxlLmh5cGhlbkxpbWl0
QmVmb3JlICsgbV9zdHlsZS5oeXBoZW5MaW1pdEFmdGVyID4gcnVuTGVuZ3RoKQotICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGF1dG8gcnVuU3RhcnQgPSBzZWdtZW50LnRvU2VnbWVu
dFBvc2l0aW9uKHJ1bi5zdGFydCgpKTsKLSAgICBhdXRvIGJlZm9yZUluZGV4ID0gc2VnbWVudC50
b1NlZ21lbnRQb3NpdGlvbihiZWZvcmUpIC0gcnVuU3RhcnQ7Ci0gICAgaWYgKGJlZm9yZUluZGV4
IDw9IG1fc3R5bGUuaHlwaGVuTGltaXRCZWZvcmUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0gICAgLy8gQWRqdXN0IGJlZm9yZSBpbmRleCB0byBhY2NvbW1vZGF0ZSB0aGUgbGltaXQt
YWZ0ZXIgdmFsdWUgKHRoaXMgaXMgdGhlIGxhc3QgcG90ZW50aWFsIGh5cGhlbiBsb2NhdGlvbiku
Ci0gICAgYmVmb3JlSW5kZXggPSBzdGQ6Om1pbihiZWZvcmVJbmRleCwgcnVuTGVuZ3RoIC0gbV9z
dHlsZS5oeXBoZW5MaW1pdEFmdGVyICsgMSk7Ci0gICAgYXV0byBzdWJzdHJpbmdGb3JIeXBoZW5h
dGlvbiA9IFN0cmluZ1ZpZXcoc2VnbWVudC50ZXh0KS5zdWJzdHJpbmcocnVuU3RhcnQsIHJ1bi5l
bmQoKSAtIHJ1bi5zdGFydCgpKTsKLSAgICBhdXRvIGh5cGhlbkxvY2F0aW9uID0gbGFzdEh5cGhl
bkxvY2F0aW9uKHN1YnN0cmluZ0Zvckh5cGhlbmF0aW9uLCBiZWZvcmVJbmRleCwgbV9zdHlsZS5s
b2NhbGUpOwotICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBlbm91Z2ggY2hhcmFjdGVycyBiZWZv
cmUgYW5kIGFmdGVyIHRoZSBoeXBoZW4uCi0gICAgaWYgKGh5cGhlbkxvY2F0aW9uICYmIGh5cGhl
bkxvY2F0aW9uID49IG1fc3R5bGUuaHlwaGVuTGltaXRCZWZvcmUgJiYgbV9zdHlsZS5oeXBoZW5M
aW1pdEFmdGVyIDw9IChydW5MZW5ndGggLSBoeXBoZW5Mb2NhdGlvbikpCi0gICAgICAgIHJldHVy
biBzZWdtZW50LnRvUmVuZGVyUG9zaXRpb24oaHlwaGVuTG9jYXRpb24gKyBydW5TdGFydCk7Ci0g
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotdW5zaWduZWQgVGV4dEZyYWdtZW50SXRlcmF0
b3I6OnNraXBUb05leHRQb3NpdGlvbihQb3NpdGlvblR5cGUgcG9zaXRpb25UeXBlLCB1bnNpZ25l
ZCBzdGFydFBvc2l0aW9uLCBmbG9hdCYgd2lkdGgsIGZsb2F0IHhQb3NpdGlvbiwgYm9vbCYgb3Zl
cmxhcHBpbmdGcmFnbWVudCkKLXsKLSAgICBvdmVybGFwcGluZ0ZyYWdtZW50ID0gZmFsc2U7Ci0g
ICAgdW5zaWduZWQgY3VycmVudFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKLSAgICB1bnNpZ25l
ZCBuZXh0UG9zaXRpb24gPSBjdXJyZW50UG9zaXRpb247Ci0gICAgLy8gQ29sbGFwc2VkIHdoaXRl
c3BhY2UgaGFzIGNvbnN0YW50IHdpZHRoLiBEbyBub3QgbWVhc3VyZSBpdC4KLSAgICBpZiAocG9z
aXRpb25UeXBlID09IE5vbldoaXRlc3BhY2UpCi0gICAgICAgIG5leHRQb3NpdGlvbiA9IG5leHRO
b25XaGl0ZXNwYWNlUG9zaXRpb24oKm1fY3VycmVudFNlZ21lbnQsIGN1cnJlbnRQb3NpdGlvbik7
Ci0gICAgZWxzZSBpZiAocG9zaXRpb25UeXBlID09IEJyZWFrYWJsZSkgewotICAgICAgICBuZXh0
UG9zaXRpb24gPSBuZXh0QnJlYWthYmxlUG9zaXRpb24oKm1fY3VycmVudFNlZ21lbnQsIGN1cnJl
bnRQb3NpdGlvbik7Ci0gICAgICAgIC8vIG5leHRCcmVha2FibGVQb3NpdGlvbiByZXR1cm5zIHRo
ZSBzYW1lIHBvc2l0aW9uIGZvciBjZXJ0YWluIGNoYXJhY3RlcnMgc3VjaCBhcyBoeXBoZW5zLiBD
YWxsIG5leHQgYWdhaW4gd2l0aCBtb2RpZmllZCBwb3NpdGlvbiB1bmxlc3Mgd2UgYXJlIGF0IHRo
ZSBlbmQgb2YgdGhlIHNlZ21lbnQuCi0gICAgICAgIGJvb2wgc2tpcEN1cnJlbnRQb3NpdGlvbiA9
IG5leHRQb3NpdGlvbiA9PSBjdXJyZW50UG9zaXRpb247Ci0gICAgICAgIGlmIChza2lwQ3VycmVu
dFBvc2l0aW9uKSB7Ci0gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBza2lwcGluZyB0aGUgbGFz
dCBjaGFyYWN0ZXIgaW4gdGhlIHNlZ21lbnQsIGp1c3QgbW92ZSB0byB0aGUgZW5kIG9mIHRoZSBz
ZWdtZW50IGFuZCB3ZSdsbCBjaGVjayB0aGUgbmV4dCBzZWdtZW50IHdoZXRoZXIgaXQgaXMgYW4g
b3ZlcmxhcHBpbmcgZnJhZ21lbnQuCi0gICAgICAgICAgICBBU1NFUlQoY3VycmVudFBvc2l0aW9u
IDwgbV9jdXJyZW50U2VnbWVudC0+ZW5kKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50UG9zaXRp
b24gPT0gbV9jdXJyZW50U2VnbWVudC0+ZW5kIC0gMSkKLSAgICAgICAgICAgICAgICBuZXh0UG9z
aXRpb24gPSBtX2N1cnJlbnRTZWdtZW50LT5lbmQ7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgbmV4dFBvc2l0aW9uID0gbmV4dEJyZWFrYWJsZVBvc2l0aW9uKCptX2N1cnJlbnRT
ZWdtZW50LCBjdXJyZW50UG9zaXRpb24gKyAxKTsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSBu
ZWVkIHRvIGtub3cgd2hldGhlciB0aGUgd29yZCBhY3R1YWxseSBmaW5pc2hlcyBhdCB0aGUgZW5k
IG9mIHRoaXMgcmVuZGVyZXIgb3Igbm90LgotICAgICAgICBpZiAobmV4dFBvc2l0aW9uID09IG1f
Y3VycmVudFNlZ21lbnQtPmVuZCkgewotICAgICAgICAgICAgY29uc3QgYXV0byBuZXh0U2VnbWVu
dCA9IG1fY3VycmVudFNlZ21lbnQgKyAxOwotICAgICAgICAgICAgaWYgKG5leHRTZWdtZW50ICE9
IG1fZmxvd0NvbnRlbnRzLmVuZCgpICYmICFpc0hhcmRMaW5lQnJlYWsobmV4dFNlZ21lbnQpKQot
ICAgICAgICAgICAgICAgIG92ZXJsYXBwaW5nRnJhZ21lbnQgPSBuZXh0UG9zaXRpb24gPCBuZXh0
QnJlYWthYmxlUG9zaXRpb24oKm5leHRTZWdtZW50LCBuZXh0UG9zaXRpb24pOwotICAgICAgICB9
Ci0gICAgfQotICAgIHdpZHRoID0gMDsKLSAgICBpZiAobmV4dFBvc2l0aW9uID09IGN1cnJlbnRQ
b3NpdGlvbikKLSAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3NpdGlvbjsKLSAgICAvLyBCb3RoIG5v
bi1jb2xsYXBzZWQgd2hpdGVzcGFjZSBhbmQgbm9uLXdoaXRlc3BhY2UgcnVucyBuZWVkIHRvIGJl
IG1lYXN1cmVkLgotICAgIGJvb2wgbWVhc3VyZVRleHQgPSBwb3NpdGlvblR5cGUgIT0gTm9uV2hp
dGVzcGFjZSB8fCAhbV9zdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2U7Ci0gICAgaWYgKG1lYXN1cmVU
ZXh0KQotICAgICAgICB3aWR0aCA9IHRoaXMtPnRleHRXaWR0aChjdXJyZW50UG9zaXRpb24sIG5l
eHRQb3NpdGlvbiwgeFBvc2l0aW9uKTsKLSAgICBlbHNlIGlmIChzdGFydFBvc2l0aW9uIDwgbmV4
dFBvc2l0aW9uKQotICAgICAgICB3aWR0aCA9IG1fc3R5bGUuZm9udC5zcGFjZVdpZHRoKCkgKyBt
X3N0eWxlLndvcmRTcGFjaW5nOwotICAgIHJldHVybiBuZXh0UG9zaXRpb247Ci19Ci0KLWZsb2F0
IFRleHRGcmFnbWVudEl0ZXJhdG9yOjp0ZXh0V2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
dG8sIGZsb2F0IHhQb3NpdGlvbikgY29uc3QKLXsKLSAgICBhdXRvJiBzZWdtZW50ID0gKm1fY3Vy
cmVudFNlZ21lbnQ7Ci0gICAgQVNTRVJUKHNlZ21lbnQuc3RhcnQgPD0gZnJvbSAmJiBmcm9tIDw9
IHNlZ21lbnQuZW5kICYmIHNlZ21lbnQuc3RhcnQgPD0gdG8gJiYgdG8gPD0gc2VnbWVudC5lbmQp
OwotICAgIEFTU0VSVChpczxSZW5kZXJUZXh0PihzZWdtZW50LnJlbmRlcmVyKSk7Ci0gICAgaWYg
KCFtX3N0eWxlLmZvbnQuc2l6ZSgpIHx8IGZyb20gPT0gdG8pCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgdW5zaWduZWQgc2VnbWVudEZyb20gPSBzZWdtZW50LnRvU2VnbWVudFBvc2l0aW9uKGZy
b20pOwotICAgIHVuc2lnbmVkIHNlZ21lbnRUbyA9IHNlZ21lbnQudG9TZWdtZW50UG9zaXRpb24o
dG8pOwotICAgIGlmIChtX3N0eWxlLmZvbnQuaXNGaXhlZFBpdGNoKCkpCi0gICAgICAgIHJldHVy
biBkb3duY2FzdDxSZW5kZXJUZXh0PihzZWdtZW50LnJlbmRlcmVyKS53aWR0aChzZWdtZW50RnJv
bSwgc2VnbWVudFRvIC0gc2VnbWVudEZyb20sIG1fc3R5bGUuZm9udCwgeFBvc2l0aW9uLCBudWxs
cHRyLCBudWxscHRyKTsKLQotICAgIGJvb2wgbWVhc3VyZVdpdGhFbmRTcGFjZSA9IG1fc3R5bGUu
aGFzS2VybmluZ09yTGlnYXR1cmVzICYmIG1fc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlCi0gICAg
ICAgICYmIHNlZ21lbnRUbyA8IHNlZ21lbnQudGV4dC5sZW5ndGgoKSAmJiBzZWdtZW50LnRleHRb
c2VnbWVudFRvXSA9PSAnICc7Ci0gICAgaWYgKG1lYXN1cmVXaXRoRW5kU3BhY2UpCi0gICAgICAg
ICsrc2VnbWVudFRvOwotICAgIGZsb2F0IHdpZHRoID0gMDsKLSAgICBpZiAoc2VnbWVudC5jYW5V
c2VTaW1wbGlmaWVkVGV4dE1lYXN1cmluZykKLSAgICAgICAgd2lkdGggPSBtX3N0eWxlLmZvbnQu
d2lkdGhGb3JTaW1wbGVUZXh0KFN0cmluZ1ZpZXcoc2VnbWVudC50ZXh0KS5zdWJzdHJpbmcoc2Vn
bWVudEZyb20sIHNlZ21lbnRUbyAtIHNlZ21lbnRGcm9tKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IFRleHRSdW4gcnVuKFN0cmluZ1ZpZXcoc2VnbWVudC50ZXh0KS5zdWJzdHJpbmcoc2VnbWVudEZy
b20sIHNlZ21lbnRUbyAtIHNlZ21lbnRGcm9tKSwgeFBvc2l0aW9uKTsKLSAgICAgICAgaWYgKG1f
c3R5bGUudGFiV2lkdGgpCi0gICAgICAgICAgICBydW4uc2V0VGFiU2l6ZSh0cnVlLCBtX3N0eWxl
LnRhYldpZHRoKTsKLSAgICAgICAgd2lkdGggPSBtX3N0eWxlLmZvbnQud2lkdGgocnVuKTsKLSAg
ICB9Ci0gICAgaWYgKG1lYXN1cmVXaXRoRW5kU3BhY2UpCi0gICAgICAgIHdpZHRoIC09IChtX3N0
eWxlLmZvbnQuc3BhY2VXaWR0aCgpICsgbV9zdHlsZS53b3JkU3BhY2luZyk7Ci0gICAgcmV0dXJu
IHN0ZDo6bWF4PGZsb2F0PigwLCB3aWR0aCk7Ci19Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3Iu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50
SXRlcmF0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZjOWMzN2Q2M2NiLi4w
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQnJlYWtMaW5lcy5o
IgotI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlv
dXRGbG93Q29udGVudHMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJC
bG9ja0Zsb3c7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKLQotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlv
dXQgewotCi1jbGFzcyBUZXh0RnJhZ21lbnRJdGVyYXRvciAgewotcHVibGljOgotICAgIFRleHRG
cmFnbWVudEl0ZXJhdG9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYpOwotICAgIGNsYXNzIFRleHRG
cmFnbWVudCB7Ci0gICAgcHVibGljOgotICAgICAgICBlbnVtIFR5cGUgeyBJbnZhbGlkLCBDb250
ZW50RW5kLCBTb2Z0TGluZUJyZWFrLCBIYXJkTGluZUJyZWFrLCBXaGl0ZXNwYWNlLCBOb25XaGl0
ZXNwYWNlIH07Ci0gICAgICAgIFRleHRGcmFnbWVudCgpID0gZGVmYXVsdDsKLSAgICAgICAgVGV4
dEZyYWdtZW50KHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGZsb2F0IHdpZHRoLCBUeXBl
IHR5cGUsIGJvb2wgaXNMYXN0SW5SZW5kZXJlciA9IGZhbHNlLCBib29sIG92ZXJsYXBzVG9OZXh0
UmVuZGVyZXIgPSBmYWxzZSwgYm9vbCBpc0NvbGxhcHNlZCA9IGZhbHNlLCBib29sIGlzQ29sbGFw
c2libGUgPSBmYWxzZSkKLSAgICAgICAgICAgIDogbV9zdGFydChzdGFydCkKLSAgICAgICAgICAg
ICwgbV9lbmQoZW5kKQotICAgICAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQotICAgICAgICAgICAg
LCBtX3R5cGUodHlwZSkKLSAgICAgICAgICAgICwgbV9pc0xhc3RJblJlbmRlcmVyKGlzTGFzdElu
UmVuZGVyZXIpCi0gICAgICAgICAgICAsIG1fb3ZlcmxhcHNUb05leHRSZW5kZXJlcihvdmVybGFw
c1RvTmV4dFJlbmRlcmVyKQotICAgICAgICAgICAgLCBtX2lzQ29sbGFwc2VkKGlzQ29sbGFwc2Vk
KQotICAgICAgICAgICAgLCBtX2lzQ29sbGFwc2libGUoaXNDb2xsYXBzaWJsZSkKLSAgICAgICAg
ewotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlICE9IEludmFsaWQ7IH0KLSAgICAgICAgdW5zaWduZWQgc3RhcnQoKSBjb25zdCB7IHJldHVy
biBtX3N0YXJ0OyB9Ci0gICAgICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5k
OyB9Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgQVNTRVJUKG1fZW5kID49IG1f
c3RhcnQpOyByZXR1cm4gbV9lbmQgLSBtX3N0YXJ0OyB9Ci0gICAgICAgIGZsb2F0IHdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQotICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGU7IH0KLSAgICAgICAgYm9vbCBvdmVybGFwc1RvTmV4dFJlbmRlcmVyKCkgY29u
c3QgeyByZXR1cm4gbV9vdmVybGFwc1RvTmV4dFJlbmRlcmVyOyB9Ci0gICAgICAgIGJvb2wgaXNM
YXN0SW5SZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1faXNMYXN0SW5SZW5kZXJlcjsgfQotICAg
ICAgICBib29sIGlzTGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFNvZnRMaW5l
QnJlYWsgfHwgbV90eXBlID09IEhhcmRMaW5lQnJlYWs7IH0KLSAgICAgICAgYm9vbCBpc0NvbGxh
cHNlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb2xsYXBzZWQ7IH0KLSAgICAgICAgYm9vbCBpc0Nv
bGxhcHNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbGxhcHNpYmxlOyB9Ci0gICAgICAgIGJv
b2wgaGFzSHlwaGVuKCkgY29uc3QgeyByZXR1cm4gbV9oYXNIeXBoZW47IH0KLQotICAgICAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBzdGFydCgpID09IGVuZCgpICYmICFpc0xpbmVC
cmVhaygpOyB9Ci0gICAgICAgIFRleHRGcmFnbWVudCBzcGxpdCh1bnNpZ25lZCBzcGxpdFBvc2l0
aW9uLCBmbG9hdCBsZWZ0U2lkZVdpZHRoLCBmbG9hdCByaWdodFNpZGVXaWR0aCk7Ci0gICAgICAg
IFRleHRGcmFnbWVudCBzcGxpdFdpdGhIeXBoZW4odW5zaWduZWQgaHlwaGVuUG9zaXRpb24sIGZs
b2F0IGh5cGhlblN0cmluZ1dpZHRoLCBmbG9hdCBsZWZ0U2lkZVdpZHRoLCBmbG9hdCByaWdodFNp
ZGVXaWR0aCk7Ci0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0RnJhZ21lbnQmIG90
aGVyKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9zdGFydCA9PSBvdGhl
ci5tX3N0YXJ0Ci0gICAgICAgICAgICAgICAgJiYgbV9lbmQgPT0gb3RoZXIubV9lbmQKLSAgICAg
ICAgICAgICAgICAmJiBtX3dpZHRoID09IG90aGVyLm1fd2lkdGgKLSAgICAgICAgICAgICAgICAm
JiBtX3R5cGUgPT0gb3RoZXIubV90eXBlCi0gICAgICAgICAgICAgICAgJiYgbV9pc0xhc3RJblJl
bmRlcmVyID09IG90aGVyLm1faXNMYXN0SW5SZW5kZXJlcgotICAgICAgICAgICAgICAgICYmIG1f
b3ZlcmxhcHNUb05leHRSZW5kZXJlciA9PSBvdGhlci5tX292ZXJsYXBzVG9OZXh0UmVuZGVyZXIK
LSAgICAgICAgICAgICAgICAmJiBtX2lzQ29sbGFwc2VkID09IG90aGVyLm1faXNDb2xsYXBzZWQK
LSAgICAgICAgICAgICAgICAmJiBtX2lzQ29sbGFwc2libGUgPT0gb3RoZXIubV9pc0NvbGxhcHNp
YmxlCi0gICAgICAgICAgICAgICAgJiYgbV9oYXNIeXBoZW4gPT0gb3RoZXIubV9oYXNIeXBoZW47
Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHVuc2lnbmVkIG1fc3RhcnQgeyAw
IH07Ci0gICAgICAgIHVuc2lnbmVkIG1fZW5kIHsgMCB9OwotICAgICAgICBmbG9hdCBtX3dpZHRo
IHsgMCB9OwotICAgICAgICBUeXBlIG1fdHlwZSB7IEludmFsaWQgfTsKLSAgICAgICAgYm9vbCBt
X2lzTGFzdEluUmVuZGVyZXIgeyBmYWxzZSB9OwotICAgICAgICBib29sIG1fb3ZlcmxhcHNUb05l
eHRSZW5kZXJlciB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgbV9pc0NvbGxhcHNlZCB7IGZhbHNl
IH07Ci0gICAgICAgIGJvb2wgbV9pc0NvbGxhcHNpYmxlIHsgZmFsc2UgfTsKLSAgICAgICAgYm9v
bCBtX2hhc0h5cGhlbiB7IGZhbHNlIH07Ci0gICAgfTsKLSAgICBUZXh0RnJhZ21lbnQgbmV4dFRl
eHRGcmFnbWVudChmbG9hdCB4UG9zaXRpb24gPSAwKTsKLSAgICB2b2lkIHJldmVydFRvRW5kT2ZG
cmFnbWVudChjb25zdCBUZXh0RnJhZ21lbnQmKTsKLQotICAgIC8vIEZJWE1FOiBUaGVzZSBmdW5j
dGlvbnMgYmVsb3cgc2hvdWxkIGJlIGRlY291cGxlZCBmcm9tIHRoZSB0ZXh0IGl0ZXJhdG9yLgot
ICAgIGZsb2F0IHRleHRXaWR0aCh1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBlbmRQ
b3NpdGlvbiwgZmxvYXQgeFBvc2l0aW9uKSBjb25zdDsKLSAgICBPcHRpb25hbDx1bnNpZ25lZD4g
bGFzdEh5cGhlblBvc2l0aW9uKGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21l
bnQmIHJ1biwgdW5zaWduZWQgYmVmb3JlSW5kZXgpIGNvbnN0OwotCi0gICAgc3RydWN0IFN0eWxl
IHsKLSAgICAgICAgZXhwbGljaXQgU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmKTsKLQotICAgICAg
ICBjb25zdCBGb250Q2FzY2FkZSYgZm9udDsKLSAgICAgICAgVGV4dEFsaWduTW9kZSB0ZXh0QWxp
Z247Ci0gICAgICAgIGJvb2wgaGFzS2VybmluZ09yTGlnYXR1cmVzOwotICAgICAgICBib29sIGNv
bGxhcHNlV2hpdGVzcGFjZTsKLSAgICAgICAgYm9vbCBwcmVzZXJ2ZU5ld2xpbmU7Ci0gICAgICAg
IGJvb2wgd3JhcExpbmVzOwotICAgICAgICBib29sIGJyZWFrU3BhY2VzOwotICAgICAgICBib29s
IGJyZWFrQW55V29yZE9uT3ZlcmZsb3c7Ci0gICAgICAgIGJvb2wgYnJlYWtXb3JkT25PdmVyZmxv
dzsKLSAgICAgICAgYm9vbCBicmVha0ZpcnN0V29yZE9uT3ZlcmZsb3c7Ci0gICAgICAgIGJvb2wg
YnJlYWtOQlNQOwotICAgICAgICBib29sIGtlZXBBbGxXb3Jkc0ZvckNKSzsKLSAgICAgICAgZmxv
YXQgd29yZFNwYWNpbmc7Ci0gICAgICAgIFRhYlNpemUgdGFiV2lkdGg7Ci0gICAgICAgIGJvb2wg
c2hvdWxkSHlwaGVuYXRlOwotICAgICAgICBmbG9hdCBoeXBoZW5TdHJpbmdXaWR0aDsKLSAgICAg
ICAgdW5zaWduZWQgaHlwaGVuTGltaXRCZWZvcmU7Ci0gICAgICAgIHVuc2lnbmVkIGh5cGhlbkxp
bWl0QWZ0ZXI7Ci0gICAgICAgIEF0b21TdHJpbmcgbG9jYWxlOwotICAgICAgICBPcHRpb25hbDx1
bnNpZ25lZD4gaHlwaGVuTGltaXRMaW5lczsKLSAgICB9OwotICAgIGNvbnN0IFN0eWxlJiBzdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0KLQotcHJpdmF0ZToKLSAgICBUZXh0RnJhZ21l
bnQgZmluZE5leHRUZXh0RnJhZ21lbnQoZmxvYXQgeFBvc2l0aW9uKTsKLSAgICBlbnVtIFBvc2l0
aW9uVHlwZSB7IEJyZWFrYWJsZSwgTm9uV2hpdGVzcGFjZSB9OwotICAgIHVuc2lnbmVkIHNraXBU
b05leHRQb3NpdGlvbihQb3NpdGlvblR5cGUsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIGZsb2F0
JiB3aWR0aCwgZmxvYXQgeFBvc2l0aW9uLCBib29sJiBvdmVybGFwcGluZ0ZyYWdtZW50KTsKLSAg
ICBib29sIGlzU29mdExpbmVCcmVhayh1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7Ci0gICAgYm9v
bCBpc0hhcmRMaW5lQnJlYWsoY29uc3QgRmxvd0NvbnRlbnRzOjpJdGVyYXRvciYgc2VnbWVudCkg
Y29uc3Q7Ci0gICAgdW5zaWduZWQgbmV4dEJyZWFrYWJsZVBvc2l0aW9uKGNvbnN0IEZsb3dDb250
ZW50czo6U2VnbWVudCYsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24pOwotICAgIHVuc2lnbmVkIG5l
eHROb25XaGl0ZXNwYWNlUG9zaXRpb24oY29uc3QgRmxvd0NvbnRlbnRzOjpTZWdtZW50JiwgdW5z
aWduZWQgc3RhcnRQb3NpdGlvbik7Ci0KLSAgICBGbG93Q29udGVudHMgbV9mbG93Q29udGVudHM7
Ci0gICAgRmxvd0NvbnRlbnRzOjpJdGVyYXRvciBtX2N1cnJlbnRTZWdtZW50OwotICAgIExhenlM
aW5lQnJlYWtJdGVyYXRvciBtX2xpbmVCcmVha0l0ZXJhdG9yOwotICAgIGNvbnN0IFN0eWxlIG1f
c3R5bGU7Ci0gICAgdW5zaWduZWQgbV9wb3NpdGlvbiB7IDAgfTsKLSAgICBib29sIG1fYXRFbmRP
ZlNlZ21lbnQgeyBmYWxzZSB9OwotfTsKLQotaW5saW5lIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpU
ZXh0RnJhZ21lbnQgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6c3BsaXQodW5z
aWduZWQgc3BsaXRQb3NpdGlvbiwgZmxvYXQgbGVmdFNpZGVXaWR0aCwgZmxvYXQgcmlnaHRTaWRl
V2lkdGgpCi17Ci0gICAgYXV0byB1cGRhdGVGcmFnbWVudFByb3BlcnRpZXMgPSBbXSAoVGV4dEZy
YWdtZW50JiBmcmFnbWVudCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgZmxvYXQgd2lk
dGgpCi0gICAgewotICAgICAgICBmcmFnbWVudC5tX3N0YXJ0ID0gc3RhcnQ7Ci0gICAgICAgIGZy
YWdtZW50Lm1fZW5kID0gZW5kOwotICAgICAgICBmcmFnbWVudC5tX3dpZHRoID0gd2lkdGg7Ci0g
ICAgICAgIGlmIChmcmFnbWVudC5zdGFydCgpICsgMSA+IGZyYWdtZW50LmVuZCgpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBmcmFnbWVudC5tX2lzQ29sbGFwc2VkID0gZmFsc2U7Ci0g
ICAgfTsKLQotICAgIFRleHRGcmFnbWVudCByaWdodFNpZGUoKnRoaXMpOwotICAgIHVwZGF0ZUZy
YWdtZW50UHJvcGVydGllcygqdGhpcywgc3RhcnQoKSwgc3BsaXRQb3NpdGlvbiwgbGVmdFNpZGVX
aWR0aCk7Ci0gICAgdXBkYXRlRnJhZ21lbnRQcm9wZXJ0aWVzKHJpZ2h0U2lkZSwgc3BsaXRQb3Np
dGlvbiwgcmlnaHRTaWRlLmVuZCgpLCByaWdodFNpZGVXaWR0aCk7Ci0gICAgcmV0dXJuIHJpZ2h0
U2lkZTsKLX0KLQotaW5saW5lIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgVGV4
dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6c3BsaXRXaXRoSHlwaGVuKHVuc2lnbmVk
IGh5cGhlblBvc2l0aW9uLCBmbG9hdCBoeXBoZW5TdHJpbmdXaWR0aCwKLSAgICBmbG9hdCBsZWZ0
U2lkZVdpZHRoLCBmbG9hdCByaWdodFNpZGVXaWR0aCkKLXsKLSAgICBhdXRvIHJpZ2h0U2lkZSA9
IHNwbGl0KGh5cGhlblBvc2l0aW9uLCBsZWZ0U2lkZVdpZHRoLCByaWdodFNpZGVXaWR0aCk7Ci0g
ICAgbV9oYXNIeXBoZW4gPSB0cnVlOwotICAgIG1fd2lkdGggKz0gaHlwaGVuU3RyaW5nV2lkdGg7
Ci0gICAgcmV0dXJuIHJpZ2h0U2lkZTsKLX0KLQotaW5saW5lIGJvb2wgVGV4dEZyYWdtZW50SXRl
cmF0b3I6OmlzU29mdExpbmVCcmVhayh1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKLXsKLSAgICBj
b25zdCBhdXRvJiBzZWdtZW50ID0gKm1fY3VycmVudFNlZ21lbnQ7Ci0gICAgQVNTRVJUKHNlZ21l
bnQuc3RhcnQgPD0gcG9zaXRpb24gJiYgcG9zaXRpb24gPCBzZWdtZW50LmVuZCk7Ci0gICAgcmV0
dXJuIG1fc3R5bGUucHJlc2VydmVOZXdsaW5lICYmIHNlZ21lbnQudGV4dFtwb3NpdGlvbiAtIHNl
Z21lbnQuc3RhcnRdID09ICdcbic7Ci19Ci0KLWlubGluZSBib29sIFRleHRGcmFnbWVudEl0ZXJh
dG9yOjppc0hhcmRMaW5lQnJlYWsoY29uc3QgRmxvd0NvbnRlbnRzOjpJdGVyYXRvciYgc2VnbWVu
dCkgY29uc3QKLXsKLSAgICBBU1NFUlQoc2VnbWVudC0+c3RhcnQgIT0gc2VnbWVudC0+ZW5kIHx8
IChzZWdtZW50LT5zdGFydCA9PSBzZWdtZW50LT5lbmQgJiYgaXM8UmVuZGVyTGluZUJyZWFrPihz
ZWdtZW50LT5yZW5kZXJlcikpKTsKLSAgICByZXR1cm4gc2VnbWVudC0+c3RhcnQgPT0gc2VnbWVu
dC0+ZW5kOwotfQotCi19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
VGV4dFBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNw
cAppbmRleCBhNzBhODhlNmJhNDMuLjk1Y2U4N2Y5YTFkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvVGV4dFBhaW50ZXIuY3BwCkBAIC0yMjgsNyArMjI4LDYgQEAgdm9pZCBUZXh0UGFpbnRl
cjo6cGFpbnRSYW5nZShjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBGbG9hdFJlY3QmIGJv
eFJlY3QsIGMKIHZvaWQgVGV4dFBhaW50ZXI6OmNsZWFyR2x5cGhEaXNwbGF5TGlzdHMoKQogewog
ICAgIEdseXBoRGlzcGxheUxpc3RDYWNoZTxJbmxpbmVUZXh0Qm94Pjo6c2luZ2xldG9uKCkuY2xl
YXIoKTsKLSAgICBHbHlwaERpc3BsYXlMaXN0Q2FjaGU8U2ltcGxlTGluZUxheW91dDo6UnVuPjo6
c2luZ2xldG9uKCkuY2xlYXIoKTsKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5sYXlv
dXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxlZCgpKQogICAgICAgICBHbHlwaERp
c3BsYXlMaXN0Q2FjaGU8RGlzcGxheTo6UnVuPjo6c2luZ2xldG9uKCkuY2xlYXIoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5j
cHAKaW5kZXggNTFlZjIxZmEzYTU3Li5hMDJlODQ0NDcwZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuY3BwCkBAIC04MSwx
MSArODEsNiBAQCBzdGF0aWMgY29uc3QgUmVuZGVyQmxvY2tGbG93KiBsaW5lTGF5b3V0U3lzdGVt
Rmxvd0ZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdAogVGV4dEJveEl0ZXJhdG9yIGZpcnN0
VGV4dEJveEZvcihjb25zdCBSZW5kZXJUZXh0JiB0ZXh0KQogewogICAgIGlmIChhdXRvKiBmbG93
ID0gbGluZUxheW91dFN5c3RlbUZsb3dGb3JSZW5kZXJlcih0ZXh0KSkgewotICAgICAgICBpZiAo
YXV0byogc2ltcGxlTGluZUxheW91dCA9IGZsb3ctPnNpbXBsZUxpbmVMYXlvdXQoKSkgewotICAg
ICAgICAgICAgYXV0byByYW5nZSA9IHNpbXBsZUxpbmVMYXlvdXQtPnJ1blJlc29sdmVyKCkucmFu
Z2VGb3JSZW5kZXJlcih0ZXh0KTsKLSAgICAgICAgICAgIHJldHVybiB7IFNpbXBsZVBhdGggeyBy
YW5nZS5iZWdpbigpLCByYW5nZS5lbmQoKSB9IH07Ci0gICAgICAgIH0KLQogI2lmIEVOQUJMRShM
QVlPVVRfRk9STUFUVElOR19DT05URVhUKQogICAgICAgICBpZiAoYXV0byogbGF5b3V0Rm9ybWF0
dGluZ0NvbnRleHRMaW5lTGF5b3V0ID0gZmxvdy0+bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5l
TGF5b3V0KCkpCiAgICAgICAgICAgICByZXR1cm4gbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5l
TGF5b3V0LT50ZXh0Qm94ZXNGb3IodGV4dCk7CkBAIC0xMjksMTEgKzEyNCw2IEBAIGJvb2wgRWxl
bWVudEJveEl0ZXJhdG9yOjphdEVuZCgpIGNvbnN0CiBFbGVtZW50Qm94SXRlcmF0b3IgZWxlbWVu
dEJveEZvcihjb25zdCBSZW5kZXJMaW5lQnJlYWsmIHJlbmRlckVsZW1lbnQpCiB7CiAgICAgaWYg
KGF1dG8qIGZsb3cgPSBsaW5lTGF5b3V0U3lzdGVtRmxvd0ZvclJlbmRlcmVyKHJlbmRlckVsZW1l
bnQpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBzaW1wbGVMaW5lTGF5b3V0ID0gZmxvdy0+c2ltcGxl
TGluZUxheW91dCgpKSB7Ci0gICAgICAgICAgICBhdXRvIHJhbmdlID0gc2ltcGxlTGluZUxheW91
dC0+cnVuUmVzb2x2ZXIoKS5yYW5nZUZvclJlbmRlcmVyKHJlbmRlckVsZW1lbnQpOwotICAgICAg
ICAgICAgcmV0dXJuIHsgU2ltcGxlUGF0aChyYW5nZS5iZWdpbigpLCByYW5nZS5lbmQoKSkgfTsK
LSAgICAgICAgfQotCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAgICAg
ICAgIGlmIChhdXRvKiBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQgPSBmbG93LT5s
YXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKSkKICAgICAgICAgICAgIHJldHVybiBs
YXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQtPmVsZW1lbnRCb3hGb3IocmVuZGVyRWxl
bWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5
b3V0VHJhdmVyc2FsLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0
VHJhdmVyc2FsLmgKaW5kZXggZDczMDQ5NzQxNTNiLi4wMWY2OTg5N2QyZTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmgKQEAg
LTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJJbmxpbmVFbGVtZW50Qm94LmgiCiAjaW5jbHVkZSAi
TGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmgiCiAjaW5jbHVkZSAiTGluZUxheW91dFRy
YXZlcnNhbERpc3BsYXlSdW5QYXRoLmgiCi0jaW5jbHVkZSAiTGluZUxheW91dFRyYXZlcnNhbFNp
bXBsZVBhdGguaCIKICNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC00OSw4ICs0OCw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJ
TkdfQ09OVEVYVCkKICAgICAgICAgRGlzcGxheVJ1blBhdGgsCiAjZW5kaWYKLSAgICAgICAgQ29t
cGxleFBhdGgsCi0gICAgICAgIFNpbXBsZVBhdGgKKyAgICAgICAgQ29tcGxleFBhdGgKICAgICA+
OwogCiAgICAgQm94KFBhdGhWYXJpYW50JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjZDNjMjNmNzA5OC4uMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWxTaW1w
bGVQYXRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJMaW5lTGF5b3V0VHJhdmVyc2FsLmgiCi0jaW5jbHVkZSAi
U2ltcGxlTGluZUxheW91dFJlc29sdmVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVz
cGFjZSBMaW5lTGF5b3V0VHJhdmVyc2FsIHsKLQotY2xhc3MgU2ltcGxlUGF0aCB7Ci1wdWJsaWM6
Ci0gICAgU2ltcGxlUGF0aChTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3Ig
aXRlcmF0b3IsIFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvciBlbmQpCi0g
ICAgICAgIDogbV9pdGVyYXRvcihpdGVyYXRvcikKLSAgICAgICAgLCBtX2VuZChlbmQpCi0gICAg
eyB9Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuICgqbV9pdGVyYXRvciku
cmVjdCgpOyB9Ci0KLSAgICBmbG9hdCBiYXNlbGluZSgpIGNvbnN0IHsgcmV0dXJuICgqbV9pdGVy
YXRvcikuYmFzZWxpbmUoKTsgfQotCi0gICAgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIGJvb2wgZGlyT3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQotICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBjb25zdCB7IHJldHVybiAoKm1faXRlcmF0b3Ip
LmlzTGluZUJyZWFrKCk7IH0KLQotICAgIGJvb2wgdXNlTGluZUJyZWFrQm94UmVuZGVyVHJlZUR1
bXBRdWlyaygpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAobV9pdGVyYXRvci5hdEJlZ2luKCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8gcHJldmlvdXMgPSBtX2l0
ZXJhdG9yOwotICAgICAgICAtLXByZXZpb3VzOwotICAgICAgICByZXR1cm4gISgqcHJldmlvdXMp
LmlzRW5kT2ZMaW5lKCk7Ci0gICAgfQotCi0gICAgYm9vbCBoYXNIeXBoZW4oKSBjb25zdCB7IHJl
dHVybiAoKm1faXRlcmF0b3IpLmhhc0h5cGhlbigpOyB9Ci0gICAgU3RyaW5nVmlldyB0ZXh0KCkg
Y29uc3QgeyByZXR1cm4gKCptX2l0ZXJhdG9yKS50ZXh0KCk7IH0KLSAgICB1bnNpZ25lZCBsb2Nh
bFN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gKCptX2l0ZXJhdG9yKS5sb2NhbFN0YXJ0KCk7
IH0KLSAgICB1bnNpZ25lZCBsb2NhbEVuZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuICgqbV9pdGVy
YXRvcikubG9jYWxFbmQoKTsgfQotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
ICgqbV9pdGVyYXRvcikuZW5kKCkgLSAoKm1faXRlcmF0b3IpLnN0YXJ0KCk7IH0KLQotICAgIGJv
b2wgaXNMYXN0T25MaW5lKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGF1dG8gbmV4dCA9IG1faXRl
cmF0b3I7Ci0gICAgICAgICsrbmV4dDsKLSAgICAgICAgcmV0dXJuIG5leHQgPT0gbV9lbmQgfHwg
KCptX2l0ZXJhdG9yKS5saW5lSW5kZXgoKSAhPSAoKm5leHQpLmxpbmVJbmRleCgpOwotICAgIH0K
LSAgICBib29sIGlzTGFzdCgpIGNvbnN0Ci0gICAgewotICAgICAgICBhdXRvIG5leHQgPSBtX2l0
ZXJhdG9yOwotICAgICAgICArK25leHQ7Ci0gICAgICAgIHJldHVybiBuZXh0ID09IG1fZW5kOwot
ICAgIH07Ci0KLSAgICB2b2lkIHRyYXZlcnNlTmV4dFRleHRCb3hJblZpc3VhbE9yZGVyKCkKLSAg
ICB7Ci0gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY3VycmVudGx5IG9ubHkgdXNlZCBmb3Ig
Y29uc2VjdXRpdmUgdGV4dCBydW5zLgotICAgICAgICArK21faXRlcmF0b3I7Ci0gICAgfQotICAg
IHZvaWQgdHJhdmVyc2VOZXh0VGV4dEJveEluVGV4dE9yZGVyKCkgeyAgdHJhdmVyc2VOZXh0VGV4
dEJveEluVmlzdWFsT3JkZXIoKTsgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNpbXBs
ZVBhdGgmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdG9yID09IG90aGVyLm1faXRlcmF0
b3I7IH0KLSAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRvciA9PSBtX2Vu
ZDsgfQotCi1wcml2YXRlOgotICAgIFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVy
YXRvciBtX2l0ZXJhdG9yOwotICAgIFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVy
YXRvciBtX2VuZDsKLX07Ci0KLX0KLX0K
</data>
<flag name="commit-queue"
          id="425281"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409541</attachid>
            <date>2020-09-24 01:37:39 -0700</date>
            <delta_ts>2020-09-24 09:11:29 -0700</delta_ts>
            <desc>patch</desc>
            <filename>delete-sll-4.patch</filename>
            <type>text/plain</type>
            <size>226949</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwZjI4OTNlMTdiNzcuLjZlOWViNzdkMTJjOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDgwIEBACisyMDIwLTA5LTI0ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmUgU2ltcGxlIExpbmUgTGF5b3V0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY5MTQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCBpcyBhbHJlYWR5IGZ1bGx5IGNvdmVy
ZWQgYnkgTEZDIGFuZCBzbyB1bnVzZWQuIFJlbW92ZSB0aGUgY29kZS4KKworICAgICAgICAqIEhl
YWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhMb2dn
ZXIuY3BwOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVy
ZmFjZS5oOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKiBs
YXlvdXQvVmVyaWZpY2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6dmVyaWZ5
QW5kT3V0cHV0U3VidHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Om91dHB1dE1pc21h
dGNoaW5nU2ltcGxlTGluZUluZm9ybWF0aW9uSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAq
IGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwOgorICAg
ICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uY3Bw
OgorICAgICAgICAqIHJlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wbGV4TGluZUxheW91dDo6bGF5b3V0TGluZUJveGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBsZXhMaW5lTGF5b3V0OjphZGRPdmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbik6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxheW91dElubGluZUNoaWxkcmVuKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2tGbG93OjpoaXRUZXN0SW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2tGbG93OjphZGRPdmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6Om1hcmtMaW5lc0RpcnR5SW5CbG9ja1Jh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Zmlyc3RMaW5lQmFzZWxp
bmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjppbmxpbmVCbG9j
a0Jhc2VsaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6aW5s
aW5lU2VsZWN0aW9uR2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6Omxp
bmVDb3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0
aW9uRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpwYWludElu
bGluZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6aGFzTGlu
ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjppbnZhbGlkYXRl
TGluZUxheW91dFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjplbnN1
cmVMaW5lQm94ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpvdXRwdXRM
aW5lVHJlZUFuZE1hcmsgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93
OjpsYXlvdXRTaW1wbGVMaW5lcyk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJsb2NrRmxvdy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpoYXNTaW1w
bGVMaW5lTGF5b3V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrRmxvdzo6c2ltcGxlTGluZUxheW91dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnNpbXBsZUxpbmVMYXlvdXQpOiBEZWxldGVkLgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJGcmFnbWVudGVkRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJGcmFnbWVudGVkRmxvdzo6cmVtb3ZlTGluZUZyYWdtZW50SW5mbyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4
dDo6YWJzb2x1dGVRdWFkc0ZvclJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHQ6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6
c2V0VGV4dFdpdGhPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6dXNlc0Nv
bXBsZXhMaW5lTGF5b3V0UGF0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
OjpsaW5lc1Zpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzRm9yTGluZUJveGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnNpbXBsZUxpbmVMYXlvdXQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1NpbXBsZUxpbmVMYXlvdXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXRDb3ZlcmFnZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxp
bmVMYXlvdXRDb3ZlcmFnZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcv
U2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRl
cmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oOiBSZW1vdmVkLgorICAgICAgICAq
IHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oOiBSZW1vdmVk
LgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0
b3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4
dEZyYWdtZW50SXRlcmF0b3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dFBh
aW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFBhaW50ZXI6OmNsZWFyR2x5cGhEaXNw
bGF5TGlzdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Zmlyc3RUZXh0Qm94
Rm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OmVsZW1lbnRCb3hG
b3IpOgorICAgICAgICAqIHJlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxlUGF0aC5oOiBS
ZW1vdmVkLgorCiAyMDIwLTA5LTIzICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlh
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBwcm9zcGVjdGl2ZSBHVEsgYnVpbGQgZml4IGFm
dGVyIHIyNjc0NDkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCAzOGMwNmI4YmJkY2MuLjBkMmUxZDZm
YTZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xNDE2LDE1ICsxNDE2LDEwIEBAIHNldChXZWJD
b3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0
LmgKICAgICByZW5kZXJpbmcvUm9vdElubGluZUJveC5oCiAgICAgcmVuZGVyaW5nL1Njcm9sbEFs
aWdubWVudC5oCi0gICAgcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuaAotICAgIHJlbmRlcmlu
Zy9TaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuaAotICAgIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5
b3V0Rmxvd0NvbnRlbnRzLmgKLSAgICByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFJlc29sdmVy
LmgKIAogICAgIHJlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuaAogICAgIHJlbmRl
cmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5oCiAgICAgcmVuZGVyaW5n
L2xpbmUvTGluZUxheW91dFRyYXZlcnNhbERpc3BsYXlSdW5QYXRoLmgKLSAgICByZW5kZXJpbmcv
bGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxlUGF0aC5oCiAgICAgcmVuZGVyaW5nL2xpbmUv
TGluZVdpZHRoLmgKICAgICByZW5kZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMuaAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IGE0M2ZiOTcxYzAwMC4uNjQ0OTNiYjdhMDUyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApA
QCAtMjE5OSwxMyArMjE5OSw2IEBAIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAogcmVuZGVyaW5n
L1JlbmRlcldpZGdldC5jcHAKIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAogcmVuZGVyaW5n
L1Njcm9sbEFsaWdubWVudC5jcHAKLXJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAotcmVu
ZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5jcHAKLXJlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0Rmxvd0NvbnRlbnRzLmNwcAotcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlv
bnMuY3BwCi1yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFBhZ2luYXRpb24uY3BwCi1yZW5kZXJp
bmcvU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNwcAotcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRUZXh0RnJhZ21lbnRJdGVyYXRvci5jcHAKIHJlbmRlcmluZy9UYWJsZUxheW91dC5jcHAKIHJl
bmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwCiByZW5kZXJpbmcvVGV4dFBhaW50U3R5
bGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggODFjNjEwMzdiMjFmLi5hYTc5NDkyYzRjYTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM2OSw3ICszNjks
NiBAQAogCQkwRkZENDVBQTI0M0MzMDI3MDAwRDRCRUEgLyogU2Nyb2xsaW5nVHJlZUxhdGNoaW5n
Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZGRDQ1QTcyNDNCRjI1NzAwMEQ0QkVBIC8qIFNjcm9sbGluZ1RyZWVMYXRjaGluZ0NvbnRy
b2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkZENEQ2MTE4NjUxRkEzMDA1MTJGNkUgLyogQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGRDRENUYx
ODY1MUZBMzAwNTEyRjZFIC8qIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxMEZCMDg0QjE0RTE1QzdF
MDBBM0RCOTggLyogUHVibGljVVJMTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTBGQjA4NEExNEUxNUM3RTAwQTNEQjk4IC8qIFB1YmxpY1VS
TE1hbmFnZXIuaCAqLzsgfTsKLQkJMTEyQjM0RDUxRTYwQjk4MzAwQkIzMTBBIC8qIFNpbXBsZUxp
bmVMYXlvdXRQYWdpbmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxMTJCMzRENDFFNjBCOTgzMDBCQjMxMEEgLyogU2ltcGxlTGluZUxheW91dFBh
Z2luYXRpb24uaCAqLzsgfTsKIAkJMTEzMTBDRjIyMEJBNEEzMjAwNjVBOEQwIC8qIExheW91dFRy
ZWVCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxMTEwMEZENzIwOTUxNERGMDA4MUFBNkMgLyogTGF5b3V0VHJlZUJ1aWxkZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxMTMxMENGMzIwQkE0
QTM3MDA2NUE4RDAgLyogTGF5b3V0UmVwbGFjZWRCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExMUM2MTU2MjBBRDFBRTEwMDVCODJGQSAvKiBMYXlv
dXRSZXBsYWNlZEJveC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTExMzEwQ0Y0MjBCQTRBM0QwMDY1QThEMCAvKiBMYXlvdXRJdGVyYXRvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTExMDBGQzcyMDky
NzY0QzAwODFBQTZDIC8qIExheW91dEl0ZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM5Myw3ICszOTIsNiBAQAogCQkxMTk5RkE0NjIw
OEUzNUEzMDAyMzU4Q0MgLyogTGF5b3V0Q29udGFpbmVyQm94LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMTk5RkE0NDIwOEUzNUEzMDAyMzU4Q0MgLyog
TGF5b3V0Q29udGFpbmVyQm94LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTE5OUZBNUIyMDhFM0M3RjAwMjM1OENDIC8qIERpc3BsYXlCb3guaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExOTlGQTU5MjA4
RTNDN0YwMDIzNThDQyAvKiBEaXNwbGF5Qm94LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTFDQjI3ODkyMDNCQTU3MDAwNEExREM5IC8qIFJlbmRl
clRyZWVCdWlsZGVyRnVsbFNjcmVlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTFDQjI3ODcyMDNCQTU3MDAwNEExREM5IC8qIFJlbmRlclRyZWVCdWls
ZGVyRnVsbFNjcmVlbi5oICovOyB9OwotCQkxMUUwNjdFRTFFNjI0NkU1MDAxNjJEMTYgLyogU2lt
cGxlTGluZUxheW91dENvdmVyYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxMUUwNjdFRDFFNjI0NkU1MDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91
dENvdmVyYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMTQwMEQ3QTgxNzEzNkVBNzAwNzdDRTA1IC8qIFNjcmlwdFdyYXBwYWJsZUlubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDBEN0E3
MTcxMzZFQTcwMDc3Q0UwNSAvKiBTY3JpcHRXcmFwcGFibGVJbmxpbmVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwM0I5OTcwOUVCMTNBRjAw
Nzk3QzdGIC8qIERPTVdpbmRvdy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQwM0I5OTUwOUVCMTNBRjAwNzk3QzdGIC8qIERPTVdpbmRvdy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MDNCQTBGMDlF
QjE4RjkwMDc5N0M3RiAvKiBKU0RPTVdpbmRvdy5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwM0JBMEUwOUVCMThGODAwNzk3
QzdGIC8qIEpTRE9NV2luZG93LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTE4NzcsOSArMTg3NSw3IEBACiAJCTU4MDM3MTY0MUE2NkYxRDMwMEJB
RjUxOSAvKiBMYXllckZyYWdtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1ODAzNzE2MzFBNjZGMUQzMDBCQUY1MTkgLyogTGF5ZXJGcmFnbWVudC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU4MjRB
QkEzMUFFODExMTYwMDkwNzRCNyAvKiBSdWJ5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTgyNEFCQTExQUU4MTExNjAwOTA3NEI3IC8qIFJ1
YnlFbGVtZW50LmggKi87IH07CiAJCTU4MjRBQkE3MUFFODEzODQwMDkwNzRCNyAvKiBSdWJ5VGV4
dEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU4MjRBQkE1MUFFODEzODQwMDkwNzRCNyAvKiBSdWJ5VGV4dEVsZW1lbnQuaCAqLzsgfTsKLQkJ
NTgyQ0IwNTMxQTc4QTE0QjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJ
dGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTgyQ0IwNTIxQTc4QTE0QjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJ
dGVyYXRvci5oICovOyB9OwogCQk1ODJERTMyNTFDMzBDODU0MDBCRTAyQTggLyogVGV4dERlY29y
YXRpb25QYWludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1ODJERTMyMzFDMzBDODU0MDBCRTAyQTggLyogVGV4dERlY29yYXRpb25QYWludGVyLmgg
Ki87IH07Ci0JCTU4NUQ2RTA0MUExQTc5MkUwMEZBNEYxMiAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxv
d0NvbnRlbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1ODVENkUwMjFBMUE3OTJFMDBGQTRGMTIgLyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU4
OTU1NkVEMThENEE0NDAwMDc2NEIwMyAvKiBCb3JkZXJFZGdlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODk1NTZFQzE4RDRBNDQwMDA3NjRCMDMgLyog
Qm9yZGVyRWRnZS5oICovOyB9OwogCQk1OEIyRjlGNDIyMzJENDUzMDA5MzhENjMgLyogUmVzaXpl
T2JzZXJ2YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU4QjJGOUYzMjIzMkQ0M0YwMDkzOEQ2MyAvKiBSZXNpemVPYnNlcnZhdGlvbi5oICovOyB9
OwogCQk1OEIyRjlGNTIyMzJENDU4MDA5MzhENjMgLyogUmVzaXplT2JzZXJ2ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4QjJGOUVDMjIzMkQ0M0Iw
MDkzOEQ2MyAvKiBSZXNpemVPYnNlcnZlci5oICovOyB9OwpAQCAtNDk4NSw3ICs0OTgxLDYgQEAK
IAkJRTQyOTVGQTQxMkIwNjE0RTAwRDFBQ0UwIC8qIFJlc291cmNlTG9hZFByaW9yaXR5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDI5NUZBMzEyQjA2
MTRFMDBEMUFDRTAgLyogUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDJFNzZEQzFDN0FGNzc2MDBFMzYxNEQg
LyogU3R5bGVVcGRhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0MkU3NkRCMUM3QUY3NzYwMEUzNjE0RCAvKiBTdHlsZVVwZGF0ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0MzEwNUJCMTY3NTBG
MTYwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNDMxMDVCQTE2NzUwRjE2MDBEQjJGQjggLyogTm9kZVRyYXZl
cnNhbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CUU0MzQzRDIzMjM5Mjc3ODQwMEVCQkI2NiAvKiBMaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxlUGF0
aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzNDNE
MjEyMzkyNzc4MzAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQzNDNEMjUy
MzkyNzc5MDAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzNDNEMjQyMzkyNzc4
RjAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0M0EwMjNCMTdFQjM3MEEw
MDRDREQyNSAvKiBSZW5kZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNDNBMDIzQTE3RUIzNzBBMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVu
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0
M0FGOEU3MUFDNUI3RUMwMENBNzE3RSAvKiBDYWNoZVZhbGlkYXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0M0FGOEU1MUFDNUI3REQwMENBNzE3
RSAvKiBDYWNoZVZhbGlkYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtNTA0MCw3ICs1MDM1LDYgQEAKIAkJRTQ4MTM3QjkxREIzQjUyNjAw
NUM1OUJGIC8qIFN0eWxlVmFsaWRpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0ODEzN0I4MURCM0I1MjYwMDVDNTlCRiAvKiBTdHlsZVZhbGlkaXR5
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ4
NEEzM0UyMzA1NTMyNTAwOUFERTZBIC8qIExpbmVMYXlvdXRUcmF2ZXJzYWwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODRBMzNCMjMwNTUzMDMwMDlB
REU2QSAvKiBMaW5lTGF5b3V0VHJhdmVyc2FsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ4NjNDRkUyMzg0MkU5RTAwOTcyMTU4IC8qIFJ1bGVE
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDg2
M0NGRDIzODQyRTlFMDA5NzIxNTggLyogUnVsZURhdGEuaCAqLzsgfTsKLQkJRTQ4OTQ0QTMxODBC
NTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODk0NEExMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1w
bGVMaW5lTGF5b3V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRTQ5NDZFQUYxNTZFNjRERDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5NDZFQUQxNTZF
NjRERDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0OUJEOUZBMTMxRkQyRUQwMDNDNTZGMCAvKiBD
U1NWYWx1ZVBvb2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0OUJEOUY5MTMxRkQyRUQwMDNDNTZGMCAvKiBDU1NWYWx1ZVBvb2wuaCAqLzsgfTsKIAkJ
RTRBNzk5NTIyMEVFNEIxNDAwQzE5NTY4IC8qIENTU1BhcnNlckNvbnRleHQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QTc5OTRFMjBFRTRBRTEwMEMx
OTU2OCAvKiBDU1NQYXJzZXJDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTUwODEsOCArNTA3NSw2IEBACiAJCUU0RThCNEVDMjE2Qjc5
RTUwMEI4ODM0RCAvKiBTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRFOEI0RUEyMTZCNzlFNTAwQjg4MzRE
IC8qIFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmggKi87IH07CiAJCUU0RThCNEY1MjE2Qjk1
NjUwMEI4ODM0RCAvKiBGb250Q2FzY2FkZURlc2NyaXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEU4QjRGMjIxNkI4QjYwMDBCODgzNEQgLyog
Rm9udENhc2NhZGVEZXNjcmlwdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUU0RTk0RDYxMjJGRjE1OEEwMEREMTkxRiAvKiBDb21wbGV4TGlu
ZUxheW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTRBMUFDNzgyMkZBRkQ1MDAwMTdCNzVCIC8qIENvbXBsZXhMaW5lTGF5b3V0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRTRFOUIxMTkxODEwOTE2
RjAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRFOUIxMTgxODEwOTE2RjAwM0FDQ0RGIC8q
IFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCUU0RTlCMTFEMTgxNDU2OUMwMDNBQ0NERiAvKiBTaW1wbGVM
aW5lTGF5b3V0RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNEU5QjExQzE4MTQ1NjlDMDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dEZ1
bmN0aW9ucy5oICovOyB9OwogCQlFNEY5RUVGMzE1NkRBMDA3MDBEMjNFN0UgLyogU3R5bGVTaGVl
dENvbnRlbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNEY5RUVGMTE1NkQ4NEM0MDBEMjNFN0UgLyogU3R5bGVTaGVldENvbnRlbnRzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTUxNjY5OTEyMEZG
OTkxODAwOUQyQzI3IC8qIExpc3RCdXR0b25BcnJvd0AyeC5wbmcgaW4gUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU1MTY2OThGMjBGRjk5MTYwMDlEMkMyNyAv
KiBMaXN0QnV0dG9uQXJyb3dAMngucG5nICovOyB9OwogCQlFNTE3NjcwMzIwQjg4QzE0MDBENDEx
NjcgLyogRGF0YUxpc3RTdWdnZXN0aW9uSW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU1MTc2NzAyMjBCODhDMTQwMEQ0MTE2NyAvKiBE
YXRhTGlzdFN1Z2dlc3Rpb25JbmZvcm1hdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02MDk3LDggKzYwODksNiBAQAogCQkxMTEwMEZENzIw
OTUxNERGMDA4MUFBNkMgLyogTGF5b3V0VHJlZUJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5
b3V0VHJlZUJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTExQzYxNTYy
MEFEMUFFMTAwNUI4MkZBIC8qIExheW91dFJlcGxhY2VkQm94LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExh
eW91dFJlcGxhY2VkQm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExMUM2MTU3
MjBBRDFBRTEwMDVCODJGQSAvKiBMYXlvdXRSZXBsYWNlZEJveC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBMYXlvdXRSZXBsYWNlZEJveC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTExMkIzNEQwMUU2MEI4QTcwMEJCMzEwQSAvKiBTaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0
UGFnaW5hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTExMkIzNEQ0MUU2
MEI5ODMwMEJCMzEwQSAvKiBTaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMTM0MDlENzIwM0UwMzgwMDBDNjY5MTUgLyogUmVu
ZGVyVHJlZUJ1aWxkZXJDb250aW51YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVy
VHJlZUJ1aWxkZXJDb250aW51YXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxMTM0MDlEODIwM0UwMzgwMDBDNjY5MTUgLyogUmVuZGVyVHJlZUJ1aWxkZXJDb250aW51YXRp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJDb250aW51YXRpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTEzRDBCNEYxRjlGREQyQjAwRjYxMUJCIC8qIEZy
YW1lVmlld0xheW91dENvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnJhbWVWaWV3TGF5
b3V0Q29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MTQ3LDggKzYx
MzcsNiBAQAogCQkxMUNCMjc4NjIwM0JBNTcwMDA0QTFEQzkgLyogUmVuZGVyVHJlZUJ1aWxkZXJG
dWxsU2NyZWVuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclRyZWVCdWlsZGVyRnVsbFNj
cmVlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExQ0IyNzg3MjAzQkE1NzAw
MDRBMURDOSAvKiBSZW5kZXJUcmVlQnVpbGRlckZ1bGxTY3JlZW4uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyVHJlZUJ1aWxkZXJGdWxsU2NyZWVuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTExRDE5QzJFMjMxNTlCQUUwMDhGMjREMyAvKiBUYWJsZUZvcm1hdHRpbmdDb250ZXh0R2Vv
bWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGFibGVGb3JtYXR0aW5nQ29udGV4dEdlb21l
dHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTFFMDY3RUIxRTYyNDYxMzAw
MTYyRDE2IC8qIFNpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkxMUUwNjdFRDFFNjI0NkU1MDAxNjJEMTYgLyogU2ltcGxl
TGluZUxheW91dENvdmVyYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNp
bXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
MUZGMDJENTIwQkEzQzgxMDA4M0YyNUIgLyogVmVyaWZpY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFZlcmlmaWNhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTEy
Rjc1QTlBODZFQTAzREFGMjRCNzk3MSAvKiBJU09Qcm90ZWN0aW9uU3lzdGVtU3BlY2lmaWNIZWFk
ZXJCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSVNPUHJvdGVjdGlvblN5
c3RlbVNwZWNpZmljSGVhZGVyQm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
MDBEN0E3MTcxMzZFQTcwMDc3Q0UwNSAvKiBTY3JpcHRXcmFwcGFibGVJbmxpbmVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFdyYXBwYWJsZUlubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkxNzMsMTMgKzkxNjEsOCBAQAogCQk1ODI0QUJB
MTFBRTgxMTE2MDA5MDc0QjcgLyogUnVieUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUnVieUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTgyNEFCQTQxQUU4MTM4NDAwOTA3NEI3IC8qIFJ1YnlUZXh0RWxlbWVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSdWJ5VGV4dEVsZW1lbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1ODI0QUJBNTFBRTgxMzg0MDA5MDc0QjcgLyogUnVieVRl
eHRFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJ1YnlUZXh0RWxl
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1ODJDQjA1MjFBNzhBMTRCMDBB
RkZDQzQgLyogU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVy
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1ODJDQjA1NDFBNzhBMkIyMDBB
RkZDQzQgLyogU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21l
bnRJdGVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU4MkRFMzIyMUMz
MEM4NTQwMEJFMDJBOCAvKiBUZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dERlY29yYXRpb25QYWludGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTgyREUzMjMxQzMwQzg1NDAwQkUwMkE4IC8qIFRleHRE
ZWNvcmF0aW9uUGFpbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0
RGVjb3JhdGlvblBhaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTg1RDZE
RkIxQTE1MzU1NjAwRkE0RjEyIC8qIFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1ODVENkUwMTFBMUE3OTJFMDBGQTRG
MTIgLyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTg1RDZFMDIxQTFBNzkyRTAwRkE0RjEyIC8qIFNp
bXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1ODg0RkU1NjIyODEzRTJEMDA0MEFGRjYgLyogSlNSZXNpemVPYnNlcnZlckVu
dHJ5Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmVz
aXplT2JzZXJ2ZXJFbnRyeUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTU4OTU1NkVDMThENEE0NDAwMDc2NEIwMyAvKiBCb3JkZXJFZGdlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEJvcmRlckVkZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNThBRUUyRjMxOEQ0QkNDRjAwMjJFN0ZFIC8qIEJvcmRlckVkZ2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQm9yZGVyRWRnZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xNTgzNiw3ICsxNTgxOSw2IEBACiAJCUU0MzEwNUJBMTY3NTBG
MTYwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE5vZGVUcmF2ZXJzYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQz
MTJBQjUyNEIzMjY1NjAwNjc4MzQ5IC8qIExheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRJbnRlZ3JhdGlvblBh
Z2luYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDMxMkFCNzI0QjMy
NjU2MDA2NzgzNDkgLyogTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNDM0M0QyMTIzOTI3NzgzMDBFQkJCNjYgLyogTGlu
ZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTQzNDNEMjQyMzkyNzc4RjAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJz
YWxDb21wbGV4UGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaW5lTGF5
b3V0VHJhdmVyc2FsQ29tcGxleFBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTQzQTAyM0ExN0VCMzcwQTAwNENERDI1IC8qIFJlbmRlckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFNDNBMDIzQzE3RUIzNzEzMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJFbGVtZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1OTI4LDggKzE1OTEwLDYgQEAKIAkJRTQ4
NEEzM0QyMzA1NTMwMzAwOUFERTZBIC8qIExpbmVMYXlvdXRUcmF2ZXJzYWwuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGluZUxheW91dFRyYXZlcnNhbC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0ODYzQ0ZBMjM4NDJFODcwMDk3MjE1OCAvKiBS
dWxlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSdWxlRGF0
YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0ODYzQ0ZEMjM4NDJFOUUwMDk3
MjE1OCAvKiBSdWxlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSdWxl
RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNDg5NDRBMDE4MEI1N0Q4MDBG
MTY1RDggLyogU2ltcGxlTGluZUxheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRTQ4OTQ0QTExODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlTGluZUxheW91dC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFNDk0NkVBQzE1NkU2NEREMDBEMzI5N0YgLyogU3R5bGVS
dWxlSW1wb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxl
UnVsZUltcG9ydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0OTQ2RUFEMTU2
RTY0REQwMEQzMjk3RiAvKiBTdHlsZVJ1bGVJbXBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3R5bGVSdWxlSW1wb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUU0OUJEOUY5MTMxRkQyRUQwMDNDNTZGMCAvKiBDU1NWYWx1ZVBvb2wuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTVmFsdWVQb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNjAxOSw5ICsxNTk5OSw2IEBACiAJCUU0RThCNEVEMjE2Qjc5RjQwMEI4
ODM0RCAvKiBTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RThCNEYwMjE2QjhCNUYwMEI4ODM0RCAvKiBGb250
Q2FzY2FkZURlc2NyaXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFNEU4QjRGMjIxNkI4QjYwMDBCODgzNEQgLyogRm9udENhc2NhZGVEZXNjcmlwdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250Q2FzY2FkZURlc2NyaXB0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0RTlCMTE4MTgxMDkxNkYwMDNBQ0NE
RiAvKiBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUU0RTlCMTFBMTgxNDU2OTIwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVu
Y3Rpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxp
bmVMYXlvdXRGdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNEU5
QjExQzE4MTQ1NjlDMDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RjlFRUYwMTU2RDg0QzQwMEQyM0U3RSAv
KiBTdHlsZVNoZWV0Q29udGVudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU3R5bGVTaGVldENvbnRlbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTRGOUVFRjExNTZEODRDNDAwRDIzRTdFIC8qIFN0eWxlU2hlZXRDb250ZW50cy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVNoZWV0Q29udGVudHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRGQjRCMzUyMzlCRUIxMDAwM0MzMzZBIC8qIERpc3Bs
YXlJbmxpbmVDb250ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlJbmxpbmVDb250
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5MTE4LDIwICsyOTA5NSw2
IEBACiAJCQkJQThDRkY1REEwQTE1NUEwNTAwMEE0MjM0IC8qIFJvb3RJbmxpbmVCb3guaCAqLywK
IAkJCQk1RDkyNUI2NTBGNjRENEREMDBCODQ3RjAgLyogU2Nyb2xsQWxpZ25tZW50LmNwcCAqLywK
IAkJCQk1RDkyNUI2NjBGNjRENEREMDBCODQ3RjAgLyogU2Nyb2xsQWxpZ25tZW50LmggKi8sCi0J
CQkJRTQ4OTQ0QTAxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuY3BwICovLAot
CQkJCUU0ODk0NEExMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmggKi8sCi0J
CQkJMTFFMDY3RUIxRTYyNDYxMzAwMTYyRDE2IC8qIFNpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5j
cHAgKi8sCi0JCQkJMTFFMDY3RUQxRTYyNDZFNTAwMTYyRDE2IC8qIFNpbXBsZUxpbmVMYXlvdXRD
b3ZlcmFnZS5oICovLAotCQkJCTU4NUQ2RTAxMUExQTc5MkUwMEZBNEYxMiAvKiBTaW1wbGVMaW5l
TGF5b3V0Rmxvd0NvbnRlbnRzLmNwcCAqLywKLQkJCQk1ODVENkUwMjFBMUE3OTJFMDBGQTRGMTIg
LyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oICovLAotCQkJCUU0RTlCMTFBMTgxNDU2
OTIwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcCAqLywKLQkJCQlFNEU5
QjExQzE4MTQ1NjlDMDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oICovLAot
CQkJCTExMkIzNEQwMUU2MEI4QTcwMEJCMzEwQSAvKiBTaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlv
bi5jcHAgKi8sCi0JCQkJMTEyQjM0RDQxRTYwQjk4MzAwQkIzMTBBIC8qIFNpbXBsZUxpbmVMYXlv
dXRQYWdpbmF0aW9uLmggKi8sCi0JCQkJNTg1RDZERkIxQTE1MzU1NjAwRkE0RjEyIC8qIFNpbXBs
ZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAgKi8sCi0JCQkJRTRFOUIxMTgxODEwOTE2RjAwM0FDQ0RG
IC8qIFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oICovLAotCQkJCTU4MkNCMDU0MUE3OEEyQjIw
MEFGRkNDNCAvKiBTaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwICovLAot
CQkJCTU4MkNCMDUyMUE3OEExNEIwMEFGRkNDNCAvKiBTaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdt
ZW50SXRlcmF0b3IuaCAqLywKIAkJCQlFMzFDRDc1MDIyOUY3NDk1MDBGQkRBMTkgLyogVGFibGVM
YXlvdXQuY3BwICovLAogCQkJCUE4Q0ZGMDRDMEExNTRGMDkwMDBBNDIzNCAvKiBUYWJsZUxheW91
dC5oICovLAogCQkJCTBGNTREQ0UzMTg4MTA1MUQwMDNFRURCQiAvKiBUZXh0QXV0b1NpemluZy5j
cHAgKi8sCkBAIC0zMDIxMyw3ICszMDE3Niw2IEBACiAJCQkJRTQ4NEEzM0IyMzA1NTMwMzAwOUFE
RTZBIC8qIExpbmVMYXlvdXRUcmF2ZXJzYWwuaCAqLywKIAkJCQlFNDM0M0QyNDIzOTI3NzhGMDBF
QkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggKi8sCiAJCQkJRTQ1MUM2
MjcyMzkyOTNFQjAwOTkzMTkwIC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxEaXNwbGF5UnVuUGF0aC5o
ICovLAotCQkJCUU0MzQzRDIxMjM5Mjc3ODMwMEVCQkI2NiAvKiBMaW5lTGF5b3V0VHJhdmVyc2Fs
U2ltcGxlUGF0aC5oICovLAogCQkJCUZGREJDMDQ2MTgzRDI3QjcwMDQwNzEwOSAvKiBMaW5lV2lk
dGguY3BwICovLAogCQkJCUZGREJDMDQ1MTgzRDI3QjcwMDQwNzEwOSAvKiBMaW5lV2lkdGguaCAq
LywKIAkJCQlGRkFDMzBGRDE4NEZCMTQ1MDA4QzRGMUUgLyogVHJhaWxpbmdPYmplY3RzLmNwcCAq
LywKQEAgLTMyNzkzLDcgKzMyNzU1LDYgQEAKIAkJCQlFNDg0QTMzRTIzMDU1MzI1MDA5QURFNkEg
LyogTGluZUxheW91dFRyYXZlcnNhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQzNDNEMjUyMzky
Nzc5MDAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTQ1MUM2MjgyMzkyOTNFQzAwOTkzMTkwIC8qIExpbmVMYXlvdXRUcmF2ZXJz
YWxEaXNwbGF5UnVuUGF0aC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQzNDNEMjMyMzkyNzc4NDAw
RUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGRkRCQzA0NzE4M0QyN0I3MDA0MDcxMDkgLyogTGluZVdpZHRoLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDQkE5REMwQjFERjQ0REY0MDAwNTY3NUMgLyogTGlua0hlYWRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTE0M0IyNjMxREREMTUyMDAwMTRGQUM2IC8qIExpbmtJY29uLmggaW4gSGVh
ZGVycyAqLywKQEAgLTMzNzkyLDEzICszMzc1Myw2IEBACiAJCQkJOTMzMDlFQTMwOTlFQjc4QzAw
NTZFNTgxIC8qIFNoYXJlZFRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlERjE5RTJBQzI0Nzcy
QkMxMDA3QkRBQ0IgLyogU2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29va2llQmxvY2tpbmcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTgzNjJFOEMxMjBDRUY5Q0IwMDI0NTg4NiAvKiBTaG91bGRUcmVhdEFz
Q29udGludWluZ0xvYWQuaCBpbiBIZWFkZXJzICovLAotCQkJCUU0ODk0NEEzMTgwQjU3RDgwMEYx
NjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmggaW4gSGVhZGVycyAqLywKLQkJCQkxMUUwNjdFRTFF
NjI0NkU1MDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmggaW4gSGVhZGVycyAq
LywKLQkJCQk1ODVENkUwNDFBMUE3OTJFMDBGQTRGMTIgLyogU2ltcGxlTGluZUxheW91dEZsb3dD
b250ZW50cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTRFOUIxMUQxODE0NTY5QzAwM0FDQ0RGIC8q
IFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAotCQkJCTExMkIzNEQ1
MUU2MEI5ODMwMEJCMzEwQSAvKiBTaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJRTRFOUIxMTkxODEwOTE2RjAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRS
ZXNvbHZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTgyQ0IwNTMxQTc4QTE0QjAwQUZGQ0M0IC8q
IFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTMxNkRERkIyNDBDNjRCNDAwOTM0MEFBIC8qIFNpbXBsZVJhbmdlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDNUExRUE3RDE1MkJDRjA4MDA0RDAwQjYgLyogU2ltcGxpZnlNYXJrdXBDb21tYW5k
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzJBN0YyMTFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxh
dGVkQ2xpY2suaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWExvZ2dlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
TG9nZ2VyLmNwcAppbmRleCA2ODM5YjYzMWYxYTUuLjRmNWM2YjVlYzUwNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWExvZ2dlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWExvZ2dlci5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNs
dWRlICJBWElzb2xhdGVkT2JqZWN0LmgiCiAjZW5kaWYKICNpbmNsdWRlICJBWE9iamVjdENhY2hl
LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaAppbmRleCA3
ZjBmNTk0ZjE2MTIuLjI3YzM5ZDdlOWQzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgorI2luY2x1ZGUgIldpZGdldC5o
IgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4K
IApAQCAtNDAsNiArNDEsMTAgQEAKICNpbmNsdWRlICJDT01QdHIuaCIKICNlbmRpZgogCisjaWYg
VVNFKEFUSykKKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisjZW5kaWYKKwogI2lmIFBM
QVRGT1JNKENPQ09BKQogT0JKQ19DTEFTUyBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcjsK
IHR5cGVkZWYgV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKaW5kZXggYjZh
MjdkZDg3NGIyLi41ZTU4MTRkN2RmNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVy
YXRvci5jcHAKQEAgLTU0LDkgKzU0LDYgQEAKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5o
IgogI2luY2x1ZGUgIlJlbmRlclRleHRGcmFnbWVudC5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3Qu
aCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0LmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxh
eW91dEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oIgog
I2luY2x1ZGUgIlRleHRCb3VuZGFyaWVzLmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVs
ZW1lbnRzLmgiCiAjaW5jbHVkZSAiVGV4dFBsYWNlaG9sZGVyRWxlbWVudC5oIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcAppbmRleCBiNjI5MjkwODNmYWMuLjkzZTA2MWY1ZjNi
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHAKQEAgLTcwLDQ4ICs3MCw2
IEBAIHN0YXRpYyBib29sIGFyZUVzc2VudGlhbGx5RXF1YWwoTGF5b3V0UmVjdCBhLCBMYXlvdXRS
ZWN0IGIpCiAgICAgICAgICYmIGFyZUVzc2VudGlhbGx5RXF1YWwoYS5oZWlnaHQoKSwgYi5oZWln
aHQoKSk7CiB9CiAKLXN0YXRpYyBib29sIG91dHB1dE1pc21hdGNoaW5nU2ltcGxlTGluZUluZm9y
bWF0aW9uSWZOZWVkZWQoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBMYXlvdXRTdGF0ZSYgbGF5
b3V0U3RhdGUsIGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgYmxvY2tGbG93LCBjb25zdCBDb250YWlu
ZXJCb3gmIGlubGluZUZvcm1hdHRpbmdSb290KQotewotICAgIGF1dG8qIGxpbmVMYXlvdXREYXRh
ID0gYmxvY2tGbG93LnNpbXBsZUxpbmVMYXlvdXQoKTsKLSAgICBpZiAoIWxpbmVMYXlvdXREYXRh
KSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBhdXRvJiBpbmxpbmVGb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZS5l
c3RhYmxpc2hlZEZvcm1hdHRpbmdTdGF0ZShpbmxpbmVGb3JtYXR0aW5nUm9vdCk7Ci0gICAgYXV0
byYgbGluZVJ1bnMgPSBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KGlubGluZUZvcm1h
dHRpbmdTdGF0ZSkubGluZVJ1bnMoKTsKLQotICAgIGlmIChsaW5lUnVucy5zaXplKCkgIT0gbGlu
ZUxheW91dERhdGEtPnJ1bkNvdW50KCkpIHsKLSAgICAgICAgc3RyZWFtIDw8ICJNaXNtYXRjaGlu
ZyBudW1iZXIgb2YgcnVuczogc2ltcGxlIHJ1bnMoIiA8PCBsaW5lTGF5b3V0RGF0YS0+cnVuQ291
bnQoKSA8PCAiKSBpbmxpbmUgcnVucygiIDw8IGxpbmVSdW5zLnNpemUoKSA8PCAiKSI7Ci0gICAg
ICAgIHN0cmVhbS5uZXh0TGluZSgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBhdXRvIG1pc21hdGNoZWQgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGluZUxheW91dERhdGEtPnJ1bkNvdW50KCk7ICsraSkgewotICAgICAgICBhdXRvJiBzaW1wbGVS
dW4gPSBsaW5lTGF5b3V0RGF0YS0+cnVuQXQoaSk7Ci0gICAgICAgIGF1dG8mIGxpbmVSdW4gPSBs
aW5lUnVuc1tpXTsKLSAgICAgICAgYXV0byBtYXRjaGluZ1J1bnMgPSBhcmVFc3NlbnRpYWxseUVx
dWFsKHNpbXBsZVJ1bi5sb2dpY2FsTGVmdCwgbGluZVJ1bi5sb2dpY2FsTGVmdCgpKSAmJiBhcmVF
c3NlbnRpYWxseUVxdWFsKHNpbXBsZVJ1bi5sb2dpY2FsUmlnaHQsIGxpbmVSdW4ubG9naWNhbFJp
Z2h0KCkpOwotICAgICAgICBpZiAobWF0Y2hpbmdSdW5zICYmIGxpbmVSdW4udGV4dCgpKSB7Ci0g
ICAgICAgICAgICBtYXRjaGluZ1J1bnMgPSBzaW1wbGVSdW4uc3RhcnQgPT0gbGluZVJ1bi50ZXh0
KCktPnN0YXJ0KCkgJiYgc2ltcGxlUnVuLmVuZCA9PSBsaW5lUnVuLnRleHQoKS0+ZW5kKCk7Ci0g
ICAgICAgICAgICAvLyBTTEwgaGFuZGxlcyBzdHJpbmdzIGluIGEgbW9yZSBjb25jYXRlbmF0ZWQg
Zm9ybWF0IDxkaXY+Zm9vPGJyPmJhcjwvZGl2PiAtPiBmb28gLT4gMCwzIGJhciAtPiAzLDYgdnMu
IDAsMyBhbmQgMCwzCi0gICAgICAgICAgICBpZiAoIW1hdGNoaW5nUnVucykKLSAgICAgICAgICAg
ICAgICBtYXRjaGluZ1J1bnMgPSAoc2ltcGxlUnVuLmVuZCAtIHNpbXBsZVJ1bi5zdGFydCkgPT0g
KGxpbmVSdW4udGV4dCgpLT5lbmQoKSAtIGxpbmVSdW4udGV4dCgpLT5zdGFydCgpKTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAobWF0Y2hpbmdSdW5zKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgc3RyZWFtIDw8ICJNaXNtYXRjaGluZzogc2ltcGxlIHJ1bigiIDw8IHNpbXBsZVJ1
bi5zdGFydCA8PCAiLCAiIDw8IHNpbXBsZVJ1bi5lbmQgPDwgIikgKCIgPDwgc2ltcGxlUnVuLmxv
Z2ljYWxMZWZ0IDw8ICIsICIgPDwgc2ltcGxlUnVuLmxvZ2ljYWxSaWdodCA8PCAiKSI7Ci0gICAg
ICAgIHN0cmVhbSA8PCAiIGlubGluZSBydW4iOwotICAgICAgICBpZiAobGluZVJ1bi50ZXh0KCkp
Ci0gICAgICAgICAgICBzdHJlYW0gPDwgIiAoIiA8PCBsaW5lUnVuLnRleHQoKS0+c3RhcnQoKSA8
PCAiLCAiIDw8IGxpbmVSdW4udGV4dCgpLT5lbmQoKSA8PCAiKSI7Ci0gICAgICAgIHN0cmVhbSA8
PCAiICgiIDw8IGxpbmVSdW4ubG9naWNhbExlZnQoKSA8PCAiLCAiIDw8IGxpbmVSdW4ubG9naWNh
bFRvcCgpIDw8ICIpICgiIDw8IGxpbmVSdW4ubG9naWNhbFdpZHRoKCkgPDwgIngiIDw8IGxpbmVS
dW4ubG9naWNhbEhlaWdodCgpIDw8ICIpIjsKLSAgICAgICAgc3RyZWFtLm5leHRMaW5lKCk7Ci0g
ICAgICAgIG1pc21hdGNoZWQgPSB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gbWlzbWF0Y2hlZDsK
LX0KLQogc3RhdGljIGJvb2wgY2hlY2tGb3JNYXRjaGluZ05vblRleHRSdW5zKGNvbnN0IExpbmVS
dW4mIGxpbmVSdW4sIGNvbnN0IFdlYkNvcmU6OklubGluZUJveCYgaW5saW5lQm94KQogewogICAg
IHJldHVybiBhcmVFc3NlbnRpYWxseUVxdWFsKGlubGluZUJveC5sZWZ0KCksIGxpbmVSdW4ubG9n
aWNhbExlZnQoKSkKQEAgLTM1OSw3ICszMTcsNyBAQCBzdGF0aWMgYm9vbCB2ZXJpZnlBbmRPdXRw
dXRTdWJ0cmVlKFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgTGF5b3V0U3RhdGUmIGNvbnRleAog
CiAgICAgICAgICAgICBhdXRvJiBibG9ja0Zsb3cgPSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+
KCpjaGlsZFJlbmRlcmVyKTsKICAgICAgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdSb290ID0gZG93
bmNhc3Q8Q29udGFpbmVyQm94PigqY2hpbGRMYXlvdXRCb3gpOwotICAgICAgICAgICAgbWlzbXRh
Y2hpbmdHZW9tZXRyeSB8PSBibG9ja0Zsb3cubGluZUxheW91dFBhdGgoKSA9PSBSZW5kZXJCbG9j
a0Zsb3c6OlNpbXBsZUxpbmVzUGF0aCA/IG91dHB1dE1pc21hdGNoaW5nU2ltcGxlTGluZUluZm9y
bWF0aW9uSWZOZWVkZWQoc3RyZWFtLCBjb250ZXh0LCBibG9ja0Zsb3csIGZvcm1hdHRpbmdSb290
KSA6IG91dHB1dE1pc21hdGNoaW5nQ29tcGxleExpbmVJbmZvcm1hdGlvbklmTmVlZGVkKHN0cmVh
bSwgY29udGV4dCwgYmxvY2tGbG93LCBmb3JtYXR0aW5nUm9vdCk7CisgICAgICAgICAgICBtaXNt
dGFjaGluZ0dlb21ldHJ5IHw9IG91dHB1dE1pc21hdGNoaW5nQ29tcGxleExpbmVJbmZvcm1hdGlv
bklmTmVlZGVkKHN0cmVhbSwgY29udGV4dCwgYmxvY2tGbG93LCBmb3JtYXR0aW5nUm9vdCk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBhdXRvIG1pc21hdGNoaW5nU3VidHJlZUdlb21l
dHJ5ID0gdmVyaWZ5QW5kT3V0cHV0U3VidHJlZShzdHJlYW0sIGNvbnRleHQsIGRvd25jYXN0PFJl
bmRlckJveD4oKmNoaWxkUmVuZGVyZXIpLCAqY2hpbGRMYXlvdXRCb3gpOwogICAgICAgICAgICAg
bWlzbXRhY2hpbmdHZW9tZXRyeSB8PSBtaXNtYXRjaGluZ1N1YnRyZWVHZW9tZXRyeTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlv
bkxpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91
dEludGVncmF0aW9uTGluZUxheW91dC5jcHAKaW5kZXggZjI5OTg3ZDI0MzU1Li42YzZkMDZkZTE3
M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJ
bnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRl
Z3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwCkBAIC00OCw3ICs0OCw2IEBA
CiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXQu
aCIKICNpbmNsdWRlICJUZXh0RGVjb3JhdGlvblBhaW50ZXIuaCIKICNpbmNsdWRlICJUZXh0UGFp
bnRlci5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24v
TGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uY3BwCmluZGV4IDg2MmI0OGM4
YTk1Ny4uOGZjYjRlYTk0Y2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50
ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcApA
QCAtMzAsOCArMzAsNiBAQAogCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJS
ZW5kZXJCbG9ja0Zsb3cuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0LmgiCi0jaW5jbHVk
ZSAiU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBu
YW1lc3BhY2UgTGF5b3V0SW50ZWdyYXRpb24gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0NvbXBsZXhMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9Db21wbGV4TGluZUxheW91dC5jcHAKaW5kZXggZTVjYzk5MjZhNmRhLi5lN2QxZTM0ZTgwZjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbXBsZXhMaW5lTGF5b3V0LmNwcApA
QCAtMTY5Nyw4ICsxNjk3LDYgQEAgdm9pZCBDb21wbGV4TGluZUxheW91dDo6bGlua1RvRW5kTGlu
ZUlmTmVlZGVkKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUpCiAKIHZvaWQgQ29tcGxleExp
bmVMYXlvdXQ6OmxheW91dExpbmVCb3hlcyhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVu
aXQmIHJlcGFpbnRMb2dpY2FsVG9wLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbEJvdHRvbSkK
IHsKLSAgICBBU1NFUlQoIW1fZmxvdy5zaW1wbGVMaW5lTGF5b3V0KCkpOwotCiAgICAgbV9mbG93
LnNldExvZ2ljYWxIZWlnaHQobV9mbG93LmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKSk7CiAgICAg
CiAgICAgLy8gTGF5IG91dCBvdXIgaHlwb3RoZXRpY2FsIGdyaWQgbGluZSBhcyB0aG91Z2ggaXQg
b2NjdXJzIGF0IHRoZSB0b3Agb2YgdGhlIGJsb2NrLgpAQCAtMjEyOCw4ICsyMTI2LDYgQEAgYm9v
bCBDb21wbGV4TGluZUxheW91dDo6bWF0Y2hlZEVuZExpbmUoTGluZUxheW91dFN0YXRlJiBsYXlv
dXRTdGF0ZSwgY29uc3QgSW5saW4KIAogdm9pZCBDb21wbGV4TGluZUxheW91dDo6YWRkT3ZlcmZs
b3dGcm9tSW5saW5lQ2hpbGRyZW4oKQogewotICAgIEFTU0VSVCghbV9mbG93LnNpbXBsZUxpbmVM
YXlvdXQoKSk7Ci0KICAgICBMYXlvdXRVbml0IGVuZFBhZGRpbmcgPSBtX2Zsb3cuaGFzT3ZlcmZs
b3dDbGlwKCkgPyBtX2Zsb3cucGFkZGluZ0VuZCgpIDogMF9sdTsKICAgICAvLyBGSVhNRTogTmVl
ZCB0byBmaW5kIGFub3RoZXIgd2F5IHRvIGRvIHRoaXMsIHNpbmNlIHNjcm9sbGJhcnMgY291bGQg
c2hvdyB3aGVuIHdlIGRvbid0IHdhbnQgdGhlbSB0by4KICAgICBpZiAoIWVuZFBhZGRpbmcpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4IGI0MzA3
ZDc5NWM3MS4uZWIxMGFlYWI4ODVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tGbG93LmNwcApAQCAtNTQsOSArNTQsNiBAQAogI2luY2x1ZGUgIlJlbmRlclRyZWVC
dWlsZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgi
Ci0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIlNpbXBs
ZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dFJlc29s
dmVyLmgiCiAjaW5jbHVkZSAiVGV4dEF1dG9TaXppbmcuaCIKICNpbmNsdWRlICJWZXJ0aWNhbFBv
c2l0aW9uQ2FjaGUuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKQEAgLTY2OSwyNiAr
NjY2LDE2IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxkcmVuKGJvb2wg
cmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgbWF4CiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6
bGF5b3V0SW5saW5lQ2hpbGRyZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiBy
ZXBhaW50TG9naWNhbFRvcCwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxCb3R0b20pCiB7CiAg
ICAgYXV0byBjb21wdXRlTGluZUxheW91dFBhdGggPSBbJl0gewotICAgICAgICBib29sIGlzSW50
ZWdyYXRpb25FbmFibGVkID0gZmFsc2U7CiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NP
TlRFWFQpCiAgICAgICAgIGlmIChMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Y2FuVXNl
Rm9yKCp0aGlzKSkKICAgICAgICAgICAgIHJldHVybiBMYXlvdXRGb3JtYXR0aW5nQ29udGV4dFBh
dGg7Ci0gICAgICAgIGlzSW50ZWdyYXRpb25FbmFibGVkID0gTGF5b3V0SW50ZWdyYXRpb246Okxp
bmVMYXlvdXQ6OmlzRW5hYmxlZCgpOwogI2VuZGlmCi0gICAgICAgIGlmICghaXNJbnRlZ3JhdGlv
bkVuYWJsZWQgJiYgU2ltcGxlTGluZUxheW91dDo6Y2FuVXNlRm9yKCp0aGlzKSkKLSAgICAgICAg
ICAgIHJldHVybiBTaW1wbGVMaW5lc1BhdGg7Ci0KICAgICAgICAgcmV0dXJuIExpbmVCb3hlc1Bh
dGg7CiAgICAgfTsKIAogICAgIGlmIChsaW5lTGF5b3V0UGF0aCgpID09IFVuZGV0ZXJtaW5lZFBh
dGgpCiAgICAgICAgIHNldExpbmVMYXlvdXRQYXRoKGNvbXB1dGVMaW5lTGF5b3V0UGF0aCgpKTsK
IAotICAgIGlmIChsaW5lTGF5b3V0UGF0aCgpID09IFNpbXBsZUxpbmVzUGF0aCkgewotICAgICAg
ICBsYXlvdXRTaW1wbGVMaW5lcyhyZWxheW91dENoaWxkcmVuLCByZXBhaW50TG9naWNhbFRvcCwg
cmVwYWludExvZ2ljYWxCb3R0b20pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAjaWYgRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAgICAgaWYgKGxpbmVMYXlvdXRQYXRoKCkg
PT0gTGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRQYXRoKSB7CiAgICAgICAgIGxheW91dExGQ0xpbmVz
KHJlbGF5b3V0Q2hpbGRyZW4sIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbEJvdHRv
bSk7CkBAIC0yMTA4LDggKzIwOTUsNiBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6c3R5bGVEaWRD
aGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbAogICAgICAg
ICBhdXRvIHNob3VsZEludmFsaWRhdGVMaW5lTGF5b3V0UGF0aCA9IFsmXSB7CiAgICAgICAgICAg
ICBpZiAoc2VsZk5lZWRzTGF5b3V0KCkgfHwgY29tcGxleExpbmVMYXlvdXQoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChzaW1wbGVMaW5lTGF5b3V0KCkg
JiYgIVNpbXBsZUxpbmVMYXlvdXQ6OmNhblVzZUZvckFmdGVyU3R5bGVDaGFuZ2UoKnRoaXMsIGRp
ZmYpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogI2lmIEVOQUJMRShMQVlPVVRfRk9S
TUFUVElOR19DT05URVhUKQogICAgICAgICAgICAgaWYgKGxheW91dEZvcm1hdHRpbmdDb250ZXh0
TGluZUxheW91dCgpICYmICFMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Y2FuVXNlRm9y
QWZ0ZXJTdHlsZUNoYW5nZSgqdGhpcywgZGlmZikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC0yOTg5LDkgKzI5NzQsNiBAQCBib29sIFJlbmRlckJsb2NrRmxvdzo6aGl0VGVzdElu
bGluZUNoaWxkcmVuKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZQogewogICAg
IEFTU0VSVChjaGlsZHJlbklubGluZSgpKTsKIAotICAgIGlmIChzaW1wbGVMaW5lTGF5b3V0KCkp
Ci0gICAgICAgIHJldHVybiBTaW1wbGVMaW5lTGF5b3V0OjpoaXRUZXN0RmxvdygqdGhpcywgKnNp
bXBsZUxpbmVMYXlvdXQoKSwgcmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBh
Y2N1bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFjdGlvbik7Ci0KICNpZiBFTkFCTEUoTEFZT1VUX0ZP
Uk1BVFRJTkdfQ09OVEVYVCkKICAgICBpZiAobGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5
b3V0KCkpCiAgICAgICAgIHJldHVybiBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQo
KS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIGFjY3VtdWxh
dGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKTsKQEAgLTMwMDIsMTIgKzI5ODQsNiBAQCBib29sIFJl
bmRlckJsb2NrRmxvdzo6aGl0VGVzdElubGluZUNoaWxkcmVuKGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZQogCiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6YWRkT3ZlcmZsb3dGcm9t
SW5saW5lQ2hpbGRyZW4oKQogewotICAgIGlmIChhdXRvIHNpbXBsZUxpbmVMYXlvdXQgPSB0aGlz
LT5zaW1wbGVMaW5lTGF5b3V0KCkpIHsKLSAgICAgICAgQVNTRVJUKCFoYXNPdmVyZmxvd0NsaXAo
KSk7Ci0gICAgICAgIFNpbXBsZUxpbmVMYXlvdXQ6OmNvbGxlY3RGbG93T3ZlcmZsb3coKnRoaXMs
ICpzaW1wbGVMaW5lTGF5b3V0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogI2lmIEVOQUJM
RShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogICAgIGlmIChsYXlvdXRGb3JtYXR0aW5nQ29u
dGV4dExpbmVMYXlvdXQoKSkgewogICAgICAgICBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVM
YXlvdXQoKS0+Y29sbGVjdE92ZXJmbG93KCp0aGlzKTsKQEAgLTMwOTcsMTEgKzMwNzMsNiBAQCB2
b2lkIFJlbmRlckJsb2NrRmxvdzo6bWFya0xpbmVzRGlydHlJbkJsb2NrUmFuZ2UoTGF5b3V0VW5p
dCBsb2dpY2FsVG9wLCBMYXlvdXRVbgogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGbG9hdHMg
Y3VycmVudGx5IGFmZmVjdCB0aGUgY2hvaWNlIG9mIGxheW91dCBwYXRoLgotICAgIGlmIChzaW1w
bGVMaW5lTGF5b3V0KCkpIHsKLSAgICAgICAgaW52YWxpZGF0ZUxpbmVMYXlvdXRQYXRoKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09O
VEVYVCkKICAgICBpZiAobGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCkpIHsKICAg
ICAgICAgaW52YWxpZGF0ZUxpbmVMYXlvdXRQYXRoKCk7CkBAIC0zMTM4LDkgKzMxMDksNiBAQCBP
cHRpb25hbDxpbnQ+IFJlbmRlckJsb2NrRmxvdzo6Zmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdAog
ICAgICAgICByZXR1cm4gZmxvb3JUb0ludChsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlv
dXQoKS0+Zmlyc3RMaW5lQmFzZWxpbmUoKSk7CiAjZW5kaWYKIAotICAgIGlmIChzaW1wbGVMaW5l
TGF5b3V0KCkpCi0gICAgICAgIHJldHVybiB7IFNpbXBsZUxpbmVMYXlvdXQ6OmNvbXB1dGVGbG93
Rmlyc3RMaW5lQmFzZWxpbmUoKnRoaXMsICpzaW1wbGVMaW5lTGF5b3V0KCkpIH07Ci0KICAgICBB
U1NFUlQoZmlyc3RSb290Qm94KCkpOwogICAgIGlmIChzdHlsZSgpLmlzRmxpcHBlZExpbmVzV3Jp
dGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIGZpcnN0Um9vdEJveCgpLT5sb2dpY2FsVG9wKCkg
KyBmaXJzdExpbmVTdHlsZSgpLmZvbnRNZXRyaWNzKCkuZGVzY2VudChmaXJzdFJvb3RCb3goKS0+
YmFzZWxpbmVUeXBlKCkpOwpAQCAtMzE1NCw3ICszMTIyLDcgQEAgT3B0aW9uYWw8aW50PiBSZW5k
ZXJCbG9ja0Zsb3c6OmlubGluZUJsb2NrQmFzZWxpbmUoTGluZURpcmVjdGlvbk1vZGUgbGluZURp
cmVjdGkKIAogICAgIC8vIE5vdGUgdGhhdCBoZXJlIHdlIG9ubHkgdGFrZSB0aGUgbGVmdCBhbmQg
Ym90dG9tIGludG8gY29uc2lkZXJhdGlvbi4gT3VyIGNhbGxlciB0YWtlcyB0aGUgcmlnaHQgYW5k
IHRvcCBpbnRvIGNvbnNpZGVyYXRpb24uCiAgICAgZmxvYXQgYm94SGVpZ2h0ID0gbGluZURpcmVj
dGlvbiA9PSBIb3Jpem9udGFsTGluZSA/IGhlaWdodCgpICsgbV9tYXJnaW5Cb3guYm90dG9tKCkg
OiB3aWR0aCgpICsgbV9tYXJnaW5Cb3gubGVmdCgpOwotICAgIGZsb2F0IGxhc3RCYXNlbGluZTsK
KyAgICBmbG9hdCBsYXN0QmFzZWxpbmUgPSAwOwogICAgIGlmICghY2hpbGRyZW5JbmxpbmUoKSkg
ewogICAgICAgICBPcHRpb25hbDxpbnQ+IGlubGluZUJsb2NrQmFzZWxpbmUgPSBSZW5kZXJCbG9j
azo6aW5saW5lQmxvY2tCYXNlbGluZShsaW5lRGlyZWN0aW9uKTsKICAgICAgICAgaWYgKCFpbmxp
bmVCbG9ja0Jhc2VsaW5lKQpAQCAtMzE3MCwxOSArMzEzOCwxNyBAQCBPcHRpb25hbDxpbnQ+IFJl
bmRlckJsb2NrRmxvdzo6aW5saW5lQmxvY2tCYXNlbGluZShMaW5lRGlyZWN0aW9uTW9kZSBsaW5l
RGlyZWN0aQogICAgICAgICAgICAgICAgICsgKGxpbmVEaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExp
bmUgPyBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSA6IGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5n
UmlnaHQoKSkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHNpbXBsZUxpbmVMYXlvdXQoKSkK
LSAgICAgICAgICAgIGxhc3RCYXNlbGluZSA9IFNpbXBsZUxpbmVMYXlvdXQ6OmNvbXB1dGVGbG93
TGFzdExpbmVCYXNlbGluZSgqdGhpcywgKnNpbXBsZUxpbmVMYXlvdXQoKSk7Ci0jaWYgRU5BQkxF
KExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0gICAgICAgIGVsc2UgaWYgKGxheW91dEZvcm1h
dHRpbmdDb250ZXh0TGluZUxheW91dCgpKQotICAgICAgICAgICAgbGFzdEJhc2VsaW5lID0gZmxv
b3JUb0ludChsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKS0+bGFzdExpbmVCYXNl
bGluZSgpKTsKLSNlbmRpZgotICAgICAgICBlbHNlIHsKKyAgICAgICAgaWYgKGNvbXBsZXhMaW5l
TGF5b3V0KCkpIHsKICAgICAgICAgICAgIGJvb2wgaXNGaXJzdExpbmUgPSBsYXN0Um9vdEJveCgp
ID09IGZpcnN0Um9vdEJveCgpOwogICAgICAgICAgICAgY29uc3QgYXV0byYgc3R5bGUgPSBpc0Zp
cnN0TGluZSA/IGZpcnN0TGluZVN0eWxlKCkgOiB0aGlzLT5zdHlsZSgpOwogICAgICAgICAgICAg
Ly8gSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0luQmxvY2tEaXJlY3Rpb24gd2lsbCBmbGlwIGxp
bmVzIGluIGNhc2Ugb2YgdmVydGljYWxMUiBtb2RlLCBzbyB3ZSBjYW4gYXNzdW1lIHZlcnRpY2Fs
UkwgZm9yIG5vdy4KICAgICAgICAgICAgIGxhc3RCYXNlbGluZSA9IHN0eWxlLmZvbnRNZXRyaWNz
KCkuYXNjZW50KGxhc3RSb290Qm94KCktPmJhc2VsaW5lVHlwZSgpKQogICAgICAgICAgICAgICAg
ICsgKHN0eWxlLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/IGxvZ2ljYWxIZWlnaHQoKSAt
IGxhc3RSb290Qm94KCktPmxvZ2ljYWxCb3R0b20oKSA6IGxhc3RSb290Qm94KCktPmxvZ2ljYWxU
b3AoKSk7CiAgICAgICAgIH0KKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkK
KyAgICAgICAgZWxzZSBpZiAobGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCkpCisg
ICAgICAgICAgICBsYXN0QmFzZWxpbmUgPSBmbG9vclRvSW50KGxheW91dEZvcm1hdHRpbmdDb250
ZXh0TGluZUxheW91dCgpLT5sYXN0TGluZUJhc2VsaW5lKCkpOworI2VuZGlmCiAgICAgfQogICAg
IC8vIEFjY29yZGluZyB0byB0aGUgQ1NTIHNwZWMgaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEv
dmlzdWRldC5odG1sLCB3ZSBzaG91bGRuJ3QgYmUgcGVyZm9ybWluZyB0aGlzIG1pbiwgYnV0IHNo
b3VsZAogICAgIC8vIGluc3RlYWQgYmUgcmV0dXJuaW5nIGJveEhlaWdodCBkaXJlY3RseS4gSG93
ZXZlciwgd2UgZmVlbCB0aGF0IGEgbWluIGhlcmUgaXMgYmV0dGVyIGJlaGF2aW9yIChhbmQgaXMg
Y29uc2lzdGVudApAQCAtMzIwMCw4ICszMTY2LDYgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnNl
dFNlbGVjdGlvblN0YXRlKEhpZ2hsaWdodFN0YXRlIHN0YXRlKQogR2FwUmVjdHMgUmVuZGVyQmxv
Y2tGbG93OjppbmxpbmVTZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0
IExheW91dFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRTaXpl
JiBvZmZzZXRGcm9tUm9vdEJsb2NrLAogICAgIExheW91dFVuaXQmIGxhc3RMb2dpY2FsVG9wLCBM
YXlvdXRVbml0JiBsYXN0TG9naWNhbExlZnQsIExheW91dFVuaXQmIGxhc3RMb2dpY2FsUmlnaHQs
IGNvbnN0IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMmIGNhY2hlLCBjb25zdCBQYWludElu
Zm8qIHBhaW50SW5mbykKIHsKLSAgICBBU1NFUlQoIXNpbXBsZUxpbmVMYXlvdXQoKSk7Ci0KICAg
ICBHYXBSZWN0cyByZXN1bHQ7CiAKICAgICBib29sIGNvbnRhaW5zU3RhcnQgPSBzZWxlY3Rpb25T
dGF0ZSgpID09IEhpZ2hsaWdodFN0YXRlOjpTdGFydCB8fCBzZWxlY3Rpb25TdGF0ZSgpID09IEhp
Z2hsaWdodFN0YXRlOjpCb3RoOwpAQCAtMzMxNyw5ICszMjgxLDYgQEAgaW50IFJlbmRlckJsb2Nr
Rmxvdzo6bGluZUNvdW50KCkgY29uc3QKICAgICAgICAgaWYgKGxheW91dEZvcm1hdHRpbmdDb250
ZXh0TGluZUxheW91dCgpKQogICAgICAgICAgICAgcmV0dXJuIGxheW91dEZvcm1hdHRpbmdDb250
ZXh0TGluZUxheW91dCgpLT5saW5lQ291bnQoKTsKICNlbmRpZgotICAgICAgICBpZiAoc2ltcGxl
TGluZUxheW91dCgpKQotICAgICAgICAgICAgcmV0dXJuIHNpbXBsZUxpbmVMYXlvdXQoKS0+bGlu
ZUNvdW50KCk7Ci0KICAgICAgICAgaWYgKGNvbXBsZXhMaW5lTGF5b3V0KCkpCiAgICAgICAgICAg
ICByZXR1cm4gY29tcGxleExpbmVMYXlvdXQoKS0+bGluZUNvdW50KCk7CiAKQEAgLTM1NzUsMTAg
KzM1MzYsOCBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlvbkZvclBv
aW50V2l0aElubGluZUNoaWxkcmVuKGNvbnN0IExheW91dAogCiBQb3NpdGlvbiBSZW5kZXJCbG9j
a0Zsb3c6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQogewotICAg
IC8vIEZJWE1FOiBJdCBzdXBwb3J0cyBzaW5nbGUgdGV4dCBjaGlsZCBvbmx5ICh3aGljaCBpcyB0
aGUgbWFqb3JpdHkgb2Ygc2ltcGxlIGxpbmUgbGF5b3V0IHN1cHBvcnRlZCBjb250ZW50IGF0IHRo
aXMgcG9pbnQpLgotICAgIGlmICghc2ltcGxlTGluZUxheW91dCgpIHx8IGZpcnN0Q2hpbGQoKSAh
PSBsYXN0Q2hpbGQoKSB8fCAhaXM8UmVuZGVyVGV4dD4oZmlyc3RDaGlsZCgpKSkKLSAgICAgICAg
cmV0dXJuIHBvc2l0aW9uRm9yUG9pbnQocG9pbnQsIG51bGxwdHIpLmRlZXBFcXVpdmFsZW50KCk7
Ci0gICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRleHQ+KCpmaXJzdENoaWxkKCkpLnBvc2l0aW9u
Rm9yUG9pbnQocG9pbnQpOworICAgIC8vIEZJWE1FOiBUaGlzIGZvcmNlcyBDb21wbGV4IExpbmUg
TGF5b3V0LgorICAgIHJldHVybiBwb3NpdGlvbkZvclBvaW50KHBvaW50LCBudWxscHRyKS5kZWVw
RXF1aXZhbGVudCgpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQmxvY2tGbG93Ojpwb3Np
dGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVuZGVyRnJhZ21l
bnRDb250YWluZXIqKQpAQCAtMzYwOSwxMSArMzU2OCw2IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93
OjpwYWludElubGluZUNoaWxkcmVuKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQ
b2luCiAgICAgfQogI2VuZGlmCiAKLSAgICBpZiAoYXV0byBzaW1wbGVMaW5lTGF5b3V0ID0gdGhp
cy0+c2ltcGxlTGluZUxheW91dCgpKSB7Ci0gICAgICAgIFNpbXBsZUxpbmVMYXlvdXQ6OnBhaW50
RmxvdygqdGhpcywgKnNpbXBsZUxpbmVMYXlvdXQsIHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKGNvbXBsZXhMaW5lTGF5b3V0KCkpCiAg
ICAgICAgIGNvbXBsZXhMaW5lTGF5b3V0KCktPmxpbmVCb3hlcygpLnBhaW50KHRoaXMsIHBhaW50
SW5mbywgcGFpbnRPZmZzZXQpOwogfQpAQCAtMzY3MSw4ICszNjI1LDYgQEAgYm9vbCBSZW5kZXJC
bG9ja0Zsb3c6Omhhc0xpbmVzKCkgY29uc3QKICAgICBpZiAobGF5b3V0Rm9ybWF0dGluZ0NvbnRl
eHRMaW5lTGF5b3V0KCkpCiAgICAgICAgIHJldHVybiBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExp
bmVMYXlvdXQoKS0+bGluZUNvdW50KCk7CiAjZW5kaWYKLSAgICBpZiAoc2ltcGxlTGluZUxheW91
dCgpKQotICAgICAgICByZXR1cm4gc2ltcGxlTGluZUxheW91dCgpLT5saW5lQ291bnQoKTsKIAog
ICAgIHJldHVybiBjb21wbGV4TGluZUxheW91dCgpICYmIGNvbXBsZXhMaW5lTGF5b3V0KCktPmxp
bmVCb3hlcygpLmZpcnN0TGluZUJveCgpOwogfQpAQCAtMzY4MiwxNSArMzYzNCwxMSBAQCB2b2lk
IFJlbmRlckJsb2NrRmxvdzo6aW52YWxpZGF0ZUxpbmVMYXlvdXRQYXRoKCkKICAgICBzd2l0Y2gg
KGxpbmVMYXlvdXRQYXRoKCkpIHsKICAgICBjYXNlIFVuZGV0ZXJtaW5lZFBhdGg6CiAgICAgY2Fz
ZSBGb3JjZUxpbmVCb3hlc1BhdGg6Ci0gICAgICAgIEFTU0VSVCghc2ltcGxlTGluZUxheW91dCgp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgTGluZUJveGVzUGF0aDoKLSAgICAgICAgQVNT
RVJUKCFzaW1wbGVMaW5lTGF5b3V0KCkpOwogICAgICAgICBzZXRMaW5lTGF5b3V0UGF0aChVbmRl
dGVybWluZWRQYXRoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgTGF5b3V0Rm9ybWF0dGlu
Z0NvbnRleHRQYXRoOiAvLyBGSVhNRTogTm90IGFsbCBjbGllbnRzIG9mIGludmFsaWRhdGVMaW5l
TGF5b3V0UGF0aCgpIGFjdHVhbGx5IG5lZWQgdG8gd2lwZSB0aGUgbGF5b3V0LgotICAgIGNhc2Ug
U2ltcGxlTGluZXNQYXRoOgotICAgICAgICAvLyBUaGUgc2ltcGxlIGxpbmUgbGF5b3V0IG1heSBo
YXZlIGJlY29tZSBpbnZhbGlkLgogICAgICAgICBtX2xpbmVMYXlvdXQgPSBXVEY6Ok1vbm9zdGF0
ZSgpOwogICAgICAgICBzZXRMaW5lTGF5b3V0UGF0aChVbmRldGVybWluZWRQYXRoKTsKICAgICAg
ICAgaWYgKG5lZWRzTGF5b3V0KCkpCkBAIC0zNzAyLDMyICszNjUwLDYgQEAgdm9pZCBSZW5kZXJC
bG9ja0Zsb3c6OmludmFsaWRhdGVMaW5lTGF5b3V0UGF0aCgpCiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRTaW1wbGVMaW5lcyhib29s
IHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsVG9wLCBMYXlvdXRV
bml0JiByZXBhaW50TG9naWNhbEJvdHRvbSkKLXsKLSAgICBib29sIG5lZWRzTGF5b3V0ID0gc2Vs
Zk5lZWRzTGF5b3V0KCkgfHwgcmVsYXlvdXRDaGlsZHJlbiB8fCAhc2ltcGxlTGluZUxheW91dCgp
OwotICAgIGlmIChuZWVkc0xheW91dCkKLSAgICAgICAgbV9saW5lTGF5b3V0ID0gU2ltcGxlTGlu
ZUxheW91dDo6Y3JlYXRlKCp0aGlzKTsKLQotICAgIGF1dG8mIHNpbXBsZUxpbmVMYXlvdXQgPSAq
dGhpcy0+c2ltcGxlTGluZUxheW91dCgpOwotCi0gICAgaWYgKHZpZXcoKS5mcmFtZVZpZXcoKS5s
YXlvdXRDb250ZXh0KCkubGF5b3V0U3RhdGUoKSAmJiB2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0
Q29udGV4dCgpLmxheW91dFN0YXRlKCktPmlzUGFnaW5hdGVkKCkpIHsKLSAgICAgICAgc2ltcGxl
TGluZUxheW91dC5zZXRJc1BhZ2luYXRlZCgpOwotICAgICAgICBTaW1wbGVMaW5lTGF5b3V0Ojph
ZGp1c3RMaW5lUG9zaXRpb25zRm9yUGFnaW5hdGlvbihzaW1wbGVMaW5lTGF5b3V0LCAqdGhpcyk7
Ci0gICAgfQotCi0gICAgZm9yIChhdXRvJiByZW5kZXJlciA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRl
ck9iamVjdD4oKnRoaXMpKSB7Ci0gICAgICAgIGlmIChpczxSZW5kZXJUZXh0PihyZW5kZXJlcikp
Ci0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJUZXh0PihyZW5kZXJlcikuZGVsZXRlTGluZUJv
eGVzKCk7Ci0gICAgICAgIHJlbmRlcmVyLmNsZWFyTmVlZHNMYXlvdXQoKTsKLSAgICB9Ci0KLSAg
ICBMYXlvdXRVbml0IGxpbmVMYXlvdXRIZWlnaHQgPSBTaW1wbGVMaW5lTGF5b3V0Ojpjb21wdXRl
Rmxvd0hlaWdodCgqdGhpcywgc2ltcGxlTGluZUxheW91dCk7Ci0gICAgTGF5b3V0VW5pdCBsaW5l
TGF5b3V0VG9wID0gYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpOwotICAgIHJlcGFpbnRMb2dpY2Fs
VG9wID0gbGluZUxheW91dFRvcDsKLSAgICByZXBhaW50TG9naWNhbEJvdHRvbSA9IG5lZWRzTGF5
b3V0ID8gcmVwYWludExvZ2ljYWxUb3AgKyBsaW5lTGF5b3V0SGVpZ2h0ICsgYm9yZGVyQW5kUGFk
ZGluZ0FmdGVyKCkgOiByZXBhaW50TG9naWNhbFRvcDsKLSAgICBzZXRMb2dpY2FsSGVpZ2h0KGxp
bmVMYXlvdXRUb3AgKyBsaW5lTGF5b3V0SGVpZ2h0ICsgYm9yZGVyQW5kUGFkZGluZ0FmdGVyKCkp
OwotfQotCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiB2b2lkIFJlbmRl
ckJsb2NrRmxvdzo6bGF5b3V0TEZDTGluZXMoYm9vbCwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2lj
YWxUb3AsIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsQm90dG9tKQogewpAQCAtMzc2OCwxMSAr
MzY5MCw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjplbnN1cmVMaW5lQm94ZXMoKQogICAgIGlm
IChjb21wbGV4TGluZUxheW91dCgpIHx8ICFoYXNMaW5lTGF5b3V0KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gc2ltcGxlTGluZUxheW91dCA9IG1ha2VSZWZQdHIodGhpcy0+c2ltcGxl
TGluZUxheW91dCgpKTsKLQogICAgIGJvb2wgbmVlZHNUb1BhZ2luYXRlQ29tcGxleExpbmVzID0g
WyZdIHsKLSAgICAgICAgaWYgKHNpbXBsZUxpbmVMYXlvdXQgJiYgc2ltcGxlTGluZUxheW91dC0+
aXNQYWdpbmF0ZWQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwogI2lmIEVOQUJMRShMQVlP
VVRfRk9STUFUVElOR19DT05URVhUKQogICAgICAgICBpZiAobGF5b3V0Rm9ybWF0dGluZ0NvbnRl
eHRMaW5lTGF5b3V0KCkgJiYgbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCktPmlz
UGFnaW5hdGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM3ODIsMTMgKzM3MDAs
NiBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6ZW5zdXJlTGluZUJveGVzKCkKIAogICAgIG1fbGlu
ZUxheW91dCA9IG1ha2VVbmlxdWU8Q29tcGxleExpbmVMYXlvdXQ+KCp0aGlzKTsKIAotICAgIGlm
IChzaW1wbGVMaW5lTGF5b3V0KSB7Ci0gICAgICAgIGlmIChTaW1wbGVMaW5lTGF5b3V0OjpjYW5V
c2VGb3JMaW5lQm94VHJlZSgqdGhpcywgKnNpbXBsZUxpbmVMYXlvdXQpKSB7Ci0gICAgICAgICAg
ICBTaW1wbGVMaW5lTGF5b3V0OjpnZW5lcmF0ZUxpbmVCb3hUcmVlKCp0aGlzLCAqc2ltcGxlTGlu
ZUxheW91dCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBh
dXRvJiBjb21wbGV4TGluZUxheW91dCA9ICp0aGlzLT5jb21wbGV4TGluZUxheW91dCgpOwogCiAj
aWYgQVNTRVJUX0VOQUJMRUQKQEAgLTM4MjIsOSArMzczMyw2IEBAIHZvaWQgUmVuZGVyQmxvY2tG
bG93OjpvdXRwdXRMaW5lVHJlZUFuZE1hcmsoV1RGOjpUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0
IElubGluCiB7CiAgICAgZm9yIChjb25zdCBSb290SW5saW5lQm94KiByb290ID0gZmlyc3RSb290
Qm94KCk7IHJvb3Q7IHJvb3QgPSByb290LT5uZXh0Um9vdEJveCgpKQogICAgICAgICByb290LT5v
dXRwdXRMaW5lVHJlZUFuZE1hcmsoc3RyZWFtLCBtYXJrZWRCb3gsIGRlcHRoKTsKLQotICAgIGlm
IChhdXRvIHNpbXBsZUxpbmVMYXlvdXQgPSB0aGlzLT5zaW1wbGVMaW5lTGF5b3V0KCkpCi0gICAg
ICAgIFNpbXBsZUxpbmVMYXlvdXQ6Om91dHB1dExpbmVMYXlvdXRGb3JGbG93KHN0cmVhbSwgKnRo
aXMsICpzaW1wbGVMaW5lTGF5b3V0LCBkZXB0aCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCmluZGV4IGEyMTIwNzNmMGQxYS4uOWFmYTll
OWFjYmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCkBA
IC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiTGluZVdpZHRoLmgiCiAjaW5jbHVkZSAiUmVuZGVy
QmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJMaW5lQm94TGlzdC5oIgotI2luY2x1ZGUgIlNpbXBs
ZUxpbmVMYXlvdXQuaCIKICNpbmNsdWRlICJUcmFpbGluZ09iamVjdHMuaCIKICNpbmNsdWRlIDxt
ZW1vcnk+CiAKQEAgLTM0NCw3ICszNDMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNMaW5lcygp
IGNvbnN0OwogICAgIHZvaWQgaW52YWxpZGF0ZUxpbmVMYXlvdXRQYXRoKCkgZmluYWw7CiAKLSAg
ICBlbnVtIExpbmVMYXlvdXRQYXRoIHsgVW5kZXRlcm1pbmVkUGF0aCA9IDAsIFNpbXBsZUxpbmVz
UGF0aCwgTGluZUJveGVzUGF0aCwgTGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRQYXRoLCBGb3JjZUxp
bmVCb3hlc1BhdGggfTsKKyAgICBlbnVtIExpbmVMYXlvdXRQYXRoIHsgVW5kZXRlcm1pbmVkUGF0
aCA9IDAsIExpbmVCb3hlc1BhdGgsIExheW91dEZvcm1hdHRpbmdDb250ZXh0UGF0aCwgRm9yY2VM
aW5lQm94ZXNQYXRoIH07CiAgICAgTGluZUxheW91dFBhdGggbGluZUxheW91dFBhdGgoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxMaW5lTGF5b3V0UGF0aD4ocmVuZGVyQmxvY2tGbG93TGlu
ZUxheW91dFBhdGgoKSk7IH0KICAgICB2b2lkIHNldExpbmVMYXlvdXRQYXRoKExpbmVMYXlvdXRQ
YXRoIHBhdGgpIHsgc2V0UmVuZGVyQmxvY2tGbG93TGluZUxheW91dFBhdGgocGF0aCk7IH0KIApA
QCAtMzU5LDggKzM1OCw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY29udGFpbnNOb25aZXJvQmlk
aUxldmVsKCkgY29uc3Q7CiAKLSAgICBjb25zdCBTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQqIHNp
bXBsZUxpbmVMYXlvdXQoKSBjb25zdDsKLSAgICBTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQqIHNp
bXBsZUxpbmVMYXlvdXQoKTsKICAgICBjb25zdCBDb21wbGV4TGluZUxheW91dCogY29tcGxleExp
bmVMYXlvdXQoKSBjb25zdDsKICAgICBDb21wbGV4TGluZUxheW91dCogY29tcGxleExpbmVMYXlv
dXQoKTsKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKQEAgLTU0MywxMSAr
NTQwLDggQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGJvb2wgaGFzTGluZUxheW91dCgpIGNv
bnN0OwotICAgIGJvb2wgaGFzU2ltcGxlTGluZUxheW91dCgpIGNvbnN0OwogICAgIGJvb2wgaGFz
Q29tcGxleExpbmVMYXlvdXQoKSBjb25zdDsKIAotICAgIHZvaWQgbGF5b3V0U2ltcGxlTGluZXMo
Ym9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbFRvcCwgTGF5
b3V0VW5pdCYgcmVwYWludExvZ2ljYWxCb3R0b20pOwotCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JN
QVRUSU5HX0NPTlRFWFQpCiAgICAgYm9vbCBoYXNMYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVM
YXlvdXQoKSBjb25zdDsKICAgICB2b2lkIGxheW91dExGQ0xpbmVzKGJvb2wgcmVsYXlvdXRDaGls
ZHJlbiwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxUb3AsIExheW91dFVuaXQmIHJlcGFpbnRM
b2dpY2FsQm90dG9tKTsKQEAgLTU5Miw3ICs1ODYsNiBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgog
ICAgIFZhcmlhbnQ8CiAgICAgICAgIFdURjo6TW9ub3N0YXRlLAotICAgICAgICBSZWY8U2ltcGxl
TGluZUxheW91dDo6TGF5b3V0PiwKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPExheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0
PiwKICNlbmRpZgpAQCAtNjI0LDIxICs2MTcsNiBAQCBpbmxpbmUgQ29tcGxleExpbmVMYXlvdXQq
IFJlbmRlckJsb2NrRmxvdzo6Y29tcGxleExpbmVMYXlvdXQoKQogICAgIHJldHVybiBoYXNDb21w
bGV4TGluZUxheW91dCgpID8gV1RGOjpnZXQ8c3RkOjp1bmlxdWVfcHRyPENvbXBsZXhMaW5lTGF5
b3V0Pj4obV9saW5lTGF5b3V0KS5nZXQoKSA6IG51bGxwdHI7CiB9CiAKLWlubGluZSBib29sIFJl
bmRlckJsb2NrRmxvdzo6aGFzU2ltcGxlTGluZUxheW91dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPFNpbXBsZUxpbmVMYXlvdXQ6OkxheW91dD4+KG1f
bGluZUxheW91dCk7Ci19Ci0KLWlubGluZSBjb25zdCBTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQq
IFJlbmRlckJsb2NrRmxvdzo6c2ltcGxlTGluZUxheW91dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGhhc1NpbXBsZUxpbmVMYXlvdXQoKSA/IFdURjo6Z2V0PFJlZjxTaW1wbGVMaW5lTGF5b3V0OjpM
YXlvdXQ+PihtX2xpbmVMYXlvdXQpLnB0cigpIDogbnVsbHB0cjsKLX0KLQotaW5saW5lIFNpbXBs
ZUxpbmVMYXlvdXQ6OkxheW91dCogUmVuZGVyQmxvY2tGbG93OjpzaW1wbGVMaW5lTGF5b3V0KCkK
LXsKLSAgICByZXR1cm4gaGFzU2ltcGxlTGluZUxheW91dCgpID8gV1RGOjpnZXQ8UmVmPFNpbXBs
ZUxpbmVMYXlvdXQ6OkxheW91dD4+KG1fbGluZUxheW91dCkucHRyKCkgOiBudWxscHRyOwotfQot
CiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiBpbmxpbmUgYm9vbCBSZW5k
ZXJCbG9ja0Zsb3c6Omhhc0xheW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dCgpIGNvbnN0
CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRl
ZEZsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93
LmNwcAppbmRleCAwZGQzOGVjMmZkMTAuLjQyZGMxOTIwNTNiZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRlZEZsb3cuY3BwCkBAIC00NTAsNyArNDUw
LDcgQEAgdm9pZCBSZW5kZXJGcmFnbWVudGVkRmxvdzo6cmVtb3ZlUmVuZGVyQm94RnJhZ21lbnRJ
bmZvKFJlbmRlckJveCYgYm94KQogCiB2b2lkIFJlbmRlckZyYWdtZW50ZWRGbG93OjpyZW1vdmVM
aW5lRnJhZ21lbnRJbmZvKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgYmxvY2tGbG93KQogewotICAg
IGlmICghbV9saW5lVG9GcmFnbWVudE1hcCB8fCBibG9ja0Zsb3cubGluZUxheW91dFBhdGgoKSA9
PSBTaW1wbGVMaW5lc1BhdGgpCisgICAgaWYgKCFtX2xpbmVUb0ZyYWdtZW50TWFwKQogICAgICAg
ICByZXR1cm47CiAKICAgICBmb3IgKGF1dG8qIGN1cnIgPSBibG9ja0Zsb3cuZmlyc3RSb290Qm94
KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0Um9vdEJveCgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHQuY3BwCmluZGV4IGQ0NjEzNjY4YTI3Mi4uOGUwZWIyNzhjYzRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCkBAIC00Niw3ICs0Niw2IEBACiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJlbmRlcmVkRG9jdW1lbnRNYXJrZXIu
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGdW5j
dGlvbnMuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rl
ci5oIgogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgpAQCAtNDQzLDIzICs0NDIsMTMgQEAg
VmVjdG9yPEZsb2F0UXVhZD4gUmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFkc0ZvclJhbmdlKHVuc2ln
bmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQKICAgICBBU1NFUlQoc3RhcnQgPD0gSU5UX01BWCk7CiAg
ICAgc3RhcnQgPSBzdGQ6Om1pbihzdGFydCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElOVF9NQVgp
KTsKICAgICBlbmQgPSBzdGQ6Om1pbihlbmQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihJTlRfTUFY
KSk7Ci0gICAgaWYgKHNpbXBsZUxpbmVMYXlvdXQoKSAmJiAhdXNlU2VsZWN0aW9uSGVpZ2h0KQot
ICAgICAgICByZXR1cm4gY29sbGVjdEFic29sdXRlUXVhZHNGb3JSYW5nZSgqdGhpcywgc3RhcnQs
IGVuZCwgKnNpbXBsZUxpbmVMYXlvdXQoKSwgaWdub3JlRW1wdHlUZXh0U2VsZWN0aW9ucywgd2Fz
Rml4ZWQpOworCiAgICAgY29uc3RfY2FzdDxSZW5kZXJUZXh0Jj4oKnRoaXMpLmVuc3VyZUxpbmVC
b3hlcygpOwogICAgIHJldHVybiBtX2xpbmVCb3hlcy5hYnNvbHV0ZVF1YWRzRm9yUmFuZ2UoKnRo
aXMsIHN0YXJ0LCBlbmQsIHVzZVNlbGVjdGlvbkhlaWdodCwgaWdub3JlRW1wdHlUZXh0U2VsZWN0
aW9ucywgd2FzRml4ZWQpOwogfQogCiBQb3NpdGlvbiBSZW5kZXJUZXh0Ojpwb3NpdGlvbkZvclBv
aW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCkKIHsKLSAgICBpZiAoc2ltcGxlTGluZUxheW91
dCgpICYmIHBhcmVudCgpLT5maXJzdENoaWxkKCkgPT0gcGFyZW50KCktPmxhc3RDaGlsZCgpKSB7
Ci0gICAgICAgIGF1dG8gb2Zmc2V0ID0gU2ltcGxlTGluZUxheW91dDo6dGV4dE9mZnNldEZvclBv
aW50KHBvaW50LCAqdGhpcywgKnNpbXBsZUxpbmVMYXlvdXQoKSk7Ci0gICAgICAgIC8vIERpZCBu
b3QgZmluZCBhIHZhbGlkIG9mZnNldC4gRmFsbCBiYWNrIHRvIHRoZSBub3JtYWwgbGluZSBsYXlv
dXQgYmFzZWQgUG9zaXRpb24uCi0gICAgICAgIGlmIChvZmZzZXQgPT0gdGV4dCgpLmxlbmd0aCgp
KQotICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uRm9yUG9pbnQocG9pbnQsIG51bGxwdHIpLmRl
ZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgIGF1dG8gcG9zaXRpb24gPSBQb3NpdGlvbih0ZXh0Tm9k
ZSgpLCBvZmZzZXQpOwotICAgICAgICBBU1NFUlQocG9zaXRpb24gPT0gcG9zaXRpb25Gb3JQb2lu
dChwb2ludCwgbnVsbHB0cikuZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgIHJldHVybiBwb3Np
dGlvbjsKLSAgICB9CiAgICAgcmV0dXJuIHBvc2l0aW9uRm9yUG9pbnQocG9pbnQsIG51bGxwdHIp
LmRlZXBFcXVpdmFsZW50KCk7CiB9CiAKQEAgLTEwNzYsNyArMTA2NSw3IEBAIHZvaWQgUmVuZGVy
VGV4dDo6c2V0VGV4dFdpdGhPZmZzZXQoY29uc3QgU3RyaW5nJiBuZXdUZXh0LCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnCiAgICAgaW50IGRlbHRhID0gbmV3VGV4dC5sZW5ndGgoKSAtIHRleHQoKS5s
ZW5ndGgoKTsKICAgICB1bnNpZ25lZCBlbmQgPSBvZmZzZXQgKyBsZW5ndGg7CiAKLSAgICBtX2xp
bmVzRGlydHkgPSBzaW1wbGVMaW5lTGF5b3V0KCkgfHwgbV9saW5lQm94ZXMuZGlydHlSYW5nZSgq
dGhpcywgb2Zmc2V0LCBlbmQsIGRlbHRhKTsKKyAgICBtX2xpbmVzRGlydHkgPSBtX2xpbmVCb3hl
cy5kaXJ0eVJhbmdlKCp0aGlzLCBvZmZzZXQsIGVuZCwgZGVsdGEpOwogCiAgICAgc2V0VGV4dChu
ZXdUZXh0LCBmb3JjZSB8fCBtX2xpbmVzRGlydHkpOwogfQpAQCAtMTMwMCwxMyArMTI4OSw2IEBA
IHZvaWQgUmVuZGVyVGV4dDo6ZW5zdXJlTGluZUJveGVzKCkKICAgICBkb3duY2FzdDxSZW5kZXJC
bG9ja0Zsb3c+KCpwYXJlbnQoKSkuZW5zdXJlTGluZUJveGVzKCk7CiB9CiAKLWNvbnN0IFNpbXBs
ZUxpbmVMYXlvdXQ6OkxheW91dCogUmVuZGVyVGV4dDo6c2ltcGxlTGluZUxheW91dCgpIGNvbnN0
Ci17Ci0gICAgaWYgKCFpczxSZW5kZXJCbG9ja0Zsb3c+KCpwYXJlbnQoKSkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpwYXJl
bnQoKSkuc2ltcGxlTGluZUxheW91dCgpOwotfQotCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRU
SU5HX0NPTlRFWFQpCiBjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dCogUmVuZGVy
VGV4dDo6bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCkgY29uc3QKIHsKQEAgLTEz
MTgsOCArMTMwMCw2IEBAIGNvbnN0IExheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0KiBSZW5k
ZXJUZXh0OjpsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvCiAKIGJvb2wgUmVuZGVyVGV4
dDo6dXNlc0NvbXBsZXhMaW5lTGF5b3V0UGF0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKHNpbXBsZUxp
bmVMYXlvdXQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogI2lmIEVOQUJMRShMQVlPVVRfRk9S
TUFUVElOR19DT05URVhUKQogICAgIGlmIChsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlv
dXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTM4OCw3ICsxMzY4LDYgQEAgSW50UmVj
dCBSZW5kZXJUZXh0OjpsaW5lc0JvdW5kaW5nQm94KCkgY29uc3QKIAogTGF5b3V0UmVjdCBSZW5k
ZXJUZXh0OjpsaW5lc1Zpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3goKSBjb25zdAogewotICAgIEFT
U0VSVCghc2ltcGxlTGluZUxheW91dCgpKTsKICAgICByZXR1cm4gbV9saW5lQm94ZXMudmlzdWFs
T3ZlcmZsb3dCb3VuZGluZ0JveCgqdGhpcyk7CiB9CiAKQEAgLTE0MTEsNyArMTM5MCw2IEBAIExh
eW91dFJlY3QgUmVuZGVyVGV4dDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoY29uc3Qg
UmVuZGVyTGF5ZXJNb2RlbE9iamVjCiBMYXlvdXRSZWN0IFJlbmRlclRleHQ6OmNvbGxlY3RTZWxl
Y3Rpb25SZWN0c0ZvckxpbmVCb3hlcyhjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBh
aW50Q29udGFpbmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50LCBWZWN0b3I8TGF5b3V0UmVj
dD4qIHJlY3RzKQogewogICAgIEFTU0VSVCghbmVlZHNMYXlvdXQoKSk7Ci0gICAgQVNTRVJUKCFz
aW1wbGVMaW5lTGF5b3V0KCkpOwogCiAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gSGlnaGxp
Z2h0U3RhdGU6Ok5vbmUpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuaAppbmRleCAwMDc5MzI0OTYyZjQuLjI5MWQxOTQ3YTY3YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCkBAIC0yNCw3ICsyNCw2IEBACiAK
ICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dExpbmVCb3hl
cy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXQuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0QnJlYWtJdGVy
YXRvci5oPgpAQCAtMTY5LDcgKzE2OCw2IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdm9pZCBl
bnN1cmVMaW5lQm94ZXMoKTsKLSAgICBjb25zdCBTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQqIHNp
bXBsZUxpbmVMYXlvdXQoKSBjb25zdDsKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09O
VEVYVCkKICAgICBjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dCogbGF5b3V0Rm9y
bWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCkgY29uc3Q7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZTI4ZWFiM2FjNTAyLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA1MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNpbXBs
ZUxpbmVMYXlvdXQuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgot
I2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaCIK
LSNpbmNsdWRlICJIaXRUZXN0TG9jYXRpb24uaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5o
IgotI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJIeXBoZW5hdGlvbi5oIgot
I2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKLSNpbmNsdWRlICJMaW5lV2lkdGguaCIKLSNpbmNs
dWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGFpbnRJbmZvLmgiCi0jaW5jbHVkZSAiUmVuZGVy
QmxvY2tGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgotI2luY2x1ZGUg
IlJlbmRlckZyYWdtZW50ZWRGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCi0j
aW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUu
aCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wu
aCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNs
dWRlICJTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGlu
ZUxheW91dEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5o
IgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oIgotI2lu
Y2x1ZGUgIlRleHQuaCIKLSNpbmNsdWRlICJUZXh0UGFpbnRTdHlsZS5oIgotI2luY2x1ZGUgPHBh
bC9Mb2dnaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBTaW1wbGVMaW5l
TGF5b3V0IHsKLQotI2lmbmRlZiBOREVCVUcKLSNkZWZpbmUgU0VUX1JFQVNPTl9BTkRfUkVUVVJO
X0lGX05FRURFRChyZWFzb24sIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKSB7IFwKLSAgICAgICAg
cmVhc29ucyB8PSByZWFzb247IFwKLSAgICAgICAgaWYgKGluY2x1ZGVSZWFzb25zID09IEluY2x1
ZGVSZWFzb25zOjpGaXJzdCkgXAotICAgICAgICAgICAgcmV0dXJuIHJlYXNvbnM7IFwKLSAgICB9
Ci0jZWxzZQotI2RlZmluZSBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbiwg
cmVhc29ucywgaW5jbHVkZVJlYXNvbnMpIHsgXAotICAgICAgICBBU1NFUlRfVU5VU0VEKGluY2x1
ZGVSZWFzb25zLCBpbmNsdWRlUmVhc29ucyA9PSBJbmNsdWRlUmVhc29uczo6Rmlyc3QpOyBcCi0g
ICAgICAgIHJlYXNvbnMgfD0gcmVhc29uOyBcCi0gICAgICAgIHJldHVybiByZWFzb25zOyBcCi0g
ICAgfQotI2VuZGlmCi0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IEF2b2lk
YW5jZVJlYXNvbkZsYWdzIGNhblVzZUZvckNoYXJhY3RlcihDaGFyYWN0ZXJUeXBlLCBib29sIHRl
eHRJc0p1c3RpZmllZCwgSW5jbHVkZVJlYXNvbnMpOwotCi10ZW1wbGF0ZTw+IEF2b2lkYW5jZVJl
YXNvbkZsYWdzIGNhblVzZUZvckNoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIsIGJvb2wgdGV4dElz
SnVzdGlmaWVkLCBJbmNsdWRlUmVhc29ucyBpbmNsdWRlUmVhc29ucykKLXsKLSAgICBBdm9pZGFu
Y2VSZWFzb25GbGFncyByZWFzb25zID0geyB9OwotICAgIGlmICh0ZXh0SXNKdXN0aWZpZWQpIHsK
LSAgICAgICAgLy8gSW5jbHVkZSBjaGFyYWN0ZXJzIHVwIHRvIExhdGluIEV4dGVuZGVkLUIgYW5k
IHNvbWUgcHVuY3R1YXRpb24gcmFuZ2Ugd2hlbiB0ZXh0IGlzIGp1c3RpZmllZC4KLSAgICAgICAg
Ym9vbCBpc0xhdGluSW5jbHVkaW5nRXh0ZW5kZWRCID0gY2hhcmFjdGVyIDw9IDB4MDFGRjsKLSAg
ICAgICAgYm9vbCBpc1B1bmN0dWF0aW9uUmFuZ2UgPSBjaGFyYWN0ZXIgPj0gMHgyMDEwICYmIGNo
YXJhY3RlciA8PSAweDIwMjc7Ci0gICAgICAgIGlmICghKGlzTGF0aW5JbmNsdWRpbmdFeHRlbmRl
ZEIgfHwgaXNQdW5jdHVhdGlvblJhbmdlKSkKLSAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JF
VFVSTl9JRl9ORUVERUQoRmxvd0hhc0p1c3RpZmllZE5vbkxhdGluVGV4dCwgcmVhc29ucywgaW5j
bHVkZVJlYXNvbnMpOwotICAgIH0KLQotICAgIGlmIChVMTZfSVNfU1VSUk9HQVRFKGNoYXJhY3Rl
cikpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRIYXNT
dXJyb2dhdGVQYWlyLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgCi0gICAgVUNoYXJE
aXJlY3Rpb24gZGlyZWN0aW9uID0gdV9jaGFyRGlyZWN0aW9uKGNoYXJhY3Rlcik7Ci0gICAgaWYg
KGRpcmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xFRlQgfHwgZGlyZWN0aW9uID09IFVfUklHSFRfVE9f
TEVGVF9BUkFCSUMKLSAgICAgICAgfHwgZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVF9FTUJF
RERJTkcgfHwgZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVF9PVkVSUklERQotICAgICAgICB8
fCBkaXJlY3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hUX0VNQkVERElORyB8fCBkaXJlY3Rpb24gPT0g
VV9MRUZUX1RPX1JJR0hUX09WRVJSSURFCi0gICAgICAgIHx8IGRpcmVjdGlvbiA9PSBVX1BPUF9E
SVJFQ1RJT05BTF9GT1JNQVQgfHwgZGlyZWN0aW9uID09IFVfQk9VTkRBUllfTkVVVFJBTCkKLSAg
ICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93VGV4dEhhc0RpcmVjdGlv
bkNoYXJhY3RlciwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotCi0gICAgcmV0dXJuIHJlYXNv
bnM7Ci19Ci0KLXRlbXBsYXRlPD4gQXZvaWRhbmNlUmVhc29uRmxhZ3MgY2FuVXNlRm9yQ2hhcmFj
dGVyKExDaGFyLCBib29sLCBJbmNsdWRlUmVhc29ucykKLXsKLSAgICByZXR1cm4geyB9OwotfQot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBBdm9pZGFuY2VSZWFz
b25GbGFncyBjYW5Vc2VGb3JUZXh0KGNvbnN0IENoYXJhY3RlclR5cGUqIHRleHQsIHVuc2lnbmVk
IGxlbmd0aCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnRDYXNjYWRlLCBPcHRpb25hbDxmbG9hdD4g
bGluZUhlaWdodENvbnN0cmFpbnQsCi0gICAgYm9vbCB0ZXh0SXNKdXN0aWZpZWQsIEluY2x1ZGVS
ZWFzb25zIGluY2x1ZGVSZWFzb25zKQotewotICAgIEF2b2lkYW5jZVJlYXNvbkZsYWdzIHJlYXNv
bnMgPSB7IH07Ci0gICAgYXV0byYgcHJpbWFyeUZvbnQgPSBmb250Q2FzY2FkZS5wcmltYXJ5Rm9u
dCgpOwotICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gcHJpbWFyeUZvbnQuZm9udE1ldHJpY3MoKTsK
LSAgICBhdXRvIGF2YWlsYWJsZVNwYWNlRm9yR2x5cGhBc2NlbnQgPSBmb250TWV0cmljcy5hc2Nl
bnQoKTsKLSAgICBhdXRvIGF2YWlsYWJsZVNwYWNlRm9yR2x5cGhEZXNjZW50ID0gZm9udE1ldHJp
Y3MuZGVzY2VudCgpOwotICAgIGlmIChsaW5lSGVpZ2h0Q29uc3RyYWludCkgewotICAgICAgICBh
dXRvIGxpbmVIZWlnaHRQYWRkaW5nID0gKmxpbmVIZWlnaHRDb25zdHJhaW50IC0gZm9udE1ldHJp
Y3MuaGVpZ2h0KCk7Ci0gICAgICAgIGF2YWlsYWJsZVNwYWNlRm9yR2x5cGhBc2NlbnQgKz0gbGlu
ZUhlaWdodFBhZGRpbmcgLyAyOwotICAgICAgICBhdmFpbGFibGVTcGFjZUZvckdseXBoRGVzY2Vu
dCArPSBsaW5lSGVpZ2h0UGFkZGluZyAvIDI7Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8gY2hhcmFjdGVyID0gdGV4dFtp
XTsKLSAgICAgICAgaWYgKEZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gc29mdEh5cGhl
bikKLSAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRI
YXNTb2Z0SHlwaGVuLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0KLSAgICAgICAgYXV0byBj
aGFyYWN0ZXJSZWFzb25zID0gY2FuVXNlRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgdGV4dElzSnVz
dGlmaWVkLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXJSZWFzb25zICE9
IE5vUmVhc29uKQotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChj
aGFyYWN0ZXJSZWFzb25zLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0KLSAgICAgICAgYXV0
byBnbHlwaERhdGEgPSBmb250Q2FzY2FkZS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVy
LCBmYWxzZSk7Ci0gICAgICAgIGlmICghZ2x5cGhEYXRhLmlzVmFsaWQoKSB8fCBnbHlwaERhdGEu
Zm9udCAhPSAmcHJpbWFyeUZvbnQpCi0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5f
SUZfTkVFREVEKEZsb3dQcmltYXJ5Rm9udElzSW5zdWZmaWNpZW50LCByZWFzb25zLCBpbmNsdWRl
UmVhc29ucyk7Ci0KLSAgICAgICAgaWYgKGxpbmVIZWlnaHRDb25zdHJhaW50KSB7Ci0gICAgICAg
ICAgICBhdXRvIGJvdW5kcyA9IHByaW1hcnlGb250LmJvdW5kc0ZvckdseXBoKGdseXBoRGF0YS5n
bHlwaCk7Ci0gICAgICAgICAgICBpZiAoY2VpbGYoLWJvdW5kcy55KCkpID4gYXZhaWxhYmxlU3Bh
Y2VGb3JHbHlwaEFzY2VudCB8fCBjZWlsZihib3VuZHMubWF4WSgpKSA+IGF2YWlsYWJsZVNwYWNl
Rm9yR2x5cGhEZXNjZW50KQotICAgICAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9J
Rl9ORUVERUQoRmxvd0ZvbnRIYXNPdmVyZmxvd0dseXBoLCByZWFzb25zLCBpbmNsdWRlUmVhc29u
cyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlYXNvbnM7Ci19Ci0KLXN0YXRpYyBB
dm9pZGFuY2VSZWFzb25GbGFncyBjYW5Vc2VGb3JUZXh0KFN0cmluZ1ZpZXcgdGV4dCwgY29uc3Qg
Rm9udENhc2NhZGUmIGZvbnRDYXNjYWRlLCBPcHRpb25hbDxmbG9hdD4gbGluZUhlaWdodENvbnN0
cmFpbnQsIGJvb2wgdGV4dElzSnVzdGlmaWVkLCBJbmNsdWRlUmVhc29ucyBpbmNsdWRlUmVhc29u
cykKLXsKLSAgICBpZiAodGV4dC5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGNhblVzZUZvclRl
eHQodGV4dC5jaGFyYWN0ZXJzOCgpLCB0ZXh0Lmxlbmd0aCgpLCBmb250Q2FzY2FkZSwgbGluZUhl
aWdodENvbnN0cmFpbnQsIHRleHRJc0p1c3RpZmllZCwgaW5jbHVkZVJlYXNvbnMpOwotICAgIHJl
dHVybiBjYW5Vc2VGb3JUZXh0KHRleHQuY2hhcmFjdGVyczE2KCksIHRleHQubGVuZ3RoKCksIGZv
bnRDYXNjYWRlLCBsaW5lSGVpZ2h0Q29uc3RyYWludCwgdGV4dElzSnVzdGlmaWVkLCBpbmNsdWRl
UmVhc29ucyk7Ci19Ci0KLXN0YXRpYyBBdm9pZGFuY2VSZWFzb25GbGFncyBjYW5Vc2VGb3JGb250
QW5kVGV4dChjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIEluY2x1ZGVSZWFzb25zIGluY2x1
ZGVSZWFzb25zKQotewotICAgIEF2b2lkYW5jZVJlYXNvbkZsYWdzIHJlYXNvbnMgPSB7IH07Ci0g
ICAgLy8gV2UgYXNzdW1lIHRoYXQgYWxsIGxpbmVzIGhhdmUgbWV0cmljcyBiYXNlZCBwdXJlbHkg
b24gdGhlIHByaW1hcnkgZm9udC4KLSAgICBjb25zdCBhdXRvJiBzdHlsZSA9IGZsb3cuc3R5bGUo
KTsKLSAgICBhdXRvJiBmb250Q2FzY2FkZSA9IHN0eWxlLmZvbnRDYXNjYWRlKCk7Ci0gICAgaWYg
KGZvbnRDYXNjYWRlLnByaW1hcnlGb250KCkuaXNJbnRlcnN0aXRpYWwoKSkKLSAgICAgICAgU0VU
X1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SXNNaXNzaW5nUHJpbWFyeUZvbnQsIHJl
YXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBPcHRpb25hbDxmbG9hdD4gbGluZUhlaWdodENv
bnN0cmFpbnQ7Ci0gICAgaWYgKHN0eWxlLmxpbmVCb3hDb250YWluKCkuY29udGFpbnMoTGluZUJv
eENvbnRhaW46OkdseXBocykpCi0gICAgICAgIGxpbmVIZWlnaHRDb25zdHJhaW50ID0gbGluZUhl
aWdodEZyb21GbG93KGZsb3cpLnRvRmxvYXQoKTsKLSAgICBib29sIGZsb3dJc0p1c3RpZmllZCA9
IHN0eWxlLnRleHRBbGlnbigpID09IFRleHRBbGlnbk1vZGU6Okp1c3RpZnk7Ci0gICAgZm9yIChj
b25zdCBhdXRvJiB0ZXh0UmVuZGVyZXIgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJUZXh0PihmbG93
KSkgewotICAgICAgICAvLyBGSVhNRTogRG8gbm90IHJldHVybiB1bnRpbCBhZnRlciBjaGVja2lu
ZyBhbGwgY2hpbGRyZW4uCi0gICAgICAgIGlmICh0ZXh0UmVuZGVyZXIudGV4dCgpLmlzRW1wdHko
KSkKLSAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRJ
c0VtcHR5LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgICAgIGlmICh0ZXh0UmVuZGVy
ZXIuaXNDb21iaW5lVGV4dCgpKQotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lG
X05FRURFRChGbG93VGV4dElzQ29tYmluZVRleHQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsK
LSAgICAgICAgaWYgKHRleHRSZW5kZXJlci5pc0NvdW50ZXIoKSkKLSAgICAgICAgICAgIFNFVF9S
RUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRJc1JlbmRlckNvdW50ZXIsIHJlYXNv
bnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgaWYgKHRleHRSZW5kZXJlci5pc1F1b3RlKCkp
Ci0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dUZXh0SXNS
ZW5kZXJRdW90ZSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgICAgICBpZiAodGV4dFJl
bmRlcmVyLmlzVGV4dEZyYWdtZW50KCkpCi0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRV
Uk5fSUZfTkVFREVEKEZsb3dUZXh0SXNUZXh0RnJhZ21lbnQsIHJlYXNvbnMsIGluY2x1ZGVSZWFz
b25zKTsKLSAgICAgICAgaWYgKHRleHRSZW5kZXJlci5pc1NWR0lubGluZVRleHQoKSkKLSAgICAg
ICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRJc1NWR0lubGlu
ZVRleHQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgaWYgKCF0ZXh0UmVuZGVy
ZXIuY2FuVXNlU2ltcGxlRm9udENvZGVQYXRoKCkpIHsKLSAgICAgICAgICAgIC8vIE5vIG5lZWQg
dG8gY2hlY2sgdGhlIGNvZGUgcGF0aCBhdCB0aGlzIHBvaW50LiBXZSBhbHJlYWR5IGtub3cgaXQg
Y2FuJ3QgYmUgc2ltcGxlLgotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05F
RURFRChGbG93SGFzQ29tcGxleEZvbnRDb2RlUGF0aCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgVGV4dFJ1biBydW4oU3RyaW5nKHRleHRS
ZW5kZXJlci50ZXh0KCkpKTsKLSAgICAgICAgICAgIHJ1bi5zZXRDaGFyYWN0ZXJTY2FuRm9yQ29k
ZVBhdGgoZmFsc2UpOwotICAgICAgICAgICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkuY29kZVBh
dGgocnVuKSAhPSBGb250Q2FzY2FkZTo6U2ltcGxlKQotICAgICAgICAgICAgICAgIFNFVF9SRUFT
T05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc0NvbXBsZXhGb250Q29kZVBhdGgsIHJlYXNv
bnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gdGV4dFJlYXNv
bnMgPSBjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJlci5zdHJpbmdWaWV3KCksIGZvbnRDYXNjYWRl
LCBsaW5lSGVpZ2h0Q29uc3RyYWludCwgZmxvd0lzSnVzdGlmaWVkLCBpbmNsdWRlUmVhc29ucyk7
Ci0gICAgICAgIGlmICh0ZXh0UmVhc29ucyAhPSBOb1JlYXNvbikKLSAgICAgICAgICAgIFNFVF9S
RUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQodGV4dFJlYXNvbnMsIHJlYXNvbnMsIGluY2x1ZGVS
ZWFzb25zKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlYXNvbnM7Ci19Ci0KLXN0YXRpYyBBdm9pZGFu
Y2VSZWFzb25GbGFncyBjYW5Vc2VGb3JTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIElu
Y2x1ZGVSZWFzb25zIGluY2x1ZGVSZWFzb25zKQotewotICAgIEF2b2lkYW5jZVJlYXNvbkZsYWdz
IHJlYXNvbnMgPSB7IH07Ci0gICAgaWYgKHN0eWxlLnRleHRPdmVyZmxvdygpID09IFRleHRPdmVy
Zmxvdzo6RWxsaXBzaXMpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQo
Rmxvd0hhc1RleHRPdmVyZmxvdywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmIChz
dHlsZS50ZXh0VW5kZXJsaW5lUG9zaXRpb24oKSAhPSBUZXh0VW5kZXJsaW5lUG9zaXRpb246OkF1
dG8gfHwgIXN0eWxlLnRleHRVbmRlcmxpbmVPZmZzZXQoKS5pc0F1dG8oKSB8fCAhc3R5bGUudGV4
dERlY29yYXRpb25UaGlja25lc3MoKS5pc0F1dG8oKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRf
UkVUVVJOX0lGX05FRURFRChGbG93SGFzVW5zdXBwb3J0ZWRVbmRlcmxpbmVEZWNvcmF0aW9uLCBy
ZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgLy8gTm9uLXZpc2libGUgb3ZlcmZsb3cgc2hv
dWxkIGJlIHByZXR0eSBlYXN5IHRvIHN1cHBvcnQuCi0gICAgaWYgKHN0eWxlLm92ZXJmbG93WCgp
ICE9IE92ZXJmbG93OjpWaXNpYmxlIHx8IHN0eWxlLm92ZXJmbG93WSgpICE9IE92ZXJmbG93OjpW
aXNpYmxlKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNP
dmVyZmxvd05vdFZpc2libGUsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoIXN0
eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVU
VVJOX0lGX05FRURFRChGbG93SXNOb3RMVFIsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAg
ICBpZiAoIShzdHlsZS5saW5lQm94Q29udGFpbigpLmNvbnRhaW5zKExpbmVCb3hDb250YWluOjpC
bG9jaykpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNM
aW5lQm94Q29udGFpblByb3BlcnR5LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYg
KHN0eWxlLndyaXRpbmdNb2RlKCkgIT0gV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tKQotICAgICAg
ICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJc05vdFRvcFRvQm90dG9tLCBy
ZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLmxpbmVCcmVhaygpICE9IExp
bmVCcmVhazo6QXV0bykKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChG
bG93SGFzTGluZUJyZWFrLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0eWxl
LnVuaWNvZGVCaWRpKCkgIT0gVUJOb3JtYWwpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVS
Tl9JRl9ORUVERUQoRmxvd0hhc05vbk5vcm1hbFVuaWNvZGVCaURpLCByZWFzb25zLCBpbmNsdWRl
UmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLnJ0bE9yZGVyaW5nKCkgIT0gT3JkZXI6OkxvZ2ljYWwp
Ci0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1JUTE9yZGVy
aW5nLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLmxpbmVBbGlnbigp
ICE9IExpbmVBbGlnbjo6Tm9uZSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05F
RURFRChGbG93SGFzTGluZUFsaWduRWRnZXMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAg
ICBpZiAoc3R5bGUubGluZVNuYXAoKSAhPSBMaW5lU25hcDo6Tm9uZSkKLSAgICAgICAgU0VUX1JF
QVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzTGluZVNuYXAsIHJlYXNvbnMsIGluY2x1
ZGVSZWFzb25zKTsKLSAgICBpZiAoc3R5bGUudGV4dEVtcGhhc2lzRmlsbCgpICE9IFRleHRFbXBo
YXNpc0ZpbGw6OkZpbGxlZCB8fCBzdHlsZS50ZXh0RW1waGFzaXNNYXJrKCkgIT0gVGV4dEVtcGhh
c2lzTWFyazo6Tm9uZSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChG
bG93SGFzVGV4dEVtcGhhc2lzRmlsbE9yTWFyaywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwot
ICAgIGlmIChzdHlsZS50ZXh0U2hhZG93KCkpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVS
Tl9JRl9ORUVERUQoRmxvd0hhc1RleHRTaGFkb3csIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsK
LSAgICBpZiAoc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OkZpcnN0TGluZSkpCi0gICAg
ICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1BzZXVkb0ZpcnN0TGlu
ZSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmIChzdHlsZS5oYXNQc2V1ZG9TdHls
ZShQc2V1ZG9JZDo6Rmlyc3RMZXR0ZXIpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5f
SUZfTkVFREVEKEZsb3dIYXNQc2V1ZG9GaXJzdExldHRlciwgcmVhc29ucywgaW5jbHVkZVJlYXNv
bnMpOwotICAgIGlmIChzdHlsZS5oYXNUZXh0Q29tYmluZSgpKQotICAgICAgICBTRVRfUkVBU09O
X0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNUZXh0Q29tYmluZSwgcmVhc29ucywgaW5jbHVk
ZVJlYXNvbnMpOwotICAgIGlmIChzdHlsZS5iYWNrZ3JvdW5kQ2xpcCgpID09IEZpbGxCb3g6OlRl
eHQpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1RleHRG
aWxsQm94LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLmJvcmRlckZp
dCgpID09IEJvcmRlckZpdDo6TGluZXMpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9J
Rl9ORUVERUQoRmxvd0hhc0JvcmRlckZpdExpbmVzLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7
Ci0gICAgaWYgKHN0eWxlLmxpbmVCcmVhaygpICE9IExpbmVCcmVhazo6QXV0bykKLSAgICAgICAg
U0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzTm9uQXV0b0xpbmVCcmVhaywg
cmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmIChzdHlsZS5uYnNwTW9kZSgpICE9IE5C
U1BNb2RlOjpOb3JtYWwpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQo
Rmxvd0hhc1dlYktpdE5CU1BNb2RlLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgLy8g
U3BlY2lhbCBoYW5kbGluZyBvZiB0ZXh0LXNlY3VyaXR5OmRpc2MgaXMgbm90IHlldCBpbXBsZW1l
bnRlZCBpbiB0aGUgc2ltcGxlIGxpbmUgbGF5b3V0IGNvZGUgcGF0aC4KLSAgICAvLyBTZWUgUmVu
ZGVyQmxvY2s6OnVwZGF0ZVNlY3VyaXR5RGlzY0NoYXJhY3RlcnMuCi0gICAgaWYgKHN0eWxlLnRl
eHRTZWN1cml0eSgpICE9IFRleHRTZWN1cml0eTo6Tm9uZSkKLSAgICAgICAgU0VUX1JFQVNPTl9B
TkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzVGV4dFNlY3VyaXR5LCByZWFzb25zLCBpbmNsdWRl
UmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLmh5cGhlbnMoKSA9PSBIeXBoZW5zOjpBdXRvKSB7Ci0g
ICAgICAgIGF1dG8gdGV4dFJlYXNvbnMgPSBjYW5Vc2VGb3JUZXh0KHN0eWxlLmh5cGhlblN0cmlu
ZygpLCBzdHlsZS5mb250Q2FzY2FkZSgpLCBXVEY6Om51bGxvcHQsIGZhbHNlLCBpbmNsdWRlUmVh
c29ucyk7Ci0gICAgICAgIGlmICh0ZXh0UmVhc29ucyAhPSBOb1JlYXNvbikKLSAgICAgICAgICAg
IFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQodGV4dFJlYXNvbnMsIHJlYXNvbnMsIGlu
Y2x1ZGVSZWFzb25zKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlYXNvbnM7Ci19Ci0KLUF2b2lkYW5j
ZVJlYXNvbkZsYWdzIGNhblVzZUZvcldpdGhSZWFzb24oY29uc3QgUmVuZGVyQmxvY2tGbG93JiBm
bG93LCBJbmNsdWRlUmVhc29ucyBpbmNsdWRlUmVhc29ucykKLXsKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKG9u
Y2VGbGFnLCBbXSB7Ci0gICAgICAgIFBBTDo6cmVnaXN0ZXJOb3RpZnlDYWxsYmFjaygiY29tLmFw
cGxlLldlYktpdC5zaG93U2ltcGxlTGluZUxheW91dENvdmVyYWdlIiwgV1RGOjpGdW5jdGlvbjx2
b2lkKCk+IHsgcHJpbnRTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UgfSk7Ci0gICAgICAgIFBBTDo6
cmVnaXN0ZXJOb3RpZnlDYWxsYmFjaygiY29tLmFwcGxlLldlYktpdC5zaG93U2ltcGxlTGluZUxh
eW91dFJlYXNvbnMiLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4geyBwcmludFNpbXBsZUxpbmVMYXlv
dXRCbG9ja0xpc3QgfSk7Ci0gICAgICAgIFBBTDo6cmVnaXN0ZXJOb3RpZnlDYWxsYmFjaygiY29t
LmFwcGxlLldlYktpdC50b2dnbGVTaW1wbGVMaW5lTGF5b3V0IiwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHsgdG9nZ2xlU2ltcGxlTGluZUxheW91dCB9KTsKLSAgICB9KTsKLSNlbmRpZgotICAgIEF2
b2lkYW5jZVJlYXNvbkZsYWdzIHJlYXNvbnMgPSB7IH07Ci0gICAgaWYgKCFmbG93LnNldHRpbmdz
KCkuc2ltcGxlTGluZUxheW91dEVuYWJsZWQoKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVU
VVJOX0lGX05FRURFRChGZWF0dXJlSXNEaXNhYmxlZCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMp
OwotICAgIGlmICghZmxvdy5wYXJlbnQoKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJO
X0lGX05FRURFRChGbG93SGFzTm9QYXJlbnQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAg
ICBpZiAoIWZsb3cuZmlyc3RDaGlsZCgpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5f
SUZfTkVFREVEKEZsb3dIYXNOb0NoaWxkLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAg
aWYgKGZsb3cuZnJhZ21lbnRlZEZsb3dTdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6Tm90SW5zaWRl
RnJhZ21lbnRlZEZsb3cpIHsKLSAgICAgICAgYXV0byogZnJhZ21lbnRlZEZsb3cgPSBmbG93LmVu
Y2xvc2luZ0ZyYWdtZW50ZWRGbG93KCk7Ci0gICAgICAgIGlmICghaXM8UmVuZGVyTXVsdGlDb2x1
bW5GbG93PihmcmFnbWVudGVkRmxvdykpCi0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRV
Uk5fSUZfTkVFREVEKEZsb3dJc0luc2lkZUFOb25NdWx0aUNvbHVtblRocmVhZCwgcmVhc29ucywg
aW5jbHVkZVJlYXNvbnMpOwotICAgICAgICBhdXRvJiBjb2x1bW5UaHJlYWQgPSBkb3duY2FzdDxS
ZW5kZXJNdWx0aUNvbHVtbkZsb3c+KCpmcmFnbWVudGVkRmxvdyk7Ci0gICAgICAgIGlmIChjb2x1
bW5UaHJlYWQucGFyZW50KCkgIT0gJmZsb3cudmlldygpKQotICAgICAgICAgICAgU0VUX1JFQVNP
Tl9BTkRfUkVUVVJOX0lGX05FRURFRChNdWx0aUNvbHVtbkZsb3dJc05vdFRvcExldmVsLCByZWFz
b25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgICAgIGlmIChjb2x1bW5UaHJlYWQuaGFzQ29sdW1u
U3Bhbm5lcigpKQotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChN
dWx0aUNvbHVtbkZsb3dIYXNDb2x1bW5TcGFubmVyLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7
Ci0gICAgICAgIGF1dG8mIHN0eWxlID0gZmxvdy5zdHlsZSgpOwotICAgICAgICBpZiAoc3R5bGUu
dmVydGljYWxBbGlnbigpICE9IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lKQotICAgICAgICAgICAg
U0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChNdWx0aUNvbHVtbkZsb3dWZXJ0aWNhbEFs
aWduLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgICAgIGlmIChzdHlsZS5pc0Zsb2F0
aW5nKCkpCi0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKE11bHRp
Q29sdW1uRmxvd0lzRmxvYXRpbmcsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICB9Ci0g
ICAgaWYgKCFmbG93LmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIFNFVF9SRUFT
T05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc0hvcml6b25hbFdyaXRpbmdNb2RlLCByZWFz
b25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKGZsb3cuaGFzT3V0bGluZSgpKQotICAgICAg
ICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNPdXRsaW5lLCByZWFzb25z
LCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKGZsb3cuaXNSdWJ5VGV4dCgpIHx8IGZsb3cuaXNS
dWJ5QmFzZSgpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJ
c1J1YnksIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoIWZsb3cuc3R5bGUoKS5o
YW5naW5nUHVuY3R1YXRpb24oKS5pc0VtcHR5KCkpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JF
VFVSTl9JRl9ORUVERUQoRmxvd0hhc0hhbmdpbmdQdW5jdHVhdGlvbiwgcmVhc29ucywgaW5jbHVk
ZVJlYXNvbnMpOwotICAgIAotICAgIC8vIFByaW50aW5nIGRvZXMgcGFnaW5hdGlvbiB3aXRob3V0
IGEgZmxvdyB0aHJlYWQuCi0gICAgaWYgKGZsb3cuZG9jdW1lbnQoKS5wYWdpbmF0ZWQoKSkKLSAg
ICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SXNQYWdpbmF0ZWQsIHJl
YXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoZmxvdy5maXJzdExpbmVCbG9jaygpKQot
ICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNQc2V1ZG9GaXJz
dExpbmUsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoZmxvdy5pc0Fub255bW91
c0Jsb2NrKCkgJiYgZmxvdy5wYXJlbnQoKS0+c3R5bGUoKS50ZXh0T3ZlcmZsb3coKSA9PSBUZXh0
T3ZlcmZsb3c6OkVsbGlwc2lzKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVF
REVEKEZsb3dIYXNUZXh0T3ZlcmZsb3csIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBp
ZiAoZmxvdy5wYXJlbnQoKS0+aXNEZXByZWNhdGVkRmxleGlibGVCb3goKSkKLSAgICAgICAgU0VU
X1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SXNEZXByaWNhdGVkRmxleEJveCwgcmVh
c29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIC8vIEZJWE1FOiBQbGFjZWhvbGRlcnMgZG8gc29t
ZXRoaW5nIHN0cmFuZ2UuCi0gICAgaWYgKGlzPFJlbmRlclRleHRDb250cm9sPigqZmxvdy5wYXJl
bnQoKSkgJiYgZG93bmNhc3Q8UmVuZGVyVGV4dENvbnRyb2w+KCpmbG93LnBhcmVudCgpKS50ZXh0
Rm9ybUNvbnRyb2xFbGVtZW50KCkucGxhY2Vob2xkZXJFbGVtZW50KCkpCi0gICAgICAgIFNFVF9S
RUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1BhcmVudElzUGxhY2Vob2xkZXJFbGVtZW50
LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudGF0aW9u
IG9mIHdyYXA9aGFyZCBsb29rcyBpbnRvIGxpbmVib3hlcy4KLSAgICBpZiAoZmxvdy5wYXJlbnQo
KS0+aXNUZXh0QXJlYSgpICYmIGZsb3cucGFyZW50KCktPmVsZW1lbnQoKS0+aGFzQXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OndyYXBBdHRyKSkKLSAgICAgICAgU0VU
X1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93UGFyZW50SXNUZXh0QXJlYVdpdGhXcmFw
cGluZywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIC8vIFRoaXMgY3VycmVudGx5IGNv
dmVycyA8YmxvY2tmbG93PiN0ZXh0PC9ibG9ja2Zsb3c+LCA8YmxvY2tmbG93PiN0ZXh0PGJyPjwv
YmxvY2tmbG93PiBhbmQgbXV0aXBsZSAoc2libGluZykgUmVuZGVyVGV4dCBjYXNlcy4KLSAgICAv
LyBUaGUgPGJsb2NrZmxvdz48aW5saW5lPiN0ZXh0PC9pbmxpbmU+PC9ibG9ja2Zsb3c+IGNhc2Ug
aXMgYWxzbyBwb3B1bGFyIGFuZCBzaG91bGQgYmUgcmVsYXRpdmVseSBlYXN5IHRvIGNvdmVyLgot
ICAgIGZvciAoY29uc3QgYXV0byogY2hpbGQgPSBmbG93LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7KSB7
Ci0gICAgICAgIGlmIChjaGlsZC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6Okhp
Z2hsaWdodFN0YXRlOjpOb25lKQotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lG
X05FRURFRChGbG93Q2hpbGRJc1NlbGVjdGVkLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0g
ICAgICAgIGlmIChpczxSZW5kZXJUZXh0PigqY2hpbGQpKSB7Ci0gICAgICAgICAgICBjb25zdCBh
dXRvJiByZW5kZXJUZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmNoaWxkKTsKLSAgICAgICAg
ICAgIGlmIChyZW5kZXJUZXh0LnRleHROb2RlKCkgJiYgIXJlbmRlclRleHQuZG9jdW1lbnQoKS5t
YXJrZXJzKCkubWFya2Vyc0ZvcigqcmVuZGVyVGV4dC50ZXh0Tm9kZSgpKS5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SW5jbHVk
ZXNEb2N1bWVudE1hcmtlcnMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgICAg
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoaXM8UmVuZGVyTGluZUJyZWFrPihjaGlsZCkgJiYgIWRvd25j
YXN0PFJlbmRlckxpbmVCcmVhaz4oKmNoaWxkKS5pc1dCUigpICYmIGNoaWxkLT5zdHlsZSgpLmNs
ZWFyKCkgPT0gQ2xlYXI6Ok5vbmUpIHsKLSAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBTRVRf
UkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNOb25TdXBwb3J0ZWRDaGlsZCwgcmVh
c29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgYXV0byBz
dHlsZVJlYXNvbnMgPSBjYW5Vc2VGb3JTdHlsZShmbG93LnN0eWxlKCksIGluY2x1ZGVSZWFzb25z
KTsKLSAgICBpZiAoc3R5bGVSZWFzb25zICE9IE5vUmVhc29uKQotICAgICAgICBTRVRfUkVBU09O
X0FORF9SRVRVUk5fSUZfTkVFREVEKHN0eWxlUmVhc29ucywgcmVhc29ucywgaW5jbHVkZVJlYXNv
bnMpOwotICAgIC8vIFdlIGNhbid0IHVzZSB0aGUgY29kZSBwYXRoIGlmIGFueSBsaW5lcyB3b3Vs
ZCBuZWVkIHRvIGJlIHNoaWZ0ZWQgYmVsb3cgZmxvYXRzLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZG9u
J3Qga2VlcCBwZXItbGluZSB5IGNvb3JkaW5hdGVzLgotICAgIGlmIChmbG93LmNvbnRhaW5zRmxv
YXRzKCkpIHsKLSAgICAgICAgZmxvYXQgbWluaW11bVdpZHRoTmVlZGVkID0gc3RkOjpudW1lcmlj
X2xpbWl0czxmbG9hdD46Om1heCgpOwotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRleHRSZW5k
ZXJlciA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlclRleHQ+KGZsb3cpKSB7Ci0gICAgICAgICAgICBt
aW5pbXVtV2lkdGhOZWVkZWQgPSBzdGQ6Om1pbihtaW5pbXVtV2lkdGhOZWVkZWQsIHRleHRSZW5k
ZXJlci5taW5Mb2dpY2FsV2lkdGgoKSk7Ci0KLSAgICAgICAgICAgIGZvciAoYXV0byYgZmxvYXRp
bmdPYmplY3QgOiAqZmxvdy5mbG9hdGluZ09iamVjdFNldCgpKSB7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKGZsb2F0aW5nT2JqZWN0KTsKLSAgICAgICAgICAgICAgICAvLyBpZiBhIGZsb2F0IGhh
cyBhIHNoYXBlLCB3ZSBjYW5ub3QgdGVsbCBpZiBjb250ZW50IHdpbGwgbmVlZCB0byBiZSBzaGlm
dGVkIHVudGlsIGFmdGVyIHdlIGxheSBpdCBvdXQsCi0gICAgICAgICAgICAgICAgLy8gc2luY2Ug
dGhlIGFtb3VudCBvZiBzcGFjZSBpcyBub3QgdW5pZm9ybSBmb3IgdGhlIGhlaWdodCBvZiB0aGUg
ZmxvYXQuCi0gICAgICAgICAgICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLnNo
YXBlT3V0c2lkZUluZm8oKSkKLSAgICAgICAgICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVU
VVJOX0lGX05FRURFRChGbG93SGFzVW5zdXBwb3J0ZWRGbG9hdCwgcmVhc29ucywgaW5jbHVkZVJl
YXNvbnMpOwotICAgICAgICAgICAgICAgIGZsb2F0IGF2YWlsYWJsZVdpZHRoID0gZmxvdy5hdmFp
bGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lKGZsb2F0aW5nT2JqZWN0LT55KCksIERvTm90SW5kZW50
VGV4dCk7Ci0gICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZVdpZHRoIDwgbWluaW11bVdpZHRo
TmVlZGVkKQotICAgICAgICAgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVF
REVEKEZsb3dIYXNVbnN1cHBvcnRlZEZsb2F0LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYXV0byBmb250QW5kVGV4dFJlYXNv
bnMgPSBjYW5Vc2VGb3JGb250QW5kVGV4dChmbG93LCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYg
KGZvbnRBbmRUZXh0UmVhc29ucyAhPSBOb1JlYXNvbikKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRf
UkVUVVJOX0lGX05FRURFRChmb250QW5kVGV4dFJlYXNvbnMsIHJlYXNvbnMsIGluY2x1ZGVSZWFz
b25zKTsKLSAgICByZXR1cm4gcmVhc29uczsKLX0KLQotYm9vbCBjYW5Vc2VGb3IoY29uc3QgUmVu
ZGVyQmxvY2tGbG93JiBmbG93KQotewotICAgIHJldHVybiBjYW5Vc2VGb3JXaXRoUmVhc29uKGZs
b3csIEluY2x1ZGVSZWFzb25zOjpGaXJzdCkgPT0gTm9SZWFzb247Ci19Ci0KLWJvb2wgY2FuVXNl
Rm9yQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrQ29udGFpbmVy
LCBTdHlsZURpZmZlcmVuY2UgZGlmZikKLXsKLSAgICBzd2l0Y2ggKGRpZmYpIHsKLSAgICBjYXNl
IFN0eWxlRGlmZmVyZW5jZTo6RXF1YWw6Ci0gICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6OlJlY29t
cG9zaXRlTGF5ZXI6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgU3R5bGVEaWZmZXJl
bmNlOjpSZXBhaW50OgotICAgIGNhc2UgU3R5bGVEaWZmZXJlbmNlOjpSZXBhaW50SWZUZXh0T3JC
b3JkZXJPck91dGxpbmU6Ci0gICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6OlJlcGFpbnRMYXllcjoK
LSAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGRvIGEgbW9yZSBmb2N1c2VkIHN0eWxlIGNoZWNr
IGJ5IG1hdGNoaW5nIFJlbmRlcmVyU3R5bGU6OmNoYW5nZVJlcXVpcmVzUmVwYWludCZjby4KLSAg
ICAgICAgcmV0dXJuIGNhblVzZUZvclN0eWxlKGJsb2NrQ29udGFpbmVyLnN0eWxlKCksIEluY2x1
ZGVSZWFzb25zOjpGaXJzdCkgPT0gTm9SZWFzb247Ci0gICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6
OkxheW91dFBvc2l0aW9uZWRNb3ZlbWVudE9ubHk6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGNhc2UgU3R5bGVEaWZmZXJlbmNlOjpTaW1wbGlmaWVkTGF5b3V0OgotICAgIGNhc2UgU3R5bGVE
aWZmZXJlbmNlOjpTaW1wbGlmaWVkTGF5b3V0QW5kUG9zaXRpb25lZE1vdmVtZW50OgotICAgICAg
ICByZXR1cm4gY2FuVXNlRm9yU3R5bGUoYmxvY2tDb250YWluZXIuc3R5bGUoKSwgSW5jbHVkZVJl
YXNvbnM6OkZpcnN0KSA9PSBOb1JlYXNvbjsKLSAgICBjYXNlIFN0eWxlRGlmZmVyZW5jZTo6TGF5
b3V0OgotICAgIGNhc2UgU3R5bGVEaWZmZXJlbmNlOjpOZXdTdHlsZToKLSAgICAgICAgcmV0dXJu
IGNhblVzZUZvcihibG9ja0NvbnRhaW5lcik7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBjYW5Vc2VGb3IoYmxvY2tDb250YWluZXIpOwotfQotCi1zdGF0aWMg
dm9pZCByZXZlcnRBbGxSdW5zT25DdXJyZW50TGluZShMYXlvdXQ6OlJ1blZlY3RvciYgcnVucykK
LXsKLSAgICB3aGlsZSAoIXJ1bnMuaXNFbXB0eSgpICYmICFydW5zLmxhc3QoKS5pc0VuZE9mTGlu
ZSkKLSAgICAgICAgcnVucy5yZW1vdmVMYXN0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJldmVydFJ1
bnMoTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIHVuc2lnbmVkIHBvc2l0aW9uVG9SZXZlcnRUbywg
ZmxvYXQgd2lkdGgpCi17Ci0gICAgd2hpbGUgKHJ1bnMuc2l6ZSgpKSB7Ci0gICAgICAgIGF1dG8m
IGxhc3RSdW4gPSBydW5zLmxhc3QoKTsKLSAgICAgICAgaWYgKGxhc3RSdW4uZW5kIDw9IHBvc2l0
aW9uVG9SZXZlcnRUbykKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAobGFzdFJ1bi5z
dGFydCA+PSBwb3NpdGlvblRvUmV2ZXJ0VG8pIHsKLSAgICAgICAgICAgIC8vIFJldmVydCB0aGlz
IHJ1biBjb21wbGV0ZWx5LgotICAgICAgICAgICAgd2lkdGggLT0gKGxhc3RSdW4ubG9naWNhbFJp
Z2h0IC0gbGFzdFJ1bi5sb2dpY2FsTGVmdCk7Ci0gICAgICAgICAgICBydW5zLnJlbW92ZUxhc3Qo
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxhc3RSdW4ubG9naWNhbFJpZ2h0IC09
IHdpZHRoOwotICAgICAgICAgICAgd2lkdGggPSAwOwotICAgICAgICAgICAgbGFzdFJ1bi5lbmQg
PSBwb3NpdGlvblRvUmV2ZXJ0VG87Ci0gICAgICAgICAgICAvLyBQYXJ0aWFsIHJlbW92YWwuCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotY2xhc3MgTGluZVN0YXRl
IHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEF2YWlsYWJsZVdpZHRoKGZsb2F0IHdpZHRoKSB7IG1f
YXZhaWxhYmxlV2lkdGggPSB3aWR0aDsgfQotICAgIHZvaWQgc2V0Q29sbGFwZWRXaGl0ZXNwYWNl
V2lkdGgoZmxvYXQgd2lkdGgpIHsgbV9jb2xsYXBzZWRXaGl0ZXNwYWNlV2lkdGggPSB3aWR0aDsg
fQotICAgIHZvaWQgc2V0TG9naWNhbExlZnRPZmZzZXQoZmxvYXQgb2Zmc2V0KSB7IG1fbG9naWNh
bExlZnRPZmZzZXQgPSBvZmZzZXQ7IH0KLSAgICB2b2lkIHNldE92ZXJmbG93ZWRGcmFnbWVudChj
b25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudCkgeyBtX292
ZXJmbG93ZWRGcmFnbWVudCA9IGZyYWdtZW50OyB9Ci0gICAgdm9pZCBzZXROZWVkc0FsbEZyYWdt
ZW50cygpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1fZnJhZ21lbnRzKTsKLSAgICAgICAgbV9m
cmFnbWVudHMuZW1wbGFjZSgpOwotICAgIH0KLSAgICB2b2lkIHNldEh5cGhlbmF0aW9uRGlzYWJs
ZWQoKSB7IG1faHlwaGVuYXRpb25EaXNhYmxlZCA9IHRydWU7IH0KLSAgICBib29sIGlzSHlwaGVu
YXRpb25EaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faHlwaGVuYXRpb25EaXNhYmxlZDsgfQot
Ci0gICAgZmxvYXQgYXZhaWxhYmxlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2F2YWlsYWJsZVdp
ZHRoOyB9Ci0gICAgZmxvYXQgbG9naWNhbExlZnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2xv
Z2ljYWxMZWZ0T2Zmc2V0OyB9Ci0gICAgY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRG
cmFnbWVudCYgb3ZlcmZsb3dlZEZyYWdtZW50KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvd2Vk
RnJhZ21lbnQ7IH0KLSAgICBib29sIGhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbGFzdEZyYWdtZW50LnR5cGUoKSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZy
YWdtZW50OjpXaGl0ZXNwYWNlICYmIG1fbGFzdEZyYWdtZW50Lmxlbmd0aCgpID4gMDsgfQotICAg
IGJvb2wgaGFzV2hpdGVzcGFjZUZyYWdtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFdoaXRl
c3BhY2VGcmFnbWVudCAhPSBXVEY6Om51bGxvcHQ7IH0KLSAgICBUZXh0RnJhZ21lbnRJdGVyYXRv
cjo6VGV4dEZyYWdtZW50IGxhc3RGcmFnbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEZyYWdt
ZW50OyB9Ci0gICAgYm9vbCBpc1doaXRlc3BhY2VPbmx5KCkgY29uc3QgeyByZXR1cm4gbV90cmFp
bGluZ1doaXRlc3BhY2VXaWR0aCAmJiBtX3J1bnNXaWR0aCA9PSBtX3RyYWlsaW5nV2hpdGVzcGFj
ZVdpZHRoOyB9Ci0gICAgYm9vbCBmaXRzKGZsb2F0IGV4dHJhKSBjb25zdCB7IHJldHVybiBtX2F2
YWlsYWJsZVdpZHRoID49IG1fcnVuc1dpZHRoICsgZXh0cmE7IH0KLSAgICBib29sIGZpcnN0Q2hh
cmFjdGVyRml0cygpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RDaGFyYWN0ZXJGaXRzOyB9Ci0gICAg
ZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3J1bnNXaWR0aDsgfQotICAgIHN0ZDo6cGFp
cjx1bnNpZ25lZCwgYm9vbD4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCh1bnNpZ25lZCBmcm9t
LCB1bnNpZ25lZCB0bykgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2ZyYWdtZW50cyk7
Ci0gICAgICAgIC8vIGxpbmVicmVhayBydW5zIGFyZSBzcGVjaWFsLgotICAgICAgICBpZiAoZnJv
bSA9PSB0bykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcigwLCBmYWxzZSk7Ci0g
ICAgICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSAwOwotICAgICAgICBh
dXRvIHByZXZpb3VzRnJhZ21lbnRUeXBlID0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFn
bWVudDo6Q29udGVudEVuZDsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBmcmFnbWVudCA6ICpt
X2ZyYWdtZW50cykgewotICAgICAgICAgICAgaWYgKGZyYWdtZW50LmVuZCgpIDw9IGZyb20pCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBhdXRvIGN1cnJlbnRGcmFnbWVu
dFR5cGUgPSBmcmFnbWVudC50eXBlKCk7Ci0gICAgICAgICAgICBhdXRvIGV4cGFuc2lvbk9wcG9y
dHVuaXR5ID0gdGhpcy0+ZXhwYW5zaW9uT3Bwb3J0dW5pdHkoY3VycmVudEZyYWdtZW50VHlwZSwg
cHJldmlvdXNGcmFnbWVudFR5cGUpOwotICAgICAgICAgICAgaWYgKGV4cGFuc2lvbk9wcG9ydHVu
aXR5KQotICAgICAgICAgICAgICAgICsrZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsKLSAgICAg
ICAgICAgIHByZXZpb3VzRnJhZ21lbnRUeXBlID0gY3VycmVudEZyYWdtZW50VHlwZTsKLSAgICAg
ICAgICAgIGlmIChmcmFnbWVudC5lbmQoKSA+PSB0bykKLSAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3BhaXIoZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCwgZXhwYW5zaW9uT3Bwb3J0
dW5pdHkpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCwgZmFsc2Up
OwotICAgIH0KLQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAo
IW1fbGFzdEZyYWdtZW50LmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBpZiAoIW1fbGFzdENvbXBsZXRlRnJhZ21lbnQuaXNFbXB0eSgpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gbV9sYXN0RnJhZ21lbnQub3ZlcmxhcHNUb05l
eHRSZW5kZXJlcigpOwotICAgIH0KLQotICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZW5kUG9z
aXRpb25Gb3JDb2xsYXBzZWRGcmFnbWVudChjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4
dEZyYWdtZW50JiBmcmFnbWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmcmFnbWVudC5pc0Nv
bGxhcHNlZCgpID8gZnJhZ21lbnQuc3RhcnQoKSArIDEgOiBmcmFnbWVudC5lbmQoKTsKLSAgICB9
Ci0KLSAgICB2b2lkIGFwcGVuZEZyYWdtZW50QW5kQ3JlYXRlUnVuSWZOZWVkZWQoY29uc3QgVGV4
dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCYgZnJhZ21lbnQsIExheW91dDo6UnVuVmVj
dG9yJiBydW5zKQotICAgIHsKLSAgICAgICAgLy8gQWRqdXN0IGVuZCBwb3NpdGlvbiB3aGlsZSBj
b2xsYXBzaW5nLgotICAgICAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IGVuZFBvc2l0aW9uRm9y
Q29sbGFwc2VkRnJhZ21lbnQoZnJhZ21lbnQpOwotICAgICAgICAvLyBOZXcgbGluZSBuZWVkcyBu
ZXcgcnVuLgotICAgICAgICBpZiAoIW1fcnVuc1dpZHRoKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
IW1fdW5jb21wbGV0ZWRXaWR0aCk7Ci0gICAgICAgICAgICBydW5zLmFwcGVuZChSdW4oZnJhZ21l
bnQuc3RhcnQoKSwgZW5kUG9zaXRpb24sIG1fcnVuc1dpZHRoLCBtX3J1bnNXaWR0aCArIGZyYWdt
ZW50LndpZHRoKCksIGZhbHNlLCBmcmFnbWVudC5oYXNIeXBoZW4oKSwgZnJhZ21lbnQuaXNMaW5l
QnJlYWsoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQWR2YW5jZSBsYXN0
IGNvbXBsZXRlZCBmcmFnbWVudCB3aGVuIHRoZSBwcmV2aW91cyBmcmFnbWVudCBpcyBhbGwgc2V0
IChpbmNsdWRpbmcgbXVsdGlwbGUgcGFydHMgYWNyb3NzIHJlbmRlcmVycykKLSAgICAgICAgICAg
IGlmICgobV9sYXN0RnJhZ21lbnQudHlwZSgpICE9IGZyYWdtZW50LnR5cGUoKSkgfHwgIW1fbGFz
dEZyYWdtZW50Lm92ZXJsYXBzVG9OZXh0UmVuZGVyZXIoKSkgewotICAgICAgICAgICAgICAgIG1f
bGFzdENvbXBsZXRlRnJhZ21lbnQgPSBtX2xhc3RGcmFnbWVudDsKLSAgICAgICAgICAgICAgICBt
X3VuY29tcGxldGVkV2lkdGggPSBmcmFnbWVudC53aWR0aCgpOwotICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgbV91bmNvbXBsZXRlZFdpZHRoICs9IGZyYWdtZW50LndpZHRoKCk7
Ci0gICAgICAgICAgICAvLyBDb2xsYXBzZSBuZWlnaGJvdXJpbmcgd2hpdGVzcGFjZSwgaWYgdGhl
eSBhcmUgYWNyb3NzIG11bHRpcGxlIHJlbmRlcmVycyBhbmQgYXJlIG5vdCBjb2xsYXBzZWQgeWV0
LgotICAgICAgICAgICAgaWYgKG1fbGFzdEZyYWdtZW50LmlzQ29sbGFwc2libGUoKSAmJiBmcmFn
bWVudC5pc0NvbGxhcHNpYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9sYXN0RnJh
Z21lbnQuaXNMYXN0SW5SZW5kZXJlcigpKTsKLSAgICAgICAgICAgICAgICBpZiAoIW1fbGFzdEZy
YWdtZW50LmlzQ29sbGFwc2VkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTGluZSB3aWR0
aCBuZWVkcyB0byBiZSBhZGp1c3RlZCBzbyB0aGF0IG5vdyBpdCB0YWtlcyBjb2xsYXBzaW5nIGlu
dG8gY29uc2lkZXJhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgbV9ydW5zV2lkdGggLT0gKG1f
bGFzdEZyYWdtZW50LndpZHRoKCkgLSBtX2NvbGxhcHNlZFdoaXRlc3BhY2VXaWR0aCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIFRoaXMgZnJhZ21lbnQgaXMgY29sbGFw
c2VkIGNvbXBsZXRlbHkuIE5vIHJ1biBpcyBuZWVkZWQuCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUnVuJiBsYXN0UnVuID0gcnVucy5sYXN0KCk7
Ci0gICAgICAgICAgICBpZiAobV9sYXN0RnJhZ21lbnQuaXNMYXN0SW5SZW5kZXJlcigpIHx8IG1f
bGFzdEZyYWdtZW50LmlzQ29sbGFwc2VkKCkgfHwgZnJhZ21lbnQuaXNMaW5lQnJlYWsoKSB8fCBs
YXN0UnVuLmlzTGluZUJyZWFrKQotICAgICAgICAgICAgICAgIHJ1bnMuYXBwZW5kKFJ1bihmcmFn
bWVudC5zdGFydCgpLCBlbmRQb3NpdGlvbiwgbV9ydW5zV2lkdGgsIG1fcnVuc1dpZHRoICsgZnJh
Z21lbnQud2lkdGgoKSwgZmFsc2UsIGZyYWdtZW50Lmhhc0h5cGhlbigpLCBmcmFnbWVudC5pc0xp
bmVCcmVhaygpKSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBsYXN0UnVu
LmVuZCA9IGVuZFBvc2l0aW9uOwotICAgICAgICAgICAgICAgIGxhc3RSdW4ubG9naWNhbFJpZ2h0
ICs9IGZyYWdtZW50LndpZHRoKCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFsYXN0UnVuLmhh
c0h5cGhlbik7Ci0gICAgICAgICAgICAgICAgbGFzdFJ1bi5oYXNIeXBoZW4gPSBmcmFnbWVudC5o
YXNIeXBoZW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtX3J1bnNXaWR0
aCArPSBmcmFnbWVudC53aWR0aCgpOwotICAgICAgICBtX2xhc3RGcmFnbWVudCA9IGZyYWdtZW50
OwotICAgICAgICBpZiAobV9mcmFnbWVudHMpCi0gICAgICAgICAgICAoKm1fZnJhZ21lbnRzKS5h
cHBlbmQoZnJhZ21lbnQpOwotCi0gICAgICAgIGlmIChmcmFnbWVudC50eXBlKCkgPT0gVGV4dEZy
YWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6V2hpdGVzcGFjZSkgewotICAgICAgICAgICAg
bV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCArPSBmcmFnbWVudC53aWR0aCgpOwotICAgICAgICAg
ICAgbV9sYXN0V2hpdGVzcGFjZUZyYWdtZW50ID0gZnJhZ21lbnQ7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoID0gMDsKLSAgICAgICAgICAg
IG1fbGFzdE5vbldoaXRlc3BhY2VGcmFnbWVudCA9IGZyYWdtZW50OwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKCFtX2ZpcnN0Q2hhcmFjdGVyRml0cykKLSAgICAgICAgICAgIG1fZmlyc3RDaGFy
YWN0ZXJGaXRzID0gZnJhZ21lbnQuc3RhcnQoKSArIDEgPiBlbmRQb3NpdGlvbiB8fCBtX3J1bnNX
aWR0aCA8PSBtX2F2YWlsYWJsZVdpZHRoOwotICAgIH0KLQotICAgIFRleHRGcmFnbWVudEl0ZXJh
dG9yOjpUZXh0RnJhZ21lbnQgcmV2ZXJ0VG9MYXN0Q29tcGxldGVGcmFnbWVudChMYXlvdXQ6OlJ1
blZlY3RvciYgcnVucykKLSAgICB7Ci0gICAgICAgIGlmICghbV91bmNvbXBsZXRlZFdpZHRoKSB7
Ci0gICAgICAgICAgICBBU1NFUlQobV9sYXN0RnJhZ21lbnQgPT0gbV9sYXN0Q29tcGxldGVGcmFn
bWVudCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9sYXN0RnJhZ21lbnQ7Ci0gICAgICAgIH0KLSAg
ICAgICAgQVNTRVJUKG1fbGFzdEZyYWdtZW50LmlzVmFsaWQoKSk7Ci0gICAgICAgIG1fcnVuc1dp
ZHRoIC09IG1fdW5jb21wbGV0ZWRXaWR0aDsKLSAgICAgICAgcmV2ZXJ0UnVucyhydW5zLCBlbmRQ
b3NpdGlvbkZvckNvbGxhcHNlZEZyYWdtZW50KG1fbGFzdENvbXBsZXRlRnJhZ21lbnQpLCBtX3Vu
Y29tcGxldGVkV2lkdGgpOwotICAgICAgICBtX3VuY29tcGxldGVkV2lkdGggPSAwOwotICAgICAg
ICBBU1NFUlQobV9sYXN0Q29tcGxldGVGcmFnbWVudC5pc1ZhbGlkKCkpOwotICAgICAgICByZXR1
cm4gbV9sYXN0Q29tcGxldGVGcmFnbWVudDsKLSAgICB9Ci0KLSAgICB2b2lkIHJlbW92ZVRyYWls
aW5nV2hpdGVzcGFjZShMYXlvdXQ6OlJ1blZlY3RvciYgcnVucykKLSAgICB7Ci0gICAgICAgIGlm
ICghaGFzVHJhaWxpbmdXaGl0ZXNwYWNlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGlmIChtX2xhc3ROb25XaGl0ZXNwYWNlRnJhZ21lbnQpIHsKLSAgICAgICAgICAgIGF1dG8gbmVl
ZHNSZXZlcnRpbmcgPSBtX2xhc3ROb25XaGl0ZXNwYWNlRnJhZ21lbnQtPmVuZCgpICE9IG1fbGFz
dEZyYWdtZW50LmVuZCgpOwotICAgICAgICAgICAgLy8gVHJhaWxpbmcgd2hpdGVzcGFjZSBmcmFn
bWVudCBtaWdodCBhY3R1YWxseSBoYXZlIHplcm8gbGVuZ3RoLgotICAgICAgICAgICAgQVNTRVJU
KG5lZWRzUmV2ZXJ0aW5nIHx8ICFtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKTsKLSAgICAgICAg
ICAgIGlmIChuZWVkc1JldmVydGluZykgewotICAgICAgICAgICAgICAgIHJldmVydFJ1bnMocnVu
cywgbV9sYXN0Tm9uV2hpdGVzcGFjZUZyYWdtZW50LT5lbmQoKSwgbV90cmFpbGluZ1doaXRlc3Bh
Y2VXaWR0aCk7Ci0gICAgICAgICAgICAgICAgbV9ydW5zV2lkdGggLT0gbV90cmFpbGluZ1doaXRl
c3BhY2VXaWR0aDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNw
YWNlV2lkdGggPSAwOwotICAgICAgICAgICAgbV9sYXN0RnJhZ21lbnQgPSAqbV9sYXN0Tm9uV2hp
dGVzcGFjZUZyYWdtZW50OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IC8vIFRoaXMgbGluZSBpcyBhbGwgd2hpdGVzcGFjZS4KLSAgICAgICAgcmV2ZXJ0QWxsUnVuc09u
Q3VycmVudExpbmUocnVucyk7Ci0gICAgICAgIG1fcnVuc1dpZHRoID0gMDsKLSAgICAgICAgbV90
cmFpbGluZ1doaXRlc3BhY2VXaWR0aCA9IDA7Ci0gICAgICAgIC8vIEZJWE1FOiBNYWtlIG1fbGFz
dEZyYWdtZW50IG9wdGlvbmFsLgotICAgICAgICBtX2xhc3RGcmFnbWVudCA9IFRleHRGcmFnbWVu
dEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQoKTsKLSAgICB9Ci0KLSAgICBmbG9hdCB0cmFpbGluZ1do
aXRlc3BhY2VXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGg7
IH0KLQotcHJpdmF0ZToKLSAgICBib29sIGV4cGFuc2lvbk9wcG9ydHVuaXR5KFRleHRGcmFnbWVu
dEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OlR5cGUgY3VycmVudEZyYWdtZW50VHlwZSwgVGV4dEZy
YWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6VHlwZSBwcmV2aW91c0ZyYWdtZW50VHlwZSkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAoY3VycmVudEZyYWdtZW50VHlwZSA9PSBUZXh0
RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlCi0gICAgICAgICAgICB8
fCAoY3VycmVudEZyYWdtZW50VHlwZSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdt
ZW50OjpOb25XaGl0ZXNwYWNlICYmIHByZXZpb3VzRnJhZ21lbnRUeXBlID09IFRleHRGcmFnbWVu
dEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6Ok5vbldoaXRlc3BhY2UpKTsKLSAgICB9Ci0KLSAgICBm
bG9hdCBtX2F2YWlsYWJsZVdpZHRoIHsgMCB9OwotICAgIGZsb2F0IG1fbG9naWNhbExlZnRPZmZz
ZXQgeyAwIH07Ci0gICAgZmxvYXQgbV9ydW5zV2lkdGggeyAwIH07Ci0gICAgVGV4dEZyYWdtZW50
SXRlcmF0b3I6OlRleHRGcmFnbWVudCBtX292ZXJmbG93ZWRGcmFnbWVudDsKLSAgICBUZXh0RnJh
Z21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IG1fbGFzdEZyYWdtZW50OwotICAgIE9wdGlvbmFs
PFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ+IG1fbGFzdE5vbldoaXRlc3BhY2VG
cmFnbWVudDsKLSAgICBPcHRpb25hbDxUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50
PiBtX2xhc3RXaGl0ZXNwYWNlRnJhZ21lbnQ7Ci0gICAgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRl
eHRGcmFnbWVudCBtX2xhc3RDb21wbGV0ZUZyYWdtZW50OwotICAgIGZsb2F0IG1fdW5jb21wbGV0
ZWRXaWR0aCB7IDAgfTsKLSAgICBmbG9hdCBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoIHsgMCB9
OyAvLyBVc2UgdGhpcyB0byByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZSB3aXRob3V0IHJlLW1l
c3VyaW5nIHRoZSB0ZXh0LgotICAgIGZsb2F0IG1fY29sbGFwc2VkV2hpdGVzcGFjZVdpZHRoIHsg
MCB9OwotICAgIC8vIEhhdmluZyBvbmUgY2hhcmFjdGVyIG9uIHRoZSBsaW5lIGRvZXMgbm90IG5l
Y2Vzc2FyaWx5IG1lYW4gaXQgYWN0dWFsbHkgZml0cy4KLSAgICAvLyBGaXJzdCBjaGFyYWN0ZXIg
b2YgdGhlIGZpcnN0IGZyYWdtZW50IG1pZ2h0IGJlIGZvcmNlZCBvbiB0byB0aGUgY3VycmVudCBs
aW5lIGV2ZW4gaWYgaXQgZG9lcyBub3QgZml0LgotICAgIGJvb2wgbV9maXJzdENoYXJhY3RlckZp
dHMgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oeXBoZW5hdGlvbkRpc2FibGVkIHsgZmFsc2UgfTsK
LSAgICBPcHRpb25hbDxWZWN0b3I8VGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCwg
MzA+PiBtX2ZyYWdtZW50czsKLX07Ci0KLXN0YXRpYyBmbG9hdCBjb21wdXRlTGluZUxlZnQoY29u
c3QgTGluZVN0YXRlJiBsaW5lLCBUZXh0QWxpZ25Nb2RlIHRleHRBbGlnbiwgZmxvYXQmIGhhbmdp
bmdXaGl0ZXNwYWNlV2lkdGgpCi17Ci0gICAgZmxvYXQgdG90YWxXaWR0aCA9IGxpbmUud2lkdGgo
KSAtIGhhbmdpbmdXaGl0ZXNwYWNlV2lkdGg7Ci0gICAgZmxvYXQgcmVtYWluaW5nV2lkdGggPSBs
aW5lLmF2YWlsYWJsZVdpZHRoKCkgLSB0b3RhbFdpZHRoOwotICAgIGZsb2F0IGxlZnQgPSBsaW5l
LmxvZ2ljYWxMZWZ0T2Zmc2V0KCk7Ci0gICAgc3dpdGNoICh0ZXh0QWxpZ24pIHsKLSAgICBjYXNl
IFRleHRBbGlnbk1vZGU6OkxlZnQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0
OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6U3RhcnQ6Ci0gICAgICAgIGhhbmdpbmdXaGl0ZXNw
YWNlV2lkdGggPSBzdGQ6Om1heCgwLmYsIHN0ZDo6bWluKGhhbmdpbmdXaGl0ZXNwYWNlV2lkdGgs
IHJlbWFpbmluZ1dpZHRoKSk7Ci0gICAgICAgIHJldHVybiBsZWZ0OwotICAgIGNhc2UgVGV4dEFs
aWduTW9kZTo6UmlnaHQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodDoKLSAg
ICBjYXNlIFRleHRBbGlnbk1vZGU6OkVuZDoKLSAgICAgICAgaGFuZ2luZ1doaXRlc3BhY2VXaWR0
aCA9IDA7Ci0gICAgICAgIHJldHVybiBsZWZ0ICsgc3RkOjptYXg8ZmxvYXQ+KHJlbWFpbmluZ1dp
ZHRoLCAwKTsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRlcjoKLSAgICBjYXNlIFRleHRB
bGlnbk1vZGU6OldlYktpdENlbnRlcjoKLSAgICAgICAgaGFuZ2luZ1doaXRlc3BhY2VXaWR0aCA9
IHN0ZDo6bWF4KDAuZiwgc3RkOjptaW4oaGFuZ2luZ1doaXRlc3BhY2VXaWR0aCwgKHJlbWFpbmlu
Z1dpZHRoICsgMSkgLyAyKSk7Ci0gICAgICAgIHJldHVybiBsZWZ0ICsgc3RkOjptYXg8ZmxvYXQ+
KHJlbWFpbmluZ1dpZHRoIC8gMiwgMCk7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5
OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgYm9v
bCBwcmVXcmFwKGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpTdHlsZSYgc3R5bGUpCi17Ci0g
ICAgcmV0dXJuIHN0eWxlLndyYXBMaW5lcyAmJiAhc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlICYm
ICFzdHlsZS5icmVha1NwYWNlczsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlTGluZUNvbnN0cmFp
bnMoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBMaW5lU3RhdGUmIGxpbmUsIGNvbnN0IExp
bmVTdGF0ZSYgcHJldmlvdXNMaW5lLCB1bnNpZ25lZCYgbnVtYmVyT2ZQcmVjZWRpbmdMaW5lc1dp
dGhIeXBoZW4sIGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpTdHlsZSYgc3R5bGUsIGJvb2wg
aXNGaXJzdExpbmUpCi17Ci0gICAgYm9vbCBzaG91bGRBcHBseVRleHRJbmRlbnQgPSAhZmxvdy5p
c0Fub255bW91cygpIHx8IGZsb3cucGFyZW50KCktPmZpcnN0Q2hpbGQoKSA9PSAmZmxvdzsKLSAg
ICBMYXlvdXRVbml0IGhlaWdodCA9IGZsb3cubG9naWNhbEhlaWdodCgpOwotICAgIExheW91dFVu
aXQgbG9naWNhbEhlaWdodCA9IGZsb3cubWluTGluZUhlaWdodEZvclJlcGxhY2VkUmVuZGVyZXIo
ZmFsc2UsIDApOwotICAgIGxpbmUuc2V0TG9naWNhbExlZnRPZmZzZXQoZmxvdy5sb2dpY2FsTGVm
dE9mZnNldEZvckxpbmUoaGVpZ2h0LCBEb05vdEluZGVudFRleHQsIGxvZ2ljYWxIZWlnaHQpICsg
KHNob3VsZEFwcGx5VGV4dEluZGVudCAmJiBpc0ZpcnN0TGluZSA/IGZsb3cudGV4dEluZGVudE9m
ZnNldCgpIDogMF9sdSkpOwotICAgIGZsb2F0IGxvZ2ljYWxSaWdodE9mZnNldCA9IGZsb3cubG9n
aWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShoZWlnaHQsIERvTm90SW5kZW50VGV4dCwgbG9naWNhbEhl
aWdodCk7Ci0gICAgbGluZS5zZXRBdmFpbGFibGVXaWR0aChzdGQ6Om1heDxmbG9hdD4oMCwgbG9n
aWNhbFJpZ2h0T2Zmc2V0IC0gbGluZS5sb2dpY2FsTGVmdE9mZnNldCgpKSk7Ci0gICAgaWYgKHN0
eWxlLnRleHRBbGlnbiA9PSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KQotICAgICAgICBsaW5lLnNl
dE5lZWRzQWxsRnJhZ21lbnRzKCk7Ci0gICAgbnVtYmVyT2ZQcmVjZWRpbmdMaW5lc1dpdGhIeXBo
ZW4gPSAocHJldmlvdXNMaW5lLmlzRW1wdHkoKSB8fCAhcHJldmlvdXNMaW5lLmxhc3RGcmFnbWVu
dCgpLmhhc0h5cGhlbigpKSA/IDAgOiBudW1iZXJPZlByZWNlZGluZ0xpbmVzV2l0aEh5cGhlbiAr
IDE7Ci0gICAgaWYgKHN0eWxlLmh5cGhlbkxpbWl0TGluZXMgJiYgbnVtYmVyT2ZQcmVjZWRpbmdM
aW5lc1dpdGhIeXBoZW4gPj0gKnN0eWxlLmh5cGhlbkxpbWl0TGluZXMpCi0gICAgICAgIGxpbmUu
c2V0SHlwaGVuYXRpb25EaXNhYmxlZCgpOwotICAgIGxpbmUuc2V0Q29sbGFwZWRXaGl0ZXNwYWNl
V2lkdGgoc3R5bGUuZm9udC5zcGFjZVdpZHRoKCkgKyBzdHlsZS53b3JkU3BhY2luZyk7Ci19Ci0K
LXN0cnVjdCBTcGxpdEZyYWdtZW50RGF0YSB7Ci0gICAgdW5zaWduZWQgcG9zaXRpb247Ci0gICAg
ZmxvYXQgd2lkdGg7Ci19Owotc3RhdGljIE9wdGlvbmFsPHVuc2lnbmVkPiBoeXBoZW5Qb3NpdGlv
bkZvckZyYWdtZW50KFNwbGl0RnJhZ21lbnREYXRhIHNwbGl0RGF0YSwgY29uc3QgVGV4dEZyYWdt
ZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCYgZnJhZ21lbnRUb1NwbGl0LAotICAgIGNvbnN0IExp
bmVTdGF0ZSYgbGluZSwgY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3ImIHRleHRGcmFnbWVudEl0
ZXJhdG9yLCBmbG9hdCBhdmFpbGFibGVXaWR0aCkKLXsKLSAgICBhdXRvJiBzdHlsZSA9IHRleHRG
cmFnbWVudEl0ZXJhdG9yLnN0eWxlKCk7Ci0gICAgaWYgKCFzdHlsZS5zaG91bGRIeXBoZW5hdGUg
fHwgbGluZS5pc0h5cGhlbmF0aW9uRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3Igd2Via2l0Lm9y
Zy9iLzE2OTYxMy4gU2VlIG1heFByZWZpeFdpZHRoIGNvbXB1dGF0aW9uIGluIHRyeUh5cGhlbmF0
aW5nKCkuCi0gICAgLy8gSXQgZG9lcyBub3Qgd29yayBwcm9wZXJseSB3aXRoIG5vbi1jb2xsYXBz
ZWQgbGVhZGluZyB0YWJzIHdoZW4gZm9udCBpcyBlbmxhcmdlZC4KLSAgICBhdXRvIGFkanVzdGVk
QXZhaWxhYmxlV2lkdGggPSBhdmFpbGFibGVXaWR0aCAtIHN0eWxlLmh5cGhlblN0cmluZ1dpZHRo
OwotICAgIGlmICghbGluZS5pc0VtcHR5KCkpCi0gICAgICAgIGFkanVzdGVkQXZhaWxhYmxlV2lk
dGggKz0gc3R5bGUuZm9udC5zcGFjZVdpZHRoKCk7Ci0gICAgaWYgKCFlbm91Z2hXaWR0aEZvckh5
cGhlbmF0aW9uKGFkanVzdGVkQXZhaWxhYmxlV2lkdGgsIHN0eWxlLmZvbnQucGl4ZWxTaXplKCkp
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgLy8gV2UgbWlnaHQgYmUgYWJs
ZSB0byBmaXQgdGhlIGh5cGhlbiBhdCB0aGUgc3BsaXQgcG9zaXRpb24uCi0gICAgYXV0byBzcGxp
dFBvc2l0aW9uV2l0aEh5cGhlbiA9IHNwbGl0RGF0YS5wb3NpdGlvbjsKLSAgICAvLyBGaW5kIGEg
c3BsaXR0aW5nIHBvc2l0aW9uIHdoZXJlIGh5cGhlbiBzdXJlbHkgZml0cy4KLSAgICB1bnNpZ25l
ZCBzdGFydCA9IGZyYWdtZW50VG9TcGxpdC5zdGFydCgpOwotICAgIGF1dG8gbGVmdFNpZGVXaWR0
aCA9IHNwbGl0RGF0YS53aWR0aDsKLSAgICB3aGlsZSAobGVmdFNpZGVXaWR0aCArIHN0eWxlLmh5
cGhlblN0cmluZ1dpZHRoID4gYXZhaWxhYmxlV2lkdGgpIHsKLSAgICAgICAgaWYgKC0tc3BsaXRQ
b3NpdGlvbldpdGhIeXBoZW4gPD0gc3RhcnQpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OyAvLyBObyBzcGFjZSBmb3IgaHlwaGVuLgotICAgICAgICBsZWZ0U2lkZVdpZHRoIC09IHRl
eHRGcmFnbWVudEl0ZXJhdG9yLnRleHRXaWR0aChzcGxpdFBvc2l0aW9uV2l0aEh5cGhlbiwgc3Bs
aXRQb3NpdGlvbldpdGhIeXBoZW4gKyAxLCAwKTsKLSAgICB9Ci0gICAgQVNTRVJUKHNwbGl0UG9z
aXRpb25XaXRoSHlwaGVuID4gc3RhcnQpOwotICAgIHJldHVybiB0ZXh0RnJhZ21lbnRJdGVyYXRv
ci5sYXN0SHlwaGVuUG9zaXRpb24oZnJhZ21lbnRUb1NwbGl0LCBzcGxpdFBvc2l0aW9uV2l0aEh5
cGhlbiArIDEpOwotfQotCi1zdGF0aWMgU3BsaXRGcmFnbWVudERhdGEgc3BsaXQoY29uc3QgVGV4
dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCYgZnJhZ21lbnQsIGZsb2F0IGF2YWlsYWJs
ZVdpZHRoLAotICAgIGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yJiB0ZXh0RnJhZ21lbnRJdGVy
YXRvcikKLXsKLSAgICBBU1NFUlQoYXZhaWxhYmxlV2lkdGggPj0gMCk7Ci0gICAgYXV0byBsZWZ0
ID0gZnJhZ21lbnQuc3RhcnQoKTsKLSAgICAvLyBQYXRob2xvZ2ljYWwgY2FzZSBvZiAoZXh0cmVt
ZWx5KWxvbmcgc3RyaW5nIGFuZCBuYXJyb3cgbGluZXMuCi0gICAgLy8gQWRqdXN0IHRoZSByYW5n
ZSBzbyB0aGF0IHdlIGNhbiBwaWNrIGEgcmVhc29uYWJsZSBtaWRwb2ludC4KLSAgICBhdXRvIGF2
ZXJhZ2VDaGFyYWN0ZXJXaWR0aCA9IGZyYWdtZW50LndpZHRoKCkgLyBmcmFnbWVudC5sZW5ndGgo
KTsKLSAgICBhdXRvIHJpZ2h0ID0gc3RkOjptaW48dW5zaWduZWQ+KGxlZnQgKyAoMiAqIGF2YWls
YWJsZVdpZHRoIC8gYXZlcmFnZUNoYXJhY3RlcldpZHRoKSwgZnJhZ21lbnQuZW5kKCkgLSAxKTsK
LSAgICAvLyBQcmVzZXJ2ZSB0aGUgbGVmdCB3aWR0aCBmb3IgdGhlIGZpbmFsIHNwbGl0IHBvc2l0
aW9uIHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byByZW1lYXN1cmUgdGhlIGxlZnQgc2lkZSBhZ2Fp
bi4KLSAgICBmbG9hdCBsZWZ0U2lkZVdpZHRoID0gMDsKLSAgICB3aGlsZSAobGVmdCA8IHJpZ2h0
KSB7Ci0gICAgICAgIGF1dG8gbWlkZGxlID0gKGxlZnQgKyByaWdodCkgLyAyOwotICAgICAgICBh
dXRvIHdpZHRoID0gdGV4dEZyYWdtZW50SXRlcmF0b3IudGV4dFdpZHRoKGZyYWdtZW50LnN0YXJ0
KCksIG1pZGRsZSArIDEsIDApOwotICAgICAgICBpZiAod2lkdGggPCBhdmFpbGFibGVXaWR0aCkg
ewotICAgICAgICAgICAgbGVmdCA9IG1pZGRsZSArIDE7Ci0gICAgICAgICAgICBsZWZ0U2lkZVdp
ZHRoID0gd2lkdGg7Ci0gICAgICAgIH0gZWxzZSBpZiAod2lkdGggPiBhdmFpbGFibGVXaWR0aCkK
LSAgICAgICAgICAgIHJpZ2h0ID0gbWlkZGxlOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IHJpZ2h0ID0gbWlkZGxlICsgMTsKLSAgICAgICAgICAgIGxlZnRTaWRlV2lkdGggPSB3aWR0aDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB7IHJpZ2h0
LCBsZWZ0U2lkZVdpZHRoIH07Ci19Ci0KLXN0YXRpYyBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4
dEZyYWdtZW50IHNwbGl0RnJhZ21lbnRUb0ZpdExpbmUoVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRl
eHRGcmFnbWVudCYgZnJhZ21lbnRUb1NwbGl0LAotICAgIGNvbnN0IExpbmVTdGF0ZSYgbGluZSwg
Y29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3ImIHRleHRGcmFnbWVudEl0ZXJhdG9yKQotewotICAg
IGF1dG8gYXZhaWxhYmxlV2lkdGggPSBsaW5lLmF2YWlsYWJsZVdpZHRoKCkgLSBsaW5lLndpZHRo
KCk7Ci0gICAgYXV0byBzcGxpdEZyYWdtZW50RGF0YSA9IHNwbGl0KGZyYWdtZW50VG9TcGxpdCwg
YXZhaWxhYmxlV2lkdGgsIHRleHRGcmFnbWVudEl0ZXJhdG9yKTsKLSAgICBPcHRpb25hbDx1bnNp
Z25lZD4gaHlwaGVuUG9zaXRpb24gPSBXVEY6Om51bGxvcHQ7Ci0gICAgLy8gRG9lcyBmaXJzdCBj
aGFyYWN0ZXIgZml0IHRoaXMgbGluZT8KLSAgICBpZiAoc3BsaXRGcmFnbWVudERhdGEucG9zaXRp
b24gPT0gZnJhZ21lbnRUb1NwbGl0LnN0YXJ0KCkpIHsKLSAgICAgICAgLy8gS2VlcCBhdCBsZWFz
dCBvbmUgY2hhcmFjdGVyIG9uIGVtcHR5IGxpbmVzLgotICAgICAgICBpZiAobGluZS5pc0VtcHR5
KCkpCi0gICAgICAgICAgICBzcGxpdEZyYWdtZW50RGF0YS53aWR0aCA9IHRleHRGcmFnbWVudEl0
ZXJhdG9yLnRleHRXaWR0aChmcmFnbWVudFRvU3BsaXQuc3RhcnQoKSwgKytzcGxpdEZyYWdtZW50
RGF0YS5wb3NpdGlvbiwgMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaHlwaGVuUG9zaXRpb24g
PSBoeXBoZW5Qb3NpdGlvbkZvckZyYWdtZW50KHNwbGl0RnJhZ21lbnREYXRhLCBmcmFnbWVudFRv
U3BsaXQsIGxpbmUsIHRleHRGcmFnbWVudEl0ZXJhdG9yLCBhdmFpbGFibGVXaWR0aCk7Ci0gICAg
ICAgIGlmIChoeXBoZW5Qb3NpdGlvbikgewotICAgICAgICAgICAgc3BsaXRGcmFnbWVudERhdGEu
cG9zaXRpb24gPSAqaHlwaGVuUG9zaXRpb247Ci0gICAgICAgICAgICBzcGxpdEZyYWdtZW50RGF0
YS53aWR0aCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLnRleHRXaWR0aChmcmFnbWVudFRvU3BsaXQu
c3RhcnQoKSwgc3BsaXRGcmFnbWVudERhdGEucG9zaXRpb24sIDApOwotICAgICAgICB9Ci0gICAg
fQotICAgIC8vIElmIHRoZSByaWdodCBzaWRlIHN1cmVseSBkb2VzIG5vdCBmaXQgdGhlIChuZXh0
KWxpbmUsIHdlIGRvbid0IG5lZWQgdGhlIHdpZHRoIHRvIGJlIGtlcm5pbmcvbGlnYXR1cmUgYWRq
dXN0ZWQuCi0gICAgLy8gUGFydCBvZiBpdCBnZXRzIHJlLW1lYXN1cmVkIGFzIHRoZSBsZWZ0IHNp
ZGUgZHVyaW5nIG5leHQgc3BsaXQuCi0gICAgLy8gVGhpcyBzYXZlcyBtZWFzdXJpbmcgbG9uZyBj
aHVuayBvZiB0ZXh0IHJlcGVhdGVkbHkgKHNlZSBwYXRob2xvZ2ljYWwgY2FzZSBhdCA6OnNwbGl0
KS4KLSAgICBhdXRvIHJpZ2h0U2lkZVdpZHRoID0gZnJhZ21lbnRUb1NwbGl0LndpZHRoKCkgLSBz
cGxpdEZyYWdtZW50RGF0YS53aWR0aDsKLSAgICBpZiAocmlnaHRTaWRlV2lkdGggPCAyICogYXZh
aWxhYmxlV2lkdGgpCi0gICAgICAgIHJpZ2h0U2lkZVdpZHRoID0gdGV4dEZyYWdtZW50SXRlcmF0
b3IudGV4dFdpZHRoKHNwbGl0RnJhZ21lbnREYXRhLnBvc2l0aW9uLCBmcmFnbWVudFRvU3BsaXQu
ZW5kKCksIDApOwotICAgIHJldHVybiBoeXBoZW5Qb3NpdGlvbiA/IGZyYWdtZW50VG9TcGxpdC5z
cGxpdFdpdGhIeXBoZW4oc3BsaXRGcmFnbWVudERhdGEucG9zaXRpb24sIHRleHRGcmFnbWVudEl0
ZXJhdG9yLnN0eWxlKCkuaHlwaGVuU3RyaW5nV2lkdGgsCi0gICAgICAgIHNwbGl0RnJhZ21lbnRE
YXRhLndpZHRoLCByaWdodFNpZGVXaWR0aCkgOiBmcmFnbWVudFRvU3BsaXQuc3BsaXQoc3BsaXRG
cmFnbWVudERhdGEucG9zaXRpb24sIHNwbGl0RnJhZ21lbnREYXRhLndpZHRoLCByaWdodFNpZGVX
aWR0aCk7Ci19Ci0KLWVudW0gUHJlV3JhcExpbmVCcmVha1J1bGUgeyBQcmVzZXJ2ZSwgSWdub3Jl
IH07Ci0KLXN0YXRpYyBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IGNvbnN1bWVM
aW5lQnJlYWtJZk5lZWRlZChjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50
JiBmcmFnbWVudCwgVGV4dEZyYWdtZW50SXRlcmF0b3ImIHRleHRGcmFnbWVudEl0ZXJhdG9yLCBM
aW5lU3RhdGUmIGxpbmUsIExheW91dDo6UnVuVmVjdG9yJiBydW5zLAotICAgIFByZVdyYXBMaW5l
QnJlYWtSdWxlIHByZVdyYXBMaW5lQnJlYWtSdWxlID0gUHJlV3JhcExpbmVCcmVha1J1bGU6OlBy
ZXNlcnZlKQotewotICAgIGlmICghZnJhZ21lbnQuaXNMaW5lQnJlYWsoKSkKLSAgICAgICAgcmV0
dXJuIGZyYWdtZW50OwotCi0gICAgYm9vbCBpc0hhcmRMaW5lYnJlYWsgPSBmcmFnbWVudC50eXBl
KCkgPT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6SGFyZExpbmVCcmVhazsK
LSAgICAvLyA8YnI+IGFsd2F5cyBwcm9kdWNlcyBhIHJ1bi4gKHJlcXVpcmVkIGJ5IHRlc3Rpbmcg
b3V0cHV0KQotICAgIGlmIChpc0hhcmRMaW5lYnJlYWspCi0gICAgICAgIGxpbmUuYXBwZW5kRnJh
Z21lbnRBbmRDcmVhdGVSdW5JZk5lZWRlZChmcmFnbWVudCwgcnVucyk7Ci0KLSAgICBhdXRvJiBz
dHlsZSA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLnN0eWxlKCk7Ci0gICAgaWYgKHN0eWxlLnByZXNl
cnZlTmV3bGluZSAmJiBwcmVXcmFwTGluZUJyZWFrUnVsZSA9PSBQcmVXcmFwTGluZUJyZWFrUnVs
ZTo6UHJlc2VydmUpIHsKLSAgICAgICAgaWYgKCFpc0hhcmRMaW5lYnJlYWspCi0gICAgICAgICAg
ICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAgfQotICAgIHJldHVybiB0ZXh0RnJhZ21lbnRJdGVyYXRv
ci5uZXh0VGV4dEZyYWdtZW50KCk7Ci19Ci0KLXN0YXRpYyBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6
VGV4dEZyYWdtZW50IHNraXBXaGl0ZXNwYWNlSWZOZWVkZWQoY29uc3QgVGV4dEZyYWdtZW50SXRl
cmF0b3I6OlRleHRGcmFnbWVudCYgZnJhZ21lbnQsIFRleHRGcmFnbWVudEl0ZXJhdG9yJiB0ZXh0
RnJhZ21lbnRJdGVyYXRvcikKLXsKLSAgICBpZiAoIXRleHRGcmFnbWVudEl0ZXJhdG9yLnN0eWxl
KCkuY29sbGFwc2VXaGl0ZXNwYWNlKQotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0KLSAgICBU
ZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IGZpcnN0Tm9uV2hpdGVzcGFjZUZyYWdt
ZW50ID0gZnJhZ21lbnQ7Ci0gICAgd2hpbGUgKGZpcnN0Tm9uV2hpdGVzcGFjZUZyYWdtZW50LnR5
cGUoKSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlKQot
ICAgICAgICBmaXJzdE5vbldoaXRlc3BhY2VGcmFnbWVudCA9IHRleHRGcmFnbWVudEl0ZXJhdG9y
Lm5leHRUZXh0RnJhZ21lbnQoKTsKLSAgICByZXR1cm4gZmlyc3ROb25XaGl0ZXNwYWNlRnJhZ21l
bnQ7Ci19Ci0KLXN0YXRpYyBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IGZpcnN0
RnJhZ21lbnQoVGV4dEZyYWdtZW50SXRlcmF0b3ImIHRleHRGcmFnbWVudEl0ZXJhdG9yLCBMaW5l
U3RhdGUmIGN1cnJlbnRMaW5lLCBjb25zdCBMaW5lU3RhdGUmIHByZXZpb3VzTGluZSwgTGF5b3V0
OjpSdW5WZWN0b3ImIHJ1bnMpCi17Ci0gICAgLy8gSGFuZGxlIG92ZXJmbG93IGZyYWdtZW50IGZy
b20gcHJldmlvdXMgbGluZS4KLSAgICBhdXRvIG92ZXJmbG93ZWRGcmFnbWVudCA9IHByZXZpb3Vz
TGluZS5vdmVyZmxvd2VkRnJhZ21lbnQoKTsKLSAgICBpZiAob3ZlcmZsb3dlZEZyYWdtZW50Lmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHNraXBXaGl0ZXNwYWNlSWZOZWVkZWQodGV4dEZyYWdt
ZW50SXRlcmF0b3IubmV4dFRleHRGcmFnbWVudCgpLCB0ZXh0RnJhZ21lbnRJdGVyYXRvcik7Ci0K
LSAgICBpZiAob3ZlcmZsb3dlZEZyYWdtZW50LnR5cGUoKSAhPSBUZXh0RnJhZ21lbnRJdGVyYXRv
cjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlKQotICAgICAgICByZXR1cm4gb3ZlcmZsb3dlZEZy
YWdtZW50OwotCi0gICAgLy8gTGVhZGluZyB3aGl0ZXNwYWNlIGhhbmRsaW5nLgotICAgIGF1dG8m
IHN0eWxlID0gdGV4dEZyYWdtZW50SXRlcmF0b3Iuc3R5bGUoKTsKLSAgICBpZiAoc3R5bGUuYnJl
YWtTcGFjZXMpIHsKLSAgICAgICAgLy8gTGVhZGluZyB3aGl0ZXNwYWNlIGNyZWF0ZWQgYWZ0ZXIg
YnJlYWtpbmcgdGhlIHByZXZpb3VzIGxpbmUuCi0gICAgICAgIC8vIEJyZWFraW5nIGJlZm9yZSB0
aGUgZmlyc3Qgc3BhY2UgYWZ0ZXIgYSB3b3JkIGlzIG9ubHkgYWxsb3dlZCBpbiBjb21iaW5hdGlv
biB3aXRoIGJyZWFrLWFsbCBvciBicmVhay13b3JkLgotICAgICAgICBpZiAoc3R5bGUuYnJlYWtG
aXJzdFdvcmRPbk92ZXJmbG93IHx8IHByZXZpb3VzTGluZS5oYXNUcmFpbGluZ1doaXRlc3BhY2Uo
KSkKLSAgICAgICAgICAgIHJldHVybiBvdmVyZmxvd2VkRnJhZ21lbnQ7Ci0gICAgfQotICAgIC8v
IFNwZWNpYWwgb3ZlcmZsb3cgcHJlLXdyYXAgd2hpdGVzcGFjZSBoYW5kbGluZzogc2tpcCB0aGUg
b3ZlcmZsb3dlZCB3aGl0ZXNwYWNlIChldmVuIHdoZW4gc3R5bGUgc2F5cyBub3QtY29sbGFwc2li
bGUpCi0gICAgLy8gaWYgd2UgbWFuYWdlIHRvIGZpdCBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIG9u
IHRoZSBwcmV2aW91cyBsaW5lLgotICAgIGlmICgoc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlIHx8
IHN0eWxlLndyYXBMaW5lcykgJiYgcHJldmlvdXNMaW5lLmZpcnN0Q2hhcmFjdGVyRml0cygpKSB7
Ci0gICAgICAgIC8vIElmIHNraXBwaW5nIHRoZSB3aGl0ZXNwYWNlIHB1dHMgdXMgb24gYSBuZXds
aW5lLCBza2lwIHRoZSBuZXdsaW5lIHRvbyBhcyB3ZSBhbHJlYWR5IHdyYXBwZWQgdGhlIGxpbmUu
Ci0gICAgICAgIGF1dG8gZmlyc3RGcmFnbWVudENhbmRpZGF0ZSA9IGNvbnN1bWVMaW5lQnJlYWtJ
Zk5lZWRlZCh0ZXh0RnJhZ21lbnRJdGVyYXRvci5uZXh0VGV4dEZyYWdtZW50KCksIHRleHRGcmFn
bWVudEl0ZXJhdG9yLCBjdXJyZW50TGluZSwgcnVucywKLSAgICAgICAgICAgIHByZVdyYXAoc3R5
bGUpID8gUHJlV3JhcExpbmVCcmVha1J1bGU6Oklnbm9yZSA6IFByZVdyYXBMaW5lQnJlYWtSdWxl
OjpQcmVzZXJ2ZSk7Ci0gICAgICAgIHJldHVybiBza2lwV2hpdGVzcGFjZUlmTmVlZGVkKGZpcnN0
RnJhZ21lbnRDYW5kaWRhdGUsIHRleHRGcmFnbWVudEl0ZXJhdG9yKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHNraXBXaGl0ZXNwYWNlSWZOZWVkZWQob3ZlcmZsb3dlZEZyYWdtZW50LCB0ZXh0RnJhZ21l
bnRJdGVyYXRvcik7Ci19Ci0KLXN0YXRpYyB2b2lkIGZvcmNlRnJhZ21lbnRUb0xpbmUoTGluZVN0
YXRlJiBsaW5lLCBUZXh0RnJhZ21lbnRJdGVyYXRvciYgdGV4dEZyYWdtZW50SXRlcmF0b3IsIExh
eW91dDo6UnVuVmVjdG9yJiBydW5zLCBjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZy
YWdtZW50JiBmcmFnbWVudCkKLXsKLSAgICBsaW5lLmFwcGVuZEZyYWdtZW50QW5kQ3JlYXRlUnVu
SWZOZWVkZWQoZnJhZ21lbnQsIHJ1bnMpOwotICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBtb3Jl
IGZyYWdtZW50cyB0byBhZGQgdG8gdGhlIGN1cnJlbnQgbGluZS4KLSAgICBhdXRvIG5leHRGcmFn
bWVudCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQoKTsKLSAgICBpZiAo
ZnJhZ21lbnQub3ZlcmxhcHNUb05leHRSZW5kZXJlcigpKSB7Ci0gICAgICAgIHdoaWxlICh0cnVl
KSB7Ci0gICAgICAgICAgICBpZiAobmV4dEZyYWdtZW50LnR5cGUoKSAhPSBmcmFnbWVudC50eXBl
KCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBsaW5lLmFwcGVuZEZyYWdt
ZW50QW5kQ3JlYXRlUnVuSWZOZWVkZWQobmV4dEZyYWdtZW50LCBydW5zKTsKLSAgICAgICAgICAg
IC8vIERvZXMgaXQgb3ZlcmxhcCB0byB0aGUgbmV4dCBzZWdtZW50PwotICAgICAgICAgICAgaWYg
KCFuZXh0RnJhZ21lbnQub3ZlcmxhcHNUb05leHRSZW5kZXJlcigpKQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIG5leHRGcmFnbWVudCA9IHRleHRGcmFnbWVudEl0ZXJhdG9y
Lm5leHRUZXh0RnJhZ21lbnQoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvLyBXaGVuIHRoZSBm
b3JjZWQgZnJhZ21lbnQgaXMgZm9sbG93ZWQgYnkgZWl0aGVyIHdoaXRlc3BhY2UgYW5kL29yIGxp
bmUgYnJlYWssIGNvbnN1bWUgdGhlbSB0b28sIG90aGVyd2lzZSB3ZSBlbmQgdXAgd2l0aCBhbiBl
eHRyYSB3aGl0ZXNwYWNlIGFuZC9vciBsaW5lIGJyZWFrLgotICAgIG5leHRGcmFnbWVudCA9IHNr
aXBXaGl0ZXNwYWNlSWZOZWVkZWQobmV4dEZyYWdtZW50LCB0ZXh0RnJhZ21lbnRJdGVyYXRvcik7
Ci0gICAgbmV4dEZyYWdtZW50ID0gY29uc3VtZUxpbmVCcmVha0lmTmVlZGVkKG5leHRGcmFnbWVu
dCwgdGV4dEZyYWdtZW50SXRlcmF0b3IsIGxpbmUsIHJ1bnMpOwotICAgIGxpbmUuc2V0T3ZlcmZs
b3dlZEZyYWdtZW50KG5leHRGcmFnbWVudCk7Ci19Ci0KLXN0YXRpYyBib29sIGNyZWF0ZUxpbmVS
dW5zKExpbmVTdGF0ZSYgbGluZSwgY29uc3QgTGluZVN0YXRlJiBwcmV2aW91c0xpbmUsIExheW91
dDo6UnVuVmVjdG9yJiBydW5zLCBUZXh0RnJhZ21lbnRJdGVyYXRvciYgdGV4dEZyYWdtZW50SXRl
cmF0b3IpCi17Ci0gICAgY29uc3QgYXV0byYgc3R5bGUgPSB0ZXh0RnJhZ21lbnRJdGVyYXRvci5z
dHlsZSgpOwotICAgIGJvb2wgbGluZUNhbkJlV3JhcHBlZCA9IHN0eWxlLndyYXBMaW5lcyB8fCBz
dHlsZS5icmVha0ZpcnN0V29yZE9uT3ZlcmZsb3cgfHwgc3R5bGUuYnJlYWtBbnlXb3JkT25PdmVy
ZmxvdzsKLSAgICBhdXRvIGZyYWdtZW50ID0gZmlyc3RGcmFnbWVudCh0ZXh0RnJhZ21lbnRJdGVy
YXRvciwgbGluZSwgcHJldmlvdXNMaW5lLCBydW5zKTsKLSAgICB3aGlsZSAoZnJhZ21lbnQudHlw
ZSgpICE9IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OkNvbnRlbnRFbmQpIHsK
LSAgICAgICAgLy8gSGFyZCBhbmQgc29mdCBsaW5lYnJlYWtzLgotICAgICAgICBpZiAoZnJhZ21l
bnQuaXNMaW5lQnJlYWsoKSkgewotICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXcgbGluZSBmcmFn
bWVudCBvbmx5IGlmIHRoZXJlJ3Mgbm90aGluZyBvbiB0aGUgbGluZS4gKG90aGVyd2lzZSB0aGUg
ZXh0cmEgbmV3IGxpbmUgY2hhcmFjdGVyIHdvdWxkIHNob3cgdXAgYXQgdGhlIGVuZCBvZiB0aGUg
Y29udGVudC4pCi0gICAgICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkgfHwgZnJhZ21lbnQudHlw
ZSgpID09IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OkhhcmRMaW5lQnJlYWsg
fHwgcHJlV3JhcChzdHlsZSkgfHwgc3R5bGUucHJlc2VydmVOZXdsaW5lKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHN0eWxlLnRleHRBbGlnbiA9PSBUZXh0QWxpZ25Nb2RlOjpSaWdodCB8fCBzdHls
ZS50ZXh0QWxpZ24gPT0gVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQpCi0gICAgICAgICAgICAg
ICAgICAgIGxpbmUucmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKHJ1bnMpOwotICAgICAgICAgICAg
ICAgIGxpbmUuYXBwZW5kRnJhZ21lbnRBbmRDcmVhdGVSdW5JZk5lZWRlZChmcmFnbWVudCwgcnVu
cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBpZiAobGluZUNhbkJlV3JhcHBlZCAmJiAhbGluZS5maXRzKGZyYWdtZW50LndpZHRoKCkpKSB7
Ci0gICAgICAgICAgICAvLyBPdmVyZmxvdyB3cmFwcGluZyBiZWhhdmlvdXI6Ci0gICAgICAgICAg
ICAvLyAxLiBXaGl0ZXNhcGNlIGNvbGxhcHNlIG9uOiB3aGl0ZXNwYWNlIGlzIHNraXBwZWQuIEp1
bXAgdG8gbmV4dCBsaW5lLgotICAgICAgICAgICAgLy8gMi4gV2hpdGVzcGFjZSBjb2xsYXBzZSBv
ZmY6IHdoaXRlc3BhY2UgaXMgd3JhcHBlZC4KLSAgICAgICAgICAgIC8vIDMuIEZpcnN0LCBub24t
d2hpdGVzcGFjZSBmcmFnbWVudCBpcyBlaXRoZXIgd3JhcHBlZCBvciBrZXB0IG9uIHRoZSBsaW5l
LiAoZGVwZW5kcyBvbiBvdmVyZmxvdy13cmFwKQotICAgICAgICAgICAgLy8gNS4gTm9uLXdoaXRl
c3BhY2UgZnJhZ21lbnQgd2hlbiB0aGVyZSdzIGFscmVhZHkgYW5vdGhlciBmcmFnbWVudCBvbiB0
aGUgbGluZSBlaXRoZXIgZ2V0cyB3cmFwcGVkICh3b3JkLWJyZWFrOiBicmVhay1hbGwpCi0gICAg
ICAgICAgICAvLyBvciBnZXRzIHB1c2hlZCB0byB0aGUgbmV4dCBsaW5lLgotICAgICAgICAgICAg
Ym9vbCBlbXB0eUxpbmUgPSBsaW5lLmlzRW1wdHkoKTsKLSAgICAgICAgICAgIC8vIFdoaXRlc3Bh
Y2UgZnJhZ21lbnQuCi0gICAgICAgICAgICBpZiAoZnJhZ21lbnQudHlwZSgpID09IFRleHRGcmFn
bWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IFB1c2ggY29sbGFwYXNlZCB3aGl0ZXNwYWNlIHRvIHRoZSBuZXh0IGxpbmUuCi0gICAgICAgICAg
ICAgICAgICAgIGxpbmUuc2V0T3ZlcmZsb3dlZEZyYWdtZW50KGZyYWdtZW50KTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlm
IChzdHlsZS5icmVha1NwYWNlcyAmJiBsaW5lLmhhc1doaXRlc3BhY2VGcmFnbWVudHMoKSAmJiBm
cmFnbWVudC5sZW5ndGgoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEJyZWFraW5n
IGJlZm9yZSB0aGUgZmlyc3Qgc3BhY2UgYWZ0ZXIgYSB3b3JkIGlzIG5vdCBhbGxvd2VkIGlmIHRo
ZXJlIGFyZSBwcmV2aW91cyBicmVha2luZyBvcHBvcnR1bml0aWVzIGluIHRoZSBsaW5lLgotICAg
ICAgICAgICAgICAgICAgICB0ZXh0RnJhZ21lbnRJdGVyYXRvci5yZXZlcnRUb0VuZE9mRnJhZ21l
bnQobGluZS5yZXZlcnRUb0xhc3RDb21wbGV0ZUZyYWdtZW50KHJ1bnMpKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChw
cmVXcmFwKHN0eWxlKSkgewotICAgICAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZEZyYWdtZW50
QW5kQ3JlYXRlUnVuSWZOZWVkZWQoZnJhZ21lbnQsIHJ1bnMpOwotICAgICAgICAgICAgICAgICAg
ICBmcmFnbWVudCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQobGluZS53
aWR0aCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50LmlzTGluZUJyZWFrKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAg
bGluZS5zZXRPdmVyZmxvd2VkRnJhZ21lbnQoZnJhZ21lbnQpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gU3BsaXQgdGhl
IHdoaXRlc3BhY2U7IGxlZnQgcGFydCBzdGF5cyBvbiB0aGlzIGxpbmUsIHJpZ2h0IGlzIHB1c2hl
ZCB0byBuZXh0IGxpbmUuCi0gICAgICAgICAgICAgICAgbGluZS5zZXRPdmVyZmxvd2VkRnJhZ21l
bnQoc3BsaXRGcmFnbWVudFRvRml0TGluZShmcmFnbWVudCwgbGluZSwgdGV4dEZyYWdtZW50SXRl
cmF0b3IpKTsKLSAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZEZyYWdtZW50QW5kQ3JlYXRlUnVu
SWZOZWVkZWQoZnJhZ21lbnQsIHJ1bnMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgLy8gTm9uLXdoaXRlc3BhY2UgZnJhZ21lbnQuICghc3R5bGUu
d3JhcExpbmVzOiBidWcxMzgxMDIocHJlc2VydmUgZXhpc3RpbmcgYmVoYXZpb3IpCi0gICAgICAg
ICAgICBpZiAoKChlbXB0eUxpbmUgJiYgc3R5bGUuYnJlYWtGaXJzdFdvcmRPbk92ZXJmbG93KSB8
fCBzdHlsZS5icmVha0FueVdvcmRPbk92ZXJmbG93KSB8fCAhc3R5bGUud3JhcExpbmVzKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGZyYWdtZW50OyAobW9kaWZpZWQpZnJhZ21lbnQg
c3RheXMgb24gdGhpcyBsaW5lLCBvdmVyZmxvd2VkRnJhZ21lbnQgaXMgcHVzaGVkIHRvIG5leHQg
bGluZS4KLSAgICAgICAgICAgICAgICBsaW5lLnNldE92ZXJmbG93ZWRGcmFnbWVudChzcGxpdEZy
YWdtZW50VG9GaXRMaW5lKGZyYWdtZW50LCBsaW5lLCB0ZXh0RnJhZ21lbnRJdGVyYXRvcikpOwot
ICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kRnJhZ21lbnRBbmRDcmVhdGVSdW5JZk5lZWRlZChm
cmFnbWVudCwgcnVucyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBBU1NFUlQoZnJhZ21lbnQudHlwZSgpID09IFRleHRGcmFnbWVudEl0ZXJhdG9y
OjpUZXh0RnJhZ21lbnQ6Ok5vbldoaXRlc3BhY2UpOwotICAgICAgICAgICAgLy8gRmluZCBvdXQg
aWYgdGhpcyBub24td2hpdGVzcGFjZSBmcmFnbWVudCBoYXMgYSBoeXBoZW4gd2hlcmUgd2UgY2Fu
IGJyZWFrLgotICAgICAgICAgICAgaWYgKHN0eWxlLnNob3VsZEh5cGhlbmF0ZSkgewotICAgICAg
ICAgICAgICAgIGF1dG8gZnJhZ21lbnRUb1NwbGl0ID0gZnJhZ21lbnQ7Ci0gICAgICAgICAgICAg
ICAgLy8gU3BsaXQgYW5kIGNoZWNrIGlmIHdlIGFjdHVhbGx5IGVuZGVkIHVwIHdpdGggYSBoeXBo
ZW4uCi0gICAgICAgICAgICAgICAgYXV0byBvdmVyZmxvd0ZyYWdtZW50ID0gc3BsaXRGcmFnbWVu
dFRvRml0TGluZShmcmFnbWVudFRvU3BsaXQsIGxpbmUsIHRleHRGcmFnbWVudEl0ZXJhdG9yKTsK
LSAgICAgICAgICAgICAgICBpZiAoZnJhZ21lbnRUb1NwbGl0Lmhhc0h5cGhlbigpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGxpbmUuc2V0T3ZlcmZsb3dlZEZyYWdtZW50KG92ZXJmbG93RnJhZ21l
bnQpOwotICAgICAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZEZyYWdtZW50QW5kQ3JlYXRlUnVu
SWZOZWVkZWQoZnJhZ21lbnRUb1NwbGl0LCBydW5zKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIE5vIGh5cGhlbiwgbm8g
c3BsaXQuCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBOb24tYnJlYWthYmxlIG5vbi13
aGl0ZXNwYWNlIGZpcnN0IGZyYWdtZW50LiBBZGQgaXQgdG8gdGhlIGN1cnJlbnQgbGluZS4gLWl0
IG92ZXJmbG93cyB0aG91Z2guCi0gICAgICAgICAgICBpZiAoZW1wdHlMaW5lKSB7Ci0gICAgICAg
ICAgICAgICAgZm9yY2VGcmFnbWVudFRvTGluZShsaW5lLCB0ZXh0RnJhZ21lbnRJdGVyYXRvciwg
cnVucywgZnJhZ21lbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgLy8gTm9uLWJyZWFrYWJsZSBub24td2hpdGVzcGFjZSBmcmFnbWVudCB3aGVu
IHRoZXJlJ3MgYWxyZWFkeSBjb250ZW50IG9uIHRoZSBsaW5lLiBQdXNoIGl0IHRvIHRoZSBuZXh0
IGxpbmUuCi0gICAgICAgICAgICBBU1NFUlQobGluZS5sYXN0RnJhZ21lbnQoKS5pc1ZhbGlkKCkp
OwotICAgICAgICAgICAgaWYgKGxpbmUubGFzdEZyYWdtZW50KCkub3ZlcmxhcHNUb05leHRSZW5k
ZXJlcigpKSB7Ci0gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBmcmFnbWVudCBpcyBh
IGNvbnRpbnVhdGlvbiBvZiBhIHByZXZpb3VzIHNlZ21lbnQuIEluIHN1Y2ggY2FzZXMsIHdlIG5l
ZWQgdG8gcmVtb3ZlIHRoZW0gYWxsLgotICAgICAgICAgICAgICAgIHRleHRGcmFnbWVudEl0ZXJh
dG9yLnJldmVydFRvRW5kT2ZGcmFnbWVudChsaW5lLnJldmVydFRvTGFzdENvbXBsZXRlRnJhZ21l
bnQocnVucykpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbGluZS5zZXRPdmVyZmxvd2VkRnJhZ21lbnQoZnJhZ21lbnQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbGluZS5hcHBlbmRGcmFnbWVudEFuZENyZWF0ZVJ1
bklmTmVlZGVkKGZyYWdtZW50LCBydW5zKTsKLSAgICAgICAgLy8gRmluZCB0aGUgbmV4dCB0ZXh0
IGZyYWdtZW50LgotICAgICAgICBmcmFnbWVudCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLm5leHRU
ZXh0RnJhZ21lbnQobGluZS53aWR0aCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIChmcmFnbWVudC50
eXBlKCkgPT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6Q29udGVudEVuZCAm
JiBsaW5lLm92ZXJmbG93ZWRGcmFnbWVudCgpLmlzRW1wdHkoKSkgfHwgbGluZS5vdmVyZmxvd2Vk
RnJhZ21lbnQoKS50eXBlKCkgPT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6
Q29udGVudEVuZDsKLX0KLQotc3RhdGljIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2
aW9yKGJvb2wgaXNBZnRlckV4cGFuc2lvbiwgYm9vbCBsYXN0UnVuT25MaW5lKQotewotICAgIEV4
cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yOwotICAgIGV4cGFuc2lvbkJlaGF2aW9y
ID0gaXNBZnRlckV4cGFuc2lvbiA/IEZvcmJpZExlZnRFeHBhbnNpb24gOiBBbGxvd0xlZnRFeHBh
bnNpb247Ci0gICAgZXhwYW5zaW9uQmVoYXZpb3IgfD0gbGFzdFJ1bk9uTGluZSA/IEZvcmJpZFJp
Z2h0RXhwYW5zaW9uIDogQWxsb3dSaWdodEV4cGFuc2lvbjsKLSAgICByZXR1cm4gZXhwYW5zaW9u
QmVoYXZpb3I7Ci19Ci0KLXN0YXRpYyB2b2lkIGp1c3RpZnlSdW5zKGNvbnN0IExpbmVTdGF0ZSYg
bGluZSwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIHVuc2lnbmVkIGZpcnN0UnVuSW5kZXgpCi17
Ci0gICAgQVNTRVJUKHJ1bnMuc2l6ZSgpKTsKLSAgICBhdXRvIHdpZHRoVG9EaXN0cmlidXRlID0g
bGluZS5hdmFpbGFibGVXaWR0aCgpIC0gbGluZS53aWR0aCgpOwotICAgIGlmICh3aWR0aFRvRGlz
dHJpYnV0ZSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGxhc3RSdW5JbmRleCA9
IHJ1bnMuc2l6ZSgpIC0gMTsKLSAgICBBU1NFUlQoZmlyc3RSdW5JbmRleCA8PSBsYXN0UnVuSW5k
ZXgpOwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8dW5zaWduZWQsIEV4cGFuc2lvbkJlaGF2aW9yPj4g
ZXhwYW5zaW9uT3Bwb3J0dW5pdHlMaXN0OwotICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnRPblRoaXNMaW5lID0gMDsKLSAgICBhdXRvIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVl
OwotICAgIGZvciAoYXV0byBpID0gZmlyc3RSdW5JbmRleDsgaSA8PSBsYXN0UnVuSW5kZXg7ICsr
aSkgewotICAgICAgICBjb25zdCBhdXRvJiBydW4gPSBydW5zLmF0KGkpOwotICAgICAgICB1bnNp
Z25lZCBvcHBvcnR1bml0eUNvdW50SW5SdW4gPSAwOwotICAgICAgICBzdGQ6OnRpZShvcHBvcnR1
bml0eUNvdW50SW5SdW4sIGlzQWZ0ZXJFeHBhbnNpb24pID0gbGluZS5leHBhbnNpb25PcHBvcnR1
bml0eUNvdW50KHJ1bi5zdGFydCwgcnVuLmVuZCk7Ci0gICAgICAgIGV4cGFuc2lvbk9wcG9ydHVu
aXR5TGlzdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIob3Bwb3J0dW5pdHlDb3VudEluUnVuLCBleHBh
bnNpb25CZWhhdmlvcihpc0FmdGVyRXhwYW5zaW9uLCBpID09IGxhc3RSdW5JbmRleCkpKTsKLSAg
ICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudE9uVGhpc0xpbmUgKz0gb3Bwb3J0dW5pdHlD
b3VudEluUnVuOwotICAgIH0KLSAgICBpZiAoIWV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRPblRo
aXNMaW5lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoZXhwYW5zaW9uT3Bwb3J0dW5p
dHlMaXN0LnNpemUoKSA9PSBsYXN0UnVuSW5kZXggLSBmaXJzdFJ1bkluZGV4ICsgMSk7Ci0gICAg
YXV0byBleHBhbnNpb24gPSB3aWR0aFRvRGlzdHJpYnV0ZSAvIGV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnRPblRoaXNMaW5lOwotICAgIGZsb2F0IGFjY3VtdWxhdGVkRXhwYW5zaW9uID0gMDsKLSAg
ICBmb3IgKGF1dG8gaSA9IGZpcnN0UnVuSW5kZXg7IGkgPD0gbGFzdFJ1bkluZGV4OyArK2kpIHsK
LSAgICAgICAgYXV0byYgcnVuID0gcnVucy5hdChpKTsKLSAgICAgICAgdW5zaWduZWQgb3Bwb3J0
dW5pdHlDb3VudEluUnVuOwotICAgICAgICBzdGQ6OnRpZShvcHBvcnR1bml0eUNvdW50SW5SdW4s
IHJ1bi5leHBhbnNpb25CZWhhdmlvcikgPSBleHBhbnNpb25PcHBvcnR1bml0eUxpc3QuYXQoaSAt
IGZpcnN0UnVuSW5kZXgpOwotICAgICAgICBydW4uZXhwYW5zaW9uID0gb3Bwb3J0dW5pdHlDb3Vu
dEluUnVuICogZXhwYW5zaW9uOwotICAgICAgICBydW4ubG9naWNhbExlZnQgKz0gYWNjdW11bGF0
ZWRFeHBhbnNpb247Ci0gICAgICAgIHJ1bi5sb2dpY2FsUmlnaHQgKz0gKGFjY3VtdWxhdGVkRXhw
YW5zaW9uICsgcnVuLmV4cGFuc2lvbik7Ci0gICAgICAgIGFjY3VtdWxhdGVkRXhwYW5zaW9uICs9
IHJ1bi5leHBhbnNpb247Ci0gICAgfQotfQotCi1zdGF0aWMgVGV4dEFsaWduTW9kZSB0ZXh0QWxp
Z25Gb3JMaW5lKGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpTdHlsZSYgc3R5bGUsIGJvb2wg
bGFzdExpbmUpCi17Ci0gICAgLy8gRmFsbGJhY2sgdG8gVGV4dEFsaWduTW9kZTo6TGVmdCAoU1RB
UlQpIGFsaWdubWVudCBmb3Igbm9uLWNvbGxhcHNhYmxlIGNvbnRlbnQgYW5kIGZvciB0aGUgbGFz
dCBsaW5lIGJlZm9yZSBhIGZvcmNlZCBicmVhayBvciB0aGUgZW5kIG9mIHRoZSBibG9jay4KLSAg
ICBhdXRvIHRleHRBbGlnbiA9IHN0eWxlLnRleHRBbGlnbjsKLSAgICBpZiAodGV4dEFsaWduID09
IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkgJiYgKCFzdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2UgfHwg
bGFzdExpbmUpKQotICAgICAgICB0ZXh0QWxpZ24gPSBUZXh0QWxpZ25Nb2RlOjpMZWZ0OwotICAg
IHJldHVybiB0ZXh0QWxpZ247Ci19Ci0KLXN0YXRpYyB2b2lkIGNsb3NlTGluZUVuZGluZ0FuZEFk
anVzdFJ1bnMoTGluZVN0YXRlJiBsaW5lLCBMYXlvdXQ6OlJ1blZlY3RvciYgcnVucywgT3B0aW9u
YWw8dW5zaWduZWQ+IGxhc3RSdW5JbmRleE9mUHJldmlvdXNMaW5lLCB1bnNpZ25lZCYgbGluZUNv
dW50LAotICAgIGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yJiB0ZXh0RnJhZ21lbnRJdGVyYXRv
ciwgYm9vbCBsYXN0TGluZUluRmxvdykKLXsKLSAgICBpZiAoIXJ1bnMuc2l6ZSgpIHx8IChsYXN0
UnVuSW5kZXhPZlByZXZpb3VzTGluZSAmJiBydW5zLnNpemUoKSAtIDEgPT0gbGFzdFJ1bkluZGV4
T2ZQcmV2aW91c0xpbmUudmFsdWUoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IGF1
dG8mIHN0eWxlID0gdGV4dEZyYWdtZW50SXRlcmF0b3Iuc3R5bGUoKTsKLQotICAgIGlmIChzdHls
ZS5jb2xsYXBzZVdoaXRlc3BhY2UpCi0gICAgICAgIGxpbmUucmVtb3ZlVHJhaWxpbmdXaGl0ZXNw
YWNlKHJ1bnMpOwotCi0gICAgaWYgKCFydW5zLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gQWRqdXN0IHJ1bnMnIHBvc2l0aW9uIGJ5IHRha2luZyBsaW5lJ3MgYWxpZ25tZW50IGlu
dG8gYWNjb3VudC4KLSAgICBhdXRvIGZpcnN0UnVuSW5kZXggPSBsYXN0UnVuSW5kZXhPZlByZXZp
b3VzTGluZSA/IGxhc3RSdW5JbmRleE9mUHJldmlvdXNMaW5lLnZhbHVlKCkgKyAxIDogMDsKLSAg
ICBhdXRvIGxpbmVMb2dpY2FsTGVmdCA9IGxpbmUubG9naWNhbExlZnRPZmZzZXQoKTsKLSAgICBh
dXRvIHRleHRBbGlnbiA9IHRleHRBbGlnbkZvckxpbmUoc3R5bGUsIGxhc3RMaW5lSW5GbG93IHx8
IChsaW5lLmxhc3RGcmFnbWVudCgpLmlzVmFsaWQoKSAmJiBsaW5lLmxhc3RGcmFnbWVudCgpLnR5
cGUoKSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpIYXJkTGluZUJyZWFr
KSk7Ci0KLSAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXRleHQtMy8jd2hpdGUtc3Bh
Y2UtcGhhc2UtMgotICAgIGJvb2wgc2hvdWxkSGFuZ1RyYWlsaW5nV2hpdGVzcGFjZSA9IHN0eWxl
LndyYXBMaW5lcyAmJiBsaW5lLnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCk7Ci0gICAgYXV0byBo
YW5naW5nV2hpdGVzcGFjZVdpZHRoID0gc2hvdWxkSGFuZ1RyYWlsaW5nV2hpdGVzcGFjZSA/IGxp
bmUudHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKSA6IDA7Ci0KLSAgICBpZiAodGV4dEFsaWduID09
IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpIHsKLSAgICAgICAganVzdGlmeVJ1bnMobGluZSwgcnVu
cywgZmlyc3RSdW5JbmRleCk7Ci0gICAgICAgIGhhbmdpbmdXaGl0ZXNwYWNlV2lkdGggPSAwOwot
ICAgIH0gZWxzZQotICAgICAgICBsaW5lTG9naWNhbExlZnQgPSBjb21wdXRlTGluZUxlZnQobGlu
ZSwgdGV4dEFsaWduLCBoYW5naW5nV2hpdGVzcGFjZVdpZHRoKTsKLQotICAgIGZvciAoYXV0byBp
ID0gZmlyc3RSdW5JbmRleDsgaSA8IHJ1bnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcnVuc1tp
XS5sb2dpY2FsTGVmdCArPSBsaW5lTG9naWNhbExlZnQ7Ci0gICAgICAgIHJ1bnNbaV0ubG9naWNh
bFJpZ2h0ICs9IGxpbmVMb2dpY2FsTGVmdDsKLSAgICB9Ci0KLSAgICBpZiAoc2hvdWxkSGFuZ1Ry
YWlsaW5nV2hpdGVzcGFjZSAmJiBoYW5naW5nV2hpdGVzcGFjZVdpZHRoIDwgbGluZS50cmFpbGlu
Z1doaXRlc3BhY2VXaWR0aCgpKQotICAgICAgICBydW5zLmxhc3QoKS5sb2dpY2FsUmlnaHQgPSBy
dW5zLmxhc3QoKS5sb2dpY2FsUmlnaHQgLSAobGluZS50cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgp
IC0gaGFuZ2luZ1doaXRlc3BhY2VXaWR0aCk7Ci0KLSAgICBydW5zLmxhc3QoKS5pc0VuZE9mTGlu
ZSA9IHRydWU7Ci0gICAgKytsaW5lQ291bnQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGNyZWF0ZVRleHRS
dW5zKExheW91dDo6UnVuVmVjdG9yJiBydW5zLCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIHVuc2ln
bmVkJiBsaW5lQ291bnQpCi17Ci0gICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQmVmb3Jl
ID0gZmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7Ci0gICAgTGF5b3V0VW5pdCBsaW5lSGVp
Z2h0ID0gbGluZUhlaWdodEZyb21GbG93KGZsb3cpOwotICAgIExpbmVTdGF0ZSBsaW5lOwotICAg
IHVuc2lnbmVkIG51bWJlck9mUHJlY2VkaW5nTGluZXNXaXRoSHlwaGVuID0gMDsKLSAgICBib29s
IGlzRW5kT2ZDb250ZW50ID0gZmFsc2U7Ci0gICAgVGV4dEZyYWdtZW50SXRlcmF0b3IgdGV4dEZy
YWdtZW50SXRlcmF0b3IgPSBUZXh0RnJhZ21lbnRJdGVyYXRvcihmbG93KTsKLSAgICBPcHRpb25h
bDx1bnNpZ25lZD4gbGFzdFJ1bkluZGV4T2ZQcmV2aW91c0xpbmU7Ci0gICAgZG8gewotICAgICAg
ICBmbG93LnNldExvZ2ljYWxIZWlnaHQobGluZUhlaWdodCAqIGxpbmVDb3VudCArIGJvcmRlckFu
ZFBhZGRpbmdCZWZvcmUpOwotICAgICAgICBMaW5lU3RhdGUgcHJldmlvdXNMaW5lID0gbGluZTsK
LSAgICAgICAgbGluZSA9IExpbmVTdGF0ZSgpOwotICAgICAgICB1cGRhdGVMaW5lQ29uc3RyYWlu
cyhmbG93LCBsaW5lLCBwcmV2aW91c0xpbmUsIG51bWJlck9mUHJlY2VkaW5nTGluZXNXaXRoSHlw
aGVuLCB0ZXh0RnJhZ21lbnRJdGVyYXRvci5zdHlsZSgpLCAhbGluZUNvdW50KTsKLSAgICAgICAg
aXNFbmRPZkNvbnRlbnQgPSBjcmVhdGVMaW5lUnVucyhsaW5lLCBwcmV2aW91c0xpbmUsIHJ1bnMs
IHRleHRGcmFnbWVudEl0ZXJhdG9yKTsKLSAgICAgICAgY2xvc2VMaW5lRW5kaW5nQW5kQWRqdXN0
UnVucyhsaW5lLCBydW5zLCBsYXN0UnVuSW5kZXhPZlByZXZpb3VzTGluZSwgbGluZUNvdW50LCB0
ZXh0RnJhZ21lbnRJdGVyYXRvciwgaXNFbmRPZkNvbnRlbnQpOwotICAgICAgICBpZiAocnVucy5z
aXplKCkpCi0gICAgICAgICAgICBsYXN0UnVuSW5kZXhPZlByZXZpb3VzTGluZSA9IHJ1bnMuc2l6
ZSgpIC0gMTsKLSAgICB9IHdoaWxlICghaXNFbmRPZkNvbnRlbnQpOwotfQotCi1SZWY8TGF5b3V0
PiBjcmVhdGUoUmVuZGVyQmxvY2tGbG93JiBmbG93KQotewotICAgIHVuc2lnbmVkIGxpbmVDb3Vu
dCA9IDA7Ci0gICAgTGF5b3V0OjpSdW5WZWN0b3IgcnVuczsKLSAgICBjcmVhdGVUZXh0UnVucyhy
dW5zLCBmbG93LCBsaW5lQ291bnQpOwotICAgIHJldHVybiBMYXlvdXQ6OmNyZWF0ZShydW5zLCBs
aW5lQ291bnQsIGZsb3cpOwotfQotCi1SZWY8TGF5b3V0PiBMYXlvdXQ6OmNyZWF0ZShjb25zdCBS
dW5WZWN0b3ImIHJ1blZlY3RvciwgdW5zaWduZWQgbGluZUNvdW50LCBjb25zdCBSZW5kZXJCbG9j
a0Zsb3cmIGJsb2NrRmxvdykKLXsKLSAgICB2b2lkKiBzbG90ID0gV1RGOjpmYXN0TWFsbG9jKHNp
emVvZihMYXlvdXQpICsgc2l6ZW9mKFJ1bikgKiBydW5WZWN0b3Iuc2l6ZSgpKTsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyAoTm90TnVsbCwgc2xvdCkgTGF5b3V0KHJ1blZlY3RvciwgbGluZUNv
dW50LCBibG9ja0Zsb3cpKTsKLX0KLQotTGF5b3V0OjpMYXlvdXQoY29uc3QgUnVuVmVjdG9yJiBy
dW5WZWN0b3IsIHVuc2lnbmVkIGxpbmVDb3VudCwgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBibG9j
a0Zsb3cpCi0gICAgOiBtX2xpbmVDb3VudChsaW5lQ291bnQpCi0gICAgLCBtX3J1bkNvdW50KHJ1
blZlY3Rvci5zaXplKCkpCi0gICAgLCBtX2Jsb2NrRmxvd1JlbmRlcmVyKGJsb2NrRmxvdykKLXsK
LSAgICBtZW1jcHkobV9ydW5zLCBydW5WZWN0b3IuZGF0YSgpLCBtX3J1bkNvdW50ICogc2l6ZW9m
KFJ1bikpOwotfQotCi1jb25zdCBSdW5SZXNvbHZlciYgTGF5b3V0OjpydW5SZXNvbHZlcigpIGNv
bnN0Ci17Ci0gICAgaWYgKCFtX3J1blJlc29sdmVyKQotICAgICAgICBtX3J1blJlc29sdmVyID0g
bWFrZVVuaXF1ZTxSdW5SZXNvbHZlcj4obV9ibG9ja0Zsb3dSZW5kZXJlciwgKnRoaXMpOwotICAg
IHJldHVybiAqbV9ydW5SZXNvbHZlcjsKLX0KLQotTGF5b3V0Ojp+TGF5b3V0KCkKLXsKLSAgICBz
aW1wbGVMaW5lTGF5b3V0V2lsbEJlRGVsZXRlZCgqdGhpcyk7Ci19Ci0KLX0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA4ZDE2OTI2Y2VjM2IuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlJlbmRlclN0eWxl
Q29uc3RhbnRzLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmgiCi0jaW5j
bHVkZSAiVGV4dEZsYWdzLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBD
T01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHB1c2gpCi0jcHJhZ21hIHdhcm5pbmcoZGlz
YWJsZTogNDIwMCkgLy8gRGlzYWJsZSAiemVyby1zaXplZCBhcnJheSBpbiBzdHJ1Y3QvdW5pb24i
IHdhcm5pbmcKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlbmRlckJs
b2NrRmxvdzsKLQotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewotCi1jbGFzcyBSdW5SZXNv
bHZlcjsKLQotYm9vbCBjYW5Vc2VGb3IoY29uc3QgUmVuZGVyQmxvY2tGbG93Jik7Ci1ib29sIGNh
blVzZUZvckFmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyQmxvY2tGbG93JiwgU3R5bGVEaWZm
ZXJlbmNlKTsKLUF2b2lkYW5jZVJlYXNvbkZsYWdzIGNhblVzZUZvcldpdGhSZWFzb24oY29uc3Qg
UmVuZGVyQmxvY2tGbG93JiwgSW5jbHVkZVJlYXNvbnMpOwotCi1zdHJ1Y3QgUnVuIHsKLSNpZiBD
T01QSUxFUihNU1ZDKQotICAgIFJ1bigpIHsgfQotI2VuZGlmCi0gICAgUnVuKHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBlbmQsIGZsb2F0IGxvZ2ljYWxMZWZ0LCBmbG9hdCBsb2dpY2FsUmlnaHQs
IGJvb2wgaXNFbmRPZkxpbmUsIGJvb2wgaGFzSHlwaGVuLCBib29sIGlzTGluZUJyZWFrKQotICAg
ICAgICA6IGVuZChlbmQpCi0gICAgICAgICwgc3RhcnQoc3RhcnQpCi0gICAgICAgICwgaXNFbmRP
ZkxpbmUoaXNFbmRPZkxpbmUpCi0gICAgICAgICwgaGFzSHlwaGVuKGhhc0h5cGhlbikKLSAgICAg
ICAgLCBpc0xpbmVCcmVhayhpc0xpbmVCcmVhaykKLSAgICAgICAgLCBsb2dpY2FsTGVmdChsb2dp
Y2FsTGVmdCkKLSAgICAgICAgLCBsb2dpY2FsUmlnaHQobG9naWNhbFJpZ2h0KQotICAgIHsgfQot
Ci0gICAgdW5zaWduZWQgZW5kOwotICAgIHVuc2lnbmVkIHN0YXJ0IDogMjk7Ci0gICAgdW5zaWdu
ZWQgaXNFbmRPZkxpbmUgOiAxOwotICAgIHVuc2lnbmVkIGhhc0h5cGhlbiA6IDE7Ci0gICAgdW5z
aWduZWQgaXNMaW5lQnJlYWsgOiAxOwotICAgIGZsb2F0IGxvZ2ljYWxMZWZ0OwotICAgIGZsb2F0
IGxvZ2ljYWxSaWdodDsKLSAgICAvLyBUT0RPOiBNb3ZlIHRoZXNlIG9wdGlvbmFsIGl0ZW1zIG91
dCBvZiBTaW1wbGVMaW5lTGF5b3V0OjpSdW4gdG8gYSBzdXBwbGVtZW50YXJ5IHN0cnVjdHVyZS4K
LSAgICBmbG9hdCBleHBhbnNpb24geyAwIH07Ci0gICAgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5z
aW9uQmVoYXZpb3IgeyBGb3JiaWRMZWZ0RXhwYW5zaW9uIHwgRm9yYmlkUmlnaHRFeHBhbnNpb24g
fTsKLX07Ci0KLXN0cnVjdCBTaW1wbGVMaW5lU3RydXQgewotICAgIHVuc2lnbmVkIGxpbmVCcmVh
azsKLSAgICBmbG9hdCBvZmZzZXQ7Ci19OwotCi1jbGFzcyBMYXlvdXQgOiBwdWJsaWMgUmVmQ291
bnRlZDxMYXlvdXQ+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICB1c2luZyBSdW5WZWN0b3IgPSBWZWN0b3I8UnVuLCAxMD47Ci0gICAgdXNpbmcgU2ltcGxlTGlu
ZVN0cnV0cyA9IFZlY3RvcjxTaW1wbGVMaW5lU3RydXQsIDQ+OwotICAgIHN0YXRpYyBSZWY8TGF5
b3V0PiBjcmVhdGUoY29uc3QgUnVuVmVjdG9yJiwgdW5zaWduZWQgbGluZUNvdW50LCBjb25zdCBS
ZW5kZXJCbG9ja0Zsb3cmKTsKLQotICAgIH5MYXlvdXQoKTsKLQotICAgIHVuc2lnbmVkIGxpbmVD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNvdW50OyB9Ci0KLSAgICB1bnNpZ25lZCBydW5D
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcnVuQ291bnQ7IH0KLSAgICBjb25zdCBSdW4mIHJ1bkF0
KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fcnVuc1tpXTsgfQotCi0gICAgdm9pZCBzZXRJ
c1BhZ2luYXRlZCgpIHsgbV9pc1BhZ2luYXRlZCA9IHRydWU7IH0KLSAgICBib29sIGlzUGFnaW5h
dGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1BhZ2luYXRlZDsgfQotICAgIGJvb2wgaGFzTGluZVN0
cnV0cygpIGNvbnN0IHsgcmV0dXJuICFtX2xpbmVTdHJ1dHMuaXNFbXB0eSgpOyB9Ci0gICAgdm9p
ZCBzZXRMaW5lU3RydXRzKFNpbXBsZUxpbmVTdHJ1dHMmJiBsaW5lU3RydXRzKSB7IG1fbGluZVN0
cnV0cyA9IGxpbmVTdHJ1dHM7IH0KLSAgICBjb25zdCBTaW1wbGVMaW5lU3RydXRzJiBzdHJ1dHMo
KSBjb25zdCB7IHJldHVybiBtX2xpbmVTdHJ1dHM7IH0KLSAgICBjb25zdCBSdW5SZXNvbHZlciYg
cnVuUmVzb2x2ZXIoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBMYXlvdXQoY29uc3QgUnVuVmVj
dG9yJiwgdW5zaWduZWQgbGluZUNvdW50LCBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmKTsKLQotICAg
IHVuc2lnbmVkIG1fbGluZUNvdW50OwotICAgIHVuc2lnbmVkIG1fcnVuQ291bnQ7Ci0gICAgYm9v
bCBtX2lzUGFnaW5hdGVkIHsgZmFsc2UgfTsKLSAgICBTaW1wbGVMaW5lU3RydXRzIG1fbGluZVN0
cnV0czsKLSAgICBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIG1fYmxvY2tGbG93UmVuZGVyZXI7Ci0g
ICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8UnVuUmVzb2x2ZXI+IG1fcnVuUmVzb2x2ZXI7Ci0g
ICAgUnVuIG1fcnVuc1swXTsKLX07Ci0KLVJlZjxMYXlvdXQ+IGNyZWF0ZShSZW5kZXJCbG9ja0Zs
b3cmKTsKLQotfQotfQotCi0jaWYgQ09NUElMRVIoTVNWQykKLSNwcmFnbWEgd2FybmluZyhwb3Ap
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0Q292ZXJhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXRDb3ZlcmFnZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NjgxMTYz
ODI4MC4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0Q292ZXJhZ2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzcyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91
dENvdmVyYWdlLmgiCi0KLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxv
Y2tGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlNldHRpbmdz
LmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1Rl
eHRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIFNpbXBsZUxpbmVM
YXlvdXQgewotCi0jaWZuZGVmIE5ERUJVRwotc3RhdGljIHZvaWQgcHJpbnRSZWFzb24oQXZvaWRh
bmNlUmVhc29uIHJlYXNvbiwgVGV4dFN0cmVhbSYgc3RyZWFtKQotewotICAgIHN3aXRjaCAocmVh
c29uKSB7Ci0gICAgY2FzZSBGbG93SXNJbnNpZGVBTm9uTXVsdGlDb2x1bW5UaHJlYWQ6Ci0gICAg
ICAgIHN0cmVhbSA8PCAiZmxvdyBpcyBpbnNpZGUgYSBub24tbXVsdGljb2x1bW4gY29udGFpbmVy
IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzSG9yaXpvbmFsV3JpdGluZ01vZGU6
Ci0gICAgICAgIHN0cmVhbSA8PCAiaG9yaXpvbnRhbCB3cml0aW5nIG1vZGUiOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZsb3dIYXNPdXRsaW5lOgotICAgICAgICBzdHJlYW0gPDwgIm91dGxp
bmUiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dJc1J1Ynk6Ci0gICAgICAgIHN0cmVh
bSA8PCAicnVieSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc0hhbmdpbmdQdW5j
dHVhdGlvbjoKLSAgICAgICAgc3RyZWFtIDw8ICJoYW5naW5nIHB1bmN0dWF0aW9uIjsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SXNQYWdpbmF0ZWQ6Ci0gICAgICAgIHN0cmVhbSA8PCAi
cGFnaW5hdGVkIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzVGV4dE92ZXJmbG93
OgotICAgICAgICBzdHJlYW0gPDwgInRleHQtb3ZlcmZsb3ciOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZsb3dJc0RlcHJpY2F0ZWRGbGV4Qm94OgotICAgICAgICBzdHJlYW0gPDwgImRlcHJp
Y2F0ZWRGbGV4Qm94IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93UGFyZW50SXNQbGFj
ZWhvbGRlckVsZW1lbnQ6Ci0gICAgICAgIHN0cmVhbSA8PCAicGxhY2Vob2xkZXIgZWxlbWVudCI7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd1BhcmVudElzVGV4dEFyZWFXaXRoV3JhcHBp
bmc6Ci0gICAgICAgIHN0cmVhbSA8PCAid3JhcHBpbmcgdGV4dGFyZWEiOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZsb3dIYXNOb25TdXBwb3J0ZWRDaGlsZDoKLSAgICAgICAgc3RyZWFtIDw8
ICJuZXN0ZWQgcmVuZGVyZXJzIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzVW5z
dXBwb3J0ZWRGbG9hdDoKLSAgICAgICAgc3RyZWFtIDw8ICJjb21wbGljYXRlZCBmbG9hdCI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc1Vuc3VwcG9ydGVkVW5kZXJsaW5lRGVjb3Jh
dGlvbjoKLSAgICAgICAgc3RyZWFtIDw8ICJ0ZXh0LXVuZGVybGluZS1wb3NpdGlvbjogdW5kZXIi
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNKdXN0aWZpZWROb25MYXRpblRleHQ6
Ci0gICAgICAgIHN0cmVhbSA8PCAidGV4dC1hbGlnbjoganVzdGlmeSB3aXRoIG5vbi1sYXRpbiB0
ZXh0IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzT3ZlcmZsb3dOb3RWaXNpYmxl
OgotICAgICAgICBzdHJlYW0gPDwgIm92ZXJmbG93OiBoaWRkZW4gfCBzY3JvbGwgfCBhdXRvIjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzV2ViS2l0TkJTUE1vZGU6Ci0gICAgICAg
IHN0cmVhbSA8PCAiLXdlYmtpdC1uYnNwLW1vZGU6IHNwYWNlIjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBGbG93SXNOb3RMVFI6Ci0gICAgICAgIHN0cmVhbSA8PCAiZGlyIGlzIG5vdCBMVFIi
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNMaW5lQm94Q29udGFpblByb3BlcnR5
OgotICAgICAgICBzdHJlYW0gPDwgImxpbmUtYm94LWNvbnRhaW4gdmFsdWUgaW5kaWNhdGVzIHZh
cmlhYmxlIGxpbmUgaGVpZ2h0IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SXNOb3RU
b3BUb0JvdHRvbToKLSAgICAgICAgc3RyZWFtIDw8ICJub24gdG9wLXRvLWJvdHRvbSBmbG93IjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzTGluZUJyZWFrOgotICAgICAgICBzdHJl
YW0gPDwgImxpbmUtYnJlYWsgcHJvcGVydHkiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZs
b3dIYXNOb25Ob3JtYWxVbmljb2RlQmlEaToKLSAgICAgICAgc3RyZWFtIDw8ICJub24tbm9ybWFs
IFVuaWNvZGUgYmlkaSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc1JUTE9yZGVy
aW5nOgotICAgICAgICBzdHJlYW0gPDwgIi13ZWJraXQtcnRsLW9yZGVyaW5nIjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzTGluZUFsaWduRWRnZXM6Ci0gICAgICAgIHN0cmVhbSA8
PCAiLXdlYmtpdC1saW5lLWFsaWduIGVkZ2VzIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
bG93SGFzTGluZVNuYXA6Ci0gICAgICAgIHN0cmVhbSA8PCAiLXdlYmtpdC1saW5lLXNuYXAgcHJv
cGVydHkiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNUZXh0RW1waGFzaXNGaWxs
T3JNYXJrOgotICAgICAgICBzdHJlYW0gPDwgInRleHQtZW1waGFzaXMgKGZpbGwvbWFyaykiOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNQc2V1ZG9GaXJzdExpbmU6Ci0gICAgICAg
IHN0cmVhbSA8PCAiZmlyc3QtbGluZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hh
c1BzZXVkb0ZpcnN0TGV0dGVyOgotICAgICAgICBzdHJlYW0gPDwgImZpcnN0LWxldHRlciI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc1RleHRDb21iaW5lOgotICAgICAgICBzdHJl
YW0gPDwgInRleHQgY29tYmluZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc1Rl
eHRGaWxsQm94OgotICAgICAgICBzdHJlYW0gPDwgImJhY2tncm91bmQtY29sb3IgKHRleHQtZmls
bCkiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNCb3JkZXJGaXRMaW5lczoKLSAg
ICAgICAgc3RyZWFtIDw8ICItd2Via2l0LWJvcmRlci1maXQiOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZsb3dIYXNOb25BdXRvTGluZUJyZWFrOgotICAgICAgICBzdHJlYW0gPDwgImxpbmUt
YnJlYWsgaXMgbm90IGF1dG8iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNUZXh0
U2VjdXJpdHk6Ci0gICAgICAgIHN0cmVhbSA8PCAidGV4dC1zZWN1cml0eSBpcyBub3Qgbm9uZSI7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc1NWR0ZvbnQ6Ci0gICAgICAgIHN0cmVh
bSA8PCAiU1ZHIGZvbnQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dUZXh0SGFzU29m
dEh5cGhlbjoKLSAgICAgICAgc3RyZWFtIDw8ICJzb2Z0IGh5cGhlbiBjaGFyYWN0ZXIiOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dUZXh0SGFzRGlyZWN0aW9uQ2hhcmFjdGVyOgotICAg
ICAgICBzdHJlYW0gPDwgImRpcmVjdGlvbiBjaGFyYWN0ZXIiOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZsb3dJc01pc3NpbmdQcmltYXJ5Rm9udDoKLSAgICAgICAgc3RyZWFtIDw8ICJtaXNz
aW5nIHByaW1hcnkgZm9udCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd1ByaW1hcnlG
b250SXNJbnN1ZmZpY2llbnQ6Ci0gICAgICAgIHN0cmVhbSA8PCAibWlzc2luZyBnbHlwaCBvciBn
bHlwaCBuZWVkcyBhbm90aGVyIGZvbnQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dU
ZXh0SXNDb21iaW5lVGV4dDoKLSAgICAgICAgc3RyZWFtIDw8ICJ0ZXh0IGlzIGNvbWJpbmUiOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dUZXh0SXNSZW5kZXJDb3VudGVyOgotICAgICAg
ICBzdHJlYW0gPDwgInVuc3VwcG9ydGVkIFJlbmRlckNvdW50ZXIiOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZsb3dUZXh0SXNSZW5kZXJRdW90ZToKLSAgICAgICAgc3RyZWFtIDw8ICJ1bnN1
cHBvcnRlZCBSZW5kZXJRdW90ZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd1RleHRJ
c1RleHRGcmFnbWVudDoKLSAgICAgICAgc3RyZWFtIDw8ICJ1bnN1cHBvcnRlZCBUZXh0RnJhZ21l
bnQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dUZXh0SXNTVkdJbmxpbmVUZXh0Ogot
ICAgICAgICBzdHJlYW0gPDwgInVuc3VwcG9ydGVkIFNWR0lubGluZVRleHQiOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZsb3dIYXNDb21wbGV4Rm9udENvZGVQYXRoOgotICAgICAgICBzdHJl
YW0gPDwgInRleHQgd2l0aCBjb21wbGV4IGZvbnQgY29kZXBhdGgiOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZsb3dIYXNUZXh0U2hhZG93OgotICAgICAgICBzdHJlYW0gPDwgInRleHQtc2hh
ZG93IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93Q2hpbGRJc1NlbGVjdGVkOgotICAg
ICAgICBzdHJlYW0gPDwgInNlbGVjdGVkIGNvbnRlbnQiOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZsb3dGb250SGFzT3ZlcmZsb3dHbHlwaDoKLSAgICAgICAgc3RyZWFtIDw8ICItd2Via2l0
LWxpbmUtYm94LWNvbnRhaW46IGdseXBocyB3aXRoIG92ZXJmbG93aW5nIHRleHQuIjsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93VGV4dEhhc1N1cnJvZ2F0ZVBhaXI6Ci0gICAgICAgIHN0
cmVhbSA8PCAic3Vycm9nYXRlIHBhaXIiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE11bHRp
Q29sdW1uRmxvd0lzTm90VG9wTGV2ZWw6Ci0gICAgICAgIHN0cmVhbSA8PCAibm9uIHRvcCBsZXZl
bCBjb2x1bW4iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE11bHRpQ29sdW1uRmxvd0hhc0Nv
bHVtblNwYW5uZXI6Ci0gICAgICAgIHN0cmVhbSA8PCAiY29sdW1uIGhhcyBzcGFubmVyIjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNdWx0aUNvbHVtbkZsb3dWZXJ0aWNhbEFsaWduOgotICAg
ICAgICBzdHJlYW0gPDwgImNvbHVtbiB3aXRoIHZlcnRpY2FsLWFsaWduICE9IGJhc2VsaW5lIjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNdWx0aUNvbHVtbkZsb3dJc0Zsb2F0aW5nOgotICAg
ICAgICBzdHJlYW0gPDwgImNvbHVtbiB3aXRoIGZsb2F0aW5nIG9iamVjdHMiOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZsb3dJbmNsdWRlc0RvY3VtZW50TWFya2VyczoKLSAgICAgICAgc3Ry
ZWFtIDw8ICJ0ZXh0IGluY2x1ZGVzIGRvY3VtZW50IG1hcmtlcnMiOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZsb3dUZXh0SXNFbXB0eToKLSAgICBjYXNlIEZsb3dIYXNOb0NoaWxkOgotICAg
IGNhc2UgRmxvd0hhc05vUGFyZW50OgotICAgIGNhc2UgRmVhdHVyZUlzRGlzYWJsZWQ6Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBwcmludFJl
YXNvbnMoQXZvaWRhbmNlUmVhc29uRmxhZ3MgcmVhc29ucywgVGV4dFN0cmVhbSYgc3RyZWFtKQot
ewotICAgIGJvb2wgZmlyc3QgPSB0cnVlOwotICAgIGZvciAoYXV0byByZWFzb25JdGVtID0gRW5k
T2ZSZWFzb25zID4+IDE7IHJlYXNvbkl0ZW0gIT0gTm9SZWFzb247IHJlYXNvbkl0ZW0gPj49IDEp
IHsKLSAgICAgICAgaWYgKCEocmVhc29ucyAmIHJlYXNvbkl0ZW0pKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIHN0cmVhbSA8PCAoZmlyc3QgPyAiICIgOiAiLCAiKTsKLSAgICAgICAg
Zmlyc3QgPSBmYWxzZTsKLSAgICAgICAgcHJpbnRSZWFzb24ocmVhc29uSXRlbSwgc3RyZWFtKTsK
LSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50VGV4dEZvclN1YnRyZWUoY29uc3QgUmVuZGVy
T2JqZWN0JiByZW5kZXJlciwgdW5zaWduZWQmIGNoYXJhY3RlcnNMZWZ0LCBUZXh0U3RyZWFtJiBz
dHJlYW0pCi17Ci0gICAgaWYgKCFjaGFyYWN0ZXJzTGVmdCkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmIChpczxSZW5kZXJUZXh0PihyZW5kZXJlcikpIHsKLSAgICAgICAgU3RyaW5nIHRleHQgPSBk
b3duY2FzdDxSZW5kZXJUZXh0PihyZW5kZXJlcikudGV4dCgpOwotICAgICAgICB0ZXh0ID0gdGV4
dC5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgdW5zaWduZWQgbGVuID0gc3RkOjptaW4oY2hh
cmFjdGVyc0xlZnQsIHRleHQubGVuZ3RoKCkpOwotICAgICAgICBzdHJlYW0gPDwgdGV4dC5sZWZ0
KGxlbik7Ci0gICAgICAgIGNoYXJhY3RlcnNMZWZ0IC09IGxlbjsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpZiAoIWlzPFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGZvciAoY29uc3QgYXV0byogY2hpbGQgPSBkb3duY2FzdDxSZW5kZXJFbGVtZW50
PihyZW5kZXJlcikuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkKLSAgICAgICAgcHJpbnRUZXh0Rm9yU3VidHJlZSgqY2hpbGQsIGNoYXJhY3RlcnNMZWZ0
LCBzdHJlYW0pOwotfQotCi1zdGF0aWMgdW5zaWduZWQgdGV4dExlbmd0aEZvclN1YnRyZWUoY29u
c3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikKLXsKLSAgICBpZiAoaXM8UmVuZGVyVGV4dD4ocmVu
ZGVyZXIpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGV4dD4ocmVuZGVyZXIpLnRl
eHQoKS5sZW5ndGgoKTsKLSAgICBpZiAoIWlzPFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IDA7Ci0gICAgZm9yIChj
b25zdCBhdXRvKiBjaGlsZCA9IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKS5maXJz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICB0
ZXh0TGVuZ3RoICs9IHRleHRMZW5ndGhGb3JTdWJ0cmVlKCpjaGlsZCk7Ci0gICAgcmV0dXJuIHRl
eHRMZW5ndGg7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbGxlY3ROb25FbXB0eUxlYWZSZW5kZXJCbG9j
a0Zsb3dzKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIEhhc2hTZXQ8Y29uc3QgUmVuZGVy
QmxvY2tGbG93Kj4mIGxlYWZSZW5kZXJlcnMpCi17Ci0gICAgaWYgKGlzPFJlbmRlclRleHQ+KHJl
bmRlcmVyKSkgewotICAgICAgICBpZiAoIWRvd25jYXN0PFJlbmRlclRleHQ+KHJlbmRlcmVyKS50
ZXh0KCkubGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIC8vIEZpbmQgUmVu
ZGVyQmxvY2tGbG93IGFuY2VzdG9yLgotICAgICAgICBmb3IgKGNvbnN0IGF1dG8qIGN1cnJlbnQg
PSByZW5kZXJlci5wYXJlbnQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudCgp
KSB7Ci0gICAgICAgICAgICBpZiAoIWlzPFJlbmRlckJsb2NrRmxvdz4oY3VycmVudCkpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBsZWFmUmVuZGVyZXJzLmFkZChkb3du
Y2FzdDxSZW5kZXJCbG9ja0Zsb3c+KGN1cnJlbnQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFpczxSZW5kZXJFbGVtZW50
PihyZW5kZXJlcikpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKGNvbnN0IGF1dG8qIGNoaWxk
ID0gZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNvbGxlY3ROb25FbXB0eUxl
YWZSZW5kZXJCbG9ja0Zsb3dzKCpjaGlsZCwgbGVhZlJlbmRlcmVycyk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGNvbGxlY3ROb25FbXB0eUxlYWZSZW5kZXJCbG9ja0Zsb3dzRm9yQ3VycmVudFBhZ2UoSGFz
aFNldDxjb25zdCBSZW5kZXJCbG9ja0Zsb3cqPiYgbGVhZlJlbmRlcmVycykKLXsKLSAgICBmb3Ig
KGNvbnN0IGF1dG8qIGRvY3VtZW50IDogRG9jdW1lbnQ6OmFsbERvY3VtZW50cygpKSB7Ci0gICAg
ICAgIGlmICghZG9jdW1lbnQtPnJlbmRlclZpZXcoKSB8fCBkb2N1bWVudC0+YmFja0ZvcndhcmRD
YWNoZVN0YXRlKCkgIT0gRG9jdW1lbnQ6Ok5vdEluQmFja0ZvcndhcmRDYWNoZSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpICYm
ICFkb2N1bWVudC0+aXNYSFRNTERvY3VtZW50KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgY29sbGVjdE5vbkVtcHR5TGVhZlJlbmRlckJsb2NrRmxvd3MoKmRvY3VtZW50LT5yZW5k
ZXJWaWV3KCksIGxlYWZSZW5kZXJlcnMpOwotICAgIH0KLX0KLQotdm9pZCB0b2dnbGVTaW1wbGVM
aW5lTGF5b3V0KCkKLXsKLSAgICBmb3IgKGF1dG8qIGRvY3VtZW50IDogRG9jdW1lbnQ6OmFsbERv
Y3VtZW50cygpKSB7Ci0gICAgICAgIGF1dG8mIHNldHRpbmdzID0gZG9jdW1lbnQtPm11dGFibGVT
ZXR0aW5ncygpOwotICAgICAgICBzZXR0aW5ncy5zZXRTaW1wbGVMaW5lTGF5b3V0RW5hYmxlZCgh
c2V0dGluZ3Muc2ltcGxlTGluZUxheW91dEVuYWJsZWQoKSk7Ci0gICAgfQotfQotCi12b2lkIHBy
aW50U2ltcGxlTGluZUxheW91dEJsb2NrTGlzdCgpCi17Ci0gICAgSGFzaFNldDxjb25zdCBSZW5k
ZXJCbG9ja0Zsb3cqPiBsZWFmUmVuZGVyZXJzOwotICAgIGNvbGxlY3ROb25FbXB0eUxlYWZSZW5k
ZXJCbG9ja0Zsb3dzRm9yQ3VycmVudFBhZ2UobGVhZlJlbmRlcmVycyk7Ci0gICAgaWYgKCFsZWFm
UmVuZGVyZXJzLnNpemUoKSkgewotICAgICAgICBXVEZMb2dBbHdheXMoIk5vIHRleHQgZm91bmQg
aW4gdGhpcyBkb2N1bWVudFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgVGV4dFN0
cmVhbSBzdHJlYW07Ci0gICAgc3RyZWFtIDw8ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7Ci0gICAgZm9yIChjb25zdCBhdXRvKiBmbG93IDog
bGVhZlJlbmRlcmVycykgewotICAgICAgICBhdXRvIHJlYXNvbiA9IGNhblVzZUZvcldpdGhSZWFz
b24oKmZsb3csIEluY2x1ZGVSZWFzb25zOjpBbGwpOwotICAgICAgICBpZiAocmVhc29uID09IE5v
UmVhc29uKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVuc2lnbmVkIHByaW50ZWRM
ZW5ndGggPSAzMDsKLSAgICAgICAgc3RyZWFtIDw8ICJcIiI7Ci0gICAgICAgIHByaW50VGV4dEZv
clN1YnRyZWUoKmZsb3csIHByaW50ZWRMZW5ndGgsIHN0cmVhbSk7Ci0gICAgICAgIGZvciAoO3By
aW50ZWRMZW5ndGggPiAwOyAtLXByaW50ZWRMZW5ndGgpCi0gICAgICAgICAgICBzdHJlYW0gPDwg
IiAiOwotICAgICAgICBzdHJlYW0gPDwgIlwiKCIgPDwgdGV4dExlbmd0aEZvclN1YnRyZWUoKmZs
b3cpIDw8ICIpOiI7Ci0gICAgICAgIHByaW50UmVhc29ucyhyZWFzb24sIHN0cmVhbSk7Ci0gICAg
ICAgIHN0cmVhbSA8PCAiXG4iOwotICAgIH0KLSAgICBzdHJlYW0gPDwgIi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKLSAgICBXVEZMb2dBbHdh
eXMoIiVzIiwgc3RyZWFtLnJlbGVhc2UoKS51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBwcmlu
dFNpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZSgpCi17Ci0gICAgSGFzaFNldDxjb25zdCBSZW5kZXJC
bG9ja0Zsb3cqPiBsZWFmUmVuZGVyZXJzOwotICAgIGNvbGxlY3ROb25FbXB0eUxlYWZSZW5kZXJC
bG9ja0Zsb3dzRm9yQ3VycmVudFBhZ2UobGVhZlJlbmRlcmVycyk7Ci0gICAgaWYgKCFsZWFmUmVu
ZGVyZXJzLnNpemUoKSkgewotICAgICAgICBXVEZMb2dBbHdheXMoIk5vIHRleHQgZm91bmQgaW4g
dGhpcyBkb2N1bWVudFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgVGV4dFN0cmVh
bSBzdHJlYW07Ci0gICAgSGFzaE1hcDxBdm9pZGFuY2VSZWFzb24sIHVuc2lnbmVkPiBmbG93U3Rh
dGlzdGljczsKLSAgICB1bnNpZ25lZCB0ZXh0TGVuZ3RoID0gMDsKLSAgICB1bnNpZ25lZCB1bnN1
cHBvcnRlZFRleHRMZW5ndGggPSAwOwotICAgIHVuc2lnbmVkIG51bWJlck9mVW5zdXBwb3J0ZWRM
ZWFmQmxvY2tzID0gMDsKLSAgICB1bnNpZ25lZCBzdXBwb3J0ZWRCdXRGb3JjZWRUb0xpbmVMYXlv
dXRUZXh0TGVuZ3RoID0gMDsKLSAgICB1bnNpZ25lZCBudW1iZXJPZlN1cHBvcnRlZEJ1dEZvcmNl
ZFRvTGluZUxheW91dExlYWZCbG9ja3MgPSAwOwotICAgIGZvciAoY29uc3QgYXV0byogZmxvdyA6
IGxlYWZSZW5kZXJlcnMpIHsKLSAgICAgICAgYXV0byBmbG93TGVuZ3RoID0gdGV4dExlbmd0aEZv
clN1YnRyZWUoKmZsb3cpOwotICAgICAgICB0ZXh0TGVuZ3RoICs9IGZsb3dMZW5ndGg7Ci0gICAg
ICAgIGF1dG8gcmVhc29ucyA9IGNhblVzZUZvcldpdGhSZWFzb24oKmZsb3csIEluY2x1ZGVSZWFz
b25zOjpBbGwpOwotICAgICAgICBpZiAocmVhc29ucyA9PSBOb1JlYXNvbikgewotICAgICAgICAg
ICAgaWYgKGZsb3ctPmxpbmVMYXlvdXRQYXRoKCkgPT0gUmVuZGVyQmxvY2tGbG93OjpGb3JjZUxp
bmVCb3hlc1BhdGgpIHsKLSAgICAgICAgICAgICAgICBzdXBwb3J0ZWRCdXRGb3JjZWRUb0xpbmVM
YXlvdXRUZXh0TGVuZ3RoICs9IGZsb3dMZW5ndGg7Ci0gICAgICAgICAgICAgICAgKytudW1iZXJP
ZlN1cHBvcnRlZEJ1dEZvcmNlZFRvTGluZUxheW91dExlYWZCbG9ja3M7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICArK251bWJlck9mVW5z
dXBwb3J0ZWRMZWFmQmxvY2tzOwotICAgICAgICB1bnN1cHBvcnRlZFRleHRMZW5ndGggKz0gZmxv
d0xlbmd0aDsKLSAgICAgICAgZm9yIChhdXRvIHJlYXNvbkl0ZW0gPSBFbmRPZlJlYXNvbnMgPj4g
MTsgcmVhc29uSXRlbSAhPSBOb1JlYXNvbjsgcmVhc29uSXRlbSA+Pj0gMSkgewotICAgICAgICAg
ICAgaWYgKCEocmVhc29ucyAmIHJlYXNvbkl0ZW0pKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBmbG93U3RhdGlzdGljcy5hZGQocmVhc29uSXRl
bSwgZmxvd0xlbmd0aCk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAg
ICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gZmxvd0xlbmd0aDsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBzdHJlYW0gPDwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKLSAgICBzdHJlYW0gPDwgIk51bWJlciBvZiBibG9j
a3M6IHRvdGFsKCIgPDwgIGxlYWZSZW5kZXJlcnMuc2l6ZSgpIDw8ICIpIG5vbi1zaW1wbGUoIiA8
PCBudW1iZXJPZlVuc3VwcG9ydGVkTGVhZkJsb2NrcyA8PCAiKVxuQ29udGVudCBsZW5ndGg6IHRv
dGFsKCIgPDwKLSAgICAgICAgdGV4dExlbmd0aCA8PCAiKSBub24tc2ltcGxlKCIgPDwgdW5zdXBw
b3J0ZWRUZXh0TGVuZ3RoIDw8ICIpXG4iOwotICAgIGZvciAoY29uc3QgYXV0byYgcmVhc29uRW50
cnkgOiBmbG93U3RhdGlzdGljcykgewotICAgICAgICBwcmludFJlYXNvbihyZWFzb25FbnRyeS5r
ZXksIHN0cmVhbSk7Ci0gICAgICAgIHN0cmVhbSA8PCAiOiAiIDw8IChmbG9hdClyZWFzb25FbnRy
eS52YWx1ZSAvIChmbG9hdCl0ZXh0TGVuZ3RoICogMTAwIDw8ICIlXG4iOwotICAgIH0KLSAgICBp
ZiAoc3VwcG9ydGVkQnV0Rm9yY2VkVG9MaW5lTGF5b3V0VGV4dExlbmd0aCkgewotICAgICAgICBz
dHJlYW0gPDwgIlNpbXBsZSBsaW5lIGxheW91dCBwb3RlbnRpYWwgY292ZXJhZ2U6ICIgPDwgKGZs
b2F0KSh0ZXh0TGVuZ3RoIC0gdW5zdXBwb3J0ZWRUZXh0TGVuZ3RoKSAvIChmbG9hdCl0ZXh0TGVu
Z3RoICogMTAwIDw8ICIlXG5cbiI7Ci0gICAgICAgIHN0cmVhbSA8PCAiU2ltcGxlIGxpbmUgbGF5
b3V0IGFjdHVhbCBjb3ZlcmFnZTogIiA8PCAoZmxvYXQpKHRleHRMZW5ndGggLSB1bnN1cHBvcnRl
ZFRleHRMZW5ndGggLSBzdXBwb3J0ZWRCdXRGb3JjZWRUb0xpbmVMYXlvdXRUZXh0TGVuZ3RoKSAv
IChmbG9hdCl0ZXh0TGVuZ3RoICogMTAwIDw8ICIlXG5Gb3JjZWQgbGluZSBsYXlvdXQgYmxvY2tz
OiAiIDw8IG51bWJlck9mU3VwcG9ydGVkQnV0Rm9yY2VkVG9MaW5lTGF5b3V0TGVhZkJsb2NrcyA8
PCAiIGNvbnRlbnQgbGVuZ3RoOiAiIDw8IHN1cHBvcnRlZEJ1dEZvcmNlZFRvTGluZUxheW91dFRl
eHRMZW5ndGggPDwgIigiIDw8IChmbG9hdClzdXBwb3J0ZWRCdXRGb3JjZWRUb0xpbmVMYXlvdXRU
ZXh0TGVuZ3RoIC8gKGZsb2F0KXRleHRMZW5ndGggKiAxMDAgPDwgIiUpIjsKLSAgICB9IGVsc2UK
LSAgICAgICAgc3RyZWFtIDw8ICJTaW1wbGUgbGluZSBsYXlvdXQgY292ZXJhZ2U6ICIgPDwgKGZs
b2F0KSh0ZXh0TGVuZ3RoIC0gdW5zdXBwb3J0ZWRUZXh0TGVuZ3RoKSAvIChmbG9hdCl0ZXh0TGVu
Z3RoICogMTAwIDw8ICIlIjsKLSAgICBzdHJlYW0gPDwgIlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iOwotICAgIFdURkxvZ0Fsd2F5cygiJXMi
LCBzdHJlYW0ucmVsZWFzZSgpLnV0ZjgoKS5kYXRhKCkpOwotfQotI2VuZGlmCi0KLX0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Q292ZXJh
Z2UuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2Uu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgyNGU5NTBjNGEwLi4wMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRDb3ZlcmFn
ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQg
ewotCi0jaWZuZGVmIE5ERUJVRwotdm9pZCBwcmludFNpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZSgp
Owotdm9pZCBwcmludFNpbXBsZUxpbmVMYXlvdXRCbG9ja0xpc3QoKTsKLXZvaWQgdG9nZ2xlU2lt
cGxlTGluZUxheW91dCgpOwotI2VuZGlmCi0KLWVudW0gQXZvaWRhbmNlUmVhc29uXyA6IHVpbnQ2
NF90IHsKLSAgICBGbG93SXNJbnNpZGVBTm9uTXVsdGlDb2x1bW5UaHJlYWQgICAgID0gMUxMVSAg
PDwgMCwKLSAgICBGbG93SGFzSG9yaXpvbmFsV3JpdGluZ01vZGUgICAgICAgICAgID0gMUxMVSAg
PDwgMSwKLSAgICBGbG93SGFzT3V0bGluZSAgICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAg
PDwgMiwKLSAgICBGbG93SXNSdWJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAg
PDwgMywKLSAgICBGbG93SXNQYWdpbmF0ZWQgICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAg
PDwgNCwKLSAgICBGbG93SGFzVGV4dE92ZXJmbG93ICAgICAgICAgICAgICAgICAgID0gMUxMVSAg
PDwgNSwKLSAgICBGbG93SXNEZXByaWNhdGVkRmxleEJveCAgICAgICAgICAgICAgID0gMUxMVSAg
PDwgNiwKLSAgICBGbG93UGFyZW50SXNQbGFjZWhvbGRlckVsZW1lbnQgICAgICAgID0gMUxMVSAg
PDwgNywKLSAgICBGbG93UGFyZW50SXNUZXh0QXJlYVdpdGhXcmFwcGluZyAgICAgID0gMUxMVSAg
PDwgOCwKLSAgICBGbG93SGFzTm9uU3VwcG9ydGVkQ2hpbGQgICAgICAgICAgICAgID0gMUxMVSAg
PDwgOSwKLSAgICBGbG93SGFzVW5zdXBwb3J0ZWRGbG9hdCAgICAgICAgICAgICAgID0gMUxMVSAg
PDwgMTAsCi0gICAgRmxvd0hhc1Vuc3VwcG9ydGVkVW5kZXJsaW5lRGVjb3JhdGlvbiA9IDFMTFUg
IDw8IDExLAotICAgIEZsb3dIYXNKdXN0aWZpZWROb25MYXRpblRleHQgICAgICAgICAgPSAxTExV
ICA8PCAxMiwKLSAgICBGbG93SGFzT3ZlcmZsb3dOb3RWaXNpYmxlICAgICAgICAgICAgID0gMUxM
VSAgPDwgMTMsCi0gICAgRmxvd0hhc1dlYktpdE5CU1BNb2RlICAgICAgICAgICAgICAgICA9IDFM
TFUgIDw8IDE0LAotICAgIEZsb3dJc05vdExUUiAgICAgICAgICAgICAgICAgICAgICAgICAgPSAx
TExVICA8PCAxNSwKLSAgICBGbG93SGFzTGluZUJveENvbnRhaW5Qcm9wZXJ0eSAgICAgICAgID0g
MUxMVSAgPDwgMTYsCi0gICAgRmxvd0lzTm90VG9wVG9Cb3R0b20gICAgICAgICAgICAgICAgICA9
IDFMTFUgIDw8IDE3LAotICAgIEZsb3dIYXNMaW5lQnJlYWsgICAgICAgICAgICAgICAgICAgICAg
PSAxTExVICA8PCAxOCwKLSAgICBGbG93SGFzTm9uTm9ybWFsVW5pY29kZUJpRGkgICAgICAgICAg
ID0gMUxMVSAgPDwgMTksCi0gICAgRmxvd0hhc1JUTE9yZGVyaW5nICAgICAgICAgICAgICAgICAg
ICA9IDFMTFUgIDw8IDIwLAotICAgIEZsb3dIYXNMaW5lQWxpZ25FZGdlcyAgICAgICAgICAgICAg
ICAgPSAxTExVICA8PCAyMSwKLSAgICBGbG93SGFzTGluZVNuYXAgICAgICAgICAgICAgICAgICAg
ICAgID0gMUxMVSAgPDwgMjIsCi0gICAgRmxvd0hhc1RleHRFbXBoYXNpc0ZpbGxPck1hcmsgICAg
ICAgICA9IDFMTFUgIDw8IDIzLAotICAgIEZsb3dIYXNUZXh0U2hhZG93ICAgICAgICAgICAgICAg
ICAgICAgPSAxTExVICA8PCAyNCwKLSAgICBGbG93SGFzUHNldWRvRmlyc3RMaW5lICAgICAgICAg
ICAgICAgID0gMUxMVSAgPDwgMjUsCi0gICAgRmxvd0hhc1BzZXVkb0ZpcnN0TGV0dGVyICAgICAg
ICAgICAgICA9IDFMTFUgIDw8IDI2LAotICAgIEZsb3dIYXNUZXh0Q29tYmluZSAgICAgICAgICAg
ICAgICAgICAgPSAxTExVICA8PCAyNywKLSAgICBGbG93SGFzVGV4dEZpbGxCb3ggICAgICAgICAg
ICAgICAgICAgID0gMUxMVSAgPDwgMjgsCi0gICAgRmxvd0hhc0JvcmRlckZpdExpbmVzICAgICAg
ICAgICAgICAgICA9IDFMTFUgIDw8IDI5LAotICAgIEZsb3dIYXNOb25BdXRvTGluZUJyZWFrICAg
ICAgICAgICAgICAgPSAxTExVICA8PCAzMCwKLSAgICBGbG93SGFzVGV4dFNlY3VyaXR5ICAgICAg
ICAgICAgICAgICAgID0gMUxMVSAgPDwgMzEsCi0gICAgRmxvd0hhc1NWR0ZvbnQgICAgICAgICAg
ICAgICAgICAgICAgICA9IDFMTFUgIDw8IDMyLAotICAgIEZsb3dUZXh0SXNFbXB0eSAgICAgICAg
ICAgICAgICAgICAgICAgPSAxTExVICA8PCAzMywKLSAgICBGbG93VGV4dEhhc1NvZnRIeXBoZW4g
ICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMzQsCi0gICAgRmxvd1RleHRIYXNEaXJlY3Rpb25D
aGFyYWN0ZXIgICAgICAgICA9IDFMTFUgIDw8IDM1LAotICAgIEZsb3dJc01pc3NpbmdQcmltYXJ5
Rm9udCAgICAgICAgICAgICAgPSAxTExVICA8PCAzNiwKLSAgICBGbG93UHJpbWFyeUZvbnRJc0lu
c3VmZmljaWVudCAgICAgICAgID0gMUxMVSAgPDwgMzcsCi0gICAgRmxvd1RleHRJc0NvbWJpbmVU
ZXh0ICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDM4LAotICAgIEZsb3dUZXh0SXNSZW5kZXJD
b3VudGVyICAgICAgICAgICAgICAgPSAxTExVICA8PCAzOSwKLSAgICBGbG93VGV4dElzUmVuZGVy
UXVvdGUgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgNDAsCi0gICAgRmxvd1RleHRJc1RleHRG
cmFnbWVudCAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDQxLAotICAgIEZsb3dUZXh0SXNTVkdJ
bmxpbmVUZXh0ICAgICAgICAgICAgICAgPSAxTExVICA8PCA0MiwKLSAgICBGbG93SGFzQ29tcGxl
eEZvbnRDb2RlUGF0aCAgICAgICAgICAgID0gMUxMVSAgPDwgNDMsCi0gICAgRmVhdHVyZUlzRGlz
YWJsZWQgICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDQ0LAotICAgIEZsb3dIYXNOb1Bh
cmVudCAgICAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCA0NSwKLSAgICBGbG93SGFzTm9D
aGlsZCAgICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgNDYsCi0gICAgRmxvd0NoaWxk
SXNTZWxlY3RlZCAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDQ3LAotICAgIEZsb3dIYXNI
YW5naW5nUHVuY3R1YXRpb24gICAgICAgICAgICAgPSAxTExVICA8PCA0OCwKLSAgICBGbG93Rm9u
dEhhc092ZXJmbG93R2x5cGggICAgICAgICAgICAgID0gMUxMVSAgPDwgNDksCi0gICAgRmxvd1Rl
eHRIYXNTdXJyb2dhdGVQYWlyICAgICAgICAgICAgICA9IDFMTFUgIDw8IDUwLAotICAgIE11bHRp
Q29sdW1uRmxvd0lzTm90VG9wTGV2ZWwgICAgICAgICAgPSAxTExVICA8PCA1MSwKLSAgICBNdWx0
aUNvbHVtbkZsb3dIYXNDb2x1bW5TcGFubmVyICAgICAgID0gMUxMVSAgPDwgNTIsCi0gICAgTXVs
dGlDb2x1bW5GbG93VmVydGljYWxBbGlnbiAgICAgICAgICA9IDFMTFUgIDw8IDUzLAotICAgIE11
bHRpQ29sdW1uRmxvd0lzRmxvYXRpbmcgICAgICAgICAgICAgPSAxTExVICA8PCA1NCwKLSAgICBG
bG93SW5jbHVkZXNEb2N1bWVudE1hcmtlcnMgICAgICAgICAgID0gMUxMVSAgPDwgNTUsCi0gICAg
RW5kT2ZSZWFzb25zICAgICAgICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDU2Ci19Owot
Y29uc3QgdW5zaWduZWQgTm9SZWFzb24gPSAwOwotCi10eXBlZGVmIHVpbnQ2NF90IEF2b2lkYW5j
ZVJlYXNvbjsKLXR5cGVkZWYgdWludDY0X3QgQXZvaWRhbmNlUmVhc29uRmxhZ3M7Ci0KLWVudW0g
Y2xhc3MgSW5jbHVkZVJlYXNvbnMgeyBGaXJzdCAsIEFsbCB9OwotCi19Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50
cy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5YjM2YTBmMzI3NS4uMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxv
d0NvbnRlbnRzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZsb3dDb250
ZW50cy5oIgotCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVy
Q2hpbGRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgotI2luY2x1ZGUg
IlJlbmRlclRleHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIFNpbXBsZUxp
bmVMYXlvdXQgewotCi1zdGF0aWMgVmVjdG9yPEZsb3dDb250ZW50czo6U2VnbWVudD4gaW5pdGlh
bGl6ZVNlZ21lbnRzKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKLXsKLSAgICB1bnNpZ25l
ZCBudW1iZXJPZkNoaWxkcmVuID0gMDsKLSAgICBhdXRvIGNoaWxkcmVuID0gY2hpbGRyZW5PZlR5
cGU8UmVuZGVyT2JqZWN0PihmbG93KTsKLSAgICBmb3IgKGF1dG8gaXQgPSBjaGlsZHJlbi5iZWdp
bigpLCBlbmQgPSBjaGlsZHJlbi5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICArK251
bWJlck9mQ2hpbGRyZW47Ci0gICAgVmVjdG9yPEZsb3dDb250ZW50czo6U2VnbWVudD4gc2VnbWVu
dHM7Ci0gICAgc2VnbWVudHMucmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mQ2hpbGRyZW4pOwotICAg
IHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSAwOwotICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGls
ZHJlbk9mVHlwZTxSZW5kZXJPYmplY3Q+KGZsb3cpKSB7Ci0gICAgICAgIGlmIChpczxSZW5kZXJU
ZXh0PihjaGlsZCkpIHsKLSAgICAgICAgICAgIGF1dG8mIHRleHRDaGlsZCA9IGRvd25jYXN0PFJl
bmRlclRleHQ+KGNoaWxkKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSB0ZXh0
Q2hpbGQudGV4dCgpLmxlbmd0aCgpOwotICAgICAgICAgICAgc2VnbWVudHMuYXBwZW5kKEZsb3dD
b250ZW50czo6U2VnbWVudCB7IHN0YXJ0UG9zaXRpb24sIHN0YXJ0UG9zaXRpb24gKyB0ZXh0TGVu
Z3RoLCB0ZXh0Q2hpbGQudGV4dCgpLAotICAgICAgICAgICAgICAgIHRleHRDaGlsZCwgdGV4dENo
aWxkLmNhblVzZVNpbXBsaWZpZWRUZXh0TWVhc3VyaW5nKCkgfSk7Ci0gICAgICAgICAgICBzdGFy
dFBvc2l0aW9uICs9IHRleHRMZW5ndGg7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fQotICAgICAgICBpZiAoaXM8UmVuZGVyTGluZUJyZWFrPihjaGlsZCkpIHsKLSAgICAgICAgICAg
IHNlZ21lbnRzLmFwcGVuZChGbG93Q29udGVudHM6OlNlZ21lbnQgeyBzdGFydFBvc2l0aW9uLCBz
dGFydFBvc2l0aW9uLCBTdHJpbmcoKSwgY2hpbGQsIHRydWUgfSk7Ci0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHNlZ21lbnRzOwotfQotCi1GbG93Q29udGVudHM6OkZsb3dDb250ZW50cyhjb25z
dCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCi0gICAgOiBtX3NlZ21lbnRzKGluaXRpYWxpemVTZWdt
ZW50cyhmbG93KSkKLXsKLX0KLQotdW5zaWduZWQgRmxvd0NvbnRlbnRzOjpzZWdtZW50SW5kZXhG
b3JSdW5TbG93KHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpIGNvbnN0Ci17Ci0gICAgYXV0
byBpc0VtcHR5UmFuZ2UgPSBzdGFydCA9PSBlbmQ7Ci0gICAgYXV0byBpdCA9IHN0ZDo6bG93ZXJf
Ym91bmQobV9zZWdtZW50cy5iZWdpbigpLCBtX3NlZ21lbnRzLmVuZCgpLCBzdGFydCwgW2lzRW1w
dHlSYW5nZV0oY29uc3QgU2VnbWVudCYgc2VnbWVudCwgdW5zaWduZWQgc3RhcnQpIHsKLSAgICAg
ICAgLy8gRklYTUU6IFRoaXMgYWx3YXlzIGZpbmQgdGhlIGZpcnN0IGVtcHR5IHJ1biAoLnZzIHN1
YnNlcXVlbnQgPGJyPiBlbGVtZW50cykKLSAgICAgICAgcmV0dXJuIChpc0VtcHR5UmFuZ2UgJiYg
c2VnbWVudC5zdGFydCA9PSBzZWdtZW50LmVuZCkgPyBzZWdtZW50LnN0YXJ0IDwgc3RhcnQgOiBz
ZWdtZW50LmVuZCA8PSBzdGFydDsKLSAgICB9KTsKLSAgICBBU1NFUlQoaXQgIT0gbV9zZWdtZW50
cy5lbmQoKSk7Ci0gICAgQVNTRVJUKGVuZCA8PSBpdC0+ZW5kKTsKLSAgICBtX2xhc3RTZWdtZW50
SW5kZXggPSBpdCAtIG1fc2VnbWVudHMuYmVnaW4oKTsKLSAgICByZXR1cm4gbV9sYXN0U2VnbWVu
dEluZGV4OwotfQotCi19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
U2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZGU2M2Y2ODZhZDE0Li4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaAorKysgL2Rldi9udWxsCkBAIC0x
LDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlJlbmRl
ck9iamVjdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBSZW5kZXJCbG9ja0Zsb3c7
Ci0KLW5hbWVzcGFjZSBTaW1wbGVMaW5lTGF5b3V0IHsKLQotY2xhc3MgRmxvd0NvbnRlbnRzIHsK
LXB1YmxpYzoKLSAgICBGbG93Q29udGVudHMoY29uc3QgUmVuZGVyQmxvY2tGbG93Jik7Ci0KLSAg
ICBzdHJ1Y3QgU2VnbWVudCB7Ci0gICAgICAgIHVuc2lnbmVkIHRvU2VnbWVudFBvc2l0aW9uKHVu
c2lnbmVkIHBvc2l0aW9uKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocG9z
aXRpb24gPj0gc3RhcnQpOwotICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uIC0gc3RhcnQ7Ci0g
ICAgICAgIH0KLSAgICAgICAgdW5zaWduZWQgdG9SZW5kZXJQb3NpdGlvbih1bnNpZ25lZCBwb3Np
dGlvbikgY29uc3QgeyByZXR1cm4gc3RhcnQgKyBwb3NpdGlvbjsgfQotICAgICAgICB1bnNpZ25l
ZCBzdGFydDsKLSAgICAgICAgdW5zaWduZWQgZW5kOwotICAgICAgICBTdHJpbmdWaWV3IHRleHQ7
Ci0gICAgICAgIGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXI7Ci0gICAgICAgIGJvb2wgY2Fu
VXNlU2ltcGxpZmllZFRleHRNZWFzdXJpbmc7Ci0gICAgfTsKLSAgICBjb25zdCBTZWdtZW50JiBz
ZWdtZW50Rm9yUnVuKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpIGNvbnN0OwotICAgIGNv
bnN0IFNlZ21lbnQmIHNlZ21lbnRGb3JQb3NpdGlvbih1bnNpZ25lZCkgY29uc3Q7Ci0KLSAgICB0
eXBlZGVmIFZlY3RvcjxTZWdtZW50LCA4Pjo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7Ci0gICAg
SXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3NlZ21lbnRzLmJlZ2luKCk7IH0KLSAg
ICBJdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3NlZ21lbnRzLmVuZCgpOyB9Ci0KLXBy
aXZhdGU6Ci0gICAgdW5zaWduZWQgc2VnbWVudEluZGV4Rm9yUnVuU2xvdyh1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQgZW5kKSBjb25zdDsKLSAgICBjb25zdCBWZWN0b3I8U2VnbWVudD4gbV9zZWdt
ZW50czsKLSAgICBtdXRhYmxlIHVuc2lnbmVkIG1fbGFzdFNlZ21lbnRJbmRleCB7IDAgfTsKLX07
Ci0KLWlubGluZSBjb25zdCBGbG93Q29udGVudHM6OlNlZ21lbnQmIEZsb3dDb250ZW50czo6c2Vn
bWVudEZvclJ1bih1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKSBjb25zdAotewotICAgIEFT
U0VSVChzdGFydCA8PSBlbmQpOwotICAgIGF1dG8gaXNFbXB0eVJhbmdlID0gc3RhcnQgPT0gZW5k
OwotICAgIGF1dG8mIGxhc3RTZWdtZW50ID0gbV9zZWdtZW50c1ttX2xhc3RTZWdtZW50SW5kZXhd
OwotICAgIGlmICgobGFzdFNlZ21lbnQuc3RhcnQgPD0gc3RhcnQgJiYgZW5kIDw9IGxhc3RTZWdt
ZW50LmVuZCkgJiYgKCFpc0VtcHR5UmFuZ2UgfHwgZW5kICE9IGxhc3RTZWdtZW50LmVuZCkpCi0g
ICAgICAgIHJldHVybiBtX3NlZ21lbnRzW21fbGFzdFNlZ21lbnRJbmRleF07Ci0gICAgcmV0dXJu
IG1fc2VnbWVudHNbc2VnbWVudEluZGV4Rm9yUnVuU2xvdyhzdGFydCwgZW5kKV07Ci19Ci0KLWlu
bGluZSBjb25zdCBGbG93Q29udGVudHM6OlNlZ21lbnQmIEZsb3dDb250ZW50czo6c2VnbWVudEZv
clBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAotewotICAgIGF1dG8gaXQgPSBzdGQ6
Omxvd2VyX2JvdW5kKG1fc2VnbWVudHMuYmVnaW4oKSwgbV9zZWdtZW50cy5lbmQoKSwgcG9zaXRp
b24sIFtdKGNvbnN0IFNlZ21lbnQmIHNlZ21lbnQsIHVuc2lnbmVkIHBvc2l0aW9uKSB7Ci0gICAg
ICAgIHJldHVybiBzZWdtZW50LmVuZCA8PSBwb3NpdGlvbjsKLSAgICB9KTsKLSAgICBBU1NFUlQo
aXQgIT0gbV9zZWdtZW50cy5lbmQoKSk7Ci0gICAgcmV0dXJuIG1fc2VnbWVudHNbaXQgLSBtX3Nl
Z21lbnRzLmJlZ2luKCldOwotfQotCi19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDE2Y2MwYjZkMzgyNC4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDM3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaCIKLQotI2luY2x1ZGUgIkJpZGlSdW4u
aCIKLSNpbmNsdWRlICJCaWRpUnVuTGlzdC5oIgotI2luY2x1ZGUgIkV2ZW50UmVnaW9uLmgiCi0j
aW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIaXRUZXN0TG9jYXRpb24uaCIKLSNpbmNsdWRlICJI
aXRUZXN0UmVxdWVzdC5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJJ
bmxpbmVUZXh0Qm94LmgiCi0jaW5jbHVkZSAiTGluZUluZm8uaCIKLSNpbmNsdWRlICJQYWludElu
Zm8uaCIKLSNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJDaGls
ZEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5k
ZXJTdHlsZS5oIgotI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0Rmxv
d0NvbnRlbnRzLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmgiCi0jaW5j
bHVkZSAiVGV4dC5oIgotI2luY2x1ZGUgIlRleHREZWNvcmF0aW9uUGFpbnRlci5oIgotI2luY2x1
ZGUgIlRleHRQYWludFN0eWxlLmgiCi0jaW5jbHVkZSAiVGV4dFBhaW50ZXIuaCIKLSNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0KLSNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCi0j
aW5jbHVkZSA8c3RkaW8uaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3Bh
Y2UgU2ltcGxlTGluZUxheW91dCB7Ci0KLUZsb2F0UmVjdCBjb21wdXRlT3ZlcmZsb3coY29uc3Qg
UmVuZGVyQmxvY2tGbG93JiBmbG93LCBjb25zdCBGbG9hdFJlY3QmIGxheW91dFJlY3QpCi17Ci0g
ICAgYXV0byBvdmVyZmxvd1JlY3QgPSBsYXlvdXRSZWN0OwotICAgIGF1dG8gdmlld3BvcnRTaXpl
ID0gZmxvdy5mcmFtZSgpLnZpZXcoKSA/IGZsb3cuZnJhbWUoKS52aWV3KCktPnNpemUoKSA6IElu
dFNpemUoKTsKLSAgICBhdXRvIHN0cm9rZU92ZXJmbG93ID0gc3RkOjpjZWlsKGZsb3cuc3R5bGUo
KS5jb21wdXRlZFN0cm9rZVdpZHRoKHZpZXdwb3J0U2l6ZSkpOwotICAgIG92ZXJmbG93UmVjdC5p
bmZsYXRlKHN0cm9rZU92ZXJmbG93KTsKLQotICAgIGF1dG8gbGV0dGVyU3BhY2luZyA9IGZsb3cu
c3R5bGUoKS5mb250Q2FzY2FkZSgpLmxldHRlclNwYWNpbmcoKTsKLSAgICBpZiAobGV0dGVyU3Bh
Y2luZyA+PSAwKQotICAgICAgICByZXR1cm4gb3ZlcmZsb3dSZWN0OwotICAgIC8vIExhc3QgbGV0
dGVyJ3MgbmVnYXRpdmUgc3BhY2luZyBzaHJpbmtzIGxheW91dCByZWN0LiBQdXNoIGl0IHRvIHZp
c3VhbCBvdmVyZmxvdy4KLSAgICBvdmVyZmxvd1JlY3QuZXhwYW5kKC1sZXR0ZXJTcGFjaW5nLCAw
KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0OwotfQotCi12b2lkIHBhaW50Rmxvdyhjb25zdCBS
ZW5kZXJCbG9ja0Zsb3cmIGZsb3csIGNvbnN0IExheW91dCYgbGF5b3V0LCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQotewotICAgIGlmIChwYWlu
dEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6RXZlbnRSZWdpb24pIHsKLSAgICAgICAgaWYgKCFm
bG93LnZpc2libGVUb0hpdFRlc3RpbmcoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
YXV0byBwYWludFJlY3QgPSBwYWludEluZm8ucmVjdDsKLSAgICAgICAgcGFpbnRSZWN0Lm1vdmVC
eSgtcGFpbnRPZmZzZXQpOwotICAgICAgICBmb3IgKGF1dG8gcnVuIDogbGF5b3V0LnJ1blJlc29s
dmVyKCkucmFuZ2VGb3JSZWN0KHBhaW50UmVjdCkpIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCB2
aXN1YWxPdmVyZmxvd1JlY3QgPSBjb21wdXRlT3ZlcmZsb3coZmxvdywgcnVuLnJlY3QoKSk7Ci0g
ICAgICAgICAgICBwYWludEluZm8uZXZlbnRSZWdpb25Db250ZXh0LT51bml0ZShlbmNsb3NpbmdJ
bnRSZWN0KHZpc3VhbE92ZXJmbG93UmVjdCksIGZsb3cuc3R5bGUoKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQ
aGFzZTo6Rm9yZWdyb3VuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgc3R5bGUgPSBm
bG93LnN0eWxlKCk7Ci0gICAgaWYgKHN0eWxlLnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpW
aXNpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUZXh0UGFpbnRlciB0ZXh0UGFpbnRlcihw
YWludEluZm8uY29udGV4dCgpKTsKLSAgICB0ZXh0UGFpbnRlci5zZXRGb250KHN0eWxlLmZvbnRD
YXNjYWRlKCkpOwotICAgIHRleHRQYWludGVyLnNldFN0eWxlKGNvbXB1dGVUZXh0UGFpbnRTdHls
ZShmbG93LmZyYW1lKCksIHN0eWxlLCBwYWludEluZm8pKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0
cjxTaGFkb3dEYXRhPiBkZWJ1Z1NoYWRvdyA9IG51bGxwdHI7Ci0gICAgaWYgKGZsb3cuc2V0dGlu
Z3MoKS5zaW1wbGVMaW5lTGF5b3V0RGVidWdCb3JkZXJzRW5hYmxlZCgpKSB7Ci0gICAgICAgIGRl
YnVnU2hhZG93ID0gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPihJbnRQb2ludCgwLCAwKSwgMTAsIDIw
LCBTaGFkb3dTdHlsZTo6Tm9ybWFsLCB0cnVlLCBDb2xvcjo6Z3JlZW4uY29sb3JXaXRoQWxwaGFC
eXRlKDIwMCkpOwotICAgICAgICB0ZXh0UGFpbnRlci5zZXRTaGFkb3coZGVidWdTaGFkb3cuZ2V0
KCkpOwotICAgIH0KLQotICAgIE9wdGlvbmFsPFRleHREZWNvcmF0aW9uUGFpbnRlcj4gdGV4dERl
Y29yYXRpb25QYWludGVyOwotICAgIGlmICghc3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3Qo
KS5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVyID0g
Y2hpbGRyZW5PZlR5cGU8UmVuZGVyVGV4dD4oZmxvdykuZmlyc3QoKTsKLSAgICAgICAgaWYgKHRl
eHRSZW5kZXJlcikgewotICAgICAgICAgICAgdGV4dERlY29yYXRpb25QYWludGVyLmVtcGxhY2Uo
cGFpbnRJbmZvLmNvbnRleHQoKSwgc3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKSwgKnRl
eHRSZW5kZXJlciwgZmFsc2UsIHN0eWxlLmZvbnRDYXNjYWRlKCkpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgTGF5b3V0UmVjdCBwYWludFJlY3QgPSBwYWludEluZm8ucmVjdDsKLSAgICBwYWlu
dFJlY3QubW92ZUJ5KC1wYWludE9mZnNldCk7Ci0KLSAgICBhdXRvJiByZXNvbHZlciA9IGxheW91
dC5ydW5SZXNvbHZlcigpOwotICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gZmxvdy5kb2N1
bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7Ci0gICAgZm9yIChhdXRvIHJ1biA6IHJlc29sdmVy
LnJhbmdlRm9yUmVjdChwYWludFJlY3QpKSB7Ci0gICAgICAgIGlmIChydW4uc3RhcnQoKSA9PSBy
dW4uZW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBGbG9hdFJlY3QgcmVj
dCA9IHJ1bi5yZWN0KCk7Ci0gICAgICAgIEZsb2F0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3QgPSBj
b21wdXRlT3ZlcmZsb3coZmxvdywgcmVjdCk7Ci0gICAgICAgIGlmIChwYWludFJlY3QueSgpID4g
dmlzdWFsT3ZlcmZsb3dSZWN0Lm1heFkoKSB8fCBwYWludFJlY3QubWF4WSgpIDwgdmlzdWFsT3Zl
cmZsb3dSZWN0LnkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFN0cmluZyB0
ZXh0V2l0aEh5cGhlbjsKLSAgICAgICAgaWYgKHJ1bi5oYXNIeXBoZW4oKSkKLSAgICAgICAgICAg
IHRleHRXaXRoSHlwaGVuID0gcnVuLnRleHRXaXRoSHlwaGVuKCk7Ci0gICAgICAgIC8vIHhQb3Mg
aXMgcmVsYXRpdmUgdG8gdGhlIGxpbmUgYm94J3MgbG9naWNhbCBsZWZ0LgotICAgICAgICAvLyBX
ZSBkb24ndCBoYXZlIGFueSBsaW5lIGdlb21ldHJ5IGhlcmUgaW4gU0xMLCBzbyBsZXQncyBnZXQg
dGhlIGZpcnN0IHJ1bidzIGxvZ2ljYWwgbGVmdCBpbiB0aGUgY3VycmVudCBsaW5lIGFuZCB1c2Ug
aXQgYXMgdGhlIGxpbmUncyBsb2dpY2FsIGxlZnQuCi0gICAgICAgIGF1dG8gbGluZUxvZ2ljYWxM
ZWZ0ID0gKCpyZXNvbHZlci5yYW5nZUZvckxpbmUocnVuLmxpbmVJbmRleCgpKS5iZWdpbigpKS5s
b2dpY2FsTGVmdCgpOwotICAgICAgICBUZXh0UnVuIHRleHRSdW4geyBydW4uaGFzSHlwaGVuKCkg
PyB0ZXh0V2l0aEh5cGhlbiA6IHJ1bi50ZXh0KCksIHJ1bi5sb2dpY2FsTGVmdCgpIC0gbGluZUxv
Z2ljYWxMZWZ0LCBydW4uZXhwYW5zaW9uKCksIHJ1bi5leHBhbnNpb25CZWhhdmlvcigpIH07Ci0g
ICAgICAgIHRleHRSdW4uc2V0VGFiU2l6ZSghc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCksIHN0
eWxlLnRhYlNpemUoKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbiB7IHJlY3QueCgp
ICsgcGFpbnRPZmZzZXQueCgpLCByb3VuZFRvRGV2aWNlUGl4ZWwocnVuLmJhc2VsaW5lUG9zaXRp
b24oKSArIHBhaW50T2Zmc2V0LnkoKSwgZGV2aWNlU2NhbGVGYWN0b3IpIH07Ci0KLSAgICAgICAg
dGV4dFBhaW50ZXIuc2V0R2x5cGhEaXNwbGF5TGlzdElmTmVlZGVkKHJ1bi5zaW1wbGVSdW4oKSwg
cGFpbnRJbmZvLCBzdHlsZS5mb250Q2FzY2FkZSgpLCBwYWludEluZm8uY29udGV4dCgpLCB0ZXh0
UnVuKTsKLSAgICAgICAgdGV4dFBhaW50ZXIucGFpbnQodGV4dFJ1biwgcmVjdCwgdGV4dE9yaWdp
bik7Ci0gICAgICAgIGlmICh0ZXh0RGVjb3JhdGlvblBhaW50ZXIpIHsKLSAgICAgICAgICAgIHRl
eHREZWNvcmF0aW9uUGFpbnRlci0+c2V0V2lkdGgocmVjdC53aWR0aCgpKTsKLSAgICAgICAgICAg
IHRleHREZWNvcmF0aW9uUGFpbnRlci0+cGFpbnRUZXh0RGVjb3JhdGlvbih0ZXh0UnVuLCB0ZXh0
T3JpZ2luLCByZWN0LmxvY2F0aW9uKCkgKyBwYWludE9mZnNldCk7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLWJvb2wgaGl0VGVzdEZsb3coY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBjb25z
dCBMYXlvdXQmIGxheW91dCwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RS
ZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVy
LCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0
VGVzdEFjdGlvbikKLXsKLSAgICBpZiAoaGl0VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3Vu
ZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFsYXlvdXQucnVuQ291bnQoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byYgc3R5bGUgPSBmbG93LnN0eWxlKCk7
Ci0gICAgaWYgKHN0eWxlLnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNpYmxlIHx8IHN0
eWxlLnBvaW50ZXJFdmVudHMoKSA9PSBQb2ludGVyRXZlbnRzOjpOb25lKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBMYXlvdXRSZWN0IHJhbmdlUmVjdCA9IGxvY2F0aW9uSW5Db250YWlu
ZXIuYm91bmRpbmdCb3goKTsKLSAgICByYW5nZVJlY3QubW92ZUJ5KC1hY2N1bXVsYXRlZE9mZnNl
dCk7Ci0gICAgYXV0byByZXNvbHZlciA9IGxpbmVSZXNvbHZlcihsYXlvdXQucnVuUmVzb2x2ZXIo
KSk7Ci0gICAgYXV0byByYW5nZSA9IHJlc29sdmVyLnJhbmdlRm9yUmVjdChyYW5nZVJlY3QpOwot
ICAgIGZvciAoYXV0byBpdCA9IHJhbmdlLmJlZ2luKCksIGVuZCA9IHJhbmdlLmVuZCgpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgYXV0byBsaW5lUmVjdCA9ICppdDsKLSAgICAgICAgbGlu
ZVJlY3QubW92ZUJ5KGFjY3VtdWxhdGVkT2Zmc2V0KTsKLSAgICAgICAgYXV0byYgcmVuZGVyZXIg
PSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCY+KGl0LnJlbmRlcmVyKCkpOwotICAgICAgICBpZiAo
IWxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhsaW5lUmVjdCkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgcmVuZGVyZXIudXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxv
Y2F0aW9uSW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNl
dCkpOwotICAgICAgICBpZiAocmVzdWx0LmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQocmVu
ZGVyZXIubm9kZUZvckhpdFRlc3QoKSwgcmVxdWVzdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgbGlu
ZVJlY3QpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgY29sbGVjdEZsb3dPdmVyZmxv
dyhSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIGNvbnN0IExheW91dCYgbGF5b3V0KQotewotICAgIGZv
ciAoYXV0byBsaW5lUmVjdCA6IGxpbmVSZXNvbHZlcihsYXlvdXQucnVuUmVzb2x2ZXIoKSkpIHsK
LSAgICAgICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3QgPSBMYXlvdXRSZWN0KGNvbXB1
dGVPdmVyZmxvdyhmbG93LCBsaW5lUmVjdCkpOwotICAgICAgICBmbG93LmFkZExheW91dE92ZXJm
bG93KExheW91dFJlY3QobGluZVJlY3QpKTsKLSAgICAgICAgZmxvdy5hZGRWaXN1YWxPdmVyZmxv
dyh2aXN1YWxPdmVyZmxvd1JlY3QpOwotICAgIH0KLX0KLQotdW5zaWduZWQgdGV4dE9mZnNldEZv
clBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVy
ZXIsIGNvbnN0IExheW91dCYgbGF5b3V0KQotewotICAgIGF1dG8mIGZsb3cgPSBkb3duY2FzdDxS
ZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlci5wYXJlbnQoKSk7Ci0gICAgQVNTRVJUKGZsb3cuZmly
c3RDaGlsZCgpID09IGZsb3cubGFzdENoaWxkKCkpOwotICAgIGF1dG8mIHJlc29sdmVyID0gbGF5
b3V0LnJ1blJlc29sdmVyKCk7Ci0gICAgYXV0byBpdCA9IHJlc29sdmVyLnJ1bkZvclBvaW50KHBv
aW50KTsKLSAgICBpZiAoaXQgPT0gcmVzb2x2ZXIuZW5kKCkpCi0gICAgICAgIHJldHVybiByZW5k
ZXJlci50ZXh0KCkubGVuZ3RoKCk7Ci0gICAgYXV0byBydW4gPSAqaXQ7Ci0gICAgYXV0byYgc3R5
bGUgPSBmbG93LnN0eWxlKCk7Ci0gICAgVGV4dFJ1biB0ZXh0UnVuKHJ1bi50ZXh0KCksIHJ1bi5s
b2dpY2FsTGVmdCgpLCBydW4uZXhwYW5zaW9uKCksIHJ1bi5leHBhbnNpb25CZWhhdmlvcigpKTsK
LSAgICB0ZXh0UnVuLnNldFRhYlNpemUoIXN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpLCBzdHls
ZS50YWJTaXplKCkpOwotICAgIHJldHVybiBydW4uc3RhcnQoKSArIHN0eWxlLmZvbnRDYXNjYWRl
KCkub2Zmc2V0Rm9yUG9zaXRpb24odGV4dFJ1biwgcG9pbnQueCgpIC0gcnVuLmxvZ2ljYWxMZWZ0
KCksIHRydWUpOwotfQotCi1WZWN0b3I8RmxvYXRRdWFkPiBjb2xsZWN0QWJzb2x1dGVRdWFkc0Zv
clJhbmdlKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIHVuc2lnbmVkIHN0YXJ0LCB1bnNp
Z25lZCBlbmQsIGNvbnN0IExheW91dCYgbGF5b3V0LCBib29sIGlnbm9yZUVtcHR5VGV4dFNlbGVj
dGlvbnMsIGJvb2wqIHdhc0ZpeGVkKQotewotICAgIGF1dG8mIHN0eWxlID0gZG93bmNhc3Q8UmVu
ZGVyQmxvY2tGbG93PigqcmVuZGVyZXIucGFyZW50KCkpLnN0eWxlKCk7Ci0gICAgVmVjdG9yPEZs
b2F0UXVhZD4gcXVhZHM7Ci0gICAgYXV0byYgcmVzb2x2ZXIgPSBsYXlvdXQucnVuUmVzb2x2ZXIo
KTsKLSAgICBmb3IgKGF1dG8gcnVuIDogcmVzb2x2ZXIucmFuZ2VGb3JSZW5kZXJlcldpdGhPZmZz
ZXRzKHJlbmRlcmVyLCBzdGFydCwgZW5kKSkgewotICAgICAgICBpZiAoaWdub3JlRW1wdHlUZXh0
U2VsZWN0aW9ucyAmJiBydW4uc3RhcnQoKSA9PSBydW4uZW5kKCkpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgLy8gVGhpcyBydW4gaXMgZnVsbHkgY29udGFpbmVkLgotICAgICAgICBp
ZiAoc3RhcnQgPD0gcnVuLnN0YXJ0KCkgJiYgZW5kID49IHJ1bi5lbmQoKSkgewotICAgICAgICAg
ICAgcXVhZHMuYXBwZW5kKHJlbmRlcmVyLmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKHJ1
bi5yZWN0KCkpLCBVc2VUcmFuc2Zvcm1zLCB3YXNGaXhlZCkpOwotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gUGFydGlhbGx5IGNvbnRhaW5lZCBydW4uCi0gICAg
ICAgIFRleHRSdW4gdGV4dFJ1bihydW4udGV4dCgpLCBydW4ubG9naWNhbExlZnQoKSwgcnVuLmV4
cGFuc2lvbigpLCBydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSk7Ci0gICAgICAgIHRleHRSdW4uc2V0
VGFiU2l6ZSghc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCksIHN0eWxlLnRhYlNpemUoKSk7Ci0g
ICAgICAgIExheW91dFJlY3QgcnVuUmVjdChydW4ucmVjdCgpKTsKLSAgICAgICAgLy8gU3BlY2lh
bCBjYXNlIGVtcHR5IHJhbmdlcy4KLSAgICAgICAgaWYgKHN0YXJ0ID09IGVuZCkgewotICAgICAg
ICAgICAgcnVuUmVjdC5zZXRXaWR0aCgwKTsKLSAgICAgICAgICAgIHF1YWRzLmFwcGVuZChyZW5k
ZXJlci5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChydW5SZWN0KSwgVXNlVHJhbnNmb3Jt
cywgd2FzRml4ZWQpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAg
IGF1dG8gbG9jYWxTdGFydCA9IHN0ZDo6bWF4KHJ1bi5zdGFydCgpLCBzdGFydCkgLSBydW4uc3Rh
cnQoKTsKLSAgICAgICAgYXV0byBsb2NhbEVuZCA9IHN0ZDo6bWluKHJ1bi5lbmQoKSwgZW5kKSAt
IHJ1bi5zdGFydCgpOwotICAgICAgICBBU1NFUlQobG9jYWxTdGFydCA8PSBsb2NhbEVuZCk7Ci0g
ICAgICAgIHN0eWxlLmZvbnRDYXNjYWRlKCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQodGV4
dFJ1biwgcnVuUmVjdCwgbG9jYWxTdGFydCwgbG9jYWxFbmQpOwotICAgICAgICBydW5SZWN0ID0g
c25hcHBlZFNlbGVjdGlvblJlY3QocnVuUmVjdCwgcnVuLmxvZ2ljYWxSaWdodCgpLCBydW5SZWN0
LnkoKSwgcnVuUmVjdC5oZWlnaHQoKSwgdHJ1ZSAvKiBpc0hvcml6b250YWwgKi8pOwotICAgICAg
ICBxdWFkcy5hcHBlbmQocmVuZGVyZXIubG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQocnVu
UmVjdCksIFVzZVRyYW5zZm9ybXMsIHdhc0ZpeGVkKSk7Ci0gICAgfQotICAgIHJldHVybiBxdWFk
czsKLX0KLQotdm9pZCBzaW1wbGVMaW5lTGF5b3V0V2lsbEJlRGVsZXRlZChjb25zdCBMYXlvdXQm
IGxheW91dCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGF5b3V0LnJ1bkNvdW50
KCk7ICsraSkKLSAgICAgICAgVGV4dFBhaW50ZXI6OnJlbW92ZUdseXBoRGlzcGxheUxpc3QobGF5
b3V0LnJ1bkF0KGkpKTsKLX0KLQotYm9vbCBjYW5Vc2VGb3JMaW5lQm94VHJlZShSZW5kZXJCbG9j
a0Zsb3cmIGZsb3csIGNvbnN0IExheW91dCYgbGF5b3V0KQotewotICAgIC8vIExpbmUgYnJlYWtp
bmcgcmVxdWlyZXMgc29tZSBjb250ZXh0IHRoYXQgU0xMIGNhbid0IHByb3ZpZGUgYXQgdGhlIG1v
bWVudCAoc2VlIFJvb3RJbmxpbmVCb3g6OnNldExpbmVCcmVha0luZm8pLgotICAgIGlmIChsYXlv
dXQubGluZUNvdW50KCkgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobGF5
b3V0LmlzUGFnaW5hdGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAo
Zmxvdy5zdHlsZSgpLnByZXNlcnZlTmV3bGluZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgCi0gICAgaWYgKCFmbG93LmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJPYmplY3Q+
KGZsb3cpKSB7Ci0gICAgICAgIGlmICghaXM8UmVuZGVyVGV4dD4oY2hpbGQpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAvLyBTaW1wbGUgbGluZSBsYXlvdXQgaXRlcmF0b3Ig
Y2FuJ3QgaGFuZGxlIHJlbmRlcmVycyB3aXRoIHplcm8gbGVuZ3RoIHByb3Blcmx5LgotICAgICAg
ICBpZiAoIWRvd25jYXN0PFJlbmRlclRleHQ+KGNoaWxkKS5sZW5ndGgoKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lk
IGluaXRpYWxpemVJbmxpbmVUZXh0Qm94KFJlbmRlckJsb2NrRmxvdyYgZmxvdywgSW5saW5lVGV4
dEJveCYgaW5saW5lVGV4dEJveCwgY29uc3QgUnVuUmVzb2x2ZXI6OlJ1biYgcnVuKQotewotICAg
IGlubGluZVRleHRCb3guc2V0TG9naWNhbExlZnQocnVuLmxvZ2ljYWxMZWZ0KCkpOwotICAgIGlu
bGluZVRleHRCb3guc2V0TG9naWNhbFRvcChydW4ucmVjdCgpLnkoKSk7Ci0gICAgaW5saW5lVGV4
dEJveC5zZXRMb2dpY2FsV2lkdGgocnVuLmxvZ2ljYWxSaWdodCgpIC0gcnVuLmxvZ2ljYWxMZWZ0
KCkpOwotICAgIGF1dG8gb3ZlcmZsb3dSZWN0ID0gY29tcHV0ZU92ZXJmbG93KGNvbnN0X2Nhc3Q8
UmVuZGVyQmxvY2tGbG93Jj4oZmxvdyksIHJ1bi5yZWN0KCkpOwotICAgIGlmIChvdmVyZmxvd1Jl
Y3QgIT0gcnVuLnJlY3QoKSkKLSAgICAgICAgaW5saW5lVGV4dEJveC5zZXRMb2dpY2FsT3ZlcmZs
b3dSZWN0KExheW91dFJlY3Qob3ZlcmZsb3dSZWN0KSk7Ci0KLSAgICBpbmxpbmVUZXh0Qm94LnNl
dEhhc0h5cGhlbihydW4uaGFzSHlwaGVuKCkpOwotICAgIGlubGluZVRleHRCb3guc2V0RXhwYW5z
aW9uV2l0aG91dEdyb3dpbmcocnVuLmV4cGFuc2lvbigpKTsKLQotICAgIGF1dG8gZXhwYW5zaW9u
QmVoYXZpb3IgPSBydW4uZXhwYW5zaW9uQmVoYXZpb3IoKTsKLSAgICBpbmxpbmVUZXh0Qm94LnNl
dENhbkhhdmVMZWZ0RXhwYW5zaW9uKGV4cGFuc2lvbkJlaGF2aW9yICYgQWxsb3dMZWZ0RXhwYW5z
aW9uKTsKLSAgICBpbmxpbmVUZXh0Qm94LnNldENhbkhhdmVSaWdodEV4cGFuc2lvbihleHBhbnNp
b25CZWhhdmlvciAmIEFsbG93UmlnaHRFeHBhbnNpb24pOwotICAgIGlmIChleHBhbnNpb25CZWhh
dmlvciAmIEZvcmNlUmlnaHRFeHBhbnNpb24pCi0gICAgICAgIGlubGluZVRleHRCb3guc2V0Rm9y
Y2VSaWdodEV4cGFuc2lvbigpOwotICAgIGlmIChleHBhbnNpb25CZWhhdmlvciAmIEZvcmNlTGVm
dEV4cGFuc2lvbikKLSAgICAgICAgaW5saW5lVGV4dEJveC5zZXRGb3JjZUxlZnRFeHBhbnNpb24o
KTsKLX0KLQotdm9pZCBnZW5lcmF0ZUxpbmVCb3hUcmVlKFJlbmRlckJsb2NrRmxvdyYgZmxvdywg
Y29uc3QgTGF5b3V0JiBsYXlvdXQpCi17Ci0gICAgQVNTRVJUKCFmbG93LmNvbXBsZXhMaW5lTGF5
b3V0KCktPmxpbmVCb3hlcygpLmZpcnN0TGluZUJveCgpKTsKLSAgICBpZiAoIWxheW91dC5ydW5D
b3VudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWY8QmlkaUNvbnRleHQ+IGJpZGlDb250
ZXh0ID0gQmlkaUNvbnRleHQ6OmNyZWF0ZSgwLCBVX0xFRlRfVE9fUklHSFQpOwotICAgIGF1dG8m
IHJlc29sdmVyID0gbGF5b3V0LnJ1blJlc29sdmVyKCk7Ci0gICAgdW5zaWduZWQgbGluZUluZGV4
ID0gMDsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBhdXRvIHJhbmdlID0gcmVzb2x2ZXIu
cmFuZ2VGb3JMaW5lKGxpbmVJbmRleCsrKTsKLSAgICAgICAgaWYgKHJhbmdlLmJlZ2luKCkgPT0g
cmFuZ2UuZW5kKCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBHZW5lcmF0ZSBi
aWRpIHJ1bnMgb3V0IG9mIHNpbXBsZSBsaW5lIGxheW91dCBydW5zLgotICAgICAgICBCaWRpUnVu
TGlzdDxCaWRpUnVuPiBiaWRpUnVuczsKLSAgICAgICAgZm9yIChhdXRvIGl0ID0gcmFuZ2UuYmVn
aW4oKTsgaXQgIT0gcmFuZ2UuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIGF1dG8gcnVuID0g
Kml0OwotICAgICAgICAgICAgYmlkaVJ1bnMuYXBwZW5kUnVuKG1ha2VVbmlxdWU8QmlkaVJ1bj4o
cnVuLmxvY2FsU3RhcnQoKSwgcnVuLmxvY2FsRW5kKCksIGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0
Jj4ocnVuLnJlbmRlcmVyKCkpLCBiaWRpQ29udGV4dC5wdHIoKSwgVV9MRUZUX1RPX1JJR0hUKSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBMaW5lSW5mbyBsaW5lSW5mbzsKLSAgICAgICAgbGluZUlu
Zm8uc2V0Rmlyc3RMaW5lKCFmbG93LmNvbXBsZXhMaW5lTGF5b3V0KCktPmxpbmVCb3hlcygpLmZp
cnN0TGluZUJveCgpKTsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgbmVlZGVkIGZvciBmbG93
IGJveGVzIC1idXQgd2UgZG9uJ3QgaGF2ZSB0aGVtIHlldC4KLSAgICAgICAgLy8gbGluZUluZm8u
c2V0TGFzdExpbmUobGFzdExpbmUpOwotICAgICAgICBsaW5lSW5mby5zZXRFbXB0eSghYmlkaVJ1
bnMucnVuQ291bnQoKSk7Ci0gICAgICAgIGJpZGlSdW5zLnNldExvZ2ljYWxseUxhc3RSdW4oYmlk
aVJ1bnMubGFzdFJ1bigpKTsKLSAgICAgICAgYXV0byogcm9vdCA9IGZsb3cuY29tcGxleExpbmVM
YXlvdXQoKS0+Y29uc3RydWN0TGluZShiaWRpUnVucywgbGluZUluZm8pOwotICAgICAgICBiaWRp
UnVucy5jbGVhcigpOwotICAgICAgICBpZiAoIXJvb3QpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBhdXRvJiByb290TGluZUJveCA9ICpyb290OwotICAgICAgICBhdXRvIGl0ID0g
cmFuZ2UuYmVnaW4oKTsKLSAgICAgICAgZmxvYXQgbGluZVdpZHRoID0gMDsKLSAgICAgICAgLy8g
U2V0IHRoZSBnZW9tZXRyeSBmb3IgdGhlIGlubGluZWJveGVzLgotICAgICAgICBmb3IgKGF1dG8q
IGlubGluZUJveCA9IHJvb3RMaW5lQm94LmZpcnN0Q2hpbGQoKTsgaW5saW5lQm94ICYmIGl0ICE9
IHJhbmdlLmVuZCgpOyBpbmxpbmVCb3ggPSBpbmxpbmVCb3gtPm5leHRPbkxpbmUoKSwgKytpdCkg
ewotICAgICAgICAgICAgYXV0byBydW4gPSAqaXQ7Ci0gICAgICAgICAgICBpbml0aWFsaXplSW5s
aW5lVGV4dEJveChmbG93LCBkb3duY2FzdDxJbmxpbmVUZXh0Qm94PigqaW5saW5lQm94KSwgcnVu
KTsKLSAgICAgICAgICAgIGxpbmVXaWR0aCArPSBpbmxpbmVCb3gtPmxvZ2ljYWxXaWR0aCgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gRmluaXNoIHNldHRpbmcgdXAgdGhlIHJvb3RsaW5lLgot
ICAgICAgICBhdXRvIGl0ZXIgPSByYW5nZS5iZWdpbigpOwotICAgICAgICBhdXRvIGZpcnN0UnVu
ID0gKml0ZXI7Ci0gICAgICAgIHJvb3RMaW5lQm94LnNldExvZ2ljYWxMZWZ0KGZpcnN0UnVuLmxv
Z2ljYWxMZWZ0KCkpOwotICAgICAgICByb290TGluZUJveC5zZXRMb2dpY2FsV2lkdGgobGluZVdp
ZHRoKTsKLSAgICAgICAgYXV0byBsaW5lVG9wID0gZmlyc3RSdW4ucmVjdCgpLnkoKTsKLSAgICAg
ICAgYXV0byBsaW5lSGVpZ2h0ID0gZmlyc3RSdW4ucmVjdCgpLmhlaWdodCgpOwotICAgICAgICBy
b290TGluZUJveC5zZXRMb2dpY2FsVG9wKGxpbmVUb3ApOwotICAgICAgICByb290TGluZUJveC5z
ZXRMaW5lVG9wQm90dG9tUG9zaXRpb25zKExheW91dFVuaXQobGluZVRvcCksIExheW91dFVuaXQo
bGluZVRvcCArIGxpbmVIZWlnaHQpLCBMYXlvdXRVbml0KGxpbmVUb3ApLCBMYXlvdXRVbml0KGxp
bmVUb3AgKyBsaW5lSGVpZ2h0KSk7Ci0gICAgfQotfQotCi0jaWYgRU5BQkxFKFRSRUVfREVCVUdH
SU5HKQotc3RhdGljIHZvaWQgcHJpbnRQcmVmaXgoVGV4dFN0cmVhbSYgc3RyZWFtLCBpbnQmIHBy
aW50ZWRDaGFyYWN0ZXJzLCBpbnQgZGVwdGgpCi17Ci0gICAgc3RyZWFtIDw8ICItLS0tLS0tLSAt
LSI7Ci0gICAgcHJpbnRlZENoYXJhY3RlcnMgPSAwOwotICAgIHdoaWxlICgrK3ByaW50ZWRDaGFy
YWN0ZXJzIDw9IGRlcHRoICogMikKLSAgICAgICAgc3RyZWFtIDw8ICIgIjsKLX0KLQotdm9pZCBv
dXRwdXRMaW5lTGF5b3V0Rm9yRmxvdyhUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IFJlbmRlckJs
b2NrRmxvdyYsIGNvbnN0IExheW91dCYgbGF5b3V0LCBpbnQgZGVwdGgpCi17Ci0gICAgaW50IHBy
aW50ZWRDaGFyYWN0ZXJzID0gMDsKLSAgICBwcmludFByZWZpeChzdHJlYW0sIHByaW50ZWRDaGFy
YWN0ZXJzLCBkZXB0aCk7Ci0KLSAgICBzdHJlYW0gPDwgIlNpbXBsZUxpbmVMYXlvdXQgKCIgPDwg
bGF5b3V0LmxpbmVDb3VudCgpIDw8ICIgbGluZXMsICIgPDwgbGF5b3V0LnJ1bkNvdW50KCkgPDwg
IiBydW5zKSAoIiA8PCAmbGF5b3V0IDw8ICIpIjsKLSAgICBzdHJlYW0ubmV4dExpbmUoKTsKLSAg
ICArK2RlcHRoOwotCi0gICAgZm9yIChhdXRvIHJ1biA6IGxheW91dC5ydW5SZXNvbHZlcigpKSB7
Ci0gICAgICAgIEZsb2F0UmVjdCByZWN0ID0gcnVuLnJlY3QoKTsKLSAgICAgICAgcHJpbnRQcmVm
aXgoc3RyZWFtLCBwcmludGVkQ2hhcmFjdGVycywgZGVwdGgpOwotICAgICAgICBpZiAocnVuLnN0
YXJ0KCkgPCBydW4uZW5kKCkpIHsKLSAgICAgICAgICAgIHN0cmVhbSA8PCAibGluZSAiIDw8IHJ1
bi5saW5lSW5kZXgoKSA8PCAiIHJ1bigiIDw8IHJ1bi5zdGFydCgpIDw8ICIsICIgPDwgcnVuLmVu
ZCgpIDw8ICIpICIgPDwgcmVjdCA8PCAiIFwiIiA8PCBydW4udGV4dCgpLnRvU3RyaW5nV2l0aG91
dENvcHlpbmcoKS51dGY4KCkuZGF0YSgpIDw8ICJcIiI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBBU1NFUlQocnVuLnN0YXJ0KCkgPT0gcnVuLmVuZCgpKTsKLSAgICAgICAgICAgIHN0
cmVhbSA8PCAibGluZSBicmVhayAiIDw8IHJ1bi5saW5lSW5kZXgoKSA8PCAiIHJ1bigiIDw8IHJ1
bi5zdGFydCgpIDw8ICIsICIgPDwgcnVuLmVuZCgpIDw8ICIpICIgPDwgcmVjdDsKLSAgICAgICAg
fQotICAgIH0KLSAgICBzdHJlYW0ubmV4dExpbmUoKTsKLX0KLSNlbmRpZgotCi19Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9u
cy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThjN2Q0Y2RhZDllLi4wMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlv
bnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJU
ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgSGl0VGVzdExvY2F0aW9uOwotY2xhc3MgSGl0VGVzdFJlcXVlc3Q7Ci1j
bGFzcyBIaXRUZXN0UmVzdWx0OwotY2xhc3MgUmVuZGVyQmxvY2tGbG93Owotc3RydWN0IFBhaW50
SW5mbzsKLQotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewotY2xhc3MgRmxvd0NvbnRlbnRz
OwotCi1MYXlvdXRVbml0IGNvbXB1dGVGbG93SGVpZ2h0KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYs
IGNvbnN0IExheW91dCYpOwotTGF5b3V0VW5pdCBjb21wdXRlRmxvd0ZpcnN0TGluZUJhc2VsaW5l
KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IExheW91dCYpOwotTGF5b3V0VW5pdCBjb21w
dXRlRmxvd0xhc3RMaW5lQmFzZWxpbmUoY29uc3QgUmVuZGVyQmxvY2tGbG93JiwgY29uc3QgTGF5
b3V0Jik7Ci1GbG9hdFJlY3QgY29tcHV0ZU92ZXJmbG93KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYs
IGNvbnN0IEZsb2F0UmVjdCYpOwotCi12b2lkIHBhaW50Rmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zs
b3cmLCBjb25zdCBMYXlvdXQmLCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRP
ZmZzZXQpOwotYm9vbCBoaXRUZXN0Rmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmLCBjb25zdCBM
YXlvdXQmLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRU
ZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7Ci12b2lkIGNvbGxlY3RGbG93T3ZlcmZsb3co
UmVuZGVyQmxvY2tGbG93JiwgY29uc3QgTGF5b3V0Jik7Ci0KLXVuc2lnbmVkIHRleHRPZmZzZXRG
b3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlclRleHQmLCBjb25zdCBMYXlv
dXQmKTsKLVZlY3RvcjxGbG9hdFF1YWQ+IGNvbGxlY3RBYnNvbHV0ZVF1YWRzRm9yUmFuZ2UoY29u
c3QgUmVuZGVyT2JqZWN0JiwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgY29uc3QgTGF5
b3V0JiwgYm9vbCBpZ25vcmVFbXB0eVRleHRTZWxlY3Rpb25zLCBib29sKiB3YXNGaXhlZCk7Ci0K
LUxheW91dFVuaXQgbGluZUhlaWdodEZyb21GbG93KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYpOwot
TGF5b3V0VW5pdCBiYXNlbGluZUZyb21GbG93KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYpOwotCi1i
b29sIGNhblVzZUZvckxpbmVCb3hUcmVlKFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IExheW91dCYp
Owotdm9pZCBnZW5lcmF0ZUxpbmVCb3hUcmVlKFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IExheW91
dCYpOwotCi12b2lkIHNpbXBsZUxpbmVMYXlvdXRXaWxsQmVEZWxldGVkKGNvbnN0IExheW91dCYp
OwotCi0jaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQotdm9pZCBvdXRwdXRMaW5lTGF5b3V0Rm9y
RmxvdyhXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmLCBjb25zdCBMYXlv
dXQmLCBpbnQgZGVwdGgpOwotI2VuZGlmCi0KLX0KLQotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlv
dXQgewotCi1pbmxpbmUgTGF5b3V0VW5pdCBjb21wdXRlRmxvd0hlaWdodChjb25zdCBSZW5kZXJC
bG9ja0Zsb3cmIGZsb3csIGNvbnN0IExheW91dCYgbGF5b3V0KQotewotICAgIGF1dG8gZmxvd0hl
aWdodCA9IGxpbmVIZWlnaHRGcm9tRmxvdyhmbG93KSAqIGxheW91dC5saW5lQ291bnQoKTsKLSAg
ICBpZiAoIWxheW91dC5oYXNMaW5lU3RydXRzKCkpCi0gICAgICAgIHJldHVybiBmbG93SGVpZ2h0
OwotICAgIGZvciAoYXV0byYgc3RydXRFbnRyeSA6IGxheW91dC5zdHJ1dHMoKSkKLSAgICAgICAg
Zmxvd0hlaWdodCArPSBzdHJ1dEVudHJ5Lm9mZnNldDsKLSAgICByZXR1cm4gZmxvd0hlaWdodDsK
LX0KLQotaW5saW5lIExheW91dFVuaXQgY29tcHV0ZUZsb3dGaXJzdExpbmVCYXNlbGluZShjb25z
dCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIGNvbnN0IExheW91dCYgbGF5b3V0KQotewotICAgIEFT
U0VSVF9VTlVTRUQobGF5b3V0LCBsYXlvdXQubGluZUNvdW50KCkpOwotICAgIHJldHVybiBmbG93
LmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKSArIGJhc2VsaW5lRnJvbUZsb3coZmxvdyk7Ci19Ci0K
LWlubGluZSBMYXlvdXRVbml0IGNvbXB1dGVGbG93TGFzdExpbmVCYXNlbGluZShjb25zdCBSZW5k
ZXJCbG9ja0Zsb3cmIGZsb3csIGNvbnN0IExheW91dCYgbGF5b3V0KQotewotICAgIEFTU0VSVChs
YXlvdXQubGluZUNvdW50KCkpOwotICAgIHJldHVybiBmbG93LmJvcmRlckFuZFBhZGRpbmdCZWZv
cmUoKSArIGxpbmVIZWlnaHRGcm9tRmxvdyhmbG93KSAqIChsYXlvdXQubGluZUNvdW50KCkgLSAx
KSArIGJhc2VsaW5lRnJvbUZsb3coZmxvdyk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IGxpbmVI
ZWlnaHRGcm9tRmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCi17Ci0gICAgcmV0dXJu
IGZsb3cubGluZUhlaWdodChmYWxzZSwgSG9yaXpvbnRhbExpbmUsIFBvc2l0aW9uT2ZJbnRlcmlv
ckxpbmVCb3hlcyk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IGJhc2VsaW5lRnJvbUZsb3coY29u
c3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQotewotICAgIHJldHVybiBmbG93LmJhc2VsaW5lUG9z
aXRpb24oQWxwaGFiZXRpY0Jhc2VsaW5lLCBmYWxzZSwgSG9yaXpvbnRhbExpbmUsIFBvc2l0aW9u
T2ZJbnRlcmlvckxpbmVCb3hlcyk7Ci19Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFBhZ2luYXRpb24uY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAxYzhkZTcwZWZlN2MuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFBhZ2luYXRpb24uY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dFBhZ2luYXRpb24uaCIKLQotI2luY2x1ZGUg
IkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCi0jaW5jbHVkZSAi
U2ltcGxlTGluZUxheW91dC5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewot
Ci1zdHJ1Y3QgUGFnaW5hdGVkTGluZSB7Ci0gICAgTGF5b3V0VW5pdCB0b3A7Ci0gICAgTGF5b3V0
VW5pdCBib3R0b207Ci0gICAgTGF5b3V0VW5pdCBoZWlnaHQ7IC8vIFNhbWUgdmFsdWUgZm9yIGVh
Y2ggbGluZXMgYXRtLgotfTsKLXVzaW5nIFBhZ2luYXRlZExpbmVzID0gVmVjdG9yPFBhZ2luYXRl
ZExpbmUsIDIwPjsKLQotc3RhdGljIFBhZ2luYXRlZExpbmUgY29tcHV0ZUxpbmVUb3BBbmRCb3R0
b21XaXRoT3ZlcmZsb3coY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCB1bnNpZ25lZCBsaW5l
SW5kZXgsIExheW91dDo6U2ltcGxlTGluZVN0cnV0cyYgc3RydXRzKQotewotICAgIC8vIEZJWE1F
OiBBZGQgdmlzdWFsT3ZlcmZsb3dGb3JEZWNvcmF0aW9ucy4KLSAgICBhdXRvJiBmb250TWV0cmlj
cyA9IGZsb3cuc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCk7Ci0gICAgYXV0byBh
c2NlbnQgPSBmb250TWV0cmljcy5hc2NlbnQoKTsKLSAgICBhdXRvIGRlc2NlbnQgPSBmb250TWV0
cmljcy5kZXNjZW50KCk7Ci0gICAgYXV0byBsaW5lSGVpZ2h0ID0gbGluZUhlaWdodEZyb21GbG93
KGZsb3cpOwotICAgIExheW91dFVuaXQgb2Zmc2V0ID0gZmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVm
b3JlKCk7Ci0gICAgZm9yIChhdXRvJiBzdHJ1dCA6IHN0cnV0cykgewotICAgICAgICBpZiAoc3Ry
dXQubGluZUJyZWFrID4gbGluZUluZGV4KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG9m
ZnNldCArPSBzdHJ1dC5vZmZzZXQ7Ci0gICAgfQotICAgIGlmIChhc2NlbnQgKyBkZXNjZW50IDw9
IGxpbmVIZWlnaHQpIHsKLSAgICAgICAgYXV0byB0b3BQb3NpdGlvbiA9IGxpbmVJbmRleCAqIGxp
bmVIZWlnaHQgKyBvZmZzZXQ7Ci0gICAgICAgIHJldHVybiB7IHRvcFBvc2l0aW9uLCB0b3BQb3Np
dGlvbiArIGxpbmVIZWlnaHQsIGxpbmVIZWlnaHQgfTsKLSAgICB9Ci0gICAgYXV0byBiYXNlbGlu
ZSA9IGJhc2VsaW5lRnJvbUZsb3coZmxvdyk7Ci0gICAgYXV0byB0b3BQb3NpdGlvbiA9IGxpbmVJ
bmRleCAqIGxpbmVIZWlnaHQgKyBvZmZzZXQgKyBiYXNlbGluZSAtIGFzY2VudDsKLSAgICBhdXRv
IGJvdHRvbVBvc2l0aW9uID0gdG9wUG9zaXRpb24gKyBhc2NlbnQgKyBkZXNjZW50OwotICAgIHJl
dHVybiB7IHRvcFBvc2l0aW9uLCBib3R0b21Qb3NpdGlvbiwgYm90dG9tUG9zaXRpb24gLSB0b3BQ
b3NpdGlvbiB9OwotfQotCi1zdGF0aWMgdW5zaWduZWQgY29tcHV0ZUxpbmVCcmVha0luZGV4KHVu
c2lnbmVkIGJyZWFrQ2FuZGlkYXRlLCB1bnNpZ25lZCBsaW5lQ291bnQsIGludCBvcnBoYW5zTmVl
ZGVkLCBpbnQgd2lkb3dzTmVlZGVkLAotICAgIGNvbnN0IExheW91dDo6U2ltcGxlTGluZVN0cnV0
cyYgc3RydXRzKQotewotICAgIC8vIEZpcnN0IGxpbmUgZG9lcyBub3QgZml0IHRoZSBjdXJyZW50
IHBhZ2UuCi0gICAgaWYgKCFicmVha0NhbmRpZGF0ZSkKLSAgICAgICAgcmV0dXJuIGJyZWFrQ2Fu
ZGlkYXRlOwotICAgIAotICAgIGludCB3aWRvd3NPblRoZU5leHRQYWdlID0gbGluZUNvdW50IC0g
YnJlYWtDYW5kaWRhdGU7Ci0gICAgaWYgKHdpZG93c05lZWRlZCA8PSB3aWRvd3NPblRoZU5leHRQ
YWdlKQotICAgICAgICByZXR1cm4gYnJlYWtDYW5kaWRhdGU7Ci0gICAgLy8gT25seSBicmVhayBh
ZnRlciB0aGUgZmlyc3QgbGluZSB3aXRoIHdpZG93cy4KLSAgICBhdXRvIGxpbmVCcmVhayA9IHN0
ZDo6bWF4PGludD4obGluZUNvdW50IC0gd2lkb3dzTmVlZGVkLCAxKTsKLSAgICBpZiAob3JwaGFu
c05lZWRlZCA+IGxpbmVCcmVhaykKLSAgICAgICAgcmV0dXJuIGJyZWFrQ2FuZGlkYXRlOwotICAg
IC8vIEJyZWFrIG9uIGN1cnJlbnQgcGFnZSBvbmx5LgotICAgIGlmIChzdHJ1dHMuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gbGluZUJyZWFrOwotICAgIEFTU0VSVChzdHJ1dHMubGFzdCgpLmxp
bmVCcmVhayArIDEgPCBsaW5lQ291bnQpOwotICAgIHJldHVybiBzdGQ6Om1heDx1bnNpZ25lZD4o
c3RydXRzLmxhc3QoKS5saW5lQnJlYWsgKyAxLCBsaW5lQnJlYWspOwotfQotCi1zdGF0aWMgTGF5
b3V0VW5pdCBjb21wdXRlT2Zmc2V0QWZ0ZXJMaW5lQnJlYWsoTGF5b3V0VW5pdCBsaW5lQnJlYWtQ
b3NpdGlvbiwgYm9vbCBpc0ZpcnN0TGluZSwgYm9vbCBhdFRoZVRvcE9mQ29sdW1uT3JQYWdlLCBj
b25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCi17Ci0gICAgLy8gTm8gb2Zmc2V0IGZvciB0b3Ag
b2YgdGhlIHBhZ2UgbGluZXMgdW5sZXNzIHdpZG93cyBwdXNoZWQgdGhlIGxpbmUgYnJlYWsuCi0g
ICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBpc0ZpcnN0TGluZSA/IGZsb3cuYm9yZGVyQW5kUGFkZGlu
Z0JlZm9yZSgpIDogMF9sdTsKLSAgICBpZiAoYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSkKLSAgICAg
ICAgcmV0dXJuIG9mZnNldDsKLSAgICByZXR1cm4gb2Zmc2V0ICsgZmxvdy5wYWdlUmVtYWluaW5n
TG9naWNhbEhlaWdodEZvck9mZnNldChsaW5lQnJlYWtQb3NpdGlvbiwgUmVuZGVyQmxvY2tGbG93
OjpFeGNsdWRlUGFnZUJvdW5kYXJ5KTsKLX0KLQotc3RhdGljIHZvaWQgc2V0UGFnZUJyZWFrRm9y
TGluZSh1bnNpZ25lZCBsaW5lQnJlYWtJbmRleCwgUGFnaW5hdGVkTGluZXMmIGxpbmVzLCBSZW5k
ZXJCbG9ja0Zsb3cmIGZsb3csIExheW91dDo6U2ltcGxlTGluZVN0cnV0cyYgc3RydXRzLAotICAg
IGJvb2wgYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSwgYm9vbCBsaW5lRG9lc05vdEZpdCkKLXsKLSAg
ICBhdXRvIGxpbmUgPSBsaW5lcy5hdChsaW5lQnJlYWtJbmRleCk7Ci0gICAgYXV0byByZW1haW5p
bmdMb2dpY2FsSGVpZ2h0ID0gZmxvdy5wYWdlUmVtYWluaW5nTG9naWNhbEhlaWdodEZvck9mZnNl
dChsaW5lLnRvcCwgUmVuZGVyQmxvY2tGbG93OjpFeGNsdWRlUGFnZUJvdW5kYXJ5KTsKLSAgICBh
dXRvJiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKLSAgICBhdXRvIGZpcnN0TGluZURvZXNOb3RGaXQg
PSAhbGluZUJyZWFrSW5kZXggJiYgbGluZS5oZWlnaHQgPCBmbG93LnBhZ2VMb2dpY2FsSGVpZ2h0
Rm9yT2Zmc2V0KGxpbmUudG9wKTsKLSAgICBhdXRvIG1vdmVPcnBoYW5Ub05leHRDb2x1bW4gPSBs
aW5lRG9lc05vdEZpdCAmJiAhc3R5bGUuaGFzQXV0b09ycGhhbnMoKSAmJiBzdHlsZS5vcnBoYW5z
KCkgPiAoc2hvcnQpbGluZUJyZWFrSW5kZXg7Ci0gICAgaWYgKGZpcnN0TGluZURvZXNOb3RGaXQg
fHwgbW92ZU9ycGhhblRvTmV4dENvbHVtbikgewotICAgICAgICBhdXRvIGZpcnN0TGluZSA9IGxp
bmVzLmZpcnN0KCk7Ci0gICAgICAgIGF1dG8gZmlyc3RMaW5lT3ZlcmZsb3dSZWN0ID0gY29tcHV0
ZU92ZXJmbG93KGZsb3csIExheW91dFJlY3QoMF9sdSwgZmlyc3RMaW5lLnRvcCwgMF9sdSwgZmly
c3RMaW5lLmhlaWdodCkpOwotICAgICAgICBhdXRvIGZpcnN0TGluZVVwcGVyT3ZlcmhhbmcgPSBz
dGQ6Om1heChMYXlvdXRVbml0KC1maXJzdExpbmVPdmVyZmxvd1JlY3QueSgpKSwgMF9sdSk7Ci0g
ICAgICAgIGZsb3cuc2V0UGFnaW5hdGlvblN0cnV0KGxpbmUudG9wICsgcmVtYWluaW5nTG9naWNh
bEhlaWdodCArIGZpcnN0TGluZVVwcGVyT3ZlcmhhbmcpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGlmIChhdFRoZVRvcE9mQ29sdW1uT3JQYWdlKQotICAgICAgICBmbG93LnNldFBhZ2VC
cmVhayhsaW5lLnRvcCwgbGluZS5oZWlnaHQpOwotICAgIGVsc2UKLSAgICAgICAgZmxvdy5zZXRQ
YWdlQnJlYWsobGluZS50b3AsIGxpbmUuaGVpZ2h0IC0gcmVtYWluaW5nTG9naWNhbEhlaWdodCk7
Ci0gICAgc3RydXRzLmFwcGVuZCh7IGxpbmVCcmVha0luZGV4LCBjb21wdXRlT2Zmc2V0QWZ0ZXJM
aW5lQnJlYWsobGluZXNbbGluZUJyZWFrSW5kZXhdLnRvcCwgIWxpbmVCcmVha0luZGV4LCBhdFRo
ZVRvcE9mQ29sdW1uT3JQYWdlLCBmbG93KSB9KTsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlTWlu
aW11bVBhZ2VIZWlnaHQoUmVuZGVyQmxvY2tGbG93JiBmbG93LCB1bnNpZ25lZCBsaW5lQ291bnQp
Ci17Ci0gICAgYXV0byYgc3R5bGUgPSBmbG93LnN0eWxlKCk7Ci0gICAgYXV0byB3aWRvd3MgPSBz
dHlsZS5oYXNBdXRvV2lkb3dzKCkgPyAxIDogc3RkOjptYXg8aW50PihzdHlsZS53aWRvd3MoKSwg
MSk7Ci0gICAgYXV0byBvcnBoYW5zID0gc3R5bGUuaGFzQXV0b09ycGhhbnMoKSA/IDEgOiBzdGQ6
Om1heDxpbnQ+KHN0eWxlLm9ycGhhbnMoKSwgMSk7Ci0gICAgYXV0byBtaW5pbXVtTGluZUNvdW50
ID0gc3RkOjptaW48dW5zaWduZWQ+KHN0ZDo6bWF4KHdpZG93cywgb3JwaGFucyksIGxpbmVDb3Vu
dCk7Ci0gICAgZmxvdy51cGRhdGVNaW5pbXVtUGFnZUhlaWdodCgwLCBtaW5pbXVtTGluZUNvdW50
ICogbGluZUhlaWdodEZyb21GbG93KGZsb3cpKTsKLX0KLQotdm9pZCBhZGp1c3RMaW5lUG9zaXRp
b25zRm9yUGFnaW5hdGlvbihTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQmIHNpbXBsZUxpbmVzLCBS
ZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCi17Ci0gICAgTGF5b3V0OjpTaW1wbGVMaW5lU3RydXRzIHN0
cnV0czsKLSAgICBhdXRvIGxpbmVDb3VudCA9IHNpbXBsZUxpbmVzLmxpbmVDb3VudCgpOwotICAg
IHVwZGF0ZU1pbmltdW1QYWdlSGVpZ2h0KGZsb3csIGxpbmVDb3VudCk7Ci0gICAgLy8gRmlyc3Qg
cGFzcyB3aXRoIG5vIHBhZ2luYXRpb24gb2Zmc2V0PwotICAgIGlmICghZmxvdy5wYWdlTG9naWNh
bEhlaWdodEZvck9mZnNldCgwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGxpbmVJ
bmRleCA9IDA7Ci0gICAgYXV0byB3aWRvd3MgPSBmbG93LnN0eWxlKCkuaGFzQXV0b1dpZG93cygp
ID8gMSA6IHN0ZDo6bWF4PGludD4oZmxvdy5zdHlsZSgpLndpZG93cygpLCAxKTsKLSAgICBhdXRv
IG9ycGhhbnMgPSBmbG93LnN0eWxlKCkuaGFzQXV0b09ycGhhbnMoKSA/IDEgOiBzdGQ6Om1heDxp
bnQ+KGZsb3cuc3R5bGUoKS5vcnBoYW5zKCksIDEpOwotICAgIFBhZ2luYXRlZExpbmVzIGxpbmVz
OwotICAgIGZvciAodW5zaWduZWQgcnVuSW5kZXggPSAwOyBydW5JbmRleCA8IHNpbXBsZUxpbmVz
LnJ1bkNvdW50KCk7ICsrcnVuSW5kZXgpIHsKLSAgICAgICAgYXV0byYgcnVuID0gc2ltcGxlTGlu
ZXMucnVuQXQocnVuSW5kZXgpOwotICAgICAgICBpZiAoIXJ1bi5pc0VuZE9mTGluZSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8gbGluZSA9IGNvbXB1dGVMaW5lVG9wQW5k
Qm90dG9tV2l0aE92ZXJmbG93KGZsb3csIGxpbmVJbmRleCwgc3RydXRzKTsKLSAgICAgICAgbGlu
ZXMuYXBwZW5kKGxpbmUpOwotICAgICAgICBhdXRvIHJlbWFpbmluZ0hlaWdodCA9IGZsb3cucGFn
ZVJlbWFpbmluZ0xvZ2ljYWxIZWlnaHRGb3JPZmZzZXQobGluZS50b3AsIFJlbmRlckJsb2NrRmxv
dzo6RXhjbHVkZVBhZ2VCb3VuZGFyeSk7Ci0gICAgICAgIGF1dG8gYXRUaGVUb3BPZkNvbHVtbk9y
UGFnZSA9IGZsb3cucGFnZUxvZ2ljYWxIZWlnaHRGb3JPZmZzZXQobGluZS50b3ApID09IHJlbWFp
bmluZ0hlaWdodDsKLSAgICAgICAgYXV0byBsaW5lRG9lc05vdEZpdCA9IGxpbmUuaGVpZ2h0ID4g
cmVtYWluaW5nSGVpZ2h0OwotICAgICAgICBpZiAobGluZURvZXNOb3RGaXQgfHwgKGF0VGhlVG9w
T2ZDb2x1bW5PclBhZ2UgJiYgbGluZUluZGV4KSkgewotICAgICAgICAgICAgYXV0byBsaW5lQnJl
YWtJbmRleCA9IGNvbXB1dGVMaW5lQnJlYWtJbmRleChsaW5lSW5kZXgsIGxpbmVDb3VudCwgb3Jw
aGFucywgd2lkb3dzLCBzdHJ1dHMpOwotICAgICAgICAgICAgLy8gQXJlIHdlIHN0aWxsIGF0IHRo
ZSB0b3Agb2YgdGhlIGNvbHVtbi9wYWdlPwotICAgICAgICAgICAgYXRUaGVUb3BPZkNvbHVtbk9y
UGFnZSA9IGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UgPyBsaW5lSW5kZXggPT0gbGluZUJyZWFrSW5k
ZXggOiBmYWxzZTsKLSAgICAgICAgICAgIHNldFBhZ2VCcmVha0ZvckxpbmUobGluZUJyZWFrSW5k
ZXgsIGxpbmVzLCBmbG93LCBzdHJ1dHMsIGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UsIGxpbmVEb2Vz
Tm90Rml0KTsKLSAgICAgICAgICAgIC8vIFJlY29tcHV0ZSBsaW5lIHBvc2l0aW9ucyB0aGF0IHdl
IGFscmVhZHkgdmlzaXRlZCBidXQgd2lkb3cgYnJlYWsgcHVzaGVkIHRoZW0gdG8gYSBuZXcgcGFn
ZS4KLSAgICAgICAgICAgIGZvciAoYXV0byBpID0gbGluZUJyZWFrSW5kZXg7IGkgPCBsaW5lcy5z
aXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBsaW5lcy5hdChpKSA9IGNvbXB1dGVMaW5lVG9w
QW5kQm90dG9tV2l0aE92ZXJmbG93KGZsb3csIGksIHN0cnV0cyk7Ci0gICAgICAgIH0KLSAgICAg
ICAgKytsaW5lSW5kZXg7Ci0gICAgfQotICAgIHNpbXBsZUxpbmVzLnNldExpbmVTdHJ1dHMoV1RG
TW92ZShzdHJ1dHMpKTsKLX0KLQotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvU2ltcGxlTGluZUxheW91dFBhZ2luYXRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZGQ2YTE3YzBlNWM5Li4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgUmVuZGVyQmxvY2tGbG93OwotCi1uYW1lc3BhY2UgU2ltcGxlTGluZUxh
eW91dCB7Ci0KLWNsYXNzIExheW91dDsKLSAgICAKLXZvaWQgYWRqdXN0TGluZVBvc2l0aW9uc0Zv
clBhZ2luYXRpb24oTGF5b3V0JiwgUmVuZGVyQmxvY2tGbG93Jik7Ci0KLX0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzYTZjMTg4MTI4ZS4uMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmgiCi0KLSNp
bmNsdWRlICJJbmxpbmVUZXh0Qm94U3R5bGUuaCIKLSNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cu
aCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0
RnVuY3Rpb25zLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBTaW1wbGVMaW5l
TGF5b3V0IHsKLQotc3RhdGljIEZsb2F0UG9pbnQgbGluZVBvc2l0aW9uKGZsb2F0IGxvZ2ljYWxM
ZWZ0LCBmbG9hdCBsb2dpY2FsVG9wKQotewotICAgIHJldHVybiBGbG9hdFBvaW50KGxvZ2ljYWxM
ZWZ0LCByb3VuZGYobG9naWNhbFRvcCkpOwotfQotCi1zdGF0aWMgRmxvYXRTaXplIGxpbmVTaXpl
KGZsb2F0IGxvZ2ljYWxMZWZ0LCBmbG9hdCBsb2dpY2FsUmlnaHQsIGZsb2F0IGhlaWdodCkKLXsK
LSAgICByZXR1cm4gRmxvYXRTaXplKGxvZ2ljYWxSaWdodCAtIGxvZ2ljYWxMZWZ0LCBoZWlnaHQp
OwotfQotCi1SdW5SZXNvbHZlcjo6UnVuOjpSdW4oY29uc3QgSXRlcmF0b3ImIGl0ZXJhdG9yKQot
ICAgIDogbV9pdGVyYXRvcihpdGVyYXRvcikKLXsKLX0KLQotU3RyaW5nIFJ1blJlc29sdmVyOjpS
dW46OnRleHRXaXRoSHlwaGVuKCkgY29uc3QKLXsKLSAgICBhdXRvJiBydW4gPSBtX2l0ZXJhdG9y
LnNpbXBsZVJ1bigpOwotICAgIEFTU0VSVChydW4uaGFzSHlwaGVuKTsKLSAgICAvLyBFbXB0eSBy
dW5zIHNob3VsZCBub3QgaGF2ZSBoeXBoZW4uCi0gICAgQVNTRVJUKHJ1bi5zdGFydCA8IHJ1bi5l
bmQpOwotICAgIGF1dG8mIHNlZ21lbnQgPSBtX2l0ZXJhdG9yLnJlc29sdmVyKCkubV9mbG93Q29u
dGVudHMuc2VnbWVudEZvclJ1bihydW4uc3RhcnQsIHJ1bi5lbmQpOwotICAgIGF1dG8gdGV4dCA9
IFN0cmluZ1ZpZXcoc2VnbWVudC50ZXh0KS5zdWJzdHJpbmcoc2VnbWVudC50b1NlZ21lbnRQb3Np
dGlvbihydW4uc3RhcnQpLCBydW4uZW5kIC0gcnVuLnN0YXJ0KTsKLSAgICByZXR1cm4gbWFrZVN0
cmluZyh0ZXh0LCBtX2l0ZXJhdG9yLnJlc29sdmVyKCkuZmxvdygpLnN0eWxlKCkuaHlwaGVuU3Ry
aW5nKCkpOwotfQotCi1GbG9hdFJlY3QgUnVuUmVzb2x2ZXI6OlJ1bjo6cmVjdCgpIGNvbnN0Ci17
Ci0gICAgYXV0byYgcnVuID0gbV9pdGVyYXRvci5zaW1wbGVSdW4oKTsKLSAgICBhdXRvJiByZXNv
bHZlciA9IG1faXRlcmF0b3IucmVzb2x2ZXIoKTsKLSAgICBmbG9hdCBiYXNlbGluZSA9IGNvbXB1
dGVCYXNlbGluZVBvc2l0aW9uKCk7Ci0gICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IGxpbmVQb3Np
dGlvbihydW4ubG9naWNhbExlZnQsIGJhc2VsaW5lIC0gcmVzb2x2ZXIubV9hc2NlbnQpOwotICAg
IEZsb2F0U2l6ZSBzaXplID0gbGluZVNpemUocnVuLmxvZ2ljYWxMZWZ0LCBydW4ubG9naWNhbFJp
Z2h0LCByZXNvbHZlci5tX2FzY2VudCArIHJlc29sdmVyLm1fZGVzY2VudCArIHJlc29sdmVyLm1f
dmlzdWFsT3ZlcmZsb3dPZmZzZXQpOwotCi0gICAgcmV0dXJuIEZsb2F0UmVjdChwb3NpdGlvbiwg
c2l6ZSk7Ci19Ci0KLVN0cmluZ1ZpZXcgUnVuUmVzb2x2ZXI6OlJ1bjo6dGV4dCgpIGNvbnN0Ci17
Ci0gICAgYXV0byYgcnVuID0gbV9pdGVyYXRvci5zaW1wbGVSdW4oKTsKLSAgICBBU1NFUlQocnVu
LnN0YXJ0IDwgcnVuLmVuZCk7Ci0gICAgYXV0byYgc2VnbWVudCA9IG1faXRlcmF0b3IucmVzb2x2
ZXIoKS5tX2Zsb3dDb250ZW50cy5zZWdtZW50Rm9yUnVuKHJ1bi5zdGFydCwgcnVuLmVuZCk7Ci0g
ICAgLy8gV2UgY3VycmVudGx5IHNwbGl0IHJ1bnMgb24gc2VnbWVudCBib3VuZGFyaWVzIChkaWZm
ZXJlbnQgUmVuZGVyT2JqZWN0KS4KLSAgICBBU1NFUlQocnVuLmVuZCA8PSBzZWdtZW50LmVuZCk7
Ci0gICAgcmV0dXJuIFN0cmluZ1ZpZXcoc2VnbWVudC50ZXh0KS5zdWJzdHJpbmcoc2VnbWVudC50
b1NlZ21lbnRQb3NpdGlvbihydW4uc3RhcnQpLCBydW4uZW5kIC0gcnVuLnN0YXJ0KTsKLX0KLQot
Y29uc3QgUmVuZGVyT2JqZWN0JiBSdW5SZXNvbHZlcjo6UnVuOjpyZW5kZXJlcigpIGNvbnN0Ci17
Ci0gICAgYXV0byYgcnVuID0gbV9pdGVyYXRvci5zaW1wbGVSdW4oKTsKLSAgICAvLyBGbG93Q29u
dGVudHMgY2Fubm90IGRpZmZlcmVudGlhdGUgZW1wdHkgcnVucy4KLSAgICBBU1NFUlQocnVuLnN0
YXJ0ICE9IHJ1bi5lbmQpOwotICAgIHJldHVybiBtX2l0ZXJhdG9yLnJlc29sdmVyKCkubV9mbG93
Q29udGVudHMuc2VnbWVudEZvclJ1bihydW4uc3RhcnQsIHJ1bi5lbmQpLnJlbmRlcmVyOwotfQot
Ci11bnNpZ25lZCBSdW5SZXNvbHZlcjo6UnVuOjpsb2NhbFN0YXJ0KCkgY29uc3QKLXsKLSAgICBh
dXRvJiBydW4gPSBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpOwotICAgIC8vIEZsb3dDb250ZW50cyBj
YW5ub3QgZGlmZmVyZW50aWF0ZSBlbXB0eSBydW5zLgotICAgIEFTU0VSVChydW4uc3RhcnQgIT0g
cnVuLmVuZCk7Ci0gICAgcmV0dXJuIG1faXRlcmF0b3IucmVzb2x2ZXIoKS5tX2Zsb3dDb250ZW50
cy5zZWdtZW50Rm9yUnVuKHJ1bi5zdGFydCwgcnVuLmVuZCkudG9TZWdtZW50UG9zaXRpb24ocnVu
LnN0YXJ0KTsKLX0KLQotdW5zaWduZWQgUnVuUmVzb2x2ZXI6OlJ1bjo6bG9jYWxFbmQoKSBjb25z
dAotewotICAgIGF1dG8mIHJ1biA9IG1faXRlcmF0b3Iuc2ltcGxlUnVuKCk7Ci0gICAgLy8gRmxv
d0NvbnRlbnRzIGNhbm5vdCBkaWZmZXJlbnRpYXRlIGVtcHR5IHJ1bnMuCi0gICAgQVNTRVJUKHJ1
bi5zdGFydCAhPSBydW4uZW5kKTsKLSAgICByZXR1cm4gbV9pdGVyYXRvci5yZXNvbHZlcigpLm1f
Zmxvd0NvbnRlbnRzLnNlZ21lbnRGb3JSdW4ocnVuLnN0YXJ0LCBydW4uZW5kKS50b1NlZ21lbnRQ
b3NpdGlvbihydW4uZW5kKTsKLX0KLQotUnVuUmVzb2x2ZXI6Okl0ZXJhdG9yOjpJdGVyYXRvcihj
b25zdCBSdW5SZXNvbHZlciYgcmVzb2x2ZXIsIHVuc2lnbmVkIHJ1bkluZGV4LCB1bnNpZ25lZCBs
aW5lSW5kZXgpCi0gICAgOiBtX2xheW91dCgmcmVzb2x2ZXIubV9sYXlvdXQpCi0gICAgLCBtX3Jl
c29sdmVyKCZyZXNvbHZlcikKLSAgICAsIG1fcnVuSW5kZXgocnVuSW5kZXgpCi0gICAgLCBtX2xp
bmVJbmRleChsaW5lSW5kZXgpCi17Ci0gICAgQVNTRVJUKCZyZXNvbHZlciA9PSAmbV9sYXlvdXQt
PnJ1blJlc29sdmVyKCkpOwotfQotCi1SdW5SZXNvbHZlcjo6SXRlcmF0b3ImIFJ1blJlc29sdmVy
OjpJdGVyYXRvcjo6YWR2YW5jZSgpCi17Ci0gICAgaWYgKHNpbXBsZVJ1bigpLmlzRW5kT2ZMaW5l
KQotICAgICAgICArK21fbGluZUluZGV4OwotICAgICsrbV9ydW5JbmRleDsKLSAgICByZXR1cm4g
KnRoaXM7Ci19Ci0KLVJ1blJlc29sdmVyOjpJdGVyYXRvciYgUnVuUmVzb2x2ZXI6Okl0ZXJhdG9y
OjphZHZhbmNlTGluZXModW5zaWduZWQgbGluZUNvdW50KQotewotICAgIHVuc2lnbmVkIHJ1bkNv
dW50ID0gbGF5b3V0KCkucnVuQ291bnQoKTsKLSAgICBpZiAocnVuQ291bnQgPT0gbGF5b3V0KCku
bGluZUNvdW50KCkpIHsKLSAgICAgICAgbV9ydW5JbmRleCA9IHN0ZDo6bWluKHJ1bkNvdW50LCBt
X3J1bkluZGV4ICsgbGluZUNvdW50KTsKLSAgICAgICAgbV9saW5lSW5kZXggPSBtX3J1bkluZGV4
OwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIHVuc2lnbmVkIHRhcmdldCA9IG1f
bGluZUluZGV4ICsgbGluZUNvdW50OwotICAgIHdoaWxlIChtX2xpbmVJbmRleCA8IHRhcmdldCAm
JiBtX3J1bkluZGV4IDwgcnVuQ291bnQpCi0gICAgICAgIGFkdmFuY2UoKTsKLQotICAgIHJldHVy
biAqdGhpczsKLX0KLQotUnVuUmVzb2x2ZXI6OlJ1blJlc29sdmVyKGNvbnN0IFJlbmRlckJsb2Nr
RmxvdyYgZmxvdywgY29uc3QgTGF5b3V0JiBsYXlvdXQpCi0gICAgOiBtX2Zsb3dSZW5kZXJlcihm
bG93KQotICAgICwgbV9sYXlvdXQobGF5b3V0KQotICAgICwgbV9mbG93Q29udGVudHMoZmxvdykK
LSAgICAsIG1fbGluZUhlaWdodChsaW5lSGVpZ2h0RnJvbUZsb3coZmxvdykpCi0gICAgLCBtX2Jh
c2VsaW5lKGJhc2VsaW5lRnJvbUZsb3coZmxvdykpCi0gICAgLCBtX2JvcmRlckFuZFBhZGRpbmdC
ZWZvcmUoZmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkpCi0gICAgLCBtX2FzY2VudChmbG93
LnN0eWxlKCkuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpKQotICAgICwgbV9k
ZXNjZW50KGZsb3cuc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuZGVzY2VudCgp
KQotICAgICwgbV92aXN1YWxPdmVyZmxvd09mZnNldCh2aXN1YWxPdmVyZmxvd0ZvckRlY29yYXRp
b25zKGZsb3cuc3R5bGUoKSwgbnVsbHB0cikuYm90dG9tKQotewotfQotCi11bnNpZ25lZCBSdW5S
ZXNvbHZlcjo6YWRqdXN0TGluZUluZGV4Rm9yU3RydXRzKExheW91dFVuaXQgeSwgSW5kZXhUeXBl
IHR5cGUsIHVuc2lnbmVkIGxpbmVJbmRleENhbmRpZGF0ZSkgY29uc3QKLXsKLSAgICBhdXRvJiBz
dHJ1dHMgPSBtX2xheW91dC5zdHJ1dHMoKTsKLSAgICAvLyBXZSBuZWVkIHRvIG9mZnNldCB0aGUg
bGluZUluZGV4IHdpdGggbGluZSBzdHJ1dHMgd2hlbiB0aGVyZSdzIGFuIGFjdHVhbCBzdHJ1dCBi
ZWZvcmUgdGhlIGNhbmRpZGF0ZS4KLSAgICBhdXRvJiBzdHJ1dCA9IHN0cnV0cy5maXJzdCgpOwot
ICAgIGlmIChzdHJ1dC5saW5lQnJlYWsgPj0gbGluZUluZGV4Q2FuZGlkYXRlKQotICAgICAgICBy
ZXR1cm4gbGluZUluZGV4Q2FuZGlkYXRlOwotICAgIHVuc2lnbmVkIHN0cnV0SW5kZXggPSAwOwot
ICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBsYXN0SW5kZXhDYW5kaWRhdGU7Ci0gICAgYXV0byB0b3Ag
PSBzdHJ1dC5saW5lQnJlYWsgKiBtX2xpbmVIZWlnaHQ7Ci0gICAgYXV0byBsaW5lSGVpZ2h0V2l0
aE92ZXJmbG93ID0gbV9saW5lSGVpZ2h0OwotICAgIC8vIElmIGZvbnQgaXMgbGFyZ2VyIHRoYW4g
dGhlIGxpbmUgaGVpZ2h0IChnbHlwaHMgb3ZlcmZsb3cpLCB1c2UgdGhlIGZvbnQgc2l6ZSB3aGVu
IGNoZWNraW5nIGxpbmUgYm91bmRhcmllcy4KLSAgICBpZiAobV9hc2NlbnQgKyBtX2Rlc2NlbnQg
PiBtX2xpbmVIZWlnaHQpIHsKLSAgICAgICAgbGluZUhlaWdodFdpdGhPdmVyZmxvdyA9IG1fYXNj
ZW50ICsgbV9kZXNjZW50OwotICAgICAgICB0b3AgKz0gbV9iYXNlbGluZSAtIG1fYXNjZW50Owot
ICAgIH0KLSAgICBhdXRvIGJvdHRvbSA9IHRvcCArIGxpbmVIZWlnaHRXaXRoT3ZlcmZsb3c7Ci0g
ICAgZm9yIChhdXRvIGxpbmVJbmRleCA9IHN0cnV0LmxpbmVCcmVhazsgbGluZUluZGV4IDwgbV9s
YXlvdXQubGluZUNvdW50KCk7ICsrbGluZUluZGV4KSB7Ci0gICAgICAgIGZsb2F0IHN0cnV0T2Zm
c2V0ID0gMDsKLSAgICAgICAgaWYgKHN0cnV0SW5kZXggPCBzdHJ1dHMuc2l6ZSgpICYmIHN0cnV0
cy5hdChzdHJ1dEluZGV4KS5saW5lQnJlYWsgPT0gbGluZUluZGV4KQotICAgICAgICAgICAgc3Ry
dXRPZmZzZXQgPSBzdHJ1dHMuYXQoc3RydXRJbmRleCsrKS5vZmZzZXQ7Ci0gICAgICAgIGJvdHRv
bSA9IHRvcCArIHN0cnV0T2Zmc2V0ICsgbGluZUhlaWdodFdpdGhPdmVyZmxvdzsKLSAgICAgICAg
aWYgKHkgPj0gdG9wICYmIHkgPCBib3R0b20pIHsKLSAgICAgICAgICAgIGlmICh0eXBlID09IElu
ZGV4VHlwZTo6Rmlyc3QpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmVJbmRleDsKLSAgICAg
ICAgICAgIGxhc3RJbmRleENhbmRpZGF0ZSA9IGxpbmVJbmRleDsKLSAgICAgICAgfSBlbHNlIGlm
IChsYXN0SW5kZXhDYW5kaWRhdGUpCi0gICAgICAgICAgICByZXR1cm4gKmxhc3RJbmRleENhbmRp
ZGF0ZTsKLSAgICAgICAgdG9wICs9IG1fbGluZUhlaWdodCArIHN0cnV0T2Zmc2V0OwotICAgIH0K
LSAgICBpZiAobGFzdEluZGV4Q2FuZGlkYXRlIHx8IHkgPj0gYm90dG9tKQotICAgICAgICByZXR1
cm4gbV9sYXlvdXQubGluZUNvdW50KCkgLSAxOwotICAgIC8vIFdlIG1pc3NlZCB0aGUgbGluZS4K
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbGluZUluZGV4Q2FuZGlkYXRl
OwotfQotCi11bnNpZ25lZCBSdW5SZXNvbHZlcjo6bGluZUluZGV4Rm9ySGVpZ2h0KExheW91dFVu
aXQgaGVpZ2h0LCBJbmRleFR5cGUgdHlwZSkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9saW5lSGVp
Z2h0KTsKLSAgICBmbG9hdCB5ID0gaGVpZ2h0IC0gbV9ib3JkZXJBbmRQYWRkaW5nQmVmb3JlOwot
ICAgIC8vIExpbmVzIG1heSBvdmVybGFwLCBhZGp1c3QgdG8gZ2V0IHRoZSBmaXJzdCBvciBsYXN0
IGxpbmUgYXQgdGhpcyBoZWlnaHQuCi0gICAgYXV0byBhZGp1c3RlZFkgPSB5OwotICAgIGlmICh0
eXBlID09IEluZGV4VHlwZTo6Rmlyc3QpCi0gICAgICAgIGFkanVzdGVkWSArPSBtX2xpbmVIZWln
aHQgLSAobV9iYXNlbGluZSArIG1fZGVzY2VudCk7Ci0gICAgZWxzZQotICAgICAgICBhZGp1c3Rl
ZFkgLT0gbV9iYXNlbGluZSAtIG1fYXNjZW50OwotICAgIGFkanVzdGVkWSA9IHN0ZDo6bWF4PGZs
b2F0PihhZGp1c3RlZFksIDApOwotICAgIGF1dG8gbGluZUluZGV4Q2FuZGlkYXRlID0gIHN0ZDo6
bWluPHVuc2lnbmVkPihhZGp1c3RlZFkgLyBtX2xpbmVIZWlnaHQsIG1fbGF5b3V0LmxpbmVDb3Vu
dCgpIC0gMSk7Ci0gICAgaWYgKG1fbGF5b3V0Lmhhc0xpbmVTdHJ1dHMoKSkKLSAgICAgICAgcmV0
dXJuIGFkanVzdExpbmVJbmRleEZvclN0cnV0cyhMYXlvdXRVbml0KHkpLCB0eXBlLCBsaW5lSW5k
ZXhDYW5kaWRhdGUpOwotICAgIHJldHVybiBsaW5lSW5kZXhDYW5kaWRhdGU7Ci19Ci0KLVdURjo6
SXRlcmF0b3JSYW5nZTxSdW5SZXNvbHZlcjo6SXRlcmF0b3I+IFJ1blJlc29sdmVyOjpyYW5nZUZv
clJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkgY29uc3QKLXsgCi0gICAgaWYgKCFtX2xpbmVI
ZWlnaHQpCi0gICAgICAgIHJldHVybiB7IGJlZ2luKCksIGVuZCgpIH07Ci0KLSAgICB1bnNpZ25l
ZCBmaXJzdExpbmUgPSBsaW5lSW5kZXhGb3JIZWlnaHQocmVjdC55KCksIEluZGV4VHlwZTo6Rmly
c3QpOwotICAgIHVuc2lnbmVkIGxhc3RMaW5lID0gc3RkOjptYXgoZmlyc3RMaW5lLCBsaW5lSW5k
ZXhGb3JIZWlnaHQocmVjdC5tYXhZKCksIEluZGV4VHlwZTo6TGFzdCkpOwotICAgIGF1dG8gcmFu
Z2VCZWdpbiA9IGJlZ2luKCkuYWR2YW5jZUxpbmVzKGZpcnN0TGluZSk7Ci0gICAgaWYgKHJhbmdl
QmVnaW4gPT0gZW5kKCkpCi0gICAgICAgIHJldHVybiB7IGVuZCgpLCBlbmQoKSB9OwotICAgIGF1
dG8gcmFuZ2VFbmQgPSByYW5nZUJlZ2luOwotICAgIEFTU0VSVChsYXN0TGluZSA+PSBmaXJzdExp
bmUpOwotICAgIHJhbmdlRW5kLmFkdmFuY2VMaW5lcyhsYXN0TGluZSAtIGZpcnN0TGluZSArIDEp
OwotICAgIHJldHVybiB7IHJhbmdlQmVnaW4sIHJhbmdlRW5kIH07Ci19Ci0KLVdURjo6SXRlcmF0
b3JSYW5nZTxSdW5SZXNvbHZlcjo6SXRlcmF0b3I+IFJ1blJlc29sdmVyOjpyYW5nZUZvckxpbmUo
dW5zaWduZWQgbGluZUluZGV4KSBjb25zdAotewotICAgIGF1dG8gcmFuZ2VCZWdpbiA9IGJlZ2lu
KCkuYWR2YW5jZUxpbmVzKGxpbmVJbmRleCk7Ci0gICAgaWYgKHJhbmdlQmVnaW4gPT0gZW5kKCkp
Ci0gICAgICAgIHJldHVybiB7IGVuZCgpLCBlbmQoKSB9OwotICAgIGF1dG8gcmFuZ2VFbmQgPSBy
YW5nZUJlZ2luOwotICAgIHJhbmdlRW5kLmFkdmFuY2VMaW5lcygxKTsKLSAgICByZXR1cm4geyBy
YW5nZUJlZ2luLCByYW5nZUVuZCB9OwotfQotCi1XVEY6Okl0ZXJhdG9yUmFuZ2U8UnVuUmVzb2x2
ZXI6Okl0ZXJhdG9yPiBSdW5SZXNvbHZlcjo6cmFuZ2VGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJP
YmplY3QmIHJlbmRlcmVyKSBjb25zdAotewotICAgIGlmIChiZWdpbigpID09IGVuZCgpKQotICAg
ICAgICByZXR1cm4geyBlbmQoKSwgZW5kKCkgfTsKLSAgICBGbG93Q29udGVudHM6Okl0ZXJhdG9y
IHNlZ21lbnQgPSBtX2Zsb3dDb250ZW50cy5iZWdpbigpOwotICAgIGF1dG8gcnVuID0gYmVnaW4o
KTsKLSAgICBBU1NFUlQoc2VnbWVudC0+c3RhcnQgPD0gKCpydW4pLnN0YXJ0KCkpOwotICAgIC8v
IE1vdmUgcnVuIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlZ21lbnQuCi0gICAgd2hpbGUgKCZz
ZWdtZW50LT5yZW5kZXJlciAhPSAmcmVuZGVyZXIgJiYgcnVuICE9IGVuZCgpKSB7Ci0gICAgICAg
IGlmICgoKnJ1bikuc3RhcnQoKSA9PSBzZWdtZW50LT5zdGFydCAmJiAoKnJ1bikuZW5kKCkgPT0g
c2VnbWVudC0+ZW5kKSB7Ci0gICAgICAgICAgICArK3J1bjsKLSAgICAgICAgICAgICsrc2VnbWVu
dDsKLSAgICAgICAgfSBlbHNlIGlmICgoKnJ1bikuc3RhcnQoKSA8IHNlZ21lbnQtPmVuZCkKLSAg
ICAgICAgICAgICsrcnVuOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICArK3NlZ21lbnQ7Ci0g
ICAgICAgIEFTU0VSVChzZWdtZW50ICE9IG1fZmxvd0NvbnRlbnRzLmVuZCgpKTsKLSAgICB9Ci0g
ICAgLy8gRG8gd2UgYWN0dWFsbHkgaGF2ZSBhIHJ1biBmb3IgdGhpcyByZW5kZXJlcj8KLSAgICAv
LyBDb2xsYXBzZWQgd2hpdGVzcGFjZSB3aXRoIGRlZGljYXRlZCByZW5kZXJlciBjb3VsZCBlbmQg
dXAgd2l0aCBubyBydW4gYXQgYWxsLgotICAgIGlmIChydW4gPT0gZW5kKCkgfHwgKHNlZ21lbnQt
PnN0YXJ0ICE9IHNlZ21lbnQtPmVuZCAmJiBzZWdtZW50LT5lbmQgPD0gKCpydW4pLnN0YXJ0KCkp
KQotICAgICAgICByZXR1cm4geyBlbmQoKSwgZW5kKCkgfTsKLQotICAgIGF1dG8gcmFuZ2VCZWdp
biA9IHJ1bjsKLSAgICAvLyBNb3ZlIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBzZWdtZW50LgotICAg
IHdoaWxlIChydW4gIT0gZW5kKCkgJiYgKCpydW4pLnN0YXJ0KCkgPCBzZWdtZW50LT5lbmQpCi0g
ICAgICAgICsrcnVuOwotICAgIC8vIFNwZWNpYWwgY2FzZSB3aGVuIHNlZ21lbnQgPT0gcnVuLgot
ICAgIGlmIChydW4gPT0gcmFuZ2VCZWdpbikKLSAgICAgICAgKytydW47Ci0gICAgcmV0dXJuIHsg
cmFuZ2VCZWdpbiwgcnVuIH07Ci19Ci0KLVJ1blJlc29sdmVyOjpJdGVyYXRvciBSdW5SZXNvbHZl
cjo6cnVuRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdAotewotICAgIGlm
ICghbV9saW5lSGVpZ2h0KQotICAgICAgICByZXR1cm4gZW5kKCk7Ci0gICAgaWYgKGJlZ2luKCkg
PT0gZW5kKCkpCi0gICAgICAgIHJldHVybiBlbmQoKTsKLSAgICB1bnNpZ25lZCBsaW5lSW5kZXgg
PSBsaW5lSW5kZXhGb3JIZWlnaHQocG9pbnQueSgpLCBJbmRleFR5cGU6Okxhc3QpOwotICAgIGF1
dG8geCA9IHBvaW50LngoKSAtIG1fYm9yZGVyQW5kUGFkZGluZ0JlZm9yZTsKLSAgICBhdXRvIGl0
ID0gYmVnaW4oKTsKLSAgICBpdC5hZHZhbmNlTGluZXMobGluZUluZGV4KTsKLSAgICAvLyBQb2lu
dCBpcyBhdCB0aGUgbGVmdCBzaWRlIG9mIHRoZSBmaXJzdCBydW4gb24gdGhpcyBsaW5lLgotICAg
IGlmICgoKml0KS5sb2dpY2FsTGVmdCgpID4geCkKLSAgICAgICAgcmV0dXJuIGl0OwotICAgIC8v
IEFkdmFuY2UgdG8gdGhlIGZpcnN0IGNhbmRpZGF0ZSBydW4gb24gdGhpcyBsaW5lLgotICAgIHdo
aWxlIChpdCAhPSBlbmQoKSAmJiAoKml0KS5sb2dpY2FsUmlnaHQoKSA8IHggJiYgbGluZUluZGV4
ID09IGl0LmxpbmVJbmRleCgpKQotICAgICAgICArK2l0OwotICAgIC8vIFdlIGp1bXBlZCB0byB0
aGUgbmV4dCBsaW5lIHNvIHRoZSBwb2ludCBpcyBhdCB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgcHJl
dmlvdXMgbGluZS4KLSAgICBpZiAoaXQubGluZUluZGV4KCkgPiBsaW5lSW5kZXgpCi0gICAgICAg
IHJldHVybiAtLWl0OwotICAgIC8vIE5vdyB3ZSBoYXZlIGEgY2FuZGlkYXRlIHJ1bi4KLSAgICAv
LyBGaW5kIHRoZSBsYXN0IHJ1biB0aGF0IHN0aWxsIGNvbnRhaW5zIHRoaXMgcG9pbnQgKHRha2lu
ZyBvdmVybGFwcGluZyBydW5zIHdpdGggb2RkIHdvcmQgc3BhY2luZyB2YWx1ZXMgaW50byBhY2Nv
dW50KS4KLSAgICB3aGlsZSAoaXQgIT0gZW5kKCkgJiYgKCppdCkubG9naWNhbExlZnQoKSA8PSB4
ICYmIGxpbmVJbmRleCA9PSBpdC5saW5lSW5kZXgoKSkKLSAgICAgICAgKytpdDsKLSAgICByZXR1
cm4gLS1pdDsKLX0KLQotV1RGOjpJdGVyYXRvclJhbmdlPFJ1blJlc29sdmVyOjpJdGVyYXRvcj4g
UnVuUmVzb2x2ZXI6OnJhbmdlRm9yUmVuZGVyZXJXaXRoT2Zmc2V0cyhjb25zdCBSZW5kZXJPYmpl
Y3QmIHJlbmRlcmVyLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KSBj
b25zdAotewotICAgIEFTU0VSVChzdGFydE9mZnNldCA8PSBlbmRPZmZzZXQpOwotICAgIGF1dG8g
cmFuZ2UgPSByYW5nZUZvclJlbmRlcmVyKHJlbmRlcmVyKTsKLSAgICBpZiAocmFuZ2UuYmVnaW4o
KSA9PSByYW5nZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHsgZW5kKCksIGVuZCgpIH07Ci0gICAg
YXV0byBpdCA9IHJhbmdlLmJlZ2luKCk7Ci0gICAgYXV0byBsb2NhbEVuZCA9ICgqaXQpLnN0YXJ0
KCkgKyBlbmRPZmZzZXQ7Ci0gICAgLy8gQWR2YW5jZSB0byB0aGUgZmlyc3QgcnVuIGJlZm9yZSB0
aGUgc3RhcnQgb2Zmc2V0LiBPbmx5IHRoZSBmaXJzdCBub2RlIGluIGEgcmFuZ2UgY2FuIGhhdmUg
YSBzdGFydE9mZnNldC4KLSAgICAvLyBOb3RlIHRoYXQgdGhlIHN0YXJ0IG9mZnNldCBtYXkgY29p
bmNpZGUgd2l0aCB0aGUgZW5kIG9mIGEgcnVuLiBUaGUgcnVuIGlzIHN0aWxsIGNvbnNpZGVyZWQg
c28gdGhhdCB3ZQotICAgIC8vIGNhbiByZXR1cm4gYW4gZW1wdHkgcmVjdCwgd2hpY2ggY29uZm9y
bXMgdG8gdGhlIGJlaGF2aW9yIG9mIEVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKS4KLSAgICB3aGls
ZSAoaXQgIT0gcmFuZ2UuZW5kKCkgJiYgKCppdCkuZW5kKCkgPCBzdGFydE9mZnNldCkKLSAgICAg
ICAgKytpdDsKLSAgICBpZiAoaXQgPT0gcmFuZ2UuZW5kKCkpCi0gICAgICAgIHJldHVybiB7IGVu
ZCgpLCBlbmQoKSB9OwotICAgIGF1dG8gcmFuZ2VCZWdpbiA9IGl0OwotICAgIC8vIFNwZWNpYWwg
Y2FzZSBlbXB0eSByYW5nZXMgdGhhdCBzdGFydCBhdCB0aGUgZWRnZSBvZiB0aGUgcnVuLiBBcHBh
cmVudGx5IG5vcm1hbCBsaW5lIGxheW91dCBpbmNsdWRlIHRob3NlLgotICAgIGlmIChsb2NhbEVu
ZCA9PSBzdGFydE9mZnNldCAmJiAoKml0KS5zdGFydCgpID09IGxvY2FsRW5kKQotICAgICAgICBy
ZXR1cm4geyByYW5nZUJlZ2luLCArK2l0IH07Ci0gICAgLy8gQWR2YW5jZSBiZXlvbmQgdGhlIGxh
c3QgcnVuIHdpdGggdGhlIGVuZCBvZmZzZXQuCi0gICAgd2hpbGUgKGl0ICE9IHJhbmdlLmVuZCgp
ICYmICgqaXQpLnN0YXJ0KCkgPCBsb2NhbEVuZCkKLSAgICAgICAgKytpdDsKLSAgICByZXR1cm4g
eyByYW5nZUJlZ2luLCBpdCB9OwotfQotCi1MaW5lUmVzb2x2ZXI6Okl0ZXJhdG9yOjpJdGVyYXRv
cihSdW5SZXNvbHZlcjo6SXRlcmF0b3IgcnVuSXRlcmF0b3IpCi0gICAgOiBtX3J1bkl0ZXJhdG9y
KHJ1bkl0ZXJhdG9yKQotewotfQotCi1GbG9hdFJlY3QgTGluZVJlc29sdmVyOjpJdGVyYXRvcjo6
b3BlcmF0b3IqKCkgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBjdXJyZW50TGluZSA9IG1fcnVuSXRl
cmF0b3IubGluZUluZGV4KCk7Ci0gICAgYXV0byBpdCA9IG1fcnVuSXRlcmF0b3I7Ci0gICAgRmxv
YXRSZWN0IHJlY3QgPSAoKml0KS5yZWN0KCk7Ci0gICAgd2hpbGUgKGl0LmFkdmFuY2UoKS5saW5l
SW5kZXgoKSA9PSBjdXJyZW50TGluZSkKLSAgICAgICAgcmVjdC51bml0ZSgoKml0KS5yZWN0KCkp
OwotICAgIHJldHVybiByZWN0OwotfQotCi1jb25zdCBSZW5kZXJPYmplY3QmIExpbmVSZXNvbHZl
cjo6SXRlcmF0b3I6OnJlbmRlcmVyKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogVGhpcyB3b3Jr
cyBhcyBsb25nIGFzIHdlJ3ZlIGdvdCBvbmx5IG9uZSByZW5kZXJlciBwZXIgbGluZS4KLSAgICBh
dXRvIHJ1biA9ICptX3J1bkl0ZXJhdG9yOwotICAgIHJldHVybiBtX3J1bkl0ZXJhdG9yLnJlc29s
dmVyKCkuZmxvd0NvbnRlbnRzKCkuc2VnbWVudEZvclJ1bihydW4uc3RhcnQoKSwgcnVuLmVuZCgp
KS5yZW5kZXJlcjsKLX0KLQotTGluZVJlc29sdmVyOjpMaW5lUmVzb2x2ZXIoY29uc3QgUnVuUmVz
b2x2ZXImIHJ1blJlc29sdmVyKQotICAgIDogbV9ydW5SZXNvbHZlcihydW5SZXNvbHZlcikKLXsK
LX0KLQotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxp
bmVMYXlvdXRSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXRSZXNvbHZlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzYwMDQ3ZjU1
NzMuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGlu
ZUxheW91dFJlc29sdmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMTcgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgotI2luY2x1ZGUg
IlJlbmRlckJsb2NrRmxvdy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXQuaCIKLSNpbmNs
dWRlICJTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmgiCi0jaW5jbHVkZSA8d3RmL0l0ZXJh
dG9yUmFuZ2UuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewotCi1jbGFzcyBSdW5SZXNv
bHZlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgY2xhc3Mg
SXRlcmF0b3I7Ci0KLSAgICBjbGFzcyBSdW4gewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGlj
aXQgUnVuKGNvbnN0IEl0ZXJhdG9yJik7Ci0KLSAgICAgICAgLy8gUG9zaXRpb24gcmVsYXRpdmUg
dG8gdGhlIGVuY2xvc2luZyBmbG93IGJsb2NrLgotICAgICAgICB1bnNpZ25lZCBzdGFydCgpIGNv
bnN0OwotICAgICAgICB1bnNpZ25lZCBlbmQoKSBjb25zdDsKLSAgICAgICAgLy8gUG9zaXRpb24g
cmVsYXRpdmUgdG8gdGhlIGFjdHVhbCByZW5kZXJlci4KLSAgICAgICAgdW5zaWduZWQgbG9jYWxT
dGFydCgpIGNvbnN0OwotICAgICAgICB1bnNpZ25lZCBsb2NhbEVuZCgpIGNvbnN0OwotCi0gICAg
ICAgIGZsb2F0IGxvZ2ljYWxMZWZ0KCkgY29uc3Q7Ci0gICAgICAgIGZsb2F0IGxvZ2ljYWxSaWdo
dCgpIGNvbnN0OwotCi0gICAgICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3Q7Ci0gICAgICAgIGZs
b2F0IGV4cGFuc2lvbigpIGNvbnN0OwotICAgICAgICBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNp
b25CZWhhdmlvcigpIGNvbnN0OwotICAgICAgICBpbnQgYmFzZWxpbmVQb3NpdGlvbigpIGNvbnN0
OwotICAgICAgICBpbnQgYmFzZWxpbmUoKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdG9yLnJlc29s
dmVyKCkubV9iYXNlbGluZTsgfQotICAgICAgICBTdHJpbmdWaWV3IHRleHQoKSBjb25zdDsKLSAg
ICAgICAgU3RyaW5nIHRleHRXaXRoSHlwaGVuKCkgY29uc3Q7Ci0gICAgICAgIGNvbnN0IFJlbmRl
ck9iamVjdCYgcmVuZGVyZXIoKSBjb25zdDsKLSAgICAgICAgYm9vbCBpc0VuZE9mTGluZSgpIGNv
bnN0OwotICAgICAgICBib29sIGhhc0h5cGhlbigpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0b3Iu
c2ltcGxlUnVuKCkuaGFzSHlwaGVuOyB9Ci0gICAgICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBjb25z
dCB7IHJldHVybiBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpLmlzTGluZUJyZWFrOyB9Ci0gICAgICAg
IGNvbnN0IFNpbXBsZUxpbmVMYXlvdXQ6OlJ1biYgc2ltcGxlUnVuKCkgY29uc3QgeyByZXR1cm4g
bV9pdGVyYXRvci5zaW1wbGVSdW4oKTsgfQotCi0gICAgICAgIHVuc2lnbmVkIGxpbmVJbmRleCgp
IGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZmxvYXQgY29tcHV0ZUJhc2VsaW5lUG9z
aXRpb24oKSBjb25zdDsKLSAgICAgICAgdm9pZCBjb25zdHJ1Y3RTdHJpbmdGb3JIeXBoZW5JZk5l
ZWRlZCgpOwotCi0gICAgICAgIGNvbnN0IEl0ZXJhdG9yJiBtX2l0ZXJhdG9yOwotICAgIH07Ci0K
LSAgICBjbGFzcyBJdGVyYXRvciB7Ci0gICAgZnJpZW5kIGNsYXNzIFJ1bjsKLSAgICBmcmllbmQg
Y2xhc3MgUnVuUmVzb2x2ZXI7Ci0gICAgZnJpZW5kIGNsYXNzIExpbmVSZXNvbHZlcjsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIEl0ZXJhdG9yKGNvbnN0IFJ1blJlc29sdmVyJiwgdW5zaWduZWQgcnVu
SW5kZXgsIHVuc2lnbmVkIGxpbmVJbmRleCk7Ci0KLSAgICAgICAgSXRlcmF0b3ImIG9wZXJhdG9y
KysoKTsKLSAgICAgICAgSXRlcmF0b3ImIG9wZXJhdG9yLS0oKTsKLQotICAgICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsKLSAgICAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEl0ZXJhdG9yJikgY29uc3Q7Ci0KLSAgICAgICAgUnVuIG9wZXJhdG9yKigpIGNvbnN0
OwotCi0gICAgICAgIGJvb2wgYXRCZWdpbigpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgY29uc3QgU2ltcGxlTGluZUxheW91dDo6UnVuJiBzaW1wbGVSdW4oKSBjb25zdDsKLSAgICAg
ICAgdW5zaWduZWQgbGluZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9saW5lSW5kZXg7IH0KLSAg
ICAgICAgSXRlcmF0b3ImIGFkdmFuY2UoKTsKLSAgICAgICAgSXRlcmF0b3ImIGFkdmFuY2VMaW5l
cyh1bnNpZ25lZCk7Ci0gICAgICAgIGNvbnN0IFJ1blJlc29sdmVyJiByZXNvbHZlcigpIGNvbnN0
IHsgcmV0dXJuICptX3Jlc29sdmVyOyB9Ci0gICAgICAgIGNvbnN0IExheW91dCYgbGF5b3V0KCkg
Y29uc3QgeyByZXR1cm4gKm1fbGF5b3V0OyB9Ci0KLSAgICAgICAgUmVmUHRyPGNvbnN0IExheW91
dD4gbV9sYXlvdXQ7Ci0gICAgICAgIGNvbnN0IFJ1blJlc29sdmVyKiBtX3Jlc29sdmVyOwotICAg
ICAgICB1bnNpZ25lZCBtX3J1bkluZGV4OwotICAgICAgICB1bnNpZ25lZCBtX2xpbmVJbmRleDsK
LSAgICB9OwotCi0gICAgUnVuUmVzb2x2ZXIoY29uc3QgUmVuZGVyQmxvY2tGbG93JiwgY29uc3Qg
TGF5b3V0Jik7Ci0KLSAgICBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3coKSBjb25zdCB7IHJl
dHVybiBtX2Zsb3dSZW5kZXJlcjsgfQotICAgIGNvbnN0IEZsb3dDb250ZW50cyYgZmxvd0NvbnRl
bnRzKCkgY29uc3QgeyByZXR1cm4gbV9mbG93Q29udGVudHM7IH0KLSAgICBJdGVyYXRvciBiZWdp
bigpIGNvbnN0OwotICAgIEl0ZXJhdG9yIGVuZCgpIGNvbnN0OwotCi0gICAgV1RGOjpJdGVyYXRv
clJhbmdlPEl0ZXJhdG9yPiByYW5nZUZvclJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0Owot
ICAgIFdURjo6SXRlcmF0b3JSYW5nZTxJdGVyYXRvcj4gcmFuZ2VGb3JSZW5kZXJlcihjb25zdCBS
ZW5kZXJPYmplY3QmKSBjb25zdDsKLSAgICBXVEY6Okl0ZXJhdG9yUmFuZ2U8SXRlcmF0b3I+IHJh
bmdlRm9yTGluZSh1bnNpZ25lZCBsaW5lSW5kZXgpIGNvbnN0OwotICAgIEl0ZXJhdG9yIHJ1bkZv
clBvaW50KGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7Ci0gICAgV1RGOjpJdGVyYXRvclJhbmdl
PEl0ZXJhdG9yPiByYW5nZUZvclJlbmRlcmVyV2l0aE9mZnNldHMoY29uc3QgUmVuZGVyT2JqZWN0
JiwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAg
ZW51bSBjbGFzcyBJbmRleFR5cGUgeyBGaXJzdCwgTGFzdCB9OwotICAgIHVuc2lnbmVkIGxpbmVJ
bmRleEZvckhlaWdodChMYXlvdXRVbml0LCBJbmRleFR5cGUpIGNvbnN0OwotICAgIHVuc2lnbmVk
IGFkanVzdExpbmVJbmRleEZvclN0cnV0cyhMYXlvdXRVbml0LCBJbmRleFR5cGUsIHVuc2lnbmVk
IGxpbmVJbmRleENhbmRpZGF0ZSkgY29uc3Q7Ci0KLSAgICBjb25zdCBSZW5kZXJCbG9ja0Zsb3cm
IG1fZmxvd1JlbmRlcmVyOwotICAgIGNvbnN0IExheW91dCYgbV9sYXlvdXQ7Ci0gICAgY29uc3Qg
Rmxvd0NvbnRlbnRzIG1fZmxvd0NvbnRlbnRzOwotICAgIGNvbnN0IExheW91dFVuaXQgbV9saW5l
SGVpZ2h0OwotICAgIGNvbnN0IExheW91dFVuaXQgbV9iYXNlbGluZTsKLSAgICBjb25zdCBMYXlv
dXRVbml0IG1fYm9yZGVyQW5kUGFkZGluZ0JlZm9yZTsKLSAgICBjb25zdCBmbG9hdCBtX2FzY2Vu
dDsKLSAgICBjb25zdCBmbG9hdCBtX2Rlc2NlbnQ7Ci0gICAgY29uc3QgZmxvYXQgbV92aXN1YWxP
dmVyZmxvd09mZnNldDsKLX07Ci0KLWNsYXNzIExpbmVSZXNvbHZlciB7Ci1wdWJsaWM6Ci0gICAg
Y2xhc3MgSXRlcmF0b3IgewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgSXRlcmF0b3Io
UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yKTsKLQotICAgICAgICBJdGVyYXRvciYgb3BlcmF0b3IrKygp
OwotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsKLSAgICAg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJikgY29uc3Q7Ci0KLSAgICAgICAgRmxv
YXRSZWN0IG9wZXJhdG9yKigpIGNvbnN0OwotICAgICAgICAvLyBGSVhNRTogVXNlIGEgbGlzdCB0
byBzdXBwb3J0IG11bHRpcGxlIHJlbmRlcmVycyBwZXIgbGluZS4KLSAgICAgICAgY29uc3QgUmVu
ZGVyT2JqZWN0JiByZW5kZXJlcigpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUnVu
UmVzb2x2ZXI6Okl0ZXJhdG9yIG1fcnVuSXRlcmF0b3I7Ci0gICAgfTsKLQotICAgIExpbmVSZXNv
bHZlcihjb25zdCBSdW5SZXNvbHZlciYpOwotCi0gICAgSXRlcmF0b3IgYmVnaW4oKSBjb25zdDsK
LSAgICBJdGVyYXRvciBlbmQoKSBjb25zdDsKLQotICAgIFdURjo6SXRlcmF0b3JSYW5nZTxJdGVy
YXRvcj4gcmFuZ2VGb3JSZWN0KGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKLQotcHJpdmF0ZToK
LSAgICBjb25zdCBSdW5SZXNvbHZlciYgbV9ydW5SZXNvbHZlcjsKLX07Ci0KLVJ1blJlc29sdmVy
IHJ1blJlc29sdmVyKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IExheW91dCYpOwotTGlu
ZVJlc29sdmVyIGxpbmVSZXNvbHZlcihjb25zdCBSdW5SZXNvbHZlciYpOwotCi1pbmxpbmUgdW5z
aWduZWQgUnVuUmVzb2x2ZXI6OlJ1bjo6c3RhcnQoKSBjb25zdAotewotICAgIHJldHVybiBtX2l0
ZXJhdG9yLnNpbXBsZVJ1bigpLnN0YXJ0OwotfQotCi1pbmxpbmUgdW5zaWduZWQgUnVuUmVzb2x2
ZXI6OlJ1bjo6ZW5kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pdGVyYXRvci5zaW1wbGVSdW4o
KS5lbmQ7Ci19Ci0KLWlubGluZSBmbG9hdCBSdW5SZXNvbHZlcjo6UnVuOjpsb2dpY2FsTGVmdCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faXRlcmF0b3Iuc2ltcGxlUnVuKCkubG9naWNhbExlZnQ7
Ci19Ci0KLWlubGluZSBmbG9hdCBSdW5SZXNvbHZlcjo6UnVuOjpsb2dpY2FsUmlnaHQoKSBjb25z
dAotewotICAgIHJldHVybiBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpLmxvZ2ljYWxSaWdodDsKLX0K
LQotaW5saW5lIGZsb2F0IFJ1blJlc29sdmVyOjpSdW46OmV4cGFuc2lvbigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1faXRlcmF0b3Iuc2ltcGxlUnVuKCkuZXhwYW5zaW9uOwotfQotCi1pbmxpbmUg
RXhwYW5zaW9uQmVoYXZpb3IgUnVuUmVzb2x2ZXI6OlJ1bjo6ZXhwYW5zaW9uQmVoYXZpb3IoKSBj
b25zdAotewotICAgIHJldHVybiBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpLmV4cGFuc2lvbkJlaGF2
aW9yOwotfQotCi1pbmxpbmUgaW50IFJ1blJlc29sdmVyOjpSdW46OmJhc2VsaW5lUG9zaXRpb24o
KSBjb25zdAotewotICAgIHJldHVybiByb3VuZFRvSW50KGNvbXB1dGVCYXNlbGluZVBvc2l0aW9u
KCkpOwotfQotCi1pbmxpbmUgYm9vbCBSdW5SZXNvbHZlcjo6UnVuOjppc0VuZE9mTGluZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1faXRlcmF0b3Iuc2ltcGxlUnVuKCkuaXNFbmRPZkxpbmU7Ci19
Ci0KLWlubGluZSB1bnNpZ25lZCBSdW5SZXNvbHZlcjo6UnVuOjpsaW5lSW5kZXgoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2l0ZXJhdG9yLmxpbmVJbmRleCgpOwotfQotCi1pbmxpbmUgUnVuUmVz
b2x2ZXI6Okl0ZXJhdG9yJiBSdW5SZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yKysoKQotewot
ICAgIHJldHVybiBhZHZhbmNlKCk7Ci19Ci0KLWlubGluZSBmbG9hdCBSdW5SZXNvbHZlcjo6UnVu
Ojpjb21wdXRlQmFzZWxpbmVQb3NpdGlvbigpIGNvbnN0Ci17Ci0gICAgYXV0byYgcmVzb2x2ZXIg
PSBtX2l0ZXJhdG9yLnJlc29sdmVyKCk7Ci0gICAgYXV0byBvZmZzZXQgPSByZXNvbHZlci5tX2Jv
cmRlckFuZFBhZGRpbmdCZWZvcmUgKyByZXNvbHZlci5tX2xpbmVIZWlnaHQgKiBsaW5lSW5kZXgo
KTsKLSAgICBpZiAoIW1faXRlcmF0b3IubGF5b3V0KCkuaGFzTGluZVN0cnV0cygpKQotICAgICAg
ICByZXR1cm4gb2Zmc2V0ICsgcmVzb2x2ZXIubV9iYXNlbGluZTsKLSAgICBmb3IgKGF1dG8mIHN0
cnV0RW50cnkgOiByZXNvbHZlci5tX2xheW91dC5zdHJ1dHMoKSkgewotICAgICAgICBpZiAoc3Ry
dXRFbnRyeS5saW5lQnJlYWsgPiBsaW5lSW5kZXgoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBvZmZzZXQgKz0gc3RydXRFbnRyeS5vZmZzZXQ7Ci0gICAgfQotICAgIHJldHVybiBvZmZz
ZXQgKyByZXNvbHZlci5tX2Jhc2VsaW5lOwotfQotCi1pbmxpbmUgUnVuUmVzb2x2ZXI6Okl0ZXJh
dG9yJiBSdW5SZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yLS0oKQotewotICAgIC0tbV9ydW5J
bmRleDsKLSAgICBpZiAoc2ltcGxlUnVuKCkuaXNFbmRPZkxpbmUpCi0gICAgICAgIC0tbV9saW5l
SW5kZXg7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1pbmxpbmUgYm9vbCBSdW5SZXNvbHZlcjo6
SXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdAotewotICAg
IEFTU0VSVChtX3Jlc29sdmVyID09IG90aGVyLm1fcmVzb2x2ZXIpOwotICAgIHJldHVybiBtX3J1
bkluZGV4ID09IG90aGVyLm1fcnVuSW5kZXg7Ci19Ci0KLWlubGluZSBib29sIFJ1blJlc29sdmVy
OjpJdGVyYXRvcjo6b3BlcmF0b3IhPShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotfQotCi1pbmxpbmUgUnVuUmVzb2x2ZXI6OlJ1
biBSdW5SZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yKigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IFJ1bigqdGhpcyk7Ci19Ci0KLWlubGluZSBib29sIFJ1blJlc29sdmVyOjpJdGVyYXRvcjo6YXRC
ZWdpbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICp0aGlzID09IHJlc29sdmVyKCkuYmVnaW4oKTsK
LX0KLQotaW5saW5lIGNvbnN0IFNpbXBsZUxpbmVMYXlvdXQ6OlJ1biYgUnVuUmVzb2x2ZXI6Okl0
ZXJhdG9yOjpzaW1wbGVSdW4oKSBjb25zdAotewotICAgIHJldHVybiBsYXlvdXQoKS5ydW5BdCht
X3J1bkluZGV4KTsKLX0KLQotaW5saW5lIFJ1blJlc29sdmVyOjpJdGVyYXRvciBSdW5SZXNvbHZl
cjo6YmVnaW4oKSBjb25zdAotewotICAgIHJldHVybiBJdGVyYXRvcigqdGhpcywgMCwgMCk7Ci19
Ci0KLWlubGluZSBSdW5SZXNvbHZlcjo6SXRlcmF0b3IgUnVuUmVzb2x2ZXI6OmVuZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIEl0ZXJhdG9yKCp0aGlzLCBtX2xheW91dC5ydW5Db3VudCgpLCBtX2xh
eW91dC5saW5lQ291bnQoKSk7Ci19Ci0KLWlubGluZSBMaW5lUmVzb2x2ZXI6Okl0ZXJhdG9yJiBM
aW5lUmVzb2x2ZXI6Okl0ZXJhdG9yOjpvcGVyYXRvcisrKCkKLXsKLSAgICBtX3J1bkl0ZXJhdG9y
LmFkdmFuY2VMaW5lcygxKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLWlubGluZSBib29sIExp
bmVSZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBj
b25zdAotewotICAgIHJldHVybiBtX3J1bkl0ZXJhdG9yID09IG90aGVyLm1fcnVuSXRlcmF0b3I7
Ci19Ci0KLWlubGluZSBib29sIExpbmVSZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yIT0oY29u
c3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdAotewotICAgIHJldHVybiBtX3J1bkl0ZXJhdG9yICE9
IG90aGVyLm1fcnVuSXRlcmF0b3I7Ci19Ci0KLWlubGluZSBMaW5lUmVzb2x2ZXI6Okl0ZXJhdG9y
IExpbmVSZXNvbHZlcjo6YmVnaW4oKSBjb25zdAotewotICAgIHJldHVybiBJdGVyYXRvcihtX3J1
blJlc29sdmVyLmJlZ2luKCkpOwotfQotCi1pbmxpbmUgTGluZVJlc29sdmVyOjpJdGVyYXRvciBM
aW5lUmVzb2x2ZXI6OmVuZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEl0ZXJhdG9yKG1fcnVuUmVz
b2x2ZXIuZW5kKCkpOwotfQotCi1pbmxpbmUgV1RGOjpJdGVyYXRvclJhbmdlPExpbmVSZXNvbHZl
cjo6SXRlcmF0b3I+IExpbmVSZXNvbHZlcjo6cmFuZ2VGb3JSZWN0KGNvbnN0IExheW91dFJlY3Qm
IHJlY3QpIGNvbnN0Ci17Ci0gICAgYXV0byBydW5SYW5nZSA9IG1fcnVuUmVzb2x2ZXIucmFuZ2VG
b3JSZWN0KHJlY3QpOwotICAgIHJldHVybiB7IEl0ZXJhdG9yKHJ1blJhbmdlLmJlZ2luKCkpLCBJ
dGVyYXRvcihydW5SYW5nZS5lbmQoKSkgfTsKLX0KLQotaW5saW5lIExpbmVSZXNvbHZlciBsaW5l
UmVzb2x2ZXIoY29uc3QgUnVuUmVzb2x2ZXImIHJ1blJlc29sdmVyKQotewotICAgIHJldHVybiBM
aW5lUmVzb2x2ZXIocnVuUmVzb2x2ZXIpOwotfQotCi19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50
SXRlcmF0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTI3ZDc0NTEzM2Eu
LjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxh
eW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI2OSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNpbXBsZUxp
bmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oIgotCi0jaW5jbHVkZSAiRm9udENhc2NhZGUu
aCIKLSNpbmNsdWRlICJIeXBoZW5hdGlvbi5oIgotI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5o
IgotI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5l
TGF5b3V0Rmxvd0NvbnRlbnRzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBT
aW1wbGVMaW5lTGF5b3V0IHsKLQotVGV4dEZyYWdtZW50SXRlcmF0b3I6OlN0eWxlOjpTdHlsZShj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCi0gICAgOiBmb250KHN0eWxlLmZvbnRDYXNjYWRlKCkp
Ci0gICAgLCB0ZXh0QWxpZ24oc3R5bGUudGV4dEFsaWduKCkpCi0gICAgLCBoYXNLZXJuaW5nT3JM
aWdhdHVyZXMoZm9udC5lbmFibGVLZXJuaW5nKCkgfHwgZm9udC5yZXF1aXJlc1NoYXBpbmcoKSkK
LSAgICAsIGNvbGxhcHNlV2hpdGVzcGFjZShzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSkKLSAg
ICAsIHByZXNlcnZlTmV3bGluZShzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUoKSkKLSAgICAsIHdyYXBM
aW5lcyhzdHlsZS5hdXRvV3JhcCgpKQotICAgICwgYnJlYWtTcGFjZXMoc3R5bGUud2hpdGVTcGFj
ZSgpID09IFdoaXRlU3BhY2U6OkJyZWFrU3BhY2VzKQotICAgICwgYnJlYWtBbnlXb3JkT25PdmVy
ZmxvdyhzdHlsZS53b3JkQnJlYWsoKSA9PSBXb3JkQnJlYWs6OkJyZWFrQWxsICYmIHdyYXBMaW5l
cykKLSAgICAsIGJyZWFrV29yZE9uT3ZlcmZsb3coc3R5bGUuYnJlYWtXb3JkcygpICYmICh3cmFw
TGluZXMgfHwgcHJlc2VydmVOZXdsaW5lKSkKLSAgICAsIGJyZWFrRmlyc3RXb3JkT25PdmVyZmxv
dyhicmVha0FueVdvcmRPbk92ZXJmbG93IHx8IGJyZWFrV29yZE9uT3ZlcmZsb3cpCi0gICAgLCBi
cmVha05CU1Aod3JhcExpbmVzICYmIHN0eWxlLm5ic3BNb2RlKCkgPT0gTkJTUE1vZGU6OlNwYWNl
KQotICAgICwga2VlcEFsbFdvcmRzRm9yQ0pLKHN0eWxlLndvcmRCcmVhaygpID09IFdvcmRCcmVh
azo6S2VlcEFsbCkKLSAgICAsIHdvcmRTcGFjaW5nKGZvbnQud29yZFNwYWNpbmcoKSkKLSAgICAs
IHRhYldpZHRoKGNvbGxhcHNlV2hpdGVzcGFjZSA/IFRhYlNpemUoMCkgOiBzdHlsZS50YWJTaXpl
KCkpCi0gICAgLCBzaG91bGRIeXBoZW5hdGUoc3R5bGUuaHlwaGVucygpID09IEh5cGhlbnM6OkF1
dG8gJiYgY2FuSHlwaGVuYXRlKHN0eWxlLmNvbXB1dGVkTG9jYWxlKCkpKQotICAgICwgaHlwaGVu
U3RyaW5nV2lkdGgoc2hvdWxkSHlwaGVuYXRlID8gZm9udC53aWR0aChUZXh0UnVuKFN0cmluZyhz
dHlsZS5oeXBoZW5TdHJpbmcoKSkpKSA6IDApCi0gICAgLCBoeXBoZW5MaW1pdEJlZm9yZShzdHls
ZS5oeXBoZW5hdGlvbkxpbWl0QmVmb3JlKCkgPCAwID8gMiA6IHN0eWxlLmh5cGhlbmF0aW9uTGlt
aXRCZWZvcmUoKSkKLSAgICAsIGh5cGhlbkxpbWl0QWZ0ZXIoc3R5bGUuaHlwaGVuYXRpb25MaW1p
dEFmdGVyKCkgPCAwID8gMiA6IHN0eWxlLmh5cGhlbmF0aW9uTGltaXRBZnRlcigpKQotICAgICwg
bG9jYWxlKHN0eWxlLmNvbXB1dGVkTG9jYWxlKCkpCi17Ci0gICAgaWYgKHN0eWxlLmh5cGhlbmF0
aW9uTGltaXRMaW5lcygpID4gLTEpCi0gICAgICAgIGh5cGhlbkxpbWl0TGluZXMgPSBzdHlsZS5o
eXBoZW5hdGlvbkxpbWl0TGluZXMoKTsKLX0KLQotVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRG
cmFnbWVudEl0ZXJhdG9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKLSAgICA6IG1fZmxv
d0NvbnRlbnRzKGZsb3cpCi0gICAgLCBtX2N1cnJlbnRTZWdtZW50KG1fZmxvd0NvbnRlbnRzLmJl
Z2luKCkpCi0gICAgLCBtX2xpbmVCcmVha0l0ZXJhdG9yKG1fY3VycmVudFNlZ21lbnQtPnRleHQs
IGZsb3cuc3R5bGUoKS5jb21wdXRlZExvY2FsZSgpKQotICAgICwgbV9zdHlsZShmbG93LnN0eWxl
KCkpCi17Ci19Ci0KLVRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgVGV4dEZyYWdt
ZW50SXRlcmF0b3I6Om5leHRUZXh0RnJhZ21lbnQoZmxvYXQgeFBvc2l0aW9uKQotewotICAgIFRl
eHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgbmV4dEZyYWdtZW50ID0gZmluZE5leHRU
ZXh0RnJhZ21lbnQoeFBvc2l0aW9uKTsKLSAgICBtX2F0RW5kT2ZTZWdtZW50ID0gKG1fY3VycmVu
dFNlZ21lbnQgPT0gbV9mbG93Q29udGVudHMuZW5kKCkpIHx8IChtX3Bvc2l0aW9uID09IG1fY3Vy
cmVudFNlZ21lbnQtPmVuZCk7Ci0gICAgcmV0dXJuIG5leHRGcmFnbWVudDsKLX0KLQotVGV4dEZy
YWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6ZmluZE5l
eHRUZXh0RnJhZ21lbnQoZmxvYXQgeFBvc2l0aW9uKQotewotICAgIC8vIEEgZnJhZ21lbnQgY2Fu
IGVpdGhlciBiZQotICAgIC8vIDEuIGxpbmUgYnJlYWsgd2hlbiA8YnI+IGlzIHByZXNlbnQgb3Ig
cHJlc2VydmVOZXdsaW5lIGlzIG9uIChub3QgY29uc2lkZXJlZCBhcyB3aGl0ZXNwYWNlKSBvcgot
ICAgIC8vIDIuIHdoaXRlc3BhY2UgKGNvbGxhc3BlZCwgbm9uLWNvbGxhcHNlZCBtdWx0aSBvciBz
aW5nbGUpIG9yCi0gICAgLy8gMy4gbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycy4KLSAgICAvLyA0
LiBjb250ZW50IGVuZC4KLSAgICBBU1NFUlQobV9jdXJyZW50U2VnbWVudCAhPSBtX2Zsb3dDb250
ZW50cy5lbmQoKSk7Ci0gICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IG1fcG9zaXRpb247Ci0g
ICAgaWYgKG1fYXRFbmRPZlNlZ21lbnQpCi0gICAgICAgICsrbV9jdXJyZW50U2VnbWVudDsKLQot
ICAgIGlmIChtX2N1cnJlbnRTZWdtZW50ID09IG1fZmxvd0NvbnRlbnRzLmVuZCgpKQotICAgICAg
ICByZXR1cm4gVGV4dEZyYWdtZW50KHN0YXJ0UG9zaXRpb24sIHN0YXJ0UG9zaXRpb24sIDAsIFRl
eHRGcmFnbWVudDo6Q29udGVudEVuZCk7Ci0gICAgaWYgKGlzSGFyZExpbmVCcmVhayhtX2N1cnJl
bnRTZWdtZW50KSkKLSAgICAgICAgcmV0dXJuIFRleHRGcmFnbWVudChzdGFydFBvc2l0aW9uLCBz
dGFydFBvc2l0aW9uLCAwLCBUZXh0RnJhZ21lbnQ6OkhhcmRMaW5lQnJlYWspOwotICAgIGlmIChp
c1NvZnRMaW5lQnJlYWsoc3RhcnRQb3NpdGlvbikpIHsKLSAgICAgICAgdW5zaWduZWQgZW5kUG9z
aXRpb24gPSArK21fcG9zaXRpb247Ci0gICAgICAgIHJldHVybiBUZXh0RnJhZ21lbnQoc3RhcnRQ
b3NpdGlvbiwgZW5kUG9zaXRpb24sIDAsIFRleHRGcmFnbWVudDo6U29mdExpbmVCcmVhayk7Ci0g
ICAgfQotICAgIGZsb2F0IHdpZHRoID0gMDsKLSAgICBib29sIG92ZXJsYXBwaW5nRnJhZ21lbnQg
PSBmYWxzZTsKLSAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHNraXBUb05leHRQb3NpdGlvbihQ
b3NpdGlvblR5cGU6Ok5vbldoaXRlc3BhY2UsIHN0YXJ0UG9zaXRpb24sIHdpZHRoLCB4UG9zaXRp
b24sIG92ZXJsYXBwaW5nRnJhZ21lbnQpOwotICAgIHVuc2lnbmVkIHNlZ21lbnRFbmRQb3NpdGlv
biA9IG1fY3VycmVudFNlZ21lbnQtPmVuZDsKLSAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbiA8PSBl
bmRQb3NpdGlvbik7Ci0gICAgaWYgKHN0YXJ0UG9zaXRpb24gPCBlbmRQb3NpdGlvbikgewotICAg
ICAgICBib29sIG11bHRpcGxlV2hpdGVzcGFjZSA9IHN0YXJ0UG9zaXRpb24gKyAxIDwgZW5kUG9z
aXRpb247Ci0gICAgICAgIGJvb2wgaXNDb2xsYXBzZWQgPSBtdWx0aXBsZVdoaXRlc3BhY2UgJiYg
bV9zdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2U7Ci0gICAgICAgIG1fcG9zaXRpb24gPSBlbmRQb3Np
dGlvbjsKLSAgICAgICAgcmV0dXJuIFRleHRGcmFnbWVudChzdGFydFBvc2l0aW9uLCBlbmRQb3Np
dGlvbiwgd2lkdGgsIFRleHRGcmFnbWVudDo6V2hpdGVzcGFjZSwgZW5kUG9zaXRpb24gPT0gc2Vn
bWVudEVuZFBvc2l0aW9uLCBmYWxzZSwgaXNDb2xsYXBzZWQsIG1fc3R5bGUuY29sbGFwc2VXaGl0
ZXNwYWNlKTsKLSAgICB9Ci0gICAgZW5kUG9zaXRpb24gPSBza2lwVG9OZXh0UG9zaXRpb24oUG9z
aXRpb25UeXBlOjpCcmVha2FibGUsIHN0YXJ0UG9zaXRpb24sIHdpZHRoLCB4UG9zaXRpb24sIG92
ZXJsYXBwaW5nRnJhZ21lbnQpOwotICAgIG1fcG9zaXRpb24gPSBlbmRQb3NpdGlvbjsKLSAgICBy
ZXR1cm4gVGV4dEZyYWdtZW50KHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCB3aWR0aCwgVGV4
dEZyYWdtZW50OjpOb25XaGl0ZXNwYWNlLCBlbmRQb3NpdGlvbiA9PSBzZWdtZW50RW5kUG9zaXRp
b24sIG92ZXJsYXBwaW5nRnJhZ21lbnQsIGZhbHNlLCBmYWxzZSk7Ci19Ci0KLXZvaWQgVGV4dEZy
YWdtZW50SXRlcmF0b3I6OnJldmVydFRvRW5kT2ZGcmFnbWVudChjb25zdCBUZXh0RnJhZ21lbnQm
IGZyYWdtZW50KQotewotICAgIEFTU0VSVChtX3Bvc2l0aW9uID49IGZyYWdtZW50LmVuZCgpKTsK
LSAgICB3aGlsZSAobV9jdXJyZW50U2VnbWVudC0+c3RhcnQgPiBmcmFnbWVudC5lbmQoKSkKLSAg
ICAgICAgLS1tX2N1cnJlbnRTZWdtZW50OwotICAgIC8vIFRPRE86IEl0IHJldmVydHMgdG8gdGhl
IGxhc3QgZnJhZ21lbnQgb24gdGhlIHNhbWUgcG9zaXRpb24sIGJ1dCB0aGF0J3Mgb2sgZm9yIG5v
dyBhcyB3ZSBkb24ndCBuZWVkIHRvCi0gICAgLy8gZGlmZmVyZW50aWF0ZSBtdWx0aXBsZSByZW5k
ZXJlcnMgb24gdGhlIHNhbWUgcG9zaXRpb24uCi0gICAgbV9wb3NpdGlvbiA9IGZyYWdtZW50LmVu
ZCgpOwotICAgIG1fYXRFbmRPZlNlZ21lbnQgPSBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSB1
bnNpZ25lZCBuZXh0QnJlYWthYmxlUG9zaXRpb25JblNlZ21lbnQoTGF6eUxpbmVCcmVha0l0ZXJh
dG9yJiBsaW5lQnJlYWtJdGVyYXRvciwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgYm9vbCBicmVh
a05CU1AsIGJvb2wga2VlcEFsbFdvcmRzRm9yQ0pLKQotewotICAgIGlmIChrZWVwQWxsV29yZHNG
b3JDSkspIHsKLSAgICAgICAgaWYgKGJyZWFrTkJTUCkKLSAgICAgICAgICAgIHJldHVybiBuZXh0
QnJlYWthYmxlUG9zaXRpb25LZWVwaW5nQWxsV29yZHMobGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0
UG9zaXRpb24pOwotICAgICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uS2VlcGluZ0Fs
bFdvcmRzSWdub3JpbmdOQlNQKGxpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKLSAg
ICB9Ci0KLSAgICBpZiAobGluZUJyZWFrSXRlcmF0b3IubW9kZSgpID09IExpbmVCcmVha0l0ZXJh
dG9yTW9kZTo6RGVmYXVsdCkgewotICAgICAgICBpZiAoYnJlYWtOQlNQKQotICAgICAgICAgICAg
cmV0dXJuIFdlYkNvcmU6Om5leHRCcmVha2FibGVQb3NpdGlvbihsaW5lQnJlYWtJdGVyYXRvciwg
c3RhcnRQb3NpdGlvbik7Ci0gICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25JZ25v
cmluZ05CU1AobGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgIH0KLQotICAg
IGlmIChicmVha05CU1ApCi0gICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25XaXRo
b3V0U2hvcnRjdXQobGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgIHJldHVy
biBuZXh0QnJlYWthYmxlUG9zaXRpb25JZ25vcmluZ05CU1BXaXRob3V0U2hvcnRjdXQobGluZUJy
ZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotfQotCi11bnNpZ25lZCBUZXh0RnJhZ21lbnRJ
dGVyYXRvcjo6bmV4dEJyZWFrYWJsZVBvc2l0aW9uKGNvbnN0IEZsb3dDb250ZW50czo6U2VnbWVu
dCYgc2VnbWVudCwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbikKLXsKLSAgICBBU1NFUlQoc3RhcnRQ
b3NpdGlvbiA8IHNlZ21lbnQuZW5kKTsKLSAgICBTdHJpbmdWaWV3IGN1cnJlbnRUZXh0ID0gbV9s
aW5lQnJlYWtJdGVyYXRvci5zdHJpbmdWaWV3KCk7Ci0gICAgU3RyaW5nVmlldyBzZWdtZW50VGV4
dCA9IFN0cmluZ1ZpZXcoc2VnbWVudC50ZXh0KTsKLSAgICBpZiAoc2VnbWVudFRleHQgIT0gY3Vy
cmVudFRleHQpIHsKLSAgICAgICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IGN1cnJlbnRUZXh0Lmxl
bmd0aCgpOwotICAgICAgICBVQ2hhciBsYXN0Q2hhcmFjdGVyID0gdGV4dExlbmd0aCA+IDAgPyBj
dXJyZW50VGV4dFt0ZXh0TGVuZ3RoIC0gMV0gOiAwOwotICAgICAgICBVQ2hhciBzZWNvbmRUb0xh
c3RDaGFyYWN0ZXIgPSB0ZXh0TGVuZ3RoID4gMSA/IGN1cnJlbnRUZXh0W3RleHRMZW5ndGggLSAy
XSA6IDA7Ci0gICAgICAgIG1fbGluZUJyZWFrSXRlcmF0b3Iuc2V0UHJpb3JDb250ZXh0KGxhc3RD
aGFyYWN0ZXIsIHNlY29uZFRvTGFzdENoYXJhY3Rlcik7Ci0gICAgICAgIG1fbGluZUJyZWFrSXRl
cmF0b3IucmVzZXRTdHJpbmdBbmRSZWxlYXNlSXRlcmF0b3Ioc2VnbWVudC50ZXh0LCBtX3N0eWxl
LmxvY2FsZSwgTGluZUJyZWFrSXRlcmF0b3JNb2RlOjpEZWZhdWx0KTsKLSAgICB9Ci0gICAgcmV0
dXJuIHNlZ21lbnQudG9SZW5kZXJQb3NpdGlvbihuZXh0QnJlYWthYmxlUG9zaXRpb25JblNlZ21l
bnQobV9saW5lQnJlYWtJdGVyYXRvciwgc2VnbWVudC50b1NlZ21lbnRQb3NpdGlvbihzdGFydFBv
c2l0aW9uKSwgbV9zdHlsZS5icmVha05CU1AsIG1fc3R5bGUua2VlcEFsbFdvcmRzRm9yQ0pLKSk7
Ci19Ci0KLXVuc2lnbmVkIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpuZXh0Tm9uV2hpdGVzcGFjZVBv
c2l0aW9uKGNvbnN0IEZsb3dDb250ZW50czo6U2VnbWVudCYgc2VnbWVudCwgdW5zaWduZWQgc3Rh
cnRQb3NpdGlvbikKLXsKLSAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbiA8IHNlZ21lbnQuZW5kKTsK
LSAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247Ci0gICAgZm9yICg7IHBvc2l0
aW9uIDwgc2VnbWVudC5lbmQ7ICsrcG9zaXRpb24pIHsKLSAgICAgICAgYXV0byBjaGFyYWN0ZXIg
PSBzZWdtZW50LnRleHRbc2VnbWVudC50b1NlZ21lbnRQb3NpdGlvbihwb3NpdGlvbildOwotICAg
ICAgICBib29sIGlzV2hpdGVzcGFjZSA9IGNoYXJhY3RlciA9PSAnICcgfHwgY2hhcmFjdGVyID09
ICdcdCcgfHwgKCFtX3N0eWxlLnByZXNlcnZlTmV3bGluZSAmJiBjaGFyYWN0ZXIgPT0gJ1xuJyk7
Ci0gICAgICAgIGlmICghaXNXaGl0ZXNwYWNlKQotICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9u
OwotICAgIH0KLSAgICByZXR1cm4gcG9zaXRpb247Ci19Ci0KLU9wdGlvbmFsPHVuc2lnbmVkPiBU
ZXh0RnJhZ21lbnRJdGVyYXRvcjo6bGFzdEh5cGhlblBvc2l0aW9uKGNvbnN0IFRleHRGcmFnbWVu
dEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIHJ1biwgdW5zaWduZWQgYmVmb3JlKSBjb25zdAotewot
ICAgIEFTU0VSVChydW4uc3RhcnQoKSA8IGJlZm9yZSk7Ci0gICAgYXV0byYgc2VnbWVudCA9ICpt
X2N1cnJlbnRTZWdtZW50OwotICAgIEFTU0VSVChzZWdtZW50LnN0YXJ0IDw9IGJlZm9yZSAmJiBi
ZWZvcmUgPD0gc2VnbWVudC5lbmQpOwotICAgIEFTU0VSVChpczxSZW5kZXJUZXh0PihzZWdtZW50
LnJlbmRlcmVyKSk7Ci0gICAgaWYgKCFtX3N0eWxlLnNob3VsZEh5cGhlbmF0ZSB8fCBydW4udHlw
ZSgpICE9IFRleHRGcmFnbWVudDo6Tm9uV2hpdGVzcGFjZSkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLSAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgZW5vdWdoIGNoYXJhY3RlcnMgaW4g
dGhlIHJ1bi4KLSAgICB1bnNpZ25lZCBydW5MZW5ndGggPSBydW4uZW5kKCkgLSBydW4uc3RhcnQo
KTsKLSAgICBpZiAobV9zdHlsZS5oeXBoZW5MaW1pdEJlZm9yZSA+PSBydW5MZW5ndGggfHwgbV9z
dHlsZS5oeXBoZW5MaW1pdEFmdGVyID49IHJ1bkxlbmd0aCB8fCBtX3N0eWxlLmh5cGhlbkxpbWl0
QmVmb3JlICsgbV9zdHlsZS5oeXBoZW5MaW1pdEFmdGVyID4gcnVuTGVuZ3RoKQotICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGF1dG8gcnVuU3RhcnQgPSBzZWdtZW50LnRvU2VnbWVu
dFBvc2l0aW9uKHJ1bi5zdGFydCgpKTsKLSAgICBhdXRvIGJlZm9yZUluZGV4ID0gc2VnbWVudC50
b1NlZ21lbnRQb3NpdGlvbihiZWZvcmUpIC0gcnVuU3RhcnQ7Ci0gICAgaWYgKGJlZm9yZUluZGV4
IDw9IG1fc3R5bGUuaHlwaGVuTGltaXRCZWZvcmUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0gICAgLy8gQWRqdXN0IGJlZm9yZSBpbmRleCB0byBhY2NvbW1vZGF0ZSB0aGUgbGltaXQt
YWZ0ZXIgdmFsdWUgKHRoaXMgaXMgdGhlIGxhc3QgcG90ZW50aWFsIGh5cGhlbiBsb2NhdGlvbiku
Ci0gICAgYmVmb3JlSW5kZXggPSBzdGQ6Om1pbihiZWZvcmVJbmRleCwgcnVuTGVuZ3RoIC0gbV9z
dHlsZS5oeXBoZW5MaW1pdEFmdGVyICsgMSk7Ci0gICAgYXV0byBzdWJzdHJpbmdGb3JIeXBoZW5h
dGlvbiA9IFN0cmluZ1ZpZXcoc2VnbWVudC50ZXh0KS5zdWJzdHJpbmcocnVuU3RhcnQsIHJ1bi5l
bmQoKSAtIHJ1bi5zdGFydCgpKTsKLSAgICBhdXRvIGh5cGhlbkxvY2F0aW9uID0gbGFzdEh5cGhl
bkxvY2F0aW9uKHN1YnN0cmluZ0Zvckh5cGhlbmF0aW9uLCBiZWZvcmVJbmRleCwgbV9zdHlsZS5s
b2NhbGUpOwotICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBlbm91Z2ggY2hhcmFjdGVycyBiZWZv
cmUgYW5kIGFmdGVyIHRoZSBoeXBoZW4uCi0gICAgaWYgKGh5cGhlbkxvY2F0aW9uICYmIGh5cGhl
bkxvY2F0aW9uID49IG1fc3R5bGUuaHlwaGVuTGltaXRCZWZvcmUgJiYgbV9zdHlsZS5oeXBoZW5M
aW1pdEFmdGVyIDw9IChydW5MZW5ndGggLSBoeXBoZW5Mb2NhdGlvbikpCi0gICAgICAgIHJldHVy
biBzZWdtZW50LnRvUmVuZGVyUG9zaXRpb24oaHlwaGVuTG9jYXRpb24gKyBydW5TdGFydCk7Ci0g
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotdW5zaWduZWQgVGV4dEZyYWdtZW50SXRlcmF0
b3I6OnNraXBUb05leHRQb3NpdGlvbihQb3NpdGlvblR5cGUgcG9zaXRpb25UeXBlLCB1bnNpZ25l
ZCBzdGFydFBvc2l0aW9uLCBmbG9hdCYgd2lkdGgsIGZsb2F0IHhQb3NpdGlvbiwgYm9vbCYgb3Zl
cmxhcHBpbmdGcmFnbWVudCkKLXsKLSAgICBvdmVybGFwcGluZ0ZyYWdtZW50ID0gZmFsc2U7Ci0g
ICAgdW5zaWduZWQgY3VycmVudFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKLSAgICB1bnNpZ25l
ZCBuZXh0UG9zaXRpb24gPSBjdXJyZW50UG9zaXRpb247Ci0gICAgLy8gQ29sbGFwc2VkIHdoaXRl
c3BhY2UgaGFzIGNvbnN0YW50IHdpZHRoLiBEbyBub3QgbWVhc3VyZSBpdC4KLSAgICBpZiAocG9z
aXRpb25UeXBlID09IE5vbldoaXRlc3BhY2UpCi0gICAgICAgIG5leHRQb3NpdGlvbiA9IG5leHRO
b25XaGl0ZXNwYWNlUG9zaXRpb24oKm1fY3VycmVudFNlZ21lbnQsIGN1cnJlbnRQb3NpdGlvbik7
Ci0gICAgZWxzZSBpZiAocG9zaXRpb25UeXBlID09IEJyZWFrYWJsZSkgewotICAgICAgICBuZXh0
UG9zaXRpb24gPSBuZXh0QnJlYWthYmxlUG9zaXRpb24oKm1fY3VycmVudFNlZ21lbnQsIGN1cnJl
bnRQb3NpdGlvbik7Ci0gICAgICAgIC8vIG5leHRCcmVha2FibGVQb3NpdGlvbiByZXR1cm5zIHRo
ZSBzYW1lIHBvc2l0aW9uIGZvciBjZXJ0YWluIGNoYXJhY3RlcnMgc3VjaCBhcyBoeXBoZW5zLiBD
YWxsIG5leHQgYWdhaW4gd2l0aCBtb2RpZmllZCBwb3NpdGlvbiB1bmxlc3Mgd2UgYXJlIGF0IHRo
ZSBlbmQgb2YgdGhlIHNlZ21lbnQuCi0gICAgICAgIGJvb2wgc2tpcEN1cnJlbnRQb3NpdGlvbiA9
IG5leHRQb3NpdGlvbiA9PSBjdXJyZW50UG9zaXRpb247Ci0gICAgICAgIGlmIChza2lwQ3VycmVu
dFBvc2l0aW9uKSB7Ci0gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBza2lwcGluZyB0aGUgbGFz
dCBjaGFyYWN0ZXIgaW4gdGhlIHNlZ21lbnQsIGp1c3QgbW92ZSB0byB0aGUgZW5kIG9mIHRoZSBz
ZWdtZW50IGFuZCB3ZSdsbCBjaGVjayB0aGUgbmV4dCBzZWdtZW50IHdoZXRoZXIgaXQgaXMgYW4g
b3ZlcmxhcHBpbmcgZnJhZ21lbnQuCi0gICAgICAgICAgICBBU1NFUlQoY3VycmVudFBvc2l0aW9u
IDwgbV9jdXJyZW50U2VnbWVudC0+ZW5kKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50UG9zaXRp
b24gPT0gbV9jdXJyZW50U2VnbWVudC0+ZW5kIC0gMSkKLSAgICAgICAgICAgICAgICBuZXh0UG9z
aXRpb24gPSBtX2N1cnJlbnRTZWdtZW50LT5lbmQ7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgbmV4dFBvc2l0aW9uID0gbmV4dEJyZWFrYWJsZVBvc2l0aW9uKCptX2N1cnJlbnRT
ZWdtZW50LCBjdXJyZW50UG9zaXRpb24gKyAxKTsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSBu
ZWVkIHRvIGtub3cgd2hldGhlciB0aGUgd29yZCBhY3R1YWxseSBmaW5pc2hlcyBhdCB0aGUgZW5k
IG9mIHRoaXMgcmVuZGVyZXIgb3Igbm90LgotICAgICAgICBpZiAobmV4dFBvc2l0aW9uID09IG1f
Y3VycmVudFNlZ21lbnQtPmVuZCkgewotICAgICAgICAgICAgY29uc3QgYXV0byBuZXh0U2VnbWVu
dCA9IG1fY3VycmVudFNlZ21lbnQgKyAxOwotICAgICAgICAgICAgaWYgKG5leHRTZWdtZW50ICE9
IG1fZmxvd0NvbnRlbnRzLmVuZCgpICYmICFpc0hhcmRMaW5lQnJlYWsobmV4dFNlZ21lbnQpKQot
ICAgICAgICAgICAgICAgIG92ZXJsYXBwaW5nRnJhZ21lbnQgPSBuZXh0UG9zaXRpb24gPCBuZXh0
QnJlYWthYmxlUG9zaXRpb24oKm5leHRTZWdtZW50LCBuZXh0UG9zaXRpb24pOwotICAgICAgICB9
Ci0gICAgfQotICAgIHdpZHRoID0gMDsKLSAgICBpZiAobmV4dFBvc2l0aW9uID09IGN1cnJlbnRQ
b3NpdGlvbikKLSAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3NpdGlvbjsKLSAgICAvLyBCb3RoIG5v
bi1jb2xsYXBzZWQgd2hpdGVzcGFjZSBhbmQgbm9uLXdoaXRlc3BhY2UgcnVucyBuZWVkIHRvIGJl
IG1lYXN1cmVkLgotICAgIGJvb2wgbWVhc3VyZVRleHQgPSBwb3NpdGlvblR5cGUgIT0gTm9uV2hp
dGVzcGFjZSB8fCAhbV9zdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2U7Ci0gICAgaWYgKG1lYXN1cmVU
ZXh0KQotICAgICAgICB3aWR0aCA9IHRoaXMtPnRleHRXaWR0aChjdXJyZW50UG9zaXRpb24sIG5l
eHRQb3NpdGlvbiwgeFBvc2l0aW9uKTsKLSAgICBlbHNlIGlmIChzdGFydFBvc2l0aW9uIDwgbmV4
dFBvc2l0aW9uKQotICAgICAgICB3aWR0aCA9IG1fc3R5bGUuZm9udC5zcGFjZVdpZHRoKCkgKyBt
X3N0eWxlLndvcmRTcGFjaW5nOwotICAgIHJldHVybiBuZXh0UG9zaXRpb247Ci19Ci0KLWZsb2F0
IFRleHRGcmFnbWVudEl0ZXJhdG9yOjp0ZXh0V2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
dG8sIGZsb2F0IHhQb3NpdGlvbikgY29uc3QKLXsKLSAgICBhdXRvJiBzZWdtZW50ID0gKm1fY3Vy
cmVudFNlZ21lbnQ7Ci0gICAgQVNTRVJUKHNlZ21lbnQuc3RhcnQgPD0gZnJvbSAmJiBmcm9tIDw9
IHNlZ21lbnQuZW5kICYmIHNlZ21lbnQuc3RhcnQgPD0gdG8gJiYgdG8gPD0gc2VnbWVudC5lbmQp
OwotICAgIEFTU0VSVChpczxSZW5kZXJUZXh0PihzZWdtZW50LnJlbmRlcmVyKSk7Ci0gICAgaWYg
KCFtX3N0eWxlLmZvbnQuc2l6ZSgpIHx8IGZyb20gPT0gdG8pCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgdW5zaWduZWQgc2VnbWVudEZyb20gPSBzZWdtZW50LnRvU2VnbWVudFBvc2l0aW9uKGZy
b20pOwotICAgIHVuc2lnbmVkIHNlZ21lbnRUbyA9IHNlZ21lbnQudG9TZWdtZW50UG9zaXRpb24o
dG8pOwotICAgIGlmIChtX3N0eWxlLmZvbnQuaXNGaXhlZFBpdGNoKCkpCi0gICAgICAgIHJldHVy
biBkb3duY2FzdDxSZW5kZXJUZXh0PihzZWdtZW50LnJlbmRlcmVyKS53aWR0aChzZWdtZW50RnJv
bSwgc2VnbWVudFRvIC0gc2VnbWVudEZyb20sIG1fc3R5bGUuZm9udCwgeFBvc2l0aW9uLCBudWxs
cHRyLCBudWxscHRyKTsKLQotICAgIGJvb2wgbWVhc3VyZVdpdGhFbmRTcGFjZSA9IG1fc3R5bGUu
aGFzS2VybmluZ09yTGlnYXR1cmVzICYmIG1fc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlCi0gICAg
ICAgICYmIHNlZ21lbnRUbyA8IHNlZ21lbnQudGV4dC5sZW5ndGgoKSAmJiBzZWdtZW50LnRleHRb
c2VnbWVudFRvXSA9PSAnICc7Ci0gICAgaWYgKG1lYXN1cmVXaXRoRW5kU3BhY2UpCi0gICAgICAg
ICsrc2VnbWVudFRvOwotICAgIGZsb2F0IHdpZHRoID0gMDsKLSAgICBpZiAoc2VnbWVudC5jYW5V
c2VTaW1wbGlmaWVkVGV4dE1lYXN1cmluZykKLSAgICAgICAgd2lkdGggPSBtX3N0eWxlLmZvbnQu
d2lkdGhGb3JTaW1wbGVUZXh0KFN0cmluZ1ZpZXcoc2VnbWVudC50ZXh0KS5zdWJzdHJpbmcoc2Vn
bWVudEZyb20sIHNlZ21lbnRUbyAtIHNlZ21lbnRGcm9tKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IFRleHRSdW4gcnVuKFN0cmluZ1ZpZXcoc2VnbWVudC50ZXh0KS5zdWJzdHJpbmcoc2VnbWVudEZy
b20sIHNlZ21lbnRUbyAtIHNlZ21lbnRGcm9tKSwgeFBvc2l0aW9uKTsKLSAgICAgICAgaWYgKG1f
c3R5bGUudGFiV2lkdGgpCi0gICAgICAgICAgICBydW4uc2V0VGFiU2l6ZSh0cnVlLCBtX3N0eWxl
LnRhYldpZHRoKTsKLSAgICAgICAgd2lkdGggPSBtX3N0eWxlLmZvbnQud2lkdGgocnVuKTsKLSAg
ICB9Ci0gICAgaWYgKG1lYXN1cmVXaXRoRW5kU3BhY2UpCi0gICAgICAgIHdpZHRoIC09IChtX3N0
eWxlLmZvbnQuc3BhY2VXaWR0aCgpICsgbV9zdHlsZS53b3JkU3BhY2luZyk7Ci0gICAgcmV0dXJu
IHN0ZDo6bWF4PGZsb2F0PigwLCB3aWR0aCk7Ci19Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3Iu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50
SXRlcmF0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZjOWMzN2Q2M2NiLi4w
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQnJlYWtMaW5lcy5o
IgotI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlv
dXRGbG93Q29udGVudHMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJC
bG9ja0Zsb3c7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKLQotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlv
dXQgewotCi1jbGFzcyBUZXh0RnJhZ21lbnRJdGVyYXRvciAgewotcHVibGljOgotICAgIFRleHRG
cmFnbWVudEl0ZXJhdG9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYpOwotICAgIGNsYXNzIFRleHRG
cmFnbWVudCB7Ci0gICAgcHVibGljOgotICAgICAgICBlbnVtIFR5cGUgeyBJbnZhbGlkLCBDb250
ZW50RW5kLCBTb2Z0TGluZUJyZWFrLCBIYXJkTGluZUJyZWFrLCBXaGl0ZXNwYWNlLCBOb25XaGl0
ZXNwYWNlIH07Ci0gICAgICAgIFRleHRGcmFnbWVudCgpID0gZGVmYXVsdDsKLSAgICAgICAgVGV4
dEZyYWdtZW50KHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGZsb2F0IHdpZHRoLCBUeXBl
IHR5cGUsIGJvb2wgaXNMYXN0SW5SZW5kZXJlciA9IGZhbHNlLCBib29sIG92ZXJsYXBzVG9OZXh0
UmVuZGVyZXIgPSBmYWxzZSwgYm9vbCBpc0NvbGxhcHNlZCA9IGZhbHNlLCBib29sIGlzQ29sbGFw
c2libGUgPSBmYWxzZSkKLSAgICAgICAgICAgIDogbV9zdGFydChzdGFydCkKLSAgICAgICAgICAg
ICwgbV9lbmQoZW5kKQotICAgICAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQotICAgICAgICAgICAg
LCBtX3R5cGUodHlwZSkKLSAgICAgICAgICAgICwgbV9pc0xhc3RJblJlbmRlcmVyKGlzTGFzdElu
UmVuZGVyZXIpCi0gICAgICAgICAgICAsIG1fb3ZlcmxhcHNUb05leHRSZW5kZXJlcihvdmVybGFw
c1RvTmV4dFJlbmRlcmVyKQotICAgICAgICAgICAgLCBtX2lzQ29sbGFwc2VkKGlzQ29sbGFwc2Vk
KQotICAgICAgICAgICAgLCBtX2lzQ29sbGFwc2libGUoaXNDb2xsYXBzaWJsZSkKLSAgICAgICAg
ewotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlICE9IEludmFsaWQ7IH0KLSAgICAgICAgdW5zaWduZWQgc3RhcnQoKSBjb25zdCB7IHJldHVy
biBtX3N0YXJ0OyB9Ci0gICAgICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5k
OyB9Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgQVNTRVJUKG1fZW5kID49IG1f
c3RhcnQpOyByZXR1cm4gbV9lbmQgLSBtX3N0YXJ0OyB9Ci0gICAgICAgIGZsb2F0IHdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQotICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGU7IH0KLSAgICAgICAgYm9vbCBvdmVybGFwc1RvTmV4dFJlbmRlcmVyKCkgY29u
c3QgeyByZXR1cm4gbV9vdmVybGFwc1RvTmV4dFJlbmRlcmVyOyB9Ci0gICAgICAgIGJvb2wgaXNM
YXN0SW5SZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1faXNMYXN0SW5SZW5kZXJlcjsgfQotICAg
ICAgICBib29sIGlzTGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFNvZnRMaW5l
QnJlYWsgfHwgbV90eXBlID09IEhhcmRMaW5lQnJlYWs7IH0KLSAgICAgICAgYm9vbCBpc0NvbGxh
cHNlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb2xsYXBzZWQ7IH0KLSAgICAgICAgYm9vbCBpc0Nv
bGxhcHNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbGxhcHNpYmxlOyB9Ci0gICAgICAgIGJv
b2wgaGFzSHlwaGVuKCkgY29uc3QgeyByZXR1cm4gbV9oYXNIeXBoZW47IH0KLQotICAgICAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBzdGFydCgpID09IGVuZCgpICYmICFpc0xpbmVC
cmVhaygpOyB9Ci0gICAgICAgIFRleHRGcmFnbWVudCBzcGxpdCh1bnNpZ25lZCBzcGxpdFBvc2l0
aW9uLCBmbG9hdCBsZWZ0U2lkZVdpZHRoLCBmbG9hdCByaWdodFNpZGVXaWR0aCk7Ci0gICAgICAg
IFRleHRGcmFnbWVudCBzcGxpdFdpdGhIeXBoZW4odW5zaWduZWQgaHlwaGVuUG9zaXRpb24sIGZs
b2F0IGh5cGhlblN0cmluZ1dpZHRoLCBmbG9hdCBsZWZ0U2lkZVdpZHRoLCBmbG9hdCByaWdodFNp
ZGVXaWR0aCk7Ci0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0RnJhZ21lbnQmIG90
aGVyKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9zdGFydCA9PSBvdGhl
ci5tX3N0YXJ0Ci0gICAgICAgICAgICAgICAgJiYgbV9lbmQgPT0gb3RoZXIubV9lbmQKLSAgICAg
ICAgICAgICAgICAmJiBtX3dpZHRoID09IG90aGVyLm1fd2lkdGgKLSAgICAgICAgICAgICAgICAm
JiBtX3R5cGUgPT0gb3RoZXIubV90eXBlCi0gICAgICAgICAgICAgICAgJiYgbV9pc0xhc3RJblJl
bmRlcmVyID09IG90aGVyLm1faXNMYXN0SW5SZW5kZXJlcgotICAgICAgICAgICAgICAgICYmIG1f
b3ZlcmxhcHNUb05leHRSZW5kZXJlciA9PSBvdGhlci5tX292ZXJsYXBzVG9OZXh0UmVuZGVyZXIK
LSAgICAgICAgICAgICAgICAmJiBtX2lzQ29sbGFwc2VkID09IG90aGVyLm1faXNDb2xsYXBzZWQK
LSAgICAgICAgICAgICAgICAmJiBtX2lzQ29sbGFwc2libGUgPT0gb3RoZXIubV9pc0NvbGxhcHNp
YmxlCi0gICAgICAgICAgICAgICAgJiYgbV9oYXNIeXBoZW4gPT0gb3RoZXIubV9oYXNIeXBoZW47
Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHVuc2lnbmVkIG1fc3RhcnQgeyAw
IH07Ci0gICAgICAgIHVuc2lnbmVkIG1fZW5kIHsgMCB9OwotICAgICAgICBmbG9hdCBtX3dpZHRo
IHsgMCB9OwotICAgICAgICBUeXBlIG1fdHlwZSB7IEludmFsaWQgfTsKLSAgICAgICAgYm9vbCBt
X2lzTGFzdEluUmVuZGVyZXIgeyBmYWxzZSB9OwotICAgICAgICBib29sIG1fb3ZlcmxhcHNUb05l
eHRSZW5kZXJlciB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgbV9pc0NvbGxhcHNlZCB7IGZhbHNl
IH07Ci0gICAgICAgIGJvb2wgbV9pc0NvbGxhcHNpYmxlIHsgZmFsc2UgfTsKLSAgICAgICAgYm9v
bCBtX2hhc0h5cGhlbiB7IGZhbHNlIH07Ci0gICAgfTsKLSAgICBUZXh0RnJhZ21lbnQgbmV4dFRl
eHRGcmFnbWVudChmbG9hdCB4UG9zaXRpb24gPSAwKTsKLSAgICB2b2lkIHJldmVydFRvRW5kT2ZG
cmFnbWVudChjb25zdCBUZXh0RnJhZ21lbnQmKTsKLQotICAgIC8vIEZJWE1FOiBUaGVzZSBmdW5j
dGlvbnMgYmVsb3cgc2hvdWxkIGJlIGRlY291cGxlZCBmcm9tIHRoZSB0ZXh0IGl0ZXJhdG9yLgot
ICAgIGZsb2F0IHRleHRXaWR0aCh1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBlbmRQ
b3NpdGlvbiwgZmxvYXQgeFBvc2l0aW9uKSBjb25zdDsKLSAgICBPcHRpb25hbDx1bnNpZ25lZD4g
bGFzdEh5cGhlblBvc2l0aW9uKGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21l
bnQmIHJ1biwgdW5zaWduZWQgYmVmb3JlSW5kZXgpIGNvbnN0OwotCi0gICAgc3RydWN0IFN0eWxl
IHsKLSAgICAgICAgZXhwbGljaXQgU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmKTsKLQotICAgICAg
ICBjb25zdCBGb250Q2FzY2FkZSYgZm9udDsKLSAgICAgICAgVGV4dEFsaWduTW9kZSB0ZXh0QWxp
Z247Ci0gICAgICAgIGJvb2wgaGFzS2VybmluZ09yTGlnYXR1cmVzOwotICAgICAgICBib29sIGNv
bGxhcHNlV2hpdGVzcGFjZTsKLSAgICAgICAgYm9vbCBwcmVzZXJ2ZU5ld2xpbmU7Ci0gICAgICAg
IGJvb2wgd3JhcExpbmVzOwotICAgICAgICBib29sIGJyZWFrU3BhY2VzOwotICAgICAgICBib29s
IGJyZWFrQW55V29yZE9uT3ZlcmZsb3c7Ci0gICAgICAgIGJvb2wgYnJlYWtXb3JkT25PdmVyZmxv
dzsKLSAgICAgICAgYm9vbCBicmVha0ZpcnN0V29yZE9uT3ZlcmZsb3c7Ci0gICAgICAgIGJvb2wg
YnJlYWtOQlNQOwotICAgICAgICBib29sIGtlZXBBbGxXb3Jkc0ZvckNKSzsKLSAgICAgICAgZmxv
YXQgd29yZFNwYWNpbmc7Ci0gICAgICAgIFRhYlNpemUgdGFiV2lkdGg7Ci0gICAgICAgIGJvb2wg
c2hvdWxkSHlwaGVuYXRlOwotICAgICAgICBmbG9hdCBoeXBoZW5TdHJpbmdXaWR0aDsKLSAgICAg
ICAgdW5zaWduZWQgaHlwaGVuTGltaXRCZWZvcmU7Ci0gICAgICAgIHVuc2lnbmVkIGh5cGhlbkxp
bWl0QWZ0ZXI7Ci0gICAgICAgIEF0b21TdHJpbmcgbG9jYWxlOwotICAgICAgICBPcHRpb25hbDx1
bnNpZ25lZD4gaHlwaGVuTGltaXRMaW5lczsKLSAgICB9OwotICAgIGNvbnN0IFN0eWxlJiBzdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0KLQotcHJpdmF0ZToKLSAgICBUZXh0RnJhZ21l
bnQgZmluZE5leHRUZXh0RnJhZ21lbnQoZmxvYXQgeFBvc2l0aW9uKTsKLSAgICBlbnVtIFBvc2l0
aW9uVHlwZSB7IEJyZWFrYWJsZSwgTm9uV2hpdGVzcGFjZSB9OwotICAgIHVuc2lnbmVkIHNraXBU
b05leHRQb3NpdGlvbihQb3NpdGlvblR5cGUsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIGZsb2F0
JiB3aWR0aCwgZmxvYXQgeFBvc2l0aW9uLCBib29sJiBvdmVybGFwcGluZ0ZyYWdtZW50KTsKLSAg
ICBib29sIGlzU29mdExpbmVCcmVhayh1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7Ci0gICAgYm9v
bCBpc0hhcmRMaW5lQnJlYWsoY29uc3QgRmxvd0NvbnRlbnRzOjpJdGVyYXRvciYgc2VnbWVudCkg
Y29uc3Q7Ci0gICAgdW5zaWduZWQgbmV4dEJyZWFrYWJsZVBvc2l0aW9uKGNvbnN0IEZsb3dDb250
ZW50czo6U2VnbWVudCYsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24pOwotICAgIHVuc2lnbmVkIG5l
eHROb25XaGl0ZXNwYWNlUG9zaXRpb24oY29uc3QgRmxvd0NvbnRlbnRzOjpTZWdtZW50JiwgdW5z
aWduZWQgc3RhcnRQb3NpdGlvbik7Ci0KLSAgICBGbG93Q29udGVudHMgbV9mbG93Q29udGVudHM7
Ci0gICAgRmxvd0NvbnRlbnRzOjpJdGVyYXRvciBtX2N1cnJlbnRTZWdtZW50OwotICAgIExhenlM
aW5lQnJlYWtJdGVyYXRvciBtX2xpbmVCcmVha0l0ZXJhdG9yOwotICAgIGNvbnN0IFN0eWxlIG1f
c3R5bGU7Ci0gICAgdW5zaWduZWQgbV9wb3NpdGlvbiB7IDAgfTsKLSAgICBib29sIG1fYXRFbmRP
ZlNlZ21lbnQgeyBmYWxzZSB9OwotfTsKLQotaW5saW5lIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpU
ZXh0RnJhZ21lbnQgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6c3BsaXQodW5z
aWduZWQgc3BsaXRQb3NpdGlvbiwgZmxvYXQgbGVmdFNpZGVXaWR0aCwgZmxvYXQgcmlnaHRTaWRl
V2lkdGgpCi17Ci0gICAgYXV0byB1cGRhdGVGcmFnbWVudFByb3BlcnRpZXMgPSBbXSAoVGV4dEZy
YWdtZW50JiBmcmFnbWVudCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgZmxvYXQgd2lk
dGgpCi0gICAgewotICAgICAgICBmcmFnbWVudC5tX3N0YXJ0ID0gc3RhcnQ7Ci0gICAgICAgIGZy
YWdtZW50Lm1fZW5kID0gZW5kOwotICAgICAgICBmcmFnbWVudC5tX3dpZHRoID0gd2lkdGg7Ci0g
ICAgICAgIGlmIChmcmFnbWVudC5zdGFydCgpICsgMSA+IGZyYWdtZW50LmVuZCgpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBmcmFnbWVudC5tX2lzQ29sbGFwc2VkID0gZmFsc2U7Ci0g
ICAgfTsKLQotICAgIFRleHRGcmFnbWVudCByaWdodFNpZGUoKnRoaXMpOwotICAgIHVwZGF0ZUZy
YWdtZW50UHJvcGVydGllcygqdGhpcywgc3RhcnQoKSwgc3BsaXRQb3NpdGlvbiwgbGVmdFNpZGVX
aWR0aCk7Ci0gICAgdXBkYXRlRnJhZ21lbnRQcm9wZXJ0aWVzKHJpZ2h0U2lkZSwgc3BsaXRQb3Np
dGlvbiwgcmlnaHRTaWRlLmVuZCgpLCByaWdodFNpZGVXaWR0aCk7Ci0gICAgcmV0dXJuIHJpZ2h0
U2lkZTsKLX0KLQotaW5saW5lIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgVGV4
dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6c3BsaXRXaXRoSHlwaGVuKHVuc2lnbmVk
IGh5cGhlblBvc2l0aW9uLCBmbG9hdCBoeXBoZW5TdHJpbmdXaWR0aCwKLSAgICBmbG9hdCBsZWZ0
U2lkZVdpZHRoLCBmbG9hdCByaWdodFNpZGVXaWR0aCkKLXsKLSAgICBhdXRvIHJpZ2h0U2lkZSA9
IHNwbGl0KGh5cGhlblBvc2l0aW9uLCBsZWZ0U2lkZVdpZHRoLCByaWdodFNpZGVXaWR0aCk7Ci0g
ICAgbV9oYXNIeXBoZW4gPSB0cnVlOwotICAgIG1fd2lkdGggKz0gaHlwaGVuU3RyaW5nV2lkdGg7
Ci0gICAgcmV0dXJuIHJpZ2h0U2lkZTsKLX0KLQotaW5saW5lIGJvb2wgVGV4dEZyYWdtZW50SXRl
cmF0b3I6OmlzU29mdExpbmVCcmVhayh1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKLXsKLSAgICBj
b25zdCBhdXRvJiBzZWdtZW50ID0gKm1fY3VycmVudFNlZ21lbnQ7Ci0gICAgQVNTRVJUKHNlZ21l
bnQuc3RhcnQgPD0gcG9zaXRpb24gJiYgcG9zaXRpb24gPCBzZWdtZW50LmVuZCk7Ci0gICAgcmV0
dXJuIG1fc3R5bGUucHJlc2VydmVOZXdsaW5lICYmIHNlZ21lbnQudGV4dFtwb3NpdGlvbiAtIHNl
Z21lbnQuc3RhcnRdID09ICdcbic7Ci19Ci0KLWlubGluZSBib29sIFRleHRGcmFnbWVudEl0ZXJh
dG9yOjppc0hhcmRMaW5lQnJlYWsoY29uc3QgRmxvd0NvbnRlbnRzOjpJdGVyYXRvciYgc2VnbWVu
dCkgY29uc3QKLXsKLSAgICBBU1NFUlQoc2VnbWVudC0+c3RhcnQgIT0gc2VnbWVudC0+ZW5kIHx8
IChzZWdtZW50LT5zdGFydCA9PSBzZWdtZW50LT5lbmQgJiYgaXM8UmVuZGVyTGluZUJyZWFrPihz
ZWdtZW50LT5yZW5kZXJlcikpKTsKLSAgICByZXR1cm4gc2VnbWVudC0+c3RhcnQgPT0gc2VnbWVu
dC0+ZW5kOwotfQotCi19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
VGV4dFBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNw
cAppbmRleCBhNzBhODhlNmJhNDMuLjk1Y2U4N2Y5YTFkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvVGV4dFBhaW50ZXIuY3BwCkBAIC0yMjgsNyArMjI4LDYgQEAgdm9pZCBUZXh0UGFpbnRl
cjo6cGFpbnRSYW5nZShjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBGbG9hdFJlY3QmIGJv
eFJlY3QsIGMKIHZvaWQgVGV4dFBhaW50ZXI6OmNsZWFyR2x5cGhEaXNwbGF5TGlzdHMoKQogewog
ICAgIEdseXBoRGlzcGxheUxpc3RDYWNoZTxJbmxpbmVUZXh0Qm94Pjo6c2luZ2xldG9uKCkuY2xl
YXIoKTsKLSAgICBHbHlwaERpc3BsYXlMaXN0Q2FjaGU8U2ltcGxlTGluZUxheW91dDo6UnVuPjo6
c2luZ2xldG9uKCkuY2xlYXIoKTsKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5sYXlv
dXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxlZCgpKQogICAgICAgICBHbHlwaERp
c3BsYXlMaXN0Q2FjaGU8RGlzcGxheTo6UnVuPjo6c2luZ2xldG9uKCkuY2xlYXIoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5j
cHAKaW5kZXggNTFlZjIxZmEzYTU3Li44NWY4OGVmMjI4NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuY3BwCkBAIC0yNyw2
ICsyNyw3IEBACiAjaW5jbHVkZSAiTGluZUxheW91dFRyYXZlcnNhbC5oIgogCiAjaW5jbHVkZSAi
TGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTgxLDExICs4Miw2IEBAIHN0YXRpYyBjb25zdCBSZW5kZXJCbG9ja0Zsb3cqIGxpbmVMYXlv
dXRTeXN0ZW1GbG93Rm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0CiBUZXh0Qm94SXRlcmF0
b3IgZmlyc3RUZXh0Qm94Rm9yKGNvbnN0IFJlbmRlclRleHQmIHRleHQpCiB7CiAgICAgaWYgKGF1
dG8qIGZsb3cgPSBsaW5lTGF5b3V0U3lzdGVtRmxvd0ZvclJlbmRlcmVyKHRleHQpKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBzaW1wbGVMaW5lTGF5b3V0ID0gZmxvdy0+c2ltcGxlTGluZUxheW91dCgp
KSB7Ci0gICAgICAgICAgICBhdXRvIHJhbmdlID0gc2ltcGxlTGluZUxheW91dC0+cnVuUmVzb2x2
ZXIoKS5yYW5nZUZvclJlbmRlcmVyKHRleHQpOwotICAgICAgICAgICAgcmV0dXJuIHsgU2ltcGxl
UGF0aCB7IHJhbmdlLmJlZ2luKCksIHJhbmdlLmVuZCgpIH0gfTsKLSAgICAgICAgfQotCiAjaWYg
RU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAgICAgICAgIGlmIChhdXRvKiBsYXlv
dXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQgPSBmbG93LT5sYXlvdXRGb3JtYXR0aW5nQ29u
dGV4dExpbmVMYXlvdXQoKSkKICAgICAgICAgICAgIHJldHVybiBsYXlvdXRGb3JtYXR0aW5nQ29u
dGV4dExpbmVMYXlvdXQtPnRleHRCb3hlc0Zvcih0ZXh0KTsKQEAgLTEyOSwxMSArMTI1LDYgQEAg
Ym9vbCBFbGVtZW50Qm94SXRlcmF0b3I6OmF0RW5kKCkgY29uc3QKIEVsZW1lbnRCb3hJdGVyYXRv
ciBlbGVtZW50Qm94Rm9yKGNvbnN0IFJlbmRlckxpbmVCcmVhayYgcmVuZGVyRWxlbWVudCkKIHsK
ICAgICBpZiAoYXV0byogZmxvdyA9IGxpbmVMYXlvdXRTeXN0ZW1GbG93Rm9yUmVuZGVyZXIocmVu
ZGVyRWxlbWVudCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHNpbXBsZUxpbmVMYXlvdXQgPSBmbG93
LT5zaW1wbGVMaW5lTGF5b3V0KCkpIHsKLSAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBzaW1wbGVM
aW5lTGF5b3V0LT5ydW5SZXNvbHZlcigpLnJhbmdlRm9yUmVuZGVyZXIocmVuZGVyRWxlbWVudCk7
Ci0gICAgICAgICAgICByZXR1cm4geyBTaW1wbGVQYXRoKHJhbmdlLmJlZ2luKCksIHJhbmdlLmVu
ZCgpKSB9OwotICAgICAgICB9Ci0KICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKICAgICAgICAgaWYgKGF1dG8qIGxheW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dCA9
IGZsb3ctPmxheW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dCgpKQogICAgICAgICAgICAg
cmV0dXJuIGxheW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dC0+ZWxlbWVudEJveEZvcihy
ZW5kZXJFbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5l
L0xpbmVMYXlvdXRUcmF2ZXJzYWwuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xp
bmVMYXlvdXRUcmF2ZXJzYWwuaAppbmRleCBkNzMwNDk3NDE1M2IuLjAxZjY5ODk3ZDJlNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNh
bC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJz
YWwuaApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3guaCIKICNp
bmNsdWRlICJMaW5lTGF5b3V0VHJhdmVyc2FsQ29tcGxleFBhdGguaCIKICNpbmNsdWRlICJMaW5l
TGF5b3V0VHJhdmVyc2FsRGlzcGxheVJ1blBhdGguaCIKLSNpbmNsdWRlICJMaW5lTGF5b3V0VHJh
dmVyc2FsU2ltcGxlUGF0aC5oIgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTQ5LDggKzQ4LDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShMQVlPVVRf
Rk9STUFUVElOR19DT05URVhUKQogICAgICAgICBEaXNwbGF5UnVuUGF0aCwKICNlbmRpZgotICAg
ICAgICBDb21wbGV4UGF0aCwKLSAgICAgICAgU2ltcGxlUGF0aAorICAgICAgICBDb21wbGV4UGF0
aAogICAgID47CiAKICAgICBCb3goUGF0aFZhcmlhbnQmJik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxlUGF0aC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBh
dGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNkM2MyM2Y3MDk4Li4wMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZl
cnNhbFNpbXBsZVBhdGguaAorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkxpbmVMYXlvdXRUcmF2ZXJzYWwuaCIKLSNp
bmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotbmFtZXNwYWNlIExpbmVMYXlvdXRUcmF2ZXJzYWwgewotCi1jbGFzcyBTaW1wbGVQYXRoIHsK
LXB1YmxpYzoKLSAgICBTaW1wbGVQYXRoKFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJ
dGVyYXRvciBpdGVyYXRvciwgU2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9y
IGVuZCkKLSAgICAgICAgOiBtX2l0ZXJhdG9yKGl0ZXJhdG9yKQotICAgICAgICAsIG1fZW5kKGVu
ZCkKLSAgICB7IH0KLQotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gKCptX2l0
ZXJhdG9yKS5yZWN0KCk7IH0KLQotICAgIGZsb2F0IGJhc2VsaW5lKCkgY29uc3QgeyByZXR1cm4g
KCptX2l0ZXJhdG9yKS5iYXNlbGluZSgpOyB9Ci0KLSAgICBib29sIGlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgYm9vbCBpc0hvcml6b250YWwoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgYm9vbCBkaXJPdmVycmlkZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBpc0xpbmVCcmVhaygpIGNvbnN0IHsgcmV0dXJuICgqbV9p
dGVyYXRvcikuaXNMaW5lQnJlYWsoKTsgfQotCi0gICAgYm9vbCB1c2VMaW5lQnJlYWtCb3hSZW5k
ZXJUcmVlRHVtcFF1aXJrKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChtX2l0ZXJhdG9yLmF0
QmVnaW4oKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byBwcmV2aW91
cyA9IG1faXRlcmF0b3I7Ci0gICAgICAgIC0tcHJldmlvdXM7Ci0gICAgICAgIHJldHVybiAhKCpw
cmV2aW91cykuaXNFbmRPZkxpbmUoKTsKLSAgICB9Ci0KLSAgICBib29sIGhhc0h5cGhlbigpIGNv
bnN0IHsgcmV0dXJuICgqbV9pdGVyYXRvcikuaGFzSHlwaGVuKCk7IH0KLSAgICBTdHJpbmdWaWV3
IHRleHQoKSBjb25zdCB7IHJldHVybiAoKm1faXRlcmF0b3IpLnRleHQoKTsgfQotICAgIHVuc2ln
bmVkIGxvY2FsU3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiAoKm1faXRlcmF0b3IpLmxvY2Fs
U3RhcnQoKTsgfQotICAgIHVuc2lnbmVkIGxvY2FsRW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
KCptX2l0ZXJhdG9yKS5sb2NhbEVuZCgpOyB9Ci0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gKCptX2l0ZXJhdG9yKS5lbmQoKSAtICgqbV9pdGVyYXRvcikuc3RhcnQoKTsgfQot
Ci0gICAgYm9vbCBpc0xhc3RPbkxpbmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgYXV0byBuZXh0
ID0gbV9pdGVyYXRvcjsKLSAgICAgICAgKytuZXh0OwotICAgICAgICByZXR1cm4gbmV4dCA9PSBt
X2VuZCB8fCAoKm1faXRlcmF0b3IpLmxpbmVJbmRleCgpICE9ICgqbmV4dCkubGluZUluZGV4KCk7
Ci0gICAgfQotICAgIGJvb2wgaXNMYXN0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGF1dG8gbmV4
dCA9IG1faXRlcmF0b3I7Ci0gICAgICAgICsrbmV4dDsKLSAgICAgICAgcmV0dXJuIG5leHQgPT0g
bV9lbmQ7Ci0gICAgfTsKLQotICAgIHZvaWQgdHJhdmVyc2VOZXh0VGV4dEJveEluVmlzdWFsT3Jk
ZXIoKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjdXJyZW50bHkgb25seSB1
c2VkIGZvciBjb25zZWN1dGl2ZSB0ZXh0IHJ1bnMuCi0gICAgICAgICsrbV9pdGVyYXRvcjsKLSAg
ICB9Ci0gICAgdm9pZCB0cmF2ZXJzZU5leHRUZXh0Qm94SW5UZXh0T3JkZXIoKSB7ICB0cmF2ZXJz
ZU5leHRUZXh0Qm94SW5WaXN1YWxPcmRlcigpOyB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgU2ltcGxlUGF0aCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0b3IgPT0gb3RoZXIu
bV9pdGVyYXRvcjsgfQotICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdG9y
ID09IG1fZW5kOyB9Ci0KLXByaXZhdGU6Ci0gICAgU2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2
ZXI6Okl0ZXJhdG9yIG1faXRlcmF0b3I7Ci0gICAgU2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2
ZXI6Okl0ZXJhdG9yIG1fZW5kOwotfTsKLQotfQotfQo=
</data>
<flag name="review"
          id="425283"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="425293"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409583</attachid>
            <date>2020-09-24 09:11:29 -0700</date>
            <delta_ts>2020-09-25 06:16:28 -0700</delta_ts>
            <desc>patch</desc>
            <filename>lfc-win-enable-3.patch</filename>
            <type>text/plain</type>
            <size>226945</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwZjI4OTNlMTdiNzcuLmRhNDA1MzZjMTlhNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDgwIEBACisyMDIwLTA5LTI0ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmUgU2ltcGxlIExpbmUgTGF5b3V0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY5MTQKKworICAgICAgICBSZXZpZXdl
ZCBieSBTYW0gV2VpbmlnLgorCisgICAgICAgIEl0IGlzIGFscmVhZHkgZnVsbHkgY292ZXJlZCBi
eSBMRkMgYW5kIHNvIHVudXNlZC4gUmVtb3ZlIHRoZSBjb2RlLgorCisgICAgICAgICogSGVhZGVy
cy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWExvZ2dlci5j
cHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNl
Lmg6CisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAqIGxheW91
dC9WZXJpZmljYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojp2ZXJpZnlBbmRP
dXRwdXRTdWJ0cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6b3V0cHV0TWlzbWF0Y2hp
bmdTaW1wbGVMaW5lSW5mb3JtYXRpb25JZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5
b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHA6CisgICAgICAg
ICogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5jcHA6Cisg
ICAgICAgICogcmVuZGVyaW5nL0NvbXBsZXhMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBsZXhMaW5lTGF5b3V0OjpsYXlvdXRMaW5lQm94ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcGxleExpbmVMYXlvdXQ6OmFkZE92ZXJmbG93RnJvbUlubGluZUNoaWxkcmVuKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrRmxvdzo6bGF5b3V0SW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2tGbG93OjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9ja0Zsb3c6OmhpdFRlc3RJbmxpbmVDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9ja0Zsb3c6OmFkZE92ZXJmbG93RnJvbUlubGluZUNoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bWFya0xpbmVzRGlydHlJbkJsb2NrUmFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpmaXJzdExpbmVCYXNlbGluZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmlubGluZUJsb2NrQmFz
ZWxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjppbmxpbmVT
ZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bGluZUNv
dW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6cG9zaXRpb25G
b3JQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnBhaW50SW5saW5l
Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpoYXNMaW5lcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmludmFsaWRhdGVMaW5l
TGF5b3V0UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmVuc3VyZUxp
bmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6Om91dHB1dExpbmVU
cmVlQW5kTWFyayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6Omxh
eW91dFNpbXBsZUxpbmVzKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxv
Y2tGbG93Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6Omhhc1NpbXBsZUxp
bmVMYXlvdXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tG
bG93OjpzaW1wbGVMaW5lTGF5b3V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrRmxvdzo6c2ltcGxlTGluZUxheW91dCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckZyYWdtZW50ZWRGbG93OjpyZW1vdmVMaW5lRnJhZ21lbnRJbmZvKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojph
YnNvbHV0ZVF1YWRzRm9yUmFuZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4
dDo6cG9zaXRpb25Gb3JQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpzZXRU
ZXh0V2l0aE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojp1c2VzQ29tcGxl
eExpbmVMYXlvdXRQYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6Omxp
bmVzVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUZXh0Ojpjb2xsZWN0U2VsZWN0aW9uUmVjdHNGb3JMaW5lQm94ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dDo6c2ltcGxlTGluZUxheW91dCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxp
bmVMYXlvdXQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91
dENvdmVyYWdlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxh
eW91dENvdmVyYWdlLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXRGbG93Q29udGVudHMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRl
cmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVu
ZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFBhZ2luYXRpb24uaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRUZXh0RnJh
Z21lbnRJdGVyYXRvci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0UGFpbnRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UGFpbnRlcjo6Y2xlYXJHbHlwaERpc3BsYXlM
aXN0cyk6CisgICAgICAgICogcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpmaXJzdFRleHRCb3hGb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6ZWxlbWVudEJveEZvcik6
CisgICAgICAgICogcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmg6IFJlbW92
ZWQuCisKIDIwMjAtMDktMjMgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHByb3NwZWN0aXZlIEdUSyBidWlsZCBmaXggYWZ0ZXIg
cjI2NzQ0OS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3Vy
Y2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IDM4YzA2YjhiYmRjYy4uMGQyZTFkNmZhNmU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0MTYsMTUgKzE0MTYsMTAgQEAgc2V0KFdlYkNvcmVf
UFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuaAog
ICAgIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmgKICAgICByZW5kZXJpbmcvU2Nyb2xsQWxpZ25t
ZW50LmgKLSAgICByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5oCi0gICAgcmVuZGVyaW5nL1Np
bXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5oCi0gICAgcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRG
bG93Q29udGVudHMuaAotICAgIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaAog
CiAgICAgcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5oCiAgICAgcmVuZGVyaW5n
L2xpbmUvTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmgKICAgICByZW5kZXJpbmcvbGlu
ZS9MaW5lTGF5b3V0VHJhdmVyc2FsRGlzcGxheVJ1blBhdGguaAotICAgIHJlbmRlcmluZy9saW5l
L0xpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmgKICAgICByZW5kZXJpbmcvbGluZS9MaW5l
V2lkdGguaAogICAgIHJlbmRlcmluZy9saW5lL1RyYWlsaW5nT2JqZWN0cy5oCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKaW5kZXggYTQzZmI5NzFjMDAwLi42NDQ5M2JiN2EwNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0y
MTk5LDEzICsyMTk5LDYgQEAgcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCiByZW5kZXJpbmcvUmVu
ZGVyV2lkZ2V0LmNwcAogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCiByZW5kZXJpbmcvU2Ny
b2xsQWxpZ25tZW50LmNwcAotcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCi1yZW5kZXJp
bmcvU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNwcAotcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRGbG93Q29udGVudHMuY3BwCi1yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5j
cHAKLXJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5jcHAKLXJlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwCi1yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRl
eHRGcmFnbWVudEl0ZXJhdG9yLmNwcAogcmVuZGVyaW5nL1RhYmxlTGF5b3V0LmNwcAogcmVuZGVy
aW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHAKIHJlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCA4MWM2MTAzN2IyMWYuLmFhNzk0OTJjNGNhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzY5LDcgKzM2OSw2IEBA
CiAJCTBGRkQ0NUFBMjQzQzMwMjcwMDBENEJFQSAvKiBTY3JvbGxpbmdUcmVlTGF0Y2hpbmdDb250
cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkZENDVBNzI0M0JGMjU3MDAwRDRCRUEgLyogU2Nyb2xsaW5nVHJlZUxhdGNoaW5nQ29udHJvbGxl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
RkQ0RDYxMTg2NTFGQTMwMDUxMkY2RSAvKiBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZENEQ1RjE4NjUx
RkEzMDA1MTJGNkUgLyogQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTEwRkIwODRCMTRFMTVDN0UwMEEz
REI5OCAvKiBQdWJsaWNVUkxNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxMEZCMDg0QTE0RTE1QzdFMDBBM0RCOTggLyogUHVibGljVVJMTWFu
YWdlci5oICovOyB9OwotCQkxMTJCMzRENTFFNjBCOTgzMDBCQjMxMEEgLyogU2ltcGxlTGluZUxh
eW91dFBhZ2luYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDExMkIzNEQ0MUU2MEI5ODMwMEJCMzEwQSAvKiBTaW1wbGVMaW5lTGF5b3V0UGFnaW5h
dGlvbi5oICovOyB9OwogCQkxMTMxMENGMjIwQkE0QTMyMDA2NUE4RDAgLyogTGF5b3V0VHJlZUJ1
aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDEx
MTAwRkQ3MjA5NTE0REYwMDgxQUE2QyAvKiBMYXlvdXRUcmVlQnVpbGRlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTExMzEwQ0YzMjBCQTRBMzcw
MDY1QThEMCAvKiBMYXlvdXRSZXBsYWNlZEJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTExQzYxNTYyMEFEMUFFMTAwNUI4MkZBIC8qIExheW91dFJl
cGxhY2VkQm94LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMTEzMTBDRjQyMEJBNEEzRDAwNjVBOEQwIC8qIExheW91dEl0ZXJhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMTEwMEZDNzIwOTI3NjRD
MDA4MUFBNkMgLyogTGF5b3V0SXRlcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzkzLDcgKzM5Miw2IEBACiAJCTExOTlGQTQ2MjA4RTM1
QTMwMDIzNThDQyAvKiBMYXlvdXRDb250YWluZXJCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExOTlGQTQ0MjA4RTM1QTMwMDIzNThDQyAvKiBMYXlv
dXRDb250YWluZXJCb3guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkxMTk5RkE1QjIwOEUzQzdGMDAyMzU4Q0MgLyogRGlzcGxheUJveC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTE5OUZBNTkyMDhFM0M3
RjAwMjM1OENDIC8qIERpc3BsYXlCb3guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxMUNCMjc4OTIwM0JBNTcwMDA0QTFEQzkgLyogUmVuZGVyVHJl
ZUJ1aWxkZXJGdWxsU2NyZWVuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxMUNCMjc4NzIwM0JBNTcwMDA0QTFEQzkgLyogUmVuZGVyVHJlZUJ1aWxkZXJG
dWxsU2NyZWVuLmggKi87IH07Ci0JCTExRTA2N0VFMUU2MjQ2RTUwMDE2MkQxNiAvKiBTaW1wbGVM
aW5lTGF5b3V0Q292ZXJhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDExRTA2N0VEMUU2MjQ2RTUwMDE2MkQxNiAvKiBTaW1wbGVMaW5lTGF5b3V0Q292
ZXJhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxNDAwRDdBODE3MTM2RUE3MDA3N0NFMDUgLyogU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMEQ3QTcxNzEz
NkVBNzAwNzdDRTA1IC8qIFNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAzQjk5NzA5RUIxM0FGMDA3OTdD
N0YgLyogRE9NV2luZG93LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDAzQjk5NTA5RUIxM0FGMDA3OTdDN0YgLyogRE9NV2luZG93LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwM0JBMEYwOUVCMThG
OTAwNzk3QzdGIC8qIEpTRE9NV2luZG93LmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAzQkEwRTA5RUIxOEY4MDA3OTdDN0Yg
LyogSlNET01XaW5kb3cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMTg3Nyw5ICsxODc1LDcgQEAKIAkJNTgwMzcxNjQxQTY2RjFEMzAwQkFGNTE5
IC8qIExheWVyRnJhZ21lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU4MDM3MTYzMUE2NkYxRDMwMEJBRjUxOSAvKiBMYXllckZyYWdtZW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTgyNEFCQTMx
QUU4MTExNjAwOTA3NEI3IC8qIFJ1YnlFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODI0QUJBMTFBRTgxMTE2MDA5MDc0QjcgLyogUnVieUVs
ZW1lbnQuaCAqLzsgfTsKIAkJNTgyNEFCQTcxQUU4MTM4NDAwOTA3NEI3IC8qIFJ1YnlUZXh0RWxl
bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTgy
NEFCQTUxQUU4MTM4NDAwOTA3NEI3IC8qIFJ1YnlUZXh0RWxlbWVudC5oICovOyB9OwotCQk1ODJD
QjA1MzFBNzhBMTRCMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODJD
QjA1MjFBNzhBMTRCMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJh
dG9yLmggKi87IH07CiAJCTU4MkRFMzI1MUMzMEM4NTQwMEJFMDJBOCAvKiBUZXh0RGVjb3JhdGlv
blBhaW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU4MkRFMzIzMUMzMEM4NTQwMEJFMDJBOCAvKiBUZXh0RGVjb3JhdGlvblBhaW50ZXIuaCAqLzsg
fTsKLQkJNTg1RDZFMDQxQTFBNzkyRTAwRkE0RjEyIC8qIFNpbXBsZUxpbmVMYXlvdXRGbG93Q29u
dGVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4
NUQ2RTAyMUExQTc5MkUwMEZBNEYxMiAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTg5NTU2
RUQxOEQ0QTQ0MDAwNzY0QjAzIC8qIEJvcmRlckVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4OTU1NkVDMThENEE0NDAwMDc2NEIwMyAvKiBCb3Jk
ZXJFZGdlLmggKi87IH07CiAJCTU4QjJGOUY0MjIzMkQ0NTMwMDkzOEQ2MyAvKiBSZXNpemVPYnNl
cnZhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NThCMkY5RjMyMjMyRDQzRjAwOTM4RDYzIC8qIFJlc2l6ZU9ic2VydmF0aW9uLmggKi87IH07CiAJ
CTU4QjJGOUY1MjIzMkQ0NTgwMDkzOEQ2MyAvKiBSZXNpemVPYnNlcnZlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNThCMkY5RUMyMjMyRDQzQjAwOTM4
RDYzIC8qIFJlc2l6ZU9ic2VydmVyLmggKi87IH07CkBAIC00OTg1LDcgKzQ5ODEsNiBAQAogCQlF
NDI5NUZBNDEyQjA2MTRFMDBEMUFDRTAgLyogUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0Mjk1RkEzMTJCMDYxNEUw
MEQxQUNFMCAvKiBSZXNvdXJjZUxvYWRQcmlvcml0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0MkU3NkRDMUM3QUY3NzYwMEUzNjE0RCAvKiBT
dHlsZVVwZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTQyRTc2REIxQzdBRjc3NjAwRTM2MTREIC8qIFN0eWxlVXBkYXRlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQzMTA1QkIxNjc1MEYxNjAw
REIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0MzEwNUJBMTY3NTBGMTYwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2Fs
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRTQz
NDNEMjMyMzkyNzc4NDAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDM0M0QyMTIz
OTI3NzgzMDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDM0M0QyNTIzOTI3
NzkwMDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDM0M0QyNDIzOTI3NzhGMDBF
QkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQzQTAyM0IxN0VCMzcwQTAwNENE
RDI1IC8qIFJlbmRlckVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0M0EwMjNBMTdFQjM3MEEwMDRDREQyNSAvKiBSZW5kZXJFbGVtZW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQzQUY4
RTcxQUM1QjdFQzAwQ0E3MTdFIC8qIENhY2hlVmFsaWRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQUY4RTUxQUM1QjdERDAwQ0E3MTdFIC8q
IENhY2hlVmFsaWRhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC01MDQwLDcgKzUwMzUsNiBAQAogCQlFNDgxMzdCOTFEQjNCNTI2MDA1QzU5
QkYgLyogU3R5bGVWYWxpZGl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQ4MTM3QjgxREIzQjUyNjAwNUM1OUJGIC8qIFN0eWxlVmFsaWRpdHkuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDg0QTMz
RTIzMDU1MzI1MDA5QURFNkEgLyogTGluZUxheW91dFRyYXZlcnNhbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4NEEzM0IyMzA1NTMwMzAwOUFERTZB
IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlFNDg2M0NGRTIzODQyRTlFMDA5NzIxNTggLyogUnVsZURhdGEu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODYzQ0ZE
MjM4NDJFOUUwMDk3MjE1OCAvKiBSdWxlRGF0YS5oICovOyB9OwotCQlFNDg5NDRBMzE4MEI1N0Q4
MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4OTQ0QTExODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxp
bmVMYXlvdXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFNDk0NkVBRjE1NkU2NEREMDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDk0NkVBRDE1NkU2NERE
MDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5QkQ5RkExMzFGRDJFRDAwM0M1NkYwIC8qIENTU1Zh
bHVlUG9vbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTQ5QkQ5RjkxMzFGRDJFRDAwM0M1NkYwIC8qIENTU1ZhbHVlUG9vbC5oICovOyB9OwogCQlFNEE3
OTk1MjIwRUU0QjE0MDBDMTk1NjggLyogQ1NTUGFyc2VyQ29udGV4dC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBNzk5NEUyMEVFNEFFMTAwQzE5NTY4
IC8qIENTU1BhcnNlckNvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtNTA4MSw4ICs1MDc1LDYgQEAKIAkJRTRFOEI0RUMyMTZCNzlFNTAw
Qjg4MzREIC8qIFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEU4QjRFQTIxNkI3OUU1MDBCODgzNEQgLyog
U3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQuaCAqLzsgfTsKIAkJRTRFOEI0RjUyMTZCOTU2NTAw
Qjg4MzREIC8qIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RThCNEYyMjE2QjhCNjAwMEI4ODM0RCAvKiBGb250
Q2FzY2FkZURlc2NyaXB0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRTRFOTRENjEyMkZGMTU4QTAwREQxOTFGIC8qIENvbXBsZXhMaW5lTGF5
b3V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEEx
QUM3ODIyRkFGRDUwMDAxN0I3NUIgLyogQ29tcGxleExpbmVMYXlvdXQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlFNEU5QjExOTE4MTA5MTZGMDAz
QUNDREYgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEU5QjExODE4MTA5MTZGMDAzQUNDREYgLyogU2lt
cGxlTGluZUxheW91dFJlc29sdmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJRTRFOUIxMUQxODE0NTY5QzAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVM
YXlvdXRGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0RTlCMTFDMTgxNDU2OUMwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rp
b25zLmggKi87IH07CiAJCUU0RjlFRUYzMTU2REEwMDcwMEQyM0U3RSAvKiBTdHlsZVNoZWV0Q29u
dGVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
RjlFRUYxMTU2RDg0QzQwMEQyM0U3RSAvKiBTdHlsZVNoZWV0Q29udGVudHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNTE2Njk5MTIwRkY5OTE4
MDA5RDJDMjcgLyogTGlzdEJ1dHRvbkFycm93QDJ4LnBuZyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTUxNjY5OEYyMEZGOTkxNjAwOUQyQzI3IC8qIExp
c3RCdXR0b25BcnJvd0AyeC5wbmcgKi87IH07CiAJCUU1MTc2NzAzMjBCODhDMTQwMEQ0MTE2NyAv
KiBEYXRhTGlzdFN1Z2dlc3Rpb25JbmZvcm1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTUxNzY3MDIyMEI4OEMxNDAwRDQxMTY3IC8qIERhdGFM
aXN0U3VnZ2VzdGlvbkluZm9ybWF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTYwOTcsOCArNjA4OSw2IEBACiAJCTExMTAwRkQ3MjA5NTE0
REYwMDgxQUE2QyAvKiBMYXlvdXRUcmVlQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRU
cmVlQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMTFDNjE1NjIwQUQx
QUUxMDA1QjgyRkEgLyogTGF5b3V0UmVwbGFjZWRCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0
UmVwbGFjZWRCb3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTExQzYxNTcyMEFE
MUFFMTAwNUI4MkZBIC8qIExheW91dFJlcGxhY2VkQm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IExheW91dFJlcGxhY2VkQm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTEy
QjM0RDAxRTYwQjhBNzAwQkIzMTBBIC8qIFNpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRQYWdp
bmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTEyQjM0RDQxRTYwQjk4
MzAwQkIzMTBBIC8qIFNpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExMzQwOUQ3MjAzRTAzODAwMEM2NjkxNSAvKiBSZW5kZXJU
cmVlQnVpbGRlckNvbnRpbnVhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUcmVl
QnVpbGRlckNvbnRpbnVhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTEx
MzQwOUQ4MjAzRTAzODAwMEM2NjkxNSAvKiBSZW5kZXJUcmVlQnVpbGRlckNvbnRpbnVhdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJUcmVlQnVpbGRlckNvbnRpbnVhdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxMTNEMEI0RjFGOUZERDJCMDBGNjExQkIgLyogRnJhbWVW
aWV3TGF5b3V0Q29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGcmFtZVZpZXdMYXlvdXRD
b250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYxNDcsOCArNjEzNyw2
IEBACiAJCTExQ0IyNzg2MjAzQkE1NzAwMDRBMURDOSAvKiBSZW5kZXJUcmVlQnVpbGRlckZ1bGxT
Y3JlZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJGdWxsU2NyZWVu
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTFDQjI3ODcyMDNCQTU3MDAwNEEx
REM5IC8qIFJlbmRlclRyZWVCdWlsZGVyRnVsbFNjcmVlbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJUcmVlQnVpbGRlckZ1bGxTY3JlZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTFEMTlDMkUyMzE1OUJBRTAwOEYyNEQzIC8qIFRhYmxlRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRy
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUYWJsZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxMUUwNjdFQjFFNjI0NjEzMDAxNjJE
MTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTExRTA2N0VEMUU2MjQ2RTUwMDE2MkQxNiAvKiBTaW1wbGVMaW5l
TGF5b3V0Q292ZXJhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxl
TGluZUxheW91dENvdmVyYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExRkYw
MkQ1MjBCQTNDODEwMDgzRjI1QiAvKiBWZXJpZmljYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVmVyaWZpY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTJGNzVB
OUE4NkVBMDNEQUYyNEI3OTcxIC8qIElTT1Byb3RlY3Rpb25TeXN0ZW1TcGVjaWZpY0hlYWRlckJv
eC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJU09Qcm90ZWN0aW9uU3lzdGVt
U3BlY2lmaWNIZWFkZXJCb3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMEQ3
QTcxNzEzNkVBNzAwNzdDRTA1IC8qIFNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTE3MywxMyArOTE2MSw4IEBACiAJCTU4MjRBQkExMUFF
ODExMTYwMDkwNzRCNyAvKiBSdWJ5RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSdWJ5RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1ODI0
QUJBNDFBRTgxMzg0MDA5MDc0QjcgLyogUnVieVRleHRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJ1YnlUZXh0RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTU4MjRBQkE1MUFFODEzODQwMDkwNzRCNyAvKiBSdWJ5VGV4dEVs
ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUnVieVRleHRFbGVtZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU4MkNCMDUyMUE3OEExNEIwMEFGRkND
NCAvKiBTaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU4MkNCMDU0MUE3OEEyQjIwMEFGRkND
NCAvKiBTaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0
ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTgyREUzMjIxQzMwQzg1
NDAwQkUwMkE4IC8qIFRleHREZWNvcmF0aW9uUGFpbnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1ODJERTMyMzFDMzBDODU0MDBCRTAyQTggLyogVGV4dERlY29y
YXRpb25QYWludGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHREZWNv
cmF0aW9uUGFpbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1ODVENkRGQjFB
MTUzNTU2MDBGQTRGMTIgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU4NUQ2RTAxMUExQTc5MkUwMEZBNEYxMiAv
KiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk1ODVENkUwMjFBMUE3OTJFMDBGQTRGMTIgLyogU2ltcGxl
TGluZUxheW91dEZsb3dDb250ZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTU4ODRGRTU2MjI4MTNFMkQwMDQwQUZGNiAvKiBKU1Jlc2l6ZU9ic2VydmVyRW50cnlD
dXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNSZXNpemVP
YnNlcnZlckVudHJ5Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTg5
NTU2RUMxOEQ0QTQ0MDAwNzY0QjAzIC8qIEJvcmRlckVkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQm9yZGVyRWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1OEFFRTJGMzE4RDRCQ0NGMDAyMkU3RkUgLyogQm9yZGVyRWRnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCb3JkZXJFZGdlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE1ODM2LDcgKzE1ODE5LDYgQEAKIAkJRTQzMTA1QkExNjc1MEYxNjAw
REIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTm9kZVRyYXZlcnNhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDMxMkFC
NTI0QjMyNjU2MDA2NzgzNDkgLyogTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dEludGVncmF0aW9uUGFnaW5h
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MzEyQUI3MjRCMzI2NTYw
MDY3ODM0OSAvKiBMYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0MzQzRDIxMjM5Mjc3ODMwMEVCQkI2NiAvKiBMaW5lTGF5
b3V0VHJhdmVyc2FsU2ltcGxlUGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBMaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxlUGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFNDM0M0QyNDIzOTI3NzhGMDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbENv
bXBsZXhQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpbmVMYXlvdXRU
cmF2ZXJzYWxDb21wbGV4UGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDNB
MDIzQTE3RUIzNzBBMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUU0M0EwMjNDMTdFQjM3MTMwMDRDREQyNSAvKiBSZW5kZXJFbGVtZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckVsZW1lbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU5MjgsOCArMTU5MTAsNiBAQAogCQlFNDg0QTMz
RDIzMDU1MzAzMDA5QURFNkEgLyogTGluZUxheW91dFRyYXZlcnNhbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaW5lTGF5b3V0VHJhdmVyc2FsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ4NjNDRkEyMzg0MkU4NzAwOTcyMTU4IC8qIFJ1bGVE
YXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJ1bGVEYXRhLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ4NjNDRkQyMzg0MkU5RTAwOTcyMTU4
IC8qIFJ1bGVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJ1bGVEYXRh
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0ODk0NEEwMTgwQjU3RDgwMEYxNjVE
OCAvKiBTaW1wbGVMaW5lTGF5b3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNpbXBsZUxpbmVMYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlFNDg5NDRBMTE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUU0OTQ2RUFDMTU2RTY0REQwMEQzMjk3RiAvKiBTdHlsZVJ1bGVJ
bXBvcnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVSdWxl
SW1wb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ5NDZFQUQxNTZFNjRE
RDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdHlsZVJ1bGVJbXBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTQ5QkQ5RjkxMzFGRDJFRDAwM0M1NkYwIC8qIENTU1ZhbHVlUG9vbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDU1NWYWx1ZVBvb2wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE2MDE5LDkgKzE1OTk5LDYgQEAKIAkJRTRFOEI0RUQyMTZCNzlGNDAwQjg4MzRE
IC8qIFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRFOEI0RjAyMTZCOEI1RjAwQjg4MzREIC8qIEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Rm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUU0RThCNEYyMjE2QjhCNjAwMEI4ODM0RCAvKiBGb250Q2FzY2FkZURlc2NyaXB0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTRFOUIxMTgxODEwOTE2RjAwM0FDQ0RGIC8q
IFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRTRFOUIxMUExODE0NTY5MjAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlv
bnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlTGluZUxh
eW91dEZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0RTlCMTFD
MTgxNDU2OUMwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRGOUVFRjAxNTZEODRDNDAwRDIzRTdFIC8qIFN0
eWxlU2hlZXRDb250ZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTdHlsZVNoZWV0Q29udGVudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
NEY5RUVGMTE1NkQ4NEM0MDBEMjNFN0UgLyogU3R5bGVTaGVldENvbnRlbnRzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlU2hlZXRDb250ZW50cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFNEZCNEIzNTIzOUJFQjEwMDAzQzMzNkEgLyogRGlzcGxheUlu
bGluZUNvbnRlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlzcGxheUlubGluZUNvbnRlbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjkxMTgsMjAgKzI5MDk1LDYgQEAK
IAkJCQlBOENGRjVEQTBBMTU1QTA1MDAwQTQyMzQgLyogUm9vdElubGluZUJveC5oICovLAogCQkJ
CTVEOTI1QjY1MEY2NEQ0REQwMEI4NDdGMCAvKiBTY3JvbGxBbGlnbm1lbnQuY3BwICovLAogCQkJ
CTVEOTI1QjY2MEY2NEQ0REQwMEI4NDdGMCAvKiBTY3JvbGxBbGlnbm1lbnQuaCAqLywKLQkJCQlF
NDg5NDRBMDE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5jcHAgKi8sCi0JCQkJ
RTQ4OTQ0QTExODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCAqLywKLQkJCQkx
MUUwNjdFQjFFNjI0NjEzMDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNwcCAq
LywKLQkJCQkxMUUwNjdFRDFFNjI0NkU1MDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVy
YWdlLmggKi8sCi0JCQkJNTg1RDZFMDExQTFBNzkyRTAwRkE0RjEyIC8qIFNpbXBsZUxpbmVMYXlv
dXRGbG93Q29udGVudHMuY3BwICovLAotCQkJCTU4NUQ2RTAyMUExQTc5MkUwMEZBNEYxMiAvKiBT
aW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmggKi8sCi0JCQkJRTRFOUIxMUExODE0NTY5MjAw
M0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwICovLAotCQkJCUU0RTlCMTFD
MTgxNDU2OUMwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmggKi8sCi0JCQkJ
MTEyQjM0RDAxRTYwQjhBNzAwQkIzMTBBIC8qIFNpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmNw
cCAqLywKLQkJCQkxMTJCMzRENDFFNjBCOTgzMDBCQjMxMEEgLyogU2ltcGxlTGluZUxheW91dFBh
Z2luYXRpb24uaCAqLywKLQkJCQk1ODVENkRGQjFBMTUzNTU2MDBGQTRGMTIgLyogU2ltcGxlTGlu
ZUxheW91dFJlc29sdmVyLmNwcCAqLywKLQkJCQlFNEU5QjExODE4MTA5MTZGMDAzQUNDREYgLyog
U2ltcGxlTGluZUxheW91dFJlc29sdmVyLmggKi8sCi0JCQkJNTgyQ0IwNTQxQTc4QTJCMjAwQUZG
Q0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5jcHAgKi8sCi0JCQkJ
NTgyQ0IwNTIxQTc4QTE0QjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJ
dGVyYXRvci5oICovLAogCQkJCUUzMUNENzUwMjI5Rjc0OTUwMEZCREExOSAvKiBUYWJsZUxheW91
dC5jcHAgKi8sCiAJCQkJQThDRkYwNEMwQTE1NEYwOTAwMEE0MjM0IC8qIFRhYmxlTGF5b3V0Lmgg
Ki8sCiAJCQkJMEY1NERDRTMxODgxMDUxRDAwM0VFREJCIC8qIFRleHRBdXRvU2l6aW5nLmNwcCAq
LywKQEAgLTMwMjEzLDcgKzMwMTc2LDYgQEAKIAkJCQlFNDg0QTMzQjIzMDU1MzAzMDA5QURFNkEg
LyogTGluZUxheW91dFRyYXZlcnNhbC5oICovLAogCQkJCUU0MzQzRDI0MjM5Mjc3OEYwMEVCQkI2
NiAvKiBMaW5lTGF5b3V0VHJhdmVyc2FsQ29tcGxleFBhdGguaCAqLywKIAkJCQlFNDUxQzYyNzIz
OTI5M0VCMDA5OTMxOTAgLyogTGluZUxheW91dFRyYXZlcnNhbERpc3BsYXlSdW5QYXRoLmggKi8s
Ci0JCQkJRTQzNDNEMjEyMzkyNzc4MzAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxTaW1w
bGVQYXRoLmggKi8sCiAJCQkJRkZEQkMwNDYxODNEMjdCNzAwNDA3MTA5IC8qIExpbmVXaWR0aC5j
cHAgKi8sCiAJCQkJRkZEQkMwNDUxODNEMjdCNzAwNDA3MTA5IC8qIExpbmVXaWR0aC5oICovLAog
CQkJCUZGQUMzMEZEMTg0RkIxNDUwMDhDNEYxRSAvKiBUcmFpbGluZ09iamVjdHMuY3BwICovLApA
QCAtMzI3OTMsNyArMzI3NTUsNiBAQAogCQkJCUU0ODRBMzNFMjMwNTUzMjUwMDlBREU2QSAvKiBM
aW5lTGF5b3V0VHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDM0M0QyNTIzOTI3Nzkw
MDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFNDUxQzYyODIzOTI5M0VDMDA5OTMxOTAgLyogTGluZUxheW91dFRyYXZlcnNhbERp
c3BsYXlSdW5QYXRoLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDM0M0QyMzIzOTI3Nzg0MDBFQkJC
NjYgLyogTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZGREJDMDQ3MTgzRDI3QjcwMDQwNzEwOSAvKiBMaW5lV2lkdGguaCBpbiBIZWFkZXJzICovLAog
CQkJCUNCQTlEQzBCMURGNDRERjQwMDA1Njc1QyAvKiBMaW5rSGVhZGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTQzQjI2MzFEREQxNTIwMDAxNEZBQzYgLyogTGlua0ljb24uaCBpbiBIZWFkZXJz
ICovLApAQCAtMzM3OTIsMTMgKzMzNzUzLDYgQEAKIAkJCQk5MzMwOUVBMzA5OUVCNzhDMDA1NkU1
ODEgLyogU2hhcmVkVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCURGMTlFMkFDMjQ3NzJCQzEw
MDdCREFDQiAvKiBTaG91bGRSZWxheFRoaXJkUGFydHlDb29raWVCbG9ja2luZy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODM2MkU4QzEyMENFRjlDQjAwMjQ1ODg2IC8qIFNob3VsZFRyZWF0QXNDb250
aW51aW5nTG9hZC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQ4OTQ0QTMxODBCNTdEODAwRjE2NUQ4
IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTExRTA2N0VFMUU2MjQ2
RTUwMDE2MkQxNiAvKiBTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuaCBpbiBIZWFkZXJzICovLAot
CQkJCTU4NUQ2RTA0MUExQTc5MkUwMEZBNEYxMiAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRl
bnRzLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNEU5QjExRDE4MTQ1NjlDMDAzQUNDREYgLyogU2lt
cGxlTGluZUxheW91dEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTEyQjM0RDUxRTYw
Qjk4MzAwQkIzMTBBIC8qIFNpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmggaW4gSGVhZGVycyAq
LywKLQkJCQlFNEU5QjExOTE4MTA5MTZGMDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dFJlc29s
dmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk1ODJDQjA1MzFBNzhBMTRCMDBBRkZDQzQgLyogU2lt
cGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
MzE2RERGQjI0MEM2NEI0MDA5MzQwQUEgLyogU2ltcGxlUmFuZ2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCUM1QTFFQTdEMTUyQkNGMDgwMDREMDBCNiAvKiBTaW1wbGlmeU1hcmt1cENvbW1hbmQuaCBp
biBIZWFkZXJzICovLAogCQkJCTU3MkE3RjIxMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRD
bGljay5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYTG9nZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhMb2dn
ZXIuY3BwCmluZGV4IDY4MzliNjMxZjFhNS4uNGY1YzZiNWVjNTA3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYTG9nZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYTG9nZ2VyLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IkFYSXNvbGF0ZWRPYmplY3QuaCIKICNlbmRpZgogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIK
KyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oCmluZGV4IDdmMGY1
OTRmMTYxMi4uMjdjMzlkN2U5ZDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaApAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3Iu
aCIKICNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogCkBA
IC00MCw2ICs0MSwxMCBAQAogI2luY2x1ZGUgIkNPTVB0ci5oIgogI2VuZGlmCiAKKyNpZiBVU0Uo
QVRLKQorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKyNlbmRpZgorCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiBPQkpDX0NMQVNTIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyOwogdHlw
ZWRlZiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCBiNmEyN2Rk
ODc0YjIuLjVlNTgxNGQ3ZGY1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9y
LmNwcApAQCAtNTQsOSArNTQsNiBAQAogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGV4dEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgot
I2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXQuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0
RnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmgiCiAjaW5j
bHVkZSAiVGV4dEJvdW5kYXJpZXMuaCIKICNpbmNsdWRlICJUZXh0Q29udHJvbElubmVyRWxlbWVu
dHMuaCIKICNpbmNsdWRlICJUZXh0UGxhY2Vob2xkZXJFbGVtZW50LmgiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9WZXJpZmljYXRpb24uY3BwCmluZGV4IGI2MjkyOTA4M2ZhYy4uOTNlMDYxZjVmM2I1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcApAQCAtNzAsNDggKzcwLDYgQEAg
c3RhdGljIGJvb2wgYXJlRXNzZW50aWFsbHlFcXVhbChMYXlvdXRSZWN0IGEsIExheW91dFJlY3Qg
YikKICAgICAgICAgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChhLmhlaWdodCgpLCBiLmhlaWdodCgp
KTsKIH0KIAotc3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0Y2hpbmdTaW1wbGVMaW5lSW5mb3JtYXRp
b25JZk5lZWRlZChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRT
dGF0ZSwgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBibG9ja0Zsb3csIGNvbnN0IENvbnRhaW5lckJv
eCYgaW5saW5lRm9ybWF0dGluZ1Jvb3QpCi17Ci0gICAgYXV0byogbGluZUxheW91dERhdGEgPSBi
bG9ja0Zsb3cuc2ltcGxlTGluZUxheW91dCgpOwotICAgIGlmICghbGluZUxheW91dERhdGEpIHsK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIGF1dG8mIGlubGluZUZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlLmVzdGFi
bGlzaGVkRm9ybWF0dGluZ1N0YXRlKGlubGluZUZvcm1hdHRpbmdSb290KTsKLSAgICBhdXRvJiBs
aW5lUnVucyA9IGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4oaW5saW5lRm9ybWF0dGlu
Z1N0YXRlKS5saW5lUnVucygpOwotCi0gICAgaWYgKGxpbmVSdW5zLnNpemUoKSAhPSBsaW5lTGF5
b3V0RGF0YS0+cnVuQ291bnQoKSkgewotICAgICAgICBzdHJlYW0gPDwgIk1pc21hdGNoaW5nIG51
bWJlciBvZiBydW5zOiBzaW1wbGUgcnVucygiIDw8IGxpbmVMYXlvdXREYXRhLT5ydW5Db3VudCgp
IDw8ICIpIGlubGluZSBydW5zKCIgPDwgbGluZVJ1bnMuc2l6ZSgpIDw8ICIpIjsKLSAgICAgICAg
c3RyZWFtLm5leHRMaW5lKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGF1
dG8gbWlzbWF0Y2hlZCA9IGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaW5l
TGF5b3V0RGF0YS0+cnVuQ291bnQoKTsgKytpKSB7Ci0gICAgICAgIGF1dG8mIHNpbXBsZVJ1biA9
IGxpbmVMYXlvdXREYXRhLT5ydW5BdChpKTsKLSAgICAgICAgYXV0byYgbGluZVJ1biA9IGxpbmVS
dW5zW2ldOwotICAgICAgICBhdXRvIG1hdGNoaW5nUnVucyA9IGFyZUVzc2VudGlhbGx5RXF1YWwo
c2ltcGxlUnVuLmxvZ2ljYWxMZWZ0LCBsaW5lUnVuLmxvZ2ljYWxMZWZ0KCkpICYmIGFyZUVzc2Vu
dGlhbGx5RXF1YWwoc2ltcGxlUnVuLmxvZ2ljYWxSaWdodCwgbGluZVJ1bi5sb2dpY2FsUmlnaHQo
KSk7Ci0gICAgICAgIGlmIChtYXRjaGluZ1J1bnMgJiYgbGluZVJ1bi50ZXh0KCkpIHsKLSAgICAg
ICAgICAgIG1hdGNoaW5nUnVucyA9IHNpbXBsZVJ1bi5zdGFydCA9PSBsaW5lUnVuLnRleHQoKS0+
c3RhcnQoKSAmJiBzaW1wbGVSdW4uZW5kID09IGxpbmVSdW4udGV4dCgpLT5lbmQoKTsKLSAgICAg
ICAgICAgIC8vIFNMTCBoYW5kbGVzIHN0cmluZ3MgaW4gYSBtb3JlIGNvbmNhdGVuYXRlZCBmb3Jt
YXQgPGRpdj5mb288YnI+YmFyPC9kaXY+IC0+IGZvbyAtPiAwLDMgYmFyIC0+IDMsNiB2cy4gMCwz
IGFuZCAwLDMKLSAgICAgICAgICAgIGlmICghbWF0Y2hpbmdSdW5zKQotICAgICAgICAgICAgICAg
IG1hdGNoaW5nUnVucyA9IChzaW1wbGVSdW4uZW5kIC0gc2ltcGxlUnVuLnN0YXJ0KSA9PSAobGlu
ZVJ1bi50ZXh0KCktPmVuZCgpIC0gbGluZVJ1bi50ZXh0KCktPnN0YXJ0KCkpOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChtYXRjaGluZ1J1bnMpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICBzdHJlYW0gPDwgIk1pc21hdGNoaW5nOiBzaW1wbGUgcnVuKCIgPDwgc2ltcGxlUnVuLnN0
YXJ0IDw8ICIsICIgPDwgc2ltcGxlUnVuLmVuZCA8PCAiKSAoIiA8PCBzaW1wbGVSdW4ubG9naWNh
bExlZnQgPDwgIiwgIiA8PCBzaW1wbGVSdW4ubG9naWNhbFJpZ2h0IDw8ICIpIjsKLSAgICAgICAg
c3RyZWFtIDw8ICIgaW5saW5lIHJ1biI7Ci0gICAgICAgIGlmIChsaW5lUnVuLnRleHQoKSkKLSAg
ICAgICAgICAgIHN0cmVhbSA8PCAiICgiIDw8IGxpbmVSdW4udGV4dCgpLT5zdGFydCgpIDw8ICIs
ICIgPDwgbGluZVJ1bi50ZXh0KCktPmVuZCgpIDw8ICIpIjsKLSAgICAgICAgc3RyZWFtIDw8ICIg
KCIgPDwgbGluZVJ1bi5sb2dpY2FsTGVmdCgpIDw8ICIsICIgPDwgbGluZVJ1bi5sb2dpY2FsVG9w
KCkgPDwgIikgKCIgPDwgbGluZVJ1bi5sb2dpY2FsV2lkdGgoKSA8PCAieCIgPDwgbGluZVJ1bi5s
b2dpY2FsSGVpZ2h0KCkgPDwgIikiOwotICAgICAgICBzdHJlYW0ubmV4dExpbmUoKTsKLSAgICAg
ICAgbWlzbWF0Y2hlZCA9IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBtaXNtYXRjaGVkOwotfQot
CiBzdGF0aWMgYm9vbCBjaGVja0Zvck1hdGNoaW5nTm9uVGV4dFJ1bnMoY29uc3QgTGluZVJ1biYg
bGluZVJ1biwgY29uc3QgV2ViQ29yZTo6SW5saW5lQm94JiBpbmxpbmVCb3gpCiB7CiAgICAgcmV0
dXJuIGFyZUVzc2VudGlhbGx5RXF1YWwoaW5saW5lQm94LmxlZnQoKSwgbGluZVJ1bi5sb2dpY2Fs
TGVmdCgpKQpAQCAtMzU5LDcgKzMxNyw3IEBAIHN0YXRpYyBib29sIHZlcmlmeUFuZE91dHB1dFN1
YnRyZWUoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBMYXlvdXRTdGF0ZSYgY29udGV4CiAKICAg
ICAgICAgICAgIGF1dG8mIGJsb2NrRmxvdyA9IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKmNo
aWxkUmVuZGVyZXIpOwogICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1Jvb3QgPSBkb3duY2Fz
dDxDb250YWluZXJCb3g+KCpjaGlsZExheW91dEJveCk7Ci0gICAgICAgICAgICBtaXNtdGFjaGlu
Z0dlb21ldHJ5IHw9IGJsb2NrRmxvdy5saW5lTGF5b3V0UGF0aCgpID09IFJlbmRlckJsb2NrRmxv
dzo6U2ltcGxlTGluZXNQYXRoID8gb3V0cHV0TWlzbWF0Y2hpbmdTaW1wbGVMaW5lSW5mb3JtYXRp
b25JZk5lZWRlZChzdHJlYW0sIGNvbnRleHQsIGJsb2NrRmxvdywgZm9ybWF0dGluZ1Jvb3QpIDog
b3V0cHV0TWlzbWF0Y2hpbmdDb21wbGV4TGluZUluZm9ybWF0aW9uSWZOZWVkZWQoc3RyZWFtLCBj
b250ZXh0LCBibG9ja0Zsb3csIGZvcm1hdHRpbmdSb290KTsKKyAgICAgICAgICAgIG1pc210YWNo
aW5nR2VvbWV0cnkgfD0gb3V0cHV0TWlzbWF0Y2hpbmdDb21wbGV4TGluZUluZm9ybWF0aW9uSWZO
ZWVkZWQoc3RyZWFtLCBjb250ZXh0LCBibG9ja0Zsb3csIGZvcm1hdHRpbmdSb290KTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGF1dG8gbWlzbWF0Y2hpbmdTdWJ0cmVlR2VvbWV0cnkg
PSB2ZXJpZnlBbmRPdXRwdXRTdWJ0cmVlKHN0cmVhbSwgY29udGV4dCwgZG93bmNhc3Q8UmVuZGVy
Qm94PigqY2hpbGRSZW5kZXJlciksICpjaGlsZExheW91dEJveCk7CiAgICAgICAgICAgICBtaXNt
dGFjaGluZ0dlb21ldHJ5IHw9IG1pc21hdGNoaW5nU3VidHJlZUdlb21ldHJ5OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGlu
ZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50
ZWdyYXRpb25MaW5lTGF5b3V0LmNwcAppbmRleCBmMjk5ODdkMjQzNTUuLjZjNmQwNmRlMTczZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVn
cmF0aW9uTGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0
aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHAKQEAgLTQ4LDcgKzQ4LDYgQEAKICNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dC5oIgog
I2luY2x1ZGUgIlRleHREZWNvcmF0aW9uUGFpbnRlci5oIgogI2luY2x1ZGUgIlRleHRQYWludGVy
LmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlv
dXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVn
cmF0aW9uL0xheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5jcHAKaW5kZXggODYyYjQ4YzhhOTU3
Li44ZmNiNGVhOTRjYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3Jh
dGlvbi9MYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uY3BwCkBAIC0z
MCw4ICszMCw2IEBACiAKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlJlbmRl
ckJsb2NrRmxvdy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXQuaCIKLSNpbmNsdWRlICJT
aW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVz
cGFjZSBMYXlvdXRJbnRlZ3JhdGlvbiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvQ29tcGxleExpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Nv
bXBsZXhMaW5lTGF5b3V0LmNwcAppbmRleCBlNWNjOTkyNmE2ZGEuLmU3ZDFlMzRlODBmNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbXBsZXhMaW5lTGF5b3V0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29tcGxleExpbmVMYXlvdXQuY3BwCkBAIC0x
Njk3LDggKzE2OTcsNiBAQCB2b2lkIENvbXBsZXhMaW5lTGF5b3V0OjpsaW5rVG9FbmRMaW5lSWZO
ZWVkZWQoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSkKIAogdm9pZCBDb21wbGV4TGluZUxh
eW91dDo6bGF5b3V0TGluZUJveGVzKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYg
cmVwYWludExvZ2ljYWxUb3AsIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsQm90dG9tKQogewot
ICAgIEFTU0VSVCghbV9mbG93LnNpbXBsZUxpbmVMYXlvdXQoKSk7Ci0KICAgICBtX2Zsb3cuc2V0
TG9naWNhbEhlaWdodChtX2Zsb3cuYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpKTsKICAgICAKICAg
ICAvLyBMYXkgb3V0IG91ciBoeXBvdGhldGljYWwgZ3JpZCBsaW5lIGFzIHRob3VnaCBpdCBvY2N1
cnMgYXQgdGhlIHRvcCBvZiB0aGUgYmxvY2suCkBAIC0yMTI4LDggKzIxMjYsNiBAQCBib29sIENv
bXBsZXhMaW5lTGF5b3V0OjptYXRjaGVkRW5kTGluZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0
YXRlLCBjb25zdCBJbmxpbgogCiB2b2lkIENvbXBsZXhMaW5lTGF5b3V0OjphZGRPdmVyZmxvd0Zy
b21JbmxpbmVDaGlsZHJlbigpCiB7Ci0gICAgQVNTRVJUKCFtX2Zsb3cuc2ltcGxlTGluZUxheW91
dCgpKTsKLQogICAgIExheW91dFVuaXQgZW5kUGFkZGluZyA9IG1fZmxvdy5oYXNPdmVyZmxvd0Ns
aXAoKSA/IG1fZmxvdy5wYWRkaW5nRW5kKCkgOiAwX2x1OwogICAgIC8vIEZJWE1FOiBOZWVkIHRv
IGZpbmQgYW5vdGhlciB3YXkgdG8gZG8gdGhpcywgc2luY2Ugc2Nyb2xsYmFycyBjb3VsZCBzaG93
IHdoZW4gd2UgZG9uJ3Qgd2FudCB0aGVtIHRvLgogICAgIGlmICghZW5kUGFkZGluZykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKaW5kZXggYjQzMDdkNzk1
YzcxLi5lYjEwYWVhYjg4NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0Zsb3cuY3BwCkBAIC01NCw5ICs1NCw2IEBACiAjaW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxk
ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNp
bmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGlu
ZUxheW91dFBhZ2luYXRpb24uaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIu
aCIKICNpbmNsdWRlICJUZXh0QXV0b1NpemluZy5oIgogI2luY2x1ZGUgIlZlcnRpY2FsUG9zaXRp
b25DYWNoZS5oIgogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgpAQCAtNjY5LDI2ICs2NjYs
MTYgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dEJsb2NrQ2hpbGRyZW4oYm9vbCByZWxh
eW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiBtYXgKIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlv
dXRJbmxpbmVDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIHJlcGFp
bnRMb2dpY2FsVG9wLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbEJvdHRvbSkKIHsKICAgICBh
dXRvIGNvbXB1dGVMaW5lTGF5b3V0UGF0aCA9IFsmXSB7Ci0gICAgICAgIGJvb2wgaXNJbnRlZ3Jh
dGlvbkVuYWJsZWQgPSBmYWxzZTsKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKICAgICAgICAgaWYgKExheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0OjpjYW5Vc2VGb3Io
KnRoaXMpKQogICAgICAgICAgICAgcmV0dXJuIExheW91dEZvcm1hdHRpbmdDb250ZXh0UGF0aDsK
LSAgICAgICAgaXNJbnRlZ3JhdGlvbkVuYWJsZWQgPSBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxh
eW91dDo6aXNFbmFibGVkKCk7CiAjZW5kaWYKLSAgICAgICAgaWYgKCFpc0ludGVncmF0aW9uRW5h
YmxlZCAmJiBTaW1wbGVMaW5lTGF5b3V0OjpjYW5Vc2VGb3IoKnRoaXMpKQotICAgICAgICAgICAg
cmV0dXJuIFNpbXBsZUxpbmVzUGF0aDsKLQogICAgICAgICByZXR1cm4gTGluZUJveGVzUGF0aDsK
ICAgICB9OwogCiAgICAgaWYgKGxpbmVMYXlvdXRQYXRoKCkgPT0gVW5kZXRlcm1pbmVkUGF0aCkK
ICAgICAgICAgc2V0TGluZUxheW91dFBhdGgoY29tcHV0ZUxpbmVMYXlvdXRQYXRoKCkpOwogCi0g
ICAgaWYgKGxpbmVMYXlvdXRQYXRoKCkgPT0gU2ltcGxlTGluZXNQYXRoKSB7Ci0gICAgICAgIGxh
eW91dFNpbXBsZUxpbmVzKHJlbGF5b3V0Q2hpbGRyZW4sIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBh
aW50TG9naWNhbEJvdHRvbSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICNpZiBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKICAgICBpZiAobGluZUxheW91dFBhdGgoKSA9PSBM
YXlvdXRGb3JtYXR0aW5nQ29udGV4dFBhdGgpIHsKICAgICAgICAgbGF5b3V0TEZDTGluZXMocmVs
YXlvdXRDaGlsZHJlbiwgcmVwYWludExvZ2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsK
QEAgLTIxMDgsOCArMjA5NSw2IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpzdHlsZURpZENoYW5n
ZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sCiAgICAgICAgIGF1
dG8gc2hvdWxkSW52YWxpZGF0ZUxpbmVMYXlvdXRQYXRoID0gWyZdIHsKICAgICAgICAgICAgIGlm
IChzZWxmTmVlZHNMYXlvdXQoKSB8fCBjb21wbGV4TGluZUxheW91dCgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKHNpbXBsZUxpbmVMYXlvdXQoKSAmJiAh
U2ltcGxlTGluZUxheW91dDo6Y2FuVXNlRm9yQWZ0ZXJTdHlsZUNoYW5nZSgqdGhpcywgZGlmZikp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRU
SU5HX0NPTlRFWFQpCiAgICAgICAgICAgICBpZiAobGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5l
TGF5b3V0KCkgJiYgIUxheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0OjpjYW5Vc2VGb3JBZnRl
clN0eWxlQ2hhbmdlKCp0aGlzLCBkaWZmKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTI5ODksOSArMjk3NCw2IEBAIGJvb2wgUmVuZGVyQmxvY2tGbG93OjpoaXRUZXN0SW5saW5l
Q2hpbGRyZW4oY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlCiB7CiAgICAgQVNT
RVJUKGNoaWxkcmVuSW5saW5lKCkpOwogCi0gICAgaWYgKHNpbXBsZUxpbmVMYXlvdXQoKSkKLSAg
ICAgICAgcmV0dXJuIFNpbXBsZUxpbmVMYXlvdXQ6OmhpdFRlc3RGbG93KCp0aGlzLCAqc2ltcGxl
TGluZUxheW91dCgpLCByZXF1ZXN0LCByZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKTsKLQogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFU
VElOR19DT05URVhUKQogICAgIGlmIChsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQo
KSkKICAgICAgICAgcmV0dXJuIGxheW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dCgpLT5o
aXRUZXN0KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRP
ZmZzZXQsIGhpdFRlc3RBY3Rpb24pOwpAQCAtMzAwMiwxMiArMjk4NCw2IEBAIGJvb2wgUmVuZGVy
QmxvY2tGbG93OjpoaXRUZXN0SW5saW5lQ2hpbGRyZW4oY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlCiAKIHZvaWQgUmVuZGVyQmxvY2tGbG93OjphZGRPdmVyZmxvd0Zyb21Jbmxp
bmVDaGlsZHJlbigpCiB7Ci0gICAgaWYgKGF1dG8gc2ltcGxlTGluZUxheW91dCA9IHRoaXMtPnNp
bXBsZUxpbmVMYXlvdXQoKSkgewotICAgICAgICBBU1NFUlQoIWhhc092ZXJmbG93Q2xpcCgpKTsK
LSAgICAgICAgU2ltcGxlTGluZUxheW91dDo6Y29sbGVjdEZsb3dPdmVyZmxvdygqdGhpcywgKnNp
bXBsZUxpbmVMYXlvdXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAjaWYgRU5BQkxFKExB
WU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAgICAgaWYgKGxheW91dEZvcm1hdHRpbmdDb250ZXh0
TGluZUxheW91dCgpKSB7CiAgICAgICAgIGxheW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91
dCgpLT5jb2xsZWN0T3ZlcmZsb3coKnRoaXMpOwpAQCAtMzA5NywxMSArMzA3Myw2IEBAIHZvaWQg
UmVuZGVyQmxvY2tGbG93OjptYXJrTGluZXNEaXJ0eUluQmxvY2tSYW5nZShMYXlvdXRVbml0IGxv
Z2ljYWxUb3AsIExheW91dFVuCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZsb2F0cyBjdXJy
ZW50bHkgYWZmZWN0IHRoZSBjaG9pY2Ugb2YgbGF5b3V0IHBhdGguCi0gICAgaWYgKHNpbXBsZUxp
bmVMYXlvdXQoKSkgewotICAgICAgICBpbnZhbGlkYXRlTGluZUxheW91dFBhdGgoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhU
KQogICAgIGlmIChsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKSkgewogICAgICAg
ICBpbnZhbGlkYXRlTGluZUxheW91dFBhdGgoKTsKQEAgLTMxMzgsOSArMzEwOSw2IEBAIE9wdGlv
bmFsPGludD4gUmVuZGVyQmxvY2tGbG93OjpmaXJzdExpbmVCYXNlbGluZSgpIGNvbnN0CiAgICAg
ICAgIHJldHVybiBmbG9vclRvSW50KGxheW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dCgp
LT5maXJzdExpbmVCYXNlbGluZSgpKTsKICNlbmRpZgogCi0gICAgaWYgKHNpbXBsZUxpbmVMYXlv
dXQoKSkKLSAgICAgICAgcmV0dXJuIHsgU2ltcGxlTGluZUxheW91dDo6Y29tcHV0ZUZsb3dGaXJz
dExpbmVCYXNlbGluZSgqdGhpcywgKnNpbXBsZUxpbmVMYXlvdXQoKSkgfTsKLQogICAgIEFTU0VS
VChmaXJzdFJvb3RCb3goKSk7CiAgICAgaWYgKHN0eWxlKCkuaXNGbGlwcGVkTGluZXNXcml0aW5n
TW9kZSgpKQogICAgICAgICByZXR1cm4gZmlyc3RSb290Qm94KCktPmxvZ2ljYWxUb3AoKSArIGZp
cnN0TGluZVN0eWxlKCkuZm9udE1ldHJpY3MoKS5kZXNjZW50KGZpcnN0Um9vdEJveCgpLT5iYXNl
bGluZVR5cGUoKSk7CkBAIC0zMTU0LDcgKzMxMjIsNyBAQCBPcHRpb25hbDxpbnQ+IFJlbmRlckJs
b2NrRmxvdzo6aW5saW5lQmxvY2tCYXNlbGluZShMaW5lRGlyZWN0aW9uTW9kZSBsaW5lRGlyZWN0
aQogCiAgICAgLy8gTm90ZSB0aGF0IGhlcmUgd2Ugb25seSB0YWtlIHRoZSBsZWZ0IGFuZCBib3R0
b20gaW50byBjb25zaWRlcmF0aW9uLiBPdXIgY2FsbGVyIHRha2VzIHRoZSByaWdodCBhbmQgdG9w
IGludG8gY29uc2lkZXJhdGlvbi4KICAgICBmbG9hdCBib3hIZWlnaHQgPSBsaW5lRGlyZWN0aW9u
ID09IEhvcml6b250YWxMaW5lID8gaGVpZ2h0KCkgKyBtX21hcmdpbkJveC5ib3R0b20oKSA6IHdp
ZHRoKCkgKyBtX21hcmdpbkJveC5sZWZ0KCk7Ci0gICAgZmxvYXQgbGFzdEJhc2VsaW5lOworICAg
IGZsb2F0IGxhc3RCYXNlbGluZSA9IDA7CiAgICAgaWYgKCFjaGlsZHJlbklubGluZSgpKSB7CiAg
ICAgICAgIE9wdGlvbmFsPGludD4gaW5saW5lQmxvY2tCYXNlbGluZSA9IFJlbmRlckJsb2NrOjpp
bmxpbmVCbG9ja0Jhc2VsaW5lKGxpbmVEaXJlY3Rpb24pOwogICAgICAgICBpZiAoIWlubGluZUJs
b2NrQmFzZWxpbmUpCkBAIC0zMTcwLDE5ICszMTM4LDE3IEBAIE9wdGlvbmFsPGludD4gUmVuZGVy
QmxvY2tGbG93OjppbmxpbmVCbG9ja0Jhc2VsaW5lKExpbmVEaXJlY3Rpb25Nb2RlIGxpbmVEaXJl
Y3RpCiAgICAgICAgICAgICAgICAgKyAobGluZURpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGluZSA/
IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpIDogYm9yZGVyUmlnaHQoKSArIHBhZGRpbmdSaWdo
dCgpKSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2ltcGxlTGluZUxheW91dCgpKQotICAg
ICAgICAgICAgbGFzdEJhc2VsaW5lID0gU2ltcGxlTGluZUxheW91dDo6Y29tcHV0ZUZsb3dMYXN0
TGluZUJhc2VsaW5lKCp0aGlzLCAqc2ltcGxlTGluZUxheW91dCgpKTsKLSNpZiBFTkFCTEUoTEFZ
T1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLSAgICAgICAgZWxzZSBpZiAobGF5b3V0Rm9ybWF0dGlu
Z0NvbnRleHRMaW5lTGF5b3V0KCkpCi0gICAgICAgICAgICBsYXN0QmFzZWxpbmUgPSBmbG9vclRv
SW50KGxheW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dCgpLT5sYXN0TGluZUJhc2VsaW5l
KCkpOwotI2VuZGlmCi0gICAgICAgIGVsc2UgeworICAgICAgICBpZiAoY29tcGxleExpbmVMYXlv
dXQoKSkgewogICAgICAgICAgICAgYm9vbCBpc0ZpcnN0TGluZSA9IGxhc3RSb290Qm94KCkgPT0g
Zmlyc3RSb290Qm94KCk7CiAgICAgICAgICAgICBjb25zdCBhdXRvJiBzdHlsZSA9IGlzRmlyc3RM
aW5lID8gZmlyc3RMaW5lU3R5bGUoKSA6IHRoaXMtPnN0eWxlKCk7CiAgICAgICAgICAgICAvLyBJ
bmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSW5CbG9ja0RpcmVjdGlvbiB3aWxsIGZsaXAgbGluZXMg
aW4gY2FzZSBvZiB2ZXJ0aWNhbExSIG1vZGUsIHNvIHdlIGNhbiBhc3N1bWUgdmVydGljYWxSTCBm
b3Igbm93LgogICAgICAgICAgICAgbGFzdEJhc2VsaW5lID0gc3R5bGUuZm9udE1ldHJpY3MoKS5h
c2NlbnQobGFzdFJvb3RCb3goKS0+YmFzZWxpbmVUeXBlKCkpCiAgICAgICAgICAgICAgICAgKyAo
c3R5bGUuaXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpID8gbG9naWNhbEhlaWdodCgpIC0gbGFz
dFJvb3RCb3goKS0+bG9naWNhbEJvdHRvbSgpIDogbGFzdFJvb3RCb3goKS0+bG9naWNhbFRvcCgp
KTsKICAgICAgICAgfQorI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorICAg
ICAgICBlbHNlIGlmIChsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKSkKKyAgICAg
ICAgICAgIGxhc3RCYXNlbGluZSA9IGZsb29yVG9JbnQobGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRM
aW5lTGF5b3V0KCktPmxhc3RMaW5lQmFzZWxpbmUoKSk7CisjZW5kaWYKICAgICB9CiAgICAgLy8g
QWNjb3JkaW5nIHRvIHRoZSBDU1Mgc3BlYyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS92aXN1
ZGV0Lmh0bWwsIHdlIHNob3VsZG4ndCBiZSBwZXJmb3JtaW5nIHRoaXMgbWluLCBidXQgc2hvdWxk
CiAgICAgLy8gaW5zdGVhZCBiZSByZXR1cm5pbmcgYm94SGVpZ2h0IGRpcmVjdGx5LiBIb3dldmVy
LCB3ZSBmZWVsIHRoYXQgYSBtaW4gaGVyZSBpcyBiZXR0ZXIgYmVoYXZpb3IgKGFuZCBpcyBjb25z
aXN0ZW50CkBAIC0zMjAwLDggKzMxNjYsNiBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6c2V0U2Vs
ZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUgc3RhdGUpCiBHYXBSZWN0cyBSZW5kZXJCbG9ja0Zs
b3c6OmlubGluZVNlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgY29uc3QgTGF5
b3V0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IExheW91dFNpemUmIG9m
ZnNldEZyb21Sb290QmxvY2ssCiAgICAgTGF5b3V0VW5pdCYgbGFzdExvZ2ljYWxUb3AsIExheW91
dFVuaXQmIGxhc3RMb2dpY2FsTGVmdCwgTGF5b3V0VW5pdCYgbGFzdExvZ2ljYWxSaWdodCwgY29u
c3QgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcyYgY2FjaGUsIGNvbnN0IFBhaW50SW5mbyog
cGFpbnRJbmZvKQogewotICAgIEFTU0VSVCghc2ltcGxlTGluZUxheW91dCgpKTsKLQogICAgIEdh
cFJlY3RzIHJlc3VsdDsKIAogICAgIGJvb2wgY29udGFpbnNTdGFydCA9IHNlbGVjdGlvblN0YXRl
KCkgPT0gSGlnaGxpZ2h0U3RhdGU6OlN0YXJ0IHx8IHNlbGVjdGlvblN0YXRlKCkgPT0gSGlnaGxp
Z2h0U3RhdGU6OkJvdGg7CkBAIC0zMzE3LDkgKzMyODEsNiBAQCBpbnQgUmVuZGVyQmxvY2tGbG93
OjpsaW5lQ291bnQoKSBjb25zdAogICAgICAgICBpZiAobGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRM
aW5lTGF5b3V0KCkpCiAgICAgICAgICAgICByZXR1cm4gbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRM
aW5lTGF5b3V0KCktPmxpbmVDb3VudCgpOwogI2VuZGlmCi0gICAgICAgIGlmIChzaW1wbGVMaW5l
TGF5b3V0KCkpCi0gICAgICAgICAgICByZXR1cm4gc2ltcGxlTGluZUxheW91dCgpLT5saW5lQ291
bnQoKTsKLQogICAgICAgICBpZiAoY29tcGxleExpbmVMYXlvdXQoKSkKICAgICAgICAgICAgIHJl
dHVybiBjb21wbGV4TGluZUxheW91dCgpLT5saW5lQ291bnQoKTsKIApAQCAtMzU3NSwxMCArMzUz
Niw4IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9uRm9yUG9pbnRX
aXRoSW5saW5lQ2hpbGRyZW4oY29uc3QgTGF5b3V0CiAKIFBvc2l0aW9uIFJlbmRlckJsb2NrRmxv
dzo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCiB7Ci0gICAgLy8g
RklYTUU6IEl0IHN1cHBvcnRzIHNpbmdsZSB0ZXh0IGNoaWxkIG9ubHkgKHdoaWNoIGlzIHRoZSBt
YWpvcml0eSBvZiBzaW1wbGUgbGluZSBsYXlvdXQgc3VwcG9ydGVkIGNvbnRlbnQgYXQgdGhpcyBw
b2ludCkuCi0gICAgaWYgKCFzaW1wbGVMaW5lTGF5b3V0KCkgfHwgZmlyc3RDaGlsZCgpICE9IGxh
c3RDaGlsZCgpIHx8ICFpczxSZW5kZXJUZXh0PihmaXJzdENoaWxkKCkpKQotICAgICAgICByZXR1
cm4gcG9zaXRpb25Gb3JQb2ludChwb2ludCwgbnVsbHB0cikuZGVlcEVxdWl2YWxlbnQoKTsKLSAg
ICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmZpcnN0Q2hpbGQoKSkucG9zaXRpb25Gb3JQ
b2ludChwb2ludCk7CisgICAgLy8gRklYTUU6IFRoaXMgZm9yY2VzIENvbXBsZXggTGluZSBMYXlv
dXQuCisgICAgcmV0dXJuIHBvc2l0aW9uRm9yUG9pbnQocG9pbnQsIG51bGxwdHIpLmRlZXBFcXVp
dmFsZW50KCk7CiB9CiAKIFZpc2libGVQb3NpdGlvbiBSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9u
Rm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50LCBjb25zdCBSZW5kZXJGcmFnbWVudENv
bnRhaW5lciopCkBAIC0zNjA5LDExICszNTY4LDYgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnBh
aW50SW5saW5lQ2hpbGRyZW4oUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW4K
ICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChhdXRvIHNpbXBsZUxpbmVMYXlvdXQgPSB0aGlzLT5z
aW1wbGVMaW5lTGF5b3V0KCkpIHsKLSAgICAgICAgU2ltcGxlTGluZUxheW91dDo6cGFpbnRGbG93
KCp0aGlzLCAqc2ltcGxlTGluZUxheW91dCwgcGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAoY29tcGxleExpbmVMYXlvdXQoKSkKICAgICAg
ICAgY29tcGxleExpbmVMYXlvdXQoKS0+bGluZUJveGVzKCkucGFpbnQodGhpcywgcGFpbnRJbmZv
LCBwYWludE9mZnNldCk7CiB9CkBAIC0zNjcxLDggKzM2MjUsNiBAQCBib29sIFJlbmRlckJsb2Nr
Rmxvdzo6aGFzTGluZXMoKSBjb25zdAogICAgIGlmIChsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExp
bmVMYXlvdXQoKSkKICAgICAgICAgcmV0dXJuIGxheW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxh
eW91dCgpLT5saW5lQ291bnQoKTsKICNlbmRpZgotICAgIGlmIChzaW1wbGVMaW5lTGF5b3V0KCkp
Ci0gICAgICAgIHJldHVybiBzaW1wbGVMaW5lTGF5b3V0KCktPmxpbmVDb3VudCgpOwogCiAgICAg
cmV0dXJuIGNvbXBsZXhMaW5lTGF5b3V0KCkgJiYgY29tcGxleExpbmVMYXlvdXQoKS0+bGluZUJv
eGVzKCkuZmlyc3RMaW5lQm94KCk7CiB9CkBAIC0zNjgyLDE1ICszNjM0LDExIEBAIHZvaWQgUmVu
ZGVyQmxvY2tGbG93OjppbnZhbGlkYXRlTGluZUxheW91dFBhdGgoKQogICAgIHN3aXRjaCAobGlu
ZUxheW91dFBhdGgoKSkgewogICAgIGNhc2UgVW5kZXRlcm1pbmVkUGF0aDoKICAgICBjYXNlIEZv
cmNlTGluZUJveGVzUGF0aDoKLSAgICAgICAgQVNTRVJUKCFzaW1wbGVMaW5lTGF5b3V0KCkpOwog
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBMaW5lQm94ZXNQYXRoOgotICAgICAgICBBU1NFUlQo
IXNpbXBsZUxpbmVMYXlvdXQoKSk7CiAgICAgICAgIHNldExpbmVMYXlvdXRQYXRoKFVuZGV0ZXJt
aW5lZFBhdGgpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBMYXlvdXRGb3JtYXR0aW5nQ29u
dGV4dFBhdGg6IC8vIEZJWE1FOiBOb3QgYWxsIGNsaWVudHMgb2YgaW52YWxpZGF0ZUxpbmVMYXlv
dXRQYXRoKCkgYWN0dWFsbHkgbmVlZCB0byB3aXBlIHRoZSBsYXlvdXQuCi0gICAgY2FzZSBTaW1w
bGVMaW5lc1BhdGg6Ci0gICAgICAgIC8vIFRoZSBzaW1wbGUgbGluZSBsYXlvdXQgbWF5IGhhdmUg
YmVjb21lIGludmFsaWQuCiAgICAgICAgIG1fbGluZUxheW91dCA9IFdURjo6TW9ub3N0YXRlKCk7
CiAgICAgICAgIHNldExpbmVMYXlvdXRQYXRoKFVuZGV0ZXJtaW5lZFBhdGgpOwogICAgICAgICBp
ZiAobmVlZHNMYXlvdXQoKSkKQEAgLTM3MDIsMzIgKzM2NTAsNiBAQCB2b2lkIFJlbmRlckJsb2Nr
Rmxvdzo6aW52YWxpZGF0ZUxpbmVMYXlvdXRQYXRoKCkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAotdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dFNpbXBsZUxpbmVzKGJvb2wgcmVs
YXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxUb3AsIExheW91dFVuaXQm
IHJlcGFpbnRMb2dpY2FsQm90dG9tKQotewotICAgIGJvb2wgbmVlZHNMYXlvdXQgPSBzZWxmTmVl
ZHNMYXlvdXQoKSB8fCByZWxheW91dENoaWxkcmVuIHx8ICFzaW1wbGVMaW5lTGF5b3V0KCk7Ci0g
ICAgaWYgKG5lZWRzTGF5b3V0KQotICAgICAgICBtX2xpbmVMYXlvdXQgPSBTaW1wbGVMaW5lTGF5
b3V0OjpjcmVhdGUoKnRoaXMpOwotCi0gICAgYXV0byYgc2ltcGxlTGluZUxheW91dCA9ICp0aGlz
LT5zaW1wbGVMaW5lTGF5b3V0KCk7Ci0KLSAgICBpZiAodmlldygpLmZyYW1lVmlldygpLmxheW91
dENvbnRleHQoKS5sYXlvdXRTdGF0ZSgpICYmIHZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250
ZXh0KCkubGF5b3V0U3RhdGUoKS0+aXNQYWdpbmF0ZWQoKSkgewotICAgICAgICBzaW1wbGVMaW5l
TGF5b3V0LnNldElzUGFnaW5hdGVkKCk7Ci0gICAgICAgIFNpbXBsZUxpbmVMYXlvdXQ6OmFkanVz
dExpbmVQb3NpdGlvbnNGb3JQYWdpbmF0aW9uKHNpbXBsZUxpbmVMYXlvdXQsICp0aGlzKTsKLSAg
ICB9Ci0KLSAgICBmb3IgKGF1dG8mIHJlbmRlcmVyIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2Jq
ZWN0PigqdGhpcykpIHsKLSAgICAgICAgaWYgKGlzPFJlbmRlclRleHQ+KHJlbmRlcmVyKSkKLSAg
ICAgICAgICAgIGRvd25jYXN0PFJlbmRlclRleHQ+KHJlbmRlcmVyKS5kZWxldGVMaW5lQm94ZXMo
KTsKLSAgICAgICAgcmVuZGVyZXIuY2xlYXJOZWVkc0xheW91dCgpOwotICAgIH0KLQotICAgIExh
eW91dFVuaXQgbGluZUxheW91dEhlaWdodCA9IFNpbXBsZUxpbmVMYXlvdXQ6OmNvbXB1dGVGbG93
SGVpZ2h0KCp0aGlzLCBzaW1wbGVMaW5lTGF5b3V0KTsKLSAgICBMYXlvdXRVbml0IGxpbmVMYXlv
dXRUb3AgPSBib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7Ci0gICAgcmVwYWludExvZ2ljYWxUb3Ag
PSBsaW5lTGF5b3V0VG9wOwotICAgIHJlcGFpbnRMb2dpY2FsQm90dG9tID0gbmVlZHNMYXlvdXQg
PyByZXBhaW50TG9naWNhbFRvcCArIGxpbmVMYXlvdXRIZWlnaHQgKyBib3JkZXJBbmRQYWRkaW5n
QWZ0ZXIoKSA6IHJlcGFpbnRMb2dpY2FsVG9wOwotICAgIHNldExvZ2ljYWxIZWlnaHQobGluZUxh
eW91dFRvcCArIGxpbmVMYXlvdXRIZWlnaHQgKyBib3JkZXJBbmRQYWRkaW5nQWZ0ZXIoKSk7Ci19
Ci0KICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIHZvaWQgUmVuZGVyQmxv
Y2tGbG93OjpsYXlvdXRMRkNMaW5lcyhib29sLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbFRv
cCwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxCb3R0b20pCiB7CkBAIC0zNzY4LDExICszNjkw
LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmVuc3VyZUxpbmVCb3hlcygpCiAgICAgaWYgKGNv
bXBsZXhMaW5lTGF5b3V0KCkgfHwgIWhhc0xpbmVMYXlvdXQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgYXV0byBzaW1wbGVMaW5lTGF5b3V0ID0gbWFrZVJlZlB0cih0aGlzLT5zaW1wbGVMaW5l
TGF5b3V0KCkpOwotCiAgICAgYm9vbCBuZWVkc1RvUGFnaW5hdGVDb21wbGV4TGluZXMgPSBbJl0g
ewotICAgICAgICBpZiAoc2ltcGxlTGluZUxheW91dCAmJiBzaW1wbGVMaW5lTGF5b3V0LT5pc1Bh
Z2luYXRlZCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAjaWYgRU5BQkxFKExBWU9VVF9G
T1JNQVRUSU5HX0NPTlRFWFQpCiAgICAgICAgIGlmIChsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExp
bmVMYXlvdXQoKSAmJiBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKS0+aXNQYWdp
bmF0ZWQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzc4MiwxMyArMzcwMCw2IEBA
IHZvaWQgUmVuZGVyQmxvY2tGbG93OjplbnN1cmVMaW5lQm94ZXMoKQogCiAgICAgbV9saW5lTGF5
b3V0ID0gbWFrZVVuaXF1ZTxDb21wbGV4TGluZUxheW91dD4oKnRoaXMpOwogCi0gICAgaWYgKHNp
bXBsZUxpbmVMYXlvdXQpIHsKLSAgICAgICAgaWYgKFNpbXBsZUxpbmVMYXlvdXQ6OmNhblVzZUZv
ckxpbmVCb3hUcmVlKCp0aGlzLCAqc2ltcGxlTGluZUxheW91dCkpIHsKLSAgICAgICAgICAgIFNp
bXBsZUxpbmVMYXlvdXQ6OmdlbmVyYXRlTGluZUJveFRyZWUoKnRoaXMsICpzaW1wbGVMaW5lTGF5
b3V0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQogICAgIGF1dG8m
IGNvbXBsZXhMaW5lTGF5b3V0ID0gKnRoaXMtPmNvbXBsZXhMaW5lTGF5b3V0KCk7CiAKICNpZiBB
U1NFUlRfRU5BQkxFRApAQCAtMzgyMiw5ICszNzMzLDYgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6
Om91dHB1dExpbmVUcmVlQW5kTWFyayhXVEY6OlRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgSW5s
aW4KIHsKICAgICBmb3IgKGNvbnN0IFJvb3RJbmxpbmVCb3gqIHJvb3QgPSBmaXJzdFJvb3RCb3go
KTsgcm9vdDsgcm9vdCA9IHJvb3QtPm5leHRSb290Qm94KCkpCiAgICAgICAgIHJvb3QtPm91dHB1
dExpbmVUcmVlQW5kTWFyayhzdHJlYW0sIG1hcmtlZEJveCwgZGVwdGgpOwotCi0gICAgaWYgKGF1
dG8gc2ltcGxlTGluZUxheW91dCA9IHRoaXMtPnNpbXBsZUxpbmVMYXlvdXQoKSkKLSAgICAgICAg
U2ltcGxlTGluZUxheW91dDo6b3V0cHV0TGluZUxheW91dEZvckZsb3coc3RyZWFtLCAqdGhpcywg
KnNpbXBsZUxpbmVMYXlvdXQsIGRlcHRoKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKaW5kZXggYTIxMjA3M2YwZDFhLi45YWZhOWU5YWNi
ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKQEAgLTI3
LDcgKzI3LDYgQEAKICNpbmNsdWRlICJMaW5lV2lkdGguaCIKICNpbmNsdWRlICJSZW5kZXJCbG9j
ay5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCb3hMaXN0LmgiCi0jaW5jbHVkZSAiU2ltcGxlTGlu
ZUxheW91dC5oIgogI2luY2x1ZGUgIlRyYWlsaW5nT2JqZWN0cy5oIgogI2luY2x1ZGUgPG1lbW9y
eT4KIApAQCAtMzQ0LDcgKzM0Myw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0xpbmVzKCkgY29u
c3Q7CiAgICAgdm9pZCBpbnZhbGlkYXRlTGluZUxheW91dFBhdGgoKSBmaW5hbDsKIAotICAgIGVu
dW0gTGluZUxheW91dFBhdGggeyBVbmRldGVybWluZWRQYXRoID0gMCwgU2ltcGxlTGluZXNQYXRo
LCBMaW5lQm94ZXNQYXRoLCBMYXlvdXRGb3JtYXR0aW5nQ29udGV4dFBhdGgsIEZvcmNlTGluZUJv
eGVzUGF0aCB9OworICAgIGVudW0gTGluZUxheW91dFBhdGggeyBVbmRldGVybWluZWRQYXRoID0g
MCwgTGluZUJveGVzUGF0aCwgTGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRQYXRoLCBGb3JjZUxpbmVC
b3hlc1BhdGggfTsKICAgICBMaW5lTGF5b3V0UGF0aCBsaW5lTGF5b3V0UGF0aCgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PExpbmVMYXlvdXRQYXRoPihyZW5kZXJCbG9ja0Zsb3dMaW5lTGF5
b3V0UGF0aCgpKTsgfQogICAgIHZvaWQgc2V0TGluZUxheW91dFBhdGgoTGluZUxheW91dFBhdGgg
cGF0aCkgeyBzZXRSZW5kZXJCbG9ja0Zsb3dMaW5lTGF5b3V0UGF0aChwYXRoKTsgfQogCkBAIC0z
NTksOCArMzU4LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBjb250YWluc05vblplcm9CaWRpTGV2
ZWwoKSBjb25zdDsKIAotICAgIGNvbnN0IFNpbXBsZUxpbmVMYXlvdXQ6OkxheW91dCogc2ltcGxl
TGluZUxheW91dCgpIGNvbnN0OwotICAgIFNpbXBsZUxpbmVMYXlvdXQ6OkxheW91dCogc2ltcGxl
TGluZUxheW91dCgpOwogICAgIGNvbnN0IENvbXBsZXhMaW5lTGF5b3V0KiBjb21wbGV4TGluZUxh
eW91dCgpIGNvbnN0OwogICAgIENvbXBsZXhMaW5lTGF5b3V0KiBjb21wbGV4TGluZUxheW91dCgp
OwogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQpAQCAtNTQzLDExICs1NDAs
OCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgYm9vbCBoYXNMaW5lTGF5b3V0KCkgY29uc3Q7
Ci0gICAgYm9vbCBoYXNTaW1wbGVMaW5lTGF5b3V0KCkgY29uc3Q7CiAgICAgYm9vbCBoYXNDb21w
bGV4TGluZUxheW91dCgpIGNvbnN0OwogCi0gICAgdm9pZCBsYXlvdXRTaW1wbGVMaW5lcyhib29s
IHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsVG9wLCBMYXlvdXRV
bml0JiByZXBhaW50TG9naWNhbEJvdHRvbSk7Ci0KICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJ
TkdfQ09OVEVYVCkKICAgICBib29sIGhhc0xheW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91
dCgpIGNvbnN0OwogICAgIHZvaWQgbGF5b3V0TEZDTGluZXMoYm9vbCByZWxheW91dENoaWxkcmVu
LCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbFRvcCwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2lj
YWxCb3R0b20pOwpAQCAtNTkyLDcgKzU4Niw2IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAg
VmFyaWFudDwKICAgICAgICAgV1RGOjpNb25vc3RhdGUsCi0gICAgICAgIFJlZjxTaW1wbGVMaW5l
TGF5b3V0OjpMYXlvdXQ+LAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQog
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ+LAog
I2VuZGlmCkBAIC02MjQsMjEgKzYxNyw2IEBAIGlubGluZSBDb21wbGV4TGluZUxheW91dCogUmVu
ZGVyQmxvY2tGbG93Ojpjb21wbGV4TGluZUxheW91dCgpCiAgICAgcmV0dXJuIGhhc0NvbXBsZXhM
aW5lTGF5b3V0KCkgPyBXVEY6OmdldDxzdGQ6OnVuaXF1ZV9wdHI8Q29tcGxleExpbmVMYXlvdXQ+
PihtX2xpbmVMYXlvdXQpLmdldCgpIDogbnVsbHB0cjsKIH0KIAotaW5saW5lIGJvb2wgUmVuZGVy
QmxvY2tGbG93OjpoYXNTaW1wbGVMaW5lTGF5b3V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxSZWY8U2ltcGxlTGluZUxheW91dDo6TGF5b3V0Pj4obV9saW5l
TGF5b3V0KTsKLX0KLQotaW5saW5lIGNvbnN0IFNpbXBsZUxpbmVMYXlvdXQ6OkxheW91dCogUmVu
ZGVyQmxvY2tGbG93OjpzaW1wbGVMaW5lTGF5b3V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFz
U2ltcGxlTGluZUxheW91dCgpID8gV1RGOjpnZXQ8UmVmPFNpbXBsZUxpbmVMYXlvdXQ6OkxheW91
dD4+KG1fbGluZUxheW91dCkucHRyKCkgOiBudWxscHRyOwotfQotCi1pbmxpbmUgU2ltcGxlTGlu
ZUxheW91dDo6TGF5b3V0KiBSZW5kZXJCbG9ja0Zsb3c6OnNpbXBsZUxpbmVMYXlvdXQoKQotewot
ICAgIHJldHVybiBoYXNTaW1wbGVMaW5lTGF5b3V0KCkgPyBXVEY6OmdldDxSZWY8U2ltcGxlTGlu
ZUxheW91dDo6TGF5b3V0Pj4obV9saW5lTGF5b3V0KS5wdHIoKSA6IG51bGxwdHI7Ci19Ci0KICNp
ZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIGlubGluZSBib29sIFJlbmRlckJs
b2NrRmxvdzo6aGFzTGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCkgY29uc3QKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudGVkRmxv
dy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRlZEZsb3cuY3Bw
CmluZGV4IDBkZDM4ZWMyZmQxMC4uNDJkYzE5MjA1M2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRlZEZsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudGVkRmxvdy5jcHAKQEAgLTQ1MCw3ICs0NTAsNyBA
QCB2b2lkIFJlbmRlckZyYWdtZW50ZWRGbG93OjpyZW1vdmVSZW5kZXJCb3hGcmFnbWVudEluZm8o
UmVuZGVyQm94JiBib3gpCiAKIHZvaWQgUmVuZGVyRnJhZ21lbnRlZEZsb3c6OnJlbW92ZUxpbmVG
cmFnbWVudEluZm8oY29uc3QgUmVuZGVyQmxvY2tGbG93JiBibG9ja0Zsb3cpCiB7Ci0gICAgaWYg
KCFtX2xpbmVUb0ZyYWdtZW50TWFwIHx8IGJsb2NrRmxvdy5saW5lTGF5b3V0UGF0aCgpID09IFNp
bXBsZUxpbmVzUGF0aCkKKyAgICBpZiAoIW1fbGluZVRvRnJhZ21lbnRNYXApCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGZvciAoYXV0byogY3VyciA9IGJsb2NrRmxvdy5maXJzdFJvb3RCb3goKTsg
Y3VycjsgY3VyciA9IGN1cnItPm5leHRSb290Qm94KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5jcHAKaW5kZXggZDQ2MTM2NjhhMjcyLi44ZTBlYjI3OGNjNGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNs
dWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVyZWREb2N1bWVudE1hcmtlci5oIgog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZ1bmN0aW9u
cy5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgi
CiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCkBAIC00NDMsMjMgKzQ0MiwxMyBAQCBWZWN0
b3I8RmxvYXRRdWFkPiBSZW5kZXJUZXh0OjphYnNvbHV0ZVF1YWRzRm9yUmFuZ2UodW5zaWduZWQg
c3RhcnQsIHVuc2lnbmVkIGVuZAogICAgIEFTU0VSVChzdGFydCA8PSBJTlRfTUFYKTsKICAgICBz
dGFydCA9IHN0ZDo6bWluKHN0YXJ0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSU5UX01BWCkpOwog
ICAgIGVuZCA9IHN0ZDo6bWluKGVuZCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElOVF9NQVgpKTsK
LSAgICBpZiAoc2ltcGxlTGluZUxheW91dCgpICYmICF1c2VTZWxlY3Rpb25IZWlnaHQpCi0gICAg
ICAgIHJldHVybiBjb2xsZWN0QWJzb2x1dGVRdWFkc0ZvclJhbmdlKCp0aGlzLCBzdGFydCwgZW5k
LCAqc2ltcGxlTGluZUxheW91dCgpLCBpZ25vcmVFbXB0eVRleHRTZWxlY3Rpb25zLCB3YXNGaXhl
ZCk7CisKICAgICBjb25zdF9jYXN0PFJlbmRlclRleHQmPigqdGhpcykuZW5zdXJlTGluZUJveGVz
KCk7CiAgICAgcmV0dXJuIG1fbGluZUJveGVzLmFic29sdXRlUXVhZHNGb3JSYW5nZSgqdGhpcywg
c3RhcnQsIGVuZCwgdXNlU2VsZWN0aW9uSGVpZ2h0LCBpZ25vcmVFbXB0eVRleHRTZWxlY3Rpb25z
LCB3YXNGaXhlZCk7CiB9CiAKIFBvc2l0aW9uIFJlbmRlclRleHQ6OnBvc2l0aW9uRm9yUG9pbnQo
Y29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQogewotICAgIGlmIChzaW1wbGVMaW5lTGF5b3V0KCkg
JiYgcGFyZW50KCktPmZpcnN0Q2hpbGQoKSA9PSBwYXJlbnQoKS0+bGFzdENoaWxkKCkpIHsKLSAg
ICAgICAgYXV0byBvZmZzZXQgPSBTaW1wbGVMaW5lTGF5b3V0Ojp0ZXh0T2Zmc2V0Rm9yUG9pbnQo
cG9pbnQsICp0aGlzLCAqc2ltcGxlTGluZUxheW91dCgpKTsKLSAgICAgICAgLy8gRGlkIG5vdCBm
aW5kIGEgdmFsaWQgb2Zmc2V0LiBGYWxsIGJhY2sgdG8gdGhlIG5vcm1hbCBsaW5lIGxheW91dCBi
YXNlZCBQb3NpdGlvbi4KLSAgICAgICAgaWYgKG9mZnNldCA9PSB0ZXh0KCkubGVuZ3RoKCkpCi0g
ICAgICAgICAgICByZXR1cm4gcG9zaXRpb25Gb3JQb2ludChwb2ludCwgbnVsbHB0cikuZGVlcEVx
dWl2YWxlbnQoKTsKLSAgICAgICAgYXV0byBwb3NpdGlvbiA9IFBvc2l0aW9uKHRleHROb2RlKCks
IG9mZnNldCk7Ci0gICAgICAgIEFTU0VSVChwb3NpdGlvbiA9PSBwb3NpdGlvbkZvclBvaW50KHBv
aW50LCBudWxscHRyKS5kZWVwRXF1aXZhbGVudCgpKTsKLSAgICAgICAgcmV0dXJuIHBvc2l0aW9u
OwotICAgIH0KICAgICByZXR1cm4gcG9zaXRpb25Gb3JQb2ludChwb2ludCwgbnVsbHB0cikuZGVl
cEVxdWl2YWxlbnQoKTsKIH0KIApAQCAtMTA3Niw3ICsxMDY1LDcgQEAgdm9pZCBSZW5kZXJUZXh0
OjpzZXRUZXh0V2l0aE9mZnNldChjb25zdCBTdHJpbmcmIG5ld1RleHQsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWcKICAgICBpbnQgZGVsdGEgPSBuZXdUZXh0Lmxlbmd0aCgpIC0gdGV4dCgpLmxlbmd0
aCgpOwogICAgIHVuc2lnbmVkIGVuZCA9IG9mZnNldCArIGxlbmd0aDsKIAotICAgIG1fbGluZXNE
aXJ0eSA9IHNpbXBsZUxpbmVMYXlvdXQoKSB8fCBtX2xpbmVCb3hlcy5kaXJ0eVJhbmdlKCp0aGlz
LCBvZmZzZXQsIGVuZCwgZGVsdGEpOworICAgIG1fbGluZXNEaXJ0eSA9IG1fbGluZUJveGVzLmRp
cnR5UmFuZ2UoKnRoaXMsIG9mZnNldCwgZW5kLCBkZWx0YSk7CiAKICAgICBzZXRUZXh0KG5ld1Rl
eHQsIGZvcmNlIHx8IG1fbGluZXNEaXJ0eSk7CiB9CkBAIC0xMzAwLDEzICsxMjg5LDYgQEAgdm9p
ZCBSZW5kZXJUZXh0OjplbnN1cmVMaW5lQm94ZXMoKQogICAgIGRvd25jYXN0PFJlbmRlckJsb2Nr
Rmxvdz4oKnBhcmVudCgpKS5lbnN1cmVMaW5lQm94ZXMoKTsKIH0KIAotY29uc3QgU2ltcGxlTGlu
ZUxheW91dDo6TGF5b3V0KiBSZW5kZXJUZXh0OjpzaW1wbGVMaW5lTGF5b3V0KCkgY29uc3QKLXsK
LSAgICBpZiAoIWlzPFJlbmRlckJsb2NrRmxvdz4oKnBhcmVudCgpKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKnBhcmVudCgp
KS5zaW1wbGVMaW5lTGF5b3V0KCk7Ci19Ci0KICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdf
Q09OVEVYVCkKIGNvbnN0IExheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0KiBSZW5kZXJUZXh0
OjpsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKSBjb25zdAogewpAQCAtMTMxOCw4
ICsxMzAwLDYgQEAgY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQqIFJlbmRlclRl
eHQ6OmxheW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW8KIAogYm9vbCBSZW5kZXJUZXh0Ojp1
c2VzQ29tcGxleExpbmVMYXlvdXRQYXRoKCkgY29uc3QKIHsKLSAgICBpZiAoc2ltcGxlTGluZUxh
eW91dCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRU
SU5HX0NPTlRFWFQpCiAgICAgaWYgKGxheW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzg4LDcgKzEzNjgsNiBAQCBJbnRSZWN0IFJl
bmRlclRleHQ6OmxpbmVzQm91bmRpbmdCb3goKSBjb25zdAogCiBMYXlvdXRSZWN0IFJlbmRlclRl
eHQ6OmxpbmVzVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJU
KCFzaW1wbGVMaW5lTGF5b3V0KCkpOwogICAgIHJldHVybiBtX2xpbmVCb3hlcy52aXN1YWxPdmVy
Zmxvd0JvdW5kaW5nQm94KCp0aGlzKTsKIH0KIApAQCAtMTQxMSw3ICsxMzkwLDYgQEAgTGF5b3V0
UmVjdCBSZW5kZXJUZXh0OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChjb25zdCBSZW5k
ZXJMYXllck1vZGVsT2JqZWMKIExheW91dFJlY3QgUmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlv
blJlY3RzRm9yTGluZUJveGVzKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRD
b250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQsIFZlY3RvcjxMYXlvdXRSZWN0Piog
cmVjdHMpCiB7CiAgICAgQVNTRVJUKCFuZWVkc0xheW91dCgpKTsKLSAgICBBU1NFUlQoIXNpbXBs
ZUxpbmVMYXlvdXQoKSk7CiAKICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBIaWdobGlnaHRT
dGF0ZTo6Tm9uZSkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dC5oCmluZGV4IDAwNzkzMjQ5NjJmNC4uMjkxZDE5NDdhNjdjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKQEAgLTI0LDcgKzI0LDYgQEAKIAogI2lu
Y2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0TGluZUJveGVzLmgi
Ci0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dC5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9y
Lmg+CkBAIC0xNjksNyArMTY4LDYgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2b2lkIGVuc3Vy
ZUxpbmVCb3hlcygpOwotICAgIGNvbnN0IFNpbXBsZUxpbmVMYXlvdXQ6OkxheW91dCogc2ltcGxl
TGluZUxheW91dCgpIGNvbnN0OwogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhU
KQogICAgIGNvbnN0IExheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0KiBsYXlvdXRGb3JtYXR0
aW5nQ29udGV4dExpbmVMYXlvdXQoKSBjb25zdDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBlMjhlYWIzYWM1MDIuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGlu
ZUxheW91dC5oIgotCi0jaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCi0jaW5j
bHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKLSNpbmNsdWRlICJIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIkhpdFRlc3RMb2NhdGlvbi5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCi0j
aW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgotI2luY2x1ZGUgIkh5cGhlbmF0aW9uLmgiCi0jaW5j
bHVkZSAiSW5saW5lVGV4dEJveC5oIgotI2luY2x1ZGUgIkxpbmVXaWR0aC5oIgotI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQYWludEluZm8uaCIKLSNpbmNsdWRlICJSZW5kZXJCbG9j
a0Zsb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyRnJhZ21lbnRlZEZsb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJMaW5lQnJlYWsuaCIKLSNpbmNs
dWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgot
I2luY2x1ZGUgIlJlbmRlclRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgot
I2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUg
IlNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5
b3V0RnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmgiCi0j
aW5jbHVkZSAiU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmgiCi0jaW5jbHVk
ZSAiVGV4dC5oIgotI2luY2x1ZGUgIlRleHRQYWludFN0eWxlLmgiCi0jaW5jbHVkZSA8cGFsL0xv
Z2dpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlv
dXQgewotCi0jaWZuZGVmIE5ERUJVRwotI2RlZmluZSBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZf
TkVFREVEKHJlYXNvbiwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpIHsgXAotICAgICAgICByZWFz
b25zIHw9IHJlYXNvbjsgXAotICAgICAgICBpZiAoaW5jbHVkZVJlYXNvbnMgPT0gSW5jbHVkZVJl
YXNvbnM6OkZpcnN0KSBcCi0gICAgICAgICAgICByZXR1cm4gcmVhc29uczsgXAotICAgIH0KLSNl
bHNlCi0jZGVmaW5lIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29uLCByZWFz
b25zLCBpbmNsdWRlUmVhc29ucykgeyBcCi0gICAgICAgIEFTU0VSVF9VTlVTRUQoaW5jbHVkZVJl
YXNvbnMsIGluY2x1ZGVSZWFzb25zID09IEluY2x1ZGVSZWFzb25zOjpGaXJzdCk7IFwKLSAgICAg
ICAgcmVhc29ucyB8PSByZWFzb247IFwKLSAgICAgICAgcmV0dXJuIHJlYXNvbnM7IFwKLSAgICB9
Ci0jZW5kaWYKLQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQXZvaWRhbmNl
UmVhc29uRmxhZ3MgY2FuVXNlRm9yQ2hhcmFjdGVyKENoYXJhY3RlclR5cGUsIGJvb2wgdGV4dElz
SnVzdGlmaWVkLCBJbmNsdWRlUmVhc29ucyk7Ci0KLXRlbXBsYXRlPD4gQXZvaWRhbmNlUmVhc29u
RmxhZ3MgY2FuVXNlRm9yQ2hhcmFjdGVyKFVDaGFyIGNoYXJhY3RlciwgYm9vbCB0ZXh0SXNKdXN0
aWZpZWQsIEluY2x1ZGVSZWFzb25zIGluY2x1ZGVSZWFzb25zKQotewotICAgIEF2b2lkYW5jZVJl
YXNvbkZsYWdzIHJlYXNvbnMgPSB7IH07Ci0gICAgaWYgKHRleHRJc0p1c3RpZmllZCkgewotICAg
ICAgICAvLyBJbmNsdWRlIGNoYXJhY3RlcnMgdXAgdG8gTGF0aW4gRXh0ZW5kZWQtQiBhbmQgc29t
ZSBwdW5jdHVhdGlvbiByYW5nZSB3aGVuIHRleHQgaXMganVzdGlmaWVkLgotICAgICAgICBib29s
IGlzTGF0aW5JbmNsdWRpbmdFeHRlbmRlZEIgPSBjaGFyYWN0ZXIgPD0gMHgwMUZGOwotICAgICAg
ICBib29sIGlzUHVuY3R1YXRpb25SYW5nZSA9IGNoYXJhY3RlciA+PSAweDIwMTAgJiYgY2hhcmFj
dGVyIDw9IDB4MjAyNzsKLSAgICAgICAgaWYgKCEoaXNMYXRpbkluY2x1ZGluZ0V4dGVuZGVkQiB8
fCBpc1B1bmN0dWF0aW9uUmFuZ2UpKQotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJO
X0lGX05FRURFRChGbG93SGFzSnVzdGlmaWVkTm9uTGF0aW5UZXh0LCByZWFzb25zLCBpbmNsdWRl
UmVhc29ucyk7Ci0gICAgfQotCi0gICAgaWYgKFUxNl9JU19TVVJST0dBVEUoY2hhcmFjdGVyKSkK
LSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93VGV4dEhhc1N1cnJv
Z2F0ZVBhaXIsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAKLSAgICBVQ2hhckRpcmVj
dGlvbiBkaXJlY3Rpb24gPSB1X2NoYXJEaXJlY3Rpb24oY2hhcmFjdGVyKTsKLSAgICBpZiAoZGly
ZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVCB8fCBkaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZU
X0FSQUJJQwotICAgICAgICB8fCBkaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUX0VNQkVERElO
RyB8fCBkaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFCi0gICAgICAgIHx8IGRp
cmVjdGlvbiA9PSBVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HIHx8IGRpcmVjdGlvbiA9PSBVX0xF
RlRfVE9fUklHSFRfT1ZFUlJJREUKLSAgICAgICAgfHwgZGlyZWN0aW9uID09IFVfUE9QX0RJUkVD
VElPTkFMX0ZPUk1BVCB8fCBkaXJlY3Rpb24gPT0gVV9CT1VOREFSWV9ORVVUUkFMKQotICAgICAg
ICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dUZXh0SGFzRGlyZWN0aW9uQ2hh
cmFjdGVyLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0KLSAgICByZXR1cm4gcmVhc29uczsK
LX0KLQotdGVtcGxhdGU8PiBBdm9pZGFuY2VSZWFzb25GbGFncyBjYW5Vc2VGb3JDaGFyYWN0ZXIo
TENoYXIsIGJvb2wsIEluY2x1ZGVSZWFzb25zKQotewotICAgIHJldHVybiB7IH07Ci19Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIEF2b2lkYW5jZVJlYXNvbkZs
YWdzIGNhblVzZUZvclRleHQoY29uc3QgQ2hhcmFjdGVyVHlwZSogdGV4dCwgdW5zaWduZWQgbGVu
Z3RoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUsIE9wdGlvbmFsPGZsb2F0PiBsaW5l
SGVpZ2h0Q29uc3RyYWludCwKLSAgICBib29sIHRleHRJc0p1c3RpZmllZCwgSW5jbHVkZVJlYXNv
bnMgaW5jbHVkZVJlYXNvbnMpCi17Ci0gICAgQXZvaWRhbmNlUmVhc29uRmxhZ3MgcmVhc29ucyA9
IHsgfTsKLSAgICBhdXRvJiBwcmltYXJ5Rm9udCA9IGZvbnRDYXNjYWRlLnByaW1hcnlGb250KCk7
Ci0gICAgYXV0byYgZm9udE1ldHJpY3MgPSBwcmltYXJ5Rm9udC5mb250TWV0cmljcygpOwotICAg
IGF1dG8gYXZhaWxhYmxlU3BhY2VGb3JHbHlwaEFzY2VudCA9IGZvbnRNZXRyaWNzLmFzY2VudCgp
OwotICAgIGF1dG8gYXZhaWxhYmxlU3BhY2VGb3JHbHlwaERlc2NlbnQgPSBmb250TWV0cmljcy5k
ZXNjZW50KCk7Ci0gICAgaWYgKGxpbmVIZWlnaHRDb25zdHJhaW50KSB7Ci0gICAgICAgIGF1dG8g
bGluZUhlaWdodFBhZGRpbmcgPSAqbGluZUhlaWdodENvbnN0cmFpbnQgLSBmb250TWV0cmljcy5o
ZWlnaHQoKTsKLSAgICAgICAgYXZhaWxhYmxlU3BhY2VGb3JHbHlwaEFzY2VudCArPSBsaW5lSGVp
Z2h0UGFkZGluZyAvIDI7Ci0gICAgICAgIGF2YWlsYWJsZVNwYWNlRm9yR2x5cGhEZXNjZW50ICs9
IGxpbmVIZWlnaHRQYWRkaW5nIC8gMjsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgYXV0byBjaGFyYWN0ZXIgPSB0ZXh0W2ldOwot
ICAgICAgICBpZiAoRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBzb2Z0SHlwaGVuKQot
ICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93VGV4dEhhc1Nv
ZnRIeXBoZW4sIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLQotICAgICAgICBhdXRvIGNoYXJh
Y3RlclJlYXNvbnMgPSBjYW5Vc2VGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCB0ZXh0SXNKdXN0aWZp
ZWQsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgaWYgKGNoYXJhY3RlclJlYXNvbnMgIT0gTm9S
ZWFzb24pCi0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKGNoYXJh
Y3RlclJlYXNvbnMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLQotICAgICAgICBhdXRvIGds
eXBoRGF0YSA9IGZvbnRDYXNjYWRlLmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZh
bHNlKTsKLSAgICAgICAgaWYgKCFnbHlwaERhdGEuaXNWYWxpZCgpIHx8IGdseXBoRGF0YS5mb250
ICE9ICZwcmltYXJ5Rm9udCkKLSAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9O
RUVERUQoRmxvd1ByaW1hcnlGb250SXNJbnN1ZmZpY2llbnQsIHJlYXNvbnMsIGluY2x1ZGVSZWFz
b25zKTsKLQotICAgICAgICBpZiAobGluZUhlaWdodENvbnN0cmFpbnQpIHsKLSAgICAgICAgICAg
IGF1dG8gYm91bmRzID0gcHJpbWFyeUZvbnQuYm91bmRzRm9yR2x5cGgoZ2x5cGhEYXRhLmdseXBo
KTsKLSAgICAgICAgICAgIGlmIChjZWlsZigtYm91bmRzLnkoKSkgPiBhdmFpbGFibGVTcGFjZUZv
ckdseXBoQXNjZW50IHx8IGNlaWxmKGJvdW5kcy5tYXhZKCkpID4gYXZhaWxhYmxlU3BhY2VGb3JH
bHlwaERlc2NlbnQpCi0gICAgICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05F
RURFRChGbG93Rm9udEhhc092ZXJmbG93R2x5cGgsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVhc29uczsKLX0KLQotc3RhdGljIEF2b2lk
YW5jZVJlYXNvbkZsYWdzIGNhblVzZUZvclRleHQoU3RyaW5nVmlldyB0ZXh0LCBjb25zdCBGb250
Q2FzY2FkZSYgZm9udENhc2NhZGUsIE9wdGlvbmFsPGZsb2F0PiBsaW5lSGVpZ2h0Q29uc3RyYWlu
dCwgYm9vbCB0ZXh0SXNKdXN0aWZpZWQsIEluY2x1ZGVSZWFzb25zIGluY2x1ZGVSZWFzb25zKQot
ewotICAgIGlmICh0ZXh0LmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gY2FuVXNlRm9yVGV4dCh0
ZXh0LmNoYXJhY3RlcnM4KCksIHRleHQubGVuZ3RoKCksIGZvbnRDYXNjYWRlLCBsaW5lSGVpZ2h0
Q29uc3RyYWludCwgdGV4dElzSnVzdGlmaWVkLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgcmV0dXJu
IGNhblVzZUZvclRleHQodGV4dC5jaGFyYWN0ZXJzMTYoKSwgdGV4dC5sZW5ndGgoKSwgZm9udENh
c2NhZGUsIGxpbmVIZWlnaHRDb25zdHJhaW50LCB0ZXh0SXNKdXN0aWZpZWQsIGluY2x1ZGVSZWFz
b25zKTsKLX0KLQotc3RhdGljIEF2b2lkYW5jZVJlYXNvbkZsYWdzIGNhblVzZUZvckZvbnRBbmRU
ZXh0KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgSW5jbHVkZVJlYXNvbnMgaW5jbHVkZVJl
YXNvbnMpCi17Ci0gICAgQXZvaWRhbmNlUmVhc29uRmxhZ3MgcmVhc29ucyA9IHsgfTsKLSAgICAv
LyBXZSBhc3N1bWUgdGhhdCBhbGwgbGluZXMgaGF2ZSBtZXRyaWNzIGJhc2VkIHB1cmVseSBvbiB0
aGUgcHJpbWFyeSBmb250LgotICAgIGNvbnN0IGF1dG8mIHN0eWxlID0gZmxvdy5zdHlsZSgpOwot
ICAgIGF1dG8mIGZvbnRDYXNjYWRlID0gc3R5bGUuZm9udENhc2NhZGUoKTsKLSAgICBpZiAoZm9u
dENhc2NhZGUucHJpbWFyeUZvbnQoKS5pc0ludGVyc3RpdGlhbCgpKQotICAgICAgICBTRVRfUkVB
U09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJc01pc3NpbmdQcmltYXJ5Rm9udCwgcmVhc29u
cywgaW5jbHVkZVJlYXNvbnMpOwotICAgIE9wdGlvbmFsPGZsb2F0PiBsaW5lSGVpZ2h0Q29uc3Ry
YWludDsKLSAgICBpZiAoc3R5bGUubGluZUJveENvbnRhaW4oKS5jb250YWlucyhMaW5lQm94Q29u
dGFpbjo6R2x5cGhzKSkKLSAgICAgICAgbGluZUhlaWdodENvbnN0cmFpbnQgPSBsaW5lSGVpZ2h0
RnJvbUZsb3coZmxvdykudG9GbG9hdCgpOwotICAgIGJvb2wgZmxvd0lzSnVzdGlmaWVkID0gc3R5
bGUudGV4dEFsaWduKCkgPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeTsKLSAgICBmb3IgKGNvbnN0
IGF1dG8mIHRleHRSZW5kZXJlciA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlclRleHQ+KGZsb3cpKSB7
Ci0gICAgICAgIC8vIEZJWE1FOiBEbyBub3QgcmV0dXJuIHVudGlsIGFmdGVyIGNoZWNraW5nIGFs
bCBjaGlsZHJlbi4KLSAgICAgICAgaWYgKHRleHRSZW5kZXJlci50ZXh0KCkuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93VGV4dElzRW1w
dHksIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgaWYgKHRleHRSZW5kZXJlci5p
c0NvbWJpbmVUZXh0KCkpCi0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVF
REVEKEZsb3dUZXh0SXNDb21iaW5lVGV4dCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAg
ICAgICBpZiAodGV4dFJlbmRlcmVyLmlzQ291bnRlcigpKQotICAgICAgICAgICAgU0VUX1JFQVNP
Tl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93VGV4dElzUmVuZGVyQ291bnRlciwgcmVhc29ucywg
aW5jbHVkZVJlYXNvbnMpOwotICAgICAgICBpZiAodGV4dFJlbmRlcmVyLmlzUXVvdGUoKSkKLSAg
ICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRJc1JlbmRl
clF1b3RlLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgICAgIGlmICh0ZXh0UmVuZGVy
ZXIuaXNUZXh0RnJhZ21lbnQoKSkKLSAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9J
Rl9ORUVERUQoRmxvd1RleHRJc1RleHRGcmFnbWVudCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMp
OwotICAgICAgICBpZiAodGV4dFJlbmRlcmVyLmlzU1ZHSW5saW5lVGV4dCgpKQotICAgICAgICAg
ICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93VGV4dElzU1ZHSW5saW5lVGV4
dCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgICAgICBpZiAoIXRleHRSZW5kZXJlci5j
YW5Vc2VTaW1wbGVGb250Q29kZVBhdGgoKSkgewotICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBj
aGVjayB0aGUgY29kZSBwYXRoIGF0IHRoaXMgcG9pbnQuIFdlIGFscmVhZHkga25vdyBpdCBjYW4n
dCBiZSBzaW1wbGUuCi0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVE
KEZsb3dIYXNDb21wbGV4Rm9udENvZGVQYXRoLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBUZXh0UnVuIHJ1bihTdHJpbmcodGV4dFJlbmRl
cmVyLnRleHQoKSkpOwotICAgICAgICAgICAgcnVuLnNldENoYXJhY3RlclNjYW5Gb3JDb2RlUGF0
aChmYWxzZSk7Ci0gICAgICAgICAgICBpZiAoc3R5bGUuZm9udENhc2NhZGUoKS5jb2RlUGF0aChy
dW4pICE9IEZvbnRDYXNjYWRlOjpTaW1wbGUpCi0gICAgICAgICAgICAgICAgU0VUX1JFQVNPTl9B
TkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzQ29tcGxleEZvbnRDb2RlUGF0aCwgcmVhc29ucywg
aW5jbHVkZVJlYXNvbnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byB0ZXh0UmVhc29ucyA9
IGNhblVzZUZvclRleHQodGV4dFJlbmRlcmVyLnN0cmluZ1ZpZXcoKSwgZm9udENhc2NhZGUsIGxp
bmVIZWlnaHRDb25zdHJhaW50LCBmbG93SXNKdXN0aWZpZWQsIGluY2x1ZGVSZWFzb25zKTsKLSAg
ICAgICAgaWYgKHRleHRSZWFzb25zICE9IE5vUmVhc29uKQotICAgICAgICAgICAgU0VUX1JFQVNP
Tl9BTkRfUkVUVVJOX0lGX05FRURFRCh0ZXh0UmVhc29ucywgcmVhc29ucywgaW5jbHVkZVJlYXNv
bnMpOwotICAgIH0KLSAgICByZXR1cm4gcmVhc29uczsKLX0KLQotc3RhdGljIEF2b2lkYW5jZVJl
YXNvbkZsYWdzIGNhblVzZUZvclN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgSW5jbHVk
ZVJlYXNvbnMgaW5jbHVkZVJlYXNvbnMpCi17Ci0gICAgQXZvaWRhbmNlUmVhc29uRmxhZ3MgcmVh
c29ucyA9IHsgfTsKLSAgICBpZiAoc3R5bGUudGV4dE92ZXJmbG93KCkgPT0gVGV4dE92ZXJmbG93
OjpFbGxpcHNpcykKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93
SGFzVGV4dE92ZXJmbG93LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0eWxl
LnRleHRVbmRlcmxpbmVQb3NpdGlvbigpICE9IFRleHRVbmRlcmxpbmVQb3NpdGlvbjo6QXV0byB8
fCAhc3R5bGUudGV4dFVuZGVybGluZU9mZnNldCgpLmlzQXV0bygpIHx8ICFzdHlsZS50ZXh0RGVj
b3JhdGlvblRoaWNrbmVzcygpLmlzQXV0bygpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRV
Uk5fSUZfTkVFREVEKEZsb3dIYXNVbnN1cHBvcnRlZFVuZGVybGluZURlY29yYXRpb24sIHJlYXNv
bnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAvLyBOb24tdmlzaWJsZSBvdmVyZmxvdyBzaG91bGQg
YmUgcHJldHR5IGVhc3kgdG8gc3VwcG9ydC4KLSAgICBpZiAoc3R5bGUub3ZlcmZsb3dYKCkgIT0g
T3ZlcmZsb3c6OlZpc2libGUgfHwgc3R5bGUub3ZlcmZsb3dZKCkgIT0gT3ZlcmZsb3c6OlZpc2li
bGUpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc092ZXJm
bG93Tm90VmlzaWJsZSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmICghc3R5bGUu
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5f
SUZfTkVFREVEKEZsb3dJc05vdExUUiwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlm
ICghKHN0eWxlLmxpbmVCb3hDb250YWluKCkuY29udGFpbnMoTGluZUJveENvbnRhaW46OkJsb2Nr
KSkpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc0xpbmVC
b3hDb250YWluUHJvcGVydHksIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoc3R5
bGUud3JpdGluZ01vZGUoKSAhPSBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b20pCi0gICAgICAgIFNF
VF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0lzTm90VG9wVG9Cb3R0b20sIHJlYXNv
bnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoc3R5bGUubGluZUJyZWFrKCkgIT0gTGluZUJy
ZWFrOjpBdXRvKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dI
YXNMaW5lQnJlYWssIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoc3R5bGUudW5p
Y29kZUJpZGkoKSAhPSBVQk5vcm1hbCkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lG
X05FRURFRChGbG93SGFzTm9uTm9ybWFsVW5pY29kZUJpRGksIHJlYXNvbnMsIGluY2x1ZGVSZWFz
b25zKTsKLSAgICBpZiAoc3R5bGUucnRsT3JkZXJpbmcoKSAhPSBPcmRlcjo6TG9naWNhbCkKLSAg
ICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzUlRMT3JkZXJpbmcs
IHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoc3R5bGUubGluZUFsaWduKCkgIT0g
TGluZUFsaWduOjpOb25lKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVE
KEZsb3dIYXNMaW5lQWxpZ25FZGdlcywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlm
IChzdHlsZS5saW5lU25hcCgpICE9IExpbmVTbmFwOjpOb25lKQotICAgICAgICBTRVRfUkVBU09O
X0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNMaW5lU25hcCwgcmVhc29ucywgaW5jbHVkZVJl
YXNvbnMpOwotICAgIGlmIChzdHlsZS50ZXh0RW1waGFzaXNGaWxsKCkgIT0gVGV4dEVtcGhhc2lz
RmlsbDo6RmlsbGVkIHx8IHN0eWxlLnRleHRFbXBoYXNpc01hcmsoKSAhPSBUZXh0RW1waGFzaXNN
YXJrOjpOb25lKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dI
YXNUZXh0RW1waGFzaXNGaWxsT3JNYXJrLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAg
aWYgKHN0eWxlLnRleHRTaGFkb3coKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lG
X05FRURFRChGbG93SGFzVGV4dFNoYWRvdywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAg
IGlmIChzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6Rmlyc3RMaW5lKSkKLSAgICAgICAg
U0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzUHNldWRvRmlyc3RMaW5lLCBy
ZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLmhhc1BzZXVkb1N0eWxlKFBz
ZXVkb0lkOjpGaXJzdExldHRlcikpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9O
RUVERUQoRmxvd0hhc1BzZXVkb0ZpcnN0TGV0dGVyLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7
Ci0gICAgaWYgKHN0eWxlLmhhc1RleHRDb21iaW5lKCkpCi0gICAgICAgIFNFVF9SRUFTT05fQU5E
X1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1RleHRDb21iaW5lLCByZWFzb25zLCBpbmNsdWRlUmVh
c29ucyk7Ci0gICAgaWYgKHN0eWxlLmJhY2tncm91bmRDbGlwKCkgPT0gRmlsbEJveDo6VGV4dCkK
LSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzVGV4dEZpbGxC
b3gsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoc3R5bGUuYm9yZGVyRml0KCkg
PT0gQm9yZGVyRml0OjpMaW5lcykKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05F
RURFRChGbG93SGFzQm9yZGVyRml0TGluZXMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAg
ICBpZiAoc3R5bGUubGluZUJyZWFrKCkgIT0gTGluZUJyZWFrOjpBdXRvKQotICAgICAgICBTRVRf
UkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNOb25BdXRvTGluZUJyZWFrLCByZWFz
b25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLm5ic3BNb2RlKCkgIT0gTkJTUE1v
ZGU6Ok5vcm1hbCkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93
SGFzV2ViS2l0TkJTUE1vZGUsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAvLyBTcGVj
aWFsIGhhbmRsaW5nIG9mIHRleHQtc2VjdXJpdHk6ZGlzYyBpcyBub3QgeWV0IGltcGxlbWVudGVk
IGluIHRoZSBzaW1wbGUgbGluZSBsYXlvdXQgY29kZSBwYXRoLgotICAgIC8vIFNlZSBSZW5kZXJC
bG9jazo6dXBkYXRlU2VjdXJpdHlEaXNjQ2hhcmFjdGVycy4KLSAgICBpZiAoc3R5bGUudGV4dFNl
Y3VyaXR5KCkgIT0gVGV4dFNlY3VyaXR5OjpOb25lKQotICAgICAgICBTRVRfUkVBU09OX0FORF9S
RVRVUk5fSUZfTkVFREVEKEZsb3dIYXNUZXh0U2VjdXJpdHksIHJlYXNvbnMsIGluY2x1ZGVSZWFz
b25zKTsKLSAgICBpZiAoc3R5bGUuaHlwaGVucygpID09IEh5cGhlbnM6OkF1dG8pIHsKLSAgICAg
ICAgYXV0byB0ZXh0UmVhc29ucyA9IGNhblVzZUZvclRleHQoc3R5bGUuaHlwaGVuU3RyaW5nKCks
IHN0eWxlLmZvbnRDYXNjYWRlKCksIFdURjo6bnVsbG9wdCwgZmFsc2UsIGluY2x1ZGVSZWFzb25z
KTsKLSAgICAgICAgaWYgKHRleHRSZWFzb25zICE9IE5vUmVhc29uKQotICAgICAgICAgICAgU0VU
X1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRCh0ZXh0UmVhc29ucywgcmVhc29ucywgaW5jbHVk
ZVJlYXNvbnMpOwotICAgIH0KLSAgICByZXR1cm4gcmVhc29uczsKLX0KLQotQXZvaWRhbmNlUmVh
c29uRmxhZ3MgY2FuVXNlRm9yV2l0aFJlYXNvbihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cs
IEluY2x1ZGVSZWFzb25zIGluY2x1ZGVSZWFzb25zKQotewotI2lmbmRlZiBOREVCVUcKLSAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7Ci0gICAgc3RkOjpjYWxsX29uY2Uob25jZUZs
YWcsIFtdIHsKLSAgICAgICAgUEFMOjpyZWdpc3Rlck5vdGlmeUNhbGxiYWNrKCJjb20uYXBwbGUu
V2ViS2l0LnNob3dTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UiLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4geyBwcmludFNpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZSB9KTsKLSAgICAgICAgUEFMOjpyZWdp
c3Rlck5vdGlmeUNhbGxiYWNrKCJjb20uYXBwbGUuV2ViS2l0LnNob3dTaW1wbGVMaW5lTGF5b3V0
UmVhc29ucyIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiB7IHByaW50U2ltcGxlTGluZUxheW91dEJs
b2NrTGlzdCB9KTsKLSAgICAgICAgUEFMOjpyZWdpc3Rlck5vdGlmeUNhbGxiYWNrKCJjb20uYXBw
bGUuV2ViS2l0LnRvZ2dsZVNpbXBsZUxpbmVMYXlvdXQiLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4g
eyB0b2dnbGVTaW1wbGVMaW5lTGF5b3V0IH0pOwotICAgIH0pOwotI2VuZGlmCi0gICAgQXZvaWRh
bmNlUmVhc29uRmxhZ3MgcmVhc29ucyA9IHsgfTsKLSAgICBpZiAoIWZsb3cuc2V0dGluZ3MoKS5z
aW1wbGVMaW5lTGF5b3V0RW5hYmxlZCgpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5f
SUZfTkVFREVEKEZlYXR1cmVJc0Rpc2FibGVkLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0g
ICAgaWYgKCFmbG93LnBhcmVudCgpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZf
TkVFREVEKEZsb3dIYXNOb1BhcmVudCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlm
ICghZmxvdy5maXJzdENoaWxkKCkpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9O
RUVERUQoRmxvd0hhc05vQ2hpbGQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAo
Zmxvdy5mcmFnbWVudGVkRmxvd1N0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpOb3RJbnNpZGVGcmFn
bWVudGVkRmxvdykgewotICAgICAgICBhdXRvKiBmcmFnbWVudGVkRmxvdyA9IGZsb3cuZW5jbG9z
aW5nRnJhZ21lbnRlZEZsb3coKTsKLSAgICAgICAgaWYgKCFpczxSZW5kZXJNdWx0aUNvbHVtbkZs
b3c+KGZyYWdtZW50ZWRGbG93KSkKLSAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9J
Rl9ORUVERUQoRmxvd0lzSW5zaWRlQU5vbk11bHRpQ29sdW1uVGhyZWFkLCByZWFzb25zLCBpbmNs
dWRlUmVhc29ucyk7Ci0gICAgICAgIGF1dG8mIGNvbHVtblRocmVhZCA9IGRvd25jYXN0PFJlbmRl
ck11bHRpQ29sdW1uRmxvdz4oKmZyYWdtZW50ZWRGbG93KTsKLSAgICAgICAgaWYgKGNvbHVtblRo
cmVhZC5wYXJlbnQoKSAhPSAmZmxvdy52aWV3KCkpCi0gICAgICAgICAgICBTRVRfUkVBU09OX0FO
RF9SRVRVUk5fSUZfTkVFREVEKE11bHRpQ29sdW1uRmxvd0lzTm90VG9wTGV2ZWwsIHJlYXNvbnMs
IGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgaWYgKGNvbHVtblRocmVhZC5oYXNDb2x1bW5TcGFu
bmVyKCkpCi0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKE11bHRp
Q29sdW1uRmxvd0hhc0NvbHVtblNwYW5uZXIsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAg
ICAgICAgYXV0byYgc3R5bGUgPSBmbG93LnN0eWxlKCk7Ci0gICAgICAgIGlmIChzdHlsZS52ZXJ0
aWNhbEFsaWduKCkgIT0gVmVydGljYWxBbGlnbjo6QmFzZWxpbmUpCi0gICAgICAgICAgICBTRVRf
UkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKE11bHRpQ29sdW1uRmxvd1ZlcnRpY2FsQWxpZ24s
IHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgaWYgKHN0eWxlLmlzRmxvYXRpbmco
KSkKLSAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoTXVsdGlDb2x1
bW5GbG93SXNGbG9hdGluZywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIH0KLSAgICBp
ZiAoIWZsb3cuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgU0VUX1JFQVNPTl9B
TkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzSG9yaXpvbmFsV3JpdGluZ01vZGUsIHJlYXNvbnMs
IGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoZmxvdy5oYXNPdXRsaW5lKCkpCi0gICAgICAgIFNF
VF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc091dGxpbmUsIHJlYXNvbnMsIGlu
Y2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoZmxvdy5pc1J1YnlUZXh0KCkgfHwgZmxvdy5pc1J1YnlC
YXNlKCkpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0lzUnVi
eSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmICghZmxvdy5zdHlsZSgpLmhhbmdp
bmdQdW5jdHVhdGlvbigpLmlzRW1wdHkoKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJO
X0lGX05FRURFRChGbG93SGFzSGFuZ2luZ1B1bmN0dWF0aW9uLCByZWFzb25zLCBpbmNsdWRlUmVh
c29ucyk7Ci0gICAgCi0gICAgLy8gUHJpbnRpbmcgZG9lcyBwYWdpbmF0aW9uIHdpdGhvdXQgYSBm
bG93IHRocmVhZC4KLSAgICBpZiAoZmxvdy5kb2N1bWVudCgpLnBhZ2luYXRlZCgpKQotICAgICAg
ICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJc1BhZ2luYXRlZCwgcmVhc29u
cywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmIChmbG93LmZpcnN0TGluZUJsb2NrKCkpCi0gICAg
ICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1BzZXVkb0ZpcnN0TGlu
ZSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmIChmbG93LmlzQW5vbnltb3VzQmxv
Y2soKSAmJiBmbG93LnBhcmVudCgpLT5zdHlsZSgpLnRleHRPdmVyZmxvdygpID09IFRleHRPdmVy
Zmxvdzo6RWxsaXBzaXMpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQo
Rmxvd0hhc1RleHRPdmVyZmxvdywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmIChm
bG93LnBhcmVudCgpLT5pc0RlcHJlY2F0ZWRGbGV4aWJsZUJveCgpKQotICAgICAgICBTRVRfUkVB
U09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJc0RlcHJpY2F0ZWRGbGV4Qm94LCByZWFzb25z
LCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgLy8gRklYTUU6IFBsYWNlaG9sZGVycyBkbyBzb21ldGhp
bmcgc3RyYW5nZS4KLSAgICBpZiAoaXM8UmVuZGVyVGV4dENvbnRyb2w+KCpmbG93LnBhcmVudCgp
KSAmJiBkb3duY2FzdDxSZW5kZXJUZXh0Q29udHJvbD4oKmZsb3cucGFyZW50KCkpLnRleHRGb3Jt
Q29udHJvbEVsZW1lbnQoKS5wbGFjZWhvbGRlckVsZW1lbnQoKSkKLSAgICAgICAgU0VUX1JFQVNP
Tl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93UGFyZW50SXNQbGFjZWhvbGRlckVsZW1lbnQsIHJl
YXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50YXRpb24gb2Yg
d3JhcD1oYXJkIGxvb2tzIGludG8gbGluZWJveGVzLgotICAgIGlmIChmbG93LnBhcmVudCgpLT5p
c1RleHRBcmVhKCkgJiYgZmxvdy5wYXJlbnQoKS0+ZWxlbWVudCgpLT5oYXNBdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6d3JhcEF0dHIpKQotICAgICAgICBTRVRfUkVB
U09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dQYXJlbnRJc1RleHRBcmVhV2l0aFdyYXBwaW5n
LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgLy8gVGhpcyBjdXJyZW50bHkgY292ZXJz
IDxibG9ja2Zsb3c+I3RleHQ8L2Jsb2NrZmxvdz4sIDxibG9ja2Zsb3c+I3RleHQ8YnI+PC9ibG9j
a2Zsb3c+IGFuZCBtdXRpcGxlIChzaWJsaW5nKSBSZW5kZXJUZXh0IGNhc2VzLgotICAgIC8vIFRo
ZSA8YmxvY2tmbG93PjxpbmxpbmU+I3RleHQ8L2lubGluZT48L2Jsb2NrZmxvdz4gY2FzZSBpcyBh
bHNvIHBvcHVsYXIgYW5kIHNob3VsZCBiZSByZWxhdGl2ZWx5IGVhc3kgdG8gY292ZXIuCi0gICAg
Zm9yIChjb25zdCBhdXRvKiBjaGlsZCA9IGZsb3cuZmlyc3RDaGlsZCgpOyBjaGlsZDspIHsKLSAg
ICAgICAgaWYgKGNoaWxkLT5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6SGlnaGxp
Z2h0U3RhdGU6Ok5vbmUpCi0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVF
REVEKEZsb3dDaGlsZElzU2VsZWN0ZWQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAg
ICAgaWYgKGlzPFJlbmRlclRleHQ+KCpjaGlsZCkpIHsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8m
IHJlbmRlclRleHQgPSBkb3duY2FzdDxSZW5kZXJUZXh0PigqY2hpbGQpOwotICAgICAgICAgICAg
aWYgKHJlbmRlclRleHQudGV4dE5vZGUoKSAmJiAhcmVuZGVyVGV4dC5kb2N1bWVudCgpLm1hcmtl
cnMoKS5tYXJrZXJzRm9yKCpyZW5kZXJUZXh0LnRleHROb2RlKCkpLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJbmNsdWRlc0Rv
Y3VtZW50TWFya2VycywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgICAgICAgICAgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChpczxSZW5kZXJMaW5lQnJlYWs+KGNoaWxkKSAmJiAhZG93bmNhc3Q8
UmVuZGVyTGluZUJyZWFrPigqY2hpbGQpLmlzV0JSKCkgJiYgY2hpbGQtPnN0eWxlKCkuY2xlYXIo
KSA9PSBDbGVhcjo6Tm9uZSkgewotICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIFNFVF9SRUFT
T05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc05vblN1cHBvcnRlZENoaWxkLCByZWFzb25z
LCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBhdXRvIHN0eWxl
UmVhc29ucyA9IGNhblVzZUZvclN0eWxlKGZsb3cuc3R5bGUoKSwgaW5jbHVkZVJlYXNvbnMpOwot
ICAgIGlmIChzdHlsZVJlYXNvbnMgIT0gTm9SZWFzb24pCi0gICAgICAgIFNFVF9SRUFTT05fQU5E
X1JFVFVSTl9JRl9ORUVERUQoc3R5bGVSZWFzb25zLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7
Ci0gICAgLy8gV2UgY2FuJ3QgdXNlIHRoZSBjb2RlIHBhdGggaWYgYW55IGxpbmVzIHdvdWxkIG5l
ZWQgdG8gYmUgc2hpZnRlZCBiZWxvdyBmbG9hdHMuIFRoaXMgaXMgYmVjYXVzZSB3ZSBkb24ndCBr
ZWVwIHBlci1saW5lIHkgY29vcmRpbmF0ZXMuCi0gICAgaWYgKGZsb3cuY29udGFpbnNGbG9hdHMo
KSkgewotICAgICAgICBmbG9hdCBtaW5pbXVtV2lkdGhOZWVkZWQgPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6bWF4KCk7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgdGV4dFJlbmRlcmVy
IDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyVGV4dD4oZmxvdykpIHsKLSAgICAgICAgICAgIG1pbmlt
dW1XaWR0aE5lZWRlZCA9IHN0ZDo6bWluKG1pbmltdW1XaWR0aE5lZWRlZCwgdGV4dFJlbmRlcmVy
Lm1pbkxvZ2ljYWxXaWR0aCgpKTsKLQotICAgICAgICAgICAgZm9yIChhdXRvJiBmbG9hdGluZ09i
amVjdCA6ICpmbG93LmZsb2F0aW5nT2JqZWN0U2V0KCkpIHsKLSAgICAgICAgICAgICAgICBBU1NF
UlQoZmxvYXRpbmdPYmplY3QpOwotICAgICAgICAgICAgICAgIC8vIGlmIGEgZmxvYXQgaGFzIGEg
c2hhcGUsIHdlIGNhbm5vdCB0ZWxsIGlmIGNvbnRlbnQgd2lsbCBuZWVkIHRvIGJlIHNoaWZ0ZWQg
dW50aWwgYWZ0ZXIgd2UgbGF5IGl0IG91dCwKLSAgICAgICAgICAgICAgICAvLyBzaW5jZSB0aGUg
YW1vdW50IG9mIHNwYWNlIGlzIG5vdCB1bmlmb3JtIGZvciB0aGUgaGVpZ2h0IG9mIHRoZSBmbG9h
dC4KLSAgICAgICAgICAgICAgICBpZiAoZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCkuc2hhcGVP
dXRzaWRlSW5mbygpKQotICAgICAgICAgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5f
SUZfTkVFREVEKEZsb3dIYXNVbnN1cHBvcnRlZEZsb2F0LCByZWFzb25zLCBpbmNsdWRlUmVhc29u
cyk7Ci0gICAgICAgICAgICAgICAgZmxvYXQgYXZhaWxhYmxlV2lkdGggPSBmbG93LmF2YWlsYWJs
ZUxvZ2ljYWxXaWR0aEZvckxpbmUoZmxvYXRpbmdPYmplY3QtPnkoKSwgRG9Ob3RJbmRlbnRUZXh0
KTsKLSAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlV2lkdGggPCBtaW5pbXVtV2lkdGhOZWVk
ZWQpCi0gICAgICAgICAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQo
Rmxvd0hhc1Vuc3VwcG9ydGVkRmxvYXQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBhdXRvIGZvbnRBbmRUZXh0UmVhc29ucyA9
IGNhblVzZUZvckZvbnRBbmRUZXh0KGZsb3csIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoZm9u
dEFuZFRleHRSZWFzb25zICE9IE5vUmVhc29uKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRV
Uk5fSUZfTkVFREVEKGZvbnRBbmRUZXh0UmVhc29ucywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMp
OwotICAgIHJldHVybiByZWFzb25zOwotfQotCi1ib29sIGNhblVzZUZvcihjb25zdCBSZW5kZXJC
bG9ja0Zsb3cmIGZsb3cpCi17Ci0gICAgcmV0dXJuIGNhblVzZUZvcldpdGhSZWFzb24oZmxvdywg
SW5jbHVkZVJlYXNvbnM6OkZpcnN0KSA9PSBOb1JlYXNvbjsKLX0KLQotYm9vbCBjYW5Vc2VGb3JB
ZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgYmxvY2tDb250YWluZXIsIFN0
eWxlRGlmZmVyZW5jZSBkaWZmKQotewotICAgIHN3aXRjaCAoZGlmZikgewotICAgIGNhc2UgU3R5
bGVEaWZmZXJlbmNlOjpFcXVhbDoKLSAgICBjYXNlIFN0eWxlRGlmZmVyZW5jZTo6UmVjb21wb3Np
dGVMYXllcjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6
OlJlcGFpbnQ6Ci0gICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6OlJlcGFpbnRJZlRleHRPckJvcmRl
ck9yT3V0bGluZToKLSAgICBjYXNlIFN0eWxlRGlmZmVyZW5jZTo6UmVwYWludExheWVyOgotICAg
ICAgICAvLyBGSVhNRTogV2UgY291bGQgZG8gYSBtb3JlIGZvY3VzZWQgc3R5bGUgY2hlY2sgYnkg
bWF0Y2hpbmcgUmVuZGVyZXJTdHlsZTo6Y2hhbmdlUmVxdWlyZXNSZXBhaW50JmNvLgotICAgICAg
ICByZXR1cm4gY2FuVXNlRm9yU3R5bGUoYmxvY2tDb250YWluZXIuc3R5bGUoKSwgSW5jbHVkZVJl
YXNvbnM6OkZpcnN0KSA9PSBOb1JlYXNvbjsKLSAgICBjYXNlIFN0eWxlRGlmZmVyZW5jZTo6TGF5
b3V0UG9zaXRpb25lZE1vdmVtZW50T25seToKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2Fz
ZSBTdHlsZURpZmZlcmVuY2U6OlNpbXBsaWZpZWRMYXlvdXQ6Ci0gICAgY2FzZSBTdHlsZURpZmZl
cmVuY2U6OlNpbXBsaWZpZWRMYXlvdXRBbmRQb3NpdGlvbmVkTW92ZW1lbnQ6Ci0gICAgICAgIHJl
dHVybiBjYW5Vc2VGb3JTdHlsZShibG9ja0NvbnRhaW5lci5zdHlsZSgpLCBJbmNsdWRlUmVhc29u
czo6Rmlyc3QpID09IE5vUmVhc29uOwotICAgIGNhc2UgU3R5bGVEaWZmZXJlbmNlOjpMYXlvdXQ6
Ci0gICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6Ok5ld1N0eWxlOgotICAgICAgICByZXR1cm4gY2Fu
VXNlRm9yKGJsb2NrQ29udGFpbmVyKTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIGNhblVzZUZvcihibG9ja0NvbnRhaW5lcik7Ci19Ci0KLXN0YXRpYyB2b2lk
IHJldmVydEFsbFJ1bnNPbkN1cnJlbnRMaW5lKExheW91dDo6UnVuVmVjdG9yJiBydW5zKQotewot
ICAgIHdoaWxlICghcnVucy5pc0VtcHR5KCkgJiYgIXJ1bnMubGFzdCgpLmlzRW5kT2ZMaW5lKQot
ICAgICAgICBydW5zLnJlbW92ZUxhc3QoKTsKLX0KLQotc3RhdGljIHZvaWQgcmV2ZXJ0UnVucyhM
YXlvdXQ6OlJ1blZlY3RvciYgcnVucywgdW5zaWduZWQgcG9zaXRpb25Ub1JldmVydFRvLCBmbG9h
dCB3aWR0aCkKLXsKLSAgICB3aGlsZSAocnVucy5zaXplKCkpIHsKLSAgICAgICAgYXV0byYgbGFz
dFJ1biA9IHJ1bnMubGFzdCgpOwotICAgICAgICBpZiAobGFzdFJ1bi5lbmQgPD0gcG9zaXRpb25U
b1JldmVydFRvKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChsYXN0UnVuLnN0YXJ0
ID49IHBvc2l0aW9uVG9SZXZlcnRUbykgewotICAgICAgICAgICAgLy8gUmV2ZXJ0IHRoaXMgcnVu
IGNvbXBsZXRlbHkuCi0gICAgICAgICAgICB3aWR0aCAtPSAobGFzdFJ1bi5sb2dpY2FsUmlnaHQg
LSBsYXN0UnVuLmxvZ2ljYWxMZWZ0KTsKLSAgICAgICAgICAgIHJ1bnMucmVtb3ZlTGFzdCgpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbGFzdFJ1bi5sb2dpY2FsUmlnaHQgLT0gd2lk
dGg7Ci0gICAgICAgICAgICB3aWR0aCA9IDA7Ci0gICAgICAgICAgICBsYXN0UnVuLmVuZCA9IHBv
c2l0aW9uVG9SZXZlcnRUbzsKLSAgICAgICAgICAgIC8vIFBhcnRpYWwgcmVtb3ZhbC4KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi1jbGFzcyBMaW5lU3RhdGUgewot
cHVibGljOgotICAgIHZvaWQgc2V0QXZhaWxhYmxlV2lkdGgoZmxvYXQgd2lkdGgpIHsgbV9hdmFp
bGFibGVXaWR0aCA9IHdpZHRoOyB9Ci0gICAgdm9pZCBzZXRDb2xsYXBlZFdoaXRlc3BhY2VXaWR0
aChmbG9hdCB3aWR0aCkgeyBtX2NvbGxhcHNlZFdoaXRlc3BhY2VXaWR0aCA9IHdpZHRoOyB9Ci0g
ICAgdm9pZCBzZXRMb2dpY2FsTGVmdE9mZnNldChmbG9hdCBvZmZzZXQpIHsgbV9sb2dpY2FsTGVm
dE9mZnNldCA9IG9mZnNldDsgfQotICAgIHZvaWQgc2V0T3ZlcmZsb3dlZEZyYWdtZW50KGNvbnN0
IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIGZyYWdtZW50KSB7IG1fb3ZlcmZs
b3dlZEZyYWdtZW50ID0gZnJhZ21lbnQ7IH0KLSAgICB2b2lkIHNldE5lZWRzQWxsRnJhZ21lbnRz
KCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9mcmFnbWVudHMpOwotICAgICAgICBtX2ZyYWdt
ZW50cy5lbXBsYWNlKCk7Ci0gICAgfQotICAgIHZvaWQgc2V0SHlwaGVuYXRpb25EaXNhYmxlZCgp
IHsgbV9oeXBoZW5hdGlvbkRpc2FibGVkID0gdHJ1ZTsgfQotICAgIGJvb2wgaXNIeXBoZW5hdGlv
bkRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gbV9oeXBoZW5hdGlvbkRpc2FibGVkOyB9Ci0KLSAg
ICBmbG9hdCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXZhaWxhYmxlV2lkdGg7
IH0KLSAgICBmbG9hdCBsb2dpY2FsTGVmdE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNh
bExlZnRPZmZzZXQ7IH0KLSAgICBjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdt
ZW50JiBvdmVyZmxvd2VkRnJhZ21lbnQoKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ZWRGcmFn
bWVudDsgfQotICAgIGJvb2wgaGFzVHJhaWxpbmdXaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4g
bV9sYXN0RnJhZ21lbnQudHlwZSgpID09IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21l
bnQ6OldoaXRlc3BhY2UgJiYgbV9sYXN0RnJhZ21lbnQubGVuZ3RoKCkgPiAwOyB9Ci0gICAgYm9v
bCBoYXNXaGl0ZXNwYWNlRnJhZ21lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0V2hpdGVzcGFj
ZUZyYWdtZW50ICE9IFdURjo6bnVsbG9wdDsgfQotICAgIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpU
ZXh0RnJhZ21lbnQgbGFzdEZyYWdtZW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RnJhZ21lbnQ7
IH0KLSAgICBib29sIGlzV2hpdGVzcGFjZU9ubHkoKSBjb25zdCB7IHJldHVybiBtX3RyYWlsaW5n
V2hpdGVzcGFjZVdpZHRoICYmIG1fcnVuc1dpZHRoID09IG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lk
dGg7IH0KLSAgICBib29sIGZpdHMoZmxvYXQgZXh0cmEpIGNvbnN0IHsgcmV0dXJuIG1fYXZhaWxh
YmxlV2lkdGggPj0gbV9ydW5zV2lkdGggKyBleHRyYTsgfQotICAgIGJvb2wgZmlyc3RDaGFyYWN0
ZXJGaXRzKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdENoYXJhY3RlckZpdHM7IH0KLSAgICBmbG9h
dCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcnVuc1dpZHRoOyB9Ci0gICAgc3RkOjpwYWlyPHVu
c2lnbmVkLCBib29sPiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KHVuc2lnbmVkIGZyb20sIHVu
c2lnbmVkIHRvKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZnJhZ21lbnRzKTsKLSAg
ICAgICAgLy8gbGluZWJyZWFrIHJ1bnMgYXJlIHNwZWNpYWwuCi0gICAgICAgIGlmIChmcm9tID09
IHRvKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKDAsIGZhbHNlKTsKLSAgICAg
ICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCA9IDA7Ci0gICAgICAgIGF1dG8g
cHJldmlvdXNGcmFnbWVudFR5cGUgPSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50
OjpDb250ZW50RW5kOwotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGZyYWdtZW50IDogKm1fZnJh
Z21lbnRzKSB7Ci0gICAgICAgICAgICBpZiAoZnJhZ21lbnQuZW5kKCkgPD0gZnJvbSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGF1dG8gY3VycmVudEZyYWdtZW50VHlw
ZSA9IGZyYWdtZW50LnR5cGUoKTsKLSAgICAgICAgICAgIGF1dG8gZXhwYW5zaW9uT3Bwb3J0dW5p
dHkgPSB0aGlzLT5leHBhbnNpb25PcHBvcnR1bml0eShjdXJyZW50RnJhZ21lbnRUeXBlLCBwcmV2
aW91c0ZyYWdtZW50VHlwZSk7Ci0gICAgICAgICAgICBpZiAoZXhwYW5zaW9uT3Bwb3J0dW5pdHkp
Ci0gICAgICAgICAgICAgICAgKytleHBhbnNpb25PcHBvcnR1bml0eUNvdW50OwotICAgICAgICAg
ICAgcHJldmlvdXNGcmFnbWVudFR5cGUgPSBjdXJyZW50RnJhZ21lbnRUeXBlOwotICAgICAgICAg
ICAgaWYgKGZyYWdtZW50LmVuZCgpID49IHRvKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfcGFpcihleHBhbnNpb25PcHBvcnR1bml0eUNvdW50LCBleHBhbnNpb25PcHBvcnR1bml0
eSk7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfcGFpcihleHBhbnNpb25PcHBvcnR1bml0eUNvdW50LCBmYWxzZSk7Ci0g
ICAgfQotCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghbV9s
YXN0RnJhZ21lbnQuaXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGlmICghbV9sYXN0Q29tcGxldGVGcmFnbWVudC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBtX2xhc3RGcmFnbWVudC5vdmVybGFwc1RvTmV4dFJl
bmRlcmVyKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBlbmRQb3NpdGlv
bkZvckNvbGxhcHNlZEZyYWdtZW50KGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJh
Z21lbnQmIGZyYWdtZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50LmlzQ29sbGFw
c2VkKCkgPyBmcmFnbWVudC5zdGFydCgpICsgMSA6IGZyYWdtZW50LmVuZCgpOwotICAgIH0KLQot
ICAgIHZvaWQgYXBwZW5kRnJhZ21lbnRBbmRDcmVhdGVSdW5JZk5lZWRlZChjb25zdCBUZXh0RnJh
Z21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudCwgTGF5b3V0OjpSdW5WZWN0b3Im
IHJ1bnMpCi0gICAgewotICAgICAgICAvLyBBZGp1c3QgZW5kIHBvc2l0aW9uIHdoaWxlIGNvbGxh
cHNpbmcuCi0gICAgICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gZW5kUG9zaXRpb25Gb3JDb2xs
YXBzZWRGcmFnbWVudChmcmFnbWVudCk7Ci0gICAgICAgIC8vIE5ldyBsaW5lIG5lZWRzIG5ldyBy
dW4uCi0gICAgICAgIGlmICghbV9ydW5zV2lkdGgpIHsKLSAgICAgICAgICAgIEFTU0VSVCghbV91
bmNvbXBsZXRlZFdpZHRoKTsKLSAgICAgICAgICAgIHJ1bnMuYXBwZW5kKFJ1bihmcmFnbWVudC5z
dGFydCgpLCBlbmRQb3NpdGlvbiwgbV9ydW5zV2lkdGgsIG1fcnVuc1dpZHRoICsgZnJhZ21lbnQu
d2lkdGgoKSwgZmFsc2UsIGZyYWdtZW50Lmhhc0h5cGhlbigpLCBmcmFnbWVudC5pc0xpbmVCcmVh
aygpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBBZHZhbmNlIGxhc3QgY29t
cGxldGVkIGZyYWdtZW50IHdoZW4gdGhlIHByZXZpb3VzIGZyYWdtZW50IGlzIGFsbCBzZXQgKGlu
Y2x1ZGluZyBtdWx0aXBsZSBwYXJ0cyBhY3Jvc3MgcmVuZGVyZXJzKQotICAgICAgICAgICAgaWYg
KChtX2xhc3RGcmFnbWVudC50eXBlKCkgIT0gZnJhZ21lbnQudHlwZSgpKSB8fCAhbV9sYXN0RnJh
Z21lbnQub3ZlcmxhcHNUb05leHRSZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICAgICAgbV9sYXN0
Q29tcGxldGVGcmFnbWVudCA9IG1fbGFzdEZyYWdtZW50OwotICAgICAgICAgICAgICAgIG1fdW5j
b21wbGV0ZWRXaWR0aCA9IGZyYWdtZW50LndpZHRoKCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICBtX3VuY29tcGxldGVkV2lkdGggKz0gZnJhZ21lbnQud2lkdGgoKTsKLSAg
ICAgICAgICAgIC8vIENvbGxhcHNlIG5laWdoYm91cmluZyB3aGl0ZXNwYWNlLCBpZiB0aGV5IGFy
ZSBhY3Jvc3MgbXVsdGlwbGUgcmVuZGVyZXJzIGFuZCBhcmUgbm90IGNvbGxhcHNlZCB5ZXQuCi0g
ICAgICAgICAgICBpZiAobV9sYXN0RnJhZ21lbnQuaXNDb2xsYXBzaWJsZSgpICYmIGZyYWdtZW50
LmlzQ29sbGFwc2libGUoKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChtX2xhc3RGcmFnbWVu
dC5pc0xhc3RJblJlbmRlcmVyKCkpOwotICAgICAgICAgICAgICAgIGlmICghbV9sYXN0RnJhZ21l
bnQuaXNDb2xsYXBzZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBMaW5lIHdpZHRoIG5l
ZWRzIHRvIGJlIGFkanVzdGVkIHNvIHRoYXQgbm93IGl0IHRha2VzIGNvbGxhcHNpbmcgaW50byBj
b25zaWRlcmF0aW9uLgotICAgICAgICAgICAgICAgICAgICBtX3J1bnNXaWR0aCAtPSAobV9sYXN0
RnJhZ21lbnQud2lkdGgoKSAtIG1fY29sbGFwc2VkV2hpdGVzcGFjZVdpZHRoKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBmcmFnbWVudCBpcyBjb2xsYXBzZWQg
Y29tcGxldGVseS4gTm8gcnVuIGlzIG5lZWRlZC4KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBSdW4mIGxhc3RSdW4gPSBydW5zLmxhc3QoKTsKLSAg
ICAgICAgICAgIGlmIChtX2xhc3RGcmFnbWVudC5pc0xhc3RJblJlbmRlcmVyKCkgfHwgbV9sYXN0
RnJhZ21lbnQuaXNDb2xsYXBzZWQoKSB8fCBmcmFnbWVudC5pc0xpbmVCcmVhaygpIHx8IGxhc3RS
dW4uaXNMaW5lQnJlYWspCi0gICAgICAgICAgICAgICAgcnVucy5hcHBlbmQoUnVuKGZyYWdtZW50
LnN0YXJ0KCksIGVuZFBvc2l0aW9uLCBtX3J1bnNXaWR0aCwgbV9ydW5zV2lkdGggKyBmcmFnbWVu
dC53aWR0aCgpLCBmYWxzZSwgZnJhZ21lbnQuaGFzSHlwaGVuKCksIGZyYWdtZW50LmlzTGluZUJy
ZWFrKCkpKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGxhc3RSdW4uZW5k
ID0gZW5kUG9zaXRpb247Ci0gICAgICAgICAgICAgICAgbGFzdFJ1bi5sb2dpY2FsUmlnaHQgKz0g
ZnJhZ21lbnQud2lkdGgoKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIWxhc3RSdW4uaGFzSHlw
aGVuKTsKLSAgICAgICAgICAgICAgICBsYXN0UnVuLmhhc0h5cGhlbiA9IGZyYWdtZW50Lmhhc0h5
cGhlbigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1fcnVuc1dpZHRoICs9
IGZyYWdtZW50LndpZHRoKCk7Ci0gICAgICAgIG1fbGFzdEZyYWdtZW50ID0gZnJhZ21lbnQ7Ci0g
ICAgICAgIGlmIChtX2ZyYWdtZW50cykKLSAgICAgICAgICAgICgqbV9mcmFnbWVudHMpLmFwcGVu
ZChmcmFnbWVudCk7Ci0KLSAgICAgICAgaWYgKGZyYWdtZW50LnR5cGUoKSA9PSBUZXh0RnJhZ21l
bnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlKSB7Ci0gICAgICAgICAgICBtX3Ry
YWlsaW5nV2hpdGVzcGFjZVdpZHRoICs9IGZyYWdtZW50LndpZHRoKCk7Ci0gICAgICAgICAgICBt
X2xhc3RXaGl0ZXNwYWNlRnJhZ21lbnQgPSBmcmFnbWVudDsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggPSAwOwotICAgICAgICAgICAgbV9s
YXN0Tm9uV2hpdGVzcGFjZUZyYWdtZW50ID0gZnJhZ21lbnQ7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoIW1fZmlyc3RDaGFyYWN0ZXJGaXRzKQotICAgICAgICAgICAgbV9maXJzdENoYXJhY3Rl
ckZpdHMgPSBmcmFnbWVudC5zdGFydCgpICsgMSA+IGVuZFBvc2l0aW9uIHx8IG1fcnVuc1dpZHRo
IDw9IG1fYXZhaWxhYmxlV2lkdGg7Ci0gICAgfQotCi0gICAgVGV4dEZyYWdtZW50SXRlcmF0b3I6
OlRleHRGcmFnbWVudCByZXZlcnRUb0xhc3RDb21wbGV0ZUZyYWdtZW50KExheW91dDo6UnVuVmVj
dG9yJiBydW5zKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3VuY29tcGxldGVkV2lkdGgpIHsKLSAg
ICAgICAgICAgIEFTU0VSVChtX2xhc3RGcmFnbWVudCA9PSBtX2xhc3RDb21wbGV0ZUZyYWdtZW50
KTsKLSAgICAgICAgICAgIHJldHVybiBtX2xhc3RGcmFnbWVudDsKLSAgICAgICAgfQotICAgICAg
ICBBU1NFUlQobV9sYXN0RnJhZ21lbnQuaXNWYWxpZCgpKTsKLSAgICAgICAgbV9ydW5zV2lkdGgg
LT0gbV91bmNvbXBsZXRlZFdpZHRoOwotICAgICAgICByZXZlcnRSdW5zKHJ1bnMsIGVuZFBvc2l0
aW9uRm9yQ29sbGFwc2VkRnJhZ21lbnQobV9sYXN0Q29tcGxldGVGcmFnbWVudCksIG1fdW5jb21w
bGV0ZWRXaWR0aCk7Ci0gICAgICAgIG1fdW5jb21wbGV0ZWRXaWR0aCA9IDA7Ci0gICAgICAgIEFT
U0VSVChtX2xhc3RDb21wbGV0ZUZyYWdtZW50LmlzVmFsaWQoKSk7Ci0gICAgICAgIHJldHVybiBt
X2xhc3RDb21wbGV0ZUZyYWdtZW50OwotICAgIH0KLQotICAgIHZvaWQgcmVtb3ZlVHJhaWxpbmdX
aGl0ZXNwYWNlKExheW91dDo6UnVuVmVjdG9yJiBydW5zKQotICAgIHsKLSAgICAgICAgaWYgKCFo
YXNUcmFpbGluZ1doaXRlc3BhY2UoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYg
KG1fbGFzdE5vbldoaXRlc3BhY2VGcmFnbWVudCkgewotICAgICAgICAgICAgYXV0byBuZWVkc1Jl
dmVydGluZyA9IG1fbGFzdE5vbldoaXRlc3BhY2VGcmFnbWVudC0+ZW5kKCkgIT0gbV9sYXN0RnJh
Z21lbnQuZW5kKCk7Ci0gICAgICAgICAgICAvLyBUcmFpbGluZyB3aGl0ZXNwYWNlIGZyYWdtZW50
IG1pZ2h0IGFjdHVhbGx5IGhhdmUgemVybyBsZW5ndGguCi0gICAgICAgICAgICBBU1NFUlQobmVl
ZHNSZXZlcnRpbmcgfHwgIW1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgpOwotICAgICAgICAgICAg
aWYgKG5lZWRzUmV2ZXJ0aW5nKSB7Ci0gICAgICAgICAgICAgICAgcmV2ZXJ0UnVucyhydW5zLCBt
X2xhc3ROb25XaGl0ZXNwYWNlRnJhZ21lbnQtPmVuZCgpLCBtX3RyYWlsaW5nV2hpdGVzcGFjZVdp
ZHRoKTsKLSAgICAgICAgICAgICAgICBtX3J1bnNXaWR0aCAtPSBtX3RyYWlsaW5nV2hpdGVzcGFj
ZVdpZHRoOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV90cmFpbGluZ1doaXRlc3BhY2VX
aWR0aCA9IDA7Ci0gICAgICAgICAgICBtX2xhc3RGcmFnbWVudCA9ICptX2xhc3ROb25XaGl0ZXNw
YWNlRnJhZ21lbnQ7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8g
VGhpcyBsaW5lIGlzIGFsbCB3aGl0ZXNwYWNlLgotICAgICAgICByZXZlcnRBbGxSdW5zT25DdXJy
ZW50TGluZShydW5zKTsKLSAgICAgICAgbV9ydW5zV2lkdGggPSAwOwotICAgICAgICBtX3RyYWls
aW5nV2hpdGVzcGFjZVdpZHRoID0gMDsKLSAgICAgICAgLy8gRklYTUU6IE1ha2UgbV9sYXN0RnJh
Z21lbnQgb3B0aW9uYWwuCi0gICAgICAgIG1fbGFzdEZyYWdtZW50ID0gVGV4dEZyYWdtZW50SXRl
cmF0b3I6OlRleHRGcmFnbWVudCgpOwotICAgIH0KLQotICAgIGZsb2F0IHRyYWlsaW5nV2hpdGVz
cGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aDsgfQot
Ci1wcml2YXRlOgotICAgIGJvb2wgZXhwYW5zaW9uT3Bwb3J0dW5pdHkoVGV4dEZyYWdtZW50SXRl
cmF0b3I6OlRleHRGcmFnbWVudDo6VHlwZSBjdXJyZW50RnJhZ21lbnRUeXBlLCBUZXh0RnJhZ21l
bnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpUeXBlIHByZXZpb3VzRnJhZ21lbnRUeXBlKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIChjdXJyZW50RnJhZ21lbnRUeXBlID09IFRleHRGcmFn
bWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UKLSAgICAgICAgICAgIHx8IChj
dXJyZW50RnJhZ21lbnRUeXBlID09IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6
Ok5vbldoaXRlc3BhY2UgJiYgcHJldmlvdXNGcmFnbWVudFR5cGUgPT0gVGV4dEZyYWdtZW50SXRl
cmF0b3I6OlRleHRGcmFnbWVudDo6Tm9uV2hpdGVzcGFjZSkpOwotICAgIH0KLQotICAgIGZsb2F0
IG1fYXZhaWxhYmxlV2lkdGggeyAwIH07Ci0gICAgZmxvYXQgbV9sb2dpY2FsTGVmdE9mZnNldCB7
IDAgfTsKLSAgICBmbG9hdCBtX3J1bnNXaWR0aCB7IDAgfTsKLSAgICBUZXh0RnJhZ21lbnRJdGVy
YXRvcjo6VGV4dEZyYWdtZW50IG1fb3ZlcmZsb3dlZEZyYWdtZW50OwotICAgIFRleHRGcmFnbWVu
dEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgbV9sYXN0RnJhZ21lbnQ7Ci0gICAgT3B0aW9uYWw8VGV4
dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudD4gbV9sYXN0Tm9uV2hpdGVzcGFjZUZyYWdt
ZW50OwotICAgIE9wdGlvbmFsPFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ+IG1f
bGFzdFdoaXRlc3BhY2VGcmFnbWVudDsKLSAgICBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZy
YWdtZW50IG1fbGFzdENvbXBsZXRlRnJhZ21lbnQ7Ci0gICAgZmxvYXQgbV91bmNvbXBsZXRlZFdp
ZHRoIHsgMCB9OwotICAgIGZsb2F0IG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggeyAwIH07IC8v
IFVzZSB0aGlzIHRvIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIHdpdGhvdXQgcmUtbWVzdXJp
bmcgdGhlIHRleHQuCi0gICAgZmxvYXQgbV9jb2xsYXBzZWRXaGl0ZXNwYWNlV2lkdGggeyAwIH07
Ci0gICAgLy8gSGF2aW5nIG9uZSBjaGFyYWN0ZXIgb24gdGhlIGxpbmUgZG9lcyBub3QgbmVjZXNz
YXJpbHkgbWVhbiBpdCBhY3R1YWxseSBmaXRzLgotICAgIC8vIEZpcnN0IGNoYXJhY3RlciBvZiB0
aGUgZmlyc3QgZnJhZ21lbnQgbWlnaHQgYmUgZm9yY2VkIG9uIHRvIHRoZSBjdXJyZW50IGxpbmUg
ZXZlbiBpZiBpdCBkb2VzIG5vdCBmaXQuCi0gICAgYm9vbCBtX2ZpcnN0Q2hhcmFjdGVyRml0cyB7
IGZhbHNlIH07Ci0gICAgYm9vbCBtX2h5cGhlbmF0aW9uRGlzYWJsZWQgeyBmYWxzZSB9OwotICAg
IE9wdGlvbmFsPFZlY3RvcjxUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50LCAzMD4+
IG1fZnJhZ21lbnRzOwotfTsKLQotc3RhdGljIGZsb2F0IGNvbXB1dGVMaW5lTGVmdChjb25zdCBM
aW5lU3RhdGUmIGxpbmUsIFRleHRBbGlnbk1vZGUgdGV4dEFsaWduLCBmbG9hdCYgaGFuZ2luZ1do
aXRlc3BhY2VXaWR0aCkKLXsKLSAgICBmbG9hdCB0b3RhbFdpZHRoID0gbGluZS53aWR0aCgpIC0g
aGFuZ2luZ1doaXRlc3BhY2VXaWR0aDsKLSAgICBmbG9hdCByZW1haW5pbmdXaWR0aCA9IGxpbmUu
YXZhaWxhYmxlV2lkdGgoKSAtIHRvdGFsV2lkdGg7Ci0gICAgZmxvYXQgbGVmdCA9IGxpbmUubG9n
aWNhbExlZnRPZmZzZXQoKTsKLSAgICBzd2l0Y2ggKHRleHRBbGlnbikgewotICAgIGNhc2UgVGV4
dEFsaWduTW9kZTo6TGVmdDoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExlZnQ6Ci0g
ICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKLSAgICAgICAgaGFuZ2luZ1doaXRlc3BhY2VX
aWR0aCA9IHN0ZDo6bWF4KDAuZiwgc3RkOjptaW4oaGFuZ2luZ1doaXRlc3BhY2VXaWR0aCwgcmVt
YWluaW5nV2lkdGgpKTsKLSAgICAgICAgcmV0dXJuIGxlZnQ7Ci0gICAgY2FzZSBUZXh0QWxpZ25N
b2RlOjpSaWdodDoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0OgotICAgIGNh
c2UgVGV4dEFsaWduTW9kZTo6RW5kOgotICAgICAgICBoYW5naW5nV2hpdGVzcGFjZVdpZHRoID0g
MDsKLSAgICAgICAgcmV0dXJuIGxlZnQgKyBzdGQ6Om1heDxmbG9hdD4ocmVtYWluaW5nV2lkdGgs
IDApOwotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Q2VudGVyOgotICAgIGNhc2UgVGV4dEFsaWdu
TW9kZTo6V2ViS2l0Q2VudGVyOgotICAgICAgICBoYW5naW5nV2hpdGVzcGFjZVdpZHRoID0gc3Rk
OjptYXgoMC5mLCBzdGQ6Om1pbihoYW5naW5nV2hpdGVzcGFjZVdpZHRoLCAocmVtYWluaW5nV2lk
dGggKyAxKSAvIDIpKTsKLSAgICAgICAgcmV0dXJuIGxlZnQgKyBzdGQ6Om1heDxmbG9hdD4ocmVt
YWluaW5nV2lkdGggLyAyLCAwKTsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBib29sIHBy
ZVdyYXAoY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlN0eWxlJiBzdHlsZSkKLXsKLSAgICBy
ZXR1cm4gc3R5bGUud3JhcExpbmVzICYmICFzdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2UgJiYgIXN0
eWxlLmJyZWFrU3BhY2VzOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVMaW5lQ29uc3RyYWlucyhj
b25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIExpbmVTdGF0ZSYgbGluZSwgY29uc3QgTGluZVN0
YXRlJiBwcmV2aW91c0xpbmUsIHVuc2lnbmVkJiBudW1iZXJPZlByZWNlZGluZ0xpbmVzV2l0aEh5
cGhlbiwgY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlN0eWxlJiBzdHlsZSwgYm9vbCBpc0Zp
cnN0TGluZSkKLXsKLSAgICBib29sIHNob3VsZEFwcGx5VGV4dEluZGVudCA9ICFmbG93LmlzQW5v
bnltb3VzKCkgfHwgZmxvdy5wYXJlbnQoKS0+Zmlyc3RDaGlsZCgpID09ICZmbG93OwotICAgIExh
eW91dFVuaXQgaGVpZ2h0ID0gZmxvdy5sb2dpY2FsSGVpZ2h0KCk7Ci0gICAgTGF5b3V0VW5pdCBs
b2dpY2FsSGVpZ2h0ID0gZmxvdy5taW5MaW5lSGVpZ2h0Rm9yUmVwbGFjZWRSZW5kZXJlcihmYWxz
ZSwgMCk7Ci0gICAgbGluZS5zZXRMb2dpY2FsTGVmdE9mZnNldChmbG93LmxvZ2ljYWxMZWZ0T2Zm
c2V0Rm9yTGluZShoZWlnaHQsIERvTm90SW5kZW50VGV4dCwgbG9naWNhbEhlaWdodCkgKyAoc2hv
dWxkQXBwbHlUZXh0SW5kZW50ICYmIGlzRmlyc3RMaW5lID8gZmxvdy50ZXh0SW5kZW50T2Zmc2V0
KCkgOiAwX2x1KSk7Ci0gICAgZmxvYXQgbG9naWNhbFJpZ2h0T2Zmc2V0ID0gZmxvdy5sb2dpY2Fs
UmlnaHRPZmZzZXRGb3JMaW5lKGhlaWdodCwgRG9Ob3RJbmRlbnRUZXh0LCBsb2dpY2FsSGVpZ2h0
KTsKLSAgICBsaW5lLnNldEF2YWlsYWJsZVdpZHRoKHN0ZDo6bWF4PGZsb2F0PigwLCBsb2dpY2Fs
UmlnaHRPZmZzZXQgLSBsaW5lLmxvZ2ljYWxMZWZ0T2Zmc2V0KCkpKTsKLSAgICBpZiAoc3R5bGUu
dGV4dEFsaWduID09IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCi0gICAgICAgIGxpbmUuc2V0TmVl
ZHNBbGxGcmFnbWVudHMoKTsKLSAgICBudW1iZXJPZlByZWNlZGluZ0xpbmVzV2l0aEh5cGhlbiA9
IChwcmV2aW91c0xpbmUuaXNFbXB0eSgpIHx8ICFwcmV2aW91c0xpbmUubGFzdEZyYWdtZW50KCku
aGFzSHlwaGVuKCkpID8gMCA6IG51bWJlck9mUHJlY2VkaW5nTGluZXNXaXRoSHlwaGVuICsgMTsK
LSAgICBpZiAoc3R5bGUuaHlwaGVuTGltaXRMaW5lcyAmJiBudW1iZXJPZlByZWNlZGluZ0xpbmVz
V2l0aEh5cGhlbiA+PSAqc3R5bGUuaHlwaGVuTGltaXRMaW5lcykKLSAgICAgICAgbGluZS5zZXRI
eXBoZW5hdGlvbkRpc2FibGVkKCk7Ci0gICAgbGluZS5zZXRDb2xsYXBlZFdoaXRlc3BhY2VXaWR0
aChzdHlsZS5mb250LnNwYWNlV2lkdGgoKSArIHN0eWxlLndvcmRTcGFjaW5nKTsKLX0KLQotc3Ry
dWN0IFNwbGl0RnJhZ21lbnREYXRhIHsKLSAgICB1bnNpZ25lZCBwb3NpdGlvbjsKLSAgICBmbG9h
dCB3aWR0aDsKLX07Ci1zdGF0aWMgT3B0aW9uYWw8dW5zaWduZWQ+IGh5cGhlblBvc2l0aW9uRm9y
RnJhZ21lbnQoU3BsaXRGcmFnbWVudERhdGEgc3BsaXREYXRhLCBjb25zdCBUZXh0RnJhZ21lbnRJ
dGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudFRvU3BsaXQsCi0gICAgY29uc3QgTGluZVN0
YXRlJiBsaW5lLCBjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvciYgdGV4dEZyYWdtZW50SXRlcmF0
b3IsIGZsb2F0IGF2YWlsYWJsZVdpZHRoKQotewotICAgIGF1dG8mIHN0eWxlID0gdGV4dEZyYWdt
ZW50SXRlcmF0b3Iuc3R5bGUoKTsKLSAgICBpZiAoIXN0eWxlLnNob3VsZEh5cGhlbmF0ZSB8fCBs
aW5lLmlzSHlwaGVuYXRpb25EaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciB3ZWJraXQub3JnL2Iv
MTY5NjEzLiBTZWUgbWF4UHJlZml4V2lkdGggY29tcHV0YXRpb24gaW4gdHJ5SHlwaGVuYXRpbmco
KS4KLSAgICAvLyBJdCBkb2VzIG5vdCB3b3JrIHByb3Blcmx5IHdpdGggbm9uLWNvbGxhcHNlZCBs
ZWFkaW5nIHRhYnMgd2hlbiBmb250IGlzIGVubGFyZ2VkLgotICAgIGF1dG8gYWRqdXN0ZWRBdmFp
bGFibGVXaWR0aCA9IGF2YWlsYWJsZVdpZHRoIC0gc3R5bGUuaHlwaGVuU3RyaW5nV2lkdGg7Ci0g
ICAgaWYgKCFsaW5lLmlzRW1wdHkoKSkKLSAgICAgICAgYWRqdXN0ZWRBdmFpbGFibGVXaWR0aCAr
PSBzdHlsZS5mb250LnNwYWNlV2lkdGgoKTsKLSAgICBpZiAoIWVub3VnaFdpZHRoRm9ySHlwaGVu
YXRpb24oYWRqdXN0ZWRBdmFpbGFibGVXaWR0aCwgc3R5bGUuZm9udC5waXhlbFNpemUoKSkpCi0g
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICAvLyBXZSBtaWdodCBiZSBhYmxlIHRv
IGZpdCB0aGUgaHlwaGVuIGF0IHRoZSBzcGxpdCBwb3NpdGlvbi4KLSAgICBhdXRvIHNwbGl0UG9z
aXRpb25XaXRoSHlwaGVuID0gc3BsaXREYXRhLnBvc2l0aW9uOwotICAgIC8vIEZpbmQgYSBzcGxp
dHRpbmcgcG9zaXRpb24gd2hlcmUgaHlwaGVuIHN1cmVseSBmaXRzLgotICAgIHVuc2lnbmVkIHN0
YXJ0ID0gZnJhZ21lbnRUb1NwbGl0LnN0YXJ0KCk7Ci0gICAgYXV0byBsZWZ0U2lkZVdpZHRoID0g
c3BsaXREYXRhLndpZHRoOwotICAgIHdoaWxlIChsZWZ0U2lkZVdpZHRoICsgc3R5bGUuaHlwaGVu
U3RyaW5nV2lkdGggPiBhdmFpbGFibGVXaWR0aCkgewotICAgICAgICBpZiAoLS1zcGxpdFBvc2l0
aW9uV2l0aEh5cGhlbiA8PSBzdGFydCkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
IC8vIE5vIHNwYWNlIGZvciBoeXBoZW4uCi0gICAgICAgIGxlZnRTaWRlV2lkdGggLT0gdGV4dEZy
YWdtZW50SXRlcmF0b3IudGV4dFdpZHRoKHNwbGl0UG9zaXRpb25XaXRoSHlwaGVuLCBzcGxpdFBv
c2l0aW9uV2l0aEh5cGhlbiArIDEsIDApOwotICAgIH0KLSAgICBBU1NFUlQoc3BsaXRQb3NpdGlv
bldpdGhIeXBoZW4gPiBzdGFydCk7Ci0gICAgcmV0dXJuIHRleHRGcmFnbWVudEl0ZXJhdG9yLmxh
c3RIeXBoZW5Qb3NpdGlvbihmcmFnbWVudFRvU3BsaXQsIHNwbGl0UG9zaXRpb25XaXRoSHlwaGVu
ICsgMSk7Ci19Ci0KLXN0YXRpYyBTcGxpdEZyYWdtZW50RGF0YSBzcGxpdChjb25zdCBUZXh0RnJh
Z21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudCwgZmxvYXQgYXZhaWxhYmxlV2lk
dGgsCi0gICAgY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3ImIHRleHRGcmFnbWVudEl0ZXJhdG9y
KQotewotICAgIEFTU0VSVChhdmFpbGFibGVXaWR0aCA+PSAwKTsKLSAgICBhdXRvIGxlZnQgPSBm
cmFnbWVudC5zdGFydCgpOwotICAgIC8vIFBhdGhvbG9naWNhbCBjYXNlIG9mIChleHRyZW1lbHkp
bG9uZyBzdHJpbmcgYW5kIG5hcnJvdyBsaW5lcy4KLSAgICAvLyBBZGp1c3QgdGhlIHJhbmdlIHNv
IHRoYXQgd2UgY2FuIHBpY2sgYSByZWFzb25hYmxlIG1pZHBvaW50LgotICAgIGF1dG8gYXZlcmFn
ZUNoYXJhY3RlcldpZHRoID0gZnJhZ21lbnQud2lkdGgoKSAvIGZyYWdtZW50Lmxlbmd0aCgpOwot
ICAgIGF1dG8gcmlnaHQgPSBzdGQ6Om1pbjx1bnNpZ25lZD4obGVmdCArICgyICogYXZhaWxhYmxl
V2lkdGggLyBhdmVyYWdlQ2hhcmFjdGVyV2lkdGgpLCBmcmFnbWVudC5lbmQoKSAtIDEpOwotICAg
IC8vIFByZXNlcnZlIHRoZSBsZWZ0IHdpZHRoIGZvciB0aGUgZmluYWwgc3BsaXQgcG9zaXRpb24g
c28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIHJlbWVhc3VyZSB0aGUgbGVmdCBzaWRlIGFnYWluLgot
ICAgIGZsb2F0IGxlZnRTaWRlV2lkdGggPSAwOwotICAgIHdoaWxlIChsZWZ0IDwgcmlnaHQpIHsK
LSAgICAgICAgYXV0byBtaWRkbGUgPSAobGVmdCArIHJpZ2h0KSAvIDI7Ci0gICAgICAgIGF1dG8g
d2lkdGggPSB0ZXh0RnJhZ21lbnRJdGVyYXRvci50ZXh0V2lkdGgoZnJhZ21lbnQuc3RhcnQoKSwg
bWlkZGxlICsgMSwgMCk7Ci0gICAgICAgIGlmICh3aWR0aCA8IGF2YWlsYWJsZVdpZHRoKSB7Ci0g
ICAgICAgICAgICBsZWZ0ID0gbWlkZGxlICsgMTsKLSAgICAgICAgICAgIGxlZnRTaWRlV2lkdGgg
PSB3aWR0aDsKLSAgICAgICAgfSBlbHNlIGlmICh3aWR0aCA+IGF2YWlsYWJsZVdpZHRoKQotICAg
ICAgICAgICAgcmlnaHQgPSBtaWRkbGU7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmln
aHQgPSBtaWRkbGUgKyAxOwotICAgICAgICAgICAgbGVmdFNpZGVXaWR0aCA9IHdpZHRoOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHsgcmlnaHQsIGxl
ZnRTaWRlV2lkdGggfTsKLX0KLQotc3RhdGljIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJh
Z21lbnQgc3BsaXRGcmFnbWVudFRvRml0TGluZShUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZy
YWdtZW50JiBmcmFnbWVudFRvU3BsaXQsCi0gICAgY29uc3QgTGluZVN0YXRlJiBsaW5lLCBjb25z
dCBUZXh0RnJhZ21lbnRJdGVyYXRvciYgdGV4dEZyYWdtZW50SXRlcmF0b3IpCi17Ci0gICAgYXV0
byBhdmFpbGFibGVXaWR0aCA9IGxpbmUuYXZhaWxhYmxlV2lkdGgoKSAtIGxpbmUud2lkdGgoKTsK
LSAgICBhdXRvIHNwbGl0RnJhZ21lbnREYXRhID0gc3BsaXQoZnJhZ21lbnRUb1NwbGl0LCBhdmFp
bGFibGVXaWR0aCwgdGV4dEZyYWdtZW50SXRlcmF0b3IpOwotICAgIE9wdGlvbmFsPHVuc2lnbmVk
PiBoeXBoZW5Qb3NpdGlvbiA9IFdURjo6bnVsbG9wdDsKLSAgICAvLyBEb2VzIGZpcnN0IGNoYXJh
Y3RlciBmaXQgdGhpcyBsaW5lPwotICAgIGlmIChzcGxpdEZyYWdtZW50RGF0YS5wb3NpdGlvbiA9
PSBmcmFnbWVudFRvU3BsaXQuc3RhcnQoKSkgewotICAgICAgICAvLyBLZWVwIGF0IGxlYXN0IG9u
ZSBjaGFyYWN0ZXIgb24gZW1wdHkgbGluZXMuCi0gICAgICAgIGlmIChsaW5lLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIHNwbGl0RnJhZ21lbnREYXRhLndpZHRoID0gdGV4dEZyYWdtZW50SXRlcmF0
b3IudGV4dFdpZHRoKGZyYWdtZW50VG9TcGxpdC5zdGFydCgpLCArK3NwbGl0RnJhZ21lbnREYXRh
LnBvc2l0aW9uLCAwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBoeXBoZW5Qb3NpdGlvbiA9IGh5
cGhlblBvc2l0aW9uRm9yRnJhZ21lbnQoc3BsaXRGcmFnbWVudERhdGEsIGZyYWdtZW50VG9TcGxp
dCwgbGluZSwgdGV4dEZyYWdtZW50SXRlcmF0b3IsIGF2YWlsYWJsZVdpZHRoKTsKLSAgICAgICAg
aWYgKGh5cGhlblBvc2l0aW9uKSB7Ci0gICAgICAgICAgICBzcGxpdEZyYWdtZW50RGF0YS5wb3Np
dGlvbiA9ICpoeXBoZW5Qb3NpdGlvbjsKLSAgICAgICAgICAgIHNwbGl0RnJhZ21lbnREYXRhLndp
ZHRoID0gdGV4dEZyYWdtZW50SXRlcmF0b3IudGV4dFdpZHRoKGZyYWdtZW50VG9TcGxpdC5zdGFy
dCgpLCBzcGxpdEZyYWdtZW50RGF0YS5wb3NpdGlvbiwgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgLy8gSWYgdGhlIHJpZ2h0IHNpZGUgc3VyZWx5IGRvZXMgbm90IGZpdCB0aGUgKG5leHQpbGlu
ZSwgd2UgZG9uJ3QgbmVlZCB0aGUgd2lkdGggdG8gYmUga2VybmluZy9saWdhdHVyZSBhZGp1c3Rl
ZC4KLSAgICAvLyBQYXJ0IG9mIGl0IGdldHMgcmUtbWVhc3VyZWQgYXMgdGhlIGxlZnQgc2lkZSBk
dXJpbmcgbmV4dCBzcGxpdC4KLSAgICAvLyBUaGlzIHNhdmVzIG1lYXN1cmluZyBsb25nIGNodW5r
IG9mIHRleHQgcmVwZWF0ZWRseSAoc2VlIHBhdGhvbG9naWNhbCBjYXNlIGF0IDo6c3BsaXQpLgot
ICAgIGF1dG8gcmlnaHRTaWRlV2lkdGggPSBmcmFnbWVudFRvU3BsaXQud2lkdGgoKSAtIHNwbGl0
RnJhZ21lbnREYXRhLndpZHRoOwotICAgIGlmIChyaWdodFNpZGVXaWR0aCA8IDIgKiBhdmFpbGFi
bGVXaWR0aCkKLSAgICAgICAgcmlnaHRTaWRlV2lkdGggPSB0ZXh0RnJhZ21lbnRJdGVyYXRvci50
ZXh0V2lkdGgoc3BsaXRGcmFnbWVudERhdGEucG9zaXRpb24sIGZyYWdtZW50VG9TcGxpdC5lbmQo
KSwgMCk7Ci0gICAgcmV0dXJuIGh5cGhlblBvc2l0aW9uID8gZnJhZ21lbnRUb1NwbGl0LnNwbGl0
V2l0aEh5cGhlbihzcGxpdEZyYWdtZW50RGF0YS5wb3NpdGlvbiwgdGV4dEZyYWdtZW50SXRlcmF0
b3Iuc3R5bGUoKS5oeXBoZW5TdHJpbmdXaWR0aCwKLSAgICAgICAgc3BsaXRGcmFnbWVudERhdGEu
d2lkdGgsIHJpZ2h0U2lkZVdpZHRoKSA6IGZyYWdtZW50VG9TcGxpdC5zcGxpdChzcGxpdEZyYWdt
ZW50RGF0YS5wb3NpdGlvbiwgc3BsaXRGcmFnbWVudERhdGEud2lkdGgsIHJpZ2h0U2lkZVdpZHRo
KTsKLX0KLQotZW51bSBQcmVXcmFwTGluZUJyZWFrUnVsZSB7IFByZXNlcnZlLCBJZ25vcmUgfTsK
LQotc3RhdGljIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgY29uc3VtZUxpbmVC
cmVha0lmTmVlZGVkKGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIGZy
YWdtZW50LCBUZXh0RnJhZ21lbnRJdGVyYXRvciYgdGV4dEZyYWdtZW50SXRlcmF0b3IsIExpbmVT
dGF0ZSYgbGluZSwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsCi0gICAgUHJlV3JhcExpbmVCcmVh
a1J1bGUgcHJlV3JhcExpbmVCcmVha1J1bGUgPSBQcmVXcmFwTGluZUJyZWFrUnVsZTo6UHJlc2Vy
dmUpCi17Ci0gICAgaWYgKCFmcmFnbWVudC5pc0xpbmVCcmVhaygpKQotICAgICAgICByZXR1cm4g
ZnJhZ21lbnQ7Ci0KLSAgICBib29sIGlzSGFyZExpbmVicmVhayA9IGZyYWdtZW50LnR5cGUoKSA9
PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpIYXJkTGluZUJyZWFrOwotICAg
IC8vIDxicj4gYWx3YXlzIHByb2R1Y2VzIGEgcnVuLiAocmVxdWlyZWQgYnkgdGVzdGluZyBvdXRw
dXQpCi0gICAgaWYgKGlzSGFyZExpbmVicmVhaykKLSAgICAgICAgbGluZS5hcHBlbmRGcmFnbWVu
dEFuZENyZWF0ZVJ1bklmTmVlZGVkKGZyYWdtZW50LCBydW5zKTsKLQotICAgIGF1dG8mIHN0eWxl
ID0gdGV4dEZyYWdtZW50SXRlcmF0b3Iuc3R5bGUoKTsKLSAgICBpZiAoc3R5bGUucHJlc2VydmVO
ZXdsaW5lICYmIHByZVdyYXBMaW5lQnJlYWtSdWxlID09IFByZVdyYXBMaW5lQnJlYWtSdWxlOjpQ
cmVzZXJ2ZSkgewotICAgICAgICBpZiAoIWlzSGFyZExpbmVicmVhaykKLSAgICAgICAgICAgIHJl
dHVybiBmcmFnbWVudDsKLSAgICB9Ci0gICAgcmV0dXJuIHRleHRGcmFnbWVudEl0ZXJhdG9yLm5l
eHRUZXh0RnJhZ21lbnQoKTsKLX0KLQotc3RhdGljIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0
RnJhZ21lbnQgc2tpcFdoaXRlc3BhY2VJZk5lZWRlZChjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRv
cjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudCwgVGV4dEZyYWdtZW50SXRlcmF0b3ImIHRleHRGcmFn
bWVudEl0ZXJhdG9yKQotewotICAgIGlmICghdGV4dEZyYWdtZW50SXRlcmF0b3Iuc3R5bGUoKS5j
b2xsYXBzZVdoaXRlc3BhY2UpCi0gICAgICAgIHJldHVybiBmcmFnbWVudDsKLQotICAgIFRleHRG
cmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgZmlyc3ROb25XaGl0ZXNwYWNlRnJhZ21lbnQg
PSBmcmFnbWVudDsKLSAgICB3aGlsZSAoZmlyc3ROb25XaGl0ZXNwYWNlRnJhZ21lbnQudHlwZSgp
ID09IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UpCi0gICAg
ICAgIGZpcnN0Tm9uV2hpdGVzcGFjZUZyYWdtZW50ID0gdGV4dEZyYWdtZW50SXRlcmF0b3IubmV4
dFRleHRGcmFnbWVudCgpOwotICAgIHJldHVybiBmaXJzdE5vbldoaXRlc3BhY2VGcmFnbWVudDsK
LX0KLQotc3RhdGljIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgZmlyc3RGcmFn
bWVudChUZXh0RnJhZ21lbnRJdGVyYXRvciYgdGV4dEZyYWdtZW50SXRlcmF0b3IsIExpbmVTdGF0
ZSYgY3VycmVudExpbmUsIGNvbnN0IExpbmVTdGF0ZSYgcHJldmlvdXNMaW5lLCBMYXlvdXQ6OlJ1
blZlY3RvciYgcnVucykKLXsKLSAgICAvLyBIYW5kbGUgb3ZlcmZsb3cgZnJhZ21lbnQgZnJvbSBw
cmV2aW91cyBsaW5lLgotICAgIGF1dG8gb3ZlcmZsb3dlZEZyYWdtZW50ID0gcHJldmlvdXNMaW5l
Lm92ZXJmbG93ZWRGcmFnbWVudCgpOwotICAgIGlmIChvdmVyZmxvd2VkRnJhZ21lbnQuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gc2tpcFdoaXRlc3BhY2VJZk5lZWRlZCh0ZXh0RnJhZ21lbnRJ
dGVyYXRvci5uZXh0VGV4dEZyYWdtZW50KCksIHRleHRGcmFnbWVudEl0ZXJhdG9yKTsKLQotICAg
IGlmIChvdmVyZmxvd2VkRnJhZ21lbnQudHlwZSgpICE9IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpU
ZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UpCi0gICAgICAgIHJldHVybiBvdmVyZmxvd2VkRnJhZ21l
bnQ7Ci0KLSAgICAvLyBMZWFkaW5nIHdoaXRlc3BhY2UgaGFuZGxpbmcuCi0gICAgYXV0byYgc3R5
bGUgPSB0ZXh0RnJhZ21lbnRJdGVyYXRvci5zdHlsZSgpOwotICAgIGlmIChzdHlsZS5icmVha1Nw
YWNlcykgewotICAgICAgICAvLyBMZWFkaW5nIHdoaXRlc3BhY2UgY3JlYXRlZCBhZnRlciBicmVh
a2luZyB0aGUgcHJldmlvdXMgbGluZS4KLSAgICAgICAgLy8gQnJlYWtpbmcgYmVmb3JlIHRoZSBm
aXJzdCBzcGFjZSBhZnRlciBhIHdvcmQgaXMgb25seSBhbGxvd2VkIGluIGNvbWJpbmF0aW9uIHdp
dGggYnJlYWstYWxsIG9yIGJyZWFrLXdvcmQuCi0gICAgICAgIGlmIChzdHlsZS5icmVha0ZpcnN0
V29yZE9uT3ZlcmZsb3cgfHwgcHJldmlvdXNMaW5lLmhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpKQot
ICAgICAgICAgICAgcmV0dXJuIG92ZXJmbG93ZWRGcmFnbWVudDsKLSAgICB9Ci0gICAgLy8gU3Bl
Y2lhbCBvdmVyZmxvdyBwcmUtd3JhcCB3aGl0ZXNwYWNlIGhhbmRsaW5nOiBza2lwIHRoZSBvdmVy
Zmxvd2VkIHdoaXRlc3BhY2UgKGV2ZW4gd2hlbiBzdHlsZSBzYXlzIG5vdC1jb2xsYXBzaWJsZSkK
LSAgICAvLyBpZiB3ZSBtYW5hZ2UgdG8gZml0IGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgb24gdGhl
IHByZXZpb3VzIGxpbmUuCi0gICAgaWYgKChzdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2UgfHwgc3R5
bGUud3JhcExpbmVzKSAmJiBwcmV2aW91c0xpbmUuZmlyc3RDaGFyYWN0ZXJGaXRzKCkpIHsKLSAg
ICAgICAgLy8gSWYgc2tpcHBpbmcgdGhlIHdoaXRlc3BhY2UgcHV0cyB1cyBvbiBhIG5ld2xpbmUs
IHNraXAgdGhlIG5ld2xpbmUgdG9vIGFzIHdlIGFscmVhZHkgd3JhcHBlZCB0aGUgbGluZS4KLSAg
ICAgICAgYXV0byBmaXJzdEZyYWdtZW50Q2FuZGlkYXRlID0gY29uc3VtZUxpbmVCcmVha0lmTmVl
ZGVkKHRleHRGcmFnbWVudEl0ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQoKSwgdGV4dEZyYWdtZW50
SXRlcmF0b3IsIGN1cnJlbnRMaW5lLCBydW5zLAotICAgICAgICAgICAgcHJlV3JhcChzdHlsZSkg
PyBQcmVXcmFwTGluZUJyZWFrUnVsZTo6SWdub3JlIDogUHJlV3JhcExpbmVCcmVha1J1bGU6OlBy
ZXNlcnZlKTsKLSAgICAgICAgcmV0dXJuIHNraXBXaGl0ZXNwYWNlSWZOZWVkZWQoZmlyc3RGcmFn
bWVudENhbmRpZGF0ZSwgdGV4dEZyYWdtZW50SXRlcmF0b3IpOwotICAgIH0KLSAgICByZXR1cm4g
c2tpcFdoaXRlc3BhY2VJZk5lZWRlZChvdmVyZmxvd2VkRnJhZ21lbnQsIHRleHRGcmFnbWVudEl0
ZXJhdG9yKTsKLX0KLQotc3RhdGljIHZvaWQgZm9yY2VGcmFnbWVudFRvTGluZShMaW5lU3RhdGUm
IGxpbmUsIFRleHRGcmFnbWVudEl0ZXJhdG9yJiB0ZXh0RnJhZ21lbnRJdGVyYXRvciwgTGF5b3V0
OjpSdW5WZWN0b3ImIHJ1bnMsIGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21l
bnQmIGZyYWdtZW50KQotewotICAgIGxpbmUuYXBwZW5kRnJhZ21lbnRBbmRDcmVhdGVSdW5JZk5l
ZWRlZChmcmFnbWVudCwgcnVucyk7Ci0gICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIG1vcmUgZnJh
Z21lbnRzIHRvIGFkZCB0byB0aGUgY3VycmVudCBsaW5lLgotICAgIGF1dG8gbmV4dEZyYWdtZW50
ID0gdGV4dEZyYWdtZW50SXRlcmF0b3IubmV4dFRleHRGcmFnbWVudCgpOwotICAgIGlmIChmcmFn
bWVudC5vdmVybGFwc1RvTmV4dFJlbmRlcmVyKCkpIHsKLSAgICAgICAgd2hpbGUgKHRydWUpIHsK
LSAgICAgICAgICAgIGlmIChuZXh0RnJhZ21lbnQudHlwZSgpICE9IGZyYWdtZW50LnR5cGUoKSkK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGxpbmUuYXBwZW5kRnJhZ21lbnRB
bmRDcmVhdGVSdW5JZk5lZWRlZChuZXh0RnJhZ21lbnQsIHJ1bnMpOwotICAgICAgICAgICAgLy8g
RG9lcyBpdCBvdmVybGFwIHRvIHRoZSBuZXh0IHNlZ21lbnQ/Ci0gICAgICAgICAgICBpZiAoIW5l
eHRGcmFnbWVudC5vdmVybGFwc1RvTmV4dFJlbmRlcmVyKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgbmV4dEZyYWdtZW50ID0gdGV4dEZyYWdtZW50SXRlcmF0b3IubmV4
dFRleHRGcmFnbWVudCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIFdoZW4gdGhlIGZvcmNl
ZCBmcmFnbWVudCBpcyBmb2xsb3dlZCBieSBlaXRoZXIgd2hpdGVzcGFjZSBhbmQvb3IgbGluZSBi
cmVhaywgY29uc3VtZSB0aGVtIHRvbywgb3RoZXJ3aXNlIHdlIGVuZCB1cCB3aXRoIGFuIGV4dHJh
IHdoaXRlc3BhY2UgYW5kL29yIGxpbmUgYnJlYWsuCi0gICAgbmV4dEZyYWdtZW50ID0gc2tpcFdo
aXRlc3BhY2VJZk5lZWRlZChuZXh0RnJhZ21lbnQsIHRleHRGcmFnbWVudEl0ZXJhdG9yKTsKLSAg
ICBuZXh0RnJhZ21lbnQgPSBjb25zdW1lTGluZUJyZWFrSWZOZWVkZWQobmV4dEZyYWdtZW50LCB0
ZXh0RnJhZ21lbnRJdGVyYXRvciwgbGluZSwgcnVucyk7Ci0gICAgbGluZS5zZXRPdmVyZmxvd2Vk
RnJhZ21lbnQobmV4dEZyYWdtZW50KTsKLX0KLQotc3RhdGljIGJvb2wgY3JlYXRlTGluZVJ1bnMo
TGluZVN0YXRlJiBsaW5lLCBjb25zdCBMaW5lU3RhdGUmIHByZXZpb3VzTGluZSwgTGF5b3V0OjpS
dW5WZWN0b3ImIHJ1bnMsIFRleHRGcmFnbWVudEl0ZXJhdG9yJiB0ZXh0RnJhZ21lbnRJdGVyYXRv
cikKLXsKLSAgICBjb25zdCBhdXRvJiBzdHlsZSA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLnN0eWxl
KCk7Ci0gICAgYm9vbCBsaW5lQ2FuQmVXcmFwcGVkID0gc3R5bGUud3JhcExpbmVzIHx8IHN0eWxl
LmJyZWFrRmlyc3RXb3JkT25PdmVyZmxvdyB8fCBzdHlsZS5icmVha0FueVdvcmRPbk92ZXJmbG93
OwotICAgIGF1dG8gZnJhZ21lbnQgPSBmaXJzdEZyYWdtZW50KHRleHRGcmFnbWVudEl0ZXJhdG9y
LCBsaW5lLCBwcmV2aW91c0xpbmUsIHJ1bnMpOwotICAgIHdoaWxlIChmcmFnbWVudC50eXBlKCkg
IT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6Q29udGVudEVuZCkgewotICAg
ICAgICAvLyBIYXJkIGFuZCBzb2Z0IGxpbmVicmVha3MuCi0gICAgICAgIGlmIChmcmFnbWVudC5p
c0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICAgICAvLyBBZGQgdGhlIG5ldyBsaW5lIGZyYWdtZW50
IG9ubHkgaWYgdGhlcmUncyBub3RoaW5nIG9uIHRoZSBsaW5lLiAob3RoZXJ3aXNlIHRoZSBleHRy
YSBuZXcgbGluZSBjaGFyYWN0ZXIgd291bGQgc2hvdyB1cCBhdCB0aGUgZW5kIG9mIHRoZSBjb250
ZW50LikKLSAgICAgICAgICAgIGlmIChsaW5lLmlzRW1wdHkoKSB8fCBmcmFnbWVudC50eXBlKCkg
PT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6SGFyZExpbmVCcmVhayB8fCBw
cmVXcmFwKHN0eWxlKSB8fCBzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoc3R5bGUudGV4dEFsaWduID09IFRleHRBbGlnbk1vZGU6OlJpZ2h0IHx8IHN0eWxlLnRl
eHRBbGlnbiA9PSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodCkKLSAgICAgICAgICAgICAgICAg
ICAgbGluZS5yZW1vdmVUcmFpbGluZ1doaXRlc3BhY2UocnVucyk7Ci0gICAgICAgICAgICAgICAg
bGluZS5hcHBlbmRGcmFnbWVudEFuZENyZWF0ZVJ1bklmTmVlZGVkKGZyYWdtZW50LCBydW5zKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChsaW5lQ2FuQmVXcmFwcGVkICYmICFsaW5lLmZpdHMoZnJhZ21lbnQud2lkdGgoKSkpIHsKLSAg
ICAgICAgICAgIC8vIE92ZXJmbG93IHdyYXBwaW5nIGJlaGF2aW91cjoKLSAgICAgICAgICAgIC8v
IDEuIFdoaXRlc2FwY2UgY29sbGFwc2Ugb246IHdoaXRlc3BhY2UgaXMgc2tpcHBlZC4gSnVtcCB0
byBuZXh0IGxpbmUuCi0gICAgICAgICAgICAvLyAyLiBXaGl0ZXNwYWNlIGNvbGxhcHNlIG9mZjog
d2hpdGVzcGFjZSBpcyB3cmFwcGVkLgotICAgICAgICAgICAgLy8gMy4gRmlyc3QsIG5vbi13aGl0
ZXNwYWNlIGZyYWdtZW50IGlzIGVpdGhlciB3cmFwcGVkIG9yIGtlcHQgb24gdGhlIGxpbmUuIChk
ZXBlbmRzIG9uIG92ZXJmbG93LXdyYXApCi0gICAgICAgICAgICAvLyA1LiBOb24td2hpdGVzcGFj
ZSBmcmFnbWVudCB3aGVuIHRoZXJlJ3MgYWxyZWFkeSBhbm90aGVyIGZyYWdtZW50IG9uIHRoZSBs
aW5lIGVpdGhlciBnZXRzIHdyYXBwZWQgKHdvcmQtYnJlYWs6IGJyZWFrLWFsbCkKLSAgICAgICAg
ICAgIC8vIG9yIGdldHMgcHVzaGVkIHRvIHRoZSBuZXh0IGxpbmUuCi0gICAgICAgICAgICBib29s
IGVtcHR5TGluZSA9IGxpbmUuaXNFbXB0eSgpOwotICAgICAgICAgICAgLy8gV2hpdGVzcGFjZSBm
cmFnbWVudC4KLSAgICAgICAgICAgIGlmIChmcmFnbWVudC50eXBlKCkgPT0gVGV4dEZyYWdtZW50
SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6V2hpdGVzcGFjZSkgewotICAgICAgICAgICAgICAgIGlm
IChzdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gUHVz
aCBjb2xsYXBhc2VkIHdoaXRlc3BhY2UgdG8gdGhlIG5leHQgbGluZS4KLSAgICAgICAgICAgICAg
ICAgICAgbGluZS5zZXRPdmVyZmxvd2VkRnJhZ21lbnQoZnJhZ21lbnQpOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHN0
eWxlLmJyZWFrU3BhY2VzICYmIGxpbmUuaGFzV2hpdGVzcGFjZUZyYWdtZW50cygpICYmIGZyYWdt
ZW50Lmxlbmd0aCgpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQnJlYWtpbmcgYmVm
b3JlIHRoZSBmaXJzdCBzcGFjZSBhZnRlciBhIHdvcmQgaXMgbm90IGFsbG93ZWQgaWYgdGhlcmUg
YXJlIHByZXZpb3VzIGJyZWFraW5nIG9wcG9ydHVuaXRpZXMgaW4gdGhlIGxpbmUuCi0gICAgICAg
ICAgICAgICAgICAgIHRleHRGcmFnbWVudEl0ZXJhdG9yLnJldmVydFRvRW5kT2ZGcmFnbWVudChs
aW5lLnJldmVydFRvTGFzdENvbXBsZXRlRnJhZ21lbnQocnVucykpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHByZVdy
YXAoc3R5bGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kRnJhZ21lbnRBbmRD
cmVhdGVSdW5JZk5lZWRlZChmcmFnbWVudCwgcnVucyk7Ci0gICAgICAgICAgICAgICAgICAgIGZy
YWdtZW50ID0gdGV4dEZyYWdtZW50SXRlcmF0b3IubmV4dFRleHRGcmFnbWVudChsaW5lLndpZHRo
KCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZnJhZ21lbnQuaXNMaW5lQnJlYWsoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBsaW5l
LnNldE92ZXJmbG93ZWRGcmFnbWVudChmcmFnbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBTcGxpdCB0aGUgd2hp
dGVzcGFjZTsgbGVmdCBwYXJ0IHN0YXlzIG9uIHRoaXMgbGluZSwgcmlnaHQgaXMgcHVzaGVkIHRv
IG5leHQgbGluZS4KLSAgICAgICAgICAgICAgICBsaW5lLnNldE92ZXJmbG93ZWRGcmFnbWVudChz
cGxpdEZyYWdtZW50VG9GaXRMaW5lKGZyYWdtZW50LCBsaW5lLCB0ZXh0RnJhZ21lbnRJdGVyYXRv
cikpOwotICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kRnJhZ21lbnRBbmRDcmVhdGVSdW5JZk5l
ZWRlZChmcmFnbWVudCwgcnVucyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAvLyBOb24td2hpdGVzcGFjZSBmcmFnbWVudC4gKCFzdHlsZS53cmFw
TGluZXM6IGJ1ZzEzODEwMihwcmVzZXJ2ZSBleGlzdGluZyBiZWhhdmlvcikKLSAgICAgICAgICAg
IGlmICgoKGVtcHR5TGluZSAmJiBzdHlsZS5icmVha0ZpcnN0V29yZE9uT3ZlcmZsb3cpIHx8IHN0
eWxlLmJyZWFrQW55V29yZE9uT3ZlcmZsb3cpIHx8ICFzdHlsZS53cmFwTGluZXMpIHsKLSAgICAg
ICAgICAgICAgICAvLyBTcGxpdCB0aGUgZnJhZ21lbnQ7IChtb2RpZmllZClmcmFnbWVudCBzdGF5
cyBvbiB0aGlzIGxpbmUsIG92ZXJmbG93ZWRGcmFnbWVudCBpcyBwdXNoZWQgdG8gbmV4dCBsaW5l
LgotICAgICAgICAgICAgICAgIGxpbmUuc2V0T3ZlcmZsb3dlZEZyYWdtZW50KHNwbGl0RnJhZ21l
bnRUb0ZpdExpbmUoZnJhZ21lbnQsIGxpbmUsIHRleHRGcmFnbWVudEl0ZXJhdG9yKSk7Ci0gICAg
ICAgICAgICAgICAgbGluZS5hcHBlbmRGcmFnbWVudEFuZENyZWF0ZVJ1bklmTmVlZGVkKGZyYWdt
ZW50LCBydW5zKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIEFTU0VSVChmcmFnbWVudC50eXBlKCkgPT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRl
eHRGcmFnbWVudDo6Tm9uV2hpdGVzcGFjZSk7Ci0gICAgICAgICAgICAvLyBGaW5kIG91dCBpZiB0
aGlzIG5vbi13aGl0ZXNwYWNlIGZyYWdtZW50IGhhcyBhIGh5cGhlbiB3aGVyZSB3ZSBjYW4gYnJl
YWsuCi0gICAgICAgICAgICBpZiAoc3R5bGUuc2hvdWxkSHlwaGVuYXRlKSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byBmcmFnbWVudFRvU3BsaXQgPSBmcmFnbWVudDsKLSAgICAgICAgICAgICAgICAv
LyBTcGxpdCBhbmQgY2hlY2sgaWYgd2UgYWN0dWFsbHkgZW5kZWQgdXAgd2l0aCBhIGh5cGhlbi4K
LSAgICAgICAgICAgICAgICBhdXRvIG92ZXJmbG93RnJhZ21lbnQgPSBzcGxpdEZyYWdtZW50VG9G
aXRMaW5lKGZyYWdtZW50VG9TcGxpdCwgbGluZSwgdGV4dEZyYWdtZW50SXRlcmF0b3IpOwotICAg
ICAgICAgICAgICAgIGlmIChmcmFnbWVudFRvU3BsaXQuaGFzSHlwaGVuKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbGluZS5zZXRPdmVyZmxvd2VkRnJhZ21lbnQob3ZlcmZsb3dGcmFnbWVudCk7
Ci0gICAgICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kRnJhZ21lbnRBbmRDcmVhdGVSdW5JZk5l
ZWRlZChmcmFnbWVudFRvU3BsaXQsIHJ1bnMpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gTm8gaHlwaGVuLCBubyBzcGxp
dC4KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIE5vbi1icmVha2FibGUgbm9uLXdoaXRl
c3BhY2UgZmlyc3QgZnJhZ21lbnQuIEFkZCBpdCB0byB0aGUgY3VycmVudCBsaW5lLiAtaXQgb3Zl
cmZsb3dzIHRob3VnaC4KLSAgICAgICAgICAgIGlmIChlbXB0eUxpbmUpIHsKLSAgICAgICAgICAg
ICAgICBmb3JjZUZyYWdtZW50VG9MaW5lKGxpbmUsIHRleHRGcmFnbWVudEl0ZXJhdG9yLCBydW5z
LCBmcmFnbWVudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAvLyBOb24tYnJlYWthYmxlIG5vbi13aGl0ZXNwYWNlIGZyYWdtZW50IHdoZW4gdGhl
cmUncyBhbHJlYWR5IGNvbnRlbnQgb24gdGhlIGxpbmUuIFB1c2ggaXQgdG8gdGhlIG5leHQgbGlu
ZS4KLSAgICAgICAgICAgIEFTU0VSVChsaW5lLmxhc3RGcmFnbWVudCgpLmlzVmFsaWQoKSk7Ci0g
ICAgICAgICAgICBpZiAobGluZS5sYXN0RnJhZ21lbnQoKS5vdmVybGFwc1RvTmV4dFJlbmRlcmVy
KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGZyYWdtZW50IGlzIGEgY29u
dGludWF0aW9uIG9mIGEgcHJldmlvdXMgc2VnbWVudC4gSW4gc3VjaCBjYXNlcywgd2UgbmVlZCB0
byByZW1vdmUgdGhlbSBhbGwuCi0gICAgICAgICAgICAgICAgdGV4dEZyYWdtZW50SXRlcmF0b3Iu
cmV2ZXJ0VG9FbmRPZkZyYWdtZW50KGxpbmUucmV2ZXJ0VG9MYXN0Q29tcGxldGVGcmFnbWVudChy
dW5zKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBsaW5lLnNldE92ZXJmbG93ZWRGcmFnbWVudChmcmFnbWVudCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBsaW5lLmFwcGVuZEZyYWdtZW50QW5kQ3JlYXRlUnVuSWZO
ZWVkZWQoZnJhZ21lbnQsIHJ1bnMpOwotICAgICAgICAvLyBGaW5kIHRoZSBuZXh0IHRleHQgZnJh
Z21lbnQuCi0gICAgICAgIGZyYWdtZW50ID0gdGV4dEZyYWdtZW50SXRlcmF0b3IubmV4dFRleHRG
cmFnbWVudChsaW5lLndpZHRoKCkpOwotICAgIH0KLSAgICByZXR1cm4gKGZyYWdtZW50LnR5cGUo
KSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpDb250ZW50RW5kICYmIGxp
bmUub3ZlcmZsb3dlZEZyYWdtZW50KCkuaXNFbXB0eSgpKSB8fCBsaW5lLm92ZXJmbG93ZWRGcmFn
bWVudCgpLnR5cGUoKSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpDb250
ZW50RW5kOwotfQotCi1zdGF0aWMgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3Io
Ym9vbCBpc0FmdGVyRXhwYW5zaW9uLCBib29sIGxhc3RSdW5PbkxpbmUpCi17Ci0gICAgRXhwYW5z
aW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3I7Ci0gICAgZXhwYW5zaW9uQmVoYXZpb3IgPSBp
c0FmdGVyRXhwYW5zaW9uID8gRm9yYmlkTGVmdEV4cGFuc2lvbiA6IEFsbG93TGVmdEV4cGFuc2lv
bjsKLSAgICBleHBhbnNpb25CZWhhdmlvciB8PSBsYXN0UnVuT25MaW5lID8gRm9yYmlkUmlnaHRF
eHBhbnNpb24gOiBBbGxvd1JpZ2h0RXhwYW5zaW9uOwotICAgIHJldHVybiBleHBhbnNpb25CZWhh
dmlvcjsKLX0KLQotc3RhdGljIHZvaWQganVzdGlmeVJ1bnMoY29uc3QgTGluZVN0YXRlJiBsaW5l
LCBMYXlvdXQ6OlJ1blZlY3RvciYgcnVucywgdW5zaWduZWQgZmlyc3RSdW5JbmRleCkKLXsKLSAg
ICBBU1NFUlQocnVucy5zaXplKCkpOwotICAgIGF1dG8gd2lkdGhUb0Rpc3RyaWJ1dGUgPSBsaW5l
LmF2YWlsYWJsZVdpZHRoKCkgLSBsaW5lLndpZHRoKCk7Ci0gICAgaWYgKHdpZHRoVG9EaXN0cmli
dXRlIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gbGFzdFJ1bkluZGV4ID0gcnVu
cy5zaXplKCkgLSAxOwotICAgIEFTU0VSVChmaXJzdFJ1bkluZGV4IDw9IGxhc3RSdW5JbmRleCk7
Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjx1bnNpZ25lZCwgRXhwYW5zaW9uQmVoYXZpb3I+PiBleHBh
bnNpb25PcHBvcnR1bml0eUxpc3Q7Ci0gICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlD
b3VudE9uVGhpc0xpbmUgPSAwOwotICAgIGF1dG8gaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7Ci0g
ICAgZm9yIChhdXRvIGkgPSBmaXJzdFJ1bkluZGV4OyBpIDw9IGxhc3RSdW5JbmRleDsgKytpKSB7
Ci0gICAgICAgIGNvbnN0IGF1dG8mIHJ1biA9IHJ1bnMuYXQoaSk7Ci0gICAgICAgIHVuc2lnbmVk
IG9wcG9ydHVuaXR5Q291bnRJblJ1biA9IDA7Ci0gICAgICAgIHN0ZDo6dGllKG9wcG9ydHVuaXR5
Q291bnRJblJ1biwgaXNBZnRlckV4cGFuc2lvbikgPSBsaW5lLmV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQocnVuLnN0YXJ0LCBydW4uZW5kKTsKLSAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlM
aXN0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihvcHBvcnR1bml0eUNvdW50SW5SdW4sIGV4cGFuc2lv
bkJlaGF2aW9yKGlzQWZ0ZXJFeHBhbnNpb24sIGkgPT0gbGFzdFJ1bkluZGV4KSkpOwotICAgICAg
ICBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50T25UaGlzTGluZSArPSBvcHBvcnR1bml0eUNvdW50
SW5SdW47Ci0gICAgfQotICAgIGlmICghZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudE9uVGhpc0xp
bmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChleHBhbnNpb25PcHBvcnR1bml0eUxp
c3Quc2l6ZSgpID09IGxhc3RSdW5JbmRleCAtIGZpcnN0UnVuSW5kZXggKyAxKTsKLSAgICBhdXRv
IGV4cGFuc2lvbiA9IHdpZHRoVG9EaXN0cmlidXRlIC8gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3Vu
dE9uVGhpc0xpbmU7Ci0gICAgZmxvYXQgYWNjdW11bGF0ZWRFeHBhbnNpb24gPSAwOwotICAgIGZv
ciAoYXV0byBpID0gZmlyc3RSdW5JbmRleDsgaSA8PSBsYXN0UnVuSW5kZXg7ICsraSkgewotICAg
ICAgICBhdXRvJiBydW4gPSBydW5zLmF0KGkpOwotICAgICAgICB1bnNpZ25lZCBvcHBvcnR1bml0
eUNvdW50SW5SdW47Ci0gICAgICAgIHN0ZDo6dGllKG9wcG9ydHVuaXR5Q291bnRJblJ1biwgcnVu
LmV4cGFuc2lvbkJlaGF2aW9yKSA9IGV4cGFuc2lvbk9wcG9ydHVuaXR5TGlzdC5hdChpIC0gZmly
c3RSdW5JbmRleCk7Ci0gICAgICAgIHJ1bi5leHBhbnNpb24gPSBvcHBvcnR1bml0eUNvdW50SW5S
dW4gKiBleHBhbnNpb247Ci0gICAgICAgIHJ1bi5sb2dpY2FsTGVmdCArPSBhY2N1bXVsYXRlZEV4
cGFuc2lvbjsKLSAgICAgICAgcnVuLmxvZ2ljYWxSaWdodCArPSAoYWNjdW11bGF0ZWRFeHBhbnNp
b24gKyBydW4uZXhwYW5zaW9uKTsKLSAgICAgICAgYWNjdW11bGF0ZWRFeHBhbnNpb24gKz0gcnVu
LmV4cGFuc2lvbjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBUZXh0QWxpZ25Nb2RlIHRleHRBbGlnbkZv
ckxpbmUoY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlN0eWxlJiBzdHlsZSwgYm9vbCBsYXN0
TGluZSkKLXsKLSAgICAvLyBGYWxsYmFjayB0byBUZXh0QWxpZ25Nb2RlOjpMZWZ0IChTVEFSVCkg
YWxpZ25tZW50IGZvciBub24tY29sbGFwc2FibGUgY29udGVudCBhbmQgZm9yIHRoZSBsYXN0IGxp
bmUgYmVmb3JlIGEgZm9yY2VkIGJyZWFrIG9yIHRoZSBlbmQgb2YgdGhlIGJsb2NrLgotICAgIGF1
dG8gdGV4dEFsaWduID0gc3R5bGUudGV4dEFsaWduOwotICAgIGlmICh0ZXh0QWxpZ24gPT0gVGV4
dEFsaWduTW9kZTo6SnVzdGlmeSAmJiAoIXN0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZSB8fCBsYXN0
TGluZSkpCi0gICAgICAgIHRleHRBbGlnbiA9IFRleHRBbGlnbk1vZGU6OkxlZnQ7Ci0gICAgcmV0
dXJuIHRleHRBbGlnbjsKLX0KLQotc3RhdGljIHZvaWQgY2xvc2VMaW5lRW5kaW5nQW5kQWRqdXN0
UnVucyhMaW5lU3RhdGUmIGxpbmUsIExheW91dDo6UnVuVmVjdG9yJiBydW5zLCBPcHRpb25hbDx1
bnNpZ25lZD4gbGFzdFJ1bkluZGV4T2ZQcmV2aW91c0xpbmUsIHVuc2lnbmVkJiBsaW5lQ291bnQs
Ci0gICAgY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3ImIHRleHRGcmFnbWVudEl0ZXJhdG9yLCBi
b29sIGxhc3RMaW5lSW5GbG93KQotewotICAgIGlmICghcnVucy5zaXplKCkgfHwgKGxhc3RSdW5J
bmRleE9mUHJldmlvdXNMaW5lICYmIHJ1bnMuc2l6ZSgpIC0gMSA9PSBsYXN0UnVuSW5kZXhPZlBy
ZXZpb3VzTGluZS52YWx1ZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgYXV0byYg
c3R5bGUgPSB0ZXh0RnJhZ21lbnRJdGVyYXRvci5zdHlsZSgpOwotCi0gICAgaWYgKHN0eWxlLmNv
bGxhcHNlV2hpdGVzcGFjZSkKLSAgICAgICAgbGluZS5yZW1vdmVUcmFpbGluZ1doaXRlc3BhY2Uo
cnVucyk7Ci0KLSAgICBpZiAoIXJ1bnMuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBBZGp1c3QgcnVucycgcG9zaXRpb24gYnkgdGFraW5nIGxpbmUncyBhbGlnbm1lbnQgaW50byBh
Y2NvdW50LgotICAgIGF1dG8gZmlyc3RSdW5JbmRleCA9IGxhc3RSdW5JbmRleE9mUHJldmlvdXNM
aW5lID8gbGFzdFJ1bkluZGV4T2ZQcmV2aW91c0xpbmUudmFsdWUoKSArIDEgOiAwOwotICAgIGF1
dG8gbGluZUxvZ2ljYWxMZWZ0ID0gbGluZS5sb2dpY2FsTGVmdE9mZnNldCgpOwotICAgIGF1dG8g
dGV4dEFsaWduID0gdGV4dEFsaWduRm9yTGluZShzdHlsZSwgbGFzdExpbmVJbkZsb3cgfHwgKGxp
bmUubGFzdEZyYWdtZW50KCkuaXNWYWxpZCgpICYmIGxpbmUubGFzdEZyYWdtZW50KCkudHlwZSgp
ID09IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OkhhcmRMaW5lQnJlYWspKTsK
LQotICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtdGV4dC0zLyN3aGl0ZS1zcGFjZS1w
aGFzZS0yCi0gICAgYm9vbCBzaG91bGRIYW5nVHJhaWxpbmdXaGl0ZXNwYWNlID0gc3R5bGUud3Jh
cExpbmVzICYmIGxpbmUudHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKTsKLSAgICBhdXRvIGhhbmdp
bmdXaGl0ZXNwYWNlV2lkdGggPSBzaG91bGRIYW5nVHJhaWxpbmdXaGl0ZXNwYWNlID8gbGluZS50
cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpIDogMDsKLQotICAgIGlmICh0ZXh0QWxpZ24gPT0gVGV4
dEFsaWduTW9kZTo6SnVzdGlmeSkgewotICAgICAgICBqdXN0aWZ5UnVucyhsaW5lLCBydW5zLCBm
aXJzdFJ1bkluZGV4KTsKLSAgICAgICAgaGFuZ2luZ1doaXRlc3BhY2VXaWR0aCA9IDA7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGxpbmVMb2dpY2FsTGVmdCA9IGNvbXB1dGVMaW5lTGVmdChsaW5lLCB0
ZXh0QWxpZ24sIGhhbmdpbmdXaGl0ZXNwYWNlV2lkdGgpOwotCi0gICAgZm9yIChhdXRvIGkgPSBm
aXJzdFJ1bkluZGV4OyBpIDwgcnVucy5zaXplKCk7ICsraSkgewotICAgICAgICBydW5zW2ldLmxv
Z2ljYWxMZWZ0ICs9IGxpbmVMb2dpY2FsTGVmdDsKLSAgICAgICAgcnVuc1tpXS5sb2dpY2FsUmln
aHQgKz0gbGluZUxvZ2ljYWxMZWZ0OwotICAgIH0KLQotICAgIGlmIChzaG91bGRIYW5nVHJhaWxp
bmdXaGl0ZXNwYWNlICYmIGhhbmdpbmdXaGl0ZXNwYWNlV2lkdGggPCBsaW5lLnRyYWlsaW5nV2hp
dGVzcGFjZVdpZHRoKCkpCi0gICAgICAgIHJ1bnMubGFzdCgpLmxvZ2ljYWxSaWdodCA9IHJ1bnMu
bGFzdCgpLmxvZ2ljYWxSaWdodCAtIChsaW5lLnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkgLSBo
YW5naW5nV2hpdGVzcGFjZVdpZHRoKTsKLQotICAgIHJ1bnMubGFzdCgpLmlzRW5kT2ZMaW5lID0g
dHJ1ZTsKLSAgICArK2xpbmVDb3VudDsKLX0KLQotc3RhdGljIHZvaWQgY3JlYXRlVGV4dFJ1bnMo
TGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIFJlbmRlckJsb2NrRmxvdyYgZmxvdywgdW5zaWduZWQm
IGxpbmVDb3VudCkKLXsKLSAgICBMYXlvdXRVbml0IGJvcmRlckFuZFBhZGRpbmdCZWZvcmUgPSBm
bG93LmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKTsKLSAgICBMYXlvdXRVbml0IGxpbmVIZWlnaHQg
PSBsaW5lSGVpZ2h0RnJvbUZsb3coZmxvdyk7Ci0gICAgTGluZVN0YXRlIGxpbmU7Ci0gICAgdW5z
aWduZWQgbnVtYmVyT2ZQcmVjZWRpbmdMaW5lc1dpdGhIeXBoZW4gPSAwOwotICAgIGJvb2wgaXNF
bmRPZkNvbnRlbnQgPSBmYWxzZTsKLSAgICBUZXh0RnJhZ21lbnRJdGVyYXRvciB0ZXh0RnJhZ21l
bnRJdGVyYXRvciA9IFRleHRGcmFnbWVudEl0ZXJhdG9yKGZsb3cpOwotICAgIE9wdGlvbmFsPHVu
c2lnbmVkPiBsYXN0UnVuSW5kZXhPZlByZXZpb3VzTGluZTsKLSAgICBkbyB7Ci0gICAgICAgIGZs
b3cuc2V0TG9naWNhbEhlaWdodChsaW5lSGVpZ2h0ICogbGluZUNvdW50ICsgYm9yZGVyQW5kUGFk
ZGluZ0JlZm9yZSk7Ci0gICAgICAgIExpbmVTdGF0ZSBwcmV2aW91c0xpbmUgPSBsaW5lOwotICAg
ICAgICBsaW5lID0gTGluZVN0YXRlKCk7Ci0gICAgICAgIHVwZGF0ZUxpbmVDb25zdHJhaW5zKGZs
b3csIGxpbmUsIHByZXZpb3VzTGluZSwgbnVtYmVyT2ZQcmVjZWRpbmdMaW5lc1dpdGhIeXBoZW4s
IHRleHRGcmFnbWVudEl0ZXJhdG9yLnN0eWxlKCksICFsaW5lQ291bnQpOwotICAgICAgICBpc0Vu
ZE9mQ29udGVudCA9IGNyZWF0ZUxpbmVSdW5zKGxpbmUsIHByZXZpb3VzTGluZSwgcnVucywgdGV4
dEZyYWdtZW50SXRlcmF0b3IpOwotICAgICAgICBjbG9zZUxpbmVFbmRpbmdBbmRBZGp1c3RSdW5z
KGxpbmUsIHJ1bnMsIGxhc3RSdW5JbmRleE9mUHJldmlvdXNMaW5lLCBsaW5lQ291bnQsIHRleHRG
cmFnbWVudEl0ZXJhdG9yLCBpc0VuZE9mQ29udGVudCk7Ci0gICAgICAgIGlmIChydW5zLnNpemUo
KSkKLSAgICAgICAgICAgIGxhc3RSdW5JbmRleE9mUHJldmlvdXNMaW5lID0gcnVucy5zaXplKCkg
LSAxOwotICAgIH0gd2hpbGUgKCFpc0VuZE9mQ29udGVudCk7Ci19Ci0KLVJlZjxMYXlvdXQ+IGNy
ZWF0ZShSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCi17Ci0gICAgdW5zaWduZWQgbGluZUNvdW50ID0g
MDsKLSAgICBMYXlvdXQ6OlJ1blZlY3RvciBydW5zOwotICAgIGNyZWF0ZVRleHRSdW5zKHJ1bnMs
IGZsb3csIGxpbmVDb3VudCk7Ci0gICAgcmV0dXJuIExheW91dDo6Y3JlYXRlKHJ1bnMsIGxpbmVD
b3VudCwgZmxvdyk7Ci19Ci0KLVJlZjxMYXlvdXQ+IExheW91dDo6Y3JlYXRlKGNvbnN0IFJ1blZl
Y3RvciYgcnVuVmVjdG9yLCB1bnNpZ25lZCBsaW5lQ291bnQsIGNvbnN0IFJlbmRlckJsb2NrRmxv
dyYgYmxvY2tGbG93KQotewotICAgIHZvaWQqIHNsb3QgPSBXVEY6OmZhc3RNYWxsb2Moc2l6ZW9m
KExheW91dCkgKyBzaXplb2YoUnVuKSAqIHJ1blZlY3Rvci5zaXplKCkpOwotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IChOb3ROdWxsLCBzbG90KSBMYXlvdXQocnVuVmVjdG9yLCBsaW5lQ291bnQs
IGJsb2NrRmxvdykpOwotfQotCi1MYXlvdXQ6OkxheW91dChjb25zdCBSdW5WZWN0b3ImIHJ1blZl
Y3RvciwgdW5zaWduZWQgbGluZUNvdW50LCBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrRmxv
dykKLSAgICA6IG1fbGluZUNvdW50KGxpbmVDb3VudCkKLSAgICAsIG1fcnVuQ291bnQocnVuVmVj
dG9yLnNpemUoKSkKLSAgICAsIG1fYmxvY2tGbG93UmVuZGVyZXIoYmxvY2tGbG93KQotewotICAg
IG1lbWNweShtX3J1bnMsIHJ1blZlY3Rvci5kYXRhKCksIG1fcnVuQ291bnQgKiBzaXplb2YoUnVu
KSk7Ci19Ci0KLWNvbnN0IFJ1blJlc29sdmVyJiBMYXlvdXQ6OnJ1blJlc29sdmVyKCkgY29uc3QK
LXsKLSAgICBpZiAoIW1fcnVuUmVzb2x2ZXIpCi0gICAgICAgIG1fcnVuUmVzb2x2ZXIgPSBtYWtl
VW5pcXVlPFJ1blJlc29sdmVyPihtX2Jsb2NrRmxvd1JlbmRlcmVyLCAqdGhpcyk7Ci0gICAgcmV0
dXJuICptX3J1blJlc29sdmVyOwotfQotCi1MYXlvdXQ6On5MYXlvdXQoKQotewotICAgIHNpbXBs
ZUxpbmVMYXlvdXRXaWxsQmVEZWxldGVkKCp0aGlzKTsKLX0KLQotfQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDhkMTY5MjZjZWMzYi4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25z
dGFudHMuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuaCIKLSNpbmNsdWRl
ICJUZXh0RmxhZ3MuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIENPTVBJ
TEVSKE1TVkMpCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxl
OiA0MjAwKSAvLyBEaXNhYmxlICJ6ZXJvLXNpemVkIGFycmF5IGluIHN0cnVjdC91bmlvbiIgd2Fy
bmluZwotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVyQmxvY2tG
bG93OwotCi1uYW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7Ci0KLWNsYXNzIFJ1blJlc29sdmVy
OwotCi1ib29sIGNhblVzZUZvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmKTsKLWJvb2wgY2FuVXNl
Rm9yQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJCbG9ja0Zsb3cmLCBTdHlsZURpZmZlcmVu
Y2UpOwotQXZvaWRhbmNlUmVhc29uRmxhZ3MgY2FuVXNlRm9yV2l0aFJlYXNvbihjb25zdCBSZW5k
ZXJCbG9ja0Zsb3cmLCBJbmNsdWRlUmVhc29ucyk7Ci0KLXN0cnVjdCBSdW4gewotI2lmIENPTVBJ
TEVSKE1TVkMpCi0gICAgUnVuKCkgeyB9Ci0jZW5kaWYKLSAgICBSdW4odW5zaWduZWQgc3RhcnQs
IHVuc2lnbmVkIGVuZCwgZmxvYXQgbG9naWNhbExlZnQsIGZsb2F0IGxvZ2ljYWxSaWdodCwgYm9v
bCBpc0VuZE9mTGluZSwgYm9vbCBoYXNIeXBoZW4sIGJvb2wgaXNMaW5lQnJlYWspCi0gICAgICAg
IDogZW5kKGVuZCkKLSAgICAgICAgLCBzdGFydChzdGFydCkKLSAgICAgICAgLCBpc0VuZE9mTGlu
ZShpc0VuZE9mTGluZSkKLSAgICAgICAgLCBoYXNIeXBoZW4oaGFzSHlwaGVuKQotICAgICAgICAs
IGlzTGluZUJyZWFrKGlzTGluZUJyZWFrKQotICAgICAgICAsIGxvZ2ljYWxMZWZ0KGxvZ2ljYWxM
ZWZ0KQotICAgICAgICAsIGxvZ2ljYWxSaWdodChsb2dpY2FsUmlnaHQpCi0gICAgeyB9Ci0KLSAg
ICB1bnNpZ25lZCBlbmQ7Ci0gICAgdW5zaWduZWQgc3RhcnQgOiAyOTsKLSAgICB1bnNpZ25lZCBp
c0VuZE9mTGluZSA6IDE7Ci0gICAgdW5zaWduZWQgaGFzSHlwaGVuIDogMTsKLSAgICB1bnNpZ25l
ZCBpc0xpbmVCcmVhayA6IDE7Ci0gICAgZmxvYXQgbG9naWNhbExlZnQ7Ci0gICAgZmxvYXQgbG9n
aWNhbFJpZ2h0OwotICAgIC8vIFRPRE86IE1vdmUgdGhlc2Ugb3B0aW9uYWwgaXRlbXMgb3V0IG9m
IFNpbXBsZUxpbmVMYXlvdXQ6OlJ1biB0byBhIHN1cHBsZW1lbnRhcnkgc3RydWN0dXJlLgotICAg
IGZsb2F0IGV4cGFuc2lvbiB7IDAgfTsKLSAgICBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25C
ZWhhdmlvciB7IEZvcmJpZExlZnRFeHBhbnNpb24gfCBGb3JiaWRSaWdodEV4cGFuc2lvbiB9Owot
fTsKLQotc3RydWN0IFNpbXBsZUxpbmVTdHJ1dCB7Ci0gICAgdW5zaWduZWQgbGluZUJyZWFrOwot
ICAgIGZsb2F0IG9mZnNldDsKLX07Ci0KLWNsYXNzIExheW91dCA6IHB1YmxpYyBSZWZDb3VudGVk
PExheW91dD4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHVz
aW5nIFJ1blZlY3RvciA9IFZlY3RvcjxSdW4sIDEwPjsKLSAgICB1c2luZyBTaW1wbGVMaW5lU3Ry
dXRzID0gVmVjdG9yPFNpbXBsZUxpbmVTdHJ1dCwgND47Ci0gICAgc3RhdGljIFJlZjxMYXlvdXQ+
IGNyZWF0ZShjb25zdCBSdW5WZWN0b3ImLCB1bnNpZ25lZCBsaW5lQ291bnQsIGNvbnN0IFJlbmRl
ckJsb2NrRmxvdyYpOwotCi0gICAgfkxheW91dCgpOwotCi0gICAgdW5zaWduZWQgbGluZUNvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ291bnQ7IH0KLQotICAgIHVuc2lnbmVkIHJ1bkNvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9ydW5Db3VudDsgfQotICAgIGNvbnN0IFJ1biYgcnVuQXQodW5z
aWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9ydW5zW2ldOyB9Ci0KLSAgICB2b2lkIHNldElzUGFn
aW5hdGVkKCkgeyBtX2lzUGFnaW5hdGVkID0gdHJ1ZTsgfQotICAgIGJvb2wgaXNQYWdpbmF0ZWQo
KSBjb25zdCB7IHJldHVybiBtX2lzUGFnaW5hdGVkOyB9Ci0gICAgYm9vbCBoYXNMaW5lU3RydXRz
KCkgY29uc3QgeyByZXR1cm4gIW1fbGluZVN0cnV0cy5pc0VtcHR5KCk7IH0KLSAgICB2b2lkIHNl
dExpbmVTdHJ1dHMoU2ltcGxlTGluZVN0cnV0cyYmIGxpbmVTdHJ1dHMpIHsgbV9saW5lU3RydXRz
ID0gbGluZVN0cnV0czsgfQotICAgIGNvbnN0IFNpbXBsZUxpbmVTdHJ1dHMmIHN0cnV0cygpIGNv
bnN0IHsgcmV0dXJuIG1fbGluZVN0cnV0czsgfQotICAgIGNvbnN0IFJ1blJlc29sdmVyJiBydW5S
ZXNvbHZlcigpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIExheW91dChjb25zdCBSdW5WZWN0b3Im
LCB1bnNpZ25lZCBsaW5lQ291bnQsIGNvbnN0IFJlbmRlckJsb2NrRmxvdyYpOwotCi0gICAgdW5z
aWduZWQgbV9saW5lQ291bnQ7Ci0gICAgdW5zaWduZWQgbV9ydW5Db3VudDsKLSAgICBib29sIG1f
aXNQYWdpbmF0ZWQgeyBmYWxzZSB9OwotICAgIFNpbXBsZUxpbmVTdHJ1dHMgbV9saW5lU3RydXRz
OwotICAgIGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgbV9ibG9ja0Zsb3dSZW5kZXJlcjsKLSAgICBt
dXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxSdW5SZXNvbHZlcj4gbV9ydW5SZXNvbHZlcjsKLSAgICBS
dW4gbV9ydW5zWzBdOwotfTsKLQotUmVmPExheW91dD4gY3JlYXRlKFJlbmRlckJsb2NrRmxvdyYp
OwotCi19Ci19Ci0KLSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkKLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRDb3ZlcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91
dENvdmVyYWdlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc2ODExNjM4Mjgw
Li4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXRDb3ZlcmFnZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNzIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0Q292
ZXJhZ2UuaCIKLQotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJSZW5kZXJCbG9ja0Zs
b3cuaCIKLSNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVy
U3R5bGUuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIK
LSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0
cmVhbS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgU2ltcGxlTGluZUxheW91
dCB7Ci0KLSNpZm5kZWYgTkRFQlVHCi1zdGF0aWMgdm9pZCBwcmludFJlYXNvbihBdm9pZGFuY2VS
ZWFzb24gcmVhc29uLCBUZXh0U3RyZWFtJiBzdHJlYW0pCi17Ci0gICAgc3dpdGNoIChyZWFzb24p
IHsKLSAgICBjYXNlIEZsb3dJc0luc2lkZUFOb25NdWx0aUNvbHVtblRocmVhZDoKLSAgICAgICAg
c3RyZWFtIDw8ICJmbG93IGlzIGluc2lkZSBhIG5vbi1tdWx0aWNvbHVtbiBjb250YWluZXIiOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNIb3Jpem9uYWxXcml0aW5nTW9kZToKLSAg
ICAgICAgc3RyZWFtIDw8ICJob3Jpem9udGFsIHdyaXRpbmcgbW9kZSI7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRmxvd0hhc091dGxpbmU6Ci0gICAgICAgIHN0cmVhbSA8PCAib3V0bGluZSI7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0lzUnVieToKLSAgICAgICAgc3RyZWFtIDw8
ICJydWJ5IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzSGFuZ2luZ1B1bmN0dWF0
aW9uOgotICAgICAgICBzdHJlYW0gPDwgImhhbmdpbmcgcHVuY3R1YXRpb24iOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZsb3dJc1BhZ2luYXRlZDoKLSAgICAgICAgc3RyZWFtIDw8ICJwYWdp
bmF0ZWQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNUZXh0T3ZlcmZsb3c6Ci0g
ICAgICAgIHN0cmVhbSA8PCAidGV4dC1vdmVyZmxvdyI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRmxvd0lzRGVwcmljYXRlZEZsZXhCb3g6Ci0gICAgICAgIHN0cmVhbSA8PCAiZGVwcmljYXRl
ZEZsZXhCb3giOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dQYXJlbnRJc1BsYWNlaG9s
ZGVyRWxlbWVudDoKLSAgICAgICAgc3RyZWFtIDw8ICJwbGFjZWhvbGRlciBlbGVtZW50IjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93UGFyZW50SXNUZXh0QXJlYVdpdGhXcmFwcGluZzoK
LSAgICAgICAgc3RyZWFtIDw8ICJ3cmFwcGluZyB0ZXh0YXJlYSI7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRmxvd0hhc05vblN1cHBvcnRlZENoaWxkOgotICAgICAgICBzdHJlYW0gPDwgIm5l
c3RlZCByZW5kZXJlcnMiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNVbnN1cHBv
cnRlZEZsb2F0OgotICAgICAgICBzdHJlYW0gPDwgImNvbXBsaWNhdGVkIGZsb2F0IjsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzVW5zdXBwb3J0ZWRVbmRlcmxpbmVEZWNvcmF0aW9u
OgotICAgICAgICBzdHJlYW0gPDwgInRleHQtdW5kZXJsaW5lLXBvc2l0aW9uOiB1bmRlciI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc0p1c3RpZmllZE5vbkxhdGluVGV4dDoKLSAg
ICAgICAgc3RyZWFtIDw8ICJ0ZXh0LWFsaWduOiBqdXN0aWZ5IHdpdGggbm9uLWxhdGluIHRleHQi
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNPdmVyZmxvd05vdFZpc2libGU6Ci0g
ICAgICAgIHN0cmVhbSA8PCAib3ZlcmZsb3c6IGhpZGRlbiB8IHNjcm9sbCB8IGF1dG8iOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNXZWJLaXROQlNQTW9kZToKLSAgICAgICAgc3Ry
ZWFtIDw8ICItd2Via2l0LW5ic3AtbW9kZTogc3BhY2UiOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZsb3dJc05vdExUUjoKLSAgICAgICAgc3RyZWFtIDw8ICJkaXIgaXMgbm90IExUUiI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc0xpbmVCb3hDb250YWluUHJvcGVydHk6Ci0g
ICAgICAgIHN0cmVhbSA8PCAibGluZS1ib3gtY29udGFpbiB2YWx1ZSBpbmRpY2F0ZXMgdmFyaWFi
bGUgbGluZSBoZWlnaHQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dJc05vdFRvcFRv
Qm90dG9tOgotICAgICAgICBzdHJlYW0gPDwgIm5vbiB0b3AtdG8tYm90dG9tIGZsb3ciOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNMaW5lQnJlYWs6Ci0gICAgICAgIHN0cmVhbSA8
PCAibGluZS1icmVhayBwcm9wZXJ0eSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hh
c05vbk5vcm1hbFVuaWNvZGVCaURpOgotICAgICAgICBzdHJlYW0gPDwgIm5vbi1ub3JtYWwgVW5p
Y29kZSBiaWRpIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzUlRMT3JkZXJpbmc6
Ci0gICAgICAgIHN0cmVhbSA8PCAiLXdlYmtpdC1ydGwtb3JkZXJpbmciOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZsb3dIYXNMaW5lQWxpZ25FZGdlczoKLSAgICAgICAgc3RyZWFtIDw8ICIt
d2Via2l0LWxpbmUtYWxpZ24gZWRnZXMiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dI
YXNMaW5lU25hcDoKLSAgICAgICAgc3RyZWFtIDw8ICItd2Via2l0LWxpbmUtc25hcCBwcm9wZXJ0
eSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc1RleHRFbXBoYXNpc0ZpbGxPck1h
cms6Ci0gICAgICAgIHN0cmVhbSA8PCAidGV4dC1lbXBoYXNpcyAoZmlsbC9tYXJrKSI7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc1BzZXVkb0ZpcnN0TGluZToKLSAgICAgICAgc3Ry
ZWFtIDw8ICJmaXJzdC1saW5lIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzUHNl
dWRvRmlyc3RMZXR0ZXI6Ci0gICAgICAgIHN0cmVhbSA8PCAiZmlyc3QtbGV0dGVyIjsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzVGV4dENvbWJpbmU6Ci0gICAgICAgIHN0cmVhbSA8
PCAidGV4dCBjb21iaW5lIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzVGV4dEZp
bGxCb3g6Ci0gICAgICAgIHN0cmVhbSA8PCAiYmFja2dyb3VuZC1jb2xvciAodGV4dC1maWxsKSI7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc0JvcmRlckZpdExpbmVzOgotICAgICAg
ICBzdHJlYW0gPDwgIi13ZWJraXQtYm9yZGVyLWZpdCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRmxvd0hhc05vbkF1dG9MaW5lQnJlYWs6Ci0gICAgICAgIHN0cmVhbSA8PCAibGluZS1icmVh
ayBpcyBub3QgYXV0byI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc1RleHRTZWN1
cml0eToKLSAgICAgICAgc3RyZWFtIDw8ICJ0ZXh0LXNlY3VyaXR5IGlzIG5vdCBub25lIjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzU1ZHRm9udDoKLSAgICAgICAgc3RyZWFtIDw8
ICJTVkcgZm9udCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd1RleHRIYXNTb2Z0SHlw
aGVuOgotICAgICAgICBzdHJlYW0gPDwgInNvZnQgaHlwaGVuIGNoYXJhY3RlciI7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRmxvd1RleHRIYXNEaXJlY3Rpb25DaGFyYWN0ZXI6Ci0gICAgICAg
IHN0cmVhbSA8PCAiZGlyZWN0aW9uIGNoYXJhY3RlciI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRmxvd0lzTWlzc2luZ1ByaW1hcnlGb250OgotICAgICAgICBzdHJlYW0gPDwgIm1pc3Npbmcg
cHJpbWFyeSBmb250IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93UHJpbWFyeUZvbnRJ
c0luc3VmZmljaWVudDoKLSAgICAgICAgc3RyZWFtIDw8ICJtaXNzaW5nIGdseXBoIG9yIGdseXBo
IG5lZWRzIGFub3RoZXIgZm9udCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd1RleHRJ
c0NvbWJpbmVUZXh0OgotICAgICAgICBzdHJlYW0gPDwgInRleHQgaXMgY29tYmluZSI7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd1RleHRJc1JlbmRlckNvdW50ZXI6Ci0gICAgICAgIHN0
cmVhbSA8PCAidW5zdXBwb3J0ZWQgUmVuZGVyQ291bnRlciI7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRmxvd1RleHRJc1JlbmRlclF1b3RlOgotICAgICAgICBzdHJlYW0gPDwgInVuc3VwcG9y
dGVkIFJlbmRlclF1b3RlIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93VGV4dElzVGV4
dEZyYWdtZW50OgotICAgICAgICBzdHJlYW0gPDwgInVuc3VwcG9ydGVkIFRleHRGcmFnbWVudCI7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd1RleHRJc1NWR0lubGluZVRleHQ6Ci0gICAg
ICAgIHN0cmVhbSA8PCAidW5zdXBwb3J0ZWQgU1ZHSW5saW5lVGV4dCI7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRmxvd0hhc0NvbXBsZXhGb250Q29kZVBhdGg6Ci0gICAgICAgIHN0cmVhbSA8
PCAidGV4dCB3aXRoIGNvbXBsZXggZm9udCBjb2RlcGF0aCI7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRmxvd0hhc1RleHRTaGFkb3c6Ci0gICAgICAgIHN0cmVhbSA8PCAidGV4dC1zaGFkb3ci
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dDaGlsZElzU2VsZWN0ZWQ6Ci0gICAgICAg
IHN0cmVhbSA8PCAic2VsZWN0ZWQgY29udGVudCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Rmxvd0ZvbnRIYXNPdmVyZmxvd0dseXBoOgotICAgICAgICBzdHJlYW0gPDwgIi13ZWJraXQtbGlu
ZS1ib3gtY29udGFpbjogZ2x5cGhzIHdpdGggb3ZlcmZsb3dpbmcgdGV4dC4iOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZsb3dUZXh0SGFzU3Vycm9nYXRlUGFpcjoKLSAgICAgICAgc3RyZWFt
IDw8ICJzdXJyb2dhdGUgcGFpciI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTXVsdGlDb2x1
bW5GbG93SXNOb3RUb3BMZXZlbDoKLSAgICAgICAgc3RyZWFtIDw8ICJub24gdG9wIGxldmVsIGNv
bHVtbiI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTXVsdGlDb2x1bW5GbG93SGFzQ29sdW1u
U3Bhbm5lcjoKLSAgICAgICAgc3RyZWFtIDw8ICJjb2x1bW4gaGFzIHNwYW5uZXIiOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIE11bHRpQ29sdW1uRmxvd1ZlcnRpY2FsQWxpZ246Ci0gICAgICAg
IHN0cmVhbSA8PCAiY29sdW1uIHdpdGggdmVydGljYWwtYWxpZ24gIT0gYmFzZWxpbmUiOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIE11bHRpQ29sdW1uRmxvd0lzRmxvYXRpbmc6Ci0gICAgICAg
IHN0cmVhbSA8PCAiY29sdW1uIHdpdGggZmxvYXRpbmcgb2JqZWN0cyI7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRmxvd0luY2x1ZGVzRG9jdW1lbnRNYXJrZXJzOgotICAgICAgICBzdHJlYW0g
PDwgInRleHQgaW5jbHVkZXMgZG9jdW1lbnQgbWFya2VycyI7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRmxvd1RleHRJc0VtcHR5OgotICAgIGNhc2UgRmxvd0hhc05vQ2hpbGQ6Ci0gICAgY2Fz
ZSBGbG93SGFzTm9QYXJlbnQ6Ci0gICAgY2FzZSBGZWF0dXJlSXNEaXNhYmxlZDoKLSAgICBkZWZh
dWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50UmVhc29u
cyhBdm9pZGFuY2VSZWFzb25GbGFncyByZWFzb25zLCBUZXh0U3RyZWFtJiBzdHJlYW0pCi17Ci0g
ICAgYm9vbCBmaXJzdCA9IHRydWU7Ci0gICAgZm9yIChhdXRvIHJlYXNvbkl0ZW0gPSBFbmRPZlJl
YXNvbnMgPj4gMTsgcmVhc29uSXRlbSAhPSBOb1JlYXNvbjsgcmVhc29uSXRlbSA+Pj0gMSkgewot
ICAgICAgICBpZiAoIShyZWFzb25zICYgcmVhc29uSXRlbSkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgc3RyZWFtIDw8IChmaXJzdCA/ICIgIiA6ICIsICIpOwotICAgICAgICBmaXJz
dCA9IGZhbHNlOwotICAgICAgICBwcmludFJlYXNvbihyZWFzb25JdGVtLCBzdHJlYW0pOwotICAg
IH0KLX0KLQotc3RhdGljIHZvaWQgcHJpbnRUZXh0Rm9yU3VidHJlZShjb25zdCBSZW5kZXJPYmpl
Y3QmIHJlbmRlcmVyLCB1bnNpZ25lZCYgY2hhcmFjdGVyc0xlZnQsIFRleHRTdHJlYW0mIHN0cmVh
bSkKLXsKLSAgICBpZiAoIWNoYXJhY3RlcnNMZWZ0KQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KGlzPFJlbmRlclRleHQ+KHJlbmRlcmVyKSkgewotICAgICAgICBTdHJpbmcgdGV4dCA9IGRvd25j
YXN0PFJlbmRlclRleHQ+KHJlbmRlcmVyKS50ZXh0KCk7Ci0gICAgICAgIHRleHQgPSB0ZXh0LnN0
cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICB1bnNpZ25lZCBsZW4gPSBzdGQ6Om1pbihjaGFyYWN0
ZXJzTGVmdCwgdGV4dC5sZW5ndGgoKSk7Ci0gICAgICAgIHN0cmVhbSA8PCB0ZXh0LmxlZnQobGVu
KTsKLSAgICAgICAgY2hhcmFjdGVyc0xlZnQgLT0gbGVuOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGlmICghaXM8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIpKQotICAgICAgICByZXR1cm47
Ci0gICAgZm9yIChjb25zdCBhdXRvKiBjaGlsZCA9IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KHJl
bmRlcmVyKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
KQotICAgICAgICBwcmludFRleHRGb3JTdWJ0cmVlKCpjaGlsZCwgY2hhcmFjdGVyc0xlZnQsIHN0
cmVhbSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCB0ZXh0TGVuZ3RoRm9yU3VidHJlZShjb25zdCBS
ZW5kZXJPYmplY3QmIHJlbmRlcmVyKQotewotICAgIGlmIChpczxSZW5kZXJUZXh0PihyZW5kZXJl
cikpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJUZXh0PihyZW5kZXJlcikudGV4dCgp
Lmxlbmd0aCgpOwotICAgIGlmICghaXM8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIpKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICB1bnNpZ25lZCB0ZXh0TGVuZ3RoID0gMDsKLSAgICBmb3IgKGNvbnN0
IGF1dG8qIGNoaWxkID0gZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIpLmZpcnN0Q2hp
bGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIHRleHRM
ZW5ndGggKz0gdGV4dExlbmd0aEZvclN1YnRyZWUoKmNoaWxkKTsKLSAgICByZXR1cm4gdGV4dExl
bmd0aDsKLX0KLQotc3RhdGljIHZvaWQgY29sbGVjdE5vbkVtcHR5TGVhZlJlbmRlckJsb2NrRmxv
d3MoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgSGFzaFNldDxjb25zdCBSZW5kZXJCbG9j
a0Zsb3cqPiYgbGVhZlJlbmRlcmVycykKLXsKLSAgICBpZiAoaXM8UmVuZGVyVGV4dD4ocmVuZGVy
ZXIpKSB7Ci0gICAgICAgIGlmICghZG93bmNhc3Q8UmVuZGVyVGV4dD4ocmVuZGVyZXIpLnRleHQo
KS5sZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgLy8gRmluZCBSZW5kZXJC
bG9ja0Zsb3cgYW5jZXN0b3IuCi0gICAgICAgIGZvciAoY29uc3QgYXV0byogY3VycmVudCA9IHJl
bmRlcmVyLnBhcmVudCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50KCkpIHsK
LSAgICAgICAgICAgIGlmICghaXM8UmVuZGVyQmxvY2tGbG93PihjdXJyZW50KSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGxlYWZSZW5kZXJlcnMuYWRkKGRvd25jYXN0
PFJlbmRlckJsb2NrRmxvdz4oY3VycmVudCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWlzPFJlbmRlckVsZW1lbnQ+KHJl
bmRlcmVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZvciAoY29uc3QgYXV0byogY2hpbGQgPSBk
b3duY2FzdDxSZW5kZXJFbGVtZW50PihyZW5kZXJlcikuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY29sbGVjdE5vbkVtcHR5TGVhZlJl
bmRlckJsb2NrRmxvd3MoKmNoaWxkLCBsZWFmUmVuZGVyZXJzKTsKLX0KLQotc3RhdGljIHZvaWQg
Y29sbGVjdE5vbkVtcHR5TGVhZlJlbmRlckJsb2NrRmxvd3NGb3JDdXJyZW50UGFnZShIYXNoU2V0
PGNvbnN0IFJlbmRlckJsb2NrRmxvdyo+JiBsZWFmUmVuZGVyZXJzKQotewotICAgIGZvciAoY29u
c3QgYXV0byogZG9jdW1lbnQgOiBEb2N1bWVudDo6YWxsRG9jdW1lbnRzKCkpIHsKLSAgICAgICAg
aWYgKCFkb2N1bWVudC0+cmVuZGVyVmlldygpIHx8IGRvY3VtZW50LT5iYWNrRm9yd2FyZENhY2hl
U3RhdGUoKSAhPSBEb2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGlmICghZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkgJiYgIWRv
Y3VtZW50LT5pc1hIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBjb2xsZWN0Tm9uRW1wdHlMZWFmUmVuZGVyQmxvY2tGbG93cygqZG9jdW1lbnQtPnJlbmRlclZp
ZXcoKSwgbGVhZlJlbmRlcmVycyk7Ci0gICAgfQotfQotCi12b2lkIHRvZ2dsZVNpbXBsZUxpbmVM
YXlvdXQoKQotewotICAgIGZvciAoYXV0byogZG9jdW1lbnQgOiBEb2N1bWVudDo6YWxsRG9jdW1l
bnRzKCkpIHsKLSAgICAgICAgYXV0byYgc2V0dGluZ3MgPSBkb2N1bWVudC0+bXV0YWJsZVNldHRp
bmdzKCk7Ci0gICAgICAgIHNldHRpbmdzLnNldFNpbXBsZUxpbmVMYXlvdXRFbmFibGVkKCFzZXR0
aW5ncy5zaW1wbGVMaW5lTGF5b3V0RW5hYmxlZCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgcHJpbnRT
aW1wbGVMaW5lTGF5b3V0QmxvY2tMaXN0KCkKLXsKLSAgICBIYXNoU2V0PGNvbnN0IFJlbmRlckJs
b2NrRmxvdyo+IGxlYWZSZW5kZXJlcnM7Ci0gICAgY29sbGVjdE5vbkVtcHR5TGVhZlJlbmRlckJs
b2NrRmxvd3NGb3JDdXJyZW50UGFnZShsZWFmUmVuZGVyZXJzKTsKLSAgICBpZiAoIWxlYWZSZW5k
ZXJlcnMuc2l6ZSgpKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiTm8gdGV4dCBmb3VuZCBpbiB0
aGlzIGRvY3VtZW50XG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBUZXh0U3RyZWFt
IHN0cmVhbTsKLSAgICBzdHJlYW0gPDwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKLSAgICBmb3IgKGNvbnN0IGF1dG8qIGZsb3cgOiBsZWFm
UmVuZGVyZXJzKSB7Ci0gICAgICAgIGF1dG8gcmVhc29uID0gY2FuVXNlRm9yV2l0aFJlYXNvbigq
ZmxvdywgSW5jbHVkZVJlYXNvbnM6OkFsbCk7Ci0gICAgICAgIGlmIChyZWFzb24gPT0gTm9SZWFz
b24pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdW5zaWduZWQgcHJpbnRlZExlbmd0
aCA9IDMwOwotICAgICAgICBzdHJlYW0gPDwgIlwiIjsKLSAgICAgICAgcHJpbnRUZXh0Rm9yU3Vi
dHJlZSgqZmxvdywgcHJpbnRlZExlbmd0aCwgc3RyZWFtKTsKLSAgICAgICAgZm9yICg7cHJpbnRl
ZExlbmd0aCA+IDA7IC0tcHJpbnRlZExlbmd0aCkKLSAgICAgICAgICAgIHN0cmVhbSA8PCAiICI7
Ci0gICAgICAgIHN0cmVhbSA8PCAiXCIoIiA8PCB0ZXh0TGVuZ3RoRm9yU3VidHJlZSgqZmxvdykg
PDwgIik6IjsKLSAgICAgICAgcHJpbnRSZWFzb25zKHJlYXNvbiwgc3RyZWFtKTsKLSAgICAgICAg
c3RyZWFtIDw8ICJcbiI7Ci0gICAgfQotICAgIHN0cmVhbSA8PCAiLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iOwotICAgIFdURkxvZ0Fsd2F5cygi
JXMiLCBzdHJlYW0ucmVsZWFzZSgpLnV0ZjgoKS5kYXRhKCkpOwotfQotCi12b2lkIHByaW50U2lt
cGxlTGluZUxheW91dENvdmVyYWdlKCkKLXsKLSAgICBIYXNoU2V0PGNvbnN0IFJlbmRlckJsb2Nr
Rmxvdyo+IGxlYWZSZW5kZXJlcnM7Ci0gICAgY29sbGVjdE5vbkVtcHR5TGVhZlJlbmRlckJsb2Nr
Rmxvd3NGb3JDdXJyZW50UGFnZShsZWFmUmVuZGVyZXJzKTsKLSAgICBpZiAoIWxlYWZSZW5kZXJl
cnMuc2l6ZSgpKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiTm8gdGV4dCBmb3VuZCBpbiB0aGlz
IGRvY3VtZW50XG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBUZXh0U3RyZWFtIHN0
cmVhbTsKLSAgICBIYXNoTWFwPEF2b2lkYW5jZVJlYXNvbiwgdW5zaWduZWQ+IGZsb3dTdGF0aXN0
aWNzOwotICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSAwOwotICAgIHVuc2lnbmVkIHVuc3VwcG9y
dGVkVGV4dExlbmd0aCA9IDA7Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZVbnN1cHBvcnRlZExlYWZC
bG9ja3MgPSAwOwotICAgIHVuc2lnbmVkIHN1cHBvcnRlZEJ1dEZvcmNlZFRvTGluZUxheW91dFRl
eHRMZW5ndGggPSAwOwotICAgIHVuc2lnbmVkIG51bWJlck9mU3VwcG9ydGVkQnV0Rm9yY2VkVG9M
aW5lTGF5b3V0TGVhZkJsb2NrcyA9IDA7Ci0gICAgZm9yIChjb25zdCBhdXRvKiBmbG93IDogbGVh
ZlJlbmRlcmVycykgewotICAgICAgICBhdXRvIGZsb3dMZW5ndGggPSB0ZXh0TGVuZ3RoRm9yU3Vi
dHJlZSgqZmxvdyk7Ci0gICAgICAgIHRleHRMZW5ndGggKz0gZmxvd0xlbmd0aDsKLSAgICAgICAg
YXV0byByZWFzb25zID0gY2FuVXNlRm9yV2l0aFJlYXNvbigqZmxvdywgSW5jbHVkZVJlYXNvbnM6
OkFsbCk7Ci0gICAgICAgIGlmIChyZWFzb25zID09IE5vUmVhc29uKSB7Ci0gICAgICAgICAgICBp
ZiAoZmxvdy0+bGluZUxheW91dFBhdGgoKSA9PSBSZW5kZXJCbG9ja0Zsb3c6OkZvcmNlTGluZUJv
eGVzUGF0aCkgewotICAgICAgICAgICAgICAgIHN1cHBvcnRlZEJ1dEZvcmNlZFRvTGluZUxheW91
dFRleHRMZW5ndGggKz0gZmxvd0xlbmd0aDsKLSAgICAgICAgICAgICAgICArK251bWJlck9mU3Vw
cG9ydGVkQnV0Rm9yY2VkVG9MaW5lTGF5b3V0TGVhZkJsb2NrczsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgICsrbnVtYmVyT2ZVbnN1cHBv
cnRlZExlYWZCbG9ja3M7Ci0gICAgICAgIHVuc3VwcG9ydGVkVGV4dExlbmd0aCArPSBmbG93TGVu
Z3RoOwotICAgICAgICBmb3IgKGF1dG8gcmVhc29uSXRlbSA9IEVuZE9mUmVhc29ucyA+PiAxOyBy
ZWFzb25JdGVtICE9IE5vUmVhc29uOyByZWFzb25JdGVtID4+PSAxKSB7Ci0gICAgICAgICAgICBp
ZiAoIShyZWFzb25zICYgcmVhc29uSXRlbSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGZsb3dTdGF0aXN0aWNzLmFkZChyZWFzb25JdGVtLCBm
bG93TGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAg
ICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSArPSBmbG93TGVuZ3RoOwotICAgICAgICB9
Ci0gICAgfQotICAgIHN0cmVhbSA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tXG4iOwotICAgIHN0cmVhbSA8PCAiTnVtYmVyIG9mIGJsb2Nrczog
dG90YWwoIiA8PCAgbGVhZlJlbmRlcmVycy5zaXplKCkgPDwgIikgbm9uLXNpbXBsZSgiIDw8IG51
bWJlck9mVW5zdXBwb3J0ZWRMZWFmQmxvY2tzIDw8ICIpXG5Db250ZW50IGxlbmd0aDogdG90YWwo
IiA8PAotICAgICAgICB0ZXh0TGVuZ3RoIDw8ICIpIG5vbi1zaW1wbGUoIiA8PCB1bnN1cHBvcnRl
ZFRleHRMZW5ndGggPDwgIilcbiI7Ci0gICAgZm9yIChjb25zdCBhdXRvJiByZWFzb25FbnRyeSA6
IGZsb3dTdGF0aXN0aWNzKSB7Ci0gICAgICAgIHByaW50UmVhc29uKHJlYXNvbkVudHJ5LmtleSwg
c3RyZWFtKTsKLSAgICAgICAgc3RyZWFtIDw8ICI6ICIgPDwgKGZsb2F0KXJlYXNvbkVudHJ5LnZh
bHVlIC8gKGZsb2F0KXRleHRMZW5ndGggKiAxMDAgPDwgIiVcbiI7Ci0gICAgfQotICAgIGlmIChz
dXBwb3J0ZWRCdXRGb3JjZWRUb0xpbmVMYXlvdXRUZXh0TGVuZ3RoKSB7Ci0gICAgICAgIHN0cmVh
bSA8PCAiU2ltcGxlIGxpbmUgbGF5b3V0IHBvdGVudGlhbCBjb3ZlcmFnZTogIiA8PCAoZmxvYXQp
KHRleHRMZW5ndGggLSB1bnN1cHBvcnRlZFRleHRMZW5ndGgpIC8gKGZsb2F0KXRleHRMZW5ndGgg
KiAxMDAgPDwgIiVcblxuIjsKLSAgICAgICAgc3RyZWFtIDw8ICJTaW1wbGUgbGluZSBsYXlvdXQg
YWN0dWFsIGNvdmVyYWdlOiAiIDw8IChmbG9hdCkodGV4dExlbmd0aCAtIHVuc3VwcG9ydGVkVGV4
dExlbmd0aCAtIHN1cHBvcnRlZEJ1dEZvcmNlZFRvTGluZUxheW91dFRleHRMZW5ndGgpIC8gKGZs
b2F0KXRleHRMZW5ndGggKiAxMDAgPDwgIiVcbkZvcmNlZCBsaW5lIGxheW91dCBibG9ja3M6ICIg
PDwgbnVtYmVyT2ZTdXBwb3J0ZWRCdXRGb3JjZWRUb0xpbmVMYXlvdXRMZWFmQmxvY2tzIDw8ICIg
Y29udGVudCBsZW5ndGg6ICIgPDwgc3VwcG9ydGVkQnV0Rm9yY2VkVG9MaW5lTGF5b3V0VGV4dExl
bmd0aCA8PCAiKCIgPDwgKGZsb2F0KXN1cHBvcnRlZEJ1dEZvcmNlZFRvTGluZUxheW91dFRleHRM
ZW5ndGggLyAoZmxvYXQpdGV4dExlbmd0aCAqIDEwMCA8PCAiJSkiOwotICAgIH0gZWxzZQotICAg
ICAgICBzdHJlYW0gPDwgIlNpbXBsZSBsaW5lIGxheW91dCBjb3ZlcmFnZTogIiA8PCAoZmxvYXQp
KHRleHRMZW5ndGggLSB1bnN1cHBvcnRlZFRleHRMZW5ndGgpIC8gKGZsb2F0KXRleHRMZW5ndGgg
KiAxMDAgPDwgIiUiOwotICAgIHN0cmVhbSA8PCAiXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7Ci0gICAgV1RGTG9nQWx3YXlzKCIlcyIsIHN0
cmVhbS5yZWxlYXNlKCkudXRmOCgpLmRhdGEoKSk7Ci19Ci0jZW5kaWYKLQotfQotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODI0ZTk1MGM0YTAuLjAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7Ci0K
LSNpZm5kZWYgTkRFQlVHCi12b2lkIHByaW50U2ltcGxlTGluZUxheW91dENvdmVyYWdlKCk7Ci12
b2lkIHByaW50U2ltcGxlTGluZUxheW91dEJsb2NrTGlzdCgpOwotdm9pZCB0b2dnbGVTaW1wbGVM
aW5lTGF5b3V0KCk7Ci0jZW5kaWYKLQotZW51bSBBdm9pZGFuY2VSZWFzb25fIDogdWludDY0X3Qg
ewotICAgIEZsb3dJc0luc2lkZUFOb25NdWx0aUNvbHVtblRocmVhZCAgICAgPSAxTExVICA8PCAw
LAotICAgIEZsb3dIYXNIb3Jpem9uYWxXcml0aW5nTW9kZSAgICAgICAgICAgPSAxTExVICA8PCAx
LAotICAgIEZsb3dIYXNPdXRsaW5lICAgICAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAy
LAotICAgIEZsb3dJc1J1YnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAz
LAotICAgIEZsb3dJc1BhZ2luYXRlZCAgICAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCA0
LAotICAgIEZsb3dIYXNUZXh0T3ZlcmZsb3cgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCA1
LAotICAgIEZsb3dJc0RlcHJpY2F0ZWRGbGV4Qm94ICAgICAgICAgICAgICAgPSAxTExVICA8PCA2
LAotICAgIEZsb3dQYXJlbnRJc1BsYWNlaG9sZGVyRWxlbWVudCAgICAgICAgPSAxTExVICA8PCA3
LAotICAgIEZsb3dQYXJlbnRJc1RleHRBcmVhV2l0aFdyYXBwaW5nICAgICAgPSAxTExVICA8PCA4
LAotICAgIEZsb3dIYXNOb25TdXBwb3J0ZWRDaGlsZCAgICAgICAgICAgICAgPSAxTExVICA8PCA5
LAotICAgIEZsb3dIYXNVbnN1cHBvcnRlZEZsb2F0ICAgICAgICAgICAgICAgPSAxTExVICA8PCAx
MCwKLSAgICBGbG93SGFzVW5zdXBwb3J0ZWRVbmRlcmxpbmVEZWNvcmF0aW9uID0gMUxMVSAgPDwg
MTEsCi0gICAgRmxvd0hhc0p1c3RpZmllZE5vbkxhdGluVGV4dCAgICAgICAgICA9IDFMTFUgIDw8
IDEyLAotICAgIEZsb3dIYXNPdmVyZmxvd05vdFZpc2libGUgICAgICAgICAgICAgPSAxTExVICA8
PCAxMywKLSAgICBGbG93SGFzV2ViS2l0TkJTUE1vZGUgICAgICAgICAgICAgICAgID0gMUxMVSAg
PDwgMTQsCi0gICAgRmxvd0lzTm90TFRSICAgICAgICAgICAgICAgICAgICAgICAgICA9IDFMTFUg
IDw8IDE1LAotICAgIEZsb3dIYXNMaW5lQm94Q29udGFpblByb3BlcnR5ICAgICAgICAgPSAxTExV
ICA8PCAxNiwKLSAgICBGbG93SXNOb3RUb3BUb0JvdHRvbSAgICAgICAgICAgICAgICAgID0gMUxM
VSAgPDwgMTcsCi0gICAgRmxvd0hhc0xpbmVCcmVhayAgICAgICAgICAgICAgICAgICAgICA9IDFM
TFUgIDw8IDE4LAotICAgIEZsb3dIYXNOb25Ob3JtYWxVbmljb2RlQmlEaSAgICAgICAgICAgPSAx
TExVICA8PCAxOSwKLSAgICBGbG93SGFzUlRMT3JkZXJpbmcgICAgICAgICAgICAgICAgICAgID0g
MUxMVSAgPDwgMjAsCi0gICAgRmxvd0hhc0xpbmVBbGlnbkVkZ2VzICAgICAgICAgICAgICAgICA9
IDFMTFUgIDw8IDIxLAotICAgIEZsb3dIYXNMaW5lU25hcCAgICAgICAgICAgICAgICAgICAgICAg
PSAxTExVICA8PCAyMiwKLSAgICBGbG93SGFzVGV4dEVtcGhhc2lzRmlsbE9yTWFyayAgICAgICAg
ID0gMUxMVSAgPDwgMjMsCi0gICAgRmxvd0hhc1RleHRTaGFkb3cgICAgICAgICAgICAgICAgICAg
ICA9IDFMTFUgIDw8IDI0LAotICAgIEZsb3dIYXNQc2V1ZG9GaXJzdExpbmUgICAgICAgICAgICAg
ICAgPSAxTExVICA8PCAyNSwKLSAgICBGbG93SGFzUHNldWRvRmlyc3RMZXR0ZXIgICAgICAgICAg
ICAgID0gMUxMVSAgPDwgMjYsCi0gICAgRmxvd0hhc1RleHRDb21iaW5lICAgICAgICAgICAgICAg
ICAgICA9IDFMTFUgIDw8IDI3LAotICAgIEZsb3dIYXNUZXh0RmlsbEJveCAgICAgICAgICAgICAg
ICAgICAgPSAxTExVICA8PCAyOCwKLSAgICBGbG93SGFzQm9yZGVyRml0TGluZXMgICAgICAgICAg
ICAgICAgID0gMUxMVSAgPDwgMjksCi0gICAgRmxvd0hhc05vbkF1dG9MaW5lQnJlYWsgICAgICAg
ICAgICAgICA9IDFMTFUgIDw8IDMwLAotICAgIEZsb3dIYXNUZXh0U2VjdXJpdHkgICAgICAgICAg
ICAgICAgICAgPSAxTExVICA8PCAzMSwKLSAgICBGbG93SGFzU1ZHRm9udCAgICAgICAgICAgICAg
ICAgICAgICAgID0gMUxMVSAgPDwgMzIsCi0gICAgRmxvd1RleHRJc0VtcHR5ICAgICAgICAgICAg
ICAgICAgICAgICA9IDFMTFUgIDw8IDMzLAotICAgIEZsb3dUZXh0SGFzU29mdEh5cGhlbiAgICAg
ICAgICAgICAgICAgPSAxTExVICA8PCAzNCwKLSAgICBGbG93VGV4dEhhc0RpcmVjdGlvbkNoYXJh
Y3RlciAgICAgICAgID0gMUxMVSAgPDwgMzUsCi0gICAgRmxvd0lzTWlzc2luZ1ByaW1hcnlGb250
ICAgICAgICAgICAgICA9IDFMTFUgIDw8IDM2LAotICAgIEZsb3dQcmltYXJ5Rm9udElzSW5zdWZm
aWNpZW50ICAgICAgICAgPSAxTExVICA8PCAzNywKLSAgICBGbG93VGV4dElzQ29tYmluZVRleHQg
ICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMzgsCi0gICAgRmxvd1RleHRJc1JlbmRlckNvdW50
ZXIgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDM5LAotICAgIEZsb3dUZXh0SXNSZW5kZXJRdW90
ZSAgICAgICAgICAgICAgICAgPSAxTExVICA8PCA0MCwKLSAgICBGbG93VGV4dElzVGV4dEZyYWdt
ZW50ICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgNDEsCi0gICAgRmxvd1RleHRJc1NWR0lubGlu
ZVRleHQgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDQyLAotICAgIEZsb3dIYXNDb21wbGV4Rm9u
dENvZGVQYXRoICAgICAgICAgICAgPSAxTExVICA8PCA0MywKLSAgICBGZWF0dXJlSXNEaXNhYmxl
ZCAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgNDQsCi0gICAgRmxvd0hhc05vUGFyZW50
ICAgICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDQ1LAotICAgIEZsb3dIYXNOb0NoaWxk
ICAgICAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCA0NiwKLSAgICBGbG93Q2hpbGRJc1Nl
bGVjdGVkICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgNDcsCi0gICAgRmxvd0hhc0hhbmdp
bmdQdW5jdHVhdGlvbiAgICAgICAgICAgICA9IDFMTFUgIDw8IDQ4LAotICAgIEZsb3dGb250SGFz
T3ZlcmZsb3dHbHlwaCAgICAgICAgICAgICAgPSAxTExVICA8PCA0OSwKLSAgICBGbG93VGV4dEhh
c1N1cnJvZ2F0ZVBhaXIgICAgICAgICAgICAgID0gMUxMVSAgPDwgNTAsCi0gICAgTXVsdGlDb2x1
bW5GbG93SXNOb3RUb3BMZXZlbCAgICAgICAgICA9IDFMTFUgIDw8IDUxLAotICAgIE11bHRpQ29s
dW1uRmxvd0hhc0NvbHVtblNwYW5uZXIgICAgICAgPSAxTExVICA8PCA1MiwKLSAgICBNdWx0aUNv
bHVtbkZsb3dWZXJ0aWNhbEFsaWduICAgICAgICAgID0gMUxMVSAgPDwgNTMsCi0gICAgTXVsdGlD
b2x1bW5GbG93SXNGbG9hdGluZyAgICAgICAgICAgICA9IDFMTFUgIDw8IDU0LAotICAgIEZsb3dJ
bmNsdWRlc0RvY3VtZW50TWFya2VycyAgICAgICAgICAgPSAxTExVICA8PCA1NSwKLSAgICBFbmRP
ZlJlYXNvbnMgICAgICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgNTYKLX07Ci1jb25z
dCB1bnNpZ25lZCBOb1JlYXNvbiA9IDA7Ci0KLXR5cGVkZWYgdWludDY0X3QgQXZvaWRhbmNlUmVh
c29uOwotdHlwZWRlZiB1aW50NjRfdCBBdm9pZGFuY2VSZWFzb25GbGFnczsKLQotZW51bSBjbGFz
cyBJbmNsdWRlUmVhc29ucyB7IEZpcnN0ICwgQWxsIH07Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjliMzZhMGYzMjc1Li4wMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29u
dGVudHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRz
LmgiCi0KLSNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJDaGls
ZEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyVGV4dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgU2ltcGxlTGluZUxh
eW91dCB7Ci0KLXN0YXRpYyBWZWN0b3I8Rmxvd0NvbnRlbnRzOjpTZWdtZW50PiBpbml0aWFsaXpl
U2VnbWVudHMoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQotewotICAgIHVuc2lnbmVkIG51
bWJlck9mQ2hpbGRyZW4gPSAwOwotICAgIGF1dG8gY2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxS
ZW5kZXJPYmplY3Q+KGZsb3cpOwotICAgIGZvciAoYXV0byBpdCA9IGNoaWxkcmVuLmJlZ2luKCks
IGVuZCA9IGNoaWxkcmVuLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICsrbnVtYmVy
T2ZDaGlsZHJlbjsKLSAgICBWZWN0b3I8Rmxvd0NvbnRlbnRzOjpTZWdtZW50PiBzZWdtZW50czsK
LSAgICBzZWdtZW50cy5yZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZDaGlsZHJlbik7Ci0gICAgdW5z
aWduZWQgc3RhcnRQb3NpdGlvbiA9IDA7Ci0gICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVu
T2ZUeXBlPFJlbmRlck9iamVjdD4oZmxvdykpIHsKLSAgICAgICAgaWYgKGlzPFJlbmRlclRleHQ+
KGNoaWxkKSkgewotICAgICAgICAgICAgYXV0byYgdGV4dENoaWxkID0gZG93bmNhc3Q8UmVuZGVy
VGV4dD4oY2hpbGQpOwotICAgICAgICAgICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IHRleHRDaGls
ZC50ZXh0KCkubGVuZ3RoKCk7Ci0gICAgICAgICAgICBzZWdtZW50cy5hcHBlbmQoRmxvd0NvbnRl
bnRzOjpTZWdtZW50IHsgc3RhcnRQb3NpdGlvbiwgc3RhcnRQb3NpdGlvbiArIHRleHRMZW5ndGgs
IHRleHRDaGlsZC50ZXh0KCksCi0gICAgICAgICAgICAgICAgdGV4dENoaWxkLCB0ZXh0Q2hpbGQu
Y2FuVXNlU2ltcGxpZmllZFRleHRNZWFzdXJpbmcoKSB9KTsKLSAgICAgICAgICAgIHN0YXJ0UG9z
aXRpb24gKz0gdGV4dExlbmd0aDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChpczxSZW5kZXJMaW5lQnJlYWs+KGNoaWxkKSkgewotICAgICAgICAgICAgc2Vn
bWVudHMuYXBwZW5kKEZsb3dDb250ZW50czo6U2VnbWVudCB7IHN0YXJ0UG9zaXRpb24sIHN0YXJ0
UG9zaXRpb24sIFN0cmluZygpLCBjaGlsZCwgdHJ1ZSB9KTsKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICBy
ZXR1cm4gc2VnbWVudHM7Ci19Ci0KLUZsb3dDb250ZW50czo6Rmxvd0NvbnRlbnRzKGNvbnN0IFJl
bmRlckJsb2NrRmxvdyYgZmxvdykKLSAgICA6IG1fc2VnbWVudHMoaW5pdGlhbGl6ZVNlZ21lbnRz
KGZsb3cpKQotewotfQotCi11bnNpZ25lZCBGbG93Q29udGVudHM6OnNlZ21lbnRJbmRleEZvclJ1
blNsb3codW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkgY29uc3QKLXsKLSAgICBhdXRvIGlz
RW1wdHlSYW5nZSA9IHN0YXJ0ID09IGVuZDsKLSAgICBhdXRvIGl0ID0gc3RkOjpsb3dlcl9ib3Vu
ZChtX3NlZ21lbnRzLmJlZ2luKCksIG1fc2VnbWVudHMuZW5kKCksIHN0YXJ0LCBbaXNFbXB0eVJh
bmdlXShjb25zdCBTZWdtZW50JiBzZWdtZW50LCB1bnNpZ25lZCBzdGFydCkgewotICAgICAgICAv
LyBGSVhNRTogVGhpcyBhbHdheXMgZmluZCB0aGUgZmlyc3QgZW1wdHkgcnVuICgudnMgc3Vic2Vx
dWVudCA8YnI+IGVsZW1lbnRzKQotICAgICAgICByZXR1cm4gKGlzRW1wdHlSYW5nZSAmJiBzZWdt
ZW50LnN0YXJ0ID09IHNlZ21lbnQuZW5kKSA/IHNlZ21lbnQuc3RhcnQgPCBzdGFydCA6IHNlZ21l
bnQuZW5kIDw9IHN0YXJ0OwotICAgIH0pOwotICAgIEFTU0VSVChpdCAhPSBtX3NlZ21lbnRzLmVu
ZCgpKTsKLSAgICBBU1NFUlQoZW5kIDw9IGl0LT5lbmQpOwotICAgIG1fbGFzdFNlZ21lbnRJbmRl
eCA9IGl0IC0gbV9zZWdtZW50cy5iZWdpbigpOwotICAgIHJldHVybiBtX2xhc3RTZWdtZW50SW5k
ZXg7Ci19Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkZTYzZjY4NmFkMTQuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oCisrKyAvZGV2L251bGwKQEAgLTEsODUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiUmVuZGVyT2Jq
ZWN0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFJlbmRlckJsb2NrRmxvdzsKLQot
bmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewotCi1jbGFzcyBGbG93Q29udGVudHMgewotcHVi
bGljOgotICAgIEZsb3dDb250ZW50cyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmKTsKLQotICAgIHN0
cnVjdCBTZWdtZW50IHsKLSAgICAgICAgdW5zaWduZWQgdG9TZWdtZW50UG9zaXRpb24odW5zaWdu
ZWQgcG9zaXRpb24pIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChwb3NpdGlv
biA+PSBzdGFydCk7Ci0gICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gLSBzdGFydDsKLSAgICAg
ICAgfQotICAgICAgICB1bnNpZ25lZCB0b1JlbmRlclBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9u
KSBjb25zdCB7IHJldHVybiBzdGFydCArIHBvc2l0aW9uOyB9Ci0gICAgICAgIHVuc2lnbmVkIHN0
YXJ0OwotICAgICAgICB1bnNpZ25lZCBlbmQ7Ci0gICAgICAgIFN0cmluZ1ZpZXcgdGV4dDsKLSAg
ICAgICAgY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcjsKLSAgICAgICAgYm9vbCBjYW5Vc2VT
aW1wbGlmaWVkVGV4dE1lYXN1cmluZzsKLSAgICB9OwotICAgIGNvbnN0IFNlZ21lbnQmIHNlZ21l
bnRGb3JSdW4odW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkgY29uc3Q7Ci0gICAgY29uc3Qg
U2VnbWVudCYgc2VnbWVudEZvclBvc2l0aW9uKHVuc2lnbmVkKSBjb25zdDsKLQotICAgIHR5cGVk
ZWYgVmVjdG9yPFNlZ21lbnQsIDg+Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsKLSAgICBJdGVy
YXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VnbWVudHMuYmVnaW4oKTsgfQotICAgIEl0
ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VnbWVudHMuZW5kKCk7IH0KLQotcHJpdmF0
ZToKLSAgICB1bnNpZ25lZCBzZWdtZW50SW5kZXhGb3JSdW5TbG93KHVuc2lnbmVkIHN0YXJ0LCB1
bnNpZ25lZCBlbmQpIGNvbnN0OwotICAgIGNvbnN0IFZlY3RvcjxTZWdtZW50PiBtX3NlZ21lbnRz
OwotICAgIG11dGFibGUgdW5zaWduZWQgbV9sYXN0U2VnbWVudEluZGV4IHsgMCB9OwotfTsKLQot
aW5saW5lIGNvbnN0IEZsb3dDb250ZW50czo6U2VnbWVudCYgRmxvd0NvbnRlbnRzOjpzZWdtZW50
Rm9yUnVuKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KHN0YXJ0IDw9IGVuZCk7Ci0gICAgYXV0byBpc0VtcHR5UmFuZ2UgPSBzdGFydCA9PSBlbmQ7Ci0g
ICAgYXV0byYgbGFzdFNlZ21lbnQgPSBtX3NlZ21lbnRzW21fbGFzdFNlZ21lbnRJbmRleF07Ci0g
ICAgaWYgKChsYXN0U2VnbWVudC5zdGFydCA8PSBzdGFydCAmJiBlbmQgPD0gbGFzdFNlZ21lbnQu
ZW5kKSAmJiAoIWlzRW1wdHlSYW5nZSB8fCBlbmQgIT0gbGFzdFNlZ21lbnQuZW5kKSkKLSAgICAg
ICAgcmV0dXJuIG1fc2VnbWVudHNbbV9sYXN0U2VnbWVudEluZGV4XTsKLSAgICByZXR1cm4gbV9z
ZWdtZW50c1tzZWdtZW50SW5kZXhGb3JSdW5TbG93KHN0YXJ0LCBlbmQpXTsKLX0KLQotaW5saW5l
IGNvbnN0IEZsb3dDb250ZW50czo6U2VnbWVudCYgRmxvd0NvbnRlbnRzOjpzZWdtZW50Rm9yUG9z
aXRpb24odW5zaWduZWQgcG9zaXRpb24pIGNvbnN0Ci17Ci0gICAgYXV0byBpdCA9IHN0ZDo6bG93
ZXJfYm91bmQobV9zZWdtZW50cy5iZWdpbigpLCBtX3NlZ21lbnRzLmVuZCgpLCBwb3NpdGlvbiwg
W10oY29uc3QgU2VnbWVudCYgc2VnbWVudCwgdW5zaWduZWQgcG9zaXRpb24pIHsKLSAgICAgICAg
cmV0dXJuIHNlZ21lbnQuZW5kIDw9IHBvc2l0aW9uOwotICAgIH0pOwotICAgIEFTU0VSVChpdCAh
PSBtX3NlZ21lbnRzLmVuZCgpKTsKLSAgICByZXR1cm4gbV9zZWdtZW50c1tpdCAtIG1fc2VnbWVu
dHMuYmVnaW4oKV07Ci19Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMTZjYzBiNmQzODI0Li4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMzc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oIgotCi0jaW5jbHVkZSAiQmlkaVJ1bi5oIgot
I2luY2x1ZGUgIkJpZGlSdW5MaXN0LmgiCi0jaW5jbHVkZSAiRXZlbnRSZWdpb24uaCIKLSNpbmNs
dWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIkhpdFRlc3RMb2NhdGlvbi5oIgotI2luY2x1ZGUgIkhpdFRl
c3RSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgotI2luY2x1ZGUgIklubGlu
ZVRleHRCb3guaCIKLSNpbmNsdWRlICJMaW5lSW5mby5oIgotI2luY2x1ZGUgIlBhaW50SW5mby5o
IgotI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgotI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRl
cmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRlclN0
eWxlLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
LSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGbG93Q29u
dGVudHMuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaCIKLSNpbmNsdWRl
ICJUZXh0LmgiCi0jaW5jbHVkZSAiVGV4dERlY29yYXRpb25QYWludGVyLmgiCi0jaW5jbHVkZSAi
VGV4dFBhaW50U3R5bGUuaCIKLSNpbmNsdWRlICJUZXh0UGFpbnRlci5oIgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KLQotI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKLSNpbmNs
dWRlIDxzdGRpby5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBT
aW1wbGVMaW5lTGF5b3V0IHsKLQotRmxvYXRSZWN0IGNvbXB1dGVPdmVyZmxvdyhjb25zdCBSZW5k
ZXJCbG9ja0Zsb3cmIGZsb3csIGNvbnN0IEZsb2F0UmVjdCYgbGF5b3V0UmVjdCkKLXsKLSAgICBh
dXRvIG92ZXJmbG93UmVjdCA9IGxheW91dFJlY3Q7Ci0gICAgYXV0byB2aWV3cG9ydFNpemUgPSBm
bG93LmZyYW1lKCkudmlldygpID8gZmxvdy5mcmFtZSgpLnZpZXcoKS0+c2l6ZSgpIDogSW50U2l6
ZSgpOwotICAgIGF1dG8gc3Ryb2tlT3ZlcmZsb3cgPSBzdGQ6OmNlaWwoZmxvdy5zdHlsZSgpLmNv
bXB1dGVkU3Ryb2tlV2lkdGgodmlld3BvcnRTaXplKSk7Ci0gICAgb3ZlcmZsb3dSZWN0LmluZmxh
dGUoc3Ryb2tlT3ZlcmZsb3cpOwotCi0gICAgYXV0byBsZXR0ZXJTcGFjaW5nID0gZmxvdy5zdHls
ZSgpLmZvbnRDYXNjYWRlKCkubGV0dGVyU3BhY2luZygpOwotICAgIGlmIChsZXR0ZXJTcGFjaW5n
ID49IDApCi0gICAgICAgIHJldHVybiBvdmVyZmxvd1JlY3Q7Ci0gICAgLy8gTGFzdCBsZXR0ZXIn
cyBuZWdhdGl2ZSBzcGFjaW5nIHNocmlua3MgbGF5b3V0IHJlY3QuIFB1c2ggaXQgdG8gdmlzdWFs
IG92ZXJmbG93LgotICAgIG92ZXJmbG93UmVjdC5leHBhbmQoLWxldHRlclNwYWNpbmcsIDApOwot
ICAgIHJldHVybiBvdmVyZmxvd1JlY3Q7Ci19Ci0KLXZvaWQgcGFpbnRGbG93KGNvbnN0IFJlbmRl
ckJsb2NrRmxvdyYgZmxvdywgY29uc3QgTGF5b3V0JiBsYXlvdXQsIFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCi17Ci0gICAgaWYgKHBhaW50SW5m
by5waGFzZSA9PSBQYWludFBoYXNlOjpFdmVudFJlZ2lvbikgewotICAgICAgICBpZiAoIWZsb3cu
dmlzaWJsZVRvSGl0VGVzdGluZygpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBhdXRv
IHBhaW50UmVjdCA9IHBhaW50SW5mby5yZWN0OwotICAgICAgICBwYWludFJlY3QubW92ZUJ5KC1w
YWludE9mZnNldCk7Ci0gICAgICAgIGZvciAoYXV0byBydW4gOiBsYXlvdXQucnVuUmVzb2x2ZXIo
KS5yYW5nZUZvclJlY3QocGFpbnRSZWN0KSkgewotICAgICAgICAgICAgRmxvYXRSZWN0IHZpc3Vh
bE92ZXJmbG93UmVjdCA9IGNvbXB1dGVPdmVyZmxvdyhmbG93LCBydW4ucmVjdCgpKTsKLSAgICAg
ICAgICAgIHBhaW50SW5mby5ldmVudFJlZ2lvbkNvbnRleHQtPnVuaXRlKGVuY2xvc2luZ0ludFJl
Y3QodmlzdWFsT3ZlcmZsb3dSZWN0KSwgZmxvdy5zdHlsZSgpKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNl
OjpGb3JlZ3JvdW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBzdHlsZSA9IGZsb3cu
c3R5bGUoKTsKLSAgICBpZiAoc3R5bGUudmlzaWJpbGl0eSgpICE9IFZpc2liaWxpdHk6OlZpc2li
bGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRleHRQYWludGVyIHRleHRQYWludGVyKHBhaW50
SW5mby5jb250ZXh0KCkpOwotICAgIHRleHRQYWludGVyLnNldEZvbnQoc3R5bGUuZm9udENhc2Nh
ZGUoKSk7Ci0gICAgdGV4dFBhaW50ZXIuc2V0U3R5bGUoY29tcHV0ZVRleHRQYWludFN0eWxlKGZs
b3cuZnJhbWUoKSwgc3R5bGUsIHBhaW50SW5mbykpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNo
YWRvd0RhdGE+IGRlYnVnU2hhZG93ID0gbnVsbHB0cjsKLSAgICBpZiAoZmxvdy5zZXR0aW5ncygp
LnNpbXBsZUxpbmVMYXlvdXREZWJ1Z0JvcmRlcnNFbmFibGVkKCkpIHsKLSAgICAgICAgZGVidWdT
aGFkb3cgPSBtYWtlVW5pcXVlPFNoYWRvd0RhdGE+KEludFBvaW50KDAsIDApLCAxMCwgMjAsIFNo
YWRvd1N0eWxlOjpOb3JtYWwsIHRydWUsIENvbG9yOjpncmVlbi5jb2xvcldpdGhBbHBoYUJ5dGUo
MjAwKSk7Ci0gICAgICAgIHRleHRQYWludGVyLnNldFNoYWRvdyhkZWJ1Z1NoYWRvdy5nZXQoKSk7
Ci0gICAgfQotCi0gICAgT3B0aW9uYWw8VGV4dERlY29yYXRpb25QYWludGVyPiB0ZXh0RGVjb3Jh
dGlvblBhaW50ZXI7Ci0gICAgaWYgKCFzdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpLmlz
RW1wdHkoKSkgewotICAgICAgICBjb25zdCBSZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIgPSBjaGls
ZHJlbk9mVHlwZTxSZW5kZXJUZXh0PihmbG93KS5maXJzdCgpOwotICAgICAgICBpZiAodGV4dFJl
bmRlcmVyKSB7Ci0gICAgICAgICAgICB0ZXh0RGVjb3JhdGlvblBhaW50ZXIuZW1wbGFjZShwYWlu
dEluZm8uY29udGV4dCgpLCBzdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpLCAqdGV4dFJl
bmRlcmVyLCBmYWxzZSwgc3R5bGUuZm9udENhc2NhZGUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBMYXlvdXRSZWN0IHBhaW50UmVjdCA9IHBhaW50SW5mby5yZWN0OwotICAgIHBhaW50UmVj
dC5tb3ZlQnkoLXBhaW50T2Zmc2V0KTsKLQotICAgIGF1dG8mIHJlc29sdmVyID0gbGF5b3V0LnJ1
blJlc29sdmVyKCk7Ci0gICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBmbG93LmRvY3VtZW50
KCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKLSAgICBmb3IgKGF1dG8gcnVuIDogcmVzb2x2ZXIucmFu
Z2VGb3JSZWN0KHBhaW50UmVjdCkpIHsKLSAgICAgICAgaWYgKHJ1bi5zdGFydCgpID09IHJ1bi5l
bmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIEZsb2F0UmVjdCByZWN0ID0g
cnVuLnJlY3QoKTsKLSAgICAgICAgRmxvYXRSZWN0IHZpc3VhbE92ZXJmbG93UmVjdCA9IGNvbXB1
dGVPdmVyZmxvdyhmbG93LCByZWN0KTsKLSAgICAgICAgaWYgKHBhaW50UmVjdC55KCkgPiB2aXN1
YWxPdmVyZmxvd1JlY3QubWF4WSgpIHx8IHBhaW50UmVjdC5tYXhZKCkgPCB2aXN1YWxPdmVyZmxv
d1JlY3QueSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgU3RyaW5nIHRleHRX
aXRoSHlwaGVuOwotICAgICAgICBpZiAocnVuLmhhc0h5cGhlbigpKQotICAgICAgICAgICAgdGV4
dFdpdGhIeXBoZW4gPSBydW4udGV4dFdpdGhIeXBoZW4oKTsKLSAgICAgICAgLy8geFBvcyBpcyBy
ZWxhdGl2ZSB0byB0aGUgbGluZSBib3gncyBsb2dpY2FsIGxlZnQuCi0gICAgICAgIC8vIFdlIGRv
bid0IGhhdmUgYW55IGxpbmUgZ2VvbWV0cnkgaGVyZSBpbiBTTEwsIHNvIGxldCdzIGdldCB0aGUg
Zmlyc3QgcnVuJ3MgbG9naWNhbCBsZWZ0IGluIHRoZSBjdXJyZW50IGxpbmUgYW5kIHVzZSBpdCBh
cyB0aGUgbGluZSdzIGxvZ2ljYWwgbGVmdC4KLSAgICAgICAgYXV0byBsaW5lTG9naWNhbExlZnQg
PSAoKnJlc29sdmVyLnJhbmdlRm9yTGluZShydW4ubGluZUluZGV4KCkpLmJlZ2luKCkpLmxvZ2lj
YWxMZWZ0KCk7Ci0gICAgICAgIFRleHRSdW4gdGV4dFJ1biB7IHJ1bi5oYXNIeXBoZW4oKSA/IHRl
eHRXaXRoSHlwaGVuIDogcnVuLnRleHQoKSwgcnVuLmxvZ2ljYWxMZWZ0KCkgLSBsaW5lTG9naWNh
bExlZnQsIHJ1bi5leHBhbnNpb24oKSwgcnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkgfTsKLSAgICAg
ICAgdGV4dFJ1bi5zZXRUYWJTaXplKCFzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSwgc3R5bGUu
dGFiU2l6ZSgpKTsKLSAgICAgICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luIHsgcmVjdC54KCkgKyBw
YWludE9mZnNldC54KCksIHJvdW5kVG9EZXZpY2VQaXhlbChydW4uYmFzZWxpbmVQb3NpdGlvbigp
ICsgcGFpbnRPZmZzZXQueSgpLCBkZXZpY2VTY2FsZUZhY3RvcikgfTsKLQotICAgICAgICB0ZXh0
UGFpbnRlci5zZXRHbHlwaERpc3BsYXlMaXN0SWZOZWVkZWQocnVuLnNpbXBsZVJ1bigpLCBwYWlu
dEluZm8sIHN0eWxlLmZvbnRDYXNjYWRlKCksIHBhaW50SW5mby5jb250ZXh0KCksIHRleHRSdW4p
OwotICAgICAgICB0ZXh0UGFpbnRlci5wYWludCh0ZXh0UnVuLCByZWN0LCB0ZXh0T3JpZ2luKTsK
LSAgICAgICAgaWYgKHRleHREZWNvcmF0aW9uUGFpbnRlcikgewotICAgICAgICAgICAgdGV4dERl
Y29yYXRpb25QYWludGVyLT5zZXRXaWR0aChyZWN0LndpZHRoKCkpOwotICAgICAgICAgICAgdGV4
dERlY29yYXRpb25QYWludGVyLT5wYWludFRleHREZWNvcmF0aW9uKHRleHRSdW4sIHRleHRPcmln
aW4sIHJlY3QubG9jYXRpb24oKSArIHBhaW50T2Zmc2V0KTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotYm9vbCBoaXRUZXN0Rmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIGNvbnN0IExh
eW91dCYgbGF5b3V0LCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNv
bnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0
QWN0aW9uKQotewotICAgIGlmIChoaXRUZXN0QWN0aW9uICE9IEhpdFRlc3RGb3JlZ3JvdW5kKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWxheW91dC5ydW5Db3VudCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvJiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKLSAg
ICBpZiAoc3R5bGUudmlzaWJpbGl0eSgpICE9IFZpc2liaWxpdHk6OlZpc2libGUgfHwgc3R5bGUu
cG9pbnRlckV2ZW50cygpID09IFBvaW50ZXJFdmVudHM6Ok5vbmUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIExheW91dFJlY3QgcmFuZ2VSZWN0ID0gbG9jYXRpb25JbkNvbnRhaW5lci5i
b3VuZGluZ0JveCgpOwotICAgIHJhbmdlUmVjdC5tb3ZlQnkoLWFjY3VtdWxhdGVkT2Zmc2V0KTsK
LSAgICBhdXRvIHJlc29sdmVyID0gbGluZVJlc29sdmVyKGxheW91dC5ydW5SZXNvbHZlcigpKTsK
LSAgICBhdXRvIHJhbmdlID0gcmVzb2x2ZXIucmFuZ2VGb3JSZWN0KHJhbmdlUmVjdCk7Ci0gICAg
Zm9yIChhdXRvIGl0ID0gcmFuZ2UuYmVnaW4oKSwgZW5kID0gcmFuZ2UuZW5kKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBhdXRvIGxpbmVSZWN0ID0gKml0OwotICAgICAgICBsaW5lUmVj
dC5tb3ZlQnkoYWNjdW11bGF0ZWRPZmZzZXQpOwotICAgICAgICBhdXRvJiByZW5kZXJlciA9IGNv
bnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Jj4oaXQucmVuZGVyZXIoKSk7Ci0gICAgICAgIGlmICghbG9j
YXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKGxpbmVSZWN0KSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICByZW5kZXJlci51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgbG9jYXRp
b25JbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSk7
Ci0gICAgICAgIGlmIChyZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJl
ci5ub2RlRm9ySGl0VGVzdCgpLCByZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBsaW5lUmVj
dCkgPT0gSGl0VGVzdFByb2dyZXNzOjpTdG9wKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBjb2xsZWN0Rmxvd092ZXJmbG93KFJl
bmRlckJsb2NrRmxvdyYgZmxvdywgY29uc3QgTGF5b3V0JiBsYXlvdXQpCi17Ci0gICAgZm9yIChh
dXRvIGxpbmVSZWN0IDogbGluZVJlc29sdmVyKGxheW91dC5ydW5SZXNvbHZlcigpKSkgewotICAg
ICAgICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93UmVjdCA9IExheW91dFJlY3QoY29tcHV0ZU92
ZXJmbG93KGZsb3csIGxpbmVSZWN0KSk7Ci0gICAgICAgIGZsb3cuYWRkTGF5b3V0T3ZlcmZsb3co
TGF5b3V0UmVjdChsaW5lUmVjdCkpOwotICAgICAgICBmbG93LmFkZFZpc3VhbE92ZXJmbG93KHZp
c3VhbE92ZXJmbG93UmVjdCk7Ci0gICAgfQotfQotCi11bnNpZ25lZCB0ZXh0T2Zmc2V0Rm9yUG9p
bnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50LCBjb25zdCBSZW5kZXJUZXh0JiByZW5kZXJlciwg
Y29uc3QgTGF5b3V0JiBsYXlvdXQpCi17Ci0gICAgYXV0byYgZmxvdyA9IGRvd25jYXN0PFJlbmRl
ckJsb2NrRmxvdz4oKnJlbmRlcmVyLnBhcmVudCgpKTsKLSAgICBBU1NFUlQoZmxvdy5maXJzdENo
aWxkKCkgPT0gZmxvdy5sYXN0Q2hpbGQoKSk7Ci0gICAgYXV0byYgcmVzb2x2ZXIgPSBsYXlvdXQu
cnVuUmVzb2x2ZXIoKTsKLSAgICBhdXRvIGl0ID0gcmVzb2x2ZXIucnVuRm9yUG9pbnQocG9pbnQp
OwotICAgIGlmIChpdCA9PSByZXNvbHZlci5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVy
LnRleHQoKS5sZW5ndGgoKTsKLSAgICBhdXRvIHJ1biA9ICppdDsKLSAgICBhdXRvJiBzdHlsZSA9
IGZsb3cuc3R5bGUoKTsKLSAgICBUZXh0UnVuIHRleHRSdW4ocnVuLnRleHQoKSwgcnVuLmxvZ2lj
YWxMZWZ0KCksIHJ1bi5leHBhbnNpb24oKSwgcnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkpOwotICAg
IHRleHRSdW4uc2V0VGFiU2l6ZSghc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCksIHN0eWxlLnRh
YlNpemUoKSk7Ci0gICAgcmV0dXJuIHJ1bi5zdGFydCgpICsgc3R5bGUuZm9udENhc2NhZGUoKS5v
ZmZzZXRGb3JQb3NpdGlvbih0ZXh0UnVuLCBwb2ludC54KCkgLSBydW4ubG9naWNhbExlZnQoKSwg
dHJ1ZSk7Ci19Ci0KLVZlY3RvcjxGbG9hdFF1YWQ+IGNvbGxlY3RBYnNvbHV0ZVF1YWRzRm9yUmFu
Z2UoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVk
IGVuZCwgY29uc3QgTGF5b3V0JiBsYXlvdXQsIGJvb2wgaWdub3JlRW1wdHlUZXh0U2VsZWN0aW9u
cywgYm9vbCogd2FzRml4ZWQpCi17Ci0gICAgYXV0byYgc3R5bGUgPSBkb3duY2FzdDxSZW5kZXJC
bG9ja0Zsb3c+KCpyZW5kZXJlci5wYXJlbnQoKSkuc3R5bGUoKTsKLSAgICBWZWN0b3I8RmxvYXRR
dWFkPiBxdWFkczsKLSAgICBhdXRvJiByZXNvbHZlciA9IGxheW91dC5ydW5SZXNvbHZlcigpOwot
ICAgIGZvciAoYXV0byBydW4gOiByZXNvbHZlci5yYW5nZUZvclJlbmRlcmVyV2l0aE9mZnNldHMo
cmVuZGVyZXIsIHN0YXJ0LCBlbmQpKSB7Ci0gICAgICAgIGlmIChpZ25vcmVFbXB0eVRleHRTZWxl
Y3Rpb25zICYmIHJ1bi5zdGFydCgpID09IHJ1bi5lbmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAvLyBUaGlzIHJ1biBpcyBmdWxseSBjb250YWluZWQuCi0gICAgICAgIGlmIChz
dGFydCA8PSBydW4uc3RhcnQoKSAmJiBlbmQgPj0gcnVuLmVuZCgpKSB7Ci0gICAgICAgICAgICBx
dWFkcy5hcHBlbmQocmVuZGVyZXIubG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQocnVuLnJl
Y3QoKSksIFVzZVRyYW5zZm9ybXMsIHdhc0ZpeGVkKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgfQotICAgICAgICAvLyBQYXJ0aWFsbHkgY29udGFpbmVkIHJ1bi4KLSAgICAgICAg
VGV4dFJ1biB0ZXh0UnVuKHJ1bi50ZXh0KCksIHJ1bi5sb2dpY2FsTGVmdCgpLCBydW4uZXhwYW5z
aW9uKCksIHJ1bi5leHBhbnNpb25CZWhhdmlvcigpKTsKLSAgICAgICAgdGV4dFJ1bi5zZXRUYWJT
aXplKCFzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSwgc3R5bGUudGFiU2l6ZSgpKTsKLSAgICAg
ICAgTGF5b3V0UmVjdCBydW5SZWN0KHJ1bi5yZWN0KCkpOwotICAgICAgICAvLyBTcGVjaWFsIGNh
c2UgZW1wdHkgcmFuZ2VzLgotICAgICAgICBpZiAoc3RhcnQgPT0gZW5kKSB7Ci0gICAgICAgICAg
ICBydW5SZWN0LnNldFdpZHRoKDApOwotICAgICAgICAgICAgcXVhZHMuYXBwZW5kKHJlbmRlcmVy
LmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKHJ1blJlY3QpLCBVc2VUcmFuc2Zvcm1zLCB3
YXNGaXhlZCkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgYXV0
byBsb2NhbFN0YXJ0ID0gc3RkOjptYXgocnVuLnN0YXJ0KCksIHN0YXJ0KSAtIHJ1bi5zdGFydCgp
OwotICAgICAgICBhdXRvIGxvY2FsRW5kID0gc3RkOjptaW4ocnVuLmVuZCgpLCBlbmQpIC0gcnVu
LnN0YXJ0KCk7Ci0gICAgICAgIEFTU0VSVChsb2NhbFN0YXJ0IDw9IGxvY2FsRW5kKTsKLSAgICAg
ICAgc3R5bGUuZm9udENhc2NhZGUoKS5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVu
LCBydW5SZWN0LCBsb2NhbFN0YXJ0LCBsb2NhbEVuZCk7Ci0gICAgICAgIHJ1blJlY3QgPSBzbmFw
cGVkU2VsZWN0aW9uUmVjdChydW5SZWN0LCBydW4ubG9naWNhbFJpZ2h0KCksIHJ1blJlY3QueSgp
LCBydW5SZWN0LmhlaWdodCgpLCB0cnVlIC8qIGlzSG9yaXpvbnRhbCAqLyk7Ci0gICAgICAgIHF1
YWRzLmFwcGVuZChyZW5kZXJlci5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChydW5SZWN0
KSwgVXNlVHJhbnNmb3Jtcywgd2FzRml4ZWQpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHF1YWRzOwot
fQotCi12b2lkIHNpbXBsZUxpbmVMYXlvdXRXaWxsQmVEZWxldGVkKGNvbnN0IExheW91dCYgbGF5
b3V0KQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsYXlvdXQucnVuQ291bnQoKTsg
KytpKQotICAgICAgICBUZXh0UGFpbnRlcjo6cmVtb3ZlR2x5cGhEaXNwbGF5TGlzdChsYXlvdXQu
cnVuQXQoaSkpOwotfQotCi1ib29sIGNhblVzZUZvckxpbmVCb3hUcmVlKFJlbmRlckJsb2NrRmxv
dyYgZmxvdywgY29uc3QgTGF5b3V0JiBsYXlvdXQpCi17Ci0gICAgLy8gTGluZSBicmVha2luZyBy
ZXF1aXJlcyBzb21lIGNvbnRleHQgdGhhdCBTTEwgY2FuJ3QgcHJvdmlkZSBhdCB0aGUgbW9tZW50
IChzZWUgUm9vdElubGluZUJveDo6c2V0TGluZUJyZWFrSW5mbykuCi0gICAgaWYgKGxheW91dC5s
aW5lQ291bnQoKSA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChsYXlvdXQu
aXNQYWdpbmF0ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmIChmbG93
LnN0eWxlKCkucHJlc2VydmVOZXdsaW5lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICBpZiAoIWZsb3cuZmlyc3RDaGlsZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4oZmxv
dykpIHsKLSAgICAgICAgaWYgKCFpczxSZW5kZXJUZXh0PihjaGlsZCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8vIFNpbXBsZSBsaW5lIGxheW91dCBpdGVyYXRvciBjYW4n
dCBoYW5kbGUgcmVuZGVyZXJzIHdpdGggemVybyBsZW5ndGggcHJvcGVybHkuCi0gICAgICAgIGlm
ICghZG93bmNhc3Q8UmVuZGVyVGV4dD4oY2hpbGQpLmxlbmd0aCgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgaW5p
dGlhbGl6ZUlubGluZVRleHRCb3goUmVuZGVyQmxvY2tGbG93JiBmbG93LCBJbmxpbmVUZXh0Qm94
JiBpbmxpbmVUZXh0Qm94LCBjb25zdCBSdW5SZXNvbHZlcjo6UnVuJiBydW4pCi17Ci0gICAgaW5s
aW5lVGV4dEJveC5zZXRMb2dpY2FsTGVmdChydW4ubG9naWNhbExlZnQoKSk7Ci0gICAgaW5saW5l
VGV4dEJveC5zZXRMb2dpY2FsVG9wKHJ1bi5yZWN0KCkueSgpKTsKLSAgICBpbmxpbmVUZXh0Qm94
LnNldExvZ2ljYWxXaWR0aChydW4ubG9naWNhbFJpZ2h0KCkgLSBydW4ubG9naWNhbExlZnQoKSk7
Ci0gICAgYXV0byBvdmVyZmxvd1JlY3QgPSBjb21wdXRlT3ZlcmZsb3coY29uc3RfY2FzdDxSZW5k
ZXJCbG9ja0Zsb3cmPihmbG93KSwgcnVuLnJlY3QoKSk7Ci0gICAgaWYgKG92ZXJmbG93UmVjdCAh
PSBydW4ucmVjdCgpKQotICAgICAgICBpbmxpbmVUZXh0Qm94LnNldExvZ2ljYWxPdmVyZmxvd1Jl
Y3QoTGF5b3V0UmVjdChvdmVyZmxvd1JlY3QpKTsKLQotICAgIGlubGluZVRleHRCb3guc2V0SGFz
SHlwaGVuKHJ1bi5oYXNIeXBoZW4oKSk7Ci0gICAgaW5saW5lVGV4dEJveC5zZXRFeHBhbnNpb25X
aXRob3V0R3Jvd2luZyhydW4uZXhwYW5zaW9uKCkpOwotCi0gICAgYXV0byBleHBhbnNpb25CZWhh
dmlvciA9IHJ1bi5leHBhbnNpb25CZWhhdmlvcigpOwotICAgIGlubGluZVRleHRCb3guc2V0Q2Fu
SGF2ZUxlZnRFeHBhbnNpb24oZXhwYW5zaW9uQmVoYXZpb3IgJiBBbGxvd0xlZnRFeHBhbnNpb24p
OwotICAgIGlubGluZVRleHRCb3guc2V0Q2FuSGF2ZVJpZ2h0RXhwYW5zaW9uKGV4cGFuc2lvbkJl
aGF2aW9yICYgQWxsb3dSaWdodEV4cGFuc2lvbik7Ci0gICAgaWYgKGV4cGFuc2lvbkJlaGF2aW9y
ICYgRm9yY2VSaWdodEV4cGFuc2lvbikKLSAgICAgICAgaW5saW5lVGV4dEJveC5zZXRGb3JjZVJp
Z2h0RXhwYW5zaW9uKCk7Ci0gICAgaWYgKGV4cGFuc2lvbkJlaGF2aW9yICYgRm9yY2VMZWZ0RXhw
YW5zaW9uKQotICAgICAgICBpbmxpbmVUZXh0Qm94LnNldEZvcmNlTGVmdEV4cGFuc2lvbigpOwot
fQotCi12b2lkIGdlbmVyYXRlTGluZUJveFRyZWUoUmVuZGVyQmxvY2tGbG93JiBmbG93LCBjb25z
dCBMYXlvdXQmIGxheW91dCkKLXsKLSAgICBBU1NFUlQoIWZsb3cuY29tcGxleExpbmVMYXlvdXQo
KS0+bGluZUJveGVzKCkuZmlyc3RMaW5lQm94KCkpOwotICAgIGlmICghbGF5b3V0LnJ1bkNvdW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZjxCaWRpQ29udGV4dD4gYmlkaUNvbnRleHQg
PSBCaWRpQ29udGV4dDo6Y3JlYXRlKDAsIFVfTEVGVF9UT19SSUdIVCk7Ci0gICAgYXV0byYgcmVz
b2x2ZXIgPSBsYXlvdXQucnVuUmVzb2x2ZXIoKTsKLSAgICB1bnNpZ25lZCBsaW5lSW5kZXggPSAw
OwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGF1dG8gcmFuZ2UgPSByZXNvbHZlci5yYW5n
ZUZvckxpbmUobGluZUluZGV4KyspOwotICAgICAgICBpZiAocmFuZ2UuYmVnaW4oKSA9PSByYW5n
ZS5lbmQoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEdlbmVyYXRlIGJpZGkg
cnVucyBvdXQgb2Ygc2ltcGxlIGxpbmUgbGF5b3V0IHJ1bnMuCi0gICAgICAgIEJpZGlSdW5MaXN0
PEJpZGlSdW4+IGJpZGlSdW5zOwotICAgICAgICBmb3IgKGF1dG8gaXQgPSByYW5nZS5iZWdpbigp
OyBpdCAhPSByYW5nZS5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgYXV0byBydW4gPSAqaXQ7
Ci0gICAgICAgICAgICBiaWRpUnVucy5hcHBlbmRSdW4obWFrZVVuaXF1ZTxCaWRpUnVuPihydW4u
bG9jYWxTdGFydCgpLCBydW4ubG9jYWxFbmQoKSwgY29uc3RfY2FzdDxSZW5kZXJPYmplY3QmPihy
dW4ucmVuZGVyZXIoKSksIGJpZGlDb250ZXh0LnB0cigpLCBVX0xFRlRfVE9fUklHSFQpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIExpbmVJbmZvIGxpbmVJbmZvOwotICAgICAgICBsaW5lSW5mby5z
ZXRGaXJzdExpbmUoIWZsb3cuY29tcGxleExpbmVMYXlvdXQoKS0+bGluZUJveGVzKCkuZmlyc3RM
aW5lQm94KCkpOwotICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBuZWVkZWQgZm9yIGZsb3cgYm94
ZXMgLWJ1dCB3ZSBkb24ndCBoYXZlIHRoZW0geWV0LgotICAgICAgICAvLyBsaW5lSW5mby5zZXRM
YXN0TGluZShsYXN0TGluZSk7Ci0gICAgICAgIGxpbmVJbmZvLnNldEVtcHR5KCFiaWRpUnVucy5y
dW5Db3VudCgpKTsKLSAgICAgICAgYmlkaVJ1bnMuc2V0TG9naWNhbGx5TGFzdFJ1bihiaWRpUnVu
cy5sYXN0UnVuKCkpOwotICAgICAgICBhdXRvKiByb290ID0gZmxvdy5jb21wbGV4TGluZUxheW91
dCgpLT5jb25zdHJ1Y3RMaW5lKGJpZGlSdW5zLCBsaW5lSW5mbyk7Ci0gICAgICAgIGJpZGlSdW5z
LmNsZWFyKCk7Ci0gICAgICAgIGlmICghcm9vdCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIGF1dG8mIHJvb3RMaW5lQm94ID0gKnJvb3Q7Ci0gICAgICAgIGF1dG8gaXQgPSByYW5n
ZS5iZWdpbigpOwotICAgICAgICBmbG9hdCBsaW5lV2lkdGggPSAwOwotICAgICAgICAvLyBTZXQg
dGhlIGdlb21ldHJ5IGZvciB0aGUgaW5saW5lYm94ZXMuCi0gICAgICAgIGZvciAoYXV0byogaW5s
aW5lQm94ID0gcm9vdExpbmVCb3guZmlyc3RDaGlsZCgpOyBpbmxpbmVCb3ggJiYgaXQgIT0gcmFu
Z2UuZW5kKCk7IGlubGluZUJveCA9IGlubGluZUJveC0+bmV4dE9uTGluZSgpLCArK2l0KSB7Ci0g
ICAgICAgICAgICBhdXRvIHJ1biA9ICppdDsKLSAgICAgICAgICAgIGluaXRpYWxpemVJbmxpbmVU
ZXh0Qm94KGZsb3csIGRvd25jYXN0PElubGluZVRleHRCb3g+KCppbmxpbmVCb3gpLCBydW4pOwot
ICAgICAgICAgICAgbGluZVdpZHRoICs9IGlubGluZUJveC0+bG9naWNhbFdpZHRoKCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBGaW5pc2ggc2V0dGluZyB1cCB0aGUgcm9vdGxpbmUuCi0gICAg
ICAgIGF1dG8gaXRlciA9IHJhbmdlLmJlZ2luKCk7Ci0gICAgICAgIGF1dG8gZmlyc3RSdW4gPSAq
aXRlcjsKLSAgICAgICAgcm9vdExpbmVCb3guc2V0TG9naWNhbExlZnQoZmlyc3RSdW4ubG9naWNh
bExlZnQoKSk7Ci0gICAgICAgIHJvb3RMaW5lQm94LnNldExvZ2ljYWxXaWR0aChsaW5lV2lkdGgp
OwotICAgICAgICBhdXRvIGxpbmVUb3AgPSBmaXJzdFJ1bi5yZWN0KCkueSgpOwotICAgICAgICBh
dXRvIGxpbmVIZWlnaHQgPSBmaXJzdFJ1bi5yZWN0KCkuaGVpZ2h0KCk7Ci0gICAgICAgIHJvb3RM
aW5lQm94LnNldExvZ2ljYWxUb3AobGluZVRvcCk7Ci0gICAgICAgIHJvb3RMaW5lQm94LnNldExp
bmVUb3BCb3R0b21Qb3NpdGlvbnMoTGF5b3V0VW5pdChsaW5lVG9wKSwgTGF5b3V0VW5pdChsaW5l
VG9wICsgbGluZUhlaWdodCksIExheW91dFVuaXQobGluZVRvcCksIExheW91dFVuaXQobGluZVRv
cCArIGxpbmVIZWlnaHQpKTsKLSAgICB9Ci19Ci0KLSNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcp
Ci1zdGF0aWMgdm9pZCBwcmludFByZWZpeChUZXh0U3RyZWFtJiBzdHJlYW0sIGludCYgcHJpbnRl
ZENoYXJhY3RlcnMsIGludCBkZXB0aCkKLXsKLSAgICBzdHJlYW0gPDwgIi0tLS0tLS0tIC0tIjsK
LSAgICBwcmludGVkQ2hhcmFjdGVycyA9IDA7Ci0gICAgd2hpbGUgKCsrcHJpbnRlZENoYXJhY3Rl
cnMgPD0gZGVwdGggKiAyKQotICAgICAgICBzdHJlYW0gPDwgIiAiOwotfQotCi12b2lkIG91dHB1
dExpbmVMYXlvdXRGb3JGbG93KFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgUmVuZGVyQmxvY2tG
bG93JiwgY29uc3QgTGF5b3V0JiBsYXlvdXQsIGludCBkZXB0aCkKLXsKLSAgICBpbnQgcHJpbnRl
ZENoYXJhY3RlcnMgPSAwOwotICAgIHByaW50UHJlZml4KHN0cmVhbSwgcHJpbnRlZENoYXJhY3Rl
cnMsIGRlcHRoKTsKLQotICAgIHN0cmVhbSA8PCAiU2ltcGxlTGluZUxheW91dCAoIiA8PCBsYXlv
dXQubGluZUNvdW50KCkgPDwgIiBsaW5lcywgIiA8PCBsYXlvdXQucnVuQ291bnQoKSA8PCAiIHJ1
bnMpICgiIDw8ICZsYXlvdXQgPDwgIikiOwotICAgIHN0cmVhbS5uZXh0TGluZSgpOwotICAgICsr
ZGVwdGg7Ci0KLSAgICBmb3IgKGF1dG8gcnVuIDogbGF5b3V0LnJ1blJlc29sdmVyKCkpIHsKLSAg
ICAgICAgRmxvYXRSZWN0IHJlY3QgPSBydW4ucmVjdCgpOwotICAgICAgICBwcmludFByZWZpeChz
dHJlYW0sIHByaW50ZWRDaGFyYWN0ZXJzLCBkZXB0aCk7Ci0gICAgICAgIGlmIChydW4uc3RhcnQo
KSA8IHJ1bi5lbmQoKSkgewotICAgICAgICAgICAgc3RyZWFtIDw8ICJsaW5lICIgPDwgcnVuLmxp
bmVJbmRleCgpIDw8ICIgcnVuKCIgPDwgcnVuLnN0YXJ0KCkgPDwgIiwgIiA8PCBydW4uZW5kKCkg
PDwgIikgIiA8PCByZWN0IDw8ICIgXCIiIDw8IHJ1bi50ZXh0KCkudG9TdHJpbmdXaXRob3V0Q29w
eWluZygpLnV0ZjgoKS5kYXRhKCkgPDwgIlwiIjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIEFTU0VSVChydW4uc3RhcnQoKSA9PSBydW4uZW5kKCkpOwotICAgICAgICAgICAgc3RyZWFt
IDw8ICJsaW5lIGJyZWFrICIgPDwgcnVuLmxpbmVJbmRleCgpIDw8ICIgcnVuKCIgPDwgcnVuLnN0
YXJ0KCkgPDwgIiwgIiA8PCBydW4uZW5kKCkgPDwgIikgIiA8PCByZWN0OwotICAgICAgICB9Ci0g
ICAgfQotICAgIHN0cmVhbS5uZXh0TGluZSgpOwotfQotI2VuZGlmCi0KLX0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGM3ZDRjZGFkOWUuLjAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgotI2luY2x1ZGUgIlJlbmRlclRleHQu
aCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBIaXRUZXN0TG9jYXRpb247Ci1jbGFzcyBIaXRUZXN0UmVxdWVzdDsKLWNsYXNz
IEhpdFRlc3RSZXN1bHQ7Ci1jbGFzcyBSZW5kZXJCbG9ja0Zsb3c7Ci1zdHJ1Y3QgUGFpbnRJbmZv
OwotCi1uYW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7Ci1jbGFzcyBGbG93Q29udGVudHM7Ci0K
LUxheW91dFVuaXQgY29tcHV0ZUZsb3dIZWlnaHQoY29uc3QgUmVuZGVyQmxvY2tGbG93JiwgY29u
c3QgTGF5b3V0Jik7Ci1MYXlvdXRVbml0IGNvbXB1dGVGbG93Rmlyc3RMaW5lQmFzZWxpbmUoY29u
c3QgUmVuZGVyQmxvY2tGbG93JiwgY29uc3QgTGF5b3V0Jik7Ci1MYXlvdXRVbml0IGNvbXB1dGVG
bG93TGFzdExpbmVCYXNlbGluZShjb25zdCBSZW5kZXJCbG9ja0Zsb3cmLCBjb25zdCBMYXlvdXQm
KTsKLUZsb2F0UmVjdCBjb21wdXRlT3ZlcmZsb3coY29uc3QgUmVuZGVyQmxvY2tGbG93JiwgY29u
c3QgRmxvYXRSZWN0Jik7Ci0KLXZvaWQgcGFpbnRGbG93KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYs
IGNvbnN0IExheW91dCYsIFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNl
dCk7Ci1ib29sIGhpdFRlc3RGbG93KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IExheW91
dCYsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RM
b2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxh
dGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKLXZvaWQgY29sbGVjdEZsb3dPdmVyZmxvdyhSZW5k
ZXJCbG9ja0Zsb3cmLCBjb25zdCBMYXlvdXQmKTsKLQotdW5zaWduZWQgdGV4dE9mZnNldEZvclBv
aW50KGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyVGV4dCYsIGNvbnN0IExheW91dCYp
OwotVmVjdG9yPEZsb2F0UXVhZD4gY29sbGVjdEFic29sdXRlUXVhZHNGb3JSYW5nZShjb25zdCBS
ZW5kZXJPYmplY3QmLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBjb25zdCBMYXlvdXQm
LCBib29sIGlnbm9yZUVtcHR5VGV4dFNlbGVjdGlvbnMsIGJvb2wqIHdhc0ZpeGVkKTsKLQotTGF5
b3V0VW5pdCBsaW5lSGVpZ2h0RnJvbUZsb3coY29uc3QgUmVuZGVyQmxvY2tGbG93Jik7Ci1MYXlv
dXRVbml0IGJhc2VsaW5lRnJvbUZsb3coY29uc3QgUmVuZGVyQmxvY2tGbG93Jik7Ci0KLWJvb2wg
Y2FuVXNlRm9yTGluZUJveFRyZWUoUmVuZGVyQmxvY2tGbG93JiwgY29uc3QgTGF5b3V0Jik7Ci12
b2lkIGdlbmVyYXRlTGluZUJveFRyZWUoUmVuZGVyQmxvY2tGbG93JiwgY29uc3QgTGF5b3V0Jik7
Ci0KLXZvaWQgc2ltcGxlTGluZUxheW91dFdpbGxCZURlbGV0ZWQoY29uc3QgTGF5b3V0Jik7Ci0K
LSNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCi12b2lkIG91dHB1dExpbmVMYXlvdXRGb3JGbG93
KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IExheW91dCYs
IGludCBkZXB0aCk7Ci0jZW5kaWYKLQotfQotCi1uYW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7
Ci0KLWlubGluZSBMYXlvdXRVbml0IGNvbXB1dGVGbG93SGVpZ2h0KGNvbnN0IFJlbmRlckJsb2Nr
RmxvdyYgZmxvdywgY29uc3QgTGF5b3V0JiBsYXlvdXQpCi17Ci0gICAgYXV0byBmbG93SGVpZ2h0
ID0gbGluZUhlaWdodEZyb21GbG93KGZsb3cpICogbGF5b3V0LmxpbmVDb3VudCgpOwotICAgIGlm
ICghbGF5b3V0Lmhhc0xpbmVTdHJ1dHMoKSkKLSAgICAgICAgcmV0dXJuIGZsb3dIZWlnaHQ7Ci0g
ICAgZm9yIChhdXRvJiBzdHJ1dEVudHJ5IDogbGF5b3V0LnN0cnV0cygpKQotICAgICAgICBmbG93
SGVpZ2h0ICs9IHN0cnV0RW50cnkub2Zmc2V0OwotICAgIHJldHVybiBmbG93SGVpZ2h0OwotfQot
Ci1pbmxpbmUgTGF5b3V0VW5pdCBjb21wdXRlRmxvd0ZpcnN0TGluZUJhc2VsaW5lKGNvbnN0IFJl
bmRlckJsb2NrRmxvdyYgZmxvdywgY29uc3QgTGF5b3V0JiBsYXlvdXQpCi17Ci0gICAgQVNTRVJU
X1VOVVNFRChsYXlvdXQsIGxheW91dC5saW5lQ291bnQoKSk7Ci0gICAgcmV0dXJuIGZsb3cuYm9y
ZGVyQW5kUGFkZGluZ0JlZm9yZSgpICsgYmFzZWxpbmVGcm9tRmxvdyhmbG93KTsKLX0KLQotaW5s
aW5lIExheW91dFVuaXQgY29tcHV0ZUZsb3dMYXN0TGluZUJhc2VsaW5lKGNvbnN0IFJlbmRlckJs
b2NrRmxvdyYgZmxvdywgY29uc3QgTGF5b3V0JiBsYXlvdXQpCi17Ci0gICAgQVNTRVJUKGxheW91
dC5saW5lQ291bnQoKSk7Ci0gICAgcmV0dXJuIGZsb3cuYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgp
ICsgbGluZUhlaWdodEZyb21GbG93KGZsb3cpICogKGxheW91dC5saW5lQ291bnQoKSAtIDEpICsg
YmFzZWxpbmVGcm9tRmxvdyhmbG93KTsKLX0KLQotaW5saW5lIExheW91dFVuaXQgbGluZUhlaWdo
dEZyb21GbG93KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKLXsKLSAgICByZXR1cm4gZmxv
dy5saW5lSGVpZ2h0KGZhbHNlLCBIb3Jpem9udGFsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGlu
ZUJveGVzKTsKLX0KLQotaW5saW5lIExheW91dFVuaXQgYmFzZWxpbmVGcm9tRmxvdyhjb25zdCBS
ZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCi17Ci0gICAgcmV0dXJuIGZsb3cuYmFzZWxpbmVQb3NpdGlv
bihBbHBoYWJldGljQmFzZWxpbmUsIGZhbHNlLCBIb3Jpem9udGFsTGluZSwgUG9zaXRpb25PZklu
dGVyaW9yTGluZUJveGVzKTsKLX0KLQotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDFjOGRlNzBlZmU3Yy4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5oIgotCi0jaW5jbHVkZSAiRm9u
dENhc2NhZGUuaCIKLSNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKLSNpbmNsdWRlICJTaW1w
bGVMaW5lTGF5b3V0LmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7Ci0KLXN0
cnVjdCBQYWdpbmF0ZWRMaW5lIHsKLSAgICBMYXlvdXRVbml0IHRvcDsKLSAgICBMYXlvdXRVbml0
IGJvdHRvbTsKLSAgICBMYXlvdXRVbml0IGhlaWdodDsgLy8gU2FtZSB2YWx1ZSBmb3IgZWFjaCBs
aW5lcyBhdG0uCi19OwotdXNpbmcgUGFnaW5hdGVkTGluZXMgPSBWZWN0b3I8UGFnaW5hdGVkTGlu
ZSwgMjA+OwotCi1zdGF0aWMgUGFnaW5hdGVkTGluZSBjb21wdXRlTGluZVRvcEFuZEJvdHRvbVdp
dGhPdmVyZmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIHVuc2lnbmVkIGxpbmVJbmRl
eCwgTGF5b3V0OjpTaW1wbGVMaW5lU3RydXRzJiBzdHJ1dHMpCi17Ci0gICAgLy8gRklYTUU6IEFk
ZCB2aXN1YWxPdmVyZmxvd0ZvckRlY29yYXRpb25zLgotICAgIGF1dG8mIGZvbnRNZXRyaWNzID0g
Zmxvdy5zdHlsZSgpLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKTsKLSAgICBhdXRvIGFzY2Vu
dCA9IGZvbnRNZXRyaWNzLmFzY2VudCgpOwotICAgIGF1dG8gZGVzY2VudCA9IGZvbnRNZXRyaWNz
LmRlc2NlbnQoKTsKLSAgICBhdXRvIGxpbmVIZWlnaHQgPSBsaW5lSGVpZ2h0RnJvbUZsb3coZmxv
dyk7Ci0gICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBmbG93LmJvcmRlckFuZFBhZGRpbmdCZWZvcmUo
KTsKLSAgICBmb3IgKGF1dG8mIHN0cnV0IDogc3RydXRzKSB7Ci0gICAgICAgIGlmIChzdHJ1dC5s
aW5lQnJlYWsgPiBsaW5lSW5kZXgpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgb2Zmc2V0
ICs9IHN0cnV0Lm9mZnNldDsKLSAgICB9Ci0gICAgaWYgKGFzY2VudCArIGRlc2NlbnQgPD0gbGlu
ZUhlaWdodCkgewotICAgICAgICBhdXRvIHRvcFBvc2l0aW9uID0gbGluZUluZGV4ICogbGluZUhl
aWdodCArIG9mZnNldDsKLSAgICAgICAgcmV0dXJuIHsgdG9wUG9zaXRpb24sIHRvcFBvc2l0aW9u
ICsgbGluZUhlaWdodCwgbGluZUhlaWdodCB9OwotICAgIH0KLSAgICBhdXRvIGJhc2VsaW5lID0g
YmFzZWxpbmVGcm9tRmxvdyhmbG93KTsKLSAgICBhdXRvIHRvcFBvc2l0aW9uID0gbGluZUluZGV4
ICogbGluZUhlaWdodCArIG9mZnNldCArIGJhc2VsaW5lIC0gYXNjZW50OwotICAgIGF1dG8gYm90
dG9tUG9zaXRpb24gPSB0b3BQb3NpdGlvbiArIGFzY2VudCArIGRlc2NlbnQ7Ci0gICAgcmV0dXJu
IHsgdG9wUG9zaXRpb24sIGJvdHRvbVBvc2l0aW9uLCBib3R0b21Qb3NpdGlvbiAtIHRvcFBvc2l0
aW9uIH07Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjb21wdXRlTGluZUJyZWFrSW5kZXgodW5zaWdu
ZWQgYnJlYWtDYW5kaWRhdGUsIHVuc2lnbmVkIGxpbmVDb3VudCwgaW50IG9ycGhhbnNOZWVkZWQs
IGludCB3aWRvd3NOZWVkZWQsCi0gICAgY29uc3QgTGF5b3V0OjpTaW1wbGVMaW5lU3RydXRzJiBz
dHJ1dHMpCi17Ci0gICAgLy8gRmlyc3QgbGluZSBkb2VzIG5vdCBmaXQgdGhlIGN1cnJlbnQgcGFn
ZS4KLSAgICBpZiAoIWJyZWFrQ2FuZGlkYXRlKQotICAgICAgICByZXR1cm4gYnJlYWtDYW5kaWRh
dGU7Ci0gICAgCi0gICAgaW50IHdpZG93c09uVGhlTmV4dFBhZ2UgPSBsaW5lQ291bnQgLSBicmVh
a0NhbmRpZGF0ZTsKLSAgICBpZiAod2lkb3dzTmVlZGVkIDw9IHdpZG93c09uVGhlTmV4dFBhZ2Up
Ci0gICAgICAgIHJldHVybiBicmVha0NhbmRpZGF0ZTsKLSAgICAvLyBPbmx5IGJyZWFrIGFmdGVy
IHRoZSBmaXJzdCBsaW5lIHdpdGggd2lkb3dzLgotICAgIGF1dG8gbGluZUJyZWFrID0gc3RkOjpt
YXg8aW50PihsaW5lQ291bnQgLSB3aWRvd3NOZWVkZWQsIDEpOwotICAgIGlmIChvcnBoYW5zTmVl
ZGVkID4gbGluZUJyZWFrKQotICAgICAgICByZXR1cm4gYnJlYWtDYW5kaWRhdGU7Ci0gICAgLy8g
QnJlYWsgb24gY3VycmVudCBwYWdlIG9ubHkuCi0gICAgaWYgKHN0cnV0cy5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBsaW5lQnJlYWs7Ci0gICAgQVNTRVJUKHN0cnV0cy5sYXN0KCkubGluZUJy
ZWFrICsgMSA8IGxpbmVDb3VudCk7Ci0gICAgcmV0dXJuIHN0ZDo6bWF4PHVuc2lnbmVkPihzdHJ1
dHMubGFzdCgpLmxpbmVCcmVhayArIDEsIGxpbmVCcmVhayk7Ci19Ci0KLXN0YXRpYyBMYXlvdXRV
bml0IGNvbXB1dGVPZmZzZXRBZnRlckxpbmVCcmVhayhMYXlvdXRVbml0IGxpbmVCcmVha1Bvc2l0
aW9uLCBib29sIGlzRmlyc3RMaW5lLCBib29sIGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UsIGNvbnN0
IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKLXsKLSAgICAvLyBObyBvZmZzZXQgZm9yIHRvcCBvZiB0
aGUgcGFnZSBsaW5lcyB1bmxlc3Mgd2lkb3dzIHB1c2hlZCB0aGUgbGluZSBicmVhay4KLSAgICBM
YXlvdXRVbml0IG9mZnNldCA9IGlzRmlyc3RMaW5lID8gZmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVm
b3JlKCkgOiAwX2x1OwotICAgIGlmIChhdFRoZVRvcE9mQ29sdW1uT3JQYWdlKQotICAgICAgICBy
ZXR1cm4gb2Zmc2V0OwotICAgIHJldHVybiBvZmZzZXQgKyBmbG93LnBhZ2VSZW1haW5pbmdMb2dp
Y2FsSGVpZ2h0Rm9yT2Zmc2V0KGxpbmVCcmVha1Bvc2l0aW9uLCBSZW5kZXJCbG9ja0Zsb3c6OkV4
Y2x1ZGVQYWdlQm91bmRhcnkpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRQYWdlQnJlYWtGb3JMaW5l
KHVuc2lnbmVkIGxpbmVCcmVha0luZGV4LCBQYWdpbmF0ZWRMaW5lcyYgbGluZXMsIFJlbmRlckJs
b2NrRmxvdyYgZmxvdywgTGF5b3V0OjpTaW1wbGVMaW5lU3RydXRzJiBzdHJ1dHMsCi0gICAgYm9v
bCBhdFRoZVRvcE9mQ29sdW1uT3JQYWdlLCBib29sIGxpbmVEb2VzTm90Rml0KQotewotICAgIGF1
dG8gbGluZSA9IGxpbmVzLmF0KGxpbmVCcmVha0luZGV4KTsKLSAgICBhdXRvIHJlbWFpbmluZ0xv
Z2ljYWxIZWlnaHQgPSBmbG93LnBhZ2VSZW1haW5pbmdMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KGxp
bmUudG9wLCBSZW5kZXJCbG9ja0Zsb3c6OkV4Y2x1ZGVQYWdlQm91bmRhcnkpOwotICAgIGF1dG8m
IHN0eWxlID0gZmxvdy5zdHlsZSgpOwotICAgIGF1dG8gZmlyc3RMaW5lRG9lc05vdEZpdCA9ICFs
aW5lQnJlYWtJbmRleCAmJiBsaW5lLmhlaWdodCA8IGZsb3cucGFnZUxvZ2ljYWxIZWlnaHRGb3JP
ZmZzZXQobGluZS50b3ApOwotICAgIGF1dG8gbW92ZU9ycGhhblRvTmV4dENvbHVtbiA9IGxpbmVE
b2VzTm90Rml0ICYmICFzdHlsZS5oYXNBdXRvT3JwaGFucygpICYmIHN0eWxlLm9ycGhhbnMoKSA+
IChzaG9ydClsaW5lQnJlYWtJbmRleDsKLSAgICBpZiAoZmlyc3RMaW5lRG9lc05vdEZpdCB8fCBt
b3ZlT3JwaGFuVG9OZXh0Q29sdW1uKSB7Ci0gICAgICAgIGF1dG8gZmlyc3RMaW5lID0gbGluZXMu
Zmlyc3QoKTsKLSAgICAgICAgYXV0byBmaXJzdExpbmVPdmVyZmxvd1JlY3QgPSBjb21wdXRlT3Zl
cmZsb3coZmxvdywgTGF5b3V0UmVjdCgwX2x1LCBmaXJzdExpbmUudG9wLCAwX2x1LCBmaXJzdExp
bmUuaGVpZ2h0KSk7Ci0gICAgICAgIGF1dG8gZmlyc3RMaW5lVXBwZXJPdmVyaGFuZyA9IHN0ZDo6
bWF4KExheW91dFVuaXQoLWZpcnN0TGluZU92ZXJmbG93UmVjdC55KCkpLCAwX2x1KTsKLSAgICAg
ICAgZmxvdy5zZXRQYWdpbmF0aW9uU3RydXQobGluZS50b3AgKyByZW1haW5pbmdMb2dpY2FsSGVp
Z2h0ICsgZmlyc3RMaW5lVXBwZXJPdmVyaGFuZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UpCi0gICAgICAgIGZsb3cuc2V0UGFnZUJyZWFr
KGxpbmUudG9wLCBsaW5lLmhlaWdodCk7Ci0gICAgZWxzZQotICAgICAgICBmbG93LnNldFBhZ2VC
cmVhayhsaW5lLnRvcCwgbGluZS5oZWlnaHQgLSByZW1haW5pbmdMb2dpY2FsSGVpZ2h0KTsKLSAg
ICBzdHJ1dHMuYXBwZW5kKHsgbGluZUJyZWFrSW5kZXgsIGNvbXB1dGVPZmZzZXRBZnRlckxpbmVC
cmVhayhsaW5lc1tsaW5lQnJlYWtJbmRleF0udG9wLCAhbGluZUJyZWFrSW5kZXgsIGF0VGhlVG9w
T2ZDb2x1bW5PclBhZ2UsIGZsb3cpIH0pOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVNaW5pbXVt
UGFnZUhlaWdodChSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIHVuc2lnbmVkIGxpbmVDb3VudCkKLXsK
LSAgICBhdXRvJiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKLSAgICBhdXRvIHdpZG93cyA9IHN0eWxl
Lmhhc0F1dG9XaWRvd3MoKSA/IDEgOiBzdGQ6Om1heDxpbnQ+KHN0eWxlLndpZG93cygpLCAxKTsK
LSAgICBhdXRvIG9ycGhhbnMgPSBzdHlsZS5oYXNBdXRvT3JwaGFucygpID8gMSA6IHN0ZDo6bWF4
PGludD4oc3R5bGUub3JwaGFucygpLCAxKTsKLSAgICBhdXRvIG1pbmltdW1MaW5lQ291bnQgPSBz
dGQ6Om1pbjx1bnNpZ25lZD4oc3RkOjptYXgod2lkb3dzLCBvcnBoYW5zKSwgbGluZUNvdW50KTsK
LSAgICBmbG93LnVwZGF0ZU1pbmltdW1QYWdlSGVpZ2h0KDAsIG1pbmltdW1MaW5lQ291bnQgKiBs
aW5lSGVpZ2h0RnJvbUZsb3coZmxvdykpOwotfQotCi12b2lkIGFkanVzdExpbmVQb3NpdGlvbnNG
b3JQYWdpbmF0aW9uKFNpbXBsZUxpbmVMYXlvdXQ6OkxheW91dCYgc2ltcGxlTGluZXMsIFJlbmRl
ckJsb2NrRmxvdyYgZmxvdykKLXsKLSAgICBMYXlvdXQ6OlNpbXBsZUxpbmVTdHJ1dHMgc3RydXRz
OwotICAgIGF1dG8gbGluZUNvdW50ID0gc2ltcGxlTGluZXMubGluZUNvdW50KCk7Ci0gICAgdXBk
YXRlTWluaW11bVBhZ2VIZWlnaHQoZmxvdywgbGluZUNvdW50KTsKLSAgICAvLyBGaXJzdCBwYXNz
IHdpdGggbm8gcGFnaW5hdGlvbiBvZmZzZXQ/Ci0gICAgaWYgKCFmbG93LnBhZ2VMb2dpY2FsSGVp
Z2h0Rm9yT2Zmc2V0KDApKQotICAgICAgICByZXR1cm47Ci0gICAgdW5zaWduZWQgbGluZUluZGV4
ID0gMDsKLSAgICBhdXRvIHdpZG93cyA9IGZsb3cuc3R5bGUoKS5oYXNBdXRvV2lkb3dzKCkgPyAx
IDogc3RkOjptYXg8aW50PihmbG93LnN0eWxlKCkud2lkb3dzKCksIDEpOwotICAgIGF1dG8gb3Jw
aGFucyA9IGZsb3cuc3R5bGUoKS5oYXNBdXRvT3JwaGFucygpID8gMSA6IHN0ZDo6bWF4PGludD4o
Zmxvdy5zdHlsZSgpLm9ycGhhbnMoKSwgMSk7Ci0gICAgUGFnaW5hdGVkTGluZXMgbGluZXM7Ci0g
ICAgZm9yICh1bnNpZ25lZCBydW5JbmRleCA9IDA7IHJ1bkluZGV4IDwgc2ltcGxlTGluZXMucnVu
Q291bnQoKTsgKytydW5JbmRleCkgewotICAgICAgICBhdXRvJiBydW4gPSBzaW1wbGVMaW5lcy5y
dW5BdChydW5JbmRleCk7Ci0gICAgICAgIGlmICghcnVuLmlzRW5kT2ZMaW5lKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byBsaW5lID0gY29tcHV0ZUxpbmVUb3BBbmRCb3R0
b21XaXRoT3ZlcmZsb3coZmxvdywgbGluZUluZGV4LCBzdHJ1dHMpOwotICAgICAgICBsaW5lcy5h
cHBlbmQobGluZSk7Ci0gICAgICAgIGF1dG8gcmVtYWluaW5nSGVpZ2h0ID0gZmxvdy5wYWdlUmVt
YWluaW5nTG9naWNhbEhlaWdodEZvck9mZnNldChsaW5lLnRvcCwgUmVuZGVyQmxvY2tGbG93OjpF
eGNsdWRlUGFnZUJvdW5kYXJ5KTsKLSAgICAgICAgYXV0byBhdFRoZVRvcE9mQ29sdW1uT3JQYWdl
ID0gZmxvdy5wYWdlTG9naWNhbEhlaWdodEZvck9mZnNldChsaW5lLnRvcCkgPT0gcmVtYWluaW5n
SGVpZ2h0OwotICAgICAgICBhdXRvIGxpbmVEb2VzTm90Rml0ID0gbGluZS5oZWlnaHQgPiByZW1h
aW5pbmdIZWlnaHQ7Ci0gICAgICAgIGlmIChsaW5lRG9lc05vdEZpdCB8fCAoYXRUaGVUb3BPZkNv
bHVtbk9yUGFnZSAmJiBsaW5lSW5kZXgpKSB7Ci0gICAgICAgICAgICBhdXRvIGxpbmVCcmVha0lu
ZGV4ID0gY29tcHV0ZUxpbmVCcmVha0luZGV4KGxpbmVJbmRleCwgbGluZUNvdW50LCBvcnBoYW5z
LCB3aWRvd3MsIHN0cnV0cyk7Ci0gICAgICAgICAgICAvLyBBcmUgd2Ugc3RpbGwgYXQgdGhlIHRv
cCBvZiB0aGUgY29sdW1uL3BhZ2U/Ci0gICAgICAgICAgICBhdFRoZVRvcE9mQ29sdW1uT3JQYWdl
ID0gYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSA/IGxpbmVJbmRleCA9PSBsaW5lQnJlYWtJbmRleCA6
IGZhbHNlOwotICAgICAgICAgICAgc2V0UGFnZUJyZWFrRm9yTGluZShsaW5lQnJlYWtJbmRleCwg
bGluZXMsIGZsb3csIHN0cnV0cywgYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSwgbGluZURvZXNOb3RG
aXQpOwotICAgICAgICAgICAgLy8gUmVjb21wdXRlIGxpbmUgcG9zaXRpb25zIHRoYXQgd2UgYWxy
ZWFkeSB2aXNpdGVkIGJ1dCB3aWRvdyBicmVhayBwdXNoZWQgdGhlbSB0byBhIG5ldyBwYWdlLgot
ICAgICAgICAgICAgZm9yIChhdXRvIGkgPSBsaW5lQnJlYWtJbmRleDsgaSA8IGxpbmVzLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgICAgIGxpbmVzLmF0KGkpID0gY29tcHV0ZUxpbmVUb3BBbmRC
b3R0b21XaXRoT3ZlcmZsb3coZmxvdywgaSwgc3RydXRzKTsKLSAgICAgICAgfQotICAgICAgICAr
K2xpbmVJbmRleDsKLSAgICB9Ci0gICAgc2ltcGxlTGluZXMuc2V0TGluZVN0cnV0cyhXVEZNb3Zl
KHN0cnV0cykpOwotfQotCi19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvU2ltcGxlTGluZUxheW91dFBhZ2luYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9TaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkZDZhMTdjMGU1YzkuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvU2ltcGxlTGluZUxheW91dFBhZ2luYXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDM5
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBSZW5kZXJCbG9ja0Zsb3c7Ci0KLW5hbWVzcGFjZSBTaW1wbGVMaW5lTGF5b3V0
IHsKLQotY2xhc3MgTGF5b3V0OwotICAgIAotdm9pZCBhZGp1c3RMaW5lUG9zaXRpb25zRm9yUGFn
aW5hdGlvbihMYXlvdXQmLCBSZW5kZXJCbG9ja0Zsb3cmKTsKLQotfQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNhNmMxODgxMjhlLi4wMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwzNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaCIKLQotI2luY2x1
ZGUgIklubGluZVRleHRCb3hTdHlsZS5oIgotI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgot
I2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGdW5j
dGlvbnMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlv
dXQgewotCi1zdGF0aWMgRmxvYXRQb2ludCBsaW5lUG9zaXRpb24oZmxvYXQgbG9naWNhbExlZnQs
IGZsb2F0IGxvZ2ljYWxUb3ApCi17Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQobG9naWNhbExlZnQs
IHJvdW5kZihsb2dpY2FsVG9wKSk7Ci19Ci0KLXN0YXRpYyBGbG9hdFNpemUgbGluZVNpemUoZmxv
YXQgbG9naWNhbExlZnQsIGZsb2F0IGxvZ2ljYWxSaWdodCwgZmxvYXQgaGVpZ2h0KQotewotICAg
IHJldHVybiBGbG9hdFNpemUobG9naWNhbFJpZ2h0IC0gbG9naWNhbExlZnQsIGhlaWdodCk7Ci19
Ci0KLVJ1blJlc29sdmVyOjpSdW46OlJ1bihjb25zdCBJdGVyYXRvciYgaXRlcmF0b3IpCi0gICAg
OiBtX2l0ZXJhdG9yKGl0ZXJhdG9yKQotewotfQotCi1TdHJpbmcgUnVuUmVzb2x2ZXI6OlJ1bjo6
dGV4dFdpdGhIeXBoZW4oKSBjb25zdAotewotICAgIGF1dG8mIHJ1biA9IG1faXRlcmF0b3Iuc2lt
cGxlUnVuKCk7Ci0gICAgQVNTRVJUKHJ1bi5oYXNIeXBoZW4pOwotICAgIC8vIEVtcHR5IHJ1bnMg
c2hvdWxkIG5vdCBoYXZlIGh5cGhlbi4KLSAgICBBU1NFUlQocnVuLnN0YXJ0IDwgcnVuLmVuZCk7
Ci0gICAgYXV0byYgc2VnbWVudCA9IG1faXRlcmF0b3IucmVzb2x2ZXIoKS5tX2Zsb3dDb250ZW50
cy5zZWdtZW50Rm9yUnVuKHJ1bi5zdGFydCwgcnVuLmVuZCk7Ci0gICAgYXV0byB0ZXh0ID0gU3Ry
aW5nVmlldyhzZWdtZW50LnRleHQpLnN1YnN0cmluZyhzZWdtZW50LnRvU2VnbWVudFBvc2l0aW9u
KHJ1bi5zdGFydCksIHJ1bi5lbmQgLSBydW4uc3RhcnQpOwotICAgIHJldHVybiBtYWtlU3RyaW5n
KHRleHQsIG1faXRlcmF0b3IucmVzb2x2ZXIoKS5mbG93KCkuc3R5bGUoKS5oeXBoZW5TdHJpbmco
KSk7Ci19Ci0KLUZsb2F0UmVjdCBSdW5SZXNvbHZlcjo6UnVuOjpyZWN0KCkgY29uc3QKLXsKLSAg
ICBhdXRvJiBydW4gPSBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpOwotICAgIGF1dG8mIHJlc29sdmVy
ID0gbV9pdGVyYXRvci5yZXNvbHZlcigpOwotICAgIGZsb2F0IGJhc2VsaW5lID0gY29tcHV0ZUJh
c2VsaW5lUG9zaXRpb24oKTsKLSAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gbGluZVBvc2l0aW9u
KHJ1bi5sb2dpY2FsTGVmdCwgYmFzZWxpbmUgLSByZXNvbHZlci5tX2FzY2VudCk7Ci0gICAgRmxv
YXRTaXplIHNpemUgPSBsaW5lU2l6ZShydW4ubG9naWNhbExlZnQsIHJ1bi5sb2dpY2FsUmlnaHQs
IHJlc29sdmVyLm1fYXNjZW50ICsgcmVzb2x2ZXIubV9kZXNjZW50ICsgcmVzb2x2ZXIubV92aXN1
YWxPdmVyZmxvd09mZnNldCk7Ci0KLSAgICByZXR1cm4gRmxvYXRSZWN0KHBvc2l0aW9uLCBzaXpl
KTsKLX0KLQotU3RyaW5nVmlldyBSdW5SZXNvbHZlcjo6UnVuOjp0ZXh0KCkgY29uc3QKLXsKLSAg
ICBhdXRvJiBydW4gPSBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpOwotICAgIEFTU0VSVChydW4uc3Rh
cnQgPCBydW4uZW5kKTsKLSAgICBhdXRvJiBzZWdtZW50ID0gbV9pdGVyYXRvci5yZXNvbHZlcigp
Lm1fZmxvd0NvbnRlbnRzLnNlZ21lbnRGb3JSdW4ocnVuLnN0YXJ0LCBydW4uZW5kKTsKLSAgICAv
LyBXZSBjdXJyZW50bHkgc3BsaXQgcnVucyBvbiBzZWdtZW50IGJvdW5kYXJpZXMgKGRpZmZlcmVu
dCBSZW5kZXJPYmplY3QpLgotICAgIEFTU0VSVChydW4uZW5kIDw9IHNlZ21lbnQuZW5kKTsKLSAg
ICByZXR1cm4gU3RyaW5nVmlldyhzZWdtZW50LnRleHQpLnN1YnN0cmluZyhzZWdtZW50LnRvU2Vn
bWVudFBvc2l0aW9uKHJ1bi5zdGFydCksIHJ1bi5lbmQgLSBydW4uc3RhcnQpOwotfQotCi1jb25z
dCBSZW5kZXJPYmplY3QmIFJ1blJlc29sdmVyOjpSdW46OnJlbmRlcmVyKCkgY29uc3QKLXsKLSAg
ICBhdXRvJiBydW4gPSBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpOwotICAgIC8vIEZsb3dDb250ZW50
cyBjYW5ub3QgZGlmZmVyZW50aWF0ZSBlbXB0eSBydW5zLgotICAgIEFTU0VSVChydW4uc3RhcnQg
IT0gcnVuLmVuZCk7Ci0gICAgcmV0dXJuIG1faXRlcmF0b3IucmVzb2x2ZXIoKS5tX2Zsb3dDb250
ZW50cy5zZWdtZW50Rm9yUnVuKHJ1bi5zdGFydCwgcnVuLmVuZCkucmVuZGVyZXI7Ci19Ci0KLXVu
c2lnbmVkIFJ1blJlc29sdmVyOjpSdW46OmxvY2FsU3RhcnQoKSBjb25zdAotewotICAgIGF1dG8m
IHJ1biA9IG1faXRlcmF0b3Iuc2ltcGxlUnVuKCk7Ci0gICAgLy8gRmxvd0NvbnRlbnRzIGNhbm5v
dCBkaWZmZXJlbnRpYXRlIGVtcHR5IHJ1bnMuCi0gICAgQVNTRVJUKHJ1bi5zdGFydCAhPSBydW4u
ZW5kKTsKLSAgICByZXR1cm4gbV9pdGVyYXRvci5yZXNvbHZlcigpLm1fZmxvd0NvbnRlbnRzLnNl
Z21lbnRGb3JSdW4ocnVuLnN0YXJ0LCBydW4uZW5kKS50b1NlZ21lbnRQb3NpdGlvbihydW4uc3Rh
cnQpOwotfQotCi11bnNpZ25lZCBSdW5SZXNvbHZlcjo6UnVuOjpsb2NhbEVuZCgpIGNvbnN0Ci17
Ci0gICAgYXV0byYgcnVuID0gbV9pdGVyYXRvci5zaW1wbGVSdW4oKTsKLSAgICAvLyBGbG93Q29u
dGVudHMgY2Fubm90IGRpZmZlcmVudGlhdGUgZW1wdHkgcnVucy4KLSAgICBBU1NFUlQocnVuLnN0
YXJ0ICE9IHJ1bi5lbmQpOwotICAgIHJldHVybiBtX2l0ZXJhdG9yLnJlc29sdmVyKCkubV9mbG93
Q29udGVudHMuc2VnbWVudEZvclJ1bihydW4uc3RhcnQsIHJ1bi5lbmQpLnRvU2VnbWVudFBvc2l0
aW9uKHJ1bi5lbmQpOwotfQotCi1SdW5SZXNvbHZlcjo6SXRlcmF0b3I6Okl0ZXJhdG9yKGNvbnN0
IFJ1blJlc29sdmVyJiByZXNvbHZlciwgdW5zaWduZWQgcnVuSW5kZXgsIHVuc2lnbmVkIGxpbmVJ
bmRleCkKLSAgICA6IG1fbGF5b3V0KCZyZXNvbHZlci5tX2xheW91dCkKLSAgICAsIG1fcmVzb2x2
ZXIoJnJlc29sdmVyKQotICAgICwgbV9ydW5JbmRleChydW5JbmRleCkKLSAgICAsIG1fbGluZUlu
ZGV4KGxpbmVJbmRleCkKLXsKLSAgICBBU1NFUlQoJnJlc29sdmVyID09ICZtX2xheW91dC0+cnVu
UmVzb2x2ZXIoKSk7Ci19Ci0KLVJ1blJlc29sdmVyOjpJdGVyYXRvciYgUnVuUmVzb2x2ZXI6Okl0
ZXJhdG9yOjphZHZhbmNlKCkKLXsKLSAgICBpZiAoc2ltcGxlUnVuKCkuaXNFbmRPZkxpbmUpCi0g
ICAgICAgICsrbV9saW5lSW5kZXg7Ci0gICAgKyttX3J1bkluZGV4OwotICAgIHJldHVybiAqdGhp
czsKLX0KLQotUnVuUmVzb2x2ZXI6Okl0ZXJhdG9yJiBSdW5SZXNvbHZlcjo6SXRlcmF0b3I6OmFk
dmFuY2VMaW5lcyh1bnNpZ25lZCBsaW5lQ291bnQpCi17Ci0gICAgdW5zaWduZWQgcnVuQ291bnQg
PSBsYXlvdXQoKS5ydW5Db3VudCgpOwotICAgIGlmIChydW5Db3VudCA9PSBsYXlvdXQoKS5saW5l
Q291bnQoKSkgewotICAgICAgICBtX3J1bkluZGV4ID0gc3RkOjptaW4ocnVuQ291bnQsIG1fcnVu
SW5kZXggKyBsaW5lQ291bnQpOwotICAgICAgICBtX2xpbmVJbmRleCA9IG1fcnVuSW5kZXg7Ci0g
ICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gbV9saW5l
SW5kZXggKyBsaW5lQ291bnQ7Ci0gICAgd2hpbGUgKG1fbGluZUluZGV4IDwgdGFyZ2V0ICYmIG1f
cnVuSW5kZXggPCBydW5Db3VudCkKLSAgICAgICAgYWR2YW5jZSgpOwotCi0gICAgcmV0dXJuICp0
aGlzOwotfQotCi1SdW5SZXNvbHZlcjo6UnVuUmVzb2x2ZXIoY29uc3QgUmVuZGVyQmxvY2tGbG93
JiBmbG93LCBjb25zdCBMYXlvdXQmIGxheW91dCkKLSAgICA6IG1fZmxvd1JlbmRlcmVyKGZsb3cp
Ci0gICAgLCBtX2xheW91dChsYXlvdXQpCi0gICAgLCBtX2Zsb3dDb250ZW50cyhmbG93KQotICAg
ICwgbV9saW5lSGVpZ2h0KGxpbmVIZWlnaHRGcm9tRmxvdyhmbG93KSkKLSAgICAsIG1fYmFzZWxp
bmUoYmFzZWxpbmVGcm9tRmxvdyhmbG93KSkKLSAgICAsIG1fYm9yZGVyQW5kUGFkZGluZ0JlZm9y
ZShmbG93LmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKSkKLSAgICAsIG1fYXNjZW50KGZsb3cuc3R5
bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpCi0gICAgLCBtX2Rlc2Nl
bnQoZmxvdy5zdHlsZSgpLmZvbnRDYXNjYWRlKCkuZm9udE1ldHJpY3MoKS5kZXNjZW50KCkpCi0g
ICAgLCBtX3Zpc3VhbE92ZXJmbG93T2Zmc2V0KHZpc3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvbnMo
Zmxvdy5zdHlsZSgpLCBudWxscHRyKS5ib3R0b20pCi17Ci19Ci0KLXVuc2lnbmVkIFJ1blJlc29s
dmVyOjphZGp1c3RMaW5lSW5kZXhGb3JTdHJ1dHMoTGF5b3V0VW5pdCB5LCBJbmRleFR5cGUgdHlw
ZSwgdW5zaWduZWQgbGluZUluZGV4Q2FuZGlkYXRlKSBjb25zdAotewotICAgIGF1dG8mIHN0cnV0
cyA9IG1fbGF5b3V0LnN0cnV0cygpOwotICAgIC8vIFdlIG5lZWQgdG8gb2Zmc2V0IHRoZSBsaW5l
SW5kZXggd2l0aCBsaW5lIHN0cnV0cyB3aGVuIHRoZXJlJ3MgYW4gYWN0dWFsIHN0cnV0IGJlZm9y
ZSB0aGUgY2FuZGlkYXRlLgotICAgIGF1dG8mIHN0cnV0ID0gc3RydXRzLmZpcnN0KCk7Ci0gICAg
aWYgKHN0cnV0LmxpbmVCcmVhayA+PSBsaW5lSW5kZXhDYW5kaWRhdGUpCi0gICAgICAgIHJldHVy
biBsaW5lSW5kZXhDYW5kaWRhdGU7Ci0gICAgdW5zaWduZWQgc3RydXRJbmRleCA9IDA7Ci0gICAg
T3B0aW9uYWw8dW5zaWduZWQ+IGxhc3RJbmRleENhbmRpZGF0ZTsKLSAgICBhdXRvIHRvcCA9IHN0
cnV0LmxpbmVCcmVhayAqIG1fbGluZUhlaWdodDsKLSAgICBhdXRvIGxpbmVIZWlnaHRXaXRoT3Zl
cmZsb3cgPSBtX2xpbmVIZWlnaHQ7Ci0gICAgLy8gSWYgZm9udCBpcyBsYXJnZXIgdGhhbiB0aGUg
bGluZSBoZWlnaHQgKGdseXBocyBvdmVyZmxvdyksIHVzZSB0aGUgZm9udCBzaXplIHdoZW4gY2hl
Y2tpbmcgbGluZSBib3VuZGFyaWVzLgotICAgIGlmIChtX2FzY2VudCArIG1fZGVzY2VudCA+IG1f
bGluZUhlaWdodCkgewotICAgICAgICBsaW5lSGVpZ2h0V2l0aE92ZXJmbG93ID0gbV9hc2NlbnQg
KyBtX2Rlc2NlbnQ7Ci0gICAgICAgIHRvcCArPSBtX2Jhc2VsaW5lIC0gbV9hc2NlbnQ7Ci0gICAg
fQotICAgIGF1dG8gYm90dG9tID0gdG9wICsgbGluZUhlaWdodFdpdGhPdmVyZmxvdzsKLSAgICBm
b3IgKGF1dG8gbGluZUluZGV4ID0gc3RydXQubGluZUJyZWFrOyBsaW5lSW5kZXggPCBtX2xheW91
dC5saW5lQ291bnQoKTsgKytsaW5lSW5kZXgpIHsKLSAgICAgICAgZmxvYXQgc3RydXRPZmZzZXQg
PSAwOwotICAgICAgICBpZiAoc3RydXRJbmRleCA8IHN0cnV0cy5zaXplKCkgJiYgc3RydXRzLmF0
KHN0cnV0SW5kZXgpLmxpbmVCcmVhayA9PSBsaW5lSW5kZXgpCi0gICAgICAgICAgICBzdHJ1dE9m
ZnNldCA9IHN0cnV0cy5hdChzdHJ1dEluZGV4KyspLm9mZnNldDsKLSAgICAgICAgYm90dG9tID0g
dG9wICsgc3RydXRPZmZzZXQgKyBsaW5lSGVpZ2h0V2l0aE92ZXJmbG93OwotICAgICAgICBpZiAo
eSA+PSB0b3AgJiYgeSA8IGJvdHRvbSkgewotICAgICAgICAgICAgaWYgKHR5cGUgPT0gSW5kZXhU
eXBlOjpGaXJzdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbGluZUluZGV4OwotICAgICAgICAg
ICAgbGFzdEluZGV4Q2FuZGlkYXRlID0gbGluZUluZGV4OwotICAgICAgICB9IGVsc2UgaWYgKGxh
c3RJbmRleENhbmRpZGF0ZSkKLSAgICAgICAgICAgIHJldHVybiAqbGFzdEluZGV4Q2FuZGlkYXRl
OwotICAgICAgICB0b3AgKz0gbV9saW5lSGVpZ2h0ICsgc3RydXRPZmZzZXQ7Ci0gICAgfQotICAg
IGlmIChsYXN0SW5kZXhDYW5kaWRhdGUgfHwgeSA+PSBib3R0b20pCi0gICAgICAgIHJldHVybiBt
X2xheW91dC5saW5lQ291bnQoKSAtIDE7Ci0gICAgLy8gV2UgbWlzc2VkIHRoZSBsaW5lLgotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBsaW5lSW5kZXhDYW5kaWRhdGU7Ci19
Ci0KLXVuc2lnbmVkIFJ1blJlc29sdmVyOjpsaW5lSW5kZXhGb3JIZWlnaHQoTGF5b3V0VW5pdCBo
ZWlnaHQsIEluZGV4VHlwZSB0eXBlKSBjb25zdAotewotICAgIEFTU0VSVChtX2xpbmVIZWlnaHQp
OwotICAgIGZsb2F0IHkgPSBoZWlnaHQgLSBtX2JvcmRlckFuZFBhZGRpbmdCZWZvcmU7Ci0gICAg
Ly8gTGluZXMgbWF5IG92ZXJsYXAsIGFkanVzdCB0byBnZXQgdGhlIGZpcnN0IG9yIGxhc3QgbGlu
ZSBhdCB0aGlzIGhlaWdodC4KLSAgICBhdXRvIGFkanVzdGVkWSA9IHk7Ci0gICAgaWYgKHR5cGUg
PT0gSW5kZXhUeXBlOjpGaXJzdCkKLSAgICAgICAgYWRqdXN0ZWRZICs9IG1fbGluZUhlaWdodCAt
IChtX2Jhc2VsaW5lICsgbV9kZXNjZW50KTsKLSAgICBlbHNlCi0gICAgICAgIGFkanVzdGVkWSAt
PSBtX2Jhc2VsaW5lIC0gbV9hc2NlbnQ7Ci0gICAgYWRqdXN0ZWRZID0gc3RkOjptYXg8ZmxvYXQ+
KGFkanVzdGVkWSwgMCk7Ci0gICAgYXV0byBsaW5lSW5kZXhDYW5kaWRhdGUgPSAgc3RkOjptaW48
dW5zaWduZWQ+KGFkanVzdGVkWSAvIG1fbGluZUhlaWdodCwgbV9sYXlvdXQubGluZUNvdW50KCkg
LSAxKTsKLSAgICBpZiAobV9sYXlvdXQuaGFzTGluZVN0cnV0cygpKQotICAgICAgICByZXR1cm4g
YWRqdXN0TGluZUluZGV4Rm9yU3RydXRzKExheW91dFVuaXQoeSksIHR5cGUsIGxpbmVJbmRleENh
bmRpZGF0ZSk7Ci0gICAgcmV0dXJuIGxpbmVJbmRleENhbmRpZGF0ZTsKLX0KLQotV1RGOjpJdGVy
YXRvclJhbmdlPFJ1blJlc29sdmVyOjpJdGVyYXRvcj4gUnVuUmVzb2x2ZXI6OnJhbmdlRm9yUmVj
dChjb25zdCBMYXlvdXRSZWN0JiByZWN0KSBjb25zdAoteyAKLSAgICBpZiAoIW1fbGluZUhlaWdo
dCkKLSAgICAgICAgcmV0dXJuIHsgYmVnaW4oKSwgZW5kKCkgfTsKLQotICAgIHVuc2lnbmVkIGZp
cnN0TGluZSA9IGxpbmVJbmRleEZvckhlaWdodChyZWN0LnkoKSwgSW5kZXhUeXBlOjpGaXJzdCk7
Ci0gICAgdW5zaWduZWQgbGFzdExpbmUgPSBzdGQ6Om1heChmaXJzdExpbmUsIGxpbmVJbmRleEZv
ckhlaWdodChyZWN0Lm1heFkoKSwgSW5kZXhUeXBlOjpMYXN0KSk7Ci0gICAgYXV0byByYW5nZUJl
Z2luID0gYmVnaW4oKS5hZHZhbmNlTGluZXMoZmlyc3RMaW5lKTsKLSAgICBpZiAocmFuZ2VCZWdp
biA9PSBlbmQoKSkKLSAgICAgICAgcmV0dXJuIHsgZW5kKCksIGVuZCgpIH07Ci0gICAgYXV0byBy
YW5nZUVuZCA9IHJhbmdlQmVnaW47Ci0gICAgQVNTRVJUKGxhc3RMaW5lID49IGZpcnN0TGluZSk7
Ci0gICAgcmFuZ2VFbmQuYWR2YW5jZUxpbmVzKGxhc3RMaW5lIC0gZmlyc3RMaW5lICsgMSk7Ci0g
ICAgcmV0dXJuIHsgcmFuZ2VCZWdpbiwgcmFuZ2VFbmQgfTsKLX0KLQotV1RGOjpJdGVyYXRvclJh
bmdlPFJ1blJlc29sdmVyOjpJdGVyYXRvcj4gUnVuUmVzb2x2ZXI6OnJhbmdlRm9yTGluZSh1bnNp
Z25lZCBsaW5lSW5kZXgpIGNvbnN0Ci17Ci0gICAgYXV0byByYW5nZUJlZ2luID0gYmVnaW4oKS5h
ZHZhbmNlTGluZXMobGluZUluZGV4KTsKLSAgICBpZiAocmFuZ2VCZWdpbiA9PSBlbmQoKSkKLSAg
ICAgICAgcmV0dXJuIHsgZW5kKCksIGVuZCgpIH07Ci0gICAgYXV0byByYW5nZUVuZCA9IHJhbmdl
QmVnaW47Ci0gICAgcmFuZ2VFbmQuYWR2YW5jZUxpbmVzKDEpOwotICAgIHJldHVybiB7IHJhbmdl
QmVnaW4sIHJhbmdlRW5kIH07Ci19Ci0KLVdURjo6SXRlcmF0b3JSYW5nZTxSdW5SZXNvbHZlcjo6
SXRlcmF0b3I+IFJ1blJlc29sdmVyOjpyYW5nZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVj
dCYgcmVuZGVyZXIpIGNvbnN0Ci17Ci0gICAgaWYgKGJlZ2luKCkgPT0gZW5kKCkpCi0gICAgICAg
IHJldHVybiB7IGVuZCgpLCBlbmQoKSB9OwotICAgIEZsb3dDb250ZW50czo6SXRlcmF0b3Igc2Vn
bWVudCA9IG1fZmxvd0NvbnRlbnRzLmJlZ2luKCk7Ci0gICAgYXV0byBydW4gPSBiZWdpbigpOwot
ICAgIEFTU0VSVChzZWdtZW50LT5zdGFydCA8PSAoKnJ1bikuc3RhcnQoKSk7Ci0gICAgLy8gTW92
ZSBydW4gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VnbWVudC4KLSAgICB3aGlsZSAoJnNlZ21l
bnQtPnJlbmRlcmVyICE9ICZyZW5kZXJlciAmJiBydW4gIT0gZW5kKCkpIHsKLSAgICAgICAgaWYg
KCgqcnVuKS5zdGFydCgpID09IHNlZ21lbnQtPnN0YXJ0ICYmICgqcnVuKS5lbmQoKSA9PSBzZWdt
ZW50LT5lbmQpIHsKLSAgICAgICAgICAgICsrcnVuOwotICAgICAgICAgICAgKytzZWdtZW50Owot
ICAgICAgICB9IGVsc2UgaWYgKCgqcnVuKS5zdGFydCgpIDwgc2VnbWVudC0+ZW5kKQotICAgICAg
ICAgICAgKytydW47Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICsrc2VnbWVudDsKLSAgICAg
ICAgQVNTRVJUKHNlZ21lbnQgIT0gbV9mbG93Q29udGVudHMuZW5kKCkpOwotICAgIH0KLSAgICAv
LyBEbyB3ZSBhY3R1YWxseSBoYXZlIGEgcnVuIGZvciB0aGlzIHJlbmRlcmVyPwotICAgIC8vIENv
bGxhcHNlZCB3aGl0ZXNwYWNlIHdpdGggZGVkaWNhdGVkIHJlbmRlcmVyIGNvdWxkIGVuZCB1cCB3
aXRoIG5vIHJ1biBhdCBhbGwuCi0gICAgaWYgKHJ1biA9PSBlbmQoKSB8fCAoc2VnbWVudC0+c3Rh
cnQgIT0gc2VnbWVudC0+ZW5kICYmIHNlZ21lbnQtPmVuZCA8PSAoKnJ1bikuc3RhcnQoKSkpCi0g
ICAgICAgIHJldHVybiB7IGVuZCgpLCBlbmQoKSB9OwotCi0gICAgYXV0byByYW5nZUJlZ2luID0g
cnVuOwotICAgIC8vIE1vdmUgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHNlZ21lbnQuCi0gICAgd2hp
bGUgKHJ1biAhPSBlbmQoKSAmJiAoKnJ1bikuc3RhcnQoKSA8IHNlZ21lbnQtPmVuZCkKLSAgICAg
ICAgKytydW47Ci0gICAgLy8gU3BlY2lhbCBjYXNlIHdoZW4gc2VnbWVudCA9PSBydW4uCi0gICAg
aWYgKHJ1biA9PSByYW5nZUJlZ2luKQotICAgICAgICArK3J1bjsKLSAgICByZXR1cm4geyByYW5n
ZUJlZ2luLCBydW4gfTsKLX0KLQotUnVuUmVzb2x2ZXI6Okl0ZXJhdG9yIFJ1blJlc29sdmVyOjpy
dW5Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X2xpbmVIZWlnaHQpCi0gICAgICAgIHJldHVybiBlbmQoKTsKLSAgICBpZiAoYmVnaW4oKSA9PSBl
bmQoKSkKLSAgICAgICAgcmV0dXJuIGVuZCgpOwotICAgIHVuc2lnbmVkIGxpbmVJbmRleCA9IGxp
bmVJbmRleEZvckhlaWdodChwb2ludC55KCksIEluZGV4VHlwZTo6TGFzdCk7Ci0gICAgYXV0byB4
ID0gcG9pbnQueCgpIC0gbV9ib3JkZXJBbmRQYWRkaW5nQmVmb3JlOwotICAgIGF1dG8gaXQgPSBi
ZWdpbigpOwotICAgIGl0LmFkdmFuY2VMaW5lcyhsaW5lSW5kZXgpOwotICAgIC8vIFBvaW50IGlz
IGF0IHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGZpcnN0IHJ1biBvbiB0aGlzIGxpbmUuCi0gICAgaWYg
KCgqaXQpLmxvZ2ljYWxMZWZ0KCkgPiB4KQotICAgICAgICByZXR1cm4gaXQ7Ci0gICAgLy8gQWR2
YW5jZSB0byB0aGUgZmlyc3QgY2FuZGlkYXRlIHJ1biBvbiB0aGlzIGxpbmUuCi0gICAgd2hpbGUg
KGl0ICE9IGVuZCgpICYmICgqaXQpLmxvZ2ljYWxSaWdodCgpIDwgeCAmJiBsaW5lSW5kZXggPT0g
aXQubGluZUluZGV4KCkpCi0gICAgICAgICsraXQ7Ci0gICAgLy8gV2UganVtcGVkIHRvIHRoZSBu
ZXh0IGxpbmUgc28gdGhlIHBvaW50IGlzIGF0IHRoZSByaWdodCBzaWRlIG9mIHRoZSBwcmV2aW91
cyBsaW5lLgotICAgIGlmIChpdC5saW5lSW5kZXgoKSA+IGxpbmVJbmRleCkKLSAgICAgICAgcmV0
dXJuIC0taXQ7Ci0gICAgLy8gTm93IHdlIGhhdmUgYSBjYW5kaWRhdGUgcnVuLgotICAgIC8vIEZp
bmQgdGhlIGxhc3QgcnVuIHRoYXQgc3RpbGwgY29udGFpbnMgdGhpcyBwb2ludCAodGFraW5nIG92
ZXJsYXBwaW5nIHJ1bnMgd2l0aCBvZGQgd29yZCBzcGFjaW5nIHZhbHVlcyBpbnRvIGFjY291bnQp
LgotICAgIHdoaWxlIChpdCAhPSBlbmQoKSAmJiAoKml0KS5sb2dpY2FsTGVmdCgpIDw9IHggJiYg
bGluZUluZGV4ID09IGl0LmxpbmVJbmRleCgpKQotICAgICAgICArK2l0OwotICAgIHJldHVybiAt
LWl0OwotfQotCi1XVEY6Okl0ZXJhdG9yUmFuZ2U8UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yPiBSdW5S
ZXNvbHZlcjo6cmFuZ2VGb3JSZW5kZXJlcldpdGhPZmZzZXRzKGNvbnN0IFJlbmRlck9iamVjdCYg
cmVuZGVyZXIsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKHN0YXJ0T2Zmc2V0IDw9IGVuZE9mZnNldCk7Ci0gICAgYXV0byByYW5n
ZSA9IHJhbmdlRm9yUmVuZGVyZXIocmVuZGVyZXIpOwotICAgIGlmIChyYW5nZS5iZWdpbigpID09
IHJhbmdlLmVuZCgpKQotICAgICAgICByZXR1cm4geyBlbmQoKSwgZW5kKCkgfTsKLSAgICBhdXRv
IGl0ID0gcmFuZ2UuYmVnaW4oKTsKLSAgICBhdXRvIGxvY2FsRW5kID0gKCppdCkuc3RhcnQoKSAr
IGVuZE9mZnNldDsKLSAgICAvLyBBZHZhbmNlIHRvIHRoZSBmaXJzdCBydW4gYmVmb3JlIHRoZSBz
dGFydCBvZmZzZXQuIE9ubHkgdGhlIGZpcnN0IG5vZGUgaW4gYSByYW5nZSBjYW4gaGF2ZSBhIHN0
YXJ0T2Zmc2V0LgotICAgIC8vIE5vdGUgdGhhdCB0aGUgc3RhcnQgb2Zmc2V0IG1heSBjb2luY2lk
ZSB3aXRoIHRoZSBlbmQgb2YgYSBydW4uIFRoZSBydW4gaXMgc3RpbGwgY29uc2lkZXJlZCBzbyB0
aGF0IHdlCi0gICAgLy8gY2FuIHJldHVybiBhbiBlbXB0eSByZWN0LCB3aGljaCBjb25mb3JtcyB0
byB0aGUgYmVoYXZpb3Igb2YgRWxlbWVudC5nZXRDbGllbnRSZWN0cygpLgotICAgIHdoaWxlIChp
dCAhPSByYW5nZS5lbmQoKSAmJiAoKml0KS5lbmQoKSA8IHN0YXJ0T2Zmc2V0KQotICAgICAgICAr
K2l0OwotICAgIGlmIChpdCA9PSByYW5nZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHsgZW5kKCks
IGVuZCgpIH07Ci0gICAgYXV0byByYW5nZUJlZ2luID0gaXQ7Ci0gICAgLy8gU3BlY2lhbCBjYXNl
IGVtcHR5IHJhbmdlcyB0aGF0IHN0YXJ0IGF0IHRoZSBlZGdlIG9mIHRoZSBydW4uIEFwcGFyZW50
bHkgbm9ybWFsIGxpbmUgbGF5b3V0IGluY2x1ZGUgdGhvc2UuCi0gICAgaWYgKGxvY2FsRW5kID09
IHN0YXJ0T2Zmc2V0ICYmICgqaXQpLnN0YXJ0KCkgPT0gbG9jYWxFbmQpCi0gICAgICAgIHJldHVy
biB7IHJhbmdlQmVnaW4sICsraXQgfTsKLSAgICAvLyBBZHZhbmNlIGJleW9uZCB0aGUgbGFzdCBy
dW4gd2l0aCB0aGUgZW5kIG9mZnNldC4KLSAgICB3aGlsZSAoaXQgIT0gcmFuZ2UuZW5kKCkgJiYg
KCppdCkuc3RhcnQoKSA8IGxvY2FsRW5kKQotICAgICAgICArK2l0OwotICAgIHJldHVybiB7IHJh
bmdlQmVnaW4sIGl0IH07Ci19Ci0KLUxpbmVSZXNvbHZlcjo6SXRlcmF0b3I6Okl0ZXJhdG9yKFJ1
blJlc29sdmVyOjpJdGVyYXRvciBydW5JdGVyYXRvcikKLSAgICA6IG1fcnVuSXRlcmF0b3IocnVu
SXRlcmF0b3IpCi17Ci19Ci0KLUZsb2F0UmVjdCBMaW5lUmVzb2x2ZXI6Okl0ZXJhdG9yOjpvcGVy
YXRvciooKSBjb25zdAotewotICAgIHVuc2lnbmVkIGN1cnJlbnRMaW5lID0gbV9ydW5JdGVyYXRv
ci5saW5lSW5kZXgoKTsKLSAgICBhdXRvIGl0ID0gbV9ydW5JdGVyYXRvcjsKLSAgICBGbG9hdFJl
Y3QgcmVjdCA9ICgqaXQpLnJlY3QoKTsKLSAgICB3aGlsZSAoaXQuYWR2YW5jZSgpLmxpbmVJbmRl
eCgpID09IGN1cnJlbnRMaW5lKQotICAgICAgICByZWN0LnVuaXRlKCgqaXQpLnJlY3QoKSk7Ci0g
ICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLWNvbnN0IFJlbmRlck9iamVjdCYgTGluZVJlc29sdmVyOjpJ
dGVyYXRvcjo6cmVuZGVyZXIoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBUaGlzIHdvcmtzIGFz
IGxvbmcgYXMgd2UndmUgZ290IG9ubHkgb25lIHJlbmRlcmVyIHBlciBsaW5lLgotICAgIGF1dG8g
cnVuID0gKm1fcnVuSXRlcmF0b3I7Ci0gICAgcmV0dXJuIG1fcnVuSXRlcmF0b3IucmVzb2x2ZXIo
KS5mbG93Q29udGVudHMoKS5zZWdtZW50Rm9yUnVuKHJ1bi5zdGFydCgpLCBydW4uZW5kKCkpLnJl
bmRlcmVyOwotfQotCi1MaW5lUmVzb2x2ZXI6OkxpbmVSZXNvbHZlcihjb25zdCBSdW5SZXNvbHZl
ciYgcnVuUmVzb2x2ZXIpCi0gICAgOiBtX3J1blJlc29sdmVyKHJ1blJlc29sdmVyKQotewotfQot
Ci19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxh
eW91dFJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91
dFJlc29sdmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNjAwNDdmNTU3My4u
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5
b3V0UmVzb2x2ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxNyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCi0jaW5jbHVkZSAiUmVu
ZGVyQmxvY2tGbG93LmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dC5oIgotI2luY2x1ZGUg
IlNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaCIKLSNpbmNsdWRlIDx3dGYvSXRlcmF0b3JS
YW5nZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci1uYW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7Ci0KLWNsYXNzIFJ1blJlc29sdmVy
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBjbGFzcyBJdGVy
YXRvcjsKLQotICAgIGNsYXNzIFJ1biB7Ci0gICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBS
dW4oY29uc3QgSXRlcmF0b3ImKTsKLQotICAgICAgICAvLyBQb3NpdGlvbiByZWxhdGl2ZSB0byB0
aGUgZW5jbG9zaW5nIGZsb3cgYmxvY2suCi0gICAgICAgIHVuc2lnbmVkIHN0YXJ0KCkgY29uc3Q7
Ci0gICAgICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0OwotICAgICAgICAvLyBQb3NpdGlvbiByZWxh
dGl2ZSB0byB0aGUgYWN0dWFsIHJlbmRlcmVyLgotICAgICAgICB1bnNpZ25lZCBsb2NhbFN0YXJ0
KCkgY29uc3Q7Ci0gICAgICAgIHVuc2lnbmVkIGxvY2FsRW5kKCkgY29uc3Q7Ci0KLSAgICAgICAg
ZmxvYXQgbG9naWNhbExlZnQoKSBjb25zdDsKLSAgICAgICAgZmxvYXQgbG9naWNhbFJpZ2h0KCkg
Y29uc3Q7Ci0KLSAgICAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdDsKLSAgICAgICAgZmxvYXQg
ZXhwYW5zaW9uKCkgY29uc3Q7Ci0gICAgICAgIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJl
aGF2aW9yKCkgY29uc3Q7Ci0gICAgICAgIGludCBiYXNlbGluZVBvc2l0aW9uKCkgY29uc3Q7Ci0g
ICAgICAgIGludCBiYXNlbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0b3IucmVzb2x2ZXIo
KS5tX2Jhc2VsaW5lOyB9Ci0gICAgICAgIFN0cmluZ1ZpZXcgdGV4dCgpIGNvbnN0OwotICAgICAg
ICBTdHJpbmcgdGV4dFdpdGhIeXBoZW4oKSBjb25zdDsKLSAgICAgICAgY29uc3QgUmVuZGVyT2Jq
ZWN0JiByZW5kZXJlcigpIGNvbnN0OwotICAgICAgICBib29sIGlzRW5kT2ZMaW5lKCkgY29uc3Q7
Ci0gICAgICAgIGJvb2wgaGFzSHlwaGVuKCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRvci5zaW1w
bGVSdW4oKS5oYXNIeXBoZW47IH0KLSAgICAgICAgYm9vbCBpc0xpbmVCcmVhaygpIGNvbnN0IHsg
cmV0dXJuIG1faXRlcmF0b3Iuc2ltcGxlUnVuKCkuaXNMaW5lQnJlYWs7IH0KLSAgICAgICAgY29u
c3QgU2ltcGxlTGluZUxheW91dDo6UnVuJiBzaW1wbGVSdW4oKSBjb25zdCB7IHJldHVybiBtX2l0
ZXJhdG9yLnNpbXBsZVJ1bigpOyB9Ci0KLSAgICAgICAgdW5zaWduZWQgbGluZUluZGV4KCkgY29u
c3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBmbG9hdCBjb21wdXRlQmFzZWxpbmVQb3NpdGlv
bigpIGNvbnN0OwotICAgICAgICB2b2lkIGNvbnN0cnVjdFN0cmluZ0Zvckh5cGhlbklmTmVlZGVk
KCk7Ci0KLSAgICAgICAgY29uc3QgSXRlcmF0b3ImIG1faXRlcmF0b3I7Ci0gICAgfTsKLQotICAg
IGNsYXNzIEl0ZXJhdG9yIHsKLSAgICBmcmllbmQgY2xhc3MgUnVuOwotICAgIGZyaWVuZCBjbGFz
cyBSdW5SZXNvbHZlcjsKLSAgICBmcmllbmQgY2xhc3MgTGluZVJlc29sdmVyOwotICAgIHB1Ymxp
YzoKLSAgICAgICAgSXRlcmF0b3IoY29uc3QgUnVuUmVzb2x2ZXImLCB1bnNpZ25lZCBydW5JbmRl
eCwgdW5zaWduZWQgbGluZUluZGV4KTsKLQotICAgICAgICBJdGVyYXRvciYgb3BlcmF0b3IrKygp
OwotICAgICAgICBJdGVyYXRvciYgb3BlcmF0b3ItLSgpOwotCi0gICAgICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBJdGVyYXRvciYpIGNvbnN0OwotICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgSXRlcmF0b3ImKSBjb25zdDsKLQotICAgICAgICBSdW4gb3BlcmF0b3IqKCkgY29uc3Q7Ci0K
LSAgICAgICAgYm9vbCBhdEJlZ2luKCkgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBj
b25zdCBTaW1wbGVMaW5lTGF5b3V0OjpSdW4mIHNpbXBsZVJ1bigpIGNvbnN0OwotICAgICAgICB1
bnNpZ25lZCBsaW5lSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2xpbmVJbmRleDsgfQotICAgICAg
ICBJdGVyYXRvciYgYWR2YW5jZSgpOwotICAgICAgICBJdGVyYXRvciYgYWR2YW5jZUxpbmVzKHVu
c2lnbmVkKTsKLSAgICAgICAgY29uc3QgUnVuUmVzb2x2ZXImIHJlc29sdmVyKCkgY29uc3QgeyBy
ZXR1cm4gKm1fcmVzb2x2ZXI7IH0KLSAgICAgICAgY29uc3QgTGF5b3V0JiBsYXlvdXQoKSBjb25z
dCB7IHJldHVybiAqbV9sYXlvdXQ7IH0KLQotICAgICAgICBSZWZQdHI8Y29uc3QgTGF5b3V0PiBt
X2xheW91dDsKLSAgICAgICAgY29uc3QgUnVuUmVzb2x2ZXIqIG1fcmVzb2x2ZXI7Ci0gICAgICAg
IHVuc2lnbmVkIG1fcnVuSW5kZXg7Ci0gICAgICAgIHVuc2lnbmVkIG1fbGluZUluZGV4OwotICAg
IH07Ci0KLSAgICBSdW5SZXNvbHZlcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmLCBjb25zdCBMYXlv
dXQmKTsKLQotICAgIGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdygpIGNvbnN0IHsgcmV0dXJu
IG1fZmxvd1JlbmRlcmVyOyB9Ci0gICAgY29uc3QgRmxvd0NvbnRlbnRzJiBmbG93Q29udGVudHMo
KSBjb25zdCB7IHJldHVybiBtX2Zsb3dDb250ZW50czsgfQotICAgIEl0ZXJhdG9yIGJlZ2luKCkg
Y29uc3Q7Ci0gICAgSXRlcmF0b3IgZW5kKCkgY29uc3Q7Ci0KLSAgICBXVEY6Okl0ZXJhdG9yUmFu
Z2U8SXRlcmF0b3I+IHJhbmdlRm9yUmVjdChjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7Ci0gICAg
V1RGOjpJdGVyYXRvclJhbmdlPEl0ZXJhdG9yPiByYW5nZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRl
ck9iamVjdCYpIGNvbnN0OwotICAgIFdURjo6SXRlcmF0b3JSYW5nZTxJdGVyYXRvcj4gcmFuZ2VG
b3JMaW5lKHVuc2lnbmVkIGxpbmVJbmRleCkgY29uc3Q7Ci0gICAgSXRlcmF0b3IgcnVuRm9yUG9p
bnQoY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKLSAgICBXVEY6Okl0ZXJhdG9yUmFuZ2U8SXRl
cmF0b3I+IHJhbmdlRm9yUmVuZGVyZXJXaXRoT2Zmc2V0cyhjb25zdCBSZW5kZXJPYmplY3QmLCB1
bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBlbnVt
IGNsYXNzIEluZGV4VHlwZSB7IEZpcnN0LCBMYXN0IH07Ci0gICAgdW5zaWduZWQgbGluZUluZGV4
Rm9ySGVpZ2h0KExheW91dFVuaXQsIEluZGV4VHlwZSkgY29uc3Q7Ci0gICAgdW5zaWduZWQgYWRq
dXN0TGluZUluZGV4Rm9yU3RydXRzKExheW91dFVuaXQsIEluZGV4VHlwZSwgdW5zaWduZWQgbGlu
ZUluZGV4Q2FuZGlkYXRlKSBjb25zdDsKLQotICAgIGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgbV9m
bG93UmVuZGVyZXI7Ci0gICAgY29uc3QgTGF5b3V0JiBtX2xheW91dDsKLSAgICBjb25zdCBGbG93
Q29udGVudHMgbV9mbG93Q29udGVudHM7Ci0gICAgY29uc3QgTGF5b3V0VW5pdCBtX2xpbmVIZWln
aHQ7Ci0gICAgY29uc3QgTGF5b3V0VW5pdCBtX2Jhc2VsaW5lOwotICAgIGNvbnN0IExheW91dFVu
aXQgbV9ib3JkZXJBbmRQYWRkaW5nQmVmb3JlOwotICAgIGNvbnN0IGZsb2F0IG1fYXNjZW50Owot
ICAgIGNvbnN0IGZsb2F0IG1fZGVzY2VudDsKLSAgICBjb25zdCBmbG9hdCBtX3Zpc3VhbE92ZXJm
bG93T2Zmc2V0OwotfTsKLQotY2xhc3MgTGluZVJlc29sdmVyIHsKLXB1YmxpYzoKLSAgICBjbGFz
cyBJdGVyYXRvciB7Ci0gICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBJdGVyYXRvcihSdW5S
ZXNvbHZlcjo6SXRlcmF0b3IpOwotCi0gICAgICAgIEl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7Ci0g
ICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJdGVyYXRvciYpIGNvbnN0OwotICAgICAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsKLQotICAgICAgICBGbG9hdFJl
Y3Qgb3BlcmF0b3IqKCkgY29uc3Q7Ci0gICAgICAgIC8vIEZJWE1FOiBVc2UgYSBsaXN0IHRvIHN1
cHBvcnQgbXVsdGlwbGUgcmVuZGVyZXJzIHBlciBsaW5lLgotICAgICAgICBjb25zdCBSZW5kZXJP
YmplY3QmIHJlbmRlcmVyKCkgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBSdW5SZXNv
bHZlcjo6SXRlcmF0b3IgbV9ydW5JdGVyYXRvcjsKLSAgICB9OwotCi0gICAgTGluZVJlc29sdmVy
KGNvbnN0IFJ1blJlc29sdmVyJik7Ci0KLSAgICBJdGVyYXRvciBiZWdpbigpIGNvbnN0OwotICAg
IEl0ZXJhdG9yIGVuZCgpIGNvbnN0OwotCi0gICAgV1RGOjpJdGVyYXRvclJhbmdlPEl0ZXJhdG9y
PiByYW5nZUZvclJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAg
IGNvbnN0IFJ1blJlc29sdmVyJiBtX3J1blJlc29sdmVyOwotfTsKLQotUnVuUmVzb2x2ZXIgcnVu
UmVzb2x2ZXIoY29uc3QgUmVuZGVyQmxvY2tGbG93JiwgY29uc3QgTGF5b3V0Jik7Ci1MaW5lUmVz
b2x2ZXIgbGluZVJlc29sdmVyKGNvbnN0IFJ1blJlc29sdmVyJik7Ci0KLWlubGluZSB1bnNpZ25l
ZCBSdW5SZXNvbHZlcjo6UnVuOjpzdGFydCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faXRlcmF0
b3Iuc2ltcGxlUnVuKCkuc3RhcnQ7Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBSdW5SZXNvbHZlcjo6
UnVuOjplbmQoKSBjb25zdAotewotICAgIHJldHVybiBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpLmVu
ZDsKLX0KLQotaW5saW5lIGZsb2F0IFJ1blJlc29sdmVyOjpSdW46OmxvZ2ljYWxMZWZ0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9pdGVyYXRvci5zaW1wbGVSdW4oKS5sb2dpY2FsTGVmdDsKLX0K
LQotaW5saW5lIGZsb2F0IFJ1blJlc29sdmVyOjpSdW46OmxvZ2ljYWxSaWdodCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1faXRlcmF0b3Iuc2ltcGxlUnVuKCkubG9naWNhbFJpZ2h0OwotfQotCi1p
bmxpbmUgZmxvYXQgUnVuUmVzb2x2ZXI6OlJ1bjo6ZXhwYW5zaW9uKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9pdGVyYXRvci5zaW1wbGVSdW4oKS5leHBhbnNpb247Ci19Ci0KLWlubGluZSBFeHBh
bnNpb25CZWhhdmlvciBSdW5SZXNvbHZlcjo6UnVuOjpleHBhbnNpb25CZWhhdmlvcigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1faXRlcmF0b3Iuc2ltcGxlUnVuKCkuZXhwYW5zaW9uQmVoYXZpb3I7
Ci19Ci0KLWlubGluZSBpbnQgUnVuUmVzb2x2ZXI6OlJ1bjo6YmFzZWxpbmVQb3NpdGlvbigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHJvdW5kVG9JbnQoY29tcHV0ZUJhc2VsaW5lUG9zaXRpb24oKSk7
Ci19Ci0KLWlubGluZSBib29sIFJ1blJlc29sdmVyOjpSdW46OmlzRW5kT2ZMaW5lKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9pdGVyYXRvci5zaW1wbGVSdW4oKS5pc0VuZE9mTGluZTsKLX0KLQot
aW5saW5lIHVuc2lnbmVkIFJ1blJlc29sdmVyOjpSdW46OmxpbmVJbmRleCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1faXRlcmF0b3IubGluZUluZGV4KCk7Ci19Ci0KLWlubGluZSBSdW5SZXNvbHZl
cjo6SXRlcmF0b3ImIFJ1blJlc29sdmVyOjpJdGVyYXRvcjo6b3BlcmF0b3IrKygpCi17Ci0gICAg
cmV0dXJuIGFkdmFuY2UoKTsKLX0KLQotaW5saW5lIGZsb2F0IFJ1blJlc29sdmVyOjpSdW46OmNv
bXB1dGVCYXNlbGluZVBvc2l0aW9uKCkgY29uc3QKLXsKLSAgICBhdXRvJiByZXNvbHZlciA9IG1f
aXRlcmF0b3IucmVzb2x2ZXIoKTsKLSAgICBhdXRvIG9mZnNldCA9IHJlc29sdmVyLm1fYm9yZGVy
QW5kUGFkZGluZ0JlZm9yZSArIHJlc29sdmVyLm1fbGluZUhlaWdodCAqIGxpbmVJbmRleCgpOwot
ICAgIGlmICghbV9pdGVyYXRvci5sYXlvdXQoKS5oYXNMaW5lU3RydXRzKCkpCi0gICAgICAgIHJl
dHVybiBvZmZzZXQgKyByZXNvbHZlci5tX2Jhc2VsaW5lOwotICAgIGZvciAoYXV0byYgc3RydXRF
bnRyeSA6IHJlc29sdmVyLm1fbGF5b3V0LnN0cnV0cygpKSB7Ci0gICAgICAgIGlmIChzdHJ1dEVu
dHJ5LmxpbmVCcmVhayA+IGxpbmVJbmRleCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IG9mZnNldCArPSBzdHJ1dEVudHJ5Lm9mZnNldDsKLSAgICB9Ci0gICAgcmV0dXJuIG9mZnNldCAr
IHJlc29sdmVyLm1fYmFzZWxpbmU7Ci19Ci0KLWlubGluZSBSdW5SZXNvbHZlcjo6SXRlcmF0b3Im
IFJ1blJlc29sdmVyOjpJdGVyYXRvcjo6b3BlcmF0b3ItLSgpCi17Ci0gICAgLS1tX3J1bkluZGV4
OwotICAgIGlmIChzaW1wbGVSdW4oKS5pc0VuZE9mTGluZSkKLSAgICAgICAgLS1tX2xpbmVJbmRl
eDsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLWlubGluZSBib29sIFJ1blJlc29sdmVyOjpJdGVy
YXRvcjo6b3BlcmF0b3I9PShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKG1fcmVzb2x2ZXIgPT0gb3RoZXIubV9yZXNvbHZlcik7Ci0gICAgcmV0dXJuIG1fcnVuSW5k
ZXggPT0gb3RoZXIubV9ydW5JbmRleDsKLX0KLQotaW5saW5lIGJvb2wgUnVuUmVzb2x2ZXI6Okl0
ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLXsKLSAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci19Ci0KLWlubGluZSBSdW5SZXNvbHZlcjo6UnVuIFJ1
blJlc29sdmVyOjpJdGVyYXRvcjo6b3BlcmF0b3IqKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUnVu
KCp0aGlzKTsKLX0KLQotaW5saW5lIGJvb2wgUnVuUmVzb2x2ZXI6Okl0ZXJhdG9yOjphdEJlZ2lu
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKnRoaXMgPT0gcmVzb2x2ZXIoKS5iZWdpbigpOwotfQot
Ci1pbmxpbmUgY29uc3QgU2ltcGxlTGluZUxheW91dDo6UnVuJiBSdW5SZXNvbHZlcjo6SXRlcmF0
b3I6OnNpbXBsZVJ1bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxheW91dCgpLnJ1bkF0KG1fcnVu
SW5kZXgpOwotfQotCi1pbmxpbmUgUnVuUmVzb2x2ZXI6Okl0ZXJhdG9yIFJ1blJlc29sdmVyOjpi
ZWdpbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEl0ZXJhdG9yKCp0aGlzLCAwLCAwKTsKLX0KLQot
aW5saW5lIFJ1blJlc29sdmVyOjpJdGVyYXRvciBSdW5SZXNvbHZlcjo6ZW5kKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gSXRlcmF0b3IoKnRoaXMsIG1fbGF5b3V0LnJ1bkNvdW50KCksIG1fbGF5b3V0
LmxpbmVDb3VudCgpKTsKLX0KLQotaW5saW5lIExpbmVSZXNvbHZlcjo6SXRlcmF0b3ImIExpbmVS
ZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yKysoKQotewotICAgIG1fcnVuSXRlcmF0b3IuYWR2
YW5jZUxpbmVzKDEpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotaW5saW5lIGJvb2wgTGluZVJl
c29sdmVyOjpJdGVyYXRvcjo6b3BlcmF0b3I9PShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fcnVuSXRlcmF0b3IgPT0gb3RoZXIubV9ydW5JdGVyYXRvcjsKLX0K
LQotaW5saW5lIGJvb2wgTGluZVJlc29sdmVyOjpJdGVyYXRvcjo6b3BlcmF0b3IhPShjb25zdCBJ
dGVyYXRvciYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcnVuSXRlcmF0b3IgIT0gb3Ro
ZXIubV9ydW5JdGVyYXRvcjsKLX0KLQotaW5saW5lIExpbmVSZXNvbHZlcjo6SXRlcmF0b3IgTGlu
ZVJlc29sdmVyOjpiZWdpbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEl0ZXJhdG9yKG1fcnVuUmVz
b2x2ZXIuYmVnaW4oKSk7Ci19Ci0KLWlubGluZSBMaW5lUmVzb2x2ZXI6Okl0ZXJhdG9yIExpbmVS
ZXNvbHZlcjo6ZW5kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSXRlcmF0b3IobV9ydW5SZXNvbHZl
ci5lbmQoKSk7Ci19Ci0KLWlubGluZSBXVEY6Okl0ZXJhdG9yUmFuZ2U8TGluZVJlc29sdmVyOjpJ
dGVyYXRvcj4gTGluZVJlc29sdmVyOjpyYW5nZUZvclJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcmVj
dCkgY29uc3QKLXsKLSAgICBhdXRvIHJ1blJhbmdlID0gbV9ydW5SZXNvbHZlci5yYW5nZUZvclJl
Y3QocmVjdCk7Ci0gICAgcmV0dXJuIHsgSXRlcmF0b3IocnVuUmFuZ2UuYmVnaW4oKSksIEl0ZXJh
dG9yKHJ1blJhbmdlLmVuZCgpKSB9OwotfQotCi1pbmxpbmUgTGluZVJlc29sdmVyIGxpbmVSZXNv
bHZlcihjb25zdCBSdW5SZXNvbHZlciYgcnVuUmVzb2x2ZXIpCi17Ci0gICAgcmV0dXJuIExpbmVS
ZXNvbHZlcihydW5SZXNvbHZlcik7Ci19Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVy
YXRvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlMjdkNzQ1MTMzYS4uMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0
VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjY5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxh
eW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmgiCi0KLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgot
I2luY2x1ZGUgIkh5cGhlbmF0aW9uLmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCi0j
aW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlv
dXRGbG93Q29udGVudHMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIFNpbXBs
ZUxpbmVMYXlvdXQgewotCi1UZXh0RnJhZ21lbnRJdGVyYXRvcjo6U3R5bGU6OlN0eWxlKGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSkKLSAgICA6IGZvbnQoc3R5bGUuZm9udENhc2NhZGUoKSkKLSAg
ICAsIHRleHRBbGlnbihzdHlsZS50ZXh0QWxpZ24oKSkKLSAgICAsIGhhc0tlcm5pbmdPckxpZ2F0
dXJlcyhmb250LmVuYWJsZUtlcm5pbmcoKSB8fCBmb250LnJlcXVpcmVzU2hhcGluZygpKQotICAg
ICwgY29sbGFwc2VXaGl0ZXNwYWNlKHN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpKQotICAgICwg
cHJlc2VydmVOZXdsaW5lKHN0eWxlLnByZXNlcnZlTmV3bGluZSgpKQotICAgICwgd3JhcExpbmVz
KHN0eWxlLmF1dG9XcmFwKCkpCi0gICAgLCBicmVha1NwYWNlcyhzdHlsZS53aGl0ZVNwYWNlKCkg
PT0gV2hpdGVTcGFjZTo6QnJlYWtTcGFjZXMpCi0gICAgLCBicmVha0FueVdvcmRPbk92ZXJmbG93
KHN0eWxlLndvcmRCcmVhaygpID09IFdvcmRCcmVhazo6QnJlYWtBbGwgJiYgd3JhcExpbmVzKQot
ICAgICwgYnJlYWtXb3JkT25PdmVyZmxvdyhzdHlsZS5icmVha1dvcmRzKCkgJiYgKHdyYXBMaW5l
cyB8fCBwcmVzZXJ2ZU5ld2xpbmUpKQotICAgICwgYnJlYWtGaXJzdFdvcmRPbk92ZXJmbG93KGJy
ZWFrQW55V29yZE9uT3ZlcmZsb3cgfHwgYnJlYWtXb3JkT25PdmVyZmxvdykKLSAgICAsIGJyZWFr
TkJTUCh3cmFwTGluZXMgJiYgc3R5bGUubmJzcE1vZGUoKSA9PSBOQlNQTW9kZTo6U3BhY2UpCi0g
ICAgLCBrZWVwQWxsV29yZHNGb3JDSksoc3R5bGUud29yZEJyZWFrKCkgPT0gV29yZEJyZWFrOjpL
ZWVwQWxsKQotICAgICwgd29yZFNwYWNpbmcoZm9udC53b3JkU3BhY2luZygpKQotICAgICwgdGFi
V2lkdGgoY29sbGFwc2VXaGl0ZXNwYWNlID8gVGFiU2l6ZSgwKSA6IHN0eWxlLnRhYlNpemUoKSkK
LSAgICAsIHNob3VsZEh5cGhlbmF0ZShzdHlsZS5oeXBoZW5zKCkgPT0gSHlwaGVuczo6QXV0byAm
JiBjYW5IeXBoZW5hdGUoc3R5bGUuY29tcHV0ZWRMb2NhbGUoKSkpCi0gICAgLCBoeXBoZW5TdHJp
bmdXaWR0aChzaG91bGRIeXBoZW5hdGUgPyBmb250LndpZHRoKFRleHRSdW4oU3RyaW5nKHN0eWxl
Lmh5cGhlblN0cmluZygpKSkpIDogMCkKLSAgICAsIGh5cGhlbkxpbWl0QmVmb3JlKHN0eWxlLmh5
cGhlbmF0aW9uTGltaXRCZWZvcmUoKSA8IDAgPyAyIDogc3R5bGUuaHlwaGVuYXRpb25MaW1pdEJl
Zm9yZSgpKQotICAgICwgaHlwaGVuTGltaXRBZnRlcihzdHlsZS5oeXBoZW5hdGlvbkxpbWl0QWZ0
ZXIoKSA8IDAgPyAyIDogc3R5bGUuaHlwaGVuYXRpb25MaW1pdEFmdGVyKCkpCi0gICAgLCBsb2Nh
bGUoc3R5bGUuY29tcHV0ZWRMb2NhbGUoKSkKLXsKLSAgICBpZiAoc3R5bGUuaHlwaGVuYXRpb25M
aW1pdExpbmVzKCkgPiAtMSkKLSAgICAgICAgaHlwaGVuTGltaXRMaW5lcyA9IHN0eWxlLmh5cGhl
bmF0aW9uTGltaXRMaW5lcygpOwotfQotCi1UZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdt
ZW50SXRlcmF0b3IoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQotICAgIDogbV9mbG93Q29u
dGVudHMoZmxvdykKLSAgICAsIG1fY3VycmVudFNlZ21lbnQobV9mbG93Q29udGVudHMuYmVnaW4o
KSkKLSAgICAsIG1fbGluZUJyZWFrSXRlcmF0b3IobV9jdXJyZW50U2VnbWVudC0+dGV4dCwgZmxv
dy5zdHlsZSgpLmNvbXB1dGVkTG9jYWxlKCkpCi0gICAgLCBtX3N0eWxlKGZsb3cuc3R5bGUoKSkK
LXsKLX0KLQotVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCBUZXh0RnJhZ21lbnRJ
dGVyYXRvcjo6bmV4dFRleHRGcmFnbWVudChmbG9hdCB4UG9zaXRpb24pCi17Ci0gICAgVGV4dEZy
YWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCBuZXh0RnJhZ21lbnQgPSBmaW5kTmV4dFRleHRG
cmFnbWVudCh4UG9zaXRpb24pOwotICAgIG1fYXRFbmRPZlNlZ21lbnQgPSAobV9jdXJyZW50U2Vn
bWVudCA9PSBtX2Zsb3dDb250ZW50cy5lbmQoKSkgfHwgKG1fcG9zaXRpb24gPT0gbV9jdXJyZW50
U2VnbWVudC0+ZW5kKTsKLSAgICByZXR1cm4gbmV4dEZyYWdtZW50OwotfQotCi1UZXh0RnJhZ21l
bnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpmaW5kTmV4dFRl
eHRGcmFnbWVudChmbG9hdCB4UG9zaXRpb24pCi17Ci0gICAgLy8gQSBmcmFnbWVudCBjYW4gZWl0
aGVyIGJlCi0gICAgLy8gMS4gbGluZSBicmVhayB3aGVuIDxicj4gaXMgcHJlc2VudCBvciBwcmVz
ZXJ2ZU5ld2xpbmUgaXMgb24gKG5vdCBjb25zaWRlcmVkIGFzIHdoaXRlc3BhY2UpIG9yCi0gICAg
Ly8gMi4gd2hpdGVzcGFjZSAoY29sbGFzcGVkLCBub24tY29sbGFwc2VkIG11bHRpIG9yIHNpbmds
ZSkgb3IKLSAgICAvLyAzLiBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzLgotICAgIC8vIDQuIGNv
bnRlbnQgZW5kLgotICAgIEFTU0VSVChtX2N1cnJlbnRTZWdtZW50ICE9IG1fZmxvd0NvbnRlbnRz
LmVuZCgpKTsKLSAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uID0gbV9wb3NpdGlvbjsKLSAgICBp
ZiAobV9hdEVuZE9mU2VnbWVudCkKLSAgICAgICAgKyttX2N1cnJlbnRTZWdtZW50OwotCi0gICAg
aWYgKG1fY3VycmVudFNlZ21lbnQgPT0gbV9mbG93Q29udGVudHMuZW5kKCkpCi0gICAgICAgIHJl
dHVybiBUZXh0RnJhZ21lbnQoc3RhcnRQb3NpdGlvbiwgc3RhcnRQb3NpdGlvbiwgMCwgVGV4dEZy
YWdtZW50OjpDb250ZW50RW5kKTsKLSAgICBpZiAoaXNIYXJkTGluZUJyZWFrKG1fY3VycmVudFNl
Z21lbnQpKQotICAgICAgICByZXR1cm4gVGV4dEZyYWdtZW50KHN0YXJ0UG9zaXRpb24sIHN0YXJ0
UG9zaXRpb24sIDAsIFRleHRGcmFnbWVudDo6SGFyZExpbmVCcmVhayk7Ci0gICAgaWYgKGlzU29m
dExpbmVCcmVhayhzdGFydFBvc2l0aW9uKSkgewotICAgICAgICB1bnNpZ25lZCBlbmRQb3NpdGlv
biA9ICsrbV9wb3NpdGlvbjsKLSAgICAgICAgcmV0dXJuIFRleHRGcmFnbWVudChzdGFydFBvc2l0
aW9uLCBlbmRQb3NpdGlvbiwgMCwgVGV4dEZyYWdtZW50OjpTb2Z0TGluZUJyZWFrKTsKLSAgICB9
Ci0gICAgZmxvYXQgd2lkdGggPSAwOwotICAgIGJvb2wgb3ZlcmxhcHBpbmdGcmFnbWVudCA9IGZh
bHNlOwotICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gc2tpcFRvTmV4dFBvc2l0aW9uKFBvc2l0
aW9uVHlwZTo6Tm9uV2hpdGVzcGFjZSwgc3RhcnRQb3NpdGlvbiwgd2lkdGgsIHhQb3NpdGlvbiwg
b3ZlcmxhcHBpbmdGcmFnbWVudCk7Ci0gICAgdW5zaWduZWQgc2VnbWVudEVuZFBvc2l0aW9uID0g
bV9jdXJyZW50U2VnbWVudC0+ZW5kOwotICAgIEFTU0VSVChzdGFydFBvc2l0aW9uIDw9IGVuZFBv
c2l0aW9uKTsKLSAgICBpZiAoc3RhcnRQb3NpdGlvbiA8IGVuZFBvc2l0aW9uKSB7Ci0gICAgICAg
IGJvb2wgbXVsdGlwbGVXaGl0ZXNwYWNlID0gc3RhcnRQb3NpdGlvbiArIDEgPCBlbmRQb3NpdGlv
bjsKLSAgICAgICAgYm9vbCBpc0NvbGxhcHNlZCA9IG11bHRpcGxlV2hpdGVzcGFjZSAmJiBtX3N0
eWxlLmNvbGxhcHNlV2hpdGVzcGFjZTsKLSAgICAgICAgbV9wb3NpdGlvbiA9IGVuZFBvc2l0aW9u
OwotICAgICAgICByZXR1cm4gVGV4dEZyYWdtZW50KHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9u
LCB3aWR0aCwgVGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlLCBlbmRQb3NpdGlvbiA9PSBzZWdtZW50
RW5kUG9zaXRpb24sIGZhbHNlLCBpc0NvbGxhcHNlZCwgbV9zdHlsZS5jb2xsYXBzZVdoaXRlc3Bh
Y2UpOwotICAgIH0KLSAgICBlbmRQb3NpdGlvbiA9IHNraXBUb05leHRQb3NpdGlvbihQb3NpdGlv
blR5cGU6OkJyZWFrYWJsZSwgc3RhcnRQb3NpdGlvbiwgd2lkdGgsIHhQb3NpdGlvbiwgb3Zlcmxh
cHBpbmdGcmFnbWVudCk7Ci0gICAgbV9wb3NpdGlvbiA9IGVuZFBvc2l0aW9uOwotICAgIHJldHVy
biBUZXh0RnJhZ21lbnQoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIHdpZHRoLCBUZXh0RnJh
Z21lbnQ6Ok5vbldoaXRlc3BhY2UsIGVuZFBvc2l0aW9uID09IHNlZ21lbnRFbmRQb3NpdGlvbiwg
b3ZlcmxhcHBpbmdGcmFnbWVudCwgZmFsc2UsIGZhbHNlKTsKLX0KLQotdm9pZCBUZXh0RnJhZ21l
bnRJdGVyYXRvcjo6cmV2ZXJ0VG9FbmRPZkZyYWdtZW50KGNvbnN0IFRleHRGcmFnbWVudCYgZnJh
Z21lbnQpCi17Ci0gICAgQVNTRVJUKG1fcG9zaXRpb24gPj0gZnJhZ21lbnQuZW5kKCkpOwotICAg
IHdoaWxlIChtX2N1cnJlbnRTZWdtZW50LT5zdGFydCA+IGZyYWdtZW50LmVuZCgpKQotICAgICAg
ICAtLW1fY3VycmVudFNlZ21lbnQ7Ci0gICAgLy8gVE9ETzogSXQgcmV2ZXJ0cyB0byB0aGUgbGFz
dCBmcmFnbWVudCBvbiB0aGUgc2FtZSBwb3NpdGlvbiwgYnV0IHRoYXQncyBvayBmb3Igbm93IGFz
IHdlIGRvbid0IG5lZWQgdG8KLSAgICAvLyBkaWZmZXJlbnRpYXRlIG11bHRpcGxlIHJlbmRlcmVy
cyBvbiB0aGUgc2FtZSBwb3NpdGlvbi4KLSAgICBtX3Bvc2l0aW9uID0gZnJhZ21lbnQuZW5kKCk7
Ci0gICAgbV9hdEVuZE9mU2VnbWVudCA9IGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2ln
bmVkIG5leHRCcmVha2FibGVQb3NpdGlvbkluU2VnbWVudChMYXp5TGluZUJyZWFrSXRlcmF0b3Im
IGxpbmVCcmVha0l0ZXJhdG9yLCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCBib29sIGJyZWFrTkJT
UCwgYm9vbCBrZWVwQWxsV29yZHNGb3JDSkspCi17Ci0gICAgaWYgKGtlZXBBbGxXb3Jkc0ZvckNK
SykgewotICAgICAgICBpZiAoYnJlYWtOQlNQKQotICAgICAgICAgICAgcmV0dXJuIG5leHRCcmVh
a2FibGVQb3NpdGlvbktlZXBpbmdBbGxXb3JkcyhsaW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3Np
dGlvbik7Ci0gICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25LZWVwaW5nQWxsV29y
ZHNJZ25vcmluZ05CU1AobGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgIH0K
LQotICAgIGlmIChsaW5lQnJlYWtJdGVyYXRvci5tb2RlKCkgPT0gTGluZUJyZWFrSXRlcmF0b3JN
b2RlOjpEZWZhdWx0KSB7Ci0gICAgICAgIGlmIChicmVha05CU1ApCi0gICAgICAgICAgICByZXR1
cm4gV2ViQ29yZTo6bmV4dEJyZWFrYWJsZVBvc2l0aW9uKGxpbmVCcmVha0l0ZXJhdG9yLCBzdGFy
dFBvc2l0aW9uKTsKLSAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbklnbm9yaW5n
TkJTUChsaW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7Ci0gICAgfQotCi0gICAgaWYg
KGJyZWFrTkJTUCkKLSAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbldpdGhvdXRT
aG9ydGN1dChsaW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7Ci0gICAgcmV0dXJuIG5l
eHRCcmVha2FibGVQb3NpdGlvbklnbm9yaW5nTkJTUFdpdGhvdXRTaG9ydGN1dChsaW5lQnJlYWtJ
dGVyYXRvciwgc3RhcnRQb3NpdGlvbik7Ci19Ci0KLXVuc2lnbmVkIFRleHRGcmFnbWVudEl0ZXJh
dG9yOjpuZXh0QnJlYWthYmxlUG9zaXRpb24oY29uc3QgRmxvd0NvbnRlbnRzOjpTZWdtZW50JiBz
ZWdtZW50LCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uKQotewotICAgIEFTU0VSVChzdGFydFBvc2l0
aW9uIDwgc2VnbWVudC5lbmQpOwotICAgIFN0cmluZ1ZpZXcgY3VycmVudFRleHQgPSBtX2xpbmVC
cmVha0l0ZXJhdG9yLnN0cmluZ1ZpZXcoKTsKLSAgICBTdHJpbmdWaWV3IHNlZ21lbnRUZXh0ID0g
U3RyaW5nVmlldyhzZWdtZW50LnRleHQpOwotICAgIGlmIChzZWdtZW50VGV4dCAhPSBjdXJyZW50
VGV4dCkgewotICAgICAgICB1bnNpZ25lZCB0ZXh0TGVuZ3RoID0gY3VycmVudFRleHQubGVuZ3Ro
KCk7Ci0gICAgICAgIFVDaGFyIGxhc3RDaGFyYWN0ZXIgPSB0ZXh0TGVuZ3RoID4gMCA/IGN1cnJl
bnRUZXh0W3RleHRMZW5ndGggLSAxXSA6IDA7Ci0gICAgICAgIFVDaGFyIHNlY29uZFRvTGFzdENo
YXJhY3RlciA9IHRleHRMZW5ndGggPiAxID8gY3VycmVudFRleHRbdGV4dExlbmd0aCAtIDJdIDog
MDsKLSAgICAgICAgbV9saW5lQnJlYWtJdGVyYXRvci5zZXRQcmlvckNvbnRleHQobGFzdENoYXJh
Y3Rlciwgc2Vjb25kVG9MYXN0Q2hhcmFjdGVyKTsKLSAgICAgICAgbV9saW5lQnJlYWtJdGVyYXRv
ci5yZXNldFN0cmluZ0FuZFJlbGVhc2VJdGVyYXRvcihzZWdtZW50LnRleHQsIG1fc3R5bGUubG9j
YWxlLCBMaW5lQnJlYWtJdGVyYXRvck1vZGU6OkRlZmF1bHQpOwotICAgIH0KLSAgICByZXR1cm4g
c2VnbWVudC50b1JlbmRlclBvc2l0aW9uKG5leHRCcmVha2FibGVQb3NpdGlvbkluU2VnbWVudCht
X2xpbmVCcmVha0l0ZXJhdG9yLCBzZWdtZW50LnRvU2VnbWVudFBvc2l0aW9uKHN0YXJ0UG9zaXRp
b24pLCBtX3N0eWxlLmJyZWFrTkJTUCwgbV9zdHlsZS5rZWVwQWxsV29yZHNGb3JDSkspKTsKLX0K
LQotdW5zaWduZWQgVGV4dEZyYWdtZW50SXRlcmF0b3I6Om5leHROb25XaGl0ZXNwYWNlUG9zaXRp
b24oY29uc3QgRmxvd0NvbnRlbnRzOjpTZWdtZW50JiBzZWdtZW50LCB1bnNpZ25lZCBzdGFydFBv
c2l0aW9uKQotewotICAgIEFTU0VSVChzdGFydFBvc2l0aW9uIDwgc2VnbWVudC5lbmQpOwotICAg
IHVuc2lnbmVkIHBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsKLSAgICBmb3IgKDsgcG9zaXRpb24g
PCBzZWdtZW50LmVuZDsgKytwb3NpdGlvbikgewotICAgICAgICBhdXRvIGNoYXJhY3RlciA9IHNl
Z21lbnQudGV4dFtzZWdtZW50LnRvU2VnbWVudFBvc2l0aW9uKHBvc2l0aW9uKV07Ci0gICAgICAg
IGJvb2wgaXNXaGl0ZXNwYWNlID0gY2hhcmFjdGVyID09ICcgJyB8fCBjaGFyYWN0ZXIgPT0gJ1x0
JyB8fCAoIW1fc3R5bGUucHJlc2VydmVOZXdsaW5lICYmIGNoYXJhY3RlciA9PSAnXG4nKTsKLSAg
ICAgICAgaWYgKCFpc1doaXRlc3BhY2UpCi0gICAgICAgICAgICByZXR1cm4gcG9zaXRpb247Ci0g
ICAgfQotICAgIHJldHVybiBwb3NpdGlvbjsKLX0KLQotT3B0aW9uYWw8dW5zaWduZWQ+IFRleHRG
cmFnbWVudEl0ZXJhdG9yOjpsYXN0SHlwaGVuUG9zaXRpb24oY29uc3QgVGV4dEZyYWdtZW50SXRl
cmF0b3I6OlRleHRGcmFnbWVudCYgcnVuLCB1bnNpZ25lZCBiZWZvcmUpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKHJ1bi5zdGFydCgpIDwgYmVmb3JlKTsKLSAgICBhdXRvJiBzZWdtZW50ID0gKm1fY3Vy
cmVudFNlZ21lbnQ7Ci0gICAgQVNTRVJUKHNlZ21lbnQuc3RhcnQgPD0gYmVmb3JlICYmIGJlZm9y
ZSA8PSBzZWdtZW50LmVuZCk7Ci0gICAgQVNTRVJUKGlzPFJlbmRlclRleHQ+KHNlZ21lbnQucmVu
ZGVyZXIpKTsKLSAgICBpZiAoIW1fc3R5bGUuc2hvdWxkSHlwaGVuYXRlIHx8IHJ1bi50eXBlKCkg
IT0gVGV4dEZyYWdtZW50OjpOb25XaGl0ZXNwYWNlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBlbm91Z2ggY2hhcmFjdGVycyBpbiB0aGUg
cnVuLgotICAgIHVuc2lnbmVkIHJ1bkxlbmd0aCA9IHJ1bi5lbmQoKSAtIHJ1bi5zdGFydCgpOwot
ICAgIGlmIChtX3N0eWxlLmh5cGhlbkxpbWl0QmVmb3JlID49IHJ1bkxlbmd0aCB8fCBtX3N0eWxl
Lmh5cGhlbkxpbWl0QWZ0ZXIgPj0gcnVuTGVuZ3RoIHx8IG1fc3R5bGUuaHlwaGVuTGltaXRCZWZv
cmUgKyBtX3N0eWxlLmh5cGhlbkxpbWl0QWZ0ZXIgPiBydW5MZW5ndGgpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0gICAgYXV0byBydW5TdGFydCA9IHNlZ21lbnQudG9TZWdtZW50UG9z
aXRpb24ocnVuLnN0YXJ0KCkpOwotICAgIGF1dG8gYmVmb3JlSW5kZXggPSBzZWdtZW50LnRvU2Vn
bWVudFBvc2l0aW9uKGJlZm9yZSkgLSBydW5TdGFydDsKLSAgICBpZiAoYmVmb3JlSW5kZXggPD0g
bV9zdHlsZS5oeXBoZW5MaW1pdEJlZm9yZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LSAgICAvLyBBZGp1c3QgYmVmb3JlIGluZGV4IHRvIGFjY29tbW9kYXRlIHRoZSBsaW1pdC1hZnRl
ciB2YWx1ZSAodGhpcyBpcyB0aGUgbGFzdCBwb3RlbnRpYWwgaHlwaGVuIGxvY2F0aW9uKS4KLSAg
ICBiZWZvcmVJbmRleCA9IHN0ZDo6bWluKGJlZm9yZUluZGV4LCBydW5MZW5ndGggLSBtX3N0eWxl
Lmh5cGhlbkxpbWl0QWZ0ZXIgKyAxKTsKLSAgICBhdXRvIHN1YnN0cmluZ0Zvckh5cGhlbmF0aW9u
ID0gU3RyaW5nVmlldyhzZWdtZW50LnRleHQpLnN1YnN0cmluZyhydW5TdGFydCwgcnVuLmVuZCgp
IC0gcnVuLnN0YXJ0KCkpOwotICAgIGF1dG8gaHlwaGVuTG9jYXRpb24gPSBsYXN0SHlwaGVuTG9j
YXRpb24oc3Vic3RyaW5nRm9ySHlwaGVuYXRpb24sIGJlZm9yZUluZGV4LCBtX3N0eWxlLmxvY2Fs
ZSk7Ci0gICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGVub3VnaCBjaGFyYWN0ZXJzIGJlZm9yZSBh
bmQgYWZ0ZXIgdGhlIGh5cGhlbi4KLSAgICBpZiAoaHlwaGVuTG9jYXRpb24gJiYgaHlwaGVuTG9j
YXRpb24gPj0gbV9zdHlsZS5oeXBoZW5MaW1pdEJlZm9yZSAmJiBtX3N0eWxlLmh5cGhlbkxpbWl0
QWZ0ZXIgPD0gKHJ1bkxlbmd0aCAtIGh5cGhlbkxvY2F0aW9uKSkKLSAgICAgICAgcmV0dXJuIHNl
Z21lbnQudG9SZW5kZXJQb3NpdGlvbihoeXBoZW5Mb2NhdGlvbiArIHJ1blN0YXJ0KTsKLSAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi11bnNpZ25lZCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6
c2tpcFRvTmV4dFBvc2l0aW9uKFBvc2l0aW9uVHlwZSBwb3NpdGlvblR5cGUsIHVuc2lnbmVkIHN0
YXJ0UG9zaXRpb24sIGZsb2F0JiB3aWR0aCwgZmxvYXQgeFBvc2l0aW9uLCBib29sJiBvdmVybGFw
cGluZ0ZyYWdtZW50KQotewotICAgIG92ZXJsYXBwaW5nRnJhZ21lbnQgPSBmYWxzZTsKLSAgICB1
bnNpZ25lZCBjdXJyZW50UG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOwotICAgIHVuc2lnbmVkIG5l
eHRQb3NpdGlvbiA9IGN1cnJlbnRQb3NpdGlvbjsKLSAgICAvLyBDb2xsYXBzZWQgd2hpdGVzcGFj
ZSBoYXMgY29uc3RhbnQgd2lkdGguIERvIG5vdCBtZWFzdXJlIGl0LgotICAgIGlmIChwb3NpdGlv
blR5cGUgPT0gTm9uV2hpdGVzcGFjZSkKLSAgICAgICAgbmV4dFBvc2l0aW9uID0gbmV4dE5vbldo
aXRlc3BhY2VQb3NpdGlvbigqbV9jdXJyZW50U2VnbWVudCwgY3VycmVudFBvc2l0aW9uKTsKLSAg
ICBlbHNlIGlmIChwb3NpdGlvblR5cGUgPT0gQnJlYWthYmxlKSB7Ci0gICAgICAgIG5leHRQb3Np
dGlvbiA9IG5leHRCcmVha2FibGVQb3NpdGlvbigqbV9jdXJyZW50U2VnbWVudCwgY3VycmVudFBv
c2l0aW9uKTsKLSAgICAgICAgLy8gbmV4dEJyZWFrYWJsZVBvc2l0aW9uIHJldHVybnMgdGhlIHNh
bWUgcG9zaXRpb24gZm9yIGNlcnRhaW4gY2hhcmFjdGVycyBzdWNoIGFzIGh5cGhlbnMuIENhbGwg
bmV4dCBhZ2FpbiB3aXRoIG1vZGlmaWVkIHBvc2l0aW9uIHVubGVzcyB3ZSBhcmUgYXQgdGhlIGVu
ZCBvZiB0aGUgc2VnbWVudC4KLSAgICAgICAgYm9vbCBza2lwQ3VycmVudFBvc2l0aW9uID0gbmV4
dFBvc2l0aW9uID09IGN1cnJlbnRQb3NpdGlvbjsKLSAgICAgICAgaWYgKHNraXBDdXJyZW50UG9z
aXRpb24pIHsKLSAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIHNraXBwaW5nIHRoZSBsYXN0IGNo
YXJhY3RlciBpbiB0aGUgc2VnbWVudCwganVzdCBtb3ZlIHRvIHRoZSBlbmQgb2YgdGhlIHNlZ21l
bnQgYW5kIHdlJ2xsIGNoZWNrIHRoZSBuZXh0IHNlZ21lbnQgd2hldGhlciBpdCBpcyBhbiBvdmVy
bGFwcGluZyBmcmFnbWVudC4KLSAgICAgICAgICAgIEFTU0VSVChjdXJyZW50UG9zaXRpb24gPCBt
X2N1cnJlbnRTZWdtZW50LT5lbmQpOwotICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3NpdGlvbiA9
PSBtX2N1cnJlbnRTZWdtZW50LT5lbmQgLSAxKQotICAgICAgICAgICAgICAgIG5leHRQb3NpdGlv
biA9IG1fY3VycmVudFNlZ21lbnQtPmVuZDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBuZXh0UG9zaXRpb24gPSBuZXh0QnJlYWthYmxlUG9zaXRpb24oKm1fY3VycmVudFNlZ21l
bnQsIGN1cnJlbnRQb3NpdGlvbiArIDEpOwotICAgICAgICB9Ci0gICAgICAgIC8vIFdlIG5lZWQg
dG8ga25vdyB3aGV0aGVyIHRoZSB3b3JkIGFjdHVhbGx5IGZpbmlzaGVzIGF0IHRoZSBlbmQgb2Yg
dGhpcyByZW5kZXJlciBvciBub3QuCi0gICAgICAgIGlmIChuZXh0UG9zaXRpb24gPT0gbV9jdXJy
ZW50U2VnbWVudC0+ZW5kKSB7Ci0gICAgICAgICAgICBjb25zdCBhdXRvIG5leHRTZWdtZW50ID0g
bV9jdXJyZW50U2VnbWVudCArIDE7Ci0gICAgICAgICAgICBpZiAobmV4dFNlZ21lbnQgIT0gbV9m
bG93Q29udGVudHMuZW5kKCkgJiYgIWlzSGFyZExpbmVCcmVhayhuZXh0U2VnbWVudCkpCi0gICAg
ICAgICAgICAgICAgb3ZlcmxhcHBpbmdGcmFnbWVudCA9IG5leHRQb3NpdGlvbiA8IG5leHRCcmVh
a2FibGVQb3NpdGlvbigqbmV4dFNlZ21lbnQsIG5leHRQb3NpdGlvbik7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgd2lkdGggPSAwOwotICAgIGlmIChuZXh0UG9zaXRpb24gPT0gY3VycmVudFBvc2l0
aW9uKQotICAgICAgICByZXR1cm4gY3VycmVudFBvc2l0aW9uOwotICAgIC8vIEJvdGggbm9uLWNv
bGxhcHNlZCB3aGl0ZXNwYWNlIGFuZCBub24td2hpdGVzcGFjZSBydW5zIG5lZWQgdG8gYmUgbWVh
c3VyZWQuCi0gICAgYm9vbCBtZWFzdXJlVGV4dCA9IHBvc2l0aW9uVHlwZSAhPSBOb25XaGl0ZXNw
YWNlIHx8ICFtX3N0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZTsKLSAgICBpZiAobWVhc3VyZVRleHQp
Ci0gICAgICAgIHdpZHRoID0gdGhpcy0+dGV4dFdpZHRoKGN1cnJlbnRQb3NpdGlvbiwgbmV4dFBv
c2l0aW9uLCB4UG9zaXRpb24pOwotICAgIGVsc2UgaWYgKHN0YXJ0UG9zaXRpb24gPCBuZXh0UG9z
aXRpb24pCi0gICAgICAgIHdpZHRoID0gbV9zdHlsZS5mb250LnNwYWNlV2lkdGgoKSArIG1fc3R5
bGUud29yZFNwYWNpbmc7Ci0gICAgcmV0dXJuIG5leHRQb3NpdGlvbjsKLX0KLQotZmxvYXQgVGV4
dEZyYWdtZW50SXRlcmF0b3I6OnRleHRXaWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywg
ZmxvYXQgeFBvc2l0aW9uKSBjb25zdAotewotICAgIGF1dG8mIHNlZ21lbnQgPSAqbV9jdXJyZW50
U2VnbWVudDsKLSAgICBBU1NFUlQoc2VnbWVudC5zdGFydCA8PSBmcm9tICYmIGZyb20gPD0gc2Vn
bWVudC5lbmQgJiYgc2VnbWVudC5zdGFydCA8PSB0byAmJiB0byA8PSBzZWdtZW50LmVuZCk7Ci0g
ICAgQVNTRVJUKGlzPFJlbmRlclRleHQ+KHNlZ21lbnQucmVuZGVyZXIpKTsKLSAgICBpZiAoIW1f
c3R5bGUuZm9udC5zaXplKCkgfHwgZnJvbSA9PSB0bykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICB1bnNpZ25lZCBzZWdtZW50RnJvbSA9IHNlZ21lbnQudG9TZWdtZW50UG9zaXRpb24oZnJvbSk7
Ci0gICAgdW5zaWduZWQgc2VnbWVudFRvID0gc2VnbWVudC50b1NlZ21lbnRQb3NpdGlvbih0byk7
Ci0gICAgaWYgKG1fc3R5bGUuZm9udC5pc0ZpeGVkUGl0Y2goKSkKLSAgICAgICAgcmV0dXJuIGRv
d25jYXN0PFJlbmRlclRleHQ+KHNlZ21lbnQucmVuZGVyZXIpLndpZHRoKHNlZ21lbnRGcm9tLCBz
ZWdtZW50VG8gLSBzZWdtZW50RnJvbSwgbV9zdHlsZS5mb250LCB4UG9zaXRpb24sIG51bGxwdHIs
IG51bGxwdHIpOwotCi0gICAgYm9vbCBtZWFzdXJlV2l0aEVuZFNwYWNlID0gbV9zdHlsZS5oYXNL
ZXJuaW5nT3JMaWdhdHVyZXMgJiYgbV9zdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2UKLSAgICAgICAg
JiYgc2VnbWVudFRvIDwgc2VnbWVudC50ZXh0Lmxlbmd0aCgpICYmIHNlZ21lbnQudGV4dFtzZWdt
ZW50VG9dID09ICcgJzsKLSAgICBpZiAobWVhc3VyZVdpdGhFbmRTcGFjZSkKLSAgICAgICAgKytz
ZWdtZW50VG87Ci0gICAgZmxvYXQgd2lkdGggPSAwOwotICAgIGlmIChzZWdtZW50LmNhblVzZVNp
bXBsaWZpZWRUZXh0TWVhc3VyaW5nKQotICAgICAgICB3aWR0aCA9IG1fc3R5bGUuZm9udC53aWR0
aEZvclNpbXBsZVRleHQoU3RyaW5nVmlldyhzZWdtZW50LnRleHQpLnN1YnN0cmluZyhzZWdtZW50
RnJvbSwgc2VnbWVudFRvIC0gc2VnbWVudEZyb20pKTsKLSAgICBlbHNlIHsKLSAgICAgICAgVGV4
dFJ1biBydW4oU3RyaW5nVmlldyhzZWdtZW50LnRleHQpLnN1YnN0cmluZyhzZWdtZW50RnJvbSwg
c2VnbWVudFRvIC0gc2VnbWVudEZyb20pLCB4UG9zaXRpb24pOwotICAgICAgICBpZiAobV9zdHls
ZS50YWJXaWR0aCkKLSAgICAgICAgICAgIHJ1bi5zZXRUYWJTaXplKHRydWUsIG1fc3R5bGUudGFi
V2lkdGgpOwotICAgICAgICB3aWR0aCA9IG1fc3R5bGUuZm9udC53aWR0aChydW4pOwotICAgIH0K
LSAgICBpZiAobWVhc3VyZVdpdGhFbmRTcGFjZSkKLSAgICAgICAgd2lkdGggLT0gKG1fc3R5bGUu
Zm9udC5zcGFjZVdpZHRoKCkgKyBtX3N0eWxlLndvcmRTcGFjaW5nKTsKLSAgICByZXR1cm4gc3Rk
OjptYXg8ZmxvYXQ+KDAsIHdpZHRoKTsKLX0KLQotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVy
YXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmM5YzM3ZDYzY2IuLjAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRl
eHRGcmFnbWVudEl0ZXJhdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJCcmVha0xpbmVzLmgiCi0j
aW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZs
b3dDb250ZW50cy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlbmRlckJsb2Nr
RmxvdzsKLWNsYXNzIFJlbmRlclN0eWxlOwotCi1uYW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7
Ci0KLWNsYXNzIFRleHRGcmFnbWVudEl0ZXJhdG9yICB7Ci1wdWJsaWM6Ci0gICAgVGV4dEZyYWdt
ZW50SXRlcmF0b3IoY29uc3QgUmVuZGVyQmxvY2tGbG93Jik7Ci0gICAgY2xhc3MgVGV4dEZyYWdt
ZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGVudW0gVHlwZSB7IEludmFsaWQsIENvbnRlbnRF
bmQsIFNvZnRMaW5lQnJlYWssIEhhcmRMaW5lQnJlYWssIFdoaXRlc3BhY2UsIE5vbldoaXRlc3Bh
Y2UgfTsKLSAgICAgICAgVGV4dEZyYWdtZW50KCkgPSBkZWZhdWx0OwotICAgICAgICBUZXh0RnJh
Z21lbnQodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgZmxvYXQgd2lkdGgsIFR5cGUgdHlw
ZSwgYm9vbCBpc0xhc3RJblJlbmRlcmVyID0gZmFsc2UsIGJvb2wgb3ZlcmxhcHNUb05leHRSZW5k
ZXJlciA9IGZhbHNlLCBib29sIGlzQ29sbGFwc2VkID0gZmFsc2UsIGJvb2wgaXNDb2xsYXBzaWJs
ZSA9IGZhbHNlKQotICAgICAgICAgICAgOiBtX3N0YXJ0KHN0YXJ0KQotICAgICAgICAgICAgLCBt
X2VuZChlbmQpCi0gICAgICAgICAgICAsIG1fd2lkdGgod2lkdGgpCi0gICAgICAgICAgICAsIG1f
dHlwZSh0eXBlKQotICAgICAgICAgICAgLCBtX2lzTGFzdEluUmVuZGVyZXIoaXNMYXN0SW5SZW5k
ZXJlcikKLSAgICAgICAgICAgICwgbV9vdmVybGFwc1RvTmV4dFJlbmRlcmVyKG92ZXJsYXBzVG9O
ZXh0UmVuZGVyZXIpCi0gICAgICAgICAgICAsIG1faXNDb2xsYXBzZWQoaXNDb2xsYXBzZWQpCi0g
ICAgICAgICAgICAsIG1faXNDb2xsYXBzaWJsZShpc0NvbGxhcHNpYmxlKQotICAgICAgICB7Ci0g
ICAgICAgIH0KLQotICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUg
IT0gSW52YWxpZDsgfQotICAgICAgICB1bnNpZ25lZCBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhcnQ7IH0KLSAgICAgICAgdW5zaWduZWQgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lbmQ7IH0K
LSAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyBBU1NFUlQobV9lbmQgPj0gbV9zdGFy
dCk7IHJldHVybiBtX2VuZCAtIG1fc3RhcnQ7IH0KLSAgICAgICAgZmxvYXQgd2lkdGgoKSBjb25z
dCB7IHJldHVybiBtX3dpZHRoOyB9Ci0gICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZTsgfQotICAgICAgICBib29sIG92ZXJsYXBzVG9OZXh0UmVuZGVyZXIoKSBjb25zdCB7
IHJldHVybiBtX292ZXJsYXBzVG9OZXh0UmVuZGVyZXI7IH0KLSAgICAgICAgYm9vbCBpc0xhc3RJ
blJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9pc0xhc3RJblJlbmRlcmVyOyB9Ci0gICAgICAg
IGJvb2wgaXNMaW5lQnJlYWsoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gU29mdExpbmVCcmVh
ayB8fCBtX3R5cGUgPT0gSGFyZExpbmVCcmVhazsgfQotICAgICAgICBib29sIGlzQ29sbGFwc2Vk
KCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbGxhcHNlZDsgfQotICAgICAgICBib29sIGlzQ29sbGFw
c2libGUoKSBjb25zdCB7IHJldHVybiBtX2lzQ29sbGFwc2libGU7IH0KLSAgICAgICAgYm9vbCBo
YXNIeXBoZW4oKSBjb25zdCB7IHJldHVybiBtX2hhc0h5cGhlbjsgfQotCi0gICAgICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHN0YXJ0KCkgPT0gZW5kKCkgJiYgIWlzTGluZUJyZWFr
KCk7IH0KLSAgICAgICAgVGV4dEZyYWdtZW50IHNwbGl0KHVuc2lnbmVkIHNwbGl0UG9zaXRpb24s
IGZsb2F0IGxlZnRTaWRlV2lkdGgsIGZsb2F0IHJpZ2h0U2lkZVdpZHRoKTsKLSAgICAgICAgVGV4
dEZyYWdtZW50IHNwbGl0V2l0aEh5cGhlbih1bnNpZ25lZCBoeXBoZW5Qb3NpdGlvbiwgZmxvYXQg
aHlwaGVuU3RyaW5nV2lkdGgsIGZsb2F0IGxlZnRTaWRlV2lkdGgsIGZsb2F0IHJpZ2h0U2lkZVdp
ZHRoKTsKLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRleHRGcmFnbWVudCYgb3RoZXIp
IGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3N0YXJ0ID09IG90aGVyLm1f
c3RhcnQKLSAgICAgICAgICAgICAgICAmJiBtX2VuZCA9PSBvdGhlci5tX2VuZAotICAgICAgICAg
ICAgICAgICYmIG1fd2lkdGggPT0gb3RoZXIubV93aWR0aAotICAgICAgICAgICAgICAgICYmIG1f
dHlwZSA9PSBvdGhlci5tX3R5cGUKLSAgICAgICAgICAgICAgICAmJiBtX2lzTGFzdEluUmVuZGVy
ZXIgPT0gb3RoZXIubV9pc0xhc3RJblJlbmRlcmVyCi0gICAgICAgICAgICAgICAgJiYgbV9vdmVy
bGFwc1RvTmV4dFJlbmRlcmVyID09IG90aGVyLm1fb3ZlcmxhcHNUb05leHRSZW5kZXJlcgotICAg
ICAgICAgICAgICAgICYmIG1faXNDb2xsYXBzZWQgPT0gb3RoZXIubV9pc0NvbGxhcHNlZAotICAg
ICAgICAgICAgICAgICYmIG1faXNDb2xsYXBzaWJsZSA9PSBvdGhlci5tX2lzQ29sbGFwc2libGUK
LSAgICAgICAgICAgICAgICAmJiBtX2hhc0h5cGhlbiA9PSBvdGhlci5tX2hhc0h5cGhlbjsKLSAg
ICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdW5zaWduZWQgbV9zdGFydCB7IDAgfTsK
LSAgICAgICAgdW5zaWduZWQgbV9lbmQgeyAwIH07Ci0gICAgICAgIGZsb2F0IG1fd2lkdGggeyAw
IH07Ci0gICAgICAgIFR5cGUgbV90eXBlIHsgSW52YWxpZCB9OwotICAgICAgICBib29sIG1faXNM
YXN0SW5SZW5kZXJlciB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgbV9vdmVybGFwc1RvTmV4dFJl
bmRlcmVyIHsgZmFsc2UgfTsKLSAgICAgICAgYm9vbCBtX2lzQ29sbGFwc2VkIHsgZmFsc2UgfTsK
LSAgICAgICAgYm9vbCBtX2lzQ29sbGFwc2libGUgeyBmYWxzZSB9OwotICAgICAgICBib29sIG1f
aGFzSHlwaGVuIHsgZmFsc2UgfTsKLSAgICB9OwotICAgIFRleHRGcmFnbWVudCBuZXh0VGV4dEZy
YWdtZW50KGZsb2F0IHhQb3NpdGlvbiA9IDApOwotICAgIHZvaWQgcmV2ZXJ0VG9FbmRPZkZyYWdt
ZW50KGNvbnN0IFRleHRGcmFnbWVudCYpOwotCi0gICAgLy8gRklYTUU6IFRoZXNlIGZ1bmN0aW9u
cyBiZWxvdyBzaG91bGQgYmUgZGVjb3VwbGVkIGZyb20gdGhlIHRleHQgaXRlcmF0b3IuCi0gICAg
ZmxvYXQgdGV4dFdpZHRoKHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGVuZFBvc2l0
aW9uLCBmbG9hdCB4UG9zaXRpb24pIGNvbnN0OwotICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBsYXN0
SHlwaGVuUG9zaXRpb24oY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCYg
cnVuLCB1bnNpZ25lZCBiZWZvcmVJbmRleCkgY29uc3Q7Ci0KLSAgICBzdHJ1Y3QgU3R5bGUgewot
ICAgICAgICBleHBsaWNpdCBTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYpOwotCi0gICAgICAgIGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250OwotICAgICAgICBUZXh0QWxpZ25Nb2RlIHRleHRBbGlnbjsK
LSAgICAgICAgYm9vbCBoYXNLZXJuaW5nT3JMaWdhdHVyZXM7Ci0gICAgICAgIGJvb2wgY29sbGFw
c2VXaGl0ZXNwYWNlOwotICAgICAgICBib29sIHByZXNlcnZlTmV3bGluZTsKLSAgICAgICAgYm9v
bCB3cmFwTGluZXM7Ci0gICAgICAgIGJvb2wgYnJlYWtTcGFjZXM7Ci0gICAgICAgIGJvb2wgYnJl
YWtBbnlXb3JkT25PdmVyZmxvdzsKLSAgICAgICAgYm9vbCBicmVha1dvcmRPbk92ZXJmbG93Owot
ICAgICAgICBib29sIGJyZWFrRmlyc3RXb3JkT25PdmVyZmxvdzsKLSAgICAgICAgYm9vbCBicmVh
a05CU1A7Ci0gICAgICAgIGJvb2wga2VlcEFsbFdvcmRzRm9yQ0pLOwotICAgICAgICBmbG9hdCB3
b3JkU3BhY2luZzsKLSAgICAgICAgVGFiU2l6ZSB0YWJXaWR0aDsKLSAgICAgICAgYm9vbCBzaG91
bGRIeXBoZW5hdGU7Ci0gICAgICAgIGZsb2F0IGh5cGhlblN0cmluZ1dpZHRoOwotICAgICAgICB1
bnNpZ25lZCBoeXBoZW5MaW1pdEJlZm9yZTsKLSAgICAgICAgdW5zaWduZWQgaHlwaGVuTGltaXRB
ZnRlcjsKLSAgICAgICAgQXRvbVN0cmluZyBsb2NhbGU7Ci0gICAgICAgIE9wdGlvbmFsPHVuc2ln
bmVkPiBoeXBoZW5MaW1pdExpbmVzOwotICAgIH07Ci0gICAgY29uc3QgU3R5bGUmIHN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQotCi1wcml2YXRlOgotICAgIFRleHRGcmFnbWVudCBm
aW5kTmV4dFRleHRGcmFnbWVudChmbG9hdCB4UG9zaXRpb24pOwotICAgIGVudW0gUG9zaXRpb25U
eXBlIHsgQnJlYWthYmxlLCBOb25XaGl0ZXNwYWNlIH07Ci0gICAgdW5zaWduZWQgc2tpcFRvTmV4
dFBvc2l0aW9uKFBvc2l0aW9uVHlwZSwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgZmxvYXQmIHdp
ZHRoLCBmbG9hdCB4UG9zaXRpb24sIGJvb2wmIG92ZXJsYXBwaW5nRnJhZ21lbnQpOwotICAgIGJv
b2wgaXNTb2Z0TGluZUJyZWFrKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdDsKLSAgICBib29sIGlz
SGFyZExpbmVCcmVhayhjb25zdCBGbG93Q29udGVudHM6Okl0ZXJhdG9yJiBzZWdtZW50KSBjb25z
dDsKLSAgICB1bnNpZ25lZCBuZXh0QnJlYWthYmxlUG9zaXRpb24oY29uc3QgRmxvd0NvbnRlbnRz
OjpTZWdtZW50JiwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbik7Ci0gICAgdW5zaWduZWQgbmV4dE5v
bldoaXRlc3BhY2VQb3NpdGlvbihjb25zdCBGbG93Q29udGVudHM6OlNlZ21lbnQmLCB1bnNpZ25l
ZCBzdGFydFBvc2l0aW9uKTsKLQotICAgIEZsb3dDb250ZW50cyBtX2Zsb3dDb250ZW50czsKLSAg
ICBGbG93Q29udGVudHM6Okl0ZXJhdG9yIG1fY3VycmVudFNlZ21lbnQ7Ci0gICAgTGF6eUxpbmVC
cmVha0l0ZXJhdG9yIG1fbGluZUJyZWFrSXRlcmF0b3I7Ci0gICAgY29uc3QgU3R5bGUgbV9zdHls
ZTsKLSAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uIHsgMCB9OwotICAgIGJvb2wgbV9hdEVuZE9mU2Vn
bWVudCB7IGZhbHNlIH07Ci19OwotCi1pbmxpbmUgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRG
cmFnbWVudCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpzcGxpdCh1bnNpZ25l
ZCBzcGxpdFBvc2l0aW9uLCBmbG9hdCBsZWZ0U2lkZVdpZHRoLCBmbG9hdCByaWdodFNpZGVXaWR0
aCkKLXsKLSAgICBhdXRvIHVwZGF0ZUZyYWdtZW50UHJvcGVydGllcyA9IFtdIChUZXh0RnJhZ21l
bnQmIGZyYWdtZW50LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBmbG9hdCB3aWR0aCkK
LSAgICB7Ci0gICAgICAgIGZyYWdtZW50Lm1fc3RhcnQgPSBzdGFydDsKLSAgICAgICAgZnJhZ21l
bnQubV9lbmQgPSBlbmQ7Ci0gICAgICAgIGZyYWdtZW50Lm1fd2lkdGggPSB3aWR0aDsKLSAgICAg
ICAgaWYgKGZyYWdtZW50LnN0YXJ0KCkgKyAxID4gZnJhZ21lbnQuZW5kKCkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGZyYWdtZW50Lm1faXNDb2xsYXBzZWQgPSBmYWxzZTsKLSAgICB9
OwotCi0gICAgVGV4dEZyYWdtZW50IHJpZ2h0U2lkZSgqdGhpcyk7Ci0gICAgdXBkYXRlRnJhZ21l
bnRQcm9wZXJ0aWVzKCp0aGlzLCBzdGFydCgpLCBzcGxpdFBvc2l0aW9uLCBsZWZ0U2lkZVdpZHRo
KTsKLSAgICB1cGRhdGVGcmFnbWVudFByb3BlcnRpZXMocmlnaHRTaWRlLCBzcGxpdFBvc2l0aW9u
LCByaWdodFNpZGUuZW5kKCksIHJpZ2h0U2lkZVdpZHRoKTsKLSAgICByZXR1cm4gcmlnaHRTaWRl
OwotfQotCi1pbmxpbmUgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCBUZXh0RnJh
Z21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpzcGxpdFdpdGhIeXBoZW4odW5zaWduZWQgaHlw
aGVuUG9zaXRpb24sIGZsb2F0IGh5cGhlblN0cmluZ1dpZHRoLAotICAgIGZsb2F0IGxlZnRTaWRl
V2lkdGgsIGZsb2F0IHJpZ2h0U2lkZVdpZHRoKQotewotICAgIGF1dG8gcmlnaHRTaWRlID0gc3Bs
aXQoaHlwaGVuUG9zaXRpb24sIGxlZnRTaWRlV2lkdGgsIHJpZ2h0U2lkZVdpZHRoKTsKLSAgICBt
X2hhc0h5cGhlbiA9IHRydWU7Ci0gICAgbV93aWR0aCArPSBoeXBoZW5TdHJpbmdXaWR0aDsKLSAg
ICByZXR1cm4gcmlnaHRTaWRlOwotfQotCi1pbmxpbmUgYm9vbCBUZXh0RnJhZ21lbnRJdGVyYXRv
cjo6aXNTb2Z0TGluZUJyZWFrKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAotewotICAgIGNvbnN0
IGF1dG8mIHNlZ21lbnQgPSAqbV9jdXJyZW50U2VnbWVudDsKLSAgICBBU1NFUlQoc2VnbWVudC5z
dGFydCA8PSBwb3NpdGlvbiAmJiBwb3NpdGlvbiA8IHNlZ21lbnQuZW5kKTsKLSAgICByZXR1cm4g
bV9zdHlsZS5wcmVzZXJ2ZU5ld2xpbmUgJiYgc2VnbWVudC50ZXh0W3Bvc2l0aW9uIC0gc2VnbWVu
dC5zdGFydF0gPT0gJ1xuJzsKLX0KLQotaW5saW5lIGJvb2wgVGV4dEZyYWdtZW50SXRlcmF0b3I6
OmlzSGFyZExpbmVCcmVhayhjb25zdCBGbG93Q29udGVudHM6Okl0ZXJhdG9yJiBzZWdtZW50KSBj
b25zdAotewotICAgIEFTU0VSVChzZWdtZW50LT5zdGFydCAhPSBzZWdtZW50LT5lbmQgfHwgKHNl
Z21lbnQtPnN0YXJ0ID09IHNlZ21lbnQtPmVuZCAmJiBpczxSZW5kZXJMaW5lQnJlYWs+KHNlZ21l
bnQtPnJlbmRlcmVyKSkpOwotICAgIHJldHVybiBzZWdtZW50LT5zdGFydCA9PSBzZWdtZW50LT5l
bmQ7Ci19Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
UGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwCmlu
ZGV4IGE3MGE4OGU2YmE0My4uOTVjZTg3ZjlhMWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UZXh0UGFpbnRlci5jcHAKQEAgLTIyOCw3ICsyMjgsNiBAQCB2b2lkIFRleHRQYWludGVyOjpw
YWludFJhbmdlKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVj
dCwgYwogdm9pZCBUZXh0UGFpbnRlcjo6Y2xlYXJHbHlwaERpc3BsYXlMaXN0cygpCiB7CiAgICAg
R2x5cGhEaXNwbGF5TGlzdENhY2hlPElubGluZVRleHRCb3g+OjpzaW5nbGV0b24oKS5jbGVhcigp
OwotICAgIEdseXBoRGlzcGxheUxpc3RDYWNoZTxTaW1wbGVMaW5lTGF5b3V0OjpSdW4+OjpzaW5n
bGV0b24oKS5jbGVhcigpOwogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQog
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmxheW91dEZv
cm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkKCkpCiAgICAgICAgIEdseXBoRGlzcGxh
eUxpc3RDYWNoZTxEaXNwbGF5OjpSdW4+OjpzaW5nbGV0b24oKS5jbGVhcigpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmNwcApp
bmRleCA1MWVmMjFmYTNhNTcuLjg1Zjg4ZWYyMjg2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5jcHAKQEAgLTI3LDYgKzI3
LDcgQEAKICNpbmNsdWRlICJMaW5lTGF5b3V0VHJhdmVyc2FsLmgiCiAKICNpbmNsdWRlICJMYXlv
dXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuaCIKKyNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIK
ICNpbmNsdWRlICJSZW5kZXJMaW5lQnJlYWsuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
ODEsMTEgKzgyLDYgQEAgc3RhdGljIGNvbnN0IFJlbmRlckJsb2NrRmxvdyogbGluZUxheW91dFN5
c3RlbUZsb3dGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QKIFRleHRCb3hJdGVyYXRvciBm
aXJzdFRleHRCb3hGb3IoY29uc3QgUmVuZGVyVGV4dCYgdGV4dCkKIHsKICAgICBpZiAoYXV0byog
ZmxvdyA9IGxpbmVMYXlvdXRTeXN0ZW1GbG93Rm9yUmVuZGVyZXIodGV4dCkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHNpbXBsZUxpbmVMYXlvdXQgPSBmbG93LT5zaW1wbGVMaW5lTGF5b3V0KCkpIHsK
LSAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBzaW1wbGVMaW5lTGF5b3V0LT5ydW5SZXNvbHZlcigp
LnJhbmdlRm9yUmVuZGVyZXIodGV4dCk7Ci0gICAgICAgICAgICByZXR1cm4geyBTaW1wbGVQYXRo
IHsgcmFuZ2UuYmVnaW4oKSwgcmFuZ2UuZW5kKCkgfSB9OwotICAgICAgICB9Ci0KICNpZiBFTkFC
TEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKICAgICAgICAgaWYgKGF1dG8qIGxheW91dEZv
cm1hdHRpbmdDb250ZXh0TGluZUxheW91dCA9IGZsb3ctPmxheW91dEZvcm1hdHRpbmdDb250ZXh0
TGluZUxheW91dCgpKQogICAgICAgICAgICAgcmV0dXJuIGxheW91dEZvcm1hdHRpbmdDb250ZXh0
TGluZUxheW91dC0+dGV4dEJveGVzRm9yKHRleHQpOwpAQCAtMTI5LDExICsxMjUsNiBAQCBib29s
IEVsZW1lbnRCb3hJdGVyYXRvcjo6YXRFbmQoKSBjb25zdAogRWxlbWVudEJveEl0ZXJhdG9yIGVs
ZW1lbnRCb3hGb3IoY29uc3QgUmVuZGVyTGluZUJyZWFrJiByZW5kZXJFbGVtZW50KQogewogICAg
IGlmIChhdXRvKiBmbG93ID0gbGluZUxheW91dFN5c3RlbUZsb3dGb3JSZW5kZXJlcihyZW5kZXJF
bGVtZW50KSkgewotICAgICAgICBpZiAoYXV0byogc2ltcGxlTGluZUxheW91dCA9IGZsb3ctPnNp
bXBsZUxpbmVMYXlvdXQoKSkgewotICAgICAgICAgICAgYXV0byByYW5nZSA9IHNpbXBsZUxpbmVM
YXlvdXQtPnJ1blJlc29sdmVyKCkucmFuZ2VGb3JSZW5kZXJlcihyZW5kZXJFbGVtZW50KTsKLSAg
ICAgICAgICAgIHJldHVybiB7IFNpbXBsZVBhdGgocmFuZ2UuYmVnaW4oKSwgcmFuZ2UuZW5kKCkp
IH07Ci0gICAgICAgIH0KLQogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQog
ICAgICAgICBpZiAoYXV0byogbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0ID0gZmxv
dy0+bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCkpCiAgICAgICAgICAgICByZXR1
cm4gbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LT5lbGVtZW50Qm94Rm9yKHJlbmRl
ckVsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGlu
ZUxheW91dFRyYXZlcnNhbC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxh
eW91dFRyYXZlcnNhbC5oCmluZGV4IGQ3MzA0OTc0MTUzYi4uMDFmNjk4OTdkMmU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5o
CkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiSW5saW5lRWxlbWVudEJveC5oIgogI2luY2x1
ZGUgIkxpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5oIgogI2luY2x1ZGUgIkxpbmVMYXlv
dXRUcmF2ZXJzYWxEaXNwbGF5UnVuUGF0aC5oIgotI2luY2x1ZGUgIkxpbmVMYXlvdXRUcmF2ZXJz
YWxTaW1wbGVQYXRoLmgiCiAjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNDksOCArNDgsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKExBWU9VVF9GT1JN
QVRUSU5HX0NPTlRFWFQpCiAgICAgICAgIERpc3BsYXlSdW5QYXRoLAogI2VuZGlmCi0gICAgICAg
IENvbXBsZXhQYXRoLAotICAgICAgICBTaW1wbGVQYXRoCisgICAgICAgIENvbXBsZXhQYXRoCiAg
ICAgPjsKIAogICAgIEJveChQYXRoVmFyaWFudCYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxlUGF0aC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2QzYzIzZjcwOTguLjAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2Fs
U2ltcGxlUGF0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiTGluZUxheW91dFRyYXZlcnNhbC5oIgotI2luY2x1
ZGUgIlNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1u
YW1lc3BhY2UgTGluZUxheW91dFRyYXZlcnNhbCB7Ci0KLWNsYXNzIFNpbXBsZVBhdGggewotcHVi
bGljOgotICAgIFNpbXBsZVBhdGgoU2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJh
dG9yIGl0ZXJhdG9yLCBTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3IgZW5k
KQotICAgICAgICA6IG1faXRlcmF0b3IoaXRlcmF0b3IpCi0gICAgICAgICwgbV9lbmQoZW5kKQot
ICAgIHsgfQotCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiAoKm1faXRlcmF0
b3IpLnJlY3QoKTsgfQotCi0gICAgZmxvYXQgYmFzZWxpbmUoKSBjb25zdCB7IHJldHVybiAoKm1f
aXRlcmF0b3IpLmJhc2VsaW5lKCk7IH0KLQotICAgIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KLSAgICBib29sIGRpck92ZXJyaWRlKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICBib29sIGlzTGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gKCptX2l0ZXJh
dG9yKS5pc0xpbmVCcmVhaygpOyB9Ci0KLSAgICBib29sIHVzZUxpbmVCcmVha0JveFJlbmRlclRy
ZWVEdW1wUXVpcmsoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKG1faXRlcmF0b3IuYXRCZWdp
bigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhdXRvIHByZXZpb3VzID0g
bV9pdGVyYXRvcjsKLSAgICAgICAgLS1wcmV2aW91czsKLSAgICAgICAgcmV0dXJuICEoKnByZXZp
b3VzKS5pc0VuZE9mTGluZSgpOwotICAgIH0KLQotICAgIGJvb2wgaGFzSHlwaGVuKCkgY29uc3Qg
eyByZXR1cm4gKCptX2l0ZXJhdG9yKS5oYXNIeXBoZW4oKTsgfQotICAgIFN0cmluZ1ZpZXcgdGV4
dCgpIGNvbnN0IHsgcmV0dXJuICgqbV9pdGVyYXRvcikudGV4dCgpOyB9Ci0gICAgdW5zaWduZWQg
bG9jYWxTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuICgqbV9pdGVyYXRvcikubG9jYWxTdGFy
dCgpOyB9Ci0gICAgdW5zaWduZWQgbG9jYWxFbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiAoKm1f
aXRlcmF0b3IpLmxvY2FsRW5kKCk7IH0KLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJl
dHVybiAoKm1faXRlcmF0b3IpLmVuZCgpIC0gKCptX2l0ZXJhdG9yKS5zdGFydCgpOyB9Ci0KLSAg
ICBib29sIGlzTGFzdE9uTGluZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBhdXRvIG5leHQgPSBt
X2l0ZXJhdG9yOwotICAgICAgICArK25leHQ7Ci0gICAgICAgIHJldHVybiBuZXh0ID09IG1fZW5k
IHx8ICgqbV9pdGVyYXRvcikubGluZUluZGV4KCkgIT0gKCpuZXh0KS5saW5lSW5kZXgoKTsKLSAg
ICB9Ci0gICAgYm9vbCBpc0xhc3QoKSBjb25zdAotICAgIHsKLSAgICAgICAgYXV0byBuZXh0ID0g
bV9pdGVyYXRvcjsKLSAgICAgICAgKytuZXh0OwotICAgICAgICByZXR1cm4gbmV4dCA9PSBtX2Vu
ZDsKLSAgICB9OwotCi0gICAgdm9pZCB0cmF2ZXJzZU5leHRUZXh0Qm94SW5WaXN1YWxPcmRlcigp
Ci0gICAgewotICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGN1cnJlbnRseSBvbmx5IHVzZWQg
Zm9yIGNvbnNlY3V0aXZlIHRleHQgcnVucy4KLSAgICAgICAgKyttX2l0ZXJhdG9yOwotICAgIH0K
LSAgICB2b2lkIHRyYXZlcnNlTmV4dFRleHRCb3hJblRleHRPcmRlcigpIHsgIHRyYXZlcnNlTmV4
dFRleHRCb3hJblZpc3VhbE9yZGVyKCk7IH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBT
aW1wbGVQYXRoJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRvciA9PSBvdGhlci5tX2l0
ZXJhdG9yOyB9Ci0gICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0b3IgPT0g
bV9lbmQ7IH0KLQotcHJpdmF0ZToKLSAgICBTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6
SXRlcmF0b3IgbV9pdGVyYXRvcjsKLSAgICBTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6
SXRlcmF0b3IgbV9lbmQ7Ci19OwotCi19Ci19Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409658</attachid>
            <date>2020-09-24 22:56:16 -0700</date>
            <delta_ts>2020-09-25 04:50:00 -0700</delta_ts>
            <desc>test</desc>
            <filename>lfc-win-enable-test.patch</filename>
            <type>text/plain</type>
            <size>227029</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwZjI4OTNlMTdiNzcuLmRhNDA1MzZjMTlhNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDgwIEBACisyMDIwLTA5LTI0ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmUgU2ltcGxlIExpbmUgTGF5b3V0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY5MTQKKworICAgICAgICBSZXZpZXdl
ZCBieSBTYW0gV2VpbmlnLgorCisgICAgICAgIEl0IGlzIGFscmVhZHkgZnVsbHkgY292ZXJlZCBi
eSBMRkMgYW5kIHNvIHVudXNlZC4gUmVtb3ZlIHRoZSBjb2RlLgorCisgICAgICAgICogSGVhZGVy
cy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWExvZ2dlci5j
cHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNl
Lmg6CisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAqIGxheW91
dC9WZXJpZmljYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojp2ZXJpZnlBbmRP
dXRwdXRTdWJ0cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6b3V0cHV0TWlzbWF0Y2hp
bmdTaW1wbGVMaW5lSW5mb3JtYXRpb25JZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5
b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHA6CisgICAgICAg
ICogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5jcHA6Cisg
ICAgICAgICogcmVuZGVyaW5nL0NvbXBsZXhMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBsZXhMaW5lTGF5b3V0OjpsYXlvdXRMaW5lQm94ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcGxleExpbmVMYXlvdXQ6OmFkZE92ZXJmbG93RnJvbUlubGluZUNoaWxkcmVuKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrRmxvdzo6bGF5b3V0SW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2tGbG93OjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9ja0Zsb3c6OmhpdFRlc3RJbmxpbmVDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9ja0Zsb3c6OmFkZE92ZXJmbG93RnJvbUlubGluZUNoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bWFya0xpbmVzRGlydHlJbkJsb2NrUmFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpmaXJzdExpbmVCYXNlbGluZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmlubGluZUJsb2NrQmFz
ZWxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjppbmxpbmVT
ZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bGluZUNv
dW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6cG9zaXRpb25G
b3JQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnBhaW50SW5saW5l
Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpoYXNMaW5lcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmludmFsaWRhdGVMaW5l
TGF5b3V0UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmVuc3VyZUxp
bmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6Om91dHB1dExpbmVU
cmVlQW5kTWFyayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6Omxh
eW91dFNpbXBsZUxpbmVzKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxv
Y2tGbG93Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6Omhhc1NpbXBsZUxp
bmVMYXlvdXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tG
bG93OjpzaW1wbGVMaW5lTGF5b3V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrRmxvdzo6c2ltcGxlTGluZUxheW91dCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckZyYWdtZW50ZWRGbG93OjpyZW1vdmVMaW5lRnJhZ21lbnRJbmZvKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojph
YnNvbHV0ZVF1YWRzRm9yUmFuZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4
dDo6cG9zaXRpb25Gb3JQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpzZXRU
ZXh0V2l0aE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojp1c2VzQ29tcGxl
eExpbmVMYXlvdXRQYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6Omxp
bmVzVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUZXh0Ojpjb2xsZWN0U2VsZWN0aW9uUmVjdHNGb3JMaW5lQm94ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dDo6c2ltcGxlTGluZUxheW91dCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxp
bmVMYXlvdXQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91
dENvdmVyYWdlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxh
eW91dENvdmVyYWdlLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXRGbG93Q29udGVudHMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRl
cmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVu
ZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFBhZ2luYXRpb24uaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRUZXh0RnJh
Z21lbnRJdGVyYXRvci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0UGFpbnRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UGFpbnRlcjo6Y2xlYXJHbHlwaERpc3BsYXlM
aXN0cyk6CisgICAgICAgICogcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpmaXJzdFRleHRCb3hGb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6ZWxlbWVudEJveEZvcik6
CisgICAgICAgICogcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmg6IFJlbW92
ZWQuCisKIDIwMjAtMDktMjMgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHByb3NwZWN0aXZlIEdUSyBidWlsZCBmaXggYWZ0ZXIg
cjI2NzQ0OS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3Vy
Y2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IDM4YzA2YjhiYmRjYy4uMGQyZTFkNmZhNmU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0MTYsMTUgKzE0MTYsMTAgQEAgc2V0KFdlYkNvcmVf
UFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuaAog
ICAgIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmgKICAgICByZW5kZXJpbmcvU2Nyb2xsQWxpZ25t
ZW50LmgKLSAgICByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5oCi0gICAgcmVuZGVyaW5nL1Np
bXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5oCi0gICAgcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRG
bG93Q29udGVudHMuaAotICAgIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaAog
CiAgICAgcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5oCiAgICAgcmVuZGVyaW5n
L2xpbmUvTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmgKICAgICByZW5kZXJpbmcvbGlu
ZS9MaW5lTGF5b3V0VHJhdmVyc2FsRGlzcGxheVJ1blBhdGguaAotICAgIHJlbmRlcmluZy9saW5l
L0xpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmgKICAgICByZW5kZXJpbmcvbGluZS9MaW5l
V2lkdGguaAogICAgIHJlbmRlcmluZy9saW5lL1RyYWlsaW5nT2JqZWN0cy5oCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKaW5kZXggYTQzZmI5NzFjMDAwLi42NDQ5M2JiN2EwNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0y
MTk5LDEzICsyMTk5LDYgQEAgcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCiByZW5kZXJpbmcvUmVu
ZGVyV2lkZ2V0LmNwcAogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCiByZW5kZXJpbmcvU2Ny
b2xsQWxpZ25tZW50LmNwcAotcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCi1yZW5kZXJp
bmcvU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNwcAotcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRGbG93Q29udGVudHMuY3BwCi1yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5j
cHAKLXJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5jcHAKLXJlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwCi1yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRl
eHRGcmFnbWVudEl0ZXJhdG9yLmNwcAogcmVuZGVyaW5nL1RhYmxlTGF5b3V0LmNwcAogcmVuZGVy
aW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHAKIHJlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCA4MWM2MTAzN2IyMWYuLmFhNzk0OTJjNGNhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzY5LDcgKzM2OSw2IEBA
CiAJCTBGRkQ0NUFBMjQzQzMwMjcwMDBENEJFQSAvKiBTY3JvbGxpbmdUcmVlTGF0Y2hpbmdDb250
cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkZENDVBNzI0M0JGMjU3MDAwRDRCRUEgLyogU2Nyb2xsaW5nVHJlZUxhdGNoaW5nQ29udHJvbGxl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
RkQ0RDYxMTg2NTFGQTMwMDUxMkY2RSAvKiBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZENEQ1RjE4NjUx
RkEzMDA1MTJGNkUgLyogQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTEwRkIwODRCMTRFMTVDN0UwMEEz
REI5OCAvKiBQdWJsaWNVUkxNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxMEZCMDg0QTE0RTE1QzdFMDBBM0RCOTggLyogUHVibGljVVJMTWFu
YWdlci5oICovOyB9OwotCQkxMTJCMzRENTFFNjBCOTgzMDBCQjMxMEEgLyogU2ltcGxlTGluZUxh
eW91dFBhZ2luYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDExMkIzNEQ0MUU2MEI5ODMwMEJCMzEwQSAvKiBTaW1wbGVMaW5lTGF5b3V0UGFnaW5h
dGlvbi5oICovOyB9OwogCQkxMTMxMENGMjIwQkE0QTMyMDA2NUE4RDAgLyogTGF5b3V0VHJlZUJ1
aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDEx
MTAwRkQ3MjA5NTE0REYwMDgxQUE2QyAvKiBMYXlvdXRUcmVlQnVpbGRlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTExMzEwQ0YzMjBCQTRBMzcw
MDY1QThEMCAvKiBMYXlvdXRSZXBsYWNlZEJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTExQzYxNTYyMEFEMUFFMTAwNUI4MkZBIC8qIExheW91dFJl
cGxhY2VkQm94LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMTEzMTBDRjQyMEJBNEEzRDAwNjVBOEQwIC8qIExheW91dEl0ZXJhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMTEwMEZDNzIwOTI3NjRD
MDA4MUFBNkMgLyogTGF5b3V0SXRlcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzkzLDcgKzM5Miw2IEBACiAJCTExOTlGQTQ2MjA4RTM1
QTMwMDIzNThDQyAvKiBMYXlvdXRDb250YWluZXJCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExOTlGQTQ0MjA4RTM1QTMwMDIzNThDQyAvKiBMYXlv
dXRDb250YWluZXJCb3guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkxMTk5RkE1QjIwOEUzQzdGMDAyMzU4Q0MgLyogRGlzcGxheUJveC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTE5OUZBNTkyMDhFM0M3
RjAwMjM1OENDIC8qIERpc3BsYXlCb3guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxMUNCMjc4OTIwM0JBNTcwMDA0QTFEQzkgLyogUmVuZGVyVHJl
ZUJ1aWxkZXJGdWxsU2NyZWVuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxMUNCMjc4NzIwM0JBNTcwMDA0QTFEQzkgLyogUmVuZGVyVHJlZUJ1aWxkZXJG
dWxsU2NyZWVuLmggKi87IH07Ci0JCTExRTA2N0VFMUU2MjQ2RTUwMDE2MkQxNiAvKiBTaW1wbGVM
aW5lTGF5b3V0Q292ZXJhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDExRTA2N0VEMUU2MjQ2RTUwMDE2MkQxNiAvKiBTaW1wbGVMaW5lTGF5b3V0Q292
ZXJhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxNDAwRDdBODE3MTM2RUE3MDA3N0NFMDUgLyogU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMEQ3QTcxNzEz
NkVBNzAwNzdDRTA1IC8qIFNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAzQjk5NzA5RUIxM0FGMDA3OTdD
N0YgLyogRE9NV2luZG93LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDAzQjk5NTA5RUIxM0FGMDA3OTdDN0YgLyogRE9NV2luZG93LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwM0JBMEYwOUVCMThG
OTAwNzk3QzdGIC8qIEpTRE9NV2luZG93LmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAzQkEwRTA5RUIxOEY4MDA3OTdDN0Yg
LyogSlNET01XaW5kb3cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMTg3Nyw5ICsxODc1LDcgQEAKIAkJNTgwMzcxNjQxQTY2RjFEMzAwQkFGNTE5
IC8qIExheWVyRnJhZ21lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU4MDM3MTYzMUE2NkYxRDMwMEJBRjUxOSAvKiBMYXllckZyYWdtZW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTgyNEFCQTMx
QUU4MTExNjAwOTA3NEI3IC8qIFJ1YnlFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODI0QUJBMTFBRTgxMTE2MDA5MDc0QjcgLyogUnVieUVs
ZW1lbnQuaCAqLzsgfTsKIAkJNTgyNEFCQTcxQUU4MTM4NDAwOTA3NEI3IC8qIFJ1YnlUZXh0RWxl
bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTgy
NEFCQTUxQUU4MTM4NDAwOTA3NEI3IC8qIFJ1YnlUZXh0RWxlbWVudC5oICovOyB9OwotCQk1ODJD
QjA1MzFBNzhBMTRCMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODJD
QjA1MjFBNzhBMTRCMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJh
dG9yLmggKi87IH07CiAJCTU4MkRFMzI1MUMzMEM4NTQwMEJFMDJBOCAvKiBUZXh0RGVjb3JhdGlv
blBhaW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU4MkRFMzIzMUMzMEM4NTQwMEJFMDJBOCAvKiBUZXh0RGVjb3JhdGlvblBhaW50ZXIuaCAqLzsg
fTsKLQkJNTg1RDZFMDQxQTFBNzkyRTAwRkE0RjEyIC8qIFNpbXBsZUxpbmVMYXlvdXRGbG93Q29u
dGVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4
NUQ2RTAyMUExQTc5MkUwMEZBNEYxMiAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTg5NTU2
RUQxOEQ0QTQ0MDAwNzY0QjAzIC8qIEJvcmRlckVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4OTU1NkVDMThENEE0NDAwMDc2NEIwMyAvKiBCb3Jk
ZXJFZGdlLmggKi87IH07CiAJCTU4QjJGOUY0MjIzMkQ0NTMwMDkzOEQ2MyAvKiBSZXNpemVPYnNl
cnZhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NThCMkY5RjMyMjMyRDQzRjAwOTM4RDYzIC8qIFJlc2l6ZU9ic2VydmF0aW9uLmggKi87IH07CiAJ
CTU4QjJGOUY1MjIzMkQ0NTgwMDkzOEQ2MyAvKiBSZXNpemVPYnNlcnZlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNThCMkY5RUMyMjMyRDQzQjAwOTM4
RDYzIC8qIFJlc2l6ZU9ic2VydmVyLmggKi87IH07CkBAIC00OTg1LDcgKzQ5ODEsNiBAQAogCQlF
NDI5NUZBNDEyQjA2MTRFMDBEMUFDRTAgLyogUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0Mjk1RkEzMTJCMDYxNEUw
MEQxQUNFMCAvKiBSZXNvdXJjZUxvYWRQcmlvcml0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0MkU3NkRDMUM3QUY3NzYwMEUzNjE0RCAvKiBT
dHlsZVVwZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTQyRTc2REIxQzdBRjc3NjAwRTM2MTREIC8qIFN0eWxlVXBkYXRlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQzMTA1QkIxNjc1MEYxNjAw
REIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0MzEwNUJBMTY3NTBGMTYwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2Fs
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRTQz
NDNEMjMyMzkyNzc4NDAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDM0M0QyMTIz
OTI3NzgzMDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDM0M0QyNTIzOTI3
NzkwMDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDM0M0QyNDIzOTI3NzhGMDBF
QkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQzQTAyM0IxN0VCMzcwQTAwNENE
RDI1IC8qIFJlbmRlckVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0M0EwMjNBMTdFQjM3MEEwMDRDREQyNSAvKiBSZW5kZXJFbGVtZW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQzQUY4
RTcxQUM1QjdFQzAwQ0E3MTdFIC8qIENhY2hlVmFsaWRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQUY4RTUxQUM1QjdERDAwQ0E3MTdFIC8q
IENhY2hlVmFsaWRhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC01MDQwLDcgKzUwMzUsNiBAQAogCQlFNDgxMzdCOTFEQjNCNTI2MDA1QzU5
QkYgLyogU3R5bGVWYWxpZGl0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQ4MTM3QjgxREIzQjUyNjAwNUM1OUJGIC8qIFN0eWxlVmFsaWRpdHkuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDg0QTMz
RTIzMDU1MzI1MDA5QURFNkEgLyogTGluZUxheW91dFRyYXZlcnNhbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4NEEzM0IyMzA1NTMwMzAwOUFERTZB
IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlFNDg2M0NGRTIzODQyRTlFMDA5NzIxNTggLyogUnVsZURhdGEu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODYzQ0ZE
MjM4NDJFOUUwMDk3MjE1OCAvKiBSdWxlRGF0YS5oICovOyB9OwotCQlFNDg5NDRBMzE4MEI1N0Q4
MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4OTQ0QTExODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxp
bmVMYXlvdXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFNDk0NkVBRjE1NkU2NEREMDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDk0NkVBRDE1NkU2NERE
MDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5QkQ5RkExMzFGRDJFRDAwM0M1NkYwIC8qIENTU1Zh
bHVlUG9vbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTQ5QkQ5RjkxMzFGRDJFRDAwM0M1NkYwIC8qIENTU1ZhbHVlUG9vbC5oICovOyB9OwogCQlFNEE3
OTk1MjIwRUU0QjE0MDBDMTk1NjggLyogQ1NTUGFyc2VyQ29udGV4dC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBNzk5NEUyMEVFNEFFMTAwQzE5NTY4
IC8qIENTU1BhcnNlckNvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtNTA4MSw4ICs1MDc1LDYgQEAKIAkJRTRFOEI0RUMyMTZCNzlFNTAw
Qjg4MzREIC8qIFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEU4QjRFQTIxNkI3OUU1MDBCODgzNEQgLyog
U3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQuaCAqLzsgfTsKIAkJRTRFOEI0RjUyMTZCOTU2NTAw
Qjg4MzREIC8qIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RThCNEYyMjE2QjhCNjAwMEI4ODM0RCAvKiBGb250
Q2FzY2FkZURlc2NyaXB0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRTRFOTRENjEyMkZGMTU4QTAwREQxOTFGIC8qIENvbXBsZXhMaW5lTGF5
b3V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEEx
QUM3ODIyRkFGRDUwMDAxN0I3NUIgLyogQ29tcGxleExpbmVMYXlvdXQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlFNEU5QjExOTE4MTA5MTZGMDAz
QUNDREYgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEU5QjExODE4MTA5MTZGMDAzQUNDREYgLyogU2lt
cGxlTGluZUxheW91dFJlc29sdmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJRTRFOUIxMUQxODE0NTY5QzAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVM
YXlvdXRGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0RTlCMTFDMTgxNDU2OUMwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rp
b25zLmggKi87IH07CiAJCUU0RjlFRUYzMTU2REEwMDcwMEQyM0U3RSAvKiBTdHlsZVNoZWV0Q29u
dGVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
RjlFRUYxMTU2RDg0QzQwMEQyM0U3RSAvKiBTdHlsZVNoZWV0Q29udGVudHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNTE2Njk5MTIwRkY5OTE4
MDA5RDJDMjcgLyogTGlzdEJ1dHRvbkFycm93QDJ4LnBuZyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTUxNjY5OEYyMEZGOTkxNjAwOUQyQzI3IC8qIExp
c3RCdXR0b25BcnJvd0AyeC5wbmcgKi87IH07CiAJCUU1MTc2NzAzMjBCODhDMTQwMEQ0MTE2NyAv
KiBEYXRhTGlzdFN1Z2dlc3Rpb25JbmZvcm1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTUxNzY3MDIyMEI4OEMxNDAwRDQxMTY3IC8qIERhdGFM
aXN0U3VnZ2VzdGlvbkluZm9ybWF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTYwOTcsOCArNjA4OSw2IEBACiAJCTExMTAwRkQ3MjA5NTE0
REYwMDgxQUE2QyAvKiBMYXlvdXRUcmVlQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRU
cmVlQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMTFDNjE1NjIwQUQx
QUUxMDA1QjgyRkEgLyogTGF5b3V0UmVwbGFjZWRCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0
UmVwbGFjZWRCb3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTExQzYxNTcyMEFE
MUFFMTAwNUI4MkZBIC8qIExheW91dFJlcGxhY2VkQm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IExheW91dFJlcGxhY2VkQm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTEy
QjM0RDAxRTYwQjhBNzAwQkIzMTBBIC8qIFNpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRQYWdp
bmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTEyQjM0RDQxRTYwQjk4
MzAwQkIzMTBBIC8qIFNpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExMzQwOUQ3MjAzRTAzODAwMEM2NjkxNSAvKiBSZW5kZXJU
cmVlQnVpbGRlckNvbnRpbnVhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUcmVl
QnVpbGRlckNvbnRpbnVhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTEx
MzQwOUQ4MjAzRTAzODAwMEM2NjkxNSAvKiBSZW5kZXJUcmVlQnVpbGRlckNvbnRpbnVhdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJUcmVlQnVpbGRlckNvbnRpbnVhdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxMTNEMEI0RjFGOUZERDJCMDBGNjExQkIgLyogRnJhbWVW
aWV3TGF5b3V0Q29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGcmFtZVZpZXdMYXlvdXRD
b250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYxNDcsOCArNjEzNyw2
IEBACiAJCTExQ0IyNzg2MjAzQkE1NzAwMDRBMURDOSAvKiBSZW5kZXJUcmVlQnVpbGRlckZ1bGxT
Y3JlZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJGdWxsU2NyZWVu
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTFDQjI3ODcyMDNCQTU3MDAwNEEx
REM5IC8qIFJlbmRlclRyZWVCdWlsZGVyRnVsbFNjcmVlbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJUcmVlQnVpbGRlckZ1bGxTY3JlZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTFEMTlDMkUyMzE1OUJBRTAwOEYyNEQzIC8qIFRhYmxlRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRy
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUYWJsZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxMUUwNjdFQjFFNjI0NjEzMDAxNjJE
MTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTExRTA2N0VEMUU2MjQ2RTUwMDE2MkQxNiAvKiBTaW1wbGVMaW5l
TGF5b3V0Q292ZXJhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxl
TGluZUxheW91dENvdmVyYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExRkYw
MkQ1MjBCQTNDODEwMDgzRjI1QiAvKiBWZXJpZmljYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVmVyaWZpY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTJGNzVB
OUE4NkVBMDNEQUYyNEI3OTcxIC8qIElTT1Byb3RlY3Rpb25TeXN0ZW1TcGVjaWZpY0hlYWRlckJv
eC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJU09Qcm90ZWN0aW9uU3lzdGVt
U3BlY2lmaWNIZWFkZXJCb3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMEQ3
QTcxNzEzNkVBNzAwNzdDRTA1IC8qIFNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTE3MywxMyArOTE2MSw4IEBACiAJCTU4MjRBQkExMUFF
ODExMTYwMDkwNzRCNyAvKiBSdWJ5RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSdWJ5RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1ODI0
QUJBNDFBRTgxMzg0MDA5MDc0QjcgLyogUnVieVRleHRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJ1YnlUZXh0RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTU4MjRBQkE1MUFFODEzODQwMDkwNzRCNyAvKiBSdWJ5VGV4dEVs
ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUnVieVRleHRFbGVtZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU4MkNCMDUyMUE3OEExNEIwMEFGRkND
NCAvKiBTaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU4MkNCMDU0MUE3OEEyQjIwMEFGRkND
NCAvKiBTaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0
ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTgyREUzMjIxQzMwQzg1
NDAwQkUwMkE4IC8qIFRleHREZWNvcmF0aW9uUGFpbnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1ODJERTMyMzFDMzBDODU0MDBCRTAyQTggLyogVGV4dERlY29y
YXRpb25QYWludGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHREZWNv
cmF0aW9uUGFpbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1ODVENkRGQjFB
MTUzNTU2MDBGQTRGMTIgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU4NUQ2RTAxMUExQTc5MkUwMEZBNEYxMiAv
KiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk1ODVENkUwMjFBMUE3OTJFMDBGQTRGMTIgLyogU2ltcGxl
TGluZUxheW91dEZsb3dDb250ZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTU4ODRGRTU2MjI4MTNFMkQwMDQwQUZGNiAvKiBKU1Jlc2l6ZU9ic2VydmVyRW50cnlD
dXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNSZXNpemVP
YnNlcnZlckVudHJ5Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTg5
NTU2RUMxOEQ0QTQ0MDAwNzY0QjAzIC8qIEJvcmRlckVkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQm9yZGVyRWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1OEFFRTJGMzE4RDRCQ0NGMDAyMkU3RkUgLyogQm9yZGVyRWRnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCb3JkZXJFZGdlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE1ODM2LDcgKzE1ODE5LDYgQEAKIAkJRTQzMTA1QkExNjc1MEYxNjAw
REIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTm9kZVRyYXZlcnNhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDMxMkFC
NTI0QjMyNjU2MDA2NzgzNDkgLyogTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dEludGVncmF0aW9uUGFnaW5h
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MzEyQUI3MjRCMzI2NTYw
MDY3ODM0OSAvKiBMYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0MzQzRDIxMjM5Mjc3ODMwMEVCQkI2NiAvKiBMaW5lTGF5
b3V0VHJhdmVyc2FsU2ltcGxlUGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBMaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxlUGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFNDM0M0QyNDIzOTI3NzhGMDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbENv
bXBsZXhQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpbmVMYXlvdXRU
cmF2ZXJzYWxDb21wbGV4UGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDNB
MDIzQTE3RUIzNzBBMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUU0M0EwMjNDMTdFQjM3MTMwMDRDREQyNSAvKiBSZW5kZXJFbGVtZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckVsZW1lbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU5MjgsOCArMTU5MTAsNiBAQAogCQlFNDg0QTMz
RDIzMDU1MzAzMDA5QURFNkEgLyogTGluZUxheW91dFRyYXZlcnNhbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaW5lTGF5b3V0VHJhdmVyc2FsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ4NjNDRkEyMzg0MkU4NzAwOTcyMTU4IC8qIFJ1bGVE
YXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJ1bGVEYXRhLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ4NjNDRkQyMzg0MkU5RTAwOTcyMTU4
IC8qIFJ1bGVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJ1bGVEYXRh
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0ODk0NEEwMTgwQjU3RDgwMEYxNjVE
OCAvKiBTaW1wbGVMaW5lTGF5b3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNpbXBsZUxpbmVMYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlFNDg5NDRBMTE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUU0OTQ2RUFDMTU2RTY0REQwMEQzMjk3RiAvKiBTdHlsZVJ1bGVJ
bXBvcnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVSdWxl
SW1wb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ5NDZFQUQxNTZFNjRE
RDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdHlsZVJ1bGVJbXBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTQ5QkQ5RjkxMzFGRDJFRDAwM0M1NkYwIC8qIENTU1ZhbHVlUG9vbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDU1NWYWx1ZVBvb2wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE2MDE5LDkgKzE1OTk5LDYgQEAKIAkJRTRFOEI0RUQyMTZCNzlGNDAwQjg4MzRE
IC8qIFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRFOEI0RjAyMTZCOEI1RjAwQjg4MzREIC8qIEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Rm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUU0RThCNEYyMjE2QjhCNjAwMEI4ODM0RCAvKiBGb250Q2FzY2FkZURlc2NyaXB0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTRFOUIxMTgxODEwOTE2RjAwM0FDQ0RGIC8q
IFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRTRFOUIxMUExODE0NTY5MjAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlv
bnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlTGluZUxh
eW91dEZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0RTlCMTFD
MTgxNDU2OUMwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRGOUVFRjAxNTZEODRDNDAwRDIzRTdFIC8qIFN0
eWxlU2hlZXRDb250ZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTdHlsZVNoZWV0Q29udGVudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
NEY5RUVGMTE1NkQ4NEM0MDBEMjNFN0UgLyogU3R5bGVTaGVldENvbnRlbnRzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlU2hlZXRDb250ZW50cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFNEZCNEIzNTIzOUJFQjEwMDAzQzMzNkEgLyogRGlzcGxheUlu
bGluZUNvbnRlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlzcGxheUlubGluZUNvbnRlbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjkxMTgsMjAgKzI5MDk1LDYgQEAK
IAkJCQlBOENGRjVEQTBBMTU1QTA1MDAwQTQyMzQgLyogUm9vdElubGluZUJveC5oICovLAogCQkJ
CTVEOTI1QjY1MEY2NEQ0REQwMEI4NDdGMCAvKiBTY3JvbGxBbGlnbm1lbnQuY3BwICovLAogCQkJ
CTVEOTI1QjY2MEY2NEQ0REQwMEI4NDdGMCAvKiBTY3JvbGxBbGlnbm1lbnQuaCAqLywKLQkJCQlF
NDg5NDRBMDE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5jcHAgKi8sCi0JCQkJ
RTQ4OTQ0QTExODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCAqLywKLQkJCQkx
MUUwNjdFQjFFNjI0NjEzMDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNwcCAq
LywKLQkJCQkxMUUwNjdFRDFFNjI0NkU1MDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVy
YWdlLmggKi8sCi0JCQkJNTg1RDZFMDExQTFBNzkyRTAwRkE0RjEyIC8qIFNpbXBsZUxpbmVMYXlv
dXRGbG93Q29udGVudHMuY3BwICovLAotCQkJCTU4NUQ2RTAyMUExQTc5MkUwMEZBNEYxMiAvKiBT
aW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmggKi8sCi0JCQkJRTRFOUIxMUExODE0NTY5MjAw
M0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwICovLAotCQkJCUU0RTlCMTFD
MTgxNDU2OUMwMDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmggKi8sCi0JCQkJ
MTEyQjM0RDAxRTYwQjhBNzAwQkIzMTBBIC8qIFNpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmNw
cCAqLywKLQkJCQkxMTJCMzRENDFFNjBCOTgzMDBCQjMxMEEgLyogU2ltcGxlTGluZUxheW91dFBh
Z2luYXRpb24uaCAqLywKLQkJCQk1ODVENkRGQjFBMTUzNTU2MDBGQTRGMTIgLyogU2ltcGxlTGlu
ZUxheW91dFJlc29sdmVyLmNwcCAqLywKLQkJCQlFNEU5QjExODE4MTA5MTZGMDAzQUNDREYgLyog
U2ltcGxlTGluZUxheW91dFJlc29sdmVyLmggKi8sCi0JCQkJNTgyQ0IwNTQxQTc4QTJCMjAwQUZG
Q0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5jcHAgKi8sCi0JCQkJ
NTgyQ0IwNTIxQTc4QTE0QjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJ
dGVyYXRvci5oICovLAogCQkJCUUzMUNENzUwMjI5Rjc0OTUwMEZCREExOSAvKiBUYWJsZUxheW91
dC5jcHAgKi8sCiAJCQkJQThDRkYwNEMwQTE1NEYwOTAwMEE0MjM0IC8qIFRhYmxlTGF5b3V0Lmgg
Ki8sCiAJCQkJMEY1NERDRTMxODgxMDUxRDAwM0VFREJCIC8qIFRleHRBdXRvU2l6aW5nLmNwcCAq
LywKQEAgLTMwMjEzLDcgKzMwMTc2LDYgQEAKIAkJCQlFNDg0QTMzQjIzMDU1MzAzMDA5QURFNkEg
LyogTGluZUxheW91dFRyYXZlcnNhbC5oICovLAogCQkJCUU0MzQzRDI0MjM5Mjc3OEYwMEVCQkI2
NiAvKiBMaW5lTGF5b3V0VHJhdmVyc2FsQ29tcGxleFBhdGguaCAqLywKIAkJCQlFNDUxQzYyNzIz
OTI5M0VCMDA5OTMxOTAgLyogTGluZUxheW91dFRyYXZlcnNhbERpc3BsYXlSdW5QYXRoLmggKi8s
Ci0JCQkJRTQzNDNEMjEyMzkyNzc4MzAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxTaW1w
bGVQYXRoLmggKi8sCiAJCQkJRkZEQkMwNDYxODNEMjdCNzAwNDA3MTA5IC8qIExpbmVXaWR0aC5j
cHAgKi8sCiAJCQkJRkZEQkMwNDUxODNEMjdCNzAwNDA3MTA5IC8qIExpbmVXaWR0aC5oICovLAog
CQkJCUZGQUMzMEZEMTg0RkIxNDUwMDhDNEYxRSAvKiBUcmFpbGluZ09iamVjdHMuY3BwICovLApA
QCAtMzI3OTMsNyArMzI3NTUsNiBAQAogCQkJCUU0ODRBMzNFMjMwNTUzMjUwMDlBREU2QSAvKiBM
aW5lTGF5b3V0VHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDM0M0QyNTIzOTI3Nzkw
MDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFNDUxQzYyODIzOTI5M0VDMDA5OTMxOTAgLyogTGluZUxheW91dFRyYXZlcnNhbERp
c3BsYXlSdW5QYXRoLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDM0M0QyMzIzOTI3Nzg0MDBFQkJC
NjYgLyogTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZGREJDMDQ3MTgzRDI3QjcwMDQwNzEwOSAvKiBMaW5lV2lkdGguaCBpbiBIZWFkZXJzICovLAog
CQkJCUNCQTlEQzBCMURGNDRERjQwMDA1Njc1QyAvKiBMaW5rSGVhZGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTQzQjI2MzFEREQxNTIwMDAxNEZBQzYgLyogTGlua0ljb24uaCBpbiBIZWFkZXJz
ICovLApAQCAtMzM3OTIsMTMgKzMzNzUzLDYgQEAKIAkJCQk5MzMwOUVBMzA5OUVCNzhDMDA1NkU1
ODEgLyogU2hhcmVkVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCURGMTlFMkFDMjQ3NzJCQzEw
MDdCREFDQiAvKiBTaG91bGRSZWxheFRoaXJkUGFydHlDb29raWVCbG9ja2luZy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODM2MkU4QzEyMENFRjlDQjAwMjQ1ODg2IC8qIFNob3VsZFRyZWF0QXNDb250
aW51aW5nTG9hZC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQ4OTQ0QTMxODBCNTdEODAwRjE2NUQ4
IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTExRTA2N0VFMUU2MjQ2
RTUwMDE2MkQxNiAvKiBTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuaCBpbiBIZWFkZXJzICovLAot
CQkJCTU4NUQ2RTA0MUExQTc5MkUwMEZBNEYxMiAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRl
bnRzLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNEU5QjExRDE4MTQ1NjlDMDAzQUNDREYgLyogU2lt
cGxlTGluZUxheW91dEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTEyQjM0RDUxRTYw
Qjk4MzAwQkIzMTBBIC8qIFNpbXBsZUxpbmVMYXlvdXRQYWdpbmF0aW9uLmggaW4gSGVhZGVycyAq
LywKLQkJCQlFNEU5QjExOTE4MTA5MTZGMDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dFJlc29s
dmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk1ODJDQjA1MzFBNzhBMTRCMDBBRkZDQzQgLyogU2lt
cGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
MzE2RERGQjI0MEM2NEI0MDA5MzQwQUEgLyogU2ltcGxlUmFuZ2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCUM1QTFFQTdEMTUyQkNGMDgwMDREMDBCNiAvKiBTaW1wbGlmeU1hcmt1cENvbW1hbmQuaCBp
biBIZWFkZXJzICovLAogCQkJCTU3MkE3RjIxMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRD
bGljay5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYTG9nZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhMb2dn
ZXIuY3BwCmluZGV4IDY4MzliNjMxZjFhNS4uNGY1YzZiNWVjNTA3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYTG9nZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYTG9nZ2VyLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IkFYSXNvbGF0ZWRPYmplY3QuaCIKICNlbmRpZgogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIK
KyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oCmluZGV4IDdmMGY1
OTRmMTYxMi4uMjdjMzlkN2U5ZDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaApAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3Iu
aCIKICNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogCkBA
IC00MCw2ICs0MSwxMCBAQAogI2luY2x1ZGUgIkNPTVB0ci5oIgogI2VuZGlmCiAKKyNpZiBVU0Uo
QVRLKQorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKyNlbmRpZgorCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiBPQkpDX0NMQVNTIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyOwogdHlw
ZWRlZiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCBiNmEyN2Rk
ODc0YjIuLjVlNTgxNGQ3ZGY1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9y
LmNwcApAQCAtNTQsOSArNTQsNiBAQAogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGV4dEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgot
I2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXQuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0
RnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmgiCiAjaW5j
bHVkZSAiVGV4dEJvdW5kYXJpZXMuaCIKICNpbmNsdWRlICJUZXh0Q29udHJvbElubmVyRWxlbWVu
dHMuaCIKICNpbmNsdWRlICJUZXh0UGxhY2Vob2xkZXJFbGVtZW50LmgiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9WZXJpZmljYXRpb24uY3BwCmluZGV4IGI2MjkyOTA4M2ZhYy4uOTNlMDYxZjVmM2I1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcApAQCAtNzAsNDggKzcwLDYgQEAg
c3RhdGljIGJvb2wgYXJlRXNzZW50aWFsbHlFcXVhbChMYXlvdXRSZWN0IGEsIExheW91dFJlY3Qg
YikKICAgICAgICAgJiYgYXJlRXNzZW50aWFsbHlFcXVhbChhLmhlaWdodCgpLCBiLmhlaWdodCgp
KTsKIH0KIAotc3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0Y2hpbmdTaW1wbGVMaW5lSW5mb3JtYXRp
b25JZk5lZWRlZChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRT
dGF0ZSwgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBibG9ja0Zsb3csIGNvbnN0IENvbnRhaW5lckJv
eCYgaW5saW5lRm9ybWF0dGluZ1Jvb3QpCi17Ci0gICAgYXV0byogbGluZUxheW91dERhdGEgPSBi
bG9ja0Zsb3cuc2ltcGxlTGluZUxheW91dCgpOwotICAgIGlmICghbGluZUxheW91dERhdGEpIHsK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIGF1dG8mIGlubGluZUZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlLmVzdGFi
bGlzaGVkRm9ybWF0dGluZ1N0YXRlKGlubGluZUZvcm1hdHRpbmdSb290KTsKLSAgICBhdXRvJiBs
aW5lUnVucyA9IGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4oaW5saW5lRm9ybWF0dGlu
Z1N0YXRlKS5saW5lUnVucygpOwotCi0gICAgaWYgKGxpbmVSdW5zLnNpemUoKSAhPSBsaW5lTGF5
b3V0RGF0YS0+cnVuQ291bnQoKSkgewotICAgICAgICBzdHJlYW0gPDwgIk1pc21hdGNoaW5nIG51
bWJlciBvZiBydW5zOiBzaW1wbGUgcnVucygiIDw8IGxpbmVMYXlvdXREYXRhLT5ydW5Db3VudCgp
IDw8ICIpIGlubGluZSBydW5zKCIgPDwgbGluZVJ1bnMuc2l6ZSgpIDw8ICIpIjsKLSAgICAgICAg
c3RyZWFtLm5leHRMaW5lKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGF1
dG8gbWlzbWF0Y2hlZCA9IGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaW5l
TGF5b3V0RGF0YS0+cnVuQ291bnQoKTsgKytpKSB7Ci0gICAgICAgIGF1dG8mIHNpbXBsZVJ1biA9
IGxpbmVMYXlvdXREYXRhLT5ydW5BdChpKTsKLSAgICAgICAgYXV0byYgbGluZVJ1biA9IGxpbmVS
dW5zW2ldOwotICAgICAgICBhdXRvIG1hdGNoaW5nUnVucyA9IGFyZUVzc2VudGlhbGx5RXF1YWwo
c2ltcGxlUnVuLmxvZ2ljYWxMZWZ0LCBsaW5lUnVuLmxvZ2ljYWxMZWZ0KCkpICYmIGFyZUVzc2Vu
dGlhbGx5RXF1YWwoc2ltcGxlUnVuLmxvZ2ljYWxSaWdodCwgbGluZVJ1bi5sb2dpY2FsUmlnaHQo
KSk7Ci0gICAgICAgIGlmIChtYXRjaGluZ1J1bnMgJiYgbGluZVJ1bi50ZXh0KCkpIHsKLSAgICAg
ICAgICAgIG1hdGNoaW5nUnVucyA9IHNpbXBsZVJ1bi5zdGFydCA9PSBsaW5lUnVuLnRleHQoKS0+
c3RhcnQoKSAmJiBzaW1wbGVSdW4uZW5kID09IGxpbmVSdW4udGV4dCgpLT5lbmQoKTsKLSAgICAg
ICAgICAgIC8vIFNMTCBoYW5kbGVzIHN0cmluZ3MgaW4gYSBtb3JlIGNvbmNhdGVuYXRlZCBmb3Jt
YXQgPGRpdj5mb288YnI+YmFyPC9kaXY+IC0+IGZvbyAtPiAwLDMgYmFyIC0+IDMsNiB2cy4gMCwz
IGFuZCAwLDMKLSAgICAgICAgICAgIGlmICghbWF0Y2hpbmdSdW5zKQotICAgICAgICAgICAgICAg
IG1hdGNoaW5nUnVucyA9IChzaW1wbGVSdW4uZW5kIC0gc2ltcGxlUnVuLnN0YXJ0KSA9PSAobGlu
ZVJ1bi50ZXh0KCktPmVuZCgpIC0gbGluZVJ1bi50ZXh0KCktPnN0YXJ0KCkpOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChtYXRjaGluZ1J1bnMpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICBzdHJlYW0gPDwgIk1pc21hdGNoaW5nOiBzaW1wbGUgcnVuKCIgPDwgc2ltcGxlUnVuLnN0
YXJ0IDw8ICIsICIgPDwgc2ltcGxlUnVuLmVuZCA8PCAiKSAoIiA8PCBzaW1wbGVSdW4ubG9naWNh
bExlZnQgPDwgIiwgIiA8PCBzaW1wbGVSdW4ubG9naWNhbFJpZ2h0IDw8ICIpIjsKLSAgICAgICAg
c3RyZWFtIDw8ICIgaW5saW5lIHJ1biI7Ci0gICAgICAgIGlmIChsaW5lUnVuLnRleHQoKSkKLSAg
ICAgICAgICAgIHN0cmVhbSA8PCAiICgiIDw8IGxpbmVSdW4udGV4dCgpLT5zdGFydCgpIDw8ICIs
ICIgPDwgbGluZVJ1bi50ZXh0KCktPmVuZCgpIDw8ICIpIjsKLSAgICAgICAgc3RyZWFtIDw8ICIg
KCIgPDwgbGluZVJ1bi5sb2dpY2FsTGVmdCgpIDw8ICIsICIgPDwgbGluZVJ1bi5sb2dpY2FsVG9w
KCkgPDwgIikgKCIgPDwgbGluZVJ1bi5sb2dpY2FsV2lkdGgoKSA8PCAieCIgPDwgbGluZVJ1bi5s
b2dpY2FsSGVpZ2h0KCkgPDwgIikiOwotICAgICAgICBzdHJlYW0ubmV4dExpbmUoKTsKLSAgICAg
ICAgbWlzbWF0Y2hlZCA9IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBtaXNtYXRjaGVkOwotfQot
CiBzdGF0aWMgYm9vbCBjaGVja0Zvck1hdGNoaW5nTm9uVGV4dFJ1bnMoY29uc3QgTGluZVJ1biYg
bGluZVJ1biwgY29uc3QgV2ViQ29yZTo6SW5saW5lQm94JiBpbmxpbmVCb3gpCiB7CiAgICAgcmV0
dXJuIGFyZUVzc2VudGlhbGx5RXF1YWwoaW5saW5lQm94LmxlZnQoKSwgbGluZVJ1bi5sb2dpY2Fs
TGVmdCgpKQpAQCAtMzU5LDcgKzMxNyw3IEBAIHN0YXRpYyBib29sIHZlcmlmeUFuZE91dHB1dFN1
YnRyZWUoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBMYXlvdXRTdGF0ZSYgY29udGV4CiAKICAg
ICAgICAgICAgIGF1dG8mIGJsb2NrRmxvdyA9IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKmNo
aWxkUmVuZGVyZXIpOwogICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1Jvb3QgPSBkb3duY2Fz
dDxDb250YWluZXJCb3g+KCpjaGlsZExheW91dEJveCk7Ci0gICAgICAgICAgICBtaXNtdGFjaGlu
Z0dlb21ldHJ5IHw9IGJsb2NrRmxvdy5saW5lTGF5b3V0UGF0aCgpID09IFJlbmRlckJsb2NrRmxv
dzo6U2ltcGxlTGluZXNQYXRoID8gb3V0cHV0TWlzbWF0Y2hpbmdTaW1wbGVMaW5lSW5mb3JtYXRp
b25JZk5lZWRlZChzdHJlYW0sIGNvbnRleHQsIGJsb2NrRmxvdywgZm9ybWF0dGluZ1Jvb3QpIDog
b3V0cHV0TWlzbWF0Y2hpbmdDb21wbGV4TGluZUluZm9ybWF0aW9uSWZOZWVkZWQoc3RyZWFtLCBj
b250ZXh0LCBibG9ja0Zsb3csIGZvcm1hdHRpbmdSb290KTsKKyAgICAgICAgICAgIG1pc210YWNo
aW5nR2VvbWV0cnkgfD0gb3V0cHV0TWlzbWF0Y2hpbmdDb21wbGV4TGluZUluZm9ybWF0aW9uSWZO
ZWVkZWQoc3RyZWFtLCBjb250ZXh0LCBibG9ja0Zsb3csIGZvcm1hdHRpbmdSb290KTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGF1dG8gbWlzbWF0Y2hpbmdTdWJ0cmVlR2VvbWV0cnkg
PSB2ZXJpZnlBbmRPdXRwdXRTdWJ0cmVlKHN0cmVhbSwgY29udGV4dCwgZG93bmNhc3Q8UmVuZGVy
Qm94PigqY2hpbGRSZW5kZXJlciksICpjaGlsZExheW91dEJveCk7CiAgICAgICAgICAgICBtaXNt
dGFjaGluZ0dlb21ldHJ5IHw9IG1pc21hdGNoaW5nU3VidHJlZUdlb21ldHJ5OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGlu
ZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50
ZWdyYXRpb25MaW5lTGF5b3V0LmNwcAppbmRleCBmMjk5ODdkMjQzNTUuLjZjNmQwNmRlMTczZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVn
cmF0aW9uTGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0
aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHAKQEAgLTQ4LDcgKzQ4LDYgQEAKICNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dC5oIgog
I2luY2x1ZGUgIlRleHREZWNvcmF0aW9uUGFpbnRlci5oIgogI2luY2x1ZGUgIlRleHRQYWludGVy
LmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlv
dXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVn
cmF0aW9uL0xheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5jcHAKaW5kZXggODYyYjQ4YzhhOTU3
Li44ZmNiNGVhOTRjYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3Jh
dGlvbi9MYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uY3BwCkBAIC0z
MCw4ICszMCw2IEBACiAKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlJlbmRl
ckJsb2NrRmxvdy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXQuaCIKLSNpbmNsdWRlICJT
aW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVz
cGFjZSBMYXlvdXRJbnRlZ3JhdGlvbiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvQ29tcGxleExpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Nv
bXBsZXhMaW5lTGF5b3V0LmNwcAppbmRleCBlNWNjOTkyNmE2ZGEuLmU3ZDFlMzRlODBmNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbXBsZXhMaW5lTGF5b3V0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29tcGxleExpbmVMYXlvdXQuY3BwCkBAIC0x
Njk3LDggKzE2OTcsNiBAQCB2b2lkIENvbXBsZXhMaW5lTGF5b3V0OjpsaW5rVG9FbmRMaW5lSWZO
ZWVkZWQoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSkKIAogdm9pZCBDb21wbGV4TGluZUxh
eW91dDo6bGF5b3V0TGluZUJveGVzKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYg
cmVwYWludExvZ2ljYWxUb3AsIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsQm90dG9tKQogewot
ICAgIEFTU0VSVCghbV9mbG93LnNpbXBsZUxpbmVMYXlvdXQoKSk7Ci0KICAgICBtX2Zsb3cuc2V0
TG9naWNhbEhlaWdodChtX2Zsb3cuYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpKTsKICAgICAKICAg
ICAvLyBMYXkgb3V0IG91ciBoeXBvdGhldGljYWwgZ3JpZCBsaW5lIGFzIHRob3VnaCBpdCBvY2N1
cnMgYXQgdGhlIHRvcCBvZiB0aGUgYmxvY2suCkBAIC0yMTI4LDggKzIxMjYsNiBAQCBib29sIENv
bXBsZXhMaW5lTGF5b3V0OjptYXRjaGVkRW5kTGluZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0
YXRlLCBjb25zdCBJbmxpbgogCiB2b2lkIENvbXBsZXhMaW5lTGF5b3V0OjphZGRPdmVyZmxvd0Zy
b21JbmxpbmVDaGlsZHJlbigpCiB7Ci0gICAgQVNTRVJUKCFtX2Zsb3cuc2ltcGxlTGluZUxheW91
dCgpKTsKLQogICAgIExheW91dFVuaXQgZW5kUGFkZGluZyA9IG1fZmxvdy5oYXNPdmVyZmxvd0Ns
aXAoKSA/IG1fZmxvdy5wYWRkaW5nRW5kKCkgOiAwX2x1OwogICAgIC8vIEZJWE1FOiBOZWVkIHRv
IGZpbmQgYW5vdGhlciB3YXkgdG8gZG8gdGhpcywgc2luY2Ugc2Nyb2xsYmFycyBjb3VsZCBzaG93
IHdoZW4gd2UgZG9uJ3Qgd2FudCB0aGVtIHRvLgogICAgIGlmICghZW5kUGFkZGluZykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKaW5kZXggYjQzMDdkNzk1
YzcxLi5jOTc2MjE1OGJjMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0Zsb3cuY3BwCkBAIC01NCw5ICs1NCw2IEBACiAjaW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxk
ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNp
bmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGlu
ZUxheW91dFBhZ2luYXRpb24uaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIu
aCIKICNpbmNsdWRlICJUZXh0QXV0b1NpemluZy5oIgogI2luY2x1ZGUgIlZlcnRpY2FsUG9zaXRp
b25DYWNoZS5oIgogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgpAQCAtNjY5LDI2ICs2NjYs
MTkgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dEJsb2NrQ2hpbGRyZW4oYm9vbCByZWxh
eW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiBtYXgKIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlv
dXRJbmxpbmVDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIHJlcGFp
bnRMb2dpY2FsVG9wLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbEJvdHRvbSkKIHsKICAgICBh
dXRvIGNvbXB1dGVMaW5lTGF5b3V0UGF0aCA9IFsmXSB7Ci0gICAgICAgIGJvb2wgaXNJbnRlZ3Jh
dGlvbkVuYWJsZWQgPSBmYWxzZTsKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoTGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6
OmlzRW5hYmxlZCgpKTsKICAgICAgICAgaWYgKExheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0
OjpjYW5Vc2VGb3IoKnRoaXMpKQogICAgICAgICAgICAgcmV0dXJuIExheW91dEZvcm1hdHRpbmdD
b250ZXh0UGF0aDsKLSAgICAgICAgaXNJbnRlZ3JhdGlvbkVuYWJsZWQgPSBMYXlvdXRJbnRlZ3Jh
dGlvbjo6TGluZUxheW91dDo6aXNFbmFibGVkKCk7CisjZWxzZQorI2Vycm9yCiAjZW5kaWYKLSAg
ICAgICAgaWYgKCFpc0ludGVncmF0aW9uRW5hYmxlZCAmJiBTaW1wbGVMaW5lTGF5b3V0OjpjYW5V
c2VGb3IoKnRoaXMpKQotICAgICAgICAgICAgcmV0dXJuIFNpbXBsZUxpbmVzUGF0aDsKLQogICAg
ICAgICByZXR1cm4gTGluZUJveGVzUGF0aDsKICAgICB9OwogCiAgICAgaWYgKGxpbmVMYXlvdXRQ
YXRoKCkgPT0gVW5kZXRlcm1pbmVkUGF0aCkKICAgICAgICAgc2V0TGluZUxheW91dFBhdGgoY29t
cHV0ZUxpbmVMYXlvdXRQYXRoKCkpOwogCi0gICAgaWYgKGxpbmVMYXlvdXRQYXRoKCkgPT0gU2lt
cGxlTGluZXNQYXRoKSB7Ci0gICAgICAgIGxheW91dFNpbXBsZUxpbmVzKHJlbGF5b3V0Q2hpbGRy
ZW4sIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbEJvdHRvbSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKICAg
ICBpZiAobGluZUxheW91dFBhdGgoKSA9PSBMYXlvdXRGb3JtYXR0aW5nQ29udGV4dFBhdGgpIHsK
ICAgICAgICAgbGF5b3V0TEZDTGluZXMocmVsYXlvdXRDaGlsZHJlbiwgcmVwYWludExvZ2ljYWxU
b3AsIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKQEAgLTIxMDgsOCArMjA5OCw2IEBAIHZvaWQgUmVu
ZGVyQmxvY2tGbG93OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3Qg
UmVuZGVyU3R5bGUqIG9sCiAgICAgICAgIGF1dG8gc2hvdWxkSW52YWxpZGF0ZUxpbmVMYXlvdXRQ
YXRoID0gWyZdIHsKICAgICAgICAgICAgIGlmIChzZWxmTmVlZHNMYXlvdXQoKSB8fCBjb21wbGV4
TGluZUxheW91dCgpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
aWYgKHNpbXBsZUxpbmVMYXlvdXQoKSAmJiAhU2ltcGxlTGluZUxheW91dDo6Y2FuVXNlRm9yQWZ0
ZXJTdHlsZUNoYW5nZSgqdGhpcywgZGlmZikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAgICAgICAgICAgICBpZiAo
bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCkgJiYgIUxheW91dEludGVncmF0aW9u
OjpMaW5lTGF5b3V0OjpjYW5Vc2VGb3JBZnRlclN0eWxlQ2hhbmdlKCp0aGlzLCBkaWZmKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI5ODksOSArMjk3Nyw2IEBAIGJvb2wgUmVu
ZGVyQmxvY2tGbG93OjpoaXRUZXN0SW5saW5lQ2hpbGRyZW4oY29uc3QgSGl0VGVzdFJlcXVlc3Qm
IHJlcXVlc3QsIEhpdFRlCiB7CiAgICAgQVNTRVJUKGNoaWxkcmVuSW5saW5lKCkpOwogCi0gICAg
aWYgKHNpbXBsZUxpbmVMYXlvdXQoKSkKLSAgICAgICAgcmV0dXJuIFNpbXBsZUxpbmVMYXlvdXQ6
OmhpdFRlc3RGbG93KCp0aGlzLCAqc2ltcGxlTGluZUxheW91dCgpLCByZXF1ZXN0LCByZXN1bHQs
IGxvY2F0aW9uSW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKTsK
LQogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogICAgIGlmIChsYXlvdXRG
b3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKSkKICAgICAgICAgcmV0dXJuIGxheW91dEZvcm1h
dHRpbmdDb250ZXh0TGluZUxheW91dCgpLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRp
b25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pOwpAQCAtMzAw
MiwxMiArMjk4Nyw2IEBAIGJvb2wgUmVuZGVyQmxvY2tGbG93OjpoaXRUZXN0SW5saW5lQ2hpbGRy
ZW4oY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlCiAKIHZvaWQgUmVuZGVyQmxv
Y2tGbG93OjphZGRPdmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbigpCiB7Ci0gICAgaWYgKGF1dG8g
c2ltcGxlTGluZUxheW91dCA9IHRoaXMtPnNpbXBsZUxpbmVMYXlvdXQoKSkgewotICAgICAgICBB
U1NFUlQoIWhhc092ZXJmbG93Q2xpcCgpKTsKLSAgICAgICAgU2ltcGxlTGluZUxheW91dDo6Y29s
bGVjdEZsb3dPdmVyZmxvdygqdGhpcywgKnNpbXBsZUxpbmVMYXlvdXQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAgICAg
aWYgKGxheW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dCgpKSB7CiAgICAgICAgIGxheW91
dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dCgpLT5jb2xsZWN0T3ZlcmZsb3coKnRoaXMpOwpA
QCAtMzA5NywxMSArMzA3Niw2IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjptYXJrTGluZXNEaXJ0
eUluQmxvY2tSYW5nZShMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIEZsb2F0cyBjdXJyZW50bHkgYWZmZWN0IHRoZSBjaG9pY2Ugb2YgbGF5
b3V0IHBhdGguCi0gICAgaWYgKHNpbXBsZUxpbmVMYXlvdXQoKSkgewotICAgICAgICBpbnZhbGlk
YXRlTGluZUxheW91dFBhdGgoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogI2lmIEVOQUJM
RShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogICAgIGlmIChsYXlvdXRGb3JtYXR0aW5nQ29u
dGV4dExpbmVMYXlvdXQoKSkgewogICAgICAgICBpbnZhbGlkYXRlTGluZUxheW91dFBhdGgoKTsK
QEAgLTMxMzgsOSArMzExMiw2IEBAIE9wdGlvbmFsPGludD4gUmVuZGVyQmxvY2tGbG93OjpmaXJz
dExpbmVCYXNlbGluZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBmbG9vclRvSW50KGxheW91dEZv
cm1hdHRpbmdDb250ZXh0TGluZUxheW91dCgpLT5maXJzdExpbmVCYXNlbGluZSgpKTsKICNlbmRp
ZgogCi0gICAgaWYgKHNpbXBsZUxpbmVMYXlvdXQoKSkKLSAgICAgICAgcmV0dXJuIHsgU2ltcGxl
TGluZUxheW91dDo6Y29tcHV0ZUZsb3dGaXJzdExpbmVCYXNlbGluZSgqdGhpcywgKnNpbXBsZUxp
bmVMYXlvdXQoKSkgfTsKLQogICAgIEFTU0VSVChmaXJzdFJvb3RCb3goKSk7CiAgICAgaWYgKHN0
eWxlKCkuaXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gZmlyc3RS
b290Qm94KCktPmxvZ2ljYWxUb3AoKSArIGZpcnN0TGluZVN0eWxlKCkuZm9udE1ldHJpY3MoKS5k
ZXNjZW50KGZpcnN0Um9vdEJveCgpLT5iYXNlbGluZVR5cGUoKSk7CkBAIC0zMTU0LDcgKzMxMjUs
NyBAQCBPcHRpb25hbDxpbnQ+IFJlbmRlckJsb2NrRmxvdzo6aW5saW5lQmxvY2tCYXNlbGluZShM
aW5lRGlyZWN0aW9uTW9kZSBsaW5lRGlyZWN0aQogCiAgICAgLy8gTm90ZSB0aGF0IGhlcmUgd2Ug
b25seSB0YWtlIHRoZSBsZWZ0IGFuZCBib3R0b20gaW50byBjb25zaWRlcmF0aW9uLiBPdXIgY2Fs
bGVyIHRha2VzIHRoZSByaWdodCBhbmQgdG9wIGludG8gY29uc2lkZXJhdGlvbi4KICAgICBmbG9h
dCBib3hIZWlnaHQgPSBsaW5lRGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lID8gaGVpZ2h0KCkg
KyBtX21hcmdpbkJveC5ib3R0b20oKSA6IHdpZHRoKCkgKyBtX21hcmdpbkJveC5sZWZ0KCk7Ci0g
ICAgZmxvYXQgbGFzdEJhc2VsaW5lOworICAgIGZsb2F0IGxhc3RCYXNlbGluZSA9IDA7CiAgICAg
aWYgKCFjaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAgIE9wdGlvbmFsPGludD4gaW5saW5lQmxv
Y2tCYXNlbGluZSA9IFJlbmRlckJsb2NrOjppbmxpbmVCbG9ja0Jhc2VsaW5lKGxpbmVEaXJlY3Rp
b24pOwogICAgICAgICBpZiAoIWlubGluZUJsb2NrQmFzZWxpbmUpCkBAIC0zMTcwLDE5ICszMTQx
LDE3IEBAIE9wdGlvbmFsPGludD4gUmVuZGVyQmxvY2tGbG93OjppbmxpbmVCbG9ja0Jhc2VsaW5l
KExpbmVEaXJlY3Rpb25Nb2RlIGxpbmVEaXJlY3RpCiAgICAgICAgICAgICAgICAgKyAobGluZURp
cmVjdGlvbiA9PSBIb3Jpem9udGFsTGluZSA/IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpIDog
Ym9yZGVyUmlnaHQoKSArIHBhZGRpbmdSaWdodCgpKSk7CiAgICAgICAgIH0KIAotICAgICAgICBp
ZiAoc2ltcGxlTGluZUxheW91dCgpKQotICAgICAgICAgICAgbGFzdEJhc2VsaW5lID0gU2ltcGxl
TGluZUxheW91dDo6Y29tcHV0ZUZsb3dMYXN0TGluZUJhc2VsaW5lKCp0aGlzLCAqc2ltcGxlTGlu
ZUxheW91dCgpKTsKLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLSAgICAg
ICAgZWxzZSBpZiAobGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCkpCi0gICAgICAg
ICAgICBsYXN0QmFzZWxpbmUgPSBmbG9vclRvSW50KGxheW91dEZvcm1hdHRpbmdDb250ZXh0TGlu
ZUxheW91dCgpLT5sYXN0TGluZUJhc2VsaW5lKCkpOwotI2VuZGlmCi0gICAgICAgIGVsc2Ugewor
ICAgICAgICBpZiAoY29tcGxleExpbmVMYXlvdXQoKSkgewogICAgICAgICAgICAgYm9vbCBpc0Zp
cnN0TGluZSA9IGxhc3RSb290Qm94KCkgPT0gZmlyc3RSb290Qm94KCk7CiAgICAgICAgICAgICBj
b25zdCBhdXRvJiBzdHlsZSA9IGlzRmlyc3RMaW5lID8gZmlyc3RMaW5lU3R5bGUoKSA6IHRoaXMt
PnN0eWxlKCk7CiAgICAgICAgICAgICAvLyBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSW5CbG9j
a0RpcmVjdGlvbiB3aWxsIGZsaXAgbGluZXMgaW4gY2FzZSBvZiB2ZXJ0aWNhbExSIG1vZGUsIHNv
IHdlIGNhbiBhc3N1bWUgdmVydGljYWxSTCBmb3Igbm93LgogICAgICAgICAgICAgbGFzdEJhc2Vs
aW5lID0gc3R5bGUuZm9udE1ldHJpY3MoKS5hc2NlbnQobGFzdFJvb3RCb3goKS0+YmFzZWxpbmVU
eXBlKCkpCiAgICAgICAgICAgICAgICAgKyAoc3R5bGUuaXNGbGlwcGVkTGluZXNXcml0aW5nTW9k
ZSgpID8gbG9naWNhbEhlaWdodCgpIC0gbGFzdFJvb3RCb3goKS0+bG9naWNhbEJvdHRvbSgpIDog
bGFzdFJvb3RCb3goKS0+bG9naWNhbFRvcCgpKTsKICAgICAgICAgfQorI2lmIEVOQUJMRShMQVlP
VVRfRk9STUFUVElOR19DT05URVhUKQorICAgICAgICBlbHNlIGlmIChsYXlvdXRGb3JtYXR0aW5n
Q29udGV4dExpbmVMYXlvdXQoKSkKKyAgICAgICAgICAgIGxhc3RCYXNlbGluZSA9IGZsb29yVG9J
bnQobGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCktPmxhc3RMaW5lQmFzZWxpbmUo
KSk7CisjZW5kaWYKICAgICB9CiAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBDU1Mgc3BlYyBodHRw
Oi8vd3d3LnczLm9yZy9UUi9DU1MyMS92aXN1ZGV0Lmh0bWwsIHdlIHNob3VsZG4ndCBiZSBwZXJm
b3JtaW5nIHRoaXMgbWluLCBidXQgc2hvdWxkCiAgICAgLy8gaW5zdGVhZCBiZSByZXR1cm5pbmcg
Ym94SGVpZ2h0IGRpcmVjdGx5LiBIb3dldmVyLCB3ZSBmZWVsIHRoYXQgYSBtaW4gaGVyZSBpcyBi
ZXR0ZXIgYmVoYXZpb3IgKGFuZCBpcyBjb25zaXN0ZW50CkBAIC0zMjAwLDggKzMxNjksNiBAQCB2
b2lkIFJlbmRlckJsb2NrRmxvdzo6c2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUgc3Rh
dGUpCiBHYXBSZWN0cyBSZW5kZXJCbG9ja0Zsb3c6OmlubGluZVNlbGVjdGlvbkdhcHMoUmVuZGVy
QmxvY2smIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9z
aXRpb24sIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCiAgICAgTGF5b3V0
VW5pdCYgbGFzdExvZ2ljYWxUb3AsIExheW91dFVuaXQmIGxhc3RMb2dpY2FsTGVmdCwgTGF5b3V0
VW5pdCYgbGFzdExvZ2ljYWxSaWdodCwgY29uc3QgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hl
cyYgY2FjaGUsIGNvbnN0IFBhaW50SW5mbyogcGFpbnRJbmZvKQogewotICAgIEFTU0VSVCghc2lt
cGxlTGluZUxheW91dCgpKTsKLQogICAgIEdhcFJlY3RzIHJlc3VsdDsKIAogICAgIGJvb2wgY29u
dGFpbnNTdGFydCA9IHNlbGVjdGlvblN0YXRlKCkgPT0gSGlnaGxpZ2h0U3RhdGU6OlN0YXJ0IHx8
IHNlbGVjdGlvblN0YXRlKCkgPT0gSGlnaGxpZ2h0U3RhdGU6OkJvdGg7CkBAIC0zMzE3LDkgKzMy
ODQsNiBAQCBpbnQgUmVuZGVyQmxvY2tGbG93OjpsaW5lQ291bnQoKSBjb25zdAogICAgICAgICBp
ZiAobGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCkpCiAgICAgICAgICAgICByZXR1
cm4gbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0KCktPmxpbmVDb3VudCgpOwogI2Vu
ZGlmCi0gICAgICAgIGlmIChzaW1wbGVMaW5lTGF5b3V0KCkpCi0gICAgICAgICAgICByZXR1cm4g
c2ltcGxlTGluZUxheW91dCgpLT5saW5lQ291bnQoKTsKLQogICAgICAgICBpZiAoY29tcGxleExp
bmVMYXlvdXQoKSkKICAgICAgICAgICAgIHJldHVybiBjb21wbGV4TGluZUxheW91dCgpLT5saW5l
Q291bnQoKTsKIApAQCAtMzU3NSwxMCArMzUzOSw4IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJC
bG9ja0Zsb3c6OnBvc2l0aW9uRm9yUG9pbnRXaXRoSW5saW5lQ2hpbGRyZW4oY29uc3QgTGF5b3V0
CiAKIFBvc2l0aW9uIFJlbmRlckJsb2NrRmxvdzo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlv
dXRQb2ludCYgcG9pbnQpCiB7Ci0gICAgLy8gRklYTUU6IEl0IHN1cHBvcnRzIHNpbmdsZSB0ZXh0
IGNoaWxkIG9ubHkgKHdoaWNoIGlzIHRoZSBtYWpvcml0eSBvZiBzaW1wbGUgbGluZSBsYXlvdXQg
c3VwcG9ydGVkIGNvbnRlbnQgYXQgdGhpcyBwb2ludCkuCi0gICAgaWYgKCFzaW1wbGVMaW5lTGF5
b3V0KCkgfHwgZmlyc3RDaGlsZCgpICE9IGxhc3RDaGlsZCgpIHx8ICFpczxSZW5kZXJUZXh0Pihm
aXJzdENoaWxkKCkpKQotICAgICAgICByZXR1cm4gcG9zaXRpb25Gb3JQb2ludChwb2ludCwgbnVs
bHB0cikuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGV4dD4o
KmZpcnN0Q2hpbGQoKSkucG9zaXRpb25Gb3JQb2ludChwb2ludCk7CisgICAgLy8gRklYTUU6IFRo
aXMgZm9yY2VzIENvbXBsZXggTGluZSBMYXlvdXQuCisgICAgcmV0dXJuIHBvc2l0aW9uRm9yUG9p
bnQocG9pbnQsIG51bGxwdHIpLmRlZXBFcXVpdmFsZW50KCk7CiB9CiAKIFZpc2libGVQb3NpdGlv
biBSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBv
aW50LCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciopCkBAIC0zNjA5LDExICszNTcxLDYg
QEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnBhaW50SW5saW5lQ2hpbGRyZW4oUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW4KICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChhdXRv
IHNpbXBsZUxpbmVMYXlvdXQgPSB0aGlzLT5zaW1wbGVMaW5lTGF5b3V0KCkpIHsKLSAgICAgICAg
U2ltcGxlTGluZUxheW91dDo6cGFpbnRGbG93KCp0aGlzLCAqc2ltcGxlTGluZUxheW91dCwgcGFp
bnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAo
Y29tcGxleExpbmVMYXlvdXQoKSkKICAgICAgICAgY29tcGxleExpbmVMYXlvdXQoKS0+bGluZUJv
eGVzKCkucGFpbnQodGhpcywgcGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiB9CkBAIC0zNjcxLDgg
KzM2MjgsNiBAQCBib29sIFJlbmRlckJsb2NrRmxvdzo6aGFzTGluZXMoKSBjb25zdAogICAgIGlm
IChsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKSkKICAgICAgICAgcmV0dXJuIGxh
eW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dCgpLT5saW5lQ291bnQoKTsKICNlbmRpZgot
ICAgIGlmIChzaW1wbGVMaW5lTGF5b3V0KCkpCi0gICAgICAgIHJldHVybiBzaW1wbGVMaW5lTGF5
b3V0KCktPmxpbmVDb3VudCgpOwogCiAgICAgcmV0dXJuIGNvbXBsZXhMaW5lTGF5b3V0KCkgJiYg
Y29tcGxleExpbmVMYXlvdXQoKS0+bGluZUJveGVzKCkuZmlyc3RMaW5lQm94KCk7CiB9CkBAIC0z
NjgyLDE1ICszNjM3LDExIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjppbnZhbGlkYXRlTGluZUxh
eW91dFBhdGgoKQogICAgIHN3aXRjaCAobGluZUxheW91dFBhdGgoKSkgewogICAgIGNhc2UgVW5k
ZXRlcm1pbmVkUGF0aDoKICAgICBjYXNlIEZvcmNlTGluZUJveGVzUGF0aDoKLSAgICAgICAgQVNT
RVJUKCFzaW1wbGVMaW5lTGF5b3V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBMaW5l
Qm94ZXNQYXRoOgotICAgICAgICBBU1NFUlQoIXNpbXBsZUxpbmVMYXlvdXQoKSk7CiAgICAgICAg
IHNldExpbmVMYXlvdXRQYXRoKFVuZGV0ZXJtaW5lZFBhdGgpOwogICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBMYXlvdXRGb3JtYXR0aW5nQ29udGV4dFBhdGg6IC8vIEZJWE1FOiBOb3QgYWxsIGNs
aWVudHMgb2YgaW52YWxpZGF0ZUxpbmVMYXlvdXRQYXRoKCkgYWN0dWFsbHkgbmVlZCB0byB3aXBl
IHRoZSBsYXlvdXQuCi0gICAgY2FzZSBTaW1wbGVMaW5lc1BhdGg6Ci0gICAgICAgIC8vIFRoZSBz
aW1wbGUgbGluZSBsYXlvdXQgbWF5IGhhdmUgYmVjb21lIGludmFsaWQuCiAgICAgICAgIG1fbGlu
ZUxheW91dCA9IFdURjo6TW9ub3N0YXRlKCk7CiAgICAgICAgIHNldExpbmVMYXlvdXRQYXRoKFVu
ZGV0ZXJtaW5lZFBhdGgpOwogICAgICAgICBpZiAobmVlZHNMYXlvdXQoKSkKQEAgLTM3MDIsMzIg
KzM2NTMsNiBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6aW52YWxpZGF0ZUxpbmVMYXlvdXRQYXRo
KCkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9ja0Zsb3c6
OmxheW91dFNpbXBsZUxpbmVzKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgcmVw
YWludExvZ2ljYWxUb3AsIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsQm90dG9tKQotewotICAg
IGJvb2wgbmVlZHNMYXlvdXQgPSBzZWxmTmVlZHNMYXlvdXQoKSB8fCByZWxheW91dENoaWxkcmVu
IHx8ICFzaW1wbGVMaW5lTGF5b3V0KCk7Ci0gICAgaWYgKG5lZWRzTGF5b3V0KQotICAgICAgICBt
X2xpbmVMYXlvdXQgPSBTaW1wbGVMaW5lTGF5b3V0OjpjcmVhdGUoKnRoaXMpOwotCi0gICAgYXV0
byYgc2ltcGxlTGluZUxheW91dCA9ICp0aGlzLT5zaW1wbGVMaW5lTGF5b3V0KCk7Ci0KLSAgICBp
ZiAodmlldygpLmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5sYXlvdXRTdGF0ZSgpICYmIHZp
ZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkubGF5b3V0U3RhdGUoKS0+aXNQYWdpbmF0
ZWQoKSkgewotICAgICAgICBzaW1wbGVMaW5lTGF5b3V0LnNldElzUGFnaW5hdGVkKCk7Ci0gICAg
ICAgIFNpbXBsZUxpbmVMYXlvdXQ6OmFkanVzdExpbmVQb3NpdGlvbnNGb3JQYWdpbmF0aW9uKHNp
bXBsZUxpbmVMYXlvdXQsICp0aGlzKTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIHJlbmRlcmVy
IDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0PigqdGhpcykpIHsKLSAgICAgICAgaWYgKGlz
PFJlbmRlclRleHQ+KHJlbmRlcmVyKSkKLSAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlclRleHQ+
KHJlbmRlcmVyKS5kZWxldGVMaW5lQm94ZXMoKTsKLSAgICAgICAgcmVuZGVyZXIuY2xlYXJOZWVk
c0xheW91dCgpOwotICAgIH0KLQotICAgIExheW91dFVuaXQgbGluZUxheW91dEhlaWdodCA9IFNp
bXBsZUxpbmVMYXlvdXQ6OmNvbXB1dGVGbG93SGVpZ2h0KCp0aGlzLCBzaW1wbGVMaW5lTGF5b3V0
KTsKLSAgICBMYXlvdXRVbml0IGxpbmVMYXlvdXRUb3AgPSBib3JkZXJBbmRQYWRkaW5nQmVmb3Jl
KCk7Ci0gICAgcmVwYWludExvZ2ljYWxUb3AgPSBsaW5lTGF5b3V0VG9wOwotICAgIHJlcGFpbnRM
b2dpY2FsQm90dG9tID0gbmVlZHNMYXlvdXQgPyByZXBhaW50TG9naWNhbFRvcCArIGxpbmVMYXlv
dXRIZWlnaHQgKyBib3JkZXJBbmRQYWRkaW5nQWZ0ZXIoKSA6IHJlcGFpbnRMb2dpY2FsVG9wOwot
ICAgIHNldExvZ2ljYWxIZWlnaHQobGluZUxheW91dFRvcCArIGxpbmVMYXlvdXRIZWlnaHQgKyBi
b3JkZXJBbmRQYWRkaW5nQWZ0ZXIoKSk7Ci19Ci0KICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJ
TkdfQ09OVEVYVCkKIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRMRkNMaW5lcyhib29sLCBM
YXlvdXRVbml0JiByZXBhaW50TG9naWNhbFRvcCwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxC
b3R0b20pCiB7CkBAIC0zNzY4LDExICszNjkzLDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmVu
c3VyZUxpbmVCb3hlcygpCiAgICAgaWYgKGNvbXBsZXhMaW5lTGF5b3V0KCkgfHwgIWhhc0xpbmVM
YXlvdXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBzaW1wbGVMaW5lTGF5b3V0ID0g
bWFrZVJlZlB0cih0aGlzLT5zaW1wbGVMaW5lTGF5b3V0KCkpOwotCiAgICAgYm9vbCBuZWVkc1Rv
UGFnaW5hdGVDb21wbGV4TGluZXMgPSBbJl0gewotICAgICAgICBpZiAoc2ltcGxlTGluZUxheW91
dCAmJiBzaW1wbGVMaW5lTGF5b3V0LT5pc1BhZ2luYXRlZCgpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAgICAgICAgIGlm
IChsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKSAmJiBsYXlvdXRGb3JtYXR0aW5n
Q29udGV4dExpbmVMYXlvdXQoKS0+aXNQYWdpbmF0ZWQoKSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtMzc4MiwxMyArMzcwMyw2IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjplbnN1cmVM
aW5lQm94ZXMoKQogCiAgICAgbV9saW5lTGF5b3V0ID0gbWFrZVVuaXF1ZTxDb21wbGV4TGluZUxh
eW91dD4oKnRoaXMpOwogCi0gICAgaWYgKHNpbXBsZUxpbmVMYXlvdXQpIHsKLSAgICAgICAgaWYg
KFNpbXBsZUxpbmVMYXlvdXQ6OmNhblVzZUZvckxpbmVCb3hUcmVlKCp0aGlzLCAqc2ltcGxlTGlu
ZUxheW91dCkpIHsKLSAgICAgICAgICAgIFNpbXBsZUxpbmVMYXlvdXQ6OmdlbmVyYXRlTGluZUJv
eFRyZWUoKnRoaXMsICpzaW1wbGVMaW5lTGF5b3V0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLQogICAgIGF1dG8mIGNvbXBsZXhMaW5lTGF5b3V0ID0gKnRoaXMtPmNv
bXBsZXhMaW5lTGF5b3V0KCk7CiAKICNpZiBBU1NFUlRfRU5BQkxFRApAQCAtMzgyMiw5ICszNzM2
LDYgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6Om91dHB1dExpbmVUcmVlQW5kTWFyayhXVEY6OlRl
eHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgSW5saW4KIHsKICAgICBmb3IgKGNvbnN0IFJvb3RJbmxp
bmVCb3gqIHJvb3QgPSBmaXJzdFJvb3RCb3goKTsgcm9vdDsgcm9vdCA9IHJvb3QtPm5leHRSb290
Qm94KCkpCiAgICAgICAgIHJvb3QtPm91dHB1dExpbmVUcmVlQW5kTWFyayhzdHJlYW0sIG1hcmtl
ZEJveCwgZGVwdGgpOwotCi0gICAgaWYgKGF1dG8gc2ltcGxlTGluZUxheW91dCA9IHRoaXMtPnNp
bXBsZUxpbmVMYXlvdXQoKSkKLSAgICAgICAgU2ltcGxlTGluZUxheW91dDo6b3V0cHV0TGluZUxh
eW91dEZvckZsb3coc3RyZWFtLCAqdGhpcywgKnNpbXBsZUxpbmVMYXlvdXQsIGRlcHRoKTsKIH0K
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tGbG93LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKaW5k
ZXggYTIxMjA3M2YwZDFhLi45YWZhOWU5YWNiZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tGbG93LmgKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJMaW5lV2lk
dGguaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCb3hM
aXN0LmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dC5oIgogI2luY2x1ZGUgIlRyYWlsaW5n
T2JqZWN0cy5oIgogI2luY2x1ZGUgPG1lbW9yeT4KIApAQCAtMzQ0LDcgKzM0Myw3IEBAIHB1Ymxp
YzoKICAgICBib29sIGhhc0xpbmVzKCkgY29uc3Q7CiAgICAgdm9pZCBpbnZhbGlkYXRlTGluZUxh
eW91dFBhdGgoKSBmaW5hbDsKIAotICAgIGVudW0gTGluZUxheW91dFBhdGggeyBVbmRldGVybWlu
ZWRQYXRoID0gMCwgU2ltcGxlTGluZXNQYXRoLCBMaW5lQm94ZXNQYXRoLCBMYXlvdXRGb3JtYXR0
aW5nQ29udGV4dFBhdGgsIEZvcmNlTGluZUJveGVzUGF0aCB9OworICAgIGVudW0gTGluZUxheW91
dFBhdGggeyBVbmRldGVybWluZWRQYXRoID0gMCwgTGluZUJveGVzUGF0aCwgTGF5b3V0Rm9ybWF0
dGluZ0NvbnRleHRQYXRoLCBGb3JjZUxpbmVCb3hlc1BhdGggfTsKICAgICBMaW5lTGF5b3V0UGF0
aCBsaW5lTGF5b3V0UGF0aCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PExpbmVMYXlvdXRQ
YXRoPihyZW5kZXJCbG9ja0Zsb3dMaW5lTGF5b3V0UGF0aCgpKTsgfQogICAgIHZvaWQgc2V0TGlu
ZUxheW91dFBhdGgoTGluZUxheW91dFBhdGggcGF0aCkgeyBzZXRSZW5kZXJCbG9ja0Zsb3dMaW5l
TGF5b3V0UGF0aChwYXRoKTsgfQogCkBAIC0zNTksOCArMzU4LDYgQEAgcHVibGljOgogCiAgICAg
Ym9vbCBjb250YWluc05vblplcm9CaWRpTGV2ZWwoKSBjb25zdDsKIAotICAgIGNvbnN0IFNpbXBs
ZUxpbmVMYXlvdXQ6OkxheW91dCogc2ltcGxlTGluZUxheW91dCgpIGNvbnN0OwotICAgIFNpbXBs
ZUxpbmVMYXlvdXQ6OkxheW91dCogc2ltcGxlTGluZUxheW91dCgpOwogICAgIGNvbnN0IENvbXBs
ZXhMaW5lTGF5b3V0KiBjb21wbGV4TGluZUxheW91dCgpIGNvbnN0OwogICAgIENvbXBsZXhMaW5l
TGF5b3V0KiBjb21wbGV4TGluZUxheW91dCgpOwogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElO
R19DT05URVhUKQpAQCAtNTQzLDExICs1NDAsOCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAg
Ym9vbCBoYXNMaW5lTGF5b3V0KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNTaW1wbGVMaW5lTGF5b3V0
KCkgY29uc3Q7CiAgICAgYm9vbCBoYXNDb21wbGV4TGluZUxheW91dCgpIGNvbnN0OwogCi0gICAg
dm9pZCBsYXlvdXRTaW1wbGVMaW5lcyhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQm
IHJlcGFpbnRMb2dpY2FsVG9wLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbEJvdHRvbSk7Ci0K
ICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKICAgICBib29sIGhhc0xheW91
dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dCgpIGNvbnN0OwogICAgIHZvaWQgbGF5b3V0TEZD
TGluZXMoYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbFRv
cCwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxCb3R0b20pOwpAQCAtNTkyLDcgKzU4Niw2IEBA
IHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgVmFyaWFudDwKICAgICAgICAgV1RGOjpNb25vc3Rh
dGUsCi0gICAgICAgIFJlZjxTaW1wbGVMaW5lTGF5b3V0OjpMYXlvdXQ+LAogI2lmIEVOQUJMRShM
QVlPVVRfRk9STUFUVElOR19DT05URVhUKQogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF5b3V0
SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ+LAogI2VuZGlmCkBAIC02MjQsMjEgKzYxNyw2IEBAIGlu
bGluZSBDb21wbGV4TGluZUxheW91dCogUmVuZGVyQmxvY2tGbG93Ojpjb21wbGV4TGluZUxheW91
dCgpCiAgICAgcmV0dXJuIGhhc0NvbXBsZXhMaW5lTGF5b3V0KCkgPyBXVEY6OmdldDxzdGQ6OnVu
aXF1ZV9wdHI8Q29tcGxleExpbmVMYXlvdXQ+PihtX2xpbmVMYXlvdXQpLmdldCgpIDogbnVsbHB0
cjsKIH0KIAotaW5saW5lIGJvb2wgUmVuZGVyQmxvY2tGbG93OjpoYXNTaW1wbGVMaW5lTGF5b3V0
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8U2ltcGxl
TGluZUxheW91dDo6TGF5b3V0Pj4obV9saW5lTGF5b3V0KTsKLX0KLQotaW5saW5lIGNvbnN0IFNp
bXBsZUxpbmVMYXlvdXQ6OkxheW91dCogUmVuZGVyQmxvY2tGbG93OjpzaW1wbGVMaW5lTGF5b3V0
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFzU2ltcGxlTGluZUxheW91dCgpID8gV1RGOjpnZXQ8
UmVmPFNpbXBsZUxpbmVMYXlvdXQ6OkxheW91dD4+KG1fbGluZUxheW91dCkucHRyKCkgOiBudWxs
cHRyOwotfQotCi1pbmxpbmUgU2ltcGxlTGluZUxheW91dDo6TGF5b3V0KiBSZW5kZXJCbG9ja0Zs
b3c6OnNpbXBsZUxpbmVMYXlvdXQoKQotewotICAgIHJldHVybiBoYXNTaW1wbGVMaW5lTGF5b3V0
KCkgPyBXVEY6OmdldDxSZWY8U2ltcGxlTGluZUxheW91dDo6TGF5b3V0Pj4obV9saW5lTGF5b3V0
KS5wdHIoKSA6IG51bGxwdHI7Ci19Ci0KICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09O
VEVYVCkKIGlubGluZSBib29sIFJlbmRlckJsb2NrRmxvdzo6aGFzTGF5b3V0Rm9ybWF0dGluZ0Nv
bnRleHRMaW5lTGF5b3V0KCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGcmFnbWVudGVkRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRnJhZ21lbnRlZEZsb3cuY3BwCmluZGV4IDBkZDM4ZWMyZmQxMC4uNDJkYzE5MjA1
M2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRl
ZEZsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudGVk
Rmxvdy5jcHAKQEAgLTQ1MCw3ICs0NTAsNyBAQCB2b2lkIFJlbmRlckZyYWdtZW50ZWRGbG93Ojpy
ZW1vdmVSZW5kZXJCb3hGcmFnbWVudEluZm8oUmVuZGVyQm94JiBib3gpCiAKIHZvaWQgUmVuZGVy
RnJhZ21lbnRlZEZsb3c6OnJlbW92ZUxpbmVGcmFnbWVudEluZm8oY29uc3QgUmVuZGVyQmxvY2tG
bG93JiBibG9ja0Zsb3cpCiB7Ci0gICAgaWYgKCFtX2xpbmVUb0ZyYWdtZW50TWFwIHx8IGJsb2Nr
Rmxvdy5saW5lTGF5b3V0UGF0aCgpID09IFNpbXBsZUxpbmVzUGF0aCkKKyAgICBpZiAoIW1fbGlu
ZVRvRnJhZ21lbnRNYXApCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoYXV0byogY3VyciA9
IGJsb2NrRmxvdy5maXJzdFJvb3RCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRSb290Qm94
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKaW5kZXggZDQ2MTM2Njhh
MjcyLi44ZTBlYjI3OGNjNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAi
UmVuZGVyZWREb2N1bWVudE1hcmtlci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVk
ZSAiU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNs
dWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgi
CkBAIC00NDMsMjMgKzQ0MiwxMyBAQCBWZWN0b3I8RmxvYXRRdWFkPiBSZW5kZXJUZXh0OjphYnNv
bHV0ZVF1YWRzRm9yUmFuZ2UodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZAogICAgIEFTU0VS
VChzdGFydCA8PSBJTlRfTUFYKTsKICAgICBzdGFydCA9IHN0ZDo6bWluKHN0YXJ0LCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSU5UX01BWCkpOwogICAgIGVuZCA9IHN0ZDo6bWluKGVuZCwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KElOVF9NQVgpKTsKLSAgICBpZiAoc2ltcGxlTGluZUxheW91dCgpICYm
ICF1c2VTZWxlY3Rpb25IZWlnaHQpCi0gICAgICAgIHJldHVybiBjb2xsZWN0QWJzb2x1dGVRdWFk
c0ZvclJhbmdlKCp0aGlzLCBzdGFydCwgZW5kLCAqc2ltcGxlTGluZUxheW91dCgpLCBpZ25vcmVF
bXB0eVRleHRTZWxlY3Rpb25zLCB3YXNGaXhlZCk7CisKICAgICBjb25zdF9jYXN0PFJlbmRlclRl
eHQmPigqdGhpcykuZW5zdXJlTGluZUJveGVzKCk7CiAgICAgcmV0dXJuIG1fbGluZUJveGVzLmFi
c29sdXRlUXVhZHNGb3JSYW5nZSgqdGhpcywgc3RhcnQsIGVuZCwgdXNlU2VsZWN0aW9uSGVpZ2h0
LCBpZ25vcmVFbXB0eVRleHRTZWxlY3Rpb25zLCB3YXNGaXhlZCk7CiB9CiAKIFBvc2l0aW9uIFJl
bmRlclRleHQ6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQogewot
ICAgIGlmIChzaW1wbGVMaW5lTGF5b3V0KCkgJiYgcGFyZW50KCktPmZpcnN0Q2hpbGQoKSA9PSBw
YXJlbnQoKS0+bGFzdENoaWxkKCkpIHsKLSAgICAgICAgYXV0byBvZmZzZXQgPSBTaW1wbGVMaW5l
TGF5b3V0Ojp0ZXh0T2Zmc2V0Rm9yUG9pbnQocG9pbnQsICp0aGlzLCAqc2ltcGxlTGluZUxheW91
dCgpKTsKLSAgICAgICAgLy8gRGlkIG5vdCBmaW5kIGEgdmFsaWQgb2Zmc2V0LiBGYWxsIGJhY2sg
dG8gdGhlIG5vcm1hbCBsaW5lIGxheW91dCBiYXNlZCBQb3NpdGlvbi4KLSAgICAgICAgaWYgKG9m
ZnNldCA9PSB0ZXh0KCkubGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1cm4gcG9zaXRpb25Gb3JQ
b2ludChwb2ludCwgbnVsbHB0cikuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAgICAgYXV0byBwb3Np
dGlvbiA9IFBvc2l0aW9uKHRleHROb2RlKCksIG9mZnNldCk7Ci0gICAgICAgIEFTU0VSVChwb3Np
dGlvbiA9PSBwb3NpdGlvbkZvclBvaW50KHBvaW50LCBudWxscHRyKS5kZWVwRXF1aXZhbGVudCgp
KTsKLSAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwotICAgIH0KICAgICByZXR1cm4gcG9zaXRpb25G
b3JQb2ludChwb2ludCwgbnVsbHB0cikuZGVlcEVxdWl2YWxlbnQoKTsKIH0KIApAQCAtMTA3Niw3
ICsxMDY1LDcgQEAgdm9pZCBSZW5kZXJUZXh0OjpzZXRUZXh0V2l0aE9mZnNldChjb25zdCBTdHJp
bmcmIG5ld1RleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWcKICAgICBpbnQgZGVsdGEgPSBuZXdU
ZXh0Lmxlbmd0aCgpIC0gdGV4dCgpLmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIGVuZCA9IG9mZnNl
dCArIGxlbmd0aDsKIAotICAgIG1fbGluZXNEaXJ0eSA9IHNpbXBsZUxpbmVMYXlvdXQoKSB8fCBt
X2xpbmVCb3hlcy5kaXJ0eVJhbmdlKCp0aGlzLCBvZmZzZXQsIGVuZCwgZGVsdGEpOworICAgIG1f
bGluZXNEaXJ0eSA9IG1fbGluZUJveGVzLmRpcnR5UmFuZ2UoKnRoaXMsIG9mZnNldCwgZW5kLCBk
ZWx0YSk7CiAKICAgICBzZXRUZXh0KG5ld1RleHQsIGZvcmNlIHx8IG1fbGluZXNEaXJ0eSk7CiB9
CkBAIC0xMzAwLDEzICsxMjg5LDYgQEAgdm9pZCBSZW5kZXJUZXh0OjplbnN1cmVMaW5lQm94ZXMo
KQogICAgIGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKnBhcmVudCgpKS5lbnN1cmVMaW5lQm94
ZXMoKTsKIH0KIAotY29uc3QgU2ltcGxlTGluZUxheW91dDo6TGF5b3V0KiBSZW5kZXJUZXh0Ojpz
aW1wbGVMaW5lTGF5b3V0KCkgY29uc3QKLXsKLSAgICBpZiAoIWlzPFJlbmRlckJsb2NrRmxvdz4o
KnBhcmVudCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGRvd25jYXN0
PFJlbmRlckJsb2NrRmxvdz4oKnBhcmVudCgpKS5zaW1wbGVMaW5lTGF5b3V0KCk7Ci19Ci0KICNp
ZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIGNvbnN0IExheW91dEludGVncmF0
aW9uOjpMaW5lTGF5b3V0KiBSZW5kZXJUZXh0OjpsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVM
YXlvdXQoKSBjb25zdAogewpAQCAtMTMxOCw4ICsxMzAwLDYgQEAgY29uc3QgTGF5b3V0SW50ZWdy
YXRpb246OkxpbmVMYXlvdXQqIFJlbmRlclRleHQ6OmxheW91dEZvcm1hdHRpbmdDb250ZXh0TGlu
ZUxheW8KIAogYm9vbCBSZW5kZXJUZXh0Ojp1c2VzQ29tcGxleExpbmVMYXlvdXRQYXRoKCkgY29u
c3QKIHsKLSAgICBpZiAoc2ltcGxlTGluZUxheW91dCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
CiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAgICAgaWYgKGxheW91dEZv
cm1hdHRpbmdDb250ZXh0TGluZUxheW91dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
Mzg4LDcgKzEzNjgsNiBAQCBJbnRSZWN0IFJlbmRlclRleHQ6OmxpbmVzQm91bmRpbmdCb3goKSBj
b25zdAogCiBMYXlvdXRSZWN0IFJlbmRlclRleHQ6OmxpbmVzVmlzdWFsT3ZlcmZsb3dCb3VuZGlu
Z0JveCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFzaW1wbGVMaW5lTGF5b3V0KCkpOwogICAgIHJl
dHVybiBtX2xpbmVCb3hlcy52aXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94KCp0aGlzKTsKIH0KIApA
QCAtMTQxMSw3ICsxMzkwLDYgQEAgTGF5b3V0UmVjdCBSZW5kZXJUZXh0OjpjbGlwcGVkT3ZlcmZs
b3dSZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWMKIExheW91dFJlY3Qg
UmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzRm9yTGluZUJveGVzKGNvbnN0IFJlbmRl
ckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNv
bnRlbnQsIFZlY3RvcjxMYXlvdXRSZWN0PiogcmVjdHMpCiB7CiAgICAgQVNTRVJUKCFuZWVkc0xh
eW91dCgpKTsKLSAgICBBU1NFUlQoIXNpbXBsZUxpbmVMYXlvdXQoKSk7CiAKICAgICBpZiAoc2Vs
ZWN0aW9uU3RhdGUoKSA9PSBIaWdobGlnaHRTdGF0ZTo6Tm9uZSkKICAgICAgICAgcmV0dXJuIExh
eW91dFJlY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCmluZGV4IDAwNzkz
MjQ5NjJmNC4uMjkxZDE5NDdhNjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmgKQEAgLTI0LDcgKzI0LDYgQEAKIAogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKICNpbmNs
dWRlICJSZW5kZXJUZXh0TGluZUJveGVzLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dC5o
IgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmg+CkBAIC0xNjksNyArMTY4LDYgQEAgcHVibGlj
OgogI2VuZGlmCiAKICAgICB2b2lkIGVuc3VyZUxpbmVCb3hlcygpOwotICAgIGNvbnN0IFNpbXBs
ZUxpbmVMYXlvdXQ6OkxheW91dCogc2ltcGxlTGluZUxheW91dCgpIGNvbnN0OwogI2lmIEVOQUJM
RShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogICAgIGNvbnN0IExheW91dEludGVncmF0aW9u
OjpMaW5lTGF5b3V0KiBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQoKSBjb25zdDsK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjhlYWIzYWM1MDIuLjAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxMDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dC5oIgotCi0jaW5jbHVkZSAiRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAi
RnJhbWUuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudC5oIgotI2luY2x1ZGUgIkhpdFRlc3RMb2NhdGlvbi5oIgotI2lu
Y2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgotI2lu
Y2x1ZGUgIkh5cGhlbmF0aW9uLmgiCi0jaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgotI2luY2x1
ZGUgIkxpbmVXaWR0aC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQYWludElu
Zm8uaCIKLSNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJDaGls
ZEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRlZEZsb3cuaCIKLSNpbmNsdWRl
ICJSZW5kZXJMaW5lQnJlYWsuaCIKLSNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIK
LSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKLSNpbmNs
dWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNs
dWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMu
aCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiU2lt
cGxlTGluZUxheW91dFJlc29sdmVyLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dFRleHRG
cmFnbWVudEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiVGV4dC5oIgotI2luY2x1ZGUgIlRleHRQYWlu
dFN0eWxlLmgiCi0jaW5jbHVkZSA8cGFsL0xvZ2dpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewotCi0jaWZuZGVmIE5ERUJVRwotI2RlZmlu
ZSBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbiwgcmVhc29ucywgaW5jbHVk
ZVJlYXNvbnMpIHsgXAotICAgICAgICByZWFzb25zIHw9IHJlYXNvbjsgXAotICAgICAgICBpZiAo
aW5jbHVkZVJlYXNvbnMgPT0gSW5jbHVkZVJlYXNvbnM6OkZpcnN0KSBcCi0gICAgICAgICAgICBy
ZXR1cm4gcmVhc29uczsgXAotICAgIH0KLSNlbHNlCi0jZGVmaW5lIFNFVF9SRUFTT05fQU5EX1JF
VFVSTl9JRl9ORUVERUQocmVhc29uLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucykgeyBcCi0gICAg
ICAgIEFTU0VSVF9VTlVTRUQoaW5jbHVkZVJlYXNvbnMsIGluY2x1ZGVSZWFzb25zID09IEluY2x1
ZGVSZWFzb25zOjpGaXJzdCk7IFwKLSAgICAgICAgcmVhc29ucyB8PSByZWFzb247IFwKLSAgICAg
ICAgcmV0dXJuIHJlYXNvbnM7IFwKLSAgICB9Ci0jZW5kaWYKLQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gQXZvaWRhbmNlUmVhc29uRmxhZ3MgY2FuVXNlRm9yQ2hhcmFjdGVy
KENoYXJhY3RlclR5cGUsIGJvb2wgdGV4dElzSnVzdGlmaWVkLCBJbmNsdWRlUmVhc29ucyk7Ci0K
LXRlbXBsYXRlPD4gQXZvaWRhbmNlUmVhc29uRmxhZ3MgY2FuVXNlRm9yQ2hhcmFjdGVyKFVDaGFy
IGNoYXJhY3RlciwgYm9vbCB0ZXh0SXNKdXN0aWZpZWQsIEluY2x1ZGVSZWFzb25zIGluY2x1ZGVS
ZWFzb25zKQotewotICAgIEF2b2lkYW5jZVJlYXNvbkZsYWdzIHJlYXNvbnMgPSB7IH07Ci0gICAg
aWYgKHRleHRJc0p1c3RpZmllZCkgewotICAgICAgICAvLyBJbmNsdWRlIGNoYXJhY3RlcnMgdXAg
dG8gTGF0aW4gRXh0ZW5kZWQtQiBhbmQgc29tZSBwdW5jdHVhdGlvbiByYW5nZSB3aGVuIHRleHQg
aXMganVzdGlmaWVkLgotICAgICAgICBib29sIGlzTGF0aW5JbmNsdWRpbmdFeHRlbmRlZEIgPSBj
aGFyYWN0ZXIgPD0gMHgwMUZGOwotICAgICAgICBib29sIGlzUHVuY3R1YXRpb25SYW5nZSA9IGNo
YXJhY3RlciA+PSAweDIwMTAgJiYgY2hhcmFjdGVyIDw9IDB4MjAyNzsKLSAgICAgICAgaWYgKCEo
aXNMYXRpbkluY2x1ZGluZ0V4dGVuZGVkQiB8fCBpc1B1bmN0dWF0aW9uUmFuZ2UpKQotICAgICAg
ICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzSnVzdGlmaWVkTm9u
TGF0aW5UZXh0LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgfQotCi0gICAgaWYgKFUx
Nl9JU19TVVJST0dBVEUoY2hhcmFjdGVyKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJO
X0lGX05FRURFRChGbG93VGV4dEhhc1N1cnJvZ2F0ZVBhaXIsIHJlYXNvbnMsIGluY2x1ZGVSZWFz
b25zKTsKLSAgICAKLSAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24gPSB1X2NoYXJEaXJlY3Rp
b24oY2hhcmFjdGVyKTsKLSAgICBpZiAoZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVCB8fCBk
aXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUX0FSQUJJQwotICAgICAgICB8fCBkaXJlY3Rpb24g
PT0gVV9SSUdIVF9UT19MRUZUX0VNQkVERElORyB8fCBkaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19M
RUZUX09WRVJSSURFCi0gICAgICAgIHx8IGRpcmVjdGlvbiA9PSBVX0xFRlRfVE9fUklHSFRfRU1C
RURESU5HIHx8IGRpcmVjdGlvbiA9PSBVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREUKLSAgICAgICAg
fHwgZGlyZWN0aW9uID09IFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCB8fCBkaXJlY3Rpb24gPT0g
VV9CT1VOREFSWV9ORVVUUkFMKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVF
REVEKEZsb3dUZXh0SGFzRGlyZWN0aW9uQ2hhcmFjdGVyLCByZWFzb25zLCBpbmNsdWRlUmVhc29u
cyk7Ci0KLSAgICByZXR1cm4gcmVhc29uczsKLX0KLQotdGVtcGxhdGU8PiBBdm9pZGFuY2VSZWFz
b25GbGFncyBjYW5Vc2VGb3JDaGFyYWN0ZXIoTENoYXIsIGJvb2wsIEluY2x1ZGVSZWFzb25zKQot
ewotICAgIHJldHVybiB7IH07Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
Pgotc3RhdGljIEF2b2lkYW5jZVJlYXNvbkZsYWdzIGNhblVzZUZvclRleHQoY29uc3QgQ2hhcmFj
dGVyVHlwZSogdGV4dCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udENh
c2NhZGUsIE9wdGlvbmFsPGZsb2F0PiBsaW5lSGVpZ2h0Q29uc3RyYWludCwKLSAgICBib29sIHRl
eHRJc0p1c3RpZmllZCwgSW5jbHVkZVJlYXNvbnMgaW5jbHVkZVJlYXNvbnMpCi17Ci0gICAgQXZv
aWRhbmNlUmVhc29uRmxhZ3MgcmVhc29ucyA9IHsgfTsKLSAgICBhdXRvJiBwcmltYXJ5Rm9udCA9
IGZvbnRDYXNjYWRlLnByaW1hcnlGb250KCk7Ci0gICAgYXV0byYgZm9udE1ldHJpY3MgPSBwcmlt
YXJ5Rm9udC5mb250TWV0cmljcygpOwotICAgIGF1dG8gYXZhaWxhYmxlU3BhY2VGb3JHbHlwaEFz
Y2VudCA9IGZvbnRNZXRyaWNzLmFzY2VudCgpOwotICAgIGF1dG8gYXZhaWxhYmxlU3BhY2VGb3JH
bHlwaERlc2NlbnQgPSBmb250TWV0cmljcy5kZXNjZW50KCk7Ci0gICAgaWYgKGxpbmVIZWlnaHRD
b25zdHJhaW50KSB7Ci0gICAgICAgIGF1dG8gbGluZUhlaWdodFBhZGRpbmcgPSAqbGluZUhlaWdo
dENvbnN0cmFpbnQgLSBmb250TWV0cmljcy5oZWlnaHQoKTsKLSAgICAgICAgYXZhaWxhYmxlU3Bh
Y2VGb3JHbHlwaEFzY2VudCArPSBsaW5lSGVpZ2h0UGFkZGluZyAvIDI7Ci0gICAgICAgIGF2YWls
YWJsZVNwYWNlRm9yR2x5cGhEZXNjZW50ICs9IGxpbmVIZWlnaHRQYWRkaW5nIC8gMjsKLSAgICB9
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
YXV0byBjaGFyYWN0ZXIgPSB0ZXh0W2ldOwotICAgICAgICBpZiAoRm9udENhc2NhZGU6OnRyZWF0
QXNTcGFjZShjaGFyYWN0ZXIpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYg
KGNoYXJhY3RlciA9PSBzb2Z0SHlwaGVuKQotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVU
VVJOX0lGX05FRURFRChGbG93VGV4dEhhc1NvZnRIeXBoZW4sIHJlYXNvbnMsIGluY2x1ZGVSZWFz
b25zKTsKLQotICAgICAgICBhdXRvIGNoYXJhY3RlclJlYXNvbnMgPSBjYW5Vc2VGb3JDaGFyYWN0
ZXIoY2hhcmFjdGVyLCB0ZXh0SXNKdXN0aWZpZWQsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAg
aWYgKGNoYXJhY3RlclJlYXNvbnMgIT0gTm9SZWFzb24pCi0gICAgICAgICAgICBTRVRfUkVBU09O
X0FORF9SRVRVUk5fSUZfTkVFREVEKGNoYXJhY3RlclJlYXNvbnMsIHJlYXNvbnMsIGluY2x1ZGVS
ZWFzb25zKTsKLQotICAgICAgICBhdXRvIGdseXBoRGF0YSA9IGZvbnRDYXNjYWRlLmdseXBoRGF0
YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKTsKLSAgICAgICAgaWYgKCFnbHlwaERhdGEu
aXNWYWxpZCgpIHx8IGdseXBoRGF0YS5mb250ICE9ICZwcmltYXJ5Rm9udCkKLSAgICAgICAgICAg
IFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1ByaW1hcnlGb250SXNJbnN1ZmZp
Y2llbnQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLQotICAgICAgICBpZiAobGluZUhlaWdo
dENvbnN0cmFpbnQpIHsKLSAgICAgICAgICAgIGF1dG8gYm91bmRzID0gcHJpbWFyeUZvbnQuYm91
bmRzRm9yR2x5cGgoZ2x5cGhEYXRhLmdseXBoKTsKLSAgICAgICAgICAgIGlmIChjZWlsZigtYm91
bmRzLnkoKSkgPiBhdmFpbGFibGVTcGFjZUZvckdseXBoQXNjZW50IHx8IGNlaWxmKGJvdW5kcy5t
YXhZKCkpID4gYXZhaWxhYmxlU3BhY2VGb3JHbHlwaERlc2NlbnQpCi0gICAgICAgICAgICAgICAg
U0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93Rm9udEhhc092ZXJmbG93R2x5cGgs
IHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
cmVhc29uczsKLX0KLQotc3RhdGljIEF2b2lkYW5jZVJlYXNvbkZsYWdzIGNhblVzZUZvclRleHQo
U3RyaW5nVmlldyB0ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUsIE9wdGlvbmFs
PGZsb2F0PiBsaW5lSGVpZ2h0Q29uc3RyYWludCwgYm9vbCB0ZXh0SXNKdXN0aWZpZWQsIEluY2x1
ZGVSZWFzb25zIGluY2x1ZGVSZWFzb25zKQotewotICAgIGlmICh0ZXh0LmlzOEJpdCgpKQotICAg
ICAgICByZXR1cm4gY2FuVXNlRm9yVGV4dCh0ZXh0LmNoYXJhY3RlcnM4KCksIHRleHQubGVuZ3Ro
KCksIGZvbnRDYXNjYWRlLCBsaW5lSGVpZ2h0Q29uc3RyYWludCwgdGV4dElzSnVzdGlmaWVkLCBp
bmNsdWRlUmVhc29ucyk7Ci0gICAgcmV0dXJuIGNhblVzZUZvclRleHQodGV4dC5jaGFyYWN0ZXJz
MTYoKSwgdGV4dC5sZW5ndGgoKSwgZm9udENhc2NhZGUsIGxpbmVIZWlnaHRDb25zdHJhaW50LCB0
ZXh0SXNKdXN0aWZpZWQsIGluY2x1ZGVSZWFzb25zKTsKLX0KLQotc3RhdGljIEF2b2lkYW5jZVJl
YXNvbkZsYWdzIGNhblVzZUZvckZvbnRBbmRUZXh0KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxv
dywgSW5jbHVkZVJlYXNvbnMgaW5jbHVkZVJlYXNvbnMpCi17Ci0gICAgQXZvaWRhbmNlUmVhc29u
RmxhZ3MgcmVhc29ucyA9IHsgfTsKLSAgICAvLyBXZSBhc3N1bWUgdGhhdCBhbGwgbGluZXMgaGF2
ZSBtZXRyaWNzIGJhc2VkIHB1cmVseSBvbiB0aGUgcHJpbWFyeSBmb250LgotICAgIGNvbnN0IGF1
dG8mIHN0eWxlID0gZmxvdy5zdHlsZSgpOwotICAgIGF1dG8mIGZvbnRDYXNjYWRlID0gc3R5bGUu
Zm9udENhc2NhZGUoKTsKLSAgICBpZiAoZm9udENhc2NhZGUucHJpbWFyeUZvbnQoKS5pc0ludGVy
c3RpdGlhbCgpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJ
c01pc3NpbmdQcmltYXJ5Rm9udCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIE9wdGlv
bmFsPGZsb2F0PiBsaW5lSGVpZ2h0Q29uc3RyYWludDsKLSAgICBpZiAoc3R5bGUubGluZUJveENv
bnRhaW4oKS5jb250YWlucyhMaW5lQm94Q29udGFpbjo6R2x5cGhzKSkKLSAgICAgICAgbGluZUhl
aWdodENvbnN0cmFpbnQgPSBsaW5lSGVpZ2h0RnJvbUZsb3coZmxvdykudG9GbG9hdCgpOwotICAg
IGJvb2wgZmxvd0lzSnVzdGlmaWVkID0gc3R5bGUudGV4dEFsaWduKCkgPT0gVGV4dEFsaWduTW9k
ZTo6SnVzdGlmeTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHRleHRSZW5kZXJlciA6IGNoaWxkcmVu
T2ZUeXBlPFJlbmRlclRleHQ+KGZsb3cpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBEbyBub3QgcmV0
dXJuIHVudGlsIGFmdGVyIGNoZWNraW5nIGFsbCBjaGlsZHJlbi4KLSAgICAgICAgaWYgKHRleHRS
ZW5kZXJlci50ZXh0KCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVU
VVJOX0lGX05FRURFRChGbG93VGV4dElzRW1wdHksIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsK
LSAgICAgICAgaWYgKHRleHRSZW5kZXJlci5pc0NvbWJpbmVUZXh0KCkpCi0gICAgICAgICAgICBT
RVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dUZXh0SXNDb21iaW5lVGV4dCwgcmVh
c29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgICAgICBpZiAodGV4dFJlbmRlcmVyLmlzQ291bnRl
cigpKQotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93VGV4
dElzUmVuZGVyQ291bnRlciwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgICAgICBpZiAo
dGV4dFJlbmRlcmVyLmlzUXVvdGUoKSkKLSAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVS
Tl9JRl9ORUVERUQoRmxvd1RleHRJc1JlbmRlclF1b3RlLCByZWFzb25zLCBpbmNsdWRlUmVhc29u
cyk7Ci0gICAgICAgIGlmICh0ZXh0UmVuZGVyZXIuaXNUZXh0RnJhZ21lbnQoKSkKLSAgICAgICAg
ICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRJc1RleHRGcmFnbWVu
dCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgICAgICBpZiAodGV4dFJlbmRlcmVyLmlz
U1ZHSW5saW5lVGV4dCgpKQotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05F
RURFRChGbG93VGV4dElzU1ZHSW5saW5lVGV4dCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwot
ICAgICAgICBpZiAoIXRleHRSZW5kZXJlci5jYW5Vc2VTaW1wbGVGb250Q29kZVBhdGgoKSkgewot
ICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBjaGVjayB0aGUgY29kZSBwYXRoIGF0IHRoaXMgcG9p
bnQuIFdlIGFscmVhZHkga25vdyBpdCBjYW4ndCBiZSBzaW1wbGUuCi0gICAgICAgICAgICBTRVRf
UkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNDb21wbGV4Rm9udENvZGVQYXRoLCBy
ZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBU
ZXh0UnVuIHJ1bihTdHJpbmcodGV4dFJlbmRlcmVyLnRleHQoKSkpOwotICAgICAgICAgICAgcnVu
LnNldENoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aChmYWxzZSk7Ci0gICAgICAgICAgICBpZiAoc3R5
bGUuZm9udENhc2NhZGUoKS5jb2RlUGF0aChydW4pICE9IEZvbnRDYXNjYWRlOjpTaW1wbGUpCi0g
ICAgICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzQ29t
cGxleEZvbnRDb2RlUGF0aCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgICAgICB9Ci0K
LSAgICAgICAgYXV0byB0ZXh0UmVhc29ucyA9IGNhblVzZUZvclRleHQodGV4dFJlbmRlcmVyLnN0
cmluZ1ZpZXcoKSwgZm9udENhc2NhZGUsIGxpbmVIZWlnaHRDb25zdHJhaW50LCBmbG93SXNKdXN0
aWZpZWQsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgaWYgKHRleHRSZWFzb25zICE9IE5vUmVh
c29uKQotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRCh0ZXh0UmVh
c29ucywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIH0KLSAgICByZXR1cm4gcmVhc29u
czsKLX0KLQotc3RhdGljIEF2b2lkYW5jZVJlYXNvbkZsYWdzIGNhblVzZUZvclN0eWxlKGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgSW5jbHVkZVJlYXNvbnMgaW5jbHVkZVJlYXNvbnMpCi17Ci0g
ICAgQXZvaWRhbmNlUmVhc29uRmxhZ3MgcmVhc29ucyA9IHsgfTsKLSAgICBpZiAoc3R5bGUudGV4
dE92ZXJmbG93KCkgPT0gVGV4dE92ZXJmbG93OjpFbGxpcHNpcykKLSAgICAgICAgU0VUX1JFQVNP
Tl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzVGV4dE92ZXJmbG93LCByZWFzb25zLCBpbmNs
dWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLnRleHRVbmRlcmxpbmVQb3NpdGlvbigpICE9IFRl
eHRVbmRlcmxpbmVQb3NpdGlvbjo6QXV0byB8fCAhc3R5bGUudGV4dFVuZGVybGluZU9mZnNldCgp
LmlzQXV0bygpIHx8ICFzdHlsZS50ZXh0RGVjb3JhdGlvblRoaWNrbmVzcygpLmlzQXV0bygpKQot
ICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNVbnN1cHBvcnRl
ZFVuZGVybGluZURlY29yYXRpb24sIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAvLyBO
b24tdmlzaWJsZSBvdmVyZmxvdyBzaG91bGQgYmUgcHJldHR5IGVhc3kgdG8gc3VwcG9ydC4KLSAg
ICBpZiAoc3R5bGUub3ZlcmZsb3dYKCkgIT0gT3ZlcmZsb3c6OlZpc2libGUgfHwgc3R5bGUub3Zl
cmZsb3dZKCkgIT0gT3ZlcmZsb3c6OlZpc2libGUpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JF
VFVSTl9JRl9ORUVERUQoRmxvd0hhc092ZXJmbG93Tm90VmlzaWJsZSwgcmVhc29ucywgaW5jbHVk
ZVJlYXNvbnMpOwotICAgIGlmICghc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAg
ICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJc05vdExUUiwgcmVhc29u
cywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmICghKHN0eWxlLmxpbmVCb3hDb250YWluKCkuY29u
dGFpbnMoTGluZUJveENvbnRhaW46OkJsb2NrKSkpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JF
VFVSTl9JRl9ORUVERUQoRmxvd0hhc0xpbmVCb3hDb250YWluUHJvcGVydHksIHJlYXNvbnMsIGlu
Y2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoc3R5bGUud3JpdGluZ01vZGUoKSAhPSBXcml0aW5nTW9k
ZTo6VG9wVG9Cb3R0b20pCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQo
Rmxvd0lzTm90VG9wVG9Cb3R0b20sIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAo
c3R5bGUubGluZUJyZWFrKCkgIT0gTGluZUJyZWFrOjpBdXRvKQotICAgICAgICBTRVRfUkVBU09O
X0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNMaW5lQnJlYWssIHJlYXNvbnMsIGluY2x1ZGVS
ZWFzb25zKTsKLSAgICBpZiAoc3R5bGUudW5pY29kZUJpZGkoKSAhPSBVQk5vcm1hbCkKLSAgICAg
ICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzTm9uTm9ybWFsVW5pY29k
ZUJpRGksIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoc3R5bGUucnRsT3JkZXJp
bmcoKSAhPSBPcmRlcjo6TG9naWNhbCkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lG
X05FRURFRChGbG93SGFzUlRMT3JkZXJpbmcsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAg
ICBpZiAoc3R5bGUubGluZUFsaWduKCkgIT0gTGluZUFsaWduOjpOb25lKQotICAgICAgICBTRVRf
UkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNMaW5lQWxpZ25FZGdlcywgcmVhc29u
cywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmIChzdHlsZS5saW5lU25hcCgpICE9IExpbmVTbmFw
OjpOb25lKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNM
aW5lU25hcCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmIChzdHlsZS50ZXh0RW1w
aGFzaXNGaWxsKCkgIT0gVGV4dEVtcGhhc2lzRmlsbDo6RmlsbGVkIHx8IHN0eWxlLnRleHRFbXBo
YXNpc01hcmsoKSAhPSBUZXh0RW1waGFzaXNNYXJrOjpOb25lKQotICAgICAgICBTRVRfUkVBU09O
X0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNUZXh0RW1waGFzaXNGaWxsT3JNYXJrLCByZWFz
b25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLnRleHRTaGFkb3coKSkKLSAgICAg
ICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzVGV4dFNoYWRvdywgcmVh
c29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmIChzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1
ZG9JZDo6Rmlyc3RMaW5lKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURF
RChGbG93SGFzUHNldWRvRmlyc3RMaW5lLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAg
aWYgKHN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpGaXJzdExldHRlcikpCi0gICAgICAg
IFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1BzZXVkb0ZpcnN0TGV0dGVy
LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLmhhc1RleHRDb21iaW5l
KCkpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1RleHRD
b21iaW5lLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKHN0eWxlLmJhY2tncm91
bmRDbGlwKCkgPT0gRmlsbEJveDo6VGV4dCkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJO
X0lGX05FRURFRChGbG93SGFzVGV4dEZpbGxCb3gsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsK
LSAgICBpZiAoc3R5bGUuYm9yZGVyRml0KCkgPT0gQm9yZGVyRml0OjpMaW5lcykKLSAgICAgICAg
U0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzQm9yZGVyRml0TGluZXMsIHJl
YXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoc3R5bGUubGluZUJyZWFrKCkgIT0gTGlu
ZUJyZWFrOjpBdXRvKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZs
b3dIYXNOb25BdXRvTGluZUJyZWFrLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYg
KHN0eWxlLm5ic3BNb2RlKCkgIT0gTkJTUE1vZGU6Ok5vcm1hbCkKLSAgICAgICAgU0VUX1JFQVNP
Tl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzV2ViS2l0TkJTUE1vZGUsIHJlYXNvbnMsIGlu
Y2x1ZGVSZWFzb25zKTsKLSAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIG9mIHRleHQtc2VjdXJpdHk6
ZGlzYyBpcyBub3QgeWV0IGltcGxlbWVudGVkIGluIHRoZSBzaW1wbGUgbGluZSBsYXlvdXQgY29k
ZSBwYXRoLgotICAgIC8vIFNlZSBSZW5kZXJCbG9jazo6dXBkYXRlU2VjdXJpdHlEaXNjQ2hhcmFj
dGVycy4KLSAgICBpZiAoc3R5bGUudGV4dFNlY3VyaXR5KCkgIT0gVGV4dFNlY3VyaXR5OjpOb25l
KQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNUZXh0U2Vj
dXJpdHksIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoc3R5bGUuaHlwaGVucygp
ID09IEh5cGhlbnM6OkF1dG8pIHsKLSAgICAgICAgYXV0byB0ZXh0UmVhc29ucyA9IGNhblVzZUZv
clRleHQoc3R5bGUuaHlwaGVuU3RyaW5nKCksIHN0eWxlLmZvbnRDYXNjYWRlKCksIFdURjo6bnVs
bG9wdCwgZmFsc2UsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgaWYgKHRleHRSZWFzb25zICE9
IE5vUmVhc29uKQotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRCh0
ZXh0UmVhc29ucywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIH0KLSAgICByZXR1cm4g
cmVhc29uczsKLX0KLQotQXZvaWRhbmNlUmVhc29uRmxhZ3MgY2FuVXNlRm9yV2l0aFJlYXNvbihj
b25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIEluY2x1ZGVSZWFzb25zIGluY2x1ZGVSZWFzb25z
KQotewotI2lmbmRlZiBOREVCVUcKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7
Ci0gICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKLSAgICAgICAgUEFMOjpyZWdpc3Rl
ck5vdGlmeUNhbGxiYWNrKCJjb20uYXBwbGUuV2ViS2l0LnNob3dTaW1wbGVMaW5lTGF5b3V0Q292
ZXJhZ2UiLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4geyBwcmludFNpbXBsZUxpbmVMYXlvdXRDb3Zl
cmFnZSB9KTsKLSAgICAgICAgUEFMOjpyZWdpc3Rlck5vdGlmeUNhbGxiYWNrKCJjb20uYXBwbGUu
V2ViS2l0LnNob3dTaW1wbGVMaW5lTGF5b3V0UmVhc29ucyIsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiB7IHByaW50U2ltcGxlTGluZUxheW91dEJsb2NrTGlzdCB9KTsKLSAgICAgICAgUEFMOjpyZWdp
c3Rlck5vdGlmeUNhbGxiYWNrKCJjb20uYXBwbGUuV2ViS2l0LnRvZ2dsZVNpbXBsZUxpbmVMYXlv
dXQiLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4geyB0b2dnbGVTaW1wbGVMaW5lTGF5b3V0IH0pOwot
ICAgIH0pOwotI2VuZGlmCi0gICAgQXZvaWRhbmNlUmVhc29uRmxhZ3MgcmVhc29ucyA9IHsgfTsK
LSAgICBpZiAoIWZsb3cuc2V0dGluZ3MoKS5zaW1wbGVMaW5lTGF5b3V0RW5hYmxlZCgpKQotICAg
ICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZlYXR1cmVJc0Rpc2FibGVkLCBy
ZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgaWYgKCFmbG93LnBhcmVudCgpKQotICAgICAg
ICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNOb1BhcmVudCwgcmVhc29u
cywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmICghZmxvdy5maXJzdENoaWxkKCkpCi0gICAgICAg
IFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc05vQ2hpbGQsIHJlYXNvbnMs
IGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoZmxvdy5mcmFnbWVudGVkRmxvd1N0YXRlKCkgIT0g
UmVuZGVyT2JqZWN0OjpOb3RJbnNpZGVGcmFnbWVudGVkRmxvdykgewotICAgICAgICBhdXRvKiBm
cmFnbWVudGVkRmxvdyA9IGZsb3cuZW5jbG9zaW5nRnJhZ21lbnRlZEZsb3coKTsKLSAgICAgICAg
aWYgKCFpczxSZW5kZXJNdWx0aUNvbHVtbkZsb3c+KGZyYWdtZW50ZWRGbG93KSkKLSAgICAgICAg
ICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0lzSW5zaWRlQU5vbk11bHRp
Q29sdW1uVGhyZWFkLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgICAgIGF1dG8mIGNv
bHVtblRocmVhZCA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uRmxvdz4oKmZyYWdtZW50ZWRG
bG93KTsKLSAgICAgICAgaWYgKGNvbHVtblRocmVhZC5wYXJlbnQoKSAhPSAmZmxvdy52aWV3KCkp
Ci0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKE11bHRpQ29sdW1u
Rmxvd0lzTm90VG9wTGV2ZWwsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgaWYg
KGNvbHVtblRocmVhZC5oYXNDb2x1bW5TcGFubmVyKCkpCi0gICAgICAgICAgICBTRVRfUkVBU09O
X0FORF9SRVRVUk5fSUZfTkVFREVEKE11bHRpQ29sdW1uRmxvd0hhc0NvbHVtblNwYW5uZXIsIHJl
YXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgYXV0byYgc3R5bGUgPSBmbG93LnN0eWxl
KCk7Ci0gICAgICAgIGlmIChzdHlsZS52ZXJ0aWNhbEFsaWduKCkgIT0gVmVydGljYWxBbGlnbjo6
QmFzZWxpbmUpCi0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKE11
bHRpQ29sdW1uRmxvd1ZlcnRpY2FsQWxpZ24sIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAg
ICAgICAgaWYgKHN0eWxlLmlzRmxvYXRpbmcoKSkKLSAgICAgICAgICAgIFNFVF9SRUFTT05fQU5E
X1JFVFVSTl9JRl9ORUVERUQoTXVsdGlDb2x1bW5GbG93SXNGbG9hdGluZywgcmVhc29ucywgaW5j
bHVkZVJlYXNvbnMpOwotICAgIH0KLSAgICBpZiAoIWZsb3cuaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzSG9y
aXpvbmFsV3JpdGluZ01vZGUsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoZmxv
dy5oYXNPdXRsaW5lKCkpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQo
Rmxvd0hhc091dGxpbmUsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoZmxvdy5p
c1J1YnlUZXh0KCkgfHwgZmxvdy5pc1J1YnlCYXNlKCkpCi0gICAgICAgIFNFVF9SRUFTT05fQU5E
X1JFVFVSTl9JRl9ORUVERUQoRmxvd0lzUnVieSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwot
ICAgIGlmICghZmxvdy5zdHlsZSgpLmhhbmdpbmdQdW5jdHVhdGlvbigpLmlzRW1wdHkoKSkKLSAg
ICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzSGFuZ2luZ1B1bmN0
dWF0aW9uLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgCi0gICAgLy8gUHJpbnRpbmcg
ZG9lcyBwYWdpbmF0aW9uIHdpdGhvdXQgYSBmbG93IHRocmVhZC4KLSAgICBpZiAoZmxvdy5kb2N1
bWVudCgpLnBhZ2luYXRlZCgpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVF
REVEKEZsb3dJc1BhZ2luYXRlZCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmIChm
bG93LmZpcnN0TGluZUJsb2NrKCkpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9O
RUVERUQoRmxvd0hhc1BzZXVkb0ZpcnN0TGluZSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwot
ICAgIGlmIChmbG93LmlzQW5vbnltb3VzQmxvY2soKSAmJiBmbG93LnBhcmVudCgpLT5zdHlsZSgp
LnRleHRPdmVyZmxvdygpID09IFRleHRPdmVyZmxvdzo6RWxsaXBzaXMpCi0gICAgICAgIFNFVF9S
RUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1RleHRPdmVyZmxvdywgcmVhc29ucywg
aW5jbHVkZVJlYXNvbnMpOwotICAgIGlmIChmbG93LnBhcmVudCgpLT5pc0RlcHJlY2F0ZWRGbGV4
aWJsZUJveCgpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJ
c0RlcHJpY2F0ZWRGbGV4Qm94LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgLy8gRklY
TUU6IFBsYWNlaG9sZGVycyBkbyBzb21ldGhpbmcgc3RyYW5nZS4KLSAgICBpZiAoaXM8UmVuZGVy
VGV4dENvbnRyb2w+KCpmbG93LnBhcmVudCgpKSAmJiBkb3duY2FzdDxSZW5kZXJUZXh0Q29udHJv
bD4oKmZsb3cucGFyZW50KCkpLnRleHRGb3JtQ29udHJvbEVsZW1lbnQoKS5wbGFjZWhvbGRlckVs
ZW1lbnQoKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93UGFy
ZW50SXNQbGFjZWhvbGRlckVsZW1lbnQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAv
LyBGSVhNRTogSW1wbGVtZW50YXRpb24gb2Ygd3JhcD1oYXJkIGxvb2tzIGludG8gbGluZWJveGVz
LgotICAgIGlmIChmbG93LnBhcmVudCgpLT5pc1RleHRBcmVhKCkgJiYgZmxvdy5wYXJlbnQoKS0+
ZWxlbWVudCgpLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6
d3JhcEF0dHIpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dQ
YXJlbnRJc1RleHRBcmVhV2l0aFdyYXBwaW5nLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0g
ICAgLy8gVGhpcyBjdXJyZW50bHkgY292ZXJzIDxibG9ja2Zsb3c+I3RleHQ8L2Jsb2NrZmxvdz4s
IDxibG9ja2Zsb3c+I3RleHQ8YnI+PC9ibG9ja2Zsb3c+IGFuZCBtdXRpcGxlIChzaWJsaW5nKSBS
ZW5kZXJUZXh0IGNhc2VzLgotICAgIC8vIFRoZSA8YmxvY2tmbG93PjxpbmxpbmU+I3RleHQ8L2lu
bGluZT48L2Jsb2NrZmxvdz4gY2FzZSBpcyBhbHNvIHBvcHVsYXIgYW5kIHNob3VsZCBiZSByZWxh
dGl2ZWx5IGVhc3kgdG8gY292ZXIuCi0gICAgZm9yIChjb25zdCBhdXRvKiBjaGlsZCA9IGZsb3cu
Zmlyc3RDaGlsZCgpOyBjaGlsZDspIHsKLSAgICAgICAgaWYgKGNoaWxkLT5zZWxlY3Rpb25TdGF0
ZSgpICE9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUpCi0gICAgICAgICAgICBT
RVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dDaGlsZElzU2VsZWN0ZWQsIHJlYXNv
bnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgaWYgKGlzPFJlbmRlclRleHQ+KCpjaGlsZCkp
IHsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8mIHJlbmRlclRleHQgPSBkb3duY2FzdDxSZW5kZXJU
ZXh0PigqY2hpbGQpOwotICAgICAgICAgICAgaWYgKHJlbmRlclRleHQudGV4dE5vZGUoKSAmJiAh
cmVuZGVyVGV4dC5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKCpyZW5kZXJUZXh0LnRl
eHROb2RlKCkpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRV
Uk5fSUZfTkVFREVEKEZsb3dJbmNsdWRlc0RvY3VtZW50TWFya2VycywgcmVhc29ucywgaW5jbHVk
ZVJlYXNvbnMpOwotICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpczxSZW5kZXJMaW5l
QnJlYWs+KGNoaWxkKSAmJiAhZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPigqY2hpbGQpLmlzV0JS
KCkgJiYgY2hpbGQtPnN0eWxlKCkuY2xlYXIoKSA9PSBDbGVhcjo6Tm9uZSkgewotICAgICAgICAg
ICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB9Ci0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hh
c05vblN1cHBvcnRlZENoaWxkLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBhdXRvIHN0eWxlUmVhc29ucyA9IGNhblVzZUZvclN0eWxlKGZsb3cu
c3R5bGUoKSwgaW5jbHVkZVJlYXNvbnMpOwotICAgIGlmIChzdHlsZVJlYXNvbnMgIT0gTm9SZWFz
b24pCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoc3R5bGVSZWFzb25z
LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgLy8gV2UgY2FuJ3QgdXNlIHRoZSBjb2Rl
IHBhdGggaWYgYW55IGxpbmVzIHdvdWxkIG5lZWQgdG8gYmUgc2hpZnRlZCBiZWxvdyBmbG9hdHMu
IFRoaXMgaXMgYmVjYXVzZSB3ZSBkb24ndCBrZWVwIHBlci1saW5lIHkgY29vcmRpbmF0ZXMuCi0g
ICAgaWYgKGZsb3cuY29udGFpbnNGbG9hdHMoKSkgewotICAgICAgICBmbG9hdCBtaW5pbXVtV2lk
dGhOZWVkZWQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCk7Ci0gICAgICAgIGZv
ciAoY29uc3QgYXV0byYgdGV4dFJlbmRlcmVyIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyVGV4dD4o
ZmxvdykpIHsKLSAgICAgICAgICAgIG1pbmltdW1XaWR0aE5lZWRlZCA9IHN0ZDo6bWluKG1pbmlt
dW1XaWR0aE5lZWRlZCwgdGV4dFJlbmRlcmVyLm1pbkxvZ2ljYWxXaWR0aCgpKTsKLQotICAgICAg
ICAgICAgZm9yIChhdXRvJiBmbG9hdGluZ09iamVjdCA6ICpmbG93LmZsb2F0aW5nT2JqZWN0U2V0
KCkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZmxvYXRpbmdPYmplY3QpOwotICAgICAgICAg
ICAgICAgIC8vIGlmIGEgZmxvYXQgaGFzIGEgc2hhcGUsIHdlIGNhbm5vdCB0ZWxsIGlmIGNvbnRl
bnQgd2lsbCBuZWVkIHRvIGJlIHNoaWZ0ZWQgdW50aWwgYWZ0ZXIgd2UgbGF5IGl0IG91dCwKLSAg
ICAgICAgICAgICAgICAvLyBzaW5jZSB0aGUgYW1vdW50IG9mIHNwYWNlIGlzIG5vdCB1bmlmb3Jt
IGZvciB0aGUgaGVpZ2h0IG9mIHRoZSBmbG9hdC4KLSAgICAgICAgICAgICAgICBpZiAoZmxvYXRp
bmdPYmplY3QtPnJlbmRlcmVyKCkuc2hhcGVPdXRzaWRlSW5mbygpKQotICAgICAgICAgICAgICAg
ICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNVbnN1cHBvcnRlZEZs
b2F0LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Ci0gICAgICAgICAgICAgICAgZmxvYXQgYXZh
aWxhYmxlV2lkdGggPSBmbG93LmF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUoZmxvYXRpbmdP
YmplY3QtPnkoKSwgRG9Ob3RJbmRlbnRUZXh0KTsKLSAgICAgICAgICAgICAgICBpZiAoYXZhaWxh
YmxlV2lkdGggPCBtaW5pbXVtV2lkdGhOZWVkZWQpCi0gICAgICAgICAgICAgICAgICAgIFNFVF9S
RUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1Vuc3VwcG9ydGVkRmxvYXQsIHJlYXNv
bnMsIGluY2x1ZGVSZWFzb25zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAg
ICBhdXRvIGZvbnRBbmRUZXh0UmVhc29ucyA9IGNhblVzZUZvckZvbnRBbmRUZXh0KGZsb3csIGlu
Y2x1ZGVSZWFzb25zKTsKLSAgICBpZiAoZm9udEFuZFRleHRSZWFzb25zICE9IE5vUmVhc29uKQot
ICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKGZvbnRBbmRUZXh0UmVhc29u
cywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwotICAgIHJldHVybiByZWFzb25zOwotfQotCi1i
b29sIGNhblVzZUZvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCi17Ci0gICAgcmV0dXJu
IGNhblVzZUZvcldpdGhSZWFzb24oZmxvdywgSW5jbHVkZVJlYXNvbnM6OkZpcnN0KSA9PSBOb1Jl
YXNvbjsKLX0KLQotYm9vbCBjYW5Vc2VGb3JBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlckJs
b2NrRmxvdyYgYmxvY2tDb250YWluZXIsIFN0eWxlRGlmZmVyZW5jZSBkaWZmKQotewotICAgIHN3
aXRjaCAoZGlmZikgewotICAgIGNhc2UgU3R5bGVEaWZmZXJlbmNlOjpFcXVhbDoKLSAgICBjYXNl
IFN0eWxlRGlmZmVyZW5jZTo6UmVjb21wb3NpdGVMYXllcjoKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6OlJlcGFpbnQ6Ci0gICAgY2FzZSBTdHlsZURpZmZl
cmVuY2U6OlJlcGFpbnRJZlRleHRPckJvcmRlck9yT3V0bGluZToKLSAgICBjYXNlIFN0eWxlRGlm
ZmVyZW5jZTo6UmVwYWludExheWVyOgotICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgZG8gYSBt
b3JlIGZvY3VzZWQgc3R5bGUgY2hlY2sgYnkgbWF0Y2hpbmcgUmVuZGVyZXJTdHlsZTo6Y2hhbmdl
UmVxdWlyZXNSZXBhaW50JmNvLgotICAgICAgICByZXR1cm4gY2FuVXNlRm9yU3R5bGUoYmxvY2tD
b250YWluZXIuc3R5bGUoKSwgSW5jbHVkZVJlYXNvbnM6OkZpcnN0KSA9PSBOb1JlYXNvbjsKLSAg
ICBjYXNlIFN0eWxlRGlmZmVyZW5jZTo6TGF5b3V0UG9zaXRpb25lZE1vdmVtZW50T25seToKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6OlNpbXBsaWZpZWRM
YXlvdXQ6Ci0gICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6OlNpbXBsaWZpZWRMYXlvdXRBbmRQb3Np
dGlvbmVkTW92ZW1lbnQ6Ci0gICAgICAgIHJldHVybiBjYW5Vc2VGb3JTdHlsZShibG9ja0NvbnRh
aW5lci5zdHlsZSgpLCBJbmNsdWRlUmVhc29uczo6Rmlyc3QpID09IE5vUmVhc29uOwotICAgIGNh
c2UgU3R5bGVEaWZmZXJlbmNlOjpMYXlvdXQ6Ci0gICAgY2FzZSBTdHlsZURpZmZlcmVuY2U6Ok5l
d1N0eWxlOgotICAgICAgICByZXR1cm4gY2FuVXNlRm9yKGJsb2NrQ29udGFpbmVyKTsKLSAgICB9
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGNhblVzZUZvcihibG9ja0Nv
bnRhaW5lcik7Ci19Ci0KLXN0YXRpYyB2b2lkIHJldmVydEFsbFJ1bnNPbkN1cnJlbnRMaW5lKExh
eW91dDo6UnVuVmVjdG9yJiBydW5zKQotewotICAgIHdoaWxlICghcnVucy5pc0VtcHR5KCkgJiYg
IXJ1bnMubGFzdCgpLmlzRW5kT2ZMaW5lKQotICAgICAgICBydW5zLnJlbW92ZUxhc3QoKTsKLX0K
LQotc3RhdGljIHZvaWQgcmV2ZXJ0UnVucyhMYXlvdXQ6OlJ1blZlY3RvciYgcnVucywgdW5zaWdu
ZWQgcG9zaXRpb25Ub1JldmVydFRvLCBmbG9hdCB3aWR0aCkKLXsKLSAgICB3aGlsZSAocnVucy5z
aXplKCkpIHsKLSAgICAgICAgYXV0byYgbGFzdFJ1biA9IHJ1bnMubGFzdCgpOwotICAgICAgICBp
ZiAobGFzdFJ1bi5lbmQgPD0gcG9zaXRpb25Ub1JldmVydFRvKQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGlmIChsYXN0UnVuLnN0YXJ0ID49IHBvc2l0aW9uVG9SZXZlcnRUbykgewotICAg
ICAgICAgICAgLy8gUmV2ZXJ0IHRoaXMgcnVuIGNvbXBsZXRlbHkuCi0gICAgICAgICAgICB3aWR0
aCAtPSAobGFzdFJ1bi5sb2dpY2FsUmlnaHQgLSBsYXN0UnVuLmxvZ2ljYWxMZWZ0KTsKLSAgICAg
ICAgICAgIHJ1bnMucmVtb3ZlTGFzdCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
bGFzdFJ1bi5sb2dpY2FsUmlnaHQgLT0gd2lkdGg7Ci0gICAgICAgICAgICB3aWR0aCA9IDA7Ci0g
ICAgICAgICAgICBsYXN0UnVuLmVuZCA9IHBvc2l0aW9uVG9SZXZlcnRUbzsKLSAgICAgICAgICAg
IC8vIFBhcnRpYWwgcmVtb3ZhbC4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotfQotCi1jbGFzcyBMaW5lU3RhdGUgewotcHVibGljOgotICAgIHZvaWQgc2V0QXZhaWxhYmxl
V2lkdGgoZmxvYXQgd2lkdGgpIHsgbV9hdmFpbGFibGVXaWR0aCA9IHdpZHRoOyB9Ci0gICAgdm9p
ZCBzZXRDb2xsYXBlZFdoaXRlc3BhY2VXaWR0aChmbG9hdCB3aWR0aCkgeyBtX2NvbGxhcHNlZFdo
aXRlc3BhY2VXaWR0aCA9IHdpZHRoOyB9Ci0gICAgdm9pZCBzZXRMb2dpY2FsTGVmdE9mZnNldChm
bG9hdCBvZmZzZXQpIHsgbV9sb2dpY2FsTGVmdE9mZnNldCA9IG9mZnNldDsgfQotICAgIHZvaWQg
c2V0T3ZlcmZsb3dlZEZyYWdtZW50KGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJh
Z21lbnQmIGZyYWdtZW50KSB7IG1fb3ZlcmZsb3dlZEZyYWdtZW50ID0gZnJhZ21lbnQ7IH0KLSAg
ICB2b2lkIHNldE5lZWRzQWxsRnJhZ21lbnRzKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9m
cmFnbWVudHMpOwotICAgICAgICBtX2ZyYWdtZW50cy5lbXBsYWNlKCk7Ci0gICAgfQotICAgIHZv
aWQgc2V0SHlwaGVuYXRpb25EaXNhYmxlZCgpIHsgbV9oeXBoZW5hdGlvbkRpc2FibGVkID0gdHJ1
ZTsgfQotICAgIGJvb2wgaXNIeXBoZW5hdGlvbkRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gbV9o
eXBoZW5hdGlvbkRpc2FibGVkOyB9Ci0KLSAgICBmbG9hdCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fYXZhaWxhYmxlV2lkdGg7IH0KLSAgICBmbG9hdCBsb2dpY2FsTGVmdE9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbExlZnRPZmZzZXQ7IH0KLSAgICBjb25zdCBUZXh0
RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBvdmVyZmxvd2VkRnJhZ21lbnQoKSBjb25z
dCB7IHJldHVybiBtX292ZXJmbG93ZWRGcmFnbWVudDsgfQotICAgIGJvb2wgaGFzVHJhaWxpbmdX
aGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RnJhZ21lbnQudHlwZSgpID09IFRleHRG
cmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UgJiYgbV9sYXN0RnJhZ21l
bnQubGVuZ3RoKCkgPiAwOyB9Ci0gICAgYm9vbCBoYXNXaGl0ZXNwYWNlRnJhZ21lbnRzKCkgY29u
c3QgeyByZXR1cm4gbV9sYXN0V2hpdGVzcGFjZUZyYWdtZW50ICE9IFdURjo6bnVsbG9wdDsgfQot
ICAgIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgbGFzdEZyYWdtZW50KCkgY29u
c3QgeyByZXR1cm4gbV9sYXN0RnJhZ21lbnQ7IH0KLSAgICBib29sIGlzV2hpdGVzcGFjZU9ubHko
KSBjb25zdCB7IHJldHVybiBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoICYmIG1fcnVuc1dpZHRo
ID09IG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGg7IH0KLSAgICBib29sIGZpdHMoZmxvYXQgZXh0
cmEpIGNvbnN0IHsgcmV0dXJuIG1fYXZhaWxhYmxlV2lkdGggPj0gbV9ydW5zV2lkdGggKyBleHRy
YTsgfQotICAgIGJvb2wgZmlyc3RDaGFyYWN0ZXJGaXRzKCkgY29uc3QgeyByZXR1cm4gbV9maXJz
dENoYXJhY3RlckZpdHM7IH0KLSAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcnVu
c1dpZHRoOyB9Ci0gICAgc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBleHBhbnNpb25PcHBvcnR1
bml0eUNvdW50KHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdAotICAgIHsKLSAgICAg
ICAgQVNTRVJUKG1fZnJhZ21lbnRzKTsKLSAgICAgICAgLy8gbGluZWJyZWFrIHJ1bnMgYXJlIHNw
ZWNpYWwuCi0gICAgICAgIGlmIChmcm9tID09IHRvKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV9wYWlyKDAsIGZhbHNlKTsKLSAgICAgICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5p
dHlDb3VudCA9IDA7Ci0gICAgICAgIGF1dG8gcHJldmlvdXNGcmFnbWVudFR5cGUgPSBUZXh0RnJh
Z21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpDb250ZW50RW5kOwotICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIGZyYWdtZW50IDogKm1fZnJhZ21lbnRzKSB7Ci0gICAgICAgICAgICBpZiAoZnJh
Z21lbnQuZW5kKCkgPD0gZnJvbSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIGF1dG8gY3VycmVudEZyYWdtZW50VHlwZSA9IGZyYWdtZW50LnR5cGUoKTsKLSAgICAgICAg
ICAgIGF1dG8gZXhwYW5zaW9uT3Bwb3J0dW5pdHkgPSB0aGlzLT5leHBhbnNpb25PcHBvcnR1bml0
eShjdXJyZW50RnJhZ21lbnRUeXBlLCBwcmV2aW91c0ZyYWdtZW50VHlwZSk7Ci0gICAgICAgICAg
ICBpZiAoZXhwYW5zaW9uT3Bwb3J0dW5pdHkpCi0gICAgICAgICAgICAgICAgKytleHBhbnNpb25P
cHBvcnR1bml0eUNvdW50OwotICAgICAgICAgICAgcHJldmlvdXNGcmFnbWVudFR5cGUgPSBjdXJy
ZW50RnJhZ21lbnRUeXBlOwotICAgICAgICAgICAgaWYgKGZyYWdtZW50LmVuZCgpID49IHRvKQot
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50LCBleHBhbnNpb25PcHBvcnR1bml0eSk7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihleHBhbnNpb25P
cHBvcnR1bml0eUNvdW50LCBmYWxzZSk7Ci0gICAgfQotCi0gICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIGlmICghbV9sYXN0RnJhZ21lbnQuaXNWYWxpZCgpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghbV9sYXN0Q29tcGxldGVGcmFnbWVudC5p
c0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBtX2xh
c3RGcmFnbWVudC5vdmVybGFwc1RvTmV4dFJlbmRlcmVyKCk7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGlubGluZSB1bnNpZ25lZCBlbmRQb3NpdGlvbkZvckNvbGxhcHNlZEZyYWdtZW50KGNvbnN0IFRl
eHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIGZyYWdtZW50KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGZyYWdtZW50LmlzQ29sbGFwc2VkKCkgPyBmcmFnbWVudC5zdGFydCgpICsgMSA6
IGZyYWdtZW50LmVuZCgpOwotICAgIH0KLQotICAgIHZvaWQgYXBwZW5kRnJhZ21lbnRBbmRDcmVh
dGVSdW5JZk5lZWRlZChjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBm
cmFnbWVudCwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMpCi0gICAgewotICAgICAgICAvLyBBZGp1
c3QgZW5kIHBvc2l0aW9uIHdoaWxlIGNvbGxhcHNpbmcuCi0gICAgICAgIHVuc2lnbmVkIGVuZFBv
c2l0aW9uID0gZW5kUG9zaXRpb25Gb3JDb2xsYXBzZWRGcmFnbWVudChmcmFnbWVudCk7Ci0gICAg
ICAgIC8vIE5ldyBsaW5lIG5lZWRzIG5ldyBydW4uCi0gICAgICAgIGlmICghbV9ydW5zV2lkdGgp
IHsKLSAgICAgICAgICAgIEFTU0VSVCghbV91bmNvbXBsZXRlZFdpZHRoKTsKLSAgICAgICAgICAg
IHJ1bnMuYXBwZW5kKFJ1bihmcmFnbWVudC5zdGFydCgpLCBlbmRQb3NpdGlvbiwgbV9ydW5zV2lk
dGgsIG1fcnVuc1dpZHRoICsgZnJhZ21lbnQud2lkdGgoKSwgZmFsc2UsIGZyYWdtZW50Lmhhc0h5
cGhlbigpLCBmcmFnbWVudC5pc0xpbmVCcmVhaygpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBBZHZhbmNlIGxhc3QgY29tcGxldGVkIGZyYWdtZW50IHdoZW4gdGhlIHByZXZp
b3VzIGZyYWdtZW50IGlzIGFsbCBzZXQgKGluY2x1ZGluZyBtdWx0aXBsZSBwYXJ0cyBhY3Jvc3Mg
cmVuZGVyZXJzKQotICAgICAgICAgICAgaWYgKChtX2xhc3RGcmFnbWVudC50eXBlKCkgIT0gZnJh
Z21lbnQudHlwZSgpKSB8fCAhbV9sYXN0RnJhZ21lbnQub3ZlcmxhcHNUb05leHRSZW5kZXJlcigp
KSB7Ci0gICAgICAgICAgICAgICAgbV9sYXN0Q29tcGxldGVGcmFnbWVudCA9IG1fbGFzdEZyYWdt
ZW50OwotICAgICAgICAgICAgICAgIG1fdW5jb21wbGV0ZWRXaWR0aCA9IGZyYWdtZW50LndpZHRo
KCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtX3VuY29tcGxldGVkV2lk
dGggKz0gZnJhZ21lbnQud2lkdGgoKTsKLSAgICAgICAgICAgIC8vIENvbGxhcHNlIG5laWdoYm91
cmluZyB3aGl0ZXNwYWNlLCBpZiB0aGV5IGFyZSBhY3Jvc3MgbXVsdGlwbGUgcmVuZGVyZXJzIGFu
ZCBhcmUgbm90IGNvbGxhcHNlZCB5ZXQuCi0gICAgICAgICAgICBpZiAobV9sYXN0RnJhZ21lbnQu
aXNDb2xsYXBzaWJsZSgpICYmIGZyYWdtZW50LmlzQ29sbGFwc2libGUoKSkgewotICAgICAgICAg
ICAgICAgIEFTU0VSVChtX2xhc3RGcmFnbWVudC5pc0xhc3RJblJlbmRlcmVyKCkpOwotICAgICAg
ICAgICAgICAgIGlmICghbV9sYXN0RnJhZ21lbnQuaXNDb2xsYXBzZWQoKSkgewotICAgICAgICAg
ICAgICAgICAgICAvLyBMaW5lIHdpZHRoIG5lZWRzIHRvIGJlIGFkanVzdGVkIHNvIHRoYXQgbm93
IGl0IHRha2VzIGNvbGxhcHNpbmcgaW50byBjb25zaWRlcmF0aW9uLgotICAgICAgICAgICAgICAg
ICAgICBtX3J1bnNXaWR0aCAtPSAobV9sYXN0RnJhZ21lbnQud2lkdGgoKSAtIG1fY29sbGFwc2Vk
V2hpdGVzcGFjZVdpZHRoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8g
VGhpcyBmcmFnbWVudCBpcyBjb2xsYXBzZWQgY29tcGxldGVseS4gTm8gcnVuIGlzIG5lZWRlZC4K
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBSdW4m
IGxhc3RSdW4gPSBydW5zLmxhc3QoKTsKLSAgICAgICAgICAgIGlmIChtX2xhc3RGcmFnbWVudC5p
c0xhc3RJblJlbmRlcmVyKCkgfHwgbV9sYXN0RnJhZ21lbnQuaXNDb2xsYXBzZWQoKSB8fCBmcmFn
bWVudC5pc0xpbmVCcmVhaygpIHx8IGxhc3RSdW4uaXNMaW5lQnJlYWspCi0gICAgICAgICAgICAg
ICAgcnVucy5hcHBlbmQoUnVuKGZyYWdtZW50LnN0YXJ0KCksIGVuZFBvc2l0aW9uLCBtX3J1bnNX
aWR0aCwgbV9ydW5zV2lkdGggKyBmcmFnbWVudC53aWR0aCgpLCBmYWxzZSwgZnJhZ21lbnQuaGFz
SHlwaGVuKCksIGZyYWdtZW50LmlzTGluZUJyZWFrKCkpKTsKLSAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIGxhc3RSdW4uZW5kID0gZW5kUG9zaXRpb247Ci0gICAgICAgICAgICAg
ICAgbGFzdFJ1bi5sb2dpY2FsUmlnaHQgKz0gZnJhZ21lbnQud2lkdGgoKTsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQoIWxhc3RSdW4uaGFzSHlwaGVuKTsKLSAgICAgICAgICAgICAgICBsYXN0UnVu
Lmhhc0h5cGhlbiA9IGZyYWdtZW50Lmhhc0h5cGhlbigpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIG1fcnVuc1dpZHRoICs9IGZyYWdtZW50LndpZHRoKCk7Ci0gICAgICAgIG1f
bGFzdEZyYWdtZW50ID0gZnJhZ21lbnQ7Ci0gICAgICAgIGlmIChtX2ZyYWdtZW50cykKLSAgICAg
ICAgICAgICgqbV9mcmFnbWVudHMpLmFwcGVuZChmcmFnbWVudCk7Ci0KLSAgICAgICAgaWYgKGZy
YWdtZW50LnR5cGUoKSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0
ZXNwYWNlKSB7Ci0gICAgICAgICAgICBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoICs9IGZyYWdt
ZW50LndpZHRoKCk7Ci0gICAgICAgICAgICBtX2xhc3RXaGl0ZXNwYWNlRnJhZ21lbnQgPSBmcmFn
bWVudDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNl
V2lkdGggPSAwOwotICAgICAgICAgICAgbV9sYXN0Tm9uV2hpdGVzcGFjZUZyYWdtZW50ID0gZnJh
Z21lbnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1fZmlyc3RDaGFyYWN0ZXJGaXRzKQot
ICAgICAgICAgICAgbV9maXJzdENoYXJhY3RlckZpdHMgPSBmcmFnbWVudC5zdGFydCgpICsgMSA+
IGVuZFBvc2l0aW9uIHx8IG1fcnVuc1dpZHRoIDw9IG1fYXZhaWxhYmxlV2lkdGg7Ci0gICAgfQot
Ci0gICAgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCByZXZlcnRUb0xhc3RDb21w
bGV0ZUZyYWdtZW50KExheW91dDo6UnVuVmVjdG9yJiBydW5zKQotICAgIHsKLSAgICAgICAgaWYg
KCFtX3VuY29tcGxldGVkV2lkdGgpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2xhc3RGcmFnbWVu
dCA9PSBtX2xhc3RDb21wbGV0ZUZyYWdtZW50KTsKLSAgICAgICAgICAgIHJldHVybiBtX2xhc3RG
cmFnbWVudDsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQobV9sYXN0RnJhZ21lbnQuaXNWYWxp
ZCgpKTsKLSAgICAgICAgbV9ydW5zV2lkdGggLT0gbV91bmNvbXBsZXRlZFdpZHRoOwotICAgICAg
ICByZXZlcnRSdW5zKHJ1bnMsIGVuZFBvc2l0aW9uRm9yQ29sbGFwc2VkRnJhZ21lbnQobV9sYXN0
Q29tcGxldGVGcmFnbWVudCksIG1fdW5jb21wbGV0ZWRXaWR0aCk7Ci0gICAgICAgIG1fdW5jb21w
bGV0ZWRXaWR0aCA9IDA7Ci0gICAgICAgIEFTU0VSVChtX2xhc3RDb21wbGV0ZUZyYWdtZW50Lmlz
VmFsaWQoKSk7Ci0gICAgICAgIHJldHVybiBtX2xhc3RDb21wbGV0ZUZyYWdtZW50OwotICAgIH0K
LQotICAgIHZvaWQgcmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKExheW91dDo6UnVuVmVjdG9yJiBy
dW5zKQotICAgIHsKLSAgICAgICAgaWYgKCFoYXNUcmFpbGluZ1doaXRlc3BhY2UoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG1fbGFzdE5vbldoaXRlc3BhY2VGcmFnbWVudCkg
ewotICAgICAgICAgICAgYXV0byBuZWVkc1JldmVydGluZyA9IG1fbGFzdE5vbldoaXRlc3BhY2VG
cmFnbWVudC0+ZW5kKCkgIT0gbV9sYXN0RnJhZ21lbnQuZW5kKCk7Ci0gICAgICAgICAgICAvLyBU
cmFpbGluZyB3aGl0ZXNwYWNlIGZyYWdtZW50IG1pZ2h0IGFjdHVhbGx5IGhhdmUgemVybyBsZW5n
dGguCi0gICAgICAgICAgICBBU1NFUlQobmVlZHNSZXZlcnRpbmcgfHwgIW1fdHJhaWxpbmdXaGl0
ZXNwYWNlV2lkdGgpOwotICAgICAgICAgICAgaWYgKG5lZWRzUmV2ZXJ0aW5nKSB7Ci0gICAgICAg
ICAgICAgICAgcmV2ZXJ0UnVucyhydW5zLCBtX2xhc3ROb25XaGl0ZXNwYWNlRnJhZ21lbnQtPmVu
ZCgpLCBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKTsKLSAgICAgICAgICAgICAgICBtX3J1bnNX
aWR0aCAtPSBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCA9IDA7Ci0gICAgICAgICAgICBtX2xhc3RG
cmFnbWVudCA9ICptX2xhc3ROb25XaGl0ZXNwYWNlRnJhZ21lbnQ7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gVGhpcyBsaW5lIGlzIGFsbCB3aGl0ZXNwYWNlLgot
ICAgICAgICByZXZlcnRBbGxSdW5zT25DdXJyZW50TGluZShydW5zKTsKLSAgICAgICAgbV9ydW5z
V2lkdGggPSAwOwotICAgICAgICBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoID0gMDsKLSAgICAg
ICAgLy8gRklYTUU6IE1ha2UgbV9sYXN0RnJhZ21lbnQgb3B0aW9uYWwuCi0gICAgICAgIG1fbGFz
dEZyYWdtZW50ID0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCgpOwotICAgIH0K
LQotICAgIGZsb2F0IHRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV90
cmFpbGluZ1doaXRlc3BhY2VXaWR0aDsgfQotCi1wcml2YXRlOgotICAgIGJvb2wgZXhwYW5zaW9u
T3Bwb3J0dW5pdHkoVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6VHlwZSBjdXJy
ZW50RnJhZ21lbnRUeXBlLCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpUeXBl
IHByZXZpb3VzRnJhZ21lbnRUeXBlKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIChjdXJy
ZW50RnJhZ21lbnRUeXBlID09IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6Oldo
aXRlc3BhY2UKLSAgICAgICAgICAgIHx8IChjdXJyZW50RnJhZ21lbnRUeXBlID09IFRleHRGcmFn
bWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6Ok5vbldoaXRlc3BhY2UgJiYgcHJldmlvdXNGcmFn
bWVudFR5cGUgPT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6Tm9uV2hpdGVz
cGFjZSkpOwotICAgIH0KLQotICAgIGZsb2F0IG1fYXZhaWxhYmxlV2lkdGggeyAwIH07Ci0gICAg
ZmxvYXQgbV9sb2dpY2FsTGVmdE9mZnNldCB7IDAgfTsKLSAgICBmbG9hdCBtX3J1bnNXaWR0aCB7
IDAgfTsKLSAgICBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IG1fb3ZlcmZsb3dl
ZEZyYWdtZW50OwotICAgIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgbV9sYXN0
RnJhZ21lbnQ7Ci0gICAgT3B0aW9uYWw8VGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVu
dD4gbV9sYXN0Tm9uV2hpdGVzcGFjZUZyYWdtZW50OwotICAgIE9wdGlvbmFsPFRleHRGcmFnbWVu
dEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ+IG1fbGFzdFdoaXRlc3BhY2VGcmFnbWVudDsKLSAgICBU
ZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IG1fbGFzdENvbXBsZXRlRnJhZ21lbnQ7
Ci0gICAgZmxvYXQgbV91bmNvbXBsZXRlZFdpZHRoIHsgMCB9OwotICAgIGZsb2F0IG1fdHJhaWxp
bmdXaGl0ZXNwYWNlV2lkdGggeyAwIH07IC8vIFVzZSB0aGlzIHRvIHJlbW92ZSB0cmFpbGluZyB3
aGl0ZXNwYWNlIHdpdGhvdXQgcmUtbWVzdXJpbmcgdGhlIHRleHQuCi0gICAgZmxvYXQgbV9jb2xs
YXBzZWRXaGl0ZXNwYWNlV2lkdGggeyAwIH07Ci0gICAgLy8gSGF2aW5nIG9uZSBjaGFyYWN0ZXIg
b24gdGhlIGxpbmUgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiBpdCBhY3R1YWxseSBmaXRzLgot
ICAgIC8vIEZpcnN0IGNoYXJhY3RlciBvZiB0aGUgZmlyc3QgZnJhZ21lbnQgbWlnaHQgYmUgZm9y
Y2VkIG9uIHRvIHRoZSBjdXJyZW50IGxpbmUgZXZlbiBpZiBpdCBkb2VzIG5vdCBmaXQuCi0gICAg
Ym9vbCBtX2ZpcnN0Q2hhcmFjdGVyRml0cyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2h5cGhlbmF0
aW9uRGlzYWJsZWQgeyBmYWxzZSB9OwotICAgIE9wdGlvbmFsPFZlY3RvcjxUZXh0RnJhZ21lbnRJ
dGVyYXRvcjo6VGV4dEZyYWdtZW50LCAzMD4+IG1fZnJhZ21lbnRzOwotfTsKLQotc3RhdGljIGZs
b2F0IGNvbXB1dGVMaW5lTGVmdChjb25zdCBMaW5lU3RhdGUmIGxpbmUsIFRleHRBbGlnbk1vZGUg
dGV4dEFsaWduLCBmbG9hdCYgaGFuZ2luZ1doaXRlc3BhY2VXaWR0aCkKLXsKLSAgICBmbG9hdCB0
b3RhbFdpZHRoID0gbGluZS53aWR0aCgpIC0gaGFuZ2luZ1doaXRlc3BhY2VXaWR0aDsKLSAgICBm
bG9hdCByZW1haW5pbmdXaWR0aCA9IGxpbmUuYXZhaWxhYmxlV2lkdGgoKSAtIHRvdGFsV2lkdGg7
Ci0gICAgZmxvYXQgbGVmdCA9IGxpbmUubG9naWNhbExlZnRPZmZzZXQoKTsKLSAgICBzd2l0Y2gg
KHRleHRBbGlnbikgewotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKLSAgICBjYXNlIFRl
eHRBbGlnbk1vZGU6OldlYktpdExlZnQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoK
LSAgICAgICAgaGFuZ2luZ1doaXRlc3BhY2VXaWR0aCA9IHN0ZDo6bWF4KDAuZiwgc3RkOjptaW4o
aGFuZ2luZ1doaXRlc3BhY2VXaWR0aCwgcmVtYWluaW5nV2lkdGgpKTsKLSAgICAgICAgcmV0dXJu
IGxlZnQ7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKLSAgICBjYXNlIFRleHRBbGln
bk1vZGU6OldlYktpdFJpZ2h0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5kOgotICAgICAg
ICBoYW5naW5nV2hpdGVzcGFjZVdpZHRoID0gMDsKLSAgICAgICAgcmV0dXJuIGxlZnQgKyBzdGQ6
Om1heDxmbG9hdD4ocmVtYWluaW5nV2lkdGgsIDApOwotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6
Q2VudGVyOgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVyOgotICAgICAgICBo
YW5naW5nV2hpdGVzcGFjZVdpZHRoID0gc3RkOjptYXgoMC5mLCBzdGQ6Om1pbihoYW5naW5nV2hp
dGVzcGFjZVdpZHRoLCAocmVtYWluaW5nV2lkdGggKyAxKSAvIDIpKTsKLSAgICAgICAgcmV0dXJu
IGxlZnQgKyBzdGQ6Om1heDxmbG9hdD4ocmVtYWluaW5nV2lkdGggLyAyLCAwKTsKLSAgICBjYXNl
IFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLXN0YXRpYyBib29sIHByZVdyYXAoY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0
b3I6OlN0eWxlJiBzdHlsZSkKLXsKLSAgICByZXR1cm4gc3R5bGUud3JhcExpbmVzICYmICFzdHls
ZS5jb2xsYXBzZVdoaXRlc3BhY2UgJiYgIXN0eWxlLmJyZWFrU3BhY2VzOwotfQotCi1zdGF0aWMg
dm9pZCB1cGRhdGVMaW5lQ29uc3RyYWlucyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIExp
bmVTdGF0ZSYgbGluZSwgY29uc3QgTGluZVN0YXRlJiBwcmV2aW91c0xpbmUsIHVuc2lnbmVkJiBu
dW1iZXJPZlByZWNlZGluZ0xpbmVzV2l0aEh5cGhlbiwgY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0
b3I6OlN0eWxlJiBzdHlsZSwgYm9vbCBpc0ZpcnN0TGluZSkKLXsKLSAgICBib29sIHNob3VsZEFw
cGx5VGV4dEluZGVudCA9ICFmbG93LmlzQW5vbnltb3VzKCkgfHwgZmxvdy5wYXJlbnQoKS0+Zmly
c3RDaGlsZCgpID09ICZmbG93OwotICAgIExheW91dFVuaXQgaGVpZ2h0ID0gZmxvdy5sb2dpY2Fs
SGVpZ2h0KCk7Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gZmxvdy5taW5MaW5lSGVp
Z2h0Rm9yUmVwbGFjZWRSZW5kZXJlcihmYWxzZSwgMCk7Ci0gICAgbGluZS5zZXRMb2dpY2FsTGVm
dE9mZnNldChmbG93LmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShoZWlnaHQsIERvTm90SW5kZW50
VGV4dCwgbG9naWNhbEhlaWdodCkgKyAoc2hvdWxkQXBwbHlUZXh0SW5kZW50ICYmIGlzRmlyc3RM
aW5lID8gZmxvdy50ZXh0SW5kZW50T2Zmc2V0KCkgOiAwX2x1KSk7Ci0gICAgZmxvYXQgbG9naWNh
bFJpZ2h0T2Zmc2V0ID0gZmxvdy5sb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKGhlaWdodCwgRG9O
b3RJbmRlbnRUZXh0LCBsb2dpY2FsSGVpZ2h0KTsKLSAgICBsaW5lLnNldEF2YWlsYWJsZVdpZHRo
KHN0ZDo6bWF4PGZsb2F0PigwLCBsb2dpY2FsUmlnaHRPZmZzZXQgLSBsaW5lLmxvZ2ljYWxMZWZ0
T2Zmc2V0KCkpKTsKLSAgICBpZiAoc3R5bGUudGV4dEFsaWduID09IFRleHRBbGlnbk1vZGU6Okp1
c3RpZnkpCi0gICAgICAgIGxpbmUuc2V0TmVlZHNBbGxGcmFnbWVudHMoKTsKLSAgICBudW1iZXJP
ZlByZWNlZGluZ0xpbmVzV2l0aEh5cGhlbiA9IChwcmV2aW91c0xpbmUuaXNFbXB0eSgpIHx8ICFw
cmV2aW91c0xpbmUubGFzdEZyYWdtZW50KCkuaGFzSHlwaGVuKCkpID8gMCA6IG51bWJlck9mUHJl
Y2VkaW5nTGluZXNXaXRoSHlwaGVuICsgMTsKLSAgICBpZiAoc3R5bGUuaHlwaGVuTGltaXRMaW5l
cyAmJiBudW1iZXJPZlByZWNlZGluZ0xpbmVzV2l0aEh5cGhlbiA+PSAqc3R5bGUuaHlwaGVuTGlt
aXRMaW5lcykKLSAgICAgICAgbGluZS5zZXRIeXBoZW5hdGlvbkRpc2FibGVkKCk7Ci0gICAgbGlu
ZS5zZXRDb2xsYXBlZFdoaXRlc3BhY2VXaWR0aChzdHlsZS5mb250LnNwYWNlV2lkdGgoKSArIHN0
eWxlLndvcmRTcGFjaW5nKTsKLX0KLQotc3RydWN0IFNwbGl0RnJhZ21lbnREYXRhIHsKLSAgICB1
bnNpZ25lZCBwb3NpdGlvbjsKLSAgICBmbG9hdCB3aWR0aDsKLX07Ci1zdGF0aWMgT3B0aW9uYWw8
dW5zaWduZWQ+IGh5cGhlblBvc2l0aW9uRm9yRnJhZ21lbnQoU3BsaXRGcmFnbWVudERhdGEgc3Bs
aXREYXRhLCBjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVu
dFRvU3BsaXQsCi0gICAgY29uc3QgTGluZVN0YXRlJiBsaW5lLCBjb25zdCBUZXh0RnJhZ21lbnRJ
dGVyYXRvciYgdGV4dEZyYWdtZW50SXRlcmF0b3IsIGZsb2F0IGF2YWlsYWJsZVdpZHRoKQotewot
ICAgIGF1dG8mIHN0eWxlID0gdGV4dEZyYWdtZW50SXRlcmF0b3Iuc3R5bGUoKTsKLSAgICBpZiAo
IXN0eWxlLnNob3VsZEh5cGhlbmF0ZSB8fCBsaW5lLmlzSHlwaGVuYXRpb25EaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB3
b3JrYXJvdW5kIGZvciB3ZWJraXQub3JnL2IvMTY5NjEzLiBTZWUgbWF4UHJlZml4V2lkdGggY29t
cHV0YXRpb24gaW4gdHJ5SHlwaGVuYXRpbmcoKS4KLSAgICAvLyBJdCBkb2VzIG5vdCB3b3JrIHBy
b3Blcmx5IHdpdGggbm9uLWNvbGxhcHNlZCBsZWFkaW5nIHRhYnMgd2hlbiBmb250IGlzIGVubGFy
Z2VkLgotICAgIGF1dG8gYWRqdXN0ZWRBdmFpbGFibGVXaWR0aCA9IGF2YWlsYWJsZVdpZHRoIC0g
c3R5bGUuaHlwaGVuU3RyaW5nV2lkdGg7Ci0gICAgaWYgKCFsaW5lLmlzRW1wdHkoKSkKLSAgICAg
ICAgYWRqdXN0ZWRBdmFpbGFibGVXaWR0aCArPSBzdHlsZS5mb250LnNwYWNlV2lkdGgoKTsKLSAg
ICBpZiAoIWVub3VnaFdpZHRoRm9ySHlwaGVuYXRpb24oYWRqdXN0ZWRBdmFpbGFibGVXaWR0aCwg
c3R5bGUuZm9udC5waXhlbFNpemUoKSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0K
LSAgICAvLyBXZSBtaWdodCBiZSBhYmxlIHRvIGZpdCB0aGUgaHlwaGVuIGF0IHRoZSBzcGxpdCBw
b3NpdGlvbi4KLSAgICBhdXRvIHNwbGl0UG9zaXRpb25XaXRoSHlwaGVuID0gc3BsaXREYXRhLnBv
c2l0aW9uOwotICAgIC8vIEZpbmQgYSBzcGxpdHRpbmcgcG9zaXRpb24gd2hlcmUgaHlwaGVuIHN1
cmVseSBmaXRzLgotICAgIHVuc2lnbmVkIHN0YXJ0ID0gZnJhZ21lbnRUb1NwbGl0LnN0YXJ0KCk7
Ci0gICAgYXV0byBsZWZ0U2lkZVdpZHRoID0gc3BsaXREYXRhLndpZHRoOwotICAgIHdoaWxlIChs
ZWZ0U2lkZVdpZHRoICsgc3R5bGUuaHlwaGVuU3RyaW5nV2lkdGggPiBhdmFpbGFibGVXaWR0aCkg
ewotICAgICAgICBpZiAoLS1zcGxpdFBvc2l0aW9uV2l0aEh5cGhlbiA8PSBzdGFydCkKLSAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7IC8vIE5vIHNwYWNlIGZvciBoeXBoZW4uCi0gICAg
ICAgIGxlZnRTaWRlV2lkdGggLT0gdGV4dEZyYWdtZW50SXRlcmF0b3IudGV4dFdpZHRoKHNwbGl0
UG9zaXRpb25XaXRoSHlwaGVuLCBzcGxpdFBvc2l0aW9uV2l0aEh5cGhlbiArIDEsIDApOwotICAg
IH0KLSAgICBBU1NFUlQoc3BsaXRQb3NpdGlvbldpdGhIeXBoZW4gPiBzdGFydCk7Ci0gICAgcmV0
dXJuIHRleHRGcmFnbWVudEl0ZXJhdG9yLmxhc3RIeXBoZW5Qb3NpdGlvbihmcmFnbWVudFRvU3Bs
aXQsIHNwbGl0UG9zaXRpb25XaXRoSHlwaGVuICsgMSk7Ci19Ci0KLXN0YXRpYyBTcGxpdEZyYWdt
ZW50RGF0YSBzcGxpdChjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBm
cmFnbWVudCwgZmxvYXQgYXZhaWxhYmxlV2lkdGgsCi0gICAgY29uc3QgVGV4dEZyYWdtZW50SXRl
cmF0b3ImIHRleHRGcmFnbWVudEl0ZXJhdG9yKQotewotICAgIEFTU0VSVChhdmFpbGFibGVXaWR0
aCA+PSAwKTsKLSAgICBhdXRvIGxlZnQgPSBmcmFnbWVudC5zdGFydCgpOwotICAgIC8vIFBhdGhv
bG9naWNhbCBjYXNlIG9mIChleHRyZW1lbHkpbG9uZyBzdHJpbmcgYW5kIG5hcnJvdyBsaW5lcy4K
LSAgICAvLyBBZGp1c3QgdGhlIHJhbmdlIHNvIHRoYXQgd2UgY2FuIHBpY2sgYSByZWFzb25hYmxl
IG1pZHBvaW50LgotICAgIGF1dG8gYXZlcmFnZUNoYXJhY3RlcldpZHRoID0gZnJhZ21lbnQud2lk
dGgoKSAvIGZyYWdtZW50Lmxlbmd0aCgpOwotICAgIGF1dG8gcmlnaHQgPSBzdGQ6Om1pbjx1bnNp
Z25lZD4obGVmdCArICgyICogYXZhaWxhYmxlV2lkdGggLyBhdmVyYWdlQ2hhcmFjdGVyV2lkdGgp
LCBmcmFnbWVudC5lbmQoKSAtIDEpOwotICAgIC8vIFByZXNlcnZlIHRoZSBsZWZ0IHdpZHRoIGZv
ciB0aGUgZmluYWwgc3BsaXQgcG9zaXRpb24gc28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIHJlbWVh
c3VyZSB0aGUgbGVmdCBzaWRlIGFnYWluLgotICAgIGZsb2F0IGxlZnRTaWRlV2lkdGggPSAwOwot
ICAgIHdoaWxlIChsZWZ0IDwgcmlnaHQpIHsKLSAgICAgICAgYXV0byBtaWRkbGUgPSAobGVmdCAr
IHJpZ2h0KSAvIDI7Ci0gICAgICAgIGF1dG8gd2lkdGggPSB0ZXh0RnJhZ21lbnRJdGVyYXRvci50
ZXh0V2lkdGgoZnJhZ21lbnQuc3RhcnQoKSwgbWlkZGxlICsgMSwgMCk7Ci0gICAgICAgIGlmICh3
aWR0aCA8IGF2YWlsYWJsZVdpZHRoKSB7Ci0gICAgICAgICAgICBsZWZ0ID0gbWlkZGxlICsgMTsK
LSAgICAgICAgICAgIGxlZnRTaWRlV2lkdGggPSB3aWR0aDsKLSAgICAgICAgfSBlbHNlIGlmICh3
aWR0aCA+IGF2YWlsYWJsZVdpZHRoKQotICAgICAgICAgICAgcmlnaHQgPSBtaWRkbGU7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgcmlnaHQgPSBtaWRkbGUgKyAxOwotICAgICAgICAgICAg
bGVmdFNpZGVXaWR0aCA9IHdpZHRoOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIHsgcmlnaHQsIGxlZnRTaWRlV2lkdGggfTsKLX0KLQotc3RhdGljIFRl
eHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgc3BsaXRGcmFnbWVudFRvRml0TGluZShU
ZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudFRvU3BsaXQsCi0gICAg
Y29uc3QgTGluZVN0YXRlJiBsaW5lLCBjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvciYgdGV4dEZy
YWdtZW50SXRlcmF0b3IpCi17Ci0gICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGxpbmUuYXZhaWxh
YmxlV2lkdGgoKSAtIGxpbmUud2lkdGgoKTsKLSAgICBhdXRvIHNwbGl0RnJhZ21lbnREYXRhID0g
c3BsaXQoZnJhZ21lbnRUb1NwbGl0LCBhdmFpbGFibGVXaWR0aCwgdGV4dEZyYWdtZW50SXRlcmF0
b3IpOwotICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBoeXBoZW5Qb3NpdGlvbiA9IFdURjo6bnVsbG9w
dDsKLSAgICAvLyBEb2VzIGZpcnN0IGNoYXJhY3RlciBmaXQgdGhpcyBsaW5lPwotICAgIGlmIChz
cGxpdEZyYWdtZW50RGF0YS5wb3NpdGlvbiA9PSBmcmFnbWVudFRvU3BsaXQuc3RhcnQoKSkgewot
ICAgICAgICAvLyBLZWVwIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgb24gZW1wdHkgbGluZXMuCi0g
ICAgICAgIGlmIChsaW5lLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHNwbGl0RnJhZ21lbnREYXRh
LndpZHRoID0gdGV4dEZyYWdtZW50SXRlcmF0b3IudGV4dFdpZHRoKGZyYWdtZW50VG9TcGxpdC5z
dGFydCgpLCArK3NwbGl0RnJhZ21lbnREYXRhLnBvc2l0aW9uLCAwKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBoeXBoZW5Qb3NpdGlvbiA9IGh5cGhlblBvc2l0aW9uRm9yRnJhZ21lbnQoc3BsaXRG
cmFnbWVudERhdGEsIGZyYWdtZW50VG9TcGxpdCwgbGluZSwgdGV4dEZyYWdtZW50SXRlcmF0b3Is
IGF2YWlsYWJsZVdpZHRoKTsKLSAgICAgICAgaWYgKGh5cGhlblBvc2l0aW9uKSB7Ci0gICAgICAg
ICAgICBzcGxpdEZyYWdtZW50RGF0YS5wb3NpdGlvbiA9ICpoeXBoZW5Qb3NpdGlvbjsKLSAgICAg
ICAgICAgIHNwbGl0RnJhZ21lbnREYXRhLndpZHRoID0gdGV4dEZyYWdtZW50SXRlcmF0b3IudGV4
dFdpZHRoKGZyYWdtZW50VG9TcGxpdC5zdGFydCgpLCBzcGxpdEZyYWdtZW50RGF0YS5wb3NpdGlv
biwgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLy8gSWYgdGhlIHJpZ2h0IHNpZGUgc3VyZWx5
IGRvZXMgbm90IGZpdCB0aGUgKG5leHQpbGluZSwgd2UgZG9uJ3QgbmVlZCB0aGUgd2lkdGggdG8g
YmUga2VybmluZy9saWdhdHVyZSBhZGp1c3RlZC4KLSAgICAvLyBQYXJ0IG9mIGl0IGdldHMgcmUt
bWVhc3VyZWQgYXMgdGhlIGxlZnQgc2lkZSBkdXJpbmcgbmV4dCBzcGxpdC4KLSAgICAvLyBUaGlz
IHNhdmVzIG1lYXN1cmluZyBsb25nIGNodW5rIG9mIHRleHQgcmVwZWF0ZWRseSAoc2VlIHBhdGhv
bG9naWNhbCBjYXNlIGF0IDo6c3BsaXQpLgotICAgIGF1dG8gcmlnaHRTaWRlV2lkdGggPSBmcmFn
bWVudFRvU3BsaXQud2lkdGgoKSAtIHNwbGl0RnJhZ21lbnREYXRhLndpZHRoOwotICAgIGlmIChy
aWdodFNpZGVXaWR0aCA8IDIgKiBhdmFpbGFibGVXaWR0aCkKLSAgICAgICAgcmlnaHRTaWRlV2lk
dGggPSB0ZXh0RnJhZ21lbnRJdGVyYXRvci50ZXh0V2lkdGgoc3BsaXRGcmFnbWVudERhdGEucG9z
aXRpb24sIGZyYWdtZW50VG9TcGxpdC5lbmQoKSwgMCk7Ci0gICAgcmV0dXJuIGh5cGhlblBvc2l0
aW9uID8gZnJhZ21lbnRUb1NwbGl0LnNwbGl0V2l0aEh5cGhlbihzcGxpdEZyYWdtZW50RGF0YS5w
b3NpdGlvbiwgdGV4dEZyYWdtZW50SXRlcmF0b3Iuc3R5bGUoKS5oeXBoZW5TdHJpbmdXaWR0aCwK
LSAgICAgICAgc3BsaXRGcmFnbWVudERhdGEud2lkdGgsIHJpZ2h0U2lkZVdpZHRoKSA6IGZyYWdt
ZW50VG9TcGxpdC5zcGxpdChzcGxpdEZyYWdtZW50RGF0YS5wb3NpdGlvbiwgc3BsaXRGcmFnbWVu
dERhdGEud2lkdGgsIHJpZ2h0U2lkZVdpZHRoKTsKLX0KLQotZW51bSBQcmVXcmFwTGluZUJyZWFr
UnVsZSB7IFByZXNlcnZlLCBJZ25vcmUgfTsKLQotc3RhdGljIFRleHRGcmFnbWVudEl0ZXJhdG9y
OjpUZXh0RnJhZ21lbnQgY29uc3VtZUxpbmVCcmVha0lmTmVlZGVkKGNvbnN0IFRleHRGcmFnbWVu
dEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBUZXh0RnJhZ21lbnRJdGVyYXRvciYg
dGV4dEZyYWdtZW50SXRlcmF0b3IsIExpbmVTdGF0ZSYgbGluZSwgTGF5b3V0OjpSdW5WZWN0b3Im
IHJ1bnMsCi0gICAgUHJlV3JhcExpbmVCcmVha1J1bGUgcHJlV3JhcExpbmVCcmVha1J1bGUgPSBQ
cmVXcmFwTGluZUJyZWFrUnVsZTo6UHJlc2VydmUpCi17Ci0gICAgaWYgKCFmcmFnbWVudC5pc0xp
bmVCcmVhaygpKQotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0KLSAgICBib29sIGlzSGFyZExp
bmVicmVhayA9IGZyYWdtZW50LnR5cGUoKSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZy
YWdtZW50OjpIYXJkTGluZUJyZWFrOwotICAgIC8vIDxicj4gYWx3YXlzIHByb2R1Y2VzIGEgcnVu
LiAocmVxdWlyZWQgYnkgdGVzdGluZyBvdXRwdXQpCi0gICAgaWYgKGlzSGFyZExpbmVicmVhaykK
LSAgICAgICAgbGluZS5hcHBlbmRGcmFnbWVudEFuZENyZWF0ZVJ1bklmTmVlZGVkKGZyYWdtZW50
LCBydW5zKTsKLQotICAgIGF1dG8mIHN0eWxlID0gdGV4dEZyYWdtZW50SXRlcmF0b3Iuc3R5bGUo
KTsKLSAgICBpZiAoc3R5bGUucHJlc2VydmVOZXdsaW5lICYmIHByZVdyYXBMaW5lQnJlYWtSdWxl
ID09IFByZVdyYXBMaW5lQnJlYWtSdWxlOjpQcmVzZXJ2ZSkgewotICAgICAgICBpZiAoIWlzSGFy
ZExpbmVicmVhaykKLSAgICAgICAgICAgIHJldHVybiBmcmFnbWVudDsKLSAgICB9Ci0gICAgcmV0
dXJuIHRleHRGcmFnbWVudEl0ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQoKTsKLX0KLQotc3RhdGlj
IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgc2tpcFdoaXRlc3BhY2VJZk5lZWRl
ZChjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudCwgVGV4
dEZyYWdtZW50SXRlcmF0b3ImIHRleHRGcmFnbWVudEl0ZXJhdG9yKQotewotICAgIGlmICghdGV4
dEZyYWdtZW50SXRlcmF0b3Iuc3R5bGUoKS5jb2xsYXBzZVdoaXRlc3BhY2UpCi0gICAgICAgIHJl
dHVybiBmcmFnbWVudDsKLQotICAgIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQg
Zmlyc3ROb25XaGl0ZXNwYWNlRnJhZ21lbnQgPSBmcmFnbWVudDsKLSAgICB3aGlsZSAoZmlyc3RO
b25XaGl0ZXNwYWNlRnJhZ21lbnQudHlwZSgpID09IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0
RnJhZ21lbnQ6OldoaXRlc3BhY2UpCi0gICAgICAgIGZpcnN0Tm9uV2hpdGVzcGFjZUZyYWdtZW50
ID0gdGV4dEZyYWdtZW50SXRlcmF0b3IubmV4dFRleHRGcmFnbWVudCgpOwotICAgIHJldHVybiBm
aXJzdE5vbldoaXRlc3BhY2VGcmFnbWVudDsKLX0KLQotc3RhdGljIFRleHRGcmFnbWVudEl0ZXJh
dG9yOjpUZXh0RnJhZ21lbnQgZmlyc3RGcmFnbWVudChUZXh0RnJhZ21lbnRJdGVyYXRvciYgdGV4
dEZyYWdtZW50SXRlcmF0b3IsIExpbmVTdGF0ZSYgY3VycmVudExpbmUsIGNvbnN0IExpbmVTdGF0
ZSYgcHJldmlvdXNMaW5lLCBMYXlvdXQ6OlJ1blZlY3RvciYgcnVucykKLXsKLSAgICAvLyBIYW5k
bGUgb3ZlcmZsb3cgZnJhZ21lbnQgZnJvbSBwcmV2aW91cyBsaW5lLgotICAgIGF1dG8gb3ZlcmZs
b3dlZEZyYWdtZW50ID0gcHJldmlvdXNMaW5lLm92ZXJmbG93ZWRGcmFnbWVudCgpOwotICAgIGlm
IChvdmVyZmxvd2VkRnJhZ21lbnQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gc2tpcFdoaXRl
c3BhY2VJZk5lZWRlZCh0ZXh0RnJhZ21lbnRJdGVyYXRvci5uZXh0VGV4dEZyYWdtZW50KCksIHRl
eHRGcmFnbWVudEl0ZXJhdG9yKTsKLQotICAgIGlmIChvdmVyZmxvd2VkRnJhZ21lbnQudHlwZSgp
ICE9IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UpCi0gICAg
ICAgIHJldHVybiBvdmVyZmxvd2VkRnJhZ21lbnQ7Ci0KLSAgICAvLyBMZWFkaW5nIHdoaXRlc3Bh
Y2UgaGFuZGxpbmcuCi0gICAgYXV0byYgc3R5bGUgPSB0ZXh0RnJhZ21lbnRJdGVyYXRvci5zdHls
ZSgpOwotICAgIGlmIChzdHlsZS5icmVha1NwYWNlcykgewotICAgICAgICAvLyBMZWFkaW5nIHdo
aXRlc3BhY2UgY3JlYXRlZCBhZnRlciBicmVha2luZyB0aGUgcHJldmlvdXMgbGluZS4KLSAgICAg
ICAgLy8gQnJlYWtpbmcgYmVmb3JlIHRoZSBmaXJzdCBzcGFjZSBhZnRlciBhIHdvcmQgaXMgb25s
eSBhbGxvd2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYnJlYWstYWxsIG9yIGJyZWFrLXdvcmQuCi0g
ICAgICAgIGlmIChzdHlsZS5icmVha0ZpcnN0V29yZE9uT3ZlcmZsb3cgfHwgcHJldmlvdXNMaW5l
Lmhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpKQotICAgICAgICAgICAgcmV0dXJuIG92ZXJmbG93ZWRG
cmFnbWVudDsKLSAgICB9Ci0gICAgLy8gU3BlY2lhbCBvdmVyZmxvdyBwcmUtd3JhcCB3aGl0ZXNw
YWNlIGhhbmRsaW5nOiBza2lwIHRoZSBvdmVyZmxvd2VkIHdoaXRlc3BhY2UgKGV2ZW4gd2hlbiBz
dHlsZSBzYXlzIG5vdC1jb2xsYXBzaWJsZSkKLSAgICAvLyBpZiB3ZSBtYW5hZ2UgdG8gZml0IGF0
IGxlYXN0IG9uZSBjaGFyYWN0ZXIgb24gdGhlIHByZXZpb3VzIGxpbmUuCi0gICAgaWYgKChzdHls
ZS5jb2xsYXBzZVdoaXRlc3BhY2UgfHwgc3R5bGUud3JhcExpbmVzKSAmJiBwcmV2aW91c0xpbmUu
Zmlyc3RDaGFyYWN0ZXJGaXRzKCkpIHsKLSAgICAgICAgLy8gSWYgc2tpcHBpbmcgdGhlIHdoaXRl
c3BhY2UgcHV0cyB1cyBvbiBhIG5ld2xpbmUsIHNraXAgdGhlIG5ld2xpbmUgdG9vIGFzIHdlIGFs
cmVhZHkgd3JhcHBlZCB0aGUgbGluZS4KLSAgICAgICAgYXV0byBmaXJzdEZyYWdtZW50Q2FuZGlk
YXRlID0gY29uc3VtZUxpbmVCcmVha0lmTmVlZGVkKHRleHRGcmFnbWVudEl0ZXJhdG9yLm5leHRU
ZXh0RnJhZ21lbnQoKSwgdGV4dEZyYWdtZW50SXRlcmF0b3IsIGN1cnJlbnRMaW5lLCBydW5zLAot
ICAgICAgICAgICAgcHJlV3JhcChzdHlsZSkgPyBQcmVXcmFwTGluZUJyZWFrUnVsZTo6SWdub3Jl
IDogUHJlV3JhcExpbmVCcmVha1J1bGU6OlByZXNlcnZlKTsKLSAgICAgICAgcmV0dXJuIHNraXBX
aGl0ZXNwYWNlSWZOZWVkZWQoZmlyc3RGcmFnbWVudENhbmRpZGF0ZSwgdGV4dEZyYWdtZW50SXRl
cmF0b3IpOwotICAgIH0KLSAgICByZXR1cm4gc2tpcFdoaXRlc3BhY2VJZk5lZWRlZChvdmVyZmxv
d2VkRnJhZ21lbnQsIHRleHRGcmFnbWVudEl0ZXJhdG9yKTsKLX0KLQotc3RhdGljIHZvaWQgZm9y
Y2VGcmFnbWVudFRvTGluZShMaW5lU3RhdGUmIGxpbmUsIFRleHRGcmFnbWVudEl0ZXJhdG9yJiB0
ZXh0RnJhZ21lbnRJdGVyYXRvciwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIGNvbnN0IFRleHRG
cmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIGZyYWdtZW50KQotewotICAgIGxpbmUuYXBw
ZW5kRnJhZ21lbnRBbmRDcmVhdGVSdW5JZk5lZWRlZChmcmFnbWVudCwgcnVucyk7Ci0gICAgLy8g
Q2hlY2sgaWYgdGhlcmUgYXJlIG1vcmUgZnJhZ21lbnRzIHRvIGFkZCB0byB0aGUgY3VycmVudCBs
aW5lLgotICAgIGF1dG8gbmV4dEZyYWdtZW50ID0gdGV4dEZyYWdtZW50SXRlcmF0b3IubmV4dFRl
eHRGcmFnbWVudCgpOwotICAgIGlmIChmcmFnbWVudC5vdmVybGFwc1RvTmV4dFJlbmRlcmVyKCkp
IHsKLSAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgIGlmIChuZXh0RnJhZ21lbnQu
dHlwZSgpICE9IGZyYWdtZW50LnR5cGUoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGxpbmUuYXBwZW5kRnJhZ21lbnRBbmRDcmVhdGVSdW5JZk5lZWRlZChuZXh0RnJhZ21l
bnQsIHJ1bnMpOwotICAgICAgICAgICAgLy8gRG9lcyBpdCBvdmVybGFwIHRvIHRoZSBuZXh0IHNl
Z21lbnQ/Ci0gICAgICAgICAgICBpZiAoIW5leHRGcmFnbWVudC5vdmVybGFwc1RvTmV4dFJlbmRl
cmVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgbmV4dEZyYWdtZW50
ID0gdGV4dEZyYWdtZW50SXRlcmF0b3IubmV4dFRleHRGcmFnbWVudCgpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIC8vIFdoZW4gdGhlIGZvcmNlZCBmcmFnbWVudCBpcyBmb2xsb3dlZCBieSBlaXRo
ZXIgd2hpdGVzcGFjZSBhbmQvb3IgbGluZSBicmVhaywgY29uc3VtZSB0aGVtIHRvbywgb3RoZXJ3
aXNlIHdlIGVuZCB1cCB3aXRoIGFuIGV4dHJhIHdoaXRlc3BhY2UgYW5kL29yIGxpbmUgYnJlYWsu
Ci0gICAgbmV4dEZyYWdtZW50ID0gc2tpcFdoaXRlc3BhY2VJZk5lZWRlZChuZXh0RnJhZ21lbnQs
IHRleHRGcmFnbWVudEl0ZXJhdG9yKTsKLSAgICBuZXh0RnJhZ21lbnQgPSBjb25zdW1lTGluZUJy
ZWFrSWZOZWVkZWQobmV4dEZyYWdtZW50LCB0ZXh0RnJhZ21lbnRJdGVyYXRvciwgbGluZSwgcnVu
cyk7Ci0gICAgbGluZS5zZXRPdmVyZmxvd2VkRnJhZ21lbnQobmV4dEZyYWdtZW50KTsKLX0KLQot
c3RhdGljIGJvb2wgY3JlYXRlTGluZVJ1bnMoTGluZVN0YXRlJiBsaW5lLCBjb25zdCBMaW5lU3Rh
dGUmIHByZXZpb3VzTGluZSwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIFRleHRGcmFnbWVudEl0
ZXJhdG9yJiB0ZXh0RnJhZ21lbnRJdGVyYXRvcikKLXsKLSAgICBjb25zdCBhdXRvJiBzdHlsZSA9
IHRleHRGcmFnbWVudEl0ZXJhdG9yLnN0eWxlKCk7Ci0gICAgYm9vbCBsaW5lQ2FuQmVXcmFwcGVk
ID0gc3R5bGUud3JhcExpbmVzIHx8IHN0eWxlLmJyZWFrRmlyc3RXb3JkT25PdmVyZmxvdyB8fCBz
dHlsZS5icmVha0FueVdvcmRPbk92ZXJmbG93OwotICAgIGF1dG8gZnJhZ21lbnQgPSBmaXJzdEZy
YWdtZW50KHRleHRGcmFnbWVudEl0ZXJhdG9yLCBsaW5lLCBwcmV2aW91c0xpbmUsIHJ1bnMpOwot
ICAgIHdoaWxlIChmcmFnbWVudC50eXBlKCkgIT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRG
cmFnbWVudDo6Q29udGVudEVuZCkgewotICAgICAgICAvLyBIYXJkIGFuZCBzb2Z0IGxpbmVicmVh
a3MuCi0gICAgICAgIGlmIChmcmFnbWVudC5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICAgICAv
LyBBZGQgdGhlIG5ldyBsaW5lIGZyYWdtZW50IG9ubHkgaWYgdGhlcmUncyBub3RoaW5nIG9uIHRo
ZSBsaW5lLiAob3RoZXJ3aXNlIHRoZSBleHRyYSBuZXcgbGluZSBjaGFyYWN0ZXIgd291bGQgc2hv
dyB1cCBhdCB0aGUgZW5kIG9mIHRoZSBjb250ZW50LikKLSAgICAgICAgICAgIGlmIChsaW5lLmlz
RW1wdHkoKSB8fCBmcmFnbWVudC50eXBlKCkgPT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRG
cmFnbWVudDo6SGFyZExpbmVCcmVhayB8fCBwcmVXcmFwKHN0eWxlKSB8fCBzdHlsZS5wcmVzZXJ2
ZU5ld2xpbmUpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3R5bGUudGV4dEFsaWduID09IFRleHRB
bGlnbk1vZGU6OlJpZ2h0IHx8IHN0eWxlLnRleHRBbGlnbiA9PSBUZXh0QWxpZ25Nb2RlOjpXZWJL
aXRSaWdodCkKLSAgICAgICAgICAgICAgICAgICAgbGluZS5yZW1vdmVUcmFpbGluZ1doaXRlc3Bh
Y2UocnVucyk7Ci0gICAgICAgICAgICAgICAgbGluZS5hcHBlbmRGcmFnbWVudEFuZENyZWF0ZVJ1
bklmTmVlZGVkKGZyYWdtZW50LCBydW5zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsaW5lQ2FuQmVXcmFwcGVkICYmICFsaW5lLmZp
dHMoZnJhZ21lbnQud2lkdGgoKSkpIHsKLSAgICAgICAgICAgIC8vIE92ZXJmbG93IHdyYXBwaW5n
IGJlaGF2aW91cjoKLSAgICAgICAgICAgIC8vIDEuIFdoaXRlc2FwY2UgY29sbGFwc2Ugb246IHdo
aXRlc3BhY2UgaXMgc2tpcHBlZC4gSnVtcCB0byBuZXh0IGxpbmUuCi0gICAgICAgICAgICAvLyAy
LiBXaGl0ZXNwYWNlIGNvbGxhcHNlIG9mZjogd2hpdGVzcGFjZSBpcyB3cmFwcGVkLgotICAgICAg
ICAgICAgLy8gMy4gRmlyc3QsIG5vbi13aGl0ZXNwYWNlIGZyYWdtZW50IGlzIGVpdGhlciB3cmFw
cGVkIG9yIGtlcHQgb24gdGhlIGxpbmUuIChkZXBlbmRzIG9uIG92ZXJmbG93LXdyYXApCi0gICAg
ICAgICAgICAvLyA1LiBOb24td2hpdGVzcGFjZSBmcmFnbWVudCB3aGVuIHRoZXJlJ3MgYWxyZWFk
eSBhbm90aGVyIGZyYWdtZW50IG9uIHRoZSBsaW5lIGVpdGhlciBnZXRzIHdyYXBwZWQgKHdvcmQt
YnJlYWs6IGJyZWFrLWFsbCkKLSAgICAgICAgICAgIC8vIG9yIGdldHMgcHVzaGVkIHRvIHRoZSBu
ZXh0IGxpbmUuCi0gICAgICAgICAgICBib29sIGVtcHR5TGluZSA9IGxpbmUuaXNFbXB0eSgpOwot
ICAgICAgICAgICAgLy8gV2hpdGVzcGFjZSBmcmFnbWVudC4KLSAgICAgICAgICAgIGlmIChmcmFn
bWVudC50eXBlKCkgPT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6V2hpdGVz
cGFjZSkgewotICAgICAgICAgICAgICAgIGlmIChzdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2UpIHsK
LSAgICAgICAgICAgICAgICAgICAgLy8gUHVzaCBjb2xsYXBhc2VkIHdoaXRlc3BhY2UgdG8gdGhl
IG5leHQgbGluZS4KLSAgICAgICAgICAgICAgICAgICAgbGluZS5zZXRPdmVyZmxvd2VkRnJhZ21l
bnQoZnJhZ21lbnQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaWYgKHN0eWxlLmJyZWFrU3BhY2VzICYmIGxpbmUuaGFzV2hp
dGVzcGFjZUZyYWdtZW50cygpICYmIGZyYWdtZW50Lmxlbmd0aCgpID09IDEpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gQnJlYWtpbmcgYmVmb3JlIHRoZSBmaXJzdCBzcGFjZSBhZnRlciBhIHdv
cmQgaXMgbm90IGFsbG93ZWQgaWYgdGhlcmUgYXJlIHByZXZpb3VzIGJyZWFraW5nIG9wcG9ydHVu
aXRpZXMgaW4gdGhlIGxpbmUuCi0gICAgICAgICAgICAgICAgICAgIHRleHRGcmFnbWVudEl0ZXJh
dG9yLnJldmVydFRvRW5kT2ZGcmFnbWVudChsaW5lLnJldmVydFRvTGFzdENvbXBsZXRlRnJhZ21l
bnQocnVucykpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaWYgKHByZVdyYXAoc3R5bGUpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGxpbmUuYXBwZW5kRnJhZ21lbnRBbmRDcmVhdGVSdW5JZk5lZWRlZChmcmFnbWVudCwgcnVu
cyk7Ci0gICAgICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gdGV4dEZyYWdtZW50SXRlcmF0b3Iu
bmV4dFRleHRGcmFnbWVudChsaW5lLndpZHRoKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
ZnJhZ21lbnQuaXNMaW5lQnJlYWsoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgICAgICBsaW5lLnNldE92ZXJmbG93ZWRGcmFnbWVudChmcmFnbWVu
dCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAvLyBTcGxpdCB0aGUgd2hpdGVzcGFjZTsgbGVmdCBwYXJ0IHN0YXlzIG9uIHRo
aXMgbGluZSwgcmlnaHQgaXMgcHVzaGVkIHRvIG5leHQgbGluZS4KLSAgICAgICAgICAgICAgICBs
aW5lLnNldE92ZXJmbG93ZWRGcmFnbWVudChzcGxpdEZyYWdtZW50VG9GaXRMaW5lKGZyYWdtZW50
LCBsaW5lLCB0ZXh0RnJhZ21lbnRJdGVyYXRvcikpOwotICAgICAgICAgICAgICAgIGxpbmUuYXBw
ZW5kRnJhZ21lbnRBbmRDcmVhdGVSdW5JZk5lZWRlZChmcmFnbWVudCwgcnVucyk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBOb24td2hpdGVz
cGFjZSBmcmFnbWVudC4gKCFzdHlsZS53cmFwTGluZXM6IGJ1ZzEzODEwMihwcmVzZXJ2ZSBleGlz
dGluZyBiZWhhdmlvcikKLSAgICAgICAgICAgIGlmICgoKGVtcHR5TGluZSAmJiBzdHlsZS5icmVh
a0ZpcnN0V29yZE9uT3ZlcmZsb3cpIHx8IHN0eWxlLmJyZWFrQW55V29yZE9uT3ZlcmZsb3cpIHx8
ICFzdHlsZS53cmFwTGluZXMpIHsKLSAgICAgICAgICAgICAgICAvLyBTcGxpdCB0aGUgZnJhZ21l
bnQ7IChtb2RpZmllZClmcmFnbWVudCBzdGF5cyBvbiB0aGlzIGxpbmUsIG92ZXJmbG93ZWRGcmFn
bWVudCBpcyBwdXNoZWQgdG8gbmV4dCBsaW5lLgotICAgICAgICAgICAgICAgIGxpbmUuc2V0T3Zl
cmZsb3dlZEZyYWdtZW50KHNwbGl0RnJhZ21lbnRUb0ZpdExpbmUoZnJhZ21lbnQsIGxpbmUsIHRl
eHRGcmFnbWVudEl0ZXJhdG9yKSk7Ci0gICAgICAgICAgICAgICAgbGluZS5hcHBlbmRGcmFnbWVu
dEFuZENyZWF0ZVJ1bklmTmVlZGVkKGZyYWdtZW50LCBydW5zKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVChmcmFnbWVudC50eXBlKCkg
PT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6Tm9uV2hpdGVzcGFjZSk7Ci0g
ICAgICAgICAgICAvLyBGaW5kIG91dCBpZiB0aGlzIG5vbi13aGl0ZXNwYWNlIGZyYWdtZW50IGhh
cyBhIGh5cGhlbiB3aGVyZSB3ZSBjYW4gYnJlYWsuCi0gICAgICAgICAgICBpZiAoc3R5bGUuc2hv
dWxkSHlwaGVuYXRlKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBmcmFnbWVudFRvU3BsaXQgPSBm
cmFnbWVudDsKLSAgICAgICAgICAgICAgICAvLyBTcGxpdCBhbmQgY2hlY2sgaWYgd2UgYWN0dWFs
bHkgZW5kZWQgdXAgd2l0aCBhIGh5cGhlbi4KLSAgICAgICAgICAgICAgICBhdXRvIG92ZXJmbG93
RnJhZ21lbnQgPSBzcGxpdEZyYWdtZW50VG9GaXRMaW5lKGZyYWdtZW50VG9TcGxpdCwgbGluZSwg
dGV4dEZyYWdtZW50SXRlcmF0b3IpOwotICAgICAgICAgICAgICAgIGlmIChmcmFnbWVudFRvU3Bs
aXQuaGFzSHlwaGVuKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbGluZS5zZXRPdmVyZmxvd2Vk
RnJhZ21lbnQob3ZlcmZsb3dGcmFnbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmUuYXBw
ZW5kRnJhZ21lbnRBbmRDcmVhdGVSdW5JZk5lZWRlZChmcmFnbWVudFRvU3BsaXQsIHJ1bnMpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgLy8gTm8gaHlwaGVuLCBubyBzcGxpdC4KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IC8vIE5vbi1icmVha2FibGUgbm9uLXdoaXRlc3BhY2UgZmlyc3QgZnJhZ21lbnQuIEFkZCBpdCB0
byB0aGUgY3VycmVudCBsaW5lLiAtaXQgb3ZlcmZsb3dzIHRob3VnaC4KLSAgICAgICAgICAgIGlm
IChlbXB0eUxpbmUpIHsKLSAgICAgICAgICAgICAgICBmb3JjZUZyYWdtZW50VG9MaW5lKGxpbmUs
IHRleHRGcmFnbWVudEl0ZXJhdG9yLCBydW5zLCBmcmFnbWVudCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBOb24tYnJlYWthYmxlIG5vbi13
aGl0ZXNwYWNlIGZyYWdtZW50IHdoZW4gdGhlcmUncyBhbHJlYWR5IGNvbnRlbnQgb24gdGhlIGxp
bmUuIFB1c2ggaXQgdG8gdGhlIG5leHQgbGluZS4KLSAgICAgICAgICAgIEFTU0VSVChsaW5lLmxh
c3RGcmFnbWVudCgpLmlzVmFsaWQoKSk7Ci0gICAgICAgICAgICBpZiAobGluZS5sYXN0RnJhZ21l
bnQoKS5vdmVybGFwc1RvTmV4dFJlbmRlcmVyKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBDaGVj
ayBpZiB0aGlzIGZyYWdtZW50IGlzIGEgY29udGludWF0aW9uIG9mIGEgcHJldmlvdXMgc2VnbWVu
dC4gSW4gc3VjaCBjYXNlcywgd2UgbmVlZCB0byByZW1vdmUgdGhlbSBhbGwuCi0gICAgICAgICAg
ICAgICAgdGV4dEZyYWdtZW50SXRlcmF0b3IucmV2ZXJ0VG9FbmRPZkZyYWdtZW50KGxpbmUucmV2
ZXJ0VG9MYXN0Q29tcGxldGVGcmFnbWVudChydW5zKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsaW5lLnNldE92ZXJmbG93ZWRGcmFnbWVudChm
cmFnbWVudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBsaW5lLmFw
cGVuZEZyYWdtZW50QW5kQ3JlYXRlUnVuSWZOZWVkZWQoZnJhZ21lbnQsIHJ1bnMpOwotICAgICAg
ICAvLyBGaW5kIHRoZSBuZXh0IHRleHQgZnJhZ21lbnQuCi0gICAgICAgIGZyYWdtZW50ID0gdGV4
dEZyYWdtZW50SXRlcmF0b3IubmV4dFRleHRGcmFnbWVudChsaW5lLndpZHRoKCkpOwotICAgIH0K
LSAgICByZXR1cm4gKGZyYWdtZW50LnR5cGUoKSA9PSBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4
dEZyYWdtZW50OjpDb250ZW50RW5kICYmIGxpbmUub3ZlcmZsb3dlZEZyYWdtZW50KCkuaXNFbXB0
eSgpKSB8fCBsaW5lLm92ZXJmbG93ZWRGcmFnbWVudCgpLnR5cGUoKSA9PSBUZXh0RnJhZ21lbnRJ
dGVyYXRvcjo6VGV4dEZyYWdtZW50OjpDb250ZW50RW5kOwotfQotCi1zdGF0aWMgRXhwYW5zaW9u
QmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IoYm9vbCBpc0FmdGVyRXhwYW5zaW9uLCBib29sIGxh
c3RSdW5PbkxpbmUpCi17Ci0gICAgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3I7
Ci0gICAgZXhwYW5zaW9uQmVoYXZpb3IgPSBpc0FmdGVyRXhwYW5zaW9uID8gRm9yYmlkTGVmdEV4
cGFuc2lvbiA6IEFsbG93TGVmdEV4cGFuc2lvbjsKLSAgICBleHBhbnNpb25CZWhhdmlvciB8PSBs
YXN0UnVuT25MaW5lID8gRm9yYmlkUmlnaHRFeHBhbnNpb24gOiBBbGxvd1JpZ2h0RXhwYW5zaW9u
OwotICAgIHJldHVybiBleHBhbnNpb25CZWhhdmlvcjsKLX0KLQotc3RhdGljIHZvaWQganVzdGlm
eVJ1bnMoY29uc3QgTGluZVN0YXRlJiBsaW5lLCBMYXlvdXQ6OlJ1blZlY3RvciYgcnVucywgdW5z
aWduZWQgZmlyc3RSdW5JbmRleCkKLXsKLSAgICBBU1NFUlQocnVucy5zaXplKCkpOwotICAgIGF1
dG8gd2lkdGhUb0Rpc3RyaWJ1dGUgPSBsaW5lLmF2YWlsYWJsZVdpZHRoKCkgLSBsaW5lLndpZHRo
KCk7Ci0gICAgaWYgKHdpZHRoVG9EaXN0cmlidXRlIDw9IDApCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGF1dG8gbGFzdFJ1bkluZGV4ID0gcnVucy5zaXplKCkgLSAxOwotICAgIEFTU0VSVChmaXJz
dFJ1bkluZGV4IDw9IGxhc3RSdW5JbmRleCk7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjx1bnNpZ25l
ZCwgRXhwYW5zaW9uQmVoYXZpb3I+PiBleHBhbnNpb25PcHBvcnR1bml0eUxpc3Q7Ci0gICAgdW5z
aWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudE9uVGhpc0xpbmUgPSAwOwotICAgIGF1dG8g
aXNBZnRlckV4cGFuc2lvbiA9IHRydWU7Ci0gICAgZm9yIChhdXRvIGkgPSBmaXJzdFJ1bkluZGV4
OyBpIDw9IGxhc3RSdW5JbmRleDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IGF1dG8mIHJ1biA9IHJ1
bnMuYXQoaSk7Ci0gICAgICAgIHVuc2lnbmVkIG9wcG9ydHVuaXR5Q291bnRJblJ1biA9IDA7Ci0g
ICAgICAgIHN0ZDo6dGllKG9wcG9ydHVuaXR5Q291bnRJblJ1biwgaXNBZnRlckV4cGFuc2lvbikg
PSBsaW5lLmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQocnVuLnN0YXJ0LCBydW4uZW5kKTsKLSAg
ICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlMaXN0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihvcHBv
cnR1bml0eUNvdW50SW5SdW4sIGV4cGFuc2lvbkJlaGF2aW9yKGlzQWZ0ZXJFeHBhbnNpb24sIGkg
PT0gbGFzdFJ1bkluZGV4KSkpOwotICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50T25U
aGlzTGluZSArPSBvcHBvcnR1bml0eUNvdW50SW5SdW47Ci0gICAgfQotICAgIGlmICghZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudE9uVGhpc0xpbmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFT
U0VSVChleHBhbnNpb25PcHBvcnR1bml0eUxpc3Quc2l6ZSgpID09IGxhc3RSdW5JbmRleCAtIGZp
cnN0UnVuSW5kZXggKyAxKTsKLSAgICBhdXRvIGV4cGFuc2lvbiA9IHdpZHRoVG9EaXN0cmlidXRl
IC8gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudE9uVGhpc0xpbmU7Ci0gICAgZmxvYXQgYWNjdW11
bGF0ZWRFeHBhbnNpb24gPSAwOwotICAgIGZvciAoYXV0byBpID0gZmlyc3RSdW5JbmRleDsgaSA8
PSBsYXN0UnVuSW5kZXg7ICsraSkgewotICAgICAgICBhdXRvJiBydW4gPSBydW5zLmF0KGkpOwot
ICAgICAgICB1bnNpZ25lZCBvcHBvcnR1bml0eUNvdW50SW5SdW47Ci0gICAgICAgIHN0ZDo6dGll
KG9wcG9ydHVuaXR5Q291bnRJblJ1biwgcnVuLmV4cGFuc2lvbkJlaGF2aW9yKSA9IGV4cGFuc2lv
bk9wcG9ydHVuaXR5TGlzdC5hdChpIC0gZmlyc3RSdW5JbmRleCk7Ci0gICAgICAgIHJ1bi5leHBh
bnNpb24gPSBvcHBvcnR1bml0eUNvdW50SW5SdW4gKiBleHBhbnNpb247Ci0gICAgICAgIHJ1bi5s
b2dpY2FsTGVmdCArPSBhY2N1bXVsYXRlZEV4cGFuc2lvbjsKLSAgICAgICAgcnVuLmxvZ2ljYWxS
aWdodCArPSAoYWNjdW11bGF0ZWRFeHBhbnNpb24gKyBydW4uZXhwYW5zaW9uKTsKLSAgICAgICAg
YWNjdW11bGF0ZWRFeHBhbnNpb24gKz0gcnVuLmV4cGFuc2lvbjsKLSAgICB9Ci19Ci0KLXN0YXRp
YyBUZXh0QWxpZ25Nb2RlIHRleHRBbGlnbkZvckxpbmUoY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0
b3I6OlN0eWxlJiBzdHlsZSwgYm9vbCBsYXN0TGluZSkKLXsKLSAgICAvLyBGYWxsYmFjayB0byBU
ZXh0QWxpZ25Nb2RlOjpMZWZ0IChTVEFSVCkgYWxpZ25tZW50IGZvciBub24tY29sbGFwc2FibGUg
Y29udGVudCBhbmQgZm9yIHRoZSBsYXN0IGxpbmUgYmVmb3JlIGEgZm9yY2VkIGJyZWFrIG9yIHRo
ZSBlbmQgb2YgdGhlIGJsb2NrLgotICAgIGF1dG8gdGV4dEFsaWduID0gc3R5bGUudGV4dEFsaWdu
OwotICAgIGlmICh0ZXh0QWxpZ24gPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSAmJiAoIXN0eWxl
LmNvbGxhcHNlV2hpdGVzcGFjZSB8fCBsYXN0TGluZSkpCi0gICAgICAgIHRleHRBbGlnbiA9IFRl
eHRBbGlnbk1vZGU6OkxlZnQ7Ci0gICAgcmV0dXJuIHRleHRBbGlnbjsKLX0KLQotc3RhdGljIHZv
aWQgY2xvc2VMaW5lRW5kaW5nQW5kQWRqdXN0UnVucyhMaW5lU3RhdGUmIGxpbmUsIExheW91dDo6
UnVuVmVjdG9yJiBydW5zLCBPcHRpb25hbDx1bnNpZ25lZD4gbGFzdFJ1bkluZGV4T2ZQcmV2aW91
c0xpbmUsIHVuc2lnbmVkJiBsaW5lQ291bnQsCi0gICAgY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0
b3ImIHRleHRGcmFnbWVudEl0ZXJhdG9yLCBib29sIGxhc3RMaW5lSW5GbG93KQotewotICAgIGlm
ICghcnVucy5zaXplKCkgfHwgKGxhc3RSdW5JbmRleE9mUHJldmlvdXNMaW5lICYmIHJ1bnMuc2l6
ZSgpIC0gMSA9PSBsYXN0UnVuSW5kZXhPZlByZXZpb3VzTGluZS52YWx1ZSgpKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgY29uc3QgYXV0byYgc3R5bGUgPSB0ZXh0RnJhZ21lbnRJdGVyYXRvci5z
dHlsZSgpOwotCi0gICAgaWYgKHN0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZSkKLSAgICAgICAgbGlu
ZS5yZW1vdmVUcmFpbGluZ1doaXRlc3BhY2UocnVucyk7Ci0KLSAgICBpZiAoIXJ1bnMuc2l6ZSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBBZGp1c3QgcnVucycgcG9zaXRpb24gYnkgdGFr
aW5nIGxpbmUncyBhbGlnbm1lbnQgaW50byBhY2NvdW50LgotICAgIGF1dG8gZmlyc3RSdW5JbmRl
eCA9IGxhc3RSdW5JbmRleE9mUHJldmlvdXNMaW5lID8gbGFzdFJ1bkluZGV4T2ZQcmV2aW91c0xp
bmUudmFsdWUoKSArIDEgOiAwOwotICAgIGF1dG8gbGluZUxvZ2ljYWxMZWZ0ID0gbGluZS5sb2dp
Y2FsTGVmdE9mZnNldCgpOwotICAgIGF1dG8gdGV4dEFsaWduID0gdGV4dEFsaWduRm9yTGluZShz
dHlsZSwgbGFzdExpbmVJbkZsb3cgfHwgKGxpbmUubGFzdEZyYWdtZW50KCkuaXNWYWxpZCgpICYm
IGxpbmUubGFzdEZyYWdtZW50KCkudHlwZSgpID09IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0
RnJhZ21lbnQ6OkhhcmRMaW5lQnJlYWspKTsKLQotICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9U
Ui9jc3MtdGV4dC0zLyN3aGl0ZS1zcGFjZS1waGFzZS0yCi0gICAgYm9vbCBzaG91bGRIYW5nVHJh
aWxpbmdXaGl0ZXNwYWNlID0gc3R5bGUud3JhcExpbmVzICYmIGxpbmUudHJhaWxpbmdXaGl0ZXNw
YWNlV2lkdGgoKTsKLSAgICBhdXRvIGhhbmdpbmdXaGl0ZXNwYWNlV2lkdGggPSBzaG91bGRIYW5n
VHJhaWxpbmdXaGl0ZXNwYWNlID8gbGluZS50cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpIDogMDsK
LQotICAgIGlmICh0ZXh0QWxpZ24gPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSkgewotICAgICAg
ICBqdXN0aWZ5UnVucyhsaW5lLCBydW5zLCBmaXJzdFJ1bkluZGV4KTsKLSAgICAgICAgaGFuZ2lu
Z1doaXRlc3BhY2VXaWR0aCA9IDA7Ci0gICAgfSBlbHNlCi0gICAgICAgIGxpbmVMb2dpY2FsTGVm
dCA9IGNvbXB1dGVMaW5lTGVmdChsaW5lLCB0ZXh0QWxpZ24sIGhhbmdpbmdXaGl0ZXNwYWNlV2lk
dGgpOwotCi0gICAgZm9yIChhdXRvIGkgPSBmaXJzdFJ1bkluZGV4OyBpIDwgcnVucy5zaXplKCk7
ICsraSkgewotICAgICAgICBydW5zW2ldLmxvZ2ljYWxMZWZ0ICs9IGxpbmVMb2dpY2FsTGVmdDsK
LSAgICAgICAgcnVuc1tpXS5sb2dpY2FsUmlnaHQgKz0gbGluZUxvZ2ljYWxMZWZ0OwotICAgIH0K
LQotICAgIGlmIChzaG91bGRIYW5nVHJhaWxpbmdXaGl0ZXNwYWNlICYmIGhhbmdpbmdXaGl0ZXNw
YWNlV2lkdGggPCBsaW5lLnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkpCi0gICAgICAgIHJ1bnMu
bGFzdCgpLmxvZ2ljYWxSaWdodCA9IHJ1bnMubGFzdCgpLmxvZ2ljYWxSaWdodCAtIChsaW5lLnRy
YWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkgLSBoYW5naW5nV2hpdGVzcGFjZVdpZHRoKTsKLQotICAg
IHJ1bnMubGFzdCgpLmlzRW5kT2ZMaW5lID0gdHJ1ZTsKLSAgICArK2xpbmVDb3VudDsKLX0KLQot
c3RhdGljIHZvaWQgY3JlYXRlVGV4dFJ1bnMoTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIFJlbmRl
ckJsb2NrRmxvdyYgZmxvdywgdW5zaWduZWQmIGxpbmVDb3VudCkKLXsKLSAgICBMYXlvdXRVbml0
IGJvcmRlckFuZFBhZGRpbmdCZWZvcmUgPSBmbG93LmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKTsK
LSAgICBMYXlvdXRVbml0IGxpbmVIZWlnaHQgPSBsaW5lSGVpZ2h0RnJvbUZsb3coZmxvdyk7Ci0g
ICAgTGluZVN0YXRlIGxpbmU7Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZQcmVjZWRpbmdMaW5lc1dp
dGhIeXBoZW4gPSAwOwotICAgIGJvb2wgaXNFbmRPZkNvbnRlbnQgPSBmYWxzZTsKLSAgICBUZXh0
RnJhZ21lbnRJdGVyYXRvciB0ZXh0RnJhZ21lbnRJdGVyYXRvciA9IFRleHRGcmFnbWVudEl0ZXJh
dG9yKGZsb3cpOwotICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBsYXN0UnVuSW5kZXhPZlByZXZpb3Vz
TGluZTsKLSAgICBkbyB7Ci0gICAgICAgIGZsb3cuc2V0TG9naWNhbEhlaWdodChsaW5lSGVpZ2h0
ICogbGluZUNvdW50ICsgYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSk7Ci0gICAgICAgIExpbmVTdGF0
ZSBwcmV2aW91c0xpbmUgPSBsaW5lOwotICAgICAgICBsaW5lID0gTGluZVN0YXRlKCk7Ci0gICAg
ICAgIHVwZGF0ZUxpbmVDb25zdHJhaW5zKGZsb3csIGxpbmUsIHByZXZpb3VzTGluZSwgbnVtYmVy
T2ZQcmVjZWRpbmdMaW5lc1dpdGhIeXBoZW4sIHRleHRGcmFnbWVudEl0ZXJhdG9yLnN0eWxlKCks
ICFsaW5lQ291bnQpOwotICAgICAgICBpc0VuZE9mQ29udGVudCA9IGNyZWF0ZUxpbmVSdW5zKGxp
bmUsIHByZXZpb3VzTGluZSwgcnVucywgdGV4dEZyYWdtZW50SXRlcmF0b3IpOwotICAgICAgICBj
bG9zZUxpbmVFbmRpbmdBbmRBZGp1c3RSdW5zKGxpbmUsIHJ1bnMsIGxhc3RSdW5JbmRleE9mUHJl
dmlvdXNMaW5lLCBsaW5lQ291bnQsIHRleHRGcmFnbWVudEl0ZXJhdG9yLCBpc0VuZE9mQ29udGVu
dCk7Ci0gICAgICAgIGlmIChydW5zLnNpemUoKSkKLSAgICAgICAgICAgIGxhc3RSdW5JbmRleE9m
UHJldmlvdXNMaW5lID0gcnVucy5zaXplKCkgLSAxOwotICAgIH0gd2hpbGUgKCFpc0VuZE9mQ29u
dGVudCk7Ci19Ci0KLVJlZjxMYXlvdXQ+IGNyZWF0ZShSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCi17
Ci0gICAgdW5zaWduZWQgbGluZUNvdW50ID0gMDsKLSAgICBMYXlvdXQ6OlJ1blZlY3RvciBydW5z
OwotICAgIGNyZWF0ZVRleHRSdW5zKHJ1bnMsIGZsb3csIGxpbmVDb3VudCk7Ci0gICAgcmV0dXJu
IExheW91dDo6Y3JlYXRlKHJ1bnMsIGxpbmVDb3VudCwgZmxvdyk7Ci19Ci0KLVJlZjxMYXlvdXQ+
IExheW91dDo6Y3JlYXRlKGNvbnN0IFJ1blZlY3RvciYgcnVuVmVjdG9yLCB1bnNpZ25lZCBsaW5l
Q291bnQsIGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgYmxvY2tGbG93KQotewotICAgIHZvaWQqIHNs
b3QgPSBXVEY6OmZhc3RNYWxsb2Moc2l6ZW9mKExheW91dCkgKyBzaXplb2YoUnVuKSAqIHJ1blZl
Y3Rvci5zaXplKCkpOwotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IChOb3ROdWxsLCBzbG90KSBM
YXlvdXQocnVuVmVjdG9yLCBsaW5lQ291bnQsIGJsb2NrRmxvdykpOwotfQotCi1MYXlvdXQ6Okxh
eW91dChjb25zdCBSdW5WZWN0b3ImIHJ1blZlY3RvciwgdW5zaWduZWQgbGluZUNvdW50LCBjb25z
dCBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrRmxvdykKLSAgICA6IG1fbGluZUNvdW50KGxpbmVDb3Vu
dCkKLSAgICAsIG1fcnVuQ291bnQocnVuVmVjdG9yLnNpemUoKSkKLSAgICAsIG1fYmxvY2tGbG93
UmVuZGVyZXIoYmxvY2tGbG93KQotewotICAgIG1lbWNweShtX3J1bnMsIHJ1blZlY3Rvci5kYXRh
KCksIG1fcnVuQ291bnQgKiBzaXplb2YoUnVuKSk7Ci19Ci0KLWNvbnN0IFJ1blJlc29sdmVyJiBM
YXlvdXQ6OnJ1blJlc29sdmVyKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcnVuUmVzb2x2ZXIpCi0g
ICAgICAgIG1fcnVuUmVzb2x2ZXIgPSBtYWtlVW5pcXVlPFJ1blJlc29sdmVyPihtX2Jsb2NrRmxv
d1JlbmRlcmVyLCAqdGhpcyk7Ci0gICAgcmV0dXJuICptX3J1blJlc29sdmVyOwotfQotCi1MYXlv
dXQ6On5MYXlvdXQoKQotewotICAgIHNpbXBsZUxpbmVMYXlvdXRXaWxsQmVEZWxldGVkKCp0aGlz
KTsKLX0KLQotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkMTY5MjZjZWMzYi4uMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmgKKysr
IC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5l
TGF5b3V0Q292ZXJhZ2UuaCIKLSNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKLSNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotI2lmIENPTVBJTEVSKE1TVkMpCi0jcHJhZ21hIHdhcm5pbmcocHVz
aCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MjAwKSAvLyBEaXNhYmxlICJ6ZXJvLXNpemVk
IGFycmF5IGluIHN0cnVjdC91bmlvbiIgd2FybmluZwotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgUmVuZGVyQmxvY2tGbG93OwotCi1uYW1lc3BhY2UgU2ltcGxlTGluZUxh
eW91dCB7Ci0KLWNsYXNzIFJ1blJlc29sdmVyOwotCi1ib29sIGNhblVzZUZvcihjb25zdCBSZW5k
ZXJCbG9ja0Zsb3cmKTsKLWJvb2wgY2FuVXNlRm9yQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5k
ZXJCbG9ja0Zsb3cmLCBTdHlsZURpZmZlcmVuY2UpOwotQXZvaWRhbmNlUmVhc29uRmxhZ3MgY2Fu
VXNlRm9yV2l0aFJlYXNvbihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmLCBJbmNsdWRlUmVhc29ucyk7
Ci0KLXN0cnVjdCBSdW4gewotI2lmIENPTVBJTEVSKE1TVkMpCi0gICAgUnVuKCkgeyB9Ci0jZW5k
aWYKLSAgICBSdW4odW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgZmxvYXQgbG9naWNhbExl
ZnQsIGZsb2F0IGxvZ2ljYWxSaWdodCwgYm9vbCBpc0VuZE9mTGluZSwgYm9vbCBoYXNIeXBoZW4s
IGJvb2wgaXNMaW5lQnJlYWspCi0gICAgICAgIDogZW5kKGVuZCkKLSAgICAgICAgLCBzdGFydChz
dGFydCkKLSAgICAgICAgLCBpc0VuZE9mTGluZShpc0VuZE9mTGluZSkKLSAgICAgICAgLCBoYXNI
eXBoZW4oaGFzSHlwaGVuKQotICAgICAgICAsIGlzTGluZUJyZWFrKGlzTGluZUJyZWFrKQotICAg
ICAgICAsIGxvZ2ljYWxMZWZ0KGxvZ2ljYWxMZWZ0KQotICAgICAgICAsIGxvZ2ljYWxSaWdodChs
b2dpY2FsUmlnaHQpCi0gICAgeyB9Ci0KLSAgICB1bnNpZ25lZCBlbmQ7Ci0gICAgdW5zaWduZWQg
c3RhcnQgOiAyOTsKLSAgICB1bnNpZ25lZCBpc0VuZE9mTGluZSA6IDE7Ci0gICAgdW5zaWduZWQg
aGFzSHlwaGVuIDogMTsKLSAgICB1bnNpZ25lZCBpc0xpbmVCcmVhayA6IDE7Ci0gICAgZmxvYXQg
bG9naWNhbExlZnQ7Ci0gICAgZmxvYXQgbG9naWNhbFJpZ2h0OwotICAgIC8vIFRPRE86IE1vdmUg
dGhlc2Ugb3B0aW9uYWwgaXRlbXMgb3V0IG9mIFNpbXBsZUxpbmVMYXlvdXQ6OlJ1biB0byBhIHN1
cHBsZW1lbnRhcnkgc3RydWN0dXJlLgotICAgIGZsb2F0IGV4cGFuc2lvbiB7IDAgfTsKLSAgICBF
eHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvciB7IEZvcmJpZExlZnRFeHBhbnNpb24g
fCBGb3JiaWRSaWdodEV4cGFuc2lvbiB9OwotfTsKLQotc3RydWN0IFNpbXBsZUxpbmVTdHJ1dCB7
Ci0gICAgdW5zaWduZWQgbGluZUJyZWFrOwotICAgIGZsb2F0IG9mZnNldDsKLX07Ci0KLWNsYXNz
IExheW91dCA6IHB1YmxpYyBSZWZDb3VudGVkPExheW91dD4gewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIHVzaW5nIFJ1blZlY3RvciA9IFZlY3RvcjxSdW4sIDEw
PjsKLSAgICB1c2luZyBTaW1wbGVMaW5lU3RydXRzID0gVmVjdG9yPFNpbXBsZUxpbmVTdHJ1dCwg
ND47Ci0gICAgc3RhdGljIFJlZjxMYXlvdXQ+IGNyZWF0ZShjb25zdCBSdW5WZWN0b3ImLCB1bnNp
Z25lZCBsaW5lQ291bnQsIGNvbnN0IFJlbmRlckJsb2NrRmxvdyYpOwotCi0gICAgfkxheW91dCgp
OwotCi0gICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ291bnQ7
IH0KLQotICAgIHVuc2lnbmVkIHJ1bkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9ydW5Db3VudDsg
fQotICAgIGNvbnN0IFJ1biYgcnVuQXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9ydW5z
W2ldOyB9Ci0KLSAgICB2b2lkIHNldElzUGFnaW5hdGVkKCkgeyBtX2lzUGFnaW5hdGVkID0gdHJ1
ZTsgfQotICAgIGJvb2wgaXNQYWdpbmF0ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUGFnaW5hdGVk
OyB9Ci0gICAgYm9vbCBoYXNMaW5lU3RydXRzKCkgY29uc3QgeyByZXR1cm4gIW1fbGluZVN0cnV0
cy5pc0VtcHR5KCk7IH0KLSAgICB2b2lkIHNldExpbmVTdHJ1dHMoU2ltcGxlTGluZVN0cnV0cyYm
IGxpbmVTdHJ1dHMpIHsgbV9saW5lU3RydXRzID0gbGluZVN0cnV0czsgfQotICAgIGNvbnN0IFNp
bXBsZUxpbmVTdHJ1dHMmIHN0cnV0cygpIGNvbnN0IHsgcmV0dXJuIG1fbGluZVN0cnV0czsgfQot
ICAgIGNvbnN0IFJ1blJlc29sdmVyJiBydW5SZXNvbHZlcigpIGNvbnN0OwotCi1wcml2YXRlOgot
ICAgIExheW91dChjb25zdCBSdW5WZWN0b3ImLCB1bnNpZ25lZCBsaW5lQ291bnQsIGNvbnN0IFJl
bmRlckJsb2NrRmxvdyYpOwotCi0gICAgdW5zaWduZWQgbV9saW5lQ291bnQ7Ci0gICAgdW5zaWdu
ZWQgbV9ydW5Db3VudDsKLSAgICBib29sIG1faXNQYWdpbmF0ZWQgeyBmYWxzZSB9OwotICAgIFNp
bXBsZUxpbmVTdHJ1dHMgbV9saW5lU3RydXRzOwotICAgIGNvbnN0IFJlbmRlckJsb2NrRmxvdyYg
bV9ibG9ja0Zsb3dSZW5kZXJlcjsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxSdW5SZXNv
bHZlcj4gbV9ydW5SZXNvbHZlcjsKLSAgICBSdW4gbV9ydW5zWzBdOwotfTsKLQotUmVmPExheW91
dD4gY3JlYXRlKFJlbmRlckJsb2NrRmxvdyYpOwotCi19Ci19Ci0KLSNpZiBDT01QSUxFUihNU1ZD
KQotI3ByYWdtYSB3YXJuaW5nKHBvcCkKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNTc2ODExNjM4MjgwLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwzNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuaCIKLQotI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKLSNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJDaGlsZEl0
ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0Lmgi
Ci0jaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci1uYW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7Ci0KLSNpZm5kZWYgTkRFQlVHCi1zdGF0aWMg
dm9pZCBwcmludFJlYXNvbihBdm9pZGFuY2VSZWFzb24gcmVhc29uLCBUZXh0U3RyZWFtJiBzdHJl
YW0pCi17Ci0gICAgc3dpdGNoIChyZWFzb24pIHsKLSAgICBjYXNlIEZsb3dJc0luc2lkZUFOb25N
dWx0aUNvbHVtblRocmVhZDoKLSAgICAgICAgc3RyZWFtIDw8ICJmbG93IGlzIGluc2lkZSBhIG5v
bi1tdWx0aWNvbHVtbiBjb250YWluZXIiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dI
YXNIb3Jpem9uYWxXcml0aW5nTW9kZToKLSAgICAgICAgc3RyZWFtIDw8ICJob3Jpem9udGFsIHdy
aXRpbmcgbW9kZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc091dGxpbmU6Ci0g
ICAgICAgIHN0cmVhbSA8PCAib3V0bGluZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxv
d0lzUnVieToKLSAgICAgICAgc3RyZWFtIDw8ICJydWJ5IjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGbG93SGFzSGFuZ2luZ1B1bmN0dWF0aW9uOgotICAgICAgICBzdHJlYW0gPDwgImhhbmdp
bmcgcHVuY3R1YXRpb24iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dJc1BhZ2luYXRl
ZDoKLSAgICAgICAgc3RyZWFtIDw8ICJwYWdpbmF0ZWQiOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZsb3dIYXNUZXh0T3ZlcmZsb3c6Ci0gICAgICAgIHN0cmVhbSA8PCAidGV4dC1vdmVyZmxv
dyI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0lzRGVwcmljYXRlZEZsZXhCb3g6Ci0g
ICAgICAgIHN0cmVhbSA8PCAiZGVwcmljYXRlZEZsZXhCb3giOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZsb3dQYXJlbnRJc1BsYWNlaG9sZGVyRWxlbWVudDoKLSAgICAgICAgc3RyZWFtIDw8
ICJwbGFjZWhvbGRlciBlbGVtZW50IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93UGFy
ZW50SXNUZXh0QXJlYVdpdGhXcmFwcGluZzoKLSAgICAgICAgc3RyZWFtIDw8ICJ3cmFwcGluZyB0
ZXh0YXJlYSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc05vblN1cHBvcnRlZENo
aWxkOgotICAgICAgICBzdHJlYW0gPDwgIm5lc3RlZCByZW5kZXJlcnMiOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZsb3dIYXNVbnN1cHBvcnRlZEZsb2F0OgotICAgICAgICBzdHJlYW0gPDwg
ImNvbXBsaWNhdGVkIGZsb2F0IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzVW5z
dXBwb3J0ZWRVbmRlcmxpbmVEZWNvcmF0aW9uOgotICAgICAgICBzdHJlYW0gPDwgInRleHQtdW5k
ZXJsaW5lLXBvc2l0aW9uOiB1bmRlciI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hh
c0p1c3RpZmllZE5vbkxhdGluVGV4dDoKLSAgICAgICAgc3RyZWFtIDw8ICJ0ZXh0LWFsaWduOiBq
dXN0aWZ5IHdpdGggbm9uLWxhdGluIHRleHQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZs
b3dIYXNPdmVyZmxvd05vdFZpc2libGU6Ci0gICAgICAgIHN0cmVhbSA8PCAib3ZlcmZsb3c6IGhp
ZGRlbiB8IHNjcm9sbCB8IGF1dG8iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNX
ZWJLaXROQlNQTW9kZToKLSAgICAgICAgc3RyZWFtIDw8ICItd2Via2l0LW5ic3AtbW9kZTogc3Bh
Y2UiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dJc05vdExUUjoKLSAgICAgICAgc3Ry
ZWFtIDw8ICJkaXIgaXMgbm90IExUUiI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hh
c0xpbmVCb3hDb250YWluUHJvcGVydHk6Ci0gICAgICAgIHN0cmVhbSA8PCAibGluZS1ib3gtY29u
dGFpbiB2YWx1ZSBpbmRpY2F0ZXMgdmFyaWFibGUgbGluZSBoZWlnaHQiOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZsb3dJc05vdFRvcFRvQm90dG9tOgotICAgICAgICBzdHJlYW0gPDwgIm5v
biB0b3AtdG8tYm90dG9tIGZsb3ciOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNM
aW5lQnJlYWs6Ci0gICAgICAgIHN0cmVhbSA8PCAibGluZS1icmVhayBwcm9wZXJ0eSI7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc05vbk5vcm1hbFVuaWNvZGVCaURpOgotICAgICAg
ICBzdHJlYW0gPDwgIm5vbi1ub3JtYWwgVW5pY29kZSBiaWRpIjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBGbG93SGFzUlRMT3JkZXJpbmc6Ci0gICAgICAgIHN0cmVhbSA8PCAiLXdlYmtpdC1y
dGwtb3JkZXJpbmciOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNMaW5lQWxpZ25F
ZGdlczoKLSAgICAgICAgc3RyZWFtIDw8ICItd2Via2l0LWxpbmUtYWxpZ24gZWRnZXMiOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dIYXNMaW5lU25hcDoKLSAgICAgICAgc3RyZWFtIDw8
ICItd2Via2l0LWxpbmUtc25hcCBwcm9wZXJ0eSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Rmxvd0hhc1RleHRFbXBoYXNpc0ZpbGxPck1hcms6Ci0gICAgICAgIHN0cmVhbSA8PCAidGV4dC1l
bXBoYXNpcyAoZmlsbC9tYXJrKSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc1Bz
ZXVkb0ZpcnN0TGluZToKLSAgICAgICAgc3RyZWFtIDw8ICJmaXJzdC1saW5lIjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzUHNldWRvRmlyc3RMZXR0ZXI6Ci0gICAgICAgIHN0cmVh
bSA8PCAiZmlyc3QtbGV0dGVyIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFzVGV4
dENvbWJpbmU6Ci0gICAgICAgIHN0cmVhbSA8PCAidGV4dCBjb21iaW5lIjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBGbG93SGFzVGV4dEZpbGxCb3g6Ci0gICAgICAgIHN0cmVhbSA8PCAiYmFj
a2dyb3VuZC1jb2xvciAodGV4dC1maWxsKSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxv
d0hhc0JvcmRlckZpdExpbmVzOgotICAgICAgICBzdHJlYW0gPDwgIi13ZWJraXQtYm9yZGVyLWZp
dCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc05vbkF1dG9MaW5lQnJlYWs6Ci0g
ICAgICAgIHN0cmVhbSA8PCAibGluZS1icmVhayBpcyBub3QgYXV0byI7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRmxvd0hhc1RleHRTZWN1cml0eToKLSAgICAgICAgc3RyZWFtIDw8ICJ0ZXh0
LXNlY3VyaXR5IGlzIG5vdCBub25lIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG93SGFz
U1ZHRm9udDoKLSAgICAgICAgc3RyZWFtIDw8ICJTVkcgZm9udCI7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRmxvd1RleHRIYXNTb2Z0SHlwaGVuOgotICAgICAgICBzdHJlYW0gPDwgInNvZnQg
aHlwaGVuIGNoYXJhY3RlciI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd1RleHRIYXNE
aXJlY3Rpb25DaGFyYWN0ZXI6Ci0gICAgICAgIHN0cmVhbSA8PCAiZGlyZWN0aW9uIGNoYXJhY3Rl
ciI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0lzTWlzc2luZ1ByaW1hcnlGb250Ogot
ICAgICAgICBzdHJlYW0gPDwgIm1pc3NpbmcgcHJpbWFyeSBmb250IjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGbG93UHJpbWFyeUZvbnRJc0luc3VmZmljaWVudDoKLSAgICAgICAgc3RyZWFt
IDw8ICJtaXNzaW5nIGdseXBoIG9yIGdseXBoIG5lZWRzIGFub3RoZXIgZm9udCI7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRmxvd1RleHRJc0NvbWJpbmVUZXh0OgotICAgICAgICBzdHJlYW0g
PDwgInRleHQgaXMgY29tYmluZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd1RleHRJ
c1JlbmRlckNvdW50ZXI6Ci0gICAgICAgIHN0cmVhbSA8PCAidW5zdXBwb3J0ZWQgUmVuZGVyQ291
bnRlciI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd1RleHRJc1JlbmRlclF1b3RlOgot
ICAgICAgICBzdHJlYW0gPDwgInVuc3VwcG9ydGVkIFJlbmRlclF1b3RlIjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBGbG93VGV4dElzVGV4dEZyYWdtZW50OgotICAgICAgICBzdHJlYW0gPDwg
InVuc3VwcG9ydGVkIFRleHRGcmFnbWVudCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxv
d1RleHRJc1NWR0lubGluZVRleHQ6Ci0gICAgICAgIHN0cmVhbSA8PCAidW5zdXBwb3J0ZWQgU1ZH
SW5saW5lVGV4dCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc0NvbXBsZXhGb250
Q29kZVBhdGg6Ci0gICAgICAgIHN0cmVhbSA8PCAidGV4dCB3aXRoIGNvbXBsZXggZm9udCBjb2Rl
cGF0aCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0hhc1RleHRTaGFkb3c6Ci0gICAg
ICAgIHN0cmVhbSA8PCAidGV4dC1zaGFkb3ciOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZs
b3dDaGlsZElzU2VsZWN0ZWQ6Ci0gICAgICAgIHN0cmVhbSA8PCAic2VsZWN0ZWQgY29udGVudCI7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0ZvbnRIYXNPdmVyZmxvd0dseXBoOgotICAg
ICAgICBzdHJlYW0gPDwgIi13ZWJraXQtbGluZS1ib3gtY29udGFpbjogZ2x5cGhzIHdpdGggb3Zl
cmZsb3dpbmcgdGV4dC4iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZsb3dUZXh0SGFzU3Vy
cm9nYXRlUGFpcjoKLSAgICAgICAgc3RyZWFtIDw8ICJzdXJyb2dhdGUgcGFpciI7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgTXVsdGlDb2x1bW5GbG93SXNOb3RUb3BMZXZlbDoKLSAgICAgICAg
c3RyZWFtIDw8ICJub24gdG9wIGxldmVsIGNvbHVtbiI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgTXVsdGlDb2x1bW5GbG93SGFzQ29sdW1uU3Bhbm5lcjoKLSAgICAgICAgc3RyZWFtIDw8ICJj
b2x1bW4gaGFzIHNwYW5uZXIiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE11bHRpQ29sdW1u
Rmxvd1ZlcnRpY2FsQWxpZ246Ci0gICAgICAgIHN0cmVhbSA8PCAiY29sdW1uIHdpdGggdmVydGlj
YWwtYWxpZ24gIT0gYmFzZWxpbmUiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE11bHRpQ29s
dW1uRmxvd0lzRmxvYXRpbmc6Ci0gICAgICAgIHN0cmVhbSA8PCAiY29sdW1uIHdpdGggZmxvYXRp
bmcgb2JqZWN0cyI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd0luY2x1ZGVzRG9jdW1l
bnRNYXJrZXJzOgotICAgICAgICBzdHJlYW0gPDwgInRleHQgaW5jbHVkZXMgZG9jdW1lbnQgbWFy
a2VycyI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmxvd1RleHRJc0VtcHR5OgotICAgIGNh
c2UgRmxvd0hhc05vQ2hpbGQ6Ci0gICAgY2FzZSBGbG93SGFzTm9QYXJlbnQ6Ci0gICAgY2FzZSBG
ZWF0dXJlSXNEaXNhYmxlZDoKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19
Ci0KLXN0YXRpYyB2b2lkIHByaW50UmVhc29ucyhBdm9pZGFuY2VSZWFzb25GbGFncyByZWFzb25z
LCBUZXh0U3RyZWFtJiBzdHJlYW0pCi17Ci0gICAgYm9vbCBmaXJzdCA9IHRydWU7Ci0gICAgZm9y
IChhdXRvIHJlYXNvbkl0ZW0gPSBFbmRPZlJlYXNvbnMgPj4gMTsgcmVhc29uSXRlbSAhPSBOb1Jl
YXNvbjsgcmVhc29uSXRlbSA+Pj0gMSkgewotICAgICAgICBpZiAoIShyZWFzb25zICYgcmVhc29u
SXRlbSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgc3RyZWFtIDw8IChmaXJzdCA/
ICIgIiA6ICIsICIpOwotICAgICAgICBmaXJzdCA9IGZhbHNlOwotICAgICAgICBwcmludFJlYXNv
bihyZWFzb25JdGVtLCBzdHJlYW0pOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgcHJpbnRUZXh0
Rm9yU3VidHJlZShjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCB1bnNpZ25lZCYgY2hhcmFj
dGVyc0xlZnQsIFRleHRTdHJlYW0mIHN0cmVhbSkKLXsKLSAgICBpZiAoIWNoYXJhY3RlcnNMZWZ0
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGlzPFJlbmRlclRleHQ+KHJlbmRlcmVyKSkgewot
ICAgICAgICBTdHJpbmcgdGV4dCA9IGRvd25jYXN0PFJlbmRlclRleHQ+KHJlbmRlcmVyKS50ZXh0
KCk7Ci0gICAgICAgIHRleHQgPSB0ZXh0LnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICB1bnNp
Z25lZCBsZW4gPSBzdGQ6Om1pbihjaGFyYWN0ZXJzTGVmdCwgdGV4dC5sZW5ndGgoKSk7Ci0gICAg
ICAgIHN0cmVhbSA8PCB0ZXh0LmxlZnQobGVuKTsKLSAgICAgICAgY2hhcmFjdGVyc0xlZnQgLT0g
bGVuOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghaXM8UmVuZGVyRWxlbWVudD4o
cmVuZGVyZXIpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChjb25zdCBhdXRvKiBjaGlsZCA9
IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKS5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICBwcmludFRleHRGb3JTdWJ0cmVl
KCpjaGlsZCwgY2hhcmFjdGVyc0xlZnQsIHN0cmVhbSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCB0
ZXh0TGVuZ3RoRm9yU3VidHJlZShjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQotewotICAg
IGlmIChpczxSZW5kZXJUZXh0PihyZW5kZXJlcikpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxS
ZW5kZXJUZXh0PihyZW5kZXJlcikudGV4dCgpLmxlbmd0aCgpOwotICAgIGlmICghaXM8UmVuZGVy
RWxlbWVudD4ocmVuZGVyZXIpKQotICAgICAgICByZXR1cm4gMDsKLSAgICB1bnNpZ25lZCB0ZXh0
TGVuZ3RoID0gMDsKLSAgICBmb3IgKGNvbnN0IGF1dG8qIGNoaWxkID0gZG93bmNhc3Q8UmVuZGVy
RWxlbWVudD4ocmVuZGVyZXIpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCkpCi0gICAgICAgIHRleHRMZW5ndGggKz0gdGV4dExlbmd0aEZvclN1YnRyZWUo
KmNoaWxkKTsKLSAgICByZXR1cm4gdGV4dExlbmd0aDsKLX0KLQotc3RhdGljIHZvaWQgY29sbGVj
dE5vbkVtcHR5TGVhZlJlbmRlckJsb2NrRmxvd3MoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJl
ciwgSGFzaFNldDxjb25zdCBSZW5kZXJCbG9ja0Zsb3cqPiYgbGVhZlJlbmRlcmVycykKLXsKLSAg
ICBpZiAoaXM8UmVuZGVyVGV4dD4ocmVuZGVyZXIpKSB7Ci0gICAgICAgIGlmICghZG93bmNhc3Q8
UmVuZGVyVGV4dD4ocmVuZGVyZXIpLnRleHQoKS5sZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgLy8gRmluZCBSZW5kZXJCbG9ja0Zsb3cgYW5jZXN0b3IuCi0gICAgICAgIGZv
ciAoY29uc3QgYXV0byogY3VycmVudCA9IHJlbmRlcmVyLnBhcmVudCgpOyBjdXJyZW50OyBjdXJy
ZW50ID0gY3VycmVudC0+cGFyZW50KCkpIHsKLSAgICAgICAgICAgIGlmICghaXM8UmVuZGVyQmxv
Y2tGbG93PihjdXJyZW50KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IGxlYWZSZW5kZXJlcnMuYWRkKGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oY3VycmVudCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoIWlzPFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGZvciAoY29uc3QgYXV0byogY2hpbGQgPSBkb3duY2FzdDxSZW5kZXJFbGVtZW50PihyZW5kZXJl
cikuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAg
ICAgICAgY29sbGVjdE5vbkVtcHR5TGVhZlJlbmRlckJsb2NrRmxvd3MoKmNoaWxkLCBsZWFmUmVu
ZGVyZXJzKTsKLX0KLQotc3RhdGljIHZvaWQgY29sbGVjdE5vbkVtcHR5TGVhZlJlbmRlckJsb2Nr
Rmxvd3NGb3JDdXJyZW50UGFnZShIYXNoU2V0PGNvbnN0IFJlbmRlckJsb2NrRmxvdyo+JiBsZWFm
UmVuZGVyZXJzKQotewotICAgIGZvciAoY29uc3QgYXV0byogZG9jdW1lbnQgOiBEb2N1bWVudDo6
YWxsRG9jdW1lbnRzKCkpIHsKLSAgICAgICAgaWYgKCFkb2N1bWVudC0+cmVuZGVyVmlldygpIHx8
IGRvY3VtZW50LT5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSAhPSBEb2N1bWVudDo6Tm90SW5CYWNr
Rm9yd2FyZENhY2hlKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghZG9jdW1l
bnQtPmlzSFRNTERvY3VtZW50KCkgJiYgIWRvY3VtZW50LT5pc1hIVE1MRG9jdW1lbnQoKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjb2xsZWN0Tm9uRW1wdHlMZWFmUmVuZGVyQmxv
Y2tGbG93cygqZG9jdW1lbnQtPnJlbmRlclZpZXcoKSwgbGVhZlJlbmRlcmVycyk7Ci0gICAgfQot
fQotCi12b2lkIHRvZ2dsZVNpbXBsZUxpbmVMYXlvdXQoKQotewotICAgIGZvciAoYXV0byogZG9j
dW1lbnQgOiBEb2N1bWVudDo6YWxsRG9jdW1lbnRzKCkpIHsKLSAgICAgICAgYXV0byYgc2V0dGlu
Z3MgPSBkb2N1bWVudC0+bXV0YWJsZVNldHRpbmdzKCk7Ci0gICAgICAgIHNldHRpbmdzLnNldFNp
bXBsZUxpbmVMYXlvdXRFbmFibGVkKCFzZXR0aW5ncy5zaW1wbGVMaW5lTGF5b3V0RW5hYmxlZCgp
KTsKLSAgICB9Ci19Ci0KLXZvaWQgcHJpbnRTaW1wbGVMaW5lTGF5b3V0QmxvY2tMaXN0KCkKLXsK
LSAgICBIYXNoU2V0PGNvbnN0IFJlbmRlckJsb2NrRmxvdyo+IGxlYWZSZW5kZXJlcnM7Ci0gICAg
Y29sbGVjdE5vbkVtcHR5TGVhZlJlbmRlckJsb2NrRmxvd3NGb3JDdXJyZW50UGFnZShsZWFmUmVu
ZGVyZXJzKTsKLSAgICBpZiAoIWxlYWZSZW5kZXJlcnMuc2l6ZSgpKSB7Ci0gICAgICAgIFdURkxv
Z0Fsd2F5cygiTm8gdGV4dCBmb3VuZCBpbiB0aGlzIGRvY3VtZW50XG4iKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBUZXh0U3RyZWFtIHN0cmVhbTsKLSAgICBzdHJlYW0gPDwgIi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKLSAgICBm
b3IgKGNvbnN0IGF1dG8qIGZsb3cgOiBsZWFmUmVuZGVyZXJzKSB7Ci0gICAgICAgIGF1dG8gcmVh
c29uID0gY2FuVXNlRm9yV2l0aFJlYXNvbigqZmxvdywgSW5jbHVkZVJlYXNvbnM6OkFsbCk7Ci0g
ICAgICAgIGlmIChyZWFzb24gPT0gTm9SZWFzb24pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgdW5zaWduZWQgcHJpbnRlZExlbmd0aCA9IDMwOwotICAgICAgICBzdHJlYW0gPDwgIlwi
IjsKLSAgICAgICAgcHJpbnRUZXh0Rm9yU3VidHJlZSgqZmxvdywgcHJpbnRlZExlbmd0aCwgc3Ry
ZWFtKTsKLSAgICAgICAgZm9yICg7cHJpbnRlZExlbmd0aCA+IDA7IC0tcHJpbnRlZExlbmd0aCkK
LSAgICAgICAgICAgIHN0cmVhbSA8PCAiICI7Ci0gICAgICAgIHN0cmVhbSA8PCAiXCIoIiA8PCB0
ZXh0TGVuZ3RoRm9yU3VidHJlZSgqZmxvdykgPDwgIik6IjsKLSAgICAgICAgcHJpbnRSZWFzb25z
KHJlYXNvbiwgc3RyZWFtKTsKLSAgICAgICAgc3RyZWFtIDw8ICJcbiI7Ci0gICAgfQotICAgIHN0
cmVhbSA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tXG4iOwotICAgIFdURkxvZ0Fsd2F5cygiJXMiLCBzdHJlYW0ucmVsZWFzZSgpLnV0ZjgoKS5k
YXRhKCkpOwotfQotCi12b2lkIHByaW50U2ltcGxlTGluZUxheW91dENvdmVyYWdlKCkKLXsKLSAg
ICBIYXNoU2V0PGNvbnN0IFJlbmRlckJsb2NrRmxvdyo+IGxlYWZSZW5kZXJlcnM7Ci0gICAgY29s
bGVjdE5vbkVtcHR5TGVhZlJlbmRlckJsb2NrRmxvd3NGb3JDdXJyZW50UGFnZShsZWFmUmVuZGVy
ZXJzKTsKLSAgICBpZiAoIWxlYWZSZW5kZXJlcnMuc2l6ZSgpKSB7Ci0gICAgICAgIFdURkxvZ0Fs
d2F5cygiTm8gdGV4dCBmb3VuZCBpbiB0aGlzIGRvY3VtZW50XG4iKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBUZXh0U3RyZWFtIHN0cmVhbTsKLSAgICBIYXNoTWFwPEF2b2lkYW5jZVJl
YXNvbiwgdW5zaWduZWQ+IGZsb3dTdGF0aXN0aWNzOwotICAgIHVuc2lnbmVkIHRleHRMZW5ndGgg
PSAwOwotICAgIHVuc2lnbmVkIHVuc3VwcG9ydGVkVGV4dExlbmd0aCA9IDA7Ci0gICAgdW5zaWdu
ZWQgbnVtYmVyT2ZVbnN1cHBvcnRlZExlYWZCbG9ja3MgPSAwOwotICAgIHVuc2lnbmVkIHN1cHBv
cnRlZEJ1dEZvcmNlZFRvTGluZUxheW91dFRleHRMZW5ndGggPSAwOwotICAgIHVuc2lnbmVkIG51
bWJlck9mU3VwcG9ydGVkQnV0Rm9yY2VkVG9MaW5lTGF5b3V0TGVhZkJsb2NrcyA9IDA7Ci0gICAg
Zm9yIChjb25zdCBhdXRvKiBmbG93IDogbGVhZlJlbmRlcmVycykgewotICAgICAgICBhdXRvIGZs
b3dMZW5ndGggPSB0ZXh0TGVuZ3RoRm9yU3VidHJlZSgqZmxvdyk7Ci0gICAgICAgIHRleHRMZW5n
dGggKz0gZmxvd0xlbmd0aDsKLSAgICAgICAgYXV0byByZWFzb25zID0gY2FuVXNlRm9yV2l0aFJl
YXNvbigqZmxvdywgSW5jbHVkZVJlYXNvbnM6OkFsbCk7Ci0gICAgICAgIGlmIChyZWFzb25zID09
IE5vUmVhc29uKSB7Ci0gICAgICAgICAgICBpZiAoZmxvdy0+bGluZUxheW91dFBhdGgoKSA9PSBS
ZW5kZXJCbG9ja0Zsb3c6OkZvcmNlTGluZUJveGVzUGF0aCkgewotICAgICAgICAgICAgICAgIHN1
cHBvcnRlZEJ1dEZvcmNlZFRvTGluZUxheW91dFRleHRMZW5ndGggKz0gZmxvd0xlbmd0aDsKLSAg
ICAgICAgICAgICAgICArK251bWJlck9mU3VwcG9ydGVkQnV0Rm9yY2VkVG9MaW5lTGF5b3V0TGVh
ZkJsb2NrczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0gICAgICAgICsrbnVtYmVyT2ZVbnN1cHBvcnRlZExlYWZCbG9ja3M7Ci0gICAgICAgIHVuc3Vw
cG9ydGVkVGV4dExlbmd0aCArPSBmbG93TGVuZ3RoOwotICAgICAgICBmb3IgKGF1dG8gcmVhc29u
SXRlbSA9IEVuZE9mUmVhc29ucyA+PiAxOyByZWFzb25JdGVtICE9IE5vUmVhc29uOyByZWFzb25J
dGVtID4+PSAxKSB7Ci0gICAgICAgICAgICBpZiAoIShyZWFzb25zICYgcmVhc29uSXRlbSkpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGZsb3dT
dGF0aXN0aWNzLmFkZChyZWFzb25JdGVtLCBmbG93TGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICgh
cmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSArPSBmbG93TGVuZ3RoOwotICAgICAgICB9Ci0gICAgfQotICAgIHN0cmVhbSA8PCAiLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iOwotICAgIHN0
cmVhbSA8PCAiTnVtYmVyIG9mIGJsb2NrczogdG90YWwoIiA8PCAgbGVhZlJlbmRlcmVycy5zaXpl
KCkgPDwgIikgbm9uLXNpbXBsZSgiIDw8IG51bWJlck9mVW5zdXBwb3J0ZWRMZWFmQmxvY2tzIDw8
ICIpXG5Db250ZW50IGxlbmd0aDogdG90YWwoIiA8PAotICAgICAgICB0ZXh0TGVuZ3RoIDw8ICIp
IG5vbi1zaW1wbGUoIiA8PCB1bnN1cHBvcnRlZFRleHRMZW5ndGggPDwgIilcbiI7Ci0gICAgZm9y
IChjb25zdCBhdXRvJiByZWFzb25FbnRyeSA6IGZsb3dTdGF0aXN0aWNzKSB7Ci0gICAgICAgIHBy
aW50UmVhc29uKHJlYXNvbkVudHJ5LmtleSwgc3RyZWFtKTsKLSAgICAgICAgc3RyZWFtIDw8ICI6
ICIgPDwgKGZsb2F0KXJlYXNvbkVudHJ5LnZhbHVlIC8gKGZsb2F0KXRleHRMZW5ndGggKiAxMDAg
PDwgIiVcbiI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0ZWRCdXRGb3JjZWRUb0xpbmVMYXlvdXRU
ZXh0TGVuZ3RoKSB7Ci0gICAgICAgIHN0cmVhbSA8PCAiU2ltcGxlIGxpbmUgbGF5b3V0IHBvdGVu
dGlhbCBjb3ZlcmFnZTogIiA8PCAoZmxvYXQpKHRleHRMZW5ndGggLSB1bnN1cHBvcnRlZFRleHRM
ZW5ndGgpIC8gKGZsb2F0KXRleHRMZW5ndGggKiAxMDAgPDwgIiVcblxuIjsKLSAgICAgICAgc3Ry
ZWFtIDw8ICJTaW1wbGUgbGluZSBsYXlvdXQgYWN0dWFsIGNvdmVyYWdlOiAiIDw8IChmbG9hdCko
dGV4dExlbmd0aCAtIHVuc3VwcG9ydGVkVGV4dExlbmd0aCAtIHN1cHBvcnRlZEJ1dEZvcmNlZFRv
TGluZUxheW91dFRleHRMZW5ndGgpIC8gKGZsb2F0KXRleHRMZW5ndGggKiAxMDAgPDwgIiVcbkZv
cmNlZCBsaW5lIGxheW91dCBibG9ja3M6ICIgPDwgbnVtYmVyT2ZTdXBwb3J0ZWRCdXRGb3JjZWRU
b0xpbmVMYXlvdXRMZWFmQmxvY2tzIDw8ICIgY29udGVudCBsZW5ndGg6ICIgPDwgc3VwcG9ydGVk
QnV0Rm9yY2VkVG9MaW5lTGF5b3V0VGV4dExlbmd0aCA8PCAiKCIgPDwgKGZsb2F0KXN1cHBvcnRl
ZEJ1dEZvcmNlZFRvTGluZUxheW91dFRleHRMZW5ndGggLyAoZmxvYXQpdGV4dExlbmd0aCAqIDEw
MCA8PCAiJSkiOwotICAgIH0gZWxzZQotICAgICAgICBzdHJlYW0gPDwgIlNpbXBsZSBsaW5lIGxh
eW91dCBjb3ZlcmFnZTogIiA8PCAoZmxvYXQpKHRleHRMZW5ndGggLSB1bnN1cHBvcnRlZFRleHRM
ZW5ndGgpIC8gKGZsb2F0KXRleHRMZW5ndGggKiAxMDAgPDwgIiUiOwotICAgIHN0cmVhbSA8PCAi
XG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7
Ci0gICAgV1RGTG9nQWx3YXlzKCIlcyIsIHN0cmVhbS5yZWxlYXNlKCkudXRmOCgpLmRhdGEoKSk7
Ci19Ci0jZW5kaWYKLQotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Np
bXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAz
ODI0ZTk1MGM0YTAuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
U2ltcGxlTGluZUxheW91dENvdmVyYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1l
c3BhY2UgU2ltcGxlTGluZUxheW91dCB7Ci0KLSNpZm5kZWYgTkRFQlVHCi12b2lkIHByaW50U2lt
cGxlTGluZUxheW91dENvdmVyYWdlKCk7Ci12b2lkIHByaW50U2ltcGxlTGluZUxheW91dEJsb2Nr
TGlzdCgpOwotdm9pZCB0b2dnbGVTaW1wbGVMaW5lTGF5b3V0KCk7Ci0jZW5kaWYKLQotZW51bSBB
dm9pZGFuY2VSZWFzb25fIDogdWludDY0X3QgewotICAgIEZsb3dJc0luc2lkZUFOb25NdWx0aUNv
bHVtblRocmVhZCAgICAgPSAxTExVICA8PCAwLAotICAgIEZsb3dIYXNIb3Jpem9uYWxXcml0aW5n
TW9kZSAgICAgICAgICAgPSAxTExVICA8PCAxLAotICAgIEZsb3dIYXNPdXRsaW5lICAgICAgICAg
ICAgICAgICAgICAgICAgPSAxTExVICA8PCAyLAotICAgIEZsb3dJc1J1YnkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPSAxTExVICA8PCAzLAotICAgIEZsb3dJc1BhZ2luYXRlZCAgICAgICAg
ICAgICAgICAgICAgICAgPSAxTExVICA8PCA0LAotICAgIEZsb3dIYXNUZXh0T3ZlcmZsb3cgICAg
ICAgICAgICAgICAgICAgPSAxTExVICA8PCA1LAotICAgIEZsb3dJc0RlcHJpY2F0ZWRGbGV4Qm94
ICAgICAgICAgICAgICAgPSAxTExVICA8PCA2LAotICAgIEZsb3dQYXJlbnRJc1BsYWNlaG9sZGVy
RWxlbWVudCAgICAgICAgPSAxTExVICA8PCA3LAotICAgIEZsb3dQYXJlbnRJc1RleHRBcmVhV2l0
aFdyYXBwaW5nICAgICAgPSAxTExVICA8PCA4LAotICAgIEZsb3dIYXNOb25TdXBwb3J0ZWRDaGls
ZCAgICAgICAgICAgICAgPSAxTExVICA8PCA5LAotICAgIEZsb3dIYXNVbnN1cHBvcnRlZEZsb2F0
ICAgICAgICAgICAgICAgPSAxTExVICA8PCAxMCwKLSAgICBGbG93SGFzVW5zdXBwb3J0ZWRVbmRl
cmxpbmVEZWNvcmF0aW9uID0gMUxMVSAgPDwgMTEsCi0gICAgRmxvd0hhc0p1c3RpZmllZE5vbkxh
dGluVGV4dCAgICAgICAgICA9IDFMTFUgIDw8IDEyLAotICAgIEZsb3dIYXNPdmVyZmxvd05vdFZp
c2libGUgICAgICAgICAgICAgPSAxTExVICA8PCAxMywKLSAgICBGbG93SGFzV2ViS2l0TkJTUE1v
ZGUgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMTQsCi0gICAgRmxvd0lzTm90TFRSICAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDE1LAotICAgIEZsb3dIYXNMaW5lQm94Q29u
dGFpblByb3BlcnR5ICAgICAgICAgPSAxTExVICA8PCAxNiwKLSAgICBGbG93SXNOb3RUb3BUb0Jv
dHRvbSAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMTcsCi0gICAgRmxvd0hhc0xpbmVCcmVh
ayAgICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDE4LAotICAgIEZsb3dIYXNOb25Ob3Jt
YWxVbmljb2RlQmlEaSAgICAgICAgICAgPSAxTExVICA8PCAxOSwKLSAgICBGbG93SGFzUlRMT3Jk
ZXJpbmcgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjAsCi0gICAgRmxvd0hhc0xpbmVB
bGlnbkVkZ2VzICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDIxLAotICAgIEZsb3dIYXNMaW5l
U25hcCAgICAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAyMiwKLSAgICBGbG93SGFzVGV4
dEVtcGhhc2lzRmlsbE9yTWFyayAgICAgICAgID0gMUxMVSAgPDwgMjMsCi0gICAgRmxvd0hhc1Rl
eHRTaGFkb3cgICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDI0LAotICAgIEZsb3dIYXNQ
c2V1ZG9GaXJzdExpbmUgICAgICAgICAgICAgICAgPSAxTExVICA8PCAyNSwKLSAgICBGbG93SGFz
UHNldWRvRmlyc3RMZXR0ZXIgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjYsCi0gICAgRmxvd0hh
c1RleHRDb21iaW5lICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDI3LAotICAgIEZsb3dI
YXNUZXh0RmlsbEJveCAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAyOCwKLSAgICBGbG93
SGFzQm9yZGVyRml0TGluZXMgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjksCi0gICAgRmxv
d0hhc05vbkF1dG9MaW5lQnJlYWsgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDMwLAotICAgIEZs
b3dIYXNUZXh0U2VjdXJpdHkgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAzMSwKLSAgICBG
bG93SGFzU1ZHRm9udCAgICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMzIsCi0gICAg
Rmxvd1RleHRJc0VtcHR5ICAgICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDMzLAotICAg
IEZsb3dUZXh0SGFzU29mdEh5cGhlbiAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAzNCwKLSAg
ICBGbG93VGV4dEhhc0RpcmVjdGlvbkNoYXJhY3RlciAgICAgICAgID0gMUxMVSAgPDwgMzUsCi0g
ICAgRmxvd0lzTWlzc2luZ1ByaW1hcnlGb250ICAgICAgICAgICAgICA9IDFMTFUgIDw8IDM2LAot
ICAgIEZsb3dQcmltYXJ5Rm9udElzSW5zdWZmaWNpZW50ICAgICAgICAgPSAxTExVICA8PCAzNywK
LSAgICBGbG93VGV4dElzQ29tYmluZVRleHQgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMzgs
Ci0gICAgRmxvd1RleHRJc1JlbmRlckNvdW50ZXIgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDM5
LAotICAgIEZsb3dUZXh0SXNSZW5kZXJRdW90ZSAgICAgICAgICAgICAgICAgPSAxTExVICA8PCA0
MCwKLSAgICBGbG93VGV4dElzVGV4dEZyYWdtZW50ICAgICAgICAgICAgICAgID0gMUxMVSAgPDwg
NDEsCi0gICAgRmxvd1RleHRJc1NWR0lubGluZVRleHQgICAgICAgICAgICAgICA9IDFMTFUgIDw8
IDQyLAotICAgIEZsb3dIYXNDb21wbGV4Rm9udENvZGVQYXRoICAgICAgICAgICAgPSAxTExVICA8
PCA0MywKLSAgICBGZWF0dXJlSXNEaXNhYmxlZCAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAg
PDwgNDQsCi0gICAgRmxvd0hhc05vUGFyZW50ICAgICAgICAgICAgICAgICAgICAgICA9IDFMTFUg
IDw8IDQ1LAotICAgIEZsb3dIYXNOb0NoaWxkICAgICAgICAgICAgICAgICAgICAgICAgPSAxTExV
ICA8PCA0NiwKLSAgICBGbG93Q2hpbGRJc1NlbGVjdGVkICAgICAgICAgICAgICAgICAgID0gMUxM
VSAgPDwgNDcsCi0gICAgRmxvd0hhc0hhbmdpbmdQdW5jdHVhdGlvbiAgICAgICAgICAgICA9IDFM
TFUgIDw8IDQ4LAotICAgIEZsb3dGb250SGFzT3ZlcmZsb3dHbHlwaCAgICAgICAgICAgICAgPSAx
TExVICA8PCA0OSwKLSAgICBGbG93VGV4dEhhc1N1cnJvZ2F0ZVBhaXIgICAgICAgICAgICAgID0g
MUxMVSAgPDwgNTAsCi0gICAgTXVsdGlDb2x1bW5GbG93SXNOb3RUb3BMZXZlbCAgICAgICAgICA9
IDFMTFUgIDw8IDUxLAotICAgIE11bHRpQ29sdW1uRmxvd0hhc0NvbHVtblNwYW5uZXIgICAgICAg
PSAxTExVICA8PCA1MiwKLSAgICBNdWx0aUNvbHVtbkZsb3dWZXJ0aWNhbEFsaWduICAgICAgICAg
ID0gMUxMVSAgPDwgNTMsCi0gICAgTXVsdGlDb2x1bW5GbG93SXNGbG9hdGluZyAgICAgICAgICAg
ICA9IDFMTFUgIDw8IDU0LAotICAgIEZsb3dJbmNsdWRlc0RvY3VtZW50TWFya2VycyAgICAgICAg
ICAgPSAxTExVICA8PCA1NSwKLSAgICBFbmRPZlJlYXNvbnMgICAgICAgICAgICAgICAgICAgICAg
ICAgID0gMUxMVSAgPDwgNTYKLX07Ci1jb25zdCB1bnNpZ25lZCBOb1JlYXNvbiA9IDA7Ci0KLXR5
cGVkZWYgdWludDY0X3QgQXZvaWRhbmNlUmVhc29uOwotdHlwZWRlZiB1aW50NjRfdCBBdm9pZGFu
Y2VSZWFzb25GbGFnczsKLQotZW51bSBjbGFzcyBJbmNsdWRlUmVhc29ucyB7IEZpcnN0ICwgQWxs
IH07Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMjliMzZhMGYzMjc1Li4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
ODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJT
aW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmgiCi0KLSNpbmNsdWRlICJSZW5kZXJCbG9ja0Zs
b3cuaCIKLSNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVy
TGluZUJyZWFrLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci1uYW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7Ci0KLXN0YXRpYyBWZWN0b3I8Rmxvd0Nv
bnRlbnRzOjpTZWdtZW50PiBpbml0aWFsaXplU2VnbWVudHMoY29uc3QgUmVuZGVyQmxvY2tGbG93
JiBmbG93KQotewotICAgIHVuc2lnbmVkIG51bWJlck9mQ2hpbGRyZW4gPSAwOwotICAgIGF1dG8g
Y2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxSZW5kZXJPYmplY3Q+KGZsb3cpOwotICAgIGZvciAo
YXV0byBpdCA9IGNoaWxkcmVuLmJlZ2luKCksIGVuZCA9IGNoaWxkcmVuLmVuZCgpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgICsrbnVtYmVyT2ZDaGlsZHJlbjsKLSAgICBWZWN0b3I8Rmxvd0Nv
bnRlbnRzOjpTZWdtZW50PiBzZWdtZW50czsKLSAgICBzZWdtZW50cy5yZXNlcnZlQ2FwYWNpdHko
bnVtYmVyT2ZDaGlsZHJlbik7Ci0gICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IDA7Ci0gICAg
Zm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4oZmxvdykpIHsK
LSAgICAgICAgaWYgKGlzPFJlbmRlclRleHQ+KGNoaWxkKSkgewotICAgICAgICAgICAgYXV0byYg
dGV4dENoaWxkID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oY2hpbGQpOwotICAgICAgICAgICAgdW5z
aWduZWQgdGV4dExlbmd0aCA9IHRleHRDaGlsZC50ZXh0KCkubGVuZ3RoKCk7Ci0gICAgICAgICAg
ICBzZWdtZW50cy5hcHBlbmQoRmxvd0NvbnRlbnRzOjpTZWdtZW50IHsgc3RhcnRQb3NpdGlvbiwg
c3RhcnRQb3NpdGlvbiArIHRleHRMZW5ndGgsIHRleHRDaGlsZC50ZXh0KCksCi0gICAgICAgICAg
ICAgICAgdGV4dENoaWxkLCB0ZXh0Q2hpbGQuY2FuVXNlU2ltcGxpZmllZFRleHRNZWFzdXJpbmco
KSB9KTsKLSAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gKz0gdGV4dExlbmd0aDsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpczxSZW5kZXJMaW5lQnJlYWs+
KGNoaWxkKSkgewotICAgICAgICAgICAgc2VnbWVudHMuYXBwZW5kKEZsb3dDb250ZW50czo6U2Vn
bWVudCB7IHN0YXJ0UG9zaXRpb24sIHN0YXJ0UG9zaXRpb24sIFN0cmluZygpLCBjaGlsZCwgdHJ1
ZSB9KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICByZXR1cm4gc2VnbWVudHM7Ci19Ci0KLUZsb3dDb250
ZW50czo6Rmxvd0NvbnRlbnRzKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKLSAgICA6IG1f
c2VnbWVudHMoaW5pdGlhbGl6ZVNlZ21lbnRzKGZsb3cpKQotewotfQotCi11bnNpZ25lZCBGbG93
Q29udGVudHM6OnNlZ21lbnRJbmRleEZvclJ1blNsb3codW5zaWduZWQgc3RhcnQsIHVuc2lnbmVk
IGVuZCkgY29uc3QKLXsKLSAgICBhdXRvIGlzRW1wdHlSYW5nZSA9IHN0YXJ0ID09IGVuZDsKLSAg
ICBhdXRvIGl0ID0gc3RkOjpsb3dlcl9ib3VuZChtX3NlZ21lbnRzLmJlZ2luKCksIG1fc2VnbWVu
dHMuZW5kKCksIHN0YXJ0LCBbaXNFbXB0eVJhbmdlXShjb25zdCBTZWdtZW50JiBzZWdtZW50LCB1
bnNpZ25lZCBzdGFydCkgewotICAgICAgICAvLyBGSVhNRTogVGhpcyBhbHdheXMgZmluZCB0aGUg
Zmlyc3QgZW1wdHkgcnVuICgudnMgc3Vic2VxdWVudCA8YnI+IGVsZW1lbnRzKQotICAgICAgICBy
ZXR1cm4gKGlzRW1wdHlSYW5nZSAmJiBzZWdtZW50LnN0YXJ0ID09IHNlZ21lbnQuZW5kKSA/IHNl
Z21lbnQuc3RhcnQgPCBzdGFydCA6IHNlZ21lbnQuZW5kIDw9IHN0YXJ0OwotICAgIH0pOwotICAg
IEFTU0VSVChpdCAhPSBtX3NlZ21lbnRzLmVuZCgpKTsKLSAgICBBU1NFUlQoZW5kIDw9IGl0LT5l
bmQpOwotICAgIG1fbGFzdFNlZ21lbnRJbmRleCA9IGl0IC0gbV9zZWdtZW50cy5iZWdpbigpOwot
ICAgIHJldHVybiBtX2xhc3RTZWdtZW50SW5kZXg7Ci19Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTYzZjY4NmFkMTQuLjAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50
cy5oCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LWNsYXNzIFJlbmRlckJsb2NrRmxvdzsKLQotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewot
Ci1jbGFzcyBGbG93Q29udGVudHMgewotcHVibGljOgotICAgIEZsb3dDb250ZW50cyhjb25zdCBS
ZW5kZXJCbG9ja0Zsb3cmKTsKLQotICAgIHN0cnVjdCBTZWdtZW50IHsKLSAgICAgICAgdW5zaWdu
ZWQgdG9TZWdtZW50UG9zaXRpb24odW5zaWduZWQgcG9zaXRpb24pIGNvbnN0Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVChwb3NpdGlvbiA+PSBzdGFydCk7Ci0gICAgICAgICAgICByZXR1
cm4gcG9zaXRpb24gLSBzdGFydDsKLSAgICAgICAgfQotICAgICAgICB1bnNpZ25lZCB0b1JlbmRl
clBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdCB7IHJldHVybiBzdGFydCArIHBvc2l0
aW9uOyB9Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0OwotICAgICAgICB1bnNpZ25lZCBlbmQ7Ci0g
ICAgICAgIFN0cmluZ1ZpZXcgdGV4dDsKLSAgICAgICAgY29uc3QgUmVuZGVyT2JqZWN0JiByZW5k
ZXJlcjsKLSAgICAgICAgYm9vbCBjYW5Vc2VTaW1wbGlmaWVkVGV4dE1lYXN1cmluZzsKLSAgICB9
OwotICAgIGNvbnN0IFNlZ21lbnQmIHNlZ21lbnRGb3JSdW4odW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkIGVuZCkgY29uc3Q7Ci0gICAgY29uc3QgU2VnbWVudCYgc2VnbWVudEZvclBvc2l0aW9uKHVu
c2lnbmVkKSBjb25zdDsKLQotICAgIHR5cGVkZWYgVmVjdG9yPFNlZ21lbnQsIDg+Ojpjb25zdF9p
dGVyYXRvciBJdGVyYXRvcjsKLSAgICBJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
c2VnbWVudHMuYmVnaW4oKTsgfQotICAgIEl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2VnbWVudHMuZW5kKCk7IH0KLQotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBzZWdtZW50SW5kZXhG
b3JSdW5TbG93KHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpIGNvbnN0OwotICAgIGNvbnN0
IFZlY3RvcjxTZWdtZW50PiBtX3NlZ21lbnRzOwotICAgIG11dGFibGUgdW5zaWduZWQgbV9sYXN0
U2VnbWVudEluZGV4IHsgMCB9OwotfTsKLQotaW5saW5lIGNvbnN0IEZsb3dDb250ZW50czo6U2Vn
bWVudCYgRmxvd0NvbnRlbnRzOjpzZWdtZW50Rm9yUnVuKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25l
ZCBlbmQpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHN0YXJ0IDw9IGVuZCk7Ci0gICAgYXV0byBpc0Vt
cHR5UmFuZ2UgPSBzdGFydCA9PSBlbmQ7Ci0gICAgYXV0byYgbGFzdFNlZ21lbnQgPSBtX3NlZ21l
bnRzW21fbGFzdFNlZ21lbnRJbmRleF07Ci0gICAgaWYgKChsYXN0U2VnbWVudC5zdGFydCA8PSBz
dGFydCAmJiBlbmQgPD0gbGFzdFNlZ21lbnQuZW5kKSAmJiAoIWlzRW1wdHlSYW5nZSB8fCBlbmQg
IT0gbGFzdFNlZ21lbnQuZW5kKSkKLSAgICAgICAgcmV0dXJuIG1fc2VnbWVudHNbbV9sYXN0U2Vn
bWVudEluZGV4XTsKLSAgICByZXR1cm4gbV9zZWdtZW50c1tzZWdtZW50SW5kZXhGb3JSdW5TbG93
KHN0YXJ0LCBlbmQpXTsKLX0KLQotaW5saW5lIGNvbnN0IEZsb3dDb250ZW50czo6U2VnbWVudCYg
Rmxvd0NvbnRlbnRzOjpzZWdtZW50Rm9yUG9zaXRpb24odW5zaWduZWQgcG9zaXRpb24pIGNvbnN0
Ci17Ci0gICAgYXV0byBpdCA9IHN0ZDo6bG93ZXJfYm91bmQobV9zZWdtZW50cy5iZWdpbigpLCBt
X3NlZ21lbnRzLmVuZCgpLCBwb3NpdGlvbiwgW10oY29uc3QgU2VnbWVudCYgc2VnbWVudCwgdW5z
aWduZWQgcG9zaXRpb24pIHsKLSAgICAgICAgcmV0dXJuIHNlZ21lbnQuZW5kIDw9IHBvc2l0aW9u
OwotICAgIH0pOwotICAgIEFTU0VSVChpdCAhPSBtX3NlZ21lbnRzLmVuZCgpKTsKLSAgICByZXR1
cm4gbV9zZWdtZW50c1tpdCAtIG1fc2VnbWVudHMuYmVnaW4oKV07Ci19Ci0KLX0KLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25z
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25z
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZjYzBiNmQzODI0Li4wMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5j
dGlvbnMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5o
IgotCi0jaW5jbHVkZSAiQmlkaVJ1bi5oIgotI2luY2x1ZGUgIkJpZGlSdW5MaXN0LmgiCi0jaW5j
bHVkZSAiRXZlbnRSZWdpb24uaCIKLSNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJG
cmFtZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhpdFRlc3RM
b2NhdGlvbi5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiSGl0VGVz
dFJlc3VsdC5oIgotI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKLSNpbmNsdWRlICJMaW5lSW5m
by5oIgotI2luY2x1ZGUgIlBhaW50SW5mby5oIgotI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5o
IgotI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJJdGVy
YXRvci5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dC5o
IgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1
ZGUgIlNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5l
TGF5b3V0UmVzb2x2ZXIuaCIKLSNpbmNsdWRlICJUZXh0LmgiCi0jaW5jbHVkZSAiVGV4dERlY29y
YXRpb25QYWludGVyLmgiCi0jaW5jbHVkZSAiVGV4dFBhaW50U3R5bGUuaCIKLSNpbmNsdWRlICJU
ZXh0UGFpbnRlci5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLQotI2lmIEVO
QUJMRShUUkVFX0RFQlVHR0lORykKLSNpbmNsdWRlIDxzdGRpby5oPgotI2VuZGlmCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBTaW1wbGVMaW5lTGF5b3V0IHsKLQotRmxvYXRSZWN0
IGNvbXB1dGVPdmVyZmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIGNvbnN0IEZsb2F0
UmVjdCYgbGF5b3V0UmVjdCkKLXsKLSAgICBhdXRvIG92ZXJmbG93UmVjdCA9IGxheW91dFJlY3Q7
Ci0gICAgYXV0byB2aWV3cG9ydFNpemUgPSBmbG93LmZyYW1lKCkudmlldygpID8gZmxvdy5mcmFt
ZSgpLnZpZXcoKS0+c2l6ZSgpIDogSW50U2l6ZSgpOwotICAgIGF1dG8gc3Ryb2tlT3ZlcmZsb3cg
PSBzdGQ6OmNlaWwoZmxvdy5zdHlsZSgpLmNvbXB1dGVkU3Ryb2tlV2lkdGgodmlld3BvcnRTaXpl
KSk7Ci0gICAgb3ZlcmZsb3dSZWN0LmluZmxhdGUoc3Ryb2tlT3ZlcmZsb3cpOwotCi0gICAgYXV0
byBsZXR0ZXJTcGFjaW5nID0gZmxvdy5zdHlsZSgpLmZvbnRDYXNjYWRlKCkubGV0dGVyU3BhY2lu
ZygpOwotICAgIGlmIChsZXR0ZXJTcGFjaW5nID49IDApCi0gICAgICAgIHJldHVybiBvdmVyZmxv
d1JlY3Q7Ci0gICAgLy8gTGFzdCBsZXR0ZXIncyBuZWdhdGl2ZSBzcGFjaW5nIHNocmlua3MgbGF5
b3V0IHJlY3QuIFB1c2ggaXQgdG8gdmlzdWFsIG92ZXJmbG93LgotICAgIG92ZXJmbG93UmVjdC5l
eHBhbmQoLWxldHRlclNwYWNpbmcsIDApOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3Q7Ci19Ci0K
LXZvaWQgcGFpbnRGbG93KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29uc3QgTGF5b3V0
JiBsYXlvdXQsIFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRP
ZmZzZXQpCi17Ci0gICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpFdmVudFJl
Z2lvbikgewotICAgICAgICBpZiAoIWZsb3cudmlzaWJsZVRvSGl0VGVzdGluZygpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBhdXRvIHBhaW50UmVjdCA9IHBhaW50SW5mby5yZWN0Owot
ICAgICAgICBwYWludFJlY3QubW92ZUJ5KC1wYWludE9mZnNldCk7Ci0gICAgICAgIGZvciAoYXV0
byBydW4gOiBsYXlvdXQucnVuUmVzb2x2ZXIoKS5yYW5nZUZvclJlY3QocGFpbnRSZWN0KSkgewot
ICAgICAgICAgICAgRmxvYXRSZWN0IHZpc3VhbE92ZXJmbG93UmVjdCA9IGNvbXB1dGVPdmVyZmxv
dyhmbG93LCBydW4ucmVjdCgpKTsKLSAgICAgICAgICAgIHBhaW50SW5mby5ldmVudFJlZ2lvbkNv
bnRleHQtPnVuaXRlKGVuY2xvc2luZ0ludFJlY3QodmlzdWFsT3ZlcmZsb3dSZWN0KSwgZmxvdy5z
dHlsZSgpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHBh
aW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpGb3JlZ3JvdW5kKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvJiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKLSAgICBpZiAoc3R5bGUudmlzaWJp
bGl0eSgpICE9IFZpc2liaWxpdHk6OlZpc2libGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRl
eHRQYWludGVyIHRleHRQYWludGVyKHBhaW50SW5mby5jb250ZXh0KCkpOwotICAgIHRleHRQYWlu
dGVyLnNldEZvbnQoc3R5bGUuZm9udENhc2NhZGUoKSk7Ci0gICAgdGV4dFBhaW50ZXIuc2V0U3R5
bGUoY29tcHV0ZVRleHRQYWludFN0eWxlKGZsb3cuZnJhbWUoKSwgc3R5bGUsIHBhaW50SW5mbykp
OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGRlYnVnU2hhZG93ID0gbnVsbHB0
cjsKLSAgICBpZiAoZmxvdy5zZXR0aW5ncygpLnNpbXBsZUxpbmVMYXlvdXREZWJ1Z0JvcmRlcnNF
bmFibGVkKCkpIHsKLSAgICAgICAgZGVidWdTaGFkb3cgPSBtYWtlVW5pcXVlPFNoYWRvd0RhdGE+
KEludFBvaW50KDAsIDApLCAxMCwgMjAsIFNoYWRvd1N0eWxlOjpOb3JtYWwsIHRydWUsIENvbG9y
OjpncmVlbi5jb2xvcldpdGhBbHBoYUJ5dGUoMjAwKSk7Ci0gICAgICAgIHRleHRQYWludGVyLnNl
dFNoYWRvdyhkZWJ1Z1NoYWRvdy5nZXQoKSk7Ci0gICAgfQotCi0gICAgT3B0aW9uYWw8VGV4dERl
Y29yYXRpb25QYWludGVyPiB0ZXh0RGVjb3JhdGlvblBhaW50ZXI7Ci0gICAgaWYgKCFzdHlsZS50
ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpLmlzRW1wdHkoKSkgewotICAgICAgICBjb25zdCBSZW5k
ZXJUZXh0KiB0ZXh0UmVuZGVyZXIgPSBjaGlsZHJlbk9mVHlwZTxSZW5kZXJUZXh0PihmbG93KS5m
aXJzdCgpOwotICAgICAgICBpZiAodGV4dFJlbmRlcmVyKSB7Ci0gICAgICAgICAgICB0ZXh0RGVj
b3JhdGlvblBhaW50ZXIuZW1wbGFjZShwYWludEluZm8uY29udGV4dCgpLCBzdHlsZS50ZXh0RGVj
b3JhdGlvbnNJbkVmZmVjdCgpLCAqdGV4dFJlbmRlcmVyLCBmYWxzZSwgc3R5bGUuZm9udENhc2Nh
ZGUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBMYXlvdXRSZWN0IHBhaW50UmVjdCA9IHBh
aW50SW5mby5yZWN0OwotICAgIHBhaW50UmVjdC5tb3ZlQnkoLXBhaW50T2Zmc2V0KTsKLQotICAg
IGF1dG8mIHJlc29sdmVyID0gbGF5b3V0LnJ1blJlc29sdmVyKCk7Ci0gICAgZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3IgPSBmbG93LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKLSAgICBm
b3IgKGF1dG8gcnVuIDogcmVzb2x2ZXIucmFuZ2VGb3JSZWN0KHBhaW50UmVjdCkpIHsKLSAgICAg
ICAgaWYgKHJ1bi5zdGFydCgpID09IHJ1bi5lbmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIEZsb2F0UmVjdCByZWN0ID0gcnVuLnJlY3QoKTsKLSAgICAgICAgRmxvYXRSZWN0
IHZpc3VhbE92ZXJmbG93UmVjdCA9IGNvbXB1dGVPdmVyZmxvdyhmbG93LCByZWN0KTsKLSAgICAg
ICAgaWYgKHBhaW50UmVjdC55KCkgPiB2aXN1YWxPdmVyZmxvd1JlY3QubWF4WSgpIHx8IHBhaW50
UmVjdC5tYXhZKCkgPCB2aXN1YWxPdmVyZmxvd1JlY3QueSgpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgU3RyaW5nIHRleHRXaXRoSHlwaGVuOwotICAgICAgICBpZiAocnVuLmhh
c0h5cGhlbigpKQotICAgICAgICAgICAgdGV4dFdpdGhIeXBoZW4gPSBydW4udGV4dFdpdGhIeXBo
ZW4oKTsKLSAgICAgICAgLy8geFBvcyBpcyByZWxhdGl2ZSB0byB0aGUgbGluZSBib3gncyBsb2dp
Y2FsIGxlZnQuCi0gICAgICAgIC8vIFdlIGRvbid0IGhhdmUgYW55IGxpbmUgZ2VvbWV0cnkgaGVy
ZSBpbiBTTEwsIHNvIGxldCdzIGdldCB0aGUgZmlyc3QgcnVuJ3MgbG9naWNhbCBsZWZ0IGluIHRo
ZSBjdXJyZW50IGxpbmUgYW5kIHVzZSBpdCBhcyB0aGUgbGluZSdzIGxvZ2ljYWwgbGVmdC4KLSAg
ICAgICAgYXV0byBsaW5lTG9naWNhbExlZnQgPSAoKnJlc29sdmVyLnJhbmdlRm9yTGluZShydW4u
bGluZUluZGV4KCkpLmJlZ2luKCkpLmxvZ2ljYWxMZWZ0KCk7Ci0gICAgICAgIFRleHRSdW4gdGV4
dFJ1biB7IHJ1bi5oYXNIeXBoZW4oKSA/IHRleHRXaXRoSHlwaGVuIDogcnVuLnRleHQoKSwgcnVu
LmxvZ2ljYWxMZWZ0KCkgLSBsaW5lTG9naWNhbExlZnQsIHJ1bi5leHBhbnNpb24oKSwgcnVuLmV4
cGFuc2lvbkJlaGF2aW9yKCkgfTsKLSAgICAgICAgdGV4dFJ1bi5zZXRUYWJTaXplKCFzdHlsZS5j
b2xsYXBzZVdoaXRlU3BhY2UoKSwgc3R5bGUudGFiU2l6ZSgpKTsKLSAgICAgICAgRmxvYXRQb2lu
dCB0ZXh0T3JpZ2luIHsgcmVjdC54KCkgKyBwYWludE9mZnNldC54KCksIHJvdW5kVG9EZXZpY2VQ
aXhlbChydW4uYmFzZWxpbmVQb3NpdGlvbigpICsgcGFpbnRPZmZzZXQueSgpLCBkZXZpY2VTY2Fs
ZUZhY3RvcikgfTsKLQotICAgICAgICB0ZXh0UGFpbnRlci5zZXRHbHlwaERpc3BsYXlMaXN0SWZO
ZWVkZWQocnVuLnNpbXBsZVJ1bigpLCBwYWludEluZm8sIHN0eWxlLmZvbnRDYXNjYWRlKCksIHBh
aW50SW5mby5jb250ZXh0KCksIHRleHRSdW4pOwotICAgICAgICB0ZXh0UGFpbnRlci5wYWludCh0
ZXh0UnVuLCByZWN0LCB0ZXh0T3JpZ2luKTsKLSAgICAgICAgaWYgKHRleHREZWNvcmF0aW9uUGFp
bnRlcikgewotICAgICAgICAgICAgdGV4dERlY29yYXRpb25QYWludGVyLT5zZXRXaWR0aChyZWN0
LndpZHRoKCkpOwotICAgICAgICAgICAgdGV4dERlY29yYXRpb25QYWludGVyLT5wYWludFRleHRE
ZWNvcmF0aW9uKHRleHRSdW4sIHRleHRPcmlnaW4sIHJlY3QubG9jYXRpb24oKSArIHBhaW50T2Zm
c2V0KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBoaXRUZXN0Rmxvdyhjb25zdCBSZW5k
ZXJCbG9ja0Zsb3cmIGZsb3csIGNvbnN0IExheW91dCYgbGF5b3V0LCBjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRp
b24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQotewotICAgIGlmIChoaXRUZXN0QWN0
aW9uICE9IEhpdFRlc3RGb3JlZ3JvdW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoIWxheW91dC5ydW5Db3VudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRv
JiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKLSAgICBpZiAoc3R5bGUudmlzaWJpbGl0eSgpICE9IFZp
c2liaWxpdHk6OlZpc2libGUgfHwgc3R5bGUucG9pbnRlckV2ZW50cygpID09IFBvaW50ZXJFdmVu
dHM6Ok5vbmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIExheW91dFJlY3QgcmFuZ2VS
ZWN0ID0gbG9jYXRpb25JbkNvbnRhaW5lci5ib3VuZGluZ0JveCgpOwotICAgIHJhbmdlUmVjdC5t
b3ZlQnkoLWFjY3VtdWxhdGVkT2Zmc2V0KTsKLSAgICBhdXRvIHJlc29sdmVyID0gbGluZVJlc29s
dmVyKGxheW91dC5ydW5SZXNvbHZlcigpKTsKLSAgICBhdXRvIHJhbmdlID0gcmVzb2x2ZXIucmFu
Z2VGb3JSZWN0KHJhbmdlUmVjdCk7Ci0gICAgZm9yIChhdXRvIGl0ID0gcmFuZ2UuYmVnaW4oKSwg
ZW5kID0gcmFuZ2UuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBhdXRvIGxpbmVS
ZWN0ID0gKml0OwotICAgICAgICBsaW5lUmVjdC5tb3ZlQnkoYWNjdW11bGF0ZWRPZmZzZXQpOwot
ICAgICAgICBhdXRvJiByZW5kZXJlciA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Jj4oaXQucmVu
ZGVyZXIoKSk7Ci0gICAgICAgIGlmICghbG9jYXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKGxp
bmVSZWN0KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICByZW5kZXJlci51cGRhdGVI
aXRUZXN0UmVzdWx0KHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlv
dXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSk7Ci0gICAgICAgIGlmIChyZXN1bHQuYWRkTm9kZVRv
TGlzdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlci5ub2RlRm9ySGl0VGVzdCgpLCByZXF1ZXN0LCBs
b2NhdGlvbkluQ29udGFpbmVyLCBsaW5lUmVjdCkgPT0gSGl0VGVzdFByb2dyZXNzOjpTdG9wKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBjb2xsZWN0Rmxvd092ZXJmbG93KFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29uc3QgTGF5
b3V0JiBsYXlvdXQpCi17Ci0gICAgZm9yIChhdXRvIGxpbmVSZWN0IDogbGluZVJlc29sdmVyKGxh
eW91dC5ydW5SZXNvbHZlcigpKSkgewotICAgICAgICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93
UmVjdCA9IExheW91dFJlY3QoY29tcHV0ZU92ZXJmbG93KGZsb3csIGxpbmVSZWN0KSk7Ci0gICAg
ICAgIGZsb3cuYWRkTGF5b3V0T3ZlcmZsb3coTGF5b3V0UmVjdChsaW5lUmVjdCkpOwotICAgICAg
ICBmbG93LmFkZFZpc3VhbE92ZXJmbG93KHZpc3VhbE92ZXJmbG93UmVjdCk7Ci0gICAgfQotfQot
Ci11bnNpZ25lZCB0ZXh0T2Zmc2V0Rm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50LCBj
b25zdCBSZW5kZXJUZXh0JiByZW5kZXJlciwgY29uc3QgTGF5b3V0JiBsYXlvdXQpCi17Ci0gICAg
YXV0byYgZmxvdyA9IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKnJlbmRlcmVyLnBhcmVudCgp
KTsKLSAgICBBU1NFUlQoZmxvdy5maXJzdENoaWxkKCkgPT0gZmxvdy5sYXN0Q2hpbGQoKSk7Ci0g
ICAgYXV0byYgcmVzb2x2ZXIgPSBsYXlvdXQucnVuUmVzb2x2ZXIoKTsKLSAgICBhdXRvIGl0ID0g
cmVzb2x2ZXIucnVuRm9yUG9pbnQocG9pbnQpOwotICAgIGlmIChpdCA9PSByZXNvbHZlci5lbmQo
KSkKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyLnRleHQoKS5sZW5ndGgoKTsKLSAgICBhdXRvIHJ1
biA9ICppdDsKLSAgICBhdXRvJiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKLSAgICBUZXh0UnVuIHRl
eHRSdW4ocnVuLnRleHQoKSwgcnVuLmxvZ2ljYWxMZWZ0KCksIHJ1bi5leHBhbnNpb24oKSwgcnVu
LmV4cGFuc2lvbkJlaGF2aW9yKCkpOwotICAgIHRleHRSdW4uc2V0VGFiU2l6ZSghc3R5bGUuY29s
bGFwc2VXaGl0ZVNwYWNlKCksIHN0eWxlLnRhYlNpemUoKSk7Ci0gICAgcmV0dXJuIHJ1bi5zdGFy
dCgpICsgc3R5bGUuZm9udENhc2NhZGUoKS5vZmZzZXRGb3JQb3NpdGlvbih0ZXh0UnVuLCBwb2lu
dC54KCkgLSBydW4ubG9naWNhbExlZnQoKSwgdHJ1ZSk7Ci19Ci0KLVZlY3RvcjxGbG9hdFF1YWQ+
IGNvbGxlY3RBYnNvbHV0ZVF1YWRzRm9yUmFuZ2UoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJl
ciwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgY29uc3QgTGF5b3V0JiBsYXlvdXQsIGJv
b2wgaWdub3JlRW1wdHlUZXh0U2VsZWN0aW9ucywgYm9vbCogd2FzRml4ZWQpCi17Ci0gICAgYXV0
byYgc3R5bGUgPSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlci5wYXJlbnQoKSku
c3R5bGUoKTsKLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKLSAgICBhdXRvJiByZXNvbHZl
ciA9IGxheW91dC5ydW5SZXNvbHZlcigpOwotICAgIGZvciAoYXV0byBydW4gOiByZXNvbHZlci5y
YW5nZUZvclJlbmRlcmVyV2l0aE9mZnNldHMocmVuZGVyZXIsIHN0YXJ0LCBlbmQpKSB7Ci0gICAg
ICAgIGlmIChpZ25vcmVFbXB0eVRleHRTZWxlY3Rpb25zICYmIHJ1bi5zdGFydCgpID09IHJ1bi5l
bmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAvLyBUaGlzIHJ1biBpcyBmdWxs
eSBjb250YWluZWQuCi0gICAgICAgIGlmIChzdGFydCA8PSBydW4uc3RhcnQoKSAmJiBlbmQgPj0g
cnVuLmVuZCgpKSB7Ci0gICAgICAgICAgICBxdWFkcy5hcHBlbmQocmVuZGVyZXIubG9jYWxUb0Fi
c29sdXRlUXVhZChGbG9hdFF1YWQocnVuLnJlY3QoKSksIFVzZVRyYW5zZm9ybXMsIHdhc0ZpeGVk
KSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAvLyBQYXJ0aWFs
bHkgY29udGFpbmVkIHJ1bi4KLSAgICAgICAgVGV4dFJ1biB0ZXh0UnVuKHJ1bi50ZXh0KCksIHJ1
bi5sb2dpY2FsTGVmdCgpLCBydW4uZXhwYW5zaW9uKCksIHJ1bi5leHBhbnNpb25CZWhhdmlvcigp
KTsKLSAgICAgICAgdGV4dFJ1bi5zZXRUYWJTaXplKCFzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2Uo
KSwgc3R5bGUudGFiU2l6ZSgpKTsKLSAgICAgICAgTGF5b3V0UmVjdCBydW5SZWN0KHJ1bi5yZWN0
KCkpOwotICAgICAgICAvLyBTcGVjaWFsIGNhc2UgZW1wdHkgcmFuZ2VzLgotICAgICAgICBpZiAo
c3RhcnQgPT0gZW5kKSB7Ci0gICAgICAgICAgICBydW5SZWN0LnNldFdpZHRoKDApOwotICAgICAg
ICAgICAgcXVhZHMuYXBwZW5kKHJlbmRlcmVyLmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFk
KHJ1blJlY3QpLCBVc2VUcmFuc2Zvcm1zLCB3YXNGaXhlZCkpOwotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgYXV0byBsb2NhbFN0YXJ0ID0gc3RkOjptYXgocnVuLnN0
YXJ0KCksIHN0YXJ0KSAtIHJ1bi5zdGFydCgpOwotICAgICAgICBhdXRvIGxvY2FsRW5kID0gc3Rk
OjptaW4ocnVuLmVuZCgpLCBlbmQpIC0gcnVuLnN0YXJ0KCk7Ci0gICAgICAgIEFTU0VSVChsb2Nh
bFN0YXJ0IDw9IGxvY2FsRW5kKTsKLSAgICAgICAgc3R5bGUuZm9udENhc2NhZGUoKS5hZGp1c3RT
ZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBydW5SZWN0LCBsb2NhbFN0YXJ0LCBsb2NhbEVu
ZCk7Ci0gICAgICAgIHJ1blJlY3QgPSBzbmFwcGVkU2VsZWN0aW9uUmVjdChydW5SZWN0LCBydW4u
bG9naWNhbFJpZ2h0KCksIHJ1blJlY3QueSgpLCBydW5SZWN0LmhlaWdodCgpLCB0cnVlIC8qIGlz
SG9yaXpvbnRhbCAqLyk7Ci0gICAgICAgIHF1YWRzLmFwcGVuZChyZW5kZXJlci5sb2NhbFRvQWJz
b2x1dGVRdWFkKEZsb2F0UXVhZChydW5SZWN0KSwgVXNlVHJhbnNmb3Jtcywgd2FzRml4ZWQpKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHF1YWRzOwotfQotCi12b2lkIHNpbXBsZUxpbmVMYXlvdXRXaWxs
QmVEZWxldGVkKGNvbnN0IExheW91dCYgbGF5b3V0KQotewotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsYXlvdXQucnVuQ291bnQoKTsgKytpKQotICAgICAgICBUZXh0UGFpbnRlcjo6cmVt
b3ZlR2x5cGhEaXNwbGF5TGlzdChsYXlvdXQucnVuQXQoaSkpOwotfQotCi1ib29sIGNhblVzZUZv
ckxpbmVCb3hUcmVlKFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29uc3QgTGF5b3V0JiBsYXlvdXQp
Ci17Ci0gICAgLy8gTGluZSBicmVha2luZyByZXF1aXJlcyBzb21lIGNvbnRleHQgdGhhdCBTTEwg
Y2FuJ3QgcHJvdmlkZSBhdCB0aGUgbW9tZW50IChzZWUgUm9vdElubGluZUJveDo6c2V0TGluZUJy
ZWFrSW5mbykuCi0gICAgaWYgKGxheW91dC5saW5lQ291bnQoKSA+IDEpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmIChsYXlvdXQuaXNQYWdpbmF0ZWQoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAotICAgIGlmIChmbG93LnN0eWxlKCkucHJlc2VydmVOZXdsaW5lKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAoIWZsb3cuZmlyc3RDaGlsZCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxk
cmVuT2ZUeXBlPFJlbmRlck9iamVjdD4oZmxvdykpIHsKLSAgICAgICAgaWYgKCFpczxSZW5kZXJU
ZXh0PihjaGlsZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8vIFNpbXBs
ZSBsaW5lIGxheW91dCBpdGVyYXRvciBjYW4ndCBoYW5kbGUgcmVuZGVyZXJzIHdpdGggemVybyBs
ZW5ndGggcHJvcGVybHkuCi0gICAgICAgIGlmICghZG93bmNhc3Q8UmVuZGVyVGV4dD4oY2hpbGQp
Lmxlbmd0aCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUlubGluZVRleHRCb3goUmVuZGVyQmxv
Y2tGbG93JiBmbG93LCBJbmxpbmVUZXh0Qm94JiBpbmxpbmVUZXh0Qm94LCBjb25zdCBSdW5SZXNv
bHZlcjo6UnVuJiBydW4pCi17Ci0gICAgaW5saW5lVGV4dEJveC5zZXRMb2dpY2FsTGVmdChydW4u
bG9naWNhbExlZnQoKSk7Ci0gICAgaW5saW5lVGV4dEJveC5zZXRMb2dpY2FsVG9wKHJ1bi5yZWN0
KCkueSgpKTsKLSAgICBpbmxpbmVUZXh0Qm94LnNldExvZ2ljYWxXaWR0aChydW4ubG9naWNhbFJp
Z2h0KCkgLSBydW4ubG9naWNhbExlZnQoKSk7Ci0gICAgYXV0byBvdmVyZmxvd1JlY3QgPSBjb21w
dXRlT3ZlcmZsb3coY29uc3RfY2FzdDxSZW5kZXJCbG9ja0Zsb3cmPihmbG93KSwgcnVuLnJlY3Qo
KSk7Ci0gICAgaWYgKG92ZXJmbG93UmVjdCAhPSBydW4ucmVjdCgpKQotICAgICAgICBpbmxpbmVU
ZXh0Qm94LnNldExvZ2ljYWxPdmVyZmxvd1JlY3QoTGF5b3V0UmVjdChvdmVyZmxvd1JlY3QpKTsK
LQotICAgIGlubGluZVRleHRCb3guc2V0SGFzSHlwaGVuKHJ1bi5oYXNIeXBoZW4oKSk7Ci0gICAg
aW5saW5lVGV4dEJveC5zZXRFeHBhbnNpb25XaXRob3V0R3Jvd2luZyhydW4uZXhwYW5zaW9uKCkp
OwotCi0gICAgYXV0byBleHBhbnNpb25CZWhhdmlvciA9IHJ1bi5leHBhbnNpb25CZWhhdmlvcigp
OwotICAgIGlubGluZVRleHRCb3guc2V0Q2FuSGF2ZUxlZnRFeHBhbnNpb24oZXhwYW5zaW9uQmVo
YXZpb3IgJiBBbGxvd0xlZnRFeHBhbnNpb24pOwotICAgIGlubGluZVRleHRCb3guc2V0Q2FuSGF2
ZVJpZ2h0RXhwYW5zaW9uKGV4cGFuc2lvbkJlaGF2aW9yICYgQWxsb3dSaWdodEV4cGFuc2lvbik7
Ci0gICAgaWYgKGV4cGFuc2lvbkJlaGF2aW9yICYgRm9yY2VSaWdodEV4cGFuc2lvbikKLSAgICAg
ICAgaW5saW5lVGV4dEJveC5zZXRGb3JjZVJpZ2h0RXhwYW5zaW9uKCk7Ci0gICAgaWYgKGV4cGFu
c2lvbkJlaGF2aW9yICYgRm9yY2VMZWZ0RXhwYW5zaW9uKQotICAgICAgICBpbmxpbmVUZXh0Qm94
LnNldEZvcmNlTGVmdEV4cGFuc2lvbigpOwotfQotCi12b2lkIGdlbmVyYXRlTGluZUJveFRyZWUo
UmVuZGVyQmxvY2tGbG93JiBmbG93LCBjb25zdCBMYXlvdXQmIGxheW91dCkKLXsKLSAgICBBU1NF
UlQoIWZsb3cuY29tcGxleExpbmVMYXlvdXQoKS0+bGluZUJveGVzKCkuZmlyc3RMaW5lQm94KCkp
OwotICAgIGlmICghbGF5b3V0LnJ1bkNvdW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJl
ZjxCaWRpQ29udGV4dD4gYmlkaUNvbnRleHQgPSBCaWRpQ29udGV4dDo6Y3JlYXRlKDAsIFVfTEVG
VF9UT19SSUdIVCk7Ci0gICAgYXV0byYgcmVzb2x2ZXIgPSBsYXlvdXQucnVuUmVzb2x2ZXIoKTsK
LSAgICB1bnNpZ25lZCBsaW5lSW5kZXggPSAwOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAg
IGF1dG8gcmFuZ2UgPSByZXNvbHZlci5yYW5nZUZvckxpbmUobGluZUluZGV4KyspOwotICAgICAg
ICBpZiAocmFuZ2UuYmVnaW4oKSA9PSByYW5nZS5lbmQoKSkKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIC8vIEdlbmVyYXRlIGJpZGkgcnVucyBvdXQgb2Ygc2ltcGxlIGxpbmUgbGF5b3V0
IHJ1bnMuCi0gICAgICAgIEJpZGlSdW5MaXN0PEJpZGlSdW4+IGJpZGlSdW5zOwotICAgICAgICBm
b3IgKGF1dG8gaXQgPSByYW5nZS5iZWdpbigpOyBpdCAhPSByYW5nZS5lbmQoKTsgKytpdCkgewot
ICAgICAgICAgICAgYXV0byBydW4gPSAqaXQ7Ci0gICAgICAgICAgICBiaWRpUnVucy5hcHBlbmRS
dW4obWFrZVVuaXF1ZTxCaWRpUnVuPihydW4ubG9jYWxTdGFydCgpLCBydW4ubG9jYWxFbmQoKSwg
Y29uc3RfY2FzdDxSZW5kZXJPYmplY3QmPihydW4ucmVuZGVyZXIoKSksIGJpZGlDb250ZXh0LnB0
cigpLCBVX0xFRlRfVE9fUklHSFQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIExpbmVJbmZvIGxp
bmVJbmZvOwotICAgICAgICBsaW5lSW5mby5zZXRGaXJzdExpbmUoIWZsb3cuY29tcGxleExpbmVM
YXlvdXQoKS0+bGluZUJveGVzKCkuZmlyc3RMaW5lQm94KCkpOwotICAgICAgICAvLyBGSVhNRTog
VGhpcyBpcyBuZWVkZWQgZm9yIGZsb3cgYm94ZXMgLWJ1dCB3ZSBkb24ndCBoYXZlIHRoZW0geWV0
LgotICAgICAgICAvLyBsaW5lSW5mby5zZXRMYXN0TGluZShsYXN0TGluZSk7Ci0gICAgICAgIGxp
bmVJbmZvLnNldEVtcHR5KCFiaWRpUnVucy5ydW5Db3VudCgpKTsKLSAgICAgICAgYmlkaVJ1bnMu
c2V0TG9naWNhbGx5TGFzdFJ1bihiaWRpUnVucy5sYXN0UnVuKCkpOwotICAgICAgICBhdXRvKiBy
b290ID0gZmxvdy5jb21wbGV4TGluZUxheW91dCgpLT5jb25zdHJ1Y3RMaW5lKGJpZGlSdW5zLCBs
aW5lSW5mbyk7Ci0gICAgICAgIGJpZGlSdW5zLmNsZWFyKCk7Ci0gICAgICAgIGlmICghcm9vdCkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8mIHJvb3RMaW5lQm94ID0gKnJv
b3Q7Ci0gICAgICAgIGF1dG8gaXQgPSByYW5nZS5iZWdpbigpOwotICAgICAgICBmbG9hdCBsaW5l
V2lkdGggPSAwOwotICAgICAgICAvLyBTZXQgdGhlIGdlb21ldHJ5IGZvciB0aGUgaW5saW5lYm94
ZXMuCi0gICAgICAgIGZvciAoYXV0byogaW5saW5lQm94ID0gcm9vdExpbmVCb3guZmlyc3RDaGls
ZCgpOyBpbmxpbmVCb3ggJiYgaXQgIT0gcmFuZ2UuZW5kKCk7IGlubGluZUJveCA9IGlubGluZUJv
eC0+bmV4dE9uTGluZSgpLCArK2l0KSB7Ci0gICAgICAgICAgICBhdXRvIHJ1biA9ICppdDsKLSAg
ICAgICAgICAgIGluaXRpYWxpemVJbmxpbmVUZXh0Qm94KGZsb3csIGRvd25jYXN0PElubGluZVRl
eHRCb3g+KCppbmxpbmVCb3gpLCBydW4pOwotICAgICAgICAgICAgbGluZVdpZHRoICs9IGlubGlu
ZUJveC0+bG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGaW5pc2ggc2V0
dGluZyB1cCB0aGUgcm9vdGxpbmUuCi0gICAgICAgIGF1dG8gaXRlciA9IHJhbmdlLmJlZ2luKCk7
Ci0gICAgICAgIGF1dG8gZmlyc3RSdW4gPSAqaXRlcjsKLSAgICAgICAgcm9vdExpbmVCb3guc2V0
TG9naWNhbExlZnQoZmlyc3RSdW4ubG9naWNhbExlZnQoKSk7Ci0gICAgICAgIHJvb3RMaW5lQm94
LnNldExvZ2ljYWxXaWR0aChsaW5lV2lkdGgpOwotICAgICAgICBhdXRvIGxpbmVUb3AgPSBmaXJz
dFJ1bi5yZWN0KCkueSgpOwotICAgICAgICBhdXRvIGxpbmVIZWlnaHQgPSBmaXJzdFJ1bi5yZWN0
KCkuaGVpZ2h0KCk7Ci0gICAgICAgIHJvb3RMaW5lQm94LnNldExvZ2ljYWxUb3AobGluZVRvcCk7
Ci0gICAgICAgIHJvb3RMaW5lQm94LnNldExpbmVUb3BCb3R0b21Qb3NpdGlvbnMoTGF5b3V0VW5p
dChsaW5lVG9wKSwgTGF5b3V0VW5pdChsaW5lVG9wICsgbGluZUhlaWdodCksIExheW91dFVuaXQo
bGluZVRvcCksIExheW91dFVuaXQobGluZVRvcCArIGxpbmVIZWlnaHQpKTsKLSAgICB9Ci19Ci0K
LSNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCi1zdGF0aWMgdm9pZCBwcmludFByZWZpeChUZXh0
U3RyZWFtJiBzdHJlYW0sIGludCYgcHJpbnRlZENoYXJhY3RlcnMsIGludCBkZXB0aCkKLXsKLSAg
ICBzdHJlYW0gPDwgIi0tLS0tLS0tIC0tIjsKLSAgICBwcmludGVkQ2hhcmFjdGVycyA9IDA7Ci0g
ICAgd2hpbGUgKCsrcHJpbnRlZENoYXJhY3RlcnMgPD0gZGVwdGggKiAyKQotICAgICAgICBzdHJl
YW0gPDwgIiAiOwotfQotCi12b2lkIG91dHB1dExpbmVMYXlvdXRGb3JGbG93KFRleHRTdHJlYW0m
IHN0cmVhbSwgY29uc3QgUmVuZGVyQmxvY2tGbG93JiwgY29uc3QgTGF5b3V0JiBsYXlvdXQsIGlu
dCBkZXB0aCkKLXsKLSAgICBpbnQgcHJpbnRlZENoYXJhY3RlcnMgPSAwOwotICAgIHByaW50UHJl
Zml4KHN0cmVhbSwgcHJpbnRlZENoYXJhY3RlcnMsIGRlcHRoKTsKLQotICAgIHN0cmVhbSA8PCAi
U2ltcGxlTGluZUxheW91dCAoIiA8PCBsYXlvdXQubGluZUNvdW50KCkgPDwgIiBsaW5lcywgIiA8
PCBsYXlvdXQucnVuQ291bnQoKSA8PCAiIHJ1bnMpICgiIDw8ICZsYXlvdXQgPDwgIikiOwotICAg
IHN0cmVhbS5uZXh0TGluZSgpOwotICAgICsrZGVwdGg7Ci0KLSAgICBmb3IgKGF1dG8gcnVuIDog
bGF5b3V0LnJ1blJlc29sdmVyKCkpIHsKLSAgICAgICAgRmxvYXRSZWN0IHJlY3QgPSBydW4ucmVj
dCgpOwotICAgICAgICBwcmludFByZWZpeChzdHJlYW0sIHByaW50ZWRDaGFyYWN0ZXJzLCBkZXB0
aCk7Ci0gICAgICAgIGlmIChydW4uc3RhcnQoKSA8IHJ1bi5lbmQoKSkgewotICAgICAgICAgICAg
c3RyZWFtIDw8ICJsaW5lICIgPDwgcnVuLmxpbmVJbmRleCgpIDw8ICIgcnVuKCIgPDwgcnVuLnN0
YXJ0KCkgPDwgIiwgIiA8PCBydW4uZW5kKCkgPDwgIikgIiA8PCByZWN0IDw8ICIgXCIiIDw8IHJ1
bi50ZXh0KCkudG9TdHJpbmdXaXRob3V0Q29weWluZygpLnV0ZjgoKS5kYXRhKCkgPDwgIlwiIjsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChydW4uc3RhcnQoKSA9PSBydW4u
ZW5kKCkpOwotICAgICAgICAgICAgc3RyZWFtIDw8ICJsaW5lIGJyZWFrICIgPDwgcnVuLmxpbmVJ
bmRleCgpIDw8ICIgcnVuKCIgPDwgcnVuLnN0YXJ0KCkgPDwgIiwgIiA8PCBydW4uZW5kKCkgPDwg
IikgIiA8PCByZWN0OwotICAgICAgICB9Ci0gICAgfQotICAgIHN0cmVhbS5uZXh0TGluZSgpOwot
fQotI2VuZGlmCi0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dEZ1bmN0aW9ucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
OGM3ZDRjZGFkOWUuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
U2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxv
dy5oIgotI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBIaXRUZXN0TG9jYXRpb247Ci1j
bGFzcyBIaXRUZXN0UmVxdWVzdDsKLWNsYXNzIEhpdFRlc3RSZXN1bHQ7Ci1jbGFzcyBSZW5kZXJC
bG9ja0Zsb3c7Ci1zdHJ1Y3QgUGFpbnRJbmZvOwotCi1uYW1lc3BhY2UgU2ltcGxlTGluZUxheW91
dCB7Ci1jbGFzcyBGbG93Q29udGVudHM7Ci0KLUxheW91dFVuaXQgY29tcHV0ZUZsb3dIZWlnaHQo
Y29uc3QgUmVuZGVyQmxvY2tGbG93JiwgY29uc3QgTGF5b3V0Jik7Ci1MYXlvdXRVbml0IGNvbXB1
dGVGbG93Rmlyc3RMaW5lQmFzZWxpbmUoY29uc3QgUmVuZGVyQmxvY2tGbG93JiwgY29uc3QgTGF5
b3V0Jik7Ci1MYXlvdXRVbml0IGNvbXB1dGVGbG93TGFzdExpbmVCYXNlbGluZShjb25zdCBSZW5k
ZXJCbG9ja0Zsb3cmLCBjb25zdCBMYXlvdXQmKTsKLUZsb2F0UmVjdCBjb21wdXRlT3ZlcmZsb3co
Y29uc3QgUmVuZGVyQmxvY2tGbG93JiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0KLXZvaWQgcGFpbnRG
bG93KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IExheW91dCYsIFBhaW50SW5mbyYsIGNv
bnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCk7Ci1ib29sIGhpdFRlc3RGbG93KGNvbnN0IFJl
bmRlckJsb2NrRmxvdyYsIGNvbnN0IExheW91dCYsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwg
Y29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKLXZv
aWQgY29sbGVjdEZsb3dPdmVyZmxvdyhSZW5kZXJCbG9ja0Zsb3cmLCBjb25zdCBMYXlvdXQmKTsK
LQotdW5zaWduZWQgdGV4dE9mZnNldEZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiwgY29uc3Qg
UmVuZGVyVGV4dCYsIGNvbnN0IExheW91dCYpOwotVmVjdG9yPEZsb2F0UXVhZD4gY29sbGVjdEFi
c29sdXRlUXVhZHNGb3JSYW5nZShjb25zdCBSZW5kZXJPYmplY3QmLCB1bnNpZ25lZCBzdGFydCwg
dW5zaWduZWQgZW5kLCBjb25zdCBMYXlvdXQmLCBib29sIGlnbm9yZUVtcHR5VGV4dFNlbGVjdGlv
bnMsIGJvb2wqIHdhc0ZpeGVkKTsKLQotTGF5b3V0VW5pdCBsaW5lSGVpZ2h0RnJvbUZsb3coY29u
c3QgUmVuZGVyQmxvY2tGbG93Jik7Ci1MYXlvdXRVbml0IGJhc2VsaW5lRnJvbUZsb3coY29uc3Qg
UmVuZGVyQmxvY2tGbG93Jik7Ci0KLWJvb2wgY2FuVXNlRm9yTGluZUJveFRyZWUoUmVuZGVyQmxv
Y2tGbG93JiwgY29uc3QgTGF5b3V0Jik7Ci12b2lkIGdlbmVyYXRlTGluZUJveFRyZWUoUmVuZGVy
QmxvY2tGbG93JiwgY29uc3QgTGF5b3V0Jik7Ci0KLXZvaWQgc2ltcGxlTGluZUxheW91dFdpbGxC
ZURlbGV0ZWQoY29uc3QgTGF5b3V0Jik7Ci0KLSNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCi12
b2lkIG91dHB1dExpbmVMYXlvdXRGb3JGbG93KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRl
ckJsb2NrRmxvdyYsIGNvbnN0IExheW91dCYsIGludCBkZXB0aCk7Ci0jZW5kaWYKLQotfQotCi1u
YW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7Ci0KLWlubGluZSBMYXlvdXRVbml0IGNvbXB1dGVG
bG93SGVpZ2h0KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29uc3QgTGF5b3V0JiBsYXlv
dXQpCi17Ci0gICAgYXV0byBmbG93SGVpZ2h0ID0gbGluZUhlaWdodEZyb21GbG93KGZsb3cpICog
bGF5b3V0LmxpbmVDb3VudCgpOwotICAgIGlmICghbGF5b3V0Lmhhc0xpbmVTdHJ1dHMoKSkKLSAg
ICAgICAgcmV0dXJuIGZsb3dIZWlnaHQ7Ci0gICAgZm9yIChhdXRvJiBzdHJ1dEVudHJ5IDogbGF5
b3V0LnN0cnV0cygpKQotICAgICAgICBmbG93SGVpZ2h0ICs9IHN0cnV0RW50cnkub2Zmc2V0Owot
ICAgIHJldHVybiBmbG93SGVpZ2h0OwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBjb21wdXRlRmxv
d0ZpcnN0TGluZUJhc2VsaW5lKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29uc3QgTGF5
b3V0JiBsYXlvdXQpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChsYXlvdXQsIGxheW91dC5saW5lQ291
bnQoKSk7Ci0gICAgcmV0dXJuIGZsb3cuYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpICsgYmFzZWxp
bmVGcm9tRmxvdyhmbG93KTsKLX0KLQotaW5saW5lIExheW91dFVuaXQgY29tcHV0ZUZsb3dMYXN0
TGluZUJhc2VsaW5lKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29uc3QgTGF5b3V0JiBs
YXlvdXQpCi17Ci0gICAgQVNTRVJUKGxheW91dC5saW5lQ291bnQoKSk7Ci0gICAgcmV0dXJuIGZs
b3cuYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpICsgbGluZUhlaWdodEZyb21GbG93KGZsb3cpICog
KGxheW91dC5saW5lQ291bnQoKSAtIDEpICsgYmFzZWxpbmVGcm9tRmxvdyhmbG93KTsKLX0KLQot
aW5saW5lIExheW91dFVuaXQgbGluZUhlaWdodEZyb21GbG93KGNvbnN0IFJlbmRlckJsb2NrRmxv
dyYgZmxvdykKLXsKLSAgICByZXR1cm4gZmxvdy5saW5lSGVpZ2h0KGZhbHNlLCBIb3Jpem9udGFs
TGluZSwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKTsKLX0KLQotaW5saW5lIExheW91dFVu
aXQgYmFzZWxpbmVGcm9tRmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCi17Ci0gICAg
cmV0dXJuIGZsb3cuYmFzZWxpbmVQb3NpdGlvbihBbHBoYWJldGljQmFzZWxpbmUsIGZhbHNlLCBI
b3Jpem9udGFsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKTsKLX0KLQotfQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRQYWdp
bmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UGFn
aW5hdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjOGRlNzBlZmU3Yy4u
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5
b3V0UGFnaW5hdGlvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0UGFn
aW5hdGlvbi5oIgotCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJSZW5kZXJC
bG9ja0Zsb3cuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0LmgiCi0jaW5jbHVkZSAiU2lt
cGxlTGluZUxheW91dEZ1bmN0aW9ucy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3Bh
Y2UgU2ltcGxlTGluZUxheW91dCB7Ci0KLXN0cnVjdCBQYWdpbmF0ZWRMaW5lIHsKLSAgICBMYXlv
dXRVbml0IHRvcDsKLSAgICBMYXlvdXRVbml0IGJvdHRvbTsKLSAgICBMYXlvdXRVbml0IGhlaWdo
dDsgLy8gU2FtZSB2YWx1ZSBmb3IgZWFjaCBsaW5lcyBhdG0uCi19OwotdXNpbmcgUGFnaW5hdGVk
TGluZXMgPSBWZWN0b3I8UGFnaW5hdGVkTGluZSwgMjA+OwotCi1zdGF0aWMgUGFnaW5hdGVkTGlu
ZSBjb21wdXRlTGluZVRvcEFuZEJvdHRvbVdpdGhPdmVyZmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zs
b3cmIGZsb3csIHVuc2lnbmVkIGxpbmVJbmRleCwgTGF5b3V0OjpTaW1wbGVMaW5lU3RydXRzJiBz
dHJ1dHMpCi17Ci0gICAgLy8gRklYTUU6IEFkZCB2aXN1YWxPdmVyZmxvd0ZvckRlY29yYXRpb25z
LgotICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gZmxvdy5zdHlsZSgpLmZvbnRDYXNjYWRlKCkuZm9u
dE1ldHJpY3MoKTsKLSAgICBhdXRvIGFzY2VudCA9IGZvbnRNZXRyaWNzLmFzY2VudCgpOwotICAg
IGF1dG8gZGVzY2VudCA9IGZvbnRNZXRyaWNzLmRlc2NlbnQoKTsKLSAgICBhdXRvIGxpbmVIZWln
aHQgPSBsaW5lSGVpZ2h0RnJvbUZsb3coZmxvdyk7Ci0gICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBm
bG93LmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKTsKLSAgICBmb3IgKGF1dG8mIHN0cnV0IDogc3Ry
dXRzKSB7Ci0gICAgICAgIGlmIChzdHJ1dC5saW5lQnJlYWsgPiBsaW5lSW5kZXgpCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgb2Zmc2V0ICs9IHN0cnV0Lm9mZnNldDsKLSAgICB9Ci0gICAg
aWYgKGFzY2VudCArIGRlc2NlbnQgPD0gbGluZUhlaWdodCkgewotICAgICAgICBhdXRvIHRvcFBv
c2l0aW9uID0gbGluZUluZGV4ICogbGluZUhlaWdodCArIG9mZnNldDsKLSAgICAgICAgcmV0dXJu
IHsgdG9wUG9zaXRpb24sIHRvcFBvc2l0aW9uICsgbGluZUhlaWdodCwgbGluZUhlaWdodCB9Owot
ICAgIH0KLSAgICBhdXRvIGJhc2VsaW5lID0gYmFzZWxpbmVGcm9tRmxvdyhmbG93KTsKLSAgICBh
dXRvIHRvcFBvc2l0aW9uID0gbGluZUluZGV4ICogbGluZUhlaWdodCArIG9mZnNldCArIGJhc2Vs
aW5lIC0gYXNjZW50OwotICAgIGF1dG8gYm90dG9tUG9zaXRpb24gPSB0b3BQb3NpdGlvbiArIGFz
Y2VudCArIGRlc2NlbnQ7Ci0gICAgcmV0dXJuIHsgdG9wUG9zaXRpb24sIGJvdHRvbVBvc2l0aW9u
LCBib3R0b21Qb3NpdGlvbiAtIHRvcFBvc2l0aW9uIH07Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBj
b21wdXRlTGluZUJyZWFrSW5kZXgodW5zaWduZWQgYnJlYWtDYW5kaWRhdGUsIHVuc2lnbmVkIGxp
bmVDb3VudCwgaW50IG9ycGhhbnNOZWVkZWQsIGludCB3aWRvd3NOZWVkZWQsCi0gICAgY29uc3Qg
TGF5b3V0OjpTaW1wbGVMaW5lU3RydXRzJiBzdHJ1dHMpCi17Ci0gICAgLy8gRmlyc3QgbGluZSBk
b2VzIG5vdCBmaXQgdGhlIGN1cnJlbnQgcGFnZS4KLSAgICBpZiAoIWJyZWFrQ2FuZGlkYXRlKQot
ICAgICAgICByZXR1cm4gYnJlYWtDYW5kaWRhdGU7Ci0gICAgCi0gICAgaW50IHdpZG93c09uVGhl
TmV4dFBhZ2UgPSBsaW5lQ291bnQgLSBicmVha0NhbmRpZGF0ZTsKLSAgICBpZiAod2lkb3dzTmVl
ZGVkIDw9IHdpZG93c09uVGhlTmV4dFBhZ2UpCi0gICAgICAgIHJldHVybiBicmVha0NhbmRpZGF0
ZTsKLSAgICAvLyBPbmx5IGJyZWFrIGFmdGVyIHRoZSBmaXJzdCBsaW5lIHdpdGggd2lkb3dzLgot
ICAgIGF1dG8gbGluZUJyZWFrID0gc3RkOjptYXg8aW50PihsaW5lQ291bnQgLSB3aWRvd3NOZWVk
ZWQsIDEpOwotICAgIGlmIChvcnBoYW5zTmVlZGVkID4gbGluZUJyZWFrKQotICAgICAgICByZXR1
cm4gYnJlYWtDYW5kaWRhdGU7Ci0gICAgLy8gQnJlYWsgb24gY3VycmVudCBwYWdlIG9ubHkuCi0g
ICAgaWYgKHN0cnV0cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBsaW5lQnJlYWs7Ci0gICAg
QVNTRVJUKHN0cnV0cy5sYXN0KCkubGluZUJyZWFrICsgMSA8IGxpbmVDb3VudCk7Ci0gICAgcmV0
dXJuIHN0ZDo6bWF4PHVuc2lnbmVkPihzdHJ1dHMubGFzdCgpLmxpbmVCcmVhayArIDEsIGxpbmVC
cmVhayk7Ci19Ci0KLXN0YXRpYyBMYXlvdXRVbml0IGNvbXB1dGVPZmZzZXRBZnRlckxpbmVCcmVh
ayhMYXlvdXRVbml0IGxpbmVCcmVha1Bvc2l0aW9uLCBib29sIGlzRmlyc3RMaW5lLCBib29sIGF0
VGhlVG9wT2ZDb2x1bW5PclBhZ2UsIGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKLXsKLSAg
ICAvLyBObyBvZmZzZXQgZm9yIHRvcCBvZiB0aGUgcGFnZSBsaW5lcyB1bmxlc3Mgd2lkb3dzIHB1
c2hlZCB0aGUgbGluZSBicmVhay4KLSAgICBMYXlvdXRVbml0IG9mZnNldCA9IGlzRmlyc3RMaW5l
ID8gZmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkgOiAwX2x1OwotICAgIGlmIChhdFRoZVRv
cE9mQ29sdW1uT3JQYWdlKQotICAgICAgICByZXR1cm4gb2Zmc2V0OwotICAgIHJldHVybiBvZmZz
ZXQgKyBmbG93LnBhZ2VSZW1haW5pbmdMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KGxpbmVCcmVha1Bv
c2l0aW9uLCBSZW5kZXJCbG9ja0Zsb3c6OkV4Y2x1ZGVQYWdlQm91bmRhcnkpOwotfQotCi1zdGF0
aWMgdm9pZCBzZXRQYWdlQnJlYWtGb3JMaW5lKHVuc2lnbmVkIGxpbmVCcmVha0luZGV4LCBQYWdp
bmF0ZWRMaW5lcyYgbGluZXMsIFJlbmRlckJsb2NrRmxvdyYgZmxvdywgTGF5b3V0OjpTaW1wbGVM
aW5lU3RydXRzJiBzdHJ1dHMsCi0gICAgYm9vbCBhdFRoZVRvcE9mQ29sdW1uT3JQYWdlLCBib29s
IGxpbmVEb2VzTm90Rml0KQotewotICAgIGF1dG8gbGluZSA9IGxpbmVzLmF0KGxpbmVCcmVha0lu
ZGV4KTsKLSAgICBhdXRvIHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQgPSBmbG93LnBhZ2VSZW1haW5p
bmdMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KGxpbmUudG9wLCBSZW5kZXJCbG9ja0Zsb3c6OkV4Y2x1
ZGVQYWdlQm91bmRhcnkpOwotICAgIGF1dG8mIHN0eWxlID0gZmxvdy5zdHlsZSgpOwotICAgIGF1
dG8gZmlyc3RMaW5lRG9lc05vdEZpdCA9ICFsaW5lQnJlYWtJbmRleCAmJiBsaW5lLmhlaWdodCA8
IGZsb3cucGFnZUxvZ2ljYWxIZWlnaHRGb3JPZmZzZXQobGluZS50b3ApOwotICAgIGF1dG8gbW92
ZU9ycGhhblRvTmV4dENvbHVtbiA9IGxpbmVEb2VzTm90Rml0ICYmICFzdHlsZS5oYXNBdXRvT3Jw
aGFucygpICYmIHN0eWxlLm9ycGhhbnMoKSA+IChzaG9ydClsaW5lQnJlYWtJbmRleDsKLSAgICBp
ZiAoZmlyc3RMaW5lRG9lc05vdEZpdCB8fCBtb3ZlT3JwaGFuVG9OZXh0Q29sdW1uKSB7Ci0gICAg
ICAgIGF1dG8gZmlyc3RMaW5lID0gbGluZXMuZmlyc3QoKTsKLSAgICAgICAgYXV0byBmaXJzdExp
bmVPdmVyZmxvd1JlY3QgPSBjb21wdXRlT3ZlcmZsb3coZmxvdywgTGF5b3V0UmVjdCgwX2x1LCBm
aXJzdExpbmUudG9wLCAwX2x1LCBmaXJzdExpbmUuaGVpZ2h0KSk7Ci0gICAgICAgIGF1dG8gZmly
c3RMaW5lVXBwZXJPdmVyaGFuZyA9IHN0ZDo6bWF4KExheW91dFVuaXQoLWZpcnN0TGluZU92ZXJm
bG93UmVjdC55KCkpLCAwX2x1KTsKLSAgICAgICAgZmxvdy5zZXRQYWdpbmF0aW9uU3RydXQobGlu
ZS50b3AgKyByZW1haW5pbmdMb2dpY2FsSGVpZ2h0ICsgZmlyc3RMaW5lVXBwZXJPdmVyaGFuZyk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2Up
Ci0gICAgICAgIGZsb3cuc2V0UGFnZUJyZWFrKGxpbmUudG9wLCBsaW5lLmhlaWdodCk7Ci0gICAg
ZWxzZQotICAgICAgICBmbG93LnNldFBhZ2VCcmVhayhsaW5lLnRvcCwgbGluZS5oZWlnaHQgLSBy
ZW1haW5pbmdMb2dpY2FsSGVpZ2h0KTsKLSAgICBzdHJ1dHMuYXBwZW5kKHsgbGluZUJyZWFrSW5k
ZXgsIGNvbXB1dGVPZmZzZXRBZnRlckxpbmVCcmVhayhsaW5lc1tsaW5lQnJlYWtJbmRleF0udG9w
LCAhbGluZUJyZWFrSW5kZXgsIGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UsIGZsb3cpIH0pOwotfQot
Ci1zdGF0aWMgdm9pZCB1cGRhdGVNaW5pbXVtUGFnZUhlaWdodChSZW5kZXJCbG9ja0Zsb3cmIGZs
b3csIHVuc2lnbmVkIGxpbmVDb3VudCkKLXsKLSAgICBhdXRvJiBzdHlsZSA9IGZsb3cuc3R5bGUo
KTsKLSAgICBhdXRvIHdpZG93cyA9IHN0eWxlLmhhc0F1dG9XaWRvd3MoKSA/IDEgOiBzdGQ6Om1h
eDxpbnQ+KHN0eWxlLndpZG93cygpLCAxKTsKLSAgICBhdXRvIG9ycGhhbnMgPSBzdHlsZS5oYXNB
dXRvT3JwaGFucygpID8gMSA6IHN0ZDo6bWF4PGludD4oc3R5bGUub3JwaGFucygpLCAxKTsKLSAg
ICBhdXRvIG1pbmltdW1MaW5lQ291bnQgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oc3RkOjptYXgod2lk
b3dzLCBvcnBoYW5zKSwgbGluZUNvdW50KTsKLSAgICBmbG93LnVwZGF0ZU1pbmltdW1QYWdlSGVp
Z2h0KDAsIG1pbmltdW1MaW5lQ291bnQgKiBsaW5lSGVpZ2h0RnJvbUZsb3coZmxvdykpOwotfQot
Ci12b2lkIGFkanVzdExpbmVQb3NpdGlvbnNGb3JQYWdpbmF0aW9uKFNpbXBsZUxpbmVMYXlvdXQ6
OkxheW91dCYgc2ltcGxlTGluZXMsIFJlbmRlckJsb2NrRmxvdyYgZmxvdykKLXsKLSAgICBMYXlv
dXQ6OlNpbXBsZUxpbmVTdHJ1dHMgc3RydXRzOwotICAgIGF1dG8gbGluZUNvdW50ID0gc2ltcGxl
TGluZXMubGluZUNvdW50KCk7Ci0gICAgdXBkYXRlTWluaW11bVBhZ2VIZWlnaHQoZmxvdywgbGlu
ZUNvdW50KTsKLSAgICAvLyBGaXJzdCBwYXNzIHdpdGggbm8gcGFnaW5hdGlvbiBvZmZzZXQ/Ci0g
ICAgaWYgKCFmbG93LnBhZ2VMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KDApKQotICAgICAgICByZXR1
cm47Ci0gICAgdW5zaWduZWQgbGluZUluZGV4ID0gMDsKLSAgICBhdXRvIHdpZG93cyA9IGZsb3cu
c3R5bGUoKS5oYXNBdXRvV2lkb3dzKCkgPyAxIDogc3RkOjptYXg8aW50PihmbG93LnN0eWxlKCku
d2lkb3dzKCksIDEpOwotICAgIGF1dG8gb3JwaGFucyA9IGZsb3cuc3R5bGUoKS5oYXNBdXRvT3Jw
aGFucygpID8gMSA6IHN0ZDo6bWF4PGludD4oZmxvdy5zdHlsZSgpLm9ycGhhbnMoKSwgMSk7Ci0g
ICAgUGFnaW5hdGVkTGluZXMgbGluZXM7Ci0gICAgZm9yICh1bnNpZ25lZCBydW5JbmRleCA9IDA7
IHJ1bkluZGV4IDwgc2ltcGxlTGluZXMucnVuQ291bnQoKTsgKytydW5JbmRleCkgewotICAgICAg
ICBhdXRvJiBydW4gPSBzaW1wbGVMaW5lcy5ydW5BdChydW5JbmRleCk7Ci0gICAgICAgIGlmICgh
cnVuLmlzRW5kT2ZMaW5lKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byBs
aW5lID0gY29tcHV0ZUxpbmVUb3BBbmRCb3R0b21XaXRoT3ZlcmZsb3coZmxvdywgbGluZUluZGV4
LCBzdHJ1dHMpOwotICAgICAgICBsaW5lcy5hcHBlbmQobGluZSk7Ci0gICAgICAgIGF1dG8gcmVt
YWluaW5nSGVpZ2h0ID0gZmxvdy5wYWdlUmVtYWluaW5nTG9naWNhbEhlaWdodEZvck9mZnNldChs
aW5lLnRvcCwgUmVuZGVyQmxvY2tGbG93OjpFeGNsdWRlUGFnZUJvdW5kYXJ5KTsKLSAgICAgICAg
YXV0byBhdFRoZVRvcE9mQ29sdW1uT3JQYWdlID0gZmxvdy5wYWdlTG9naWNhbEhlaWdodEZvck9m
ZnNldChsaW5lLnRvcCkgPT0gcmVtYWluaW5nSGVpZ2h0OwotICAgICAgICBhdXRvIGxpbmVEb2Vz
Tm90Rml0ID0gbGluZS5oZWlnaHQgPiByZW1haW5pbmdIZWlnaHQ7Ci0gICAgICAgIGlmIChsaW5l
RG9lc05vdEZpdCB8fCAoYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSAmJiBsaW5lSW5kZXgpKSB7Ci0g
ICAgICAgICAgICBhdXRvIGxpbmVCcmVha0luZGV4ID0gY29tcHV0ZUxpbmVCcmVha0luZGV4KGxp
bmVJbmRleCwgbGluZUNvdW50LCBvcnBoYW5zLCB3aWRvd3MsIHN0cnV0cyk7Ci0gICAgICAgICAg
ICAvLyBBcmUgd2Ugc3RpbGwgYXQgdGhlIHRvcCBvZiB0aGUgY29sdW1uL3BhZ2U/Ci0gICAgICAg
ICAgICBhdFRoZVRvcE9mQ29sdW1uT3JQYWdlID0gYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSA/IGxp
bmVJbmRleCA9PSBsaW5lQnJlYWtJbmRleCA6IGZhbHNlOwotICAgICAgICAgICAgc2V0UGFnZUJy
ZWFrRm9yTGluZShsaW5lQnJlYWtJbmRleCwgbGluZXMsIGZsb3csIHN0cnV0cywgYXRUaGVUb3BP
ZkNvbHVtbk9yUGFnZSwgbGluZURvZXNOb3RGaXQpOwotICAgICAgICAgICAgLy8gUmVjb21wdXRl
IGxpbmUgcG9zaXRpb25zIHRoYXQgd2UgYWxyZWFkeSB2aXNpdGVkIGJ1dCB3aWRvdyBicmVhayBw
dXNoZWQgdGhlbSB0byBhIG5ldyBwYWdlLgotICAgICAgICAgICAgZm9yIChhdXRvIGkgPSBsaW5l
QnJlYWtJbmRleDsgaSA8IGxpbmVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIGxpbmVz
LmF0KGkpID0gY29tcHV0ZUxpbmVUb3BBbmRCb3R0b21XaXRoT3ZlcmZsb3coZmxvdywgaSwgc3Ry
dXRzKTsKLSAgICAgICAgfQotICAgICAgICArK2xpbmVJbmRleDsKLSAgICB9Ci0gICAgc2ltcGxl
TGluZXMuc2V0TGluZVN0cnV0cyhXVEZNb3ZlKHN0cnV0cykpOwotfQotCi19Ci19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFBhZ2luYXRpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UGFnaW5hdGlvbi5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDZhMTdjMGU1YzkuLjAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFBhZ2luYXRp
b24uaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJCbG9ja0Zsb3c7Ci0K
LW5hbWVzcGFjZSBTaW1wbGVMaW5lTGF5b3V0IHsKLQotY2xhc3MgTGF5b3V0OwotICAgIAotdm9p
ZCBhZGp1c3RMaW5lUG9zaXRpb25zRm9yUGFnaW5hdGlvbihMYXlvdXQmLCBSZW5kZXJCbG9ja0Zs
b3cmKTsKLQotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxl
TGluZUxheW91dFJlc29sdmVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNh
NmMxODgxMjhlLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Np
bXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNDUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5l
TGF5b3V0UmVzb2x2ZXIuaCIKLQotI2luY2x1ZGUgIklubGluZVRleHRCb3hTdHlsZS5oIgotI2lu
Y2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2lu
Y2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewotCi1zdGF0aWMgRmxvYXRQb2ludCBsaW5l
UG9zaXRpb24oZmxvYXQgbG9naWNhbExlZnQsIGZsb2F0IGxvZ2ljYWxUb3ApCi17Ci0gICAgcmV0
dXJuIEZsb2F0UG9pbnQobG9naWNhbExlZnQsIHJvdW5kZihsb2dpY2FsVG9wKSk7Ci19Ci0KLXN0
YXRpYyBGbG9hdFNpemUgbGluZVNpemUoZmxvYXQgbG9naWNhbExlZnQsIGZsb2F0IGxvZ2ljYWxS
aWdodCwgZmxvYXQgaGVpZ2h0KQotewotICAgIHJldHVybiBGbG9hdFNpemUobG9naWNhbFJpZ2h0
IC0gbG9naWNhbExlZnQsIGhlaWdodCk7Ci19Ci0KLVJ1blJlc29sdmVyOjpSdW46OlJ1bihjb25z
dCBJdGVyYXRvciYgaXRlcmF0b3IpCi0gICAgOiBtX2l0ZXJhdG9yKGl0ZXJhdG9yKQotewotfQot
Ci1TdHJpbmcgUnVuUmVzb2x2ZXI6OlJ1bjo6dGV4dFdpdGhIeXBoZW4oKSBjb25zdAotewotICAg
IGF1dG8mIHJ1biA9IG1faXRlcmF0b3Iuc2ltcGxlUnVuKCk7Ci0gICAgQVNTRVJUKHJ1bi5oYXNI
eXBoZW4pOwotICAgIC8vIEVtcHR5IHJ1bnMgc2hvdWxkIG5vdCBoYXZlIGh5cGhlbi4KLSAgICBB
U1NFUlQocnVuLnN0YXJ0IDwgcnVuLmVuZCk7Ci0gICAgYXV0byYgc2VnbWVudCA9IG1faXRlcmF0
b3IucmVzb2x2ZXIoKS5tX2Zsb3dDb250ZW50cy5zZWdtZW50Rm9yUnVuKHJ1bi5zdGFydCwgcnVu
LmVuZCk7Ci0gICAgYXV0byB0ZXh0ID0gU3RyaW5nVmlldyhzZWdtZW50LnRleHQpLnN1YnN0cmlu
ZyhzZWdtZW50LnRvU2VnbWVudFBvc2l0aW9uKHJ1bi5zdGFydCksIHJ1bi5lbmQgLSBydW4uc3Rh
cnQpOwotICAgIHJldHVybiBtYWtlU3RyaW5nKHRleHQsIG1faXRlcmF0b3IucmVzb2x2ZXIoKS5m
bG93KCkuc3R5bGUoKS5oeXBoZW5TdHJpbmcoKSk7Ci19Ci0KLUZsb2F0UmVjdCBSdW5SZXNvbHZl
cjo6UnVuOjpyZWN0KCkgY29uc3QKLXsKLSAgICBhdXRvJiBydW4gPSBtX2l0ZXJhdG9yLnNpbXBs
ZVJ1bigpOwotICAgIGF1dG8mIHJlc29sdmVyID0gbV9pdGVyYXRvci5yZXNvbHZlcigpOwotICAg
IGZsb2F0IGJhc2VsaW5lID0gY29tcHV0ZUJhc2VsaW5lUG9zaXRpb24oKTsKLSAgICBGbG9hdFBv
aW50IHBvc2l0aW9uID0gbGluZVBvc2l0aW9uKHJ1bi5sb2dpY2FsTGVmdCwgYmFzZWxpbmUgLSBy
ZXNvbHZlci5tX2FzY2VudCk7Ci0gICAgRmxvYXRTaXplIHNpemUgPSBsaW5lU2l6ZShydW4ubG9n
aWNhbExlZnQsIHJ1bi5sb2dpY2FsUmlnaHQsIHJlc29sdmVyLm1fYXNjZW50ICsgcmVzb2x2ZXIu
bV9kZXNjZW50ICsgcmVzb2x2ZXIubV92aXN1YWxPdmVyZmxvd09mZnNldCk7Ci0KLSAgICByZXR1
cm4gRmxvYXRSZWN0KHBvc2l0aW9uLCBzaXplKTsKLX0KLQotU3RyaW5nVmlldyBSdW5SZXNvbHZl
cjo6UnVuOjp0ZXh0KCkgY29uc3QKLXsKLSAgICBhdXRvJiBydW4gPSBtX2l0ZXJhdG9yLnNpbXBs
ZVJ1bigpOwotICAgIEFTU0VSVChydW4uc3RhcnQgPCBydW4uZW5kKTsKLSAgICBhdXRvJiBzZWdt
ZW50ID0gbV9pdGVyYXRvci5yZXNvbHZlcigpLm1fZmxvd0NvbnRlbnRzLnNlZ21lbnRGb3JSdW4o
cnVuLnN0YXJ0LCBydW4uZW5kKTsKLSAgICAvLyBXZSBjdXJyZW50bHkgc3BsaXQgcnVucyBvbiBz
ZWdtZW50IGJvdW5kYXJpZXMgKGRpZmZlcmVudCBSZW5kZXJPYmplY3QpLgotICAgIEFTU0VSVChy
dW4uZW5kIDw9IHNlZ21lbnQuZW5kKTsKLSAgICByZXR1cm4gU3RyaW5nVmlldyhzZWdtZW50LnRl
eHQpLnN1YnN0cmluZyhzZWdtZW50LnRvU2VnbWVudFBvc2l0aW9uKHJ1bi5zdGFydCksIHJ1bi5l
bmQgLSBydW4uc3RhcnQpOwotfQotCi1jb25zdCBSZW5kZXJPYmplY3QmIFJ1blJlc29sdmVyOjpS
dW46OnJlbmRlcmVyKCkgY29uc3QKLXsKLSAgICBhdXRvJiBydW4gPSBtX2l0ZXJhdG9yLnNpbXBs
ZVJ1bigpOwotICAgIC8vIEZsb3dDb250ZW50cyBjYW5ub3QgZGlmZmVyZW50aWF0ZSBlbXB0eSBy
dW5zLgotICAgIEFTU0VSVChydW4uc3RhcnQgIT0gcnVuLmVuZCk7Ci0gICAgcmV0dXJuIG1faXRl
cmF0b3IucmVzb2x2ZXIoKS5tX2Zsb3dDb250ZW50cy5zZWdtZW50Rm9yUnVuKHJ1bi5zdGFydCwg
cnVuLmVuZCkucmVuZGVyZXI7Ci19Ci0KLXVuc2lnbmVkIFJ1blJlc29sdmVyOjpSdW46OmxvY2Fs
U3RhcnQoKSBjb25zdAotewotICAgIGF1dG8mIHJ1biA9IG1faXRlcmF0b3Iuc2ltcGxlUnVuKCk7
Ci0gICAgLy8gRmxvd0NvbnRlbnRzIGNhbm5vdCBkaWZmZXJlbnRpYXRlIGVtcHR5IHJ1bnMuCi0g
ICAgQVNTRVJUKHJ1bi5zdGFydCAhPSBydW4uZW5kKTsKLSAgICByZXR1cm4gbV9pdGVyYXRvci5y
ZXNvbHZlcigpLm1fZmxvd0NvbnRlbnRzLnNlZ21lbnRGb3JSdW4ocnVuLnN0YXJ0LCBydW4uZW5k
KS50b1NlZ21lbnRQb3NpdGlvbihydW4uc3RhcnQpOwotfQotCi11bnNpZ25lZCBSdW5SZXNvbHZl
cjo6UnVuOjpsb2NhbEVuZCgpIGNvbnN0Ci17Ci0gICAgYXV0byYgcnVuID0gbV9pdGVyYXRvci5z
aW1wbGVSdW4oKTsKLSAgICAvLyBGbG93Q29udGVudHMgY2Fubm90IGRpZmZlcmVudGlhdGUgZW1w
dHkgcnVucy4KLSAgICBBU1NFUlQocnVuLnN0YXJ0ICE9IHJ1bi5lbmQpOwotICAgIHJldHVybiBt
X2l0ZXJhdG9yLnJlc29sdmVyKCkubV9mbG93Q29udGVudHMuc2VnbWVudEZvclJ1bihydW4uc3Rh
cnQsIHJ1bi5lbmQpLnRvU2VnbWVudFBvc2l0aW9uKHJ1bi5lbmQpOwotfQotCi1SdW5SZXNvbHZl
cjo6SXRlcmF0b3I6Okl0ZXJhdG9yKGNvbnN0IFJ1blJlc29sdmVyJiByZXNvbHZlciwgdW5zaWdu
ZWQgcnVuSW5kZXgsIHVuc2lnbmVkIGxpbmVJbmRleCkKLSAgICA6IG1fbGF5b3V0KCZyZXNvbHZl
ci5tX2xheW91dCkKLSAgICAsIG1fcmVzb2x2ZXIoJnJlc29sdmVyKQotICAgICwgbV9ydW5JbmRl
eChydW5JbmRleCkKLSAgICAsIG1fbGluZUluZGV4KGxpbmVJbmRleCkKLXsKLSAgICBBU1NFUlQo
JnJlc29sdmVyID09ICZtX2xheW91dC0+cnVuUmVzb2x2ZXIoKSk7Ci19Ci0KLVJ1blJlc29sdmVy
OjpJdGVyYXRvciYgUnVuUmVzb2x2ZXI6Okl0ZXJhdG9yOjphZHZhbmNlKCkKLXsKLSAgICBpZiAo
c2ltcGxlUnVuKCkuaXNFbmRPZkxpbmUpCi0gICAgICAgICsrbV9saW5lSW5kZXg7Ci0gICAgKytt
X3J1bkluZGV4OwotICAgIHJldHVybiAqdGhpczsKLX0KLQotUnVuUmVzb2x2ZXI6Okl0ZXJhdG9y
JiBSdW5SZXNvbHZlcjo6SXRlcmF0b3I6OmFkdmFuY2VMaW5lcyh1bnNpZ25lZCBsaW5lQ291bnQp
Ci17Ci0gICAgdW5zaWduZWQgcnVuQ291bnQgPSBsYXlvdXQoKS5ydW5Db3VudCgpOwotICAgIGlm
IChydW5Db3VudCA9PSBsYXlvdXQoKS5saW5lQ291bnQoKSkgewotICAgICAgICBtX3J1bkluZGV4
ID0gc3RkOjptaW4ocnVuQ291bnQsIG1fcnVuSW5kZXggKyBsaW5lQ291bnQpOwotICAgICAgICBt
X2xpbmVJbmRleCA9IG1fcnVuSW5kZXg7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0g
ICAgdW5zaWduZWQgdGFyZ2V0ID0gbV9saW5lSW5kZXggKyBsaW5lQ291bnQ7Ci0gICAgd2hpbGUg
KG1fbGluZUluZGV4IDwgdGFyZ2V0ICYmIG1fcnVuSW5kZXggPCBydW5Db3VudCkKLSAgICAgICAg
YWR2YW5jZSgpOwotCi0gICAgcmV0dXJuICp0aGlzOwotfQotCi1SdW5SZXNvbHZlcjo6UnVuUmVz
b2x2ZXIoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBjb25zdCBMYXlvdXQmIGxheW91dCkK
LSAgICA6IG1fZmxvd1JlbmRlcmVyKGZsb3cpCi0gICAgLCBtX2xheW91dChsYXlvdXQpCi0gICAg
LCBtX2Zsb3dDb250ZW50cyhmbG93KQotICAgICwgbV9saW5lSGVpZ2h0KGxpbmVIZWlnaHRGcm9t
RmxvdyhmbG93KSkKLSAgICAsIG1fYmFzZWxpbmUoYmFzZWxpbmVGcm9tRmxvdyhmbG93KSkKLSAg
ICAsIG1fYm9yZGVyQW5kUGFkZGluZ0JlZm9yZShmbG93LmJvcmRlckFuZFBhZGRpbmdCZWZvcmUo
KSkKLSAgICAsIG1fYXNjZW50KGZsb3cuc3R5bGUoKS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNz
KCkuYXNjZW50KCkpCi0gICAgLCBtX2Rlc2NlbnQoZmxvdy5zdHlsZSgpLmZvbnRDYXNjYWRlKCku
Zm9udE1ldHJpY3MoKS5kZXNjZW50KCkpCi0gICAgLCBtX3Zpc3VhbE92ZXJmbG93T2Zmc2V0KHZp
c3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvbnMoZmxvdy5zdHlsZSgpLCBudWxscHRyKS5ib3R0b20p
Ci17Ci19Ci0KLXVuc2lnbmVkIFJ1blJlc29sdmVyOjphZGp1c3RMaW5lSW5kZXhGb3JTdHJ1dHMo
TGF5b3V0VW5pdCB5LCBJbmRleFR5cGUgdHlwZSwgdW5zaWduZWQgbGluZUluZGV4Q2FuZGlkYXRl
KSBjb25zdAotewotICAgIGF1dG8mIHN0cnV0cyA9IG1fbGF5b3V0LnN0cnV0cygpOwotICAgIC8v
IFdlIG5lZWQgdG8gb2Zmc2V0IHRoZSBsaW5lSW5kZXggd2l0aCBsaW5lIHN0cnV0cyB3aGVuIHRo
ZXJlJ3MgYW4gYWN0dWFsIHN0cnV0IGJlZm9yZSB0aGUgY2FuZGlkYXRlLgotICAgIGF1dG8mIHN0
cnV0ID0gc3RydXRzLmZpcnN0KCk7Ci0gICAgaWYgKHN0cnV0LmxpbmVCcmVhayA+PSBsaW5lSW5k
ZXhDYW5kaWRhdGUpCi0gICAgICAgIHJldHVybiBsaW5lSW5kZXhDYW5kaWRhdGU7Ci0gICAgdW5z
aWduZWQgc3RydXRJbmRleCA9IDA7Ci0gICAgT3B0aW9uYWw8dW5zaWduZWQ+IGxhc3RJbmRleENh
bmRpZGF0ZTsKLSAgICBhdXRvIHRvcCA9IHN0cnV0LmxpbmVCcmVhayAqIG1fbGluZUhlaWdodDsK
LSAgICBhdXRvIGxpbmVIZWlnaHRXaXRoT3ZlcmZsb3cgPSBtX2xpbmVIZWlnaHQ7Ci0gICAgLy8g
SWYgZm9udCBpcyBsYXJnZXIgdGhhbiB0aGUgbGluZSBoZWlnaHQgKGdseXBocyBvdmVyZmxvdyks
IHVzZSB0aGUgZm9udCBzaXplIHdoZW4gY2hlY2tpbmcgbGluZSBib3VuZGFyaWVzLgotICAgIGlm
IChtX2FzY2VudCArIG1fZGVzY2VudCA+IG1fbGluZUhlaWdodCkgewotICAgICAgICBsaW5lSGVp
Z2h0V2l0aE92ZXJmbG93ID0gbV9hc2NlbnQgKyBtX2Rlc2NlbnQ7Ci0gICAgICAgIHRvcCArPSBt
X2Jhc2VsaW5lIC0gbV9hc2NlbnQ7Ci0gICAgfQotICAgIGF1dG8gYm90dG9tID0gdG9wICsgbGlu
ZUhlaWdodFdpdGhPdmVyZmxvdzsKLSAgICBmb3IgKGF1dG8gbGluZUluZGV4ID0gc3RydXQubGlu
ZUJyZWFrOyBsaW5lSW5kZXggPCBtX2xheW91dC5saW5lQ291bnQoKTsgKytsaW5lSW5kZXgpIHsK
LSAgICAgICAgZmxvYXQgc3RydXRPZmZzZXQgPSAwOwotICAgICAgICBpZiAoc3RydXRJbmRleCA8
IHN0cnV0cy5zaXplKCkgJiYgc3RydXRzLmF0KHN0cnV0SW5kZXgpLmxpbmVCcmVhayA9PSBsaW5l
SW5kZXgpCi0gICAgICAgICAgICBzdHJ1dE9mZnNldCA9IHN0cnV0cy5hdChzdHJ1dEluZGV4Kysp
Lm9mZnNldDsKLSAgICAgICAgYm90dG9tID0gdG9wICsgc3RydXRPZmZzZXQgKyBsaW5lSGVpZ2h0
V2l0aE92ZXJmbG93OwotICAgICAgICBpZiAoeSA+PSB0b3AgJiYgeSA8IGJvdHRvbSkgewotICAg
ICAgICAgICAgaWYgKHR5cGUgPT0gSW5kZXhUeXBlOjpGaXJzdCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbGluZUluZGV4OwotICAgICAgICAgICAgbGFzdEluZGV4Q2FuZGlkYXRlID0gbGluZUlu
ZGV4OwotICAgICAgICB9IGVsc2UgaWYgKGxhc3RJbmRleENhbmRpZGF0ZSkKLSAgICAgICAgICAg
IHJldHVybiAqbGFzdEluZGV4Q2FuZGlkYXRlOwotICAgICAgICB0b3AgKz0gbV9saW5lSGVpZ2h0
ICsgc3RydXRPZmZzZXQ7Ci0gICAgfQotICAgIGlmIChsYXN0SW5kZXhDYW5kaWRhdGUgfHwgeSA+
PSBib3R0b20pCi0gICAgICAgIHJldHVybiBtX2xheW91dC5saW5lQ291bnQoKSAtIDE7Ci0gICAg
Ly8gV2UgbWlzc2VkIHRoZSBsaW5lLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBsaW5lSW5kZXhDYW5kaWRhdGU7Ci19Ci0KLXVuc2lnbmVkIFJ1blJlc29sdmVyOjpsaW5l
SW5kZXhGb3JIZWlnaHQoTGF5b3V0VW5pdCBoZWlnaHQsIEluZGV4VHlwZSB0eXBlKSBjb25zdAot
ewotICAgIEFTU0VSVChtX2xpbmVIZWlnaHQpOwotICAgIGZsb2F0IHkgPSBoZWlnaHQgLSBtX2Jv
cmRlckFuZFBhZGRpbmdCZWZvcmU7Ci0gICAgLy8gTGluZXMgbWF5IG92ZXJsYXAsIGFkanVzdCB0
byBnZXQgdGhlIGZpcnN0IG9yIGxhc3QgbGluZSBhdCB0aGlzIGhlaWdodC4KLSAgICBhdXRvIGFk
anVzdGVkWSA9IHk7Ci0gICAgaWYgKHR5cGUgPT0gSW5kZXhUeXBlOjpGaXJzdCkKLSAgICAgICAg
YWRqdXN0ZWRZICs9IG1fbGluZUhlaWdodCAtIChtX2Jhc2VsaW5lICsgbV9kZXNjZW50KTsKLSAg
ICBlbHNlCi0gICAgICAgIGFkanVzdGVkWSAtPSBtX2Jhc2VsaW5lIC0gbV9hc2NlbnQ7Ci0gICAg
YWRqdXN0ZWRZID0gc3RkOjptYXg8ZmxvYXQ+KGFkanVzdGVkWSwgMCk7Ci0gICAgYXV0byBsaW5l
SW5kZXhDYW5kaWRhdGUgPSAgc3RkOjptaW48dW5zaWduZWQ+KGFkanVzdGVkWSAvIG1fbGluZUhl
aWdodCwgbV9sYXlvdXQubGluZUNvdW50KCkgLSAxKTsKLSAgICBpZiAobV9sYXlvdXQuaGFzTGlu
ZVN0cnV0cygpKQotICAgICAgICByZXR1cm4gYWRqdXN0TGluZUluZGV4Rm9yU3RydXRzKExheW91
dFVuaXQoeSksIHR5cGUsIGxpbmVJbmRleENhbmRpZGF0ZSk7Ci0gICAgcmV0dXJuIGxpbmVJbmRl
eENhbmRpZGF0ZTsKLX0KLQotV1RGOjpJdGVyYXRvclJhbmdlPFJ1blJlc29sdmVyOjpJdGVyYXRv
cj4gUnVuUmVzb2x2ZXI6OnJhbmdlRm9yUmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0KSBjb25z
dAoteyAKLSAgICBpZiAoIW1fbGluZUhlaWdodCkKLSAgICAgICAgcmV0dXJuIHsgYmVnaW4oKSwg
ZW5kKCkgfTsKLQotICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IGxpbmVJbmRleEZvckhlaWdodChy
ZWN0LnkoKSwgSW5kZXhUeXBlOjpGaXJzdCk7Ci0gICAgdW5zaWduZWQgbGFzdExpbmUgPSBzdGQ6
Om1heChmaXJzdExpbmUsIGxpbmVJbmRleEZvckhlaWdodChyZWN0Lm1heFkoKSwgSW5kZXhUeXBl
OjpMYXN0KSk7Ci0gICAgYXV0byByYW5nZUJlZ2luID0gYmVnaW4oKS5hZHZhbmNlTGluZXMoZmly
c3RMaW5lKTsKLSAgICBpZiAocmFuZ2VCZWdpbiA9PSBlbmQoKSkKLSAgICAgICAgcmV0dXJuIHsg
ZW5kKCksIGVuZCgpIH07Ci0gICAgYXV0byByYW5nZUVuZCA9IHJhbmdlQmVnaW47Ci0gICAgQVNT
RVJUKGxhc3RMaW5lID49IGZpcnN0TGluZSk7Ci0gICAgcmFuZ2VFbmQuYWR2YW5jZUxpbmVzKGxh
c3RMaW5lIC0gZmlyc3RMaW5lICsgMSk7Ci0gICAgcmV0dXJuIHsgcmFuZ2VCZWdpbiwgcmFuZ2VF
bmQgfTsKLX0KLQotV1RGOjpJdGVyYXRvclJhbmdlPFJ1blJlc29sdmVyOjpJdGVyYXRvcj4gUnVu
UmVzb2x2ZXI6OnJhbmdlRm9yTGluZSh1bnNpZ25lZCBsaW5lSW5kZXgpIGNvbnN0Ci17Ci0gICAg
YXV0byByYW5nZUJlZ2luID0gYmVnaW4oKS5hZHZhbmNlTGluZXMobGluZUluZGV4KTsKLSAgICBp
ZiAocmFuZ2VCZWdpbiA9PSBlbmQoKSkKLSAgICAgICAgcmV0dXJuIHsgZW5kKCksIGVuZCgpIH07
Ci0gICAgYXV0byByYW5nZUVuZCA9IHJhbmdlQmVnaW47Ci0gICAgcmFuZ2VFbmQuYWR2YW5jZUxp
bmVzKDEpOwotICAgIHJldHVybiB7IHJhbmdlQmVnaW4sIHJhbmdlRW5kIH07Ci19Ci0KLVdURjo6
SXRlcmF0b3JSYW5nZTxSdW5SZXNvbHZlcjo6SXRlcmF0b3I+IFJ1blJlc29sdmVyOjpyYW5nZUZv
clJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpIGNvbnN0Ci17Ci0gICAgaWYg
KGJlZ2luKCkgPT0gZW5kKCkpCi0gICAgICAgIHJldHVybiB7IGVuZCgpLCBlbmQoKSB9OwotICAg
IEZsb3dDb250ZW50czo6SXRlcmF0b3Igc2VnbWVudCA9IG1fZmxvd0NvbnRlbnRzLmJlZ2luKCk7
Ci0gICAgYXV0byBydW4gPSBiZWdpbigpOwotICAgIEFTU0VSVChzZWdtZW50LT5zdGFydCA8PSAo
KnJ1bikuc3RhcnQoKSk7Ci0gICAgLy8gTW92ZSBydW4gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUg
c2VnbWVudC4KLSAgICB3aGlsZSAoJnNlZ21lbnQtPnJlbmRlcmVyICE9ICZyZW5kZXJlciAmJiBy
dW4gIT0gZW5kKCkpIHsKLSAgICAgICAgaWYgKCgqcnVuKS5zdGFydCgpID09IHNlZ21lbnQtPnN0
YXJ0ICYmICgqcnVuKS5lbmQoKSA9PSBzZWdtZW50LT5lbmQpIHsKLSAgICAgICAgICAgICsrcnVu
OwotICAgICAgICAgICAgKytzZWdtZW50OwotICAgICAgICB9IGVsc2UgaWYgKCgqcnVuKS5zdGFy
dCgpIDwgc2VnbWVudC0+ZW5kKQotICAgICAgICAgICAgKytydW47Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICsrc2VnbWVudDsKLSAgICAgICAgQVNTRVJUKHNlZ21lbnQgIT0gbV9mbG93Q29u
dGVudHMuZW5kKCkpOwotICAgIH0KLSAgICAvLyBEbyB3ZSBhY3R1YWxseSBoYXZlIGEgcnVuIGZv
ciB0aGlzIHJlbmRlcmVyPwotICAgIC8vIENvbGxhcHNlZCB3aGl0ZXNwYWNlIHdpdGggZGVkaWNh
dGVkIHJlbmRlcmVyIGNvdWxkIGVuZCB1cCB3aXRoIG5vIHJ1biBhdCBhbGwuCi0gICAgaWYgKHJ1
biA9PSBlbmQoKSB8fCAoc2VnbWVudC0+c3RhcnQgIT0gc2VnbWVudC0+ZW5kICYmIHNlZ21lbnQt
PmVuZCA8PSAoKnJ1bikuc3RhcnQoKSkpCi0gICAgICAgIHJldHVybiB7IGVuZCgpLCBlbmQoKSB9
OwotCi0gICAgYXV0byByYW5nZUJlZ2luID0gcnVuOwotICAgIC8vIE1vdmUgYmV5b25kIHRoZSBl
bmQgb2YgdGhlIHNlZ21lbnQuCi0gICAgd2hpbGUgKHJ1biAhPSBlbmQoKSAmJiAoKnJ1bikuc3Rh
cnQoKSA8IHNlZ21lbnQtPmVuZCkKLSAgICAgICAgKytydW47Ci0gICAgLy8gU3BlY2lhbCBjYXNl
IHdoZW4gc2VnbWVudCA9PSBydW4uCi0gICAgaWYgKHJ1biA9PSByYW5nZUJlZ2luKQotICAgICAg
ICArK3J1bjsKLSAgICByZXR1cm4geyByYW5nZUJlZ2luLCBydW4gfTsKLX0KLQotUnVuUmVzb2x2
ZXI6Okl0ZXJhdG9yIFJ1blJlc29sdmVyOjpydW5Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYg
cG9pbnQpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2xpbmVIZWlnaHQpCi0gICAgICAgIHJldHVybiBl
bmQoKTsKLSAgICBpZiAoYmVnaW4oKSA9PSBlbmQoKSkKLSAgICAgICAgcmV0dXJuIGVuZCgpOwot
ICAgIHVuc2lnbmVkIGxpbmVJbmRleCA9IGxpbmVJbmRleEZvckhlaWdodChwb2ludC55KCksIElu
ZGV4VHlwZTo6TGFzdCk7Ci0gICAgYXV0byB4ID0gcG9pbnQueCgpIC0gbV9ib3JkZXJBbmRQYWRk
aW5nQmVmb3JlOwotICAgIGF1dG8gaXQgPSBiZWdpbigpOwotICAgIGl0LmFkdmFuY2VMaW5lcyhs
aW5lSW5kZXgpOwotICAgIC8vIFBvaW50IGlzIGF0IHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGZpcnN0
IHJ1biBvbiB0aGlzIGxpbmUuCi0gICAgaWYgKCgqaXQpLmxvZ2ljYWxMZWZ0KCkgPiB4KQotICAg
ICAgICByZXR1cm4gaXQ7Ci0gICAgLy8gQWR2YW5jZSB0byB0aGUgZmlyc3QgY2FuZGlkYXRlIHJ1
biBvbiB0aGlzIGxpbmUuCi0gICAgd2hpbGUgKGl0ICE9IGVuZCgpICYmICgqaXQpLmxvZ2ljYWxS
aWdodCgpIDwgeCAmJiBsaW5lSW5kZXggPT0gaXQubGluZUluZGV4KCkpCi0gICAgICAgICsraXQ7
Ci0gICAgLy8gV2UganVtcGVkIHRvIHRoZSBuZXh0IGxpbmUgc28gdGhlIHBvaW50IGlzIGF0IHRo
ZSByaWdodCBzaWRlIG9mIHRoZSBwcmV2aW91cyBsaW5lLgotICAgIGlmIChpdC5saW5lSW5kZXgo
KSA+IGxpbmVJbmRleCkKLSAgICAgICAgcmV0dXJuIC0taXQ7Ci0gICAgLy8gTm93IHdlIGhhdmUg
YSBjYW5kaWRhdGUgcnVuLgotICAgIC8vIEZpbmQgdGhlIGxhc3QgcnVuIHRoYXQgc3RpbGwgY29u
dGFpbnMgdGhpcyBwb2ludCAodGFraW5nIG92ZXJsYXBwaW5nIHJ1bnMgd2l0aCBvZGQgd29yZCBz
cGFjaW5nIHZhbHVlcyBpbnRvIGFjY291bnQpLgotICAgIHdoaWxlIChpdCAhPSBlbmQoKSAmJiAo
Kml0KS5sb2dpY2FsTGVmdCgpIDw9IHggJiYgbGluZUluZGV4ID09IGl0LmxpbmVJbmRleCgpKQot
ICAgICAgICArK2l0OwotICAgIHJldHVybiAtLWl0OwotfQotCi1XVEY6Okl0ZXJhdG9yUmFuZ2U8
UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yPiBSdW5SZXNvbHZlcjo6cmFuZ2VGb3JSZW5kZXJlcldpdGhP
ZmZzZXRzKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
LCB1bnNpZ25lZCBlbmRPZmZzZXQpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHN0YXJ0T2Zmc2V0IDw9
IGVuZE9mZnNldCk7Ci0gICAgYXV0byByYW5nZSA9IHJhbmdlRm9yUmVuZGVyZXIocmVuZGVyZXIp
OwotICAgIGlmIChyYW5nZS5iZWdpbigpID09IHJhbmdlLmVuZCgpKQotICAgICAgICByZXR1cm4g
eyBlbmQoKSwgZW5kKCkgfTsKLSAgICBhdXRvIGl0ID0gcmFuZ2UuYmVnaW4oKTsKLSAgICBhdXRv
IGxvY2FsRW5kID0gKCppdCkuc3RhcnQoKSArIGVuZE9mZnNldDsKLSAgICAvLyBBZHZhbmNlIHRv
IHRoZSBmaXJzdCBydW4gYmVmb3JlIHRoZSBzdGFydCBvZmZzZXQuIE9ubHkgdGhlIGZpcnN0IG5v
ZGUgaW4gYSByYW5nZSBjYW4gaGF2ZSBhIHN0YXJ0T2Zmc2V0LgotICAgIC8vIE5vdGUgdGhhdCB0
aGUgc3RhcnQgb2Zmc2V0IG1heSBjb2luY2lkZSB3aXRoIHRoZSBlbmQgb2YgYSBydW4uIFRoZSBy
dW4gaXMgc3RpbGwgY29uc2lkZXJlZCBzbyB0aGF0IHdlCi0gICAgLy8gY2FuIHJldHVybiBhbiBl
bXB0eSByZWN0LCB3aGljaCBjb25mb3JtcyB0byB0aGUgYmVoYXZpb3Igb2YgRWxlbWVudC5nZXRD
bGllbnRSZWN0cygpLgotICAgIHdoaWxlIChpdCAhPSByYW5nZS5lbmQoKSAmJiAoKml0KS5lbmQo
KSA8IHN0YXJ0T2Zmc2V0KQotICAgICAgICArK2l0OwotICAgIGlmIChpdCA9PSByYW5nZS5lbmQo
KSkKLSAgICAgICAgcmV0dXJuIHsgZW5kKCksIGVuZCgpIH07Ci0gICAgYXV0byByYW5nZUJlZ2lu
ID0gaXQ7Ci0gICAgLy8gU3BlY2lhbCBjYXNlIGVtcHR5IHJhbmdlcyB0aGF0IHN0YXJ0IGF0IHRo
ZSBlZGdlIG9mIHRoZSBydW4uIEFwcGFyZW50bHkgbm9ybWFsIGxpbmUgbGF5b3V0IGluY2x1ZGUg
dGhvc2UuCi0gICAgaWYgKGxvY2FsRW5kID09IHN0YXJ0T2Zmc2V0ICYmICgqaXQpLnN0YXJ0KCkg
PT0gbG9jYWxFbmQpCi0gICAgICAgIHJldHVybiB7IHJhbmdlQmVnaW4sICsraXQgfTsKLSAgICAv
LyBBZHZhbmNlIGJleW9uZCB0aGUgbGFzdCBydW4gd2l0aCB0aGUgZW5kIG9mZnNldC4KLSAgICB3
aGlsZSAoaXQgIT0gcmFuZ2UuZW5kKCkgJiYgKCppdCkuc3RhcnQoKSA8IGxvY2FsRW5kKQotICAg
ICAgICArK2l0OwotICAgIHJldHVybiB7IHJhbmdlQmVnaW4sIGl0IH07Ci19Ci0KLUxpbmVSZXNv
bHZlcjo6SXRlcmF0b3I6Okl0ZXJhdG9yKFJ1blJlc29sdmVyOjpJdGVyYXRvciBydW5JdGVyYXRv
cikKLSAgICA6IG1fcnVuSXRlcmF0b3IocnVuSXRlcmF0b3IpCi17Ci19Ci0KLUZsb2F0UmVjdCBM
aW5lUmVzb2x2ZXI6Okl0ZXJhdG9yOjpvcGVyYXRvciooKSBjb25zdAotewotICAgIHVuc2lnbmVk
IGN1cnJlbnRMaW5lID0gbV9ydW5JdGVyYXRvci5saW5lSW5kZXgoKTsKLSAgICBhdXRvIGl0ID0g
bV9ydW5JdGVyYXRvcjsKLSAgICBGbG9hdFJlY3QgcmVjdCA9ICgqaXQpLnJlY3QoKTsKLSAgICB3
aGlsZSAoaXQuYWR2YW5jZSgpLmxpbmVJbmRleCgpID09IGN1cnJlbnRMaW5lKQotICAgICAgICBy
ZWN0LnVuaXRlKCgqaXQpLnJlY3QoKSk7Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLWNvbnN0IFJl
bmRlck9iamVjdCYgTGluZVJlc29sdmVyOjpJdGVyYXRvcjo6cmVuZGVyZXIoKSBjb25zdAotewot
ICAgIC8vIEZJWE1FOiBUaGlzIHdvcmtzIGFzIGxvbmcgYXMgd2UndmUgZ290IG9ubHkgb25lIHJl
bmRlcmVyIHBlciBsaW5lLgotICAgIGF1dG8gcnVuID0gKm1fcnVuSXRlcmF0b3I7Ci0gICAgcmV0
dXJuIG1fcnVuSXRlcmF0b3IucmVzb2x2ZXIoKS5mbG93Q29udGVudHMoKS5zZWdtZW50Rm9yUnVu
KHJ1bi5zdGFydCgpLCBydW4uZW5kKCkpLnJlbmRlcmVyOwotfQotCi1MaW5lUmVzb2x2ZXI6Okxp
bmVSZXNvbHZlcihjb25zdCBSdW5SZXNvbHZlciYgcnVuUmVzb2x2ZXIpCi0gICAgOiBtX3J1blJl
c29sdmVyKHJ1blJlc29sdmVyKQotewotfQotCi19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDFjNjAwNDdmNTU3My4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaAorKysgL2Rldi9udWxsCkBA
IC0xLDMxNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJM
YXlvdXRSZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCi0jaW5jbHVkZSAiU2lt
cGxlTGluZUxheW91dC5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMu
aCIKLSNpbmNsdWRlIDx3dGYvSXRlcmF0b3JSYW5nZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgU2ltcGxlTGluZUxh
eW91dCB7Ci0KLWNsYXNzIFJ1blJlc29sdmVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBjbGFzcyBJdGVyYXRvcjsKLQotICAgIGNsYXNzIFJ1biB7Ci0gICAg
cHVibGljOgotICAgICAgICBleHBsaWNpdCBSdW4oY29uc3QgSXRlcmF0b3ImKTsKLQotICAgICAg
ICAvLyBQb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgZW5jbG9zaW5nIGZsb3cgYmxvY2suCi0gICAg
ICAgIHVuc2lnbmVkIHN0YXJ0KCkgY29uc3Q7Ci0gICAgICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0
OwotICAgICAgICAvLyBQb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgYWN0dWFsIHJlbmRlcmVyLgot
ICAgICAgICB1bnNpZ25lZCBsb2NhbFN0YXJ0KCkgY29uc3Q7Ci0gICAgICAgIHVuc2lnbmVkIGxv
Y2FsRW5kKCkgY29uc3Q7Ci0KLSAgICAgICAgZmxvYXQgbG9naWNhbExlZnQoKSBjb25zdDsKLSAg
ICAgICAgZmxvYXQgbG9naWNhbFJpZ2h0KCkgY29uc3Q7Ci0KLSAgICAgICAgRmxvYXRSZWN0IHJl
Y3QoKSBjb25zdDsKLSAgICAgICAgZmxvYXQgZXhwYW5zaW9uKCkgY29uc3Q7Ci0gICAgICAgIEV4
cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3Q7Ci0gICAgICAgIGludCBi
YXNlbGluZVBvc2l0aW9uKCkgY29uc3Q7Ci0gICAgICAgIGludCBiYXNlbGluZSgpIGNvbnN0IHsg
cmV0dXJuIG1faXRlcmF0b3IucmVzb2x2ZXIoKS5tX2Jhc2VsaW5lOyB9Ci0gICAgICAgIFN0cmlu
Z1ZpZXcgdGV4dCgpIGNvbnN0OwotICAgICAgICBTdHJpbmcgdGV4dFdpdGhIeXBoZW4oKSBjb25z
dDsKLSAgICAgICAgY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcigpIGNvbnN0OwotICAgICAg
ICBib29sIGlzRW5kT2ZMaW5lKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgaGFzSHlwaGVuKCkgY29u
c3QgeyByZXR1cm4gbV9pdGVyYXRvci5zaW1wbGVSdW4oKS5oYXNIeXBoZW47IH0KLSAgICAgICAg
Ym9vbCBpc0xpbmVCcmVhaygpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0b3Iuc2ltcGxlUnVuKCku
aXNMaW5lQnJlYWs7IH0KLSAgICAgICAgY29uc3QgU2ltcGxlTGluZUxheW91dDo6UnVuJiBzaW1w
bGVSdW4oKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpOyB9Ci0KLSAgICAg
ICAgdW5zaWduZWQgbGluZUluZGV4KCkgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBm
bG9hdCBjb21wdXRlQmFzZWxpbmVQb3NpdGlvbigpIGNvbnN0OwotICAgICAgICB2b2lkIGNvbnN0
cnVjdFN0cmluZ0Zvckh5cGhlbklmTmVlZGVkKCk7Ci0KLSAgICAgICAgY29uc3QgSXRlcmF0b3Im
IG1faXRlcmF0b3I7Ci0gICAgfTsKLQotICAgIGNsYXNzIEl0ZXJhdG9yIHsKLSAgICBmcmllbmQg
Y2xhc3MgUnVuOwotICAgIGZyaWVuZCBjbGFzcyBSdW5SZXNvbHZlcjsKLSAgICBmcmllbmQgY2xh
c3MgTGluZVJlc29sdmVyOwotICAgIHB1YmxpYzoKLSAgICAgICAgSXRlcmF0b3IoY29uc3QgUnVu
UmVzb2x2ZXImLCB1bnNpZ25lZCBydW5JbmRleCwgdW5zaWduZWQgbGluZUluZGV4KTsKLQotICAg
ICAgICBJdGVyYXRvciYgb3BlcmF0b3IrKygpOwotICAgICAgICBJdGVyYXRvciYgb3BlcmF0b3It
LSgpOwotCi0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJdGVyYXRvciYpIGNvbnN0Owot
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsKLQotICAgICAg
ICBSdW4gb3BlcmF0b3IqKCkgY29uc3Q7Ci0KLSAgICAgICAgYm9vbCBhdEJlZ2luKCkgY29uc3Q7
Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBjb25zdCBTaW1wbGVMaW5lTGF5b3V0OjpSdW4mIHNp
bXBsZVJ1bigpIGNvbnN0OwotICAgICAgICB1bnNpZ25lZCBsaW5lSW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX2xpbmVJbmRleDsgfQotICAgICAgICBJdGVyYXRvciYgYWR2YW5jZSgpOwotICAgICAg
ICBJdGVyYXRvciYgYWR2YW5jZUxpbmVzKHVuc2lnbmVkKTsKLSAgICAgICAgY29uc3QgUnVuUmVz
b2x2ZXImIHJlc29sdmVyKCkgY29uc3QgeyByZXR1cm4gKm1fcmVzb2x2ZXI7IH0KLSAgICAgICAg
Y29uc3QgTGF5b3V0JiBsYXlvdXQoKSBjb25zdCB7IHJldHVybiAqbV9sYXlvdXQ7IH0KLQotICAg
ICAgICBSZWZQdHI8Y29uc3QgTGF5b3V0PiBtX2xheW91dDsKLSAgICAgICAgY29uc3QgUnVuUmVz
b2x2ZXIqIG1fcmVzb2x2ZXI7Ci0gICAgICAgIHVuc2lnbmVkIG1fcnVuSW5kZXg7Ci0gICAgICAg
IHVuc2lnbmVkIG1fbGluZUluZGV4OwotICAgIH07Ci0KLSAgICBSdW5SZXNvbHZlcihjb25zdCBS
ZW5kZXJCbG9ja0Zsb3cmLCBjb25zdCBMYXlvdXQmKTsKLQotICAgIGNvbnN0IFJlbmRlckJsb2Nr
RmxvdyYgZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fZmxvd1JlbmRlcmVyOyB9Ci0gICAgY29uc3Qg
Rmxvd0NvbnRlbnRzJiBmbG93Q29udGVudHMoKSBjb25zdCB7IHJldHVybiBtX2Zsb3dDb250ZW50
czsgfQotICAgIEl0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7Ci0gICAgSXRlcmF0b3IgZW5kKCkgY29u
c3Q7Ci0KLSAgICBXVEY6Okl0ZXJhdG9yUmFuZ2U8SXRlcmF0b3I+IHJhbmdlRm9yUmVjdChjb25z
dCBMYXlvdXRSZWN0JikgY29uc3Q7Ci0gICAgV1RGOjpJdGVyYXRvclJhbmdlPEl0ZXJhdG9yPiBy
YW5nZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OwotICAgIFdURjo6SXRl
cmF0b3JSYW5nZTxJdGVyYXRvcj4gcmFuZ2VGb3JMaW5lKHVuc2lnbmVkIGxpbmVJbmRleCkgY29u
c3Q7Ci0gICAgSXRlcmF0b3IgcnVuRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsK
LSAgICBXVEY6Okl0ZXJhdG9yUmFuZ2U8SXRlcmF0b3I+IHJhbmdlRm9yUmVuZGVyZXJXaXRoT2Zm
c2V0cyhjb25zdCBSZW5kZXJPYmplY3QmLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKSBj
b25zdDsKLQotcHJpdmF0ZToKLSAgICBlbnVtIGNsYXNzIEluZGV4VHlwZSB7IEZpcnN0LCBMYXN0
IH07Ci0gICAgdW5zaWduZWQgbGluZUluZGV4Rm9ySGVpZ2h0KExheW91dFVuaXQsIEluZGV4VHlw
ZSkgY29uc3Q7Ci0gICAgdW5zaWduZWQgYWRqdXN0TGluZUluZGV4Rm9yU3RydXRzKExheW91dFVu
aXQsIEluZGV4VHlwZSwgdW5zaWduZWQgbGluZUluZGV4Q2FuZGlkYXRlKSBjb25zdDsKLQotICAg
IGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgbV9mbG93UmVuZGVyZXI7Ci0gICAgY29uc3QgTGF5b3V0
JiBtX2xheW91dDsKLSAgICBjb25zdCBGbG93Q29udGVudHMgbV9mbG93Q29udGVudHM7Ci0gICAg
Y29uc3QgTGF5b3V0VW5pdCBtX2xpbmVIZWlnaHQ7Ci0gICAgY29uc3QgTGF5b3V0VW5pdCBtX2Jh
c2VsaW5lOwotICAgIGNvbnN0IExheW91dFVuaXQgbV9ib3JkZXJBbmRQYWRkaW5nQmVmb3JlOwot
ICAgIGNvbnN0IGZsb2F0IG1fYXNjZW50OwotICAgIGNvbnN0IGZsb2F0IG1fZGVzY2VudDsKLSAg
ICBjb25zdCBmbG9hdCBtX3Zpc3VhbE92ZXJmbG93T2Zmc2V0OwotfTsKLQotY2xhc3MgTGluZVJl
c29sdmVyIHsKLXB1YmxpYzoKLSAgICBjbGFzcyBJdGVyYXRvciB7Ci0gICAgcHVibGljOgotICAg
ICAgICBleHBsaWNpdCBJdGVyYXRvcihSdW5SZXNvbHZlcjo6SXRlcmF0b3IpOwotCi0gICAgICAg
IEl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7Ci0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJ
dGVyYXRvciYpIGNvbnN0OwotICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3Im
KSBjb25zdDsKLQotICAgICAgICBGbG9hdFJlY3Qgb3BlcmF0b3IqKCkgY29uc3Q7Ci0gICAgICAg
IC8vIEZJWE1FOiBVc2UgYSBsaXN0IHRvIHN1cHBvcnQgbXVsdGlwbGUgcmVuZGVyZXJzIHBlciBs
aW5lLgotICAgICAgICBjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKCkgY29uc3Q7Ci0KLSAg
ICBwcml2YXRlOgotICAgICAgICBSdW5SZXNvbHZlcjo6SXRlcmF0b3IgbV9ydW5JdGVyYXRvcjsK
LSAgICB9OwotCi0gICAgTGluZVJlc29sdmVyKGNvbnN0IFJ1blJlc29sdmVyJik7Ci0KLSAgICBJ
dGVyYXRvciBiZWdpbigpIGNvbnN0OwotICAgIEl0ZXJhdG9yIGVuZCgpIGNvbnN0OwotCi0gICAg
V1RGOjpJdGVyYXRvclJhbmdlPEl0ZXJhdG9yPiByYW5nZUZvclJlY3QoY29uc3QgTGF5b3V0UmVj
dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGNvbnN0IFJ1blJlc29sdmVyJiBtX3J1blJlc29s
dmVyOwotfTsKLQotUnVuUmVzb2x2ZXIgcnVuUmVzb2x2ZXIoY29uc3QgUmVuZGVyQmxvY2tGbG93
JiwgY29uc3QgTGF5b3V0Jik7Ci1MaW5lUmVzb2x2ZXIgbGluZVJlc29sdmVyKGNvbnN0IFJ1blJl
c29sdmVyJik7Ci0KLWlubGluZSB1bnNpZ25lZCBSdW5SZXNvbHZlcjo6UnVuOjpzdGFydCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1faXRlcmF0b3Iuc2ltcGxlUnVuKCkuc3RhcnQ7Ci19Ci0KLWlu
bGluZSB1bnNpZ25lZCBSdW5SZXNvbHZlcjo6UnVuOjplbmQoKSBjb25zdAotewotICAgIHJldHVy
biBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpLmVuZDsKLX0KLQotaW5saW5lIGZsb2F0IFJ1blJlc29s
dmVyOjpSdW46OmxvZ2ljYWxMZWZ0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pdGVyYXRvci5z
aW1wbGVSdW4oKS5sb2dpY2FsTGVmdDsKLX0KLQotaW5saW5lIGZsb2F0IFJ1blJlc29sdmVyOjpS
dW46OmxvZ2ljYWxSaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faXRlcmF0b3Iuc2ltcGxl
UnVuKCkubG9naWNhbFJpZ2h0OwotfQotCi1pbmxpbmUgZmxvYXQgUnVuUmVzb2x2ZXI6OlJ1bjo6
ZXhwYW5zaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pdGVyYXRvci5zaW1wbGVSdW4oKS5l
eHBhbnNpb247Ci19Ci0KLWlubGluZSBFeHBhbnNpb25CZWhhdmlvciBSdW5SZXNvbHZlcjo6UnVu
OjpleHBhbnNpb25CZWhhdmlvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faXRlcmF0b3Iuc2lt
cGxlUnVuKCkuZXhwYW5zaW9uQmVoYXZpb3I7Ci19Ci0KLWlubGluZSBpbnQgUnVuUmVzb2x2ZXI6
OlJ1bjo6YmFzZWxpbmVQb3NpdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJvdW5kVG9JbnQo
Y29tcHV0ZUJhc2VsaW5lUG9zaXRpb24oKSk7Ci19Ci0KLWlubGluZSBib29sIFJ1blJlc29sdmVy
OjpSdW46OmlzRW5kT2ZMaW5lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pdGVyYXRvci5zaW1w
bGVSdW4oKS5pc0VuZE9mTGluZTsKLX0KLQotaW5saW5lIHVuc2lnbmVkIFJ1blJlc29sdmVyOjpS
dW46OmxpbmVJbmRleCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faXRlcmF0b3IubGluZUluZGV4
KCk7Ci19Ci0KLWlubGluZSBSdW5SZXNvbHZlcjo6SXRlcmF0b3ImIFJ1blJlc29sdmVyOjpJdGVy
YXRvcjo6b3BlcmF0b3IrKygpCi17Ci0gICAgcmV0dXJuIGFkdmFuY2UoKTsKLX0KLQotaW5saW5l
IGZsb2F0IFJ1blJlc29sdmVyOjpSdW46OmNvbXB1dGVCYXNlbGluZVBvc2l0aW9uKCkgY29uc3QK
LXsKLSAgICBhdXRvJiByZXNvbHZlciA9IG1faXRlcmF0b3IucmVzb2x2ZXIoKTsKLSAgICBhdXRv
IG9mZnNldCA9IHJlc29sdmVyLm1fYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSArIHJlc29sdmVyLm1f
bGluZUhlaWdodCAqIGxpbmVJbmRleCgpOwotICAgIGlmICghbV9pdGVyYXRvci5sYXlvdXQoKS5o
YXNMaW5lU3RydXRzKCkpCi0gICAgICAgIHJldHVybiBvZmZzZXQgKyByZXNvbHZlci5tX2Jhc2Vs
aW5lOwotICAgIGZvciAoYXV0byYgc3RydXRFbnRyeSA6IHJlc29sdmVyLm1fbGF5b3V0LnN0cnV0
cygpKSB7Ci0gICAgICAgIGlmIChzdHJ1dEVudHJ5LmxpbmVCcmVhayA+IGxpbmVJbmRleCgpKQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG9mZnNldCArPSBzdHJ1dEVudHJ5Lm9mZnNldDsK
LSAgICB9Ci0gICAgcmV0dXJuIG9mZnNldCArIHJlc29sdmVyLm1fYmFzZWxpbmU7Ci19Ci0KLWlu
bGluZSBSdW5SZXNvbHZlcjo6SXRlcmF0b3ImIFJ1blJlc29sdmVyOjpJdGVyYXRvcjo6b3BlcmF0
b3ItLSgpCi17Ci0gICAgLS1tX3J1bkluZGV4OwotICAgIGlmIChzaW1wbGVSdW4oKS5pc0VuZE9m
TGluZSkKLSAgICAgICAgLS1tX2xpbmVJbmRleDsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLWlu
bGluZSBib29sIFJ1blJlc29sdmVyOjpJdGVyYXRvcjo6b3BlcmF0b3I9PShjb25zdCBJdGVyYXRv
ciYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fcmVzb2x2ZXIgPT0gb3RoZXIubV9yZXNv
bHZlcik7Ci0gICAgcmV0dXJuIG1fcnVuSW5kZXggPT0gb3RoZXIubV9ydW5JbmRleDsKLX0KLQot
aW5saW5lIGJvb2wgUnVuUmVzb2x2ZXI6Okl0ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IEl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci19Ci0K
LWlubGluZSBSdW5SZXNvbHZlcjo6UnVuIFJ1blJlc29sdmVyOjpJdGVyYXRvcjo6b3BlcmF0b3Iq
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gUnVuKCp0aGlzKTsKLX0KLQotaW5saW5lIGJvb2wgUnVu
UmVzb2x2ZXI6Okl0ZXJhdG9yOjphdEJlZ2luKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKnRoaXMg
PT0gcmVzb2x2ZXIoKS5iZWdpbigpOwotfQotCi1pbmxpbmUgY29uc3QgU2ltcGxlTGluZUxheW91
dDo6UnVuJiBSdW5SZXNvbHZlcjo6SXRlcmF0b3I6OnNpbXBsZVJ1bigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGxheW91dCgpLnJ1bkF0KG1fcnVuSW5kZXgpOwotfQotCi1pbmxpbmUgUnVuUmVzb2x2
ZXI6Okl0ZXJhdG9yIFJ1blJlc29sdmVyOjpiZWdpbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEl0
ZXJhdG9yKCp0aGlzLCAwLCAwKTsKLX0KLQotaW5saW5lIFJ1blJlc29sdmVyOjpJdGVyYXRvciBS
dW5SZXNvbHZlcjo6ZW5kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSXRlcmF0b3IoKnRoaXMsIG1f
bGF5b3V0LnJ1bkNvdW50KCksIG1fbGF5b3V0LmxpbmVDb3VudCgpKTsKLX0KLQotaW5saW5lIExp
bmVSZXNvbHZlcjo6SXRlcmF0b3ImIExpbmVSZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yKyso
KQotewotICAgIG1fcnVuSXRlcmF0b3IuYWR2YW5jZUxpbmVzKDEpOwotICAgIHJldHVybiAqdGhp
czsKLX0KLQotaW5saW5lIGJvb2wgTGluZVJlc29sdmVyOjpJdGVyYXRvcjo6b3BlcmF0b3I9PShj
b25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcnVuSXRlcmF0b3Ig
PT0gb3RoZXIubV9ydW5JdGVyYXRvcjsKLX0KLQotaW5saW5lIGJvb2wgTGluZVJlc29sdmVyOjpJ
dGVyYXRvcjo6b3BlcmF0b3IhPShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fcnVuSXRlcmF0b3IgIT0gb3RoZXIubV9ydW5JdGVyYXRvcjsKLX0KLQotaW5saW5l
IExpbmVSZXNvbHZlcjo6SXRlcmF0b3IgTGluZVJlc29sdmVyOjpiZWdpbigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIEl0ZXJhdG9yKG1fcnVuUmVzb2x2ZXIuYmVnaW4oKSk7Ci19Ci0KLWlubGluZSBM
aW5lUmVzb2x2ZXI6Okl0ZXJhdG9yIExpbmVSZXNvbHZlcjo6ZW5kKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gSXRlcmF0b3IobV9ydW5SZXNvbHZlci5lbmQoKSk7Ci19Ci0KLWlubGluZSBXVEY6Okl0
ZXJhdG9yUmFuZ2U8TGluZVJlc29sdmVyOjpJdGVyYXRvcj4gTGluZVJlc29sdmVyOjpyYW5nZUZv
clJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICBhdXRvIHJ1blJhbmdl
ID0gbV9ydW5SZXNvbHZlci5yYW5nZUZvclJlY3QocmVjdCk7Ci0gICAgcmV0dXJuIHsgSXRlcmF0
b3IocnVuUmFuZ2UuYmVnaW4oKSksIEl0ZXJhdG9yKHJ1blJhbmdlLmVuZCgpKSB9OwotfQotCi1p
bmxpbmUgTGluZVJlc29sdmVyIGxpbmVSZXNvbHZlcihjb25zdCBSdW5SZXNvbHZlciYgcnVuUmVz
b2x2ZXIpCi17Ci0gICAgcmV0dXJuIExpbmVSZXNvbHZlcihydW5SZXNvbHZlcik7Ci19Ci0KLX0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0
VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDFlMjdkNzQ1MTMzYS4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmgiCi0K
LSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUgIkh5cGhlbmF0aW9uLmgiCi0jaW5j
bHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5o
IgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewotCi1UZXh0RnJhZ21lbnRJ
dGVyYXRvcjo6U3R5bGU6OlN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKLSAgICA6IGZv
bnQoc3R5bGUuZm9udENhc2NhZGUoKSkKLSAgICAsIHRleHRBbGlnbihzdHlsZS50ZXh0QWxpZ24o
KSkKLSAgICAsIGhhc0tlcm5pbmdPckxpZ2F0dXJlcyhmb250LmVuYWJsZUtlcm5pbmcoKSB8fCBm
b250LnJlcXVpcmVzU2hhcGluZygpKQotICAgICwgY29sbGFwc2VXaGl0ZXNwYWNlKHN0eWxlLmNv
bGxhcHNlV2hpdGVTcGFjZSgpKQotICAgICwgcHJlc2VydmVOZXdsaW5lKHN0eWxlLnByZXNlcnZl
TmV3bGluZSgpKQotICAgICwgd3JhcExpbmVzKHN0eWxlLmF1dG9XcmFwKCkpCi0gICAgLCBicmVh
a1NwYWNlcyhzdHlsZS53aGl0ZVNwYWNlKCkgPT0gV2hpdGVTcGFjZTo6QnJlYWtTcGFjZXMpCi0g
ICAgLCBicmVha0FueVdvcmRPbk92ZXJmbG93KHN0eWxlLndvcmRCcmVhaygpID09IFdvcmRCcmVh
azo6QnJlYWtBbGwgJiYgd3JhcExpbmVzKQotICAgICwgYnJlYWtXb3JkT25PdmVyZmxvdyhzdHls
ZS5icmVha1dvcmRzKCkgJiYgKHdyYXBMaW5lcyB8fCBwcmVzZXJ2ZU5ld2xpbmUpKQotICAgICwg
YnJlYWtGaXJzdFdvcmRPbk92ZXJmbG93KGJyZWFrQW55V29yZE9uT3ZlcmZsb3cgfHwgYnJlYWtX
b3JkT25PdmVyZmxvdykKLSAgICAsIGJyZWFrTkJTUCh3cmFwTGluZXMgJiYgc3R5bGUubmJzcE1v
ZGUoKSA9PSBOQlNQTW9kZTo6U3BhY2UpCi0gICAgLCBrZWVwQWxsV29yZHNGb3JDSksoc3R5bGUu
d29yZEJyZWFrKCkgPT0gV29yZEJyZWFrOjpLZWVwQWxsKQotICAgICwgd29yZFNwYWNpbmcoZm9u
dC53b3JkU3BhY2luZygpKQotICAgICwgdGFiV2lkdGgoY29sbGFwc2VXaGl0ZXNwYWNlID8gVGFi
U2l6ZSgwKSA6IHN0eWxlLnRhYlNpemUoKSkKLSAgICAsIHNob3VsZEh5cGhlbmF0ZShzdHlsZS5o
eXBoZW5zKCkgPT0gSHlwaGVuczo6QXV0byAmJiBjYW5IeXBoZW5hdGUoc3R5bGUuY29tcHV0ZWRM
b2NhbGUoKSkpCi0gICAgLCBoeXBoZW5TdHJpbmdXaWR0aChzaG91bGRIeXBoZW5hdGUgPyBmb250
LndpZHRoKFRleHRSdW4oU3RyaW5nKHN0eWxlLmh5cGhlblN0cmluZygpKSkpIDogMCkKLSAgICAs
IGh5cGhlbkxpbWl0QmVmb3JlKHN0eWxlLmh5cGhlbmF0aW9uTGltaXRCZWZvcmUoKSA8IDAgPyAy
IDogc3R5bGUuaHlwaGVuYXRpb25MaW1pdEJlZm9yZSgpKQotICAgICwgaHlwaGVuTGltaXRBZnRl
cihzdHlsZS5oeXBoZW5hdGlvbkxpbWl0QWZ0ZXIoKSA8IDAgPyAyIDogc3R5bGUuaHlwaGVuYXRp
b25MaW1pdEFmdGVyKCkpCi0gICAgLCBsb2NhbGUoc3R5bGUuY29tcHV0ZWRMb2NhbGUoKSkKLXsK
LSAgICBpZiAoc3R5bGUuaHlwaGVuYXRpb25MaW1pdExpbmVzKCkgPiAtMSkKLSAgICAgICAgaHlw
aGVuTGltaXRMaW5lcyA9IHN0eWxlLmh5cGhlbmF0aW9uTGltaXRMaW5lcygpOwotfQotCi1UZXh0
RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50SXRlcmF0b3IoY29uc3QgUmVuZGVyQmxvY2tG
bG93JiBmbG93KQotICAgIDogbV9mbG93Q29udGVudHMoZmxvdykKLSAgICAsIG1fY3VycmVudFNl
Z21lbnQobV9mbG93Q29udGVudHMuYmVnaW4oKSkKLSAgICAsIG1fbGluZUJyZWFrSXRlcmF0b3Io
bV9jdXJyZW50U2VnbWVudC0+dGV4dCwgZmxvdy5zdHlsZSgpLmNvbXB1dGVkTG9jYWxlKCkpCi0g
ICAgLCBtX3N0eWxlKGZsb3cuc3R5bGUoKSkKLXsKLX0KLQotVGV4dEZyYWdtZW50SXRlcmF0b3I6
OlRleHRGcmFnbWVudCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6bmV4dFRleHRGcmFnbWVudChmbG9h
dCB4UG9zaXRpb24pCi17Ci0gICAgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCBu
ZXh0RnJhZ21lbnQgPSBmaW5kTmV4dFRleHRGcmFnbWVudCh4UG9zaXRpb24pOwotICAgIG1fYXRF
bmRPZlNlZ21lbnQgPSAobV9jdXJyZW50U2VnbWVudCA9PSBtX2Zsb3dDb250ZW50cy5lbmQoKSkg
fHwgKG1fcG9zaXRpb24gPT0gbV9jdXJyZW50U2VnbWVudC0+ZW5kKTsKLSAgICByZXR1cm4gbmV4
dEZyYWdtZW50OwotfQotCi1UZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IFRleHRG
cmFnbWVudEl0ZXJhdG9yOjpmaW5kTmV4dFRleHRGcmFnbWVudChmbG9hdCB4UG9zaXRpb24pCi17
Ci0gICAgLy8gQSBmcmFnbWVudCBjYW4gZWl0aGVyIGJlCi0gICAgLy8gMS4gbGluZSBicmVhayB3
aGVuIDxicj4gaXMgcHJlc2VudCBvciBwcmVzZXJ2ZU5ld2xpbmUgaXMgb24gKG5vdCBjb25zaWRl
cmVkIGFzIHdoaXRlc3BhY2UpIG9yCi0gICAgLy8gMi4gd2hpdGVzcGFjZSAoY29sbGFzcGVkLCBu
b24tY29sbGFwc2VkIG11bHRpIG9yIHNpbmdsZSkgb3IKLSAgICAvLyAzLiBub24td2hpdGVzcGFj
ZSBjaGFyYWN0ZXJzLgotICAgIC8vIDQuIGNvbnRlbnQgZW5kLgotICAgIEFTU0VSVChtX2N1cnJl
bnRTZWdtZW50ICE9IG1fZmxvd0NvbnRlbnRzLmVuZCgpKTsKLSAgICB1bnNpZ25lZCBzdGFydFBv
c2l0aW9uID0gbV9wb3NpdGlvbjsKLSAgICBpZiAobV9hdEVuZE9mU2VnbWVudCkKLSAgICAgICAg
KyttX2N1cnJlbnRTZWdtZW50OwotCi0gICAgaWYgKG1fY3VycmVudFNlZ21lbnQgPT0gbV9mbG93
Q29udGVudHMuZW5kKCkpCi0gICAgICAgIHJldHVybiBUZXh0RnJhZ21lbnQoc3RhcnRQb3NpdGlv
biwgc3RhcnRQb3NpdGlvbiwgMCwgVGV4dEZyYWdtZW50OjpDb250ZW50RW5kKTsKLSAgICBpZiAo
aXNIYXJkTGluZUJyZWFrKG1fY3VycmVudFNlZ21lbnQpKQotICAgICAgICByZXR1cm4gVGV4dEZy
YWdtZW50KHN0YXJ0UG9zaXRpb24sIHN0YXJ0UG9zaXRpb24sIDAsIFRleHRGcmFnbWVudDo6SGFy
ZExpbmVCcmVhayk7Ci0gICAgaWYgKGlzU29mdExpbmVCcmVhayhzdGFydFBvc2l0aW9uKSkgewot
ICAgICAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9ICsrbV9wb3NpdGlvbjsKLSAgICAgICAgcmV0
dXJuIFRleHRGcmFnbWVudChzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgMCwgVGV4dEZyYWdt
ZW50OjpTb2Z0TGluZUJyZWFrKTsKLSAgICB9Ci0gICAgZmxvYXQgd2lkdGggPSAwOwotICAgIGJv
b2wgb3ZlcmxhcHBpbmdGcmFnbWVudCA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9u
ID0gc2tpcFRvTmV4dFBvc2l0aW9uKFBvc2l0aW9uVHlwZTo6Tm9uV2hpdGVzcGFjZSwgc3RhcnRQ
b3NpdGlvbiwgd2lkdGgsIHhQb3NpdGlvbiwgb3ZlcmxhcHBpbmdGcmFnbWVudCk7Ci0gICAgdW5z
aWduZWQgc2VnbWVudEVuZFBvc2l0aW9uID0gbV9jdXJyZW50U2VnbWVudC0+ZW5kOwotICAgIEFT
U0VSVChzdGFydFBvc2l0aW9uIDw9IGVuZFBvc2l0aW9uKTsKLSAgICBpZiAoc3RhcnRQb3NpdGlv
biA8IGVuZFBvc2l0aW9uKSB7Ci0gICAgICAgIGJvb2wgbXVsdGlwbGVXaGl0ZXNwYWNlID0gc3Rh
cnRQb3NpdGlvbiArIDEgPCBlbmRQb3NpdGlvbjsKLSAgICAgICAgYm9vbCBpc0NvbGxhcHNlZCA9
IG11bHRpcGxlV2hpdGVzcGFjZSAmJiBtX3N0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZTsKLSAgICAg
ICAgbV9wb3NpdGlvbiA9IGVuZFBvc2l0aW9uOwotICAgICAgICByZXR1cm4gVGV4dEZyYWdtZW50
KHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCB3aWR0aCwgVGV4dEZyYWdtZW50OjpXaGl0ZXNw
YWNlLCBlbmRQb3NpdGlvbiA9PSBzZWdtZW50RW5kUG9zaXRpb24sIGZhbHNlLCBpc0NvbGxhcHNl
ZCwgbV9zdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2UpOwotICAgIH0KLSAgICBlbmRQb3NpdGlvbiA9
IHNraXBUb05leHRQb3NpdGlvbihQb3NpdGlvblR5cGU6OkJyZWFrYWJsZSwgc3RhcnRQb3NpdGlv
biwgd2lkdGgsIHhQb3NpdGlvbiwgb3ZlcmxhcHBpbmdGcmFnbWVudCk7Ci0gICAgbV9wb3NpdGlv
biA9IGVuZFBvc2l0aW9uOwotICAgIHJldHVybiBUZXh0RnJhZ21lbnQoc3RhcnRQb3NpdGlvbiwg
ZW5kUG9zaXRpb24sIHdpZHRoLCBUZXh0RnJhZ21lbnQ6Ok5vbldoaXRlc3BhY2UsIGVuZFBvc2l0
aW9uID09IHNlZ21lbnRFbmRQb3NpdGlvbiwgb3ZlcmxhcHBpbmdGcmFnbWVudCwgZmFsc2UsIGZh
bHNlKTsKLX0KLQotdm9pZCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6cmV2ZXJ0VG9FbmRPZkZyYWdt
ZW50KGNvbnN0IFRleHRGcmFnbWVudCYgZnJhZ21lbnQpCi17Ci0gICAgQVNTRVJUKG1fcG9zaXRp
b24gPj0gZnJhZ21lbnQuZW5kKCkpOwotICAgIHdoaWxlIChtX2N1cnJlbnRTZWdtZW50LT5zdGFy
dCA+IGZyYWdtZW50LmVuZCgpKQotICAgICAgICAtLW1fY3VycmVudFNlZ21lbnQ7Ci0gICAgLy8g
VE9ETzogSXQgcmV2ZXJ0cyB0byB0aGUgbGFzdCBmcmFnbWVudCBvbiB0aGUgc2FtZSBwb3NpdGlv
biwgYnV0IHRoYXQncyBvayBmb3Igbm93IGFzIHdlIGRvbid0IG5lZWQgdG8KLSAgICAvLyBkaWZm
ZXJlbnRpYXRlIG11bHRpcGxlIHJlbmRlcmVycyBvbiB0aGUgc2FtZSBwb3NpdGlvbi4KLSAgICBt
X3Bvc2l0aW9uID0gZnJhZ21lbnQuZW5kKCk7Ci0gICAgbV9hdEVuZE9mU2VnbWVudCA9IGZhbHNl
OwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIG5leHRCcmVha2FibGVQb3NpdGlvbkluU2Vn
bWVudChMYXp5TGluZUJyZWFrSXRlcmF0b3ImIGxpbmVCcmVha0l0ZXJhdG9yLCB1bnNpZ25lZCBz
dGFydFBvc2l0aW9uLCBib29sIGJyZWFrTkJTUCwgYm9vbCBrZWVwQWxsV29yZHNGb3JDSkspCi17
Ci0gICAgaWYgKGtlZXBBbGxXb3Jkc0ZvckNKSykgewotICAgICAgICBpZiAoYnJlYWtOQlNQKQot
ICAgICAgICAgICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbktlZXBpbmdBbGxXb3Jkcyhs
aW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7Ci0gICAgICAgIHJldHVybiBuZXh0QnJl
YWthYmxlUG9zaXRpb25LZWVwaW5nQWxsV29yZHNJZ25vcmluZ05CU1AobGluZUJyZWFrSXRlcmF0
b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgIH0KLQotICAgIGlmIChsaW5lQnJlYWtJdGVyYXRvci5t
b2RlKCkgPT0gTGluZUJyZWFrSXRlcmF0b3JNb2RlOjpEZWZhdWx0KSB7Ci0gICAgICAgIGlmIChi
cmVha05CU1ApCi0gICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6bmV4dEJyZWFrYWJsZVBvc2l0
aW9uKGxpbmVCcmVha0l0ZXJhdG9yLCBzdGFydFBvc2l0aW9uKTsKLSAgICAgICAgcmV0dXJuIG5l
eHRCcmVha2FibGVQb3NpdGlvbklnbm9yaW5nTkJTUChsaW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQ
b3NpdGlvbik7Ci0gICAgfQotCi0gICAgaWYgKGJyZWFrTkJTUCkKLSAgICAgICAgcmV0dXJuIG5l
eHRCcmVha2FibGVQb3NpdGlvbldpdGhvdXRTaG9ydGN1dChsaW5lQnJlYWtJdGVyYXRvciwgc3Rh
cnRQb3NpdGlvbik7Ci0gICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3NpdGlvbklnbm9yaW5nTkJT
UFdpdGhvdXRTaG9ydGN1dChsaW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7Ci19Ci0K
LXVuc2lnbmVkIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpuZXh0QnJlYWthYmxlUG9zaXRpb24oY29u
c3QgRmxvd0NvbnRlbnRzOjpTZWdtZW50JiBzZWdtZW50LCB1bnNpZ25lZCBzdGFydFBvc2l0aW9u
KQotewotICAgIEFTU0VSVChzdGFydFBvc2l0aW9uIDwgc2VnbWVudC5lbmQpOwotICAgIFN0cmlu
Z1ZpZXcgY3VycmVudFRleHQgPSBtX2xpbmVCcmVha0l0ZXJhdG9yLnN0cmluZ1ZpZXcoKTsKLSAg
ICBTdHJpbmdWaWV3IHNlZ21lbnRUZXh0ID0gU3RyaW5nVmlldyhzZWdtZW50LnRleHQpOwotICAg
IGlmIChzZWdtZW50VGV4dCAhPSBjdXJyZW50VGV4dCkgewotICAgICAgICB1bnNpZ25lZCB0ZXh0
TGVuZ3RoID0gY3VycmVudFRleHQubGVuZ3RoKCk7Ci0gICAgICAgIFVDaGFyIGxhc3RDaGFyYWN0
ZXIgPSB0ZXh0TGVuZ3RoID4gMCA/IGN1cnJlbnRUZXh0W3RleHRMZW5ndGggLSAxXSA6IDA7Ci0g
ICAgICAgIFVDaGFyIHNlY29uZFRvTGFzdENoYXJhY3RlciA9IHRleHRMZW5ndGggPiAxID8gY3Vy
cmVudFRleHRbdGV4dExlbmd0aCAtIDJdIDogMDsKLSAgICAgICAgbV9saW5lQnJlYWtJdGVyYXRv
ci5zZXRQcmlvckNvbnRleHQobGFzdENoYXJhY3Rlciwgc2Vjb25kVG9MYXN0Q2hhcmFjdGVyKTsK
LSAgICAgICAgbV9saW5lQnJlYWtJdGVyYXRvci5yZXNldFN0cmluZ0FuZFJlbGVhc2VJdGVyYXRv
cihzZWdtZW50LnRleHQsIG1fc3R5bGUubG9jYWxlLCBMaW5lQnJlYWtJdGVyYXRvck1vZGU6OkRl
ZmF1bHQpOwotICAgIH0KLSAgICByZXR1cm4gc2VnbWVudC50b1JlbmRlclBvc2l0aW9uKG5leHRC
cmVha2FibGVQb3NpdGlvbkluU2VnbWVudChtX2xpbmVCcmVha0l0ZXJhdG9yLCBzZWdtZW50LnRv
U2VnbWVudFBvc2l0aW9uKHN0YXJ0UG9zaXRpb24pLCBtX3N0eWxlLmJyZWFrTkJTUCwgbV9zdHls
ZS5rZWVwQWxsV29yZHNGb3JDSkspKTsKLX0KLQotdW5zaWduZWQgVGV4dEZyYWdtZW50SXRlcmF0
b3I6Om5leHROb25XaGl0ZXNwYWNlUG9zaXRpb24oY29uc3QgRmxvd0NvbnRlbnRzOjpTZWdtZW50
JiBzZWdtZW50LCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uKQotewotICAgIEFTU0VSVChzdGFydFBv
c2l0aW9uIDwgc2VnbWVudC5lbmQpOwotICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gc3RhcnRQb3Np
dGlvbjsKLSAgICBmb3IgKDsgcG9zaXRpb24gPCBzZWdtZW50LmVuZDsgKytwb3NpdGlvbikgewot
ICAgICAgICBhdXRvIGNoYXJhY3RlciA9IHNlZ21lbnQudGV4dFtzZWdtZW50LnRvU2VnbWVudFBv
c2l0aW9uKHBvc2l0aW9uKV07Ci0gICAgICAgIGJvb2wgaXNXaGl0ZXNwYWNlID0gY2hhcmFjdGVy
ID09ICcgJyB8fCBjaGFyYWN0ZXIgPT0gJ1x0JyB8fCAoIW1fc3R5bGUucHJlc2VydmVOZXdsaW5l
ICYmIGNoYXJhY3RlciA9PSAnXG4nKTsKLSAgICAgICAgaWYgKCFpc1doaXRlc3BhY2UpCi0gICAg
ICAgICAgICByZXR1cm4gcG9zaXRpb247Ci0gICAgfQotICAgIHJldHVybiBwb3NpdGlvbjsKLX0K
LQotT3B0aW9uYWw8dW5zaWduZWQ+IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpsYXN0SHlwaGVuUG9z
aXRpb24oY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCYgcnVuLCB1bnNp
Z25lZCBiZWZvcmUpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHJ1bi5zdGFydCgpIDwgYmVmb3JlKTsK
LSAgICBhdXRvJiBzZWdtZW50ID0gKm1fY3VycmVudFNlZ21lbnQ7Ci0gICAgQVNTRVJUKHNlZ21l
bnQuc3RhcnQgPD0gYmVmb3JlICYmIGJlZm9yZSA8PSBzZWdtZW50LmVuZCk7Ci0gICAgQVNTRVJU
KGlzPFJlbmRlclRleHQ+KHNlZ21lbnQucmVuZGVyZXIpKTsKLSAgICBpZiAoIW1fc3R5bGUuc2hv
dWxkSHlwaGVuYXRlIHx8IHJ1bi50eXBlKCkgIT0gVGV4dEZyYWdtZW50OjpOb25XaGl0ZXNwYWNl
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIC8vIENoZWNrIGlmIHRoZXJlIGFy
ZSBlbm91Z2ggY2hhcmFjdGVycyBpbiB0aGUgcnVuLgotICAgIHVuc2lnbmVkIHJ1bkxlbmd0aCA9
IHJ1bi5lbmQoKSAtIHJ1bi5zdGFydCgpOwotICAgIGlmIChtX3N0eWxlLmh5cGhlbkxpbWl0QmVm
b3JlID49IHJ1bkxlbmd0aCB8fCBtX3N0eWxlLmh5cGhlbkxpbWl0QWZ0ZXIgPj0gcnVuTGVuZ3Ro
IHx8IG1fc3R5bGUuaHlwaGVuTGltaXRCZWZvcmUgKyBtX3N0eWxlLmh5cGhlbkxpbWl0QWZ0ZXIg
PiBydW5MZW5ndGgpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgYXV0byBydW5T
dGFydCA9IHNlZ21lbnQudG9TZWdtZW50UG9zaXRpb24ocnVuLnN0YXJ0KCkpOwotICAgIGF1dG8g
YmVmb3JlSW5kZXggPSBzZWdtZW50LnRvU2VnbWVudFBvc2l0aW9uKGJlZm9yZSkgLSBydW5TdGFy
dDsKLSAgICBpZiAoYmVmb3JlSW5kZXggPD0gbV9zdHlsZS5oeXBoZW5MaW1pdEJlZm9yZSkKLSAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAvLyBBZGp1c3QgYmVmb3JlIGluZGV4IHRv
IGFjY29tbW9kYXRlIHRoZSBsaW1pdC1hZnRlciB2YWx1ZSAodGhpcyBpcyB0aGUgbGFzdCBwb3Rl
bnRpYWwgaHlwaGVuIGxvY2F0aW9uKS4KLSAgICBiZWZvcmVJbmRleCA9IHN0ZDo6bWluKGJlZm9y
ZUluZGV4LCBydW5MZW5ndGggLSBtX3N0eWxlLmh5cGhlbkxpbWl0QWZ0ZXIgKyAxKTsKLSAgICBh
dXRvIHN1YnN0cmluZ0Zvckh5cGhlbmF0aW9uID0gU3RyaW5nVmlldyhzZWdtZW50LnRleHQpLnN1
YnN0cmluZyhydW5TdGFydCwgcnVuLmVuZCgpIC0gcnVuLnN0YXJ0KCkpOwotICAgIGF1dG8gaHlw
aGVuTG9jYXRpb24gPSBsYXN0SHlwaGVuTG9jYXRpb24oc3Vic3RyaW5nRm9ySHlwaGVuYXRpb24s
IGJlZm9yZUluZGV4LCBtX3N0eWxlLmxvY2FsZSk7Ci0gICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJl
IGVub3VnaCBjaGFyYWN0ZXJzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGh5cGhlbi4KLSAgICBpZiAo
aHlwaGVuTG9jYXRpb24gJiYgaHlwaGVuTG9jYXRpb24gPj0gbV9zdHlsZS5oeXBoZW5MaW1pdEJl
Zm9yZSAmJiBtX3N0eWxlLmh5cGhlbkxpbWl0QWZ0ZXIgPD0gKHJ1bkxlbmd0aCAtIGh5cGhlbkxv
Y2F0aW9uKSkKLSAgICAgICAgcmV0dXJuIHNlZ21lbnQudG9SZW5kZXJQb3NpdGlvbihoeXBoZW5M
b2NhdGlvbiArIHJ1blN0YXJ0KTsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi11bnNp
Z25lZCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6c2tpcFRvTmV4dFBvc2l0aW9uKFBvc2l0aW9uVHlw
ZSBwb3NpdGlvblR5cGUsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIGZsb2F0JiB3aWR0aCwgZmxv
YXQgeFBvc2l0aW9uLCBib29sJiBvdmVybGFwcGluZ0ZyYWdtZW50KQotewotICAgIG92ZXJsYXBw
aW5nRnJhZ21lbnQgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBjdXJyZW50UG9zaXRpb24gPSBzdGFy
dFBvc2l0aW9uOwotICAgIHVuc2lnbmVkIG5leHRQb3NpdGlvbiA9IGN1cnJlbnRQb3NpdGlvbjsK
LSAgICAvLyBDb2xsYXBzZWQgd2hpdGVzcGFjZSBoYXMgY29uc3RhbnQgd2lkdGguIERvIG5vdCBt
ZWFzdXJlIGl0LgotICAgIGlmIChwb3NpdGlvblR5cGUgPT0gTm9uV2hpdGVzcGFjZSkKLSAgICAg
ICAgbmV4dFBvc2l0aW9uID0gbmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbigqbV9jdXJyZW50U2Vn
bWVudCwgY3VycmVudFBvc2l0aW9uKTsKLSAgICBlbHNlIGlmIChwb3NpdGlvblR5cGUgPT0gQnJl
YWthYmxlKSB7Ci0gICAgICAgIG5leHRQb3NpdGlvbiA9IG5leHRCcmVha2FibGVQb3NpdGlvbigq
bV9jdXJyZW50U2VnbWVudCwgY3VycmVudFBvc2l0aW9uKTsKLSAgICAgICAgLy8gbmV4dEJyZWFr
YWJsZVBvc2l0aW9uIHJldHVybnMgdGhlIHNhbWUgcG9zaXRpb24gZm9yIGNlcnRhaW4gY2hhcmFj
dGVycyBzdWNoIGFzIGh5cGhlbnMuIENhbGwgbmV4dCBhZ2FpbiB3aXRoIG1vZGlmaWVkIHBvc2l0
aW9uIHVubGVzcyB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgc2VnbWVudC4KLSAgICAgICAgYm9v
bCBza2lwQ3VycmVudFBvc2l0aW9uID0gbmV4dFBvc2l0aW9uID09IGN1cnJlbnRQb3NpdGlvbjsK
LSAgICAgICAgaWYgKHNraXBDdXJyZW50UG9zaXRpb24pIHsKLSAgICAgICAgICAgIC8vIFdoZW4g
d2UgYXJlIHNraXBwaW5nIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgc2VnbWVudCwganVzdCBt
b3ZlIHRvIHRoZSBlbmQgb2YgdGhlIHNlZ21lbnQgYW5kIHdlJ2xsIGNoZWNrIHRoZSBuZXh0IHNl
Z21lbnQgd2hldGhlciBpdCBpcyBhbiBvdmVybGFwcGluZyBmcmFnbWVudC4KLSAgICAgICAgICAg
IEFTU0VSVChjdXJyZW50UG9zaXRpb24gPCBtX2N1cnJlbnRTZWdtZW50LT5lbmQpOwotICAgICAg
ICAgICAgaWYgKGN1cnJlbnRQb3NpdGlvbiA9PSBtX2N1cnJlbnRTZWdtZW50LT5lbmQgLSAxKQot
ICAgICAgICAgICAgICAgIG5leHRQb3NpdGlvbiA9IG1fY3VycmVudFNlZ21lbnQtPmVuZDsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBuZXh0UG9zaXRpb24gPSBuZXh0QnJlYWth
YmxlUG9zaXRpb24oKm1fY3VycmVudFNlZ21lbnQsIGN1cnJlbnRQb3NpdGlvbiArIDEpOwotICAg
ICAgICB9Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8ga25vdyB3aGV0aGVyIHRoZSB3b3JkIGFjdHVh
bGx5IGZpbmlzaGVzIGF0IHRoZSBlbmQgb2YgdGhpcyByZW5kZXJlciBvciBub3QuCi0gICAgICAg
IGlmIChuZXh0UG9zaXRpb24gPT0gbV9jdXJyZW50U2VnbWVudC0+ZW5kKSB7Ci0gICAgICAgICAg
ICBjb25zdCBhdXRvIG5leHRTZWdtZW50ID0gbV9jdXJyZW50U2VnbWVudCArIDE7Ci0gICAgICAg
ICAgICBpZiAobmV4dFNlZ21lbnQgIT0gbV9mbG93Q29udGVudHMuZW5kKCkgJiYgIWlzSGFyZExp
bmVCcmVhayhuZXh0U2VnbWVudCkpCi0gICAgICAgICAgICAgICAgb3ZlcmxhcHBpbmdGcmFnbWVu
dCA9IG5leHRQb3NpdGlvbiA8IG5leHRCcmVha2FibGVQb3NpdGlvbigqbmV4dFNlZ21lbnQsIG5l
eHRQb3NpdGlvbik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgd2lkdGggPSAwOwotICAgIGlmIChu
ZXh0UG9zaXRpb24gPT0gY3VycmVudFBvc2l0aW9uKQotICAgICAgICByZXR1cm4gY3VycmVudFBv
c2l0aW9uOwotICAgIC8vIEJvdGggbm9uLWNvbGxhcHNlZCB3aGl0ZXNwYWNlIGFuZCBub24td2hp
dGVzcGFjZSBydW5zIG5lZWQgdG8gYmUgbWVhc3VyZWQuCi0gICAgYm9vbCBtZWFzdXJlVGV4dCA9
IHBvc2l0aW9uVHlwZSAhPSBOb25XaGl0ZXNwYWNlIHx8ICFtX3N0eWxlLmNvbGxhcHNlV2hpdGVz
cGFjZTsKLSAgICBpZiAobWVhc3VyZVRleHQpCi0gICAgICAgIHdpZHRoID0gdGhpcy0+dGV4dFdp
ZHRoKGN1cnJlbnRQb3NpdGlvbiwgbmV4dFBvc2l0aW9uLCB4UG9zaXRpb24pOwotICAgIGVsc2Ug
aWYgKHN0YXJ0UG9zaXRpb24gPCBuZXh0UG9zaXRpb24pCi0gICAgICAgIHdpZHRoID0gbV9zdHls
ZS5mb250LnNwYWNlV2lkdGgoKSArIG1fc3R5bGUud29yZFNwYWNpbmc7Ci0gICAgcmV0dXJuIG5l
eHRQb3NpdGlvbjsKLX0KLQotZmxvYXQgVGV4dEZyYWdtZW50SXRlcmF0b3I6OnRleHRXaWR0aCh1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgZmxvYXQgeFBvc2l0aW9uKSBjb25zdAotewotICAg
IGF1dG8mIHNlZ21lbnQgPSAqbV9jdXJyZW50U2VnbWVudDsKLSAgICBBU1NFUlQoc2VnbWVudC5z
dGFydCA8PSBmcm9tICYmIGZyb20gPD0gc2VnbWVudC5lbmQgJiYgc2VnbWVudC5zdGFydCA8PSB0
byAmJiB0byA8PSBzZWdtZW50LmVuZCk7Ci0gICAgQVNTRVJUKGlzPFJlbmRlclRleHQ+KHNlZ21l
bnQucmVuZGVyZXIpKTsKLSAgICBpZiAoIW1fc3R5bGUuZm9udC5zaXplKCkgfHwgZnJvbSA9PSB0
bykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB1bnNpZ25lZCBzZWdtZW50RnJvbSA9IHNlZ21l
bnQudG9TZWdtZW50UG9zaXRpb24oZnJvbSk7Ci0gICAgdW5zaWduZWQgc2VnbWVudFRvID0gc2Vn
bWVudC50b1NlZ21lbnRQb3NpdGlvbih0byk7Ci0gICAgaWYgKG1fc3R5bGUuZm9udC5pc0ZpeGVk
UGl0Y2goKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRleHQ+KHNlZ21lbnQucmVu
ZGVyZXIpLndpZHRoKHNlZ21lbnRGcm9tLCBzZWdtZW50VG8gLSBzZWdtZW50RnJvbSwgbV9zdHls
ZS5mb250LCB4UG9zaXRpb24sIG51bGxwdHIsIG51bGxwdHIpOwotCi0gICAgYm9vbCBtZWFzdXJl
V2l0aEVuZFNwYWNlID0gbV9zdHlsZS5oYXNLZXJuaW5nT3JMaWdhdHVyZXMgJiYgbV9zdHlsZS5j
b2xsYXBzZVdoaXRlc3BhY2UKLSAgICAgICAgJiYgc2VnbWVudFRvIDwgc2VnbWVudC50ZXh0Lmxl
bmd0aCgpICYmIHNlZ21lbnQudGV4dFtzZWdtZW50VG9dID09ICcgJzsKLSAgICBpZiAobWVhc3Vy
ZVdpdGhFbmRTcGFjZSkKLSAgICAgICAgKytzZWdtZW50VG87Ci0gICAgZmxvYXQgd2lkdGggPSAw
OwotICAgIGlmIChzZWdtZW50LmNhblVzZVNpbXBsaWZpZWRUZXh0TWVhc3VyaW5nKQotICAgICAg
ICB3aWR0aCA9IG1fc3R5bGUuZm9udC53aWR0aEZvclNpbXBsZVRleHQoU3RyaW5nVmlldyhzZWdt
ZW50LnRleHQpLnN1YnN0cmluZyhzZWdtZW50RnJvbSwgc2VnbWVudFRvIC0gc2VnbWVudEZyb20p
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgVGV4dFJ1biBydW4oU3RyaW5nVmlldyhzZWdtZW50LnRl
eHQpLnN1YnN0cmluZyhzZWdtZW50RnJvbSwgc2VnbWVudFRvIC0gc2VnbWVudEZyb20pLCB4UG9z
aXRpb24pOwotICAgICAgICBpZiAobV9zdHlsZS50YWJXaWR0aCkKLSAgICAgICAgICAgIHJ1bi5z
ZXRUYWJTaXplKHRydWUsIG1fc3R5bGUudGFiV2lkdGgpOwotICAgICAgICB3aWR0aCA9IG1fc3R5
bGUuZm9udC53aWR0aChydW4pOwotICAgIH0KLSAgICBpZiAobWVhc3VyZVdpdGhFbmRTcGFjZSkK
LSAgICAgICAgd2lkdGggLT0gKG1fc3R5bGUuZm9udC5zcGFjZVdpZHRoKCkgKyBtX3N0eWxlLndv
cmRTcGFjaW5nKTsKLSAgICByZXR1cm4gc3RkOjptYXg8ZmxvYXQ+KDAsIHdpZHRoKTsKLX0KLQot
fQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBjZmM5YzM3ZDYzY2IuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlICJCcmVha0xpbmVzLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCi0j
aW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIFJlbmRlckJsb2NrRmxvdzsKLWNsYXNzIFJlbmRlclN0eWxlOwotCi1u
YW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7Ci0KLWNsYXNzIFRleHRGcmFnbWVudEl0ZXJhdG9y
ICB7Ci1wdWJsaWM6Ci0gICAgVGV4dEZyYWdtZW50SXRlcmF0b3IoY29uc3QgUmVuZGVyQmxvY2tG
bG93Jik7Ci0gICAgY2xhc3MgVGV4dEZyYWdtZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGVu
dW0gVHlwZSB7IEludmFsaWQsIENvbnRlbnRFbmQsIFNvZnRMaW5lQnJlYWssIEhhcmRMaW5lQnJl
YWssIFdoaXRlc3BhY2UsIE5vbldoaXRlc3BhY2UgfTsKLSAgICAgICAgVGV4dEZyYWdtZW50KCkg
PSBkZWZhdWx0OwotICAgICAgICBUZXh0RnJhZ21lbnQodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVk
IGVuZCwgZmxvYXQgd2lkdGgsIFR5cGUgdHlwZSwgYm9vbCBpc0xhc3RJblJlbmRlcmVyID0gZmFs
c2UsIGJvb2wgb3ZlcmxhcHNUb05leHRSZW5kZXJlciA9IGZhbHNlLCBib29sIGlzQ29sbGFwc2Vk
ID0gZmFsc2UsIGJvb2wgaXNDb2xsYXBzaWJsZSA9IGZhbHNlKQotICAgICAgICAgICAgOiBtX3N0
YXJ0KHN0YXJ0KQotICAgICAgICAgICAgLCBtX2VuZChlbmQpCi0gICAgICAgICAgICAsIG1fd2lk
dGgod2lkdGgpCi0gICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQotICAgICAgICAgICAgLCBtX2lz
TGFzdEluUmVuZGVyZXIoaXNMYXN0SW5SZW5kZXJlcikKLSAgICAgICAgICAgICwgbV9vdmVybGFw
c1RvTmV4dFJlbmRlcmVyKG92ZXJsYXBzVG9OZXh0UmVuZGVyZXIpCi0gICAgICAgICAgICAsIG1f
aXNDb2xsYXBzZWQoaXNDb2xsYXBzZWQpCi0gICAgICAgICAgICAsIG1faXNDb2xsYXBzaWJsZShp
c0NvbGxhcHNpYmxlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGlzVmFs
aWQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgIT0gSW52YWxpZDsgfQotICAgICAgICB1bnNpZ25l
ZCBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KLSAgICAgICAgdW5zaWduZWQgZW5k
KCkgY29uc3QgeyByZXR1cm4gbV9lbmQ7IH0KLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3QgeyBBU1NFUlQobV9lbmQgPj0gbV9zdGFydCk7IHJldHVybiBtX2VuZCAtIG1fc3RhcnQ7IH0K
LSAgICAgICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9Ci0gICAgICAg
IFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgICAgICBib29sIG92ZXJs
YXBzVG9OZXh0UmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX292ZXJsYXBzVG9OZXh0UmVuZGVy
ZXI7IH0KLSAgICAgICAgYm9vbCBpc0xhc3RJblJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9p
c0xhc3RJblJlbmRlcmVyOyB9Ci0gICAgICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGUgPT0gU29mdExpbmVCcmVhayB8fCBtX3R5cGUgPT0gSGFyZExpbmVCcmVhazsg
fQotICAgICAgICBib29sIGlzQ29sbGFwc2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbGxhcHNl
ZDsgfQotICAgICAgICBib29sIGlzQ29sbGFwc2libGUoKSBjb25zdCB7IHJldHVybiBtX2lzQ29s
bGFwc2libGU7IH0KLSAgICAgICAgYm9vbCBoYXNIeXBoZW4oKSBjb25zdCB7IHJldHVybiBtX2hh
c0h5cGhlbjsgfQotCi0gICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHN0YXJ0
KCkgPT0gZW5kKCkgJiYgIWlzTGluZUJyZWFrKCk7IH0KLSAgICAgICAgVGV4dEZyYWdtZW50IHNw
bGl0KHVuc2lnbmVkIHNwbGl0UG9zaXRpb24sIGZsb2F0IGxlZnRTaWRlV2lkdGgsIGZsb2F0IHJp
Z2h0U2lkZVdpZHRoKTsKLSAgICAgICAgVGV4dEZyYWdtZW50IHNwbGl0V2l0aEh5cGhlbih1bnNp
Z25lZCBoeXBoZW5Qb3NpdGlvbiwgZmxvYXQgaHlwaGVuU3RyaW5nV2lkdGgsIGZsb2F0IGxlZnRT
aWRlV2lkdGgsIGZsb2F0IHJpZ2h0U2lkZVdpZHRoKTsKLSAgICAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFRleHRGcmFnbWVudCYgb3RoZXIpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBtX3N0YXJ0ID09IG90aGVyLm1fc3RhcnQKLSAgICAgICAgICAgICAgICAmJiBtX2Vu
ZCA9PSBvdGhlci5tX2VuZAotICAgICAgICAgICAgICAgICYmIG1fd2lkdGggPT0gb3RoZXIubV93
aWR0aAotICAgICAgICAgICAgICAgICYmIG1fdHlwZSA9PSBvdGhlci5tX3R5cGUKLSAgICAgICAg
ICAgICAgICAmJiBtX2lzTGFzdEluUmVuZGVyZXIgPT0gb3RoZXIubV9pc0xhc3RJblJlbmRlcmVy
Ci0gICAgICAgICAgICAgICAgJiYgbV9vdmVybGFwc1RvTmV4dFJlbmRlcmVyID09IG90aGVyLm1f
b3ZlcmxhcHNUb05leHRSZW5kZXJlcgotICAgICAgICAgICAgICAgICYmIG1faXNDb2xsYXBzZWQg
PT0gb3RoZXIubV9pc0NvbGxhcHNlZAotICAgICAgICAgICAgICAgICYmIG1faXNDb2xsYXBzaWJs
ZSA9PSBvdGhlci5tX2lzQ29sbGFwc2libGUKLSAgICAgICAgICAgICAgICAmJiBtX2hhc0h5cGhl
biA9PSBvdGhlci5tX2hhc0h5cGhlbjsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgdW5zaWduZWQgbV9zdGFydCB7IDAgfTsKLSAgICAgICAgdW5zaWduZWQgbV9lbmQgeyAwIH07
Ci0gICAgICAgIGZsb2F0IG1fd2lkdGggeyAwIH07Ci0gICAgICAgIFR5cGUgbV90eXBlIHsgSW52
YWxpZCB9OwotICAgICAgICBib29sIG1faXNMYXN0SW5SZW5kZXJlciB7IGZhbHNlIH07Ci0gICAg
ICAgIGJvb2wgbV9vdmVybGFwc1RvTmV4dFJlbmRlcmVyIHsgZmFsc2UgfTsKLSAgICAgICAgYm9v
bCBtX2lzQ29sbGFwc2VkIHsgZmFsc2UgfTsKLSAgICAgICAgYm9vbCBtX2lzQ29sbGFwc2libGUg
eyBmYWxzZSB9OwotICAgICAgICBib29sIG1faGFzSHlwaGVuIHsgZmFsc2UgfTsKLSAgICB9Owot
ICAgIFRleHRGcmFnbWVudCBuZXh0VGV4dEZyYWdtZW50KGZsb2F0IHhQb3NpdGlvbiA9IDApOwot
ICAgIHZvaWQgcmV2ZXJ0VG9FbmRPZkZyYWdtZW50KGNvbnN0IFRleHRGcmFnbWVudCYpOwotCi0g
ICAgLy8gRklYTUU6IFRoZXNlIGZ1bmN0aW9ucyBiZWxvdyBzaG91bGQgYmUgZGVjb3VwbGVkIGZy
b20gdGhlIHRleHQgaXRlcmF0b3IuCi0gICAgZmxvYXQgdGV4dFdpZHRoKHVuc2lnbmVkIHN0YXJ0
UG9zaXRpb24sIHVuc2lnbmVkIGVuZFBvc2l0aW9uLCBmbG9hdCB4UG9zaXRpb24pIGNvbnN0Owot
ICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBsYXN0SHlwaGVuUG9zaXRpb24oY29uc3QgVGV4dEZyYWdt
ZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCYgcnVuLCB1bnNpZ25lZCBiZWZvcmVJbmRleCkgY29u
c3Q7Ci0KLSAgICBzdHJ1Y3QgU3R5bGUgewotICAgICAgICBleHBsaWNpdCBTdHlsZShjb25zdCBS
ZW5kZXJTdHlsZSYpOwotCi0gICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250OwotICAgICAg
ICBUZXh0QWxpZ25Nb2RlIHRleHRBbGlnbjsKLSAgICAgICAgYm9vbCBoYXNLZXJuaW5nT3JMaWdh
dHVyZXM7Ci0gICAgICAgIGJvb2wgY29sbGFwc2VXaGl0ZXNwYWNlOwotICAgICAgICBib29sIHBy
ZXNlcnZlTmV3bGluZTsKLSAgICAgICAgYm9vbCB3cmFwTGluZXM7Ci0gICAgICAgIGJvb2wgYnJl
YWtTcGFjZXM7Ci0gICAgICAgIGJvb2wgYnJlYWtBbnlXb3JkT25PdmVyZmxvdzsKLSAgICAgICAg
Ym9vbCBicmVha1dvcmRPbk92ZXJmbG93OwotICAgICAgICBib29sIGJyZWFrRmlyc3RXb3JkT25P
dmVyZmxvdzsKLSAgICAgICAgYm9vbCBicmVha05CU1A7Ci0gICAgICAgIGJvb2wga2VlcEFsbFdv
cmRzRm9yQ0pLOwotICAgICAgICBmbG9hdCB3b3JkU3BhY2luZzsKLSAgICAgICAgVGFiU2l6ZSB0
YWJXaWR0aDsKLSAgICAgICAgYm9vbCBzaG91bGRIeXBoZW5hdGU7Ci0gICAgICAgIGZsb2F0IGh5
cGhlblN0cmluZ1dpZHRoOwotICAgICAgICB1bnNpZ25lZCBoeXBoZW5MaW1pdEJlZm9yZTsKLSAg
ICAgICAgdW5zaWduZWQgaHlwaGVuTGltaXRBZnRlcjsKLSAgICAgICAgQXRvbVN0cmluZyBsb2Nh
bGU7Ci0gICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBoeXBoZW5MaW1pdExpbmVzOwotICAgIH07
Ci0gICAgY29uc3QgU3R5bGUmIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQotCi1w
cml2YXRlOgotICAgIFRleHRGcmFnbWVudCBmaW5kTmV4dFRleHRGcmFnbWVudChmbG9hdCB4UG9z
aXRpb24pOwotICAgIGVudW0gUG9zaXRpb25UeXBlIHsgQnJlYWthYmxlLCBOb25XaGl0ZXNwYWNl
IH07Ci0gICAgdW5zaWduZWQgc2tpcFRvTmV4dFBvc2l0aW9uKFBvc2l0aW9uVHlwZSwgdW5zaWdu
ZWQgc3RhcnRQb3NpdGlvbiwgZmxvYXQmIHdpZHRoLCBmbG9hdCB4UG9zaXRpb24sIGJvb2wmIG92
ZXJsYXBwaW5nRnJhZ21lbnQpOwotICAgIGJvb2wgaXNTb2Z0TGluZUJyZWFrKHVuc2lnbmVkIHBv
c2l0aW9uKSBjb25zdDsKLSAgICBib29sIGlzSGFyZExpbmVCcmVhayhjb25zdCBGbG93Q29udGVu
dHM6Okl0ZXJhdG9yJiBzZWdtZW50KSBjb25zdDsKLSAgICB1bnNpZ25lZCBuZXh0QnJlYWthYmxl
UG9zaXRpb24oY29uc3QgRmxvd0NvbnRlbnRzOjpTZWdtZW50JiwgdW5zaWduZWQgc3RhcnRQb3Np
dGlvbik7Ci0gICAgdW5zaWduZWQgbmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbihjb25zdCBGbG93
Q29udGVudHM6OlNlZ21lbnQmLCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uKTsKLQotICAgIEZsb3dD
b250ZW50cyBtX2Zsb3dDb250ZW50czsKLSAgICBGbG93Q29udGVudHM6Okl0ZXJhdG9yIG1fY3Vy
cmVudFNlZ21lbnQ7Ci0gICAgTGF6eUxpbmVCcmVha0l0ZXJhdG9yIG1fbGluZUJyZWFrSXRlcmF0
b3I7Ci0gICAgY29uc3QgU3R5bGUgbV9zdHlsZTsKLSAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uIHsg
MCB9OwotICAgIGJvb2wgbV9hdEVuZE9mU2VnbWVudCB7IGZhbHNlIH07Ci19OwotCi1pbmxpbmUg
VGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6
VGV4dEZyYWdtZW50OjpzcGxpdCh1bnNpZ25lZCBzcGxpdFBvc2l0aW9uLCBmbG9hdCBsZWZ0U2lk
ZVdpZHRoLCBmbG9hdCByaWdodFNpZGVXaWR0aCkKLXsKLSAgICBhdXRvIHVwZGF0ZUZyYWdtZW50
UHJvcGVydGllcyA9IFtdIChUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCB1bnNpZ25lZCBzdGFydCwg
dW5zaWduZWQgZW5kLCBmbG9hdCB3aWR0aCkKLSAgICB7Ci0gICAgICAgIGZyYWdtZW50Lm1fc3Rh
cnQgPSBzdGFydDsKLSAgICAgICAgZnJhZ21lbnQubV9lbmQgPSBlbmQ7Ci0gICAgICAgIGZyYWdt
ZW50Lm1fd2lkdGggPSB3aWR0aDsKLSAgICAgICAgaWYgKGZyYWdtZW50LnN0YXJ0KCkgKyAxID4g
ZnJhZ21lbnQuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGZyYWdtZW50Lm1f
aXNDb2xsYXBzZWQgPSBmYWxzZTsKLSAgICB9OwotCi0gICAgVGV4dEZyYWdtZW50IHJpZ2h0U2lk
ZSgqdGhpcyk7Ci0gICAgdXBkYXRlRnJhZ21lbnRQcm9wZXJ0aWVzKCp0aGlzLCBzdGFydCgpLCBz
cGxpdFBvc2l0aW9uLCBsZWZ0U2lkZVdpZHRoKTsKLSAgICB1cGRhdGVGcmFnbWVudFByb3BlcnRp
ZXMocmlnaHRTaWRlLCBzcGxpdFBvc2l0aW9uLCByaWdodFNpZGUuZW5kKCksIHJpZ2h0U2lkZVdp
ZHRoKTsKLSAgICByZXR1cm4gcmlnaHRTaWRlOwotfQotCi1pbmxpbmUgVGV4dEZyYWdtZW50SXRl
cmF0b3I6OlRleHRGcmFnbWVudCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50Ojpz
cGxpdFdpdGhIeXBoZW4odW5zaWduZWQgaHlwaGVuUG9zaXRpb24sIGZsb2F0IGh5cGhlblN0cmlu
Z1dpZHRoLAotICAgIGZsb2F0IGxlZnRTaWRlV2lkdGgsIGZsb2F0IHJpZ2h0U2lkZVdpZHRoKQot
ewotICAgIGF1dG8gcmlnaHRTaWRlID0gc3BsaXQoaHlwaGVuUG9zaXRpb24sIGxlZnRTaWRlV2lk
dGgsIHJpZ2h0U2lkZVdpZHRoKTsKLSAgICBtX2hhc0h5cGhlbiA9IHRydWU7Ci0gICAgbV93aWR0
aCArPSBoeXBoZW5TdHJpbmdXaWR0aDsKLSAgICByZXR1cm4gcmlnaHRTaWRlOwotfQotCi1pbmxp
bmUgYm9vbCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6aXNTb2Z0TGluZUJyZWFrKHVuc2lnbmVkIHBv
c2l0aW9uKSBjb25zdAotewotICAgIGNvbnN0IGF1dG8mIHNlZ21lbnQgPSAqbV9jdXJyZW50U2Vn
bWVudDsKLSAgICBBU1NFUlQoc2VnbWVudC5zdGFydCA8PSBwb3NpdGlvbiAmJiBwb3NpdGlvbiA8
IHNlZ21lbnQuZW5kKTsKLSAgICByZXR1cm4gbV9zdHlsZS5wcmVzZXJ2ZU5ld2xpbmUgJiYgc2Vn
bWVudC50ZXh0W3Bvc2l0aW9uIC0gc2VnbWVudC5zdGFydF0gPT0gJ1xuJzsKLX0KLQotaW5saW5l
IGJvb2wgVGV4dEZyYWdtZW50SXRlcmF0b3I6OmlzSGFyZExpbmVCcmVhayhjb25zdCBGbG93Q29u
dGVudHM6Okl0ZXJhdG9yJiBzZWdtZW50KSBjb25zdAotewotICAgIEFTU0VSVChzZWdtZW50LT5z
dGFydCAhPSBzZWdtZW50LT5lbmQgfHwgKHNlZ21lbnQtPnN0YXJ0ID09IHNlZ21lbnQtPmVuZCAm
JiBpczxSZW5kZXJMaW5lQnJlYWs+KHNlZ21lbnQtPnJlbmRlcmVyKSkpOwotICAgIHJldHVybiBz
ZWdtZW50LT5zdGFydCA9PSBzZWdtZW50LT5lbmQ7Ci19Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwCmluZGV4IGE3MGE4OGU2YmE0My4uOTVjZTg3ZjlhMWQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKQEAgLTIyOCw3ICsy
MjgsNiBAQCB2b2lkIFRleHRQYWludGVyOjpwYWludFJhbmdlKGNvbnN0IFRleHRSdW4mIHRleHRS
dW4sIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCwgYwogdm9pZCBUZXh0UGFpbnRlcjo6Y2xlYXJH
bHlwaERpc3BsYXlMaXN0cygpCiB7CiAgICAgR2x5cGhEaXNwbGF5TGlzdENhY2hlPElubGluZVRl
eHRCb3g+OjpzaW5nbGV0b24oKS5jbGVhcigpOwotICAgIEdseXBoRGlzcGxheUxpc3RDYWNoZTxT
aW1wbGVMaW5lTGF5b3V0OjpSdW4+OjpzaW5nbGV0b24oKS5jbGVhcigpOwogI2lmIEVOQUJMRShM
QVlPVVRfRk9STUFUVElOR19DT05URVhUKQogICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFi
bGVkKCkpCiAgICAgICAgIEdseXBoRGlzcGxheUxpc3RDYWNoZTxEaXNwbGF5OjpSdW4+OjpzaW5n
bGV0b24oKS5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xp
bmUvTGluZUxheW91dFRyYXZlcnNhbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGlu
ZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmNwcAppbmRleCA1MWVmMjFmYTNhNTcuLjg1Zjg4ZWYyMjg2
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRy
YXZlcnNhbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91
dFRyYXZlcnNhbC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJMaW5lTGF5b3V0VHJh
dmVyc2FsLmgiCiAKICNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuaCIKKyNp
bmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJMaW5lQnJlYWsuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtODEsMTEgKzgyLDYgQEAgc3RhdGljIGNvbnN0IFJl
bmRlckJsb2NrRmxvdyogbGluZUxheW91dFN5c3RlbUZsb3dGb3JSZW5kZXJlcihjb25zdCBSZW5k
ZXJPYmplY3QKIFRleHRCb3hJdGVyYXRvciBmaXJzdFRleHRCb3hGb3IoY29uc3QgUmVuZGVyVGV4
dCYgdGV4dCkKIHsKICAgICBpZiAoYXV0byogZmxvdyA9IGxpbmVMYXlvdXRTeXN0ZW1GbG93Rm9y
UmVuZGVyZXIodGV4dCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHNpbXBsZUxpbmVMYXlvdXQgPSBm
bG93LT5zaW1wbGVMaW5lTGF5b3V0KCkpIHsKLSAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBzaW1w
bGVMaW5lTGF5b3V0LT5ydW5SZXNvbHZlcigpLnJhbmdlRm9yUmVuZGVyZXIodGV4dCk7Ci0gICAg
ICAgICAgICByZXR1cm4geyBTaW1wbGVQYXRoIHsgcmFuZ2UuYmVnaW4oKSwgcmFuZ2UuZW5kKCkg
fSB9OwotICAgICAgICB9Ci0KICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkK
ICAgICAgICAgaWYgKGF1dG8qIGxheW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dCA9IGZs
b3ctPmxheW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dCgpKQogICAgICAgICAgICAgcmV0
dXJuIGxheW91dEZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dC0+dGV4dEJveGVzRm9yKHRleHQp
OwpAQCAtMTI5LDExICsxMjUsNiBAQCBib29sIEVsZW1lbnRCb3hJdGVyYXRvcjo6YXRFbmQoKSBj
b25zdAogRWxlbWVudEJveEl0ZXJhdG9yIGVsZW1lbnRCb3hGb3IoY29uc3QgUmVuZGVyTGluZUJy
ZWFrJiByZW5kZXJFbGVtZW50KQogewogICAgIGlmIChhdXRvKiBmbG93ID0gbGluZUxheW91dFN5
c3RlbUZsb3dGb3JSZW5kZXJlcihyZW5kZXJFbGVtZW50KSkgewotICAgICAgICBpZiAoYXV0byog
c2ltcGxlTGluZUxheW91dCA9IGZsb3ctPnNpbXBsZUxpbmVMYXlvdXQoKSkgewotICAgICAgICAg
ICAgYXV0byByYW5nZSA9IHNpbXBsZUxpbmVMYXlvdXQtPnJ1blJlc29sdmVyKCkucmFuZ2VGb3JS
ZW5kZXJlcihyZW5kZXJFbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybiB7IFNpbXBsZVBhdGgo
cmFuZ2UuYmVnaW4oKSwgcmFuZ2UuZW5kKCkpIH07Ci0gICAgICAgIH0KLQogI2lmIEVOQUJMRShM
QVlPVVRfRk9STUFUVElOR19DT05URVhUKQogICAgICAgICBpZiAoYXV0byogbGF5b3V0Rm9ybWF0
dGluZ0NvbnRleHRMaW5lTGF5b3V0ID0gZmxvdy0+bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5l
TGF5b3V0KCkpCiAgICAgICAgICAgICByZXR1cm4gbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRMaW5l
TGF5b3V0LT5lbGVtZW50Qm94Rm9yKHJlbmRlckVsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5oCmluZGV4IGQ3MzA0OTc0
MTUzYi4uMDFmNjk4OTdkMmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5oCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAi
SW5saW5lRWxlbWVudEJveC5oIgogI2luY2x1ZGUgIkxpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4
UGF0aC5oIgogI2luY2x1ZGUgIkxpbmVMYXlvdXRUcmF2ZXJzYWxEaXNwbGF5UnVuUGF0aC5oIgot
I2luY2x1ZGUgIkxpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmgiCiAjaW5jbHVkZSA8d3Rm
L1ZhcmlhbnQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDksOCArNDgsNyBAQCBwdWJs
aWM6CiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAgICAgICAgIERpc3Bs
YXlSdW5QYXRoLAogI2VuZGlmCi0gICAgICAgIENvbXBsZXhQYXRoLAotICAgICAgICBTaW1wbGVQ
YXRoCisgICAgICAgIENvbXBsZXhQYXRoCiAgICAgPjsKIAogICAgIEJveChQYXRoVmFyaWFudCYm
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRU
cmF2ZXJzYWxTaW1wbGVQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5l
TGF5b3V0VHJhdmVyc2FsU2ltcGxlUGF0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwY2QzYzIzZjcwOTguLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxlUGF0aC5oCisrKyAvZGV2L251bGwKQEAg
LTEsOTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiTGlu
ZUxheW91dFRyYXZlcnNhbC5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgTGluZUxheW91dFRyYXZlcnNhbCB7
Ci0KLWNsYXNzIFNpbXBsZVBhdGggewotcHVibGljOgotICAgIFNpbXBsZVBhdGgoU2ltcGxlTGlu
ZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yIGl0ZXJhdG9yLCBTaW1wbGVMaW5lTGF5b3V0
OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3IgZW5kKQotICAgICAgICA6IG1faXRlcmF0b3IoaXRlcmF0
b3IpCi0gICAgICAgICwgbV9lbmQoZW5kKQotICAgIHsgfQotCi0gICAgRmxvYXRSZWN0IHJlY3Qo
KSBjb25zdCB7IHJldHVybiAoKm1faXRlcmF0b3IpLnJlY3QoKTsgfQotCi0gICAgZmxvYXQgYmFz
ZWxpbmUoKSBjb25zdCB7IHJldHVybiAoKm1faXRlcmF0b3IpLmJhc2VsaW5lKCk7IH0KLQotICAg
IGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAg
ICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICBib29sIGRp
ck92ZXJyaWRlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIGlzTGluZUJyZWFr
KCkgY29uc3QgeyByZXR1cm4gKCptX2l0ZXJhdG9yKS5pc0xpbmVCcmVhaygpOyB9Ci0KLSAgICBi
b29sIHVzZUxpbmVCcmVha0JveFJlbmRlclRyZWVEdW1wUXVpcmsoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgaWYgKG1faXRlcmF0b3IuYXRCZWdpbigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBhdXRvIHByZXZpb3VzID0gbV9pdGVyYXRvcjsKLSAgICAgICAgLS1wcmV2aW91
czsKLSAgICAgICAgcmV0dXJuICEoKnByZXZpb3VzKS5pc0VuZE9mTGluZSgpOwotICAgIH0KLQot
ICAgIGJvb2wgaGFzSHlwaGVuKCkgY29uc3QgeyByZXR1cm4gKCptX2l0ZXJhdG9yKS5oYXNIeXBo
ZW4oKTsgfQotICAgIFN0cmluZ1ZpZXcgdGV4dCgpIGNvbnN0IHsgcmV0dXJuICgqbV9pdGVyYXRv
cikudGV4dCgpOyB9Ci0gICAgdW5zaWduZWQgbG9jYWxTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuICgqbV9pdGVyYXRvcikubG9jYWxTdGFydCgpOyB9Ci0gICAgdW5zaWduZWQgbG9jYWxFbmRP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiAoKm1faXRlcmF0b3IpLmxvY2FsRW5kKCk7IH0KLSAgICB1
bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiAoKm1faXRlcmF0b3IpLmVuZCgpIC0gKCpt
X2l0ZXJhdG9yKS5zdGFydCgpOyB9Ci0KLSAgICBib29sIGlzTGFzdE9uTGluZSgpIGNvbnN0Ci0g
ICAgewotICAgICAgICBhdXRvIG5leHQgPSBtX2l0ZXJhdG9yOwotICAgICAgICArK25leHQ7Ci0g
ICAgICAgIHJldHVybiBuZXh0ID09IG1fZW5kIHx8ICgqbV9pdGVyYXRvcikubGluZUluZGV4KCkg
IT0gKCpuZXh0KS5saW5lSW5kZXgoKTsKLSAgICB9Ci0gICAgYm9vbCBpc0xhc3QoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgYXV0byBuZXh0ID0gbV9pdGVyYXRvcjsKLSAgICAgICAgKytuZXh0Owot
ICAgICAgICByZXR1cm4gbmV4dCA9PSBtX2VuZDsKLSAgICB9OwotCi0gICAgdm9pZCB0cmF2ZXJz
ZU5leHRUZXh0Qm94SW5WaXN1YWxPcmRlcigpCi0gICAgewotICAgICAgICAvLyBUaGlzIGZ1bmN0
aW9uIGlzIGN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIGNvbnNlY3V0aXZlIHRleHQgcnVucy4KLSAg
ICAgICAgKyttX2l0ZXJhdG9yOwotICAgIH0KLSAgICB2b2lkIHRyYXZlcnNlTmV4dFRleHRCb3hJ
blRleHRPcmRlcigpIHsgIHRyYXZlcnNlTmV4dFRleHRCb3hJblZpc3VhbE9yZGVyKCk7IH0KLQot
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaW1wbGVQYXRoJiBvdGhlcikgY29uc3QgeyByZXR1
cm4gbV9pdGVyYXRvciA9PSBvdGhlci5tX2l0ZXJhdG9yOyB9Ci0gICAgYm9vbCBhdEVuZCgpIGNv
bnN0IHsgcmV0dXJuIG1faXRlcmF0b3IgPT0gbV9lbmQ7IH0KLQotcHJpdmF0ZToKLSAgICBTaW1w
bGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3IgbV9pdGVyYXRvcjsKLSAgICBTaW1w
bGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3IgbV9lbmQ7Ci19OwotCi19Ci19Cg==
</data>
<flag name="commit-queue"
          id="425440"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>