<?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>170108</bug_id>
          
          <creation_ts>2017-03-26 11:51:01 -0700</creation_ts>
          <short_desc>Air should use RegisterSet for RegLiveness</short_desc>
          <delta_ts>2017-03-26 16:36: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>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1291345</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-26 11:51:01 -0700</bug_when>
    <thetext>We shouldn&apos;t use those fancy index sparse sets and vectors and stuff.  We should just use RegisterSet, since that&apos;s a soooper fast and compact bitvector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291346</commentid>
    <comment_count>1</comment_count>
      <attachid>305428</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-26 11:52:00 -0700</bug_when>
    <thetext>Created attachment 305428
maybe it&apos;ll work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291356</commentid>
    <comment_count>2</comment_count>
      <attachid>305434</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-26 13:32:30 -0700</bug_when>
    <thetext>Created attachment 305434
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291358</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-03-26 13:34:33 -0700</bug_when>
    <thetext>Attachment 305434 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3TimingScope.cpp:60:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLowerAfterRegAlloc.cpp:37:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegLiveness.h:45:  The parameter name &quot;code&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirReportUsedRegisters.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegLiveness.cpp:52:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegLiveness.cpp:61:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegLiveness.cpp:64:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegLiveness.cpp:68:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegLiveness.cpp:79:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegLiveness.cpp:86:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegLiveness.cpp:104:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/air/AirRegLiveness.cpp:114:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 12 in 16 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>1291362</commentid>
    <comment_count>4</comment_count>
      <attachid>305434</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-03-26 13:59:34 -0700</bug_when>
    <thetext>Comment on attachment 305434
the patch

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

r=me

&gt; Source/JavaScriptCore/b3/B3TimingScope.cpp:60
&gt; +    return ensurePointer(s_state, [] { return new State(); });

Nice thing!

&gt; Source/JavaScriptCore/b3/air/AirLiveness.h:-403
&gt; -typedef AbstractLiveness&lt;RegLivenessAdapter&gt; RegLiveness;

OK, this will be replaced with specialized RegLiveness, which uses RegisterSet.

&gt; Source/JavaScriptCore/b3/air/AirRegLiveness.cpp:95
&gt; +}

OK, it is (logically) identical to the AbstractLiveness one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291364</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-26 14:41:28 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/214408/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291372</commentid>
    <comment_count>6</comment_count>
      <attachid>305434</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-26 15:49:42 -0700</bug_when>
    <thetext>Comment on attachment 305434
the patch

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

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        AbstractLiveness&lt;&gt;, but it&apos;s about 30% faster. It gets its speed boost from just using

Awesome!

&gt; Source/WTF/wtf/Atomics.h:532
&gt; +        T* newValue = func();

Style nit: It feels weird to take a lambda here, and assume that it calls &quot;new&quot; on T, since you call &quot;delete&quot; below. Why not just take arguments for T&apos;s constructor that you forward to it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291373</commentid>
    <comment_count>7</comment_count>
      <attachid>305434</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-26 15:50:28 -0700</bug_when>
    <thetext>Comment on attachment 305434
the patch

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

&gt;&gt; Source/WTF/wtf/Atomics.h:532
&gt;&gt; +        T* newValue = func();
&gt; 
&gt; Style nit: It feels weird to take a lambda here, and assume that it calls &quot;new&quot; on T, since you call &quot;delete&quot; below. Why not just take arguments for T&apos;s constructor that you forward to it?

Or perhaps have two lambdas. One for making a value, one for cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291377</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-03-26 16:36:40 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #7)
&gt; Comment on attachment 305434 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=305434&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WTF/wtf/Atomics.h:532
&gt; &gt;&gt; +        T* newValue = func();
&gt; &gt; 
&gt; &gt; Style nit: It feels weird to take a lambda here, and assume that it calls &quot;new&quot; on T, since you call &quot;delete&quot; below. Why not just take arguments for T&apos;s constructor that you forward to it?
&gt; 
&gt; Or perhaps have two lambdas. One for making a value, one for cleanup

You&apos;re right, the lambda is dumb.  It should just take a type parameter and new it, and then it should take an argument pack to pass to the constructor.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305428</attachid>
            <date>2017-03-26 11:52:00 -0700</date>
            <delta_ts>2017-03-26 13:32:30 -0700</delta_ts>
            <desc>maybe it&apos;ll work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>32192</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxNDQwNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTAxLDYgKzEwMSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvYWly
