<?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>170742</bug_id>
          
          <creation_ts>2017-04-11 12:06:55 -0700</creation_ts>
          <short_desc>B3 -O1 should not allocateStackByGraphColoring</short_desc>
          <delta_ts>2017-04-12 20:51:40 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>buildbot</cc>
    
    <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1296512</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-11 12:06:55 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296513</commentid>
    <comment_count>1</comment_count>
      <attachid>306836</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-11 12:07:32 -0700</bug_when>
    <thetext>Created attachment 306836
laid the foundation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296526</commentid>
    <comment_count>2</comment_count>
      <attachid>306842</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-11 13:06:45 -0700</bug_when>
    <thetext>Created attachment 306842
it is written

I haven&apos;t even compiled it yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296563</commentid>
    <comment_count>3</comment_count>
      <attachid>306858</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-11 14:59:03 -0700</bug_when>
    <thetext>Created attachment 306858
seems to work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296604</commentid>
    <comment_count>4</comment_count>
      <attachid>306874</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-11 16:53:06 -0700</bug_when>
    <thetext>Created attachment 306874
getting closer to done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296606</commentid>
    <comment_count>5</comment_count>
      <attachid>306875</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-11 16:57:54 -0700</bug_when>
    <thetext>Created attachment 306875
so close</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296607</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-11 17:00:25 -0700</bug_when>
    <thetext>Attachment 306875 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirAllocateRegistersAndStackByLinearScan.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateRegistersAndStackByLinearScan.cpp:463:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateRegistersAndStackByLinearScan.cpp:463:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 3 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296610</commentid>
    <comment_count>7</comment_count>
      <attachid>306877</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-11 17:08:11 -0700</bug_when>
    <thetext>Created attachment 306877
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296611</commentid>
    <comment_count>8</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-11 17:09:47 -0700</bug_when>
    <thetext>Attachment 306877 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirAllocateRegistersAndStackByLinearScan.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateRegistersAndStackByLinearScan.cpp:463:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateRegistersAndStackByLinearScan.cpp:463:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 3 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296751</commentid>
    <comment_count>9</comment_count>
      <attachid>306877</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-12 09:51:06 -0700</bug_when>
    <thetext>Comment on attachment 306877
the patch

View in context: https://bugs.webkit.org/attachment.cgi?id=306877&amp;action=review

r=me.

&gt; Source/JavaScriptCore/b3/air/AirAllocateRegistersAndStackByLinearScan.cpp:307
&gt; +            [&amp;] (Tmp, TmpData&amp; data) -&gt; bool {

Why pass the Tmp if you don&apos;t use it anywhere?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296787</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-12 11:30:09 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #9)
&gt; Comment on attachment 306877 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=306877&amp;action=review
&gt; 
&gt; r=me.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirAllocateRegistersAndStackByLinearScan.cpp:307
&gt; &gt; +            [&amp;] (Tmp, TmpData&amp; data) -&gt; bool {
&gt; 
&gt; Why pass the Tmp if you don&apos;t use it anywhere?

Good point, I&apos;ll remove!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296843</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-12 14:38:07 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/215292/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296937</commentid>
    <comment_count>12</comment_count>
      <attachid>306877</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-12 20:51:40 -0700</bug_when>
    <thetext>Comment on attachment 306877
the patch

View in context: https://bugs.webkit.org/attachment.cgi?id=306877&amp;action=review

&gt; Source/JavaScriptCore/b3/air/AirAllocateRegistersAndStackByLinearScan.cpp:584
&gt; +            ptrdiff_t offset = -static_cast&lt;ptrdiff_t&gt;(m_code.frameSize()) - static_cast&lt;ptrdiff_t&gt;(entry.spillIndex) * 8 - 8;

Why is the -8 needed? Also, is it worth using sizeof(void*) instead of 8?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306836</attachid>
            <date>2017-04-11 12:07:32 -0700</date>
            <delta_ts>2017-04-11 13:06:45 -0700</delta_ts>
            <desc>laid the foundation</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31775</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxNTIzOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTAwLDYgKzEwMCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvYWly
L0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAKICAgICBiMy9haXIvQWlyTG93ZXJFbnRyeVN3aXRj
aC5jcHAKICAgICBiMy9haXIvQWlyTG93ZXJNYWNyb3MuY3BwCisgICAgYjMvYWlyL0Fpckxvd2Vy
U3RhY2tBcmdzLmNwcAogICAgIGIzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwCiAgICAg
YjMvYWlyL0FpclBhZEludGVyZmVyZW5jZS5jcHAKICAgICBiMy9haXIvQWlyUGhhc2VJbnNlcnRp
b25TZXQuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE1
MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ1NSw2ICs0NTUsOCBAQAogCQkwRjVB
RTJDNDFERjRGMjgwMDA2NkVGRTEgLyogVk1JbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMgLyogVk1J
bmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY1QjRBMzMxQzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QjRBMzIxQzg0RjBE
NjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNUNGOTgxMUU5NkYxN0YwMEMxODY5MiAvKiBB
aXJUbXBNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNUNGOTgwMUU5NkYxN0QwMEMxODY5MiAvKiBBaXJUbXBNYXAuaCAqLzsgfTsKKwkJMEY1Q0Y5
ODQxRTlENTM3NzAwQzE4NjkyIC8qIEFpckxvd2VyU3RhY2tBcmdzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVDRjk4MzFFOUQ1Mzc1MDBDMTg2OTIg
LyogQWlyTG93ZXJTdGFja0FyZ3MuaCAqLzsgfTsKKwkJMEY1Q0Y5ODUxRTlENTM3QTAwQzE4Njky
IC8qIEFpckxvd2VyU3RhY2tBcmdzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNUNGOTgyMUU5RDUzNzUwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNr
QXJncy5jcHAgKi87IH07CiAJCTBGNUQwODVEMUI4Q0Y5OUQwMDExNDNCNCAvKiBERkdOb2RlT3Jp
Z2luLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NUQwODVDMUI4Q0Y5OUQwMDExNDNCNCAvKiBERkdOb2RlT3JpZ2luLmNwcCAqLzsgfTsKIAkJMEY1
RUY5MUUxNjg3OEY3QTAwM0U1QzI1IC8qIEpJVFRodW5rcy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVFRjkxQjE2ODc4Rjc4MDAzRTVDMjUgLyog
SklUVGh1bmtzLmNwcCAqLzsgfTsKIAkJMEY1RUY5MUYxNjg3OEY3RDAwM0U1QzI1IC8qIEpJVFRo
dW5rcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1
RUY5MUMxNjg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yOTk1LDYgKzI5OTcsOCBAQAogCQkwRjVB
NjI4MjE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBGVExWYWx1ZVJhbmdlLmg7IHBhdGggPSBmdGwvRlRMVmFsdWVSYW5n
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVCNEEzMjFDODRGMEQ2MDBGMUIx
N0UgLyogU2xvd1BhdGhSZXR1cm5UeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNsb3dQYXRoUmV0dXJuVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjVDRjk4MDFFOTZGMTdEMDBDMTg2OTIgLyogQWlyVG1wTWFwLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpclRtcE1hcC5oOyBwYXRoID0gYjMvYWlyL0FpclRtcE1hcC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVDRjk4MjFFOUQ1Mzc1MDBDMTg2OTIgLyog
QWlyTG93ZXJTdGFja0FyZ3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQWlyTG93ZXJTdGFja0FyZ3MuY3BwOyBwYXRoID0gYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1Q0Y5ODMxRTlENTM3NTAwQzE4
NjkyIC8qIEFpckxvd2VyU3RhY2tBcmdzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEFpckxvd2VyU3RhY2tBcmdzLmg7IHBhdGggPSBiMy9haXIvQWlyTG93ZXJTdGFja0FyZ3Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RDA4NUMxQjhDRjk5RDAwMTE0M0I0
IC8qIERGR05vZGVPcmlnaW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHTm9kZU9yaWdpbi5jcHA7IHBhdGggPSBkZmcvREZHTm9kZU9yaWdpbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUVGOTFCMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRU
aHVua3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUVGh1bmtz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RUY5MUMxNjg3OEY3ODAwM0U1
QzI1IC8qIEpJVFRodW5rcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRU
aHVua3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU2MzksNiArNTY0Myw4IEBA
CiAJCQkJMEZERjcwODQxRDNGMkMxRjAwOTI3NDQ5IC8qIEFpckxvd2VyRW50cnlTd2l0Y2guaCAq
LywKIAkJCQkwRjYxODMyNzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuY3BwICov
LAogCQkJCTBGNjE4MzI4MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5oICovLAor
CQkJCTBGNUNGOTgyMUU5RDUzNzUwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5jcHAgKi8s
CisJCQkJMEY1Q0Y5ODMxRTlENTM3NTAwQzE4NjkyIC8qIEFpckxvd2VyU3RhY2tBcmdzLmggKi8s
CiAJCQkJMjY0MDkxRkExQkUyRkQ0MTAwNjg0REIyIC8qIEFpck9wY29kZS5vcGNvZGVzICovLAog
CQkJCTBGQjM4NzhDMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3Bw
ICovLAogCQkJCTBGQjM4NzhEMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3Jk
ZXIuaCAqLywKQEAgLTg5NzcsNiArODk4Myw3IEBACiAJCQkJQTUxMDA3QzExODdDQzNDNjAwQjM4
ODc5IC8qIEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTUwRTRCNjQxODgwOURENTAwNjhBNDZEIC8qIEpTR2xvYmFsT2JqZWN0UnVudGltZUFn
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJDNjNDNDFFNjlFRjk0MDBDMTM4MzkgLyogQjNN
ZW1vcnlWYWx1ZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNUNGOTg0MUU5RDUzNzcw
MEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwM0ZB
MkExODhGMTA1OTAwMTEwRjE0IC8qIEpTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdTZXJ2ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUE1MTNFNUMwMTg1QkZBQ0MwMDdFOTVBRCAvKiBKU0luamVjdGVk
U2NyaXB0SG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUxM0U1QzIxODVCRkFDQzAwN0U5NUFE
IC8qIEpTSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTEw
NzYxLDYgKzEwNzY4LDcgQEAKIAkJCQkxNDI4MDg0MjEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhw
Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1MTIxNTFDMDgzRDAwNDZE
NEVGIC8qIFJlZ0V4cE1hdGNoZXNBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0
MzEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGNUNGOTg1MUU5RDUzN0EwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDI4MDg0NDEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwUHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NDBDN0EwMUI4MkUxQzMwMDBGNkI3OSAvKiBSZWdp
c3RlckF0T2Zmc2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NDBDN0ExMUI4MkUxQzMwMDBG
NkI3OSAvKiBSZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMjE1MjM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQ1LDcgKzM0NSw3IEBAIHVuc2lnbmVkIFByb2NlZHVyZTo6ZnJhbWVTaXplKCkgY29u
c3QKICAgICByZXR1cm4gY29kZSgpLmZyYW1lU2l6ZSgpOwogfQogCi1jb25zdCBSZWdpc3RlckF0
T2Zmc2V0TGlzdCYgUHJvY2VkdXJlOjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgY29uc3QKK1JlZ2lz
dGVyQXRPZmZzZXRMaXN0IFByb2NlZHVyZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGNvZGUoKS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMjE1MjM4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
Myw3ICsyNDMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBuZWVkc1VzZWRSZWdpc3RlcnMoKSBjb25z
dCB7IHJldHVybiBtX25lZWRzVXNlZFJlZ2lzdGVyczsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdW5zaWduZWQgZnJhbWVTaXplKCkgY29uc3Q7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgY29u
c3QgUmVnaXN0ZXJBdE9mZnNldExpc3QmIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSBjb25zdDsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBSZWdpc3RlckF0T2Zmc2V0TGlzdCBjYWxsZWVTYXZlUmVnaXN0
ZXJzKCkgY29uc3Q7CiAKICAgICBQQ1RvT3JpZ2luTWFwJiBwY1RvT3JpZ2luTWFwKCkgeyByZXR1
cm4gbV9wY1RvT3JpZ2luTWFwOyB9CiAgICAgUENUb09yaWdpbk1hcCByZWxlYXNlUENUb09yaWdp
bk1hcCgpIHsgcmV0dXJuIFdURk1vdmUobV9wY1RvT3JpZ2luTWFwKTsgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMuY3BwCShyZXZpc2lvbiAyMTUyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCw3
IEBAIFJlZ2lzdGVyU2V0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtczo6dW4KICAgICBSZWdpc3Rl
clNldCByZXN1bHQgPSB1c2VkUmVnaXN0ZXJzKCk7CiAgICAgCiAgICAgUmVnaXN0ZXJTZXQgdW5z
YXZlZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOwot
ICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiBtX2NvbnRleHQu
Y29kZS0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKQotICAgICAgICB1bnNhdmVkQ2FsbGVlU2F2ZXMu
Y2xlYXIocmVnQXRPZmZzZXQucmVnKCkpOworICAgIHVuc2F2ZWRDYWxsZWVTYXZlcy5leGNsdWRl
KG1fY29udGV4dC5jb2RlLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogCiAgICAgcmVzdWx0Lm1l
cmdlKHVuc2F2ZWRDYWxsZWVTYXZlcyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9y
aW5nLmNwcAkocmV2aXNpb24gMjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgogI2luY2x1ZGUgIkFp
ckNvZGUuaCIKLSNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJIYW5k
bGVDYWxsZWVTYXZlcy5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
QWlyTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCkBAIC0xMzQsNiArMTM0
LDggQEAgc3RydWN0IENvYWxlc2NhYmxlTW92ZSB7CiB2b2lkIGFsbG9jYXRlU3RhY2tCeUdyYXBo
Q29sb3JpbmcoQ29kZSYgY29kZSkKIHsKICAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwg
ImFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmciKTsKKyAgICAKKyAgICBoYW5kbGVDYWxsZWVT
YXZlcyhjb2RlKTsKIAogICAgIC8vIEFsbG9jYXRlIGFsbCBvZiB0aGUgZXNjYXBlZCBzbG90cyBp
biBvcmRlci4gVGhpcyBpcyBraW5kIG9mIGEgY3JhenkgYWxnb3JpdGhtIHRvIGFsbG93IGZvcgog
ICAgIC8vIHRoZSBwb3NzaWJpbGl0eSBvZiBzdGFjayBzbG90cyBiZWluZyBhc3NpZ25lZCBmcmFt
ZSBvZmZzZXRzIGJlZm9yZSB3ZSBldmVuIGdldCBoZXJlLgpAQCAtMzg1LDgwICszODcsMTAgQEAg
dm9pZCBhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nKENvZGUmIAogICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KC1zbG90LT5vZmZzZXRGcm9tRlAoKSkpOwogICAgIH0KIAotICAg
IGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tB
bGlnbm1lbnRCeXRlcygpLCBmcmFtZVNpemVGb3JTdGFja1Nsb3RzKTsKLQotICAgIC8vIE5vdyB3
ZSBuZWVkIHRvIGRlZHVjZSBob3cgbXVjaCBhcmd1bWVudCBhcmVhIHdlIG5lZWQuCi0gICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKLSAgICAgICAgZm9yIChJbnN0JiBpbnN0IDog
KmJsb2NrKSB7Ci0gICAgICAgICAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGFyZy5pc0NhbGxBcmcoKSkgewotICAgICAgICAgICAgICAgICAgICAv
LyBGb3Igbm93LCB3ZSBhc3N1bWUgdGhhdCB3ZSB1c2UgOCBieXRlcyBvZiB0aGUgY2FsbCBhcmcu
IEJ1dCB0aGF0J3Mgbm90Ci0gICAgICAgICAgICAgICAgICAgIC8vIHN1Y2ggYW4gYXdlc29tZSBh
c3N1bXB0aW9uLgotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1NAotICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoYXJnLm9mZnNldCgpID49IDApOwotICAgICAgICAgICAgICAgICAgICBjb2RlLnJlcXVlc3RD
YWxsQXJnQXJlYVNpemVJbkJ5dGVzKGFyZy5vZmZzZXQoKSArIDgpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvZGUuc2V0RnJhbWVT
aXplKGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgKyBjb2RlLmNhbGxBcmdBcmVhU2l6ZUluQnl0ZXMo
KSk7Ci0KLSAgICAvLyBGaW5hbGx5LCB0cmFuc2Zvcm0gdGhlIGNvZGUgdG8gdXNlIEFkZHIncyBp
bnN0ZWFkIG9mIFN0YWNrU2xvdCdzLiBUaGlzIGlzIGEgbG9zc2xlc3MKLSAgICAvLyB0cmFuc2Zv
cm1hdGlvbiBzaW5jZSB3ZSBjYW4gc2VhcmNoIHRoZSBTdGFja1Nsb3RzIGFycmF5IHRvIGZpZ3Vy
ZSBvdXQgd2hpY2ggU3RhY2tTbG90IGFueQotICAgIC8vIG9mZnNldC1mcm9tLUZQIHJlZmVycyB0
by4KLQotICAgIC8vIEZJWE1FOiBUaGlzIG1heSBwcm9kdWNlIGFkZHJlc3NlcyB0aGF0IGFyZW4n
dCB2YWxpZCBpZiB3ZSBlbmQgdXAgd2l0aCBhIGdpbm9ybW91cyBzdGFjayBmcmFtZS4KLSAgICAv
LyBXZSB3b3VsZCBoYXZlIHRvIHNjYXZlbmdlIGZvciB0ZW1wb3JhcmllcyBpZiB0aGlzIGhhcHBl
bmVkLiBGb3J0dW5hdGVseSwgdGhpcyBjYXNlIHdpbGwgYmUKLSAgICAvLyBleHRyZW1lbHkgcmFy
ZSBzbyB3ZSBjYW4gZG8gY3JhenkgdGhpbmdzIHdoZW4gaXQgYXJpc2VzLgotICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI1MzAKLQotICAgIEluc2VydGlv
blNldCBpbnNlcnRpb25TZXQoY29kZSk7Ci0gICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNv
ZGUpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBi
bG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgewotICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJs
b2NrLT5hdChpbnN0SW5kZXgpOwotICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAotICAgICAg
ICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCB3aWR0
aCkgewotICAgICAgICAgICAgICAgICAgICBhdXRvIHN0YWNrQWRkciA9IFsmXSAoaW50MzJfdCBv
ZmZzZXQpIC0+IEFyZyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXJnOjpzdGFj
a0FkZHIob2Zmc2V0LCBjb2RlLmZyYW1lU2l6ZSgpLCB3aWR0aCk7Ci0gICAgICAgICAgICAgICAg
ICAgIH07Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KGFyZy5raW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlN0YWNrOiB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBhcmcuc3RhY2tTbG90KCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc1pEZWYocm9sZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmJiBzbG90LT5raW5kKCkgPT0gU3RhY2tTbG90S2luZDo6U3Bp
bGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzbG90LT5ieXRlU2l6ZSgpID4gYnl0
ZXMod2lkdGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3VycmVudGx5IHdl
IG9ubHkgaGFuZGxlIHRoaXMgc2ltcGxlIGNhc2UgYmVjYXVzZSBpdCdzIHRoZSBvbmx5IG9uZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgYXJpc2VzOiBaRGVmJ3MgYXJlIG9u
bHkgMzItYml0IHJpZ2h0IG5vdy4gU28sIHdoZW4gd2UgaGl0IHRoZXNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYXNzZXJ0aW9ucyBpdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gaW1w
bGVtZW50IHRob3NlIG90aGVyIGtpbmRzIG9mCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gemVybyBmaWxscy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChzbG90LT5ieXRlU2l6ZSgpID09IDgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHdpZHRoID09IFdpZHRoMzIpOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaXNWYWxpZEZvcm0oU3RvcmVaZXJvMzIsIEFyZzo6U3RhY2sp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXggKyAxLCBTdG9yZVplcm8zMiwg
aW5zdC5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQWRkcihh
cmcub2Zmc2V0KCkgKyA0ICsgc2xvdC0+b2Zmc2V0RnJvbUZQKCkpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHN0YWNrQWRkcihhcmcu
b2Zmc2V0KCkgKyBzbG90LT5vZmZzZXRGcm9tRlAoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjYXNl
IEFyZzo6Q2FsbEFyZzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHN0YWNrQWRkcihh
cmcub2Zmc2V0KCkgLSBjb2RlLmZyYW1lU2l6ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICApOwotICAgICAgICB9Ci0gICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJs
b2NrKTsKLSAgICB9CisgICAgY29kZS5zZXRGcmFtZVNpemUoV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgZnJhbWVTaXplRm9yU3RhY2tTbG90cykpOwogfQog
CiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQogCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVT
dGFja0J5R3JhcGhDb2xvcmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZy5oCShyZXZpc2lvbiAyMTUy
MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2tCeUdy
YXBoQ29sb3JpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsOCBAQCBjbGFzcyBDb2Rl
OwogCiAvLyBUaGlzIGFsbG9jYXRlcyBTdGFja1Nsb3RzIHRvIHBsYWNlcyBvbiB0aGUgc3RhY2su
IEl0IGZpcnN0IGFsbG9jYXRlcyB0aGUgcGlubmVkIG9uZXMgaW4gaW5kZXgKIC8vIG9yZGVyIGFu
ZCB0aGVuIGl0IGFsbG9jYXRlcyB0aGUgcmVzdCB1c2luZyBmaXJzdCBmaXQuIFRha2VzIHRoZSBv
cHBvcnR1bml0eSB0byBraWxsIGRlYWQKLS8vIGFzc2lnbm1lbnRzIHRvIHN0YWNrIHNsb3RzLCBz
aW5jZSBpdCBrbm93cyB3aGljaCBvbmVzIGFyZSBsaXZlLiBBbHNvIGZpeGVzIFpEZWZzIHRvIGFu
b255bW91cwotLy8gc3RhY2sgc2xvdHMuIEFsc28gY29hbGVzY2VzIHNwaWxsIHNsb3RzIHdoZW5l
dmVyIHBvc3NpYmxlLgorLy8gYXNzaWdubWVudHMgdG8gc3RhY2sgc2xvdHMsIHNpbmNlIGl0IGtu
b3dzIHdoaWNoIG9uZXMgYXJlIGxpdmUuIEFsc28gY29hbGVzY2VzIHNwaWxsIHNsb3RzCisvLyB3
aGVuZXZlciBwb3NzaWJsZS4KIC8vCiAvLyBUaGlzIGlzIG1lYW50IHRvIGJlIGFuIG9wdGltYWwg
c3RhY2sgYWxsb2NhdG9yLCBmb2N1c2VkIG9uIGdlbmVyYXRpbmcgZ3JlYXQgY29kZS4gSXQncyBu
b3QKIC8vIHBhcnRpY3VsYXJseSBmYXN0LCB0aG91Z2guCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBcmcuY3BwCShyZXZpc2lvbiAyMTUyMzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDE3
IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAor
QXJnIEFyZzo6c3RhY2tBZGRyKGludDMyX3Qgb2Zmc2V0RnJvbUZQLCB1bnNpZ25lZCBmcmFtZVNp
emUsIFdpZHRoIHdpZHRoKQoreworICAgIEFyZyByZXN1bHQgPSBBcmc6OmFkZHIoQWlyOjpUbXAo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLCBvZmZzZXRGcm9tRlApOworICAgIGlmICghcmVz
dWx0LmlzVmFsaWRGb3JtKHdpZHRoKSkgeworICAgICAgICByZXN1bHQgPSBBcmc6OmFkZHIoCisg
ICAgICAgICAgICBBaXI6OlRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIp
LAorICAgICAgICAgICAgb2Zmc2V0RnJvbUZQICsgZnJhbWVTaXplKTsKKyAgICB9CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwogYm9vbCBBcmc6OmlzU3RhY2tNZW1vcnkoKSBjb25zdAogewogICAg
IHN3aXRjaCAoa2luZCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJn
LmgJKHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2MCwxNyArNTYwLDggQEAgcHVibGljOgogICAgICAg
ICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQotCi0gICAgc3RhdGljIEFyZyBzdGFja0FkZHIoaW50MzJfdCBvZmZzZXRGcm9tRlAsIHVuc2ln
bmVkIGZyYW1lU2l6ZSwgV2lkdGggd2lkdGgpCi0gICAgewotICAgICAgICBBcmcgcmVzdWx0ID0g
QXJnOjphZGRyKEFpcjo6VG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwgb2Zmc2V0RnJv
bUZQKTsKLSAgICAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZEZvcm0od2lkdGgpKSB7Ci0gICAgICAg
ICAgICByZXN1bHQgPSBBcmc6OmFkZHIoCi0gICAgICAgICAgICAgICAgQWlyOjpUbXAoTWFjcm9B
c3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSwKLSAgICAgICAgICAgICAgICBvZmZzZXRG
cm9tRlAgKyBmcmFtZVNpemUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfQorICAgIAorICAgIHN0YXRpYyBBcmcgc3RhY2tBZGRyKGludDMyX3Qgb2Zmc2V0RnJvbUZQ
LCB1bnNpZ25lZCBmcmFtZVNpemUsIFdpZHRoKTsKIAogICAgIC8vIElmIHlvdSBkb24ndCBwYXNz
IGEgV2lkdGgsIHRoaXMgb3B0aW1pc3RpY2FsbHkgYXNzdW1lcyB0aGF0IHlvdSdyZSB1c2luZyB0
aGUgcmlnaHQgd2lkdGguCiAgICAgc3RhdGljIGJvb2wgaXNWYWxpZFNjYWxlKHVuc2lnbmVkIHNj
YWxlLCBzdGQ6Om9wdGlvbmFsPFdpZHRoPiB3aWR0aCA9IHN0ZDo6bnVsbG9wdCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkocmV2aXNpb24gMjE1MjM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTM4LDYgKzEzOCwyOCBAQCBib29sIENvZGU6OmlzRW50cnlwb2ludChCYXNpY0Jsb2Nr
KiBibG9jCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIENvZGU6OnNldENhbGxlZVNhdmVS
ZWdpc3RlckF0T2Zmc2V0TGlzdChSZWdpc3RlckF0T2Zmc2V0TGlzdCYmIHJlZ2lzdGVyQXRPZmZz
ZXRMaXN0LCBTdGFja1Nsb3QqIHNsb3QpCit7CisgICAgbV91bmNvcnJlY3RlZENhbGxlZVNhdmVS
ZWdpc3RlckF0T2Zmc2V0TGlzdCA9IFdURk1vdmUocmVnaXN0ZXJBdE9mZnNldExpc3QpOworICAg
IGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnaXN0ZXJBdE9mZnNldCA6IG1fdW5jb3Jy
ZWN0ZWRDYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QpCisgICAgICAgIG1fY2FsbGVlU2F2
ZVJlZ2lzdGVycy5zZXQocmVnaXN0ZXJBdE9mZnNldC5yZWcoKSk7CisgICAgbV9jYWxsZWVTYXZl
U3RhY2tTbG90ID0gc2xvdDsKK30KKworUmVnaXN0ZXJBdE9mZnNldExpc3QgQ29kZTo6Y2FsbGVl
U2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCkgY29uc3QKK3sKKyAgICBSZWdpc3RlckF0T2Zmc2V0
TGlzdCByZXN1bHQgPSBtX3VuY29ycmVjdGVkQ2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0
OworICAgIGlmIChTdGFja1Nsb3QqIHNsb3QgPSBtX2NhbGxlZVNhdmVTdGFja1Nsb3QpIHsKKyAg
ICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHNsb3QtPmJ5dGVTaXplKCkgKyBzbG90LT5vZmZzZXRG
cm9tRlAoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IHJlc3VsdC5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgICAgIHJlc3VsdC5hdChpKSA9IFJlZ2lzdGVyQXRPZmZzZXQoCisgICAgICAgICAg
ICAgICAgcmVzdWx0LmF0KGkpLnJlZygpLAorICAgICAgICAgICAgICAgIHJlc3VsdC5hdChpKS5v
ZmZzZXQoKSArIG9mZnNldCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwogdm9pZCBDb2RlOjpyZXNldFJlYWNoYWJpbGl0eSgpCiB7CiAgICAgY2xlYXJQcmVkZWNl
c3NvcnMobV9ibG9ja3MpOwpAQCAtMTc0LDggKzE5Niw5IEBAIHZvaWQgQ29kZTo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnQoIkZyYW1lIHNpemU6ICIsIG1f
ZnJhbWVTaXplLCAiXG4iKTsKICAgICBpZiAobV9jYWxsQXJnQXJlYVNpemUpCiAgICAgICAgIG91
dC5wcmludCgiQ2FsbCBhcmcgYXJlYSBzaXplOiAiLCBtX2NhbGxBcmdBcmVhU2l6ZSwgIlxuIik7
Ci0gICAgaWYgKG1fY2FsbGVlU2F2ZVJlZ2lzdGVycy5zaXplKCkpCi0gICAgICAgIG91dC5wcmlu
dCgiQ2FsbGVlIHNhdmVzOiAiLCBtX2NhbGxlZVNhdmVSZWdpc3RlcnMsICJcbiIpOworICAgIFJl
Z2lzdGVyQXRPZmZzZXRMaXN0IGNhbGxlZVNhdmVSZWdpc3RlcnMgPSB0aGlzLT5jYWxsZWVTYXZl
UmVnaXN0ZXJzKCk7CisgICAgaWYgKGNhbGxlZVNhdmVSZWdpc3RlcnMuc2l6ZSgpKQorICAgICAg
ICBvdXQucHJpbnQoIkNhbGxlZSBzYXZlczogIiwgY2FsbGVlU2F2ZVJlZ2lzdGVycywgIlxuIik7
CiB9CiAKIHVuc2lnbmVkIENvZGU6OmZpbmRGaXJzdEJsb2NrSW5kZXgodW5zaWduZWQgaW5kZXgp
IGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNp
b24gMjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE4Niw5ICsxODYsMTUgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
bV9lbnRyeXBvaW50TGFiZWxzID0gc3RkOjpmb3J3YXJkPFZlY3Rvcj4odmVjdG9yKTsKICAgICB9
CisgICAgCisgICAgLy8gVGhpcyBzZXRzIHRoZSBjYWxsZWUgc2F2ZSByZWdpc3RlcnMuCisgICAg
dm9pZCBzZXRDYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoUmVnaXN0ZXJBdE9mZnNldExp
c3QmJiwgU3RhY2tTbG90Kik7CiAKLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCYgY2Fs
bGVlU2F2ZVJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsg
fQotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0JiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1
cm4gbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9CisgICAgLy8gVGhpcyByZXR1cm5zIHRoZSBjb3Jy
ZWN0bHkgb2Zmc2V0IGxpc3Qgb2YgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzLgorICAgIFJlZ2lzdGVy
QXRPZmZzZXRMaXN0IGNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpIGNvbnN0OworICAg
IAorICAgIC8vIFRoaXMganVzdCB0ZWxscyB5b3Ugd2hhdCB0aGUgY2FsbGVlIHNhdmVzIGFyZS4K
KyAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9j
YWxsZWVTYXZlUmVnaXN0ZXJzOyB9CiAKICAgICAvLyBSZWNvbXB1dGVzIHByZWRlY2Vzc29ycyBh
bmQgZGVsZXRlcyB1bnJlYWNoYWJsZSBibG9ja3MuCiAgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0
eSgpOwpAQCAtMzI5LDcgKzMzNSw5IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9udW1GUFRt
cHMgeyAwIH07CiAgICAgdW5zaWduZWQgbV9mcmFtZVNpemUgeyAwIH07CiAgICAgdW5zaWduZWQg
bV9jYWxsQXJnQXJlYVNpemUgeyAwIH07Ci0gICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgbV9jYWxs
ZWVTYXZlUmVnaXN0ZXJzOworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fdW5jb3JyZWN0ZWRD
YWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3Q7CisgICAgUmVnaXN0ZXJTZXQgbV9jYWxsZWVT
YXZlUmVnaXN0ZXJzOworICAgIFN0YWNrU2xvdCogbV9jYWxsZWVTYXZlU3RhY2tTbG90IHsgbnVs
bHB0ciB9OwogICAgIFZlY3RvcjxGcmVxdWVudGVkQmxvY2s+IG1fZW50cnlwb2ludHM7IC8vIFRo
aXMgaXMgZW1wdHkgdW50aWwgYWZ0ZXIgbG93ZXJFbnRyeVN3aXRjaCgpLgogICAgIFZlY3RvcjxD
Q2FsbEhlbHBlcnM6OkxhYmVsPiBtX2VudHJ5cG9pbnRMYWJlbHM7IC8vIFRoaXMgaXMgZW1wdHkg
dW50aWwgY29kZSBnZW5lcmF0aW9uLgogICAgIFJlZlB0cjxXYXNtQm91bmRzQ2hlY2tHZW5lcmF0
b3I+IG1fd2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiwxMSArMzYsMTEgQEAKICNpbmNsdWRlICJBaXJGaXhPYnZpb3VzU3BpbGxzLmgiCiAjaW5j
bHVkZSAiQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmgiCiAjaW5jbHVkZSAiQWlyR2VuZXJh
dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIgogI2luY2x1
ZGUgIkFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaCIKICNpbmNsdWRlICJBaXJMb3dlckFmdGVyUmVn
QWxsb2MuaCIKICNpbmNsdWRlICJBaXJMb3dlckVudHJ5U3dpdGNoLmgiCiAjaW5jbHVkZSAiQWly
TG93ZXJNYWNyb3MuaCIKKyNpbmNsdWRlICJBaXJMb3dlclN0YWNrQXJncy5oIgogI2luY2x1ZGUg
IkFpck9wY29kZVV0aWxzLmgiCiAjaW5jbHVkZSAiQWlyT3B0aW1pemVCbG9ja09yZGVyLmgiCiAj
aW5jbHVkZSAiQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5oIgpAQCAtMTA5LDE1ICsxMDksMTMgQEAg
dm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiBjb2RlKQogCiAgICAgbG93ZXJBZnRlclJl
Z0FsbG9jKGNvZGUpOwogCi0gICAgLy8gUHJpb3IgdG8gdGhpcyBwb2ludCB0aGUgcHJvbG9ndWUg
YW5kIGVwaWxvZ3VlIGlzIGltcGxpY2l0LiBUaGlzIG1ha2VzIGl0IGV4cGxpY2l0LiBJdCBhbHNv
Ci0gICAgLy8gZG9lcyB0aGluZ3MgbGlrZSBpZGVudGlmeSB3aGljaCBjYWxsZWUtc2F2ZXMgd2Un
cmUgdXNpbmcgYW5kIHNhdmVzIHRoZW0uCi0gICAgaGFuZGxlQ2FsbGVlU2F2ZXMoY29kZSk7Ci0g
ICAgCi0gICAgLy8gVGhpcyB0dXJucyBhbGwgU3RhY2sgYW5kIENhbGxBcmcgQXJncyBpbnRvIEFk
ZHIgYXJncyB0aGF0IHVzZSB0aGUgZnJhbWUgcG9pbnRlci4gSXQgZG9lcwotICAgIC8vIHRoaXMg
YnkgZmlyc3QtZml0IGFsbG9jYXRpbmcgc3RhY2sgc2xvdHMuIEl0IHNob3VsZCBiZSBwcmV0dHkg
ZGFybiBjbG9zZSB0byBvcHRpbWFsLCBzbyB3ZQotICAgIC8vIHNob3VsZG4ndCBoYXZlIHRvIHdv
cnJ5IGFib3V0IHRoaXMgdmVyeSBtdWNoLgorICAgIC8vIFRoaXMgZG9lcyBmaXJzdC1maXQgYWxs
b2NhdGlvbiBvZiBzdGFjayBzbG90cyB1c2luZyBhbiBpbnRlcmZlcmVuY2UgZ3JhcGggcGx1cyBh
IGJ1bmNoCisgICAgLy8gb2Ygb3RoZXIgb3B0aW1pemF0aW9ucy4KICAgICBhbGxvY2F0ZVN0YWNr
QnlHcmFwaENvbG9yaW5nKGNvZGUpOwogICAgIAorICAgIC8vIFRoaXMgdHVybnMgYWxsIFN0YWNr
IGFuZCBDYWxsQXJnIEFyZ3MgaW50byBBZGRyIGFyZ3MgdGhhdCB1c2UgdGhlIGZyYW1lIHBvaW50
ZXIuCisgICAgbG93ZXJTdGFja0FyZ3MoY29kZSk7CisgICAgCiAgICAgLy8gSWYgd2UgY29hbGVz
Y2VkIG1vdmVzIHRoZW4gd2UgY2FuIHVuYnJlYWsgY3JpdGljYWwgZWRnZXMuIFRoaXMgaXMgdGhl
IG1haW4gcmVhc29uIGZvciB0aGlzCiAgICAgLy8gcGhhc2UuCiAgICAgc2ltcGxpZnlDRkcoY29k
ZSk7CkBAIC0yMTIsNyArMjEwLDcgQEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhl
bHBlcnMmIAogICAgICAgICAgICAgaWYgKGNvZGUuZnJhbWVTaXplKCkpCiAgICAgICAgICAgICAg
ICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY29kZS5mcmFtZVNpemUo
KSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2RlLmNh
bGxlZVNhdmVSZWdpc3RlcnMoKSkgeworICAgICAgICAgICAgZm9yIChjb25zdCBSZWdpc3RlckF0
T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCkpIHsK
ICAgICAgICAgICAgICAgICBpZiAoZW50cnkucmVnKCkuaXNHUFIoKSkKICAgICAgICAgICAgICAg
ICAgICAgaml0LnN0b3JlUHRyKGVudHJ5LnJlZygpLmdwcigpLCBhcmdGb3IoZW50cnkpKTsKICAg
ICAgICAgICAgICAgICBlbHNlCkBAIC0yNDksNyArMjQ3LDcgQEAgdm9pZCBnZW5lcmF0ZShDb2Rl
JiBjb2RlLCBDQ2FsbEhlbHBlcnMmIAogICAgICAgICAgICAgLy8gaGF2ZSB0aGlzIG92ZXJyaWRl
LgogICAgICAgICAgICAgYXV0byBzdGFydCA9IGppdC5sYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMo
KTsKICAgICAgICAgICAgIGlmIChjb2RlLmZyYW1lU2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAg
Zm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVlU2F2ZVJlZ2lz
dGVycygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBl
bnRyeSA6IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQubG9hZFB0cihhcmdGb3IoZW50cnkpLCBlbnRyeS5yZWcoKS5ncHIoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCShyZXZpc2lvbiAyMTUyMzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDE0ICszMCwxMSBAQAogCiAjaW5jbHVkZSAiQWlyQ29kZS5o
IgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCi0jaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5o
IgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKIHZv
aWQgaGFuZGxlQ2FsbGVlU2F2ZXMoQ29kZSYgY29kZSkKIHsKLSAgICBQaGFzZVNjb3BlIHBoYXNl
U2NvcGUoY29kZSwgImhhbmRsZUNhbGxlZVNhdmVzIik7Ci0KICAgICBSZWdpc3RlclNldCB1c2Vk
Q2FsbGVlU2F2ZXM7CiAKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewpAQCAt
NjEsMTYgKzU4LDE1IEBAIHZvaWQgaGFuZGxlQ2FsbGVlU2F2ZXMoQ29kZSYgY29kZSkKICAgICBp
ZiAoIXVzZWRDYWxsZWVTYXZlcy5udW1iZXJPZlNldFJlZ2lzdGVycygpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSA9IFJlZ2lzdGVyQXRPZmZzZXRM
aXN0KHVzZWRDYWxsZWVTYXZlcyk7CisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgY2FsbGVlU2F2
ZVJlZ2lzdGVycyA9IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KHVzZWRDYWxsZWVTYXZlcyk7CiAKICAg
ICBzaXplX3QgYnl0ZVNpemUgPSAwOwotICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYg
ZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkKKyAgICBmb3IgKGNvbnN0IFJlZ2lz
dGVyQXRPZmZzZXQmIGVudHJ5IDogY2FsbGVlU2F2ZVJlZ2lzdGVycykKICAgICAgICAgYnl0ZVNp
emUgPSBzdGQ6Om1heChzdGF0aWNfY2FzdDxzaXplX3Q+KC1lbnRyeS5vZmZzZXQoKSksIGJ5dGVT
aXplKTsKIAotICAgIFN0YWNrU2xvdCogc2F2ZXNBcmVhID0gY29kZS5hZGRTdGFja1Nsb3QoYnl0
ZVNpemUsIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZCk7Ci0gICAgLy8gVGhpcyBpcyBhIGJpdCB3ZWly
ZCBzaW5jZSB3ZSBjb3VsZCBoYXZlIGFscmVhZHkgcGlubmVkIGEgZGlmZmVyZW50IHN0YWNrIHNs
b3QgdG8gdGhpcwotICAgIC8vIGFyZWEuIEFsc28sIG91ciBydW50aW1lIGRvZXMgbm90IHJlcXVp
cmUgdXMgdG8gcGluIHRoZSBzYXZlcyBhcmVhLiBNYXliZSB3ZSBzaG91bGRuJ3QgcGluIGl0Pwot
ICAgIHNhdmVzQXJlYS0+c2V0T2Zmc2V0RnJvbUZQKC1ieXRlU2l6ZSk7CisgICAgY29kZS5zZXRD
YWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoCisgICAgICAgIFdURk1vdmUoY2FsbGVlU2F2
ZVJlZ2lzdGVycyksCisgICAgICAgIGNvZGUuYWRkU3RhY2tTbG90KGJ5dGVTaXplLCBTdGFja1Ns
b3RLaW5kOjpMb2NrZWQpKTsKIH0KIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2Fs
bGVlU2F2ZXMuaAkocmV2aXNpb24gMjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDggKzMxLDkgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZQogCiBjbGFzcyBDb2RlOwog
Ci0vLyBUaGlzIHBoYXNlIGlkZW50aWZpZXMgY2FsbGVlLXNhdmUgcmVnaXN0ZXJzIGFuZCBhZGRz
IGNvZGUgdG8gc2F2ZS9yZXN0b3JlIHRoZW0gaW4gdGhlCi0vLyBwcm9sb2d1ZS9lcGlsb2d1ZSB0
byB0aGUgY29kZS4gSXQncyBhIG1hbmRhdG9yeSBwaGFzZS4KKy8vIFRoaXMgdXRpbGl0eSBpZGVu
dGlmaWVzIGNhbGxlZS1zYXZlIHJlZ2lzdGVycyBhbmQgdGVsbHMgQ29kZS4gSXQncyBjYWxsZWQg
ZnJvbSBwaGFzZXMgdGhhdAorLy8gZG8gc3RhY2sgYWxsb2NhdGlvbi4gV2UgZG9uJ3QgZG8gaXQg
YXQgdGhlIGVuZCBvZiByZWdpc3RlciBhbGxvY2F0aW9uIGJlY2F1c2UgdGhlIHJlYWwgZW5kCisv
LyBvZiByZWdpc3RlciBhbGxvY2F0aW9uIGlzIGp1c3QgYmVmb3JlIHN0YWNrIGFsbG9jYXRpb24u
CiAKIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBjb29sIHRvIG1ha2UgdGhpcyBtb3JlIGludGVyYWN0
aXZlIHdpdGggdGhlIEFpciBjbGllbnQgYW5kIGFsc28gbW9yZQogLy8gcG93ZXJmdWwuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdz
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxv
d2VyU3RhY2tBcmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQWlyTG93ZXJTdGFja0FyZ3MuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJBaXJBcmdJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2lu
Y2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisj
aW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisj
aW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBsb3dlclN0YWNrQXJncyhDb2RlJiBjb2RlKQorewor
ICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAibG93ZXJTdGFja0FyZ3MiKTsKKyAgICAK
KyAgICAvLyBOb3cgd2UgbmVlZCB0byBkZWR1Y2UgaG93IG11Y2ggYXJndW1lbnQgYXJlYSB3ZSBu
ZWVkLgorICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAo
SW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGluc3Qu
YXJncykgeworICAgICAgICAgICAgICAgIGlmIChhcmcuaXNDYWxsQXJnKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gRm9yIG5vdywgd2UgYXNzdW1lIHRoYXQgd2UgdXNlIDggYnl0ZXMgb2Yg
dGhlIGNhbGwgYXJnLiBCdXQgdGhhdCdzIG5vdAorICAgICAgICAgICAgICAgICAgICAvLyBzdWNo
IGFuIGF3ZXNvbWUgYXNzdW1wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTQKKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGFyZy5vZmZzZXQoKSA+PSAwKTsKKyAgICAgICAgICAgICAgICAgICAg
Y29kZS5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplSW5CeXRlcyhhcmcub2Zmc2V0KCkgKyA4KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBj
b2RlLnNldEZyYW1lU2l6ZShjb2RlLmZyYW1lU2l6ZSgpICsgY29kZS5jYWxsQXJnQXJlYVNpemVJ
bkJ5dGVzKCkpOworCisgICAgLy8gRmluYWxseSwgdHJhbnNmb3JtIHRoZSBjb2RlIHRvIHVzZSBB
ZGRyJ3MgaW5zdGVhZCBvZiBTdGFja1Nsb3Qncy4gVGhpcyBpcyBhIGxvc3NsZXNzCisgICAgLy8g
dHJhbnNmb3JtYXRpb24gc2luY2Ugd2UgY2FuIHNlYXJjaCB0aGUgU3RhY2tTbG90cyBhcnJheSB0
byBmaWd1cmUgb3V0IHdoaWNoIFN0YWNrU2xvdCBhbnkKKyAgICAvLyBvZmZzZXQtZnJvbS1GUCBy
ZWZlcnMgdG8uCisKKyAgICAvLyBGSVhNRTogVGhpcyBtYXkgcHJvZHVjZSBhZGRyZXNzZXMgdGhh
dCBhcmVuJ3QgdmFsaWQgaWYgd2UgZW5kIHVwIHdpdGggYSBnaW5vcm1vdXMgc3RhY2sgZnJhbWUu
CisgICAgLy8gV2Ugd291bGQgaGF2ZSB0byBzY2F2ZW5nZSBmb3IgdGVtcG9yYXJpZXMgaWYgdGhp
cyBoYXBwZW5lZC4gRm9ydHVuYXRlbHksIHRoaXMgY2FzZSB3aWxsIGJlCisgICAgLy8gZXh0cmVt
ZWx5IHJhcmUgc28gd2UgY2FuIGRvIGNyYXp5IHRoaW5ncyB3aGVuIGl0IGFyaXNlcy4KKyAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNTMwCisKKyAgICBJ
bnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdElu
ZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgIEluc3QmIGlu
c3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygK
KyAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lk
dGggd2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBzdGFja0FkZHIgPSBbJl0gKGlu
dDMyX3Qgb2Zmc2V0KSAtPiBBcmcgeworICAgICAgICAgICAgICAgICAgICAgICAgQXJnIHJlc3Vs
dCA9IEFyZzo6c3RhY2tBZGRyKG9mZnNldCwgY29kZS5mcmFtZVNpemUoKSwgd2lkdGgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJGQVRBTDogQ291bGQgbm90IGNyZWF0ZSBzdGFjayByZWZlcmVuY2Ug
Zm9yIG9mZnNldCA9ICIsIG9mZnNldCwgIiBhbmQgd2lkdGggPSAiLCB3aWR0aCwgIlxuIik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ29kZTpcbiIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiRkFUQUw6IENvdWxkIG5vdCBjcmVhdGUgc3RhY2sgcmVmZXJlbmNlIGZv
ciBvZmZzZXQgPSAiLCBvZmZzZXQsICIgYW5kIHdpZHRoID0gIiwgd2lkdGgsICJcbiIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQXJnOjpTdGFjazogeworICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90
KiBzbG90ID0gYXJnLnN0YWNrU2xvdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFy
Zzo6aXNaRGVmKHJvbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC0+a2lu
ZCgpID09IFN0YWNrU2xvdEtpbmQ6OlNwaWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JiYgc2xvdC0+Ynl0ZVNpemUoKSA+IGJ5dGVzKHdpZHRoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IGhhbmRsZSB0aGlzIHNpbXBsZSBjYXNlIGJl
Y2F1c2UgaXQncyB0aGUgb25seSBvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0
aGF0IGFyaXNlczogWkRlZidzIGFyZSBvbmx5IDMyLWJpdCByaWdodCBub3cuIFNvLCB3aGVuIHdl
IGhpdCB0aGVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2VydGlvbnMgaXQg
bWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGltcGxlbWVudCB0aG9zZSBvdGhlciBraW5kcyBvZgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHplcm8gZmlsbHMuCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC0+Ynl0ZVNpemUoKSA9PSA4KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh3aWR0aCA9PSBXaWR0aDMyKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzVmFsaWRGb3Jt
KFN0b3JlWmVybzMyLCBBcmc6OlN0YWNrKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5z
dEluZGV4ICsgMSwgU3RvcmVaZXJvMzIsIGluc3Qub3JpZ2luLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGFja0FkZHIoYXJnLm9mZnNldCgpICsgNCArIHNsb3QtPm9mZnNldEZy
b21GUCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBhcmcgPSBzdGFja0FkZHIoYXJnLm9mZnNldCgpICsgc2xvdC0+b2Zmc2V0RnJvbUZQKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgICAgICAgICAg
ICAgICAgICBhcmcgPSBzdGFja0FkZHIoYXJnLm9mZnNldCgpIC0gY29kZS5mcmFtZVNpemUoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAg
ICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlclN0YWNrQXJncy5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJTdGFj
a0FyZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIHR1cm5zIHN0YWNrIGFuZCBjYWxsQXJnIHJlZmVy
ZW5jZXMgaW50byBhY3R1YWwgRlAtcmVsYXRpdmUgb3IgU1AtcmVsYXRpdmUgYWRkcmVzc2VzLgor
Ly8gQWxzbyBmaXhlcyBaRGVmcyB0byBhbm9ueW1vdXMgc3RhY2sgc2xvdHMuCisKK3ZvaWQgbG93
ZXJTdGFja0FyZ3MoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306842</attachid>
            <date>2017-04-11 13:06:45 -0700</date>
            <delta_ts>2017-04-11 14:59:03 -0700</delta_ts>
            <desc>it is written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>99588</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxNTIzOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTAwLDYgKzEwMCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvYWly
L0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAKICAgICBiMy9haXIvQWlyTG93ZXJFbnRyeVN3aXRj
aC5jcHAKICAgICBiMy9haXIvQWlyTG93ZXJNYWNyb3MuY3BwCisgICAgYjMvYWlyL0Fpckxvd2Vy
U3RhY2tBcmdzLmNwcAogICAgIGIzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwCiAgICAg
YjMvYWlyL0FpclBhZEludGVyZmVyZW5jZS5jcHAKICAgICBiMy9haXIvQWlyUGhhc2VJbnNlcnRp
b25TZXQuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE1
MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw4ICsxODYsOCBAQAogCQkwRjI1
RjFCNDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBRDE4MTYzNUYzMDA1MjJG
MzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQUM1NjYxRThBMEI3NzAwMDFFRTNGIC8qIEFpckZpeFNw
aWxsc0FmdGVyVGVybWluYWxzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkFDNTY0MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRl
clRlcm1pbmFscy5jcHAgKi87IH07CiAJCTBGMkFDNTY3MUU4QTBCNzkwMDAxRUUzRiAvKiBBaXJG
aXhTcGlsbHNBZnRlclRlcm1pbmFscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQUM1NjUxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzLmggKi87IH07Ci0JCTBGMkFDNTZBMUU4QTBCRDMwMDAxRUUzRiAvKiBBaXJB
bGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2ODFFOEEwQkQxMDAwMUVFM0YgLyogQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwICovOyB9OwotCQkwRjJBQzU2QjFFOEEwQkQ1
MDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkFDNTY5MUU4QTBCRDEwMDAx
RUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oICovOyB9OworCQkwRjJB
QzU2QTFFOEEwQkQzMDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGlu
ZWFyU2Nhbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJBQzU2ODFFOEEwQkQxMDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFj
a0J5TGluZWFyU2Nhbi5jcHAgKi87IH07CisJCTBGMkFDNTZCMUU4QTBCRDUwMDAxRUUzRiAvKiBB
aXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0Yg
LyogQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5oICovOyB9OwogCQkw
RjJBQzU2RTFFOEQ3QjAwMDAwMUVFM0YgLyogQWlyUGhhc2VJbnNlcnRpb25TZXQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NkMxRThEN0FG
RjAwMDFFRTNGIC8qIEFpclBoYXNlSW5zZXJ0aW9uU2V0LmNwcCAqLzsgfTsKIAkJMEYyQUM1NkYx
RThEN0IwMzAwMDFFRTNGIC8qIEFpclBoYXNlSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2RDFFOEQ3QUZGMDAwMUVFM0Yg
LyogQWlyUGhhc2VJbnNlcnRpb25TZXQuaCAqLzsgfTsKIAkJMEYyQUM1NzExRThFRTQ1NDAwMDFF
RTNGIC8qIEFpckZvcm1UYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQUM1NzAxRThFRTQ1MjAwMDFFRTNGIC8qIEFpckZvcm1UYWJsZS5oICov
OyB9OwpAQCAtNDU1LDYgKzQ1NSw4IEBACiAJCTBGNUFFMkM0MURGNEYyODAwMDY2RUZFMSAvKiBW
TUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZFOTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjVCNEEzMzFDODRGMEQ2MDBGMUIx
N0UgLyogU2xvd1BhdGhSZXR1cm5UeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjVCNEEzMjFDODRGMEQ2MDBGMUIxN0UgLyogU2xvd1BhdGhSZXR1
cm5UeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY1Q0Y5ODExRTk2RjE3RjAwQzE4NjkyIC8qIEFpclRtcE1hcC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1Q0Y5ODAxRTk2RjE3RDAwQzE4Njky
IC8qIEFpclRtcE1hcC5oICovOyB9OworCQkwRjVDRjk4NDFFOUQ1Mzc3MDBDMTg2OTIgLyogQWly
TG93ZXJTdGFja0FyZ3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNUNGOTgzMUU5RDUzNzUwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5oICov
OyB9OworCQkwRjVDRjk4NTFFOUQ1MzdBMDBDMTg2OTIgLyogQWlyTG93ZXJTdGFja0FyZ3MuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1Q0Y5ODIx
RTlENTM3NTAwQzE4NjkyIC8qIEFpckxvd2VyU3RhY2tBcmdzLmNwcCAqLzsgfTsKIAkJMEY1RDA4
NUQxQjhDRjk5RDAwMTE0M0I0IC8qIERGR05vZGVPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RDA4NUMxQjhDRjk5RDAwMTE0M0I0IC8q
IERGR05vZGVPcmlnaW4uY3BwICovOyB9OwogCQkwRjVFRjkxRTE2ODc4RjdBMDAzRTVDMjUgLyog
SklUVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNUVGOTFCMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuY3BwICovOyB9OwogCQkw
RjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVFRjkxQzE2ODc4Rjc4MDAzRTVDMjUgLyog
SklUVGh1bmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTI3MzEsOCArMjczMyw4IEBACiAJCTBGMjVGMUFEMTgxNjM1RjMwMDUyMkYzOSAvKiBG
VExTbG93UGF0aENhbGxLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRM
U2xvd1BhdGhDYWxsS2V5Lmg7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxsS2V5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkFDNTY0MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJG
aXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHA7IHBhdGggPSBiMy9haXIvQWly
Rml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjJBQzU2NTFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRml4U3BpbGxzQWZ0ZXJUZXJt
aW5hbHMuaDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjJBQzU2ODFFOEEwQkQxMDAwMUVFM0YgLyogQWly
QWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwOyBwYXRo
ID0gYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYyQUM1NjkxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9j
YXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmg7IHBhdGggPSBiMy9haXIvQWly
QWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQW5k
U3RhY2tCeUxpbmVhclNjYW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5jcHA7IHBhdGggPSBi
My9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkFDNTY5MUU4QTBCRDEwMDAxRUUzRiAvKiBBaXJB
bGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4u
aDsgcGF0aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2Fu
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkFDNTZDMUU4RDdBRkYwMDAxRUUz
RiAvKiBBaXJQaGFzZUluc2VydGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBBaXJQaGFzZUluc2VydGlvblNldC5jcHA7IHBhdGggPSBiMy9haXIvQWlyUGhh
c2VJbnNlcnRpb25TZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJBQzU2
RDFFOEQ3QUZGMDAwMUVFM0YgLyogQWlyUGhhc2VJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyUGhhc2VJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGIzL2Fp
ci9BaXJQaGFzZUluc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjJBQzU3MDFFOEVFNDUyMDAwMUVFM0YgLyogQWlyRm9ybVRhYmxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEFpckZvcm1UYWJsZS5oOyBwYXRoID0gYjMvYWlyL0FpckZvcm1U
YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjk5NSw2ICsyOTk3LDggQEAK
IAkJMEY1QTYyODIxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMVmFsdWVSYW5nZS5oOyBwYXRoID0gZnRsL0ZUTFZh
bHVlUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QjRBMzIxQzg0RjBE
NjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTbG93UGF0aFJldHVyblR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY1Q0Y5ODAxRTk2RjE3RDAwQzE4NjkyIC8qIEFpclRtcE1hcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJUbXBNYXAuaDsgcGF0aCA9IGIzL2Fpci9BaXJUbXBN
YXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1Q0Y5ODIxRTlENTM3NTAwQzE4
NjkyIC8qIEFpckxvd2VyU3RhY2tBcmdzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEFpckxvd2VyU3RhY2tBcmdzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJMb3dlclN0
YWNrQXJncy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNUNGOTgzMUU5RDUz
NzUwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBBaXJMb3dlclN0YWNrQXJncy5oOyBwYXRoID0gYjMvYWlyL0Fpckxvd2VyU3Rh
Y2tBcmdzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUQwODVDMUI4Q0Y5OUQw
MDExNDNCNCAvKiBERkdOb2RlT3JpZ2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR05vZGVPcmlnaW4uY3BwOyBwYXRoID0gZGZnL0RGR05vZGVPcmlnaW4uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVFRjkxQjE2ODc4Rjc4MDAzRTVDMjUg
LyogSklUVGh1bmtzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJ
VFRodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUVGOTFDMTY4NzhG
NzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSklUVGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTc3LDEwICs1
NTgxLDEwIEBACiAJCTBGRUM4NEIzMUJEQUNEODgwMDgwRkY3NCAvKiBhaXIgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGMkFDNTY4MUU4QTBCRDEwMDAx
RUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmNwcCAqLywK
KwkJCQkwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRT
dGFja0J5TGluZWFyU2Nhbi5oICovLAogCQkJCTc5NjVDMjE0MUU1RDc5OTYwMEI3NTkxRCAvKiBB
aXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAgKi8sCiAJCQkJNzk2NUMyMTUx
RTVENzk5NjAwQjc1OTFEIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmgg
Ki8sCi0JCQkJMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJz
QnlMaW5lYXJTY2FuLmNwcCAqLywKLQkJCQkwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyogQWly
QWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLywKIAkJCQkwRkVDODU0ODFCREFDREM3
MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZy5jcHAgKi8sCiAJCQkJ
MEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3Jp
bmcuaCAqLywKIAkJCQkwRkVDODU0QTFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAqLywK
QEAgLTU2MzksNiArNTY0Myw4IEBACiAJCQkJMEZERjcwODQxRDNGMkMxRjAwOTI3NDQ5IC8qIEFp
ckxvd2VyRW50cnlTd2l0Y2guaCAqLywKIAkJCQkwRjYxODMyNzFDNDVCRjA3MDA3MjQ1MEIgLyog
QWlyTG93ZXJNYWNyb3MuY3BwICovLAogCQkJCTBGNjE4MzI4MUM0NUJGMDcwMDcyNDUwQiAvKiBB
aXJMb3dlck1hY3Jvcy5oICovLAorCQkJCTBGNUNGOTgyMUU5RDUzNzUwMEMxODY5MiAvKiBBaXJM
b3dlclN0YWNrQXJncy5jcHAgKi8sCisJCQkJMEY1Q0Y5ODMxRTlENTM3NTAwQzE4NjkyIC8qIEFp
ckxvd2VyU3RhY2tBcmdzLmggKi8sCiAJCQkJMjY0MDkxRkExQkUyRkQ0MTAwNjg0REIyIC8qIEFp
ck9wY29kZS5vcGNvZGVzICovLAogCQkJCTBGQjM4NzhDMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJP
cHRpbWl6ZUJsb2NrT3JkZXIuY3BwICovLAogCQkJCTBGQjM4NzhEMUJGQkM0NEQwMEUzQUIxRSAv
KiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCAqLywKQEAgLTgyMTQsNyArODIyMCw3IEBACiAJCQkJ
MEZFQzg1MTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0MzQyMkE2MzFDMTU4RTZEMDBFMkVCOTggLyogQjNDb25zdEZs
b2F0VmFsdWUuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMkFDNTZCMUU4QTBCRDUwMDAxRUUzRiAv
KiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEYyQUM1NkIxRThBMEJENTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tC
eUxpbmVhclNjYW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NUIzMUJERUQ5NTcwMDgwRkY3
NCAvKiBCM0NvbnN0UHRyVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4REY2MUJFOTNE
NTUwMDEzQzg4RiAvKiBCM0NvbnN0cmFpbmVkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkM2M0I4MUU2MzQzRjcwMEMxMzgzOSAvKiBCM0dlbmVyaWNCbG9ja0luc2VydGlvblNldC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC04OTc3LDYgKzg5ODMsNyBAQAogCQkJCUE1MTAwN0MxMTg3Q0MzQzYw
MEIzODg3OSAvKiBKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1MEU0QjY0MTg4MDlERDUwMDY4QTQ2RCAvKiBKU0dsb2JhbE9iamVjdFJ1bnRp
bWVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQzYzQzQxRTY5RUY5NDAwQzEzODM5IC8q
IEIzTWVtb3J5VmFsdWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjVDRjk4NDFFOUQ1
Mzc3MDBDMTg2OTIgLyogQWlyTG93ZXJTdGFja0FyZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
MDNGQTJBMTg4RjEwNTkwMDExMEYxNCAvKiBKU0dsb2JhbE9iamVjdFNjcmlwdERlYnVnU2VydmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTEzRTVDMDE4NUJGQUNDMDA3RTk1QUQgLyogSlNJbmpl
Y3RlZFNjcmlwdEhvc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MTNFNUMyMTg1QkZBQ0MwMDdF
OTVBRCAvKiBKU0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xMDI0Niw3ICsxMDI1Myw3IEBACiAJCQkJQTc4QTk3NzYxNzk3MzhCODAwOURGNzQ0IC8qIERG
R0ZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCREMxNTE1MUM1RDREMDBDRDg5
MTAgLyogREZHRml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIwMTc3RjFEQ0FE
QzMzMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBG
MkFDNTZBMUU4QTBCRDMwMDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nh
bi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJBQzU2QTFFOEEwQkQzMDAwMUVFM0YgLyogQWly
QWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjlEMzM5NjE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE3RDg5Q0Y3MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjY5Q0M4ODE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJv
emVuVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDc2MSw2ICsxMDc2OCw3IEBACiAJCQkJ
MTQyODA4NDIxMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg2NDJDNTEyMTUxQzA4M0QwMDQ2RDRFRiAvKiBSZWdFeHBNYXRjaGVzQXJy
YXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDMxMDdFQzA5MzAwMTNFN0IyIC8qIFJl
Z0V4cE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjVDRjk4NTFFOUQ1MzdBMDBDMTg2
OTIgLyogQWlyTG93ZXJTdGFja0FyZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDQx
MDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk2NTQwQzdBMDFCODJFMUMzMDAwRjZCNzkgLyogUmVnaXN0ZXJBdE9mZnNldC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk2NTQwQzdBMTFCODJFMUMzMDAwRjZCNzkgLyogUmVnaXN0ZXJBdE9mZnNl
dExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NSw3ICszNDUsNyBAQCB1
bnNpZ25lZCBQcm9jZWR1cmU6OmZyYW1lU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIGNvZGUoKS5m
cmFtZVNpemUoKTsKIH0KIAotY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QmIFByb2NlZHVyZTo6
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpIGNvbnN0CitSZWdpc3RlckF0T2Zmc2V0TGlzdCBQcm9jZWR1
cmU6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSBjb25zdAogewogICAgIHJldHVybiBjb2RlKCkuY2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlLmgJKHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1Byb2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDMsNyArMjQzLDcgQEAgcHVibGljOgog
ICAgIGJvb2wgbmVlZHNVc2VkUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc1VzZWRS
ZWdpc3RlcnM7IH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIGZyYW1lU2l6ZSgp
IGNvbnN0OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0
JiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgY29uc3Q7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUmVn
aXN0ZXJBdE9mZnNldExpc3QgY2FsbGVlU2F2ZVJlZ2lzdGVycygpIGNvbnN0OwogCiAgICAgUENU
b09yaWdpbk1hcCYgcGNUb09yaWdpbk1hcCgpIHsgcmV0dXJuIG1fcGNUb09yaWdpbk1hcDsgfQog
ICAgIFBDVG9PcmlnaW5NYXAgcmVsZWFzZVBDVG9PcmlnaW5NYXAoKSB7IHJldHVybiBXVEZNb3Zl
KG1fcGNUb09yaWdpbk1hcCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcAkocmV2aXNpb24gMjE1MjM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgsNyBAQCBSZWdpc3RlclNldCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXM6OnVuCiAgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gdXNlZFJlZ2lz
dGVycygpOwogICAgIAogICAgIFJlZ2lzdGVyU2V0IHVuc2F2ZWRDYWxsZWVTYXZlcyA9IFJlZ2lz
dGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBmb3IgKGNvbnN0IFJlZ2lzdGVy
QXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogbV9jb250ZXh0LmNvZGUtPmNhbGxlZVNhdmVSZWdpc3Rl
cnMoKSkKLSAgICAgICAgdW5zYXZlZENhbGxlZVNhdmVzLmNsZWFyKHJlZ0F0T2Zmc2V0LnJlZygp
KTsKKyAgICB1bnNhdmVkQ2FsbGVlU2F2ZXMuZXhjbHVkZShtX2NvbnRleHQuY29kZS0+Y2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKIAogICAgIHJlc3VsdC5tZXJnZSh1bnNhdmVkQ2FsbGVlU2F2ZXMp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0
ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5j
cHAJKHJldmlzaW9uIDIxNTIzOCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHA6MjE1MjM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJT
Y2FuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oIgorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkFpckFyZ0lubGluZXMuaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgi
CisjaW5jbHVkZSAiQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCIKKyNpbmNsdWRlICJBaXJQ
aGFzZUluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiQWlyTGl2ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJQYWRJbnRlcmZlcmVuY2UuaCIKKyNpbmNs
dWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQWlyUmVnTGl2ZW5lc3MuaCIKKyNpbmNs
dWRlICJBaXJUbXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyVG1wTWFwLmgiCisjaW5jbHVkZSA8
d3RmL0xpc3REdW1wLmg+CisjaW5jbHVkZSA8d3RmL1JhbmdlLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKworTk9fUkVU
VVJOX0RVRV9UT19DUkFTSCBORVZFUl9JTkxJTkUgdm9pZCBjcmFzaCgpCit7CisgICAgQ1JBU0go
KTsKK30KKworI3VuZGVmIFJFTEVBU0VfQVNTRVJUCisjZGVmaW5lIFJFTEVBU0VfQVNTRVJUKGFz
c2VydGlvbikgZG8geyBcCisgICAgaWYgKCEoYXNzZXJ0aW9uKSkgeyBcCisgICAgICAgIFdURlJl
cG9ydEFzc2VydGlvbkZhaWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNU
SU9OLCAjYXNzZXJ0aW9uKTsgXAorICAgICAgICBjcmFzaCgpOyBcCisgICAgfSBcCit9IHdoaWxl
ICgwKQorCitib29sIHZlcmJvc2UoKSB7IHJldHVybiBPcHRpb25zOjphaXJMaW5lYXJTY2FuVmVy
Ym9zZSgpOyB9CisKKy8vIFBoYXNlIGNvbnN0YW50cyB3ZSB1c2UgZm9yIHRoZSBQaGFzZUluc2Vy
dGlvblNldC4KK2NvbnN0IHVuc2lnbmVkIGZpcnN0UGhhc2UgPSAwOworY29uc3QgdW5zaWduZWQg
c2Vjb25kUGhhc2UgPSAxOworCit0eXBlZGVmIFJhbmdlPHNpemVfdD4gSW50ZXJ2YWw7CisKK3N0
cnVjdCBUbXBEYXRhIHsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAg
ICB7CisgICAgICAgIG91dC5wcmludCgie2ludGVydmFsID0gIiwgaW50ZXJ2YWwsICIsIHNwaWxs
ZWQgPSAiLCBwb2ludGVyRHVtcChzcGlsbGVkKSwgIiwgYXNzaWduZWQgPSAiLCBhc3NpZ25lZCwg
IiwgaXNVbnNwaWxsYWJsZSA9ICIsIGlzVW5zcGlsbGFibGUsICIsIHBvc3NpYmxlUmVncyA9ICIs
IHBvc3NpYmxlUmVncywgIiwgZGlkQnVpbGRQb3NzaWJsZVJlZ3MgPSAiLCBkaWRCdWlsZFBvc3Np
YmxlUmVncywgIn0iKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZSgpCisgICAgewor
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghKHNwaWxsZWQgJiYgYXNzaWduZWQpKTsKKyAgICB9Cisg
ICAgCisgICAgSW50ZXJ2YWwgaW50ZXJ2YWw7CisgICAgU3RhY2tTbG90KiBzcGlsbGVkIHsgbnVs
bHB0ciB9OworICAgIFJlZ2lzdGVyU2V0IHBvc3NpYmxlUmVnczsKKyAgICBSZWcgYXNzaWduZWQ7
CisgICAgYm9vbCBpc1Vuc3BpbGxhYmxlIHsgZmFsc2UgfTsKKyAgICBib29sIGRpZEJ1aWxkUG9z
c2libGVSZWdzIHsgZmFsc2UgfTsKK307CisKK3N0cnVjdCBDbG9iYmVyIHsKKyAgICBDbG9iYmVy
KCkKKyAgICB7CisgICAgfQorICAgIAorICAgIENsb2JiZXIoc2l6ZV90IGluZGV4LCBSZWdpc3Rl
clNldCByZWdzKQorICAgICAgICA6IGluZGV4KGluZGV4KQorICAgICAgICAsIHJlZ3MocmVncykK
KyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KGluZGV4LCAiOiIsIHJlZ3MpOworICAgIH0KKyAg
ICAKKyAgICBzaXplX3QgaW5kZXggeyAwIH07CisgICAgUmVnaXN0ZXJTZXQgcmVnczsKK307CisK
K2NsYXNzIExpbmVhclNjYW4geworcHVibGljOgorICAgIExpbmVhclNjYW4oQ29kZSYgY29kZSkK
KyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgLCBtX3N0YXJ0SW5kZXgoY29kZS5zaXpl
KCkpCisgICAgICAgICwgbV9tYXAoY29kZSkKKyAgICAgICAgLCBtX2luc2VydGlvblNldHMoY29k
ZS5zaXplKCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIHJ1bigpCisgICAgeworICAg
ICAgICBidWlsZFJlZ2lzdGVyU2V0KCk7CisgICAgICAgIGJ1aWxkSW5kaWNlcygpOworICAgICAg
ICBidWlsZEludGVydmFscygpOworICAgICAgICBpZiAoc2hvdWxkU3BpbGxFdmVyeXRoaW5nKCkp
IHsKKyAgICAgICAgICAgIHNwaWxsRXZlcnl0aGluZygpOworICAgICAgICAgICAgZW1pdFNwaWxs
Q29kZSgpOworICAgICAgICB9CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHByZXBh
cmVJbnRlcnZhbHMoKTsKKyAgICAgICAgICAgIG1fZGlkU3BpbGwgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGZvckVhY2hCYW5rKAorICAgICAgICAgICAgICAgIFsmXSAoQmFuayBiYW5rKSB7CisgICAg
ICAgICAgICAgICAgICAgIGF0dGVtcHRTY2FuKGJhbmspOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgaWYgKCFtX2RpZFNwaWxsKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgZW1pdFNwaWxsQ29kZSgpOworICAgICAgICB9CisgICAgICAgIGluc2VydFNwaWxs
Q29kZSgpOworICAgICAgICBhc3NpZ25SZWdpc3RlcnMoKTsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIHZvaWQgYnVpbGRSZWdpc3RlclNldCgpCisgICAgeworICAgICAgICBmb3JFYWNoQmFu
aygKKyAgICAgICAgICAgIFsmXSAoQmFuayBiYW5rKSB7CisgICAgICAgICAgICAgICAgbV9yZWdp
c3RlcnNbYmFua10gPSBtX2NvZGUucmVnc0luUHJpb3JpdHlPcmRlcihiYW5rKTsKKyAgICAgICAg
ICAgICAgICBtX3JlZ2lzdGVyU2V0W2JhbmtdLnNldEFsbChtX3JlZ2lzdGVyc1tiYW5rXSk7Cisg
ICAgICAgICAgICAgICAgbV91bmlmaWVkUmVnaXN0ZXJTZXQubWVyZ2UobV9yZWdpc3RlclNldFti
YW5rXSk7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICB2b2lkIGJ1aWxkSW5kaWNlcygp
CisgICAgeworICAgICAgICBzaXplX3QgaW5kZXggPSAwOworICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBtX3N0YXJ0SW5kZXhbYmxvY2tdID0g
aW5kZXg7CisgICAgICAgICAgICBpbmRleCArPSBibG9jay0+c2l6ZSgpICogMjsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXhPZkhlYWQoQmFzaWNCbG9jayogYmxvY2sp
CisgICAgeworICAgICAgICByZXR1cm4gbV9zdGFydEluZGV4W2Jsb2NrXTsKKyAgICB9CisgICAg
CisgICAgc2l6ZV90IGluZGV4T2ZUYWlsKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGluZGV4T2ZIZWFkKGJsb2NrKSArIGJsb2NrLT5zaXplKCkgKiAyOworICAgIH0K
KyAgICAKKyAgICBJbnRlcnZhbCBpbnRlcnZhbChzaXplX3QgaW5kZXhPZkVhcmx5LCBBcmc6OlRp
bWluZyB0aW1pbmcpCisgICAgeworICAgICAgICBzd2l0Y2ggKHRpbWluZykgeworICAgICAgICBj
YXNlIEFyZzo6T25seUVhcmx5OgorICAgICAgICAgICAgcmV0dXJuIEludGVydmFsKGluZGV4T2ZF
YXJseSk7CisgICAgICAgIGNhc2UgQXJnOjpPbmx5TGF0ZToKKyAgICAgICAgICAgIHJldHVybiBJ
bnRlcnZhbChpbmRleE9mRWFybHkgKyAxKTsKKyAgICAgICAgY2FzZSBBcmc6OkVhcmx5QW5kTGF0
ZToKKyAgICAgICAgICAgIHJldHVybiBJbnRlcnZhbChpbmRleE9mRWFybHksIGluZGV4T2ZFYXJs
eSArIDIpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gSW50ZXJ2YWwoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBidWlsZEludGVydmFs
cygpCisgICAgeworICAgICAgICBVbmlmaWVkVG1wTGl2ZW5lc3MgbGl2ZW5lc3MobV9jb2RlKTsK
KyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAg
ICAgICAgICAgIHNpemVfdCBpbmRleE9mSGVhZCA9IHRoaXMtPmluZGV4T2ZIZWFkKGJsb2NrKTsK
KyAgICAgICAgICAgIHNpemVfdCBpbmRleE9mVGFpbCA9IHRoaXMtPmluZGV4T2ZUYWlsKGJsb2Nr
KTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9n
KCJBdCBibG9jayAiLCBwb2ludGVyRHVtcChibG9jayksICJcbiIpOworICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgaW5kZXhPZkhlYWQgPSAiLCBpbmRleE9mSGVhZCwgIlxuIik7CisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICBpZG5leE9mVGFpbCA9ICIsIGluZGV4T2ZUYWlsLCAiXG4iKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGxpdmVuZXNzLmxpdmVB
dEhlYWQoYmxvY2spKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0bXAuaXNSZWcoKSkKKyAgICAg
ICAgICAgICAgICAgICAgbV9tYXBbdG1wXS5pbnRlcnZhbCB8PSBJbnRlcnZhbChpbmRleE9mSGVh
ZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBsaXZlbmVzcy5s
aXZlQXRUYWlsKGJsb2NrKSkgeworICAgICAgICAgICAgICAgIGlmICghdG1wLmlzUmVnKCkpCisg
ICAgICAgICAgICAgICAgICAgIG1fbWFwW3RtcF0uaW50ZXJ2YWwgfD0gSW50ZXJ2YWwoaW5kZXhP
ZlRhaWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdElu
ZGV4KSB7CisgICAgICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgp
OworICAgICAgICAgICAgICAgIHNpemVfdCBpbmRleE9mRWFybHkgPSBpbmRleE9mSGVhZCArIGlu
c3RJbmRleCAqIDI7CisgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAgICAg
ICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBtX21hcFt0bXBd
LmludGVydmFsIHw9IGludGVydmFsKGluZGV4T2ZFYXJseSwgQXJnOjp0aW1pbmcocm9sZSkpOwor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUmVn
TGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgYXV0byByZWNvcmQgPSBbJl0gKHVuc2lnbmVkIGluc3RJbmRleCkg
eworICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHJlZ3MgPSBsb2NhbENhbGMubGl2ZSgpOwor
ICAgICAgICAgICAgICAgIGlmIChJbnN0KiBwcmV2ID0gYmxvY2stPmdldChpbnN0SW5kZXggLSAx
KSkgeworICAgICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBwcmV2UmVncyA9IHJlZ3M7Cisg
ICAgICAgICAgICAgICAgICAgIHByZXYtPmZvckVhY2g8UmVnPigKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFsmXSAoUmVnJiByZWcsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZURlZihyb2xlKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlJlZ3MuYWRkKHJlZyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYtPmtpbmQub3Bj
b2RlID09IFBhdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJldlJlZ3MubWVyZ2UocHJl
di0+ZXh0cmFDbG9iYmVyZWRSZWdzKCkpOworICAgICAgICAgICAgICAgICAgICBwcmV2UmVncy5m
aWx0ZXIobV91bmlmaWVkUmVnaXN0ZXJTZXQpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXBy
ZXZSZWdzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY2xvYmJlcnMuYXBw
ZW5kKENsb2JiZXIoaW5kZXhPZkhlYWQgKyBpbnN0SW5kZXggKiAyIC0gMSwgcHJldlJlZ3MpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKEluc3QqIG5leHQgPSBibG9j
ay0+Z2V0KGluc3RJbmRleCkpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgbmV4
dFJlZ3MgPSByZWdzOworICAgICAgICAgICAgICAgICAgICBuZXh0LT5mb3JFYWNoPFJlZz4oCisg
ICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFJlZyYgcmVnLCBBcmc6OlJvbGUgcm9sZSwgQmFu
aywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5
RGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0UmVncy5hZGQo
cmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBp
ZiAobmV4dC0+a2luZC5vcGNvZGUgPT0gUGF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICBu
ZXh0UmVncy5tZXJnZShuZXh0LT5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncygpKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFuZXh0UmVncy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2Nsb2JiZXJzLmFwcGVuZChDbG9iYmVyKGluZGV4T2ZIZWFkICsgaW5zdEluZGV4ICog
MiwgbmV4dFJlZ3MpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAg
ICAgICAgCisgICAgICAgICAgICByZWNvcmQoYmxvY2stPnNpemUoKSk7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgewor
ICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3RJbmRleCk7CisgICAgICAgICAg
ICAgICAgcmVjb3JkKGluc3RJbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAgIG1fY2xvYmJlcnMuYmVnaW4oKSwg
bV9jbG9iYmVycy5lbmQoKSwKKyAgICAgICAgICAgIFtdIChDbG9iYmVyJiBhLCBDbG9iYmVyJiBi
KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCA8IGIuaW5kZXg7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3NlKCkpIHsKKyAgICAg
ICAgICAgIGRhdGFMb2coIkludGVydmFsczpcbiIpOworICAgICAgICAgICAgbV9jb2RlLmZvckVh
Y2hUbXAoCisgICAgICAgICAgICAgICAgWyZdIChUbXAgdG1wKSB7CisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICAiLCB0bXAsICI6ICIsIG1fbWFwW3RtcF0sICJcbiIpOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2wgc2hvdWxkU3Bp
bGxFdmVyeXRoaW5nKCkKKyAgICB7CisgICAgICAgIGlmICghT3B0aW9uczo6YWlyTGluZWFyU2Nh
blNwaWxsc0V2ZXJ5dGhpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
CisgICAgICAgIC8vIFlvdSdyZSBtZWFudCB0byBoYWNrIHRoaXMgc28gdGhhdCB5b3Ugc2VsZWN0
aXZlbHkgc3BpbGwgZXZlcnl0aGluZyBkZXBlbmRpbmcgb24gcmVhc29ucy4KKyAgICAgICAgLy8g
VGhhdCdzIHN1cGVyIHVzZWZ1bCBmb3IgZGVidWdnaW5nLgorCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwaWxsRXZlcnl0aGluZygpCisgICAgeworICAgICAg
ICBtX2NvZGUuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgIFsmXSAoVG1wIHRtcCkgeworICAgICAg
ICAgICAgICAgIHNwaWxsKHRtcCk7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBwcmVwYXJlSW50ZXJ2YWxzKCkKKyAgICB7CisgICAgICAgIG1fdG1wcy5yZXNpemUoMCk7
CisgICAgICAgIAorICAgICAgICBtX2NvZGUuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgIFsmXSAo
VG1wIHRtcCkgeworICAgICAgICAgICAgICAgIFRtcERhdGEmIGRhdGEgPSBtX21hcFt0bXBdOwor
ICAgICAgICAgICAgICAgIGlmIChkYXRhLnNwaWxsZWQpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkYXRhLmFzc2lnbmVkID0g
UmVnKCk7CisgICAgICAgICAgICAgICAgbV90bXBzLmFwcGVuZCh0bXApOworICAgICAgICAgICAg
fSk7CisgICAgICAgIAorICAgICAgICBzdGQ6OnNvcnQoCisgICAgICAgICAgICBtX3RtcHMuYmVn
aW4oKSwgbV90bXBzLmVuZCgpLAorICAgICAgICAgICAgWyZdIChUbXAmIGEsIFRtcCYgYikgewor
ICAgICAgICAgICAgICAgIHJldHVybiBtX21hcFthXS5pbnRlcnZhbC5iZWdpbigpIDwgbV9tYXBb
Yl0uaW50ZXJ2YWwuYmVnaW4oKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAg
aWYgKHZlcmJvc2UoKSkgeworICAgICAgICAgICAgZGF0YUxvZygiVG1wczogIiwgbGlzdER1bXAo
bV90bXBzKSwgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJDbG9iYmVyczogIiwgbGlzdER1
bXAobV9jbG9iYmVycyksICJcbiIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIFRtcCBh
ZGRTcGlsbFRtcFdpdGhJbnRlcnZhbChCYW5rIGJhbmssIEludGVydmFsIGludGVydmFsKQorICAg
IHsKKyAgICAgICAgVG1wRGF0YSBkYXRhOworICAgICAgICBkYXRhLmludGVydmFsID0gaW50ZXJ2
YWw7CisgICAgICAgIGRhdGEuaXNVbnNwaWxsYWJsZSA9IHRydWU7CisgICAgICAgIAorICAgICAg
ICBUbXAgdG1wID0gbV9jb2RlLm5ld1RtcChiYW5rKTsKKyAgICAgICAgbV9tYXAuYXBwZW5kKHRt
cCwgZGF0YSk7CisgICAgICAgIHJldHVybiB0bXA7CisgICAgfQorICAgIAorICAgIHZvaWQgYXR0
ZW1wdFNjYW4oQmFuayBiYW5rKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBpcyBtb2RlbGVkIGFm
dGVyIExpbmVhclNjYW5SZWdpc3RlckFsbG9jYXRpb24gaW4gRmlnLiAxIGluCisgICAgICAgIC8v
IGh0dHA6Ly9kbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD0zMzAyNTAuCisKKyAgICAgICAgbV9h
Y3RpdmUuY2xlYXIoKTsKKyAgICAgICAgbV9hY3RpdmVSZWdzID0gUmVnaXN0ZXJTZXQoKTsKKyAg
ICAgICAgCisgICAgICAgIHNpemVfdCBjbG9iYmVySW5kZXggPSAwOworICAgICAgICBmb3IgKFRt
cCYgdG1wIDogbV90bXBzKSB7CisgICAgICAgICAgICBpZiAodG1wLmJhbmsoKSAhPSBiYW5rKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBUbXBE
YXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07CisgICAgICAgICAgICBzaXplX3QgaW5kZXggPSBlbnRy
eS5pbnRlcnZhbC5iZWdpbigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodmVyYm9z
ZSgpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiSW5kZXggIyIsIGluZGV4LCAiOiAiLCB0
bXAsICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIiwgdG1wLCAiOiAiLCBlbnRy
eSwgIlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICBjbG9iYmVySW5kZXggPSAiLCBj
bG9iYmVySW5kZXgsICJcbiIpOworICAgICAgICAgICAgICAgIC8vIFRoaXMgY291bGQgYmUgc28g
bXVjaCBmYXN0ZXIuCisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2NvZGVb
MF07CisgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBjYW5kaWRhdGVCbG9jayA6IG1f
Y29kZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9zdGFydEluZGV4W2NhbmRpZGF0ZUJs
b2NrXSA+IGluZGV4KQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGJsb2NrID0gY2FuZGlkYXRlQmxvY2s7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGluc3RJbmRleCA9IChpbmRleCAtIG1fc3RhcnRJbmRleFti
bG9ja10gKyAxKSAvIDI7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICBBdDogIiwgcG9pbnRl
ckR1bXAoYmxvY2spLCAiLCBpbnN0SW5kZXggPSAiLCBpbnN0SW5kZXgsICJcbiIpOworICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICBQcmV2OiAiLCBwb2ludGVyRHVtcChibG9jay0+Z2V0KGlu
c3RJbmRleCAtIDEpKSwgIlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIE5leHQ6
ICIsIHBvaW50ZXJEdW1wKGJsb2NrLT5nZXQoaW5zdEluZGV4KSksICJcbiIpOworICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgQWN0aXZlOlxuIik7CisgICAgICAgICAgICAgICAgZm9yIChUbXAg
dG1wIDogbV9hY3RpdmUpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCB0bXAs
ICI6ICIsIG1fbWFwW3RtcF0sICJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBUaGlzIGlzIEV4cGlyZU9sZEludGVydmFscyBpbiBGaWcuIDEuCisgICAg
ICAgICAgICB3aGlsZSAoIW1fYWN0aXZlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIFRt
cCB0bXAgPSBtX2FjdGl2ZS5maXJzdCgpOworICAgICAgICAgICAgICAgIFRtcERhdGEmIGVudHJ5
ID0gbV9tYXBbdG1wXTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBib29sIGV4
cGlyZWQgPSBlbnRyeS5pbnRlcnZhbC5lbmQoKSA8PSBpbmRleDsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBpZiAoIWV4cGlyZWQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fYWN0aXZlLnJlbW92ZUZpcnN0
KCk7CisgICAgICAgICAgICAgICAgbV9hY3RpdmVSZWdzLnJlbW92ZShlbnRyeS5hc3NpZ25lZCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElmIG5lY2Vzc2FyeSwgY29tcHV0ZSB0
aGUgc2V0IG9mIHJlZ2lzdGVycyB0aGF0IHRoaXMgdG1wIGNvdWxkIGV2ZW4gdXNlLiBUaGlzIGlz
IG5vdAorICAgICAgICAgICAgLy8gcGFydCBvZiBGaWcuIDEsIGJ1dCBpdCdzIGEgdGVjaG5pcXVl
IHRoYXQgdGhlIGF1dGhvcnMgY2xhaW0gdG8gaGF2ZSBpbXBsZW1lbnRlZCBpbiBvbmUgb2YKKyAg
ICAgICAgICAgIC8vIHRoZWlyIHR3byBpbXBsZW1lbnRhdGlvbnMuIFRoZXJlIG1heSBiZSBvdGhl
ciBtb3JlIGVmZmljaWVudCB3YXlzIHRvIGRvIHRoaXMsIGJ1dCB0aGlzCisgICAgICAgICAgICAv
LyBpbXBsZW1lbnRhdGlvbiBnZXRzIHNvbWUgcGVyZiB3aW5zIGZyb20gcGlnZ3ktYmFja2luZyB0
aGlzIGNhbGN1bGF0aW9uIGluIHRoZSBzY2FuLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IC8vIE5vdGUgdGhhdCB0aGUgZGlkQnVpbGQgZmxhZyBzdGlja3MgdGhyb3VnaCBzcGlsbGluZy4g
U3BpbGxpbmcgZG9lc24ndCBjaGFuZ2UgdGhlCisgICAgICAgICAgICAvLyBpbnRlcmZlcmVuY2Ug
c2l0dWF0aW9uLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBj
b3VsZCBzaG9ydC1jaXJjdWl0IHRoaXMgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgc3BpbGxhYmxl
IHRtcCwgdGhlcmUgYXJlIG5vCisgICAgICAgICAgICAvLyBmcmVlIHJlZ2lzdGVycywgYW5kIHRo
aXMgcmVnaXN0ZXIncyBpbnRlcnZhbCBlbmRzIGFmdGVyIHRoZSBvbmUgb24gdGhlIHRvcCBvZiB0
aGUgYWN0aXZlCisgICAgICAgICAgICAvLyBzdGFjay4KKyAgICAgICAgICAgIGlmICghZW50cnku
ZGlkQnVpbGRQb3NzaWJsZVJlZ3MpIHsKKyAgICAgICAgICAgICAgICAvLyBBZHZhbmNlIHRoZSBj
bG9iYmVyIGluZGV4IHVudGlsIGl0J3MgYXQgYSBjbG9iYmVyIHRoYXQgaXMgcmVsZXZhbnQgdG8g
dXMuCisgICAgICAgICAgICAgICAgd2hpbGUgKGNsb2JiZXJJbmRleCA8IG1fY2xvYmJlcnMuc2l6
ZSgpICYmIG1fY2xvYmJlcnNbY2xvYmJlckluZGV4XS5pbmRleCA8IGluZGV4KQorICAgICAgICAg
ICAgICAgICAgICBjbG9iYmVySW5kZXgrKzsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBSZWdpc3RlclNldCBwb3NzaWJsZVJlZ3MgPSBtX3JlZ2lzdGVyU2V0W2JhbmtdOworICAg
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBjbG9iYmVySW5kZXg7IGkgPCBtX2Nsb2JiZXJz
LnNpemUoKSAmJiBtX2Nsb2JiZXJzW2ldLmluZGV4IDwgZW50cnkuaW50ZXJ2YWwuZW5kKCk7ICsr
aSkKKyAgICAgICAgICAgICAgICAgICAgcG9zc2libGVSZWdzLmV4Y2x1ZGUobV9jbG9iYmVyc1tp
XS5yZWdzKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBlbnRyeS5wb3NzaWJs
ZVJlZ3MgPSBwb3NzaWJsZVJlZ3M7CisgICAgICAgICAgICAgICAgZW50cnkuZGlkQnVpbGRQb3Nz
aWJsZVJlZ3MgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAodmVyYm9zZSgpKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgUG9zc2libGUgcmVn
czogIiwgZW50cnkucG9zc2libGVSZWdzLCAiXG4iKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gRmluZCBhIGZyZWUgcmVnaXN0ZXIgdGhhdCB3ZSBhcmUgYWxsb3dlZCB0byB1c2UuCisg
ICAgICAgICAgICBpZiAobV9hY3RpdmUuc2l6ZSgpICE9IG1fcmVnaXN0ZXJzW2JhbmtdLnNpemUo
KSkgeworICAgICAgICAgICAgICAgIGJvb2wgZGlkQXNzaWduID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgZm9yIChSZWcgcmVnIDogbV9yZWdpc3RlcnNbYmFua10pIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IENvdWxkIGRvIHByaW9yaXR5IGNvbG9yaW5nIGhlcmUuCisgICAgICAg
ICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzAzMDQKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2FjdGl2ZVJlZ3MuY29udGFpbnMocmVn
KSAmJiBlbnRyeS5wb3NzaWJsZVJlZ3MuY29udGFpbnMocmVnKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYXNzaWduKHRtcCwgcmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpZEFz
c2lnbiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZGlkQXNz
aWduKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBpcyBTcGlsbEF0SW50ZXJ2YWwgaW4gRmlnLiAx
LCBidXQgbW9kaWZpZWQgdG8gaGFuZGxlIGNsb2JiZXJzLgorICAgICAgICAgICAgVG1wIHNwaWxs
VG1wID0gbV9hY3RpdmUudGFrZUxhc3QoCisgICAgICAgICAgICAgICAgWyZdIChUbXAgc3BpbGxD
YW5kaWRhdGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnkucG9z
c2libGVSZWdzLmNvbnRhaW5zKG1fbWFwW3NwaWxsQ2FuZGlkYXRlXS5hc3NpZ25lZCk7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAoIXNwaWxsVG1wKSB7CisgICAgICAgICAg
ICAgICAgc3BpbGwodG1wKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIFRtcERhdGEmIHNwaWxsRW50cnkgPSBtX21hcFtzcGlsbFRtcF07Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzcGlsbEVudHJ5LmFzc2lnbmVkKTsKKyAgICAgICAg
ICAgIGlmIChzcGlsbEVudHJ5LmlzVW5zcGlsbGFibGUgfHwKKyAgICAgICAgICAgICAgICAoIWVu
dHJ5LmlzVW5zcGlsbGFibGUgJiYgc3BpbGxFbnRyeS5pbnRlcnZhbC5lbmQoKSA8PSBlbnRyeS5p
bnRlcnZhbC5lbmQoKSkpIHsKKyAgICAgICAgICAgICAgICBzcGlsbCh0bXApOworICAgICAgICAg
ICAgICAgIGFkZFRvQWN0aXZlKHNwaWxsVG1wKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXNzaWduKHRtcCwgc3Bp
bGxFbnRyeS5hc3NpZ25lZCk7CisgICAgICAgICAgICBzcGlsbChzcGlsbFRtcCk7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRUb0FjdGl2ZShUbXAgdG1wKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fbWFwW3RtcF0uaXNVbnNwaWxsYWJsZSkgeworICAgICAgICAgICAgbV9hY3Rp
dmUucHJlcGVuZCh0bXApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBtX2FjdGl2ZS5hcHBlbmRBbmRCdWJibGUoCisgICAgICAgICAgICB0bXAsCisg
ICAgICAgICAgICBbJl0gKFRtcCBvdGhlclRtcCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAg
VG1wRGF0YSYgb3RoZXJFbnRyeSA9IG1fbWFwW290aGVyVG1wXTsKKyAgICAgICAgICAgICAgICBp
ZiAob3RoZXJFbnRyeS5pc1Vuc3BpbGxhYmxlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fbWFwW290aGVyVG1wXS5pbnRlcnZhbC5l
bmQoKSA+IG1fbWFwW3RtcF0uaW50ZXJ2YWwuZW5kKCk7CisgICAgICAgICAgICB9KTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhc3NpZ24oVG1wIHRtcCwgUmVnIHJlZykKKyAgICB7CisgICAgICAg
IFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWVu
dHJ5LnNwaWxsZWQpOworICAgICAgICBlbnRyeS5hc3NpZ25lZCA9IHJlZzsKKyAgICAgICAgbV9h
Y3RpdmVSZWdzLmFkZChyZWcpOworICAgICAgICBhZGRUb0FjdGl2ZSh0bXApOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHNwaWxsKFRtcCB0bXApCisgICAgeworICAgICAgICBUbXBEYXRhJiBlbnRy
eSA9IG1fbWFwW3RtcF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFlbnRyeS5pc1Vuc3BpbGxh
YmxlKTsKKyAgICAgICAgZW50cnkuc3BpbGxlZCA9IG1fY29kZS5hZGRTdGFja1Nsb3QoOCwgU3Rh
Y2tTbG90S2luZDo6U3BpbGwpOworICAgICAgICBlbnRyeS5hc3NpZ25lZCA9IFJlZygpOworICAg
ICAgICBtX2RpZFNwaWxsID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBlbWl0U3BpbGxD
b2RlKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsK
KyAgICAgICAgICAgIHNpemVfdCBpbmRleE9mSGVhZCA9IHRoaXMtPmluZGV4T2ZIZWFkKGJsb2Nr
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwg
YmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBJbnN0JiBpbnN0
ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXhP
ZkVhcmx5ID0gaW5kZXhPZkhlYWQgKyBpbnN0SW5kZXggKiAyOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIC8vIEZpcnN0IHRyeSB0byBzcGlsbCBkaXJlY3RseS4KKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2ldOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmcuaXNSZWcoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNw
aWxsZWQgPSBtX21hcFthcmcudG1wKCldLnNwaWxsZWQ7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghc3BpbGxlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWluc3QuYWRtaXRzU3RhY2soaSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjpzdGFjayhzcGls
bGVkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgLy8gRmFsbCBiYWNrIG9uIHRoZSBoYXJkIHdheS4KKyAgICAgICAgICAgICAgICBpbnN0LmZv
ckVhY2hUbXAoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSBy
b2xlLCBCYW5rIGJhbmssIFdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1w
LmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzcGlsbGVkID0gbV9tYXBbdG1wXS5zcGlsbGVkOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzcGlsbGVkKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wY29kZSBtb3ZlID0g
YmFuayA9PSBHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOworICAgICAgICAgICAgICAgICAgICAgICAg
dG1wID0gYWRkU3BpbGxUbXBXaXRoSW50ZXJ2YWwoYmFuaywgaW50ZXJ2YWwoaW5kZXhPZkVhcmx5
LCBBcmc6OnRpbWluZyhyb2xlKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUg
PT0gQXJnOjpTY3JhdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0c1tibG9ja10uaW5zZXJ0KGluc3RJbmRl
eCwgc2Vjb25kUGhhc2UsIG1vdmUsIGluc3Qub3JpZ2luLCBBcmc6OnN0YWNrKHNwaWxsZWQpLCB0
bXApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXRzW2Jsb2NrXS5pbnNlcnQo
aW5zdEluZGV4ICsgMSwgZmlyc3RQaGFzZSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgQXJnOjpz
dGFjayhzcGlsbGVkKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgaW5zZXJ0U3BpbGxDb2RlKCkKKyAgICB7
CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpCisgICAgICAgICAgICBt
X2luc2VydGlvblNldHNbYmxvY2tdLmV4ZWN1dGUoYmxvY2spOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGFzc2lnblJlZ2lzdGVycygpCisgICAgeworICAgICAgICBpZiAodmVyYm9zZSgpKSB7Cisg
ICAgICAgICAgICBkYXRhTG9nKCJBYm91dCB0byBhbGxvY2F0ZSByZWdpc3RlcnMuIFN0YXRlIG9m
IGFsbCB0bXBzOlxuIik7CisgICAgICAgICAgICBtX2NvZGUuZm9yRWFjaFRtcCgKKyAgICAgICAg
ICAgICAgICBbJl0gKFRtcCB0bXApIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
ICIsIHRtcCwgIjogIiwgbV9tYXBbdG1wXSwgIlxuIik7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICBkYXRhTG9nKCJJUjpcbiIpOworICAgICAgICAgICAgZGF0YUxvZyhtX2NvZGUp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
bV9jb2RlKSB7CisgICAgICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAg
ICAgICAgICAgICBpZiAodmVyYm9zZSgpKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJB
dDogIiwgaW5zdCwgIlxuIik7CisgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wRmFzdCgK
KyAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgUmVn
IHJlZyA9IG1fbWFwW3RtcF0uYXNzaWduZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IXJlZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkZhaWxlZCB0byBh
bGxvY2F0ZSByZWcgZm9yOiAiLCB0bXAsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBUbXAocmVnKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
Q29kZSYgbV9jb2RlOworICAgIFZlY3RvcjxSZWc+IG1fcmVnaXN0ZXJzW251bUJhbmtzXTsKKyAg
ICBSZWdpc3RlclNldCBtX3JlZ2lzdGVyU2V0W251bUJhbmtzXTsKKyAgICBSZWdpc3RlclNldCBt
X3VuaWZpZWRSZWdpc3RlclNldDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgc2l6ZV90PiBt
X3N0YXJ0SW5kZXg7CisgICAgVG1wTWFwPFRtcERhdGE+IG1fbWFwOworICAgIEluZGV4TWFwPEJh
c2ljQmxvY2sqLCBQaGFzZUluc2VydGlvblNldD4gbV9pbnNlcnRpb25TZXRzOworICAgIFZlY3Rv
cjxDbG9iYmVyPiBtX2Nsb2JiZXJzOyAvLyBBZnRlciB3ZSBhbGxvY2F0ZSB0aGlzLCB3ZSBoYXBw
aWx5IHBvaW50IHBvaW50ZXJzIGludG8gaXQuCisgICAgVmVjdG9yPFRtcD4gbV90bXBzOworICAg
IERlcXVlPFRtcD4gbV9hY3RpdmU7CisgICAgUmVnaXN0ZXJTZXQgbV9hY3RpdmVSZWdzOworICAg
IGJvb2wgbV9kaWRTcGlsbCB7IGZhbHNlIH07Cit9OworCit2b2lkIHJ1bkxpbmVhclNjYW4oQ29k
ZSYgY29kZSkKK3sKKyAgICBpZiAodmVyYm9zZSgpKQorICAgICAgICBkYXRhTG9nKCJBaXIgYmVm
b3JlIGxpbmVhciBzY2FuOlxuIiwgY29kZSk7CisgICAgTGluZWFyU2NhbiBsaW5lYXJTY2FuKGNv
ZGUpOworICAgIGxpbmVhclNjYW4ucnVuKCk7CisgICAgaWYgKHZlcmJvc2UoKSkKKyAgICAgICAg
ZGF0YUxvZygiQWlyIGFmdGVyIGxpbmVhciBzY2FuOlxuIiwgY29kZSk7Cit9CisKK30gLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQorCit2b2lkIGFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuKENv
ZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVJl
Z2lzdGVyc0J5TGluZWFyU2NhbiIpOworICAgIHBhZEludGVyZmVyZW5jZShjb2RlKTsKKyAgICBy
dW5MaW5lYXJTY2FuKGNvZGUpOworICAgIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKGNvZGUpOwor
fQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJl
Z2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNj
YW4uY3BwCShyZXZpc2lvbiAyMTUyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNCwxMyArMjQsMTUgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCIKKyNpbmNsdWRlICJBaXJB
bGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmgiCiAKICNpZiBFTkFCTEUoQjNf
SklUKQogCisjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZy5oIgogI2lu
Y2x1ZGUgIkFpckFyZ0lubGluZXMuaCIKICNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVkZSAi
QWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCIKKyNpbmNsdWRlICJBaXJIYW5kbGVDYWxsZWVT
YXZlcy5oIgogI2luY2x1ZGUgIkFpclBoYXNlSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiQWly
SW5zdElubGluZXMuaCIKICNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgpAQCAtODQsNiArODYsNyBA
QCBzdHJ1Y3QgVG1wRGF0YSB7CiAgICAgUmVnIGFzc2lnbmVkOwogICAgIGJvb2wgaXNVbnNwaWxs
YWJsZSB7IGZhbHNlIH07CiAgICAgYm9vbCBkaWRCdWlsZFBvc3NpYmxlUmVncyB7IGZhbHNlIH07
CisgICAgdW5zaWduZWQgc3BpbGxJbmRleCB7IDAgfTsKIH07CiAKIHN0cnVjdCBDbG9iYmVyIHsK
QEAgLTExOCw2ICsxMjEsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBydW4oKQogICAgIHsK
KyAgICAgICAgcGFkSW50ZXJmZXJlbmNlKG1fY29kZSk7CisgICAgICAgIGFsbG9jYXRlRXNjYXBl
ZFN0YWNrU2xvdHMobV9jb2RlKTsKICAgICAgICAgYnVpbGRSZWdpc3RlclNldCgpOwogICAgICAg
ICBidWlsZEluZGljZXMoKTsKICAgICAgICAgYnVpbGRJbnRlcnZhbHMoKTsKQEAgLTEzNiw4ICsx
NDEsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZW1p
dFNwaWxsQ29kZSgpOwogICAgICAgICB9CisgICAgICAgIHNjYW5Gb3JTdGFjaygpOworICAgICAg
ICB1cGRhdGVGcmFtZVNpemVCYXNlZE9uU3RhY2tTbG90cyhtX2NvZGUpOwogICAgICAgICBpbnNl
cnRTcGlsbENvZGUoKTsKICAgICAgICAgYXNzaWduUmVnaXN0ZXJzKCk7CisgICAgICAgIGhhbmRs
ZUNhbGxlZVNhdmVzKG1fY29kZSk7CisgICAgICAgIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKG1f
Y29kZSk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKQEAgLTUyMCw2ICs1MjksNDIgQEAgcHJpdmF0
ZToKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICB2b2lkIHNjYW5Gb3JTdGFjaygpCisgICAg
eworICAgICAgICAvLyBUaGlzIGlzIGxvb3NlbHkgbW9kZWxlZCBhZnRlciBMaW5lYXJTY2FuUmVn
aXN0ZXJBbGxvY2F0aW9uIGluIEZpZy4gMSBpbgorICAgICAgICAvLyBodHRwOi8vZGwuYWNtLm9y
Zy9jaXRhdGlvbi5jZm0/aWQ9MzMwMjUwLgorCisgICAgICAgIG1fYWN0aXZlLmNsZWFyKCk7Cisg
ICAgICAgIG1fdXNlZFNwaWxsU2xvdHMuY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIGZvciAo
VG1wJiB0bXAgOiBtX3RtcHMpIHsKKyAgICAgICAgICAgIFRtcERhdGEmIGVudHJ5ID0gbV9tYXBb
dG1wXTsKKyAgICAgICAgICAgIGlmICghZW50cnkuc3BpbGxlZCkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gZW50cnku
aW50ZXJ2YWwuYmVnaW4oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBpcyBF
eHBpcmVPbGRJbnRlcnZhbHMgaW4gRmlnLiAxLgorICAgICAgICAgICAgd2hpbGUgKCFtX2FjdGl2
ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBUbXAgdG1wID0gbV9hY3RpdmUuZmlyc3Qo
KTsKKyAgICAgICAgICAgICAgICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgYm9vbCBleHBpcmVkID0gZW50cnkuaW50ZXJ2YWwu
ZW5kKCkgPD0gaW5kZXg7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFl
eHBpcmVkKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBtX2FjdGl2ZS5yZW1vdmVGaXJzdCgpOworICAgICAgICAgICAgICAgIG1f
dXNlZFNwaWxsU2xvdHMuY2xlYXIoZW50cnkuc3BpbGxJbmRleCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGVudHJ5LnNwaWxsSW5kZXggPSBtX3VzZWRTcGlsbFNs
b3RzLmZpbmRCaXQoMCwgZmFsc2UpOworICAgICAgICAgICAgZW50cnkuc3BpbGxlZC0+c2V0T2Zm
c2V0RnJvbUZQKC1jb2RlLmZyYW1lU2l6ZSgpIC0gZW50cnkuc3BpbGxJbmRleCAqIDggLSA4KTsK
KyAgICAgICAgICAgIG1fdXNlZFNwaWxsU2xvdHMuc2V0KGVudHJ5LnNwaWxsSW5kZXgpOworICAg
ICAgICAgICAgbV9hY3RpdmUuYXBwZW5kKHRtcCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAg
ICAgdm9pZCBpbnNlcnRTcGlsbENvZGUoKQogICAgIHsKICAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fY29kZSkKQEAgLTU2OSwxMSArNjE0LDE1IEBAIHByaXZhdGU6CiAgICAgVmVj
dG9yPFRtcD4gbV90bXBzOwogICAgIERlcXVlPFRtcD4gbV9hY3RpdmU7CiAgICAgUmVnaXN0ZXJT
ZXQgbV9hY3RpdmVSZWdzOworICAgIEJpdFZlY3RvciBtX3VzZWRTcGlsbFNsb3RzOwogICAgIGJv
b2wgbV9kaWRTcGlsbCB7IGZhbHNlIH07CiB9OwogCi12b2lkIHJ1bkxpbmVhclNjYW4oQ29kZSYg
Y29kZSkKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIGFsbG9jYXRlUmVnaXN0ZXJz
QW5kU3RhY2tCeUxpbmVhclNjYW4oQ29kZSYgY29kZSkKIHsKKyAgICBQaGFzZVNjb3BlIHBoYXNl
U2NvcGUoY29kZSwgImFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4iKTsKICAg
ICBpZiAodmVyYm9zZSgpKQogICAgICAgICBkYXRhTG9nKCJBaXIgYmVmb3JlIGxpbmVhciBzY2Fu
OlxuIiwgY29kZSk7CiAgICAgTGluZWFyU2NhbiBsaW5lYXJTY2FuKGNvZGUpOwpAQCAtNTgyLDE2
ICs2MzEsNiBAQCB2b2lkIHJ1bkxpbmVhclNjYW4oQ29kZSYgY29kZSkKICAgICAgICAgZGF0YUxv
ZygiQWlyIGFmdGVyIGxpbmVhciBzY2FuOlxuIiwgY29kZSk7CiB9CiAKLX0gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQotCi12b2lkIGFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuKENvZGUmIGNv
ZGUpCi17Ci0gICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVJlZ2lzdGVy
c0J5TGluZWFyU2NhbiIpOwotICAgIHBhZEludGVyZmVyZW5jZShjb2RlKTsKLSAgICBydW5MaW5l
YXJTY2FuKGNvZGUpOwotICAgIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKGNvZGUpOwotfQotCiB9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVy
c0FuZFN0YWNrQnlMaW5lYXJTY2FuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmgJKHJl
dmlzaW9uIDIxNTIzOCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oOjIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJDUFUuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhp
cyBpbXBsZW1lbnRzIHRoZSBQb2xldHRvIGFuZCBTYXJrYXIgcmVnaXN0ZXIgYWxsb2NhdG9yIGNh
bGxlZCAibGluZWFyIHNjYW4iOgorLy8gaHR0cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lk
PTMzMDI1MAorLy8KKy8vIFRoaXMgaXMgbm90IEFpcidzIHByaW1hcnkgcmVnaXN0ZXIgYWxsb2Nh
dG9yLiBXZSB1c2UgaXQgb25seSB3aGVuIHJ1bm5pbmcgYXQgb3B0TGV2ZWw8Mi4gVGhhdCdzIG5v
dAorLy8gdGhlIGRlZmF1bHQgbGV2ZWwuIFRoaXMgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzIG9wdGlt
aXplZCBwcmltYXJpbHkgZm9yIHJ1bm5pbmcgcXVpY2tseS4gSXQncyBleHBlY3RlZAorLy8gdGhh
dCBpbXByb3ZlbWVudHMgdG8gdGhpcyByZWdpc3RlciBhbGxvY2F0b3Igc2hvdWxkIGZvY3VzIG9u
IGltcHJvdmluZyBpdHMgZXhlY3V0aW9uIHRpbWUgd2l0aG91dCBtdWNoCisvLyByZWdhcmQgZm9y
IHRoZSBxdWFsaXR5IG9mIGdlbmVyYXRlZCBjb2RlLiBJZiB5b3Ugd2FudCBnb29kIGNvZGUsIHVz
ZSBncmFwaCBjb2xvcmluZy4KKy8vCisvLyBGb3IgQWlyJ3MgcHJpbWFyeSByZWdpc3RlciBhbGxv
Y2F0b3IsIHNlZSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5ofGNwcC4KK3Zv
aWQgYWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4oQ29kZSYpOworCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlM
aW5lYXJTY2FuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmgJKHJldmlzaW9uIDIxNTIz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNB
bmRTdGFja0J5TGluZWFyU2Nhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMyArMzcsMTYgQEAg
Y2xhc3MgQ29kZTsKIC8vIFRoaXMgaW1wbGVtZW50cyB0aGUgUG9sZXR0byBhbmQgU2Fya2FyIHJl
Z2lzdGVyIGFsbG9jYXRvciBjYWxsZWQgImxpbmVhciBzY2FuIjoKIC8vIGh0dHA6Ly9kbC5hY20u
b3JnL2NpdGF0aW9uLmNmbT9pZD0zMzAyNTAKIC8vCi0vLyBUaGlzIGlzIG5vdCBBaXIncyBwcmlt
YXJ5IHJlZ2lzdGVyIGFsbG9jYXRvci4gV2UgdXNlIGl0IG9ubHkgd2hlbiBydW5uaW5nIGF0IG9w
dExldmVsPDIuIFRoYXQncyBub3QKLS8vIHRoZSBkZWZhdWx0IGxldmVsLiBUaGlzIHJlZ2lzdGVy
IGFsbG9jYXRvciBpcyBvcHRpbWl6ZWQgcHJpbWFyaWx5IGZvciBydW5uaW5nIHF1aWNrbHkuIEl0
J3MgZXhwZWN0ZWQKLS8vIHRoYXQgaW1wcm92ZW1lbnRzIHRvIHRoaXMgcmVnaXN0ZXIgYWxsb2Nh
dG9yIHNob3VsZCBmb2N1cyBvbiBpbXByb3ZpbmcgaXRzIGV4ZWN1dGlvbiB0aW1lIHdpdGhvdXQg
bXVjaAotLy8gcmVnYXJkIGZvciB0aGUgcXVhbGl0eSBvZiBnZW5lcmF0ZWQgY29kZS4gSWYgeW91
IHdhbnQgZ29vZCBjb2RlLCB1c2UgZ3JhcGggY29sb3JpbmcuCisvLyBUaGlzIGlzIG5vdCBBaXIn
cyBwcmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRvci4gV2UgdXNlIGl0IG9ubHkgd2hlbiBydW5uaW5n
IGF0IG9wdExldmVsPDIuCisvLyBUaGF0J3Mgbm90IHRoZSBkZWZhdWx0IGxldmVsLiBUaGlzIHJl
Z2lzdGVyIGFsbG9jYXRvciBpcyBvcHRpbWl6ZWQgcHJpbWFyaWx5IGZvciBydW5uaW5nCisvLyBx
dWlja2x5LiBJdCdzIGV4cGVjdGVkIHRoYXQgaW1wcm92ZW1lbnRzIHRvIHRoaXMgcmVnaXN0ZXIg
YWxsb2NhdG9yIHNob3VsZCBmb2N1cyBvbiBpbXByb3ZpbmcKKy8vIGl0cyBleGVjdXRpb24gdGlt
ZSB3aXRob3V0IG11Y2ggcmVnYXJkIGZvciB0aGUgcXVhbGl0eSBvZiBnZW5lcmF0ZWQgY29kZS4g
SWYgeW91IHdhbnQgZ29vZAorLy8gY29kZSwgdXNlIGdyYXBoIGNvbG9yaW5nLgogLy8KIC8vIEZv
ciBBaXIncyBwcmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRvciwgc2VlIEFpckFsbG9jYXRlUmVnaXN0
ZXJzQnlHcmFwaENvbG9yaW5nLmh8Y3BwLgotdm9pZCBhbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFy
U2NhbihDb2RlJik7CisvLworLy8gVGhpcyBhbHNvIGRvZXMgc3RhY2sgYWxsb2NhdGlvbiBhcyBh
biBhZnRlcnRob3VnaHQuIEl0IGRvZXMgbm90IGRvIGFueSBzcGlsbCBjb2FsZXNjaW5nLgordm9p
ZCBhbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuKENvZGUmKTsKIAogfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5l
YXJTY2FuLmNwcAkocmV2aXNpb24gMjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAJKG5vbmV4aXN0ZW50KQpA
QCAtMSw1OTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBaXJBbGxvY2F0ZVJlZ2lzdGVy
c0J5TGluZWFyU2Nhbi5oIgotCi0jaWYgRU5BQkxFKEIzX0pJVCkKLQotI2luY2x1ZGUgIkFpckFy
Z0lubGluZXMuaCIKLSNpbmNsdWRlICJBaXJDb2RlLmgiCi0jaW5jbHVkZSAiQWlyRml4U3BpbGxz
QWZ0ZXJUZXJtaW5hbHMuaCIKLSNpbmNsdWRlICJBaXJQaGFzZUluc2VydGlvblNldC5oIgotI2lu
Y2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCi0jaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKLSNpbmNs
dWRlICJBaXJQYWRJbnRlcmZlcmVuY2UuaCIKLSNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCi0j
aW5jbHVkZSAiQWlyUmVnTGl2ZW5lc3MuaCIKLSNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCi0j
aW5jbHVkZSAiQWlyVG1wTWFwLmgiCi0jaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JhbmdlLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKLQotbmFtZXNwYWNlIHsKLQotTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBORVZFUl9J
TkxJTkUgdm9pZCBjcmFzaCgpCi17Ci0gICAgQ1JBU0goKTsKLX0KLQotI3VuZGVmIFJFTEVBU0Vf
QVNTRVJUCi0jZGVmaW5lIFJFTEVBU0VfQVNTRVJUKGFzc2VydGlvbikgZG8geyBcCi0gICAgaWYg
KCEoYXNzZXJ0aW9uKSkgeyBcCi0gICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoX19G
SUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjYXNzZXJ0aW9uKTsgXAotICAg
ICAgICBjcmFzaCgpOyBcCi0gICAgfSBcCi19IHdoaWxlICgwKQotCi1ib29sIHZlcmJvc2UoKSB7
IHJldHVybiBPcHRpb25zOjphaXJMaW5lYXJTY2FuVmVyYm9zZSgpOyB9Ci0KLS8vIFBoYXNlIGNv
bnN0YW50cyB3ZSB1c2UgZm9yIHRoZSBQaGFzZUluc2VydGlvblNldC4KLWNvbnN0IHVuc2lnbmVk
IGZpcnN0UGhhc2UgPSAwOwotY29uc3QgdW5zaWduZWQgc2Vjb25kUGhhc2UgPSAxOwotCi10eXBl
ZGVmIFJhbmdlPHNpemVfdD4gSW50ZXJ2YWw7Ci0KLXN0cnVjdCBUbXBEYXRhIHsKLSAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLSAgICB7Ci0gICAgICAgIG91dC5wcmludCgi
e2ludGVydmFsID0gIiwgaW50ZXJ2YWwsICIsIHNwaWxsZWQgPSAiLCBwb2ludGVyRHVtcChzcGls
bGVkKSwgIiwgYXNzaWduZWQgPSAiLCBhc3NpZ25lZCwgIiwgaXNVbnNwaWxsYWJsZSA9ICIsIGlz
VW5zcGlsbGFibGUsICIsIHBvc3NpYmxlUmVncyA9ICIsIHBvc3NpYmxlUmVncywgIiwgZGlkQnVp
bGRQb3NzaWJsZVJlZ3MgPSAiLCBkaWRCdWlsZFBvc3NpYmxlUmVncywgIn0iKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCB2YWxpZGF0ZSgpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
KHNwaWxsZWQgJiYgYXNzaWduZWQpKTsKLSAgICB9Ci0gICAgCi0gICAgSW50ZXJ2YWwgaW50ZXJ2
YWw7Ci0gICAgU3RhY2tTbG90KiBzcGlsbGVkIHsgbnVsbHB0ciB9OwotICAgIFJlZ2lzdGVyU2V0
IHBvc3NpYmxlUmVnczsKLSAgICBSZWcgYXNzaWduZWQ7Ci0gICAgYm9vbCBpc1Vuc3BpbGxhYmxl
IHsgZmFsc2UgfTsKLSAgICBib29sIGRpZEJ1aWxkUG9zc2libGVSZWdzIHsgZmFsc2UgfTsKLX07
Ci0KLXN0cnVjdCBDbG9iYmVyIHsKLSAgICBDbG9iYmVyKCkKLSAgICB7Ci0gICAgfQotICAgIAot
ICAgIENsb2JiZXIoc2l6ZV90IGluZGV4LCBSZWdpc3RlclNldCByZWdzKQotICAgICAgICA6IGlu
ZGV4KGluZGV4KQotICAgICAgICAsIHJlZ3MocmVncykKLSAgICB7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotICAgIHsKLSAgICAgICAgb3V0LnBy
aW50KGluZGV4LCAiOiIsIHJlZ3MpOwotICAgIH0KLSAgICAKLSAgICBzaXplX3QgaW5kZXggeyAw
IH07Ci0gICAgUmVnaXN0ZXJTZXQgcmVnczsKLX07Ci0KLWNsYXNzIExpbmVhclNjYW4gewotcHVi
bGljOgotICAgIExpbmVhclNjYW4oQ29kZSYgY29kZSkKLSAgICAgICAgOiBtX2NvZGUoY29kZSkK
LSAgICAgICAgLCBtX3N0YXJ0SW5kZXgoY29kZS5zaXplKCkpCi0gICAgICAgICwgbV9tYXAoY29k
ZSkKLSAgICAgICAgLCBtX2luc2VydGlvblNldHMoY29kZS5zaXplKCkpCi0gICAgewotICAgIH0K
LSAgICAKLSAgICB2b2lkIHJ1bigpCi0gICAgewotICAgICAgICBidWlsZFJlZ2lzdGVyU2V0KCk7
Ci0gICAgICAgIGJ1aWxkSW5kaWNlcygpOwotICAgICAgICBidWlsZEludGVydmFscygpOwotICAg
ICAgICBpZiAoc2hvdWxkU3BpbGxFdmVyeXRoaW5nKCkpIHsKLSAgICAgICAgICAgIHNwaWxsRXZl
cnl0aGluZygpOwotICAgICAgICAgICAgZW1pdFNwaWxsQ29kZSgpOwotICAgICAgICB9Ci0gICAg
ICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIHByZXBhcmVJbnRlcnZhbHMoKTsKLSAgICAgICAg
ICAgIG1fZGlkU3BpbGwgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvckVhY2hCYW5rKAotICAgICAg
ICAgICAgICAgIFsmXSAoQmFuayBiYW5rKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRT
Y2FuKGJhbmspOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKCFtX2RpZFNw
aWxsKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZW1pdFNwaWxsQ29kZSgp
OwotICAgICAgICB9Ci0gICAgICAgIGluc2VydFNwaWxsQ29kZSgpOwotICAgICAgICBhc3NpZ25S
ZWdpc3RlcnMoKTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIHZvaWQgYnVpbGRSZWdpc3Rl
clNldCgpCi0gICAgewotICAgICAgICBmb3JFYWNoQmFuaygKLSAgICAgICAgICAgIFsmXSAoQmFu
ayBiYW5rKSB7Ci0gICAgICAgICAgICAgICAgbV9yZWdpc3RlcnNbYmFua10gPSBtX2NvZGUucmVn
c0luUHJpb3JpdHlPcmRlcihiYW5rKTsKLSAgICAgICAgICAgICAgICBtX3JlZ2lzdGVyU2V0W2Jh
bmtdLnNldEFsbChtX3JlZ2lzdGVyc1tiYW5rXSk7Ci0gICAgICAgICAgICAgICAgbV91bmlmaWVk
UmVnaXN0ZXJTZXQubWVyZ2UobV9yZWdpc3RlclNldFtiYW5rXSk7Ci0gICAgICAgICAgICB9KTsK
LSAgICB9Ci0KLSAgICB2b2lkIGJ1aWxkSW5kaWNlcygpCi0gICAgewotICAgICAgICBzaXplX3Qg
aW5kZXggPSAwOwotICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7Ci0g
ICAgICAgICAgICBtX3N0YXJ0SW5kZXhbYmxvY2tdID0gaW5kZXg7Ci0gICAgICAgICAgICBpbmRl
eCArPSBibG9jay0+c2l6ZSgpICogMjsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBzaXpl
X3QgaW5kZXhPZkhlYWQoQmFzaWNCbG9jayogYmxvY2spCi0gICAgewotICAgICAgICByZXR1cm4g
bV9zdGFydEluZGV4W2Jsb2NrXTsKLSAgICB9Ci0gICAgCi0gICAgc2l6ZV90IGluZGV4T2ZUYWls
KEJhc2ljQmxvY2sqIGJsb2NrKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGluZGV4T2ZIZWFkKGJs
b2NrKSArIGJsb2NrLT5zaXplKCkgKiAyOwotICAgIH0KLSAgICAKLSAgICBJbnRlcnZhbCBpbnRl
cnZhbChzaXplX3QgaW5kZXhPZkVhcmx5LCBBcmc6OlRpbWluZyB0aW1pbmcpCi0gICAgewotICAg
ICAgICBzd2l0Y2ggKHRpbWluZykgewotICAgICAgICBjYXNlIEFyZzo6T25seUVhcmx5OgotICAg
ICAgICAgICAgcmV0dXJuIEludGVydmFsKGluZGV4T2ZFYXJseSk7Ci0gICAgICAgIGNhc2UgQXJn
OjpPbmx5TGF0ZToKLSAgICAgICAgICAgIHJldHVybiBJbnRlcnZhbChpbmRleE9mRWFybHkgKyAx
KTsKLSAgICAgICAgY2FzZSBBcmc6OkVhcmx5QW5kTGF0ZToKLSAgICAgICAgICAgIHJldHVybiBJ
bnRlcnZhbChpbmRleE9mRWFybHksIGluZGV4T2ZFYXJseSArIDIpOwotICAgICAgICB9Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gSW50ZXJ2YWwoKTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBidWlsZEludGVydmFscygpCi0gICAgewotICAgICAgICBVbmlm
aWVkVG1wTGl2ZW5lc3MgbGl2ZW5lc3MobV9jb2RlKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKLSAgICAgICAgICAgIHNpemVfdCBpbmRleE9m
SGVhZCA9IHRoaXMtPmluZGV4T2ZIZWFkKGJsb2NrKTsKLSAgICAgICAgICAgIHNpemVfdCBpbmRl
eE9mVGFpbCA9IHRoaXMtPmluZGV4T2ZUYWlsKGJsb2NrKTsKLSAgICAgICAgICAgIGlmICh2ZXJi
b3NlKCkpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJBdCBibG9jayAiLCBwb2ludGVyRHVt
cChibG9jayksICJcbiIpOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgaW5kZXhPZkhlYWQg
PSAiLCBpbmRleE9mSGVhZCwgIlxuIik7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICBpZG5l
eE9mVGFpbCA9ICIsIGluZGV4T2ZUYWlsLCAiXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGZvciAoVG1wIHRtcCA6IGxpdmVuZXNzLmxpdmVBdEhlYWQoYmxvY2spKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCF0bXAuaXNSZWcoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9tYXBbdG1w
XS5pbnRlcnZhbCB8PSBJbnRlcnZhbChpbmRleE9mSGVhZCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBmb3IgKFRtcCB0bXAgOiBsaXZlbmVzcy5saXZlQXRUYWlsKGJsb2NrKSkgewotICAg
ICAgICAgICAgICAgIGlmICghdG1wLmlzUmVnKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fbWFw
W3RtcF0uaW50ZXJ2YWwgfD0gSW50ZXJ2YWwoaW5kZXhPZlRhaWwpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGlu
c3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7Ci0gICAgICAgICAgICAgICAg
SW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOwotICAgICAgICAgICAgICAgIHNpemVf
dCBpbmRleE9mRWFybHkgPSBpbmRleE9mSGVhZCArIGluc3RJbmRleCAqIDI7Ci0gICAgICAgICAg
ICAgICAgaW5zdC5mb3JFYWNoVG1wKAotICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1w
LCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh0bXAuaXNSZWcoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtX21hcFt0bXBdLmludGVydmFsIHw9IGludGVydmFsKGlu
ZGV4T2ZFYXJseSwgQXJnOjp0aW1pbmcocm9sZSkpOwotICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgUmVnTGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2Nh
bENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0byBy
ZWNvcmQgPSBbJl0gKHVuc2lnbmVkIGluc3RJbmRleCkgewotICAgICAgICAgICAgICAgIFJlZ2lz
dGVyU2V0IHJlZ3MgPSBsb2NhbENhbGMubGl2ZSgpOwotICAgICAgICAgICAgICAgIGlmIChJbnN0
KiBwcmV2ID0gYmxvY2stPmdldChpbnN0SW5kZXggLSAxKSkgewotICAgICAgICAgICAgICAgICAg
ICBSZWdpc3RlclNldCBwcmV2UmVncyA9IHJlZ3M7Ci0gICAgICAgICAgICAgICAgICAgIHByZXYt
PmZvckVhY2g8UmVnPigKLSAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoUmVnJiByZWcsIEFy
Zzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChBcmc6OmlzTGF0ZURlZihyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJldlJlZ3MuYWRkKHJlZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHByZXYtPmtpbmQub3Bjb2RlID09IFBhdGNoKQotICAgICAgICAg
ICAgICAgICAgICAgICAgcHJldlJlZ3MubWVyZ2UocHJldi0+ZXh0cmFDbG9iYmVyZWRSZWdzKCkp
OwotICAgICAgICAgICAgICAgICAgICBwcmV2UmVncy5maWx0ZXIobV91bmlmaWVkUmVnaXN0ZXJT
ZXQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZSZWdzLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fY2xvYmJlcnMuYXBwZW5kKENsb2JiZXIoaW5kZXhPZkhlYWQg
KyBpbnN0SW5kZXggKiAyIC0gMSwgcHJldlJlZ3MpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgaWYgKEluc3QqIG5leHQgPSBibG9jay0+Z2V0KGluc3RJbmRleCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgbmV4dFJlZ3MgPSByZWdzOwotICAgICAgICAg
ICAgICAgICAgICBuZXh0LT5mb3JFYWNoPFJlZz4oCi0gICAgICAgICAgICAgICAgICAgICAgICBb
Jl0gKFJlZyYgcmVnLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXh0UmVncy5hZGQocmVnKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBpZiAobmV4dC0+a2luZC5vcGNvZGUgPT0g
UGF0Y2gpCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXh0UmVncy5tZXJnZShuZXh0LT5leHRy
YUVhcmx5Q2xvYmJlcmVkUmVncygpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0UmVn
cy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2Nsb2JiZXJzLmFwcGVuZChD
bG9iYmVyKGluZGV4T2ZIZWFkICsgaW5zdEluZGV4ICogMiwgbmV4dFJlZ3MpKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgCi0gICAgICAgICAgICByZWNv
cmQoYmxvY2stPnNpemUoKSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9
IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgewotICAgICAgICAgICAgICAgIGxvY2FsQ2Fs
Yy5leGVjdXRlKGluc3RJbmRleCk7Ci0gICAgICAgICAgICAgICAgcmVjb3JkKGluc3RJbmRleCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0ZDo6c29ydCgK
LSAgICAgICAgICAgIG1fY2xvYmJlcnMuYmVnaW4oKSwgbV9jbG9iYmVycy5lbmQoKSwKLSAgICAg
ICAgICAgIFtdIChDbG9iYmVyJiBhLCBDbG9iYmVyJiBiKSAtPiBib29sIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gYS5pbmRleCA8IGIuaW5kZXg7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAg
Ci0gICAgICAgIGlmICh2ZXJib3NlKCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIkludGVydmFs
czpcbiIpOwotICAgICAgICAgICAgbV9jb2RlLmZvckVhY2hUbXAoCi0gICAgICAgICAgICAgICAg
WyZdIChUbXAgdG1wKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCB0bXAs
ICI6ICIsIG1fbWFwW3RtcF0sICJcbiIpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9
Ci0gICAgfQotICAgIAotICAgIGJvb2wgc2hvdWxkU3BpbGxFdmVyeXRoaW5nKCkKLSAgICB7Ci0g
ICAgICAgIGlmICghT3B0aW9uczo6YWlyTGluZWFyU2NhblNwaWxsc0V2ZXJ5dGhpbmcoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIC8vIFlvdSdyZSBtZWFu
dCB0byBoYWNrIHRoaXMgc28gdGhhdCB5b3Ugc2VsZWN0aXZlbHkgc3BpbGwgZXZlcnl0aGluZyBk
ZXBlbmRpbmcgb24gcmVhc29ucy4KLSAgICAgICAgLy8gVGhhdCdzIHN1cGVyIHVzZWZ1bCBmb3Ig
ZGVidWdnaW5nLgotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IHNwaWxsRXZlcnl0aGluZygpCi0gICAgewotICAgICAgICBtX2NvZGUuZm9yRWFjaFRtcCgKLSAg
ICAgICAgICAgIFsmXSAoVG1wIHRtcCkgewotICAgICAgICAgICAgICAgIHNwaWxsKHRtcCk7Ci0g
ICAgICAgICAgICB9KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBwcmVwYXJlSW50ZXJ2YWxzKCkK
LSAgICB7Ci0gICAgICAgIG1fdG1wcy5yZXNpemUoMCk7Ci0gICAgICAgIAotICAgICAgICBtX2Nv
ZGUuZm9yRWFjaFRtcCgKLSAgICAgICAgICAgIFsmXSAoVG1wIHRtcCkgewotICAgICAgICAgICAg
ICAgIFRtcERhdGEmIGRhdGEgPSBtX21hcFt0bXBdOwotICAgICAgICAgICAgICAgIGlmIChkYXRh
LnNwaWxsZWQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBkYXRhLmFzc2lnbmVkID0gUmVnKCk7Ci0gICAgICAgICAgICAgICAg
bV90bXBzLmFwcGVuZCh0bXApOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIAotICAgICAgICBz
dGQ6OnNvcnQoCi0gICAgICAgICAgICBtX3RtcHMuYmVnaW4oKSwgbV90bXBzLmVuZCgpLAotICAg
ICAgICAgICAgWyZdIChUbXAmIGEsIFRtcCYgYikgewotICAgICAgICAgICAgICAgIHJldHVybiBt
X21hcFthXS5pbnRlcnZhbC5iZWdpbigpIDwgbV9tYXBbYl0uaW50ZXJ2YWwuYmVnaW4oKTsKLSAg
ICAgICAgICAgIH0pOwotICAgICAgICAKLSAgICAgICAgaWYgKHZlcmJvc2UoKSkgewotICAgICAg
ICAgICAgZGF0YUxvZygiVG1wczogIiwgbGlzdER1bXAobV90bXBzKSwgIlxuIik7Ci0gICAgICAg
ICAgICBkYXRhTG9nKCJDbG9iYmVyczogIiwgbGlzdER1bXAobV9jbG9iYmVycyksICJcbiIpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIFRtcCBhZGRTcGlsbFRtcFdpdGhJbnRlcnZhbChC
YW5rIGJhbmssIEludGVydmFsIGludGVydmFsKQotICAgIHsKLSAgICAgICAgVG1wRGF0YSBkYXRh
OwotICAgICAgICBkYXRhLmludGVydmFsID0gaW50ZXJ2YWw7Ci0gICAgICAgIGRhdGEuaXNVbnNw
aWxsYWJsZSA9IHRydWU7Ci0gICAgICAgIAotICAgICAgICBUbXAgdG1wID0gbV9jb2RlLm5ld1Rt
cChiYW5rKTsKLSAgICAgICAgbV9tYXAuYXBwZW5kKHRtcCwgZGF0YSk7Ci0gICAgICAgIHJldHVy
biB0bXA7Ci0gICAgfQotICAgIAotICAgIHZvaWQgYXR0ZW1wdFNjYW4oQmFuayBiYW5rKQotICAg
IHsKLSAgICAgICAgLy8gVGhpcyBpcyBtb2RlbGVkIGFmdGVyIExpbmVhclNjYW5SZWdpc3RlckFs
bG9jYXRpb24gaW4gRmlnLiAxIGluCi0gICAgICAgIC8vIGh0dHA6Ly9kbC5hY20ub3JnL2NpdGF0
aW9uLmNmbT9pZD0zMzAyNTAuCi0KLSAgICAgICAgbV9hY3RpdmUuY2xlYXIoKTsKLSAgICAgICAg
bV9hY3RpdmVSZWdzID0gUmVnaXN0ZXJTZXQoKTsKLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBj
bG9iYmVySW5kZXggPSAwOwotICAgICAgICBmb3IgKFRtcCYgdG1wIDogbV90bXBzKSB7Ci0gICAg
ICAgICAgICBpZiAodG1wLmJhbmsoKSAhPSBiYW5rKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07
Ci0gICAgICAgICAgICBzaXplX3QgaW5kZXggPSBlbnRyeS5pbnRlcnZhbC5iZWdpbigpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmVyYm9zZSgpKSB7Ci0gICAgICAgICAgICAgICAg
ZGF0YUxvZygiSW5kZXggIyIsIGluZGV4LCAiOiAiLCB0bXAsICJcbiIpOwotICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgIiwgdG1wLCAiOiAiLCBlbnRyeSwgIlxuIik7Ci0gICAgICAgICAgICAg
ICAgZGF0YUxvZygiICBjbG9iYmVySW5kZXggPSAiLCBjbG9iYmVySW5kZXgsICJcbiIpOwotICAg
ICAgICAgICAgICAgIC8vIFRoaXMgY291bGQgYmUgc28gbXVjaCBmYXN0ZXIuCi0gICAgICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2NvZGVbMF07Ci0gICAgICAgICAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBjYW5kaWRhdGVCbG9jayA6IG1fY29kZSkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAobV9zdGFydEluZGV4W2NhbmRpZGF0ZUJsb2NrXSA+IGluZGV4KQotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrID0gY2FuZGlk
YXRlQmxvY2s7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
c3RJbmRleCA9IChpbmRleCAtIG1fc3RhcnRJbmRleFtibG9ja10gKyAxKSAvIDI7Ci0gICAgICAg
ICAgICAgICAgZGF0YUxvZygiICBBdDogIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLCBpbnN0SW5k
ZXggPSAiLCBpbnN0SW5kZXgsICJcbiIpOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBQ
cmV2OiAiLCBwb2ludGVyRHVtcChibG9jay0+Z2V0KGluc3RJbmRleCAtIDEpKSwgIlxuIik7Ci0g
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIE5leHQ6ICIsIHBvaW50ZXJEdW1wKGJsb2NrLT5n
ZXQoaW5zdEluZGV4KSksICJcbiIpOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgQWN0aXZl
OlxuIik7Ci0gICAgICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbV9hY3RpdmUpCi0gICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCB0bXAsICI6ICIsIG1fbWFwW3RtcF0sICJcbiIp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBUaGlzIGlzIEV4
cGlyZU9sZEludGVydmFscyBpbiBGaWcuIDEuCi0gICAgICAgICAgICB3aGlsZSAoIW1fYWN0aXZl
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIFRtcCB0bXAgPSBtX2FjdGl2ZS5maXJzdCgp
OwotICAgICAgICAgICAgICAgIFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBib29sIGV4cGlyZWQgPSBlbnRyeS5pbnRlcnZhbC5l
bmQoKSA8PSBpbmRleDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWV4
cGlyZWQpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIG1fYWN0aXZlLnJlbW92ZUZpcnN0KCk7Ci0gICAgICAgICAgICAgICAgbV9h
Y3RpdmVSZWdzLnJlbW92ZShlbnRyeS5hc3NpZ25lZCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIC8vIElmIG5lY2Vzc2FyeSwgY29tcHV0ZSB0aGUgc2V0IG9mIHJlZ2lzdGVycyB0aGF0
IHRoaXMgdG1wIGNvdWxkIGV2ZW4gdXNlLiBUaGlzIGlzIG5vdAotICAgICAgICAgICAgLy8gcGFy
dCBvZiBGaWcuIDEsIGJ1dCBpdCdzIGEgdGVjaG5pcXVlIHRoYXQgdGhlIGF1dGhvcnMgY2xhaW0g
dG8gaGF2ZSBpbXBsZW1lbnRlZCBpbiBvbmUgb2YKLSAgICAgICAgICAgIC8vIHRoZWlyIHR3byBp
bXBsZW1lbnRhdGlvbnMuIFRoZXJlIG1heSBiZSBvdGhlciBtb3JlIGVmZmljaWVudCB3YXlzIHRv
IGRvIHRoaXMsIGJ1dCB0aGlzCi0gICAgICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBnZXRzIHNv
bWUgcGVyZiB3aW5zIGZyb20gcGlnZ3ktYmFja2luZyB0aGlzIGNhbGN1bGF0aW9uIGluIHRoZSBz
Y2FuLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgZGlkQnVp
bGQgZmxhZyBzdGlja3MgdGhyb3VnaCBzcGlsbGluZy4gU3BpbGxpbmcgZG9lc24ndCBjaGFuZ2Ug
dGhlCi0gICAgICAgICAgICAvLyBpbnRlcmZlcmVuY2Ugc2l0dWF0aW9uLgotICAgICAgICAgICAg
Ly8KLSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBjb3VsZCBzaG9ydC1jaXJjdWl0IHRoaXMg
aWYgd2UncmUgZGVhbGluZyB3aXRoIGEgc3BpbGxhYmxlIHRtcCwgdGhlcmUgYXJlIG5vCi0gICAg
ICAgICAgICAvLyBmcmVlIHJlZ2lzdGVycywgYW5kIHRoaXMgcmVnaXN0ZXIncyBpbnRlcnZhbCBl
bmRzIGFmdGVyIHRoZSBvbmUgb24gdGhlIHRvcCBvZiB0aGUgYWN0aXZlCi0gICAgICAgICAgICAv
LyBzdGFjay4KLSAgICAgICAgICAgIGlmICghZW50cnkuZGlkQnVpbGRQb3NzaWJsZVJlZ3MpIHsK
LSAgICAgICAgICAgICAgICAvLyBBZHZhbmNlIHRoZSBjbG9iYmVyIGluZGV4IHVudGlsIGl0J3Mg
YXQgYSBjbG9iYmVyIHRoYXQgaXMgcmVsZXZhbnQgdG8gdXMuCi0gICAgICAgICAgICAgICAgd2hp
bGUgKGNsb2JiZXJJbmRleCA8IG1fY2xvYmJlcnMuc2l6ZSgpICYmIG1fY2xvYmJlcnNbY2xvYmJl
ckluZGV4XS5pbmRleCA8IGluZGV4KQotICAgICAgICAgICAgICAgICAgICBjbG9iYmVySW5kZXgr
KzsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBwb3NzaWJs
ZVJlZ3MgPSBtX3JlZ2lzdGVyU2V0W2JhbmtdOwotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSBjbG9iYmVySW5kZXg7IGkgPCBtX2Nsb2JiZXJzLnNpemUoKSAmJiBtX2Nsb2JiZXJzW2ld
LmluZGV4IDwgZW50cnkuaW50ZXJ2YWwuZW5kKCk7ICsraSkKLSAgICAgICAgICAgICAgICAgICAg
cG9zc2libGVSZWdzLmV4Y2x1ZGUobV9jbG9iYmVyc1tpXS5yZWdzKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBlbnRyeS5wb3NzaWJsZVJlZ3MgPSBwb3NzaWJsZVJlZ3M7Ci0g
ICAgICAgICAgICAgICAgZW50cnkuZGlkQnVpbGRQb3NzaWJsZVJlZ3MgPSB0cnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmVyYm9zZSgpKQotICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgUG9zc2libGUgcmVnczogIiwgZW50cnkucG9zc2libGVSZWdz
LCAiXG4iKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRmluZCBhIGZyZWUgcmVnaXN0
ZXIgdGhhdCB3ZSBhcmUgYWxsb3dlZCB0byB1c2UuCi0gICAgICAgICAgICBpZiAobV9hY3RpdmUu
c2l6ZSgpICE9IG1fcmVnaXN0ZXJzW2JhbmtdLnNpemUoKSkgewotICAgICAgICAgICAgICAgIGJv
b2wgZGlkQXNzaWduID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogbV9y
ZWdpc3RlcnNbYmFua10pIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENvdWxkIGRv
IHByaW9yaXR5IGNvbG9yaW5nIGhlcmUuCi0gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAzMDQKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFtX2FjdGl2ZVJlZ3MuY29udGFpbnMocmVnKSAmJiBlbnRyeS5wb3NzaWJsZVJlZ3Mu
Y29udGFpbnMocmVnKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduKHRtcCwgcmVn
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpZEFzc2lnbiA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoZGlkQXNzaWduKQotICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8g
VGhpcyBpcyBTcGlsbEF0SW50ZXJ2YWwgaW4gRmlnLiAxLCBidXQgbW9kaWZpZWQgdG8gaGFuZGxl
IGNsb2JiZXJzLgotICAgICAgICAgICAgVG1wIHNwaWxsVG1wID0gbV9hY3RpdmUudGFrZUxhc3Qo
Ci0gICAgICAgICAgICAgICAgWyZdIChUbXAgc3BpbGxDYW5kaWRhdGUpIC0+IGJvb2wgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnkucG9zc2libGVSZWdzLmNvbnRhaW5zKG1fbWFw
W3NwaWxsQ2FuZGlkYXRlXS5hc3NpZ25lZCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICBpZiAoIXNwaWxsVG1wKSB7Ci0gICAgICAgICAgICAgICAgc3BpbGwodG1wKTsKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFRtcERhdGEm
IHNwaWxsRW50cnkgPSBtX21hcFtzcGlsbFRtcF07Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChzcGlsbEVudHJ5LmFzc2lnbmVkKTsKLSAgICAgICAgICAgIGlmIChzcGlsbEVudHJ5LmlzVW5z
cGlsbGFibGUgfHwKLSAgICAgICAgICAgICAgICAoIWVudHJ5LmlzVW5zcGlsbGFibGUgJiYgc3Bp
bGxFbnRyeS5pbnRlcnZhbC5lbmQoKSA8PSBlbnRyeS5pbnRlcnZhbC5lbmQoKSkpIHsKLSAgICAg
ICAgICAgICAgICBzcGlsbCh0bXApOwotICAgICAgICAgICAgICAgIGFkZFRvQWN0aXZlKHNwaWxs
VG1wKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgYXNzaWduKHRtcCwgc3BpbGxFbnRyeS5hc3NpZ25lZCk7Ci0gICAg
ICAgICAgICBzcGlsbChzcGlsbFRtcCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBhZGRUb0FjdGl2ZShUbXAgdG1wKQotICAgIHsKLSAgICAgICAgaWYgKG1fbWFwW3RtcF0uaXNV
bnNwaWxsYWJsZSkgewotICAgICAgICAgICAgbV9hY3RpdmUucHJlcGVuZCh0bXApOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX2FjdGl2ZS5hcHBl
bmRBbmRCdWJibGUoCi0gICAgICAgICAgICB0bXAsCi0gICAgICAgICAgICBbJl0gKFRtcCBvdGhl
clRtcCkgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgVG1wRGF0YSYgb3RoZXJFbnRyeSA9IG1f
bWFwW290aGVyVG1wXTsKLSAgICAgICAgICAgICAgICBpZiAob3RoZXJFbnRyeS5pc1Vuc3BpbGxh
YmxlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIG1fbWFwW290aGVyVG1wXS5pbnRlcnZhbC5lbmQoKSA+IG1fbWFwW3RtcF0uaW50ZXJ2
YWwuZW5kKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhc3NpZ24o
VG1wIHRtcCwgUmVnIHJlZykKLSAgICB7Ci0gICAgICAgIFRtcERhdGEmIGVudHJ5ID0gbV9tYXBb
dG1wXTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWVudHJ5LnNwaWxsZWQpOwotICAgICAgICBl
bnRyeS5hc3NpZ25lZCA9IHJlZzsKLSAgICAgICAgbV9hY3RpdmVSZWdzLmFkZChyZWcpOwotICAg
ICAgICBhZGRUb0FjdGl2ZSh0bXApOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNwaWxsKFRtcCB0
bXApCi0gICAgewotICAgICAgICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFlbnRyeS5pc1Vuc3BpbGxhYmxlKTsKLSAgICAgICAgZW50cnkuc3Bp
bGxlZCA9IG1fY29kZS5hZGRTdGFja1Nsb3QoOCwgU3RhY2tTbG90S2luZDo6U3BpbGwpOwotICAg
ICAgICBlbnRyeS5hc3NpZ25lZCA9IFJlZygpOwotICAgICAgICBtX2RpZFNwaWxsID0gdHJ1ZTsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBlbWl0U3BpbGxDb2RlKCkKLSAgICB7Ci0gICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKLSAgICAgICAgICAgIHNpemVfdCBpbmRl
eE9mSGVhZCA9IHRoaXMtPmluZGV4T2ZIZWFkKGJsb2NrKTsKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5k
ZXgpIHsKLSAgICAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7
Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXhPZkVhcmx5ID0gaW5kZXhPZkhlYWQgKyBp
bnN0SW5kZXggKiAyOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIEZpcnN0
IHRyeSB0byBzcGlsbCBkaXJlY3RseS4KLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFy
ZyYgYXJnID0gaW5zdC5hcmdzW2ldOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc1Rt
cCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChhcmcuaXNSZWcoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNwaWxsZWQgPSBtX21hcFthcmcudG1wKCld
LnNwaWxsZWQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc3BpbGxlZCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluc3QuYWRt
aXRzU3RhY2soaSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICAgICAgYXJnID0gQXJnOjpzdGFjayhzcGlsbGVkKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gRmFsbCBiYWNrIG9uIHRoZSBo
YXJkIHdheS4KLSAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoCi0gICAgICAgICAgICAg
ICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBCYW5rIGJhbmssIFdpZHRoKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90
KiBzcGlsbGVkID0gbV9tYXBbdG1wXS5zcGlsbGVkOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFzcGlsbGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIE9wY29kZSBtb3ZlID0gYmFuayA9PSBHUCA/IE1vdmUgOiBNb3Zl
RG91YmxlOwotICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gYWRkU3BpbGxUbXBXaXRoSW50
ZXJ2YWwoYmFuaywgaW50ZXJ2YWwoaW5kZXhPZkVhcmx5LCBBcmc6OnRpbWluZyhyb2xlKSkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT0gQXJnOjpTY3JhdGNoKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChBcmc6OmlzQW55VXNlKHJvbGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0c1tibG9ja10uaW5zZXJ0KGluc3RJbmRleCwgc2Vjb25kUGhhc2UsIG1vdmUsIGlu
c3Qub3JpZ2luLCBBcmc6OnN0YWNrKHNwaWxsZWQpLCB0bXApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXRzW2Jsb2NrXS5pbnNlcnQoaW5zdEluZGV4ICsgMSwgZmlyc3RQaGFz
ZSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgQXJnOjpzdGFjayhzcGlsbGVkKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgaW5zZXJ0U3BpbGxDb2RlKCkKLSAgICB7Ci0gICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2NvZGUpCi0gICAgICAgICAgICBtX2luc2VydGlvblNldHNbYmxvY2tdLmV4
ZWN1dGUoYmxvY2spOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGFzc2lnblJlZ2lzdGVycygpCi0g
ICAgewotICAgICAgICBpZiAodmVyYm9zZSgpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCJBYm91
dCB0byBhbGxvY2F0ZSByZWdpc3RlcnMuIFN0YXRlIG9mIGFsbCB0bXBzOlxuIik7Ci0gICAgICAg
ICAgICBtX2NvZGUuZm9yRWFjaFRtcCgKLSAgICAgICAgICAgICAgICBbJl0gKFRtcCB0bXApIHsK
LSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIHRtcCwgIjogIiwgbV9tYXBbdG1w
XSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBkYXRhTG9nKCJJUjpc
biIpOwotICAgICAgICAgICAgZGF0YUxvZyhtX2NvZGUpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7Ci0gICAgICAgICAgICBm
b3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKLSAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSgp
KQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJBdDogIiwgaW5zdCwgIlxuIik7Ci0gICAg
ICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wRmFzdCgKLSAgICAgICAgICAgICAgICAgICAgWyZd
IChUbXAmIHRtcCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgUmVnIHJlZyA9IG1fbWFwW3RtcF0uYXNzaWdu
ZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIkZhaWxlZCB0byBhbGxvY2F0ZSByZWcgZm9yOiAiLCB0bXAs
ICJcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB0bXAgPSBUbXAocmVnKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgQ29kZSYgbV9jb2RlOwotICAgIFZlY3Rv
cjxSZWc+IG1fcmVnaXN0ZXJzW251bUJhbmtzXTsKLSAgICBSZWdpc3RlclNldCBtX3JlZ2lzdGVy
U2V0W251bUJhbmtzXTsKLSAgICBSZWdpc3RlclNldCBtX3VuaWZpZWRSZWdpc3RlclNldDsKLSAg
ICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgc2l6ZV90PiBtX3N0YXJ0SW5kZXg7Ci0gICAgVG1wTWFw
PFRtcERhdGE+IG1fbWFwOwotICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBQaGFzZUluc2VydGlv
blNldD4gbV9pbnNlcnRpb25TZXRzOwotICAgIFZlY3RvcjxDbG9iYmVyPiBtX2Nsb2JiZXJzOyAv
LyBBZnRlciB3ZSBhbGxvY2F0ZSB0aGlzLCB3ZSBoYXBwaWx5IHBvaW50IHBvaW50ZXJzIGludG8g
aXQuCi0gICAgVmVjdG9yPFRtcD4gbV90bXBzOwotICAgIERlcXVlPFRtcD4gbV9hY3RpdmU7Ci0g
ICAgUmVnaXN0ZXJTZXQgbV9hY3RpdmVSZWdzOwotICAgIGJvb2wgbV9kaWRTcGlsbCB7IGZhbHNl
IH07Ci19OwotCi12b2lkIHJ1bkxpbmVhclNjYW4oQ29kZSYgY29kZSkKLXsKLSAgICBpZiAodmVy
Ym9zZSgpKQotICAgICAgICBkYXRhTG9nKCJBaXIgYmVmb3JlIGxpbmVhciBzY2FuOlxuIiwgY29k
ZSk7Ci0gICAgTGluZWFyU2NhbiBsaW5lYXJTY2FuKGNvZGUpOwotICAgIGxpbmVhclNjYW4ucnVu
KCk7Ci0gICAgaWYgKHZlcmJvc2UoKSkKLSAgICAgICAgZGF0YUxvZygiQWlyIGFmdGVyIGxpbmVh
ciBzY2FuOlxuIiwgY29kZSk7Ci19Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi12b2lk
IGFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuKENvZGUmIGNvZGUpCi17Ci0gICAgUGhhc2VT
Y29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2NhbiIpOwot
ICAgIHBhZEludGVyZmVyZW5jZShjb2RlKTsKLSAgICBydW5MaW5lYXJTY2FuKGNvZGUpOwotICAg
IGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKGNvZGUpOwotfQotCi19IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyCi0KLSNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdp
c3RlcnNCeUxpbmVhclNjYW4uaAkocmV2aXNpb24gMjE1MjM4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oCShub25leGlz
dGVudCkKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKEIzX0pJVCkKLQotI2luY2x1
ZGUgIkNQVS5oIgotI2luY2x1ZGUgIk9wdGlvbnMuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewotCi1jbGFzcyBDb2RlOwotCi0vLyBUaGlzIGltcGxl
bWVudHMgdGhlIFBvbGV0dG8gYW5kIFNhcmthciByZWdpc3RlciBhbGxvY2F0b3IgY2FsbGVkICJs
aW5lYXIgc2NhbiI6Ci0vLyBodHRwOi8vZGwuYWNtLm9yZy9jaXRhdGlvbi5jZm0/aWQ9MzMwMjUw
Ci0vLwotLy8gVGhpcyBpcyBub3QgQWlyJ3MgcHJpbWFyeSByZWdpc3RlciBhbGxvY2F0b3IuIFdl
IHVzZSBpdCBvbmx5IHdoZW4gcnVubmluZyBhdCBvcHRMZXZlbDwyLiBUaGF0J3Mgbm90Ci0vLyB0
aGUgZGVmYXVsdCBsZXZlbC4gVGhpcyByZWdpc3RlciBhbGxvY2F0b3IgaXMgb3B0aW1pemVkIHBy
aW1hcmlseSBmb3IgcnVubmluZyBxdWlja2x5LiBJdCdzIGV4cGVjdGVkCi0vLyB0aGF0IGltcHJv
dmVtZW50cyB0byB0aGlzIHJlZ2lzdGVyIGFsbG9jYXRvciBzaG91bGQgZm9jdXMgb24gaW1wcm92
aW5nIGl0cyBleGVjdXRpb24gdGltZSB3aXRob3V0IG11Y2gKLS8vIHJlZ2FyZCBmb3IgdGhlIHF1
YWxpdHkgb2YgZ2VuZXJhdGVkIGNvZGUuIElmIHlvdSB3YW50IGdvb2QgY29kZSwgdXNlIGdyYXBo
IGNvbG9yaW5nLgotLy8KLS8vIEZvciBBaXIncyBwcmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRvciwg
c2VlIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmh8Y3BwLgotdm9pZCBhbGxv
Y2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2NhbihDb2RlJik7Ci0KLX0gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKLQotI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFj
a0J5R3JhcGhDb2xvcmluZy5jcHAJKHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkFpckFyZ0lubGluZXMuaCIK
ICNpbmNsdWRlICJBaXJDb2RlLmgiCi0jaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5j
bHVkZSAiQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5o
IgogI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCiAjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgpA
QCAtMTI5LDE1ICsxMjksMTEgQEAgc3RydWN0IENvYWxlc2NhYmxlTW92ZSB7CiAgICAgZG91Ymxl
IGZyZXF1ZW5jeSB7IFBOYU4gfTsKIH07CiAKLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi12
b2lkIGFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcoQ29kZSYgY29kZSkKK1ZlY3RvcjxTdGFj
a1Nsb3QqPiBhbGxvY2F0ZUVzY2FwZWRTdGFja1Nsb3RzSW1wbChDb2RlJiBjb2RlKQogewotICAg
IFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiYWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmlu
ZyIpOwotCiAgICAgLy8gQWxsb2NhdGUgYWxsIG9mIHRoZSBlc2NhcGVkIHNsb3RzIGluIG9yZGVy
LiBUaGlzIGlzIGtpbmQgb2YgYSBjcmF6eSBhbGdvcml0aG0gdG8gYWxsb3cgZm9yCiAgICAgLy8g
dGhlIHBvc3NpYmlsaXR5IG9mIHN0YWNrIHNsb3RzIGJlaW5nIGFzc2lnbmVkIGZyYW1lIG9mZnNl
dHMgYmVmb3JlIHdlIGV2ZW4gZ2V0IGhlcmUuCi0gICAgQVNTRVJUKCFjb2RlLmZyYW1lU2l6ZSgp
KTsKKyAgICBSRUxFQVNFX0FTU0VSVCghY29kZS5mcmFtZVNpemUoKSk7CiAgICAgVmVjdG9yPFN0
YWNrU2xvdCo+IGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHM7CiAgICAgVmVjdG9yPFN0YWNrU2xv
dCo+IGVzY2FwZWRTdGFja1Nsb3RzV29ya2xpc3Q7CiAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3Qg
OiBjb2RlLnN0YWNrU2xvdHMoKSkgewpAQCAtMTU4LDYgKzE1NCwzNyBAQCB2b2lkIGFsbG9jYXRl
U3RhY2tCeUdyYXBoQ29sb3JpbmcoQ29kZSYgCiAgICAgICAgIGFzc2lnbihzbG90LCBhc3NpZ25l
ZEVzY2FwZWRTdGFja1Nsb3RzKTsKICAgICAgICAgYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90cy5h
cHBlbmQoc2xvdCk7CiAgICAgfQorICAgIHJldHVybiBhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3Rz
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uPgordm9pZCB1cGRhdGVGcmFtZVNp
emVCYXNlZE9uU3RhY2tTbG90c0ltcGwoQ29kZSYgY29kZSwgY29uc3QgQ29sbGVjdGlvbiYgY29s
bGVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBmcmFtZVNpemUgPSAwOworICAgIGZvciAoU3RhY2tT
bG90KiBzbG90IDogY29sbGVjdGlvbikKKyAgICAgICAgZnJhbWVTaXplID0gc3RkOjptYXgoZnJh
bWVTaXplLCAtc2xvdC0+b2Zmc2V0RnJvbUZQKCkpOworICAgIGNvZGUuc2V0RnJhbWVTaXplKFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIGZyYW1lU2l6ZSkp
OworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBhbGxvY2F0ZUVzY2FwZWRT
dGFja1Nsb3RzKENvZGUmIGNvZGUpCit7CisgICAgdXBkYXRlRnJhbWVTaXplQmFzZWRPblN0YWNr
U2xvdHNJbXBsKGNvZGUsIGFsbG9jYXRlRXNjYXBlZFN0YWNrU2xvdHNJbXBsKGNvZGUpKTsKK30K
Kwordm9pZCB1cGRhdGVGcmFtZVNpemVCYXNlZE9uU3RhY2tTbG90cyhDb2RlJiBjb2RlKQorewor
ICAgIHVwZGF0ZUZyYW1lU2l6ZUJhc2VkT25TdGFja1Nsb3RzSW1wbChjb2RlLCBjb2RlLnN0YWNr
U2xvdHMoKSk7Cit9CisKK3ZvaWQgYWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZyhDb2RlJiBj
b2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiYWxsb2NhdGVTdGFja0J5
R3JhcGhDb2xvcmluZyIpOworICAgIAorICAgIGhhbmRsZUNhbGxlZVNhdmVzKGNvZGUpOworICAg
IAorICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3RzID0gYWxs
b2NhdGVFc2NhcGVkU3RhY2tTbG90c0ltcGwoY29kZSk7CiAKICAgICAvLyBOb3cgd2UgaGFuZGxl
IHRoZSBzcGlsbCBzbG90cy4KICAgICBTdGFja1Nsb3RMaXZlbmVzcyBsaXZlbmVzcyhjb2RlKTsK
QEAgLTM3Nyw4OCArNDA0LDExIEBAIHZvaWQgYWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZyhD
b2RlJiAKICAgICAgICAgYXNzaWduKHNsb3QsIG90aGVyU2xvdHMpOwogICAgIH0KIAotICAgIC8v
IEZpZ3VyZSBvdXQgaG93IG11Y2ggc3RhY2sgd2UncmUgdXNpbmcgZm9yIHN0YWNrIHNsb3RzLgot
ICAgIHVuc2lnbmVkIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgPSAwOwotICAgIGZvciAoU3RhY2tT
bG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpIHsKLSAgICAgICAgZnJhbWVTaXplRm9yU3Rh
Y2tTbG90cyA9IHN0ZDo6bWF4KAotICAgICAgICAgICAgZnJhbWVTaXplRm9yU3RhY2tTbG90cywK
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPigtc2xvdC0+b2Zmc2V0RnJvbUZQKCkp
KTsKLSAgICB9Ci0KLSAgICBmcmFtZVNpemVGb3JTdGFja1Nsb3RzID0gV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgZnJhbWVTaXplRm9yU3RhY2tTbG90cyk7
Ci0KLSAgICAvLyBOb3cgd2UgbmVlZCB0byBkZWR1Y2UgaG93IG11Y2ggYXJndW1lbnQgYXJlYSB3
ZSBuZWVkLgotICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7Ci0gICAgICAgIGZv
ciAoSW5zdCYgaW5zdCA6ICpibG9jaykgewotICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGlu
c3QuYXJncykgewotICAgICAgICAgICAgICAgIGlmIChhcmcuaXNDYWxsQXJnKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gRm9yIG5vdywgd2UgYXNzdW1lIHRoYXQgd2UgdXNlIDggYnl0ZXMg
b2YgdGhlIGNhbGwgYXJnLiBCdXQgdGhhdCdzIG5vdAotICAgICAgICAgICAgICAgICAgICAvLyBz
dWNoIGFuIGF3ZXNvbWUgYXNzdW1wdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTQKLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGFyZy5vZmZzZXQoKSA+PSAwKTsKLSAgICAgICAgICAgICAgICAg
ICAgY29kZS5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplSW5CeXRlcyhhcmcub2Zmc2V0KCkgKyA4KTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBjb2RlLnNldEZyYW1lU2l6ZShmcmFtZVNpemVGb3JTdGFja1Nsb3RzICsgY29kZS5jYWxsQXJn
QXJlYVNpemVJbkJ5dGVzKCkpOwotCi0gICAgLy8gRmluYWxseSwgdHJhbnNmb3JtIHRoZSBjb2Rl
IHRvIHVzZSBBZGRyJ3MgaW5zdGVhZCBvZiBTdGFja1Nsb3Qncy4gVGhpcyBpcyBhIGxvc3NsZXNz
Ci0gICAgLy8gdHJhbnNmb3JtYXRpb24gc2luY2Ugd2UgY2FuIHNlYXJjaCB0aGUgU3RhY2tTbG90
cyBhcnJheSB0byBmaWd1cmUgb3V0IHdoaWNoIFN0YWNrU2xvdCBhbnkKLSAgICAvLyBvZmZzZXQt
ZnJvbS1GUCByZWZlcnMgdG8uCi0KLSAgICAvLyBGSVhNRTogVGhpcyBtYXkgcHJvZHVjZSBhZGRy
ZXNzZXMgdGhhdCBhcmVuJ3QgdmFsaWQgaWYgd2UgZW5kIHVwIHdpdGggYSBnaW5vcm1vdXMgc3Rh
Y2sgZnJhbWUuCi0gICAgLy8gV2Ugd291bGQgaGF2ZSB0byBzY2F2ZW5nZSBmb3IgdGVtcG9yYXJp
ZXMgaWYgdGhpcyBoYXBwZW5lZC4gRm9ydHVuYXRlbHksIHRoaXMgY2FzZSB3aWxsIGJlCi0gICAg
Ly8gZXh0cmVtZWx5IHJhcmUgc28gd2UgY2FuIGRvIGNyYXp5IHRoaW5ncyB3aGVuIGl0IGFyaXNl
cy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNTMw
Ci0KLSAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOwotICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBjb2RlKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0g
MDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKLSAgICAgICAgICAg
IEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKLSAgICAgICAgICAgIGluc3QuZm9y
RWFjaEFyZygKLSAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwg
QmFuaywgV2lkdGggd2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBzdGFja0FkZHIg
PSBbJl0gKGludDMyX3Qgb2Zmc2V0KSAtPiBBcmcgewotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEFyZzo6c3RhY2tBZGRyKG9mZnNldCwgY29kZS5mcmFtZVNpemUoKSwgd2lkdGgpOwot
ICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
QXJnOjpTdGFjazogewotICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0g
YXJnLnN0YWNrU2xvdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNaRGVm
KHJvbGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC0+a2luZCgpID09IFN0
YWNrU2xvdEtpbmQ6OlNwaWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC0+
Ynl0ZVNpemUoKSA+IGJ5dGVzKHdpZHRoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEN1cnJlbnRseSB3ZSBvbmx5IGhhbmRsZSB0aGlzIHNpbXBsZSBjYXNlIGJlY2F1c2UgaXQn
cyB0aGUgb25seSBvbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IGFyaXNl
czogWkRlZidzIGFyZSBvbmx5IDMyLWJpdCByaWdodCBub3cuIFNvLCB3aGVuIHdlIGhpdCB0aGVz
ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2VydGlvbnMgaXQgbWVhbnMgdGhh
dCB3ZSBuZWVkIHRvIGltcGxlbWVudCB0aG9zZSBvdGhlciBraW5kcyBvZgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHplcm8gZmlsbHMuCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoc2xvdC0+Ynl0ZVNpemUoKSA9PSA4KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh3aWR0aCA9PSBXaWR0aDMyKTsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzVmFsaWRGb3JtKFN0b3JlWmVy
bzMyLCBBcmc6OlN0YWNrKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4ICsg
MSwgU3RvcmVaZXJvMzIsIGluc3Qub3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGFja0FkZHIoYXJnLm9mZnNldCgpICsgNCArIHNsb3QtPm9mZnNldEZyb21GUCgpKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcmcg
PSBzdGFja0FkZHIoYXJnLm9mZnNldCgpICsgc2xvdC0+b2Zmc2V0RnJvbUZQKCkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
cmcgPSBzdGFja0FkZHIoYXJnLm9mZnNldCgpIC0gY29kZS5mcmFtZVNpemUoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgKTsKLSAgICAgICAgfQotICAgICAgICBpbnNlcnRp
b25TZXQuZXhlY3V0ZShibG9jayk7Ci0gICAgfQorICAgIHVwZGF0ZUZyYW1lU2l6ZUJhc2VkT25T
dGFja1Nsb3RzKGNvZGUpOworICAgIGNvZGUuc2V0U3RhY2tJc0FsbG9jYXRlZCh0cnVlKTsKIH0K
IAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgogCiAjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKIAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRl
U3RhY2tCeUdyYXBoQ29sb3JpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcuaAkocmV2aXNpb24gMjE1
MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrQnlH
cmFwaENvbG9yaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE0ICszMywxOCBAQCBjbGFzcyBD
b2RlOwogCiAvLyBUaGlzIGFsbG9jYXRlcyBTdGFja1Nsb3RzIHRvIHBsYWNlcyBvbiB0aGUgc3Rh
Y2suIEl0IGZpcnN0IGFsbG9jYXRlcyB0aGUgcGlubmVkIG9uZXMgaW4gaW5kZXgKIC8vIG9yZGVy
IGFuZCB0aGVuIGl0IGFsbG9jYXRlcyB0aGUgcmVzdCB1c2luZyBmaXJzdCBmaXQuIFRha2VzIHRo
ZSBvcHBvcnR1bml0eSB0byBraWxsIGRlYWQKLS8vIGFzc2lnbm1lbnRzIHRvIHN0YWNrIHNsb3Rz
LCBzaW5jZSBpdCBrbm93cyB3aGljaCBvbmVzIGFyZSBsaXZlLiBBbHNvIGZpeGVzIFpEZWZzIHRv
IGFub255bW91cwotLy8gc3RhY2sgc2xvdHMuIEFsc28gY29hbGVzY2VzIHNwaWxsIHNsb3RzIHdo
ZW5ldmVyIHBvc3NpYmxlLgorLy8gYXNzaWdubWVudHMgdG8gc3RhY2sgc2xvdHMsIHNpbmNlIGl0
IGtub3dzIHdoaWNoIG9uZXMgYXJlIGxpdmUuIEFsc28gY29hbGVzY2VzIHNwaWxsIHNsb3RzCisv
LyB3aGVuZXZlciBwb3NzaWJsZS4KIC8vCiAvLyBUaGlzIGlzIG1lYW50IHRvIGJlIGFuIG9wdGlt
YWwgc3RhY2sgYWxsb2NhdG9yLCBmb2N1c2VkIG9uIGdlbmVyYXRpbmcgZ3JlYXQgY29kZS4gSXQn
cyBub3QKIC8vIHBhcnRpY3VsYXJseSBmYXN0LCB0aG91Z2guCiAKIHZvaWQgYWxsb2NhdGVTdGFj
a0J5R3JhcGhDb2xvcmluZyhDb2RlJik7CiAKKy8vIFRoZXNlIGFyZSB1dGlsaXRpZXMgc2hhcmVk
IGJ5IHRoaXMgcGhhc2UgYW5kIGFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4o
KS4KK3ZvaWQgYWxsb2NhdGVFc2NhcGVkU3RhY2tTbG90cyhDb2RlJik7Cit2b2lkIHVwZGF0ZUZy
YW1lU2l6ZUJhc2VkT25TdGFja1Nsb3RzKENvZGUmKTsKKwogfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiAr
NDEsMTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
ewogCitBcmcgQXJnOjpzdGFja0FkZHIoaW50MzJfdCBvZmZzZXRGcm9tRlAsIHVuc2lnbmVkIGZy
YW1lU2l6ZSwgV2lkdGggd2lkdGgpCit7CisgICAgQXJnIHJlc3VsdCA9IEFyZzo6YWRkcihBaXI6
OlRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIG9mZnNldEZyb21GUCk7CisgICAgaWYg
KCFyZXN1bHQuaXNWYWxpZEZvcm0od2lkdGgpKSB7CisgICAgICAgIHJlc3VsdCA9IEFyZzo6YWRk
cigKKyAgICAgICAgICAgIEFpcjo6VG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3RlciksCisgICAgICAgICAgICBvZmZzZXRGcm9tRlAgKyBmcmFtZVNpemUpOworICAgIH0KKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCiBib29sIEFyZzo6aXNTdGFja01lbW9yeSgpIGNvbnN0CiB7
CiAgICAgc3dpdGNoIChraW5kKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBcmcuaAkocmV2aXNpb24gMjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBcmcuaAkod29ya2luZyBjb3B5KQpAQCAtNTYwLDE3ICs1NjAsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9Ci0KLSAgICBzdGF0aWMgQXJnIHN0YWNrQWRkcihpbnQzMl90IG9mZnNldEZyb21GUCwg
dW5zaWduZWQgZnJhbWVTaXplLCBXaWR0aCB3aWR0aCkKLSAgICB7Ci0gICAgICAgIEFyZyByZXN1
bHQgPSBBcmc6OmFkZHIoQWlyOjpUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLCBvZmZz
ZXRGcm9tRlApOwotICAgICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkRm9ybSh3aWR0aCkpIHsKLSAg
ICAgICAgICAgIHJlc3VsdCA9IEFyZzo6YWRkcigKLSAgICAgICAgICAgICAgICBBaXI6OlRtcChN
YWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpLAotICAgICAgICAgICAgICAgIG9m
ZnNldEZyb21GUCArIGZyYW1lU2l6ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9CisgICAgCisgICAgc3RhdGljIEFyZyBzdGFja0FkZHIoaW50MzJfdCBvZmZzZXRG
cm9tRlAsIHVuc2lnbmVkIGZyYW1lU2l6ZSwgV2lkdGgpOwogCiAgICAgLy8gSWYgeW91IGRvbid0
IHBhc3MgYSBXaWR0aCwgdGhpcyBvcHRpbWlzdGljYWxseSBhc3N1bWVzIHRoYXQgeW91J3JlIHVz
aW5nIHRoZSByaWdodCB3aWR0aC4KICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkU2NhbGUodW5zaWdu
ZWQgc2NhbGUsIHN0ZDo6b3B0aW9uYWw8V2lkdGg+IHdpZHRoID0gc3RkOjpudWxsb3B0KQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCShyZXZpc2lvbiAyMTUy
MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDIsNyArMTAyLDEzIEBAIEJhc2ljQmxvY2sqIENvZGU6OmFkZEJsb2NrKGRv
dWJsZSBmcmVxdWUKIAogU3RhY2tTbG90KiBDb2RlOjphZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0
ZVNpemUsIFN0YWNrU2xvdEtpbmQga2luZCwgQjM6OlN0YWNrU2xvdCogYjNTbG90KQogewotICAg
IHJldHVybiBtX3N0YWNrU2xvdHMuYWRkTmV3KGJ5dGVTaXplLCBraW5kLCBiM1Nsb3QpOworICAg
IFN0YWNrU2xvdCogcmVzdWx0ID0gbV9zdGFja1Nsb3RzLmFkZE5ldyhieXRlU2l6ZSwga2luZCwg
YjNTbG90KTsKKyAgICBpZiAobV9zdGFja0lzQWxsb2NhdGVkKSB7CisgICAgICAgIHVuc2lnbmVk
IGV4dGVudCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihyZXN1bHQtPmFsaWdubWVudCgpLCBm
cmFtZVNpemUoKSArIGJ5dGVTaXplKTsKKyAgICAgICAgcmVzdWx0LT5zZXRPZmZzZXRGcm9tRlAo
LWV4dGVudCk7CisgICAgICAgIHNldEZyYW1lU2l6ZShleHRlbnQpOworICAgIH0KKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiBTdGFja1Nsb3QqIENvZGU6OmFkZFN0YWNrU2xvdChCMzo6U3RhY2tT
bG90KiBiM1Nsb3QpCkBAIC0xMzgsNiArMTQ0LDI4IEBAIGJvb2wgQ29kZTo6aXNFbnRyeXBvaW50
KEJhc2ljQmxvY2sqIGJsb2MKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgQ29kZTo6c2V0
Q2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KFJlZ2lzdGVyQXRPZmZzZXRMaXN0JiYgcmVn
aXN0ZXJBdE9mZnNldExpc3QsIFN0YWNrU2xvdCogc2xvdCkKK3sKKyAgICBtX3VuY29ycmVjdGVk
Q2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0ID0gV1RGTW92ZShyZWdpc3RlckF0T2Zmc2V0
TGlzdCk7CisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiByZWdpc3RlckF0T2Zmc2V0
IDogbV91bmNvcnJlY3RlZENhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCkKKyAgICAgICAg
bV9jYWxsZWVTYXZlUmVnaXN0ZXJzLnNldChyZWdpc3RlckF0T2Zmc2V0LnJlZygpKTsKKyAgICBt
X2NhbGxlZVNhdmVTdGFja1Nsb3QgPSBzbG90OworfQorCitSZWdpc3RlckF0T2Zmc2V0TGlzdCBD
b2RlOjpjYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKSBjb25zdAoreworICAgIFJlZ2lz
dGVyQXRPZmZzZXRMaXN0IHJlc3VsdCA9IG1fdW5jb3JyZWN0ZWRDYWxsZWVTYXZlUmVnaXN0ZXJB
dE9mZnNldExpc3Q7CisgICAgaWYgKFN0YWNrU2xvdCogc2xvdCA9IG1fY2FsbGVlU2F2ZVN0YWNr
U2xvdCkgeworICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gc2xvdC0+Ynl0ZVNpemUoKSArIHNs
b3QtPm9mZnNldEZyb21GUCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gcmVzdWx0LnNpemUo
KTsgaS0tOykgeworICAgICAgICAgICAgcmVzdWx0LmF0KGkpID0gUmVnaXN0ZXJBdE9mZnNldCgK
KyAgICAgICAgICAgICAgICByZXN1bHQuYXQoaSkucmVnKCksCisgICAgICAgICAgICAgICAgcmVz
dWx0LmF0KGkpLm9mZnNldCgpICsgb2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gcmVzdWx0OworfQorCiB2b2lkIENvZGU6OnJlc2V0UmVhY2hhYmlsaXR5KCkKIHsKICAgICBj
bGVhclByZWRlY2Vzc29ycyhtX2Jsb2Nrcyk7CkBAIC0xNzAsMTIgKzE5OCwxMyBAQCB2b2lkIENv
ZGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgZm9yIChTcGVjaWFsKiBz
cGVjaWFsIDogc3BlY2lhbHMoKSkKICAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBE
dW1wKHNwZWNpYWwpLCAiXG4iKTsKICAgICB9Ci0gICAgaWYgKG1fZnJhbWVTaXplKQotICAgICAg
ICBvdXQucHJpbnQoIkZyYW1lIHNpemU6ICIsIG1fZnJhbWVTaXplLCAiXG4iKTsKKyAgICBpZiAo
bV9mcmFtZVNpemUgfHwgbV9zdGFja0lzQWxsb2NhdGVkKQorICAgICAgICBvdXQucHJpbnQoIkZy
YW1lIHNpemU6ICIsIG1fZnJhbWVTaXplLCBtX3N0YWNrSXNBbGxvY2F0ZWQgPyAiIChBbGxvY2F0
ZWQpIiA6ICIiLCAiXG4iKTsKICAgICBpZiAobV9jYWxsQXJnQXJlYVNpemUpCiAgICAgICAgIG91
dC5wcmludCgiQ2FsbCBhcmcgYXJlYSBzaXplOiAiLCBtX2NhbGxBcmdBcmVhU2l6ZSwgIlxuIik7
Ci0gICAgaWYgKG1fY2FsbGVlU2F2ZVJlZ2lzdGVycy5zaXplKCkpCi0gICAgICAgIG91dC5wcmlu
dCgiQ2FsbGVlIHNhdmVzOiAiLCBtX2NhbGxlZVNhdmVSZWdpc3RlcnMsICJcbiIpOworICAgIFJl
Z2lzdGVyQXRPZmZzZXRMaXN0IGNhbGxlZVNhdmVSZWdpc3RlcnMgPSB0aGlzLT5jYWxsZWVTYXZl
UmVnaXN0ZXJzKCk7CisgICAgaWYgKGNhbGxlZVNhdmVSZWdpc3RlcnMuc2l6ZSgpKQorICAgICAg
ICBvdXQucHJpbnQoIkNhbGxlZSBzYXZlczogIiwgY2FsbGVlU2F2ZVJlZ2lzdGVycywgIlxuIik7
CiB9CiAKIHVuc2lnbmVkIENvZGU6OmZpbmRGaXJzdEJsb2NrSW5kZXgodW5zaWduZWQgaW5kZXgp
IGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNp
b24gMjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE4Niw5ICsxODYsMjIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
bV9lbnRyeXBvaW50TGFiZWxzID0gc3RkOjpmb3J3YXJkPFZlY3Rvcj4odmVjdG9yKTsKICAgICB9
CisgICAgCisgICAgdm9pZCBzZXRTdGFja0lzQWxsb2NhdGVkKGJvb2wgdmFsdWUpCisgICAgewor
ICAgICAgICBtX3N0YWNrSXNBbGxvY2F0ZWQgPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBzdGFja0lzQWxsb2NhdGVkKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja0lzQWxsb2NhdGVkOyB9
CisgICAgCisgICAgLy8gVGhpcyBzZXRzIHRoZSBjYWxsZWUgc2F2ZSByZWdpc3RlcnMuCisgICAg
dm9pZCBzZXRDYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoUmVnaXN0ZXJBdE9mZnNldExp
c3QmJiwgU3RhY2tTbG90Kik7CiAKLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCYgY2Fs
bGVlU2F2ZVJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsg
fQotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0JiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1
cm4gbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9CisgICAgLy8gVGhpcyByZXR1cm5zIHRoZSBjb3Jy
ZWN0bHkgb2Zmc2V0IGxpc3Qgb2YgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzLgorICAgIFJlZ2lzdGVy
QXRPZmZzZXRMaXN0IGNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpIGNvbnN0OworICAg
IAorICAgIC8vIFRoaXMganVzdCB0ZWxscyB5b3Ugd2hhdCB0aGUgY2FsbGVlIHNhdmVzIGFyZS4K
KyAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9j
YWxsZWVTYXZlUmVnaXN0ZXJzOyB9CiAKICAgICAvLyBSZWNvbXB1dGVzIHByZWRlY2Vzc29ycyBh
bmQgZGVsZXRlcyB1bnJlYWNoYWJsZSBibG9ja3MuCiAgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0
eSgpOwpAQCAtMzI5LDcgKzM0MiwxMCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbnVtRlBU
bXBzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fZnJhbWVTaXplIHsgMCB9OwogICAgIHVuc2lnbmVk
IG1fY2FsbEFyZ0FyZWFTaXplIHsgMCB9OwotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2Fs
bGVlU2F2ZVJlZ2lzdGVyczsKKyAgICBib29sIG1fc3RhY2tJc0FsbG9jYXRlZCB7IGZhbHNlIH07
CisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgbV91bmNvcnJlY3RlZENhbGxlZVNhdmVSZWdpc3Rl
ckF0T2Zmc2V0TGlzdDsKKyAgICBSZWdpc3RlclNldCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7Cisg
ICAgU3RhY2tTbG90KiBtX2NhbGxlZVNhdmVTdGFja1Nsb3QgeyBudWxscHRyIH07CiAgICAgVmVj
dG9yPEZyZXF1ZW50ZWRCbG9jaz4gbV9lbnRyeXBvaW50czsgLy8gVGhpcyBpcyBlbXB0eSB1bnRp
bCBhZnRlciBsb3dlckVudHJ5U3dpdGNoKCkuCiAgICAgVmVjdG9yPENDYWxsSGVscGVyczo6TGFi
ZWw+IG1fZW50cnlwb2ludExhYmVsczsgLy8gVGhpcyBpcyBlbXB0eSB1bnRpbCBjb2RlIGdlbmVy
YXRpb24uCiAgICAgUmVmUHRyPFdhc21Cb3VuZHNDaGVja0dlbmVyYXRvcj4gbV93YXNtQm91bmRz
Q2hlY2tHZW5lcmF0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckdl
bmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE5ICsyOCwxOSBA
QAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJz
QW5kU3RhY2tCeUxpbmVhclNjYW4uaCIKICNpbmNsdWRlICJBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZy5oIgotI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJT
Y2FuLmgiCiAjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZy5oIgogI2lu
Y2x1ZGUgIkFpckNvZGUuaCIKICNpbmNsdWRlICJBaXJFbGltaW5hdGVEZWFkQ29kZS5oIgogI2lu
Y2x1ZGUgIkFpckZpeE9idmlvdXNTcGlsbHMuaCIKICNpbmNsdWRlICJBaXJGaXhQYXJ0aWFsUmVn
aXN0ZXJTdGFsbHMuaCIKICNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgotI2luY2x1
ZGUgIkFpckhhbmRsZUNhbGxlZVNhdmVzLmgiCiAjaW5jbHVkZSAiQWlyTG9nUmVnaXN0ZXJQcmVz
c3VyZS5oIgogI2luY2x1ZGUgIkFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oIgogI2luY2x1ZGUgIkFp
ckxvd2VyRW50cnlTd2l0Y2guaCIKICNpbmNsdWRlICJBaXJMb3dlck1hY3Jvcy5oIgorI2luY2x1
ZGUgIkFpckxvd2VyU3RhY2tBcmdzLmgiCiAjaW5jbHVkZSAiQWlyT3Bjb2RlVXRpbHMuaCIKICNp
bmNsdWRlICJBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCIKICNpbmNsdWRlICJBaXJSZXBvcnRVc2Vk
UmVnaXN0ZXJzLmgiCkBAIC04NCwzOSArODQsNDYgQEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlv
bihDb2RlJiBjb2RlKQogICAgIAogICAgIGVsaW1pbmF0ZURlYWRDb2RlKGNvZGUpOwogCi0gICAg
Ly8gUmVnaXN0ZXIgYWxsb2NhdGlvbiBmb3IgYWxsIHRoZSBUbXBzIHRoYXQgZG8gbm90IGhhdmUg
YSBjb3JyZXNwb25kaW5nIG1hY2hpbmUgcmVnaXN0ZXIuCi0gICAgLy8gQWZ0ZXIgdGhpcyBwaGFz
ZSwgZXZlcnkgVG1wIGhhcyBhIHJlZy4KLSAgICAvLwotICAgIC8vIEZvciBkZWJ1Z2dpbmcsIHlv
dSBjYW4gdXNlIHNwaWxsRXZlcnl0aGluZygpIHRvIHB1dCBldmVyeXRoaW5nIHRvIHRoZSBzdGFj
ayBiZXR3ZWVuIGVhY2ggSW5zdC4KLSAgICBpZiAoT3B0aW9uczo6YWlyU3BpbGxzRXZlcnl0aGlu
ZygpKQotICAgICAgICBzcGlsbEV2ZXJ5dGhpbmcoY29kZSk7Ci0gICAgZWxzZSBpZiAoY29kZS5v
cHRMZXZlbCgpID49IDIpCi0gICAgICAgIGFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5n
KGNvZGUpOwotICAgIGVsc2UKLSAgICAgICAgYWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4o
Y29kZSk7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nQWlyUmVnaXN0ZXJQcmVzc3VyZSgpKSB7Ci0g
ICAgICAgIGRhdGFMb2coIlJlZ2lzdGVyIHByZXNzdXJlIGFmdGVyIHJlZ2lzdGVyIGFsbG9jYXRp
b246XG4iKTsKLSAgICAgICAgbG9nUmVnaXN0ZXJQcmVzc3VyZShjb2RlKTsKKyAgICBpZiAoIU9w
dGlvbnM6OmFpclNwaWxsc0V2ZXJ5dGhpbmcoKSAmJiBjb2RlLm9wdExldmVsKCkgPD0gMSkgewor
ICAgICAgICAvLyBXaGVuIHdlJ3JlIGNvbXBpbGluZyBxdWlja2x5LCB3ZSBkbyByZWdpc3RlciBh
bmQgc3RhY2sgYWxsb2NhdGlvbiBpbiBvbmUgbGluZWFyIHNjYW4KKyAgICAgICAgLy8gcGFzcy4K
KyAgICAgICAgYWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbihjb2RlKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIFdlIG1heSBzdGlsbCBuZWVkIHRvIGRvIHBvc3QtYWxsb2NhdGlv
biBsb3dlcmluZy4gRG9pbmcgaXQgYWZ0ZXIgYm90aCByZWdpc3RlciBhbmQKKyAgICAgICAgLy8g
c3RhY2sgYWxsb2NhdGlvbiBpcyBsZXNzIG9wdGltYWwsIGJ1dCBpdCB3b3JrcyBmaW5lLgorICAg
ICAgICBsb3dlckFmdGVyUmVnQWxsb2MoY29kZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
UmVnaXN0ZXIgYWxsb2NhdGlvbiBmb3IgYWxsIHRoZSBUbXBzIHRoYXQgZG8gbm90IGhhdmUgYSBj
b3JyZXNwb25kaW5nIG1hY2hpbmUKKyAgICAgICAgLy8gcmVnaXN0ZXIuIEFmdGVyIHRoaXMgcGhh
c2UsIGV2ZXJ5IFRtcCBoYXMgYSByZWcuCisgICAgICAgIC8vCisgICAgICAgIC8vIEZvciBkZWJ1
Z2dpbmcsIHlvdSBjYW4gdXNlIHNwaWxsRXZlcnl0aGluZygpIHRvIHB1dCBldmVyeXRoaW5nIHRv
IHRoZSBzdGFjayBiZXR3ZWVuCisgICAgICAgIC8vIGVhY2ggSW5zdC4KKyAgICAgICAgaWYgKE9w
dGlvbnM6OmFpclNwaWxsc0V2ZXJ5dGhpbmcoKSkKKyAgICAgICAgICAgIHNwaWxsRXZlcnl0aGlu
Zyhjb2RlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWxsb2NhdGVSZWdpc3RlcnNCeUdy
YXBoQ29sb3JpbmcoY29kZSk7CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9nQWly
UmVnaXN0ZXJQcmVzc3VyZSgpKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJSZWdpc3RlciBwcmVz
c3VyZSBhZnRlciByZWdpc3RlciBhbGxvY2F0aW9uOlxuIik7CisgICAgICAgICAgICBsb2dSZWdp
c3RlclByZXNzdXJlKGNvZGUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoY29k
ZS5vcHRMZXZlbCgpID49IDIpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgcmVwbGFjZXMgdXNlcyBv
ZiBzcGlsbCBzbG90cyB3aXRoIHJlZ2lzdGVycyBvciBjb25zdGFudHMgaWYgcG9zc2libGUuIEl0
CisgICAgICAgICAgICAvLyBkb2VzIHRoaXMgYnkgbWluaW1pemluZyB0aGUgYW1vdW50IHRoYXQg
d2UgcGVydHVyYiB0aGUgYWxyZWFkeS1jaG9zZW4gcmVnaXN0ZXIKKyAgICAgICAgICAgIC8vIGFs
bG9jYXRpb24uIEl0IG1heSBleHRlbmQgdGhlIGxpdmUgcmFuZ2VzIG9mIHJlZ2lzdGVycyB0aG91
Z2guCisgICAgICAgICAgICBmaXhPYnZpb3VzU3BpbGxzKGNvZGUpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBsb3dlckFmdGVyUmVnQWxsb2MoY29kZSk7CisgICAgICAgIAorICAgICAg
ICAvLyBUaGlzIGRvZXMgZmlyc3QtZml0IGFsbG9jYXRpb24gb2Ygc3RhY2sgc2xvdHMgdXNpbmcg
YW4gaW50ZXJmZXJlbmNlIGdyYXBoIHBsdXMgYQorICAgICAgICAvLyBidW5jaCBvZiBvdGhlciBv
cHRpbWl6YXRpb25zLgorICAgICAgICBhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nKGNvZGUp
OwogICAgIH0KICAgICAKLSAgICBpZiAoY29kZS5vcHRMZXZlbCgpID49IDIpIHsKLSAgICAgICAg
Ly8gVGhpcyByZXBsYWNlcyB1c2VzIG9mIHNwaWxsIHNsb3RzIHdpdGggcmVnaXN0ZXJzIG9yIGNv
bnN0YW50cyBpZiBwb3NzaWJsZS4gSXQgZG9lcyB0aGlzIGJ5Ci0gICAgICAgIC8vIG1pbmltaXpp
bmcgdGhlIGFtb3VudCB0aGF0IHdlIHBlcnR1cmIgdGhlIGFscmVhZHktY2hvc2VuIHJlZ2lzdGVy
IGFsbG9jYXRpb24uIEl0IG1heSBleHRlbmQKLSAgICAgICAgLy8gdGhlIGxpdmUgcmFuZ2VzIG9m
IHJlZ2lzdGVycyB0aG91Z2guCi0gICAgICAgIGZpeE9idmlvdXNTcGlsbHMoY29kZSk7Ci0gICAg
fQotCi0gICAgbG93ZXJBZnRlclJlZ0FsbG9jKGNvZGUpOwotCi0gICAgLy8gUHJpb3IgdG8gdGhp
cyBwb2ludCB0aGUgcHJvbG9ndWUgYW5kIGVwaWxvZ3VlIGlzIGltcGxpY2l0LiBUaGlzIG1ha2Vz
IGl0IGV4cGxpY2l0LiBJdCBhbHNvCi0gICAgLy8gZG9lcyB0aGluZ3MgbGlrZSBpZGVudGlmeSB3
aGljaCBjYWxsZWUtc2F2ZXMgd2UncmUgdXNpbmcgYW5kIHNhdmVzIHRoZW0uCi0gICAgaGFuZGxl
Q2FsbGVlU2F2ZXMoY29kZSk7Ci0gICAgCi0gICAgLy8gVGhpcyB0dXJucyBhbGwgU3RhY2sgYW5k
IENhbGxBcmcgQXJncyBpbnRvIEFkZHIgYXJncyB0aGF0IHVzZSB0aGUgZnJhbWUgcG9pbnRlci4g
SXQgZG9lcwotICAgIC8vIHRoaXMgYnkgZmlyc3QtZml0IGFsbG9jYXRpbmcgc3RhY2sgc2xvdHMu
IEl0IHNob3VsZCBiZSBwcmV0dHkgZGFybiBjbG9zZSB0byBvcHRpbWFsLCBzbyB3ZQotICAgIC8v
IHNob3VsZG4ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMgdmVyeSBtdWNoLgotICAgIGFsbG9j
YXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcoY29kZSk7CisgICAgLy8gVGhpcyB0dXJucyBhbGwgU3Rh
Y2sgYW5kIENhbGxBcmcgQXJncyBpbnRvIEFkZHIgYXJncyB0aGF0IHVzZSB0aGUgZnJhbWUgcG9p
bnRlci4KKyAgICBsb3dlclN0YWNrQXJncyhjb2RlKTsKICAgICAKICAgICAvLyBJZiB3ZSBjb2Fs
ZXNjZWQgbW92ZXMgdGhlbiB3ZSBjYW4gdW5icmVhayBjcml0aWNhbCBlZGdlcy4gVGhpcyBpcyB0
aGUgbWFpbiByZWFzb24gZm9yIHRoaXMKICAgICAvLyBwaGFzZS4KQEAgLTIxMiw3ICsyMTksNyBA
QCB2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgCiAgICAgICAgICAgICBp
ZiAoY29kZS5mcmFtZVNpemUoKSkKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKC1jb2RlLmZyYW1lU2l6ZSgpKSwgTWFjcm9Bc3NlbWJsZXI6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChjb25z
dCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpKSB7
CisgICAgICAgICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5j
YWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKSkgewogICAgICAgICAgICAgICAgIGlmIChl
bnRyeS5yZWcoKS5pc0dQUigpKQogICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoZW50
cnkucmVnKCkuZ3ByKCksIGFyZ0ZvcihlbnRyeSkpOwogICAgICAgICAgICAgICAgIGVsc2UKQEAg
LTI0OSw3ICsyNTYsNyBAQCB2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYg
CiAgICAgICAgICAgICAvLyBoYXZlIHRoaXMgb3ZlcnJpZGUuCiAgICAgICAgICAgICBhdXRvIHN0
YXJ0ID0gaml0LmxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpOwogICAgICAgICAgICAgaWYgKGNv
ZGUuZnJhbWVTaXplKCkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRP
ZmZzZXQmIGVudHJ5IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5jYWxsZWVTYXZl
UmVnaXN0ZXJBdE9mZnNldExpc3QoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnku
cmVnKCkuaXNHUFIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKGFyZ0Zv
cihlbnRyeSksIGVudHJ5LnJlZygpLmdwcigpKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVD
YWxsZWVTYXZlcy5jcHAJKHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAs
MTQgKzMwLDExIEBACiAKICNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVkZSAiQWlySW5zdElu
bGluZXMuaCIKLSNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAogdm9pZCBoYW5kbGVDYWxsZWVTYXZlcyhD
b2RlJiBjb2RlKQogewotICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiaGFuZGxlQ2Fs
bGVlU2F2ZXMiKTsKLQogICAgIFJlZ2lzdGVyU2V0IHVzZWRDYWxsZWVTYXZlczsKIAogICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CkBAIC02MSwxNiArNTgsMTUgQEAgdm9pZCBo
YW5kbGVDYWxsZWVTYXZlcyhDb2RlJiBjb2RlKQogICAgIGlmICghdXNlZENhbGxlZVNhdmVzLm51
bWJlck9mU2V0UmVnaXN0ZXJzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvZGUuY2FsbGVl
U2F2ZVJlZ2lzdGVycygpID0gUmVnaXN0ZXJBdE9mZnNldExpc3QodXNlZENhbGxlZVNhdmVzKTsK
KyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCBjYWxsZWVTYXZlUmVnaXN0ZXJzID0gUmVnaXN0ZXJB
dE9mZnNldExpc3QodXNlZENhbGxlZVNhdmVzKTsKIAogICAgIHNpemVfdCBieXRlU2l6ZSA9IDA7
Ci0gICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVlU2F2
ZVJlZ2lzdGVycygpKQorICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkgOiBj
YWxsZWVTYXZlUmVnaXN0ZXJzKQogICAgICAgICBieXRlU2l6ZSA9IHN0ZDo6bWF4KHN0YXRpY19j
YXN0PHNpemVfdD4oLWVudHJ5Lm9mZnNldCgpKSwgYnl0ZVNpemUpOwogCi0gICAgU3RhY2tTbG90
KiBzYXZlc0FyZWEgPSBjb2RlLmFkZFN0YWNrU2xvdChieXRlU2l6ZSwgU3RhY2tTbG90S2luZDo6
TG9ja2VkKTsKLSAgICAvLyBUaGlzIGlzIGEgYml0IHdlaXJkIHNpbmNlIHdlIGNvdWxkIGhhdmUg
YWxyZWFkeSBwaW5uZWQgYSBkaWZmZXJlbnQgc3RhY2sgc2xvdCB0byB0aGlzCi0gICAgLy8gYXJl
YS4gQWxzbywgb3VyIHJ1bnRpbWUgZG9lcyBub3QgcmVxdWlyZSB1cyB0byBwaW4gdGhlIHNhdmVz
IGFyZWEuIE1heWJlIHdlIHNob3VsZG4ndCBwaW4gaXQ/Ci0gICAgc2F2ZXNBcmVhLT5zZXRPZmZz
ZXRGcm9tRlAoLWJ5dGVTaXplKTsKKyAgICBjb2RlLnNldENhbGxlZVNhdmVSZWdpc3RlckF0T2Zm
c2V0TGlzdCgKKyAgICAgICAgV1RGTW92ZShjYWxsZWVTYXZlUmVnaXN0ZXJzKSwKKyAgICAgICAg
Y29kZS5hZGRTdGFja1Nsb3QoYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZCkpOwogfQog
CiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5oCShyZXZpc2lvbiAy
MTUyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNh
dmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsOCArMzEsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlCiAKIGNsYXNzIENvZGU7CiAKLS8vIFRoaXMgcGhhc2UgaWRlbnRp
ZmllcyBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgYW5kIGFkZHMgY29kZSB0byBzYXZlL3Jlc3RvcmUg
dGhlbSBpbiB0aGUKLS8vIHByb2xvZ3VlL2VwaWxvZ3VlIHRvIHRoZSBjb2RlLiBJdCdzIGEgbWFu
ZGF0b3J5IHBoYXNlLgorLy8gVGhpcyB1dGlsaXR5IGlkZW50aWZpZXMgY2FsbGVlLXNhdmUgcmVn
aXN0ZXJzIGFuZCB0ZWxscyBDb2RlLiBJdCdzIGNhbGxlZCBmcm9tIHBoYXNlcyB0aGF0CisvLyBk
byBzdGFjayBhbGxvY2F0aW9uLiBXZSBkb24ndCBkbyBpdCBhdCB0aGUgZW5kIG9mIHJlZ2lzdGVy
IGFsbG9jYXRpb24gYmVjYXVzZSB0aGUgcmVhbCBlbmQKKy8vIG9mIHJlZ2lzdGVyIGFsbG9jYXRp
b24gaXMganVzdCBiZWZvcmUgc3RhY2sgYWxsb2NhdGlvbi4KIAogLy8gRklYTUU6IEl0IHdvdWxk
IGJlIGNvb2wgdG8gbWFrZSB0aGlzIG1vcmUgaW50ZXJhY3RpdmUgd2l0aCB0aGUgQWlyIGNsaWVu
dCBhbmQgYWxzbyBtb3JlCiAvLyBwb3dlcmZ1bC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAJKHJldmlzaW9u
IDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJl
Z0FsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCB2b2lkIGxvd2VyQWZ0
ZXJSZWdBbGxvYyhDb2RlJiBjb2RlKQogICAgICAgICByZXR1cm47CiAKICAgICBIYXNoTWFwPElu
c3QqLCBSZWdpc3RlclNldD4gdXNlZFJlZ2lzdGVyczsKLQorICAgIAogICAgIFJlZ0xpdmVuZXNz
IGxpdmVuZXNzKGNvZGUpOwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CiAg
ICAgICAgIFJlZ0xpdmVuZXNzOjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7
CkBAIC05NiwxMyArOTYsMjkgQEAgdm9pZCBsb3dlckFmdGVyUmVnQWxsb2MoQ29kZSYgY29kZSkK
ICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCgmaW5zdCwgc2V0KTsKICAgICAgICAg
fQogICAgIH0KLQorICAgIAorICAgIHN0ZDo6YXJyYXk8c3RkOjphcnJheTxTdGFja1Nsb3QqLCAy
PiwgbnVtQmFua3M+IHNsb3RzOworICAgIGZvckVhY2hCYW5rKAorICAgICAgICBbJl0gKEJhbmsg
YmFuaykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI7ICsraSkKKyAg
ICAgICAgICAgICAgICBzbG90c1tiYW5rXVtpXSA9IG51bGxwdHI7CisgICAgICAgIH0pOworCisg
ICAgLy8gSWYgd2UgcnVuIGFmdGVyIHN0YWNrIGFsbG9jYXRpb24gdGhlbiB3ZSBjYW5ub3QgdXNl
IHRob3NlIGNhbGxlZSBzYXZlcyB0aGF0IGFyZW4ndCBpbgorICAgIC8vIHRoZSBjYWxsZWUgc2F2
ZSBsaXN0LiBOb3RlIHRoYXQgd2UgYXJlIG9ubHkgcnVuIGFmdGVyIHN0YWNrIGFsbG9jYXRpb24g
aW4gLU8xLCBzbyB0aGlzCisgICAgLy8ga2luZCBvZiBzbG9wIGlzIE9LLgorICAgIFJlZ2lzdGVy
IGJsYWNrbGlzdGVkQ2FsbGVlU2F2ZXM7CisgICAgaWYgKGNvZGUuc3RhY2tJc0FsbG9jYXRlZCgp
KSB7CisgICAgICAgIGJsYWNrbGlzdGVkQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVl
U2F2ZVJlZ2lzdGVycygpOworICAgICAgICBibGFja2xpc3RlZENhbGxlZVNhdmVzLmV4Y2x1ZGUo
Y29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIH0KKyAgICAKICAgICBhdXRvIGdldFNj
cmF0Y2hlcyA9IFsmXSAoUmVnaXN0ZXJTZXQgc2V0LCBCYW5rIGJhbmspIC0+IHN0ZDo6YXJyYXk8
QXJnLCAyPiB7CiAgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAyPiByZXN1bHQ7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCAyOyArK2kpIHsKICAgICAgICAgICAgIGJvb2wgZm91bmQg
PSBmYWxzZTsKICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGNvZGUucmVnc0luUHJpb3JpdHlP
cmRlcihiYW5rKSkgewotICAgICAgICAgICAgICAgIGlmICghc2V0LmdldChyZWcpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFzZXQuZ2V0KHJlZykgJiYgIWJsYWNrbGlzdGVkQ2FsbGVlU2F2ZXMu
Z2V0KHJlZykpIHsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gVG1wKHJlZyk7CiAg
ICAgICAgICAgICAgICAgICAgIHNldC5zZXQocmVnKTsKICAgICAgICAgICAgICAgICAgICAgZm91
bmQgPSB0cnVlOwpAQCAtMTEwLDEwICsxMjYsMTAgQEAgdm9pZCBsb3dlckFmdGVyUmVnQWxsb2Mo
Q29kZSYgY29kZSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gQXJnOjpzdGFjaygK
LSAgICAgICAgICAgICAgICAgICAgY29kZS5hZGRTdGFja1Nsb3QoCi0gICAgICAgICAgICAgICAg
ICAgICAgICBieXRlcyhjb25zZXJ2YXRpdmVXaWR0aChiYW5rKSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICBTdGFja1Nsb3RLaW5kOjpTcGlsbCkpOworICAgICAgICAgICAgICAgIFN0YWNrU2xv
dComIHNsb3QgPSBzbG90c1tiYW5rXVtpXTsKKyAgICAgICAgICAgICAgICBpZiAoIXNsb3QpCisg
ICAgICAgICAgICAgICAgICAgIHNsb3QgPSBjb2RlLmFkZFN0YWNrU2xvdChieXRlcyhjb25zZXJ2
YXRpdmVXaWR0aChiYW5rKSksIFN0YWNrU2xvdEtpbmQ6OlNwaWxsKTsKKyAgICAgICAgICAgICAg
ICByZXN1bHRbaV0gPSBBcmc6OnN0YWNrKHNsb3RzW2JhbmtdW2ldKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJMb3dlclN0YWNrQXJncy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlclN0YWNrQXJncy5jcHAJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlclN0YWNrQXJncy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFp
ckxvd2VyU3RhY2tBcmdzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWly
QXJnSW5saW5lcy5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRp
b25TZXQuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpclBoYXNl
U2NvcGUuaCIKKyNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0
RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKK3ZvaWQgbG93ZXJTdGFja0FyZ3MoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBo
YXNlU2NvcGUoY29kZSwgImxvd2VyU3RhY2tBcmdzIik7CisgICAgCisgICAgLy8gTm93IHdlIG5l
ZWQgdG8gZGVkdWNlIGhvdyBtdWNoIGFyZ3VtZW50IGFyZWEgd2UgbmVlZC4KKyAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxv
Y2spIHsKKyAgICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYXJnLmlzQ2FsbEFyZygpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZv
ciBub3csIHdlIGFzc3VtZSB0aGF0IHdlIHVzZSA4IGJ5dGVzIG9mIHRoZSBjYWxsIGFyZy4gQnV0
IHRoYXQncyBub3QKKyAgICAgICAgICAgICAgICAgICAgLy8gc3VjaCBhbiBhd2Vzb21lIGFzc3Vt
cHRpb24uCisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU0CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChh
cmcub2Zmc2V0KCkgPj0gMCk7CisgICAgICAgICAgICAgICAgICAgIGNvZGUucmVxdWVzdENhbGxB
cmdBcmVhU2l6ZUluQnl0ZXMoYXJnLm9mZnNldCgpICsgOCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgY29kZS5zZXRGcmFtZVNpemUo
Y29kZS5mcmFtZVNpemUoKSArIGNvZGUuY2FsbEFyZ0FyZWFTaXplSW5CeXRlcygpKTsKKworICAg
IC8vIEZpbmFsbHksIHRyYW5zZm9ybSB0aGUgY29kZSB0byB1c2UgQWRkcidzIGluc3RlYWQgb2Yg
U3RhY2tTbG90J3MuIFRoaXMgaXMgYSBsb3NzbGVzcworICAgIC8vIHRyYW5zZm9ybWF0aW9uIHNp
bmNlIHdlIGNhbiBzZWFyY2ggdGhlIFN0YWNrU2xvdHMgYXJyYXkgdG8gZmlndXJlIG91dCB3aGlj
aCBTdGFja1Nsb3QgYW55CisgICAgLy8gb2Zmc2V0LWZyb20tRlAgcmVmZXJzIHRvLgorCisgICAg
Ly8gRklYTUU6IFRoaXMgbWF5IHByb2R1Y2UgYWRkcmVzc2VzIHRoYXQgYXJlbid0IHZhbGlkIGlm
IHdlIGVuZCB1cCB3aXRoIGEgZ2lub3Jtb3VzIHN0YWNrIGZyYW1lLgorICAgIC8vIFdlIHdvdWxk
IGhhdmUgdG8gc2NhdmVuZ2UgZm9yIHRlbXBvcmFyaWVzIGlmIHRoaXMgaGFwcGVuZWQuIEZvcnR1
bmF0ZWx5LCB0aGlzIGNhc2Ugd2lsbCBiZQorICAgIC8vIGV4dHJlbWVseSByYXJlIHNvIHdlIGNh
biBkbyBjcmF6eSB0aGluZ3Mgd2hlbiBpdCBhcmlzZXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjUzMAorCisgICAgSW5zZXJ0aW9uU2V0IGluc2Vy
dGlvblNldChjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXpl
KCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGlu
c3RJbmRleCk7CisgICAgICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICAgICAg
WyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoIHdpZHRoKSB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gc3RhY2tBZGRyID0gWyZdIChpbnQzMl90IG9mZnNldCkgLT4g
QXJnIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFyZyByZXN1bHQgPSBBcmc6OnN0YWNrQWRk
cihvZmZzZXQsIGNvZGUuZnJhbWVTaXplKCksIHdpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
RkFUQUw6IENvdWxkIG5vdCBjcmVhdGUgc3RhY2sgcmVmZXJlbmNlIGZvciBvZmZzZXQgPSAiLCBv
ZmZzZXQsICIgYW5kIHdpZHRoID0gIiwgd2lkdGgsICJcbiIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIkNvZGU6XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKGNvZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkZB
VEFMOiBDb3VsZCBub3QgY3JlYXRlIHN0YWNrIHJlZmVyZW5jZSBmb3Igb2Zmc2V0ID0gIiwgb2Zm
c2V0LCAiIGFuZCB3aWR0aCA9ICIsIHdpZHRoLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3Rh
Y2s6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IGFyZy5zdGFj
a1Nsb3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzWkRlZihyb2xlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsb3QtPmtpbmQoKSA9PSBTdGFja1Nsb3RL
aW5kOjpTcGlsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsb3QtPmJ5dGVTaXpl
KCkgPiBieXRlcyh3aWR0aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDdXJy
ZW50bHkgd2Ugb25seSBoYW5kbGUgdGhpcyBzaW1wbGUgY2FzZSBiZWNhdXNlIGl0J3MgdGhlIG9u
bHkgb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBhcmlzZXM6IFpEZWYn
cyBhcmUgb25seSAzMi1iaXQgcmlnaHQgbm93LiBTbywgd2hlbiB3ZSBoaXQgdGhlc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBhc3NlcnRpb25zIGl0IG1lYW5zIHRoYXQgd2UgbmVl
ZCB0byBpbXBsZW1lbnQgdGhvc2Ugb3RoZXIga2luZHMgb2YKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB6ZXJvIGZpbGxzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHNsb3QtPmJ5dGVTaXplKCkgPT0gOCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQod2lkdGggPT0gV2lkdGgzMik7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1ZhbGlkRm9ybShTdG9yZVplcm8zMiwgQXJn
OjpTdGFjaykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCArIDEsIFN0b3Jl
WmVybzMyLCBpbnN0Lm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
Y2tBZGRyKGFyZy5vZmZzZXQoKSArIDQgKyBzbG90LT5vZmZzZXRGcm9tRlAoKSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gc3RhY2tB
ZGRyKGFyZy5vZmZzZXQoKSArIHNsb3QtPm9mZnNldEZyb21GUCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQXJnOjpDYWxsQXJnOgorICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gc3Rh
Y2tBZGRyKGFyZy5vZmZzZXQoKSAtIGNvZGUuZnJhbWVTaXplKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4
ZWN1dGUoYmxvY2spOworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJMb3dlclN0YWNrQXJncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJTdGFja0FyZ3MuaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsK
KworLy8gVGhpcyB0dXJucyBzdGFjayBhbmQgY2FsbEFyZyByZWZlcmVuY2VzIGludG8gYWN0dWFs
IEZQLXJlbGF0aXZlIG9yIFNQLXJlbGF0aXZlIGFkZHJlc3Nlcy4KKy8vIEFsc28gZml4ZXMgWkRl
ZnMgdG8gYW5vbnltb3VzIHN0YWNrIHNsb3RzLgorCit2b2lkIGxvd2VyU3RhY2tBcmdzKENvZGUm
KTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306858</attachid>
            <date>2017-04-11 14:59:03 -0700</date>
            <delta_ts>2017-04-11 16:53:06 -0700</delta_ts>
            <desc>seems to work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>87781</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE1MjM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2IEBA
CisyMDE3LTA0LTExICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgLU8xIHNob3VsZCBub3QgYWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNzQyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBPbmUgb2YgQjMg
LU8xJ3MgbG9uZ2VzdCBydW5uaW5nIHBoYXNlcyBpcyBhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9y
aW5nLiBPbmUgYXBwcm9hY2ggdG8KKyAgICAgICAgdGhpcyB3b3VsZCBiZSB0byBtYWtlIHRoYXQg
cGhhc2UgY2hlYXBlci4gQnV0IGl0J3Mgd2VpcmQgdGhhdCB0aGlzIHBoYXNlIHJlcnVucworICAg
ICAgICBsaXZlbmVzcyBhZnRlciByZWdpc3RlciBhbGxvY2F0aW9uIGFscmVhZHkgcmFuIGxpdmVu
ZXNzLiBJZiBvbmx5IGl0IGNvdWxkIHJldXNlIHRoZQorICAgICAgICBsaXZlbmVzcyBjb21wdXRl
ZCBieSByZWdpc3RlciBhbGxvY2F0aW9uIHRoZW4gaXQgd291bGQgcnVuIGEgbG90IGZhc3Rlci4g
QXQgLU8yLCB3ZSBkbworICAgICAgICBub3Qgd2FudCB0aGlzLCBzaW5jZSB3ZSBydW4gcGhhc2Vz
IGJldHdlZW4gcmVnaXN0ZXIgYWxsb2NhdGlvbiBhbmQgc3RhY2sgYWxsb2NhdGlvbiwKKyAgICAg
ICAgYW5kIHRob3NlIHBoYXNlcyBhcmUgZnJlZSB0byBjaGFuZ2UgdGhlIGxpdmVuZXNzIG9mIHNw
aWxsIHNsb3RzIChpbiBmYWN0LAorICAgICAgICBmaXhPYnZpb3VzU3BpbGxzIHdpbGwgYm90aCBz
aG9ydGVuIGFuZCBsZW5ndGhlbiBsaXZlIHJhbmdlcyBiZWNhdXNlIG9mIGxvYWQgYW5kIHN0b3Jl
CisgICAgICAgIGVsaW1pbmF0aW9uLCByZXNwZWN0aXZlbHkpLiBCdXQgYXQgLU8xLCB3ZSBkb24n
dCByZWFsbHkgbmVlZCB0byBydW4gYW55IHBoYXNlcyBiZXR3ZWVuCisgICAgICAgIHJlZ2lzdGVy
IGFuZCBzdGFjayBhbGxvY2F0aW9uLgorICAgICAgICAKKyAgICAgICAgVGhpcyBjaGFuZ2VzIEFp
cidzIGJhY2tlbmQgaW4gdGhlIGZvbGxvd2luZyB3YXlzOgorICAgICAgICAKKyAgICAgICAgLSBM
aW5lYXIgc2NhbiBkb2VzIHN0YWNrIGFsbG9jYXRpb24uIFRoaXMgbWVhbnMgdGhhdCB3ZSBkb24n
dCBuZWVkIHRvIHJ1bgorICAgICAgICAgIGFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcgYXQg
YWxsLiBJbiByZWFsaXR5LCB3ZSByZXVzZSBzb21lIG9mIGl0cyBpbm5hcmRzLCBidXQKKyAgICAg
ICAgICB3ZSBkb24ndCBydW4gdGhlIGV4cGVuc2l2ZSBwYXJ0IG9mIGl0IChsaXZlbmVzcy0+aW50
ZXJmZXJlbmNlLT5jb2FsZXNjaW5nLT5jb2xvcmluZykuCisgICAgICAgIAorICAgICAgICAtIFBo
YXNlcyB0aGF0IHByZXZpb3VzbHkgcmFuIGJldHdlZW4gcmVnaXN0ZXIgYW5kIHN0YWNrIGFsbG9j
YXRpb24gYXJlIHRha2VuIGNhcmUgb2YsCisgICAgICAgICAgZWFjaCBpbiBpdHMgb3duIHNwZWNp
YWwgd2F5OgorICAgICAgICAgIAorICAgICAgICAgIC0+IGhhbmRsZUNhbGxlU2F2ZXM6IHRoaXMg
aXMgbm93IGEgdXRpbGl0eSBmdW5jdGlvbiBjYWxsZWQgYnkgYm90aAorICAgICAgICAgICAgIGFs
bG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcgYW5kIGFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tC
eUxpbmVhclNjYW4uCisgICAgICAgICAgCisgICAgICAgICAgLT4gZml4T2J2aW91c1NwaWxsczog
d2UgZGlkbid0IHJ1biB0aGlzIGF0IC1PMSwgc28gbm90aGluZyBuZWVkcyB0byBiZSBkb25lLgor
ICAgICAgICAgIAorICAgICAgICAgIC0+IGxvd2VyQWZ0ZXJSZWdBbGxvYzogdGhpcyBuZWVkZWQg
dG8gYmUgYWJsZSB0byBydW4gYmVmb3JlIHN0YWNrIGFsbG9jYXRpb24gYmVjYXVzZQorICAgICAg
ICAgICAgIGl0IGNvdWxkIGNoYW5nZSByZWdpc3RlciB1c2FnZSAodmlzIGEgdmlzIGNhbGxlZSBz
YXZlcykgYW5kIGl0IGNvdWxkIGludHJvZHVjZQorICAgICAgICAgICAgIHNwaWxsIHNsb3RzLiBJ
IGNoYW5nZWQgdGhpcyBwaGFzZSB0byBoYXZlIGEgc2Vjb25kYXJ5IG1vZGUgZm9yIHdoZW4gaXQg
cnVucyBhZnRlcgorICAgICAgICAgICAgIHN0YWNrIGFsbG9jYXRpb24uCisgICAgICAgIAorICAg
ICAgICAtIFRoZSBwYXJ0IG9mIGFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcgdGhhdCBsb3dl
cmVkIHN0YWNrIGFkZHJlc3NlcyBhbmQgdG9vayBjYXJlCisgICAgICAgICAgb2YgdGhlIGNhbGwg
YXJnIGFyZWEgaXMgbm93IGEgc2VwYXJhdGUgcGhhc2UgY2FsbGVkIGxvd2VyU3RhY2tBcmdzLiBX
ZSBydW4gdGhpcyBwaGFzZQorICAgICAgICAgIHJlZ2FyZGxlc3Mgb2Ygb3B0aW1pemF0aW9uIGxl
dmVsLiBJdCdzIGEgY2hlYXAgYW5kIGdlbmVyYWwgbG93ZXJpbmcuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGlzIGEgWFglIChPT1BTISkgc3BlZWQtdXAgb24gd2FzbSAtTzEgY29tcGlsZSB0aW1l
cy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYjMvQjNQcm9jZWR1cmUuY3Bw
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpjYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNl
dExpc3QpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpjYWxsZWVTYXZlUmVnaXN0ZXJz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5oOgorICAgICAgICAqIGIzL0Iz
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtczo6dW5hdmFpbGFibGVSZWdpc3RlcnMpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmNwcDogQ29waWVkIGZy
b20gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGlu
ZWFyU2Nhbi5jcHAuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmFsbG9jYXRlUmVnaXN0ZXJzQW5k
U3RhY2tCeUxpbmVhclNjYW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjphbGxvY2F0ZVJlZ2lz
dGVyc0J5TGluZWFyU2Nhbik6IERlbGV0ZWQuCisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRl
UmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uaDogQ29waWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oLgorICAg
ICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmg6
IFJlbW92ZWQuCisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3Jp
bmcuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjphbGxvY2F0ZUVzY2FwZWRTdGFja1Nsb3Rz
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dXBkYXRlRnJhbWVTaXplQmFzZWRPblN0YWNrU2xv
dHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjphbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5n
KToKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZy5oOgor
ICAgICAgICAqIGIzL2Fpci9BaXJBcmcuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OnN0YWNrQWRkcik6CisgICAgICAgICogYjMvYWlyL0FpckFyZy5oOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OnN0YWNrQWRkcik6IERlbGV0ZWQuCisgICAgICAgICogYjMvYWlyL0FpckNv
ZGUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjphZGRTdGFja1Nsb3QpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpzZXRDYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExp
c3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpjYWxsZWVTYXZlUmVnaXN0ZXJBdE9m
ZnNldExpc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpkdW1wKToKKyAgICAgICAg
KiBiMy9haXIvQWlyQ29kZS5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpzZXRTdGFj
a0lzQWxsb2NhdGVkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6c3RhY2tJc0FsbG9j
YXRlZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmNhbGxlZVNhdmVSZWdpc3RlcnMp
OgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Z2VuZXJh
dGUpOgorICAgICAgICAqIGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHA6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OmhhbmRsZUNhbGxlZVNhdmVzKToKKyAgICAgICAgKiBiMy9haXIvQWly
SGFuZGxlQ2FsbGVlU2F2ZXMuaDoKKyAgICAgICAgKiBiMy9haXIvQWlyTG93ZXJBZnRlclJlZ0Fs
bG9jLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6bG93ZXJBZnRlclJlZ0FsbG9jKToKKyAg
ICAgICAgKiBiMy9haXIvQWlyTG93ZXJTdGFja0FyZ3MuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6bG93ZXJTdGFja0FyZ3MpOgorICAgICAgICAqIGIzL2Fpci9BaXJMb3dlclN0
YWNrQXJncy5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlND
OjpCMzo6dGVzdFBpblJlZ2lzdGVycyk6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGppdC9SZWdpc3RlckF0T2Zm
c2V0TGlzdC5oOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGUpOgorCiAyMDE3LTA0LTExICBHdWlsbGF1bWUg
RW1vbnQgIDxndWlqZW1vbnRAaWdhbGlhLmNvbT4KIAogICAgICAgICBbanNjXSBBZGQgbWlzc2lu
ZyBNYWNyb0Fzc2VtYmxlck1JUFM6Om9yMzIoKSBpbXBsZW1lbnRhdGlvbgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjE1MjM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC03Myw4ICs3Myw4
IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyUHJpbnRlci5jcHAKICAgICBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3Bw
CiAKKyAgICBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5j
cHAKICAgICBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwCi0g
ICAgYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcAogICAgIGIzL2Fp
ci9BaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nLmNwcAogICAgIGIzL2Fpci9BaXJBcmcu
Y3BwCiAgICAgYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCkBAIC0xMDAsNiArMTAwLDcgQEAgc2V0
KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBiMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9j
LmNwcAogICAgIGIzL2Fpci9BaXJMb3dlckVudHJ5U3dpdGNoLmNwcAogICAgIGIzL2Fpci9BaXJM
b3dlck1hY3Jvcy5jcHAKKyAgICBiMy9haXIvQWlyTG93ZXJTdGFja0FyZ3MuY3BwCiAgICAgYjMv
YWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAKICAgICBiMy9haXIvQWlyUGFkSW50ZXJmZXJl
bmNlLmNwcAogICAgIGIzL2Fpci9BaXJQaGFzZUluc2VydGlvblNldC5jcHAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTUyMzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMTg2LDggKzE4Niw4IEBACiAJCTBGMjVGMUI0MTgxNjM1RjMwMDUyMkYzOSAv
KiBGVExTbG93UGF0aENhbGxLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMjVGMUFEMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxL
ZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjJBQzU2NjFFOEEwQjc3MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjQx
RThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcCAqLzsgfTsK
IAkJMEYyQUM1NjcxRThBMEI3OTAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2
NTFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCAqLzsgfTsK
LQkJMEYyQUM1NkExRThBMEJEMzAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5l
YXJTY2FuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkFDNTY4MUU4QTBCRDEwMDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFy
U2Nhbi5jcHAgKi87IH07Ci0JCTBGMkFDNTZCMUU4QTBCRDUwMDAxRUUzRiAvKiBBaXJBbGxvY2F0
ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQUM1NjkxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVn
aXN0ZXJzQnlMaW5lYXJTY2FuLmggKi87IH07CisJCTBGMkFDNTZBMUU4QTBCRDMwMDAxRUUzRiAv
KiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkFDNTY4MUU4QTBCRDEwMDAx
RUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmNwcCAqLzsg
fTsKKwkJMEYyQUM1NkIxRThBMEJENTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQW5k
U3RhY2tCeUxpbmVhclNjYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkFDNTY5MUU4QTBCRDEwMDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVy
c0FuZFN0YWNrQnlMaW5lYXJTY2FuLmggKi87IH07CiAJCTBGMkFDNTZFMUU4RDdCMDAwMDAxRUUz
RiAvKiBBaXJQaGFzZUluc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2QzFFOEQ3QUZGMDAwMUVFM0YgLyogQWlyUGhhc2VJ
bnNlcnRpb25TZXQuY3BwICovOyB9OwogCQkwRjJBQzU2RjFFOEQ3QjAzMDAwMUVFM0YgLyogQWly
UGhhc2VJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkFDNTZEMUU4RDdBRkYwMDAxRUUzRiAvKiBBaXJQaGFzZUluc2VydGlvblNl
dC5oICovOyB9OwogCQkwRjJBQzU3MTFFOEVFNDU0MDAwMUVFM0YgLyogQWlyRm9ybVRhYmxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU3MDFF
OEVFNDUyMDAwMUVFM0YgLyogQWlyRm9ybVRhYmxlLmggKi87IH07CkBAIC00NTUsNiArNDU1LDgg
QEAKIAkJMEY1QUUyQzQxREY0RjI4MDAwNjZFRkUxIC8qIFZNSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5MEJCM0ExQjdDRjY0RTAwNkIz
RjAzIC8qIFZNSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNUI0QTMzMUM4NEYwRDYwMEYxQjE3RSAvKiBTbG93UGF0aFJldHVyblR5
cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUI0
QTMyMUM4NEYwRDYwMEYxQjE3RSAvKiBTbG93UGF0aFJldHVyblR5cGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjVDRjk4MTFFOTZGMTdGMDBD
MTg2OTIgLyogQWlyVG1wTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjVDRjk4MDFFOTZGMTdEMDBDMTg2OTIgLyogQWlyVG1wTWFwLmggKi87IH07
CisJCTBGNUNGOTg0MUU5RDUzNzcwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1Q0Y5ODMxRTlENTM3
NTAwQzE4NjkyIC8qIEFpckxvd2VyU3RhY2tBcmdzLmggKi87IH07CisJCTBGNUNGOTg1MUU5RDUz
N0EwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVDRjk4MjFFOUQ1Mzc1MDBDMTg2OTIgLyogQWly
TG93ZXJTdGFja0FyZ3MuY3BwICovOyB9OwogCQkwRjVEMDg1RDFCOENGOTlEMDAxMTQzQjQgLyog
REZHTm9kZU9yaWdpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjVEMDg1QzFCOENGOTlEMDAxMTQzQjQgLyogREZHTm9kZU9yaWdpbi5jcHAgKi87
IH07CiAJCTBGNUVGOTFFMTY4NzhGN0EwMDNFNUMyNSAvKiBKSVRUaHVua3MuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RUY5MUIxNjg3OEY3ODAw
M0U1QzI1IC8qIEpJVFRodW5rcy5jcHAgKi87IH07CiAJCTBGNUVGOTFGMTY4NzhGN0QwMDNFNUMy
NSAvKiBKSVRUaHVua3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNUVGOTFDMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjczMSw4ICsyNzMzLDgg
QEAKIAkJMEYyNUYxQUQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTbG93UGF0aENhbGxLZXkuaDsgcGF0
aCA9IGZ0bC9GVExTbG93UGF0aENhbGxLZXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyQUM1NjQxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFs
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkFDNTY1MUU4QTBCNzYwMDAx
RUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oOyBwYXRoID0gYjMvYWly
L0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGMkFDNTY4MUU4QTBCRDEwMDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGlu
ZWFyU2Nhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHA7IHBhdGggPSBiMy9haXIvQWlyQWxsb2NhdGVS
ZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNj
YW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3Rl
cnNCeUxpbmVhclNjYW4uaDsgcGF0aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGlu
ZWFyU2Nhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2ODFFOEEwQkQx
MDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBbGxvY2F0ZVJlZ2lzdGVy
c0FuZFN0YWNrQnlMaW5lYXJTY2FuLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lz
dGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyQUM1NjkxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3Rh
Y2tCeUxpbmVhclNjYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQWxs
b2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5oOyBwYXRoID0gYjMvYWlyL0FpckFs
bG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYyQUM1NkMxRThEN0FGRjAwMDFFRTNGIC8qIEFpclBoYXNlSW5zZXJ0aW9u
U2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclBoYXNlSW5z
ZXJ0aW9uU2V0LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJQaGFzZUluc2VydGlvblNldC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkFDNTZEMUU4RDdBRkYwMDAxRUUzRiAvKiBB
aXJQaGFzZUluc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBB
aXJQaGFzZUluc2VydGlvblNldC5oOyBwYXRoID0gYjMvYWlyL0FpclBoYXNlSW5zZXJ0aW9uU2V0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkFDNTcwMUU4RUU0NTIwMDAxRUUz
RiAvKiBBaXJGb3JtVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWly
Rm9ybVRhYmxlLmg7IHBhdGggPSBiMy9haXIvQWlyRm9ybVRhYmxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yOTk1LDYgKzI5OTcsOCBAQAogCQkwRjVBNjI4MjE4OEM5OEQ0MDA3
MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBGVExWYWx1ZVJhbmdlLmg7IHBhdGggPSBmdGwvRlRMVmFsdWVSYW5nZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjVCNEEzMjFDODRGMEQ2MDBGMUIxN0UgLyogU2xvd1BhdGhS
ZXR1cm5UeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNsb3dQYXRoUmV0
dXJuVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVDRjk4MDFFOTZGMTdE
MDBDMTg2OTIgLyogQWlyVG1wTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEFpclRtcE1hcC5oOyBwYXRoID0gYjMvYWlyL0FpclRtcE1hcC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjVDRjk4MjFFOUQ1Mzc1MDBDMTg2OTIgLyogQWlyTG93ZXJTdGFja0Fy
Z3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyTG93ZXJTdGFj
a0FyZ3MuY3BwOyBwYXRoID0gYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1Q0Y5ODMxRTlENTM3NTAwQzE4NjkyIC8qIEFpckxvd2Vy
U3RhY2tBcmdzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyU3Rh
Y2tBcmdzLmg7IHBhdGggPSBiMy9haXIvQWlyTG93ZXJTdGFja0FyZ3MuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RDA4NUMxQjhDRjk5RDAwMTE0M0I0IC8qIERGR05vZGVPcmln
aW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTm9kZU9yaWdp
bi5jcHA7IHBhdGggPSBkZmcvREZHTm9kZU9yaWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNUVGOTFCMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUVGh1bmtzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RUY5MUMxNjg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5r
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRUaHVua3MuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1NzcsMTAgKzU1ODEsMTAgQEAKIAkJMEZFQzg0QjMx
QkRBQ0Q4ODAwODBGRjc0IC8qIGFpciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVn
aXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uY3BwICovLAorCQkJCTBGMkFDNTY5MUU4QTBCRDEw
MDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmggKi8s
CiAJCQkJNzk2NUMyMTQxRTVENzk5NjAwQjc1OTFEIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlH
cmFwaENvbG9yaW5nLmNwcCAqLywKIAkJCQk3OTY1QzIxNTFFNUQ3OTk2MDBCNzU5MUQgLyogQWly
QWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuaCAqLywKLQkJCQkwRjJBQzU2ODFFOEEw
QkQxMDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwICovLAot
CQkJCTBGMkFDNTY5MUU4QTBCRDEwMDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGlu
ZWFyU2Nhbi5oICovLAogCQkJCTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0
ZVN0YWNrQnlHcmFwaENvbG9yaW5nLmNwcCAqLywKIAkJCQkwRkVDODU0OTFCREFDREM3MDA4MEZG
NzQgLyogQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZy5oICovLAogCQkJCTBGRUM4NTRB
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuY3BwICovLApAQCAtNTYzOSw2ICs1NjQzLDggQEAK
IAkJCQkwRkRGNzA4NDFEM0YyQzFGMDA5Mjc0NDkgLyogQWlyTG93ZXJFbnRyeVN3aXRjaC5oICov
LAogCQkJCTBGNjE4MzI3MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5jcHAgKi8s
CiAJCQkJMEY2MTgzMjgxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggKi8sCisJ
CQkJMEY1Q0Y5ODIxRTlENTM3NTAwQzE4NjkyIC8qIEFpckxvd2VyU3RhY2tBcmdzLmNwcCAqLywK
KwkJCQkwRjVDRjk4MzFFOUQ1Mzc1MDBDMTg2OTIgLyogQWlyTG93ZXJTdGFja0FyZ3MuaCAqLywK
IAkJCQkyNjQwOTFGQTFCRTJGRDQxMDA2ODREQjIgLyogQWlyT3Bjb2RlLm9wY29kZXMgKi8sCiAJ
CQkJMEZCMzg3OEMxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5jcHAg
Ki8sCiAJCQkJMEZCMzg3OEQxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRl
ci5oICovLApAQCAtODIxNCw3ICs4MjIwLDcgQEAKIAkJCQkwRkVDODUxMDFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdDY0VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTEyMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQz
NDIyQTYzMUMxNThFNkQwMEUyRUI5OCAvKiBCM0NvbnN0RmxvYXRWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMEYyQUM1NkIxRThBMEJENTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJz
QnlMaW5lYXJTY2FuLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJBQzU2QjFFOEEwQkQ1MDAwMUVF
M0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFQzg1QjMxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3Ry
YWluZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQzYzQjgxRTYzNDNGNzAwQzEzODM5
IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTg5Nzcs
NiArODk4Myw3IEBACiAJCQkJQTUxMDA3QzExODdDQzNDNjAwQjM4ODc5IC8qIEpTR2xvYmFsT2Jq
ZWN0SW5zcGVjdG9yQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwRTRCNjQxODgw
OURENTAwNjhBNDZEIC8qIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJDNjNDNDFFNjlFRjk0MDBDMTM4MzkgLyogQjNNZW1vcnlWYWx1ZUlubGluZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGNUNGOTg0MUU5RDUzNzcwMEMxODY5MiAvKiBBaXJMb3dl
clN0YWNrQXJncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwM0ZBMkExODhGMTA1OTAwMTEwRjE0
IC8qIEpTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdTZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1MTNFNUMwMTg1QkZBQ0MwMDdFOTVBRCAvKiBKU0luamVjdGVkU2NyaXB0SG9zdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTUxM0U1QzIxODVCRkFDQzAwN0U5NUFEIC8qIEpTSW5qZWN0ZWRTY3Jp
cHRIb3N0UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMjQ2LDcgKzEwMjUzLDcgQEAK
IAkJCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjAxNzdGMURDQURDMzMwMEVBNTk1MCAvKiBERkdGbG93
SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEYyQUM1NkExRThBMEJEMzAwMDFFRTNG
IC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGMkFDNTZBMUU4QTBCRDMwMDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0
YWNrQnlMaW5lYXJTY2FuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYw
MDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcx
N0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNjlDQzg4MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTEwNzYxLDYgKzEwNzY4LDcgQEAKIAkJCQkxNDI4MDg0MjEwN0VDMDkzMDAxM0U3
QjIgLyogUmVnRXhwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1MTIx
NTFDMDgzRDAwNDZENEVGIC8qIFJlZ0V4cE1hdGNoZXNBcnJheS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDI4MDg0MzEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwT2JqZWN0LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGNUNGOTg1MUU5RDUzN0EwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJn
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0NDEwN0VDMDkzMDAxM0U3QjIgLyogUmVn
RXhwUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NDBDN0EwMUI4MkUxQzMwMDBG
NkI3OSAvKiBSZWdpc3RlckF0T2Zmc2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NDBDN0Ex
MUI4MkUxQzMwMDBGNkI3OSAvKiBSZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNp
b24gMjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQ1LDkgKzM0NSw5IEBAIHVuc2lnbmVkIFByb2NlZHVyZTo6ZnJh
bWVTaXplKCkgY29uc3QKICAgICByZXR1cm4gY29kZSgpLmZyYW1lU2l6ZSgpOwogfQogCi1jb25z
dCBSZWdpc3RlckF0T2Zmc2V0TGlzdCYgUHJvY2VkdXJlOjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkg
Y29uc3QKK1JlZ2lzdGVyQXRPZmZzZXRMaXN0IFByb2NlZHVyZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
QXRPZmZzZXRMaXN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29kZSgpLmNhbGxlZVNhdmVSZWdp
c3RlcnMoKTsKKyAgICByZXR1cm4gY29kZSgpLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlz
dCgpOwogfQogCiBWYWx1ZSogUHJvY2VkdXJlOjphZGRWYWx1ZUltcGwoVmFsdWUqIHZhbHVlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDIxNTIz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDMsNyArMjQzLDcgQEAgcHVibGljOgogICAgIGJvb2wgbmVlZHNVc2VkUmVnaXN0
ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc1VzZWRSZWdpc3RlcnM7IH0KIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHVuc2lnbmVkIGZyYW1lU2l6ZSgpIGNvbnN0OwotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0JiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkg
Y29uc3Q7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUmVnaXN0ZXJBdE9mZnNldExpc3QgY2FsbGVl
U2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCkgY29uc3Q7CiAKICAgICBQQ1RvT3JpZ2luTWFwJiBw
Y1RvT3JpZ2luTWFwKCkgeyByZXR1cm4gbV9wY1RvT3JpZ2luTWFwOyB9CiAgICAgUENUb09yaWdp
bk1hcCByZWxlYXNlUENUb09yaWdpbk1hcCgpIHsgcmV0dXJuIFdURk1vdmUobV9wY1RvT3JpZ2lu
TWFwKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwCShyZXZpc2lvbiAyMTUyMzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw4ICs0OCw3IEBAIFJlZ2lzdGVyU2V0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtczo6dW4KICAgICBSZWdpc3RlclNldCByZXN1bHQgPSB1c2VkUmVnaXN0ZXJzKCk7CiAgICAg
CiAgICAgUmVnaXN0ZXJTZXQgdW5zYXZlZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVn
QXRPZmZzZXQgOiBtX2NvbnRleHQuY29kZS0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKQotICAgICAg
ICB1bnNhdmVkQ2FsbGVlU2F2ZXMuY2xlYXIocmVnQXRPZmZzZXQucmVnKCkpOworICAgIHVuc2F2
ZWRDYWxsZWVTYXZlcy5leGNsdWRlKG1fY29udGV4dC5jb2RlLT5jYWxsZWVTYXZlUmVnaXN0ZXJz
KCkpOwogCiAgICAgcmVzdWx0Lm1lcmdlKHVuc2F2ZWRDYWxsZWVTYXZlcyk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAyMTUyMzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxMDIsNyAr
MTQxMDIsNyBAQCB2b2lkIHRlc3RQaW5SZWdpc3RlcnMoKQogICAgICAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVy
QXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcHJvYy5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpCisgICAg
ICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiBwcm9jLmNhbGxl
ZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpKQogICAgICAgICAgICAgdXNlc0NTUnMgfD0gY3Ny
cy5nZXQocmVnQXRPZmZzZXQucmVnKCkpOwogICAgICAgICBDSEVDS19FUSh1c2VzQ1NScywgIXBp
bik7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2Nh
dGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5l
YXJTY2FuLmNwcAkocmV2aXNpb24gMjE1MjM4KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcDoyMTUyMzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tC
eUxpbmVhclNjYW4uY3BwCSh3b3JraW5nIGNvcHkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdp
c3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5jcHAJKHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGlu
ZWFyU2Nhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEzICsyNCwxNSBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFy
U2Nhbi5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNj
YW4uaCIKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJBaXJBbGxvY2F0ZVN0YWNr
QnlHcmFwaENvbG9yaW5nLmgiCiAjaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgogI2luY2x1ZGUg
IkFpckNvZGUuaCIKICNpbmNsdWRlICJBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oIgorI2lu
Y2x1ZGUgIkFpckhhbmRsZUNhbGxlZVNhdmVzLmgiCiAjaW5jbHVkZSAiQWlyUGhhc2VJbnNlcnRp
b25TZXQuaCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxpdmVu
ZXNzLmgiCkBAIC04NCw2ICs4Niw3IEBAIHN0cnVjdCBUbXBEYXRhIHsKICAgICBSZWcgYXNzaWdu
ZWQ7CiAgICAgYm9vbCBpc1Vuc3BpbGxhYmxlIHsgZmFsc2UgfTsKICAgICBib29sIGRpZEJ1aWxk
UG9zc2libGVSZWdzIHsgZmFsc2UgfTsKKyAgICB1bnNpZ25lZCBzcGlsbEluZGV4IHsgMCB9Owog
fTsKIAogc3RydWN0IENsb2JiZXIgewpAQCAtMTE4LDYgKzEyMSw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICB2b2lkIHJ1bigpCiAgICAgeworICAgICAgICBwYWRJbnRlcmZlcmVuY2UobV9jb2RlKTsK
ICAgICAgICAgYnVpbGRSZWdpc3RlclNldCgpOwogICAgICAgICBidWlsZEluZGljZXMoKTsKICAg
ICAgICAgYnVpbGRJbnRlcnZhbHMoKTsKQEAgLTEyNiwxMSArMTMwLDExIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGVtaXRTcGlsbENvZGUoKTsKICAgICAgICAgfQogICAgICAgICBmb3IgKDs7KSB7
Ci0gICAgICAgICAgICBwcmVwYXJlSW50ZXJ2YWxzKCk7CisgICAgICAgICAgICBwcmVwYXJlSW50
ZXJ2YWxzRm9yU2NhbkZvclJlZ2lzdGVycygpOwogICAgICAgICAgICAgbV9kaWRTcGlsbCA9IGZh
bHNlOwogICAgICAgICAgICAgZm9yRWFjaEJhbmsoCiAgICAgICAgICAgICAgICAgWyZdIChCYW5r
IGJhbmspIHsKLSAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdFNjYW4oYmFuayk7CisgICAgICAg
ICAgICAgICAgICAgIGF0dGVtcHRTY2FuRm9yUmVnaXN0ZXJzKGJhbmspOwogICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgaWYgKCFtX2RpZFNwaWxsKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMTM4LDYgKzE0MiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgaW5z
ZXJ0U3BpbGxDb2RlKCk7CiAgICAgICAgIGFzc2lnblJlZ2lzdGVycygpOworICAgICAgICBmaXhT
cGlsbHNBZnRlclRlcm1pbmFscyhtX2NvZGUpOworCisgICAgICAgIGhhbmRsZUNhbGxlZVNhdmVz
KG1fY29kZSk7CisgICAgICAgIGFsbG9jYXRlRXNjYXBlZFN0YWNrU2xvdHMobV9jb2RlKTsKKyAg
ICAgICAgcHJlcGFyZUludGVydmFsc0ZvclNjYW5Gb3JTdGFjaygpOworICAgICAgICBzY2FuRm9y
U3RhY2soKTsKKyAgICAgICAgdXBkYXRlRnJhbWVTaXplQmFzZWRPblN0YWNrU2xvdHMobV9jb2Rl
KTsKKyAgICAgICAgbV9jb2RlLnNldFN0YWNrSXNBbGxvY2F0ZWQodHJ1ZSk7CiAgICAgfQogICAg
IAogcHJpdmF0ZToKQEAgLTI2Niw2ICsyNzgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IFsmXSAoVG1wIHRtcCkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgdG1w
LCAiOiAiLCBtX21hcFt0bXBdLCAiXG4iKTsKICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIGRhdGFMb2coIkNsb2JiZXJzOiAiLCBsaXN0RHVtcChtX2Nsb2JiZXJzKSwgIlxuIik7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0yODgsMTcgKzMwMSwzNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgfSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcHJlcGFyZUludGVydmFscygpCisg
ICAgdm9pZCBwcmVwYXJlSW50ZXJ2YWxzRm9yU2NhbkZvclJlZ2lzdGVycygpCisgICAgeworICAg
ICAgICBwcmVwYXJlSW50ZXJ2YWxzKAorICAgICAgICAgICAgWyZdIChUbXAsIFRtcERhdGEmIGRh
dGEpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIGlmIChkYXRhLnNwaWxsZWQpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBkYXRhLmFzc2lnbmVkID0gUmVnKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBwcmVwYXJlSW50ZXJ2YWxz
Rm9yU2NhbkZvclN0YWNrKCkKKyAgICB7CisgICAgICAgIHByZXBhcmVJbnRlcnZhbHMoCisgICAg
ICAgICAgICBbJl0gKFRtcCwgVG1wRGF0YSYgZGF0YSkgLT4gYm9vbCB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGRhdGEuc3BpbGxlZDsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBTZWxlY3RGdW5jPgorICAgIHZvaWQgcHJlcGFyZUludGVydmFs
cyhjb25zdCBTZWxlY3RGdW5jJiBzZWxlY3RGdW5jKQogICAgIHsKICAgICAgICAgbV90bXBzLnJl
c2l6ZSgwKTsKICAgICAgICAgCiAgICAgICAgIG1fY29kZS5mb3JFYWNoVG1wKAogICAgICAgICAg
ICAgWyZdIChUbXAgdG1wKSB7CiAgICAgICAgICAgICAgICAgVG1wRGF0YSYgZGF0YSA9IG1fbWFw
W3RtcF07Ci0gICAgICAgICAgICAgICAgaWYgKGRhdGEuc3BpbGxlZCkKKyAgICAgICAgICAgICAg
ICBpZiAoIXNlbGVjdEZ1bmModG1wLCBkYXRhKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGRhdGEuYXNzaWduZWQgPSBSZWco
KTsKICAgICAgICAgICAgICAgICBtX3RtcHMuYXBwZW5kKHRtcCk7CiAgICAgICAgICAgICB9KTsK
ICAgICAgICAgCkBAIC0zMDgsMTAgKzM0MSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
cmV0dXJuIG1fbWFwW2FdLmludGVydmFsLmJlZ2luKCkgPCBtX21hcFtiXS5pbnRlcnZhbC5iZWdp
bigpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIAotICAgICAgICBpZiAodmVyYm9zZSgpKSB7
CisgICAgICAgIGlmICh2ZXJib3NlKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJUbXBzOiAiLCBs
aXN0RHVtcChtX3RtcHMpLCAiXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2coIkNsb2JiZXJzOiAi
LCBsaXN0RHVtcChtX2Nsb2JiZXJzKSwgIlxuIik7Ci0gICAgICAgIH0KICAgICB9CiAgICAgCiAg
ICAgVG1wIGFkZFNwaWxsVG1wV2l0aEludGVydmFsKEJhbmsgYmFuaywgSW50ZXJ2YWwgaW50ZXJ2
YWwpCkBAIC0zMjUsNyArMzU2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRtcDsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBhdHRlbXB0U2NhbihCYW5rIGJhbmspCisgICAgdm9pZCBhdHRl
bXB0U2NhbkZvclJlZ2lzdGVycyhCYW5rIGJhbmspCiAgICAgewogICAgICAgICAvLyBUaGlzIGlz
IG1vZGVsZWQgYWZ0ZXIgTGluZWFyU2NhblJlZ2lzdGVyQWxsb2NhdGlvbiBpbiBGaWcuIDEgaW4K
ICAgICAgICAgLy8gaHR0cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTMzMDI1MC4KQEAg
LTUyMCw2ICs1NTEsNDMgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICB2
b2lkIHNjYW5Gb3JTdGFjaygpCisgICAgeworICAgICAgICAvLyBUaGlzIGlzIGxvb3NlbHkgbW9k
ZWxlZCBhZnRlciBMaW5lYXJTY2FuUmVnaXN0ZXJBbGxvY2F0aW9uIGluIEZpZy4gMSBpbgorICAg
ICAgICAvLyBodHRwOi8vZGwuYWNtLm9yZy9jaXRhdGlvbi5jZm0/aWQ9MzMwMjUwLgorCisgICAg
ICAgIG1fYWN0aXZlLmNsZWFyKCk7CisgICAgICAgIG1fdXNlZFNwaWxsU2xvdHMuY2xlYXJBbGwo
KTsKKyAgICAgICAgCisgICAgICAgIGZvciAoVG1wJiB0bXAgOiBtX3RtcHMpIHsKKyAgICAgICAg
ICAgIFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKKyAgICAgICAgICAgIGlmICghZW50cnku
c3BpbGxlZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc2l6ZV90IGluZGV4ID0gZW50cnkuaW50ZXJ2YWwuYmVnaW4oKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gVGhpcyBpcyBFeHBpcmVPbGRJbnRlcnZhbHMgaW4gRmlnLiAxLgor
ICAgICAgICAgICAgd2hpbGUgKCFtX2FjdGl2ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAg
ICBUbXAgdG1wID0gbV9hY3RpdmUuZmlyc3QoKTsKKyAgICAgICAgICAgICAgICBUbXBEYXRhJiBl
bnRyeSA9IG1fbWFwW3RtcF07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYm9v
bCBleHBpcmVkID0gZW50cnkuaW50ZXJ2YWwuZW5kKCkgPD0gaW5kZXg7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKCFleHBpcmVkKQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2FjdGl2ZS5yZW1vdmVG
aXJzdCgpOworICAgICAgICAgICAgICAgIG1fdXNlZFNwaWxsU2xvdHMuY2xlYXIoZW50cnkuc3Bp
bGxJbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGVudHJ5
LnNwaWxsSW5kZXggPSBtX3VzZWRTcGlsbFNsb3RzLmZpbmRCaXQoMCwgZmFsc2UpOworICAgICAg
ICAgICAgZW50cnkuc3BpbGxlZC0+c2V0T2Zmc2V0RnJvbUZQKAorICAgICAgICAgICAgICAgIC1z
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG1fY29kZS5mcmFtZVNpemUoKSkgLSBlbnRyeS5zcGlsbElu
ZGV4ICogOCAtIDgpOworICAgICAgICAgICAgbV91c2VkU3BpbGxTbG90cy5zZXQoZW50cnkuc3Bp
bGxJbmRleCk7CisgICAgICAgICAgICBtX2FjdGl2ZS5hcHBlbmQodG1wKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKICAgICB2b2lkIGluc2VydFNwaWxsQ29kZSgpCiAgICAgewogICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKQpAQCAtNTY5LDExICs2MzcsMTUgQEAgcHJp
dmF0ZToKICAgICBWZWN0b3I8VG1wPiBtX3RtcHM7CiAgICAgRGVxdWU8VG1wPiBtX2FjdGl2ZTsK
ICAgICBSZWdpc3RlclNldCBtX2FjdGl2ZVJlZ3M7CisgICAgQml0VmVjdG9yIG1fdXNlZFNwaWxs
U2xvdHM7CiAgICAgYm9vbCBtX2RpZFNwaWxsIHsgZmFsc2UgfTsKIH07CiAKLXZvaWQgcnVuTGlu
ZWFyU2NhbihDb2RlJiBjb2RlKQorfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgYWxs
b2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2NhbihDb2RlJiBjb2RlKQogeworICAgIFBo
YXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiYWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGlu
ZWFyU2NhbiIpOwogICAgIGlmICh2ZXJib3NlKCkpCiAgICAgICAgIGRhdGFMb2coIkFpciBiZWZv
cmUgbGluZWFyIHNjYW46XG4iLCBjb2RlKTsKICAgICBMaW5lYXJTY2FuIGxpbmVhclNjYW4oY29k
ZSk7CkBAIC01ODIsMTYgKzY1NCw2IEBAIHZvaWQgcnVuTGluZWFyU2NhbihDb2RlJiBjb2RlKQog
ICAgICAgICBkYXRhTG9nKCJBaXIgYWZ0ZXIgbGluZWFyIHNjYW46XG4iLCBjb2RlKTsKIH0KIAot
fSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLXZvaWQgYWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVh
clNjYW4oQ29kZSYgY29kZSkKLXsKLSAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImFs
bG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuIik7Ci0gICAgcGFkSW50ZXJmZXJlbmNlKGNvZGUp
OwotICAgIHJ1bkxpbmVhclNjYW4oY29kZSk7Ci0gICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMo
Y29kZSk7Ci19Ci0KIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIAogI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFs
bG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxp
bmVhclNjYW4uaAkocmV2aXNpb24gMjE1MjM4KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmg6MjE1MjM4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlM
aW5lYXJTY2FuLmgJKHdvcmtpbmcgY29weSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNB
bmRTdGFja0J5TGluZWFyU2Nhbi5oCShyZXZpc2lvbiAyMTUyMzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4u
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTMgKzM3LDE2IEBAIGNsYXNzIENvZGU7CiAvLyBUaGlz
IGltcGxlbWVudHMgdGhlIFBvbGV0dG8gYW5kIFNhcmthciByZWdpc3RlciBhbGxvY2F0b3IgY2Fs
bGVkICJsaW5lYXIgc2NhbiI6CiAvLyBodHRwOi8vZGwuYWNtLm9yZy9jaXRhdGlvbi5jZm0/aWQ9
MzMwMjUwCiAvLwotLy8gVGhpcyBpcyBub3QgQWlyJ3MgcHJpbWFyeSByZWdpc3RlciBhbGxvY2F0
b3IuIFdlIHVzZSBpdCBvbmx5IHdoZW4gcnVubmluZyBhdCBvcHRMZXZlbDwyLiBUaGF0J3Mgbm90
Ci0vLyB0aGUgZGVmYXVsdCBsZXZlbC4gVGhpcyByZWdpc3RlciBhbGxvY2F0b3IgaXMgb3B0aW1p
emVkIHByaW1hcmlseSBmb3IgcnVubmluZyBxdWlja2x5LiBJdCdzIGV4cGVjdGVkCi0vLyB0aGF0
IGltcHJvdmVtZW50cyB0byB0aGlzIHJlZ2lzdGVyIGFsbG9jYXRvciBzaG91bGQgZm9jdXMgb24g
aW1wcm92aW5nIGl0cyBleGVjdXRpb24gdGltZSB3aXRob3V0IG11Y2gKLS8vIHJlZ2FyZCBmb3Ig
dGhlIHF1YWxpdHkgb2YgZ2VuZXJhdGVkIGNvZGUuIElmIHlvdSB3YW50IGdvb2QgY29kZSwgdXNl
IGdyYXBoIGNvbG9yaW5nLgorLy8gVGhpcyBpcyBub3QgQWlyJ3MgcHJpbWFyeSByZWdpc3RlciBh
bGxvY2F0b3IuIFdlIHVzZSBpdCBvbmx5IHdoZW4gcnVubmluZyBhdCBvcHRMZXZlbDwyLgorLy8g
VGhhdCdzIG5vdCB0aGUgZGVmYXVsdCBsZXZlbC4gVGhpcyByZWdpc3RlciBhbGxvY2F0b3IgaXMg
b3B0aW1pemVkIHByaW1hcmlseSBmb3IgcnVubmluZworLy8gcXVpY2tseS4gSXQncyBleHBlY3Rl
ZCB0aGF0IGltcHJvdmVtZW50cyB0byB0aGlzIHJlZ2lzdGVyIGFsbG9jYXRvciBzaG91bGQgZm9j
dXMgb24gaW1wcm92aW5nCisvLyBpdHMgZXhlY3V0aW9uIHRpbWUgd2l0aG91dCBtdWNoIHJlZ2Fy
ZCBmb3IgdGhlIHF1YWxpdHkgb2YgZ2VuZXJhdGVkIGNvZGUuIElmIHlvdSB3YW50IGdvb2QKKy8v
IGNvZGUsIHVzZSBncmFwaCBjb2xvcmluZy4KIC8vCiAvLyBGb3IgQWlyJ3MgcHJpbWFyeSByZWdp
c3RlciBhbGxvY2F0b3IsIHNlZSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5o
fGNwcC4KLXZvaWQgYWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4oQ29kZSYpOworLy8KKy8v
IFRoaXMgYWxzbyBkb2VzIHN0YWNrIGFsbG9jYXRpb24gYXMgYW4gYWZ0ZXJ0aG91Z2h0LiBJdCBk
b2VzIG5vdCBkbyBhbnkgc3BpbGwgY29hbGVzY2luZy4KK3ZvaWQgYWxsb2NhdGVSZWdpc3RlcnNB
bmRTdGFja0J5TGluZWFyU2NhbihDb2RlJik7CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJl
Z2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAJKHJldmlzaW9u
IDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdp
c3RlcnNCeUxpbmVhclNjYW4uY3BwCShub25leGlzdGVudCkKQEAgLTEsNTk3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCIKLQot
I2lmIEVOQUJMRShCM19KSVQpCi0KLSNpbmNsdWRlICJBaXJBcmdJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiQWlyQ29kZS5oIgotI2luY2x1ZGUgIkFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmgiCi0j
aW5jbHVkZSAiQWlyUGhhc2VJbnNlcnRpb25TZXQuaCIKLSNpbmNsdWRlICJBaXJJbnN0SW5saW5l
cy5oIgotI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCi0jaW5jbHVkZSAiQWlyUGFkSW50ZXJmZXJl
bmNlLmgiCi0jaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgotI2luY2x1ZGUgIkFpclJlZ0xpdmVu
ZXNzLmgiCi0jaW5jbHVkZSAiQWlyVG1wSW5saW5lcy5oIgotI2luY2x1ZGUgIkFpclRtcE1hcC5o
IgotI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgotI2luY2x1ZGUgPHd0Zi9SYW5nZS5oPgotCi1u
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7Ci0KLW5hbWVzcGFj
ZSB7Ci0KLU5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggTkVWRVJfSU5MSU5FIHZvaWQgY3Jhc2goKQot
ewotICAgIENSQVNIKCk7Ci19Ci0KLSN1bmRlZiBSRUxFQVNFX0FTU0VSVAotI2RlZmluZSBSRUxF
QVNFX0FTU0VSVChhc3NlcnRpb24pIGRvIHsgXAotICAgIGlmICghKGFzc2VydGlvbikpIHsgXAot
ICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKF9fRklMRV9fLCBfX0xJTkVfXywgV1RG
X1BSRVRUWV9GVU5DVElPTiwgI2Fzc2VydGlvbik7IFwKLSAgICAgICAgY3Jhc2goKTsgXAotICAg
IH0gXAotfSB3aGlsZSAoMCkKLQotYm9vbCB2ZXJib3NlKCkgeyByZXR1cm4gT3B0aW9uczo6YWly
TGluZWFyU2NhblZlcmJvc2UoKTsgfQotCi0vLyBQaGFzZSBjb25zdGFudHMgd2UgdXNlIGZvciB0
aGUgUGhhc2VJbnNlcnRpb25TZXQuCi1jb25zdCB1bnNpZ25lZCBmaXJzdFBoYXNlID0gMDsKLWNv
bnN0IHVuc2lnbmVkIHNlY29uZFBoYXNlID0gMTsKLQotdHlwZWRlZiBSYW5nZTxzaXplX3Q+IElu
dGVydmFsOwotCi1zdHJ1Y3QgVG1wRGF0YSB7Ci0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Ci0gICAgewotICAgICAgICBvdXQucHJpbnQoIntpbnRlcnZhbCA9ICIsIGludGVy
dmFsLCAiLCBzcGlsbGVkID0gIiwgcG9pbnRlckR1bXAoc3BpbGxlZCksICIsIGFzc2lnbmVkID0g
IiwgYXNzaWduZWQsICIsIGlzVW5zcGlsbGFibGUgPSAiLCBpc1Vuc3BpbGxhYmxlLCAiLCBwb3Nz
aWJsZVJlZ3MgPSAiLCBwb3NzaWJsZVJlZ3MsICIsIGRpZEJ1aWxkUG9zc2libGVSZWdzID0gIiwg
ZGlkQnVpbGRQb3NzaWJsZVJlZ3MsICJ9Iik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgdmFsaWRh
dGUoKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShzcGlsbGVkICYmIGFzc2lnbmVk
KSk7Ci0gICAgfQotICAgIAotICAgIEludGVydmFsIGludGVydmFsOwotICAgIFN0YWNrU2xvdCog
c3BpbGxlZCB7IG51bGxwdHIgfTsKLSAgICBSZWdpc3RlclNldCBwb3NzaWJsZVJlZ3M7Ci0gICAg
UmVnIGFzc2lnbmVkOwotICAgIGJvb2wgaXNVbnNwaWxsYWJsZSB7IGZhbHNlIH07Ci0gICAgYm9v
bCBkaWRCdWlsZFBvc3NpYmxlUmVncyB7IGZhbHNlIH07Ci19OwotCi1zdHJ1Y3QgQ2xvYmJlciB7
Ci0gICAgQ2xvYmJlcigpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBDbG9iYmVyKHNpemVfdCBp
bmRleCwgUmVnaXN0ZXJTZXQgcmVncykKLSAgICAgICAgOiBpbmRleChpbmRleCkKLSAgICAgICAg
LCByZWdzKHJlZ3MpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKLSAgICB7Ci0gICAgICAgIG91dC5wcmludChpbmRleCwgIjoiLCByZWdz
KTsKLSAgICB9Ci0gICAgCi0gICAgc2l6ZV90IGluZGV4IHsgMCB9OwotICAgIFJlZ2lzdGVyU2V0
IHJlZ3M7Ci19OwotCi1jbGFzcyBMaW5lYXJTY2FuIHsKLXB1YmxpYzoKLSAgICBMaW5lYXJTY2Fu
KENvZGUmIGNvZGUpCi0gICAgICAgIDogbV9jb2RlKGNvZGUpCi0gICAgICAgICwgbV9zdGFydElu
ZGV4KGNvZGUuc2l6ZSgpKQotICAgICAgICAsIG1fbWFwKGNvZGUpCi0gICAgICAgICwgbV9pbnNl
cnRpb25TZXRzKGNvZGUuc2l6ZSgpKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBydW4o
KQotICAgIHsKLSAgICAgICAgYnVpbGRSZWdpc3RlclNldCgpOwotICAgICAgICBidWlsZEluZGlj
ZXMoKTsKLSAgICAgICAgYnVpbGRJbnRlcnZhbHMoKTsKLSAgICAgICAgaWYgKHNob3VsZFNwaWxs
RXZlcnl0aGluZygpKSB7Ci0gICAgICAgICAgICBzcGlsbEV2ZXJ5dGhpbmcoKTsKLSAgICAgICAg
ICAgIGVtaXRTcGlsbENvZGUoKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKDs7KSB7Ci0gICAg
ICAgICAgICBwcmVwYXJlSW50ZXJ2YWxzKCk7Ci0gICAgICAgICAgICBtX2RpZFNwaWxsID0gZmFs
c2U7Ci0gICAgICAgICAgICBmb3JFYWNoQmFuaygKLSAgICAgICAgICAgICAgICBbJl0gKEJhbmsg
YmFuaykgewotICAgICAgICAgICAgICAgICAgICBhdHRlbXB0U2NhbihiYW5rKTsKLSAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgIGlmICghbV9kaWRTcGlsbCkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGVtaXRTcGlsbENvZGUoKTsKLSAgICAgICAgfQotICAgICAg
ICBpbnNlcnRTcGlsbENvZGUoKTsKLSAgICAgICAgYXNzaWduUmVnaXN0ZXJzKCk7Ci0gICAgfQot
ICAgIAotcHJpdmF0ZToKLSAgICB2b2lkIGJ1aWxkUmVnaXN0ZXJTZXQoKQotICAgIHsKLSAgICAg
ICAgZm9yRWFjaEJhbmsoCi0gICAgICAgICAgICBbJl0gKEJhbmsgYmFuaykgewotICAgICAgICAg
ICAgICAgIG1fcmVnaXN0ZXJzW2JhbmtdID0gbV9jb2RlLnJlZ3NJblByaW9yaXR5T3JkZXIoYmFu
ayk7Ci0gICAgICAgICAgICAgICAgbV9yZWdpc3RlclNldFtiYW5rXS5zZXRBbGwobV9yZWdpc3Rl
cnNbYmFua10pOwotICAgICAgICAgICAgICAgIG1fdW5pZmllZFJlZ2lzdGVyU2V0Lm1lcmdlKG1f
cmVnaXN0ZXJTZXRbYmFua10pOwotICAgICAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgdm9pZCBi
dWlsZEluZGljZXMoKQotICAgIHsKLSAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKLSAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkgewotICAgICAgICAgICAgbV9zdGFydElu
ZGV4W2Jsb2NrXSA9IGluZGV4OwotICAgICAgICAgICAgaW5kZXggKz0gYmxvY2stPnNpemUoKSAq
IDI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgc2l6ZV90IGluZGV4T2ZIZWFkKEJhc2lj
QmxvY2sqIGJsb2NrKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc3RhcnRJbmRleFtibG9ja107
Ci0gICAgfQotICAgIAotICAgIHNpemVfdCBpbmRleE9mVGFpbChCYXNpY0Jsb2NrKiBibG9jaykK
LSAgICB7Ci0gICAgICAgIHJldHVybiBpbmRleE9mSGVhZChibG9jaykgKyBibG9jay0+c2l6ZSgp
ICogMjsKLSAgICB9Ci0gICAgCi0gICAgSW50ZXJ2YWwgaW50ZXJ2YWwoc2l6ZV90IGluZGV4T2ZF
YXJseSwgQXJnOjpUaW1pbmcgdGltaW5nKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0aW1pbmcp
IHsKLSAgICAgICAgY2FzZSBBcmc6Ok9ubHlFYXJseToKLSAgICAgICAgICAgIHJldHVybiBJbnRl
cnZhbChpbmRleE9mRWFybHkpOwotICAgICAgICBjYXNlIEFyZzo6T25seUxhdGU6Ci0gICAgICAg
ICAgICByZXR1cm4gSW50ZXJ2YWwoaW5kZXhPZkVhcmx5ICsgMSk7Ci0gICAgICAgIGNhc2UgQXJn
OjpFYXJseUFuZExhdGU6Ci0gICAgICAgICAgICByZXR1cm4gSW50ZXJ2YWwoaW5kZXhPZkVhcmx5
LCBpbmRleE9mRWFybHkgKyAyKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuIEludGVydmFsKCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
YnVpbGRJbnRlcnZhbHMoKQotICAgIHsKLSAgICAgICAgVW5pZmllZFRtcExpdmVuZXNzIGxpdmVu
ZXNzKG1fY29kZSk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
bV9jb2RlKSB7Ci0gICAgICAgICAgICBzaXplX3QgaW5kZXhPZkhlYWQgPSB0aGlzLT5pbmRleE9m
SGVhZChibG9jayk7Ci0gICAgICAgICAgICBzaXplX3QgaW5kZXhPZlRhaWwgPSB0aGlzLT5pbmRl
eE9mVGFpbChibG9jayk7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgZGF0YUxvZygiQXQgYmxvY2sgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiXG4iKTsKLSAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgIGluZGV4T2ZIZWFkID0gIiwgaW5kZXhPZkhlYWQsICJc
biIpOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgaWRuZXhPZlRhaWwgPSAiLCBpbmRleE9m
VGFpbCwgIlxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBs
aXZlbmVzcy5saXZlQXRIZWFkKGJsb2NrKSkgewotICAgICAgICAgICAgICAgIGlmICghdG1wLmlz
UmVnKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fbWFwW3RtcF0uaW50ZXJ2YWwgfD0gSW50ZXJ2
YWwoaW5kZXhPZkhlYWQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChUbXAgdG1w
IDogbGl2ZW5lc3MubGl2ZUF0VGFpbChibG9jaykpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXRt
cC5pc1JlZygpKQotICAgICAgICAgICAgICAgICAgICBtX21hcFt0bXBdLmludGVydmFsIHw9IElu
dGVydmFsKGluZGV4T2ZUYWlsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6
ZSgpOyArK2luc3RJbmRleCkgewotICAgICAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+
YXQoaW5zdEluZGV4KTsKLSAgICAgICAgICAgICAgICBzaXplX3QgaW5kZXhPZkVhcmx5ID0gaW5k
ZXhPZkhlYWQgKyBpbnN0SW5kZXggKiAyOwotICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRt
cCgKLSAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEJh
bmssIFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9tYXBbdG1wXS5pbnRlcnZhbCB8PSBpbnRlcnZhbChpbmRleE9mRWFybHksIEFyZzo6dGlt
aW5nKHJvbGUpKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIFJlZ0xpdmVuZXNzOjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9j
ayk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF1dG8gcmVjb3JkID0gWyZdICh1bnNpZ25l
ZCBpbnN0SW5kZXgpIHsKLSAgICAgICAgICAgICAgICBSZWdpc3RlclNldCByZWdzID0gbG9jYWxD
YWxjLmxpdmUoKTsKLSAgICAgICAgICAgICAgICBpZiAoSW5zdCogcHJldiA9IGJsb2NrLT5nZXQo
aW5zdEluZGV4IC0gMSkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcHJldlJl
Z3MgPSByZWdzOwotICAgICAgICAgICAgICAgICAgICBwcmV2LT5mb3JFYWNoPFJlZz4oCi0gICAg
ICAgICAgICAgICAgICAgICAgICBbJl0gKFJlZyYgcmVnLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywg
V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0xhdGVEZWYo
cm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZSZWdzLmFkZChyZWcp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChw
cmV2LT5raW5kLm9wY29kZSA9PSBQYXRjaCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZXZS
ZWdzLm1lcmdlKHByZXYtPmV4dHJhQ2xvYmJlcmVkUmVncygpKTsKLSAgICAgICAgICAgICAgICAg
ICAgcHJldlJlZ3MuZmlsdGVyKG1fdW5pZmllZFJlZ2lzdGVyU2V0KTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFwcmV2UmVncy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBt
X2Nsb2JiZXJzLmFwcGVuZChDbG9iYmVyKGluZGV4T2ZIZWFkICsgaW5zdEluZGV4ICogMiAtIDEs
IHByZXZSZWdzKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChJbnN0
KiBuZXh0ID0gYmxvY2stPmdldChpbnN0SW5kZXgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJl
Z2lzdGVyU2V0IG5leHRSZWdzID0gcmVnczsKLSAgICAgICAgICAgICAgICAgICAgbmV4dC0+Zm9y
RWFjaDxSZWc+KAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChSZWcmIHJlZywgQXJnOjpS
b2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KEFyZzo6aXNFYXJseURlZihyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmV4dFJlZ3MuYWRkKHJlZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKG5leHQtPmtpbmQub3Bjb2RlID09IFBhdGNoKQotICAgICAgICAgICAg
ICAgICAgICAgICAgbmV4dFJlZ3MubWVyZ2UobmV4dC0+ZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3Mo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbmV4dFJlZ3MuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9jbG9iYmVycy5hcHBlbmQoQ2xvYmJlcihpbmRleE9mSGVhZCAr
IGluc3RJbmRleCAqIDIsIG5leHRSZWdzKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmVjb3JkKGJsb2NrLT5zaXplKCkpOwot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0
SW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgp
OwotICAgICAgICAgICAgICAgIHJlY29yZChpbnN0SW5kZXgpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGQ6OnNvcnQoCi0gICAgICAgICAgICBtX2Nsb2Ji
ZXJzLmJlZ2luKCksIG1fY2xvYmJlcnMuZW5kKCksCi0gICAgICAgICAgICBbXSAoQ2xvYmJlciYg
YSwgQ2xvYmJlciYgYikgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXgg
PCBiLmluZGV4OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIAotICAgICAgICBpZiAodmVyYm9z
ZSgpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCJJbnRlcnZhbHM6XG4iKTsKLSAgICAgICAgICAg
IG1fY29kZS5mb3JFYWNoVG1wKAotICAgICAgICAgICAgICAgIFsmXSAoVG1wIHRtcCkgewotICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgdG1wLCAiOiAiLCBtX21hcFt0bXBdLCAi
XG4iKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBi
b29sIHNob3VsZFNwaWxsRXZlcnl0aGluZygpCi0gICAgewotICAgICAgICBpZiAoIU9wdGlvbnM6
OmFpckxpbmVhclNjYW5TcGlsbHNFdmVyeXRoaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIAotICAgICAgICAvLyBZb3UncmUgbWVhbnQgdG8gaGFjayB0aGlzIHNvIHRo
YXQgeW91IHNlbGVjdGl2ZWx5IHNwaWxsIGV2ZXJ5dGhpbmcgZGVwZW5kaW5nIG9uIHJlYXNvbnMu
Ci0gICAgICAgIC8vIFRoYXQncyBzdXBlciB1c2VmdWwgZm9yIGRlYnVnZ2luZy4KLQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoKQot
ICAgIHsKLSAgICAgICAgbV9jb2RlLmZvckVhY2hUbXAoCi0gICAgICAgICAgICBbJl0gKFRtcCB0
bXApIHsKLSAgICAgICAgICAgICAgICBzcGlsbCh0bXApOwotICAgICAgICAgICAgfSk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgcHJlcGFyZUludGVydmFscygpCi0gICAgewotICAgICAgICBtX3Rt
cHMucmVzaXplKDApOwotICAgICAgICAKLSAgICAgICAgbV9jb2RlLmZvckVhY2hUbXAoCi0gICAg
ICAgICAgICBbJl0gKFRtcCB0bXApIHsKLSAgICAgICAgICAgICAgICBUbXBEYXRhJiBkYXRhID0g
bV9tYXBbdG1wXTsKLSAgICAgICAgICAgICAgICBpZiAoZGF0YS5zcGlsbGVkKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZGF0
YS5hc3NpZ25lZCA9IFJlZygpOwotICAgICAgICAgICAgICAgIG1fdG1wcy5hcHBlbmQodG1wKTsK
LSAgICAgICAgICAgIH0pOwotICAgICAgICAKLSAgICAgICAgc3RkOjpzb3J0KAotICAgICAgICAg
ICAgbV90bXBzLmJlZ2luKCksIG1fdG1wcy5lbmQoKSwKLSAgICAgICAgICAgIFsmXSAoVG1wJiBh
LCBUbXAmIGIpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9tYXBbYV0uaW50ZXJ2YWwuYmVn
aW4oKSA8IG1fbWFwW2JdLmludGVydmFsLmJlZ2luKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgCi0gICAgICAgIGlmICh2ZXJib3NlKCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIlRtcHM6
ICIsIGxpc3REdW1wKG1fdG1wcyksICJcbiIpOwotICAgICAgICAgICAgZGF0YUxvZygiQ2xvYmJl
cnM6ICIsIGxpc3REdW1wKG1fY2xvYmJlcnMpLCAiXG4iKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICAKLSAgICBUbXAgYWRkU3BpbGxUbXBXaXRoSW50ZXJ2YWwoQmFuayBiYW5rLCBJbnRlcnZhbCBp
bnRlcnZhbCkKLSAgICB7Ci0gICAgICAgIFRtcERhdGEgZGF0YTsKLSAgICAgICAgZGF0YS5pbnRl
cnZhbCA9IGludGVydmFsOwotICAgICAgICBkYXRhLmlzVW5zcGlsbGFibGUgPSB0cnVlOwotICAg
ICAgICAKLSAgICAgICAgVG1wIHRtcCA9IG1fY29kZS5uZXdUbXAoYmFuayk7Ci0gICAgICAgIG1f
bWFwLmFwcGVuZCh0bXAsIGRhdGEpOwotICAgICAgICByZXR1cm4gdG1wOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIGF0dGVtcHRTY2FuKEJhbmsgYmFuaykKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMg
aXMgbW9kZWxlZCBhZnRlciBMaW5lYXJTY2FuUmVnaXN0ZXJBbGxvY2F0aW9uIGluIEZpZy4gMSBp
bgotICAgICAgICAvLyBodHRwOi8vZGwuYWNtLm9yZy9jaXRhdGlvbi5jZm0/aWQ9MzMwMjUwLgot
Ci0gICAgICAgIG1fYWN0aXZlLmNsZWFyKCk7Ci0gICAgICAgIG1fYWN0aXZlUmVncyA9IFJlZ2lz
dGVyU2V0KCk7Ci0gICAgICAgIAotICAgICAgICBzaXplX3QgY2xvYmJlckluZGV4ID0gMDsKLSAg
ICAgICAgZm9yIChUbXAmIHRtcCA6IG1fdG1wcykgewotICAgICAgICAgICAgaWYgKHRtcC5iYW5r
KCkgIT0gYmFuaykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgVG1wRGF0YSYgZW50cnkgPSBtX21hcFt0bXBdOwotICAgICAgICAgICAgc2l6ZV90
IGluZGV4ID0gZW50cnkuaW50ZXJ2YWwuYmVnaW4oKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKHZlcmJvc2UoKSkgewotICAgICAgICAgICAgICAgIGRhdGFMb2coIkluZGV4ICMiLCBp
bmRleCwgIjogIiwgdG1wLCAiXG4iKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICIsIHRt
cCwgIjogIiwgZW50cnksICJcbiIpOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgY2xvYmJl
ckluZGV4ID0gIiwgY2xvYmJlckluZGV4LCAiXG4iKTsKLSAgICAgICAgICAgICAgICAvLyBUaGlz
IGNvdWxkIGJlIHNvIG11Y2ggZmFzdGVyLgotICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9jb2RlWzBdOwotICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogY2FuZGlk
YXRlQmxvY2sgOiBtX2NvZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhcnRJbmRl
eFtjYW5kaWRhdGVCbG9ja10gPiBpbmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBibG9jayA9IGNhbmRpZGF0ZUJsb2NrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnN0SW5kZXggPSAoaW5kZXggLSBt
X3N0YXJ0SW5kZXhbYmxvY2tdICsgMSkgLyAyOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
QXQ6ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIiwgaW5zdEluZGV4ID0gIiwgaW5zdEluZGV4LCAi
XG4iKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgUHJldjogIiwgcG9pbnRlckR1bXAo
YmxvY2stPmdldChpbnN0SW5kZXggLSAxKSksICJcbiIpOwotICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgICBOZXh0OiAiLCBwb2ludGVyRHVtcChibG9jay0+Z2V0KGluc3RJbmRleCkpLCAiXG4i
KTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIEFjdGl2ZTpcbiIpOwotICAgICAgICAgICAg
ICAgIGZvciAoVG1wIHRtcCA6IG1fYWN0aXZlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICAgIiwgdG1wLCAiOiAiLCBtX21hcFt0bXBdLCAiXG4iKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgLy8gVGhpcyBpcyBFeHBpcmVPbGRJbnRlcnZhbHMgaW4g
RmlnLiAxLgotICAgICAgICAgICAgd2hpbGUgKCFtX2FjdGl2ZS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgICAgICBUbXAgdG1wID0gbV9hY3RpdmUuZmlyc3QoKTsKLSAgICAgICAgICAgICAgICBU
bXBEYXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgYm9vbCBleHBpcmVkID0gZW50cnkuaW50ZXJ2YWwuZW5kKCkgPD0gaW5kZXg7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFleHBpcmVkKQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2FjdGl2
ZS5yZW1vdmVGaXJzdCgpOwotICAgICAgICAgICAgICAgIG1fYWN0aXZlUmVncy5yZW1vdmUoZW50
cnkuYXNzaWduZWQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBJZiBuZWNlc3Nh
cnksIGNvbXB1dGUgdGhlIHNldCBvZiByZWdpc3RlcnMgdGhhdCB0aGlzIHRtcCBjb3VsZCBldmVu
IHVzZS4gVGhpcyBpcyBub3QKLSAgICAgICAgICAgIC8vIHBhcnQgb2YgRmlnLiAxLCBidXQgaXQn
cyBhIHRlY2huaXF1ZSB0aGF0IHRoZSBhdXRob3JzIGNsYWltIHRvIGhhdmUgaW1wbGVtZW50ZWQg
aW4gb25lIG9mCi0gICAgICAgICAgICAvLyB0aGVpciB0d28gaW1wbGVtZW50YXRpb25zLiBUaGVy
ZSBtYXkgYmUgb3RoZXIgbW9yZSBlZmZpY2llbnQgd2F5cyB0byBkbyB0aGlzLCBidXQgdGhpcwot
ICAgICAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gZ2V0cyBzb21lIHBlcmYgd2lucyBmcm9tIHBp
Z2d5LWJhY2tpbmcgdGhpcyBjYWxjdWxhdGlvbiBpbiB0aGUgc2Nhbi4KLSAgICAgICAgICAgIC8v
Ci0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIGRpZEJ1aWxkIGZsYWcgc3RpY2tzIHRocm91
Z2ggc3BpbGxpbmcuIFNwaWxsaW5nIGRvZXNuJ3QgY2hhbmdlIHRoZQotICAgICAgICAgICAgLy8g
aW50ZXJmZXJlbmNlIHNpdHVhdGlvbi4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBO
b3RlIHRoYXQgd2UgY291bGQgc2hvcnQtY2lyY3VpdCB0aGlzIGlmIHdlJ3JlIGRlYWxpbmcgd2l0
aCBhIHNwaWxsYWJsZSB0bXAsIHRoZXJlIGFyZSBubwotICAgICAgICAgICAgLy8gZnJlZSByZWdp
c3RlcnMsIGFuZCB0aGlzIHJlZ2lzdGVyJ3MgaW50ZXJ2YWwgZW5kcyBhZnRlciB0aGUgb25lIG9u
IHRoZSB0b3Agb2YgdGhlIGFjdGl2ZQotICAgICAgICAgICAgLy8gc3RhY2suCi0gICAgICAgICAg
ICBpZiAoIWVudHJ5LmRpZEJ1aWxkUG9zc2libGVSZWdzKSB7Ci0gICAgICAgICAgICAgICAgLy8g
QWR2YW5jZSB0aGUgY2xvYmJlciBpbmRleCB1bnRpbCBpdCdzIGF0IGEgY2xvYmJlciB0aGF0IGlz
IHJlbGV2YW50IHRvIHVzLgotICAgICAgICAgICAgICAgIHdoaWxlIChjbG9iYmVySW5kZXggPCBt
X2Nsb2JiZXJzLnNpemUoKSAmJiBtX2Nsb2JiZXJzW2Nsb2JiZXJJbmRleF0uaW5kZXggPCBpbmRl
eCkKLSAgICAgICAgICAgICAgICAgICAgY2xvYmJlckluZGV4Kys7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcG9zc2libGVSZWdzID0gbV9yZWdpc3RlclNl
dFtiYW5rXTsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gY2xvYmJlckluZGV4OyBp
IDwgbV9jbG9iYmVycy5zaXplKCkgJiYgbV9jbG9iYmVyc1tpXS5pbmRleCA8IGVudHJ5LmludGVy
dmFsLmVuZCgpOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlUmVncy5leGNsdWRl
KG1fY2xvYmJlcnNbaV0ucmVncyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ZW50cnkucG9zc2libGVSZWdzID0gcG9zc2libGVSZWdzOwotICAgICAgICAgICAgICAgIGVudHJ5
LmRpZEJ1aWxkUG9zc2libGVSZWdzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKHZlcmJvc2UoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
IFBvc3NpYmxlIHJlZ3M6ICIsIGVudHJ5LnBvc3NpYmxlUmVncywgIlxuIik7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIEZpbmQgYSBmcmVlIHJlZ2lzdGVyIHRoYXQgd2UgYXJlIGFsbG93
ZWQgdG8gdXNlLgotICAgICAgICAgICAgaWYgKG1fYWN0aXZlLnNpemUoKSAhPSBtX3JlZ2lzdGVy
c1tiYW5rXS5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBib29sIGRpZEFzc2lnbiA9IGZhbHNl
OwotICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IG1fcmVnaXN0ZXJzW2JhbmtdKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDb3VsZCBkbyBwcmlvcml0eSBjb2xvcmluZyBo
ZXJlLgotICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTcwMzA0Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9hY3RpdmVSZWdz
LmNvbnRhaW5zKHJlZykgJiYgZW50cnkucG9zc2libGVSZWdzLmNvbnRhaW5zKHJlZykpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbih0bXAsIHJlZyk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkaWRBc3NpZ24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaWYgKGRpZEFzc2lnbikKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgU3BpbGxBdEludGVy
dmFsIGluIEZpZy4gMSwgYnV0IG1vZGlmaWVkIHRvIGhhbmRsZSBjbG9iYmVycy4KLSAgICAgICAg
ICAgIFRtcCBzcGlsbFRtcCA9IG1fYWN0aXZlLnRha2VMYXN0KAotICAgICAgICAgICAgICAgIFsm
XSAoVG1wIHNwaWxsQ2FuZGlkYXRlKSAtPiBib29sIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVudHJ5LnBvc3NpYmxlUmVncy5jb250YWlucyhtX21hcFtzcGlsbENhbmRpZGF0ZV0uYXNz
aWduZWQpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKCFzcGlsbFRtcCkg
ewotICAgICAgICAgICAgICAgIHNwaWxsKHRtcCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBUbXBEYXRhJiBzcGlsbEVudHJ5ID0gbV9tYXBb
c3BpbGxUbXBdOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3BpbGxFbnRyeS5hc3NpZ25l
ZCk7Ci0gICAgICAgICAgICBpZiAoc3BpbGxFbnRyeS5pc1Vuc3BpbGxhYmxlIHx8Ci0gICAgICAg
ICAgICAgICAgKCFlbnRyeS5pc1Vuc3BpbGxhYmxlICYmIHNwaWxsRW50cnkuaW50ZXJ2YWwuZW5k
KCkgPD0gZW50cnkuaW50ZXJ2YWwuZW5kKCkpKSB7Ci0gICAgICAgICAgICAgICAgc3BpbGwodG1w
KTsKLSAgICAgICAgICAgICAgICBhZGRUb0FjdGl2ZShzcGlsbFRtcCk7Ci0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGFz
c2lnbih0bXAsIHNwaWxsRW50cnkuYXNzaWduZWQpOwotICAgICAgICAgICAgc3BpbGwoc3BpbGxU
bXApOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgYWRkVG9BY3RpdmUoVG1wIHRt
cCkKLSAgICB7Ci0gICAgICAgIGlmIChtX21hcFt0bXBdLmlzVW5zcGlsbGFibGUpIHsKLSAgICAg
ICAgICAgIG1fYWN0aXZlLnByZXBlbmQodG1wKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgbV9hY3RpdmUuYXBwZW5kQW5kQnViYmxlKAotICAgICAg
ICAgICAgdG1wLAotICAgICAgICAgICAgWyZdIChUbXAgb3RoZXJUbXApIC0+IGJvb2wgewotICAg
ICAgICAgICAgICAgIFRtcERhdGEmIG90aGVyRW50cnkgPSBtX21hcFtvdGhlclRtcF07Ci0gICAg
ICAgICAgICAgICAgaWYgKG90aGVyRW50cnkuaXNVbnNwaWxsYWJsZSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIHJldHVybiBtX21hcFtvdGhlclRt
cF0uaW50ZXJ2YWwuZW5kKCkgPiBtX21hcFt0bXBdLmludGVydmFsLmVuZCgpOwotICAgICAgICAg
ICAgfSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgYXNzaWduKFRtcCB0bXAsIFJlZyByZWcpCi0g
ICAgewotICAgICAgICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFlbnRyeS5zcGlsbGVkKTsKLSAgICAgICAgZW50cnkuYXNzaWduZWQgPSByZWc7
Ci0gICAgICAgIG1fYWN0aXZlUmVncy5hZGQocmVnKTsKLSAgICAgICAgYWRkVG9BY3RpdmUodG1w
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGlsbChUbXAgdG1wKQotICAgIHsKLSAgICAgICAg
VG1wRGF0YSYgZW50cnkgPSBtX21hcFt0bXBdOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZW50
cnkuaXNVbnNwaWxsYWJsZSk7Ci0gICAgICAgIGVudHJ5LnNwaWxsZWQgPSBtX2NvZGUuYWRkU3Rh
Y2tTbG90KDgsIFN0YWNrU2xvdEtpbmQ6OlNwaWxsKTsKLSAgICAgICAgZW50cnkuYXNzaWduZWQg
PSBSZWcoKTsKLSAgICAgICAgbV9kaWRTcGlsbCA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgZW1pdFNwaWxsQ29kZSgpCi0gICAgewotICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogbV9jb2RlKSB7Ci0gICAgICAgICAgICBzaXplX3QgaW5kZXhPZkhlYWQgPSB0aGlzLT5pbmRl
eE9mSGVhZChibG9jayk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7
IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7Ci0gICAgICAgICAgICAg
ICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOwotICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGluZGV4T2ZFYXJseSA9IGluZGV4T2ZIZWFkICsgaW5zdEluZGV4ICogMjsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBGaXJzdCB0cnkgdG8gc3BpbGwgZGlyZWN0
bHkuCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5z
aXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBBcmcmIGFyZyA9IGluc3QuYXJnc1tp
XTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNUbXAoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLmlzUmVnKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAg
U3RhY2tTbG90KiBzcGlsbGVkID0gbV9tYXBbYXJnLnRtcCgpXS5zcGlsbGVkOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoIXNwaWxsZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnN0LmFkbWl0c1N0YWNrKGkpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGFyZyA9IEFy
Zzo6c3RhY2soc3BpbGxlZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIC8vIEZhbGwgYmFjayBvbiB0aGUgaGFyZCB3YXkuCi0gICAgICAgICAg
ICAgICAgaW5zdC5mb3JFYWNoVG1wKAotICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1w
LCBBcmc6OlJvbGUgcm9sZSwgQmFuayBiYW5rLCBXaWR0aCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRtcC5pc1JlZygpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3BpbGxlZCA9IG1fbWFwW3Rt
cF0uc3BpbGxlZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3BpbGxlZCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICBP
cGNvZGUgbW92ZSA9IGJhbmsgPT0gR1AgPyBNb3ZlIDogTW92ZURvdWJsZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRtcCA9IGFkZFNwaWxsVG1wV2l0aEludGVydmFsKGJhbmssIGludGVydmFs
KGluZGV4T2ZFYXJseSwgQXJnOjp0aW1pbmcocm9sZSkpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChyb2xlID09IEFyZzo6U2NyYXRjaCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueVVzZShyb2xl
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldHNbYmxvY2tdLmlu
c2VydChpbnN0SW5kZXgsIHNlY29uZFBoYXNlLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgQXJnOjpzdGFj
ayhzcGlsbGVkKSwgdG1wKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55
RGVmKHJvbGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0c1ti
bG9ja10uaW5zZXJ0KGluc3RJbmRleCArIDEsIGZpcnN0UGhhc2UsIG1vdmUsIGluc3Qub3JpZ2lu
LCB0bXAsIEFyZzo6c3RhY2soc3BpbGxlZCkpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGluc2VydFNwaWxs
Q29kZSgpCi0gICAgewotICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKQot
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXRzW2Jsb2NrXS5leGVjdXRlKGJsb2NrKTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBhc3NpZ25SZWdpc3RlcnMoKQotICAgIHsKLSAgICAgICAgaWYgKHZl
cmJvc2UoKSkgewotICAgICAgICAgICAgZGF0YUxvZygiQWJvdXQgdG8gYWxsb2NhdGUgcmVnaXN0
ZXJzLiBTdGF0ZSBvZiBhbGwgdG1wczpcbiIpOwotICAgICAgICAgICAgbV9jb2RlLmZvckVhY2hU
bXAoCi0gICAgICAgICAgICAgICAgWyZdIChUbXAgdG1wKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICAiLCB0bXAsICI6ICIsIG1fbWFwW3RtcF0sICJcbiIpOwotICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgZGF0YUxvZygiSVI6XG4iKTsKLSAgICAgICAgICAgIGRh
dGFMb2cobV9jb2RlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fY29kZSkgewotICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJs
b2NrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UoKSkKLSAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiQXQ6ICIsIGluc3QsICJcbiIpOwotICAgICAgICAgICAgICAgIGluc3QuZm9y
RWFjaFRtcEZhc3QoCi0gICAgICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFJlZyByZWcgPSBtX21hcFt0bXBdLmFzc2lnbmVkOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFyZWcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJGYWlsZWQgdG8gYWxsb2NhdGUgcmVnIGZvcjogIiwgdG1wLCAiXG4iKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gVG1wKHJlZyk7
Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIAotICAgIENvZGUmIG1fY29kZTsKLSAgICBWZWN0b3I8UmVnPiBtX3JlZ2lzdGVyc1tu
dW1CYW5rc107Ci0gICAgUmVnaXN0ZXJTZXQgbV9yZWdpc3RlclNldFtudW1CYW5rc107Ci0gICAg
UmVnaXN0ZXJTZXQgbV91bmlmaWVkUmVnaXN0ZXJTZXQ7Ci0gICAgSW5kZXhNYXA8QmFzaWNCbG9j
ayosIHNpemVfdD4gbV9zdGFydEluZGV4OwotICAgIFRtcE1hcDxUbXBEYXRhPiBtX21hcDsKLSAg
ICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgUGhhc2VJbnNlcnRpb25TZXQ+IG1faW5zZXJ0aW9uU2V0
czsKLSAgICBWZWN0b3I8Q2xvYmJlcj4gbV9jbG9iYmVyczsgLy8gQWZ0ZXIgd2UgYWxsb2NhdGUg
dGhpcywgd2UgaGFwcGlseSBwb2ludCBwb2ludGVycyBpbnRvIGl0LgotICAgIFZlY3RvcjxUbXA+
IG1fdG1wczsKLSAgICBEZXF1ZTxUbXA+IG1fYWN0aXZlOwotICAgIFJlZ2lzdGVyU2V0IG1fYWN0
aXZlUmVnczsKLSAgICBib29sIG1fZGlkU3BpbGwgeyBmYWxzZSB9OwotfTsKLQotdm9pZCBydW5M
aW5lYXJTY2FuKENvZGUmIGNvZGUpCi17Ci0gICAgaWYgKHZlcmJvc2UoKSkKLSAgICAgICAgZGF0
YUxvZygiQWlyIGJlZm9yZSBsaW5lYXIgc2NhbjpcbiIsIGNvZGUpOwotICAgIExpbmVhclNjYW4g
bGluZWFyU2Nhbihjb2RlKTsKLSAgICBsaW5lYXJTY2FuLnJ1bigpOwotICAgIGlmICh2ZXJib3Nl
KCkpCi0gICAgICAgIGRhdGFMb2coIkFpciBhZnRlciBsaW5lYXIgc2NhbjpcbiIsIGNvZGUpOwot
fQotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotdm9pZCBhbGxvY2F0ZVJlZ2lzdGVyc0J5
TGluZWFyU2NhbihDb2RlJiBjb2RlKQotewotICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2Rl
LCAiYWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4iKTsKLSAgICBwYWRJbnRlcmZlcmVuY2Uo
Y29kZSk7Ci0gICAgcnVuTGluZWFyU2Nhbihjb2RlKTsKLSAgICBmaXhTcGlsbHNBZnRlclRlcm1p
bmFscyhjb2RlKTsKLX0KLQotfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgotCi0jZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgJ
KHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaAkobm9uZXhpc3RlbnQpCkBAIC0xLDUwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2lmIEVOQUJMRShCM19KSVQpCi0KLSNpbmNsdWRlICJDUFUuaCIKLSNpbmNsdWRl
ICJPcHRpb25zLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKLQotY2xhc3MgQ29kZTsKLQotLy8gVGhpcyBpbXBsZW1lbnRzIHRoZSBQb2xldHRvIGFu
ZCBTYXJrYXIgcmVnaXN0ZXIgYWxsb2NhdG9yIGNhbGxlZCAibGluZWFyIHNjYW4iOgotLy8gaHR0
cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTMzMDI1MAotLy8KLS8vIFRoaXMgaXMgbm90
IEFpcidzIHByaW1hcnkgcmVnaXN0ZXIgYWxsb2NhdG9yLiBXZSB1c2UgaXQgb25seSB3aGVuIHJ1
bm5pbmcgYXQgb3B0TGV2ZWw8Mi4gVGhhdCdzIG5vdAotLy8gdGhlIGRlZmF1bHQgbGV2ZWwuIFRo
aXMgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzIG9wdGltaXplZCBwcmltYXJpbHkgZm9yIHJ1bm5pbmcg
cXVpY2tseS4gSXQncyBleHBlY3RlZAotLy8gdGhhdCBpbXByb3ZlbWVudHMgdG8gdGhpcyByZWdp
c3RlciBhbGxvY2F0b3Igc2hvdWxkIGZvY3VzIG9uIGltcHJvdmluZyBpdHMgZXhlY3V0aW9uIHRp
bWUgd2l0aG91dCBtdWNoCi0vLyByZWdhcmQgZm9yIHRoZSBxdWFsaXR5IG9mIGdlbmVyYXRlZCBj
b2RlLiBJZiB5b3Ugd2FudCBnb29kIGNvZGUsIHVzZSBncmFwaCBjb2xvcmluZy4KLS8vCi0vLyBG
b3IgQWlyJ3MgcHJpbWFyeSByZWdpc3RlciBhbGxvY2F0b3IsIHNlZSBBaXJBbGxvY2F0ZVJlZ2lz
dGVyc0J5R3JhcGhDb2xvcmluZy5ofGNwcC4KLXZvaWQgYWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVh
clNjYW4oQ29kZSYpOwotCi19IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcuY3Bw
CShyZXZpc2lvbiAyMTUyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFs
bG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICsz
MCw3IEBACiAKICNpbmNsdWRlICJBaXJBcmdJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyQ29kZS5o
IgotI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckhhbmRsZUNhbGxl
ZVNhdmVzLmgiCiAjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKICNpbmNsdWRlICJBaXJMaXZl
bmVzcy5oIgogI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKQEAgLTEyOSwxNSArMTI5LDExIEBA
IHN0cnVjdCBDb2FsZXNjYWJsZU1vdmUgewogICAgIGRvdWJsZSBmcmVxdWVuY3kgeyBQTmFOIH07
CiB9OwogCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotdm9pZCBhbGxvY2F0ZVN0YWNrQnlH
cmFwaENvbG9yaW5nKENvZGUmIGNvZGUpCitWZWN0b3I8U3RhY2tTbG90Kj4gYWxsb2NhdGVFc2Nh
cGVkU3RhY2tTbG90c0ltcGwoQ29kZSYgY29kZSkKIHsKLSAgICBQaGFzZVNjb3BlIHBoYXNlU2Nv
cGUoY29kZSwgImFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmciKTsKLQogICAgIC8vIEFsbG9j
YXRlIGFsbCBvZiB0aGUgZXNjYXBlZCBzbG90cyBpbiBvcmRlci4gVGhpcyBpcyBraW5kIG9mIGEg
Y3JhenkgYWxnb3JpdGhtIHRvIGFsbG93IGZvcgogICAgIC8vIHRoZSBwb3NzaWJpbGl0eSBvZiBz
dGFjayBzbG90cyBiZWluZyBhc3NpZ25lZCBmcmFtZSBvZmZzZXRzIGJlZm9yZSB3ZSBldmVuIGdl
dCBoZXJlLgotICAgIEFTU0VSVCghY29kZS5mcmFtZVNpemUoKSk7CisgICAgUkVMRUFTRV9BU1NF
UlQoIWNvZGUuZnJhbWVTaXplKCkpOwogICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBhc3NpZ25lZEVz
Y2FwZWRTdGFja1Nsb3RzOwogICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBlc2NhcGVkU3RhY2tTbG90
c1dvcmtsaXN0OwogICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkp
IHsKQEAgLTE1OCw2ICsxNTQsMzcgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5n
KENvZGUmIAogICAgICAgICBhc3NpZ24oc2xvdCwgYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90cyk7
CiAgICAgICAgIGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHMuYXBwZW5kKHNsb3QpOwogICAgIH0K
KyAgICByZXR1cm4gYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90czsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgQ29sbGVjdGlvbj4KK3ZvaWQgdXBkYXRlRnJhbWVTaXplQmFzZWRPblN0YWNrU2xvdHNJ
bXBsKENvZGUmIGNvZGUsIGNvbnN0IENvbGxlY3Rpb24mIGNvbGxlY3Rpb24pCit7CisgICAgdW5z
aWduZWQgZnJhbWVTaXplID0gMDsKKyAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNvbGxlY3Rp
b24pCisgICAgICAgIGZyYW1lU2l6ZSA9IHN0ZDo6bWF4KGZyYW1lU2l6ZSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KC1zbG90LT5vZmZzZXRGcm9tRlAoKSkpOworICAgIGNvZGUuc2V0RnJhbWVTaXpl
KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIGZyYW1lU2l6
ZSkpOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBhbGxvY2F0ZUVzY2Fw
ZWRTdGFja1Nsb3RzKENvZGUmIGNvZGUpCit7CisgICAgdXBkYXRlRnJhbWVTaXplQmFzZWRPblN0
YWNrU2xvdHNJbXBsKGNvZGUsIGFsbG9jYXRlRXNjYXBlZFN0YWNrU2xvdHNJbXBsKGNvZGUpKTsK
K30KKwordm9pZCB1cGRhdGVGcmFtZVNpemVCYXNlZE9uU3RhY2tTbG90cyhDb2RlJiBjb2RlKQor
eworICAgIHVwZGF0ZUZyYW1lU2l6ZUJhc2VkT25TdGFja1Nsb3RzSW1wbChjb2RlLCBjb2RlLnN0
YWNrU2xvdHMoKSk7Cit9CisKK3ZvaWQgYWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZyhDb2Rl
JiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiYWxsb2NhdGVTdGFj
a0J5R3JhcGhDb2xvcmluZyIpOworICAgIAorICAgIGhhbmRsZUNhbGxlZVNhdmVzKGNvZGUpOwor
ICAgIAorICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3RzID0g
YWxsb2NhdGVFc2NhcGVkU3RhY2tTbG90c0ltcGwoY29kZSk7CiAKICAgICAvLyBOb3cgd2UgaGFu
ZGxlIHRoZSBzcGlsbCBzbG90cy4KICAgICBTdGFja1Nsb3RMaXZlbmVzcyBsaXZlbmVzcyhjb2Rl
KTsKQEAgLTM3Nyw4OCArNDA0LDExIEBAIHZvaWQgYWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmlu
ZyhDb2RlJiAKICAgICAgICAgYXNzaWduKHNsb3QsIG90aGVyU2xvdHMpOwogICAgIH0KIAotICAg
IC8vIEZpZ3VyZSBvdXQgaG93IG11Y2ggc3RhY2sgd2UncmUgdXNpbmcgZm9yIHN0YWNrIHNsb3Rz
LgotICAgIHVuc2lnbmVkIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgPSAwOwotICAgIGZvciAoU3Rh
Y2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpIHsKLSAgICAgICAgZnJhbWVTaXplRm9y
U3RhY2tTbG90cyA9IHN0ZDo6bWF4KAotICAgICAgICAgICAgZnJhbWVTaXplRm9yU3RhY2tTbG90
cywKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPigtc2xvdC0+b2Zmc2V0RnJvbUZQ
KCkpKTsKLSAgICB9Ci0KLSAgICBmcmFtZVNpemVGb3JTdGFja1Nsb3RzID0gV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgZnJhbWVTaXplRm9yU3RhY2tTbG90
cyk7Ci0KLSAgICAvLyBOb3cgd2UgbmVlZCB0byBkZWR1Y2UgaG93IG11Y2ggYXJndW1lbnQgYXJl
YSB3ZSBuZWVkLgotICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7Ci0gICAgICAg
IGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgewotICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6
IGluc3QuYXJncykgewotICAgICAgICAgICAgICAgIGlmIChhcmcuaXNDYWxsQXJnKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gRm9yIG5vdywgd2UgYXNzdW1lIHRoYXQgd2UgdXNlIDggYnl0
ZXMgb2YgdGhlIGNhbGwgYXJnLiBCdXQgdGhhdCdzIG5vdAotICAgICAgICAgICAgICAgICAgICAv
LyBzdWNoIGFuIGF3ZXNvbWUgYXNzdW1wdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTQKLSAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGFyZy5vZmZzZXQoKSA+PSAwKTsKLSAgICAgICAgICAgICAg
ICAgICAgY29kZS5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplSW5CeXRlcyhhcmcub2Zmc2V0KCkgKyA4
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBjb2RlLnNldEZyYW1lU2l6ZShmcmFtZVNpemVGb3JTdGFja1Nsb3RzICsgY29kZS5jYWxs
QXJnQXJlYVNpemVJbkJ5dGVzKCkpOwotCi0gICAgLy8gRmluYWxseSwgdHJhbnNmb3JtIHRoZSBj
b2RlIHRvIHVzZSBBZGRyJ3MgaW5zdGVhZCBvZiBTdGFja1Nsb3Qncy4gVGhpcyBpcyBhIGxvc3Ns
ZXNzCi0gICAgLy8gdHJhbnNmb3JtYXRpb24gc2luY2Ugd2UgY2FuIHNlYXJjaCB0aGUgU3RhY2tT
bG90cyBhcnJheSB0byBmaWd1cmUgb3V0IHdoaWNoIFN0YWNrU2xvdCBhbnkKLSAgICAvLyBvZmZz
ZXQtZnJvbS1GUCByZWZlcnMgdG8uCi0KLSAgICAvLyBGSVhNRTogVGhpcyBtYXkgcHJvZHVjZSBh
ZGRyZXNzZXMgdGhhdCBhcmVuJ3QgdmFsaWQgaWYgd2UgZW5kIHVwIHdpdGggYSBnaW5vcm1vdXMg
c3RhY2sgZnJhbWUuCi0gICAgLy8gV2Ugd291bGQgaGF2ZSB0byBzY2F2ZW5nZSBmb3IgdGVtcG9y
YXJpZXMgaWYgdGhpcyBoYXBwZW5lZC4gRm9ydHVuYXRlbHksIHRoaXMgY2FzZSB3aWxsIGJlCi0g
ICAgLy8gZXh0cmVtZWx5IHJhcmUgc28gd2UgY2FuIGRvIGNyYXp5IHRoaW5ncyB3aGVuIGl0IGFy
aXNlcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUy
NTMwCi0KLSAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOwotICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBjb2RlKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4
ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKLSAgICAgICAg
ICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKLSAgICAgICAgICAgIGluc3Qu
Zm9yRWFjaEFyZygKLSAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9s
ZSwgQmFuaywgV2lkdGggd2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBzdGFja0Fk
ZHIgPSBbJl0gKGludDMyX3Qgb2Zmc2V0KSAtPiBBcmcgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEFyZzo6c3RhY2tBZGRyKG9mZnNldCwgY29kZS5mcmFtZVNpemUoKSwgd2lkdGgp
OwotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgQXJnOjpTdGFjazogewotICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzbG90
ID0gYXJnLnN0YWNrU2xvdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNa
RGVmKHJvbGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC0+a2luZCgpID09
IFN0YWNrU2xvdEtpbmQ6OlNwaWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xv
dC0+Ynl0ZVNpemUoKSA+IGJ5dGVzKHdpZHRoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IGhhbmRsZSB0aGlzIHNpbXBsZSBjYXNlIGJlY2F1c2Ug
aXQncyB0aGUgb25seSBvbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IGFy
aXNlczogWkRlZidzIGFyZSBvbmx5IDMyLWJpdCByaWdodCBub3cuIFNvLCB3aGVuIHdlIGhpdCB0
aGVzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2VydGlvbnMgaXQgbWVhbnMg
dGhhdCB3ZSBuZWVkIHRvIGltcGxlbWVudCB0aG9zZSBvdGhlciBraW5kcyBvZgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHplcm8gZmlsbHMuCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC0+Ynl0ZVNpemUoKSA9PSA4KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh3aWR0aCA9PSBXaWR0aDMyKTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzVmFsaWRGb3JtKFN0b3Jl
WmVybzMyLCBBcmc6OlN0YWNrKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0Lmluc2VydCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4
ICsgMSwgU3RvcmVaZXJvMzIsIGluc3Qub3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGFja0FkZHIoYXJnLm9mZnNldCgpICsgNCArIHNsb3QtPm9mZnNldEZyb21GUCgp
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
cmcgPSBzdGFja0FkZHIoYXJnLm9mZnNldCgpICsgc2xvdC0+b2Zmc2V0RnJvbUZQKCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBhcmcgPSBzdGFja0FkZHIoYXJnLm9mZnNldCgpIC0gY29kZS5mcmFtZVNpemUoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgKTsKLSAgICAgICAgfQotICAgICAgICBpbnNl
cnRpb25TZXQuZXhlY3V0ZShibG9jayk7Ci0gICAgfQorICAgIHVwZGF0ZUZyYW1lU2l6ZUJhc2Vk
T25TdGFja1Nsb3RzKGNvZGUpOworICAgIGNvZGUuc2V0U3RhY2tJc0FsbG9jYXRlZCh0cnVlKTsK
IH0KIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgogCiAjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKIAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9j
YXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcuaAkocmV2aXNpb24g
MjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNr
QnlHcmFwaENvbG9yaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE0ICszMywxOCBAQCBjbGFz
cyBDb2RlOwogCiAvLyBUaGlzIGFsbG9jYXRlcyBTdGFja1Nsb3RzIHRvIHBsYWNlcyBvbiB0aGUg
c3RhY2suIEl0IGZpcnN0IGFsbG9jYXRlcyB0aGUgcGlubmVkIG9uZXMgaW4gaW5kZXgKIC8vIG9y
ZGVyIGFuZCB0aGVuIGl0IGFsbG9jYXRlcyB0aGUgcmVzdCB1c2luZyBmaXJzdCBmaXQuIFRha2Vz
IHRoZSBvcHBvcnR1bml0eSB0byBraWxsIGRlYWQKLS8vIGFzc2lnbm1lbnRzIHRvIHN0YWNrIHNs
b3RzLCBzaW5jZSBpdCBrbm93cyB3aGljaCBvbmVzIGFyZSBsaXZlLiBBbHNvIGZpeGVzIFpEZWZz
IHRvIGFub255bW91cwotLy8gc3RhY2sgc2xvdHMuIEFsc28gY29hbGVzY2VzIHNwaWxsIHNsb3Rz
IHdoZW5ldmVyIHBvc3NpYmxlLgorLy8gYXNzaWdubWVudHMgdG8gc3RhY2sgc2xvdHMsIHNpbmNl
IGl0IGtub3dzIHdoaWNoIG9uZXMgYXJlIGxpdmUuIEFsc28gY29hbGVzY2VzIHNwaWxsIHNsb3Rz
CisvLyB3aGVuZXZlciBwb3NzaWJsZS4KIC8vCiAvLyBUaGlzIGlzIG1lYW50IHRvIGJlIGFuIG9w
dGltYWwgc3RhY2sgYWxsb2NhdG9yLCBmb2N1c2VkIG9uIGdlbmVyYXRpbmcgZ3JlYXQgY29kZS4g
SXQncyBub3QKIC8vIHBhcnRpY3VsYXJseSBmYXN0LCB0aG91Z2guCiAKIHZvaWQgYWxsb2NhdGVT
dGFja0J5R3JhcGhDb2xvcmluZyhDb2RlJik7CiAKKy8vIFRoZXNlIGFyZSB1dGlsaXRpZXMgc2hh
cmVkIGJ5IHRoaXMgcGhhc2UgYW5kIGFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNj
YW4oKS4KK3ZvaWQgYWxsb2NhdGVFc2NhcGVkU3RhY2tTbG90cyhDb2RlJik7Cit2b2lkIHVwZGF0
ZUZyYW1lU2l6ZUJhc2VkT25TdGFja1Nsb3RzKENvZGUmKTsKKwogfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEs
NiArNDEsMTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgewogCitBcmcgQXJnOjpzdGFja0FkZHIoaW50MzJfdCBvZmZzZXRGcm9tRlAsIHVuc2lnbmVk
IGZyYW1lU2l6ZSwgV2lkdGggd2lkdGgpCit7CisgICAgQXJnIHJlc3VsdCA9IEFyZzo6YWRkcihB
aXI6OlRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIG9mZnNldEZyb21GUCk7CisgICAg
aWYgKCFyZXN1bHQuaXNWYWxpZEZvcm0od2lkdGgpKSB7CisgICAgICAgIHJlc3VsdCA9IEFyZzo6
YWRkcigKKyAgICAgICAgICAgIEFpcjo6VG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJS
ZWdpc3RlciksCisgICAgICAgICAgICBvZmZzZXRGcm9tRlAgKyBmcmFtZVNpemUpOworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0OworfQorCiBib29sIEFyZzo6aXNTdGFja01lbW9yeSgpIGNvbnN0
CiB7CiAgICAgc3dpdGNoIChraW5kKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBcmcuaAkocmV2aXNpb24gMjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBcmcuaAkod29ya2luZyBjb3B5KQpAQCAtNTYwLDE3ICs1NjAsOCBAQCBwdWJsaWM6
CiAgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9Ci0KLSAgICBzdGF0aWMgQXJnIHN0YWNrQWRkcihpbnQzMl90IG9mZnNldEZyb21G
UCwgdW5zaWduZWQgZnJhbWVTaXplLCBXaWR0aCB3aWR0aCkKLSAgICB7Ci0gICAgICAgIEFyZyBy
ZXN1bHQgPSBBcmc6OmFkZHIoQWlyOjpUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLCBv
ZmZzZXRGcm9tRlApOwotICAgICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkRm9ybSh3aWR0aCkpIHsK
LSAgICAgICAgICAgIHJlc3VsdCA9IEFyZzo6YWRkcigKLSAgICAgICAgICAgICAgICBBaXI6OlRt
cChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpLAotICAgICAgICAgICAgICAg
IG9mZnNldEZyb21GUCArIGZyYW1lU2l6ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9CisgICAgCisgICAgc3RhdGljIEFyZyBzdGFja0FkZHIoaW50MzJfdCBvZmZz
ZXRGcm9tRlAsIHVuc2lnbmVkIGZyYW1lU2l6ZSwgV2lkdGgpOwogCiAgICAgLy8gSWYgeW91IGRv
bid0IHBhc3MgYSBXaWR0aCwgdGhpcyBvcHRpbWlzdGljYWxseSBhc3N1bWVzIHRoYXQgeW91J3Jl
IHVzaW5nIHRoZSByaWdodCB3aWR0aC4KICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkU2NhbGUodW5z
aWduZWQgc2NhbGUsIHN0ZDo6b3B0aW9uYWw8V2lkdGg+IHdpZHRoID0gc3RkOjpudWxsb3B0KQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCShyZXZpc2lvbiAy
MTUyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDEzIEBAIEJhc2ljQmxvY2sqIENvZGU6OmFkZEJsb2Nr
KGRvdWJsZSBmcmVxdWUKIAogU3RhY2tTbG90KiBDb2RlOjphZGRTdGFja1Nsb3QodW5zaWduZWQg
Ynl0ZVNpemUsIFN0YWNrU2xvdEtpbmQga2luZCwgQjM6OlN0YWNrU2xvdCogYjNTbG90KQogewot
ICAgIHJldHVybiBtX3N0YWNrU2xvdHMuYWRkTmV3KGJ5dGVTaXplLCBraW5kLCBiM1Nsb3QpOwor
ICAgIFN0YWNrU2xvdCogcmVzdWx0ID0gbV9zdGFja1Nsb3RzLmFkZE5ldyhieXRlU2l6ZSwga2lu
ZCwgYjNTbG90KTsKKyAgICBpZiAobV9zdGFja0lzQWxsb2NhdGVkKSB7CisgICAgICAgIHVuc2ln
bmVkIGV4dGVudCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihyZXN1bHQtPmFsaWdubWVudCgp
LCBmcmFtZVNpemUoKSArIGJ5dGVTaXplKTsKKyAgICAgICAgcmVzdWx0LT5zZXRPZmZzZXRGcm9t
RlAoLWV4dGVudCk7CisgICAgICAgIHNldEZyYW1lU2l6ZShleHRlbnQpOworICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiBTdGFja1Nsb3QqIENvZGU6OmFkZFN0YWNrU2xvdChCMzo6U3Rh
Y2tTbG90KiBiM1Nsb3QpCkBAIC0xMzgsNiArMTQ0LDI4IEBAIGJvb2wgQ29kZTo6aXNFbnRyeXBv
aW50KEJhc2ljQmxvY2sqIGJsb2MKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgQ29kZTo6
c2V0Q2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KFJlZ2lzdGVyQXRPZmZzZXRMaXN0JiYg
cmVnaXN0ZXJBdE9mZnNldExpc3QsIFN0YWNrU2xvdCogc2xvdCkKK3sKKyAgICBtX3VuY29ycmVj
dGVkQ2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0ID0gV1RGTW92ZShyZWdpc3RlckF0T2Zm
c2V0TGlzdCk7CisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiByZWdpc3RlckF0T2Zm
c2V0IDogbV91bmNvcnJlY3RlZENhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCkKKyAgICAg
ICAgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzLnNldChyZWdpc3RlckF0T2Zmc2V0LnJlZygpKTsKKyAg
ICBtX2NhbGxlZVNhdmVTdGFja1Nsb3QgPSBzbG90OworfQorCitSZWdpc3RlckF0T2Zmc2V0TGlz
dCBDb2RlOjpjYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKSBjb25zdAoreworICAgIFJl
Z2lzdGVyQXRPZmZzZXRMaXN0IHJlc3VsdCA9IG1fdW5jb3JyZWN0ZWRDYWxsZWVTYXZlUmVnaXN0
ZXJBdE9mZnNldExpc3Q7CisgICAgaWYgKFN0YWNrU2xvdCogc2xvdCA9IG1fY2FsbGVlU2F2ZVN0
YWNrU2xvdCkgeworICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gc2xvdC0+Ynl0ZVNpemUoKSAr
IHNsb3QtPm9mZnNldEZyb21GUCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gcmVzdWx0LnNp
emUoKTsgaS0tOykgeworICAgICAgICAgICAgcmVzdWx0LmF0KGkpID0gUmVnaXN0ZXJBdE9mZnNl
dCgKKyAgICAgICAgICAgICAgICByZXN1bHQuYXQoaSkucmVnKCksCisgICAgICAgICAgICAgICAg
cmVzdWx0LmF0KGkpLm9mZnNldCgpICsgb2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIENvZGU6OnJlc2V0UmVhY2hhYmlsaXR5KCkKIHsKICAg
ICBjbGVhclByZWRlY2Vzc29ycyhtX2Jsb2Nrcyk7CkBAIC0xNzAsMTIgKzE5OCwxMyBAQCB2b2lk
IENvZGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgZm9yIChTcGVjaWFs
KiBzcGVjaWFsIDogc3BlY2lhbHMoKSkKICAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGRl
ZXBEdW1wKHNwZWNpYWwpLCAiXG4iKTsKICAgICB9Ci0gICAgaWYgKG1fZnJhbWVTaXplKQotICAg
ICAgICBvdXQucHJpbnQoIkZyYW1lIHNpemU6ICIsIG1fZnJhbWVTaXplLCAiXG4iKTsKKyAgICBp
ZiAobV9mcmFtZVNpemUgfHwgbV9zdGFja0lzQWxsb2NhdGVkKQorICAgICAgICBvdXQucHJpbnQo
IkZyYW1lIHNpemU6ICIsIG1fZnJhbWVTaXplLCBtX3N0YWNrSXNBbGxvY2F0ZWQgPyAiIChBbGxv
Y2F0ZWQpIiA6ICIiLCAiXG4iKTsKICAgICBpZiAobV9jYWxsQXJnQXJlYVNpemUpCiAgICAgICAg
IG91dC5wcmludCgiQ2FsbCBhcmcgYXJlYSBzaXplOiAiLCBtX2NhbGxBcmdBcmVhU2l6ZSwgIlxu
Iik7Ci0gICAgaWYgKG1fY2FsbGVlU2F2ZVJlZ2lzdGVycy5zaXplKCkpCi0gICAgICAgIG91dC5w
cmludCgiQ2FsbGVlIHNhdmVzOiAiLCBtX2NhbGxlZVNhdmVSZWdpc3RlcnMsICJcbiIpOworICAg
IFJlZ2lzdGVyQXRPZmZzZXRMaXN0IGNhbGxlZVNhdmVSZWdpc3RlcnMgPSB0aGlzLT5jYWxsZWVT
YXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKTsKKyAgICBpZiAoY2FsbGVlU2F2ZVJlZ2lzdGVycy5z
aXplKCkpCisgICAgICAgIG91dC5wcmludCgiQ2FsbGVlIHNhdmVzOiAiLCBjYWxsZWVTYXZlUmVn
aXN0ZXJzLCAiXG4iKTsKIH0KIAogdW5zaWduZWQgQ29kZTo6ZmluZEZpcnN0QmxvY2tJbmRleCh1
bnNpZ25lZCBpbmRleCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Q29kZS5oCShyZXZpc2lvbiAyMTUyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDkgKzE4NiwyMiBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBtX2VudHJ5cG9pbnRMYWJlbHMgPSBzdGQ6OmZvcndhcmQ8VmVjdG9yPih2
ZWN0b3IpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFN0YWNrSXNBbGxvY2F0ZWQoYm9vbCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIG1fc3RhY2tJc0FsbG9jYXRlZCA9IHZhbHVlOworICAgIH0K
KyAgICAKKyAgICBib29sIHN0YWNrSXNBbGxvY2F0ZWQoKSBjb25zdCB7IHJldHVybiBtX3N0YWNr
SXNBbGxvY2F0ZWQ7IH0KKyAgICAKKyAgICAvLyBUaGlzIHNldHMgdGhlIGNhbGxlZSBzYXZlIHJl
Z2lzdGVycy4KKyAgICB2b2lkIHNldENhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdChSZWdp
c3RlckF0T2Zmc2V0TGlzdCYmLCBTdGFja1Nsb3QqKTsKIAotICAgIGNvbnN0IFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0JiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWVT
YXZlUmVnaXN0ZXJzOyB9Ci0gICAgUmVnaXN0ZXJBdE9mZnNldExpc3QmIGNhbGxlZVNhdmVSZWdp
c3RlcnMoKSB7IHJldHVybiBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7IH0KKyAgICAvLyBUaGlzIHJl
dHVybnMgdGhlIGNvcnJlY3RseSBvZmZzZXQgbGlzdCBvZiBjYWxsZWUgc2F2ZSByZWdpc3RlcnMu
CisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0
KCkgY29uc3Q7CisgICAgCisgICAgLy8gVGhpcyBqdXN0IHRlbGxzIHlvdSB3aGF0IHRoZSBjYWxs
ZWUgc2F2ZXMgYXJlLgorICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVSZWdpc3RlcnMoKSBjb25z
dCB7IHJldHVybiBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7IH0KIAogICAgIC8vIFJlY29tcHV0ZXMg
cHJlZGVjZXNzb3JzIGFuZCBkZWxldGVzIHVucmVhY2hhYmxlIGJsb2Nrcy4KICAgICB2b2lkIHJl
c2V0UmVhY2hhYmlsaXR5KCk7CkBAIC0zMjksNyArMzQyLDEwIEBAIHByaXZhdGU6CiAgICAgdW5z
aWduZWQgbV9udW1GUFRtcHMgeyAwIH07CiAgICAgdW5zaWduZWQgbV9mcmFtZVNpemUgeyAwIH07
CiAgICAgdW5zaWduZWQgbV9jYWxsQXJnQXJlYVNpemUgeyAwIH07Ci0gICAgUmVnaXN0ZXJBdE9m
ZnNldExpc3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOworICAgIGJvb2wgbV9zdGFja0lzQWxsb2Nh
dGVkIHsgZmFsc2UgfTsKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCBtX3VuY29ycmVjdGVkQ2Fs
bGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0OworICAgIFJlZ2lzdGVyU2V0IG1fY2FsbGVlU2F2
ZVJlZ2lzdGVyczsKKyAgICBTdGFja1Nsb3QqIG1fY2FsbGVlU2F2ZVN0YWNrU2xvdCB7IG51bGxw
dHIgfTsKICAgICBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrPiBtX2VudHJ5cG9pbnRzOyAvLyBUaGlz
IGlzIGVtcHR5IHVudGlsIGFmdGVyIGxvd2VyRW50cnlTd2l0Y2goKS4KICAgICBWZWN0b3I8Q0Nh
bGxIZWxwZXJzOjpMYWJlbD4gbV9lbnRyeXBvaW50TGFiZWxzOyAvLyBUaGlzIGlzIGVtcHR5IHVu
dGlsIGNvZGUgZ2VuZXJhdGlvbi4KICAgICBSZWZQdHI8V2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9y
PiBtX3dhc21Cb3VuZHNDaGVja0dlbmVyYXRvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAyMTUyMzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsMTkgKzI4LDE5IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQWlyQWxs
b2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5oIgogI2luY2x1ZGUgIkFpckFsbG9j
YXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmgiCi0jaW5jbHVkZSAiQWlyQWxsb2NhdGVSZWdp
c3RlcnNCeUxpbmVhclNjYW4uaCIKICNpbmNsdWRlICJBaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENv
bG9yaW5nLmgiCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgogI2luY2x1ZGUgIkFpckVsaW1pbmF0ZURl
YWRDb2RlLmgiCiAjaW5jbHVkZSAiQWlyRml4T2J2aW91c1NwaWxscy5oIgogI2luY2x1ZGUgIkFp
ckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oIgogI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250
ZXh0LmgiCi0jaW5jbHVkZSAiQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCIKICNpbmNsdWRlICJBaXJM
b2dSZWdpc3RlclByZXNzdXJlLmgiCiAjaW5jbHVkZSAiQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmgi
CiAjaW5jbHVkZSAiQWlyTG93ZXJFbnRyeVN3aXRjaC5oIgogI2luY2x1ZGUgIkFpckxvd2VyTWFj
cm9zLmgiCisjaW5jbHVkZSAiQWlyTG93ZXJTdGFja0FyZ3MuaCIKICNpbmNsdWRlICJBaXJPcGNv
ZGVVdGlscy5oIgogI2luY2x1ZGUgIkFpck9wdGltaXplQmxvY2tPcmRlci5oIgogI2luY2x1ZGUg
IkFpclJlcG9ydFVzZWRSZWdpc3RlcnMuaCIKQEAgLTg0LDM5ICs4NCw1MSBAQCB2b2lkIHByZXBh
cmVGb3JHZW5lcmF0aW9uKENvZGUmIGNvZGUpCiAgICAgCiAgICAgZWxpbWluYXRlRGVhZENvZGUo
Y29kZSk7CiAKLSAgICAvLyBSZWdpc3RlciBhbGxvY2F0aW9uIGZvciBhbGwgdGhlIFRtcHMgdGhh
dCBkbyBub3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgbWFjaGluZSByZWdpc3Rlci4KLSAgICAvLyBB
ZnRlciB0aGlzIHBoYXNlLCBldmVyeSBUbXAgaGFzIGEgcmVnLgotICAgIC8vCi0gICAgLy8gRm9y
IGRlYnVnZ2luZywgeW91IGNhbiB1c2Ugc3BpbGxFdmVyeXRoaW5nKCkgdG8gcHV0IGV2ZXJ5dGhp
bmcgdG8gdGhlIHN0YWNrIGJldHdlZW4gZWFjaCBJbnN0LgotICAgIGlmIChPcHRpb25zOjphaXJT
cGlsbHNFdmVyeXRoaW5nKCkpCi0gICAgICAgIHNwaWxsRXZlcnl0aGluZyhjb2RlKTsKLSAgICBl
bHNlIGlmIChjb2RlLm9wdExldmVsKCkgPj0gMikKLSAgICAgICAgYWxsb2NhdGVSZWdpc3RlcnNC
eUdyYXBoQ29sb3JpbmcoY29kZSk7Ci0gICAgZWxzZQotICAgICAgICBhbGxvY2F0ZVJlZ2lzdGVy
c0J5TGluZWFyU2Nhbihjb2RlKTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dBaXJSZWdpc3RlclBy
ZXNzdXJlKCkpIHsKLSAgICAgICAgZGF0YUxvZygiUmVnaXN0ZXIgcHJlc3N1cmUgYWZ0ZXIgcmVn
aXN0ZXIgYWxsb2NhdGlvbjpcbiIpOwotICAgICAgICBsb2dSZWdpc3RlclByZXNzdXJlKGNvZGUp
OworICAgIGlmICghT3B0aW9uczo6YWlyU3BpbGxzRXZlcnl0aGluZygpICYmIGNvZGUub3B0TGV2
ZWwoKSA8PSAxKSB7CisgICAgICAgIC8vIFdoZW4gd2UncmUgY29tcGlsaW5nIHF1aWNrbHksIHdl
IGRvIHJlZ2lzdGVyIGFuZCBzdGFjayBhbGxvY2F0aW9uIGluIG9uZSBsaW5lYXIgc2NhbgorICAg
ICAgICAvLyBwaGFzZS4gSXQncyBmYXN0IGJlY2F1c2UgaXQgY29tcHV0ZXMgbGl2ZW5lc3Mgb25s
eSBvbmNlLgorICAgICAgICBhbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuKGNv
ZGUpOworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0FpclJlZ2lzdGVyUHJlc3N1
cmUoKSkgeworICAgICAgICAgICAgZGF0YUxvZygiUmVnaXN0ZXIgcHJlc3N1cmUgYWZ0ZXIgcmVn
aXN0ZXIgYWxsb2NhdGlvbjpcbiIpOworICAgICAgICAgICAgbG9nUmVnaXN0ZXJQcmVzc3VyZShj
b2RlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gV2UgbWF5IHN0aWxsIG5lZWQg
dG8gZG8gcG9zdC1hbGxvY2F0aW9uIGxvd2VyaW5nLiBEb2luZyBpdCBhZnRlciBib3RoIHJlZ2lz
dGVyIGFuZAorICAgICAgICAvLyBzdGFjayBhbGxvY2F0aW9uIGlzIGxlc3Mgb3B0aW1hbCwgYnV0
IGl0IHdvcmtzIGZpbmUuCisgICAgICAgIGxvd2VyQWZ0ZXJSZWdBbGxvYyhjb2RlKTsKKyAgICB9
IGVsc2UgeworICAgICAgICAvLyBSZWdpc3RlciBhbGxvY2F0aW9uIGZvciBhbGwgdGhlIFRtcHMg
dGhhdCBkbyBub3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgbWFjaGluZQorICAgICAgICAvLyByZWdp
c3Rlci4gQWZ0ZXIgdGhpcyBwaGFzZSwgZXZlcnkgVG1wIGhhcyBhIHJlZy4KKyAgICAgICAgLy8K
KyAgICAgICAgLy8gRm9yIGRlYnVnZ2luZywgeW91IGNhbiB1c2Ugc3BpbGxFdmVyeXRoaW5nKCkg
dG8gcHV0IGV2ZXJ5dGhpbmcgdG8gdGhlIHN0YWNrIGJldHdlZW4KKyAgICAgICAgLy8gZWFjaCBJ
bnN0LgorICAgICAgICBpZiAoT3B0aW9uczo6YWlyU3BpbGxzRXZlcnl0aGluZygpKQorICAgICAg
ICAgICAgc3BpbGxFdmVyeXRoaW5nKGNvZGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBh
bGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZyhjb2RlKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChPcHRpb25zOjpsb2dBaXJSZWdpc3RlclByZXNzdXJlKCkpIHsKKyAgICAgICAgICAgIGRh
dGFMb2coIlJlZ2lzdGVyIHByZXNzdXJlIGFmdGVyIHJlZ2lzdGVyIGFsbG9jYXRpb246XG4iKTsK
KyAgICAgICAgICAgIGxvZ1JlZ2lzdGVyUHJlc3N1cmUoY29kZSk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChjb2RlLm9wdExldmVsKCkgPj0gMikgeworICAgICAgICAgICAgLy8g
VGhpcyByZXBsYWNlcyB1c2VzIG9mIHNwaWxsIHNsb3RzIHdpdGggcmVnaXN0ZXJzIG9yIGNvbnN0
YW50cyBpZiBwb3NzaWJsZS4gSXQKKyAgICAgICAgICAgIC8vIGRvZXMgdGhpcyBieSBtaW5pbWl6
aW5nIHRoZSBhbW91bnQgdGhhdCB3ZSBwZXJ0dXJiIHRoZSBhbHJlYWR5LWNob3NlbiByZWdpc3Rl
cgorICAgICAgICAgICAgLy8gYWxsb2NhdGlvbi4gSXQgbWF5IGV4dGVuZCB0aGUgbGl2ZSByYW5n
ZXMgb2YgcmVnaXN0ZXJzIHRob3VnaC4KKyAgICAgICAgICAgIGZpeE9idmlvdXNTcGlsbHMoY29k
ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxvd2VyQWZ0ZXJSZWdBbGxvYyhjb2Rl
KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgZG9lcyBmaXJzdC1maXQgYWxsb2NhdGlvbiBv
ZiBzdGFjayBzbG90cyB1c2luZyBhbiBpbnRlcmZlcmVuY2UgZ3JhcGggcGx1cyBhCisgICAgICAg
IC8vIGJ1bmNoIG9mIG90aGVyIG9wdGltaXphdGlvbnMuCisgICAgICAgIGFsbG9jYXRlU3RhY2tC
eUdyYXBoQ29sb3JpbmcoY29kZSk7CiAgICAgfQogICAgIAotICAgIGlmIChjb2RlLm9wdExldmVs
KCkgPj0gMikgewotICAgICAgICAvLyBUaGlzIHJlcGxhY2VzIHVzZXMgb2Ygc3BpbGwgc2xvdHMg
d2l0aCByZWdpc3RlcnMgb3IgY29uc3RhbnRzIGlmIHBvc3NpYmxlLiBJdCBkb2VzIHRoaXMgYnkK
LSAgICAgICAgLy8gbWluaW1pemluZyB0aGUgYW1vdW50IHRoYXQgd2UgcGVydHVyYiB0aGUgYWxy
ZWFkeS1jaG9zZW4gcmVnaXN0ZXIgYWxsb2NhdGlvbi4gSXQgbWF5IGV4dGVuZAotICAgICAgICAv
LyB0aGUgbGl2ZSByYW5nZXMgb2YgcmVnaXN0ZXJzIHRob3VnaC4KLSAgICAgICAgZml4T2J2aW91
c1NwaWxscyhjb2RlKTsKLSAgICB9Ci0KLSAgICBsb3dlckFmdGVyUmVnQWxsb2MoY29kZSk7Ci0K
LSAgICAvLyBQcmlvciB0byB0aGlzIHBvaW50IHRoZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUgaXMg
aW1wbGljaXQuIFRoaXMgbWFrZXMgaXQgZXhwbGljaXQuIEl0IGFsc28KLSAgICAvLyBkb2VzIHRo
aW5ncyBsaWtlIGlkZW50aWZ5IHdoaWNoIGNhbGxlZS1zYXZlcyB3ZSdyZSB1c2luZyBhbmQgc2F2
ZXMgdGhlbS4KLSAgICBoYW5kbGVDYWxsZWVTYXZlcyhjb2RlKTsKLSAgICAKLSAgICAvLyBUaGlz
IHR1cm5zIGFsbCBTdGFjayBhbmQgQ2FsbEFyZyBBcmdzIGludG8gQWRkciBhcmdzIHRoYXQgdXNl
IHRoZSBmcmFtZSBwb2ludGVyLiBJdCBkb2VzCi0gICAgLy8gdGhpcyBieSBmaXJzdC1maXQgYWxs
b2NhdGluZyBzdGFjayBzbG90cy4gSXQgc2hvdWxkIGJlIHByZXR0eSBkYXJuIGNsb3NlIHRvIG9w
dGltYWwsIHNvIHdlCi0gICAgLy8gc2hvdWxkbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhpcyB2
ZXJ5IG11Y2guCi0gICAgYWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZyhjb2RlKTsKKyAgICAv
LyBUaGlzIHR1cm5zIGFsbCBTdGFjayBhbmQgQ2FsbEFyZyBBcmdzIGludG8gQWRkciBhcmdzIHRo
YXQgdXNlIHRoZSBmcmFtZSBwb2ludGVyLgorICAgIGxvd2VyU3RhY2tBcmdzKGNvZGUpOwogICAg
IAogICAgIC8vIElmIHdlIGNvYWxlc2NlZCBtb3ZlcyB0aGVuIHdlIGNhbiB1bmJyZWFrIGNyaXRp
Y2FsIGVkZ2VzLiBUaGlzIGlzIHRoZSBtYWluIHJlYXNvbiBmb3IgdGhpcwogICAgIC8vIHBoYXNl
LgpAQCAtMjEyLDcgKzIyNCw3IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxw
ZXJzJiAKICAgICAgICAgICAgIGlmIChjb2RlLmZyYW1lU2l6ZSgpKQogICAgICAgICAgICAgICAg
IGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNvZGUuZnJhbWVTaXplKCkp
LCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5jYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9m
ZnNldCYgZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpCiAgICAgICAgICAgICAgICAg
ICAgIGppdC5zdG9yZVB0cihlbnRyeS5yZWcoKS5ncHIoKSwgYXJnRm9yKGVudHJ5KSk7CiAgICAg
ICAgICAgICAgICAgZWxzZQpAQCAtMjQ5LDcgKzI2MSw3IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYg
Y29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgICAgIC8vIGhhdmUgdGhpcyBvdmVycmlkZS4K
ICAgICAgICAgICAgIGF1dG8gc3RhcnQgPSBqaXQubGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCk7
CiAgICAgICAgICAgICBpZiAoY29kZS5mcmFtZVNpemUoKSkgewotICAgICAgICAgICAgICAgIGZv
ciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdpc3Rl
cnMoKSkgeworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50
cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgaml0LmxvYWRQdHIoYXJnRm9yKGVudHJ5KSwgZW50cnkucmVnKCkuZ3ByKCkpOwogICAgICAg
ICAgICAgICAgICAgICBlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckhhbmRsZUNhbGxlZVNhdmVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAkocmV2aXNpb24gMjE1MjM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMCwxNCArMzAsMTEgQEAKIAogI2luY2x1ZGUgIkFpckNvZGUuaCIK
ICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgotI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCiB2b2lk
IGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmIGNvZGUpCiB7Ci0gICAgUGhhc2VTY29wZSBwaGFzZVNj
b3BlKGNvZGUsICJoYW5kbGVDYWxsZWVTYXZlcyIpOwotCiAgICAgUmVnaXN0ZXJTZXQgdXNlZENh
bGxlZVNhdmVzOwogCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKQEAgLTYx
LDE2ICs1OCwxNSBAQCB2b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmIGNvZGUpCiAgICAgaWYg
KCF1c2VkQ2FsbGVlU2F2ZXMubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkgPSBSZWdpc3RlckF0T2Zmc2V0TGlz
dCh1c2VkQ2FsbGVlU2F2ZXMpOworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IGNhbGxlZVNhdmVS
ZWdpc3RlcnMgPSBSZWdpc3RlckF0T2Zmc2V0TGlzdCh1c2VkQ2FsbGVlU2F2ZXMpOwogCiAgICAg
c2l6ZV90IGJ5dGVTaXplID0gMDsKLSAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVu
dHJ5IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpCisgICAgZm9yIChjb25zdCBSZWdpc3Rl
ckF0T2Zmc2V0JiBlbnRyeSA6IGNhbGxlZVNhdmVSZWdpc3RlcnMpCiAgICAgICAgIGJ5dGVTaXpl
ID0gc3RkOjptYXgoc3RhdGljX2Nhc3Q8c2l6ZV90PigtZW50cnkub2Zmc2V0KCkpLCBieXRlU2l6
ZSk7CiAKLSAgICBTdGFja1Nsb3QqIHNhdmVzQXJlYSA9IGNvZGUuYWRkU3RhY2tTbG90KGJ5dGVT
aXplLCBTdGFja1Nsb3RLaW5kOjpMb2NrZWQpOwotICAgIC8vIFRoaXMgaXMgYSBiaXQgd2VpcmQg
c2luY2Ugd2UgY291bGQgaGF2ZSBhbHJlYWR5IHBpbm5lZCBhIGRpZmZlcmVudCBzdGFjayBzbG90
IHRvIHRoaXMKLSAgICAvLyBhcmVhLiBBbHNvLCBvdXIgcnVudGltZSBkb2VzIG5vdCByZXF1aXJl
IHVzIHRvIHBpbiB0aGUgc2F2ZXMgYXJlYS4gTWF5YmUgd2Ugc2hvdWxkbid0IHBpbiBpdD8KLSAg
ICBzYXZlc0FyZWEtPnNldE9mZnNldEZyb21GUCgtYnl0ZVNpemUpOworICAgIGNvZGUuc2V0Q2Fs
bGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KAorICAgICAgICBXVEZNb3ZlKGNhbGxlZVNhdmVS
ZWdpc3RlcnMpLAorICAgICAgICBjb2RlLmFkZFN0YWNrU2xvdChieXRlU2l6ZSwgU3RhY2tTbG90
S2luZDo6TG9ja2VkKSk7CiB9CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxl
ZVNhdmVzLmgJKHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw4ICszMSw5IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UKIAogY2xhc3MgQ29kZTsKIAot
Ly8gVGhpcyBwaGFzZSBpZGVudGlmaWVzIGNhbGxlZS1zYXZlIHJlZ2lzdGVycyBhbmQgYWRkcyBj
b2RlIHRvIHNhdmUvcmVzdG9yZSB0aGVtIGluIHRoZQotLy8gcHJvbG9ndWUvZXBpbG9ndWUgdG8g
dGhlIGNvZGUuIEl0J3MgYSBtYW5kYXRvcnkgcGhhc2UuCisvLyBUaGlzIHV0aWxpdHkgaWRlbnRp
ZmllcyBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgYW5kIHRlbGxzIENvZGUuIEl0J3MgY2FsbGVkIGZy
b20gcGhhc2VzIHRoYXQKKy8vIGRvIHN0YWNrIGFsbG9jYXRpb24uIFdlIGRvbid0IGRvIGl0IGF0
IHRoZSBlbmQgb2YgcmVnaXN0ZXIgYWxsb2NhdGlvbiBiZWNhdXNlIHRoZSByZWFsIGVuZAorLy8g
b2YgcmVnaXN0ZXIgYWxsb2NhdGlvbiBpcyBqdXN0IGJlZm9yZSBzdGFjayBhbGxvY2F0aW9uLgog
CiAvLyBGSVhNRTogSXQgd291bGQgYmUgY29vbCB0byBtYWtlIHRoaXMgbW9yZSBpbnRlcmFjdGl2
ZSB3aXRoIHRoZSBBaXIgY2xpZW50IGFuZCBhbHNvIG1vcmUKIC8vIHBvd2VyZnVsLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJl
Z0FsbG9jLmNwcAkocmV2aXNpb24gMjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3
NSw3IEBAIHZvaWQgbG93ZXJBZnRlclJlZ0FsbG9jKENvZGUmIGNvZGUpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIEhhc2hNYXA8SW5zdCosIFJlZ2lzdGVyU2V0PiB1c2VkUmVnaXN0ZXJzOwotCisg
ICAgCiAgICAgUmVnTGl2ZW5lc3MgbGl2ZW5lc3MoY29kZSk7CiAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IGNvZGUpIHsKICAgICAgICAgUmVnTGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENh
bGMobGl2ZW5lc3MsIGJsb2NrKTsKQEAgLTk2LDEzICs5NiwyOSBAQCB2b2lkIGxvd2VyQWZ0ZXJS
ZWdBbGxvYyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMuYWRkKCZp
bnN0LCBzZXQpOwogICAgICAgICB9CiAgICAgfQotCisgICAgCisgICAgc3RkOjphcnJheTxzdGQ6
OmFycmF5PFN0YWNrU2xvdCosIDI+LCBudW1CYW5rcz4gc2xvdHM7CisgICAgZm9yRWFjaEJhbmso
CisgICAgICAgIFsmXSAoQmFuayBiYW5rKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgMjsgKytpKQorICAgICAgICAgICAgICAgIHNsb3RzW2JhbmtdW2ldID0gbnVsbHB0
cjsKKyAgICAgICAgfSk7CisKKyAgICAvLyBJZiB3ZSBydW4gYWZ0ZXIgc3RhY2sgYWxsb2NhdGlv
biB0aGVuIHdlIGNhbm5vdCB1c2UgdGhvc2UgY2FsbGVlIHNhdmVzIHRoYXQgYXJlbid0IGluCisg
ICAgLy8gdGhlIGNhbGxlZSBzYXZlIGxpc3QuIE5vdGUgdGhhdCB3ZSBhcmUgb25seSBydW4gYWZ0
ZXIgc3RhY2sgYWxsb2NhdGlvbiBpbiAtTzEsIHNvIHRoaXMKKyAgICAvLyBraW5kIG9mIHNsb3Ag
aXMgT0suCisgICAgUmVnaXN0ZXJTZXQgYmxhY2tsaXN0ZWRDYWxsZWVTYXZlczsKKyAgICBpZiAo
Y29kZS5zdGFja0lzQWxsb2NhdGVkKCkpIHsKKyAgICAgICAgYmxhY2tsaXN0ZWRDYWxsZWVTYXZl
cyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgIGJsYWNrbGlz
dGVkQ2FsbGVlU2F2ZXMuZXhjbHVkZShjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAg
fQorICAgIAogICAgIGF1dG8gZ2V0U2NyYXRjaGVzID0gWyZdIChSZWdpc3RlclNldCBzZXQsIEJh
bmsgYmFuaykgLT4gc3RkOjphcnJheTxBcmcsIDI+IHsKICAgICAgICAgc3RkOjphcnJheTxBcmcs
IDI+IHJlc3VsdDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI7ICsraSkgewog
ICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgICAgICAgICAgZm9yIChSZWcgcmVn
IDogY29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKGJhbmspKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFzZXQuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXNldC5nZXQocmVnKSAmJiAh
YmxhY2tsaXN0ZWRDYWxsZWVTYXZlcy5nZXQocmVnKSkgewogICAgICAgICAgICAgICAgICAgICBy
ZXN1bHRbaV0gPSBUbXAocmVnKTsKICAgICAgICAgICAgICAgICAgICAgc2V0LnNldChyZWcpOwog
ICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CkBAIC0xMTAsMTAgKzEyNiwxMCBAQCB2
b2lkIGxvd2VyQWZ0ZXJSZWdBbGxvYyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgICAgICBy
ZXN1bHRbaV0gPSBBcmc6OnN0YWNrKAotICAgICAgICAgICAgICAgICAgICBjb2RlLmFkZFN0YWNr
U2xvdCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzKGNvbnNlcnZhdGl2ZVdpZHRoKGJh
bmspKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdEtpbmQ6OlNwaWxsKSk7Cisg
ICAgICAgICAgICAgICAgU3RhY2tTbG90KiYgc2xvdCA9IHNsb3RzW2JhbmtdW2ldOworICAgICAg
ICAgICAgICAgIGlmICghc2xvdCkKKyAgICAgICAgICAgICAgICAgICAgc2xvdCA9IGNvZGUuYWRk
U3RhY2tTbG90KGJ5dGVzKGNvbnNlcnZhdGl2ZVdpZHRoKGJhbmspKSwgU3RhY2tTbG90S2luZDo6
U3BpbGwpOworICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IEFyZzo6c3RhY2soc2xvdHNbYmFu
a11baV0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyU3Rh
Y2tBcmdzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckxvd2VyU3RhY2tBcmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQWlyTG93ZXJTdGFja0FyZ3MuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmdJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5o
IgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVz
LmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50
LmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBsb3dlclN0YWNrQXJncyhDb2RlJiBjb2Rl
KQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAibG93ZXJTdGFja0FyZ3MiKTsK
KyAgICAKKyAgICAvLyBOb3cgd2UgbmVlZCB0byBkZWR1Y2UgaG93IG11Y2ggYXJndW1lbnQgYXJl
YSB3ZSBuZWVkLgorICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAg
IGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6
IGluc3QuYXJncykgeworICAgICAgICAgICAgICAgIGlmIChhcmcuaXNDYWxsQXJnKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gRm9yIG5vdywgd2UgYXNzdW1lIHRoYXQgd2UgdXNlIDggYnl0
ZXMgb2YgdGhlIGNhbGwgYXJnLiBCdXQgdGhhdCdzIG5vdAorICAgICAgICAgICAgICAgICAgICAv
LyBzdWNoIGFuIGF3ZXNvbWUgYXNzdW1wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTQKKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGFyZy5vZmZzZXQoKSA+PSAwKTsKKyAgICAgICAgICAgICAg
ICAgICAgY29kZS5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplSW5CeXRlcyhhcmcub2Zmc2V0KCkgKyA4
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBjb2RlLnNldEZyYW1lU2l6ZShjb2RlLmZyYW1lU2l6ZSgpICsgY29kZS5jYWxsQXJnQXJl
YVNpemVJbkJ5dGVzKCkpOworCisgICAgLy8gRmluYWxseSwgdHJhbnNmb3JtIHRoZSBjb2RlIHRv
IHVzZSBBZGRyJ3MgaW5zdGVhZCBvZiBTdGFja1Nsb3Qncy4gVGhpcyBpcyBhIGxvc3NsZXNzCisg
ICAgLy8gdHJhbnNmb3JtYXRpb24gc2luY2Ugd2UgY2FuIHNlYXJjaCB0aGUgU3RhY2tTbG90cyBh
cnJheSB0byBmaWd1cmUgb3V0IHdoaWNoIFN0YWNrU2xvdCBhbnkKKyAgICAvLyBvZmZzZXQtZnJv
bS1GUCByZWZlcnMgdG8uCisKKyAgICAvLyBGSVhNRTogVGhpcyBtYXkgcHJvZHVjZSBhZGRyZXNz
ZXMgdGhhdCBhcmVuJ3QgdmFsaWQgaWYgd2UgZW5kIHVwIHdpdGggYSBnaW5vcm1vdXMgc3RhY2sg
ZnJhbWUuCisgICAgLy8gV2Ugd291bGQgaGF2ZSB0byBzY2F2ZW5nZSBmb3IgdGVtcG9yYXJpZXMg
aWYgdGhpcyBoYXBwZW5lZC4gRm9ydHVuYXRlbHksIHRoaXMgY2FzZSB3aWxsIGJlCisgICAgLy8g
ZXh0cmVtZWx5IHJhcmUgc28gd2UgY2FuIGRvIGNyYXp5IHRoaW5ncyB3aGVuIGl0IGFyaXNlcy4K
KyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNTMwCisK
KyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsg
aW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgIElu
c3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIGluc3QuZm9yRWFj
aEFyZygKKyAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQmFu
aywgV2lkdGggd2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBzdGFja0FkZHIgPSBb
Jl0gKGludDMyX3Qgb2Zmc2V0KSAtPiBBcmcgeworICAgICAgICAgICAgICAgICAgICAgICAgQXJn
IHJlc3VsdCA9IEFyZzo6c3RhY2tBZGRyKG9mZnNldCwgY29kZS5mcmFtZVNpemUoKSwgd2lkdGgp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJGQVRBTDogQ291bGQgbm90IGNyZWF0ZSBzdGFjayByZWZl
cmVuY2UgZm9yIG9mZnNldCA9ICIsIG9mZnNldCwgIiBhbmQgd2lkdGggPSAiLCB3aWR0aCwgIlxu
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ29kZTpcbiIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiRkFUQUw6IENvdWxkIG5vdCBjcmVhdGUgc3RhY2sgcmVmZXJl
bmNlIGZvciBvZmZzZXQgPSAiLCBvZmZzZXQsICIgYW5kIHdpZHRoID0gIiwgd2lkdGgsICJcbiIp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQXJnOjpTdGFjazogeworICAgICAgICAgICAgICAgICAgICAgICAgU3Rh
Y2tTbG90KiBzbG90ID0gYXJnLnN0YWNrU2xvdCgpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKEFyZzo6aXNaRGVmKHJvbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xv
dC0+a2luZCgpID09IFN0YWNrU2xvdEtpbmQ6OlNwaWxsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJiYgc2xvdC0+Ynl0ZVNpemUoKSA+IGJ5dGVzKHdpZHRoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IGhhbmRsZSB0aGlzIHNpbXBsZSBj
YXNlIGJlY2F1c2UgaXQncyB0aGUgb25seSBvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB0aGF0IGFyaXNlczogWkRlZidzIGFyZSBvbmx5IDMyLWJpdCByaWdodCBub3cuIFNvLCB3
aGVuIHdlIGhpdCB0aGVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2VydGlv
bnMgaXQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGltcGxlbWVudCB0aG9zZSBvdGhlciBraW5kcyBv
ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHplcm8gZmlsbHMuCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC0+Ynl0ZVNpemUoKSA9PSA4KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh3aWR0aCA9PSBXaWR0
aDMyKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzVmFs
aWRGb3JtKFN0b3JlWmVybzMyLCBBcmc6OlN0YWNrKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5zdEluZGV4ICsgMSwgU3RvcmVaZXJvMzIsIGluc3Qub3JpZ2luLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGFja0FkZHIoYXJnLm9mZnNldCgpICsgNCArIHNsb3QtPm9m
ZnNldEZyb21GUCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBhcmcgPSBzdGFja0FkZHIoYXJnLm9mZnNldCgpICsgc2xvdC0+b2Zmc2V0RnJv
bUZQKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgICAg
ICAgICAgICAgICAgICBhcmcgPSBzdGFja0FkZHIoYXJnLm9mZnNldCgpIC0gY29kZS5mcmFtZVNp
emUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgKTsKKyAgICAgICAgfQor
ICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorfQorCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlclN0YWNrQXJn
cy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93
ZXJTdGFja0FyZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIHR1cm5zIHN0YWNrIGFuZCBjYWxsQXJn
IHJlZmVyZW5jZXMgaW50byBhY3R1YWwgRlAtcmVsYXRpdmUgb3IgU1AtcmVsYXRpdmUgYWRkcmVz
c2VzLgorLy8gQWxzbyBmaXhlcyBaRGVmcyB0byBhbm9ueW1vdXMgc3RhY2sgc2xvdHMuCisKK3Zv
aWQgbG93ZXJTdGFja0FyZ3MoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAyMTUyMzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3
IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKICAgICAgICAgcmV0
dXJuOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWdpc3RlckF0T2Zmc2V0TGlzdD4gcmVn
aXN0ZXJPZmZzZXRzID0KLSAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxSZWdpc3RlckF0T2Zmc2V0
TGlzdD4oc3RhdGUucHJvYy0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICAgICAgc3RkOjpt
YWtlX3VuaXF1ZTxSZWdpc3RlckF0T2Zmc2V0TGlzdD4oc3RhdGUucHJvYy0+Y2FsbGVlU2F2ZVJl
Z2lzdGVyQXRPZmZzZXRMaXN0KCkpOwogICAgIGlmIChzaG91bGREdW1wRGlzYXNzZW1ibHkoKSkK
ICAgICAgICAgZGF0YUxvZygiVW53aW5kIGluZm8gZm9yICIsIENvZGVCbG9ja1dpdGhKSVRUeXBl
KHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpLCAiOiAiLCAqcmVnaXN0
ZXJPZmZzZXRzLCAiXG4iKTsKICAgICBzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jay0+c2V0Q2FsbGVl
U2F2ZVJlZ2lzdGVycyhXVEZNb3ZlKHJlZ2lzdGVyT2Zmc2V0cykpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuaAkocmV2aXNpb24g
MjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBlbnVtIE9m
ZnNldEJhc2VUeXBlIHsgRnJhbWVQb2ludGVyQmFzZWQsIFplcm9CYXNlZCB9OwogCiAgICAgUmVn
aXN0ZXJBdE9mZnNldExpc3QoKTsKLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdChSZWdpc3RlclNl
dCwgT2Zmc2V0QmFzZVR5cGUgPSBGcmFtZVBvaW50ZXJCYXNlZCk7CisgICAgZXhwbGljaXQgUmVn
aXN0ZXJBdE9mZnNldExpc3QoUmVnaXN0ZXJTZXQsIE9mZnNldEJhc2VUeXBlID0gRnJhbWVQb2lu
dGVyQmFzZWQpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJ
KHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyOCw3ICsxMzI4LDcgQEAgRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bgogICAgICAgICBCMzo6cHJlcGFyZUZv
ckdlbmVyYXRpb24ocHJvY2VkdXJlKTsKICAgICAgICAgQjM6OmdlbmVyYXRlKHByb2NlZHVyZSwg
KmNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCk7CiAgICAgICAgIGNvbXBpbGF0
aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMgPSBwcm9jZWR1cmUucmVsZWFzZUJ5
cHJvZHVjdHMoKTsKLSAgICAgICAgcmVzdWx0LT53YXNtRW50cnlwb2ludC5jYWxsZWVTYXZlUmVn
aXN0ZXJzID0gcHJvY2VkdXJlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAgcmVzdWx0
LT53YXNtRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcHJvY2VkdXJlLmNhbGxlZVNh
dmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOwogICAgIH0KIAogICAgIGNyZWF0ZUpTVG9XYXNtV3Jh
cHBlcihjb21waWxhdGlvbkNvbnRleHQsICpyZXN1bHQsIHNpZ25hdHVyZSwgaW5mbywgbW9kZSk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306874</attachid>
            <date>2017-04-11 16:53:06 -0700</date>
            <delta_ts>2017-04-11 16:57:54 -0700</delta_ts>
            <desc>getting closer to done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>111293</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE1MjM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2IEBA
CisyMDE3LTA0LTExICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgLU8xIHNob3VsZCBub3QgYWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNzQyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBPbmUgb2YgQjMg
LU8xJ3MgbG9uZ2VzdCBydW5uaW5nIHBoYXNlcyBpcyBhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9y
aW5nLiBPbmUgYXBwcm9hY2ggdG8KKyAgICAgICAgdGhpcyB3b3VsZCBiZSB0byBtYWtlIHRoYXQg
cGhhc2UgY2hlYXBlci4gQnV0IGl0J3Mgd2VpcmQgdGhhdCB0aGlzIHBoYXNlIHJlcnVucworICAg
ICAgICBsaXZlbmVzcyBhZnRlciByZWdpc3RlciBhbGxvY2F0aW9uIGFscmVhZHkgcmFuIGxpdmVu
ZXNzLiBJZiBvbmx5IGl0IGNvdWxkIHJldXNlIHRoZQorICAgICAgICBsaXZlbmVzcyBjb21wdXRl
ZCBieSByZWdpc3RlciBhbGxvY2F0aW9uIHRoZW4gaXQgd291bGQgcnVuIGEgbG90IGZhc3Rlci4g
QXQgLU8yLCB3ZSBkbworICAgICAgICBub3Qgd2FudCB0aGlzLCBzaW5jZSB3ZSBydW4gcGhhc2Vz
IGJldHdlZW4gcmVnaXN0ZXIgYWxsb2NhdGlvbiBhbmQgc3RhY2sgYWxsb2NhdGlvbiwKKyAgICAg
ICAgYW5kIHRob3NlIHBoYXNlcyBhcmUgZnJlZSB0byBjaGFuZ2UgdGhlIGxpdmVuZXNzIG9mIHNw
aWxsIHNsb3RzIChpbiBmYWN0LAorICAgICAgICBmaXhPYnZpb3VzU3BpbGxzIHdpbGwgYm90aCBz
aG9ydGVuIGFuZCBsZW5ndGhlbiBsaXZlIHJhbmdlcyBiZWNhdXNlIG9mIGxvYWQgYW5kIHN0b3Jl
CisgICAgICAgIGVsaW1pbmF0aW9uLCByZXNwZWN0aXZlbHkpLiBCdXQgYXQgLU8xLCB3ZSBkb24n
dCByZWFsbHkgbmVlZCB0byBydW4gYW55IHBoYXNlcyBiZXR3ZWVuCisgICAgICAgIHJlZ2lzdGVy
IGFuZCBzdGFjayBhbGxvY2F0aW9uLgorICAgICAgICAKKyAgICAgICAgVGhpcyBjaGFuZ2VzIEFp
cidzIGJhY2tlbmQgaW4gdGhlIGZvbGxvd2luZyB3YXlzOgorICAgICAgICAKKyAgICAgICAgLSBM
aW5lYXIgc2NhbiBkb2VzIHN0YWNrIGFsbG9jYXRpb24uIFRoaXMgbWVhbnMgdGhhdCB3ZSBkb24n
dCBuZWVkIHRvIHJ1bgorICAgICAgICAgIGFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcgYXQg
YWxsLiBJbiByZWFsaXR5LCB3ZSByZXVzZSBzb21lIG9mIGl0cyBpbm5hcmRzLCBidXQKKyAgICAg
ICAgICB3ZSBkb24ndCBydW4gdGhlIGV4cGVuc2l2ZSBwYXJ0IG9mIGl0IChsaXZlbmVzcy0+aW50
ZXJmZXJlbmNlLT5jb2FsZXNjaW5nLT5jb2xvcmluZykuCisgICAgICAgIAorICAgICAgICAtIFBo
YXNlcyB0aGF0IHByZXZpb3VzbHkgcmFuIGJldHdlZW4gcmVnaXN0ZXIgYW5kIHN0YWNrIGFsbG9j
YXRpb24gYXJlIHRha2VuIGNhcmUgb2YsCisgICAgICAgICAgZWFjaCBpbiBpdHMgb3duIHNwZWNp
YWwgd2F5OgorICAgICAgICAgIAorICAgICAgICAgIC0+IGhhbmRsZUNhbGxlU2F2ZXM6IHRoaXMg
aXMgbm93IGEgdXRpbGl0eSBmdW5jdGlvbiBjYWxsZWQgYnkgYm90aAorICAgICAgICAgICAgIGFs
bG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcgYW5kIGFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tC
eUxpbmVhclNjYW4uCisgICAgICAgICAgCisgICAgICAgICAgLT4gZml4T2J2aW91c1NwaWxsczog
d2UgZGlkbid0IHJ1biB0aGlzIGF0IC1PMSwgc28gbm90aGluZyBuZWVkcyB0byBiZSBkb25lLgor
ICAgICAgICAgIAorICAgICAgICAgIC0+IGxvd2VyQWZ0ZXJSZWdBbGxvYzogdGhpcyBuZWVkZWQg
dG8gYmUgYWJsZSB0byBydW4gYmVmb3JlIHN0YWNrIGFsbG9jYXRpb24gYmVjYXVzZQorICAgICAg
ICAgICAgIGl0IGNvdWxkIGNoYW5nZSByZWdpc3RlciB1c2FnZSAodmlzIGEgdmlzIGNhbGxlZSBz
YXZlcykgYW5kIGl0IGNvdWxkIGludHJvZHVjZQorICAgICAgICAgICAgIHNwaWxsIHNsb3RzLiBJ
IGNoYW5nZWQgdGhpcyBwaGFzZSB0byBoYXZlIGEgc2Vjb25kYXJ5IG1vZGUgZm9yIHdoZW4gaXQg
cnVucyBhZnRlcgorICAgICAgICAgICAgIHN0YWNrIGFsbG9jYXRpb24uCisgICAgICAgIAorICAg
ICAgICAtIFRoZSBwYXJ0IG9mIGFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcgdGhhdCBsb3dl
cmVkIHN0YWNrIGFkZHJlc3NlcyBhbmQgdG9vayBjYXJlCisgICAgICAgICAgb2YgdGhlIGNhbGwg
YXJnIGFyZWEgaXMgbm93IGEgc2VwYXJhdGUgcGhhc2UgY2FsbGVkIGxvd2VyU3RhY2tBcmdzLiBX
ZSBydW4gdGhpcyBwaGFzZQorICAgICAgICAgIHJlZ2FyZGxlc3Mgb2Ygb3B0aW1pemF0aW9uIGxl
dmVsLiBJdCdzIGEgY2hlYXAgYW5kIGdlbmVyYWwgbG93ZXJpbmcuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGlzIGEgWFglIChPT1BTISkgc3BlZWQtdXAgb24gd2FzbSAtTzEgY29tcGlsZSB0aW1l
cy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYjMvQjNQcm9jZWR1cmUuY3Bw
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpjYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNl
dExpc3QpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpjYWxsZWVTYXZlUmVnaXN0ZXJz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5oOgorICAgICAgICAqIGIzL0Iz
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtczo6dW5hdmFpbGFibGVSZWdpc3RlcnMpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmNwcDogQ29waWVkIGZy
b20gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGlu
ZWFyU2Nhbi5jcHAuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmFsbG9jYXRlUmVnaXN0ZXJzQW5k
U3RhY2tCeUxpbmVhclNjYW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjphbGxvY2F0ZVJlZ2lz
dGVyc0J5TGluZWFyU2Nhbik6IERlbGV0ZWQuCisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRl
UmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uaDogQ29waWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oLgorICAg
ICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmg6
IFJlbW92ZWQuCisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3Jp
bmcuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjphbGxvY2F0ZUVzY2FwZWRTdGFja1Nsb3Rz
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6dXBkYXRlRnJhbWVTaXplQmFzZWRPblN0YWNrU2xv
dHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjphbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5n
KToKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZy5oOgor
ICAgICAgICAqIGIzL2Fpci9BaXJBcmcuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OnN0YWNrQWRkcik6CisgICAgICAgICogYjMvYWlyL0FpckFyZy5oOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OnN0YWNrQWRkcik6IERlbGV0ZWQuCisgICAgICAgICogYjMvYWlyL0FpckNv
ZGUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjphZGRTdGFja1Nsb3QpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpzZXRDYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExp
c3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpjYWxsZWVTYXZlUmVnaXN0ZXJBdE9m
ZnNldExpc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpkdW1wKToKKyAgICAgICAg
KiBiMy9haXIvQWlyQ29kZS5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpzZXRTdGFj
a0lzQWxsb2NhdGVkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6c3RhY2tJc0FsbG9j
YXRlZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmNhbGxlZVNhdmVSZWdpc3RlcnMp
OgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Z2VuZXJh
dGUpOgorICAgICAgICAqIGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHA6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OmhhbmRsZUNhbGxlZVNhdmVzKToKKyAgICAgICAgKiBiMy9haXIvQWly
SGFuZGxlQ2FsbGVlU2F2ZXMuaDoKKyAgICAgICAgKiBiMy9haXIvQWlyTG93ZXJBZnRlclJlZ0Fs
bG9jLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6bG93ZXJBZnRlclJlZ0FsbG9jKToKKyAg
ICAgICAgKiBiMy9haXIvQWlyTG93ZXJTdGFja0FyZ3MuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6bG93ZXJTdGFja0FyZ3MpOgorICAgICAgICAqIGIzL2Fpci9BaXJMb3dlclN0
YWNrQXJncy5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlND
OjpCMzo6dGVzdFBpblJlZ2lzdGVycyk6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGppdC9SZWdpc3RlckF0T2Zm
c2V0TGlzdC5oOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGUpOgorCiAyMDE3LTA0LTExICBHdWlsbGF1bWUg
RW1vbnQgIDxndWlqZW1vbnRAaWdhbGlhLmNvbT4KIAogICAgICAgICBbanNjXSBBZGQgbWlzc2lu
ZyBNYWNyb0Fzc2VtYmxlck1JUFM6Om9yMzIoKSBpbXBsZW1lbnRhdGlvbgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjE1MjM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC03Myw4ICs3Myw4
IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyUHJpbnRlci5jcHAKICAgICBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3Bw
CiAKKyAgICBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5j
cHAKICAgICBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwCi0g
ICAgYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcAogICAgIGIzL2Fp
ci9BaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nLmNwcAogICAgIGIzL2Fpci9BaXJBcmcu
Y3BwCiAgICAgYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCkBAIC0xMDAsNiArMTAwLDcgQEAgc2V0
KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBiMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9j
LmNwcAogICAgIGIzL2Fpci9BaXJMb3dlckVudHJ5U3dpdGNoLmNwcAogICAgIGIzL2Fpci9BaXJM
b3dlck1hY3Jvcy5jcHAKKyAgICBiMy9haXIvQWlyTG93ZXJTdGFja0FyZ3MuY3BwCiAgICAgYjMv
YWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAKICAgICBiMy9haXIvQWlyUGFkSW50ZXJmZXJl
bmNlLmNwcAogICAgIGIzL2Fpci9BaXJQaGFzZUluc2VydGlvblNldC5jcHAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTUyMzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMTg2LDggKzE4Niw4IEBACiAJCTBGMjVGMUI0MTgxNjM1RjMwMDUyMkYzOSAv
KiBGVExTbG93UGF0aENhbGxLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMjVGMUFEMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxL
ZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjJBQzU2NjFFOEEwQjc3MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjQx
RThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcCAqLzsgfTsK
IAkJMEYyQUM1NjcxRThBMEI3OTAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2
NTFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCAqLzsgfTsK
LQkJMEYyQUM1NkExRThBMEJEMzAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5l
YXJTY2FuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkFDNTY4MUU4QTBCRDEwMDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFy
U2Nhbi5jcHAgKi87IH07Ci0JCTBGMkFDNTZCMUU4QTBCRDUwMDAxRUUzRiAvKiBBaXJBbGxvY2F0
ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQUM1NjkxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVn
aXN0ZXJzQnlMaW5lYXJTY2FuLmggKi87IH07CisJCTBGMkFDNTZBMUU4QTBCRDMwMDAxRUUzRiAv
KiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkFDNTY4MUU4QTBCRDEwMDAx
RUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmNwcCAqLzsg
fTsKKwkJMEYyQUM1NkIxRThBMEJENTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQW5k
U3RhY2tCeUxpbmVhclNjYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkFDNTY5MUU4QTBCRDEwMDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVy
c0FuZFN0YWNrQnlMaW5lYXJTY2FuLmggKi87IH07CiAJCTBGMkFDNTZFMUU4RDdCMDAwMDAxRUUz
RiAvKiBBaXJQaGFzZUluc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2QzFFOEQ3QUZGMDAwMUVFM0YgLyogQWlyUGhhc2VJ
bnNlcnRpb25TZXQuY3BwICovOyB9OwogCQkwRjJBQzU2RjFFOEQ3QjAzMDAwMUVFM0YgLyogQWly
UGhhc2VJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkFDNTZEMUU4RDdBRkYwMDAxRUUzRiAvKiBBaXJQaGFzZUluc2VydGlvblNl
dC5oICovOyB9OwogCQkwRjJBQzU3MTFFOEVFNDU0MDAwMUVFM0YgLyogQWlyRm9ybVRhYmxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU3MDFF
OEVFNDUyMDAwMUVFM0YgLyogQWlyRm9ybVRhYmxlLmggKi87IH07CkBAIC00NTUsNiArNDU1LDgg
QEAKIAkJMEY1QUUyQzQxREY0RjI4MDAwNjZFRkUxIC8qIFZNSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5MEJCM0ExQjdDRjY0RTAwNkIz
RjAzIC8qIFZNSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNUI0QTMzMUM4NEYwRDYwMEYxQjE3RSAvKiBTbG93UGF0aFJldHVyblR5
cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUI0
QTMyMUM4NEYwRDYwMEYxQjE3RSAvKiBTbG93UGF0aFJldHVyblR5cGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjVDRjk4MTFFOTZGMTdGMDBD
MTg2OTIgLyogQWlyVG1wTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjVDRjk4MDFFOTZGMTdEMDBDMTg2OTIgLyogQWlyVG1wTWFwLmggKi87IH07
CisJCTBGNUNGOTg0MUU5RDUzNzcwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1Q0Y5ODMxRTlENTM3
NTAwQzE4NjkyIC8qIEFpckxvd2VyU3RhY2tBcmdzLmggKi87IH07CisJCTBGNUNGOTg1MUU5RDUz
N0EwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVDRjk4MjFFOUQ1Mzc1MDBDMTg2OTIgLyogQWly
TG93ZXJTdGFja0FyZ3MuY3BwICovOyB9OwogCQkwRjVEMDg1RDFCOENGOTlEMDAxMTQzQjQgLyog
REZHTm9kZU9yaWdpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjVEMDg1QzFCOENGOTlEMDAxMTQzQjQgLyogREZHTm9kZU9yaWdpbi5jcHAgKi87
IH07CiAJCTBGNUVGOTFFMTY4NzhGN0EwMDNFNUMyNSAvKiBKSVRUaHVua3MuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RUY5MUIxNjg3OEY3ODAw
M0U1QzI1IC8qIEpJVFRodW5rcy5jcHAgKi87IH07CiAJCTBGNUVGOTFGMTY4NzhGN0QwMDNFNUMy
NSAvKiBKSVRUaHVua3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNUVGOTFDMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjczMSw4ICsyNzMzLDgg
QEAKIAkJMEYyNUYxQUQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTbG93UGF0aENhbGxLZXkuaDsgcGF0
aCA9IGZ0bC9GVExTbG93UGF0aENhbGxLZXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyQUM1NjQxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFs
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkFDNTY1MUU4QTBCNzYwMDAx
RUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oOyBwYXRoID0gYjMvYWly
L0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGMkFDNTY4MUU4QTBCRDEwMDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGlu
ZWFyU2Nhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHA7IHBhdGggPSBiMy9haXIvQWlyQWxsb2NhdGVS
ZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNj
YW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3Rl
cnNCeUxpbmVhclNjYW4uaDsgcGF0aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGlu
ZWFyU2Nhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2ODFFOEEwQkQx
MDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBbGxvY2F0ZVJlZ2lzdGVy
c0FuZFN0YWNrQnlMaW5lYXJTY2FuLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lz
dGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyQUM1NjkxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3Rh
Y2tCeUxpbmVhclNjYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQWxs
b2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5oOyBwYXRoID0gYjMvYWlyL0FpckFs
bG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYyQUM1NkMxRThEN0FGRjAwMDFFRTNGIC8qIEFpclBoYXNlSW5zZXJ0aW9u
U2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclBoYXNlSW5z
ZXJ0aW9uU2V0LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJQaGFzZUluc2VydGlvblNldC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkFDNTZEMUU4RDdBRkYwMDAxRUUzRiAvKiBB
aXJQaGFzZUluc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBB
aXJQaGFzZUluc2VydGlvblNldC5oOyBwYXRoID0gYjMvYWlyL0FpclBoYXNlSW5zZXJ0aW9uU2V0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkFDNTcwMUU4RUU0NTIwMDAxRUUz
RiAvKiBBaXJGb3JtVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWly
Rm9ybVRhYmxlLmg7IHBhdGggPSBiMy9haXIvQWlyRm9ybVRhYmxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yOTk1LDYgKzI5OTcsOCBAQAogCQkwRjVBNjI4MjE4OEM5OEQ0MDA3
MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBGVExWYWx1ZVJhbmdlLmg7IHBhdGggPSBmdGwvRlRMVmFsdWVSYW5nZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjVCNEEzMjFDODRGMEQ2MDBGMUIxN0UgLyogU2xvd1BhdGhS
ZXR1cm5UeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNsb3dQYXRoUmV0
dXJuVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVDRjk4MDFFOTZGMTdE
MDBDMTg2OTIgLyogQWlyVG1wTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEFpclRtcE1hcC5oOyBwYXRoID0gYjMvYWlyL0FpclRtcE1hcC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjVDRjk4MjFFOUQ1Mzc1MDBDMTg2OTIgLyogQWlyTG93ZXJTdGFja0Fy
Z3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyTG93ZXJTdGFj
a0FyZ3MuY3BwOyBwYXRoID0gYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1Q0Y5ODMxRTlENTM3NTAwQzE4NjkyIC8qIEFpckxvd2Vy
U3RhY2tBcmdzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyU3Rh
Y2tBcmdzLmg7IHBhdGggPSBiMy9haXIvQWlyTG93ZXJTdGFja0FyZ3MuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RDA4NUMxQjhDRjk5RDAwMTE0M0I0IC8qIERGR05vZGVPcmln
aW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTm9kZU9yaWdp
bi5jcHA7IHBhdGggPSBkZmcvREZHTm9kZU9yaWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNUVGOTFCMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUVGh1bmtzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RUY5MUMxNjg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5r
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRUaHVua3MuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1NzcsMTAgKzU1ODEsMTAgQEAKIAkJMEZFQzg0QjMx
QkRBQ0Q4ODAwODBGRjc0IC8qIGFpciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVn
aXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uY3BwICovLAorCQkJCTBGMkFDNTY5MUU4QTBCRDEw
MDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmggKi8s
CiAJCQkJNzk2NUMyMTQxRTVENzk5NjAwQjc1OTFEIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlH
cmFwaENvbG9yaW5nLmNwcCAqLywKIAkJCQk3OTY1QzIxNTFFNUQ3OTk2MDBCNzU5MUQgLyogQWly
QWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuaCAqLywKLQkJCQkwRjJBQzU2ODFFOEEw
QkQxMDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwICovLAot
CQkJCTBGMkFDNTY5MUU4QTBCRDEwMDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGlu
ZWFyU2Nhbi5oICovLAogCQkJCTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0
ZVN0YWNrQnlHcmFwaENvbG9yaW5nLmNwcCAqLywKIAkJCQkwRkVDODU0OTFCREFDREM3MDA4MEZG
NzQgLyogQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZy5oICovLAogCQkJCTBGRUM4NTRB
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuY3BwICovLApAQCAtNTYzOSw2ICs1NjQzLDggQEAK
IAkJCQkwRkRGNzA4NDFEM0YyQzFGMDA5Mjc0NDkgLyogQWlyTG93ZXJFbnRyeVN3aXRjaC5oICov
LAogCQkJCTBGNjE4MzI3MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5jcHAgKi8s
CiAJCQkJMEY2MTgzMjgxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmggKi8sCisJ
CQkJMEY1Q0Y5ODIxRTlENTM3NTAwQzE4NjkyIC8qIEFpckxvd2VyU3RhY2tBcmdzLmNwcCAqLywK
KwkJCQkwRjVDRjk4MzFFOUQ1Mzc1MDBDMTg2OTIgLyogQWlyTG93ZXJTdGFja0FyZ3MuaCAqLywK
IAkJCQkyNjQwOTFGQTFCRTJGRDQxMDA2ODREQjIgLyogQWlyT3Bjb2RlLm9wY29kZXMgKi8sCiAJ
CQkJMEZCMzg3OEMxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5jcHAg
Ki8sCiAJCQkJMEZCMzg3OEQxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRl
ci5oICovLApAQCAtODIxNCw3ICs4MjIwLDcgQEAKIAkJCQkwRkVDODUxMDFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdDY0VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTEyMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQz
NDIyQTYzMUMxNThFNkQwMEUyRUI5OCAvKiBCM0NvbnN0RmxvYXRWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMEYyQUM1NkIxRThBMEJENTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJz
QnlMaW5lYXJTY2FuLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJBQzU2QjFFOEEwQkQ1MDAwMUVF
M0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFQzg1QjMxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3Ry
YWluZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQzYzQjgxRTYzNDNGNzAwQzEzODM5
IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTg5Nzcs
NiArODk4Myw3IEBACiAJCQkJQTUxMDA3QzExODdDQzNDNjAwQjM4ODc5IC8qIEpTR2xvYmFsT2Jq
ZWN0SW5zcGVjdG9yQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwRTRCNjQxODgw
OURENTAwNjhBNDZEIC8qIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJDNjNDNDFFNjlFRjk0MDBDMTM4MzkgLyogQjNNZW1vcnlWYWx1ZUlubGluZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGNUNGOTg0MUU5RDUzNzcwMEMxODY5MiAvKiBBaXJMb3dl
clN0YWNrQXJncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwM0ZBMkExODhGMTA1OTAwMTEwRjE0
IC8qIEpTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdTZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1MTNFNUMwMTg1QkZBQ0MwMDdFOTVBRCAvKiBKU0luamVjdGVkU2NyaXB0SG9zdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTUxM0U1QzIxODVCRkFDQzAwN0U5NUFEIC8qIEpTSW5qZWN0ZWRTY3Jp
cHRIb3N0UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMjQ2LDcgKzEwMjUzLDcgQEAK
IAkJCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjAxNzdGMURDQURDMzMwMEVBNTk1MCAvKiBERkdGbG93
SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEYyQUM1NkExRThBMEJEMzAwMDFFRTNG
IC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGMkFDNTZBMUU4QTBCRDMwMDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0
YWNrQnlMaW5lYXJTY2FuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzk2MTdGRkM0RTYw
MDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjcx
N0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNjlDQzg4MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTEwNzYxLDYgKzEwNzY4LDcgQEAKIAkJCQkxNDI4MDg0MjEwN0VDMDkzMDAxM0U3
QjIgLyogUmVnRXhwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1MTIx
NTFDMDgzRDAwNDZENEVGIC8qIFJlZ0V4cE1hdGNoZXNBcnJheS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDI4MDg0MzEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwT2JqZWN0LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGNUNGOTg1MUU5RDUzN0EwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJn
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0NDEwN0VDMDkzMDAxM0U3QjIgLyogUmVn
RXhwUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NDBDN0EwMUI4MkUxQzMwMDBG
NkI3OSAvKiBSZWdpc3RlckF0T2Zmc2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NDBDN0Ex
MUI4MkUxQzMwMDBGNkI3OSAvKiBSZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNp
b24gMjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQ1LDkgKzM0NSw5IEBAIHVuc2lnbmVkIFByb2NlZHVyZTo6ZnJh
bWVTaXplKCkgY29uc3QKICAgICByZXR1cm4gY29kZSgpLmZyYW1lU2l6ZSgpOwogfQogCi1jb25z
dCBSZWdpc3RlckF0T2Zmc2V0TGlzdCYgUHJvY2VkdXJlOjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkg
Y29uc3QKK1JlZ2lzdGVyQXRPZmZzZXRMaXN0IFByb2NlZHVyZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
QXRPZmZzZXRMaXN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29kZSgpLmNhbGxlZVNhdmVSZWdp
c3RlcnMoKTsKKyAgICByZXR1cm4gY29kZSgpLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlz
dCgpOwogfQogCiBWYWx1ZSogUHJvY2VkdXJlOjphZGRWYWx1ZUltcGwoVmFsdWUqIHZhbHVlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDIxNTIz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDMsNyArMjQzLDcgQEAgcHVibGljOgogICAgIGJvb2wgbmVlZHNVc2VkUmVnaXN0
ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc1VzZWRSZWdpc3RlcnM7IH0KIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHVuc2lnbmVkIGZyYW1lU2l6ZSgpIGNvbnN0OwotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0JiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkg
Y29uc3Q7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUmVnaXN0ZXJBdE9mZnNldExpc3QgY2FsbGVl
U2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCkgY29uc3Q7CiAKICAgICBQQ1RvT3JpZ2luTWFwJiBw
Y1RvT3JpZ2luTWFwKCkgeyByZXR1cm4gbV9wY1RvT3JpZ2luTWFwOyB9CiAgICAgUENUb09yaWdp
bk1hcCByZWxlYXNlUENUb09yaWdpbk1hcCgpIHsgcmV0dXJuIFdURk1vdmUobV9wY1RvT3JpZ2lu
TWFwKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwCShyZXZpc2lvbiAyMTUyMzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw4ICs0OCw3IEBAIFJlZ2lzdGVyU2V0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtczo6dW4KICAgICBSZWdpc3RlclNldCByZXN1bHQgPSB1c2VkUmVnaXN0ZXJzKCk7CiAgICAg
CiAgICAgUmVnaXN0ZXJTZXQgdW5zYXZlZENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVn
QXRPZmZzZXQgOiBtX2NvbnRleHQuY29kZS0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKQotICAgICAg
ICB1bnNhdmVkQ2FsbGVlU2F2ZXMuY2xlYXIocmVnQXRPZmZzZXQucmVnKCkpOworICAgIHVuc2F2
ZWRDYWxsZWVTYXZlcy5leGNsdWRlKG1fY29udGV4dC5jb2RlLT5jYWxsZWVTYXZlUmVnaXN0ZXJz
KCkpOwogCiAgICAgcmVzdWx0Lm1lcmdlKHVuc2F2ZWRDYWxsZWVTYXZlcyk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAyMTUyMzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxMDIsNyAr
MTQxMDIsNyBAQCB2b2lkIHRlc3RQaW5SZWdpc3RlcnMoKQogICAgICAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVy
QXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcHJvYy5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpCisgICAg
ICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiBwcm9jLmNhbGxl
ZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpKQogICAgICAgICAgICAgdXNlc0NTUnMgfD0gY3Ny
cy5nZXQocmVnQXRPZmZzZXQucmVnKCkpOwogICAgICAgICBDSEVDS19FUSh1c2VzQ1NScywgIXBp
bik7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2Nh
dGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5l
YXJTY2FuLmNwcAkocmV2aXNpb24gMjE1MjM4KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcDoyMTUyMzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tC
eUxpbmVhclNjYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTk3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgorI2luY2x1ZGUgIkFp
ckNvZGUuaCIKKyNpbmNsdWRlICJBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oIgorI2luY2x1
ZGUgIkFpclBoYXNlSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIK
KyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgorI2luY2x1ZGUgIkFpclBhZEludGVyZmVyZW5jZS5o
IgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJBaXJSZWdMaXZlbmVzcy5o
IgorI2luY2x1ZGUgIkFpclRtcElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJUbXBNYXAuaCIKKyNp
bmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKyNpbmNsdWRlIDx3dGYvUmFuZ2UuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2Ugewor
CitOT19SRVRVUk5fRFVFX1RPX0NSQVNIIE5FVkVSX0lOTElORSB2b2lkIGNyYXNoKCkKK3sKKyAg
ICBDUkFTSCgpOworfQorCisjdW5kZWYgUkVMRUFTRV9BU1NFUlQKKyNkZWZpbmUgUkVMRUFTRV9B
U1NFUlQoYXNzZXJ0aW9uKSBkbyB7IFwKKyAgICBpZiAoIShhc3NlcnRpb24pKSB7IFwKKyAgICAg
ICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVU
VFlfRlVOQ1RJT04sICNhc3NlcnRpb24pOyBcCisgICAgICAgIGNyYXNoKCk7IFwKKyAgICB9IFwK
K30gd2hpbGUgKDApCisKK2Jvb2wgdmVyYm9zZSgpIHsgcmV0dXJuIE9wdGlvbnM6OmFpckxpbmVh
clNjYW5WZXJib3NlKCk7IH0KKworLy8gUGhhc2UgY29uc3RhbnRzIHdlIHVzZSBmb3IgdGhlIFBo
YXNlSW5zZXJ0aW9uU2V0LgorY29uc3QgdW5zaWduZWQgZmlyc3RQaGFzZSA9IDA7Citjb25zdCB1
bnNpZ25lZCBzZWNvbmRQaGFzZSA9IDE7CisKK3R5cGVkZWYgUmFuZ2U8c2l6ZV90PiBJbnRlcnZh
bDsKKworc3RydWN0IFRtcERhdGEgeworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KCJ7aW50ZXJ2YWwgPSAiLCBpbnRlcnZhbCwg
Iiwgc3BpbGxlZCA9ICIsIHBvaW50ZXJEdW1wKHNwaWxsZWQpLCAiLCBhc3NpZ25lZCA9ICIsIGFz
c2lnbmVkLCAiLCBpc1Vuc3BpbGxhYmxlID0gIiwgaXNVbnNwaWxsYWJsZSwgIiwgcG9zc2libGVS
ZWdzID0gIiwgcG9zc2libGVSZWdzLCAiLCBkaWRCdWlsZFBvc3NpYmxlUmVncyA9ICIsIGRpZEJ1
aWxkUG9zc2libGVSZWdzLCAifSIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlKCkK
KyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEoc3BpbGxlZCAmJiBhc3NpZ25lZCkpOwor
ICAgIH0KKyAgICAKKyAgICBJbnRlcnZhbCBpbnRlcnZhbDsKKyAgICBTdGFja1Nsb3QqIHNwaWxs
ZWQgeyBudWxscHRyIH07CisgICAgUmVnaXN0ZXJTZXQgcG9zc2libGVSZWdzOworICAgIFJlZyBh
c3NpZ25lZDsKKyAgICBib29sIGlzVW5zcGlsbGFibGUgeyBmYWxzZSB9OworICAgIGJvb2wgZGlk
QnVpbGRQb3NzaWJsZVJlZ3MgeyBmYWxzZSB9OworfTsKKworc3RydWN0IENsb2JiZXIgeworICAg
IENsb2JiZXIoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQ2xvYmJlcihzaXplX3QgaW5kZXgs
IFJlZ2lzdGVyU2V0IHJlZ3MpCisgICAgICAgIDogaW5kZXgoaW5kZXgpCisgICAgICAgICwgcmVn
cyhyZWdzKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CisgICAgeworICAgICAgICBvdXQucHJpbnQoaW5kZXgsICI6IiwgcmVncyk7Cisg
ICAgfQorICAgIAorICAgIHNpemVfdCBpbmRleCB7IDAgfTsKKyAgICBSZWdpc3RlclNldCByZWdz
OworfTsKKworY2xhc3MgTGluZWFyU2NhbiB7CitwdWJsaWM6CisgICAgTGluZWFyU2NhbihDb2Rl
JiBjb2RlKQorICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICAsIG1fc3RhcnRJbmRleChj
b2RlLnNpemUoKSkKKyAgICAgICAgLCBtX21hcChjb2RlKQorICAgICAgICAsIG1faW5zZXJ0aW9u
U2V0cyhjb2RlLnNpemUoKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgcnVuKCkKKyAg
ICB7CisgICAgICAgIGJ1aWxkUmVnaXN0ZXJTZXQoKTsKKyAgICAgICAgYnVpbGRJbmRpY2VzKCk7
CisgICAgICAgIGJ1aWxkSW50ZXJ2YWxzKCk7CisgICAgICAgIGlmIChzaG91bGRTcGlsbEV2ZXJ5
dGhpbmcoKSkgeworICAgICAgICAgICAgc3BpbGxFdmVyeXRoaW5nKCk7CisgICAgICAgICAgICBl
bWl0U3BpbGxDb2RlKCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAg
ICAgcHJlcGFyZUludGVydmFscygpOworICAgICAgICAgICAgbV9kaWRTcGlsbCA9IGZhbHNlOwor
ICAgICAgICAgICAgZm9yRWFjaEJhbmsoCisgICAgICAgICAgICAgICAgWyZdIChCYW5rIGJhbmsp
IHsKKyAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdFNjYW4oYmFuayk7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICBpZiAoIW1fZGlkU3BpbGwpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBlbWl0U3BpbGxDb2RlKCk7CisgICAgICAgIH0KKyAgICAgICAgaW5z
ZXJ0U3BpbGxDb2RlKCk7CisgICAgICAgIGFzc2lnblJlZ2lzdGVycygpOworICAgIH0KKyAgICAK
K3ByaXZhdGU6CisgICAgdm9pZCBidWlsZFJlZ2lzdGVyU2V0KCkKKyAgICB7CisgICAgICAgIGZv
ckVhY2hCYW5rKAorICAgICAgICAgICAgWyZdIChCYW5rIGJhbmspIHsKKyAgICAgICAgICAgICAg
ICBtX3JlZ2lzdGVyc1tiYW5rXSA9IG1fY29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKGJhbmspOwor
ICAgICAgICAgICAgICAgIG1fcmVnaXN0ZXJTZXRbYmFua10uc2V0QWxsKG1fcmVnaXN0ZXJzW2Jh
bmtdKTsKKyAgICAgICAgICAgICAgICBtX3VuaWZpZWRSZWdpc3RlclNldC5tZXJnZShtX3JlZ2lz
dGVyU2V0W2JhbmtdKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIHZvaWQgYnVpbGRJ
bmRpY2VzKCkKKyAgICB7CisgICAgICAgIHNpemVfdCBpbmRleCA9IDA7CisgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIG1fc3RhcnRJbmRleFti
bG9ja10gPSBpbmRleDsKKyAgICAgICAgICAgIGluZGV4ICs9IGJsb2NrLT5zaXplKCkgKiAyOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHNpemVfdCBpbmRleE9mSGVhZChCYXNpY0Jsb2Nr
KiBibG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N0YXJ0SW5kZXhbYmxvY2tdOworICAg
IH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXhPZlRhaWwoQmFzaWNCbG9jayogYmxvY2spCisgICAg
eworICAgICAgICByZXR1cm4gaW5kZXhPZkhlYWQoYmxvY2spICsgYmxvY2stPnNpemUoKSAqIDI7
CisgICAgfQorICAgIAorICAgIEludGVydmFsIGludGVydmFsKHNpemVfdCBpbmRleE9mRWFybHks
IEFyZzo6VGltaW5nIHRpbWluZykKKyAgICB7CisgICAgICAgIHN3aXRjaCAodGltaW5nKSB7Cisg
ICAgICAgIGNhc2UgQXJnOjpPbmx5RWFybHk6CisgICAgICAgICAgICByZXR1cm4gSW50ZXJ2YWwo
aW5kZXhPZkVhcmx5KTsKKyAgICAgICAgY2FzZSBBcmc6Ok9ubHlMYXRlOgorICAgICAgICAgICAg
cmV0dXJuIEludGVydmFsKGluZGV4T2ZFYXJseSArIDEpOworICAgICAgICBjYXNlIEFyZzo6RWFy
bHlBbmRMYXRlOgorICAgICAgICAgICAgcmV0dXJuIEludGVydmFsKGluZGV4T2ZFYXJseSwgaW5k
ZXhPZkVhcmx5ICsgMik7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBJbnRlcnZhbCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGJ1aWxk
SW50ZXJ2YWxzKCkKKyAgICB7CisgICAgICAgIFVuaWZpZWRUbXBMaXZlbmVzcyBsaXZlbmVzcyht
X2NvZGUpOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29k
ZSkgeworICAgICAgICAgICAgc2l6ZV90IGluZGV4T2ZIZWFkID0gdGhpcy0+aW5kZXhPZkhlYWQo
YmxvY2spOworICAgICAgICAgICAgc2l6ZV90IGluZGV4T2ZUYWlsID0gdGhpcy0+aW5kZXhPZlRh
aWwoYmxvY2spOworICAgICAgICAgICAgaWYgKHZlcmJvc2UoKSkgeworICAgICAgICAgICAgICAg
IGRhdGFMb2coIkF0IGJsb2NrICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIlxuIik7CisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICBpbmRleE9mSGVhZCA9ICIsIGluZGV4T2ZIZWFkLCAiXG4iKTsK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIGlkbmV4T2ZUYWlsID0gIiwgaW5kZXhPZlRhaWws
ICJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbGl2ZW5l
c3MubGl2ZUF0SGVhZChibG9jaykpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRtcC5pc1JlZygp
KQorICAgICAgICAgICAgICAgICAgICBtX21hcFt0bXBdLmludGVydmFsIHw9IEludGVydmFsKGlu
ZGV4T2ZIZWFkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGxp
dmVuZXNzLmxpdmVBdFRhaWwoYmxvY2spKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0bXAuaXNS
ZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9tYXBbdG1wXS5pbnRlcnZhbCB8PSBJbnRlcnZh
bChpbmRleE9mVGFpbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsg
KytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGlu
c3RJbmRleCk7CisgICAgICAgICAgICAgICAgc2l6ZV90IGluZGV4T2ZFYXJseSA9IGluZGV4T2ZI
ZWFkICsgaW5zdEluZGV4ICogMjsKKyAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoCisg
ICAgICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBX
aWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
bWFwW3RtcF0uaW50ZXJ2YWwgfD0gaW50ZXJ2YWwoaW5kZXhPZkVhcmx5LCBBcmc6OnRpbWluZyhy
b2xlKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBSZWdMaXZlbmVzczo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBhdXRvIHJlY29yZCA9IFsmXSAodW5zaWduZWQgaW5z
dEluZGV4KSB7CisgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcmVncyA9IGxvY2FsQ2FsYy5s
aXZlKCk7CisgICAgICAgICAgICAgICAgaWYgKEluc3QqIHByZXYgPSBibG9jay0+Z2V0KGluc3RJ
bmRleCAtIDEpKSB7CisgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHByZXZSZWdzID0g
cmVnczsKKyAgICAgICAgICAgICAgICAgICAgcHJldi0+Zm9yRWFjaDxSZWc+KAorICAgICAgICAg
ICAgICAgICAgICAgICAgWyZdIChSZWcmIHJlZywgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRo
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlRGVmKHJvbGUp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2UmVncy5hZGQocmVnKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBpZiAocHJldi0+
a2luZC5vcGNvZGUgPT0gUGF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2UmVncy5t
ZXJnZShwcmV2LT5leHRyYUNsb2JiZXJlZFJlZ3MoKSk7CisgICAgICAgICAgICAgICAgICAgIHBy
ZXZSZWdzLmZpbHRlcihtX3VuaWZpZWRSZWdpc3RlclNldCk7CisgICAgICAgICAgICAgICAgICAg
IGlmICghcHJldlJlZ3MuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9jbG9i
YmVycy5hcHBlbmQoQ2xvYmJlcihpbmRleE9mSGVhZCArIGluc3RJbmRleCAqIDIgLSAxLCBwcmV2
UmVncykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoSW5zdCogbmV4
dCA9IGJsb2NrLT5nZXQoaW5zdEluZGV4KSkgeworICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl
clNldCBuZXh0UmVncyA9IHJlZ3M7CisgICAgICAgICAgICAgICAgICAgIG5leHQtPmZvckVhY2g8
UmVnPigKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoUmVnJiByZWcsIEFyZzo6Um9sZSBy
b2xlLCBCYW5rLCBXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6
OmlzRWFybHlEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRS
ZWdzLmFkZChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChuZXh0LT5raW5kLm9wY29kZSA9PSBQYXRjaCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5leHRSZWdzLm1lcmdlKG5leHQtPmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHRSZWdzLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fY2xvYmJlcnMuYXBwZW5kKENsb2JiZXIoaW5kZXhPZkhlYWQgKyBpbnN0
SW5kZXggKiAyLCBuZXh0UmVncykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlY29yZChibG9jay0+c2l6ZSgpKTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4
LS07KSB7CisgICAgICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKKyAg
ICAgICAgICAgICAgICByZWNvcmQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgc3RkOjpzb3J0KAorICAgICAgICAgICAgbV9jbG9iYmVycy5i
ZWdpbigpLCBtX2Nsb2JiZXJzLmVuZCgpLAorICAgICAgICAgICAgW10gKENsb2JiZXImIGEsIENs
b2JiZXImIGIpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IDwgYi5p
bmRleDsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UoKSkg
eworICAgICAgICAgICAgZGF0YUxvZygiSW50ZXJ2YWxzOlxuIik7CisgICAgICAgICAgICBtX2Nv
ZGUuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICBbJl0gKFRtcCB0bXApIHsKKyAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIHRtcCwgIjogIiwgbV9tYXBbdG1wXSwgIlxuIik7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCBz
aG91bGRTcGlsbEV2ZXJ5dGhpbmcoKQorICAgIHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjphaXJM
aW5lYXJTY2FuU3BpbGxzRXZlcnl0aGluZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgLy8gWW91J3JlIG1lYW50IHRvIGhhY2sgdGhpcyBzbyB0aGF0IHlv
dSBzZWxlY3RpdmVseSBzcGlsbCBldmVyeXRoaW5nIGRlcGVuZGluZyBvbiByZWFzb25zLgorICAg
ICAgICAvLyBUaGF0J3Mgc3VwZXIgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuCisKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BpbGxFdmVyeXRoaW5nKCkKKyAgICB7
CisgICAgICAgIG1fY29kZS5mb3JFYWNoVG1wKAorICAgICAgICAgICAgWyZdIChUbXAgdG1wKSB7
CisgICAgICAgICAgICAgICAgc3BpbGwodG1wKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHByZXBhcmVJbnRlcnZhbHMoKQorICAgIHsKKyAgICAgICAgbV90bXBzLnJl
c2l6ZSgwKTsKKyAgICAgICAgCisgICAgICAgIG1fY29kZS5mb3JFYWNoVG1wKAorICAgICAgICAg
ICAgWyZdIChUbXAgdG1wKSB7CisgICAgICAgICAgICAgICAgVG1wRGF0YSYgZGF0YSA9IG1fbWFw
W3RtcF07CisgICAgICAgICAgICAgICAgaWYgKGRhdGEuc3BpbGxlZCkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRhdGEuYXNz
aWduZWQgPSBSZWcoKTsKKyAgICAgICAgICAgICAgICBtX3RtcHMuYXBwZW5kKHRtcCk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAgIG1f
dG1wcy5iZWdpbigpLCBtX3RtcHMuZW5kKCksCisgICAgICAgICAgICBbJl0gKFRtcCYgYSwgVG1w
JiBiKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fbWFwW2FdLmludGVydmFsLmJlZ2luKCkg
PCBtX21hcFtiXS5pbnRlcnZhbC5iZWdpbigpOworICAgICAgICAgICAgfSk7CisgICAgICAgIAor
ICAgICAgICBpZiAodmVyYm9zZSgpKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJUbXBzOiAiLCBs
aXN0RHVtcChtX3RtcHMpLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIkNsb2JiZXJzOiAi
LCBsaXN0RHVtcChtX2Nsb2JiZXJzKSwgIlxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgVG1wIGFkZFNwaWxsVG1wV2l0aEludGVydmFsKEJhbmsgYmFuaywgSW50ZXJ2YWwgaW50ZXJ2
YWwpCisgICAgeworICAgICAgICBUbXBEYXRhIGRhdGE7CisgICAgICAgIGRhdGEuaW50ZXJ2YWwg
PSBpbnRlcnZhbDsKKyAgICAgICAgZGF0YS5pc1Vuc3BpbGxhYmxlID0gdHJ1ZTsKKyAgICAgICAg
CisgICAgICAgIFRtcCB0bXAgPSBtX2NvZGUubmV3VG1wKGJhbmspOworICAgICAgICBtX21hcC5h
cHBlbmQodG1wLCBkYXRhKTsKKyAgICAgICAgcmV0dXJuIHRtcDsKKyAgICB9CisgICAgCisgICAg
dm9pZCBhdHRlbXB0U2NhbihCYW5rIGJhbmspCisgICAgeworICAgICAgICAvLyBUaGlzIGlzIG1v
ZGVsZWQgYWZ0ZXIgTGluZWFyU2NhblJlZ2lzdGVyQWxsb2NhdGlvbiBpbiBGaWcuIDEgaW4KKyAg
ICAgICAgLy8gaHR0cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTMzMDI1MC4KKworICAg
ICAgICBtX2FjdGl2ZS5jbGVhcigpOworICAgICAgICBtX2FjdGl2ZVJlZ3MgPSBSZWdpc3RlclNl
dCgpOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IGNsb2JiZXJJbmRleCA9IDA7CisgICAgICAg
IGZvciAoVG1wJiB0bXAgOiBtX3RtcHMpIHsKKyAgICAgICAgICAgIGlmICh0bXAuYmFuaygpICE9
IGJhbmspCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKKyAgICAgICAgICAgIHNpemVfdCBpbmRl
eCA9IGVudHJ5LmludGVydmFsLmJlZ2luKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
ICh2ZXJib3NlKCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbmRleCAjIiwgaW5kZXgs
ICI6ICIsIHRtcCwgIlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAiLCB0bXAsICI6
ICIsIGVudHJ5LCAiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIGNsb2JiZXJJbmRl
eCA9ICIsIGNsb2JiZXJJbmRleCwgIlxuIik7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBjb3Vs
ZCBiZSBzbyBtdWNoIGZhc3Rlci4KKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fY29kZVswXTsKKyAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGNhbmRpZGF0ZUJs
b2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXJ0SW5kZXhbY2Fu
ZGlkYXRlQmxvY2tdID4gaW5kZXgpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgYmxvY2sgPSBjYW5kaWRhdGVCbG9jazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5zdEluZGV4ID0gKGluZGV4IC0gbV9zdGFy
dEluZGV4W2Jsb2NrXSArIDEpIC8gMjsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIEF0OiAi
LCBwb2ludGVyRHVtcChibG9jayksICIsIGluc3RJbmRleCA9ICIsIGluc3RJbmRleCwgIlxuIik7
CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIFByZXY6ICIsIHBvaW50ZXJEdW1wKGJsb2Nr
LT5nZXQoaW5zdEluZGV4IC0gMSkpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgTmV4dDogIiwgcG9pbnRlckR1bXAoYmxvY2stPmdldChpbnN0SW5kZXgpKSwgIlxuIik7Cisg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICBBY3RpdmU6XG4iKTsKKyAgICAgICAgICAgICAgICBm
b3IgKFRtcCB0bXAgOiBtX2FjdGl2ZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
ICIsIHRtcCwgIjogIiwgbV9tYXBbdG1wXSwgIlxuIik7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgRXhwaXJlT2xkSW50ZXJ2YWxzIGluIEZpZy4g
MS4KKyAgICAgICAgICAgIHdoaWxlICghbV9hY3RpdmUuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICAgICAgVG1wIHRtcCA9IG1fYWN0aXZlLmZpcnN0KCk7CisgICAgICAgICAgICAgICAgVG1wRGF0
YSYgZW50cnkgPSBtX21hcFt0bXBdOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGJvb2wgZXhwaXJlZCA9IGVudHJ5LmludGVydmFsLmVuZCgpIDw9IGluZGV4OworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghZXhwaXJlZCkKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9hY3RpdmUucmVt
b3ZlRmlyc3QoKTsKKyAgICAgICAgICAgICAgICBtX2FjdGl2ZVJlZ3MucmVtb3ZlKGVudHJ5LmFz
c2lnbmVkKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgbmVjZXNzYXJ5LCBj
b21wdXRlIHRoZSBzZXQgb2YgcmVnaXN0ZXJzIHRoYXQgdGhpcyB0bXAgY291bGQgZXZlbiB1c2Uu
IFRoaXMgaXMgbm90CisgICAgICAgICAgICAvLyBwYXJ0IG9mIEZpZy4gMSwgYnV0IGl0J3MgYSB0
ZWNobmlxdWUgdGhhdCB0aGUgYXV0aG9ycyBjbGFpbSB0byBoYXZlIGltcGxlbWVudGVkIGluIG9u
ZSBvZgorICAgICAgICAgICAgLy8gdGhlaXIgdHdvIGltcGxlbWVudGF0aW9ucy4gVGhlcmUgbWF5
IGJlIG90aGVyIG1vcmUgZWZmaWNpZW50IHdheXMgdG8gZG8gdGhpcywgYnV0IHRoaXMKKyAgICAg
ICAgICAgIC8vIGltcGxlbWVudGF0aW9uIGdldHMgc29tZSBwZXJmIHdpbnMgZnJvbSBwaWdneS1i
YWNraW5nIHRoaXMgY2FsY3VsYXRpb24gaW4gdGhlIHNjYW4uCisgICAgICAgICAgICAvLworICAg
ICAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBkaWRCdWlsZCBmbGFnIHN0aWNrcyB0aHJvdWdoIHNw
aWxsaW5nLiBTcGlsbGluZyBkb2Vzbid0IGNoYW5nZSB0aGUKKyAgICAgICAgICAgIC8vIGludGVy
ZmVyZW5jZSBzaXR1YXRpb24uCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gTm90ZSB0
aGF0IHdlIGNvdWxkIHNob3J0LWNpcmN1aXQgdGhpcyBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBz
cGlsbGFibGUgdG1wLCB0aGVyZSBhcmUgbm8KKyAgICAgICAgICAgIC8vIGZyZWUgcmVnaXN0ZXJz
LCBhbmQgdGhpcyByZWdpc3RlcidzIGludGVydmFsIGVuZHMgYWZ0ZXIgdGhlIG9uZSBvbiB0aGUg
dG9wIG9mIHRoZSBhY3RpdmUKKyAgICAgICAgICAgIC8vIHN0YWNrLgorICAgICAgICAgICAgaWYg
KCFlbnRyeS5kaWRCdWlsZFBvc3NpYmxlUmVncykgeworICAgICAgICAgICAgICAgIC8vIEFkdmFu
Y2UgdGhlIGNsb2JiZXIgaW5kZXggdW50aWwgaXQncyBhdCBhIGNsb2JiZXIgdGhhdCBpcyByZWxl
dmFudCB0byB1cy4KKyAgICAgICAgICAgICAgICB3aGlsZSAoY2xvYmJlckluZGV4IDwgbV9jbG9i
YmVycy5zaXplKCkgJiYgbV9jbG9iYmVyc1tjbG9iYmVySW5kZXhdLmluZGV4IDwgaW5kZXgpCisg
ICAgICAgICAgICAgICAgICAgIGNsb2JiZXJJbmRleCsrOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHBvc3NpYmxlUmVncyA9IG1fcmVnaXN0ZXJTZXRbYmFu
a107CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGNsb2JiZXJJbmRleDsgaSA8IG1f
Y2xvYmJlcnMuc2l6ZSgpICYmIG1fY2xvYmJlcnNbaV0uaW5kZXggPCBlbnRyeS5pbnRlcnZhbC5l
bmQoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZVJlZ3MuZXhjbHVkZShtX2Ns
b2JiZXJzW2ldLnJlZ3MpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGVudHJ5
LnBvc3NpYmxlUmVncyA9IHBvc3NpYmxlUmVnczsKKyAgICAgICAgICAgICAgICBlbnRyeS5kaWRC
dWlsZFBvc3NpYmxlUmVncyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmICh2ZXJib3NlKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICBQb3Nz
aWJsZSByZWdzOiAiLCBlbnRyeS5wb3NzaWJsZVJlZ3MsICJcbiIpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBGaW5kIGEgZnJlZSByZWdpc3RlciB0aGF0IHdlIGFyZSBhbGxvd2VkIHRv
IHVzZS4KKyAgICAgICAgICAgIGlmIChtX2FjdGl2ZS5zaXplKCkgIT0gbV9yZWdpc3RlcnNbYmFu
a10uc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgYm9vbCBkaWRBc3NpZ24gPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBtX3JlZ2lzdGVyc1tiYW5rXSkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogQ291bGQgZG8gcHJpb3JpdHkgY29sb3JpbmcgaGVyZS4K
KyAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3MDMwNAorICAgICAgICAgICAgICAgICAgICBpZiAoIW1fYWN0aXZlUmVncy5jb250
YWlucyhyZWcpICYmIGVudHJ5LnBvc3NpYmxlUmVncy5jb250YWlucyhyZWcpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBhc3NpZ24odG1wLCByZWcpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZGlkQXNzaWduID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
IChkaWRBc3NpZ24pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIGlzIFNwaWxsQXRJbnRlcnZhbCBp
biBGaWcuIDEsIGJ1dCBtb2RpZmllZCB0byBoYW5kbGUgY2xvYmJlcnMuCisgICAgICAgICAgICBU
bXAgc3BpbGxUbXAgPSBtX2FjdGl2ZS50YWtlTGFzdCgKKyAgICAgICAgICAgICAgICBbJl0gKFRt
cCBzcGlsbENhbmRpZGF0ZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
bnRyeS5wb3NzaWJsZVJlZ3MuY29udGFpbnMobV9tYXBbc3BpbGxDYW5kaWRhdGVdLmFzc2lnbmVk
KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmICghc3BpbGxUbXApIHsKKyAg
ICAgICAgICAgICAgICBzcGlsbCh0bXApOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgVG1wRGF0YSYgc3BpbGxFbnRyeSA9IG1fbWFwW3NwaWxs
VG1wXTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNwaWxsRW50cnkuYXNzaWduZWQpOwor
ICAgICAgICAgICAgaWYgKHNwaWxsRW50cnkuaXNVbnNwaWxsYWJsZSB8fAorICAgICAgICAgICAg
ICAgICghZW50cnkuaXNVbnNwaWxsYWJsZSAmJiBzcGlsbEVudHJ5LmludGVydmFsLmVuZCgpIDw9
IGVudHJ5LmludGVydmFsLmVuZCgpKSkgeworICAgICAgICAgICAgICAgIHNwaWxsKHRtcCk7Cisg
ICAgICAgICAgICAgICAgYWRkVG9BY3RpdmUoc3BpbGxUbXApOworICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBhc3NpZ24o
dG1wLCBzcGlsbEVudHJ5LmFzc2lnbmVkKTsKKyAgICAgICAgICAgIHNwaWxsKHNwaWxsVG1wKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZFRvQWN0aXZlKFRtcCB0bXApCisg
ICAgeworICAgICAgICBpZiAobV9tYXBbdG1wXS5pc1Vuc3BpbGxhYmxlKSB7CisgICAgICAgICAg
ICBtX2FjdGl2ZS5wcmVwZW5kKHRtcCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIG1fYWN0aXZlLmFwcGVuZEFuZEJ1YmJsZSgKKyAgICAgICAgICAg
IHRtcCwKKyAgICAgICAgICAgIFsmXSAoVG1wIG90aGVyVG1wKSAtPiBib29sIHsKKyAgICAgICAg
ICAgICAgICBUbXBEYXRhJiBvdGhlckVudHJ5ID0gbV9tYXBbb3RoZXJUbXBdOworICAgICAgICAg
ICAgICAgIGlmIChvdGhlckVudHJ5LmlzVW5zcGlsbGFibGUpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9tYXBbb3RoZXJUbXBdLmlu
dGVydmFsLmVuZCgpID4gbV9tYXBbdG1wXS5pbnRlcnZhbC5lbmQoKTsKKyAgICAgICAgICAgIH0p
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGFzc2lnbihUbXAgdG1wLCBSZWcgcmVnKQorICAgIHsK
KyAgICAgICAgVG1wRGF0YSYgZW50cnkgPSBtX21hcFt0bXBdOworICAgICAgICBSRUxFQVNFX0FT
U0VSVCghZW50cnkuc3BpbGxlZCk7CisgICAgICAgIGVudHJ5LmFzc2lnbmVkID0gcmVnOworICAg
ICAgICBtX2FjdGl2ZVJlZ3MuYWRkKHJlZyk7CisgICAgICAgIGFkZFRvQWN0aXZlKHRtcCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc3BpbGwoVG1wIHRtcCkKKyAgICB7CisgICAgICAgIFRtcERh
dGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWVudHJ5Lmlz
VW5zcGlsbGFibGUpOworICAgICAgICBlbnRyeS5zcGlsbGVkID0gbV9jb2RlLmFkZFN0YWNrU2xv
dCg4LCBTdGFja1Nsb3RLaW5kOjpTcGlsbCk7CisgICAgICAgIGVudHJ5LmFzc2lnbmVkID0gUmVn
KCk7CisgICAgICAgIG1fZGlkU3BpbGwgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGVt
aXRTcGlsbENvZGUoKQorICAgIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
Y29kZSkgeworICAgICAgICAgICAgc2l6ZV90IGluZGV4T2ZIZWFkID0gdGhpcy0+aW5kZXhPZkhl
YWQoYmxvY2spOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0
SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgICAgIElu
c3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbmRleE9mRWFybHkgPSBpbmRleE9mSGVhZCArIGluc3RJbmRleCAqIDI7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgLy8gRmlyc3QgdHJ5IHRvIHNwaWxsIGRpcmVjdGx5Lgor
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaV07Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzVG1wKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy5pc1JlZygpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIFN0YWNr
U2xvdCogc3BpbGxlZCA9IG1fbWFwW2FyZy50bXAoKV0uc3BpbGxlZDsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFzcGlsbGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghaW5zdC5hZG1pdHNTdGFjayhpKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OnN0
YWNrKHNwaWxsZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAvLyBGYWxsIGJhY2sgb24gdGhlIGhhcmQgd2F5LgorICAgICAgICAgICAgICAg
IGluc3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJn
OjpSb2xlIHJvbGUsIEJhbmsgYmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNwaWxsZWQgPSBtX21hcFt0bXBdLnNw
aWxsZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNwaWxsZWQpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgT3Bjb2Rl
IG1vdmUgPSBiYW5rID09IEdQID8gTW92ZSA6IE1vdmVEb3VibGU7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0bXAgPSBhZGRTcGlsbFRtcFdpdGhJbnRlcnZhbChiYW5rLCBpbnRlcnZhbChpbmRl
eE9mRWFybHksIEFyZzo6dGltaW5nKHJvbGUpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocm9sZSA9PSBBcmc6OlNjcmF0Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXRzW2Jsb2NrXS5pbnNlcnQo
aW5zdEluZGV4LCBzZWNvbmRQaGFzZSwgbW92ZSwgaW5zdC5vcmlnaW4sIEFyZzo6c3RhY2soc3Bp
bGxlZCksIHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueURlZihy
b2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldHNbYmxvY2td
Lmluc2VydChpbnN0SW5kZXggKyAxLCBmaXJzdFBoYXNlLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1w
LCBBcmc6OnN0YWNrKHNwaWxsZWQpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBpbnNlcnRTcGlsbENvZGUo
KQorICAgIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkKKyAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0c1tibG9ja10uZXhlY3V0ZShibG9jayk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXNzaWduUmVnaXN0ZXJzKCkKKyAgICB7CisgICAgICAgIGlmICh2ZXJib3Nl
KCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkFib3V0IHRvIGFsbG9jYXRlIHJlZ2lzdGVycy4g
U3RhdGUgb2YgYWxsIHRtcHM6XG4iKTsKKyAgICAgICAgICAgIG1fY29kZS5mb3JFYWNoVG1wKAor
ICAgICAgICAgICAgICAgIFsmXSAoVG1wIHRtcCkgeworICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgIiwgdG1wLCAiOiAiLCBtX21hcFt0bXBdLCAiXG4iKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIGRhdGFMb2coIklSOlxuIik7CisgICAgICAgICAgICBkYXRhTG9n
KG1fY29kZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykg
eworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKCkpCisgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIkF0OiAiLCBpbnN0LCAiXG4iKTsKKyAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hU
bXBGYXN0KAorICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
ICAgICBSZWcgcmVnID0gbV9tYXBbdG1wXS5hc3NpZ25lZDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghcmVnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRmFp
bGVkIHRvIGFsbG9jYXRlIHJlZyBmb3I6ICIsIHRtcCwgIlxuIik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IFRtcChyZWcpOworICAg
ICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgVmVjdG9yPFJlZz4gbV9yZWdpc3RlcnNbbnVtQmFu
a3NdOworICAgIFJlZ2lzdGVyU2V0IG1fcmVnaXN0ZXJTZXRbbnVtQmFua3NdOworICAgIFJlZ2lz
dGVyU2V0IG1fdW5pZmllZFJlZ2lzdGVyU2V0OworICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBz
aXplX3Q+IG1fc3RhcnRJbmRleDsKKyAgICBUbXBNYXA8VG1wRGF0YT4gbV9tYXA7CisgICAgSW5k
ZXhNYXA8QmFzaWNCbG9jayosIFBoYXNlSW5zZXJ0aW9uU2V0PiBtX2luc2VydGlvblNldHM7Cisg
ICAgVmVjdG9yPENsb2JiZXI+IG1fY2xvYmJlcnM7IC8vIEFmdGVyIHdlIGFsbG9jYXRlIHRoaXMs
IHdlIGhhcHBpbHkgcG9pbnQgcG9pbnRlcnMgaW50byBpdC4KKyAgICBWZWN0b3I8VG1wPiBtX3Rt
cHM7CisgICAgRGVxdWU8VG1wPiBtX2FjdGl2ZTsKKyAgICBSZWdpc3RlclNldCBtX2FjdGl2ZVJl
Z3M7CisgICAgYm9vbCBtX2RpZFNwaWxsIHsgZmFsc2UgfTsKK307CisKK3ZvaWQgcnVuTGluZWFy
U2NhbihDb2RlJiBjb2RlKQoreworICAgIGlmICh2ZXJib3NlKCkpCisgICAgICAgIGRhdGFMb2co
IkFpciBiZWZvcmUgbGluZWFyIHNjYW46XG4iLCBjb2RlKTsKKyAgICBMaW5lYXJTY2FuIGxpbmVh
clNjYW4oY29kZSk7CisgICAgbGluZWFyU2Nhbi5ydW4oKTsKKyAgICBpZiAodmVyYm9zZSgpKQor
ICAgICAgICBkYXRhTG9nKCJBaXIgYWZ0ZXIgbGluZWFyIHNjYW46XG4iLCBjb2RlKTsKK30KKwor
fSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgYWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVh
clNjYW4oQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImFs
bG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuIik7CisgICAgcGFkSW50ZXJmZXJlbmNlKGNvZGUp
OworICAgIHJ1bkxpbmVhclNjYW4oY29kZSk7CisgICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMo
Y29kZSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFs
bG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5
TGluZWFyU2Nhbi5jcHAJKHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0LDEzICsyNCwxNSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oIgorI2luY2x1
ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uaCIKIAogI2lmIEVO
QUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJBaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5n
LmgiCiAjaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckNvZGUuaCIKICNp
bmNsdWRlICJBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oIgorI2luY2x1ZGUgIkFpckhhbmRs
ZUNhbGxlZVNhdmVzLmgiCiAjaW5jbHVkZSAiQWlyUGhhc2VJbnNlcnRpb25TZXQuaCIKICNpbmNs
dWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCkBAIC04NCw2
ICs4Niw3IEBAIHN0cnVjdCBUbXBEYXRhIHsKICAgICBSZWcgYXNzaWduZWQ7CiAgICAgYm9vbCBp
c1Vuc3BpbGxhYmxlIHsgZmFsc2UgfTsKICAgICBib29sIGRpZEJ1aWxkUG9zc2libGVSZWdzIHsg
ZmFsc2UgfTsKKyAgICB1bnNpZ25lZCBzcGlsbEluZGV4IHsgMCB9OwogfTsKIAogc3RydWN0IENs
b2JiZXIgewpAQCAtMTE4LDYgKzEyMSw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHJ1bigp
CiAgICAgeworICAgICAgICBwYWRJbnRlcmZlcmVuY2UobV9jb2RlKTsKICAgICAgICAgYnVpbGRS
ZWdpc3RlclNldCgpOwogICAgICAgICBidWlsZEluZGljZXMoKTsKICAgICAgICAgYnVpbGRJbnRl
cnZhbHMoKTsKQEAgLTEyNiwxMSArMTMwLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGVtaXRT
cGlsbENvZGUoKTsKICAgICAgICAgfQogICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICBw
cmVwYXJlSW50ZXJ2YWxzKCk7CisgICAgICAgICAgICBwcmVwYXJlSW50ZXJ2YWxzRm9yU2NhbkZv
clJlZ2lzdGVycygpOwogICAgICAgICAgICAgbV9kaWRTcGlsbCA9IGZhbHNlOwogICAgICAgICAg
ICAgZm9yRWFjaEJhbmsoCiAgICAgICAgICAgICAgICAgWyZdIChCYW5rIGJhbmspIHsKLSAgICAg
ICAgICAgICAgICAgICAgYXR0ZW1wdFNjYW4oYmFuayk7CisgICAgICAgICAgICAgICAgICAgIGF0
dGVtcHRTY2FuRm9yUmVnaXN0ZXJzKGJhbmspOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgaWYgKCFtX2RpZFNwaWxsKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM4LDYg
KzE0MiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgaW5zZXJ0U3BpbGxDb2RlKCk7
CiAgICAgICAgIGFzc2lnblJlZ2lzdGVycygpOworICAgICAgICBmaXhTcGlsbHNBZnRlclRlcm1p
bmFscyhtX2NvZGUpOworCisgICAgICAgIGhhbmRsZUNhbGxlZVNhdmVzKG1fY29kZSk7CisgICAg
ICAgIGFsbG9jYXRlRXNjYXBlZFN0YWNrU2xvdHMobV9jb2RlKTsKKyAgICAgICAgcHJlcGFyZUlu
dGVydmFsc0ZvclNjYW5Gb3JTdGFjaygpOworICAgICAgICBzY2FuRm9yU3RhY2soKTsKKyAgICAg
ICAgdXBkYXRlRnJhbWVTaXplQmFzZWRPblN0YWNrU2xvdHMobV9jb2RlKTsKKyAgICAgICAgbV9j
b2RlLnNldFN0YWNrSXNBbGxvY2F0ZWQodHJ1ZSk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKQEAg
LTI2Niw2ICsyNzgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIFsmXSAoVG1wIHRtcCkg
ewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgdG1wLCAiOiAiLCBtX21hcFt0
bXBdLCAiXG4iKTsKICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGRhdGFMb2coIkNs
b2JiZXJzOiAiLCBsaXN0RHVtcChtX2Nsb2JiZXJzKSwgIlxuIik7CiAgICAgICAgIH0KICAgICB9
CiAgICAgCkBAIC0yODgsMTcgKzMwMSwzNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfSk7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgcHJlcGFyZUludGVydmFscygpCisgICAgdm9pZCBwcmVwYXJl
SW50ZXJ2YWxzRm9yU2NhbkZvclJlZ2lzdGVycygpCisgICAgeworICAgICAgICBwcmVwYXJlSW50
ZXJ2YWxzKAorICAgICAgICAgICAgWyZdIChUbXAsIFRtcERhdGEmIGRhdGEpIC0+IGJvb2wgewor
ICAgICAgICAgICAgICAgIGlmIChkYXRhLnNwaWxsZWQpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkYXRhLmFzc2ln
bmVkID0gUmVnKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBwcmVwYXJlSW50ZXJ2YWxzRm9yU2NhbkZvclN0YWNr
KCkKKyAgICB7CisgICAgICAgIHByZXBhcmVJbnRlcnZhbHMoCisgICAgICAgICAgICBbJl0gKFRt
cCwgVG1wRGF0YSYgZGF0YSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEu
c3BpbGxlZDsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBTZWxlY3RGdW5jPgorICAgIHZvaWQgcHJlcGFyZUludGVydmFscyhjb25zdCBTZWxlY3RG
dW5jJiBzZWxlY3RGdW5jKQogICAgIHsKICAgICAgICAgbV90bXBzLnJlc2l6ZSgwKTsKICAgICAg
ICAgCiAgICAgICAgIG1fY29kZS5mb3JFYWNoVG1wKAogICAgICAgICAgICAgWyZdIChUbXAgdG1w
KSB7CiAgICAgICAgICAgICAgICAgVG1wRGF0YSYgZGF0YSA9IG1fbWFwW3RtcF07Ci0gICAgICAg
ICAgICAgICAgaWYgKGRhdGEuc3BpbGxlZCkKKyAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdEZ1
bmModG1wLCBkYXRhKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGRhdGEuYXNzaWduZWQgPSBSZWcoKTsKICAgICAgICAgICAg
ICAgICBtX3RtcHMuYXBwZW5kKHRtcCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgCkBAIC0z
MDgsMTAgKzM0MSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fbWFwW2Fd
LmludGVydmFsLmJlZ2luKCkgPCBtX21hcFtiXS5pbnRlcnZhbC5iZWdpbigpOwogICAgICAgICAg
ICAgfSk7CiAgICAgICAgIAotICAgICAgICBpZiAodmVyYm9zZSgpKSB7CisgICAgICAgIGlmICh2
ZXJib3NlKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJUbXBzOiAiLCBsaXN0RHVtcChtX3RtcHMp
LCAiXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2coIkNsb2JiZXJzOiAiLCBsaXN0RHVtcChtX2Ns
b2JiZXJzKSwgIlxuIik7Ci0gICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgVG1wIGFkZFNwaWxs
VG1wV2l0aEludGVydmFsKEJhbmsgYmFuaywgSW50ZXJ2YWwgaW50ZXJ2YWwpCkBAIC0zMjUsNyAr
MzU2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRtcDsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBhdHRlbXB0U2NhbihCYW5rIGJhbmspCisgICAgdm9pZCBhdHRlbXB0U2NhbkZvclJlZ2lz
dGVycyhCYW5rIGJhbmspCiAgICAgewogICAgICAgICAvLyBUaGlzIGlzIG1vZGVsZWQgYWZ0ZXIg
TGluZWFyU2NhblJlZ2lzdGVyQWxsb2NhdGlvbiBpbiBGaWcuIDEgaW4KICAgICAgICAgLy8gaHR0
cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTMzMDI1MC4KQEAgLTUyMCw2ICs1NTEsNDUg
QEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICB2b2lkIHNjYW5Gb3JTdGFj
aygpCisgICAgeworICAgICAgICAvLyBUaGlzIGlzIGxvb3NlbHkgbW9kZWxlZCBhZnRlciBMaW5l
YXJTY2FuUmVnaXN0ZXJBbGxvY2F0aW9uIGluIEZpZy4gMSBpbgorICAgICAgICAvLyBodHRwOi8v
ZGwuYWNtLm9yZy9jaXRhdGlvbi5jZm0/aWQ9MzMwMjUwLgorCisgICAgICAgIG1fYWN0aXZlLmNs
ZWFyKCk7CisgICAgICAgIG1fdXNlZFNwaWxsU2xvdHMuY2xlYXJBbGwoKTsKKyAgICAgICAgCisg
ICAgICAgIGZvciAoVG1wJiB0bXAgOiBtX3RtcHMpIHsKKyAgICAgICAgICAgIFRtcERhdGEmIGVu
dHJ5ID0gbV9tYXBbdG1wXTsKKyAgICAgICAgICAgIGlmICghZW50cnkuc3BpbGxlZCkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6ZV90IGlu
ZGV4ID0gZW50cnkuaW50ZXJ2YWwuYmVnaW4oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gVGhpcyBpcyBFeHBpcmVPbGRJbnRlcnZhbHMgaW4gRmlnLiAxLgorICAgICAgICAgICAgd2hp
bGUgKCFtX2FjdGl2ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBUbXAgdG1wID0gbV9h
Y3RpdmUuZmlyc3QoKTsKKyAgICAgICAgICAgICAgICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFwW3Rt
cF07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYm9vbCBleHBpcmVkID0gZW50
cnkuaW50ZXJ2YWwuZW5kKCkgPD0gaW5kZXg7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaWYgKCFleHBpcmVkKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2FjdGl2ZS5yZW1vdmVGaXJzdCgpOworICAgICAg
ICAgICAgICAgIG1fdXNlZFNwaWxsU2xvdHMuY2xlYXIoZW50cnkuc3BpbGxJbmRleCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGVudHJ5LnNwaWxsSW5kZXggPSBt
X3VzZWRTcGlsbFNsb3RzLmZpbmRCaXQoMCwgZmFsc2UpOworICAgICAgICAgICAgcHRyZGlmZl90
IG9mZnNldCA9IC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG1fY29kZS5mcmFtZVNpemUoKSkgLSBz
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KGVudHJ5LnNwaWxsSW5kZXgpICogOCAtIDg7CisgICAgICAg
ICAgICBpZiAodmVyYm9zZSgpKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgQXNzaWduaW5n
IG9mZnNldCA9ICIsIG9mZnNldCwgIiB0byBzcGlsbCAiLCBwb2ludGVyRHVtcChlbnRyeS5zcGls
bGVkKSwgIiBmb3IgIiwgdG1wLCAiXG4iKTsKKyAgICAgICAgICAgIGVudHJ5LnNwaWxsZWQtPnNl
dE9mZnNldEZyb21GUChvZmZzZXQpOworICAgICAgICAgICAgbV91c2VkU3BpbGxTbG90cy5zZXQo
ZW50cnkuc3BpbGxJbmRleCk7CisgICAgICAgICAgICBtX2FjdGl2ZS5hcHBlbmQodG1wKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKICAgICB2b2lkIGluc2VydFNwaWxsQ29kZSgpCiAgICAgewog
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKQpAQCAtNTY5LDExICs2Mzks
MTUgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8VG1wPiBtX3RtcHM7CiAgICAgRGVxdWU8VG1wPiBt
X2FjdGl2ZTsKICAgICBSZWdpc3RlclNldCBtX2FjdGl2ZVJlZ3M7CisgICAgQml0VmVjdG9yIG1f
dXNlZFNwaWxsU2xvdHM7CiAgICAgYm9vbCBtX2RpZFNwaWxsIHsgZmFsc2UgfTsKIH07CiAKLXZv
aWQgcnVuTGluZWFyU2NhbihDb2RlJiBjb2RlKQorfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisK
K3ZvaWQgYWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2NhbihDb2RlJiBjb2RlKQog
eworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiYWxsb2NhdGVSZWdpc3RlcnNBbmRT
dGFja0J5TGluZWFyU2NhbiIpOwogICAgIGlmICh2ZXJib3NlKCkpCiAgICAgICAgIGRhdGFMb2co
IkFpciBiZWZvcmUgbGluZWFyIHNjYW46XG4iLCBjb2RlKTsKICAgICBMaW5lYXJTY2FuIGxpbmVh
clNjYW4oY29kZSk7CkBAIC01ODIsMTYgKzY1Niw2IEBAIHZvaWQgcnVuTGluZWFyU2NhbihDb2Rl
JiBjb2RlKQogICAgICAgICBkYXRhTG9nKCJBaXIgYWZ0ZXIgbGluZWFyIHNjYW46XG4iLCBjb2Rl
KTsKIH0KIAotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLXZvaWQgYWxsb2NhdGVSZWdpc3Rl
cnNCeUxpbmVhclNjYW4oQ29kZSYgY29kZSkKLXsKLSAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUo
Y29kZSwgImFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuIik7Ci0gICAgcGFkSW50ZXJmZXJl
bmNlKGNvZGUpOwotICAgIHJ1bkxpbmVhclNjYW4oY29kZSk7Ci0gICAgZml4U3BpbGxzQWZ0ZXJU
ZXJtaW5hbHMoY29kZSk7Ci19Ci0KIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIAog
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5k
U3RhY2tCeUxpbmVhclNjYW4uaAkocmV2aXNpb24gMjE1MjM4KQkoZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmg6MjE1MjM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0Fu
ZFN0YWNrQnlMaW5lYXJTY2FuLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkNQVS5oIgorI2luY2x1ZGUgIk9wdGlv
bnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
CitjbGFzcyBDb2RlOworCisvLyBUaGlzIGltcGxlbWVudHMgdGhlIFBvbGV0dG8gYW5kIFNhcmth
ciByZWdpc3RlciBhbGxvY2F0b3IgY2FsbGVkICJsaW5lYXIgc2NhbiI6CisvLyBodHRwOi8vZGwu
YWNtLm9yZy9jaXRhdGlvbi5jZm0/aWQ9MzMwMjUwCisvLworLy8gVGhpcyBpcyBub3QgQWlyJ3Mg
cHJpbWFyeSByZWdpc3RlciBhbGxvY2F0b3IuIFdlIHVzZSBpdCBvbmx5IHdoZW4gcnVubmluZyBh
dCBvcHRMZXZlbDwyLiBUaGF0J3Mgbm90CisvLyB0aGUgZGVmYXVsdCBsZXZlbC4gVGhpcyByZWdp
c3RlciBhbGxvY2F0b3IgaXMgb3B0aW1pemVkIHByaW1hcmlseSBmb3IgcnVubmluZyBxdWlja2x5
LiBJdCdzIGV4cGVjdGVkCisvLyB0aGF0IGltcHJvdmVtZW50cyB0byB0aGlzIHJlZ2lzdGVyIGFs
bG9jYXRvciBzaG91bGQgZm9jdXMgb24gaW1wcm92aW5nIGl0cyBleGVjdXRpb24gdGltZSB3aXRo
b3V0IG11Y2gKKy8vIHJlZ2FyZCBmb3IgdGhlIHF1YWxpdHkgb2YgZ2VuZXJhdGVkIGNvZGUuIElm
IHlvdSB3YW50IGdvb2QgY29kZSwgdXNlIGdyYXBoIGNvbG9yaW5nLgorLy8KKy8vIEZvciBBaXIn
cyBwcmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRvciwgc2VlIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlH
cmFwaENvbG9yaW5nLmh8Y3BwLgordm9pZCBhbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2NhbihD
b2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9j
YXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVh
clNjYW4uaAkocmV2aXNpb24gMjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDEzICszNywxNiBAQCBjbGFzcyBDb2RlOwogLy8gVGhpcyBpbXBsZW1lbnRzIHRo
ZSBQb2xldHRvIGFuZCBTYXJrYXIgcmVnaXN0ZXIgYWxsb2NhdG9yIGNhbGxlZCAibGluZWFyIHNj
YW4iOgogLy8gaHR0cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTMzMDI1MAogLy8KLS8v
IFRoaXMgaXMgbm90IEFpcidzIHByaW1hcnkgcmVnaXN0ZXIgYWxsb2NhdG9yLiBXZSB1c2UgaXQg
b25seSB3aGVuIHJ1bm5pbmcgYXQgb3B0TGV2ZWw8Mi4gVGhhdCdzIG5vdAotLy8gdGhlIGRlZmF1
bHQgbGV2ZWwuIFRoaXMgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzIG9wdGltaXplZCBwcmltYXJpbHkg
Zm9yIHJ1bm5pbmcgcXVpY2tseS4gSXQncyBleHBlY3RlZAotLy8gdGhhdCBpbXByb3ZlbWVudHMg
dG8gdGhpcyByZWdpc3RlciBhbGxvY2F0b3Igc2hvdWxkIGZvY3VzIG9uIGltcHJvdmluZyBpdHMg
ZXhlY3V0aW9uIHRpbWUgd2l0aG91dCBtdWNoCi0vLyByZWdhcmQgZm9yIHRoZSBxdWFsaXR5IG9m
IGdlbmVyYXRlZCBjb2RlLiBJZiB5b3Ugd2FudCBnb29kIGNvZGUsIHVzZSBncmFwaCBjb2xvcmlu
Zy4KKy8vIFRoaXMgaXMgbm90IEFpcidzIHByaW1hcnkgcmVnaXN0ZXIgYWxsb2NhdG9yLiBXZSB1
c2UgaXQgb25seSB3aGVuIHJ1bm5pbmcgYXQgb3B0TGV2ZWw8Mi4KKy8vIFRoYXQncyBub3QgdGhl
IGRlZmF1bHQgbGV2ZWwuIFRoaXMgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzIG9wdGltaXplZCBwcmlt
YXJpbHkgZm9yIHJ1bm5pbmcKKy8vIHF1aWNrbHkuIEl0J3MgZXhwZWN0ZWQgdGhhdCBpbXByb3Zl
bWVudHMgdG8gdGhpcyByZWdpc3RlciBhbGxvY2F0b3Igc2hvdWxkIGZvY3VzIG9uIGltcHJvdmlu
ZworLy8gaXRzIGV4ZWN1dGlvbiB0aW1lIHdpdGhvdXQgbXVjaCByZWdhcmQgZm9yIHRoZSBxdWFs
aXR5IG9mIGdlbmVyYXRlZCBjb2RlLiBJZiB5b3Ugd2FudCBnb29kCisvLyBjb2RlLCB1c2UgZ3Jh
cGggY29sb3JpbmcuCiAvLwogLy8gRm9yIEFpcidzIHByaW1hcnkgcmVnaXN0ZXIgYWxsb2NhdG9y
LCBzZWUgQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuaHxjcHAuCi12b2lkIGFs
bG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuKENvZGUmKTsKKy8vCisvLyBUaGlzIGFsc28gZG9l
cyBzdGFjayBhbGxvY2F0aW9uIGFzIGFuIGFmdGVydGhvdWdodC4gSXQgZG9lcyBub3QgZG8gYW55
IHNwaWxsIGNvYWxlc2NpbmcuCit2b2lkIGFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVh
clNjYW4oQ29kZSYpOwogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVh
clNjYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCShyZXZpc2lvbiAyMTUyMzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJT
Y2FuLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDU5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgiCi0KLSNpZiBFTkFCTEUoQjNf
SklUKQotCi0jaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgotI2luY2x1ZGUgIkFpckNvZGUuaCIK
LSNpbmNsdWRlICJBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oIgotI2luY2x1ZGUgIkFpclBo
YXNlSW5zZXJ0aW9uU2V0LmgiCi0jaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKLSNpbmNsdWRl
ICJBaXJMaXZlbmVzcy5oIgotI2luY2x1ZGUgIkFpclBhZEludGVyZmVyZW5jZS5oIgotI2luY2x1
ZGUgIkFpclBoYXNlU2NvcGUuaCIKLSNpbmNsdWRlICJBaXJSZWdMaXZlbmVzcy5oIgotI2luY2x1
ZGUgIkFpclRtcElubGluZXMuaCIKLSNpbmNsdWRlICJBaXJUbXBNYXAuaCIKLSNpbmNsdWRlIDx3
dGYvTGlzdER1bXAuaD4KLSNpbmNsdWRlIDx3dGYvUmFuZ2UuaD4KLQotbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewotCi1uYW1lc3BhY2UgewotCi1OT19SRVRV
Uk5fRFVFX1RPX0NSQVNIIE5FVkVSX0lOTElORSB2b2lkIGNyYXNoKCkKLXsKLSAgICBDUkFTSCgp
OwotfQotCi0jdW5kZWYgUkVMRUFTRV9BU1NFUlQKLSNkZWZpbmUgUkVMRUFTRV9BU1NFUlQoYXNz
ZXJ0aW9uKSBkbyB7IFwKLSAgICBpZiAoIShhc3NlcnRpb24pKSB7IFwKLSAgICAgICAgV1RGUmVw
b3J0QXNzZXJ0aW9uRmFpbHVyZShfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJ
T04sICNhc3NlcnRpb24pOyBcCi0gICAgICAgIGNyYXNoKCk7IFwKLSAgICB9IFwKLX0gd2hpbGUg
KDApCi0KLWJvb2wgdmVyYm9zZSgpIHsgcmV0dXJuIE9wdGlvbnM6OmFpckxpbmVhclNjYW5WZXJi
b3NlKCk7IH0KLQotLy8gUGhhc2UgY29uc3RhbnRzIHdlIHVzZSBmb3IgdGhlIFBoYXNlSW5zZXJ0
aW9uU2V0LgotY29uc3QgdW5zaWduZWQgZmlyc3RQaGFzZSA9IDA7Ci1jb25zdCB1bnNpZ25lZCBz
ZWNvbmRQaGFzZSA9IDE7Ci0KLXR5cGVkZWYgUmFuZ2U8c2l6ZV90PiBJbnRlcnZhbDsKLQotc3Ry
dWN0IFRtcERhdGEgewotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotICAg
IHsKLSAgICAgICAgb3V0LnByaW50KCJ7aW50ZXJ2YWwgPSAiLCBpbnRlcnZhbCwgIiwgc3BpbGxl
ZCA9ICIsIHBvaW50ZXJEdW1wKHNwaWxsZWQpLCAiLCBhc3NpZ25lZCA9ICIsIGFzc2lnbmVkLCAi
LCBpc1Vuc3BpbGxhYmxlID0gIiwgaXNVbnNwaWxsYWJsZSwgIiwgcG9zc2libGVSZWdzID0gIiwg
cG9zc2libGVSZWdzLCAiLCBkaWRCdWlsZFBvc3NpYmxlUmVncyA9ICIsIGRpZEJ1aWxkUG9zc2li
bGVSZWdzLCAifSIpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHZhbGlkYXRlKCkKLSAgICB7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCEoc3BpbGxlZCAmJiBhc3NpZ25lZCkpOwotICAgIH0KLSAg
ICAKLSAgICBJbnRlcnZhbCBpbnRlcnZhbDsKLSAgICBTdGFja1Nsb3QqIHNwaWxsZWQgeyBudWxs
cHRyIH07Ci0gICAgUmVnaXN0ZXJTZXQgcG9zc2libGVSZWdzOwotICAgIFJlZyBhc3NpZ25lZDsK
LSAgICBib29sIGlzVW5zcGlsbGFibGUgeyBmYWxzZSB9OwotICAgIGJvb2wgZGlkQnVpbGRQb3Nz
aWJsZVJlZ3MgeyBmYWxzZSB9OwotfTsKLQotc3RydWN0IENsb2JiZXIgewotICAgIENsb2JiZXIo
KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgQ2xvYmJlcihzaXplX3QgaW5kZXgsIFJlZ2lzdGVy
U2V0IHJlZ3MpCi0gICAgICAgIDogaW5kZXgoaW5kZXgpCi0gICAgICAgICwgcmVncyhyZWdzKQot
ICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Ci0gICAgewotICAgICAgICBvdXQucHJpbnQoaW5kZXgsICI6IiwgcmVncyk7Ci0gICAgfQotICAg
IAotICAgIHNpemVfdCBpbmRleCB7IDAgfTsKLSAgICBSZWdpc3RlclNldCByZWdzOwotfTsKLQot
Y2xhc3MgTGluZWFyU2NhbiB7Ci1wdWJsaWM6Ci0gICAgTGluZWFyU2NhbihDb2RlJiBjb2RlKQot
ICAgICAgICA6IG1fY29kZShjb2RlKQotICAgICAgICAsIG1fc3RhcnRJbmRleChjb2RlLnNpemUo
KSkKLSAgICAgICAgLCBtX21hcChjb2RlKQotICAgICAgICAsIG1faW5zZXJ0aW9uU2V0cyhjb2Rl
LnNpemUoKSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHZvaWQgcnVuKCkKLSAgICB7Ci0gICAg
ICAgIGJ1aWxkUmVnaXN0ZXJTZXQoKTsKLSAgICAgICAgYnVpbGRJbmRpY2VzKCk7Ci0gICAgICAg
IGJ1aWxkSW50ZXJ2YWxzKCk7Ci0gICAgICAgIGlmIChzaG91bGRTcGlsbEV2ZXJ5dGhpbmcoKSkg
ewotICAgICAgICAgICAgc3BpbGxFdmVyeXRoaW5nKCk7Ci0gICAgICAgICAgICBlbWl0U3BpbGxD
b2RlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgcHJlcGFy
ZUludGVydmFscygpOwotICAgICAgICAgICAgbV9kaWRTcGlsbCA9IGZhbHNlOwotICAgICAgICAg
ICAgZm9yRWFjaEJhbmsoCi0gICAgICAgICAgICAgICAgWyZdIChCYW5rIGJhbmspIHsKLSAgICAg
ICAgICAgICAgICAgICAgYXR0ZW1wdFNjYW4oYmFuayk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICBpZiAoIW1fZGlkU3BpbGwpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBlbWl0U3BpbGxDb2RlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaW5zZXJ0U3BpbGxD
b2RlKCk7Ci0gICAgICAgIGFzc2lnblJlZ2lzdGVycygpOwotICAgIH0KLSAgICAKLXByaXZhdGU6
Ci0gICAgdm9pZCBidWlsZFJlZ2lzdGVyU2V0KCkKLSAgICB7Ci0gICAgICAgIGZvckVhY2hCYW5r
KAotICAgICAgICAgICAgWyZdIChCYW5rIGJhbmspIHsKLSAgICAgICAgICAgICAgICBtX3JlZ2lz
dGVyc1tiYW5rXSA9IG1fY29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKGJhbmspOwotICAgICAgICAg
ICAgICAgIG1fcmVnaXN0ZXJTZXRbYmFua10uc2V0QWxsKG1fcmVnaXN0ZXJzW2JhbmtdKTsKLSAg
ICAgICAgICAgICAgICBtX3VuaWZpZWRSZWdpc3RlclNldC5tZXJnZShtX3JlZ2lzdGVyU2V0W2Jh
bmtdKTsKLSAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIHZvaWQgYnVpbGRJbmRpY2VzKCkK
LSAgICB7Ci0gICAgICAgIHNpemVfdCBpbmRleCA9IDA7Ci0gICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2NvZGUpIHsKLSAgICAgICAgICAgIG1fc3RhcnRJbmRleFtibG9ja10gPSBp
bmRleDsKLSAgICAgICAgICAgIGluZGV4ICs9IGJsb2NrLT5zaXplKCkgKiAyOwotICAgICAgICB9
Ci0gICAgfQotICAgIAotICAgIHNpemVfdCBpbmRleE9mSGVhZChCYXNpY0Jsb2NrKiBibG9jaykK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX3N0YXJ0SW5kZXhbYmxvY2tdOwotICAgIH0KLSAgICAK
LSAgICBzaXplX3QgaW5kZXhPZlRhaWwoQmFzaWNCbG9jayogYmxvY2spCi0gICAgewotICAgICAg
ICByZXR1cm4gaW5kZXhPZkhlYWQoYmxvY2spICsgYmxvY2stPnNpemUoKSAqIDI7Ci0gICAgfQot
ICAgIAotICAgIEludGVydmFsIGludGVydmFsKHNpemVfdCBpbmRleE9mRWFybHksIEFyZzo6VGlt
aW5nIHRpbWluZykKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodGltaW5nKSB7Ci0gICAgICAgIGNh
c2UgQXJnOjpPbmx5RWFybHk6Ci0gICAgICAgICAgICByZXR1cm4gSW50ZXJ2YWwoaW5kZXhPZkVh
cmx5KTsKLSAgICAgICAgY2FzZSBBcmc6Ok9ubHlMYXRlOgotICAgICAgICAgICAgcmV0dXJuIElu
dGVydmFsKGluZGV4T2ZFYXJseSArIDEpOwotICAgICAgICBjYXNlIEFyZzo6RWFybHlBbmRMYXRl
OgotICAgICAgICAgICAgcmV0dXJuIEludGVydmFsKGluZGV4T2ZFYXJseSwgaW5kZXhPZkVhcmx5
ICsgMik7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IHJldHVybiBJbnRlcnZhbCgpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGJ1aWxkSW50ZXJ2YWxz
KCkKLSAgICB7Ci0gICAgICAgIFVuaWZpZWRUbXBMaXZlbmVzcyBsaXZlbmVzcyhtX2NvZGUpOwot
ICAgICAgICAKLSAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkgewotICAg
ICAgICAgICAgc2l6ZV90IGluZGV4T2ZIZWFkID0gdGhpcy0+aW5kZXhPZkhlYWQoYmxvY2spOwot
ICAgICAgICAgICAgc2l6ZV90IGluZGV4T2ZUYWlsID0gdGhpcy0+aW5kZXhPZlRhaWwoYmxvY2sp
OwotICAgICAgICAgICAgaWYgKHZlcmJvc2UoKSkgewotICAgICAgICAgICAgICAgIGRhdGFMb2co
IkF0IGJsb2NrICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIlxuIik7Ci0gICAgICAgICAgICAgICAg
ZGF0YUxvZygiICBpbmRleE9mSGVhZCA9ICIsIGluZGV4T2ZIZWFkLCAiXG4iKTsKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgIGlkbmV4T2ZUYWlsID0gIiwgaW5kZXhPZlRhaWwsICJcbiIpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbGl2ZW5lc3MubGl2ZUF0
SGVhZChibG9jaykpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXRtcC5pc1JlZygpKQotICAgICAg
ICAgICAgICAgICAgICBtX21hcFt0bXBdLmludGVydmFsIHw9IEludGVydmFsKGluZGV4T2ZIZWFk
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGxpdmVuZXNzLmxp
dmVBdFRhaWwoYmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF0bXAuaXNSZWcoKSkKLSAg
ICAgICAgICAgICAgICAgICAgbV9tYXBbdG1wXS5pbnRlcnZhbCB8PSBJbnRlcnZhbChpbmRleE9m
VGFpbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5k
ZXgpIHsKLSAgICAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7
Ci0gICAgICAgICAgICAgICAgc2l6ZV90IGluZGV4T2ZFYXJseSA9IGluZGV4T2ZIZWFkICsgaW5z
dEluZGV4ICogMjsKLSAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoCi0gICAgICAgICAg
ICAgICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fbWFwW3RtcF0u
aW50ZXJ2YWwgfD0gaW50ZXJ2YWwoaW5kZXhPZkVhcmx5LCBBcmc6OnRpbWluZyhyb2xlKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBSZWdM
aXZlbmVzczo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBhdXRvIHJlY29yZCA9IFsmXSAodW5zaWduZWQgaW5zdEluZGV4KSB7
Ci0gICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcmVncyA9IGxvY2FsQ2FsYy5saXZlKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKEluc3QqIHByZXYgPSBibG9jay0+Z2V0KGluc3RJbmRleCAtIDEp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHByZXZSZWdzID0gcmVnczsKLSAg
ICAgICAgICAgICAgICAgICAgcHJldi0+Zm9yRWFjaDxSZWc+KAotICAgICAgICAgICAgICAgICAg
ICAgICAgWyZdIChSZWcmIHJlZywgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlRGVmKHJvbGUpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2UmVncy5hZGQocmVnKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBpZiAocHJldi0+a2luZC5vcGNv
ZGUgPT0gUGF0Y2gpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmV2UmVncy5tZXJnZShwcmV2
LT5leHRyYUNsb2JiZXJlZFJlZ3MoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHByZXZSZWdzLmZp
bHRlcihtX3VuaWZpZWRSZWdpc3RlclNldCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcHJl
dlJlZ3MuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9jbG9iYmVycy5hcHBl
bmQoQ2xvYmJlcihpbmRleE9mSGVhZCArIGluc3RJbmRleCAqIDIgLSAxLCBwcmV2UmVncykpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoSW5zdCogbmV4dCA9IGJsb2Nr
LT5nZXQoaW5zdEluZGV4KSkgewotICAgICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBuZXh0
UmVncyA9IHJlZ3M7Ci0gICAgICAgICAgICAgICAgICAgIG5leHQtPmZvckVhY2g8UmVnPigKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFsmXSAoUmVnJiByZWcsIEFyZzo6Um9sZSByb2xlLCBCYW5r
LCBXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlE
ZWYocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRSZWdzLmFkZChy
ZWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChuZXh0LT5raW5kLm9wY29kZSA9PSBQYXRjaCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5l
eHRSZWdzLm1lcmdlKG5leHQtPmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKCkpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoIW5leHRSZWdzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fY2xvYmJlcnMuYXBwZW5kKENsb2JiZXIoaW5kZXhPZkhlYWQgKyBpbnN0SW5kZXggKiAy
LCBuZXh0UmVncykpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIHJlY29yZChibG9jay0+c2l6ZSgpKTsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7Ci0g
ICAgICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKLSAgICAgICAgICAg
ICAgICByZWNvcmQoaW5zdEluZGV4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgc3RkOjpzb3J0KAotICAgICAgICAgICAgbV9jbG9iYmVycy5iZWdpbigpLCBt
X2Nsb2JiZXJzLmVuZCgpLAotICAgICAgICAgICAgW10gKENsb2JiZXImIGEsIENsb2JiZXImIGIp
IC0+IGJvb2wgewotICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4IDwgYi5pbmRleDsKLSAg
ICAgICAgICAgIH0pOwotICAgICAgICAKLSAgICAgICAgaWYgKHZlcmJvc2UoKSkgewotICAgICAg
ICAgICAgZGF0YUxvZygiSW50ZXJ2YWxzOlxuIik7Ci0gICAgICAgICAgICBtX2NvZGUuZm9yRWFj
aFRtcCgKLSAgICAgICAgICAgICAgICBbJl0gKFRtcCB0bXApIHsKLSAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgICIsIHRtcCwgIjogIiwgbV9tYXBbdG1wXSwgIlxuIik7Ci0gICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgYm9vbCBzaG91bGRTcGls
bEV2ZXJ5dGhpbmcoKQotICAgIHsKLSAgICAgICAgaWYgKCFPcHRpb25zOjphaXJMaW5lYXJTY2Fu
U3BpbGxzRXZlcnl0aGluZygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAK
LSAgICAgICAgLy8gWW91J3JlIG1lYW50IHRvIGhhY2sgdGhpcyBzbyB0aGF0IHlvdSBzZWxlY3Rp
dmVseSBzcGlsbCBldmVyeXRoaW5nIGRlcGVuZGluZyBvbiByZWFzb25zLgotICAgICAgICAvLyBU
aGF0J3Mgc3VwZXIgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuCi0KLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BpbGxFdmVyeXRoaW5nKCkKLSAgICB7Ci0gICAgICAg
IG1fY29kZS5mb3JFYWNoVG1wKAotICAgICAgICAgICAgWyZdIChUbXAgdG1wKSB7Ci0gICAgICAg
ICAgICAgICAgc3BpbGwodG1wKTsKLSAgICAgICAgICAgIH0pOwotICAgIH0KLSAgICAKLSAgICB2
b2lkIHByZXBhcmVJbnRlcnZhbHMoKQotICAgIHsKLSAgICAgICAgbV90bXBzLnJlc2l6ZSgwKTsK
LSAgICAgICAgCi0gICAgICAgIG1fY29kZS5mb3JFYWNoVG1wKAotICAgICAgICAgICAgWyZdIChU
bXAgdG1wKSB7Ci0gICAgICAgICAgICAgICAgVG1wRGF0YSYgZGF0YSA9IG1fbWFwW3RtcF07Ci0g
ICAgICAgICAgICAgICAgaWYgKGRhdGEuc3BpbGxlZCkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGRhdGEuYXNzaWduZWQgPSBS
ZWcoKTsKLSAgICAgICAgICAgICAgICBtX3RtcHMuYXBwZW5kKHRtcCk7Ci0gICAgICAgICAgICB9
KTsKLSAgICAgICAgCi0gICAgICAgIHN0ZDo6c29ydCgKLSAgICAgICAgICAgIG1fdG1wcy5iZWdp
bigpLCBtX3RtcHMuZW5kKCksCi0gICAgICAgICAgICBbJl0gKFRtcCYgYSwgVG1wJiBiKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIG1fbWFwW2FdLmludGVydmFsLmJlZ2luKCkgPCBtX21hcFti
XS5pbnRlcnZhbC5iZWdpbigpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIAotICAgICAgICBp
ZiAodmVyYm9zZSgpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCJUbXBzOiAiLCBsaXN0RHVtcCht
X3RtcHMpLCAiXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2coIkNsb2JiZXJzOiAiLCBsaXN0RHVt
cChtX2Nsb2JiZXJzKSwgIlxuIik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgVG1wIGFk
ZFNwaWxsVG1wV2l0aEludGVydmFsKEJhbmsgYmFuaywgSW50ZXJ2YWwgaW50ZXJ2YWwpCi0gICAg
ewotICAgICAgICBUbXBEYXRhIGRhdGE7Ci0gICAgICAgIGRhdGEuaW50ZXJ2YWwgPSBpbnRlcnZh
bDsKLSAgICAgICAgZGF0YS5pc1Vuc3BpbGxhYmxlID0gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAg
IFRtcCB0bXAgPSBtX2NvZGUubmV3VG1wKGJhbmspOwotICAgICAgICBtX21hcC5hcHBlbmQodG1w
LCBkYXRhKTsKLSAgICAgICAgcmV0dXJuIHRtcDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhdHRl
bXB0U2NhbihCYW5rIGJhbmspCi0gICAgewotICAgICAgICAvLyBUaGlzIGlzIG1vZGVsZWQgYWZ0
ZXIgTGluZWFyU2NhblJlZ2lzdGVyQWxsb2NhdGlvbiBpbiBGaWcuIDEgaW4KLSAgICAgICAgLy8g
aHR0cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTMzMDI1MC4KLQotICAgICAgICBtX2Fj
dGl2ZS5jbGVhcigpOwotICAgICAgICBtX2FjdGl2ZVJlZ3MgPSBSZWdpc3RlclNldCgpOwotICAg
ICAgICAKLSAgICAgICAgc2l6ZV90IGNsb2JiZXJJbmRleCA9IDA7Ci0gICAgICAgIGZvciAoVG1w
JiB0bXAgOiBtX3RtcHMpIHsKLSAgICAgICAgICAgIGlmICh0bXAuYmFuaygpICE9IGJhbmspCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFRtcERh
dGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKLSAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IGVudHJ5
LmludGVydmFsLmJlZ2luKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2ZXJib3Nl
KCkpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbmRleCAjIiwgaW5kZXgsICI6ICIsIHRt
cCwgIlxuIik7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAiLCB0bXAsICI6ICIsIGVudHJ5
LCAiXG4iKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIGNsb2JiZXJJbmRleCA9ICIsIGNs
b2JiZXJJbmRleCwgIlxuIik7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBzbyBt
dWNoIGZhc3Rlci4KLSAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fY29kZVsw
XTsKLSAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGNhbmRpZGF0ZUJsb2NrIDogbV9j
b2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXJ0SW5kZXhbY2FuZGlkYXRlQmxv
Y2tdID4gaW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgYmxvY2sgPSBjYW5kaWRhdGVCbG9jazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW5zdEluZGV4ID0gKGluZGV4IC0gbV9zdGFydEluZGV4W2Js
b2NrXSArIDEpIC8gMjsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIEF0OiAiLCBwb2ludGVy
RHVtcChibG9jayksICIsIGluc3RJbmRleCA9ICIsIGluc3RJbmRleCwgIlxuIik7Ci0gICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgIFByZXY6ICIsIHBvaW50ZXJEdW1wKGJsb2NrLT5nZXQoaW5z
dEluZGV4IC0gMSkpLCAiXG4iKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgTmV4dDog
IiwgcG9pbnRlckR1bXAoYmxvY2stPmdldChpbnN0SW5kZXgpKSwgIlxuIik7Ci0gICAgICAgICAg
ICAgICAgZGF0YUxvZygiICBBY3RpdmU6XG4iKTsKLSAgICAgICAgICAgICAgICBmb3IgKFRtcCB0
bXAgOiBtX2FjdGl2ZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIHRtcCwg
IjogIiwgbV9tYXBbdG1wXSwgIlxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIFRoaXMgaXMgRXhwaXJlT2xkSW50ZXJ2YWxzIGluIEZpZy4gMS4KLSAgICAg
ICAgICAgIHdoaWxlICghbV9hY3RpdmUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgVG1w
IHRtcCA9IG1fYWN0aXZlLmZpcnN0KCk7Ci0gICAgICAgICAgICAgICAgVG1wRGF0YSYgZW50cnkg
PSBtX21hcFt0bXBdOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGJvb2wgZXhw
aXJlZCA9IGVudHJ5LmludGVydmFsLmVuZCgpIDw9IGluZGV4OwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmICghZXhwaXJlZCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9hY3RpdmUucmVtb3ZlRmlyc3Qo
KTsKLSAgICAgICAgICAgICAgICBtX2FjdGl2ZVJlZ3MucmVtb3ZlKGVudHJ5LmFzc2lnbmVkKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSWYgbmVjZXNzYXJ5LCBjb21wdXRlIHRo
ZSBzZXQgb2YgcmVnaXN0ZXJzIHRoYXQgdGhpcyB0bXAgY291bGQgZXZlbiB1c2UuIFRoaXMgaXMg
bm90Ci0gICAgICAgICAgICAvLyBwYXJ0IG9mIEZpZy4gMSwgYnV0IGl0J3MgYSB0ZWNobmlxdWUg
dGhhdCB0aGUgYXV0aG9ycyBjbGFpbSB0byBoYXZlIGltcGxlbWVudGVkIGluIG9uZSBvZgotICAg
ICAgICAgICAgLy8gdGhlaXIgdHdvIGltcGxlbWVudGF0aW9ucy4gVGhlcmUgbWF5IGJlIG90aGVy
IG1vcmUgZWZmaWNpZW50IHdheXMgdG8gZG8gdGhpcywgYnV0IHRoaXMKLSAgICAgICAgICAgIC8v
IGltcGxlbWVudGF0aW9uIGdldHMgc29tZSBwZXJmIHdpbnMgZnJvbSBwaWdneS1iYWNraW5nIHRo
aXMgY2FsY3VsYXRpb24gaW4gdGhlIHNjYW4uCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAg
Ly8gTm90ZSB0aGF0IHRoZSBkaWRCdWlsZCBmbGFnIHN0aWNrcyB0aHJvdWdoIHNwaWxsaW5nLiBT
cGlsbGluZyBkb2Vzbid0IGNoYW5nZSB0aGUKLSAgICAgICAgICAgIC8vIGludGVyZmVyZW5jZSBz
aXR1YXRpb24uCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGNv
dWxkIHNob3J0LWNpcmN1aXQgdGhpcyBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBzcGlsbGFibGUg
dG1wLCB0aGVyZSBhcmUgbm8KLSAgICAgICAgICAgIC8vIGZyZWUgcmVnaXN0ZXJzLCBhbmQgdGhp
cyByZWdpc3RlcidzIGludGVydmFsIGVuZHMgYWZ0ZXIgdGhlIG9uZSBvbiB0aGUgdG9wIG9mIHRo
ZSBhY3RpdmUKLSAgICAgICAgICAgIC8vIHN0YWNrLgotICAgICAgICAgICAgaWYgKCFlbnRyeS5k
aWRCdWlsZFBvc3NpYmxlUmVncykgewotICAgICAgICAgICAgICAgIC8vIEFkdmFuY2UgdGhlIGNs
b2JiZXIgaW5kZXggdW50aWwgaXQncyBhdCBhIGNsb2JiZXIgdGhhdCBpcyByZWxldmFudCB0byB1
cy4KLSAgICAgICAgICAgICAgICB3aGlsZSAoY2xvYmJlckluZGV4IDwgbV9jbG9iYmVycy5zaXpl
KCkgJiYgbV9jbG9iYmVyc1tjbG9iYmVySW5kZXhdLmluZGV4IDwgaW5kZXgpCi0gICAgICAgICAg
ICAgICAgICAgIGNsb2JiZXJJbmRleCsrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIFJlZ2lzdGVyU2V0IHBvc3NpYmxlUmVncyA9IG1fcmVnaXN0ZXJTZXRbYmFua107Ci0gICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGNsb2JiZXJJbmRleDsgaSA8IG1fY2xvYmJlcnMu
c2l6ZSgpICYmIG1fY2xvYmJlcnNbaV0uaW5kZXggPCBlbnRyeS5pbnRlcnZhbC5lbmQoKTsgKytp
KQotICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZVJlZ3MuZXhjbHVkZShtX2Nsb2JiZXJzW2ld
LnJlZ3MpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGVudHJ5LnBvc3NpYmxl
UmVncyA9IHBvc3NpYmxlUmVnczsKLSAgICAgICAgICAgICAgICBlbnRyeS5kaWRCdWlsZFBvc3Np
YmxlUmVncyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmICh2ZXJib3NlKCkpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiICBQb3NzaWJsZSByZWdz
OiAiLCBlbnRyeS5wb3NzaWJsZVJlZ3MsICJcbiIpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICAvLyBGaW5kIGEgZnJlZSByZWdpc3RlciB0aGF0IHdlIGFyZSBhbGxvd2VkIHRvIHVzZS4KLSAg
ICAgICAgICAgIGlmIChtX2FjdGl2ZS5zaXplKCkgIT0gbV9yZWdpc3RlcnNbYmFua10uc2l6ZSgp
KSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBkaWRBc3NpZ24gPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICBmb3IgKFJlZyByZWcgOiBtX3JlZ2lzdGVyc1tiYW5rXSkgewotICAgICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogQ291bGQgZG8gcHJpb3JpdHkgY29sb3JpbmcgaGVyZS4KLSAgICAgICAg
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
MDMwNAotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fYWN0aXZlUmVncy5jb250YWlucyhyZWcp
ICYmIGVudHJ5LnBvc3NpYmxlUmVncy5jb250YWlucyhyZWcpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBhc3NpZ24odG1wLCByZWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGlkQXNz
aWduID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChkaWRBc3Np
Z24pCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAvLyBUaGlzIGlzIFNwaWxsQXRJbnRlcnZhbCBpbiBGaWcuIDEs
IGJ1dCBtb2RpZmllZCB0byBoYW5kbGUgY2xvYmJlcnMuCi0gICAgICAgICAgICBUbXAgc3BpbGxU
bXAgPSBtX2FjdGl2ZS50YWtlTGFzdCgKLSAgICAgICAgICAgICAgICBbJl0gKFRtcCBzcGlsbENh
bmRpZGF0ZSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeS5wb3Nz
aWJsZVJlZ3MuY29udGFpbnMobV9tYXBbc3BpbGxDYW5kaWRhdGVdLmFzc2lnbmVkKTsKLSAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGlmICghc3BpbGxUbXApIHsKLSAgICAgICAgICAg
ICAgICBzcGlsbCh0bXApOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgVG1wRGF0YSYgc3BpbGxFbnRyeSA9IG1fbWFwW3NwaWxsVG1wXTsKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNwaWxsRW50cnkuYXNzaWduZWQpOwotICAgICAgICAg
ICAgaWYgKHNwaWxsRW50cnkuaXNVbnNwaWxsYWJsZSB8fAotICAgICAgICAgICAgICAgICghZW50
cnkuaXNVbnNwaWxsYWJsZSAmJiBzcGlsbEVudHJ5LmludGVydmFsLmVuZCgpIDw9IGVudHJ5Lmlu
dGVydmFsLmVuZCgpKSkgewotICAgICAgICAgICAgICAgIHNwaWxsKHRtcCk7Ci0gICAgICAgICAg
ICAgICAgYWRkVG9BY3RpdmUoc3BpbGxUbXApOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBhc3NpZ24odG1wLCBzcGls
bEVudHJ5LmFzc2lnbmVkKTsKLSAgICAgICAgICAgIHNwaWxsKHNwaWxsVG1wKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICB2b2lkIGFkZFRvQWN0aXZlKFRtcCB0bXApCi0gICAgewotICAg
ICAgICBpZiAobV9tYXBbdG1wXS5pc1Vuc3BpbGxhYmxlKSB7Ci0gICAgICAgICAgICBtX2FjdGl2
ZS5wcmVwZW5kKHRtcCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIG1fYWN0aXZlLmFwcGVuZEFuZEJ1YmJsZSgKLSAgICAgICAgICAgIHRtcCwKLSAg
ICAgICAgICAgIFsmXSAoVG1wIG90aGVyVG1wKSAtPiBib29sIHsKLSAgICAgICAgICAgICAgICBU
bXBEYXRhJiBvdGhlckVudHJ5ID0gbV9tYXBbb3RoZXJUbXBdOwotICAgICAgICAgICAgICAgIGlm
IChvdGhlckVudHJ5LmlzVW5zcGlsbGFibGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9tYXBbb3RoZXJUbXBdLmludGVydmFsLmVu
ZCgpID4gbV9tYXBbdG1wXS5pbnRlcnZhbC5lbmQoKTsKLSAgICAgICAgICAgIH0pOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIGFzc2lnbihUbXAgdG1wLCBSZWcgcmVnKQotICAgIHsKLSAgICAgICAg
VG1wRGF0YSYgZW50cnkgPSBtX21hcFt0bXBdOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZW50
cnkuc3BpbGxlZCk7Ci0gICAgICAgIGVudHJ5LmFzc2lnbmVkID0gcmVnOwotICAgICAgICBtX2Fj
dGl2ZVJlZ3MuYWRkKHJlZyk7Ci0gICAgICAgIGFkZFRvQWN0aXZlKHRtcCk7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgc3BpbGwoVG1wIHRtcCkKLSAgICB7Ci0gICAgICAgIFRtcERhdGEmIGVudHJ5
ID0gbV9tYXBbdG1wXTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWVudHJ5LmlzVW5zcGlsbGFi
bGUpOwotICAgICAgICBlbnRyeS5zcGlsbGVkID0gbV9jb2RlLmFkZFN0YWNrU2xvdCg4LCBTdGFj
a1Nsb3RLaW5kOjpTcGlsbCk7Ci0gICAgICAgIGVudHJ5LmFzc2lnbmVkID0gUmVnKCk7Ci0gICAg
ICAgIG1fZGlkU3BpbGwgPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGVtaXRTcGlsbENv
ZGUoKQotICAgIHsKLSAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkgewot
ICAgICAgICAgICAgc2l6ZV90IGluZGV4T2ZIZWFkID0gdGhpcy0+aW5kZXhPZkhlYWQoYmxvY2sp
OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBi
bG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgewotICAgICAgICAgICAgICAgIEluc3QmIGluc3Qg
PSBibG9jay0+YXQoaW5zdEluZGV4KTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleE9m
RWFybHkgPSBpbmRleE9mSGVhZCArIGluc3RJbmRleCAqIDI7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgLy8gRmlyc3QgdHJ5IHRvIHNwaWxsIGRpcmVjdGx5LgotICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgICAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaV07Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghYXJnLmlzVG1wKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy5pc1JlZygpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3Bp
bGxlZCA9IG1fbWFwW2FyZy50bXAoKV0uc3BpbGxlZDsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFzcGlsbGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghaW5zdC5hZG1pdHNTdGFjayhpKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OnN0YWNrKHNwaWxs
ZWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAvLyBGYWxsIGJhY2sgb24gdGhlIGhhcmQgd2F5LgotICAgICAgICAgICAgICAgIGluc3QuZm9y
RWFjaFRtcCgKLSAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJv
bGUsIEJhbmsgYmFuaywgV2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAu
aXNSZWcoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNwaWxsZWQgPSBtX21hcFt0bXBdLnNwaWxsZWQ7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNwaWxsZWQpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgT3Bjb2RlIG1vdmUgPSBi
YW5rID09IEdQID8gTW92ZSA6IE1vdmVEb3VibGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
bXAgPSBhZGRTcGlsbFRtcFdpdGhJbnRlcnZhbChiYW5rLCBpbnRlcnZhbChpbmRleE9mRWFybHks
IEFyZzo6dGltaW5nKHJvbGUpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9
PSBBcmc6OlNjcmF0Y2gpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9sZSkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXRzW2Jsb2NrXS5pbnNlcnQoaW5zdEluZGV4
LCBzZWNvbmRQaGFzZSwgbW92ZSwgaW5zdC5vcmlnaW4sIEFyZzo6c3RhY2soc3BpbGxlZCksIHRt
cCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xlKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldHNbYmxvY2tdLmluc2VydChp
bnN0SW5kZXggKyAxLCBmaXJzdFBoYXNlLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1wLCBBcmc6OnN0
YWNrKHNwaWxsZWQpKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBpbnNlcnRTcGlsbENvZGUoKQotICAgIHsK
LSAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkKLSAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0c1tibG9ja10uZXhlY3V0ZShibG9jayk7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgYXNzaWduUmVnaXN0ZXJzKCkKLSAgICB7Ci0gICAgICAgIGlmICh2ZXJib3NlKCkpIHsKLSAg
ICAgICAgICAgIGRhdGFMb2coIkFib3V0IHRvIGFsbG9jYXRlIHJlZ2lzdGVycy4gU3RhdGUgb2Yg
YWxsIHRtcHM6XG4iKTsKLSAgICAgICAgICAgIG1fY29kZS5mb3JFYWNoVG1wKAotICAgICAgICAg
ICAgICAgIFsmXSAoVG1wIHRtcCkgewotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
IiwgdG1wLCAiOiAiLCBtX21hcFt0bXBdLCAiXG4iKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgIGRhdGFMb2coIklSOlxuIik7Ci0gICAgICAgICAgICBkYXRhTG9nKG1fY29kZSk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X2NvZGUpIHsKLSAgICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgewotICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKCkpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkF0
OiAiLCBpbnN0LCAiXG4iKTsKLSAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXBGYXN0KAot
ICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodG1wLmlzUmVnKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBSZWcg
cmVnID0gbV9tYXBbdG1wXS5hc3NpZ25lZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
cmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRmFpbGVkIHRvIGFs
bG9jYXRlIHJlZyBmb3I6ICIsIHRtcCwgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IFRtcChyZWcpOwotICAgICAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBD
b2RlJiBtX2NvZGU7Ci0gICAgVmVjdG9yPFJlZz4gbV9yZWdpc3RlcnNbbnVtQmFua3NdOwotICAg
IFJlZ2lzdGVyU2V0IG1fcmVnaXN0ZXJTZXRbbnVtQmFua3NdOwotICAgIFJlZ2lzdGVyU2V0IG1f
dW5pZmllZFJlZ2lzdGVyU2V0OwotICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBzaXplX3Q+IG1f
c3RhcnRJbmRleDsKLSAgICBUbXBNYXA8VG1wRGF0YT4gbV9tYXA7Ci0gICAgSW5kZXhNYXA8QmFz
aWNCbG9jayosIFBoYXNlSW5zZXJ0aW9uU2V0PiBtX2luc2VydGlvblNldHM7Ci0gICAgVmVjdG9y
PENsb2JiZXI+IG1fY2xvYmJlcnM7IC8vIEFmdGVyIHdlIGFsbG9jYXRlIHRoaXMsIHdlIGhhcHBp
bHkgcG9pbnQgcG9pbnRlcnMgaW50byBpdC4KLSAgICBWZWN0b3I8VG1wPiBtX3RtcHM7Ci0gICAg
RGVxdWU8VG1wPiBtX2FjdGl2ZTsKLSAgICBSZWdpc3RlclNldCBtX2FjdGl2ZVJlZ3M7Ci0gICAg
Ym9vbCBtX2RpZFNwaWxsIHsgZmFsc2UgfTsKLX07Ci0KLXZvaWQgcnVuTGluZWFyU2NhbihDb2Rl
JiBjb2RlKQotewotICAgIGlmICh2ZXJib3NlKCkpCi0gICAgICAgIGRhdGFMb2coIkFpciBiZWZv
cmUgbGluZWFyIHNjYW46XG4iLCBjb2RlKTsKLSAgICBMaW5lYXJTY2FuIGxpbmVhclNjYW4oY29k
ZSk7Ci0gICAgbGluZWFyU2Nhbi5ydW4oKTsKLSAgICBpZiAodmVyYm9zZSgpKQotICAgICAgICBk
YXRhTG9nKCJBaXIgYWZ0ZXIgbGluZWFyIHNjYW46XG4iLCBjb2RlKTsKLX0KLQotfSAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCi0KLXZvaWQgYWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4oQ29k
ZSYgY29kZSkKLXsKLSAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImFsbG9jYXRlUmVn
aXN0ZXJzQnlMaW5lYXJTY2FuIik7Ci0gICAgcGFkSW50ZXJmZXJlbmNlKGNvZGUpOwotICAgIHJ1
bkxpbmVhclNjYW4oY29kZSk7Ci0gICAgZml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoY29kZSk7Ci19
Ci0KLX0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKLQotI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVn
aXN0ZXJzQnlMaW5lYXJTY2FuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oCShyZXZpc2lvbiAyMTUy
MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJz
QnlMaW5lYXJTY2FuLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw1MCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBF
TkFCTEUoQjNfSklUKQotCi0jaW5jbHVkZSAiQ1BVLmgiCi0jaW5jbHVkZSAiT3B0aW9ucy5oIgot
Ci1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7Ci0KLWNsYXNz
IENvZGU7Ci0KLS8vIFRoaXMgaW1wbGVtZW50cyB0aGUgUG9sZXR0byBhbmQgU2Fya2FyIHJlZ2lz
dGVyIGFsbG9jYXRvciBjYWxsZWQgImxpbmVhciBzY2FuIjoKLS8vIGh0dHA6Ly9kbC5hY20ub3Jn
L2NpdGF0aW9uLmNmbT9pZD0zMzAyNTAKLS8vCi0vLyBUaGlzIGlzIG5vdCBBaXIncyBwcmltYXJ5
IHJlZ2lzdGVyIGFsbG9jYXRvci4gV2UgdXNlIGl0IG9ubHkgd2hlbiBydW5uaW5nIGF0IG9wdExl
dmVsPDIuIFRoYXQncyBub3QKLS8vIHRoZSBkZWZhdWx0IGxldmVsLiBUaGlzIHJlZ2lzdGVyIGFs
bG9jYXRvciBpcyBvcHRpbWl6ZWQgcHJpbWFyaWx5IGZvciBydW5uaW5nIHF1aWNrbHkuIEl0J3Mg
ZXhwZWN0ZWQKLS8vIHRoYXQgaW1wcm92ZW1lbnRzIHRvIHRoaXMgcmVnaXN0ZXIgYWxsb2NhdG9y
IHNob3VsZCBmb2N1cyBvbiBpbXByb3ZpbmcgaXRzIGV4ZWN1dGlvbiB0aW1lIHdpdGhvdXQgbXVj
aAotLy8gcmVnYXJkIGZvciB0aGUgcXVhbGl0eSBvZiBnZW5lcmF0ZWQgY29kZS4gSWYgeW91IHdh
bnQgZ29vZCBjb2RlLCB1c2UgZ3JhcGggY29sb3JpbmcuCi0vLwotLy8gRm9yIEFpcidzIHByaW1h
cnkgcmVnaXN0ZXIgYWxsb2NhdG9yLCBzZWUgQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29s
b3JpbmcuaHxjcHAuCi12b2lkIGFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuKENvZGUmKTsK
LQotfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgotCi0jZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFj
a0J5R3JhcGhDb2xvcmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nLmNwcAkocmV2aXNpb24gMjE1
MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrQnlH
cmFwaENvbG9yaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5j
bHVkZSAiQWlyQXJnSW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckNvZGUuaCIKLSNpbmNsdWRlICJB
aXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIgogI2lu
Y2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKICNpbmNs
dWRlICJBaXJQaGFzZVNjb3BlLmgiCkBAIC0xMjksMTUgKzEyOSwxMSBAQCBzdHJ1Y3QgQ29hbGVz
Y2FibGVNb3ZlIHsKICAgICBkb3VibGUgZnJlcXVlbmN5IHsgUE5hTiB9OwogfTsKIAotfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCi0KLXZvaWQgYWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZyhD
b2RlJiBjb2RlKQorVmVjdG9yPFN0YWNrU2xvdCo+IGFsbG9jYXRlRXNjYXBlZFN0YWNrU2xvdHNJ
bXBsKENvZGUmIGNvZGUpCiB7Ci0gICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxv
Y2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nIik7Ci0KICAgICAvLyBBbGxvY2F0ZSBhbGwgb2YgdGhl
IGVzY2FwZWQgc2xvdHMgaW4gb3JkZXIuIFRoaXMgaXMga2luZCBvZiBhIGNyYXp5IGFsZ29yaXRo
bSB0byBhbGxvdyBmb3IKICAgICAvLyB0aGUgcG9zc2liaWxpdHkgb2Ygc3RhY2sgc2xvdHMgYmVp
bmcgYXNzaWduZWQgZnJhbWUgb2Zmc2V0cyBiZWZvcmUgd2UgZXZlbiBnZXQgaGVyZS4KLSAgICBB
U1NFUlQoIWNvZGUuZnJhbWVTaXplKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFjb2RlLmZyYW1l
U2l6ZSgpKTsKICAgICBWZWN0b3I8U3RhY2tTbG90Kj4gYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90
czsKICAgICBWZWN0b3I8U3RhY2tTbG90Kj4gZXNjYXBlZFN0YWNrU2xvdHNXb3JrbGlzdDsKICAg
ICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKSB7CkBAIC0xNTgsNiAr
MTU0LDM3IEBAIHZvaWQgYWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZyhDb2RlJiAKICAgICAg
ICAgYXNzaWduKHNsb3QsIGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHMpOwogICAgICAgICBhc3Np
Z25lZEVzY2FwZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90KTsKICAgICB9CisgICAgcmV0dXJuIGFz
c2lnbmVkRXNjYXBlZFN0YWNrU2xvdHM7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rp
b24+Cit2b2lkIHVwZGF0ZUZyYW1lU2l6ZUJhc2VkT25TdGFja1Nsb3RzSW1wbChDb2RlJiBjb2Rl
LCBjb25zdCBDb2xsZWN0aW9uJiBjb2xsZWN0aW9uKQoreworICAgIHVuc2lnbmVkIGZyYW1lU2l6
ZSA9IDA7CisgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBjb2xsZWN0aW9uKQorICAgICAgICBm
cmFtZVNpemUgPSBzdGQ6Om1heChmcmFtZVNpemUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigtc2xv
dC0+b2Zmc2V0RnJvbUZQKCkpKTsKKyAgICBjb2RlLnNldEZyYW1lU2l6ZShXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBmcmFtZVNpemUpKTsKK30KKworfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgYWxsb2NhdGVFc2NhcGVkU3RhY2tTbG90cyhD
b2RlJiBjb2RlKQoreworICAgIHVwZGF0ZUZyYW1lU2l6ZUJhc2VkT25TdGFja1Nsb3RzSW1wbChj
b2RlLCBhbGxvY2F0ZUVzY2FwZWRTdGFja1Nsb3RzSW1wbChjb2RlKSk7Cit9CisKK3ZvaWQgdXBk
YXRlRnJhbWVTaXplQmFzZWRPblN0YWNrU2xvdHMoQ29kZSYgY29kZSkKK3sKKyAgICB1cGRhdGVG
cmFtZVNpemVCYXNlZE9uU3RhY2tTbG90c0ltcGwoY29kZSwgY29kZS5zdGFja1Nsb3RzKCkpOwor
fQorCit2b2lkIGFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcoQ29kZSYgY29kZSkKK3sKKyAg
ICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3Jp
bmciKTsKKyAgICAKKyAgICBoYW5kbGVDYWxsZWVTYXZlcyhjb2RlKTsKKyAgICAKKyAgICBWZWN0
b3I8U3RhY2tTbG90Kj4gYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90cyA9IGFsbG9jYXRlRXNjYXBl
ZFN0YWNrU2xvdHNJbXBsKGNvZGUpOwogCiAgICAgLy8gTm93IHdlIGhhbmRsZSB0aGUgc3BpbGwg
c2xvdHMuCiAgICAgU3RhY2tTbG90TGl2ZW5lc3MgbGl2ZW5lc3MoY29kZSk7CkBAIC0zNzcsODgg
KzQwNCwxMSBAQCB2b2lkIGFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcoQ29kZSYgCiAgICAg
ICAgIGFzc2lnbihzbG90LCBvdGhlclNsb3RzKTsKICAgICB9CiAKLSAgICAvLyBGaWd1cmUgb3V0
IGhvdyBtdWNoIHN0YWNrIHdlJ3JlIHVzaW5nIGZvciBzdGFjayBzbG90cy4KLSAgICB1bnNpZ25l
ZCBmcmFtZVNpemVGb3JTdGFja1Nsb3RzID0gMDsKLSAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6
IGNvZGUuc3RhY2tTbG90cygpKSB7Ci0gICAgICAgIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgPSBz
dGQ6Om1heCgKLSAgICAgICAgICAgIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMsCi0gICAgICAgICAg
ICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLXNsb3QtPm9mZnNldEZyb21GUCgpKSk7Ci0gICAgfQot
Ci0gICAgZnJhbWVTaXplRm9yU3RhY2tTbG90cyA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihz
dGFja0FsaWdubWVudEJ5dGVzKCksIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMpOwotCi0gICAgLy8g
Tm93IHdlIG5lZWQgdG8gZGVkdWNlIGhvdyBtdWNoIGFyZ3VtZW50IGFyZWEgd2UgbmVlZC4KLSAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewotICAgICAgICBmb3IgKEluc3QmIGlu
c3QgOiAqYmxvY2spIHsKLSAgICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsK
LSAgICAgICAgICAgICAgICBpZiAoYXJnLmlzQ2FsbEFyZygpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIEZvciBub3csIHdlIGFzc3VtZSB0aGF0IHdlIHVzZSA4IGJ5dGVzIG9mIHRoZSBjYWxs
IGFyZy4gQnV0IHRoYXQncyBub3QKLSAgICAgICAgICAgICAgICAgICAgLy8gc3VjaCBhbiBhd2Vz
b21lIGFzc3VtcHRpb24uCi0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU0Ci0gICAgICAgICAgICAgICAgICAg
IEFTU0VSVChhcmcub2Zmc2V0KCkgPj0gMCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvZGUucmVx
dWVzdENhbGxBcmdBcmVhU2l6ZUluQnl0ZXMoYXJnLm9mZnNldCgpICsgOCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29kZS5zZXRG
cmFtZVNpemUoZnJhbWVTaXplRm9yU3RhY2tTbG90cyArIGNvZGUuY2FsbEFyZ0FyZWFTaXplSW5C
eXRlcygpKTsKLQotICAgIC8vIEZpbmFsbHksIHRyYW5zZm9ybSB0aGUgY29kZSB0byB1c2UgQWRk
cidzIGluc3RlYWQgb2YgU3RhY2tTbG90J3MuIFRoaXMgaXMgYSBsb3NzbGVzcwotICAgIC8vIHRy
YW5zZm9ybWF0aW9uIHNpbmNlIHdlIGNhbiBzZWFyY2ggdGhlIFN0YWNrU2xvdHMgYXJyYXkgdG8g
ZmlndXJlIG91dCB3aGljaCBTdGFja1Nsb3QgYW55Ci0gICAgLy8gb2Zmc2V0LWZyb20tRlAgcmVm
ZXJzIHRvLgotCi0gICAgLy8gRklYTUU6IFRoaXMgbWF5IHByb2R1Y2UgYWRkcmVzc2VzIHRoYXQg
YXJlbid0IHZhbGlkIGlmIHdlIGVuZCB1cCB3aXRoIGEgZ2lub3Jtb3VzIHN0YWNrIGZyYW1lLgot
ICAgIC8vIFdlIHdvdWxkIGhhdmUgdG8gc2NhdmVuZ2UgZm9yIHRlbXBvcmFyaWVzIGlmIHRoaXMg
aGFwcGVuZWQuIEZvcnR1bmF0ZWx5LCB0aGlzIGNhc2Ugd2lsbCBiZQotICAgIC8vIGV4dHJlbWVs
eSByYXJlIHNvIHdlIGNhbiBkbyBjcmF6eSB0aGluZ3Mgd2hlbiBpdCBhcmlzZXMuCi0gICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjUzMAotCi0gICAgSW5z
ZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKLSAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogY29kZSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRl
eCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7Ci0gICAgICAgICAgICBJbnN0JiBpbnN0
ID0gYmxvY2stPmF0KGluc3RJbmRleCk7Ci0gICAgICAgICAgICBpbnN0LmZvckVhY2hBcmcoCi0g
ICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRo
IHdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gc3RhY2tBZGRyID0gWyZdIChpbnQz
Ml90IG9mZnNldCkgLT4gQXJnIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBcmc6
OnN0YWNrQWRkcihvZmZzZXQsIGNvZGUuZnJhbWVTaXplKCksIHdpZHRoKTsKLSAgICAgICAgICAg
ICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAoYXJnLmtpbmQoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3RhY2s6
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IGFyZy5zdGFja1Ns
b3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzWkRlZihyb2xlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsb3QtPmtpbmQoKSA9PSBTdGFja1Nsb3RLaW5k
OjpTcGlsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsb3QtPmJ5dGVTaXplKCkg
PiBieXRlcyh3aWR0aCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDdXJyZW50
bHkgd2Ugb25seSBoYW5kbGUgdGhpcyBzaW1wbGUgY2FzZSBiZWNhdXNlIGl0J3MgdGhlIG9ubHkg
b25lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBhcmlzZXM6IFpEZWYncyBh
cmUgb25seSAzMi1iaXQgcmlnaHQgbm93LiBTbywgd2hlbiB3ZSBoaXQgdGhlc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBhc3NlcnRpb25zIGl0IG1lYW5zIHRoYXQgd2UgbmVlZCB0
byBpbXBsZW1lbnQgdGhvc2Ugb3RoZXIga2luZHMgb2YKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB6ZXJvIGZpbGxzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHNsb3QtPmJ5dGVTaXplKCkgPT0gOCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQod2lkdGggPT0gV2lkdGgzMik7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1ZhbGlkRm9ybShTdG9yZVplcm8zMiwgQXJnOjpT
dGFjaykpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCArIDEsIFN0b3JlWmVy
bzMyLCBpbnN0Lm9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tB
ZGRyKGFyZy5vZmZzZXQoKSArIDQgKyBzbG90LT5vZmZzZXRGcm9tRlAoKSkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gc3RhY2tBZGRy
KGFyZy5vZmZzZXQoKSArIHNsb3QtPm9mZnNldEZyb21GUCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgQXJnOjpDYWxsQXJnOgotICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gc3RhY2tB
ZGRyKGFyZy5vZmZzZXQoKSAtIGNvZGUuZnJhbWVTaXplKCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICk7Ci0gICAgICAgIH0KLSAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1
dGUoYmxvY2spOwotICAgIH0KKyAgICB1cGRhdGVGcmFtZVNpemVCYXNlZE9uU3RhY2tTbG90cyhj
b2RlKTsKKyAgICBjb2RlLnNldFN0YWNrSXNBbGxvY2F0ZWQodHJ1ZSk7CiB9CiAKIH0gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCiAKLQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrQnlHcmFw
aENvbG9yaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nLmgJKHJldmlzaW9uIDIxNTIzOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmlu
Zy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNCArMzMsMTggQEAgY2xhc3MgQ29kZTsKIAogLy8g
VGhpcyBhbGxvY2F0ZXMgU3RhY2tTbG90cyB0byBwbGFjZXMgb24gdGhlIHN0YWNrLiBJdCBmaXJz
dCBhbGxvY2F0ZXMgdGhlIHBpbm5lZCBvbmVzIGluIGluZGV4CiAvLyBvcmRlciBhbmQgdGhlbiBp
dCBhbGxvY2F0ZXMgdGhlIHJlc3QgdXNpbmcgZmlyc3QgZml0LiBUYWtlcyB0aGUgb3Bwb3J0dW5p
dHkgdG8ga2lsbCBkZWFkCi0vLyBhc3NpZ25tZW50cyB0byBzdGFjayBzbG90cywgc2luY2UgaXQg
a25vd3Mgd2hpY2ggb25lcyBhcmUgbGl2ZS4gQWxzbyBmaXhlcyBaRGVmcyB0byBhbm9ueW1vdXMK
LS8vIHN0YWNrIHNsb3RzLiBBbHNvIGNvYWxlc2NlcyBzcGlsbCBzbG90cyB3aGVuZXZlciBwb3Nz
aWJsZS4KKy8vIGFzc2lnbm1lbnRzIHRvIHN0YWNrIHNsb3RzLCBzaW5jZSBpdCBrbm93cyB3aGlj
aCBvbmVzIGFyZSBsaXZlLiBBbHNvIGNvYWxlc2NlcyBzcGlsbCBzbG90cworLy8gd2hlbmV2ZXIg
cG9zc2libGUuCiAvLwogLy8gVGhpcyBpcyBtZWFudCB0byBiZSBhbiBvcHRpbWFsIHN0YWNrIGFs
bG9jYXRvciwgZm9jdXNlZCBvbiBnZW5lcmF0aW5nIGdyZWF0IGNvZGUuIEl0J3Mgbm90CiAvLyBw
YXJ0aWN1bGFybHkgZmFzdCwgdGhvdWdoLgogCiB2b2lkIGFsbG9jYXRlU3RhY2tCeUdyYXBoQ29s
b3JpbmcoQ29kZSYpOwogCisvLyBUaGVzZSBhcmUgdXRpbGl0aWVzIHNoYXJlZCBieSB0aGlzIHBo
YXNlIGFuZCBhbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuKCkuCit2b2lkIGFs
bG9jYXRlRXNjYXBlZFN0YWNrU2xvdHMoQ29kZSYpOwordm9pZCB1cGRhdGVGcmFtZVNpemVCYXNl
ZE9uU3RhY2tTbG90cyhDb2RlJik7CisKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
IAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBcmcuY3BwCShyZXZpc2lvbiAyMTUyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFyZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDE3IEBACiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAorQXJnIEFy
Zzo6c3RhY2tBZGRyKGludDMyX3Qgb2Zmc2V0RnJvbUZQLCB1bnNpZ25lZCBmcmFtZVNpemUsIFdp
ZHRoIHdpZHRoKQoreworICAgIEFyZyByZXN1bHQgPSBBcmc6OmFkZHIoQWlyOjpUbXAoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLCBvZmZzZXRGcm9tRlApOworICAgIGlmICghcmVzdWx0Lmlz
VmFsaWRGb3JtKHdpZHRoKSkgeworICAgICAgICByZXN1bHQgPSBBcmc6OmFkZHIoCisgICAgICAg
ICAgICBBaXI6OlRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpLAorICAg
ICAgICAgICAgb2Zmc2V0RnJvbUZQICsgZnJhbWVTaXplKTsKKyAgICB9CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwogYm9vbCBBcmc6OmlzU3RhY2tNZW1vcnkoKSBjb25zdAogewogICAgIHN3aXRj
aCAoa2luZCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJl
dmlzaW9uIDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU2MCwxNyArNTYwLDggQEAgcHVibGljOgogICAgICAgICByZXN1
bHQubV9vZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotCi0g
ICAgc3RhdGljIEFyZyBzdGFja0FkZHIoaW50MzJfdCBvZmZzZXRGcm9tRlAsIHVuc2lnbmVkIGZy
YW1lU2l6ZSwgV2lkdGggd2lkdGgpCi0gICAgewotICAgICAgICBBcmcgcmVzdWx0ID0gQXJnOjph
ZGRyKEFpcjo6VG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwgb2Zmc2V0RnJvbUZQKTsK
LSAgICAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZEZvcm0od2lkdGgpKSB7Ci0gICAgICAgICAgICBy
ZXN1bHQgPSBBcmc6OmFkZHIoCi0gICAgICAgICAgICAgICAgQWlyOjpUbXAoTWFjcm9Bc3NlbWJs
ZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSwKLSAgICAgICAgICAgICAgICBvZmZzZXRGcm9tRlAg
KyBmcmFtZVNpemUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQor
ICAgIAorICAgIHN0YXRpYyBBcmcgc3RhY2tBZGRyKGludDMyX3Qgb2Zmc2V0RnJvbUZQLCB1bnNp
Z25lZCBmcmFtZVNpemUsIFdpZHRoKTsKIAogICAgIC8vIElmIHlvdSBkb24ndCBwYXNzIGEgV2lk
dGgsIHRoaXMgb3B0aW1pc3RpY2FsbHkgYXNzdW1lcyB0aGF0IHlvdSdyZSB1c2luZyB0aGUgcmln
aHQgd2lkdGguCiAgICAgc3RhdGljIGJvb2wgaXNWYWxpZFNjYWxlKHVuc2lnbmVkIHNjYWxlLCBz
dGQ6Om9wdGlvbmFsPFdpZHRoPiB3aWR0aCA9IHN0ZDo6bnVsbG9wdCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkocmV2aXNpb24gMjE1MjM4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAyLDcgKzEwMiwxNCBAQCBCYXNpY0Jsb2NrKiBDb2RlOjphZGRCbG9jayhkb3VibGUgZnJlcXVl
CiAKIFN0YWNrU2xvdCogQ29kZTo6YWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFj
a1Nsb3RLaW5kIGtpbmQsIEIzOjpTdGFja1Nsb3QqIGIzU2xvdCkKIHsKLSAgICByZXR1cm4gbV9z
dGFja1Nsb3RzLmFkZE5ldyhieXRlU2l6ZSwga2luZCwgYjNTbG90KTsKKyAgICBTdGFja1Nsb3Qq
IHJlc3VsdCA9IG1fc3RhY2tTbG90cy5hZGROZXcoYnl0ZVNpemUsIGtpbmQsIGIzU2xvdCk7Cisg
ICAgaWYgKG1fc3RhY2tJc0FsbG9jYXRlZCkgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyB1
bm5lY2Vzc2FyaWx5IGF3ZnVsLiBGb3J0dW5hdGVseSwgaXQgZG9lc24ndCBydW4gb2Z0ZW4uCisg
ICAgICAgIHVuc2lnbmVkIGV4dGVudCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihyZXN1bHQt
PmFsaWdubWVudCgpLCBmcmFtZVNpemUoKSArIGJ5dGVTaXplKTsKKyAgICAgICAgcmVzdWx0LT5z
ZXRPZmZzZXRGcm9tRlAoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oZXh0ZW50KSk7CisgICAgICAg
IHNldEZyYW1lU2l6ZShXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRl
cygpLCBleHRlbnQpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogU3RhY2tTbG90
KiBDb2RlOjphZGRTdGFja1Nsb3QoQjM6OlN0YWNrU2xvdCogYjNTbG90KQpAQCAtMTM4LDYgKzE0
NSwyOCBAQCBib29sIENvZGU6OmlzRW50cnlwb2ludChCYXNpY0Jsb2NrKiBibG9jCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCit2b2lkIENvZGU6OnNldENhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0
TGlzdChSZWdpc3RlckF0T2Zmc2V0TGlzdCYmIHJlZ2lzdGVyQXRPZmZzZXRMaXN0LCBTdGFja1Ns
b3QqIHNsb3QpCit7CisgICAgbV91bmNvcnJlY3RlZENhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0
TGlzdCA9IFdURk1vdmUocmVnaXN0ZXJBdE9mZnNldExpc3QpOworICAgIGZvciAoY29uc3QgUmVn
aXN0ZXJBdE9mZnNldCYgcmVnaXN0ZXJBdE9mZnNldCA6IG1fdW5jb3JyZWN0ZWRDYWxsZWVTYXZl
UmVnaXN0ZXJBdE9mZnNldExpc3QpCisgICAgICAgIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycy5zZXQo
cmVnaXN0ZXJBdE9mZnNldC5yZWcoKSk7CisgICAgbV9jYWxsZWVTYXZlU3RhY2tTbG90ID0gc2xv
dDsKK30KKworUmVnaXN0ZXJBdE9mZnNldExpc3QgQ29kZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyQXRP
ZmZzZXRMaXN0KCkgY29uc3QKK3sKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCByZXN1bHQgPSBt
X3VuY29ycmVjdGVkQ2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0OworICAgIGlmIChTdGFj
a1Nsb3QqIHNsb3QgPSBtX2NhbGxlZVNhdmVTdGFja1Nsb3QpIHsKKyAgICAgICAgcHRyZGlmZl90
IG9mZnNldCA9IHNsb3QtPmJ5dGVTaXplKCkgKyBzbG90LT5vZmZzZXRGcm9tRlAoKTsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IHJlc3VsdC5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIHJl
c3VsdC5hdChpKSA9IFJlZ2lzdGVyQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgcmVzdWx0LmF0
KGkpLnJlZygpLAorICAgICAgICAgICAgICAgIHJlc3VsdC5hdChpKS5vZmZzZXQoKSArIG9mZnNl
dCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogdm9pZCBDb2Rl
OjpyZXNldFJlYWNoYWJpbGl0eSgpCiB7CiAgICAgY2xlYXJQcmVkZWNlc3NvcnMobV9ibG9ja3Mp
OwpAQCAtMTcwLDEyICsxOTksMTMgQEAgdm9pZCBDb2RlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CiAgICAgICAgIGZvciAoU3BlY2lhbCogc3BlY2lhbCA6IHNwZWNpYWxzKCkpCiAgICAg
ICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBkZWVwRHVtcChzcGVjaWFsKSwgIlxuIik7CiAgICAg
fQotICAgIGlmIChtX2ZyYW1lU2l6ZSkKLSAgICAgICAgb3V0LnByaW50KCJGcmFtZSBzaXplOiAi
LCBtX2ZyYW1lU2l6ZSwgIlxuIik7CisgICAgaWYgKG1fZnJhbWVTaXplIHx8IG1fc3RhY2tJc0Fs
bG9jYXRlZCkKKyAgICAgICAgb3V0LnByaW50KCJGcmFtZSBzaXplOiAiLCBtX2ZyYW1lU2l6ZSwg
bV9zdGFja0lzQWxsb2NhdGVkID8gIiAoQWxsb2NhdGVkKSIgOiAiIiwgIlxuIik7CiAgICAgaWYg
KG1fY2FsbEFyZ0FyZWFTaXplKQogICAgICAgICBvdXQucHJpbnQoIkNhbGwgYXJnIGFyZWEgc2l6
ZTogIiwgbV9jYWxsQXJnQXJlYVNpemUsICJcbiIpOwotICAgIGlmIChtX2NhbGxlZVNhdmVSZWdp
c3RlcnMuc2l6ZSgpKQotICAgICAgICBvdXQucHJpbnQoIkNhbGxlZSBzYXZlczogIiwgbV9jYWxs
ZWVTYXZlUmVnaXN0ZXJzLCAiXG4iKTsKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCBjYWxsZWVT
YXZlUmVnaXN0ZXJzID0gdGhpcy0+Y2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCk7Cisg
ICAgaWYgKGNhbGxlZVNhdmVSZWdpc3RlcnMuc2l6ZSgpKQorICAgICAgICBvdXQucHJpbnQoIkNh
bGxlZSBzYXZlczogIiwgY2FsbGVlU2F2ZVJlZ2lzdGVycywgIlxuIik7CiB9CiAKIHVuc2lnbmVk
IENvZGU6OmZpbmRGaXJzdEJsb2NrSW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMjE1MjM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE4Niw5ICsxODYsMjIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV9lbnRyeXBvaW50TGFi
ZWxzID0gc3RkOjpmb3J3YXJkPFZlY3Rvcj4odmVjdG9yKTsKICAgICB9CisgICAgCisgICAgdm9p
ZCBzZXRTdGFja0lzQWxsb2NhdGVkKGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBtX3N0YWNr
SXNBbGxvY2F0ZWQgPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBzdGFja0lzQWxsb2Nh
dGVkKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja0lzQWxsb2NhdGVkOyB9CisgICAgCisgICAgLy8g
VGhpcyBzZXRzIHRoZSBjYWxsZWUgc2F2ZSByZWdpc3RlcnMuCisgICAgdm9pZCBzZXRDYWxsZWVT
YXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoUmVnaXN0ZXJBdE9mZnNldExpc3QmJiwgU3RhY2tTbG90
Kik7CiAKLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCYgY2FsbGVlU2F2ZVJlZ2lzdGVy
cygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsgfQotICAgIFJlZ2lzdGVy
QXRPZmZzZXRMaXN0JiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jYWxsZWVTYXZl
UmVnaXN0ZXJzOyB9CisgICAgLy8gVGhpcyByZXR1cm5zIHRoZSBjb3JyZWN0bHkgb2Zmc2V0IGxp
c3Qgb2YgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzLgorICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IGNh
bGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpIGNvbnN0OworICAgIAorICAgIC8vIFRoaXMg
anVzdCB0ZWxscyB5b3Ugd2hhdCB0aGUgY2FsbGVlIHNhdmVzIGFyZS4KKyAgICBSZWdpc3RlclNl
dCBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWVTYXZlUmVnaXN0
ZXJzOyB9CiAKICAgICAvLyBSZWNvbXB1dGVzIHByZWRlY2Vzc29ycyBhbmQgZGVsZXRlcyB1bnJl
YWNoYWJsZSBibG9ja3MuCiAgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOwpAQCAtMzI5LDcg
KzM0MiwxMCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbnVtRlBUbXBzIHsgMCB9OwogICAg
IHVuc2lnbmVkIG1fZnJhbWVTaXplIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fY2FsbEFyZ0FyZWFT
aXplIHsgMCB9OwotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVy
czsKKyAgICBib29sIG1fc3RhY2tJc0FsbG9jYXRlZCB7IGZhbHNlIH07CisgICAgUmVnaXN0ZXJB
dE9mZnNldExpc3QgbV91bmNvcnJlY3RlZENhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdDsK
KyAgICBSZWdpc3RlclNldCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7CisgICAgU3RhY2tTbG90KiBt
X2NhbGxlZVNhdmVTdGFja1Nsb3QgeyBudWxscHRyIH07CiAgICAgVmVjdG9yPEZyZXF1ZW50ZWRC
bG9jaz4gbV9lbnRyeXBvaW50czsgLy8gVGhpcyBpcyBlbXB0eSB1bnRpbCBhZnRlciBsb3dlckVu
dHJ5U3dpdGNoKCkuCiAgICAgVmVjdG9yPENDYWxsSGVscGVyczo6TGFiZWw+IG1fZW50cnlwb2lu
dExhYmVsczsgLy8gVGhpcyBpcyBlbXB0eSB1bnRpbCBjb2RlIGdlbmVyYXRpb24uCiAgICAgUmVm
UHRyPFdhc21Cb3VuZHNDaGVja0dlbmVyYXRvcj4gbV93YXNtQm91bmRzQ2hlY2tHZW5lcmF0b3I7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAko
cmV2aXNpb24gMjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5l
cmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE5ICsyOCwxOSBAQAogCiAjaWYgRU5BQkxF
KEIzX0pJVCkKIAorI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVh
clNjYW4uaCIKICNpbmNsdWRlICJBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5o
IgotI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgiCiAjaW5jbHVk
ZSAiQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZy5oIgogI2luY2x1ZGUgIkFpckNvZGUu
aCIKICNpbmNsdWRlICJBaXJFbGltaW5hdGVEZWFkQ29kZS5oIgogI2luY2x1ZGUgIkFpckZpeE9i
dmlvdXNTcGlsbHMuaCIKICNpbmNsdWRlICJBaXJGaXhQYXJ0aWFsUmVnaXN0ZXJTdGFsbHMuaCIK
ICNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIkFpckhhbmRsZUNh
bGxlZVNhdmVzLmgiCiAjaW5jbHVkZSAiQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5oIgogI2luY2x1
ZGUgIkFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oIgogI2luY2x1ZGUgIkFpckxvd2VyRW50cnlTd2l0
Y2guaCIKICNpbmNsdWRlICJBaXJMb3dlck1hY3Jvcy5oIgorI2luY2x1ZGUgIkFpckxvd2VyU3Rh
Y2tBcmdzLmgiCiAjaW5jbHVkZSAiQWlyT3Bjb2RlVXRpbHMuaCIKICNpbmNsdWRlICJBaXJPcHRp
bWl6ZUJsb2NrT3JkZXIuaCIKICNpbmNsdWRlICJBaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmgiCkBA
IC04NCwzOSArODQsNTEgQEAgdm9pZCBwcmVwYXJlRm9yR2VuZXJhdGlvbihDb2RlJiBjb2RlKQog
ICAgIAogICAgIGVsaW1pbmF0ZURlYWRDb2RlKGNvZGUpOwogCi0gICAgLy8gUmVnaXN0ZXIgYWxs
b2NhdGlvbiBmb3IgYWxsIHRoZSBUbXBzIHRoYXQgZG8gbm90IGhhdmUgYSBjb3JyZXNwb25kaW5n
IG1hY2hpbmUgcmVnaXN0ZXIuCi0gICAgLy8gQWZ0ZXIgdGhpcyBwaGFzZSwgZXZlcnkgVG1wIGhh
cyBhIHJlZy4KLSAgICAvLwotICAgIC8vIEZvciBkZWJ1Z2dpbmcsIHlvdSBjYW4gdXNlIHNwaWxs
RXZlcnl0aGluZygpIHRvIHB1dCBldmVyeXRoaW5nIHRvIHRoZSBzdGFjayBiZXR3ZWVuIGVhY2gg
SW5zdC4KLSAgICBpZiAoT3B0aW9uczo6YWlyU3BpbGxzRXZlcnl0aGluZygpKQotICAgICAgICBz
cGlsbEV2ZXJ5dGhpbmcoY29kZSk7Ci0gICAgZWxzZSBpZiAoY29kZS5vcHRMZXZlbCgpID49IDIp
Ci0gICAgICAgIGFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nKGNvZGUpOwotICAgIGVs
c2UKLSAgICAgICAgYWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4oY29kZSk7Ci0KLSAgICBp
ZiAoT3B0aW9uczo6bG9nQWlyUmVnaXN0ZXJQcmVzc3VyZSgpKSB7Ci0gICAgICAgIGRhdGFMb2co
IlJlZ2lzdGVyIHByZXNzdXJlIGFmdGVyIHJlZ2lzdGVyIGFsbG9jYXRpb246XG4iKTsKLSAgICAg
ICAgbG9nUmVnaXN0ZXJQcmVzc3VyZShjb2RlKTsKKyAgICBpZiAoIU9wdGlvbnM6OmFpclNwaWxs
c0V2ZXJ5dGhpbmcoKSAmJiBjb2RlLm9wdExldmVsKCkgPD0gMSkgeworICAgICAgICAvLyBXaGVu
IHdlJ3JlIGNvbXBpbGluZyBxdWlja2x5LCB3ZSBkbyByZWdpc3RlciBhbmQgc3RhY2sgYWxsb2Nh
dGlvbiBpbiBvbmUgbGluZWFyIHNjYW4KKyAgICAgICAgLy8gcGhhc2UuIEl0J3MgZmFzdCBiZWNh
dXNlIGl0IGNvbXB1dGVzIGxpdmVuZXNzIG9ubHkgb25jZS4KKyAgICAgICAgYWxsb2NhdGVSZWdp
c3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbihjb2RlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChP
cHRpb25zOjpsb2dBaXJSZWdpc3RlclByZXNzdXJlKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2co
IlJlZ2lzdGVyIHByZXNzdXJlIGFmdGVyIHJlZ2lzdGVyIGFsbG9jYXRpb246XG4iKTsKKyAgICAg
ICAgICAgIGxvZ1JlZ2lzdGVyUHJlc3N1cmUoY29kZSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIC8vIFdlIG1heSBzdGlsbCBuZWVkIHRvIGRvIHBvc3QtYWxsb2NhdGlvbiBsb3dlcmlu
Zy4gRG9pbmcgaXQgYWZ0ZXIgYm90aCByZWdpc3RlciBhbmQKKyAgICAgICAgLy8gc3RhY2sgYWxs
b2NhdGlvbiBpcyBsZXNzIG9wdGltYWwsIGJ1dCBpdCB3b3JrcyBmaW5lLgorICAgICAgICBsb3dl
ckFmdGVyUmVnQWxsb2MoY29kZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gUmVnaXN0ZXIg
YWxsb2NhdGlvbiBmb3IgYWxsIHRoZSBUbXBzIHRoYXQgZG8gbm90IGhhdmUgYSBjb3JyZXNwb25k
aW5nIG1hY2hpbmUKKyAgICAgICAgLy8gcmVnaXN0ZXIuIEFmdGVyIHRoaXMgcGhhc2UsIGV2ZXJ5
IFRtcCBoYXMgYSByZWcuCisgICAgICAgIC8vCisgICAgICAgIC8vIEZvciBkZWJ1Z2dpbmcsIHlv
dSBjYW4gdXNlIHNwaWxsRXZlcnl0aGluZygpIHRvIHB1dCBldmVyeXRoaW5nIHRvIHRoZSBzdGFj
ayBiZXR3ZWVuCisgICAgICAgIC8vIGVhY2ggSW5zdC4KKyAgICAgICAgaWYgKE9wdGlvbnM6OmFp
clNwaWxsc0V2ZXJ5dGhpbmcoKSkKKyAgICAgICAgICAgIHNwaWxsRXZlcnl0aGluZyhjb2RlKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3Jp
bmcoY29kZSk7CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9nQWlyUmVnaXN0ZXJQ
cmVzc3VyZSgpKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJSZWdpc3RlciBwcmVzc3VyZSBhZnRl
ciByZWdpc3RlciBhbGxvY2F0aW9uOlxuIik7CisgICAgICAgICAgICBsb2dSZWdpc3RlclByZXNz
dXJlKGNvZGUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoY29kZS5vcHRMZXZl
bCgpID49IDIpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgcmVwbGFjZXMgdXNlcyBvZiBzcGlsbCBz
bG90cyB3aXRoIHJlZ2lzdGVycyBvciBjb25zdGFudHMgaWYgcG9zc2libGUuIEl0CisgICAgICAg
ICAgICAvLyBkb2VzIHRoaXMgYnkgbWluaW1pemluZyB0aGUgYW1vdW50IHRoYXQgd2UgcGVydHVy
YiB0aGUgYWxyZWFkeS1jaG9zZW4gcmVnaXN0ZXIKKyAgICAgICAgICAgIC8vIGFsbG9jYXRpb24u
IEl0IG1heSBleHRlbmQgdGhlIGxpdmUgcmFuZ2VzIG9mIHJlZ2lzdGVycyB0aG91Z2guCisgICAg
ICAgICAgICBmaXhPYnZpb3VzU3BpbGxzKGNvZGUpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBsb3dlckFmdGVyUmVnQWxsb2MoY29kZSk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlz
IGRvZXMgZmlyc3QtZml0IGFsbG9jYXRpb24gb2Ygc3RhY2sgc2xvdHMgdXNpbmcgYW4gaW50ZXJm
ZXJlbmNlIGdyYXBoIHBsdXMgYQorICAgICAgICAvLyBidW5jaCBvZiBvdGhlciBvcHRpbWl6YXRp
b25zLgorICAgICAgICBhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nKGNvZGUpOwogICAgIH0K
ICAgICAKLSAgICBpZiAoY29kZS5vcHRMZXZlbCgpID49IDIpIHsKLSAgICAgICAgLy8gVGhpcyBy
ZXBsYWNlcyB1c2VzIG9mIHNwaWxsIHNsb3RzIHdpdGggcmVnaXN0ZXJzIG9yIGNvbnN0YW50cyBp
ZiBwb3NzaWJsZS4gSXQgZG9lcyB0aGlzIGJ5Ci0gICAgICAgIC8vIG1pbmltaXppbmcgdGhlIGFt
b3VudCB0aGF0IHdlIHBlcnR1cmIgdGhlIGFscmVhZHktY2hvc2VuIHJlZ2lzdGVyIGFsbG9jYXRp
b24uIEl0IG1heSBleHRlbmQKLSAgICAgICAgLy8gdGhlIGxpdmUgcmFuZ2VzIG9mIHJlZ2lzdGVy
cyB0aG91Z2guCi0gICAgICAgIGZpeE9idmlvdXNTcGlsbHMoY29kZSk7Ci0gICAgfQotCi0gICAg
bG93ZXJBZnRlclJlZ0FsbG9jKGNvZGUpOwotCi0gICAgLy8gUHJpb3IgdG8gdGhpcyBwb2ludCB0
aGUgcHJvbG9ndWUgYW5kIGVwaWxvZ3VlIGlzIGltcGxpY2l0LiBUaGlzIG1ha2VzIGl0IGV4cGxp
Y2l0LiBJdCBhbHNvCi0gICAgLy8gZG9lcyB0aGluZ3MgbGlrZSBpZGVudGlmeSB3aGljaCBjYWxs
ZWUtc2F2ZXMgd2UncmUgdXNpbmcgYW5kIHNhdmVzIHRoZW0uCi0gICAgaGFuZGxlQ2FsbGVlU2F2
ZXMoY29kZSk7Ci0gICAgCi0gICAgLy8gVGhpcyB0dXJucyBhbGwgU3RhY2sgYW5kIENhbGxBcmcg
QXJncyBpbnRvIEFkZHIgYXJncyB0aGF0IHVzZSB0aGUgZnJhbWUgcG9pbnRlci4gSXQgZG9lcwot
ICAgIC8vIHRoaXMgYnkgZmlyc3QtZml0IGFsbG9jYXRpbmcgc3RhY2sgc2xvdHMuIEl0IHNob3Vs
ZCBiZSBwcmV0dHkgZGFybiBjbG9zZSB0byBvcHRpbWFsLCBzbyB3ZQotICAgIC8vIHNob3VsZG4n
dCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMgdmVyeSBtdWNoLgotICAgIGFsbG9jYXRlU3RhY2tC
eUdyYXBoQ29sb3JpbmcoY29kZSk7CisgICAgLy8gVGhpcyB0dXJucyBhbGwgU3RhY2sgYW5kIENh
bGxBcmcgQXJncyBpbnRvIEFkZHIgYXJncyB0aGF0IHVzZSB0aGUgZnJhbWUgcG9pbnRlci4KKyAg
ICBsb3dlclN0YWNrQXJncyhjb2RlKTsKICAgICAKICAgICAvLyBJZiB3ZSBjb2FsZXNjZWQgbW92
ZXMgdGhlbiB3ZSBjYW4gdW5icmVhayBjcml0aWNhbCBlZGdlcy4gVGhpcyBpcyB0aGUgbWFpbiBy
ZWFzb24gZm9yIHRoaXMKICAgICAvLyBwaGFzZS4KQEAgLTIxMiw3ICsyMjQsNyBAQCB2b2lkIGdl
bmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgCiAgICAgICAgICAgICBpZiAoY29kZS5m
cmFtZVNpemUoKSkKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKC1jb2RlLmZyYW1lU2l6ZSgpKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChjb25zdCBSZWdpc3Rl
ckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpKSB7CisgICAgICAg
ICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5jYWxsZWVTYXZl
UmVnaXN0ZXJBdE9mZnNldExpc3QoKSkgewogICAgICAgICAgICAgICAgIGlmIChlbnRyeS5yZWco
KS5pc0dQUigpKQogICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoZW50cnkucmVnKCku
Z3ByKCksIGFyZ0ZvcihlbnRyeSkpOwogICAgICAgICAgICAgICAgIGVsc2UKQEAgLTI0OSw3ICsy
NjEsNyBAQCB2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgCiAgICAgICAg
ICAgICAvLyBoYXZlIHRoaXMgb3ZlcnJpZGUuCiAgICAgICAgICAgICBhdXRvIHN0YXJ0ID0gaml0
LmxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpOwogICAgICAgICAgICAgaWYgKGNvZGUuZnJhbWVT
aXplKCkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVu
dHJ5IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJB
dE9mZnNldExpc3QoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkucmVnKCkuaXNH
UFIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKGFyZ0ZvcihlbnRyeSks
IGVudHJ5LnJlZygpLmdwcigpKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZl
cy5jcHAJKHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTQgKzMwLDEx
IEBACiAKICNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIK
LSNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKIAogdm9pZCBoYW5kbGVDYWxsZWVTYXZlcyhDb2RlJiBjb2Rl
KQogewotICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiaGFuZGxlQ2FsbGVlU2F2ZXMi
KTsKLQogICAgIFJlZ2lzdGVyU2V0IHVzZWRDYWxsZWVTYXZlczsKIAogICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBjb2RlKSB7CkBAIC02MSwxNiArNTgsMTUgQEAgdm9pZCBoYW5kbGVDYWxs
ZWVTYXZlcyhDb2RlJiBjb2RlKQogICAgIGlmICghdXNlZENhbGxlZVNhdmVzLm51bWJlck9mU2V0
UmVnaXN0ZXJzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvZGUuY2FsbGVlU2F2ZVJlZ2lz
dGVycygpID0gUmVnaXN0ZXJBdE9mZnNldExpc3QodXNlZENhbGxlZVNhdmVzKTsKKyAgICBSZWdp
c3RlckF0T2Zmc2V0TGlzdCBjYWxsZWVTYXZlUmVnaXN0ZXJzID0gUmVnaXN0ZXJBdE9mZnNldExp
c3QodXNlZENhbGxlZVNhdmVzKTsKIAogICAgIHNpemVfdCBieXRlU2l6ZSA9IDA7Ci0gICAgZm9y
IChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVy
cygpKQorICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjYWxsZWVTYXZl
UmVnaXN0ZXJzKQogICAgICAgICBieXRlU2l6ZSA9IHN0ZDo6bWF4KHN0YXRpY19jYXN0PHNpemVf
dD4oLWVudHJ5Lm9mZnNldCgpKSwgYnl0ZVNpemUpOwogCi0gICAgU3RhY2tTbG90KiBzYXZlc0Fy
ZWEgPSBjb2RlLmFkZFN0YWNrU2xvdChieXRlU2l6ZSwgU3RhY2tTbG90S2luZDo6TG9ja2VkKTsK
LSAgICAvLyBUaGlzIGlzIGEgYml0IHdlaXJkIHNpbmNlIHdlIGNvdWxkIGhhdmUgYWxyZWFkeSBw
aW5uZWQgYSBkaWZmZXJlbnQgc3RhY2sgc2xvdCB0byB0aGlzCi0gICAgLy8gYXJlYS4gQWxzbywg
b3VyIHJ1bnRpbWUgZG9lcyBub3QgcmVxdWlyZSB1cyB0byBwaW4gdGhlIHNhdmVzIGFyZWEuIE1h
eWJlIHdlIHNob3VsZG4ndCBwaW4gaXQ/Ci0gICAgc2F2ZXNBcmVhLT5zZXRPZmZzZXRGcm9tRlAo
LWJ5dGVTaXplKTsKKyAgICBjb2RlLnNldENhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgK
KyAgICAgICAgV1RGTW92ZShjYWxsZWVTYXZlUmVnaXN0ZXJzKSwKKyAgICAgICAgY29kZS5hZGRT
dGFja1Nsb3QoYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZCkpOwogfQogCiB9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5oCShyZXZpc2lvbiAyMTUyMzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzEsOCArMzEsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlCiAKIGNsYXNzIENvZGU7CiAKLS8vIFRoaXMgcGhhc2UgaWRlbnRpZmllcyBjYWxs
ZWUtc2F2ZSByZWdpc3RlcnMgYW5kIGFkZHMgY29kZSB0byBzYXZlL3Jlc3RvcmUgdGhlbSBpbiB0
aGUKLS8vIHByb2xvZ3VlL2VwaWxvZ3VlIHRvIHRoZSBjb2RlLiBJdCdzIGEgbWFuZGF0b3J5IHBo
YXNlLgorLy8gVGhpcyB1dGlsaXR5IGlkZW50aWZpZXMgY2FsbGVlLXNhdmUgcmVnaXN0ZXJzIGFu
ZCB0ZWxscyBDb2RlLiBJdCdzIGNhbGxlZCBmcm9tIHBoYXNlcyB0aGF0CisvLyBkbyBzdGFjayBh
bGxvY2F0aW9uLiBXZSBkb24ndCBkbyBpdCBhdCB0aGUgZW5kIG9mIHJlZ2lzdGVyIGFsbG9jYXRp
b24gYmVjYXVzZSB0aGUgcmVhbCBlbmQKKy8vIG9mIHJlZ2lzdGVyIGFsbG9jYXRpb24gaXMganVz
dCBiZWZvcmUgc3RhY2sgYWxsb2NhdGlvbi4KIAogLy8gRklYTUU6IEl0IHdvdWxkIGJlIGNvb2wg
dG8gbWFrZSB0aGlzIG1vcmUgaW50ZXJhY3RpdmUgd2l0aCB0aGUgQWlyIGNsaWVudCBhbmQgYWxz
byBtb3JlCiAvLyBwb3dlcmZ1bC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAJKHJldmlzaW9uIDIxNTIzOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCB2b2lkIGxvd2VyQWZ0ZXJSZWdBbGxv
YyhDb2RlJiBjb2RlKQogICAgICAgICByZXR1cm47CiAKICAgICBIYXNoTWFwPEluc3QqLCBSZWdp
c3RlclNldD4gdXNlZFJlZ2lzdGVyczsKLQorICAgIAogICAgIFJlZ0xpdmVuZXNzIGxpdmVuZXNz
KGNvZGUpOwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CiAgICAgICAgIFJl
Z0xpdmVuZXNzOjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CkBAIC05Niwx
MyArOTYsMjkgQEAgdm9pZCBsb3dlckFmdGVyUmVnQWxsb2MoQ29kZSYgY29kZSkKICAgICAgICAg
ICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCgmaW5zdCwgc2V0KTsKICAgICAgICAgfQogICAgIH0K
LQorICAgIAorICAgIHN0ZDo6YXJyYXk8c3RkOjphcnJheTxTdGFja1Nsb3QqLCAyPiwgbnVtQmFu
a3M+IHNsb3RzOworICAgIGZvckVhY2hCYW5rKAorICAgICAgICBbJl0gKEJhbmsgYmFuaykgewor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI7ICsraSkKKyAgICAgICAgICAg
ICAgICBzbG90c1tiYW5rXVtpXSA9IG51bGxwdHI7CisgICAgICAgIH0pOworCisgICAgLy8gSWYg
d2UgcnVuIGFmdGVyIHN0YWNrIGFsbG9jYXRpb24gdGhlbiB3ZSBjYW5ub3QgdXNlIHRob3NlIGNh
bGxlZSBzYXZlcyB0aGF0IGFyZW4ndCBpbgorICAgIC8vIHRoZSBjYWxsZWUgc2F2ZSBsaXN0LiBO
b3RlIHRoYXQgd2UgYXJlIG9ubHkgcnVuIGFmdGVyIHN0YWNrIGFsbG9jYXRpb24gaW4gLU8xLCBz
byB0aGlzCisgICAgLy8ga2luZCBvZiBzbG9wIGlzIE9LLgorICAgIFJlZ2lzdGVyU2V0IGJsYWNr
bGlzdGVkQ2FsbGVlU2F2ZXM7CisgICAgaWYgKGNvZGUuc3RhY2tJc0FsbG9jYXRlZCgpKSB7Cisg
ICAgICAgIGJsYWNrbGlzdGVkQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJl
Z2lzdGVycygpOworICAgICAgICBibGFja2xpc3RlZENhbGxlZVNhdmVzLmV4Y2x1ZGUoY29kZS5j
YWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIH0KKyAgICAKICAgICBhdXRvIGdldFNjcmF0Y2hl
cyA9IFsmXSAoUmVnaXN0ZXJTZXQgc2V0LCBCYW5rIGJhbmspIC0+IHN0ZDo6YXJyYXk8QXJnLCAy
PiB7CiAgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAyPiByZXN1bHQ7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAyOyArK2kpIHsKICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxz
ZTsKICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGNvZGUucmVnc0luUHJpb3JpdHlPcmRlcihi
YW5rKSkgewotICAgICAgICAgICAgICAgIGlmICghc2V0LmdldChyZWcpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFzZXQuZ2V0KHJlZykgJiYgIWJsYWNrbGlzdGVkQ2FsbGVlU2F2ZXMuZ2V0KHJl
ZykpIHsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gVG1wKHJlZyk7CiAgICAgICAg
ICAgICAgICAgICAgIHNldC5zZXQocmVnKTsKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0
cnVlOwpAQCAtMTEwLDEwICsxMjYsMTAgQEAgdm9pZCBsb3dlckFmdGVyUmVnQWxsb2MoQ29kZSYg
Y29kZSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAo
IWZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gQXJnOjpzdGFjaygKLSAgICAg
ICAgICAgICAgICAgICAgY29kZS5hZGRTdGFja1Nsb3QoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBieXRlcyhjb25zZXJ2YXRpdmVXaWR0aChiYW5rKSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICBTdGFja1Nsb3RLaW5kOjpTcGlsbCkpOworICAgICAgICAgICAgICAgIFN0YWNrU2xvdComIHNs
b3QgPSBzbG90c1tiYW5rXVtpXTsKKyAgICAgICAgICAgICAgICBpZiAoIXNsb3QpCisgICAgICAg
ICAgICAgICAgICAgIHNsb3QgPSBjb2RlLmFkZFN0YWNrU2xvdChieXRlcyhjb25zZXJ2YXRpdmVX
aWR0aChiYW5rKSksIFN0YWNrU2xvdEtpbmQ6OlNwaWxsKTsKKyAgICAgICAgICAgICAgICByZXN1
bHRbaV0gPSBBcmc6OnN0YWNrKHNsb3RzW2JhbmtdW2ldKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJMb3dlclN0YWNrQXJncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlclN0YWNrQXJncy5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlclN0YWNrQXJncy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckxvd2Vy
U3RhY2tBcmdzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQu
aCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUu
aCIKKyNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3Zv
aWQgbG93ZXJTdGFja0FyZ3MoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2Nv
cGUoY29kZSwgImxvd2VyU3RhY2tBcmdzIik7CisgICAgCisgICAgLy8gTm93IHdlIG5lZWQgdG8g
ZGVkdWNlIGhvdyBtdWNoIGFyZ3VtZW50IGFyZWEgd2UgbmVlZC4KKyAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsK
KyAgICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoYXJnLmlzQ2FsbEFyZygpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZvciBub3cs
IHdlIGFzc3VtZSB0aGF0IHdlIHVzZSA4IGJ5dGVzIG9mIHRoZSBjYWxsIGFyZy4gQnV0IHRoYXQn
cyBub3QKKyAgICAgICAgICAgICAgICAgICAgLy8gc3VjaCBhbiBhd2Vzb21lIGFzc3VtcHRpb24u
CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUwNDU0CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChhcmcub2Zm
c2V0KCkgPj0gMCk7CisgICAgICAgICAgICAgICAgICAgIGNvZGUucmVxdWVzdENhbGxBcmdBcmVh
U2l6ZUluQnl0ZXMoYXJnLm9mZnNldCgpICsgOCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgY29kZS5zZXRGcmFtZVNpemUoY29kZS5m
cmFtZVNpemUoKSArIGNvZGUuY2FsbEFyZ0FyZWFTaXplSW5CeXRlcygpKTsKKworICAgIC8vIEZp
bmFsbHksIHRyYW5zZm9ybSB0aGUgY29kZSB0byB1c2UgQWRkcidzIGluc3RlYWQgb2YgU3RhY2tT
bG90J3MuIFRoaXMgaXMgYSBsb3NzbGVzcworICAgIC8vIHRyYW5zZm9ybWF0aW9uIHNpbmNlIHdl
IGNhbiBzZWFyY2ggdGhlIFN0YWNrU2xvdHMgYXJyYXkgdG8gZmlndXJlIG91dCB3aGljaCBTdGFj
a1Nsb3QgYW55CisgICAgLy8gb2Zmc2V0LWZyb20tRlAgcmVmZXJzIHRvLgorCisgICAgLy8gRklY
TUU6IFRoaXMgbWF5IHByb2R1Y2UgYWRkcmVzc2VzIHRoYXQgYXJlbid0IHZhbGlkIGlmIHdlIGVu
ZCB1cCB3aXRoIGEgZ2lub3Jtb3VzIHN0YWNrIGZyYW1lLgorICAgIC8vIFdlIHdvdWxkIGhhdmUg
dG8gc2NhdmVuZ2UgZm9yIHRlbXBvcmFyaWVzIGlmIHRoaXMgaGFwcGVuZWQuIEZvcnR1bmF0ZWx5
LCB0aGlzIGNhc2Ugd2lsbCBiZQorICAgIC8vIGV4dHJlbWVseSByYXJlIHNvIHdlIGNhbiBkbyBj
cmF6eSB0aGluZ3Mgd2hlbiBpdCBhcmlzZXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MjUzMAorCisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNl
dChjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsr
aW5zdEluZGV4KSB7CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRl
eCk7CisgICAgICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICAgICAgWyZdIChB
cmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoIHdpZHRoKSB7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gc3RhY2tBZGRyID0gWyZdIChpbnQzMl90IG9mZnNldCkgLT4gQXJnIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIEFyZyByZXN1bHQgPSBBcmc6OnN0YWNrQWRkcihvZmZz
ZXQsIGNvZGUuZnJhbWVTaXplKCksIHdpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRkFUQUw6
IENvdWxkIG5vdCBjcmVhdGUgc3RhY2sgcmVmZXJlbmNlIGZvciBvZmZzZXQgPSAiLCBvZmZzZXQs
ICIgYW5kIHdpZHRoID0gIiwgd2lkdGgsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkNvZGU6XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKGNvZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkZBVEFMOiBD
b3VsZCBub3QgY3JlYXRlIHN0YWNrIHJlZmVyZW5jZSBmb3Igb2Zmc2V0ID0gIiwgb2Zmc2V0LCAi
IGFuZCB3aWR0aCA9ICIsIHdpZHRoLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHN3aXRj
aCAoYXJnLmtpbmQoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3RhY2s6IHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IGFyZy5zdGFja1Nsb3Qo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzWkRlZihyb2xlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICYmIHNsb3QtPmtpbmQoKSA9PSBTdGFja1Nsb3RLaW5kOjpT
cGlsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsb3QtPmJ5dGVTaXplKCkgPiBi
eXRlcyh3aWR0aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDdXJyZW50bHkg
d2Ugb25seSBoYW5kbGUgdGhpcyBzaW1wbGUgY2FzZSBiZWNhdXNlIGl0J3MgdGhlIG9ubHkgb25l
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBhcmlzZXM6IFpEZWYncyBhcmUg
b25seSAzMi1iaXQgcmlnaHQgbm93LiBTbywgd2hlbiB3ZSBoaXQgdGhlc2UKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBhc3NlcnRpb25zIGl0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byBp
bXBsZW1lbnQgdGhvc2Ugb3RoZXIga2luZHMgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB6ZXJvIGZpbGxzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHNsb3QtPmJ5dGVTaXplKCkgPT0gOCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQod2lkdGggPT0gV2lkdGgzMik7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1ZhbGlkRm9ybShTdG9yZVplcm8zMiwgQXJnOjpTdGFj
aykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCArIDEsIFN0b3JlWmVybzMy
LCBpbnN0Lm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBZGRy
KGFyZy5vZmZzZXQoKSArIDQgKyBzbG90LT5vZmZzZXRGcm9tRlAoKSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gc3RhY2tBZGRyKGFy
Zy5vZmZzZXQoKSArIHNsb3QtPm9mZnNldEZyb21GUCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgQXJnOjpDYWxsQXJnOgorICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gc3RhY2tBZGRy
KGFyZy5vZmZzZXQoKSAtIGNvZGUuZnJhbWVTaXplKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUo
YmxvY2spOworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJMb3dlclN0YWNrQXJncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyTG93ZXJTdGFja0FyZ3MuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8g
VGhpcyB0dXJucyBzdGFjayBhbmQgY2FsbEFyZyByZWZlcmVuY2VzIGludG8gYWN0dWFsIEZQLXJl
bGF0aXZlIG9yIFNQLXJlbGF0aXZlIGFkZHJlc3Nlcy4KKy8vIEFsc28gZml4ZXMgWkRlZnMgdG8g
YW5vbnltb3VzIHN0YWNrIHNsb3RzLgorCit2b2lkIGxvd2VyU3RhY2tBcmdzKENvZGUmKTsKKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNp
b24gMjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRl
LCBTYWZlcG9pbnQ6OlJlCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmVnaXN0ZXJBdE9mZnNldExpc3Q+IHJlZ2lzdGVyT2Zmc2V0cyA9Ci0gICAgICAgIHN0ZDo6
bWFrZV91bmlxdWU8UmVnaXN0ZXJBdE9mZnNldExpc3Q+KHN0YXRlLnByb2MtPmNhbGxlZVNhdmVS
ZWdpc3RlcnMoKSk7CisgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8UmVnaXN0ZXJBdE9mZnNldExp
c3Q+KHN0YXRlLnByb2MtPmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpKTsKICAgICBp
ZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpCiAgICAgICAgIGRhdGFMb2coIlVud2luZCBpbmZv
IGZvciAiLCBDb2RlQmxvY2tXaXRoSklUVHlwZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklU
Q29kZTo6RlRMSklUKSwgIjogIiwgKnJlZ2lzdGVyT2Zmc2V0cywgIlxuIik7CiAgICAgc3RhdGUu
Z3JhcGgubV9jb2RlQmxvY2stPnNldENhbGxlZVNhdmVSZWdpc3RlcnMoV1RGTW92ZShyZWdpc3Rl
ck9mZnNldHMpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9m
ZnNldExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lz
dGVyQXRPZmZzZXRMaXN0LmgJKHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyAr
MzgsNyBAQCBwdWJsaWM6CiAgICAgZW51bSBPZmZzZXRCYXNlVHlwZSB7IEZyYW1lUG9pbnRlckJh
c2VkLCBaZXJvQmFzZWQgfTsKIAogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KCk7Ci0gICAgUmVn
aXN0ZXJBdE9mZnNldExpc3QoUmVnaXN0ZXJTZXQsIE9mZnNldEJhc2VUeXBlID0gRnJhbWVQb2lu
dGVyQmFzZWQpOworICAgIGV4cGxpY2l0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KFJlZ2lzdGVyU2V0
LCBPZmZzZXRCYXNlVHlwZSA9IEZyYW1lUG9pbnRlckJhc2VkKTsKIAogICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyMTUyMzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzMjgsNyArMTMyOCw3IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJu
YWxGdW4KICAgICAgICAgQjM6OnByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2NlZHVyZSk7CiAgICAg
ICAgIEIzOjpnZW5lcmF0ZShwcm9jZWR1cmUsICpjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5
cG9pbnRKSVQpOwogICAgICAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXBy
b2R1Y3RzID0gcHJvY2VkdXJlLnJlbGVhc2VCeXByb2R1Y3RzKCk7Ci0gICAgICAgIHJlc3VsdC0+
d2FzbUVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHByb2NlZHVyZS5jYWxsZWVTYXZl
UmVnaXN0ZXJzKCk7CisgICAgICAgIHJlc3VsdC0+d2FzbUVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJl
Z2lzdGVycyA9IHByb2NlZHVyZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKTsKICAg
ICB9CiAKICAgICBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoY29tcGlsYXRpb25Db250ZXh0LCAqcmVz
dWx0LCBzaWduYXR1cmUsIGluZm8sIG1vZGUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306875</attachid>
            <date>2017-04-11 16:57:54 -0700</date>
            <delta_ts>2017-04-11 17:08:11 -0700</delta_ts>
            <desc>so close</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>127450</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE1MjM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMSBA
QAorMjAxNy0wNC0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEIzIC1PMSBzaG91bGQgbm90IGFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDc0MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgT25lIG9mIEIz
IC1PMSdzIGxvbmdlc3QgcnVubmluZyBwaGFzZXMgaXMgYWxsb2NhdGVTdGFja0J5R3JhcGhDb2xv
cmluZy4gT25lIGFwcHJvYWNoIHRvCisgICAgICAgIHRoaXMgd291bGQgYmUgdG8gbWFrZSB0aGF0
IHBoYXNlIGNoZWFwZXIuIEJ1dCBpdCdzIHdlaXJkIHRoYXQgdGhpcyBwaGFzZSByZXJ1bnMKKyAg
ICAgICAgbGl2ZW5lc3MgYWZ0ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbiBhbHJlYWR5IHJhbiBsaXZl
bmVzcy4gSWYgb25seSBpdCBjb3VsZCByZXVzZSB0aGUKKyAgICAgICAgbGl2ZW5lc3MgY29tcHV0
ZWQgYnkgcmVnaXN0ZXIgYWxsb2NhdGlvbiB0aGVuIGl0IHdvdWxkIHJ1biBhIGxvdCBmYXN0ZXIu
IEF0IC1PMiwgd2UgZG8KKyAgICAgICAgbm90IHdhbnQgdGhpcywgc2luY2Ugd2UgcnVuIHBoYXNl
cyBiZXR3ZWVuIHJlZ2lzdGVyIGFsbG9jYXRpb24gYW5kIHN0YWNrIGFsbG9jYXRpb24sCisgICAg
ICAgIGFuZCB0aG9zZSBwaGFzZXMgYXJlIGZyZWUgdG8gY2hhbmdlIHRoZSBsaXZlbmVzcyBvZiBz
cGlsbCBzbG90cyAoaW4gZmFjdCwKKyAgICAgICAgZml4T2J2aW91c1NwaWxscyB3aWxsIGJvdGgg
c2hvcnRlbiBhbmQgbGVuZ3RoZW4gbGl2ZSByYW5nZXMgYmVjYXVzZSBvZiBsb2FkIGFuZCBzdG9y
ZQorICAgICAgICBlbGltaW5hdGlvbiwgcmVzcGVjdGl2ZWx5KS4gQnV0IGF0IC1PMSwgd2UgZG9u
J3QgcmVhbGx5IG5lZWQgdG8gcnVuIGFueSBwaGFzZXMgYmV0d2VlbgorICAgICAgICByZWdpc3Rl
ciBhbmQgc3RhY2sgYWxsb2NhdGlvbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgY2hhbmdlcyBB
aXIncyBiYWNrZW5kIGluIHRoZSBmb2xsb3dpbmcgd2F5czoKKyAgICAgICAgCisgICAgICAgIC0g
TGluZWFyIHNjYW4gZG9lcyBzdGFjayBhbGxvY2F0aW9uLiBUaGlzIG1lYW5zIHRoYXQgd2UgZG9u
J3QgbmVlZCB0byBydW4KKyAgICAgICAgICBhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nIGF0
IGFsbC4gSW4gcmVhbGl0eSwgd2UgcmV1c2Ugc29tZSBvZiBpdHMgaW5uYXJkcywgYnV0CisgICAg
ICAgICAgd2UgZG9uJ3QgcnVuIHRoZSBleHBlbnNpdmUgcGFydCBvZiBpdCAobGl2ZW5lc3MtPmlu
dGVyZmVyZW5jZS0+Y29hbGVzY2luZy0+Y29sb3JpbmcpLgorICAgICAgICAgIFRoaXMgaXMgYSBz
cGVlZC11cCBiZWNhdXNlIHdlIG9ubHkgcnVuIGxpdmVuZXNzIG9uY2UgYW5kIHJldXNlIGl0IGZv
ciBib3RoIHJlZ2lzdGVyCisgICAgICAgICAgYW5kIHN0YWNrIGFsbG9jYXRpb24uCisgICAgICAg
IAorICAgICAgICAtIFBoYXNlcyB0aGF0IHByZXZpb3VzbHkgcmFuIGJldHdlZW4gcmVnaXN0ZXIg
YW5kIHN0YWNrIGFsbG9jYXRpb24gYXJlIHRha2VuIGNhcmUgb2YsCisgICAgICAgICAgZWFjaCBp
biBpdHMgb3duIHNwZWNpYWwgd2F5OgorICAgICAgICAgIAorICAgICAgICAgIC0+IGhhbmRsZUNh
bGxlU2F2ZXM6IHRoaXMgaXMgbm93IGEgdXRpbGl0eSBmdW5jdGlvbiBjYWxsZWQgYnkgYm90aAor
ICAgICAgICAgICAgIGFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcgYW5kIGFsbG9jYXRlUmVn
aXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uCisgICAgICAgICAgCisgICAgICAgICAgLT4gZml4
T2J2aW91c1NwaWxsczogd2UgZGlkbid0IHJ1biB0aGlzIGF0IC1PMSwgc28gbm90aGluZyBuZWVk
cyB0byBiZSBkb25lLgorICAgICAgICAgIAorICAgICAgICAgIC0+IGxvd2VyQWZ0ZXJSZWdBbGxv
YzogdGhpcyBuZWVkZWQgdG8gYmUgYWJsZSB0byBydW4gYmVmb3JlIHN0YWNrIGFsbG9jYXRpb24g
YmVjYXVzZQorICAgICAgICAgICAgIGl0IGNvdWxkIGNoYW5nZSByZWdpc3RlciB1c2FnZSAodmlz
IGEgdmlzIGNhbGxlZSBzYXZlcykgYW5kIGl0IGNvdWxkIGludHJvZHVjZQorICAgICAgICAgICAg
IHNwaWxsIHNsb3RzLiBJIGNoYW5nZWQgdGhpcyBwaGFzZSB0byBoYXZlIGEgc2Vjb25kYXJ5IG1v
ZGUgZm9yIHdoZW4gaXQgcnVucyBhZnRlcgorICAgICAgICAgICAgIHN0YWNrIGFsbG9jYXRpb24u
CisgICAgICAgIAorICAgICAgICAtIFRoZSBwYXJ0IG9mIGFsbG9jYXRlU3RhY2tCeUdyYXBoQ29s
b3JpbmcgdGhhdCBsb3dlcmVkIHN0YWNrIGFkZHJlc3NlcyBhbmQgdG9vayBjYXJlCisgICAgICAg
ICAgb2YgdGhlIGNhbGwgYXJnIGFyZWEgaXMgbm93IGEgc2VwYXJhdGUgcGhhc2UgY2FsbGVkIGxv
d2VyU3RhY2tBcmdzLiBXZSBydW4gdGhpcyBwaGFzZQorICAgICAgICAgIHJlZ2FyZGxlc3Mgb2Yg
b3B0aW1pemF0aW9uIGxldmVsLiBJdCdzIGEgY2hlYXAgYW5kIGdlbmVyYWwgbG93ZXJpbmcuCisg
ICAgICAgIAorICAgICAgICBUaGlzIGFsc28gcmVtb3ZlcyBzcGlsbEV2ZXJ5dGhpbmcsIGJlY2F1
c2Ugd2UgbmV2ZXIgdXNlIHRoYXQgcGhhc2UsIHdlIG5ldmVyIHRlc3QgaXQsCisgICAgICAgIGFu
ZCBpdCBnb3QgaW4gdGhlIHdheSBpbiB0aGlzIHJlZmFjdG9yaW5nLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBpcyBhIFhYJSAoT09QUyEpIHNwZWVkLXVwIG9uIHdhc20gLU8xIGNvbXBpbGUgdGlt
ZXMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmNw
cDoKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZz
ZXRMaXN0KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cyk6IERlbGV0ZWQuCisgICAgICAgICogYjMvQjNQcm9jZWR1cmUuaDoKKyAgICAgICAgKiBiMy9C
M1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXM6OnVuYXZhaWxhYmxlUmVnaXN0ZXJzKToKKyAgICAgICAgKiBiMy9h
aXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5jcHA6IENvcGllZCBm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxp
bmVhclNjYW4uY3BwLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjphbGxvY2F0ZVJlZ2lzdGVyc0Fu
ZFN0YWNrQnlMaW5lYXJTY2FuKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6YWxsb2NhdGVSZWdp
c3RlcnNCeUxpbmVhclNjYW4pOiBEZWxldGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0
ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaC4KKyAg
ICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5o
OiBSZW1vdmVkLgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9y
aW5nLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6YWxsb2NhdGVFc2NhcGVkU3RhY2tTbG90
cyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnVwZGF0ZUZyYW1lU2l6ZUJhc2VkT25TdGFja1Ns
b3RzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6YWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmlu
Zyk6CisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcuaDoK
KyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJn
OjpzdGFja0FkZHIpOgorICAgICAgICAqIGIzL2Fpci9BaXJBcmcuaDoKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjpzdGFja0FkZHIpOiBEZWxldGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJD
b2RlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YWRkU3RhY2tTbG90KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6c2V0Q2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRM
aXN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyQXRP
ZmZzZXRMaXN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6ZHVtcCk6CisgICAgICAg
ICogYjMvYWlyL0FpckNvZGUuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6c2V0U3Rh
Y2tJc0FsbG9jYXRlZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnN0YWNrSXNBbGxv
Y2F0ZWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpjYWxsZWVTYXZlUmVnaXN0ZXJz
KToKKyAgICAgICAgKiBiMy9haXIvQWlyR2VuZXJhdGUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpwcmVwYXJlRm9yR2VuZXJhdGlvbik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmdlbmVy
YXRlKToKKyAgICAgICAgKiBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpoYW5kbGVDYWxsZWVTYXZlcyk6CisgICAgICAgICogYjMvYWlyL0Fp
ckhhbmRsZUNhbGxlZVNhdmVzLmg6CisgICAgICAgICogYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdB
bGxvYy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Omxvd2VyQWZ0ZXJSZWdBbGxvYyk6Cisg
ICAgICAgICogYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdzLmNwcDogQWRkZWQuCisgICAgICAgIChK
U0M6OkIzOjpBaXI6Omxvd2VyU3RhY2tBcmdzKToKKyAgICAgICAgKiBiMy9haXIvQWlyTG93ZXJT
dGFja0FyZ3MuaDogQWRkZWQuCisgICAgICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpT
Qzo6QjM6OnRlc3RQaW5SZWdpc3RlcnMpOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoK
KyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlKToKKyAgICAgICAgKiBqaXQvUmVnaXN0ZXJBdE9m
ZnNldExpc3QuaDoKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6cGFyc2VBbmRDb21waWxlKToKKwogMjAxNy0wNC0xMSAgR3VpbGxhdW1l
IEVtb250ICA8Z3VpamVtb250QGlnYWxpYS5jb20+CiAKICAgICAgICAgW2pzY10gQWRkIG1pc3Np
bmcgTWFjcm9Bc3NlbWJsZXJNSVBTOjpvcjMyKCkgaW1wbGVtZW50YXRpb24KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzMsOCArNzMs
OCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGFzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlclByaW50ZXIuY3BwCiAgICAgYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNw
cAogCisgICAgYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4u
Y3BwCiAgICAgYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAot
ICAgIGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAKICAgICBiMy9h
aXIvQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZy5jcHAKICAgICBiMy9haXIvQWlyQXJn
LmNwcAogICAgIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcApAQCAtMTAwLDYgKzEwMCw3IEBAIHNl
dChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5jcHAKICAgICBiMy9haXIvQWlyTG93ZXJFbnRyeVN3aXRjaC5jcHAKICAgICBiMy9haXIvQWly
TG93ZXJNYWNyb3MuY3BwCisgICAgYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdzLmNwcAogICAgIGIz
L2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwCiAgICAgYjMvYWlyL0FpclBhZEludGVyZmVy
ZW5jZS5jcHAKICAgICBiMy9haXIvQWlyUGhhc2VJbnNlcnRpb25TZXQuY3BwCkBAIC0xMDgsNyAr
MTA5LDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBiMy9haXIvQWlyUmVwb3J0
VXNlZFJlZ2lzdGVycy5jcHAKICAgICBiMy9haXIvQWlyU2ltcGxpZnlDRkcuY3BwCiAgICAgYjMv
YWlyL0FpclNwZWNpYWwuY3BwCi0gICAgYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAKICAg
ICBiMy9haXIvQWlyU3RhY2tTbG90LmNwcAogICAgIGIzL2Fpci9BaXJTdGFja1Nsb3RLaW5kLmNw
cAogICAgIGIzL2Fpci9BaXJUbXAuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw4ICsx
ODYsOCBAQAogCQkwRjI1RjFCNDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFB
RDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQUM1NjYxRThBMEI3NzAwMDFF
RTNGIC8qIEFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkFDNTY0MUU4QTBCNzYwMDAxRUUzRiAvKiBB
aXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHAgKi87IH07CiAJCTBGMkFDNTY3MUU4QTBCNzkw
MDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjUxRThBMEI3NjAwMDFFRTNGIC8q
IEFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmggKi87IH07Ci0JCTBGMkFDNTZBMUU4QTBCRDMw
MDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2ODFFOEEwQkQxMDAw
MUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwICovOyB9OwotCQkw
RjJBQzU2QjFFOEEwQkQ1MDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNj
YW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkFD
NTY5MUU4QTBCRDEwMDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5o
ICovOyB9OworCQkwRjJBQzU2QTFFOEEwQkQzMDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3Rl
cnNBbmRTdGFja0J5TGluZWFyU2Nhbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2ODFFOEEwQkQxMDAwMUVFM0YgLyogQWlyQWxsb2NhdGVS
ZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5jcHAgKi87IH07CisJCTBGMkFDNTZCMUU4QTBC
RDUwMDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2OTFF
OEEwQkQxMDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nh
bi5oICovOyB9OwogCQkwRjJBQzU2RTFFOEQ3QjAwMDAwMUVFM0YgLyogQWlyUGhhc2VJbnNlcnRp
b25TZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQUM1NkMxRThEN0FGRjAwMDFFRTNGIC8qIEFpclBoYXNlSW5zZXJ0aW9uU2V0LmNwcCAqLzsg
fTsKIAkJMEYyQUM1NkYxRThEN0IwMzAwMDFFRTNGIC8qIEFpclBoYXNlSW5zZXJ0aW9uU2V0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2RDFF
OEQ3QUZGMDAwMUVFM0YgLyogQWlyUGhhc2VJbnNlcnRpb25TZXQuaCAqLzsgfTsKIAkJMEYyQUM1
NzExRThFRTQ1NDAwMDFFRTNGIC8qIEFpckZvcm1UYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NzAxRThFRTQ1MjAwMDFFRTNGIC8qIEFp
ckZvcm1UYWJsZS5oICovOyB9OwpAQCAtNDU1LDYgKzQ1NSw4IEBACiAJCTBGNUFFMkM0MURGNEYy
ODAwMDY2RUZFMSAvKiBWTUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFOTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjVCNEEz
MzFDODRGMEQ2MDBGMUIxN0UgLyogU2xvd1BhdGhSZXR1cm5UeXBlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCNEEzMjFDODRGMEQ2MDBGMUIxN0Ug
LyogU2xvd1BhdGhSZXR1cm5UeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY1Q0Y5ODExRTk2RjE3RjAwQzE4NjkyIC8qIEFpclRtcE1hcC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1Q0Y5ODAx
RTk2RjE3RDAwQzE4NjkyIC8qIEFpclRtcE1hcC5oICovOyB9OworCQkwRjVDRjk4NDFFOUQ1Mzc3
MDBDMTg2OTIgLyogQWlyTG93ZXJTdGFja0FyZ3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUNGOTgzMUU5RDUzNzUwMEMxODY5MiAvKiBBaXJMb3dl
clN0YWNrQXJncy5oICovOyB9OworCQkwRjVDRjk4NTFFOUQ1MzdBMDBDMTg2OTIgLyogQWlyTG93
ZXJTdGFja0FyZ3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY1Q0Y5ODIxRTlENTM3NTAwQzE4NjkyIC8qIEFpckxvd2VyU3RhY2tBcmdzLmNwcCAq
LzsgfTsKIAkJMEY1RDA4NUQxQjhDRjk5RDAwMTE0M0I0IC8qIERGR05vZGVPcmlnaW4uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RDA4NUMxQjhD
Rjk5RDAwMTE0M0I0IC8qIERGR05vZGVPcmlnaW4uY3BwICovOyB9OwogCQkwRjVFRjkxRTE2ODc4
RjdBMDAzRTVDMjUgLyogSklUVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUVGOTFCMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3Mu
Y3BwICovOyB9OwogCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1bmtzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVFRjkxQzE2ODc4
Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk1OSw4ICs5NjEsNiBAQAogCQkwRkVDODU4NDFCREFDREM3
MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2Nv
cGUuaCAqLzsgfTsKIAkJMEZFQzg1ODcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjIx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuY3BwICovOyB9OwogCQkwRkVDODU4ODFCREFD
REM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwu
aCAqLzsgfTsKLQkJMEZFQzg1ODkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGlu
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODU2NDFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmNwcCAqLzsgfTsKLQkJ
MEZFQzg1OEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjUxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5oICovOyB9OwogCQkwRkVDODU4QjFCREFDREM3
MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Ns
b3QuY3BwICovOyB9OwogCQkwRkVDODU4QzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2
NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmggKi87IH07CiAJCTBGRUM4NThEMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAg
Ki87IH07CkBAIC0yNzMxLDggKzI3MzEsOCBAQAogCQkwRjI1RjFBRDE4MTYzNUYzMDA1MjJGMzkg
LyogRlRMU2xvd1BhdGhDYWxsS2V5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEZUTFNsb3dQYXRoQ2FsbEtleS5oOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJBQzU2NDFFOEEwQjc2MDAwMUVFM0YgLyog
QWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuY3BwOyBwYXRoID0gYjMvYWly
L0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYyQUM1NjUxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNwaWxsc0FmdGVyVGVybWlu
YWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckZpeFNwaWxsc0FmdGVy
VGVybWluYWxzLmg7IHBhdGggPSBiMy9haXIvQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8q
IEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcDsg
cGF0aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMkFDNTY5MUU4QTBCRDEwMDAxRUUzRiAvKiBBaXJB
bGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oOyBwYXRoID0gYjMvYWly
L0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkFDNTY4MUU4QTBCRDEwMDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVy
c0FuZFN0YWNrQnlMaW5lYXJTY2FuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEFpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uY3BwOyBwYXRo
ID0gYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyog
QWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJT
Y2FuLmg7IHBhdGggPSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFy
U2Nhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJBQzU2QzFFOEQ3QUZGMDAw
MUVFM0YgLyogQWlyUGhhc2VJbnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyUGhhc2VJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0gYjMvYWlyL0Fp
clBoYXNlSW5zZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYy
QUM1NkQxRThEN0FGRjAwMDFFRTNGIC8qIEFpclBoYXNlSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclBoYXNlSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBi
My9haXIvQWlyUGhhc2VJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyQUM1NzAxRThFRTQ1MjAwMDFFRTNGIC8qIEFpckZvcm1UYWJsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJGb3JtVGFibGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJG
b3JtVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5OTUsNiArMjk5NSw4
IEBACiAJCTBGNUE2MjgyMTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFZhbHVlUmFuZ2UuaDsgcGF0aCA9IGZ0bC9G
VExWYWx1ZVJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUI0QTMyMUM4
NEYwRDYwMEYxQjE3RSAvKiBTbG93UGF0aFJldHVyblR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2xvd1BhdGhSZXR1cm5UeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNUNGOTgwMUU5NkYxN0QwMEMxODY5MiAvKiBBaXJUbXBNYXAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyVG1wTWFwLmg7IHBhdGggPSBiMy9haXIvQWly
VG1wTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNUNGOTgyMUU5RDUzNzUw
MEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBBaXJMb3dlclN0YWNrQXJncy5jcHA7IHBhdGggPSBiMy9haXIvQWlyTG93
ZXJTdGFja0FyZ3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVDRjk4MzFF
OUQ1Mzc1MDBDMTg2OTIgLyogQWlyTG93ZXJTdGFja0FyZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQWlyTG93ZXJTdGFja0FyZ3MuaDsgcGF0aCA9IGIzL2Fpci9BaXJMb3dl
clN0YWNrQXJncy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVEMDg1QzFCOENG
OTlEMDAxMTQzQjQgLyogREZHTm9kZU9yaWdpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdOb2RlT3JpZ2luLmNwcDsgcGF0aCA9IGRmZy9ERkdOb2RlT3JpZ2lu
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RUY5MUIxNjg3OEY3ODAwM0U1
QzI1IC8qIEpJVFRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKSVRUaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVFRjkxQzE2
ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpJVFRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzUxMiw4
ICszNTE0LDYgQEAKIAkJMEZFQzg1NUYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyUGhhc2VTY29wZS5oOyBwYXRo
ID0gYjMvYWlyL0FpclBoYXNlU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQzg1NjIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU3BlY2lhbC5jcHA7IHBhdGggPSBiMy9haXIvQWly
U3BlY2lhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NTYzMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEFpclNwZWNpYWwuaDsgcGF0aCA9IGIzL2Fpci9BaXJTcGVjaWFsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTBGRUM4NTY0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2
ZXJ5dGhpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU3Bp
bGxFdmVyeXRoaW5nLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkVDODU2NTFCREFDREM3MDA4MEZGNzQgLyog
QWlyU3BpbGxFdmVyeXRoaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
clNwaWxsRXZlcnl0aGluZy5oOyBwYXRoID0gYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODU2NjFCREFDREM3MDA4MEZGNzQgLyog
QWlyU3RhY2tTbG90LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFp
clN0YWNrU2xvdC5jcHA7IHBhdGggPSBiMy9haXIvQWlyU3RhY2tTbG90LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg1NjcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNr
U2xvdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJTdGFja1Nsb3QuaDsg
cGF0aCA9IGIzL2Fpci9BaXJTdGFja1Nsb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZFQzg1NjgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJUbXAuY3BwOyBwYXRoID0gYjMvYWlyL0FpclRtcC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTc3LDEwICs1NTc3LDEwIEBACiAJ
CTBGRUM4NEIzMUJEQUNEODgwMDgwRkY3NCAvKiBhaXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGMkFDNTY4MUU4QTBCRDEwMDAxRUUzRiAvKiBBaXJB
bGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmNwcCAqLywKKwkJCQkwRjJBQzU2
OTFFOEEwQkQxMDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFy
U2Nhbi5oICovLAogCQkJCTc5NjVDMjE0MUU1RDc5OTYwMEI3NTkxRCAvKiBBaXJBbGxvY2F0ZVJl
Z2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAgKi8sCiAJCQkJNzk2NUMyMTUxRTVENzk5NjAwQjc1
OTFEIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmggKi8sCi0JCQkJMEYy
QUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2Fu
LmNwcCAqLywKLQkJCQkwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdp
c3RlcnNCeUxpbmVhclNjYW4uaCAqLywKIAkJCQkwRkVDODU0ODFCREFDREM3MDA4MEZGNzQgLyog
QWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZy5jcHAgKi8sCiAJCQkJMEZFQzg1NDkxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcuaCAqLywKIAkJ
CQkwRkVDODU0QTFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAqLywKQEAgLTU2MzksNiAr
NTYzOSw4IEBACiAJCQkJMEZERjcwODQxRDNGMkMxRjAwOTI3NDQ5IC8qIEFpckxvd2VyRW50cnlT
d2l0Y2guaCAqLywKIAkJCQkwRjYxODMyNzFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNy
b3MuY3BwICovLAogCQkJCTBGNjE4MzI4MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jv
cy5oICovLAorCQkJCTBGNUNGOTgyMUU5RDUzNzUwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJn
cy5jcHAgKi8sCisJCQkJMEY1Q0Y5ODMxRTlENTM3NTAwQzE4NjkyIC8qIEFpckxvd2VyU3RhY2tB
cmdzLmggKi8sCiAJCQkJMjY0MDkxRkExQkUyRkQ0MTAwNjg0REIyIC8qIEFpck9wY29kZS5vcGNv
ZGVzICovLAogCQkJCTBGQjM4NzhDMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2Nr
T3JkZXIuY3BwICovLAogCQkJCTBGQjM4NzhEMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6
ZUJsb2NrT3JkZXIuaCAqLywKQEAgLTU2NTYsOCArNTY1OCw2IEBACiAJCQkJMEYzMzhERkMxQkVE
NTEyNzAwMTNDODhGIC8qIEFpclNpbXBsaWZ5Q0ZHLmggKi8sCiAJCQkJMEZFQzg1NjIxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclNwZWNpYWwuY3BwICovLAogCQkJCTBGRUM4NTYzMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTcGVjaWFsLmggKi8sCi0JCQkJMEZFQzg1NjQxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclNwaWxsRXZlcnl0aGluZy5jcHAgKi8sCi0JCQkJMEZFQzg1NjUxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclNwaWxsRXZlcnl0aGluZy5oICovLAogCQkJCTBGRUM4NTY2MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJTdGFja1Nsb3QuY3BwICovLAogCQkJCTBGRUM4NTY3MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJTdGFja1Nsb3QuaCAqLywKIAkJCQkwRjJCQkQ5QjFDNUZGNDA1MDAyM0VGMjMgLyogQWly
U3RhY2tTbG90S2luZC5jcHAgKi8sCkBAIC04MTM4LDcgKzgxMzgsNiBAQAogCQkJCTBGNDU3MDNE
MUJFNDVGMEEwMDYyQTYyOSAvKiBBaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjMzOERGRTFCRUQ1MTI3MDAxM0M4OEYgLyogQWlyU2ltcGxpZnlDRkcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUM4NTg4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkwRkVDODU4QTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxF
dmVyeXRoaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU4QzFCREFDREM3MDA4MEZGNzQg
LyogQWlyU3RhY2tTbG90LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCQkQ5RTFDNUZGNDA1MDAy
M0VGMjMgLyogQWlyU3RhY2tTbG90S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1OEUx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5oIGluIEhlYWRlcnMgKi8sCkBAIC04MjE0LDcgKzgy
MTMsNyBAQAogCQkJCTBGRUM4NTEwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3RE
b3VibGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM0MjJBNjMxQzE1OEU2RDAwRTJFQjk4
IC8qIEIzQ29uc3RGbG9hdFZhbHVlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjJBQzU2QjFFOEEw
QkQ1MDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGMkFDNTZCMUU4QTBCRDUwMDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lz
dGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODVCMzFC
REVEOTU3MDA4MEZGNzQgLyogQjNDb25zdFB0clZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjMzOERGNjFCRTkzRDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJDNjNCODFFNjM0M0Y3MDBDMTM4MzkgLyogQjNHZW5lcmljQmxvY2tJbnNl
cnRpb25TZXQuaCBpbiBIZWFkZXJzICovLApAQCAtODk3Nyw2ICs4OTc2LDcgQEAKIAkJCQlBNTEw
MDdDMTE4N0NDM0M2MDBCMzg4NzkgLyogSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTBFNEI2NDE4ODA5REQ1MDA2OEE0NkQgLyogSlNHbG9i
YWxPYmplY3RSdW50aW1lQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkM2M0M0MUU2OUVG
OTQwMEMxMzgzOSAvKiBCM01lbW9yeVZhbHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEY1Q0Y5ODQxRTlENTM3NzAwQzE4NjkyIC8qIEFpckxvd2VyU3RhY2tBcmdzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNTAzRkEyQTE4OEYxMDU5MDAxMTBGMTQgLyogSlNHbG9iYWxPYmplY3RTY3Jp
cHREZWJ1Z1NlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUxM0U1QzAxODVCRkFDQzAwN0U5
NUFEIC8qIEpTSW5qZWN0ZWRTY3JpcHRIb3N0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTEzRTVD
MjE4NUJGQUNDMDA3RTk1QUQgLyogSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuaCBpbiBI
ZWFkZXJzICovLApAQCAtMTAwMjUsNyArMTAwMjUsNiBAQAogCQkJCTBGNDU3MDNDMUJFNDVGMEEw
MDYyQTYyOSAvKiBBaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMzM4REZEMUJFRDUxMjcwMDEzQzg4RiAvKiBBaXJTaW1wbGlmeUNGRy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVDODU4NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkwRkVDODU4OTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVy
eXRoaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NThCMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJTdGFja1Nsb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQkJEOUQxQzVGRjQwNTAw
MjNFRjIzIC8qIEFpclN0YWNrU2xvdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1
OEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMjQ2
LDcgKzEwMjQ1LDcgQEAKIAkJCQlBNzhBOTc3NjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxp
emVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBE
RkdGaXh1cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjAxNzdGMURDQURDMzMwMEVB
NTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEYyQUM1NkEx
RThBMEJEMzAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGMkFDNTZBMUU4QTBCRDMwMDAxRUUzRiAvKiBBaXJBbGxvY2F0
ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
OUQzMzk2MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTdEODlDRjcxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNjlDQzg4MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwNzYxLDYgKzEwNzYwLDcgQEAKIAkJCQkxNDI4MDg0
MjEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODY0MkM1MTIxNTFDMDgzRDAwNDZENEVGIC8qIFJlZ0V4cE1hdGNoZXNBcnJheS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0MzEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwT2Jq
ZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNUNGOTg1MUU5RDUzN0EwMEMxODY5MiAvKiBB
aXJMb3dlclN0YWNrQXJncy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0NDEwN0VDMDkz
MDAxM0U3QjIgLyogUmVnRXhwUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NDBD
N0EwMUI4MkUxQzMwMDBGNkI3OSAvKiBSZWdpc3RlckF0T2Zmc2V0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTY1NDBDN0ExMUI4MkUxQzMwMDBGNkI3OSAvKiBSZWdpc3RlckF0T2Zmc2V0TGlzdC5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2Nl
ZHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2Vk
dXJlLmNwcAkocmV2aXNpb24gMjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UHJvY2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ1LDkgKzM0NSw5IEBAIHVuc2lnbmVk
IFByb2NlZHVyZTo6ZnJhbWVTaXplKCkgY29uc3QKICAgICByZXR1cm4gY29kZSgpLmZyYW1lU2l6
ZSgpOwogfQogCi1jb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCYgUHJvY2VkdXJlOjpjYWxsZWVT
YXZlUmVnaXN0ZXJzKCkgY29uc3QKK1JlZ2lzdGVyQXRPZmZzZXRMaXN0IFByb2NlZHVyZTo6Y2Fs
bGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29kZSgp
LmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICByZXR1cm4gY29kZSgpLmNhbGxlZVNhdmVSZWdp
c3RlckF0T2Zmc2V0TGlzdCgpOwogfQogCiBWYWx1ZSogUHJvY2VkdXJlOjphZGRWYWx1ZUltcGwo
VmFsdWUqIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJ
KHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVy
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDMsNyArMjQzLDcgQEAgcHVibGljOgogICAgIGJvb2wg
bmVlZHNVc2VkUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc1VzZWRSZWdpc3RlcnM7
IH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIGZyYW1lU2l6ZSgpIGNvbnN0Owot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0JiBjYWxsZWVT
YXZlUmVnaXN0ZXJzKCkgY29uc3Q7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUmVnaXN0ZXJBdE9m
ZnNldExpc3QgY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCkgY29uc3Q7CiAKICAgICBQ
Q1RvT3JpZ2luTWFwJiBwY1RvT3JpZ2luTWFwKCkgeyByZXR1cm4gbV9wY1RvT3JpZ2luTWFwOyB9
CiAgICAgUENUb09yaWdpbk1hcCByZWxlYXNlUENUb09yaWdpbk1hcCgpIHsgcmV0dXJuIFdURk1v
dmUobV9wY1RvT3JpZ2luTWFwKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwCShyZXZpc2lvbiAyMTUy
MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCw3IEBAIFJlZ2lzdGVyU2V0IFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtczo6dW4KICAgICBSZWdpc3RlclNldCByZXN1bHQgPSB1c2VkUmVn
aXN0ZXJzKCk7CiAgICAgCiAgICAgUmVnaXN0ZXJTZXQgdW5zYXZlZENhbGxlZVNhdmVzID0gUmVn
aXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIGZvciAoY29uc3QgUmVnaXN0
ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiBtX2NvbnRleHQuY29kZS0+Y2FsbGVlU2F2ZVJlZ2lz
dGVycygpKQotICAgICAgICB1bnNhdmVkQ2FsbGVlU2F2ZXMuY2xlYXIocmVnQXRPZmZzZXQucmVn
KCkpOworICAgIHVuc2F2ZWRDYWxsZWVTYXZlcy5leGNsdWRlKG1fY29udGV4dC5jb2RlLT5jYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkpOwogCiAgICAgcmVzdWx0Lm1lcmdlKHVuc2F2ZWRDYWxsZWVTYXZl
cyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAyMTUy
MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQxMDIsNyArMTQxMDIsNyBAQCB2b2lkIHRlc3RQaW5SZWdpc3RlcnMoKQogICAgICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBmb3Ig
KGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcHJvYy5jYWxsZWVTYXZlUmVn
aXN0ZXJzKCkpCisgICAgICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZz
ZXQgOiBwcm9jLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpKQogICAgICAgICAgICAg
dXNlc0NTUnMgfD0gY3Nycy5nZXQocmVnQXRPZmZzZXQucmVnKCkpOwogICAgICAgICBDSEVDS19F
USh1c2VzQ1NScywgIXBpbik7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVy
c0FuZFN0YWNrQnlMaW5lYXJTY2FuLmNwcAkocmV2aXNpb24gMjE1MjM4KQkoZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNw
cDoyMTUyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVn
aXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJT
Y2FuLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5o
IgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJGaXhTcGlsbHNBZnRlclRlcm1p
bmFscy5oIgorI2luY2x1ZGUgIkFpclBoYXNlSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWly
SW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgorI2luY2x1ZGUgIkFpclBh
ZEludGVyZmVyZW5jZS5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJB
aXJSZWdMaXZlbmVzcy5oIgorI2luY2x1ZGUgIkFpclRtcElubGluZXMuaCIKKyNpbmNsdWRlICJB
aXJUbXBNYXAuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKyNpbmNsdWRlIDx3dGYvUmFu
Z2UuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
CituYW1lc3BhY2UgeworCitOT19SRVRVUk5fRFVFX1RPX0NSQVNIIE5FVkVSX0lOTElORSB2b2lk
IGNyYXNoKCkKK3sKKyAgICBDUkFTSCgpOworfQorCisjdW5kZWYgUkVMRUFTRV9BU1NFUlQKKyNk
ZWZpbmUgUkVMRUFTRV9BU1NFUlQoYXNzZXJ0aW9uKSBkbyB7IFwKKyAgICBpZiAoIShhc3NlcnRp
b24pKSB7IFwKKyAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShfX0ZJTEVfXywgX19M
SU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICNhc3NlcnRpb24pOyBcCisgICAgICAgIGNyYXNo
KCk7IFwKKyAgICB9IFwKK30gd2hpbGUgKDApCisKK2Jvb2wgdmVyYm9zZSgpIHsgcmV0dXJuIE9w
dGlvbnM6OmFpckxpbmVhclNjYW5WZXJib3NlKCk7IH0KKworLy8gUGhhc2UgY29uc3RhbnRzIHdl
IHVzZSBmb3IgdGhlIFBoYXNlSW5zZXJ0aW9uU2V0LgorY29uc3QgdW5zaWduZWQgZmlyc3RQaGFz
ZSA9IDA7Citjb25zdCB1bnNpZ25lZCBzZWNvbmRQaGFzZSA9IDE7CisKK3R5cGVkZWYgUmFuZ2U8
c2l6ZV90PiBJbnRlcnZhbDsKKworc3RydWN0IFRtcERhdGEgeworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KCJ7aW50ZXJ2YWwg
PSAiLCBpbnRlcnZhbCwgIiwgc3BpbGxlZCA9ICIsIHBvaW50ZXJEdW1wKHNwaWxsZWQpLCAiLCBh
c3NpZ25lZCA9ICIsIGFzc2lnbmVkLCAiLCBpc1Vuc3BpbGxhYmxlID0gIiwgaXNVbnNwaWxsYWJs
ZSwgIiwgcG9zc2libGVSZWdzID0gIiwgcG9zc2libGVSZWdzLCAiLCBkaWRCdWlsZFBvc3NpYmxl
UmVncyA9ICIsIGRpZEJ1aWxkUG9zc2libGVSZWdzLCAifSIpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHZhbGlkYXRlKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEoc3BpbGxlZCAm
JiBhc3NpZ25lZCkpOworICAgIH0KKyAgICAKKyAgICBJbnRlcnZhbCBpbnRlcnZhbDsKKyAgICBT
dGFja1Nsb3QqIHNwaWxsZWQgeyBudWxscHRyIH07CisgICAgUmVnaXN0ZXJTZXQgcG9zc2libGVS
ZWdzOworICAgIFJlZyBhc3NpZ25lZDsKKyAgICBib29sIGlzVW5zcGlsbGFibGUgeyBmYWxzZSB9
OworICAgIGJvb2wgZGlkQnVpbGRQb3NzaWJsZVJlZ3MgeyBmYWxzZSB9OworfTsKKworc3RydWN0
IENsb2JiZXIgeworICAgIENsb2JiZXIoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQ2xvYmJl
cihzaXplX3QgaW5kZXgsIFJlZ2lzdGVyU2V0IHJlZ3MpCisgICAgICAgIDogaW5kZXgoaW5kZXgp
CisgICAgICAgICwgcmVncyhyZWdzKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBvdXQucHJpbnQoaW5kZXgs
ICI6IiwgcmVncyk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBpbmRleCB7IDAgfTsKKyAgICBS
ZWdpc3RlclNldCByZWdzOworfTsKKworY2xhc3MgTGluZWFyU2NhbiB7CitwdWJsaWM6CisgICAg
TGluZWFyU2NhbihDb2RlJiBjb2RlKQorICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICAs
IG1fc3RhcnRJbmRleChjb2RlLnNpemUoKSkKKyAgICAgICAgLCBtX21hcChjb2RlKQorICAgICAg
ICAsIG1faW5zZXJ0aW9uU2V0cyhjb2RlLnNpemUoKSkKKyAgICB7CisgICAgfQorICAgIAorICAg
IHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIGJ1aWxkUmVnaXN0ZXJTZXQoKTsKKyAgICAgICAg
YnVpbGRJbmRpY2VzKCk7CisgICAgICAgIGJ1aWxkSW50ZXJ2YWxzKCk7CisgICAgICAgIGlmIChz
aG91bGRTcGlsbEV2ZXJ5dGhpbmcoKSkgeworICAgICAgICAgICAgc3BpbGxFdmVyeXRoaW5nKCk7
CisgICAgICAgICAgICBlbWl0U3BpbGxDb2RlKCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICg7
OykgeworICAgICAgICAgICAgcHJlcGFyZUludGVydmFscygpOworICAgICAgICAgICAgbV9kaWRT
cGlsbCA9IGZhbHNlOworICAgICAgICAgICAgZm9yRWFjaEJhbmsoCisgICAgICAgICAgICAgICAg
WyZdIChCYW5rIGJhbmspIHsKKyAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdFNjYW4oYmFuayk7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAoIW1fZGlkU3BpbGwpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBlbWl0U3BpbGxDb2RlKCk7CisgICAgICAg
IH0KKyAgICAgICAgaW5zZXJ0U3BpbGxDb2RlKCk7CisgICAgICAgIGFzc2lnblJlZ2lzdGVycygp
OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBidWlsZFJlZ2lzdGVyU2V0KCkKKyAg
ICB7CisgICAgICAgIGZvckVhY2hCYW5rKAorICAgICAgICAgICAgWyZdIChCYW5rIGJhbmspIHsK
KyAgICAgICAgICAgICAgICBtX3JlZ2lzdGVyc1tiYW5rXSA9IG1fY29kZS5yZWdzSW5Qcmlvcml0
eU9yZGVyKGJhbmspOworICAgICAgICAgICAgICAgIG1fcmVnaXN0ZXJTZXRbYmFua10uc2V0QWxs
KG1fcmVnaXN0ZXJzW2JhbmtdKTsKKyAgICAgICAgICAgICAgICBtX3VuaWZpZWRSZWdpc3RlclNl
dC5tZXJnZShtX3JlZ2lzdGVyU2V0W2JhbmtdKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKwor
ICAgIHZvaWQgYnVpbGRJbmRpY2VzKCkKKyAgICB7CisgICAgICAgIHNpemVfdCBpbmRleCA9IDA7
CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAg
IG1fc3RhcnRJbmRleFtibG9ja10gPSBpbmRleDsKKyAgICAgICAgICAgIGluZGV4ICs9IGJsb2Nr
LT5zaXplKCkgKiAyOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHNpemVfdCBpbmRleE9m
SGVhZChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N0YXJ0SW5k
ZXhbYmxvY2tdOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXhPZlRhaWwoQmFzaWNCbG9j
ayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gaW5kZXhPZkhlYWQoYmxvY2spICsgYmxv
Y2stPnNpemUoKSAqIDI7CisgICAgfQorICAgIAorICAgIEludGVydmFsIGludGVydmFsKHNpemVf
dCBpbmRleE9mRWFybHksIEFyZzo6VGltaW5nIHRpbWluZykKKyAgICB7CisgICAgICAgIHN3aXRj
aCAodGltaW5nKSB7CisgICAgICAgIGNhc2UgQXJnOjpPbmx5RWFybHk6CisgICAgICAgICAgICBy
ZXR1cm4gSW50ZXJ2YWwoaW5kZXhPZkVhcmx5KTsKKyAgICAgICAgY2FzZSBBcmc6Ok9ubHlMYXRl
OgorICAgICAgICAgICAgcmV0dXJuIEludGVydmFsKGluZGV4T2ZFYXJseSArIDEpOworICAgICAg
ICBjYXNlIEFyZzo6RWFybHlBbmRMYXRlOgorICAgICAgICAgICAgcmV0dXJuIEludGVydmFsKGlu
ZGV4T2ZFYXJseSwgaW5kZXhPZkVhcmx5ICsgMik7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBJbnRlcnZhbCgpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGJ1aWxkSW50ZXJ2YWxzKCkKKyAgICB7CisgICAgICAgIFVuaWZpZWRUbXBMaXZl
bmVzcyBsaXZlbmVzcyhtX2NvZGUpOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fY29kZSkgeworICAgICAgICAgICAgc2l6ZV90IGluZGV4T2ZIZWFkID0gdGhp
cy0+aW5kZXhPZkhlYWQoYmxvY2spOworICAgICAgICAgICAgc2l6ZV90IGluZGV4T2ZUYWlsID0g
dGhpcy0+aW5kZXhPZlRhaWwoYmxvY2spOworICAgICAgICAgICAgaWYgKHZlcmJvc2UoKSkgewor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkF0IGJsb2NrICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwg
IlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICBpbmRleE9mSGVhZCA9ICIsIGluZGV4
T2ZIZWFkLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIGlkbmV4T2ZUYWlsID0g
IiwgaW5kZXhPZlRhaWwsICJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChU
bXAgdG1wIDogbGl2ZW5lc3MubGl2ZUF0SGVhZChibG9jaykpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIXRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICBtX21hcFt0bXBdLmludGVydmFs
IHw9IEludGVydmFsKGluZGV4T2ZIZWFkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZv
ciAoVG1wIHRtcCA6IGxpdmVuZXNzLmxpdmVBdFRhaWwoYmxvY2spKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCF0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9tYXBbdG1wXS5pbnRl
cnZhbCB8PSBJbnRlcnZhbChpbmRleE9mVGFpbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwg
YmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBJbnN0JiBpbnN0
ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICAgICAgc2l6ZV90IGluZGV4T2ZF
YXJseSA9IGluZGV4T2ZIZWFkICsgaW5zdEluZGV4ICogMjsKKyAgICAgICAgICAgICAgICBpbnN0
LmZvckVhY2hUbXAoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9s
ZSByb2xlLCBCYW5rLCBXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5p
c1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fbWFwW3RtcF0uaW50ZXJ2YWwgfD0gaW50ZXJ2YWwoaW5kZXhPZkVhcmx5
LCBBcmc6OnRpbWluZyhyb2xlKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBSZWdMaXZlbmVzczo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZl
bmVzcywgYmxvY2spOworICAgICAgICAgICAgCisgICAgICAgICAgICBhdXRvIHJlY29yZCA9IFsm
XSAodW5zaWduZWQgaW5zdEluZGV4KSB7CisgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcmVn
cyA9IGxvY2FsQ2FsYy5saXZlKCk7CisgICAgICAgICAgICAgICAgaWYgKEluc3QqIHByZXYgPSBi
bG9jay0+Z2V0KGluc3RJbmRleCAtIDEpKSB7CisgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy
U2V0IHByZXZSZWdzID0gcmVnczsKKyAgICAgICAgICAgICAgICAgICAgcHJldi0+Zm9yRWFjaDxS
ZWc+KAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChSZWcmIHJlZywgQXJnOjpSb2xlIHJv
bGUsIEJhbmssIFdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6
aXNMYXRlRGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2UmVn
cy5hZGQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
ICAgICBpZiAocHJldi0+a2luZC5vcGNvZGUgPT0gUGF0Y2gpCisgICAgICAgICAgICAgICAgICAg
ICAgICBwcmV2UmVncy5tZXJnZShwcmV2LT5leHRyYUNsb2JiZXJlZFJlZ3MoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHByZXZSZWdzLmZpbHRlcihtX3VuaWZpZWRSZWdpc3RlclNldCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghcHJldlJlZ3MuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgbV9jbG9iYmVycy5hcHBlbmQoQ2xvYmJlcihpbmRleE9mSGVhZCArIGluc3RJbmRl
eCAqIDIgLSAxLCBwcmV2UmVncykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoSW5zdCogbmV4dCA9IGJsb2NrLT5nZXQoaW5zdEluZGV4KSkgeworICAgICAgICAgICAg
ICAgICAgICBSZWdpc3RlclNldCBuZXh0UmVncyA9IHJlZ3M7CisgICAgICAgICAgICAgICAgICAg
IG5leHQtPmZvckVhY2g8UmVnPigKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoUmVnJiBy
ZWcsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChBcmc6OmlzRWFybHlEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5leHRSZWdzLmFkZChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0LT5raW5kLm9wY29kZSA9PSBQYXRjaCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5leHRSZWdzLm1lcmdlKG5leHQtPmV4dHJhRWFybHlDbG9i
YmVyZWRSZWdzKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHRSZWdzLmlzRW1wdHko
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY2xvYmJlcnMuYXBwZW5kKENsb2JiZXIoaW5k
ZXhPZkhlYWQgKyBpbnN0SW5kZXggKiAyLCBuZXh0UmVncykpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlY29yZChibG9jay0+
c2l6ZSgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNp
emUoKTsgaW5zdEluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUo
aW5zdEluZGV4KTsKKyAgICAgICAgICAgICAgICByZWNvcmQoaW5zdEluZGV4KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RkOjpzb3J0KAorICAgICAgICAg
ICAgbV9jbG9iYmVycy5iZWdpbigpLCBtX2Nsb2JiZXJzLmVuZCgpLAorICAgICAgICAgICAgW10g
KENsb2JiZXImIGEsIENsb2JiZXImIGIpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVy
biBhLmluZGV4IDwgYi5pbmRleDsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAg
aWYgKHZlcmJvc2UoKSkgeworICAgICAgICAgICAgZGF0YUxvZygiSW50ZXJ2YWxzOlxuIik7Cisg
ICAgICAgICAgICBtX2NvZGUuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICBbJl0gKFRtcCB0
bXApIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIHRtcCwgIjogIiwgbV9t
YXBbdG1wXSwgIlxuIik7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgYm9vbCBzaG91bGRTcGlsbEV2ZXJ5dGhpbmcoKQorICAgIHsKKyAgICAgICAgaWYg
KCFPcHRpb25zOjphaXJMaW5lYXJTY2FuU3BpbGxzRXZlcnl0aGluZygpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8gWW91J3JlIG1lYW50IHRvIGhhY2sg
dGhpcyBzbyB0aGF0IHlvdSBzZWxlY3RpdmVseSBzcGlsbCBldmVyeXRoaW5nIGRlcGVuZGluZyBv
biByZWFzb25zLgorICAgICAgICAvLyBUaGF0J3Mgc3VwZXIgdXNlZnVsIGZvciBkZWJ1Z2dpbmcu
CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BpbGxFdmVy
eXRoaW5nKCkKKyAgICB7CisgICAgICAgIG1fY29kZS5mb3JFYWNoVG1wKAorICAgICAgICAgICAg
WyZdIChUbXAgdG1wKSB7CisgICAgICAgICAgICAgICAgc3BpbGwodG1wKTsKKyAgICAgICAgICAg
IH0pOworICAgIH0KKyAgICAKKyAgICB2b2lkIHByZXBhcmVJbnRlcnZhbHMoKQorICAgIHsKKyAg
ICAgICAgbV90bXBzLnJlc2l6ZSgwKTsKKyAgICAgICAgCisgICAgICAgIG1fY29kZS5mb3JFYWNo
VG1wKAorICAgICAgICAgICAgWyZdIChUbXAgdG1wKSB7CisgICAgICAgICAgICAgICAgVG1wRGF0
YSYgZGF0YSA9IG1fbWFwW3RtcF07CisgICAgICAgICAgICAgICAgaWYgKGRhdGEuc3BpbGxlZCkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGRhdGEuYXNzaWduZWQgPSBSZWcoKTsKKyAgICAgICAgICAgICAgICBtX3RtcHMuYXBw
ZW5kKHRtcCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHN0ZDo6c29ydCgK
KyAgICAgICAgICAgIG1fdG1wcy5iZWdpbigpLCBtX3RtcHMuZW5kKCksCisgICAgICAgICAgICBb
Jl0gKFRtcCYgYSwgVG1wJiBiKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fbWFwW2FdLmlu
dGVydmFsLmJlZ2luKCkgPCBtX21hcFtiXS5pbnRlcnZhbC5iZWdpbigpOworICAgICAgICAgICAg
fSk7CisgICAgICAgIAorICAgICAgICBpZiAodmVyYm9zZSgpKSB7CisgICAgICAgICAgICBkYXRh
TG9nKCJUbXBzOiAiLCBsaXN0RHVtcChtX3RtcHMpLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFM
b2coIkNsb2JiZXJzOiAiLCBsaXN0RHVtcChtX2Nsb2JiZXJzKSwgIlxuIik7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgVG1wIGFkZFNwaWxsVG1wV2l0aEludGVydmFsKEJhbmsgYmFuaywg
SW50ZXJ2YWwgaW50ZXJ2YWwpCisgICAgeworICAgICAgICBUbXBEYXRhIGRhdGE7CisgICAgICAg
IGRhdGEuaW50ZXJ2YWwgPSBpbnRlcnZhbDsKKyAgICAgICAgZGF0YS5pc1Vuc3BpbGxhYmxlID0g
dHJ1ZTsKKyAgICAgICAgCisgICAgICAgIFRtcCB0bXAgPSBtX2NvZGUubmV3VG1wKGJhbmspOwor
ICAgICAgICBtX21hcC5hcHBlbmQodG1wLCBkYXRhKTsKKyAgICAgICAgcmV0dXJuIHRtcDsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhdHRlbXB0U2NhbihCYW5rIGJhbmspCisgICAgeworICAgICAg
ICAvLyBUaGlzIGlzIG1vZGVsZWQgYWZ0ZXIgTGluZWFyU2NhblJlZ2lzdGVyQWxsb2NhdGlvbiBp
biBGaWcuIDEgaW4KKyAgICAgICAgLy8gaHR0cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lk
PTMzMDI1MC4KKworICAgICAgICBtX2FjdGl2ZS5jbGVhcigpOworICAgICAgICBtX2FjdGl2ZVJl
Z3MgPSBSZWdpc3RlclNldCgpOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IGNsb2JiZXJJbmRl
eCA9IDA7CisgICAgICAgIGZvciAoVG1wJiB0bXAgOiBtX3RtcHMpIHsKKyAgICAgICAgICAgIGlm
ICh0bXAuYmFuaygpICE9IGJhbmspCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKKyAgICAgICAg
ICAgIHNpemVfdCBpbmRleCA9IGVudHJ5LmludGVydmFsLmJlZ2luKCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmICh2ZXJib3NlKCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJJ
bmRleCAjIiwgaW5kZXgsICI6ICIsIHRtcCwgIlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAiLCB0bXAsICI6ICIsIGVudHJ5LCAiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgIGNsb2JiZXJJbmRleCA9ICIsIGNsb2JiZXJJbmRleCwgIlxuIik7CisgICAgICAgICAgICAg
ICAgLy8gVGhpcyBjb3VsZCBiZSBzbyBtdWNoIGZhc3Rlci4KKyAgICAgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fY29kZVswXTsKKyAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIGNhbmRpZGF0ZUJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICht
X3N0YXJ0SW5kZXhbY2FuZGlkYXRlQmxvY2tdID4gaW5kZXgpCisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2sgPSBjYW5kaWRhdGVCbG9jazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5zdEluZGV4ID0g
KGluZGV4IC0gbV9zdGFydEluZGV4W2Jsb2NrXSArIDEpIC8gMjsKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgIEF0OiAiLCBwb2ludGVyRHVtcChibG9jayksICIsIGluc3RJbmRleCA9ICIsIGlu
c3RJbmRleCwgIlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIFByZXY6ICIsIHBv
aW50ZXJEdW1wKGJsb2NrLT5nZXQoaW5zdEluZGV4IC0gMSkpLCAiXG4iKTsKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgTmV4dDogIiwgcG9pbnRlckR1bXAoYmxvY2stPmdldChpbnN0SW5k
ZXgpKSwgIlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICBBY3RpdmU6XG4iKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBtX2FjdGl2ZSkKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgICIsIHRtcCwgIjogIiwgbV9tYXBbdG1wXSwgIlxuIik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgRXhwaXJlT2xkSW50
ZXJ2YWxzIGluIEZpZy4gMS4KKyAgICAgICAgICAgIHdoaWxlICghbV9hY3RpdmUuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICAgICAgVG1wIHRtcCA9IG1fYWN0aXZlLmZpcnN0KCk7CisgICAgICAg
ICAgICAgICAgVG1wRGF0YSYgZW50cnkgPSBtX21hcFt0bXBdOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGJvb2wgZXhwaXJlZCA9IGVudHJ5LmludGVydmFsLmVuZCgpIDw9IGlu
ZGV4OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghZXhwaXJlZCkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgbV9hY3RpdmUucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgICAgICAgICBtX2FjdGl2ZVJlZ3Mu
cmVtb3ZlKGVudHJ5LmFzc2lnbmVkKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
SWYgbmVjZXNzYXJ5LCBjb21wdXRlIHRoZSBzZXQgb2YgcmVnaXN0ZXJzIHRoYXQgdGhpcyB0bXAg
Y291bGQgZXZlbiB1c2UuIFRoaXMgaXMgbm90CisgICAgICAgICAgICAvLyBwYXJ0IG9mIEZpZy4g
MSwgYnV0IGl0J3MgYSB0ZWNobmlxdWUgdGhhdCB0aGUgYXV0aG9ycyBjbGFpbSB0byBoYXZlIGlt
cGxlbWVudGVkIGluIG9uZSBvZgorICAgICAgICAgICAgLy8gdGhlaXIgdHdvIGltcGxlbWVudGF0
aW9ucy4gVGhlcmUgbWF5IGJlIG90aGVyIG1vcmUgZWZmaWNpZW50IHdheXMgdG8gZG8gdGhpcywg
YnV0IHRoaXMKKyAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIGdldHMgc29tZSBwZXJmIHdp
bnMgZnJvbSBwaWdneS1iYWNraW5nIHRoaXMgY2FsY3VsYXRpb24gaW4gdGhlIHNjYW4uCisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBkaWRCdWlsZCBmbGFnIHN0
aWNrcyB0aHJvdWdoIHNwaWxsaW5nLiBTcGlsbGluZyBkb2Vzbid0IGNoYW5nZSB0aGUKKyAgICAg
ICAgICAgIC8vIGludGVyZmVyZW5jZSBzaXR1YXRpb24uCisgICAgICAgICAgICAvLworICAgICAg
ICAgICAgLy8gTm90ZSB0aGF0IHdlIGNvdWxkIHNob3J0LWNpcmN1aXQgdGhpcyBpZiB3ZSdyZSBk
ZWFsaW5nIHdpdGggYSBzcGlsbGFibGUgdG1wLCB0aGVyZSBhcmUgbm8KKyAgICAgICAgICAgIC8v
IGZyZWUgcmVnaXN0ZXJzLCBhbmQgdGhpcyByZWdpc3RlcidzIGludGVydmFsIGVuZHMgYWZ0ZXIg
dGhlIG9uZSBvbiB0aGUgdG9wIG9mIHRoZSBhY3RpdmUKKyAgICAgICAgICAgIC8vIHN0YWNrLgor
ICAgICAgICAgICAgaWYgKCFlbnRyeS5kaWRCdWlsZFBvc3NpYmxlUmVncykgeworICAgICAgICAg
ICAgICAgIC8vIEFkdmFuY2UgdGhlIGNsb2JiZXIgaW5kZXggdW50aWwgaXQncyBhdCBhIGNsb2Ji
ZXIgdGhhdCBpcyByZWxldmFudCB0byB1cy4KKyAgICAgICAgICAgICAgICB3aGlsZSAoY2xvYmJl
ckluZGV4IDwgbV9jbG9iYmVycy5zaXplKCkgJiYgbV9jbG9iYmVyc1tjbG9iYmVySW5kZXhdLmlu
ZGV4IDwgaW5kZXgpCisgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJJbmRleCsrOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHBvc3NpYmxlUmVncyA9IG1f
cmVnaXN0ZXJTZXRbYmFua107CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGNsb2Ji
ZXJJbmRleDsgaSA8IG1fY2xvYmJlcnMuc2l6ZSgpICYmIG1fY2xvYmJlcnNbaV0uaW5kZXggPCBl
bnRyeS5pbnRlcnZhbC5lbmQoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZVJl
Z3MuZXhjbHVkZShtX2Nsb2JiZXJzW2ldLnJlZ3MpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGVudHJ5LnBvc3NpYmxlUmVncyA9IHBvc3NpYmxlUmVnczsKKyAgICAgICAgICAg
ICAgICBlbnRyeS5kaWRCdWlsZFBvc3NpYmxlUmVncyA9IHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKCkpCisgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICBQb3NzaWJsZSByZWdzOiAiLCBlbnRyeS5wb3NzaWJsZVJlZ3MsICJcbiIpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGaW5kIGEgZnJlZSByZWdpc3RlciB0aGF0IHdl
IGFyZSBhbGxvd2VkIHRvIHVzZS4KKyAgICAgICAgICAgIGlmIChtX2FjdGl2ZS5zaXplKCkgIT0g
bV9yZWdpc3RlcnNbYmFua10uc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgYm9vbCBkaWRBc3Np
Z24gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBtX3JlZ2lzdGVyc1ti
YW5rXSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ291bGQgZG8gcHJpb3JpdHkg
Y29sb3JpbmcgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDMwNAorICAgICAgICAgICAgICAgICAgICBpZiAoIW1f
YWN0aXZlUmVncy5jb250YWlucyhyZWcpICYmIGVudHJ5LnBvc3NpYmxlUmVncy5jb250YWlucyhy
ZWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ24odG1wLCByZWcpOworICAgICAg
ICAgICAgICAgICAgICAgICAgZGlkQXNzaWduID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChkaWRBc3NpZ24pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIGlzIFNw
aWxsQXRJbnRlcnZhbCBpbiBGaWcuIDEsIGJ1dCBtb2RpZmllZCB0byBoYW5kbGUgY2xvYmJlcnMu
CisgICAgICAgICAgICBUbXAgc3BpbGxUbXAgPSBtX2FjdGl2ZS50YWtlTGFzdCgKKyAgICAgICAg
ICAgICAgICBbJl0gKFRtcCBzcGlsbENhbmRpZGF0ZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlbnRyeS5wb3NzaWJsZVJlZ3MuY29udGFpbnMobV9tYXBbc3BpbGxDYW5k
aWRhdGVdLmFzc2lnbmVkKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmICgh
c3BpbGxUbXApIHsKKyAgICAgICAgICAgICAgICBzcGlsbCh0bXApOworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVG1wRGF0YSYgc3BpbGxFbnRy
eSA9IG1fbWFwW3NwaWxsVG1wXTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNwaWxsRW50
cnkuYXNzaWduZWQpOworICAgICAgICAgICAgaWYgKHNwaWxsRW50cnkuaXNVbnNwaWxsYWJsZSB8
fAorICAgICAgICAgICAgICAgICghZW50cnkuaXNVbnNwaWxsYWJsZSAmJiBzcGlsbEVudHJ5Lmlu
dGVydmFsLmVuZCgpIDw9IGVudHJ5LmludGVydmFsLmVuZCgpKSkgeworICAgICAgICAgICAgICAg
IHNwaWxsKHRtcCk7CisgICAgICAgICAgICAgICAgYWRkVG9BY3RpdmUoc3BpbGxUbXApOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBhc3NpZ24odG1wLCBzcGlsbEVudHJ5LmFzc2lnbmVkKTsKKyAgICAgICAgICAgIHNw
aWxsKHNwaWxsVG1wKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZFRvQWN0
aXZlKFRtcCB0bXApCisgICAgeworICAgICAgICBpZiAobV9tYXBbdG1wXS5pc1Vuc3BpbGxhYmxl
KSB7CisgICAgICAgICAgICBtX2FjdGl2ZS5wcmVwZW5kKHRtcCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fYWN0aXZlLmFwcGVuZEFuZEJ1YmJs
ZSgKKyAgICAgICAgICAgIHRtcCwKKyAgICAgICAgICAgIFsmXSAoVG1wIG90aGVyVG1wKSAtPiBi
b29sIHsKKyAgICAgICAgICAgICAgICBUbXBEYXRhJiBvdGhlckVudHJ5ID0gbV9tYXBbb3RoZXJU
bXBdOworICAgICAgICAgICAgICAgIGlmIChvdGhlckVudHJ5LmlzVW5zcGlsbGFibGUpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9t
YXBbb3RoZXJUbXBdLmludGVydmFsLmVuZCgpID4gbV9tYXBbdG1wXS5pbnRlcnZhbC5lbmQoKTsK
KyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFzc2lnbihUbXAgdG1wLCBS
ZWcgcmVnKQorICAgIHsKKyAgICAgICAgVG1wRGF0YSYgZW50cnkgPSBtX21hcFt0bXBdOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghZW50cnkuc3BpbGxlZCk7CisgICAgICAgIGVudHJ5LmFzc2ln
bmVkID0gcmVnOworICAgICAgICBtX2FjdGl2ZVJlZ3MuYWRkKHJlZyk7CisgICAgICAgIGFkZFRv
QWN0aXZlKHRtcCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BpbGwoVG1wIHRtcCkKKyAgICB7
CisgICAgICAgIFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIWVudHJ5LmlzVW5zcGlsbGFibGUpOworICAgICAgICBlbnRyeS5zcGlsbGVkID0gbV9j
b2RlLmFkZFN0YWNrU2xvdCg4LCBTdGFja1Nsb3RLaW5kOjpTcGlsbCk7CisgICAgICAgIGVudHJ5
LmFzc2lnbmVkID0gUmVnKCk7CisgICAgICAgIG1fZGlkU3BpbGwgPSB0cnVlOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGVtaXRTcGlsbENvZGUoKQorICAgIHsKKyAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fY29kZSkgeworICAgICAgICAgICAgc2l6ZV90IGluZGV4T2ZIZWFkID0g
dGhpcy0+aW5kZXhPZkhlYWQoYmxvY2spOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0
SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAg
ICAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbmRleE9mRWFybHkgPSBpbmRleE9mSGVhZCArIGluc3RJbmRleCAq
IDI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gRmlyc3QgdHJ5IHRvIHNw
aWxsIGRpcmVjdGx5LgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBp
bnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgQXJnJiBhcmcgPSBp
bnN0LmFyZ3NbaV07CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzVG1wKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFy
Zy5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgICAgIFN0YWNrU2xvdCogc3BpbGxlZCA9IG1fbWFwW2FyZy50bXAoKV0uc3BpbGxlZDsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFzcGlsbGVkKQorICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5zdC5hZG1pdHNTdGFjayhp
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAg
ICBhcmcgPSBBcmc6OnN0YWNrKHNwaWxsZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBGYWxsIGJhY2sgb24gdGhlIGhhcmQgd2F5Lgor
ICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICAgICAgWyZd
IChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEJhbmsgYmFuaywgV2lkdGgpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNwaWxsZWQg
PSBtX21hcFt0bXBdLnNwaWxsZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNwaWxs
ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICAgICAgT3Bjb2RlIG1vdmUgPSBiYW5rID09IEdQID8gTW92ZSA6IE1vdmVEb3VibGU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBhZGRTcGlsbFRtcFdpdGhJbnRlcnZhbChiYW5r
LCBpbnRlcnZhbChpbmRleE9mRWFybHksIEFyZzo6dGltaW5nKHJvbGUpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocm9sZSA9PSBBcmc6OlNjcmF0Y2gpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNB
bnlVc2Uocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXRz
W2Jsb2NrXS5pbnNlcnQoaW5zdEluZGV4LCBzZWNvbmRQaGFzZSwgbW92ZSwgaW5zdC5vcmlnaW4s
IEFyZzo6c3RhY2soc3BpbGxlZCksIHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0FueURlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldHNbYmxvY2tdLmluc2VydChpbnN0SW5kZXggKyAxLCBmaXJzdFBoYXNlLCBtb3ZlLCBp
bnN0Lm9yaWdpbiwgdG1wLCBBcmc6OnN0YWNrKHNwaWxsZWQpKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBp
bnNlcnRTcGlsbENvZGUoKQorICAgIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IG1fY29kZSkKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0c1tibG9ja10uZXhlY3V0ZShibG9j
ayk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXNzaWduUmVnaXN0ZXJzKCkKKyAgICB7CisgICAg
ICAgIGlmICh2ZXJib3NlKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkFib3V0IHRvIGFsbG9j
YXRlIHJlZ2lzdGVycy4gU3RhdGUgb2YgYWxsIHRtcHM6XG4iKTsKKyAgICAgICAgICAgIG1fY29k
ZS5mb3JFYWNoVG1wKAorICAgICAgICAgICAgICAgIFsmXSAoVG1wIHRtcCkgeworICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgdG1wLCAiOiAiLCBtX21hcFt0bXBdLCAiXG4iKTsK
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGRhdGFMb2coIklSOlxuIik7CisgICAg
ICAgICAgICBkYXRhTG9nKG1fY29kZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIGZvciAoSW5zdCYg
aW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKCkpCisgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIkF0OiAiLCBpbnN0LCAiXG4iKTsKKyAgICAgICAgICAgICAg
ICBpbnN0LmZvckVhY2hUbXBGYXN0KAorICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1w
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgICAgICBSZWcgcmVnID0gbV9tYXBbdG1wXS5hc3NpZ25lZDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghcmVnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiRmFpbGVkIHRvIGFsbG9jYXRlIHJlZyBmb3I6ICIsIHRtcCwgIlxuIik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9
IFRtcChyZWcpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgVmVjdG9yPFJlZz4gbV9y
ZWdpc3RlcnNbbnVtQmFua3NdOworICAgIFJlZ2lzdGVyU2V0IG1fcmVnaXN0ZXJTZXRbbnVtQmFu
a3NdOworICAgIFJlZ2lzdGVyU2V0IG1fdW5pZmllZFJlZ2lzdGVyU2V0OworICAgIEluZGV4TWFw
PEJhc2ljQmxvY2sqLCBzaXplX3Q+IG1fc3RhcnRJbmRleDsKKyAgICBUbXBNYXA8VG1wRGF0YT4g
bV9tYXA7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFBoYXNlSW5zZXJ0aW9uU2V0PiBtX2lu
c2VydGlvblNldHM7CisgICAgVmVjdG9yPENsb2JiZXI+IG1fY2xvYmJlcnM7IC8vIEFmdGVyIHdl
IGFsbG9jYXRlIHRoaXMsIHdlIGhhcHBpbHkgcG9pbnQgcG9pbnRlcnMgaW50byBpdC4KKyAgICBW
ZWN0b3I8VG1wPiBtX3RtcHM7CisgICAgRGVxdWU8VG1wPiBtX2FjdGl2ZTsKKyAgICBSZWdpc3Rl
clNldCBtX2FjdGl2ZVJlZ3M7CisgICAgYm9vbCBtX2RpZFNwaWxsIHsgZmFsc2UgfTsKK307CisK
K3ZvaWQgcnVuTGluZWFyU2NhbihDb2RlJiBjb2RlKQoreworICAgIGlmICh2ZXJib3NlKCkpCisg
ICAgICAgIGRhdGFMb2coIkFpciBiZWZvcmUgbGluZWFyIHNjYW46XG4iLCBjb2RlKTsKKyAgICBM
aW5lYXJTY2FuIGxpbmVhclNjYW4oY29kZSk7CisgICAgbGluZWFyU2Nhbi5ydW4oKTsKKyAgICBp
ZiAodmVyYm9zZSgpKQorICAgICAgICBkYXRhTG9nKCJBaXIgYWZ0ZXIgbGluZWFyIHNjYW46XG4i
LCBjb2RlKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgYWxsb2NhdGVS
ZWdpc3RlcnNCeUxpbmVhclNjYW4oQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNl
U2NvcGUoY29kZSwgImFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuIik7CisgICAgcGFkSW50
ZXJmZXJlbmNlKGNvZGUpOworICAgIHJ1bkxpbmVhclNjYW4oY29kZSk7CisgICAgZml4U3BpbGxz
QWZ0ZXJUZXJtaW5hbHMoY29kZSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdp
c3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5jcHAJKHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGlu
ZWFyU2Nhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEzICsyNCwxNSBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFy
U2Nhbi5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNj
YW4uaCIKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJBaXJBbGxvY2F0ZVN0YWNr
QnlHcmFwaENvbG9yaW5nLmgiCiAjaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgogI2luY2x1ZGUg
IkFpckNvZGUuaCIKICNpbmNsdWRlICJBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oIgorI2lu
Y2x1ZGUgIkFpckhhbmRsZUNhbGxlZVNhdmVzLmgiCiAjaW5jbHVkZSAiQWlyUGhhc2VJbnNlcnRp
b25TZXQuaCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxpdmVu
ZXNzLmgiCkBAIC04NCw2ICs4Niw3IEBAIHN0cnVjdCBUbXBEYXRhIHsKICAgICBSZWcgYXNzaWdu
ZWQ7CiAgICAgYm9vbCBpc1Vuc3BpbGxhYmxlIHsgZmFsc2UgfTsKICAgICBib29sIGRpZEJ1aWxk
UG9zc2libGVSZWdzIHsgZmFsc2UgfTsKKyAgICB1bnNpZ25lZCBzcGlsbEluZGV4IHsgMCB9Owog
fTsKIAogc3RydWN0IENsb2JiZXIgewpAQCAtMTE4LDYgKzEyMSw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICB2b2lkIHJ1bigpCiAgICAgeworICAgICAgICBwYWRJbnRlcmZlcmVuY2UobV9jb2RlKTsK
ICAgICAgICAgYnVpbGRSZWdpc3RlclNldCgpOwogICAgICAgICBidWlsZEluZGljZXMoKTsKICAg
ICAgICAgYnVpbGRJbnRlcnZhbHMoKTsKQEAgLTEyNiwxMSArMTMwLDExIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGVtaXRTcGlsbENvZGUoKTsKICAgICAgICAgfQogICAgICAgICBmb3IgKDs7KSB7
Ci0gICAgICAgICAgICBwcmVwYXJlSW50ZXJ2YWxzKCk7CisgICAgICAgICAgICBwcmVwYXJlSW50
ZXJ2YWxzRm9yU2NhbkZvclJlZ2lzdGVycygpOwogICAgICAgICAgICAgbV9kaWRTcGlsbCA9IGZh
bHNlOwogICAgICAgICAgICAgZm9yRWFjaEJhbmsoCiAgICAgICAgICAgICAgICAgWyZdIChCYW5r
IGJhbmspIHsKLSAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdFNjYW4oYmFuayk7CisgICAgICAg
ICAgICAgICAgICAgIGF0dGVtcHRTY2FuRm9yUmVnaXN0ZXJzKGJhbmspOwogICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgaWYgKCFtX2RpZFNwaWxsKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMTM4LDYgKzE0MiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgaW5z
ZXJ0U3BpbGxDb2RlKCk7CiAgICAgICAgIGFzc2lnblJlZ2lzdGVycygpOworICAgICAgICBmaXhT
cGlsbHNBZnRlclRlcm1pbmFscyhtX2NvZGUpOworCisgICAgICAgIGhhbmRsZUNhbGxlZVNhdmVz
KG1fY29kZSk7CisgICAgICAgIGFsbG9jYXRlRXNjYXBlZFN0YWNrU2xvdHMobV9jb2RlKTsKKyAg
ICAgICAgcHJlcGFyZUludGVydmFsc0ZvclNjYW5Gb3JTdGFjaygpOworICAgICAgICBzY2FuRm9y
U3RhY2soKTsKKyAgICAgICAgdXBkYXRlRnJhbWVTaXplQmFzZWRPblN0YWNrU2xvdHMobV9jb2Rl
KTsKKyAgICAgICAgbV9jb2RlLnNldFN0YWNrSXNBbGxvY2F0ZWQodHJ1ZSk7CiAgICAgfQogICAg
IAogcHJpdmF0ZToKQEAgLTI2Niw2ICsyNzgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IFsmXSAoVG1wIHRtcCkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgdG1w
LCAiOiAiLCBtX21hcFt0bXBdLCAiXG4iKTsKICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIGRhdGFMb2coIkNsb2JiZXJzOiAiLCBsaXN0RHVtcChtX2Nsb2JiZXJzKSwgIlxuIik7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0yODgsMTcgKzMwMSwzNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgfSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcHJlcGFyZUludGVydmFscygpCisg
ICAgdm9pZCBwcmVwYXJlSW50ZXJ2YWxzRm9yU2NhbkZvclJlZ2lzdGVycygpCisgICAgeworICAg
ICAgICBwcmVwYXJlSW50ZXJ2YWxzKAorICAgICAgICAgICAgWyZdIChUbXAsIFRtcERhdGEmIGRh
dGEpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIGlmIChkYXRhLnNwaWxsZWQpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBkYXRhLmFzc2lnbmVkID0gUmVnKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBwcmVwYXJlSW50ZXJ2YWxz
Rm9yU2NhbkZvclN0YWNrKCkKKyAgICB7CisgICAgICAgIHByZXBhcmVJbnRlcnZhbHMoCisgICAg
ICAgICAgICBbJl0gKFRtcCwgVG1wRGF0YSYgZGF0YSkgLT4gYm9vbCB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGRhdGEuc3BpbGxlZDsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBTZWxlY3RGdW5jPgorICAgIHZvaWQgcHJlcGFyZUludGVydmFs
cyhjb25zdCBTZWxlY3RGdW5jJiBzZWxlY3RGdW5jKQogICAgIHsKICAgICAgICAgbV90bXBzLnJl
c2l6ZSgwKTsKICAgICAgICAgCiAgICAgICAgIG1fY29kZS5mb3JFYWNoVG1wKAogICAgICAgICAg
ICAgWyZdIChUbXAgdG1wKSB7CiAgICAgICAgICAgICAgICAgVG1wRGF0YSYgZGF0YSA9IG1fbWFw
W3RtcF07Ci0gICAgICAgICAgICAgICAgaWYgKGRhdGEuc3BpbGxlZCkKKyAgICAgICAgICAgICAg
ICBpZiAoIXNlbGVjdEZ1bmModG1wLCBkYXRhKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGRhdGEuYXNzaWduZWQgPSBSZWco
KTsKICAgICAgICAgICAgICAgICBtX3RtcHMuYXBwZW5kKHRtcCk7CiAgICAgICAgICAgICB9KTsK
ICAgICAgICAgCkBAIC0zMDgsMTAgKzM0MSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
cmV0dXJuIG1fbWFwW2FdLmludGVydmFsLmJlZ2luKCkgPCBtX21hcFtiXS5pbnRlcnZhbC5iZWdp
bigpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIAotICAgICAgICBpZiAodmVyYm9zZSgpKSB7
CisgICAgICAgIGlmICh2ZXJib3NlKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJUbXBzOiAiLCBs
aXN0RHVtcChtX3RtcHMpLCAiXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2coIkNsb2JiZXJzOiAi
LCBsaXN0RHVtcChtX2Nsb2JiZXJzKSwgIlxuIik7Ci0gICAgICAgIH0KICAgICB9CiAgICAgCiAg
ICAgVG1wIGFkZFNwaWxsVG1wV2l0aEludGVydmFsKEJhbmsgYmFuaywgSW50ZXJ2YWwgaW50ZXJ2
YWwpCkBAIC0zMjUsNyArMzU2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRtcDsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBhdHRlbXB0U2NhbihCYW5rIGJhbmspCisgICAgdm9pZCBhdHRl
bXB0U2NhbkZvclJlZ2lzdGVycyhCYW5rIGJhbmspCiAgICAgewogICAgICAgICAvLyBUaGlzIGlz
IG1vZGVsZWQgYWZ0ZXIgTGluZWFyU2NhblJlZ2lzdGVyQWxsb2NhdGlvbiBpbiBGaWcuIDEgaW4K
ICAgICAgICAgLy8gaHR0cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTMzMDI1MC4KQEAg
LTUyMCw2ICs1NTEsNDUgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICB2
b2lkIHNjYW5Gb3JTdGFjaygpCisgICAgeworICAgICAgICAvLyBUaGlzIGlzIGxvb3NlbHkgbW9k
ZWxlZCBhZnRlciBMaW5lYXJTY2FuUmVnaXN0ZXJBbGxvY2F0aW9uIGluIEZpZy4gMSBpbgorICAg
ICAgICAvLyBodHRwOi8vZGwuYWNtLm9yZy9jaXRhdGlvbi5jZm0/aWQ9MzMwMjUwLgorCisgICAg
ICAgIG1fYWN0aXZlLmNsZWFyKCk7CisgICAgICAgIG1fdXNlZFNwaWxsU2xvdHMuY2xlYXJBbGwo
KTsKKyAgICAgICAgCisgICAgICAgIGZvciAoVG1wJiB0bXAgOiBtX3RtcHMpIHsKKyAgICAgICAg
ICAgIFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKKyAgICAgICAgICAgIGlmICghZW50cnku
c3BpbGxlZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc2l6ZV90IGluZGV4ID0gZW50cnkuaW50ZXJ2YWwuYmVnaW4oKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gVGhpcyBpcyBFeHBpcmVPbGRJbnRlcnZhbHMgaW4gRmlnLiAxLgor
ICAgICAgICAgICAgd2hpbGUgKCFtX2FjdGl2ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAg
ICBUbXAgdG1wID0gbV9hY3RpdmUuZmlyc3QoKTsKKyAgICAgICAgICAgICAgICBUbXBEYXRhJiBl
bnRyeSA9IG1fbWFwW3RtcF07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYm9v
bCBleHBpcmVkID0gZW50cnkuaW50ZXJ2YWwuZW5kKCkgPD0gaW5kZXg7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKCFleHBpcmVkKQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2FjdGl2ZS5yZW1vdmVG
aXJzdCgpOworICAgICAgICAgICAgICAgIG1fdXNlZFNwaWxsU2xvdHMuY2xlYXIoZW50cnkuc3Bp
bGxJbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGVudHJ5
LnNwaWxsSW5kZXggPSBtX3VzZWRTcGlsbFNsb3RzLmZpbmRCaXQoMCwgZmFsc2UpOworICAgICAg
ICAgICAgcHRyZGlmZl90IG9mZnNldCA9IC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG1fY29kZS5m
cmFtZVNpemUoKSkgLSBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KGVudHJ5LnNwaWxsSW5kZXgpICog
OCAtIDg7CisgICAgICAgICAgICBpZiAodmVyYm9zZSgpKQorICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgQXNzaWduaW5nIG9mZnNldCA9ICIsIG9mZnNldCwgIiB0byBzcGlsbCAiLCBwb2ludGVy
RHVtcChlbnRyeS5zcGlsbGVkKSwgIiBmb3IgIiwgdG1wLCAiXG4iKTsKKyAgICAgICAgICAgIGVu
dHJ5LnNwaWxsZWQtPnNldE9mZnNldEZyb21GUChvZmZzZXQpOworICAgICAgICAgICAgbV91c2Vk
U3BpbGxTbG90cy5zZXQoZW50cnkuc3BpbGxJbmRleCk7CisgICAgICAgICAgICBtX2FjdGl2ZS5h
cHBlbmQodG1wKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICB2b2lkIGluc2VydFNwaWxs
Q29kZSgpCiAgICAgewogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKQpA
QCAtNTY5LDExICs2MzksMTUgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8VG1wPiBtX3RtcHM7CiAg
ICAgRGVxdWU8VG1wPiBtX2FjdGl2ZTsKICAgICBSZWdpc3RlclNldCBtX2FjdGl2ZVJlZ3M7Cisg
ICAgQml0VmVjdG9yIG1fdXNlZFNwaWxsU2xvdHM7CiAgICAgYm9vbCBtX2RpZFNwaWxsIHsgZmFs
c2UgfTsKIH07CiAKLXZvaWQgcnVuTGluZWFyU2NhbihDb2RlJiBjb2RlKQorfSAvLyBhbm9ueW1v
dXMgbmFtZXNwYWNlCisKK3ZvaWQgYWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nh
bihDb2RlJiBjb2RlKQogeworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiYWxsb2Nh
dGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2NhbiIpOwogICAgIGlmICh2ZXJib3NlKCkpCiAg
ICAgICAgIGRhdGFMb2coIkFpciBiZWZvcmUgbGluZWFyIHNjYW46XG4iLCBjb2RlKTsKICAgICBM
aW5lYXJTY2FuIGxpbmVhclNjYW4oY29kZSk7CkBAIC01ODIsMTYgKzY1Niw2IEBAIHZvaWQgcnVu
TGluZWFyU2NhbihDb2RlJiBjb2RlKQogICAgICAgICBkYXRhTG9nKCJBaXIgYWZ0ZXIgbGluZWFy
IHNjYW46XG4iLCBjb2RlKTsKIH0KIAotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLXZvaWQg
YWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4oQ29kZSYgY29kZSkKLXsKLSAgICBQaGFzZVNj
b3BlIHBoYXNlU2NvcGUoY29kZSwgImFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuIik7Ci0g
ICAgcGFkSW50ZXJmZXJlbmNlKGNvZGUpOwotICAgIHJ1bkxpbmVhclNjYW4oY29kZSk7Ci0gICAg
Zml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoY29kZSk7Ci19Ci0KIH0gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNj
YW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9j
YXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uaAkocmV2aXNpb24gMjE1MjM4KQkoZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5l
YXJTY2FuLmg6MjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkNQVS5oIgor
I2luY2x1ZGUgIk9wdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIGltcGxlbWVudHMgdGhlIFBv
bGV0dG8gYW5kIFNhcmthciByZWdpc3RlciBhbGxvY2F0b3IgY2FsbGVkICJsaW5lYXIgc2NhbiI6
CisvLyBodHRwOi8vZGwuYWNtLm9yZy9jaXRhdGlvbi5jZm0/aWQ9MzMwMjUwCisvLworLy8gVGhp
cyBpcyBub3QgQWlyJ3MgcHJpbWFyeSByZWdpc3RlciBhbGxvY2F0b3IuIFdlIHVzZSBpdCBvbmx5
IHdoZW4gcnVubmluZyBhdCBvcHRMZXZlbDwyLiBUaGF0J3Mgbm90CisvLyB0aGUgZGVmYXVsdCBs
ZXZlbC4gVGhpcyByZWdpc3RlciBhbGxvY2F0b3IgaXMgb3B0aW1pemVkIHByaW1hcmlseSBmb3Ig
cnVubmluZyBxdWlja2x5LiBJdCdzIGV4cGVjdGVkCisvLyB0aGF0IGltcHJvdmVtZW50cyB0byB0
aGlzIHJlZ2lzdGVyIGFsbG9jYXRvciBzaG91bGQgZm9jdXMgb24gaW1wcm92aW5nIGl0cyBleGVj
dXRpb24gdGltZSB3aXRob3V0IG11Y2gKKy8vIHJlZ2FyZCBmb3IgdGhlIHF1YWxpdHkgb2YgZ2Vu
ZXJhdGVkIGNvZGUuIElmIHlvdSB3YW50IGdvb2QgY29kZSwgdXNlIGdyYXBoIGNvbG9yaW5nLgor
Ly8KKy8vIEZvciBBaXIncyBwcmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRvciwgc2VlIEFpckFsbG9j
YXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmh8Y3BwLgordm9pZCBhbGxvY2F0ZVJlZ2lzdGVy
c0J5TGluZWFyU2NhbihDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJz
QW5kU3RhY2tCeUxpbmVhclNjYW4uaAkocmV2aXNpb24gMjE1MjM4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2Fu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEzICszNywxNiBAQCBjbGFzcyBDb2RlOwogLy8gVGhp
cyBpbXBsZW1lbnRzIHRoZSBQb2xldHRvIGFuZCBTYXJrYXIgcmVnaXN0ZXIgYWxsb2NhdG9yIGNh
bGxlZCAibGluZWFyIHNjYW4iOgogLy8gaHR0cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lk
PTMzMDI1MAogLy8KLS8vIFRoaXMgaXMgbm90IEFpcidzIHByaW1hcnkgcmVnaXN0ZXIgYWxsb2Nh
dG9yLiBXZSB1c2UgaXQgb25seSB3aGVuIHJ1bm5pbmcgYXQgb3B0TGV2ZWw8Mi4gVGhhdCdzIG5v
dAotLy8gdGhlIGRlZmF1bHQgbGV2ZWwuIFRoaXMgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzIG9wdGlt
aXplZCBwcmltYXJpbHkgZm9yIHJ1bm5pbmcgcXVpY2tseS4gSXQncyBleHBlY3RlZAotLy8gdGhh
dCBpbXByb3ZlbWVudHMgdG8gdGhpcyByZWdpc3RlciBhbGxvY2F0b3Igc2hvdWxkIGZvY3VzIG9u
IGltcHJvdmluZyBpdHMgZXhlY3V0aW9uIHRpbWUgd2l0aG91dCBtdWNoCi0vLyByZWdhcmQgZm9y
IHRoZSBxdWFsaXR5IG9mIGdlbmVyYXRlZCBjb2RlLiBJZiB5b3Ugd2FudCBnb29kIGNvZGUsIHVz
ZSBncmFwaCBjb2xvcmluZy4KKy8vIFRoaXMgaXMgbm90IEFpcidzIHByaW1hcnkgcmVnaXN0ZXIg
YWxsb2NhdG9yLiBXZSB1c2UgaXQgb25seSB3aGVuIHJ1bm5pbmcgYXQgb3B0TGV2ZWw8Mi4KKy8v
IFRoYXQncyBub3QgdGhlIGRlZmF1bHQgbGV2ZWwuIFRoaXMgcmVnaXN0ZXIgYWxsb2NhdG9yIGlz
IG9wdGltaXplZCBwcmltYXJpbHkgZm9yIHJ1bm5pbmcKKy8vIHF1aWNrbHkuIEl0J3MgZXhwZWN0
ZWQgdGhhdCBpbXByb3ZlbWVudHMgdG8gdGhpcyByZWdpc3RlciBhbGxvY2F0b3Igc2hvdWxkIGZv
Y3VzIG9uIGltcHJvdmluZworLy8gaXRzIGV4ZWN1dGlvbiB0aW1lIHdpdGhvdXQgbXVjaCByZWdh
cmQgZm9yIHRoZSBxdWFsaXR5IG9mIGdlbmVyYXRlZCBjb2RlLiBJZiB5b3Ugd2FudCBnb29kCisv
LyBjb2RlLCB1c2UgZ3JhcGggY29sb3JpbmcuCiAvLwogLy8gRm9yIEFpcidzIHByaW1hcnkgcmVn
aXN0ZXIgYWxsb2NhdG9yLCBzZWUgQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3Jpbmcu
aHxjcHAuCi12b2lkIGFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuKENvZGUmKTsKKy8vCisv
LyBUaGlzIGFsc28gZG9lcyBzdGFjayBhbGxvY2F0aW9uIGFzIGFuIGFmdGVydGhvdWdodC4gSXQg
ZG9lcyBub3QgZG8gYW55IHNwaWxsIGNvYWxlc2NpbmcuCit2b2lkIGFsbG9jYXRlUmVnaXN0ZXJz
QW5kU3RhY2tCeUxpbmVhclNjYW4oQ29kZSYpOwogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVS
ZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCShyZXZpc2lv
biAyMTUyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVn
aXN0ZXJzQnlMaW5lYXJTY2FuLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDU5NyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgiCi0K
LSNpZiBFTkFCTEUoQjNfSklUKQotCi0jaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgotI2luY2x1
ZGUgIkFpckNvZGUuaCIKLSNpbmNsdWRlICJBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oIgot
I2luY2x1ZGUgIkFpclBoYXNlSW5zZXJ0aW9uU2V0LmgiCi0jaW5jbHVkZSAiQWlySW5zdElubGlu
ZXMuaCIKLSNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgotI2luY2x1ZGUgIkFpclBhZEludGVyZmVy
ZW5jZS5oIgotI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKLSNpbmNsdWRlICJBaXJSZWdMaXZl
bmVzcy5oIgotI2luY2x1ZGUgIkFpclRtcElubGluZXMuaCIKLSNpbmNsdWRlICJBaXJUbXBNYXAu
aCIKLSNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KLSNpbmNsdWRlIDx3dGYvUmFuZ2UuaD4KLQot
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewotCi1uYW1lc3Bh
Y2UgewotCi1OT19SRVRVUk5fRFVFX1RPX0NSQVNIIE5FVkVSX0lOTElORSB2b2lkIGNyYXNoKCkK
LXsKLSAgICBDUkFTSCgpOwotfQotCi0jdW5kZWYgUkVMRUFTRV9BU1NFUlQKLSNkZWZpbmUgUkVM
RUFTRV9BU1NFUlQoYXNzZXJ0aW9uKSBkbyB7IFwKLSAgICBpZiAoIShhc3NlcnRpb24pKSB7IFwK
LSAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShfX0ZJTEVfXywgX19MSU5FX18sIFdU
Rl9QUkVUVFlfRlVOQ1RJT04sICNhc3NlcnRpb24pOyBcCi0gICAgICAgIGNyYXNoKCk7IFwKLSAg
ICB9IFwKLX0gd2hpbGUgKDApCi0KLWJvb2wgdmVyYm9zZSgpIHsgcmV0dXJuIE9wdGlvbnM6OmFp
ckxpbmVhclNjYW5WZXJib3NlKCk7IH0KLQotLy8gUGhhc2UgY29uc3RhbnRzIHdlIHVzZSBmb3Ig
dGhlIFBoYXNlSW5zZXJ0aW9uU2V0LgotY29uc3QgdW5zaWduZWQgZmlyc3RQaGFzZSA9IDA7Ci1j
b25zdCB1bnNpZ25lZCBzZWNvbmRQaGFzZSA9IDE7Ci0KLXR5cGVkZWYgUmFuZ2U8c2l6ZV90PiBJ
bnRlcnZhbDsKLQotc3RydWN0IFRtcERhdGEgewotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAotICAgIHsKLSAgICAgICAgb3V0LnByaW50KCJ7aW50ZXJ2YWwgPSAiLCBpbnRl
cnZhbCwgIiwgc3BpbGxlZCA9ICIsIHBvaW50ZXJEdW1wKHNwaWxsZWQpLCAiLCBhc3NpZ25lZCA9
ICIsIGFzc2lnbmVkLCAiLCBpc1Vuc3BpbGxhYmxlID0gIiwgaXNVbnNwaWxsYWJsZSwgIiwgcG9z
c2libGVSZWdzID0gIiwgcG9zc2libGVSZWdzLCAiLCBkaWRCdWlsZFBvc3NpYmxlUmVncyA9ICIs
IGRpZEJ1aWxkUG9zc2libGVSZWdzLCAifSIpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHZhbGlk
YXRlKCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCEoc3BpbGxlZCAmJiBhc3NpZ25l
ZCkpOwotICAgIH0KLSAgICAKLSAgICBJbnRlcnZhbCBpbnRlcnZhbDsKLSAgICBTdGFja1Nsb3Qq
IHNwaWxsZWQgeyBudWxscHRyIH07Ci0gICAgUmVnaXN0ZXJTZXQgcG9zc2libGVSZWdzOwotICAg
IFJlZyBhc3NpZ25lZDsKLSAgICBib29sIGlzVW5zcGlsbGFibGUgeyBmYWxzZSB9OwotICAgIGJv
b2wgZGlkQnVpbGRQb3NzaWJsZVJlZ3MgeyBmYWxzZSB9OwotfTsKLQotc3RydWN0IENsb2JiZXIg
ewotICAgIENsb2JiZXIoKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgQ2xvYmJlcihzaXplX3Qg
aW5kZXgsIFJlZ2lzdGVyU2V0IHJlZ3MpCi0gICAgICAgIDogaW5kZXgoaW5kZXgpCi0gICAgICAg
ICwgcmVncyhyZWdzKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Ci0gICAgewotICAgICAgICBvdXQucHJpbnQoaW5kZXgsICI6IiwgcmVn
cyk7Ci0gICAgfQotICAgIAotICAgIHNpemVfdCBpbmRleCB7IDAgfTsKLSAgICBSZWdpc3RlclNl
dCByZWdzOwotfTsKLQotY2xhc3MgTGluZWFyU2NhbiB7Ci1wdWJsaWM6Ci0gICAgTGluZWFyU2Nh
bihDb2RlJiBjb2RlKQotICAgICAgICA6IG1fY29kZShjb2RlKQotICAgICAgICAsIG1fc3RhcnRJ
bmRleChjb2RlLnNpemUoKSkKLSAgICAgICAgLCBtX21hcChjb2RlKQotICAgICAgICAsIG1faW5z
ZXJ0aW9uU2V0cyhjb2RlLnNpemUoKSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHZvaWQgcnVu
KCkKLSAgICB7Ci0gICAgICAgIGJ1aWxkUmVnaXN0ZXJTZXQoKTsKLSAgICAgICAgYnVpbGRJbmRp
Y2VzKCk7Ci0gICAgICAgIGJ1aWxkSW50ZXJ2YWxzKCk7Ci0gICAgICAgIGlmIChzaG91bGRTcGls
bEV2ZXJ5dGhpbmcoKSkgewotICAgICAgICAgICAgc3BpbGxFdmVyeXRoaW5nKCk7Ci0gICAgICAg
ICAgICBlbWl0U3BpbGxDb2RlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICg7OykgewotICAg
ICAgICAgICAgcHJlcGFyZUludGVydmFscygpOwotICAgICAgICAgICAgbV9kaWRTcGlsbCA9IGZh
bHNlOwotICAgICAgICAgICAgZm9yRWFjaEJhbmsoCi0gICAgICAgICAgICAgICAgWyZdIChCYW5r
IGJhbmspIHsKLSAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdFNjYW4oYmFuayk7Ci0gICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICBpZiAoIW1fZGlkU3BpbGwpCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBlbWl0U3BpbGxDb2RlKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgaW5zZXJ0U3BpbGxDb2RlKCk7Ci0gICAgICAgIGFzc2lnblJlZ2lzdGVycygpOwotICAgIH0K
LSAgICAKLXByaXZhdGU6Ci0gICAgdm9pZCBidWlsZFJlZ2lzdGVyU2V0KCkKLSAgICB7Ci0gICAg
ICAgIGZvckVhY2hCYW5rKAotICAgICAgICAgICAgWyZdIChCYW5rIGJhbmspIHsKLSAgICAgICAg
ICAgICAgICBtX3JlZ2lzdGVyc1tiYW5rXSA9IG1fY29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKGJh
bmspOwotICAgICAgICAgICAgICAgIG1fcmVnaXN0ZXJTZXRbYmFua10uc2V0QWxsKG1fcmVnaXN0
ZXJzW2JhbmtdKTsKLSAgICAgICAgICAgICAgICBtX3VuaWZpZWRSZWdpc3RlclNldC5tZXJnZSht
X3JlZ2lzdGVyU2V0W2JhbmtdKTsKLSAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIHZvaWQg
YnVpbGRJbmRpY2VzKCkKLSAgICB7Ci0gICAgICAgIHNpemVfdCBpbmRleCA9IDA7Ci0gICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKLSAgICAgICAgICAgIG1fc3RhcnRJ
bmRleFtibG9ja10gPSBpbmRleDsKLSAgICAgICAgICAgIGluZGV4ICs9IGJsb2NrLT5zaXplKCkg
KiAyOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHNpemVfdCBpbmRleE9mSGVhZChCYXNp
Y0Jsb2NrKiBibG9jaykKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3N0YXJ0SW5kZXhbYmxvY2td
OwotICAgIH0KLSAgICAKLSAgICBzaXplX3QgaW5kZXhPZlRhaWwoQmFzaWNCbG9jayogYmxvY2sp
Ci0gICAgewotICAgICAgICByZXR1cm4gaW5kZXhPZkhlYWQoYmxvY2spICsgYmxvY2stPnNpemUo
KSAqIDI7Ci0gICAgfQotICAgIAotICAgIEludGVydmFsIGludGVydmFsKHNpemVfdCBpbmRleE9m
RWFybHksIEFyZzo6VGltaW5nIHRpbWluZykKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodGltaW5n
KSB7Ci0gICAgICAgIGNhc2UgQXJnOjpPbmx5RWFybHk6Ci0gICAgICAgICAgICByZXR1cm4gSW50
ZXJ2YWwoaW5kZXhPZkVhcmx5KTsKLSAgICAgICAgY2FzZSBBcmc6Ok9ubHlMYXRlOgotICAgICAg
ICAgICAgcmV0dXJuIEludGVydmFsKGluZGV4T2ZFYXJseSArIDEpOwotICAgICAgICBjYXNlIEFy
Zzo6RWFybHlBbmRMYXRlOgotICAgICAgICAgICAgcmV0dXJuIEludGVydmFsKGluZGV4T2ZFYXJs
eSwgaW5kZXhPZkVhcmx5ICsgMik7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybiBJbnRlcnZhbCgpOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IGJ1aWxkSW50ZXJ2YWxzKCkKLSAgICB7Ci0gICAgICAgIFVuaWZpZWRUbXBMaXZlbmVzcyBsaXZl
bmVzcyhtX2NvZGUpOwotICAgICAgICAKLSAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IG1fY29kZSkgewotICAgICAgICAgICAgc2l6ZV90IGluZGV4T2ZIZWFkID0gdGhpcy0+aW5kZXhP
ZkhlYWQoYmxvY2spOwotICAgICAgICAgICAgc2l6ZV90IGluZGV4T2ZUYWlsID0gdGhpcy0+aW5k
ZXhPZlRhaWwoYmxvY2spOwotICAgICAgICAgICAgaWYgKHZlcmJvc2UoKSkgewotICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkF0IGJsb2NrICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIlxuIik7Ci0g
ICAgICAgICAgICAgICAgZGF0YUxvZygiICBpbmRleE9mSGVhZCA9ICIsIGluZGV4T2ZIZWFkLCAi
XG4iKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIGlkbmV4T2ZUYWlsID0gIiwgaW5kZXhP
ZlRhaWwsICJcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChUbXAgdG1wIDog
bGl2ZW5lc3MubGl2ZUF0SGVhZChibG9jaykpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXRtcC5p
c1JlZygpKQotICAgICAgICAgICAgICAgICAgICBtX21hcFt0bXBdLmludGVydmFsIHw9IEludGVy
dmFsKGluZGV4T2ZIZWFkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoVG1wIHRt
cCA6IGxpdmVuZXNzLmxpdmVBdFRhaWwoYmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF0
bXAuaXNSZWcoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9tYXBbdG1wXS5pbnRlcnZhbCB8PSBJ
bnRlcnZhbChpbmRleE9mVGFpbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNp
emUoKTsgKytpbnN0SW5kZXgpIHsKLSAgICAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2st
PmF0KGluc3RJbmRleCk7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IGluZGV4T2ZFYXJseSA9IGlu
ZGV4T2ZIZWFkICsgaW5zdEluZGV4ICogMjsKLSAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hU
bXAoCi0gICAgICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBC
YW5rLCBXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fbWFwW3RtcF0uaW50ZXJ2YWwgfD0gaW50ZXJ2YWwoaW5kZXhPZkVhcmx5LCBBcmc6OnRp
bWluZyhyb2xlKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBSZWdMaXZlbmVzczo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxv
Y2spOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhdXRvIHJlY29yZCA9IFsmXSAodW5zaWdu
ZWQgaW5zdEluZGV4KSB7Ci0gICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcmVncyA9IGxvY2Fs
Q2FsYy5saXZlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKEluc3QqIHByZXYgPSBibG9jay0+Z2V0
KGluc3RJbmRleCAtIDEpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHByZXZS
ZWdzID0gcmVnczsKLSAgICAgICAgICAgICAgICAgICAgcHJldi0+Zm9yRWFjaDxSZWc+KAotICAg
ICAgICAgICAgICAgICAgICAgICAgWyZdIChSZWcmIHJlZywgQXJnOjpSb2xlIHJvbGUsIEJhbmss
IFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRlRGVm
KHJvbGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2UmVncy5hZGQocmVn
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBpZiAo
cHJldi0+a2luZC5vcGNvZGUgPT0gUGF0Y2gpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmV2
UmVncy5tZXJnZShwcmV2LT5leHRyYUNsb2JiZXJlZFJlZ3MoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHByZXZSZWdzLmZpbHRlcihtX3VuaWZpZWRSZWdpc3RlclNldCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghcHJldlJlZ3MuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
bV9jbG9iYmVycy5hcHBlbmQoQ2xvYmJlcihpbmRleE9mSGVhZCArIGluc3RJbmRleCAqIDIgLSAx
LCBwcmV2UmVncykpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoSW5z
dCogbmV4dCA9IGJsb2NrLT5nZXQoaW5zdEluZGV4KSkgewotICAgICAgICAgICAgICAgICAgICBS
ZWdpc3RlclNldCBuZXh0UmVncyA9IHJlZ3M7Ci0gICAgICAgICAgICAgICAgICAgIG5leHQtPmZv
ckVhY2g8UmVnPigKLSAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoUmVnJiByZWcsIEFyZzo6
Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChBcmc6OmlzRWFybHlEZWYocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5leHRSZWdzLmFkZChyZWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChuZXh0LT5raW5kLm9wY29kZSA9PSBQYXRjaCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG5leHRSZWdzLm1lcmdlKG5leHQtPmV4dHJhRWFybHlDbG9iYmVyZWRSZWdz
KCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHRSZWdzLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fY2xvYmJlcnMuYXBwZW5kKENsb2JiZXIoaW5kZXhPZkhlYWQg
KyBpbnN0SW5kZXggKiAyLCBuZXh0UmVncykpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJlY29yZChibG9jay0+c2l6ZSgpKTsK
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5z
dEluZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4
KTsKLSAgICAgICAgICAgICAgICByZWNvcmQoaW5zdEluZGV4KTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgc3RkOjpzb3J0KAotICAgICAgICAgICAgbV9jbG9i
YmVycy5iZWdpbigpLCBtX2Nsb2JiZXJzLmVuZCgpLAotICAgICAgICAgICAgW10gKENsb2JiZXIm
IGEsIENsb2JiZXImIGIpIC0+IGJvb2wgewotICAgICAgICAgICAgICAgIHJldHVybiBhLmluZGV4
IDwgYi5pbmRleDsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAKLSAgICAgICAgaWYgKHZlcmJv
c2UoKSkgewotICAgICAgICAgICAgZGF0YUxvZygiSW50ZXJ2YWxzOlxuIik7Ci0gICAgICAgICAg
ICBtX2NvZGUuZm9yRWFjaFRtcCgKLSAgICAgICAgICAgICAgICBbJl0gKFRtcCB0bXApIHsKLSAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIHRtcCwgIjogIiwgbV9tYXBbdG1wXSwg
IlxuIik7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAg
Ym9vbCBzaG91bGRTcGlsbEV2ZXJ5dGhpbmcoKQotICAgIHsKLSAgICAgICAgaWYgKCFPcHRpb25z
OjphaXJMaW5lYXJTY2FuU3BpbGxzRXZlcnl0aGluZygpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAKLSAgICAgICAgLy8gWW91J3JlIG1lYW50IHRvIGhhY2sgdGhpcyBzbyB0
aGF0IHlvdSBzZWxlY3RpdmVseSBzcGlsbCBldmVyeXRoaW5nIGRlcGVuZGluZyBvbiByZWFzb25z
LgotICAgICAgICAvLyBUaGF0J3Mgc3VwZXIgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuCi0KLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BpbGxFdmVyeXRoaW5nKCkK
LSAgICB7Ci0gICAgICAgIG1fY29kZS5mb3JFYWNoVG1wKAotICAgICAgICAgICAgWyZdIChUbXAg
dG1wKSB7Ci0gICAgICAgICAgICAgICAgc3BpbGwodG1wKTsKLSAgICAgICAgICAgIH0pOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIHByZXBhcmVJbnRlcnZhbHMoKQotICAgIHsKLSAgICAgICAgbV90
bXBzLnJlc2l6ZSgwKTsKLSAgICAgICAgCi0gICAgICAgIG1fY29kZS5mb3JFYWNoVG1wKAotICAg
ICAgICAgICAgWyZdIChUbXAgdG1wKSB7Ci0gICAgICAgICAgICAgICAgVG1wRGF0YSYgZGF0YSA9
IG1fbWFwW3RtcF07Ci0gICAgICAgICAgICAgICAgaWYgKGRhdGEuc3BpbGxlZCkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGRh
dGEuYXNzaWduZWQgPSBSZWcoKTsKLSAgICAgICAgICAgICAgICBtX3RtcHMuYXBwZW5kKHRtcCk7
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgCi0gICAgICAgIHN0ZDo6c29ydCgKLSAgICAgICAg
ICAgIG1fdG1wcy5iZWdpbigpLCBtX3RtcHMuZW5kKCksCi0gICAgICAgICAgICBbJl0gKFRtcCYg
YSwgVG1wJiBiKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fbWFwW2FdLmludGVydmFsLmJl
Z2luKCkgPCBtX21hcFtiXS5pbnRlcnZhbC5iZWdpbigpOwotICAgICAgICAgICAgfSk7Ci0gICAg
ICAgIAotICAgICAgICBpZiAodmVyYm9zZSgpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCJUbXBz
OiAiLCBsaXN0RHVtcChtX3RtcHMpLCAiXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2coIkNsb2Ji
ZXJzOiAiLCBsaXN0RHVtcChtX2Nsb2JiZXJzKSwgIlxuIik7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgCi0gICAgVG1wIGFkZFNwaWxsVG1wV2l0aEludGVydmFsKEJhbmsgYmFuaywgSW50ZXJ2YWwg
aW50ZXJ2YWwpCi0gICAgewotICAgICAgICBUbXBEYXRhIGRhdGE7Ci0gICAgICAgIGRhdGEuaW50
ZXJ2YWwgPSBpbnRlcnZhbDsKLSAgICAgICAgZGF0YS5pc1Vuc3BpbGxhYmxlID0gdHJ1ZTsKLSAg
ICAgICAgCi0gICAgICAgIFRtcCB0bXAgPSBtX2NvZGUubmV3VG1wKGJhbmspOwotICAgICAgICBt
X21hcC5hcHBlbmQodG1wLCBkYXRhKTsKLSAgICAgICAgcmV0dXJuIHRtcDsKLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBhdHRlbXB0U2NhbihCYW5rIGJhbmspCi0gICAgewotICAgICAgICAvLyBUaGlz
IGlzIG1vZGVsZWQgYWZ0ZXIgTGluZWFyU2NhblJlZ2lzdGVyQWxsb2NhdGlvbiBpbiBGaWcuIDEg
aW4KLSAgICAgICAgLy8gaHR0cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTMzMDI1MC4K
LQotICAgICAgICBtX2FjdGl2ZS5jbGVhcigpOwotICAgICAgICBtX2FjdGl2ZVJlZ3MgPSBSZWdp
c3RlclNldCgpOwotICAgICAgICAKLSAgICAgICAgc2l6ZV90IGNsb2JiZXJJbmRleCA9IDA7Ci0g
ICAgICAgIGZvciAoVG1wJiB0bXAgOiBtX3RtcHMpIHsKLSAgICAgICAgICAgIGlmICh0bXAuYmFu
aygpICE9IGJhbmspCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKLSAgICAgICAgICAgIHNpemVf
dCBpbmRleCA9IGVudHJ5LmludGVydmFsLmJlZ2luKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmICh2ZXJib3NlKCkpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbmRleCAjIiwg
aW5kZXgsICI6ICIsIHRtcCwgIlxuIik7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAiLCB0
bXAsICI6ICIsIGVudHJ5LCAiXG4iKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIGNsb2Ji
ZXJJbmRleCA9ICIsIGNsb2JiZXJJbmRleCwgIlxuIik7Ci0gICAgICAgICAgICAgICAgLy8gVGhp
cyBjb3VsZCBiZSBzbyBtdWNoIGZhc3Rlci4KLSAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fY29kZVswXTsKLSAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGNhbmRp
ZGF0ZUJsb2NrIDogbV9jb2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXJ0SW5k
ZXhbY2FuZGlkYXRlQmxvY2tdID4gaW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgYmxvY2sgPSBjYW5kaWRhdGVCbG9jazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW5zdEluZGV4ID0gKGluZGV4IC0g
bV9zdGFydEluZGV4W2Jsb2NrXSArIDEpIC8gMjsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
IEF0OiAiLCBwb2ludGVyRHVtcChibG9jayksICIsIGluc3RJbmRleCA9ICIsIGluc3RJbmRleCwg
IlxuIik7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIFByZXY6ICIsIHBvaW50ZXJEdW1w
KGJsb2NrLT5nZXQoaW5zdEluZGV4IC0gMSkpLCAiXG4iKTsKLSAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgTmV4dDogIiwgcG9pbnRlckR1bXAoYmxvY2stPmdldChpbnN0SW5kZXgpKSwgIlxu
Iik7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICBBY3RpdmU6XG4iKTsKLSAgICAgICAgICAg
ICAgICBmb3IgKFRtcCB0bXAgOiBtX2FjdGl2ZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgICIsIHRtcCwgIjogIiwgbV9tYXBbdG1wXSwgIlxuIik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgRXhwaXJlT2xkSW50ZXJ2YWxzIGlu
IEZpZy4gMS4KLSAgICAgICAgICAgIHdoaWxlICghbV9hY3RpdmUuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICAgICAgVG1wIHRtcCA9IG1fYWN0aXZlLmZpcnN0KCk7Ci0gICAgICAgICAgICAgICAg
VG1wRGF0YSYgZW50cnkgPSBtX21hcFt0bXBdOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGJvb2wgZXhwaXJlZCA9IGVudHJ5LmludGVydmFsLmVuZCgpIDw9IGluZGV4OwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghZXhwaXJlZCkKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9hY3Rp
dmUucmVtb3ZlRmlyc3QoKTsKLSAgICAgICAgICAgICAgICBtX2FjdGl2ZVJlZ3MucmVtb3ZlKGVu
dHJ5LmFzc2lnbmVkKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSWYgbmVjZXNz
YXJ5LCBjb21wdXRlIHRoZSBzZXQgb2YgcmVnaXN0ZXJzIHRoYXQgdGhpcyB0bXAgY291bGQgZXZl
biB1c2UuIFRoaXMgaXMgbm90Ci0gICAgICAgICAgICAvLyBwYXJ0IG9mIEZpZy4gMSwgYnV0IGl0
J3MgYSB0ZWNobmlxdWUgdGhhdCB0aGUgYXV0aG9ycyBjbGFpbSB0byBoYXZlIGltcGxlbWVudGVk
IGluIG9uZSBvZgotICAgICAgICAgICAgLy8gdGhlaXIgdHdvIGltcGxlbWVudGF0aW9ucy4gVGhl
cmUgbWF5IGJlIG90aGVyIG1vcmUgZWZmaWNpZW50IHdheXMgdG8gZG8gdGhpcywgYnV0IHRoaXMK
LSAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIGdldHMgc29tZSBwZXJmIHdpbnMgZnJvbSBw
aWdneS1iYWNraW5nIHRoaXMgY2FsY3VsYXRpb24gaW4gdGhlIHNjYW4uCi0gICAgICAgICAgICAv
LwotICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBkaWRCdWlsZCBmbGFnIHN0aWNrcyB0aHJv
dWdoIHNwaWxsaW5nLiBTcGlsbGluZyBkb2Vzbid0IGNoYW5nZSB0aGUKLSAgICAgICAgICAgIC8v
IGludGVyZmVyZW5jZSBzaXR1YXRpb24uCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8g
Tm90ZSB0aGF0IHdlIGNvdWxkIHNob3J0LWNpcmN1aXQgdGhpcyBpZiB3ZSdyZSBkZWFsaW5nIHdp
dGggYSBzcGlsbGFibGUgdG1wLCB0aGVyZSBhcmUgbm8KLSAgICAgICAgICAgIC8vIGZyZWUgcmVn
aXN0ZXJzLCBhbmQgdGhpcyByZWdpc3RlcidzIGludGVydmFsIGVuZHMgYWZ0ZXIgdGhlIG9uZSBv
biB0aGUgdG9wIG9mIHRoZSBhY3RpdmUKLSAgICAgICAgICAgIC8vIHN0YWNrLgotICAgICAgICAg
ICAgaWYgKCFlbnRyeS5kaWRCdWlsZFBvc3NpYmxlUmVncykgewotICAgICAgICAgICAgICAgIC8v
IEFkdmFuY2UgdGhlIGNsb2JiZXIgaW5kZXggdW50aWwgaXQncyBhdCBhIGNsb2JiZXIgdGhhdCBp
cyByZWxldmFudCB0byB1cy4KLSAgICAgICAgICAgICAgICB3aGlsZSAoY2xvYmJlckluZGV4IDwg
bV9jbG9iYmVycy5zaXplKCkgJiYgbV9jbG9iYmVyc1tjbG9iYmVySW5kZXhdLmluZGV4IDwgaW5k
ZXgpCi0gICAgICAgICAgICAgICAgICAgIGNsb2JiZXJJbmRleCsrOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHBvc3NpYmxlUmVncyA9IG1fcmVnaXN0ZXJT
ZXRbYmFua107Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGNsb2JiZXJJbmRleDsg
aSA8IG1fY2xvYmJlcnMuc2l6ZSgpICYmIG1fY2xvYmJlcnNbaV0uaW5kZXggPCBlbnRyeS5pbnRl
cnZhbC5lbmQoKTsgKytpKQotICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZVJlZ3MuZXhjbHVk
ZShtX2Nsb2JiZXJzW2ldLnJlZ3MpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGVudHJ5LnBvc3NpYmxlUmVncyA9IHBvc3NpYmxlUmVnczsKLSAgICAgICAgICAgICAgICBlbnRy
eS5kaWRCdWlsZFBvc3NpYmxlUmVncyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKCkpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygi
ICBQb3NzaWJsZSByZWdzOiAiLCBlbnRyeS5wb3NzaWJsZVJlZ3MsICJcbiIpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAvLyBGaW5kIGEgZnJlZSByZWdpc3RlciB0aGF0IHdlIGFyZSBhbGxv
d2VkIHRvIHVzZS4KLSAgICAgICAgICAgIGlmIChtX2FjdGl2ZS5zaXplKCkgIT0gbV9yZWdpc3Rl
cnNbYmFua10uc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBkaWRBc3NpZ24gPSBmYWxz
ZTsKLSAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBtX3JlZ2lzdGVyc1tiYW5rXSkgewot
ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ291bGQgZG8gcHJpb3JpdHkgY29sb3Jpbmcg
aGVyZS4KLSAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3MDMwNAotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fYWN0aXZlUmVn
cy5jb250YWlucyhyZWcpICYmIGVudHJ5LnBvc3NpYmxlUmVncy5jb250YWlucyhyZWcpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ24odG1wLCByZWcpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgZGlkQXNzaWduID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGlmIChkaWRBc3NpZ24pCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBUaGlzIGlzIFNwaWxsQXRJbnRl
cnZhbCBpbiBGaWcuIDEsIGJ1dCBtb2RpZmllZCB0byBoYW5kbGUgY2xvYmJlcnMuCi0gICAgICAg
ICAgICBUbXAgc3BpbGxUbXAgPSBtX2FjdGl2ZS50YWtlTGFzdCgKLSAgICAgICAgICAgICAgICBb
Jl0gKFRtcCBzcGlsbENhbmRpZGF0ZSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlbnRyeS5wb3NzaWJsZVJlZ3MuY29udGFpbnMobV9tYXBbc3BpbGxDYW5kaWRhdGVdLmFz
c2lnbmVkKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGlmICghc3BpbGxUbXAp
IHsKLSAgICAgICAgICAgICAgICBzcGlsbCh0bXApOwotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgVG1wRGF0YSYgc3BpbGxFbnRyeSA9IG1fbWFw
W3NwaWxsVG1wXTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNwaWxsRW50cnkuYXNzaWdu
ZWQpOwotICAgICAgICAgICAgaWYgKHNwaWxsRW50cnkuaXNVbnNwaWxsYWJsZSB8fAotICAgICAg
ICAgICAgICAgICghZW50cnkuaXNVbnNwaWxsYWJsZSAmJiBzcGlsbEVudHJ5LmludGVydmFsLmVu
ZCgpIDw9IGVudHJ5LmludGVydmFsLmVuZCgpKSkgewotICAgICAgICAgICAgICAgIHNwaWxsKHRt
cCk7Ci0gICAgICAgICAgICAgICAgYWRkVG9BY3RpdmUoc3BpbGxUbXApOwotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBh
c3NpZ24odG1wLCBzcGlsbEVudHJ5LmFzc2lnbmVkKTsKLSAgICAgICAgICAgIHNwaWxsKHNwaWxs
VG1wKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGFkZFRvQWN0aXZlKFRtcCB0
bXApCi0gICAgewotICAgICAgICBpZiAobV9tYXBbdG1wXS5pc1Vuc3BpbGxhYmxlKSB7Ci0gICAg
ICAgICAgICBtX2FjdGl2ZS5wcmVwZW5kKHRtcCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fYWN0aXZlLmFwcGVuZEFuZEJ1YmJsZSgKLSAgICAg
ICAgICAgIHRtcCwKLSAgICAgICAgICAgIFsmXSAoVG1wIG90aGVyVG1wKSAtPiBib29sIHsKLSAg
ICAgICAgICAgICAgICBUbXBEYXRhJiBvdGhlckVudHJ5ID0gbV9tYXBbb3RoZXJUbXBdOwotICAg
ICAgICAgICAgICAgIGlmIChvdGhlckVudHJ5LmlzVW5zcGlsbGFibGUpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9tYXBbb3RoZXJU
bXBdLmludGVydmFsLmVuZCgpID4gbV9tYXBbdG1wXS5pbnRlcnZhbC5lbmQoKTsKLSAgICAgICAg
ICAgIH0pOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGFzc2lnbihUbXAgdG1wLCBSZWcgcmVnKQot
ICAgIHsKLSAgICAgICAgVG1wRGF0YSYgZW50cnkgPSBtX21hcFt0bXBdOwotICAgICAgICBSRUxF
QVNFX0FTU0VSVCghZW50cnkuc3BpbGxlZCk7Ci0gICAgICAgIGVudHJ5LmFzc2lnbmVkID0gcmVn
OwotICAgICAgICBtX2FjdGl2ZVJlZ3MuYWRkKHJlZyk7Ci0gICAgICAgIGFkZFRvQWN0aXZlKHRt
cCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BpbGwoVG1wIHRtcCkKLSAgICB7Ci0gICAgICAg
IFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWVu
dHJ5LmlzVW5zcGlsbGFibGUpOwotICAgICAgICBlbnRyeS5zcGlsbGVkID0gbV9jb2RlLmFkZFN0
YWNrU2xvdCg4LCBTdGFja1Nsb3RLaW5kOjpTcGlsbCk7Ci0gICAgICAgIGVudHJ5LmFzc2lnbmVk
ID0gUmVnKCk7Ci0gICAgICAgIG1fZGlkU3BpbGwgPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICB2
b2lkIGVtaXRTcGlsbENvZGUoKQotICAgIHsKLSAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fY29kZSkgewotICAgICAgICAgICAgc2l6ZV90IGluZGV4T2ZIZWFkID0gdGhpcy0+aW5k
ZXhPZkhlYWQoYmxvY2spOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAw
OyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgewotICAgICAgICAgICAg
ICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbmRleE9mRWFybHkgPSBpbmRleE9mSGVhZCArIGluc3RJbmRleCAqIDI7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gRmlyc3QgdHJ5IHRvIHNwaWxsIGRpcmVj
dGx5LgotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Mu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3Nb
aV07Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzVG1wKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy5pc1JlZygp
KQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAg
IFN0YWNrU2xvdCogc3BpbGxlZCA9IG1fbWFwW2FyZy50bXAoKV0uc3BpbGxlZDsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFzcGlsbGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5zdC5hZG1pdHNTdGFjayhpKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBhcmcgPSBB
cmc6OnN0YWNrKHNwaWxsZWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAvLyBGYWxsIGJhY2sgb24gdGhlIGhhcmQgd2F5LgotICAgICAgICAg
ICAgICAgIGluc3QuZm9yRWFjaFRtcCgKLSAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRt
cCwgQXJnOjpSb2xlIHJvbGUsIEJhbmsgYmFuaywgV2lkdGgpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh0bXAuaXNSZWcoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNwaWxsZWQgPSBtX21hcFt0
bXBdLnNwaWxsZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNwaWxsZWQpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAg
T3Bjb2RlIG1vdmUgPSBiYW5rID09IEdQID8gTW92ZSA6IE1vdmVEb3VibGU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB0bXAgPSBhZGRTcGlsbFRtcFdpdGhJbnRlcnZhbChiYW5rLCBpbnRlcnZh
bChpbmRleE9mRWFybHksIEFyZzo6dGltaW5nKHJvbGUpKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocm9sZSA9PSBBcmc6OlNjcmF0Y2gpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlVc2Uocm9s
ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXRzW2Jsb2NrXS5p
bnNlcnQoaW5zdEluZGV4LCBzZWNvbmRQaGFzZSwgbW92ZSwgaW5zdC5vcmlnaW4sIEFyZzo6c3Rh
Y2soc3BpbGxlZCksIHRtcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Fu
eURlZihyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldHNb
YmxvY2tdLmluc2VydChpbnN0SW5kZXggKyAxLCBmaXJzdFBoYXNlLCBtb3ZlLCBpbnN0Lm9yaWdp
biwgdG1wLCBBcmc6OnN0YWNrKHNwaWxsZWQpKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBpbnNlcnRTcGls
bENvZGUoKQotICAgIHsKLSAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkK
LSAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0c1tibG9ja10uZXhlY3V0ZShibG9jayk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgYXNzaWduUmVnaXN0ZXJzKCkKLSAgICB7Ci0gICAgICAgIGlmICh2
ZXJib3NlKCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIkFib3V0IHRvIGFsbG9jYXRlIHJlZ2lz
dGVycy4gU3RhdGUgb2YgYWxsIHRtcHM6XG4iKTsKLSAgICAgICAgICAgIG1fY29kZS5mb3JFYWNo
VG1wKAotICAgICAgICAgICAgICAgIFsmXSAoVG1wIHRtcCkgewotICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgIiwgdG1wLCAiOiAiLCBtX21hcFt0bXBdLCAiXG4iKTsKLSAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgIGRhdGFMb2coIklSOlxuIik7Ci0gICAgICAgICAgICBk
YXRhTG9nKG1fY29kZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBtX2NvZGUpIHsKLSAgICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpi
bG9jaykgewotICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKCkpCi0gICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkF0OiAiLCBpbnN0LCAiXG4iKTsKLSAgICAgICAgICAgICAgICBpbnN0LmZv
ckVhY2hUbXBGYXN0KAotICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgICAgICBSZWcgcmVnID0gbV9tYXBbdG1wXS5hc3NpZ25lZDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghcmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiRmFpbGVkIHRvIGFsbG9jYXRlIHJlZyBmb3I6ICIsIHRtcCwgIlxuIik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IFRtcChyZWcp
OwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLSAgICAKLSAgICBDb2RlJiBtX2NvZGU7Ci0gICAgVmVjdG9yPFJlZz4gbV9yZWdpc3RlcnNb
bnVtQmFua3NdOwotICAgIFJlZ2lzdGVyU2V0IG1fcmVnaXN0ZXJTZXRbbnVtQmFua3NdOwotICAg
IFJlZ2lzdGVyU2V0IG1fdW5pZmllZFJlZ2lzdGVyU2V0OwotICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2sqLCBzaXplX3Q+IG1fc3RhcnRJbmRleDsKLSAgICBUbXBNYXA8VG1wRGF0YT4gbV9tYXA7Ci0g
ICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIFBoYXNlSW5zZXJ0aW9uU2V0PiBtX2luc2VydGlvblNl
dHM7Ci0gICAgVmVjdG9yPENsb2JiZXI+IG1fY2xvYmJlcnM7IC8vIEFmdGVyIHdlIGFsbG9jYXRl
IHRoaXMsIHdlIGhhcHBpbHkgcG9pbnQgcG9pbnRlcnMgaW50byBpdC4KLSAgICBWZWN0b3I8VG1w
PiBtX3RtcHM7Ci0gICAgRGVxdWU8VG1wPiBtX2FjdGl2ZTsKLSAgICBSZWdpc3RlclNldCBtX2Fj
dGl2ZVJlZ3M7Ci0gICAgYm9vbCBtX2RpZFNwaWxsIHsgZmFsc2UgfTsKLX07Ci0KLXZvaWQgcnVu
TGluZWFyU2NhbihDb2RlJiBjb2RlKQotewotICAgIGlmICh2ZXJib3NlKCkpCi0gICAgICAgIGRh
dGFMb2coIkFpciBiZWZvcmUgbGluZWFyIHNjYW46XG4iLCBjb2RlKTsKLSAgICBMaW5lYXJTY2Fu
IGxpbmVhclNjYW4oY29kZSk7Ci0gICAgbGluZWFyU2Nhbi5ydW4oKTsKLSAgICBpZiAodmVyYm9z
ZSgpKQotICAgICAgICBkYXRhTG9nKCJBaXIgYWZ0ZXIgbGluZWFyIHNjYW46XG4iLCBjb2RlKTsK
LX0KLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLXZvaWQgYWxsb2NhdGVSZWdpc3RlcnNC
eUxpbmVhclNjYW4oQ29kZSYgY29kZSkKLXsKLSAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29k
ZSwgImFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuIik7Ci0gICAgcGFkSW50ZXJmZXJlbmNl
KGNvZGUpOwotICAgIHJ1bkxpbmVhclNjYW4oY29kZSk7Ci0gICAgZml4U3BpbGxzQWZ0ZXJUZXJt
aW5hbHMoY29kZSk7Ci19Ci0KLX0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKLQotI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5o
CShyZXZpc2lvbiAyMTUyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFs
bG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw1MCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpZiBFTkFCTEUoQjNfSklUKQotCi0jaW5jbHVkZSAiQ1BVLmgiCi0jaW5jbHVk
ZSAiT3B0aW9ucy5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7Ci0KLWNsYXNzIENvZGU7Ci0KLS8vIFRoaXMgaW1wbGVtZW50cyB0aGUgUG9sZXR0byBh
bmQgU2Fya2FyIHJlZ2lzdGVyIGFsbG9jYXRvciBjYWxsZWQgImxpbmVhciBzY2FuIjoKLS8vIGh0
dHA6Ly9kbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD0zMzAyNTAKLS8vCi0vLyBUaGlzIGlzIG5v
dCBBaXIncyBwcmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRvci4gV2UgdXNlIGl0IG9ubHkgd2hlbiBy
dW5uaW5nIGF0IG9wdExldmVsPDIuIFRoYXQncyBub3QKLS8vIHRoZSBkZWZhdWx0IGxldmVsLiBU
aGlzIHJlZ2lzdGVyIGFsbG9jYXRvciBpcyBvcHRpbWl6ZWQgcHJpbWFyaWx5IGZvciBydW5uaW5n
IHF1aWNrbHkuIEl0J3MgZXhwZWN0ZWQKLS8vIHRoYXQgaW1wcm92ZW1lbnRzIHRvIHRoaXMgcmVn
aXN0ZXIgYWxsb2NhdG9yIHNob3VsZCBmb2N1cyBvbiBpbXByb3ZpbmcgaXRzIGV4ZWN1dGlvbiB0
aW1lIHdpdGhvdXQgbXVjaAotLy8gcmVnYXJkIGZvciB0aGUgcXVhbGl0eSBvZiBnZW5lcmF0ZWQg
Y29kZS4gSWYgeW91IHdhbnQgZ29vZCBjb2RlLCB1c2UgZ3JhcGggY29sb3JpbmcuCi0vLwotLy8g
Rm9yIEFpcidzIHByaW1hcnkgcmVnaXN0ZXIgYWxsb2NhdG9yLCBzZWUgQWlyQWxsb2NhdGVSZWdp
c3RlcnNCeUdyYXBoQ29sb3JpbmcuaHxjcHAuCi12b2lkIGFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5l
YXJTY2FuKENvZGUmKTsKLQotfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgotCi0jZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nLmNw
cAkocmV2aXNpb24gMjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
bGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsNyBAQAogCiAjaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckNvZGUu
aCIKLSNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJIYW5kbGVDYWxs
ZWVTYXZlcy5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyTGl2
ZW5lc3MuaCIKICNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCkBAIC0xMjksMTUgKzEyOSwxMSBA
QCBzdHJ1Y3QgQ29hbGVzY2FibGVNb3ZlIHsKICAgICBkb3VibGUgZnJlcXVlbmN5IHsgUE5hTiB9
OwogfTsKIAotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLXZvaWQgYWxsb2NhdGVTdGFja0J5
R3JhcGhDb2xvcmluZyhDb2RlJiBjb2RlKQorVmVjdG9yPFN0YWNrU2xvdCo+IGFsbG9jYXRlRXNj
YXBlZFN0YWNrU2xvdHNJbXBsKENvZGUmIGNvZGUpCiB7Ci0gICAgUGhhc2VTY29wZSBwaGFzZVNj
b3BlKGNvZGUsICJhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nIik7Ci0KICAgICAvLyBBbGxv
Y2F0ZSBhbGwgb2YgdGhlIGVzY2FwZWQgc2xvdHMgaW4gb3JkZXIuIFRoaXMgaXMga2luZCBvZiBh
IGNyYXp5IGFsZ29yaXRobSB0byBhbGxvdyBmb3IKICAgICAvLyB0aGUgcG9zc2liaWxpdHkgb2Yg
c3RhY2sgc2xvdHMgYmVpbmcgYXNzaWduZWQgZnJhbWUgb2Zmc2V0cyBiZWZvcmUgd2UgZXZlbiBn
ZXQgaGVyZS4KLSAgICBBU1NFUlQoIWNvZGUuZnJhbWVTaXplKCkpOworICAgIFJFTEVBU0VfQVNT
RVJUKCFjb2RlLmZyYW1lU2l6ZSgpKTsKICAgICBWZWN0b3I8U3RhY2tTbG90Kj4gYXNzaWduZWRF
c2NhcGVkU3RhY2tTbG90czsKICAgICBWZWN0b3I8U3RhY2tTbG90Kj4gZXNjYXBlZFN0YWNrU2xv
dHNXb3JrbGlzdDsKICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygp
KSB7CkBAIC0xNTgsNiArMTU0LDM3IEBAIHZvaWQgYWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmlu
ZyhDb2RlJiAKICAgICAgICAgYXNzaWduKHNsb3QsIGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHMp
OwogICAgICAgICBhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90KTsKICAgICB9
CisgICAgcmV0dXJuIGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHM7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIENvbGxlY3Rpb24+Cit2b2lkIHVwZGF0ZUZyYW1lU2l6ZUJhc2VkT25TdGFja1Nsb3Rz
SW1wbChDb2RlJiBjb2RlLCBjb25zdCBDb2xsZWN0aW9uJiBjb2xsZWN0aW9uKQoreworICAgIHVu
c2lnbmVkIGZyYW1lU2l6ZSA9IDA7CisgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBjb2xsZWN0
aW9uKQorICAgICAgICBmcmFtZVNpemUgPSBzdGQ6Om1heChmcmFtZVNpemUsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPigtc2xvdC0+b2Zmc2V0RnJvbUZQKCkpKTsKKyAgICBjb2RlLnNldEZyYW1lU2l6
ZShXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBmcmFtZVNp
emUpKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgYWxsb2NhdGVFc2Nh
cGVkU3RhY2tTbG90cyhDb2RlJiBjb2RlKQoreworICAgIHVwZGF0ZUZyYW1lU2l6ZUJhc2VkT25T
dGFja1Nsb3RzSW1wbChjb2RlLCBhbGxvY2F0ZUVzY2FwZWRTdGFja1Nsb3RzSW1wbChjb2RlKSk7
Cit9CisKK3ZvaWQgdXBkYXRlRnJhbWVTaXplQmFzZWRPblN0YWNrU2xvdHMoQ29kZSYgY29kZSkK
K3sKKyAgICB1cGRhdGVGcmFtZVNpemVCYXNlZE9uU3RhY2tTbG90c0ltcGwoY29kZSwgY29kZS5z
dGFja1Nsb3RzKCkpOworfQorCit2b2lkIGFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcoQ29k
ZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImFsbG9jYXRlU3Rh
Y2tCeUdyYXBoQ29sb3JpbmciKTsKKyAgICAKKyAgICBoYW5kbGVDYWxsZWVTYXZlcyhjb2RlKTsK
KyAgICAKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90cyA9
IGFsbG9jYXRlRXNjYXBlZFN0YWNrU2xvdHNJbXBsKGNvZGUpOwogCiAgICAgLy8gTm93IHdlIGhh
bmRsZSB0aGUgc3BpbGwgc2xvdHMuCiAgICAgU3RhY2tTbG90TGl2ZW5lc3MgbGl2ZW5lc3MoY29k
ZSk7CkBAIC0zNzcsODggKzQwNCwxMSBAQCB2b2lkIGFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3Jp
bmcoQ29kZSYgCiAgICAgICAgIGFzc2lnbihzbG90LCBvdGhlclNsb3RzKTsKICAgICB9CiAKLSAg
ICAvLyBGaWd1cmUgb3V0IGhvdyBtdWNoIHN0YWNrIHdlJ3JlIHVzaW5nIGZvciBzdGFjayBzbG90
cy4KLSAgICB1bnNpZ25lZCBmcmFtZVNpemVGb3JTdGFja1Nsb3RzID0gMDsKLSAgICBmb3IgKFN0
YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKSB7Ci0gICAgICAgIGZyYW1lU2l6ZUZv
clN0YWNrU2xvdHMgPSBzdGQ6Om1heCgKLSAgICAgICAgICAgIGZyYW1lU2l6ZUZvclN0YWNrU2xv
dHMsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLXNsb3QtPm9mZnNldEZyb21G
UCgpKSk7Ci0gICAgfQotCi0gICAgZnJhbWVTaXplRm9yU3RhY2tTbG90cyA9IFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIGZyYW1lU2l6ZUZvclN0YWNrU2xv
dHMpOwotCi0gICAgLy8gTm93IHdlIG5lZWQgdG8gZGVkdWNlIGhvdyBtdWNoIGFyZ3VtZW50IGFy
ZWEgd2UgbmVlZC4KLSAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewotICAgICAg
ICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKLSAgICAgICAgICAgIGZvciAoQXJnJiBhcmcg
OiBpbnN0LmFyZ3MpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXJnLmlzQ2FsbEFyZygpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIEZvciBub3csIHdlIGFzc3VtZSB0aGF0IHdlIHVzZSA4IGJ5
dGVzIG9mIHRoZSBjYWxsIGFyZy4gQnV0IHRoYXQncyBub3QKLSAgICAgICAgICAgICAgICAgICAg
Ly8gc3VjaCBhbiBhd2Vzb21lIGFzc3VtcHRpb24uCi0gICAgICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU0Ci0gICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChhcmcub2Zmc2V0KCkgPj0gMCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvZGUucmVxdWVzdENhbGxBcmdBcmVhU2l6ZUluQnl0ZXMoYXJnLm9mZnNldCgpICsg
OCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgY29kZS5zZXRGcmFtZVNpemUoZnJhbWVTaXplRm9yU3RhY2tTbG90cyArIGNvZGUuY2Fs
bEFyZ0FyZWFTaXplSW5CeXRlcygpKTsKLQotICAgIC8vIEZpbmFsbHksIHRyYW5zZm9ybSB0aGUg
Y29kZSB0byB1c2UgQWRkcidzIGluc3RlYWQgb2YgU3RhY2tTbG90J3MuIFRoaXMgaXMgYSBsb3Nz
bGVzcwotICAgIC8vIHRyYW5zZm9ybWF0aW9uIHNpbmNlIHdlIGNhbiBzZWFyY2ggdGhlIFN0YWNr
U2xvdHMgYXJyYXkgdG8gZmlndXJlIG91dCB3aGljaCBTdGFja1Nsb3QgYW55Ci0gICAgLy8gb2Zm
c2V0LWZyb20tRlAgcmVmZXJzIHRvLgotCi0gICAgLy8gRklYTUU6IFRoaXMgbWF5IHByb2R1Y2Ug
YWRkcmVzc2VzIHRoYXQgYXJlbid0IHZhbGlkIGlmIHdlIGVuZCB1cCB3aXRoIGEgZ2lub3Jtb3Vz
IHN0YWNrIGZyYW1lLgotICAgIC8vIFdlIHdvdWxkIGhhdmUgdG8gc2NhdmVuZ2UgZm9yIHRlbXBv
cmFyaWVzIGlmIHRoaXMgaGFwcGVuZWQuIEZvcnR1bmF0ZWx5LCB0aGlzIGNhc2Ugd2lsbCBiZQot
ICAgIC8vIGV4dHJlbWVseSByYXJlIHNvIHdlIGNhbiBkbyBjcmF6eSB0aGluZ3Mgd2hlbiBpdCBh
cmlzZXMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
MjUzMAotCi0gICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKLSAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRl
eCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7Ci0gICAgICAg
ICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7Ci0gICAgICAgICAgICBpbnN0
LmZvckVhY2hBcmcoCi0gICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJv
bGUsIEJhbmssIFdpZHRoIHdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gc3RhY2tB
ZGRyID0gWyZdIChpbnQzMl90IG9mZnNldCkgLT4gQXJnIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBBcmc6OnN0YWNrQWRkcihvZmZzZXQsIGNvZGUuZnJhbWVTaXplKCksIHdpZHRo
KTsKLSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgewotICAgICAgICAgICAgICAgICAgICBj
YXNlIEFyZzo6U3RhY2s6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2xv
dCA9IGFyZy5zdGFja1Nsb3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6Omlz
WkRlZihyb2xlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsb3QtPmtpbmQoKSA9
PSBTdGFja1Nsb3RLaW5kOjpTcGlsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNs
b3QtPmJ5dGVTaXplKCkgPiBieXRlcyh3aWR0aCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBDdXJyZW50bHkgd2Ugb25seSBoYW5kbGUgdGhpcyBzaW1wbGUgY2FzZSBiZWNhdXNl
IGl0J3MgdGhlIG9ubHkgb25lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBh
cmlzZXM6IFpEZWYncyBhcmUgb25seSAzMi1iaXQgcmlnaHQgbm93LiBTbywgd2hlbiB3ZSBoaXQg
dGhlc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhc3NlcnRpb25zIGl0IG1lYW5z
IHRoYXQgd2UgbmVlZCB0byBpbXBsZW1lbnQgdGhvc2Ugb3RoZXIga2luZHMgb2YKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyB6ZXJvIGZpbGxzLgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3QtPmJ5dGVTaXplKCkgPT0gOCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQod2lkdGggPT0gV2lkdGgzMik7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1ZhbGlkRm9ybShTdG9y
ZVplcm8zMiwgQXJnOjpTdGFjaykpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RJbmRl
eCArIDEsIFN0b3JlWmVybzMyLCBpbnN0Lm9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhY2tBZGRyKGFyZy5vZmZzZXQoKSArIDQgKyBzbG90LT5vZmZzZXRGcm9tRlAo
KSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
YXJnID0gc3RhY2tBZGRyKGFyZy5vZmZzZXQoKSArIHNsb3QtPm9mZnNldEZyb21GUCgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpDYWxsQXJnOgotICAgICAgICAgICAgICAgICAgICAg
ICAgYXJnID0gc3RhY2tBZGRyKGFyZy5vZmZzZXQoKSAtIGNvZGUuZnJhbWVTaXplKCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICk7Ci0gICAgICAgIH0KLSAgICAgICAgaW5z
ZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwotICAgIH0KKyAgICB1cGRhdGVGcmFtZVNpemVCYXNl
ZE9uU3RhY2tTbG90cyhjb2RlKTsKKyAgICBjb2RlLnNldFN0YWNrSXNBbGxvY2F0ZWQodHJ1ZSk7
CiB9CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIAogI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCiAKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxv
Y2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nLmgJKHJldmlzaW9u
IDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFj
a0J5R3JhcGhDb2xvcmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNCArMzMsMTggQEAgY2xh
c3MgQ29kZTsKIAogLy8gVGhpcyBhbGxvY2F0ZXMgU3RhY2tTbG90cyB0byBwbGFjZXMgb24gdGhl
IHN0YWNrLiBJdCBmaXJzdCBhbGxvY2F0ZXMgdGhlIHBpbm5lZCBvbmVzIGluIGluZGV4CiAvLyBv
cmRlciBhbmQgdGhlbiBpdCBhbGxvY2F0ZXMgdGhlIHJlc3QgdXNpbmcgZmlyc3QgZml0LiBUYWtl
cyB0aGUgb3Bwb3J0dW5pdHkgdG8ga2lsbCBkZWFkCi0vLyBhc3NpZ25tZW50cyB0byBzdGFjayBz
bG90cywgc2luY2UgaXQga25vd3Mgd2hpY2ggb25lcyBhcmUgbGl2ZS4gQWxzbyBmaXhlcyBaRGVm
cyB0byBhbm9ueW1vdXMKLS8vIHN0YWNrIHNsb3RzLiBBbHNvIGNvYWxlc2NlcyBzcGlsbCBzbG90
cyB3aGVuZXZlciBwb3NzaWJsZS4KKy8vIGFzc2lnbm1lbnRzIHRvIHN0YWNrIHNsb3RzLCBzaW5j
ZSBpdCBrbm93cyB3aGljaCBvbmVzIGFyZSBsaXZlLiBBbHNvIGNvYWxlc2NlcyBzcGlsbCBzbG90
cworLy8gd2hlbmV2ZXIgcG9zc2libGUuCiAvLwogLy8gVGhpcyBpcyBtZWFudCB0byBiZSBhbiBv
cHRpbWFsIHN0YWNrIGFsbG9jYXRvciwgZm9jdXNlZCBvbiBnZW5lcmF0aW5nIGdyZWF0IGNvZGUu
IEl0J3Mgbm90CiAvLyBwYXJ0aWN1bGFybHkgZmFzdCwgdGhvdWdoLgogCiB2b2lkIGFsbG9jYXRl
U3RhY2tCeUdyYXBoQ29sb3JpbmcoQ29kZSYpOwogCisvLyBUaGVzZSBhcmUgdXRpbGl0aWVzIHNo
YXJlZCBieSB0aGlzIHBoYXNlIGFuZCBhbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJT
Y2FuKCkuCit2b2lkIGFsbG9jYXRlRXNjYXBlZFN0YWNrU2xvdHMoQ29kZSYpOwordm9pZCB1cGRh
dGVGcmFtZVNpemVCYXNlZE9uU3RhY2tTbG90cyhDb2RlJik7CisKIH0gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCShyZXZpc2lvbiAyMTUyMzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDYgKzQxLDE3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKIAorQXJnIEFyZzo6c3RhY2tBZGRyKGludDMyX3Qgb2Zmc2V0RnJvbUZQLCB1bnNpZ25l
ZCBmcmFtZVNpemUsIFdpZHRoIHdpZHRoKQoreworICAgIEFyZyByZXN1bHQgPSBBcmc6OmFkZHIo
QWlyOjpUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLCBvZmZzZXRGcm9tRlApOworICAg
IGlmICghcmVzdWx0LmlzVmFsaWRGb3JtKHdpZHRoKSkgeworICAgICAgICByZXN1bHQgPSBBcmc6
OmFkZHIoCisgICAgICAgICAgICBBaXI6OlRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpLAorICAgICAgICAgICAgb2Zmc2V0RnJvbUZQICsgZnJhbWVTaXplKTsKKyAgICB9
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogYm9vbCBBcmc6OmlzU3RhY2tNZW1vcnkoKSBjb25z
dAogewogICAgIHN3aXRjaCAoa2luZCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQXJnLmgJKHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2MCwxNyArNTYwLDggQEAgcHVibGlj
OgogICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQotCi0gICAgc3RhdGljIEFyZyBzdGFja0FkZHIoaW50MzJfdCBvZmZzZXRGcm9t
RlAsIHVuc2lnbmVkIGZyYW1lU2l6ZSwgV2lkdGggd2lkdGgpCi0gICAgewotICAgICAgICBBcmcg
cmVzdWx0ID0gQXJnOjphZGRyKEFpcjo6VG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwg
b2Zmc2V0RnJvbUZQKTsKLSAgICAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZEZvcm0od2lkdGgpKSB7
Ci0gICAgICAgICAgICByZXN1bHQgPSBBcmc6OmFkZHIoCi0gICAgICAgICAgICAgICAgQWlyOjpU
bXAoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSwKLSAgICAgICAgICAgICAg
ICBvZmZzZXRGcm9tRlAgKyBmcmFtZVNpemUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgfQorICAgIAorICAgIHN0YXRpYyBBcmcgc3RhY2tBZGRyKGludDMyX3Qgb2Zm
c2V0RnJvbUZQLCB1bnNpZ25lZCBmcmFtZVNpemUsIFdpZHRoKTsKIAogICAgIC8vIElmIHlvdSBk
b24ndCBwYXNzIGEgV2lkdGgsIHRoaXMgb3B0aW1pc3RpY2FsbHkgYXNzdW1lcyB0aGF0IHlvdSdy
ZSB1c2luZyB0aGUgcmlnaHQgd2lkdGguCiAgICAgc3RhdGljIGJvb2wgaXNWYWxpZFNjYWxlKHVu
c2lnbmVkIHNjYWxlLCBzdGQ6Om9wdGlvbmFsPFdpZHRoPiB3aWR0aCA9IHN0ZDo6bnVsbG9wdCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkocmV2aXNpb24g
MjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiwxNCBAQCBCYXNpY0Jsb2NrKiBDb2RlOjphZGRCbG9j
ayhkb3VibGUgZnJlcXVlCiAKIFN0YWNrU2xvdCogQ29kZTo6YWRkU3RhY2tTbG90KHVuc2lnbmVk
IGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQsIEIzOjpTdGFja1Nsb3QqIGIzU2xvdCkKIHsK
LSAgICByZXR1cm4gbV9zdGFja1Nsb3RzLmFkZE5ldyhieXRlU2l6ZSwga2luZCwgYjNTbG90KTsK
KyAgICBTdGFja1Nsb3QqIHJlc3VsdCA9IG1fc3RhY2tTbG90cy5hZGROZXcoYnl0ZVNpemUsIGtp
bmQsIGIzU2xvdCk7CisgICAgaWYgKG1fc3RhY2tJc0FsbG9jYXRlZCkgeworICAgICAgICAvLyBG
SVhNRTogVGhpcyBpcyB1bm5lY2Vzc2FyaWx5IGF3ZnVsLiBGb3J0dW5hdGVseSwgaXQgZG9lc24n
dCBydW4gb2Z0ZW4uCisgICAgICAgIHVuc2lnbmVkIGV4dGVudCA9IFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZihyZXN1bHQtPmFsaWdubWVudCgpLCBmcmFtZVNpemUoKSArIGJ5dGVTaXplKTsKKyAg
ICAgICAgcmVzdWx0LT5zZXRPZmZzZXRGcm9tRlAoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oZXh0
ZW50KSk7CisgICAgICAgIHNldEZyYW1lU2l6ZShXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3Rh
Y2tBbGlnbm1lbnRCeXRlcygpLCBleHRlbnQpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogU3RhY2tTbG90KiBDb2RlOjphZGRTdGFja1Nsb3QoQjM6OlN0YWNrU2xvdCogYjNTbG90
KQpAQCAtMTM4LDYgKzE0NSwyOCBAQCBib29sIENvZGU6OmlzRW50cnlwb2ludChCYXNpY0Jsb2Nr
KiBibG9jCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIENvZGU6OnNldENhbGxlZVNhdmVS
ZWdpc3RlckF0T2Zmc2V0TGlzdChSZWdpc3RlckF0T2Zmc2V0TGlzdCYmIHJlZ2lzdGVyQXRPZmZz
ZXRMaXN0LCBTdGFja1Nsb3QqIHNsb3QpCit7CisgICAgbV91bmNvcnJlY3RlZENhbGxlZVNhdmVS
ZWdpc3RlckF0T2Zmc2V0TGlzdCA9IFdURk1vdmUocmVnaXN0ZXJBdE9mZnNldExpc3QpOworICAg
IGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnaXN0ZXJBdE9mZnNldCA6IG1fdW5jb3Jy
ZWN0ZWRDYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QpCisgICAgICAgIG1fY2FsbGVlU2F2
ZVJlZ2lzdGVycy5zZXQocmVnaXN0ZXJBdE9mZnNldC5yZWcoKSk7CisgICAgbV9jYWxsZWVTYXZl
U3RhY2tTbG90ID0gc2xvdDsKK30KKworUmVnaXN0ZXJBdE9mZnNldExpc3QgQ29kZTo6Y2FsbGVl
U2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCkgY29uc3QKK3sKKyAgICBSZWdpc3RlckF0T2Zmc2V0
TGlzdCByZXN1bHQgPSBtX3VuY29ycmVjdGVkQ2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0
OworICAgIGlmIChTdGFja1Nsb3QqIHNsb3QgPSBtX2NhbGxlZVNhdmVTdGFja1Nsb3QpIHsKKyAg
ICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHNsb3QtPmJ5dGVTaXplKCkgKyBzbG90LT5vZmZzZXRG
cm9tRlAoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IHJlc3VsdC5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgICAgIHJlc3VsdC5hdChpKSA9IFJlZ2lzdGVyQXRPZmZzZXQoCisgICAgICAgICAg
ICAgICAgcmVzdWx0LmF0KGkpLnJlZygpLAorICAgICAgICAgICAgICAgIHJlc3VsdC5hdChpKS5v
ZmZzZXQoKSArIG9mZnNldCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwogdm9pZCBDb2RlOjpyZXNldFJlYWNoYWJpbGl0eSgpCiB7CiAgICAgY2xlYXJQcmVkZWNl
c3NvcnMobV9ibG9ja3MpOwpAQCAtMTcwLDEyICsxOTksMTMgQEAgdm9pZCBDb2RlOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgIGZvciAoU3BlY2lhbCogc3BlY2lhbCA6IHNw
ZWNpYWxzKCkpCiAgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBkZWVwRHVtcChzcGVjaWFs
KSwgIlxuIik7CiAgICAgfQotICAgIGlmIChtX2ZyYW1lU2l6ZSkKLSAgICAgICAgb3V0LnByaW50
KCJGcmFtZSBzaXplOiAiLCBtX2ZyYW1lU2l6ZSwgIlxuIik7CisgICAgaWYgKG1fZnJhbWVTaXpl
IHx8IG1fc3RhY2tJc0FsbG9jYXRlZCkKKyAgICAgICAgb3V0LnByaW50KCJGcmFtZSBzaXplOiAi
LCBtX2ZyYW1lU2l6ZSwgbV9zdGFja0lzQWxsb2NhdGVkID8gIiAoQWxsb2NhdGVkKSIgOiAiIiwg
IlxuIik7CiAgICAgaWYgKG1fY2FsbEFyZ0FyZWFTaXplKQogICAgICAgICBvdXQucHJpbnQoIkNh
bGwgYXJnIGFyZWEgc2l6ZTogIiwgbV9jYWxsQXJnQXJlYVNpemUsICJcbiIpOwotICAgIGlmICht
X2NhbGxlZVNhdmVSZWdpc3RlcnMuc2l6ZSgpKQotICAgICAgICBvdXQucHJpbnQoIkNhbGxlZSBz
YXZlczogIiwgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzLCAiXG4iKTsKKyAgICBSZWdpc3RlckF0T2Zm
c2V0TGlzdCBjYWxsZWVTYXZlUmVnaXN0ZXJzID0gdGhpcy0+Y2FsbGVlU2F2ZVJlZ2lzdGVyQXRP
ZmZzZXRMaXN0KCk7CisgICAgaWYgKGNhbGxlZVNhdmVSZWdpc3RlcnMuc2l6ZSgpKQorICAgICAg
ICBvdXQucHJpbnQoIkNhbGxlZSBzYXZlczogIiwgY2FsbGVlU2F2ZVJlZ2lzdGVycywgIlxuIik7
CiB9CiAKIHVuc2lnbmVkIENvZGU6OmZpbmRGaXJzdEJsb2NrSW5kZXgodW5zaWduZWQgaW5kZXgp
IGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNp
b24gMjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE4Niw5ICsxODYsMjIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
bV9lbnRyeXBvaW50TGFiZWxzID0gc3RkOjpmb3J3YXJkPFZlY3Rvcj4odmVjdG9yKTsKICAgICB9
CisgICAgCisgICAgdm9pZCBzZXRTdGFja0lzQWxsb2NhdGVkKGJvb2wgdmFsdWUpCisgICAgewor
ICAgICAgICBtX3N0YWNrSXNBbGxvY2F0ZWQgPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBzdGFja0lzQWxsb2NhdGVkKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja0lzQWxsb2NhdGVkOyB9
CisgICAgCisgICAgLy8gVGhpcyBzZXRzIHRoZSBjYWxsZWUgc2F2ZSByZWdpc3RlcnMuCisgICAg
dm9pZCBzZXRDYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoUmVnaXN0ZXJBdE9mZnNldExp
c3QmJiwgU3RhY2tTbG90Kik7CiAKLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCYgY2Fs
bGVlU2F2ZVJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsg
fQotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0JiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1
cm4gbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9CisgICAgLy8gVGhpcyByZXR1cm5zIHRoZSBjb3Jy
ZWN0bHkgb2Zmc2V0IGxpc3Qgb2YgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzLgorICAgIFJlZ2lzdGVy
QXRPZmZzZXRMaXN0IGNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpIGNvbnN0OworICAg
IAorICAgIC8vIFRoaXMganVzdCB0ZWxscyB5b3Ugd2hhdCB0aGUgY2FsbGVlIHNhdmVzIGFyZS4K
KyAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9j
YWxsZWVTYXZlUmVnaXN0ZXJzOyB9CiAKICAgICAvLyBSZWNvbXB1dGVzIHByZWRlY2Vzc29ycyBh
bmQgZGVsZXRlcyB1bnJlYWNoYWJsZSBibG9ja3MuCiAgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0
eSgpOwpAQCAtMzI5LDcgKzM0MiwxMCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbnVtRlBU
bXBzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fZnJhbWVTaXplIHsgMCB9OwogICAgIHVuc2lnbmVk
IG1fY2FsbEFyZ0FyZWFTaXplIHsgMCB9OwotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2Fs
bGVlU2F2ZVJlZ2lzdGVyczsKKyAgICBib29sIG1fc3RhY2tJc0FsbG9jYXRlZCB7IGZhbHNlIH07
CisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgbV91bmNvcnJlY3RlZENhbGxlZVNhdmVSZWdpc3Rl
ckF0T2Zmc2V0TGlzdDsKKyAgICBSZWdpc3RlclNldCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7Cisg
ICAgU3RhY2tTbG90KiBtX2NhbGxlZVNhdmVTdGFja1Nsb3QgeyBudWxscHRyIH07CiAgICAgVmVj
dG9yPEZyZXF1ZW50ZWRCbG9jaz4gbV9lbnRyeXBvaW50czsgLy8gVGhpcyBpcyBlbXB0eSB1bnRp
bCBhZnRlciBsb3dlckVudHJ5U3dpdGNoKCkuCiAgICAgVmVjdG9yPENDYWxsSGVscGVyczo6TGFi
ZWw+IG1fZW50cnlwb2ludExhYmVsczsgLy8gVGhpcyBpcyBlbXB0eSB1bnRpbCBjb2RlIGdlbmVy
YXRpb24uCiAgICAgUmVmUHRyPFdhc21Cb3VuZHNDaGVja0dlbmVyYXRvcj4gbV93YXNtQm91bmRz
Q2hlY2tHZW5lcmF0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckdl
bmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDI0ICsyOCwyMyBA
QAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJz
QW5kU3RhY2tCeUxpbmVhclNjYW4uaCIKICNpbmNsdWRlICJBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZy5oIgotI2luY2x1ZGUgIkFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJT
Y2FuLmgiCiAjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZy5oIgogI2lu
Y2x1ZGUgIkFpckNvZGUuaCIKICNpbmNsdWRlICJBaXJFbGltaW5hdGVEZWFkQ29kZS5oIgogI2lu
Y2x1ZGUgIkFpckZpeE9idmlvdXNTcGlsbHMuaCIKICNpbmNsdWRlICJBaXJGaXhQYXJ0aWFsUmVn
aXN0ZXJTdGFsbHMuaCIKICNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgotI2luY2x1
ZGUgIkFpckhhbmRsZUNhbGxlZVNhdmVzLmgiCiAjaW5jbHVkZSAiQWlyTG9nUmVnaXN0ZXJQcmVz
c3VyZS5oIgogI2luY2x1ZGUgIkFpckxvd2VyQWZ0ZXJSZWdBbGxvYy5oIgogI2luY2x1ZGUgIkFp
ckxvd2VyRW50cnlTd2l0Y2guaCIKICNpbmNsdWRlICJBaXJMb3dlck1hY3Jvcy5oIgorI2luY2x1
ZGUgIkFpckxvd2VyU3RhY2tBcmdzLmgiCiAjaW5jbHVkZSAiQWlyT3Bjb2RlVXRpbHMuaCIKICNp
bmNsdWRlICJBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCIKICNpbmNsdWRlICJBaXJSZXBvcnRVc2Vk
UmVnaXN0ZXJzLmgiCiAjaW5jbHVkZSAiQWlyU2ltcGxpZnlDRkcuaCIKLSNpbmNsdWRlICJBaXJT
cGlsbEV2ZXJ5dGhpbmcuaCIKICNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgogI2luY2x1ZGUgIkIz
Q29tbW9uLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKQEAgLTg0LDM5ICs4Myw0MyBAQCB2
b2lkIHByZXBhcmVGb3JHZW5lcmF0aW9uKENvZGUmIGNvZGUpCiAgICAgCiAgICAgZWxpbWluYXRl
RGVhZENvZGUoY29kZSk7CiAKLSAgICAvLyBSZWdpc3RlciBhbGxvY2F0aW9uIGZvciBhbGwgdGhl
IFRtcHMgdGhhdCBkbyBub3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgbWFjaGluZSByZWdpc3Rlci4K
LSAgICAvLyBBZnRlciB0aGlzIHBoYXNlLCBldmVyeSBUbXAgaGFzIGEgcmVnLgotICAgIC8vCi0g
ICAgLy8gRm9yIGRlYnVnZ2luZywgeW91IGNhbiB1c2Ugc3BpbGxFdmVyeXRoaW5nKCkgdG8gcHV0
IGV2ZXJ5dGhpbmcgdG8gdGhlIHN0YWNrIGJldHdlZW4gZWFjaCBJbnN0LgotICAgIGlmIChPcHRp
b25zOjphaXJTcGlsbHNFdmVyeXRoaW5nKCkpCi0gICAgICAgIHNwaWxsRXZlcnl0aGluZyhjb2Rl
KTsKLSAgICBlbHNlIGlmIChjb2RlLm9wdExldmVsKCkgPj0gMikKKyAgICBpZiAoY29kZS5vcHRM
ZXZlbCgpIDw9IDEpIHsKKyAgICAgICAgLy8gV2hlbiB3ZSdyZSBjb21waWxpbmcgcXVpY2tseSwg
d2UgZG8gcmVnaXN0ZXIgYW5kIHN0YWNrIGFsbG9jYXRpb24gaW4gb25lIGxpbmVhciBzY2FuCisg
ICAgICAgIC8vIHBoYXNlLiBJdCdzIGZhc3QgYmVjYXVzZSBpdCBjb21wdXRlcyBsaXZlbmVzcyBv
bmx5IG9uY2UuCisgICAgICAgIGFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4o
Y29kZSk7CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9nQWlyUmVnaXN0ZXJQcmVz
c3VyZSgpKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJSZWdpc3RlciBwcmVzc3VyZSBhZnRlciBy
ZWdpc3RlciBhbGxvY2F0aW9uOlxuIik7CisgICAgICAgICAgICBsb2dSZWdpc3RlclByZXNzdXJl
KGNvZGUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBXZSBtYXkgc3RpbGwgbmVl
ZCB0byBkbyBwb3N0LWFsbG9jYXRpb24gbG93ZXJpbmcuIERvaW5nIGl0IGFmdGVyIGJvdGggcmVn
aXN0ZXIgYW5kCisgICAgICAgIC8vIHN0YWNrIGFsbG9jYXRpb24gaXMgbGVzcyBvcHRpbWFsLCBi
dXQgaXQgd29ya3MgZmluZS4KKyAgICAgICAgbG93ZXJBZnRlclJlZ0FsbG9jKGNvZGUpOworICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIFJlZ2lzdGVyIGFsbG9jYXRpb24gZm9yIGFsbCB0aGUgVG1w
cyB0aGF0IGRvIG5vdCBoYXZlIGEgY29ycmVzcG9uZGluZyBtYWNoaW5lCisgICAgICAgIC8vIHJl
Z2lzdGVyLiBBZnRlciB0aGlzIHBoYXNlLCBldmVyeSBUbXAgaGFzIGEgcmVnLgogICAgICAgICBh
bGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZyhjb2RlKTsKLSAgICBlbHNlCi0gICAgICAg
IGFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuKGNvZGUpOwotCi0gICAgaWYgKE9wdGlvbnM6
OmxvZ0FpclJlZ2lzdGVyUHJlc3N1cmUoKSkgewotICAgICAgICBkYXRhTG9nKCJSZWdpc3RlciBw
cmVzc3VyZSBhZnRlciByZWdpc3RlciBhbGxvY2F0aW9uOlxuIik7Ci0gICAgICAgIGxvZ1JlZ2lz
dGVyUHJlc3N1cmUoY29kZSk7Ci0gICAgfQotICAgIAotICAgIGlmIChjb2RlLm9wdExldmVsKCkg
Pj0gMikgewotICAgICAgICAvLyBUaGlzIHJlcGxhY2VzIHVzZXMgb2Ygc3BpbGwgc2xvdHMgd2l0
aCByZWdpc3RlcnMgb3IgY29uc3RhbnRzIGlmIHBvc3NpYmxlLiBJdCBkb2VzIHRoaXMgYnkKLSAg
ICAgICAgLy8gbWluaW1pemluZyB0aGUgYW1vdW50IHRoYXQgd2UgcGVydHVyYiB0aGUgYWxyZWFk
eS1jaG9zZW4gcmVnaXN0ZXIgYWxsb2NhdGlvbi4gSXQgbWF5IGV4dGVuZAotICAgICAgICAvLyB0
aGUgbGl2ZSByYW5nZXMgb2YgcmVnaXN0ZXJzIHRob3VnaC4KKyAgICAgICAgCisgICAgICAgIGlm
IChPcHRpb25zOjpsb2dBaXJSZWdpc3RlclByZXNzdXJlKCkpIHsKKyAgICAgICAgICAgIGRhdGFM
b2coIlJlZ2lzdGVyIHByZXNzdXJlIGFmdGVyIHJlZ2lzdGVyIGFsbG9jYXRpb246XG4iKTsKKyAg
ICAgICAgICAgIGxvZ1JlZ2lzdGVyUHJlc3N1cmUoY29kZSk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIC8vIFRoaXMgcmVwbGFjZXMgdXNlcyBvZiBzcGlsbCBzbG90cyB3aXRoIHJlZ2lz
dGVycyBvciBjb25zdGFudHMgaWYgcG9zc2libGUuIEl0CisgICAgICAgIC8vIGRvZXMgdGhpcyBi
eSBtaW5pbWl6aW5nIHRoZSBhbW91bnQgdGhhdCB3ZSBwZXJ0dXJiIHRoZSBhbHJlYWR5LWNob3Nl
biByZWdpc3RlcgorICAgICAgICAvLyBhbGxvY2F0aW9uLiBJdCBtYXkgZXh0ZW5kIHRoZSBsaXZl
IHJhbmdlcyBvZiByZWdpc3RlcnMgdGhvdWdoLgogICAgICAgICBmaXhPYnZpb3VzU3BpbGxzKGNv
ZGUpOworICAgICAgICAKKyAgICAgICAgbG93ZXJBZnRlclJlZ0FsbG9jKGNvZGUpOworICAgICAg
ICAKKyAgICAgICAgLy8gVGhpcyBkb2VzIGZpcnN0LWZpdCBhbGxvY2F0aW9uIG9mIHN0YWNrIHNs
b3RzIHVzaW5nIGFuIGludGVyZmVyZW5jZSBncmFwaCBwbHVzIGEKKyAgICAgICAgLy8gYnVuY2gg
b2Ygb3RoZXIgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgYWxsb2NhdGVTdGFja0J5R3JhcGhDb2xv
cmluZyhjb2RlKTsKICAgICB9Ci0KLSAgICBsb3dlckFmdGVyUmVnQWxsb2MoY29kZSk7Ci0KLSAg
ICAvLyBQcmlvciB0byB0aGlzIHBvaW50IHRoZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUgaXMgaW1w
bGljaXQuIFRoaXMgbWFrZXMgaXQgZXhwbGljaXQuIEl0IGFsc28KLSAgICAvLyBkb2VzIHRoaW5n
cyBsaWtlIGlkZW50aWZ5IHdoaWNoIGNhbGxlZS1zYXZlcyB3ZSdyZSB1c2luZyBhbmQgc2F2ZXMg
dGhlbS4KLSAgICBoYW5kbGVDYWxsZWVTYXZlcyhjb2RlKTsKLSAgICAKLSAgICAvLyBUaGlzIHR1
cm5zIGFsbCBTdGFjayBhbmQgQ2FsbEFyZyBBcmdzIGludG8gQWRkciBhcmdzIHRoYXQgdXNlIHRo
ZSBmcmFtZSBwb2ludGVyLiBJdCBkb2VzCi0gICAgLy8gdGhpcyBieSBmaXJzdC1maXQgYWxsb2Nh
dGluZyBzdGFjayBzbG90cy4gSXQgc2hvdWxkIGJlIHByZXR0eSBkYXJuIGNsb3NlIHRvIG9wdGlt
YWwsIHNvIHdlCi0gICAgLy8gc2hvdWxkbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhpcyB2ZXJ5
IG11Y2guCi0gICAgYWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZyhjb2RlKTsKKyAgICAKKyAg
ICAvLyBUaGlzIHR1cm5zIGFsbCBTdGFjayBhbmQgQ2FsbEFyZyBBcmdzIGludG8gQWRkciBhcmdz
IHRoYXQgdXNlIHRoZSBmcmFtZSBwb2ludGVyLgorICAgIGxvd2VyU3RhY2tBcmdzKGNvZGUpOwog
ICAgIAogICAgIC8vIElmIHdlIGNvYWxlc2NlZCBtb3ZlcyB0aGVuIHdlIGNhbiB1bmJyZWFrIGNy
aXRpY2FsIGVkZ2VzLiBUaGlzIGlzIHRoZSBtYWluIHJlYXNvbiBmb3IgdGhpcwogICAgIC8vIHBo
YXNlLgpAQCAtMjEyLDcgKzIxNSw3IEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxI
ZWxwZXJzJiAKICAgICAgICAgICAgIGlmIChjb2RlLmZyYW1lU2l6ZSgpKQogICAgICAgICAgICAg
ICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNvZGUuZnJhbWVTaXpl
KCkpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5j
YWxsZWVTYXZlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgICAgIGZvciAoY29uc3QgUmVnaXN0ZXJB
dE9mZnNldCYgZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpCiAgICAgICAgICAgICAg
ICAgICAgIGppdC5zdG9yZVB0cihlbnRyeS5yZWcoKS5ncHIoKSwgYXJnRm9yKGVudHJ5KSk7CiAg
ICAgICAgICAgICAgICAgZWxzZQpAQCAtMjQ5LDcgKzI1Miw3IEBAIHZvaWQgZ2VuZXJhdGUoQ29k
ZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiAKICAgICAgICAgICAgIC8vIGhhdmUgdGhpcyBvdmVycmlk
ZS4KICAgICAgICAgICAgIGF1dG8gc3RhcnQgPSBqaXQubGFiZWxJZ25vcmluZ1dhdGNocG9pbnRz
KCk7CiAgICAgICAgICAgICBpZiAoY29kZS5mcmFtZVNpemUoKSkgewotICAgICAgICAgICAgICAg
IGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdp
c3RlcnMoKSkgeworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYg
ZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgaml0LmxvYWRQdHIoYXJnRm9yKGVudHJ5KSwgZW50cnkucmVnKCkuZ3ByKCkpOwogICAg
ICAgICAgICAgICAgICAgICBlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAkocmV2aXNpb24gMjE1MjM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMCwxNCArMzAsMTEgQEAKIAogI2luY2x1ZGUgIkFpckNvZGUu
aCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgotI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUu
aCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCiB2
b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmIGNvZGUpCiB7Ci0gICAgUGhhc2VTY29wZSBwaGFz
ZVNjb3BlKGNvZGUsICJoYW5kbGVDYWxsZWVTYXZlcyIpOwotCiAgICAgUmVnaXN0ZXJTZXQgdXNl
ZENhbGxlZVNhdmVzOwogCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKQEAg
LTYxLDE2ICs1OCwxNSBAQCB2b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmIGNvZGUpCiAgICAg
aWYgKCF1c2VkQ2FsbGVlU2F2ZXMubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkgPSBSZWdpc3RlckF0T2Zmc2V0
TGlzdCh1c2VkQ2FsbGVlU2F2ZXMpOworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IGNhbGxlZVNh
dmVSZWdpc3RlcnMgPSBSZWdpc3RlckF0T2Zmc2V0TGlzdCh1c2VkQ2FsbGVlU2F2ZXMpOwogCiAg
ICAgc2l6ZV90IGJ5dGVTaXplID0gMDsKLSAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQm
IGVudHJ5IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpCisgICAgZm9yIChjb25zdCBSZWdp
c3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNhbGxlZVNhdmVSZWdpc3RlcnMpCiAgICAgICAgIGJ5dGVT
aXplID0gc3RkOjptYXgoc3RhdGljX2Nhc3Q8c2l6ZV90PigtZW50cnkub2Zmc2V0KCkpLCBieXRl
U2l6ZSk7CiAKLSAgICBTdGFja1Nsb3QqIHNhdmVzQXJlYSA9IGNvZGUuYWRkU3RhY2tTbG90KGJ5
dGVTaXplLCBTdGFja1Nsb3RLaW5kOjpMb2NrZWQpOwotICAgIC8vIFRoaXMgaXMgYSBiaXQgd2Vp
cmQgc2luY2Ugd2UgY291bGQgaGF2ZSBhbHJlYWR5IHBpbm5lZCBhIGRpZmZlcmVudCBzdGFjayBz
bG90IHRvIHRoaXMKLSAgICAvLyBhcmVhLiBBbHNvLCBvdXIgcnVudGltZSBkb2VzIG5vdCByZXF1
aXJlIHVzIHRvIHBpbiB0aGUgc2F2ZXMgYXJlYS4gTWF5YmUgd2Ugc2hvdWxkbid0IHBpbiBpdD8K
LSAgICBzYXZlc0FyZWEtPnNldE9mZnNldEZyb21GUCgtYnl0ZVNpemUpOworICAgIGNvZGUuc2V0
Q2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KAorICAgICAgICBXVEZNb3ZlKGNhbGxlZVNh
dmVSZWdpc3RlcnMpLAorICAgICAgICBjb2RlLmFkZFN0YWNrU2xvdChieXRlU2l6ZSwgU3RhY2tT
bG90S2luZDo6TG9ja2VkKSk7CiB9CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNh
bGxlZVNhdmVzLmgJKHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw4ICszMSw5IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UKIAogY2xhc3MgQ29kZTsK
IAotLy8gVGhpcyBwaGFzZSBpZGVudGlmaWVzIGNhbGxlZS1zYXZlIHJlZ2lzdGVycyBhbmQgYWRk
cyBjb2RlIHRvIHNhdmUvcmVzdG9yZSB0aGVtIGluIHRoZQotLy8gcHJvbG9ndWUvZXBpbG9ndWUg
dG8gdGhlIGNvZGUuIEl0J3MgYSBtYW5kYXRvcnkgcGhhc2UuCisvLyBUaGlzIHV0aWxpdHkgaWRl
bnRpZmllcyBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgYW5kIHRlbGxzIENvZGUuIEl0J3MgY2FsbGVk
IGZyb20gcGhhc2VzIHRoYXQKKy8vIGRvIHN0YWNrIGFsbG9jYXRpb24uIFdlIGRvbid0IGRvIGl0
IGF0IHRoZSBlbmQgb2YgcmVnaXN0ZXIgYWxsb2NhdGlvbiBiZWNhdXNlIHRoZSByZWFsIGVuZAor
Ly8gb2YgcmVnaXN0ZXIgYWxsb2NhdGlvbiBpcyBqdXN0IGJlZm9yZSBzdGFjayBhbGxvY2F0aW9u
LgogCiAvLyBGSVhNRTogSXQgd291bGQgYmUgY29vbCB0byBtYWtlIHRoaXMgbW9yZSBpbnRlcmFj
dGl2ZSB3aXRoIHRoZSBBaXIgY2xpZW50IGFuZCBhbHNvIG1vcmUKIC8vIHBvd2VyZnVsLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRl
clJlZ0FsbG9jLmNwcAkocmV2aXNpb24gMjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3
ICs3NSw3IEBAIHZvaWQgbG93ZXJBZnRlclJlZ0FsbG9jKENvZGUmIGNvZGUpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIEhhc2hNYXA8SW5zdCosIFJlZ2lzdGVyU2V0PiB1c2VkUmVnaXN0ZXJzOwot
CisgICAgCiAgICAgUmVnTGl2ZW5lc3MgbGl2ZW5lc3MoY29kZSk7CiAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IGNvZGUpIHsKICAgICAgICAgUmVnTGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2Nh
bENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKQEAgLTk2LDEzICs5NiwyOSBAQCB2b2lkIGxvd2VyQWZ0
ZXJSZWdBbGxvYyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMuYWRk
KCZpbnN0LCBzZXQpOwogICAgICAgICB9CiAgICAgfQotCisgICAgCisgICAgc3RkOjphcnJheTxz
dGQ6OmFycmF5PFN0YWNrU2xvdCosIDI+LCBudW1CYW5rcz4gc2xvdHM7CisgICAgZm9yRWFjaEJh
bmsoCisgICAgICAgIFsmXSAoQmFuayBiYW5rKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgMjsgKytpKQorICAgICAgICAgICAgICAgIHNsb3RzW2JhbmtdW2ldID0gbnVs
bHB0cjsKKyAgICAgICAgfSk7CisKKyAgICAvLyBJZiB3ZSBydW4gYWZ0ZXIgc3RhY2sgYWxsb2Nh
dGlvbiB0aGVuIHdlIGNhbm5vdCB1c2UgdGhvc2UgY2FsbGVlIHNhdmVzIHRoYXQgYXJlbid0IGlu
CisgICAgLy8gdGhlIGNhbGxlZSBzYXZlIGxpc3QuIE5vdGUgdGhhdCB3ZSBhcmUgb25seSBydW4g
YWZ0ZXIgc3RhY2sgYWxsb2NhdGlvbiBpbiAtTzEsIHNvIHRoaXMKKyAgICAvLyBraW5kIG9mIHNs
b3AgaXMgT0suCisgICAgUmVnaXN0ZXJTZXQgYmxhY2tsaXN0ZWRDYWxsZWVTYXZlczsKKyAgICBp
ZiAoY29kZS5zdGFja0lzQWxsb2NhdGVkKCkpIHsKKyAgICAgICAgYmxhY2tsaXN0ZWRDYWxsZWVT
YXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgIGJsYWNr
bGlzdGVkQ2FsbGVlU2F2ZXMuZXhjbHVkZShjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cisg
ICAgfQorICAgIAogICAgIGF1dG8gZ2V0U2NyYXRjaGVzID0gWyZdIChSZWdpc3RlclNldCBzZXQs
IEJhbmsgYmFuaykgLT4gc3RkOjphcnJheTxBcmcsIDI+IHsKICAgICAgICAgc3RkOjphcnJheTxB
cmcsIDI+IHJlc3VsdDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI7ICsraSkg
ewogICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgICAgICAgICAgZm9yIChSZWcg
cmVnIDogY29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKGJhbmspKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFzZXQuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXNldC5nZXQocmVnKSAm
JiAhYmxhY2tsaXN0ZWRDYWxsZWVTYXZlcy5nZXQocmVnKSkgewogICAgICAgICAgICAgICAgICAg
ICByZXN1bHRbaV0gPSBUbXAocmVnKTsKICAgICAgICAgICAgICAgICAgICAgc2V0LnNldChyZWcp
OwogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CkBAIC0xMTAsMTAgKzEyNiwxMCBA
QCB2b2lkIGxvd2VyQWZ0ZXJSZWdBbGxvYyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgICAg
ICByZXN1bHRbaV0gPSBBcmc6OnN0YWNrKAotICAgICAgICAgICAgICAgICAgICBjb2RlLmFkZFN0
YWNrU2xvdCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzKGNvbnNlcnZhdGl2ZVdpZHRo
KGJhbmspKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdEtpbmQ6OlNwaWxsKSk7
CisgICAgICAgICAgICAgICAgU3RhY2tTbG90KiYgc2xvdCA9IHNsb3RzW2JhbmtdW2ldOworICAg
ICAgICAgICAgICAgIGlmICghc2xvdCkKKyAgICAgICAgICAgICAgICAgICAgc2xvdCA9IGNvZGUu
YWRkU3RhY2tTbG90KGJ5dGVzKGNvbnNlcnZhdGl2ZVdpZHRoKGJhbmspKSwgU3RhY2tTbG90S2lu
ZDo6U3BpbGwpOworICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IEFyZzo6c3RhY2soc2xvdHNb
YmFua11baV0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2Vy
U3RhY2tBcmdzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckxvd2VyU3RhY2tBcmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyTG93ZXJTdGFja0FyZ3MuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmdJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyQ29k
ZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxp
bmVzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIlN0YWNrQWxpZ25t
ZW50LmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBsb3dlclN0YWNrQXJncyhDb2RlJiBj
b2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAibG93ZXJTdGFja0FyZ3Mi
KTsKKyAgICAKKyAgICAvLyBOb3cgd2UgbmVlZCB0byBkZWR1Y2UgaG93IG11Y2ggYXJndW1lbnQg
YXJlYSB3ZSBuZWVkLgorICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAg
ICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgZm9yIChBcmcmIGFy
ZyA6IGluc3QuYXJncykgeworICAgICAgICAgICAgICAgIGlmIChhcmcuaXNDYWxsQXJnKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gRm9yIG5vdywgd2UgYXNzdW1lIHRoYXQgd2UgdXNlIDgg
Ynl0ZXMgb2YgdGhlIGNhbGwgYXJnLiBCdXQgdGhhdCdzIG5vdAorICAgICAgICAgICAgICAgICAg
ICAvLyBzdWNoIGFuIGF3ZXNvbWUgYXNzdW1wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTQKKyAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGFyZy5vZmZzZXQoKSA+PSAwKTsKKyAgICAgICAgICAg
ICAgICAgICAgY29kZS5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplSW5CeXRlcyhhcmcub2Zmc2V0KCkg
KyA4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBjb2RlLnNldEZyYW1lU2l6ZShjb2RlLmZyYW1lU2l6ZSgpICsgY29kZS5jYWxsQXJn
QXJlYVNpemVJbkJ5dGVzKCkpOworCisgICAgLy8gRmluYWxseSwgdHJhbnNmb3JtIHRoZSBjb2Rl
IHRvIHVzZSBBZGRyJ3MgaW5zdGVhZCBvZiBTdGFja1Nsb3Qncy4gVGhpcyBpcyBhIGxvc3NsZXNz
CisgICAgLy8gdHJhbnNmb3JtYXRpb24gc2luY2Ugd2UgY2FuIHNlYXJjaCB0aGUgU3RhY2tTbG90
cyBhcnJheSB0byBmaWd1cmUgb3V0IHdoaWNoIFN0YWNrU2xvdCBhbnkKKyAgICAvLyBvZmZzZXQt
ZnJvbS1GUCByZWZlcnMgdG8uCisKKyAgICAvLyBGSVhNRTogVGhpcyBtYXkgcHJvZHVjZSBhZGRy
ZXNzZXMgdGhhdCBhcmVuJ3QgdmFsaWQgaWYgd2UgZW5kIHVwIHdpdGggYSBnaW5vcm1vdXMgc3Rh
Y2sgZnJhbWUuCisgICAgLy8gV2Ugd291bGQgaGF2ZSB0byBzY2F2ZW5nZSBmb3IgdGVtcG9yYXJp
ZXMgaWYgdGhpcyBoYXBwZW5lZC4gRm9ydHVuYXRlbHksIHRoaXMgY2FzZSB3aWxsIGJlCisgICAg
Ly8gZXh0cmVtZWx5IHJhcmUgc28gd2UgY2FuIGRvIGNyYXp5IHRoaW5ncyB3aGVuIGl0IGFyaXNl
cy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNTMw
CisKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0g
MDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAg
IEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIGluc3QuZm9y
RWFjaEFyZygKKyAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwg
QmFuaywgV2lkdGggd2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBzdGFja0FkZHIg
PSBbJl0gKGludDMyX3Qgb2Zmc2V0KSAtPiBBcmcgeworICAgICAgICAgICAgICAgICAgICAgICAg
QXJnIHJlc3VsdCA9IEFyZzo6c3RhY2tBZGRyKG9mZnNldCwgY29kZS5mcmFtZVNpemUoKSwgd2lk
dGgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGQVRBTDogQ291bGQgbm90IGNyZWF0ZSBzdGFjayBy
ZWZlcmVuY2UgZm9yIG9mZnNldCA9ICIsIG9mZnNldCwgIiBhbmQgd2lkdGggPSAiLCB3aWR0aCwg
IlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ29kZTpcbiIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiRkFUQUw6IENvdWxkIG5vdCBjcmVhdGUgc3RhY2sgcmVm
ZXJlbmNlIGZvciBvZmZzZXQgPSAiLCBvZmZzZXQsICIgYW5kIHdpZHRoID0gIiwgd2lkdGgsICJc
biIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgQXJnOjpTdGFjazogeworICAgICAgICAgICAgICAgICAgICAgICAg
U3RhY2tTbG90KiBzbG90ID0gYXJnLnN0YWNrU2xvdCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKEFyZzo6aXNaRGVmKHJvbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg
c2xvdC0+a2luZCgpID09IFN0YWNrU2xvdEtpbmQ6OlNwaWxsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgc2xvdC0+Ynl0ZVNpemUoKSA+IGJ5dGVzKHdpZHRoKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IGhhbmRsZSB0aGlzIHNpbXBs
ZSBjYXNlIGJlY2F1c2UgaXQncyB0aGUgb25seSBvbmUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0aGF0IGFyaXNlczogWkRlZidzIGFyZSBvbmx5IDMyLWJpdCByaWdodCBub3cuIFNv
LCB3aGVuIHdlIGhpdCB0aGVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzc2Vy
dGlvbnMgaXQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGltcGxlbWVudCB0aG9zZSBvdGhlciBraW5k
cyBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHplcm8gZmlsbHMuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC0+Ynl0ZVNpemUoKSA9PSA4
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh3aWR0aCA9PSBX
aWR0aDMyKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlz
VmFsaWRGb3JtKFN0b3JlWmVybzMyLCBBcmc6OlN0YWNrKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5zdEluZGV4ICsgMSwgU3RvcmVaZXJvMzIsIGluc3Qub3JpZ2luLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGFja0FkZHIoYXJnLm9mZnNldCgpICsgNCArIHNsb3Qt
Pm9mZnNldEZyb21GUCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBhcmcgPSBzdGFja0FkZHIoYXJnLm9mZnNldCgpICsgc2xvdC0+b2Zmc2V0
RnJvbUZQKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAg
ICAgICAgICAgICAgICAgICBhcmcgPSBzdGFja0FkZHIoYXJnLm9mZnNldCgpIC0gY29kZS5mcmFt
ZVNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgKTsKKyAgICAgICAg
fQorICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorfQorCit9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlclN0YWNr
QXJncy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
TG93ZXJTdGFja0FyZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIHR1cm5zIHN0YWNrIGFuZCBjYWxs
QXJnIHJlZmVyZW5jZXMgaW50byBhY3R1YWwgRlAtcmVsYXRpdmUgb3IgU1AtcmVsYXRpdmUgYWRk
cmVzc2VzLgorLy8gQWxzbyBmaXhlcyBaRGVmcyB0byBhbm9ueW1vdXMgc3RhY2sgc2xvdHMuCisK
K3ZvaWQgbG93ZXJTdGFja0FyZ3MoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkocmV2aXNpb24g
MjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhp
bmcuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTk3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiQWlyU3BpbGxFdmVyeXRoaW5nLmgiCi0KLSNpZiBFTkFCTEUoQjNfSklUKQotCi0j
aW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgotI2luY2x1ZGUgIkFpckNvZGUuaCIKLSNpbmNsdWRl
ICJBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oIgotI2luY2x1ZGUgIkFpckluc2VydGlvblNl
dC5oIgotI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCi0jaW5jbHVkZSAiQWlyTGl2ZW5lc3Mu
aCIKLSNpbmNsdWRlICJBaXJQYWRJbnRlcmZlcmVuY2UuaCIKLSNpbmNsdWRlICJBaXJQaGFzZVNj
b3BlLmgiCi0jaW5jbHVkZSA8d3RmL0luZGV4TWFwLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKLQotdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYg
Y29kZSkKLXsKLSAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgInNwaWxsRXZlcnl0aGlu
ZyIpOwotICAgIAotICAgIHBhZEludGVyZmVyZW5jZShjb2RlKTsKLQotICAgIC8vIFdlIHdhbnQg
dG8ga25vdyB0aGUgc2V0IG9mIHJlZ2lzdGVycyB1c2VkIGF0IGV2ZXJ5IHBvaW50IGluIGV2ZXJ5
IGJhc2ljIGJsb2NrLgotICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBWZWN0b3I8UmVnaXN0ZXJT
ZXQ+PiB1c2VkUmVnaXN0ZXJzKGNvZGUuc2l6ZSgpKTsKLSAgICBHUExpdmVuZXNzIGdwTGl2ZW5l
c3MoY29kZSk7Ci0gICAgRlBMaXZlbmVzcyBmcExpdmVuZXNzKGNvZGUpOwotICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBjb2RlKSB7Ci0gICAgICAgIEdQTGl2ZW5lc3M6OkxvY2FsQ2FsYyBn
cExvY2FsQ2FsYyhncExpdmVuZXNzLCBibG9jayk7Ci0gICAgICAgIEZQTGl2ZW5lc3M6OkxvY2Fs
Q2FsYyBmcExvY2FsQ2FsYyhmcExpdmVuZXNzLCBibG9jayk7Ci0KLSAgICAgICAgdXNlZFJlZ2lz
dGVyc1tibG9ja10ucmVzaXplKGJsb2NrLT5zaXplKCkgKyAxKTsKLQotICAgICAgICBhdXRvIHNl
dFVzZWRSZWdpc3RlcnMgPSBbJl0gKHVuc2lnbmVkIGluZGV4KSB7Ci0gICAgICAgICAgICBSZWdp
c3RlclNldCYgcmVnaXN0ZXJTZXQgPSB1c2VkUmVnaXN0ZXJzW2Jsb2NrXVtpbmRleF07Ci0gICAg
ICAgICAgICBmb3IgKFRtcCB0bXAgOiBncExvY2FsQ2FsYy5saXZlKCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAodG1wLmlzUmVnKCkpCi0gICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU2V0LnNl
dCh0bXAucmVnKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChUbXAgdG1wIDog
ZnBMb2NhbENhbGMubGl2ZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQot
ICAgICAgICAgICAgICAgICAgICByZWdpc3RlclNldC5zZXQodG1wLnJlZygpKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgLy8gR290dGEgYWNjb3VudCBmb3IgZGVhZCBhc3NpZ25tZW50
cyB0byByZWdpc3RlcnMuIFRoZXNlIG1heSBoYXBwZW4gYmVjYXVzZSB0aGUgaW5wdXQKLSAgICAg
ICAgICAgIC8vIGNvZGUgaXMgc3Vib3B0aW1hbC4KLSAgICAgICAgICAgIEluc3Q6OmZvckVhY2hE
ZWZXaXRoRXh0cmFDbG9iYmVyZWRSZWdzPFRtcD4oCi0gICAgICAgICAgICAgICAgYmxvY2stPmdl
dChpbmRleCAtIDEpLCBibG9jay0+Z2V0KGluZGV4KSwKLSAgICAgICAgICAgICAgICBbJl0gKGNv
bnN0IFRtcCYgdG1wLCBBcmc6OlJvbGUsIEJhbmssIFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICh0bXAuaXNSZWcoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU2V0
LnNldCh0bXAucmVnKCkpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9OwotCi0gICAg
ICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07
KSB7Ci0gICAgICAgICAgICBzZXRVc2VkUmVnaXN0ZXJzKGluc3RJbmRleCArIDEpOwotICAgICAg
ICAgICAgZ3BMb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOwotICAgICAgICAgICAgZnBMb2Nh
bENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOwotICAgICAgICB9Ci0gICAgICAgIHNldFVzZWRSZWdp
c3RlcnMoMCk7Ci0gICAgfQotCi0gICAgLy8gQWxsb2NhdGUgYSBzdGFjayBzbG90IGZvciBlYWNo
IHRtcC4KLSAgICBWZWN0b3I8U3RhY2tTbG90Kj4gYWxsU3RhY2tTbG90c1tudW1CYW5rc107Ci0g
ICAgZm9yICh1bnNpZ25lZCBiYW5rSW5kZXggPSAwOyBiYW5rSW5kZXggPCBudW1CYW5rczsgKyti
YW5rSW5kZXgpIHsKLSAgICAgICAgVmVjdG9yPFN0YWNrU2xvdCo+JiBzdGFja1Nsb3RzID0gYWxs
U3RhY2tTbG90c1tiYW5rSW5kZXhdOwotICAgICAgICBCYW5rIGJhbmsgPSBzdGF0aWNfY2FzdDxC
YW5rPihiYW5rSW5kZXgpOwotICAgICAgICBzdGFja1Nsb3RzLnJlc2l6ZShjb2RlLm51bVRtcHMo
YmFuaykpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0gY29kZS5udW1UbXBzKGJh
bmspOyB0bXBJbmRleC0tOykKLSAgICAgICAgICAgIHN0YWNrU2xvdHNbdG1wSW5kZXhdID0gY29k
ZS5hZGRTdGFja1Nsb3QoOCwgU3RhY2tTbG90S2luZDo6U3BpbGwpOwotICAgIH0KLQotICAgIElu
c2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7Ci0gICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IGNvZGUpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5k
ZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgewotICAgICAgICAgICAgUmVnaXN0ZXJT
ZXQmIHNldEJlZm9yZSA9IHVzZWRSZWdpc3RlcnNbYmxvY2tdW2luc3RJbmRleF07Ci0gICAgICAg
ICAgICBSZWdpc3RlclNldCYgc2V0QWZ0ZXIgPSB1c2VkUmVnaXN0ZXJzW2Jsb2NrXVtpbnN0SW5k
ZXggKyAxXTsKLSAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsK
LQotICAgICAgICAgICAgLy8gRmlyc3QgdHJ5IHRvIHNwaWxsIGRpcmVjdGx5LgotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2ldOwotCi0gICAgICAgICAgICAgICAg
aWYgKGFyZy5pc1RtcCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhcmcuaXNSZWcoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgICAg
IGlmIChpbnN0LmFkbWl0c1N0YWNrKGkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdGFj
a1Nsb3QqIHN0YWNrU2xvdCA9IGFsbFN0YWNrU2xvdHNbYXJnLmJhbmsoKV1bYXJnLnRtcEluZGV4
KCldOwotICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjpzdGFjayhzdGFja1Nsb3Qp
OwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIE5v
dyBmYWxsIGJhY2sgb24gc3BpbGxpbmcgdXNpbmcgc2VwYXJhdGUgTW92ZSdzIHRvIGxvYWQvc3Rv
cmUgdGhlIHRtcC4KLSAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcCgKLSAgICAgICAgICAgICAg
ICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQmFuayBiYW5rLCBXaWR0aCkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBTdGFj
a1Nsb3QqIHN0YWNrU2xvdCA9IGFsbFN0YWNrU2xvdHNbYmFua11bdG1wLnRtcEluZGV4KCldOwot
ICAgICAgICAgICAgICAgICAgICBBcmcgYXJnID0gQXJnOjpzdGFjayhzdGFja1Nsb3QpOwotCi0g
ICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gZmlndXJlIG91dCBhIHJlZ2lzdGVyIHRvIHVz
ZS4gSG93IHdlIGRvIHRoYXQgZGVwZW5kcyBvbiB0aGUgcm9sZS4KLSAgICAgICAgICAgICAgICAg
ICAgUmVnIGNob3NlblJlZzsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyb2xlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpVc2U6Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgQXJnOjpDb2xkVXNlOgotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDog
Y29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKGJhbmspKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFzZXRCZWZvcmUuZ2V0KHJlZykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0QmVmb3JlLnNldChyZWcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaG9zZW5SZWcgPSByZWc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBjYXNlIEFyZzo6RGVmOgotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6WkRlZjoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGNvZGUucmVnc0luUHJpb3JpdHlP
cmRlcihiYW5rKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QWZ0ZXIu
Z2V0KHJlZykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWZ0ZXIuc2V0
KHJlZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3NlblJlZyA9IHJlZzsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpVc2VEZWY6Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpVc2VaRGVmOgotICAgICAgICAgICAgICAgICAg
ICBjYXNlIEFyZzo6TGF0ZVVzZToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkxhdGVD
b2xkVXNlOgotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U2NyYXRjaDoKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBBcmc6OkVhcmx5RGVmOgotICAgICAgICAgICAgICAgICAgICBjYXNl
IEFyZzo6RWFybHlaRGVmOgotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDog
Y29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKGJhbmspKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFzZXRCZWZvcmUuZ2V0KHJlZykgJiYgIXNldEFmdGVyLmdldChyZWcpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFmdGVyLnNldChyZWcpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRCZWZvcmUuc2V0KHJlZyk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNob3NlblJlZyA9IHJlZzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpVc2VBZGRyOgotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gV2Ugd2lsbCBuZXZlciBVc2VBZGRyIGEgVG1wLCB0aGF0IGRvZXNuJ3QgbWFrZSBz
ZW5zZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjaG9zZW5SZWcpOwotCi0gICAg
ICAgICAgICAgICAgICAgIHRtcCA9IFRtcChjaG9zZW5SZWcpOwotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT0gQXJnOjpTY3JhdGNoKQotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgICAgIE9wY29kZSBt
b3ZlID0gYmFuayA9PSBHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOwotCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXgsIG1vdmUsIGluc3Qub3JpZ2luLCBhcmcsIHRtcCk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydChpbnN0SW5kZXggKyAxLCBtb3ZlLCBp
bnN0Lm9yaWdpbiwgdG1wLCBhcmcpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0g
ICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKLSAgICB9Ci0gICAgCi0gICAgZml4
U3BpbGxzQWZ0ZXJUZXJtaW5hbHMoY29kZSk7Ci19Ci0KLX0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKLQotI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgJKHJldmlzaW9uIDIx
NTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5n
LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKEIzX0pJ
VCkKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewotCi1j
bGFzcyBDb2RlOwotCi0vLyBUaGlzIGlzIGEgcGhhc2UgZm9yIHRlc3RpbmcuIEl0IGJlaGF2ZXMg
bGlrZSBhIHJlZ2lzdGVyIGFsbG9jYXRvciBpbiB0aGUgc2Vuc2UgdGhhdCBpdAotLy8gZWxpbWlu
YXRlcyB0ZW1wb3JhcmllcyBmcm9tIHRoZSBwcm9ncmFtLiBJdCBhY2NvbXBsaXNoZXMgdGhpcyBi
eSBhbHdheXMgc3BpbGxpbmcgYWxsCi0vLyB0ZW1wb3Jhcmllcy4gVGhlIHJlc3VsdGluZyBjb2Rl
IGlzIGdvaW5nIHRvIGJlIHZlcnkgaW5lZmZpY2llbnQuIFRoaXMgcGhhc2UgaXMgZ3JlYXQgaWYg
eW91Ci0vLyB0aGluayB0aGF0IHRoZXJlIGlzIGEgYnVnIGluIHRoZSByZWdpc3RlciBhbGxvY2F0
b3IuIFlvdSBjYW4gY29uZmlybSB0aGlzIGJ5IHJ1bm5pbmcgdGhpcwotLy8gcGhhc2UgaW5zdGVh
ZCBvZiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLgotLy8KLS8vIE5vdGUgdGhhdCBldmVuIHRob3Vn
aCB0aGlzIHBoYXNlIGRvZXMgdGhlIGNoZWFwZXN0IHRoaW5nIHBvc3NpYmxlLCBpdCdzIG5vdCBl
dmVuIHdyaXR0ZW4gaW4gYQotLy8gcGFydGljdWxhcmx5IGVmZmljaWVudCB3YXkuIFNvLCBkb24n
dCBnZXQgYW55IGlkZWFzIGFib3V0IHVzaW5nIHRoaXMgcGhhc2UgdG8gcmVkdWNlIGNvbXBpbGVy
Ci0vLyBsYXRlbmN5LiBJZiB5b3Ugd2FudGVkIHRvIGRvIHRoYXQsIHlvdSBzaG91bGQgY29tZSB1
cCB3aXRoIGEgY2xldmVyIGFsZ29yaXRobSBpbnN0ZWFkIG9mIHVzaW5nCi0vLyB0aGlzIHNpbGx5
IHRoaW5nLgotCi12b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJik7Ci0KLX0gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKLQotI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDIxNTIzOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpS
ZQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0PiByZWdpc3Rlck9mZnNldHMgPQotICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFJl
Z2lzdGVyQXRPZmZzZXRMaXN0PihzdGF0ZS5wcm9jLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwor
ICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PihzdGF0ZS5wcm9j
LT5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKSk7CiAgICAgaWYgKHNob3VsZER1bXBE
aXNhc3NlbWJseSgpKQogICAgICAgICBkYXRhTG9nKCJVbndpbmQgaW5mbyBmb3IgIiwgQ29kZUJs
b2NrV2l0aEpJVFR5cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCks
ICI6ICIsICpyZWdpc3Rlck9mZnNldHMsICJcbiIpOwogICAgIHN0YXRlLmdyYXBoLm1fY29kZUJs
b2NrLT5zZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKFdURk1vdmUocmVnaXN0ZXJPZmZzZXRzKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlz
dC5oCShyZXZpc2lvbiAyMTUyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lz
dGVyQXRPZmZzZXRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGlj
OgogICAgIGVudW0gT2Zmc2V0QmFzZVR5cGUgeyBGcmFtZVBvaW50ZXJCYXNlZCwgWmVyb0Jhc2Vk
IH07CiAKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOwotICAgIFJlZ2lzdGVyQXRPZmZzZXRM
aXN0KFJlZ2lzdGVyU2V0LCBPZmZzZXRCYXNlVHlwZSA9IEZyYW1lUG9pbnRlckJhc2VkKTsKKyAg
ICBleHBsaWNpdCBSZWdpc3RlckF0T2Zmc2V0TGlzdChSZWdpc3RlclNldCwgT2Zmc2V0QmFzZVR5
cGUgPSBGcmFtZVBvaW50ZXJCYXNlZCk7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2
aXNpb24gMjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOTgsNyArMzk4LDYgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBv
cHRpb25TdHJpbmc7CiAgICAgXAogICAgIHYoYm9vbCwgbG9nQjNQaGFzZVRpbWVzLCBmYWxzZSwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihkb3VibGUsIHJhcmVCbG9ja1BlbmFsdHksIDAuMDAx
LCBOb3JtYWwsIG51bGxwdHIpIFwKLSAgICB2KGJvb2wsIGFpclNwaWxsc0V2ZXJ5dGhpbmcsIGZh
bHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGFpckxpbmVhclNjYW5WZXJib3Nl
LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBhaXJMaW5lYXJTY2FuU3Bp
bGxzRXZlcnl0aGluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgYWly
Rm9yY2VCcmlnZ3NBbGxvY2F0b3IsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJl
dmlzaW9uIDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyOCw3ICsxMzI4LDcgQEAgRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bgogICAgICAgICBCMzo6cHJlcGFyZUZvckdl
bmVyYXRpb24ocHJvY2VkdXJlKTsKICAgICAgICAgQjM6OmdlbmVyYXRlKHByb2NlZHVyZSwgKmNv
bXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCk7CiAgICAgICAgIGNvbXBpbGF0aW9u
Q29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMgPSBwcm9jZWR1cmUucmVsZWFzZUJ5cHJv
ZHVjdHMoKTsKLSAgICAgICAgcmVzdWx0LT53YXNtRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0
ZXJzID0gcHJvY2VkdXJlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAgcmVzdWx0LT53
YXNtRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcHJvY2VkdXJlLmNhbGxlZVNhdmVS
ZWdpc3RlckF0T2Zmc2V0TGlzdCgpOwogICAgIH0KIAogICAgIGNyZWF0ZUpTVG9XYXNtV3JhcHBl
cihjb21waWxhdGlvbkNvbnRleHQsICpyZXN1bHQsIHNpZ25hdHVyZSwgaW5mbywgbW9kZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306877</attachid>
            <date>2017-04-11 17:08:11 -0700</date>
            <delta_ts>2017-04-12 09:51:06 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>127442</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE1MjM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMSBA
QAorMjAxNy0wNC0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEIzIC1PMSBzaG91bGQgbm90IGFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDc0MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgT25lIG9mIEIz
IC1PMSdzIGxvbmdlc3QgcnVubmluZyBwaGFzZXMgaXMgYWxsb2NhdGVTdGFja0J5R3JhcGhDb2xv
cmluZy4gT25lIGFwcHJvYWNoIHRvCisgICAgICAgIHRoaXMgd291bGQgYmUgdG8gbWFrZSB0aGF0
IHBoYXNlIGNoZWFwZXIuIEJ1dCBpdCdzIHdlaXJkIHRoYXQgdGhpcyBwaGFzZSByZXJ1bnMKKyAg
ICAgICAgbGl2ZW5lc3MgYWZ0ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbiBhbHJlYWR5IHJhbiBsaXZl
bmVzcy4gSWYgb25seSBpdCBjb3VsZCByZXVzZSB0aGUKKyAgICAgICAgbGl2ZW5lc3MgY29tcHV0
ZWQgYnkgcmVnaXN0ZXIgYWxsb2NhdGlvbiB0aGVuIGl0IHdvdWxkIHJ1biBhIGxvdCBmYXN0ZXIu
IEF0IC1PMiwgd2UgZG8KKyAgICAgICAgbm90IHdhbnQgdGhpcywgc2luY2Ugd2UgcnVuIHBoYXNl
cyBiZXR3ZWVuIHJlZ2lzdGVyIGFsbG9jYXRpb24gYW5kIHN0YWNrIGFsbG9jYXRpb24sCisgICAg
ICAgIGFuZCB0aG9zZSBwaGFzZXMgYXJlIGZyZWUgdG8gY2hhbmdlIHRoZSBsaXZlbmVzcyBvZiBz
cGlsbCBzbG90cyAoaW4gZmFjdCwKKyAgICAgICAgZml4T2J2aW91c1NwaWxscyB3aWxsIGJvdGgg
c2hvcnRlbiBhbmQgbGVuZ3RoZW4gbGl2ZSByYW5nZXMgYmVjYXVzZSBvZiBsb2FkIGFuZCBzdG9y
ZQorICAgICAgICBlbGltaW5hdGlvbiwgcmVzcGVjdGl2ZWx5KS4gQnV0IGF0IC1PMSwgd2UgZG9u
J3QgcmVhbGx5IG5lZWQgdG8gcnVuIGFueSBwaGFzZXMgYmV0d2VlbgorICAgICAgICByZWdpc3Rl
ciBhbmQgc3RhY2sgYWxsb2NhdGlvbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgY2hhbmdlcyBB
aXIncyBiYWNrZW5kIGluIHRoZSBmb2xsb3dpbmcgd2F5czoKKyAgICAgICAgCisgICAgICAgIC0g
TGluZWFyIHNjYW4gZG9lcyBzdGFjayBhbGxvY2F0aW9uLiBUaGlzIG1lYW5zIHRoYXQgd2UgZG9u
J3QgbmVlZCB0byBydW4KKyAgICAgICAgICBhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nIGF0
IGFsbC4gSW4gcmVhbGl0eSwgd2UgcmV1c2Ugc29tZSBvZiBpdHMgaW5uYXJkcywgYnV0CisgICAg
ICAgICAgd2UgZG9uJ3QgcnVuIHRoZSBleHBlbnNpdmUgcGFydCBvZiBpdCAobGl2ZW5lc3MtPmlu
dGVyZmVyZW5jZS0+Y29hbGVzY2luZy0+Y29sb3JpbmcpLgorICAgICAgICAgIFRoaXMgaXMgYSBz
cGVlZC11cCBiZWNhdXNlIHdlIG9ubHkgcnVuIGxpdmVuZXNzIG9uY2UgYW5kIHJldXNlIGl0IGZv
ciBib3RoIHJlZ2lzdGVyCisgICAgICAgICAgYW5kIHN0YWNrIGFsbG9jYXRpb24uCisgICAgICAg
IAorICAgICAgICAtIFBoYXNlcyB0aGF0IHByZXZpb3VzbHkgcmFuIGJldHdlZW4gcmVnaXN0ZXIg
YW5kIHN0YWNrIGFsbG9jYXRpb24gYXJlIHRha2VuIGNhcmUgb2YsCisgICAgICAgICAgZWFjaCBp
biBpdHMgb3duIHNwZWNpYWwgd2F5OgorICAgICAgICAgIAorICAgICAgICAgIC0+IGhhbmRsZUNh
bGxlU2F2ZXM6IHRoaXMgaXMgbm93IGEgdXRpbGl0eSBmdW5jdGlvbiBjYWxsZWQgYnkgYm90aAor
ICAgICAgICAgICAgIGFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcgYW5kIGFsbG9jYXRlUmVn
aXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uCisgICAgICAgICAgCisgICAgICAgICAgLT4gZml4
T2J2aW91c1NwaWxsczogd2UgZGlkbid0IHJ1biB0aGlzIGF0IC1PMSwgc28gbm90aGluZyBuZWVk
cyB0byBiZSBkb25lLgorICAgICAgICAgIAorICAgICAgICAgIC0+IGxvd2VyQWZ0ZXJSZWdBbGxv
YzogdGhpcyBuZWVkZWQgdG8gYmUgYWJsZSB0byBydW4gYmVmb3JlIHN0YWNrIGFsbG9jYXRpb24g
YmVjYXVzZQorICAgICAgICAgICAgIGl0IGNvdWxkIGNoYW5nZSByZWdpc3RlciB1c2FnZSAodmlz
IGEgdmlzIGNhbGxlZSBzYXZlcykgYW5kIGl0IGNvdWxkIGludHJvZHVjZQorICAgICAgICAgICAg
IHNwaWxsIHNsb3RzLiBJIGNoYW5nZWQgdGhpcyBwaGFzZSB0byBoYXZlIGEgc2Vjb25kYXJ5IG1v
ZGUgZm9yIHdoZW4gaXQgcnVucyBhZnRlcgorICAgICAgICAgICAgIHN0YWNrIGFsbG9jYXRpb24u
CisgICAgICAgIAorICAgICAgICAtIFRoZSBwYXJ0IG9mIGFsbG9jYXRlU3RhY2tCeUdyYXBoQ29s
b3JpbmcgdGhhdCBsb3dlcmVkIHN0YWNrIGFkZHJlc3NlcyBhbmQgdG9vayBjYXJlCisgICAgICAg
ICAgb2YgdGhlIGNhbGwgYXJnIGFyZWEgaXMgbm93IGEgc2VwYXJhdGUgcGhhc2UgY2FsbGVkIGxv
d2VyU3RhY2tBcmdzLiBXZSBydW4gdGhpcyBwaGFzZQorICAgICAgICAgIHJlZ2FyZGxlc3Mgb2Yg
b3B0aW1pemF0aW9uIGxldmVsLiBJdCdzIGEgY2hlYXAgYW5kIGdlbmVyYWwgbG93ZXJpbmcuCisg
ICAgICAgIAorICAgICAgICBUaGlzIGFsc28gcmVtb3ZlcyBzcGlsbEV2ZXJ5dGhpbmcsIGJlY2F1
c2Ugd2UgbmV2ZXIgdXNlIHRoYXQgcGhhc2UsIHdlIG5ldmVyIHRlc3QgaXQsCisgICAgICAgIGFu
ZCBpdCBnb3QgaW4gdGhlIHdheSBpbiB0aGlzIHJlZmFjdG9yaW5nLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBpcyBhIDIxJSBzcGVlZC11cCBvbiB3YXNtIC1PMSBjb21waWxlIHRpbWVzLgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5jcHA6CisgICAg
ICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCk6
CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmNhbGxlZVNhdmVSZWdpc3RlcnMpOiBEZWxl
dGVkLgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmg6CisgICAgICAgICogYjMvQjNTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zOjp1bmF2YWlsYWJsZVJlZ2lzdGVycyk6CisgICAgICAgICogYjMvYWlyL0FpckFs
bG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uY3BwOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2Fu
LmNwcC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6YWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5
TGluZWFyU2Nhbik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmFsbG9jYXRlUmVnaXN0ZXJzQnlM
aW5lYXJTY2FuKTogRGVsZXRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3Rl
cnNBbmRTdGFja0J5TGluZWFyU2Nhbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmguCisgICAgICAgICog
YjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZy5jcHA6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmFsbG9jYXRlRXNjYXBlZFN0YWNrU2xvdHMpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjp1cGRhdGVGcmFtZVNpemVCYXNlZE9uU3RhY2tTbG90cyk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OmFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcpOgorICAg
ICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nLmg6CisgICAgICAg
ICogYjMvYWlyL0FpckFyZy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6c3RhY2tB
ZGRyKToKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6c3RhY2tBZGRyKTogRGVsZXRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyQ29kZS5jcHA6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFkZFN0YWNrU2xvdCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkNvZGU6OnNldENhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlz
dCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmR1bXApOgorICAgICAgICAqIGIzL2Fp
ci9BaXJDb2RlLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNldFN0YWNrSXNBbGxv
Y2F0ZWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpzdGFja0lzQWxsb2NhdGVkKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVycyk6CisgICAg
ICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6cHJl
cGFyZUZvckdlbmVyYXRpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpnZW5lcmF0ZSk6Cisg
ICAgICAgICogYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcDoKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6aGFuZGxlQ2FsbGVlU2F2ZXMpOgorICAgICAgICAqIGIzL2Fpci9BaXJIYW5kbGVD
YWxsZWVTYXZlcy5oOgorICAgICAgICAqIGIzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3Bw
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpsb3dlckFmdGVyUmVnQWxsb2MpOgorICAgICAgICAq
IGIzL2Fpci9BaXJMb3dlclN0YWNrQXJncy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpsb3dlclN0YWNrQXJncyk6CisgICAgICAgICogYjMvYWlyL0Fpckxvd2VyU3RhY2tBcmdz
Lmg6IEFkZGVkLgorICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6CisgICAgICAgIChKU0M6OkIzOjp0
ZXN0UGluUmVnaXN0ZXJzKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAgICogaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0
Lmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6
Oldhc206OnBhcnNlQW5kQ29tcGlsZSk6CisKIDIwMTctMDQtMTEgIEd1aWxsYXVtZSBFbW9udCAg
PGd1aWplbW9udEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtqc2NdIEFkZCBtaXNzaW5nIE1hY3Jv
QXNzZW1ibGVyTUlQUzo6b3IzMigpIGltcGxlbWVudGF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMTUyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTczLDggKzczLDggQEAgc2V0
KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJQcmlu
dGVyLmNwcAogICAgIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAKIAorICAg
IGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmNwcAogICAg
IGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAKLSAgICBiMy9h
aXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwCiAgICAgYjMvYWlyL0FpckFs
bG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcuY3BwCiAgICAgYjMvYWlyL0FpckFyZy5jcHAKICAg
ICBiMy9haXIvQWlyQmFzaWNCbG9jay5jcHAKQEAgLTEwMCw2ICsxMDAsNyBAQCBzZXQoSmF2YVNj
cmlwdENvcmVfU09VUkNFUwogICAgIGIzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCiAg
ICAgYjMvYWlyL0Fpckxvd2VyRW50cnlTd2l0Y2guY3BwCiAgICAgYjMvYWlyL0Fpckxvd2VyTWFj
cm9zLmNwcAorICAgIGIzL2Fpci9BaXJMb3dlclN0YWNrQXJncy5jcHAKICAgICBiMy9haXIvQWly
T3B0aW1pemVCbG9ja09yZGVyLmNwcAogICAgIGIzL2Fpci9BaXJQYWRJbnRlcmZlcmVuY2UuY3Bw
CiAgICAgYjMvYWlyL0FpclBoYXNlSW5zZXJ0aW9uU2V0LmNwcApAQCAtMTA4LDcgKzEwOSw2IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdp
c3RlcnMuY3BwCiAgICAgYjMvYWlyL0FpclNpbXBsaWZ5Q0ZHLmNwcAogICAgIGIzL2Fpci9BaXJT
cGVjaWFsLmNwcAotICAgIGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCiAgICAgYjMvYWly
L0FpclN0YWNrU2xvdC5jcHAKICAgICBiMy9haXIvQWlyU3RhY2tTbG90S2luZC5jcHAKICAgICBi
My9haXIvQWlyVG1wLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsOCArMTg2LDggQEAK
IAkJMEYyNUYxQjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUQxODE2MzVG
MzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkFDNTY2MUU4QTBCNzcwMDAxRUUzRiAvKiBB
aXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2NDFFOEEwQjc2MDAwMUVFM0YgLyogQWlyRml4U3Bp
bGxzQWZ0ZXJUZXJtaW5hbHMuY3BwICovOyB9OwogCQkwRjJBQzU2NzFFOEEwQjc5MDAwMUVFM0Yg
LyogQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkFDNTY1MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJGaXhT
cGlsbHNBZnRlclRlcm1pbmFscy5oICovOyB9OwotCQkwRjJBQzU2QTFFOEEwQkQzMDAwMUVFM0Yg
LyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8q
IEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcCAqLzsgfTsKLQkJMEYyQUM1NkIx
RThBMEJENTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJBQzU2OTFFOEEw
QkQxMDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLzsgfTsK
KwkJMEYyQUM1NkExRThBMEJEMzAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3Rh
Y2tCeUxpbmVhclNjYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQUM1NjgxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJz
QW5kU3RhY2tCeUxpbmVhclNjYW4uY3BwICovOyB9OworCQkwRjJBQzU2QjFFOEEwQkQ1MDAwMUVF
M0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NjkxRThBMEJEMTAw
MDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uaCAqLzsg
fTsKIAkJMEYyQUM1NkUxRThEN0IwMDAwMDFFRTNGIC8qIEFpclBoYXNlSW5zZXJ0aW9uU2V0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkFDNTZD
MUU4RDdBRkYwMDAxRUUzRiAvKiBBaXJQaGFzZUluc2VydGlvblNldC5jcHAgKi87IH07CiAJCTBG
MkFDNTZGMUU4RDdCMDMwMDAxRUUzRiAvKiBBaXJQaGFzZUluc2VydGlvblNldC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQUM1NkQxRThEN0FGRjAw
MDFFRTNGIC8qIEFpclBoYXNlSW5zZXJ0aW9uU2V0LmggKi87IH07CiAJCTBGMkFDNTcxMUU4RUU0
NTQwMDAxRUUzRiAvKiBBaXJGb3JtVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkFDNTcwMUU4RUU0NTIwMDAxRUUzRiAvKiBBaXJGb3JtVGFi
bGUuaCAqLzsgfTsKQEAgLTQ1NSw2ICs0NTUsOCBAQAogCQkwRjVBRTJDNDFERjRGMjgwMDA2NkVG
RTEgLyogVk1JbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMgLyogVk1JbmxpbmVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1QjRBMzMxQzg0RjBE
NjAwRjFCMTdFIC8qIFNsb3dQYXRoUmV0dXJuVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QjRBMzIxQzg0RjBENjAwRjFCMTdFIC8qIFNsb3dQ
YXRoUmV0dXJuVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGNUNGOTgxMUU5NkYxN0YwMEMxODY5MiAvKiBBaXJUbXBNYXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUNGOTgwMUU5NkYxN0Qw
MEMxODY5MiAvKiBBaXJUbXBNYXAuaCAqLzsgfTsKKwkJMEY1Q0Y5ODQxRTlENTM3NzAwQzE4Njky
IC8qIEFpckxvd2VyU3RhY2tBcmdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjVDRjk4MzFFOUQ1Mzc1MDBDMTg2OTIgLyogQWlyTG93ZXJTdGFja0Fy
Z3MuaCAqLzsgfTsKKwkJMEY1Q0Y5ODUxRTlENTM3QTAwQzE4NjkyIC8qIEFpckxvd2VyU3RhY2tB
cmdzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NUNGOTgyMUU5RDUzNzUwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5jcHAgKi87IH07CiAJ
CTBGNUQwODVEMUI4Q0Y5OUQwMDExNDNCNCAvKiBERkdOb2RlT3JpZ2luLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUQwODVDMUI4Q0Y5OUQwMDEx
NDNCNCAvKiBERkdOb2RlT3JpZ2luLmNwcCAqLzsgfTsKIAkJMEY1RUY5MUUxNjg3OEY3QTAwM0U1
QzI1IC8qIEpJVFRodW5rcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjVFRjkxQjE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmNwcCAqLzsg
fTsKIAkJMEY1RUY5MUYxNjg3OEY3RDAwM0U1QzI1IC8qIEpJVFRodW5rcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RUY5MUMxNjg3OEY3ODAwM0U1
QzI1IC8qIEpJVFRodW5rcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC05NTksOCArOTYxLDYgQEAKIAkJMEZFQzg1ODQxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclBoYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NTVGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi87
IH07CiAJCTBGRUM4NTg3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYyMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLzsgfTsKIAkJMEZFQzg1ODgxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NTYzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggKi87IH07
Ci0JCTBGRUM4NTg5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjQxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5jcHAgKi87IH07Ci0JCTBGRUM4NThB
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY1MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCAqLzsgfTsKIAkJMEZFQzg1OEIxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclN0YWNrU2xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODU2NjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmNwcCAq
LzsgfTsKIAkJMEZFQzg1OEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjcxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oICovOyB9OwogCQkwRkVDODU4RDFCREFDREM3MDA4
MEZGNzQgLyogQWlyVG1wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwICovOyB9OwpA
QCAtMjczMSw4ICsyNzMxLDggQEAKIAkJMEYyNUYxQUQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNs
b3dQYXRoQ2FsbEtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTbG93
UGF0aENhbGxLZXkuaDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGxLZXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQUM1NjQxRThBMEI3NjAwMDFFRTNGIC8qIEFpckZpeFNw
aWxsc0FmdGVyVGVybWluYWxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEFpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJGaXhT
cGlsbHNBZnRlclRlcm1pbmFscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MkFDNTY1MUU4QTBCNzYwMDAxRUUzRiAvKiBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFscy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJGaXhTcGlsbHNBZnRlclRlcm1pbmFs
cy5oOyBwYXRoID0gYjMvYWlyL0FpckZpeFNwaWxsc0FmdGVyVGVybWluYWxzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMkFDNTY4MUU4QTBCRDEwMDAxRUUzRiAvKiBBaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHA7IHBhdGggPSBi
My9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwRjJBQzU2OTFFOEEwQkQxMDAwMUVFM0YgLyogQWlyQWxsb2NhdGVS
ZWdpc3RlcnNCeUxpbmVhclNjYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaDsgcGF0aCA9IGIzL2Fpci9BaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjJBQzU2ODFFOEEwQkQxMDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFj
a0J5TGluZWFyU2Nhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBB
aXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmNwcDsgcGF0aCA9IGIzL2Fp
ci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQUM1NjkxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9j
YXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5oOyBw
YXRoID0gYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQUM1NkMxRThEN0FGRjAwMDFFRTNGIC8q
IEFpclBoYXNlSW5zZXJ0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEFpclBoYXNlSW5zZXJ0aW9uU2V0LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJQaGFzZUlu
c2VydGlvblNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkFDNTZEMUU4
RDdBRkYwMDAxRUUzRiAvKiBBaXJQaGFzZUluc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBBaXJQaGFzZUluc2VydGlvblNldC5oOyBwYXRoID0gYjMvYWlyL0Fp
clBoYXNlSW5zZXJ0aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkFD
NTcwMUU4RUU0NTIwMDAxRUUzRiAvKiBBaXJGb3JtVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQWlyRm9ybVRhYmxlLmg7IHBhdGggPSBiMy9haXIvQWlyRm9ybVRhYmxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTk1LDYgKzI5OTUsOCBAQAogCQkw
RjVBNjI4MjE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBGVExWYWx1ZVJhbmdlLmg7IHBhdGggPSBmdGwvRlRMVmFsdWVS
YW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVCNEEzMjFDODRGMEQ2MDBG
MUIxN0UgLyogU2xvd1BhdGhSZXR1cm5UeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNsb3dQYXRoUmV0dXJuVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjVDRjk4MDFFOTZGMTdEMDBDMTg2OTIgLyogQWlyVG1wTWFwLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEFpclRtcE1hcC5oOyBwYXRoID0gYjMvYWlyL0FpclRtcE1hcC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVDRjk4MjFFOUQ1Mzc1MDBDMTg2OTIg
LyogQWlyTG93ZXJTdGFja0FyZ3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQWlyTG93ZXJTdGFja0FyZ3MuY3BwOyBwYXRoID0gYjMvYWlyL0Fpckxvd2VyU3RhY2tB
cmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1Q0Y5ODMxRTlENTM3NTAw
QzE4NjkyIC8qIEFpckxvd2VyU3RhY2tBcmdzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEFpckxvd2VyU3RhY2tBcmdzLmg7IHBhdGggPSBiMy9haXIvQWlyTG93ZXJTdGFja0Fy
Z3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RDA4NUMxQjhDRjk5RDAwMTE0
M0I0IC8qIERGR05vZGVPcmlnaW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHTm9kZU9yaWdpbi5jcHA7IHBhdGggPSBkZmcvREZHTm9kZU9yaWdpbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUVGOTFCMTY4NzhGNzgwMDNFNUMyNSAvKiBK
SVRUaHVua3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUVGh1
bmtzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RUY5MUMxNjg3OEY3ODAw
M0U1QzI1IC8qIEpJVFRodW5rcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
SVRUaHVua3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1MTIsOCArMzUxNCw2
IEBACiAJCTBGRUM4NTVGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclBoYXNlU2NvcGUuaDsgcGF0aCA9IGIzL2Fp
ci9BaXJQaGFzZVNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NTYy
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEFpclNwZWNpYWwuY3BwOyBwYXRoID0gYjMvYWlyL0FpclNwZWNpYWwu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODU2MzFCREFDREM3MDA4MEZG
NzQgLyogQWlyU3BlY2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJT
cGVjaWFsLmg7IHBhdGggPSBiMy9haXIvQWlyU3BlY2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkwRkVDODU2NDFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5n
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclNwaWxsRXZlcnl0
aGluZy5jcHA7IHBhdGggPSBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZFQzg1NjUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxs
RXZlcnl0aGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJTcGlsbEV2
ZXJ5dGhpbmcuaDsgcGF0aCA9IGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg1NjYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNr
U2xvdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJTdGFja1Ns
b3QuY3BwOyBwYXRoID0gYjMvYWlyL0FpclN0YWNrU2xvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGRUM4NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3RhY2tTbG90Lmg7IHBhdGggPSBi
My9haXIvQWlyU3RhY2tTbG90Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4
NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyVG1wLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJUbXAuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTU3NywxMCArNTU3NywxMCBAQAogCQkwRkVDODRC
MzFCREFDRDg4MDA4MEZGNzQgLyogYWlyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQkwRjJBQzU2ODFFOEEwQkQxMDAwMUVFM0YgLyogQWlyQWxsb2NhdGVS
ZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5jcHAgKi8sCisJCQkJMEYyQUM1NjkxRThBMEJE
MTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uaCAq
LywKIAkJCQk3OTY1QzIxNDFFNUQ3OTk2MDBCNzU5MUQgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNC
eUdyYXBoQ29sb3JpbmcuY3BwICovLAogCQkJCTc5NjVDMjE1MUU1RDc5OTYwMEI3NTkxRCAvKiBB
aXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5oICovLAotCQkJCTBGMkFDNTY4MUU4
QTBCRDEwMDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAgKi8s
Ci0JCQkJMEYyQUM1NjkxRThBMEJEMTAwMDFFRTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlM
aW5lYXJTY2FuLmggKi8sCiAJCQkJMEZFQzg1NDgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9j
YXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcuY3BwICovLAogCQkJCTBGRUM4NTQ5MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nLmggKi8sCiAJCQkJMEZFQzg1
NEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgKi8sCkBAIC01NjM5LDYgKzU2MzksOCBA
QAogCQkJCTBGREY3MDg0MUQzRjJDMUYwMDkyNzQ0OSAvKiBBaXJMb3dlckVudHJ5U3dpdGNoLmgg
Ki8sCiAJCQkJMEY2MTgzMjcxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckxvd2VyTWFjcm9zLmNwcCAq
LywKIAkJCQkwRjYxODMyODFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNyb3MuaCAqLywK
KwkJCQkwRjVDRjk4MjFFOUQ1Mzc1MDBDMTg2OTIgLyogQWlyTG93ZXJTdGFja0FyZ3MuY3BwICov
LAorCQkJCTBGNUNGOTgzMUU5RDUzNzUwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5oICov
LAogCQkJCTI2NDA5MUZBMUJFMkZENDEwMDY4NERCMiAvKiBBaXJPcGNvZGUub3Bjb2RlcyAqLywK
IAkJCQkwRkIzODc4QzFCRkJDNDREMDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVyLmNw
cCAqLywKIAkJCQkwRkIzODc4RDFCRkJDNDREMDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09y
ZGVyLmggKi8sCkBAIC01NjU2LDggKzU2NTgsNiBAQAogCQkJCTBGMzM4REZDMUJFRDUxMjcwMDEz
Qzg4RiAvKiBBaXJTaW1wbGlmeUNGRy5oICovLAogCQkJCTBGRUM4NTYyMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJTcGVjaWFsLmNwcCAqLywKIAkJCQkwRkVDODU2MzFCREFDREM3MDA4MEZGNzQgLyog
QWlyU3BlY2lhbC5oICovLAotCQkJCTBGRUM4NTY0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGls
bEV2ZXJ5dGhpbmcuY3BwICovLAotCQkJCTBGRUM4NTY1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJT
cGlsbEV2ZXJ5dGhpbmcuaCAqLywKIAkJCQkwRkVDODU2NjFCREFDREM3MDA4MEZGNzQgLyogQWly
U3RhY2tTbG90LmNwcCAqLywKIAkJCQkwRkVDODU2NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3Rh
Y2tTbG90LmggKi8sCiAJCQkJMEYyQkJEOUIxQzVGRjQwNTAwMjNFRjIzIC8qIEFpclN0YWNrU2xv
dEtpbmQuY3BwICovLApAQCAtODEzOCw3ICs4MTM4LDYgQEAKIAkJCQkwRjQ1NzAzRDFCRTQ1RjBB
MDA2MkE2MjkgLyogQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYzMzhERkUxQkVENTEyNzAwMTNDODhGIC8qIEFpclNpbXBsaWZ5Q0ZHLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkVDODU4ODFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMEZFQzg1OEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGlu
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1OEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0
YWNrU2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkJEOUUxQzVGRjQwNTAwMjNFRjIzIC8q
IEFpclN0YWNrU2xvdEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NThFMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJUbXAuaCBpbiBIZWFkZXJzICovLApAQCAtODIxNCw3ICs4MjEzLDcgQEAK
IAkJCQkwRkVDODUxMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUM4NTEyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFs
dWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNDIyQTYzMUMxNThFNkQwMEUyRUI5OCAvKiBCM0Nv
bnN0RmxvYXRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYyQUM1NkIxRThBMEJENTAwMDFF
RTNGIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjJBQzU2QjFFOEEwQkQ1MDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRT
dGFja0J5TGluZWFyU2Nhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1QjMxQkRFRDk1NzAw
ODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhERjYx
QkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQzYzQjgxRTYzNDNGNzAwQzEzODM5IC8qIEIzR2VuZXJpY0Jsb2NrSW5zZXJ0aW9uU2V0
LmggaW4gSGVhZGVycyAqLywKQEAgLTg5NzcsNiArODk3Niw3IEBACiAJCQkJQTUxMDA3QzExODdD
QzNDNjAwQjM4ODc5IC8qIEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTUwRTRCNjQxODgwOURENTAwNjhBNDZEIC8qIEpTR2xvYmFsT2JqZWN0
UnVudGltZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJDNjNDNDFFNjlFRjk0MDBDMTM4
MzkgLyogQjNNZW1vcnlWYWx1ZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNUNGOTg0
MUU5RDUzNzcwMEMxODY5MiAvKiBBaXJMb3dlclN0YWNrQXJncy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTUwM0ZBMkExODhGMTA1OTAwMTEwRjE0IC8qIEpTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdT
ZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MTNFNUMwMTg1QkZBQ0MwMDdFOTVBRCAvKiBK
U0luamVjdGVkU2NyaXB0SG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUxM0U1QzIxODVCRkFD
QzAwN0U5NUFEIC8qIEpTSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKQEAgLTEwMDI1LDcgKzEwMDI1LDYgQEAKIAkJCQkwRjQ1NzAzQzFCRTQ1RjBBMDA2MkE2Mjkg
LyogQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjMzOERG
RDFCRUQ1MTI3MDAxM0M4OEYgLyogQWlyU2ltcGxpZnlDRkcuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZFQzg1ODcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJMEZFQzg1ODkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODU4QjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3Rh
Y2tTbG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJCRDlEMUM1RkY0MDUwMDIzRUYyMyAv
KiBBaXJTdGFja1Nsb3RLaW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NThEMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDI0Niw3ICsxMDI0
NSw3IEBACiAJCQkJQTc4QTk3NzYxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjJCREMxNTE1MUM1RDREMDBDRDg5MTAgLyogREZHRml4dXBQ
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIwMTc3RjFEQ0FEQzMzMDBFQTU5NTAgLyog
REZHRmxvd0luZGV4aW5nLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGMkFDNTZBMUU4QTBCRDMw
MDAxRUUzRiAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjJBQzU2QTFFOEEwQkQzMDAwMUVFM0YgLyogQWlyQWxsb2NhdGVSZWdpc3Rl
cnNBbmRTdGFja0J5TGluZWFyU2Nhbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM5NjE3
RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3
RDg5Q0Y3MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjY5Q0M4ODE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0xMDc2MSw2ICsxMDc2MCw3IEBACiAJCQkJMTQyODA4NDIxMDdFQzA5
MzAwMTNFN0IyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2
NDJDNTEyMTUxQzA4M0QwMDQ2RDRFRiAvKiBSZWdFeHBNYXRjaGVzQXJyYXkuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQyODA4NDMxMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cE9iamVjdC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRjVDRjk4NTFFOUQ1MzdBMDBDMTg2OTIgLyogQWlyTG93ZXJT
dGFja0FyZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDQxMDdFQzA5MzAwMTNFN0Iy
IC8qIFJlZ0V4cFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTQwQzdBMDFCODJF
MUMzMDAwRjZCNzkgLyogUmVnaXN0ZXJBdE9mZnNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2
NTQwQzdBMTFCODJFMUMzMDAwRjZCNzkgLyogUmVnaXN0ZXJBdE9mZnNldExpc3QuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJ
KHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVy
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NSw5ICszNDUsOSBAQCB1bnNpZ25lZCBQcm9jZWR1
cmU6OmZyYW1lU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIGNvZGUoKS5mcmFtZVNpemUoKTsKIH0K
IAotY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QmIFByb2NlZHVyZTo6Y2FsbGVlU2F2ZVJlZ2lz
dGVycygpIGNvbnN0CitSZWdpc3RlckF0T2Zmc2V0TGlzdCBQcm9jZWR1cmU6OmNhbGxlZVNhdmVS
ZWdpc3RlckF0T2Zmc2V0TGlzdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvZGUoKS5jYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7CisgICAgcmV0dXJuIGNvZGUoKS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9m
ZnNldExpc3QoKTsKIH0KIAogVmFsdWUqIFByb2NlZHVyZTo6YWRkVmFsdWVJbXBsKFZhbHVlKiB2
YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lv
biAyMTUyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjQzLDcgKzI0Myw3IEBAIHB1YmxpYzoKICAgICBib29sIG5lZWRzVXNl
ZFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNVc2VkUmVnaXN0ZXJzOyB9CiAKICAg
ICBKU19FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCBmcmFtZVNpemUoKSBjb25zdDsKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCYgY2FsbGVlU2F2ZVJlZ2lz
dGVycygpIGNvbnN0OworICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZ2lzdGVyQXRPZmZzZXRMaXN0
IGNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpIGNvbnN0OwogCiAgICAgUENUb09yaWdp
bk1hcCYgcGNUb09yaWdpbk1hcCgpIHsgcmV0dXJuIG1fcGNUb09yaWdpbk1hcDsgfQogICAgIFBD
VG9PcmlnaW5NYXAgcmVsZWFzZVBDVG9PcmlnaW5NYXAoKSB7IHJldHVybiBXVEZNb3ZlKG1fcGNU
b09yaWdpbk1hcCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcAkocmV2aXNpb24gMjE1MjM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgsNyBAQCBSZWdpc3RlclNldCBTdGFja21hcEdlbmVy
YXRpb25QYXJhbXM6OnVuCiAgICAgUmVnaXN0ZXJTZXQgcmVzdWx0ID0gdXNlZFJlZ2lzdGVycygp
OwogICAgIAogICAgIFJlZ2lzdGVyU2V0IHVuc2F2ZWRDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0
Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZz
ZXQmIHJlZ0F0T2Zmc2V0IDogbV9jb250ZXh0LmNvZGUtPmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkK
LSAgICAgICAgdW5zYXZlZENhbGxlZVNhdmVzLmNsZWFyKHJlZ0F0T2Zmc2V0LnJlZygpKTsKKyAg
ICB1bnNhdmVkQ2FsbGVlU2F2ZXMuZXhjbHVkZShtX2NvbnRleHQuY29kZS0+Y2FsbGVlU2F2ZVJl
Z2lzdGVycygpKTsKIAogICAgIHJlc3VsdC5tZXJnZSh1bnNhdmVkQ2FsbGVlU2F2ZXMpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMjE1MjM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
MTAyLDcgKzE0MTAyLDcgQEAgdm9pZCB0ZXN0UGluUmVnaXN0ZXJzKCkKICAgICAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9yIChjb25zdCBS
ZWdpc3RlckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6IHByb2MuY2FsbGVlU2F2ZVJlZ2lzdGVycygp
KQorICAgICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcHJv
Yy5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKSkKICAgICAgICAgICAgIHVzZXNDU1Jz
IHw9IGNzcnMuZ2V0KHJlZ0F0T2Zmc2V0LnJlZygpKTsKICAgICAgICAgQ0hFQ0tfRVEodXNlc0NT
UnMsICFwaW4pOwogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFj
a0J5TGluZWFyU2Nhbi5jcHAJKHJldmlzaW9uIDIxNTIzOCkJKGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5jcHA6MjE1MjM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0Fu
ZFN0YWNrQnlMaW5lYXJTY2FuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZ0lubGluZXMuaCIKKyNpbmNs
dWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCIK
KyNpbmNsdWRlICJBaXJQaGFzZUluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxp
bmVzLmgiCisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJQYWRJbnRlcmZl
cmVuY2UuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQWlyUmVnTGl2
ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyVG1wTWFw
LmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisjaW5jbHVkZSA8d3RmL1JhbmdlLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNw
YWNlIHsKKworTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBORVZFUl9JTkxJTkUgdm9pZCBjcmFzaCgp
Cit7CisgICAgQ1JBU0goKTsKK30KKworI3VuZGVmIFJFTEVBU0VfQVNTRVJUCisjZGVmaW5lIFJF
TEVBU0VfQVNTRVJUKGFzc2VydGlvbikgZG8geyBcCisgICAgaWYgKCEoYXNzZXJ0aW9uKSkgeyBc
CisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBX
VEZfUFJFVFRZX0ZVTkNUSU9OLCAjYXNzZXJ0aW9uKTsgXAorICAgICAgICBjcmFzaCgpOyBcCisg
ICAgfSBcCit9IHdoaWxlICgwKQorCitib29sIHZlcmJvc2UoKSB7IHJldHVybiBPcHRpb25zOjph
aXJMaW5lYXJTY2FuVmVyYm9zZSgpOyB9CisKKy8vIFBoYXNlIGNvbnN0YW50cyB3ZSB1c2UgZm9y
IHRoZSBQaGFzZUluc2VydGlvblNldC4KK2NvbnN0IHVuc2lnbmVkIGZpcnN0UGhhc2UgPSAwOwor
Y29uc3QgdW5zaWduZWQgc2Vjb25kUGhhc2UgPSAxOworCit0eXBlZGVmIFJhbmdlPHNpemVfdD4g
SW50ZXJ2YWw7CisKK3N0cnVjdCBUbXBEYXRhIHsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludCgie2ludGVydmFsID0gIiwgaW50
ZXJ2YWwsICIsIHNwaWxsZWQgPSAiLCBwb2ludGVyRHVtcChzcGlsbGVkKSwgIiwgYXNzaWduZWQg
PSAiLCBhc3NpZ25lZCwgIiwgaXNVbnNwaWxsYWJsZSA9ICIsIGlzVW5zcGlsbGFibGUsICIsIHBv
c3NpYmxlUmVncyA9ICIsIHBvc3NpYmxlUmVncywgIiwgZGlkQnVpbGRQb3NzaWJsZVJlZ3MgPSAi
LCBkaWRCdWlsZFBvc3NpYmxlUmVncywgIn0iKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB2YWxp
ZGF0ZSgpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghKHNwaWxsZWQgJiYgYXNzaWdu
ZWQpKTsKKyAgICB9CisgICAgCisgICAgSW50ZXJ2YWwgaW50ZXJ2YWw7CisgICAgU3RhY2tTbG90
KiBzcGlsbGVkIHsgbnVsbHB0ciB9OworICAgIFJlZ2lzdGVyU2V0IHBvc3NpYmxlUmVnczsKKyAg
ICBSZWcgYXNzaWduZWQ7CisgICAgYm9vbCBpc1Vuc3BpbGxhYmxlIHsgZmFsc2UgfTsKKyAgICBi
b29sIGRpZEJ1aWxkUG9zc2libGVSZWdzIHsgZmFsc2UgfTsKK307CisKK3N0cnVjdCBDbG9iYmVy
IHsKKyAgICBDbG9iYmVyKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIENsb2JiZXIoc2l6ZV90
IGluZGV4LCBSZWdpc3RlclNldCByZWdzKQorICAgICAgICA6IGluZGV4KGluZGV4KQorICAgICAg
ICAsIHJlZ3MocmVncykKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KGluZGV4LCAiOiIsIHJl
Z3MpOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXggeyAwIH07CisgICAgUmVnaXN0ZXJT
ZXQgcmVnczsKK307CisKK2NsYXNzIExpbmVhclNjYW4geworcHVibGljOgorICAgIExpbmVhclNj
YW4oQ29kZSYgY29kZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgLCBtX3N0YXJ0
SW5kZXgoY29kZS5zaXplKCkpCisgICAgICAgICwgbV9tYXAoY29kZSkKKyAgICAgICAgLCBtX2lu
c2VydGlvblNldHMoY29kZS5zaXplKCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIHJ1
bigpCisgICAgeworICAgICAgICBidWlsZFJlZ2lzdGVyU2V0KCk7CisgICAgICAgIGJ1aWxkSW5k
aWNlcygpOworICAgICAgICBidWlsZEludGVydmFscygpOworICAgICAgICBpZiAoc2hvdWxkU3Bp
bGxFdmVyeXRoaW5nKCkpIHsKKyAgICAgICAgICAgIHNwaWxsRXZlcnl0aGluZygpOworICAgICAg
ICAgICAgZW1pdFNwaWxsQ29kZSgpOworICAgICAgICB9CisgICAgICAgIGZvciAoOzspIHsKKyAg
ICAgICAgICAgIHByZXBhcmVJbnRlcnZhbHMoKTsKKyAgICAgICAgICAgIG1fZGlkU3BpbGwgPSBm
YWxzZTsKKyAgICAgICAgICAgIGZvckVhY2hCYW5rKAorICAgICAgICAgICAgICAgIFsmXSAoQmFu
ayBiYW5rKSB7CisgICAgICAgICAgICAgICAgICAgIGF0dGVtcHRTY2FuKGJhbmspOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYgKCFtX2RpZFNwaWxsKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgZW1pdFNwaWxsQ29kZSgpOworICAgICAgICB9CisgICAg
ICAgIGluc2VydFNwaWxsQ29kZSgpOworICAgICAgICBhc3NpZ25SZWdpc3RlcnMoKTsKKyAgICB9
CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgYnVpbGRSZWdpc3RlclNldCgpCisgICAgeworICAg
ICAgICBmb3JFYWNoQmFuaygKKyAgICAgICAgICAgIFsmXSAoQmFuayBiYW5rKSB7CisgICAgICAg
ICAgICAgICAgbV9yZWdpc3RlcnNbYmFua10gPSBtX2NvZGUucmVnc0luUHJpb3JpdHlPcmRlcihi
YW5rKTsKKyAgICAgICAgICAgICAgICBtX3JlZ2lzdGVyU2V0W2JhbmtdLnNldEFsbChtX3JlZ2lz
dGVyc1tiYW5rXSk7CisgICAgICAgICAgICAgICAgbV91bmlmaWVkUmVnaXN0ZXJTZXQubWVyZ2Uo
bV9yZWdpc3RlclNldFtiYW5rXSk7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICB2b2lk
IGJ1aWxkSW5kaWNlcygpCisgICAgeworICAgICAgICBzaXplX3QgaW5kZXggPSAwOworICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBtX3N0YXJ0
SW5kZXhbYmxvY2tdID0gaW5kZXg7CisgICAgICAgICAgICBpbmRleCArPSBibG9jay0+c2l6ZSgp
ICogMjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXhPZkhlYWQoQmFz
aWNCbG9jayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbV9zdGFydEluZGV4W2Jsb2Nr
XTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGluZGV4T2ZUYWlsKEJhc2ljQmxvY2sqIGJsb2Nr
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4T2ZIZWFkKGJsb2NrKSArIGJsb2NrLT5zaXpl
KCkgKiAyOworICAgIH0KKyAgICAKKyAgICBJbnRlcnZhbCBpbnRlcnZhbChzaXplX3QgaW5kZXhP
ZkVhcmx5LCBBcmc6OlRpbWluZyB0aW1pbmcpCisgICAgeworICAgICAgICBzd2l0Y2ggKHRpbWlu
ZykgeworICAgICAgICBjYXNlIEFyZzo6T25seUVhcmx5OgorICAgICAgICAgICAgcmV0dXJuIElu
dGVydmFsKGluZGV4T2ZFYXJseSk7CisgICAgICAgIGNhc2UgQXJnOjpPbmx5TGF0ZToKKyAgICAg
ICAgICAgIHJldHVybiBJbnRlcnZhbChpbmRleE9mRWFybHkgKyAxKTsKKyAgICAgICAgY2FzZSBB
cmc6OkVhcmx5QW5kTGF0ZToKKyAgICAgICAgICAgIHJldHVybiBJbnRlcnZhbChpbmRleE9mRWFy
bHksIGluZGV4T2ZFYXJseSArIDIpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gSW50ZXJ2YWwoKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBidWlsZEludGVydmFscygpCisgICAgeworICAgICAgICBVbmlmaWVkVG1wTGl2ZW5lc3MgbGl2
ZW5lc3MobV9jb2RlKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBtX2NvZGUpIHsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleE9mSGVhZCA9IHRoaXMtPmluZGV4
T2ZIZWFkKGJsb2NrKTsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleE9mVGFpbCA9IHRoaXMtPmlu
ZGV4T2ZUYWlsKGJsb2NrKTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKCkpIHsKKyAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJBdCBibG9jayAiLCBwb2ludGVyRHVtcChibG9jayksICJcbiIpOwor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgaW5kZXhPZkhlYWQgPSAiLCBpbmRleE9mSGVhZCwg
IlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICBpZG5leE9mVGFpbCA9ICIsIGluZGV4
T2ZUYWlsLCAiXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6
IGxpdmVuZXNzLmxpdmVBdEhlYWQoYmxvY2spKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0bXAu
aXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9tYXBbdG1wXS5pbnRlcnZhbCB8PSBJbnRl
cnZhbChpbmRleE9mSGVhZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKFRtcCB0
bXAgOiBsaXZlbmVzcy5saXZlQXRUYWlsKGJsb2NrKSkgeworICAgICAgICAgICAgICAgIGlmICgh
dG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIG1fbWFwW3RtcF0uaW50ZXJ2YWwgfD0g
SW50ZXJ2YWwoaW5kZXhPZlRhaWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5z
aXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2Nr
LT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgICAgIHNpemVfdCBpbmRleE9mRWFybHkgPSBp
bmRleE9mSGVhZCArIGluc3RJbmRleCAqIDI7CisgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNo
VG1wKAorICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwg
QmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX21hcFt0bXBdLmludGVydmFsIHw9IGludGVydmFsKGluZGV4T2ZFYXJseSwgQXJnOjp0
aW1pbmcocm9sZSkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgUmVnTGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJs
b2NrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXV0byByZWNvcmQgPSBbJl0gKHVuc2ln
bmVkIGluc3RJbmRleCkgeworICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHJlZ3MgPSBsb2Nh
bENhbGMubGl2ZSgpOworICAgICAgICAgICAgICAgIGlmIChJbnN0KiBwcmV2ID0gYmxvY2stPmdl
dChpbnN0SW5kZXggLSAxKSkgeworICAgICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBwcmV2
UmVncyA9IHJlZ3M7CisgICAgICAgICAgICAgICAgICAgIHByZXYtPmZvckVhY2g8UmVnPigKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFsmXSAoUmVnJiByZWcsIEFyZzo6Um9sZSByb2xlLCBCYW5r
LCBXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZURl
Zihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlJlZ3MuYWRkKHJl
Zyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHByZXYtPmtpbmQub3Bjb2RlID09IFBhdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJl
dlJlZ3MubWVyZ2UocHJldi0+ZXh0cmFDbG9iYmVyZWRSZWdzKCkpOworICAgICAgICAgICAgICAg
ICAgICBwcmV2UmVncy5maWx0ZXIobV91bmlmaWVkUmVnaXN0ZXJTZXQpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoIXByZXZSZWdzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fY2xvYmJlcnMuYXBwZW5kKENsb2JiZXIoaW5kZXhPZkhlYWQgKyBpbnN0SW5kZXggKiAyIC0g
MSwgcHJldlJlZ3MpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKElu
c3QqIG5leHQgPSBibG9jay0+Z2V0KGluc3RJbmRleCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
UmVnaXN0ZXJTZXQgbmV4dFJlZ3MgPSByZWdzOworICAgICAgICAgICAgICAgICAgICBuZXh0LT5m
b3JFYWNoPFJlZz4oCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFJlZyYgcmVnLCBBcmc6
OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuZXh0UmVncy5hZGQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgICAgICBpZiAobmV4dC0+a2luZC5vcGNvZGUgPT0gUGF0Y2gpCisgICAgICAgICAg
ICAgICAgICAgICAgICBuZXh0UmVncy5tZXJnZShuZXh0LT5leHRyYUVhcmx5Q2xvYmJlcmVkUmVn
cygpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0UmVncy5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2Nsb2JiZXJzLmFwcGVuZChDbG9iYmVyKGluZGV4T2ZIZWFk
ICsgaW5zdEluZGV4ICogMiwgbmV4dFJlZ3MpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9OworICAgICAgICAgICAgCisgICAgICAgICAgICByZWNvcmQoYmxvY2stPnNpemUoKSk7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGlu
c3RJbmRleC0tOykgeworICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3RJbmRl
eCk7CisgICAgICAgICAgICAgICAgcmVjb3JkKGluc3RJbmRleCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAgIG1fY2xv
YmJlcnMuYmVnaW4oKSwgbV9jbG9iYmVycy5lbmQoKSwKKyAgICAgICAgICAgIFtdIChDbG9iYmVy
JiBhLCBDbG9iYmVyJiBiKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRl
eCA8IGIuaW5kZXg7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJi
b3NlKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkludGVydmFsczpcbiIpOworICAgICAgICAg
ICAgbV9jb2RlLmZvckVhY2hUbXAoCisgICAgICAgICAgICAgICAgWyZdIChUbXAgdG1wKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCB0bXAsICI6ICIsIG1fbWFwW3RtcF0s
ICJcbiIpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IGJvb2wgc2hvdWxkU3BpbGxFdmVyeXRoaW5nKCkKKyAgICB7CisgICAgICAgIGlmICghT3B0aW9u
czo6YWlyTGluZWFyU2NhblNwaWxsc0V2ZXJ5dGhpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIFlvdSdyZSBtZWFudCB0byBoYWNrIHRoaXMgc28g
dGhhdCB5b3Ugc2VsZWN0aXZlbHkgc3BpbGwgZXZlcnl0aGluZyBkZXBlbmRpbmcgb24gcmVhc29u
cy4KKyAgICAgICAgLy8gVGhhdCdzIHN1cGVyIHVzZWZ1bCBmb3IgZGVidWdnaW5nLgorCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwaWxsRXZlcnl0aGluZygp
CisgICAgeworICAgICAgICBtX2NvZGUuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgIFsmXSAoVG1w
IHRtcCkgeworICAgICAgICAgICAgICAgIHNwaWxsKHRtcCk7CisgICAgICAgICAgICB9KTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBwcmVwYXJlSW50ZXJ2YWxzKCkKKyAgICB7CisgICAgICAgIG1f
dG1wcy5yZXNpemUoMCk7CisgICAgICAgIAorICAgICAgICBtX2NvZGUuZm9yRWFjaFRtcCgKKyAg
ICAgICAgICAgIFsmXSAoVG1wIHRtcCkgeworICAgICAgICAgICAgICAgIFRtcERhdGEmIGRhdGEg
PSBtX21hcFt0bXBdOworICAgICAgICAgICAgICAgIGlmIChkYXRhLnNwaWxsZWQpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBk
YXRhLmFzc2lnbmVkID0gUmVnKCk7CisgICAgICAgICAgICAgICAgbV90bXBzLmFwcGVuZCh0bXAp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBzdGQ6OnNvcnQoCisgICAgICAg
ICAgICBtX3RtcHMuYmVnaW4oKSwgbV90bXBzLmVuZCgpLAorICAgICAgICAgICAgWyZdIChUbXAm
IGEsIFRtcCYgYikgeworICAgICAgICAgICAgICAgIHJldHVybiBtX21hcFthXS5pbnRlcnZhbC5i
ZWdpbigpIDwgbV9tYXBbYl0uaW50ZXJ2YWwuYmVnaW4oKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UoKSkgeworICAgICAgICAgICAgZGF0YUxvZygiVG1w
czogIiwgbGlzdER1bXAobV90bXBzKSwgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJDbG9i
YmVyczogIiwgbGlzdER1bXAobV9jbG9iYmVycyksICJcbiIpOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIFRtcCBhZGRTcGlsbFRtcFdpdGhJbnRlcnZhbChCYW5rIGJhbmssIEludGVydmFs
IGludGVydmFsKQorICAgIHsKKyAgICAgICAgVG1wRGF0YSBkYXRhOworICAgICAgICBkYXRhLmlu
dGVydmFsID0gaW50ZXJ2YWw7CisgICAgICAgIGRhdGEuaXNVbnNwaWxsYWJsZSA9IHRydWU7Cisg
ICAgICAgIAorICAgICAgICBUbXAgdG1wID0gbV9jb2RlLm5ld1RtcChiYW5rKTsKKyAgICAgICAg
bV9tYXAuYXBwZW5kKHRtcCwgZGF0YSk7CisgICAgICAgIHJldHVybiB0bXA7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXR0ZW1wdFNjYW4oQmFuayBiYW5rKQorICAgIHsKKyAgICAgICAgLy8gVGhp
cyBpcyBtb2RlbGVkIGFmdGVyIExpbmVhclNjYW5SZWdpc3RlckFsbG9jYXRpb24gaW4gRmlnLiAx
IGluCisgICAgICAgIC8vIGh0dHA6Ly9kbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD0zMzAyNTAu
CisKKyAgICAgICAgbV9hY3RpdmUuY2xlYXIoKTsKKyAgICAgICAgbV9hY3RpdmVSZWdzID0gUmVn
aXN0ZXJTZXQoKTsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBjbG9iYmVySW5kZXggPSAwOwor
ICAgICAgICBmb3IgKFRtcCYgdG1wIDogbV90bXBzKSB7CisgICAgICAgICAgICBpZiAodG1wLmJh
bmsoKSAhPSBiYW5rKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07CisgICAgICAgICAgICBzaXpl
X3QgaW5kZXggPSBlbnRyeS5pbnRlcnZhbC5iZWdpbigpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAodmVyYm9zZSgpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiSW5kZXggIyIs
IGluZGV4LCAiOiAiLCB0bXAsICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIiwg
dG1wLCAiOiAiLCBlbnRyeSwgIlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICBjbG9i
YmVySW5kZXggPSAiLCBjbG9iYmVySW5kZXgsICJcbiIpOworICAgICAgICAgICAgICAgIC8vIFRo
aXMgY291bGQgYmUgc28gbXVjaCBmYXN0ZXIuCisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2NvZGVbMF07CisgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBjYW5k
aWRhdGVCbG9jayA6IG1fY29kZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9zdGFydElu
ZGV4W2NhbmRpZGF0ZUJsb2NrXSA+IGluZGV4KQorICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrID0gY2FuZGlkYXRlQmxvY2s7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluc3RJbmRleCA9IChpbmRleCAt
IG1fc3RhcnRJbmRleFtibG9ja10gKyAxKSAvIDI7CisgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICBBdDogIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLCBpbnN0SW5kZXggPSAiLCBpbnN0SW5kZXgs
ICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBQcmV2OiAiLCBwb2ludGVyRHVt
cChibG9jay0+Z2V0KGluc3RJbmRleCAtIDEpKSwgIlxuIik7CisgICAgICAgICAgICAgICAgZGF0
YUxvZygiICAgIE5leHQ6ICIsIHBvaW50ZXJEdW1wKGJsb2NrLT5nZXQoaW5zdEluZGV4KSksICJc
biIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgQWN0aXZlOlxuIik7CisgICAgICAgICAg
ICAgICAgZm9yIChUbXAgdG1wIDogbV9hY3RpdmUpCisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgICAiLCB0bXAsICI6ICIsIG1fbWFwW3RtcF0sICJcbiIpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIGlzIEV4cGlyZU9sZEludGVydmFscyBp
biBGaWcuIDEuCisgICAgICAgICAgICB3aGlsZSAoIW1fYWN0aXZlLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgICAgIFRtcCB0bXAgPSBtX2FjdGl2ZS5maXJzdCgpOworICAgICAgICAgICAgICAg
IFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBib29sIGV4cGlyZWQgPSBlbnRyeS5pbnRlcnZhbC5lbmQoKSA8PSBpbmRleDsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWV4cGlyZWQpCisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fYWN0
aXZlLnJlbW92ZUZpcnN0KCk7CisgICAgICAgICAgICAgICAgbV9hY3RpdmVSZWdzLnJlbW92ZShl
bnRyeS5hc3NpZ25lZCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElmIG5lY2Vz
c2FyeSwgY29tcHV0ZSB0aGUgc2V0IG9mIHJlZ2lzdGVycyB0aGF0IHRoaXMgdG1wIGNvdWxkIGV2
ZW4gdXNlLiBUaGlzIGlzIG5vdAorICAgICAgICAgICAgLy8gcGFydCBvZiBGaWcuIDEsIGJ1dCBp
dCdzIGEgdGVjaG5pcXVlIHRoYXQgdGhlIGF1dGhvcnMgY2xhaW0gdG8gaGF2ZSBpbXBsZW1lbnRl
ZCBpbiBvbmUgb2YKKyAgICAgICAgICAgIC8vIHRoZWlyIHR3byBpbXBsZW1lbnRhdGlvbnMuIFRo
ZXJlIG1heSBiZSBvdGhlciBtb3JlIGVmZmljaWVudCB3YXlzIHRvIGRvIHRoaXMsIGJ1dCB0aGlz
CisgICAgICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBnZXRzIHNvbWUgcGVyZiB3aW5zIGZyb20g
cGlnZ3ktYmFja2luZyB0aGlzIGNhbGN1bGF0aW9uIGluIHRoZSBzY2FuLgorICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgZGlkQnVpbGQgZmxhZyBzdGlja3MgdGhy
b3VnaCBzcGlsbGluZy4gU3BpbGxpbmcgZG9lc24ndCBjaGFuZ2UgdGhlCisgICAgICAgICAgICAv
LyBpbnRlcmZlcmVuY2Ugc2l0dWF0aW9uLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8v
IE5vdGUgdGhhdCB3ZSBjb3VsZCBzaG9ydC1jaXJjdWl0IHRoaXMgaWYgd2UncmUgZGVhbGluZyB3
aXRoIGEgc3BpbGxhYmxlIHRtcCwgdGhlcmUgYXJlIG5vCisgICAgICAgICAgICAvLyBmcmVlIHJl
Z2lzdGVycywgYW5kIHRoaXMgcmVnaXN0ZXIncyBpbnRlcnZhbCBlbmRzIGFmdGVyIHRoZSBvbmUg
b24gdGhlIHRvcCBvZiB0aGUgYWN0aXZlCisgICAgICAgICAgICAvLyBzdGFjay4KKyAgICAgICAg
ICAgIGlmICghZW50cnkuZGlkQnVpbGRQb3NzaWJsZVJlZ3MpIHsKKyAgICAgICAgICAgICAgICAv
LyBBZHZhbmNlIHRoZSBjbG9iYmVyIGluZGV4IHVudGlsIGl0J3MgYXQgYSBjbG9iYmVyIHRoYXQg
aXMgcmVsZXZhbnQgdG8gdXMuCisgICAgICAgICAgICAgICAgd2hpbGUgKGNsb2JiZXJJbmRleCA8
IG1fY2xvYmJlcnMuc2l6ZSgpICYmIG1fY2xvYmJlcnNbY2xvYmJlckluZGV4XS5pbmRleCA8IGlu
ZGV4KQorICAgICAgICAgICAgICAgICAgICBjbG9iYmVySW5kZXgrKzsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBwb3NzaWJsZVJlZ3MgPSBtX3JlZ2lzdGVy
U2V0W2JhbmtdOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBjbG9iYmVySW5kZXg7
IGkgPCBtX2Nsb2JiZXJzLnNpemUoKSAmJiBtX2Nsb2JiZXJzW2ldLmluZGV4IDwgZW50cnkuaW50
ZXJ2YWwuZW5kKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcG9zc2libGVSZWdzLmV4Y2x1
ZGUobV9jbG9iYmVyc1tpXS5yZWdzKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBlbnRyeS5wb3NzaWJsZVJlZ3MgPSBwb3NzaWJsZVJlZ3M7CisgICAgICAgICAgICAgICAgZW50
cnkuZGlkQnVpbGRQb3NzaWJsZVJlZ3MgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAodmVyYm9zZSgpKQorICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgUG9zc2libGUgcmVnczogIiwgZW50cnkucG9zc2libGVSZWdzLCAiXG4iKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gRmluZCBhIGZyZWUgcmVnaXN0ZXIgdGhhdCB3ZSBhcmUgYWxs
b3dlZCB0byB1c2UuCisgICAgICAgICAgICBpZiAobV9hY3RpdmUuc2l6ZSgpICE9IG1fcmVnaXN0
ZXJzW2JhbmtdLnNpemUoKSkgeworICAgICAgICAgICAgICAgIGJvb2wgZGlkQXNzaWduID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogbV9yZWdpc3RlcnNbYmFua10pIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENvdWxkIGRvIHByaW9yaXR5IGNvbG9yaW5n
IGhlcmUuCisgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzAzMDQKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2FjdGl2ZVJl
Z3MuY29udGFpbnMocmVnKSAmJiBlbnRyeS5wb3NzaWJsZVJlZ3MuY29udGFpbnMocmVnKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduKHRtcCwgcmVnKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRpZEFzc2lnbiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoZGlkQXNzaWduKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBpcyBTcGlsbEF0SW50
ZXJ2YWwgaW4gRmlnLiAxLCBidXQgbW9kaWZpZWQgdG8gaGFuZGxlIGNsb2JiZXJzLgorICAgICAg
ICAgICAgVG1wIHNwaWxsVG1wID0gbV9hY3RpdmUudGFrZUxhc3QoCisgICAgICAgICAgICAgICAg
WyZdIChUbXAgc3BpbGxDYW5kaWRhdGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZW50cnkucG9zc2libGVSZWdzLmNvbnRhaW5zKG1fbWFwW3NwaWxsQ2FuZGlkYXRlXS5h
c3NpZ25lZCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAoIXNwaWxsVG1w
KSB7CisgICAgICAgICAgICAgICAgc3BpbGwodG1wKTsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFRtcERhdGEmIHNwaWxsRW50cnkgPSBtX21h
cFtzcGlsbFRtcF07CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzcGlsbEVudHJ5LmFzc2ln
bmVkKTsKKyAgICAgICAgICAgIGlmIChzcGlsbEVudHJ5LmlzVW5zcGlsbGFibGUgfHwKKyAgICAg
ICAgICAgICAgICAoIWVudHJ5LmlzVW5zcGlsbGFibGUgJiYgc3BpbGxFbnRyeS5pbnRlcnZhbC5l
bmQoKSA8PSBlbnRyeS5pbnRlcnZhbC5lbmQoKSkpIHsKKyAgICAgICAgICAgICAgICBzcGlsbCh0
bXApOworICAgICAgICAgICAgICAgIGFkZFRvQWN0aXZlKHNwaWxsVG1wKTsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
YXNzaWduKHRtcCwgc3BpbGxFbnRyeS5hc3NpZ25lZCk7CisgICAgICAgICAgICBzcGlsbChzcGls
bFRtcCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRUb0FjdGl2ZShUbXAg
dG1wKQorICAgIHsKKyAgICAgICAgaWYgKG1fbWFwW3RtcF0uaXNVbnNwaWxsYWJsZSkgeworICAg
ICAgICAgICAgbV9hY3RpdmUucHJlcGVuZCh0bXApOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBtX2FjdGl2ZS5hcHBlbmRBbmRCdWJibGUoCisgICAg
ICAgICAgICB0bXAsCisgICAgICAgICAgICBbJl0gKFRtcCBvdGhlclRtcCkgLT4gYm9vbCB7Cisg
ICAgICAgICAgICAgICAgVG1wRGF0YSYgb3RoZXJFbnRyeSA9IG1fbWFwW290aGVyVG1wXTsKKyAg
ICAgICAgICAgICAgICBpZiAob3RoZXJFbnRyeS5pc1Vuc3BpbGxhYmxlKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fbWFwW290aGVy
VG1wXS5pbnRlcnZhbC5lbmQoKSA+IG1fbWFwW3RtcF0uaW50ZXJ2YWwuZW5kKCk7CisgICAgICAg
ICAgICB9KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhc3NpZ24oVG1wIHRtcCwgUmVnIHJlZykK
KyAgICB7CisgICAgICAgIFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIWVudHJ5LnNwaWxsZWQpOworICAgICAgICBlbnRyeS5hc3NpZ25lZCA9IHJl
ZzsKKyAgICAgICAgbV9hY3RpdmVSZWdzLmFkZChyZWcpOworICAgICAgICBhZGRUb0FjdGl2ZSh0
bXApOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwaWxsKFRtcCB0bXApCisgICAgeworICAgICAg
ICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFl
bnRyeS5pc1Vuc3BpbGxhYmxlKTsKKyAgICAgICAgZW50cnkuc3BpbGxlZCA9IG1fY29kZS5hZGRT
dGFja1Nsb3QoOCwgU3RhY2tTbG90S2luZDo6U3BpbGwpOworICAgICAgICBlbnRyeS5hc3NpZ25l
ZCA9IFJlZygpOworICAgICAgICBtX2RpZFNwaWxsID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBlbWl0U3BpbGxDb2RlKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleE9mSGVhZCA9IHRoaXMtPmlu
ZGV4T2ZIZWFkKGJsb2NrKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0g
MDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAg
ICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW5kZXhPZkVhcmx5ID0gaW5kZXhPZkhlYWQgKyBpbnN0SW5kZXggKiAyOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEZpcnN0IHRyeSB0byBzcGlsbCBkaXJl
Y3RseS4KKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdz
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdz
W2ldOworICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmcuaXNSZWco
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAg
ICBTdGFja1Nsb3QqIHNwaWxsZWQgPSBtX21hcFthcmcudG1wKCldLnNwaWxsZWQ7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghc3BpbGxlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluc3QuYWRtaXRzU3RhY2soaSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgYXJnID0g
QXJnOjpzdGFjayhzcGlsbGVkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgLy8gRmFsbCBiYWNrIG9uIHRoZSBoYXJkIHdheS4KKyAgICAgICAg
ICAgICAgICBpbnN0LmZvckVhY2hUbXAoCisgICAgICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0
bXAsIEFyZzo6Um9sZSByb2xlLCBCYW5rIGJhbmssIFdpZHRoKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzcGlsbGVkID0gbV9tYXBb
dG1wXS5zcGlsbGVkOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzcGlsbGVkKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IE9wY29kZSBtb3ZlID0gYmFuayA9PSBHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOworICAgICAgICAg
ICAgICAgICAgICAgICAgdG1wID0gYWRkU3BpbGxUbXBXaXRoSW50ZXJ2YWwoYmFuaywgaW50ZXJ2
YWwoaW5kZXhPZkVhcmx5LCBBcmc6OnRpbWluZyhyb2xlKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHJvbGUgPT0gQXJnOjpTY3JhdGNoKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJv
bGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0c1tibG9ja10u
aW5zZXJ0KGluc3RJbmRleCwgc2Vjb25kUGhhc2UsIG1vdmUsIGluc3Qub3JpZ2luLCBBcmc6OnN0
YWNrKHNwaWxsZWQpLCB0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNB
bnlEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXRz
W2Jsb2NrXS5pbnNlcnQoaW5zdEluZGV4ICsgMSwgZmlyc3RQaGFzZSwgbW92ZSwgaW5zdC5vcmln
aW4sIHRtcCwgQXJnOjpzdGFjayhzcGlsbGVkKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgaW5zZXJ0U3Bp
bGxDb2RlKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUp
CisgICAgICAgICAgICBtX2luc2VydGlvblNldHNbYmxvY2tdLmV4ZWN1dGUoYmxvY2spOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGFzc2lnblJlZ2lzdGVycygpCisgICAgeworICAgICAgICBpZiAo
dmVyYm9zZSgpKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJBYm91dCB0byBhbGxvY2F0ZSByZWdp
c3RlcnMuIFN0YXRlIG9mIGFsbCB0bXBzOlxuIik7CisgICAgICAgICAgICBtX2NvZGUuZm9yRWFj
aFRtcCgKKyAgICAgICAgICAgICAgICBbJl0gKFRtcCB0bXApIHsKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgICIsIHRtcCwgIjogIiwgbV9tYXBbdG1wXSwgIlxuIik7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICBkYXRhTG9nKCJJUjpcbiIpOworICAgICAgICAgICAg
ZGF0YUxvZyhtX2NvZGUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAq
YmxvY2spIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSgpKQorICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJBdDogIiwgaW5zdCwgIlxuIik7CisgICAgICAgICAgICAgICAgaW5zdC5m
b3JFYWNoVG1wRmFzdCgKKyAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgUmVnIHJlZyA9IG1fbWFwW3RtcF0uYXNzaWduZWQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXJlZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIkZhaWxlZCB0byBhbGxvY2F0ZSByZWcgZm9yOiAiLCB0bXAsICJcbiIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBUbXAocmVn
KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgQ29kZSYgbV9jb2RlOworICAgIFZlY3RvcjxSZWc+IG1fcmVnaXN0ZXJz
W251bUJhbmtzXTsKKyAgICBSZWdpc3RlclNldCBtX3JlZ2lzdGVyU2V0W251bUJhbmtzXTsKKyAg
ICBSZWdpc3RlclNldCBtX3VuaWZpZWRSZWdpc3RlclNldDsKKyAgICBJbmRleE1hcDxCYXNpY0Js
b2NrKiwgc2l6ZV90PiBtX3N0YXJ0SW5kZXg7CisgICAgVG1wTWFwPFRtcERhdGE+IG1fbWFwOwor
ICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBQaGFzZUluc2VydGlvblNldD4gbV9pbnNlcnRpb25T
ZXRzOworICAgIFZlY3RvcjxDbG9iYmVyPiBtX2Nsb2JiZXJzOyAvLyBBZnRlciB3ZSBhbGxvY2F0
ZSB0aGlzLCB3ZSBoYXBwaWx5IHBvaW50IHBvaW50ZXJzIGludG8gaXQuCisgICAgVmVjdG9yPFRt
cD4gbV90bXBzOworICAgIERlcXVlPFRtcD4gbV9hY3RpdmU7CisgICAgUmVnaXN0ZXJTZXQgbV9h
Y3RpdmVSZWdzOworICAgIGJvb2wgbV9kaWRTcGlsbCB7IGZhbHNlIH07Cit9OworCit2b2lkIHJ1
bkxpbmVhclNjYW4oQ29kZSYgY29kZSkKK3sKKyAgICBpZiAodmVyYm9zZSgpKQorICAgICAgICBk
YXRhTG9nKCJBaXIgYmVmb3JlIGxpbmVhciBzY2FuOlxuIiwgY29kZSk7CisgICAgTGluZWFyU2Nh
biBsaW5lYXJTY2FuKGNvZGUpOworICAgIGxpbmVhclNjYW4ucnVuKCk7CisgICAgaWYgKHZlcmJv
c2UoKSkKKyAgICAgICAgZGF0YUxvZygiQWlyIGFmdGVyIGxpbmVhciBzY2FuOlxuIiwgY29kZSk7
Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIGFsbG9jYXRlUmVnaXN0ZXJz
QnlMaW5lYXJTY2FuKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNv
ZGUsICJhbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2NhbiIpOworICAgIHBhZEludGVyZmVyZW5j
ZShjb2RlKTsKKyAgICBydW5MaW5lYXJTY2FuKGNvZGUpOworICAgIGZpeFNwaWxsc0FmdGVyVGVy
bWluYWxzKGNvZGUpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5k
U3RhY2tCeUxpbmVhclNjYW4uY3BwCShyZXZpc2lvbiAyMTUyMzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMyArMjQsMTUgQEAKICAqLwogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaCIK
KyNpbmNsdWRlICJBaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmgiCiAK
ICNpZiBFTkFCTEUoQjNfSklUKQogCisjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhD
b2xvcmluZy5oIgogI2luY2x1ZGUgIkFpckFyZ0lubGluZXMuaCIKICNpbmNsdWRlICJBaXJDb2Rl
LmgiCiAjaW5jbHVkZSAiQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCIKKyNpbmNsdWRlICJB
aXJIYW5kbGVDYWxsZWVTYXZlcy5oIgogI2luY2x1ZGUgIkFpclBoYXNlSW5zZXJ0aW9uU2V0Lmgi
CiAjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKICNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgpA
QCAtODQsNiArODYsNyBAQCBzdHJ1Y3QgVG1wRGF0YSB7CiAgICAgUmVnIGFzc2lnbmVkOwogICAg
IGJvb2wgaXNVbnNwaWxsYWJsZSB7IGZhbHNlIH07CiAgICAgYm9vbCBkaWRCdWlsZFBvc3NpYmxl
UmVncyB7IGZhbHNlIH07CisgICAgdW5zaWduZWQgc3BpbGxJbmRleCB7IDAgfTsKIH07CiAKIHN0
cnVjdCBDbG9iYmVyIHsKQEAgLTExOCw2ICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9p
ZCBydW4oKQogICAgIHsKKyAgICAgICAgcGFkSW50ZXJmZXJlbmNlKG1fY29kZSk7CiAgICAgICAg
IGJ1aWxkUmVnaXN0ZXJTZXQoKTsKICAgICAgICAgYnVpbGRJbmRpY2VzKCk7CiAgICAgICAgIGJ1
aWxkSW50ZXJ2YWxzKCk7CkBAIC0xMjYsMTEgKzEzMCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBlbWl0U3BpbGxDb2RlKCk7CiAgICAgICAgIH0KICAgICAgICAgZm9yICg7OykgewotICAgICAg
ICAgICAgcHJlcGFyZUludGVydmFscygpOworICAgICAgICAgICAgcHJlcGFyZUludGVydmFsc0Zv
clNjYW5Gb3JSZWdpc3RlcnMoKTsKICAgICAgICAgICAgIG1fZGlkU3BpbGwgPSBmYWxzZTsKICAg
ICAgICAgICAgIGZvckVhY2hCYW5rKAogICAgICAgICAgICAgICAgIFsmXSAoQmFuayBiYW5rKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRTY2FuKGJhbmspOworICAgICAgICAgICAgICAg
ICAgICBhdHRlbXB0U2NhbkZvclJlZ2lzdGVycyhiYW5rKTsKICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIGlmICghbV9kaWRTcGlsbCkKICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTEzOCw2ICsxNDIsMTQgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIGluc2VydFNwaWxs
Q29kZSgpOwogICAgICAgICBhc3NpZ25SZWdpc3RlcnMoKTsKKyAgICAgICAgZml4U3BpbGxzQWZ0
ZXJUZXJtaW5hbHMobV9jb2RlKTsKKworICAgICAgICBoYW5kbGVDYWxsZWVTYXZlcyhtX2NvZGUp
OworICAgICAgICBhbGxvY2F0ZUVzY2FwZWRTdGFja1Nsb3RzKG1fY29kZSk7CisgICAgICAgIHBy
ZXBhcmVJbnRlcnZhbHNGb3JTY2FuRm9yU3RhY2soKTsKKyAgICAgICAgc2NhbkZvclN0YWNrKCk7
CisgICAgICAgIHVwZGF0ZUZyYW1lU2l6ZUJhc2VkT25TdGFja1Nsb3RzKG1fY29kZSk7CisgICAg
ICAgIG1fY29kZS5zZXRTdGFja0lzQWxsb2NhdGVkKHRydWUpOwogICAgIH0KICAgICAKIHByaXZh
dGU6CkBAIC0yNjYsNiArMjc4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBbJl0gKFRt
cCB0bXApIHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIHRtcCwgIjogIiwg
bV9tYXBbdG1wXSwgIlxuIik7CiAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBkYXRh
TG9nKCJDbG9iYmVyczogIiwgbGlzdER1bXAobV9jbG9iYmVycyksICJcbiIpOwogICAgICAgICB9
CiAgICAgfQogICAgIApAQCAtMjg4LDE3ICszMDEsMzcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IH0pOwogICAgIH0KICAgICAKLSAgICB2b2lkIHByZXBhcmVJbnRlcnZhbHMoKQorICAgIHZvaWQg
cHJlcGFyZUludGVydmFsc0ZvclNjYW5Gb3JSZWdpc3RlcnMoKQorICAgIHsKKyAgICAgICAgcHJl
cGFyZUludGVydmFscygKKyAgICAgICAgICAgIFsmXSAoVG1wLCBUbXBEYXRhJiBkYXRhKSAtPiBi
b29sIHsKKyAgICAgICAgICAgICAgICBpZiAoZGF0YS5zcGlsbGVkKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGF0
YS5hc3NpZ25lZCA9IFJlZygpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgfSk7CisgICAgfQorICAgIAorICAgIHZvaWQgcHJlcGFyZUludGVydmFsc0ZvclNjYW5G
b3JTdGFjaygpCisgICAgeworICAgICAgICBwcmVwYXJlSW50ZXJ2YWxzKAorICAgICAgICAgICAg
WyZdIChUbXAsIFRtcERhdGEmIGRhdGEpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVy
biBkYXRhLnNwaWxsZWQ7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgU2VsZWN0RnVuYz4KKyAgICB2b2lkIHByZXBhcmVJbnRlcnZhbHMoY29uc3Qg
U2VsZWN0RnVuYyYgc2VsZWN0RnVuYykKICAgICB7CiAgICAgICAgIG1fdG1wcy5yZXNpemUoMCk7
CiAgICAgICAgIAogICAgICAgICBtX2NvZGUuZm9yRWFjaFRtcCgKICAgICAgICAgICAgIFsmXSAo
VG1wIHRtcCkgewogICAgICAgICAgICAgICAgIFRtcERhdGEmIGRhdGEgPSBtX21hcFt0bXBdOwot
ICAgICAgICAgICAgICAgIGlmIChkYXRhLnNwaWxsZWQpCisgICAgICAgICAgICAgICAgaWYgKCFz
ZWxlY3RGdW5jKHRtcCwgZGF0YSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBkYXRhLmFzc2lnbmVkID0gUmVnKCk7CiAgICAg
ICAgICAgICAgICAgbV90bXBzLmFwcGVuZCh0bXApOwogICAgICAgICAgICAgfSk7CiAgICAgICAg
IApAQCAtMzA4LDEwICszNDEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBt
X21hcFthXS5pbnRlcnZhbC5iZWdpbigpIDwgbV9tYXBbYl0uaW50ZXJ2YWwuYmVnaW4oKTsKICAg
ICAgICAgICAgIH0pOwogICAgICAgICAKLSAgICAgICAgaWYgKHZlcmJvc2UoKSkgeworICAgICAg
ICBpZiAodmVyYm9zZSgpKQogICAgICAgICAgICAgZGF0YUxvZygiVG1wczogIiwgbGlzdER1bXAo
bV90bXBzKSwgIlxuIik7Ci0gICAgICAgICAgICBkYXRhTG9nKCJDbG9iYmVyczogIiwgbGlzdER1
bXAobV9jbG9iYmVycyksICJcbiIpOwotICAgICAgICB9CiAgICAgfQogICAgIAogICAgIFRtcCBh
ZGRTcGlsbFRtcFdpdGhJbnRlcnZhbChCYW5rIGJhbmssIEludGVydmFsIGludGVydmFsKQpAQCAt
MzI1LDcgKzM1Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0bXA7CiAgICAgfQogICAg
IAotICAgIHZvaWQgYXR0ZW1wdFNjYW4oQmFuayBiYW5rKQorICAgIHZvaWQgYXR0ZW1wdFNjYW5G
b3JSZWdpc3RlcnMoQmFuayBiYW5rKQogICAgIHsKICAgICAgICAgLy8gVGhpcyBpcyBtb2RlbGVk
IGFmdGVyIExpbmVhclNjYW5SZWdpc3RlckFsbG9jYXRpb24gaW4gRmlnLiAxIGluCiAgICAgICAg
IC8vIGh0dHA6Ly9kbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD0zMzAyNTAuCkBAIC01MjAsNiAr
NTUxLDQ1IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgdm9pZCBzY2Fu
Rm9yU3RhY2soKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBpcyBsb29zZWx5IG1vZGVsZWQgYWZ0
ZXIgTGluZWFyU2NhblJlZ2lzdGVyQWxsb2NhdGlvbiBpbiBGaWcuIDEgaW4KKyAgICAgICAgLy8g
aHR0cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTMzMDI1MC4KKworICAgICAgICBtX2Fj
dGl2ZS5jbGVhcigpOworICAgICAgICBtX3VzZWRTcGlsbFNsb3RzLmNsZWFyQWxsKCk7CisgICAg
ICAgIAorICAgICAgICBmb3IgKFRtcCYgdG1wIDogbV90bXBzKSB7CisgICAgICAgICAgICBUbXBE
YXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07CisgICAgICAgICAgICBpZiAoIWVudHJ5LnNwaWxsZWQp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNp
emVfdCBpbmRleCA9IGVudHJ5LmludGVydmFsLmJlZ2luKCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIFRoaXMgaXMgRXhwaXJlT2xkSW50ZXJ2YWxzIGluIEZpZy4gMS4KKyAgICAgICAg
ICAgIHdoaWxlICghbV9hY3RpdmUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgVG1wIHRt
cCA9IG1fYWN0aXZlLmZpcnN0KCk7CisgICAgICAgICAgICAgICAgVG1wRGF0YSYgZW50cnkgPSBt
X21hcFt0bXBdOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJvb2wgZXhwaXJl
ZCA9IGVudHJ5LmludGVydmFsLmVuZCgpIDw9IGluZGV4OworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGlmICghZXhwaXJlZCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9hY3RpdmUucmVtb3ZlRmlyc3QoKTsK
KyAgICAgICAgICAgICAgICBtX3VzZWRTcGlsbFNsb3RzLmNsZWFyKGVudHJ5LnNwaWxsSW5kZXgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBlbnRyeS5zcGlsbElu
ZGV4ID0gbV91c2VkU3BpbGxTbG90cy5maW5kQml0KDAsIGZhbHNlKTsKKyAgICAgICAgICAgIHB0
cmRpZmZfdCBvZmZzZXQgPSAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihtX2NvZGUuZnJhbWVTaXpl
KCkpIC0gc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihlbnRyeS5zcGlsbEluZGV4KSAqIDggLSA4Owor
ICAgICAgICAgICAgaWYgKHZlcmJvc2UoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIEFz
c2lnbmluZyBvZmZzZXQgPSAiLCBvZmZzZXQsICIgdG8gc3BpbGwgIiwgcG9pbnRlckR1bXAoZW50
cnkuc3BpbGxlZCksICIgZm9yICIsIHRtcCwgIlxuIik7CisgICAgICAgICAgICBlbnRyeS5zcGls
bGVkLT5zZXRPZmZzZXRGcm9tRlAob2Zmc2V0KTsKKyAgICAgICAgICAgIG1fdXNlZFNwaWxsU2xv
dHMuc2V0KGVudHJ5LnNwaWxsSW5kZXgpOworICAgICAgICAgICAgbV9hY3RpdmUuYXBwZW5kKHRt
cCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgdm9pZCBpbnNlcnRTcGlsbENvZGUoKQog
ICAgIHsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkKQEAgLTU2OSwx
MSArNjM5LDE1IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFRtcD4gbV90bXBzOwogICAgIERlcXVl
PFRtcD4gbV9hY3RpdmU7CiAgICAgUmVnaXN0ZXJTZXQgbV9hY3RpdmVSZWdzOworICAgIEJpdFZl
Y3RvciBtX3VzZWRTcGlsbFNsb3RzOwogICAgIGJvb2wgbV9kaWRTcGlsbCB7IGZhbHNlIH07CiB9
OwogCi12b2lkIHJ1bkxpbmVhclNjYW4oQ29kZSYgY29kZSkKK30gLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQorCit2b2lkIGFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4oQ29kZSYg
Y29kZSkKIHsKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImFsbG9jYXRlUmVnaXN0
ZXJzQW5kU3RhY2tCeUxpbmVhclNjYW4iKTsKICAgICBpZiAodmVyYm9zZSgpKQogICAgICAgICBk
YXRhTG9nKCJBaXIgYmVmb3JlIGxpbmVhciBzY2FuOlxuIiwgY29kZSk7CiAgICAgTGluZWFyU2Nh
biBsaW5lYXJTY2FuKGNvZGUpOwpAQCAtNTgyLDE2ICs2NTYsNiBAQCB2b2lkIHJ1bkxpbmVhclNj
YW4oQ29kZSYgY29kZSkKICAgICAgICAgZGF0YUxvZygiQWlyIGFmdGVyIGxpbmVhciBzY2FuOlxu
IiwgY29kZSk7CiB9CiAKLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi12b2lkIGFsbG9jYXRl
UmVnaXN0ZXJzQnlMaW5lYXJTY2FuKENvZGUmIGNvZGUpCi17Ci0gICAgUGhhc2VTY29wZSBwaGFz
ZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2NhbiIpOwotICAgIHBhZElu
dGVyZmVyZW5jZShjb2RlKTsKLSAgICBydW5MaW5lYXJTY2FuKGNvZGUpOwotICAgIGZpeFNwaWxs
c0FmdGVyVGVybWluYWxzKGNvZGUpOwotfQotCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lz
dGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmgJKHJldmlzaW9uIDIxNTIzOCkJKGZyb20gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5o
OjIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdp
c3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJDUFUuaCIKKyNpbmNsdWRl
ICJPcHRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBpbXBsZW1lbnRzIHRoZSBQb2xldHRvIGFu
ZCBTYXJrYXIgcmVnaXN0ZXIgYWxsb2NhdG9yIGNhbGxlZCAibGluZWFyIHNjYW4iOgorLy8gaHR0
cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTMzMDI1MAorLy8KKy8vIFRoaXMgaXMgbm90
IEFpcidzIHByaW1hcnkgcmVnaXN0ZXIgYWxsb2NhdG9yLiBXZSB1c2UgaXQgb25seSB3aGVuIHJ1
bm5pbmcgYXQgb3B0TGV2ZWw8Mi4gVGhhdCdzIG5vdAorLy8gdGhlIGRlZmF1bHQgbGV2ZWwuIFRo
aXMgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzIG9wdGltaXplZCBwcmltYXJpbHkgZm9yIHJ1bm5pbmcg
cXVpY2tseS4gSXQncyBleHBlY3RlZAorLy8gdGhhdCBpbXByb3ZlbWVudHMgdG8gdGhpcyByZWdp
c3RlciBhbGxvY2F0b3Igc2hvdWxkIGZvY3VzIG9uIGltcHJvdmluZyBpdHMgZXhlY3V0aW9uIHRp
bWUgd2l0aG91dCBtdWNoCisvLyByZWdhcmQgZm9yIHRoZSBxdWFsaXR5IG9mIGdlbmVyYXRlZCBj
b2RlLiBJZiB5b3Ugd2FudCBnb29kIGNvZGUsIHVzZSBncmFwaCBjb2xvcmluZy4KKy8vCisvLyBG
b3IgQWlyJ3MgcHJpbWFyeSByZWdpc3RlciBhbGxvY2F0b3IsIHNlZSBBaXJBbGxvY2F0ZVJlZ2lz
dGVyc0J5R3JhcGhDb2xvcmluZy5ofGNwcC4KK3ZvaWQgYWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVh
clNjYW4oQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNr
QnlMaW5lYXJTY2FuLmgJKHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNywxMyArMzcsMTYgQEAgY2xhc3MgQ29kZTsKIC8vIFRoaXMgaW1wbGVt
ZW50cyB0aGUgUG9sZXR0byBhbmQgU2Fya2FyIHJlZ2lzdGVyIGFsbG9jYXRvciBjYWxsZWQgImxp
bmVhciBzY2FuIjoKIC8vIGh0dHA6Ly9kbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD0zMzAyNTAK
IC8vCi0vLyBUaGlzIGlzIG5vdCBBaXIncyBwcmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRvci4gV2Ug
dXNlIGl0IG9ubHkgd2hlbiBydW5uaW5nIGF0IG9wdExldmVsPDIuIFRoYXQncyBub3QKLS8vIHRo
ZSBkZWZhdWx0IGxldmVsLiBUaGlzIHJlZ2lzdGVyIGFsbG9jYXRvciBpcyBvcHRpbWl6ZWQgcHJp
bWFyaWx5IGZvciBydW5uaW5nIHF1aWNrbHkuIEl0J3MgZXhwZWN0ZWQKLS8vIHRoYXQgaW1wcm92
ZW1lbnRzIHRvIHRoaXMgcmVnaXN0ZXIgYWxsb2NhdG9yIHNob3VsZCBmb2N1cyBvbiBpbXByb3Zp
bmcgaXRzIGV4ZWN1dGlvbiB0aW1lIHdpdGhvdXQgbXVjaAotLy8gcmVnYXJkIGZvciB0aGUgcXVh
bGl0eSBvZiBnZW5lcmF0ZWQgY29kZS4gSWYgeW91IHdhbnQgZ29vZCBjb2RlLCB1c2UgZ3JhcGgg
Y29sb3JpbmcuCisvLyBUaGlzIGlzIG5vdCBBaXIncyBwcmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRv
ci4gV2UgdXNlIGl0IG9ubHkgd2hlbiBydW5uaW5nIGF0IG9wdExldmVsPDIuCisvLyBUaGF0J3Mg
bm90IHRoZSBkZWZhdWx0IGxldmVsLiBUaGlzIHJlZ2lzdGVyIGFsbG9jYXRvciBpcyBvcHRpbWl6
ZWQgcHJpbWFyaWx5IGZvciBydW5uaW5nCisvLyBxdWlja2x5LiBJdCdzIGV4cGVjdGVkIHRoYXQg
aW1wcm92ZW1lbnRzIHRvIHRoaXMgcmVnaXN0ZXIgYWxsb2NhdG9yIHNob3VsZCBmb2N1cyBvbiBp
bXByb3ZpbmcKKy8vIGl0cyBleGVjdXRpb24gdGltZSB3aXRob3V0IG11Y2ggcmVnYXJkIGZvciB0
aGUgcXVhbGl0eSBvZiBnZW5lcmF0ZWQgY29kZS4gSWYgeW91IHdhbnQgZ29vZAorLy8gY29kZSwg
dXNlIGdyYXBoIGNvbG9yaW5nLgogLy8KIC8vIEZvciBBaXIncyBwcmltYXJ5IHJlZ2lzdGVyIGFs
bG9jYXRvciwgc2VlIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmh8Y3BwLgot
dm9pZCBhbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2NhbihDb2RlJik7CisvLworLy8gVGhpcyBh
bHNvIGRvZXMgc3RhY2sgYWxsb2NhdGlvbiBhcyBhbiBhZnRlcnRob3VnaHQuIEl0IGRvZXMgbm90
IGRvIGFueSBzcGlsbCBjb2FsZXNjaW5nLgordm9pZCBhbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNr
QnlMaW5lYXJTY2FuKENvZGUmKTsKIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJz
QnlMaW5lYXJTY2FuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJTY2FuLmNwcAkocmV2aXNpb24gMjE1MjM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
TGluZWFyU2Nhbi5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw1OTcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oIgotCi0jaWYgRU5B
QkxFKEIzX0pJVCkKLQotI2luY2x1ZGUgIkFpckFyZ0lubGluZXMuaCIKLSNpbmNsdWRlICJBaXJD
b2RlLmgiCi0jaW5jbHVkZSAiQWlyRml4U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCIKLSNpbmNsdWRl
ICJBaXJQaGFzZUluc2VydGlvblNldC5oIgotI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCi0j
aW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKLSNpbmNsdWRlICJBaXJQYWRJbnRlcmZlcmVuY2UuaCIK
LSNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCi0jaW5jbHVkZSAiQWlyUmVnTGl2ZW5lc3MuaCIK
LSNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCi0jaW5jbHVkZSAiQWlyVG1wTWFwLmgiCi0jaW5j
bHVkZSA8d3RmL0xpc3REdW1wLmg+Ci0jaW5jbHVkZSA8d3RmL1JhbmdlLmg+Ci0KLW5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKLQotbmFtZXNwYWNlIHsKLQot
Tk9fUkVUVVJOX0RVRV9UT19DUkFTSCBORVZFUl9JTkxJTkUgdm9pZCBjcmFzaCgpCi17Ci0gICAg
Q1JBU0goKTsKLX0KLQotI3VuZGVmIFJFTEVBU0VfQVNTRVJUCi0jZGVmaW5lIFJFTEVBU0VfQVNT
RVJUKGFzc2VydGlvbikgZG8geyBcCi0gICAgaWYgKCEoYXNzZXJ0aW9uKSkgeyBcCi0gICAgICAg
IFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZ
X0ZVTkNUSU9OLCAjYXNzZXJ0aW9uKTsgXAotICAgICAgICBjcmFzaCgpOyBcCi0gICAgfSBcCi19
IHdoaWxlICgwKQotCi1ib29sIHZlcmJvc2UoKSB7IHJldHVybiBPcHRpb25zOjphaXJMaW5lYXJT
Y2FuVmVyYm9zZSgpOyB9Ci0KLS8vIFBoYXNlIGNvbnN0YW50cyB3ZSB1c2UgZm9yIHRoZSBQaGFz
ZUluc2VydGlvblNldC4KLWNvbnN0IHVuc2lnbmVkIGZpcnN0UGhhc2UgPSAwOwotY29uc3QgdW5z
aWduZWQgc2Vjb25kUGhhc2UgPSAxOwotCi10eXBlZGVmIFJhbmdlPHNpemVfdD4gSW50ZXJ2YWw7
Ci0KLXN0cnVjdCBUbXBEYXRhIHsKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIG91dC5wcmludCgie2ludGVydmFsID0gIiwgaW50ZXJ2YWwsICIs
IHNwaWxsZWQgPSAiLCBwb2ludGVyRHVtcChzcGlsbGVkKSwgIiwgYXNzaWduZWQgPSAiLCBhc3Np
Z25lZCwgIiwgaXNVbnNwaWxsYWJsZSA9ICIsIGlzVW5zcGlsbGFibGUsICIsIHBvc3NpYmxlUmVn
cyA9ICIsIHBvc3NpYmxlUmVncywgIiwgZGlkQnVpbGRQb3NzaWJsZVJlZ3MgPSAiLCBkaWRCdWls
ZFBvc3NpYmxlUmVncywgIn0iKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCB2YWxpZGF0ZSgpCi0g
ICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghKHNwaWxsZWQgJiYgYXNzaWduZWQpKTsKLSAg
ICB9Ci0gICAgCi0gICAgSW50ZXJ2YWwgaW50ZXJ2YWw7Ci0gICAgU3RhY2tTbG90KiBzcGlsbGVk
IHsgbnVsbHB0ciB9OwotICAgIFJlZ2lzdGVyU2V0IHBvc3NpYmxlUmVnczsKLSAgICBSZWcgYXNz
aWduZWQ7Ci0gICAgYm9vbCBpc1Vuc3BpbGxhYmxlIHsgZmFsc2UgfTsKLSAgICBib29sIGRpZEJ1
aWxkUG9zc2libGVSZWdzIHsgZmFsc2UgfTsKLX07Ci0KLXN0cnVjdCBDbG9iYmVyIHsKLSAgICBD
bG9iYmVyKCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIENsb2JiZXIoc2l6ZV90IGluZGV4LCBS
ZWdpc3RlclNldCByZWdzKQotICAgICAgICA6IGluZGV4KGluZGV4KQotICAgICAgICAsIHJlZ3Mo
cmVncykKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAotICAgIHsKLSAgICAgICAgb3V0LnByaW50KGluZGV4LCAiOiIsIHJlZ3MpOwotICAg
IH0KLSAgICAKLSAgICBzaXplX3QgaW5kZXggeyAwIH07Ci0gICAgUmVnaXN0ZXJTZXQgcmVnczsK
LX07Ci0KLWNsYXNzIExpbmVhclNjYW4gewotcHVibGljOgotICAgIExpbmVhclNjYW4oQ29kZSYg
Y29kZSkKLSAgICAgICAgOiBtX2NvZGUoY29kZSkKLSAgICAgICAgLCBtX3N0YXJ0SW5kZXgoY29k
ZS5zaXplKCkpCi0gICAgICAgICwgbV9tYXAoY29kZSkKLSAgICAgICAgLCBtX2luc2VydGlvblNl
dHMoY29kZS5zaXplKCkpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lkIHJ1bigpCi0gICAg
ewotICAgICAgICBidWlsZFJlZ2lzdGVyU2V0KCk7Ci0gICAgICAgIGJ1aWxkSW5kaWNlcygpOwot
ICAgICAgICBidWlsZEludGVydmFscygpOwotICAgICAgICBpZiAoc2hvdWxkU3BpbGxFdmVyeXRo
aW5nKCkpIHsKLSAgICAgICAgICAgIHNwaWxsRXZlcnl0aGluZygpOwotICAgICAgICAgICAgZW1p
dFNwaWxsQ29kZSgpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAg
IHByZXBhcmVJbnRlcnZhbHMoKTsKLSAgICAgICAgICAgIG1fZGlkU3BpbGwgPSBmYWxzZTsKLSAg
ICAgICAgICAgIGZvckVhY2hCYW5rKAotICAgICAgICAgICAgICAgIFsmXSAoQmFuayBiYW5rKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRTY2FuKGJhbmspOwotICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgaWYgKCFtX2RpZFNwaWxsKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgZW1pdFNwaWxsQ29kZSgpOwotICAgICAgICB9Ci0gICAgICAgIGluc2Vy
dFNwaWxsQ29kZSgpOwotICAgICAgICBhc3NpZ25SZWdpc3RlcnMoKTsKLSAgICB9Ci0gICAgCi1w
cml2YXRlOgotICAgIHZvaWQgYnVpbGRSZWdpc3RlclNldCgpCi0gICAgewotICAgICAgICBmb3JF
YWNoQmFuaygKLSAgICAgICAgICAgIFsmXSAoQmFuayBiYW5rKSB7Ci0gICAgICAgICAgICAgICAg
bV9yZWdpc3RlcnNbYmFua10gPSBtX2NvZGUucmVnc0luUHJpb3JpdHlPcmRlcihiYW5rKTsKLSAg
ICAgICAgICAgICAgICBtX3JlZ2lzdGVyU2V0W2JhbmtdLnNldEFsbChtX3JlZ2lzdGVyc1tiYW5r
XSk7Ci0gICAgICAgICAgICAgICAgbV91bmlmaWVkUmVnaXN0ZXJTZXQubWVyZ2UobV9yZWdpc3Rl
clNldFtiYW5rXSk7Ci0gICAgICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICB2b2lkIGJ1aWxkSW5k
aWNlcygpCi0gICAgewotICAgICAgICBzaXplX3QgaW5kZXggPSAwOwotICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7Ci0gICAgICAgICAgICBtX3N0YXJ0SW5kZXhbYmxv
Y2tdID0gaW5kZXg7Ci0gICAgICAgICAgICBpbmRleCArPSBibG9jay0+c2l6ZSgpICogMjsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAKLSAgICBzaXplX3QgaW5kZXhPZkhlYWQoQmFzaWNCbG9jayog
YmxvY2spCi0gICAgewotICAgICAgICByZXR1cm4gbV9zdGFydEluZGV4W2Jsb2NrXTsKLSAgICB9
Ci0gICAgCi0gICAgc2l6ZV90IGluZGV4T2ZUYWlsKEJhc2ljQmxvY2sqIGJsb2NrKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGluZGV4T2ZIZWFkKGJsb2NrKSArIGJsb2NrLT5zaXplKCkgKiAyOwot
ICAgIH0KLSAgICAKLSAgICBJbnRlcnZhbCBpbnRlcnZhbChzaXplX3QgaW5kZXhPZkVhcmx5LCBB
cmc6OlRpbWluZyB0aW1pbmcpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHRpbWluZykgewotICAg
ICAgICBjYXNlIEFyZzo6T25seUVhcmx5OgotICAgICAgICAgICAgcmV0dXJuIEludGVydmFsKGlu
ZGV4T2ZFYXJseSk7Ci0gICAgICAgIGNhc2UgQXJnOjpPbmx5TGF0ZToKLSAgICAgICAgICAgIHJl
dHVybiBJbnRlcnZhbChpbmRleE9mRWFybHkgKyAxKTsKLSAgICAgICAgY2FzZSBBcmc6OkVhcmx5
QW5kTGF0ZToKLSAgICAgICAgICAgIHJldHVybiBJbnRlcnZhbChpbmRleE9mRWFybHksIGluZGV4
T2ZFYXJseSArIDIpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICByZXR1cm4gSW50ZXJ2YWwoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBidWlsZElu
dGVydmFscygpCi0gICAgewotICAgICAgICBVbmlmaWVkVG1wTGl2ZW5lc3MgbGl2ZW5lc3MobV9j
b2RlKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUp
IHsKLSAgICAgICAgICAgIHNpemVfdCBpbmRleE9mSGVhZCA9IHRoaXMtPmluZGV4T2ZIZWFkKGJs
b2NrKTsKLSAgICAgICAgICAgIHNpemVfdCBpbmRleE9mVGFpbCA9IHRoaXMtPmluZGV4T2ZUYWls
KGJsb2NrKTsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKCkpIHsKLSAgICAgICAgICAgICAgICBk
YXRhTG9nKCJBdCBibG9jayAiLCBwb2ludGVyRHVtcChibG9jayksICJcbiIpOwotICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgaW5kZXhPZkhlYWQgPSAiLCBpbmRleE9mSGVhZCwgIlxuIik7Ci0g
ICAgICAgICAgICAgICAgZGF0YUxvZygiICBpZG5leE9mVGFpbCA9ICIsIGluZGV4T2ZUYWlsLCAi
XG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGxpdmVuZXNz
LmxpdmVBdEhlYWQoYmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF0bXAuaXNSZWcoKSkK
LSAgICAgICAgICAgICAgICAgICAgbV9tYXBbdG1wXS5pbnRlcnZhbCB8PSBJbnRlcnZhbChpbmRl
eE9mSGVhZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBsaXZl
bmVzcy5saXZlQXRUYWlsKGJsb2NrKSkgewotICAgICAgICAgICAgICAgIGlmICghdG1wLmlzUmVn
KCkpCi0gICAgICAgICAgICAgICAgICAgIG1fbWFwW3RtcF0uaW50ZXJ2YWwgfD0gSW50ZXJ2YWwo
aW5kZXhPZlRhaWwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsr
aW5zdEluZGV4KSB7Ci0gICAgICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0
SW5kZXgpOwotICAgICAgICAgICAgICAgIHNpemVfdCBpbmRleE9mRWFybHkgPSBpbmRleE9mSGVh
ZCArIGluc3RJbmRleCAqIDI7Ci0gICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKAotICAg
ICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lk
dGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX21h
cFt0bXBdLmludGVydmFsIHw9IGludGVydmFsKGluZGV4T2ZFYXJseSwgQXJnOjp0aW1pbmcocm9s
ZSkpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgUmVnTGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgYXV0byByZWNvcmQgPSBbJl0gKHVuc2lnbmVkIGluc3RJ
bmRleCkgewotICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHJlZ3MgPSBsb2NhbENhbGMubGl2
ZSgpOwotICAgICAgICAgICAgICAgIGlmIChJbnN0KiBwcmV2ID0gYmxvY2stPmdldChpbnN0SW5k
ZXggLSAxKSkgewotICAgICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBwcmV2UmVncyA9IHJl
Z3M7Ci0gICAgICAgICAgICAgICAgICAgIHByZXYtPmZvckVhY2g8UmVnPigKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFsmXSAoUmVnJiByZWcsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZURlZihyb2xlKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlJlZ3MuYWRkKHJlZyk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYtPmtp
bmQub3Bjb2RlID09IFBhdGNoKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJldlJlZ3MubWVy
Z2UocHJldi0+ZXh0cmFDbG9iYmVyZWRSZWdzKCkpOwotICAgICAgICAgICAgICAgICAgICBwcmV2
UmVncy5maWx0ZXIobV91bmlmaWVkUmVnaXN0ZXJTZXQpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoIXByZXZSZWdzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY2xvYmJl
cnMuYXBwZW5kKENsb2JiZXIoaW5kZXhPZkhlYWQgKyBpbnN0SW5kZXggKiAyIC0gMSwgcHJldlJl
Z3MpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKEluc3QqIG5leHQg
PSBibG9jay0+Z2V0KGluc3RJbmRleCkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJT
ZXQgbmV4dFJlZ3MgPSByZWdzOwotICAgICAgICAgICAgICAgICAgICBuZXh0LT5mb3JFYWNoPFJl
Zz4oCi0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFJlZyYgcmVnLCBBcmc6OlJvbGUgcm9s
ZSwgQmFuaywgV2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjpp
c0Vhcmx5RGVmKHJvbGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0UmVn
cy5hZGQocmVnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAg
ICAgICBpZiAobmV4dC0+a2luZC5vcGNvZGUgPT0gUGF0Y2gpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBuZXh0UmVncy5tZXJnZShuZXh0LT5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncygpKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0UmVncy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtX2Nsb2JiZXJzLmFwcGVuZChDbG9iYmVyKGluZGV4T2ZIZWFkICsgaW5zdElu
ZGV4ICogMiwgbmV4dFJlZ3MpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Owot
ICAgICAgICAgICAgCi0gICAgICAgICAgICByZWNvcmQoYmxvY2stPnNpemUoKSk7Ci0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0t
OykgewotICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3RJbmRleCk7Ci0gICAg
ICAgICAgICAgICAgcmVjb3JkKGluc3RJbmRleCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIHN0ZDo6c29ydCgKLSAgICAgICAgICAgIG1fY2xvYmJlcnMuYmVn
aW4oKSwgbV9jbG9iYmVycy5lbmQoKSwKLSAgICAgICAgICAgIFtdIChDbG9iYmVyJiBhLCBDbG9i
YmVyJiBiKSAtPiBib29sIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYS5pbmRleCA8IGIuaW5k
ZXg7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgCi0gICAgICAgIGlmICh2ZXJib3NlKCkpIHsK
LSAgICAgICAgICAgIGRhdGFMb2coIkludGVydmFsczpcbiIpOwotICAgICAgICAgICAgbV9jb2Rl
LmZvckVhY2hUbXAoCi0gICAgICAgICAgICAgICAgWyZdIChUbXAgdG1wKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICAiLCB0bXAsICI6ICIsIG1fbWFwW3RtcF0sICJcbiIpOwot
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGJvb2wgc2hv
dWxkU3BpbGxFdmVyeXRoaW5nKCkKLSAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6YWlyTGlu
ZWFyU2NhblNwaWxsc0V2ZXJ5dGhpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgCi0gICAgICAgIC8vIFlvdSdyZSBtZWFudCB0byBoYWNrIHRoaXMgc28gdGhhdCB5b3Ug
c2VsZWN0aXZlbHkgc3BpbGwgZXZlcnl0aGluZyBkZXBlbmRpbmcgb24gcmVhc29ucy4KLSAgICAg
ICAgLy8gVGhhdCdzIHN1cGVyIHVzZWZ1bCBmb3IgZGVidWdnaW5nLgotCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNwaWxsRXZlcnl0aGluZygpCi0gICAgewot
ICAgICAgICBtX2NvZGUuZm9yRWFjaFRtcCgKLSAgICAgICAgICAgIFsmXSAoVG1wIHRtcCkgewot
ICAgICAgICAgICAgICAgIHNwaWxsKHRtcCk7Ci0gICAgICAgICAgICB9KTsKLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBwcmVwYXJlSW50ZXJ2YWxzKCkKLSAgICB7Ci0gICAgICAgIG1fdG1wcy5yZXNp
emUoMCk7Ci0gICAgICAgIAotICAgICAgICBtX2NvZGUuZm9yRWFjaFRtcCgKLSAgICAgICAgICAg
IFsmXSAoVG1wIHRtcCkgewotICAgICAgICAgICAgICAgIFRtcERhdGEmIGRhdGEgPSBtX21hcFt0
bXBdOwotICAgICAgICAgICAgICAgIGlmIChkYXRhLnNwaWxsZWQpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBkYXRhLmFzc2ln
bmVkID0gUmVnKCk7Ci0gICAgICAgICAgICAgICAgbV90bXBzLmFwcGVuZCh0bXApOwotICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIAotICAgICAgICBzdGQ6OnNvcnQoCi0gICAgICAgICAgICBtX3Rt
cHMuYmVnaW4oKSwgbV90bXBzLmVuZCgpLAotICAgICAgICAgICAgWyZdIChUbXAmIGEsIFRtcCYg
YikgewotICAgICAgICAgICAgICAgIHJldHVybiBtX21hcFthXS5pbnRlcnZhbC5iZWdpbigpIDwg
bV9tYXBbYl0uaW50ZXJ2YWwuYmVnaW4oKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAKLSAg
ICAgICAgaWYgKHZlcmJvc2UoKSkgewotICAgICAgICAgICAgZGF0YUxvZygiVG1wczogIiwgbGlz
dER1bXAobV90bXBzKSwgIlxuIik7Ci0gICAgICAgICAgICBkYXRhTG9nKCJDbG9iYmVyczogIiwg
bGlzdER1bXAobV9jbG9iYmVycyksICJcbiIpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAg
IFRtcCBhZGRTcGlsbFRtcFdpdGhJbnRlcnZhbChCYW5rIGJhbmssIEludGVydmFsIGludGVydmFs
KQotICAgIHsKLSAgICAgICAgVG1wRGF0YSBkYXRhOwotICAgICAgICBkYXRhLmludGVydmFsID0g
aW50ZXJ2YWw7Ci0gICAgICAgIGRhdGEuaXNVbnNwaWxsYWJsZSA9IHRydWU7Ci0gICAgICAgIAot
ICAgICAgICBUbXAgdG1wID0gbV9jb2RlLm5ld1RtcChiYW5rKTsKLSAgICAgICAgbV9tYXAuYXBw
ZW5kKHRtcCwgZGF0YSk7Ci0gICAgICAgIHJldHVybiB0bXA7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgYXR0ZW1wdFNjYW4oQmFuayBiYW5rKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBpcyBtb2Rl
bGVkIGFmdGVyIExpbmVhclNjYW5SZWdpc3RlckFsbG9jYXRpb24gaW4gRmlnLiAxIGluCi0gICAg
ICAgIC8vIGh0dHA6Ly9kbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD0zMzAyNTAuCi0KLSAgICAg
ICAgbV9hY3RpdmUuY2xlYXIoKTsKLSAgICAgICAgbV9hY3RpdmVSZWdzID0gUmVnaXN0ZXJTZXQo
KTsKLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBjbG9iYmVySW5kZXggPSAwOwotICAgICAgICBm
b3IgKFRtcCYgdG1wIDogbV90bXBzKSB7Ci0gICAgICAgICAgICBpZiAodG1wLmJhbmsoKSAhPSBi
YW5rKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBUbXBEYXRhJiBlbnRyeSA9IG1fbWFwW3RtcF07Ci0gICAgICAgICAgICBzaXplX3QgaW5kZXgg
PSBlbnRyeS5pbnRlcnZhbC5iZWdpbigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
dmVyYm9zZSgpKSB7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiSW5kZXggIyIsIGluZGV4LCAi
OiAiLCB0bXAsICJcbiIpOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIiwgdG1wLCAiOiAi
LCBlbnRyeSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICBjbG9iYmVySW5kZXgg
PSAiLCBjbG9iYmVySW5kZXgsICJcbiIpOwotICAgICAgICAgICAgICAgIC8vIFRoaXMgY291bGQg
YmUgc28gbXVjaCBmYXN0ZXIuCi0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2NvZGVbMF07Ci0gICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBjYW5kaWRhdGVCbG9j
ayA6IG1fY29kZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobV9zdGFydEluZGV4W2NhbmRp
ZGF0ZUJsb2NrXSA+IGluZGV4KQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIGJsb2NrID0gY2FuZGlkYXRlQmxvY2s7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluc3RJbmRleCA9IChpbmRleCAtIG1fc3RhcnRJ
bmRleFtibG9ja10gKyAxKSAvIDI7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICBBdDogIiwg
cG9pbnRlckR1bXAoYmxvY2spLCAiLCBpbnN0SW5kZXggPSAiLCBpbnN0SW5kZXgsICJcbiIpOwot
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBQcmV2OiAiLCBwb2ludGVyRHVtcChibG9jay0+
Z2V0KGluc3RJbmRleCAtIDEpKSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
IE5leHQ6ICIsIHBvaW50ZXJEdW1wKGJsb2NrLT5nZXQoaW5zdEluZGV4KSksICJcbiIpOwotICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgQWN0aXZlOlxuIik7Ci0gICAgICAgICAgICAgICAgZm9y
IChUbXAgdG1wIDogbV9hY3RpdmUpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAi
LCB0bXAsICI6ICIsIG1fbWFwW3RtcF0sICJcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAvLyBUaGlzIGlzIEV4cGlyZU9sZEludGVydmFscyBpbiBGaWcuIDEu
Ci0gICAgICAgICAgICB3aGlsZSAoIW1fYWN0aXZlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
ICAgIFRtcCB0bXAgPSBtX2FjdGl2ZS5maXJzdCgpOwotICAgICAgICAgICAgICAgIFRtcERhdGEm
IGVudHJ5ID0gbV9tYXBbdG1wXTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBi
b29sIGV4cGlyZWQgPSBlbnRyeS5pbnRlcnZhbC5lbmQoKSA8PSBpbmRleDsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWV4cGlyZWQpCi0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fYWN0aXZlLnJlbW92
ZUZpcnN0KCk7Ci0gICAgICAgICAgICAgICAgbV9hY3RpdmVSZWdzLnJlbW92ZShlbnRyeS5hc3Np
Z25lZCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElmIG5lY2Vzc2FyeSwgY29t
cHV0ZSB0aGUgc2V0IG9mIHJlZ2lzdGVycyB0aGF0IHRoaXMgdG1wIGNvdWxkIGV2ZW4gdXNlLiBU
aGlzIGlzIG5vdAotICAgICAgICAgICAgLy8gcGFydCBvZiBGaWcuIDEsIGJ1dCBpdCdzIGEgdGVj
aG5pcXVlIHRoYXQgdGhlIGF1dGhvcnMgY2xhaW0gdG8gaGF2ZSBpbXBsZW1lbnRlZCBpbiBvbmUg
b2YKLSAgICAgICAgICAgIC8vIHRoZWlyIHR3byBpbXBsZW1lbnRhdGlvbnMuIFRoZXJlIG1heSBi
ZSBvdGhlciBtb3JlIGVmZmljaWVudCB3YXlzIHRvIGRvIHRoaXMsIGJ1dCB0aGlzCi0gICAgICAg
ICAgICAvLyBpbXBsZW1lbnRhdGlvbiBnZXRzIHNvbWUgcGVyZiB3aW5zIGZyb20gcGlnZ3ktYmFj
a2luZyB0aGlzIGNhbGN1bGF0aW9uIGluIHRoZSBzY2FuLgotICAgICAgICAgICAgLy8KLSAgICAg
ICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgZGlkQnVpbGQgZmxhZyBzdGlja3MgdGhyb3VnaCBzcGls
bGluZy4gU3BpbGxpbmcgZG9lc24ndCBjaGFuZ2UgdGhlCi0gICAgICAgICAgICAvLyBpbnRlcmZl
cmVuY2Ugc2l0dWF0aW9uLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIE5vdGUgdGhh
dCB3ZSBjb3VsZCBzaG9ydC1jaXJjdWl0IHRoaXMgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgc3Bp
bGxhYmxlIHRtcCwgdGhlcmUgYXJlIG5vCi0gICAgICAgICAgICAvLyBmcmVlIHJlZ2lzdGVycywg
YW5kIHRoaXMgcmVnaXN0ZXIncyBpbnRlcnZhbCBlbmRzIGFmdGVyIHRoZSBvbmUgb24gdGhlIHRv
cCBvZiB0aGUgYWN0aXZlCi0gICAgICAgICAgICAvLyBzdGFjay4KLSAgICAgICAgICAgIGlmICgh
ZW50cnkuZGlkQnVpbGRQb3NzaWJsZVJlZ3MpIHsKLSAgICAgICAgICAgICAgICAvLyBBZHZhbmNl
IHRoZSBjbG9iYmVyIGluZGV4IHVudGlsIGl0J3MgYXQgYSBjbG9iYmVyIHRoYXQgaXMgcmVsZXZh
bnQgdG8gdXMuCi0gICAgICAgICAgICAgICAgd2hpbGUgKGNsb2JiZXJJbmRleCA8IG1fY2xvYmJl
cnMuc2l6ZSgpICYmIG1fY2xvYmJlcnNbY2xvYmJlckluZGV4XS5pbmRleCA8IGluZGV4KQotICAg
ICAgICAgICAgICAgICAgICBjbG9iYmVySW5kZXgrKzsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBSZWdpc3RlclNldCBwb3NzaWJsZVJlZ3MgPSBtX3JlZ2lzdGVyU2V0W2Jhbmtd
OwotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBjbG9iYmVySW5kZXg7IGkgPCBtX2Ns
b2JiZXJzLnNpemUoKSAmJiBtX2Nsb2JiZXJzW2ldLmluZGV4IDwgZW50cnkuaW50ZXJ2YWwuZW5k
KCk7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgcG9zc2libGVSZWdzLmV4Y2x1ZGUobV9jbG9i
YmVyc1tpXS5yZWdzKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBlbnRyeS5w
b3NzaWJsZVJlZ3MgPSBwb3NzaWJsZVJlZ3M7Ci0gICAgICAgICAgICAgICAgZW50cnkuZGlkQnVp
bGRQb3NzaWJsZVJlZ3MgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAodmVyYm9zZSgpKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgUG9zc2li
bGUgcmVnczogIiwgZW50cnkucG9zc2libGVSZWdzLCAiXG4iKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gRmluZCBhIGZyZWUgcmVnaXN0ZXIgdGhhdCB3ZSBhcmUgYWxsb3dlZCB0byB1
c2UuCi0gICAgICAgICAgICBpZiAobV9hY3RpdmUuc2l6ZSgpICE9IG1fcmVnaXN0ZXJzW2Jhbmtd
LnNpemUoKSkgewotICAgICAgICAgICAgICAgIGJvb2wgZGlkQXNzaWduID0gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogbV9yZWdpc3RlcnNbYmFua10pIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IENvdWxkIGRvIHByaW9yaXR5IGNvbG9yaW5nIGhlcmUuCi0g
ICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzAzMDQKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2FjdGl2ZVJlZ3MuY29udGFp
bnMocmVnKSAmJiBlbnRyeS5wb3NzaWJsZVJlZ3MuY29udGFpbnMocmVnKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgYXNzaWduKHRtcCwgcmVnKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRpZEFzc2lnbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAo
ZGlkQXNzaWduKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gVGhpcyBpcyBTcGlsbEF0SW50ZXJ2YWwgaW4g
RmlnLiAxLCBidXQgbW9kaWZpZWQgdG8gaGFuZGxlIGNsb2JiZXJzLgotICAgICAgICAgICAgVG1w
IHNwaWxsVG1wID0gbV9hY3RpdmUudGFrZUxhc3QoCi0gICAgICAgICAgICAgICAgWyZdIChUbXAg
c3BpbGxDYW5kaWRhdGUpIC0+IGJvb2wgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50
cnkucG9zc2libGVSZWdzLmNvbnRhaW5zKG1fbWFwW3NwaWxsQ2FuZGlkYXRlXS5hc3NpZ25lZCk7
Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBpZiAoIXNwaWxsVG1wKSB7Ci0gICAg
ICAgICAgICAgICAgc3BpbGwodG1wKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIFRtcERhdGEmIHNwaWxsRW50cnkgPSBtX21hcFtzcGlsbFRt
cF07Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzcGlsbEVudHJ5LmFzc2lnbmVkKTsKLSAg
ICAgICAgICAgIGlmIChzcGlsbEVudHJ5LmlzVW5zcGlsbGFibGUgfHwKLSAgICAgICAgICAgICAg
ICAoIWVudHJ5LmlzVW5zcGlsbGFibGUgJiYgc3BpbGxFbnRyeS5pbnRlcnZhbC5lbmQoKSA8PSBl
bnRyeS5pbnRlcnZhbC5lbmQoKSkpIHsKLSAgICAgICAgICAgICAgICBzcGlsbCh0bXApOwotICAg
ICAgICAgICAgICAgIGFkZFRvQWN0aXZlKHNwaWxsVG1wKTsKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXNzaWduKHRt
cCwgc3BpbGxFbnRyeS5hc3NpZ25lZCk7Ci0gICAgICAgICAgICBzcGlsbChzcGlsbFRtcCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhZGRUb0FjdGl2ZShUbXAgdG1wKQotICAg
IHsKLSAgICAgICAgaWYgKG1fbWFwW3RtcF0uaXNVbnNwaWxsYWJsZSkgewotICAgICAgICAgICAg
bV9hY3RpdmUucHJlcGVuZCh0bXApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBtX2FjdGl2ZS5hcHBlbmRBbmRCdWJibGUoCi0gICAgICAgICAgICB0
bXAsCi0gICAgICAgICAgICBbJl0gKFRtcCBvdGhlclRtcCkgLT4gYm9vbCB7Ci0gICAgICAgICAg
ICAgICAgVG1wRGF0YSYgb3RoZXJFbnRyeSA9IG1fbWFwW290aGVyVG1wXTsKLSAgICAgICAgICAg
ICAgICBpZiAob3RoZXJFbnRyeS5pc1Vuc3BpbGxhYmxlKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fbWFwW290aGVyVG1wXS5pbnRl
cnZhbC5lbmQoKSA+IG1fbWFwW3RtcF0uaW50ZXJ2YWwuZW5kKCk7Ci0gICAgICAgICAgICB9KTsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBhc3NpZ24oVG1wIHRtcCwgUmVnIHJlZykKLSAgICB7Ci0g
ICAgICAgIFRtcERhdGEmIGVudHJ5ID0gbV9tYXBbdG1wXTsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIWVudHJ5LnNwaWxsZWQpOwotICAgICAgICBlbnRyeS5hc3NpZ25lZCA9IHJlZzsKLSAgICAg
ICAgbV9hY3RpdmVSZWdzLmFkZChyZWcpOwotICAgICAgICBhZGRUb0FjdGl2ZSh0bXApOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIHNwaWxsKFRtcCB0bXApCi0gICAgewotICAgICAgICBUbXBEYXRh
JiBlbnRyeSA9IG1fbWFwW3RtcF07Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFlbnRyeS5pc1Vu
c3BpbGxhYmxlKTsKLSAgICAgICAgZW50cnkuc3BpbGxlZCA9IG1fY29kZS5hZGRTdGFja1Nsb3Qo
OCwgU3RhY2tTbG90S2luZDo6U3BpbGwpOwotICAgICAgICBlbnRyeS5hc3NpZ25lZCA9IFJlZygp
OwotICAgICAgICBtX2RpZFNwaWxsID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBlbWl0
U3BpbGxDb2RlKCkKLSAgICB7Ci0gICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2Nv
ZGUpIHsKLSAgICAgICAgICAgIHNpemVfdCBpbmRleE9mSGVhZCA9IHRoaXMtPmluZGV4T2ZIZWFk
KGJsb2NrKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdElu
ZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKLSAgICAgICAgICAgICAgICBJbnN0
JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQg
aW5kZXhPZkVhcmx5ID0gaW5kZXhPZkhlYWQgKyBpbnN0SW5kZXggKiAyOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIC8vIEZpcnN0IHRyeSB0byBzcGlsbCBkaXJlY3RseS4KLSAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2ldOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhcmcuaXNSZWcoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBTdGFja1Ns
b3QqIHNwaWxsZWQgPSBtX21hcFthcmcudG1wKCldLnNwaWxsZWQ7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghc3BpbGxlZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoIWluc3QuYWRtaXRzU3RhY2soaSkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjpzdGFj
ayhzcGlsbGVkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgLy8gRmFsbCBiYWNrIG9uIHRoZSBoYXJkIHdheS4KLSAgICAgICAgICAgICAgICBp
bnN0LmZvckVhY2hUbXAoCi0gICAgICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6
Um9sZSByb2xlLCBCYW5rIGJhbmssIFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodG1wLmlzUmVnKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzcGlsbGVkID0gbV9tYXBbdG1wXS5zcGls
bGVkOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzcGlsbGVkKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wY29kZSBt
b3ZlID0gYmFuayA9PSBHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgdG1wID0gYWRkU3BpbGxUbXBXaXRoSW50ZXJ2YWwoYmFuaywgaW50ZXJ2YWwoaW5kZXhP
ZkVhcmx5LCBBcmc6OnRpbWluZyhyb2xlKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHJvbGUgPT0gQXJnOjpTY3JhdGNoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55VXNlKHJvbGUpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0c1tibG9ja10uaW5zZXJ0KGlu
c3RJbmRleCwgc2Vjb25kUGhhc2UsIG1vdmUsIGluc3Qub3JpZ2luLCBBcmc6OnN0YWNrKHNwaWxs
ZWQpLCB0bXApOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlEZWYocm9s
ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXRzW2Jsb2NrXS5p
bnNlcnQoaW5zdEluZGV4ICsgMSwgZmlyc3RQaGFzZSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwg
QXJnOjpzdGFjayhzcGlsbGVkKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgaW5zZXJ0U3BpbGxDb2RlKCkK
LSAgICB7Ci0gICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpCi0gICAgICAg
ICAgICBtX2luc2VydGlvblNldHNbYmxvY2tdLmV4ZWN1dGUoYmxvY2spOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIGFzc2lnblJlZ2lzdGVycygpCi0gICAgewotICAgICAgICBpZiAodmVyYm9zZSgp
KSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCJBYm91dCB0byBhbGxvY2F0ZSByZWdpc3RlcnMuIFN0
YXRlIG9mIGFsbCB0bXBzOlxuIik7Ci0gICAgICAgICAgICBtX2NvZGUuZm9yRWFjaFRtcCgKLSAg
ICAgICAgICAgICAgICBbJl0gKFRtcCB0bXApIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgICIsIHRtcCwgIjogIiwgbV9tYXBbdG1wXSwgIlxuIik7Ci0gICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICBkYXRhTG9nKCJJUjpcbiIpOwotICAgICAgICAgICAgZGF0YUxvZyht
X2NvZGUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogbV9jb2RlKSB7Ci0gICAgICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsK
LSAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSgpKQotICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJBdDogIiwgaW5zdCwgIlxuIik7Ci0gICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1w
RmFzdCgKLSAgICAgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAg
ICAgUmVnIHJlZyA9IG1fbWFwW3RtcF0uYXNzaWduZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIXJlZykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkZhaWxl
ZCB0byBhbGxvY2F0ZSByZWcgZm9yOiAiLCB0bXAsICJcbiIpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBUbXAocmVnKTsKLSAgICAg
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Ci0gICAgQ29kZSYgbV9jb2RlOwotICAgIFZlY3RvcjxSZWc+IG1fcmVnaXN0ZXJzW251bUJhbmtz
XTsKLSAgICBSZWdpc3RlclNldCBtX3JlZ2lzdGVyU2V0W251bUJhbmtzXTsKLSAgICBSZWdpc3Rl
clNldCBtX3VuaWZpZWRSZWdpc3RlclNldDsKLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgc2l6
ZV90PiBtX3N0YXJ0SW5kZXg7Ci0gICAgVG1wTWFwPFRtcERhdGE+IG1fbWFwOwotICAgIEluZGV4
TWFwPEJhc2ljQmxvY2sqLCBQaGFzZUluc2VydGlvblNldD4gbV9pbnNlcnRpb25TZXRzOwotICAg
IFZlY3RvcjxDbG9iYmVyPiBtX2Nsb2JiZXJzOyAvLyBBZnRlciB3ZSBhbGxvY2F0ZSB0aGlzLCB3
ZSBoYXBwaWx5IHBvaW50IHBvaW50ZXJzIGludG8gaXQuCi0gICAgVmVjdG9yPFRtcD4gbV90bXBz
OwotICAgIERlcXVlPFRtcD4gbV9hY3RpdmU7Ci0gICAgUmVnaXN0ZXJTZXQgbV9hY3RpdmVSZWdz
OwotICAgIGJvb2wgbV9kaWRTcGlsbCB7IGZhbHNlIH07Ci19OwotCi12b2lkIHJ1bkxpbmVhclNj
YW4oQ29kZSYgY29kZSkKLXsKLSAgICBpZiAodmVyYm9zZSgpKQotICAgICAgICBkYXRhTG9nKCJB
aXIgYmVmb3JlIGxpbmVhciBzY2FuOlxuIiwgY29kZSk7Ci0gICAgTGluZWFyU2NhbiBsaW5lYXJT
Y2FuKGNvZGUpOwotICAgIGxpbmVhclNjYW4ucnVuKCk7Ci0gICAgaWYgKHZlcmJvc2UoKSkKLSAg
ICAgICAgZGF0YUxvZygiQWlyIGFmdGVyIGxpbmVhciBzY2FuOlxuIiwgY29kZSk7Ci19Ci0KLX0g
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi12b2lkIGFsbG9jYXRlUmVnaXN0ZXJzQnlMaW5lYXJT
Y2FuKENvZGUmIGNvZGUpCi17Ci0gICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxv
Y2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2NhbiIpOwotICAgIHBhZEludGVyZmVyZW5jZShjb2RlKTsK
LSAgICBydW5MaW5lYXJTY2FuKGNvZGUpOwotICAgIGZpeFNwaWxsc0FmdGVyVGVybWluYWxzKGNv
ZGUpOwotfQotCi19IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCi0KLSNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUxpbmVhclNjYW4uaAkocmV2aXNp
b24gMjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJl
Z2lzdGVyc0J5TGluZWFyU2Nhbi5oCShub25leGlzdGVudCkKQEAgLTEsNTAgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgRU5BQkxFKEIzX0pJVCkKLQotI2luY2x1ZGUgIkNQVS5oIgotI2luY2x1ZGUgIk9wdGlv
bnMuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewot
Ci1jbGFzcyBDb2RlOwotCi0vLyBUaGlzIGltcGxlbWVudHMgdGhlIFBvbGV0dG8gYW5kIFNhcmth
ciByZWdpc3RlciBhbGxvY2F0b3IgY2FsbGVkICJsaW5lYXIgc2NhbiI6Ci0vLyBodHRwOi8vZGwu
YWNtLm9yZy9jaXRhdGlvbi5jZm0/aWQ9MzMwMjUwCi0vLwotLy8gVGhpcyBpcyBub3QgQWlyJ3Mg
cHJpbWFyeSByZWdpc3RlciBhbGxvY2F0b3IuIFdlIHVzZSBpdCBvbmx5IHdoZW4gcnVubmluZyBh
dCBvcHRMZXZlbDwyLiBUaGF0J3Mgbm90Ci0vLyB0aGUgZGVmYXVsdCBsZXZlbC4gVGhpcyByZWdp
c3RlciBhbGxvY2F0b3IgaXMgb3B0aW1pemVkIHByaW1hcmlseSBmb3IgcnVubmluZyBxdWlja2x5
LiBJdCdzIGV4cGVjdGVkCi0vLyB0aGF0IGltcHJvdmVtZW50cyB0byB0aGlzIHJlZ2lzdGVyIGFs
bG9jYXRvciBzaG91bGQgZm9jdXMgb24gaW1wcm92aW5nIGl0cyBleGVjdXRpb24gdGltZSB3aXRo
b3V0IG11Y2gKLS8vIHJlZ2FyZCBmb3IgdGhlIHF1YWxpdHkgb2YgZ2VuZXJhdGVkIGNvZGUuIElm
IHlvdSB3YW50IGdvb2QgY29kZSwgdXNlIGdyYXBoIGNvbG9yaW5nLgotLy8KLS8vIEZvciBBaXIn
cyBwcmltYXJ5IHJlZ2lzdGVyIGFsbG9jYXRvciwgc2VlIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlH
cmFwaENvbG9yaW5nLmh8Y3BwLgotdm9pZCBhbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2NhbihD
b2RlJik7Ci0KLX0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKLQotI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9j
YXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZy5jcHAJKHJldmlz
aW9uIDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVT
dGFja0J5R3JhcGhDb2xvcmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAK
IAogI2luY2x1ZGUgIkFpckFyZ0lubGluZXMuaCIKICNpbmNsdWRlICJBaXJDb2RlLmgiCi0jaW5j
bHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlySGFuZGxlQ2FsbGVlU2F2ZXMu
aCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgi
CiAjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgpAQCAtMTI5LDE1ICsxMjksMTEgQEAgc3RydWN0
IENvYWxlc2NhYmxlTW92ZSB7CiAgICAgZG91YmxlIGZyZXF1ZW5jeSB7IFBOYU4gfTsKIH07CiAK
LX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi12b2lkIGFsbG9jYXRlU3RhY2tCeUdyYXBoQ29s
b3JpbmcoQ29kZSYgY29kZSkKK1ZlY3RvcjxTdGFja1Nsb3QqPiBhbGxvY2F0ZUVzY2FwZWRTdGFj
a1Nsb3RzSW1wbChDb2RlJiBjb2RlKQogewotICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2Rl
LCAiYWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZyIpOwotCiAgICAgLy8gQWxsb2NhdGUgYWxs
IG9mIHRoZSBlc2NhcGVkIHNsb3RzIGluIG9yZGVyLiBUaGlzIGlzIGtpbmQgb2YgYSBjcmF6eSBh
bGdvcml0aG0gdG8gYWxsb3cgZm9yCiAgICAgLy8gdGhlIHBvc3NpYmlsaXR5IG9mIHN0YWNrIHNs
b3RzIGJlaW5nIGFzc2lnbmVkIGZyYW1lIG9mZnNldHMgYmVmb3JlIHdlIGV2ZW4gZ2V0IGhlcmUu
Ci0gICAgQVNTRVJUKCFjb2RlLmZyYW1lU2l6ZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghY29k
ZS5mcmFtZVNpemUoKSk7CiAgICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFzc2lnbmVkRXNjYXBlZFN0
YWNrU2xvdHM7CiAgICAgVmVjdG9yPFN0YWNrU2xvdCo+IGVzY2FwZWRTdGFja1Nsb3RzV29ya2xp
c3Q7CiAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkgewpAQCAt
MTU4LDYgKzE1NCwzNyBAQCB2b2lkIGFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcoQ29kZSYg
CiAgICAgICAgIGFzc2lnbihzbG90LCBhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3RzKTsKICAgICAg
ICAgYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90cy5hcHBlbmQoc2xvdCk7CiAgICAgfQorICAgIHJl
dHVybiBhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3RzOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xsZWN0aW9uPgordm9pZCB1cGRhdGVGcmFtZVNpemVCYXNlZE9uU3RhY2tTbG90c0ltcGwoQ29k
ZSYgY29kZSwgY29uc3QgQ29sbGVjdGlvbiYgY29sbGVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBm
cmFtZVNpemUgPSAwOworICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29sbGVjdGlvbikKKyAg
ICAgICAgZnJhbWVTaXplID0gc3RkOjptYXgoZnJhbWVTaXplLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oLXNsb3QtPm9mZnNldEZyb21GUCgpKSk7CisgICAgY29kZS5zZXRGcmFtZVNpemUoV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgZnJhbWVTaXplKSk7Cit9
CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIGFsbG9jYXRlRXNjYXBlZFN0YWNr
U2xvdHMoQ29kZSYgY29kZSkKK3sKKyAgICB1cGRhdGVGcmFtZVNpemVCYXNlZE9uU3RhY2tTbG90
c0ltcGwoY29kZSwgYWxsb2NhdGVFc2NhcGVkU3RhY2tTbG90c0ltcGwoY29kZSkpOworfQorCit2
b2lkIHVwZGF0ZUZyYW1lU2l6ZUJhc2VkT25TdGFja1Nsb3RzKENvZGUmIGNvZGUpCit7CisgICAg
dXBkYXRlRnJhbWVTaXplQmFzZWRPblN0YWNrU2xvdHNJbXBsKGNvZGUsIGNvZGUuc3RhY2tTbG90
cygpKTsKK30KKwordm9pZCBhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nKENvZGUmIGNvZGUp
Cit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVN0YWNrQnlHcmFw
aENvbG9yaW5nIik7CisgICAgCisgICAgaGFuZGxlQ2FsbGVlU2F2ZXMoY29kZSk7CisgICAgCisg
ICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHMgPSBhbGxvY2F0
ZUVzY2FwZWRTdGFja1Nsb3RzSW1wbChjb2RlKTsKIAogICAgIC8vIE5vdyB3ZSBoYW5kbGUgdGhl
IHNwaWxsIHNsb3RzLgogICAgIFN0YWNrU2xvdExpdmVuZXNzIGxpdmVuZXNzKGNvZGUpOwpAQCAt
Mzc3LDg4ICs0MDQsMTEgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nKENvZGUm
IAogICAgICAgICBhc3NpZ24oc2xvdCwgb3RoZXJTbG90cyk7CiAgICAgfQogCi0gICAgLy8gRmln
dXJlIG91dCBob3cgbXVjaCBzdGFjayB3ZSdyZSB1c2luZyBmb3Igc3RhY2sgc2xvdHMuCi0gICAg
dW5zaWduZWQgZnJhbWVTaXplRm9yU3RhY2tTbG90cyA9IDA7Ci0gICAgZm9yIChTdGFja1Nsb3Qq
IHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkgewotICAgICAgICBmcmFtZVNpemVGb3JTdGFja1Ns
b3RzID0gc3RkOjptYXgoCi0gICAgICAgICAgICBmcmFtZVNpemVGb3JTdGFja1Nsb3RzLAotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC1zbG90LT5vZmZzZXRGcm9tRlAoKSkpOwot
ICAgIH0KLQotICAgIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgPSBXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBmcmFtZVNpemVGb3JTdGFja1Nsb3RzKTsKLQot
ICAgIC8vIE5vdyB3ZSBuZWVkIHRvIGRlZHVjZSBob3cgbXVjaCBhcmd1bWVudCBhcmVhIHdlIG5l
ZWQuCi0gICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKLSAgICAgICAgZm9yIChJ
bnN0JiBpbnN0IDogKmJsb2NrKSB7Ci0gICAgICAgICAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5h
cmdzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFyZy5pc0NhbGxBcmcoKSkgewotICAgICAgICAg
ICAgICAgICAgICAvLyBGb3Igbm93LCB3ZSBhc3N1bWUgdGhhdCB3ZSB1c2UgOCBieXRlcyBvZiB0
aGUgY2FsbCBhcmcuIEJ1dCB0aGF0J3Mgbm90Ci0gICAgICAgICAgICAgICAgICAgIC8vIHN1Y2gg
YW4gYXdlc29tZSBhc3N1bXB0aW9uLgotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1NAotICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoYXJnLm9mZnNldCgpID49IDApOwotICAgICAgICAgICAgICAgICAgICBj
b2RlLnJlcXVlc3RDYWxsQXJnQXJlYVNpemVJbkJ5dGVzKGFyZy5vZmZzZXQoKSArIDgpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGNv
ZGUuc2V0RnJhbWVTaXplKGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgKyBjb2RlLmNhbGxBcmdBcmVh
U2l6ZUluQnl0ZXMoKSk7Ci0KLSAgICAvLyBGaW5hbGx5LCB0cmFuc2Zvcm0gdGhlIGNvZGUgdG8g
dXNlIEFkZHIncyBpbnN0ZWFkIG9mIFN0YWNrU2xvdCdzLiBUaGlzIGlzIGEgbG9zc2xlc3MKLSAg
ICAvLyB0cmFuc2Zvcm1hdGlvbiBzaW5jZSB3ZSBjYW4gc2VhcmNoIHRoZSBTdGFja1Nsb3RzIGFy
cmF5IHRvIGZpZ3VyZSBvdXQgd2hpY2ggU3RhY2tTbG90IGFueQotICAgIC8vIG9mZnNldC1mcm9t
LUZQIHJlZmVycyB0by4KLQotICAgIC8vIEZJWE1FOiBUaGlzIG1heSBwcm9kdWNlIGFkZHJlc3Nl
cyB0aGF0IGFyZW4ndCB2YWxpZCBpZiB3ZSBlbmQgdXAgd2l0aCBhIGdpbm9ybW91cyBzdGFjayBm
cmFtZS4KLSAgICAvLyBXZSB3b3VsZCBoYXZlIHRvIHNjYXZlbmdlIGZvciB0ZW1wb3JhcmllcyBp
ZiB0aGlzIGhhcHBlbmVkLiBGb3J0dW5hdGVseSwgdGhpcyBjYXNlIHdpbGwgYmUKLSAgICAvLyBl
eHRyZW1lbHkgcmFyZSBzbyB3ZSBjYW4gZG8gY3JhenkgdGhpbmdzIHdoZW4gaXQgYXJpc2VzLgot
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI1MzAKLQot
ICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7Ci0gICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IGNvZGUpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBp
bnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgewotICAgICAgICAgICAgSW5z
dCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOwotICAgICAgICAgICAgaW5zdC5mb3JFYWNo
QXJnKAotICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBCYW5r
LCBXaWR0aCB3aWR0aCkgewotICAgICAgICAgICAgICAgICAgICBhdXRvIHN0YWNrQWRkciA9IFsm
XSAoaW50MzJfdCBvZmZzZXQpIC0+IEFyZyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gQXJnOjpzdGFja0FkZHIob2Zmc2V0LCBjb2RlLmZyYW1lU2l6ZSgpLCB3aWR0aCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6
OlN0YWNrOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBhcmcu
c3RhY2tTbG90KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc1pEZWYocm9s
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzbG90LT5raW5kKCkgPT0gU3RhY2tT
bG90S2luZDo6U3BpbGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzbG90LT5ieXRl
U2l6ZSgpID4gYnl0ZXMod2lkdGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Q3VycmVudGx5IHdlIG9ubHkgaGFuZGxlIHRoaXMgc2ltcGxlIGNhc2UgYmVjYXVzZSBpdCdzIHRo
ZSBvbmx5IG9uZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgYXJpc2VzOiBa
RGVmJ3MgYXJlIG9ubHkgMzItYml0IHJpZ2h0IG5vdy4gU28sIHdoZW4gd2UgaGl0IHRoZXNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzZXJ0aW9ucyBpdCBtZWFucyB0aGF0IHdl
IG5lZWQgdG8gaW1wbGVtZW50IHRob3NlIG90aGVyIGtpbmRzIG9mCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gemVybyBmaWxscy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChzbG90LT5ieXRlU2l6ZSgpID09IDgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHdpZHRoID09IFdpZHRoMzIpOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNWYWxpZEZvcm0oU3RvcmVaZXJvMzIs
IEFyZzo6U3RhY2spKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXggKyAxLCBT
dG9yZVplcm8zMiwgaW5zdC5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YWNrQWRkcihhcmcub2Zmc2V0KCkgKyA0ICsgc2xvdC0+b2Zmc2V0RnJvbUZQKCkpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHN0
YWNrQWRkcihhcmcub2Zmc2V0KCkgKyBzbG90LT5vZmZzZXRGcm9tRlAoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9
IHN0YWNrQWRkcihhcmcub2Zmc2V0KCkgLSBjb2RlLmZyYW1lU2l6ZSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICApOwotICAgICAgICB9Ci0gICAgICAgIGluc2VydGlvblNl
dC5leGVjdXRlKGJsb2NrKTsKLSAgICB9CisgICAgdXBkYXRlRnJhbWVTaXplQmFzZWRPblN0YWNr
U2xvdHMoY29kZSk7CisgICAgY29kZS5zZXRTdGFja0lzQWxsb2NhdGVkKHRydWUpOwogfQogCiB9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQogCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFj
a0J5R3JhcGhDb2xvcmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZy5oCShyZXZpc2lvbiAyMTUyMzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2tCeUdyYXBo
Q29sb3JpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTQgKzMzLDE4IEBAIGNsYXNzIENvZGU7
CiAKIC8vIFRoaXMgYWxsb2NhdGVzIFN0YWNrU2xvdHMgdG8gcGxhY2VzIG9uIHRoZSBzdGFjay4g
SXQgZmlyc3QgYWxsb2NhdGVzIHRoZSBwaW5uZWQgb25lcyBpbiBpbmRleAogLy8gb3JkZXIgYW5k
IHRoZW4gaXQgYWxsb2NhdGVzIHRoZSByZXN0IHVzaW5nIGZpcnN0IGZpdC4gVGFrZXMgdGhlIG9w
cG9ydHVuaXR5IHRvIGtpbGwgZGVhZAotLy8gYXNzaWdubWVudHMgdG8gc3RhY2sgc2xvdHMsIHNp
bmNlIGl0IGtub3dzIHdoaWNoIG9uZXMgYXJlIGxpdmUuIEFsc28gZml4ZXMgWkRlZnMgdG8gYW5v
bnltb3VzCi0vLyBzdGFjayBzbG90cy4gQWxzbyBjb2FsZXNjZXMgc3BpbGwgc2xvdHMgd2hlbmV2
ZXIgcG9zc2libGUuCisvLyBhc3NpZ25tZW50cyB0byBzdGFjayBzbG90cywgc2luY2UgaXQga25v
d3Mgd2hpY2ggb25lcyBhcmUgbGl2ZS4gQWxzbyBjb2FsZXNjZXMgc3BpbGwgc2xvdHMKKy8vIHdo
ZW5ldmVyIHBvc3NpYmxlLgogLy8KIC8vIFRoaXMgaXMgbWVhbnQgdG8gYmUgYW4gb3B0aW1hbCBz
dGFjayBhbGxvY2F0b3IsIGZvY3VzZWQgb24gZ2VuZXJhdGluZyBncmVhdCBjb2RlLiBJdCdzIG5v
dAogLy8gcGFydGljdWxhcmx5IGZhc3QsIHRob3VnaC4KIAogdm9pZCBhbGxvY2F0ZVN0YWNrQnlH
cmFwaENvbG9yaW5nKENvZGUmKTsKIAorLy8gVGhlc2UgYXJlIHV0aWxpdGllcyBzaGFyZWQgYnkg
dGhpcyBwaGFzZSBhbmQgYWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2NhbigpLgor
dm9pZCBhbGxvY2F0ZUVzY2FwZWRTdGFja1Nsb3RzKENvZGUmKTsKK3ZvaWQgdXBkYXRlRnJhbWVT
aXplQmFzZWRPblN0YWNrU2xvdHMoQ29kZSYpOworCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMjE1MjM4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSwx
NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAK
K0FyZyBBcmc6OnN0YWNrQWRkcihpbnQzMl90IG9mZnNldEZyb21GUCwgdW5zaWduZWQgZnJhbWVT
aXplLCBXaWR0aCB3aWR0aCkKK3sKKyAgICBBcmcgcmVzdWx0ID0gQXJnOjphZGRyKEFpcjo6VG1w
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwgb2Zmc2V0RnJvbUZQKTsKKyAgICBpZiAoIXJl
c3VsdC5pc1ZhbGlkRm9ybSh3aWR0aCkpIHsKKyAgICAgICAgcmVzdWx0ID0gQXJnOjphZGRyKAor
ICAgICAgICAgICAgQWlyOjpUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
KSwKKyAgICAgICAgICAgIG9mZnNldEZyb21GUCArIGZyYW1lU2l6ZSk7CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKIGJvb2wgQXJnOjppc1N0YWNrTWVtb3J5KCkgY29uc3QKIHsKICAg
ICBzd2l0Y2ggKGtpbmQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBcmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFy
Zy5oCShyZXZpc2lvbiAyMTUyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjAsMTcgKzU2MCw4IEBAIHB1YmxpYzoKICAgICAg
ICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KLQotICAgIHN0YXRpYyBBcmcgc3RhY2tBZGRyKGludDMyX3Qgb2Zmc2V0RnJvbUZQLCB1bnNp
Z25lZCBmcmFtZVNpemUsIFdpZHRoIHdpZHRoKQotICAgIHsKLSAgICAgICAgQXJnIHJlc3VsdCA9
IEFyZzo6YWRkcihBaXI6OlRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIG9mZnNldEZy
b21GUCk7Ci0gICAgICAgIGlmICghcmVzdWx0LmlzVmFsaWRGb3JtKHdpZHRoKSkgewotICAgICAg
ICAgICAgcmVzdWx0ID0gQXJnOjphZGRyKAotICAgICAgICAgICAgICAgIEFpcjo6VG1wKE1hY3Jv
QXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciksCi0gICAgICAgICAgICAgICAgb2Zmc2V0
RnJvbUZQICsgZnJhbWVTaXplKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgQXJnIHN0YWNrQWRkcihpbnQzMl90IG9mZnNldEZyb21G
UCwgdW5zaWduZWQgZnJhbWVTaXplLCBXaWR0aCk7CiAKICAgICAvLyBJZiB5b3UgZG9uJ3QgcGFz
cyBhIFdpZHRoLCB0aGlzIG9wdGltaXN0aWNhbGx5IGFzc3VtZXMgdGhhdCB5b3UncmUgdXNpbmcg
dGhlIHJpZ2h0IHdpZHRoLgogICAgIHN0YXRpYyBib29sIGlzVmFsaWRTY2FsZSh1bnNpZ25lZCBz
Y2FsZSwgc3RkOjpvcHRpb25hbDxXaWR0aD4gd2lkdGggPSBzdGQ6Om51bGxvcHQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHJldmlzaW9uIDIxNTIzOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMiw3ICsxMDIsMTQgQEAgQmFzaWNCbG9jayogQ29kZTo6YWRkQmxvY2soZG91Ymxl
IGZyZXF1ZQogCiBTdGFja1Nsb3QqIENvZGU6OmFkZFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6
ZSwgU3RhY2tTbG90S2luZCBraW5kLCBCMzo6U3RhY2tTbG90KiBiM1Nsb3QpCiB7Ci0gICAgcmV0
dXJuIG1fc3RhY2tTbG90cy5hZGROZXcoYnl0ZVNpemUsIGtpbmQsIGIzU2xvdCk7CisgICAgU3Rh
Y2tTbG90KiByZXN1bHQgPSBtX3N0YWNrU2xvdHMuYWRkTmV3KGJ5dGVTaXplLCBraW5kLCBiM1Ns
b3QpOworICAgIGlmIChtX3N0YWNrSXNBbGxvY2F0ZWQpIHsKKyAgICAgICAgLy8gRklYTUU6IFRo
aXMgaXMgdW5uZWNlc3NhcmlseSBhd2Z1bC4gRm9ydHVuYXRlbHksIGl0IGRvZXNuJ3QgcnVuIG9m
dGVuLgorICAgICAgICB1bnNpZ25lZCBleHRlbnQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yo
cmVzdWx0LT5hbGlnbm1lbnQoKSwgZnJhbWVTaXplKCkgKyBieXRlU2l6ZSk7CisgICAgICAgIHJl
c3VsdC0+c2V0T2Zmc2V0RnJvbUZQKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KGV4dGVudCkpOwor
ICAgICAgICBzZXRGcmFtZVNpemUoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25t
ZW50Qnl0ZXMoKSwgZXh0ZW50KSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFN0
YWNrU2xvdCogQ29kZTo6YWRkU3RhY2tTbG90KEIzOjpTdGFja1Nsb3QqIGIzU2xvdCkKQEAgLTEz
OCw2ICsxNDUsMjggQEAgYm9vbCBDb2RlOjppc0VudHJ5cG9pbnQoQmFzaWNCbG9jayogYmxvYwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBDb2RlOjpzZXRDYWxsZWVTYXZlUmVnaXN0ZXJB
dE9mZnNldExpc3QoUmVnaXN0ZXJBdE9mZnNldExpc3QmJiByZWdpc3RlckF0T2Zmc2V0TGlzdCwg
U3RhY2tTbG90KiBzbG90KQoreworICAgIG1fdW5jb3JyZWN0ZWRDYWxsZWVTYXZlUmVnaXN0ZXJB
dE9mZnNldExpc3QgPSBXVEZNb3ZlKHJlZ2lzdGVyQXRPZmZzZXRMaXN0KTsKKyAgICBmb3IgKGNv
bnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ2lzdGVyQXRPZmZzZXQgOiBtX3VuY29ycmVjdGVkQ2Fs
bGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KQorICAgICAgICBtX2NhbGxlZVNhdmVSZWdpc3Rl
cnMuc2V0KHJlZ2lzdGVyQXRPZmZzZXQucmVnKCkpOworICAgIG1fY2FsbGVlU2F2ZVN0YWNrU2xv
dCA9IHNsb3Q7Cit9CisKK1JlZ2lzdGVyQXRPZmZzZXRMaXN0IENvZGU6OmNhbGxlZVNhdmVSZWdp
c3RlckF0T2Zmc2V0TGlzdCgpIGNvbnN0Cit7CisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgcmVz
dWx0ID0gbV91bmNvcnJlY3RlZENhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdDsKKyAgICBp
ZiAoU3RhY2tTbG90KiBzbG90ID0gbV9jYWxsZWVTYXZlU3RhY2tTbG90KSB7CisgICAgICAgIHB0
cmRpZmZfdCBvZmZzZXQgPSBzbG90LT5ieXRlU2l6ZSgpICsgc2xvdC0+b2Zmc2V0RnJvbUZQKCk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSByZXN1bHQuc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
ICAgICByZXN1bHQuYXQoaSkgPSBSZWdpc3RlckF0T2Zmc2V0KAorICAgICAgICAgICAgICAgIHJl
c3VsdC5hdChpKS5yZWcoKSwKKyAgICAgICAgICAgICAgICByZXN1bHQuYXQoaSkub2Zmc2V0KCkg
KyBvZmZzZXQpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZv
aWQgQ29kZTo6cmVzZXRSZWFjaGFiaWxpdHkoKQogewogICAgIGNsZWFyUHJlZGVjZXNzb3JzKG1f
YmxvY2tzKTsKQEAgLTE3MCwxMiArMTk5LDEzIEBAIHZvaWQgQ29kZTo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogICAgICAgICBmb3IgKFNwZWNpYWwqIHNwZWNpYWwgOiBzcGVjaWFscygp
KQogICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgZGVlcER1bXAoc3BlY2lhbCksICJcbiIp
OwogICAgIH0KLSAgICBpZiAobV9mcmFtZVNpemUpCi0gICAgICAgIG91dC5wcmludCgiRnJhbWUg
c2l6ZTogIiwgbV9mcmFtZVNpemUsICJcbiIpOworICAgIGlmIChtX2ZyYW1lU2l6ZSB8fCBtX3N0
YWNrSXNBbGxvY2F0ZWQpCisgICAgICAgIG91dC5wcmludCgiRnJhbWUgc2l6ZTogIiwgbV9mcmFt
ZVNpemUsIG1fc3RhY2tJc0FsbG9jYXRlZCA/ICIgKEFsbG9jYXRlZCkiIDogIiIsICJcbiIpOwog
ICAgIGlmIChtX2NhbGxBcmdBcmVhU2l6ZSkKICAgICAgICAgb3V0LnByaW50KCJDYWxsIGFyZyBh
cmVhIHNpemU6ICIsIG1fY2FsbEFyZ0FyZWFTaXplLCAiXG4iKTsKLSAgICBpZiAobV9jYWxsZWVT
YXZlUmVnaXN0ZXJzLnNpemUoKSkKLSAgICAgICAgb3V0LnByaW50KCJDYWxsZWUgc2F2ZXM6ICIs
IG1fY2FsbGVlU2F2ZVJlZ2lzdGVycywgIlxuIik7CisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3Qg
Y2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHRoaXMtPmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlz
dCgpOworICAgIGlmIChjYWxsZWVTYXZlUmVnaXN0ZXJzLnNpemUoKSkKKyAgICAgICAgb3V0LnBy
aW50KCJDYWxsZWUgc2F2ZXM6ICIsIGNhbGxlZVNhdmVSZWdpc3RlcnMsICJcbiIpOwogfQogCiB1
bnNpZ25lZCBDb2RlOjpmaW5kRmlyc3RCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9uIDIxNTIz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xODYsOSArMTg2LDIyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fZW50cnlw
b2ludExhYmVscyA9IHN0ZDo6Zm9yd2FyZDxWZWN0b3I+KHZlY3Rvcik7CiAgICAgfQorICAgIAor
ICAgIHZvaWQgc2V0U3RhY2tJc0FsbG9jYXRlZChib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAg
bV9zdGFja0lzQWxsb2NhdGVkID0gdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgc3RhY2tJ
c0FsbG9jYXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2tJc0FsbG9jYXRlZDsgfQorICAgIAor
ICAgIC8vIFRoaXMgc2V0cyB0aGUgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzLgorICAgIHZvaWQgc2V0
Q2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KFJlZ2lzdGVyQXRPZmZzZXRMaXN0JiYsIFN0
YWNrU2xvdCopOwogCi0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QmIGNhbGxlZVNhdmVS
ZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7IH0KLSAgICBS
ZWdpc3RlckF0T2Zmc2V0TGlzdCYgY2FsbGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY2Fs
bGVlU2F2ZVJlZ2lzdGVyczsgfQorICAgIC8vIFRoaXMgcmV0dXJucyB0aGUgY29ycmVjdGx5IG9m
ZnNldCBsaXN0IG9mIGNhbGxlZSBzYXZlIHJlZ2lzdGVycy4KKyAgICBSZWdpc3RlckF0T2Zmc2V0
TGlzdCBjYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKSBjb25zdDsKKyAgICAKKyAgICAv
LyBUaGlzIGp1c3QgdGVsbHMgeW91IHdoYXQgdGhlIGNhbGxlZSBzYXZlcyBhcmUuCisgICAgUmVn
aXN0ZXJTZXQgY2FsbGVlU2F2ZVJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlU2F2
ZVJlZ2lzdGVyczsgfQogCiAgICAgLy8gUmVjb21wdXRlcyBwcmVkZWNlc3NvcnMgYW5kIGRlbGV0
ZXMgdW5yZWFjaGFibGUgYmxvY2tzLgogICAgIHZvaWQgcmVzZXRSZWFjaGFiaWxpdHkoKTsKQEAg
LTMyOSw3ICszNDIsMTAgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX251bUZQVG1wcyB7IDAg
fTsKICAgICB1bnNpZ25lZCBtX2ZyYW1lU2l6ZSB7IDAgfTsKICAgICB1bnNpZ25lZCBtX2NhbGxB
cmdBcmVhU2l6ZSB7IDAgfTsKLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCBtX2NhbGxlZVNhdmVS
ZWdpc3RlcnM7CisgICAgYm9vbCBtX3N0YWNrSXNBbGxvY2F0ZWQgeyBmYWxzZSB9OworICAgIFJl
Z2lzdGVyQXRPZmZzZXRMaXN0IG1fdW5jb3JyZWN0ZWRDYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNl
dExpc3Q7CisgICAgUmVnaXN0ZXJTZXQgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOworICAgIFN0YWNr
U2xvdCogbV9jYWxsZWVTYXZlU3RhY2tTbG90IHsgbnVsbHB0ciB9OwogICAgIFZlY3RvcjxGcmVx
dWVudGVkQmxvY2s+IG1fZW50cnlwb2ludHM7IC8vIFRoaXMgaXMgZW1wdHkgdW50aWwgYWZ0ZXIg
bG93ZXJFbnRyeVN3aXRjaCgpLgogICAgIFZlY3RvcjxDQ2FsbEhlbHBlcnM6OkxhYmVsPiBtX2Vu
dHJ5cG9pbnRMYWJlbHM7IC8vIFRoaXMgaXMgZW1wdHkgdW50aWwgY29kZSBnZW5lcmF0aW9uLgog
ICAgIFJlZlB0cjxXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3I+IG1fd2FzbUJvdW5kc0NoZWNrR2Vu
ZXJhdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0
ZS5jcHAJKHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwyNCArMjgsMjMgQEAKIAogI2lm
IEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlICJBaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNr
QnlMaW5lYXJTY2FuLmgiCiAjaW5jbHVkZSAiQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29s
b3JpbmcuaCIKLSNpbmNsdWRlICJBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbi5oIgog
I2luY2x1ZGUgIkFpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcuaCIKICNpbmNsdWRlICJB
aXJDb2RlLmgiCiAjaW5jbHVkZSAiQWlyRWxpbWluYXRlRGVhZENvZGUuaCIKICNpbmNsdWRlICJB
aXJGaXhPYnZpb3VzU3BpbGxzLmgiCiAjaW5jbHVkZSAiQWlyRml4UGFydGlhbFJlZ2lzdGVyU3Rh
bGxzLmgiCiAjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJBaXJI
YW5kbGVDYWxsZWVTYXZlcy5oIgogI2luY2x1ZGUgIkFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaCIK
ICNpbmNsdWRlICJBaXJMb3dlckFmdGVyUmVnQWxsb2MuaCIKICNpbmNsdWRlICJBaXJMb3dlckVu
dHJ5U3dpdGNoLmgiCiAjaW5jbHVkZSAiQWlyTG93ZXJNYWNyb3MuaCIKKyNpbmNsdWRlICJBaXJM
b3dlclN0YWNrQXJncy5oIgogI2luY2x1ZGUgIkFpck9wY29kZVV0aWxzLmgiCiAjaW5jbHVkZSAi
QWlyT3B0aW1pemVCbG9ja09yZGVyLmgiCiAjaW5jbHVkZSAiQWlyUmVwb3J0VXNlZFJlZ2lzdGVy
cy5oIgogI2luY2x1ZGUgIkFpclNpbXBsaWZ5Q0ZHLmgiCi0jaW5jbHVkZSAiQWlyU3BpbGxFdmVy
eXRoaW5nLmgiCiAjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKICNpbmNsdWRlICJCM0NvbW1vbi5o
IgogI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCkBAIC04NCwzOSArODMsNDMgQEAgdm9pZCBwcmVw
YXJlRm9yR2VuZXJhdGlvbihDb2RlJiBjb2RlKQogICAgIAogICAgIGVsaW1pbmF0ZURlYWRDb2Rl
KGNvZGUpOwogCi0gICAgLy8gUmVnaXN0ZXIgYWxsb2NhdGlvbiBmb3IgYWxsIHRoZSBUbXBzIHRo
YXQgZG8gbm90IGhhdmUgYSBjb3JyZXNwb25kaW5nIG1hY2hpbmUgcmVnaXN0ZXIuCi0gICAgLy8g
QWZ0ZXIgdGhpcyBwaGFzZSwgZXZlcnkgVG1wIGhhcyBhIHJlZy4KLSAgICAvLwotICAgIC8vIEZv
ciBkZWJ1Z2dpbmcsIHlvdSBjYW4gdXNlIHNwaWxsRXZlcnl0aGluZygpIHRvIHB1dCBldmVyeXRo
aW5nIHRvIHRoZSBzdGFjayBiZXR3ZWVuIGVhY2ggSW5zdC4KLSAgICBpZiAoT3B0aW9uczo6YWly
U3BpbGxzRXZlcnl0aGluZygpKQotICAgICAgICBzcGlsbEV2ZXJ5dGhpbmcoY29kZSk7Ci0gICAg
ZWxzZSBpZiAoY29kZS5vcHRMZXZlbCgpID49IDIpCisgICAgaWYgKGNvZGUub3B0TGV2ZWwoKSA8
PSAxKSB7CisgICAgICAgIC8vIFdoZW4gd2UncmUgY29tcGlsaW5nIHF1aWNrbHksIHdlIGRvIHJl
Z2lzdGVyIGFuZCBzdGFjayBhbGxvY2F0aW9uIGluIG9uZSBsaW5lYXIgc2NhbgorICAgICAgICAv
LyBwaGFzZS4gSXQncyBmYXN0IGJlY2F1c2UgaXQgY29tcHV0ZXMgbGl2ZW5lc3Mgb25seSBvbmNl
LgorICAgICAgICBhbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlMaW5lYXJTY2FuKGNvZGUpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0FpclJlZ2lzdGVyUHJlc3N1cmUoKSkg
eworICAgICAgICAgICAgZGF0YUxvZygiUmVnaXN0ZXIgcHJlc3N1cmUgYWZ0ZXIgcmVnaXN0ZXIg
YWxsb2NhdGlvbjpcbiIpOworICAgICAgICAgICAgbG9nUmVnaXN0ZXJQcmVzc3VyZShjb2RlKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gV2UgbWF5IHN0aWxsIG5lZWQgdG8gZG8g
cG9zdC1hbGxvY2F0aW9uIGxvd2VyaW5nLiBEb2luZyBpdCBhZnRlciBib3RoIHJlZ2lzdGVyIGFu
ZAorICAgICAgICAvLyBzdGFjayBhbGxvY2F0aW9uIGlzIGxlc3Mgb3B0aW1hbCwgYnV0IGl0IHdv
cmtzIGZpbmUuCisgICAgICAgIGxvd2VyQWZ0ZXJSZWdBbGxvYyhjb2RlKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICAvLyBSZWdpc3RlciBhbGxvY2F0aW9uIGZvciBhbGwgdGhlIFRtcHMgdGhhdCBk
byBub3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgbWFjaGluZQorICAgICAgICAvLyByZWdpc3Rlci4g
QWZ0ZXIgdGhpcyBwaGFzZSwgZXZlcnkgVG1wIGhhcyBhIHJlZy4KICAgICAgICAgYWxsb2NhdGVS
ZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcoY29kZSk7Ci0gICAgZWxzZQotICAgICAgICBhbGxvY2F0
ZVJlZ2lzdGVyc0J5TGluZWFyU2Nhbihjb2RlKTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dBaXJS
ZWdpc3RlclByZXNzdXJlKCkpIHsKLSAgICAgICAgZGF0YUxvZygiUmVnaXN0ZXIgcHJlc3N1cmUg
YWZ0ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbjpcbiIpOwotICAgICAgICBsb2dSZWdpc3RlclByZXNz
dXJlKGNvZGUpOwotICAgIH0KLSAgICAKLSAgICBpZiAoY29kZS5vcHRMZXZlbCgpID49IDIpIHsK
LSAgICAgICAgLy8gVGhpcyByZXBsYWNlcyB1c2VzIG9mIHNwaWxsIHNsb3RzIHdpdGggcmVnaXN0
ZXJzIG9yIGNvbnN0YW50cyBpZiBwb3NzaWJsZS4gSXQgZG9lcyB0aGlzIGJ5Ci0gICAgICAgIC8v
IG1pbmltaXppbmcgdGhlIGFtb3VudCB0aGF0IHdlIHBlcnR1cmIgdGhlIGFscmVhZHktY2hvc2Vu
IHJlZ2lzdGVyIGFsbG9jYXRpb24uIEl0IG1heSBleHRlbmQKLSAgICAgICAgLy8gdGhlIGxpdmUg
cmFuZ2VzIG9mIHJlZ2lzdGVycyB0aG91Z2guCisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9u
czo6bG9nQWlyUmVnaXN0ZXJQcmVzc3VyZSgpKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJSZWdp
c3RlciBwcmVzc3VyZSBhZnRlciByZWdpc3RlciBhbGxvY2F0aW9uOlxuIik7CisgICAgICAgICAg
ICBsb2dSZWdpc3RlclByZXNzdXJlKGNvZGUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAvLyBUaGlzIHJlcGxhY2VzIHVzZXMgb2Ygc3BpbGwgc2xvdHMgd2l0aCByZWdpc3RlcnMgb3Ig
Y29uc3RhbnRzIGlmIHBvc3NpYmxlLiBJdAorICAgICAgICAvLyBkb2VzIHRoaXMgYnkgbWluaW1p
emluZyB0aGUgYW1vdW50IHRoYXQgd2UgcGVydHVyYiB0aGUgYWxyZWFkeS1jaG9zZW4gcmVnaXN0
ZXIKKyAgICAgICAgLy8gYWxsb2NhdGlvbi4gSXQgbWF5IGV4dGVuZCB0aGUgbGl2ZSByYW5nZXMg
b2YgcmVnaXN0ZXJzIHRob3VnaC4KICAgICAgICAgZml4T2J2aW91c1NwaWxscyhjb2RlKTsKKyAg
ICAgICAgCisgICAgICAgIGxvd2VyQWZ0ZXJSZWdBbGxvYyhjb2RlKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIFRoaXMgZG9lcyBmaXJzdC1maXQgYWxsb2NhdGlvbiBvZiBzdGFjayBzbG90cyB1c2lu
ZyBhbiBpbnRlcmZlcmVuY2UgZ3JhcGggcGx1cyBhCisgICAgICAgIC8vIGJ1bmNoIG9mIG90aGVy
IG9wdGltaXphdGlvbnMuCisgICAgICAgIGFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcoY29k
ZSk7CiAgICAgfQotCi0gICAgbG93ZXJBZnRlclJlZ0FsbG9jKGNvZGUpOwotCi0gICAgLy8gUHJp
b3IgdG8gdGhpcyBwb2ludCB0aGUgcHJvbG9ndWUgYW5kIGVwaWxvZ3VlIGlzIGltcGxpY2l0LiBU
aGlzIG1ha2VzIGl0IGV4cGxpY2l0LiBJdCBhbHNvCi0gICAgLy8gZG9lcyB0aGluZ3MgbGlrZSBp
ZGVudGlmeSB3aGljaCBjYWxsZWUtc2F2ZXMgd2UncmUgdXNpbmcgYW5kIHNhdmVzIHRoZW0uCi0g
ICAgaGFuZGxlQ2FsbGVlU2F2ZXMoY29kZSk7Ci0gICAgCi0gICAgLy8gVGhpcyB0dXJucyBhbGwg
U3RhY2sgYW5kIENhbGxBcmcgQXJncyBpbnRvIEFkZHIgYXJncyB0aGF0IHVzZSB0aGUgZnJhbWUg
cG9pbnRlci4gSXQgZG9lcwotICAgIC8vIHRoaXMgYnkgZmlyc3QtZml0IGFsbG9jYXRpbmcgc3Rh
Y2sgc2xvdHMuIEl0IHNob3VsZCBiZSBwcmV0dHkgZGFybiBjbG9zZSB0byBvcHRpbWFsLCBzbyB3
ZQotICAgIC8vIHNob3VsZG4ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMgdmVyeSBtdWNoLgot
ICAgIGFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcoY29kZSk7CisgICAgCisgICAgLy8gVGhp
cyB0dXJucyBhbGwgU3RhY2sgYW5kIENhbGxBcmcgQXJncyBpbnRvIEFkZHIgYXJncyB0aGF0IHVz
ZSB0aGUgZnJhbWUgcG9pbnRlci4KKyAgICBsb3dlclN0YWNrQXJncyhjb2RlKTsKICAgICAKICAg
ICAvLyBJZiB3ZSBjb2FsZXNjZWQgbW92ZXMgdGhlbiB3ZSBjYW4gdW5icmVhayBjcml0aWNhbCBl
ZGdlcy4gVGhpcyBpcyB0aGUgbWFpbiByZWFzb24gZm9yIHRoaXMKICAgICAvLyBwaGFzZS4KQEAg
LTIxMiw3ICsyMTUsNyBAQCB2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYg
CiAgICAgICAgICAgICBpZiAoY29kZS5mcmFtZVNpemUoKSkKICAgICAgICAgICAgICAgICBqaXQu
YWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jb2RlLmZyYW1lU2l6ZSgpKSwgTWFj
cm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVlU2F2
ZVJlZ2lzdGVycygpKSB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQm
IGVudHJ5IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKSkgewogICAgICAg
ICAgICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKQogICAgICAgICAgICAgICAgICAgICBq
aXQuc3RvcmVQdHIoZW50cnkucmVnKCkuZ3ByKCksIGFyZ0ZvcihlbnRyeSkpOwogICAgICAgICAg
ICAgICAgIGVsc2UKQEAgLTI0OSw3ICsyNTIsNyBAQCB2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUs
IENDYWxsSGVscGVycyYgCiAgICAgICAgICAgICAvLyBoYXZlIHRoaXMgb3ZlcnJpZGUuCiAgICAg
ICAgICAgICBhdXRvIHN0YXJ0ID0gaml0LmxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpOwogICAg
ICAgICAgICAgaWYgKGNvZGUuZnJhbWVTaXplKCkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGNv
bnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkp
IHsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDog
Y29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKSkgewogICAgICAgICAgICAgICAg
ICAgICBpZiAoZW50cnkucmVnKCkuaXNHUFIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5sb2FkUHRyKGFyZ0ZvcihlbnRyeSksIGVudHJ5LnJlZygpLmdwcigpKTsKICAgICAgICAgICAg
ICAgICAgICAgZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5k
bGVDYWxsZWVTYXZlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAJKHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzAsMTQgKzMwLDExIEBACiAKICNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5j
bHVkZSAiQWlySW5zdElubGluZXMuaCIKLSNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAogdm9pZCBoYW5k
bGVDYWxsZWVTYXZlcyhDb2RlJiBjb2RlKQogewotICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShj
b2RlLCAiaGFuZGxlQ2FsbGVlU2F2ZXMiKTsKLQogICAgIFJlZ2lzdGVyU2V0IHVzZWRDYWxsZWVT
YXZlczsKIAogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CkBAIC02MSwxNiAr
NTgsMTUgQEAgdm9pZCBoYW5kbGVDYWxsZWVTYXZlcyhDb2RlJiBjb2RlKQogICAgIGlmICghdXNl
ZENhbGxlZVNhdmVzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpID0gUmVnaXN0ZXJBdE9mZnNldExpc3QodXNl
ZENhbGxlZVNhdmVzKTsKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCBjYWxsZWVTYXZlUmVnaXN0
ZXJzID0gUmVnaXN0ZXJBdE9mZnNldExpc3QodXNlZENhbGxlZVNhdmVzKTsKIAogICAgIHNpemVf
dCBieXRlU2l6ZSA9IDA7Ci0gICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6
IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpKQorICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9m
ZnNldCYgZW50cnkgOiBjYWxsZWVTYXZlUmVnaXN0ZXJzKQogICAgICAgICBieXRlU2l6ZSA9IHN0
ZDo6bWF4KHN0YXRpY19jYXN0PHNpemVfdD4oLWVudHJ5Lm9mZnNldCgpKSwgYnl0ZVNpemUpOwog
Ci0gICAgU3RhY2tTbG90KiBzYXZlc0FyZWEgPSBjb2RlLmFkZFN0YWNrU2xvdChieXRlU2l6ZSwg
U3RhY2tTbG90S2luZDo6TG9ja2VkKTsKLSAgICAvLyBUaGlzIGlzIGEgYml0IHdlaXJkIHNpbmNl
IHdlIGNvdWxkIGhhdmUgYWxyZWFkeSBwaW5uZWQgYSBkaWZmZXJlbnQgc3RhY2sgc2xvdCB0byB0
aGlzCi0gICAgLy8gYXJlYS4gQWxzbywgb3VyIHJ1bnRpbWUgZG9lcyBub3QgcmVxdWlyZSB1cyB0
byBwaW4gdGhlIHNhdmVzIGFyZWEuIE1heWJlIHdlIHNob3VsZG4ndCBwaW4gaXQ/Ci0gICAgc2F2
ZXNBcmVhLT5zZXRPZmZzZXRGcm9tRlAoLWJ5dGVTaXplKTsKKyAgICBjb2RlLnNldENhbGxlZVNh
dmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgKKyAgICAgICAgV1RGTW92ZShjYWxsZWVTYXZlUmVnaXN0
ZXJzKSwKKyAgICAgICAgY29kZS5hZGRTdGFja1Nsb3QoYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQ6
OkxvY2tlZCkpOwogfQogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZl
cy5oCShyZXZpc2lvbiAyMTUyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckhhbmRsZUNhbGxlZVNhdmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsOCArMzEsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlCiAKIGNsYXNzIENvZGU7CiAKLS8vIFRo
aXMgcGhhc2UgaWRlbnRpZmllcyBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgYW5kIGFkZHMgY29kZSB0
byBzYXZlL3Jlc3RvcmUgdGhlbSBpbiB0aGUKLS8vIHByb2xvZ3VlL2VwaWxvZ3VlIHRvIHRoZSBj
b2RlLiBJdCdzIGEgbWFuZGF0b3J5IHBoYXNlLgorLy8gVGhpcyB1dGlsaXR5IGlkZW50aWZpZXMg
Y2FsbGVlLXNhdmUgcmVnaXN0ZXJzIGFuZCB0ZWxscyBDb2RlLiBJdCdzIGNhbGxlZCBmcm9tIHBo
YXNlcyB0aGF0CisvLyBkbyBzdGFjayBhbGxvY2F0aW9uLiBXZSBkb24ndCBkbyBpdCBhdCB0aGUg
ZW5kIG9mIHJlZ2lzdGVyIGFsbG9jYXRpb24gYmVjYXVzZSB0aGUgcmVhbCBlbmQKKy8vIG9mIHJl
Z2lzdGVyIGFsbG9jYXRpb24gaXMganVzdCBiZWZvcmUgc3RhY2sgYWxsb2NhdGlvbi4KIAogLy8g
RklYTUU6IEl0IHdvdWxkIGJlIGNvb2wgdG8gbWFrZSB0aGlzIG1vcmUgaW50ZXJhY3RpdmUgd2l0
aCB0aGUgQWlyIGNsaWVudCBhbmQgYWxzbyBtb3JlCiAvLyBwb3dlcmZ1bC4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxv
Yy5jcHAJKHJldmlzaW9uIDIxNTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBA
QCB2b2lkIGxvd2VyQWZ0ZXJSZWdBbGxvYyhDb2RlJiBjb2RlKQogICAgICAgICByZXR1cm47CiAK
ICAgICBIYXNoTWFwPEluc3QqLCBSZWdpc3RlclNldD4gdXNlZFJlZ2lzdGVyczsKLQorICAgIAog
ICAgIFJlZ0xpdmVuZXNzIGxpdmVuZXNzKGNvZGUpOwogICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBjb2RlKSB7CiAgICAgICAgIFJlZ0xpdmVuZXNzOjpMb2NhbENhbGMgbG9jYWxDYWxjKGxp
dmVuZXNzLCBibG9jayk7CkBAIC05NiwxMyArOTYsMjkgQEAgdm9pZCBsb3dlckFmdGVyUmVnQWxs
b2MoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZCgmaW5zdCwg
c2V0KTsKICAgICAgICAgfQogICAgIH0KLQorICAgIAorICAgIHN0ZDo6YXJyYXk8c3RkOjphcnJh
eTxTdGFja1Nsb3QqLCAyPiwgbnVtQmFua3M+IHNsb3RzOworICAgIGZvckVhY2hCYW5rKAorICAg
ICAgICBbJl0gKEJhbmsgYmFuaykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IDI7ICsraSkKKyAgICAgICAgICAgICAgICBzbG90c1tiYW5rXVtpXSA9IG51bGxwdHI7Cisg
ICAgICAgIH0pOworCisgICAgLy8gSWYgd2UgcnVuIGFmdGVyIHN0YWNrIGFsbG9jYXRpb24gdGhl
biB3ZSBjYW5ub3QgdXNlIHRob3NlIGNhbGxlZSBzYXZlcyB0aGF0IGFyZW4ndCBpbgorICAgIC8v
IHRoZSBjYWxsZWUgc2F2ZSBsaXN0LiBOb3RlIHRoYXQgd2UgYXJlIG9ubHkgcnVuIGFmdGVyIHN0
YWNrIGFsbG9jYXRpb24gaW4gLU8xLCBzbyB0aGlzCisgICAgLy8ga2luZCBvZiBzbG9wIGlzIE9L
LgorICAgIFJlZ2lzdGVyU2V0IGJsYWNrbGlzdGVkQ2FsbGVlU2F2ZXM7CisgICAgaWYgKGNvZGUu
c3RhY2tJc0FsbG9jYXRlZCgpKSB7CisgICAgICAgIGJsYWNrbGlzdGVkQ2FsbGVlU2F2ZXMgPSBS
ZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAgICBibGFja2xpc3RlZENh
bGxlZVNhdmVzLmV4Y2x1ZGUoY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIH0KKyAg
ICAKICAgICBhdXRvIGdldFNjcmF0Y2hlcyA9IFsmXSAoUmVnaXN0ZXJTZXQgc2V0LCBCYW5rIGJh
bmspIC0+IHN0ZDo6YXJyYXk8QXJnLCAyPiB7CiAgICAgICAgIHN0ZDo6YXJyYXk8QXJnLCAyPiBy
ZXN1bHQ7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyOyArK2kpIHsKICAgICAg
ICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGNv
ZGUucmVnc0luUHJpb3JpdHlPcmRlcihiYW5rKSkgewotICAgICAgICAgICAgICAgIGlmICghc2V0
LmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzZXQuZ2V0KHJlZykgJiYgIWJsYWNr
bGlzdGVkQ2FsbGVlU2F2ZXMuZ2V0KHJlZykpIHsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
W2ldID0gVG1wKHJlZyk7CiAgICAgICAgICAgICAgICAgICAgIHNldC5zZXQocmVnKTsKICAgICAg
ICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwpAQCAtMTEwLDEwICsxMjYsMTAgQEAgdm9pZCBs
b3dlckFmdGVyUmVnQWxsb2MoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0
W2ldID0gQXJnOjpzdGFjaygKLSAgICAgICAgICAgICAgICAgICAgY29kZS5hZGRTdGFja1Nsb3Qo
Ci0gICAgICAgICAgICAgICAgICAgICAgICBieXRlcyhjb25zZXJ2YXRpdmVXaWR0aChiYW5rKSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3RLaW5kOjpTcGlsbCkpOworICAgICAg
ICAgICAgICAgIFN0YWNrU2xvdComIHNsb3QgPSBzbG90c1tiYW5rXVtpXTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXNsb3QpCisgICAgICAgICAgICAgICAgICAgIHNsb3QgPSBjb2RlLmFkZFN0YWNr
U2xvdChieXRlcyhjb25zZXJ2YXRpdmVXaWR0aChiYW5rKSksIFN0YWNrU2xvdEtpbmQ6OlNwaWxs
KTsKKyAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBBcmc6OnN0YWNrKHNsb3RzW2JhbmtdW2ld
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlclN0YWNrQXJncy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlclN0YWNrQXJn
cy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJM
b3dlclN0YWNrQXJncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFpckxvd2VyU3RhY2tBcmdzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNp
bmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgor
I2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgor
I2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgbG93ZXJTdGFja0FyZ3MoQ29kZSYgY29kZSkKK3sK
KyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImxvd2VyU3RhY2tBcmdzIik7CisgICAg
CisgICAgLy8gTm93IHdlIG5lZWQgdG8gZGVkdWNlIGhvdyBtdWNoIGFyZ3VtZW50IGFyZWEgd2Ug
bmVlZC4KKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3Ig
KEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0
LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJnLmlzQ2FsbEFyZygpKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIEZvciBub3csIHdlIGFzc3VtZSB0aGF0IHdlIHVzZSA4IGJ5dGVzIG9m
IHRoZSBjYWxsIGFyZy4gQnV0IHRoYXQncyBub3QKKyAgICAgICAgICAgICAgICAgICAgLy8gc3Vj
aCBhbiBhd2Vzb21lIGFzc3VtcHRpb24uCisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU0CisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChhcmcub2Zmc2V0KCkgPj0gMCk7CisgICAgICAgICAgICAgICAgICAg
IGNvZGUucmVxdWVzdENhbGxBcmdBcmVhU2l6ZUluQnl0ZXMoYXJnLm9mZnNldCgpICsgOCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
Y29kZS5zZXRGcmFtZVNpemUoY29kZS5mcmFtZVNpemUoKSArIGNvZGUuY2FsbEFyZ0FyZWFTaXpl
SW5CeXRlcygpKTsKKworICAgIC8vIEZpbmFsbHksIHRyYW5zZm9ybSB0aGUgY29kZSB0byB1c2Ug
QWRkcidzIGluc3RlYWQgb2YgU3RhY2tTbG90J3MuIFRoaXMgaXMgYSBsb3NzbGVzcworICAgIC8v
IHRyYW5zZm9ybWF0aW9uIHNpbmNlIHdlIGNhbiBzZWFyY2ggdGhlIFN0YWNrU2xvdHMgYXJyYXkg
dG8gZmlndXJlIG91dCB3aGljaCBTdGFja1Nsb3QgYW55CisgICAgLy8gb2Zmc2V0LWZyb20tRlAg
cmVmZXJzIHRvLgorCisgICAgLy8gRklYTUU6IFRoaXMgbWF5IHByb2R1Y2UgYWRkcmVzc2VzIHRo
YXQgYXJlbid0IHZhbGlkIGlmIHdlIGVuZCB1cCB3aXRoIGEgZ2lub3Jtb3VzIHN0YWNrIGZyYW1l
LgorICAgIC8vIFdlIHdvdWxkIGhhdmUgdG8gc2NhdmVuZ2UgZm9yIHRlbXBvcmFyaWVzIGlmIHRo
aXMgaGFwcGVuZWQuIEZvcnR1bmF0ZWx5LCB0aGlzIGNhc2Ugd2lsbCBiZQorICAgIC8vIGV4dHJl
bWVseSByYXJlIHNvIHdlIGNhbiBkbyBjcmF6eSB0aGluZ3Mgd2hlbiBpdCBhcmlzZXMuCisgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjUzMAorCisgICAg
SW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogY29kZSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJ
bmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICBJbnN0JiBp
bnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICBpbnN0LmZvckVhY2hBcmco
CisgICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdp
ZHRoIHdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gc3RhY2tBZGRyID0gWyZdIChp
bnQzMl90IG9mZnNldCkgLT4gQXJnIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFyZyByZXN1
bHQgPSBBcmc6OnN0YWNrQWRkcihvZmZzZXQsIGNvZGUuZnJhbWVTaXplKCksIHdpZHRoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiRkFUQUw6IENvdWxkIG5vdCBjcmVhdGUgc3RhY2sgcmVmZXJlbmNl
IGZvciBvZmZzZXQgPSAiLCBvZmZzZXQsICIgYW5kIHdpZHRoID0gIiwgd2lkdGgsICJcbiIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNvZGU6XG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKGNvZGUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkZBVEFMOiBDb3VsZCBub3QgY3JlYXRlIHN0YWNrIHJlZmVyZW5jZSBm
b3Igb2Zmc2V0ID0gIiwgb2Zmc2V0LCAiIGFuZCB3aWR0aCA9ICIsIHdpZHRoLCAiXG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgICAgICAgICAgICAg
ICAgICBjYXNlIEFyZzo6U3RhY2s6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xv
dCogc2xvdCA9IGFyZy5zdGFja1Nsb3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChB
cmc6OmlzWkRlZihyb2xlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsb3QtPmtp
bmQoKSA9PSBTdGFja1Nsb3RLaW5kOjpTcGlsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICYmIHNsb3QtPmJ5dGVTaXplKCkgPiBieXRlcyh3aWR0aCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBDdXJyZW50bHkgd2Ugb25seSBoYW5kbGUgdGhpcyBzaW1wbGUgY2FzZSBi
ZWNhdXNlIGl0J3MgdGhlIG9ubHkgb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dGhhdCBhcmlzZXM6IFpEZWYncyBhcmUgb25seSAzMi1iaXQgcmlnaHQgbm93LiBTbywgd2hlbiB3
ZSBoaXQgdGhlc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhc3NlcnRpb25zIGl0
IG1lYW5zIHRoYXQgd2UgbmVlZCB0byBpbXBsZW1lbnQgdGhvc2Ugb3RoZXIga2luZHMgb2YKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB6ZXJvIGZpbGxzLgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3QtPmJ5dGVTaXplKCkgPT0gOCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQod2lkdGggPT0gV2lkdGgzMik7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1ZhbGlkRm9y
bShTdG9yZVplcm8zMiwgQXJnOjpTdGFjaykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
c3RJbmRleCArIDEsIFN0b3JlWmVybzMyLCBpbnN0Lm9yaWdpbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhY2tBZGRyKGFyZy5vZmZzZXQoKSArIDQgKyBzbG90LT5vZmZzZXRG
cm9tRlAoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgYXJnID0gc3RhY2tBZGRyKGFyZy5vZmZzZXQoKSArIHNsb3QtPm9mZnNldEZyb21GUCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpDYWxsQXJnOgorICAgICAgICAgICAgICAg
ICAgICAgICAgYXJnID0gc3RhY2tBZGRyKGFyZy5vZmZzZXQoKSAtIGNvZGUuZnJhbWVTaXplKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICAg
ICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KK30KKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlclN0YWNrQXJncy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJTdGFja0FyZ3MuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyU3Rh
Y2tBcmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyB0dXJucyBzdGFjayBhbmQgY2FsbEFyZyByZWZl
cmVuY2VzIGludG8gYWN0dWFsIEZQLXJlbGF0aXZlIG9yIFNQLXJlbGF0aXZlIGFkZHJlc3Nlcy4K
Ky8vIEFsc28gZml4ZXMgWkRlZnMgdG8gYW5vbnltb3VzIHN0YWNrIHNsb3RzLgorCit2b2lkIGxv
d2VyU3RhY2tBcmdzKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDIxNTIzOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAko
bm9uZXhpc3RlbnQpCkBAIC0xLDE5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkFpclNwaWxsRXZlcnl0aGluZy5oIgotCi0jaWYgRU5BQkxFKEIzX0pJVCkKLQotI2luY2x1ZGUg
IkFpckFyZ0lubGluZXMuaCIKLSNpbmNsdWRlICJBaXJDb2RlLmgiCi0jaW5jbHVkZSAiQWlyRml4
U3BpbGxzQWZ0ZXJUZXJtaW5hbHMuaCIKLSNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKLSNp
bmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgotI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCi0jaW5j
bHVkZSAiQWlyUGFkSW50ZXJmZXJlbmNlLmgiCi0jaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgot
I2luY2x1ZGUgPHd0Zi9JbmRleE1hcC5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7Ci0KLXZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCi17
Ci0gICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJzcGlsbEV2ZXJ5dGhpbmciKTsKLSAg
ICAKLSAgICBwYWRJbnRlcmZlcmVuY2UoY29kZSk7Ci0KLSAgICAvLyBXZSB3YW50IHRvIGtub3cg
dGhlIHNldCBvZiByZWdpc3RlcnMgdXNlZCBhdCBldmVyeSBwb2ludCBpbiBldmVyeSBiYXNpYyBi
bG9jay4KLSAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgVmVjdG9yPFJlZ2lzdGVyU2V0Pj4gdXNl
ZFJlZ2lzdGVycyhjb2RlLnNpemUoKSk7Ci0gICAgR1BMaXZlbmVzcyBncExpdmVuZXNzKGNvZGUp
OwotICAgIEZQTGl2ZW5lc3MgZnBMaXZlbmVzcyhjb2RlKTsKLSAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogY29kZSkgewotICAgICAgICBHUExpdmVuZXNzOjpMb2NhbENhbGMgZ3BMb2NhbENh
bGMoZ3BMaXZlbmVzcywgYmxvY2spOwotICAgICAgICBGUExpdmVuZXNzOjpMb2NhbENhbGMgZnBM
b2NhbENhbGMoZnBMaXZlbmVzcywgYmxvY2spOwotCi0gICAgICAgIHVzZWRSZWdpc3RlcnNbYmxv
Y2tdLnJlc2l6ZShibG9jay0+c2l6ZSgpICsgMSk7Ci0KLSAgICAgICAgYXV0byBzZXRVc2VkUmVn
aXN0ZXJzID0gWyZdICh1bnNpZ25lZCBpbmRleCkgewotICAgICAgICAgICAgUmVnaXN0ZXJTZXQm
IHJlZ2lzdGVyU2V0ID0gdXNlZFJlZ2lzdGVyc1tibG9ja11baW5kZXhdOwotICAgICAgICAgICAg
Zm9yIChUbXAgdG1wIDogZ3BMb2NhbENhbGMubGl2ZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHRtcC5pc1JlZygpKQotICAgICAgICAgICAgICAgICAgICByZWdpc3RlclNldC5zZXQodG1wLnJl
ZygpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGZwTG9jYWxD
YWxjLmxpdmUoKSkgewotICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmVnaXN0ZXJTZXQuc2V0KHRtcC5yZWcoKSk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIC8vIEdvdHRhIGFjY291bnQgZm9yIGRlYWQgYXNzaWdubWVudHMgdG8gcmVn
aXN0ZXJzLiBUaGVzZSBtYXkgaGFwcGVuIGJlY2F1c2UgdGhlIGlucHV0Ci0gICAgICAgICAgICAv
LyBjb2RlIGlzIHN1Ym9wdGltYWwuCi0gICAgICAgICAgICBJbnN0Ojpmb3JFYWNoRGVmV2l0aEV4
dHJhQ2xvYmJlcmVkUmVnczxUbXA+KAotICAgICAgICAgICAgICAgIGJsb2NrLT5nZXQoaW5kZXgg
LSAxKSwgYmxvY2stPmdldChpbmRleCksCi0gICAgICAgICAgICAgICAgWyZdIChjb25zdCBUbXAm
IHRtcCwgQXJnOjpSb2xlLCBCYW5rLCBXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
dG1wLmlzUmVnKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlclNldC5zZXQodG1w
LnJlZygpKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfTsKLQotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgewotICAg
ICAgICAgICAgc2V0VXNlZFJlZ2lzdGVycyhpbnN0SW5kZXggKyAxKTsKLSAgICAgICAgICAgIGdw
TG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKLSAgICAgICAgICAgIGZwTG9jYWxDYWxjLmV4
ZWN1dGUoaW5zdEluZGV4KTsKLSAgICAgICAgfQotICAgICAgICBzZXRVc2VkUmVnaXN0ZXJzKDAp
OwotICAgIH0KLQotICAgIC8vIEFsbG9jYXRlIGEgc3RhY2sgc2xvdCBmb3IgZWFjaCB0bXAuCi0g
ICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFsbFN0YWNrU2xvdHNbbnVtQmFua3NdOwotICAgIGZvciAo
dW5zaWduZWQgYmFua0luZGV4ID0gMDsgYmFua0luZGV4IDwgbnVtQmFua3M7ICsrYmFua0luZGV4
KSB7Ci0gICAgICAgIFZlY3RvcjxTdGFja1Nsb3QqPiYgc3RhY2tTbG90cyA9IGFsbFN0YWNrU2xv
dHNbYmFua0luZGV4XTsKLSAgICAgICAgQmFuayBiYW5rID0gc3RhdGljX2Nhc3Q8QmFuaz4oYmFu
a0luZGV4KTsKLSAgICAgICAgc3RhY2tTbG90cy5yZXNpemUoY29kZS5udW1UbXBzKGJhbmspKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IGNvZGUubnVtVG1wcyhiYW5rKTsgdG1w
SW5kZXgtLTspCi0gICAgICAgICAgICBzdGFja1Nsb3RzW3RtcEluZGV4XSA9IGNvZGUuYWRkU3Rh
Y2tTbG90KDgsIFN0YWNrU2xvdEtpbmQ6OlNwaWxsKTsKLSAgICB9Ci0KLSAgICBJbnNlcnRpb25T
ZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOwotICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2Rl
KSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxv
Y2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKLSAgICAgICAgICAgIFJlZ2lzdGVyU2V0JiBzZXRC
ZWZvcmUgPSB1c2VkUmVnaXN0ZXJzW2Jsb2NrXVtpbnN0SW5kZXhdOwotICAgICAgICAgICAgUmVn
aXN0ZXJTZXQmIHNldEFmdGVyID0gdXNlZFJlZ2lzdGVyc1tibG9ja11baW5zdEluZGV4ICsgMV07
Ci0gICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7Ci0KLSAgICAg
ICAgICAgIC8vIEZpcnN0IHRyeSB0byBzcGlsbCBkaXJlY3RseS4KLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICBBcmcmIGFyZyA9IGluc3QuYXJnc1tpXTsKLQotICAgICAgICAgICAgICAgIGlmIChhcmcu
aXNUbXAoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLmlzUmVnKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoaW5z
dC5hZG1pdHNTdGFjayhpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBz
dGFja1Nsb3QgPSBhbGxTdGFja1Nsb3RzW2FyZy5iYW5rKCldW2FyZy50bXBJbmRleCgpXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6c3RhY2soc3RhY2tTbG90KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBOb3cgZmFsbCBi
YWNrIG9uIHNwaWxsaW5nIHVzaW5nIHNlcGFyYXRlIE1vdmUncyB0byBsb2FkL3N0b3JlIHRoZSB0
bXAuCi0gICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoCi0gICAgICAgICAgICAgICAgWyZdIChU
bXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEJhbmsgYmFuaywgV2lkdGgpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBz
dGFja1Nsb3QgPSBhbGxTdGFja1Nsb3RzW2JhbmtdW3RtcC50bXBJbmRleCgpXTsKLSAgICAgICAg
ICAgICAgICAgICAgQXJnIGFyZyA9IEFyZzo6c3RhY2soc3RhY2tTbG90KTsKLQotICAgICAgICAg
ICAgICAgICAgICAvLyBOZWVkIHRvIGZpZ3VyZSBvdXQgYSByZWdpc3RlciB0byB1c2UuIEhvdyB3
ZSBkbyB0aGF0IGRlcGVuZHMgb24gdGhlIHJvbGUuCi0gICAgICAgICAgICAgICAgICAgIFJlZyBj
aG9zZW5SZWc7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocm9sZSkgewotICAgICAgICAg
ICAgICAgICAgICBjYXNlIEFyZzo6VXNlOgotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6
Q29sZFVzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGNvZGUucmVn
c0luUHJpb3JpdHlPcmRlcihiYW5rKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghc2V0QmVmb3JlLmdldChyZWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNldEJlZm9yZS5zZXQocmVnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hv
c2VuUmVnID0gcmVnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBB
cmc6OkRlZjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlpEZWY6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBjb2RlLnJlZ3NJblByaW9yaXR5T3JkZXIoYmFu
aykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEFmdGVyLmdldChyZWcp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFmdGVyLnNldChyZWcpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5SZWcgPSByZWc7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VXNlRGVmOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIEFyZzo6VXNlWkRlZjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBB
cmc6OkxhdGVVc2U6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpMYXRlQ29sZFVzZToK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlNjcmF0Y2g6Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgQXJnOjpFYXJseURlZjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkVh
cmx5WkRlZjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGNvZGUucmVn
c0luUHJpb3JpdHlPcmRlcihiYW5rKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghc2V0QmVmb3JlLmdldChyZWcpICYmICFzZXRBZnRlci5nZXQocmVnKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZXRBZnRlci5zZXQocmVnKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0QmVmb3JlLnNldChyZWcpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaG9zZW5SZWcgPSByZWc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBjYXNlIEFyZzo6VXNlQWRkcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIHdpbGwgbmV2ZXIgVXNlQWRkciBhIFRtcCwgdGhhdCBkb2Vzbid0IG1ha2Ugc2Vuc2UuCi0g
ICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hvc2VuUmVnKTsKLQotICAgICAgICAgICAg
ICAgICAgICB0bXAgPSBUbXAoY2hvc2VuUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChyb2xlID09IEFyZzo6U2NyYXRjaCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgICAgICBPcGNvZGUgbW92ZSA9IGJh
bmsgPT0gR1AgPyBNb3ZlIDogTW92ZURvdWJsZTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0FueVVzZShyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnQoaW5zdEluZGV4LCBtb3ZlLCBpbnN0Lm9yaWdpbiwgYXJnLCB0bXApOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xlKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmln
aW4sIHRtcCwgYXJnKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgICAgICBp
bnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7Ci0gICAgfQotICAgIAotICAgIGZpeFNwaWxsc0Fm
dGVyVGVybWluYWxzKGNvZGUpOwotfQotCi19IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCShyZXZpc2lvbiAyMTUyMzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCShub25l
eGlzdGVudCkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShCM19KSVQpCi0KLW5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKLQotY2xhc3MgQ29k
ZTsKLQotLy8gVGhpcyBpcyBhIHBoYXNlIGZvciB0ZXN0aW5nLiBJdCBiZWhhdmVzIGxpa2UgYSBy
ZWdpc3RlciBhbGxvY2F0b3IgaW4gdGhlIHNlbnNlIHRoYXQgaXQKLS8vIGVsaW1pbmF0ZXMgdGVt
cG9yYXJpZXMgZnJvbSB0aGUgcHJvZ3JhbS4gSXQgYWNjb21wbGlzaGVzIHRoaXMgYnkgYWx3YXlz
IHNwaWxsaW5nIGFsbAotLy8gdGVtcG9yYXJpZXMuIFRoZSByZXN1bHRpbmcgY29kZSBpcyBnb2lu
ZyB0byBiZSB2ZXJ5IGluZWZmaWNpZW50LiBUaGlzIHBoYXNlIGlzIGdyZWF0IGlmIHlvdQotLy8g
dGhpbmsgdGhhdCB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLiBZb3Ug
Y2FuIGNvbmZpcm0gdGhpcyBieSBydW5uaW5nIHRoaXMKLS8vIHBoYXNlIGluc3RlYWQgb2YgdGhl
IHJlZ2lzdGVyIGFsbG9jYXRvci4KLS8vCi0vLyBOb3RlIHRoYXQgZXZlbiB0aG91Z2ggdGhpcyBw
aGFzZSBkb2VzIHRoZSBjaGVhcGVzdCB0aGluZyBwb3NzaWJsZSwgaXQncyBub3QgZXZlbiB3cml0
dGVuIGluIGEKLS8vIHBhcnRpY3VsYXJseSBlZmZpY2llbnQgd2F5LiBTbywgZG9uJ3QgZ2V0IGFu
eSBpZGVhcyBhYm91dCB1c2luZyB0aGlzIHBoYXNlIHRvIHJlZHVjZSBjb21waWxlcgotLy8gbGF0
ZW5jeS4gSWYgeW91IHdhbnRlZCB0byBkbyB0aGF0LCB5b3Ugc2hvdWxkIGNvbWUgdXAgd2l0aCBh
IGNsZXZlciBhbGdvcml0aG0gaW5zdGVhZCBvZiB1c2luZwotLy8gdGhpcyBzaWxseSB0aGluZy4K
LQotdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYpOwotCi19IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCi0KLSNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAyMTUyMzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3
ICs3Nyw3IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKICAgICAg
ICAgcmV0dXJuOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWdpc3RlckF0T2Zmc2V0TGlz
dD4gcmVnaXN0ZXJPZmZzZXRzID0KLSAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxSZWdpc3RlckF0
T2Zmc2V0TGlzdD4oc3RhdGUucHJvYy0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICAgICAg
c3RkOjptYWtlX3VuaXF1ZTxSZWdpc3RlckF0T2Zmc2V0TGlzdD4oc3RhdGUucHJvYy0+Y2FsbGVl
U2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCkpOwogICAgIGlmIChzaG91bGREdW1wRGlzYXNzZW1i
bHkoKSkKICAgICAgICAgZGF0YUxvZygiVW53aW5kIGluZm8gZm9yICIsIENvZGVCbG9ja1dpdGhK
SVRUeXBlKHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpLCAiOiAiLCAq
cmVnaXN0ZXJPZmZzZXRzLCAiXG4iKTsKICAgICBzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jay0+c2V0
Q2FsbGVlU2F2ZVJlZ2lzdGVycyhXVEZNb3ZlKHJlZ2lzdGVyT2Zmc2V0cykpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuaAkocmV2
aXNpb24gMjE1MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zm
c2V0TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBl
bnVtIE9mZnNldEJhc2VUeXBlIHsgRnJhbWVQb2ludGVyQmFzZWQsIFplcm9CYXNlZCB9OwogCiAg
ICAgUmVnaXN0ZXJBdE9mZnNldExpc3QoKTsKLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdChSZWdp
c3RlclNldCwgT2Zmc2V0QmFzZVR5cGUgPSBGcmFtZVBvaW50ZXJCYXNlZCk7CisgICAgZXhwbGlj
aXQgUmVnaXN0ZXJBdE9mZnNldExpc3QoUmVnaXN0ZXJTZXQsIE9mZnNldEJhc2VUeXBlID0gRnJh
bWVQb2ludGVyQmFzZWQpOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIx
NTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzk4LDcgKzM5OCw2IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3Ry
aW5nOwogICAgIFwKICAgICB2KGJvb2wsIGxvZ0IzUGhhc2VUaW1lcywgZmFsc2UsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoZG91YmxlLCByYXJlQmxvY2tQZW5hbHR5LCAwLjAwMSwgTm9ybWFs
LCBudWxscHRyKSBcCi0gICAgdihib29sLCBhaXJTcGlsbHNFdmVyeXRoaW5nLCBmYWxzZSwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBhaXJMaW5lYXJTY2FuVmVyYm9zZSwgZmFsc2Us
IE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgYWlyTGluZWFyU2NhblNwaWxsc0V2ZXJ5
dGhpbmcsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGFpckZvcmNlQnJp
Z2dzQWxsb2NhdG9yLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAy
MTUyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMjgsNyArMTMyOCw3IEBAIEV4cGVjdGVkPHN0ZDo6dW5p
cXVlX3B0cjxXYXNtSW50ZXJuYWxGdW4KICAgICAgICAgQjM6OnByZXBhcmVGb3JHZW5lcmF0aW9u
KHByb2NlZHVyZSk7CiAgICAgICAgIEIzOjpnZW5lcmF0ZShwcm9jZWR1cmUsICpjb21waWxhdGlv
bkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQpOwogICAgICAgICBjb21waWxhdGlvbkNvbnRleHQu
d2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzID0gcHJvY2VkdXJlLnJlbGVhc2VCeXByb2R1Y3RzKCk7
Ci0gICAgICAgIHJlc3VsdC0+d2FzbUVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHBy
b2NlZHVyZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgIHJlc3VsdC0+d2FzbUVudHJ5
cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHByb2NlZHVyZS5jYWxsZWVTYXZlUmVnaXN0ZXJB
dE9mZnNldExpc3QoKTsKICAgICB9CiAKICAgICBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoY29tcGls
YXRpb25Db250ZXh0LCAqcmVzdWx0LCBzaWduYXR1cmUsIGluZm8sIG1vZGUpOwo=
</data>
<flag name="review"
          id="328197"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>