L0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAKICAgICBiMy9haXIvQWlyUGFkSW50ZXJmZXJlbmNl
LmNwcAogICAgIGIzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAorICAgIGIzL2Fpci9BaXJSZWdMaXZl
bmVzcy5jcHAKICAgICBiMy9haXIvQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5jcHAKICAgICBiMy9h
aXIvQWlyU2ltcGxpZnlDRkcuY3BwCiAgICAgYjMvYWlyL0FpclNwZWNpYWwuY3BwCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE0NDA0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTEwMDUsNiArMTAwNSw4IEBACiAJCTBGRjQyNzU3MTU5MTRBMjAwMDRD
QjlGRiAvKiBMaW5rQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRjQyNzU2MTU5MTRBMjAwMDRDQjlGRiAvKiBMaW5rQnVmZmVyLmNwcCAq
LzsgfTsKIAkJMEZGNDI3NjQxNTkxQTFDQzAwNENCOUZGIC8qIERGR0Rpc2Fzc2VtYmxlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0Mjc2MTE1
OTFBMUM5MDA0Q0I5RkYgLyogREZHRGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZGNDI3NjUx
NTkxQTFDRTAwNENCOUZGIC8qIERGR0Rpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNDI3NjIxNTkxQTFDOTAwNENCOUZGIC8qIERG
R0Rpc2Fzc2VtYmxlci5oICovOyB9OworCQkwRkY0QjRCQzFFODg0NDk3MDBEQkJFODYgLyogQWly
UmVnTGl2ZW5lc3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZGNEI0QkExRTg4NDQ5NTAwREJCRTg2IC8qIEFpclJlZ0xpdmVuZXNzLmNwcCAqLzsg
fTsKKwkJMEZGNEI0QkQxRTg4NDQ5QTAwREJCRTg2IC8qIEFpclJlZ0xpdmVuZXNzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0QjRCQjFFODg0NDk1
MDBEQkJFODYgLyogQWlyUmVnTGl2ZW5lc3MuaCAqLzsgfTsKIAkJMEZGNjBBQzIxNjc0MEY4MzAw
MDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjYwQUMwMTY3NDBGODEwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0
ZXNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEZGNjBBQzMxNjc0MEY4ODAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNjBBQkYxNjc0MEY4
MTAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwICovOyB9OwogCQkwRkY3MTY4QzE1QTNC
MjM1MDA4RjVEQUEgLyogUHJvcGVydHlPZmZzZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjcxNjhBMTVBM0IyMzEwMDhGNURBQSAvKiBQcm9wZXJ0
eU9mZnNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0zNTIwLDYgKzM1MjIsOCBAQAogCQkwRkY0Mjc1NjE1OTE0QTIwMDA0Q0I5RkYgLyogTGlu
a0J1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaW5rQnVm
ZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNDI3NjExNTkxQTFDOTAw
NENCOUZGIC8qIERGR0Rpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdEaXNhc3NlbWJsZXIuY3BwOyBwYXRoID0gZGZnL0RGR0Rpc2Fzc2VtYmxl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjQyNzYyMTU5MUExQzkwMDRD
QjlGRiAvKiBERkdEaXNhc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHRGlzYXNzZW1ibGVyLmg7IHBhdGggPSBkZmcvREZHRGlzYXNzZW1ibGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRjRCNEJBMUU4ODQ0OTUwMERCQkU4NiAvKiBBaXJS
ZWdMaXZlbmVzcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJS
ZWdMaXZlbmVzcy5jcHA7IHBhdGggPSBiMy9haXIvQWlyUmVnTGl2ZW5lc3MuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkY0QjRCQjFFODg0NDk1MDBEQkJFODYgLyogQWlyUmVn
TGl2ZW5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyUmVnTGl2ZW5l
c3MuaDsgcGF0aCA9IGIzL2Fpci9BaXJSZWdMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkY2MEFCRjE2NzQwRjgxMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWR1Y2VXaGl0ZXNwYWNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNjBBQzAxNjc0MEY4MTAwMDI5
Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVkdWNlV2hpdGVzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY3
MTY4QTE1QTNCMjMxMDA4RjVEQUEgLyogUHJvcGVydHlPZmZzZXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUHJvcGVydHlPZmZzZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTU1NzgsNiArNTU4Miw4IEBACiAJCQkJMEY5Q0FCQzcxREI1NEE3NjAwMDhFODNC
IC8qIEFpclBhZEludGVyZmVyZW5jZS5oICovLAogCQkJCTBGRUM4NTVFMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCAqLywKIAkJCQkwRkVDODU1RjFCREFDREM3MDA4MEZGNzQg
LyogQWlyUGhhc2VTY29wZS5oICovLAorCQkJCTBGRjRCNEJBMUU4ODQ0OTUwMERCQkU4NiAvKiBB
aXJSZWdMaXZlbmVzcy5jcHAgKi8sCisJCQkJMEZGNEI0QkIxRTg4NDQ5NTAwREJCRTg2IC8qIEFp
clJlZ0xpdmVuZXNzLmggKi8sCiAJCQkJMEY0NTcwM0ExQkU0NUYwQTAwNjJBNjI5IC8qIEFpclJl
cG9ydFVzZWRSZWdpc3RlcnMuY3BwICovLAogCQkJCTBGNDU3MDNCMUJFNDVGMEEwMDYyQTYyOSAv
KiBBaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmggKi8sCiAJCQkJMEYzMzhERkIxQkVENTEyNzAwMTND
ODhGIC8qIEFpclNpbXBsaWZ5Q0ZHLmNwcCAqLywKQEAgLTgyMzYsNiArODI0Miw3IEBACiAJCQkJ
MEY2NEIyN0ExQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNDI5RDhERTBFRDIyMDVCMDBCODk2MTkgLyogQ2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLywK
IAkJCQk2MkVDOUJCNzFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRjRCNEJEMUU4ODQ0OUEwMERCQkU4NiAvKiBBaXJSZWdMaXZl
bmVzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjJENzU1RDcxQjg0RkI0QTAwMTgwMUZBIC8qIENh
bGxGcmFtZVNodWZmbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNCMTE0QkNGNzE4MDA4
ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzI5RTE0Q0E3
REM1MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCBpbiBIZWFkZXJzICovLApAQCAtMTA2MjUs
NiArMTA2MzIsNyBAQAogCQkJCUE3RkI2MEE0MTAzRjdEQzIwMDE3QTI4NiAvKiBQcm9wZXJ0eURl
c2NyaXB0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERTgxMDdFQzdFNzAwNjUwNDQ2
IC8qIFByb3BlcnR5U2xvdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBREUzOUZGRjE2REQxNDRC
MDAwM0NENEEgLyogUHJvcGVydHlUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkY0QjRC
QzFFODg0NDk3MDBEQkJFODYgLyogQWlyUmVnTGl2ZW5lc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNjVGQjUxMTcxODRFRUU3MDAwQzEyQjcwIC8qIFByb3RvQ2FsbEZyYW1lLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0NzRDMzNDMTZBQTJEOUIwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNzlCMDBDQkMxQzZBQjA3RTAwODhDNjVEIC8qIFByb3h5Q29u
c3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNUaW1pbmdTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVGltaW5nU2NvcGUuY3BwCShyZXZpc2lvbiAyMTQ0MDQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNUaW1pbmdTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMjMgKzI5LDUz
IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1ZGUgIkIzQ29tbW9uLmgiCi0jaW5jbHVk
ZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgewogCituYW1lc3BhY2UgeworCitjbGFzcyBTdGF0ZSB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoU3RhdGUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIFN0YXRlKCkgeyB9CisgICAgCisgICAgU2Vjb25kcyBhZGRUb1RvdGFsKGNv
bnN0IGNoYXIqIG5hbWUsIFNlY29uZHMgZHVyYXRpb24pCisgICAgeworICAgICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKGxvY2spOworICAgICAgICByZXR1cm4gdG90YWxzLmFkZChuYW1lLCBT
ZWNvbmRzKDApKS5pdGVyYXRvci0+dmFsdWUgKz0gZHVyYXRpb247CisgICAgfQorICAgIAorcHJp
dmF0ZToKKyAgICBIYXNoTWFwPGNvbnN0IGNoYXIqLCBTZWNvbmRzPiB0b3RhbHM7CisgICAgTG9j
ayBsb2NrOworfTsKKworU3RhdGUmIHN0YXRlKCkKK3sKKyAgICBzdGF0aWMgQXRvbWljPFN0YXRl
Kj4gc19zdGF0ZTsKKyAgICByZXR1cm4gZW5zdXJlUG9pbnRlcihzX3N0YXRlLCBbXSB7IHJldHVy
biBuZXcgU3RhdGUoKTsgfSk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCiBUaW1p
bmdTY29wZTo6VGltaW5nU2NvcGUoY29uc3QgY2hhciogbmFtZSkKICAgICA6IG1fbmFtZShuYW1l
KQogewogICAgIGlmIChzaG91bGRNZWFzdXJlUGhhc2VUaW1pbmcoKSkKLSAgICAgICAgbV9iZWZv
cmUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpOworICAgICAgICBtX2JlZm9yZSA9
IE1vbm90b25pY1RpbWU6Om5vdygpOwogfQogCiBUaW1pbmdTY29wZTo6flRpbWluZ1Njb3BlKCkK
IHsKICAgICBpZiAoc2hvdWxkTWVhc3VyZVBoYXNlVGltaW5nKCkpIHsKLSAgICAgICAgZG91Ymxl
IGFmdGVyID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKTsKLSAgICAgICAgZGF0YUxv
ZygiW0IzXSAiLCBtX25hbWUsICIgdG9vazogIiwgYWZ0ZXIgLSBtX2JlZm9yZSwgIiBtcy5cbiIp
OworICAgICAgICBTZWNvbmRzIGR1cmF0aW9uID0gTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX2Jl
Zm9yZTsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJbQjNdICIsIG1fbmFtZSwgIiB0
b29rOiAiLCBkdXJhdGlvbi5taWxsaXNlY29uZHMoKSwgIiBtcyAiLAorICAgICAgICAgICAgIih0
b3RhbDogIiwgc3RhdGUoKS5hZGRUb1RvdGFsKG1fbmFtZSwgZHVyYXRpb24pLm1pbGxpc2Vjb25k
cygpLCAiIG1zKS5cbiIpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVGltaW5nU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNUaW1pbmdTY29wZS5oCShyZXZpc2lvbiAyMTQ0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNUaW1pbmdTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI3LDcgQEAKIAog
I2lmIEVOQUJMRShCM19KSVQpCiAKKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKQEAgLTM5LDcgKzQwLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGNvbnN0IGNoYXIq
IG1fbmFtZTsKLSAgICBkb3VibGUgbV9iZWZvcmU7CisgICAgTW9ub3RvbmljVGltZSBtX2JlZm9y
ZTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lz
dGVyc0J5R3JhcGhDb2xvcmluZy5jcHAJKHJldmlzaW9uIDIxNDQwNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjU3LDcgKzIyNTcsNyBAQCBwcml2YXRlOgogCiB2b2lkIGFs
bG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nKENvZGUmIGNvZGUpCiB7Ci0gICAgUGhhc2VT
Y29wZSBwaGFzZVNjb3BlKGNvZGUsICJBaXI6OmFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9y
aW5nIik7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVJlZ2lzdGVy
c0J5R3JhcGhDb2xvcmluZyIpOwogICAgIAogICAgIGlmIChmYWxzZSkKICAgICAgICAgZGF0YUxv
ZygiQ29kZSBiZWZvcmUgZ3JhcGggY29sb3Jpbmc6XG4iLCBjb2RlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHJldmlzaW9uIDIxNDQwNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5
KQpAQCAtNzksMzAgKzc5LDE0IEBAIHByaXZhdGU6CiAgICAgQ29kZSYgbV9jb2RlOwogfTsKIAot
c3RydWN0IFJlZ0xpdmVuZXNzQWRhcHRlciB7Ci0gICAgdHlwZWRlZiBSZWcgVGhpbmc7Ci0gICAg
dHlwZWRlZiBCaXRWZWN0b3IgSW5kZXhTZXQ7Ci0KLSAgICBSZWdMaXZlbmVzc0FkYXB0ZXIoQ29k
ZSYpIHsgfQotCi0gICAgc3RhdGljIHVuc2lnbmVkIG51bUluZGljZXMoQ29kZSYpCi0gICAgewot
ICAgICAgICByZXR1cm4gUmVnOjptYXhJbmRleCgpICsgMTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
Ym9vbCBhY2NlcHRzQmFuayhCYW5rKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgc3RhdGljIGJvb2wg
YWNjZXB0c1JvbGUoQXJnOjpSb2xlKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgc3RhdGljIHVuc2ln
bmVkIHZhbHVlVG9JbmRleChSZWcgcmVnKSB7IHJldHVybiByZWcuaW5kZXgoKTsgfQotICAgIFJl
ZyBpbmRleFRvVmFsdWUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIFJlZzo6ZnJvbUluZGV4KGlu
ZGV4KTsgfQotfTsKLQorLy8gSEVBRFMgVVA6IFRoZSBhbGdvcml0aG0gaGVyZSBpcyBkdXBsaWNh
dGVkIGluIEFpclJlZ0xpdmVuZXNzLmguCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdGVyPgotY2xh
c3MgQWJzdHJhY3RMaXZlbmVzcyA6IHB1YmxpYyBBZGFwdGVyIHsKK2NsYXNzIExpdmVuZXNzIDog
cHVibGljIEFkYXB0ZXIgewogICAgIHN0cnVjdCBXb3Jrc2V0OwogcHVibGljOgogICAgIHR5cGVk
ZWYgdHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcgVGhpbmc7CiAgICAgCi0gICAgQWJzdHJhY3RMaXZl
bmVzcyhDb2RlJiBjb2RlKQorICAgIExpdmVuZXNzKENvZGUmIGNvZGUpCiAgICAgICAgIDogQWRh
cHRlcihjb2RlKQogICAgICAgICAsIG1fd29ya3NldChBZGFwdGVyOjpudW1JbmRpY2VzKGNvZGUp
KQogICAgICAgICAsIG1fbGl2ZUF0SGVhZChjb2RlLnNpemUoKSkKQEAgLTEzMSw3ICsxMTUsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CiAKICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGJsb2NrSW5kZXggPSBjb2RlLnNpemUoKTsgYmxvY2tJbmRleC0tOykgewotICAg
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gY29kZS5hdChibG9ja0luZGV4KTsKKyAg
ICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGNvZGVbYmxvY2tJbmRleF07CiAgICAg
ICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAK
QEAgLTE4Nyw3ICsxNzEsNyBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBjYWxjdWxhdG9yIGhhcyB0
byBiZSBydW4gaW4gcmV2ZXJzZS4KICAgICBjbGFzcyBMb2NhbENhbGMgewogICAgIHB1YmxpYzoK
LSAgICAgICAgTG9jYWxDYWxjKEFic3RyYWN0TGl2ZW5lc3MmIGxpdmVuZXNzLCBCYXNpY0Jsb2Nr
KiBibG9jaykKKyAgICAgICAgTG9jYWxDYWxjKExpdmVuZXNzJiBsaXZlbmVzcywgQmFzaWNCbG9j
ayogYmxvY2spCiAgICAgICAgICAgICA6IG1fbGl2ZW5lc3MobGl2ZW5lc3MpCiAgICAgICAgICAg
ICAsIG1fYmxvY2soYmxvY2spCiAgICAgICAgIHsKQEAgLTE5OCwzNyArMTgyLDM5IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICB3b3Jrc2V0LmFkZChpbmRleCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBzdHJ1Y3QgSXRlcmF0b3IgewotICAgICAgICAgICAgSXRlcmF0b3IoQWRhcHRlciYgYWRh
cHRlciwgSW5kZXhTcGFyc2VTZXQ8VW5zYWZlVmVjdG9yT3ZlcmZsb3c+Ojpjb25zdF9pdGVyYXRv
ciBzcGFyY2VTZXRJdGVyYXRvcikKLSAgICAgICAgICAgICAgICA6IG1fYWRhcHRlcihhZGFwdGVy
KQotICAgICAgICAgICAgICAgICwgbV9zcGFyY2VTZXRJdGVyYXRvcihzcGFyY2VTZXRJdGVyYXRv
cikKKyAgICAgICAgY2xhc3MgSXRlcmFibGUgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAg
ICBJdGVyYWJsZShMaXZlbmVzcyYgbGl2ZW5lc3MpCisgICAgICAgICAgICAgICAgOiBtX2xpdmVu
ZXNzKGxpdmVuZXNzKQogICAgICAgICAgICAgewogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBJdGVyYXRvciYgb3BlcmF0b3IrKygpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
KyttX3NwYXJjZVNldEl0ZXJhdG9yOwotICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgICAgICAgICBpdGVyYXRvcihBZGFwdGVyJiBhZGFwdGVyLCBJbmRleFNw
YXJzZVNldDxVbnNhZmVWZWN0b3JPdmVyZmxvdz46OmNvbnN0X2l0ZXJhdG9yIHNwYXJjZVNldEl0
ZXJhdG9yKQorICAgICAgICAgICAgICAgICAgICA6IG1fYWRhcHRlcihhZGFwdGVyKQorICAgICAg
ICAgICAgICAgICAgICAsIG1fc3BhcmNlU2V0SXRlcmF0b3Ioc3BhcmNlU2V0SXRlcmF0b3IpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdHlwZW5h
bWUgQWRhcHRlcjo6VGhpbmcgb3BlcmF0b3IqKCkgY29uc3QKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbV9hZGFwdGVyLmluZGV4VG9WYWx1ZSgqbV9zcGFyY2VTZXRJdGVy
YXRvcik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9y
KysoKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKyttX3NwYXJjZVNl
dEl0ZXJhdG9yOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImIG90
aGVyKSB7IHJldHVybiBtX3NwYXJjZVNldEl0ZXJhdG9yID09IG90aGVyLm1fc3BhcmNlU2V0SXRl
cmF0b3I7IH0KLSAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJdGVyYXRvciYgb3Ro
ZXIpIHsgcmV0dXJuIG1fc3BhcmNlU2V0SXRlcmF0b3IgIT0gb3RoZXIubV9zcGFyY2VTZXRJdGVy
YXRvcjsgfQorICAgICAgICAgICAgICAgIHR5cGVuYW1lIEFkYXB0ZXI6OlRoaW5nIG9wZXJhdG9y
KigpIGNvbnN0CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bV9hZGFwdGVyLmluZGV4VG9WYWx1ZSgqbV9zcGFyY2VTZXRJdGVyYXRvcik7CisgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAgICBBZGFwdGVyJiBtX2FkYXB0
ZXI7Ci0gICAgICAgICAgICBJbmRleFNwYXJzZVNldDxVbnNhZmVWZWN0b3JPdmVyZmxvdz46OmNv
bnN0X2l0ZXJhdG9yIG1fc3BhcmNlU2V0SXRlcmF0b3I7Ci0gICAgICAgIH07CisgICAgICAgICAg
ICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgeyByZXR1cm4gbV9z
cGFyY2VTZXRJdGVyYXRvciA9PSBvdGhlci5tX3NwYXJjZVNldEl0ZXJhdG9yOyB9CisgICAgICAg
ICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgeyByZXR1cm4g
bV9zcGFyY2VTZXRJdGVyYXRvciAhPSBvdGhlci5tX3NwYXJjZVNldEl0ZXJhdG9yOyB9CiAKLSAg
ICAgICAgc3RydWN0IEl0ZXJhYmxlIHsKLSAgICAgICAgICAgIEl0ZXJhYmxlKEFic3RyYWN0TGl2
ZW5lc3MmIGxpdmVuZXNzKQotICAgICAgICAgICAgICAgIDogbV9saXZlbmVzcyhsaXZlbmVzcykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByaXZhdGU6CisgICAg
ICAgICAgICAgICAgQWRhcHRlciYgbV9hZGFwdGVyOworICAgICAgICAgICAgICAgIEluZGV4U3Bh
cnNlU2V0PFVuc2FmZVZlY3Rvck92ZXJmbG93Pjo6Y29uc3RfaXRlcmF0b3IgbV9zcGFyY2VTZXRJ
dGVyYXRvcjsKKyAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgIEl0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gSXRlcmF0b3IobV9saXZlbmVzcywgbV9saXZlbmVzcy5tX3dvcmtzZXQu
YmVnaW4oKSk7IH0KICAgICAgICAgICAgIEl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIEl0
ZXJhdG9yKG1fbGl2ZW5lc3MsIG1fbGl2ZW5lc3MubV93b3Jrc2V0LmVuZCgpKTsgfQpAQCAtMjM5
LDcgKzIyNSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KIAogICAgICAgICBwcml2YXRlOgot
ICAgICAgICAgICAgQWJzdHJhY3RMaXZlbmVzcyYgbV9saXZlbmVzczsKKyAgICAgICAgICAgIExp
dmVuZXNzJiBtX2xpdmVuZXNzOwogICAgICAgICB9OwogCiAgICAgICAgIEl0ZXJhYmxlIGxpdmUo
KSBjb25zdApAQCAtMzAxLDcgKzI4Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAK
ICAgICBwcml2YXRlOgotICAgICAgICBBYnN0cmFjdExpdmVuZXNzJiBtX2xpdmVuZXNzOworICAg
ICAgICBMaXZlbmVzcyYgbV9saXZlbmVzczsKICAgICAgICAgQmFzaWNCbG9jayogbV9ibG9jazsK
ICAgICB9OwogCkBAIC0zMTMsNyArMjk5LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFVuZGVybHlpbmdJdGVyYWJsZT4KICAgICBjbGFzcyBJdGVyYWJsZSB7CiAgICAgcHVibGlj
OgotICAgICAgICBJdGVyYWJsZShBYnN0cmFjdExpdmVuZXNzJiBsaXZlbmVzcywgY29uc3QgVW5k
ZXJseWluZ0l0ZXJhYmxlJiBpdGVyYWJsZSkKKyAgICAgICAgSXRlcmFibGUoTGl2ZW5lc3MmIGxp
dmVuZXNzLCBjb25zdCBVbmRlcmx5aW5nSXRlcmFibGUmIGl0ZXJhYmxlKQogICAgICAgICAgICAg
OiBtX2xpdmVuZXNzKGxpdmVuZXNzKQogICAgICAgICAgICAgLCBtX2l0ZXJhYmxlKGl0ZXJhYmxl
KQogICAgICAgICB7CkBAIC0zMjcsNyArMzEzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgewog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpdGVyYXRvcihBYnN0cmFj
dExpdmVuZXNzJiBsaXZlbmVzcywgdHlwZW5hbWUgVW5kZXJseWluZ0l0ZXJhYmxlOjpjb25zdF9p
dGVyYXRvciBpdGVyKQorICAgICAgICAgICAgaXRlcmF0b3IoTGl2ZW5lc3MmIGxpdmVuZXNzLCB0
eXBlbmFtZSBVbmRlcmx5aW5nSXRlcmFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIpCiAgICAgICAg
ICAgICAgICAgOiBtX2xpdmVuZXNzKCZsaXZlbmVzcykKICAgICAgICAgICAgICAgICAsIG1faXRl
cihpdGVyKQogICAgICAgICAgICAgewpAQCAtMzU2LDcgKzM0Miw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIH0KIAogICAgICAgICBwcml2YXRlOgotICAgICAgICAgICAgQWJzdHJhY3RMaXZlbmVz
cyogbV9saXZlbmVzczsKKyAgICAgICAgICAgIExpdmVuZXNzKiBtX2xpdmVuZXNzOwogICAgICAg
ICAgICAgdHlwZW5hbWUgVW5kZXJseWluZ0l0ZXJhYmxlOjpjb25zdF9pdGVyYXRvciBtX2l0ZXI7
CiAgICAgICAgIH07CiAKQEAgLTM2OSw3ICszNTUsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAog
ICAgIHByaXZhdGU6Ci0gICAgICAgIEFic3RyYWN0TGl2ZW5lc3MmIG1fbGl2ZW5lc3M7CisgICAg
ICAgIExpdmVuZXNzJiBtX2xpdmVuZXNzOwogICAgICAgICBjb25zdCBVbmRlcmx5aW5nSXRlcmFi
bGUmIG1faXRlcmFibGU7CiAgICAgfTsKIApAQCAtMzg3LDcgKzM3Myw3IEBAIHB1YmxpYzoKIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTG9jYWxDYWxjOwotICAgIGZyaWVuZCBzdHJ1Y3Qg
TG9jYWxDYWxjOjpJdGVyYWJsZTsKKyAgICBmcmllbmQgY2xhc3MgTG9jYWxDYWxjOjpJdGVyYWJs
ZTsKIAogICAgIEluZGV4U3BhcnNlU2V0PFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3dvcmtzZXQ7
CiAgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgVmVjdG9yPHVuc2lnbmVkPj4gbV9saXZlQXRIZWFk
OwpAQCAtMzk1LDEyICszODEsMTEgQEAgcHJpdmF0ZToKIH07CiAKIHRlbXBsYXRlPEJhbmsgYmFu
aywgQXJnOjpUZW1wZXJhdHVyZSBtaW5pbXVtVGVtcGVyYXR1cmUgPSBBcmc6OkNvbGQ+Ci11c2lu
ZyBUbXBMaXZlbmVzcyA9IEFic3RyYWN0TGl2ZW5lc3M8VG1wTGl2ZW5lc3NBZGFwdGVyPGJhbmss
IG1pbmltdW1UZW1wZXJhdHVyZT4+OwordXNpbmcgVG1wTGl2ZW5lc3MgPSBMaXZlbmVzczxUbXBM
aXZlbmVzc0FkYXB0ZXI8YmFuaywgbWluaW11bVRlbXBlcmF0dXJlPj47CiAKLXR5cGVkZWYgQWJz
dHJhY3RMaXZlbmVzczxUbXBMaXZlbmVzc0FkYXB0ZXI8R1A+PiBHUExpdmVuZXNzOwotdHlwZWRl
ZiBBYnN0cmFjdExpdmVuZXNzPFRtcExpdmVuZXNzQWRhcHRlcjxGUD4+IEZQTGl2ZW5lc3M7Ci10
eXBlZGVmIEFic3RyYWN0TGl2ZW5lc3M8U3RhY2tTbG90TGl2ZW5lc3NBZGFwdGVyPiBTdGFja1Ns
b3RMaXZlbmVzczsKLXR5cGVkZWYgQWJzdHJhY3RMaXZlbmVzczxSZWdMaXZlbmVzc0FkYXB0ZXI+
IFJlZ0xpdmVuZXNzOwordHlwZWRlZiBMaXZlbmVzczxUbXBMaXZlbmVzc0FkYXB0ZXI8R1A+PiBH
UExpdmVuZXNzOwordHlwZWRlZiBMaXZlbmVzczxUbXBMaXZlbmVzc0FkYXB0ZXI8RlA+PiBGUExp
dmVuZXNzOwordHlwZWRlZiBMaXZlbmVzczxTdGFja1Nsb3RMaXZlbmVzc0FkYXB0ZXI+IFN0YWNr
U2xvdExpdmVuZXNzOwogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb2dSZWdpc3Rl
clByZXNzdXJlLmNwcAkocmV2aXNpb24gMjE0NDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNyBAQAogI2luY2x1ZGUgIkFpckFyZ0lubGluZXMuaCIKICNpbmNsdWRlICJBaXJDb2Rl
LmgiCiAjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKLSNpbmNsdWRlICJBaXJMaXZlbmVzcy5o
IgorI2luY2x1ZGUgIkFpclJlZ0xpdmVuZXNzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAkocmV2aXNpb24gMjE0
NDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxs
b2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiQWlyRW1p
dFNodWZmbGUuaCIKICNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJBaXJJ
bnN0SW5saW5lcy5oIgotI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5jbHVkZSAiQWlyUmVn
TGl2ZW5lc3MuaCIKICNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCiAjaW5jbHVkZSAiQjNDQ2Fs
bFZhbHVlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnTGl2ZW5lc3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnTGl2ZW5lc3MuY3BwCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnTGl2ZW5lc3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclJlZ0xp
dmVuZXNzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK1JlZ0xpdmVuZXNzOjpSZWdMaXZlbmVzcyhDb2Rl
JiBjb2RlKQorICAgIDogbV9saXZlQXRIZWFkKGNvZGUuc2l6ZSgpKQorICAgICwgbV9saXZlQXRU
YWlsKGNvZGUuc2l6ZSgpKQoreworICAgIC8vIFRoZSBsaXZlQXRUYWlsIG9mIGVhY2ggYmxvY2sg
YXV0b21hdGljYWxseSBjb250YWlucyB0aGUgTGF0ZVVzZSdzIG9mIHRoZSB0ZXJtaW5hbC4KKyAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBSZWdpc3RlclNldCYg
bGl2ZUF0VGFpbCA9IG1fbGl2ZUF0VGFpbFtibG9ja107CisgICAgICAgICAgICAKKyAgICAgICAg
YmxvY2stPmxhc3QoKS5mb3JFYWNoPFJlZz4oCisgICAgICAgICAgICBbJl0gKFJlZyYgcmVnLCBB
cmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICBpZiAoQXJnOjpp
c0xhdGVVc2Uocm9sZSkpCisgICAgICAgICAgICAgICAgICAgIGxpdmVBdFRhaWwuYWRkKHJlZyk7
CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgICAgIAorICAgIEJpdFZlY3RvciBkaXJ0eUJs
b2NrczsKKyAgICBmb3IgKHNpemVfdCBibG9ja0luZGV4ID0gY29kZS5zaXplKCk7IGJsb2NrSW5k
ZXgtLTspCisgICAgICAgIGRpcnR5QmxvY2tzLnNldChibG9ja0luZGV4KTsKKyAgICAgICAgCisg
ICAgYm9vbCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAg
ICAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGJsb2NrSW5kZXggPSBjb2RlLnNpemUoKTsg
YmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBjb2RlW2Js
b2NrSW5kZXhdOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghZGlydHlCbG9ja3MucXVp
Y2tDbGVhcihibG9ja0luZGV4KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIExvY2FsQ2FsYyBsb2NhbENhbGMoKnRoaXMsIGJsb2NrKTsK
KyAgICAgICAgICAgIGZvciAoc2l6ZV90IGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJ
bmRleC0tOykKKyAgICAgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBlYXJseSBkZWYncyBv
ZiB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24uCisgICAgICAgICAgICBibG9jay0+YXQoMCkuZm9yRWFj
aDxSZWc+KAorICAgICAgICAgICAgICAgIFsmXSAoUmVnJiByZWcsIEFyZzo6Um9sZSByb2xlLCBC
YW5rLCBXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJl
ZykpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbENhbGMubV93b3Jrc2V0LnJlbW92ZShy
ZWcpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
UmVnaXN0ZXJTZXQmIGxpdmVBdEhlYWQgPSBtX2xpdmVBdEhlYWRbYmxvY2tdOworICAgICAgICAg
ICAgaWYgKGxpdmVBdEhlYWQuc3Vic3VtZXMobG9jYWxDYWxjLm1fd29ya3NldCkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBsaXZlQXRI
ZWFkLm1lcmdlKGxvY2FsQ2FsYy5tX3dvcmtzZXQpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IGJsb2NrLT5wcmVkZWNlc3NvcnMo
KSkgeworICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0JiBsaXZlQXRUYWlsID0gbV9saXZlQXRU
YWlsW3ByZWRlY2Vzc29yXTsKKyAgICAgICAgICAgICAgICBpZiAobGl2ZUF0VGFpbC5zdWJzdW1l
cyhsb2NhbENhbGMubV93b3Jrc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGxpdmVBdFRhaWwubWVyZ2UobG9j
YWxDYWxjLm1fd29ya3NldCk7CisgICAgICAgICAgICAgICAgZGlydHlCbG9ja3MucXVpY2tTZXQo
cHJlZGVjZXNzb3ItPmluZGV4KCkpOworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7Cit9CisKK1Jl
Z0xpdmVuZXNzOjp+UmVnTGl2ZW5lc3MoKQoreworfQorCit2b2lkIFJlZ0xpdmVuZXNzOjpMb2Nh
bENhbGM6OmV4ZWN1dGUodW5zaWduZWQgaW5zdEluZGV4KQoreworICAgIEluc3QmIGluc3QgPSBt
X2Jsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgCisgICAgLy8gRmlyc3QgaGFuZGxl
IHRoZSBlYXJseSBkZWYncyBvZiB0aGUgbmV4dCBpbnN0cnVjdGlvbi4KKyAgICBpZiAoaW5zdElu
ZGV4ICsgMSA8IG1fYmxvY2stPnNpemUoKSkgeworICAgICAgICBJbnN0JiBuZXh0SW5zdCA9IG1f
YmxvY2stPmF0KGluc3RJbmRleCArIDEpOworICAgICAgICBuZXh0SW5zdC5mb3JFYWNoPFJlZz4o
CisgICAgICAgICAgICBbJl0gKFJlZyYgcmVnLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgp
IHsKKyAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpKQorICAgICAgICAg
ICAgICAgICAgICBtX3dvcmtzZXQucmVtb3ZlKHJlZyk7CisgICAgICAgICAgICB9KTsKKyAgICB9
CisgICAgICAgICAgICAKKyAgICAvLyBUaGVuIGhhbmRsZSBkZWYncy4KKyAgICBpbnN0LmZvckVh
Y2g8UmVnPigKKyAgICAgICAgWyZdIChSZWcmIHJlZywgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdp
ZHRoKSB7CisgICAgICAgICAgICBpZiAoQXJnOjppc0xhdGVEZWYocm9sZSkpCisgICAgICAgICAg
ICAgICAgbV93b3Jrc2V0LnJlbW92ZShyZWcpOworICAgICAgICB9KTsKKyAgICAgICAgICAgIAor
ICAgIC8vIFRoZW4gaGFuZGxlIHVzZSdzLgorICAgIGluc3QuZm9yRWFjaDxSZWc+KAorICAgICAg
ICBbJl0gKFJlZyYgcmVnLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKKyAgICAgICAg
ICAgIGlmIChBcmc6OmlzRWFybHlVc2Uocm9sZSkpCisgICAgICAgICAgICAgICAgbV93b3Jrc2V0
LmFkZChyZWcpOworICAgICAgICB9KTsKKyAgICAgICAgICAgIAorICAgIC8vIEFuZCBmaW5hbGx5
LCBoYW5kbGUgdGhlIGxhdGUgdXNlJ3Mgb2YgdGhlIHByZXZpb3VzIGluc3RydWN0aW9uLgorICAg
IGlmIChpbnN0SW5kZXgpIHsKKyAgICAgICAgSW5zdCYgcHJldkluc3QgPSBtX2Jsb2NrLT5hdChp
bnN0SW5kZXggLSAxKTsKKyAgICAgICAgcHJldkluc3QuZm9yRWFjaDxSZWc+KAorICAgICAgICAg
ICAgWyZdIChSZWcmIHJlZywgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7CisgICAgICAg
ICAgICAgICAgaWYgKEFyZzo6aXNMYXRlVXNlKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICBt
X3dvcmtzZXQuYWRkKHJlZyk7CisgICAgICAgICAgICB9KTsKKyAgICB9Cit9CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnTGl2ZW5lc3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ0xpdmVuZXNzLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdMaXZlbmVz
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgor
I2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCisvLyBBbHRo
b3VnaCB3ZSBjb3VsZCB0cml2aWFsbHkgYWRhcHQgQWlyOjpMaXZlbmVzczw+IHRvIHdvcmsgd2l0
aCBSZWcsIHRoaXMgd291bGQgbm90IGJlIHNvCisvLyBlZmZpY2llbnQuIFRoZXJlIGlzIGEgc21h
bGwgbnVtYmVyIG9mIHJlZ2lzdGVycywgc28gaXQncyBtdWNoIGJldHRlciB0byB1c2UgYml0dmVj
dG9ycyBmb3IKKy8vIHJlZ2lzdGVyIGxpdmVuZXNzLiBUaGlzIGlzIGEgc3BlY2lhbGl6YXRpb24g
b2YgTGl2ZW5lc3M8PiB0aGF0IHVzZXMgYml0dmVjdG9ycyBkaXJlY3RseS4KKy8vIFRoaXMgbWFr
ZXMgdGhlIGNvZGUgc3VmZmljaWVudGx5IGRpZmZlcmVudCB0aGF0IGl0IGRpZG4ndCBtYWtlIHNl
bnNlIHRvIHRyeSB0byBzaGFyZSBjb2RlLgorY2xhc3MgUmVnTGl2ZW5lc3MgeworcHVibGljOgor
ICAgIHR5cGVkZWYgUmVnIFRoaW5nOworICAgIAorICAgIFJlZ0xpdmVuZXNzKENvZGUmIGNvZGUp
OworICAgIH5SZWdMaXZlbmVzcygpOworICAgIAorICAgIC8vIFRoaXMgY2FsY3VsYXRvciBoYXMg
dG8gYmUgcnVuIGluIHJldmVyc2UuCisgICAgY2xhc3MgTG9jYWxDYWxjIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIExvY2FsQ2FsYyhSZWdMaXZlbmVzcyYgbGl2ZW5lc3MsIEJhc2ljQmxvY2sqIGJs
b2NrKQorICAgICAgICAgICAgOiBtX2xpdmVuZXNzKGxpdmVuZXNzKQorICAgICAgICAgICAgLCBt
X2Jsb2NrKGJsb2NrKQorICAgICAgICAgICAgLCBtX3dvcmtzZXQobGl2ZW5lc3MubV9saXZlQXRU
YWlsW2Jsb2NrXSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjb25z
dCBSZWdpc3RlclNldCYgbGl2ZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX3dvcmtzZXQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNMaXZlKFJl
ZyByZWcpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3dvcmtzZXQuY29u
dGFpbnMocmVnKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBleGVjdXRlKHVu
c2lnbmVkIGluc3RJbmRleCk7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVu
ZCBjbGFzcyBSZWdMaXZlbmVzczsKKyAgICAgICAgCisgICAgICAgIFJlZ0xpdmVuZXNzJiBtX2xp
dmVuZXNzOworICAgICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgICAgICBSZWdpc3RlclNl
dCBtX3dvcmtzZXQ7CisgICAgfTsKKyAgICAKKyAgICBjb25zdCBSZWdpc3RlclNldCYgbGl2ZUF0
SGVhZChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xp
dmVBdEhlYWRbYmxvY2tdOworICAgIH0KKyAgICAKKyAgICBjb25zdCBSZWdpc3RlclNldCYgbGl2
ZUF0VGFpbChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2xpdmVBdFRhaWxbYmxvY2tdOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIExvY2FsQ2FsYzsKKyAgICAKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBSZWdpc3RlclNl
dD4gbV9saXZlQXRIZWFkOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFJlZ2lzdGVyU2V0PiBt
X2xpdmVBdFRhaWw7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5jcHAJKHJldmlzaW9uIDIx
NDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVwb3J0VXNlZFJlZ2lz
dGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJBaXJB
cmdJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJSZWdMaXZlbmVz
cy5oIgogI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZWdpc3RlclNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVnaXN0ZXJTZXQuaAkocmV2aXNpb24gMjE0NDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZWdpc3RlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTksNiArOTksMTEgQEAgcHVi
bGljOgogICAgICAgICAgICAgc2V0KHJlZyk7CiAgICAgfQogICAgIAorICAgIC8vIEFsc28gYWxs
b3cgYWRkL3JlbW92ZS9jb250YWlucyB0ZXJtaW5vbG9neSwgd2hpY2ggbWVhbnMgdGhlIHNhbWUg
dGhpbmcgYXMgc2V0L2NsZWFyL2dldC4KKyAgICB2b2lkIGFkZChSZWcgcmVnKSB7IHNldChyZWcp
OyB9CisgICAgdm9pZCByZW1vdmUoUmVnIHJlZykgeyBjbGVhcihyZWcpOyB9CisgICAgYm9vbCBj
b250YWlucyhSZWcgcmVnKSBjb25zdCB7IHJldHVybiBnZXQocmVnKTsgfQorICAgIAogICAgIHZv
aWQgbWVyZ2UoY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSB7IG1fYml0cy5tZXJnZShvdGhlci5t
X2JpdHMpOyB9CiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSB7IG1f
Yml0cy5maWx0ZXIob3RoZXIubV9iaXRzKTsgfQogICAgIHZvaWQgZXhjbHVkZShjb25zdCBSZWdp
c3RlclNldCYgb3RoZXIpIHsgbV9iaXRzLmV4Y2x1ZGUob3RoZXIubV9iaXRzKTsgfQpAQCAtMTQ5
LDYgKzE1NCw0MiBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9KTsKICAgICB9CiAgICAgCisgICAg
Y2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAg
ICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yKGNvbnN0IEJpdG1hcDo6
aXRlcmF0b3ImIGl0ZXIpCisgICAgICAgICAgICA6IG1faXRlcihpdGVyKQorICAgICAgICB7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJlZyBvcGVyYXRvciooKSBjb25zdCB7IHJldHVy
biBSZWc6OmZyb21JbmRleCgqbV9pdGVyKTsgfQorICAgICAgICAKKyAgICAgICAgaXRlcmF0b3Im
IG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICArK21faXRlcjsKKyAgICAgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG1faXRlciA9PSBvdGhlci5tX2l0ZXI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICBwcml2YXRlOgorICAgICAgICBCaXRtYXA6Oml0ZXJhdG9yIG1faXRlcjsKKyAgICB9OworICAg
IAorICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9iaXRzLmJl
Z2luKCkpOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9i
aXRzLmVuZCgpKTsgfQorICAgIAogcHJpdmF0ZToKICAgICB2b2lkIHNldEFueShSZWcgcmVnKSB7
IHNldChyZWcpOyB9CiAgICAgdm9pZCBzZXRBbnkoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkgeyBt
ZXJnZShzZXQpOyB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvQXRvbWljcy5oCShyZXZpc2lvbiAyMTQ0MDQpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxOSw2ICs1MTksMjMgQEAgaW5s
aW5lIFQqIGNvbnN1bWUoVCogcG9pbnRlciwgRGVwZW5kZW5jeQogI2VuZGlmCiB9CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEZ1bmM+CitBTFdBWVNfSU5MSU5FIFQmIGVuc3VyZVBv
aW50ZXIoQXRvbWljPFQqPiYgcG9pbnRlciwgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBmb3Ig
KDs7KSB7CisgICAgICAgIFQqIG9sZFZhbHVlID0gcG9pbnRlci5sb2FkKHN0ZDo6bWVtb3J5X29y
ZGVyX3JlbGF4ZWQpOworICAgICAgICBpZiAob2xkVmFsdWUpIHsKKyAgICAgICAgICAgIC8vIE9u
IGFsbCBzZW5zaWJsZSBDUFVzLCB3ZSBnZXQgYW4gaW1wbGljaXQgZGVwZW5kZW5jeS1iYXNlZCBs
b2FkLWxvYWQgYmFycmllciB3aGVuCisgICAgICAgICAgICAvLyBsb2FkaW5nIHRoaXMuCisgICAg
ICAgICAgICByZXR1cm4gKm9sZFZhbHVlOworICAgICAgICB9CisgICAgICAgIFQqIG5ld1ZhbHVl
ID0gZnVuYygpOworICAgICAgICBpZiAocG9pbnRlci5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFZh
bHVlLCBuZXdWYWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gKm5ld1ZhbHVlOworICAgICAgICBk
ZWxldGUgbmV3VmFsdWU7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcg
V1RGOjpBdG9taWM7CkBAIC01MjgsNiArNTQ1LDcgQEAgdXNpbmcgV1RGOjpUcmFuc2FjdGlvbkFi
b3J0TGlrZWxpaG9vZDsKIHVzaW5nIFdURjo6Y29uc3VtZTsKIHVzaW5nIFdURjo6ZGVwZW5kZW5j
eTsKIHVzaW5nIFdURjo6ZGVwZW5kZW5jeVdpdGg7Cit1c2luZyBXVEY6OmVuc3VyZVBvaW50ZXI7
CiB1c2luZyBXVEY6Om51bGxEZXBlbmRlbmN5OwogCiAjZW5kaWYgLy8gQXRvbWljc19oCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9C
aXRtYXAuaAkocmV2aXNpb24gMjE0NDA0KQorKysgU291cmNlL1dURi93dGYvQml0bWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAxMCwg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDEwLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwpAQCAtNTksOSArNTksNTMgQEAgcHVibGljOgogICAgIHZvaWQgZmlsdGVyKGNvbnN0IEJp
dG1hcCYpOwogICAgIHZvaWQgZXhjbHVkZShjb25zdCBCaXRtYXAmKTsKICAgICAKKyAgICBib29s
IHN1YnN1bWVzKGNvbnN0IEJpdG1hcCYpIGNvbnN0OworICAgIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoU2V0Qml0KGNvbnN0IEZ1bmMmKSBjb25zdDsKICAg
ICAKKyAgICBzaXplX3QgZmluZEJpdChzaXplX3Qgc3RhcnRJbmRleCwgYm9vbCB2YWx1ZSkgY29u
c3Q7CisgICAgCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRl
cmF0b3IoKQorICAgICAgICAgICAgOiBtX2JpdG1hcChudWxscHRyKQorICAgICAgICAgICAgLCBt
X2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaXRlcmF0
b3IoY29uc3QgQml0bWFwJiBiaXRtYXAsIHNpemVfdCBpbmRleCkKKyAgICAgICAgICAgIDogbV9i
aXRtYXAoJmJpdG1hcCkKKyAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgewor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzaXplX3Qgb3BlcmF0b3IqKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbmRleDsgfQorICAgICAgICAKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKyso
KQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4ID0gbV9iaXRtYXAtPmZpbmRCaXQobV9p
bmRleCArIDEsIHRydWUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IEJpdG1hcCogbV9iaXRtYXA7CisgICAgICAg
IHNpemVfdCBtX2luZGV4OworICAgIH07CisgICAgCisgICAgLy8gVXNlIHRoaXMgdG8gaXRlcmF0
ZSBvdmVyIHNldCBiaXRzLgorICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRl
cmF0b3IoKnRoaXMsIGZpbmRCaXQoMCwgdHJ1ZSkpOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIGJpdG1hcFNpemUpOyB9CisgICAgCiAgICAgdm9p
ZCBtZXJnZUFuZENsZWFyKEJpdG1hcCYpOwogICAgIHZvaWQgc2V0QW5kQ2xlYXIoQml0bWFwJik7
CiAgICAgCkBAIC0yNTgsNiArMzAyLDE4IEBAIGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXpl
LCBXb3JkVHlwZT4KIH0KIAogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdv
cmRUeXBlPgoraW5saW5lIGJvb2wgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6c3Vic3Vt
ZXMoY29uc3QgQml0bWFwJiBvdGhlcikgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHdvcmRzOyArK2kpIHsKKyAgICAgICAgV29yZFR5cGUgbXlCaXRzID0gYml0c1tpXTsKKyAg
ICAgICAgV29yZFR5cGUgb3RoZXJCaXRzID0gb3RoZXIuYml0c1tpXTsKKyAgICAgICAgaWYgKCht
eUJpdHMgfCBvdGhlckJpdHMpICE9IG15Qml0cykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXpl
LCB0eXBlbmFtZSBXb3JkVHlwZT4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiBpbmxpbmUgdm9p
ZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+Ojpmb3JFYWNoU2V0Qml0KGNvbnN0IEZ1bmMm
IGZ1bmMpIGNvbnN0CiB7CkBAIC0yNzUsNiArMzMxLDI4IEBAIGlubGluZSB2b2lkIEJpdG1hcDxi
aXRtYXBTaXplLCBXb3JkVHlwZT4KIH0KIAogdGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5
cGVuYW1lIFdvcmRUeXBlPgoraW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBl
Pjo6ZmluZEJpdChzaXplX3Qgc3RhcnRJbmRleCwgYm9vbCB2YWx1ZSkgY29uc3QKK3sKKyAgICBX
b3JkVHlwZSBza2lwVmFsdWUgPSAtKHN0YXRpY19jYXN0PFdvcmRUeXBlPih2YWx1ZSkgXiAxKTsK
KyAgICBzaXplX3Qgd29yZEluZGV4ID0gc3RhcnRJbmRleCAvIHdvcmRTaXplOworICAgIHNpemVf
dCBzdGFydEluZGV4SW5Xb3JkID0gc3RhcnRJbmRleCAtIHdvcmRJbmRleCAqIHdvcmRTaXplOwor
ICAgIAorICAgIHdoaWxlICh3b3JkSW5kZXggPCB3b3JkcykgeworICAgICAgICBXb3JkVHlwZSB3
b3JkID0gYml0c1t3b3JkSW5kZXhdOworICAgICAgICBpZiAod29yZCAhPSBza2lwVmFsdWUpIHsK
KyAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IHN0YXJ0SW5kZXhJbldvcmQ7CisgICAgICAgICAg
ICBpZiAoZmluZEJpdEluV29yZCh3b3JkLCBpbmRleCwgd29yZFNpemUsIHZhbHVlKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gd29yZEluZGV4ICogd29yZFNpemUgKyBpbmRleDsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgd29yZEluZGV4Kys7CisgICAgICAgIHN0YXJ0SW5kZXhJbldv
cmQgPSAwOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gYml0bWFwU2l6ZTsKK30KKwordGVtcGxh
dGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdvcmRUeXBlPgogaW5saW5lIHZvaWQgQml0
bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6bWVyZ2VBbmRDbGVhcihCaXRtYXAmIG90aGVyKQog
ewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsraSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305434</attachid>
            <date>2017-03-26 13:32:30 -0700</date>
            <delta_ts>2017-03-26 13:59:34 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>40503</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE0NDA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk3IEBA
CisyMDE3LTAzLTI2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QWlyIHNob3VsZCB1c2UgUmVnaXN0ZXJTZXQgZm9yIFJlZ0xpdmVuZXNzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAxMDgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoZSBiaWdnZXN0IGNo
YW5nZSBoZXJlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIG5ldyBSZWdMaXZlbmVzcyBjbGFz
cy4gVGhpcyBpcyBhCisgICAgICAgIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHRoZSBvbGQgUmVn
TGl2ZW5lc3MsIHdoaWNoIHdhcyBhIHNwZWNpYWxpemF0aW9uIG9mCisgICAgICAgIEFic3RyYWN0
TGl2ZW5lc3M8PiwgYnV0IGl0J3MgYWJvdXQgMzAlIGZhc3Rlci4gSXQgZ2V0cyBpdHMgc3BlZWQg
Ym9vc3QgZnJvbSBqdXN0IHVzaW5nCisgICAgICAgIHNldHMgZXZlcnl3aGVyZSwgd2hpY2ggaXMg
ZWZmaWNpZW50IGZvciByZWdpc3RlcnMgc2luY2UgUmVnaXN0ZXJTZXQgaXMganVzdCB0d28gKG9u
CisgICAgICAgIHg4Ni02NCkgb3IgdGhyZWUgMzItYml0IChvbiBBUk02NCkgc3RhdGljYWxseSBh
bGxvY2F0ZWQgd29yZHMuIFRoaXMgbG9va3MgbGlrZSBhIDElCisgICAgICAgIGNvbXBpbGUgdGlt
ZSBwcm9ncmVzc2lvbiBvbiBXYXNtQmVuY2guCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGIzL0IzVGltaW5nU2NvcGUuY3BwOiBSZWNvcmRzIHBoYXNlIHRpbWluZyB0b3RhbHMu
CisgICAgICAgIChKU0M6OkIzOjpUaW1pbmdTY29wZTo6VGltaW5nU2NvcGUpOgorICAgICAgICAo
SlNDOjpCMzo6VGltaW5nU2NvcGU6On5UaW1pbmdTY29wZSk6CisgICAgICAgICogYjMvQjNUaW1p
bmdTY29wZS5oOgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhD
b2xvcmluZy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmFsbG9jYXRlUmVnaXN0ZXJzQnlH
cmFwaENvbG9yaW5nKToKKyAgICAgICAgKiBiMy9haXIvQWlyTGl2ZW5lc3MuaDogTW92ZSBjb2Rl
IGFyb3VuZCBhbmQgcmVuYW1lIGEgYml0IHRvIG1ha2UgaXQgbW9yZSBsaWtlIFJlZ0xpdmVuZXNz
OyBpbiBwYXJ0aWN1bGFyIHdlIHdhbnQgdGhlIGBpdGVyYXRvcmAgdG8gYmUgY2FsbGVkIGBpdGVy
YXRvcmAgbm90IGBJdGVyYXRvcmAsIGFuZCB3ZSB3YW50IGl0IHRvIGJlIGludGVybmFsIHRvIGl0
cyBpdGVyYWJsZS4gQWxzbyByZW5hbWUgdGhpcyB0ZW1wbGF0ZSB0byBMaXZlbmVzcywgdG8gbWF0
Y2ggdGhlIGhlYWRlciBmaWxlbmFtZS4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6
OkxpdmVuZXNzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6
TG9jYWxDYWxjKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6
SXRlcmFibGU6Okl0ZXJhYmxlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6Okxv
Y2FsQ2FsYzo6SXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkxpdmVuZXNzOjpMb2NhbENhbGM6Okl0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3Ir
Kyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkxpdmVuZXNzOjpMb2NhbENhbGM6Okl0ZXJhYmxl
OjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6
OkxvY2FsQ2FsYzo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVy
YXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6SXRl
cmFibGU6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6OkxvY2FsQ2Fs
Yzo6SXRlcmFibGU6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkxpdmVuZXNzOjpJdGVy
YWJsZTo6SXRlcmFibGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6SXRlcmFi
bGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlJlZ0xpdmVu
ZXNzQWRhcHRlcjo6UmVnTGl2ZW5lc3NBZGFwdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6UmVnTGl2ZW5lc3NBZGFwdGVyOjpudW1JbmRpY2VzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6UmVnTGl2ZW5lc3NBZGFwdGVyOjphY2NlcHRzQmFuayk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlJlZ0xpdmVuZXNzQWRhcHRlcjo6YWNjZXB0c1Jv
bGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpSZWdMaXZlbmVzc0FkYXB0ZXI6
OnZhbHVlVG9JbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlJlZ0xpdmVu
ZXNzQWRhcHRlcjo6aW5kZXhUb1ZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QWJzdHJhY3RMaXZlbmVzczo6QWJzdHJhY3RMaXZlbmVzcyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6TG9jYWxDYWxjKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVzczo6TG9jYWxD
YWxjOjpJdGVyYXRvcjo6SXRlcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpBYnN0cmFjdExpdmVuZXNzOjpMb2NhbENhbGM6Okl0ZXJhdG9yOjpvcGVyYXRvcisrKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVzczo6TG9jYWxDYWxj
OjpJdGVyYXRvcjo6b3BlcmF0b3IqKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QWJzdHJhY3RMaXZlbmVzczo6TG9jYWxDYWxjOjpJdGVyYXRvcjo6b3BlcmF0b3I9PSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6
SXRlcmF0b3I6Om9wZXJhdG9yIT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
YnN0cmFjdExpdmVuZXNzOjpMb2NhbENhbGM6Okl0ZXJhYmxlOjpJdGVyYWJsZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6SXRl
cmFibGU6OmJlZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RM
aXZlbmVzczo6TG9jYWxDYWxjOjpJdGVyYWJsZTo6ZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVzczo6TG9jYWxDYWxjOjpJdGVyYWJsZTo6Y29udGFp
bnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpM
b2NhbENhbGM6OmxpdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnN0cmFj
dExpdmVuZXNzOjpMb2NhbENhbGM6OmlzTGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6ZXhlY3V0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFic3RyYWN0TGl2ZW5lc3M6OnJhd0xpdmVBdEhlYWQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpJdGVyYWJs
ZTo6SXRlcmFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnN0cmFjdExp
dmVuZXNzOjpJdGVyYWJsZTo6aXRlcmF0b3I6Oml0ZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVzczo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVy
YXRvciopOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNz
OjpJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9y
PT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpJ
dGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpJdGVyYWJsZTo6YmVnaW4pOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBYnN0cmFjdExpdmVuZXNzOjpJdGVyYWJsZTo6ZW5kKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVzczo6SXRlcmFibGU6
OmNvbnRhaW5zKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZl
bmVzczo6bGl2ZUF0SGVhZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFic3Ry
YWN0TGl2ZW5lc3M6OmxpdmVBdFRhaWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpBYnN0cmFjdExpdmVuZXNzOjp3b3Jrc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKiBiMy9haXIv
QWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHA6CisgICAgICAgICogYjMvYWlyL0Fpckxvd2VyQWZ0
ZXJSZWdBbGxvYy5jcHA6CisgICAgICAgICogYjMvYWlyL0FpclJlZ0xpdmVuZXNzLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlJlZ0xpdmVuZXNzOjpSZWdMaXZlbmVzcyk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlJlZ0xpdmVuZXNzOjp+UmVnTGl2ZW5lc3MpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpSZWdMaXZlbmVzczo6TG9jYWxDYWxjOjpleGVjdXRlKToKKyAgICAg
ICAgKiBiMy9haXIvQWlyUmVnTGl2ZW5lc3MuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpB
aXI6OlJlZ0xpdmVuZXNzOjpMb2NhbENhbGM6OkxvY2FsQ2FsYyk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OlJlZ0xpdmVuZXNzOjpMb2NhbENhbGM6OmxpdmUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpSZWdMaXZlbmVzczo6TG9jYWxDYWxjOjppc0xpdmUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpSZWdMaXZlbmVzczo6bGl2ZUF0SGVhZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlJl
Z0xpdmVuZXNzOjpsaXZlQXRUYWlsKToKKyAgICAgICAgKiBiMy9haXIvQWlyUmVwb3J0VXNlZFJl
Z2lzdGVycy5jcHA6CisgICAgICAgICogaml0L1JlZ2lzdGVyU2V0Lmg6CisgICAgICAgIChKU0M6
OlJlZ2lzdGVyU2V0OjphZGQpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6cmVtb3ZlKToK
KyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6UmVn
aXN0ZXJTZXQ6OnN1YnN1bWVzKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Oml0ZXJhdG9y
OjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjppdGVyYXRvcjo6b3BlcmF0
b3IqKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToK
KyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpT
Qzo6UmVnaXN0ZXJTZXQ6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OmVuZCk6
CisKIDIwMTctMDMtMjUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBGaXggd2FzbSBieSByZXR1cm5pbmcgYWZ0ZXIgd2UgZG8gVExTLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjE0NDA0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNiArMTAxLDcg
QEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBiMy9haXIvQWlyT3B0aW1pemVCbG9j
a09yZGVyLmNwcAogICAgIGIzL2Fpci9BaXJQYWRJbnRlcmZlcmVuY2UuY3BwCiAgICAgYjMvYWly
L0FpclBoYXNlU2NvcGUuY3BwCisgICAgYjMvYWlyL0FpclJlZ0xpdmVuZXNzLmNwcAogICAgIGIz
L2Fpci9BaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmNwcAogICAgIGIzL2Fpci9BaXJTaW1wbGlmeUNG
Ry5jcHAKICAgICBiMy9haXIvQWlyU3BlY2lhbC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAyMTQ0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTAwNSw2ICsxMDA1LDggQEAKIAkJMEZGNDI3NTcxNTkxNEEyMDAwNENCOUZGIC8qIExpbmtCdWZm
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZG
NDI3NTYxNTkxNEEyMDAwNENCOUZGIC8qIExpbmtCdWZmZXIuY3BwICovOyB9OwogCQkwRkY0Mjc2
NDE1OTFBMUNDMDA0Q0I5RkYgLyogREZHRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjQyNzYxMTU5MUExQzkwMDRDQjlGRiAv
KiBERkdEaXNhc3NlbWJsZXIuY3BwICovOyB9OwogCQkwRkY0Mjc2NTE1OTFBMUNFMDA0Q0I5RkYg
LyogREZHRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkY0Mjc2MjE1OTFBMUM5MDA0Q0I5RkYgLyogREZHRGlzYXNzZW1ibGVyLmgg
Ki87IH07CisJCTBGRjRCNEJDMUU4ODQ0OTcwMERCQkU4NiAvKiBBaXJSZWdMaXZlbmVzcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0QjRCQTFF
ODg0NDk1MDBEQkJFODYgLyogQWlyUmVnTGl2ZW5lc3MuY3BwICovOyB9OworCQkwRkY0QjRCRDFF
ODg0NDlBMDBEQkJFODYgLyogQWlyUmVnTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjRCNEJCMUU4ODQ0OTUwMERCQkU4NiAvKiBBaXJS
ZWdMaXZlbmVzcy5oICovOyB9OwogCQkwRkY2MEFDMjE2NzQwRjgzMDAwMjk3NzkgLyogUmVkdWNl
V2hpdGVzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZGNjBBQzAxNjc0MEY4MTAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkY2MEFDMzE2NzQw
Rjg4MDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY2MEFCRjE2NzQwRjgxMDAwMjk3NzkgLyogUmVk
dWNlV2hpdGVzcGFjZS5jcHAgKi87IH07CiAJCTBGRjcxNjhDMTVBM0IyMzUwMDhGNURBQSAvKiBQ
cm9wZXJ0eU9mZnNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZGNzE2OEExNUEzQjIzMTAwOEY1REFBIC8qIFByb3BlcnR5T2Zmc2V0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM1MjAsNiArMzUy
Miw4IEBACiAJCTBGRjQyNzU2MTU5MTRBMjAwMDRDQjlGRiAvKiBMaW5rQnVmZmVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExpbmtCdWZmZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY0Mjc2MTE1OTFBMUM5MDA0Q0I5RkYgLyogREZHRGlz
YXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rp
c2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkZmcvREZHRGlzYXNzZW1ibGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNDI3NjIxNTkxQTFDOTAwNENCOUZGIC8qIERGR0Rpc2Fz
c2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEaXNhc3NlbWJs
ZXIuaDsgcGF0aCA9IGRmZy9ERkdEaXNhc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZGNEI0QkExRTg4NDQ5NTAwREJCRTg2IC8qIEFpclJlZ0xpdmVuZXNzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclJlZ0xpdmVuZXNzLmNwcDsg
cGF0aCA9IGIzL2Fpci9BaXJSZWdMaXZlbmVzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRjRCNEJCMUU4ODQ0OTUwMERCQkU4NiAvKiBBaXJSZWdMaXZlbmVzcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJSZWdMaXZlbmVzcy5oOyBwYXRoID0gYjMv
YWlyL0FpclJlZ0xpdmVuZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjYw
QUJGMTY3NDBGODEwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlZHVjZVdoaXRlc3BhY2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkY2MEFDMDE2NzQwRjgxMDAwMjk3NzkgLyogUmVkdWNlV2hp
dGVzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWR1Y2VXaGl0ZXNw
YWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjcxNjhBMTVBM0IyMzEwMDhG
NURBQSAvKiBQcm9wZXJ0eU9mZnNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQcm9wZXJ0eU9mZnNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTU3OCw2
ICs1NTgyLDggQEAKIAkJCQkwRjlDQUJDNzFEQjU0QTc2MDAwOEU4M0IgLyogQWlyUGFkSW50ZXJm
ZXJlbmNlLmggKi8sCiAJCQkJMEZFQzg1NUUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2Nv
cGUuY3BwICovLAogCQkJCTBGRUM4NTVGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3Bl
LmggKi8sCisJCQkJMEZGNEI0QkExRTg4NDQ5NTAwREJCRTg2IC8qIEFpclJlZ0xpdmVuZXNzLmNw
cCAqLywKKwkJCQkwRkY0QjRCQjFFODg0NDk1MDBEQkJFODYgLyogQWlyUmVnTGl2ZW5lc3MuaCAq
LywKIAkJCQkwRjQ1NzAzQTFCRTQ1RjBBMDA2MkE2MjkgLyogQWlyUmVwb3J0VXNlZFJlZ2lzdGVy
cy5jcHAgKi8sCiAJCQkJMEY0NTcwM0IxQkU0NUYwQTAwNjJBNjI5IC8qIEFpclJlcG9ydFVzZWRS
ZWdpc3RlcnMuaCAqLywKIAkJCQkwRjMzOERGQjFCRUQ1MTI3MDAxM0M4OEYgLyogQWlyU2ltcGxp
ZnlDRkcuY3BwICovLApAQCAtODIzNiw2ICs4MjQyLDcgQEAKIAkJCQkwRjY0QjI3QTFBNzk1N0Iy
MDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlEOERFMEVEMjIw
NUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyRUM5QkI3MUI3
RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZGNEI0QkQxRTg4NDQ5QTAwREJCRTg2IC8qIEFpclJlZ0xpdmVuZXNzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk2MkQ3NTVENzFCODRGQjRBMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0IxMTRCQ0Y3MTgwMDg4NUI0RiAvKiBDYWxsTGlu
a0luZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMjlFMTRDQTdEQzUwMDg1RjNDNiAvKiBD
YWxsTGlua1N0YXR1cy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDYyNSw2ICsxMDYzMiw3IEBACiAJ
CQkJQTdGQjYwQTQxMDNGN0RDMjAwMTdBMjg2IC8qIFByb3BlcnR5RGVzY3JpcHRvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDQ2OURFODEwN0VDN0U3MDA2NTA0NDYgLyogUHJvcGVydHlTbG90
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFERTM5RkZGMTZERDE0NEIwMDAzQ0Q0QSAvKiBQcm9w
ZXJ0eVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRjRCNEJDMUU4ODQ0OTcwMERCQkU4
NiAvKiBBaXJSZWdMaXZlbmVzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NUZCNTExNzE4NEVF
RTcwMDBDMTJCNzAgLyogUHJvdG9DYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
NEMzM0MxNkFBMkQ5QjAwNjJGMDFEIC8qIFByb3RvdHlwZU1hcC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3OUIwMENCQzFDNkFCMDdFMDA4OEM2NUQgLyogUHJveHlDb25zdHJ1Y3Rvci5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1RpbWluZ1Njb3Bl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUaW1pbmdTY29w
ZS5jcHAJKHJldmlzaW9uIDIxNDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Rp
bWluZ1Njb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwyMyArMjksNTMgQEAKICNpZiBFTkFCTEUo
QjNfSklUKQogCiAjaW5jbHVkZSAiQjNDb21tb24uaCIKLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CiAKK25hbWVzcGFjZSB7CisKK2NsYXNzIFN0YXRlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTdGF0ZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgU3Rh
dGUoKSB7IH0KKyAgICAKKyAgICBTZWNvbmRzIGFkZFRvVG90YWwoY29uc3QgY2hhciogbmFtZSwg
U2Vjb25kcyBkdXJhdGlvbikKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bG9jayk7CisgICAgICAgIHJldHVybiB0b3RhbHMuYWRkKG5hbWUsIFNlY29uZHMoMCkpLml0ZXJh
dG9yLT52YWx1ZSArPSBkdXJhdGlvbjsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEhhc2hN
YXA8Y29uc3QgY2hhciosIFNlY29uZHM+IHRvdGFsczsKKyAgICBMb2NrIGxvY2s7Cit9OworCitT
dGF0ZSYgc3RhdGUoKQoreworICAgIHN0YXRpYyBBdG9taWM8U3RhdGUqPiBzX3N0YXRlOworICAg
IHJldHVybiBlbnN1cmVQb2ludGVyKHNfc3RhdGUsIFtdIHsgcmV0dXJuIG5ldyBTdGF0ZSgpOyB9
KTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKIFRpbWluZ1Njb3BlOjpUaW1pbmdT
Y29wZShjb25zdCBjaGFyKiBuYW1lKQogICAgIDogbV9uYW1lKG5hbWUpCiB7CiAgICAgaWYgKHNo
b3VsZE1lYXN1cmVQaGFzZVRpbWluZygpKQotICAgICAgICBtX2JlZm9yZSA9IG1vbm90b25pY2Fs
bHlJbmNyZWFzaW5nVGltZU1TKCk7CisgICAgICAgIG1fYmVmb3JlID0gTW9ub3RvbmljVGltZTo6
bm93KCk7CiB9CiAKIFRpbWluZ1Njb3BlOjp+VGltaW5nU2NvcGUoKQogewogICAgIGlmIChzaG91
bGRNZWFzdXJlUGhhc2VUaW1pbmcoKSkgewotICAgICAgICBkb3VibGUgYWZ0ZXIgPSBtb25vdG9u
aWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpOwotICAgICAgICBkYXRhTG9nKCJbQjNdICIsIG1fbmFt
ZSwgIiB0b29rOiAiLCBhZnRlciAtIG1fYmVmb3JlLCAiIG1zLlxuIik7CisgICAgICAgIFNlY29u
ZHMgZHVyYXRpb24gPSBNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fYmVmb3JlOworICAgICAgICBk
YXRhTG9nKAorICAgICAgICAgICAgIltCM10gIiwgbV9uYW1lLCAiIHRvb2s6ICIsIGR1cmF0aW9u
Lm1pbGxpc2Vjb25kcygpLCAiIG1zICIsCisgICAgICAgICAgICAiKHRvdGFsOiAiLCBzdGF0ZSgp
LmFkZFRvVG90YWwobV9uYW1lLCBkdXJhdGlvbikubWlsbGlzZWNvbmRzKCksICIgbXMpLlxuIik7
CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUaW1pbmdTY29w
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1RpbWluZ1Njb3Bl
LmgJKHJldmlzaW9uIDIxNDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1RpbWlu
Z1Njb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKEIzX0pJ
VCkKIAorI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewpAQCAtMzksNyArNDAs
NyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgY29uc3QgY2hhciogbV9uYW1lOwotICAgIGRv
dWJsZSBtX2JlZm9yZTsKKyAgICBNb25vdG9uaWNUaW1lIG1fYmVmb3JlOwogfTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9y
aW5nLmNwcAkocmV2aXNpb24gMjE0NDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyNTcsNyArMjI1Nyw3IEBAIHByaXZhdGU6CiAKIHZvaWQgYWxsb2NhdGVSZWdpc3RlcnNC
eUdyYXBoQ29sb3JpbmcoQ29kZSYgY29kZSkKIHsKLSAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUo
Y29kZSwgIkFpcjo6YWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmciKTsKKyAgICBQaGFz
ZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5n
Iik7CiAgICAgCiAgICAgaWYgKGZhbHNlKQogICAgICAgICBkYXRhTG9nKCJDb2RlIGJlZm9yZSBn
cmFwaCBjb2xvcmluZzpcbiIsIGNvZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyTGl2ZW5lc3MuaAkocmV2aXNpb24gMjE0NDA0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSwzMCArNzks
MTQgQEAgcHJpdmF0ZToKICAgICBDb2RlJiBtX2NvZGU7CiB9OwogCi1zdHJ1Y3QgUmVnTGl2ZW5l
c3NBZGFwdGVyIHsKLSAgICB0eXBlZGVmIFJlZyBUaGluZzsKLSAgICB0eXBlZGVmIEJpdFZlY3Rv
ciBJbmRleFNldDsKLQotICAgIFJlZ0xpdmVuZXNzQWRhcHRlcihDb2RlJikgeyB9Ci0KLSAgICBz
dGF0aWMgdW5zaWduZWQgbnVtSW5kaWNlcyhDb2RlJikKLSAgICB7Ci0gICAgICAgIHJldHVybiBS
ZWc6Om1heEluZGV4KCkgKyAxOwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGFjY2VwdHNCYW5r
KEJhbmspIHsgcmV0dXJuIHRydWU7IH0KLSAgICBzdGF0aWMgYm9vbCBhY2NlcHRzUm9sZShBcmc6
OlJvbGUpIHsgcmV0dXJuIHRydWU7IH0KLSAgICBzdGF0aWMgdW5zaWduZWQgdmFsdWVUb0luZGV4
KFJlZyByZWcpIHsgcmV0dXJuIHJlZy5pbmRleCgpOyB9Ci0gICAgUmVnIGluZGV4VG9WYWx1ZSh1
bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gUmVnOjpmcm9tSW5kZXgoaW5kZXgpOyB9Ci19OwotCisv
LyBIRUFEUyBVUDogVGhlIGFsZ29yaXRobSBoZXJlIGlzIGR1cGxpY2F0ZWQgaW4gQWlyUmVnTGl2
ZW5lc3MuaC4KIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0ZXI+Ci1jbGFzcyBBYnN0cmFjdExpdmVu
ZXNzIDogcHVibGljIEFkYXB0ZXIgeworY2xhc3MgTGl2ZW5lc3MgOiBwdWJsaWMgQWRhcHRlciB7
CiAgICAgc3RydWN0IFdvcmtzZXQ7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBBZGFw
dGVyOjpUaGluZyBUaGluZzsKICAgICAKLSAgICBBYnN0cmFjdExpdmVuZXNzKENvZGUmIGNvZGUp
CisgICAgTGl2ZW5lc3MoQ29kZSYgY29kZSkKICAgICAgICAgOiBBZGFwdGVyKGNvZGUpCiAgICAg
ICAgICwgbV93b3Jrc2V0KEFkYXB0ZXI6Om51bUluZGljZXMoY29kZSkpCiAgICAgICAgICwgbV9s
aXZlQXRIZWFkKGNvZGUuc2l6ZSgpKQpAQCAtMTMxLDcgKzExNSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKIAogICAgICAgICAgICAgZm9yIChzaXplX3QgYmxvY2tJ
bmRleCA9IGNvZGUuc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBjb2RlLmF0KGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gY29kZVtibG9ja0luZGV4XTsKICAgICAgICAgICAgICAgICBpZiAo
IWJsb2NrKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMTg3LDcgKzE3MSw3
IEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIGNhbGN1bGF0b3IgaGFzIHRvIGJlIHJ1biBpbiByZXZl
cnNlLgogICAgIGNsYXNzIExvY2FsQ2FsYyB7CiAgICAgcHVibGljOgotICAgICAgICBMb2NhbENh
bGMoQWJzdHJhY3RMaXZlbmVzcyYgbGl2ZW5lc3MsIEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAg
ICBMb2NhbENhbGMoTGl2ZW5lc3MmIGxpdmVuZXNzLCBCYXNpY0Jsb2NrKiBibG9jaykKICAgICAg
ICAgICAgIDogbV9saXZlbmVzcyhsaXZlbmVzcykKICAgICAgICAgICAgICwgbV9ibG9jayhibG9j
aykKICAgICAgICAgewpAQCAtMTk4LDQwICsxODIsNDIgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIHdvcmtzZXQuYWRkKGluZGV4KTsKICAgICAgICAgfQogCi0gICAgICAgIHN0cnVjdCBJdGVy
YXRvciB7Ci0gICAgICAgICAgICBJdGVyYXRvcihBZGFwdGVyJiBhZGFwdGVyLCBJbmRleFNwYXJz
ZVNldDxVbnNhZmVWZWN0b3JPdmVyZmxvdz46OmNvbnN0X2l0ZXJhdG9yIHNwYXJjZVNldEl0ZXJh
dG9yKQotICAgICAgICAgICAgICAgIDogbV9hZGFwdGVyKGFkYXB0ZXIpCi0gICAgICAgICAgICAg
ICAgLCBtX3NwYXJjZVNldEl0ZXJhdG9yKHNwYXJjZVNldEl0ZXJhdG9yKQorICAgICAgICBjbGFz
cyBJdGVyYWJsZSB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEl0ZXJhYmxlKExpdmVu
ZXNzJiBsaXZlbmVzcykKKyAgICAgICAgICAgICAgICA6IG1fbGl2ZW5lc3MobGl2ZW5lc3MpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIEl0ZXJhdG9yJiBvcGVy
YXRvcisrKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICArK21fc3BhcmNlU2V0SXRl
cmF0b3I7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgICAgIGl0ZXJhdG9yKEFkYXB0ZXImIGFkYXB0ZXIsIEluZGV4U3BhcnNlU2V0PFVuc2FmZVZl
Y3Rvck92ZXJmbG93Pjo6Y29uc3RfaXRlcmF0b3Igc3BhcmNlU2V0SXRlcmF0b3IpCisgICAgICAg
ICAgICAgICAgICAgIDogbV9hZGFwdGVyKGFkYXB0ZXIpCisgICAgICAgICAgICAgICAgICAgICwg
bV9zcGFyY2VTZXRJdGVyYXRvcihzcGFyY2VTZXRJdGVyYXRvcikKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0eXBlbmFtZSBBZGFwdGVyOjpUaGlu
ZyBvcGVyYXRvciooKSBjb25zdAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBtX2FkYXB0ZXIuaW5kZXhUb1ZhbHVlKCptX3NwYXJjZVNldEl0ZXJhdG9yKTsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICArK21fc3BhcmNlU2V0SXRlcmF0b3I7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJdGVyYXRvciYgb3RoZXIpIHsgcmV0dXJuIG1f
c3BhcmNlU2V0SXRlcmF0b3IgPT0gb3RoZXIubV9zcGFyY2VTZXRJdGVyYXRvcjsgfQotICAgICAg
ICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgeyByZXR1cm4gbV9z
cGFyY2VTZXRJdGVyYXRvciAhPSBvdGhlci5tX3NwYXJjZVNldEl0ZXJhdG9yOyB9CisgICAgICAg
ICAgICAgICAgdHlwZW5hbWUgQWRhcHRlcjo6VGhpbmcgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2FkYXB0ZXIuaW5kZXhU
b1ZhbHVlKCptX3NwYXJjZVNldEl0ZXJhdG9yKTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgcHJpdmF0ZToKLSAgICAgICAgICAgIEFkYXB0ZXImIG1fYWRhcHRlcjsKLSAgICAgICAgICAg
IEluZGV4U3BhcnNlU2V0PFVuc2FmZVZlY3Rvck92ZXJmbG93Pjo6Y29uc3RfaXRlcmF0b3IgbV9z
cGFyY2VTZXRJdGVyYXRvcjsKLSAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSB7IHJldHVybiBtX3NwYXJjZVNldEl0ZXJhdG9y
ID09IG90aGVyLm1fc3BhcmNlU2V0SXRlcmF0b3I7IH0KKyAgICAgICAgICAgICAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSB7IHJldHVybiBtX3NwYXJjZVNldEl0ZXJh
dG9yICE9IG90aGVyLm1fc3BhcmNlU2V0SXRlcmF0b3I7IH0KIAotICAgICAgICBzdHJ1Y3QgSXRl
cmFibGUgewotICAgICAgICAgICAgSXRlcmFibGUoQWJzdHJhY3RMaXZlbmVzcyYgbGl2ZW5lc3Mp
Ci0gICAgICAgICAgICAgICAgOiBtX2xpdmVuZXNzKGxpdmVuZXNzKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgICAgICBBZGFw
dGVyJiBtX2FkYXB0ZXI7CisgICAgICAgICAgICAgICAgSW5kZXhTcGFyc2VTZXQ8VW5zYWZlVmVj
dG9yT3ZlcmZsb3c+Ojpjb25zdF9pdGVyYXRvciBtX3NwYXJjZVNldEl0ZXJhdG9yOworICAgICAg
ICAgICAgfTsKIAotICAgICAgICAgICAgSXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBJ
dGVyYXRvcihtX2xpdmVuZXNzLCBtX2xpdmVuZXNzLm1fd29ya3NldC5iZWdpbigpKTsgfQotICAg
ICAgICAgICAgSXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gSXRlcmF0b3IobV9saXZlbmVz
cywgbV9saXZlbmVzcy5tX3dvcmtzZXQuZW5kKCkpOyB9CisgICAgICAgICAgICBpdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fbGl2ZW5lc3MsIG1fbGl2ZW5lc3MubV93
b3Jrc2V0LmJlZ2luKCkpOyB9CisgICAgICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBpdGVyYXRvcihtX2xpdmVuZXNzLCBtX2xpdmVuZXNzLm1fd29ya3NldC5lbmQoKSk7IH0K
ICAgICAgICAgICAgIAogICAgICAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCB0eXBlbmFtZSBB
ZGFwdGVyOjpUaGluZyYgdGhpbmcpIGNvbnN0CiAgICAgICAgICAgICB7CkBAIC0yMzksNyArMjI1
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgfQogCiAgICAgICAgIHByaXZhdGU6Ci0gICAgICAg
ICAgICBBYnN0cmFjdExpdmVuZXNzJiBtX2xpdmVuZXNzOworICAgICAgICAgICAgTGl2ZW5lc3Mm
IG1fbGl2ZW5lc3M7CiAgICAgICAgIH07CiAKICAgICAgICAgSXRlcmFibGUgbGl2ZSgpIGNvbnN0
CkBAIC0zMDEsNyArMjg3LDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIAogICAgIHBy
aXZhdGU6Ci0gICAgICAgIEFic3RyYWN0TGl2ZW5lc3MmIG1fbGl2ZW5lc3M7CisgICAgICAgIExp
dmVuZXNzJiBtX2xpdmVuZXNzOwogICAgICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIH07
CiAKQEAgLTMxMyw3ICsyOTksNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVW5k
ZXJseWluZ0l0ZXJhYmxlPgogICAgIGNsYXNzIEl0ZXJhYmxlIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIEl0ZXJhYmxlKEFic3RyYWN0TGl2ZW5lc3MmIGxpdmVuZXNzLCBjb25zdCBVbmRlcmx5aW5n
SXRlcmFibGUmIGl0ZXJhYmxlKQorICAgICAgICBJdGVyYWJsZShMaXZlbmVzcyYgbGl2ZW5lc3Ms
IGNvbnN0IFVuZGVybHlpbmdJdGVyYWJsZSYgaXRlcmFibGUpCiAgICAgICAgICAgICA6IG1fbGl2
ZW5lc3MobGl2ZW5lc3MpCiAgICAgICAgICAgICAsIG1faXRlcmFibGUoaXRlcmFibGUpCiAgICAg
ICAgIHsKQEAgLTMyNyw3ICszMTMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGl0ZXJhdG9yKEFic3RyYWN0TGl2ZW5l
c3MmIGxpdmVuZXNzLCB0eXBlbmFtZSBVbmRlcmx5aW5nSXRlcmFibGU6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIpCisgICAgICAgICAgICBpdGVyYXRvcihMaXZlbmVzcyYgbGl2ZW5lc3MsIHR5cGVuYW1l
IFVuZGVybHlpbmdJdGVyYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXRlcikKICAgICAgICAgICAgICAg
ICA6IG1fbGl2ZW5lc3MoJmxpdmVuZXNzKQogICAgICAgICAgICAgICAgICwgbV9pdGVyKGl0ZXIp
CiAgICAgICAgICAgICB7CkBAIC0zNTYsNyArMzQyLDcgQEAgcHVibGljOgogICAgICAgICAgICAg
fQogCiAgICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAgICBBYnN0cmFjdExpdmVuZXNzKiBtX2xp
dmVuZXNzOworICAgICAgICAgICAgTGl2ZW5lc3MqIG1fbGl2ZW5lc3M7CiAgICAgICAgICAgICB0
eXBlbmFtZSBVbmRlcmx5aW5nSXRlcmFibGU6OmNvbnN0X2l0ZXJhdG9yIG1faXRlcjsKICAgICAg
ICAgfTsKIApAQCAtMzY5LDcgKzM1NSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgQWJzdHJhY3RMaXZlbmVzcyYgbV9saXZlbmVzczsKKyAgICAgICAgTGl2
ZW5lc3MmIG1fbGl2ZW5lc3M7CiAgICAgICAgIGNvbnN0IFVuZGVybHlpbmdJdGVyYWJsZSYgbV9p
dGVyYWJsZTsKICAgICB9OwogCkBAIC0zODcsNyArMzczLDcgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBMb2NhbENhbGM7Ci0gICAgZnJpZW5kIHN0cnVjdCBMb2NhbENh
bGM6Okl0ZXJhYmxlOworICAgIGZyaWVuZCBjbGFzcyBMb2NhbENhbGM6Okl0ZXJhYmxlOwogCiAg
ICAgSW5kZXhTcGFyc2VTZXQ8VW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fd29ya3NldDsKICAgICBJ
bmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0b3I8dW5zaWduZWQ+PiBtX2xpdmVBdEhlYWQ7CkBAIC0z
OTUsMTIgKzM4MSwxMSBAQCBwcml2YXRlOgogfTsKIAogdGVtcGxhdGU8QmFuayBiYW5rLCBBcmc6
OlRlbXBlcmF0dXJlIG1pbmltdW1UZW1wZXJhdHVyZSA9IEFyZzo6Q29sZD4KLXVzaW5nIFRtcExp
dmVuZXNzID0gQWJzdHJhY3RMaXZlbmVzczxUbXBMaXZlbmVzc0FkYXB0ZXI8YmFuaywgbWluaW11
bVRlbXBlcmF0dXJlPj47Cit1c2luZyBUbXBMaXZlbmVzcyA9IExpdmVuZXNzPFRtcExpdmVuZXNz
QWRhcHRlcjxiYW5rLCBtaW5pbXVtVGVtcGVyYXR1cmU+PjsKIAotdHlwZWRlZiBBYnN0cmFjdExp
dmVuZXNzPFRtcExpdmVuZXNzQWRhcHRlcjxHUD4+IEdQTGl2ZW5lc3M7Ci10eXBlZGVmIEFic3Ry
YWN0TGl2ZW5lc3M8VG1wTGl2ZW5lc3NBZGFwdGVyPEZQPj4gRlBMaXZlbmVzczsKLXR5cGVkZWYg
QWJzdHJhY3RMaXZlbmVzczxTdGFja1Nsb3RMaXZlbmVzc0FkYXB0ZXI+IFN0YWNrU2xvdExpdmVu
ZXNzOwotdHlwZWRlZiBBYnN0cmFjdExpdmVuZXNzPFJlZ0xpdmVuZXNzQWRhcHRlcj4gUmVnTGl2
ZW5lc3M7Cit0eXBlZGVmIExpdmVuZXNzPFRtcExpdmVuZXNzQWRhcHRlcjxHUD4+IEdQTGl2ZW5l
c3M7Cit0eXBlZGVmIExpdmVuZXNzPFRtcExpdmVuZXNzQWRhcHRlcjxGUD4+IEZQTGl2ZW5lc3M7
Cit0eXBlZGVmIExpdmVuZXNzPFN0YWNrU2xvdExpdmVuZXNzQWRhcHRlcj4gU3RhY2tTbG90TGl2
ZW5lc3M7CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxvZ1JlZ2lzdGVyUHJlc3N1
cmUuY3BwCShyZXZpc2lvbiAyMTQ0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3
IEBACiAjaW5jbHVkZSAiQWlyQXJnSW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckNvZGUuaCIKICNp
bmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgotI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5j
bHVkZSAiQWlyUmVnTGl2ZW5lc3MuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCShyZXZpc2lvbiAyMTQ0MDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJBaXJFbWl0U2h1ZmZs
ZS5oIgogI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJSZWdMaXZlbmVz
cy5oIgogI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKICNpbmNsdWRlICJCM0NDYWxsVmFsdWUu
aCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJSZWdMaXZlbmVzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdMaXZlbmVzcy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdMaXZlbmVzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyUmVnTGl2ZW5lc3Mu
aCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmdJbmxpbmVzLmgiCisj
aW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCitSZWdMaXZlbmVzczo6UmVnTGl2ZW5lc3MoQ29kZSYgY29k
ZSkKKyAgICA6IG1fbGl2ZUF0SGVhZChjb2RlLnNpemUoKSkKKyAgICAsIG1fbGl2ZUF0VGFpbChj
b2RlLnNpemUoKSkKK3sKKyAgICAvLyBUaGUgbGl2ZUF0VGFpbCBvZiBlYWNoIGJsb2NrIGF1dG9t
YXRpY2FsbHkgY29udGFpbnMgdGhlIExhdGVVc2UncyBvZiB0aGUgdGVybWluYWwuCisgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQmIGxpdmVB
dFRhaWwgPSBtX2xpdmVBdFRhaWxbYmxvY2tdOworICAgICAgICAgICAgCisgICAgICAgIGJsb2Nr
LT5sYXN0KCkuZm9yRWFjaDxSZWc+KAorICAgICAgICAgICAgWyZdIChSZWcmIHJlZywgQXJnOjpS
b2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7CisgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNMYXRl
VXNlKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICBsaXZlQXRUYWlsLmFkZChyZWcpOworICAg
ICAgICAgICAgfSk7CisgICAgfQorICAgICAgICAKKyAgICBCaXRWZWN0b3IgZGlydHlCbG9ja3M7
CisgICAgZm9yIChzaXplX3QgYmxvY2tJbmRleCA9IGNvZGUuc2l6ZSgpOyBibG9ja0luZGV4LS07
KQorICAgICAgICBkaXJ0eUJsb2Nrcy5zZXQoYmxvY2tJbmRleCk7CisgICAgICAgIAorICAgIGJv
b2wgY2hhbmdlZDsKKyAgICBkbyB7CisgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAg
ICAgIAorICAgICAgICBmb3IgKHNpemVfdCBibG9ja0luZGV4ID0gY29kZS5zaXplKCk7IGJsb2Nr
SW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gY29kZVtibG9ja0lu
ZGV4XTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWRpcnR5QmxvY2tzLnF1aWNrQ2xl
YXIoYmxvY2tJbmRleCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBMb2NhbENhbGMgbG9jYWxDYWxjKCp0aGlzLCBibG9jayk7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgt
LTspCisgICAgICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgZWFybHkgZGVmJ3Mgb2YgdGhl
IGZpcnN0IGluc3RydWN0aW9uLgorICAgICAgICAgICAgYmxvY2stPmF0KDApLmZvckVhY2g8UmVn
PigKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyYgcmVnLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywg
V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNFYXJseURlZihyb2xlKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5tX3dvcmtzZXQucmVtb3ZlKHJlZyk7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBSZWdp
c3RlclNldCYgbGl2ZUF0SGVhZCA9IG1fbGl2ZUF0SGVhZFtibG9ja107CisgICAgICAgICAgICBp
ZiAobGl2ZUF0SGVhZC5zdWJzdW1lcyhsb2NhbENhbGMubV93b3Jrc2V0KSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGxpdmVBdEhlYWQu
bWVyZ2UobG9jYWxDYWxjLm1fd29ya3NldCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yIDogYmxvY2stPnByZWRlY2Vzc29ycygpKSB7
CisgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQmIGxpdmVBdFRhaWwgPSBtX2xpdmVBdFRhaWxb
cHJlZGVjZXNzb3JdOworICAgICAgICAgICAgICAgIGlmIChsaXZlQXRUYWlsLnN1YnN1bWVzKGxv
Y2FsQ2FsYy5tX3dvcmtzZXQpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbGl2ZUF0VGFpbC5tZXJnZShsb2NhbENh
bGMubV93b3Jrc2V0KTsKKyAgICAgICAgICAgICAgICBkaXJ0eUJsb2Nrcy5xdWlja1NldChwcmVk
ZWNlc3Nvci0+aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChjaGFuZ2VkKTsKK30KKworUmVnTGl2
ZW5lc3M6On5SZWdMaXZlbmVzcygpCit7Cit9CisKK3ZvaWQgUmVnTGl2ZW5lc3M6OkxvY2FsQ2Fs
Yzo6ZXhlY3V0ZSh1bnNpZ25lZCBpbnN0SW5kZXgpCit7CisgICAgSW5zdCYgaW5zdCA9IG1fYmxv
Y2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICAKKyAgICAvLyBGaXJzdCBoYW5kbGUgdGhl
IGVhcmx5IGRlZidzIG9mIHRoZSBuZXh0IGluc3RydWN0aW9uLgorICAgIGlmIChpbnN0SW5kZXgg
KyAxIDwgbV9ibG9jay0+c2l6ZSgpKSB7CisgICAgICAgIEluc3QmIG5leHRJbnN0ID0gbV9ibG9j
ay0+YXQoaW5zdEluZGV4ICsgMSk7CisgICAgICAgIG5leHRJbnN0LmZvckVhY2g8UmVnPigKKyAg
ICAgICAgICAgIFsmXSAoUmVnJiByZWcsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkgewor
ICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlEZWYocm9sZSkpCisgICAgICAgICAgICAg
ICAgICAgIG1fd29ya3NldC5yZW1vdmUocmVnKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAg
ICAgICAgICAgIAorICAgIC8vIFRoZW4gaGFuZGxlIGRlZidzLgorICAgIGluc3QuZm9yRWFjaDxS
ZWc+KAorICAgICAgICBbJl0gKFJlZyYgcmVnLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgp
IHsKKyAgICAgICAgICAgIGlmIChBcmc6OmlzTGF0ZURlZihyb2xlKSkKKyAgICAgICAgICAgICAg
ICBtX3dvcmtzZXQucmVtb3ZlKHJlZyk7CisgICAgICAgIH0pOworICAgICAgICAgICAgCisgICAg
Ly8gVGhlbiBoYW5kbGUgdXNlJ3MuCisgICAgaW5zdC5mb3JFYWNoPFJlZz4oCisgICAgICAgIFsm
XSAoUmVnJiByZWcsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkgeworICAgICAgICAgICAg
aWYgKEFyZzo6aXNFYXJseVVzZShyb2xlKSkKKyAgICAgICAgICAgICAgICBtX3dvcmtzZXQuYWRk
KHJlZyk7CisgICAgICAgIH0pOworICAgICAgICAgICAgCisgICAgLy8gQW5kIGZpbmFsbHksIGhh
bmRsZSB0aGUgbGF0ZSB1c2UncyBvZiB0aGUgcHJldmlvdXMgaW5zdHJ1Y3Rpb24uCisgICAgaWYg
KGluc3RJbmRleCkgeworICAgICAgICBJbnN0JiBwcmV2SW5zdCA9IG1fYmxvY2stPmF0KGluc3RJ
bmRleCAtIDEpOworICAgICAgICBwcmV2SW5zdC5mb3JFYWNoPFJlZz4oCisgICAgICAgICAgICBb
Jl0gKFJlZyYgcmVnLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoQXJnOjppc0xhdGVVc2Uocm9sZSkpCisgICAgICAgICAgICAgICAgICAgIG1fd29y
a3NldC5hZGQocmVnKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KK30KKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdMaXZlbmVzcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnTGl2ZW5lc3MuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ0xpdmVuZXNzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5j
bHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworLy8gQWx0aG91Z2ggd2UgY291
bGQgdHJpdmlhbGx5IGFkYXB0IEFpcjo6TGl2ZW5lc3M8PiB0byB3b3JrIHdpdGggUmVnLCB0aGlz
IHdvdWxkIG5vdCBiZSBzbworLy8gZWZmaWNpZW50LiBUaGVyZSBpcyBhIHNtYWxsIG51bWJlciBv
ZiByZWdpc3RlcnMsIHNvIGl0J3MgbXVjaCBiZXR0ZXIgdG8gdXNlIGJpdHZlY3RvcnMgZm9yCisv
LyByZWdpc3RlciBsaXZlbmVzcy4gVGhpcyBpcyBhIHNwZWNpYWxpemF0aW9uIG9mIExpdmVuZXNz
PD4gdGhhdCB1c2VzIGJpdHZlY3RvcnMgZGlyZWN0bHkuCisvLyBUaGlzIG1ha2VzIHRoZSBjb2Rl
IHN1ZmZpY2llbnRseSBkaWZmZXJlbnQgdGhhdCBpdCBkaWRuJ3QgbWFrZSBzZW5zZSB0byB0cnkg
dG8gc2hhcmUgY29kZS4KK2NsYXNzIFJlZ0xpdmVuZXNzIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IFJlZyBUaGluZzsKKyAgICAKKyAgICBSZWdMaXZlbmVzcyhDb2RlJiBjb2RlKTsKKyAgICB+UmVn
TGl2ZW5lc3MoKTsKKyAgICAKKyAgICAvLyBUaGlzIGNhbGN1bGF0b3IgaGFzIHRvIGJlIHJ1biBp
biByZXZlcnNlLgorICAgIGNsYXNzIExvY2FsQ2FsYyB7CisgICAgcHVibGljOgorICAgICAgICBM
b2NhbENhbGMoUmVnTGl2ZW5lc3MmIGxpdmVuZXNzLCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAg
ICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAgICAgICAgICwgbV93b3Jrc2V0KGxpdmVuZXNz
Lm1fbGl2ZUF0VGFpbFtibG9ja10pCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGxpdmUoKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV93b3Jrc2V0OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29s
IGlzTGl2ZShSZWcgcmVnKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV93
b3Jrc2V0LmNvbnRhaW5zKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQg
ZXhlY3V0ZSh1bnNpZ25lZCBpbnN0SW5kZXgpOworICAgICAgICAKKyAgICBwcml2YXRlOgorICAg
ICAgICBmcmllbmQgY2xhc3MgUmVnTGl2ZW5lc3M7CisgICAgICAgIAorICAgICAgICBCYXNpY0Js
b2NrKiBtX2Jsb2NrOworICAgICAgICBSZWdpc3RlclNldCBtX3dvcmtzZXQ7CisgICAgfTsKKyAg
ICAKKyAgICBjb25zdCBSZWdpc3RlclNldCYgbGl2ZUF0SGVhZChCYXNpY0Jsb2NrKiBibG9jaykg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xpdmVBdEhlYWRbYmxvY2tdOworICAgIH0K
KyAgICAKKyAgICBjb25zdCBSZWdpc3RlclNldCYgbGl2ZUF0VGFpbChCYXNpY0Jsb2NrKiBibG9j
aykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xpdmVBdFRhaWxbYmxvY2tdOworICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgUmVnaXN0ZXJTZXQ+
IG1fbGl2ZUF0SGVhZDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBSZWdpc3RlclNldD4gbV9s
aXZlQXRUYWlsOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwCShyZXZpc2lvbiAyMTQ0
MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3Rl
cnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiQWlyQXJn
SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpckNvZGUuaCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5l
cy5oIgotI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5jbHVkZSAiQWlyUmVnTGl2ZW5lc3Mu
aCIKICNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
Z2lzdGVyU2V0LmgJKHJldmlzaW9uIDIxNDQwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDYgKzM2LDggQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK3R5cGVkZWYgQml0bWFwPE1hY3JvQXNzZW1ibGVyOjpudW1HUFJzICsg
TWFjcm9Bc3NlbWJsZXI6Om51bUZQUnMgKyAxPiBSZWdpc3RlckJpdG1hcDsKKwogY2xhc3MgUmVn
aXN0ZXJTZXQgewogcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFJlZ3M+CkBAIC05
OSwxMCArMTAxLDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHNldChyZWcpOwogICAgIH0KICAg
ICAKKyAgICAvLyBBbHNvIGFsbG93IGFkZC9yZW1vdmUvY29udGFpbnMgdGVybWlub2xvZ3ksIHdo
aWNoIG1lYW5zIHRoZSBzYW1lIHRoaW5nIGFzIHNldC9jbGVhci9nZXQuCisgICAgdm9pZCBhZGQo
UmVnIHJlZykgeyBzZXQocmVnKTsgfQorICAgIHZvaWQgcmVtb3ZlKFJlZyByZWcpIHsgY2xlYXIo
cmVnKTsgfQorICAgIGJvb2wgY29udGFpbnMoUmVnIHJlZykgY29uc3QgeyByZXR1cm4gZ2V0KHJl
Zyk7IH0KKyAgICAKICAgICB2b2lkIG1lcmdlKGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgeyBt
X2JpdHMubWVyZ2Uob3RoZXIubV9iaXRzKTsgfQogICAgIHZvaWQgZmlsdGVyKGNvbnN0IFJlZ2lz
dGVyU2V0JiBvdGhlcikgeyBtX2JpdHMuZmlsdGVyKG90aGVyLm1fYml0cyk7IH0KICAgICB2b2lk
IGV4Y2x1ZGUoY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSB7IG1fYml0cy5leGNsdWRlKG90aGVy
Lm1fYml0cyk7IH0KICAgICAKKyAgICBib29sIHN1YnN1bWVzKGNvbnN0IFJlZ2lzdGVyU2V0JiBv
dGhlcikgY29uc3QgeyByZXR1cm4gbV9iaXRzLnN1YnN1bWVzKG90aGVyLm1fYml0cyk7IH0KKyAg
ICAKICAgICBzaXplX3QgbnVtYmVyT2ZTZXRHUFJzKCkgY29uc3Q7CiAgICAgc2l6ZV90IG51bWJl
ck9mU2V0RlBScygpIGNvbnN0OwogICAgIHNpemVfdCBudW1iZXJPZlNldFJlZ2lzdGVycygpIGNv
bnN0IHsgcmV0dXJuIG1fYml0cy5jb3VudCgpOyB9CkBAIC0xNDksNiArMTU4LDQyIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIH0pOwogICAgIH0KICAgICAKKyAgICBjbGFzcyBpdGVyYXRvciB7Cisg
ICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgIHsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaXRlcmF0b3IoY29uc3QgUmVnaXN0ZXJCaXRtYXA6Oml0ZXJhdG9yJiBp
dGVyKQorICAgICAgICAgICAgOiBtX2l0ZXIoaXRlcikKKyAgICAgICAgeworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBSZWcgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gUmVnOjpmcm9t
SW5kZXgoKm1faXRlcik7IH0KKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisr
KCkKKyAgICAgICAgeworICAgICAgICAgICAgKyttX2l0ZXI7CisgICAgICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBpdGVyYXRvciYgb3RoZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2l0ZXIg
PT0gb3RoZXIubV9pdGVyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToK
KyAgICAgICAgUmVnaXN0ZXJCaXRtYXA6Oml0ZXJhdG9yIG1faXRlcjsKKyAgICB9OworICAgIAor
ICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9iaXRzLmJlZ2lu
KCkpOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9iaXRz
LmVuZCgpKTsgfQorICAgIAogcHJpdmF0ZToKICAgICB2b2lkIHNldEFueShSZWcgcmVnKSB7IHNl
dChyZWcpOyB9CiAgICAgdm9pZCBzZXRBbnkoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkgeyBtZXJn
ZShzZXQpOyB9CkBAIC0xNjYsNyArMjExLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgaGFzaFNwZWNpYWxCaXRJbmRleCA9IGZwck9mZnNldCArIE1hY3JvQXNzZW1ibGVy
OjpudW1GUFJzOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWxldGVkQml0SW5kZXggPSAw
OwogICAgIAotICAgIEJpdG1hcDxNYWNyb0Fzc2VtYmxlcjo6bnVtR1BScyArIE1hY3JvQXNzZW1i
bGVyOjpudW1GUFJzICsgMT4gbV9iaXRzOworICAgIFJlZ2lzdGVyQml0bWFwIG1fYml0czsKIH07
CiAKIHN0cnVjdCBSZWdpc3RlclNldEhhc2ggewpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNDQwNCkKKysr
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIw
MTctMDMtMjYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBBaXIg
c2hvdWxkIHVzZSBSZWdpc3RlclNldCBmb3IgUmVnTGl2ZW5lc3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDEwOAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0F0b21pY3MuaDoKKyAgICAgICAg
KFdURjo6ZW5zdXJlUG9pbnRlcik6IFRoaXMgaXMgYSB1c2VmdWwgcmVwbGFjZW1lbnQgZm9yIHN0
ZDo6b25jZSwgd2hpY2ggcmVxdWlyZXMgbGVzcyBmZW5jaW5nLgorICAgICAgICAqIHd0Zi9CaXRt
YXAuaDogQWRkIG1vcmUgdXRpbGl0aWVzLgorICAgICAgICAoV1RGOjpCaXRtYXA6Oml0ZXJhdG9y
OjppdGVyYXRvcik6IEFuIGl0ZXJhdG9yIGZvciBzZXQgYml0cy4KKyAgICAgICAgKFdURjo6Qml0
bWFwOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKFdURjo6Qml0bWFwOjppdGVyYXRv
cjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXVEY6OkJpdG1hcDo6aXRlcmF0b3I6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoV1RGOjpCaXRtYXA6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAg
ICAgKFdURjo6Qml0bWFwOjpiZWdpbik6CisgICAgICAgIChXVEY6OkJpdG1hcDo6ZW5kKToKKyAg
ICAgICAgKFdURjo6V29yZFR5cGU+OjpzdWJzdW1lcyk6IGEuc3Vic3VtZXMoYikgaWYgYWxsIG9m
IGIncyBzZXQgYml0cyBhcmUgc2V0IGluIGEuCisgICAgICAgIChXVEY6OldvcmRUeXBlPjo6Zmlu
ZEJpdCk6IGZpbmQgbmV4dCBzZXQgb3IgY2xlYXIgYml0LgorCiAyMDE3LTAzLTI0ICBKRiBCYXN0
aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJBc3NlbWJseTogc3RvcmUg
c3RhdGUgaW4gVExTIGluc3RlYWQgb2Ygb24gVk0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F0b21p
Y3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHJldmlzaW9uIDIx
NDQwNCkKKysrIFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAkod29ya2luZyBjb3B5KQpAQCAtNTE5
LDYgKzUxOSwyMyBAQCBpbmxpbmUgVCogY29uc3VtZShUKiBwb2ludGVyLCBEZXBlbmRlbmN5CiAj
ZW5kaWYKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRnVuYz4KK0FMV0FZU19J
TkxJTkUgVCYgZW5zdXJlUG9pbnRlcihBdG9taWM8VCo+JiBwb2ludGVyLCBjb25zdCBGdW5jJiBm
dW5jKQoreworICAgIGZvciAoOzspIHsKKyAgICAgICAgVCogb2xkVmFsdWUgPSBwb2ludGVyLmxv
YWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgIGlmIChvbGRWYWx1ZSkgewor
ICAgICAgICAgICAgLy8gT24gYWxsIHNlbnNpYmxlIENQVXMsIHdlIGdldCBhbiBpbXBsaWNpdCBk
ZXBlbmRlbmN5LWJhc2VkIGxvYWQtbG9hZCBiYXJyaWVyIHdoZW4KKyAgICAgICAgICAgIC8vIGxv
YWRpbmcgdGhpcy4KKyAgICAgICAgICAgIHJldHVybiAqb2xkVmFsdWU7CisgICAgICAgIH0KKyAg
ICAgICAgVCogbmV3VmFsdWUgPSBmdW5jKCk7CisgICAgICAgIGlmIChwb2ludGVyLmNvbXBhcmVF
eGNoYW5nZVdlYWsob2xkVmFsdWUsIG5ld1ZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiAqbmV3
VmFsdWU7CisgICAgICAgIGRlbGV0ZSBuZXdWYWx1ZTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdURgogCiB1c2luZyBXVEY6OkF0b21pYzsKQEAgLTUyOCw2ICs1NDUsNyBAQCB1c2luZyBX
VEY6OlRyYW5zYWN0aW9uQWJvcnRMaWtlbGlob29kOwogdXNpbmcgV1RGOjpjb25zdW1lOwogdXNp
bmcgV1RGOjpkZXBlbmRlbmN5OwogdXNpbmcgV1RGOjpkZXBlbmRlbmN5V2l0aDsKK3VzaW5nIFdU
Rjo6ZW5zdXJlUG9pbnRlcjsKIHVzaW5nIFdURjo6bnVsbERlcGVuZGVuY3k7CiAKICNlbmRpZiAv
LyBBdG9taWNzX2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCShyZXZpc2lvbiAyMTQ0MDQpCisrKyBTb3VyY2UvV1RG
L3d0Zi9CaXRtYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDEwLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC01OSw5ICs1OSw1NCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBmaWx0ZXIoY29uc3QgQml0bWFwJik7CiAgICAgdm9pZCBleGNsdWRlKGNvbnN0IEJpdG1hcCYp
OwogICAgIAorICAgIGJvb2wgc3Vic3VtZXMoY29uc3QgQml0bWFwJikgY29uc3Q7CisgICAgCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hTZXRCaXQoY29uc3Qg
RnVuYyYpIGNvbnN0OwogICAgIAorICAgIHNpemVfdCBmaW5kQml0KHNpemVfdCBzdGFydEluZGV4
LCBib29sIHZhbHVlKSBjb25zdDsKKyAgICAKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVi
bGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fYml0bWFwKG51bGxwdHIp
CisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpdGVyYXRvcihjb25zdCBCaXRtYXAmIGJpdG1hcCwgc2l6ZV90IGluZGV4KQor
ICAgICAgICAgICAgOiBtX2JpdG1hcCgmYml0bWFwKQorICAgICAgICAgICAgLCBtX2luZGV4KGlu
ZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNpemVfdCBvcGVy
YXRvciooKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgICAgIAorICAgICAgICBpdGVy
YXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBtX2Jp
dG1hcC0+ZmluZEJpdChtX2luZGV4ICsgMSwgdHJ1ZSk7CisgICAgICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2lu
ZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0
ZToKKyAgICAgICAgY29uc3QgQml0bWFwKiBtX2JpdG1hcDsKKyAgICAgICAgc2l6ZV90IG1faW5k
ZXg7CisgICAgfTsKKyAgICAKKyAgICAvLyBVc2UgdGhpcyB0byBpdGVyYXRlIG92ZXIgc2V0IGJp
dHMuCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywg
ZmluZEJpdCgwLCB0cnVlKSk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcigqdGhpcywgYml0bWFwU2l6ZSk7IH0KKyAgICAKICAgICB2b2lkIG1lcmdlQW5kQ2xl
YXIoQml0bWFwJik7CiAgICAgdm9pZCBzZXRBbmRDbGVhcihCaXRtYXAmKTsKICAgICAKQEAgLTI1
OCw2ICszMDMsMTggQEAgaW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPgog
fQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+Citpbmxp
bmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpzdWJzdW1lcyhjb25zdCBCaXRt
YXAmIG90aGVyKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsr
aSkgeworICAgICAgICBXb3JkVHlwZSBteUJpdHMgPSBiaXRzW2ldOworICAgICAgICBXb3JkVHlw
ZSBvdGhlckJpdHMgPSBvdGhlci5iaXRzW2ldOworICAgICAgICBpZiAoKG15Qml0cyB8IG90aGVy
Qml0cykgIT0gbXlCaXRzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8c2l6ZV90IGJpdG1hcFNpemUsIHR5cGVuYW1lIFdv
cmRUeXBlPgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KIGlubGluZSB2b2lkIEJpdG1hcDxiaXRt
YXBTaXplLCBXb3JkVHlwZT46OmZvckVhY2hTZXRCaXQoY29uc3QgRnVuYyYgZnVuYykgY29uc3QK
IHsKQEAgLTI3NSw2ICszMzIsMjggQEAgaW5saW5lIHZvaWQgQml0bWFwPGJpdG1hcFNpemUsIFdv
cmRUeXBlPgogfQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5
cGU+CitpbmxpbmUgc2l6ZV90IEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmZpbmRCaXQo
c2l6ZV90IHN0YXJ0SW5kZXgsIGJvb2wgdmFsdWUpIGNvbnN0Cit7CisgICAgV29yZFR5cGUgc2tp
cFZhbHVlID0gLShzdGF0aWNfY2FzdDxXb3JkVHlwZT4odmFsdWUpIF4gMSk7CisgICAgc2l6ZV90
IHdvcmRJbmRleCA9IHN0YXJ0SW5kZXggLyB3b3JkU2l6ZTsKKyAgICBzaXplX3Qgc3RhcnRJbmRl
eEluV29yZCA9IHN0YXJ0SW5kZXggLSB3b3JkSW5kZXggKiB3b3JkU2l6ZTsKKyAgICAKKyAgICB3
aGlsZSAod29yZEluZGV4IDwgd29yZHMpIHsKKyAgICAgICAgV29yZFR5cGUgd29yZCA9IGJpdHNb
d29yZEluZGV4XTsKKyAgICAgICAgaWYgKHdvcmQgIT0gc2tpcFZhbHVlKSB7CisgICAgICAgICAg
ICBzaXplX3QgaW5kZXggPSBzdGFydEluZGV4SW5Xb3JkOworICAgICAgICAgICAgaWYgKGZpbmRC
aXRJbldvcmQod29yZCwgaW5kZXgsIHdvcmRTaXplLCB2YWx1ZSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHdvcmRJbmRleCAqIHdvcmRTaXplICsgaW5kZXg7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHdvcmRJbmRleCsrOworICAgICAgICBzdGFydEluZGV4SW5Xb3JkID0gMDsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIGJpdG1hcFNpemU7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBi
aXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KIGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBT
aXplLCBXb3JkVHlwZT46Om1lcmdlQW5kQ2xlYXIoQml0bWFwJiBvdGhlcikKIHsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpIHsK
</data>
<flag name="review"
          id="326874"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
      

    </bug>

</bugzilla>