<?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>81541</bug_id>
          
          <creation_ts>2012-03-19 12:46:19 -0700</creation_ts>
          <short_desc>Move webaudio to Modules/webaudio/</short_desc>
          <delta_ts>2012-03-21 12:31:50 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Pilgrim (Google)">pilgrim</reporter>
          <assigned_to name="Mark Pilgrim (Google)">pilgrim</assigned_to>
          <cc>abarth</cc>
    
    <cc>crogers</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>haraken</cc>
    
    <cc>levin+threading</cc>
    
    <cc>ojan</cc>
    
    <cc>rakuco</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>582075</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-03-19 12:46:19 -0700</bug_when>
    <thetext>Move webaudio to Modules/webaudio/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582079</commentid>
    <comment_count>1</comment_count>
      <attachid>132633</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-03-19 12:47:10 -0700</bug_when>
    <thetext>Created attachment 132633
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582092</commentid>
    <comment_count>2</comment_count>
      <attachid>132633</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-19 13:02:35 -0700</bug_when>
    <thetext>Comment on attachment 132633
Patch

Attachment 132633 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/11986351</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582100</commentid>
    <comment_count>3</comment_count>
      <attachid>132633</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-19 13:07:54 -0700</bug_when>
    <thetext>Comment on attachment 132633
Patch

Attachment 132633 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11985547</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582103</commentid>
    <comment_count>4</comment_count>
      <attachid>132637</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-03-19 13:10:42 -0700</bug_when>
    <thetext>Created attachment 132637
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582142</commentid>
    <comment_count>5</comment_count>
      <attachid>132637</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-19 13:26:07 -0700</bug_when>
    <thetext>Comment on attachment 132637
Patch

Attachment 132637 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11984693</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582172</commentid>
    <comment_count>6</comment_count>
      <attachid>132637</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-19 13:43:39 -0700</bug_when>
    <thetext>Comment on attachment 132637
Patch

Attachment 132637 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/11982891</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582196</commentid>
    <comment_count>7</comment_count>
      <attachid>132661</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-03-19 13:56:09 -0700</bug_when>
    <thetext>Created attachment 132661
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582200</commentid>
    <comment_count>8</comment_count>
      <attachid>132661</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-19 14:00:04 -0700</bug_when>
    <thetext>Comment on attachment 132661
Patch

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

This patch looks great, assuming it builds everywhere.

&gt; Source/WebCore/CMakeLists.txt:379
&gt; +    Modules/webaudio/AudioBuffer.idl

We should move these to be alphabetical.  (We can do that in a followup patch if you like.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582296</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-19 15:02:58 -0700</bug_when>
    <thetext>Looks like your patch doesn&apos;t apply to TOT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582726</commentid>
    <comment_count>10</comment_count>
      <attachid>132661</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-19 21:23:57 -0700</bug_when>
    <thetext>Comment on attachment 132661
Patch

This looks good, but the patch doesn&apos;t apply to top-of-tree, so it&apos;s not getting run through the EWS bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583427</commentid>
    <comment_count>11</comment_count>
      <attachid>132891</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-03-20 14:03:18 -0700</bug_when>
    <thetext>Created attachment 132891
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583435</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-20 14:09:39 -0700</bug_when>
    <thetext>Attachment 132891 did not pass style-queue:

Source/WebCore/Modules/webaudio/AudioContext.cpp:60:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/webaudio/AudioContext.cpp:622:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/ConvolverNode.cpp:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/ConvolverNode.cpp:77:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/ConvolverNode.cpp:84:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/AudioNodeOutput.h:77:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/WaveShaperNode.cpp:29:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Source/WebCore/Modules/webaudio/AudioNodeInput.h:71:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/AudioContext.h:108:  The parameter name &quot;ec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webaudio/AudioContext.h:247:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/AudioContext.h:248:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/AudioContext.h:250:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/AudioContext.h:265:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/RealtimeAnalyserNode.cpp:67:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/AudioNode.cpp:318:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/AudioNode.cpp:319:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/AudioBuffer.h:70:  The parameter name &quot;bus&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webaudio/RealtimeAnalyser.cpp:183:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/RealtimeAnalyser.h:47:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webaudio/AudioPannerNode.cpp:309:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/AudioBufferSourceNode.h:72:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/AudioBufferSourceNode.h:77:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/JavaScriptAudioNode.cpp:134:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/JavaScriptAudioNode.cpp:169:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/JavaScriptAudioNode.cpp:181:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/JavaScriptAudioNode.cpp:194:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/AudioBufferSourceNode.cpp:80:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/AudioBufferSourceNode.cpFailed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
p:165:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/AudioBufferSourceNode.cpp:470:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/AudioNode.h:88:  The parameter name &quot;refType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webaudio/AudioNode.h:89:  The parameter name &quot;refType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/webaudio/AudioNode.h:91:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webaudio/AudioNode.h:92:  The parameter name &quot;refType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 33 in 114 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>583604</commentid>
    <comment_count>13</comment_count>
      <attachid>132891</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-20 16:33:17 -0700</bug_when>
    <thetext>Comment on attachment 132891
Patch

All bots are green!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583655</commentid>
    <comment_count>14</comment_count>
      <attachid>132891</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-20 17:31:10 -0700</bug_when>
    <thetext>Comment on attachment 132891
Patch

Clearing flags on attachment: 132891

Committed r111474: &lt;http://trac.webkit.org/changeset/111474&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583656</commentid>
    <comment_count>15</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-20 17:31:48 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583659</commentid>
    <comment_count>16</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-20 17:33:11 -0700</bug_when>
    <thetext>Committed manually to avoid style check errors. Thank you very much for the patch. Let&apos;s keep watching the tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584496</commentid>
    <comment_count>17</comment_count>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-03-21 12:31:50 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 132661 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132661&amp;action=review
&gt; 
&gt; This patch looks great, assuming it builds everywhere.
&gt; 
&gt; &gt; Source/WebCore/CMakeLists.txt:379
&gt; &gt; +    Modules/webaudio/AudioBuffer.idl
&gt; 
&gt; We should move these to be alphabetical.  (We can do that in a followup patch if you like.)

Bug 81825.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132633</attachid>
            <date>2012-03-19 12:47:10 -0700</date>
            <delta_ts>2012-03-19 13:10:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81541-20120319154700.patch</filename>
            <type>text/plain</type>
            <size>495660</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTIyMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNyBAQAorMjAxMi0wMy0xOSAgTWFyayBQ
aWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgTW92ZSB3ZWJhdWRpbyB0
byBNb2R1bGVzL3dlYmF1ZGlvLworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODE1NDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBObyBuZXcgdGVzdHMsIGFsbCBleGlzdGluZyB0ZXN0cyBwYXNzLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAg
ICAgICAgKiBEZXJpdmVkU291cmNlcy5wcmk6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06Cisg
ICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlv
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby4KKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2Vi
Q29yZS5wcmk6CisgICAgICAgICogd2ViYXVkaW86IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVk
aW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0Fz
eW5jQXVkaW9EZWNvZGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9CYXNp
Y1Byb2Nlc3Nvck5vZGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQmFz
aWNQcm9jZXNzb3JOb2RlLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9CdWZm
ZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQnVmZmVyLmg6IFJlbW92
ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9CdWZmZXIuaWRsOiBSZW1vdmVkLgorICAgICAg
ICAqIHdlYmF1ZGlvL0F1ZGlvQnVmZmVyQ2FsbGJhY2suaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3
ZWJhdWRpby9BdWRpb0J1ZmZlckNhbGxiYWNrLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJh
dWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1
ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlv
L0F1ZGlvQnVmZmVyU291cmNlTm9kZS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8v
QXVkaW9DaGFubmVsTWVyZ2VyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRp
b0NoYW5uZWxNZXJnZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0NoYW5u
ZWxNZXJnZXIuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNw
bGl0dGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxp
dHRlci5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVy
LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHdlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGw6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVk
aW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlv
L0F1ZGlvRGVzdGluYXRpb25Ob2RlLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVk
aW9EZXN0aW5hdGlvbk5vZGUuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlv
R2Fpbi5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvR2Fpbi5pZGw6IFJlbW92
ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1
ZGlvL0F1ZGlvR2Fpbk5vZGUuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlv
TGlzdGVuZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmlkbDogUmVtb3Zl
ZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb05vZGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHdlYmF1ZGlvL0F1ZGlvTm9kZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlv
Tm9kZS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0Lmg6IFJlbW92ZWQu
CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiB3ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJh
dWRpby9BdWRpb1Bhbm5lck5vZGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1
ZGlvUGFubmVyTm9kZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvUGFubmVy
Tm9kZS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9QYXJhbS5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9QYXJhbS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHdlYmF1ZGlvL0F1ZGlvUGFyYW0uaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlv
L0F1ZGlvUGFyYW1UaW1lbGluZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVk
aW9QYXJhbVRpbWVsaW5lLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Qcm9j
ZXNzaW5nRXZlbnQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvUHJvY2Vz
c2luZ0V2ZW50Lmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5n
RXZlbnQuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5o
OiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5pZGw6IFJlbW92
ZWQuCisgICAgICAgICogd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiB3ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3
ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRp
by9CaXF1YWRGaWx0ZXJOb2RlLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQmlxdWFk
RmlsdGVyTm9kZS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQmlxdWFkUHJvY2Vz
c29yLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiB3ZWJhdWRpby9Db252b2x2ZXJOb2RlLmg6IFJlbW92ZWQuCisgICAgICAgICog
d2ViYXVkaW8vQ29udm9sdmVyTm9kZS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8v
RE9NV2luZG93V2ViQXVkaW8uaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0RlZmF1
bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8v
RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVk
aW8vRGVsYXlEU1BLZXJuZWwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0RlbGF5
RFNQS2VybmVsLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vRGVsYXlOb2RlLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9EZWxheU5vZGUuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiB3ZWJhdWRpby9EZWxheU5vZGUuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlv
L0RlbGF5UHJvY2Vzc29yLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9EZWxheVBy
b2Nlc3Nvci5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nv
ck5vZGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nv
ck5vZGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JO
b2RlLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2Rl
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmg6
IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5pZGw6IFJl
bW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHdlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaWRsOiBSZW1vdmVkLgorICAg
ICAgICAqIHdlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmg6IFJlbW92ZWQuCisgICAgICAgICogd2Vi
YXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRp
by9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdl
YmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oOiBSZW1vdmVkLgorICAgICAgICAq
IHdlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5pZGw6IFJlbW92ZWQuCisgICAg
ICAgICogd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiB3ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiB3ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaWRsOiBS
ZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25O
b2RlLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5oOiBSZW1vdmVk
LgorICAgICAgICAqIHdlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiB3ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHdlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmlkbDogUmVtb3ZlZC4KKyAgICAg
ICAgKiB3ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiB3ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmg6IFJlbW92ZWQuCisgICAgICAgICogd2Vi
YXVkaW8vV2F2ZVNoYXBlck5vZGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL1dh
dmVTaGFwZXJOb2RlLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vV2F2ZVNoYXBlck5v
ZGUuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3Iu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuaDog
UmVtb3ZlZC4KKwogMjAxMi0wMy0xOSAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAK
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNTM0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMsNiArMyw3IEBAIFNFVChXZWJD
b3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9maWxl
c3lzdGVtIgogICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL2dlb2xvY2F0aW9uIgogICAgICIk
e1dFQkNPUkVfRElSfS9Nb2R1bGVzL2luZGV4ZWRkYiIKKyAgICAiJHtXRUJDT1JFX0RJUn0vTW9k
dWxlcy93ZWJhdWRpbyIKICAgICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy93ZWJkYXRhYmFzZSIK
ICAgICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy93ZWJzb2NrZXRzIgogICAgICIke1dFQkNPUkVf
RElSfS9hY2Nlc3NpYmlsaXR5IgpAQCAtNjQsNyArNjUsNiBAQCBTRVQoV2ViQ29yZV9JTkNMVURF
X0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3N2Zy9ncmFwaGljcyIKICAgICAiJHtX
RUJDT1JFX0RJUn0vc3ZnL2dyYXBoaWNzL2ZpbHRlcnMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3N2
Zy9wcm9wZXJ0aWVzIgotICAgICIke1dFQkNPUkVfRElSfS93ZWJhdWRpbyIKICAgICAiJHtXRUJD
T1JFX0RJUn0vd2Vic29ja2V0cyIKICAgICAiJHtXRUJDT1JFX0RJUn0vd29ya2VycyIKICAgICAi
JHtXRUJDT1JFX0RJUn0veG1sIgpAQCAtOTYsNiArOTYsNyBAQCBTRVQoV2ViQ29yZV9JRExfSU5D
TFVERVMKICAgICBNb2R1bGVzL2ZpbGVzeXN0ZW0KICAgICBNb2R1bGVzL2dlb2xvY2F0aW9uCiAg
ICAgTW9kdWxlcy9pbmRleGVkZGIKKyAgICBNb2R1bGVzL3dlYmF1ZGlvCiAgICAgTW9kdWxlcy93
ZWJkYXRhYmFzZQogICAgIE1vZHVsZXMvd2Vic29ja2V0cwogICAgIGJpbmRpbmdzL2dlbmVyaWMK
QEAgLTExMCw3ICsxMTEsNiBAQCBTRVQoV2ViQ29yZV9JRExfSU5DTFVERVMKICAgICBwbHVnaW5z
CiAgICAgc3RvcmFnZQogICAgIHN2ZwotICAgIHdlYmF1ZGlvCiAgICAgd29ya2VycwogICAgIHht
bAogKQpAQCAtMzc2LDI3ICszNzYsMjcgQEAgU0VUKFdlYkNvcmVfSURMX0ZJTEVTCiAgICAgc3Rv
cmFnZS9TdG9yYWdlSW5mb1F1b3RhQ2FsbGJhY2suaWRsCiAgICAgc3RvcmFnZS9TdG9yYWdlSW5m
b1VzYWdlQ2FsbGJhY2suaWRsCiAKLSAgICB3ZWJhdWRpby9BdWRpb0J1ZmZlci5pZGwKLSAgICB3
ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaWRsCi0gICAgd2ViYXVkaW8vQXVkaW9DaGFu
bmVsU3BsaXR0ZXIuaWRsCi0gICAgd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmlkbAotICAg
IHdlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwKLSAgICB3ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9u
Tm9kZS5pZGwKLSAgICB3ZWJhdWRpby9BdWRpb0dhaW4uaWRsCi0gICAgd2ViYXVkaW8vQXVkaW9H
YWluTm9kZS5pZGwKLSAgICB3ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmlkbAotICAgIHdlYmF1ZGlv
L0F1ZGlvTm9kZS5pZGwKLSAgICB3ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaWRsCi0gICAgd2Vi
YXVkaW8vQXVkaW9QYXJhbS5pZGwKLSAgICB3ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5p
ZGwKLSAgICB3ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaWRsCi0gICAgd2ViYXVkaW8vQ29udm9s
dmVyTm9kZS5pZGwKLSAgICB3ZWJhdWRpby9ET01XaW5kb3dXZWJBdWRpby5pZGwKLSAgICB3ZWJh
dWRpby9EZWxheU5vZGUuaWRsCi0gICAgd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5pZGwK
LSAgICB3ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmlkbAotICAgIHdlYmF1ZGlvL0xvd1Bh
c3MyRmlsdGVyTm9kZS5pZGwKLSAgICB3ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5pZGwK
KyAgICBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmlkbAorICAgIE1vZHVsZXMvd2ViYXVk
aW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlkbAorICAgIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9D
aGFubmVsU3BsaXR0ZXIuaWRsCisgICAgTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJn
ZXIuaWRsCisgICAgTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCisgICAgTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGwKKyAgICBNb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvR2Fpbi5pZGwKKyAgICBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaWRsCisg
ICAgTW9kdWxlcy93ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmlkbAorICAgIE1vZHVsZXMvd2ViYXVk
aW8vQXVkaW9Ob2RlLmlkbAorICAgIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlk
bAorICAgIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5pZGwKKyAgICBNb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmlkbAorICAgIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9T
b3VyY2VOb2RlLmlkbAorICAgIE1vZHVsZXMvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5pZGwKKyAg
ICBNb2R1bGVzL3dlYmF1ZGlvL0RPTVdpbmRvd1dlYkF1ZGlvLmlkbAorICAgIE1vZHVsZXMvd2Vi
YXVkaW8vRGVsYXlOb2RlLmlkbAorICAgIE1vZHVsZXMvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVy
Tm9kZS5pZGwKKyAgICBNb2R1bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaWRsCisg
ICAgTW9kdWxlcy93ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuaWRsCisgICAgTW9kdWxlcy93
ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5pZGwKIAogICAgIHhtbC9ET01QYXJzZXIuaWRs
CiAgICAgeG1sL1hNTEh0dHBSZXF1ZXN0LmlkbApJbmRleDogU291cmNlL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNl
cy5tYWtlCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNl
cy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBAIFZQQVRIID0gXAogICAgICQo
V2ViQ29yZSkvTW9kdWxlcy9maWxlc3lzdGVtIFwKICAgICAkKFdlYkNvcmUpL01vZHVsZXMvZ2Vv
bG9jYXRpb24gXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIgXAorICAgICQoV2Vi
Q29yZSkvTW9kdWxlcy93ZWJhdWRpbyBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmRhdGFi
YXNlIFwKICAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2Vic29ja2V0cyBcCiAgICAgJChXZWJDb3Jl
KS9iaW5kaW5ncy9nZW5lcmljIFwKQEAgLTUwLDcgKzUxLDYgQEAgVlBBVEggPSBcCiAgICAgJChX
ZWJDb3JlKS9wbHVnaW5zIFwKICAgICAkKFdlYkNvcmUpL3N0b3JhZ2UgXAogICAgICQoV2ViQ29y
ZSkveG1sIFwKLSAgICAkKFdlYkNvcmUpL3dlYmF1ZGlvIFwKICAgICAkKFdlYkNvcmUpL3dvcmtl
cnMgXAogICAgICQoV2ViQ29yZSkvc3ZnIFwKICAgICAkKFdlYkNvcmUpL3Rlc3RpbmcgXApAQCAt
MTA0LDYgKzEwNCwzMyBAQCBCSU5ESU5HX0lETFMgPSBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaWRsIFwKICAgICAkKFdlYkNvcmUpL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbCBcCiAgICAgJChXZWJD
b3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9Xb3JrZXJDb250ZXh0SW5kZXhlZERhdGFiYXNlLmlkbCBc
CisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmlkbCBcCisgICAg
JChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyQ2FsbGJhY2suaWRsIFwKKyAg
ICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlkbCBc
CisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5pZGwg
XAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5p
ZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsIFwK
KyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaWRs
IFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9HYWluLmlkbCBcCisgICAg
JChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaWRsIFwKKyAgICAkKFdl
YkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5pZGwgXAorICAgICQoV2ViQ29y
ZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvUGFyYW0uaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1
ZGlvL0JpcXVhZEZpbHRlck5vZGUuaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVk
aW8vQ29udm9sdmVyTm9kZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9E
T01XaW5kb3dXZWJBdWRpby5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9E
ZWxheU5vZGUuaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vRHluYW1pY3ND
b21wcmVzc29yTm9kZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9IaWdo
UGFzczJGaWx0ZXJOb2RlLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0ph
dmFTY3JpcHRBdWRpb05vZGUuaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8v
TG93UGFzczJGaWx0ZXJOb2RlLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlv
L01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxl
cy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaWRsIFwKKyAgICAkKFdlYkNv
cmUpL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaWRsIFwKKyAgICAkKFdl
YkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuaWRsIFwKICAgICAkKFdlYkNv
cmUpL01vZHVsZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93U1FMRGF0YWJhc2UuaWRsIFwKICAgICAk
KFdlYkNvcmUpL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaWRsIFwKICAgICAkKFdlYkNv
cmUpL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDYWxsYmFjay5pZGwgXApAQCAtNTQ1LDMz
ICs1NzIsNiBAQCBCSU5ESU5HX0lETFMgPSBcCiAgICAgJChXZWJDb3JlKS9zdmcvU1ZHWm9vbUV2
ZW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS90ZXN0aW5nL0ludGVybmFscy5pZGwgXAogICAgICQo
V2ViQ29yZSkvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmlkbCBcCi0gICAgJChXZWJDb3JlKS93
ZWJhdWRpby9BdWRpb0J1ZmZlci5pZGwgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9C
dWZmZXJDYWxsYmFjay5pZGwgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9CdWZmZXJT
b3VyY2VOb2RlLmlkbCBcCi0gICAgJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJn
ZXIuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmlk
bCBcCi0gICAgJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsIFwKLSAgICAkKFdl
YkNvcmUpL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmlkbCBcCi0gICAgJChXZWJDb3Jl
KS93ZWJhdWRpby9BdWRpb0dhaW4uaWRsIFwKLSAgICAkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlv
R2Fpbk5vZGUuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaWRs
IFwKLSAgICAkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlvTm9kZS5pZGwgXAotICAgICQoV2ViQ29y
ZSkvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbCBcCi0gICAgJChXZWJDb3JlKS93ZWJhdWRp
by9BdWRpb1BhcmFtLmlkbCBcCi0gICAgJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb1Byb2Nlc3Np
bmdFdmVudC5pZGwgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmlk
bCBcCi0gICAgJChXZWJDb3JlKS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmlkbCBcCi0gICAg
JChXZWJDb3JlKS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmlkbCBcCi0gICAgJChXZWJDb3JlKS93
ZWJhdWRpby9ET01XaW5kb3dXZWJBdWRpby5pZGwgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8v
RGVsYXlOb2RlLmlkbCBcCi0gICAgJChXZWJDb3JlKS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNz
b3JOb2RlLmlkbCBcCi0gICAgJChXZWJDb3JlKS93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2Rl
LmlkbCBcCi0gICAgJChXZWJDb3JlKS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmlkbCBc
Ci0gICAgJChXZWJDb3JlKS93ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuaWRsIFwKLSAgICAk
KFdlYkNvcmUpL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5pZGwgXAotICAg
ICQoV2ViQ29yZSkvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmlkbCBcCi0g
ICAgJChXZWJDb3JlKS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5pZGwgXAotICAgICQo
V2ViQ29yZSkvd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuaWRsIFwKICAgICAkKFdlYkNvcmUpL3dv
cmtlcnMvQWJzdHJhY3RXb3JrZXIuaWRsIFwKICAgICAkKFdlYkNvcmUpL3dvcmtlcnMvRGVkaWNh
dGVkV29ya2VyQ29udGV4dC5pZGwgXAogICAgICQoV2ViQ29yZSkvd29ya2Vycy9TaGFyZWRXb3Jr
ZXIuaWRsIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkJKHJldmlzaW9uIDExMTIw
OCkKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaQkod29ya2luZyBjb3B5KQpA
QCAtMTI5LDYgKzEyOSwyNyBAQCBJRExfQklORElOR1MgKz0gXAogICAgICQkUFdEL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlJlcXVlc3QuaWRsIFwKICAgICAkJFBXRC9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbi5pZGwgXAogICAgICQkUFdEL01vZHVsZXMvaW5kZXhlZGRiL1dvcmtlckNv
bnRleHRJbmRleGVkRGF0YWJhc2UuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQnVmZmVyLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNv
dXJjZU5vZGUuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1l
cmdlci5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0
ZXIuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwgXAor
ICAgICQkUFdEL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaWRsIFwKKyAg
ICAkJFBXRC9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbi5pZGwgXAorICAgICQkUFdEL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9MaXN0ZW5lci5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9O
b2RlLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaWRs
IFwKKyAgICAkJFBXRC9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uaWRsIFwKKyAgICAkJFBX
RC9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmlkbCBcCisgICAgJCRQV0Qv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVz
L3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL3dlYmF1ZGlv
L0RlbGF5Tm9kZS5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvd2ViYXVkaW8vRE9NV2luZG93V2Vi
QXVkaW8uaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5v
ZGUuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUu
aWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5pZGwg
XAorICAgICQkUFdEL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaWRsIFwK
ICAgICAkJFBXRC9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RPTVdpbmRvd1NRTERhdGFiYXNlLmlkbCBc
CiAgICAgJCRQV0QvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5pZGwgXAogICAgICQkUFdE
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDYWxsYmFjay5pZGwgXApAQCAtNDExLDI3ICs0
MzIsNiBAQCBJRExfQklORElOR1MgKz0gXAogICAgICQkUFdEL3N0b3JhZ2UvU3RvcmFnZUluZm9V
c2FnZUNhbGxiYWNrLmlkbCBcCiAgICAgJCRQV0QvdGVzdGluZy9JbnRlcm5hbHMuaWRsIFwKICAg
ICAkJFBXRC90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaWRsIFwKLSAgICAkJFBXRC93ZWJhdWRp
by9BdWRpb0J1ZmZlci5pZGwgXAotICAgICQkUFdEL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNl
Tm9kZS5pZGwgXAotICAgICQkUFdEL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5pZGwgXAot
ICAgICQkUFdEL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmlkbCBcCi0gICAgJCRQV0Qv
d2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbCBcCi0gICAgJCRQV0Qvd2ViYXVkaW8vQXVkaW9EZXN0
aW5hdGlvbk5vZGUuaWRsIFwKLSAgICAkJFBXRC93ZWJhdWRpby9BdWRpb0dhaW4uaWRsIFwKLSAg
ICAkJFBXRC93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmlkbCBcCi0gICAgJCRQV0Qvd2ViYXVkaW8v
QXVkaW9MaXN0ZW5lci5pZGwgXAotICAgICQkUFdEL3dlYmF1ZGlvL0F1ZGlvTm9kZS5pZGwgXAot
ICAgICQkUFdEL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwgXAotICAgICQkUFdEL3dlYmF1
ZGlvL0F1ZGlvUGFyYW0uaWRsIFwKLSAgICAkJFBXRC93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdF
dmVudC5pZGwgXAotICAgICQkUFdEL3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5pZGwgXAotICAg
ICQkUFdEL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsIFwKLSAgICAkJFBXRC93ZWJhdWRpby9E
ZWxheU5vZGUuaWRsIFwKLSAgICAkJFBXRC93ZWJhdWRpby9ET01XaW5kb3dXZWJBdWRpby5pZGwg
XAotICAgICQkUFdEL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuaWRsIFwKLSAgICAkJFBX
RC93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmlkbCBcCi0gICAgJCRQV0Qvd2ViYXVkaW8v
TG93UGFzczJGaWx0ZXJOb2RlLmlkbCBcCi0gICAgJCRQV0Qvd2ViYXVkaW8vUmVhbHRpbWVBbmFs
eXNlck5vZGUuaWRsIFwKICAgICAkJFBXRC93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmlkbCBcCiAg
ICAgJCRQV0Qvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmlkbCBcCiAgICAgJCRQV0Qv
d29ya2Vycy9TaGFyZWRXb3JrZXIuaWRsIFwKQEAgLTY5OSw2ICs2OTksNyBAQCBnZW5lcmF0ZUJp
bmRpbmdzLmNvbW1hbmRzID0gcGVybCAtSSQkUFdECiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLS1pbmNsdWRlICQkUFdEL01vZHVsZXMvZmlsZXN5c3RlbSBcCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLS1pbmNsdWRlICQkUFdEL01vZHVsZXMvZ2VvbG9jYXRpb24gXAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAkJFBXRC9Nb2R1bGVzL2luZGV4ZWRkYiBc
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1pbmNsdWRlICQkUFdEL01vZHVsZXMvd2Vi
YXVkaW8gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAkJFBXRC9Nb2R1
bGVzL3dlYmRhdGFiYXNlIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWluY2x1ZGUg
JCRQV0QvTW9kdWxlcy93ZWJzb2NrZXRzIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt
LWluY2x1ZGUgJCRQV0QvZG9tIFwKQEAgLTcwOSw3ICs3MTAsNiBAQCBnZW5lcmF0ZUJpbmRpbmdz
LmNvbW1hbmRzID0gcGVybCAtSSQkUFdECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1p
bmNsdWRlICQkUFdEL3N0b3JhZ2UgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5j
bHVkZSAkJFBXRC9jc3MgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAk
JFBXRC90ZXN0aW5nIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWluY2x1ZGUgJCRQ
V0Qvd2ViYXVkaW8gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAkJFBX
RC93b3JrZXJzIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLW91dHB1dERpciAke1FN
QUtFX0ZVTkNfRklMRV9PVVRfUEFUSH0gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0t
c3VwcGxlbWVudGFsRGVwZW5kZW5jeUZpbGUgJHtRTUFLRV9GVU5DX0ZJTEVfT1VUX1BBVEh9LyQk
U1VQUExFTUVOVEFMX0RFUEVOREVOQ1lfRklMRSBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQko
cmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtp
bmcgY29weSkKQEAgLTE1LDYgKzE1LDcgQEAgd2ViY29yZV9jcHBmbGFncyArPSBcCiAJLUkkKHNy
Y2RpcikvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbiBcCiAJLUkkKHNyY2Rpcikv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0gXAorCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cyBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eSBcCkBAIC04
Nyw3ICs4OCw2IEBAIHdlYmNvcmVfY3BwZmxhZ3MgKz0gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzIFwKLQktSSQoc3Jj
ZGlyKS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpbyBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNv
cmUvd2Vic29ja2V0cyBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvd29ya2VycyBcCiAJ
LUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUveG1sIFwKQEAgLTc4Myw2ICs3ODMsNyBAQCBJRExf
UEFUSCA6PSBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL2dlb2xvY2F0aW9uIFwKICAgICAkKFdl
YkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiIFwKICAgICAkKFdlYkNvcmUpL01vZHVsZXMvbWVkaWFz
dHJlYW0gXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpbyBcCiAgICAgJChXZWJDb3Jl
KS9Nb2R1bGVzL3dlYmRhdGFiYXNlIFwKICAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2Vic29ja2V0
cyBcCiAgICAgJChXZWJDb3JlKS9iaW5kaW5ncy9qcyBcCkBAIC04MDIsNyArODAzLDYgQEAgSURM
X1BBVEggOj0gXAogICAgICQoV2ViQ29yZSkvc3RvcmFnZSBcCiAgICAgJChXZWJDb3JlKS9zdmcg
XAogICAgICQoV2ViQ29yZSkvdGVzdGluZyBcCi0gICAgJChXZWJDb3JlKS93ZWJhdWRpbyBcCiAg
ICAgJChXZWJDb3JlKS93ZWJzb2NrZXRzIFwKICAgICAkKFdlYkNvcmUpL3dvcmtlcnMgXAogICAg
ICQoV2ViQ29yZSkveG1sCkBAIC05MjcsNiArOTI3LDcgQEAgRVhUUkFfRElTVCArPSBcCiAJJChz
aGVsbCBscyAkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi8qLmlk
bCkgXAogCSQoc2hlbGwgbHMgJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiLyouaWRsKSBcCiAJJChzaGVsbCBscyAkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS8qLmlkbCkgXAorCSQoc2hlbGwgbHMgJChzcmNkaXIpL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vKi5pZGwpIFwKIAkkKHNoZWxsIGxzICQoc3JjZGlyKS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlLyouaWRsKSBcCiAJJChzaGVsbCBscyAkKHNy
Y2RpcikvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzLyouaWRsKSBcCiAJJChzaGVs
bCBscyAkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvY3NzLyouaWRsKSBcCkBAIC05NDQsNyArOTQ1
LDYgQEAgRVhUUkFfRElTVCArPSBcCiAJJChzaGVsbCBscyAkKHNyY2RpcikvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS8qLmlkbCkgXAogCSQoc2hlbGwgbHMgJChzcmNkaXIpL1NvdXJjZS9XZWJDb3Jl
L3N2Zy8qLmlkbCkgXAogCSQoc2hlbGwgbHMgJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvKi5pZGwpIFwKLQkkKHNoZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by8qLmlkbCkgXAogCSQoc2hlbGwgbHMgJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
Ki5pZGwpIFwKIAkkKHNoZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS94bWwvKi5pZGwp
IFwKIAlTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sIFwKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTExMjA4KQorKysgU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtNjc3LDYg
KzY3NywxMSBAQCBkb21fYmluZGluZ19pZGxzICs9IFwKIAkkKFdlYkNvcmUpL01vZHVsZXMvbWVk
aWFzdHJlYW0vTmF2aWdhdG9yVXNlck1lZGlhU3VjY2Vzc0NhbGxiYWNrLmlkbCBcCiAJJChXZWJD
b3JlKS9Nb2R1bGVzL21lZGlhc3RyZWFtL1Nlc3Npb25EZXNjcmlwdGlvbi5pZGwgXAogCSQoV2Vi
Q29yZSkvTW9kdWxlcy9tZWRpYXN0cmVhbS9TaWduYWxpbmdDYWxsYmFjay5pZGwgXAorCSQoV2Vi
Q29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsIFwKKwkkKFdlYkNvcmUpL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVz
L3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVs
ZXMvd2ViYXVkaW8vRE9NV2luZG93V2ViQXVkaW8uaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMv
d2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuaWRsIFwKIAkkKFdlYkNvcmUpL2Nzcy9DU1NDaGFyc2V0
UnVsZS5pZGwgXAogCSQoV2ViQ29yZSkvY3NzL0NTU0ZvbnRGYWNlUnVsZS5pZGwgXAogCSQoV2Vi
Q29yZSkvY3NzL0NTU0ltcG9ydFJ1bGUuaWRsIFwKQEAgLTkzNiwxMSArOTQxLDYgQEAgZG9tX2Jp
bmRpbmdfaWRscyArPSBcCiAJJChXZWJDb3JlKS9zdG9yYWdlL1N0b3JhZ2VFdmVudC5pZGwgXAog
CSQoV2ViQ29yZSkvdGVzdGluZy9JbnRlcm5hbHMuaWRsIFwKIAkkKFdlYkNvcmUpL3Rlc3Rpbmcv
SW50ZXJuYWxTZXR0aW5ncy5pZGwgXAotCSQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9Db250ZXh0
LmlkbCBcCi0JJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaWRsIFwKLQkkKFdl
YkNvcmUpL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaWRsIFwKLQkkKFdlYkNvcmUp
L3dlYmF1ZGlvL0RPTVdpbmRvd1dlYkF1ZGlvLmlkbCBcCi0JJChXZWJDb3JlKS93ZWJhdWRpby9X
YXZlU2hhcGVyTm9kZS5pZGwgXAogCSQoV2ViQ29yZSkvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5p
ZGwgXAogCSQoV2ViQ29yZSkvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmlkbCBcCiAJ
JChXZWJDb3JlKS93b3JrZXJzL1NoYXJlZFdvcmtlci5pZGwgXApAQCAtNTM3NSw4OCArNTM3NSw4
OCBAQCBlbmRpZiAjIEVORCBFTkFCTEVfU1ZHCiAKIGlmIEVOQUJMRV9XRUJfQVVESU8KIHdlYmNv
cmVfc291cmNlcyArPSBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1
ZGlvRGVjb2Rlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNB
dWRpb0RlY29kZXIuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jh
c2ljUHJvY2Vzc29yTm9kZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0J1ZmZlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9CdWZmZXIuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1
ZmZlckNhbGxiYWNrLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9C
dWZmZXJTb3VyY2VOb2RlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0J1ZmZlclNvdXJjZU5vZGUuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb0NoYW5uZWxNZXJnZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9HYWluLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9HYWluTm9kZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9H
YWluTm9kZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTGlzdGVu
ZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIu
aCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuY3BwIFwKKwlT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcCBcCisJU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb1BhcmFtLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb1BhcmFtLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Q
YXJhbVRpbWVsaW5lLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b1BhcmFtVGltZWxpbmUuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b1Byb2Nlc3NpbmdFdmVudC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9Qcm9jZXNzaW5nRXZlbnQuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb1NvdXJjZU5vZGUuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9C
aXF1YWREU1BLZXJuZWwuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0Jp
cXVhZERTUEtlcm5lbC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0JpcXVh
ZEZpbHRlck5vZGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0JpcXVh
ZEZpbHRlck5vZGUuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRQ
cm9jZXNzb3IuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0JpcXVhZFBy
b2Nlc3Nvci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5v
ZGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUu
aCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5h
dGlvbk5vZGUuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWZhdWx0QXVk
aW9EZXN0aW5hdGlvbk5vZGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0RlbGF5RFNQS2VybmVsLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9E
ZWxheURTUEtlcm5lbC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5
Tm9kZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVsYXlOb2RlLmgg
XAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuY3BwIFwK
KwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5UHJvY2Vzc29yLmggXAorCVNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHAg
XAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9k
ZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5v
ZGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRl
ck5vZGUuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9KYXZhU2NyaXB0QXVk
aW9Ob2RlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9KYXZhU2NyaXB0
QXVkaW9Ob2RlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTG93UGFzczJG
aWx0ZXJOb2RlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Mb3dQYXNz
MkZpbHRlck5vZGUuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVs
ZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgXAor
CVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2
ZW50LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29t
cGxldGlvbkV2ZW50LmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFs
dGltZUFuYWx5c2VyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFs
dGltZUFuYWx5c2VyLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRp
bWVBbmFseXNlck5vZGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1Jl
YWx0aW1lQW5hbHlzZXJOb2RlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
V2F2ZVNoYXBlck5vZGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dh
dmVTaGFwZXJQcm9jZXNzb3IuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9X
YXZlU2hhcGVyRFNQS2VybmVsLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9XYXZlU2hhcGVyRFNQS2VybmVsLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vV2F2ZVNoYXBlck5vZGUuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNB
dWRpb0J1ZmZlclNvdXJjZU5vZGVDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0F1ZGlvQ29udGV4dEN1c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ29udm9sdmVyTm9kZUN1c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSmF2YVNjcmlwdEF1ZGlvTm9kZUN1c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV2F2ZVNoYXBlck5vZGVDdXN0b20uY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0FzeW5jQXVkaW9EZWNvZGVyLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQmFz
aWNQcm9jZXNzb3JOb2RlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNp
Y1Byb2Nlc3Nvck5vZGUuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXIu
Y3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlci5oIFwKLQlTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlckNhbGxiYWNrLmggXAotCVNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb0NoYW5uZWxNZXJnZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b0NoYW5uZWxNZXJnZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVs
U3BsaXR0ZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxp
dHRlci5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwIFwKLQlT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuaCBcCi0JU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9B
dWRpb0dhaW4uaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaCBcCi0JU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvTGlzdGVuZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2Rl
LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlLmggXAotCVNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9Ob2RlSW5wdXQuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9O
b2RlT3V0cHV0LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0
LmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oIFwKLQlTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb1BhcmFtLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9QYXJhbS5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUu
Y3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuaCBcCi0J
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuY3BwIFwKLQlTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQmlxdWFkRFNQS2VybmVsLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFk
RFNQS2VybmVsLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUu
Y3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmggXAotCVNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5jcHAgXAotCVNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9Db252b2x2ZXJOb2RlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVy
Tm9kZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlv
bk5vZGUuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRp
b25Ob2RlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheURTUEtlcm5lbC5oIFwKLQlTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9EZWxheU5vZGUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9EZWxheU5vZGUuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3Iu
Y3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheVByb2Nlc3Nvci5oIFwKLQlTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcCBcCi0JU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9KYXZhU2NyaXB0QXVkaW9Ob2RlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSmF2
YVNjcmlwdEF1ZGlvTm9kZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Mb3dQYXNzMkZp
bHRlck5vZGUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5v
ZGUuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VO
b2RlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3Vy
Y2VOb2RlLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0
aW9uTm9kZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5h
dGlvbk5vZGUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21w
bGV0aW9uRXZlbnQuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29t
cGxldGlvbkV2ZW50LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFs
eXNlci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIuaCBc
Ci0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuY3BwIFwKLQlT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5oIFwKLQlTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
V2F2ZVNoYXBlckRTUEtlcm5lbC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVT
aGFwZXJEU1BLZXJuZWwuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlclBy
b2Nlc3Nvci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmgg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvQXJyYXkuaCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5oIFwKQEAgLTU1NzksMjggKzU1NzksMjggQEAgd2ViY29y
ZV9idWlsdF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTUmVhbHRpbWVB
bmFseXNlck5vZGUuaAogCiBkb21fYmluZGluZ19pZGxzICs9IFwKLQkkKFdlYkNvcmUpL3dlYmF1
ZGlvL0F1ZGlvQnVmZmVyLmlkbCBcCi0JJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb0J1ZmZlckNh
bGxiYWNrLmlkbCBcCi0JJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUu
aWRsIFwKLQkkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5pZGwgXAotCSQo
V2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuaWRsIFwKLQkkKFdlYkNvcmUp
L3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmlkbCBcCi0JJChXZWJDb3JlKS93ZWJhdWRp
by9BdWRpb0dhaW4uaWRsIFwKLQkkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaWRs
IFwKLQkkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaWRsIFwKLQkkKFdlYkNvcmUp
L3dlYmF1ZGlvL0F1ZGlvTm9kZS5pZGwgXAotCSQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9QYXJh
bS5pZGwgXAotCSQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaWRsIFwK
LQkkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5pZGwgXAotCSQoV2ViQ29yZSkv
d2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5pZGwgXAotCSQoV2ViQ29yZSkvd2ViYXVkaW8vQ29u
dm9sdmVyTm9kZS5pZGwgXAotCSQoV2ViQ29yZSkvd2ViYXVkaW8vRGVsYXlOb2RlLmlkbCBcCi0J
JChXZWJDb3JlKS93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmlkbCBcCi0JJChXZWJDb3Jl
KS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmlkbCBcCi0JJChXZWJDb3JlKS93ZWJhdWRp
by9Mb3dQYXNzMkZpbHRlck5vZGUuaWRsIFwKLQkkKFdlYkNvcmUpL3dlYmF1ZGlvL01lZGlhRWxl
bWVudEF1ZGlvU291cmNlTm9kZS5pZGwgXAotCSQoV2ViQ29yZSkvd2ViYXVkaW8vT2ZmbGluZUF1
ZGlvQ29tcGxldGlvbkV2ZW50LmlkbCBcCi0JJChXZWJDb3JlKS93ZWJhdWRpby9SZWFsdGltZUFu
YWx5c2VyTm9kZS5pZGwKKwkkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIu
aWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFjay5p
ZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUu
aWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmlk
bCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmlk
bCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmlk
bCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbi5pZGwgXAorCSQoV2Vi
Q29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmlkbCBcCisJJChXZWJDb3JlKS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Ob2RlLmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvUGFyYW0uaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Qcm9jZXNz
aW5nRXZlbnQuaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Tb3VyY2VO
b2RlLmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUu
aWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5pZGwgXAor
CSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9EZWxheU5vZGUuaWRsIFwKKwkkKFdlYkNvcmUp
L01vZHVsZXMvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5pZGwgXAorCSQoV2ViQ29yZSkv
TW9kdWxlcy93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmlkbCBcCisJJChXZWJDb3JlKS9N
b2R1bGVzL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5pZGwgXAorCSQoV2ViQ29yZSkvTW9k
dWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaWRsIFwKKwkkKFdlYkNv
cmUpL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmlkbCBcCisJ
JChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmlkbAogZW5k
aWYKIAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTgxNCw2ICs4MTQsMzMgQEAK
ICAgICAgICAgICAgICdNb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkV2ZW50LmlkbCcs
CiAgICAgICAgICAgICAnTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaWRs
JywKICAgICAgICAgICAgICdNb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvblJlc3VsdExp
c3QuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmlkbCcs
CisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlckNhbGxiYWNrLmlkbCcs
CisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaWRs
JywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5pZGwn
LAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuaWRs
JywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwnLAorICAg
ICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaWRsJywKKyAg
ICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbi5pZGwnLAorICAgICAgICAgICAg
J01vZHVsZXMvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5pZGwnLAorICAgICAgICAgICAgJ01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Ob2RlLmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRp
b1Bhbm5lck5vZGUuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFy
YW0uaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2
ZW50LmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUu
aWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaWRs
JywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsJywKKyAg
ICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0RlbGF5Tm9kZS5pZGwnLAorICAgICAgICAgICAg
J01vZHVsZXMvd2ViYXVkaW8vRE9NV2luZG93V2ViQXVkaW8uaWRsJywKKyAgICAgICAgICAgICdN
b2R1bGVzL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaWRsJywKKyAgICAgICAgICAg
ICdNb2R1bGVzL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuaWRsJywKKyAgICAgICAgICAg
ICdNb2R1bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaWRsJywKKyAgICAgICAgICAg
ICdNb2R1bGVzL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5pZGwnLAorICAgICAgICAgICAg
J01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmlkbCcsCisgICAg
ICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaWRs
JywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmlk
bCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5pZGwnLAog
ICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93U1FMRGF0YWJhc2UuaWRs
JywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmlkbCcsCiAgICAg
ICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNhbGxiYWNrLmlkbCcsCkBAIC0x
MTA3LDMzICsxMTM0LDYgQEAKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VJbmZvRXJyb3JD
YWxsYmFjay5pZGwnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZUluZm9RdW90YUNhbGxi
YWNrLmlkbCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdlSW5mb1VzYWdlQ2FsbGJhY2su
aWRsJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0J1ZmZlci5pZGwnLAotICAgICAgICAg
ICAgJ3dlYmF1ZGlvL0F1ZGlvQnVmZmVyQ2FsbGJhY2suaWRsJywKLSAgICAgICAgICAgICd3ZWJh
dWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaWRsJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9B
dWRpb0NoYW5uZWxNZXJnZXIuaWRsJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0NoYW5u
ZWxTcGxpdHRlci5pZGwnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwn
LAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmlkbCcsCi0gICAg
ICAgICAgICAnd2ViYXVkaW8vQXVkaW9HYWluLmlkbCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8v
QXVkaW9HYWluTm9kZS5pZGwnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIu
aWRsJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb05vZGUuaWRsJywKLSAgICAgICAgICAg
ICd3ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaWRsJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9B
dWRpb1BhcmFtLmlkbCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZl
bnQuaWRsJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaWRsJywKLSAg
ICAgICAgICAgICd3ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmlkbCcsCi0gICAgICAgICAgICAn
d2ViYXVkaW8vQ29udm9sdmVyTm9kZS5pZGwnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0RlbGF5
Tm9kZS5pZGwnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0RPTVdpbmRvd1dlYkF1ZGlvLmlkbCcs
Ci0gICAgICAgICAgICAnd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5pZGwnLAotICAg
ICAgICAgICAgJ3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuaWRsJywKLSAgICAgICAgICAg
ICd3ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmlkbCcsCi0gICAgICAgICAgICAnd2ViYXVk
aW8vTG93UGFzczJGaWx0ZXJOb2RlLmlkbCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vTWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlLmlkbCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vT2ZmbGlu
ZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmlkbCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vUmVhbHRp
bWVBbmFseXNlck5vZGUuaWRsJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9XYXZlU2hhcGVyTm9k
ZS5pZGwnLAogICAgICAgICAgICAgJ3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuaWRsJywKICAgICAg
ICAgICAgICd3b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQuaWRsJywKICAgICAgICAgICAg
ICd3b3JrZXJzL1NoYXJlZFdvcmtlci5pZGwnLApAQCAtMTUwOCw2ICsxNTA4LDgzIEBACiAgICAg
ICAgICAgICAnTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaCcsCiAgICAg
ICAgICAgICAnTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0LmNwcCcs
CiAgICAgICAgICAgICAnTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0
LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5v
ZGUuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNz
b3JOb2RlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3Bw
JywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgnLAorICAgICAg
ICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFjay5oJywKKyAgICAgICAg
ICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5jcHAnLAorICAgICAg
ICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmgnLAorICAgICAg
ICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmNwcCcsCisgICAgICAg
ICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuaCcsCisgICAgICAgICAg
ICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5jcHAnLAorICAgICAgICAg
ICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuaCcsCisgICAgICAgICAg
ICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwJywKKyAgICAgICAgICAgICdNb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvR2Fpbi5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fp
bk5vZGUuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUu
aCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmNwcCcsCisg
ICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmgnLAorICAgICAgICAg
ICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxl
cy93ZWJhdWRpby9BdWRpb05vZGUuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9B
dWRpb05vZGVJbnB1dC5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9O
b2RlSW5wdXQuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVPdXRw
dXQuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5o
JywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5jcHAnLAor
ICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmgnLAorICAgICAg
ICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5jcHAnLAorICAgICAgICAgICAgJ01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9QYXJhbVRpbWVsaW5lLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9Qcm9jZXNzaW5nRXZlbnQuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9Tb3VyY2VOb2RlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXN5bmNB
dWRpb0RlY29kZXIuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVk
aW9EZWNvZGVyLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkRFNQS2Vy
bmVsLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwu
aCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmNwcCcs
CisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmgnLAorICAg
ICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmNwcCcsCisgICAgICAg
ICAgICAnTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuaCcsCisgICAgICAgICAgICAn
TW9kdWxlcy93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxl
cy93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVk
aW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxl
cy93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaCcsCisgICAgICAgICAgICAn
TW9kdWxlcy93ZWJhdWRpby9EZWxheURTUEtlcm5lbC5jcHAnLAorICAgICAgICAgICAgJ01vZHVs
ZXMvd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJh
dWRpby9EZWxheU5vZGUuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0RlbGF5
Tm9kZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0RlbGF5UHJvY2Vzc29yLmNw
cCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9EZWxheVByb2Nlc3Nvci5oJywKKyAg
ICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwJywK
KyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaCcs
CisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmNwcCcs
CisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmgnLAor
ICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5jcHAnLAor
ICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5oJywKKyAg
ICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5jcHAnLAorICAg
ICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmgnLAorICAgICAg
ICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcCcs
CisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGUuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0
aW9uRXZlbnQuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRp
b0NvbXBsZXRpb25FdmVudC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL09mZmxp
bmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVk
aW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMv
d2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2Vi
YXVkaW8vUmVhbHRpbWVBbmFseXNlci5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlv
L1JlYWx0aW1lQW5hbHlzZXJOb2RlLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRp
by9SZWFsdGltZUFuYWx5c2VyTm9kZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlv
L1dhdmVTaGFwZXJEU1BLZXJuZWwuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlv
L1dhdmVTaGFwZXJEU1BLZXJuZWwuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9X
YXZlU2hhcGVyTm9kZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNo
YXBlck5vZGUuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyUHJv
Y2Vzc29yLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyUHJv
Y2Vzc29yLmgnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRh
YmFzZS5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvQ2hhbmdlVmVyc2lv
bldyYXBwZXIuY3BwJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL0NoYW5nZVZl
cnNpb25XcmFwcGVyLmgnLApAQCAtNDg0Niw4MyArNDkyMyw2IEBACiAgICAgICAgICAgICAnc3Rv
cmFnZS93aW5jZS9EYXRhYmFzZVRocmVhZFdpbkNFLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2Uv
d2luY2UvU3RvcmFnZVRocmVhZFdpbkNFLmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS93aW5j
ZS9TdG9yYWdlVGhyZWFkV2luQ0UuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9CYXNp
Y1Byb2Nlc3Nvck5vZGUuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0Jhc2ljUHJv
Y2Vzc29yTm9kZS5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAnLAot
ICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgnLAotICAgICAgICAgICAgJ3dlYmF1
ZGlvL0F1ZGlvQnVmZmVyQ2FsbGJhY2suaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9C
dWZmZXJTb3VyY2VOb2RlLmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9CdWZmZXJT
b3VyY2VOb2RlLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5j
cHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5oJywKLSAgICAg
ICAgICAgICd3ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5jcHAnLAotICAgICAgICAgICAg
J3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlv
L0F1ZGlvQ29udGV4dC5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5o
JywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAnLAotICAg
ICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmgnLAotICAgICAgICAgICAg
J3dlYmF1ZGlvL0F1ZGlvR2Fpbi5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0dhaW5O
b2RlLmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5oJywKLSAgICAg
ICAgICAgICd3ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVk
aW8vQXVkaW9MaXN0ZW5lci5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb05vZGUuY3Bw
JywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb05vZGUuaCcsCi0gICAgICAgICAgICAnd2Vi
YXVkaW8vQXVkaW9Ob2RlSW5wdXQuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb05v
ZGVJbnB1dC5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuY3BwJywK
LSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuaCcsCi0gICAgICAgICAgICAn
d2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVk
aW9QYW5uZXJOb2RlLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvUGFyYW0uY3BwJywK
LSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb1BhcmFtLmgnLAotICAgICAgICAgICAgJ3dlYmF1
ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlv
UGFyYW1UaW1lbGluZS5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdF
dmVudC5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50Lmgn
LAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5oJywKLSAgICAgICAgICAg
ICd3ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlv
L0FzeW5jQXVkaW9EZWNvZGVyLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0JpcXVhZERTUEtl
cm5lbC5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5oJywKLSAg
ICAgICAgICAgICd3ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmNwcCcsCi0gICAgICAgICAgICAn
d2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9CaXF1
YWRQcm9jZXNzb3IuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3Iu
aCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAnLAotICAgICAgICAg
ICAgJ3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vRGVm
YXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vRGVm
YXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0RlbGF5
RFNQS2VybmVsLmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuaCcs
Ci0gICAgICAgICAgICAnd2ViYXVkaW8vRGVsYXlOb2RlLmNwcCcsCi0gICAgICAgICAgICAnd2Vi
YXVkaW8vRGVsYXlOb2RlLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0RlbGF5UHJvY2Vzc29y
LmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuaCcsCi0gICAgICAg
ICAgICAnd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHAnLAotICAgICAgICAgICAg
J3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaCcsCi0gICAgICAgICAgICAnd2ViYXVk
aW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0hpZ2hQ
YXNzMkZpbHRlck5vZGUuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlv
Tm9kZS5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaCcs
Ci0gICAgICAgICAgICAnd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmNwcCcsCi0gICAgICAg
ICAgICAnd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmgnLAotICAgICAgICAgICAgJ3dlYmF1
ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1
ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oJywKLSAgICAgICAgICAgICd3ZWJhdWRp
by9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRp
by9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8v
T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8v
T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL1Jl
YWx0aW1lQW5hbHlzZXIuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9SZWFsdGltZUFuYWx5
c2VyLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmNwcCcs
Ci0gICAgICAgICAgICAnd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaCcsCi0gICAgICAg
ICAgICAnd2ViYXVkaW8vV2F2ZVNoYXBlckRTUEtlcm5lbC5jcHAnLAotICAgICAgICAgICAgJ3dl
YmF1ZGlvL1dhdmVTaGFwZXJEU1BLZXJuZWwuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vV2F2
ZVNoYXBlck5vZGUuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5o
JywKLSAgICAgICAgICAgICd3ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmNwcCcsCi0gICAg
ICAgICAgICAnd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5oJywKICAgICAgICAgICAgICd3
b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNwcCcsCiAgICAgICAgICAgICAnd29ya2Vycy9BYnN0cmFj
dFdvcmtlci5oJywKICAgICAgICAgICAgICd3b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQu
Y3BwJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnByaQkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQCBJTkNMVURF
UEFUSCArPSBcCiAgICAgJCRTT1VSQ0VfRElSL01vZHVsZXMvZmlsZXN5c3RlbSBcCiAgICAgJCRT
T1VSQ0VfRElSL01vZHVsZXMvZ2VvbG9jYXRpb24gXAogICAgICQkU09VUkNFX0RJUi9Nb2R1bGVz
L2luZGV4ZWRkYiBcCisgICAgJCRTT1VSQ0VfRElSL01vZHVsZXMvd2ViYXVkaW8gXAogICAgICQk
U09VUkNFX0RJUi9Nb2R1bGVzL3dlYmRhdGFiYXNlIFwKICAgICAkJFNPVVJDRV9ESVIvTW9kdWxl
cy93ZWJzb2NrZXRzIFwKICAgICAkJFNPVVJDRV9ESVIvYWNjZXNzaWJpbGl0eSBcCkBAIC04Miw3
ICs4Myw2IEBAIElOQ0xVREVQQVRIICs9IFwKICAgICAkJFNPVVJDRV9ESVIvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMgXAogICAgICQkU09VUkNFX0RJUi9zdmcvcHJvcGVydGllcyBcCiAgICAgJCRTT1VS
Q0VfRElSL3Rlc3RpbmcgXAotICAgICQkU09VUkNFX0RJUi93ZWJhdWRpbyBcCiAgICAgJCRTT1VS
Q0VfRElSL3dlYnNvY2tldHMgXAogICAgICQkU09VUkNFX0RJUi93b3JrZXJzIFwKICAgICAkJFNP
VVJDRV9ESVIveG1sIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUu
Z3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lw
CShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3Jl
Lmd5cAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQAogICAgICAgJy4uL01vZHVsZXMv
aW5kZXhlZGRiJywKICAgICAgICcuLi9Nb2R1bGVzL21lZGlhc3RyZWFtJywKICAgICAgICcuLi9N
b2R1bGVzL3NwZWVjaCcsCisgICAgICAnLi4vTW9kdWxlcy93ZWJhdWRpbycsCiAgICAgICAnLi4v
TW9kdWxlcy93ZWJkYXRhYmFzZScsCiAgICAgICAnLi4vTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJv
bWl1bScsCiAgICAgICAnLi4vTW9kdWxlcy93ZWJzb2NrZXRzJywKQEAgLTE0MCw3ICsxNDEsNiBA
QAogICAgICAgJy4uL3N2Zy9ncmFwaGljcy9maWx0ZXJzJywKICAgICAgICcuLi9zdmcvcHJvcGVy
dGllcycsCiAgICAgICAnLi4vLi4vVGhpcmRQYXJ0eS9nbHUnLAotICAgICAgJy4uL3dlYmF1ZGlv
JywKICAgICAgICcuLi93b3JrZXJzJywKICAgICAgICcuLi94bWwnLAogICAgICAgJy4uL3htbC9w
YXJzZXInLApAQCAtOTc5LDYgKzk3OSw3IEBACiAgICAgICAgICAgICAgICctLWluY2x1ZGUnLCAn
Li4vTW9kdWxlcy9maWxlc3lzdGVtJywKICAgICAgICAgICAgICAgJy0taW5jbHVkZScsICcuLi9N
b2R1bGVzL2luZGV4ZWRkYicsCiAgICAgICAgICAgICAgICctLWluY2x1ZGUnLCAnLi4vTW9kdWxl
cy9tZWRpYXN0cmVhbScsCisgICAgICAgICAgICAgICctLWluY2x1ZGUnLCAnLi4vTW9kdWxlcy93
ZWJhdWRpbycsCiAgICAgICAgICAgICAgICctLWluY2x1ZGUnLCAnLi4vTW9kdWxlcy93ZWJkYXRh
YmFzZScsCiAgICAgICAgICAgICAgICctLWluY2x1ZGUnLCAnLi4vY3NzJywKICAgICAgICAgICAg
ICAgJy0taW5jbHVkZScsICcuLi9kb20nLApAQCAtOTkwLDcgKzk5MSw2IEBACiAgICAgICAgICAg
ICAgICctLWluY2x1ZGUnLCAnLi4vc3RvcmFnZScsCiAgICAgICAgICAgICAgICctLWluY2x1ZGUn
LCAnLi4vc3ZnJywKICAgICAgICAgICAgICAgJy0taW5jbHVkZScsICcuLi90ZXN0aW5nJywKLSAg
ICAgICAgICAgICAgJy0taW5jbHVkZScsICcuLi93ZWJhdWRpbycsCiAgICAgICAgICAgICAgICct
LWluY2x1ZGUnLCAnLi4vd29ya2VycycsCiAgICAgICAgICAgICAgICctLWluY2x1ZGUnLCAnLi4v
eG1sJywKICAgICAgICAgICAgIF0sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Bc3lu
Y0F1ZGlvRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXN5bmNBdWRpb0RlY29kZXIuY3BwCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUo
V0VCX0FVRElPKQotCi0jaW5jbHVkZSAiQXN5bmNBdWRpb0RlY29kZXIuaCIKLQotI2luY2x1ZGUg
IkF1ZGlvQnVmZmVyLmgiCi0jaW5jbHVkZSAiQXVkaW9CdWZmZXJDYWxsYmFjay5oIgotI2luY2x1
ZGUgPHd0Zi9BcnJheUJ1ZmZlci5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5j
bHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotQXN5bmNBdWRpb0RlY29kZXI6OkFzeW5jQXVkaW9EZWNvZGVyKCkK
LXsKLSAgICAvLyBTdGFydCB3b3JrZXIgdGhyZWFkLgotICAgIE11dGV4TG9ja2VyIGxvY2sobV90
aHJlYWRDcmVhdGlvbk11dGV4KTsKLSAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKEFzeW5j
QXVkaW9EZWNvZGVyOjp0aHJlYWRFbnRyeSwgdGhpcywgIkF1ZGlvIERlY29kZXIiKTsKLX0KLQot
QXN5bmNBdWRpb0RlY29kZXI6On5Bc3luY0F1ZGlvRGVjb2RlcigpCi17Ci0gICAgbV9xdWV1ZS5r
aWxsKCk7Ci0gICAgCi0gICAgLy8gU3RvcCB0aHJlYWQuCi0gICAgd2FpdEZvclRocmVhZENvbXBs
ZXRpb24obV90aHJlYWRJRCk7Ci0gICAgbV90aHJlYWRJRCA9IDA7Ci19Ci0KLXZvaWQgQXN5bmNB
dWRpb0RlY29kZXI6OmRlY29kZUFzeW5jKEFycmF5QnVmZmVyKiBhdWRpb0RhdGEsIGZsb2F0IHNh
bXBsZVJhdGUsIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNr
LCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCi17Ci0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoYXVkaW9EYXRhKTsKLSAgICBpZiAo
IWF1ZGlvRGF0YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgT3duUHRyPERlY29kaW5nVGFzaz4g
ZGVjb2RpbmdUYXNrID0gRGVjb2RpbmdUYXNrOjpjcmVhdGUoYXVkaW9EYXRhLCBzYW1wbGVSYXRl
LCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spOwotICAgIG1fcXVldWUuYXBwZW5kKGRl
Y29kaW5nVGFzay5yZWxlYXNlKCkpOyAvLyBub3RlIHRoYXQgb3duZXJzaGlwIG9mIHRoZSB0YXNr
IGlzIGVmZmVjdGl2ZWx5IHRha2VuIGJ5IHRoZSBxdWV1ZS4KLX0KLQotLy8gQXN5bmNocm9ub3Vz
bHkgZGVjb2RlIGluIHRoaXMgdGhyZWFkLgotdm9pZCBBc3luY0F1ZGlvRGVjb2Rlcjo6dGhyZWFk
RW50cnkodm9pZCogdGhyZWFkRGF0YSkKLXsKLSAgICBBU1NFUlQodGhyZWFkRGF0YSk7Ci0gICAg
QXN5bmNBdWRpb0RlY29kZXIqIGRlY29kZXIgPSByZWludGVycHJldF9jYXN0PEFzeW5jQXVkaW9E
ZWNvZGVyKj4odGhyZWFkRGF0YSk7Ci0gICAgZGVjb2Rlci0+cnVuTG9vcCgpOwotfQotCi12b2lk
IEFzeW5jQXVkaW9EZWNvZGVyOjpydW5Mb29wKCkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVh
ZCgpKTsKLQotICAgIHsKLSAgICAgICAgLy8gV2FpdCBmb3IgdW50aWwgd2UgaGF2ZSBtX3RocmVh
ZElEIGVzdGFibGlzaGVkIGJlZm9yZSBzdGFydGluZyB0aGUgcnVuIGxvb3AuCi0gICAgICAgIE11
dGV4TG9ja2VyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKLSAgICB9Ci0KLSAgICAvLyBL
ZWVwIHJ1bm5pbmcgZGVjb2RpbmcgdGFza3MgdW50aWwgd2UncmUga2lsbGVkLgotICAgIHdoaWxl
IChPd25QdHI8RGVjb2RpbmdUYXNrPiBkZWNvZGluZ1Rhc2sgPSBtX3F1ZXVlLndhaXRGb3JNZXNz
YWdlKCkpIHsKLSAgICAgICAgLy8gTGV0IHRoZSB0YXNrIHRha2UgY2FyZSBvZiBpdHMgb3duIG93
bmVyc2hpcC4KLSAgICAgICAgLy8gU2VlIERlY29kaW5nVGFzazo6bm90aWZ5Q29tcGxldGUoKSBm
b3IgY2xlYW51cC4KLSAgICAgICAgZGVjb2RpbmdUYXNrLmxlYWtQdHIoKS0+ZGVjb2RlKCk7Ci0g
ICAgfQotfQotCi1QYXNzT3duUHRyPEFzeW5jQXVkaW9EZWNvZGVyOjpEZWNvZGluZ1Rhc2s+IEFz
eW5jQXVkaW9EZWNvZGVyOjpEZWNvZGluZ1Rhc2s6OmNyZWF0ZShBcnJheUJ1ZmZlciogYXVkaW9E
YXRhLCBmbG9hdCBzYW1wbGVSYXRlLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IHN1
Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBlcnJvckNhbGxi
YWNrKQotewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVjb2RpbmdUYXNrKGF1ZGlvRGF0YSwg
c2FtcGxlUmF0ZSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSk7Ci19Ci0KLUFzeW5j
QXVkaW9EZWNvZGVyOjpEZWNvZGluZ1Rhc2s6OkRlY29kaW5nVGFzayhBcnJheUJ1ZmZlciogYXVk
aW9EYXRhLCBmbG9hdCBzYW1wbGVSYXRlLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+
IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBlcnJvckNh
bGxiYWNrKQotICAgIDogbV9hdWRpb0RhdGEoYXVkaW9EYXRhKQotICAgICwgbV9zYW1wbGVSYXRl
KHNhbXBsZVJhdGUpCi0gICAgLCBtX3N1Y2Nlc3NDYWxsYmFjayhzdWNjZXNzQ2FsbGJhY2spCi0g
ICAgLCBtX2Vycm9yQ2FsbGJhY2soZXJyb3JDYWxsYmFjaykKLXsKLX0KLQotdm9pZCBBc3luY0F1
ZGlvRGVjb2Rlcjo6RGVjb2RpbmdUYXNrOjpkZWNvZGUoKQotewotICAgIEFTU0VSVChtX2F1ZGlv
RGF0YS5nZXQoKSk7Ci0gICAgaWYgKCFtX2F1ZGlvRGF0YS5nZXQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gRG8gdGhlIGFjdHVhbCBkZWNvZGluZyBhbmQgaW52b2tlIHRoZSBjYWxsYmFj
ay4KLSAgICBtX2F1ZGlvQnVmZmVyID0gQXVkaW9CdWZmZXI6OmNyZWF0ZUZyb21BdWRpb0ZpbGVE
YXRhKG1fYXVkaW9EYXRhLT5kYXRhKCksIG1fYXVkaW9EYXRhLT5ieXRlTGVuZ3RoKCksIGZhbHNl
LCBzYW1wbGVSYXRlKCkpOwotICAgIAotICAgIC8vIERlY29kaW5nIGlzIGZpbmlzaGVkLCBidXQg
d2UgbmVlZCB0byBkbyB0aGUgY2FsbGJhY2tzIG9uIHRoZSBtYWluIHRocmVhZC4KLSAgICBjYWxs
T25NYWluVGhyZWFkKG5vdGlmeUNvbXBsZXRlRGlzcGF0Y2gsIHRoaXMpOwotfQotCi12b2lkIEFz
eW5jQXVkaW9EZWNvZGVyOjpEZWNvZGluZ1Rhc2s6Om5vdGlmeUNvbXBsZXRlRGlzcGF0Y2godm9p
ZCogdXNlckRhdGEpCi17Ci0gICAgQXN5bmNBdWRpb0RlY29kZXI6OkRlY29kaW5nVGFzayogdGFz
ayA9IHJlaW50ZXJwcmV0X2Nhc3Q8QXN5bmNBdWRpb0RlY29kZXI6OkRlY29kaW5nVGFzayo+KHVz
ZXJEYXRhKTsKLSAgICBBU1NFUlQodGFzayk7Ci0gICAgaWYgKCF0YXNrKQotICAgICAgICByZXR1
cm47Ci0KLSAgICB0YXNrLT5ub3RpZnlDb21wbGV0ZSgpOwotfQotCi12b2lkIEFzeW5jQXVkaW9E
ZWNvZGVyOjpEZWNvZGluZ1Rhc2s6Om5vdGlmeUNvbXBsZXRlKCkKLXsKLSAgICBpZiAoYXVkaW9C
dWZmZXIoKSAmJiBzdWNjZXNzQ2FsbGJhY2soKSkKLSAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKCkt
PmhhbmRsZUV2ZW50KGF1ZGlvQnVmZmVyKCkpOwotICAgIGVsc2UgaWYgKGVycm9yQ2FsbGJhY2so
KSkKLSAgICAgICAgZXJyb3JDYWxsYmFjaygpLT5oYW5kbGVFdmVudChhdWRpb0J1ZmZlcigpKTsK
LQotICAgIC8vIE91ciBvd25lcnNoaXAgd2FzIGdpdmVuIHVwIGluIEFzeW5jQXVkaW9EZWNvZGVy
OjpydW5Mb29wKCkKLSAgICAvLyBNYWtlIHN1cmUgdG8gY2xlYW4gdXAgaGVyZS4KLSAgICBkZWxl
dGUgdGhpczsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNv
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXN5bmNBdWRpb0Rl
Y29kZXIuaAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXN5
bmNBdWRpb0RlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4OSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBBc3luY0F1ZGlvRGVjb2Rlcl9oCi0jZGVmaW5lIEFzeW5jQXVkaW9EZWNv
ZGVyX2gKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL01lc3NhZ2VR
dWV1ZS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGlu
Zy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvQnVmZmVyOwotY2xhc3Mg
QXVkaW9CdWZmZXJDYWxsYmFjazsKLQotLy8gQXN5bmNBdWRpb0RlY29kZXIgYXN5bmNocm9ub3Vz
bHkgZGVjb2RlcyBhdWRpbyBmaWxlIGRhdGEgZnJvbSBhbiBBcnJheUJ1ZmZlciBpbiBhIHdvcmtl
ciB0aHJlYWQuCi0vLyBVcG9uIHN1Y2Nlc3NmdWwgZGVjb2RpbmcsIGEgY29tcGxldGlvbiBjYWxs
YmFjayB3aWxsIGJlIGludm9rZWQgd2l0aCB0aGUgZGVjb2RlZCBQQ00gZGF0YSBpbiBhbiBBdWRp
b0J1ZmZlci4KLQotY2xhc3MgQXN5bmNBdWRpb0RlY29kZXIgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEFzeW5jQXVkaW9EZWNvZGVyKTsKLXB1YmxpYzoKLSAgICBBc3luY0F1ZGlvRGVjb2Rl
cigpOwotICAgIH5Bc3luY0F1ZGlvRGVjb2RlcigpOwotCi0gICAgLy8gTXVzdCBiZSBjYWxsZWQg
b24gdGhlIG1haW4gdGhyZWFkLgotICAgIHZvaWQgZGVjb2RlQXN5bmMoQXJyYXlCdWZmZXIqIGF1
ZGlvRGF0YSwgZmxvYXQgc2FtcGxlUmF0ZSwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNr
PiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gZXJyb3JD
YWxsYmFjayk7Ci0KLXByaXZhdGU6Ci0gICAgY2xhc3MgRGVjb2RpbmdUYXNrIHsKLSAgICAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoRGVjb2RpbmdUYXNrKTsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IHN0YXRpYyBQYXNzT3duUHRyPERlY29kaW5nVGFzaz4gY3JlYXRlKEFycmF5QnVmZmVyKiBhdWRp
b0RhdGEsIGZsb2F0IHNhbXBsZVJhdGUsIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4g
c3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IGVycm9yQ2Fs
bGJhY2spOwotCi0gICAgICAgIHZvaWQgZGVjb2RlKCk7Ci0gICAgICAgIAotICAgIHByaXZhdGU6
Ci0gICAgICAgIERlY29kaW5nVGFzayhBcnJheUJ1ZmZlciogYXVkaW9EYXRhLCBmbG9hdCBzYW1w
bGVSYXRlLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywg
UGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKTsKLQotICAgICAg
ICBBcnJheUJ1ZmZlciogYXVkaW9EYXRhKCkgeyByZXR1cm4gbV9hdWRpb0RhdGEuZ2V0KCk7IH0K
LSAgICAgICAgZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlUmF0ZTsg
fQotICAgICAgICBBdWRpb0J1ZmZlckNhbGxiYWNrKiBzdWNjZXNzQ2FsbGJhY2soKSB7IHJldHVy
biBtX3N1Y2Nlc3NDYWxsYmFjay5nZXQoKTsgfQotICAgICAgICBBdWRpb0J1ZmZlckNhbGxiYWNr
KiBlcnJvckNhbGxiYWNrKCkgeyByZXR1cm4gbV9lcnJvckNhbGxiYWNrLmdldCgpOyB9Ci0gICAg
ICAgIEF1ZGlvQnVmZmVyKiBhdWRpb0J1ZmZlcigpIHsgcmV0dXJuIG1fYXVkaW9CdWZmZXIuZ2V0
KCk7IH0KLQotICAgICAgICBzdGF0aWMgdm9pZCBub3RpZnlDb21wbGV0ZURpc3BhdGNoKHZvaWQq
IHVzZXJEYXRhKTsKLSAgICAgICAgdm9pZCBub3RpZnlDb21wbGV0ZSgpOwotCi0gICAgICAgIFJl
ZlB0cjxBcnJheUJ1ZmZlcj4gbV9hdWRpb0RhdGE7Ci0gICAgICAgIGZsb2F0IG1fc2FtcGxlUmF0
ZTsKLSAgICAgICAgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IG1fc3VjY2Vzc0NhbGxiYWNr
OwotICAgICAgICBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gbV9lcnJvckNhbGxiYWNrOwot
ICAgICAgICBSZWZQdHI8QXVkaW9CdWZmZXI+IG1fYXVkaW9CdWZmZXI7Ci0gICAgfTsKLSAgICAK
LSAgICBzdGF0aWMgdm9pZCB0aHJlYWRFbnRyeSh2b2lkKiB0aHJlYWREYXRhKTsKLSAgICB2b2lk
IHJ1bkxvb3AoKTsKLQotICAgIFdURjo6VGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOwotICAg
IE11dGV4IG1fdGhyZWFkQ3JlYXRpb25NdXRleDsKLSAgICBNZXNzYWdlUXVldWU8RGVjb2RpbmdU
YXNrPiBtX3F1ZXVlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
QXN5bmNBdWRpb0RlY29kZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9C
YXNpY1Byb2Nlc3Nvck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcAkocmV2aXNpb24gMTExMjA4KQorKysgU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDE1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIkF1ZGlvQmFzaWNQcm9jZXNz
b3JOb2RlLmgiCi0KLSNpbmNsdWRlICJBdWRpb0J1cy5oIgotI2luY2x1ZGUgIkF1ZGlvQ29udGV4
dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0LmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlT3V0
cHV0LmgiCi0jaW5jbHVkZSAiQXVkaW9Qcm9jZXNzb3IuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZTo6QXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUoQXVk
aW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIDogQXVkaW9Ob2RlKGNv
bnRleHQsIHNhbXBsZVJhdGUpCi17Ci0gICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9k
ZUlucHV0KHRoaXMpKSk7Ci0gICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRw
dXQodGhpcywgMSkpKTsKLQotICAgIC8vIFRoZSBzdWJjbGFzcyBtdXN0IGNyZWF0ZSBtX3Byb2Nl
c3Nvci4KLX0KLQotdm9pZCBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZTo6aW5pdGlhbGl6ZSgpCi17
Ci0gICAgaWYgKGlzSW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KHByb2Nlc3NvcigpKTsKLSAgICBwcm9jZXNzb3IoKS0+aW5pdGlhbGl6ZSgpOwotCi0gICAgQXVk
aW9Ob2RlOjppbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGU6
OnVuaW5pdGlhbGl6ZSgpCi17Ci0gICAgaWYgKCFpc0luaXRpYWxpemVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEFTU0VSVChwcm9jZXNzb3IoKSk7Ci0gICAgcHJvY2Vzc29yKCktPnVuaW5p
dGlhbGl6ZSgpOwotCi0gICAgQXVkaW9Ob2RlOjp1bmluaXRpYWxpemUoKTsKLX0KLQotdm9pZCBB
dWRpb0Jhc2ljUHJvY2Vzc29yTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQot
ewotICAgIEF1ZGlvQnVzKiBkZXN0aW5hdGlvbkJ1cyA9IG91dHB1dCgwKS0+YnVzKCk7Ci0gICAg
Ci0gICAgaWYgKCFpc0luaXRpYWxpemVkKCkgfHwgIXByb2Nlc3NvcigpKQotICAgICAgICBkZXN0
aW5hdGlvbkJ1cy0+emVybygpOwotICAgIGVsc2UgewotICAgICAgICBBdWRpb0J1cyogc291cmNl
QnVzID0gaW5wdXQoMCktPmJ1cygpOwotCi0gICAgICAgIC8vIEZJWE1FOiBpZiB3ZSB0YWtlICJ0
YWlsIHRpbWUiIGludG8gYWNjb3VudCwgdGhlbiB3ZSBjYW4gYXZvaWQgY2FsbGluZyBwcm9jZXNz
b3IoKS0+cHJvY2VzcygpIG9uY2UgdGhlIHRhaWwgZGllcyBkb3duLgotICAgICAgICBpZiAoIWlu
cHV0KDApLT5pc0Nvbm5lY3RlZCgpKQotICAgICAgICAgICAgc291cmNlQnVzLT56ZXJvKCk7Ci0K
LSAgICAgICAgcHJvY2Vzc29yKCktPnByb2Nlc3Moc291cmNlQnVzLCBkZXN0aW5hdGlvbkJ1cywg
ZnJhbWVzVG9Qcm9jZXNzKTsgIAotICAgIH0KLX0KLQotLy8gTmljZSBvcHRpbWl6YXRpb24gaW4g
dGhlIHZlcnkgY29tbW9uIGNhc2UgYWxsb3dpbmcgZm9yICJpbi1wbGFjZSIgcHJvY2Vzc2luZwot
dm9pZCBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZTo6cHVsbElucHV0cyhzaXplX3QgZnJhbWVzVG9Q
cm9jZXNzKQotewotICAgIC8vIFJlbmRlciBpbnB1dCBzdHJlYW0gLSBzdWdnZXN0IHRvIHRoZSBp
bnB1dCB0byByZW5kZXIgZGlyZWN0bHkgaW50byBvdXRwdXQgYnVzIGZvciBpbi1wbGFjZSBwcm9j
ZXNzaW5nIGluIHByb2Nlc3MoKSBpZiBwb3NzaWJsZS4KLSAgICBpbnB1dCgwKS0+cHVsbChvdXRw
dXQoMCktPmJ1cygpLCBmcmFtZXNUb1Byb2Nlc3MpOwotfQotCi12b2lkIEF1ZGlvQmFzaWNQcm9j
ZXNzb3JOb2RlOjpyZXNldCgpCi17Ci0gICAgaWYgKHByb2Nlc3NvcigpKQotICAgICAgICBwcm9j
ZXNzb3IoKS0+cmVzZXQoKTsKLX0KLQotLy8gQXMgc29vbiBhcyB3ZSBrbm93IHRoZSBjaGFubmVs
IGNvdW50IG9mIG91ciBpbnB1dCwgd2UgY2FuIGxhemlseSBpbml0aWFsaXplLgotLy8gU29tZXRp
bWVzIHRoaXMgbWF5IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSB3aXRoIGRpZmZlcmVudCBjaGFu
bmVsIGNvdW50cywgaW4gd2hpY2ggY2FzZSB3ZSBtdXN0IHNhZmVseQotLy8gdW5pbml0aWFsaXpl
IGFuZCB0aGVuIHJlLWluaXRpYWxpemUgd2l0aCB0aGUgbmV3IGNoYW5uZWwgY291bnQuCi12b2lk
IEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlOjpjaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1dChB
dWRpb05vZGVJbnB1dCogaW5wdXQpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1Ro
cmVhZCgpICYmIGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOwotICAgIAotICAgIEFTU0VSVChp
bnB1dCA9PSB0aGlzLT5pbnB1dCgwKSk7Ci0gICAgaWYgKGlucHV0ICE9IHRoaXMtPmlucHV0KDAp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQocHJvY2Vzc29yKCkpOwotICAgIGlmICgh
cHJvY2Vzc29yKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIG51bWJlck9mQ2hh
bm5lbHMgPSBpbnB1dC0+bnVtYmVyT2ZDaGFubmVscygpOwotICAgIAotICAgIGlmIChpc0luaXRp
YWxpemVkKCkgJiYgbnVtYmVyT2ZDaGFubmVscyAhPSBvdXRwdXQoMCktPm51bWJlck9mQ2hhbm5l
bHMoKSkgewotICAgICAgICAvLyBXZSdyZSBhbHJlYWR5IGluaXRpYWxpemVkIGJ1dCB0aGUgY2hh
bm5lbCBjb3VudCBoYXMgY2hhbmdlZC4KLSAgICAgICAgdW5pbml0aWFsaXplKCk7Ci0gICAgfQot
ICAgIAotICAgIGlmICghaXNJbml0aWFsaXplZCgpKSB7Ci0gICAgICAgIC8vIFRoaXMgd2lsbCBw
cm9wYWdhdGUgdGhlIGNoYW5uZWwgY291bnQgdG8gYW55IG5vZGVzIGNvbm5lY3RlZCBmdXJ0aGVy
IGRvd24gdGhlIGNoYWluLi4uCi0gICAgICAgIG91dHB1dCgwKS0+c2V0TnVtYmVyT2ZDaGFubmVs
cyhudW1iZXJPZkNoYW5uZWxzKTsKLQotICAgICAgICAvLyBSZS1pbml0aWFsaXplIHRoZSBwcm9j
ZXNzb3Igd2l0aCB0aGUgbmV3IGNoYW5uZWwgY291bnQuCi0gICAgICAgIHByb2Nlc3NvcigpLT5z
ZXROdW1iZXJPZkNoYW5uZWxzKG51bWJlck9mQ2hhbm5lbHMpOwotICAgICAgICBpbml0aWFsaXpl
KCk7Ci0gICAgfQotCi0gICAgQXVkaW9Ob2RlOjpjaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1
dChpbnB1dCk7Ci19Ci0KLXVuc2lnbmVkIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlOjpudW1iZXJP
ZkNoYW5uZWxzKCkKLXsKLSAgICByZXR1cm4gb3V0cHV0KDApLT5udW1iZXJPZkNoYW5uZWxzKCk7
Ci19Ci0KLWRvdWJsZSBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZTo6dGFpbFRpbWUoKSBjb25zdAot
ewotICAgIHJldHVybiBtX3Byb2Nlc3Nvci0+dGFpbFRpbWUoKTsKLX0KLQotZG91YmxlIEF1ZGlv
QmFzaWNQcm9jZXNzb3JOb2RlOjpsYXRlbmN5VGltZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
cHJvY2Vzc29yLT5sYXRlbmN5VGltZSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oCShyZXZpc2lvbiAxMTEyMDgpCisr
KyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEF1ZGlvQmFz
aWNQcm9jZXNzb3JOb2RlX2gKLSNkZWZpbmUgQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGVfaAotCi0j
aW5jbHVkZSAiQXVkaW9Ob2RlLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb0J1czsKLWNsYXNzIEF1ZGlvTm9kZUlucHV0
OwotY2xhc3MgQXVkaW9Qcm9jZXNzb3I7Ci0gICAgCi0vLyBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9k
ZSBpcyBhbiBBdWRpb05vZGUgd2l0aCBvbmUgaW5wdXQgYW5kIG9uZSBvdXRwdXQgd2hlcmUgdGhl
IGlucHV0IGFuZCBvdXRwdXQgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgY2hhbm5lbHMuCi1jbGFz
cyBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZSA6IHB1YmxpYyBBdWRpb05vZGUgewotcHVibGljOgot
ICAgIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJh
dGUpOwotCi0gICAgLy8gQXVkaW9Ob2RlCi0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3Moc2l6ZV90
IGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgdmlydHVhbCB2b2lkIHB1bGxJbnB1dHMoc2l6ZV90IGZy
YW1lc1RvUHJvY2Vzcyk7Ci0gICAgdmlydHVhbCB2b2lkIHJlc2V0KCk7Ci0gICAgdmlydHVhbCB2
b2lkIGluaXRpYWxpemUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdW5pbml0aWFsaXplKCk7Ci0KLSAg
ICAvLyBDYWxsZWQgaW4gdGhlIG1haW4gdGhyZWFkIHdoZW4gdGhlIG51bWJlciBvZiBjaGFubmVs
cyBmb3IgdGhlIGlucHV0IG1heSBoYXZlIGNoYW5nZWQuCi0gICAgdmlydHVhbCB2b2lkIGNoZWNr
TnVtYmVyT2ZDaGFubmVsc0ZvcklucHV0KEF1ZGlvTm9kZUlucHV0Kik7Ci0KLSAgICAvLyBSZXR1
cm5zIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgZm9yIGJvdGggdGhlIGlucHV0IGFuZCB0aGUgb3V0
cHV0LgotICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMoKTsKLQotcHJvdGVjdGVkOgotICAg
IHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBk
b3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERTsKLQotICAgIEF1ZGlvUHJvY2Vzc29y
KiBwcm9jZXNzb3IoKSB7IHJldHVybiBtX3Byb2Nlc3Nvci5nZXQoKTsgfQotICAgIE93blB0cjxB
dWRpb1Byb2Nlc3Nvcj4gbV9wcm9jZXNzb3I7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZV9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEx
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQot
Ci0jaW5jbHVkZSAiQXVkaW9CdWZmZXIuaCIKLQotI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCi0jaW5j
bHVkZSAiQXVkaW9Db250ZXh0LmgiCi0jaW5jbHVkZSAiQXVkaW9GaWxlUmVhZGVyLmgiCi0jaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBBdWRpb0J1ZmZlcjo6Y3Jl
YXRlKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxv
YXQgc2FtcGxlUmF0ZSkKLXsKLSAgICBpZiAoc2FtcGxlUmF0ZSA8IDIyMDUwIHx8IHNhbXBsZVJh
dGUgPiA5NjAwMCB8fCBudW1iZXJPZkNoYW5uZWxzID4gQXVkaW9Db250ZXh0OjptYXhOdW1iZXJP
ZkNoYW5uZWxzKCkgfHwgIW51bWJlck9mRnJhbWVzKQotICAgICAgICByZXR1cm4gMDsKLSAgICAK
LSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvQnVmZmVyKG51bWJlck9mQ2hhbm5lbHMsIG51
bWJlck9mRnJhbWVzLCBzYW1wbGVSYXRlKSk7Ci19Ci0KLVBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+
IEF1ZGlvQnVmZmVyOjpjcmVhdGVGcm9tQXVkaW9GaWxlRGF0YShjb25zdCB2b2lkKiBkYXRhLCBz
aXplX3QgZGF0YVNpemUsIGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBzYW1wbGVSYXRlKQotewotICAg
IE93blB0cjxBdWRpb0J1cz4gYnVzID0gY3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKGRh
dGEsIGRhdGFTaXplLCBtaXhUb01vbm8sIHNhbXBsZVJhdGUpOwotICAgIGlmIChidXMuZ2V0KCkp
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVkaW9CdWZmZXIoYnVzLmdldCgpKSk7Ci0K
LSAgICByZXR1cm4gMDsKLX0KLQotQXVkaW9CdWZmZXI6OkF1ZGlvQnVmZmVyKHVuc2lnbmVkIG51
bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSkK
LSAgICA6IG1fZ2FpbigxLjApCi0gICAgLCBtX3NhbXBsZVJhdGUoc2FtcGxlUmF0ZSkKLSAgICAs
IG1fbGVuZ3RoKG51bWJlck9mRnJhbWVzKQotewotICAgIG1fY2hhbm5lbHMucmVzZXJ2ZUNhcGFj
aXR5KG51bWJlck9mQ2hhbm5lbHMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51
bWJlck9mQ2hhbm5lbHM7ICsraSkgewotICAgICAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiBjaGFu
bmVsRGF0YUFycmF5ID0gRmxvYXQzMkFycmF5OjpjcmVhdGUobV9sZW5ndGgpOwotICAgICAgICBt
X2NoYW5uZWxzLmFwcGVuZChjaGFubmVsRGF0YUFycmF5KTsKLSAgICB9Ci19Ci0KLUF1ZGlvQnVm
ZmVyOjpBdWRpb0J1ZmZlcihBdWRpb0J1cyogYnVzKQotICAgIDogbV9nYWluKDEuMCkKLSAgICAs
IG1fc2FtcGxlUmF0ZShidXMtPnNhbXBsZVJhdGUoKSkKLSAgICAsIG1fbGVuZ3RoKGJ1cy0+bGVu
Z3RoKCkpCi17Ci0gICAgLy8gQ29weSBhdWRpbyBkYXRhIGZyb20gdGhlIGJ1cyB0byB0aGUgRmxv
YXQzMkFycmF5cyB3ZSBtYW5hZ2UuCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscyA9IGJ1
cy0+bnVtYmVyT2ZDaGFubmVscygpOwotICAgIG1fY2hhbm5lbHMucmVzZXJ2ZUNhcGFjaXR5KG51
bWJlck9mQ2hhbm5lbHMpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNo
YW5uZWxzOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gY2hhbm5lbERhdGFB
cnJheSA9IEZsb2F0MzJBcnJheTo6Y3JlYXRlKG1fbGVuZ3RoKTsKLSAgICAgICAgY2hhbm5lbERh
dGFBcnJheS0+c2V0UmFuZ2UoYnVzLT5jaGFubmVsKGkpLT5kYXRhKCksIG1fbGVuZ3RoLCAwKTsK
LSAgICAgICAgbV9jaGFubmVscy5hcHBlbmQoY2hhbm5lbERhdGFBcnJheSk7Ci0gICAgfQotfQot
Ci12b2lkIEF1ZGlvQnVmZmVyOjpyZWxlYXNlTWVtb3J5KCkKLXsKLSAgICBtX2NoYW5uZWxzLmNs
ZWFyKCk7Ci19Ci0KLUZsb2F0MzJBcnJheSogQXVkaW9CdWZmZXI6OmdldENoYW5uZWxEYXRhKHVu
c2lnbmVkIGNoYW5uZWxJbmRleCkKLXsKLSAgICBpZiAoY2hhbm5lbEluZGV4ID49IG1fY2hhbm5l
bHMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2NoYW5uZWxzW2No
YW5uZWxJbmRleF0uZ2V0KCk7Ci19Ci0KLXZvaWQgQXVkaW9CdWZmZXI6Onplcm8oKQotewotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NoYW5uZWxzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGlmIChnZXRDaGFubmVsRGF0YShpKSkKLSAgICAgICAgICAgIGdldENoYW5uZWxEYXRhKGkp
LT56ZXJvUmFuZ2UoMCwgbGVuZ3RoKCkpOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9CdWZmZXIuaAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQXVkaW9CdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4MSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBBdWRpb0J1ZmZlcl9oCi0jZGVmaW5lIEF1ZGlvQnVmZmVyX2gKLQotI2luY2x1ZGUg
PHd0Zi9GbG9hdDMyQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb0J1czsK
LSAgICAKLWNsYXNzIEF1ZGlvQnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8QXVkaW9CdWZmZXI+
IHsKLXB1YmxpYzogICAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gY3JlYXRl
KHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQg
c2FtcGxlUmF0ZSk7Ci0KLSAgICAvLyBSZXR1cm5zIDAgaWYgZGF0YSBpcyBub3QgYSB2YWxpZCBh
dWRpbyBmaWxlLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBjcmVhdGVGcm9t
QXVkaW9GaWxlRGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUsIGJvb2wgbWl4
VG9Nb25vLCBmbG9hdCBzYW1wbGVSYXRlKTsKLQotICAgIC8vIEZvcm1hdAotICAgIHNpemVfdCBs
ZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQotICAgIGRvdWJsZSBkdXJhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIGxlbmd0aCgpIC8gc2FtcGxlUmF0ZSgpOyB9Ci0gICAgZmxvYXQgc2Ft
cGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlUmF0ZTsgfQotCi0gICAgLy8gQ2hhbm5l
bCBkYXRhIGFjY2VzcwotICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMoKSBjb25zdCB7IHJl
dHVybiBtX2NoYW5uZWxzLnNpemUoKTsgfQotICAgIEZsb2F0MzJBcnJheSogZ2V0Q2hhbm5lbERh
dGEodW5zaWduZWQgY2hhbm5lbEluZGV4KTsKLSAgICB2b2lkIHplcm8oKTsKLQotICAgIC8vIFNj
YWxhciBnYWluCi0gICAgZG91YmxlIGdhaW4oKSBjb25zdCB7IHJldHVybiBtX2dhaW47IH0KLSAg
ICB2b2lkIHNldEdhaW4oZG91YmxlIGdhaW4pIHsgbV9nYWluID0gZ2FpbjsgfQotCi0gICAgLy8g
QmVjYXVzZSBhbiBBdWRpb0J1ZmZlciBoYXMgYSBKYXZhU2NyaXB0IHdyYXBwZXIsIHdoaWNoIHdp
bGwgYmUgZ2FyYmFnZSBjb2xsZWN0ZWQsIGl0IG1heSB0YWtlIGF3aGlsZSBmb3IgdGhpcyBvYmpl
Y3QgdG8gYmUgZGVsZXRlZC4KLSAgICAvLyByZWxlYXNlTWVtb3J5KCkgY2FuIGJlIGNhbGxlZCB3
aGVuIHRoZSBBdWRpb0NvbnRleHQgZ29lcyBhd2F5LCBzbyB3ZSBjYW4gcmVsZWFzZSB0aGUgbWVt
b3J5IGVhcmxpZXIgdGhhbiB3aGVuIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gaGFwcGVucy4KLSAg
ICAvLyBDYXJlZnVsISBPbmx5IGNhbGwgdGhpcyB3aGVuIHRoZSBwYWdlIHVubG9hZHMsIGFmdGVy
IHRoZSBBdWRpb0NvbnRleHQgaXMgbm8gbG9uZ2VyIHByb2Nlc3NpbmcuCi0gICAgdm9pZCByZWxl
YXNlTWVtb3J5KCk7Ci0gICAgCi1wcm90ZWN0ZWQ6Ci0gICAgQXVkaW9CdWZmZXIodW5zaWduZWQg
bnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IG51bWJlck9mRnJhbWVzLCBmbG9hdCBzYW1wbGVSYXRl
KTsKLSAgICBBdWRpb0J1ZmZlcihBdWRpb0J1cyogYnVzKTsKLQotICAgIGRvdWJsZSBtX2dhaW47
IC8vIHNjYWxhciBnYWluCi0gICAgZmxvYXQgbV9zYW1wbGVSYXRlOwotICAgIHNpemVfdCBtX2xl
bmd0aDsKLQotICAgIFZlY3RvcjxSZWZQdHI8RmxvYXQzMkFycmF5PiA+IG1fY2hhbm5lbHM7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBBdWRpb0J1ZmZlcl9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlci5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaWRsCShyZXZpc2lvbiAxMTEy
MDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlci5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBhdWRpbyB7Ci0gICAgaW50ZXJmYWNlIFsK
LSAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPCi0gICAgXSBBdWRpb0J1ZmZlciB7Ci0gICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIGxlbmd0aDsgLy8gaW4gc2FtcGxlLWZyYW1lcwot
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgZmxvYXQgZHVyYXRpb247IC8vIGluIHNlY29uZHMK
LSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0IHNhbXBsZVJhdGU7IC8vIGluIHNhbXBs
ZS1mcmFtZXMgcGVyIHNlY29uZAotCi0gICAgICAgIGF0dHJpYnV0ZSBmbG9hdCBnYWluOyAvLyBs
aW5lYXIgZ2FpbiAoZGVmYXVsdCAxLjApCi0KLSAgICAgICAgLy8gQ2hhbm5lbCBhY2Nlc3MKLSAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZDaGFubmVsczsK
LSAgICAgICAgRmxvYXQzMkFycmF5IGdldENoYW5uZWxEYXRhKGluIHVuc2lnbmVkIGxvbmcgY2hh
bm5lbEluZGV4KTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9CdWZmZXJDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvQnVmZmVyQ2FsbGJhY2suaAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ2
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEF1ZGlvQnVmZmVyQ2FsbGJhY2tfaAotI2Rl
ZmluZSBBdWRpb0J1ZmZlckNhbGxiYWNrX2gKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IEF1ZGlvQnVmZmVyOwotCi1jbGFzcyBBdWRpb0J1ZmZlckNhbGxiYWNrIDogcHVibGljIFJlZkNv
dW50ZWQ8QXVkaW9CdWZmZXJDYWxsYmFjaz4gewotcHVibGljOgotICAgIHZpcnR1YWwgfkF1ZGlv
QnVmZmVyQ2FsbGJhY2soKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoQXVkaW9C
dWZmZXIqKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdF
Ql9BVURJTykKLQotI2VuZGlmIC8vIEF1ZGlvQnVmZmVyQ2FsbGJhY2tfaApJbmRleDogU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFjay5pZGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFjay5pZGwJKHJldmlzaW9u
IDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyQ2FsbGJhY2su
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUg
YXVkaW8gewotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywK
LSAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QsCi0gICAgICAgIENhbGxiYWNrCi0gICAgXSBB
dWRpb0J1ZmZlckNhbGxiYWNrIHsKLSAgICAgICAgYm9vbGVhbiBoYW5kbGVFdmVudChpbiBBdWRp
b0J1ZmZlciBhdWRpb0J1ZmZlcik7Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcAkocmV2aXNpb24gMTExMjA4
KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1MDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJBdWRpb0J1ZmZl
clNvdXJjZU5vZGUuaCIKLQotI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgotI2luY2x1ZGUgIkF1
ZGlvTm9kZU91dHB1dC5oIgotI2luY2x1ZGUgIkF1ZGlvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAi
RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJTY3Jp
cHRDYWxsU3RhY2suaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi11c2luZyBuYW1lc3BhY2Ug
c3RkOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0IGRvdWJsZSBEZWZhdWx0R3JhaW5E
dXJhdGlvbiA9IDAuMDIwOyAvLyAyMG1zCi1jb25zdCBkb3VibGUgVW5rbm93blRpbWUgPSAtMTsK
LQotLy8gQXJiaXRyYXJ5IHVwcGVyIGxpbWl0IG9uIHBsYXliYWNrIHJhdGUuCi0vLyBIaWdoZXIg
dGhhbiBleHBlY3RlZCByYXRlcyBjYW4gYmUgdXNlZnVsIHdoZW4gcGxheWluZyBiYWNrIG92ZXJz
YW1wbGVkIGJ1ZmZlcnMKLS8vIHRvIG1pbmltaXplIGxpbmVhciBpbnRlcnBvbGF0aW9uIGFsaWFz
aW5nLgotY29uc3QgZG91YmxlIE1heFJhdGUgPSAxMDI0OwotCi1QYXNzUmVmUHRyPEF1ZGlvQnVm
ZmVyU291cmNlTm9kZT4gQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpjcmVhdGUoQXVkaW9Db250ZXh0
KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
QXVkaW9CdWZmZXJTb3VyY2VOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpKTsKLX0KLQotQXVkaW9C
dWZmZXJTb3VyY2VOb2RlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGUoQXVkaW9Db250ZXh0KiBjb250
ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIDogQXVkaW9Tb3VyY2VOb2RlKGNvbnRleHQsIHNh
bXBsZVJhdGUpCi0gICAgLCBtX2J1ZmZlcigwKQotICAgICwgbV9pc1BsYXlpbmcoZmFsc2UpCi0g
ICAgLCBtX2lzTG9vcGluZyhmYWxzZSkKLSAgICAsIG1faGFzRmluaXNoZWQoZmFsc2UpCi0gICAg
LCBtX3N0YXJ0VGltZSgwLjApCi0gICAgLCBtX2VuZFRpbWUoVW5rbm93blRpbWUpCi0gICAgLCBt
X3ZpcnR1YWxSZWFkSW5kZXgoMCkKLSAgICAsIG1faXNHcmFpbihmYWxzZSkKLSAgICAsIG1fZ3Jh
aW5PZmZzZXQoMC4wKQotICAgICwgbV9ncmFpbkR1cmF0aW9uKERlZmF1bHRHcmFpbkR1cmF0aW9u
KQotICAgICwgbV9sYXN0R2FpbigxLjApCi0gICAgLCBtX3Bhbm5lck5vZGUoMCkKLXsKLSAgICBz
ZXROb2RlVHlwZShOb2RlVHlwZUF1ZGlvQnVmZmVyU291cmNlKTsKLQotICAgIG1fZ2FpbiA9IEF1
ZGlvR2Fpbjo6Y3JlYXRlKCJnYWluIiwgMS4wLCAwLjAsIDEuMCk7Ci0gICAgbV9wbGF5YmFja1Jh
dGUgPSBBdWRpb1BhcmFtOjpjcmVhdGUoInBsYXliYWNrUmF0ZSIsIDEuMCwgMC4wLCBNYXhSYXRl
KTsKLSAgICAKLSAgICBtX2dhaW4tPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgbV9wbGF5YmFj
a1JhdGUtPnNldENvbnRleHQoY29udGV4dCk7Ci0KLSAgICAvLyBEZWZhdWx0IHRvIG1vbm8uICBB
IGNhbGwgdG8gc2V0QnVmZmVyKCkgd2lsbCBzZXQgdGhlIG51bWJlciBvZiBvdXRwdXQgY2hhbm5l
bHMgdG8gdGhhdCBvZiB0aGUgYnVmZmVyLgotICAgIGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVk
aW9Ob2RlT3V0cHV0KHRoaXMsIDEpKSk7Ci0KLSAgICBpbml0aWFsaXplKCk7Ci19Ci0KLUF1ZGlv
QnVmZmVyU291cmNlTm9kZTo6fkF1ZGlvQnVmZmVyU291cmNlTm9kZSgpCi17Ci0gICAgdW5pbml0
aWFsaXplKCk7Ci19Ci0KLXZvaWQgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpwcm9jZXNzKHNpemVf
dCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgQXVkaW9CdXMqIG91dHB1dEJ1cyA9IG91dHB1dCgw
KS0+YnVzKCk7Ci0KLSAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkgewotICAgICAgICBvdXRwdXRC
dXMtPnplcm8oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFRoZSBhdWRpbyB0
aHJlYWQgY2FuJ3QgYmxvY2sgb24gdGhpcyBsb2NrLCBzbyB3ZSBjYWxsIHRyeUxvY2soKSBpbnN0
ZWFkLgotICAgIC8vIENhcmVmdWwgLSB0aGlzIGlzIGEgdHJ5TG9jaygpIGFuZCBub3QgYW4gYXV0
b2xvY2tlciwgc28gd2UgbXVzdCB1bmxvY2soKSBiZWZvcmUgZXZlcnkgcmV0dXJuLgotICAgIGlm
IChtX3Byb2Nlc3NMb2NrLnRyeUxvY2soKSkgewotICAgICAgICAvLyBDaGVjayBpZiBpdCdzIHRp
bWUgdG8gc3RhcnQgcGxheWluZy4KLSAgICAgICAgZG91YmxlIHNhbXBsZVJhdGUgPSB0aGlzLT5z
YW1wbGVSYXRlKCk7Ci0gICAgICAgIHNpemVfdCBxdWFudHVtU3RhcnRGcmFtZSA9IGNvbnRleHQo
KS0+Y3VycmVudFNhbXBsZUZyYW1lKCk7Ci0gICAgICAgIHNpemVfdCBxdWFudHVtRW5kRnJhbWUg
PSBxdWFudHVtU3RhcnRGcmFtZSArIGZyYW1lc1RvUHJvY2VzczsKLSAgICAgICAgc2l6ZV90IHN0
YXJ0RnJhbWUgPSBBdWRpb1V0aWxpdGllczo6dGltZVRvU2FtcGxlRnJhbWUobV9zdGFydFRpbWUs
IHNhbXBsZVJhdGUpOwotICAgICAgICBzaXplX3QgZW5kRnJhbWUgPSBtX2VuZFRpbWUgPT0gVW5r
bm93blRpbWUgPyAwIDogQXVkaW9VdGlsaXRpZXM6OnRpbWVUb1NhbXBsZUZyYW1lKG1fZW5kVGlt
ZSwgc2FtcGxlUmF0ZSk7Ci0KLSAgICAgICAgLy8gSWYgd2Uga25vdyB0aGUgZW5kIHRpbWUgYW5k
IGl0J3MgYWxyZWFkeSBwYXNzZWQsIHRoZW4gZG9uJ3QgYm90aGVyIGRvaW5nIGFueSBtb3JlIHJl
bmRlcmluZyB0aGlzIGN5Y2xlLgotICAgICAgICBpZiAobV9lbmRUaW1lICE9IFVua25vd25UaW1l
ICYmIGVuZEZyYW1lIDw9IHF1YW50dW1TdGFydEZyYW1lKSB7Ci0gICAgICAgICAgICBtX2lzUGxh
eWluZyA9IGZhbHNlOwotICAgICAgICAgICAgbV92aXJ0dWFsUmVhZEluZGV4ID0gMDsKLSAgICAg
ICAgICAgIGZpbmlzaCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIW1faXNQ
bGF5aW5nIHx8IG1faGFzRmluaXNoZWQgfHwgIWJ1ZmZlcigpIHx8IHN0YXJ0RnJhbWUgPj0gcXVh
bnR1bUVuZEZyYW1lKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogY2FuIG9wdGltaXplIGhlcmUg
YnkgcHJvcGFnYXRpbmcgc2lsZW50IGhpbnQgaW5zdGVhZCBvZiBmb3JjaW5nIHRoZSB3aG9sZSBj
aGFpbiB0byBwcm9jZXNzIHNpbGVuY2UuCi0gICAgICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsK
LSAgICAgICAgICAgIG1fcHJvY2Vzc0xvY2sudW5sb2NrKCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICBzaXplX3QgcXVhbnR1bUZyYW1lT2Zmc2V0ID0gc3RhcnRG
cmFtZSA+IHF1YW50dW1TdGFydEZyYW1lID8gc3RhcnRGcmFtZSAtIHF1YW50dW1TdGFydEZyYW1l
IDogMDsKLSAgICAgICAgcXVhbnR1bUZyYW1lT2Zmc2V0ID0gbWluKHF1YW50dW1GcmFtZU9mZnNl
dCwgZnJhbWVzVG9Qcm9jZXNzKTsgLy8gY2xhbXAgdG8gdmFsaWQgcmFuZ2UKLSAgICAgICAgc2l6
ZV90IGJ1ZmZlckZyYW1lc1RvUHJvY2VzcyA9IGZyYW1lc1RvUHJvY2VzcyAtIHF1YW50dW1GcmFt
ZU9mZnNldDsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3V0cHV0QnVzLT5u
dW1iZXJPZkNoYW5uZWxzKCk7ICsraSkgCi0gICAgICAgICAgICBtX2Rlc3RpbmF0aW9uQ2hhbm5l
bHNbaV0gPSBvdXRwdXRCdXMtPmNoYW5uZWwoaSktPm11dGFibGVEYXRhKCk7Ci0KLSAgICAgICAg
Ly8gUmVuZGVyIGJ5IHJlYWRpbmcgZGlyZWN0bHkgZnJvbSB0aGUgYnVmZmVyLgotICAgICAgICBy
ZW5kZXJGcm9tQnVmZmVyKG91dHB1dEJ1cywgcXVhbnR1bUZyYW1lT2Zmc2V0LCBidWZmZXJGcmFt
ZXNUb1Byb2Nlc3MpOwotCi0gICAgICAgIC8vIEFwcGx5IHRoZSBnYWluIChpbi1wbGFjZSkgdG8g
dGhlIG91dHB1dCBidXMuCi0gICAgICAgIGZsb2F0IHRvdGFsR2FpbiA9IGdhaW4oKS0+dmFsdWUo
KSAqIG1fYnVmZmVyLT5nYWluKCk7Ci0gICAgICAgIG91dHB1dEJ1cy0+Y29weVdpdGhHYWluRnJv
bSgqb3V0cHV0QnVzLCAmbV9sYXN0R2FpbiwgdG90YWxHYWluKTsKLQotICAgICAgICAvLyBJZiB0
aGUgZW5kIHRpbWUgaXMgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2YgdGhpcyB0aW1lIHF1YW50
dW0sIHRoZW4gc2ltcGx5IHplcm8gb3V0IHRoZQotICAgICAgICAvLyBmcmFtZXMgc3RhcnRpbmcg
YXQgdGhlIGVuZCB0aW1lLgotICAgICAgICBpZiAobV9lbmRUaW1lICE9IFVua25vd25UaW1lICYm
IGVuZEZyYW1lID49IHF1YW50dW1TdGFydEZyYW1lICYmIGVuZEZyYW1lIDwgcXVhbnR1bUVuZEZy
YW1lKSB7Ci0gICAgICAgICAgICBzaXplX3QgemVyb1N0YXJ0RnJhbWUgPSBlbmRGcmFtZSAtIHF1
YW50dW1TdGFydEZyYW1lOwotICAgICAgICAgICAgc2l6ZV90IGZyYW1lc1RvWmVybyA9IGZyYW1l
c1RvUHJvY2VzcyAtIHplcm9TdGFydEZyYW1lOwotCi0gICAgICAgICAgICBib29sIGlzU2FmZSA9
IHplcm9TdGFydEZyYW1lIDwgZnJhbWVzVG9Qcm9jZXNzICYmIGZyYW1lc1RvWmVybyA8PSBmcmFt
ZXNUb1Byb2Nlc3MgJiYgemVyb1N0YXJ0RnJhbWUgKyBmcmFtZXNUb1plcm8gPD0gZnJhbWVzVG9Q
cm9jZXNzOwotICAgICAgICAgICAgQVNTRVJUKGlzU2FmZSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChpc1NhZmUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgb3V0cHV0QnVzLT5udW1iZXJPZkNoYW5uZWxzKCk7ICsraSkKLSAgICAgICAgICAgICAg
ICAgICAgbWVtc2V0KG1fZGVzdGluYXRpb25DaGFubmVsc1tpXSArIHplcm9TdGFydEZyYW1lLCAw
LCBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9aZXJvKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgbV9pc1BsYXlpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgIG1fdmlydHVhbFJlYWRJbmRl
eCA9IDA7Ci0gICAgICAgICAgICBmaW5pc2goKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fcHJv
Y2Vzc0xvY2sudW5sb2NrKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gVG9vIGJhZCAtIHRo
ZSB0cnlMb2NrKCkgZmFpbGVkLiAgV2UgbXVzdCBiZSBpbiB0aGUgbWlkZGxlIG9mIGNoYW5naW5n
IGJ1ZmZlcnMgYW5kIHdlcmUgYWxyZWFkeSBvdXRwdXR0aW5nIHNpbGVuY2UgYW55d2F5LgotICAg
ICAgICBvdXRwdXRCdXMtPnplcm8oKTsKLSAgICB9Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZiB3
ZSdyZSBmaW5pc2hlZC4KLWJvb2wgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpyZW5kZXJTaWxlbmNl
QW5kRmluaXNoSWZOb3RMb29waW5nKEF1ZGlvQnVzKiwgdW5zaWduZWQgaW5kZXgsIHNpemVfdCBm
cmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgaWYgKCFsb29wKCkpIHsKLSAgICAgICAgLy8gSWYgd2Un
cmUgbm90IGxvb3BpbmcsIHRoZW4gc3RvcCBwbGF5aW5nIHdoZW4gd2UgZ2V0IHRvIHRoZSBlbmQu
Ci0gICAgICAgIG1faXNQbGF5aW5nID0gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGZyYW1lc1RvUHJv
Y2VzcyA+IDApIHsKLSAgICAgICAgICAgIC8vIFdlJ3JlIG5vdCBsb29waW5nIGFuZCB3ZSd2ZSBy
ZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHNhbXBsZSBkYXRhLCBidXQgd2Ugc3RpbGwgbmVlZCB0byBw
cm92aWRlIG1vcmUgb3V0cHV0LAotICAgICAgICAgICAgLy8gc28gZ2VuZXJhdGUgc2lsZW5jZSBm
b3IgdGhlIHJlbWFpbmluZy4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZkNoYW5uZWxzKCk7ICsraSkgCi0gICAgICAgICAgICAgICAgbWVtc2V0KG1fZGVzdGlu
YXRpb25DaGFubmVsc1tpXSArIGluZGV4LCAwLCBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9Qcm9j
ZXNzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmlzaCgpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEF1ZGlvQnVmZmVyU291cmNl
Tm9kZTo6cmVuZGVyRnJvbUJ1ZmZlcihBdWRpb0J1cyogYnVzLCB1bnNpZ25lZCBkZXN0aW5hdGlv
bkZyYW1lT2Zmc2V0LCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMpCi17Ci0gICAgQVNTRVJUKGNvbnRl
eHQoKS0+aXNBdWRpb1RocmVhZCgpKTsKLSAgICAKLSAgICAvLyBCYXNpYyBzYW5pdHkgY2hlY2tp
bmcKLSAgICBBU1NFUlQoYnVzKTsKLSAgICBBU1NFUlQoYnVmZmVyKCkpOwotICAgIGlmICghYnVz
IHx8ICFidWZmZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZD
aGFubmVscyA9IHRoaXMtPm51bWJlck9mQ2hhbm5lbHMoKTsKLSAgICB1bnNpZ25lZCBidXNOdW1i
ZXJPZkNoYW5uZWxzID0gYnVzLT5udW1iZXJPZkNoYW5uZWxzKCk7Ci0KLSAgICBib29sIGNoYW5u
ZWxDb3VudEdvb2QgPSBudW1iZXJPZkNoYW5uZWxzICYmIG51bWJlck9mQ2hhbm5lbHMgPT0gYnVz
TnVtYmVyT2ZDaGFubmVsczsKLSAgICBBU1NFUlQoY2hhbm5lbENvdW50R29vZCk7Ci0gICAgaWYg
KCFjaGFubmVsQ291bnRHb29kKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTYW5pdHkgY2hl
Y2sgZGVzdGluYXRpb25GcmFtZU9mZnNldCwgbnVtYmVyT2ZGcmFtZXMuCi0gICAgc2l6ZV90IGRl
c3RpbmF0aW9uTGVuZ3RoID0gYnVzLT5sZW5ndGgoKTsKLQotICAgIGJvb2wgaXNMZW5ndGhHb29k
ID0gZGVzdGluYXRpb25MZW5ndGggPD0gNDA5NiAmJiBudW1iZXJPZkZyYW1lcyA8PSA0MDk2Owot
ICAgIEFTU0VSVChpc0xlbmd0aEdvb2QpOwotICAgIGlmICghaXNMZW5ndGhHb29kKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBib29sIGlzT2Zmc2V0R29vZCA9IGRlc3RpbmF0aW9uRnJhbWVPZmZz
ZXQgPD0gZGVzdGluYXRpb25MZW5ndGggJiYgZGVzdGluYXRpb25GcmFtZU9mZnNldCArIG51bWJl
ck9mRnJhbWVzIDw9IGRlc3RpbmF0aW9uTGVuZ3RoOwotICAgIEFTU0VSVChpc09mZnNldEdvb2Qp
OwotICAgIGlmICghaXNPZmZzZXRHb29kKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBQb3Rl
bnRpYWxseSB6ZXJvIG91dCBpbml0aWFsIGZyYW1lcyBsZWFkaW5nIHVwIHRvIHRoZSBvZmZzZXQu
Ci0gICAgaWYgKGRlc3RpbmF0aW9uRnJhbWVPZmZzZXQpIHsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgCi0gICAgICAgICAgICBtZW1zZXQo
bV9kZXN0aW5hdGlvbkNoYW5uZWxzW2ldLCAwLCBzaXplb2YoZmxvYXQpICogZGVzdGluYXRpb25G
cmFtZU9mZnNldCk7Ci0gICAgfQotCi0gICAgLy8gT2Zmc2V0IHRoZSBwb2ludGVycyB0byB0aGUg
Y29ycmVjdCBvZmZzZXQgZnJhbWUuCi0gICAgdW5zaWduZWQgd3JpdGVJbmRleCA9IGRlc3RpbmF0
aW9uRnJhbWVPZmZzZXQ7Ci0KLSAgICBzaXplX3QgYnVmZmVyTGVuZ3RoID0gYnVmZmVyKCktPmxl
bmd0aCgpOwotICAgIGRvdWJsZSBidWZmZXJTYW1wbGVSYXRlID0gYnVmZmVyKCktPnNhbXBsZVJh
dGUoKTsKLQotICAgIC8vIENhbGN1bGF0ZSB0aGUgc3RhcnQgYW5kIGVuZCBmcmFtZXMgaW4gb3Vy
IGJ1ZmZlciB0aGF0IHdlIHdhbnQgdG8gcGxheS4KLSAgICAvLyBJZiBtX2lzR3JhaW4gaXMgdHJ1
ZSwgdGhlbiB3ZSB3aWxsIGJlIHBsYXlpbmcgYSBwb3J0aW9uIG9mIHRoZSB0b3RhbCBidWZmZXIu
Ci0gICAgdW5zaWduZWQgc3RhcnRGcmFtZSA9IG1faXNHcmFpbiA/IEF1ZGlvVXRpbGl0aWVzOjp0
aW1lVG9TYW1wbGVGcmFtZShtX2dyYWluT2Zmc2V0LCBidWZmZXJTYW1wbGVSYXRlKSA6IDA7Ci0K
LSAgICAvLyBBdm9pZCBjb252ZXJ0aW5nIGZyb20gdGltZSB0byBzYW1wbGUtZnJhbWVzIHR3aWNl
IGJ5IGNvbXB1dGluZwotICAgIC8vIHRoZSBncmFpbiBlbmQgdGltZSBmaXJzdCBiZWZvcmUgY29t
cHV0aW5nIHRoZSBzYW1wbGUgZnJhbWUuCi0gICAgdW5zaWduZWQgZW5kRnJhbWUgPSBtX2lzR3Jh
aW4gPyBBdWRpb1V0aWxpdGllczo6dGltZVRvU2FtcGxlRnJhbWUobV9ncmFpbk9mZnNldCArIG1f
Z3JhaW5EdXJhdGlvbiwgYnVmZmVyU2FtcGxlUmF0ZSkgOiBidWZmZXJMZW5ndGg7Ci0gICAgCi0g
ICAgQVNTRVJUKGVuZEZyYW1lID49IHN0YXJ0RnJhbWUpOwotICAgIGlmIChlbmRGcmFtZSA8IHN0
YXJ0RnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB1bnNpZ25lZCBkZWx0YUZyYW1l
cyA9IGVuZEZyYW1lIC0gc3RhcnRGcmFtZTsKLSAgICAKLSAgICAvLyBUaGlzIGlzIGEgSEFDSyB0
byBhbGxvdyBmb3IgSFJURiB0YWlsLXRpbWUgLSBhdm9pZHMgZ2xpdGNoIGF0IGVuZC4KLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50IHRhaWxUaW1lIGZvciBlYWNoIEF1ZGlvTm9kZSBmb3IgYSBtb3Jl
IGdlbmVyYWwgc29sdXRpb24gdG8gdGhpcyBwcm9ibGVtLgotICAgIGlmIChtX2lzR3JhaW4pCi0g
ICAgICAgIGVuZEZyYW1lICs9IDUxMjsKLQotICAgIC8vIERvIHNvbWUgc2FuaXR5IGNoZWNraW5n
LgotICAgIGlmIChzdGFydEZyYW1lID49IGJ1ZmZlckxlbmd0aCkKLSAgICAgICAgc3RhcnRGcmFt
ZSA9ICFidWZmZXJMZW5ndGggPyAwIDogYnVmZmVyTGVuZ3RoIC0gMTsKLSAgICBpZiAoZW5kRnJh
bWUgPiBidWZmZXJMZW5ndGgpCi0gICAgICAgIGVuZEZyYW1lID0gYnVmZmVyTGVuZ3RoOwotICAg
IGlmIChtX3ZpcnR1YWxSZWFkSW5kZXggPj0gZW5kRnJhbWUpCi0gICAgICAgIG1fdmlydHVhbFJl
YWRJbmRleCA9IHN0YXJ0RnJhbWU7IC8vIHJlc2V0IHRvIHN0YXJ0Ci0KLSAgICBkb3VibGUgcGl0
Y2hSYXRlID0gdG90YWxQaXRjaFJhdGUoKTsKLQotICAgIC8vIEdldCBsb2NhbCBjb3B5LgotICAg
IGRvdWJsZSB2aXJ0dWFsUmVhZEluZGV4ID0gbV92aXJ0dWFsUmVhZEluZGV4OwotCi0gICAgLy8g
UmVuZGVyIGxvb3AgLSByZWFkaW5nIGZyb20gdGhlIHNvdXJjZSBidWZmZXIgdG8gdGhlIGRlc3Rp
bmF0aW9uIHVzaW5nIGxpbmVhciBpbnRlcnBvbGF0aW9uLgotICAgIGludCBmcmFtZXNUb1Byb2Nl
c3MgPSBudW1iZXJPZkZyYW1lczsKLQotICAgIGNvbnN0IGZsb2F0Kiogc291cmNlQ2hhbm5lbHMg
PSBtX3NvdXJjZUNoYW5uZWxzLmdldCgpOwotICAgIGZsb2F0KiogZGVzdGluYXRpb25DaGFubmVs
cyA9IG1fZGVzdGluYXRpb25DaGFubmVscy5nZXQoKTsKLQotICAgIC8vIE9wdGltaXplIGZvciB0
aGUgdmVyeSBjb21tb24gY2FzZSBvZiBwbGF5aW5nIGJhY2sgd2l0aCBwaXRjaFJhdGUgPT0gMS4K
LSAgICAvLyBXZSBjYW4gYXZvaWQgdGhlIGxpbmVhciBpbnRlcnBvbGF0aW9uLgotICAgIGlmIChw
aXRjaFJhdGUgPT0gMSAmJiB2aXJ0dWFsUmVhZEluZGV4ID09IGZsb29yKHZpcnR1YWxSZWFkSW5k
ZXgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHJlYWRJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
Pih2aXJ0dWFsUmVhZEluZGV4KTsKLSAgICAgICAgd2hpbGUgKGZyYW1lc1RvUHJvY2VzcyA+IDAp
IHsKLSAgICAgICAgICAgIGludCBmcmFtZXNUb0VuZCA9IGVuZEZyYW1lIC0gcmVhZEluZGV4Owot
ICAgICAgICAgICAgaW50IGZyYW1lc1RoaXNUaW1lID0gbWluKGZyYW1lc1RvUHJvY2VzcywgZnJh
bWVzVG9FbmQpOwotICAgICAgICAgICAgZnJhbWVzVGhpc1RpbWUgPSBtYXgoMCwgZnJhbWVzVGhp
c1RpbWUpOwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZD
aGFubmVsczsgKytpKSAKLSAgICAgICAgICAgICAgICBtZW1jcHkoZGVzdGluYXRpb25DaGFubmVs
c1tpXSArIHdyaXRlSW5kZXgsIHNvdXJjZUNoYW5uZWxzW2ldICsgcmVhZEluZGV4LCBzaXplb2Yo
ZmxvYXQpICogZnJhbWVzVGhpc1RpbWUpOwotCi0gICAgICAgICAgICB3cml0ZUluZGV4ICs9IGZy
YW1lc1RoaXNUaW1lOwotICAgICAgICAgICAgcmVhZEluZGV4ICs9IGZyYW1lc1RoaXNUaW1lOwot
ICAgICAgICAgICAgZnJhbWVzVG9Qcm9jZXNzIC09IGZyYW1lc1RoaXNUaW1lOwotCi0gICAgICAg
ICAgICAvLyBXcmFwLWFyb3VuZC4KLSAgICAgICAgICAgIGlmIChyZWFkSW5kZXggPj0gZW5kRnJh
bWUpIHsKLSAgICAgICAgICAgICAgICByZWFkSW5kZXggLT0gZGVsdGFGcmFtZXM7Ci0gICAgICAg
ICAgICAgICAgaWYgKHJlbmRlclNpbGVuY2VBbmRGaW5pc2hJZk5vdExvb3BpbmcoYnVzLCB3cml0
ZUluZGV4LCBmcmFtZXNUb1Byb2Nlc3MpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB2aXJ0dWFsUmVhZEluZGV4ID0gcmVhZElu
ZGV4OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHdoaWxlIChmcmFtZXNUb1Byb2Nlc3MtLSkgewot
ICAgICAgICAgICAgdW5zaWduZWQgcmVhZEluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZp
cnR1YWxSZWFkSW5kZXgpOwotICAgICAgICAgICAgZG91YmxlIGludGVycG9sYXRpb25GYWN0b3Ig
PSB2aXJ0dWFsUmVhZEluZGV4IC0gcmVhZEluZGV4OwotCi0gICAgICAgICAgICAvLyBGb3IgbGlu
ZWFyIGludGVycG9sYXRpb24gd2UgbmVlZCB0aGUgbmV4dCBzYW1wbGUtZnJhbWUgdG9vLgotICAg
ICAgICAgICAgdW5zaWduZWQgcmVhZEluZGV4MiA9IHJlYWRJbmRleCArIDE7Ci0gICAgICAgICAg
ICBpZiAocmVhZEluZGV4MiA+PSBlbmRGcmFtZSkgewotICAgICAgICAgICAgICAgIGlmIChsb29w
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRvIHdyYXAgYXJvdW5kIGF0
IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLSAgICAgICAgICAgICAgICAgICAgcmVhZEluZGV4MiAt
PSBkZWx0YUZyYW1lczsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgcmVhZEluZGV4MiA9IHJlYWRJbmRleDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly8gRmluYWwgc2FuaXR5IGNoZWNrIG9uIGJ1ZmZlciBhY2Nlc3MuCi0gICAgICAgICAgICAvLyBG
SVhNRTogYXMgYW4gb3B0aW1pemF0aW9uLCB0cnkgdG8gZ2V0IHJpZCBvZiB0aGlzIGlubmVyLWxv
b3AgY2hlY2sgYW5kIHB1dCBhc3NlcnRpb25zIGFuZCBndWFyZHMgYmVmb3JlIHRoZSBsb29wLgot
ICAgICAgICAgICAgaWYgKHJlYWRJbmRleCA+PSBidWZmZXJMZW5ndGggfHwgcmVhZEluZGV4MiA+
PSBidWZmZXJMZW5ndGgpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIC8v
IExpbmVhciBpbnRlcnBvbGF0aW9uLgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgewotICAgICAgICAgICAgICAgIGZsb2F0KiBkZXN0
aW5hdGlvbiA9IGRlc3RpbmF0aW9uQ2hhbm5lbHNbaV07Ci0gICAgICAgICAgICAgICAgY29uc3Qg
ZmxvYXQqIHNvdXJjZSA9IHNvdXJjZUNoYW5uZWxzW2ldOwotCi0gICAgICAgICAgICAgICAgZG91
YmxlIHNhbXBsZTEgPSBzb3VyY2VbcmVhZEluZGV4XTsKLSAgICAgICAgICAgICAgICBkb3VibGUg
c2FtcGxlMiA9IHNvdXJjZVtyZWFkSW5kZXgyXTsKLSAgICAgICAgICAgICAgICBkb3VibGUgc2Ft
cGxlID0gKDEuMCAtIGludGVycG9sYXRpb25GYWN0b3IpICogc2FtcGxlMSArIGludGVycG9sYXRp
b25GYWN0b3IgKiBzYW1wbGUyOwotCi0gICAgICAgICAgICAgICAgZGVzdGluYXRpb25bd3JpdGVJ
bmRleF0gPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHNhbXBsZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB3cml0ZUluZGV4Kys7Ci0KLSAgICAgICAgICAgIHZpcnR1YWxSZWFkSW5kZXgg
Kz0gcGl0Y2hSYXRlOwotCi0gICAgICAgICAgICAvLyBXcmFwLWFyb3VuZCwgcmV0YWluaW5nIHN1
Yi1zYW1wbGUgcG9zaXRpb24gc2luY2UgdmlydHVhbFJlYWRJbmRleCBpcyBmbG9hdGluZy1wb2lu
dC4KLSAgICAgICAgICAgIGlmICh2aXJ0dWFsUmVhZEluZGV4ID49IGVuZEZyYW1lKSB7Ci0gICAg
ICAgICAgICAgICAgdmlydHVhbFJlYWRJbmRleCAtPSBkZWx0YUZyYW1lczsKLQotICAgICAgICAg
ICAgICAgIGlmIChyZW5kZXJTaWxlbmNlQW5kRmluaXNoSWZOb3RMb29waW5nKGJ1cywgd3JpdGVJ
bmRleCwgZnJhbWVzVG9Qcm9jZXNzKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IAotICAgIG1fdmlydHVhbFJlYWRJbmRleCA9IHZp
cnR1YWxSZWFkSW5kZXg7Ci19Ci0KLQotdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnJlc2V0
KCkKLXsKLSAgICBtX3ZpcnR1YWxSZWFkSW5kZXggPSAwOwotICAgIG1fbGFzdEdhaW4gPSBnYWlu
KCktPnZhbHVlKCk7Ci19Ci0KLXZvaWQgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpmaW5pc2goKQot
ewotICAgIGlmICghbV9oYXNGaW5pc2hlZCkgewotICAgICAgICAvLyBMZXQgdGhlIGNvbnRleHQg
ZGVyZWZlcmVuY2UgdGhpcyBBdWRpb05vZGUuCi0gICAgICAgIGNvbnRleHQoKS0+bm90aWZ5Tm9k
ZUZpbmlzaGVkUHJvY2Vzc2luZyh0aGlzKTsKLSAgICAgICAgbV9oYXNGaW5pc2hlZCA9IHRydWU7
Ci0gICAgfQotfQotCi1ib29sIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6c2V0QnVmZmVyKEF1ZGlv
QnVmZmVyKiBidWZmZXIpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICAKLSAg
ICAvLyBUaGUgY29udGV4dCBtdXN0IGJlIGxvY2tlZCBzaW5jZSBjaGFuZ2luZyB0aGUgYnVmZmVy
IGNhbiByZS1jb25maWd1cmUgdGhlIG51bWJlciBvZiBjaGFubmVscyB0aGF0IGFyZSBvdXRwdXQu
Ci0gICAgQXVkaW9Db250ZXh0OjpBdXRvTG9ja2VyIGNvbnRleHRMb2NrZXIoY29udGV4dCgpKTsK
LSAgICAKLSAgICAvLyBUaGlzIHN5bmNocm9uaXplcyB3aXRoIHByb2Nlc3MoKS4KLSAgICBNdXRl
eExvY2tlciBwcm9jZXNzTG9ja2VyKG1fcHJvY2Vzc0xvY2spOwotICAgIAotICAgIGlmIChidWZm
ZXIpIHsKLSAgICAgICAgLy8gRG8gYW55IG5lY2Vzc3NhcnkgcmUtY29uZmlndXJhdGlvbiB0byB0
aGUgYnVmZmVyJ3MgbnVtYmVyIG9mIGNoYW5uZWxzLgotICAgICAgICB1bnNpZ25lZCBudW1iZXJP
ZkNoYW5uZWxzID0gYnVmZmVyLT5udW1iZXJPZkNoYW5uZWxzKCk7Ci0KLSAgICAgICAgaWYgKG51
bWJlck9mQ2hhbm5lbHMgPiBBdWRpb0NvbnRleHQ6Om1heE51bWJlck9mQ2hhbm5lbHMoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBvdXRwdXQoMCktPnNldE51bWJlck9m
Q2hhbm5lbHMobnVtYmVyT2ZDaGFubmVscyk7Ci0KLSAgICAgICAgbV9zb3VyY2VDaGFubmVscyA9
IGFkb3B0QXJyYXlQdHIobmV3IGNvbnN0IGZsb2F0KiBbbnVtYmVyT2ZDaGFubmVsc10pOwotICAg
ICAgICBtX2Rlc3RpbmF0aW9uQ2hhbm5lbHMgPSBhZG9wdEFycmF5UHRyKG5ldyBmbG9hdCogW251
bWJlck9mQ2hhbm5lbHNdKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
YmVyT2ZDaGFubmVsczsgKytpKSAKLSAgICAgICAgICAgIG1fc291cmNlQ2hhbm5lbHNbaV0gPSBi
dWZmZXItPmdldENoYW5uZWxEYXRhKGkpLT5kYXRhKCk7Ci0gICAgfQotCi0gICAgbV92aXJ0dWFs
UmVhZEluZGV4ID0gMDsKLSAgICBtX2J1ZmZlciA9IGJ1ZmZlcjsKLSAgICAKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdW5zaWduZWQgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpudW1iZXJPZkNoYW5u
ZWxzKCkKLXsKLSAgICByZXR1cm4gb3V0cHV0KDApLT5udW1iZXJPZkNoYW5uZWxzKCk7Ci19Ci0K
LXZvaWQgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpub3RlT24oZG91YmxlIHdoZW4pCi17Ci0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV9pc1BsYXlpbmcpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1faXNHcmFpbiA9IGZhbHNlOwotICAgIG1fc3RhcnRUaW1lID0gd2hlbjsK
LSAgICBtX3ZpcnR1YWxSZWFkSW5kZXggPSAwOwotICAgIG1faXNQbGF5aW5nID0gdHJ1ZTsKLX0K
LQotdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6Om5vdGVHcmFpbk9uKGRvdWJsZSB3aGVuLCBk
b3VibGUgZ3JhaW5PZmZzZXQsIGRvdWJsZSBncmFpbkR1cmF0aW9uKQotewotICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1faXNQbGF5aW5nKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIWJ1ZmZlcigpKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIC8vIERv
IHNhbml0eSBjaGVja2luZyBvZiBncmFpbiBwYXJhbWV0ZXJzIHZlcnN1cyBidWZmZXIgc2l6ZS4K
LSAgICBkb3VibGUgYnVmZmVyRHVyYXRpb24gPSBidWZmZXIoKS0+ZHVyYXRpb24oKTsKLQotICAg
IGlmIChncmFpbkR1cmF0aW9uID4gYnVmZmVyRHVyYXRpb24pCi0gICAgICAgIHJldHVybjsgLy8g
RklYTUU6IG1heWJlIHNob3VsZCB0aHJvdyBleGNlcHRpb24gLSBjb25zaWRlciBpbiBzcGVjaWZp
Y2F0aW9uLgotICAgIAotICAgIGRvdWJsZSBtYXhHcmFpbk9mZnNldCA9IGJ1ZmZlckR1cmF0aW9u
IC0gZ3JhaW5EdXJhdGlvbjsKLSAgICBtYXhHcmFpbk9mZnNldCA9IG1heCgwLjAsIG1heEdyYWlu
T2Zmc2V0KTsKLQotICAgIGdyYWluT2Zmc2V0ID0gbWF4KDAuMCwgZ3JhaW5PZmZzZXQpOwotICAg
IGdyYWluT2Zmc2V0ID0gbWluKG1heEdyYWluT2Zmc2V0LCBncmFpbk9mZnNldCk7Ci0gICAgbV9n
cmFpbk9mZnNldCA9IGdyYWluT2Zmc2V0OwotCi0gICAgbV9ncmFpbkR1cmF0aW9uID0gZ3JhaW5E
dXJhdGlvbjsKLSAgICAKLSAgICBtX2lzR3JhaW4gPSB0cnVlOwotICAgIG1fc3RhcnRUaW1lID0g
d2hlbjsKLQotICAgIC8vIFdlIGNhbGwgdGltZVRvU2FtcGxlRnJhbWUgaGVyZSBzaW5jZSBhdCBw
bGF5YmFja1JhdGUgPT0gMSB3ZSBkb24ndCB3YW50IHRvIGdvIHRocm91Z2ggbGluZWFyIGludGVy
cG9sYXRpb24KLSAgICAvLyBhdCBhIHN1Yi1zYW1wbGUgcG9zaXRpb24gc2luY2UgaXQgd2lsbCBk
ZWdyYWRlIHRoZSBxdWFsaXR5LgotICAgIC8vIFdoZW4gYWxpZ25lZCB0byB0aGUgc2FtcGxlLWZy
YW1lIHRoZSBwbGF5YmFjayB3aWxsIGJlIGlkZW50aWNhbCB0byB0aGUgUENNIGRhdGEgc3RvcmVk
IGluIHRoZSBidWZmZXIuCi0gICAgLy8gU2luY2UgcGxheWJhY2tSYXRlID09IDEgaXMgdmVyeSBj
b21tb24sIGl0J3Mgd29ydGggY29uc2lkZXJpbmcgcXVhbGl0eS4KLSAgICBtX3ZpcnR1YWxSZWFk
SW5kZXggPSBBdWRpb1V0aWxpdGllczo6dGltZVRvU2FtcGxlRnJhbWUobV9ncmFpbk9mZnNldCwg
YnVmZmVyKCktPnNhbXBsZVJhdGUoKSk7Ci0gICAgCi0gICAgbV9pc1BsYXlpbmcgPSB0cnVlOwot
fQotCi12b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6bm90ZU9mZihkb3VibGUgd2hlbikKLXsK
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmICghbV9pc1BsYXlpbmcpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICB3aGVuID0gbWF4KDAuMCwgd2hlbik7Ci0gICAgbV9lbmRU
aW1lID0gd2hlbjsKLX0KLQotZG91YmxlIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6dG90YWxQaXRj
aFJhdGUoKQotewotICAgIGRvdWJsZSBkb3BwbGVyUmF0ZSA9IDEuMDsKLSAgICBpZiAobV9wYW5u
ZXJOb2RlLmdldCgpKQotICAgICAgICBkb3BwbGVyUmF0ZSA9IG1fcGFubmVyTm9kZS0+ZG9wcGxl
clJhdGUoKTsKLSAgICAKLSAgICAvLyBJbmNvcnBvcmF0ZSBidWZmZXIncyBzYW1wbGUtcmF0ZSB2
ZXJzdXMgQXVkaW9Db250ZXh0J3Mgc2FtcGxlLXJhdGUuCi0gICAgLy8gTm9ybWFsbHkgaXQncyBu
b3QgYW4gaXNzdWUgYmVjYXVzZSBidWZmZXJzIGFyZSBsb2FkZWQgYXQgdGhlIEF1ZGlvQ29udGV4
dCdzIHNhbXBsZS1yYXRlLCBidXQgd2UgY2FuIGhhbmRsZSBpdCBpbiBhbnkgY2FzZS4KLSAgICBk
b3VibGUgc2FtcGxlUmF0ZUZhY3RvciA9IDEuMDsKLSAgICBpZiAoYnVmZmVyKCkpCi0gICAgICAg
IHNhbXBsZVJhdGVGYWN0b3IgPSBidWZmZXIoKS0+c2FtcGxlUmF0ZSgpIC8gc2FtcGxlUmF0ZSgp
OwotICAgIAotICAgIGRvdWJsZSBiYXNlUGl0Y2hSYXRlID0gcGxheWJhY2tSYXRlKCktPnZhbHVl
KCk7Ci0KLSAgICBkb3VibGUgdG90YWxSYXRlID0gZG9wcGxlclJhdGUgKiBzYW1wbGVSYXRlRmFj
dG9yICogYmFzZVBpdGNoUmF0ZTsKLQotICAgIC8vIFNhbml0eSBjaGVjayB0aGUgdG90YWwgcmF0
ZS4gIEl0J3MgdmVyeSBpbXBvcnRhbnQgdGhhdCB0aGUgcmVzYW1wbGVyIG5vdCBnZXQgYW55IGJh
ZCByYXRlIHZhbHVlcy4KLSAgICB0b3RhbFJhdGUgPSBtYXgoMC4wLCB0b3RhbFJhdGUpOwotICAg
IGlmICghdG90YWxSYXRlKQotICAgICAgICB0b3RhbFJhdGUgPSAxOyAvLyB6ZXJvIHJhdGUgaXMg
Y29uc2lkZXJlZCBpbGxlZ2FsCi0gICAgdG90YWxSYXRlID0gbWluKE1heFJhdGUsIHRvdGFsUmF0
ZSk7Ci0gICAgCi0gICAgYm9vbCBpc1RvdGFsUmF0ZVZhbGlkID0gIWlzbmFuKHRvdGFsUmF0ZSkg
JiYgIWlzaW5mKHRvdGFsUmF0ZSk7Ci0gICAgQVNTRVJUKGlzVG90YWxSYXRlVmFsaWQpOwotICAg
IGlmICghaXNUb3RhbFJhdGVWYWxpZCkKLSAgICAgICAgdG90YWxSYXRlID0gMS4wOwotCi0gICAg
cmV0dXJuIHRvdGFsUmF0ZTsKLX0KLQotYm9vbCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6Omxvb3Bp
bmcoKQotewotICAgIHN0YXRpYyBib29sIGZpcnN0VGltZSA9IHRydWU7Ci0gICAgaWYgKGZpcnN0
VGltZSAmJiBjb250ZXh0KCkgJiYgY29udGV4dCgpLT5kb2N1bWVudCgpKSB7Ci0gICAgICAgIGNv
bnRleHQoKS0+ZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBM
b2dNZXNzYWdlVHlwZSwgV2FybmluZ01lc3NhZ2VMZXZlbCwgIkF1ZGlvQnVmZmVyU291cmNlTm9k
ZSAnbG9vcGluZycgYXR0cmlidXRlIGlzIGRlcHJlY2F0ZWQuICBVc2UgJ2xvb3AnIGluc3RlYWQu
Iik7Ci0gICAgICAgIGZpcnN0VGltZSA9IGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBtX2lz
TG9vcGluZzsKLX0KLQotdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnNldExvb3BpbmcoYm9v
bCBsb29waW5nKQotewotICAgIHN0YXRpYyBib29sIGZpcnN0VGltZSA9IHRydWU7Ci0gICAgaWYg
KGZpcnN0VGltZSAmJiBjb250ZXh0KCkgJiYgY29udGV4dCgpLT5kb2N1bWVudCgpKSB7Ci0gICAg
ICAgIGNvbnRleHQoKS0+ZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoSlNNZXNzYWdlU291
cmNlLCBMb2dNZXNzYWdlVHlwZSwgV2FybmluZ01lc3NhZ2VMZXZlbCwgIkF1ZGlvQnVmZmVyU291
cmNlTm9kZSAnbG9vcGluZycgYXR0cmlidXRlIGlzIGRlcHJlY2F0ZWQuICBVc2UgJ2xvb3AnIGlu
c3RlYWQuIik7Ci0gICAgICAgIGZpcnN0VGltZSA9IGZhbHNlOwotICAgIH0KLQotICAgIG1faXNM
b29waW5nID0gbG9vcGluZzsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
QnVmZmVyU291cmNlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvQnVmZmVyU291cmNlTm9kZS5oCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSwxNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQXVkaW9CdWZmZXJTb3VyY2VOb2Rl
X2gKLSNkZWZpbmUgQXVkaW9CdWZmZXJTb3VyY2VOb2RlX2gKLQotI2luY2x1ZGUgIkF1ZGlvQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiQXVkaW9CdXMuaCIKLSNpbmNsdWRlICJBdWRpb0dhaW4uaCIKLSNp
bmNsdWRlICJBdWRpb1Bhbm5lck5vZGUuaCIKLSNpbmNsdWRlICJBdWRpb1NvdXJjZU5vZGUuaCIK
LSNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9Db250ZXh0OwotCi0vLyBBdWRpb0J1
ZmZlclNvdXJjZU5vZGUgaXMgYW4gQXVkaW9Ob2RlIHJlcHJlc2VudGluZyBhbiBhdWRpbyBzb3Vy
Y2UgZnJvbSBhbiBpbi1tZW1vcnkgYXVkaW8gYXNzZXQgcmVwcmVzZW50ZWQgYnkgYW4gQXVkaW9C
dWZmZXIuCi0vLyBJdCBnZW5lcmFsbHkgd2lsbCBiZSB1c2VkIGZvciBzaG9ydCBzb3VuZHMgd2hp
Y2ggcmVxdWlyZSBhIGhpZ2ggZGVncmVlIG9mIHNjaGVkdWxpbmcgZmxleGliaWxpdHkgKGNhbiBw
bGF5YmFjayBpbiByaHl0aG1pY2FsbHkgcGVyZmVjdCB3YXlzKS4KLQotY2xhc3MgQXVkaW9CdWZm
ZXJTb3VyY2VOb2RlIDogcHVibGljIEF1ZGlvU291cmNlTm9kZSB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJTb3VyY2VOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0
KiwgZmxvYXQgc2FtcGxlUmF0ZSk7Ci0KLSAgICB2aXJ0dWFsIH5BdWRpb0J1ZmZlclNvdXJjZU5v
ZGUoKTsKLSAgICAKLSAgICAvLyBBdWRpb05vZGUKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzcyhz
aXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKLSAgICAK
LSAgICAvLyBzZXRCdWZmZXIoKSBpcyBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLiAgVGhpcyBp
cyB0aGUgYnVmZmVyIHdlIHVzZSBmb3IgcGxheWJhY2suCi0gICAgLy8gcmV0dXJucyB0cnVlIG9u
IHN1Y2Nlc3MuCi0gICAgYm9vbCBzZXRCdWZmZXIoQXVkaW9CdWZmZXIqKTsKLSAgICBBdWRpb0J1
ZmZlciogYnVmZmVyKCkgeyByZXR1cm4gbV9idWZmZXIuZ2V0KCk7IH0KLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgLy8gbnVtYmVyT2ZDaGFubmVscygpIHJldHVybnMgdGhlIG51bWJlciBvZiBv
dXRwdXQgY2hhbm5lbHMuICBUaGlzIHZhbHVlIGVxdWFscyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxz
IGZyb20gdGhlIGJ1ZmZlci4KLSAgICAvLyBJZiBhIG5ldyBidWZmZXIgaXMgc2V0IHdpdGggYSBk
aWZmZXJlbnQgbnVtYmVyIG9mIGNoYW5uZWxzLCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBkeW5hbWlj
YWxseSBjaGFuZ2UuCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscygpOwotICAgICAgICAg
ICAgICAgICAgICAKLSAgICAvLyBQbGF5LXN0YXRlCi0gICAgLy8gbm90ZU9uKCksIG5vdGVHcmFp
bk9uKCksIGFuZCBub3RlT2ZmKCkgbXVzdCBhbGwgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhy
ZWFkLgotICAgIHZvaWQgbm90ZU9uKGRvdWJsZSB3aGVuKTsKLSAgICB2b2lkIG5vdGVHcmFpbk9u
KGRvdWJsZSB3aGVuLCBkb3VibGUgZ3JhaW5PZmZzZXQsIGRvdWJsZSBncmFpbkR1cmF0aW9uKTsK
LSAgICB2b2lkIG5vdGVPZmYoZG91YmxlIHdoZW4pOwotCi0gICAgLy8gTm90ZTogdGhlIGF0dHJp
YnV0ZSB3YXMgb3JpZ2luYWxseSBleHBvc2VkIGFzIC5sb29waW5nLCBidXQgdG8gYmUgbW9yZSBj
b25zaXN0ZW50IGluIG5hbWluZyB3aXRoIDxhdWRpbz4KLSAgICAvLyBhbmQgd2l0aCBob3cgaXQn
cyBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmljYXRpb24sIHRoZSBwcm9wZXIgYXR0cmlidXRlIG5h
bWUgaXMgLmxvb3AKLSAgICAvLyBUaGUgb2xkIGF0dHJpYnV0ZSBpcyBrZXB0IGZvciBiYWNrd2Fy
ZHMgY29tcGF0aWJpbGl0eS4KLSAgICBib29sIGxvb3AoKSBjb25zdCB7IHJldHVybiBtX2lzTG9v
cGluZzsgfQotICAgIHZvaWQgc2V0TG9vcChib29sIGxvb3BpbmcpIHsgbV9pc0xvb3BpbmcgPSBs
b29waW5nOyB9Ci0KLSAgICAvLyBEZXByZWNhdGVkLgotICAgIGJvb2wgbG9vcGluZygpOwotICAg
IHZvaWQgc2V0TG9vcGluZyhib29sKTsKLSAgICAKLSAgICBBdWRpb0dhaW4qIGdhaW4oKSB7IHJl
dHVybiBtX2dhaW4uZ2V0KCk7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgQXVkaW9QYXJhbSogcGxheWJhY2tSYXRlKCkgeyByZXR1cm4gbV9wbGF5YmFja1Jh
dGUuZ2V0KCk7IH0KLQotICAgIC8vIElmIGEgcGFubmVyIG5vZGUgaXMgc2V0LCB0aGVuIHdlIGNh
biBpbmNvcnBvcmF0ZSBkb3BwbGVyIHNoaWZ0IGludG8gdGhlIHBsYXliYWNrIHBpdGNoIHJhdGUu
Ci0gICAgdm9pZCBzZXRQYW5uZXJOb2RlKFBhc3NSZWZQdHI8QXVkaW9QYW5uZXJOb2RlPiBwYW5u
ZXJOb2RlKSB7IG1fcGFubmVyTm9kZSA9IHBhbm5lck5vZGU7IH0KLQotcHJpdmF0ZToKLSAgICBB
dWRpb0J1ZmZlclNvdXJjZU5vZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7Ci0K
LSAgICB2b2lkIHJlbmRlckZyb21CdWZmZXIoQXVkaW9CdXMqLCB1bnNpZ25lZCBkZXN0aW5hdGlv
bkZyYW1lT2Zmc2V0LCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMpOwotCi0gICAgLy8gUmVuZGVyIHNp
bGVuY2Ugc3RhcnRpbmcgZnJvbSAiaW5kZXgiIGZyYW1lIGluIEF1ZGlvQnVzLgotICAgIGlubGlu
ZSBib29sIHJlbmRlclNpbGVuY2VBbmRGaW5pc2hJZk5vdExvb3BpbmcoQXVkaW9CdXMqLCB1bnNp
Z25lZCBpbmRleCwgc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7Ci0KLSAgICAvLyBtX2J1ZmZlciBo
b2xkcyB0aGUgc2FtcGxlIGRhdGEgd2hpY2ggdGhpcyBub2RlIG91dHB1dHMuCi0gICAgUmVmUHRy
PEF1ZGlvQnVmZmVyPiBtX2J1ZmZlcjsKLQotICAgIC8vIFBvaW50ZXJzIGZvciB0aGUgYnVmZmVy
IGFuZCBkZXN0aW5hdGlvbi4KLSAgICBPd25BcnJheVB0cjxjb25zdCBmbG9hdCo+IG1fc291cmNl
Q2hhbm5lbHM7Ci0gICAgT3duQXJyYXlQdHI8ZmxvYXQqPiBtX2Rlc3RpbmF0aW9uQ2hhbm5lbHM7
Ci0KLSAgICAvLyBVc2VkIGZvciB0aGUgImdhaW4iIGFuZCAicGxheWJhY2tSYXRlIiBhdHRyaWJ1
dGVzLgotICAgIFJlZlB0cjxBdWRpb0dhaW4+IG1fZ2FpbjsKLSAgICBSZWZQdHI8QXVkaW9QYXJh
bT4gbV9wbGF5YmFja1JhdGU7Ci0KLSAgICAvLyBtX2lzUGxheWluZyBpcyBzZXQgdG8gdHJ1ZSB3
aGVuIG5vdGVPbigpIG9yIG5vdGVHcmFpbk9uKCkgaXMgY2FsbGVkLgotICAgIGJvb2wgbV9pc1Bs
YXlpbmc7Ci0KLSAgICAvLyBJZiBtX2lzTG9vcGluZyBpcyBmYWxzZSwgdGhlbiB0aGlzIG5vZGUg
d2lsbCBiZSBkb25lIHBsYXlpbmcgYW5kIGJlY29tZSBpbmFjdGl2ZSBhZnRlciBpdCByZWFjaGVz
IHRoZSBlbmQgb2YgdGhlIHNhbXBsZSBkYXRhIGluIHRoZSBidWZmZXIuCi0gICAgLy8gSWYgdHJ1
ZSwgaXQgd2lsbCB3cmFwIGFyb3VuZCB0byB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlciBlYWNoIHRp
bWUgaXQgcmVhY2hlcyB0aGUgZW5kLgotICAgIGJvb2wgbV9pc0xvb3Bpbmc7Ci0KLSAgICAvLyBU
aGlzIG5vZGUgaXMgY29uc2lkZXJlZCBmaW5pc2hlZCB3aGVuIGl0IHJlYWNoZXMgdGhlIGVuZCBv
ZiB0aGUgYnVmZmVyJ3Mgc2FtcGxlIGRhdGEgYWZ0ZXIgbm90ZU9uKCkgaGFzIGJlZW4gY2FsbGVk
LgotICAgIC8vIFRoaXMgd2lsbCBvbmx5IGJlIHNldCB0byB0cnVlIGlmIG1faXNMb29waW5nID09
IGZhbHNlLgotICAgIGJvb2wgbV9oYXNGaW5pc2hlZDsKLQotICAgIC8vIG1fc3RhcnRUaW1lIGlz
IHRoZSB0aW1lIHRvIHN0YXJ0IHBsYXlpbmcgYmFzZWQgb24gdGhlIGNvbnRleHQncyB0aW1lbGlu
ZSAoMC4wIG9yIGEgdGltZSBsZXNzIHRoYW4gdGhlIGNvbnRleHQncyBjdXJyZW50IHRpbWUgbWVh
bnMgIm5vdyIpLgotICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsgLy8gaW4gc2Vjb25kcwotCi0gICAg
Ly8gbV9lbmRUaW1lIGlzIHRoZSB0aW1lIHRvIHN0b3AgcGxheWluZyBiYXNlZCBvbiB0aGUgY29u
dGV4dCdzIHRpbWVsaW5lICgwLjAgb3IgYSB0aW1lIGxlc3MgdGhhbiB0aGUgY29udGV4dCdzIGN1
cnJlbnQgdGltZSBtZWFucyAibm93IikuCi0gICAgLy8gSWYgaXQgaGFzbid0IGJlZW4gc2V0IGV4
cGxpY2l0bHksIHRoZW4gdGhlIHNvdW5kIHdpbGwgbm90IHN0b3AgcGxheWluZyAoaWYgbG9vcGlu
Zykgb3Igd2lsbCBzdG9wIHdoZW4gdGhlIGVuZCBvZiB0aGUgQXVkaW9CdWZmZXIKLSAgICAvLyBo
YXMgYmVlbiByZWFjaGVkLgotICAgIGRvdWJsZSBtX2VuZFRpbWU7IC8vIGluIHNlY29uZHMKLSAg
ICAKLSAgICAvLyBtX3ZpcnR1YWxSZWFkSW5kZXggaXMgYSBzYW1wbGUtZnJhbWUgaW5kZXggaW50
byBvdXIgYnVmZmVyIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBwbGF5YmFjayBwb3NpdGlvbi4K
LSAgICAvLyBTaW5jZSBpdCdzIGZsb2F0aW5nLXBvaW50LCBpdCBoYXMgc3ViLXNhbXBsZSBhY2N1
cmFjeS4KLSAgICBkb3VibGUgbV92aXJ0dWFsUmVhZEluZGV4OwotCi0gICAgLy8gR3JhbnVsYXIg
cGxheWJhY2sKLSAgICBib29sIG1faXNHcmFpbjsKLSAgICBkb3VibGUgbV9ncmFpbk9mZnNldDsg
Ly8gaW4gc2Vjb25kcwotICAgIGRvdWJsZSBtX2dyYWluRHVyYXRpb247IC8vIGluIHNlY29uZHMK
LQotICAgIC8vIHRvdGFsUGl0Y2hSYXRlKCkgcmV0dXJucyB0aGUgaW5zdGFudGFuZW91cyBwaXRj
aCByYXRlIChub24tdGltZSBwcmVzZXJ2aW5nKS4KLSAgICAvLyBJdCBpbmNvcnBvcmF0ZXMgdGhl
IGJhc2UgcGl0Y2ggcmF0ZSwgYW55IHNhbXBsZS1yYXRlIGNvbnZlcnNpb24gZmFjdG9yIGZyb20g
dGhlIGJ1ZmZlciwgYW5kIGFueSBkb3BwbGVyIHNoaWZ0IGZyb20gYW4gYXNzb2NpYXRlZCBwYW5u
ZXIgbm9kZS4KLSAgICBkb3VibGUgdG90YWxQaXRjaFJhdGUoKTsKLQotICAgIC8vIG1fbGFzdEdh
aW4gcHJvdmlkZXMgY29udGludWl0eSB3aGVuIHdlIGR5bmFtaWNhbGx5IGFkanVzdCB0aGUgZ2Fp
bi4KLSAgICBmbG9hdCBtX2xhc3RHYWluOwotICAgIAotICAgIC8vIFdlIG9wdGlvbmFsbHkga2Vl
cCB0cmFjayBvZiBhIHBhbm5lciBub2RlIHdoaWNoIGhhcyBhIGRvcHBsZXIgc2hpZnQgdGhhdCBp
cyBpbmNvcnBvcmF0ZWQgaW50byB0aGUgcGl0Y2ggcmF0ZS4KLSAgICBSZWZQdHI8QXVkaW9QYW5u
ZXJOb2RlPiBtX3Bhbm5lck5vZGU7Ci0KLSAgICAvLyBUaGlzIHN5bmNocm9uaXplcyBwcm9jZXNz
KCkgd2l0aCBzZXRCdWZmZXIoKSB3aGljaCBjYW4gY2F1c2UgZHluYW1pYyBjaGFubmVsIGNvdW50
IGNoYW5nZXMuCi0gICAgbXV0YWJsZSBNdXRleCBtX3Byb2Nlc3NMb2NrOwotCi0gICAgLy8gSGFu
ZGxlcyB0aGUgdGltZSB3aGVuIHdlIHJlYWNoIHRoZSBlbmQgb2Ygc2FtcGxlIGRhdGEgKG5vbi1s
b29waW5nKSBvciB0aGUgbm90ZU9mZigpIHRpbWUgaGFzIGJlZW4gcmVhY2hlZC4KLSAgICB2b2lk
IGZpbmlzaCgpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQXVk
aW9CdWZmZXJTb3VyY2VOb2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
QnVmZmVyU291cmNlTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlkbAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlkbAkod29ya2luZyBjb3B5
KQpAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGF1ZGlvIHsKLSAgICAvLyBB
IGNhY2hlZCAobm9uLXN0cmVhbWVkKSwgbWVtb3J5LXJlc2lkZW50IGF1ZGlvIHNvdXJjZQotICAg
IGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKLSAgICAgICAgSlNH
ZW5lcmF0ZVRvSlNPYmplY3QKLSAgICBdIEF1ZGlvQnVmZmVyU291cmNlTm9kZSA6IEF1ZGlvU291
cmNlTm9kZSB7Ci0gICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tU2V0dGVyXSBBdWRpb0J1ZmZlciBi
dWZmZXIKLSAgICAgICAgICAgIHNldHRlciByYWlzZXMgKERPTUV4Y2VwdGlvbik7Ci0KLSAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlvR2FpbiBnYWluOwotICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgQXVkaW9QYXJhbSBwbGF5YmFja1JhdGU7Ci0KLSAgICAgICAgYXR0cmlidXRlIGJv
b2xlYW4gbG9vcDsgLy8gVGhpcyBpcyB0aGUgcHJvcGVyIGF0dHJpYnV0ZSBuYW1lIGZyb20gdGhl
IHNwZWNpZmljYXRpb24uCi0gICAgICAgIGF0dHJpYnV0ZSBib29sZWFuIGxvb3Bpbmc7IC8vIFRo
aXMgaXMgYW4gYWxpYXMgZm9yIHRoZSAubG9vcCBhdHRyaWJ1dGUgZm9yIGJhY2t3YXJkcyBjb21w
YXRpYmlsaXR5LgotCi0gICAgICAgIHZvaWQgbm90ZU9uKGluIGRvdWJsZSB3aGVuKTsKLSAgICAg
ICAgdm9pZCBub3RlR3JhaW5PbihpbiBkb3VibGUgd2hlbiwgaW4gZG91YmxlIGdyYWluT2Zmc2V0
LCBpbiBkb3VibGUgZ3JhaW5EdXJhdGlvbik7Ci0gICAgICAgIHZvaWQgbm90ZU9mZihpbiBkb3Vi
bGUgd2hlbik7Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
Q2hhbm5lbE1lcmdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9DaGFubmVsTWVyZ2VyLmNwcAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwx
MTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8p
Ci0KLSNpbmNsdWRlICJBdWRpb0NoYW5uZWxNZXJnZXIuaCIKLQotI2luY2x1ZGUgIkF1ZGlvQ29u
dGV4dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0LmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2Rl
T3V0cHV0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLS8vIFRoaXMgaXMgY29uc2lk
ZXJpbmcgdGhhdCA1LjEgKDYgY2hhbm5lbHMpIGlzIHRoZSBsYXJnZXN0IHdlJ2xsIGV2ZXIgZGVh
bCB3aXRoLgotLy8gSXQgY2FuIGVhc2lseSBiZSBpbmNyZWFzZWQgdG8gc3VwcG9ydCBtb3JlIGlm
IHRoZSB3ZWIgYXVkaW8gc3BlY2lmaWNhdGlvbiBpcyB1cGRhdGVkLgotY29uc3QgdW5zaWduZWQg
TnVtYmVyT2ZJbnB1dHMgPSA2OwotCi1BdWRpb0NoYW5uZWxNZXJnZXI6OkF1ZGlvQ2hhbm5lbE1l
cmdlcihBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBBdWRp
b05vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkKLXsKLSAgICAvLyBDcmVhdGUgYSBmaXhlZCBudW1i
ZXIgb2YgaW5wdXRzIChhYmxlIHRvIGhhbmRsZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hhbm5l
bHMgd2UgZGVhbCB3aXRoKS4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTnVtYmVyT2ZJ
bnB1dHM7ICsraSkKLSAgICAgICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0
KHRoaXMpKSk7Ci0KLSAgICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZU91dHB1dCh0
aGlzLCAxKSkpOwotICAgIAotICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlQ2hhbm5lbE1lcmdlcik7
Ci0gICAgCi0gICAgaW5pdGlhbGl6ZSgpOwotfQotCi12b2lkIEF1ZGlvQ2hhbm5lbE1lcmdlcjo6
cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIEF1ZGlvTm9kZU91dHB1dCog
b3V0cHV0ID0gdGhpcy0+b3V0cHV0KDApOwotICAgIEFTU0VSVChvdXRwdXQpOwotICAgIEFTU0VS
VF9VTlVTRUQoZnJhbWVzVG9Qcm9jZXNzLCBmcmFtZXNUb1Byb2Nlc3MgPT0gb3V0cHV0LT5idXMo
KS0+bGVuZ3RoKCkpOyAgICAKLSAgICAKLSAgICAvLyBNZXJnZSBhbGwgdGhlIGNoYW5uZWxzIGZy
b20gYWxsIHRoZSBpbnB1dHMgaW50byBvbmUgb3V0cHV0LgotICAgIHVuc2lnbmVkIG91dHB1dENo
YW5uZWxJbmRleCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSW5w
dXRzKCk7ICsraSkgewotICAgICAgICBBdWRpb05vZGVJbnB1dCogaW5wdXQgPSB0aGlzLT5pbnB1
dChpKTsKLSAgICAgICAgaWYgKGlucHV0LT5pc0Nvbm5lY3RlZCgpKSB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZklucHV0Q2hhbm5lbHMgPSBpbnB1dC0+YnVzKCktPm51bWJlck9mQ2hh
bm5lbHMoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gTWVyZ2UgY2hhbm5lbHMgZnJv
bSB0aGlzIHBhcnRpY3VsYXIgaW5wdXQuCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAw
OyBqIDwgbnVtYmVyT2ZJbnB1dENoYW5uZWxzOyArK2opIHsKLSAgICAgICAgICAgICAgICBBdWRp
b0NoYW5uZWwqIGlucHV0Q2hhbm5lbCA9IGlucHV0LT5idXMoKS0+Y2hhbm5lbChqKTsKLSAgICAg
ICAgICAgICAgICBBdWRpb0NoYW5uZWwqIG91dHB1dENoYW5uZWwgPSBvdXRwdXQtPmJ1cygpLT5j
aGFubmVsKG91dHB1dENoYW5uZWxJbmRleCk7Ci0gICAgICAgICAgICAgICAgb3V0cHV0Q2hhbm5l
bC0+Y29weUZyb20oaW5wdXRDaGFubmVsKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICArK291dHB1dENoYW5uZWxJbmRleDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLSAgICAKLSAgICBBU1NFUlQob3V0cHV0Q2hhbm5lbEluZGV4ID09IG91dHB1dC0+bnVtYmVy
T2ZDaGFubmVscygpKTsKLX0KLQotdm9pZCBBdWRpb0NoYW5uZWxNZXJnZXI6OnJlc2V0KCkKLXsK
LX0KLQotLy8gQW55IHRpbWUgYSBjb25uZWN0aW9uIG9yIGRpc2Nvbm5lY3Rpb24gaGFwcGVucyBv
biBhbnkgb2Ygb3VyIGlucHV0cywgd2UgcG90ZW50aWFsbHkgbmVlZCB0byBjaGFuZ2UgdGhlCi0v
LyBudW1iZXIgb2YgY2hhbm5lbHMgb2Ygb3VyIG91dHB1dC4KLXZvaWQgQXVkaW9DaGFubmVsTWVy
Z2VyOjpjaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1dChBdWRpb05vZGVJbnB1dCogaW5wdXQp
Ci17Ci0gICAgQVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgpICYmIGNvbnRleHQoKS0+
aXNHcmFwaE93bmVyKCkpOwotCi0gICAgLy8gQ291bnQgaG93IG1hbnkgY2hhbm5lbHMgd2UgaGF2
ZSBhbGwgdG9nZXRoZXIgZnJvbSBhbGwgb2YgdGhlIGlucHV0cy4KLSAgICB1bnNpZ25lZCBudW1i
ZXJPZk91dHB1dENoYW5uZWxzID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
YmVyT2ZJbnB1dHMoKTsgKytpKSB7Ci0gICAgICAgIEF1ZGlvTm9kZUlucHV0KiBpbnB1dCA9IHRo
aXMtPmlucHV0KGkpOwotICAgICAgICBpZiAoaW5wdXQtPmlzQ29ubmVjdGVkKCkpCi0gICAgICAg
ICAgICBudW1iZXJPZk91dHB1dENoYW5uZWxzICs9IGlucHV0LT5idXMoKS0+bnVtYmVyT2ZDaGFu
bmVscygpOwotICAgIH0KLQotICAgIC8vIFNldCB0aGUgY29ycmVjdCBudW1iZXIgb2YgY2hhbm5l
bHMgb24gdGhlIG91dHB1dAotICAgIEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0ID0gdGhpcy0+b3V0
cHV0KDApOwotICAgIEFTU0VSVChvdXRwdXQpOwotICAgIG91dHB1dC0+c2V0TnVtYmVyT2ZDaGFu
bmVscyhudW1iZXJPZk91dHB1dENoYW5uZWxzKTsKLQotICAgIEF1ZGlvTm9kZTo6Y2hlY2tOdW1i
ZXJPZkNoYW5uZWxzRm9ySW5wdXQoaW5wdXQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmgJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0g
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEF1ZGlvQ2hhbm5lbE1lcmdlcl9oCi0jZGVmaW5lIEF1
ZGlvQ2hhbm5lbE1lcmdlcl9oCi0KLSNpbmNsdWRlICJBdWRpb05vZGUuaCIKLSNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvQ29u
dGV4dDsKLSAgICAKLWNsYXNzIEF1ZGlvQ2hhbm5lbE1lcmdlciA6IHB1YmxpYyBBdWRpb05vZGUg
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlvQ2hhbm5lbE1lcmdlcj4gY3Jl
YXRlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVkaW9DaGFubmVsTWVyZ2VyKGNvbnRleHQsIHNhbXBs
ZVJhdGUpKTsgICAgICAKLSAgICB9Ci0KLSAgICAvLyBBdWRpb05vZGUKLSAgICB2aXJ0dWFsIHZv
aWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVz
ZXQoKTsKLQotICAgIC8vIENhbGxlZCBpbiB0aGUgYXVkaW8gdGhyZWFkIChwcmUtcmVuZGVyaW5n
IHRhc2spIHdoZW4gdGhlIG51bWJlciBvZiBjaGFubmVscyBmb3IgYW4gaW5wdXQgbWF5IGhhdmUg
Y2hhbmdlZC4KLSAgICB2aXJ0dWFsIHZvaWQgY2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQo
QXVkaW9Ob2RlSW5wdXQqKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGlt
ZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGRvdWJsZSBsYXRl
bmN5VGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KLQotICAgIEF1ZGlvQ2hhbm5l
bE1lcmdlcihBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEF1ZGlvQ2hhbm5lbE1lcmdlcl9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5pZGwJKHJldmlz
aW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdl
ci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBhdWRpbyB7Ci0g
ICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPCi0gICAgXSBBdWRp
b0NoYW5uZWxNZXJnZXIgOiBBdWRpb05vZGUgewotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuY3BwCShyZXZpc2lvbiAx
MTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJBdWRpb0No
YW5uZWxTcGxpdHRlci5oIgotCi0jaW5jbHVkZSAiQXVkaW9Ob2RlSW5wdXQuaCIKLSNpbmNsdWRl
ICJBdWRpb05vZGVPdXRwdXQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotLy8gVGhp
cyBpcyBjb25zaWRlcmluZyB0aGF0IDUuMSAoNiBjaGFubmVscykgaXMgdGhlIGxhcmdlc3Qgd2Un
bGwgZXZlciBkZWFsIHdpdGguCi0vLyBJdCBjYW4gZWFzaWx5IGJlIGluY3JlYXNlZCB0byBzdXBw
b3J0IG1vcmUgaWYgdGhlIHdlYiBhdWRpbyBzcGVjaWZpY2F0aW9uIGlzIHVwZGF0ZWQuCi1jb25z
dCB1bnNpZ25lZCBOdW1iZXJPZk91dHB1dHMgPSA2OwotCi1BdWRpb0NoYW5uZWxTcGxpdHRlcjo6
QXVkaW9DaGFubmVsU3BsaXR0ZXIoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVS
YXRlKQotICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCi17Ci0gICAgYWRkSW5w
dXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7Ci0KLSAgICAvLyBDcmVhdGUg
YSBmaXhlZCBudW1iZXIgb2Ygb3V0cHV0cyAoYWJsZSB0byBoYW5kbGUgdGhlIG1heGltdW0gbnVt
YmVyIG9mIGNoYW5uZWxzIGZlZCB0byBhbiBpbnB1dCkuCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IE51bWJlck9mT3V0cHV0czsgKytpKQotICAgICAgICBhZGRPdXRwdXQoYWRvcHRQdHIo
bmV3IEF1ZGlvTm9kZU91dHB1dCh0aGlzLCAxKSkpOwotICAgIAotICAgIHNldE5vZGVUeXBlKE5v
ZGVUeXBlQ2hhbm5lbFNwbGl0dGVyKTsKLSAgICAKLSAgICBpbml0aWFsaXplKCk7Ci19Ci0KLXZv
aWQgQXVkaW9DaGFubmVsU3BsaXR0ZXI6OnByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykK
LXsKLSAgICBBdWRpb0J1cyogc291cmNlID0gaW5wdXQoMCktPmJ1cygpOwotICAgIEFTU0VSVChz
b3VyY2UpOwotICAgIEFTU0VSVF9VTlVTRUQoZnJhbWVzVG9Qcm9jZXNzLCBmcmFtZXNUb1Byb2Nl
c3MgPT0gc291cmNlLT5sZW5ndGgoKSk7Ci0gICAgCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZTb3Vy
Y2VDaGFubmVscyA9IHNvdXJjZS0+bnVtYmVyT2ZDaGFubmVscygpOwotICAgIAotICAgIEFTU0VS
VChudW1iZXJPZk91dHB1dHMoKSA9PSBOdW1iZXJPZk91dHB1dHMpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBOdW1iZXJPZk91dHB1dHM7ICsraSkgewotICAgICAgICBBdWRpb0J1cyog
ZGVzdGluYXRpb24gPSBvdXRwdXQoaSktPmJ1cygpOwotICAgICAgICBBU1NFUlQoZGVzdGluYXRp
b24pOwotICAgICAgICAKLSAgICAgICAgaWYgKGkgPCBudW1iZXJPZlNvdXJjZUNoYW5uZWxzKSB7
Ci0gICAgICAgICAgICAvLyBTcGxpdCB0aGUgY2hhbm5lbCBvdXQgaWYgaXQgZXhpc3RzIGluIHRo
ZSBzb3VyY2UuCi0gICAgICAgICAgICAvLyBJdCB3b3VsZCBiZSBuaWNlIHRvIGF2b2lkIHRoZSBj
b3B5IGFuZCBzaW1wbHkgcGFzcyBhbG9uZyBwb2ludGVycywgYnV0IHRoaXMgYmVjb21lcyBleHRy
ZW1lbHkgZGlmZmljdWx0IHdpdGggZmFub3V0IGFuZCBmYW5pbi4KLSAgICAgICAgICAgIGRlc3Rp
bmF0aW9uLT5jaGFubmVsKDApLT5jb3B5RnJvbShzb3VyY2UtPmNoYW5uZWwoaSkpOwotICAgICAg
ICB9IGVsc2UgaWYgKG91dHB1dChpKS0+cmVuZGVyaW5nRmFuT3V0Q291bnQoKSA+IDApIHsKLSAg
ICAgICAgICAgIC8vIE9ubHkgYm90aGVyIHplcm9pbmcgb3V0IHRoZSBkZXN0aW5hdGlvbiBpZiBp
dCdzIGNvbm5lY3RlZCB0byBhbnl0aGluZwotICAgICAgICAgICAgZGVzdGluYXRpb24tPnplcm8o
KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBBdWRpb0NoYW5uZWxTcGxpdHRlcjo6cmVz
ZXQoKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
V0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3Bs
aXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5u
ZWxTcGxpdHRlci5oCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb0NoYW5uZWxTcGxpdHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0g
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIEF1ZGlvQ2hhbm5lbFNwbGl0dGVyX2gKLSNkZWZpbmUgQXVk
aW9DaGFubmVsU3BsaXR0ZXJfaAotCi0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCi0jaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb0Nv
bnRleHQ7Ci0gICAgCi1jbGFzcyBBdWRpb0NoYW5uZWxTcGxpdHRlciA6IHB1YmxpYyBBdWRpb05v
ZGUgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlvQ2hhbm5lbFNwbGl0dGVy
PiBjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBdWRpb0NoYW5uZWxTcGxpdHRlcihjb250ZXh0
LCBzYW1wbGVSYXRlKSk7ICAgICAgCi0gICAgfQotCi0gICAgLy8gQXVkaW9Ob2RlCi0gICAgdmly
dHVhbCB2b2lkIHByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgdmlydHVhbCB2
b2lkIHJlc2V0KCk7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBj
b25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRp
bWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9Ci0KLSAgICBBdWRpb0NoYW5uZWxTcGxp
dHRlcihBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEF1ZGlvQ2hhbm5lbFNwbGl0dGVyX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5pZGwJKHJl
dmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNw
bGl0dGVyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzMCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
bW9kdWxlIGF1ZGlvIHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1XRUJf
QVVESU8KLSAgICBdIEF1ZGlvQ2hhbm5lbFNwbGl0dGVyIDogQXVkaW9Ob2RlIHsKLSAgICB9Owot
fQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCShyZXZpc2lv
biAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDc4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIkF1ZGlvQ29udGV4
dC5oIgotCi0jaW5jbHVkZSAiQXN5bmNBdWRpb0RlY29kZXIuaCIKLSNpbmNsdWRlICJBdWRpb0J1
ZmZlci5oIgotI2luY2x1ZGUgIkF1ZGlvQnVmZmVyQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJBdWRp
b0J1ZmZlclNvdXJjZU5vZGUuaCIKLSNpbmNsdWRlICJBdWRpb0NoYW5uZWxNZXJnZXIuaCIKLSNp
bmNsdWRlICJBdWRpb0NoYW5uZWxTcGxpdHRlci5oIgotI2luY2x1ZGUgIkF1ZGlvR2Fpbk5vZGUu
aCIKLSNpbmNsdWRlICJBdWRpb0xpc3RlbmVyLmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlSW5wdXQu
aCIKLSNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKLSNpbmNsdWRlICJBdWRpb1Bhbm5lck5v
ZGUuaCIKLSNpbmNsdWRlICJCaXF1YWRGaWx0ZXJOb2RlLmgiCi0jaW5jbHVkZSAiQ29udm9sdmVy
Tm9kZS5oIgotI2luY2x1ZGUgIkRlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgotI2luY2x1
ZGUgIkRlbGF5Tm9kZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRHluYW1p
Y3NDb21wcmVzc29yTm9kZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRl
ICJGRlRGcmFtZS5oIgotI2luY2x1ZGUgIkhSVEZEYXRhYmFzZUxvYWRlci5oIgotI2luY2x1ZGUg
IkhSVEZQYW5uZXIuaCIKLSNpbmNsdWRlICJIaWdoUGFzczJGaWx0ZXJOb2RlLmgiCi0jaW5jbHVk
ZSAiSmF2YVNjcmlwdEF1ZGlvTm9kZS5oIgotI2luY2x1ZGUgIkxvd1Bhc3MyRmlsdGVyTm9kZS5o
IgotI2luY2x1ZGUgIk9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oIgotI2luY2x1ZGUgIk9m
ZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
Ci0jaW5jbHVkZSAiUmVhbHRpbWVBbmFseXNlck5vZGUuaCIKLSNpbmNsdWRlICJXYXZlU2hhcGVy
Tm9kZS5oIgotI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgotCi0jaWYgRU5BQkxFKFZJREVP
KQotI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJNZWRpYUVsZW1lbnRB
dWRpb1NvdXJjZU5vZGUuaCIKLSNlbmRpZgotCi0jaWYgREVCVUdfQVVESU9OT0RFX1JFRkVSRU5D
RVMKLSNpbmNsdWRlIDxzdGRpby5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDx3dGYvQXJyYXlCdWZm
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+Ci0KLS8vIEZJWE1FOiBjaGVjayB0aGUgcHJvcGVyIHdheSB0byByZWZlcmVuY2UgYW4gdW5k
ZWZpbmVkIHRocmVhZCBJRAotY29uc3QgaW50IFVuZGVmaW5lZFRocmVhZElkZW50aWZpZXIgPSAw
eGZmZmZmZmZmOwotCi1jb25zdCB1bnNpZ25lZCBNYXhOb2Rlc1RvRGVsZXRlUGVyUXVhbnR1bSA9
IDEwOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1uYW1lc3BhY2UgewotICAgIAotYm9v
bCBpc1NhbXBsZVJhdGVSYW5nZUdvb2QoZmxvYXQgc2FtcGxlUmF0ZSkKLXsKLSAgICAvLyBGSVhN
RTogSXQgd291bGQgYmUgbmljZSBpZiB0aGUgbWluaW11bSBzYW1wbGUtcmF0ZSBjb3VsZCBiZSBs
ZXNzIHRoYW4gNDQuMUtIeiwKLSAgICAvLyBidXQgdGhhdCB3aWxsIHJlcXVpcmUgc29tZSBmaXhl
cyBpbiBIUlRGUGFubmVyOjpmZnRTaXplRm9yU2FtcGxlUmF0ZSgpLCBhbmQgc29tZSB0ZXN0aW5n
IHRoZXJlLgotICAgIHJldHVybiBzYW1wbGVSYXRlID49IDQ0MTAwICYmIHNhbXBsZVJhdGUgPD0g
OTYwMDA7Ci19Ci0KLX0KLQotLy8gRG9uJ3QgYWxsb3cgbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9m
IHNpbXVsdGFuZW91cyBBdWRpb0NvbnRleHRzIHRhbGtpbmcgdG8gaGFyZHdhcmUuCi1jb25zdCB1
bnNpZ25lZCBNYXhIYXJkd2FyZUNvbnRleHRzID0gNDsKLXVuc2lnbmVkIEF1ZGlvQ29udGV4dDo6
c19oYXJkd2FyZUNvbnRleHRDb3VudCA9IDA7Ci0gICAgCi1QYXNzUmVmUHRyPEF1ZGlvQ29udGV4
dD4gQXVkaW9Db250ZXh0OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotCi0gICAgQVNTRVJUKGRvY3VtZW50KTsK
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChzX2hhcmR3YXJlQ29udGV4dENv
dW50ID49IE1heEhhcmR3YXJlQ29udGV4dHMpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUmVm
UHRyPEF1ZGlvQ29udGV4dD4gYXVkaW9Db250ZXh0KGFkb3B0UmVmKG5ldyBBdWRpb0NvbnRleHQo
ZG9jdW1lbnQpKSk7Ci0gICAgYXVkaW9Db250ZXh0LT5zdXNwZW5kSWZOZWVkZWQoKTsKLSAgICBy
ZXR1cm4gYXVkaW9Db250ZXh0LnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxBdWRpb0NvbnRl
eHQ+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlT2ZmbGluZUNvbnRleHQoRG9jdW1lbnQqIGRvY3VtZW50
LCB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMsIGZsb2F0
IHNhbXBsZVJhdGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIEFTU0VSVChkb2N1bWVudCk7
Ci0KLSAgICAvLyBGSVhNRTogb2ZmbGluZSBjb250ZXh0cyBoYXZlIGxpbWl0YXRpb25zIG9uIHN1
cHBvcnRlZCBzYW1wbGUtcmF0ZXMuCi0gICAgLy8gQ3VycmVudGx5IGFsbCBBdWRpb0NvbnRleHRz
IG11c3QgaGF2ZSB0aGUgc2FtZSBzYW1wbGUtcmF0ZS4KLSAgICBIUlRGRGF0YWJhc2VMb2FkZXIq
IGxvYWRlciA9IEhSVEZEYXRhYmFzZUxvYWRlcjo6bG9hZGVyKCk7Ci0gICAgaWYgKG51bWJlck9m
Q2hhbm5lbHMgPiAxMCB8fCAhaXNTYW1wbGVSYXRlUmFuZ2VHb29kKHNhbXBsZVJhdGUpIHx8IChs
b2FkZXIgJiYgbG9hZGVyLT5kYXRhYmFzZVNhbXBsZVJhdGUoKSAhPSBzYW1wbGVSYXRlKSkgewot
ICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAg
IFJlZlB0cjxBdWRpb0NvbnRleHQ+IGF1ZGlvQ29udGV4dChuZXcgQXVkaW9Db250ZXh0KGRvY3Vt
ZW50LCBudW1iZXJPZkNoYW5uZWxzLCBudW1iZXJPZkZyYW1lcywgc2FtcGxlUmF0ZSkpOwotICAg
IGF1ZGlvQ29udGV4dC0+c3VzcGVuZElmTmVlZGVkKCk7Ci0gICAgcmV0dXJuIGF1ZGlvQ29udGV4
dC5yZWxlYXNlKCk7Ci19Ci0KLS8vIENvbnN0cnVjdG9yIGZvciByZW5kZXJpbmcgdG8gdGhlIGF1
ZGlvIGhhcmR3YXJlLgotQXVkaW9Db250ZXh0OjpBdWRpb0NvbnRleHQoRG9jdW1lbnQqIGRvY3Vt
ZW50KQotICAgIDogQWN0aXZlRE9NT2JqZWN0KGRvY3VtZW50LCB0aGlzKQotICAgICwgbV9pc0lu
aXRpYWxpemVkKGZhbHNlKQotICAgICwgbV9pc0F1ZGlvVGhyZWFkRmluaXNoZWQoZmFsc2UpCi0g
ICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQotICAgICwgbV9kZXN0aW5hdGlvbk5vZGUoMCkKLSAg
ICAsIG1faXNEZWxldGlvblNjaGVkdWxlZChmYWxzZSkKLSAgICAsIG1fY29ubmVjdGlvbkNvdW50
KDApCi0gICAgLCBtX2F1ZGlvVGhyZWFkKDApCi0gICAgLCBtX2dyYXBoT3duZXJUaHJlYWQoVW5k
ZWZpbmVkVGhyZWFkSWRlbnRpZmllcikKLSAgICAsIG1faXNPZmZsaW5lQ29udGV4dChmYWxzZSkK
LXsKLSAgICBjb25zdHJ1Y3RDb21tb24oKTsKLQotICAgIG1fZGVzdGluYXRpb25Ob2RlID0gRGVm
YXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjpjcmVhdGUodGhpcyk7Ci0KLSAgICAvLyBUaGlzIHNl
dHMgaW4gbW90aW9uIGFuIGFzeW5jaHJvbm91cyBsb2FkaW5nIG1lY2hhbmlzbSBvbiBhbm90aGVy
IHRocmVhZC4KLSAgICAvLyBXZSBjYW4gY2hlY2sgbV9ocnRmRGF0YWJhc2VMb2FkZXItPmlzTG9h
ZGVkKCkgdG8gZmluZCBvdXQgd2hldGhlciBvciBub3QgaXQgaGFzIGJlZW4gZnVsbHkgbG9hZGVk
LgotICAgIC8vIEl0J3Mgbm90IHRoYXQgdXNlZnVsIHRvIGhhdmUgYSBjYWxsYmFjayBmdW5jdGlv
biBmb3IgdGhpcyBzaW5jZSB0aGUgYXVkaW8gdGhyZWFkIGF1dG9tYXRpY2FsbHkgc3RhcnRzIHJl
bmRlcmluZyBvbiB0aGUgZ3JhcGgKLSAgICAvLyB3aGVuIHRoaXMgaGFzIGZpbmlzaGVkIChzZWUg
QXVkaW9EZXN0aW5hdGlvbk5vZGUpLgotICAgIG1faHJ0ZkRhdGFiYXNlTG9hZGVyID0gSFJURkRh
dGFiYXNlTG9hZGVyOjpjcmVhdGVBbmRMb2FkQXN5bmNocm9ub3VzbHlJZk5lY2Vzc2FyeShzYW1w
bGVSYXRlKCkpOwotfQotCi0vLyBDb25zdHJ1Y3RvciBmb3Igb2ZmbGluZSAobm9uLXJlYWx0aW1l
KSByZW5kZXJpbmcuCi1BdWRpb0NvbnRleHQ6OkF1ZGlvQ29udGV4dChEb2N1bWVudCogZG9jdW1l
bnQsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxv
YXQgc2FtcGxlUmF0ZSkKLSAgICA6IEFjdGl2ZURPTU9iamVjdChkb2N1bWVudCwgdGhpcykKLSAg
ICAsIG1faXNJbml0aWFsaXplZChmYWxzZSkKLSAgICAsIG1faXNBdWRpb1RocmVhZEZpbmlzaGVk
KGZhbHNlKQotICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKLSAgICAsIG1fZGVzdGluYXRpb25O
b2RlKDApCi0gICAgLCBtX2Nvbm5lY3Rpb25Db3VudCgwKQotICAgICwgbV9hdWRpb1RocmVhZCgw
KQotICAgICwgbV9ncmFwaE93bmVyVGhyZWFkKFVuZGVmaW5lZFRocmVhZElkZW50aWZpZXIpCi0g
ICAgLCBtX2lzT2ZmbGluZUNvbnRleHQodHJ1ZSkKLXsKLSAgICBjb25zdHJ1Y3RDb21tb24oKTsK
LQotICAgIC8vIEZJWE1FOiB0aGUgcGFzc2VkIGluIHNhbXBsZVJhdGUgTVVTVCBtYXRjaCB0aGUg
aGFyZHdhcmUgc2FtcGxlLXJhdGUgc2luY2UgSFJURkRhdGFiYXNlTG9hZGVyIGlzIGEgc2luZ2xl
dG9uLgotICAgIG1faHJ0ZkRhdGFiYXNlTG9hZGVyID0gSFJURkRhdGFiYXNlTG9hZGVyOjpjcmVh
dGVBbmRMb2FkQXN5bmNocm9ub3VzbHlJZk5lY2Vzc2FyeShzYW1wbGVSYXRlKTsKLQotICAgIC8v
IENyZWF0ZSBhIG5ldyBkZXN0aW5hdGlvbiBmb3Igb2ZmbGluZSByZW5kZXJpbmcuCi0gICAgbV9y
ZW5kZXJUYXJnZXQgPSBBdWRpb0J1ZmZlcjo6Y3JlYXRlKG51bWJlck9mQ2hhbm5lbHMsIG51bWJl
ck9mRnJhbWVzLCBzYW1wbGVSYXRlKTsKLSAgICBtX2Rlc3RpbmF0aW9uTm9kZSA9IE9mZmxpbmVB
dWRpb0Rlc3RpbmF0aW9uTm9kZTo6Y3JlYXRlKHRoaXMsIG1fcmVuZGVyVGFyZ2V0LmdldCgpKTsK
LX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OmNvbnN0cnVjdENvbW1vbigpCi17Ci0gICAgRkZURnJh
bWU6OmluaXRpYWxpemUoKTsKLSAgICAKLSAgICBtX2xpc3RlbmVyID0gQXVkaW9MaXN0ZW5lcjo6
Y3JlYXRlKCk7Ci19Ci0KLUF1ZGlvQ29udGV4dDo6fkF1ZGlvQ29udGV4dCgpCi17Ci0jaWYgREVC
VUdfQVVESU9OT0RFX1JFRkVSRU5DRVMKLSAgICBwcmludGYoIiVwOiBBdWRpb0NvbnRleHQ6On5B
dWRpb0NvbnRleHQoKVxuIiwgdGhpcyk7Ci0jZW5kaWYKLSAgICAvLyBBdWRpb05vZGVzIGtlZXAg
YSByZWZlcmVuY2UgdG8gdGhlaXIgY29udGV4dCwgc28gdGhlcmUgc2hvdWxkIGJlIG5vIHdheSB0
byBiZSBpbiB0aGUgZGVzdHJ1Y3RvciBpZiB0aGVyZSBhcmUgc3RpbGwgQXVkaW9Ob2RlcyBhcm91
bmQuCi0gICAgQVNTRVJUKCFtX25vZGVzVG9EZWxldGUuc2l6ZSgpKTsKLSAgICBBU1NFUlQoIW1f
cmVmZXJlbmNlZE5vZGVzLnNpemUoKSk7Ci0gICAgQVNTRVJUKCFtX2ZpbmlzaGVkTm9kZXMuc2l6
ZSgpKTsKLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OmxhenlJbml0aWFsaXplKCkKLXsKLSAgICBp
ZiAoIW1faXNJbml0aWFsaXplZCkgewotICAgICAgICAvLyBEb24ndCBhbGxvdyB0aGUgY29udGV4
dCB0byBpbml0aWFsaXplIGEgc2Vjb25kIHRpbWUgYWZ0ZXIgaXQncyBhbHJlYWR5IGJlZW4gZXhw
bGljaXRseSB1bmluaXRpYWxpemVkLgotICAgICAgICBBU1NFUlQoIW1faXNBdWRpb1RocmVhZEZp
bmlzaGVkKTsKLSAgICAgICAgaWYgKCFtX2lzQXVkaW9UaHJlYWRGaW5pc2hlZCkgewotICAgICAg
ICAgICAgaWYgKG1fZGVzdGluYXRpb25Ob2RlLmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgbV9k
ZXN0aW5hdGlvbk5vZGUtPmluaXRpYWxpemUoKTsKLQotICAgICAgICAgICAgICAgIGlmICghaXNP
ZmZsaW5lQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgc3RhcnRzIHRo
ZSBhdWRpbyB0aHJlYWQuIFRoZSBkZXN0aW5hdGlvbiBub2RlJ3MgcHJvdmlkZUlucHV0KCkgbWV0
aG9kIHdpbGwgbm93IGJlIGNhbGxlZCByZXBlYXRlZGx5IHRvIHJlbmRlciBhdWRpby4KLSAgICAg
ICAgICAgICAgICAgICAgLy8gRWFjaCB0aW1lIHByb3ZpZGVJbnB1dCgpIGlzIGNhbGxlZCwgYSBw
b3J0aW9uIG9mIHRoZSBhdWRpbyBzdHJlYW0gaXMgcmVuZGVyZWQuIExldCdzIGNhbGwgdGhpcyB0
aW1lIHBlcmlvZCBhICJyZW5kZXIgcXVhbnR1bSIuCi0gICAgICAgICAgICAgICAgICAgIC8vIE5P
VEU6IGZvciBub3cgZGVmYXVsdCBBdWRpb0NvbnRleHQgZG9lcyBub3QgbmVlZCBhbiBleHBsaWNp
dCBzdGFydFJlbmRlcmluZygpIGNhbGwgZnJvbSBKYXZhU2NyaXB0LgotICAgICAgICAgICAgICAg
ICAgICAvLyBXZSBtYXkgd2FudCB0byBjb25zaWRlciByZXF1aXJpbmcgaXQgZm9yIHN5bW1ldHJ5
IHdpdGggT2ZmbGluZUF1ZGlvQ29udGV4dC4KLSAgICAgICAgICAgICAgICAgICAgbV9kZXN0aW5h
dGlvbk5vZGUtPnN0YXJ0UmVuZGVyaW5nKCk7ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgKytzX2hhcmR3YXJlQ29udGV4dENvdW50OwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9pc0luaXRpYWxpemVkID0gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6ZSgpCi17
Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmIChtX2lzSW5pdGlhbGl6ZWQp
IHsKLSAgICAgICAgLy8gUHJvdGVjdCB0aGlzIG9iamVjdCBmcm9tIGJlaW5nIGRlbGV0ZWQgYmVm
b3JlIHdlIGZpbmlzaCB1bmluaXRpYWxpemluZy4KLSAgICAgICAgUmVmUHRyPEF1ZGlvQ29udGV4
dD4gcHJvdGVjdCh0aGlzKTsKLQotICAgICAgICAvLyBUaGlzIHN0b3BzIHRoZSBhdWRpbyB0aHJl
YWQgYW5kIGFsbCBhdWRpbyByZW5kZXJpbmcuCi0gICAgICAgIG1fZGVzdGluYXRpb25Ob2RlLT51
bmluaXRpYWxpemUoKTsKLQotICAgICAgICAvLyBEb24ndCBhbGxvdyB0aGUgY29udGV4dCB0byBp
bml0aWFsaXplIGEgc2Vjb25kIHRpbWUgYWZ0ZXIgaXQncyBhbHJlYWR5IGJlZW4gZXhwbGljaXRs
eSB1bmluaXRpYWxpemVkLgotICAgICAgICBtX2lzQXVkaW9UaHJlYWRGaW5pc2hlZCA9IHRydWU7
Ci0KLSAgICAgICAgLy8gV2UgaGF2ZSB0byByZWxlYXNlIG91ciByZWZlcmVuY2UgdG8gdGhlIGRl
c3RpbmF0aW9uIG5vZGUgYmVmb3JlIHRoZSBjb250ZXh0IHdpbGwgZXZlciBiZSBkZWxldGVkIHNp
bmNlIHRoZSBkZXN0aW5hdGlvbiBub2RlIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBjb250ZXh0
LgotICAgICAgICBtX2Rlc3RpbmF0aW9uTm9kZS5jbGVhcigpOwotCi0gICAgICAgIGlmICghaXNP
ZmZsaW5lQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc19oYXJkd2FyZUNvbnRleHRD
b3VudCk7Ci0gICAgICAgICAgICAtLXNfaGFyZHdhcmVDb250ZXh0Q291bnQ7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIC8vIEdldCByaWQgb2YgdGhlIHNvdXJjZXMgd2hpY2ggbWF5IHN0
aWxsIGJlIHBsYXlpbmcuCi0gICAgICAgIGRlcmVmVW5maW5pc2hlZFNvdXJjZU5vZGVzKCk7Ci0K
LSAgICAgICAgZGVsZXRlTWFya2VkTm9kZXMoKTsKLQotICAgICAgICBtX2lzSW5pdGlhbGl6ZWQg
PSBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgQXVkaW9Db250ZXh0Ojppc0luaXRpYWxpemVkKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9pc0luaXRpYWxpemVkOwotfQotCi1ib29sIEF1ZGlvQ29u
dGV4dDo6aXNSdW5uYWJsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc0luaXRpYWxpemVkKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBDaGVjayB3aXRoIHRoZSBIUlRGIHNw
YXRpYWxpemF0aW9uIHN5c3RlbSB0byBzZWUgaWYgaXQncyBmaW5pc2hlZCBsb2FkaW5nLgotICAg
IHJldHVybiBtX2hydGZEYXRhYmFzZUxvYWRlci0+aXNMb2FkZWQoKTsKLX0KLQotdm9pZCBBdWRp
b0NvbnRleHQ6OnVuaW5pdGlhbGl6ZURpc3BhdGNoKHZvaWQqIHVzZXJEYXRhKQotewotICAgIEF1
ZGlvQ29udGV4dCogY29udGV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8QXVkaW9Db250ZXh0Kj4odXNl
ckRhdGEpOwotICAgIEFTU0VSVChjb250ZXh0KTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGNvbnRleHQtPnVuaW5pdGlhbGl6ZSgpOwotfQotCi12b2lkIEF1ZGlv
Q29udGV4dDo6c3RvcCgpCi17Ci0gICAgbV9kb2N1bWVudCA9IDA7IC8vIGRvY3VtZW50IGlzIGdv
aW5nIGF3YXkKLQotICAgIC8vIERvbid0IGNhbGwgdW5pbml0aWFsaXplKCkgaW1tZWRpYXRlbHkg
aGVyZSBiZWNhdXNlIHRoZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IGlzIGluIHRoZSBtaWRkbGUK
LSAgICAvLyBvZiBkZWFsaW5nIHdpdGggYWxsIG9mIGl0cyBBY3RpdmVET01PYmplY3RzIGF0IHRo
aXMgcG9pbnQuIHVuaW5pdGlhbGl6ZSgpIGNhbiBkZS1yZWZlcmVuY2Ugb3RoZXIKLSAgICAvLyBB
Y3RpdmVET01PYmplY3RzIHNvIGxldCdzIHNjaGVkdWxlIHVuaW5pdGlhbGl6ZSgpIHRvIGJlIGNh
bGxlZCBsYXRlci4KLSAgICAvLyBGSVhNRTogc2VlIGlmIHRoZXJlJ3MgYSBtb3JlIGRpcmVjdCB3
YXkgdG8gaGFuZGxlIHRoaXMgaXNzdWUuCi0gICAgY2FsbE9uTWFpblRocmVhZCh1bmluaXRpYWxp
emVEaXNwYXRjaCwgdGhpcyk7Ci19Ci0KLURvY3VtZW50KiBBdWRpb0NvbnRleHQ6OmRvY3VtZW50
KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9kb2N1bWVudCk7Ci0gICAgcmV0dXJuIG1fZG9jdW1l
bnQ7Ci19Ci0KLWJvb2wgQXVkaW9Db250ZXh0OjpoYXNEb2N1bWVudCgpCi17Ci0gICAgcmV0dXJu
IG1fZG9jdW1lbnQ7Ci19Ci0KLVBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IEF1ZGlvQ29udGV4dDo6
Y3JlYXRlQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZy
YW1lcywgZmxvYXQgc2FtcGxlUmF0ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgUmVmUHRy
PEF1ZGlvQnVmZmVyPiBhdWRpb0J1ZmZlciA9IEF1ZGlvQnVmZmVyOjpjcmVhdGUobnVtYmVyT2ZD
aGFubmVscywgbnVtYmVyT2ZGcmFtZXMsIHNhbXBsZVJhdGUpOwotICAgIGlmICghYXVkaW9CdWZm
ZXIuZ2V0KCkpIHsKLSAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0KLSAgICByZXR1cm4gYXVkaW9CdWZmZXI7Ci19Ci0KLVBhc3NSZWZQdHI8QXVkaW9C
dWZmZXI+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQnVmZmVyKEFycmF5QnVmZmVyKiBhcnJheUJ1ZmZl
ciwgYm9vbCBtaXhUb01vbm8sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIEFTU0VSVChhcnJh
eUJ1ZmZlcik7Ci0gICAgaWYgKCFhcnJheUJ1ZmZlcikgewotICAgICAgICBlYyA9IFNZTlRBWF9F
UlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxBdWRpb0J1ZmZlcj4g
YXVkaW9CdWZmZXIgPSBBdWRpb0J1ZmZlcjo6Y3JlYXRlRnJvbUF1ZGlvRmlsZURhdGEoYXJyYXlC
dWZmZXItPmRhdGEoKSwgYXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSwgbWl4VG9Nb25vLCBzYW1w
bGVSYXRlKCkpOwotICAgIGlmICghYXVkaW9CdWZmZXIuZ2V0KCkpIHsKLSAgICAgICAgZWMgPSBT
WU5UQVhfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gYXVkaW9C
dWZmZXI7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpkZWNvZGVBdWRpb0RhdGEoQXJyYXlCdWZm
ZXIqIGF1ZGlvRGF0YSwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBzdWNjZXNzQ2Fs
bGJhY2ssIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFhdWRpb0RhdGEpIHsKLSAgICAgICAgZWMgPSBT
WU5UQVhfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fYXVkaW9EZWNvZGVyLmRl
Y29kZUFzeW5jKGF1ZGlvRGF0YSwgc2FtcGxlUmF0ZSgpLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9y
Q2FsbGJhY2spOwotfQotCi1QYXNzUmVmUHRyPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4gQXVkaW9D
b250ZXh0OjpjcmVhdGVCdWZmZXJTb3VyY2UoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0gICAgbGF6eUluaXRpYWxpemUoKTsKLSAgICBSZWZQdHI8QXVkaW9CdWZmZXJTb3VyY2VO
b2RlPiBub2RlID0gQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpjcmVhdGUodGhpcywgbV9kZXN0aW5h
dGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7Ci0KLSAgICByZWZOb2RlKG5vZGUuZ2V0KCkpOyAvLyBj
b250ZXh0IGtlZXBzIHJlZmVyZW5jZSB1bnRpbCBzb3VyY2UgaGFzIGZpbmlzaGVkIHBsYXlpbmcK
LSAgICByZXR1cm4gbm9kZTsKLX0KLQotI2lmIEVOQUJMRShWSURFTykKLVBhc3NSZWZQdHI8TWVk
aWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZU1lZGlhRWxlbWVu
dFNvdXJjZShIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIEFTU0VSVChtZWRpYUVsZW1lbnQpOwotICAgIGlmICghbWVkaWFFbGVtZW50KSB7
Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLSAgICAgICAgCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBsYXp5SW5pdGlh
bGl6ZSgpOwotICAgIAotICAgIC8vIEZpcnN0IGNoZWNrIGlmIHRoaXMgbWVkaWEgZWxlbWVudCBh
bHJlYWR5IGhhcyBhIHNvdXJjZSBub2RlLgotICAgIGlmIChtZWRpYUVsZW1lbnQtPmF1ZGlvU291
cmNlTm9kZSgpKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLSAgICAgICAgCi0gICAgUmVmUHRyPE1lZGlhRWxlbWVudEF1ZGlvU291
cmNlTm9kZT4gbm9kZSA9IE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6Y3JlYXRlKHRoaXMs
IG1lZGlhRWxlbWVudCk7Ci0KLSAgICBtZWRpYUVsZW1lbnQtPnNldEF1ZGlvU291cmNlTm9kZShu
b2RlLmdldCgpKTsKLQotICAgIHJlZk5vZGUobm9kZS5nZXQoKSk7IC8vIGNvbnRleHQga2VlcHMg
cmVmZXJlbmNlIHVudGlsIG5vZGUgaXMgZGlzY29ubmVjdGVkCi0gICAgcmV0dXJuIG5vZGU7Ci19
Ci0jZW5kaWYKLQotUGFzc1JlZlB0cjxKYXZhU2NyaXB0QXVkaW9Ob2RlPiBBdWRpb0NvbnRleHQ6
OmNyZWF0ZUphdmFTY3JpcHROb2RlKHNpemVfdCBidWZmZXJTaXplKQotewotICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0gICAgbGF6eUluaXRpYWxpemUoKTsKLSAgICBSZWZQdHI8SmF2YVNj
cmlwdEF1ZGlvTm9kZT4gbm9kZSA9IEphdmFTY3JpcHRBdWRpb05vZGU6OmNyZWF0ZSh0aGlzLCBt
X2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpLCBidWZmZXJTaXplKTsKLQotICAgIHJlZk5v
ZGUobm9kZS5nZXQoKSk7IC8vIGNvbnRleHQga2VlcHMgcmVmZXJlbmNlIHVudGlsIHdlIHN0b3Ag
bWFraW5nIGphdmFzY3JpcHQgcmVuZGVyaW5nIGNhbGxiYWNrcwotICAgIHJldHVybiBub2RlOwot
fQotCi1QYXNzUmVmUHRyPEJpcXVhZEZpbHRlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQmlx
dWFkRmlsdGVyKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGxhenlJbml0
aWFsaXplKCk7Ci0gICAgcmV0dXJuIEJpcXVhZEZpbHRlck5vZGU6OmNyZWF0ZSh0aGlzLCBtX2Rl
c3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpKTsKLX0KLQotUGFzc1JlZlB0cjxXYXZlU2hhcGVy
Tm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVXYXZlU2hhcGVyKCkKLXsKLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotICAgIGxhenlJbml0aWFsaXplKCk7Ci0gICAgcmV0dXJuIFdhdmVTaGFw
ZXJOb2RlOjpjcmVhdGUodGhpcyk7Ci19Ci0KLVBhc3NSZWZQdHI8TG93UGFzczJGaWx0ZXJOb2Rl
PiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUxvd1Bhc3MyRmlsdGVyKCkKLXsKLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotICAgIGxhenlJbml0aWFsaXplKCk7Ci0gICAgaWYgKGRvY3VtZW50KCkp
Ci0gICAgICAgIGRvY3VtZW50KCktPmFkZENvbnNvbGVNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwg
TG9nTWVzc2FnZVR5cGUsIFdhcm5pbmdNZXNzYWdlTGV2ZWwsICJjcmVhdGVMb3dQYXNzMkZpbHRl
cigpIGlzIGRlcHJlY2F0ZWQuICBVc2UgY3JlYXRlQmlxdWFkRmlsdGVyKCkgaW5zdGVhZC4iKTsK
LSAgICAgICAgCi0gICAgcmV0dXJuIExvd1Bhc3MyRmlsdGVyTm9kZTo6Y3JlYXRlKHRoaXMsIG1f
ZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkpOwotfQotCi1QYXNzUmVmUHRyPEhpZ2hQYXNz
MkZpbHRlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlSGlnaFBhc3MyRmlsdGVyKCkKLXsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGxhenlJbml0aWFsaXplKCk7Ci0gICAgaWYg
KGRvY3VtZW50KCkpCi0gICAgICAgIGRvY3VtZW50KCktPmFkZENvbnNvbGVNZXNzYWdlKEpTTWVz
c2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIFdhcm5pbmdNZXNzYWdlTGV2ZWwsICJjcmVhdGVI
aWdoUGFzczJGaWx0ZXIoKSBpcyBkZXByZWNhdGVkLiAgVXNlIGNyZWF0ZUJpcXVhZEZpbHRlcigp
IGluc3RlYWQuIik7Ci0KLSAgICByZXR1cm4gSGlnaFBhc3MyRmlsdGVyTm9kZTo6Y3JlYXRlKHRo
aXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkpOwotfQotCi1QYXNzUmVmUHRyPEF1
ZGlvUGFubmVyTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVQYW5uZXIoKQotewotICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7Ci0gICAgbGF6eUluaXRpYWxpemUoKTsKLSAgICByZXR1cm4gQXVk
aW9QYW5uZXJOb2RlOjpjcmVhdGUodGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUo
KSk7Ci19Ci0KLVBhc3NSZWZQdHI8Q29udm9sdmVyTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVD
b252b2x2ZXIoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbGF6eUluaXRp
YWxpemUoKTsKLSAgICByZXR1cm4gQ29udm9sdmVyTm9kZTo6Y3JlYXRlKHRoaXMsIG1fZGVzdGlu
YXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkpOwotfQotCi1QYXNzUmVmUHRyPER5bmFtaWNzQ29tcHJl
c3Nvck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlRHluYW1pY3NDb21wcmVzc29yKCkKLXsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGxhenlJbml0aWFsaXplKCk7Ci0gICAgcmV0
dXJuIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OmNyZWF0ZSh0aGlzLCBtX2Rlc3RpbmF0aW9uTm9k
ZS0+c2FtcGxlUmF0ZSgpKTsKLX0KLQotUGFzc1JlZlB0cjxSZWFsdGltZUFuYWx5c2VyTm9kZT4g
QXVkaW9Db250ZXh0OjpjcmVhdGVBbmFseXNlcigpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLSAgICBsYXp5SW5pdGlhbGl6ZSgpOwotICAgIHJldHVybiBSZWFsdGltZUFuYWx5c2Vy
Tm9kZTo6Y3JlYXRlKHRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkpOwotfQot
Ci1QYXNzUmVmUHRyPEF1ZGlvR2Fpbk5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlR2Fpbk5vZGUo
KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbGF6eUluaXRpYWxpemUoKTsK
LSAgICByZXR1cm4gQXVkaW9HYWluTm9kZTo6Y3JlYXRlKHRoaXMsIG1fZGVzdGluYXRpb25Ob2Rl
LT5zYW1wbGVSYXRlKCkpOwotfQotCi1QYXNzUmVmUHRyPERlbGF5Tm9kZT4gQXVkaW9Db250ZXh0
OjpjcmVhdGVEZWxheU5vZGUoKQotewotICAgIGNvbnN0IGRvdWJsZSBkZWZhdWx0TWF4RGVsYXlU
aW1lID0gMTsKLSAgICByZXR1cm4gY3JlYXRlRGVsYXlOb2RlKGRlZmF1bHRNYXhEZWxheVRpbWUp
OwotfQotCi1QYXNzUmVmUHRyPERlbGF5Tm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVEZWxheU5v
ZGUoZG91YmxlIG1heERlbGF5VGltZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
ICAgIGxhenlJbml0aWFsaXplKCk7Ci0gICAgcmV0dXJuIERlbGF5Tm9kZTo6Y3JlYXRlKHRoaXMs
IG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCksIG1heERlbGF5VGltZSk7Ci19Ci0KLVBh
c3NSZWZQdHI8QXVkaW9DaGFubmVsU3BsaXR0ZXI+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5l
bFNwbGl0dGVyKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGxhenlJbml0
aWFsaXplKCk7Ci0gICAgcmV0dXJuIEF1ZGlvQ2hhbm5lbFNwbGl0dGVyOjpjcmVhdGUodGhpcywg
bV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8QXVkaW9D
aGFubmVsTWVyZ2VyPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUNoYW5uZWxNZXJnZXIoKQotewotICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbGF6eUluaXRpYWxpemUoKTsKLSAgICByZXR1
cm4gQXVkaW9DaGFubmVsTWVyZ2VyOjpjcmVhdGUodGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNh
bXBsZVJhdGUoKSk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0Ojpub3RpZnlOb2RlRmluaXNoZWRQ
cm9jZXNzaW5nKEF1ZGlvTm9kZSogbm9kZSkKLXsKLSAgICBBU1NFUlQoaXNBdWRpb1RocmVhZCgp
KTsKLSAgICBtX2ZpbmlzaGVkTm9kZXMuYXBwZW5kKG5vZGUpOwotfQotCi12b2lkIEF1ZGlvQ29u
dGV4dDo6ZGVyZWZGaW5pc2hlZFNvdXJjZU5vZGVzKCkKLXsKLSAgICBBU1NFUlQoaXNHcmFwaE93
bmVyKCkpOwotICAgIEFTU0VSVChpc0F1ZGlvVGhyZWFkKCkgfHwgaXNBdWRpb1RocmVhZEZpbmlz
aGVkKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ZpbmlzaGVkTm9kZXMuc2l6
ZSgpOyBpKyspCi0gICAgICAgIGRlcmVmTm9kZShtX2ZpbmlzaGVkTm9kZXNbaV0pOwotCi0gICAg
bV9maW5pc2hlZE5vZGVzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpyZWZOb2Rl
KEF1ZGlvTm9kZSogbm9kZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEF1
dG9Mb2NrZXIgbG9ja2VyKHRoaXMpOwotICAgIAotICAgIG5vZGUtPnJlZihBdWRpb05vZGU6OlJl
ZlR5cGVDb25uZWN0aW9uKTsKLSAgICBtX3JlZmVyZW5jZWROb2Rlcy5hcHBlbmQobm9kZSk7Ci19
Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpkZXJlZk5vZGUoQXVkaW9Ob2RlKiBub2RlKQotewotICAg
IEFTU0VSVChpc0dyYXBoT3duZXIoKSk7Ci0gICAgCi0gICAgbm9kZS0+ZGVyZWYoQXVkaW9Ob2Rl
OjpSZWZUeXBlQ29ubmVjdGlvbik7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9y
ZWZlcmVuY2VkTm9kZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG5vZGUgPT0gbV9yZWZl
cmVuY2VkTm9kZXNbaV0pIHsKLSAgICAgICAgICAgIG1fcmVmZXJlbmNlZE5vZGVzLnJlbW92ZShp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEF1ZGlv
Q29udGV4dDo6ZGVyZWZVbmZpbmlzaGVkU291cmNlTm9kZXMoKQotewotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSAmJiBpc0F1ZGlvVGhyZWFkRmluaXNoZWQoKSk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fcmVmZXJlbmNlZE5vZGVzLnNpemUoKTsgKytpKQotICAgICAgICBtX3Jl
ZmVyZW5jZWROb2Rlc1tpXS0+ZGVyZWYoQXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7Ci0K
LSAgICBtX3JlZmVyZW5jZWROb2Rlcy5jbGVhcigpOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6
bG9jayhib29sJiBtdXN0UmVsZWFzZUxvY2spCi17Ci0gICAgLy8gRG9uJ3QgYWxsb3cgcmVndWxh
ciBsb2NrIGluIHJlYWwtdGltZSBhdWRpbyB0aHJlYWQuCi0gICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLQotICAgIFRocmVhZElkZW50aWZpZXIgdGhpc1RocmVhZCA9IGN1cnJlbnRUaHJlYWQo
KTsKLQotICAgIGlmICh0aGlzVGhyZWFkID09IG1fZ3JhcGhPd25lclRocmVhZCkgewotICAgICAg
ICAvLyBXZSBhbHJlYWR5IGhhdmUgdGhlIGxvY2suCi0gICAgICAgIG11c3RSZWxlYXNlTG9jayA9
IGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEFjcXVpcmUgdGhlIGxvY2suCi0gICAg
ICAgIG1fY29udGV4dEdyYXBoTXV0ZXgubG9jaygpOwotICAgICAgICBtX2dyYXBoT3duZXJUaHJl
YWQgPSB0aGlzVGhyZWFkOwotICAgICAgICBtdXN0UmVsZWFzZUxvY2sgPSB0cnVlOwotICAgIH0K
LX0KLQotYm9vbCBBdWRpb0NvbnRleHQ6OnRyeUxvY2soYm9vbCYgbXVzdFJlbGVhc2VMb2NrKQot
ewotICAgIFRocmVhZElkZW50aWZpZXIgdGhpc1RocmVhZCA9IGN1cnJlbnRUaHJlYWQoKTsKLSAg
ICBib29sIGlzQXVkaW9UaHJlYWQgPSB0aGlzVGhyZWFkID09IGF1ZGlvVGhyZWFkKCk7Ci0KLSAg
ICAvLyBUcnkgdG8gY2F0Y2ggY2FzZXMgb2YgdXNpbmcgdHJ5IGxvY2sgb24gbWFpbiB0aHJlYWQg
LSBpdCBzaG91bGQgdXNlIHJlZ3VsYXIgbG9jay4KLSAgICBBU1NFUlQoaXNBdWRpb1RocmVhZCB8
fCBpc0F1ZGlvVGhyZWFkRmluaXNoZWQoKSk7Ci0gICAgCi0gICAgaWYgKCFpc0F1ZGlvVGhyZWFk
KSB7Ci0gICAgICAgIC8vIEluIHJlbGVhc2UgYnVpbGQgdHJlYXQgdHJ5TG9jaygpIGFzIGxvY2so
KSAoc2luY2UgYWJvdmUgQVNTRVJUKGlzQXVkaW9UaHJlYWQpIG5ldmVyIGZpcmVzKSAtIHRoaXMg
aXMgdGhlIGJlc3Qgd2UgY2FuIGRvLgotICAgICAgICBsb2NrKG11c3RSZWxlYXNlTG9jayk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBib29sIGhhc0xvY2s7Ci0gICAg
Ci0gICAgaWYgKHRoaXNUaHJlYWQgPT0gbV9ncmFwaE93bmVyVGhyZWFkKSB7Ci0gICAgICAgIC8v
IFRocmVhZCBhbHJlYWR5IGhhcyB0aGUgbG9jay4KLSAgICAgICAgaGFzTG9jayA9IHRydWU7Ci0g
ICAgICAgIG11c3RSZWxlYXNlTG9jayA9IGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8v
IERvbid0IGFscmVhZHkgaGF2ZSB0aGUgbG9jayAtIHRyeSB0byBhY3F1aXJlIGl0LgotICAgICAg
ICBoYXNMb2NrID0gbV9jb250ZXh0R3JhcGhNdXRleC50cnlMb2NrKCk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoaGFzTG9jaykKLSAgICAgICAgICAgIG1fZ3JhcGhPd25lclRocmVhZCA9IHRoaXNU
aHJlYWQ7Ci0KLSAgICAgICAgbXVzdFJlbGVhc2VMb2NrID0gaGFzTG9jazsKLSAgICB9Ci0gICAg
Ci0gICAgcmV0dXJuIGhhc0xvY2s7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0Ojp1bmxvY2soKQot
ewotICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9ncmFwaE93bmVyVGhyZWFkKTsKLQot
ICAgIG1fZ3JhcGhPd25lclRocmVhZCA9IFVuZGVmaW5lZFRocmVhZElkZW50aWZpZXI7Ci0gICAg
bV9jb250ZXh0R3JhcGhNdXRleC51bmxvY2soKTsKLX0KLQotYm9vbCBBdWRpb0NvbnRleHQ6Omlz
QXVkaW9UaHJlYWQoKSBjb25zdAotewotICAgIHJldHVybiBjdXJyZW50VGhyZWFkKCkgPT0gbV9h
dWRpb1RocmVhZDsKLX0KLQotYm9vbCBBdWRpb0NvbnRleHQ6OmlzR3JhcGhPd25lcigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKSA9PSBtX2dyYXBoT3duZXJUaHJlYWQ7Ci19
Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjphZGREZWZlcnJlZEZpbmlzaERlcmVmKEF1ZGlvTm9kZSog
bm9kZSwgQXVkaW9Ob2RlOjpSZWZUeXBlIHJlZlR5cGUpCi17Ci0gICAgQVNTRVJUKGlzQXVkaW9U
aHJlYWQoKSk7Ci0gICAgbV9kZWZlcnJlZEZpbmlzaERlcmVmTGlzdC5hcHBlbmQoQXVkaW9Db250
ZXh0OjpSZWZJbmZvKG5vZGUsIHJlZlR5cGUpKTsKLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6Omhh
bmRsZVByZVJlbmRlclRhc2tzKCkKLXsKLSAgICBBU1NFUlQoaXNBdWRpb1RocmVhZCgpKTsKLSAK
LSAgICAvLyBBdCB0aGUgYmVnaW5uaW5nIG9mIGV2ZXJ5IHJlbmRlciBxdWFudHVtLCB0cnkgdG8g
dXBkYXRlIHRoZSBpbnRlcm5hbCByZW5kZXJpbmcgZ3JhcGggc3RhdGUgKGZyb20gbWFpbiB0aHJl
YWQgY2hhbmdlcykuCi0gICAgLy8gSXQncyBPSyBpZiB0aGUgdHJ5TG9jaygpIGZhaWxzLCB3ZSds
bCBqdXN0IHRha2Ugc2xpZ2h0bHkgbG9uZ2VyIHRvIHBpY2sgdXAgdGhlIGNoYW5nZXMuCi0gICAg
Ym9vbCBtdXN0UmVsZWFzZUxvY2s7Ci0gICAgaWYgKHRyeUxvY2sobXVzdFJlbGVhc2VMb2NrKSkg
ewotICAgICAgICAvLyBGaXh1cCB0aGUgc3RhdGUgb2YgYW55IGRpcnR5IEF1ZGlvTm9kZUlucHV0
cyBhbmQgQXVkaW9Ob2RlT3V0cHV0cy4KLSAgICAgICAgaGFuZGxlRGlydHlBdWRpb05vZGVJbnB1
dHMoKTsKLSAgICAgICAgaGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRzKCk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAobXVzdFJlbGVhc2VMb2NrKQotICAgICAgICAgICAgdW5sb2NrKCk7Ci0gICAg
fQotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxlUG9zdFJlbmRlclRhc2tzKCkKLXsKLSAg
ICBBU1NFUlQoaXNBdWRpb1RocmVhZCgpKTsKLSAKLSAgICAvLyBNdXN0IHVzZSBhIHRyeUxvY2so
KSBoZXJlIHRvby4gIERvbid0IHdvcnJ5LCB0aGUgbG9jayB3aWxsIHZlcnkgcmFyZWx5IGJlIGNv
bnRlbmRlZCBhbmQgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyZXF1ZW50bHkuCi0gICAgLy8gVGhl
IHdvcnN0IHRoYXQgY2FuIGhhcHBlbiBpcyB0aGF0IHRoZXJlIHdpbGwgYmUgc29tZSBub2RlcyB3
aGljaCB3aWxsIHRha2Ugc2xpZ2h0bHkgbG9uZ2VyIHRoYW4gdXN1YWwgdG8gYmUgZGVsZXRlZCBv
ciByZW1vdmVkCi0gICAgLy8gZnJvbSB0aGUgcmVuZGVyIGdyYXBoIChpbiB3aGljaCBjYXNlIHRo
ZXknbGwgcmVuZGVyIHNpbGVuY2UpLgotICAgIGJvb2wgbXVzdFJlbGVhc2VMb2NrOwotICAgIGlm
ICh0cnlMb2NrKG11c3RSZWxlYXNlTG9jaykpIHsKLSAgICAgICAgLy8gVGFrZSBjYXJlIG9mIGZp
bmlzaGluZyBhbnkgZGVyZWZzIHdoZXJlIHRoZSB0cnlMb2NrKCkgZmFpbGVkIHByZXZpb3VzbHku
Ci0gICAgICAgIGhhbmRsZURlZmVycmVkRmluaXNoRGVyZWZzKCk7Ci0KLSAgICAgICAgLy8gRHlu
YW1pY2FsbHkgY2xlYW4gdXAgbm9kZXMgd2hpY2ggYXJlIG5vIGxvbmdlciBuZWVkZWQuCi0gICAg
ICAgIGRlcmVmRmluaXNoZWRTb3VyY2VOb2RlcygpOwotCi0gICAgICAgIC8vIERvbid0IGRlbGV0
ZSBpbiB0aGUgcmVhbC10aW1lIHRocmVhZC4gTGV0IHRoZSBtYWluIHRocmVhZCBkbyBpdC4KLSAg
ICAgICAgLy8gUmVmLWNvdW50ZWQgb2JqZWN0cyBoZWxkIGJ5IGNlcnRhaW4gQXVkaW9Ob2RlcyBt
YXkgbm90IGJlIHRocmVhZC1zYWZlLgotICAgICAgICBzY2hlZHVsZU5vZGVEZWxldGlvbigpOwot
Ci0gICAgICAgIC8vIEZpeHVwIHRoZSBzdGF0ZSBvZiBhbnkgZGlydHkgQXVkaW9Ob2RlSW5wdXRz
IGFuZCBBdWRpb05vZGVPdXRwdXRzLgotICAgICAgICBoYW5kbGVEaXJ0eUF1ZGlvTm9kZUlucHV0
cygpOwotICAgICAgICBoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMoKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChtdXN0UmVsZWFzZUxvY2spCi0gICAgICAgICAgICB1bmxvY2soKTsKLSAgICB9
Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpoYW5kbGVEZWZlcnJlZEZpbmlzaERlcmVmcygpCi17
Ci0gICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSAmJiBpc0dyYXBoT3duZXIoKSk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZGVmZXJyZWRGaW5pc2hEZXJlZkxpc3Quc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgQXVkaW9Ob2RlKiBub2RlID0gbV9kZWZlcnJlZEZpbmlzaERlcmVmTGlz
dFtpXS5tX25vZGU7Ci0gICAgICAgIEF1ZGlvTm9kZTo6UmVmVHlwZSByZWZUeXBlID0gbV9kZWZl
cnJlZEZpbmlzaERlcmVmTGlzdFtpXS5tX3JlZlR5cGU7Ci0gICAgICAgIG5vZGUtPmZpbmlzaERl
cmVmKHJlZlR5cGUpOwotICAgIH0KLSAgICAKLSAgICBtX2RlZmVycmVkRmluaXNoRGVyZWZMaXN0
LmNsZWFyKCk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjptYXJrRm9yRGVsZXRpb24oQXVkaW9O
b2RlKiBub2RlKQotewotICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7Ci0gICAgbV9ub2Rlc1Rv
RGVsZXRlLmFwcGVuZChub2RlKTsKLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OnNjaGVkdWxlTm9k
ZURlbGV0aW9uKCkKLXsKLSAgICBib29sIGlzR29vZCA9IG1faXNJbml0aWFsaXplZCAmJiBpc0dy
YXBoT3duZXIoKTsKLSAgICBBU1NFUlQoaXNHb29kKTsKLSAgICBpZiAoIWlzR29vZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gTWFrZSBzdXJlIHRvIGNhbGwgZGVsZXRlTWFya2VkTm9kZXMo
KSBvbiBtYWluIHRocmVhZC4gICAgCi0gICAgaWYgKG1fbm9kZXNUb0RlbGV0ZS5zaXplKCkgJiYg
IW1faXNEZWxldGlvblNjaGVkdWxlZCkgewotICAgICAgICBtX2lzRGVsZXRpb25TY2hlZHVsZWQg
PSB0cnVlOwotCi0gICAgICAgIC8vIERvbid0IGxldCBvdXJzZWxmIGdldCBkZWxldGVkIGJlZm9y
ZSB0aGUgY2FsbGJhY2suCi0gICAgICAgIC8vIFNlZSBtYXRjaGluZyBkZXJlZigpIGluIGRlbGV0
ZU1hcmtlZE5vZGVzRGlzcGF0Y2goKS4KLSAgICAgICAgcmVmKCk7Ci0gICAgICAgIGNhbGxPbk1h
aW5UaHJlYWQoZGVsZXRlTWFya2VkTm9kZXNEaXNwYXRjaCwgdGhpcyk7Ci0gICAgfQotfQotCi12
b2lkIEF1ZGlvQ29udGV4dDo6ZGVsZXRlTWFya2VkTm9kZXNEaXNwYXRjaCh2b2lkKiB1c2VyRGF0
YSkKLXsKLSAgICBBdWRpb0NvbnRleHQqIGNvbnRleHQgPSByZWludGVycHJldF9jYXN0PEF1ZGlv
Q29udGV4dCo+KHVzZXJEYXRhKTsKLSAgICBBU1NFUlQoY29udGV4dCk7Ci0gICAgaWYgKCFjb250
ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb250ZXh0LT5kZWxldGVNYXJrZWROb2Rlcygp
OwotICAgIGNvbnRleHQtPmRlcmVmKCk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpkZWxldGVN
YXJrZWROb2RlcygpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIEF1dG9M
b2NrZXIgbG9ja2VyKHRoaXMpOwotICAgIAotICAgIC8vIE5vdGU6IGRlbGV0aW5nIGFuIEF1ZGlv
Tm9kZSBjYW4gY2F1c2UgbV9ub2Rlc1RvRGVsZXRlIHRvIGdyb3cuCi0gICAgd2hpbGUgKHNpemVf
dCBuID0gbV9ub2Rlc1RvRGVsZXRlLnNpemUoKSkgewotICAgICAgICBBdWRpb05vZGUqIG5vZGUg
PSBtX25vZGVzVG9EZWxldGVbbiAtIDFdOwotICAgICAgICBtX25vZGVzVG9EZWxldGUucmVtb3Zl
TGFzdCgpOwotCi0gICAgICAgIC8vIEJlZm9yZSBkZWxldGluZyB0aGUgbm9kZSwgY2xlYXIgb3V0
IGFueSBBdWRpb05vZGVJbnB1dHMgZnJvbSBtX2RpcnR5QXVkaW9Ob2RlSW5wdXRzLgotICAgICAg
ICB1bnNpZ25lZCBudW1iZXJPZklucHV0cyA9IG5vZGUtPm51bWJlck9mSW5wdXRzKCk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklucHV0czsgKytpKQotICAgICAg
ICAgICAgbV9kaXJ0eUF1ZGlvTm9kZUlucHV0cy5yZW1vdmUobm9kZS0+aW5wdXQoaSkpOwotCi0g
ICAgICAgIC8vIEJlZm9yZSBkZWxldGluZyB0aGUgbm9kZSwgY2xlYXIgb3V0IGFueSBBdWRpb05v
ZGVPdXRwdXRzIGZyb20gbV9kaXJ0eUF1ZGlvTm9kZU91dHB1dHMuCi0gICAgICAgIHVuc2lnbmVk
IG51bWJlck9mT3V0cHV0cyA9IG5vZGUtPm51bWJlck9mT3V0cHV0cygpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZPdXRwdXRzOyArK2kpCi0gICAgICAgICAgICBt
X2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5yZW1vdmUobm9kZS0+b3V0cHV0KGkpKTsKLQotICAgICAg
ICAvLyBGaW5hbGx5LCBkZWxldGUgaXQuCi0gICAgICAgIGRlbGV0ZSBub2RlOwotICAgIH0KLSAg
ICAKLSAgICBtX2lzRGVsZXRpb25TY2hlZHVsZWQgPSBmYWxzZTsKLX0KLQotdm9pZCBBdWRpb0Nv
bnRleHQ6Om1hcmtBdWRpb05vZGVJbnB1dERpcnR5KEF1ZGlvTm9kZUlucHV0KiBpbnB1dCkKLXsK
LSAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOyAgICAKLSAgICBtX2RpcnR5QXVkaW9Ob2RlSW5w
dXRzLmFkZChpbnB1dCk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjptYXJrQXVkaW9Ob2RlT3V0
cHV0RGlydHkoQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQpCi17Ci0gICAgQVNTRVJUKGlzR3JhcGhP
d25lcigpKTsgICAgCi0gICAgbV9kaXJ0eUF1ZGlvTm9kZU91dHB1dHMuYWRkKG91dHB1dCk7Ci19
Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0eUF1ZGlvTm9kZUlucHV0cygpCi17Ci0g
ICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsgICAgCi0KLSAgICBmb3IgKEhhc2hTZXQ8QXVkaW9O
b2RlSW5wdXQqPjo6aXRlcmF0b3IgaSA9IG1fZGlydHlBdWRpb05vZGVJbnB1dHMuYmVnaW4oKTsg
aSAhPSBtX2RpcnR5QXVkaW9Ob2RlSW5wdXRzLmVuZCgpOyArK2kpCi0gICAgICAgICgqaSktPnVw
ZGF0ZVJlbmRlcmluZ1N0YXRlKCk7Ci0KLSAgICBtX2RpcnR5QXVkaW9Ob2RlSW5wdXRzLmNsZWFy
KCk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMo
KQotewotICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7ICAgIAotCi0gICAgZm9yIChIYXNoU2V0
PEF1ZGlvTm9kZU91dHB1dCo+OjppdGVyYXRvciBpID0gbV9kaXJ0eUF1ZGlvTm9kZU91dHB1dHMu
YmVnaW4oKTsgaSAhPSBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5lbmQoKTsgKytpKQotICAgICAg
ICAoKmkpLT51cGRhdGVSZW5kZXJpbmdTdGF0ZSgpOwotCi0gICAgbV9kaXJ0eUF1ZGlvTm9kZU91
dHB1dHMuY2xlYXIoKTsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBBdWRpb0NvbnRleHQ6Omlu
dGVyZmFjZU5hbWUoKSBjb25zdAotewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNl
Rm9yQXVkaW9Db250ZXh0OwotfQotCi1TY3JpcHRFeGVjdXRpb25Db250ZXh0KiBBdWRpb0NvbnRl
eHQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBkb2N1bWVu
dCgpOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6c3RhcnRSZW5kZXJpbmcoKQotewotICAgIGRl
c3RpbmF0aW9uKCktPnN0YXJ0UmVuZGVyaW5nKCk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0Ojpm
aXJlQ29tcGxldGlvbkV2ZW50KCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAg
IGlmICghaXNNYWluVGhyZWFkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgQXVk
aW9CdWZmZXIqIHJlbmRlcmVkQnVmZmVyID0gbV9yZW5kZXJUYXJnZXQuZ2V0KCk7Ci0KLSAgICBB
U1NFUlQocmVuZGVyZWRCdWZmZXIpOwotICAgIGlmICghcmVuZGVyZWRCdWZmZXIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIEF2b2lkIGZpcmluZyB0aGUgZXZlbnQgaWYgdGhlIGRvY3VtZW50
IGhhcyBhbHJlYWR5IGdvbmUgYXdheS4KLSAgICBpZiAoaGFzRG9jdW1lbnQoKSkgewotICAgICAg
ICAvLyBDYWxsIHRoZSBvZmZsaW5lIHJlbmRlcmluZyBjb21wbGV0aW9uIGV2ZW50IGxpc3RlbmVy
LgotICAgICAgICBkaXNwYXRjaEV2ZW50KE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6Y3Jl
YXRlKHJlbmRlcmVkQnVmZmVyKSk7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9Db250ZXh0LmgJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0F1ZGlvQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMxOSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBBdWRpb0NvbnRleHRfaAotI2RlZmluZSBBdWRpb0NvbnRleHRf
aAotCi0jaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiQXN5bmNBdWRpb0Rl
Y29kZXIuaCIKLSNpbmNsdWRlICJBdWRpb0J1cy5oIgotI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRp
b25Ob2RlLmgiCi0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIkV2ZW50VGFy
Z2V0LmgiCi0jaW5jbHVkZSAiSFJURkRhdGFiYXNlTG9hZGVyLmgiCi0jaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSGFzaC5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvQnVmZmVyOwotY2xhc3MgQXVkaW9CdWZmZXJD
YWxsYmFjazsKLWNsYXNzIEF1ZGlvQnVmZmVyU291cmNlTm9kZTsKLWNsYXNzIE1lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZTsKLWNsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7Ci1jbGFzcyBBdWRpb0No
YW5uZWxNZXJnZXI7Ci1jbGFzcyBBdWRpb0NoYW5uZWxTcGxpdHRlcjsKLWNsYXNzIEF1ZGlvR2Fp
bk5vZGU7Ci1jbGFzcyBBdWRpb1Bhbm5lck5vZGU7Ci1jbGFzcyBBdWRpb0xpc3RlbmVyOwotY2xh
c3MgQmlxdWFkRmlsdGVyTm9kZTsKLWNsYXNzIERlbGF5Tm9kZTsKLWNsYXNzIERvY3VtZW50Owot
Y2xhc3MgTG93UGFzczJGaWx0ZXJOb2RlOwotY2xhc3MgSGlnaFBhc3MyRmlsdGVyTm9kZTsKLWNs
YXNzIENvbnZvbHZlck5vZGU7Ci1jbGFzcyBEeW5hbWljc0NvbXByZXNzb3JOb2RlOwotY2xhc3Mg
UmVhbHRpbWVBbmFseXNlck5vZGU7Ci1jbGFzcyBXYXZlU2hhcGVyTm9kZTsKLWNsYXNzIEphdmFT
Y3JpcHRBdWRpb05vZGU7Ci0KLS8vIEF1ZGlvQ29udGV4dCBpcyB0aGUgY29ybmVyc3RvbmUgb2Yg
dGhlIHdlYiBhdWRpbyBBUEkgYW5kIGFsbCBBdWRpb05vZGVzIGFyZSBjcmVhdGVkIGZyb20gaXQu
Ci0vLyBGb3IgdGhyZWFkIHNhZmV0eSBiZXR3ZWVuIHRoZSBhdWRpbyB0aHJlYWQgYW5kIHRoZSBt
YWluIHRocmVhZCwgaXQgaGFzIGEgcmVuZGVyaW5nIGdyYXBoIGxvY2tpbmcgbWVjaGFuaXNtLiAK
LQotY2xhc3MgQXVkaW9Db250ZXh0IDogcHVibGljIEFjdGl2ZURPTU9iamVjdCwgcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPEF1ZGlvQ29udGV4dD4sIHB1YmxpYyBFdmVudFRhcmdldCB7Ci1w
dWJsaWM6Ci0gICAgLy8gQ3JlYXRlIGFuIEF1ZGlvQ29udGV4dCBmb3IgcmVuZGVyaW5nIHRvIHRo
ZSBhdWRpbyBoYXJkd2FyZS4KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb0NvbnRleHQ+IGNy
ZWF0ZShEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIC8vIENyZWF0ZSBhbiBBdWRp
b0NvbnRleHQgZm9yIG9mZmxpbmUgKG5vbi1yZWFsdGltZSkgcmVuZGVyaW5nLgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEF1ZGlvQ29udGV4dD4gY3JlYXRlT2ZmbGluZUNvbnRleHQoRG9jdW1lbnQq
LCB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMsIGZsb2F0
IHNhbXBsZVJhdGUsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgfkF1ZGlvQ29udGV4
dCgpOwotCi0gICAgYm9vbCBpc0luaXRpYWxpemVkKCkgY29uc3Q7Ci0gICAgCi0gICAgYm9vbCBp
c09mZmxpbmVDb250ZXh0KCkgeyByZXR1cm4gbV9pc09mZmxpbmVDb250ZXh0OyB9Ci0KLSAgICAv
LyBSZXR1cm5zIHRydWUgd2hlbiBpbml0aWFsaXplKCkgd2FzIGNhbGxlZCBBTkQgYWxsIGFzeW5j
aHJvbm91cyBpbml0aWFsaXphdGlvbiBoYXMgY29tcGxldGVkLgotICAgIGJvb2wgaXNSdW5uYWJs
ZSgpIGNvbnN0OwotCi0gICAgLy8gRG9jdW1lbnQgbm90aWZpY2F0aW9uCi0gICAgdmlydHVhbCB2
b2lkIHN0b3AoKTsKLQotICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0OyAvLyBBU1NFUlRz
IGlmIGRvY3VtZW50IG5vIGxvbmdlciBleGlzdHMuCi0gICAgYm9vbCBoYXNEb2N1bWVudCgpOwot
Ci0gICAgQXVkaW9EZXN0aW5hdGlvbk5vZGUqIGRlc3RpbmF0aW9uKCkgeyByZXR1cm4gbV9kZXN0
aW5hdGlvbk5vZGUuZ2V0KCk7IH0KLSAgICBzaXplX3QgY3VycmVudFNhbXBsZUZyYW1lKCkgeyBy
ZXR1cm4gbV9kZXN0aW5hdGlvbk5vZGUtPmN1cnJlbnRTYW1wbGVGcmFtZSgpOyB9Ci0gICAgZG91
YmxlIGN1cnJlbnRUaW1lKCkgeyByZXR1cm4gbV9kZXN0aW5hdGlvbk5vZGUtPmN1cnJlbnRUaW1l
KCk7IH0KLSAgICBmbG9hdCBzYW1wbGVSYXRlKCkgeyByZXR1cm4gbV9kZXN0aW5hdGlvbk5vZGUt
PnNhbXBsZVJhdGUoKTsgfQotCi0gICAgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gY3JlYXRlQnVm
ZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxv
YXQgc2FtcGxlUmF0ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8QXVkaW9CdWZm
ZXI+IGNyZWF0ZUJ1ZmZlcihBcnJheUJ1ZmZlciosIGJvb2wgbWl4VG9Nb25vLCBFeGNlcHRpb25D
b2RlJik7Ci0KLSAgICAvLyBBc3luY2hyb25vdXMgYXVkaW8gZmlsZSBkYXRhIGRlY29kaW5nLgot
ICAgIHZvaWQgZGVjb2RlQXVkaW9EYXRhKEFycmF5QnVmZmVyKiwgUGFzc1JlZlB0cjxBdWRpb0J1
ZmZlckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiwgRXhjZXB0aW9u
Q29kZSYgZWMpOwotCi0gICAgQXVkaW9MaXN0ZW5lciogbGlzdGVuZXIoKSB7IHJldHVybiBtX2xp
c3RlbmVyLmdldCgpOyB9Ci0KLSAgICAvLyBUaGUgQXVkaW9Ob2RlIGNyZWF0ZSBtZXRob2RzIGFy
ZSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIChmcm9tIEphdmFTY3JpcHQpLgotICAgIFBhc3NS
ZWZQdHI8QXVkaW9CdWZmZXJTb3VyY2VOb2RlPiBjcmVhdGVCdWZmZXJTb3VyY2UoKTsKLSNpZiBF
TkFCTEUoVklERU8pCi0gICAgUGFzc1JlZlB0cjxNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+
IGNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZShIVE1MTWVkaWFFbGVtZW50KiwgRXhjZXB0aW9uQ29k
ZSYpOwotI2VuZGlmCi0gICAgUGFzc1JlZlB0cjxBdWRpb0dhaW5Ob2RlPiBjcmVhdGVHYWluTm9k
ZSgpOwotICAgIFBhc3NSZWZQdHI8QmlxdWFkRmlsdGVyTm9kZT4gY3JlYXRlQmlxdWFkRmlsdGVy
KCk7Ci0gICAgUGFzc1JlZlB0cjxXYXZlU2hhcGVyTm9kZT4gY3JlYXRlV2F2ZVNoYXBlcigpOwot
ICAgIFBhc3NSZWZQdHI8RGVsYXlOb2RlPiBjcmVhdGVEZWxheU5vZGUoKTsKLSAgICBQYXNzUmVm
UHRyPERlbGF5Tm9kZT4gY3JlYXRlRGVsYXlOb2RlKGRvdWJsZSBtYXhEZWxheVRpbWUpOwotICAg
IFBhc3NSZWZQdHI8TG93UGFzczJGaWx0ZXJOb2RlPiBjcmVhdGVMb3dQYXNzMkZpbHRlcigpOwot
ICAgIFBhc3NSZWZQdHI8SGlnaFBhc3MyRmlsdGVyTm9kZT4gY3JlYXRlSGlnaFBhc3MyRmlsdGVy
KCk7Ci0gICAgUGFzc1JlZlB0cjxBdWRpb1Bhbm5lck5vZGU+IGNyZWF0ZVBhbm5lcigpOwotICAg
IFBhc3NSZWZQdHI8Q29udm9sdmVyTm9kZT4gY3JlYXRlQ29udm9sdmVyKCk7Ci0gICAgUGFzc1Jl
ZlB0cjxEeW5hbWljc0NvbXByZXNzb3JOb2RlPiBjcmVhdGVEeW5hbWljc0NvbXByZXNzb3IoKTsg
ICAgCi0gICAgUGFzc1JlZlB0cjxSZWFsdGltZUFuYWx5c2VyTm9kZT4gY3JlYXRlQW5hbHlzZXIo
KTsKLSAgICBQYXNzUmVmUHRyPEphdmFTY3JpcHRBdWRpb05vZGU+IGNyZWF0ZUphdmFTY3JpcHRO
b2RlKHNpemVfdCBidWZmZXJTaXplKTsKLSAgICBQYXNzUmVmUHRyPEF1ZGlvQ2hhbm5lbFNwbGl0
dGVyPiBjcmVhdGVDaGFubmVsU3BsaXR0ZXIoKTsKLSAgICBQYXNzUmVmUHRyPEF1ZGlvQ2hhbm5l
bE1lcmdlcj4gY3JlYXRlQ2hhbm5lbE1lcmdlcigpOwotCi0gICAgLy8gV2hlbiBhIHNvdXJjZSBu
b2RlIGhhcyBubyBtb3JlIHByb2Nlc3NpbmcgdG8gZG8gKGhhcyBmaW5pc2hlZCBwbGF5aW5nKSwg
dGhlbiBpdCB0ZWxscyB0aGUgY29udGV4dCB0byBkZXJlZmVyZW5jZSBpdC4KLSAgICB2b2lkIG5v
dGlmeU5vZGVGaW5pc2hlZFByb2Nlc3NpbmcoQXVkaW9Ob2RlKik7Ci0KLSAgICAvLyBDYWxsZWQg
YXQgdGhlIHN0YXJ0IG9mIGVhY2ggcmVuZGVyIHF1YW50dW0uCi0gICAgdm9pZCBoYW5kbGVQcmVS
ZW5kZXJUYXNrcygpOwotCi0gICAgLy8gQ2FsbGVkIGF0IHRoZSBlbmQgb2YgZWFjaCByZW5kZXIg
cXVhbnR1bS4KLSAgICB2b2lkIGhhbmRsZVBvc3RSZW5kZXJUYXNrcygpOwotCi0gICAgLy8gQ2Fs
bGVkIHBlcmlvZGljYWxseSBhdCB0aGUgZW5kIG9mIGVhY2ggcmVuZGVyIHF1YW50dW0gdG8gZGVy
ZWZlcmVuY2UgZmluaXNoZWQgc291cmNlIG5vZGVzLgotICAgIHZvaWQgZGVyZWZGaW5pc2hlZFNv
dXJjZU5vZGVzKCk7Ci0KLSAgICAvLyBXZSBzY2hlZHVsZSBkZWxldGlvbiBvZiBhbGwgbWFya2Vk
IG5vZGVzIGF0IHRoZSBlbmQgb2YgZWFjaCByZWFsdGltZSByZW5kZXIgcXVhbnR1bS4KLSAgICB2
b2lkIG1hcmtGb3JEZWxldGlvbihBdWRpb05vZGUqKTsKLSAgICB2b2lkIGRlbGV0ZU1hcmtlZE5v
ZGVzKCk7Ci0gICAgCi0gICAgLy8gS2VlcHMgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBjb25uZWN0
aW9ucyBtYWRlLgotICAgIHZvaWQgaW5jcmVtZW50Q29ubmVjdGlvbkNvdW50KCkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgICAgIG1fY29ubmVjdGlvbkNvdW50
Kys7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY29ubmVjdGlvbkNvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9jb25uZWN0aW9uQ291bnQ7IH0KLQotICAgIC8vCi0gICAgLy8gVGhyZWFkIFNhZmV0eSBh
bmQgR3JhcGggTG9ja2luZzoKLSAgICAvLwotICAgIAotICAgIHZvaWQgc2V0QXVkaW9UaHJlYWQo
VGhyZWFkSWRlbnRpZmllciB0aHJlYWQpIHsgbV9hdWRpb1RocmVhZCA9IHRocmVhZDsgfSAvLyBG
SVhNRTogY2hlY2sgZWl0aGVyIG5vdCBpbml0aWFsaXplZCBvciB0aGUgc2FtZQotICAgIFRocmVh
ZElkZW50aWZpZXIgYXVkaW9UaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX2F1ZGlvVGhyZWFkOyB9
Ci0gICAgYm9vbCBpc0F1ZGlvVGhyZWFkKCkgY29uc3Q7Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUg
b25seSBhZnRlciB0aGUgYXVkaW8gdGhyZWFkIGhhcyBiZWVuIHN0YXJ0ZWQgYW5kIHRoZW4gc2h1
dGRvd24uCi0gICAgYm9vbCBpc0F1ZGlvVGhyZWFkRmluaXNoZWQoKSB7IHJldHVybiBtX2lzQXVk
aW9UaHJlYWRGaW5pc2hlZDsgfQotICAgIAotICAgIC8vIG11c3RSZWxlYXNlTG9jayBpcyBzZXQg
dG8gdHJ1ZSBpZiB3ZSBhY3F1aXJlZCB0aGUgbG9jayBpbiB0aGlzIG1ldGhvZCBjYWxsIGFuZCBj
YWxsZXIgbXVzdCB1bmxvY2soKSwgZmFsc2UgaWYgaXQgd2FzIHByZXZpb3VzbHkgYWNxdWlyZWQu
Ci0gICAgdm9pZCBsb2NrKGJvb2wmIG11c3RSZWxlYXNlTG9jayk7Ci0KLSAgICAvLyBSZXR1cm5z
IHRydWUgaWYgd2Ugb3duIHRoZSBsb2NrLgotICAgIC8vIG11c3RSZWxlYXNlTG9jayBpcyBzZXQg
dG8gdHJ1ZSBpZiB3ZSBhY3F1aXJlZCB0aGUgbG9jayBpbiB0aGlzIG1ldGhvZCBjYWxsIGFuZCBj
YWxsZXIgbXVzdCB1bmxvY2soKSwgZmFsc2UgaWYgaXQgd2FzIHByZXZpb3VzbHkgYWNxdWlyZWQu
Ci0gICAgYm9vbCB0cnlMb2NrKGJvb2wmIG11c3RSZWxlYXNlTG9jayk7Ci0KLSAgICB2b2lkIHVu
bG9jaygpOwotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgdGhyZWFkIG93bnMgdGhlIGNv
bnRleHQncyBsb2NrLgotICAgIGJvb2wgaXNHcmFwaE93bmVyKCkgY29uc3Q7Ci0KLSAgICAvLyBS
ZXR1cm5zIHRoZSBtYXhpbXVtIG51bXViZXIgb2YgY2hhbm5lbHMgd2UgY2FuIHN1cHBvcnQuCi0g
ICAgc3RhdGljIHVuc2lnbmVkIG1heE51bWJlck9mQ2hhbm5lbHMoKSB7IHJldHVybiBNYXhOdW1i
ZXJPZkNoYW5uZWxzO30KLQotICAgIGNsYXNzIEF1dG9Mb2NrZXIgewotICAgIHB1YmxpYzoKLSAg
ICAgICAgQXV0b0xvY2tlcihBdWRpb0NvbnRleHQqIGNvbnRleHQpCi0gICAgICAgICAgICA6IG1f
Y29udGV4dChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoY29udGV4dCk7
Ci0gICAgICAgICAgICBjb250ZXh0LT5sb2NrKG1fbXVzdFJlbGVhc2VMb2NrKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgfkF1dG9Mb2NrZXIoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAobV9tdXN0UmVsZWFzZUxvY2spCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT51bmxv
Y2soKTsKLSAgICAgICAgfQotICAgIHByaXZhdGU6Ci0gICAgICAgIEF1ZGlvQ29udGV4dCogbV9j
b250ZXh0OwotICAgICAgICBib29sIG1fbXVzdFJlbGVhc2VMb2NrOwotICAgIH07Ci0gICAgCi0g
ICAgLy8gSW4gQXVkaW9Ob2RlOjpkZXJlZigpIGEgdHJ5TG9jaygpIGlzIHVzZWQgZm9yIGNhbGxp
bmcgZmluaXNoRGVyZWYoKSwgYnV0IGlmIGl0IGZhaWxzIGtlZXAgdHJhY2sgaGVyZS4KLSAgICB2
b2lkIGFkZERlZmVycmVkRmluaXNoRGVyZWYoQXVkaW9Ob2RlKiwgQXVkaW9Ob2RlOjpSZWZUeXBl
KTsKLQotICAgIC8vIEluIHRoZSBhdWRpbyB0aHJlYWQgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggcmVu
ZGVyIGN5Y2xlLCB3ZSdsbCBjYWxsIGhhbmRsZURlZmVycmVkRmluaXNoRGVyZWZzKCkuCi0gICAg
dm9pZCBoYW5kbGVEZWZlcnJlZEZpbmlzaERlcmVmcygpOwotCi0gICAgLy8gT25seSBhY2Nlc3Nl
ZCB3aGVuIHRoZSBncmFwaCBsb2NrIGlzIGhlbGQuCi0gICAgdm9pZCBtYXJrQXVkaW9Ob2RlSW5w
dXREaXJ0eShBdWRpb05vZGVJbnB1dCopOwotICAgIHZvaWQgbWFya0F1ZGlvTm9kZU91dHB1dERp
cnR5KEF1ZGlvTm9kZU91dHB1dCopOwotCi0gICAgLy8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0dWFs
IGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OwotICAgIHZpcnR1YWwg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKSB7IHJldHVybiAm
bV9ldmVudFRhcmdldERhdGE7IH0KLSAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZW5zdXJl
RXZlbnRUYXJnZXREYXRhKCkgeyByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOyB9Ci0KLSAgICBE
RUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGNvbXBsZXRlKTsKLQotICAgIC8vIFJlY29u
Y2lsZSByZWYvZGVyZWYgd2hpY2ggYXJlIGRlZmluZWQgYm90aCBpbiBUaHJlYWRTYWZlUmVmQ291
bnRlZCBhbmQgRXZlbnRUYXJnZXQuCi0gICAgdXNpbmcgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QXVk
aW9Db250ZXh0Pjo6cmVmOwotICAgIHVzaW5nIFRocmVhZFNhZmVSZWZDb3VudGVkPEF1ZGlvQ29u
dGV4dD46OmRlcmVmOwotCi0gICAgdm9pZCBzdGFydFJlbmRlcmluZygpOwotICAgIHZvaWQgZmly
ZUNvbXBsZXRpb25FdmVudCgpOwotICAgIAotICAgIHN0YXRpYyB1bnNpZ25lZCBzX2hhcmR3YXJl
Q29udGV4dENvdW50OwotICAgIAotcHJpdmF0ZToKLSAgICBBdWRpb0NvbnRleHQoRG9jdW1lbnQq
KTsKLSAgICBBdWRpb0NvbnRleHQoRG9jdW1lbnQqLCB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxz
LCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMsIGZsb2F0IHNhbXBsZVJhdGUpOwotICAgIHZvaWQgY29u
c3RydWN0Q29tbW9uKCk7Ci0KLSAgICB2b2lkIGxhenlJbml0aWFsaXplKCk7Ci0gICAgdm9pZCB1
bmluaXRpYWxpemUoKTsKLSAgICBzdGF0aWMgdm9pZCB1bmluaXRpYWxpemVEaXNwYXRjaCh2b2lk
KiB1c2VyRGF0YSk7Ci0KLSAgICB2b2lkIHNjaGVkdWxlTm9kZURlbGV0aW9uKCk7Ci0gICAgc3Rh
dGljIHZvaWQgZGVsZXRlTWFya2VkTm9kZXNEaXNwYXRjaCh2b2lkKiB1c2VyRGF0YSk7Ci0gICAg
Ci0gICAgYm9vbCBtX2lzSW5pdGlhbGl6ZWQ7Ci0gICAgYm9vbCBtX2lzQXVkaW9UaHJlYWRGaW5p
c2hlZDsKLSAgICBib29sIG1faXNBdWRpb1RocmVhZFNodXRkb3duOwotCi0gICAgRG9jdW1lbnQq
IG1fZG9jdW1lbnQ7Ci0KLSAgICAvLyBUaGUgY29udGV4dCBpdHNlbGYga2VlcHMgYSByZWZlcmVu
Y2UgdG8gYWxsIHNvdXJjZSBub2Rlcy4gIFRoZSBzb3VyY2Ugbm9kZXMsIHRoZW4gcmVmZXJlbmNl
IGFsbCBub2RlcyB0aGV5J3JlIGNvbm5lY3RlZCB0by4KLSAgICAvLyBJbiB0dXJuLCB0aGVzZSBu
b2RlcyByZWZlcmVuY2UgYWxsIG5vZGVzIHRoZXkncmUgY29ubmVjdGVkIHRvLiAgQWxsIG5vZGVz
IGFyZSB1bHRpbWF0ZWx5IGNvbm5lY3RlZCB0byB0aGUgQXVkaW9EZXN0aW5hdGlvbk5vZGUuCi0g
ICAgLy8gV2hlbiB0aGUgY29udGV4dCBkZXJlZmVyZW5jZXMgYSBzb3VyY2Ugbm9kZSwgaXQgd2ls
bCBiZSBkZWFjdGl2YXRlZCBmcm9tIHRoZSByZW5kZXJpbmcgZ3JhcGggYWxvbmcgd2l0aCBhbGwg
b3RoZXIgbm9kZXMgaXQgaXMKLSAgICAvLyB1bmlxdWVseSBjb25uZWN0ZWQgdG8uICBTZWUgdGhl
IEF1ZGlvTm9kZTo6cmVmKCkgYW5kIEF1ZGlvTm9kZTo6ZGVyZWYoKSBtZXRob2RzIGZvciBtb3Jl
IGRldGFpbHMuCi0gICAgdm9pZCByZWZOb2RlKEF1ZGlvTm9kZSopOwotICAgIHZvaWQgZGVyZWZO
b2RlKEF1ZGlvTm9kZSopOwotCi0gICAgLy8gV2hlbiB0aGUgY29udGV4dCBnb2VzIGF3YXksIHRo
ZXJlIG1pZ2h0IHN0aWxsIGJlIHNvbWUgc291cmNlcyB3aGljaCBoYXZlbid0IGZpbmlzaGVkIHBs
YXlpbmcuCi0gICAgLy8gTWFrZSBzdXJlIHRvIGRlcmVmZXJlbmNlIHRoZW0gaGVyZS4KLSAgICB2
b2lkIGRlcmVmVW5maW5pc2hlZFNvdXJjZU5vZGVzKCk7Ci0KLSAgICBSZWZQdHI8QXVkaW9EZXN0
aW5hdGlvbk5vZGU+IG1fZGVzdGluYXRpb25Ob2RlOwotICAgIFJlZlB0cjxBdWRpb0xpc3RlbmVy
PiBtX2xpc3RlbmVyOwotCi0gICAgLy8gT25seSBhY2Nlc3NlZCBpbiB0aGUgYXVkaW8gdGhyZWFk
LgotICAgIFZlY3RvcjxBdWRpb05vZGUqPiBtX2ZpbmlzaGVkTm9kZXM7Ci0KLSAgICAvLyBXZSBk
b24ndCB1c2UgUmVmUHRyPEF1ZGlvTm9kZT4gaGVyZSBiZWNhdXNlIEF1ZGlvTm9kZSBoYXMgYSBt
b3JlIGNvbXBsZXggcmVmKCkgLyBkZXJlZigpIGltcGxlbWVudGF0aW9uCi0gICAgLy8gd2l0aCBh
biBvcHRpb25hbCBhcmd1bWVudCBmb3IgcmVmVHlwZS4gIFdlIG5lZWQgdG8gdXNlIHRoZSBzcGVj
aWFsIHJlZlR5cGU6IFJlZlR5cGVDb25uZWN0aW9uCi0gICAgLy8gRWl0aGVyIGFjY2Vzc2VkIHdo
ZW4gdGhlIGdyYXBoIGxvY2sgaXMgaGVsZCwgb3Igb24gdGhlIG1haW4gdGhyZWFkIHdoZW4gdGhl
IGF1ZGlvIHRocmVhZCBoYXMgZmluaXNoZWQuCi0gICAgVmVjdG9yPEF1ZGlvTm9kZSo+IG1fcmVm
ZXJlbmNlZE5vZGVzOwotCi0gICAgLy8gQWNjdW11bGF0ZSBub2RlcyB3aGljaCBuZWVkIHRvIGJl
IGRlbGV0ZWQgaGVyZS4KLSAgICAvLyBUaGV5IHdpbGwgYmUgc2NoZWR1bGVkIGZvciBkZWxldGlv
biAob24gdGhlIG1haW4gdGhyZWFkKSBhdCB0aGUgZW5kIG9mIGEgcmVuZGVyIGN5Y2xlIChpbiBy
ZWFsdGltZSB0aHJlYWQpLgotICAgIFZlY3RvcjxBdWRpb05vZGUqPiBtX25vZGVzVG9EZWxldGU7
Ci0gICAgYm9vbCBtX2lzRGVsZXRpb25TY2hlZHVsZWQ7Ci0KLSAgICAvLyBPbmx5IGFjY2Vzc2Vk
IHdoZW4gdGhlIGdyYXBoIGxvY2sgaXMgaGVsZC4KLSAgICBIYXNoU2V0PEF1ZGlvTm9kZUlucHV0
Kj4gbV9kaXJ0eUF1ZGlvTm9kZUlucHV0czsKLSAgICBIYXNoU2V0PEF1ZGlvTm9kZU91dHB1dCo+
IG1fZGlydHlBdWRpb05vZGVPdXRwdXRzOwotICAgIHZvaWQgaGFuZGxlRGlydHlBdWRpb05vZGVJ
bnB1dHMoKTsKLSAgICB2b2lkIGhhbmRsZURpcnR5QXVkaW9Ob2RlT3V0cHV0cygpOwotCi0gICAg
dW5zaWduZWQgbV9jb25uZWN0aW9uQ291bnQ7Ci0KLSAgICAvLyBHcmFwaCBsb2NraW5nLgotICAg
IE11dGV4IG1fY29udGV4dEdyYXBoTXV0ZXg7Ci0gICAgdm9sYXRpbGUgVGhyZWFkSWRlbnRpZmll
ciBtX2F1ZGlvVGhyZWFkOwotICAgIHZvbGF0aWxlIFRocmVhZElkZW50aWZpZXIgbV9ncmFwaE93
bmVyVGhyZWFkOyAvLyBpZiB0aGUgbG9jayBpcyBoZWxkIHRoZW4gdGhpcyBpcyB0aGUgdGhyZWFk
IHdoaWNoIG93bnMgaXQsIG90aGVyd2lzZSA9PSBVbmRlZmluZWRUaHJlYWRJZGVudGlmaWVyCi0g
ICAgCi0gICAgLy8gRGVmZXJyZWQgZGUtcmVmZXJlbmNpbmcuCi0gICAgc3RydWN0IFJlZkluZm8g
ewotICAgICAgICBSZWZJbmZvKEF1ZGlvTm9kZSogbm9kZSwgQXVkaW9Ob2RlOjpSZWZUeXBlIHJl
ZlR5cGUpCi0gICAgICAgICAgICA6IG1fbm9kZShub2RlKQotICAgICAgICAgICAgLCBtX3JlZlR5
cGUocmVmVHlwZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIEF1ZGlvTm9kZSogbV9u
b2RlOwotICAgICAgICBBdWRpb05vZGU6OlJlZlR5cGUgbV9yZWZUeXBlOwotICAgIH07ICAgIAot
Ci0gICAgLy8gT25seSBhY2Nlc3NlZCBpbiB0aGUgYXVkaW8gdGhyZWFkLgotICAgIFZlY3RvcjxS
ZWZJbmZvPiBtX2RlZmVycmVkRmluaXNoRGVyZWZMaXN0OwotICAgIAotICAgIC8vIEhSVEYgRGF0
YWJhc2UgbG9hZGVyCi0gICAgUmVmUHRyPEhSVEZEYXRhYmFzZUxvYWRlcj4gbV9ocnRmRGF0YWJh
c2VMb2FkZXI7Ci0KLSAgICAvLyBFdmVudFRhcmdldAotICAgIHZpcnR1YWwgdm9pZCByZWZFdmVu
dFRhcmdldCgpIHsgcmVmKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgp
IHsgZGVyZWYoKTsgfQotICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKLQot
ICAgIFJlZlB0cjxBdWRpb0J1ZmZlcj4gbV9yZW5kZXJUYXJnZXQ7Ci0gICAgCi0gICAgYm9vbCBt
X2lzT2ZmbGluZUNvbnRleHQ7Ci0KLSAgICBBc3luY0F1ZGlvRGVjb2RlciBtX2F1ZGlvRGVjb2Rl
cjsKLQotICAgIC8vIFRoaXMgaXMgY29uc2lkZXJpbmcgMzIgaXMgbGFyZ2UgZW5vdWdoIGZvciBt
dWx0aXBsZSBjaGFubmVscyBhdWRpby4gCi0gICAgLy8gSXQgaXMgc29tZXdoYXQgYXJiaXRyYXJ5
IGFuZCBjb3VsZCBiZSBpbmNyZWFzZWQgaWYgbmVjZXNzYXJ5LgotICAgIGVudW0geyBNYXhOdW1i
ZXJPZkNoYW5uZWxzID0gMzIgfTsKLQotfTsKLQotfSAvLyBXZWJDb3JlCi0KLSNlbmRpZiAvLyBB
dWRpb0NvbnRleHRfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQu
aWRsCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Nv
bnRleHQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9k
dWxlIHdlYmF1ZGlvIHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1XRUJf
QVVESU8sCi0gICAgICAgIEFjdGl2ZURPTU9iamVjdCwKLSAgICAgICAgQ3VzdG9tQ29uc3RydWN0
b3IsCi0gICAgICAgIENvbnN0cnVjdG9yUGFyYW1ldGVycz0wLAotICAgICAgICBKU0N1c3RvbU1h
cmtGdW5jdGlvbiwKLSAgICAgICAgRXZlbnRUYXJnZXQKLSAgICBdIEF1ZGlvQ29udGV4dCB7Ci0g
ICAgICAgIC8vIEFsbCByZW5kZXJlZCBhdWRpbyB1bHRpbWF0ZWx5IGNvbm5lY3RzIHRvIGRlc3Rp
bmF0aW9uLCB3aGljaCByZXByZXNlbnRzIHRoZSBhdWRpbyBoYXJkd2FyZS4KLSAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIEF1ZGlvRGVzdGluYXRpb25Ob2RlIGRlc3RpbmF0aW9uOwotCi0gICAg
ICAgIC8vIEFsbCBzY2hlZHVsZWQgdGltZXMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgdGltZSBpbiBz
ZWNvbmRzLgotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgZmxvYXQgY3VycmVudFRpbWU7Ci0K
LSAgICAgICAgLy8gQWxsIEF1ZGlvTm9kZXMgaW4gdGhlIGNvbnRleHQgcnVuIGF0IHRoaXMgc2Ft
cGxlLXJhdGUgKGluIHNhbXBsZS1mcmFtZXMgcGVyIHNlY29uZCkuCi0gICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBmbG9hdCBzYW1wbGVSYXRlOwotCi0gICAgICAgIC8vIEFsbCBwYW5uaW5nIGlz
IHJlbGF0aXZlIHRvIHRoaXMgbGlzdGVuZXIuCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBB
dWRpb0xpc3RlbmVyIGxpc3RlbmVyOwotCi0gICAgICAgIEF1ZGlvQnVmZmVyIGNyZWF0ZUJ1ZmZl
cihpbiB1bnNpZ25lZCBsb25nIG51bWJlck9mQ2hhbm5lbHMsIGluIHVuc2lnbmVkIGxvbmcgbnVt
YmVyT2ZGcmFtZXMsIGluIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgICAgICAgICByYWlzZXMoRE9N
RXhjZXB0aW9uKTsKLSAgICAgICAgQXVkaW9CdWZmZXIgY3JlYXRlQnVmZmVyKGluIEFycmF5QnVm
ZmVyIGJ1ZmZlciwgaW4gYm9vbGVhbiBtaXhUb01vbm8pCi0gICAgICAgICAgICByYWlzZXMoRE9N
RXhjZXB0aW9uKTsKLQotICAgICAgICAvLyBBc3luY2hyb25vdXMgYXVkaW8gZmlsZSBkYXRhIGRl
Y29kaW5nLgotICAgICAgICB2b2lkIGRlY29kZUF1ZGlvRGF0YShpbiBBcnJheUJ1ZmZlciBhdWRp
b0RhdGEsIGluIFtDYWxsYmFja10gQXVkaW9CdWZmZXJDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2ss
IGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIEF1ZGlvQnVmZmVyQ2FsbGJhY2sgZXJyb3JDYWxsYmFj
aykKLSAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwotCi0gICAgICAgIC8vIFNvdXJj
ZXMKLSAgICAgICAgQXVkaW9CdWZmZXJTb3VyY2VOb2RlIGNyZWF0ZUJ1ZmZlclNvdXJjZSgpOwot
I2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVfVklERU8KLSAgICAgICAgTWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlIGNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZShpbiBIVE1MTWVk
aWFFbGVtZW50IG1lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24p
OwotI2VuZGlmCi0gICAgICAgIC8vIFByb2Nlc3Npbmcgbm9kZXMKLSAgICAgICAgQXVkaW9HYWlu
Tm9kZSBjcmVhdGVHYWluTm9kZSgpOwotICAgICAgICBEZWxheU5vZGUgY3JlYXRlRGVsYXlOb2Rl
KGluIFtPcHRpb25hbF0gZG91YmxlIG1heERlbGF5VGltZSk7Ci0gICAgICAgIEJpcXVhZEZpbHRl
ck5vZGUgY3JlYXRlQmlxdWFkRmlsdGVyKCk7Ci0gICAgICAgIFdhdmVTaGFwZXJOb2RlIGNyZWF0
ZVdhdmVTaGFwZXIoKTsKLSAgICAgICAgTG93UGFzczJGaWx0ZXJOb2RlIGNyZWF0ZUxvd1Bhc3My
RmlsdGVyKCk7Ci0gICAgICAgIEhpZ2hQYXNzMkZpbHRlck5vZGUgY3JlYXRlSGlnaFBhc3MyRmls
dGVyKCk7Ci0gICAgICAgIEF1ZGlvUGFubmVyTm9kZSBjcmVhdGVQYW5uZXIoKTsKLSAgICAgICAg
Q29udm9sdmVyTm9kZSBjcmVhdGVDb252b2x2ZXIoKTsKLSAgICAgICAgRHluYW1pY3NDb21wcmVz
c29yTm9kZSBjcmVhdGVEeW5hbWljc0NvbXByZXNzb3IoKTsKLSAgICAgICAgUmVhbHRpbWVBbmFs
eXNlck5vZGUgY3JlYXRlQW5hbHlzZXIoKTsKLSAgICAgICAgSmF2YVNjcmlwdEF1ZGlvTm9kZSBj
cmVhdGVKYXZhU2NyaXB0Tm9kZShpbiB1bnNpZ25lZCBsb25nIGJ1ZmZlclNpemUpOwotCi0gICAg
ICAgIC8vIENoYW5uZWwgc3BsaXR0aW5nIGFuZCBtZXJnaW5nCi0gICAgICAgIEF1ZGlvQ2hhbm5l
bFNwbGl0dGVyIGNyZWF0ZUNoYW5uZWxTcGxpdHRlcigpOwotICAgICAgICBBdWRpb0NoYW5uZWxN
ZXJnZXIgY3JlYXRlQ2hhbm5lbE1lcmdlcigpOwotCi0gICAgICAgIC8vIE9mZmxpbmUgcmVuZGVy
aW5nCi0gICAgICAgIC8vIHZvaWQgcHJlcGFyZU9mZmxpbmVCdWZmZXJSZW5kZXJpbmcoaW4gdW5z
aWduZWQgbG9uZyBudW1iZXJPZkNoYW5uZWxzLCBpbiB1bnNpZ25lZCBsb25nIG51bWJlck9mRnJh
bWVzLCBpbiBmbG9hdCBzYW1wbGVSYXRlKTsKLSAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVu
ZXIgb25jb21wbGV0ZTsKLSAgICAgICAgdm9pZCBzdGFydFJlbmRlcmluZygpOwotICAgIH07Ci19
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5v
ZGUuY3BwCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b0Rlc3RpbmF0aW9uTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTIgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0K
LSNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgotCi0jaW5jbHVkZSAiQXVkaW9CdXMu
aCIKLSNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKLSNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5o
IgotI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgotI2luY2x1ZGUgIkF1ZGlvVXRpbGl0aWVz
LmgiCi0jaW5jbHVkZSAiRGVub3JtYWxEaXNhYmxlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0gICAgCi1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6QXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9D
b250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIDogQXVkaW9Ob2RlKGNvbnRl
eHQsIHNhbXBsZVJhdGUpCi0gICAgLCBtX2N1cnJlbnRTYW1wbGVGcmFtZSgwKQotewotICAgIGFk
ZElucHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVJbnB1dCh0aGlzKSkpOwotICAgIAotICAgIHNl
dE5vZGVUeXBlKE5vZGVUeXBlRGVzdGluYXRpb24pOwotfQotCi1BdWRpb0Rlc3RpbmF0aW9uTm9k
ZTo6fkF1ZGlvRGVzdGluYXRpb25Ob2RlKCkKLXsKLSAgICB1bmluaXRpYWxpemUoKTsKLX0KLQot
Ly8gVGhlIGF1ZGlvIGhhcmR3YXJlIGNhbGxzIHVzIGJhY2sgaGVyZSB0byBnZXRzIGl0cyBpbnB1
dCBzdHJlYW0uCi12b2lkIEF1ZGlvRGVzdGluYXRpb25Ob2RlOjpwcm92aWRlSW5wdXQoQXVkaW9C
dXMqIGRlc3RpbmF0aW9uQnVzLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMpCi17Ci0gICAgLy8gV2Ug
ZG9uJ3Qgd2FudCBkZW5vcm1hbHMgc2xvd2luZyBkb3duIGFueSBvZiB0aGUgYXVkaW8gcHJvY2Vz
c2luZwotICAgIC8vIHNpbmNlIHRoZXkgY2FuIHZlcnkgc2VyaW91c2x5IGh1cnQgcGVyZm9ybWFu
Y2UuCi0gICAgLy8gVGhpcyB3aWxsIHRha2UgY2FyZSBvZiBhbGwgQXVkaW9Ob2RlcyBiZWNhdXNl
IHRoZXkgYWxsIHByb2Nlc3Mgd2l0aGluIHRoaXMgc2NvcGUuCi0gICAgRGVub3JtYWxEaXNhYmxl
ciBkZW5vcm1hbERpc2FibGVyOwotICAgIAotICAgIGNvbnRleHQoKS0+c2V0QXVkaW9UaHJlYWQo
Y3VycmVudFRocmVhZCgpKTsKLSAgICAKLSAgICBpZiAoIWNvbnRleHQoKS0+aXNSdW5uYWJsZSgp
KSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uQnVzLT56ZXJvKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyBMZXQgdGhlIGNvbnRleHQgdGFrZSBjYXJlIG9mIGFueSBidXNpbmVzcyBh
dCB0aGUgc3RhcnQgb2YgZWFjaCByZW5kZXIgcXVhbnR1bS4KLSAgICBjb250ZXh0KCktPmhhbmRs
ZVByZVJlbmRlclRhc2tzKCk7Ci0KLSAgICAvLyBUaGlzIHdpbGwgY2F1c2UgdGhlIG5vZGUocykg
Y29ubmVjdGVkIHRvIHVzIHRvIHByb2Nlc3MsIHdoaWNoIGluIHR1cm4gd2lsbCBwdWxsIG9uIHRo
ZWlyIGlucHV0KHMpLAotICAgIC8vIGFsbCB0aGUgd2F5IGJhY2t3YXJkcyB0aHJvdWdoIHRoZSBy
ZW5kZXJpbmcgZ3JhcGguCi0gICAgQXVkaW9CdXMqIHJlbmRlcmVkQnVzID0gaW5wdXQoMCktPnB1
bGwoZGVzdGluYXRpb25CdXMsIG51bWJlck9mRnJhbWVzKTsKLSAgICAKLSAgICBpZiAoIXJlbmRl
cmVkQnVzKQotICAgICAgICBkZXN0aW5hdGlvbkJ1cy0+emVybygpOwotICAgIGVsc2UgaWYgKHJl
bmRlcmVkQnVzICE9IGRlc3RpbmF0aW9uQnVzKSB7Ci0gICAgICAgIC8vIGluLXBsYWNlIHByb2Nl
c3Npbmcgd2FzIG5vdCBwb3NzaWJsZSAtIHNvIGNvcHkKLSAgICAgICAgZGVzdGluYXRpb25CdXMt
PmNvcHlGcm9tKCpyZW5kZXJlZEJ1cyk7Ci0gICAgfQotCi0gICAgLy8gTGV0IHRoZSBjb250ZXh0
IHRha2UgY2FyZSBvZiBhbnkgYnVzaW5lc3MgYXQgdGhlIGVuZCBvZiBlYWNoIHJlbmRlciBxdWFu
dHVtLgotICAgIGNvbnRleHQoKS0+aGFuZGxlUG9zdFJlbmRlclRhc2tzKCk7Ci0gICAgCi0gICAg
Ly8gQWR2YW5jZSBjdXJyZW50IHNhbXBsZS1mcmFtZS4KLSAgICBtX2N1cnJlbnRTYW1wbGVGcmFt
ZSArPSBudW1iZXJPZkZyYW1lczsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1
ZGlvRGVzdGluYXRpb25Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBdWRpb0Rlc3RpbmF0aW9uTm9kZV9o
Ci0jZGVmaW5lIEF1ZGlvRGVzdGluYXRpb25Ob2RlX2gKLQotI2luY2x1ZGUgIkF1ZGlvQnVmZmVy
LmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCi0jaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRl
ci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvQnVzOwotY2xhc3MgQXVk
aW9Db250ZXh0OwotICAgIAotY2xhc3MgQXVkaW9EZXN0aW5hdGlvbk5vZGUgOiBwdWJsaWMgQXVk
aW9Ob2RlLCBwdWJsaWMgQXVkaW9Tb3VyY2VQcm92aWRlciB7Ci1wdWJsaWM6Ci0gICAgQXVkaW9E
ZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7Ci0gICAgdmly
dHVhbCB+QXVkaW9EZXN0aW5hdGlvbk5vZGUoKTsKLSAgICAKLSAgICAvLyBBdWRpb05vZGUgICAK
LSAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QpIHsgfTsgLy8gd2UncmUgcHVsbGVkIGJ5
IGhhcmR3YXJlIHNvIHRoaXMgaXMgbmV2ZXIgY2FsbGVkCi0gICAgdmlydHVhbCB2b2lkIHJlc2V0
KCkgeyBtX2N1cnJlbnRTYW1wbGVGcmFtZSA9IDA7IH07Ci0gICAgCi0gICAgLy8gVGhlIGF1ZGlv
IGhhcmR3YXJlIGNhbGxzIGhlcmUgcGVyaW9kaWNhbGx5IHRvIGdldHMgaXRzIGlucHV0IHN0cmVh
bS4KLSAgICB2aXJ0dWFsIHZvaWQgcHJvdmlkZUlucHV0KEF1ZGlvQnVzKiwgc2l6ZV90IG51bWJl
ck9mRnJhbWVzKTsKLQotICAgIHNpemVfdCBjdXJyZW50U2FtcGxlRnJhbWUoKSB7IHJldHVybiBt
X2N1cnJlbnRTYW1wbGVGcmFtZTsgfQotICAgIGRvdWJsZSBjdXJyZW50VGltZSgpIHsgcmV0dXJu
IGN1cnJlbnRTYW1wbGVGcmFtZSgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihzYW1wbGVSYXRlKCkp
OyB9Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMoKSBjb25zdCB7IHJl
dHVybiAyOyB9IC8vIEZJWE1FOiB1cGRhdGUgd2hlbiBtdWx0aS1jaGFubmVsIChtb3JlIHRoYW4g
c3RlcmVvKSBpcyBzdXBwb3J0ZWQKLQotICAgIHZpcnR1YWwgdm9pZCBzdGFydFJlbmRlcmluZygp
ID0gMDsKLSAgICAKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGlt
ZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIENvdW50cyB0aGUgbnVt
YmVyIG9mIHNhbXBsZS1mcmFtZXMgcHJvY2Vzc2VkIGJ5IHRoZSBkZXN0aW5hdGlvbi4KLSAgICBz
aXplX3QgbV9jdXJyZW50U2FtcGxlRnJhbWU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBBdWRpb0Rlc3RpbmF0aW9uTm9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaWRsCShyZXZpc2lvbiAxMTEy
MDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBhdWRp
byB7Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAotICAg
ICAgICBKU0dlbmVyYXRlVG9KU09iamVjdAotICAgIF0gQXVkaW9EZXN0aW5hdGlvbk5vZGUgOiBB
dWRpb05vZGUgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBudW1iZXJPZkNoYW5u
ZWxzOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0dhaW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0dhaW4uaAkocmV2
aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9HYWluLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQXVkaW9HYWluX2gKLSNkZWZp
bmUgQXVkaW9HYWluX2gKLQotI2luY2x1ZGUgIkF1ZGlvUGFyYW0uaCIKLSNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvR2FpbiA6
IHB1YmxpYyBBdWRpb1BhcmFtIHsKLXB1YmxpYzogICAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxB
dWRpb0dhaW4+IGNyZWF0ZShjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUgZGVmYXVsdFZhbHVlLCBk
b3VibGUgbWluVmFsdWUsIGRvdWJsZSBtYXhWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQXVkaW9HYWluKG5hbWUsIGRlZmF1bHRWYWx1ZSwgbWluVmFsdWUsIG1heFZh
bHVlKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEF1ZGlvR2Fpbihjb25zdCBjaGFyKiBuYW1l
LCBkb3VibGUgZGVmYXVsdFZhbHVlLCBkb3VibGUgbWluVmFsdWUsIGRvdWJsZSBtYXhWYWx1ZSkK
LSAgICAgICAgOiBBdWRpb1BhcmFtKG5hbWUsIGRlZmF1bHRWYWx1ZSwgbWluVmFsdWUsIG1heFZh
bHVlKQotICAgIHsKLSAgICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBBdWRpb1BhcmFtX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvR2Fp
bi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9HYWluLmlk
bAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9HYWlu
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGF1ZGlvIHsKLSAg
ICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCi0gICAgICAgIEpT
R2VuZXJhdGVUb0pTT2JqZWN0Ci0gICAgXSBBdWRpb0dhaW4gOiBBdWRpb1BhcmFtIHsKLSAgICB9
OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5jcHAJKHJl
dmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIkF1ZGlv
R2Fpbk5vZGUuaCIKLQotI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2Rl
SW5wdXQuaCIKLSNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1BdWRpb0dhaW5Ob2RlOjpBdWRpb0dhaW5Ob2RlKEF1ZGlvQ29udGV4dCogY29udGV4
dCwgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRl
KQotICAgICwgbV9sYXN0R2FpbigxLjApCi0gICAgLCBtX3NhbXBsZUFjY3VyYXRlR2FpblZhbHVl
cyhBdWRpb05vZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXMpIC8vIEZJWE1FOiBjYW4gcHJvYmFi
bHkgc2hhcmUgdGVtcCBidWZmZXIgaW4gY29udGV4dAotewotICAgIG1fZ2FpbiA9IEF1ZGlvR2Fp
bjo6Y3JlYXRlKCJnYWluIiwgMS4wLCAwLjAsIDEuMCk7Ci0gICAgbV9nYWluLT5zZXRDb250ZXh0
KGNvbnRleHQpOwotCi0gICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRo
aXMpKSk7Ci0gICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywg
MSkpKTsKLSAgICAKLSAgICBzZXROb2RlVHlwZShOb2RlVHlwZUdhaW4pOwotICAgIAotICAgIGlu
aXRpYWxpemUoKTsKLX0KLQotdm9pZCBBdWRpb0dhaW5Ob2RlOjpwcm9jZXNzKHNpemVfdCBmcmFt
ZXNUb1Byb2Nlc3MpCi17Ci0gICAgLy8gRklYTUU6IGZvciBzb21lIGNhc2VzIHRoZXJlIGlzIGEg
bmljZSBvcHRpbWl6YXRpb24gdG8gYXZvaWQgcHJvY2Vzc2luZyBoZXJlLCBhbmQgbGV0IHRoZSBn
YWluIGNoYW5nZQotICAgIC8vIGhhcHBlbiBpbiB0aGUgc3VtbWluZyBqdW5jdGlvbiBpbnB1dCBv
ZiB0aGUgQXVkaW9Ob2RlIHdlJ3JlIGNvbm5lY3RlZCB0by4KLSAgICAvLyBUaGVuIHdlIGNhbiBh
dm9pZCBhbGwgb2YgdGhlIGZvbGxvd2luZzoKLQotICAgIEF1ZGlvQnVzKiBvdXRwdXRCdXMgPSBv
dXRwdXQoMCktPmJ1cygpOwotICAgIEFTU0VSVChvdXRwdXRCdXMpOwotCi0gICAgaWYgKCFpc0lu
aXRpYWxpemVkKCkgfHwgIWlucHV0KDApLT5pc0Nvbm5lY3RlZCgpKQotICAgICAgICBvdXRwdXRC
dXMtPnplcm8oKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQXVkaW9CdXMqIGlucHV0QnVzID0gaW5w
dXQoMCktPmJ1cygpOwotCi0gICAgICAgIGlmIChnYWluKCktPmhhc1RpbWVsaW5lVmFsdWVzKCkp
IHsKLSAgICAgICAgICAgIC8vIEFwcGx5IHNhbXBsZS1hY2N1cmF0ZSBnYWluIHNjYWxpbmcgZm9y
IHByZWNpc2UgZW52ZWxvcGVzLCBncmFpbiB3aW5kb3dzLCBldGMuCi0gICAgICAgICAgICBBU1NF
UlQoZnJhbWVzVG9Qcm9jZXNzIDw9IG1fc2FtcGxlQWNjdXJhdGVHYWluVmFsdWVzLnNpemUoKSk7
Ci0gICAgICAgICAgICBpZiAoZnJhbWVzVG9Qcm9jZXNzIDw9IG1fc2FtcGxlQWNjdXJhdGVHYWlu
VmFsdWVzLnNpemUoKSkgewotICAgICAgICAgICAgICAgIGZsb2F0KiBnYWluVmFsdWVzID0gbV9z
YW1wbGVBY2N1cmF0ZUdhaW5WYWx1ZXMuZGF0YSgpOwotICAgICAgICAgICAgICAgIGdhaW4oKS0+
Y2FsY3VsYXRlU2FtcGxlQWNjdXJhdGVWYWx1ZXMoZ2FpblZhbHVlcywgZnJhbWVzVG9Qcm9jZXNz
KTsKLSAgICAgICAgICAgICAgICBvdXRwdXRCdXMtPmNvcHlXaXRoU2FtcGxlQWNjdXJhdGVHYWlu
VmFsdWVzRnJvbSgqaW5wdXRCdXMsIGdhaW5WYWx1ZXMsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBBcHBseSB0aGUgZ2Fp
biB3aXRoIGRlLXppcHBlcmluZyBpbnRvIHRoZSBvdXRwdXQgYnVzLgotICAgICAgICAgICAgb3V0
cHV0QnVzLT5jb3B5V2l0aEdhaW5Gcm9tKCppbnB1dEJ1cywgJm1fbGFzdEdhaW4sIGdhaW4oKS0+
dmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQXVkaW9HYWluTm9kZTo6cmVz
ZXQoKQotewotICAgIC8vIFNuYXAgZGlyZWN0bHkgdG8gZGVzaXJlZCBnYWluLgotICAgIG1fbGFz
dEdhaW4gPSBnYWluKCktPnZhbHVlKCk7Ci19Ci0KLS8vIEZJWE1FOiB0aGlzIGNhbiBnbyBhd2F5
IHdoZW4gd2UgZG8gbWl4aW5nIHdpdGggZ2FpbiBkaXJlY3RseSBpbiBzdW1taW5nIGp1bmN0aW9u
IG9mIEF1ZGlvTm9kZUlucHV0Ci0vLwotLy8gQXMgc29vbiBhcyB3ZSBrbm93IHRoZSBjaGFubmVs
IGNvdW50IG9mIG91ciBpbnB1dCwgd2UgY2FuIGxhemlseSBpbml0aWFsaXplLgotLy8gU29tZXRp
bWVzIHRoaXMgbWF5IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSB3aXRoIGRpZmZlcmVudCBjaGFu
bmVsIGNvdW50cywgaW4gd2hpY2ggY2FzZSB3ZSBtdXN0IHNhZmVseQotLy8gdW5pbml0aWFsaXpl
IGFuZCB0aGVuIHJlLWluaXRpYWxpemUgd2l0aCB0aGUgbmV3IGNoYW5uZWwgY291bnQuCi12b2lk
IEF1ZGlvR2Fpbk5vZGU6OmNoZWNrTnVtYmVyT2ZDaGFubmVsc0ZvcklucHV0KEF1ZGlvTm9kZUlu
cHV0KiBpbnB1dCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkgJiYg
Y29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0KLSAgICBBU1NFUlQoaW5wdXQgJiYgaW5wdXQg
PT0gdGhpcy0+aW5wdXQoMCkpOwotICAgIGlmIChpbnB1dCAhPSB0aGlzLT5pbnB1dCgwKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzID0g
aW5wdXQtPm51bWJlck9mQ2hhbm5lbHMoKTsgICAgCi0KLSAgICBpZiAoaXNJbml0aWFsaXplZCgp
ICYmIG51bWJlck9mQ2hhbm5lbHMgIT0gb3V0cHV0KDApLT5udW1iZXJPZkNoYW5uZWxzKCkpIHsK
LSAgICAgICAgLy8gV2UncmUgYWxyZWFkeSBpbml0aWFsaXplZCBidXQgdGhlIGNoYW5uZWwgY291
bnQgaGFzIGNoYW5nZWQuCi0gICAgICAgIHVuaW5pdGlhbGl6ZSgpOwotICAgIH0KLQotICAgIGlm
ICghaXNJbml0aWFsaXplZCgpKSB7Ci0gICAgICAgIC8vIFRoaXMgd2lsbCBwcm9wYWdhdGUgdGhl
IGNoYW5uZWwgY291bnQgdG8gYW55IG5vZGVzIGNvbm5lY3RlZCBmdXJ0aGVyIGRvd25zdHJlYW0g
aW4gdGhlIGdyYXBoLgotICAgICAgICBvdXRwdXQoMCktPnNldE51bWJlck9mQ2hhbm5lbHMobnVt
YmVyT2ZDaGFubmVscyk7Ci0gICAgICAgIGluaXRpYWxpemUoKTsKLSAgICB9Ci0KLSAgICBBdWRp
b05vZGU6OmNoZWNrTnVtYmVyT2ZDaGFubmVsc0ZvcklucHV0KGlucHV0KTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmgJKHJldmlzaW9uIDExMTIwOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBdWRpb0dhaW5Ob2RlX2gKLSNk
ZWZpbmUgQXVkaW9HYWluTm9kZV9oCi0KLSNpbmNsdWRlICJBdWRpb0dhaW4uaCIKLSNpbmNsdWRl
ICJBdWRpb05vZGUuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb0NvbnRl
eHQ7Ci0gICAgCi0vLyBBdWRpb0dhaW5Ob2RlIGlzIGFuIEF1ZGlvTm9kZSB3aXRoIG9uZSBpbnB1
dCBhbmQgb25lIG91dHB1dCB3aGljaCBhcHBsaWVzIGEgZ2FpbiAodm9sdW1lKSBjaGFuZ2UgdG8g
dGhlIGF1ZGlvIHNpZ25hbC4KLS8vIERlLXppcHBlcmluZyAoc21vb3RoaW5nKSBpcyBhcHBsaWVk
IHdoZW4gdGhlIGdhaW4gdmFsdWUgaXMgY2hhbmdlZCBkeW5hbWljYWxseS4KLQotY2xhc3MgQXVk
aW9HYWluTm9kZSA6IHB1YmxpYyBBdWRpb05vZGUgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEF1ZGlvR2Fpbk5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0
IHNhbXBsZVJhdGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvR2Fp
bk5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkpOyAgICAgIAotICAgIH0KLSAgICAKLSAgICAvLyBB
dWRpb05vZGUKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNz
KTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKLQotICAgIC8vIENhbGxlZCBpbiB0aGUgbWFp
biB0aHJlYWQgd2hlbiB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIGZvciB0aGUgaW5wdXQgbWF5IGhh
dmUgY2hhbmdlZC4KLSAgICB2aXJ0dWFsIHZvaWQgY2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5w
dXQoQXVkaW9Ob2RlSW5wdXQqKTsKLQotICAgIC8vIEphdmFTY3JpcHQgaW50ZXJmYWNlCi0gICAg
QXVkaW9HYWluKiBnYWluKCkgeyByZXR1cm4gbV9nYWluLmdldCgpOyB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKLSAgICAKLXByaXZhdGU6Ci0gICAgdmlydHVhbCBkb3VibGUg
dGFpbFRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBkb3Vi
bGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9Ci0KLSAgICBBdWRp
b0dhaW5Ob2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwotCi0gICAgZmxvYXQg
bV9sYXN0R2FpbjsgLy8gZm9yIGRlLXppcHBlcmluZwotICAgIFJlZlB0cjxBdWRpb0dhaW4+IG1f
Z2FpbjsKLQotICAgIEF1ZGlvRmxvYXRBcnJheSBtX3NhbXBsZUFjY3VyYXRlR2FpblZhbHVlczsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEF1ZGlvR2Fpbk5vZGVf
aApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5pZGwJKHJldmlz
aW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgYXVk
aW8gewotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKLSAg
ICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKLSAgICBdIEF1ZGlvR2Fpbk5vZGUgOiBBdWRpb05v
ZGUgewotICAgICAgICAvLyBGSVhNRTogZXZlbnR1YWxseSBpdCB3aWxsIGJlIGludGVyZXN0aW5n
IHRvIHJlbW92ZSB0aGUgcmVhZG9ubHkgcmVzdHJpY3Rpb24sIGJ1dCBuZWVkIHRvIHByb3Blcmx5
IGRlYWwgd2l0aCB0aHJlYWQgc2FmZXR5IGhlcmUuCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBBdWRpb0dhaW4gZ2FpbjsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9MaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9MaXN0ZW5lci5jcHAJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotCi0jaW5j
bHVkZSAiQXVkaW9MaXN0ZW5lci5oIgotCi0jaW5jbHVkZSAiQXVkaW9CdXMuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1BdWRpb0xpc3RlbmVyOjpBdWRpb0xpc3RlbmVyKCkKLSAgICA6IG1f
cG9zaXRpb24oMCwgMCwgMCkKLSAgICAsIG1fb3JpZW50YXRpb24oMCwgMCwgLTEpCi0gICAgLCBt
X3VwVmVjdG9yKDAsIDEsIDApCi0gICAgLCBtX3ZlbG9jaXR5KDAsIDAsIDApCi0gICAgLCBtX2Rv
cHBsZXJGYWN0b3IoMSkKLSAgICAsIG1fc3BlZWRPZlNvdW5kKDM0My4zKQotewotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDog
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaAkocmV2aXNpb24gMTExMjA4KQor
KysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
Ci0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEF1ZGlvTGlzdGVuZXJfaAotI2RlZmluZSBBdWRp
b0xpc3RlbmVyX2gKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgotI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi0vLyBBdWRpb0xpc3RlbmVyIG1haW50YWlucyB0aGUgc3RhdGUgb2YgdGhlIGxp
c3RlbmVyIGluIHRoZSBhdWRpbyBzY2VuZSBhcyBkZWZpbmVkIGluIHRoZSBPcGVuQUwgc3BlY2lm
aWNhdGlvbi4KLQotY2xhc3MgQXVkaW9MaXN0ZW5lciA6IHB1YmxpYyBSZWZDb3VudGVkPEF1ZGlv
TGlzdGVuZXI+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb0xpc3RlbmVy
PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBdWRpb0xpc3Rl
bmVyKCkpOwotICAgIH0KLQotICAgIC8vIFBvc2l0aW9uCi0gICAgdm9pZCBzZXRQb3NpdGlvbihm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7IHNldFBvc2l0aW9uKEZsb2F0UG9pbnQzRCh4LCB5
LCB6KSk7IH0KLSAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQzRCAmcG9zaXRp
b24pIHsgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOyB9Ci0gICAgY29uc3QgRmxvYXRQb2ludDNEJiBw
b3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KLQotICAgIC8vIE9yaWVudGF0
aW9uCi0gICAgdm9pZCBzZXRPcmllbnRhdGlvbihmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBm
bG9hdCB1cFgsIGZsb2F0IHVwWSwgZmxvYXQgdXBaKQotICAgIHsKLSAgICAgICAgc2V0T3JpZW50
YXRpb24oRmxvYXRQb2ludDNEKHgsIHksIHopKTsKLSAgICAgICAgc2V0VXBWZWN0b3IoRmxvYXRQ
b2ludDNEKHVwWCwgdXBZLCB1cFopKTsKLSAgICB9Ci0gICAgdm9pZCBzZXRPcmllbnRhdGlvbihj
b25zdCBGbG9hdFBvaW50M0QgJm9yaWVudGF0aW9uKSB7IG1fb3JpZW50YXRpb24gPSBvcmllbnRh
dGlvbjsgfQotICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgb3JpZW50YXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX29yaWVudGF0aW9uOyB9Ci0KLSAgICAvLyBVcC12ZWN0b3IKLSAgICB2b2lkIHNldFVw
VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQzRCAmdXBWZWN0b3IpIHsgbV91cFZlY3RvciA9IHVwVmVj
dG9yOyB9Ci0gICAgY29uc3QgRmxvYXRQb2ludDNEJiB1cFZlY3RvcigpIGNvbnN0IHsgcmV0dXJu
IG1fdXBWZWN0b3I7IH0KLQotICAgIC8vIFZlbG9jaXR5Ci0gICAgdm9pZCBzZXRWZWxvY2l0eShm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7IHNldFZlbG9jaXR5KEZsb2F0UG9pbnQzRCh4LCB5
LCB6KSk7IH0KLSAgICB2b2lkIHNldFZlbG9jaXR5KGNvbnN0IEZsb2F0UG9pbnQzRCAmdmVsb2Np
dHkpIHsgbV92ZWxvY2l0eSA9IHZlbG9jaXR5OyB9Ci0gICAgY29uc3QgRmxvYXRQb2ludDNEJiB2
ZWxvY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVsb2NpdHk7IH0KLQotICAgIC8vIERvcHBsZXIg
ZmFjdG9yCi0gICAgdm9pZCBzZXREb3BwbGVyRmFjdG9yKGRvdWJsZSBkb3BwbGVyRmFjdG9yKSB7
IG1fZG9wcGxlckZhY3RvciA9IGRvcHBsZXJGYWN0b3I7IH0KLSAgICBkb3VibGUgZG9wcGxlckZh
Y3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fZG9wcGxlckZhY3RvcjsgfQotCi0gICAgLy8gU3BlZWQg
b2Ygc291bmQKLSAgICB2b2lkIHNldFNwZWVkT2ZTb3VuZChkb3VibGUgc3BlZWRPZlNvdW5kKSB7
IG1fc3BlZWRPZlNvdW5kID0gc3BlZWRPZlNvdW5kOyB9Ci0gICAgZG91YmxlIHNwZWVkT2ZTb3Vu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlZWRPZlNvdW5kOyB9Ci0KLXByaXZhdGU6Ci0gICAgQXVk
aW9MaXN0ZW5lcigpOwotCi0gICAgLy8gUG9zaXRpb24gLyBPcmllbnRhdGlvbgotICAgIEZsb2F0
UG9pbnQzRCBtX3Bvc2l0aW9uOwotICAgIEZsb2F0UG9pbnQzRCBtX29yaWVudGF0aW9uOwotICAg
IEZsb2F0UG9pbnQzRCBtX3VwVmVjdG9yOwotCi0gICAgRmxvYXRQb2ludDNEIG1fdmVsb2NpdHk7
Ci0KLSAgICBkb3VibGUgbV9kb3BwbGVyRmFjdG9yOwotICAgIGRvdWJsZSBtX3NwZWVkT2ZTb3Vu
ZDsKLX07Ci0KLX0gLy8gV2ViQ29yZQotCi0jZW5kaWYgLy8gQXVkaW9MaXN0ZW5lcl9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmlkbAkocmV2aXNpb24gMTEx
MjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBhdWRpbyB7Ci0gICAgaW50ZXJmYWNl
IFsKLSAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPCi0gICAgXSBBdWRpb0xpc3RlbmVyIHsK
LSAgICAgICAgYXR0cmlidXRlIGZsb2F0IGRvcHBsZXJGYWN0b3I7ICAvLyBzYW1lIGFzIE9wZW5B
TCAoZGVmYXVsdCAxLjApCi0gICAgICAgIGF0dHJpYnV0ZSBmbG9hdCBzcGVlZE9mU291bmQ7ICAg
Ly8gaW4gbWV0ZXJzIC8gc2Vjb25kIChkZWZhdWx0IDM0My4zKQotCi0gICAgICAgIHZvaWQgc2V0
UG9zaXRpb24oaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSwgaW4gZmxvYXQgeik7Ci0gICAgICAgIHZv
aWQgc2V0T3JpZW50YXRpb24oaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSwgaW4gZmxvYXQgeiwgaW4g
ZmxvYXQgeFVwLCBpbiBmbG9hdCB5VXAsIGluIGZsb2F0IHpVcCk7Ci0gICAgICAgIHZvaWQgc2V0
VmVsb2NpdHkoaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSwgaW4gZmxvYXQgeik7Ci0gICAgfTsKLX0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcAkocmV2aXNpb24gMTExMjA4
KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwzNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJBdWRpb05vZGUuaCIKLQotI2luY2x1
ZGUgIkF1ZGlvQ29udGV4dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0LmgiCi0jaW5jbHVk
ZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1
ZGUgPHd0Zi9BdG9taWNzLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1BdWRpb05vZGU6OkF1ZGlvTm9kZShBdWRpb0NvbnRleHQqIGNvbnRl
eHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBtX2lzSW5pdGlhbGl6ZWQoZmFsc2UpCi0gICAg
LCBtX25vZGVUeXBlKE5vZGVUeXBlVW5rbm93bikKLSAgICAsIG1fY29udGV4dChjb250ZXh0KQot
ICAgICwgbV9zYW1wbGVSYXRlKHNhbXBsZVJhdGUpCi0gICAgLCBtX2xhc3RQcm9jZXNzaW5nVGlt
ZSgtMS4wKQotICAgICwgbV9ub3JtYWxSZWZDb3VudCgxKSAvLyBzdGFydCBvdXQgd2l0aCBub3Jt
YWwgcmVmQ291bnQgPT0gMSAobGlrZSBXVEY6OlJlZkNvdW50ZWQgY2xhc3MpCi0gICAgLCBtX2Nv
bm5lY3Rpb25SZWZDb3VudCgwKQotICAgICwgbV9kaXNhYmxlZFJlZkNvdW50KDApCi0gICAgLCBt
X2lzTWFya2VkRm9yRGVsZXRpb24oZmFsc2UpCi0gICAgLCBtX2lzRGlzYWJsZWQoZmFsc2UpCi17
Ci0jaWYgREVCVUdfQVVESU9OT0RFX1JFRkVSRU5DRVMKLSAgICBpZiAoIXNfaXNOb2RlQ291bnRJ
bml0aWFsaXplZCkgewotICAgICAgICBzX2lzTm9kZUNvdW50SW5pdGlhbGl6ZWQgPSB0cnVlOwot
ICAgICAgICBhdGV4aXQoQXVkaW9Ob2RlOjpwcmludE5vZGVDb3VudHMpOwotICAgIH0KLSNlbmRp
ZgotfQotCi1BdWRpb05vZGU6On5BdWRpb05vZGUoKQotewotI2lmIERFQlVHX0FVRElPTk9ERV9S
RUZFUkVOQ0VTCi0gICAgLS1zX25vZGVDb3VudFtub2RlVHlwZSgpXTsKLSAgICBwcmludGYoIiVw
OiAlZDogQXVkaW9Ob2RlOjp+QXVkaW9Ob2RlKCkgJWQgJWQgJWRcbiIsIHRoaXMsIG5vZGVUeXBl
KCksIG1fbm9ybWFsUmVmQ291bnQsIG1fY29ubmVjdGlvblJlZkNvdW50LCBtX2Rpc2FibGVkUmVm
Q291bnQpOwotI2VuZGlmCi19Ci0KLXZvaWQgQXVkaW9Ob2RlOjppbml0aWFsaXplKCkKLXsKLSAg
ICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVlOwotfQotCi12b2lkIEF1ZGlvTm9kZTo6dW5pbml0aWFs
aXplKCkKLXsKLSAgICBtX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLX0KLQotdm9pZCBBdWRpb05v
ZGU6OnNldE5vZGVUeXBlKE5vZGVUeXBlIHR5cGUpCi17Ci0gICAgbV9ub2RlVHlwZSA9IHR5cGU7
Ci0KLSNpZiBERUJVR19BVURJT05PREVfUkVGRVJFTkNFUwotICAgICsrc19ub2RlQ291bnRbdHlw
ZV07Ci0jZW5kaWYKLX0KLQotdm9pZCBBdWRpb05vZGU6OmxhenlJbml0aWFsaXplKCkKLXsKLSAg
ICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgaW5pdGlhbGl6ZSgpOwotfQotCi12b2lk
IEF1ZGlvTm9kZTo6YWRkSW5wdXQoUGFzc093blB0cjxBdWRpb05vZGVJbnB1dD4gaW5wdXQpCi17
Ci0gICAgbV9pbnB1dHMuYXBwZW5kKGlucHV0KTsKLX0KLQotdm9pZCBBdWRpb05vZGU6OmFkZE91
dHB1dChQYXNzT3duUHRyPEF1ZGlvTm9kZU91dHB1dD4gb3V0cHV0KQotewotICAgIG1fb3V0cHV0
cy5hcHBlbmQob3V0cHV0KTsKLX0KLQotQXVkaW9Ob2RlSW5wdXQqIEF1ZGlvTm9kZTo6aW5wdXQo
dW5zaWduZWQgaSkKLXsKLSAgICBpZiAoaSA8IG1faW5wdXRzLnNpemUoKSkKLSAgICAgICAgcmV0
dXJuIG1faW5wdXRzW2ldLmdldCgpOwotICAgIHJldHVybiAwOwotfQotCi1BdWRpb05vZGVPdXRw
dXQqIEF1ZGlvTm9kZTo6b3V0cHV0KHVuc2lnbmVkIGkpCi17Ci0gICAgaWYgKGkgPCBtX291dHB1
dHMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gbV9vdXRwdXRzW2ldLmdldCgpOwotICAgIHJldHVy
biAwOwotfQotCi12b2lkIEF1ZGlvTm9kZTo6Y29ubmVjdChBdWRpb05vZGUqIGRlc3RpbmF0aW9u
LCB1bnNpZ25lZCBvdXRwdXRJbmRleCwgdW5zaWduZWQgaW5wdXRJbmRleCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgCi0gICAgQXVkaW9Db250ZXh0
OjpBdXRvTG9ja2VyIGxvY2tlcihjb250ZXh0KCkpOwotCi0gICAgaWYgKCFkZXN0aW5hdGlvbikg
ewotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBTYW5pdHkgY2hlY2sgaW5wdXQgYW5kIG91dHB1dCBpbmRpY2VzLgotICAgIGlmIChvdXRw
dXRJbmRleCA+PSBudW1iZXJPZk91dHB1dHMoKSkgewotICAgICAgICBlYyA9IElOREVYX1NJWkVf
RVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGRlc3RpbmF0aW9uICYmIGlu
cHV0SW5kZXggPj0gZGVzdGluYXRpb24tPm51bWJlck9mSW5wdXRzKCkpIHsKLSAgICAgICAgZWMg
PSBJTkRFWF9TSVpFX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChjb250
ZXh0KCkgIT0gZGVzdGluYXRpb24tPmNvbnRleHQoKSkgewotICAgICAgICBlYyA9IFNZTlRBWF9F
UlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBdWRpb05vZGVJbnB1dCogaW5wdXQg
PSBkZXN0aW5hdGlvbi0+aW5wdXQoaW5wdXRJbmRleCk7Ci0gICAgQXVkaW9Ob2RlT3V0cHV0KiBv
dXRwdXQgPSB0aGlzLT5vdXRwdXQob3V0cHV0SW5kZXgpOwotICAgIGlucHV0LT5jb25uZWN0KG91
dHB1dCk7Ci0KLSAgICAvLyBMZXQgY29udGV4dCBrbm93IHRoYXQgYSBjb25uZWN0aW9uIGhhcyBi
ZWVuIG1hZGUuCi0gICAgY29udGV4dCgpLT5pbmNyZW1lbnRDb25uZWN0aW9uQ291bnQoKTsKLX0K
LQotdm9pZCBBdWRpb05vZGU6OmRpc2Nvbm5lY3QodW5zaWduZWQgb3V0cHV0SW5kZXgsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQXVkaW9D
b250ZXh0OjpBdXRvTG9ja2VyIGxvY2tlcihjb250ZXh0KCkpOwotCi0gICAgLy8gU2FuaXR5IGNo
ZWNrIGlucHV0IGFuZCBvdXRwdXQgaW5kaWNlcy4KLSAgICBpZiAob3V0cHV0SW5kZXggPj0gbnVt
YmVyT2ZPdXRwdXRzKCkpIHsKLSAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0ID0gdGhpcy0+b3V0
cHV0KG91dHB1dEluZGV4KTsKLSAgICBvdXRwdXQtPmRpc2Nvbm5lY3RBbGxJbnB1dHMoKTsKLX0K
LQotdm9pZCBBdWRpb05vZGU6OnByb2Nlc3NJZk5lY2Vzc2FyeShzaXplX3QgZnJhbWVzVG9Qcm9j
ZXNzKQotewotICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSk7Ci0gICAgCi0g
ICAgaWYgKCFpc0luaXRpYWxpemVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEVuc3Vy
ZSB0aGF0IHdlIG9ubHkgcHJvY2VzcyBvbmNlIHBlciByZW5kZXJpbmcgcXVhbnR1bS4KLSAgICAv
LyBUaGlzIGhhbmRsZXMgdGhlICJmYW5vdXQiIHByb2JsZW0gd2hlcmUgYW4gb3V0cHV0IGlzIGNv
bm5lY3RlZCB0byBtdWx0aXBsZSBpbnB1dHMuCi0gICAgLy8gVGhlIGZpcnN0IHRpbWUgd2UncmUg
Y2FsbGVkIGR1cmluZyB0aGlzIHRpbWUgc2xpY2Ugd2UgcHJvY2VzcywgYnV0IGFmdGVyIHRoYXQg
d2UgZG9uJ3Qgd2FudCB0byByZS1wcm9jZXNzLAotICAgIC8vIGluc3RlYWQgb3VyIG91dHB1dChz
KSB3aWxsIGFscmVhZHkgaGF2ZSB0aGUgcmVzdWx0cyBjYWNoZWQgaW4gdGhlaXIgYnVzOwotICAg
IGRvdWJsZSBjdXJyZW50VGltZSA9IGNvbnRleHQoKS0+Y3VycmVudFRpbWUoKTsKLSAgICBpZiAo
bV9sYXN0UHJvY2Vzc2luZ1RpbWUgIT0gY3VycmVudFRpbWUpIHsKLSAgICAgICAgbV9sYXN0UHJv
Y2Vzc2luZ1RpbWUgPSBjdXJyZW50VGltZTsgLy8gaW1wb3J0YW50IHRvIGZpcnN0IHVwZGF0ZSB0
aGlzIHRpbWUgYmVjYXVzZSBvZiBmZWVkYmFjayBsb29wcyBpbiB0aGUgcmVuZGVyaW5nIGdyYXBo
Ci0gICAgICAgIHB1bGxJbnB1dHMoZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAgICAgcHJvY2Vzcyhm
cmFtZXNUb1Byb2Nlc3MpOwotICAgIH0KLX0KLQotdm9pZCBBdWRpb05vZGU6OmNoZWNrTnVtYmVy
T2ZDaGFubmVsc0ZvcklucHV0KEF1ZGlvTm9kZUlucHV0KiBpbnB1dCkKLXsKLSAgICBBU1NFUlQo
Y29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkgJiYgY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7
Ci0KLSAgICBBU1NFUlQobV9pbnB1dHMuY29udGFpbnMoaW5wdXQpKTsKLSAgICBpZiAoIW1faW5w
dXRzLmNvbnRhaW5zKGlucHV0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW5wdXQtPnVwZGF0
ZUludGVybmFsQnVzKCk7Ci19Ci0KLXZvaWQgQXVkaW9Ob2RlOjpwdWxsSW5wdXRzKHNpemVfdCBm
cmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgp
KTsKLSAgICAKLSAgICAvLyBQcm9jZXNzIGFsbCBvZiB0aGUgQXVkaW9Ob2RlcyBjb25uZWN0ZWQg
dG8gb3VyIGlucHV0cy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9pbnB1dHMuc2l6
ZSgpOyArK2kpCi0gICAgICAgIGlucHV0KGkpLT5wdWxsKDAsIGZyYW1lc1RvUHJvY2Vzcyk7Ci19
Ci0KLXZvaWQgQXVkaW9Ob2RlOjpyZWYoUmVmVHlwZSByZWZUeXBlKQotewotICAgIHN3aXRjaCAo
cmVmVHlwZSkgewotICAgIGNhc2UgUmVmVHlwZU5vcm1hbDoKLSAgICAgICAgYXRvbWljSW5jcmVt
ZW50KCZtX25vcm1hbFJlZkNvdW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWZUeXBl
Q29ubmVjdGlvbjoKLSAgICAgICAgYXRvbWljSW5jcmVtZW50KCZtX2Nvbm5lY3Rpb25SZWZDb3Vu
dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVmVHlwZURpc2FibGVkOgotICAgICAgICBh
dG9taWNJbmNyZW1lbnQoJm1fZGlzYWJsZWRSZWZDb3VudCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotI2lmIERF
QlVHX0FVRElPTk9ERV9SRUZFUkVOQ0VTCi0gICAgcHJpbnRmKCIlcDogJWQ6IEF1ZGlvTm9kZTo6
cmVmKCVkKSAlZCAlZCAlZFxuIiwgdGhpcywgbm9kZVR5cGUoKSwgcmVmVHlwZSwgbV9ub3JtYWxS
ZWZDb3VudCwgbV9jb25uZWN0aW9uUmVmQ291bnQsIG1fZGlzYWJsZWRSZWZDb3VudCk7Ci0jZW5k
aWYKLQotICAgIC8vIFNlZSB0aGUgZGlzYWJsaW5nIGNvZGUgaW4gZmluaXNoRGVyZWYoKSBiZWxv
dy4gVGhpcyBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIGEgbm9kZQotICAgIC8vIGlzIGJlaW5nIHJl
LWNvbm5lY3RlZCBhZnRlciBiZWluZyB1c2VkIGF0IGxlYXN0IG9uY2UgYW5kIGRpc2Nvbm5lY3Rl
ZC4KLSAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIG5lZWQgdG8gcmUtZW5hYmxlLgotICAgIGlmICht
X2lzRGlzYWJsZWQgJiYgbV9jb25uZWN0aW9uUmVmQ291bnQgPiAwICYmIHJlZlR5cGUgPT0gUmVm
VHlwZUNvbm5lY3Rpb24pIHsKLSAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICAg
ICAgQXVkaW9Db250ZXh0OjpBdXRvTG9ja2VyIGxvY2tlcihjb250ZXh0KCkpOwotCi0gICAgICAg
IG1faXNEaXNhYmxlZCA9IGZhbHNlOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9vdXRwdXRzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgb3V0cHV0KGkpLT5lbmFibGUoKTsK
LSAgICB9Ci19Ci0KLXZvaWQgQXVkaW9Ob2RlOjpkZXJlZihSZWZUeXBlIHJlZlR5cGUpCi17Ci0g
ICAgLy8gVGhlIGFjdHVhbGx5IHdvcmsgZm9yIGRlcmVmIGhhcHBlbnMgY29tcGxldGVseSB3aXRo
aW4gdGhlIGF1ZGlvIGNvbnRleHQncyBncmFwaCBsb2NrLgotICAgIC8vIEluIHRoZSBjYXNlIG9m
IHRoZSBhdWRpbyB0aHJlYWQsIHdlIG11c3QgdXNlIGEgdHJ5TG9jayB0byBhdm9pZCBnbGl0Y2hl
cy4KLSAgICBib29sIGhhc0xvY2sgPSBmYWxzZTsKLSAgICBib29sIG11c3RSZWxlYXNlTG9jayA9
IGZhbHNlOwotICAgIAotICAgIGlmIChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSkgewotICAg
ICAgICAvLyBSZWFsLXRpbWUgYXVkaW8gdGhyZWFkIG11c3Qgbm90IGNvbnRlbmQgbG9jayAodG8g
YXZvaWQgZ2xpdGNoZXMpLgotICAgICAgICBoYXNMb2NrID0gY29udGV4dCgpLT50cnlMb2NrKG11
c3RSZWxlYXNlTG9jayk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY29udGV4dCgpLT5sb2NrKG11
c3RSZWxlYXNlTG9jayk7Ci0gICAgICAgIGhhc0xvY2sgPSB0cnVlOwotICAgIH0KLSAgICAKLSAg
ICBpZiAoaGFzTG9jaykgewotICAgICAgICAvLyBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIGRlcmVm
IHdvcmsgaGFwcGVucy4KLSAgICAgICAgZmluaXNoRGVyZWYocmVmVHlwZSk7Ci0KLSAgICAgICAg
aWYgKG11c3RSZWxlYXNlTG9jaykKLSAgICAgICAgICAgIGNvbnRleHQoKS0+dW5sb2NrKCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgLy8gV2Ugd2VyZSB1bmFibGUgdG8gZ2V0IHRoZSBsb2NrLCBz
byBwdXQgdGhpcyBpbiBhIGxpc3QgdG8gZmluaXNoIHVwIGxhdGVyLgotICAgICAgICBBU1NFUlQo
Y29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkpOwotICAgICAgICBjb250ZXh0KCktPmFkZERlZmVy
cmVkRmluaXNoRGVyZWYodGhpcywgcmVmVHlwZSk7Ci0gICAgfQotCi0gICAgLy8gT25jZSBBdWRp
b0NvbnRleHQ6OnVuaW5pdGlhbGl6ZSgpIGlzIGNhbGxlZCB0aGVyZSdzIG5vIG1vcmUgY2hhbmNl
cyBmb3IgZGVsZXRlTWFya2VkTm9kZXMoKSB0byBnZXQgY2FsbGVkLCBzbyB3ZSBjYWxsIGhlcmUu
Ci0gICAgLy8gV2UgY2FuJ3QgY2FsbCBpbiBBdWRpb0NvbnRleHQ6On5BdWRpb0NvbnRleHQoKSBz
aW5jZSBpdCB3aWxsIG5ldmVyIGJlIGNhbGxlZCBhcyBsb25nIGFzIGFueSBBdWRpb05vZGUgaXMg
YWxpdmUKLSAgICAvLyBiZWNhdXNlIEF1ZGlvTm9kZXMga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUg
Y29udGV4dC4KLSAgICBpZiAoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkRmluaXNoZWQoKSkKLSAg
ICAgICAgY29udGV4dCgpLT5kZWxldGVNYXJrZWROb2RlcygpOwotfQotCi12b2lkIEF1ZGlvTm9k
ZTo6ZmluaXNoRGVyZWYoUmVmVHlwZSByZWZUeXBlKQotewotICAgIEFTU0VSVChjb250ZXh0KCkt
PmlzR3JhcGhPd25lcigpKTsKLSAgICAKLSAgICBzd2l0Y2ggKHJlZlR5cGUpIHsKLSAgICBjYXNl
IFJlZlR5cGVOb3JtYWw6Ci0gICAgICAgIEFTU0VSVChtX25vcm1hbFJlZkNvdW50ID4gMCk7Ci0g
ICAgICAgIGF0b21pY0RlY3JlbWVudCgmbV9ub3JtYWxSZWZDb3VudCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUmVmVHlwZUNvbm5lY3Rpb246Ci0gICAgICAgIEFTU0VSVChtX2Nvbm5lY3Rp
b25SZWZDb3VudCA+IDApOwotICAgICAgICBhdG9taWNEZWNyZW1lbnQoJm1fY29ubmVjdGlvblJl
ZkNvdW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWZUeXBlRGlzYWJsZWQ6Ci0gICAg
ICAgIEFTU0VSVChtX2Rpc2FibGVkUmVmQ291bnQgPiAwKTsKLSAgICAgICAgYXRvbWljRGVjcmVt
ZW50KCZtX2Rpc2FibGVkUmVmQ291bnQpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0jaWYgREVCVUdfQVVE
SU9OT0RFX1JFRkVSRU5DRVMKLSAgICBwcmludGYoIiVwOiAlZDogQXVkaW9Ob2RlOjpkZXJlZigl
ZCkgJWQgJWQgJWRcbiIsIHRoaXMsIG5vZGVUeXBlKCksIHJlZlR5cGUsIG1fbm9ybWFsUmVmQ291
bnQsIG1fY29ubmVjdGlvblJlZkNvdW50LCBtX2Rpc2FibGVkUmVmQ291bnQpOwotI2VuZGlmCi0K
LSAgICBpZiAoIW1fY29ubmVjdGlvblJlZkNvdW50KSB7Ci0gICAgICAgIGlmICghbV9ub3JtYWxS
ZWZDb3VudCAmJiAhbV9kaXNhYmxlZFJlZkNvdW50KSB7Ci0gICAgICAgICAgICBpZiAoIW1faXNN
YXJrZWRGb3JEZWxldGlvbikgewotICAgICAgICAgICAgICAgIC8vIEFsbCByZWZlcmVuY2VzIGFy
ZSBnb25lIC0gd2UgbmVlZCB0byBnbyBhd2F5LgotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX291dHB1dHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgICAg
IG91dHB1dChpKS0+ZGlzY29ubmVjdEFsbElucHV0cygpOyAvLyB0aGlzIHdpbGwgZGVyZWYoKSBu
b2RlcyB3ZSdyZSBjb25uZWN0ZWQgdG8uLi4KLQotICAgICAgICAgICAgICAgIC8vIE1hcmsgZm9y
IGRlbGV0aW9uIGF0IGVuZCBvZiBlYWNoIHJlbmRlciBxdWFudHVtIG9yIHdoZW4gY29udGV4dCBz
aHV0cyBkb3duLgotICAgICAgICAgICAgICAgIGNvbnRleHQoKS0+bWFya0ZvckRlbGV0aW9uKHRo
aXMpOwotICAgICAgICAgICAgICAgIG1faXNNYXJrZWRGb3JEZWxldGlvbiA9IHRydWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAocmVmVHlwZSA9PSBSZWZUeXBlQ29ubmVjdGlv
bikgewotICAgICAgICAgICAgaWYgKCFtX2lzRGlzYWJsZWQpIHsKLSAgICAgICAgICAgICAgICAv
LyBTdGlsbCBtYXkgaGF2ZSBKYXZhU2NyaXB0IHJlZmVyZW5jZXMsIGJ1dCBubyBtb3JlICJhY3Rp
dmUiIGNvbm5lY3Rpb24gcmVmZXJlbmNlcywgc28gcHV0IGFsbCBvZiBvdXIgb3V0cHV0cyBpbiBh
ICJkb3JtYW50IiBkaXNhYmxlZCBzdGF0ZS4KLSAgICAgICAgICAgICAgICAvLyBHYXJiYWdlIGNv
bGxlY3Rpb24gbWF5IHRha2UgYSB2ZXJ5IGxvbmcgdGltZSBhZnRlciB0aGlzIHRpbWUsIHNvIHRo
ZSAiZG9ybWFudCIgZGlzYWJsZWQgbm9kZXMgc2hvdWxkIG5vdCBib2cgZG93biB0aGUgcmVuZGVy
aW5nLi4uCi0KLSAgICAgICAgICAgICAgICAvLyBBcyBmYXIgYXMgSmF2YVNjcmlwdCBpcyBjb25j
ZXJuZWQsIG91ciBvdXRwdXRzIG11c3Qgc3RpbGwgYXBwZWFyIHRvIGJlIGNvbm5lY3RlZC4KLSAg
ICAgICAgICAgICAgICAvLyBCdXQgaW50ZXJuYWxseSBvdXIgb3V0cHV0cyBzaG91bGQgYmUgZGlz
YWJsZWQgZnJvbSB0aGUgaW5wdXRzIHRoZXkncmUgY29ubmVjdGVkIHRvLgotICAgICAgICAgICAg
ICAgIC8vIGRpc2FibGUoKSBjYW4gcmVjdXJzaXZlbHkgZGVyZWYgY29ubmVjdGlvbnMgKGFuZCBj
YWxsIGRpc2FibGUoKSkgZG93biBhIHdob2xlIGNoYWluIG9mIGNvbm5lY3RlZCBub2Rlcy4KLQot
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3ZSBzcGVjaWFsIGNhc2UgdGhlIGNvbnZvbHZlciBh
bmQgZGVsYXkgc2luY2UgdGhleSBoYXZlIGEgc2lnbmlmaWNhbnQgdGFpbC10aW1lIGFuZCBzaG91
bGRuJ3QgYmUgZGlzY29ubmVjdGVkIHNpbXBseQotICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ug
dGhleSBubyBsb25nZXIgaGF2ZSBhbnkgaW5wdXQgY29ubmVjdGlvbnMuICBUaGlzIG5lZWRzIHRv
IGJlIGhhbmRsZWQgbW9yZSBnZW5lcmFsbHkgd2hlcmUgQXVkaW9Ob2RlcyBoYXZlCi0gICAgICAg
ICAgICAgICAgLy8gYSB0YWlsVGltZSBhdHRyaWJ1dGUuICBUaGVuIHRoZSBBdWRpb05vZGUgb25s
eSBuZWVkcyB0byByZW1haW4gImFjdGl2ZSIgZm9yIHRhaWxUaW1lIHNlY29uZHMgYWZ0ZXIgdGhl
cmUgYXJlIG5vCi0gICAgICAgICAgICAgICAgLy8gbG9uZ2VyIGFueSBhY3RpdmUgY29ubmVjdGlv
bnMuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGVUeXBlKCkgIT0gTm9kZVR5cGVDb252b2x2ZXIg
JiYgbm9kZVR5cGUoKSAhPSBOb2RlVHlwZURlbGF5KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1f
aXNEaXNhYmxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX291dHB1dHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgICAgICAgICBv
dXRwdXQoaSktPmRpc2FibGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLSNpZiBERUJVR19BVURJT05PREVfUkVGRVJFTkNFUwotCi1i
b29sIEF1ZGlvTm9kZTo6c19pc05vZGVDb3VudEluaXRpYWxpemVkID0gZmFsc2U7Ci1pbnQgQXVk
aW9Ob2RlOjpzX25vZGVDb3VudFtOb2RlVHlwZUVuZF07Ci0KLXZvaWQgQXVkaW9Ob2RlOjpwcmlu
dE5vZGVDb3VudHMoKQotewotICAgIHByaW50ZigiXG5cbiIpOwotICAgIHByaW50ZigiPT09PT09
PT09PT09PT09PT09PT09PT09PT09XG4iKTsKLSAgICBwcmludGYoIkF1ZGlvTm9kZTogcmVmZXJl
bmNlIGNvdW50c1xuIik7Ci0gICAgcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT1c
biIpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE5vZGVUeXBlRW5kOyArK2kpCi0g
ICAgICAgIHByaW50ZigiJWQ6ICVkXG4iLCBpLCBzX25vZGVDb3VudFtpXSk7Ci0KLSAgICBwcmlu
dGYoIj09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5cbiIpOwotfQotCi0jZW5kaWYgLy8g
REVCVUdfQVVESU9OT0RFX1JFRkVSRU5DRVMKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
Tm9kZS5oCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgQXVkaW9Ob2RlX2gKLSNkZWZpbmUgQXVkaW9Ob2RlX2gKLQotI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLSNkZWZpbmUgREVCVUdfQVVESU9OT0RF
X1JFRkVSRU5DRVMgMAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvQ29udGV4
dDsKLWNsYXNzIEF1ZGlvTm9kZUlucHV0OwotY2xhc3MgQXVkaW9Ob2RlT3V0cHV0OwotCi10eXBl
ZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi0vLyBBbiBBdWRpb05vZGUgaXMgdGhlIGJhc2ljIGJ1
aWxkaW5nIGJsb2NrIGZvciBoYW5kbGluZyBhdWRpbyB3aXRoaW4gYW4gQXVkaW9Db250ZXh0Lgot
Ly8gSXQgbWF5IGJlIGFuIGF1ZGlvIHNvdXJjZSwgYW4gaW50ZXJtZWRpYXRlIHByb2Nlc3Npbmcg
bW9kdWxlLCBvciBhbiBhdWRpbyBkZXN0aW5hdGlvbi4KLS8vIEVhY2ggQXVkaW9Ob2RlIGNhbiBo
YXZlIGlucHV0cyBhbmQvb3Igb3V0cHV0cy4gQW4gQXVkaW9Tb3VyY2VOb2RlIGhhcyBubyBpbnB1
dHMgYW5kIGEgc2luZ2xlIG91dHB1dC4KLS8vIEFuIEF1ZGlvRGVzdGluYXRpb25Ob2RlIGhhcyBv
bmUgaW5wdXQgYW5kIG5vIG91dHB1dHMgYW5kIHJlcHJlc2VudHMgdGhlIGZpbmFsIGRlc3RpbmF0
aW9uIHRvIHRoZSBhdWRpbyBoYXJkd2FyZS4KLS8vIE1vc3QgcHJvY2Vzc2luZyBub2RlcyBzdWNo
IGFzIGZpbHRlcnMgd2lsbCBoYXZlIG9uZSBpbnB1dCBhbmQgb25lIG91dHB1dCwgYWx0aG91Z2gg
bXVsdGlwbGUgaW5wdXRzIGFuZCBvdXRwdXRzIGFyZSBwb3NzaWJsZS4KLQotY2xhc3MgQXVkaW9O
b2RlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsgUHJvY2Vzc2luZ1NpemVJbkZyYW1lcyA9IDEyOCB9
OwotCi0gICAgQXVkaW9Ob2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwotICAg
IHZpcnR1YWwgfkF1ZGlvTm9kZSgpOwotCi0gICAgQXVkaW9Db250ZXh0KiBjb250ZXh0KCkgeyBy
ZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9Ci0KLSAgICBlbnVtIE5vZGVUeXBlIHsKLSAgICAgICAg
Tm9kZVR5cGVVbmtub3duLAotICAgICAgICBOb2RlVHlwZURlc3RpbmF0aW9uLAotICAgICAgICBO
b2RlVHlwZUF1ZGlvQnVmZmVyU291cmNlLAotICAgICAgICBOb2RlVHlwZU1lZGlhRWxlbWVudEF1
ZGlvU291cmNlLAotICAgICAgICBOb2RlVHlwZUphdmFTY3JpcHQsCi0gICAgICAgIE5vZGVUeXBl
QmlxdWFkRmlsdGVyLAotICAgICAgICBOb2RlVHlwZUxvd1Bhc3MyRmlsdGVyLAotICAgICAgICBO
b2RlVHlwZUhpZ2hQYXNzMkZpbHRlciwKLSAgICAgICAgTm9kZVR5cGVQYW5uZXIsCi0gICAgICAg
IE5vZGVUeXBlQ29udm9sdmVyLAotICAgICAgICBOb2RlVHlwZURlbGF5LAotICAgICAgICBOb2Rl
VHlwZUdhaW4sCi0gICAgICAgIE5vZGVUeXBlQ2hhbm5lbFNwbGl0dGVyLAotICAgICAgICBOb2Rl
VHlwZUNoYW5uZWxNZXJnZXIsCi0gICAgICAgIE5vZGVUeXBlQW5hbHlzZXIsCi0gICAgICAgIE5v
ZGVUeXBlRHluYW1pY3NDb21wcmVzc29yLAotICAgICAgICBOb2RlVHlwZVdhdmVTaGFwZXIsCi0g
ICAgICAgIE5vZGVUeXBlRW5kCi0gICAgfTsKLQotICAgIE5vZGVUeXBlIG5vZGVUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV9ub2RlVHlwZTsgfQotICAgIHZvaWQgc2V0Tm9kZVR5cGUoTm9kZVR5cGUp
OwotCi0gICAgLy8gV2UgaGFuZGxlIG91ciBvd24gcmVmLWNvdW50aW5nIGJlY2F1c2Ugb2YgdGhl
IHRocmVhZGluZyBpc3N1ZXMgYW5kIHN1YnRsZSBuYXR1cmUgb2YKLSAgICAvLyBob3cgQXVkaW9O
b2RlcyBjYW4gY29udGludWUgcHJvY2Vzc2luZyAocGxheWluZyBvbmUtc2hvdCBzb3VuZCkgYWZ0
ZXIgdGhlcmUgYXJlIG5vIG1vcmUKLSAgICAvLyBKYXZhU2NyaXB0IHJlZmVyZW5jZXMgdG8gdGhl
IG9iamVjdC4KLSAgICBlbnVtIFJlZlR5cGUgeyBSZWZUeXBlTm9ybWFsLCBSZWZUeXBlQ29ubmVj
dGlvbiwgUmVmVHlwZURpc2FibGVkIH07Ci0KLSAgICAvLyBDYW4gYmUgY2FsbGVkIGZyb20gbWFp
biB0aHJlYWQgb3IgY29udGV4dCdzIGF1ZGlvIHRocmVhZC4KLSAgICB2b2lkIHJlZihSZWZUeXBl
IHJlZlR5cGUgPSBSZWZUeXBlTm9ybWFsKTsKLSAgICB2b2lkIGRlcmVmKFJlZlR5cGUgcmVmVHlw
ZSA9IFJlZlR5cGVOb3JtYWwpOwotCi0gICAgLy8gQ2FuIGJlIGNhbGxlZCBmcm9tIG1haW4gdGhy
ZWFkIG9yIGNvbnRleHQncyBhdWRpbyB0aHJlYWQuICBJdCBtdXN0IGJlIGNhbGxlZCB3aGlsZSB0
aGUgY29udGV4dCdzIGdyYXBoIGxvY2sgaXMgaGVsZC4KLSAgICB2b2lkIGZpbmlzaERlcmVmKFJl
ZlR5cGUgcmVmVHlwZSk7Ci0KLSAgICAvLyBUaGUgQXVkaW9Ob2RlSW5wdXQocykgKGlmIGFueSkg
d2lsbCBhbHJlYWR5IGhhdmUgdGhlaXIgaW5wdXQgZGF0YSBhdmFpbGFibGUgd2hlbiBwcm9jZXNz
KCkgaXMgY2FsbGVkLgotICAgIC8vIFN1YmNsYXNzZXMgd2lsbCB0YWtlIHRoaXMgaW5wdXQgZGF0
YSBhbmQgcHV0IHRoZSByZXN1bHRzIGluIHRoZSBBdWRpb0J1cyhzKSBvZiBpdHMgQXVkaW9Ob2Rl
T3V0cHV0KHMpIChpZiBhbnkpLgotICAgIC8vIENhbGxlZCBmcm9tIGNvbnRleHQncyBhdWRpbyB0
aHJlYWQuCi0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcykg
PSAwOwotCi0gICAgLy8gUmVzZXRzIERTUCBwcm9jZXNzaW5nIHN0YXRlIChjbGVhcnMgZGVsYXkg
bGluZXMsIGZpbHRlciBtZW1vcnksIGV0Yy4pCi0gICAgLy8gQ2FsbGVkIGZyb20gY29udGV4dCdz
IGF1ZGlvIHRocmVhZC4KLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSA9IDA7Ci0KLSAgICAvLyBO
byBzaWduaWZpY2FudCByZXNvdXJjZXMgc2hvdWxkIGJlIGFsbG9jYXRlZCB1bnRpbCBpbml0aWFs
aXplKCkgaXMgY2FsbGVkLgotICAgIC8vIFByb2Nlc3NpbmcgbWF5IG5vdCBvY2N1ciB1bnRpbCBh
IG5vZGUgaXMgaW5pdGlhbGl6ZWQuCi0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgdW5pbml0aWFsaXplKCk7Ci0KLSAgICBib29sIGlzSW5pdGlhbGl6ZWQo
KSBjb25zdCB7IHJldHVybiBtX2lzSW5pdGlhbGl6ZWQ7IH0KLSAgICB2b2lkIGxhenlJbml0aWFs
aXplKCk7Ci0KLSAgICB1bnNpZ25lZCBudW1iZXJPZklucHV0cygpIGNvbnN0IHsgcmV0dXJuIG1f
aW5wdXRzLnNpemUoKTsgfQotICAgIHVuc2lnbmVkIG51bWJlck9mT3V0cHV0cygpIGNvbnN0IHsg
cmV0dXJuIG1fb3V0cHV0cy5zaXplKCk7IH0KLQotICAgIEF1ZGlvTm9kZUlucHV0KiBpbnB1dCh1
bnNpZ25lZCk7Ci0gICAgQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQodW5zaWduZWQpOwotCi0gICAg
Ly8gQ2FsbGVkIGZyb20gbWFpbiB0aHJlYWQgYnkgY29ycmVzcG9uZGluZyBKYXZhU2NyaXB0IG1l
dGhvZHMuCi0gICAgdm9pZCBjb25uZWN0KEF1ZGlvTm9kZSosIHVuc2lnbmVkIG91dHB1dEluZGV4
LCB1bnNpZ25lZCBpbnB1dEluZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBkaXNjb25u
ZWN0KHVuc2lnbmVkIG91dHB1dEluZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2aXJ0dWFs
IGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KLQotICAg
IC8vIHByb2Nlc3NJZk5lY2Vzc2FyeSgpIGlzIGNhbGxlZCBieSBvdXIgb3V0cHV0KHMpIHdoZW4g
dGhlIHJlbmRlcmluZyBncmFwaCBuZWVkcyB0aGlzIEF1ZGlvTm9kZSB0byBwcm9jZXNzLgotICAg
IC8vIFRoaXMgbWV0aG9kIGVuc3VyZXMgdGhhdCB0aGUgQXVkaW9Ob2RlIHdpbGwgb25seSBwcm9j
ZXNzIG9uY2UgcGVyIHJlbmRlcmluZyB0aW1lIHF1YW50dW0gZXZlbiBpZiBpdCdzIGNhbGxlZCBy
ZXBlYXRlZGx5LgotICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSBvZiAiZmFub3V0IiB3aGVy
ZSBhbiBvdXRwdXQgaXMgY29ubmVjdGVkIHRvIG11bHRpcGxlIEF1ZGlvTm9kZSBpbnB1dHMuCi0g
ICAgLy8gQ2FsbGVkIGZyb20gY29udGV4dCdzIGF1ZGlvIHRocmVhZC4KLSAgICB2b2lkIHByb2Nl
c3NJZk5lY2Vzc2FyeShzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLQotICAgIC8vIENhbGxlZCB3
aGVuIGEgbmV3IGNvbm5lY3Rpb24gaGFzIGJlZW4gbWFkZSB0byBvbmUgb2Ygb3VyIGlucHV0cyBv
ciB0aGUgY29ubmVjdGlvbiBudW1iZXIgb2YgY2hhbm5lbHMgaGFzIGNoYW5nZWQuCi0gICAgLy8g
VGhpcyBwb3RlbnRpYWxseSBnaXZlcyB1cyBlbm91Z2ggaW5mb3JtYXRpb24gdG8gcGVyZm9ybSBh
IGxhenkgaW5pdGlhbGl6YXRpb24gb3IsIGlmIG5lY2Vzc2FyeSwgYSByZS1pbml0aWFsaXphdGlv
bi4KLSAgICAvLyBDYWxsZWQgZnJvbSBtYWluIHRocmVhZC4KLSAgICB2aXJ0dWFsIHZvaWQgY2hl
Y2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQoQXVkaW9Ob2RlSW5wdXQqKTsKLQotI2lmIERFQlVH
X0FVRElPTk9ERV9SRUZFUkVOQ0VTCi0gICAgc3RhdGljIHZvaWQgcHJpbnROb2RlQ291bnRzKCk7
Ci0jZW5kaWYKLQotICAgIGJvb2wgaXNNYXJrZWRGb3JEZWxldGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1faXNNYXJrZWRGb3JEZWxldGlvbjsgfQotCi0gICAgLy8gdGFpbFRpbWUoKSBpcyB0aGUgbGVu
Z3RoIG9mIHRpbWUgKG5vdCBjb3VudGluZyBsYXRlbmN5IHRpbWUpIHdoZXJlIG5vbi16ZXJvIG91
dHB1dCBtYXkgb2NjdXIgYWZ0ZXIgY29udGludW91cyBzaWxlbnQgaW5wdXQuCi0gICAgdmlydHVh
bCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCA9IDA7Ci0gICAgLy8gbGF0ZW5jeVRpbWUoKSBpcyB0
aGUgbGVuZ3RoIG9mIHRpbWUgaXQgdGFrZXMgZm9yIG5vbi16ZXJvIG91dHB1dCB0byBhcHBlYXIg
YWZ0ZXIgbm9uLXplcm8gaW5wdXQgaXMgcHJvdmlkZWQuIFRoaXMgb25seSBhcHBsaWVzIHRvCi0g
ICAgLy8gcHJvY2Vzc2luZyBkZWxheSB3aGljaCBpcyBhbiBhcnRpZmFjdCBvZiB0aGUgcHJvY2Vz
c2luZyBhbGdvcml0aG0gY2hvc2VuIGFuZCBpcyAqbm90KiBwYXJ0IG9mIHRoZSBpbnRyaW5zaWMg
ZGVzaXJlZCBlZmZlY3QuIEZvciAKLSAgICAvLyBleGFtcGxlLCBhICJkZWxheSIgZWZmZWN0IGlz
IGV4cGVjdGVkIHRvIGRlbGF5IHRoZSBzaWduYWwsIGFuZCB0aHVzIHdvdWxkIG5vdCBiZSBjb25z
aWRlcmVkIGxhdGVuY3kuCi0gICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCA9
IDA7Ci0KLXByb3RlY3RlZDoKLSAgICAvLyBJbnB1dHMgYW5kIG91dHB1dHMgbXVzdCBiZSBjcmVh
dGVkIGJlZm9yZSB0aGUgQXVkaW9Ob2RlIGlzIGluaXRpYWxpemVkLgotICAgIHZvaWQgYWRkSW5w
dXQoUGFzc093blB0cjxBdWRpb05vZGVJbnB1dD4pOwotICAgIHZvaWQgYWRkT3V0cHV0KFBhc3NP
d25QdHI8QXVkaW9Ob2RlT3V0cHV0Pik7Ci0gICAgCi0gICAgLy8gQ2FsbGVkIGJ5IHByb2Nlc3NJ
Zk5lY2Vzc2FyeSgpIHRvIGNhdXNlIGFsbCBwYXJ0cyBvZiB0aGUgcmVuZGVyaW5nIGdyYXBoIGNv
bm5lY3RlZCB0byB1cyB0byBwcm9jZXNzLgotICAgIC8vIEVhY2ggcmVuZGVyaW5nIHF1YW50dW0s
IHRoZSBhdWRpbyBkYXRhIGZvciBlYWNoIG9mIHRoZSBBdWRpb05vZGUncyBpbnB1dHMgd2lsbCBi
ZSBhdmFpbGFibGUgYWZ0ZXIgdGhpcyBtZXRob2QgaXMgY2FsbGVkLgotICAgIC8vIENhbGxlZCBm
cm9tIGNvbnRleHQncyBhdWRpbyB0aHJlYWQuCi0gICAgdmlydHVhbCB2b2lkIHB1bGxJbnB1dHMo
c2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7Ci0KLXByaXZhdGU6Ci0gICAgdm9sYXRpbGUgYm9vbCBt
X2lzSW5pdGlhbGl6ZWQ7Ci0gICAgTm9kZVR5cGUgbV9ub2RlVHlwZTsKLSAgICBSZWZQdHI8QXVk
aW9Db250ZXh0PiBtX2NvbnRleHQ7Ci0gICAgZmxvYXQgbV9zYW1wbGVSYXRlOwotICAgIFZlY3Rv
cjxPd25QdHI8QXVkaW9Ob2RlSW5wdXQ+ID4gbV9pbnB1dHM7Ci0gICAgVmVjdG9yPE93blB0cjxB
dWRpb05vZGVPdXRwdXQ+ID4gbV9vdXRwdXRzOwotCi0gICAgZG91YmxlIG1fbGFzdFByb2Nlc3Np
bmdUaW1lOwotCi0gICAgLy8gUmVmLWNvdW50aW5nCi0gICAgdm9sYXRpbGUgaW50IG1fbm9ybWFs
UmVmQ291bnQ7Ci0gICAgdm9sYXRpbGUgaW50IG1fY29ubmVjdGlvblJlZkNvdW50OwotICAgIHZv
bGF0aWxlIGludCBtX2Rpc2FibGVkUmVmQ291bnQ7Ci0gICAgCi0gICAgYm9vbCBtX2lzTWFya2Vk
Rm9yRGVsZXRpb247Ci0gICAgYm9vbCBtX2lzRGlzYWJsZWQ7Ci0gICAgCi0jaWYgREVCVUdfQVVE
SU9OT0RFX1JFRkVSRU5DRVMKLSAgICBzdGF0aWMgYm9vbCBzX2lzTm9kZUNvdW50SW5pdGlhbGl6
ZWQ7Ci0gICAgc3RhdGljIGludCBzX25vZGVDb3VudFtOb2RlVHlwZUVuZF07Ci0jZW5kaWYKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEF1ZGlvTm9kZV9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGUuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5pZGwJKHJldmlzaW9uIDExMTIwOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTEsMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBhdWRpbyB7Ci0gICAgaW50ZXJmYWNl
IFsKLSAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPCi0gICAgXSBBdWRpb05vZGUgewotICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9Db250ZXh0IGNvbnRleHQ7Ci0gICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIG51bWJlck9mSW5wdXRzOwotICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBudW1iZXJPZk91dHB1dHM7Ci0KLSAgICAg
ICAgdm9pZCBjb25uZWN0KGluIEF1ZGlvTm9kZSBkZXN0aW5hdGlvbiwgaW4gW09wdGlvbmFsPURl
ZmF1bHRJc1VuZGVmaW5lZF0gdW5zaWduZWQgbG9uZyBvdXRwdXQsIGluIFtPcHRpb25hbD1EZWZh
dWx0SXNVbmRlZmluZWRdIHVuc2lnbmVkIGxvbmcgaW5wdXQpCi0gICAgICAgICAgICByYWlzZXMo
RE9NRXhjZXB0aW9uKTsKLQotICAgICAgICB2b2lkIGRpc2Nvbm5lY3QoaW4gW09wdGlvbmFsPURl
ZmF1bHRJc1VuZGVmaW5lZF0gdW5zaWduZWQgbG9uZyBvdXRwdXQpCi0gICAgICAgICAgICByYWlz
ZXMoRE9NRXhjZXB0aW9uKTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9Ob2RlSW5wdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI3NCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdF
Ql9BVURJTykKLQotI2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0LmgiCi0KLSNpbmNsdWRlICJBdWRp
b0NvbnRleHQuaCIKLSNpbmNsdWRlICJBdWRpb05vZGUuaCIKLSNpbmNsdWRlICJBdWRpb05vZGVP
dXRwdXQuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0g
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUF1ZGlvTm9kZUlucHV0OjpBdWRpb05vZGVJbnB1dChB
dWRpb05vZGUqIG5vZGUpCi0gICAgOiBtX25vZGUobm9kZSkKLSAgICAsIG1fcmVuZGVyaW5nU3Rh
dGVOZWVkVXBkYXRpbmcoZmFsc2UpCi17Ci0gICAgLy8gU2V0IHRvIG1vbm8gYnkgZGVmYXVsdC4K
LSAgICBtX2ludGVybmFsU3VtbWluZ0J1cyA9IGFkb3B0UHRyKG5ldyBBdWRpb0J1cygxLCBBdWRp
b05vZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXMpKTsKLX0KLQotdm9pZCBBdWRpb05vZGVJbnB1
dDo6Y29ubmVjdChBdWRpb05vZGVPdXRwdXQqIG91dHB1dCkKLXsKLSAgICBBU1NFUlQoY29udGV4
dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0gICAgCi0gICAgQVNTRVJUKG91dHB1dCAmJiBub2RlKCkp
OwotICAgIGlmICghb3V0cHV0IHx8ICFub2RlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IENoZWNrIGlmIHdlJ3JlIGFscmVhZHkgY29ubmVjdGVkIHRvIHRoaXMgb3V0cHV0LgotICAgIGlm
IChtX291dHB1dHMuY29udGFpbnMob3V0cHV0KSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAK
LSAgICBvdXRwdXQtPmFkZElucHV0KHRoaXMpOwotICAgIG1fb3V0cHV0cy5hZGQob3V0cHV0KTsK
LSAgICBjaGFuZ2VkT3V0cHV0cygpOwotCi0gICAgLy8gU29tYm9keSBoYXMganVzdCBjb25uZWN0
ZWQgdG8gdXMsIHNvIGNvdW50IGl0IGFzIGEgcmVmZXJlbmNlLgotICAgIG5vZGUoKS0+cmVmKEF1
ZGlvTm9kZTo6UmVmVHlwZUNvbm5lY3Rpb24pOwotfQotCi12b2lkIEF1ZGlvTm9kZUlucHV0Ojpk
aXNjb25uZWN0KEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0KQotewotICAgIEFTU0VSVChjb250ZXh0
KCktPmlzR3JhcGhPd25lcigpKTsKLQotICAgIEFTU0VSVChvdXRwdXQgJiYgbm9kZSgpKTsKLSAg
ICBpZiAoIW91dHB1dCB8fCAhbm9kZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGaXJz
dCB0cnkgdG8gZGlzY29ubmVjdCBmcm9tICJhY3RpdmUiIGNvbm5lY3Rpb25zLgotICAgIGlmICht
X291dHB1dHMuY29udGFpbnMob3V0cHV0KSkgewotICAgICAgICBtX291dHB1dHMucmVtb3ZlKG91
dHB1dCk7Ci0gICAgICAgIGNoYW5nZWRPdXRwdXRzKCk7Ci0gICAgICAgIG91dHB1dC0+cmVtb3Zl
SW5wdXQodGhpcyk7Ci0gICAgICAgIG5vZGUoKS0+ZGVyZWYoQXVkaW9Ob2RlOjpSZWZUeXBlQ29u
bmVjdGlvbik7IC8vIE5vdGU6IGl0J3MgaW1wb3J0YW50IHRvIHJldHVybiBpbW1lZGlhdGVseSBh
ZnRlciBhbGwgZGVyZWYoKSBjYWxscyBzaW5jZSB0aGUgbm9kZSBtYXkgYmUgZGVsZXRlZC4KLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICAvLyBPdGhlcndpc2UsIHRyeSB0byBkaXNj
b25uZWN0IGZyb20gZGlzYWJsZWQgY29ubmVjdGlvbnMuCi0gICAgaWYgKG1fZGlzYWJsZWRPdXRw
dXRzLmNvbnRhaW5zKG91dHB1dCkpIHsKLSAgICAgICAgbV9kaXNhYmxlZE91dHB1dHMucmVtb3Zl
KG91dHB1dCk7Ci0gICAgICAgIG91dHB1dC0+cmVtb3ZlSW5wdXQodGhpcyk7Ci0gICAgICAgIG5v
ZGUoKS0+ZGVyZWYoQXVkaW9Ob2RlOjpSZWZUeXBlRGlzYWJsZWQpOyAvLyBOb3RlOiBpdCdzIGlt
cG9ydGFudCB0byByZXR1cm4gaW1tZWRpYXRlbHkgYWZ0ZXIgYWxsIGRlcmVmKCkgY2FsbHMgc2lu
Y2UgdGhlIG5vZGUgbWF5IGJlIGRlbGV0ZWQuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBBdWRpb05vZGVJbnB1dDo6ZGlzYWJs
ZShBdWRpb05vZGVPdXRwdXQqIG91dHB1dCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0dy
YXBoT3duZXIoKSk7Ci0KLSAgICBBU1NFUlQob3V0cHV0ICYmIG5vZGUoKSk7Ci0gICAgaWYgKCFv
dXRwdXQgfHwgIW5vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fb3V0cHV0
cy5jb250YWlucyhvdXRwdXQpKTsKLSAgICAKLSAgICBtX2Rpc2FibGVkT3V0cHV0cy5hZGQob3V0
cHV0KTsKLSAgICBtX291dHB1dHMucmVtb3ZlKG91dHB1dCk7Ci0gICAgY2hhbmdlZE91dHB1dHMo
KTsKLQotICAgIG5vZGUoKS0+cmVmKEF1ZGlvTm9kZTo6UmVmVHlwZURpc2FibGVkKTsKLSAgICBu
b2RlKCktPmRlcmVmKEF1ZGlvTm9kZTo6UmVmVHlwZUNvbm5lY3Rpb24pOyAvLyBOb3RlOiBpdCdz
IGltcG9ydGFudCB0byByZXR1cm4gaW1tZWRpYXRlbHkgYWZ0ZXIgYWxsIGRlcmVmKCkgY2FsbHMg
c2luY2UgdGhlIG5vZGUgbWF5IGJlIGRlbGV0ZWQuCi19Ci0KLXZvaWQgQXVkaW9Ob2RlSW5wdXQ6
OmVuYWJsZShBdWRpb05vZGVPdXRwdXQqIG91dHB1dCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCgp
LT5pc0dyYXBoT3duZXIoKSk7Ci0KLSAgICBBU1NFUlQob3V0cHV0ICYmIG5vZGUoKSk7Ci0gICAg
aWYgKCFvdXRwdXQgfHwgIW5vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1f
ZGlzYWJsZWRPdXRwdXRzLmNvbnRhaW5zKG91dHB1dCkpOwotCi0gICAgLy8gTW92ZSBvdXRwdXQg
ZnJvbSBkaXNhYmxlZCBsaXN0IHRvIGFjdGl2ZSBsaXN0LgotICAgIG1fb3V0cHV0cy5hZGQob3V0
cHV0KTsKLSAgICBtX2Rpc2FibGVkT3V0cHV0cy5yZW1vdmUob3V0cHV0KTsKLSAgICBjaGFuZ2Vk
T3V0cHV0cygpOwotCi0gICAgbm9kZSgpLT5yZWYoQXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVjdGlv
bik7Ci0gICAgbm9kZSgpLT5kZXJlZihBdWRpb05vZGU6OlJlZlR5cGVEaXNhYmxlZCk7IC8vIE5v
dGU6IGl0J3MgaW1wb3J0YW50IHRvIHJldHVybiBpbW1lZGlhdGVseSBhZnRlciBhbGwgZGVyZWYo
KSBjYWxscyBzaW5jZSB0aGUgbm9kZSBtYXkgYmUgZGVsZXRlZC4KLX0KLQotdm9pZCBBdWRpb05v
ZGVJbnB1dDo6Y2hhbmdlZE91dHB1dHMoKQotewotICAgIEFTU0VSVChjb250ZXh0KCktPmlzR3Jh
cGhPd25lcigpKTsKLSAgICBpZiAoIW1fcmVuZGVyaW5nU3RhdGVOZWVkVXBkYXRpbmcgJiYgIW5v
ZGUoKS0+aXNNYXJrZWRGb3JEZWxldGlvbigpKSB7ICAgIAotICAgICAgICBjb250ZXh0KCktPm1h
cmtBdWRpb05vZGVJbnB1dERpcnR5KHRoaXMpOwotICAgICAgICBtX3JlbmRlcmluZ1N0YXRlTmVl
ZFVwZGF0aW5nID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQXVkaW9Ob2RlSW5wdXQ6OnVwZGF0
ZVJlbmRlcmluZ1N0YXRlKCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFk
KCkgJiYgY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0gICAgCi0gICAgaWYgKG1fcmVuZGVy
aW5nU3RhdGVOZWVkVXBkYXRpbmcgJiYgIW5vZGUoKS0+aXNNYXJrZWRGb3JEZWxldGlvbigpKSB7
Ci0gICAgICAgIC8vIENvcHkgZnJvbSBtX291dHB1dHMgdG8gbV9yZW5kZXJpbmdPdXRwdXRzLgot
ICAgICAgICBtX3JlbmRlcmluZ091dHB1dHMucmVzaXplKG1fb3V0cHV0cy5zaXplKCkpOwotICAg
ICAgICB1bnNpZ25lZCBqID0gMDsKLSAgICAgICAgZm9yIChIYXNoU2V0PEF1ZGlvTm9kZU91dHB1
dCo+OjppdGVyYXRvciBpID0gbV9vdXRwdXRzLmJlZ2luKCk7IGkgIT0gbV9vdXRwdXRzLmVuZCgp
OyArK2ksICsraikgewotICAgICAgICAgICAgQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQgPSAqaTsK
LSAgICAgICAgICAgIG1fcmVuZGVyaW5nT3V0cHV0c1tqXSA9IG91dHB1dDsKLSAgICAgICAgICAg
IG91dHB1dC0+dXBkYXRlUmVuZGVyaW5nU3RhdGUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIG5v
ZGUoKS0+Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQodGhpcyk7Ci0gICAgICAgIAotICAg
ICAgICBtX3JlbmRlcmluZ1N0YXRlTmVlZFVwZGF0aW5nID0gZmFsc2U7Ci0gICAgfQotfQotCi12
b2lkIEF1ZGlvTm9kZUlucHV0Ojp1cGRhdGVJbnRlcm5hbEJ1cygpCi17Ci0gICAgQVNTRVJUKGNv
bnRleHQoKS0+aXNBdWRpb1RocmVhZCgpICYmIGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOwot
Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dENoYW5uZWxzID0gbnVtYmVyT2ZDaGFubmVscygp
OwotCi0gICAgaWYgKG51bWJlck9mSW5wdXRDaGFubmVscyA9PSBtX2ludGVybmFsU3VtbWluZ0J1
cy0+bnVtYmVyT2ZDaGFubmVscygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2ludGVybmFs
U3VtbWluZ0J1cyA9IGFkb3B0UHRyKG5ldyBBdWRpb0J1cyhudW1iZXJPZklucHV0Q2hhbm5lbHMs
IEF1ZGlvTm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1lcykpOwotfQotCi11bnNpZ25lZCBBdWRp
b05vZGVJbnB1dDo6bnVtYmVyT2ZDaGFubmVscygpIGNvbnN0Ci17Ci0gICAgLy8gRmluZCB0aGUg
bnVtYmVyIG9mIGNoYW5uZWxzIG9mIHRoZSBjb25uZWN0aW9uIHdpdGggdGhlIGxhcmdlc3QgbnVt
YmVyIG9mIGNoYW5uZWxzLgotICAgIHVuc2lnbmVkIG1heENoYW5uZWxzID0gMTsgLy8gb25lIGNo
YW5uZWwgaXMgdGhlIG1pbmltdW0gYWxsb3dlZAotCi0gICAgZm9yIChIYXNoU2V0PEF1ZGlvTm9k
ZU91dHB1dCo+OjppdGVyYXRvciBpID0gbV9vdXRwdXRzLmJlZ2luKCk7IGkgIT0gbV9vdXRwdXRz
LmVuZCgpOyArK2kpIHsKLSAgICAgICAgQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQgPSAqaTsKLSAg
ICAgICAgbWF4Q2hhbm5lbHMgPSBtYXgobWF4Q2hhbm5lbHMsIG91dHB1dC0+YnVzKCktPm51bWJl
ck9mQ2hhbm5lbHMoKSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBtYXhDaGFubmVsczsKLX0K
LQotdW5zaWduZWQgQXVkaW9Ob2RlSW5wdXQ6Om51bWJlck9mUmVuZGVyaW5nQ2hhbm5lbHMoKQot
ewotICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSk7Ci0KLSAgICAvLyBGaW5k
IHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgb2YgdGhlIHJlbmRlcmluZyBjb25uZWN0aW9uIHdpdGgg
dGhlIGxhcmdlc3QgbnVtYmVyIG9mIGNoYW5uZWxzLgotICAgIHVuc2lnbmVkIG1heENoYW5uZWxz
ID0gMTsgLy8gb25lIGNoYW5uZWwgaXMgdGhlIG1pbmltdW0gYWxsb3dlZAotCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKTsgKytpKQot
ICAgICAgICBtYXhDaGFubmVscyA9IG1heChtYXhDaGFubmVscywgcmVuZGVyaW5nT3V0cHV0KGkp
LT5idXMoKS0+bnVtYmVyT2ZDaGFubmVscygpKTsKLSAgICAKLSAgICByZXR1cm4gbWF4Q2hhbm5l
bHM7Ci19Ci0KLUF1ZGlvQnVzKiBBdWRpb05vZGVJbnB1dDo6YnVzKCkKLXsKLSAgICBBU1NFUlQo
Y29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkpOwotCi0gICAgLy8gSGFuZGxlIHNpbmdsZSBjb25u
ZWN0aW9uIHNwZWNpYWxseSB0byBhbGxvdyBmb3IgaW4tcGxhY2UgcHJvY2Vzc2luZy4KLSAgICBp
ZiAobnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9ucygpID09IDEpCi0gICAgICAgIHJldHVybiBy
ZW5kZXJpbmdPdXRwdXQoMCktPmJ1cygpOwotCi0gICAgLy8gTXVsdGlwbGUgY29ubmVjdGlvbnMg
Y2FzZSAob3Igbm8gY29ubmVjdGlvbnMpLgotICAgIHJldHVybiBpbnRlcm5hbFN1bW1pbmdCdXMo
KTsKLX0KLQotQXVkaW9CdXMqIEF1ZGlvTm9kZUlucHV0OjppbnRlcm5hbFN1bW1pbmdCdXMoKQot
ewotICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSk7Ci0KLSAgICBBU1NFUlQo
bnVtYmVyT2ZSZW5kZXJpbmdDaGFubmVscygpID09IG1faW50ZXJuYWxTdW1taW5nQnVzLT5udW1i
ZXJPZkNoYW5uZWxzKCkpOwotCi0gICAgcmV0dXJuIG1faW50ZXJuYWxTdW1taW5nQnVzLmdldCgp
OwotfQotCi12b2lkIEF1ZGlvTm9kZUlucHV0OjpzdW1BbGxDb25uZWN0aW9ucyhBdWRpb0J1cyog
c3VtbWluZ0J1cywgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKLXsKLSAgICBBU1NFUlQoY29udGV4
dCgpLT5pc0F1ZGlvVGhyZWFkKCkpOwotCi0gICAgLy8gV2Ugc2hvdWxkbid0IGJlIGNhbGxpbmcg
dGhpcyBtZXRob2QgaWYgdGhlcmUncyBvbmx5IG9uZSBjb25uZWN0aW9uLCBzaW5jZSBpdCdzIGxl
c3MgZWZmaWNpZW50LgotICAgIEFTU0VSVChudW1iZXJPZlJlbmRlcmluZ0Nvbm5lY3Rpb25zKCkg
PiAxKTsKLQotICAgIEFTU0VSVChzdW1taW5nQnVzKTsKLSAgICBpZiAoIXN1bW1pbmdCdXMpCi0g
ICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgc3VtbWluZ0J1cy0+emVybygpOwotCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKTsg
KytpKSB7Ci0gICAgICAgIEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0ID0gcmVuZGVyaW5nT3V0cHV0
KGkpOwotICAgICAgICBBU1NFUlQob3V0cHV0KTsKLQotICAgICAgICAvLyBSZW5kZXIgYXVkaW8g
ZnJvbSB0aGlzIG91dHB1dC4KLSAgICAgICAgQXVkaW9CdXMqIGNvbm5lY3Rpb25CdXMgPSBvdXRw
dXQtPnB1bGwoMCwgZnJhbWVzVG9Qcm9jZXNzKTsKLQotICAgICAgICAvLyBTdW0sIHdpdGggdW5p
dHktZ2Fpbi4KLSAgICAgICAgc3VtbWluZ0J1cy0+c3VtRnJvbSgqY29ubmVjdGlvbkJ1cyk7Ci0g
ICAgfQotfQotCi1BdWRpb0J1cyogQXVkaW9Ob2RlSW5wdXQ6OnB1bGwoQXVkaW9CdXMqIGluUGxh
Y2VCdXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQoKS0+
aXNBdWRpb1RocmVhZCgpKTsKLQotICAgIC8vIEhhbmRsZSBzaW5nbGUgY29ubmVjdGlvbiBjYXNl
LgotICAgIGlmIChudW1iZXJPZlJlbmRlcmluZ0Nvbm5lY3Rpb25zKCkgPT0gMSkgewotICAgICAg
ICAvLyBUaGUgb3V0cHV0IHdpbGwgb3B0aW1pemUgcHJvY2Vzc2luZyB1c2luZyBpblBsYWNlQnVz
IGlmIGl0J3MgYWJsZS4KLSAgICAgICAgQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQgPSB0aGlzLT5y
ZW5kZXJpbmdPdXRwdXQoMCk7Ci0gICAgICAgIHJldHVybiBvdXRwdXQtPnB1bGwoaW5QbGFjZUJ1
cywgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB9Ci0KLSAgICBBdWRpb0J1cyogaW50ZXJuYWxTdW1t
aW5nQnVzID0gdGhpcy0+aW50ZXJuYWxTdW1taW5nQnVzKCk7Ci0KLSAgICBpZiAoIW51bWJlck9m
UmVuZGVyaW5nQ29ubmVjdGlvbnMoKSkgewotICAgICAgICAvLyBBdCBsZWFzdCwgZ2VuZXJhdGUg
c2lsZW5jZSBpZiB3ZSdyZSBub3QgY29ubmVjdGVkIHRvIGFueXRoaW5nLgotICAgICAgICAvLyBG
SVhNRTogaWYgd2Ugd2FudGVkIHRvIGdldCBmYW5jeSwgd2UgY291bGQgcHJvcGFnYXRlIGEgJ3Np
bGVudCBoaW50JyBoZXJlIHRvIG9wdGltaXplIHRoZSBkb3duc3RyZWFtIGdyYXBoIHByb2Nlc3Np
bmcuCi0gICAgICAgIGludGVybmFsU3VtbWluZ0J1cy0+emVybygpOwotICAgICAgICByZXR1cm4g
aW50ZXJuYWxTdW1taW5nQnVzOwotICAgIH0KLQotICAgIC8vIEhhbmRsZSBtdWx0aXBsZSBjb25u
ZWN0aW9ucyBjYXNlLgotICAgIHN1bUFsbENvbm5lY3Rpb25zKGludGVybmFsU3VtbWluZ0J1cywg
ZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAKLSAgICByZXR1cm4gaW50ZXJuYWxTdW1taW5nQnVzOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElP
KQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5oCShyZXZpc2lv
biAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDEyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBdWRp
b05vZGVJbnB1dF9oCi0jZGVmaW5lIEF1ZGlvTm9kZUlucHV0X2gKLQotI2luY2x1ZGUgIkF1ZGlv
QnVzLmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
QXVkaW9Ob2RlOwotY2xhc3MgQXVkaW9Ob2RlT3V0cHV0OwotCi0vLyBBbiBBdWRpb05vZGVJbnB1
dCByZXByZXNlbnRzIGFuIGlucHV0IHRvIGFuIEF1ZGlvTm9kZSBhbmQgY2FuIGJlIGNvbm5lY3Rl
ZCBmcm9tIG9uZSBvciBtb3JlIEF1ZGlvTm9kZU91dHB1dHMuCi0vLyBJbiB0aGUgY2FzZSBvZiBt
dWx0aXBsZSBjb25uZWN0aW9ucywgdGhlIGlucHV0IHdpbGwgYWN0IGFzIGEgdW5pdHktZ2FpbiBz
dW1taW5nIGp1bmN0aW9uLCBtaXhpbmcgYWxsIHRoZSBvdXRwdXRzLgotLy8gVGhlIG51bWJlciBv
ZiBjaGFubmVscyBvZiB0aGUgaW5wdXQncyBidXMgaXMgdGhlIG1heGltdW0gb2YgdGhlIG51bWJl
ciBvZiBjaGFubmVscyBvZiBhbGwgaXRzIGNvbm5lY3Rpb25zLgotCi1jbGFzcyBBdWRpb05vZGVJ
bnB1dCB7Ci1wdWJsaWM6Ci0gICAgQXVkaW9Ob2RlSW5wdXQoQXVkaW9Ob2RlKik7Ci0KLSAgICAv
LyBDYW4gYmUgY2FsbGVkIGZyb20gYW55IHRocmVhZC4KLSAgICBBdWRpb05vZGUqIG5vZGUoKSBj
b25zdCB7IHJldHVybiBtX25vZGU7IH0KLSAgICBBdWRpb0NvbnRleHQqIGNvbnRleHQoKSB7IHJl
dHVybiBtX25vZGUtPmNvbnRleHQoKTsgfQotCi0gICAgLy8gTXVzdCBiZSBjYWxsZWQgd2l0aCB0
aGUgY29udGV4dCdzIGdyYXBoIGxvY2suCi0gICAgdm9pZCBjb25uZWN0KEF1ZGlvTm9kZU91dHB1
dCopOwotICAgIHZvaWQgZGlzY29ubmVjdChBdWRpb05vZGVPdXRwdXQqKTsKLQotICAgIC8vIGRp
c2FibGUoKSB3aWxsIHRha2UgdGhlIG91dHB1dCBvdXQgb2YgdGhlIGFjdGl2ZSBjb25uZWN0aW9u
cyBsaXN0IGFuZCBzZXQgYXNpZGUgaW4gYSBkaXNhYmxlZCBsaXN0LgotICAgIC8vIGVuYWJsZSgp
IHdpbGwgcHV0IHRoZSBvdXRwdXQgYmFjayBpbnRvIHRoZSBhY3RpdmUgY29ubmVjdGlvbnMgbGlz
dC4KLSAgICAvLyBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jay4K
LSAgICB2b2lkIGVuYWJsZShBdWRpb05vZGVPdXRwdXQqKTsKLSAgICB2b2lkIGRpc2FibGUoQXVk
aW9Ob2RlT3V0cHV0Kik7Ci0KLSAgICAvLyBwdWxsKCkgcHJvY2Vzc2VzIGFsbCBvZiB0aGUgQXVk
aW9Ob2RlcyBjb25uZWN0ZWQgdG8gdXMuCi0gICAgLy8gSW4gdGhlIGNhc2Ugb2YgbXVsdGlwbGUg
Y29ubmVjdGlvbnMgaXQgc3VtcyB0aGUgcmVzdWx0IGludG8gYW4gaW50ZXJuYWwgc3VtbWluZyBi
dXMuCi0gICAgLy8gSW4gdGhlIHNpbmdsZSBjb25uZWN0aW9uIGNhc2UsIGl0IGFsbG93cyBpbi1w
bGFjZSBwcm9jZXNzaW5nIHdoZXJlIHBvc3NpYmxlIHVzaW5nIGluUGxhY2VCdXMuCi0gICAgLy8g
SXQgcmV0dXJucyB0aGUgYnVzIHdoaWNoIGl0IHJlbmRlcmVkIGludG8sIHJldHVybmluZyBpblBs
YWNlQnVzIGlmIGluLXBsYWNlIHByb2Nlc3Npbmcgd2FzIHBlcmZvcm1lZC4KLSAgICAvLyBDYWxs
ZWQgZnJvbSBjb250ZXh0J3MgYXVkaW8gdGhyZWFkLgotICAgIEF1ZGlvQnVzKiBwdWxsKEF1ZGlv
QnVzKiBpblBsYWNlQnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLQotICAgIC8vIGJ1cygp
IGNvbnRhaW5zIHRoZSByZW5kZXJlZCBhdWRpbyBhZnRlciBwdWxsKCkgaGFzIGJlZW4gY2FsbGVk
IGZvciBlYWNoIHRpbWUgcXVhbnR1bS4KLSAgICAvLyBDYWxsZWQgZnJvbSBjb250ZXh0J3MgYXVk
aW8gdGhyZWFkLgotICAgIEF1ZGlvQnVzKiBidXMoKTsKLSAgICAKLSAgICAvLyBUaGlzIGNvcGll
cyBtX291dHB1dHMgdG8gbV9yZW5kZXJpbmdPdXRwdXRzLiAgUGxlYXNlIHNlZSBjb21tZW50cyBm
b3IgdGhlc2UgbGlzdHMgYmVsb3cuCi0gICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCB3aGVuIHdl
IG93biB0aGUgY29udGV4dCdzIGdyYXBoIGxvY2sgaW4gdGhlIGF1ZGlvIHRocmVhZCBhdCB0aGUg
dmVyeSBzdGFydCBvciBlbmQgb2YgdGhlIHJlbmRlciBxdWFudHVtLgotICAgIHZvaWQgdXBkYXRl
UmVuZGVyaW5nU3RhdGUoKTsKLQotICAgIC8vIHVwZGF0ZUludGVybmFsQnVzKCkgdXBkYXRlcyBt
X2ludGVybmFsU3VtbWluZ0J1cyBhcHByb3ByaWF0ZWx5IGZvciB0aGUgbnVtYmVyIG9mIGNoYW5u
ZWxzLgotICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2hlbiB3ZSBvd24gdGhlIGNvbnRleHQn
cyBncmFwaCBsb2NrIGluIHRoZSBhdWRpbyB0aHJlYWQgYXQgdGhlIHZlcnkgc3RhcnQgb3IgZW5k
IG9mIHRoZSByZW5kZXIgcXVhbnR1bS4KLSAgICB2b2lkIHVwZGF0ZUludGVybmFsQnVzKCk7Ci0K
LSAgICAvLyBSZW5kZXJpbmcgY29kZSBhY2Nlc3NlcyBpdHMgdmVyc2lvbiBvZiB0aGUgY3VycmVu
dCBjb25uZWN0aW9ucyBoZXJlLgotICAgIHVuc2lnbmVkIG51bWJlck9mUmVuZGVyaW5nQ29ubmVj
dGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ091dHB1dHMuc2l6ZSgpOyB9Ci0gICAg
QXVkaW9Ob2RlT3V0cHV0KiByZW5kZXJpbmdPdXRwdXQodW5zaWduZWQgaSkgeyByZXR1cm4gbV9y
ZW5kZXJpbmdPdXRwdXRzW2ldOyB9Ci0gICAgY29uc3QgQXVkaW9Ob2RlT3V0cHV0KiByZW5kZXJp
bmdPdXRwdXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdPdXRwdXRzW2ld
OyB9Ci0gICAgYm9vbCBpc0Nvbm5lY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG51bWJlck9mUmVuZGVy
aW5nQ29ubmVjdGlvbnMoKSA+IDA7IH0KLQotICAgIC8vIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMg
b2YgdGhlIGNvbm5lY3Rpb24gd2l0aCB0aGUgbGFyZ2VzdCBudW1iZXIgb2YgY2hhbm5lbHMuCi0g
ICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscygpIGNvbnN0OyAgICAgICAgCi0gICAgCi1wcml2
YXRlOgotICAgIEF1ZGlvTm9kZSogbV9ub2RlOwotCi0gICAgLy8gbV9vdXRwdXRzIGNvbnRhaW5z
IHRoZSBBdWRpb05vZGVPdXRwdXRzIHJlcHJlc2VudGluZyBjdXJyZW50IGNvbm5lY3Rpb25zIHdo
aWNoIGFyZSBub3QgZGlzYWJsZWQuCi0gICAgLy8gVGhlIHJlbmRlcmluZyBjb2RlIHNob3VsZCBu
ZXZlciB1c2UgdGhpcyBkaXJlY3RseSwgYnV0IGluc3RlYWQgdXNlcyBtX3JlbmRlcmluZ091dHB1
dHMuCi0gICAgSGFzaFNldDxBdWRpb05vZGVPdXRwdXQqPiBtX291dHB1dHM7Ci0KLSAgICAvLyBu
dW1iZXJPZkNvbm5lY3Rpb25zKCkgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBmcm9tIHRoZSBhdWRp
byByZW5kZXJpbmcgdGhyZWFkLgotICAgIC8vIEluc3RlYWQgbnVtYmVyT2ZSZW5kZXJpbmdDb25u
ZWN0aW9ucygpIGFuZCByZW5kZXJpbmdPdXRwdXQoKSBzaG91bGQgYmUgdXNlZC4KLSAgICB1bnNp
Z25lZCBudW1iZXJPZkNvbm5lY3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9vdXRwdXRzLnNpemUo
KTsgfQotCi0gICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCB3aGVuZXZlciB3ZSBtb2RpZnkgbV9v
dXRwdXRzLgotICAgIHZvaWQgY2hhbmdlZE91dHB1dHMoKTsKLSAgICAKLSAgICAvLyBtX3JlbmRl
cmluZ091dHB1dHMgaXMgYSBjb3B5IG9mIG1fb3V0cHV0cyB3aGljaCB3aWxsIG5ldmVyIGJlIG1v
ZGlmaWVkIGR1cmluZyB0aGUgZ3JhcGggcmVuZGVyaW5nIG9uIHRoZSBhdWRpbyB0aHJlYWQuCi0g
ICAgLy8gVGhpcyBpcyB0aGUgbGlzdCB3aGljaCBpcyB1c2VkIGJ5IHRoZSByZW5kZXJpbmcgY29k
ZS4KLSAgICAvLyBXaGVuZXZlciBtX291dHB1dHMgaXMgbW9kaWZpZWQsIHRoZSBjb250ZXh0IGlz
IHRvbGQgc28gaXQgY2FuIGxhdGVyIHVwZGF0ZSBtX3JlbmRlcmluZ091dHB1dHMgZnJvbSBtX291
dHB1dHMgYXQgYSBzYWZlIHRpbWUuCi0gICAgLy8gTW9zdCBvZiB0aGUgdGltZSwgbV9yZW5kZXJp
bmdPdXRwdXRzIGlzIGlkZW50aWNhbCB0byBtX291dHB1dHMuCi0gICAgVmVjdG9yPEF1ZGlvTm9k
ZU91dHB1dCo+IG1fcmVuZGVyaW5nT3V0cHV0czsKLQotICAgIC8vIG1fcmVuZGVyaW5nU3RhdGVO
ZWVkVXBkYXRpbmcga2VlcHMgdHJhY2sgaWYgbV9vdXRwdXRzIGlzIG1vZGlmaWVkLgotICAgIGJv
b2wgbV9yZW5kZXJpbmdTdGF0ZU5lZWRVcGRhdGluZzsKLQotICAgIC8vIFRoZSBudW1iZXIgb2Yg
Y2hhbm5lbHMgb2YgdGhlIHJlbmRlcmluZyBjb25uZWN0aW9uIHdpdGggdGhlIGxhcmdlc3QgbnVt
YmVyIG9mIGNoYW5uZWxzLgotICAgIHVuc2lnbmVkIG51bWJlck9mUmVuZGVyaW5nQ2hhbm5lbHMo
KTsKLQotICAgIC8vIG1fZGlzYWJsZWRPdXRwdXRzIGNvbnRhaW5zIHRoZSBBdWRpb05vZGVPdXRw
dXRzIHdoaWNoIGFyZSBkaXNhYmxlZCAod2lsbCBub3QgYmUgcHJvY2Vzc2VkKSBieSB0aGUgYXVk
aW8gZ3JhcGggcmVuZGVyaW5nLgotICAgIC8vIEJ1dCwgZnJvbSBKYXZhU2NyaXB0J3MgcGVyc3Bl
Y3RpdmUsIHRoZXNlIG91dHB1dHMgYXJlIHN0aWxsIGNvbm5lY3RlZCB0byB1cy4KLSAgICAvLyBH
ZW5lcmFsbHksIHRoZXNlIHJlcHJlc2VudCBkaXNhYmxlZCBjb25uZWN0aW9ucyBmcm9tICJub3Rl
cyIgd2hpY2ggaGF2ZSBmaW5pc2hlZCBwbGF5aW5nIGJ1dCBhcmUgbm90IHlldCBnYXJiYWdlIGNv
bGxlY3RlZC4KLSAgICBIYXNoU2V0PEF1ZGlvTm9kZU91dHB1dCo+IG1fZGlzYWJsZWRPdXRwdXRz
OwotCi0gICAgLy8gQ2FsbGVkIGZyb20gY29udGV4dCdzIGF1ZGlvIHRocmVhZC4KLSAgICBBdWRp
b0J1cyogaW50ZXJuYWxTdW1taW5nQnVzKCk7Ci0gICAgdm9pZCBzdW1BbGxDb25uZWN0aW9ucyhB
dWRpb0J1cyogc3VtbWluZ0J1cywgc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7Ci0KLSAgICBPd25Q
dHI8QXVkaW9CdXM+IG1faW50ZXJuYWxTdW1taW5nQnVzOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gQXVkaW9Ob2RlSW5wdXRfaApJbmRleDogU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuY3BwCShyZXZpc2lvbiAxMTEyMDgpCisrKyBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDIwOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgotCi0j
aW5jbHVkZSAiQXVkaW9CdXMuaCIKLSNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJBdWRpb05vZGVJbnB1dC5oIgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1BdWRpb05vZGVPdXRwdXQ6OkF1ZGlvTm9kZU91dHB1dChBdWRpb05v
ZGUqIG5vZGUsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMpCi0gICAgOiBtX25vZGUobm9kZSkK
LSAgICAsIG1fbnVtYmVyT2ZDaGFubmVscyhudW1iZXJPZkNoYW5uZWxzKQotICAgICwgbV9kZXNp
cmVkTnVtYmVyT2ZDaGFubmVscyhudW1iZXJPZkNoYW5uZWxzKQotICAgICwgbV9hY3R1YWxEZXN0
aW5hdGlvbkJ1cygwKQotICAgICwgbV9pc0VuYWJsZWQodHJ1ZSkKLSAgICAsIG1fcmVuZGVyaW5n
RmFuT3V0Q291bnQoMCkKLXsKLSAgICBBU1NFUlQobnVtYmVyT2ZDaGFubmVscyA8PSBBdWRpb0Nv
bnRleHQ6Om1heE51bWJlck9mQ2hhbm5lbHMoKSk7Ci0KLSAgICBtX2ludGVybmFsQnVzID0gYWRv
cHRQdHIobmV3IEF1ZGlvQnVzKG51bWJlck9mQ2hhbm5lbHMsIEF1ZGlvTm9kZTo6UHJvY2Vzc2lu
Z1NpemVJbkZyYW1lcykpOwotICAgIG1fYWN0dWFsRGVzdGluYXRpb25CdXMgPSBtX2ludGVybmFs
QnVzLmdldCgpOwotfQotCi12b2lkIEF1ZGlvTm9kZU91dHB1dDo6c2V0TnVtYmVyT2ZDaGFubmVs
cyh1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKQotewotICAgIEFTU0VSVChudW1iZXJPZkNoYW5u
ZWxzIDw9IEF1ZGlvQ29udGV4dDo6bWF4TnVtYmVyT2ZDaGFubmVscygpKTsKLSAgICBBU1NFUlQo
Y29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0KLSAgICBtX2Rlc2lyZWROdW1iZXJPZkNoYW5u
ZWxzID0gbnVtYmVyT2ZDaGFubmVsczsKLQotICAgIGlmIChjb250ZXh0KCktPmlzQXVkaW9UaHJl
YWQoKSkgewotICAgICAgICAvLyBJZiB3ZSdyZSBpbiB0aGUgYXVkaW8gdGhyZWFkIHRoZW4gd2Ug
Y2FuIHRha2UgY2FyZSBvZiBpdCByaWdodCBhd2F5ICh3ZSBzaG91bGQgYmUgYXQgdGhlIHZlcnkg
c3RhcnQgb3IgZW5kIG9mIGEgcmVuZGVyaW5nIHF1YW50dW0pLgotICAgICAgICB1cGRhdGVOdW1i
ZXJPZkNoYW5uZWxzKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gTGV0IHRoZSBjb250ZXh0
IHRha2UgY2FyZSBvZiBpdCBpbiB0aGUgYXVkaW8gdGhyZWFkIGluIHRoZSBwcmUgYW5kIHBvc3Qg
cmVuZGVyIHRhc2tzLgotICAgICAgICBjb250ZXh0KCktPm1hcmtBdWRpb05vZGVPdXRwdXREaXJ0
eSh0aGlzKTsKLSAgICB9Ci19Ci0KLXZvaWQgQXVkaW9Ob2RlT3V0cHV0Ojp1cGRhdGVJbnRlcm5h
bEJ1cygpCi17Ci0gICAgaWYgKG51bWJlck9mQ2hhbm5lbHMoKSA9PSBtX2ludGVybmFsQnVzLT5u
dW1iZXJPZkNoYW5uZWxzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faW50ZXJuYWxCdXMg
PSBhZG9wdFB0cihuZXcgQXVkaW9CdXMobnVtYmVyT2ZDaGFubmVscygpLCBBdWRpb05vZGU6OlBy
b2Nlc3NpbmdTaXplSW5GcmFtZXMpKTsKLQotICAgIC8vIFRoaXMgbWF5IGxhdGVyIGJlIGNoYW5n
ZWQgaW4gcHVsbCgpIHRvIHBvaW50IHRvIGFuIGluLXBsYWNlIGJ1cyB3aXRoIHRoZSBzYW1lIG51
bWJlciBvZiBjaGFubmVscy4KLSAgICBtX2FjdHVhbERlc3RpbmF0aW9uQnVzID0gbV9pbnRlcm5h
bEJ1cy5nZXQoKTsKLX0KLQotdm9pZCBBdWRpb05vZGVPdXRwdXQ6OnVwZGF0ZVJlbmRlcmluZ1N0
YXRlKCkKLXsKLSAgICB1cGRhdGVOdW1iZXJPZkNoYW5uZWxzKCk7Ci0gICAgbV9yZW5kZXJpbmdG
YW5PdXRDb3VudCA9IGZhbk91dENvdW50KCk7Ci19Ci0KLXZvaWQgQXVkaW9Ob2RlT3V0cHV0Ojp1
cGRhdGVOdW1iZXJPZkNoYW5uZWxzKCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlv
VGhyZWFkKCkgJiYgY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0KLSAgICBpZiAobV9udW1i
ZXJPZkNoYW5uZWxzICE9IG1fZGVzaXJlZE51bWJlck9mQ2hhbm5lbHMpIHsKLSAgICAgICAgbV9u
dW1iZXJPZkNoYW5uZWxzID0gbV9kZXNpcmVkTnVtYmVyT2ZDaGFubmVsczsKLSAgICAgICAgdXBk
YXRlSW50ZXJuYWxCdXMoKTsKLSAgICAgICAgcHJvcGFnYXRlQ2hhbm5lbENvdW50KCk7Ci0gICAg
fQotfQotCi12b2lkIEF1ZGlvTm9kZU91dHB1dDo6cHJvcGFnYXRlQ2hhbm5lbENvdW50KCkKLXsK
LSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkgJiYgY29udGV4dCgpLT5pc0dy
YXBoT3duZXIoKSk7Ci0gICAgCi0gICAgaWYgKGlzQ2hhbm5lbENvdW50S25vd24oKSkgewotICAg
ICAgICAvLyBBbm5vdW5jZSB0byBhbnkgbm9kZXMgd2UncmUgY29ubmVjdGVkIHRvIHRoYXQgd2Ug
Y2hhbmdlZCBvdXIgY2hhbm5lbCBjb3VudCBmb3IgaXRzIGlucHV0LgotICAgICAgICBmb3IgKElu
cHV0c0l0ZXJhdG9yIGkgPSBtX2lucHV0cy5iZWdpbigpOyBpICE9IG1faW5wdXRzLmVuZCgpOyAr
K2kpIHsKLSAgICAgICAgICAgIEF1ZGlvTm9kZUlucHV0KiBpbnB1dCA9ICppOwotICAgICAgICAg
ICAgQXVkaW9Ob2RlKiBjb25uZWN0aW9uTm9kZSA9IGlucHV0LT5ub2RlKCk7Ci0gICAgICAgICAg
ICBjb25uZWN0aW9uTm9kZS0+Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQoaW5wdXQpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi1BdWRpb0J1cyogQXVkaW9Ob2RlT3V0cHV0OjpwdWxsKEF1
ZGlvQnVzKiBpblBsYWNlQnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIEFTU0VS
VChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKG1fcmVuZGVyaW5nRmFu
T3V0Q291bnQgPiAwKTsKLSAgICAKLSAgICAvLyBDYXVzZXMgb3VyIEF1ZGlvTm9kZSB0byBwcm9j
ZXNzIGlmIGl0IGhhc24ndCBhbHJlYWR5IGZvciB0aGlzIHJlbmRlciBxdWFudHVtLgotICAgIC8v
IFdlIHRyeSB0byBkbyBpbi1wbGFjZSBwcm9jZXNzaW5nICh1c2luZyBpblBsYWNlQnVzKSBpZiBh
dCBhbGwgcG9zc2libGUsCi0gICAgLy8gYnV0IHdlIGNhbid0IHByb2Nlc3MgaW4tcGxhY2UgaWYg
d2UncmUgY29ubmVjdGVkIHRvIG1vcmUgdGhhbiBvbmUgaW5wdXQgKGZhbi1vdXQgPiAxKS4KLSAg
ICAvLyBJbiB0aGlzIGNhc2UgcHVsbCgpIGlzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBwZXIgcmVu
ZGVyaW5nIHF1YW50dW0sIGFuZCB0aGUgcHJvY2Vzc0lmTmVjZXNzYXJ5KCkgY2FsbCBiZWxvdyB3
aWxsCi0gICAgLy8gY2F1c2Ugb3VyIG5vZGUgdG8gcHJvY2VzcygpIG9ubHkgdGhlIGZpcnN0IHRp
bWUsIGNhY2hpbmcgdGhlIG91dHB1dCBpbiBtX2ludGVybmFsT3V0cHV0QnVzIGZvciBzdWJzZXF1
ZW50IGNhbGxzLiAgICAKLSAgICAKLSAgICBib29sIGlzSW5QbGFjZSA9IGluUGxhY2VCdXMgJiYg
aW5QbGFjZUJ1cy0+bnVtYmVyT2ZDaGFubmVscygpID09IG51bWJlck9mQ2hhbm5lbHMoKSAmJiBt
X3JlbmRlcmluZ0Zhbk91dENvdW50ID09IDE7Ci0KLSAgICAvLyBTZXR1cCB0aGUgYWN0dWFsIGRl
c3RpbmF0aW9uIGJ1cyBmb3IgcHJvY2Vzc2luZyB3aGVuIG91ciBub2RlJ3MgcHJvY2VzcygpIG1l
dGhvZCBnZXRzIGNhbGxlZCBpbiBwcm9jZXNzSWZOZWNlc3NhcnkoKSBiZWxvdy4KLSAgICBtX2Fj
dHVhbERlc3RpbmF0aW9uQnVzID0gaXNJblBsYWNlID8gaW5QbGFjZUJ1cyA6IG1faW50ZXJuYWxC
dXMuZ2V0KCk7Ci0KLSAgICBub2RlKCktPnByb2Nlc3NJZk5lY2Vzc2FyeShmcmFtZXNUb1Byb2Nl
c3MpOwotICAgIHJldHVybiBtX2FjdHVhbERlc3RpbmF0aW9uQnVzOwotfQotCi1BdWRpb0J1cyog
QXVkaW9Ob2RlT3V0cHV0OjpidXMoKSBjb25zdAotewotICAgIEFTU0VSVChjb25zdF9jYXN0PEF1
ZGlvTm9kZU91dHB1dCo+KHRoaXMpLT5jb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSk7Ci0gICAg
QVNTRVJUKG1fYWN0dWFsRGVzdGluYXRpb25CdXMpOwotICAgIHJldHVybiBtX2FjdHVhbERlc3Rp
bmF0aW9uQnVzOwotfQotCi11bnNpZ25lZCBBdWRpb05vZGVPdXRwdXQ6OnJlbmRlcmluZ0Zhbk91
dENvdW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZW5kZXJpbmdGYW5PdXRDb3VudDsKLX0K
LQotdW5zaWduZWQgQXVkaW9Ob2RlT3V0cHV0OjpmYW5PdXRDb3VudCgpCi17Ci0gICAgQVNTRVJU
KGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOwotICAgIHJldHVybiBtX2lucHV0cy5zaXplKCk7
Ci19Ci0KLXZvaWQgQXVkaW9Ob2RlT3V0cHV0OjphZGRJbnB1dChBdWRpb05vZGVJbnB1dCogaW5w
dXQpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOwotCi0gICAgQVNT
RVJUKGlucHV0KTsKLSAgICBpZiAoIWlucHV0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lu
cHV0cy5hZGQoaW5wdXQpOwotfQotCi12b2lkIEF1ZGlvTm9kZU91dHB1dDo6cmVtb3ZlSW5wdXQo
QXVkaW9Ob2RlSW5wdXQqIGlucHV0KQotewotICAgIEFTU0VSVChjb250ZXh0KCktPmlzR3JhcGhP
d25lcigpKTsKLQotICAgIEFTU0VSVChpbnB1dCk7Ci0gICAgaWYgKCFpbnB1dCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9pbnB1dHMucmVtb3ZlKGlucHV0KTsKLX0KLQotdm9pZCBBdWRpb05v
ZGVPdXRwdXQ6OmRpc2Nvbm5lY3RBbGxJbnB1dHMoKQotewotICAgIEFTU0VSVChjb250ZXh0KCkt
PmlzR3JhcGhPd25lcigpKTsKLSAgICAKLSAgICAvLyBBdWRpb05vZGVJbnB1dDo6ZGlzY29ubmVj
dCgpIGNoYW5nZXMgbV9pbnB1dHMgYnkgY2FsbGluZyByZW1vdmVJbnB1dCgpLgotICAgIHdoaWxl
ICghbV9pbnB1dHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEF1ZGlvTm9kZUlucHV0KiBpbnB1dCA9
ICptX2lucHV0cy5iZWdpbigpOwotICAgICAgICBpbnB1dC0+ZGlzY29ubmVjdCh0aGlzKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgQXVkaW9Ob2RlT3V0cHV0OjpkaXNhYmxlKCkKLXsKLSAgICBBU1NFUlQo
Y29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0KLSAgICBpZiAobV9pc0VuYWJsZWQpIHsKLSAg
ICAgICAgZm9yIChJbnB1dHNJdGVyYXRvciBpID0gbV9pbnB1dHMuYmVnaW4oKTsgaSAhPSBtX2lu
cHV0cy5lbmQoKTsgKytpKSB7Ci0gICAgICAgICAgICBBdWRpb05vZGVJbnB1dCogaW5wdXQgPSAq
aTsKLSAgICAgICAgICAgIGlucHV0LT5kaXNhYmxlKHRoaXMpOwotICAgICAgICB9Ci0gICAgICAg
IG1faXNFbmFibGVkID0gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIEF1ZGlvTm9kZU91dHB1dDo6
ZW5hYmxlKCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0KLSAg
ICBpZiAoIW1faXNFbmFibGVkKSB7Ci0gICAgICAgIGZvciAoSW5wdXRzSXRlcmF0b3IgaSA9IG1f
aW5wdXRzLmJlZ2luKCk7IGkgIT0gbV9pbnB1dHMuZW5kKCk7ICsraSkgewotICAgICAgICAgICAg
QXVkaW9Ob2RlSW5wdXQqIGlucHV0ID0gKmk7Ci0gICAgICAgICAgICBpbnB1dC0+ZW5hYmxlKHRo
aXMpOwotICAgICAgICB9Ci0gICAgICAgIG1faXNFbmFibGVkID0gdHJ1ZTsKLSAgICB9Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuaAkocmV2aXNpb24g
MTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEF1ZGlv
Tm9kZU91dHB1dF9oCi0jZGVmaW5lIEF1ZGlvTm9kZU91dHB1dF9oCi0KLSNpbmNsdWRlICJBdWRp
b0J1cy5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb0NvbnRleHQ7Ci1jbGFzcyBBdWRpb05vZGVJ
bnB1dDsKLQotLy8gQXVkaW9Ob2RlT3V0cHV0IHJlcHJlc2VudHMgYSBzaW5nbGUgb3V0cHV0IGZv
ciBhbiBBdWRpb05vZGUuCi0vLyBJdCBtYXkgYmUgY29ubmVjdGVkIHRvIG9uZSBvciBtb3JlIEF1
ZGlvTm9kZUlucHV0cy4KLQotY2xhc3MgQXVkaW9Ob2RlT3V0cHV0IHsKLXB1YmxpYzoKLSAgICAv
LyBJdCdzIE9LIHRvIHBhc3MgMCBmb3IgbnVtYmVyT2ZDaGFubmVscyBpbiB3aGljaCBjYXNlIHNl
dE51bWJlck9mQ2hhbm5lbHMoKSBtdXN0IGJlIGNhbGxlZCBsYXRlciBvbi4KLSAgICBBdWRpb05v
ZGVPdXRwdXQoQXVkaW9Ob2RlKiwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscyk7Ci0KLSAgICAv
LyBDYW4gYmUgY2FsbGVkIGZyb20gYW55IHRocmVhZC4KLSAgICBBdWRpb05vZGUqIG5vZGUoKSBj
b25zdCB7IHJldHVybiBtX25vZGU7IH0KLSAgICBBdWRpb0NvbnRleHQqIGNvbnRleHQoKSB7IHJl
dHVybiBtX25vZGUtPmNvbnRleHQoKTsgfQotICAgIAotICAgIC8vIENhdXNlcyBvdXIgQXVkaW9O
b2RlIHRvIHByb2Nlc3MgaWYgaXQgaGFzbid0IGFscmVhZHkgZm9yIHRoaXMgcmVuZGVyIHF1YW50
dW0uCi0gICAgLy8gSXQgcmV0dXJucyB0aGUgYnVzIGNvbnRhaW5pbmcgdGhlIHByb2Nlc3NlZCBh
dWRpbyBmb3IgdGhpcyBvdXRwdXQsIHJldHVybmluZyBpblBsYWNlQnVzIGlmIGluLXBsYWNlIHBy
b2Nlc3Npbmcgd2FzIHBvc3NpYmxlLgotICAgIC8vIENhbGxlZCBmcm9tIGNvbnRleHQncyBhdWRp
byB0aHJlYWQuCi0gICAgQXVkaW9CdXMqIHB1bGwoQXVkaW9CdXMqIGluUGxhY2VCdXMsIHNpemVf
dCBmcmFtZXNUb1Byb2Nlc3MpOwotCi0gICAgLy8gYnVzKCkgd2lsbCBjb250YWluIHRoZSByZW5k
ZXJlZCBhdWRpbyBhZnRlciBwdWxsKCkgaXMgY2FsbGVkIGZvciBlYWNoIHJlbmRlcmluZyB0aW1l
IHF1YW50dW0uCi0gICAgLy8gQ2FsbGVkIGZyb20gY29udGV4dCdzIGF1ZGlvIHRocmVhZC4KLSAg
ICBBdWRpb0J1cyogYnVzKCkgY29uc3Q7Ci0KLSAgICAvLyBmYW5PdXRDb3VudCgpIGlzIHRoZSBu
dW1iZXIgb2YgQXVkaW9Ob2RlSW5wdXRzIHRoYXQgd2UncmUgY29ubmVjdGVkIHRvLgotICAgIC8v
IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgaW4gYXVkaW8gdGhyZWFkIHJlbmRl
cmluZyBjb2RlLCBpbnN0ZWFkIHJlbmRlcmluZ0Zhbk91dENvdW50KCkgc2hvdWxkIGJlIHVzZWQu
Ci0gICAgLy8gSXQgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgY29udGV4dCdzIGdyYXBoIGxvY2su
Ci0gICAgdW5zaWduZWQgZmFuT3V0Q291bnQoKTsKLQotICAgIC8vIHJlbmRlcmluZ0Zhbk91dENv
dW50KCkgaXMgdGhlIG51bWJlciBvZiBBdWRpb05vZGVJbnB1dHMgdGhhdCB3ZSdyZSBjb25uZWN0
ZWQgdG8gZHVyaW5nIHJlbmRlcmluZy4KLSAgICAvLyBVbmxpa2UgZmFuT3V0Q291bnQoKSBpdCB3
aWxsIG5vdCBjaGFuZ2UgZHVyaW5nIHRoZSBjb3Vyc2Ugb2YgYSByZW5kZXIgcXVhbnR1bS4KLSAg
ICB1bnNpZ25lZCByZW5kZXJpbmdGYW5PdXRDb3VudCgpIGNvbnN0OwotCi0gICAgLy8gSXQgbXVz
dCBiZSBjYWxsZWQgd2l0aCB0aGUgY29udGV4dCdzIGdyYXBoIGxvY2suCi0gICAgdm9pZCBkaXNj
b25uZWN0QWxsSW5wdXRzKCk7Ci0KLSAgICB2b2lkIHNldE51bWJlck9mQ2hhbm5lbHModW5zaWdu
ZWQpOwotICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMoKSBjb25zdCB7IHJldHVybiBtX251
bWJlck9mQ2hhbm5lbHM7IH0KLSAgICBib29sIGlzQ2hhbm5lbENvdW50S25vd24oKSBjb25zdCB7
IHJldHVybiBudW1iZXJPZkNoYW5uZWxzKCkgPiAwOyB9Ci0KLSAgICAvLyBEaXNhYmxlL0VuYWJs
ZSBoYXBwZW5zIHdoZW4gdGhlcmUgYXJlIHN0aWxsIEphdmFTY3JpcHQgcmVmZXJlbmNlcyB0byBh
IG5vZGUsIGJ1dCBpdCBoYXMgb3RoZXJ3aXNlICJmaW5pc2hlZCIgaXRzIHdvcmsuCi0gICAgLy8g
Rm9yIGV4YW1wbGUsIHdoZW4gYSBub3RlIGhhcyBmaW5pc2hlZCBwbGF5aW5nLiAgSXQgaXMga2Vw
dCBhcm91bmQsIGJlY2F1c2UgaXQgbWF5IGJlIHBsYXllZCBhZ2FpbiBhdCBhIGxhdGVyIHRpbWUu
Ci0gICAgLy8gVGhleSBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGggbG9j
ay4KLSAgICB2b2lkIGRpc2FibGUoKTsKLSAgICB2b2lkIGVuYWJsZSgpOwotCi0gICAgLy8gdXBk
YXRlUmVuZGVyaW5nU3RhdGUoKSBpcyBjYWxsZWQgaW4gdGhlIGF1ZGlvIHRocmVhZCBhdCB0aGUg
c3RhcnQgb3IgZW5kIG9mIHRoZSByZW5kZXIgcXVhbnR1bSB0byBoYW5kbGUgYW55IHJlY2VudCBj
aGFuZ2VzIHRvIHRoZSBncmFwaCBzdGF0ZS4KLSAgICAvLyBJdCBtdXN0IGJlIGNhbGxlZCB3aXRo
IHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jay4KLSAgICB2b2lkIHVwZGF0ZVJlbmRlcmluZ1N0YXRl
KCk7Ci0gICAgCi1wcml2YXRlOgotICAgIEF1ZGlvTm9kZSogbV9ub2RlOwotCi0gICAgZnJpZW5k
IGNsYXNzIEF1ZGlvTm9kZUlucHV0OwotICAgIAotICAgIC8vIFRoZXNlIGFyZSBjYWxsZWQgZnJv
bSBBdWRpb05vZGVJbnB1dC4KLSAgICAvLyBUaGV5IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGNv
bnRleHQncyBncmFwaCBsb2NrLgotICAgIHZvaWQgYWRkSW5wdXQoQXVkaW9Ob2RlSW5wdXQqKTsK
LSAgICB2b2lkIHJlbW92ZUlucHV0KEF1ZGlvTm9kZUlucHV0Kik7Ci0KLSAgICAvLyB1cGRhdGVJ
bnRlcm5hbEJ1cygpIHVwZGF0ZXMgbV9pbnRlcm5hbEJ1cyBhcHByb3ByaWF0ZWx5IGZvciB0aGUg
bnVtYmVyIG9mIGNoYW5uZWxzLgotICAgIC8vIEl0IGlzIGNhbGxlZCBpbiB0aGUgY29uc3RydWN0
b3Igb3IgaW4gdGhlIGF1ZGlvIHRocmVhZCB3aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jay4K
LSAgICB2b2lkIHVwZGF0ZUludGVybmFsQnVzKCk7Ci0KLSAgICAvLyBBbm5vdW5jZSB0byBhbnkg
bm9kZXMgd2UncmUgY29ubmVjdGVkIHRvIHRoYXQgd2UgY2hhbmdlZCBvdXIgY2hhbm5lbCBjb3Vu
dCBmb3IgaXRzIGlucHV0LgotICAgIC8vIEl0IG11c3QgYmUgY2FsbGVkIGluIHRoZSBhdWRpbyB0
aHJlYWQgd2l0aCB0aGUgY29udGV4dCdzIGdyYXBoIGxvY2suCi0gICAgdm9pZCBwcm9wYWdhdGVD
aGFubmVsQ291bnQoKTsKLQotICAgIC8vIHVwZGF0ZU51bWJlck9mQ2hhbm5lbHMoKSBpcyBjYWxs
ZWQgaW4gdGhlIGF1ZGlvIHRocmVhZCBhdCB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSByZW5kZXIg
cXVhbnR1bSB0byBwaWNrIHVwIGNoYW5uZWwgY2hhbmdlcy4KLSAgICAvLyBJdCBtdXN0IGJlIGNh
bGxlZCB3aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jay4KLSAgICB2b2lkIHVwZGF0ZU51bWJl
ck9mQ2hhbm5lbHMoKTsKLQotICAgIC8vIG1fbnVtYmVyT2ZDaGFubmVscyB3aWxsIG9ubHkgYmUg
Y2hhbmdlZCBpbiB0aGUgYXVkaW8gdGhyZWFkLgotICAgIC8vIFRoZSBtYWluIHRocmVhZCBzZXRz
IG1fZGVzaXJlZE51bWJlck9mQ2hhbm5lbHMgd2hpY2ggd2lsbCBsYXRlciBnZXQgcGlja2VkIHVw
IGluIHRoZSBhdWRpbyB0aHJlYWQgaW4gdXBkYXRlTnVtYmVyT2ZDaGFubmVscygpLgotICAgIHVu
c2lnbmVkIG1fbnVtYmVyT2ZDaGFubmVsczsKLSAgICB1bnNpZ25lZCBtX2Rlc2lyZWROdW1iZXJP
ZkNoYW5uZWxzOwotICAgIAotICAgIC8vIG1faW50ZXJuYWxCdXMgbXVzdCBvbmx5IGJlIGNoYW5n
ZWQgaW4gdGhlIGF1ZGlvIHRocmVhZCB3aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jayAob3Ig
Y29uc3RydWN0b3IpLgotICAgIE93blB0cjxBdWRpb0J1cz4gbV9pbnRlcm5hbEJ1czsKLQotICAg
IC8vIG1fYWN0dWFsRGVzdGluYXRpb25CdXMgaXMgc2V0IGluIHB1bGwoKSBhbmQgd2lsbCBlaXRo
ZXIgcG9pbnQgdG8gb25lIG9mIG91ciBpbnRlcm5hbCBidXNzZXMgb3IgdG8gdGhlIGluLXBsYWNl
IGJ1cy4KLSAgICAvLyBJdCBtdXN0IG9ubHkgYmUgY2hhbmdlZCBpbiB0aGUgYXVkaW8gdGhyZWFk
IChvciBjb25zdHJ1Y3RvcikuCi0gICAgQXVkaW9CdXMqIG1fYWN0dWFsRGVzdGluYXRpb25CdXM7
Ci0KLSAgICBIYXNoU2V0PEF1ZGlvTm9kZUlucHV0Kj4gbV9pbnB1dHM7Ci0gICAgdHlwZWRlZiBI
YXNoU2V0PEF1ZGlvTm9kZUlucHV0Kj46Oml0ZXJhdG9yIElucHV0c0l0ZXJhdG9yOwotICAgIGJv
b2wgbV9pc0VuYWJsZWQ7Ci0gICAgCi0gICAgLy8gRm9yIHRoZSBwdXJwb3NlcyBvZiByZW5kZXJp
bmcsIGtlZXBzIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgaW5wdXRzIHdlJ3JlIGNvbm5lY3RlZCB0
by4KLSAgICAvLyBUaGlzIHZhbHVlIHNob3VsZCBvbmx5IGJlIGNoYW5nZWQgYXQgdGhlIHZlcnkg
c3RhcnQgb3IgZW5kIG9mIHRoZSByZW5kZXJpbmcgcXVhbnR1bS4KLSAgICB1bnNpZ25lZCBtX3Jl
bmRlcmluZ0Zhbk91dENvdW50OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gQXVkaW9Ob2RlT3V0cHV0X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1
ZGlvUGFubmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9QYW5uZXJOb2RlLmNwcAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzMzAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJf
QVVESU8pCi0KLSNpbmNsdWRlICJBdWRpb1Bhbm5lck5vZGUuaCIKLQotI2luY2x1ZGUgIkF1ZGlv
QnVmZmVyU291cmNlTm9kZS5oIgotI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCi0jaW5jbHVkZSAiQXVk
aW9Db250ZXh0LmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlSW5wdXQuaCIKLSNpbmNsdWRlICJBdWRp
b05vZGVPdXRwdXQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSFJU
RlBhbm5lci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIHZvaWQgZml4TkFOcyhkb3Vi
bGUgJngpCi17Ci0gICAgaWYgKGlzbmFuKHgpIHx8IGlzaW5mKHgpKQotICAgICAgICB4ID0gMC4w
OwotfQotCi1BdWRpb1Bhbm5lck5vZGU6OkF1ZGlvUGFubmVyTm9kZShBdWRpb0NvbnRleHQqIGNv
bnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBBdWRpb05vZGUoY29udGV4dCwgc2FtcGxl
UmF0ZSkKLSAgICAsIG1fcGFubmluZ01vZGVsKFBhbm5lcjo6UGFubmluZ01vZGVsSFJURikKLSAg
ICAsIG1fbGFzdEdhaW4oLTEuMCkKLSAgICAsIG1fY29ubmVjdGlvbkNvdW50KDApCi17Ci0gICAg
YWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7Ci0gICAgYWRkT3V0
cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywgMikpKTsKLSAgICAKLSAgICBt
X2Rpc3RhbmNlR2FpbiA9IEF1ZGlvR2Fpbjo6Y3JlYXRlKCJkaXN0YW5jZUdhaW4iLCAxLjAsIDAu
MCwgMS4wKTsKLSAgICBtX2NvbmVHYWluID0gQXVkaW9HYWluOjpjcmVhdGUoImNvbmVHYWluIiwg
MS4wLCAwLjAsIDEuMCk7Ci0KLSAgICBtX3Bvc2l0aW9uID0gRmxvYXRQb2ludDNEKDAsIDAsIDAp
OwotICAgIG1fb3JpZW50YXRpb24gPSBGbG9hdFBvaW50M0QoMSwgMCwgMCk7Ci0gICAgbV92ZWxv
Y2l0eSA9IEZsb2F0UG9pbnQzRCgwLCAwLCAwKTsKLSAgICAKLSAgICBzZXROb2RlVHlwZShOb2Rl
VHlwZVBhbm5lcik7Ci0KLSAgICBpbml0aWFsaXplKCk7Ci19Ci0KLUF1ZGlvUGFubmVyTm9kZTo6
fkF1ZGlvUGFubmVyTm9kZSgpCi17Ci0gICAgdW5pbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgQXVk
aW9QYW5uZXJOb2RlOjpwdWxsSW5wdXRzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAg
Ly8gV2Ugb3ZlcnJpZGUgcHVsbElucHV0cygpLCBzbyB3ZSBjYW4gZGV0ZWN0IG5ldyBBdWRpb1Nv
dXJjZU5vZGVzIHdoaWNoIGhhdmUgY29ubmVjdGVkIHRvIHVzIHdoZW4gbmV3IGNvbm5lY3Rpb25z
IGFyZSBtYWRlLgotICAgIC8vIFRoZXNlIEF1ZGlvU291cmNlTm9kZXMgbmVlZCB0byBiZSBtYWRl
IGF3YXJlIG9mIG91ciBleGlzdGVuY2UgaW4gb3JkZXIgdG8gaGFuZGxlIGRvcHBsZXIgc2hpZnQg
cGl0Y2ggY2hhbmdlcy4KLSAgICBpZiAobV9jb25uZWN0aW9uQ291bnQgIT0gY29udGV4dCgpLT5j
b25uZWN0aW9uQ291bnQoKSkgewotICAgICAgICBtX2Nvbm5lY3Rpb25Db3VudCA9IGNvbnRleHQo
KS0+Y29ubmVjdGlvbkNvdW50KCk7Ci0KLSAgICAgICAgLy8gUmVjdXJzaXZlbHkgZ28gdGhyb3Vn
aCBhbGwgbm9kZXMgY29ubmVjdGVkIHRvIHVzLgotICAgICAgICBub3RpZnlBdWRpb1NvdXJjZXND
b25uZWN0ZWRUb05vZGUodGhpcyk7Ci0gICAgfQotICAgIAotICAgIEF1ZGlvTm9kZTo6cHVsbElu
cHV0cyhmcmFtZXNUb1Byb2Nlc3MpOwotfQotCi12b2lkIEF1ZGlvUGFubmVyTm9kZTo6cHJvY2Vz
cyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIEF1ZGlvQnVzKiBkZXN0aW5hdGlvbiA9
IG91dHB1dCgwKS0+YnVzKCk7Ci0KLSAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSB8fCAhaW5wdXQo
MCktPmlzQ29ubmVjdGVkKCkgfHwgIW1fcGFubmVyLmdldCgpKSB7Ci0gICAgICAgIGRlc3RpbmF0
aW9uLT56ZXJvKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBdWRpb0J1cyogc291
cmNlID0gaW5wdXQoMCktPmJ1cygpOwotCi0gICAgaWYgKCFzb3VyY2UpIHsKLSAgICAgICAgZGVz
dGluYXRpb24tPnplcm8oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEFwcGx5
IHRoZSBwYW5uaW5nIGVmZmVjdC4KLSAgICBkb3VibGUgYXppbXV0aDsKLSAgICBkb3VibGUgZWxl
dmF0aW9uOwotICAgIGdldEF6aW11dGhFbGV2YXRpb24oJmF6aW11dGgsICZlbGV2YXRpb24pOwot
ICAgIG1fcGFubmVyLT5wYW4oYXppbXV0aCwgZWxldmF0aW9uLCBzb3VyY2UsIGRlc3RpbmF0aW9u
LCBmcmFtZXNUb1Byb2Nlc3MpOwotCi0gICAgLy8gR2V0IHRoZSBkaXN0YW5jZSBhbmQgY29uZSBn
YWluLgotICAgIGRvdWJsZSB0b3RhbEdhaW4gPSBkaXN0YW5jZUNvbmVHYWluKCk7Ci0KLSAgICAv
LyBTbmFwIHRvIGRlc2lyZWQgZ2FpbiBhdCB0aGUgYmVnaW5uaW5nLgotICAgIGlmIChtX2xhc3RH
YWluID09IC0xLjApCi0gICAgICAgIG1fbGFzdEdhaW4gPSB0b3RhbEdhaW47Ci0gICAgICAgIAot
ICAgIC8vIEFwcGx5IGdhaW4gaW4tcGxhY2Ugd2l0aCBkZS16aXBwZXJpbmcuCi0gICAgZGVzdGlu
YXRpb24tPmNvcHlXaXRoR2FpbkZyb20oKmRlc3RpbmF0aW9uLCAmbV9sYXN0R2FpbiwgdG90YWxH
YWluKTsKLX0KLQotdm9pZCBBdWRpb1Bhbm5lck5vZGU6OnJlc2V0KCkKLXsKLSAgICBtX2xhc3RH
YWluID0gLTEuMDsgLy8gZm9yY2UgdG8gc25hcCB0byBpbml0aWFsIGdhaW4KLSAgICBpZiAobV9w
YW5uZXIuZ2V0KCkpCi0gICAgICAgIG1fcGFubmVyLT5yZXNldCgpOwotfQotCi12b2lkIEF1ZGlv
UGFubmVyTm9kZTo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgaWYgKGlzSW5pdGlhbGl6ZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBtX3Bhbm5lciA9IFBhbm5lcjo6Y3JlYXRlKG1f
cGFubmluZ01vZGVsLCBzYW1wbGVSYXRlKCkpOwotCi0gICAgQXVkaW9Ob2RlOjppbml0aWFsaXpl
KCk7Ci19Ci0KLXZvaWQgQXVkaW9QYW5uZXJOb2RlOjp1bmluaXRpYWxpemUoKQotewotICAgIGlm
ICghaXNJbml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIG1fcGFu
bmVyLmNsZWFyKCk7Ci0gICAgQXVkaW9Ob2RlOjp1bmluaXRpYWxpemUoKTsKLX0KLQotQXVkaW9M
aXN0ZW5lciogQXVkaW9QYW5uZXJOb2RlOjpsaXN0ZW5lcigpCi17Ci0gICAgcmV0dXJuIGNvbnRl
eHQoKS0+bGlzdGVuZXIoKTsKLX0KLQotdm9pZCBBdWRpb1Bhbm5lck5vZGU6OnNldFBhbm5pbmdN
b2RlbCh1bnNpZ25lZCBzaG9ydCBtb2RlbCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc3dp
dGNoIChtb2RlbCkgewotICAgIGNhc2UgRVFVQUxQT1dFUjoKLSAgICBjYXNlIEhSVEY6Ci0gICAg
ICAgIGlmICghbV9wYW5uZXIuZ2V0KCkgfHwgbW9kZWwgIT0gbV9wYW5uaW5nTW9kZWwpIHsKLSAg
ICAgICAgICAgIE93blB0cjxQYW5uZXI+IG5ld1Bhbm5lciA9IFBhbm5lcjo6Y3JlYXRlKG1vZGVs
LCBzYW1wbGVSYXRlKCkpOwotICAgICAgICAgICAgbV9wYW5uZXIgPSBuZXdQYW5uZXIucmVsZWFz
ZSgpOwotICAgICAgICAgICAgbV9wYW5uaW5nTW9kZWwgPSBtb2RlbDsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFNPVU5ERklFTEQ6Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgc291bmQgZmllbGQgbW9kZWwuIFNlZSAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzczNjcuCi0gICAgICAgIC8vIEZvciBub3csIGZhbGwgdGhyb3VnaCB0
byB0aHJvdyBhbiBleGNlcHRpb24uCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZWMgPSBOT1RfU1VQ
UE9SVEVEX0VSUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEF1ZGlvUGFubmVy
Tm9kZTo6Z2V0QXppbXV0aEVsZXZhdGlvbihkb3VibGUqIG91dEF6aW11dGgsIGRvdWJsZSogb3V0
RWxldmF0aW9uKQotewotICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgY2FjaGUgYXppbXV0aCBhbmQg
ZWxldmF0aW9uIChpZiBwb3NzaWJsZSksIHNvIHdlIG9ubHkgcmUtY2FsY3VsYXRlIGlmIGEgY2hh
bmdlIGhhcyBiZWVuIG1hZGUuCi0KLSAgICBkb3VibGUgYXppbXV0aCA9IDAuMDsKLQotICAgIC8v
IENhbGN1bGF0ZSB0aGUgc291cmNlLWxpc3RlbmVyIHZlY3RvcgotICAgIEZsb2F0UG9pbnQzRCBs
aXN0ZW5lclBvc2l0aW9uID0gbGlzdGVuZXIoKS0+cG9zaXRpb24oKTsKLSAgICBGbG9hdFBvaW50
M0Qgc291cmNlTGlzdGVuZXIgPSBtX3Bvc2l0aW9uIC0gbGlzdGVuZXJQb3NpdGlvbjsKLQotICAg
IGlmIChzb3VyY2VMaXN0ZW5lci5pc1plcm8oKSkgewotICAgICAgICAvLyBkZWdlbmVyYXRlIGNh
c2UgaWYgc291cmNlIGFuZCBsaXN0ZW5lciBhcmUgYXQgdGhlIHNhbWUgcG9pbnQKLSAgICAgICAg
Km91dEF6aW11dGggPSAwLjA7Ci0gICAgICAgICpvdXRFbGV2YXRpb24gPSAwLjA7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBzb3VyY2VMaXN0ZW5lci5ub3JtYWxpemUoKTsKLQotICAg
IC8vIEFsaWduIGF4ZXMKLSAgICBGbG9hdFBvaW50M0QgbGlzdGVuZXJGcm9udCA9IGxpc3RlbmVy
KCktPm9yaWVudGF0aW9uKCk7Ci0gICAgRmxvYXRQb2ludDNEIGxpc3RlbmVyVXAgPSBsaXN0ZW5l
cigpLT51cFZlY3RvcigpOwotICAgIEZsb2F0UG9pbnQzRCBsaXN0ZW5lclJpZ2h0ID0gbGlzdGVu
ZXJGcm9udC5jcm9zcyhsaXN0ZW5lclVwKTsKLSAgICBsaXN0ZW5lclJpZ2h0Lm5vcm1hbGl6ZSgp
OwotCi0gICAgRmxvYXRQb2ludDNEIGxpc3RlbmVyRnJvbnROb3JtID0gbGlzdGVuZXJGcm9udDsK
LSAgICBsaXN0ZW5lckZyb250Tm9ybS5ub3JtYWxpemUoKTsKLQotICAgIEZsb2F0UG9pbnQzRCB1
cCA9IGxpc3RlbmVyUmlnaHQuY3Jvc3MobGlzdGVuZXJGcm9udE5vcm0pOwotCi0gICAgZmxvYXQg
dXBQcm9qZWN0aW9uID0gc291cmNlTGlzdGVuZXIuZG90KHVwKTsKLQotICAgIEZsb2F0UG9pbnQz
RCBwcm9qZWN0ZWRTb3VyY2UgPSBzb3VyY2VMaXN0ZW5lciAtIHVwUHJvamVjdGlvbiAqIHVwOwot
ICAgIHByb2plY3RlZFNvdXJjZS5ub3JtYWxpemUoKTsKLQotICAgIGF6aW11dGggPSAxODAuMCAq
IGFjb3MocHJvamVjdGVkU291cmNlLmRvdChsaXN0ZW5lclJpZ2h0KSkgLyBwaURvdWJsZTsKLSAg
ICBmaXhOQU5zKGF6aW11dGgpOyAvLyBhdm9pZCBpbGxlZ2FsIHZhbHVlcwotCi0gICAgLy8gU291
cmNlICBpbiBmcm9udCBvciBiZWhpbmQgdGhlIGxpc3RlbmVyCi0gICAgZG91YmxlIGZyb250QmFj
ayA9IHByb2plY3RlZFNvdXJjZS5kb3QobGlzdGVuZXJGcm9udE5vcm0pOwotICAgIGlmIChmcm9u
dEJhY2sgPCAwLjApCi0gICAgICAgIGF6aW11dGggPSAzNjAuMCAtIGF6aW11dGg7Ci0KLSAgICAv
LyBNYWtlIGF6aW11dGggcmVsYXRpdmUgdG8gImZyb250IiBhbmQgbm90ICJyaWdodCIgbGlzdGVu
ZXIgdmVjdG9yCi0gICAgaWYgKChhemltdXRoID49IDAuMCkgJiYgKGF6aW11dGggPD0gMjcwLjAp
KQotICAgICAgICBhemltdXRoID0gOTAuMCAtIGF6aW11dGg7Ci0gICAgZWxzZQotICAgICAgICBh
emltdXRoID0gNDUwLjAgLSBhemltdXRoOwotCi0gICAgLy8gRWxldmF0aW9uCi0gICAgZG91Ymxl
IGVsZXZhdGlvbiA9IDkwLjAgLSAxODAuMCAqIGFjb3Moc291cmNlTGlzdGVuZXIuZG90KHVwKSkg
LyBwaURvdWJsZTsKLSAgICBmaXhOQU5zKGVsZXZhdGlvbik7IC8vIGF2b2lkIGlsbGVnYWwgdmFs
dWVzCi0KLSAgICBpZiAoZWxldmF0aW9uID4gOTAuMCkKLSAgICAgICAgZWxldmF0aW9uID0gMTgw
LjAgLSBlbGV2YXRpb247Ci0gICAgZWxzZSBpZiAoZWxldmF0aW9uIDwgLTkwLjApCi0gICAgICAg
IGVsZXZhdGlvbiA9IC0xODAuMCAtIGVsZXZhdGlvbjsKLQotICAgIGlmIChvdXRBemltdXRoKQot
ICAgICAgICAqb3V0QXppbXV0aCA9IGF6aW11dGg7Ci0gICAgaWYgKG91dEVsZXZhdGlvbikKLSAg
ICAgICAgKm91dEVsZXZhdGlvbiA9IGVsZXZhdGlvbjsKLX0KLQotZmxvYXQgQXVkaW9QYW5uZXJO
b2RlOjpkb3BwbGVyUmF0ZSgpCi17Ci0gICAgZG91YmxlIGRvcHBsZXJTaGlmdCA9IDEuMDsKLQot
ICAgIC8vIEZJWE1FOiBvcHRpbWl6ZSBmb3IgY2FzZSB3aGVuIG5laXRoZXIgc291cmNlIG5vciBs
aXN0ZW5lciBoYXMgY2hhbmdlZC4uLgotICAgIGRvdWJsZSBkb3BwbGVyRmFjdG9yID0gbGlzdGVu
ZXIoKS0+ZG9wcGxlckZhY3RvcigpOwotCi0gICAgaWYgKGRvcHBsZXJGYWN0b3IgPiAwLjApIHsK
LSAgICAgICAgZG91YmxlIHNwZWVkT2ZTb3VuZCA9IGxpc3RlbmVyKCktPnNwZWVkT2ZTb3VuZCgp
OwotCi0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQzRCAmc291cmNlVmVsb2NpdHkgPSBtX3ZlbG9j
aXR5OwotICAgICAgICBjb25zdCBGbG9hdFBvaW50M0QgJmxpc3RlbmVyVmVsb2NpdHkgPSBsaXN0
ZW5lcigpLT52ZWxvY2l0eSgpOwotCi0gICAgICAgIC8vIERvbid0IGJvdGhlciBpZiBib3RoIHNv
dXJjZSBhbmQgbGlzdGVuZXIgaGF2ZSBubyB2ZWxvY2l0eQotICAgICAgICBib29sIHNvdXJjZUhh
c1ZlbG9jaXR5ID0gIXNvdXJjZVZlbG9jaXR5LmlzWmVybygpOwotICAgICAgICBib29sIGxpc3Rl
bmVySGFzVmVsb2NpdHkgPSAhbGlzdGVuZXJWZWxvY2l0eS5pc1plcm8oKTsKLQotICAgICAgICBp
ZiAoc291cmNlSGFzVmVsb2NpdHkgfHwgbGlzdGVuZXJIYXNWZWxvY2l0eSkgewotICAgICAgICAg
ICAgLy8gQ2FsY3VsYXRlIHRoZSBzb3VyY2UgdG8gbGlzdGVuZXIgdmVjdG9yCi0gICAgICAgICAg
ICBGbG9hdFBvaW50M0QgbGlzdGVuZXJQb3NpdGlvbiA9IGxpc3RlbmVyKCktPnBvc2l0aW9uKCk7
Ci0gICAgICAgICAgICBGbG9hdFBvaW50M0Qgc291cmNlVG9MaXN0ZW5lciA9IG1fcG9zaXRpb24g
LSBsaXN0ZW5lclBvc2l0aW9uOwotCi0gICAgICAgICAgICBkb3VibGUgc291cmNlTGlzdGVuZXJN
YWduaXR1ZGUgPSBzb3VyY2VUb0xpc3RlbmVyLmxlbmd0aCgpOwotCi0gICAgICAgICAgICBkb3Vi
bGUgbGlzdGVuZXJQcm9qZWN0aW9uID0gc291cmNlVG9MaXN0ZW5lci5kb3QobGlzdGVuZXJWZWxv
Y2l0eSkgLyBzb3VyY2VMaXN0ZW5lck1hZ25pdHVkZTsKLSAgICAgICAgICAgIGRvdWJsZSBzb3Vy
Y2VQcm9qZWN0aW9uID0gc291cmNlVG9MaXN0ZW5lci5kb3Qoc291cmNlVmVsb2NpdHkpIC8gc291
cmNlTGlzdGVuZXJNYWduaXR1ZGU7Ci0KLSAgICAgICAgICAgIGxpc3RlbmVyUHJvamVjdGlvbiA9
IC1saXN0ZW5lclByb2plY3Rpb247Ci0gICAgICAgICAgICBzb3VyY2VQcm9qZWN0aW9uID0gLXNv
dXJjZVByb2plY3Rpb247Ci0KLSAgICAgICAgICAgIGRvdWJsZSBzY2FsZWRTcGVlZE9mU291bmQg
PSBzcGVlZE9mU291bmQgLyBkb3BwbGVyRmFjdG9yOwotICAgICAgICAgICAgbGlzdGVuZXJQcm9q
ZWN0aW9uID0gbWluKGxpc3RlbmVyUHJvamVjdGlvbiwgc2NhbGVkU3BlZWRPZlNvdW5kKTsKLSAg
ICAgICAgICAgIHNvdXJjZVByb2plY3Rpb24gPSBtaW4oc291cmNlUHJvamVjdGlvbiwgc2NhbGVk
U3BlZWRPZlNvdW5kKTsKLQotICAgICAgICAgICAgZG9wcGxlclNoaWZ0ID0gKChzcGVlZE9mU291
bmQgLSBkb3BwbGVyRmFjdG9yICogbGlzdGVuZXJQcm9qZWN0aW9uKSAvIChzcGVlZE9mU291bmQg
LSBkb3BwbGVyRmFjdG9yICogc291cmNlUHJvamVjdGlvbikpOwotICAgICAgICAgICAgZml4TkFO
cyhkb3BwbGVyU2hpZnQpOyAvLyBhdm9pZCBpbGxlZ2FsIHZhbHVlcwotCi0gICAgICAgICAgICAv
LyBMaW1pdCB0aGUgcGl0Y2ggc2hpZnRpbmcgdG8gNCBvY3RhdmVzIHVwIGFuZCAzIG9jdGF2ZXMg
ZG93bi4KLSAgICAgICAgICAgIGlmIChkb3BwbGVyU2hpZnQgPiAxNi4wKQotICAgICAgICAgICAg
ICAgIGRvcHBsZXJTaGlmdCA9IDE2LjA7Ci0gICAgICAgICAgICBlbHNlIGlmIChkb3BwbGVyU2hp
ZnQgPCAwLjEyNSkKLSAgICAgICAgICAgICAgICBkb3BwbGVyU2hpZnQgPSAwLjEyNTsgICAKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oZG9wcGxlclNo
aWZ0KTsKLX0KLQotZmxvYXQgQXVkaW9QYW5uZXJOb2RlOjpkaXN0YW5jZUNvbmVHYWluKCkKLXsK
LSAgICBGbG9hdFBvaW50M0QgbGlzdGVuZXJQb3NpdGlvbiA9IGxpc3RlbmVyKCktPnBvc2l0aW9u
KCk7Ci0KLSAgICBkb3VibGUgbGlzdGVuZXJEaXN0YW5jZSA9IG1fcG9zaXRpb24uZGlzdGFuY2VU
byhsaXN0ZW5lclBvc2l0aW9uKTsKLSAgICBkb3VibGUgZGlzdGFuY2VHYWluID0gbV9kaXN0YW5j
ZUVmZmVjdC5nYWluKGxpc3RlbmVyRGlzdGFuY2UpOwotICAgIAotICAgIG1fZGlzdGFuY2VHYWlu
LT5zZXRWYWx1ZShzdGF0aWNfY2FzdDxmbG9hdD4oZGlzdGFuY2VHYWluKSk7Ci0KLSAgICAvLyBG
SVhNRTogY291bGQgb3B0aW1pemUgYnkgY2FjaGluZyBjb25lR2FpbgotICAgIGRvdWJsZSBjb25l
R2FpbiA9IG1fY29uZUVmZmVjdC5nYWluKG1fcG9zaXRpb24sIG1fb3JpZW50YXRpb24sIGxpc3Rl
bmVyUG9zaXRpb24pOwotICAgIAotICAgIG1fY29uZUdhaW4tPnNldFZhbHVlKHN0YXRpY19jYXN0
PGZsb2F0Pihjb25lR2FpbikpOwotCi0gICAgcmV0dXJuIGZsb2F0KGRpc3RhbmNlR2FpbiAqIGNv
bmVHYWluKTsKLX0KLQotdm9pZCBBdWRpb1Bhbm5lck5vZGU6Om5vdGlmeUF1ZGlvU291cmNlc0Nv
bm5lY3RlZFRvTm9kZShBdWRpb05vZGUqIG5vZGUpCi17Ci0gICAgQVNTRVJUKG5vZGUpOwotICAg
IGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAvLyBGaXJzdCBjaGVj
ayBpZiB0aGlzIG5vZGUgaXMgYW4gQXVkaW9CdWZmZXJTb3VyY2VOb2RlLiAgSWYgc28sIGxldCBp
dCBrbm93IGFib3V0IHVzIHNvIHRoYXQgZG9wcGxlciBzaGlmdCBwaXRjaCBjYW4gYmUgdGFrZW4g
aW50byBhY2NvdW50LgotICAgIGlmIChub2RlLT5ub2RlVHlwZSgpID09IE5vZGVUeXBlQXVkaW9C
dWZmZXJTb3VyY2UpIHsKLSAgICAgICAgQXVkaW9CdWZmZXJTb3VyY2VOb2RlKiBidWZmZXJTb3Vy
Y2VOb2RlID0gcmVpbnRlcnByZXRfY2FzdDxBdWRpb0J1ZmZlclNvdXJjZU5vZGUqPihub2RlKTsK
LSAgICAgICAgYnVmZmVyU291cmNlTm9kZS0+c2V0UGFubmVyTm9kZSh0aGlzKTsKLSAgICB9IGVs
c2UgeyAgICAKLSAgICAgICAgLy8gR28gdGhyb3VnaCBhbGwgaW5wdXRzIHRvIHRoaXMgbm9kZS4K
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGUtPm51bWJlck9mSW5wdXRzKCk7
ICsraSkgewotICAgICAgICAgICAgQXVkaW9Ob2RlSW5wdXQqIGlucHV0ID0gbm9kZS0+aW5wdXQo
aSk7Ci0KLSAgICAgICAgICAgIC8vIEZvciBlYWNoIGlucHV0LCBnbyB0aHJvdWdoIGFsbCBvZiBp
dHMgY29ubmVjdGlvbnMsIGxvb2tpbmcgZm9yIEF1ZGlvQnVmZmVyU291cmNlTm9kZXMuCi0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgaW5wdXQtPm51bWJlck9mUmVuZGVyaW5n
Q29ubmVjdGlvbnMoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgQXVkaW9Ob2RlT3V0cHV0KiBj
b25uZWN0ZWRPdXRwdXQgPSBpbnB1dC0+cmVuZGVyaW5nT3V0cHV0KGopOwotICAgICAgICAgICAg
ICAgIEF1ZGlvTm9kZSogY29ubmVjdGVkTm9kZSA9IGNvbm5lY3RlZE91dHB1dC0+bm9kZSgpOwot
ICAgICAgICAgICAgICAgIG5vdGlmeUF1ZGlvU291cmNlc0Nvbm5lY3RlZFRvTm9kZShjb25uZWN0
ZWROb2RlKTsgLy8gcmVjdXJzZQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmgJKHJldmlzaW9u
IDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDE1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBdWRp
b1Bhbm5lck5vZGVfaAotI2RlZmluZSBBdWRpb1Bhbm5lck5vZGVfaAotCi0jaW5jbHVkZSAiQXVk
aW9CdXMuaCIKLSNpbmNsdWRlICJBdWRpb0dhaW4uaCIKLSNpbmNsdWRlICJBdWRpb0xpc3RlbmVy
LmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCi0jaW5jbHVkZSAiQ29uZS5oIgotI2luY2x1ZGUg
IkRpc3RhbmNlLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCi0jaW5jbHVkZSAiUGFubmVy
LmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8v
IEF1ZGlvUGFubmVyTm9kZSBpcyBhbiBBdWRpb05vZGUgd2l0aCBvbmUgaW5wdXQgYW5kIG9uZSBv
dXRwdXQuCi0vLyBJdCBwb3NpdGlvbnMgYSBzb3VuZCBpbiAzRCBzcGFjZSwgd2l0aCB0aGUgZXhh
Y3QgZWZmZWN0IGRlcGVuZGVudCBvbiB0aGUgcGFubmluZyBtb2RlbC4KLS8vIEl0IGhhcyBhIHBv
c2l0aW9uIGFuZCBhbiBvcmllbnRhdGlvbiBpbiAzRCBzcGFjZSB3aGljaCBpcyByZWxhdGl2ZSB0
byB0aGUgcG9zaXRpb24gYW5kIG9yaWVudGF0aW9uIG9mIHRoZSBjb250ZXh0J3MgQXVkaW9MaXN0
ZW5lci4KLS8vIEEgZGlzdGFuY2UgZWZmZWN0IHdpbGwgYXR0ZW51YXRlIHRoZSBnYWluIGFzIHRo
ZSBwb3NpdGlvbiBtb3ZlcyBhd2F5IGZyb20gdGhlIGxpc3RlbmVyLgotLy8gQSBjb25lIGVmZmVj
dCB3aWxsIGF0dGVudWF0ZSB0aGUgZ2FpbiBhcyB0aGUgb3JpZW50YXRpb24gbW92ZXMgYXdheSBm
cm9tIHRoZSBsaXN0ZW5lci4KLS8vIEFsbCBvZiB0aGVzZSBlZmZlY3RzIGZvbGxvdyB0aGUgT3Bl
bkFMIHNwZWNpZmljYXRpb24gdmVyeSBjbG9zZWx5LgotCi1jbGFzcyBBdWRpb1Bhbm5lck5vZGUg
OiBwdWJsaWMgQXVkaW9Ob2RlIHsKLXB1YmxpYzoKLSAgICAvLyBUaGVzZSBtdXN0IGJlIGRlZmlu
ZWQgYXMgaW4gdGhlIC5pZGwgZmlsZSBhbmQgbXVzdCBtYXRjaCB0aG9zZSBpbiB0aGUgUGFubmVy
IGNsYXNzLgotICAgIGVudW0gewotICAgICAgICBFUVVBTFBPV0VSID0gMCwKLSAgICAgICAgSFJU
RiA9IDEsCi0gICAgICAgIFNPVU5ERklFTEQgPSAyLAotICAgIH07Ci0KLSAgICAvLyBUaGVzZSBt
dXN0IGJlIGRlZmluZWQgYXMgaW4gdGhlIC5pZGwgZmlsZSBhbmQgbXVzdCBtYXRjaCB0aG9zZQot
ICAgIC8vIGluIHRoZSBEaXN0YW5jZUVmZmVjdCBjbGFzcy4KLSAgICBlbnVtIHsKLSAgICAgICAg
TElORUFSX0RJU1RBTkNFID0gMCwKLSAgICAgICAgSU5WRVJTRV9ESVNUQU5DRSA9IDEsCi0gICAg
ICAgIEVYUE9ORU5USUFMX0RJU1RBTkNFID0gMiwKLSAgICB9OwotICAgIAotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEF1ZGlvUGFubmVyTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCogY29udGV4dCwg
ZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVk
aW9QYW5uZXJOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IH5BdWRpb1Bhbm5lck5vZGUoKTsKLQotICAgIC8vIEF1ZGlvTm9kZQotICAgIHZpcnR1YWwgdm9p
ZCBwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgIHZpcnR1YWwgdm9pZCBwdWxs
SW5wdXRzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgIHZpcnR1YWwgdm9pZCByZXNldCgp
OwotICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVuaW5p
dGlhbGl6ZSgpOwotCi0gICAgLy8gTGlzdGVuZXIKLSAgICBBdWRpb0xpc3RlbmVyKiBsaXN0ZW5l
cigpOwotCi0gICAgLy8gUGFubmluZyBtb2RlbAotICAgIHVuc2lnbmVkIHNob3J0IHBhbm5pbmdN
b2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFubmluZ01vZGVsOyB9Ci0gICAgdm9pZCBzZXRQYW5u
aW5nTW9kZWwodW5zaWduZWQgc2hvcnQsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIC8vIFBvc2l0
aW9uCi0gICAgRmxvYXRQb2ludDNEIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlv
bjsgfQotICAgIHZvaWQgc2V0UG9zaXRpb24oZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikgeyBt
X3Bvc2l0aW9uID0gRmxvYXRQb2ludDNEKHgsIHksIHopOyB9Ci0KLSAgICAvLyBPcmllbnRhdGlv
bgotICAgIEZsb2F0UG9pbnQzRCBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRp
b247IH0KLSAgICB2b2lkIHNldE9yaWVudGF0aW9uKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHop
IHsgbV9vcmllbnRhdGlvbiA9IEZsb2F0UG9pbnQzRCh4LCB5LCB6KTsgfQotCi0gICAgLy8gVmVs
b2NpdHkKLSAgICBGbG9hdFBvaW50M0QgdmVsb2NpdHkoKSBjb25zdCB7IHJldHVybiBtX3ZlbG9j
aXR5OyB9Ci0gICAgdm9pZCBzZXRWZWxvY2l0eShmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7
IG1fdmVsb2NpdHkgPSBGbG9hdFBvaW50M0QoeCwgeSwgeik7IH0KLQotICAgIC8vIERpc3RhbmNl
IHBhcmFtZXRlcnMKLSAgICB1bnNpZ25lZCBzaG9ydCBkaXN0YW5jZU1vZGVsKCkgeyByZXR1cm4g
bV9kaXN0YW5jZUVmZmVjdC5tb2RlbCgpOyB9Ci0gICAgdm9pZCBzZXREaXN0YW5jZU1vZGVsKHVu
c2lnbmVkIHNob3J0IG1vZGVsKSB7IG1fZGlzdGFuY2VFZmZlY3Quc2V0TW9kZWwoc3RhdGljX2Nh
c3Q8RGlzdGFuY2VFZmZlY3Q6Ok1vZGVsVHlwZT4obW9kZWwpLCB0cnVlKTsgfQotICAgIAotICAg
IGZsb2F0IHJlZkRpc3RhbmNlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fZGlzdGFu
Y2VFZmZlY3QucmVmRGlzdGFuY2UoKSk7IH0KLSAgICB2b2lkIHNldFJlZkRpc3RhbmNlKGZsb2F0
IHJlZkRpc3RhbmNlKSB7IG1fZGlzdGFuY2VFZmZlY3Quc2V0UmVmRGlzdGFuY2UocmVmRGlzdGFu
Y2UpOyB9Ci0KLSAgICBmbG9hdCBtYXhEaXN0YW5jZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGZs
b2F0PihtX2Rpc3RhbmNlRWZmZWN0Lm1heERpc3RhbmNlKCkpOyB9Ci0gICAgdm9pZCBzZXRNYXhE
aXN0YW5jZShmbG9hdCBtYXhEaXN0YW5jZSkgeyBtX2Rpc3RhbmNlRWZmZWN0LnNldE1heERpc3Rh
bmNlKG1heERpc3RhbmNlKTsgfQotCi0gICAgZmxvYXQgcm9sbG9mZkZhY3RvcigpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PGZsb2F0PihtX2Rpc3RhbmNlRWZmZWN0LnJvbGxvZmZGYWN0b3IoKSk7IH0K
LSAgICB2b2lkIHNldFJvbGxvZmZGYWN0b3IoZmxvYXQgcm9sbG9mZkZhY3RvcikgeyBtX2Rpc3Rh
bmNlRWZmZWN0LnNldFJvbGxvZmZGYWN0b3Iocm9sbG9mZkZhY3Rvcik7IH0KLQotICAgIC8vIFNv
dW5kIGNvbmVzIC0gYW5nbGVzIGluIGRlZ3JlZXMKLSAgICBmbG9hdCBjb25lSW5uZXJBbmdsZSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX2NvbmVFZmZlY3QuaW5uZXJBbmds
ZSgpKTsgfQotICAgIHZvaWQgc2V0Q29uZUlubmVyQW5nbGUoZmxvYXQgYW5nbGUpIHsgbV9jb25l
RWZmZWN0LnNldElubmVyQW5nbGUoYW5nbGUpOyB9Ci0KLSAgICBmbG9hdCBjb25lT3V0ZXJBbmds
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX2NvbmVFZmZlY3Qub3V0ZXJB
bmdsZSgpKTsgfQotICAgIHZvaWQgc2V0Q29uZU91dGVyQW5nbGUoZmxvYXQgYW5nbGUpIHsgbV9j
b25lRWZmZWN0LnNldE91dGVyQW5nbGUoYW5nbGUpOyB9Ci0KLSAgICBmbG9hdCBjb25lT3V0ZXJH
YWluKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fY29uZUVmZmVjdC5vdXRl
ckdhaW4oKSk7IH0KLSAgICB2b2lkIHNldENvbmVPdXRlckdhaW4oZmxvYXQgYW5nbGUpIHsgbV9j
b25lRWZmZWN0LnNldE91dGVyR2FpbihhbmdsZSk7IH0KLQotICAgIHZvaWQgZ2V0QXppbXV0aEVs
ZXZhdGlvbihkb3VibGUqIG91dEF6aW11dGgsIGRvdWJsZSogb3V0RWxldmF0aW9uKTsKLSAgICBm
bG9hdCBkb3BwbGVyUmF0ZSgpOwotCi0gICAgLy8gQWNjZXNzb3JzIGZvciBkeW5hbWljYWxseSBj
YWxjdWxhdGVkIGdhaW4gdmFsdWVzLgotICAgIEF1ZGlvR2FpbiogZGlzdGFuY2VHYWluKCkgeyBy
ZXR1cm4gbV9kaXN0YW5jZUdhaW4uZ2V0KCk7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgQXVkaW9HYWluKiBjb25lR2FpbigpIHsgcmV0dXJuIG1fY29uZUdh
aW4uZ2V0KCk7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLSAg
ICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcGFu
bmVyID8gbV9wYW5uZXItPnRhaWxUaW1lKCkgOiAwOyB9Ci0gICAgdmlydHVhbCBkb3VibGUgbGF0
ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3Bhbm5lciA/IG1fcGFubmVyLT5s
YXRlbmN5VGltZSgpIDogMDsgfQotCi1wcml2YXRlOgotICAgIEF1ZGlvUGFubmVyTm9kZShBdWRp
b0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKLQotICAgIC8vIFJldHVybnMgdGhlIGNvbWJp
bmVkIGRpc3RhbmNlIGFuZCBjb25lIGdhaW4gYXR0ZW51YXRpb24uCi0gICAgZmxvYXQgZGlzdGFu
Y2VDb25lR2FpbigpOwotCi0gICAgLy8gTm90aWZpZXMgYW55IEF1ZGlvQnVmZmVyU291cmNlTm9k
ZXMgY29ubmVjdGVkIHRvIHVzIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGFib3V0IG91
ciBleGlzdGVuY2UuCi0gICAgLy8gVGhpcyBpcyBpbiBvcmRlciB0byBoYW5kbGUgdGhlIHBpdGNo
IGNoYW5nZSBuZWNlc3NhcnkgZm9yIHRoZSBkb3BwbGVyIHNoaWZ0LgotICAgIHZvaWQgbm90aWZ5
QXVkaW9Tb3VyY2VzQ29ubmVjdGVkVG9Ob2RlKEF1ZGlvTm9kZSopOwotCi0gICAgT3duUHRyPFBh
bm5lcj4gbV9wYW5uZXI7Ci0gICAgdW5zaWduZWQgbV9wYW5uaW5nTW9kZWw7Ci0KLSAgICBGbG9h
dFBvaW50M0QgbV9wb3NpdGlvbjsKLSAgICBGbG9hdFBvaW50M0QgbV9vcmllbnRhdGlvbjsKLSAg
ICBGbG9hdFBvaW50M0QgbV92ZWxvY2l0eTsKLQotICAgIC8vIEdhaW4KLSAgICBSZWZQdHI8QXVk
aW9HYWluPiBtX2Rpc3RhbmNlR2FpbjsKLSAgICBSZWZQdHI8QXVkaW9HYWluPiBtX2NvbmVHYWlu
OwotICAgIERpc3RhbmNlRWZmZWN0IG1fZGlzdGFuY2VFZmZlY3Q7Ci0gICAgQ29uZUVmZmVjdCBt
X2NvbmVFZmZlY3Q7Ci0gICAgZmxvYXQgbV9sYXN0R2FpbjsKLQotICAgIHVuc2lnbmVkIG1fY29u
bmVjdGlvbkNvdW50OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
QXVkaW9QYW5uZXJOb2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFu
bmVyTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Q
YW5uZXJOb2RlLmlkbAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9QYW5uZXJOb2RlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw2NSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotbW9kdWxlIGF1ZGlvIHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25k
aXRpb25hbD1XRUJfQVVESU8sCi0gICAgICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0Ci0gICAgXSBB
dWRpb1Bhbm5lck5vZGUgOiBBdWRpb05vZGUgewotICAgICAgICAvLyBQYW5uaW5nIG1vZGVsCi0g
ICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEVRVUFMUE9XRVIgPSAwOwotICAgICAgICBjb25z
dCB1bnNpZ25lZCBzaG9ydCBIUlRGID0gMTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
U09VTkRGSUVMRCA9IDI7Ci0KLSAgICAgICAgLy8gRGlzdGFuY2UgbW9kZWwKLSAgICAgICAgY29u
c3QgdW5zaWduZWQgc2hvcnQgTElORUFSX0RJU1RBTkNFID0gMDsKLSAgICAgICAgY29uc3QgdW5z
aWduZWQgc2hvcnQgSU5WRVJTRV9ESVNUQU5DRSA9IDE7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVk
IHNob3J0IEVYUE9ORU5USUFMX0RJU1RBTkNFID0gMjsKLQotICAgICAgICAvLyBEZWZhdWx0IG1v
ZGVsIGZvciBzdGVyZW8gaXMgSFJURiAKLSAgICAgICAgLy8gRklYTUU6IHVzZSB1bnNpZ25lZCBz
aG9ydCB3aGVuIGdsdWUgZ2VuZXJhdGlvbiBzdXBwb3J0cyBpdAotICAgICAgICBhdHRyaWJ1dGUg
dW5zaWduZWQgbG9uZyBwYW5uaW5nTW9kZWwKLSAgICAgICAgICAgIHNldHRlciByYWlzZXMoRE9N
RXhjZXB0aW9uKTsKLQotICAgICAgICAvLyBVc2VzIGEgM0QgY2FydGVzaWFuIGNvb3JkaW5hdGUg
c3lzdGVtIAotICAgICAgICB2b2lkIHNldFBvc2l0aW9uKGluIGZsb2F0IHgsIGluIGZsb2F0IHks
IGluIGZsb2F0IHopOwotICAgICAgICB2b2lkIHNldE9yaWVudGF0aW9uKGluIGZsb2F0IHgsIGlu
IGZsb2F0IHksIGluIGZsb2F0IHopOwotICAgICAgICB2b2lkIHNldFZlbG9jaXR5KGluIGZsb2F0
IHgsIGluIGZsb2F0IHksIGluIGZsb2F0IHopOwotCi0gICAgICAgIC8vIERpc3RhbmNlIG1vZGVs
Ci0gICAgICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGRpc3RhbmNlTW9kZWw7IC8vIEZJWE1F
OiB1c2UgdW5zaWduZWQgc2hvcnQgd2hlbiBnbHVlIGdlbmVyYXRpb24gc3VwcG9ydHMgaXQKLSAg
ICAgICAgYXR0cmlidXRlIGZsb2F0IHJlZkRpc3RhbmNlOwotICAgICAgICBhdHRyaWJ1dGUgZmxv
YXQgbWF4RGlzdGFuY2U7Ci0gICAgICAgIGF0dHJpYnV0ZSBmbG9hdCByb2xsb2ZmRmFjdG9yOwot
Ci0gICAgICAgIC8vIERpcmVjdGlvbmFsIHNvdW5kIGNvbmUKLSAgICAgICAgYXR0cmlidXRlIGZs
b2F0IGNvbmVJbm5lckFuZ2xlOwotICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgY29uZU91dGVyQW5n
bGU7Ci0gICAgICAgIGF0dHJpYnV0ZSBmbG9hdCBjb25lT3V0ZXJHYWluOwotCi0gICAgICAgIC8v
IER5bmFtaWNhbGx5IGNhbGN1bGF0ZWQgZ2FpbiB2YWx1ZXMgICAgICAgICAgCi0gICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBBdWRpb0dhaW4gY29uZUdhaW47Ci0gICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBBdWRpb0dhaW4gZGlzdGFuY2VHYWluOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9BdWRpb1BhcmFtLmNwcAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTE2
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FV
RElPKQotCi0jaW5jbHVkZSAiQXVkaW9QYXJhbS5oIgotCi0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgi
Ci0jaW5jbHVkZSAiQXVkaW9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24u
aCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNvbnN0IGRvdWJsZSBBdWRpb1BhcmFtOjpEZWZhdWx0U21vb3RoaW5nQ29uc3RhbnQgPSAwLjA1
OwotY29uc3QgZG91YmxlIEF1ZGlvUGFyYW06OlNuYXBUaHJlc2hvbGQgPSAwLjAwMTsKLQotZmxv
YXQgQXVkaW9QYXJhbTo6dmFsdWUoKQotewotICAgIC8vIFVwZGF0ZSB2YWx1ZSBmb3IgdGltZWxp
bmUuCi0gICAgaWYgKGNvbnRleHQoKSAmJiBjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSkgewot
ICAgICAgICBib29sIGhhc1ZhbHVlOwotICAgICAgICBmbG9hdCB0aW1lbGluZVZhbHVlID0gbV90
aW1lbGluZS52YWx1ZUZvckNvbnRleHRUaW1lKGNvbnRleHQoKSwgbmFycm93UHJlY2lzaW9uVG9G
bG9hdChtX3ZhbHVlKSwgaGFzVmFsdWUpOwotCi0gICAgICAgIGlmIChoYXNWYWx1ZSkKLSAgICAg
ICAgICAgIG1fdmFsdWUgPSB0aW1lbGluZVZhbHVlOwotICAgIH0KLQotICAgIHJldHVybiBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KG1fdmFsdWUpOwotfQotCi12b2lkIEF1ZGlvUGFyYW06OnNldFZh
bHVlKGZsb2F0IHZhbHVlKQotewotICAgIC8vIENoZWNrIGFnYWluc3QgSmF2YVNjcmlwdCBnaXZp
bmcgdXMgYm9ndXMgZmxvYXRpbmctcG9pbnQgdmFsdWVzLgotICAgIC8vIERvbid0IEFTU0VSVCwg
c2luY2UgdGhpcyBjYW4gaGFwcGVuIGlmIHNvbWVib2R5IHdyaXRlcyBiYWQgSlMuCi0gICAgaWYg
KCFpc25hbih2YWx1ZSkgJiYgIWlzaW5mKHZhbHVlKSkKLSAgICAgICAgbV92YWx1ZSA9IHZhbHVl
OwotfQotCi1mbG9hdCBBdWRpb1BhcmFtOjpzbW9vdGhlZFZhbHVlKCkKLXsKLSAgICByZXR1cm4g
bmFycm93UHJlY2lzaW9uVG9GbG9hdChtX3Ntb290aGVkVmFsdWUpOwotfQotCi1ib29sIEF1ZGlv
UGFyYW06OnNtb290aCgpCi17Ci0gICAgLy8gSWYgdmFsdWVzIGhhdmUgYmVlbiBleHBsaWNpdGx5
IHNjaGVkdWxlZCBvbiB0aGUgdGltZWxpbmUsIHRoZW4gdXNlIHRoZSBleGFjdCB2YWx1ZS4KLSAg
ICAvLyBTbW9vdGhpbmcgZWZmZWN0aXZlbHkgaXMgcGVyZm9ybWVkIGJ5IHRoZSB0aW1lbGluZS4K
LSAgICBib29sIHVzZVRpbWVsaW5lVmFsdWUgPSBmYWxzZTsKLSAgICBpZiAoY29udGV4dCgpKQot
ICAgICAgICBtX3ZhbHVlID0gbV90aW1lbGluZS52YWx1ZUZvckNvbnRleHRUaW1lKGNvbnRleHQo
KSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChtX3ZhbHVlKSwgdXNlVGltZWxpbmVWYWx1ZSk7Ci0g
ICAgCi0gICAgaWYgKG1fc21vb3RoZWRWYWx1ZSA9PSBtX3ZhbHVlKSB7Ci0gICAgICAgIC8vIFNt
b290aGVkIHZhbHVlIGhhcyBhbHJlYWR5IGFwcHJvYWNoZWQgYW5kIHNuYXBwZWQgdG8gdmFsdWUu
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAodXNlVGltZWxpbmVW
YWx1ZSkKLSAgICAgICAgbV9zbW9vdGhlZFZhbHVlID0gbV92YWx1ZTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgLy8gRGV6aXBwZXIgLSBleHBvbmVudGlhbCBhcHByb2FjaC4KLSAgICAgICAgbV9zbW9v
dGhlZFZhbHVlICs9IChtX3ZhbHVlIC0gbV9zbW9vdGhlZFZhbHVlKSAqIG1fc21vb3RoaW5nQ29u
c3RhbnQ7Ci0KLSAgICAgICAgLy8gSWYgd2UgZ2V0IGNsb3NlIGVub3VnaCB0aGVuIHNuYXAgdG8g
YWN0dWFsIHZhbHVlLgotICAgICAgICBpZiAoZmFicyhtX3Ntb290aGVkVmFsdWUgLSBtX3ZhbHVl
KSA8IFNuYXBUaHJlc2hvbGQpIC8vIEZJWE1FOiB0aGUgdGhyZXNob2xkIG5lZWRzIHRvIGJlIGFk
anVzdGFibGUgZGVwZW5kaW5nIG9uIHJhbmdlIC0gYnV0IHRoaXMgaXMgT0sgZ2VuZXJhbCBwdXJw
b3NlIHZhbHVlLgotICAgICAgICAgICAgbV9zbW9vdGhlZFZhbHVlID0gbV92YWx1ZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQXVkaW9QYXJhbTo6Y2FsY3VsYXRlU2Ft
cGxlQWNjdXJhdGVWYWx1ZXMoZmxvYXQqIHZhbHVlcywgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMp
Ci17Ci0gICAgYm9vbCBpc1NhZmUgPSBjb250ZXh0KCkgJiYgY29udGV4dCgpLT5pc0F1ZGlvVGhy
ZWFkKCkgJiYgdmFsdWVzOwotICAgIEFTU0VSVChpc1NhZmUpOwotICAgIGlmICghaXNTYWZlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDYWxjdWxhdGUgdmFsdWVzIGZvciB0aGlzIHJlbmRl
ciBxdWFudHVtLgotICAgIC8vIE5vcm1hbGx5IG51bWJlck9mVmFsdWVzIHdpbGwgZXF1YWwgQXVk
aW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVzICh0aGUgcmVuZGVyIHF1YW50dW0gc2l6ZSku
Ci0gICAgZmxvYXQgc2FtcGxlUmF0ZSA9IGNvbnRleHQoKS0+c2FtcGxlUmF0ZSgpOwotICAgIGZs
b2F0IHN0YXJ0VGltZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29udGV4dCgpLT5jdXJyZW50
VGltZSgpKTsKLSAgICBmbG9hdCBlbmRUaW1lID0gc3RhcnRUaW1lICsgbnVtYmVyT2ZWYWx1ZXMg
LyBzYW1wbGVSYXRlOwotCi0gICAgLy8gTm90ZSB3ZSdyZSBydW5uaW5nIGNvbnRyb2wgcmF0ZSBh
dCB0aGUgc2FtcGxlLXJhdGUuCi0gICAgLy8gUGFzcyBpbiB0aGUgY3VycmVudCB2YWx1ZSBhcyBk
ZWZhdWx0IHZhbHVlLgotICAgIG1fdmFsdWUgPSBtX3RpbWVsaW5lLnZhbHVlc0ZvclRpbWVSYW5n
ZShzdGFydFRpbWUsIGVuZFRpbWUsIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQobV92YWx1ZSksIHZh
bHVlcywgbnVtYmVyT2ZWYWx1ZXMsIHNhbXBsZVJhdGUsIHNhbXBsZVJhdGUpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDog
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uaAkocmV2aXNpb24gMTExMjA4KQorKysgU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEy
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBBdWRpb1BhcmFtX2gKLSNkZWZpbmUgQXVkaW9QYXJhbV9oCi0K
LSNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKLSNpbmNsdWRlICJBdWRpb1BhcmFtVGltZWxpbmUu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgot
I2luY2x1ZGUgPHd0Zi9GbG9hdDMyQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgQXVkaW9QYXJhbSA6IHB1YmxpYyBSZWZDb3VudGVkPEF1ZGlvUGFyYW0+IHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIERlZmF1bHRTbW9vdGhpbmdDb25zdGFudDsKLSAg
ICBzdGF0aWMgY29uc3QgZG91YmxlIFNuYXBUaHJlc2hvbGQ7Ci0KLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxBdWRpb1BhcmFtPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUgZGVmYXVs
dFZhbHVlLCBkb3VibGUgbWluVmFsdWUsIGRvdWJsZSBtYXhWYWx1ZSwgdW5zaWduZWQgdW5pdHMg
PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBdWRpb1BhcmFtKG5hbWUs
IGRlZmF1bHRWYWx1ZSwgbWluVmFsdWUsIG1heFZhbHVlLCB1bml0cykpOwotICAgIH0KLQotICAg
IEF1ZGlvUGFyYW0oY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUgZGVmYXVsdFZhbHVlLCBkb3Vi
bGUgbWluVmFsdWUsIGRvdWJsZSBtYXhWYWx1ZSwgdW5zaWduZWQgdW5pdHMgPSAwKQotICAgICAg
ICA6IG1fbmFtZShuYW1lKQotICAgICAgICAsIG1fdmFsdWUoZGVmYXVsdFZhbHVlKQotICAgICAg
ICAsIG1fZGVmYXVsdFZhbHVlKGRlZmF1bHRWYWx1ZSkKLSAgICAgICAgLCBtX21pblZhbHVlKG1p
blZhbHVlKQotICAgICAgICAsIG1fbWF4VmFsdWUobWF4VmFsdWUpCi0gICAgICAgICwgbV91bml0
cyh1bml0cykKLSAgICAgICAgLCBtX3Ntb290aGVkVmFsdWUoZGVmYXVsdFZhbHVlKQotICAgICAg
ICAsIG1fc21vb3RoaW5nQ29uc3RhbnQoRGVmYXVsdFNtb290aGluZ0NvbnN0YW50KQotICAgIHsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRDb250ZXh0KEF1ZGlvQ29udGV4dCogY29udGV4dCkg
eyBtX2NvbnRleHQgPSBjb250ZXh0OyB9Ci0gICAgQXVkaW9Db250ZXh0KiBjb250ZXh0KCkgeyBy
ZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9Ci0KLSAgICBmbG9hdCB2YWx1ZSgpOwotICAgIAotICAg
IHZvaWQgc2V0VmFsdWUoZmxvYXQpOwotCi0gICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVy
biBtX25hbWU7IH0KLQotICAgIGZsb2F0IG1pblZhbHVlKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG1fbWluVmFsdWUpOyB9Ci0gICAgZmxvYXQgbWF4VmFsdWUoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV9tYXhWYWx1ZSk7IH0KLSAgICBmbG9hdCBkZWZh
dWx0VmFsdWUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV9kZWZhdWx0VmFs
dWUpOyB9Ci0gICAgdW5zaWduZWQgdW5pdHMoKSBjb25zdCB7IHJldHVybiBtX3VuaXRzOyB9Ci0K
LSAgICAvLyBWYWx1ZSBzbW9vdGhpbmc6Ci0KLSAgICAvLyBXaGVuIGEgbmV3IHZhbHVlIGlzIHNl
dCB3aXRoIHNldFZhbHVlKCksIGluIG91ciBpbnRlcm5hbCB1c2Ugb2YgdGhlIHBhcmFtZXRlciB3
ZSBkb24ndCBpbW1lZGlhdGVseSBqdW1wIHRvIGl0LgotICAgIC8vIEluc3RlYWQgd2Ugc21vb3Ro
bHkgYXBwcm9hY2ggdGhpcyB2YWx1ZSB0byBhdm9pZCBnbGl0Y2hpbmcuCi0gICAgZmxvYXQgc21v
b3RoZWRWYWx1ZSgpOwotCi0gICAgLy8gU21vb3RobHkgZXhwb25lbnRpYWxseSBhcHByb2FjaGVz
IHRvIChkZS16aXBwZXJzKSB0aGUgZGVzaXJlZCB2YWx1ZS4KLSAgICAvLyBSZXR1cm5zIHRydWUg
aWYgc21vb3RoZWQgdmFsdWUgaGFzIGFscmVhZHkgc25hcHBlZCBleGFjdGx5IHRvIHZhbHVlLgot
ICAgIGJvb2wgc21vb3RoKCk7Ci0KLSAgICB2b2lkIHJlc2V0U21vb3RoZWRWYWx1ZSgpIHsgbV9z
bW9vdGhlZFZhbHVlID0gbV92YWx1ZTsgfQotICAgIHZvaWQgc2V0U21vb3RoaW5nQ29uc3RhbnQo
ZG91YmxlIGspIHsgbV9zbW9vdGhpbmdDb25zdGFudCA9IGs7IH0KLQotICAgIC8vIFBhcmFtZXRl
ciBhdXRvbWF0aW9uLiAgICAKLSAgICB2b2lkIHNldFZhbHVlQXRUaW1lKGZsb2F0IHZhbHVlLCBm
bG9hdCB0aW1lKSB7IG1fdGltZWxpbmUuc2V0VmFsdWVBdFRpbWUodmFsdWUsIHRpbWUpOyB9Ci0g
ICAgdm9pZCBsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZShmbG9hdCB2YWx1ZSwgZmxvYXQgdGltZSkg
eyBtX3RpbWVsaW5lLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlLCB0aW1lKTsgfQotICAg
IHZvaWQgZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZShmbG9hdCB2YWx1ZSwgZmxvYXQgdGlt
ZSkgeyBtX3RpbWVsaW5lLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUodmFsdWUsIHRpbWUp
OyB9Ci0gICAgdm9pZCBzZXRUYXJnZXRWYWx1ZUF0VGltZShmbG9hdCB0YXJnZXRWYWx1ZSwgZmxv
YXQgdGltZSwgZmxvYXQgdGltZUNvbnN0YW50KSB7IG1fdGltZWxpbmUuc2V0VGFyZ2V0VmFsdWVB
dFRpbWUodGFyZ2V0VmFsdWUsIHRpbWUsIHRpbWVDb25zdGFudCk7IH0KLSAgICB2b2lkIHNldFZh
bHVlQ3VydmVBdFRpbWUoRmxvYXQzMkFycmF5KiBjdXJ2ZSwgZmxvYXQgdGltZSwgZmxvYXQgZHVy
YXRpb24pIHsgbV90aW1lbGluZS5zZXRWYWx1ZUN1cnZlQXRUaW1lKGN1cnZlLCB0aW1lLCBkdXJh
dGlvbik7IH0KLSAgICB2b2lkIGNhbmNlbFNjaGVkdWxlZFZhbHVlcyhmbG9hdCBzdGFydFRpbWUp
IHsgbV90aW1lbGluZS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMoc3RhcnRUaW1lKTsgfQotCi0gICAg
Ym9vbCBoYXNUaW1lbGluZVZhbHVlcygpIHsgcmV0dXJuIG1fdGltZWxpbmUuaGFzVmFsdWVzKCk7
IH0KLSAgICAKLSAgICAvLyBDYWxjdWxhdGVzIG51bWJlck9mVmFsdWVzIHBhcmFtZXRlciB2YWx1
ZXMgc3RhcnRpbmcgYXQgdGhlIGNvbnRleHQncyBjdXJyZW50IHRpbWUuCi0gICAgLy8gTXVzdCBi
ZSBjYWxsZWQgaW4gdGhlIGNvbnRleHQncyByZW5kZXIgdGhyZWFkLgotICAgIHZvaWQgY2FsY3Vs
YXRlU2FtcGxlQWNjdXJhdGVWYWx1ZXMoZmxvYXQqIHZhbHVlcywgdW5zaWduZWQgbnVtYmVyT2ZW
YWx1ZXMpOwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxBdWRpb0NvbnRleHQ+IG1fY29udGV4dDsK
LSAgICBTdHJpbmcgbV9uYW1lOwotICAgIGRvdWJsZSBtX3ZhbHVlOwotICAgIGRvdWJsZSBtX2Rl
ZmF1bHRWYWx1ZTsKLSAgICBkb3VibGUgbV9taW5WYWx1ZTsKLSAgICBkb3VibGUgbV9tYXhWYWx1
ZTsKLSAgICB1bnNpZ25lZCBtX3VuaXRzOwotCi0gICAgLy8gU21vb3RoaW5nIChkZS16aXBwZXJp
bmcpCi0gICAgZG91YmxlIG1fc21vb3RoZWRWYWx1ZTsKLSAgICBkb3VibGUgbV9zbW9vdGhpbmdD
b25zdGFudDsKLSAgICAKLSAgICBBdWRpb1BhcmFtVGltZWxpbmUgbV90aW1lbGluZTsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEF1ZGlvUGFyYW1faApJbmRleDog
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbS5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbS5pZGwJKHJldmlzaW9uIDExMTIwOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uaWRsCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0g
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi1tb2R1bGUgd2ViYXVkaW8gewotICAgIGludGVyZmFjZSBbCi0gICAg
ICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTwotICAgIF0gQXVkaW9QYXJhbSB7Ci0gICAgICAgIGF0
dHJpYnV0ZSBmbG9hdCB2YWx1ZTsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0IG1p
blZhbHVlOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgZmxvYXQgbWF4VmFsdWU7Ci0gICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBmbG9hdCBkZWZhdWx0VmFsdWU7Ci0KLSAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBuYW1lOwotCi0gICAgICAgIC8vIEZJWE1FOiBDb3Vs
ZCBkZWZpbmUgdW5pdHMgY29uc3RhbnRzIGhlcmUgKHNlY29uZHMsIGRlY2liZWxzLCBjZW50cywg
ZXRjLikuLi4KLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IHVuaXRz
OwotCi0gICAgICAgIC8vIFBhcmFtZXRlciBhdXRvbWF0aW9uLgotICAgICAgICB2b2lkIHNldFZh
bHVlQXRUaW1lKGluIGZsb2F0IHZhbHVlLCBpbiBmbG9hdCB0aW1lKTsKLSAgICAgICAgdm9pZCBs
aW5lYXJSYW1wVG9WYWx1ZUF0VGltZShpbiBmbG9hdCB2YWx1ZSwgaW4gZmxvYXQgdGltZSk7Ci0g
ICAgICAgIHZvaWQgZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZShpbiBmbG9hdCB2YWx1ZSwg
aW4gZmxvYXQgdGltZSk7Ci0KLSAgICAgICAgLy8gRXhwb25lbnRpYWxseSBhcHByb2FjaCB0aGUg
dGFyZ2V0IHZhbHVlIHdpdGggYSByYXRlIGhhdmluZyB0aGUgZ2l2ZW4gdGltZSBjb25zdGFudC4K
LSAgICAgICAgdm9pZCBzZXRUYXJnZXRWYWx1ZUF0VGltZShpbiBmbG9hdCB0YXJnZXRWYWx1ZSwg
aW4gZmxvYXQgdGltZSwgaW4gZmxvYXQgdGltZUNvbnN0YW50KTsKLQotICAgICAgICAvLyBTZXRz
IGFuIGFycmF5IG9mIGFyYml0cmFyeSBwYXJhbWV0ZXIgdmFsdWVzIHN0YXJ0aW5nIGF0IHRpbWUg
Zm9yIHRoZSBnaXZlbiBkdXJhdGlvbi4KLSAgICAgICAgLy8gVGhlIG51bWJlciBvZiB2YWx1ZXMg
d2lsbCBiZSBzY2FsZWQgdG8gZml0IGludG8gdGhlIGRlc2lyZWQgZHVyYXRpb24uCi0gICAgICAg
IHZvaWQgc2V0VmFsdWVDdXJ2ZUF0VGltZShpbiBGbG9hdDMyQXJyYXkgdmFsdWVzLCBpbiBmbG9h
dCB0aW1lLCBpbiBmbG9hdCBkdXJhdGlvbik7Ci0KLSAgICAgICAgLy8gQ2FuY2VscyBhbGwgc2No
ZWR1bGVkIHBhcmFtZXRlciBjaGFuZ2VzIHdpdGggdGltZXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFs
IHRvIHN0YXJ0VGltZS4KLSAgICAgICAgdm9pZCBjYW5jZWxTY2hlZHVsZWRWYWx1ZXMoaW4gZmxv
YXQgc3RhcnRUaW1lKTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9QYXJhbVRpbWVsaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3BwCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDM2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxF
KFdFQl9BVURJTykKLQotI2luY2x1ZGUgIkF1ZGlvUGFyYW1UaW1lbGluZS5oIgotCi0jaW5jbHVk
ZSAiQXVkaW9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNs
dWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEF1ZGlvUGFyYW1UaW1l
bGluZTo6c2V0VmFsdWVBdFRpbWUoZmxvYXQgdmFsdWUsIGZsb2F0IHRpbWUpCi17Ci0gICAgaW5z
ZXJ0RXZlbnQoUGFyYW1FdmVudChQYXJhbUV2ZW50OjpTZXRWYWx1ZSwgdmFsdWUsIHRpbWUsIDAs
IDAsIDApKTsKLX0KLQotdm9pZCBBdWRpb1BhcmFtVGltZWxpbmU6OmxpbmVhclJhbXBUb1ZhbHVl
QXRUaW1lKGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1lKQotewotICAgIGluc2VydEV2ZW50KFBhcmFt
RXZlbnQoUGFyYW1FdmVudDo6TGluZWFyUmFtcFRvVmFsdWUsIHZhbHVlLCB0aW1lLCAwLCAwLCAw
KSk7Ci19Ci0KLXZvaWQgQXVkaW9QYXJhbVRpbWVsaW5lOjpleHBvbmVudGlhbFJhbXBUb1ZhbHVl
QXRUaW1lKGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1lKQotewotICAgIGluc2VydEV2ZW50KFBhcmFt
RXZlbnQoUGFyYW1FdmVudDo6RXhwb25lbnRpYWxSYW1wVG9WYWx1ZSwgdmFsdWUsIHRpbWUsIDAs
IDAsIDApKTsKLX0KLQotdm9pZCBBdWRpb1BhcmFtVGltZWxpbmU6OnNldFRhcmdldFZhbHVlQXRU
aW1lKGZsb2F0IHRhcmdldFZhbHVlLCBmbG9hdCB0aW1lLCBmbG9hdCB0aW1lQ29uc3RhbnQpCi17
Ci0gICAgaW5zZXJ0RXZlbnQoUGFyYW1FdmVudChQYXJhbUV2ZW50OjpTZXRUYXJnZXRWYWx1ZSwg
dGFyZ2V0VmFsdWUsIHRpbWUsIHRpbWVDb25zdGFudCwgMCwgMCkpOwotfQotCi12b2lkIEF1ZGlv
UGFyYW1UaW1lbGluZTo6c2V0VmFsdWVDdXJ2ZUF0VGltZShGbG9hdDMyQXJyYXkqIGN1cnZlLCBm
bG9hdCB0aW1lLCBmbG9hdCBkdXJhdGlvbikKLXsKLSAgICBpbnNlcnRFdmVudChQYXJhbUV2ZW50
KFBhcmFtRXZlbnQ6OlNldFZhbHVlQ3VydmUsIDAsIHRpbWUsIDAsIGR1cmF0aW9uLCBjdXJ2ZSkp
OwotfQotCi1zdGF0aWMgYm9vbCBpc1ZhbGlkTnVtYmVyKGZsb2F0IHgpCi17Ci0gICAgcmV0dXJu
ICFpc25hbih4KSAmJiAhaXNpbmYoeCk7Ci19Ci0KLXZvaWQgQXVkaW9QYXJhbVRpbWVsaW5lOjpp
bnNlcnRFdmVudChjb25zdCBQYXJhbUV2ZW50JiBldmVudCkKLXsKLSAgICAvLyBTYW5pdHkgY2hl
Y2sgdGhlIGV2ZW50LiBCZSBzdXBlciBjYXJlZnVsIHdlJ3JlIG5vdCBnZXR0aW5nIGluZmVjdGVk
IHdpdGggTmFOIG9yIEluZi4KLSAgICBib29sIGlzVmFsaWQgPSBldmVudC50eXBlKCkgPCBQYXJh
bUV2ZW50OjpMYXN0VHlwZQotICAgICAgICAmJiBpc1ZhbGlkTnVtYmVyKGV2ZW50LnZhbHVlKCkp
Ci0gICAgICAgICYmIGlzVmFsaWROdW1iZXIoZXZlbnQudGltZSgpKQotICAgICAgICAmJiBpc1Zh
bGlkTnVtYmVyKGV2ZW50LnRpbWVDb25zdGFudCgpKQotICAgICAgICAmJiBpc1ZhbGlkTnVtYmVy
KGV2ZW50LmR1cmF0aW9uKCkpCi0gICAgICAgICYmIGV2ZW50LmR1cmF0aW9uKCkgPj0gMDsKLQot
ICAgIEFTU0VSVChpc1ZhbGlkKTsKLSAgICBpZiAoIWlzVmFsaWQpCi0gICAgICAgIHJldHVybjsK
LSAgICAgICAgCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRzTG9jayk7Ci0gICAgCi0g
ICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgZmxvYXQgaW5zZXJ0VGltZSA9IGV2ZW50LnRpbWUoKTsK
LSAgICBmb3IgKGkgPSAwOyBpIDwgbV9ldmVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgLy8g
T3ZlcndyaXRlIHNhbWUgZXZlbnQgdHlwZSBhbmQgdGltZS4KLSAgICAgICAgaWYgKG1fZXZlbnRz
W2ldLnRpbWUoKSA9PSBpbnNlcnRUaW1lICYmIG1fZXZlbnRzW2ldLnR5cGUoKSA9PSBldmVudC50
eXBlKCkpIHsKLSAgICAgICAgICAgIG1fZXZlbnRzW2ldID0gZXZlbnQ7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9ldmVudHNbaV0udGltZSgpID4gaW5z
ZXJ0VGltZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIG1fZXZlbnRzLmluc2Vy
dChpLCBldmVudCk7Ci19Ci0KLXZvaWQgQXVkaW9QYXJhbVRpbWVsaW5lOjpjYW5jZWxTY2hlZHVs
ZWRWYWx1ZXMoZmxvYXQgc3RhcnRUaW1lKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2
ZW50c0xvY2spOwotCi0gICAgLy8gUmVtb3ZlIGFsbCBldmVudHMgc3RhcnRpbmcgYXQgc3RhcnRU
aW1lLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2V2ZW50cy5zaXplKCk7ICsraSkg
ewotICAgICAgICBpZiAobV9ldmVudHNbaV0udGltZSgpID49IHN0YXJ0VGltZSkgewotICAgICAg
ICAgICAgbV9ldmVudHMucmVtb3ZlKGksIG1fZXZlbnRzLnNpemUoKSAtIGkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWZsb2F0IEF1ZGlvUGFyYW1UaW1lbGlu
ZTo6dmFsdWVGb3JDb250ZXh0VGltZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IGRlZmF1
bHRWYWx1ZSwgYm9vbCYgaGFzVmFsdWUpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQpOwotCi0gICAg
aWYgKCFjb250ZXh0IHx8ICFtX2V2ZW50cy5zaXplKCkgfHwgY29udGV4dC0+Y3VycmVudFRpbWUo
KSA8IG1fZXZlbnRzWzBdLnRpbWUoKSkgewotICAgICAgICBoYXNWYWx1ZSA9IGZhbHNlOwotICAg
ICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotICAgIH0KLQotICAgIC8vIEFzayBmb3IganVzdCBh
IHNpbmdsZSB2YWx1ZS4KLSAgICBmbG9hdCB2YWx1ZTsKLSAgICBmbG9hdCBzYW1wbGVSYXRlID0g
Y29udGV4dC0+c2FtcGxlUmF0ZSgpOwotICAgIGZsb2F0IHN0YXJ0VGltZSA9IG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoY29udGV4dC0+Y3VycmVudFRpbWUoKSk7Ci0gICAgZmxvYXQgZW5kVGltZSA9
IHN0YXJ0VGltZSArIDEuMWYgLyBzYW1wbGVSYXRlOyAvLyB0aW1lIGp1c3QgYmV5b25kIG9uZSBz
YW1wbGUtZnJhbWUKLSAgICBmbG9hdCBjb250cm9sUmF0ZSA9IHNhbXBsZVJhdGUgLyBBdWRpb05v
ZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXM7IC8vIG9uZSBwYXJhbWV0ZXIgY2hhbmdlIHBlciBy
ZW5kZXIgcXVhbnR1bQotICAgIHZhbHVlID0gdmFsdWVzRm9yVGltZVJhbmdlKHN0YXJ0VGltZSwg
ZW5kVGltZSwgZGVmYXVsdFZhbHVlLCAmdmFsdWUsIDEsIHNhbXBsZVJhdGUsIGNvbnRyb2xSYXRl
KTsKLQotICAgIGhhc1ZhbHVlID0gdHJ1ZTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLWZsb2F0
IEF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVzRm9yVGltZVJhbmdlKGZsb2F0IHN0YXJ0VGltZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGVuZFRp
bWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBk
ZWZhdWx0VmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCogdmFsdWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmbG9hdCBzYW1wbGVSYXRlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgY29udHJvbFJhdGUpCi17Ci0gICAgLy8g
V2UgY2FuJ3QgY29udGVuZCB0aGUgbG9jayBpbiB0aGUgcmVhbHRpbWUgYXVkaW8gdGhyZWFkLgot
ICAgIGlmICghbV9ldmVudHNMb2NrLnRyeUxvY2soKSkgewotICAgICAgICBpZiAodmFsdWVzKSB7
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZWYWx1ZXM7ICsr
aSkKLSAgICAgICAgICAgICAgICB2YWx1ZXNbaV0gPSBkZWZhdWx0VmFsdWU7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKLSAgICB9Ci0KLSAgICBmbG9hdCB2YWx1ZSA9
IHZhbHVlc0ZvclRpbWVSYW5nZUltcGwoc3RhcnRUaW1lLCBlbmRUaW1lLCBkZWZhdWx0VmFsdWUs
IHZhbHVlcywgbnVtYmVyT2ZWYWx1ZXMsIHNhbXBsZVJhdGUsIGNvbnRyb2xSYXRlKTsKLSAgICBt
X2V2ZW50c0xvY2sudW5sb2NrKCk7Ci0KLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLWZsb2F0IEF1
ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVzRm9yVGltZVJhbmdlSW1wbChmbG9hdCBzdGFydFRpbWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQg
ZW5kVGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCBkZWZhdWx0VmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmxvYXQqIHZhbHVlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBzYW1wbGVSYXRl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0
IGNvbnRyb2xSYXRlKQotewotICAgIEFTU0VSVCh2YWx1ZXMpOwotICAgIGlmICghdmFsdWVzKQot
ICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotCi0gICAgLy8gUmV0dXJuIGRlZmF1bHQgdmFs
dWUgaWYgdGhlcmUgYXJlIG5vIGV2ZW50cyBtYXRjaGluZyB0aGUgZGVzaXJlZCB0aW1lIHJhbmdl
LgotICAgIEFTU0VSVChtX2V2ZW50cy5zaXplKCkpOwotICAgIGlmICghbV9ldmVudHMuc2l6ZSgp
IHx8IGVuZFRpbWUgPD0gbV9ldmVudHNbMF0udGltZSgpKSB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1iZXJPZlZhbHVlczsgKytpKQotICAgICAgICAgICAgdmFsdWVzW2ld
ID0gZGVmYXVsdFZhbHVlOwotICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotICAgIH0KLQot
ICAgIC8vIE1haW50YWluIGEgcnVubmluZyB0aW1lIGFuZCBpbmRleCBmb3Igd3JpdGluZyB0aGUg
dmFsdWVzIGJ1ZmZlci4KLSAgICBmbG9hdCBjdXJyZW50VGltZSA9IHN0YXJ0VGltZTsKLSAgICB1
bnNpZ25lZCB3cml0ZUluZGV4ID0gMDsKLQotICAgIC8vIElmIGZpcnN0IGV2ZW50IGlzIGFmdGVy
IHN0YXJ0VGltZSB0aGVuIGZpbGwgaW5pdGlhbCBwYXJ0IG9mIHZhbHVlcyBidWZmZXIgd2l0aCBk
ZWZhdWx0VmFsdWUKLSAgICAvLyB1bnRpbCB3ZSByZWFjaCB0aGUgZmlyc3QgZXZlbnQgdGltZS4K
LSAgICBmbG9hdCBmaXJzdEV2ZW50VGltZSA9IG1fZXZlbnRzWzBdLnRpbWUoKTsKLSAgICBpZiAo
Zmlyc3RFdmVudFRpbWUgPiBzdGFydFRpbWUpIHsKLSAgICAgICAgZmxvYXQgZmlsbFRvVGltZSA9
IG1pbihlbmRUaW1lLCBmaXJzdEV2ZW50VGltZSk7Ci0gICAgICAgIHVuc2lnbmVkIGZpbGxUb0Zy
YW1lID0gQXVkaW9VdGlsaXRpZXM6OnRpbWVUb1NhbXBsZUZyYW1lKGZpbGxUb1RpbWUgLSBzdGFy
dFRpbWUsIHNhbXBsZVJhdGUpOwotICAgICAgICBmaWxsVG9GcmFtZSA9IG1pbihmaWxsVG9GcmFt
ZSwgbnVtYmVyT2ZWYWx1ZXMpOwotICAgICAgICBmb3IgKDsgd3JpdGVJbmRleCA8IGZpbGxUb0Zy
YW1lOyArK3dyaXRlSW5kZXgpCi0gICAgICAgICAgICB2YWx1ZXNbd3JpdGVJbmRleF0gPSBkZWZh
dWx0VmFsdWU7Ci0KLSAgICAgICAgY3VycmVudFRpbWUgPSBmaWxsVG9UaW1lOwotICAgIH0KLQot
ICAgIGZsb2F0IHZhbHVlID0gZGVmYXVsdFZhbHVlOwotCi0gICAgLy8gR28gdGhyb3VnaCBlYWNo
IGV2ZW50IGFuZCByZW5kZXIgdGhlIHZhbHVlIGJ1ZmZlciB3aGVyZSB0aGUgdGltZXMgb3Zlcmxh
cCwKLSAgICAvLyBzdG9wcGluZyB3aGVuIHdlJ3ZlIHJlbmRlcmVkIGFsbCB0aGUgcmVxdWVzdGVk
IHZhbHVlcy4KLSAgICAvLyBGSVhNRTogY291bGQgdHJ5IHRvIG9wdGltaXplIGJ5IGF2b2lkaW5n
IGhhdmluZyB0byBpdGVyYXRlIHN0YXJ0aW5nIGZyb20gdGhlIHZlcnkgZmlyc3QgZXZlbnQKLSAg
ICAvLyBhbmQga2VlcGluZyB0cmFjayBvZiBhICJjdXJyZW50IiBldmVudCBpbmRleC4KLSAgICBp
bnQgbiA9IG1fZXZlbnRzLnNpemUoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG4gJiYgd3Jp
dGVJbmRleCA8IG51bWJlck9mVmFsdWVzOyArK2kpIHsKLSAgICAgICAgUGFyYW1FdmVudCYgZXZl
bnQgPSBtX2V2ZW50c1tpXTsKLSAgICAgICAgUGFyYW1FdmVudCogbmV4dEV2ZW50ID0gaSA8IG4g
LSAxID8gJihtX2V2ZW50c1tpICsgMV0pIDogMDsKLQotICAgICAgICAvLyBXYWl0IHVudGlsIHdl
IGdldCBhIG1vcmUgcmVjZW50IGV2ZW50LgotICAgICAgICBpZiAobmV4dEV2ZW50ICYmIG5leHRF
dmVudC0+dGltZSgpIDwgY3VycmVudFRpbWUpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICBmbG9hdCB2YWx1ZTEgPSBldmVudC52YWx1ZSgpOwotICAgICAgICBmbG9hdCB0aW1lMSA9
IGV2ZW50LnRpbWUoKTsKLSAgICAgICAgZmxvYXQgdmFsdWUyID0gbmV4dEV2ZW50ID8gbmV4dEV2
ZW50LT52YWx1ZSgpIDogdmFsdWUxOwotICAgICAgICBmbG9hdCB0aW1lMiA9IG5leHRFdmVudCA/
IG5leHRFdmVudC0+dGltZSgpIDogZW5kVGltZSArIDE7Ci0KLSAgICAgICAgZmxvYXQgZGVsdGFU
aW1lID0gdGltZTIgLSB0aW1lMTsKLSAgICAgICAgZmxvYXQgayA9IGRlbHRhVGltZSA+IDAgPyAx
IC8gZGVsdGFUaW1lIDogMDsKLSAgICAgICAgZmxvYXQgc2FtcGxlRnJhbWVUaW1lSW5jciA9IDEg
LyBzYW1wbGVSYXRlOwotCi0gICAgICAgIGZsb2F0IGZpbGxUb1RpbWUgPSBtaW4oZW5kVGltZSwg
dGltZTIpOwotICAgICAgICB1bnNpZ25lZCBmaWxsVG9GcmFtZSA9IEF1ZGlvVXRpbGl0aWVzOjp0
aW1lVG9TYW1wbGVGcmFtZShmaWxsVG9UaW1lIC0gc3RhcnRUaW1lLCBzYW1wbGVSYXRlKTsKLSAg
ICAgICAgZmlsbFRvRnJhbWUgPSBtaW4oZmlsbFRvRnJhbWUsIG51bWJlck9mVmFsdWVzKTsKLQot
ICAgICAgICBQYXJhbUV2ZW50OjpUeXBlIG5leHRFdmVudFR5cGUgPSBuZXh0RXZlbnQgPyBzdGF0
aWNfY2FzdDxQYXJhbUV2ZW50OjpUeXBlPihuZXh0RXZlbnQtPnR5cGUoKSkgOiBQYXJhbUV2ZW50
OjpMYXN0VHlwZSAvKiB1bmtub3duICovOwotCi0gICAgICAgIC8vIEZpcnN0IGhhbmRsZSBsaW5l
YXIgYW5kIGV4cG9uZW50aWFsIHJhbXBzIHdoaWNoIHJlcXVpcmUgbG9va2luZyBhaGVhZCB0byB0
aGUgbmV4dCBldmVudC4KLSAgICAgICAgaWYgKG5leHRFdmVudFR5cGUgPT0gUGFyYW1FdmVudDo6
TGluZWFyUmFtcFRvVmFsdWUpIHsKLSAgICAgICAgICAgIGZvciAoOyB3cml0ZUluZGV4IDwgZmls
bFRvRnJhbWU7ICsrd3JpdGVJbmRleCkgewotICAgICAgICAgICAgICAgIGZsb2F0IHggPSAoY3Vy
cmVudFRpbWUgLSB0aW1lMSkgKiBrOwotICAgICAgICAgICAgICAgIHZhbHVlID0gKDEgLSB4KSAq
IHZhbHVlMSArIHggKiB2YWx1ZTI7Ci0gICAgICAgICAgICAgICAgdmFsdWVzW3dyaXRlSW5kZXhd
ID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgY3VycmVudFRpbWUgKz0gc2FtcGxlRnJhbWVUaW1l
SW5jcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChuZXh0RXZlbnRUeXBlID09
IFBhcmFtRXZlbnQ6OkV4cG9uZW50aWFsUmFtcFRvVmFsdWUpIHsKLSAgICAgICAgICAgIGlmICh2
YWx1ZTEgPD0gMCB8fCB2YWx1ZTIgPD0gMCkgewotICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBu
ZWdhdGl2ZSB2YWx1ZXMgZXJyb3IgY2FzZSBieSBwcm9wYWdhdGluZyBwcmV2aW91cyB2YWx1ZS4K
LSAgICAgICAgICAgICAgICBmb3IgKDsgd3JpdGVJbmRleCA8IGZpbGxUb0ZyYW1lOyArK3dyaXRl
SW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlc1t3cml0ZUluZGV4XSA9IHZhbHVlOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBudW1TYW1wbGVGcmFt
ZXMgPSBkZWx0YVRpbWUgKiBzYW1wbGVSYXRlOwotICAgICAgICAgICAgICAgIC8vIFRoZSB2YWx1
ZSBnb2VzIGV4cG9uZW50aWFsbHkgZnJvbSB2YWx1ZTEgdG8gdmFsdWUyIGluIGEgZHVyYXRpb24g
b2YgZGVsdGFUaW1lIHNlY29uZHMgKGNvcnJlc3BvbmRpbmcgdG8gbnVtU2FtcGxlRnJhbWVzKS4K
LSAgICAgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBwZXItc2FtcGxlIG11bHRpcGxpZXIuCi0g
ICAgICAgICAgICAgICAgZmxvYXQgbXVsdGlwbGllciA9IHBvd2YodmFsdWUyIC8gdmFsdWUxLCAx
IC8gbnVtU2FtcGxlRnJhbWVzKTsKLQotICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgc3RhcnRp
bmcgdmFsdWUgb2YgdGhlIGV4cG9uZW50aWFsIHJhbXAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbXVs
dGlwbGllciBeCi0gICAgICAgICAgICAgICAgLy8gQXVkaW9VdGlsaXRpZXM6OnRpbWVUb1NhbXBs
ZUZyYW1lKGN1cnJlbnRUaW1lIC0gdGltZTEsIHNhbXBsZVJhdGUpLCBidXQgaXMgbW9yZQotICAg
ICAgICAgICAgICAgIC8vIGFjY3VyYXRlLCBlc3BlY2lhbGx5IGlmIG11bHRpcGxpZXIgaXMgY2xv
c2UgdG8gMS4KLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlMSAqIHBvd2YodmFsdWUyIC8g
dmFsdWUxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdWRpb1V0aWxp
dGllczo6dGltZVRvU2FtcGxlRnJhbWUoY3VycmVudFRpbWUgLSB0aW1lMSwgc2FtcGxlUmF0ZSkg
LyBudW1TYW1wbGVGcmFtZXMpOwotCi0gICAgICAgICAgICAgICAgZm9yICg7IHdyaXRlSW5kZXgg
PCBmaWxsVG9GcmFtZTsgKyt3cml0ZUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVl
c1t3cml0ZUluZGV4XSA9IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICB2YWx1ZSAqPSBtdWx0
aXBsaWVyOwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGltZSArPSBzYW1wbGVGcmFtZVRp
bWVJbmNyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIC8vIEhhbmRsZSBldmVudCB0eXBlcyBub3QgcmVxdWlyaW5nIGxvb2tp
bmcgYWhlYWQgdG8gdGhlIG5leHQgZXZlbnQuCi0gICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5
cGUoKSkgewotICAgICAgICAgICAgY2FzZSBQYXJhbUV2ZW50OjpTZXRWYWx1ZToKLSAgICAgICAg
ICAgIGNhc2UgUGFyYW1FdmVudDo6TGluZWFyUmFtcFRvVmFsdWU6Ci0gICAgICAgICAgICBjYXNl
IFBhcmFtRXZlbnQ6OkV4cG9uZW50aWFsUmFtcFRvVmFsdWU6Ci0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGltZSA9IGZpbGxUb1RpbWU7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgLy8gU2ltcGx5IHN0YXkgYXQgYSBjb25zdGFudCB2YWx1ZS4KLSAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgPSBldmVudC52YWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICBm
b3IgKDsgd3JpdGVJbmRleCA8IGZpbGxUb0ZyYW1lOyArK3dyaXRlSW5kZXgpCi0gICAgICAgICAg
ICAgICAgICAgICAgICB2YWx1ZXNbd3JpdGVJbmRleF0gPSB2YWx1ZTsKLQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgUGFy
YW1FdmVudDo6U2V0VGFyZ2V0VmFsdWU6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50VGltZSA9IGZpbGxUb1RpbWU7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Ly8gRXhwb25lbnRpYWwgYXBwcm9hY2ggdG8gdGFyZ2V0IHZhbHVlIHdpdGggZ2l2ZW4gdGltZSBj
b25zdGFudC4KLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgdGFyZ2V0VmFsdWUgPSBldmVudC52
YWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICBmbG9hdCB0aW1lQ29uc3RhbnQgPSBldmVudC50
aW1lQ29uc3RhbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgZGlzY3JldGVUaW1lQ29u
c3RhbnQgPSBzdGF0aWNfY2FzdDxmbG9hdD4oQXVkaW9VdGlsaXRpZXM6OmRpc2NyZXRlVGltZUNv
bnN0YW50Rm9yU2FtcGxlUmF0ZSh0aW1lQ29uc3RhbnQsIGNvbnRyb2xSYXRlKSk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgZm9yICg7IHdyaXRlSW5kZXggPCBmaWxsVG9GcmFtZTsgKyt3cml0ZUlu
ZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbd3JpdGVJbmRleF0gPSB2YWx1
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICs9ICh0YXJnZXRWYWx1ZSAtIHZhbHVl
KSAqIGRpc2NyZXRlVGltZUNvbnN0YW50OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBj
YXNlIFBhcmFtRXZlbnQ6OlNldFZhbHVlQ3VydmU6Ci0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBGbG9hdDMyQXJyYXkqIGN1cnZlID0gZXZlbnQuY3VydmUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgZmxvYXQqIGN1cnZlRGF0YSA9IGN1cnZlID8gY3VydmUtPmRhdGEoKSA6
IDA7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ3VydmVQb2ludHMgPSBj
dXJ2ZSA/IGN1cnZlLT5sZW5ndGgoKSA6IDA7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gQ3Vy
dmUgZXZlbnRzIGhhdmUgZHVyYXRpb24sIHNvIGRvbid0IGp1c3QgdXNlIG5leHQgZXZlbnQgdGlt
ZS4KLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgZHVyYXRpb24gPSBldmVudC5kdXJhdGlvbigp
OwotICAgICAgICAgICAgICAgICAgICBmbG9hdCBkdXJhdGlvbkZyYW1lcyA9IGR1cmF0aW9uICog
c2FtcGxlUmF0ZTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgY3VydmVQb2ludHNQZXJGcmFt
ZSA9IHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXJPZkN1cnZlUG9pbnRzKSAvIGR1cmF0aW9uRnJh
bWVzOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICghY3VydmUgfHwgIWN1cnZlRGF0YSB8fCAh
bnVtYmVyT2ZDdXJ2ZVBvaW50cyB8fCBkdXJhdGlvbiA8PSAwIHx8IHNhbXBsZVJhdGUgPD0gMCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXJyb3IgY29uZGl0aW9uIC0gc2ltcGx5IHBy
b3BhZ2F0ZSBwcmV2aW91cyB2YWx1ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRU
aW1lID0gZmlsbFRvVGltZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB3cml0ZUlu
ZGV4IDwgZmlsbFRvRnJhbWU7ICsrd3JpdGVJbmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWx1ZXNbd3JpdGVJbmRleF0gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8g
U2F2ZSBvbGQgdmFsdWVzIGFuZCByZWNhbGN1bGF0ZSBpbmZvcm1hdGlvbiBiYXNlZCBvbiB0aGUg
Y3VydmUncyBkdXJhdGlvbgotICAgICAgICAgICAgICAgICAgICAvLyBpbnN0ZWFkIG9mIHRoZSBu
ZXh0IGV2ZW50IHRpbWUuCi0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG5leHRFdmVudEZp
bGxUb0ZyYW1lID0gZmlsbFRvRnJhbWU7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IG5leHRF
dmVudEZpbGxUb1RpbWUgPSBmaWxsVG9UaW1lOwotICAgICAgICAgICAgICAgICAgICBmaWxsVG9U
aW1lID0gbWluKGVuZFRpbWUsIHRpbWUxICsgZHVyYXRpb24pOwotICAgICAgICAgICAgICAgICAg
ICBmaWxsVG9GcmFtZSA9IEF1ZGlvVXRpbGl0aWVzOjp0aW1lVG9TYW1wbGVGcmFtZShmaWxsVG9U
aW1lIC0gc3RhcnRUaW1lLCBzYW1wbGVSYXRlKTsKLSAgICAgICAgICAgICAgICAgICAgZmlsbFRv
RnJhbWUgPSBtaW4oZmlsbFRvRnJhbWUsIG51bWJlck9mVmFsdWVzKTsKLQotICAgICAgICAgICAg
ICAgICAgICAvLyBJbmRleCBpbnRvIHRoZSBjdXJ2ZSBkYXRhIHVzaW5nIGEgZmxvYXRpbmctcG9p
bnQgdmFsdWUuCi0gICAgICAgICAgICAgICAgICAgIC8vIFdlJ3JlIHNjYWxpbmcgdGhlIG51bWJl
ciBvZiBjdXJ2ZSBwb2ludHMgYnkgdGhlIGR1cmF0aW9uIChzZWUgY3VydmVQb2ludHNQZXJGcmFt
ZSkuCi0gICAgICAgICAgICAgICAgICAgIGZsb2F0IGN1cnZlVmlydHVhbEluZGV4ID0gMDsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHRpbWUxIDwgY3VycmVudFRpbWUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEluZGV4IHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBjdXJ2
ZSBkYXRhLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgdXNlIHRpbWVUb1NhbXBs
ZUZyYW1lKCkgc2luY2Ugd2Ugd2FudCB0aGUgZXhhY3QgZmxvYXRpbmctcG9pbnQgZnJhbWUuCi0g
ICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBmcmFtZU9mZnNldCA9IChjdXJyZW50VGltZSAt
IHRpbWUxKSAqIHNhbXBsZVJhdGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZVZpcnR1
YWxJbmRleCA9IGN1cnZlUG9pbnRzUGVyRnJhbWUgKiBmcmFtZU9mZnNldDsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIFJlbmRlciB0aGUgc3RyZXRjaGVk
IGN1cnZlIGRhdGEgdXNpbmcgbmVhcmVzdCBuZWlnaGJvciBzYW1wbGluZy4KLSAgICAgICAgICAg
ICAgICAgICAgLy8gT3ZlcnNhbXBsZWQgY3VydmUgZGF0YSBjYW4gYmUgcHJvdmlkZWQgaWYgc21v
b3RobmVzcyBpcyBkZXNpcmVkLgotICAgICAgICAgICAgICAgICAgICBmb3IgKDsgd3JpdGVJbmRl
eCA8IGZpbGxUb0ZyYW1lOyArK3dyaXRlSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIElkZWFsbHkgd2UnZCB1c2Ugcm91bmQoKSBmcm9tIE1hdGhFeHRyYXMsIGJ1dCB3ZSdyZSBp
biBhIHRpZ2h0IGxvb3AgaGVyZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHdlJ3Jl
IHRyYWRpbmcgb2ZmIHByZWNpc2lvbiBmb3IgZXh0cmEgc3BlZWQuCi0gICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBjdXJ2ZUluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDAuNSAr
IGN1cnZlVmlydHVhbEluZGV4KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgY3VydmVWaXJ0
dWFsSW5kZXggKz0gY3VydmVQb2ludHNQZXJGcmFtZTsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQm91bmRzIGNoZWNrLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnZlSW5k
ZXggPCBudW1iZXJPZkN1cnZlUG9pbnRzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlID0gY3VydmVEYXRhW2N1cnZlSW5kZXhdOwotCi0gICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZXNbd3JpdGVJbmRleF0gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYW55IHRpbWUgbGVmdCBhZnRlciB0aGUgZHVy
YXRpb24gb2YgdGhpcyBldmVudCBhbmQgdGhlIHN0YXJ0Ci0gICAgICAgICAgICAgICAgICAgIC8v
IG9mIHRoZSBuZXh0LCB0aGVuIGp1c3QgcHJvcGFnYXRlIHRoZSBsYXN0IHZhbHVlLgotICAgICAg
ICAgICAgICAgICAgICBmb3IgKDsgd3JpdGVJbmRleCA8IG5leHRFdmVudEZpbGxUb0ZyYW1lOyAr
K3dyaXRlSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbd3JpdGVJbmRleF0g
PSB2YWx1ZTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBSZS1hZGp1c3QgY3VycmVudCB0aW1l
Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1lID0gbmV4dEV2ZW50RmlsbFRvVGltZTsK
LQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSdzIGFueSB0aW1lIGxl
ZnQgYWZ0ZXIgcHJvY2Vzc2luZyB0aGUgbGFzdCBldmVudCB0aGVuIGp1c3QgcHJvcGFnYXRlIHRo
ZSBsYXN0IHZhbHVlCi0gICAgLy8gdG8gdGhlIGVuZCBvZiB0aGUgdmFsdWVzIGJ1ZmZlci4KLSAg
ICBmb3IgKDsgd3JpdGVJbmRleCA8IG51bWJlck9mVmFsdWVzOyArK3dyaXRlSW5kZXgpCi0gICAg
ICAgIHZhbHVlc1t3cml0ZUluZGV4XSA9IHZhbHVlOwotCi0gICAgcmV0dXJuIHZhbHVlOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmgJKHJl
dmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1l
bGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBdWRpb1Bh
cmFtVGltZWxpbmVfaAotI2RlZmluZSBBdWRpb1BhcmFtVGltZWxpbmVfaAotCi0jaW5jbHVkZSAi
QXVkaW9Db250ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL0Zsb2F0MzJBcnJheS5oPgotI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvUGFyYW1UaW1lbGluZSB7Ci1wdWJsaWM6Ci0gICAgQXVk
aW9QYXJhbVRpbWVsaW5lKCkKLSAgICAgICAgOiBtX2N1cnJlbnRFdmVudEluZGV4KDApCi0gICAg
ICAgICwgbV92YWx1ZSgwKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIHNldFZhbHVlQXRUaW1l
KGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1lKTsKLSAgICB2b2lkIGxpbmVhclJhbXBUb1ZhbHVlQXRU
aW1lKGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1lKTsKLSAgICB2b2lkIGV4cG9uZW50aWFsUmFtcFRv
VmFsdWVBdFRpbWUoZmxvYXQgdmFsdWUsIGZsb2F0IHRpbWUpOwotICAgIHZvaWQgc2V0VGFyZ2V0
VmFsdWVBdFRpbWUoZmxvYXQgdGFyZ2V0VmFsdWUsIGZsb2F0IHRpbWUsIGZsb2F0IHRpbWVDb25z
dGFudCk7Ci0gICAgdm9pZCBzZXRWYWx1ZUN1cnZlQXRUaW1lKEZsb2F0MzJBcnJheSogY3VydmUs
IGZsb2F0IHRpbWUsIGZsb2F0IGR1cmF0aW9uKTsKLSAgICB2b2lkIGNhbmNlbFNjaGVkdWxlZFZh
bHVlcyhmbG9hdCBzdGFydFRpbWUpOwotCi0gICAgLy8gaGFzVmFsdWUgaXMgc2V0IHRvIHRydWUg
aWYgYSB2YWxpZCB0aW1lbGluZSB2YWx1ZSBpcyByZXR1cm5lZC4KLSAgICAvLyBvdGhlcndpc2Ug
ZGVmYXVsdFZhbHVlIGlzIHJldHVybmVkLgotICAgIGZsb2F0IHZhbHVlRm9yQ29udGV4dFRpbWUo
QXVkaW9Db250ZXh0KiwgZmxvYXQgZGVmYXVsdFZhbHVlLCBib29sJiBoYXNWYWx1ZSk7Ci0KLSAg
ICAvLyBHaXZlbiB0aGUgdGltZSByYW5nZSwgY2FsY3VsYXRlcyBwYXJhbWV0ZXIgdmFsdWVzIGlu
dG8gdGhlIHZhbHVlcyBidWZmZXIKLSAgICAvLyBhbmQgcmV0dXJucyB0aGUgbGFzdCBwYXJhbWV0
ZXIgdmFsdWUgY2FsY3VsYXRlZCBmb3IgInZhbHVlcyIgb3IgdGhlIGRlZmF1bHRWYWx1ZSBpZiBu
b25lIHdlcmUgY2FsY3VsYXRlZC4KLSAgICAvLyBjb250cm9sUmF0ZSBpcyB0aGUgcmF0ZSAobnVt
YmVyIHBlciBzZWNvbmQpIGF0IHdoaWNoIHBhcmFtZXRlciB2YWx1ZXMgd2lsbCBiZSBjYWxjdWxh
dGVkLgotICAgIC8vIEl0IHNob3VsZCBlcXVhbCBzYW1wbGVSYXRlIGZvciBzYW1wbGUtYWNjdXJh
dGUgcGFyYW1ldGVyIGNoYW5nZXMsIGFuZCBvdGhlcndpc2Ugd2lsbCB1c3VhbGx5IG1hdGNoCi0g
ICAgLy8gdGhlIHJlbmRlciBxdWFudHVtIHNpemUgc3VjaCB0aGF0IHRoZSBwYXJhbWV0ZXIgdmFs
dWUgY2hhbmdlcyBvbmNlIHBlciByZW5kZXIgcXVhbnR1bS4KLSAgICBmbG9hdCB2YWx1ZXNGb3JU
aW1lUmFuZ2UoZmxvYXQgc3RhcnRUaW1lLCBmbG9hdCBlbmRUaW1lLCBmbG9hdCBkZWZhdWx0VmFs
dWUsIGZsb2F0KiB2YWx1ZXMsIHVuc2lnbmVkIG51bWJlck9mVmFsdWVzLCBmbG9hdCBzYW1wbGVS
YXRlLCBmbG9hdCBjb250cm9sUmF0ZSk7Ci0KLSAgICBib29sIGhhc1ZhbHVlcygpIHsgcmV0dXJu
IG1fZXZlbnRzLnNpemUoKTsgfQotCi1wcml2YXRlOgotICAgIGNsYXNzIFBhcmFtRXZlbnQgewot
ICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBUeXBlIHsKLSAgICAgICAgICAgIFNldFZhbHVlLAot
ICAgICAgICAgICAgTGluZWFyUmFtcFRvVmFsdWUsCi0gICAgICAgICAgICBFeHBvbmVudGlhbFJh
bXBUb1ZhbHVlLAotICAgICAgICAgICAgU2V0VGFyZ2V0VmFsdWUsCi0gICAgICAgICAgICBTZXRW
YWx1ZUN1cnZlLAotICAgICAgICAgICAgTGFzdFR5cGUKLSAgICAgICAgfTsKLQotICAgICAgICBQ
YXJhbUV2ZW50KFR5cGUgdHlwZSwgZmxvYXQgdmFsdWUsIGZsb2F0IHRpbWUsIGZsb2F0IHRpbWVD
b25zdGFudCwgZmxvYXQgZHVyYXRpb24sIFBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBjdXJ2ZSkK
LSAgICAgICAgICAgIDogbV90eXBlKHR5cGUpCi0gICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUp
Ci0gICAgICAgICAgICAsIG1fdGltZSh0aW1lKQotICAgICAgICAgICAgLCBtX3RpbWVDb25zdGFu
dCh0aW1lQ29uc3RhbnQpCi0gICAgICAgICAgICAsIG1fZHVyYXRpb24oZHVyYXRpb24pCi0gICAg
ICAgICAgICAsIG1fY3VydmUoY3VydmUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAg
IHVuc2lnbmVkIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICAgICAgZmxvYXQg
dmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgICAgIGZsb2F0IHRpbWUoKSBj
b25zdCB7IHJldHVybiBtX3RpbWU7IH0KLSAgICAgICAgZmxvYXQgdGltZUNvbnN0YW50KCkgY29u
c3QgeyByZXR1cm4gbV90aW1lQ29uc3RhbnQ7IH0KLSAgICAgICAgZmxvYXQgZHVyYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9Ci0gICAgICAgIEZsb2F0MzJBcnJheSogY3VydmUo
KSB7IHJldHVybiBtX2N1cnZlLmdldCgpOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB1bnNp
Z25lZCBtX3R5cGU7Ci0gICAgICAgIGZsb2F0IG1fdmFsdWU7Ci0gICAgICAgIGZsb2F0IG1fdGlt
ZTsKLSAgICAgICAgZmxvYXQgbV90aW1lQ29uc3RhbnQ7Ci0gICAgICAgIGZsb2F0IG1fZHVyYXRp
b247Ci0gICAgICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IG1fY3VydmU7Ci0gICAgfTsKLQotICAg
IHZvaWQgaW5zZXJ0RXZlbnQoY29uc3QgUGFyYW1FdmVudCYpOwotICAgIGZsb2F0IHZhbHVlc0Zv
clRpbWVSYW5nZUltcGwoZmxvYXQgc3RhcnRUaW1lLCBmbG9hdCBlbmRUaW1lLCBmbG9hdCBkZWZh
dWx0VmFsdWUsIGZsb2F0KiB2YWx1ZXMsIHVuc2lnbmVkIG51bWJlck9mVmFsdWVzLCBmbG9hdCBz
YW1wbGVSYXRlLCBmbG9hdCBjb250cm9sUmF0ZSk7Ci0KLSAgICBWZWN0b3I8UGFyYW1FdmVudD4g
bV9ldmVudHM7Ci0gICAgdW5zaWduZWQgbV9jdXJyZW50RXZlbnRJbmRleDsKLSAgICBmbG9hdCBt
X3ZhbHVlOwotCi0gICAgTXV0ZXggbV9ldmVudHNMb2NrOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gQXVkaW9QYXJhbVRpbWVsaW5lX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5jcHAJKHJldmlzaW9u
IDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIkF1ZGlv
UHJvY2Vzc2luZ0V2ZW50LmgiCi0KLSNpbmNsdWRlICJBdWRpb0J1ZmZlci5oIgotI2luY2x1ZGUg
IkV2ZW50TmFtZXMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPEF1ZGlv
UHJvY2Vzc2luZ0V2ZW50PiBBdWRpb1Byb2Nlc3NpbmdFdmVudDo6Y3JlYXRlKCkKLXsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvUHJvY2Vzc2luZ0V2ZW50KTsKLX0KLQotUGFzc1JlZlB0
cjxBdWRpb1Byb2Nlc3NpbmdFdmVudD4gQXVkaW9Qcm9jZXNzaW5nRXZlbnQ6OmNyZWF0ZShQYXNz
UmVmUHRyPEF1ZGlvQnVmZmVyPiBpbnB1dEJ1ZmZlciwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4g
b3V0cHV0QnVmZmVyKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVkaW9Qcm9jZXNzaW5n
RXZlbnQoaW5wdXRCdWZmZXIsIG91dHB1dEJ1ZmZlcikpOwotfQotCi1BdWRpb1Byb2Nlc3NpbmdF
dmVudDo6QXVkaW9Qcm9jZXNzaW5nRXZlbnQoKQotewotfQotCi1BdWRpb1Byb2Nlc3NpbmdFdmVu
dDo6QXVkaW9Qcm9jZXNzaW5nRXZlbnQoUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gaW5wdXRCdWZm
ZXIsIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IG91dHB1dEJ1ZmZlcikKLSAgICA6IEV2ZW50KGV2
ZW50TmFtZXMoKS5hdWRpb3Byb2Nlc3NFdmVudCwgdHJ1ZSwgZmFsc2UpCi0gICAgLCBtX2lucHV0
QnVmZmVyKGlucHV0QnVmZmVyKQotICAgICwgbV9vdXRwdXRCdWZmZXIob3V0cHV0QnVmZmVyKQot
ewotfQotCi1BdWRpb1Byb2Nlc3NpbmdFdmVudDo6fkF1ZGlvUHJvY2Vzc2luZ0V2ZW50KCkKLXsK
LX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBBdWRpb1Byb2Nlc3NpbmdFdmVudDo6aW50ZXJmYWNl
TmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JBdWRp
b1Byb2Nlc3NpbmdFdmVudDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
UHJvY2Vzc2luZ0V2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9Qcm9jZXNzaW5nRXZlbnQuaAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBdWRpb1Byb2Nlc3NpbmdFdmVudF9oCi0j
ZGVmaW5lIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50X2gKLQotI2luY2x1ZGUgIkF1ZGlvQnVmZmVyLmgi
Ci0jaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb0J1
ZmZlcjsKLSAgICAKLWNsYXNzIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50IDogcHVibGljIEV2ZW50IHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb1Byb2Nlc3NpbmdFdmVudD4gY3Jl
YXRlKCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8QXVkaW9Qcm9jZXNzaW5nRXZlbnQ+IGNyZWF0
ZShQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBpbnB1dEJ1ZmZlciwgUGFzc1JlZlB0cjxBdWRpb0J1
ZmZlcj4gb3V0cHV0QnVmZmVyKTsKLSAgICAKLSAgICB2aXJ0dWFsIH5BdWRpb1Byb2Nlc3NpbmdF
dmVudCgpOwotCi0gICAgQXVkaW9CdWZmZXIqIGlucHV0QnVmZmVyKCkgeyByZXR1cm4gbV9pbnB1
dEJ1ZmZlci5nZXQoKTsgfQotICAgIEF1ZGlvQnVmZmVyKiBvdXRwdXRCdWZmZXIoKSB7IHJldHVy
biBtX291dHB1dEJ1ZmZlci5nZXQoKTsgfQotCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJp
bmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBBdWRpb1Byb2Nlc3Np
bmdFdmVudCgpOwotICAgIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50KFBhc3NSZWZQdHI8QXVkaW9CdWZm
ZXI+IGlucHV0QnVmZmVyLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBvdXRwdXRCdWZmZXIpOwot
Ci0gICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBtX2lucHV0QnVmZmVyOwotICAgIFJlZlB0cjxBdWRp
b0J1ZmZlcj4gbV9vdXRwdXRCdWZmZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBBdWRpb1Byb2Nlc3NpbmdFdmVudF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaWRsCShyZXZpc2lvbiAxMTEyMDgp
CisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBhdWRpbyB7
Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAotICAgICAg
ICBKU0dlbmVyYXRlVG9KU09iamVjdAotICAgIF0gQXVkaW9Qcm9jZXNzaW5nRXZlbnQgOiBFdmVu
dCB7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb0J1ZmZlciBpbnB1dEJ1ZmZlcjsK
LSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlvQnVmZmVyIG91dHB1dEJ1ZmZlcjsgCi0g
ICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5o
CShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1NvdXJj
ZU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBdWRpb1Nv
dXJjZU5vZGVfaAotI2RlZmluZSBBdWRpb1NvdXJjZU5vZGVfaAotCi0jaW5jbHVkZSAiQXVkaW9O
b2RlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9Tb3VyY2VOb2RlIDog
cHVibGljIEF1ZGlvTm9kZSB7Ci1wdWJsaWM6Ci0gICAgQXVkaW9Tb3VyY2VOb2RlKEF1ZGlvQ29u
dGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICAgICAgOiBBdWRpb05vZGUoY29u
dGV4dCwgc2FtcGxlUmF0ZSkKLSAgICB7Ci0gICAgfQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwg
ZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1
YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQXVkaW9Tb3VyY2VOb2RlX2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmlkbAkocmV2
aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2Rl
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGF1ZGlvIHsKLSAg
ICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8KLSAgICBdIEF1ZGlv
U291cmNlTm9kZSA6IEF1ZGlvTm9kZSB7Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmNwcAkocmV2aXNpb24gMTExMjA4KQorKysgU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSwxNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lm
IEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJCaXF1YWREU1BLZXJuZWwuaCIKLQotI2lu
Y2x1ZGUgIkJpcXVhZFByb2Nlc3Nvci5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgot
I2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi0vLyBGSVhNRTogQXMgYSByZWN1cnNpdmUgbGluZWFyIGZpbHRlciwgZGVw
ZW5kaW5nIG9uIGl0cyBwYXJhbWV0ZXJzLCBhIGJpcXVhZCBmaWx0ZXIgY2FuIGhhdmUKLS8vIGFu
IGluZmluaXRlIHRhaWxUaW1lLiBJbiBwcmFjdGljZSwgQmlxdWFkIGZpbHRlcnMgZG8gbm90IHVz
dWFsbHkgKGV4Y2VwdCBmb3IgdmVyeSBoaWdoIHJlc29uYW5jZSB2YWx1ZXMpIAotLy8gaGF2ZSBh
IHRhaWxUaW1lIG9mIGxvbmdlciB0aGFuIGFwcHJveC4gMjAwbXMuIFRoaXMgdmFsdWUgY291bGQg
cG9zc2libHkgYmUgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUKLS8vIHNldHRpbmdzIG9mIHRoZSBC
aXF1YWQuCi1zdGF0aWMgY29uc3QgZG91YmxlIE1heEJpcXVhZERlbGF5VGltZSA9IDAuMjsKLQot
dm9pZCBCaXF1YWREU1BLZXJuZWw6OnVwZGF0ZUNvZWZmaWNpZW50c0lmTmVjZXNzYXJ5KGJvb2wg
dXNlU21vb3RoaW5nLCBib29sIGZvcmNlVXBkYXRlKQotewotICAgIGlmIChmb3JjZVVwZGF0ZSB8
fCBiaXF1YWRQcm9jZXNzb3IoKS0+ZmlsdGVyQ29lZmZpY2llbnRzRGlydHkoKSkgewotICAgICAg
ICBkb3VibGUgdmFsdWUxOwotICAgICAgICBkb3VibGUgdmFsdWUyOwotICAgICAgICBkb3VibGUg
Z2FpbjsKLSAgICAgICAgCi0gICAgICAgIGlmICh1c2VTbW9vdGhpbmcpIHsKLSAgICAgICAgICAg
IHZhbHVlMSA9IGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIxKCktPnNtb290aGVkVmFsdWUo
KTsKLSAgICAgICAgICAgIHZhbHVlMiA9IGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIyKCkt
PnNtb290aGVkVmFsdWUoKTsKLSAgICAgICAgICAgIGdhaW4gPSBiaXF1YWRQcm9jZXNzb3IoKS0+
cGFyYW1ldGVyMygpLT5zbW9vdGhlZFZhbHVlKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICB2YWx1ZTEgPSBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMSgpLT52YWx1ZSgpOwot
ICAgICAgICAgICAgdmFsdWUyID0gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjIoKS0+dmFs
dWUoKTsKLSAgICAgICAgICAgIGdhaW4gPSBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMygp
LT52YWx1ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ29udmVydCBmcm9tIEhlcnR6IHRv
IG5vcm1hbGl6ZWQgZnJlcXVlbmN5IDAgLT4gMS4KLSAgICAgICAgZG91YmxlIG55cXVpc3QgPSB0
aGlzLT5ueXF1aXN0KCk7Ci0gICAgICAgIGRvdWJsZSBub3JtYWxpemVkRnJlcXVlbmN5ID0gdmFs
dWUxIC8gbnlxdWlzdDsKLQotICAgICAgICAvLyBDb25maWd1cmUgdGhlIGJpcXVhZCB3aXRoIHRo
ZSBuZXcgZmlsdGVyIHBhcmFtZXRlcnMgZm9yIHRoZSBhcHByb3ByaWF0ZSB0eXBlIG9mIGZpbHRl
ci4KLSAgICAgICAgc3dpdGNoIChiaXF1YWRQcm9jZXNzb3IoKS0+dHlwZSgpKSB7Ci0gICAgICAg
IGNhc2UgQmlxdWFkUHJvY2Vzc29yOjpMb3dQYXNzOgotICAgICAgICAgICAgbV9iaXF1YWQuc2V0
TG93cGFzc1BhcmFtcyhub3JtYWxpemVkRnJlcXVlbmN5LCB2YWx1ZTIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBCaXF1YWRQcm9jZXNzb3I6OkhpZ2hQYXNzOgotICAgICAg
ICAgICAgbV9iaXF1YWQuc2V0SGlnaHBhc3NQYXJhbXMobm9ybWFsaXplZEZyZXF1ZW5jeSwgdmFs
dWUyKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQmlxdWFkUHJvY2Vzc29y
OjpCYW5kUGFzczoKLSAgICAgICAgICAgIG1fYmlxdWFkLnNldEJhbmRwYXNzUGFyYW1zKG5vcm1h
bGl6ZWRGcmVxdWVuY3ksIHZhbHVlMik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBj
YXNlIEJpcXVhZFByb2Nlc3Nvcjo6TG93U2hlbGY6Ci0gICAgICAgICAgICBtX2JpcXVhZC5zZXRM
b3dTaGVsZlBhcmFtcyhub3JtYWxpemVkRnJlcXVlbmN5LCBnYWluKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgQmlxdWFkUHJvY2Vzc29yOjpIaWdoU2hlbGY6Ci0gICAgICAg
ICAgICBtX2JpcXVhZC5zZXRIaWdoU2hlbGZQYXJhbXMobm9ybWFsaXplZEZyZXF1ZW5jeSwgZ2Fp
bik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEJpcXVhZFByb2Nlc3Nvcjo6
UGVha2luZzoKLSAgICAgICAgICAgIG1fYmlxdWFkLnNldFBlYWtpbmdQYXJhbXMobm9ybWFsaXpl
ZEZyZXF1ZW5jeSwgdmFsdWUyLCBnYWluKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGNhc2UgQmlxdWFkUHJvY2Vzc29yOjpOb3RjaDoKLSAgICAgICAgICAgIG1fYmlxdWFkLnNldE5v
dGNoUGFyYW1zKG5vcm1hbGl6ZWRGcmVxdWVuY3ksIHZhbHVlMik7Ci0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBjYXNlIEJpcXVhZFByb2Nlc3Nvcjo6QWxscGFzczoKLSAgICAgICAgICAg
IG1fYmlxdWFkLnNldEFsbHBhc3NQYXJhbXMobm9ybWFsaXplZEZyZXF1ZW5jeSwgdmFsdWUyKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEJpcXVhZERT
UEtlcm5lbDo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24s
IHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgQVNTRVJUKHNvdXJjZSAmJiBkZXN0aW5h
dGlvbiAmJiBiaXF1YWRQcm9jZXNzb3IoKSk7Ci0gICAgCi0gICAgLy8gUmVjb21wdXRlIGZpbHRl
ciBjb2VmZmljaWVudHMgaWYgYW55IG9mIHRoZSBwYXJhbWV0ZXJzIGhhdmUgY2hhbmdlZC4KLSAg
ICAvLyBGSVhNRTogYXMgYW4gb3B0aW1pemF0aW9uLCBpbXBsZW1lbnQgYSB3YXkgdGhhdCBhIEJp
cXVhZCBvYmplY3QgY2FuIHNpbXBseSBjb3B5IGl0cyBpbnRlcm5hbCBmaWx0ZXIgY29lZmZpY2ll
bnRzIGZyb20gYW5vdGhlciBCaXF1YWQgb2JqZWN0LgotICAgIC8vIFRoZW4gcmUtZmFjdG9yIHRo
aXMgY29kZSB0byBvbmx5IHJ1biBmb3IgdGhlIGZpcnN0IEJpcXVhZERTUEtlcm5lbCBvZiBlYWNo
IEJpcXVhZFByb2Nlc3Nvci4KLQotICAgIHVwZGF0ZUNvZWZmaWNpZW50c0lmTmVjZXNzYXJ5KHRy
dWUsIGZhbHNlKTsKLQotICAgIG1fYmlxdWFkLnByb2Nlc3Moc291cmNlLCBkZXN0aW5hdGlvbiwg
ZnJhbWVzVG9Qcm9jZXNzKTsKLX0KLQotdm9pZCBCaXF1YWREU1BLZXJuZWw6OmdldEZyZXF1ZW5j
eVJlc3BvbnNlKGludCBuRnJlcXVlbmNpZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIGZyZXF1ZW5jeUh6LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBtYWdSZXNwb25zZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCogcGhhc2VSZXNwb25zZSkK
LXsKLSAgICBib29sIGlzR29vZCA9IG5GcmVxdWVuY2llcyA+IDAgJiYgZnJlcXVlbmN5SHogJiYg
bWFnUmVzcG9uc2UgJiYgcGhhc2VSZXNwb25zZTsKLSAgICBBU1NFUlQoaXNHb29kKTsKLSAgICBp
ZiAoIWlzR29vZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPGZsb2F0PiBmcmVxdWVu
Y3kobkZyZXF1ZW5jaWVzKTsKLQotICAgIGRvdWJsZSBueXF1aXN0ID0gdGhpcy0+bnlxdWlzdCgp
OwotCi0gICAgLy8gQ29udmVydCBmcm9tIGZyZXF1ZW5jeSBpbiBIeiB0byBub3JtYWxpemVkIGZy
ZXF1ZW5jeSAoMCAtPiAxKSwKLSAgICAvLyB3aXRoIDEgZXF1YWwgdG8gdGhlIE55cXVpc3QgZnJl
cXVlbmN5LgotICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbkZyZXF1ZW5jaWVzOyArK2spCi0gICAg
ICAgIGZyZXF1ZW5jeVtrXSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZnJlcXVlbmN5SHpba10g
LyBueXF1aXN0KTsKLQotICAgIC8vIFdlIHdhbnQgdG8gZ2V0IHRoZSBmaW5hbCB2YWx1ZXMgb2Yg
dGhlIGNvZWZmaWNpZW50cyBhbmQgY29tcHV0ZQotICAgIC8vIHRoZSByZXNwb25zZSBmcm9tIHRo
YXQgaW5zdGVhZCBvZiBzb21lIGludGVybWVkaWF0ZSBzbW9vdGhlZAotICAgIC8vIHNldC4gRm9y
Y2VmdWxseSB1cGRhdGUgdGhlIGNvZWZmaWNpZW50cyBldmVuIGlmIHRoZXkgYXJlIG5vdAotICAg
IC8vIGRpcnR5LgotCi0gICAgdXBkYXRlQ29lZmZpY2llbnRzSWZOZWNlc3NhcnkoZmFsc2UsIHRy
dWUpOwotCi0gICAgbV9iaXF1YWQuZ2V0RnJlcXVlbmN5UmVzcG9uc2UobkZyZXF1ZW5jaWVzLCBm
cmVxdWVuY3kuZGF0YSgpLCBtYWdSZXNwb25zZSwgcGhhc2VSZXNwb25zZSk7Ci19Ci0KLWRvdWJs
ZSBCaXF1YWREU1BLZXJuZWw6OnRhaWxUaW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gTWF4Qmlx
dWFkRGVsYXlUaW1lOwotfQotCi1kb3VibGUgQmlxdWFkRFNQS2VybmVsOjpsYXRlbmN5VGltZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9CaXF1YWREU1BLZXJuZWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9CaXF1YWREU1BLZXJuZWwuaAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
LSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgQmlxdWFkRFNQS2VybmVsX2gKLSNkZWZpbmUgQmlxdWFk
RFNQS2VybmVsX2gKLQotI2luY2x1ZGUgIkF1ZGlvRFNQS2VybmVsLmgiCi0jaW5jbHVkZSAiQmlx
dWFkLmgiCi0jaW5jbHVkZSAiQmlxdWFkUHJvY2Vzc29yLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgQmlxdWFkUHJvY2Vzc29yOwotCi0vLyBCaXF1YWREU1BLZXJuZWwgaXMgYW4g
QXVkaW9EU1BLZXJuZWwgYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBmaWx0ZXJpbmcgb25lIGNoYW5u
ZWwgb2YgYSBCaXF1YWRQcm9jZXNzb3IgdXNpbmcgYSBCaXF1YWQgb2JqZWN0LgotCi1jbGFzcyBC
aXF1YWREU1BLZXJuZWwgOiBwdWJsaWMgQXVkaW9EU1BLZXJuZWwgewotcHVibGljOiAgCi0gICAg
QmlxdWFkRFNQS2VybmVsKEJpcXVhZFByb2Nlc3NvciogcHJvY2Vzc29yKQotICAgIDogQXVkaW9E
U1BLZXJuZWwocHJvY2Vzc29yKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgLy8gQXVkaW9EU1BL
ZXJuZWwKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlLCBmbG9h
dCogZGVzdCwgc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgdmlydHVhbCB2b2lkIHJlc2V0
KCkgeyBtX2JpcXVhZC5yZXNldCgpOyB9Ci0KLSAgICAvLyBHZXQgdGhlIG1hZ25pdHVkZSBhbmQg
cGhhc2UgcmVzcG9uc2Ugb2YgdGhlIGZpbHRlciBhdCB0aGUgZ2l2ZW4KLSAgICAvLyBzZXQgb2Yg
ZnJlcXVlbmNpZXMgKGluIEh6KS4gVGhlIHBoYXNlIHJlc3BvbnNlIGlzIGluIHJhZGlhbnMuCi0g
ICAgdm9pZCBnZXRGcmVxdWVuY3lSZXNwb25zZShpbnQgbkZyZXF1ZW5jaWVzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIGZyZXF1ZW5jeUh6LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIG1hZ1Jlc3BvbnNlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmxvYXQqIHBoYXNlUmVzcG9uc2UpOwotCi0gICAgdmlydHVhbCBkb3Vi
bGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5
VGltZSgpIGNvbnN0IE9WRVJSSURFOwotCi1wcm90ZWN0ZWQ6Ci0gICAgQmlxdWFkIG1fYmlxdWFk
OwotICAgIEJpcXVhZFByb2Nlc3NvciogYmlxdWFkUHJvY2Vzc29yKCkgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8QmlxdWFkUHJvY2Vzc29yKj4ocHJvY2Vzc29yKCkpOyB9Ci0KLSAgICAvLyBUbyBwcmV2
ZW50IGF1ZGlvIGdsaXRjaGVzIHdoZW4gcGFyYW1ldGVycyBhcmUgY2hhbmdlZCwKLSAgICAvLyBk
ZXppcHBlcmluZyBpcyB1c2VkIHRvIHNsb3dseSBjaGFuZ2UgdGhlIHBhcmFtZXRlcnMuCi0gICAg
Ly8gfHVzZVNtb290aGluZ3wgaW1wbGllcyB0aGF0IHdlIHdhbnQgdG8gdXBkYXRlIHVzaW5nIHRo
ZQotICAgIC8vIHNtb290aGVkIHZhbHVlcy4gT3RoZXJ3aXNlIHRoZSBmaW5hbCB0YXJnZXQgdmFs
dWVzIGFyZQotICAgIC8vIHVzZWQuIElmIHxmb3JjZVVwZGF0ZXwgaXMgdHJ1ZSwgd2UgdXBkYXRl
IHRoZSBjb2VmZmljaWVudHMgZXZlbgotICAgIC8vIGlmIHRoZXkgYXJlIG5vdCBkaXJ0eS4gKFVz
ZWQgd2hlbiBjb21wdXRpbmcgdGhlIGZyZXF1ZW5jeQotICAgIC8vIHJlc3BvbnNlLikKLSAgICB2
b2lkIHVwZGF0ZUNvZWZmaWNpZW50c0lmTmVjZXNzYXJ5KGJvb2wgdXNlU21vb3RoaW5nLCBib29s
IGZvcmNlVXBkYXRlKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEJpcXVhZERTUEtlcm5lbF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRG
aWx0ZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1
YWRGaWx0ZXJOb2RlLmNwcAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
LSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVE
SU8pCi0KLSNpbmNsdWRlICJCaXF1YWRGaWx0ZXJOb2RlLmgiCi0KLSNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQmlxdWFkRmlsdGVyTm9kZTo6Qmlx
dWFkRmlsdGVyTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0g
ICAgOiBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQotewotICAg
IC8vIEluaXRpYWxseSBzZXR1cCBhcyBsb3dwYXNzIGZpbHRlci4KLSAgICBtX3Byb2Nlc3NvciA9
IGFkb3B0UHRyKG5ldyBCaXF1YWRQcm9jZXNzb3IoQmlxdWFkUHJvY2Vzc29yOjpMb3dQYXNzLCBz
YW1wbGVSYXRlLCAxLCBmYWxzZSkpOwotICAgIGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIx
KCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRl
cjIoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1l
dGVyMygpLT5zZXRDb250ZXh0KGNvbnRleHQpOwotICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlQmlx
dWFkRmlsdGVyKTsKLX0KLQotdm9pZCBCaXF1YWRGaWx0ZXJOb2RlOjpzZXRUeXBlKHVuc2lnbmVk
IHNob3J0IHR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICh0eXBlID4gQmlxdWFk
UHJvY2Vzc29yOjpBbGxwYXNzKSB7Ci0gICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgYmlxdWFkUHJvY2Vzc29yKCktPnNldFR5
cGUoc3RhdGljX2Nhc3Q8QmlxdWFkUHJvY2Vzc29yOjpGaWx0ZXJUeXBlPih0eXBlKSk7Ci19Ci0K
LQotdm9pZCBCaXF1YWRGaWx0ZXJOb2RlOjpnZXRGcmVxdWVuY3lSZXNwb25zZShjb25zdCBGbG9h
dDMyQXJyYXkqIGZyZXF1ZW5jeUh6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGbG9hdDMyQXJyYXkqIG1hZ1Jlc3BvbnNlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdDMyQXJyYXkqIHBoYXNlUmVzcG9uc2UpCi17
Ci0gICAgaWYgKCFmcmVxdWVuY3lIeiB8fCAhbWFnUmVzcG9uc2UgfHwgIXBoYXNlUmVzcG9uc2Up
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpbnQgbiA9IHN0ZDo6bWluKGZyZXF1ZW5jeUh6
LT5sZW5ndGgoKSwKLSAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWluKG1hZ1Jlc3BvbnNlLT5s
ZW5ndGgoKSwgcGhhc2VSZXNwb25zZS0+bGVuZ3RoKCkpKTsKLQotICAgIGlmIChuKSB7Ci0gICAg
ICAgIGJpcXVhZFByb2Nlc3NvcigpLT5nZXRGcmVxdWVuY3lSZXNwb25zZShuLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlcXVlbmN5SHotPmRhdGEo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZ1Jl
c3BvbnNlLT5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwaGFzZVJlc3BvbnNlLT5kYXRhKCkpOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmgJKHJldmlzaW9uIDExMTIwOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBCaXF1YWRGaWx0ZXJOb2Rl
X2gKLSNkZWZpbmUgQmlxdWFkRmlsdGVyTm9kZV9oCi0KLSNpbmNsdWRlICJBdWRpb0Jhc2ljUHJv
Y2Vzc29yTm9kZS5oIgotI2luY2x1ZGUgIkJpcXVhZFByb2Nlc3Nvci5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvUGFyYW07Ci0gICAgCi1jbGFzcyBCaXF1YWRGaWx0ZXJO
b2RlIDogcHVibGljIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlIHsKLXB1YmxpYzoKLSAgICAvLyBU
aGVzZSBtdXN0IGJlIGRlZmluZWQgYXMgaW4gdGhlIC5pZGwgZmlsZSBhbmQgbXVzdCBtYXRjaCB0
aG9zZSBpbiB0aGUgQmlxdWFkUHJvY2Vzc29yIGNsYXNzLgotICAgIGVudW0gewotICAgICAgICBM
T1dQQVNTID0gMCwKLSAgICAgICAgSElHSFBBU1MgPSAxLAotICAgICAgICBCQU5EUEFTUyA9IDIs
Ci0gICAgICAgIExPV1NIRUxGID0gMywKLSAgICAgICAgSElHSFNIRUxGID0gNCwKLSAgICAgICAg
UEVBS0lORyA9IDUsCi0gICAgICAgIE5PVENIID0gNiwKLSAgICAgICAgQUxMUEFTUyA9IDcKLSAg
ICB9OwotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8QmlxdWFkRmlsdGVyTm9kZT4gY3JlYXRlKEF1
ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQmlxdWFkRmlsdGVyTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKSk7
ICAgICAgCi0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIHNob3J0IHR5cGUoKSB7IHJldHVybiBi
aXF1YWRQcm9jZXNzb3IoKS0+dHlwZSgpOyB9Ci0gICAgdm9pZCBzZXRUeXBlKHVuc2lnbmVkIHNo
b3J0IHR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIEF1ZGlvUGFyYW0qIGZyZXF1ZW5jeSgp
IHsgcmV0dXJuIGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIxKCk7IH0KLSAgICBBdWRpb1Bh
cmFtKiBxKCkgeyByZXR1cm4gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjIoKTsgfQotICAg
IEF1ZGlvUGFyYW0qIGdhaW4oKSB7IHJldHVybiBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVy
MygpOyB9Ci0KLSAgICAvLyBHZXQgdGhlIG1hZ25pdHVkZSBhbmQgcGhhc2UgcmVzcG9uc2Ugb2Yg
dGhlIGZpbHRlciBhdCB0aGUgZ2l2ZW4KLSAgICAvLyBzZXQgb2YgZnJlcXVlbmNpZXMgKGluIEh6
KS4gVGhlIHBoYXNlIHJlc3BvbnNlIGlzIGluIHJhZGlhbnMuCi0gICAgdm9pZCBnZXRGcmVxdWVu
Y3lSZXNwb25zZShjb25zdCBGbG9hdDMyQXJyYXkqIGZyZXF1ZW5jeUh6LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRmxvYXQzMkFycmF5KiBtYWdSZXNwb25zZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZsb2F0MzJBcnJheSogcGhhc2VSZXNwb25zZSk7Ci0KLXByaXZh
dGU6Ci0gICAgQmlxdWFkRmlsdGVyTm9kZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRl
KTsKLQotICAgIEJpcXVhZFByb2Nlc3NvciogYmlxdWFkUHJvY2Vzc29yKCkgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8QmlxdWFkUHJvY2Vzc29yKj4ocHJvY2Vzc29yKCkpOyB9Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBCaXF1YWRGaWx0ZXJOb2RlX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaWRsCShyZXZpc2lvbiAx
MTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmlkbAko
d29ya2luZyBjb3B5KQpAQCAtMSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGF1ZGlv
IHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCi0gICAg
ICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0Ci0gICAgXSBCaXF1YWRGaWx0ZXJOb2RlIDogQXVkaW9O
b2RlIHsKLSAgICAgICAgLy8gRmlsdGVyIHR5cGUuCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IExPV1BBU1MgPSAwOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBISUdIUEFTUyA9
IDE7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEJBTkRQQVNTID0gMjsKLSAgICAgICAg
Y29uc3QgdW5zaWduZWQgc2hvcnQgTE9XU0hFTEYgPSAzOwotICAgICAgICBjb25zdCB1bnNpZ25l
ZCBzaG9ydCBISUdIU0hFTEYgPSA0OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBQRUFL
SU5HID0gNTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTk9UQ0ggPSA2OwotICAgICAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCBBTExQQVNTID0gNzsKLQotICAgICAgICBhdHRyaWJ1dGUg
dW5zaWduZWQgc2hvcnQgdHlwZQotICAgICAgICAgICAgc2V0dGVyIHJhaXNlcyhET01FeGNlcHRp
b24pOwotICAgICAgICAKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlvUGFyYW0gZnJl
cXVlbmN5OyAvLyBpbiBIZXJ0egotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9QYXJh
bSBROyAvLyBRdWFsaXR5IGZhY3RvcgotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9Q
YXJhbSBnYWluOyAvLyBpbiBEZWNpYmVscwotCi0gICAgICAgIHZvaWQgZ2V0RnJlcXVlbmN5UmVz
cG9uc2UoaW4gRmxvYXQzMkFycmF5IGZyZXF1ZW5jeUh6LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluIEZsb2F0MzJBcnJheSBtYWdSZXNwb25zZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbiBGbG9hdDMyQXJyYXkgcGhhc2VSZXNwb25zZSk7Ci0gICAg
fTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmNw
cAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkUHJv
Y2Vzc29yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0g
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRl
ICJCaXF1YWRQcm9jZXNzb3IuaCIKLQotI2luY2x1ZGUgIkJpcXVhZERTUEtlcm5lbC5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1CaXF1YWRQcm9jZXNzb3I6OkJpcXVhZFByb2Nlc3Nv
cihmbG9hdCBzYW1wbGVSYXRlLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscywgYm9vbCBhdXRvSW5p
dGlhbGl6ZSkKLSAgICA6IEF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yKHNhbXBsZVJhdGUsIG51bWJl
ck9mQ2hhbm5lbHMpCi0gICAgLCBtX3R5cGUoTG93UGFzcykKLSAgICAsIG1fcGFyYW1ldGVyMSgw
KQotICAgICwgbV9wYXJhbWV0ZXIyKDApCi0gICAgLCBtX3BhcmFtZXRlcjMoMCkKLSAgICAsIG1f
ZmlsdGVyQ29lZmZpY2llbnRzRGlydHkodHJ1ZSkKLXsKLSAgICBkb3VibGUgbnlxdWlzdCA9IDAu
NSAqIHRoaXMtPnNhbXBsZVJhdGUoKTsKLQotICAgIC8vIENyZWF0ZSBwYXJhbWV0ZXJzIGZvciBC
aXF1YWRGaWx0ZXJOb2RlLgotICAgIG1fcGFyYW1ldGVyMSA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgi
ZnJlcXVlbmN5IiwgMzUwLjAsIDEwLjAsIG55cXVpc3QpOwotICAgIG1fcGFyYW1ldGVyMiA9IEF1
ZGlvUGFyYW06OmNyZWF0ZSgiUSIsIDEsIDAuMDAwMSwgMTAwMC4wKTsKLSAgICBtX3BhcmFtZXRl
cjMgPSBBdWRpb1BhcmFtOjpjcmVhdGUoImdhaW4iLCAwLjAsIC00MCwgNDApOwotCi0gICAgaWYg
KGF1dG9Jbml0aWFsaXplKQotICAgICAgICBpbml0aWFsaXplKCk7Ci19Ci0KLUJpcXVhZFByb2Nl
c3Nvcjo6QmlxdWFkUHJvY2Vzc29yKEZpbHRlclR5cGUgdHlwZSwgZmxvYXQgc2FtcGxlUmF0ZSwg
c2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGJvb2wgYXV0b0luaXRpYWxpemUpCi0gICAgOiBBdWRp
b0RTUEtlcm5lbFByb2Nlc3NvcihzYW1wbGVSYXRlLCBudW1iZXJPZkNoYW5uZWxzKQotICAgICwg
bV90eXBlKHR5cGUpCi0gICAgLCBtX3BhcmFtZXRlcjEoMCkKLSAgICAsIG1fcGFyYW1ldGVyMigw
KQotICAgICwgbV9wYXJhbWV0ZXIzKDApCi0gICAgLCBtX2ZpbHRlckNvZWZmaWNpZW50c0RpcnR5
KHRydWUpCi17Ci0gICAgZG91YmxlIG55cXVpc3QgPSAwLjUgKiB0aGlzLT5zYW1wbGVSYXRlKCk7
Ci0gICAgCi0gICAgLy8gSGFuZGxlIHRoZSBkZXByZWNhdGVkIExvd1Bhc3MyRmlsdGVyTm9kZSBh
bmQgSGlnaFBhc3MyRmlsdGVyTm9kZS4KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAvLyBIaWdo
cGFzcyBhbmQgbG93cGFzcyBzaGFyZSB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFuZCBvbmx5IGRpZmZl
ciBpbiBmaWx0ZXIgdHlwZS4KLSAgICBjYXNlIExvd1Bhc3M6Ci0gICAgY2FzZSBIaWdoUGFzczoK
LSAgICAgICAgbV9wYXJhbWV0ZXIxID0gQXVkaW9QYXJhbTo6Y3JlYXRlKCJmcmVxdWVuY3kiLCAz
NTAuMCwgMjAuMCwgbnlxdWlzdCk7Ci0gICAgICAgIG1fcGFyYW1ldGVyMiA9IEF1ZGlvUGFyYW06
OmNyZWF0ZSgicmVzb25hbmNlIiwgMC4wLCAtMjAuMCwgMjAuMCk7Ci0gICAgICAgIG1fcGFyYW1l
dGVyMyA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgidW51c2VkIiwgMC4wLCAwLjAsIDEuMCk7Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgfQotCi0gICAgaWYgKGF1dG9Jbml0aWFsaXplKQotICAgICAgICBpbml0aWFsaXplKCk7
Ci19Ci0KLUJpcXVhZFByb2Nlc3Nvcjo6fkJpcXVhZFByb2Nlc3NvcigpCi17Ci0gICAgaWYgKGlz
SW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgdW5pbml0aWFsaXplKCk7Ci19Ci0KLVBhc3NPd25QdHI8
QXVkaW9EU1BLZXJuZWw+IEJpcXVhZFByb2Nlc3Nvcjo6Y3JlYXRlS2VybmVsKCkKLXsKLSAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IEJpcXVhZERTUEtlcm5lbCh0aGlzKSk7Ci19Ci0KLXZvaWQgQmlx
dWFkUHJvY2Vzc29yOjpjaGVja0ZvckRpcnR5Q29lZmZpY2llbnRzKCkKLXsKLSAgICAvLyBEZWFs
IHdpdGggc21vb3RoaW5nIC8gZGUtemlwcGVyaW5nLiBTdGFydCBvdXQgYXNzdW1pbmcgZmlsdGVy
IHBhcmFtZXRlcnMgYXJlIG5vdCBjaGFuZ2luZy4KLQotICAgIC8vIFRoZSBCaXF1YWREU1BLZXJu
ZWwgb2JqZWN0cyByZWx5IG9uIHRoaXMgdmFsdWUgdG8gc2VlIGlmIHRoZXkgbmVlZCB0byByZS1j
b21wdXRlIHRoZWlyIGludGVybmFsIGZpbHRlciBjb2VmZmljaWVudHMuCi0gICAgbV9maWx0ZXJD
b2VmZmljaWVudHNEaXJ0eSA9IGZhbHNlOwotICAgIAotICAgIGlmIChtX2hhc0p1c3RSZXNldCkg
ewotICAgICAgICAvLyBTbmFwIHRvIGV4YWN0IHZhbHVlcyBmaXJzdCB0aW1lIGFmdGVyIHJlc2V0
LCB0aGVuIHNtb290aCBmb3Igc3Vic2VxdWVudCBjaGFuZ2VzLgotICAgICAgICBtX3BhcmFtZXRl
cjEtPnJlc2V0U21vb3RoZWRWYWx1ZSgpOwotICAgICAgICBtX3BhcmFtZXRlcjItPnJlc2V0U21v
b3RoZWRWYWx1ZSgpOwotICAgICAgICBtX3BhcmFtZXRlcjMtPnJlc2V0U21vb3RoZWRWYWx1ZSgp
OwotICAgICAgICBtX2ZpbHRlckNvZWZmaWNpZW50c0RpcnR5ID0gdHJ1ZTsKLSAgICAgICAgbV9o
YXNKdXN0UmVzZXQgPSBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBTbW9vdGggYWxs
IG9mIHRoZSBmaWx0ZXIgcGFyYW1ldGVycy4gSWYgdGhleSBoYXZlbid0IHlldCBjb252ZXJnZWQg
dG8gdGhlaXIgdGFyZ2V0IHZhbHVlIHRoZW4gbWFyayBjb2VmZmljaWVudHMgYXMgZGlydHkuCi0g
ICAgICAgIGJvb2wgaXNTdGFibGUxID0gbV9wYXJhbWV0ZXIxLT5zbW9vdGgoKTsKLSAgICAgICAg
Ym9vbCBpc1N0YWJsZTIgPSBtX3BhcmFtZXRlcjItPnNtb290aCgpOwotICAgICAgICBib29sIGlz
U3RhYmxlMyA9IG1fcGFyYW1ldGVyMy0+c21vb3RoKCk7Ci0gICAgICAgIGlmICghKGlzU3RhYmxl
MSAmJiBpc1N0YWJsZTIgJiYgaXNTdGFibGUzKSkKLSAgICAgICAgICAgIG1fZmlsdGVyQ29lZmZp
Y2llbnRzRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBCaXF1YWRQcm9jZXNzb3I6OnBy
b2Nlc3MoY29uc3QgQXVkaW9CdXMqIHNvdXJjZSwgQXVkaW9CdXMqIGRlc3RpbmF0aW9uLCBzaXpl
X3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIGlmICghaXNJbml0aWFsaXplZCgpKSB7Ci0gICAg
ICAgIGRlc3RpbmF0aW9uLT56ZXJvKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgICAg
IAotICAgIGNoZWNrRm9yRGlydHlDb2VmZmljaWVudHMoKTsKLSAgICAgICAgICAgIAotICAgIC8v
IEZvciBlYWNoIGNoYW5uZWwgb2Ygb3VyIGlucHV0LCBwcm9jZXNzIHVzaW5nIHRoZSBjb3JyZXNw
b25kaW5nIEJpcXVhZERTUEtlcm5lbCBpbnRvIHRoZSBvdXRwdXQgY2hhbm5lbC4KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9rZXJuZWxzLnNpemUoKTsgKytpKQotICAgICAgICBtX2tl
cm5lbHNbaV0tPnByb2Nlc3Moc291cmNlLT5jaGFubmVsKGkpLT5kYXRhKCksIGRlc3RpbmF0aW9u
LT5jaGFubmVsKGkpLT5tdXRhYmxlRGF0YSgpLCBmcmFtZXNUb1Byb2Nlc3MpOwotfQotCi12b2lk
IEJpcXVhZFByb2Nlc3Nvcjo6c2V0VHlwZShGaWx0ZXJUeXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5
cGUgIT0gbV90eXBlKSB7Ci0gICAgICAgIG1fdHlwZSA9IHR5cGU7Ci0gICAgICAgIHJlc2V0KCk7
IC8vIFRoZSBmaWx0ZXIgc3RhdGUgbXVzdCBiZSByZXNldCBvbmx5IGlmIHRoZSB0eXBlIGhhcyBj
aGFuZ2VkLgotICAgIH0KLX0KLQotdm9pZCBCaXF1YWRQcm9jZXNzb3I6OmdldEZyZXF1ZW5jeVJl
c3BvbnNlKGludCBuRnJlcXVlbmNpZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZmxvYXQqIGZyZXF1ZW5jeUh6LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBtYWdSZXNwb25zZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCogcGhhc2VSZXNwb25zZSkKLXsK
LSAgICAvLyBDb21wdXRlIHRoZSBmcmVxdWVuY3kgcmVzcG9uc2Ugb24gYSBzZXBhcmF0ZSB0ZW1w
b3Jhcnkga2VybmVsCi0gICAgLy8gdG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCB0aGUgcHJvY2Vz
c2luZyBydW5uaW5nIGluIHRoZSBhdWRpbwotICAgIC8vIHRocmVhZCBvbiB0aGUgbWFpbiBrZXJu
ZWxzLgotICAgIAotICAgIE93blB0cjxCaXF1YWREU1BLZXJuZWw+IHJlc3BvbnNlS2VybmVsID0g
YWRvcHRQdHIobmV3IEJpcXVhZERTUEtlcm5lbCh0aGlzKSk7Ci0KLSAgICByZXNwb25zZUtlcm5l
bC0+Z2V0RnJlcXVlbmN5UmVzcG9uc2UobkZyZXF1ZW5jaWVzLCBmcmVxdWVuY3lIeiwgbWFnUmVz
cG9uc2UsIHBoYXNlUmVzcG9uc2UpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QmlxdWFkUHJvY2Vzc29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QmlxdWFkUHJvY2Vzc29yLmgJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0g
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIEJpcXVhZFByb2Nlc3Nvcl9oCi0jZGVmaW5lIEJpcXVhZFBy
b2Nlc3Nvcl9oCi0KLSNpbmNsdWRlICJBdWRpb0RTUEtlcm5lbC5oIgotI2luY2x1ZGUgIkF1ZGlv
RFNQS2VybmVsUHJvY2Vzc29yLmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCi0jaW5jbHVkZSAi
QXVkaW9QYXJhbS5oIgotI2luY2x1ZGUgIkJpcXVhZC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBCaXF1YWRQcm9jZXNzb3IgaXMgYW4gQXVk
aW9EU1BLZXJuZWxQcm9jZXNzb3Igd2hpY2ggdXNlcyBCaXF1YWQgb2JqZWN0cyB0byBpbXBsZW1l
bnQgc2V2ZXJhbCBjb21tb24gZmlsdGVycy4KLQotY2xhc3MgQmlxdWFkUHJvY2Vzc29yIDogcHVi
bGljIEF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yIHsKLXB1YmxpYzoKLSAgICBlbnVtIEZpbHRlclR5
cGUgewotICAgICAgICBMb3dQYXNzID0gMCwKLSAgICAgICAgSGlnaFBhc3MgPSAxLAotICAgICAg
ICBCYW5kUGFzcyA9IDIsCi0gICAgICAgIExvd1NoZWxmID0gMywKLSAgICAgICAgSGlnaFNoZWxm
ID0gNCwKLSAgICAgICAgUGVha2luZyA9IDUsCi0gICAgICAgIE5vdGNoID0gNiwKLSAgICAgICAg
QWxscGFzcyA9IDcKLSAgICB9OwotCi0gICAgQmlxdWFkUHJvY2Vzc29yKGZsb2F0IHNhbXBsZVJh
dGUsIHNpemVfdCBudW1iZXJPZkNoYW5uZWxzLCBib29sIGF1dG9Jbml0aWFsaXplKTsKLQotICAg
IC8vIE9sZCBjb25zdHJ1Y3RvciB1c2VkIGJ5IGRlcHJlY2F0ZWQgTG93UGFzczJGaWx0ZXJOb2Rl
IGFuZCBIaWdoUGFzczJGaWx0ZXJOb2RlCi0gICAgQmlxdWFkUHJvY2Vzc29yKEZpbHRlclR5cGUs
IGZsb2F0IHNhbXBsZVJhdGUsIHNpemVfdCBudW1iZXJPZkNoYW5uZWxzLCBib29sIGF1dG9Jbml0
aWFsaXplID0gdHJ1ZSk7Ci0KLSAgICB2aXJ0dWFsIH5CaXF1YWRQcm9jZXNzb3IoKTsKLSAgICAK
LSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8QXVkaW9EU1BLZXJuZWw+IGNyZWF0ZUtlcm5lbCgpOwot
ICAgICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzcyhjb25zdCBBdWRpb0J1cyogc291cmNl
LCBBdWRpb0J1cyogZGVzdGluYXRpb24sIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwotCi0gICAg
Ly8gR2V0IHRoZSBtYWduaXR1ZGUgYW5kIHBoYXNlIHJlc3BvbnNlIG9mIHRoZSBmaWx0ZXIgYXQg
dGhlIGdpdmVuCi0gICAgLy8gc2V0IG9mIGZyZXF1ZW5jaWVzIChpbiBIeikuIFRoZSBwaGFzZSBy
ZXNwb25zZSBpcyBpbiByYWRpYW5zLgotICAgIHZvaWQgZ2V0RnJlcXVlbmN5UmVzcG9uc2UoaW50
IG5GcmVxdWVuY2llcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0
KiBmcmVxdWVuY3lIeiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBtYWdS
ZXNwb25zZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBwaGFzZVJlc3Bv
bnNlKTsKLQotICAgIHZvaWQgY2hlY2tGb3JEaXJ0eUNvZWZmaWNpZW50cygpOwotICAgIAotICAg
IGJvb2wgZmlsdGVyQ29lZmZpY2llbnRzRGlydHkoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlckNv
ZWZmaWNpZW50c0RpcnR5OyB9Ci0KLSAgICBBdWRpb1BhcmFtKiBwYXJhbWV0ZXIxKCkgeyByZXR1
cm4gbV9wYXJhbWV0ZXIxLmdldCgpOyB9Ci0gICAgQXVkaW9QYXJhbSogcGFyYW1ldGVyMigpIHsg
cmV0dXJuIG1fcGFyYW1ldGVyMi5nZXQoKTsgfQotICAgIEF1ZGlvUGFyYW0qIHBhcmFtZXRlcjMo
KSB7IHJldHVybiBtX3BhcmFtZXRlcjMuZ2V0KCk7IH0KLQotICAgIEZpbHRlclR5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIHZvaWQgc2V0VHlwZShGaWx0ZXJUeXBlKTsK
LQotcHJpdmF0ZToKLSAgICBGaWx0ZXJUeXBlIG1fdHlwZTsKLQotICAgIFJlZlB0cjxBdWRpb1Bh
cmFtPiBtX3BhcmFtZXRlcjE7Ci0gICAgUmVmUHRyPEF1ZGlvUGFyYW0+IG1fcGFyYW1ldGVyMjsK
LSAgICBSZWZQdHI8QXVkaW9QYXJhbT4gbV9wYXJhbWV0ZXIzOwotCi0gICAgLy8gc28gRFNQIGtl
cm5lbHMga25vdyB3aGVuIHRvIHJlLWNvbXB1dGUgY29lZmZpY2llbnRzCi0gICAgYm9vbCBtX2Zp
bHRlckNvZWZmaWNpZW50c0RpcnR5OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gQmlxdWFkUHJvY2Vzc29yX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0NvbnZvbHZlck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0NvbnZvbHZlck5vZGUuY3BwCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNjggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
LSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVE
SU8pCi0KLSNpbmNsdWRlICJDb252b2x2ZXJOb2RlLmgiCi0KLSNpbmNsdWRlICJBdWRpb0J1ZmZl
ci5oIgotI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0
LmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCi0jaW5jbHVkZSAiUmV2ZXJiLmgiCi0j
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotLy8gTm90ZSBhYm91dCBlbXBpcmljYWwgdHVu
aW5nOgotLy8gVGhlIG1heGltdW0gRkZUIHNpemUgYWZmZWN0cyByZXZlcmIgcGVyZm9ybWFuY2Ug
YW5kIGFjY3VyYWN5LgotLy8gSWYgdGhlIHJldmVyYiBpcyBzaW5nbGUtdGhyZWFkZWQgYW5kIHBy
b2Nlc3NlcyBlbnRpcmVseSBpbiB0aGUgcmVhbC10aW1lIGF1ZGlvIHRocmVhZCwKLS8vIGl0J3Mg
aW1wb3J0YW50IG5vdCB0byBtYWtlIHRoaXMgdG9vIGhpZ2guICBJbiB0aGlzIGNhc2UgODE5MiBp
cyBhIGdvb2QgdmFsdWUuCi0vLyBCdXQsIHRoZSBSZXZlcmIgb2JqZWN0IGlzIG11bHRpLXRocmVh
ZGVkLCBzbyB3ZSB3YW50IHRoaXMgYXMgaGlnaCBhcyBwb3NzaWJsZSB3aXRob3V0IGxvc2luZyB0
b28gbXVjaCBhY2N1cmFjeS4KLS8vIFZlcnkgbGFyZ2UgRkZUcyB3aWxsIGhhdmUgd29yc2UgcGhh
c2UgZXJyb3JzLiBHaXZlbiB0aGVzZSBjb25zdHJhaW50cyAzMjc2OCBpcyBhIGdvb2QgY29tcHJv
bWlzZS4KLWNvbnN0IHNpemVfdCBNYXhGRlRTaXplID0gMzI3Njg7Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotQ29udm9sdmVyTm9kZTo6Q29udm9sdmVyTm9kZShBdWRpb0NvbnRleHQqIGNvbnRl
eHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBBdWRpb05vZGUoY29udGV4dCwgc2FtcGxlUmF0
ZSkKLSAgICAsIG1fbm9ybWFsaXplKHRydWUpCi17Ci0gICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3
IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7Ci0gICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRp
b05vZGVPdXRwdXQodGhpcywgMikpKTsKLSAgICAKLSAgICBzZXROb2RlVHlwZShOb2RlVHlwZUNv
bnZvbHZlcik7Ci0gICAgCi0gICAgaW5pdGlhbGl6ZSgpOwotfQotCi1Db252b2x2ZXJOb2RlOjp+
Q29udm9sdmVyTm9kZSgpCi17Ci0gICAgdW5pbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgQ29udm9s
dmVyTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIEF1ZGlvQnVz
KiBvdXRwdXRCdXMgPSBvdXRwdXQoMCktPmJ1cygpOwotICAgIEFTU0VSVChvdXRwdXRCdXMpOwot
Ci0gICAgLy8gU3luY2hyb25pemUgd2l0aCBwb3NzaWJsZSBkeW5hbWljIGNoYW5nZXMgdG8gdGhl
IGltcHVsc2UgcmVzcG9uc2UuCi0gICAgaWYgKG1fcHJvY2Vzc0xvY2sudHJ5TG9jaygpKSB7Ci0g
ICAgICAgIGlmICghaXNJbml0aWFsaXplZCgpIHx8ICFtX3JldmVyYi5nZXQoKSkKLSAgICAgICAg
ICAgIG91dHB1dEJ1cy0+emVybygpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFBy
b2Nlc3MgdXNpbmcgdGhlIGNvbnZvbHV0aW9uIGVuZ2luZS4KLSAgICAgICAgICAgIC8vIE5vdGUg
dGhhdCB3ZSBjYW4gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG5vdGhpbmcgaXMgY29ubmVjdGVkIHRv
IHRoZSBpbnB1dCwgaW4gd2hpY2ggY2FzZSB3ZSdsbCBqdXN0IGZlZWQgc2lsZW5jZSBpbnRvIHRo
ZSBjb252b2x2ZXIuCi0gICAgICAgICAgICAvLyBGSVhNRTogIElmIHdlIHdhbnRlZCB0byBnZXQg
ZmFuY3kgd2UgY291bGQgdHJ5IHRvIGZhY3RvciBpbiB0aGUgJ3RhaWwgdGltZScgYW5kIHN0b3Ag
cHJvY2Vzc2luZyBvbmNlIHRoZSB0YWlsIGRpZXMgZG93biBpZgotICAgICAgICAgICAgLy8gd2Ug
a2VlcCBnZXR0aW5nIGZlZCBzaWxlbmNlLgotICAgICAgICAgICAgbV9yZXZlcmItPnByb2Nlc3Mo
aW5wdXQoMCktPmJ1cygpLCBvdXRwdXRCdXMsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIG1fcHJvY2Vzc0xvY2sudW5sb2NrKCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgLy8gVG9vIGJhZCAtIHRoZSB0cnlMb2NrKCkgZmFpbGVkLiAgV2UgbXVzdCBiZSBp
biB0aGUgbWlkZGxlIG9mIHNldHRpbmcgYSBuZXcgaW1wdWxzZSByZXNwb25zZS4KLSAgICAgICAg
b3V0cHV0QnVzLT56ZXJvKCk7Ci0gICAgfQotfQotCi12b2lkIENvbnZvbHZlck5vZGU6OnJlc2V0
KCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9wcm9jZXNzTG9jayk7Ci0gICAgaWYgKG1f
cmV2ZXJiLmdldCgpKQotICAgICAgICBtX3JldmVyYi0+cmVzZXQoKTsKLX0KLQotdm9pZCBDb252
b2x2ZXJOb2RlOjppbml0aWFsaXplKCkKLXsKLSAgICBpZiAoaXNJbml0aWFsaXplZCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIEF1ZGlvTm9kZTo6aW5pdGlhbGl6ZSgpOwotfQot
Ci12b2lkIENvbnZvbHZlck5vZGU6OnVuaW5pdGlhbGl6ZSgpCi17Ci0gICAgaWYgKCFpc0luaXRp
YWxpemVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcmV2ZXJiLmNsZWFyKCk7Ci0gICAg
QXVkaW9Ob2RlOjp1bmluaXRpYWxpemUoKTsKLX0KLQotdm9pZCBDb252b2x2ZXJOb2RlOjpzZXRC
dWZmZXIoQXVkaW9CdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIAotICAgIEFTU0VSVChidWZmZXIpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzID0gYnVmZmVyLT5udW1iZXJP
ZkNoYW5uZWxzKCk7Ci0gICAgc2l6ZV90IGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlci0+bGVuZ3RoKCk7
Ci0KLSAgICAvLyBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyB1cCB0byBmb3Vy
IGNoYW5uZWwgaW1wdWxzZSByZXNwb25zZXMsIHdoaWNoIGFyZSBpbnRlcnByZXRlZCBhcyB0cnVl
LXN0ZXJlbyAoc2VlIFJldmVyYiBjbGFzcykuCi0gICAgYm9vbCBpc0J1ZmZlckdvb2QgPSBudW1i
ZXJPZkNoYW5uZWxzID4gMCAmJiBudW1iZXJPZkNoYW5uZWxzIDw9IDQgJiYgYnVmZmVyTGVuZ3Ro
OwotICAgIEFTU0VSVChpc0J1ZmZlckdvb2QpOwotICAgIGlmICghaXNCdWZmZXJHb29kKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBXcmFwIHRoZSBBdWRpb0J1ZmZlciBieSBhbiBBdWRpb0J1
cy4gSXQncyBhbiBlZmZpY2llbnQgcG9pbnRlciBzZXQgYW5kIG5vdCBhIG1lbWNweSgpLgotICAg
IC8vIFRoaXMgbWVtb3J5IGlzIHNpbXBseSB1c2VkIGluIHRoZSBSZXZlcmIgY29uc3RydWN0b3Ig
YW5kIG5vIHJlZmVyZW5jZSB0byBpdCBpcyBrZXB0IGZvciBsYXRlciB1c2UgaW4gdGhhdCBjbGFz
cy4KLSAgICBBdWRpb0J1cyBidWZmZXJCdXMobnVtYmVyT2ZDaGFubmVscywgYnVmZmVyTGVuZ3Ro
LCBmYWxzZSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7
ICsraSkKLSAgICAgICAgYnVmZmVyQnVzLnNldENoYW5uZWxNZW1vcnkoaSwgYnVmZmVyLT5nZXRD
aGFubmVsRGF0YShpKS0+ZGF0YSgpLCBidWZmZXJMZW5ndGgpOwotCi0gICAgYnVmZmVyQnVzLnNl
dFNhbXBsZVJhdGUoYnVmZmVyLT5zYW1wbGVSYXRlKCkpOwotCi0gICAgLy8gQ3JlYXRlIHRoZSBy
ZXZlcmIgd2l0aCB0aGUgZ2l2ZW4gaW1wdWxzZSByZXNwb25zZS4KLSAgICBib29sIHVzZUJhY2tn
cm91bmRUaHJlYWRzID0gIWNvbnRleHQoKS0+aXNPZmZsaW5lQ29udGV4dCgpOwotICAgIE93blB0
cjxSZXZlcmI+IHJldmVyYiA9IGFkb3B0UHRyKG5ldyBSZXZlcmIoJmJ1ZmZlckJ1cywgQXVkaW9O
b2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVzLCBNYXhGRlRTaXplLCAyLCB1c2VCYWNrZ3JvdW5k
VGhyZWFkcywgbV9ub3JtYWxpemUpKTsKLQotICAgIHsKLSAgICAgICAgLy8gU3luY2hyb25pemUg
d2l0aCBwcm9jZXNzKCkuCi0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Byb2Nlc3NMb2Nr
KTsKLSAgICAgICAgbV9yZXZlcmIgPSByZXZlcmIucmVsZWFzZSgpOwotICAgICAgICBtX2J1ZmZl
ciA9IGJ1ZmZlcjsKLSAgICB9Ci19Ci0KLUF1ZGlvQnVmZmVyKiBDb252b2x2ZXJOb2RlOjpidWZm
ZXIoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgcmV0dXJuIG1fYnVmZmVy
LmdldCgpOwotfQotCi1kb3VibGUgQ29udm9sdmVyTm9kZTo6dGFpbFRpbWUoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3JldmVyYiA/IG1fcmV2ZXJiLT5pbXB1bHNlUmVzcG9uc2VMZW5ndGgoKSAv
IHN0YXRpY19jYXN0PGRvdWJsZT4oc2FtcGxlUmF0ZSgpKSA6IDA7Ci19Ci0KLWRvdWJsZSBDb252
b2x2ZXJOb2RlOjpsYXRlbmN5VGltZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmV2ZXJiID8g
bV9yZXZlcmItPmxhdGVuY3lGcmFtZXMoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oc2FtcGxlUmF0
ZSgpKSA6IDA7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5o
CShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJO
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgQ29udm9sdmVyTm9kZV9oCi0jZGVmaW5lIENvbnZvbHZlck5vZGVfaAotCi0jaW5jbHVkZSAi
QXVkaW9Ob2RlLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgQXVkaW9CdWZmZXI7Ci1jbGFzcyBSZXZlcmI7Ci0gICAgCi1jbGFzcyBDb252b2x2
ZXJOb2RlIDogcHVibGljIEF1ZGlvTm9kZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q29udm9sdmVyTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2Ft
cGxlUmF0ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29udm9sdmVyTm9k
ZShjb250ZXh0LCBzYW1wbGVSYXRlKSk7ICAgICAgCi0gICAgfQotICAgIAotICAgIHZpcnR1YWwg
fkNvbnZvbHZlck5vZGUoKTsKLSAgICAKLSAgICAvLyBBdWRpb05vZGUKLSAgICB2aXJ0dWFsIHZv
aWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVz
ZXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1
bmluaXRpYWxpemUoKTsKLQotICAgIC8vIEltcHVsc2UgcmVzcG9uc2VzCi0gICAgdm9pZCBzZXRC
dWZmZXIoQXVkaW9CdWZmZXIqKTsKLSAgICBBdWRpb0J1ZmZlciogYnVmZmVyKCk7Ci0KLSAgICBi
b29sIG5vcm1hbGl6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9ybWFsaXplOyB9Ci0gICAgdm9pZCBz
ZXROb3JtYWxpemUoYm9vbCBub3JtYWxpemUpIHsgbV9ub3JtYWxpemUgPSBub3JtYWxpemU7IH0K
LQotcHJpdmF0ZToKLSAgICBDb252b2x2ZXJOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBs
ZVJhdGUpOwotCi0gICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFOwotCi0gICAg
T3duUHRyPFJldmVyYj4gbV9yZXZlcmI7Ci0gICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBtX2J1ZmZl
cjsKLQotICAgIC8vIFRoaXMgc3luY2hyb25pemVzIGR5bmFtaWMgY2hhbmdlcyB0byB0aGUgY29u
dm9sdXRpb24gaW1wdWxzZSByZXNwb25zZSB3aXRoIHByb2Nlc3MoKS4KLSAgICBtdXRhYmxlIE11
dGV4IG1fcHJvY2Vzc0xvY2s7Ci0KLSAgICAvLyBOb3JtYWxpemUgdGhlIGltcHVsc2UgcmVzcG9u
c2Ugb3Igbm90LiBNdXN0IGRlZmF1bHQgdG8gdHJ1ZS4KLSAgICBib29sIG1fbm9ybWFsaXplOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQ29udm9sdmVyTm9kZV9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmlkbAkocmV2aXNp
b24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBhdWRp
byB7Ci0gICAgLy8gQSBsaW5lYXIgY29udm9sdXRpb24gZWZmZWN0Ci0gICAgaW50ZXJmYWNlIFsK
LSAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAotICAgICAgICBKU0dlbmVyYXRlVG9KU09i
amVjdAotICAgIF0gQ29udm9sdmVyTm9kZSA6IEF1ZGlvTm9kZSB7Ci0gICAgICAgIGF0dHJpYnV0
ZSBbSlNDdXN0b21TZXR0ZXJdIEF1ZGlvQnVmZmVyIGJ1ZmZlcjsKLSAgICAgICAgYXR0cmlidXRl
IGJvb2xlYW4gbm9ybWFsaXplOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9ET01XaW5kb3dXZWJBdWRpby5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vRE9NV2luZG93V2ViQXVkaW8uaWRsCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9ET01XaW5kb3dXZWJBdWRpby5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgd2luZG93
IHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKLSAg
ICAgICAgU3VwcGxlbWVudGFsPURPTVdpbmRvdwotICAgIF0gRE9NV2luZG93V2ViQXVkaW8gewot
I2lmICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQUAotICAgICAgICBhdHRy
aWJ1dGUgW0pTQ3VzdG9tR2V0dGVyLCBWOEVuYWJsZWRBdFJ1bnRpbWVdIEF1ZGlvQ29udGV4dENv
bnN0cnVjdG9yIHdlYmtpdEF1ZGlvQ29udGV4dDsKLSAgICAgICAgYXR0cmlidXRlIEF1ZGlvUGFu
bmVyTm9kZUNvbnN0cnVjdG9yIHdlYmtpdEF1ZGlvUGFubmVyTm9kZTsKLSAgICAgICAgYXR0cmli
dXRlIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50Q29uc3RydWN0b3IgQXVkaW9Qcm9jZXNzaW5nRXZlbnQ7
Ci0gICAgICAgIGF0dHJpYnV0ZSBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnRDb25zdHJ1Y3Rv
ciBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ7Ci0jZW5kaWYKLSAgICB9OwotCi19CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3Rp
bmF0aW9uTm9kZS5jcHAJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJM
RShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaCIK
LQotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotRGVm
YXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjpEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVk
aW9Db250ZXh0KiBjb250ZXh0KQotICAgIDogQXVkaW9EZXN0aW5hdGlvbk5vZGUoY29udGV4dCwg
QXVkaW9EZXN0aW5hdGlvbjo6aGFyZHdhcmVTYW1wbGVSYXRlKCkpCi17Ci19Ci0KLURlZmF1bHRB
dWRpb0Rlc3RpbmF0aW9uTm9kZTo6fkRlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZSgpCi17Ci0g
ICAgdW5pbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2Rl
Ojppbml0aWFsaXplKCkKLXsKLSAgICBpZiAoaXNJbml0aWFsaXplZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBmbG9hdCBoYXJkd2FyZVNhbXBsZVJhdGUgPSBBdWRpb0Rlc3RpbmF0aW9uOjpo
YXJkd2FyZVNhbXBsZVJhdGUoKTsKLSAgICBMT0coV2ViQXVkaW8sICI+Pj4+IGhhcmR3YXJlU2Ft
cGxlUmF0ZSA9ICVmXG4iLCBoYXJkd2FyZVNhbXBsZVJhdGUpOwotICAgIAotICAgIG1fZGVzdGlu
YXRpb24gPSBBdWRpb0Rlc3RpbmF0aW9uOjpjcmVhdGUoKnRoaXMsIGhhcmR3YXJlU2FtcGxlUmF0
ZSk7Ci0gICAgCi0gICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgRGVmYXVs
dEF1ZGlvRGVzdGluYXRpb25Ob2RlOjp1bmluaXRpYWxpemUoKQotewotICAgIGlmICghaXNJbml0
aWFsaXplZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Rlc3RpbmF0aW9uLT5zdG9wKCk7
Ci0KLSAgICBBdWRpb05vZGU6OnVuaW5pdGlhbGl6ZSgpOwotfQotCi12b2lkIERlZmF1bHRBdWRp
b0Rlc3RpbmF0aW9uTm9kZTo6c3RhcnRSZW5kZXJpbmcoKQotewotICAgIEFTU0VSVChpc0luaXRp
YWxpemVkKCkpOwotICAgIGlmIChpc0luaXRpYWxpemVkKCkpCi0gICAgICAgIG1fZGVzdGluYXRp
b24tPnN0YXJ0KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVO
QUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWZhdWx0QXVk
aW9EZXN0aW5hdGlvbk5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaAkocmV2aXNpb24gMTExMjA4KQorKysgU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRGVmYXVsdEF1
ZGlvRGVzdGluYXRpb25Ob2RlX2gKLSNkZWZpbmUgRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2Rl
X2gKLQotI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb24uaCIKLSNpbmNsdWRlICJBdWRpb0Rlc3Rp
bmF0aW9uTm9kZS5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBBdWRpb0NvbnRleHQ7Ci0gICAgCi1jbGFzcyBEZWZhdWx0QXVkaW9EZXN0
aW5hdGlvbk5vZGUgOiBwdWJsaWMgQXVkaW9EZXN0aW5hdGlvbk5vZGUgewotcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZT4gY3JlYXRlKEF1
ZGlvQ29udGV4dCogY29udGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlKGNvbnRleHQpKTsgICAgIAotICAgIH0KLQotICAg
IHZpcnR1YWwgfkRlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZSgpOwotICAgIAotICAgIC8vIEF1
ZGlvTm9kZSAgIAotICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKCk7Ci0gICAgdmlydHVhbCB2
b2lkIHVuaW5pdGlhbGl6ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBzdGFydFJlbmRlcmluZygpOwot
ICAgIAotcHJpdmF0ZToKLSAgICBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250
ZXh0Kik7Ci0KLSAgICBPd25QdHI8QXVkaW9EZXN0aW5hdGlvbj4gbV9kZXN0aW5hdGlvbjsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIERlZmF1bHRBdWRpb0Rlc3Rp
bmF0aW9uTm9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheURTUEtlcm5l
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlEU1BLZXJu
ZWwuY3BwCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxh
eURTUEtlcm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQ5ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotCi0jaW5j
bHVkZSAiRGVsYXlEU1BLZXJuZWwuaCIKLQotI2luY2x1ZGUgIkF1ZGlvVXRpbGl0aWVzLmgiCi0j
aW5jbHVkZSA8YWxnb3JpdGhtPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1jb25zdCBmbG9h
dCBTbW9vdGhpbmdUaW1lQ29uc3RhbnQgPSAwLjAyMGY7IC8vIDIwbXMKLSAgCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLURlbGF5RFNQS2VybmVsOjpEZWxheURTUEtlcm5lbChEZWxheVByb2Nlc3Nv
ciogcHJvY2Vzc29yKQotICAgIDogQXVkaW9EU1BLZXJuZWwocHJvY2Vzc29yKQotICAgICwgbV93
cml0ZUluZGV4KDApCi0gICAgLCBtX2ZpcnN0VGltZSh0cnVlKQotewotICAgIEFTU0VSVChwcm9j
ZXNzb3IgJiYgcHJvY2Vzc29yLT5zYW1wbGVSYXRlKCkgPiAwKTsKLSAgICBpZiAoIXByb2Nlc3Nv
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9tYXhEZWxheVRpbWUgPSBwcm9jZXNzb3ItPm1h
eERlbGF5VGltZSgpOwotICAgIG1fYnVmZmVyLmFsbG9jYXRlKHN0YXRpY19jYXN0PHNpemVfdD4o
cHJvY2Vzc29yLT5zYW1wbGVSYXRlKCkgKiBtX21heERlbGF5VGltZSkpOwotICAgIG1fYnVmZmVy
Lnplcm8oKTsKLQotICAgIG1fc21vb3RoaW5nUmF0ZSA9IEF1ZGlvVXRpbGl0aWVzOjpkaXNjcmV0
ZVRpbWVDb25zdGFudEZvclNhbXBsZVJhdGUoU21vb3RoaW5nVGltZUNvbnN0YW50LCBwcm9jZXNz
b3ItPnNhbXBsZVJhdGUoKSk7Ci19Ci0KLURlbGF5RFNQS2VybmVsOjpEZWxheURTUEtlcm5lbChk
b3VibGUgbWF4RGVsYXlUaW1lLCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIDogQXVkaW9EU1BLZXJu
ZWwoc2FtcGxlUmF0ZSkKLSAgICAsIG1fbWF4RGVsYXlUaW1lKG1heERlbGF5VGltZSkKLSAgICAs
IG1fd3JpdGVJbmRleCgwKQotICAgICwgbV9maXJzdFRpbWUodHJ1ZSkKLXsKLSAgICBBU1NFUlQo
bWF4RGVsYXlUaW1lID4gMC4wKTsKLSAgICBpZiAobWF4RGVsYXlUaW1lIDw9IDAuMCkKLSAgICAg
ICAgcmV0dXJuOwotICAgICAgICAKLSAgICBzaXplX3QgYnVmZmVyTGVuZ3RoID0gc3RhdGljX2Nh
c3Q8c2l6ZV90PihzYW1wbGVSYXRlICogbWF4RGVsYXlUaW1lKTsKLSAgICBBU1NFUlQoYnVmZmVy
TGVuZ3RoKTsKLSAgICBpZiAoIWJ1ZmZlckxlbmd0aCkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIG1fYnVmZmVyLmFsbG9jYXRlKGJ1ZmZlckxlbmd0aCk7Ci0gICAgbV9idWZmZXIuemVybygp
OwotCi0gICAgbV9zbW9vdGhpbmdSYXRlID0gQXVkaW9VdGlsaXRpZXM6OmRpc2NyZXRlVGltZUNv
bnN0YW50Rm9yU2FtcGxlUmF0ZShTbW9vdGhpbmdUaW1lQ29uc3RhbnQsIHNhbXBsZVJhdGUpOwot
fQotCi12b2lkIERlbGF5RFNQS2VybmVsOjpwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZs
b2F0KiBkZXN0aW5hdGlvbiwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKLXsKLSAgICBzaXplX3Qg
YnVmZmVyTGVuZ3RoID0gbV9idWZmZXIuc2l6ZSgpOwotICAgIGZsb2F0KiBidWZmZXIgPSBtX2J1
ZmZlci5kYXRhKCk7Ci0KLSAgICBBU1NFUlQoYnVmZmVyTGVuZ3RoKTsKLSAgICBpZiAoIWJ1ZmZl
ckxlbmd0aCkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBBU1NFUlQoc291cmNlICYm
IGRlc3RpbmF0aW9uKTsKLSAgICBpZiAoIXNvdXJjZSB8fCAhZGVzdGluYXRpb24pCi0gICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgZmxvYXQgc2FtcGxlUmF0ZSA9IHRoaXMtPnNhbXBsZVJh
dGUoKTsKLSAgICBkb3VibGUgZGVsYXlUaW1lID0gZGVsYXlQcm9jZXNzb3IoKSA/IGRlbGF5UHJv
Y2Vzc29yKCktPmRlbGF5VGltZSgpLT52YWx1ZSgpIDogbV9kZXNpcmVkRGVsYXlGcmFtZXMgLyBz
YW1wbGVSYXRlOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBkZWxheSB0aW1lIGlzIGluIGEgdmFs
aWQgcmFuZ2UuCi0gICAgZGVsYXlUaW1lID0gbWluKG1heERlbGF5VGltZSgpLCBkZWxheVRpbWUp
OwotICAgIGRlbGF5VGltZSA9IG1heCgwLjAsIGRlbGF5VGltZSk7Ci0KLSAgICBpZiAobV9maXJz
dFRpbWUpIHsKLSAgICAgICAgbV9jdXJyZW50RGVsYXlUaW1lID0gZGVsYXlUaW1lOwotICAgICAg
ICBtX2ZpcnN0VGltZSA9IGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBpbnQgbiA9IGZyYW1lc1Rv
UHJvY2VzczsKLSAgICB3aGlsZSAobi0tKSB7Ci0gICAgICAgIC8vIEFwcHJvYWNoIGRlc2lyZWQg
ZGVsYXkgdGltZS4KLSAgICAgICAgbV9jdXJyZW50RGVsYXlUaW1lICs9IChkZWxheVRpbWUgLSBt
X2N1cnJlbnREZWxheVRpbWUpICogbV9zbW9vdGhpbmdSYXRlOwotCi0gICAgICAgIGRvdWJsZSBk
ZXNpcmVkRGVsYXlGcmFtZXMgPSBtX2N1cnJlbnREZWxheVRpbWUgKiBzYW1wbGVSYXRlOwotCi0g
ICAgICAgIGRvdWJsZSByZWFkUG9zaXRpb24gPSBtX3dyaXRlSW5kZXggKyBidWZmZXJMZW5ndGgg
LSBkZXNpcmVkRGVsYXlGcmFtZXM7Ci0gICAgICAgIGlmIChyZWFkUG9zaXRpb24gPj0gYnVmZmVy
TGVuZ3RoKQotICAgICAgICAgICAgcmVhZFBvc2l0aW9uIC09IGJ1ZmZlckxlbmd0aDsKLQotICAg
ICAgICAvLyBMaW5lYXJseSBpbnRlcnBvbGF0ZSBpbi1iZXR3ZWVuIGRlbGF5IHRpbWVzLgotICAg
ICAgICBpbnQgcmVhZEluZGV4MSA9IHN0YXRpY19jYXN0PGludD4ocmVhZFBvc2l0aW9uKTsKLSAg
ICAgICAgaW50IHJlYWRJbmRleDIgPSAocmVhZEluZGV4MSArIDEpICUgYnVmZmVyTGVuZ3RoOwot
ICAgICAgICBkb3VibGUgaW50ZXJwb2xhdGlvbkZhY3RvciA9IHJlYWRQb3NpdGlvbiAtIHJlYWRJ
bmRleDE7Ci0KLSAgICAgICAgZG91YmxlIGlucHV0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KCpzb3Vy
Y2UrKyk7Ci0gICAgICAgIGJ1ZmZlclttX3dyaXRlSW5kZXhdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGlucHV0KTsKLSAgICAgICAgbV93cml0ZUluZGV4ID0gKG1fd3JpdGVJbmRleCArIDEpICUgYnVm
ZmVyTGVuZ3RoOyAgICAgICAgCi0gICAgICAgIAotICAgICAgICBkb3VibGUgc2FtcGxlMSA9IGJ1
ZmZlcltyZWFkSW5kZXgxXTsKLSAgICAgICAgZG91YmxlIHNhbXBsZTIgPSBidWZmZXJbcmVhZElu
ZGV4Ml07Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgb3V0cHV0ID0gKDEuMCAtIGludGVycG9s
YXRpb25GYWN0b3IpICogc2FtcGxlMSArIGludGVycG9sYXRpb25GYWN0b3IgKiBzYW1wbGUyOwot
Ci0gICAgICAgICpkZXN0aW5hdGlvbisrID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG91dHB1dCk7Ci0g
ICAgfSAgICAgICAgCi19Ci0KLXZvaWQgRGVsYXlEU1BLZXJuZWw6OnJlc2V0KCkKLXsKLSAgICBt
X2ZpcnN0VGltZSA9IHRydWU7Ci0gICAgbV9idWZmZXIuemVybygpOwotfQotCi1kb3VibGUgRGVs
YXlEU1BLZXJuZWw6OnRhaWxUaW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9tYXhEZWxheVRp
bWU7Ci19Ci0KLWRvdWJsZSBEZWxheURTUEtlcm5lbDo6bGF0ZW5jeVRpbWUoKSBjb25zdAotewot
ICAgIHJldHVybiAwOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
TkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlEU1BL
ZXJuZWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheURTUEtl
cm5lbC5oCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxh
eURTUEtlcm5lbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgot
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIERlbGF5RFNQS2VybmVsX2gKLSNkZWZpbmUgRGVsYXlEU1BLZXJuZWxfaAotCi0j
aW5jbHVkZSAiQXVkaW9BcnJheS5oIgotI2luY2x1ZGUgIkF1ZGlvRFNQS2VybmVsLmgiCi0jaW5j
bHVkZSAiRGVsYXlQcm9jZXNzb3IuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBE
ZWxheVByb2Nlc3NvcjsKLSAgICAKLWNsYXNzIERlbGF5RFNQS2VybmVsIDogcHVibGljIEF1ZGlv
RFNQS2VybmVsIHsKLXB1YmxpYzogIAotICAgIERlbGF5RFNQS2VybmVsKERlbGF5UHJvY2Vzc29y
Kik7Ci0gICAgRGVsYXlEU1BLZXJuZWwoZG91YmxlIG1heERlbGF5VGltZSwgZmxvYXQgc2FtcGxl
UmF0ZSk7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJj
ZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVzZXQoKTsKLSAgICAKLSAgICBkb3VibGUgbWF4RGVsYXlUaW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXhEZWxheVRpbWU7IH0KLSAgICAKLSAgICB2b2lkIHNldERlbGF5RnJhbWVz
KGRvdWJsZSBudW1iZXJPZkZyYW1lcykgeyBtX2Rlc2lyZWREZWxheUZyYW1lcyA9IG51bWJlck9m
RnJhbWVzOyB9Ci0KLSAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURF
OwotICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJREU7Ci0KLXBy
aXZhdGU6Ci0gICAgQXVkaW9GbG9hdEFycmF5IG1fYnVmZmVyOwotICAgIGRvdWJsZSBtX21heERl
bGF5VGltZTsKLSAgICBpbnQgbV93cml0ZUluZGV4OwotICAgIGRvdWJsZSBtX2N1cnJlbnREZWxh
eVRpbWU7Ci0gICAgZG91YmxlIG1fc21vb3RoaW5nUmF0ZTsKLSAgICBib29sIG1fZmlyc3RUaW1l
OwotICAgIGRvdWJsZSBtX2Rlc2lyZWREZWxheUZyYW1lczsKLQotICAgIERlbGF5UHJvY2Vzc29y
KiBkZWxheVByb2Nlc3NvcigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PERlbGF5UHJvY2Vzc29yKj4o
cHJvY2Vzc29yKCkpOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBEZWxheURTUEtlcm5lbF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheU5v
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5Tm9kZS5j
cHAJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5Tm9k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJEZWxh
eU5vZGUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1EZWxheU5vZGU6OkRlbGF5Tm9kZShB
dWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUsIGRvdWJsZSBtYXhEZWxheVRp
bWUpCi0gICAgOiBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQot
ewotICAgIG1fcHJvY2Vzc29yID0gYWRvcHRQdHIobmV3IERlbGF5UHJvY2Vzc29yKHNhbXBsZVJh
dGUsIDEsIG1heERlbGF5VGltZSkpOwotICAgIGRlbGF5VGltZSgpLT5zZXRDb250ZXh0KGNvbnRl
eHQpOwotICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlRGVsYXkpOwotfQotCi1BdWRpb1BhcmFtKiBE
ZWxheU5vZGU6OmRlbGF5VGltZSgpCi17Ci0gICAgcmV0dXJuIGRlbGF5UHJvY2Vzc29yKCktPmRl
bGF5VGltZSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlOb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlOb2RlLmgJKHJldmlz
aW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5Tm9kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERlbGF5Tm9k
ZV9oCi0jZGVmaW5lIERlbGF5Tm9kZV9oCi0KLSNpbmNsdWRlICJBdWRpb0Jhc2ljUHJvY2Vzc29y
Tm9kZS5oIgotI2luY2x1ZGUgIkRlbGF5UHJvY2Vzc29yLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb1BhcmFtOwotCi1j
bGFzcyBEZWxheU5vZGUgOiBwdWJsaWMgQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUgewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERlbGF5Tm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCog
Y29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSwgZG91YmxlIG1heERlbGF5VGltZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGVsYXlOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUs
IG1heERlbGF5VGltZSkpOyAgICAgIAotICAgIH0KLQotICAgIEF1ZGlvUGFyYW0qIGRlbGF5VGlt
ZSgpOwotCi1wcml2YXRlOgotICAgIERlbGF5Tm9kZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1w
bGVSYXRlLCBkb3VibGUgbWF4RGVsYXlUaW1lKTsKLQotICAgIERlbGF5UHJvY2Vzc29yKiBkZWxh
eVByb2Nlc3NvcigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PERlbGF5UHJvY2Vzc29yKj4ocHJvY2Vz
c29yKCkpOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBEZWxh
eU5vZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlOb2RlLmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheU5vZGUuaWRsCShyZXZpc2lv
biAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheU5vZGUuaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgYXVkaW8gewot
ICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKLSAgICAgICAg
SlNHZW5lcmF0ZVRvSlNPYmplY3QKLSAgICBdIERlbGF5Tm9kZSA6IEF1ZGlvTm9kZSB7Ci0gICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIGRlbGF5VGltZTsKLSAgICB9OwotfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5UHJvY2Vzc29yLmNwcAkocmV2aXNp
b24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiRGVsYXlQcm9j
ZXNzb3IuaCIKLSAKLSNpbmNsdWRlICJEZWxheURTUEtlcm5lbC5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLURlbGF5UHJvY2Vzc29yOjpEZWxheVByb2Nlc3NvcihmbG9hdCBzYW1wbGVSYXRl
LCB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBkb3VibGUgbWF4RGVsYXlUaW1lKQotICAgIDog
QXVkaW9EU1BLZXJuZWxQcm9jZXNzb3Ioc2FtcGxlUmF0ZSwgbnVtYmVyT2ZDaGFubmVscykKLSAg
ICAsIG1fbWF4RGVsYXlUaW1lKG1heERlbGF5VGltZSkKLXsKLSAgICBtX2RlbGF5VGltZSA9IEF1
ZGlvUGFyYW06OmNyZWF0ZSgiZGVsYXlUaW1lIiwgMC4wLCAwLjAsIG1heERlbGF5VGltZSk7Ci19
Ci0KLURlbGF5UHJvY2Vzc29yOjp+RGVsYXlQcm9jZXNzb3IoKQotewotICAgIGlmIChpc0luaXRp
YWxpemVkKCkpCi0gICAgICAgIHVuaW5pdGlhbGl6ZSgpOwotfQotCi1QYXNzT3duUHRyPEF1ZGlv
RFNQS2VybmVsPiBEZWxheVByb2Nlc3Nvcjo6Y3JlYXRlS2VybmVsKCkKLXsKLSAgICByZXR1cm4g
YWRvcHRQdHIobmV3IERlbGF5RFNQS2VybmVsKHRoaXMpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0RlbGF5UHJvY2Vzc29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuaAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBEZWxheVByb2Nlc3Nvcl9oCi0jZGVmaW5l
IERlbGF5UHJvY2Vzc29yX2gKLQotI2luY2x1ZGUgIkF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmgi
Ci0jaW5jbHVkZSAiQXVkaW9QYXJhbS5oIgotCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
QXVkaW9EU1BLZXJuZWw7Ci0gICAgCi1jbGFzcyBEZWxheVByb2Nlc3NvciA6IHB1YmxpYyBBdWRp
b0RTUEtlcm5lbFByb2Nlc3NvciB7Ci1wdWJsaWM6Ci0gICAgRGVsYXlQcm9jZXNzb3IoZmxvYXQg
c2FtcGxlUmF0ZSwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgZG91YmxlIG1heERlbGF5VGlt
ZSk7Ci0gICAgdmlydHVhbCB+RGVsYXlQcm9jZXNzb3IoKTsKLSAgICAKLSAgICB2aXJ0dWFsIFBh
c3NPd25QdHI8QXVkaW9EU1BLZXJuZWw+IGNyZWF0ZUtlcm5lbCgpOwotICAgICAgICAKLSAgICBB
dWRpb1BhcmFtKiBkZWxheVRpbWUoKSBjb25zdCB7IHJldHVybiBtX2RlbGF5VGltZS5nZXQoKTsg
fQotCi0gICAgZG91YmxlIG1heERlbGF5VGltZSgpIHsgcmV0dXJuIG1fbWF4RGVsYXlUaW1lOyB9
Ci1wcml2YXRlOgotCi0gICAgUmVmUHRyPEF1ZGlvUGFyYW0+IG1fZGVsYXlUaW1lOwotICAgIGRv
dWJsZSBtX21heERlbGF5VGltZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIERlbGF5UHJvY2Vzc29yX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5
bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwCShyZXZpc2lvbiAxMTEyMDgpCisrKyBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJEeW5hbWljc0NvbXByZXNz
b3JOb2RlLmgiCi0KLSNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKLSNpbmNsdWRlICJBdWRpb05v
ZGVJbnB1dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgotI2luY2x1ZGUgIkR5bmFt
aWNzQ29tcHJlc3Nvci5oIgotCi0vLyBTZXQgb3V0cHV0IHRvIHN0ZXJlbyBieSBkZWZhdWx0Lgot
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHROdW1iZXJPZk91dHB1dENoYW5uZWxzID0gMjsK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1EeW5hbWljc0NvbXByZXNzb3JOb2RlOjpEeW5hbWlj
c0NvbXByZXNzb3JOb2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkK
LSAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQotewotICAgIGFkZElucHV0KGFk
b3B0UHRyKG5ldyBBdWRpb05vZGVJbnB1dCh0aGlzKSkpOwotICAgIGFkZE91dHB1dChhZG9wdFB0
cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMsIGRlZmF1bHROdW1iZXJPZk91dHB1dENoYW5uZWxz
KSkpOwotCi0gICAgc2V0Tm9kZVR5cGUoTm9kZVR5cGVEeW5hbWljc0NvbXByZXNzb3IpOwotCi0g
ICAgbV90aHJlc2hvbGQgPSBBdWRpb1BhcmFtOjpjcmVhdGUoInRocmVzaG9sZCIsIC0yNCwgLTEw
MCwgMCk7Ci0gICAgbV9rbmVlID0gQXVkaW9QYXJhbTo6Y3JlYXRlKCJrbmVlIiwgMzAsIDAsIDQw
KTsKLSAgICBtX3JhdGlvID0gQXVkaW9QYXJhbTo6Y3JlYXRlKCJyYXRpbyIsIDEyLCAxLCAyMCk7
Ci0gICAgbV9yZWR1Y3Rpb24gPSBBdWRpb1BhcmFtOjpjcmVhdGUoInJlZHVjdGlvbiIsIDAsIC0y
MCwgMCk7Ci0KLSAgICBtX3RocmVzaG9sZC0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICBtX2tu
ZWUtPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgbV9yYXRpby0+c2V0Q29udGV4dChjb250ZXh0
KTsKLSAgICBtX3JlZHVjdGlvbi0+c2V0Q29udGV4dChjb250ZXh0KTsKLQotICAgIGluaXRpYWxp
emUoKTsKLX0KLQotRHluYW1pY3NDb21wcmVzc29yTm9kZTo6fkR5bmFtaWNzQ29tcHJlc3Nvck5v
ZGUoKQotewotICAgIHVuaW5pdGlhbGl6ZSgpOwotfQotCi12b2lkIER5bmFtaWNzQ29tcHJlc3Nv
ck5vZGU6OnByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKLXsKLSAgICBBdWRpb0J1cyog
b3V0cHV0QnVzID0gb3V0cHV0KDApLT5idXMoKTsKLSAgICBBU1NFUlQob3V0cHV0QnVzKTsKLQot
ICAgIGZsb2F0IHRocmVzaG9sZCA9IG1fdGhyZXNob2xkLT52YWx1ZSgpOwotICAgIGZsb2F0IGtu
ZWUgPSBtX2tuZWUtPnZhbHVlKCk7Ci0gICAgZmxvYXQgcmF0aW8gPSBtX3JhdGlvLT52YWx1ZSgp
OwotCi0gICAgbV9keW5hbWljc0NvbXByZXNzb3ItPnNldFBhcmFtZXRlclZhbHVlKER5bmFtaWNz
Q29tcHJlc3Nvcjo6UGFyYW1UaHJlc2hvbGQsIHRocmVzaG9sZCk7Ci0gICAgbV9keW5hbWljc0Nv
bXByZXNzb3ItPnNldFBhcmFtZXRlclZhbHVlKER5bmFtaWNzQ29tcHJlc3Nvcjo6UGFyYW1LbmVl
LCBrbmVlKTsKLSAgICBtX2R5bmFtaWNzQ29tcHJlc3Nvci0+c2V0UGFyYW1ldGVyVmFsdWUoRHlu
YW1pY3NDb21wcmVzc29yOjpQYXJhbVJhdGlvLCByYXRpbyk7Ci0KLSAgICBtX2R5bmFtaWNzQ29t
cHJlc3Nvci0+cHJvY2VzcyhpbnB1dCgwKS0+YnVzKCksIG91dHB1dEJ1cywgZnJhbWVzVG9Qcm9j
ZXNzKTsKLQotICAgIGZsb2F0IHJlZHVjdGlvbiA9IG1fZHluYW1pY3NDb21wcmVzc29yLT5wYXJh
bWV0ZXJWYWx1ZShEeW5hbWljc0NvbXByZXNzb3I6OlBhcmFtUmVkdWN0aW9uKTsKLSAgICBtX3Jl
ZHVjdGlvbi0+c2V0VmFsdWUocmVkdWN0aW9uKTsKLX0KLQotdm9pZCBEeW5hbWljc0NvbXByZXNz
b3JOb2RlOjpyZXNldCgpCi17Ci0gICAgbV9keW5hbWljc0NvbXByZXNzb3ItPnJlc2V0KCk7Ci19
Ci0KLXZvaWQgRHluYW1pY3NDb21wcmVzc29yTm9kZTo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgaWYg
KGlzSW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQXVkaW9Ob2RlOjppbml0
aWFsaXplKCk7ICAgIAotICAgIG1fZHluYW1pY3NDb21wcmVzc29yID0gYWRvcHRQdHIobmV3IER5
bmFtaWNzQ29tcHJlc3NvcihzYW1wbGVSYXRlKCksIGRlZmF1bHROdW1iZXJPZk91dHB1dENoYW5u
ZWxzKSk7Ci19Ci0KLXZvaWQgRHluYW1pY3NDb21wcmVzc29yTm9kZTo6dW5pbml0aWFsaXplKCkK
LXsKLSAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9k
eW5hbWljc0NvbXByZXNzb3IuY2xlYXIoKTsKLSAgICBBdWRpb05vZGU6OnVuaW5pdGlhbGl6ZSgp
OwotfQotCi1kb3VibGUgRHluYW1pY3NDb21wcmVzc29yTm9kZTo6dGFpbFRpbWUoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2R5bmFtaWNzQ29tcHJlc3Nvci0+dGFpbFRpbWUoKTsKLX0KLQotZG91
YmxlIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OmxhdGVuY3lUaW1lKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9keW5hbWljc0NvbXByZXNzb3ItPmxhdGVuY3lUaW1lKCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5oCShyZXZp
c2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNz
b3JOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgRHluYW1pY3NDb21wcmVzc29yTm9kZV9oCi0jZGVmaW5lIER5bmFtaWNzQ29tcHJlc3Nv
ck5vZGVfaAotCi0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCi0jaW5jbHVkZSAiQXVkaW9QYXJhbS5o
IgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBEeW5hbWljc0NvbXByZXNzb3I7Ci0KLWNsYXNzIER5bmFtaWNzQ29tcHJlc3Nvck5vZGUgOiBw
dWJsaWMgQXVkaW9Ob2RlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEeW5hbWlj
c0NvbXByZXNzb3JOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1w
bGVSYXRlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEeW5hbWljc0NvbXBy
ZXNzb3JOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5E
eW5hbWljc0NvbXByZXNzb3JOb2RlKCk7Ci0KLSAgICAvLyBBdWRpb05vZGUKLSAgICB2aXJ0dWFs
IHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVzZXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpOwotICAgIHZpcnR1YWwgdm9p
ZCB1bmluaXRpYWxpemUoKTsKLQotICAgIC8vIFN0YXRpYyBjb21wcmVzc2lvbiBjdXJ2ZSBwYXJh
bWV0ZXJzLgotICAgIEF1ZGlvUGFyYW0qIHRocmVzaG9sZCgpIHsgcmV0dXJuIG1fdGhyZXNob2xk
LmdldCgpOyB9Ci0gICAgQXVkaW9QYXJhbSoga25lZSgpIHsgcmV0dXJuIG1fa25lZS5nZXQoKTsg
fQotICAgIEF1ZGlvUGFyYW0qIHJhdGlvKCkgeyByZXR1cm4gbV9yYXRpby5nZXQoKTsgfQotCi0g
ICAgLy8gQW1vdW50IGJ5IHdoaWNoIHRoZSBjb21wcmVzc29yIGlzIGN1cnJlbnRseSBjb21wcmVz
c2luZyB0aGUgc2lnbmFsIGluIGRlY2liZWxzLgotICAgIEF1ZGlvUGFyYW0qIHJlZHVjdGlvbigp
IHsgcmV0dXJuIG1fcmVkdWN0aW9uLmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBk
b3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGRvdWJsZSBsYXRl
bmN5VGltZSgpIGNvbnN0IE9WRVJSSURFOwotCi0gICAgRHluYW1pY3NDb21wcmVzc29yTm9kZShB
dWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKLQotICAgIE93blB0cjxEeW5hbWljc0Nv
bXByZXNzb3I+IG1fZHluYW1pY3NDb21wcmVzc29yOwotICAgIFJlZlB0cjxBdWRpb1BhcmFtPiBt
X3RocmVzaG9sZDsKLSAgICBSZWZQdHI8QXVkaW9QYXJhbT4gbV9rbmVlOwotICAgIFJlZlB0cjxB
dWRpb1BhcmFtPiBtX3JhdGlvOwotICAgIFJlZlB0cjxBdWRpb1BhcmFtPiBtX3JlZHVjdGlvbjsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIER5bmFtaWNzQ29tcHJl
c3Nvck5vZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVz
c29yTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1p
Y3NDb21wcmVzc29yTm9kZS5pZGwJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgYXVkaW8gewotICAgIGludGVyZmFjZSBb
Ci0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKLSAgICAgICAgSlNHZW5lcmF0ZVRvSlNP
YmplY3QKLSAgICBdIER5bmFtaWNzQ29tcHJlc3Nvck5vZGUgOiBBdWRpb05vZGUgewotICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9QYXJhbSB0aHJlc2hvbGQ7IC8vIGluIERlY2liZWxz
Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIGtuZWU7IC8vIGluIERlY2li
ZWxzCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIHJhdGlvOyAvLyB1bml0
LWxlc3MKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlvUGFyYW0gcmVkdWN0aW9uOyAv
LyBpbiBEZWNpYmVscwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9I
aWdoUGFzczJGaWx0ZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmNwcAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lm
IEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJIaWdoUGFzczJGaWx0ZXJOb2RlLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSGlnaFBhc3MyRmlsdGVyTm9kZTo6SGlnaFBhc3MyRmls
dGVyTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBB
dWRpb0Jhc2ljUHJvY2Vzc29yTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQotewotICAgIG1fcHJv
Y2Vzc29yID0gYWRvcHRQdHIobmV3IEJpcXVhZFByb2Nlc3NvcihCaXF1YWRQcm9jZXNzb3I6Okhp
Z2hQYXNzLCBzYW1wbGVSYXRlLCAxLCBmYWxzZSkpOwotICAgIGJpcXVhZFByb2Nlc3NvcigpLT5w
YXJhbWV0ZXIxKCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgYmlxdWFkUHJvY2Vzc29yKCkt
PnBhcmFtZXRlcjIoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICBiaXF1YWRQcm9jZXNzb3Io
KS0+cGFyYW1ldGVyMygpLT5zZXRDb250ZXh0KGNvbnRleHQpOwotICAgIHNldE5vZGVUeXBlKE5v
ZGVUeXBlSGlnaFBhc3MyRmlsdGVyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0hpZ2hQYXNzMkZpbHRlck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmgJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBIaWdoUGFzczJGaWx0ZXJOb2RlX2gK
LSNkZWZpbmUgSGlnaFBhc3MyRmlsdGVyTm9kZV9oCi0KLSNpbmNsdWRlICJBdWRpb0Jhc2ljUHJv
Y2Vzc29yTm9kZS5oIgotI2luY2x1ZGUgIkJpcXVhZFByb2Nlc3Nvci5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvUGFyYW07Ci0gICAgCi1jbGFzcyBIaWdoUGFzczJGaWx0
ZXJOb2RlIDogcHVibGljIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxIaWdoUGFzczJGaWx0ZXJOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0
KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBIaWdoUGFzczJGaWx0ZXJOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpKTsgICAgICAK
LSAgICB9Ci0KLSAgICBBdWRpb1BhcmFtKiBjdXRvZmYoKSB7IHJldHVybiBiaXF1YWRQcm9jZXNz
b3IoKS0+cGFyYW1ldGVyMSgpOyB9Ci0gICAgQXVkaW9QYXJhbSogcmVzb25hbmNlKCkgeyByZXR1
cm4gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjIoKTsgfQotICAgIAotcHJpdmF0ZToKLSAg
ICBIaWdoUGFzczJGaWx0ZXJOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwot
Ci0gICAgQmlxdWFkUHJvY2Vzc29yKiBiaXF1YWRQcm9jZXNzb3IoKSB7IHJldHVybiBzdGF0aWNf
Y2FzdDxCaXF1YWRQcm9jZXNzb3IqPihwcm9jZXNzb3IoKSk7IH0KLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEhpZ2hQYXNzMkZpbHRlck5vZGVfaApJbmRleDogU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5pZGwJKHJldmlz
aW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5v
ZGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1
bGUgYXVkaW8gewotICAgIC8vIFR3by1wb2xlIGhpZ2hwYXNzIGZpbHRlcgotICAgIC8vIEZJWE1F
OiBkZXNpZ24gQmlxdWFkTm9kZSBhbmQgdXNlIGluc3RlYWQgb2YgdGhpcwotICAgIGludGVyZmFj
ZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKLSAgICAgICAgSlNHZW5lcmF0ZVRv
SlNPYmplY3QKLSAgICBdIEhpZ2hQYXNzMkZpbHRlck5vZGUgOiBBdWRpb05vZGUgewotICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9QYXJhbSBjdXRvZmY7Ci0gICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIHJlc29uYW5jZTsKLSAgICB9OwotfQpJbmRleDogU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5jcHAJKHJldmlzaW9u
IDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIkphdmFT
Y3JpcHRBdWRpb05vZGUuaCIKLQotI2luY2x1ZGUgIkF1ZGlvQnVmZmVyLmgiCi0jaW5jbHVkZSAi
QXVkaW9CdXMuaCIKLSNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKLSNpbmNsdWRlICJBdWRpb05v
ZGVJbnB1dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgotI2luY2x1ZGUgIkF1ZGlv
UHJvY2Vzc2luZ0V2ZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlIDx3dGYv
RmxvYXQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jb25zdCBzaXplX3QgRGVmYXVsdEJ1ZmZlclNpemUgPSA0MDk2OwotCi1Q
YXNzUmVmUHRyPEphdmFTY3JpcHRBdWRpb05vZGU+IEphdmFTY3JpcHRBdWRpb05vZGU6OmNyZWF0
ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUsIHNpemVfdCBidWZmZXJT
aXplLCB1bnNpZ25lZCBudW1iZXJPZklucHV0cywgdW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRzKQot
ewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSmF2YVNjcmlwdEF1ZGlvTm9kZShjb250ZXh0LCBz
YW1wbGVSYXRlLCBidWZmZXJTaXplLCBudW1iZXJPZklucHV0cywgbnVtYmVyT2ZPdXRwdXRzKSk7
Ci19Ci0KLUphdmFTY3JpcHRBdWRpb05vZGU6OkphdmFTY3JpcHRBdWRpb05vZGUoQXVkaW9Db250
ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlLCBzaXplX3QgYnVmZmVyU2l6ZSwgdW5zaWdu
ZWQgbnVtYmVyT2ZJbnB1dHMsIHVuc2lnbmVkIG51bWJlck9mT3V0cHV0cykKLSAgICA6IEF1ZGlv
Tm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQotICAgICwgbV9kb3VibGVCdWZmZXJJbmRleCgwKQot
ICAgICwgbV9kb3VibGVCdWZmZXJJbmRleEZvckV2ZW50KDApCi0gICAgLCBtX2J1ZmZlclNpemUo
YnVmZmVyU2l6ZSkKLSAgICAsIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXgoMCkKLSAgICAsIG1faXNS
ZXF1ZXN0T3V0c3RhbmRpbmcoZmFsc2UpCi17Ci0gICAgLy8gQ2hlY2sgZm9yIHZhbGlkIGJ1ZmZl
ciBzaXplLgotICAgIHN3aXRjaCAoYnVmZmVyU2l6ZSkgewotICAgIGNhc2UgMjU2OgotICAgIGNh
c2UgNTEyOgotICAgIGNhc2UgMTAyNDoKLSAgICBjYXNlIDIwNDg6Ci0gICAgY2FzZSA0MDk2Ogot
ICAgIGNhc2UgODE5MjoKLSAgICBjYXNlIDE2Mzg0OgotICAgICAgICBtX2J1ZmZlclNpemUgPSBi
dWZmZXJTaXplOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBtX2J1ZmZl
clNpemUgPSBEZWZhdWx0QnVmZmVyU2l6ZTsKLSAgICB9Ci0gICAgICAgIAotICAgIC8vIFJlZ2Fy
ZGxlc3Mgb2YgdGhlIGFsbG93ZWQgYnVmZmVyIHNpemVzIGFib3ZlLCB3ZSBzdGlsbCBuZWVkIHRv
IHByb2Nlc3MgYXQgdGhlIGdyYW51bGFyaXR5IG9mIHRoZSBBdWRpb05vZGUuCi0gICAgaWYgKG1f
YnVmZmVyU2l6ZSA8IEF1ZGlvTm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1lcykKLSAgICAgICAg
bV9idWZmZXJTaXplID0gQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVzOwotCi0gICAg
Ly8gRklYTUU6IFJpZ2h0IG5vdyB3ZSdyZSBoYXJkY29kZWQgdG8gc2luZ2xlIGlucHV0IGFuZCBz
aW5nbGUgb3V0cHV0LgotICAgIC8vIEFsdGhvdWdoIHRoZSBzcGVjaWZpY2F0aW9uIHNheXMgdGhp
cyBpcyBPSyBmb3IgYSBzaW1wbGUgaW1wbGVtZW50YXRpb24sIG11bHRpcGxlIGlucHV0cyBhbmQg
b3V0cHV0cyB3b3VsZCBiZSBnb29kLgotICAgIEFTU0VSVF9VTlVTRUQobnVtYmVyT2ZJbnB1dHMs
IG51bWJlck9mSW5wdXRzID09IDEpOwotICAgIEFTU0VSVF9VTlVTRUQobnVtYmVyT2ZPdXRwdXRz
LCBudW1iZXJPZk91dHB1dHMgPT0gMSk7Ci0gICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlv
Tm9kZUlucHV0KHRoaXMpKSk7Ci0gICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVP
dXRwdXQodGhpcywgMikpKTsKLQotICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlSmF2YVNjcmlwdCk7
Ci0KLSAgICBpbml0aWFsaXplKCk7Ci19Ci0KLUphdmFTY3JpcHRBdWRpb05vZGU6On5KYXZhU2Ny
aXB0QXVkaW9Ob2RlKCkKLXsKLSAgICB1bmluaXRpYWxpemUoKTsKLX0KLQotdm9pZCBKYXZhU2Ny
aXB0QXVkaW9Ob2RlOjppbml0aWFsaXplKCkKLXsKLSAgICBpZiAoaXNJbml0aWFsaXplZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCBzYW1wbGVSYXRlID0gY29udGV4dCgpLT5zYW1w
bGVSYXRlKCk7Ci0KLSAgICAvLyBDcmVhdGUgZG91YmxlIGJ1ZmZlcnMgb24gYm90aCB0aGUgaW5w
dXQgYW5kIG91dHB1dCBzaWRlcy4KLSAgICAvLyBUaGVzZSBBdWRpb0J1ZmZlcnMgd2lsbCBiZSBk
aXJlY3RseSBhY2Nlc3NlZCBpbiB0aGUgbWFpbiB0aHJlYWQgYnkgSmF2YVNjcmlwdC4KLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjsgKytpKSB7Ci0gICAgICAgIG1faW5wdXRCdWZmZXJz
LmFwcGVuZChBdWRpb0J1ZmZlcjo6Y3JlYXRlKDIsIGJ1ZmZlclNpemUoKSwgc2FtcGxlUmF0ZSkp
OwotICAgICAgICBtX291dHB1dEJ1ZmZlcnMuYXBwZW5kKEF1ZGlvQnVmZmVyOjpjcmVhdGUoMiwg
YnVmZmVyU2l6ZSgpLCBzYW1wbGVSYXRlKSk7Ci0gICAgfQotCi0gICAgQXVkaW9Ob2RlOjppbml0
aWFsaXplKCk7Ci19Ci0KLXZvaWQgSmF2YVNjcmlwdEF1ZGlvTm9kZTo6dW5pbml0aWFsaXplKCkK
LXsKLSAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9p
bnB1dEJ1ZmZlcnMuY2xlYXIoKTsKLSAgICBtX291dHB1dEJ1ZmZlcnMuY2xlYXIoKTsKLQotICAg
IEF1ZGlvTm9kZTo6dW5pbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgSmF2YVNjcmlwdEF1ZGlvTm9k
ZTo6cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIC8vIERpc2N1c3Npb24g
YWJvdXQgaW5wdXRzIGFuZCBvdXRwdXRzOgotICAgIC8vIEFzIGluIG90aGVyIEF1ZGlvTm9kZXMs
IEphdmFTY3JpcHRBdWRpb05vZGUgdXNlcyBhbiBBdWRpb0J1cyBmb3IgaXRzIGlucHV0IGFuZCBv
dXRwdXQgKHNlZSBpbnB1dEJ1cyBhbmQgb3V0cHV0QnVzIGJlbG93KS4KLSAgICAvLyBBZGRpdGlv
bmFsbHksIHRoZXJlIGlzIGEgZG91YmxlLWJ1ZmZlcmluZyBmb3IgaW5wdXQgYW5kIG91dHB1dCB3
aGljaCBpcyBleHBvc2VkIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgKHNlZSBpbnB1dEJ1ZmZlciBh
bmQgb3V0cHV0QnVmZmVyIGJlbG93KS4KLSAgICAvLyBUaGlzIG5vZGUgaXMgdGhlIHByb2R1Y2Vy
IGZvciBpbnB1dEJ1ZmZlciBhbmQgdGhlIGNvbnN1bWVyIGZvciBvdXRwdXRCdWZmZXIuCi0gICAg
Ly8gVGhlIEphdmFTY3JpcHQgY29kZSBpcyB0aGUgY29uc3VtZXIgb2YgaW5wdXRCdWZmZXIgYW5k
IHRoZSBwcm9kdWNlciBmb3Igb3V0cHV0QnVmZmVyLgotICAgIAotICAgIC8vIEdldCBpbnB1dCBh
bmQgb3V0cHV0IGJ1c3Nlcy4KLSAgICBBdWRpb0J1cyogaW5wdXRCdXMgPSB0aGlzLT5pbnB1dCgw
KS0+YnVzKCk7Ci0gICAgQXVkaW9CdXMqIG91dHB1dEJ1cyA9IHRoaXMtPm91dHB1dCgwKS0+YnVz
KCk7Ci0KLSAgICAvLyBHZXQgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzLiAgV2UgZG91YmxlLWJ1
ZmZlciBib3RoIHRoZSBpbnB1dCBhbmQgb3V0cHV0IHNpZGVzLgotICAgIHVuc2lnbmVkIGRvdWJs
ZUJ1ZmZlckluZGV4ID0gdGhpcy0+ZG91YmxlQnVmZmVySW5kZXgoKTsKLSAgICBib29sIGlzRG91
YmxlQnVmZmVySW5kZXhHb29kID0gZG91YmxlQnVmZmVySW5kZXggPCAyICYmIGRvdWJsZUJ1ZmZl
ckluZGV4IDwgbV9pbnB1dEJ1ZmZlcnMuc2l6ZSgpICYmIGRvdWJsZUJ1ZmZlckluZGV4IDwgbV9v
dXRwdXRCdWZmZXJzLnNpemUoKTsKLSAgICBBU1NFUlQoaXNEb3VibGVCdWZmZXJJbmRleEdvb2Qp
OwotICAgIGlmICghaXNEb3VibGVCdWZmZXJJbmRleEdvb2QpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBBdWRpb0J1ZmZlciogaW5wdXRCdWZmZXIgPSBtX2lucHV0QnVmZmVyc1tkb3VibGVC
dWZmZXJJbmRleF0uZ2V0KCk7Ci0gICAgQXVkaW9CdWZmZXIqIG91dHB1dEJ1ZmZlciA9IG1fb3V0
cHV0QnVmZmVyc1tkb3VibGVCdWZmZXJJbmRleF0uZ2V0KCk7Ci0KLSAgICAvLyBDaGVjayB0aGUg
Y29uc2lzdGVuY3kgb2YgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzLgotICAgIGJvb2wgYnVmZmVy
c0FyZUdvb2QgPSBpbnB1dEJ1ZmZlciAmJiBvdXRwdXRCdWZmZXIgJiYgYnVmZmVyU2l6ZSgpID09
IGlucHV0QnVmZmVyLT5sZW5ndGgoKSAmJiBidWZmZXJTaXplKCkgPT0gb3V0cHV0QnVmZmVyLT5s
ZW5ndGgoKQotICAgICAgICAmJiBtX2J1ZmZlclJlYWRXcml0ZUluZGV4ICsgZnJhbWVzVG9Qcm9j
ZXNzIDw9IGJ1ZmZlclNpemUoKTsKLSAgICBBU1NFUlQoYnVmZmVyc0FyZUdvb2QpOwotICAgIGlm
ICghYnVmZmVyc0FyZUdvb2QpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFdlIGFzc3VtZSB0
aGF0IGJ1ZmZlclNpemUoKSBpcyBldmVubHkgZGl2aXNpYmxlIGJ5IGZyYW1lc1RvUHJvY2VzcyAt
IHNob3VsZCBhbHdheXMgYmUgdHJ1ZSwgYnV0IHdlIHNob3VsZCBzdGlsbCBjaGVjay4KLSAgICBi
b29sIGlzRnJhbWVzVG9Qcm9jZXNzR29vZCA9IGZyYW1lc1RvUHJvY2VzcyAmJiBidWZmZXJTaXpl
KCkgPj0gZnJhbWVzVG9Qcm9jZXNzICYmICEoYnVmZmVyU2l6ZSgpICUgZnJhbWVzVG9Qcm9jZXNz
KTsKLSAgICBBU1NFUlQoaXNGcmFtZXNUb1Byb2Nlc3NHb29kKTsKLSAgICBpZiAoIWlzRnJhbWVz
VG9Qcm9jZXNzR29vZCkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICB1bnNpZ25lZCBu
dW1iZXJPZklucHV0Q2hhbm5lbHMgPSBpbnB1dEJ1cy0+bnVtYmVyT2ZDaGFubmVscygpOwotICAg
IAotICAgIGJvb2wgY2hhbm5lbHNBcmVHb29kID0gKG51bWJlck9mSW5wdXRDaGFubmVscyA9PSAx
IHx8IG51bWJlck9mSW5wdXRDaGFubmVscyA9PSAyKSAmJiBvdXRwdXRCdXMtPm51bWJlck9mQ2hh
bm5lbHMoKSA9PSAyOwotICAgIEFTU0VSVChjaGFubmVsc0FyZUdvb2QpOwotICAgIGlmICghY2hh
bm5lbHNBcmVHb29kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBmbG9hdCogc291cmNl
TCA9IGlucHV0QnVzLT5jaGFubmVsKDApLT5kYXRhKCk7Ci0gICAgY29uc3QgZmxvYXQqIHNvdXJj
ZVIgPSBudW1iZXJPZklucHV0Q2hhbm5lbHMgPiAxID8gaW5wdXRCdXMtPmNoYW5uZWwoMSktPmRh
dGEoKSA6IDA7Ci0gICAgZmxvYXQqIGRlc3RpbmF0aW9uTCA9IG91dHB1dEJ1cy0+Y2hhbm5lbCgw
KS0+bXV0YWJsZURhdGEoKTsKLSAgICBmbG9hdCogZGVzdGluYXRpb25SID0gb3V0cHV0QnVzLT5j
aGFubmVsKDEpLT5tdXRhYmxlRGF0YSgpOwotCi0gICAgLy8gQ29weSBmcm9tIHRoZSBpbnB1dCB0
byB0aGUgaW5wdXQgYnVmZmVyLiAgU2VlICJidWZmZXJzQXJlR29vZCIgY2hlY2sgYWJvdmUgZm9y
IHNhZmV0eS4KLSAgICBzaXplX3QgYnl0ZXNUb0NvcHkgPSBzaXplb2YoZmxvYXQpICogZnJhbWVz
VG9Qcm9jZXNzOwotICAgIG1lbWNweShpbnB1dEJ1ZmZlci0+Z2V0Q2hhbm5lbERhdGEoMCktPmRh
dGEoKSArIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXgsIHNvdXJjZUwsIGJ5dGVzVG9Db3B5KTsKLSAg
ICAKLSAgICBpZiAobnVtYmVyT2ZJbnB1dENoYW5uZWxzID09IDIpCi0gICAgICAgIG1lbWNweShp
bnB1dEJ1ZmZlci0+Z2V0Q2hhbm5lbERhdGEoMSktPmRhdGEoKSArIG1fYnVmZmVyUmVhZFdyaXRl
SW5kZXgsIHNvdXJjZVIsIGJ5dGVzVG9Db3B5KTsKLSAgICBlbHNlIGlmIChudW1iZXJPZklucHV0
Q2hhbm5lbHMgPT0gMSkgewotICAgICAgICAvLyBJZiB0aGUgaW5wdXQgaXMgbW9ubywgdGhlbiBh
bHNvIGNvcHkgdGhlIG1vbm8gaW5wdXQgdG8gdGhlIHJpZ2h0IGNoYW5uZWwgb2YgdGhlIEF1ZGlv
QnVmZmVyIHdoaWNoIHRoZSBBdWRpb1Byb2Nlc3NpbmdFdmVudCB1c2VzLgotICAgICAgICAvLyBG
SVhNRTogaXQgaXMgbGlrZWx5IHRoZSBhdWRpbyBBUEkgd2lsbCBldm9sdmUgdG8gcHJlc2VudCBh
biBBdWRpb0J1ZmZlciB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBjaGFubmVscyBhcyBvdXIgaW5w
dXQuCi0gICAgICAgIG1lbWNweShpbnB1dEJ1ZmZlci0+Z2V0Q2hhbm5lbERhdGEoMSktPmRhdGEo
KSArIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXgsIHNvdXJjZUwsIGJ5dGVzVG9Db3B5KTsKLSAgICB9
Ci0gICAgCi0gICAgLy8gQ29weSBmcm9tIHRoZSBvdXRwdXQgYnVmZmVyIHRvIHRoZSBvdXRwdXQu
ICBTZWUgImJ1ZmZlcnNBcmVHb29kIiBjaGVjayBhYm92ZSBmb3Igc2FmZXR5LgotICAgIG1lbWNw
eShkZXN0aW5hdGlvbkwsIG91dHB1dEJ1ZmZlci0+Z2V0Q2hhbm5lbERhdGEoMCktPmRhdGEoKSAr
IG1fYnVmZmVyUmVhZFdyaXRlSW5kZXgsIGJ5dGVzVG9Db3B5KTsKLSAgICBtZW1jcHkoZGVzdGlu
YXRpb25SLCBvdXRwdXRCdWZmZXItPmdldENoYW5uZWxEYXRhKDEpLT5kYXRhKCkgKyBtX2J1ZmZl
clJlYWRXcml0ZUluZGV4LCBieXRlc1RvQ29weSk7Ci0KLSAgICAvLyBVcGRhdGUgdGhlIGJ1ZmZl
cmluZyBpbmRleC4KLSAgICBtX2J1ZmZlclJlYWRXcml0ZUluZGV4ID0gKG1fYnVmZmVyUmVhZFdy
aXRlSW5kZXggKyBmcmFtZXNUb1Byb2Nlc3MpICUgYnVmZmVyU2l6ZSgpOwotCi0gICAgLy8gbV9i
dWZmZXJSZWFkV3JpdGVJbmRleCB3aWxsIHdyYXAgYmFjayBhcm91bmQgdG8gMCB3aGVuIHRoZSBj
dXJyZW50IGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycyBhcmUgZnVsbC4KLSAgICAvLyBXaGVuIHRo
aXMgaGFwcGVucywgZmlyZSBhbiBldmVudCBhbmQgc3dhcCBidWZmZXJzLgotICAgIGlmICghbV9i
dWZmZXJSZWFkV3JpdGVJbmRleCkgewotICAgICAgICAvLyBBdm9pZCBidWlsZGluZyB1cCByZXF1
ZXN0cyBvbiB0aGUgbWFpbiB0aHJlYWQgdG8gZmlyZSBwcm9jZXNzIGV2ZW50cyB3aGVuIHRoZXkn
cmUgbm90IGJlaW5nIGhhbmRsZWQuCi0gICAgICAgIC8vIFRoaXMgY291bGQgYmUgYSBwcm9ibGVt
IGlmIHRoZSBtYWluIHRocmVhZCBpcyB2ZXJ5IGJ1c3kgZG9pbmcgb3RoZXIgdGhpbmdzIGFuZCBp
cyBiZWluZyBoZWxkIHVwIGhhbmRsaW5nIHByZXZpb3VzIHJlcXVlc3RzLgotICAgICAgICBpZiAo
bV9pc1JlcXVlc3RPdXRzdGFuZGluZykgewotICAgICAgICAgICAgLy8gV2UncmUgbGF0ZSBpbiBo
YW5kbGluZyB0aGUgcHJldmlvdXMgcmVxdWVzdC4gIFRoZSBtYWluIHRocmVhZCBtdXN0IGJlIHZl
cnkgYnVzeS4KLSAgICAgICAgICAgIC8vIFRoZSBiZXN0IHdlIGNhbiBkbyBpcyBjbGVhciBvdXQg
dGhlIGJ1ZmZlciBvdXJzZWxmIGhlcmUuCi0gICAgICAgICAgICBvdXRwdXRCdWZmZXItPnplcm8o
KTsgICAgICAgICAgICAKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFJlZmVyZW5j
ZSBvdXJzZWxmIHNvIHdlIGRvbid0IGFjY2lkZW50YWxseSBnZXQgZGVsZXRlZCBiZWZvcmUgZmly
ZVByb2Nlc3NFdmVudCgpIGdldHMgY2FsbGVkLgotICAgICAgICAgICAgcmVmKCk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIC8vIEZpcmUgdGhlIGV2ZW50IG9uIHRoZSBtYWluIHRocmVhZCwg
bm90IHRoaXMgb25lICh3aGljaCBpcyB0aGUgcmVhbHRpbWUgYXVkaW8gdGhyZWFkKS4KLSAgICAg
ICAgICAgIG1fZG91YmxlQnVmZmVySW5kZXhGb3JFdmVudCA9IG1fZG91YmxlQnVmZmVySW5kZXg7
Ci0gICAgICAgICAgICBtX2lzUmVxdWVzdE91dHN0YW5kaW5nID0gdHJ1ZTsKLSAgICAgICAgICAg
IGNhbGxPbk1haW5UaHJlYWQoZmlyZVByb2Nlc3NFdmVudERpc3BhdGNoLCB0aGlzKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHN3YXBCdWZmZXJzKCk7Ci0gICAgfQotfQotCi12b2lkIEphdmFTY3Jp
cHRBdWRpb05vZGU6OmZpcmVQcm9jZXNzRXZlbnREaXNwYXRjaCh2b2lkKiB1c2VyRGF0YSkKLXsK
LSAgICBKYXZhU2NyaXB0QXVkaW9Ob2RlKiBqc0F1ZGlvTm9kZSA9IHN0YXRpY19jYXN0PEphdmFT
Y3JpcHRBdWRpb05vZGUqPih1c2VyRGF0YSk7Ci0gICAgQVNTRVJUKGpzQXVkaW9Ob2RlKTsKLSAg
ICBpZiAoIWpzQXVkaW9Ob2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBqc0F1ZGlvTm9kZS0+
ZmlyZVByb2Nlc3NFdmVudCgpOwotCi0gICAgLy8gRGUtcmVmZXJlbmNlIHRvIG1hdGNoIHRoZSBy
ZWYoKSBjYWxsIGluIHByb2Nlc3MoKS4KLSAgICBqc0F1ZGlvTm9kZS0+ZGVyZWYoKTsKLX0KLQot
dm9pZCBKYXZhU2NyaXB0QXVkaW9Ob2RlOjpmaXJlUHJvY2Vzc0V2ZW50KCkKLXsKLSAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkgJiYgbV9pc1JlcXVlc3RPdXRzdGFuZGluZyk7Ci0gICAgCi0gICAg
Ym9vbCBpc0luZGV4R29vZCA9IG1fZG91YmxlQnVmZmVySW5kZXhGb3JFdmVudCA8IDI7Ci0gICAg
QVNTRVJUKGlzSW5kZXhHb29kKTsKLSAgICBpZiAoIWlzSW5kZXhHb29kKQotICAgICAgICByZXR1
cm47Ci0gICAgICAgIAotICAgIEF1ZGlvQnVmZmVyKiBpbnB1dEJ1ZmZlciA9IG1faW5wdXRCdWZm
ZXJzW21fZG91YmxlQnVmZmVySW5kZXhGb3JFdmVudF0uZ2V0KCk7Ci0gICAgQXVkaW9CdWZmZXIq
IG91dHB1dEJ1ZmZlciA9IG1fb3V0cHV0QnVmZmVyc1ttX2RvdWJsZUJ1ZmZlckluZGV4Rm9yRXZl
bnRdLmdldCgpOwotICAgIEFTU0VSVChpbnB1dEJ1ZmZlciAmJiBvdXRwdXRCdWZmZXIpOwotICAg
IGlmICghaW5wdXRCdWZmZXIgfHwgIW91dHB1dEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gQXZvaWQgZmlyaW5nIHRoZSBldmVudCBpZiB0aGUgZG9jdW1lbnQgaGFzIGFscmVhZHkg
Z29uZSBhd2F5LgotICAgIGlmIChjb250ZXh0KCktPmhhc0RvY3VtZW50KCkpIHsKLSAgICAgICAg
Ly8gTGV0IHRoZSBhdWRpbyB0aHJlYWQga25vdyB3ZSd2ZSBnb3R0ZW4gdG8gdGhlIHBvaW50IHdo
ZXJlIGl0J3MgT0sgZm9yIGl0IHRvIG1ha2UgYW5vdGhlciByZXF1ZXN0LgotICAgICAgICBtX2lz
UmVxdWVzdE91dHN0YW5kaW5nID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICAvLyBDYWxsIHRo
ZSBKYXZhU2NyaXB0IGV2ZW50IGhhbmRsZXIgd2hpY2ggd2lsbCBkbyB0aGUgYXVkaW8gcHJvY2Vz
c2luZy4KLSAgICAgICAgZGlzcGF0Y2hFdmVudChBdWRpb1Byb2Nlc3NpbmdFdmVudDo6Y3JlYXRl
KGlucHV0QnVmZmVyLCBvdXRwdXRCdWZmZXIpKTsKLSAgICB9Ci19Ci0KLXZvaWQgSmF2YVNjcmlw
dEF1ZGlvTm9kZTo6cmVzZXQoKQotewotICAgIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXggPSAwOwot
ICAgIG1fZG91YmxlQnVmZmVySW5kZXggPSAwOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IDI7ICsraSkgewotICAgICAgICBtX2lucHV0QnVmZmVyc1tpXS0+emVybygpOwotICAgICAg
ICBtX291dHB1dEJ1ZmZlcnNbaV0tPnplcm8oKTsKLSAgICB9Ci19Ci0KLWNvbnN0IEF0b21pY1N0
cmluZyYgSmF2YVNjcmlwdEF1ZGlvTm9kZTo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JKYXZhU2NyaXB0QXVkaW9Ob2RlOwotfQot
Ci1TY3JpcHRFeGVjdXRpb25Db250ZXh0KiBKYXZhU2NyaXB0QXVkaW9Ob2RlOjpzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29uc3RfY2FzdDxKYXZhU2NyaXB0
QXVkaW9Ob2RlKj4odGhpcyktPmNvbnRleHQoKS0+ZG9jdW1lbnQoKTsKLX0KLQotZG91YmxlIEph
dmFTY3JpcHRBdWRpb05vZGU6OnRhaWxUaW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RkOjpu
dW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOwotfQotCi1kb3VibGUgSmF2YVNjcmlw
dEF1ZGlvTm9kZTo6bGF0ZW5jeVRpbWUoKSBjb25zdAotewotICAgIHJldHVybiBzdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5oCShyZXZpc2lvbiAxMTEyMDgpCisrKyBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEphdmFTY3JpcHRBdWRp
b05vZGVfaAotI2RlZmluZSBKYXZhU2NyaXB0QXVkaW9Ob2RlX2gKLQotI2luY2x1ZGUgIkFjdGl2
ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZS5oIgotI2luY2x1ZGUgIkV2ZW50TGlz
dGVuZXIuaCIKLSNpbmNsdWRlICJFdmVudFRhcmdldC5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IEF1ZGlvQnVmZmVyOwotY2xhc3MgQXVkaW9Db250ZXh0OwotY2xhc3MgQXVkaW9Qcm9jZXNzaW5n
RXZlbnQ7Ci0KLS8vIEphdmFTY3JpcHRBdWRpb05vZGUgaXMgYW4gQXVkaW9Ob2RlIHdoaWNoIGFs
bG93cyBmb3IgYXJiaXRyYXJ5IHN5bnRoZXNpcyBvciBwcm9jZXNzaW5nIGRpcmVjdGx5IHVzaW5n
IEphdmFTY3JpcHQuCi0vLyBUaGUgQVBJIGFsbG93cyBmb3IgYSB2YXJpYWJsZSBudW1iZXIgb2Yg
aW5wdXRzIGFuZCBvdXRwdXRzLCBhbHRob3VnaCBpdCBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGlu
cHV0IG9yIG91dHB1dC4KLS8vIFRoaXMgYmFzaWMgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgbm8g
bW9yZSB0aGFuIG9uZSBpbnB1dCBhbmQgb3V0cHV0LgotLy8gVGhlICJvbmF1ZGlvcHJvY2VzcyIg
YXR0cmlidXRlIGlzIGFuIGV2ZW50IGxpc3RlbmVyIHdoaWNoIHdpbGwgZ2V0IGNhbGxlZCBwZXJp
b2RpY2FsbHkgd2l0aCBhbiBBdWRpb1Byb2Nlc3NpbmdFdmVudCB3aGljaCBoYXMKLS8vIEF1ZGlv
QnVmZmVycyBmb3IgZWFjaCBpbnB1dCBhbmQgb3V0cHV0LgotCi0vLyBGSVhNRTogRXZlbnRUYXJn
ZXQgc2hvdWxkIGJlIGludHJvZHVjZWQgYXQgdGhlIGJhc2Ugb2YgdGhlIGluaGVyaXRhbmNlIGhp
ZXJhcmNoeSAoaS5lLiwgYXMgYSBiYXNlIGNsYXNzIGZvciBBdWRpb05vZGUpLgotY2xhc3MgSmF2
YVNjcmlwdEF1ZGlvTm9kZSA6IHB1YmxpYyBBdWRpb05vZGUsIHB1YmxpYyBFdmVudFRhcmdldCB7
Ci1wdWJsaWM6Ci0gICAgLy8gYnVmZmVyU2l6ZSBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5n
IHZhbHVlczogMjU2LCA1MTIsIDEwMjQsIDIwNDgsIDQwOTYsIDgxOTIsIDE2Mzg0LgotICAgIC8v
IFRoaXMgdmFsdWUgY29udHJvbHMgaG93IGZyZXF1ZW50bHkgdGhlIG9uYXVkaW9wcm9jZXNzIGV2
ZW50IGhhbmRsZXIgaXMgY2FsbGVkIGFuZCBob3cgbWFueSBzYW1wbGUtZnJhbWVzIG5lZWQgdG8g
YmUgcHJvY2Vzc2VkIGVhY2ggY2FsbC4KLSAgICAvLyBMb3dlciBudW1iZXJzIGZvciBidWZmZXJT
aXplIHdpbGwgcmVzdWx0IGluIGEgbG93ZXIgKGJldHRlcikgbGF0ZW5jeS4gSGlnaGVyIG51bWJl
cnMgd2lsbCBiZSBuZWNlc3NhcnkgdG8gYXZvaWQgYXVkaW8gYnJlYWt1cCBhbmQgZ2xpdGNoZXMu
Ci0gICAgLy8gVGhlIHZhbHVlIGNob3NlbiBtdXN0IGNhcmVmdWxseSBiYWxhbmNlIGJldHdlZW4g
bGF0ZW5jeSBhbmQgYXVkaW8gcXVhbGl0eS4KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxKYXZhU2Ny
aXB0QXVkaW9Ob2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSwgc2l6
ZV90IGJ1ZmZlclNpemUsIHVuc2lnbmVkIG51bWJlck9mSW5wdXRzID0gMSwgdW5zaWduZWQgbnVt
YmVyT2ZPdXRwdXRzID0gMSk7Ci0KLSAgICB2aXJ0dWFsIH5KYXZhU2NyaXB0QXVkaW9Ob2RlKCk7
Ci0KLSAgICAvLyBBdWRpb05vZGUKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJh
bWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgaW5pdGlhbGl6ZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1bmluaXRpYWxpemUoKTsKLQotICAg
IC8vIEV2ZW50VGFyZ2V0Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFj
ZU5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSog
ZXZlbnRUYXJnZXREYXRhKCkgeyByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOyB9Ci0gICAgdmly
dHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpICB7IHJldHVybiAm
bV9ldmVudFRhcmdldERhdGE7IH0KLQotICAgIHNpemVfdCBidWZmZXJTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9idWZmZXJTaXplOyB9Ci0KLSAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RF
TkVSKGF1ZGlvcHJvY2Vzcyk7Ci0KLSAgICAvLyBSZWNvbmNpbGUgcmVmL2RlcmVmIHdoaWNoIGFy
ZSBkZWZpbmVkIGJvdGggaW4gQXVkaW9Ob2RlIGFuZCBFdmVudFRhcmdldC4KLSAgICB1c2luZyBB
dWRpb05vZGU6OnJlZjsKLSAgICB1c2luZyBBdWRpb05vZGU6OmRlcmVmOwotICAgIAotcHJpdmF0
ZToKLSAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZp
cnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJREU7Ci0KLSAgICBKYXZhU2Ny
aXB0QXVkaW9Ob2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUsIHNpemVfdCBidWZm
ZXJTaXplLCB1bnNpZ25lZCBudW1iZXJPZklucHV0cywgdW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRz
KTsKLQotICAgIHN0YXRpYyB2b2lkIGZpcmVQcm9jZXNzRXZlbnREaXNwYXRjaCh2b2lkKiB1c2Vy
RGF0YSk7Ci0gICAgdm9pZCBmaXJlUHJvY2Vzc0V2ZW50KCk7Ci0KLSAgICAvLyBEb3VibGUgYnVm
ZmVyaW5nCi0gICAgdW5zaWduZWQgZG91YmxlQnVmZmVySW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X2RvdWJsZUJ1ZmZlckluZGV4OyB9Ci0gICAgdm9pZCBzd2FwQnVmZmVycygpIHsgbV9kb3VibGVC
dWZmZXJJbmRleCA9IDEgLSBtX2RvdWJsZUJ1ZmZlckluZGV4OyB9Ci0gICAgdW5zaWduZWQgbV9k
b3VibGVCdWZmZXJJbmRleDsKLSAgICB1bnNpZ25lZCBtX2RvdWJsZUJ1ZmZlckluZGV4Rm9yRXZl
bnQ7Ci0gICAgVmVjdG9yPFJlZlB0cjxBdWRpb0J1ZmZlcj4gPiBtX2lucHV0QnVmZmVyczsKLSAg
ICBWZWN0b3I8UmVmUHRyPEF1ZGlvQnVmZmVyPiA+IG1fb3V0cHV0QnVmZmVyczsKLQotICAgIHZp
cnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
ZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQotICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2
ZW50VGFyZ2V0RGF0YTsKLQotICAgIHNpemVfdCBtX2J1ZmZlclNpemU7Ci0gICAgdW5zaWduZWQg
bV9idWZmZXJSZWFkV3JpdGVJbmRleDsKLSAgICB2b2xhdGlsZSBib29sIG1faXNSZXF1ZXN0T3V0
c3RhbmRpbmc7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBKYXZh
U2NyaXB0QXVkaW9Ob2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0phdmFTY3Jp
cHRBdWRpb05vZGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0ph
dmFTY3JpcHRBdWRpb05vZGUuaWRsCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwz
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGF1ZGlvIHsKLSAgICAvLyBGb3IgcmVhbC10
aW1lIGF1ZGlvIHN0cmVhbSBzeW50aGVzaXMvcHJvY2Vzc2luZyBpbiBKYXZhU2NyaXB0IAotICAg
IGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKLSAgICAgICAgSlNH
ZW5lcmF0ZVRvSlNPYmplY3QsCi0gICAgICAgIEpTQ3VzdG9tTWFya0Z1bmN0aW9uLAotICAgICAg
ICBFdmVudFRhcmdldAotICAgIF0gSmF2YVNjcmlwdEF1ZGlvTm9kZSA6IEF1ZGlvTm9kZSB7Ci0g
ICAgICAgIC8vIFJlbmRlcmluZyBjYWxsYmFjawotICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0
ZW5lciBvbmF1ZGlvcHJvY2VzczsKLSAgICAgICAgCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBsb25nIGJ1ZmZlclNpemU7Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmNwcAkocmV2aXNpb24gMTExMjA4KQorKysgU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIkxvd1Bhc3MyRmlsdGVyTm9kZS5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUxvd1Bhc3MyRmlsdGVyTm9kZTo6TG93UGFzczJGaWx0
ZXJOb2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICA6IEF1
ZGlvQmFzaWNQcm9jZXNzb3JOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCi17Ci0gICAgbV9wcm9j
ZXNzb3IgPSBhZG9wdFB0cihuZXcgQmlxdWFkUHJvY2Vzc29yKEJpcXVhZFByb2Nlc3Nvcjo6TG93
UGFzcywgc2FtcGxlUmF0ZSwgMSwgZmFsc2UpKTsKLSAgICBiaXF1YWRQcm9jZXNzb3IoKS0+cGFy
YW1ldGVyMSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwotICAgIGJpcXVhZFByb2Nlc3NvcigpLT5w
YXJhbWV0ZXIyKCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgYmlxdWFkUHJvY2Vzc29yKCkt
PnBhcmFtZXRlcjMoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICBzZXROb2RlVHlwZShOb2Rl
VHlwZUxvd1Bhc3MyRmlsdGVyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0xv
d1Bhc3MyRmlsdGVyTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0xvd1Bhc3MyRmlsdGVyTm9kZS5oCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMb3dQYXNzMkZpbHRlck5vZGVfaAotI2RlZmlu
ZSBMb3dQYXNzMkZpbHRlck5vZGVfaAotCi0jaW5jbHVkZSAiQXVkaW9CYXNpY1Byb2Nlc3Nvck5v
ZGUuaCIKLSNpbmNsdWRlICJCaXF1YWRQcm9jZXNzb3IuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBBdWRpb1BhcmFtOwotICAgIAotY2xhc3MgTG93UGFzczJGaWx0ZXJOb2RlIDog
cHVibGljIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxMb3dQYXNzMkZpbHRlck5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQs
IGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IExv
d1Bhc3MyRmlsdGVyTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKSk7ICAgICAgCi0gICAgfQotCi0g
ICAgQXVkaW9QYXJhbSogY3V0b2ZmKCkgeyByZXR1cm4gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFt
ZXRlcjEoKTsgfQotICAgIEF1ZGlvUGFyYW0qIHJlc29uYW5jZSgpIHsgcmV0dXJuIGJpcXVhZFBy
b2Nlc3NvcigpLT5wYXJhbWV0ZXIyKCk7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgTG93UGFzczJG
aWx0ZXJOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwotCi0gICAgQmlxdWFk
UHJvY2Vzc29yKiBiaXF1YWRQcm9jZXNzb3IoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxCaXF1YWRQ
cm9jZXNzb3IqPihwcm9jZXNzb3IoKSk7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIExvd1Bhc3MyRmlsdGVyTm9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5pZGwJKHJldmlzaW9uIDExMTIwOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBhdWRpbyB7Ci0gICAg
Ly8gVHdvLXBvbGUgbG93cGFzcyBmaWx0ZXIKLSAgICAvLyBGSVhNRTogZGVzaWduIEJpcXVhZE5v
ZGUgYW5kIHVzZSBpbnN0ZWFkIG9mIHRoaXMKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25k
aXRpb25hbD1XRUJfQVVESU8sCi0gICAgICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0Ci0gICAgXSBM
b3dQYXNzMkZpbHRlck5vZGUgOiBBdWRpb05vZGUgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1
dGUgQXVkaW9QYXJhbSBjdXRvZmY7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb1Bh
cmFtIHJlc29uYW5jZTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwCShyZXZpc2lvbiAx
MTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJj
ZU5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1NyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykgJiYgRU5BQkxFKFZJ
REVPKQotCi0jaW5jbHVkZSAiTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmgiCi0KLSNpbmNs
dWRlICJBdWRpb0NvbnRleHQuaCIKLSNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKLSNpbmNs
dWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKLSNpbmNsdWRlIDx3dGYv
TG9ja2VyLmg+Ci0KLS8vIFRoZXNlIGFyZSBzb21ld2hhdCBhcmJpdHJhcnkgbGltaXRzLCBidXQg
d2UgbmVlZCB0byBkbyBzb21lIGtpbmQgb2Ygc2FuaXR5LWNoZWNraW5nLgotY29uc3QgdW5zaWdu
ZWQgbWluU2FtcGxlUmF0ZSA9IDgwMDA7Ci1jb25zdCB1bnNpZ25lZCBtYXhTYW1wbGVSYXRlID0g
MTkyMDAwOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8TWVkaWFFbGVtZW50
QXVkaW9Tb3VyY2VOb2RlPiBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6OmNyZWF0ZShBdWRp
b0NvbnRleHQqIGNvbnRleHQsIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZShjb250ZXh0
LCBtZWRpYUVsZW1lbnQpKTsKLX0KLQotTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpNZWRp
YUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBIVE1MTWVkaWFF
bGVtZW50KiBtZWRpYUVsZW1lbnQpCi0gICAgOiBBdWRpb1NvdXJjZU5vZGUoY29udGV4dCwgY29u
dGV4dC0+c2FtcGxlUmF0ZSgpKQotICAgICwgbV9tZWRpYUVsZW1lbnQobWVkaWFFbGVtZW50KQot
ICAgICwgbV9zb3VyY2VOdW1iZXJPZkNoYW5uZWxzKDApCi0gICAgLCBtX3NvdXJjZVNhbXBsZVJh
dGUoMCkKLXsKLSAgICAvLyBEZWZhdWx0IHRvIHN0ZXJlby4gVGhpcyBjb3VsZCBjaGFuZ2UgZGVw
ZW5kaW5nIG9uIHdoYXQgdGhlIG1lZGlhIGVsZW1lbnQgLnNyYyBpcyBzZXQgdG8uCi0gICAgYWRk
T3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywgMikpKTsKLQotICAgIHNl
dE5vZGVUeXBlKE5vZGVUeXBlTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2UpOwotCi0gICAgaW5pdGlh
bGl6ZSgpOwotfQotCi1NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6On5NZWRpYUVsZW1lbnRB
dWRpb1NvdXJjZU5vZGUoKQotewotICAgIG1fbWVkaWFFbGVtZW50LT5zZXRBdWRpb1NvdXJjZU5v
ZGUoMCk7Ci0gICAgdW5pbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgTWVkaWFFbGVtZW50QXVkaW9T
b3VyY2VOb2RlOjpzZXRGb3JtYXQoc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGZsb2F0IHNvdXJj
ZVNhbXBsZVJhdGUpCi17Ci0gICAgaWYgKG51bWJlck9mQ2hhbm5lbHMgIT0gbV9zb3VyY2VOdW1i
ZXJPZkNoYW5uZWxzIHx8IHNvdXJjZVNhbXBsZVJhdGUgIT0gbV9zb3VyY2VTYW1wbGVSYXRlKSB7
Ci0gICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgbXVsdGktY2hhbm5lbCBncmVhdGVyIHRoYW4g
c3RlcmVvLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzUxMTkKLSAgICAgICAgaWYgKCFudW1iZXJPZkNoYW5uZWxzIHx8IG51bWJlck9mQ2hhbm5l
bHMgPiAyIHx8IHNvdXJjZVNhbXBsZVJhdGUgPCBtaW5TYW1wbGVSYXRlIHx8IHNvdXJjZVNhbXBs
ZVJhdGUgPiBtYXhTYW1wbGVSYXRlKSB7Ci0gICAgICAgICAgICAvLyBwcm9jZXNzKCkgd2lsbCBn
ZW5lcmF0ZSBzaWxlbmNlIGZvciB0aGVzZSB1bmluaXRpYWxpemVkIHZhbHVlcy4KLSAgICAgICAg
ICAgIExPRyhNZWRpYSwgIk1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6c2V0Rm9ybWF0KCV1
LCAlZikgLSB1bmhhbmRsZWQgZm9ybWF0IGNoYW5nZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihu
dW1iZXJPZkNoYW5uZWxzKSwgc291cmNlU2FtcGxlUmF0ZSk7Ci0gICAgICAgICAgICBtX3NvdXJj
ZU51bWJlck9mQ2hhbm5lbHMgPSAwOwotICAgICAgICAgICAgbV9zb3VyY2VTYW1wbGVSYXRlID0g
MDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1fc291cmNlTnVt
YmVyT2ZDaGFubmVscyA9IG51bWJlck9mQ2hhbm5lbHM7Ci0gICAgICAgIG1fc291cmNlU2FtcGxl
UmF0ZSA9IHNvdXJjZVNhbXBsZVJhdGU7Ci0KLSAgICAgICAgLy8gU3luY2hyb25pemUgd2l0aCBw
cm9jZXNzKCkuCi0gICAgICAgIExvY2tlcjxNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+IGxv
Y2tlcigqdGhpcyk7Ci0KLSAgICAgICAgaWYgKHNvdXJjZVNhbXBsZVJhdGUgIT0gc2FtcGxlUmF0
ZSgpKSB7Ci0gICAgICAgICAgICBkb3VibGUgc2NhbGVGYWN0b3IgPSBzb3VyY2VTYW1wbGVSYXRl
IC8gc2FtcGxlUmF0ZSgpOwotICAgICAgICAgICAgbV9tdWx0aUNoYW5uZWxSZXNhbXBsZXIgPSBh
ZG9wdFB0cihuZXcgTXVsdGlDaGFubmVsUmVzYW1wbGVyKHNjYWxlRmFjdG9yLCBudW1iZXJPZkNo
YW5uZWxzKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBCeXBhc3MgcmVzYW1w
bGluZy4KLSAgICAgICAgICAgIG1fbXVsdGlDaGFubmVsUmVzYW1wbGVyLmNsZWFyKCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUaGUgY29udGV4dCBtdXN0IGJlIGxv
Y2tlZCB3aGVuIGNoYW5naW5nIHRoZSBudW1iZXIgb2Ygb3V0cHV0IGNoYW5uZWxzLgotICAgICAg
ICAgICAgQXVkaW9Db250ZXh0OjpBdXRvTG9ja2VyIGNvbnRleHRMb2NrZXIoY29udGV4dCgpKTsK
LQotICAgICAgICAgICAgLy8gRG8gYW55IG5lY2Vzc3NhcnkgcmUtY29uZmlndXJhdGlvbiB0byB0
aGUgb3V0cHV0J3MgbnVtYmVyIG9mIGNoYW5uZWxzLgotICAgICAgICAgICAgb3V0cHV0KDApLT5z
ZXROdW1iZXJPZkNoYW5uZWxzKG51bWJlck9mQ2hhbm5lbHMpOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6cHJvY2VzcyhzaXplX3QgbnVt
YmVyT2ZGcmFtZXMpCi17Ci0gICAgQXVkaW9CdXMqIG91dHB1dEJ1cyA9IG91dHB1dCgwKS0+YnVz
KCk7Ci0KLSAgICBpZiAoIW1lZGlhRWxlbWVudCgpIHx8ICFtX3NvdXJjZU51bWJlck9mQ2hhbm5l
bHMgfHwgIW1fc291cmNlU2FtcGxlUmF0ZSkgewotICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFVzZSBhIHRyeUxvY2soKSB0byBhdm9p
ZCBjb250ZW50aW9uIGluIHRoZSByZWFsLXRpbWUgYXVkaW8gdGhyZWFkLgotICAgIC8vIElmIHdl
IGZhaWwgdG8gYWNxdWlyZSB0aGUgbG9jayB0aGVuIHRoZSBIVE1MTWVkaWFFbGVtZW50IG11c3Qg
YmUgaW4gdGhlIG1pZGRsZSBvZgotICAgIC8vIHJlY29uZmlndXJpbmcgaXRzIHBsYXliYWNrIGVu
Z2luZSwgc28gd2Ugb3V0cHV0IHNpbGVuY2UgaW4gdGhpcyBjYXNlLgotICAgIGlmIChtX3Byb2Nl
c3NMb2NrLnRyeUxvY2soKSkgewotICAgICAgICBpZiAoQXVkaW9Tb3VyY2VQcm92aWRlciogcHJv
dmlkZXIgPSBtZWRpYUVsZW1lbnQoKS0+YXVkaW9Tb3VyY2VQcm92aWRlcigpKSB7Ci0gICAgICAg
ICAgICBpZiAobV9tdWx0aUNoYW5uZWxSZXNhbXBsZXIuZ2V0KCkpIHsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQobV9zb3VyY2VTYW1wbGVSYXRlICE9IHNhbXBsZVJhdGUoKSk7Ci0gICAgICAgICAg
ICAgICAgbV9tdWx0aUNoYW5uZWxSZXNhbXBsZXItPnByb2Nlc3MocHJvdmlkZXIsIG91dHB1dEJ1
cywgbnVtYmVyT2ZGcmFtZXMpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAvLyBCeXBhc3MgdGhlIHJlc2FtcGxlciBjb21wbGV0ZWx5IGlmIHRoZSBzb3VyY2UgaXMgYXQg
dGhlIGNvbnRleHQncyBzYW1wbGUtcmF0ZS4KLSAgICAgICAgICAgICAgICBBU1NFUlQobV9zb3Vy
Y2VTYW1wbGVSYXRlID09IHNhbXBsZVJhdGUoKSk7Ci0gICAgICAgICAgICAgICAgcHJvdmlkZXIt
PnByb3ZpZGVJbnB1dChvdXRwdXRCdXMsIG51bWJlck9mRnJhbWVzKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEVpdGhlciB0aGlzIHBvcnQgZG9lc24n
dCB5ZXQgc3VwcG9ydCBIVE1MTWVkaWFFbGVtZW50IGF1ZGlvIHN0cmVhbSBhY2Nlc3MsCi0gICAg
ICAgICAgICAvLyBvciB0aGUgc3RyZWFtIGlzIG5vdCB5ZXQgYXZhaWxhYmxlLgotICAgICAgICAg
ICAgb3V0cHV0QnVzLT56ZXJvKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9wcm9jZXNzTG9jay51
bmxvY2soKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXZSBmYWlsZWQgdG8gYWNxdWlyZSB0
aGUgbG9jay4KLSAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7Ci0gICAgfQotfQotCi12b2lkIE1l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6cmVzZXQoKQotewotfQotCi12b2lkIE1lZGlhRWxl
bWVudEF1ZGlvU291cmNlTm9kZTo6bG9jaygpCi17Ci0gICAgcmVmKCk7Ci0gICAgbV9wcm9jZXNz
TG9jay5sb2NrKCk7Ci19Ci0KLXZvaWQgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjp1bmxv
Y2soKQotewotICAgIG1fcHJvY2Vzc0xvY2sudW5sb2NrKCk7Ci0gICAgZGVyZWYoKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZS5oCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGVf
aAotI2RlZmluZSBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGVfaAotCi0jaWYgRU5BQkxFKFZJ
REVPKQotCi0jaW5jbHVkZSAiQXVkaW9Tb3VyY2VOb2RlLmgiCi0jaW5jbHVkZSAiQXVkaW9Tb3Vy
Y2VQcm92aWRlckNsaWVudC5oIgotI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNpbmNs
dWRlICJNdWx0aUNoYW5uZWxSZXNhbXBsZXIuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9Db250ZXh0OwotICAgIAotY2xhc3Mg
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlIDogcHVibGljIEF1ZGlvU291cmNlTm9kZSwgcHVi
bGljIEF1ZGlvU291cmNlUHJvdmlkZXJDbGllbnQgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCos
IEhUTUxNZWRpYUVsZW1lbnQqKTsKLQotICAgIHZpcnR1YWwgfk1lZGlhRWxlbWVudEF1ZGlvU291
cmNlTm9kZSgpOwotCi0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KCkgeyByZXR1
cm4gbV9tZWRpYUVsZW1lbnQuZ2V0KCk7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCi0KLSAgICAvLyBBdWRpb05vZGUKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzcyhz
aXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKLSAgICAK
LSAgICAvLyBBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIHNldEZv
cm1hdChzaXplX3QgbnVtYmVyT2ZDaGFubmVscywgZmxvYXQgc2FtcGxlUmF0ZSk7Ci0gICAgCi0g
ICAgdm9pZCBsb2NrKCk7Ci0gICAgdm9pZCB1bmxvY2soKTsKLQotcHJpdmF0ZToKLSAgICBNZWRp
YUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUoQXVkaW9Db250ZXh0KiwgSFRNTE1lZGlhRWxlbWVudCop
OwotCi0gICAgUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1fbWVkaWFFbGVtZW50OwotICAgIE11
dGV4IG1fcHJvY2Vzc0xvY2s7Ci0KLSAgICB1bnNpZ25lZCBtX3NvdXJjZU51bWJlck9mQ2hhbm5l
bHM7Ci0gICAgZG91YmxlIG1fc291cmNlU2FtcGxlUmF0ZTsKLQotICAgIE93blB0cjxNdWx0aUNo
YW5uZWxSZXNhbXBsZXI+IG1fbXVsdGlDaGFubmVsUmVzYW1wbGVyOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQotCi0jZW5kaWYgLy8gTWVk
aWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmlkbAkocmV2aXNpb24g
MTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3Vy
Y2VOb2RlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzMiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
bW9kdWxlIGF1ZGlvIHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1XRUJf
QVVESU8mVklERU8sCi0gICAgICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0Ci0gICAgXSBNZWRpYUVs
ZW1lbnRBdWRpb1NvdXJjZU5vZGUgOiBBdWRpb1NvdXJjZU5vZGUgewotICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgSFRNTE1lZGlhRWxlbWVudCBtZWRpYUVsZW1lbnQ7Ci0gICAgfTsKLX0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29t
cGxldGlvbkV2ZW50LmNwcAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5B
QkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIk9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5o
IgotCi0jaW5jbHVkZSAiQXVkaW9CdWZmZXIuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxPZmZsaW5lQXVkaW9Db21wbGV0aW9u
RXZlbnQ+IE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6Y3JlYXRlKCkKLXsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50PiBPZmZsaW5lQXVkaW9Db21wbGV0aW9u
RXZlbnQ6OmNyZWF0ZShQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiByZW5kZXJlZEJ1ZmZlcikKLXsK
LSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudChyZW5k
ZXJlZEJ1ZmZlcikpOwotfQotCi1PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ6Ok9mZmxpbmVB
dWRpb0NvbXBsZXRpb25FdmVudCgpCi17Ci19Ci0KLQotT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2
ZW50OjpPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQoUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4g
cmVuZGVyZWRCdWZmZXIpCi0gICAgOiBFdmVudChldmVudE5hbWVzKCkuY29tcGxldGVFdmVudCwg
dHJ1ZSwgZmFsc2UpCi0gICAgLCBtX3JlbmRlcmVkQnVmZmVyKHJlbmRlcmVkQnVmZmVyKQotewot
fQotCi1PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ6On5PZmZsaW5lQXVkaW9Db21wbGV0aW9u
RXZlbnQoKQotewotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIE9mZmxpbmVBdWRpb0NvbXBsZXRp
b25FdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMo
KS5pbnRlcmZhY2VGb3JPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZl
bnQuaAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGlu
ZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50X2gKLSNkZWZp
bmUgT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50X2gKLQotI2luY2x1ZGUgIkF1ZGlvQnVmZmVy
LmgiCi0jaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRp
b0J1ZmZlcjsKLSAgICAKLWNsYXNzIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCA6IHB1Ymxp
YyBFdmVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8T2ZmbGluZUF1ZGlvQ29t
cGxldGlvbkV2ZW50PiBjcmVhdGUoKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxPZmZsaW5lQXVk
aW9Db21wbGV0aW9uRXZlbnQ+IGNyZWF0ZShQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiByZW5kZXJl
ZEJ1ZmZlcik7Ci0gICAgCi0gICAgdmlydHVhbCB+T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50
KCk7Ci0KLSAgICBBdWRpb0J1ZmZlciogcmVuZGVyZWRCdWZmZXIoKSB7IHJldHVybiBtX3JlbmRl
cmVkQnVmZmVyLmdldCgpOyB9Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50
ZXJmYWNlTmFtZSgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIE9mZmxpbmVBdWRpb0NvbXBsZXRp
b25FdmVudCgpOwotICAgIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudChQYXNzUmVmUHRyPEF1
ZGlvQnVmZmVyPiByZW5kZXJlZEJ1ZmZlcik7Ci0KLSAgICBSZWZQdHI8QXVkaW9CdWZmZXI+IG1f
cmVuZGVyZWRCdWZmZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnRfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmlkbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaWRsCShyZXZp
c2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21w
bGV0aW9uRXZlbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi1tb2R1bGUgYXVkaW8gewotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFs
PVdFQl9BVURJTywKLSAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKLSAgICBdIE9mZmxpbmVB
dWRpb0NvbXBsZXRpb25FdmVudCA6IEV2ZW50IHsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IEF1ZGlvQnVmZmVyIHJlbmRlcmVkQnVmZmVyOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5j
cHAJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVB
dWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTcwICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0g
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElP
KQotCi0jaW5jbHVkZSAiT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgiCi0KLSNpbmNsdWRl
ICJBdWRpb0J1cy5oIgotI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgotI2luY2x1ZGUgIkhSVEZE
YXRhYmFzZUxvYWRlci5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotIAotbmFtZXNwYWNlIFdlYkNvcmUg
ewotICAgIAotY29uc3Qgc2l6ZV90IHJlbmRlclF1YW50dW1TaXplID0gMTI4OyAgICAKLQotT2Zm
bGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVk
aW9Db250ZXh0KiBjb250ZXh0LCBBdWRpb0J1ZmZlciogcmVuZGVyVGFyZ2V0KQotICAgIDogQXVk
aW9EZXN0aW5hdGlvbk5vZGUoY29udGV4dCwgcmVuZGVyVGFyZ2V0LT5zYW1wbGVSYXRlKCkpCi0g
ICAgLCBtX3JlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpCi0gICAgLCBtX3JlbmRlclRocmVhZCgw
KQotICAgICwgbV9zdGFydGVkUmVuZGVyaW5nKGZhbHNlKQotewotICAgIG1fcmVuZGVyQnVzID0g
YWRvcHRQdHIobmV3IEF1ZGlvQnVzKHJlbmRlclRhcmdldC0+bnVtYmVyT2ZDaGFubmVscygpLCBy
ZW5kZXJRdWFudHVtU2l6ZSkpOwotfQotCi1PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6On5P
ZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUoKQotewotICAgIHVuaW5pdGlhbGl6ZSgpOwotfQot
Ci12b2lkIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6aW5pdGlhbGl6ZSgpCi17Ci0gICAg
aWYgKGlzSW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQXVkaW9Ob2RlOjpp
bml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjp1bmlu
aXRpYWxpemUoKQotewotICAgIGlmICghaXNJbml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9yZW5kZXJUaHJlYWQpIHsKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBs
ZXRpb24obV9yZW5kZXJUaHJlYWQpOwotICAgICAgICBtX3JlbmRlclRocmVhZCA9IDA7Ci0gICAg
fQotCi0gICAgQXVkaW9Ob2RlOjp1bmluaXRpYWxpemUoKTsKLX0KLQotdm9pZCBPZmZsaW5lQXVk
aW9EZXN0aW5hdGlvbk5vZGU6OnN0YXJ0UmVuZGVyaW5nKCkKLXsKLSAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotICAgIEFTU0VSVChtX3JlbmRlclRhcmdldC5nZXQoKSk7Ci0gICAgaWYgKCFt
X3JlbmRlclRhcmdldC5nZXQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmICghbV9z
dGFydGVkUmVuZGVyaW5nKSB7Ci0gICAgICAgIG1fc3RhcnRlZFJlbmRlcmluZyA9IHRydWU7Ci0g
ICAgICAgIHJlZigpOyAvLyBTZWUgY29ycmVzcG9uZGluZyBkZXJlZigpIGNhbGwgaW4gbm90aWZ5
Q29tcGxldGVEaXNwYXRjaCgpLgotICAgICAgICBtX3JlbmRlclRocmVhZCA9IGNyZWF0ZVRocmVh
ZChPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnJlbmRlckVudHJ5LCB0aGlzLCAib2ZmbGlu
ZSByZW5kZXJlciIpOwotICAgIH0KLX0KLQotLy8gRG8gb2ZmbGluZSByZW5kZXJpbmcgaW4gdGhp
cyB0aHJlYWQuCi12b2lkIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6cmVuZGVyRW50cnko
dm9pZCogdGhyZWFkRGF0YSkKLXsKLSAgICBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUqIGRl
c3RpbmF0aW9uTm9kZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25O
b2RlKj4odGhyZWFkRGF0YSk7Ci0gICAgQVNTRVJUKGRlc3RpbmF0aW9uTm9kZSk7Ci0gICAgZGVz
dGluYXRpb25Ob2RlLT5yZW5kZXIoKTsKLX0KLQotdm9pZCBPZmZsaW5lQXVkaW9EZXN0aW5hdGlv
bk5vZGU6OnJlbmRlcigpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNT
RVJUKG1fcmVuZGVyQnVzLmdldCgpKTsKLSAgICBpZiAoIW1fcmVuZGVyQnVzLmdldCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgYm9vbCBjaGFubmVsc01hdGNoID0gbV9yZW5kZXJCdXMt
Pm51bWJlck9mQ2hhbm5lbHMoKSA9PSBtX3JlbmRlclRhcmdldC0+bnVtYmVyT2ZDaGFubmVscygp
OwotICAgIEFTU0VSVChjaGFubmVsc01hdGNoKTsKLSAgICBpZiAoIWNoYW5uZWxzTWF0Y2gpCi0g
ICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgYm9vbCBpc1JlbmRlckJ1c0FsbG9jYXRlZCA9
IG1fcmVuZGVyQnVzLT5sZW5ndGgoKSA+PSByZW5kZXJRdWFudHVtU2l6ZTsKLSAgICBBU1NFUlQo
aXNSZW5kZXJCdXNBbGxvY2F0ZWQpOwotICAgIGlmICghaXNSZW5kZXJCdXNBbGxvY2F0ZWQpCi0g
ICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgLy8gU3luY2hyb25pemUgd2l0aCBIUlRGRGF0
YWJhc2VMb2FkZXIuCi0gICAgLy8gVGhlIGRhdGFiYXNlIG11c3QgYmUgbG9hZGVkIGJlZm9yZSB3
ZSBjYW4gcHJvY2VlZC4KLSAgICBIUlRGRGF0YWJhc2VMb2FkZXIqIGxvYWRlciA9IEhSVEZEYXRh
YmFzZUxvYWRlcjo6bG9hZGVyKCk7Ci0gICAgQVNTRVJUKGxvYWRlcik7Ci0gICAgaWYgKCFsb2Fk
ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBsb2FkZXItPndhaXRGb3JMb2FkZXJUaHJl
YWRDb21wbGV0aW9uKCk7Ci0gICAgICAgIAotICAgIC8vIEJyZWFrIHVwIHRoZSByZW5kZXIgdGFy
Z2V0IGludG8gc21hbGxlciAicmVuZGVyIHF1YW50aXplIiBzaXplZCBwaWVjZXMuCi0gICAgLy8g
UmVuZGVyIHVudGlsIHdlJ3JlIGZpbmlzaGVkLgotICAgIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3Mg
PSBtX3JlbmRlclRhcmdldC0+bGVuZ3RoKCk7Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVs
cyA9IG1fcmVuZGVyVGFyZ2V0LT5udW1iZXJPZkNoYW5uZWxzKCk7Ci0KLSAgICB1bnNpZ25lZCBu
ID0gMDsKLSAgICB3aGlsZSAoZnJhbWVzVG9Qcm9jZXNzID4gMCkgewotICAgICAgICAvLyBSZW5k
ZXIgb25lIHJlbmRlciBxdWFudHVtLgotICAgICAgICBwcm92aWRlSW5wdXQobV9yZW5kZXJCdXMu
Z2V0KCksIHJlbmRlclF1YW50dW1TaXplKTsKLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBmcmFt
ZXNBdmFpbGFibGVUb0NvcHkgPSBtaW4oZnJhbWVzVG9Qcm9jZXNzLCByZW5kZXJRdWFudHVtU2l6
ZSk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWxJbmRleCA9IDA7IGNo
YW5uZWxJbmRleCA8IG51bWJlck9mQ2hhbm5lbHM7ICsrY2hhbm5lbEluZGV4KSB7Ci0gICAgICAg
ICAgICBjb25zdCBmbG9hdCogc291cmNlID0gbV9yZW5kZXJCdXMtPmNoYW5uZWwoY2hhbm5lbElu
ZGV4KS0+ZGF0YSgpOwotICAgICAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uID0gbV9yZW5kZXJU
YXJnZXQtPmdldENoYW5uZWxEYXRhKGNoYW5uZWxJbmRleCktPmRhdGEoKTsKLSAgICAgICAgICAg
IG1lbWNweShkZXN0aW5hdGlvbiArIG4sIHNvdXJjZSwgc2l6ZW9mKGZsb2F0KSAqIGZyYW1lc0F2
YWlsYWJsZVRvQ29weSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG4gKz0gZnJhbWVz
QXZhaWxhYmxlVG9Db3B5OwotICAgICAgICBmcmFtZXNUb1Byb2Nlc3MgLT0gZnJhbWVzQXZhaWxh
YmxlVG9Db3B5OwotICAgIH0KLSAgICAKLSAgICAvLyBPdXIgd29yayBpcyBkb25lLiBMZXQgdGhl
IEF1ZGlvQ29udGV4dCBrbm93LgotICAgIGNhbGxPbk1haW5UaHJlYWQobm90aWZ5Q29tcGxldGVE
aXNwYXRjaCwgdGhpcyk7Ci19Ci0KLXZvaWQgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpu
b3RpZnlDb21wbGV0ZURpc3BhdGNoKHZvaWQqIHVzZXJEYXRhKQotewotICAgIE9mZmxpbmVBdWRp
b0Rlc3RpbmF0aW9uTm9kZSogZGVzdGluYXRpb25Ob2RlID0gc3RhdGljX2Nhc3Q8T2ZmbGluZUF1
ZGlvRGVzdGluYXRpb25Ob2RlKj4odXNlckRhdGEpOwotICAgIEFTU0VSVChkZXN0aW5hdGlvbk5v
ZGUpOwotICAgIGlmICghZGVzdGluYXRpb25Ob2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBk
ZXN0aW5hdGlvbk5vZGUtPm5vdGlmeUNvbXBsZXRlKCk7Ci0gICAgZGVzdGluYXRpb25Ob2RlLT5k
ZXJlZigpOwotfQotCi12b2lkIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6bm90aWZ5Q29t
cGxldGUoKQotewotICAgIGNvbnRleHQoKS0+ZmlyZUNvbXBsZXRpb25FdmVudCgpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGlu
YXRpb25Ob2RlLmgJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZV9o
Ci0jZGVmaW5lIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZV9oCi0KLSNpbmNsdWRlICJBdWRp
b0J1ZmZlci5oIgotI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb25Ob2RlLmgiCi0jaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvQnVzOwot
Y2xhc3MgQXVkaW9Db250ZXh0OwotICAgIAotY2xhc3MgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25O
b2RlIDogcHVibGljIEF1ZGlvRGVzdGluYXRpb25Ob2RlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU+IGNyZWF0ZShBdWRpb0NvbnRl
eHQqIGNvbnRleHQsIEF1ZGlvQnVmZmVyKiByZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZShjb250ZXh0LCBy
ZW5kZXJUYXJnZXQpKTsgICAgIAotICAgIH0KLQotICAgIHZpcnR1YWwgfk9mZmxpbmVBdWRpb0Rl
c3RpbmF0aW9uTm9kZSgpOwotICAgIAotICAgIC8vIEF1ZGlvTm9kZSAgIAotICAgIHZpcnR1YWwg
dm9pZCBpbml0aWFsaXplKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVuaW5pdGlhbGl6ZSgpOwotICAg
IHZpcnR1YWwgZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyVGFyZ2V0
LT5zYW1wbGVSYXRlKCk7IH0KLQotICAgIHZvaWQgc3RhcnRSZW5kZXJpbmcoKTsKLSAgICAKLXBy
aXZhdGU6Ci0gICAgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlKEF1ZGlvQ29udGV4dCosIEF1
ZGlvQnVmZmVyKiByZW5kZXJUYXJnZXQpOwotCi0gICAgLy8gVGhpcyBBdWRpb05vZGUgcmVuZGVy
cyBpbnRvIHRoaXMgQXVkaW9CdWZmZXIuCi0gICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBtX3JlbmRl
clRhcmdldDsKLSAgICAKLSAgICAvLyBUZW1wb3JhcnkgQXVkaW9CdXMgZm9yIGVhY2ggcmVuZGVy
IHF1YW50dW0uCi0gICAgT3duUHRyPEF1ZGlvQnVzPiBtX3JlbmRlckJ1czsKLSAgICAKLSAgICAv
LyBSZW5kZXJpbmcgdGhyZWFkLgotICAgIHZvbGF0aWxlIFRocmVhZElkZW50aWZpZXIgbV9yZW5k
ZXJUaHJlYWQ7Ci0gICAgYm9vbCBtX3N0YXJ0ZWRSZW5kZXJpbmc7Ci0gICAgc3RhdGljIHZvaWQg
cmVuZGVyRW50cnkodm9pZCogdGhyZWFkRGF0YSk7Ci0gICAgdm9pZCByZW5kZXIoKTsKLSAgICAK
LSAgICAvLyBGb3IgY29tcGxldGlvbiBjYWxsYmFjayBvbiBtYWluIHRocmVhZC4KLSAgICBzdGF0
aWMgdm9pZCBub3RpZnlDb21wbGV0ZURpc3BhdGNoKHZvaWQqIHVzZXJEYXRhKTsKLSAgICB2b2lk
IG5vdGlmeUNvbXBsZXRlKCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5jcHAJKHJldmlzaW9uIDExMTIwOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIlJlYWx0aW1lQW5hbHlzZXIuaCIKLQot
I2luY2x1ZGUgIkF1ZGlvQnVzLmgiCi0jaW5jbHVkZSAiQXVkaW9VdGlsaXRpZXMuaCIKLSNpbmNs
dWRlICJGRlRGcmFtZS5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGxpbWl0
cy5oPgotI2luY2x1ZGUgPHd0Zi9Db21wbGV4Lmg+Ci0jaW5jbHVkZSA8d3RmL0Zsb2F0MzJBcnJh
eS5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KLSNpbmNsdWRlIDx3dGYvVWludDhBcnJheS5oPgotCi11c2luZyBuYW1lc3BhY2Ugc3Rk
OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0IGRvdWJsZSBSZWFsdGltZUFuYWx5c2Vy
OjpEZWZhdWx0U21vb3RoaW5nVGltZUNvbnN0YW50ICA9IDAuODsKLWNvbnN0IGRvdWJsZSBSZWFs
dGltZUFuYWx5c2VyOjpEZWZhdWx0TWluRGVjaWJlbHMgPSAtMTAwOwotY29uc3QgZG91YmxlIFJl
YWx0aW1lQW5hbHlzZXI6OkRlZmF1bHRNYXhEZWNpYmVscyA9IC0zMDsKLQotY29uc3QgdW5zaWdu
ZWQgUmVhbHRpbWVBbmFseXNlcjo6RGVmYXVsdEZGVFNpemUgPSAyMDQ4OwotLy8gQWxsIEZGVCBp
bXBsZW1lbnRhdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGhhbmRsZSBwb3dlci1vZi10d28gc2l6ZXMg
TWluRkZUU2l6ZSA8PSBzaXplIDw9IE1heEZGVFNpemUuCi1jb25zdCB1bnNpZ25lZCBSZWFsdGlt
ZUFuYWx5c2VyOjpNaW5GRlRTaXplID0gMTI4OwotY29uc3QgdW5zaWduZWQgUmVhbHRpbWVBbmFs
eXNlcjo6TWF4RkZUU2l6ZSA9IDIwNDg7Ci1jb25zdCB1bnNpZ25lZCBSZWFsdGltZUFuYWx5c2Vy
OjpJbnB1dEJ1ZmZlclNpemUgPSBSZWFsdGltZUFuYWx5c2VyOjpNYXhGRlRTaXplICogMjsKLQot
UmVhbHRpbWVBbmFseXNlcjo6UmVhbHRpbWVBbmFseXNlcigpCi0gICAgOiBtX2lucHV0QnVmZmVy
KElucHV0QnVmZmVyU2l6ZSkKLSAgICAsIG1fd3JpdGVJbmRleCgwKQotICAgICwgbV9mZnRTaXpl
KERlZmF1bHRGRlRTaXplKQotICAgICwgbV9tYWduaXR1ZGVCdWZmZXIoRGVmYXVsdEZGVFNpemUg
LyAyKQotICAgICwgbV9zbW9vdGhpbmdUaW1lQ29uc3RhbnQoRGVmYXVsdFNtb290aGluZ1RpbWVD
b25zdGFudCkKLSAgICAsIG1fbWluRGVjaWJlbHMoRGVmYXVsdE1pbkRlY2liZWxzKQotICAgICwg
bV9tYXhEZWNpYmVscyhEZWZhdWx0TWF4RGVjaWJlbHMpCi17Ci0gICAgbV9hbmFseXNpc0ZyYW1l
ID0gYWRvcHRQdHIobmV3IEZGVEZyYW1lKERlZmF1bHRGRlRTaXplKSk7Ci19Ci0KLVJlYWx0aW1l
QW5hbHlzZXI6On5SZWFsdGltZUFuYWx5c2VyKCkKLXsKLX0KLQotdm9pZCBSZWFsdGltZUFuYWx5
c2VyOjpyZXNldCgpCi17Ci0gICAgbV93cml0ZUluZGV4ID0gMDsKLSAgICBtX2lucHV0QnVmZmVy
Lnplcm8oKTsKLSAgICBtX21hZ25pdHVkZUJ1ZmZlci56ZXJvKCk7Ci19Ci0KLXZvaWQgUmVhbHRp
bWVBbmFseXNlcjo6c2V0RmZ0U2l6ZShzaXplX3Qgc2l6ZSkKLXsKLSAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotCi0gICAgLy8gT25seSBhbGxvdyBwb3dlcnMgb2YgdHdvLgotICAgIHVuc2ln
bmVkIGxvZzJzaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxvZzIoc2l6ZSkpOwotICAgIGJv
b2wgaXNQT1QoMVVMIDw8IGxvZzJzaXplID09IHNpemUpOwotCi0gICAgaWYgKCFpc1BPVCB8fCBz
aXplID4gTWF4RkZUU2l6ZSB8fCBzaXplIDwgTWluRkZUU2l6ZSkgewotICAgICAgICAvLyBGSVhN
RTogSXQgd291bGQgYmUgZ29vZCB0byBhbHNvIHNldCBhbiBleGNlcHRpb24uCi0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9mZnRTaXplICE9IHNpemUpIHsKLSAgICAgICAgbV9h
bmFseXNpc0ZyYW1lID0gYWRvcHRQdHIobmV3IEZGVEZyYW1lKHNpemUpKTsKLSAgICAgICAgLy8g
bV9tYWduaXR1ZGVCdWZmZXIgaGFzIHNpemUgPSBmZnRTaXplIC8gMiBiZWNhdXNlIGl0IGNvbnRh
aW5zIGZsb2F0cyByZWR1Y2VkIGZyb20gY29tcGxleCB2YWx1ZXMgaW4gbV9hbmFseXNpc0ZyYW1l
LgotICAgICAgICBtX21hZ25pdHVkZUJ1ZmZlci5hbGxvY2F0ZShzaXplIC8gMik7Ci0gICAgICAg
IG1fZmZ0U2l6ZSA9IHNpemU7Ci0gICAgfQotfQotCi12b2lkIFJlYWx0aW1lQW5hbHlzZXI6Ondy
aXRlSW5wdXQoQXVkaW9CdXMqIGJ1cywgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKLXsKLSAgICBi
b29sIGlzQnVzR29vZCA9IGJ1cyAmJiBidXMtPm51bWJlck9mQ2hhbm5lbHMoKSA+IDAgJiYgYnVz
LT5jaGFubmVsKDApLT5sZW5ndGgoKSA+PSBmcmFtZXNUb1Byb2Nlc3M7Ci0gICAgQVNTRVJUKGlz
QnVzR29vZCk7Ci0gICAgaWYgKCFpc0J1c0dvb2QpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAg
Ci0gICAgLy8gRklYTUUgOiBhbGxvdyB0byB3b3JrIHdpdGggbm9uLUZGVFNpemUgZGl2aXNpYmxl
IGNodW5raW5nCi0gICAgYm9vbCBpc0Rlc3RpbmF0aW9uR29vZCA9IG1fd3JpdGVJbmRleCA8IG1f
aW5wdXRCdWZmZXIuc2l6ZSgpICYmIG1fd3JpdGVJbmRleCArIGZyYW1lc1RvUHJvY2VzcyA8PSBt
X2lucHV0QnVmZmVyLnNpemUoKTsKLSAgICBBU1NFUlQoaXNEZXN0aW5hdGlvbkdvb2QpOwotICAg
IGlmICghaXNEZXN0aW5hdGlvbkdvb2QpCi0gICAgICAgIHJldHVybjsgICAgCi0gICAgCi0gICAg
Ly8gUGVyZm9ybSByZWFsLXRpbWUgYW5hbHlzaXMKLSAgICAvLyBGSVhNRSA6IGZvciBub3cganVz
dCB1c2UgbGVmdCBjaGFubmVsIChtdXN0IG1peCBpZiBzdGVyZW8gc291cmNlKQotICAgIGNvbnN0
IGZsb2F0KiBzb3VyY2UgPSBidXMtPmNoYW5uZWwoMCktPmRhdGEoKTsKLQotICAgIC8vIFRoZSBz
b3VyY2UgaGFzIGFscmVhZHkgYmVlbiBzYW5pdHkgY2hlY2tlZCB3aXRoIGlzQnVzR29vZCBhYm92
ZS4KLSAgICAKLSAgICBtZW1jcHkobV9pbnB1dEJ1ZmZlci5kYXRhKCkgKyBtX3dyaXRlSW5kZXgs
IHNvdXJjZSwgc2l6ZW9mKGZsb2F0KSAqIGZyYW1lc1RvUHJvY2Vzcyk7Ci0KLSAgICBtX3dyaXRl
SW5kZXggKz0gZnJhbWVzVG9Qcm9jZXNzOwotICAgIGlmIChtX3dyaXRlSW5kZXggPj0gSW5wdXRC
dWZmZXJTaXplKQotICAgICAgICBtX3dyaXRlSW5kZXggPSAwOwotfQotCi1uYW1lc3BhY2Ugewot
Ci12b2lkIGFwcGx5V2luZG93KGZsb2F0KiBwLCBzaXplX3QgbikKLXsKLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotICAgIAotICAgIC8vIEJsYWNrbWFuIHdpbmRvdwotICAgIGRvdWJsZSBh
bHBoYSA9IDAuMTY7Ci0gICAgZG91YmxlIGEwID0gMC41ICogKDEgLSBhbHBoYSk7Ci0gICAgZG91
YmxlIGExID0gMC41OwotICAgIGRvdWJsZSBhMiA9IDAuNSAqIGFscGhhOwotICAgIAotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBuOyArK2kpIHsKLSAgICAgICAgZG91YmxlIHggPSBzdGF0
aWNfY2FzdDxkb3VibGU+KGkpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihuKTsKLSAgICAgICAgZG91
YmxlIHdpbmRvdyA9IGEwIC0gYTEgKiBjb3MoMiAqIHBpRG91YmxlICogeCkgKyBhMiAqIGNvcyg0
ICogcGlEb3VibGUgKiB4KTsKLSAgICAgICAgcFtpXSAqPSBmbG9hdCh3aW5kb3cpOwotICAgIH0K
LX0KLQotfSAvLyBuYW1lc3BhY2UKLQotdm9pZCBSZWFsdGltZUFuYWx5c2VyOjpkb0ZGVEFuYWx5
c2lzKCkKLXsgICAgCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIC8vIFVucm9s
bCB0aGUgaW5wdXQgYnVmZmVyIGludG8gYSB0ZW1wb3JhcnkgYnVmZmVyLCB3aGVyZSB3ZSdsbCBh
cHBseSBhbiBhbmFseXNpcyB3aW5kb3cgZm9sbG93ZWQgYnkgYW4gRkZULgotICAgIHNpemVfdCBm
ZnRTaXplID0gdGhpcy0+ZmZ0U2l6ZSgpOwotICAgIAotICAgIEF1ZGlvRmxvYXRBcnJheSB0ZW1w
b3JhcnlCdWZmZXIoZmZ0U2l6ZSk7Ci0gICAgZmxvYXQqIGlucHV0QnVmZmVyID0gbV9pbnB1dEJ1
ZmZlci5kYXRhKCk7Ci0gICAgZmxvYXQqIHRlbXBQID0gdGVtcG9yYXJ5QnVmZmVyLmRhdGEoKTsK
LQotICAgIC8vIFRha2UgdGhlIHByZXZpb3VzIGZmdFNpemUgdmFsdWVzIGZyb20gdGhlIGlucHV0
IGJ1ZmZlciBhbmQgY29weSBpbnRvIHRoZSB0ZW1wb3JhcnkgYnVmZmVyLgotICAgIHVuc2lnbmVk
IHdyaXRlSW5kZXggPSBtX3dyaXRlSW5kZXg7Ci0gICAgaWYgKHdyaXRlSW5kZXggPCBmZnRTaXpl
KSB7Ci0gICAgICAgIG1lbWNweSh0ZW1wUCwgaW5wdXRCdWZmZXIgKyB3cml0ZUluZGV4IC0gZmZ0
U2l6ZSArIElucHV0QnVmZmVyU2l6ZSwgc2l6ZW9mKCp0ZW1wUCkgKiAoZmZ0U2l6ZSAtIHdyaXRl
SW5kZXgpKTsKLSAgICAgICAgbWVtY3B5KHRlbXBQICsgZmZ0U2l6ZSAtIHdyaXRlSW5kZXgsIGlu
cHV0QnVmZmVyLCBzaXplb2YoKnRlbXBQKSAqIHdyaXRlSW5kZXgpOwotICAgIH0gZWxzZSAKLSAg
ICAgICAgbWVtY3B5KHRlbXBQLCBpbnB1dEJ1ZmZlciArIHdyaXRlSW5kZXggLSBmZnRTaXplLCBz
aXplb2YoKnRlbXBQKSAqIGZmdFNpemUpOwotCi0gICAgCi0gICAgLy8gV2luZG93IHRoZSBpbnB1
dCBzYW1wbGVzLgotICAgIGFwcGx5V2luZG93KHRlbXBQLCBmZnRTaXplKTsKLSAgICAKLSAgICAv
LyBEbyB0aGUgYW5hbHlzaXMuCi0gICAgbV9hbmFseXNpc0ZyYW1lLT5kb0ZGVCh0ZW1wUCk7Ci0K
LSAgICBmbG9hdCogcmVhbFAgPSBtX2FuYWx5c2lzRnJhbWUtPnJlYWxEYXRhKCk7Ci0gICAgZmxv
YXQqIGltYWdQID0gbV9hbmFseXNpc0ZyYW1lLT5pbWFnRGF0YSgpOwotCi0gICAgLy8gQmxvdyBh
d2F5IHRoZSBwYWNrZWQgbnlxdWlzdCBjb21wb25lbnQuCi0gICAgaW1hZ1BbMF0gPSAwOwotICAg
IAotICAgIC8vIE5vcm1hbGl6ZSBzbyB0aGFuIGFuIGlucHV0IHNpbmUgd2F2ZSBhdCAwZEJmcyBy
ZWdpc3RlcnMgYXMgMGRCZnMgKHVuZG8gRkZUIHNjYWxpbmcgZmFjdG9yKS4KLSAgICBjb25zdCBk
b3VibGUgbWFnbml0dWRlU2NhbGUgPSAxLjAgLyBEZWZhdWx0RkZUU2l6ZTsKLQotICAgIC8vIEEg
dmFsdWUgb2YgMCBkb2VzIG5vIGF2ZXJhZ2luZyB3aXRoIHRoZSBwcmV2aW91cyByZXN1bHQuICBM
YXJnZXIgdmFsdWVzIHByb2R1Y2Ugc2xvd2VyLCBidXQgc21vb3RoZXIgY2hhbmdlcy4KLSAgICBk
b3VibGUgayA9IG1fc21vb3RoaW5nVGltZUNvbnN0YW50OwotICAgIGsgPSBtYXgoMC4wLCBrKTsK
LSAgICBrID0gbWluKDEuMCwgayk7ICAgIAotICAgIAotICAgIC8vIENvbnZlcnQgdGhlIGFuYWx5
c2lzIGRhdGEgZnJvbSBjb21wbGV4IHRvIG1hZ25pdHVkZSBhbmQgYXZlcmFnZSB3aXRoIHRoZSBw
cmV2aW91cyByZXN1bHQuCi0gICAgZmxvYXQqIGRlc3RpbmF0aW9uID0gbWFnbml0dWRlQnVmZmVy
KCkuZGF0YSgpOwotICAgIHNpemVfdCBuID0gbWFnbml0dWRlQnVmZmVyKCkuc2l6ZSgpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7Ci0gICAgICAgIENvbXBsZXggYyhyZWFs
UFtpXSwgaW1hZ1BbaV0pOwotICAgICAgICBkb3VibGUgc2NhbGFyTWFnbml0dWRlID0gYWJzKGMp
ICogbWFnbml0dWRlU2NhbGU7ICAgICAgICAKLSAgICAgICAgZGVzdGluYXRpb25baV0gPSBmbG9h
dChrICogZGVzdGluYXRpb25baV0gKyAoMSAtIGspICogc2NhbGFyTWFnbml0dWRlKTsKLSAgICB9
Ci19Ci0KLXZvaWQgUmVhbHRpbWVBbmFseXNlcjo6Z2V0RmxvYXRGcmVxdWVuY3lEYXRhKEZsb2F0
MzJBcnJheSogZGVzdGluYXRpb25BcnJheSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotCi0gICAgaWYgKCFkZXN0aW5hdGlvbkFycmF5KQotICAgICAgICByZXR1cm47Ci0gICAgICAg
IAotICAgIGRvRkZUQW5hbHlzaXMoKTsKLSAgICAKLSAgICAvLyBDb252ZXJ0IGZyb20gbGluZWFy
IG1hZ25pdHVkZSB0byBmbG9hdGluZy1wb2ludCBkZWNpYmVscy4KLSAgICBjb25zdCBkb3VibGUg
bWluRGVjaWJlbHMgPSBtX21pbkRlY2liZWxzOwotICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCA9
IG1hZ25pdHVkZUJ1ZmZlcigpLnNpemUoKTsKLSAgICBzaXplX3QgbGVuID0gbWluKHNvdXJjZUxl
bmd0aCwgZGVzdGluYXRpb25BcnJheS0+bGVuZ3RoKCkpOwotICAgIGlmIChsZW4gPiAwKSB7Ci0g
ICAgICAgIGNvbnN0IGZsb2F0KiBzb3VyY2UgPSBtYWduaXR1ZGVCdWZmZXIoKS5kYXRhKCk7Ci0g
ICAgICAgIGZsb2F0KiBkZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uQXJyYXktPmRhdGEoKTsKLSAg
ICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAg
ICAgICAgICAgZmxvYXQgbGluZWFyVmFsdWUgPSBzb3VyY2VbaV07Ci0gICAgICAgICAgICBkb3Vi
bGUgZGJNYWcgPSAhbGluZWFyVmFsdWUgPyBtaW5EZWNpYmVscyA6IEF1ZGlvVXRpbGl0aWVzOjps
aW5lYXJUb0RlY2liZWxzKGxpbmVhclZhbHVlKTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ld
ID0gZmxvYXQoZGJNYWcpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFJlYWx0aW1lQW5h
bHlzZXI6OmdldEJ5dGVGcmVxdWVuY3lEYXRhKFVpbnQ4QXJyYXkqIGRlc3RpbmF0aW9uQXJyYXkp
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmICghZGVzdGluYXRpb25B
cnJheSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBkb0ZGVEFuYWx5c2lzKCk7Ci0g
ICAgCi0gICAgLy8gQ29udmVydCBmcm9tIGxpbmVhciBtYWduaXR1ZGUgdG8gdW5zaWduZWQtYnl0
ZSBkZWNpYmVscy4KLSAgICB1bnNpZ25lZCBzb3VyY2VMZW5ndGggPSBtYWduaXR1ZGVCdWZmZXIo
KS5zaXplKCk7Ci0gICAgc2l6ZV90IGxlbiA9IG1pbihzb3VyY2VMZW5ndGgsIGRlc3RpbmF0aW9u
QXJyYXktPmxlbmd0aCgpKTsKLSAgICBpZiAobGVuID4gMCkgewotICAgICAgICBjb25zdCBkb3Vi
bGUgcmFuZ2VTY2FsZUZhY3RvciA9IG1fbWF4RGVjaWJlbHMgPT0gbV9taW5EZWNpYmVscyA/IDEg
OiAxIC8gKG1fbWF4RGVjaWJlbHMgLSBtX21pbkRlY2liZWxzKTsKLSAgICAgICAgY29uc3QgZG91
YmxlIG1pbkRlY2liZWxzID0gbV9taW5EZWNpYmVsczsKLQotICAgICAgICBjb25zdCBmbG9hdCog
c291cmNlID0gbWFnbml0dWRlQnVmZmVyKCkuZGF0YSgpOwotICAgICAgICB1bnNpZ25lZCBjaGFy
KiBkZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uQXJyYXktPmRhdGEoKTsgICAgICAgIAotICAgICAg
ICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAg
ICAgICBmbG9hdCBsaW5lYXJWYWx1ZSA9IHNvdXJjZVtpXTsKLSAgICAgICAgICAgIGRvdWJsZSBk
Yk1hZyA9ICFsaW5lYXJWYWx1ZSA/IG1pbkRlY2liZWxzIDogQXVkaW9VdGlsaXRpZXM6OmxpbmVh
clRvRGVjaWJlbHMobGluZWFyVmFsdWUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBU
aGUgcmFuZ2UgbV9taW5EZWNpYmVscyB0byBtX21heERlY2liZWxzIHdpbGwgYmUgc2NhbGVkIHRv
IGJ5dGUgdmFsdWVzIGZyb20gMCB0byBVQ0hBUl9NQVguCi0gICAgICAgICAgICBkb3VibGUgc2Nh
bGVkVmFsdWUgPSBVQ0hBUl9NQVggKiAoZGJNYWcgLSBtaW5EZWNpYmVscykgKiByYW5nZVNjYWxl
RmFjdG9yOwotCi0gICAgICAgICAgICAvLyBDbGlwIHRvIHZhbGlkIHJhbmdlLgotICAgICAgICAg
ICAgaWYgKHNjYWxlZFZhbHVlIDwgMCkKLSAgICAgICAgICAgICAgICBzY2FsZWRWYWx1ZSA9IDA7
Ci0gICAgICAgICAgICBpZiAoc2NhbGVkVmFsdWUgPiBVQ0hBUl9NQVgpCi0gICAgICAgICAgICAg
ICAgc2NhbGVkVmFsdWUgPSBVQ0hBUl9NQVg7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGRl
c3RpbmF0aW9uW2ldID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc2NhbGVkVmFsdWUpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFJlYWx0aW1lQW5hbHlzZXI6OmdldEJ5dGVUaW1l
RG9tYWluRGF0YShVaW50OEFycmF5KiBkZXN0aW5hdGlvbkFycmF5KQotewotICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoIWRlc3RpbmF0aW9uQXJyYXkpCi0gICAgICAgIHJl
dHVybjsKLSAgICAgICAgCi0gICAgdW5zaWduZWQgZmZ0U2l6ZSA9IHRoaXMtPmZmdFNpemUoKTsK
LSAgICBzaXplX3QgbGVuID0gbWluKGZmdFNpemUsIGRlc3RpbmF0aW9uQXJyYXktPmxlbmd0aCgp
KTsKLSAgICBpZiAobGVuID4gMCkgewotICAgICAgICBib29sIGlzSW5wdXRCdWZmZXJHb29kID0g
bV9pbnB1dEJ1ZmZlci5zaXplKCkgPT0gSW5wdXRCdWZmZXJTaXplICYmIG1faW5wdXRCdWZmZXIu
c2l6ZSgpID4gZmZ0U2l6ZTsKLSAgICAgICAgQVNTRVJUKGlzSW5wdXRCdWZmZXJHb29kKTsKLSAg
ICAgICAgaWYgKCFpc0lucHV0QnVmZmVyR29vZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBmbG9hdCogaW5wdXRCdWZmZXIgPSBtX2lucHV0QnVmZmVyLmRhdGEoKTsgICAgICAgIAot
ICAgICAgICB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uQXJyYXktPmRh
dGEoKTsKLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIHdyaXRlSW5kZXggPSBtX3dyaXRlSW5k
ZXg7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAg
ICAgICAgICAvLyBCdWZmZXIgYWNjZXNzIGlzIHByb3RlY3RlZCBkdWUgdG8gbW9kdWxvIG9wZXJh
dGlvbi4KLSAgICAgICAgICAgIGZsb2F0IHZhbHVlID0gaW5wdXRCdWZmZXJbKGkgKyB3cml0ZUlu
ZGV4IC0gZmZ0U2l6ZSArIElucHV0QnVmZmVyU2l6ZSkgJSBJbnB1dEJ1ZmZlclNpemVdOwotCi0g
ICAgICAgICAgICAvLyBTY2FsZSBmcm9tIG5vbWluYWwgLTEgLT4gKzEgdG8gdW5zaWduZWQgYnl0
ZS4KLSAgICAgICAgICAgIGRvdWJsZSBzY2FsZWRWYWx1ZSA9IDEyOCAqICh2YWx1ZSArIDEpOwot
Ci0gICAgICAgICAgICAvLyBDbGlwIHRvIHZhbGlkIHJhbmdlLgotICAgICAgICAgICAgaWYgKHNj
YWxlZFZhbHVlIDwgMCkKLSAgICAgICAgICAgICAgICBzY2FsZWRWYWx1ZSA9IDA7Ci0gICAgICAg
ICAgICBpZiAoc2NhbGVkVmFsdWUgPiBVQ0hBUl9NQVgpCi0gICAgICAgICAgICAgICAgc2NhbGVk
VmFsdWUgPSBVQ0hBUl9NQVg7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGRlc3RpbmF0aW9u
W2ldID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc2NhbGVkVmFsdWUpOwotICAgICAgICB9
Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
V0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlz
ZXIuaAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRp
bWVBbmFseXNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgot
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIFJlYWx0aW1lQW5hbHlzZXJfaAotI2RlZmluZSBSZWFsdGltZUFuYWx5c2VyX2gK
LQotI2luY2x1ZGUgIkF1ZGlvQXJyYXkuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb0J1czsKLWNsYXNzIEZGVEZyYW1lOwotCi1j
bGFzcyBSZWFsdGltZUFuYWx5c2VyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZWFsdGlt
ZUFuYWx5c2VyKTsKLXB1YmxpYzoKLSAgICBSZWFsdGltZUFuYWx5c2VyKCk7Ci0gICAgdmlydHVh
bCB+UmVhbHRpbWVBbmFseXNlcigpOwotICAgIAotICAgIHZvaWQgcmVzZXQoKTsKLQotICAgIHNp
emVfdCBmZnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9mZnRTaXplOyB9Ci0gICAgdm9pZCBzZXRG
ZnRTaXplKHNpemVfdCBzaXplKTsKLQotICAgIHVuc2lnbmVkIGZyZXF1ZW5jeUJpbkNvdW50KCkg
Y29uc3QgeyByZXR1cm4gbV9mZnRTaXplIC8gMjsgfQotCi0gICAgdm9pZCBzZXRNaW5EZWNpYmVs
cyhmbG9hdCBrKSB7IG1fbWluRGVjaWJlbHMgPSBrOyB9Ci0gICAgZmxvYXQgbWluRGVjaWJlbHMo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV9taW5EZWNpYmVscyk7IH0KLQot
ICAgIHZvaWQgc2V0TWF4RGVjaWJlbHMoZmxvYXQgaykgeyBtX21heERlY2liZWxzID0gazsgfQot
ICAgIGZsb2F0IG1heERlY2liZWxzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG1fbWF4RGVjaWJlbHMpOyB9Ci0KLSAgICB2b2lkIHNldFNtb290aGluZ1RpbWVDb25zdGFudChm
bG9hdCBrKSB7IG1fc21vb3RoaW5nVGltZUNvbnN0YW50ID0gazsgfQotICAgIGZsb2F0IHNtb290
aGluZ1RpbWVDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX3Nt
b290aGluZ1RpbWVDb25zdGFudCk7IH0KLQotICAgIHZvaWQgZ2V0RmxvYXRGcmVxdWVuY3lEYXRh
KEZsb2F0MzJBcnJheSopOwotICAgIHZvaWQgZ2V0Qnl0ZUZyZXF1ZW5jeURhdGEoVWludDhBcnJh
eSopOwotICAgIHZvaWQgZ2V0Qnl0ZVRpbWVEb21haW5EYXRhKFVpbnQ4QXJyYXkqKTsKLQotICAg
IC8vIFRoZSBhdWRpbyB0aHJlYWQgd3JpdGVzIGlucHV0IGRhdGEgaGVyZS4KLSAgICB2b2lkIHdy
aXRlSW5wdXQoQXVkaW9CdXMqLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLQotICAgIHN0YXRp
YyBjb25zdCBkb3VibGUgRGVmYXVsdFNtb290aGluZ1RpbWVDb25zdGFudDsKLSAgICBzdGF0aWMg
Y29uc3QgZG91YmxlIERlZmF1bHRNaW5EZWNpYmVsczsKLSAgICBzdGF0aWMgY29uc3QgZG91Ymxl
IERlZmF1bHRNYXhEZWNpYmVsczsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBEZWZhdWx0
RkZUU2l6ZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgTWluRkZUU2l6ZTsKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgTWF4RkZUU2l6ZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
SW5wdXRCdWZmZXJTaXplOwotCi1wcml2YXRlOgotICAgIC8vIFRoZSBhdWRpbyB0aHJlYWQgd3Jp
dGVzIHRoZSBpbnB1dCBhdWRpbyBoZXJlLgotICAgIEF1ZGlvRmxvYXRBcnJheSBtX2lucHV0QnVm
ZmVyOwotICAgIHVuc2lnbmVkIG1fd3JpdGVJbmRleDsKLSAgICAKLSAgICBzaXplX3QgbV9mZnRT
aXplOwotICAgIE93blB0cjxGRlRGcmFtZT4gbV9hbmFseXNpc0ZyYW1lOwotICAgIHZvaWQgZG9G
RlRBbmFseXNpcygpOwotICAgIAotICAgIC8vIGRvRkZUQW5hbHlzaXMoKSBzdG9yZXMgdGhlIGZs
b2F0aW5nLXBvaW50IG1hZ25pdHVkZSBhbmFseXNpcyBkYXRhIGhlcmUuCi0gICAgQXVkaW9GbG9h
dEFycmF5IG1fbWFnbml0dWRlQnVmZmVyOwotICAgIEF1ZGlvRmxvYXRBcnJheSYgbWFnbml0dWRl
QnVmZmVyKCkgeyByZXR1cm4gbV9tYWduaXR1ZGVCdWZmZXI7IH0KLQotICAgIC8vIEEgdmFsdWUg
YmV0d2VlbiAwIGFuZCAxIHdoaWNoIGF2ZXJhZ2VzIHRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIG1f
bWFnbml0dWRlQnVmZmVyIHdpdGggdGhlIGN1cnJlbnQgYW5hbHlzaXMgbWFnbml0dWRlIGRhdGEu
Ci0gICAgZG91YmxlIG1fc21vb3RoaW5nVGltZUNvbnN0YW50OyAgICAKLQotICAgIC8vIFRoZSBy
YW5nZSB1c2VkIHdoZW4gY29udmVydGluZyB3aGVuIHVzaW5nIGdldEJ5dGVGcmVxdWVuY3lEYXRh
KCkuIAotICAgIGRvdWJsZSBtX21pbkRlY2liZWxzOwotICAgIGRvdWJsZSBtX21heERlY2liZWxz
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUmVhbHRpbWVBbmFs
eXNlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFs
eXNlck5vZGUuY3BwCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9SZWFsdGltZUFuYWx5c2VyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
LSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVE
SU8pCi0KLSNpbmNsdWRlICJSZWFsdGltZUFuYWx5c2VyTm9kZS5oIgotCi0jaW5jbHVkZSAiQXVk
aW9Ob2RlSW5wdXQuaCIKLSNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1SZWFsdGltZUFuYWx5c2VyTm9kZTo6UmVhbHRpbWVBbmFseXNlck5vZGUo
QXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIDogQXVkaW9Ob2Rl
KGNvbnRleHQsIHNhbXBsZVJhdGUpCi17Ci0gICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlv
Tm9kZUlucHV0KHRoaXMpKSk7Ci0gICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVP
dXRwdXQodGhpcywgMikpKTsKLSAgICAKLSAgICBzZXROb2RlVHlwZShOb2RlVHlwZUFuYWx5c2Vy
KTsKLSAgICAKLSAgICBpbml0aWFsaXplKCk7Ci19Ci0KLVJlYWx0aW1lQW5hbHlzZXJOb2RlOjp+
UmVhbHRpbWVBbmFseXNlck5vZGUoKQotewotICAgIHVuaW5pdGlhbGl6ZSgpOwotfQotCi12b2lk
IFJlYWx0aW1lQW5hbHlzZXJOb2RlOjpwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17
Ci0gICAgQXVkaW9CdXMqIG91dHB1dEJ1cyA9IG91dHB1dCgwKS0+YnVzKCk7Ci0KLSAgICBpZiAo
IWlzSW5pdGlhbGl6ZWQoKSB8fCAhaW5wdXQoMCktPmlzQ29ubmVjdGVkKCkpIHsKLSAgICAgICAg
b3V0cHV0QnVzLT56ZXJvKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBdWRpb0J1
cyogaW5wdXRCdXMgPSBpbnB1dCgwKS0+YnVzKCk7Ci0gICAgCi0gICAgLy8gR2l2ZSB0aGUgYW5h
bHlzZXIgdGhlIGF1ZGlvIHdoaWNoIGlzIHBhc3NpbmcgdGhyb3VnaCB0aGlzIEF1ZGlvTm9kZS4K
LSAgICBtX2FuYWx5c2VyLndyaXRlSW5wdXQoaW5wdXRCdXMsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0K
LSAgICAvLyBGb3IgaW4tcGxhY2UgcHJvY2Vzc2luZywgb3VyIG92ZXJyaWRlIG9mIHB1bGxJbnB1
dHMoKSB3aWxsIGp1c3QgcGFzcyB0aGUgYXVkaW8gZGF0YSB0aHJvdWdoIHVuY2hhbmdlZCBpZiB0
aGUgY2hhbm5lbCBjb3VudCBtYXRjaGVzIGZyb20gaW5wdXQgdG8gb3V0cHV0Ci0gICAgLy8gKHJl
c3VsdGluZyBpbiBpbnB1dEJ1cyA9PSBvdXRwdXRCdXMpLiAgT3RoZXJ3aXNlLCBkbyBhbiB1cC1t
aXggdG8gc3RlcmVvLgotICAgIGlmIChpbnB1dEJ1cyAhPSBvdXRwdXRCdXMpCi0gICAgICAgIG91
dHB1dEJ1cy0+Y29weUZyb20oKmlucHV0QnVzKTsKLX0KLQotLy8gV2Ugb3ZlcnJpZGUgcHVsbElu
cHV0cygpIGFzIGFuIG9wdGltaXphdGlvbiBhbGxvd2luZyB0aGlzIG5vZGUgdG8gdGFrZSBhZHZh
bnRhZ2Ugb2YgaW4tcGxhY2UgcHJvY2Vzc2luZywKLS8vIHdoZXJlIHRoZSBpbnB1dCBpcyBzaW1w
bHkgcGFzc2VkIHRocm91Z2ggdW5wcm9jZXNzZWQgdG8gdGhlIG91dHB1dC4KLS8vIE5vdGU6IHRo
aXMgb25seSBhcHBsaWVzIGlmIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGNoYW5uZWwgY291bnRzIG1h
dGNoLgotdm9pZCBSZWFsdGltZUFuYWx5c2VyTm9kZTo6cHVsbElucHV0cyhzaXplX3QgZnJhbWVz
VG9Qcm9jZXNzKQotewotICAgIC8vIFJlbmRlciBpbnB1dCBzdHJlYW0gLSB0cnkgdG8gcmVuZGVy
IGRpcmVjdGx5IGludG8gb3V0cHV0IGJ1cyBmb3IgcGFzcy10aHJvdWdoIHByb2Nlc3Npbmcgd2hl
cmUgcHJvY2VzcygpIGRvZXNuJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4uLgotICAgIGlucHV0KDAp
LT5wdWxsKG91dHB1dCgwKS0+YnVzKCksIGZyYW1lc1RvUHJvY2Vzcyk7Ci19Ci0KLXZvaWQgUmVh
bHRpbWVBbmFseXNlck5vZGU6OnJlc2V0KCkKLXsKLSAgICBtX2FuYWx5c2VyLnJlc2V0KCk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8p
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2Rl
LmgJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1l
QW5hbHlzZXJOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
Ci0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgUmVhbHRpbWVBbmFseXNlck5vZGVfaAotI2RlZmluZSBSZWFsdGltZUFuYWx5
c2VyTm9kZV9oCi0KLSNpbmNsdWRlICJBdWRpb05vZGUuaCIKLSNpbmNsdWRlICJSZWFsdGltZUFu
YWx5c2VyLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBSZWFsdGltZUFuYWx5c2VyTm9kZSA6IHB1YmxpYyBBdWRpb05vZGUgewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlYWx0aW1lQW5hbHlzZXJOb2RlPiBjcmVhdGUo
QXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBSZWFsdGltZUFuYWx5c2VyTm9kZShjb250ZXh0LCBzYW1wbGVS
YXRlKSk7ICAgICAgCi0gICAgfQotCi0gICAgdmlydHVhbCB+UmVhbHRpbWVBbmFseXNlck5vZGUo
KTsKLSAgICAKLSAgICAvLyBBdWRpb05vZGUKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXpl
X3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHVsbElucHV0cyhzaXplX3Qg
ZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKLQotICAgIC8vIEph
dmFzY3JpcHQgYmluZGluZ3MKLSAgICB1bnNpZ25lZCBpbnQgZmZ0U2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYW5hbHlzZXIuZmZ0U2l6ZSgpOyB9Ci0gICAgdm9pZCBzZXRGZnRTaXplKHVuc2lnbmVk
IGludCBzaXplKSB7IG1fYW5hbHlzZXIuc2V0RmZ0U2l6ZShzaXplKTsgfQotCi0gICAgdW5zaWdu
ZWQgZnJlcXVlbmN5QmluQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2FuYWx5c2VyLmZyZXF1ZW5j
eUJpbkNvdW50KCk7IH0KLQotICAgIHZvaWQgc2V0TWluRGVjaWJlbHMoZmxvYXQgaykgeyBtX2Fu
YWx5c2VyLnNldE1pbkRlY2liZWxzKGspOyB9Ci0gICAgZmxvYXQgbWluRGVjaWJlbHMoKSBjb25z
dCB7IHJldHVybiBtX2FuYWx5c2VyLm1pbkRlY2liZWxzKCk7IH0KLQotICAgIHZvaWQgc2V0TWF4
RGVjaWJlbHMoZmxvYXQgaykgeyBtX2FuYWx5c2VyLnNldE1heERlY2liZWxzKGspOyB9Ci0gICAg
ZmxvYXQgbWF4RGVjaWJlbHMoKSBjb25zdCB7IHJldHVybiBtX2FuYWx5c2VyLm1heERlY2liZWxz
KCk7IH0KLQotICAgIHZvaWQgc2V0U21vb3RoaW5nVGltZUNvbnN0YW50KGZsb2F0IGspIHsgbV9h
bmFseXNlci5zZXRTbW9vdGhpbmdUaW1lQ29uc3RhbnQoayk7IH0KLSAgICBmbG9hdCBzbW9vdGhp
bmdUaW1lQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX2FuYWx5c2VyLnNtb290aGluZ1RpbWVD
b25zdGFudCgpOyB9Ci0KLSAgICB2b2lkIGdldEZsb2F0RnJlcXVlbmN5RGF0YShGbG9hdDMyQXJy
YXkqIGFycmF5KSB7IG1fYW5hbHlzZXIuZ2V0RmxvYXRGcmVxdWVuY3lEYXRhKGFycmF5KTsgfQot
ICAgIHZvaWQgZ2V0Qnl0ZUZyZXF1ZW5jeURhdGEoVWludDhBcnJheSogYXJyYXkpIHsgbV9hbmFs
eXNlci5nZXRCeXRlRnJlcXVlbmN5RGF0YShhcnJheSk7IH0KLSAgICB2b2lkIGdldEJ5dGVUaW1l
RG9tYWluRGF0YShVaW50OEFycmF5KiBhcnJheSkgeyBtX2FuYWx5c2VyLmdldEJ5dGVUaW1lRG9t
YWluRGF0YShhcnJheSk7IH0KLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGlt
ZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGRvdWJsZSBsYXRl
bmN5VGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KLQotICAgIFJlYWx0aW1lQW5h
bHlzZXJOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwotCi0gICAgUmVhbHRp
bWVBbmFseXNlciBtX2FuYWx5c2VyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gUmVhbHRpbWVBbmFseXNlck5vZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmlkbAkocmV2aXNpb24gMTExMjA4KQor
KysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgYXVkaW8gewot
ICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKLSAgICAgICAg
SlNHZW5lcmF0ZVRvSlNPYmplY3QKLSAgICBdIFJlYWx0aW1lQW5hbHlzZXJOb2RlIDogQXVkaW9O
b2RlIHsKLSAgICAgICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgZmZ0U2l6ZTsKLSAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5QmluQ291bnQ7Ci0KLSAg
ICAgICAgLy8gbWluRGVjaWJlbHMgLyBtYXhEZWNpYmVscyByZXByZXNlbnQgdGhlIHJhbmdlIHRv
IHNjYWxlIHRoZSBGRlQgYW5hbHlzaXMgZGF0YSBmb3IgY29udmVyc2lvbiB0byB1bnNpZ25lZCBi
eXRlIHZhbHVlcy4KLSAgICAgICAgYXR0cmlidXRlIGZsb2F0IG1pbkRlY2liZWxzOwotICAgICAg
ICBhdHRyaWJ1dGUgZmxvYXQgbWF4RGVjaWJlbHM7Ci0KLSAgICAgICAgLy8gQSB2YWx1ZSBmcm9t
IDAuMCAtPiAxLjAgd2hlcmUgMC4wIHJlcHJlc2VudHMgbm8gdGltZSBhdmVyYWdpbmcgd2l0aCB0
aGUgbGFzdCBhbmFseXNpcyBmcmFtZS4KLSAgICAgICAgYXR0cmlidXRlIGZsb2F0IHNtb290aGlu
Z1RpbWVDb25zdGFudDsKLQotICAgICAgICAvLyBDb3BpZXMgdGhlIGN1cnJlbnQgZnJlcXVlbmN5
IGRhdGEgaW50byB0aGUgcGFzc2VkIGFycmF5LgotICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaGFz
IGZld2VyIGVsZW1lbnRzIHRoYW4gdGhlIGZyZXF1ZW5jeUJpbkNvdW50LCB0aGUgZXhjZXNzIGVs
ZW1lbnRzIHdpbGwgYmUgZHJvcHBlZC4KLSAgICAgICAgdm9pZCBnZXRGbG9hdEZyZXF1ZW5jeURh
dGEoaW4gRmxvYXQzMkFycmF5IGFycmF5KTsKLSAgICAgICAgdm9pZCBnZXRCeXRlRnJlcXVlbmN5
RGF0YShpbiBVaW50OEFycmF5IGFycmF5KTsKLQotICAgICAgICAvLyBSZWFsLXRpbWUgd2F2ZWZv
cm0gZGF0YQotICAgICAgICB2b2lkIGdldEJ5dGVUaW1lRG9tYWluRGF0YShpbiBVaW50OEFycmF5
IGFycmF5KTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNo
YXBlckRTUEtlcm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
V2F2ZVNoYXBlckRTUEtlcm5lbC5jcHAJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJEU1BLZXJuZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFC
TEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiV2F2ZVNoYXBlckRTUEtlcm5lbC5oIgotCi0jaW5j
bHVkZSAiV2F2ZVNoYXBlclByb2Nlc3Nvci5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIFdhdmVTaGFw
ZXJEU1BLZXJuZWw6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0
aW9uLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIEFTU0VSVChzb3VyY2UgJiYgZGVz
dGluYXRpb24gJiYgd2F2ZVNoYXBlclByb2Nlc3NvcigpKTsKLQotICAgIEZsb2F0MzJBcnJheSog
Y3VydmUgPSB3YXZlU2hhcGVyUHJvY2Vzc29yKCktPmN1cnZlKCk7Ci0gICAgaWYgKCFjdXJ2ZSkg
ewotICAgICAgICAvLyBBY3QgYXMgInN0cmFpZ2h0IHdpcmUiIHBhc3MtdGhyb3VnaCBpZiBubyBj
dXJ2ZSBpcyBzZXQuCi0gICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNlLCBzaXplb2Yo
ZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGZsb2F0KiBjdXJ2ZURhdGEgPSBjdXJ2ZS0+ZGF0YSgpOwotICAgIGludCBjdXJ2ZUxlbmd0aCA9
IGN1cnZlLT5sZW5ndGgoKTsKLQotICAgIEFTU0VSVChjdXJ2ZURhdGEpOwotCi0gICAgaWYgKCFj
dXJ2ZURhdGEgfHwgIWN1cnZlTGVuZ3RoKSB7Ci0gICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiwg
c291cmNlLCBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIC8vIEFwcGx5IHdhdmVzaGFwaW5nIGN1cnZlLgotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBmcmFtZXNUb1Byb2Nlc3M7ICsraSkgewotICAgICAgICBjb25zdCBm
bG9hdCBpbnB1dCA9IHNvdXJjZVtpXTsKLQotICAgICAgICAvLyBDYWxjdWxhdGUgYW4gaW5kZXgg
YmFzZWQgb24gaW5wdXQgLTEgLT4gKzEgd2l0aCAwIGJlaW5nIGF0IHRoZSBjZW50ZXIgb2YgdGhl
IGN1cnZlIGRhdGEuCi0gICAgICAgIGludCBpbmRleCA9IChjdXJ2ZUxlbmd0aCAqIChpbnB1dCAr
IDEpKSAvIDI7Ci0KLSAgICAgICAgLy8gQ2xpcCBpbmRleCB0byB0aGUgaW5wdXQgcmFuZ2Ugb2Yg
dGhlIGN1cnZlLgotICAgICAgICAvLyBUaGlzIHRha2VzIGNhcmUgb2YgaW5wdXQgb3V0c2lkZSBv
ZiBub21pbmFsIHJhbmdlIC0xIC0+ICsxCi0gICAgICAgIGluZGV4ID0gbWF4KGluZGV4LCAwKTsK
LSAgICAgICAgaW5kZXggPSBtaW4oaW5kZXgsIGN1cnZlTGVuZ3RoIC0gMSk7Ci0gICAgICAgIGRl
c3RpbmF0aW9uW2ldID0gY3VydmVEYXRhW2luZGV4XTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlckRTUEtlcm5lbC5oCShyZXZpc2lvbiAxMTEy
MDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2F2ZVNo
YXBlckRTUEtlcm5lbF9oCi0jZGVmaW5lIFdhdmVTaGFwZXJEU1BLZXJuZWxfaAotCi0jaW5jbHVk
ZSAiQXVkaW9EU1BLZXJuZWwuaCIKLSNpbmNsdWRlICJXYXZlU2hhcGVyUHJvY2Vzc29yLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgV2F2ZVNoYXBlclByb2Nlc3NvcjsKLQotLy8g
V2F2ZVNoYXBlckRTUEtlcm5lbCBpcyBhbiBBdWRpb0RTUEtlcm5lbCBhbmQgaXMgcmVzcG9uc2li
bGUgZm9yIG5vbi1saW5lYXIgZGlzdG9ydGlvbiBvbiBvbmUgY2hhbm5lbC4KLQotY2xhc3MgV2F2
ZVNoYXBlckRTUEtlcm5lbCA6IHB1YmxpYyBBdWRpb0RTUEtlcm5lbCB7Ci1wdWJsaWM6ICAKLSAg
ICBXYXZlU2hhcGVyRFNQS2VybmVsKFdhdmVTaGFwZXJQcm9jZXNzb3IqIHByb2Nlc3NvcikKLSAg
ICA6IEF1ZGlvRFNQS2VybmVsKHByb2Nlc3NvcikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIC8v
IEF1ZGlvRFNQS2VybmVsCi0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3MoY29uc3QgZmxvYXQqIHNv
dXJjZSwgZmxvYXQqIGRlc3QsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgIHZpcnR1YWwg
dm9pZCByZXNldCgpIHsgfQotICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQotICAgIAotcHJvdGVjdGVkOgotICAgIFdhdmVTaGFw
ZXJQcm9jZXNzb3IqIHdhdmVTaGFwZXJQcm9jZXNzb3IoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxX
YXZlU2hhcGVyUHJvY2Vzc29yKj4ocHJvY2Vzc29yKCkpOyB9Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBXYXZlU2hhcGVyRFNQS2VybmVsX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5jcHAJKHJldmlzaW9uIDExMTIwOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
Ci0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIldhdmVTaGFwZXJOb2RlLmgiCi0j
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1XYXZl
U2hhcGVyTm9kZTo6V2F2ZVNoYXBlck5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0KQotICAgIDog
QXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUoY29udGV4dCwgY29udGV4dC0+c2FtcGxlUmF0ZSgpKQot
ewotICAgIG1fcHJvY2Vzc29yID0gYWRvcHRQdHIobmV3IFdhdmVTaGFwZXJQcm9jZXNzb3IoY29u
dGV4dC0+c2FtcGxlUmF0ZSgpLCAxKSk7Ci0gICAgc2V0Tm9kZVR5cGUoTm9kZVR5cGVXYXZlU2hh
cGVyKTsKLX0KLQotdm9pZCBXYXZlU2hhcGVyTm9kZTo6c2V0Q3VydmUoRmxvYXQzMkFycmF5KiBj
dXJ2ZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyAKLSAgICB3YXZlU2hhcGVyUHJv
Y2Vzc29yKCktPnNldEN1cnZlKGN1cnZlKTsKLX0KLQotRmxvYXQzMkFycmF5KiBXYXZlU2hhcGVy
Tm9kZTo6Y3VydmUoKQotewotICAgIHJldHVybiB3YXZlU2hhcGVyUHJvY2Vzc29yKCktPmN1cnZl
KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJf
QVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmgJKHJl
dmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
V2F2ZVNoYXBlck5vZGVfaAotI2RlZmluZSBXYXZlU2hhcGVyTm9kZV9oCi0KLSNpbmNsdWRlICJB
dWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oIgotI2luY2x1ZGUgIkJpcXVhZFByb2Nlc3Nvci5oIgot
I2luY2x1ZGUgIldhdmVTaGFwZXJQcm9jZXNzb3IuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1jbGFzcyBXYXZlU2hhcGVyTm9kZSA6IHB1
YmxpYyBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8V2F2ZVNoYXBlck5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdhdmVTaGFwZXJOb2RlKGNvbnRleHQpKTsK
LSAgICB9Ci0KLSAgICAvLyBzZXRDdXJ2ZSgpIGlzIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQu
Ci0gICAgdm9pZCBzZXRDdXJ2ZShGbG9hdDMyQXJyYXkqKTsKLSAgICBGbG9hdDMyQXJyYXkqIGN1
cnZlKCk7Ci0KLXByaXZhdGU6ICAgIAotICAgIFdhdmVTaGFwZXJOb2RlKEF1ZGlvQ29udGV4dCop
OyAgICAKLQotICAgIFdhdmVTaGFwZXJQcm9jZXNzb3IqIHdhdmVTaGFwZXJQcm9jZXNzb3IoKSB7
IHJldHVybiBzdGF0aWNfY2FzdDxXYXZlU2hhcGVyUHJvY2Vzc29yKj4ocHJvY2Vzc29yKCkpOyB9
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBXYXZlU2hhcGVyTm9k
ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuaWRsCShy
ZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZlU2hhcGVyTm9k
ZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVs
ZSBhdWRpbyB7Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElP
LAotICAgICAgICBKU0dlbmVyYXRlVG9KU09iamVjdAotICAgIF0gV2F2ZVNoYXBlck5vZGUgOiBB
dWRpb05vZGUgewotICAgICAgICBhdHRyaWJ1dGUgW0pTQ3VzdG9tU2V0dGVyXSBGbG9hdDMyQXJy
YXkgY3VydmU7Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVT
aGFwZXJQcm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L1dhdmVTaGFwZXJQcm9jZXNzb3IuY3BwCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5B
QkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIldhdmVTaGFwZXJQcm9jZXNzb3IuaCIKLQotI2lu
Y2x1ZGUgIldhdmVTaGFwZXJEU1BLZXJuZWwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAg
IAotV2F2ZVNoYXBlclByb2Nlc3Nvcjo6V2F2ZVNoYXBlclByb2Nlc3NvcihmbG9hdCBzYW1wbGVS
YXRlLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscykKLSAgICA6IEF1ZGlvRFNQS2VybmVsUHJvY2Vz
c29yKHNhbXBsZVJhdGUsIG51bWJlck9mQ2hhbm5lbHMpCi17Ci19Ci0KLVdhdmVTaGFwZXJQcm9j
ZXNzb3I6On5XYXZlU2hhcGVyUHJvY2Vzc29yKCkKLXsKLSAgICBpZiAoaXNJbml0aWFsaXplZCgp
KQotICAgICAgICB1bmluaXRpYWxpemUoKTsKLX0KLQotUGFzc093blB0cjxBdWRpb0RTUEtlcm5l
bD4gV2F2ZVNoYXBlclByb2Nlc3Nvcjo6Y3JlYXRlS2VybmVsKCkKLXsKLSAgICByZXR1cm4gYWRv
cHRQdHIobmV3IFdhdmVTaGFwZXJEU1BLZXJuZWwodGhpcykpOwotfQotCi12b2lkIFdhdmVTaGFw
ZXJQcm9jZXNzb3I6OnNldEN1cnZlKEZsb2F0MzJBcnJheSogY3VydmUpCi17Ci0gICAgLy8gVGhp
cyBzeW5jaHJvbml6ZXMgd2l0aCBwcm9jZXNzKCkuCi0gICAgTXV0ZXhMb2NrZXIgcHJvY2Vzc0xv
Y2tlcihtX3Byb2Nlc3NMb2NrKTsKLSAgICAKLSAgICBtX2N1cnZlID0gY3VydmU7Ci19Ci0KLXZv
aWQgV2F2ZVNoYXBlclByb2Nlc3Nvcjo6cHJvY2Vzcyhjb25zdCBBdWRpb0J1cyogc291cmNlLCBB
dWRpb0J1cyogZGVzdGluYXRpb24sIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgaWYg
KCFpc0luaXRpYWxpemVkKCkpIHsKLSAgICAgICAgZGVzdGluYXRpb24tPnplcm8oKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFRoZSBhdWRpbyB0aHJlYWQgY2FuJ3QgYmxvY2sg
b24gdGhpcyBsb2NrLCBzbyB3ZSBjYWxsIHRyeUxvY2soKSBpbnN0ZWFkLgotICAgIC8vIENhcmVm
dWwgLSB0aGlzIGlzIGEgdHJ5TG9jaygpIGFuZCBub3QgYW4gYXV0b2xvY2tlciwgc28gd2UgbXVz
dCB1bmxvY2soKSBiZWZvcmUgZXZlcnkgcmV0dXJuLgotICAgIGlmIChtX3Byb2Nlc3NMb2NrLnRy
eUxvY2soKSkgeyAgICAgICAgCi0gICAgICAgIC8vIEZvciBlYWNoIGNoYW5uZWwgb2Ygb3VyIGlu
cHV0LCBwcm9jZXNzIHVzaW5nIHRoZSBjb3JyZXNwb25kaW5nIFdhdmVTaGFwZXJEU1BLZXJuZWwg
aW50byB0aGUgb3V0cHV0IGNoYW5uZWwuCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2tlcm5lbHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX2tlcm5lbHNbaV0tPnByb2Nl
c3Moc291cmNlLT5jaGFubmVsKGkpLT5kYXRhKCksIGRlc3RpbmF0aW9uLT5jaGFubmVsKGkpLT5t
dXRhYmxlRGF0YSgpLCBmcmFtZXNUb1Byb2Nlc3MpOwotCi0gICAgICAgIG1fcHJvY2Vzc0xvY2su
dW5sb2NrKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gVG9vIGJhZCAtIHRoZSB0cnlMb2Nr
KCkgZmFpbGVkLiBXZSBtdXN0IGJlIGluIHRoZSBtaWRkbGUgb2YgYSBzZXRDdXJ2ZSgpIGNhbGwu
Ci0gICAgICAgIGRlc3RpbmF0aW9uLT56ZXJvKCk7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuaAkocmV2aXNpb24gMTExMjA4
KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdhdmVTaGFw
ZXJQcm9jZXNzb3JfaAotI2RlZmluZSBXYXZlU2hhcGVyUHJvY2Vzc29yX2gKLQotI2luY2x1ZGUg
IkF1ZGlvRFNQS2VybmVsLmgiCi0jaW5jbHVkZSAiQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuaCIK
LSNpbmNsdWRlICJBdWRpb05vZGUuaCIKLSNpbmNsdWRlIDx3dGYvRmxvYXQzMkFycmF5Lmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi0vLyBXYXZlU2hhcGVyUHJvY2Vzc29yIGlzIGFuIEF1ZGlvRFNQ
S2VybmVsUHJvY2Vzc29yIHdoaWNoIHVzZXMgV2F2ZVNoYXBlckRTUEtlcm5lbCBvYmplY3RzIHRv
IGltcGxlbWVudCBub24tbGluZWFyIGRpc3RvcnRpb24gZWZmZWN0cy4KLQotY2xhc3MgV2F2ZVNo
YXBlclByb2Nlc3NvciA6IHB1YmxpYyBBdWRpb0RTUEtlcm5lbFByb2Nlc3NvciB7Ci1wdWJsaWM6
Ci0gICAgV2F2ZVNoYXBlclByb2Nlc3NvcihmbG9hdCBzYW1wbGVSYXRlLCBzaXplX3QgbnVtYmVy
T2ZDaGFubmVscyk7Ci0KLSAgICB2aXJ0dWFsIH5XYXZlU2hhcGVyUHJvY2Vzc29yKCk7Ci0KLSAg
ICB2aXJ0dWFsIFBhc3NPd25QdHI8QXVkaW9EU1BLZXJuZWw+IGNyZWF0ZUtlcm5lbCgpOwotCi0g
ICAgdmlydHVhbCB2b2lkIHByb2Nlc3MoY29uc3QgQXVkaW9CdXMqIHNvdXJjZSwgQXVkaW9CdXMq
IGRlc3RpbmF0aW9uLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLQotICAgIHZvaWQgc2V0Q3Vy
dmUoRmxvYXQzMkFycmF5Kik7Ci0gICAgRmxvYXQzMkFycmF5KiBjdXJ2ZSgpIHsgcmV0dXJuIG1f
Y3VydmUuZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICAvLyBtX2N1cnZlIHJlcHJlc2VudHMgdGhl
IG5vbi1saW5lYXIgc2hhcGluZyBjdXJ2ZS4KLSAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiBtX2N1
cnZlOwotCi0gICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgcHJvY2VzcygpIHdpdGggc2V0Q3VydmUo
KS4KLSAgICBtdXRhYmxlIE11dGV4IG1fcHJvY2Vzc0xvY2s7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBXYXZlU2hhcGVyUHJvY2Vzc29yX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132637</attachid>
            <date>2012-03-19 13:10:42 -0700</date>
            <delta_ts>2012-03-19 13:56:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81541-20120319161032.patch</filename>
            <type>text/plain</type>
            <size>496248</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTIyMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyOCBAQAorMjAxMi0wMy0xOSAgTWFyayBQ
aWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgTW92ZSB3ZWJhdWRpbyB0
byBNb2R1bGVzL3dlYmF1ZGlvLworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODE1NDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBObyBuZXcgdGVzdHMsIGFsbCBleGlzdGluZyB0ZXN0cyBwYXNzLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAg
ICAgICAgKiBEZXJpdmVkU291cmNlcy5wcmk6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06Cisg
ICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlv
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby4KKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2Vi
Q29yZS5wcmk6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHdlYmF1ZGlvOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0FzeW5jQXVk
aW9EZWNvZGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9Bc3luY0F1ZGlvRGVj
b2Rlci5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JO
b2RlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29y
Tm9kZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0J1ZmZlci5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHdlYmF1ZGlvL0F1ZGlvQnVmZmVyLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRp
by9BdWRpb0J1ZmZlckNhbGxiYWNrLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVk
aW9CdWZmZXJDYWxsYmFjay5pZGw6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9C
dWZmZXJTb3VyY2VOb2RlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0J1
ZmZlclNvdXJjZU5vZGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0J1ZmZl
clNvdXJjZU5vZGUuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQ2hhbm5l
bE1lcmdlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVy
Z2VyLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmlk
bDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5pZGw6IFJlbW92
ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiB3ZWJhdWRpby9BdWRpb0NvbnRleHQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRp
by9BdWRpb0NvbnRleHQuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvRGVz
dGluYXRpb25Ob2RlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0Rlc3Rp
bmF0aW9uTm9kZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvRGVzdGluYXRp
b25Ob2RlLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0dhaW4uaDogUmVt
b3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0dhaW4uaWRsOiBSZW1vdmVkLgorICAgICAg
ICAqIHdlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1
ZGlvL0F1ZGlvR2Fpbk5vZGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0dh
aW5Ob2RlLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmg6IFJlbW92ZWQu
CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5pZGw6IFJlbW92ZWQuCisgICAgICAg
ICogd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9B
dWRpb05vZGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb05vZGUuaWRsOiBS
ZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5oOiBSZW1vdmVkLgorICAgICAgICAq
IHdlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVk
aW8vQXVkaW9Ob2RlT3V0cHV0Lmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Q
YW5uZXJOb2RlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb1Bhbm5lck5v
ZGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaWRsOiBS
ZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvUGFyYW0uY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHdlYmF1ZGlvL0F1ZGlvUGFyYW0uaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRp
by9BdWRpb1BhcmFtLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb1BhcmFt
VGltZWxpbmUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1l
bGluZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5o
OiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmlkbDog
UmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaWRsOiBSZW1vdmVkLgorICAgICAg
ICAqIHdlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2Vi
YXVkaW8vQmlxdWFkRFNQS2VybmVsLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQmlx
dWFkRmlsdGVyTm9kZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQmlxdWFkRmls
dGVyTm9kZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUu
aWRsOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmg6IFJlbW92ZWQuCisg
ICAgICAgICogd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
d2ViYXVkaW8vQ29udm9sdmVyTm9kZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0Nv
bnZvbHZlck5vZGUuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0RPTVdpbmRvd1dl
YkF1ZGlvLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0
aW5hdGlvbk5vZGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0RlZmF1bHRBdWRp
b0Rlc3RpbmF0aW9uTm9kZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0RlbGF5RFNQ
S2VybmVsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9EZWxheURTUEtlcm5lbC5o
OiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0RlbGF5Tm9kZS5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogd2ViYXVkaW8vRGVsYXlOb2RlLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVk
aW8vRGVsYXlOb2RlLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9EZWxheVByb2Nl
c3Nvci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmg6IFJl
bW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5pZGw6IFJl
bW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHdlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuaWRsOiBSZW1vdmVkLgorICAg
ICAgICAqIHdlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHdlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3
ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJh
dWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlv
L0xvd1Bhc3MyRmlsdGVyTm9kZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0xvd1Bh
c3MyRmlsdGVyTm9kZS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vTWVkaWFFbGVt
ZW50QXVkaW9Tb3VyY2VOb2RlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9NZWRp
YUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9N
ZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1
ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
d2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50Lmg6IFJlbW92ZWQuCisgICAgICAg
ICogd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmlkbDogUmVtb3ZlZC4KKyAg
ICAgICAgKiB3ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHdlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHdlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHdlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiB3ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
d2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJh
dWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVk
aW8vV2F2ZVNoYXBlckRTUEtlcm5lbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8v
V2F2ZVNoYXBlckRTUEtlcm5lbC5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL1dhdmVT
aGFwZXJOb2RlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9XYXZlU2hhcGVyTm9k
ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmlkbDogUmVt
b3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiB3ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmg6IFJlbW92ZWQuCisK
IDIwMTItMDMtMTkgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTUzNApJbmRleDogU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQCBTRVQoV2ViQ29yZV9JTkNMVURF
X0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvZmlsZXN5c3RlbSIKICAg
ICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9nZW9sb2NhdGlvbiIKICAgICAiJHtXRUJDT1JFX0RJ
Un0vTW9kdWxlcy9pbmRleGVkZGIiCisgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvd2ViYXVk
aW8iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvd2ViZGF0YWJhc2UiCiAgICAgIiR7V0VC
Q09SRV9ESVJ9L01vZHVsZXMvd2Vic29ja2V0cyIKICAgICAiJHtXRUJDT1JFX0RJUn0vYWNjZXNz
aWJpbGl0eSIKQEAgLTY0LDcgKzY1LDYgQEAgU0VUKFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklF
UwogICAgICIke1dFQkNPUkVfRElSfS9zdmcvZ3JhcGhpY3MiCiAgICAgIiR7V0VCQ09SRV9ESVJ9
L3N2Zy9ncmFwaGljcy9maWx0ZXJzIgogICAgICIke1dFQkNPUkVfRElSfS9zdmcvcHJvcGVydGll
cyIKLSAgICAiJHtXRUJDT1JFX0RJUn0vd2ViYXVkaW8iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3dl
YnNvY2tldHMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3dvcmtlcnMiCiAgICAgIiR7V0VCQ09SRV9E
SVJ9L3htbCIKQEAgLTk2LDYgKzk2LDcgQEAgU0VUKFdlYkNvcmVfSURMX0lOQ0xVREVTCiAgICAg
TW9kdWxlcy9maWxlc3lzdGVtCiAgICAgTW9kdWxlcy9nZW9sb2NhdGlvbgogICAgIE1vZHVsZXMv
aW5kZXhlZGRiCisgICAgTW9kdWxlcy93ZWJhdWRpbwogICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UK
ICAgICBNb2R1bGVzL3dlYnNvY2tldHMKICAgICBiaW5kaW5ncy9nZW5lcmljCkBAIC0xMTAsNyAr
MTExLDYgQEAgU0VUKFdlYkNvcmVfSURMX0lOQ0xVREVTCiAgICAgcGx1Z2lucwogICAgIHN0b3Jh
Z2UKICAgICBzdmcKLSAgICB3ZWJhdWRpbwogICAgIHdvcmtlcnMKICAgICB4bWwKICkKQEAgLTM3
NiwyNyArMzc2LDI3IEBAIFNFVChXZWJDb3JlX0lETF9GSUxFUwogICAgIHN0b3JhZ2UvU3RvcmFn
ZUluZm9RdW90YUNhbGxiYWNrLmlkbAogICAgIHN0b3JhZ2UvU3RvcmFnZUluZm9Vc2FnZUNhbGxi
YWNrLmlkbAogCi0gICAgd2ViYXVkaW8vQXVkaW9CdWZmZXIuaWRsCi0gICAgd2ViYXVkaW8vQXVk
aW9CdWZmZXJTb3VyY2VOb2RlLmlkbAotICAgIHdlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVy
LmlkbAotICAgIHdlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5pZGwKLSAgICB3ZWJhdWRpby9B
dWRpb0NvbnRleHQuaWRsCi0gICAgd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaWRsCi0g
ICAgd2ViYXVkaW8vQXVkaW9HYWluLmlkbAotICAgIHdlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaWRs
Ci0gICAgd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5pZGwKLSAgICB3ZWJhdWRpby9BdWRpb05vZGUu
aWRsCi0gICAgd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbAotICAgIHdlYmF1ZGlvL0F1ZGlv
UGFyYW0uaWRsCi0gICAgd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaWRsCi0gICAgd2Vi
YXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmlkbAotICAgIHdlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRs
Ci0gICAgd2ViYXVkaW8vRE9NV2luZG93V2ViQXVkaW8uaWRsCi0gICAgd2ViYXVkaW8vRGVsYXlO
b2RlLmlkbAotICAgIHdlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuaWRsCi0gICAgd2ViYXVk
aW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5pZGwKLSAgICB3ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5v
ZGUuaWRsCi0gICAgd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaWRsCisgICAgTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0J1ZmZlci5pZGwKKyAgICBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVm
ZmVyU291cmNlTm9kZS5pZGwKKyAgICBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0
dGVyLmlkbAorICAgIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmlkbAorICAg
IE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbAorICAgIE1vZHVsZXMvd2ViYXVkaW8v
QXVkaW9EZXN0aW5hdGlvbk5vZGUuaWRsCisgICAgTW9kdWxlcy93ZWJhdWRpby9BdWRpb0dhaW4u
aWRsCisgICAgTW9kdWxlcy93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmlkbAorICAgIE1vZHVsZXMv
d2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5pZGwKKyAgICBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9k
ZS5pZGwKKyAgICBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwKKyAgICBNb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uaWRsCisgICAgTW9kdWxlcy93ZWJhdWRpby9BdWRpb1By
b2Nlc3NpbmdFdmVudC5pZGwKKyAgICBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5p
ZGwKKyAgICBNb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsCisgICAgTW9kdWxlcy93
ZWJhdWRpby9ET01XaW5kb3dXZWJBdWRpby5pZGwKKyAgICBNb2R1bGVzL3dlYmF1ZGlvL0RlbGF5
Tm9kZS5pZGwKKyAgICBNb2R1bGVzL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuaWRsCisg
ICAgTW9kdWxlcy93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmlkbAorICAgIE1vZHVsZXMv
d2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmlkbAorICAgIE1vZHVsZXMvd2ViYXVkaW8vUmVh
bHRpbWVBbmFseXNlck5vZGUuaWRsCiAKICAgICB4bWwvRE9NUGFyc2VyLmlkbAogICAgIHhtbC9Y
TUxIdHRwUmVxdWVzdC5pZGwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkocmV2
aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYkNvcmUpL01v
ZHVsZXMvZmlsZXN5c3RlbSBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL2dlb2xvY2F0aW9uIFwK
ICAgICAkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiIFwKKyAgICAkKFdlYkNvcmUpL01vZHVs
ZXMvd2ViYXVkaW8gXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJkYXRhYmFzZSBcCiAgICAg
JChXZWJDb3JlKS9Nb2R1bGVzL3dlYnNvY2tldHMgXAogICAgICQoV2ViQ29yZSkvYmluZGluZ3Mv
Z2VuZXJpYyBcCkBAIC01MCw3ICs1MSw2IEBAIFZQQVRIID0gXAogICAgICQoV2ViQ29yZSkvcGx1
Z2lucyBcCiAgICAgJChXZWJDb3JlKS9zdG9yYWdlIFwKICAgICAkKFdlYkNvcmUpL3htbCBcCi0g
ICAgJChXZWJDb3JlKS93ZWJhdWRpbyBcCiAgICAgJChXZWJDb3JlKS93b3JrZXJzIFwKICAgICAk
KFdlYkNvcmUpL3N2ZyBcCiAgICAgJChXZWJDb3JlKS90ZXN0aW5nIFwKQEAgLTEwNCw2ICsxMDQs
MzMgQEAgQklORElOR19JRExTID0gXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIv
SURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwgXAogICAgICQoV2ViQ29yZSkvTW9kdWxl
cy9pbmRleGVkZGIvV29ya2VyQ29udGV4dEluZGV4ZWREYXRhYmFzZS5pZGwgXAorICAgICQoV2Vi
Q29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5pZGwgXAorICAgICQoV2ViQ29yZSkv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlckNhbGxiYWNrLmlkbCBcCisgICAgJChXZWJDb3Jl
KS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5pZGwgXAorICAgICQoV2Vi
Q29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuaWRsIFwKKyAgICAkKFdl
YkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuaWRsIFwKKyAgICAk
KFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbCBcCisgICAgJChXZWJD
b3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmlkbCBcCisgICAgJChX
ZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbi5pZGwgXAorICAgICQoV2ViQ29yZSkv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Ob2RlLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvUGFubmVyTm9kZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb1BhcmFtLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUHJv
Y2Vzc2luZ0V2ZW50LmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
U291cmNlTm9kZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRG
aWx0ZXJOb2RlLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZl
ck5vZGUuaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vRE9NV2luZG93V2Vi
QXVkaW8uaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vRGVsYXlOb2RlLmlk
bCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5v
ZGUuaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVy
Tm9kZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9KYXZhU2NyaXB0QXVk
aW9Ob2RlLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0xvd1Bhc3MyRmls
dGVyTm9kZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1l
bnRBdWRpb1NvdXJjZU5vZGUuaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8v
T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVz
L3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1
bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmlkbCBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RPTVdpbmRvd1NRTERhdGFiYXNlLmlkbCBcCiAgICAgJChXZWJDb3JlKS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmlkbCBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlQ2FsbGJhY2suaWRsIFwKQEAgLTU0NSwzMyArNTcyLDYgQEAg
QklORElOR19JRExTID0gXAogICAgICQoV2ViQ29yZSkvc3ZnL1NWR1pvb21FdmVudC5pZGwgXAog
ICAgICQoV2ViQ29yZSkvdGVzdGluZy9JbnRlcm5hbHMuaWRsIFwKICAgICAkKFdlYkNvcmUpL3Rl
c3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5pZGwgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8vQXVk
aW9CdWZmZXIuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyQ2FsbGJh
Y2suaWRsIFwKLSAgICAkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5p
ZGwgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmlkbCBcCi0g
ICAgJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5pZGwgXAotICAgICQo
V2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbCBcCi0gICAgJChXZWJDb3JlKS93ZWJh
dWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGwgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8v
QXVkaW9HYWluLmlkbCBcCi0gICAgJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmlk
bCBcCi0gICAgJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmlkbCBcCi0gICAgJChX
ZWJDb3JlKS93ZWJhdWRpby9BdWRpb05vZGUuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3dlYmF1ZGlv
L0F1ZGlvUGFubmVyTm9kZS5pZGwgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9QYXJh
bS5pZGwgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaWRs
IFwKLSAgICAkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5pZGwgXAotICAgICQo
V2ViQ29yZSkvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5pZGwgXAotICAgICQoV2ViQ29yZSkv
d2ViYXVkaW8vQ29udm9sdmVyTm9kZS5pZGwgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8vRE9N
V2luZG93V2ViQXVkaW8uaWRsIFwKLSAgICAkKFdlYkNvcmUpL3dlYmF1ZGlvL0RlbGF5Tm9kZS5p
ZGwgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5pZGwg
XAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5pZGwgXAotICAg
ICQoV2ViQ29yZSkvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5pZGwgXAotICAgICQoV2Vi
Q29yZSkvd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmlkbCBcCi0gICAgJChXZWJDb3JlKS93
ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaWRsIFwKLSAgICAkKFdlYkNvcmUp
L3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5pZGwgXAotICAgICQoV2ViQ29y
ZSkvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3dl
YmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmlkbCBcCiAgICAgJChXZWJDb3JlKS93b3JrZXJzL0Fic3Ry
YWN0V29ya2VyLmlkbCBcCiAgICAgJChXZWJDb3JlKS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckNv
bnRleHQuaWRsIFwKICAgICAkKFdlYkNvcmUpL3dvcmtlcnMvU2hhcmVkV29ya2VyLmlkbCBcCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw2ICsx
MjksMjcgQEAgSURMX0JJTkRJTkdTICs9IFwKICAgICAkJFBXRC9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJSZXF1ZXN0LmlkbCBcCiAgICAgJCRQV0QvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rp
b24uaWRsIFwKICAgICAkJFBXRC9Nb2R1bGVzL2luZGV4ZWRkYi9Xb3JrZXJDb250ZXh0SW5kZXhl
ZERhdGFiYXNlLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5p
ZGwgXAorICAgICQkUFdEL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlk
bCBcCisgICAgJCRQV0QvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuaWRsIFwK
KyAgICAkJFBXRC9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmlkbCBcCisg
ICAgJCRQV0QvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsIFwKKyAgICAkJFBXRC9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmlkbCBcCisgICAgJCRQV0QvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb0dhaW4uaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvR2Fpbk5vZGUuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTGlz
dGVuZXIuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5pZGwgXAor
ICAgICQkUFdEL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbCBcCisgICAgJCRQ
V0QvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy93ZWJhdWRpby9D
b252b2x2ZXJOb2RlLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy93ZWJhdWRpby9EZWxheU5vZGUu
aWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL3dlYmF1ZGlvL0RPTVdpbmRvd1dlYkF1ZGlvLmlkbCBc
CisgICAgJCRQV0QvTW9kdWxlcy93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmlkbCBcCisg
ICAgJCRQV0QvTW9kdWxlcy93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmlkbCBcCisgICAg
JCRQV0QvTW9kdWxlcy93ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuaWRsIFwKKyAgICAkJFBX
RC9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmlkbCBcCiAgICAgJCRQV0Qv
TW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5pZGwgXAogICAgICQkUFdE
L01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaWRsIFwKICAgICAkJFBXRC9Nb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlQ2FsbGJhY2suaWRsIFwKQEAgLTQxMSwyNyArNDMyLDYgQEAgSURM
X0JJTkRJTkdTICs9IFwKICAgICAkJFBXRC9zdG9yYWdlL1N0b3JhZ2VJbmZvVXNhZ2VDYWxsYmFj
ay5pZGwgXAogICAgICQkUFdEL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCBcCiAgICAgJCRQV0QvdGVz
dGluZy9JbnRlcm5hbFNldHRpbmdzLmlkbCBcCi0gICAgJCRQV0Qvd2ViYXVkaW8vQXVkaW9CdWZm
ZXIuaWRsIFwKLSAgICAkJFBXRC93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaWRsIFwK
LSAgICAkJFBXRC93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuaWRsIFwKLSAgICAkJFBXRC93
ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5pZGwgXAotICAgICQkUFdEL3dlYmF1ZGlvL0F1
ZGlvQ29udGV4dC5pZGwgXAotICAgICQkUFdEL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2Rl
LmlkbCBcCi0gICAgJCRQV0Qvd2ViYXVkaW8vQXVkaW9HYWluLmlkbCBcCi0gICAgJCRQV0Qvd2Vi
YXVkaW8vQXVkaW9HYWluTm9kZS5pZGwgXAotICAgICQkUFdEL3dlYmF1ZGlvL0F1ZGlvTGlzdGVu
ZXIuaWRsIFwKLSAgICAkJFBXRC93ZWJhdWRpby9BdWRpb05vZGUuaWRsIFwKLSAgICAkJFBXRC93
ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaWRsIFwKLSAgICAkJFBXRC93ZWJhdWRpby9BdWRpb1Bh
cmFtLmlkbCBcCi0gICAgJCRQV0Qvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaWRsIFwK
LSAgICAkJFBXRC93ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaWRsIFwKLSAgICAkJFBXRC93ZWJh
dWRpby9Db252b2x2ZXJOb2RlLmlkbCBcCi0gICAgJCRQV0Qvd2ViYXVkaW8vRGVsYXlOb2RlLmlk
bCBcCi0gICAgJCRQV0Qvd2ViYXVkaW8vRE9NV2luZG93V2ViQXVkaW8uaWRsIFwKLSAgICAkJFBX
RC93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmlkbCBcCi0gICAgJCRQV0Qvd2ViYXVkaW8v
SmF2YVNjcmlwdEF1ZGlvTm9kZS5pZGwgXAotICAgICQkUFdEL3dlYmF1ZGlvL0xvd1Bhc3MyRmls
dGVyTm9kZS5pZGwgXAotICAgICQkUFdEL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmlk
bCBcCiAgICAgJCRQV0Qvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5pZGwgXAogICAgICQkUFdEL3dv
cmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5pZGwgXAogICAgICQkUFdEL3dvcmtlcnMvU2hh
cmVkV29ya2VyLmlkbCBcCkBAIC02OTksNiArNjk5LDcgQEAgZ2VuZXJhdGVCaW5kaW5ncy5jb21t
YW5kcyA9IHBlcmwgLUkkJFBXRAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5jbHVk
ZSAkJFBXRC9Nb2R1bGVzL2ZpbGVzeXN0ZW0gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC0taW5jbHVkZSAkJFBXRC9Nb2R1bGVzL2dlb2xvY2F0aW9uIFwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAtLWluY2x1ZGUgJCRQV0QvTW9kdWxlcy9pbmRleGVkZGIgXAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAkJFBXRC9Nb2R1bGVzL3dlYmF1ZGlvIFwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtLWluY2x1ZGUgJCRQV0QvTW9kdWxlcy93ZWJkYXRh
YmFzZSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1pbmNsdWRlICQkUFdEL01vZHVs
ZXMvd2Vic29ja2V0cyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1pbmNsdWRlICQk
UFdEL2RvbSBcCkBAIC03MDksNyArNzEwLDYgQEAgZ2VuZXJhdGVCaW5kaW5ncy5jb21tYW5kcyA9
IHBlcmwgLUkkJFBXRAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAkJFBX
RC9zdG9yYWdlIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWluY2x1ZGUgJCRQV0Qv
Y3NzIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWluY2x1ZGUgJCRQV0QvdGVzdGlu
ZyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1pbmNsdWRlICQkUFdEL3dlYmF1ZGlv
IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWluY2x1ZGUgJCRQV0Qvd29ya2VycyBc
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1vdXRwdXREaXIgJHtRTUFLRV9GVU5DX0ZJ
TEVfT1VUX1BBVEh9IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXN1cHBsZW1lbnRh
bERlcGVuZGVuY3lGaWxlICR7UU1BS0VfRlVOQ19GSUxFX09VVF9QQVRIfS8kJFNVUFBMRU1FTlRB
TF9ERVBFTkRFTkNZX0ZJTEUgXApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDEx
MTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0xNSw2ICsxNSw3IEBAIHdlYmNvcmVfY3BwZmxhZ3MgKz0gXAogCS1JJChzcmNkaXIpL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMgXAogCS1J
JChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkgXApAQCAtODcsNyArODgsNiBA
QCB3ZWJjb3JlX2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9zdmcv
cHJvcGVydGllcyBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvdGVzdGluZyBcCiAJLUkk
KHNyY2RpcikvU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcyBcCi0JLUkkKHNyY2RpcikvU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tl
dHMgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMgXAogCS1JJChzcmNkaXIp
L1NvdXJjZS9XZWJDb3JlL3htbCBcCkBAIC03ODMsNiArNzgzLDcgQEAgSURMX1BBVEggOj0gXAog
ICAgICQoV2ViQ29yZSkvTW9kdWxlcy9nZW9sb2NhdGlvbiBcCiAgICAgJChXZWJDb3JlKS9Nb2R1
bGVzL2luZGV4ZWRkYiBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL21lZGlhc3RyZWFtIFwKKyAg
ICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8gXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy93
ZWJkYXRhYmFzZSBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYnNvY2tldHMgXAogICAgICQo
V2ViQ29yZSkvYmluZGluZ3MvanMgXApAQCAtODAyLDcgKzgwMyw2IEBAIElETF9QQVRIIDo9IFwK
ICAgICAkKFdlYkNvcmUpL3N0b3JhZ2UgXAogICAgICQoV2ViQ29yZSkvc3ZnIFwKICAgICAkKFdl
YkNvcmUpL3Rlc3RpbmcgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8gXAogICAgICQoV2ViQ29y
ZSkvd2Vic29ja2V0cyBcCiAgICAgJChXZWJDb3JlKS93b3JrZXJzIFwKICAgICAkKFdlYkNvcmUp
L3htbApAQCAtOTI3LDYgKzkyNyw3IEBAIEVYVFJBX0RJU1QgKz0gXAogCSQoc2hlbGwgbHMgJChz
cmNkaXIpL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vKi5pZGwpIFwKIAkkKHNo
ZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi8qLmlkbCkg
XAogCSQoc2hlbGwgbHMgJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vKi5pZGwpIFwKKwkkKHNoZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvLyouaWRsKSBcCiAJJChzaGVsbCBscyAkKHNyY2RpcikvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS8qLmlkbCkgXAogCSQoc2hlbGwgbHMgJChzcmNkaXIpL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy8qLmlkbCkgXAogCSQoc2hlbGwgbHMgJChzcmNk
aXIpL1NvdXJjZS9XZWJDb3JlL2Nzcy8qLmlkbCkgXApAQCAtOTQ0LDcgKzk0NSw2IEBAIEVYVFJB
X0RJU1QgKz0gXAogCSQoc2hlbGwgbHMgJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
Ki5pZGwpIFwKIAkkKHNoZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9zdmcvKi5pZGwp
IFwKIAkkKHNoZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nLyouaWRsKSBc
Ci0JJChzaGVsbCBscyAkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vKi5pZGwpIFwK
IAkkKHNoZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzLyouaWRsKSBcCiAJ
JChzaGVsbCBscyAkKHNyY2RpcikvU291cmNlL1dlYkNvcmUveG1sLyouaWRsKSBcCiAJU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubCBcCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTY3Nyw2ICs2NzcsMTEgQEAg
ZG9tX2JpbmRpbmdfaWRscyArPSBcCiAJJChXZWJDb3JlKS9Nb2R1bGVzL21lZGlhc3RyZWFtL05h
dmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjay5pZGwgXAogCSQoV2ViQ29yZSkvTW9kdWxl
cy9tZWRpYXN0cmVhbS9TZXNzaW9uRGVzY3JpcHRpb24uaWRsIFwKIAkkKFdlYkNvcmUpL01vZHVs
ZXMvbWVkaWFzdHJlYW0vU2lnbmFsaW5nQ2FsbGJhY2suaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9E
eW5hbWljc0NvbXByZXNzb3JOb2RlLmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlv
L0RPTVdpbmRvd1dlYkF1ZGlvLmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL1dh
dmVTaGFwZXJOb2RlLmlkbCBcCiAJJChXZWJDb3JlKS9jc3MvQ1NTQ2hhcnNldFJ1bGUuaWRsIFwK
IAkkKFdlYkNvcmUpL2Nzcy9DU1NGb250RmFjZVJ1bGUuaWRsIFwKIAkkKFdlYkNvcmUpL2Nzcy9D
U1NJbXBvcnRSdWxlLmlkbCBcCkBAIC05MzYsMTEgKzk0MSw2IEBAIGRvbV9iaW5kaW5nX2lkbHMg
Kz0gXAogCSQoV2ViQ29yZSkvc3RvcmFnZS9TdG9yYWdlRXZlbnQuaWRsIFwKIAkkKFdlYkNvcmUp
L3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCBcCiAJJChXZWJDb3JlKS90ZXN0aW5nL0ludGVybmFsU2V0
dGluZ3MuaWRsIFwKLQkkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwgXAotCSQo
V2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbCBcCi0JJChXZWJDb3JlKS93ZWJh
dWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmlkbCBcCi0JJChXZWJDb3JlKS93ZWJhdWRpby9E
T01XaW5kb3dXZWJBdWRpby5pZGwgXAotCSQoV2ViQ29yZSkvd2ViYXVkaW8vV2F2ZVNoYXBlck5v
ZGUuaWRsIFwKIAkkKFdlYkNvcmUpL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuaWRsIFwKIAkkKFdl
YkNvcmUpL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5pZGwgXAogCSQoV2ViQ29yZSkv
d29ya2Vycy9TaGFyZWRXb3JrZXIuaWRsIFwKQEAgLTUzNzUsODggKzUzNzUsODggQEAgZW5kaWYg
IyBFTkQgRU5BQkxFX1NWRwogCiBpZiBFTkFCTEVfV0VCX0FVRElPCiB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVy
LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nv
ck5vZGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQ
cm9jZXNzb3JOb2RlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9C
dWZmZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVy
LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFj
ay5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNl
Tm9kZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJT
b3VyY2VOb2RlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFu
bmVsTWVyZ2VyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0No
YW5uZWxNZXJnZXIuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0No
YW5uZWxTcGxpdHRlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9DaGFubmVsU3BsaXR0ZXIuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0NvbnRleHQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
Q29udGV4dC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGlu
YXRpb25Ob2RlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rl
c3RpbmF0aW9uTm9kZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
R2Fpbi5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaCBc
CisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmNwcCBcCisJ
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmggXAorCVNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcCBcCisJU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb05vZGVPdXRwdXQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvTm9kZU91dHB1dC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvUGFubmVyTm9kZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9QYW5uZXJOb2RlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9QYXJhbS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJh
bS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGlu
ZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVs
aW5lLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5n
RXZlbnQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vz
c2luZ0V2ZW50LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Tb3Vy
Y2VOb2RlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkRFNQS2Vy
bmVsLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9CaXF1YWREU1BLZXJu
ZWwuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2Rl
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2Rl
LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmNw
cCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuaCBc
CisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcCBcCisJ
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmggXAorCVNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmgg
XAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRp
b25Ob2RlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWxheURTUEtl
cm5lbC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVsYXlEU1BLZXJu
ZWwuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWxheU5vZGUuY3BwIFwK
KwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5Tm9kZS5oIFwKKwlTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5UHJvY2Vzc29yLmNwcCBcCisJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWxheVByb2Nlc3Nvci5oIFwKKwlTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwIFwKKwlTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaCBcCisJU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmNwcCBcCisJ
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmggXAor
CVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5jcHAg
XAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5j
cHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2Rl
LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9T
b3VyY2VOb2RlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVs
ZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVu
dC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNl
ci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNl
ci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJO
b2RlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5
c2VyTm9kZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJO
b2RlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyUHJv
Y2Vzc29yLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlckRT
UEtlcm5lbC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBl
ckRTUEtlcm5lbC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFw
ZXJQcm9jZXNzb3IuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVT
aGFwZXJOb2RlLmggXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJT
b3VyY2VOb2RlQ3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRp
b0NvbnRleHRDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbnZv
bHZlck5vZGVDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0phdmFT
Y3JpcHRBdWRpb05vZGVDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dhdmVTaGFwZXJOb2RlQ3VzdG9tLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXN5
bmNBdWRpb0RlY29kZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Bc3luY0F1ZGlv
RGVjb2Rlci5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29y
Tm9kZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JO
b2RlLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFjay5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9B
dWRpb0J1ZmZlclNvdXJjZU5vZGUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b0J1ZmZlclNvdXJjZU5vZGUuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFu
bmVsTWVyZ2VyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVy
Z2VyLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuaCBcCi0J
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcCBcCi0JU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1
ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9E
ZXN0aW5hdGlvbk5vZGUuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9HYWluLmgg
XAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvTGlzdGVuZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0xp
c3RlbmVyLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9BdWRpb05vZGVJbnB1dC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
Tm9kZUlucHV0LmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5j
cHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5oIFwKLQlTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9QYXJhbS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uaCBc
Ci0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmggXAotCVNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9Tb3VyY2VOb2RlLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERT
UEtlcm5lbC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5o
IFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5oIFwKLQlTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9CaXF1YWRQcm9jZXNzb3IuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVy
Tm9kZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaCBcCi0J
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmggXAot
CVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5RFNQS2VybmVsLmNwcCBcCi0JU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuaCBcCi0JU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vRGVsYXlOb2RlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlOb2Rl
LmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5UHJvY2Vzc29yLmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuaCBcCi0JU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0hp
Z2hQYXNzMkZpbHRlck5vZGUuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSmF2YVNjcmlw
dEF1ZGlvTm9kZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRp
b05vZGUuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmggXAotCVNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oIFwK
LQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCBc
Ci0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50
LmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVu
dC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyLmggXAotCVNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmNwcCBcCi0JU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaCBcCi0JU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vV2F2ZVNoYXBlck5vZGUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZl
U2hhcGVyUHJvY2Vzc29yLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJE
U1BLZXJuZWwuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2Vy
bmVsLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0FycmF5LmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL0F1ZGlvQnVzLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vQXVkaW9CdXMuaCBcCkBAIC01NTc5LDI4ICs1NTc5LDI4IEBAIHdlYmNvcmVfYnVpbHRfc291
cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1JlYWx0aW1lQW5hbHlzZXJOb2Rl
LmgKIAogZG9tX2JpbmRpbmdfaWRscyArPSBcCi0JJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb0J1
ZmZlci5pZGwgXAotCSQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFjay5pZGwg
XAotCSQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlkbCBcCi0JJChX
ZWJDb3JlKS93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuaWRsIFwKLQkkKFdlYkNvcmUpL3dl
YmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmlkbCBcCi0JJChXZWJDb3JlKS93ZWJhdWRpby9B
dWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGwgXAotCSQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9HYWlu
LmlkbCBcCi0JJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmlkbCBcCi0JJChXZWJD
b3JlKS93ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmlkbCBcCi0JJChXZWJDb3JlKS93ZWJhdWRpby9B
dWRpb05vZGUuaWRsIFwKLQkkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uaWRsIFwKLQkk
KFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmlkbCBcCi0JJChXZWJDb3Jl
KS93ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaWRsIFwKLQkkKFdlYkNvcmUpL3dlYmF1ZGlvL0Jp
cXVhZEZpbHRlck5vZGUuaWRsIFwKLQkkKFdlYkNvcmUpL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUu
aWRsIFwKLQkkKFdlYkNvcmUpL3dlYmF1ZGlvL0RlbGF5Tm9kZS5pZGwgXAotCSQoV2ViQ29yZSkv
d2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5pZGwgXAotCSQoV2ViQ29yZSkvd2ViYXVkaW8v
SmF2YVNjcmlwdEF1ZGlvTm9kZS5pZGwgXAotCSQoV2ViQ29yZSkvd2ViYXVkaW8vTG93UGFzczJG
aWx0ZXJOb2RlLmlkbCBcCi0JJChXZWJDb3JlKS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1Nv
dXJjZU5vZGUuaWRsIFwKLQkkKFdlYkNvcmUpL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRp
b25FdmVudC5pZGwgXAotCSQoV2ViQ29yZSkvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUu
aWRsCisJJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmlkbCBcCisJJChX
ZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyQ2FsbGJhY2suaWRsIFwKKwkkKFdl
YkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlkbCBcCisJJChX
ZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5pZGwgXAorCSQoV2Vi
Q29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5pZGwgXAorCSQoV2Vi
Q29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGwgXAorCSQoV2Vi
Q29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0dhaW4uaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0xpc3RlbmVyLmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvTm9kZS5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmlk
bCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50Lmlk
bCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5pZGwgXAor
CSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmlkbCBcCisJJChX
ZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsIFwKKwkkKFdlYkNvcmUp
L01vZHVsZXMvd2ViYXVkaW8vRGVsYXlOb2RlLmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL3dl
YmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvd2Vi
YXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJh
dWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVk
aW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVz
L3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5pZGwgXAorCSQoV2ViQ29yZSkv
TW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5pZGwKIGVuZGlmCiAKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC04MTQsNiArODE0LDMzIEBACiAgICAgICAgICAg
ICAnTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25FdmVudC5pZGwnLAogICAgICAgICAg
ICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uUmVzdWx0LmlkbCcsCiAgICAgICAg
ICAgICAnTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0LmlkbCcsCisg
ICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5pZGwnLAorICAgICAgICAg
ICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFjay5pZGwnLAorICAgICAgICAg
ICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlkbCcsCisgICAgICAg
ICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuaWRsJywKKyAgICAgICAg
ICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmlkbCcsCisgICAgICAg
ICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsJywKKyAgICAgICAgICAgICdN
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmlkbCcsCisgICAgICAgICAgICAn
TW9kdWxlcy93ZWJhdWRpby9BdWRpb0dhaW4uaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvTGlzdGVuZXIuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
Tm9kZS5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2Rl
LmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmlkbCcsCisg
ICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5pZGwnLAor
ICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmlkbCcsCisgICAg
ICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmlkbCcsCisgICAgICAg
ICAgICAnTW9kdWxlcy93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmlkbCcsCisgICAgICAgICAgICAn
TW9kdWxlcy93ZWJhdWRpby9EZWxheU5vZGUuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dl
YmF1ZGlvL0RPTVdpbmRvd1dlYkF1ZGlvLmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJh
dWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy93
ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy93
ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy93
ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dl
YmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5pZGwnLAorICAgICAgICAgICAgJ01v
ZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmlkbCcsCisgICAgICAg
ICAgICAnTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5pZGwnLAorICAgICAg
ICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuaWRsJywKICAgICAgICAgICAg
ICdNb2R1bGVzL3dlYmRhdGFiYXNlL0RPTVdpbmRvd1NRTERhdGFiYXNlLmlkbCcsCiAgICAgICAg
ICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5pZGwnLAogICAgICAgICAgICAgJ01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDYWxsYmFjay5pZGwnLApAQCAtMTEwNywzMyArMTEz
NCw2IEBACiAgICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdlSW5mb0Vycm9yQ2FsbGJhY2suaWRs
JywKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VJbmZvUXVvdGFDYWxsYmFjay5pZGwnLAog
ICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZUluZm9Vc2FnZUNhbGxiYWNrLmlkbCcsCi0gICAg
ICAgICAgICAnd2ViYXVkaW8vQXVkaW9CdWZmZXIuaWRsJywKLSAgICAgICAgICAgICd3ZWJhdWRp
by9BdWRpb0J1ZmZlckNhbGxiYWNrLmlkbCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9C
dWZmZXJTb3VyY2VOb2RlLmlkbCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9DaGFubmVs
TWVyZ2VyLmlkbCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIu
aWRsJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsJywKLSAgICAgICAg
ICAgICd3ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGwnLAotICAgICAgICAgICAgJ3dl
YmF1ZGlvL0F1ZGlvR2Fpbi5pZGwnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvR2Fpbk5v
ZGUuaWRsJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmlkbCcsCi0gICAg
ICAgICAgICAnd2ViYXVkaW8vQXVkaW9Ob2RlLmlkbCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8v
QXVkaW9QYW5uZXJOb2RlLmlkbCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9QYXJhbS5p
ZGwnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmlkbCcsCi0g
ICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmlkbCcsCi0gICAgICAgICAgICAn
d2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5pZGwnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0Nv
bnZvbHZlck5vZGUuaWRsJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9EZWxheU5vZGUuaWRsJywK
LSAgICAgICAgICAgICd3ZWJhdWRpby9ET01XaW5kb3dXZWJBdWRpby5pZGwnLAotICAgICAgICAg
ICAgJ3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaWRsJywKLSAgICAgICAgICAgICd3
ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmlkbCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8v
SmF2YVNjcmlwdEF1ZGlvTm9kZS5pZGwnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0xvd1Bhc3My
RmlsdGVyTm9kZS5pZGwnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZS5pZGwnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBs
ZXRpb25FdmVudC5pZGwnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJO
b2RlLmlkbCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuaWRsJywKICAg
ICAgICAgICAgICd3b3JrZXJzL0Fic3RyYWN0V29ya2VyLmlkbCcsCiAgICAgICAgICAgICAnd29y
a2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmlkbCcsCiAgICAgICAgICAgICAnd29ya2Vycy9T
aGFyZWRXb3JrZXIuaWRsJywKQEAgLTE1MDgsNiArMTUwOCw4MyBAQAogICAgICAgICAgICAgJ01v
ZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uUmVzdWx0LmgnLAogICAgICAgICAgICAgJ01v
ZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdC5jcHAnLAogICAgICAgICAg
ICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdC5oJywKKyAgICAg
ICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcCcsCisg
ICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oJywK
KyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcCcsCisgICAgICAg
ICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5oJywKKyAgICAgICAgICAgICdNb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyQ2FsbGJhY2suaCcsCisgICAgICAgICAgICAnTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuY3BwJywKKyAgICAgICAgICAgICdNb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5oJywKKyAgICAgICAgICAgICdNb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5jcHAnLAorICAgICAgICAgICAgJ01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRp
by9BdWRpb0NvbnRleHQuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rl
c3RpbmF0aW9uTm9kZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9E
ZXN0aW5hdGlvbk5vZGUuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0dh
aW4uaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmNwcCcs
CisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmgnLAorICAgICAg
ICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5jcHAnLAorICAgICAgICAgICAg
J01vZHVsZXMvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5oJywKKyAgICAgICAgICAgICdNb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9Ob2RlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlSW5w
dXQuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0Lmgn
LAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmNwcCcsCisg
ICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuaCcsCisgICAgICAg
ICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuY3BwJywKKyAgICAgICAgICAg
ICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oJywKKyAgICAgICAgICAgICdNb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvUGFyYW0uaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Bh
cmFtVGltZWxpbmUuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFy
YW1UaW1lbGluZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vz
c2luZ0V2ZW50LmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Byb2Nl
c3NpbmdFdmVudC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU291cmNl
Tm9kZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVy
LmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5o
JywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5jcHAnLAor
ICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmgnLAorICAgICAg
ICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5jcHAnLAorICAgICAgICAg
ICAgJ01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5oJywKKyAgICAgICAgICAgICdN
b2R1bGVzL3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5jcHAnLAorICAgICAgICAgICAgJ01vZHVs
ZXMvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2Vi
YXVkaW8vQ29udm9sdmVyTm9kZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8v
Q29udm9sdmVyTm9kZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0RlZmF1bHRB
dWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8v
RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2Vi
YXVkaW8vRGVsYXlEU1BLZXJuZWwuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlv
L0RlbGF5RFNQS2VybmVsLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vRGVsYXlO
b2RlLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9EZWxheU5vZGUuaCcsCisg
ICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9EZWxheVByb2Nlc3Nvci5jcHAnLAorICAgICAg
ICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuaCcsCisgICAgICAgICAgICAn
TW9kdWxlcy93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcCcsCisgICAgICAgICAg
ICAnTW9kdWxlcy93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmgnLAorICAgICAgICAg
ICAgJ01vZHVsZXMvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5jcHAnLAorICAgICAgICAg
ICAgJ01vZHVsZXMvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5oJywKKyAgICAgICAgICAg
ICdNb2R1bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuY3BwJywKKyAgICAgICAgICAg
ICdNb2R1bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaCcsCisgICAgICAgICAgICAn
TW9kdWxlcy93ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuY3BwJywKKyAgICAgICAgICAgICdN
b2R1bGVzL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5oJywKKyAgICAgICAgICAgICdNb2R1
bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAnLAorICAgICAgICAg
ICAgJ01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmgnLAorICAg
ICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmNw
cCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9u
RXZlbnQuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0
aW5hdGlvbk5vZGUuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVB
dWRpb0Rlc3RpbmF0aW9uTm9kZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL1Jl
YWx0aW1lQW5hbHlzZXIuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL1JlYWx0
aW1lQW5hbHlzZXIuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFu
YWx5c2VyTm9kZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVB
bmFseXNlck5vZGUuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVy
RFNQS2VybmVsLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVy
RFNQS2VybmVsLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlck5v
ZGUuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmgn
LAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5jcHAn
LAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5oJywK
ICAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2UuY3BwJywK
ICAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmNw
cCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9DaGFuZ2VWZXJzaW9uV3JhcHBl
ci5oJywKQEAgLTQ4NDYsODMgKzQ5MjMsNiBAQAogICAgICAgICAgICAgJ3N0b3JhZ2Uvd2luY2Uv
RGF0YWJhc2VUaHJlYWRXaW5DRS5oJywKICAgICAgICAgICAgICdzdG9yYWdlL3dpbmNlL1N0b3Jh
Z2VUaHJlYWRXaW5DRS5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2Uvd2luY2UvU3RvcmFnZVRo
cmVhZFdpbkNFLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JO
b2RlLmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUu
aCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwJywKLSAgICAgICAgICAg
ICd3ZWJhdWRpby9BdWRpb0J1ZmZlci5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0J1
ZmZlckNhbGxiYWNrLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNl
Tm9kZS5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5o
JywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuY3BwJywKLSAgICAg
ICAgICAgICd3ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuaCcsCi0gICAgICAgICAgICAnd2Vi
YXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9B
dWRpb0NoYW5uZWxTcGxpdHRlci5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0NvbnRl
eHQuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0NvbnRleHQuaCcsCi0gICAgICAg
ICAgICAnd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwJywKLSAgICAgICAgICAgICd3
ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9B
dWRpb0dhaW4uaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5jcHAnLAot
ICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaCcsCi0gICAgICAgICAgICAnd2Vi
YXVkaW8vQXVkaW9MaXN0ZW5lci5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvTGlz
dGVuZXIuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcCcsCi0gICAgICAg
ICAgICAnd2ViYXVkaW8vQXVkaW9Ob2RlLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlv
Tm9kZUlucHV0LmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuaCcs
Ci0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmNwcCcsCi0gICAgICAgICAg
ICAnd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1
ZGlvUGFubmVyTm9kZS5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9k
ZS5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb1BhcmFtLmNwcCcsCi0gICAgICAgICAg
ICAnd2ViYXVkaW8vQXVkaW9QYXJhbS5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb1Bh
cmFtVGltZWxpbmUuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxp
bmUuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuY3BwJywK
LSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5oJywKLSAgICAgICAg
ICAgICd3ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8v
QXN5bmNBdWRpb0RlY29kZXIuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9Bc3luY0F1ZGlv
RGVjb2Rlci5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuY3BwJywK
LSAgICAgICAgICAgICd3ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuaCcsCi0gICAgICAgICAgICAn
d2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0Jp
cXVhZEZpbHRlck5vZGUuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29y
LmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmgnLAotICAgICAg
ICAgICAgJ3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRp
by9Db252b2x2ZXJOb2RlLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rl
c3RpbmF0aW9uTm9kZS5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rl
c3RpbmF0aW9uTm9kZS5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9EZWxheURTUEtlcm5lbC5j
cHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0RlbGF5RFNQS2VybmVsLmgnLAotICAgICAgICAg
ICAgJ3dlYmF1ZGlvL0RlbGF5Tm9kZS5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0RlbGF5
Tm9kZS5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9EZWxheVByb2Nlc3Nvci5jcHAnLAotICAg
ICAgICAgICAgJ3dlYmF1ZGlvL0RlbGF5UHJvY2Vzc29yLmgnLAotICAgICAgICAgICAgJ3dlYmF1
ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9E
eW5hbWljc0NvbXByZXNzb3JOb2RlLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0hpZ2hQYXNz
MkZpbHRlck5vZGUuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJO
b2RlLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuY3BwJywK
LSAgICAgICAgICAgICd3ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmgnLAotICAgICAgICAg
ICAgJ3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1
ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9NZWRpYUVs
ZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9NZWRpYUVs
ZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vT2ZmbGluZUF1
ZGlvQ29tcGxldGlvbkV2ZW50LmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vT2ZmbGluZUF1
ZGlvQ29tcGxldGlvbkV2ZW50LmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL09mZmxpbmVBdWRp
b0Rlc3RpbmF0aW9uTm9kZS5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL09mZmxpbmVBdWRp
b0Rlc3RpbmF0aW9uTm9kZS5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9SZWFsdGltZUFuYWx5
c2VyLmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5oJywKLSAg
ICAgICAgICAgICd3ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5jcHAnLAotICAgICAgICAg
ICAgJ3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmgnLAotICAgICAgICAgICAgJ3dlYmF1
ZGlvL1dhdmVTaGFwZXJEU1BLZXJuZWwuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9XYXZl
U2hhcGVyRFNQS2VybmVsLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2Rl
LmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuaCcsCi0gICAgICAg
ICAgICAnd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5jcHAnLAotICAgICAgICAgICAgJ3dl
YmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuaCcsCiAgICAgICAgICAgICAnd29ya2Vycy9BYnN0
cmFjdFdvcmtlci5jcHAnLAogICAgICAgICAgICAgJ3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuaCcs
CiAgICAgICAgICAgICAnd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmNwcCcsCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnByaQkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAgSU5DTFVERVBBVEggKz0gXAog
ICAgICQkU09VUkNFX0RJUi9Nb2R1bGVzL2ZpbGVzeXN0ZW0gXAogICAgICQkU09VUkNFX0RJUi9N
b2R1bGVzL2dlb2xvY2F0aW9uIFwKICAgICAkJFNPVVJDRV9ESVIvTW9kdWxlcy9pbmRleGVkZGIg
XAorICAgICQkU09VUkNFX0RJUi9Nb2R1bGVzL3dlYmF1ZGlvIFwKICAgICAkJFNPVVJDRV9ESVIv
TW9kdWxlcy93ZWJkYXRhYmFzZSBcCiAgICAgJCRTT1VSQ0VfRElSL01vZHVsZXMvd2Vic29ja2V0
cyBcCiAgICAgJCRTT1VSQ0VfRElSL2FjY2Vzc2liaWxpdHkgXApAQCAtODIsNyArODMsNiBAQCBJ
TkNMVURFUEFUSCArPSBcCiAgICAgJCRTT1VSQ0VfRElSL3N2Zy9ncmFwaGljcy9maWx0ZXJzIFwK
ICAgICAkJFNPVVJDRV9ESVIvc3ZnL3Byb3BlcnRpZXMgXAogICAgICQkU09VUkNFX0RJUi90ZXN0
aW5nIFwKLSAgICAkJFNPVVJDRV9ESVIvd2ViYXVkaW8gXAogICAgICQkU09VUkNFX0RJUi93ZWJz
b2NrZXRzIFwKICAgICAkJFNPVVJDRV9ESVIvd29ya2VycyBcCiAgICAgJCRTT1VSQ0VfRElSL3ht
bCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkocmV2aXNpb24g
MTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAKICAgICAgICcuLi9Nb2R1bGVzL2luZGV4ZWRkYics
CiAgICAgICAnLi4vTW9kdWxlcy9tZWRpYXN0cmVhbScsCiAgICAgICAnLi4vTW9kdWxlcy9zcGVl
Y2gnLAorICAgICAgJy4uL01vZHVsZXMvd2ViYXVkaW8nLAogICAgICAgJy4uL01vZHVsZXMvd2Vi
ZGF0YWJhc2UnLAogICAgICAgJy4uL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0nLAogICAg
ICAgJy4uL01vZHVsZXMvd2Vic29ja2V0cycsCkBAIC0xNDAsNyArMTQxLDYgQEAKICAgICAgICcu
Li9zdmcvZ3JhcGhpY3MvZmlsdGVycycsCiAgICAgICAnLi4vc3ZnL3Byb3BlcnRpZXMnLAogICAg
ICAgJy4uLy4uL1RoaXJkUGFydHkvZ2x1JywKLSAgICAgICcuLi93ZWJhdWRpbycsCiAgICAgICAn
Li4vd29ya2VycycsCiAgICAgICAnLi4veG1sJywKICAgICAgICcuLi94bWwvcGFyc2VyJywKQEAg
LTk3OSw2ICs5NzksNyBAQAogICAgICAgICAgICAgICAnLS1pbmNsdWRlJywgJy4uL01vZHVsZXMv
ZmlsZXN5c3RlbScsCiAgICAgICAgICAgICAgICctLWluY2x1ZGUnLCAnLi4vTW9kdWxlcy9pbmRl
eGVkZGInLAogICAgICAgICAgICAgICAnLS1pbmNsdWRlJywgJy4uL01vZHVsZXMvbWVkaWFzdHJl
YW0nLAorICAgICAgICAgICAgICAnLS1pbmNsdWRlJywgJy4uL01vZHVsZXMvd2ViYXVkaW8nLAog
ICAgICAgICAgICAgICAnLS1pbmNsdWRlJywgJy4uL01vZHVsZXMvd2ViZGF0YWJhc2UnLAogICAg
ICAgICAgICAgICAnLS1pbmNsdWRlJywgJy4uL2NzcycsCiAgICAgICAgICAgICAgICctLWluY2x1
ZGUnLCAnLi4vZG9tJywKQEAgLTk5MCw3ICs5OTEsNiBAQAogICAgICAgICAgICAgICAnLS1pbmNs
dWRlJywgJy4uL3N0b3JhZ2UnLAogICAgICAgICAgICAgICAnLS1pbmNsdWRlJywgJy4uL3N2Zycs
CiAgICAgICAgICAgICAgICctLWluY2x1ZGUnLCAnLi4vdGVzdGluZycsCi0gICAgICAgICAgICAg
ICctLWluY2x1ZGUnLCAnLi4vd2ViYXVkaW8nLAogICAgICAgICAgICAgICAnLS1pbmNsdWRlJywg
Jy4uL3dvcmtlcnMnLAogICAgICAgICAgICAgICAnLS1pbmNsdWRlJywgJy4uL3htbCcsCiAgICAg
ICAgICAgICBdLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMTI1Nyw3
ICsyMTI1Nyw3IEBACiAJCQkJRkQ3RjI5OEYxM0Q0QzBDQjAwQUQ5NTM1IC8qIFdhdmVTaGFwZXJQ
cm9jZXNzb3IuY3BwICovLAogCQkJCUZEN0YyOTkwMTNENEMwQ0IwMEFEOTUzNSAvKiBXYXZlU2hh
cGVyUHJvY2Vzc29yLmggKi8sCiAJCQkpOwotCQkJcGF0aCA9IHdlYmF1ZGlvOworCQkJcGF0aCA9
IE1vZHVsZXMvd2ViYXVkaW87CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwogCQlG
RDMxNjA0MDEyQjAyNkEzMDBDMUEzNTkgLyogYXVkaW8gKi8gPSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwCShyZXZpc2lvbiAxMTEyMDgp
CisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiQXN5bmNBdWRpb0RlY29k
ZXIuaCIKLQotI2luY2x1ZGUgIkF1ZGlvQnVmZmVyLmgiCi0jaW5jbHVkZSAiQXVkaW9CdWZmZXJD
YWxsYmFjay5oIgotI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlci5oPgotI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQXN5bmNBdWRpb0RlY29kZXI6OkFz
eW5jQXVkaW9EZWNvZGVyKCkKLXsKLSAgICAvLyBTdGFydCB3b3JrZXIgdGhyZWFkLgotICAgIE11
dGV4TG9ja2VyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKLSAgICBtX3RocmVhZElEID0g
Y3JlYXRlVGhyZWFkKEFzeW5jQXVkaW9EZWNvZGVyOjp0aHJlYWRFbnRyeSwgdGhpcywgIkF1ZGlv
IERlY29kZXIiKTsKLX0KLQotQXN5bmNBdWRpb0RlY29kZXI6On5Bc3luY0F1ZGlvRGVjb2Rlcigp
Ci17Ci0gICAgbV9xdWV1ZS5raWxsKCk7Ci0gICAgCi0gICAgLy8gU3RvcCB0aHJlYWQuCi0gICAg
d2FpdEZvclRocmVhZENvbXBsZXRpb24obV90aHJlYWRJRCk7Ci0gICAgbV90aHJlYWRJRCA9IDA7
Ci19Ci0KLXZvaWQgQXN5bmNBdWRpb0RlY29kZXI6OmRlY29kZUFzeW5jKEFycmF5QnVmZmVyKiBh
dWRpb0RhdGEsIGZsb2F0IHNhbXBsZVJhdGUsIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFj
az4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IGVycm9y
Q2FsbGJhY2spCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoYXVk
aW9EYXRhKTsKLSAgICBpZiAoIWF1ZGlvRGF0YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgT3du
UHRyPERlY29kaW5nVGFzaz4gZGVjb2RpbmdUYXNrID0gRGVjb2RpbmdUYXNrOjpjcmVhdGUoYXVk
aW9EYXRhLCBzYW1wbGVSYXRlLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spOwotICAg
IG1fcXVldWUuYXBwZW5kKGRlY29kaW5nVGFzay5yZWxlYXNlKCkpOyAvLyBub3RlIHRoYXQgb3du
ZXJzaGlwIG9mIHRoZSB0YXNrIGlzIGVmZmVjdGl2ZWx5IHRha2VuIGJ5IHRoZSBxdWV1ZS4KLX0K
LQotLy8gQXN5bmNocm9ub3VzbHkgZGVjb2RlIGluIHRoaXMgdGhyZWFkLgotdm9pZCBBc3luY0F1
ZGlvRGVjb2Rlcjo6dGhyZWFkRW50cnkodm9pZCogdGhyZWFkRGF0YSkKLXsKLSAgICBBU1NFUlQo
dGhyZWFkRGF0YSk7Ci0gICAgQXN5bmNBdWRpb0RlY29kZXIqIGRlY29kZXIgPSByZWludGVycHJl
dF9jYXN0PEFzeW5jQXVkaW9EZWNvZGVyKj4odGhyZWFkRGF0YSk7Ci0gICAgZGVjb2Rlci0+cnVu
TG9vcCgpOwotfQotCi12b2lkIEFzeW5jQXVkaW9EZWNvZGVyOjpydW5Mb29wKCkKLXsKLSAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIHsKLSAgICAgICAgLy8gV2FpdCBmb3IgdW50
aWwgd2UgaGF2ZSBtX3RocmVhZElEIGVzdGFibGlzaGVkIGJlZm9yZSBzdGFydGluZyB0aGUgcnVu
IGxvb3AuCi0gICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsK
LSAgICB9Ci0KLSAgICAvLyBLZWVwIHJ1bm5pbmcgZGVjb2RpbmcgdGFza3MgdW50aWwgd2UncmUg
a2lsbGVkLgotICAgIHdoaWxlIChPd25QdHI8RGVjb2RpbmdUYXNrPiBkZWNvZGluZ1Rhc2sgPSBt
X3F1ZXVlLndhaXRGb3JNZXNzYWdlKCkpIHsKLSAgICAgICAgLy8gTGV0IHRoZSB0YXNrIHRha2Ug
Y2FyZSBvZiBpdHMgb3duIG93bmVyc2hpcC4KLSAgICAgICAgLy8gU2VlIERlY29kaW5nVGFzazo6
bm90aWZ5Q29tcGxldGUoKSBmb3IgY2xlYW51cC4KLSAgICAgICAgZGVjb2RpbmdUYXNrLmxlYWtQ
dHIoKS0+ZGVjb2RlKCk7Ci0gICAgfQotfQotCi1QYXNzT3duUHRyPEFzeW5jQXVkaW9EZWNvZGVy
OjpEZWNvZGluZ1Rhc2s+IEFzeW5jQXVkaW9EZWNvZGVyOjpEZWNvZGluZ1Rhc2s6OmNyZWF0ZShB
cnJheUJ1ZmZlciogYXVkaW9EYXRhLCBmbG9hdCBzYW1wbGVSYXRlLCBQYXNzUmVmUHRyPEF1ZGlv
QnVmZmVyQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNh
bGxiYWNrPiBlcnJvckNhbGxiYWNrKQotewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVjb2Rp
bmdUYXNrKGF1ZGlvRGF0YSwgc2FtcGxlUmF0ZSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxi
YWNrKSk7Ci19Ci0KLUFzeW5jQXVkaW9EZWNvZGVyOjpEZWNvZGluZ1Rhc2s6OkRlY29kaW5nVGFz
ayhBcnJheUJ1ZmZlciogYXVkaW9EYXRhLCBmbG9hdCBzYW1wbGVSYXRlLCBQYXNzUmVmUHRyPEF1
ZGlvQnVmZmVyQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxBdWRpb0J1ZmZl
ckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQotICAgIDogbV9hdWRpb0RhdGEoYXVkaW9EYXRhKQot
ICAgICwgbV9zYW1wbGVSYXRlKHNhbXBsZVJhdGUpCi0gICAgLCBtX3N1Y2Nlc3NDYWxsYmFjayhz
dWNjZXNzQ2FsbGJhY2spCi0gICAgLCBtX2Vycm9yQ2FsbGJhY2soZXJyb3JDYWxsYmFjaykKLXsK
LX0KLQotdm9pZCBBc3luY0F1ZGlvRGVjb2Rlcjo6RGVjb2RpbmdUYXNrOjpkZWNvZGUoKQotewot
ICAgIEFTU0VSVChtX2F1ZGlvRGF0YS5nZXQoKSk7Ci0gICAgaWYgKCFtX2F1ZGlvRGF0YS5nZXQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRG8gdGhlIGFjdHVhbCBkZWNvZGluZyBhbmQg
aW52b2tlIHRoZSBjYWxsYmFjay4KLSAgICBtX2F1ZGlvQnVmZmVyID0gQXVkaW9CdWZmZXI6OmNy
ZWF0ZUZyb21BdWRpb0ZpbGVEYXRhKG1fYXVkaW9EYXRhLT5kYXRhKCksIG1fYXVkaW9EYXRhLT5i
eXRlTGVuZ3RoKCksIGZhbHNlLCBzYW1wbGVSYXRlKCkpOwotICAgIAotICAgIC8vIERlY29kaW5n
IGlzIGZpbmlzaGVkLCBidXQgd2UgbmVlZCB0byBkbyB0aGUgY2FsbGJhY2tzIG9uIHRoZSBtYWlu
IHRocmVhZC4KLSAgICBjYWxsT25NYWluVGhyZWFkKG5vdGlmeUNvbXBsZXRlRGlzcGF0Y2gsIHRo
aXMpOwotfQotCi12b2lkIEFzeW5jQXVkaW9EZWNvZGVyOjpEZWNvZGluZ1Rhc2s6Om5vdGlmeUNv
bXBsZXRlRGlzcGF0Y2godm9pZCogdXNlckRhdGEpCi17Ci0gICAgQXN5bmNBdWRpb0RlY29kZXI6
OkRlY29kaW5nVGFzayogdGFzayA9IHJlaW50ZXJwcmV0X2Nhc3Q8QXN5bmNBdWRpb0RlY29kZXI6
OkRlY29kaW5nVGFzayo+KHVzZXJEYXRhKTsKLSAgICBBU1NFUlQodGFzayk7Ci0gICAgaWYgKCF0
YXNrKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0YXNrLT5ub3RpZnlDb21wbGV0ZSgpOwotfQot
Ci12b2lkIEFzeW5jQXVkaW9EZWNvZGVyOjpEZWNvZGluZ1Rhc2s6Om5vdGlmeUNvbXBsZXRlKCkK
LXsKLSAgICBpZiAoYXVkaW9CdWZmZXIoKSAmJiBzdWNjZXNzQ2FsbGJhY2soKSkKLSAgICAgICAg
c3VjY2Vzc0NhbGxiYWNrKCktPmhhbmRsZUV2ZW50KGF1ZGlvQnVmZmVyKCkpOwotICAgIGVsc2Ug
aWYgKGVycm9yQ2FsbGJhY2soKSkKLSAgICAgICAgZXJyb3JDYWxsYmFjaygpLT5oYW5kbGVFdmVu
dChhdWRpb0J1ZmZlcigpKTsKLQotICAgIC8vIE91ciBvd25lcnNoaXAgd2FzIGdpdmVuIHVwIGlu
IEFzeW5jQXVkaW9EZWNvZGVyOjpydW5Mb29wKCkKLSAgICAvLyBNYWtlIHN1cmUgdG8gY2xlYW4g
dXAgaGVyZS4KLSAgICBkZWxldGUgdGhpczsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBc3luY0F1ZGlvRGVjb2Rlcl9oCi0jZGVm
aW5lIEFzeW5jQXVkaW9EZWNvZGVyX2gKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5j
bHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1
ZGlvQnVmZmVyOwotY2xhc3MgQXVkaW9CdWZmZXJDYWxsYmFjazsKLQotLy8gQXN5bmNBdWRpb0Rl
Y29kZXIgYXN5bmNocm9ub3VzbHkgZGVjb2RlcyBhdWRpbyBmaWxlIGRhdGEgZnJvbSBhbiBBcnJh
eUJ1ZmZlciBpbiBhIHdvcmtlciB0aHJlYWQuCi0vLyBVcG9uIHN1Y2Nlc3NmdWwgZGVjb2Rpbmcs
IGEgY29tcGxldGlvbiBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgd2l0aCB0aGUgZGVjb2RlZCBQ
Q00gZGF0YSBpbiBhbiBBdWRpb0J1ZmZlci4KLQotY2xhc3MgQXN5bmNBdWRpb0RlY29kZXIgewot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFzeW5jQXVkaW9EZWNvZGVyKTsKLXB1YmxpYzoKLSAg
ICBBc3luY0F1ZGlvRGVjb2RlcigpOwotICAgIH5Bc3luY0F1ZGlvRGVjb2RlcigpOwotCi0gICAg
Ly8gTXVzdCBiZSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLgotICAgIHZvaWQgZGVjb2RlQXN5
bmMoQXJyYXlCdWZmZXIqIGF1ZGlvRGF0YSwgZmxvYXQgc2FtcGxlUmF0ZSwgUGFzc1JlZlB0cjxB
dWRpb0J1ZmZlckNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8QXVkaW9CdWZm
ZXJDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayk7Ci0KLXByaXZhdGU6Ci0gICAgY2xhc3MgRGVjb2Rp
bmdUYXNrIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVjb2RpbmdUYXNrKTsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPERlY29kaW5nVGFzaz4gY3JlYXRl
KEFycmF5QnVmZmVyKiBhdWRpb0RhdGEsIGZsb2F0IHNhbXBsZVJhdGUsIFBhc3NSZWZQdHI8QXVk
aW9CdWZmZXJDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVy
Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spOwotCi0gICAgICAgIHZvaWQgZGVjb2RlKCk7Ci0gICAg
ICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIERlY29kaW5nVGFzayhBcnJheUJ1ZmZlciogYXVk
aW9EYXRhLCBmbG9hdCBzYW1wbGVSYXRlLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+
IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBlcnJvckNh
bGxiYWNrKTsKLQotICAgICAgICBBcnJheUJ1ZmZlciogYXVkaW9EYXRhKCkgeyByZXR1cm4gbV9h
dWRpb0RhdGEuZ2V0KCk7IH0KLSAgICAgICAgZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2FtcGxlUmF0ZTsgfQotICAgICAgICBBdWRpb0J1ZmZlckNhbGxiYWNrKiBzdWNjZXNz
Q2FsbGJhY2soKSB7IHJldHVybiBtX3N1Y2Nlc3NDYWxsYmFjay5nZXQoKTsgfQotICAgICAgICBB
dWRpb0J1ZmZlckNhbGxiYWNrKiBlcnJvckNhbGxiYWNrKCkgeyByZXR1cm4gbV9lcnJvckNhbGxi
YWNrLmdldCgpOyB9Ci0gICAgICAgIEF1ZGlvQnVmZmVyKiBhdWRpb0J1ZmZlcigpIHsgcmV0dXJu
IG1fYXVkaW9CdWZmZXIuZ2V0KCk7IH0KLQotICAgICAgICBzdGF0aWMgdm9pZCBub3RpZnlDb21w
bGV0ZURpc3BhdGNoKHZvaWQqIHVzZXJEYXRhKTsKLSAgICAgICAgdm9pZCBub3RpZnlDb21wbGV0
ZSgpOwotCi0gICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbV9hdWRpb0RhdGE7Ci0gICAgICAg
IGZsb2F0IG1fc2FtcGxlUmF0ZTsKLSAgICAgICAgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+
IG1fc3VjY2Vzc0NhbGxiYWNrOwotICAgICAgICBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4g
bV9lcnJvckNhbGxiYWNrOwotICAgICAgICBSZWZQdHI8QXVkaW9CdWZmZXI+IG1fYXVkaW9CdWZm
ZXI7Ci0gICAgfTsKLSAgICAKLSAgICBzdGF0aWMgdm9pZCB0aHJlYWRFbnRyeSh2b2lkKiB0aHJl
YWREYXRhKTsKLSAgICB2b2lkIHJ1bkxvb3AoKTsKLQotICAgIFdURjo6VGhyZWFkSWRlbnRpZmll
ciBtX3RocmVhZElEOwotICAgIE11dGV4IG1fdGhyZWFkQ3JlYXRpb25NdXRleDsKLSAgICBNZXNz
YWdlUXVldWU8RGVjb2RpbmdUYXNrPiBtX3F1ZXVlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gQXN5bmNBdWRpb0RlY29kZXJfaApJbmRleDogU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcAkocmV2aXNp
b24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nv
ck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1MSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUg
IkF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmgiCi0KLSNpbmNsdWRlICJBdWRpb0J1cy5oIgotI2lu
Y2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0LmgiCi0jaW5j
bHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCi0jaW5jbHVkZSAiQXVkaW9Qcm9jZXNzb3IuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZTo6QXVkaW9CYXNp
Y1Byb2Nlc3Nvck5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQot
ICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCi17Ci0gICAgYWRkSW5wdXQoYWRv
cHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7Ci0gICAgYWRkT3V0cHV0KGFkb3B0UHRy
KG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywgMSkpKTsKLQotICAgIC8vIFRoZSBzdWJjbGFzcyBt
dXN0IGNyZWF0ZSBtX3Byb2Nlc3Nvci4KLX0KLQotdm9pZCBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9k
ZTo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgaWYgKGlzSW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKHByb2Nlc3NvcigpKTsKLSAgICBwcm9jZXNzb3IoKS0+aW5pdGlh
bGl6ZSgpOwotCi0gICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgQXVkaW9C
YXNpY1Byb2Nlc3Nvck5vZGU6OnVuaW5pdGlhbGl6ZSgpCi17Ci0gICAgaWYgKCFpc0luaXRpYWxp
emVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChwcm9jZXNzb3IoKSk7Ci0gICAg
cHJvY2Vzc29yKCktPnVuaW5pdGlhbGl6ZSgpOwotCi0gICAgQXVkaW9Ob2RlOjp1bmluaXRpYWxp
emUoKTsKLX0KLQotdm9pZCBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZTo6cHJvY2VzcyhzaXplX3Qg
ZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIEF1ZGlvQnVzKiBkZXN0aW5hdGlvbkJ1cyA9IG91dHB1
dCgwKS0+YnVzKCk7Ci0gICAgCi0gICAgaWYgKCFpc0luaXRpYWxpemVkKCkgfHwgIXByb2Nlc3Nv
cigpKQotICAgICAgICBkZXN0aW5hdGlvbkJ1cy0+emVybygpOwotICAgIGVsc2UgewotICAgICAg
ICBBdWRpb0J1cyogc291cmNlQnVzID0gaW5wdXQoMCktPmJ1cygpOwotCi0gICAgICAgIC8vIEZJ
WE1FOiBpZiB3ZSB0YWtlICJ0YWlsIHRpbWUiIGludG8gYWNjb3VudCwgdGhlbiB3ZSBjYW4gYXZv
aWQgY2FsbGluZyBwcm9jZXNzb3IoKS0+cHJvY2VzcygpIG9uY2UgdGhlIHRhaWwgZGllcyBkb3du
LgotICAgICAgICBpZiAoIWlucHV0KDApLT5pc0Nvbm5lY3RlZCgpKQotICAgICAgICAgICAgc291
cmNlQnVzLT56ZXJvKCk7Ci0KLSAgICAgICAgcHJvY2Vzc29yKCktPnByb2Nlc3Moc291cmNlQnVz
LCBkZXN0aW5hdGlvbkJ1cywgZnJhbWVzVG9Qcm9jZXNzKTsgIAotICAgIH0KLX0KLQotLy8gTmlj
ZSBvcHRpbWl6YXRpb24gaW4gdGhlIHZlcnkgY29tbW9uIGNhc2UgYWxsb3dpbmcgZm9yICJpbi1w
bGFjZSIgcHJvY2Vzc2luZwotdm9pZCBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZTo6cHVsbElucHV0
cyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIC8vIFJlbmRlciBpbnB1dCBzdHJlYW0g
LSBzdWdnZXN0IHRvIHRoZSBpbnB1dCB0byByZW5kZXIgZGlyZWN0bHkgaW50byBvdXRwdXQgYnVz
IGZvciBpbi1wbGFjZSBwcm9jZXNzaW5nIGluIHByb2Nlc3MoKSBpZiBwb3NzaWJsZS4KLSAgICBp
bnB1dCgwKS0+cHVsbChvdXRwdXQoMCktPmJ1cygpLCBmcmFtZXNUb1Byb2Nlc3MpOwotfQotCi12
b2lkIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlOjpyZXNldCgpCi17Ci0gICAgaWYgKHByb2Nlc3Nv
cigpKQotICAgICAgICBwcm9jZXNzb3IoKS0+cmVzZXQoKTsKLX0KLQotLy8gQXMgc29vbiBhcyB3
ZSBrbm93IHRoZSBjaGFubmVsIGNvdW50IG9mIG91ciBpbnB1dCwgd2UgY2FuIGxhemlseSBpbml0
aWFsaXplLgotLy8gU29tZXRpbWVzIHRoaXMgbWF5IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSB3
aXRoIGRpZmZlcmVudCBjaGFubmVsIGNvdW50cywgaW4gd2hpY2ggY2FzZSB3ZSBtdXN0IHNhZmVs
eQotLy8gdW5pbml0aWFsaXplIGFuZCB0aGVuIHJlLWluaXRpYWxpemUgd2l0aCB0aGUgbmV3IGNo
YW5uZWwgY291bnQuCi12b2lkIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlOjpjaGVja051bWJlck9m
Q2hhbm5lbHNGb3JJbnB1dChBdWRpb05vZGVJbnB1dCogaW5wdXQpCi17Ci0gICAgQVNTRVJUKGNv
bnRleHQoKS0+aXNBdWRpb1RocmVhZCgpICYmIGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOwot
ICAgIAotICAgIEFTU0VSVChpbnB1dCA9PSB0aGlzLT5pbnB1dCgwKSk7Ci0gICAgaWYgKGlucHV0
ICE9IHRoaXMtPmlucHV0KDApKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQocHJvY2Vz
c29yKCkpOwotICAgIGlmICghcHJvY2Vzc29yKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVu
c2lnbmVkIG51bWJlck9mQ2hhbm5lbHMgPSBpbnB1dC0+bnVtYmVyT2ZDaGFubmVscygpOwotICAg
IAotICAgIGlmIChpc0luaXRpYWxpemVkKCkgJiYgbnVtYmVyT2ZDaGFubmVscyAhPSBvdXRwdXQo
MCktPm51bWJlck9mQ2hhbm5lbHMoKSkgewotICAgICAgICAvLyBXZSdyZSBhbHJlYWR5IGluaXRp
YWxpemVkIGJ1dCB0aGUgY2hhbm5lbCBjb3VudCBoYXMgY2hhbmdlZC4KLSAgICAgICAgdW5pbml0
aWFsaXplKCk7Ci0gICAgfQotICAgIAotICAgIGlmICghaXNJbml0aWFsaXplZCgpKSB7Ci0gICAg
ICAgIC8vIFRoaXMgd2lsbCBwcm9wYWdhdGUgdGhlIGNoYW5uZWwgY291bnQgdG8gYW55IG5vZGVz
IGNvbm5lY3RlZCBmdXJ0aGVyIGRvd24gdGhlIGNoYWluLi4uCi0gICAgICAgIG91dHB1dCgwKS0+
c2V0TnVtYmVyT2ZDaGFubmVscyhudW1iZXJPZkNoYW5uZWxzKTsKLQotICAgICAgICAvLyBSZS1p
bml0aWFsaXplIHRoZSBwcm9jZXNzb3Igd2l0aCB0aGUgbmV3IGNoYW5uZWwgY291bnQuCi0gICAg
ICAgIHByb2Nlc3NvcigpLT5zZXROdW1iZXJPZkNoYW5uZWxzKG51bWJlck9mQ2hhbm5lbHMpOwot
ICAgICAgICBpbml0aWFsaXplKCk7Ci0gICAgfQotCi0gICAgQXVkaW9Ob2RlOjpjaGVja051bWJl
ck9mQ2hhbm5lbHNGb3JJbnB1dChpbnB1dCk7Ci19Ci0KLXVuc2lnbmVkIEF1ZGlvQmFzaWNQcm9j
ZXNzb3JOb2RlOjpudW1iZXJPZkNoYW5uZWxzKCkKLXsKLSAgICByZXR1cm4gb3V0cHV0KDApLT5u
dW1iZXJPZkNoYW5uZWxzKCk7Ci19Ci0KLWRvdWJsZSBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZTo6
dGFpbFRpbWUoKSBjb25zdAotewotICAgIHJldHVybiBtX3Byb2Nlc3Nvci0+dGFpbFRpbWUoKTsK
LX0KLQotZG91YmxlIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlOjpsYXRlbmN5VGltZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fcHJvY2Vzc29yLT5sYXRlbmN5VGltZSgpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oCShy
ZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Jhc2ljUHJv
Y2Vzc29yTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgot
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlX2gKLSNkZWZpbmUgQXVkaW9CYXNpY1By
b2Nlc3Nvck5vZGVfaAotCi0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCi0jaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb0J1czsKLWNs
YXNzIEF1ZGlvTm9kZUlucHV0OwotY2xhc3MgQXVkaW9Qcm9jZXNzb3I7Ci0gICAgCi0vLyBBdWRp
b0Jhc2ljUHJvY2Vzc29yTm9kZSBpcyBhbiBBdWRpb05vZGUgd2l0aCBvbmUgaW5wdXQgYW5kIG9u
ZSBvdXRwdXQgd2hlcmUgdGhlIGlucHV0IGFuZCBvdXRwdXQgaGF2ZSB0aGUgc2FtZSBudW1iZXIg
b2YgY2hhbm5lbHMuCi1jbGFzcyBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZSA6IHB1YmxpYyBBdWRp
b05vZGUgewotcHVibGljOgotICAgIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlKEF1ZGlvQ29udGV4
dCosIGZsb2F0IHNhbXBsZVJhdGUpOwotCi0gICAgLy8gQXVkaW9Ob2RlCi0gICAgdmlydHVhbCB2
b2lkIHByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgdmlydHVhbCB2b2lkIHB1
bGxJbnB1dHMoc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgdmlydHVhbCB2b2lkIHJlc2V0
KCk7Ci0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdW5p
bml0aWFsaXplKCk7Ci0KLSAgICAvLyBDYWxsZWQgaW4gdGhlIG1haW4gdGhyZWFkIHdoZW4gdGhl
IG51bWJlciBvZiBjaGFubmVscyBmb3IgdGhlIGlucHV0IG1heSBoYXZlIGNoYW5nZWQuCi0gICAg
dmlydHVhbCB2b2lkIGNoZWNrTnVtYmVyT2ZDaGFubmVsc0ZvcklucHV0KEF1ZGlvTm9kZUlucHV0
Kik7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgZm9yIGJvdGggdGhl
IGlucHV0IGFuZCB0aGUgb3V0cHV0LgotICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMoKTsK
LQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERTsKLQot
ICAgIEF1ZGlvUHJvY2Vzc29yKiBwcm9jZXNzb3IoKSB7IHJldHVybiBtX3Byb2Nlc3Nvci5nZXQo
KTsgfQotICAgIE93blB0cjxBdWRpb1Byb2Nlc3Nvcj4gbV9wcm9jZXNzb3I7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZV9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwCShyZXZpc2lvbiAx
MTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTExICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBF
TkFCTEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiQXVkaW9CdWZmZXIuaCIKLQotI2luY2x1ZGUg
IkF1ZGlvQnVzLmgiCi0jaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCi0jaW5jbHVkZSAiQXVkaW9G
aWxlUmVhZGVyLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPEF1ZGlvQnVmZmVy
PiBBdWRpb0J1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBu
dW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSkKLXsKLSAgICBpZiAoc2FtcGxlUmF0ZSA8
IDIyMDUwIHx8IHNhbXBsZVJhdGUgPiA5NjAwMCB8fCBudW1iZXJPZkNoYW5uZWxzID4gQXVkaW9D
b250ZXh0OjptYXhOdW1iZXJPZkNoYW5uZWxzKCkgfHwgIW51bWJlck9mRnJhbWVzKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvQnVmZmVyKG51
bWJlck9mQ2hhbm5lbHMsIG51bWJlck9mRnJhbWVzLCBzYW1wbGVSYXRlKSk7Ci19Ci0KLVBhc3NS
ZWZQdHI8QXVkaW9CdWZmZXI+IEF1ZGlvQnVmZmVyOjpjcmVhdGVGcm9tQXVkaW9GaWxlRGF0YShj
b25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUsIGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBz
YW1wbGVSYXRlKQotewotICAgIE93blB0cjxBdWRpb0J1cz4gYnVzID0gY3JlYXRlQnVzRnJvbUlu
TWVtb3J5QXVkaW9GaWxlKGRhdGEsIGRhdGFTaXplLCBtaXhUb01vbm8sIHNhbXBsZVJhdGUpOwot
ICAgIGlmIChidXMuZ2V0KCkpCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVkaW9CdWZm
ZXIoYnVzLmdldCgpKSk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotQXVkaW9CdWZmZXI6OkF1ZGlv
QnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywg
ZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICA6IG1fZ2FpbigxLjApCi0gICAgLCBtX3NhbXBsZVJhdGUo
c2FtcGxlUmF0ZSkKLSAgICAsIG1fbGVuZ3RoKG51bWJlck9mRnJhbWVzKQotewotICAgIG1fY2hh
bm5lbHMucmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mQ2hhbm5lbHMpOwotCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgewotICAgICAgICBSZWZQdHI8
RmxvYXQzMkFycmF5PiBjaGFubmVsRGF0YUFycmF5ID0gRmxvYXQzMkFycmF5OjpjcmVhdGUobV9s
ZW5ndGgpOwotICAgICAgICBtX2NoYW5uZWxzLmFwcGVuZChjaGFubmVsRGF0YUFycmF5KTsKLSAg
ICB9Ci19Ci0KLUF1ZGlvQnVmZmVyOjpBdWRpb0J1ZmZlcihBdWRpb0J1cyogYnVzKQotICAgIDog
bV9nYWluKDEuMCkKLSAgICAsIG1fc2FtcGxlUmF0ZShidXMtPnNhbXBsZVJhdGUoKSkKLSAgICAs
IG1fbGVuZ3RoKGJ1cy0+bGVuZ3RoKCkpCi17Ci0gICAgLy8gQ29weSBhdWRpbyBkYXRhIGZyb20g
dGhlIGJ1cyB0byB0aGUgRmxvYXQzMkFycmF5cyB3ZSBtYW5hZ2UuCi0gICAgdW5zaWduZWQgbnVt
YmVyT2ZDaGFubmVscyA9IGJ1cy0+bnVtYmVyT2ZDaGFubmVscygpOwotICAgIG1fY2hhbm5lbHMu
cmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mQ2hhbm5lbHMpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPEZsb2F0MzJB
cnJheT4gY2hhbm5lbERhdGFBcnJheSA9IEZsb2F0MzJBcnJheTo6Y3JlYXRlKG1fbGVuZ3RoKTsK
LSAgICAgICAgY2hhbm5lbERhdGFBcnJheS0+c2V0UmFuZ2UoYnVzLT5jaGFubmVsKGkpLT5kYXRh
KCksIG1fbGVuZ3RoLCAwKTsKLSAgICAgICAgbV9jaGFubmVscy5hcHBlbmQoY2hhbm5lbERhdGFB
cnJheSk7Ci0gICAgfQotfQotCi12b2lkIEF1ZGlvQnVmZmVyOjpyZWxlYXNlTWVtb3J5KCkKLXsK
LSAgICBtX2NoYW5uZWxzLmNsZWFyKCk7Ci19Ci0KLUZsb2F0MzJBcnJheSogQXVkaW9CdWZmZXI6
OmdldENoYW5uZWxEYXRhKHVuc2lnbmVkIGNoYW5uZWxJbmRleCkKLXsKLSAgICBpZiAoY2hhbm5l
bEluZGV4ID49IG1fY2hhbm5lbHMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJl
dHVybiBtX2NoYW5uZWxzW2NoYW5uZWxJbmRleF0uZ2V0KCk7Ci19Ci0KLXZvaWQgQXVkaW9CdWZm
ZXI6Onplcm8oKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NoYW5uZWxzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChnZXRDaGFubmVsRGF0YShpKSkKLSAgICAgICAgICAg
IGdldENoYW5uZWxEYXRhKGkpLT56ZXJvUmFuZ2UoMCwgbGVuZ3RoKCkpOwotICAgIH0KLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaAkocmV2aXNpb24gMTExMjA4KQor
KysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw4MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBdWRpb0J1ZmZlcl9oCi0jZGVmaW5lIEF1ZGlvQnVm
ZmVyX2gKLQotI2luY2x1ZGUgPHd0Zi9GbG9hdDMyQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBBdWRpb0J1czsKLSAgICAKLWNsYXNzIEF1ZGlvQnVmZmVyIDogcHVibGljIFJlZkNv
dW50ZWQ8QXVkaW9CdWZmZXI+IHsKLXB1YmxpYzogICAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxB
dWRpb0J1ZmZlcj4gY3JlYXRlKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1i
ZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSk7Ci0KLSAgICAvLyBSZXR1cm5zIDAgaWYgZGF0
YSBpcyBub3QgYSB2YWxpZCBhdWRpbyBmaWxlLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlv
QnVmZmVyPiBjcmVhdGVGcm9tQXVkaW9GaWxlRGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qg
ZGF0YVNpemUsIGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBzYW1wbGVSYXRlKTsKLQotICAgIC8vIEZv
cm1hdAotICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQotICAg
IGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGxlbmd0aCgpIC8gc2FtcGxlUmF0ZSgp
OyB9Ci0gICAgZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlUmF0ZTsg
fQotCi0gICAgLy8gQ2hhbm5lbCBkYXRhIGFjY2VzcwotICAgIHVuc2lnbmVkIG51bWJlck9mQ2hh
bm5lbHMoKSBjb25zdCB7IHJldHVybiBtX2NoYW5uZWxzLnNpemUoKTsgfQotICAgIEZsb2F0MzJB
cnJheSogZ2V0Q2hhbm5lbERhdGEodW5zaWduZWQgY2hhbm5lbEluZGV4KTsKLSAgICB2b2lkIHpl
cm8oKTsKLQotICAgIC8vIFNjYWxhciBnYWluCi0gICAgZG91YmxlIGdhaW4oKSBjb25zdCB7IHJl
dHVybiBtX2dhaW47IH0KLSAgICB2b2lkIHNldEdhaW4oZG91YmxlIGdhaW4pIHsgbV9nYWluID0g
Z2FpbjsgfQotCi0gICAgLy8gQmVjYXVzZSBhbiBBdWRpb0J1ZmZlciBoYXMgYSBKYXZhU2NyaXB0
IHdyYXBwZXIsIHdoaWNoIHdpbGwgYmUgZ2FyYmFnZSBjb2xsZWN0ZWQsIGl0IG1heSB0YWtlIGF3
aGlsZSBmb3IgdGhpcyBvYmplY3QgdG8gYmUgZGVsZXRlZC4KLSAgICAvLyByZWxlYXNlTWVtb3J5
KCkgY2FuIGJlIGNhbGxlZCB3aGVuIHRoZSBBdWRpb0NvbnRleHQgZ29lcyBhd2F5LCBzbyB3ZSBj
YW4gcmVsZWFzZSB0aGUgbWVtb3J5IGVhcmxpZXIgdGhhbiB3aGVuIHRoZSBnYXJiYWdlIGNvbGxl
Y3Rpb24gaGFwcGVucy4KLSAgICAvLyBDYXJlZnVsISBPbmx5IGNhbGwgdGhpcyB3aGVuIHRoZSBw
YWdlIHVubG9hZHMsIGFmdGVyIHRoZSBBdWRpb0NvbnRleHQgaXMgbm8gbG9uZ2VyIHByb2Nlc3Np
bmcuCi0gICAgdm9pZCByZWxlYXNlTWVtb3J5KCk7Ci0gICAgCi1wcm90ZWN0ZWQ6Ci0gICAgQXVk
aW9CdWZmZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IG51bWJlck9mRnJhbWVz
LCBmbG9hdCBzYW1wbGVSYXRlKTsKLSAgICBBdWRpb0J1ZmZlcihBdWRpb0J1cyogYnVzKTsKLQot
ICAgIGRvdWJsZSBtX2dhaW47IC8vIHNjYWxhciBnYWluCi0gICAgZmxvYXQgbV9zYW1wbGVSYXRl
OwotICAgIHNpemVfdCBtX2xlbmd0aDsKLQotICAgIFZlY3RvcjxSZWZQdHI8RmxvYXQzMkFycmF5
PiA+IG1fY2hhbm5lbHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBBdWRpb0J1ZmZlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZl
ci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXIu
aWRsCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1
ZmZlci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBhdWRpbyB7
Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPCi0gICAgXSBB
dWRpb0J1ZmZlciB7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIGxlbmd0aDsgLy8g
aW4gc2FtcGxlLWZyYW1lcwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgZmxvYXQgZHVyYXRp
b247IC8vIGluIHNlY29uZHMKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0IHNhbXBs
ZVJhdGU7IC8vIGluIHNhbXBsZS1mcmFtZXMgcGVyIHNlY29uZAotCi0gICAgICAgIGF0dHJpYnV0
ZSBmbG9hdCBnYWluOyAvLyBsaW5lYXIgZ2FpbiAoZGVmYXVsdCAxLjApCi0KLSAgICAgICAgLy8g
Q2hhbm5lbCBhY2Nlc3MKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcg
bnVtYmVyT2ZDaGFubmVsczsKLSAgICAgICAgRmxvYXQzMkFycmF5IGdldENoYW5uZWxEYXRhKGlu
IHVuc2lnbmVkIGxvbmcgY2hhbm5lbEluZGV4KTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyQ2FsbGJhY2suaAkocmV2aXNpb24gMTExMjA4
KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFjay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEF1ZGlvQnVm
ZmVyQ2FsbGJhY2tfaAotI2RlZmluZSBBdWRpb0J1ZmZlckNhbGxiYWNrX2gKLQotI2lmIEVOQUJM
RShXRUJfQVVESU8pCi0KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvQnVmZmVyOwotCi1jbGFzcyBBdWRpb0J1ZmZlckNhbGxi
YWNrIDogcHVibGljIFJlZkNvdW50ZWQ8QXVkaW9CdWZmZXJDYWxsYmFjaz4gewotcHVibGljOgot
ICAgIHZpcnR1YWwgfkF1ZGlvQnVmZmVyQ2FsbGJhY2soKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wg
aGFuZGxlRXZlbnQoQXVkaW9CdWZmZXIqKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKLQotI2VuZGlmIC8vIEF1ZGlvQnVmZmVyQ2FsbGJh
Y2tfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFjay5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxs
YmFjay5pZGwJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1
ZGlvQnVmZmVyQ2FsbGJhY2suaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi1tb2R1bGUgYXVkaW8gewotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRp
dGlvbmFsPVdFQl9BVURJTywKLSAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QsCi0gICAgICAg
IENhbGxiYWNrCi0gICAgXSBBdWRpb0J1ZmZlckNhbGxiYWNrIHsKLSAgICAgICAgYm9vbGVhbiBo
YW5kbGVFdmVudChpbiBBdWRpb0J1ZmZlciBhdWRpb0J1ZmZlcik7Ci0gICAgfTsKLX0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNw
cAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZm
ZXJTb3VyY2VOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1MDIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNp
bmNsdWRlICJBdWRpb0J1ZmZlclNvdXJjZU5vZGUuaCIKLQotI2luY2x1ZGUgIkF1ZGlvQ29udGV4
dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgotI2luY2x1ZGUgIkF1ZGlvVXRpbGl0
aWVzLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24u
aCIKLSNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0j
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgot
Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0IGRv
dWJsZSBEZWZhdWx0R3JhaW5EdXJhdGlvbiA9IDAuMDIwOyAvLyAyMG1zCi1jb25zdCBkb3VibGUg
VW5rbm93blRpbWUgPSAtMTsKLQotLy8gQXJiaXRyYXJ5IHVwcGVyIGxpbWl0IG9uIHBsYXliYWNr
IHJhdGUuCi0vLyBIaWdoZXIgdGhhbiBleHBlY3RlZCByYXRlcyBjYW4gYmUgdXNlZnVsIHdoZW4g
cGxheWluZyBiYWNrIG92ZXJzYW1wbGVkIGJ1ZmZlcnMKLS8vIHRvIG1pbmltaXplIGxpbmVhciBp
bnRlcnBvbGF0aW9uIGFsaWFzaW5nLgotY29uc3QgZG91YmxlIE1heFJhdGUgPSAxMDI0OwotCi1Q
YXNzUmVmUHRyPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4gQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpj
cmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQXVkaW9CdWZmZXJTb3VyY2VOb2RlKGNvbnRleHQsIHNhbXBsZVJh
dGUpKTsKLX0KLQotQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGUo
QXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIDogQXVkaW9Tb3Vy
Y2VOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCi0gICAgLCBtX2J1ZmZlcigwKQotICAgICwgbV9p
c1BsYXlpbmcoZmFsc2UpCi0gICAgLCBtX2lzTG9vcGluZyhmYWxzZSkKLSAgICAsIG1faGFzRmlu
aXNoZWQoZmFsc2UpCi0gICAgLCBtX3N0YXJ0VGltZSgwLjApCi0gICAgLCBtX2VuZFRpbWUoVW5r
bm93blRpbWUpCi0gICAgLCBtX3ZpcnR1YWxSZWFkSW5kZXgoMCkKLSAgICAsIG1faXNHcmFpbihm
YWxzZSkKLSAgICAsIG1fZ3JhaW5PZmZzZXQoMC4wKQotICAgICwgbV9ncmFpbkR1cmF0aW9uKERl
ZmF1bHRHcmFpbkR1cmF0aW9uKQotICAgICwgbV9sYXN0R2FpbigxLjApCi0gICAgLCBtX3Bhbm5l
ck5vZGUoMCkKLXsKLSAgICBzZXROb2RlVHlwZShOb2RlVHlwZUF1ZGlvQnVmZmVyU291cmNlKTsK
LQotICAgIG1fZ2FpbiA9IEF1ZGlvR2Fpbjo6Y3JlYXRlKCJnYWluIiwgMS4wLCAwLjAsIDEuMCk7
Ci0gICAgbV9wbGF5YmFja1JhdGUgPSBBdWRpb1BhcmFtOjpjcmVhdGUoInBsYXliYWNrUmF0ZSIs
IDEuMCwgMC4wLCBNYXhSYXRlKTsKLSAgICAKLSAgICBtX2dhaW4tPnNldENvbnRleHQoY29udGV4
dCk7Ci0gICAgbV9wbGF5YmFja1JhdGUtPnNldENvbnRleHQoY29udGV4dCk7Ci0KLSAgICAvLyBE
ZWZhdWx0IHRvIG1vbm8uICBBIGNhbGwgdG8gc2V0QnVmZmVyKCkgd2lsbCBzZXQgdGhlIG51bWJl
ciBvZiBvdXRwdXQgY2hhbm5lbHMgdG8gdGhhdCBvZiB0aGUgYnVmZmVyLgotICAgIGFkZE91dHB1
dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMsIDEpKSk7Ci0KLSAgICBpbml0aWFs
aXplKCk7Ci19Ci0KLUF1ZGlvQnVmZmVyU291cmNlTm9kZTo6fkF1ZGlvQnVmZmVyU291cmNlTm9k
ZSgpCi17Ci0gICAgdW5pbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgQXVkaW9CdWZmZXJTb3VyY2VO
b2RlOjpwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgQXVkaW9CdXMqIG91
dHB1dEJ1cyA9IG91dHB1dCgwKS0+YnVzKCk7Ci0KLSAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkg
ewotICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIFRoZSBhdWRpbyB0aHJlYWQgY2FuJ3QgYmxvY2sgb24gdGhpcyBsb2NrLCBzbyB3ZSBj
YWxsIHRyeUxvY2soKSBpbnN0ZWFkLgotICAgIC8vIENhcmVmdWwgLSB0aGlzIGlzIGEgdHJ5TG9j
aygpIGFuZCBub3QgYW4gYXV0b2xvY2tlciwgc28gd2UgbXVzdCB1bmxvY2soKSBiZWZvcmUgZXZl
cnkgcmV0dXJuLgotICAgIGlmIChtX3Byb2Nlc3NMb2NrLnRyeUxvY2soKSkgewotICAgICAgICAv
LyBDaGVjayBpZiBpdCdzIHRpbWUgdG8gc3RhcnQgcGxheWluZy4KLSAgICAgICAgZG91YmxlIHNh
bXBsZVJhdGUgPSB0aGlzLT5zYW1wbGVSYXRlKCk7Ci0gICAgICAgIHNpemVfdCBxdWFudHVtU3Rh
cnRGcmFtZSA9IGNvbnRleHQoKS0+Y3VycmVudFNhbXBsZUZyYW1lKCk7Ci0gICAgICAgIHNpemVf
dCBxdWFudHVtRW5kRnJhbWUgPSBxdWFudHVtU3RhcnRGcmFtZSArIGZyYW1lc1RvUHJvY2VzczsK
LSAgICAgICAgc2l6ZV90IHN0YXJ0RnJhbWUgPSBBdWRpb1V0aWxpdGllczo6dGltZVRvU2FtcGxl
RnJhbWUobV9zdGFydFRpbWUsIHNhbXBsZVJhdGUpOwotICAgICAgICBzaXplX3QgZW5kRnJhbWUg
PSBtX2VuZFRpbWUgPT0gVW5rbm93blRpbWUgPyAwIDogQXVkaW9VdGlsaXRpZXM6OnRpbWVUb1Nh
bXBsZUZyYW1lKG1fZW5kVGltZSwgc2FtcGxlUmF0ZSk7Ci0KLSAgICAgICAgLy8gSWYgd2Uga25v
dyB0aGUgZW5kIHRpbWUgYW5kIGl0J3MgYWxyZWFkeSBwYXNzZWQsIHRoZW4gZG9uJ3QgYm90aGVy
IGRvaW5nIGFueSBtb3JlIHJlbmRlcmluZyB0aGlzIGN5Y2xlLgotICAgICAgICBpZiAobV9lbmRU
aW1lICE9IFVua25vd25UaW1lICYmIGVuZEZyYW1lIDw9IHF1YW50dW1TdGFydEZyYW1lKSB7Ci0g
ICAgICAgICAgICBtX2lzUGxheWluZyA9IGZhbHNlOwotICAgICAgICAgICAgbV92aXJ0dWFsUmVh
ZEluZGV4ID0gMDsKLSAgICAgICAgICAgIGZpbmlzaCgpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBpZiAoIW1faXNQbGF5aW5nIHx8IG1faGFzRmluaXNoZWQgfHwgIWJ1ZmZlcigpIHx8
IHN0YXJ0RnJhbWUgPj0gcXVhbnR1bUVuZEZyYW1lKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTog
Y2FuIG9wdGltaXplIGhlcmUgYnkgcHJvcGFnYXRpbmcgc2lsZW50IGhpbnQgaW5zdGVhZCBvZiBm
b3JjaW5nIHRoZSB3aG9sZSBjaGFpbiB0byBwcm9jZXNzIHNpbGVuY2UuCi0gICAgICAgICAgICBv
dXRwdXRCdXMtPnplcm8oKTsKLSAgICAgICAgICAgIG1fcHJvY2Vzc0xvY2sudW5sb2NrKCk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBzaXplX3QgcXVhbnR1bUZy
YW1lT2Zmc2V0ID0gc3RhcnRGcmFtZSA+IHF1YW50dW1TdGFydEZyYW1lID8gc3RhcnRGcmFtZSAt
IHF1YW50dW1TdGFydEZyYW1lIDogMDsKLSAgICAgICAgcXVhbnR1bUZyYW1lT2Zmc2V0ID0gbWlu
KHF1YW50dW1GcmFtZU9mZnNldCwgZnJhbWVzVG9Qcm9jZXNzKTsgLy8gY2xhbXAgdG8gdmFsaWQg
cmFuZ2UKLSAgICAgICAgc2l6ZV90IGJ1ZmZlckZyYW1lc1RvUHJvY2VzcyA9IGZyYW1lc1RvUHJv
Y2VzcyAtIHF1YW50dW1GcmFtZU9mZnNldDsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgb3V0cHV0QnVzLT5udW1iZXJPZkNoYW5uZWxzKCk7ICsraSkgCi0gICAgICAgICAgICBt
X2Rlc3RpbmF0aW9uQ2hhbm5lbHNbaV0gPSBvdXRwdXRCdXMtPmNoYW5uZWwoaSktPm11dGFibGVE
YXRhKCk7Ci0KLSAgICAgICAgLy8gUmVuZGVyIGJ5IHJlYWRpbmcgZGlyZWN0bHkgZnJvbSB0aGUg
YnVmZmVyLgotICAgICAgICByZW5kZXJGcm9tQnVmZmVyKG91dHB1dEJ1cywgcXVhbnR1bUZyYW1l
T2Zmc2V0LCBidWZmZXJGcmFtZXNUb1Byb2Nlc3MpOwotCi0gICAgICAgIC8vIEFwcGx5IHRoZSBn
YWluIChpbi1wbGFjZSkgdG8gdGhlIG91dHB1dCBidXMuCi0gICAgICAgIGZsb2F0IHRvdGFsR2Fp
biA9IGdhaW4oKS0+dmFsdWUoKSAqIG1fYnVmZmVyLT5nYWluKCk7Ci0gICAgICAgIG91dHB1dEJ1
cy0+Y29weVdpdGhHYWluRnJvbSgqb3V0cHV0QnVzLCAmbV9sYXN0R2FpbiwgdG90YWxHYWluKTsK
LQotICAgICAgICAvLyBJZiB0aGUgZW5kIHRpbWUgaXMgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUg
b2YgdGhpcyB0aW1lIHF1YW50dW0sIHRoZW4gc2ltcGx5IHplcm8gb3V0IHRoZQotICAgICAgICAv
LyBmcmFtZXMgc3RhcnRpbmcgYXQgdGhlIGVuZCB0aW1lLgotICAgICAgICBpZiAobV9lbmRUaW1l
ICE9IFVua25vd25UaW1lICYmIGVuZEZyYW1lID49IHF1YW50dW1TdGFydEZyYW1lICYmIGVuZEZy
YW1lIDwgcXVhbnR1bUVuZEZyYW1lKSB7Ci0gICAgICAgICAgICBzaXplX3QgemVyb1N0YXJ0RnJh
bWUgPSBlbmRGcmFtZSAtIHF1YW50dW1TdGFydEZyYW1lOwotICAgICAgICAgICAgc2l6ZV90IGZy
YW1lc1RvWmVybyA9IGZyYW1lc1RvUHJvY2VzcyAtIHplcm9TdGFydEZyYW1lOwotCi0gICAgICAg
ICAgICBib29sIGlzU2FmZSA9IHplcm9TdGFydEZyYW1lIDwgZnJhbWVzVG9Qcm9jZXNzICYmIGZy
YW1lc1RvWmVybyA8PSBmcmFtZXNUb1Byb2Nlc3MgJiYgemVyb1N0YXJ0RnJhbWUgKyBmcmFtZXNU
b1plcm8gPD0gZnJhbWVzVG9Qcm9jZXNzOwotICAgICAgICAgICAgQVNTRVJUKGlzU2FmZSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpc1NhZmUpIHsKLSAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3V0cHV0QnVzLT5udW1iZXJPZkNoYW5uZWxzKCk7ICsr
aSkKLSAgICAgICAgICAgICAgICAgICAgbWVtc2V0KG1fZGVzdGluYXRpb25DaGFubmVsc1tpXSAr
IHplcm9TdGFydEZyYW1lLCAwLCBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9aZXJvKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgbV9pc1BsYXlpbmcgPSBmYWxzZTsKLSAgICAgICAgICAg
IG1fdmlydHVhbFJlYWRJbmRleCA9IDA7Ci0gICAgICAgICAgICBmaW5pc2goKTsKLSAgICAgICAg
fQotCi0gICAgICAgIG1fcHJvY2Vzc0xvY2sudW5sb2NrKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgLy8gVG9vIGJhZCAtIHRoZSB0cnlMb2NrKCkgZmFpbGVkLiAgV2UgbXVzdCBiZSBpbiB0aGUg
bWlkZGxlIG9mIGNoYW5naW5nIGJ1ZmZlcnMgYW5kIHdlcmUgYWxyZWFkeSBvdXRwdXR0aW5nIHNp
bGVuY2UgYW55d2F5LgotICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKLSAgICB9Ci19Ci0KLS8v
IFJldHVybnMgdHJ1ZSBpZiB3ZSdyZSBmaW5pc2hlZC4KLWJvb2wgQXVkaW9CdWZmZXJTb3VyY2VO
b2RlOjpyZW5kZXJTaWxlbmNlQW5kRmluaXNoSWZOb3RMb29waW5nKEF1ZGlvQnVzKiwgdW5zaWdu
ZWQgaW5kZXgsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgaWYgKCFsb29wKCkpIHsK
LSAgICAgICAgLy8gSWYgd2UncmUgbm90IGxvb3BpbmcsIHRoZW4gc3RvcCBwbGF5aW5nIHdoZW4g
d2UgZ2V0IHRvIHRoZSBlbmQuCi0gICAgICAgIG1faXNQbGF5aW5nID0gZmFsc2U7Ci0KLSAgICAg
ICAgaWYgKGZyYW1lc1RvUHJvY2VzcyA+IDApIHsKLSAgICAgICAgICAgIC8vIFdlJ3JlIG5vdCBs
b29waW5nIGFuZCB3ZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHNhbXBsZSBkYXRhLCBidXQg
d2Ugc3RpbGwgbmVlZCB0byBwcm92aWRlIG1vcmUgb3V0cHV0LAotICAgICAgICAgICAgLy8gc28g
Z2VuZXJhdGUgc2lsZW5jZSBmb3IgdGhlIHJlbWFpbmluZy4KLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzKCk7ICsraSkgCi0gICAgICAgICAgICAg
ICAgbWVtc2V0KG1fZGVzdGluYXRpb25DaGFubmVsc1tpXSArIGluZGV4LCAwLCBzaXplb2YoZmxv
YXQpICogZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmlzaCgpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lk
IEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6cmVuZGVyRnJvbUJ1ZmZlcihBdWRpb0J1cyogYnVzLCB1
bnNpZ25lZCBkZXN0aW5hdGlvbkZyYW1lT2Zmc2V0LCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMpCi17
Ci0gICAgQVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgpKTsKLSAgICAKLSAgICAvLyBC
YXNpYyBzYW5pdHkgY2hlY2tpbmcKLSAgICBBU1NFUlQoYnVzKTsKLSAgICBBU1NFUlQoYnVmZmVy
KCkpOwotICAgIGlmICghYnVzIHx8ICFidWZmZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
dW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscyA9IHRoaXMtPm51bWJlck9mQ2hhbm5lbHMoKTsKLSAg
ICB1bnNpZ25lZCBidXNOdW1iZXJPZkNoYW5uZWxzID0gYnVzLT5udW1iZXJPZkNoYW5uZWxzKCk7
Ci0KLSAgICBib29sIGNoYW5uZWxDb3VudEdvb2QgPSBudW1iZXJPZkNoYW5uZWxzICYmIG51bWJl
ck9mQ2hhbm5lbHMgPT0gYnVzTnVtYmVyT2ZDaGFubmVsczsKLSAgICBBU1NFUlQoY2hhbm5lbENv
dW50R29vZCk7Ci0gICAgaWYgKCFjaGFubmVsQ291bnRHb29kKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBTYW5pdHkgY2hlY2sgZGVzdGluYXRpb25GcmFtZU9mZnNldCwgbnVtYmVyT2ZGcmFt
ZXMuCi0gICAgc2l6ZV90IGRlc3RpbmF0aW9uTGVuZ3RoID0gYnVzLT5sZW5ndGgoKTsKLQotICAg
IGJvb2wgaXNMZW5ndGhHb29kID0gZGVzdGluYXRpb25MZW5ndGggPD0gNDA5NiAmJiBudW1iZXJP
ZkZyYW1lcyA8PSA0MDk2OwotICAgIEFTU0VSVChpc0xlbmd0aEdvb2QpOwotICAgIGlmICghaXNM
ZW5ndGhHb29kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGlzT2Zmc2V0R29vZCA9IGRl
c3RpbmF0aW9uRnJhbWVPZmZzZXQgPD0gZGVzdGluYXRpb25MZW5ndGggJiYgZGVzdGluYXRpb25G
cmFtZU9mZnNldCArIG51bWJlck9mRnJhbWVzIDw9IGRlc3RpbmF0aW9uTGVuZ3RoOwotICAgIEFT
U0VSVChpc09mZnNldEdvb2QpOwotICAgIGlmICghaXNPZmZzZXRHb29kKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBQb3RlbnRpYWxseSB6ZXJvIG91dCBpbml0aWFsIGZyYW1lcyBsZWFkaW5n
IHVwIHRvIHRoZSBvZmZzZXQuCi0gICAgaWYgKGRlc3RpbmF0aW9uRnJhbWVPZmZzZXQpIHsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgCi0g
ICAgICAgICAgICBtZW1zZXQobV9kZXN0aW5hdGlvbkNoYW5uZWxzW2ldLCAwLCBzaXplb2YoZmxv
YXQpICogZGVzdGluYXRpb25GcmFtZU9mZnNldCk7Ci0gICAgfQotCi0gICAgLy8gT2Zmc2V0IHRo
ZSBwb2ludGVycyB0byB0aGUgY29ycmVjdCBvZmZzZXQgZnJhbWUuCi0gICAgdW5zaWduZWQgd3Jp
dGVJbmRleCA9IGRlc3RpbmF0aW9uRnJhbWVPZmZzZXQ7Ci0KLSAgICBzaXplX3QgYnVmZmVyTGVu
Z3RoID0gYnVmZmVyKCktPmxlbmd0aCgpOwotICAgIGRvdWJsZSBidWZmZXJTYW1wbGVSYXRlID0g
YnVmZmVyKCktPnNhbXBsZVJhdGUoKTsKLQotICAgIC8vIENhbGN1bGF0ZSB0aGUgc3RhcnQgYW5k
IGVuZCBmcmFtZXMgaW4gb3VyIGJ1ZmZlciB0aGF0IHdlIHdhbnQgdG8gcGxheS4KLSAgICAvLyBJ
ZiBtX2lzR3JhaW4gaXMgdHJ1ZSwgdGhlbiB3ZSB3aWxsIGJlIHBsYXlpbmcgYSBwb3J0aW9uIG9m
IHRoZSB0b3RhbCBidWZmZXIuCi0gICAgdW5zaWduZWQgc3RhcnRGcmFtZSA9IG1faXNHcmFpbiA/
IEF1ZGlvVXRpbGl0aWVzOjp0aW1lVG9TYW1wbGVGcmFtZShtX2dyYWluT2Zmc2V0LCBidWZmZXJT
YW1wbGVSYXRlKSA6IDA7Ci0KLSAgICAvLyBBdm9pZCBjb252ZXJ0aW5nIGZyb20gdGltZSB0byBz
YW1wbGUtZnJhbWVzIHR3aWNlIGJ5IGNvbXB1dGluZwotICAgIC8vIHRoZSBncmFpbiBlbmQgdGlt
ZSBmaXJzdCBiZWZvcmUgY29tcHV0aW5nIHRoZSBzYW1wbGUgZnJhbWUuCi0gICAgdW5zaWduZWQg
ZW5kRnJhbWUgPSBtX2lzR3JhaW4gPyBBdWRpb1V0aWxpdGllczo6dGltZVRvU2FtcGxlRnJhbWUo
bV9ncmFpbk9mZnNldCArIG1fZ3JhaW5EdXJhdGlvbiwgYnVmZmVyU2FtcGxlUmF0ZSkgOiBidWZm
ZXJMZW5ndGg7Ci0gICAgCi0gICAgQVNTRVJUKGVuZEZyYW1lID49IHN0YXJ0RnJhbWUpOwotICAg
IGlmIChlbmRGcmFtZSA8IHN0YXJ0RnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB1
bnNpZ25lZCBkZWx0YUZyYW1lcyA9IGVuZEZyYW1lIC0gc3RhcnRGcmFtZTsKLSAgICAKLSAgICAv
LyBUaGlzIGlzIGEgSEFDSyB0byBhbGxvdyBmb3IgSFJURiB0YWlsLXRpbWUgLSBhdm9pZHMgZ2xp
dGNoIGF0IGVuZC4KLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRhaWxUaW1lIGZvciBlYWNoIEF1
ZGlvTm9kZSBmb3IgYSBtb3JlIGdlbmVyYWwgc29sdXRpb24gdG8gdGhpcyBwcm9ibGVtLgotICAg
IGlmIChtX2lzR3JhaW4pCi0gICAgICAgIGVuZEZyYW1lICs9IDUxMjsKLQotICAgIC8vIERvIHNv
bWUgc2FuaXR5IGNoZWNraW5nLgotICAgIGlmIChzdGFydEZyYW1lID49IGJ1ZmZlckxlbmd0aCkK
LSAgICAgICAgc3RhcnRGcmFtZSA9ICFidWZmZXJMZW5ndGggPyAwIDogYnVmZmVyTGVuZ3RoIC0g
MTsKLSAgICBpZiAoZW5kRnJhbWUgPiBidWZmZXJMZW5ndGgpCi0gICAgICAgIGVuZEZyYW1lID0g
YnVmZmVyTGVuZ3RoOwotICAgIGlmIChtX3ZpcnR1YWxSZWFkSW5kZXggPj0gZW5kRnJhbWUpCi0g
ICAgICAgIG1fdmlydHVhbFJlYWRJbmRleCA9IHN0YXJ0RnJhbWU7IC8vIHJlc2V0IHRvIHN0YXJ0
Ci0KLSAgICBkb3VibGUgcGl0Y2hSYXRlID0gdG90YWxQaXRjaFJhdGUoKTsKLQotICAgIC8vIEdl
dCBsb2NhbCBjb3B5LgotICAgIGRvdWJsZSB2aXJ0dWFsUmVhZEluZGV4ID0gbV92aXJ0dWFsUmVh
ZEluZGV4OwotCi0gICAgLy8gUmVuZGVyIGxvb3AgLSByZWFkaW5nIGZyb20gdGhlIHNvdXJjZSBi
dWZmZXIgdG8gdGhlIGRlc3RpbmF0aW9uIHVzaW5nIGxpbmVhciBpbnRlcnBvbGF0aW9uLgotICAg
IGludCBmcmFtZXNUb1Byb2Nlc3MgPSBudW1iZXJPZkZyYW1lczsKLQotICAgIGNvbnN0IGZsb2F0
Kiogc291cmNlQ2hhbm5lbHMgPSBtX3NvdXJjZUNoYW5uZWxzLmdldCgpOwotICAgIGZsb2F0Kiog
ZGVzdGluYXRpb25DaGFubmVscyA9IG1fZGVzdGluYXRpb25DaGFubmVscy5nZXQoKTsKLQotICAg
IC8vIE9wdGltaXplIGZvciB0aGUgdmVyeSBjb21tb24gY2FzZSBvZiBwbGF5aW5nIGJhY2sgd2l0
aCBwaXRjaFJhdGUgPT0gMS4KLSAgICAvLyBXZSBjYW4gYXZvaWQgdGhlIGxpbmVhciBpbnRlcnBv
bGF0aW9uLgotICAgIGlmIChwaXRjaFJhdGUgPT0gMSAmJiB2aXJ0dWFsUmVhZEluZGV4ID09IGZs
b29yKHZpcnR1YWxSZWFkSW5kZXgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHJlYWRJbmRleCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPih2aXJ0dWFsUmVhZEluZGV4KTsKLSAgICAgICAgd2hpbGUgKGZy
YW1lc1RvUHJvY2VzcyA+IDApIHsKLSAgICAgICAgICAgIGludCBmcmFtZXNUb0VuZCA9IGVuZEZy
YW1lIC0gcmVhZEluZGV4OwotICAgICAgICAgICAgaW50IGZyYW1lc1RoaXNUaW1lID0gbWluKGZy
YW1lc1RvUHJvY2VzcywgZnJhbWVzVG9FbmQpOwotICAgICAgICAgICAgZnJhbWVzVGhpc1RpbWUg
PSBtYXgoMCwgZnJhbWVzVGhpc1RpbWUpOwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSAKLSAgICAgICAgICAgICAgICBtZW1jcHko
ZGVzdGluYXRpb25DaGFubmVsc1tpXSArIHdyaXRlSW5kZXgsIHNvdXJjZUNoYW5uZWxzW2ldICsg
cmVhZEluZGV4LCBzaXplb2YoZmxvYXQpICogZnJhbWVzVGhpc1RpbWUpOwotCi0gICAgICAgICAg
ICB3cml0ZUluZGV4ICs9IGZyYW1lc1RoaXNUaW1lOwotICAgICAgICAgICAgcmVhZEluZGV4ICs9
IGZyYW1lc1RoaXNUaW1lOwotICAgICAgICAgICAgZnJhbWVzVG9Qcm9jZXNzIC09IGZyYW1lc1Ro
aXNUaW1lOwotCi0gICAgICAgICAgICAvLyBXcmFwLWFyb3VuZC4KLSAgICAgICAgICAgIGlmIChy
ZWFkSW5kZXggPj0gZW5kRnJhbWUpIHsKLSAgICAgICAgICAgICAgICByZWFkSW5kZXggLT0gZGVs
dGFGcmFtZXM7Ci0gICAgICAgICAgICAgICAgaWYgKHJlbmRlclNpbGVuY2VBbmRGaW5pc2hJZk5v
dExvb3BpbmcoYnVzLCB3cml0ZUluZGV4LCBmcmFtZXNUb1Byb2Nlc3MpKQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB2aXJ0dWFs
UmVhZEluZGV4ID0gcmVhZEluZGV4OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHdoaWxlIChmcmFt
ZXNUb1Byb2Nlc3MtLSkgewotICAgICAgICAgICAgdW5zaWduZWQgcmVhZEluZGV4ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHZpcnR1YWxSZWFkSW5kZXgpOwotICAgICAgICAgICAgZG91YmxlIGlu
dGVycG9sYXRpb25GYWN0b3IgPSB2aXJ0dWFsUmVhZEluZGV4IC0gcmVhZEluZGV4OwotCi0gICAg
ICAgICAgICAvLyBGb3IgbGluZWFyIGludGVycG9sYXRpb24gd2UgbmVlZCB0aGUgbmV4dCBzYW1w
bGUtZnJhbWUgdG9vLgotICAgICAgICAgICAgdW5zaWduZWQgcmVhZEluZGV4MiA9IHJlYWRJbmRl
eCArIDE7Ci0gICAgICAgICAgICBpZiAocmVhZEluZGV4MiA+PSBlbmRGcmFtZSkgewotICAgICAg
ICAgICAgICAgIGlmIChsb29wKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJl
IHRvIHdyYXAgYXJvdW5kIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLSAgICAgICAgICAgICAg
ICAgICAgcmVhZEluZGV4MiAtPSBkZWx0YUZyYW1lczsKLSAgICAgICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgcmVhZEluZGV4MiA9IHJlYWRJbmRleDsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gRmluYWwgc2FuaXR5IGNoZWNrIG9uIGJ1ZmZlciBhY2Nlc3Mu
Ci0gICAgICAgICAgICAvLyBGSVhNRTogYXMgYW4gb3B0aW1pemF0aW9uLCB0cnkgdG8gZ2V0IHJp
ZCBvZiB0aGlzIGlubmVyLWxvb3AgY2hlY2sgYW5kIHB1dCBhc3NlcnRpb25zIGFuZCBndWFyZHMg
YmVmb3JlIHRoZSBsb29wLgotICAgICAgICAgICAgaWYgKHJlYWRJbmRleCA+PSBidWZmZXJMZW5n
dGggfHwgcmVhZEluZGV4MiA+PSBidWZmZXJMZW5ndGgpCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICAgIC8vIExpbmVhciBpbnRlcnBvbGF0aW9uLgotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgewotICAgICAgICAg
ICAgICAgIGZsb2F0KiBkZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uQ2hhbm5lbHNbaV07Ci0gICAg
ICAgICAgICAgICAgY29uc3QgZmxvYXQqIHNvdXJjZSA9IHNvdXJjZUNoYW5uZWxzW2ldOwotCi0g
ICAgICAgICAgICAgICAgZG91YmxlIHNhbXBsZTEgPSBzb3VyY2VbcmVhZEluZGV4XTsKLSAgICAg
ICAgICAgICAgICBkb3VibGUgc2FtcGxlMiA9IHNvdXJjZVtyZWFkSW5kZXgyXTsKLSAgICAgICAg
ICAgICAgICBkb3VibGUgc2FtcGxlID0gKDEuMCAtIGludGVycG9sYXRpb25GYWN0b3IpICogc2Ft
cGxlMSArIGludGVycG9sYXRpb25GYWN0b3IgKiBzYW1wbGUyOwotCi0gICAgICAgICAgICAgICAg
ZGVzdGluYXRpb25bd3JpdGVJbmRleF0gPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHNhbXBsZSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3cml0ZUluZGV4Kys7Ci0KLSAgICAgICAgICAg
IHZpcnR1YWxSZWFkSW5kZXggKz0gcGl0Y2hSYXRlOwotCi0gICAgICAgICAgICAvLyBXcmFwLWFy
b3VuZCwgcmV0YWluaW5nIHN1Yi1zYW1wbGUgcG9zaXRpb24gc2luY2UgdmlydHVhbFJlYWRJbmRl
eCBpcyBmbG9hdGluZy1wb2ludC4KLSAgICAgICAgICAgIGlmICh2aXJ0dWFsUmVhZEluZGV4ID49
IGVuZEZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgdmlydHVhbFJlYWRJbmRleCAtPSBkZWx0YUZy
YW1lczsKLQotICAgICAgICAgICAgICAgIGlmIChyZW5kZXJTaWxlbmNlQW5kRmluaXNoSWZOb3RM
b29waW5nKGJ1cywgd3JpdGVJbmRleCwgZnJhbWVzVG9Qcm9jZXNzKSkKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IAotICAgIG1fdmly
dHVhbFJlYWRJbmRleCA9IHZpcnR1YWxSZWFkSW5kZXg7Ci19Ci0KLQotdm9pZCBBdWRpb0J1ZmZl
clNvdXJjZU5vZGU6OnJlc2V0KCkKLXsKLSAgICBtX3ZpcnR1YWxSZWFkSW5kZXggPSAwOwotICAg
IG1fbGFzdEdhaW4gPSBnYWluKCktPnZhbHVlKCk7Ci19Ci0KLXZvaWQgQXVkaW9CdWZmZXJTb3Vy
Y2VOb2RlOjpmaW5pc2goKQotewotICAgIGlmICghbV9oYXNGaW5pc2hlZCkgewotICAgICAgICAv
LyBMZXQgdGhlIGNvbnRleHQgZGVyZWZlcmVuY2UgdGhpcyBBdWRpb05vZGUuCi0gICAgICAgIGNv
bnRleHQoKS0+bm90aWZ5Tm9kZUZpbmlzaGVkUHJvY2Vzc2luZyh0aGlzKTsKLSAgICAgICAgbV9o
YXNGaW5pc2hlZCA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIEF1ZGlvQnVmZmVyU291cmNlTm9k
ZTo6c2V0QnVmZmVyKEF1ZGlvQnVmZmVyKiBidWZmZXIpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLSAgICAKLSAgICAvLyBUaGUgY29udGV4dCBtdXN0IGJlIGxvY2tlZCBzaW5jZSBj
aGFuZ2luZyB0aGUgYnVmZmVyIGNhbiByZS1jb25maWd1cmUgdGhlIG51bWJlciBvZiBjaGFubmVs
cyB0aGF0IGFyZSBvdXRwdXQuCi0gICAgQXVkaW9Db250ZXh0OjpBdXRvTG9ja2VyIGNvbnRleHRM
b2NrZXIoY29udGV4dCgpKTsKLSAgICAKLSAgICAvLyBUaGlzIHN5bmNocm9uaXplcyB3aXRoIHBy
b2Nlc3MoKS4KLSAgICBNdXRleExvY2tlciBwcm9jZXNzTG9ja2VyKG1fcHJvY2Vzc0xvY2spOwot
ICAgIAotICAgIGlmIChidWZmZXIpIHsKLSAgICAgICAgLy8gRG8gYW55IG5lY2Vzc3NhcnkgcmUt
Y29uZmlndXJhdGlvbiB0byB0aGUgYnVmZmVyJ3MgbnVtYmVyIG9mIGNoYW5uZWxzLgotICAgICAg
ICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzID0gYnVmZmVyLT5udW1iZXJPZkNoYW5uZWxzKCk7
Ci0KLSAgICAgICAgaWYgKG51bWJlck9mQ2hhbm5lbHMgPiBBdWRpb0NvbnRleHQ6Om1heE51bWJl
ck9mQ2hhbm5lbHMoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBvdXRw
dXQoMCktPnNldE51bWJlck9mQ2hhbm5lbHMobnVtYmVyT2ZDaGFubmVscyk7Ci0KLSAgICAgICAg
bV9zb3VyY2VDaGFubmVscyA9IGFkb3B0QXJyYXlQdHIobmV3IGNvbnN0IGZsb2F0KiBbbnVtYmVy
T2ZDaGFubmVsc10pOwotICAgICAgICBtX2Rlc3RpbmF0aW9uQ2hhbm5lbHMgPSBhZG9wdEFycmF5
UHRyKG5ldyBmbG9hdCogW251bWJlck9mQ2hhbm5lbHNdKTsKLQotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSAKLSAgICAgICAgICAgIG1fc291
cmNlQ2hhbm5lbHNbaV0gPSBidWZmZXItPmdldENoYW5uZWxEYXRhKGkpLT5kYXRhKCk7Ci0gICAg
fQotCi0gICAgbV92aXJ0dWFsUmVhZEluZGV4ID0gMDsKLSAgICBtX2J1ZmZlciA9IGJ1ZmZlcjsK
LSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdW5zaWduZWQgQXVkaW9CdWZmZXJTb3VyY2VO
b2RlOjpudW1iZXJPZkNoYW5uZWxzKCkKLXsKLSAgICByZXR1cm4gb3V0cHV0KDApLT5udW1iZXJP
ZkNoYW5uZWxzKCk7Ci19Ci0KLXZvaWQgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpub3RlT24oZG91
YmxlIHdoZW4pCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV9pc1Bs
YXlpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNHcmFpbiA9IGZhbHNlOwotICAgIG1f
c3RhcnRUaW1lID0gd2hlbjsKLSAgICBtX3ZpcnR1YWxSZWFkSW5kZXggPSAwOwotICAgIG1faXNQ
bGF5aW5nID0gdHJ1ZTsKLX0KLQotdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6Om5vdGVHcmFp
bk9uKGRvdWJsZSB3aGVuLCBkb3VibGUgZ3JhaW5PZmZzZXQsIGRvdWJsZSBncmFpbkR1cmF0aW9u
KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1faXNQbGF5aW5nKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWJ1ZmZlcigpKQotICAgICAgICByZXR1cm47Ci0g
ICAgICAgIAotICAgIC8vIERvIHNhbml0eSBjaGVja2luZyBvZiBncmFpbiBwYXJhbWV0ZXJzIHZl
cnN1cyBidWZmZXIgc2l6ZS4KLSAgICBkb3VibGUgYnVmZmVyRHVyYXRpb24gPSBidWZmZXIoKS0+
ZHVyYXRpb24oKTsKLQotICAgIGlmIChncmFpbkR1cmF0aW9uID4gYnVmZmVyRHVyYXRpb24pCi0g
ICAgICAgIHJldHVybjsgLy8gRklYTUU6IG1heWJlIHNob3VsZCB0aHJvdyBleGNlcHRpb24gLSBj
b25zaWRlciBpbiBzcGVjaWZpY2F0aW9uLgotICAgIAotICAgIGRvdWJsZSBtYXhHcmFpbk9mZnNl
dCA9IGJ1ZmZlckR1cmF0aW9uIC0gZ3JhaW5EdXJhdGlvbjsKLSAgICBtYXhHcmFpbk9mZnNldCA9
IG1heCgwLjAsIG1heEdyYWluT2Zmc2V0KTsKLQotICAgIGdyYWluT2Zmc2V0ID0gbWF4KDAuMCwg
Z3JhaW5PZmZzZXQpOwotICAgIGdyYWluT2Zmc2V0ID0gbWluKG1heEdyYWluT2Zmc2V0LCBncmFp
bk9mZnNldCk7Ci0gICAgbV9ncmFpbk9mZnNldCA9IGdyYWluT2Zmc2V0OwotCi0gICAgbV9ncmFp
bkR1cmF0aW9uID0gZ3JhaW5EdXJhdGlvbjsKLSAgICAKLSAgICBtX2lzR3JhaW4gPSB0cnVlOwot
ICAgIG1fc3RhcnRUaW1lID0gd2hlbjsKLQotICAgIC8vIFdlIGNhbGwgdGltZVRvU2FtcGxlRnJh
bWUgaGVyZSBzaW5jZSBhdCBwbGF5YmFja1JhdGUgPT0gMSB3ZSBkb24ndCB3YW50IHRvIGdvIHRo
cm91Z2ggbGluZWFyIGludGVycG9sYXRpb24KLSAgICAvLyBhdCBhIHN1Yi1zYW1wbGUgcG9zaXRp
b24gc2luY2UgaXQgd2lsbCBkZWdyYWRlIHRoZSBxdWFsaXR5LgotICAgIC8vIFdoZW4gYWxpZ25l
ZCB0byB0aGUgc2FtcGxlLWZyYW1lIHRoZSBwbGF5YmFjayB3aWxsIGJlIGlkZW50aWNhbCB0byB0
aGUgUENNIGRhdGEgc3RvcmVkIGluIHRoZSBidWZmZXIuCi0gICAgLy8gU2luY2UgcGxheWJhY2tS
YXRlID09IDEgaXMgdmVyeSBjb21tb24sIGl0J3Mgd29ydGggY29uc2lkZXJpbmcgcXVhbGl0eS4K
LSAgICBtX3ZpcnR1YWxSZWFkSW5kZXggPSBBdWRpb1V0aWxpdGllczo6dGltZVRvU2FtcGxlRnJh
bWUobV9ncmFpbk9mZnNldCwgYnVmZmVyKCktPnNhbXBsZVJhdGUoKSk7Ci0gICAgCi0gICAgbV9p
c1BsYXlpbmcgPSB0cnVlOwotfQotCi12b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6bm90ZU9m
Zihkb3VibGUgd2hlbikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmICgh
bV9pc1BsYXlpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB3aGVuID0gbWF4KDAuMCwg
d2hlbik7Ci0gICAgbV9lbmRUaW1lID0gd2hlbjsKLX0KLQotZG91YmxlIEF1ZGlvQnVmZmVyU291
cmNlTm9kZTo6dG90YWxQaXRjaFJhdGUoKQotewotICAgIGRvdWJsZSBkb3BwbGVyUmF0ZSA9IDEu
MDsKLSAgICBpZiAobV9wYW5uZXJOb2RlLmdldCgpKQotICAgICAgICBkb3BwbGVyUmF0ZSA9IG1f
cGFubmVyTm9kZS0+ZG9wcGxlclJhdGUoKTsKLSAgICAKLSAgICAvLyBJbmNvcnBvcmF0ZSBidWZm
ZXIncyBzYW1wbGUtcmF0ZSB2ZXJzdXMgQXVkaW9Db250ZXh0J3Mgc2FtcGxlLXJhdGUuCi0gICAg
Ly8gTm9ybWFsbHkgaXQncyBub3QgYW4gaXNzdWUgYmVjYXVzZSBidWZmZXJzIGFyZSBsb2FkZWQg
YXQgdGhlIEF1ZGlvQ29udGV4dCdzIHNhbXBsZS1yYXRlLCBidXQgd2UgY2FuIGhhbmRsZSBpdCBp
biBhbnkgY2FzZS4KLSAgICBkb3VibGUgc2FtcGxlUmF0ZUZhY3RvciA9IDEuMDsKLSAgICBpZiAo
YnVmZmVyKCkpCi0gICAgICAgIHNhbXBsZVJhdGVGYWN0b3IgPSBidWZmZXIoKS0+c2FtcGxlUmF0
ZSgpIC8gc2FtcGxlUmF0ZSgpOwotICAgIAotICAgIGRvdWJsZSBiYXNlUGl0Y2hSYXRlID0gcGxh
eWJhY2tSYXRlKCktPnZhbHVlKCk7Ci0KLSAgICBkb3VibGUgdG90YWxSYXRlID0gZG9wcGxlclJh
dGUgKiBzYW1wbGVSYXRlRmFjdG9yICogYmFzZVBpdGNoUmF0ZTsKLQotICAgIC8vIFNhbml0eSBj
aGVjayB0aGUgdG90YWwgcmF0ZS4gIEl0J3MgdmVyeSBpbXBvcnRhbnQgdGhhdCB0aGUgcmVzYW1w
bGVyIG5vdCBnZXQgYW55IGJhZCByYXRlIHZhbHVlcy4KLSAgICB0b3RhbFJhdGUgPSBtYXgoMC4w
LCB0b3RhbFJhdGUpOwotICAgIGlmICghdG90YWxSYXRlKQotICAgICAgICB0b3RhbFJhdGUgPSAx
OyAvLyB6ZXJvIHJhdGUgaXMgY29uc2lkZXJlZCBpbGxlZ2FsCi0gICAgdG90YWxSYXRlID0gbWlu
KE1heFJhdGUsIHRvdGFsUmF0ZSk7Ci0gICAgCi0gICAgYm9vbCBpc1RvdGFsUmF0ZVZhbGlkID0g
IWlzbmFuKHRvdGFsUmF0ZSkgJiYgIWlzaW5mKHRvdGFsUmF0ZSk7Ci0gICAgQVNTRVJUKGlzVG90
YWxSYXRlVmFsaWQpOwotICAgIGlmICghaXNUb3RhbFJhdGVWYWxpZCkKLSAgICAgICAgdG90YWxS
YXRlID0gMS4wOwotCi0gICAgcmV0dXJuIHRvdGFsUmF0ZTsKLX0KLQotYm9vbCBBdWRpb0J1ZmZl
clNvdXJjZU5vZGU6Omxvb3BpbmcoKQotewotICAgIHN0YXRpYyBib29sIGZpcnN0VGltZSA9IHRy
dWU7Ci0gICAgaWYgKGZpcnN0VGltZSAmJiBjb250ZXh0KCkgJiYgY29udGV4dCgpLT5kb2N1bWVu
dCgpKSB7Ci0gICAgICAgIGNvbnRleHQoKS0+ZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2Uo
SlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgV2FybmluZ01lc3NhZ2VMZXZlbCwgIkF1
ZGlvQnVmZmVyU291cmNlTm9kZSAnbG9vcGluZycgYXR0cmlidXRlIGlzIGRlcHJlY2F0ZWQuICBV
c2UgJ2xvb3AnIGluc3RlYWQuIik7Ci0gICAgICAgIGZpcnN0VGltZSA9IGZhbHNlOwotICAgIH0K
LQotICAgIHJldHVybiBtX2lzTG9vcGluZzsKLX0KLQotdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5v
ZGU6OnNldExvb3BpbmcoYm9vbCBsb29waW5nKQotewotICAgIHN0YXRpYyBib29sIGZpcnN0VGlt
ZSA9IHRydWU7Ci0gICAgaWYgKGZpcnN0VGltZSAmJiBjb250ZXh0KCkgJiYgY29udGV4dCgpLT5k
b2N1bWVudCgpKSB7Ci0gICAgICAgIGNvbnRleHQoKS0+ZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1l
c3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgV2FybmluZ01lc3NhZ2VMZXZl
bCwgIkF1ZGlvQnVmZmVyU291cmNlTm9kZSAnbG9vcGluZycgYXR0cmlidXRlIGlzIGRlcHJlY2F0
ZWQuICBVc2UgJ2xvb3AnIGluc3RlYWQuIik7Ci0gICAgICAgIGZpcnN0VGltZSA9IGZhbHNlOwot
ICAgIH0KLQotICAgIG1faXNMb29waW5nID0gbG9vcGluZzsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5oCShyZXZpc2lvbiAxMTEy
MDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSwxNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQXVk
aW9CdWZmZXJTb3VyY2VOb2RlX2gKLSNkZWZpbmUgQXVkaW9CdWZmZXJTb3VyY2VOb2RlX2gKLQot
I2luY2x1ZGUgIkF1ZGlvQnVmZmVyLmgiCi0jaW5jbHVkZSAiQXVkaW9CdXMuaCIKLSNpbmNsdWRl
ICJBdWRpb0dhaW4uaCIKLSNpbmNsdWRlICJBdWRpb1Bhbm5lck5vZGUuaCIKLSNpbmNsdWRlICJB
dWRpb1NvdXJjZU5vZGUuaCIKLSNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9Db250
ZXh0OwotCi0vLyBBdWRpb0J1ZmZlclNvdXJjZU5vZGUgaXMgYW4gQXVkaW9Ob2RlIHJlcHJlc2Vu
dGluZyBhbiBhdWRpbyBzb3VyY2UgZnJvbSBhbiBpbi1tZW1vcnkgYXVkaW8gYXNzZXQgcmVwcmVz
ZW50ZWQgYnkgYW4gQXVkaW9CdWZmZXIuCi0vLyBJdCBnZW5lcmFsbHkgd2lsbCBiZSB1c2VkIGZv
ciBzaG9ydCBzb3VuZHMgd2hpY2ggcmVxdWlyZSBhIGhpZ2ggZGVncmVlIG9mIHNjaGVkdWxpbmcg
ZmxleGliaWxpdHkgKGNhbiBwbGF5YmFjayBpbiByaHl0aG1pY2FsbHkgcGVyZmVjdCB3YXlzKS4K
LQotY2xhc3MgQXVkaW9CdWZmZXJTb3VyY2VOb2RlIDogcHVibGljIEF1ZGlvU291cmNlTm9kZSB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJTb3VyY2VOb2RlPiBj
cmVhdGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7Ci0KLSAgICB2aXJ0dWFsIH5B
dWRpb0J1ZmZlclNvdXJjZU5vZGUoKTsKLSAgICAKLSAgICAvLyBBdWRpb05vZGUKLSAgICB2aXJ0
dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVzZXQoKTsKLSAgICAKLSAgICAvLyBzZXRCdWZmZXIoKSBpcyBjYWxsZWQgb24gdGhlIG1h
aW4gdGhyZWFkLiAgVGhpcyBpcyB0aGUgYnVmZmVyIHdlIHVzZSBmb3IgcGxheWJhY2suCi0gICAg
Ly8gcmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuCi0gICAgYm9vbCBzZXRCdWZmZXIoQXVkaW9CdWZm
ZXIqKTsKLSAgICBBdWRpb0J1ZmZlciogYnVmZmVyKCkgeyByZXR1cm4gbV9idWZmZXIuZ2V0KCk7
IH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgLy8gbnVtYmVyT2ZDaGFubmVscygpIHJldHVy
bnMgdGhlIG51bWJlciBvZiBvdXRwdXQgY2hhbm5lbHMuICBUaGlzIHZhbHVlIGVxdWFscyB0aGUg
bnVtYmVyIG9mIGNoYW5uZWxzIGZyb20gdGhlIGJ1ZmZlci4KLSAgICAvLyBJZiBhIG5ldyBidWZm
ZXIgaXMgc2V0IHdpdGggYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGNoYW5uZWxzLCB0aGVuIHRoaXMg
dmFsdWUgd2lsbCBkeW5hbWljYWxseSBjaGFuZ2UuCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFu
bmVscygpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAvLyBQbGF5LXN0YXRlCi0gICAgLy8g
bm90ZU9uKCksIG5vdGVHcmFpbk9uKCksIGFuZCBub3RlT2ZmKCkgbXVzdCBhbGwgYmUgY2FsbGVk
IGZyb20gdGhlIG1haW4gdGhyZWFkLgotICAgIHZvaWQgbm90ZU9uKGRvdWJsZSB3aGVuKTsKLSAg
ICB2b2lkIG5vdGVHcmFpbk9uKGRvdWJsZSB3aGVuLCBkb3VibGUgZ3JhaW5PZmZzZXQsIGRvdWJs
ZSBncmFpbkR1cmF0aW9uKTsKLSAgICB2b2lkIG5vdGVPZmYoZG91YmxlIHdoZW4pOwotCi0gICAg
Ly8gTm90ZTogdGhlIGF0dHJpYnV0ZSB3YXMgb3JpZ2luYWxseSBleHBvc2VkIGFzIC5sb29waW5n
LCBidXQgdG8gYmUgbW9yZSBjb25zaXN0ZW50IGluIG5hbWluZyB3aXRoIDxhdWRpbz4KLSAgICAv
LyBhbmQgd2l0aCBob3cgaXQncyBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmljYXRpb24sIHRoZSBw
cm9wZXIgYXR0cmlidXRlIG5hbWUgaXMgLmxvb3AKLSAgICAvLyBUaGUgb2xkIGF0dHJpYnV0ZSBp
cyBrZXB0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KLSAgICBib29sIGxvb3AoKSBjb25z
dCB7IHJldHVybiBtX2lzTG9vcGluZzsgfQotICAgIHZvaWQgc2V0TG9vcChib29sIGxvb3Bpbmcp
IHsgbV9pc0xvb3BpbmcgPSBsb29waW5nOyB9Ci0KLSAgICAvLyBEZXByZWNhdGVkLgotICAgIGJv
b2wgbG9vcGluZygpOwotICAgIHZvaWQgc2V0TG9vcGluZyhib29sKTsKLSAgICAKLSAgICBBdWRp
b0dhaW4qIGdhaW4oKSB7IHJldHVybiBtX2dhaW4uZ2V0KCk7IH0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgQXVkaW9QYXJhbSogcGxheWJhY2tSYXRlKCkgeyBy
ZXR1cm4gbV9wbGF5YmFja1JhdGUuZ2V0KCk7IH0KLQotICAgIC8vIElmIGEgcGFubmVyIG5vZGUg
aXMgc2V0LCB0aGVuIHdlIGNhbiBpbmNvcnBvcmF0ZSBkb3BwbGVyIHNoaWZ0IGludG8gdGhlIHBs
YXliYWNrIHBpdGNoIHJhdGUuCi0gICAgdm9pZCBzZXRQYW5uZXJOb2RlKFBhc3NSZWZQdHI8QXVk
aW9QYW5uZXJOb2RlPiBwYW5uZXJOb2RlKSB7IG1fcGFubmVyTm9kZSA9IHBhbm5lck5vZGU7IH0K
LQotcHJpdmF0ZToKLSAgICBBdWRpb0J1ZmZlclNvdXJjZU5vZGUoQXVkaW9Db250ZXh0KiwgZmxv
YXQgc2FtcGxlUmF0ZSk7Ci0KLSAgICB2b2lkIHJlbmRlckZyb21CdWZmZXIoQXVkaW9CdXMqLCB1
bnNpZ25lZCBkZXN0aW5hdGlvbkZyYW1lT2Zmc2V0LCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMpOwot
Ci0gICAgLy8gUmVuZGVyIHNpbGVuY2Ugc3RhcnRpbmcgZnJvbSAiaW5kZXgiIGZyYW1lIGluIEF1
ZGlvQnVzLgotICAgIGlubGluZSBib29sIHJlbmRlclNpbGVuY2VBbmRGaW5pc2hJZk5vdExvb3Bp
bmcoQXVkaW9CdXMqLCB1bnNpZ25lZCBpbmRleCwgc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7Ci0K
LSAgICAvLyBtX2J1ZmZlciBob2xkcyB0aGUgc2FtcGxlIGRhdGEgd2hpY2ggdGhpcyBub2RlIG91
dHB1dHMuCi0gICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBtX2J1ZmZlcjsKLQotICAgIC8vIFBvaW50
ZXJzIGZvciB0aGUgYnVmZmVyIGFuZCBkZXN0aW5hdGlvbi4KLSAgICBPd25BcnJheVB0cjxjb25z
dCBmbG9hdCo+IG1fc291cmNlQ2hhbm5lbHM7Ci0gICAgT3duQXJyYXlQdHI8ZmxvYXQqPiBtX2Rl
c3RpbmF0aW9uQ2hhbm5lbHM7Ci0KLSAgICAvLyBVc2VkIGZvciB0aGUgImdhaW4iIGFuZCAicGxh
eWJhY2tSYXRlIiBhdHRyaWJ1dGVzLgotICAgIFJlZlB0cjxBdWRpb0dhaW4+IG1fZ2FpbjsKLSAg
ICBSZWZQdHI8QXVkaW9QYXJhbT4gbV9wbGF5YmFja1JhdGU7Ci0KLSAgICAvLyBtX2lzUGxheWlu
ZyBpcyBzZXQgdG8gdHJ1ZSB3aGVuIG5vdGVPbigpIG9yIG5vdGVHcmFpbk9uKCkgaXMgY2FsbGVk
LgotICAgIGJvb2wgbV9pc1BsYXlpbmc7Ci0KLSAgICAvLyBJZiBtX2lzTG9vcGluZyBpcyBmYWxz
ZSwgdGhlbiB0aGlzIG5vZGUgd2lsbCBiZSBkb25lIHBsYXlpbmcgYW5kIGJlY29tZSBpbmFjdGl2
ZSBhZnRlciBpdCByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIHNhbXBsZSBkYXRhIGluIHRoZSBidWZm
ZXIuCi0gICAgLy8gSWYgdHJ1ZSwgaXQgd2lsbCB3cmFwIGFyb3VuZCB0byB0aGUgc3RhcnQgb2Yg
dGhlIGJ1ZmZlciBlYWNoIHRpbWUgaXQgcmVhY2hlcyB0aGUgZW5kLgotICAgIGJvb2wgbV9pc0xv
b3Bpbmc7Ci0KLSAgICAvLyBUaGlzIG5vZGUgaXMgY29uc2lkZXJlZCBmaW5pc2hlZCB3aGVuIGl0
IHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUgYnVmZmVyJ3Mgc2FtcGxlIGRhdGEgYWZ0ZXIgbm90ZU9u
KCkgaGFzIGJlZW4gY2FsbGVkLgotICAgIC8vIFRoaXMgd2lsbCBvbmx5IGJlIHNldCB0byB0cnVl
IGlmIG1faXNMb29waW5nID09IGZhbHNlLgotICAgIGJvb2wgbV9oYXNGaW5pc2hlZDsKLQotICAg
IC8vIG1fc3RhcnRUaW1lIGlzIHRoZSB0aW1lIHRvIHN0YXJ0IHBsYXlpbmcgYmFzZWQgb24gdGhl
IGNvbnRleHQncyB0aW1lbGluZSAoMC4wIG9yIGEgdGltZSBsZXNzIHRoYW4gdGhlIGNvbnRleHQn
cyBjdXJyZW50IHRpbWUgbWVhbnMgIm5vdyIpLgotICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsgLy8g
aW4gc2Vjb25kcwotCi0gICAgLy8gbV9lbmRUaW1lIGlzIHRoZSB0aW1lIHRvIHN0b3AgcGxheWlu
ZyBiYXNlZCBvbiB0aGUgY29udGV4dCdzIHRpbWVsaW5lICgwLjAgb3IgYSB0aW1lIGxlc3MgdGhh
biB0aGUgY29udGV4dCdzIGN1cnJlbnQgdGltZSBtZWFucyAibm93IikuCi0gICAgLy8gSWYgaXQg
aGFzbid0IGJlZW4gc2V0IGV4cGxpY2l0bHksIHRoZW4gdGhlIHNvdW5kIHdpbGwgbm90IHN0b3Ag
cGxheWluZyAoaWYgbG9vcGluZykgb3Igd2lsbCBzdG9wIHdoZW4gdGhlIGVuZCBvZiB0aGUgQXVk
aW9CdWZmZXIKLSAgICAvLyBoYXMgYmVlbiByZWFjaGVkLgotICAgIGRvdWJsZSBtX2VuZFRpbWU7
IC8vIGluIHNlY29uZHMKLSAgICAKLSAgICAvLyBtX3ZpcnR1YWxSZWFkSW5kZXggaXMgYSBzYW1w
bGUtZnJhbWUgaW5kZXggaW50byBvdXIgYnVmZmVyIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBw
bGF5YmFjayBwb3NpdGlvbi4KLSAgICAvLyBTaW5jZSBpdCdzIGZsb2F0aW5nLXBvaW50LCBpdCBo
YXMgc3ViLXNhbXBsZSBhY2N1cmFjeS4KLSAgICBkb3VibGUgbV92aXJ0dWFsUmVhZEluZGV4Owot
Ci0gICAgLy8gR3JhbnVsYXIgcGxheWJhY2sKLSAgICBib29sIG1faXNHcmFpbjsKLSAgICBkb3Vi
bGUgbV9ncmFpbk9mZnNldDsgLy8gaW4gc2Vjb25kcwotICAgIGRvdWJsZSBtX2dyYWluRHVyYXRp
b247IC8vIGluIHNlY29uZHMKLQotICAgIC8vIHRvdGFsUGl0Y2hSYXRlKCkgcmV0dXJucyB0aGUg
aW5zdGFudGFuZW91cyBwaXRjaCByYXRlIChub24tdGltZSBwcmVzZXJ2aW5nKS4KLSAgICAvLyBJ
dCBpbmNvcnBvcmF0ZXMgdGhlIGJhc2UgcGl0Y2ggcmF0ZSwgYW55IHNhbXBsZS1yYXRlIGNvbnZl
cnNpb24gZmFjdG9yIGZyb20gdGhlIGJ1ZmZlciwgYW5kIGFueSBkb3BwbGVyIHNoaWZ0IGZyb20g
YW4gYXNzb2NpYXRlZCBwYW5uZXIgbm9kZS4KLSAgICBkb3VibGUgdG90YWxQaXRjaFJhdGUoKTsK
LQotICAgIC8vIG1fbGFzdEdhaW4gcHJvdmlkZXMgY29udGludWl0eSB3aGVuIHdlIGR5bmFtaWNh
bGx5IGFkanVzdCB0aGUgZ2Fpbi4KLSAgICBmbG9hdCBtX2xhc3RHYWluOwotICAgIAotICAgIC8v
IFdlIG9wdGlvbmFsbHkga2VlcCB0cmFjayBvZiBhIHBhbm5lciBub2RlIHdoaWNoIGhhcyBhIGRv
cHBsZXIgc2hpZnQgdGhhdCBpcyBpbmNvcnBvcmF0ZWQgaW50byB0aGUgcGl0Y2ggcmF0ZS4KLSAg
ICBSZWZQdHI8QXVkaW9QYW5uZXJOb2RlPiBtX3Bhbm5lck5vZGU7Ci0KLSAgICAvLyBUaGlzIHN5
bmNocm9uaXplcyBwcm9jZXNzKCkgd2l0aCBzZXRCdWZmZXIoKSB3aGljaCBjYW4gY2F1c2UgZHlu
YW1pYyBjaGFubmVsIGNvdW50IGNoYW5nZXMuCi0gICAgbXV0YWJsZSBNdXRleCBtX3Byb2Nlc3NM
b2NrOwotCi0gICAgLy8gSGFuZGxlcyB0aGUgdGltZSB3aGVuIHdlIHJlYWNoIHRoZSBlbmQgb2Yg
c2FtcGxlIGRhdGEgKG5vbi1sb29waW5nKSBvciB0aGUgbm90ZU9mZigpIHRpbWUgaGFzIGJlZW4g
cmVhY2hlZC4KLSAgICB2b2lkIGZpbmlzaCgpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gQXVkaW9CdWZmZXJTb3VyY2VOb2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlkbAkocmV2aXNpb24g
MTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2Rl
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxl
IGF1ZGlvIHsKLSAgICAvLyBBIGNhY2hlZCAobm9uLXN0cmVhbWVkKSwgbWVtb3J5LXJlc2lkZW50
IGF1ZGlvIHNvdXJjZQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9B
VURJTywKLSAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKLSAgICBdIEF1ZGlvQnVmZmVyU291
cmNlTm9kZSA6IEF1ZGlvU291cmNlTm9kZSB7Ci0gICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tU2V0
dGVyXSBBdWRpb0J1ZmZlciBidWZmZXIKLSAgICAgICAgICAgIHNldHRlciByYWlzZXMgKERPTUV4
Y2VwdGlvbik7Ci0KLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlvR2FpbiBnYWluOwot
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9QYXJhbSBwbGF5YmFja1JhdGU7Ci0KLSAg
ICAgICAgYXR0cmlidXRlIGJvb2xlYW4gbG9vcDsgLy8gVGhpcyBpcyB0aGUgcHJvcGVyIGF0dHJp
YnV0ZSBuYW1lIGZyb20gdGhlIHNwZWNpZmljYXRpb24uCi0gICAgICAgIGF0dHJpYnV0ZSBib29s
ZWFuIGxvb3Bpbmc7IC8vIFRoaXMgaXMgYW4gYWxpYXMgZm9yIHRoZSAubG9vcCBhdHRyaWJ1dGUg
Zm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgotCi0gICAgICAgIHZvaWQgbm90ZU9uKGluIGRv
dWJsZSB3aGVuKTsKLSAgICAgICAgdm9pZCBub3RlR3JhaW5PbihpbiBkb3VibGUgd2hlbiwgaW4g
ZG91YmxlIGdyYWluT2Zmc2V0LCBpbiBkb3VibGUgZ3JhaW5EdXJhdGlvbik7Ci0gICAgICAgIHZv
aWQgbm90ZU9mZihpbiBkb3VibGUgd2hlbik7Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmNwcAkocmV2aXNpb24gMTExMjA4
KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwxMTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lm
IEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJBdWRpb0NoYW5uZWxNZXJnZXIuaCIKLQot
I2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0LmgiCi0j
aW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAK
LS8vIFRoaXMgaXMgY29uc2lkZXJpbmcgdGhhdCA1LjEgKDYgY2hhbm5lbHMpIGlzIHRoZSBsYXJn
ZXN0IHdlJ2xsIGV2ZXIgZGVhbCB3aXRoLgotLy8gSXQgY2FuIGVhc2lseSBiZSBpbmNyZWFzZWQg
dG8gc3VwcG9ydCBtb3JlIGlmIHRoZSB3ZWIgYXVkaW8gc3BlY2lmaWNhdGlvbiBpcyB1cGRhdGVk
LgotY29uc3QgdW5zaWduZWQgTnVtYmVyT2ZJbnB1dHMgPSA2OwotCi1BdWRpb0NoYW5uZWxNZXJn
ZXI6OkF1ZGlvQ2hhbm5lbE1lcmdlcihBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBs
ZVJhdGUpCi0gICAgOiBBdWRpb05vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkKLXsKLSAgICAvLyBD
cmVhdGUgYSBmaXhlZCBudW1iZXIgb2YgaW5wdXRzIChhYmxlIHRvIGhhbmRsZSB0aGUgbWF4aW11
bSBudW1iZXIgb2YgY2hhbm5lbHMgd2UgZGVhbCB3aXRoKS4KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgTnVtYmVyT2ZJbnB1dHM7ICsraSkKLSAgICAgICAgYWRkSW5wdXQoYWRvcHRQdHIo
bmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7Ci0KLSAgICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3
IEF1ZGlvTm9kZU91dHB1dCh0aGlzLCAxKSkpOwotICAgIAotICAgIHNldE5vZGVUeXBlKE5vZGVU
eXBlQ2hhbm5lbE1lcmdlcik7Ci0gICAgCi0gICAgaW5pdGlhbGl6ZSgpOwotfQotCi12b2lkIEF1
ZGlvQ2hhbm5lbE1lcmdlcjo6cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAg
IEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0ID0gdGhpcy0+b3V0cHV0KDApOwotICAgIEFTU0VSVChv
dXRwdXQpOwotICAgIEFTU0VSVF9VTlVTRUQoZnJhbWVzVG9Qcm9jZXNzLCBmcmFtZXNUb1Byb2Nl
c3MgPT0gb3V0cHV0LT5idXMoKS0+bGVuZ3RoKCkpOyAgICAKLSAgICAKLSAgICAvLyBNZXJnZSBh
bGwgdGhlIGNoYW5uZWxzIGZyb20gYWxsIHRoZSBpbnB1dHMgaW50byBvbmUgb3V0cHV0LgotICAg
IHVuc2lnbmVkIG91dHB1dENoYW5uZWxJbmRleCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bWJlck9mSW5wdXRzKCk7ICsraSkgewotICAgICAgICBBdWRpb05vZGVJbnB1dCog
aW5wdXQgPSB0aGlzLT5pbnB1dChpKTsKLSAgICAgICAgaWYgKGlucHV0LT5pc0Nvbm5lY3RlZCgp
KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZklucHV0Q2hhbm5lbHMgPSBpbnB1dC0+
YnVzKCktPm51bWJlck9mQ2hhbm5lbHMoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8g
TWVyZ2UgY2hhbm5lbHMgZnJvbSB0aGlzIHBhcnRpY3VsYXIgaW5wdXQuCi0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbnVtYmVyT2ZJbnB1dENoYW5uZWxzOyArK2opIHsKLSAg
ICAgICAgICAgICAgICBBdWRpb0NoYW5uZWwqIGlucHV0Q2hhbm5lbCA9IGlucHV0LT5idXMoKS0+
Y2hhbm5lbChqKTsKLSAgICAgICAgICAgICAgICBBdWRpb0NoYW5uZWwqIG91dHB1dENoYW5uZWwg
PSBvdXRwdXQtPmJ1cygpLT5jaGFubmVsKG91dHB1dENoYW5uZWxJbmRleCk7Ci0gICAgICAgICAg
ICAgICAgb3V0cHV0Q2hhbm5lbC0+Y29weUZyb20oaW5wdXRDaGFubmVsKTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICArK291dHB1dENoYW5uZWxJbmRleDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBBU1NFUlQob3V0cHV0Q2hhbm5lbEluZGV4
ID09IG91dHB1dC0+bnVtYmVyT2ZDaGFubmVscygpKTsKLX0KLQotdm9pZCBBdWRpb0NoYW5uZWxN
ZXJnZXI6OnJlc2V0KCkKLXsKLX0KLQotLy8gQW55IHRpbWUgYSBjb25uZWN0aW9uIG9yIGRpc2Nv
bm5lY3Rpb24gaGFwcGVucyBvbiBhbnkgb2Ygb3VyIGlucHV0cywgd2UgcG90ZW50aWFsbHkgbmVl
ZCB0byBjaGFuZ2UgdGhlCi0vLyBudW1iZXIgb2YgY2hhbm5lbHMgb2Ygb3VyIG91dHB1dC4KLXZv
aWQgQXVkaW9DaGFubmVsTWVyZ2VyOjpjaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1dChBdWRp
b05vZGVJbnB1dCogaW5wdXQpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1RocmVh
ZCgpICYmIGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOwotCi0gICAgLy8gQ291bnQgaG93IG1h
bnkgY2hhbm5lbHMgd2UgaGF2ZSBhbGwgdG9nZXRoZXIgZnJvbSBhbGwgb2YgdGhlIGlucHV0cy4K
LSAgICB1bnNpZ25lZCBudW1iZXJPZk91dHB1dENoYW5uZWxzID0gMDsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZJbnB1dHMoKTsgKytpKSB7Ci0gICAgICAgIEF1ZGlvTm9k
ZUlucHV0KiBpbnB1dCA9IHRoaXMtPmlucHV0KGkpOwotICAgICAgICBpZiAoaW5wdXQtPmlzQ29u
bmVjdGVkKCkpCi0gICAgICAgICAgICBudW1iZXJPZk91dHB1dENoYW5uZWxzICs9IGlucHV0LT5i
dXMoKS0+bnVtYmVyT2ZDaGFubmVscygpOwotICAgIH0KLQotICAgIC8vIFNldCB0aGUgY29ycmVj
dCBudW1iZXIgb2YgY2hhbm5lbHMgb24gdGhlIG91dHB1dAotICAgIEF1ZGlvTm9kZU91dHB1dCog
b3V0cHV0ID0gdGhpcy0+b3V0cHV0KDApOwotICAgIEFTU0VSVChvdXRwdXQpOwotICAgIG91dHB1
dC0+c2V0TnVtYmVyT2ZDaGFubmVscyhudW1iZXJPZk91dHB1dENoYW5uZWxzKTsKLQotICAgIEF1
ZGlvTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQoaW5wdXQpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDog
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmgJKHJldmlzaW9u
IDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEF1ZGlvQ2hhbm5lbE1l
cmdlcl9oCi0jZGVmaW5lIEF1ZGlvQ2hhbm5lbE1lcmdlcl9oCi0KLSNpbmNsdWRlICJBdWRpb05v
ZGUuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEF1ZGlvQ29udGV4dDsKLSAgICAKLWNsYXNzIEF1ZGlvQ2hhbm5lbE1lcmdlciA6
IHB1YmxpYyBBdWRpb05vZGUgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlv
Q2hhbm5lbE1lcmdlcj4gY3JlYXRlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxl
UmF0ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVkaW9DaGFubmVsTWVy
Z2VyKGNvbnRleHQsIHNhbXBsZVJhdGUpKTsgICAgICAKLSAgICB9Ci0KLSAgICAvLyBBdWRpb05v
ZGUKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKLQotICAgIC8vIENhbGxlZCBpbiB0aGUgYXVkaW8gdGhy
ZWFkIChwcmUtcmVuZGVyaW5nIHRhc2spIHdoZW4gdGhlIG51bWJlciBvZiBjaGFubmVscyBmb3Ig
YW4gaW5wdXQgbWF5IGhhdmUgY2hhbmdlZC4KLSAgICB2aXJ0dWFsIHZvaWQgY2hlY2tOdW1iZXJP
ZkNoYW5uZWxzRm9ySW5wdXQoQXVkaW9Ob2RlSW5wdXQqKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0
dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KLSAgICB2
aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0K
LQotICAgIEF1ZGlvQ2hhbm5lbE1lcmdlcihBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRl
KTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEF1ZGlvQ2hhbm5l
bE1lcmdlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJn
ZXIuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5l
bE1lcmdlci5pZGwJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvQ2hhbm5lbE1lcmdlci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
Ci0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LW1vZHVsZSBhdWRpbyB7Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9V0VC
X0FVRElPCi0gICAgXSBBdWRpb0NoYW5uZWxNZXJnZXIgOiBBdWRpb05vZGUgewotICAgIH07Ci19
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0
ZXIuY3BwCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b0NoYW5uZWxTcGxpdHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0K
LSNpbmNsdWRlICJBdWRpb0NoYW5uZWxTcGxpdHRlci5oIgotCi0jaW5jbHVkZSAiQXVkaW9Ob2Rl
SW5wdXQuaCIKLSNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotICAgIAotLy8gVGhpcyBpcyBjb25zaWRlcmluZyB0aGF0IDUuMSAoNiBjaGFubmVscykg
aXMgdGhlIGxhcmdlc3Qgd2UnbGwgZXZlciBkZWFsIHdpdGguCi0vLyBJdCBjYW4gZWFzaWx5IGJl
IGluY3JlYXNlZCB0byBzdXBwb3J0IG1vcmUgaWYgdGhlIHdlYiBhdWRpbyBzcGVjaWZpY2F0aW9u
IGlzIHVwZGF0ZWQuCi1jb25zdCB1bnNpZ25lZCBOdW1iZXJPZk91dHB1dHMgPSA2OwotCi1BdWRp
b0NoYW5uZWxTcGxpdHRlcjo6QXVkaW9DaGFubmVsU3BsaXR0ZXIoQXVkaW9Db250ZXh0KiBjb250
ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJh
dGUpCi17Ci0gICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7
Ci0KLSAgICAvLyBDcmVhdGUgYSBmaXhlZCBudW1iZXIgb2Ygb3V0cHV0cyAoYWJsZSB0byBoYW5k
bGUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYW5uZWxzIGZlZCB0byBhbiBpbnB1dCkuCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE51bWJlck9mT3V0cHV0czsgKytpKQotICAgICAgICBh
ZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZU91dHB1dCh0aGlzLCAxKSkpOwotICAgIAot
ICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlQ2hhbm5lbFNwbGl0dGVyKTsKLSAgICAKLSAgICBpbml0
aWFsaXplKCk7Ci19Ci0KLXZvaWQgQXVkaW9DaGFubmVsU3BsaXR0ZXI6OnByb2Nlc3Moc2l6ZV90
IGZyYW1lc1RvUHJvY2VzcykKLXsKLSAgICBBdWRpb0J1cyogc291cmNlID0gaW5wdXQoMCktPmJ1
cygpOwotICAgIEFTU0VSVChzb3VyY2UpOwotICAgIEFTU0VSVF9VTlVTRUQoZnJhbWVzVG9Qcm9j
ZXNzLCBmcmFtZXNUb1Byb2Nlc3MgPT0gc291cmNlLT5sZW5ndGgoKSk7Ci0gICAgCi0gICAgdW5z
aWduZWQgbnVtYmVyT2ZTb3VyY2VDaGFubmVscyA9IHNvdXJjZS0+bnVtYmVyT2ZDaGFubmVscygp
OwotICAgIAotICAgIEFTU0VSVChudW1iZXJPZk91dHB1dHMoKSA9PSBOdW1iZXJPZk91dHB1dHMp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOdW1iZXJPZk91dHB1dHM7ICsraSkgewot
ICAgICAgICBBdWRpb0J1cyogZGVzdGluYXRpb24gPSBvdXRwdXQoaSktPmJ1cygpOwotICAgICAg
ICBBU1NFUlQoZGVzdGluYXRpb24pOwotICAgICAgICAKLSAgICAgICAgaWYgKGkgPCBudW1iZXJP
ZlNvdXJjZUNoYW5uZWxzKSB7Ci0gICAgICAgICAgICAvLyBTcGxpdCB0aGUgY2hhbm5lbCBvdXQg
aWYgaXQgZXhpc3RzIGluIHRoZSBzb3VyY2UuCi0gICAgICAgICAgICAvLyBJdCB3b3VsZCBiZSBu
aWNlIHRvIGF2b2lkIHRoZSBjb3B5IGFuZCBzaW1wbHkgcGFzcyBhbG9uZyBwb2ludGVycywgYnV0
IHRoaXMgYmVjb21lcyBleHRyZW1lbHkgZGlmZmljdWx0IHdpdGggZmFub3V0IGFuZCBmYW5pbi4K
LSAgICAgICAgICAgIGRlc3RpbmF0aW9uLT5jaGFubmVsKDApLT5jb3B5RnJvbShzb3VyY2UtPmNo
YW5uZWwoaSkpOwotICAgICAgICB9IGVsc2UgaWYgKG91dHB1dChpKS0+cmVuZGVyaW5nRmFuT3V0
Q291bnQoKSA+IDApIHsKLSAgICAgICAgICAgIC8vIE9ubHkgYm90aGVyIHplcm9pbmcgb3V0IHRo
ZSBkZXN0aW5hdGlvbiBpZiBpdCdzIGNvbm5lY3RlZCB0byBhbnl0aGluZwotICAgICAgICAgICAg
ZGVzdGluYXRpb24tPnplcm8oKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBBdWRpb0No
YW5uZWxTcGxpdHRlcjo6cmVzZXQoKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5oCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEF1ZGlvQ2hhbm5lbFNwbGl0
dGVyX2gKLSNkZWZpbmUgQXVkaW9DaGFubmVsU3BsaXR0ZXJfaAotCi0jaW5jbHVkZSAiQXVkaW9O
b2RlLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBBdWRpb0NvbnRleHQ7Ci0gICAgCi1jbGFzcyBBdWRpb0NoYW5uZWxTcGxpdHRl
ciA6IHB1YmxpYyBBdWRpb05vZGUgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1
ZGlvQ2hhbm5lbFNwbGl0dGVyPiBjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBz
YW1wbGVSYXRlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBdWRpb0NoYW5u
ZWxTcGxpdHRlcihjb250ZXh0LCBzYW1wbGVSYXRlKSk7ICAgICAgCi0gICAgfQotCi0gICAgLy8g
QXVkaW9Ob2RlCi0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2Vz
cyk7Ci0gICAgdmlydHVhbCB2b2lkIHJlc2V0KCk7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBk
b3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVh
bCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9Ci0KLSAg
ICBBdWRpb0NoYW5uZWxTcGxpdHRlcihBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEF1ZGlvQ2hhbm5lbFNw
bGl0dGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0
dGVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5u
ZWxTcGxpdHRlci5pZGwJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzMCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGF1ZGlvIHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAg
ICBDb25kaXRpb25hbD1XRUJfQVVESU8KLSAgICBdIEF1ZGlvQ2hhbm5lbFNwbGl0dGVyIDogQXVk
aW9Ob2RlIHsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9D
b250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Nv
bnRleHQuY3BwCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9B
dWRpb0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc4NiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2lu
Y2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgotCi0jaW5jbHVkZSAiQXN5bmNBdWRpb0RlY29kZXIuaCIK
LSNpbmNsdWRlICJBdWRpb0J1ZmZlci5oIgotI2luY2x1ZGUgIkF1ZGlvQnVmZmVyQ2FsbGJhY2su
aCIKLSNpbmNsdWRlICJBdWRpb0J1ZmZlclNvdXJjZU5vZGUuaCIKLSNpbmNsdWRlICJBdWRpb0No
YW5uZWxNZXJnZXIuaCIKLSNpbmNsdWRlICJBdWRpb0NoYW5uZWxTcGxpdHRlci5oIgotI2luY2x1
ZGUgIkF1ZGlvR2Fpbk5vZGUuaCIKLSNpbmNsdWRlICJBdWRpb0xpc3RlbmVyLmgiCi0jaW5jbHVk
ZSAiQXVkaW9Ob2RlSW5wdXQuaCIKLSNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKLSNpbmNs
dWRlICJBdWRpb1Bhbm5lck5vZGUuaCIKLSNpbmNsdWRlICJCaXF1YWRGaWx0ZXJOb2RlLmgiCi0j
aW5jbHVkZSAiQ29udm9sdmVyTm9kZS5oIgotI2luY2x1ZGUgIkRlZmF1bHRBdWRpb0Rlc3RpbmF0
aW9uTm9kZS5oIgotI2luY2x1ZGUgIkRlbGF5Tm9kZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiRHluYW1pY3NDb21wcmVzc29yTm9kZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKLSNpbmNsdWRlICJGRlRGcmFtZS5oIgotI2luY2x1ZGUgIkhSVEZEYXRhYmFzZUxv
YWRlci5oIgotI2luY2x1ZGUgIkhSVEZQYW5uZXIuaCIKLSNpbmNsdWRlICJIaWdoUGFzczJGaWx0
ZXJOb2RlLmgiCi0jaW5jbHVkZSAiSmF2YVNjcmlwdEF1ZGlvTm9kZS5oIgotI2luY2x1ZGUgIkxv
d1Bhc3MyRmlsdGVyTm9kZS5oIgotI2luY2x1ZGUgIk9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVu
dC5oIgotI2luY2x1ZGUgIk9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgotI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiUmVhbHRpbWVBbmFseXNlck5vZGUuaCIKLSNp
bmNsdWRlICJXYXZlU2hhcGVyTm9kZS5oIgotI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgot
Ci0jaWYgRU5BQkxFKFZJREVPKQotI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNpbmNs
dWRlICJNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCIKLSNlbmRpZgotCi0jaWYgREVCVUdf
QVVESU9OT0RFX1JFRkVSRU5DRVMKLSNpbmNsdWRlIDxzdGRpby5oPgotI2VuZGlmCi0KLSNpbmNs
dWRlIDx3dGYvQXJyYXlCdWZmZXIuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLS8vIEZJWE1FOiBjaGVjayB0aGUgcHJvcGVyIHdheSB0
byByZWZlcmVuY2UgYW4gdW5kZWZpbmVkIHRocmVhZCBJRAotY29uc3QgaW50IFVuZGVmaW5lZFRo
cmVhZElkZW50aWZpZXIgPSAweGZmZmZmZmZmOwotCi1jb25zdCB1bnNpZ25lZCBNYXhOb2Rlc1Rv
RGVsZXRlUGVyUXVhbnR1bSA9IDEwOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1uYW1l
c3BhY2UgewotICAgIAotYm9vbCBpc1NhbXBsZVJhdGVSYW5nZUdvb2QoZmxvYXQgc2FtcGxlUmF0
ZSkKLXsKLSAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB0aGUgbWluaW11bSBzYW1w
bGUtcmF0ZSBjb3VsZCBiZSBsZXNzIHRoYW4gNDQuMUtIeiwKLSAgICAvLyBidXQgdGhhdCB3aWxs
IHJlcXVpcmUgc29tZSBmaXhlcyBpbiBIUlRGUGFubmVyOjpmZnRTaXplRm9yU2FtcGxlUmF0ZSgp
LCBhbmQgc29tZSB0ZXN0aW5nIHRoZXJlLgotICAgIHJldHVybiBzYW1wbGVSYXRlID49IDQ0MTAw
ICYmIHNhbXBsZVJhdGUgPD0gOTYwMDA7Ci19Ci0KLX0KLQotLy8gRG9uJ3QgYWxsb3cgbW9yZSB0
aGFuIHRoaXMgbnVtYmVyIG9mIHNpbXVsdGFuZW91cyBBdWRpb0NvbnRleHRzIHRhbGtpbmcgdG8g
aGFyZHdhcmUuCi1jb25zdCB1bnNpZ25lZCBNYXhIYXJkd2FyZUNvbnRleHRzID0gNDsKLXVuc2ln
bmVkIEF1ZGlvQ29udGV4dDo6c19oYXJkd2FyZUNvbnRleHRDb3VudCA9IDA7Ci0gICAgCi1QYXNz
UmVmUHRyPEF1ZGlvQ29udGV4dD4gQXVkaW9Db250ZXh0OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotCi0gICAg
QVNTRVJUKGRvY3VtZW50KTsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChz
X2hhcmR3YXJlQ29udGV4dENvdW50ID49IE1heEhhcmR3YXJlQ29udGV4dHMpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgUmVmUHRyPEF1ZGlvQ29udGV4dD4gYXVkaW9Db250ZXh0KGFkb3B0UmVm
KG5ldyBBdWRpb0NvbnRleHQoZG9jdW1lbnQpKSk7Ci0gICAgYXVkaW9Db250ZXh0LT5zdXNwZW5k
SWZOZWVkZWQoKTsKLSAgICByZXR1cm4gYXVkaW9Db250ZXh0LnJlbGVhc2UoKTsKLX0KLQotUGFz
c1JlZlB0cjxBdWRpb0NvbnRleHQ+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlT2ZmbGluZUNvbnRleHQo
RG9jdW1lbnQqIGRvY3VtZW50LCB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBzaXplX3QgbnVt
YmVyT2ZGcmFtZXMsIGZsb2F0IHNhbXBsZVJhdGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IEFTU0VSVChkb2N1bWVudCk7Ci0KLSAgICAvLyBGSVhNRTogb2ZmbGluZSBjb250ZXh0cyBoYXZl
IGxpbWl0YXRpb25zIG9uIHN1cHBvcnRlZCBzYW1wbGUtcmF0ZXMuCi0gICAgLy8gQ3VycmVudGx5
IGFsbCBBdWRpb0NvbnRleHRzIG11c3QgaGF2ZSB0aGUgc2FtZSBzYW1wbGUtcmF0ZS4KLSAgICBI
UlRGRGF0YWJhc2VMb2FkZXIqIGxvYWRlciA9IEhSVEZEYXRhYmFzZUxvYWRlcjo6bG9hZGVyKCk7
Ci0gICAgaWYgKG51bWJlck9mQ2hhbm5lbHMgPiAxMCB8fCAhaXNTYW1wbGVSYXRlUmFuZ2VHb29k
KHNhbXBsZVJhdGUpIHx8IChsb2FkZXIgJiYgbG9hZGVyLT5kYXRhYmFzZVNhbXBsZVJhdGUoKSAh
PSBzYW1wbGVSYXRlKSkgewotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIFJlZlB0cjxBdWRpb0NvbnRleHQ+IGF1ZGlvQ29udGV4dChuZXcg
QXVkaW9Db250ZXh0KGRvY3VtZW50LCBudW1iZXJPZkNoYW5uZWxzLCBudW1iZXJPZkZyYW1lcywg
c2FtcGxlUmF0ZSkpOwotICAgIGF1ZGlvQ29udGV4dC0+c3VzcGVuZElmTmVlZGVkKCk7Ci0gICAg
cmV0dXJuIGF1ZGlvQ29udGV4dC5yZWxlYXNlKCk7Ci19Ci0KLS8vIENvbnN0cnVjdG9yIGZvciBy
ZW5kZXJpbmcgdG8gdGhlIGF1ZGlvIGhhcmR3YXJlLgotQXVkaW9Db250ZXh0OjpBdWRpb0NvbnRl
eHQoRG9jdW1lbnQqIGRvY3VtZW50KQotICAgIDogQWN0aXZlRE9NT2JqZWN0KGRvY3VtZW50LCB0
aGlzKQotICAgICwgbV9pc0luaXRpYWxpemVkKGZhbHNlKQotICAgICwgbV9pc0F1ZGlvVGhyZWFk
RmluaXNoZWQoZmFsc2UpCi0gICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQotICAgICwgbV9kZXN0
aW5hdGlvbk5vZGUoMCkKLSAgICAsIG1faXNEZWxldGlvblNjaGVkdWxlZChmYWxzZSkKLSAgICAs
IG1fY29ubmVjdGlvbkNvdW50KDApCi0gICAgLCBtX2F1ZGlvVGhyZWFkKDApCi0gICAgLCBtX2dy
YXBoT3duZXJUaHJlYWQoVW5kZWZpbmVkVGhyZWFkSWRlbnRpZmllcikKLSAgICAsIG1faXNPZmZs
aW5lQ29udGV4dChmYWxzZSkKLXsKLSAgICBjb25zdHJ1Y3RDb21tb24oKTsKLQotICAgIG1fZGVz
dGluYXRpb25Ob2RlID0gRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjpjcmVhdGUodGhpcyk7
Ci0KLSAgICAvLyBUaGlzIHNldHMgaW4gbW90aW9uIGFuIGFzeW5jaHJvbm91cyBsb2FkaW5nIG1l
Y2hhbmlzbSBvbiBhbm90aGVyIHRocmVhZC4KLSAgICAvLyBXZSBjYW4gY2hlY2sgbV9ocnRmRGF0
YWJhc2VMb2FkZXItPmlzTG9hZGVkKCkgdG8gZmluZCBvdXQgd2hldGhlciBvciBub3QgaXQgaGFz
IGJlZW4gZnVsbHkgbG9hZGVkLgotICAgIC8vIEl0J3Mgbm90IHRoYXQgdXNlZnVsIHRvIGhhdmUg
YSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhpcyBzaW5jZSB0aGUgYXVkaW8gdGhyZWFkIGF1dG9t
YXRpY2FsbHkgc3RhcnRzIHJlbmRlcmluZyBvbiB0aGUgZ3JhcGgKLSAgICAvLyB3aGVuIHRoaXMg
aGFzIGZpbmlzaGVkIChzZWUgQXVkaW9EZXN0aW5hdGlvbk5vZGUpLgotICAgIG1faHJ0ZkRhdGFi
YXNlTG9hZGVyID0gSFJURkRhdGFiYXNlTG9hZGVyOjpjcmVhdGVBbmRMb2FkQXN5bmNocm9ub3Vz
bHlJZk5lY2Vzc2FyeShzYW1wbGVSYXRlKCkpOwotfQotCi0vLyBDb25zdHJ1Y3RvciBmb3Igb2Zm
bGluZSAobm9uLXJlYWx0aW1lKSByZW5kZXJpbmcuCi1BdWRpb0NvbnRleHQ6OkF1ZGlvQ29udGV4
dChEb2N1bWVudCogZG9jdW1lbnQsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBu
dW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICA6IEFjdGl2ZURPTU9iamVjdChk
b2N1bWVudCwgdGhpcykKLSAgICAsIG1faXNJbml0aWFsaXplZChmYWxzZSkKLSAgICAsIG1faXNB
dWRpb1RocmVhZEZpbmlzaGVkKGZhbHNlKQotICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKLSAg
ICAsIG1fZGVzdGluYXRpb25Ob2RlKDApCi0gICAgLCBtX2Nvbm5lY3Rpb25Db3VudCgwKQotICAg
ICwgbV9hdWRpb1RocmVhZCgwKQotICAgICwgbV9ncmFwaE93bmVyVGhyZWFkKFVuZGVmaW5lZFRo
cmVhZElkZW50aWZpZXIpCi0gICAgLCBtX2lzT2ZmbGluZUNvbnRleHQodHJ1ZSkKLXsKLSAgICBj
b25zdHJ1Y3RDb21tb24oKTsKLQotICAgIC8vIEZJWE1FOiB0aGUgcGFzc2VkIGluIHNhbXBsZVJh
dGUgTVVTVCBtYXRjaCB0aGUgaGFyZHdhcmUgc2FtcGxlLXJhdGUgc2luY2UgSFJURkRhdGFiYXNl
TG9hZGVyIGlzIGEgc2luZ2xldG9uLgotICAgIG1faHJ0ZkRhdGFiYXNlTG9hZGVyID0gSFJURkRh
dGFiYXNlTG9hZGVyOjpjcmVhdGVBbmRMb2FkQXN5bmNocm9ub3VzbHlJZk5lY2Vzc2FyeShzYW1w
bGVSYXRlKTsKLQotICAgIC8vIENyZWF0ZSBhIG5ldyBkZXN0aW5hdGlvbiBmb3Igb2ZmbGluZSBy
ZW5kZXJpbmcuCi0gICAgbV9yZW5kZXJUYXJnZXQgPSBBdWRpb0J1ZmZlcjo6Y3JlYXRlKG51bWJl
ck9mQ2hhbm5lbHMsIG51bWJlck9mRnJhbWVzLCBzYW1wbGVSYXRlKTsKLSAgICBtX2Rlc3RpbmF0
aW9uTm9kZSA9IE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6Y3JlYXRlKHRoaXMsIG1fcmVu
ZGVyVGFyZ2V0LmdldCgpKTsKLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OmNvbnN0cnVjdENvbW1v
bigpCi17Ci0gICAgRkZURnJhbWU6OmluaXRpYWxpemUoKTsKLSAgICAKLSAgICBtX2xpc3RlbmVy
ID0gQXVkaW9MaXN0ZW5lcjo6Y3JlYXRlKCk7Ci19Ci0KLUF1ZGlvQ29udGV4dDo6fkF1ZGlvQ29u
dGV4dCgpCi17Ci0jaWYgREVCVUdfQVVESU9OT0RFX1JFRkVSRU5DRVMKLSAgICBwcmludGYoIiVw
OiBBdWRpb0NvbnRleHQ6On5BdWRpb0NvbnRleHQoKVxuIiwgdGhpcyk7Ci0jZW5kaWYKLSAgICAv
LyBBdWRpb05vZGVzIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlaXIgY29udGV4dCwgc28gdGhlcmUg
c2hvdWxkIGJlIG5vIHdheSB0byBiZSBpbiB0aGUgZGVzdHJ1Y3RvciBpZiB0aGVyZSBhcmUgc3Rp
bGwgQXVkaW9Ob2RlcyBhcm91bmQuCi0gICAgQVNTRVJUKCFtX25vZGVzVG9EZWxldGUuc2l6ZSgp
KTsKLSAgICBBU1NFUlQoIW1fcmVmZXJlbmNlZE5vZGVzLnNpemUoKSk7Ci0gICAgQVNTRVJUKCFt
X2ZpbmlzaGVkTm9kZXMuc2l6ZSgpKTsKLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OmxhenlJbml0
aWFsaXplKCkKLXsKLSAgICBpZiAoIW1faXNJbml0aWFsaXplZCkgewotICAgICAgICAvLyBEb24n
dCBhbGxvdyB0aGUgY29udGV4dCB0byBpbml0aWFsaXplIGEgc2Vjb25kIHRpbWUgYWZ0ZXIgaXQn
cyBhbHJlYWR5IGJlZW4gZXhwbGljaXRseSB1bmluaXRpYWxpemVkLgotICAgICAgICBBU1NFUlQo
IW1faXNBdWRpb1RocmVhZEZpbmlzaGVkKTsKLSAgICAgICAgaWYgKCFtX2lzQXVkaW9UaHJlYWRG
aW5pc2hlZCkgewotICAgICAgICAgICAgaWYgKG1fZGVzdGluYXRpb25Ob2RlLmdldCgpKSB7Ci0g
ICAgICAgICAgICAgICAgbV9kZXN0aW5hdGlvbk5vZGUtPmluaXRpYWxpemUoKTsKLQotICAgICAg
ICAgICAgICAgIGlmICghaXNPZmZsaW5lQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgc3RhcnRzIHRoZSBhdWRpbyB0aHJlYWQuIFRoZSBkZXN0aW5hdGlvbiBub2RlJ3Mg
cHJvdmlkZUlucHV0KCkgbWV0aG9kIHdpbGwgbm93IGJlIGNhbGxlZCByZXBlYXRlZGx5IHRvIHJl
bmRlciBhdWRpby4KLSAgICAgICAgICAgICAgICAgICAgLy8gRWFjaCB0aW1lIHByb3ZpZGVJbnB1
dCgpIGlzIGNhbGxlZCwgYSBwb3J0aW9uIG9mIHRoZSBhdWRpbyBzdHJlYW0gaXMgcmVuZGVyZWQu
IExldCdzIGNhbGwgdGhpcyB0aW1lIHBlcmlvZCBhICJyZW5kZXIgcXVhbnR1bSIuCi0gICAgICAg
ICAgICAgICAgICAgIC8vIE5PVEU6IGZvciBub3cgZGVmYXVsdCBBdWRpb0NvbnRleHQgZG9lcyBu
b3QgbmVlZCBhbiBleHBsaWNpdCBzdGFydFJlbmRlcmluZygpIGNhbGwgZnJvbSBKYXZhU2NyaXB0
LgotICAgICAgICAgICAgICAgICAgICAvLyBXZSBtYXkgd2FudCB0byBjb25zaWRlciByZXF1aXJp
bmcgaXQgZm9yIHN5bW1ldHJ5IHdpdGggT2ZmbGluZUF1ZGlvQ29udGV4dC4KLSAgICAgICAgICAg
ICAgICAgICAgbV9kZXN0aW5hdGlvbk5vZGUtPnN0YXJ0UmVuZGVyaW5nKCk7ICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgKytzX2hhcmR3YXJlQ29udGV4dENvdW50Owot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9pc0luaXRp
YWxpemVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6
OnVuaW5pdGlhbGl6ZSgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlm
IChtX2lzSW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgLy8gUHJvdGVjdCB0aGlzIG9iamVjdCBmcm9t
IGJlaW5nIGRlbGV0ZWQgYmVmb3JlIHdlIGZpbmlzaCB1bmluaXRpYWxpemluZy4KLSAgICAgICAg
UmVmUHRyPEF1ZGlvQ29udGV4dD4gcHJvdGVjdCh0aGlzKTsKLQotICAgICAgICAvLyBUaGlzIHN0
b3BzIHRoZSBhdWRpbyB0aHJlYWQgYW5kIGFsbCBhdWRpbyByZW5kZXJpbmcuCi0gICAgICAgIG1f
ZGVzdGluYXRpb25Ob2RlLT51bmluaXRpYWxpemUoKTsKLQotICAgICAgICAvLyBEb24ndCBhbGxv
dyB0aGUgY29udGV4dCB0byBpbml0aWFsaXplIGEgc2Vjb25kIHRpbWUgYWZ0ZXIgaXQncyBhbHJl
YWR5IGJlZW4gZXhwbGljaXRseSB1bmluaXRpYWxpemVkLgotICAgICAgICBtX2lzQXVkaW9UaHJl
YWRGaW5pc2hlZCA9IHRydWU7Ci0KLSAgICAgICAgLy8gV2UgaGF2ZSB0byByZWxlYXNlIG91ciBy
ZWZlcmVuY2UgdG8gdGhlIGRlc3RpbmF0aW9uIG5vZGUgYmVmb3JlIHRoZSBjb250ZXh0IHdpbGwg
ZXZlciBiZSBkZWxldGVkIHNpbmNlIHRoZSBkZXN0aW5hdGlvbiBub2RlIGhvbGRzIGEgcmVmZXJl
bmNlIHRvIHRoZSBjb250ZXh0LgotICAgICAgICBtX2Rlc3RpbmF0aW9uTm9kZS5jbGVhcigpOwot
Ci0gICAgICAgIGlmICghaXNPZmZsaW5lQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
c19oYXJkd2FyZUNvbnRleHRDb3VudCk7Ci0gICAgICAgICAgICAtLXNfaGFyZHdhcmVDb250ZXh0
Q291bnQ7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEdldCByaWQgb2YgdGhlIHNv
dXJjZXMgd2hpY2ggbWF5IHN0aWxsIGJlIHBsYXlpbmcuCi0gICAgICAgIGRlcmVmVW5maW5pc2hl
ZFNvdXJjZU5vZGVzKCk7Ci0KLSAgICAgICAgZGVsZXRlTWFya2VkTm9kZXMoKTsKLQotICAgICAg
ICBtX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgQXVkaW9Db250ZXh0
Ojppc0luaXRpYWxpemVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pc0luaXRpYWxpemVkOwot
fQotCi1ib29sIEF1ZGlvQ29udGV4dDo6aXNSdW5uYWJsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFp
c0luaXRpYWxpemVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBDaGVj
ayB3aXRoIHRoZSBIUlRGIHNwYXRpYWxpemF0aW9uIHN5c3RlbSB0byBzZWUgaWYgaXQncyBmaW5p
c2hlZCBsb2FkaW5nLgotICAgIHJldHVybiBtX2hydGZEYXRhYmFzZUxvYWRlci0+aXNMb2FkZWQo
KTsKLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6ZURpc3BhdGNoKHZvaWQqIHVz
ZXJEYXRhKQotewotICAgIEF1ZGlvQ29udGV4dCogY29udGV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
QXVkaW9Db250ZXh0Kj4odXNlckRhdGEpOwotICAgIEFTU0VSVChjb250ZXh0KTsKLSAgICBpZiAo
IWNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnRleHQtPnVuaW5pdGlhbGl6ZSgp
OwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6c3RvcCgpCi17Ci0gICAgbV9kb2N1bWVudCA9IDA7
IC8vIGRvY3VtZW50IGlzIGdvaW5nIGF3YXkKLQotICAgIC8vIERvbid0IGNhbGwgdW5pbml0aWFs
aXplKCkgaW1tZWRpYXRlbHkgaGVyZSBiZWNhdXNlIHRoZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0
IGlzIGluIHRoZSBtaWRkbGUKLSAgICAvLyBvZiBkZWFsaW5nIHdpdGggYWxsIG9mIGl0cyBBY3Rp
dmVET01PYmplY3RzIGF0IHRoaXMgcG9pbnQuIHVuaW5pdGlhbGl6ZSgpIGNhbiBkZS1yZWZlcmVu
Y2Ugb3RoZXIKLSAgICAvLyBBY3RpdmVET01PYmplY3RzIHNvIGxldCdzIHNjaGVkdWxlIHVuaW5p
dGlhbGl6ZSgpIHRvIGJlIGNhbGxlZCBsYXRlci4KLSAgICAvLyBGSVhNRTogc2VlIGlmIHRoZXJl
J3MgYSBtb3JlIGRpcmVjdCB3YXkgdG8gaGFuZGxlIHRoaXMgaXNzdWUuCi0gICAgY2FsbE9uTWFp
blRocmVhZCh1bmluaXRpYWxpemVEaXNwYXRjaCwgdGhpcyk7Ci19Ci0KLURvY3VtZW50KiBBdWRp
b0NvbnRleHQ6OmRvY3VtZW50KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9kb2N1bWVudCk7Ci0g
ICAgcmV0dXJuIG1fZG9jdW1lbnQ7Ci19Ci0KLWJvb2wgQXVkaW9Db250ZXh0OjpoYXNEb2N1bWVu
dCgpCi17Ci0gICAgcmV0dXJuIG1fZG9jdW1lbnQ7Ci19Ci0KLVBhc3NSZWZQdHI8QXVkaW9CdWZm
ZXI+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMs
IHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBhdWRpb0J1ZmZlciA9IEF1ZGlvQnVmZmVy
OjpjcmVhdGUobnVtYmVyT2ZDaGFubmVscywgbnVtYmVyT2ZGcmFtZXMsIHNhbXBsZVJhdGUpOwot
ICAgIGlmICghYXVkaW9CdWZmZXIuZ2V0KCkpIHsKLSAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gYXVkaW9CdWZmZXI7Ci19Ci0K
LVBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQnVmZmVyKEFycmF5
QnVmZmVyKiBhcnJheUJ1ZmZlciwgYm9vbCBtaXhUb01vbm8sIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIEFTU0VSVChhcnJheUJ1ZmZlcik7Ci0gICAgaWYgKCFhcnJheUJ1ZmZlcikgewotICAg
ICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJl
ZlB0cjxBdWRpb0J1ZmZlcj4gYXVkaW9CdWZmZXIgPSBBdWRpb0J1ZmZlcjo6Y3JlYXRlRnJvbUF1
ZGlvRmlsZURhdGEoYXJyYXlCdWZmZXItPmRhdGEoKSwgYXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgo
KSwgbWl4VG9Nb25vLCBzYW1wbGVSYXRlKCkpOwotICAgIGlmICghYXVkaW9CdWZmZXIuZ2V0KCkp
IHsKLSAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0K
LSAgICByZXR1cm4gYXVkaW9CdWZmZXI7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpkZWNvZGVB
dWRpb0RhdGEoQXJyYXlCdWZmZXIqIGF1ZGlvRGF0YSwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNh
bGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4g
ZXJyb3JDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFhdWRpb0RhdGEp
IHsKLSAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IG1fYXVkaW9EZWNvZGVyLmRlY29kZUFzeW5jKGF1ZGlvRGF0YSwgc2FtcGxlUmF0ZSgpLCBzdWNj
ZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spOwotfQotCi1QYXNzUmVmUHRyPEF1ZGlvQnVmZmVy
U291cmNlTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVCdWZmZXJTb3VyY2UoKQotewotICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbGF6eUluaXRpYWxpemUoKTsKLSAgICBSZWZQdHI8
QXVkaW9CdWZmZXJTb3VyY2VOb2RlPiBub2RlID0gQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpjcmVh
dGUodGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7Ci0KLSAgICByZWZOb2Rl
KG5vZGUuZ2V0KCkpOyAvLyBjb250ZXh0IGtlZXBzIHJlZmVyZW5jZSB1bnRpbCBzb3VyY2UgaGFz
IGZpbmlzaGVkIHBsYXlpbmcKLSAgICByZXR1cm4gbm9kZTsKLX0KLQotI2lmIEVOQUJMRShWSURF
TykKLVBhc3NSZWZQdHI8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBBdWRpb0NvbnRleHQ6
OmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZShIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQs
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIEFTU0VSVChtZWRpYUVsZW1lbnQpOwotICAgIGlm
ICghbWVkaWFFbGVtZW50KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLSAgICAgICAgCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKLSAgICBsYXp5SW5pdGlhbGl6ZSgpOwotICAgIAotICAgIC8vIEZpcnN0IGNoZWNrIGlmIHRo
aXMgbWVkaWEgZWxlbWVudCBhbHJlYWR5IGhhcyBhIHNvdXJjZSBub2RlLgotICAgIGlmIChtZWRp
YUVsZW1lbnQtPmF1ZGlvU291cmNlTm9kZSgpKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFU
RV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAgICAgCi0gICAgUmVmUHRyPE1l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4gbm9kZSA9IE1lZGlhRWxlbWVudEF1ZGlvU291cmNl
Tm9kZTo6Y3JlYXRlKHRoaXMsIG1lZGlhRWxlbWVudCk7Ci0KLSAgICBtZWRpYUVsZW1lbnQtPnNl
dEF1ZGlvU291cmNlTm9kZShub2RlLmdldCgpKTsKLQotICAgIHJlZk5vZGUobm9kZS5nZXQoKSk7
IC8vIGNvbnRleHQga2VlcHMgcmVmZXJlbmNlIHVudGlsIG5vZGUgaXMgZGlzY29ubmVjdGVkCi0g
ICAgcmV0dXJuIG5vZGU7Ci19Ci0jZW5kaWYKLQotUGFzc1JlZlB0cjxKYXZhU2NyaXB0QXVkaW9O
b2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUphdmFTY3JpcHROb2RlKHNpemVfdCBidWZmZXJTaXpl
KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbGF6eUluaXRpYWxpemUoKTsK
LSAgICBSZWZQdHI8SmF2YVNjcmlwdEF1ZGlvTm9kZT4gbm9kZSA9IEphdmFTY3JpcHRBdWRpb05v
ZGU6OmNyZWF0ZSh0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpLCBidWZmZXJT
aXplKTsKLQotICAgIHJlZk5vZGUobm9kZS5nZXQoKSk7IC8vIGNvbnRleHQga2VlcHMgcmVmZXJl
bmNlIHVudGlsIHdlIHN0b3AgbWFraW5nIGphdmFzY3JpcHQgcmVuZGVyaW5nIGNhbGxiYWNrcwot
ICAgIHJldHVybiBub2RlOwotfQotCi1QYXNzUmVmUHRyPEJpcXVhZEZpbHRlck5vZGU+IEF1ZGlv
Q29udGV4dDo6Y3JlYXRlQmlxdWFkRmlsdGVyKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotICAgIGxhenlJbml0aWFsaXplKCk7Ci0gICAgcmV0dXJuIEJpcXVhZEZpbHRlck5vZGU6
OmNyZWF0ZSh0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpKTsKLX0KLQotUGFz
c1JlZlB0cjxXYXZlU2hhcGVyTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVXYXZlU2hhcGVyKCkK
LXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGxhenlJbml0aWFsaXplKCk7Ci0g
ICAgcmV0dXJuIFdhdmVTaGFwZXJOb2RlOjpjcmVhdGUodGhpcyk7Ci19Ci0KLVBhc3NSZWZQdHI8
TG93UGFzczJGaWx0ZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUxvd1Bhc3MyRmlsdGVyKCkK
LXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGxhenlJbml0aWFsaXplKCk7Ci0g
ICAgaWYgKGRvY3VtZW50KCkpCi0gICAgICAgIGRvY3VtZW50KCktPmFkZENvbnNvbGVNZXNzYWdl
KEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIFdhcm5pbmdNZXNzYWdlTGV2ZWwsICJj
cmVhdGVMb3dQYXNzMkZpbHRlcigpIGlzIGRlcHJlY2F0ZWQuICBVc2UgY3JlYXRlQmlxdWFkRmls
dGVyKCkgaW5zdGVhZC4iKTsKLSAgICAgICAgCi0gICAgcmV0dXJuIExvd1Bhc3MyRmlsdGVyTm9k
ZTo6Y3JlYXRlKHRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkpOwotfQotCi1Q
YXNzUmVmUHRyPEhpZ2hQYXNzMkZpbHRlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlSGlnaFBh
c3MyRmlsdGVyKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGxhenlJbml0
aWFsaXplKCk7Ci0gICAgaWYgKGRvY3VtZW50KCkpCi0gICAgICAgIGRvY3VtZW50KCktPmFkZENv
bnNvbGVNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIFdhcm5pbmdNZXNz
YWdlTGV2ZWwsICJjcmVhdGVIaWdoUGFzczJGaWx0ZXIoKSBpcyBkZXByZWNhdGVkLiAgVXNlIGNy
ZWF0ZUJpcXVhZEZpbHRlcigpIGluc3RlYWQuIik7Ci0KLSAgICByZXR1cm4gSGlnaFBhc3MyRmls
dGVyTm9kZTo6Y3JlYXRlKHRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkpOwot
fQotCi1QYXNzUmVmUHRyPEF1ZGlvUGFubmVyTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVQYW5u
ZXIoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbGF6eUluaXRpYWxpemUo
KTsKLSAgICByZXR1cm4gQXVkaW9QYW5uZXJOb2RlOjpjcmVhdGUodGhpcywgbV9kZXN0aW5hdGlv
bk5vZGUtPnNhbXBsZVJhdGUoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8Q29udm9sdmVyTm9kZT4gQXVk
aW9Db250ZXh0OjpjcmVhdGVDb252b2x2ZXIoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0gICAgbGF6eUluaXRpYWxpemUoKTsKLSAgICByZXR1cm4gQ29udm9sdmVyTm9kZTo6Y3Jl
YXRlKHRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkpOwotfQotCi1QYXNzUmVm
UHRyPER5bmFtaWNzQ29tcHJlc3Nvck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlRHluYW1pY3ND
b21wcmVzc29yKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGxhenlJbml0
aWFsaXplKCk7Ci0gICAgcmV0dXJuIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OmNyZWF0ZSh0aGlz
LCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpKTsKLX0KLQotUGFzc1JlZlB0cjxSZWFs
dGltZUFuYWx5c2VyTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVBbmFseXNlcigpCi17Ci0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBsYXp5SW5pdGlhbGl6ZSgpOwotICAgIHJldHVy
biBSZWFsdGltZUFuYWx5c2VyTm9kZTo6Y3JlYXRlKHRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5z
YW1wbGVSYXRlKCkpOwotfQotCi1QYXNzUmVmUHRyPEF1ZGlvR2Fpbk5vZGU+IEF1ZGlvQ29udGV4
dDo6Y3JlYXRlR2Fpbk5vZGUoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAg
bGF6eUluaXRpYWxpemUoKTsKLSAgICByZXR1cm4gQXVkaW9HYWluTm9kZTo6Y3JlYXRlKHRoaXMs
IG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkpOwotfQotCi1QYXNzUmVmUHRyPERlbGF5
Tm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVEZWxheU5vZGUoKQotewotICAgIGNvbnN0IGRvdWJs
ZSBkZWZhdWx0TWF4RGVsYXlUaW1lID0gMTsKLSAgICByZXR1cm4gY3JlYXRlRGVsYXlOb2RlKGRl
ZmF1bHRNYXhEZWxheVRpbWUpOwotfQotCi1QYXNzUmVmUHRyPERlbGF5Tm9kZT4gQXVkaW9Db250
ZXh0OjpjcmVhdGVEZWxheU5vZGUoZG91YmxlIG1heERlbGF5VGltZSkKLXsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotICAgIGxhenlJbml0aWFsaXplKCk7Ci0gICAgcmV0dXJuIERlbGF5
Tm9kZTo6Y3JlYXRlKHRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCksIG1heERl
bGF5VGltZSk7Ci19Ci0KLVBhc3NSZWZQdHI8QXVkaW9DaGFubmVsU3BsaXR0ZXI+IEF1ZGlvQ29u
dGV4dDo6Y3JlYXRlQ2hhbm5lbFNwbGl0dGVyKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotICAgIGxhenlJbml0aWFsaXplKCk7Ci0gICAgcmV0dXJuIEF1ZGlvQ2hhbm5lbFNwbGl0
dGVyOjpjcmVhdGUodGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7Ci19Ci0K
LVBhc3NSZWZQdHI8QXVkaW9DaGFubmVsTWVyZ2VyPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUNoYW5u
ZWxNZXJnZXIoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbGF6eUluaXRp
YWxpemUoKTsKLSAgICByZXR1cm4gQXVkaW9DaGFubmVsTWVyZ2VyOjpjcmVhdGUodGhpcywgbV9k
ZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0Ojpu
b3RpZnlOb2RlRmluaXNoZWRQcm9jZXNzaW5nKEF1ZGlvTm9kZSogbm9kZSkKLXsKLSAgICBBU1NF
UlQoaXNBdWRpb1RocmVhZCgpKTsKLSAgICBtX2ZpbmlzaGVkTm9kZXMuYXBwZW5kKG5vZGUpOwot
fQotCi12b2lkIEF1ZGlvQ29udGV4dDo6ZGVyZWZGaW5pc2hlZFNvdXJjZU5vZGVzKCkKLXsKLSAg
ICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwotICAgIEFTU0VSVChpc0F1ZGlvVGhyZWFkKCkgfHwg
aXNBdWRpb1RocmVhZEZpbmlzaGVkKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2ZpbmlzaGVkTm9kZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIGRlcmVmTm9kZShtX2ZpbmlzaGVk
Tm9kZXNbaV0pOwotCi0gICAgbV9maW5pc2hlZE5vZGVzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQXVk
aW9Db250ZXh0OjpyZWZOb2RlKEF1ZGlvTm9kZSogbm9kZSkKLXsKLSAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotICAgIEF1dG9Mb2NrZXIgbG9ja2VyKHRoaXMpOwotICAgIAotICAgIG5vZGUt
PnJlZihBdWRpb05vZGU6OlJlZlR5cGVDb25uZWN0aW9uKTsKLSAgICBtX3JlZmVyZW5jZWROb2Rl
cy5hcHBlbmQobm9kZSk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpkZXJlZk5vZGUoQXVkaW9O
b2RlKiBub2RlKQotewotICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7Ci0gICAgCi0gICAgbm9k
ZS0+ZGVyZWYoQXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7Ci0KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9yZWZlcmVuY2VkTm9kZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
aWYgKG5vZGUgPT0gbV9yZWZlcmVuY2VkTm9kZXNbaV0pIHsKLSAgICAgICAgICAgIG1fcmVmZXJl
bmNlZE5vZGVzLnJlbW92ZShpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6ZGVyZWZVbmZpbmlzaGVkU291cmNlTm9kZXMoKQot
ewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSAmJiBpc0F1ZGlvVGhyZWFkRmluaXNoZWQoKSk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcmVmZXJlbmNlZE5vZGVzLnNpemUoKTsg
KytpKQotICAgICAgICBtX3JlZmVyZW5jZWROb2Rlc1tpXS0+ZGVyZWYoQXVkaW9Ob2RlOjpSZWZU
eXBlQ29ubmVjdGlvbik7Ci0KLSAgICBtX3JlZmVyZW5jZWROb2Rlcy5jbGVhcigpOwotfQotCi12
b2lkIEF1ZGlvQ29udGV4dDo6bG9jayhib29sJiBtdXN0UmVsZWFzZUxvY2spCi17Ci0gICAgLy8g
RG9uJ3QgYWxsb3cgcmVndWxhciBsb2NrIGluIHJlYWwtdGltZSBhdWRpbyB0aHJlYWQuCi0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIFRocmVhZElkZW50aWZpZXIgdGhpc1RocmVh
ZCA9IGN1cnJlbnRUaHJlYWQoKTsKLQotICAgIGlmICh0aGlzVGhyZWFkID09IG1fZ3JhcGhPd25l
clRocmVhZCkgewotICAgICAgICAvLyBXZSBhbHJlYWR5IGhhdmUgdGhlIGxvY2suCi0gICAgICAg
IG11c3RSZWxlYXNlTG9jayA9IGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEFjcXVp
cmUgdGhlIGxvY2suCi0gICAgICAgIG1fY29udGV4dEdyYXBoTXV0ZXgubG9jaygpOwotICAgICAg
ICBtX2dyYXBoT3duZXJUaHJlYWQgPSB0aGlzVGhyZWFkOwotICAgICAgICBtdXN0UmVsZWFzZUxv
Y2sgPSB0cnVlOwotICAgIH0KLX0KLQotYm9vbCBBdWRpb0NvbnRleHQ6OnRyeUxvY2soYm9vbCYg
bXVzdFJlbGVhc2VMb2NrKQotewotICAgIFRocmVhZElkZW50aWZpZXIgdGhpc1RocmVhZCA9IGN1
cnJlbnRUaHJlYWQoKTsKLSAgICBib29sIGlzQXVkaW9UaHJlYWQgPSB0aGlzVGhyZWFkID09IGF1
ZGlvVGhyZWFkKCk7Ci0KLSAgICAvLyBUcnkgdG8gY2F0Y2ggY2FzZXMgb2YgdXNpbmcgdHJ5IGxv
Y2sgb24gbWFpbiB0aHJlYWQgLSBpdCBzaG91bGQgdXNlIHJlZ3VsYXIgbG9jay4KLSAgICBBU1NF
UlQoaXNBdWRpb1RocmVhZCB8fCBpc0F1ZGlvVGhyZWFkRmluaXNoZWQoKSk7Ci0gICAgCi0gICAg
aWYgKCFpc0F1ZGlvVGhyZWFkKSB7Ci0gICAgICAgIC8vIEluIHJlbGVhc2UgYnVpbGQgdHJlYXQg
dHJ5TG9jaygpIGFzIGxvY2soKSAoc2luY2UgYWJvdmUgQVNTRVJUKGlzQXVkaW9UaHJlYWQpIG5l
dmVyIGZpcmVzKSAtIHRoaXMgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvLgotICAgICAgICBsb2NrKG11
c3RSZWxlYXNlTG9jayk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBi
b29sIGhhc0xvY2s7Ci0gICAgCi0gICAgaWYgKHRoaXNUaHJlYWQgPT0gbV9ncmFwaE93bmVyVGhy
ZWFkKSB7Ci0gICAgICAgIC8vIFRocmVhZCBhbHJlYWR5IGhhcyB0aGUgbG9jay4KLSAgICAgICAg
aGFzTG9jayA9IHRydWU7Ci0gICAgICAgIG11c3RSZWxlYXNlTG9jayA9IGZhbHNlOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIC8vIERvbid0IGFscmVhZHkgaGF2ZSB0aGUgbG9jayAtIHRyeSB0byBh
Y3F1aXJlIGl0LgotICAgICAgICBoYXNMb2NrID0gbV9jb250ZXh0R3JhcGhNdXRleC50cnlMb2Nr
KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaGFzTG9jaykKLSAgICAgICAgICAgIG1fZ3JhcGhP
d25lclRocmVhZCA9IHRoaXNUaHJlYWQ7Ci0KLSAgICAgICAgbXVzdFJlbGVhc2VMb2NrID0gaGFz
TG9jazsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGhhc0xvY2s7Ci19Ci0KLXZvaWQgQXVkaW9D
b250ZXh0Ojp1bmxvY2soKQotewotICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9ncmFw
aE93bmVyVGhyZWFkKTsKLQotICAgIG1fZ3JhcGhPd25lclRocmVhZCA9IFVuZGVmaW5lZFRocmVh
ZElkZW50aWZpZXI7Ci0gICAgbV9jb250ZXh0R3JhcGhNdXRleC51bmxvY2soKTsKLX0KLQotYm9v
bCBBdWRpb0NvbnRleHQ6OmlzQXVkaW9UaHJlYWQoKSBjb25zdAotewotICAgIHJldHVybiBjdXJy
ZW50VGhyZWFkKCkgPT0gbV9hdWRpb1RocmVhZDsKLX0KLQotYm9vbCBBdWRpb0NvbnRleHQ6Omlz
R3JhcGhPd25lcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKSA9PSBtX2dy
YXBoT3duZXJUaHJlYWQ7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjphZGREZWZlcnJlZEZpbmlz
aERlcmVmKEF1ZGlvTm9kZSogbm9kZSwgQXVkaW9Ob2RlOjpSZWZUeXBlIHJlZlR5cGUpCi17Ci0g
ICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSk7Ci0gICAgbV9kZWZlcnJlZEZpbmlzaERlcmVmTGlz
dC5hcHBlbmQoQXVkaW9Db250ZXh0OjpSZWZJbmZvKG5vZGUsIHJlZlR5cGUpKTsKLX0KLQotdm9p
ZCBBdWRpb0NvbnRleHQ6OmhhbmRsZVByZVJlbmRlclRhc2tzKCkKLXsKLSAgICBBU1NFUlQoaXNB
dWRpb1RocmVhZCgpKTsKLSAKLSAgICAvLyBBdCB0aGUgYmVnaW5uaW5nIG9mIGV2ZXJ5IHJlbmRl
ciBxdWFudHVtLCB0cnkgdG8gdXBkYXRlIHRoZSBpbnRlcm5hbCByZW5kZXJpbmcgZ3JhcGggc3Rh
dGUgKGZyb20gbWFpbiB0aHJlYWQgY2hhbmdlcykuCi0gICAgLy8gSXQncyBPSyBpZiB0aGUgdHJ5
TG9jaygpIGZhaWxzLCB3ZSdsbCBqdXN0IHRha2Ugc2xpZ2h0bHkgbG9uZ2VyIHRvIHBpY2sgdXAg
dGhlIGNoYW5nZXMuCi0gICAgYm9vbCBtdXN0UmVsZWFzZUxvY2s7Ci0gICAgaWYgKHRyeUxvY2so
bXVzdFJlbGVhc2VMb2NrKSkgewotICAgICAgICAvLyBGaXh1cCB0aGUgc3RhdGUgb2YgYW55IGRp
cnR5IEF1ZGlvTm9kZUlucHV0cyBhbmQgQXVkaW9Ob2RlT3V0cHV0cy4KLSAgICAgICAgaGFuZGxl
RGlydHlBdWRpb05vZGVJbnB1dHMoKTsKLSAgICAgICAgaGFuZGxlRGlydHlBdWRpb05vZGVPdXRw
dXRzKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAobXVzdFJlbGVhc2VMb2NrKQotICAgICAgICAg
ICAgdW5sb2NrKCk7Ci0gICAgfQotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxlUG9zdFJl
bmRlclRhc2tzKCkKLXsKLSAgICBBU1NFUlQoaXNBdWRpb1RocmVhZCgpKTsKLSAKLSAgICAvLyBN
dXN0IHVzZSBhIHRyeUxvY2soKSBoZXJlIHRvby4gIERvbid0IHdvcnJ5LCB0aGUgbG9jayB3aWxs
IHZlcnkgcmFyZWx5IGJlIGNvbnRlbmRlZCBhbmQgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyZXF1
ZW50bHkuCi0gICAgLy8gVGhlIHdvcnN0IHRoYXQgY2FuIGhhcHBlbiBpcyB0aGF0IHRoZXJlIHdp
bGwgYmUgc29tZSBub2RlcyB3aGljaCB3aWxsIHRha2Ugc2xpZ2h0bHkgbG9uZ2VyIHRoYW4gdXN1
YWwgdG8gYmUgZGVsZXRlZCBvciByZW1vdmVkCi0gICAgLy8gZnJvbSB0aGUgcmVuZGVyIGdyYXBo
IChpbiB3aGljaCBjYXNlIHRoZXknbGwgcmVuZGVyIHNpbGVuY2UpLgotICAgIGJvb2wgbXVzdFJl
bGVhc2VMb2NrOwotICAgIGlmICh0cnlMb2NrKG11c3RSZWxlYXNlTG9jaykpIHsKLSAgICAgICAg
Ly8gVGFrZSBjYXJlIG9mIGZpbmlzaGluZyBhbnkgZGVyZWZzIHdoZXJlIHRoZSB0cnlMb2NrKCkg
ZmFpbGVkIHByZXZpb3VzbHkuCi0gICAgICAgIGhhbmRsZURlZmVycmVkRmluaXNoRGVyZWZzKCk7
Ci0KLSAgICAgICAgLy8gRHluYW1pY2FsbHkgY2xlYW4gdXAgbm9kZXMgd2hpY2ggYXJlIG5vIGxv
bmdlciBuZWVkZWQuCi0gICAgICAgIGRlcmVmRmluaXNoZWRTb3VyY2VOb2RlcygpOwotCi0gICAg
ICAgIC8vIERvbid0IGRlbGV0ZSBpbiB0aGUgcmVhbC10aW1lIHRocmVhZC4gTGV0IHRoZSBtYWlu
IHRocmVhZCBkbyBpdC4KLSAgICAgICAgLy8gUmVmLWNvdW50ZWQgb2JqZWN0cyBoZWxkIGJ5IGNl
cnRhaW4gQXVkaW9Ob2RlcyBtYXkgbm90IGJlIHRocmVhZC1zYWZlLgotICAgICAgICBzY2hlZHVs
ZU5vZGVEZWxldGlvbigpOwotCi0gICAgICAgIC8vIEZpeHVwIHRoZSBzdGF0ZSBvZiBhbnkgZGly
dHkgQXVkaW9Ob2RlSW5wdXRzIGFuZCBBdWRpb05vZGVPdXRwdXRzLgotICAgICAgICBoYW5kbGVE
aXJ0eUF1ZGlvTm9kZUlucHV0cygpOwotICAgICAgICBoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1
dHMoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtdXN0UmVsZWFzZUxvY2spCi0gICAgICAgICAg
ICB1bmxvY2soKTsKLSAgICB9Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpoYW5kbGVEZWZlcnJl
ZEZpbmlzaERlcmVmcygpCi17Ci0gICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSAmJiBpc0dyYXBo
T3duZXIoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZGVmZXJyZWRGaW5pc2hE
ZXJlZkxpc3Quc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQXVkaW9Ob2RlKiBub2RlID0gbV9kZWZl
cnJlZEZpbmlzaERlcmVmTGlzdFtpXS5tX25vZGU7Ci0gICAgICAgIEF1ZGlvTm9kZTo6UmVmVHlw
ZSByZWZUeXBlID0gbV9kZWZlcnJlZEZpbmlzaERlcmVmTGlzdFtpXS5tX3JlZlR5cGU7Ci0gICAg
ICAgIG5vZGUtPmZpbmlzaERlcmVmKHJlZlR5cGUpOwotICAgIH0KLSAgICAKLSAgICBtX2RlZmVy
cmVkRmluaXNoRGVyZWZMaXN0LmNsZWFyKCk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjptYXJr
Rm9yRGVsZXRpb24oQXVkaW9Ob2RlKiBub2RlKQotewotICAgIEFTU0VSVChpc0dyYXBoT3duZXIo
KSk7Ci0gICAgbV9ub2Rlc1RvRGVsZXRlLmFwcGVuZChub2RlKTsKLX0KLQotdm9pZCBBdWRpb0Nv
bnRleHQ6OnNjaGVkdWxlTm9kZURlbGV0aW9uKCkKLXsKLSAgICBib29sIGlzR29vZCA9IG1faXNJ
bml0aWFsaXplZCAmJiBpc0dyYXBoT3duZXIoKTsKLSAgICBBU1NFUlQoaXNHb29kKTsKLSAgICBp
ZiAoIWlzR29vZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTWFrZSBzdXJlIHRvIGNhbGwg
ZGVsZXRlTWFya2VkTm9kZXMoKSBvbiBtYWluIHRocmVhZC4gICAgCi0gICAgaWYgKG1fbm9kZXNU
b0RlbGV0ZS5zaXplKCkgJiYgIW1faXNEZWxldGlvblNjaGVkdWxlZCkgewotICAgICAgICBtX2lz
RGVsZXRpb25TY2hlZHVsZWQgPSB0cnVlOwotCi0gICAgICAgIC8vIERvbid0IGxldCBvdXJzZWxm
IGdldCBkZWxldGVkIGJlZm9yZSB0aGUgY2FsbGJhY2suCi0gICAgICAgIC8vIFNlZSBtYXRjaGlu
ZyBkZXJlZigpIGluIGRlbGV0ZU1hcmtlZE5vZGVzRGlzcGF0Y2goKS4KLSAgICAgICAgcmVmKCk7
Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoZGVsZXRlTWFya2VkTm9kZXNEaXNwYXRjaCwgdGhp
cyk7Ci0gICAgfQotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6ZGVsZXRlTWFya2VkTm9kZXNEaXNw
YXRjaCh2b2lkKiB1c2VyRGF0YSkKLXsKLSAgICBBdWRpb0NvbnRleHQqIGNvbnRleHQgPSByZWlu
dGVycHJldF9jYXN0PEF1ZGlvQ29udGV4dCo+KHVzZXJEYXRhKTsKLSAgICBBU1NFUlQoY29udGV4
dCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb250ZXh0LT5k
ZWxldGVNYXJrZWROb2RlcygpOwotICAgIGNvbnRleHQtPmRlcmVmKCk7Ci19Ci0KLXZvaWQgQXVk
aW9Db250ZXh0OjpkZWxldGVNYXJrZWROb2RlcygpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLQotICAgIEF1dG9Mb2NrZXIgbG9ja2VyKHRoaXMpOwotICAgIAotICAgIC8vIE5vdGU6
IGRlbGV0aW5nIGFuIEF1ZGlvTm9kZSBjYW4gY2F1c2UgbV9ub2Rlc1RvRGVsZXRlIHRvIGdyb3cu
Ci0gICAgd2hpbGUgKHNpemVfdCBuID0gbV9ub2Rlc1RvRGVsZXRlLnNpemUoKSkgewotICAgICAg
ICBBdWRpb05vZGUqIG5vZGUgPSBtX25vZGVzVG9EZWxldGVbbiAtIDFdOwotICAgICAgICBtX25v
ZGVzVG9EZWxldGUucmVtb3ZlTGFzdCgpOwotCi0gICAgICAgIC8vIEJlZm9yZSBkZWxldGluZyB0
aGUgbm9kZSwgY2xlYXIgb3V0IGFueSBBdWRpb05vZGVJbnB1dHMgZnJvbSBtX2RpcnR5QXVkaW9O
b2RlSW5wdXRzLgotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZklucHV0cyA9IG5vZGUtPm51bWJl
ck9mSW5wdXRzKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklu
cHV0czsgKytpKQotICAgICAgICAgICAgbV9kaXJ0eUF1ZGlvTm9kZUlucHV0cy5yZW1vdmUobm9k
ZS0+aW5wdXQoaSkpOwotCi0gICAgICAgIC8vIEJlZm9yZSBkZWxldGluZyB0aGUgbm9kZSwgY2xl
YXIgb3V0IGFueSBBdWRpb05vZGVPdXRwdXRzIGZyb20gbV9kaXJ0eUF1ZGlvTm9kZU91dHB1dHMu
Ci0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mT3V0cHV0cyA9IG5vZGUtPm51bWJlck9mT3V0cHV0
cygpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZPdXRwdXRzOyAr
K2kpCi0gICAgICAgICAgICBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5yZW1vdmUobm9kZS0+b3V0
cHV0KGkpKTsKLQotICAgICAgICAvLyBGaW5hbGx5LCBkZWxldGUgaXQuCi0gICAgICAgIGRlbGV0
ZSBub2RlOwotICAgIH0KLSAgICAKLSAgICBtX2lzRGVsZXRpb25TY2hlZHVsZWQgPSBmYWxzZTsK
LX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6Om1hcmtBdWRpb05vZGVJbnB1dERpcnR5KEF1ZGlvTm9k
ZUlucHV0KiBpbnB1dCkKLXsKLSAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOyAgICAKLSAgICBt
X2RpcnR5QXVkaW9Ob2RlSW5wdXRzLmFkZChpbnB1dCk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0
OjptYXJrQXVkaW9Ob2RlT3V0cHV0RGlydHkoQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQpCi17Ci0g
ICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsgICAgCi0gICAgbV9kaXJ0eUF1ZGlvTm9kZU91dHB1
dHMuYWRkKG91dHB1dCk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0eUF1ZGlv
Tm9kZUlucHV0cygpCi17Ci0gICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsgICAgCi0KLSAgICBm
b3IgKEhhc2hTZXQ8QXVkaW9Ob2RlSW5wdXQqPjo6aXRlcmF0b3IgaSA9IG1fZGlydHlBdWRpb05v
ZGVJbnB1dHMuYmVnaW4oKTsgaSAhPSBtX2RpcnR5QXVkaW9Ob2RlSW5wdXRzLmVuZCgpOyArK2kp
Ci0gICAgICAgICgqaSktPnVwZGF0ZVJlbmRlcmluZ1N0YXRlKCk7Ci0KLSAgICBtX2RpcnR5QXVk
aW9Ob2RlSW5wdXRzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0
eUF1ZGlvTm9kZU91dHB1dHMoKQotewotICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7ICAgIAot
Ci0gICAgZm9yIChIYXNoU2V0PEF1ZGlvTm9kZU91dHB1dCo+OjppdGVyYXRvciBpID0gbV9kaXJ0
eUF1ZGlvTm9kZU91dHB1dHMuYmVnaW4oKTsgaSAhPSBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5l
bmQoKTsgKytpKQotICAgICAgICAoKmkpLT51cGRhdGVSZW5kZXJpbmdTdGF0ZSgpOwotCi0gICAg
bV9kaXJ0eUF1ZGlvTm9kZU91dHB1dHMuY2xlYXIoKTsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5n
JiBBdWRpb0NvbnRleHQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAotewotICAgIHJldHVybiBldmVu
dE5hbWVzKCkuaW50ZXJmYWNlRm9yQXVkaW9Db250ZXh0OwotfQotCi1TY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBBdWRpb0NvbnRleHQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAotewot
ICAgIHJldHVybiBkb2N1bWVudCgpOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6c3RhcnRSZW5k
ZXJpbmcoKQotewotICAgIGRlc3RpbmF0aW9uKCktPnN0YXJ0UmVuZGVyaW5nKCk7Ci19Ci0KLXZv
aWQgQXVkaW9Db250ZXh0OjpmaXJlQ29tcGxldGlvbkV2ZW50KCkKLXsKLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotICAgIGlmICghaXNNYWluVGhyZWFkKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICAgICAgCi0gICAgQXVkaW9CdWZmZXIqIHJlbmRlcmVkQnVmZmVyID0gbV9yZW5kZXJUYXJn
ZXQuZ2V0KCk7Ci0KLSAgICBBU1NFUlQocmVuZGVyZWRCdWZmZXIpOwotICAgIGlmICghcmVuZGVy
ZWRCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEF2b2lkIGZpcmluZyB0aGUgZXZl
bnQgaWYgdGhlIGRvY3VtZW50IGhhcyBhbHJlYWR5IGdvbmUgYXdheS4KLSAgICBpZiAoaGFzRG9j
dW1lbnQoKSkgewotICAgICAgICAvLyBDYWxsIHRoZSBvZmZsaW5lIHJlbmRlcmluZyBjb21wbGV0
aW9uIGV2ZW50IGxpc3RlbmVyLgotICAgICAgICBkaXNwYXRjaEV2ZW50KE9mZmxpbmVBdWRpb0Nv
bXBsZXRpb25FdmVudDo6Y3JlYXRlKHJlbmRlcmVkQnVmZmVyKSk7Ci0gICAgfQotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDog
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgJKHJldmlzaW9uIDExMTIwOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMxOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBdWRpb0NvbnRleHRfaAotI2Rl
ZmluZSBBdWRpb0NvbnRleHRfaAotCi0jaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5j
bHVkZSAiQXN5bmNBdWRpb0RlY29kZXIuaCIKLSNpbmNsdWRlICJBdWRpb0J1cy5oIgotI2luY2x1
ZGUgIkF1ZGlvRGVzdGluYXRpb25Ob2RlLmgiCi0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgot
I2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAiSFJURkRhdGFiYXNlTG9hZGVyLmgi
Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgot
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3Ry
aW5nSGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvQnVmZmVyOwot
Y2xhc3MgQXVkaW9CdWZmZXJDYWxsYmFjazsKLWNsYXNzIEF1ZGlvQnVmZmVyU291cmNlTm9kZTsK
LWNsYXNzIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTsKLWNsYXNzIEhUTUxNZWRpYUVsZW1l
bnQ7Ci1jbGFzcyBBdWRpb0NoYW5uZWxNZXJnZXI7Ci1jbGFzcyBBdWRpb0NoYW5uZWxTcGxpdHRl
cjsKLWNsYXNzIEF1ZGlvR2Fpbk5vZGU7Ci1jbGFzcyBBdWRpb1Bhbm5lck5vZGU7Ci1jbGFzcyBB
dWRpb0xpc3RlbmVyOwotY2xhc3MgQmlxdWFkRmlsdGVyTm9kZTsKLWNsYXNzIERlbGF5Tm9kZTsK
LWNsYXNzIERvY3VtZW50OwotY2xhc3MgTG93UGFzczJGaWx0ZXJOb2RlOwotY2xhc3MgSGlnaFBh
c3MyRmlsdGVyTm9kZTsKLWNsYXNzIENvbnZvbHZlck5vZGU7Ci1jbGFzcyBEeW5hbWljc0NvbXBy
ZXNzb3JOb2RlOwotY2xhc3MgUmVhbHRpbWVBbmFseXNlck5vZGU7Ci1jbGFzcyBXYXZlU2hhcGVy
Tm9kZTsKLWNsYXNzIEphdmFTY3JpcHRBdWRpb05vZGU7Ci0KLS8vIEF1ZGlvQ29udGV4dCBpcyB0
aGUgY29ybmVyc3RvbmUgb2YgdGhlIHdlYiBhdWRpbyBBUEkgYW5kIGFsbCBBdWRpb05vZGVzIGFy
ZSBjcmVhdGVkIGZyb20gaXQuCi0vLyBGb3IgdGhyZWFkIHNhZmV0eSBiZXR3ZWVuIHRoZSBhdWRp
byB0aHJlYWQgYW5kIHRoZSBtYWluIHRocmVhZCwgaXQgaGFzIGEgcmVuZGVyaW5nIGdyYXBoIGxv
Y2tpbmcgbWVjaGFuaXNtLiAKLQotY2xhc3MgQXVkaW9Db250ZXh0IDogcHVibGljIEFjdGl2ZURP
TU9iamVjdCwgcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEF1ZGlvQ29udGV4dD4sIHB1Ymxp
YyBFdmVudFRhcmdldCB7Ci1wdWJsaWM6Ci0gICAgLy8gQ3JlYXRlIGFuIEF1ZGlvQ29udGV4dCBm
b3IgcmVuZGVyaW5nIHRvIHRoZSBhdWRpbyBoYXJkd2FyZS4KLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxBdWRpb0NvbnRleHQ+IGNyZWF0ZShEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAg
IC8vIENyZWF0ZSBhbiBBdWRpb0NvbnRleHQgZm9yIG9mZmxpbmUgKG5vbi1yZWFsdGltZSkgcmVu
ZGVyaW5nLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlvQ29udGV4dD4gY3JlYXRlT2ZmbGlu
ZUNvbnRleHQoRG9jdW1lbnQqLCB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBzaXplX3QgbnVt
YmVyT2ZGcmFtZXMsIGZsb2F0IHNhbXBsZVJhdGUsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZp
cnR1YWwgfkF1ZGlvQ29udGV4dCgpOwotCi0gICAgYm9vbCBpc0luaXRpYWxpemVkKCkgY29uc3Q7
Ci0gICAgCi0gICAgYm9vbCBpc09mZmxpbmVDb250ZXh0KCkgeyByZXR1cm4gbV9pc09mZmxpbmVD
b250ZXh0OyB9Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiBpbml0aWFsaXplKCkgd2FzIGNh
bGxlZCBBTkQgYWxsIGFzeW5jaHJvbm91cyBpbml0aWFsaXphdGlvbiBoYXMgY29tcGxldGVkLgot
ICAgIGJvb2wgaXNSdW5uYWJsZSgpIGNvbnN0OwotCi0gICAgLy8gRG9jdW1lbnQgbm90aWZpY2F0
aW9uCi0gICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKLQotICAgIERvY3VtZW50KiBkb2N1bWVudCgp
IGNvbnN0OyAvLyBBU1NFUlRzIGlmIGRvY3VtZW50IG5vIGxvbmdlciBleGlzdHMuCi0gICAgYm9v
bCBoYXNEb2N1bWVudCgpOwotCi0gICAgQXVkaW9EZXN0aW5hdGlvbk5vZGUqIGRlc3RpbmF0aW9u
KCkgeyByZXR1cm4gbV9kZXN0aW5hdGlvbk5vZGUuZ2V0KCk7IH0KLSAgICBzaXplX3QgY3VycmVu
dFNhbXBsZUZyYW1lKCkgeyByZXR1cm4gbV9kZXN0aW5hdGlvbk5vZGUtPmN1cnJlbnRTYW1wbGVG
cmFtZSgpOyB9Ci0gICAgZG91YmxlIGN1cnJlbnRUaW1lKCkgeyByZXR1cm4gbV9kZXN0aW5hdGlv
bk5vZGUtPmN1cnJlbnRUaW1lKCk7IH0KLSAgICBmbG9hdCBzYW1wbGVSYXRlKCkgeyByZXR1cm4g
bV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKTsgfQotCi0gICAgUGFzc1JlZlB0cjxBdWRp
b0J1ZmZlcj4gY3JlYXRlQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBu
dW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBh
c3NSZWZQdHI8QXVkaW9CdWZmZXI+IGNyZWF0ZUJ1ZmZlcihBcnJheUJ1ZmZlciosIGJvb2wgbWl4
VG9Nb25vLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICAvLyBBc3luY2hyb25vdXMgYXVkaW8gZmls
ZSBkYXRhIGRlY29kaW5nLgotICAgIHZvaWQgZGVjb2RlQXVkaW9EYXRhKEFycmF5QnVmZmVyKiwg
UGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNh
bGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYgZWMpOwotCi0gICAgQXVkaW9MaXN0ZW5lciogbGlzdGVu
ZXIoKSB7IHJldHVybiBtX2xpc3RlbmVyLmdldCgpOyB9Ci0KLSAgICAvLyBUaGUgQXVkaW9Ob2Rl
IGNyZWF0ZSBtZXRob2RzIGFyZSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIChmcm9tIEphdmFT
Y3JpcHQpLgotICAgIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJTb3VyY2VOb2RlPiBjcmVhdGVCdWZm
ZXJTb3VyY2UoKTsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgUGFzc1JlZlB0cjxNZWRpYUVsZW1l
bnRBdWRpb1NvdXJjZU5vZGU+IGNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZShIVE1MTWVkaWFFbGVt
ZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotI2VuZGlmCi0gICAgUGFzc1JlZlB0cjxBdWRpb0dhaW5O
b2RlPiBjcmVhdGVHYWluTm9kZSgpOwotICAgIFBhc3NSZWZQdHI8QmlxdWFkRmlsdGVyTm9kZT4g
Y3JlYXRlQmlxdWFkRmlsdGVyKCk7Ci0gICAgUGFzc1JlZlB0cjxXYXZlU2hhcGVyTm9kZT4gY3Jl
YXRlV2F2ZVNoYXBlcigpOwotICAgIFBhc3NSZWZQdHI8RGVsYXlOb2RlPiBjcmVhdGVEZWxheU5v
ZGUoKTsKLSAgICBQYXNzUmVmUHRyPERlbGF5Tm9kZT4gY3JlYXRlRGVsYXlOb2RlKGRvdWJsZSBt
YXhEZWxheVRpbWUpOwotICAgIFBhc3NSZWZQdHI8TG93UGFzczJGaWx0ZXJOb2RlPiBjcmVhdGVM
b3dQYXNzMkZpbHRlcigpOwotICAgIFBhc3NSZWZQdHI8SGlnaFBhc3MyRmlsdGVyTm9kZT4gY3Jl
YXRlSGlnaFBhc3MyRmlsdGVyKCk7Ci0gICAgUGFzc1JlZlB0cjxBdWRpb1Bhbm5lck5vZGU+IGNy
ZWF0ZVBhbm5lcigpOwotICAgIFBhc3NSZWZQdHI8Q29udm9sdmVyTm9kZT4gY3JlYXRlQ29udm9s
dmVyKCk7Ci0gICAgUGFzc1JlZlB0cjxEeW5hbWljc0NvbXByZXNzb3JOb2RlPiBjcmVhdGVEeW5h
bWljc0NvbXByZXNzb3IoKTsgICAgCi0gICAgUGFzc1JlZlB0cjxSZWFsdGltZUFuYWx5c2VyTm9k
ZT4gY3JlYXRlQW5hbHlzZXIoKTsKLSAgICBQYXNzUmVmUHRyPEphdmFTY3JpcHRBdWRpb05vZGU+
IGNyZWF0ZUphdmFTY3JpcHROb2RlKHNpemVfdCBidWZmZXJTaXplKTsKLSAgICBQYXNzUmVmUHRy
PEF1ZGlvQ2hhbm5lbFNwbGl0dGVyPiBjcmVhdGVDaGFubmVsU3BsaXR0ZXIoKTsKLSAgICBQYXNz
UmVmUHRyPEF1ZGlvQ2hhbm5lbE1lcmdlcj4gY3JlYXRlQ2hhbm5lbE1lcmdlcigpOwotCi0gICAg
Ly8gV2hlbiBhIHNvdXJjZSBub2RlIGhhcyBubyBtb3JlIHByb2Nlc3NpbmcgdG8gZG8gKGhhcyBm
aW5pc2hlZCBwbGF5aW5nKSwgdGhlbiBpdCB0ZWxscyB0aGUgY29udGV4dCB0byBkZXJlZmVyZW5j
ZSBpdC4KLSAgICB2b2lkIG5vdGlmeU5vZGVGaW5pc2hlZFByb2Nlc3NpbmcoQXVkaW9Ob2RlKik7
Ci0KLSAgICAvLyBDYWxsZWQgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggcmVuZGVyIHF1YW50dW0uCi0g
ICAgdm9pZCBoYW5kbGVQcmVSZW5kZXJUYXNrcygpOwotCi0gICAgLy8gQ2FsbGVkIGF0IHRoZSBl
bmQgb2YgZWFjaCByZW5kZXIgcXVhbnR1bS4KLSAgICB2b2lkIGhhbmRsZVBvc3RSZW5kZXJUYXNr
cygpOwotCi0gICAgLy8gQ2FsbGVkIHBlcmlvZGljYWxseSBhdCB0aGUgZW5kIG9mIGVhY2ggcmVu
ZGVyIHF1YW50dW0gdG8gZGVyZWZlcmVuY2UgZmluaXNoZWQgc291cmNlIG5vZGVzLgotICAgIHZv
aWQgZGVyZWZGaW5pc2hlZFNvdXJjZU5vZGVzKCk7Ci0KLSAgICAvLyBXZSBzY2hlZHVsZSBkZWxl
dGlvbiBvZiBhbGwgbWFya2VkIG5vZGVzIGF0IHRoZSBlbmQgb2YgZWFjaCByZWFsdGltZSByZW5k
ZXIgcXVhbnR1bS4KLSAgICB2b2lkIG1hcmtGb3JEZWxldGlvbihBdWRpb05vZGUqKTsKLSAgICB2
b2lkIGRlbGV0ZU1hcmtlZE5vZGVzKCk7Ci0gICAgCi0gICAgLy8gS2VlcHMgdHJhY2sgb2YgdGhl
IG51bWJlciBvZiBjb25uZWN0aW9ucyBtYWRlLgotICAgIHZvaWQgaW5jcmVtZW50Q29ubmVjdGlv
bkNvdW50KCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgICAg
IG1fY29ubmVjdGlvbkNvdW50Kys7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY29ubmVjdGlvbkNv
dW50KCkgY29uc3QgeyByZXR1cm4gbV9jb25uZWN0aW9uQ291bnQ7IH0KLQotICAgIC8vCi0gICAg
Ly8gVGhyZWFkIFNhZmV0eSBhbmQgR3JhcGggTG9ja2luZzoKLSAgICAvLwotICAgIAotICAgIHZv
aWQgc2V0QXVkaW9UaHJlYWQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWQpIHsgbV9hdWRpb1RocmVh
ZCA9IHRocmVhZDsgfSAvLyBGSVhNRTogY2hlY2sgZWl0aGVyIG5vdCBpbml0aWFsaXplZCBvciB0
aGUgc2FtZQotICAgIFRocmVhZElkZW50aWZpZXIgYXVkaW9UaHJlYWQoKSBjb25zdCB7IHJldHVy
biBtX2F1ZGlvVGhyZWFkOyB9Ci0gICAgYm9vbCBpc0F1ZGlvVGhyZWFkKCkgY29uc3Q7Ci0KLSAg
ICAvLyBSZXR1cm5zIHRydWUgb25seSBhZnRlciB0aGUgYXVkaW8gdGhyZWFkIGhhcyBiZWVuIHN0
YXJ0ZWQgYW5kIHRoZW4gc2h1dGRvd24uCi0gICAgYm9vbCBpc0F1ZGlvVGhyZWFkRmluaXNoZWQo
KSB7IHJldHVybiBtX2lzQXVkaW9UaHJlYWRGaW5pc2hlZDsgfQotICAgIAotICAgIC8vIG11c3RS
ZWxlYXNlTG9jayBpcyBzZXQgdG8gdHJ1ZSBpZiB3ZSBhY3F1aXJlZCB0aGUgbG9jayBpbiB0aGlz
IG1ldGhvZCBjYWxsIGFuZCBjYWxsZXIgbXVzdCB1bmxvY2soKSwgZmFsc2UgaWYgaXQgd2FzIHBy
ZXZpb3VzbHkgYWNxdWlyZWQuCi0gICAgdm9pZCBsb2NrKGJvb2wmIG11c3RSZWxlYXNlTG9jayk7
Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgd2Ugb3duIHRoZSBsb2NrLgotICAgIC8vIG11c3RS
ZWxlYXNlTG9jayBpcyBzZXQgdG8gdHJ1ZSBpZiB3ZSBhY3F1aXJlZCB0aGUgbG9jayBpbiB0aGlz
IG1ldGhvZCBjYWxsIGFuZCBjYWxsZXIgbXVzdCB1bmxvY2soKSwgZmFsc2UgaWYgaXQgd2FzIHBy
ZXZpb3VzbHkgYWNxdWlyZWQuCi0gICAgYm9vbCB0cnlMb2NrKGJvb2wmIG11c3RSZWxlYXNlTG9j
ayk7Ci0KLSAgICB2b2lkIHVubG9jaygpOwotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMg
dGhyZWFkIG93bnMgdGhlIGNvbnRleHQncyBsb2NrLgotICAgIGJvb2wgaXNHcmFwaE93bmVyKCkg
Y29uc3Q7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bXViZXIgb2YgY2hhbm5lbHMg
d2UgY2FuIHN1cHBvcnQuCi0gICAgc3RhdGljIHVuc2lnbmVkIG1heE51bWJlck9mQ2hhbm5lbHMo
KSB7IHJldHVybiBNYXhOdW1iZXJPZkNoYW5uZWxzO30KLQotICAgIGNsYXNzIEF1dG9Mb2NrZXIg
ewotICAgIHB1YmxpYzoKLSAgICAgICAgQXV0b0xvY2tlcihBdWRpb0NvbnRleHQqIGNvbnRleHQp
Ci0gICAgICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBBU1NFUlQoY29udGV4dCk7Ci0gICAgICAgICAgICBjb250ZXh0LT5sb2NrKG1fbXVzdFJlbGVh
c2VMb2NrKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgfkF1dG9Mb2NrZXIoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAobV9tdXN0UmVsZWFzZUxvY2spCi0gICAgICAgICAgICAg
ICAgbV9jb250ZXh0LT51bmxvY2soKTsKLSAgICAgICAgfQotICAgIHByaXZhdGU6Ci0gICAgICAg
IEF1ZGlvQ29udGV4dCogbV9jb250ZXh0OwotICAgICAgICBib29sIG1fbXVzdFJlbGVhc2VMb2Nr
OwotICAgIH07Ci0gICAgCi0gICAgLy8gSW4gQXVkaW9Ob2RlOjpkZXJlZigpIGEgdHJ5TG9jaygp
IGlzIHVzZWQgZm9yIGNhbGxpbmcgZmluaXNoRGVyZWYoKSwgYnV0IGlmIGl0IGZhaWxzIGtlZXAg
dHJhY2sgaGVyZS4KLSAgICB2b2lkIGFkZERlZmVycmVkRmluaXNoRGVyZWYoQXVkaW9Ob2RlKiwg
QXVkaW9Ob2RlOjpSZWZUeXBlKTsKLQotICAgIC8vIEluIHRoZSBhdWRpbyB0aHJlYWQgYXQgdGhl
IHN0YXJ0IG9mIGVhY2ggcmVuZGVyIGN5Y2xlLCB3ZSdsbCBjYWxsIGhhbmRsZURlZmVycmVkRmlu
aXNoRGVyZWZzKCkuCi0gICAgdm9pZCBoYW5kbGVEZWZlcnJlZEZpbmlzaERlcmVmcygpOwotCi0g
ICAgLy8gT25seSBhY2Nlc3NlZCB3aGVuIHRoZSBncmFwaCBsb2NrIGlzIGhlbGQuCi0gICAgdm9p
ZCBtYXJrQXVkaW9Ob2RlSW5wdXREaXJ0eShBdWRpb05vZGVJbnB1dCopOwotICAgIHZvaWQgbWFy
a0F1ZGlvTm9kZU91dHB1dERpcnR5KEF1ZGlvTm9kZU91dHB1dCopOwotCi0gICAgLy8gRXZlbnRU
YXJnZXQKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNv
bnN0OwotICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdl
dERhdGEoKSB7IHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7IH0KLSAgICB2aXJ0dWFsIEV2ZW50
VGFyZ2V0RGF0YSogZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkgeyByZXR1cm4gJm1fZXZlbnRUYXJn
ZXREYXRhOyB9Ci0KLSAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGNvbXBsZXRl
KTsKLQotICAgIC8vIFJlY29uY2lsZSByZWYvZGVyZWYgd2hpY2ggYXJlIGRlZmluZWQgYm90aCBp
biBUaHJlYWRTYWZlUmVmQ291bnRlZCBhbmQgRXZlbnRUYXJnZXQuCi0gICAgdXNpbmcgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8QXVkaW9Db250ZXh0Pjo6cmVmOwotICAgIHVzaW5nIFRocmVhZFNhZmVS
ZWZDb3VudGVkPEF1ZGlvQ29udGV4dD46OmRlcmVmOwotCi0gICAgdm9pZCBzdGFydFJlbmRlcmlu
ZygpOwotICAgIHZvaWQgZmlyZUNvbXBsZXRpb25FdmVudCgpOwotICAgIAotICAgIHN0YXRpYyB1
bnNpZ25lZCBzX2hhcmR3YXJlQ29udGV4dENvdW50OwotICAgIAotcHJpdmF0ZToKLSAgICBBdWRp
b0NvbnRleHQoRG9jdW1lbnQqKTsKLSAgICBBdWRpb0NvbnRleHQoRG9jdW1lbnQqLCB1bnNpZ25l
ZCBudW1iZXJPZkNoYW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMsIGZsb2F0IHNhbXBsZVJh
dGUpOwotICAgIHZvaWQgY29uc3RydWN0Q29tbW9uKCk7Ci0KLSAgICB2b2lkIGxhenlJbml0aWFs
aXplKCk7Ci0gICAgdm9pZCB1bmluaXRpYWxpemUoKTsKLSAgICBzdGF0aWMgdm9pZCB1bmluaXRp
YWxpemVEaXNwYXRjaCh2b2lkKiB1c2VyRGF0YSk7Ci0KLSAgICB2b2lkIHNjaGVkdWxlTm9kZURl
bGV0aW9uKCk7Ci0gICAgc3RhdGljIHZvaWQgZGVsZXRlTWFya2VkTm9kZXNEaXNwYXRjaCh2b2lk
KiB1c2VyRGF0YSk7Ci0gICAgCi0gICAgYm9vbCBtX2lzSW5pdGlhbGl6ZWQ7Ci0gICAgYm9vbCBt
X2lzQXVkaW9UaHJlYWRGaW5pc2hlZDsKLSAgICBib29sIG1faXNBdWRpb1RocmVhZFNodXRkb3du
OwotCi0gICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7Ci0KLSAgICAvLyBUaGUgY29udGV4dCBpdHNl
bGYga2VlcHMgYSByZWZlcmVuY2UgdG8gYWxsIHNvdXJjZSBub2Rlcy4gIFRoZSBzb3VyY2Ugbm9k
ZXMsIHRoZW4gcmVmZXJlbmNlIGFsbCBub2RlcyB0aGV5J3JlIGNvbm5lY3RlZCB0by4KLSAgICAv
LyBJbiB0dXJuLCB0aGVzZSBub2RlcyByZWZlcmVuY2UgYWxsIG5vZGVzIHRoZXkncmUgY29ubmVj
dGVkIHRvLiAgQWxsIG5vZGVzIGFyZSB1bHRpbWF0ZWx5IGNvbm5lY3RlZCB0byB0aGUgQXVkaW9E
ZXN0aW5hdGlvbk5vZGUuCi0gICAgLy8gV2hlbiB0aGUgY29udGV4dCBkZXJlZmVyZW5jZXMgYSBz
b3VyY2Ugbm9kZSwgaXQgd2lsbCBiZSBkZWFjdGl2YXRlZCBmcm9tIHRoZSByZW5kZXJpbmcgZ3Jh
cGggYWxvbmcgd2l0aCBhbGwgb3RoZXIgbm9kZXMgaXQgaXMKLSAgICAvLyB1bmlxdWVseSBjb25u
ZWN0ZWQgdG8uICBTZWUgdGhlIEF1ZGlvTm9kZTo6cmVmKCkgYW5kIEF1ZGlvTm9kZTo6ZGVyZWYo
KSBtZXRob2RzIGZvciBtb3JlIGRldGFpbHMuCi0gICAgdm9pZCByZWZOb2RlKEF1ZGlvTm9kZSop
OwotICAgIHZvaWQgZGVyZWZOb2RlKEF1ZGlvTm9kZSopOwotCi0gICAgLy8gV2hlbiB0aGUgY29u
dGV4dCBnb2VzIGF3YXksIHRoZXJlIG1pZ2h0IHN0aWxsIGJlIHNvbWUgc291cmNlcyB3aGljaCBo
YXZlbid0IGZpbmlzaGVkIHBsYXlpbmcuCi0gICAgLy8gTWFrZSBzdXJlIHRvIGRlcmVmZXJlbmNl
IHRoZW0gaGVyZS4KLSAgICB2b2lkIGRlcmVmVW5maW5pc2hlZFNvdXJjZU5vZGVzKCk7Ci0KLSAg
ICBSZWZQdHI8QXVkaW9EZXN0aW5hdGlvbk5vZGU+IG1fZGVzdGluYXRpb25Ob2RlOwotICAgIFJl
ZlB0cjxBdWRpb0xpc3RlbmVyPiBtX2xpc3RlbmVyOwotCi0gICAgLy8gT25seSBhY2Nlc3NlZCBp
biB0aGUgYXVkaW8gdGhyZWFkLgotICAgIFZlY3RvcjxBdWRpb05vZGUqPiBtX2ZpbmlzaGVkTm9k
ZXM7Ci0KLSAgICAvLyBXZSBkb24ndCB1c2UgUmVmUHRyPEF1ZGlvTm9kZT4gaGVyZSBiZWNhdXNl
IEF1ZGlvTm9kZSBoYXMgYSBtb3JlIGNvbXBsZXggcmVmKCkgLyBkZXJlZigpIGltcGxlbWVudGF0
aW9uCi0gICAgLy8gd2l0aCBhbiBvcHRpb25hbCBhcmd1bWVudCBmb3IgcmVmVHlwZS4gIFdlIG5l
ZWQgdG8gdXNlIHRoZSBzcGVjaWFsIHJlZlR5cGU6IFJlZlR5cGVDb25uZWN0aW9uCi0gICAgLy8g
RWl0aGVyIGFjY2Vzc2VkIHdoZW4gdGhlIGdyYXBoIGxvY2sgaXMgaGVsZCwgb3Igb24gdGhlIG1h
aW4gdGhyZWFkIHdoZW4gdGhlIGF1ZGlvIHRocmVhZCBoYXMgZmluaXNoZWQuCi0gICAgVmVjdG9y
PEF1ZGlvTm9kZSo+IG1fcmVmZXJlbmNlZE5vZGVzOwotCi0gICAgLy8gQWNjdW11bGF0ZSBub2Rl
cyB3aGljaCBuZWVkIHRvIGJlIGRlbGV0ZWQgaGVyZS4KLSAgICAvLyBUaGV5IHdpbGwgYmUgc2No
ZWR1bGVkIGZvciBkZWxldGlvbiAob24gdGhlIG1haW4gdGhyZWFkKSBhdCB0aGUgZW5kIG9mIGEg
cmVuZGVyIGN5Y2xlIChpbiByZWFsdGltZSB0aHJlYWQpLgotICAgIFZlY3RvcjxBdWRpb05vZGUq
PiBtX25vZGVzVG9EZWxldGU7Ci0gICAgYm9vbCBtX2lzRGVsZXRpb25TY2hlZHVsZWQ7Ci0KLSAg
ICAvLyBPbmx5IGFjY2Vzc2VkIHdoZW4gdGhlIGdyYXBoIGxvY2sgaXMgaGVsZC4KLSAgICBIYXNo
U2V0PEF1ZGlvTm9kZUlucHV0Kj4gbV9kaXJ0eUF1ZGlvTm9kZUlucHV0czsKLSAgICBIYXNoU2V0
PEF1ZGlvTm9kZU91dHB1dCo+IG1fZGlydHlBdWRpb05vZGVPdXRwdXRzOwotICAgIHZvaWQgaGFu
ZGxlRGlydHlBdWRpb05vZGVJbnB1dHMoKTsKLSAgICB2b2lkIGhhbmRsZURpcnR5QXVkaW9Ob2Rl
T3V0cHV0cygpOwotCi0gICAgdW5zaWduZWQgbV9jb25uZWN0aW9uQ291bnQ7Ci0KLSAgICAvLyBH
cmFwaCBsb2NraW5nLgotICAgIE11dGV4IG1fY29udGV4dEdyYXBoTXV0ZXg7Ci0gICAgdm9sYXRp
bGUgVGhyZWFkSWRlbnRpZmllciBtX2F1ZGlvVGhyZWFkOwotICAgIHZvbGF0aWxlIFRocmVhZElk
ZW50aWZpZXIgbV9ncmFwaE93bmVyVGhyZWFkOyAvLyBpZiB0aGUgbG9jayBpcyBoZWxkIHRoZW4g
dGhpcyBpcyB0aGUgdGhyZWFkIHdoaWNoIG93bnMgaXQsIG90aGVyd2lzZSA9PSBVbmRlZmluZWRU
aHJlYWRJZGVudGlmaWVyCi0gICAgCi0gICAgLy8gRGVmZXJyZWQgZGUtcmVmZXJlbmNpbmcuCi0g
ICAgc3RydWN0IFJlZkluZm8gewotICAgICAgICBSZWZJbmZvKEF1ZGlvTm9kZSogbm9kZSwgQXVk
aW9Ob2RlOjpSZWZUeXBlIHJlZlR5cGUpCi0gICAgICAgICAgICA6IG1fbm9kZShub2RlKQotICAg
ICAgICAgICAgLCBtX3JlZlR5cGUocmVmVHlwZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAg
ICAgIEF1ZGlvTm9kZSogbV9ub2RlOwotICAgICAgICBBdWRpb05vZGU6OlJlZlR5cGUgbV9yZWZU
eXBlOwotICAgIH07ICAgIAotCi0gICAgLy8gT25seSBhY2Nlc3NlZCBpbiB0aGUgYXVkaW8gdGhy
ZWFkLgotICAgIFZlY3RvcjxSZWZJbmZvPiBtX2RlZmVycmVkRmluaXNoRGVyZWZMaXN0OwotICAg
IAotICAgIC8vIEhSVEYgRGF0YWJhc2UgbG9hZGVyCi0gICAgUmVmUHRyPEhSVEZEYXRhYmFzZUxv
YWRlcj4gbV9ocnRmRGF0YWJhc2VMb2FkZXI7Ci0KLSAgICAvLyBFdmVudFRhcmdldAotICAgIHZp
cnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
ZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQotICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2
ZW50VGFyZ2V0RGF0YTsKLQotICAgIFJlZlB0cjxBdWRpb0J1ZmZlcj4gbV9yZW5kZXJUYXJnZXQ7
Ci0gICAgCi0gICAgYm9vbCBtX2lzT2ZmbGluZUNvbnRleHQ7Ci0KLSAgICBBc3luY0F1ZGlvRGVj
b2RlciBtX2F1ZGlvRGVjb2RlcjsKLQotICAgIC8vIFRoaXMgaXMgY29uc2lkZXJpbmcgMzIgaXMg
bGFyZ2UgZW5vdWdoIGZvciBtdWx0aXBsZSBjaGFubmVscyBhdWRpby4gCi0gICAgLy8gSXQgaXMg
c29tZXdoYXQgYXJiaXRyYXJ5IGFuZCBjb3VsZCBiZSBpbmNyZWFzZWQgaWYgbmVjZXNzYXJ5Lgot
ICAgIGVudW0geyBNYXhOdW1iZXJPZkNoYW5uZWxzID0gMzIgfTsKLQotfTsKLQotfSAvLyBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBBdWRpb0NvbnRleHRfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9BdWRpb0NvbnRleHQuaWRsCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg0ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwot
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotbW9kdWxlIHdlYmF1ZGlvIHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAg
ICBDb25kaXRpb25hbD1XRUJfQVVESU8sCi0gICAgICAgIEFjdGl2ZURPTU9iamVjdCwKLSAgICAg
ICAgQ3VzdG9tQ29uc3RydWN0b3IsCi0gICAgICAgIENvbnN0cnVjdG9yUGFyYW1ldGVycz0wLAot
ICAgICAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKLSAgICAgICAgRXZlbnRUYXJnZXQKLSAgICBd
IEF1ZGlvQ29udGV4dCB7Ci0gICAgICAgIC8vIEFsbCByZW5kZXJlZCBhdWRpbyB1bHRpbWF0ZWx5
IGNvbm5lY3RzIHRvIGRlc3RpbmF0aW9uLCB3aGljaCByZXByZXNlbnRzIHRoZSBhdWRpbyBoYXJk
d2FyZS4KLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlvRGVzdGluYXRpb25Ob2RlIGRl
c3RpbmF0aW9uOwotCi0gICAgICAgIC8vIEFsbCBzY2hlZHVsZWQgdGltZXMgYXJlIHJlbGF0aXZl
IHRvIHRoaXMgdGltZSBpbiBzZWNvbmRzLgotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgZmxv
YXQgY3VycmVudFRpbWU7Ci0KLSAgICAgICAgLy8gQWxsIEF1ZGlvTm9kZXMgaW4gdGhlIGNvbnRl
eHQgcnVuIGF0IHRoaXMgc2FtcGxlLXJhdGUgKGluIHNhbXBsZS1mcmFtZXMgcGVyIHNlY29uZCku
Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBmbG9hdCBzYW1wbGVSYXRlOwotCi0gICAgICAg
IC8vIEFsbCBwYW5uaW5nIGlzIHJlbGF0aXZlIHRvIHRoaXMgbGlzdGVuZXIuCi0gICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBBdWRpb0xpc3RlbmVyIGxpc3RlbmVyOwotCi0gICAgICAgIEF1ZGlv
QnVmZmVyIGNyZWF0ZUJ1ZmZlcihpbiB1bnNpZ25lZCBsb25nIG51bWJlck9mQ2hhbm5lbHMsIGlu
IHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZGcmFtZXMsIGluIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAg
ICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLSAgICAgICAgQXVkaW9CdWZmZXIgY3JlYXRl
QnVmZmVyKGluIEFycmF5QnVmZmVyIGJ1ZmZlciwgaW4gYm9vbGVhbiBtaXhUb01vbm8pCi0gICAg
ICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLQotICAgICAgICAvLyBBc3luY2hyb25vdXMg
YXVkaW8gZmlsZSBkYXRhIGRlY29kaW5nLgotICAgICAgICB2b2lkIGRlY29kZUF1ZGlvRGF0YShp
biBBcnJheUJ1ZmZlciBhdWRpb0RhdGEsIGluIFtDYWxsYmFja10gQXVkaW9CdWZmZXJDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2ssIGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIEF1ZGlvQnVmZmVyQ2Fs
bGJhY2sgZXJyb3JDYWxsYmFjaykKLSAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwot
Ci0gICAgICAgIC8vIFNvdXJjZXMKLSAgICAgICAgQXVkaW9CdWZmZXJTb3VyY2VOb2RlIGNyZWF0
ZUJ1ZmZlclNvdXJjZSgpOwotI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVfVklE
RU8KLSAgICAgICAgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlIGNyZWF0ZU1lZGlhRWxlbWVu
dFNvdXJjZShpbiBIVE1MTWVkaWFFbGVtZW50IG1lZGlhRWxlbWVudCkKLSAgICAgICAgICAgIHJh
aXNlcyhET01FeGNlcHRpb24pOwotI2VuZGlmCi0gICAgICAgIC8vIFByb2Nlc3Npbmcgbm9kZXMK
LSAgICAgICAgQXVkaW9HYWluTm9kZSBjcmVhdGVHYWluTm9kZSgpOwotICAgICAgICBEZWxheU5v
ZGUgY3JlYXRlRGVsYXlOb2RlKGluIFtPcHRpb25hbF0gZG91YmxlIG1heERlbGF5VGltZSk7Ci0g
ICAgICAgIEJpcXVhZEZpbHRlck5vZGUgY3JlYXRlQmlxdWFkRmlsdGVyKCk7Ci0gICAgICAgIFdh
dmVTaGFwZXJOb2RlIGNyZWF0ZVdhdmVTaGFwZXIoKTsKLSAgICAgICAgTG93UGFzczJGaWx0ZXJO
b2RlIGNyZWF0ZUxvd1Bhc3MyRmlsdGVyKCk7Ci0gICAgICAgIEhpZ2hQYXNzMkZpbHRlck5vZGUg
Y3JlYXRlSGlnaFBhc3MyRmlsdGVyKCk7Ci0gICAgICAgIEF1ZGlvUGFubmVyTm9kZSBjcmVhdGVQ
YW5uZXIoKTsKLSAgICAgICAgQ29udm9sdmVyTm9kZSBjcmVhdGVDb252b2x2ZXIoKTsKLSAgICAg
ICAgRHluYW1pY3NDb21wcmVzc29yTm9kZSBjcmVhdGVEeW5hbWljc0NvbXByZXNzb3IoKTsKLSAg
ICAgICAgUmVhbHRpbWVBbmFseXNlck5vZGUgY3JlYXRlQW5hbHlzZXIoKTsKLSAgICAgICAgSmF2
YVNjcmlwdEF1ZGlvTm9kZSBjcmVhdGVKYXZhU2NyaXB0Tm9kZShpbiB1bnNpZ25lZCBsb25nIGJ1
ZmZlclNpemUpOwotCi0gICAgICAgIC8vIENoYW5uZWwgc3BsaXR0aW5nIGFuZCBtZXJnaW5nCi0g
ICAgICAgIEF1ZGlvQ2hhbm5lbFNwbGl0dGVyIGNyZWF0ZUNoYW5uZWxTcGxpdHRlcigpOwotICAg
ICAgICBBdWRpb0NoYW5uZWxNZXJnZXIgY3JlYXRlQ2hhbm5lbE1lcmdlcigpOwotCi0gICAgICAg
IC8vIE9mZmxpbmUgcmVuZGVyaW5nCi0gICAgICAgIC8vIHZvaWQgcHJlcGFyZU9mZmxpbmVCdWZm
ZXJSZW5kZXJpbmcoaW4gdW5zaWduZWQgbG9uZyBudW1iZXJPZkNoYW5uZWxzLCBpbiB1bnNpZ25l
ZCBsb25nIG51bWJlck9mRnJhbWVzLCBpbiBmbG9hdCBzYW1wbGVSYXRlKTsKLSAgICAgICAgYXR0
cmlidXRlIEV2ZW50TGlzdGVuZXIgb25jb21wbGV0ZTsKLSAgICAgICAgdm9pZCBzdGFydFJlbmRl
cmluZygpOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Rl
c3RpbmF0aW9uTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVO
QUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgotCi0j
aW5jbHVkZSAiQXVkaW9CdXMuaCIKLSNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJBdWRpb05vZGVJbnB1dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgotI2luY2x1
ZGUgIkF1ZGlvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiRGVub3JtYWxEaXNhYmxlci5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6QXVkaW9EZXN0
aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotICAg
IDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCi0gICAgLCBtX2N1cnJlbnRTYW1wbGVG
cmFtZSgwKQotewotICAgIGFkZElucHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVJbnB1dCh0aGlz
KSkpOwotICAgIAotICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlRGVzdGluYXRpb24pOwotfQotCi1B
dWRpb0Rlc3RpbmF0aW9uTm9kZTo6fkF1ZGlvRGVzdGluYXRpb25Ob2RlKCkKLXsKLSAgICB1bmlu
aXRpYWxpemUoKTsKLX0KLQotLy8gVGhlIGF1ZGlvIGhhcmR3YXJlIGNhbGxzIHVzIGJhY2sgaGVy
ZSB0byBnZXRzIGl0cyBpbnB1dCBzdHJlYW0uCi12b2lkIEF1ZGlvRGVzdGluYXRpb25Ob2RlOjpw
cm92aWRlSW5wdXQoQXVkaW9CdXMqIGRlc3RpbmF0aW9uQnVzLCBzaXplX3QgbnVtYmVyT2ZGcmFt
ZXMpCi17Ci0gICAgLy8gV2UgZG9uJ3Qgd2FudCBkZW5vcm1hbHMgc2xvd2luZyBkb3duIGFueSBv
ZiB0aGUgYXVkaW8gcHJvY2Vzc2luZwotICAgIC8vIHNpbmNlIHRoZXkgY2FuIHZlcnkgc2VyaW91
c2x5IGh1cnQgcGVyZm9ybWFuY2UuCi0gICAgLy8gVGhpcyB3aWxsIHRha2UgY2FyZSBvZiBhbGwg
QXVkaW9Ob2RlcyBiZWNhdXNlIHRoZXkgYWxsIHByb2Nlc3Mgd2l0aGluIHRoaXMgc2NvcGUuCi0g
ICAgRGVub3JtYWxEaXNhYmxlciBkZW5vcm1hbERpc2FibGVyOwotICAgIAotICAgIGNvbnRleHQo
KS0+c2V0QXVkaW9UaHJlYWQoY3VycmVudFRocmVhZCgpKTsKLSAgICAKLSAgICBpZiAoIWNvbnRl
eHQoKS0+aXNSdW5uYWJsZSgpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uQnVzLT56ZXJvKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBMZXQgdGhlIGNvbnRleHQgdGFrZSBjYXJl
IG9mIGFueSBidXNpbmVzcyBhdCB0aGUgc3RhcnQgb2YgZWFjaCByZW5kZXIgcXVhbnR1bS4KLSAg
ICBjb250ZXh0KCktPmhhbmRsZVByZVJlbmRlclRhc2tzKCk7Ci0KLSAgICAvLyBUaGlzIHdpbGwg
Y2F1c2UgdGhlIG5vZGUocykgY29ubmVjdGVkIHRvIHVzIHRvIHByb2Nlc3MsIHdoaWNoIGluIHR1
cm4gd2lsbCBwdWxsIG9uIHRoZWlyIGlucHV0KHMpLAotICAgIC8vIGFsbCB0aGUgd2F5IGJhY2t3
YXJkcyB0aHJvdWdoIHRoZSByZW5kZXJpbmcgZ3JhcGguCi0gICAgQXVkaW9CdXMqIHJlbmRlcmVk
QnVzID0gaW5wdXQoMCktPnB1bGwoZGVzdGluYXRpb25CdXMsIG51bWJlck9mRnJhbWVzKTsKLSAg
ICAKLSAgICBpZiAoIXJlbmRlcmVkQnVzKQotICAgICAgICBkZXN0aW5hdGlvbkJ1cy0+emVybygp
OwotICAgIGVsc2UgaWYgKHJlbmRlcmVkQnVzICE9IGRlc3RpbmF0aW9uQnVzKSB7Ci0gICAgICAg
IC8vIGluLXBsYWNlIHByb2Nlc3Npbmcgd2FzIG5vdCBwb3NzaWJsZSAtIHNvIGNvcHkKLSAgICAg
ICAgZGVzdGluYXRpb25CdXMtPmNvcHlGcm9tKCpyZW5kZXJlZEJ1cyk7Ci0gICAgfQotCi0gICAg
Ly8gTGV0IHRoZSBjb250ZXh0IHRha2UgY2FyZSBvZiBhbnkgYnVzaW5lc3MgYXQgdGhlIGVuZCBv
ZiBlYWNoIHJlbmRlciBxdWFudHVtLgotICAgIGNvbnRleHQoKS0+aGFuZGxlUG9zdFJlbmRlclRh
c2tzKCk7Ci0gICAgCi0gICAgLy8gQWR2YW5jZSBjdXJyZW50IHNhbXBsZS1mcmFtZS4KLSAgICBt
X2N1cnJlbnRTYW1wbGVGcmFtZSArPSBudW1iZXJPZkZyYW1lczsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaAkocmV2aXNpb24gMTEx
MjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBdWRp
b0Rlc3RpbmF0aW9uTm9kZV9oCi0jZGVmaW5lIEF1ZGlvRGVzdGluYXRpb25Ob2RlX2gKLQotI2lu
Y2x1ZGUgIkF1ZGlvQnVmZmVyLmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCi0jaW5jbHVkZSAi
QXVkaW9Tb3VyY2VQcm92aWRlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1
ZGlvQnVzOwotY2xhc3MgQXVkaW9Db250ZXh0OwotICAgIAotY2xhc3MgQXVkaW9EZXN0aW5hdGlv
bk5vZGUgOiBwdWJsaWMgQXVkaW9Ob2RlLCBwdWJsaWMgQXVkaW9Tb3VyY2VQcm92aWRlciB7Ci1w
dWJsaWM6Ci0gICAgQXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2Ft
cGxlUmF0ZSk7Ci0gICAgdmlydHVhbCB+QXVkaW9EZXN0aW5hdGlvbk5vZGUoKTsKLSAgICAKLSAg
ICAvLyBBdWRpb05vZGUgICAKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QpIHsgfTsg
Ly8gd2UncmUgcHVsbGVkIGJ5IGhhcmR3YXJlIHNvIHRoaXMgaXMgbmV2ZXIgY2FsbGVkCi0gICAg
dmlydHVhbCB2b2lkIHJlc2V0KCkgeyBtX2N1cnJlbnRTYW1wbGVGcmFtZSA9IDA7IH07Ci0gICAg
Ci0gICAgLy8gVGhlIGF1ZGlvIGhhcmR3YXJlIGNhbGxzIGhlcmUgcGVyaW9kaWNhbGx5IHRvIGdl
dHMgaXRzIGlucHV0IHN0cmVhbS4KLSAgICB2aXJ0dWFsIHZvaWQgcHJvdmlkZUlucHV0KEF1ZGlv
QnVzKiwgc2l6ZV90IG51bWJlck9mRnJhbWVzKTsKLQotICAgIHNpemVfdCBjdXJyZW50U2FtcGxl
RnJhbWUoKSB7IHJldHVybiBtX2N1cnJlbnRTYW1wbGVGcmFtZTsgfQotICAgIGRvdWJsZSBjdXJy
ZW50VGltZSgpIHsgcmV0dXJuIGN1cnJlbnRTYW1wbGVGcmFtZSgpIC8gc3RhdGljX2Nhc3Q8ZG91
YmxlPihzYW1wbGVSYXRlKCkpOyB9Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIG51bWJlck9mQ2hh
bm5lbHMoKSBjb25zdCB7IHJldHVybiAyOyB9IC8vIEZJWE1FOiB1cGRhdGUgd2hlbiBtdWx0aS1j
aGFubmVsIChtb3JlIHRoYW4gc3RlcmVvKSBpcyBzdXBwb3J0ZWQKLQotICAgIHZpcnR1YWwgdm9p
ZCBzdGFydFJlbmRlcmluZygpID0gMDsKLSAgICAKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGRv
dWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFs
IGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KLQotICAg
IC8vIENvdW50cyB0aGUgbnVtYmVyIG9mIHNhbXBsZS1mcmFtZXMgcHJvY2Vzc2VkIGJ5IHRoZSBk
ZXN0aW5hdGlvbi4KLSAgICBzaXplX3QgbV9jdXJyZW50U2FtcGxlRnJhbWU7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBBdWRpb0Rlc3RpbmF0aW9uTm9kZV9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUu
aWRsCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Rl
c3RpbmF0aW9uTm9kZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLW1vZHVsZSBhdWRpbyB7Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9u
YWw9V0VCX0FVRElPLAotICAgICAgICBKU0dlbmVyYXRlVG9KU09iamVjdAotICAgIF0gQXVkaW9E
ZXN0aW5hdGlvbk5vZGUgOiBBdWRpb05vZGUgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
bG9uZyBudW1iZXJPZkNoYW5uZWxzOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb0dhaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb0dhaW4uaAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9HYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
QXVkaW9HYWluX2gKLSNkZWZpbmUgQXVkaW9HYWluX2gKLQotI2luY2x1ZGUgIkF1ZGlvUGFyYW0u
aCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIEF1ZGlvR2FpbiA6IHB1YmxpYyBBdWRpb1BhcmFtIHsKLXB1YmxpYzogICAKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxBdWRpb0dhaW4+IGNyZWF0ZShjb25zdCBjaGFyKiBuYW1lLCBkb3Vi
bGUgZGVmYXVsdFZhbHVlLCBkb3VibGUgbWluVmFsdWUsIGRvdWJsZSBtYXhWYWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVkaW9HYWluKG5hbWUsIGRlZmF1bHRWYWx1
ZSwgbWluVmFsdWUsIG1heFZhbHVlKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEF1ZGlvR2Fp
bihjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUgZGVmYXVsdFZhbHVlLCBkb3VibGUgbWluVmFsdWUs
IGRvdWJsZSBtYXhWYWx1ZSkKLSAgICAgICAgOiBBdWRpb1BhcmFtKG5hbWUsIGRlZmF1bHRWYWx1
ZSwgbWluVmFsdWUsIG1heFZhbHVlKQotICAgIHsKLSAgICB9Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBBdWRpb1BhcmFtX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvR2Fpbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9HYWluLmlkbAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQXVkaW9HYWluLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzNSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
bW9kdWxlIGF1ZGlvIHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1XRUJf
QVVESU8sCi0gICAgICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0Ci0gICAgXSBBdWRpb0dhaW4gOiBB
dWRpb1BhcmFtIHsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9HYWluTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9HYWluTm9kZS5jcHAJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvR2Fpbk5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExOSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykK
LQotI2luY2x1ZGUgIkF1ZGlvR2Fpbk5vZGUuaCIKLQotI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCi0j
aW5jbHVkZSAiQXVkaW9Ob2RlSW5wdXQuaCIKLSNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1BdWRpb0dhaW5Ob2RlOjpBdWRpb0dhaW5Ob2RlKEF1
ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICA6IEF1ZGlvTm9kZShj
b250ZXh0LCBzYW1wbGVSYXRlKQotICAgICwgbV9sYXN0R2FpbigxLjApCi0gICAgLCBtX3NhbXBs
ZUFjY3VyYXRlR2FpblZhbHVlcyhBdWRpb05vZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXMpIC8v
IEZJWE1FOiBjYW4gcHJvYmFibHkgc2hhcmUgdGVtcCBidWZmZXIgaW4gY29udGV4dAotewotICAg
IG1fZ2FpbiA9IEF1ZGlvR2Fpbjo6Y3JlYXRlKCJnYWluIiwgMS4wLCAwLjAsIDEuMCk7Ci0gICAg
bV9nYWluLT5zZXRDb250ZXh0KGNvbnRleHQpOwotCi0gICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3
IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7Ci0gICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRp
b05vZGVPdXRwdXQodGhpcywgMSkpKTsKLSAgICAKLSAgICBzZXROb2RlVHlwZShOb2RlVHlwZUdh
aW4pOwotICAgIAotICAgIGluaXRpYWxpemUoKTsKLX0KLQotdm9pZCBBdWRpb0dhaW5Ob2RlOjpw
cm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgLy8gRklYTUU6IGZvciBzb21l
IGNhc2VzIHRoZXJlIGlzIGEgbmljZSBvcHRpbWl6YXRpb24gdG8gYXZvaWQgcHJvY2Vzc2luZyBo
ZXJlLCBhbmQgbGV0IHRoZSBnYWluIGNoYW5nZQotICAgIC8vIGhhcHBlbiBpbiB0aGUgc3VtbWlu
ZyBqdW5jdGlvbiBpbnB1dCBvZiB0aGUgQXVkaW9Ob2RlIHdlJ3JlIGNvbm5lY3RlZCB0by4KLSAg
ICAvLyBUaGVuIHdlIGNhbiBhdm9pZCBhbGwgb2YgdGhlIGZvbGxvd2luZzoKLQotICAgIEF1ZGlv
QnVzKiBvdXRwdXRCdXMgPSBvdXRwdXQoMCktPmJ1cygpOwotICAgIEFTU0VSVChvdXRwdXRCdXMp
OwotCi0gICAgaWYgKCFpc0luaXRpYWxpemVkKCkgfHwgIWlucHV0KDApLT5pc0Nvbm5lY3RlZCgp
KQotICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQXVkaW9C
dXMqIGlucHV0QnVzID0gaW5wdXQoMCktPmJ1cygpOwotCi0gICAgICAgIGlmIChnYWluKCktPmhh
c1RpbWVsaW5lVmFsdWVzKCkpIHsKLSAgICAgICAgICAgIC8vIEFwcGx5IHNhbXBsZS1hY2N1cmF0
ZSBnYWluIHNjYWxpbmcgZm9yIHByZWNpc2UgZW52ZWxvcGVzLCBncmFpbiB3aW5kb3dzLCBldGMu
Ci0gICAgICAgICAgICBBU1NFUlQoZnJhbWVzVG9Qcm9jZXNzIDw9IG1fc2FtcGxlQWNjdXJhdGVH
YWluVmFsdWVzLnNpemUoKSk7Ci0gICAgICAgICAgICBpZiAoZnJhbWVzVG9Qcm9jZXNzIDw9IG1f
c2FtcGxlQWNjdXJhdGVHYWluVmFsdWVzLnNpemUoKSkgewotICAgICAgICAgICAgICAgIGZsb2F0
KiBnYWluVmFsdWVzID0gbV9zYW1wbGVBY2N1cmF0ZUdhaW5WYWx1ZXMuZGF0YSgpOwotICAgICAg
ICAgICAgICAgIGdhaW4oKS0+Y2FsY3VsYXRlU2FtcGxlQWNjdXJhdGVWYWx1ZXMoZ2FpblZhbHVl
cywgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAgICAgICAgICAgICBvdXRwdXRCdXMtPmNvcHlXaXRo
U2FtcGxlQWNjdXJhdGVHYWluVmFsdWVzRnJvbSgqaW5wdXRCdXMsIGdhaW5WYWx1ZXMsIGZyYW1l
c1RvUHJvY2Vzcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAvLyBBcHBseSB0aGUgZ2FpbiB3aXRoIGRlLXppcHBlcmluZyBpbnRvIHRoZSBvdXRwdXQgYnVz
LgotICAgICAgICAgICAgb3V0cHV0QnVzLT5jb3B5V2l0aEdhaW5Gcm9tKCppbnB1dEJ1cywgJm1f
bGFzdEdhaW4sIGdhaW4oKS0+dmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
QXVkaW9HYWluTm9kZTo6cmVzZXQoKQotewotICAgIC8vIFNuYXAgZGlyZWN0bHkgdG8gZGVzaXJl
ZCBnYWluLgotICAgIG1fbGFzdEdhaW4gPSBnYWluKCktPnZhbHVlKCk7Ci19Ci0KLS8vIEZJWE1F
OiB0aGlzIGNhbiBnbyBhd2F5IHdoZW4gd2UgZG8gbWl4aW5nIHdpdGggZ2FpbiBkaXJlY3RseSBp
biBzdW1taW5nIGp1bmN0aW9uIG9mIEF1ZGlvTm9kZUlucHV0Ci0vLwotLy8gQXMgc29vbiBhcyB3
ZSBrbm93IHRoZSBjaGFubmVsIGNvdW50IG9mIG91ciBpbnB1dCwgd2UgY2FuIGxhemlseSBpbml0
aWFsaXplLgotLy8gU29tZXRpbWVzIHRoaXMgbWF5IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSB3
aXRoIGRpZmZlcmVudCBjaGFubmVsIGNvdW50cywgaW4gd2hpY2ggY2FzZSB3ZSBtdXN0IHNhZmVs
eQotLy8gdW5pbml0aWFsaXplIGFuZCB0aGVuIHJlLWluaXRpYWxpemUgd2l0aCB0aGUgbmV3IGNo
YW5uZWwgY291bnQuCi12b2lkIEF1ZGlvR2Fpbk5vZGU6OmNoZWNrTnVtYmVyT2ZDaGFubmVsc0Zv
cklucHV0KEF1ZGlvTm9kZUlucHV0KiBpbnB1dCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5p
c0F1ZGlvVGhyZWFkKCkgJiYgY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0KLSAgICBBU1NF
UlQoaW5wdXQgJiYgaW5wdXQgPT0gdGhpcy0+aW5wdXQoMCkpOwotICAgIGlmIChpbnB1dCAhPSB0
aGlzLT5pbnB1dCgwKSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICB1bnNpZ25lZCBu
dW1iZXJPZkNoYW5uZWxzID0gaW5wdXQtPm51bWJlck9mQ2hhbm5lbHMoKTsgICAgCi0KLSAgICBp
ZiAoaXNJbml0aWFsaXplZCgpICYmIG51bWJlck9mQ2hhbm5lbHMgIT0gb3V0cHV0KDApLT5udW1i
ZXJPZkNoYW5uZWxzKCkpIHsKLSAgICAgICAgLy8gV2UncmUgYWxyZWFkeSBpbml0aWFsaXplZCBi
dXQgdGhlIGNoYW5uZWwgY291bnQgaGFzIGNoYW5nZWQuCi0gICAgICAgIHVuaW5pdGlhbGl6ZSgp
OwotICAgIH0KLQotICAgIGlmICghaXNJbml0aWFsaXplZCgpKSB7Ci0gICAgICAgIC8vIFRoaXMg
d2lsbCBwcm9wYWdhdGUgdGhlIGNoYW5uZWwgY291bnQgdG8gYW55IG5vZGVzIGNvbm5lY3RlZCBm
dXJ0aGVyIGRvd25zdHJlYW0gaW4gdGhlIGdyYXBoLgotICAgICAgICBvdXRwdXQoMCktPnNldE51
bWJlck9mQ2hhbm5lbHMobnVtYmVyT2ZDaGFubmVscyk7Ci0gICAgICAgIGluaXRpYWxpemUoKTsK
LSAgICB9Ci0KLSAgICBBdWRpb05vZGU6OmNoZWNrTnVtYmVyT2ZDaGFubmVsc0ZvcklucHV0KGlu
cHV0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdF
Ql9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmgJKHJl
dmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBB
dWRpb0dhaW5Ob2RlX2gKLSNkZWZpbmUgQXVkaW9HYWluTm9kZV9oCi0KLSNpbmNsdWRlICJBdWRp
b0dhaW4uaCIKLSNpbmNsdWRlICJBdWRpb05vZGUuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBBdWRpb0NvbnRleHQ7Ci0gICAgCi0vLyBBdWRpb0dhaW5Ob2RlIGlzIGFuIEF1ZGlv
Tm9kZSB3aXRoIG9uZSBpbnB1dCBhbmQgb25lIG91dHB1dCB3aGljaCBhcHBsaWVzIGEgZ2FpbiAo
dm9sdW1lKSBjaGFuZ2UgdG8gdGhlIGF1ZGlvIHNpZ25hbC4KLS8vIERlLXppcHBlcmluZyAoc21v
b3RoaW5nKSBpcyBhcHBsaWVkIHdoZW4gdGhlIGdhaW4gdmFsdWUgaXMgY2hhbmdlZCBkeW5hbWlj
YWxseS4KLQotY2xhc3MgQXVkaW9HYWluTm9kZSA6IHB1YmxpYyBBdWRpb05vZGUgewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlvR2Fpbk5vZGU+IGNyZWF0ZShBdWRpb0NvbnRl
eHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEF1ZGlvR2Fpbk5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkpOyAgICAgIAotICAg
IH0KLSAgICAKLSAgICAvLyBBdWRpb05vZGUKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXpl
X3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKLQotICAgIC8v
IENhbGxlZCBpbiB0aGUgbWFpbiB0aHJlYWQgd2hlbiB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIGZv
ciB0aGUgaW5wdXQgbWF5IGhhdmUgY2hhbmdlZC4KLSAgICB2aXJ0dWFsIHZvaWQgY2hlY2tOdW1i
ZXJPZkNoYW5uZWxzRm9ySW5wdXQoQXVkaW9Ob2RlSW5wdXQqKTsKLQotICAgIC8vIEphdmFTY3Jp
cHQgaW50ZXJmYWNlCi0gICAgQXVkaW9HYWluKiBnYWluKCkgeyByZXR1cm4gbV9nYWluLmdldCgp
OyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAKLXByaXZhdGU6Ci0g
ICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9
Ci0gICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVy
biAwOyB9Ci0KLSAgICBBdWRpb0dhaW5Ob2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJh
dGUpOwotCi0gICAgZmxvYXQgbV9sYXN0R2FpbjsgLy8gZm9yIGRlLXppcHBlcmluZwotICAgIFJl
ZlB0cjxBdWRpb0dhaW4+IG1fZ2FpbjsKLQotICAgIEF1ZGlvRmxvYXRBcnJheSBtX3NhbXBsZUFj
Y3VyYXRlR2FpblZhbHVlczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEF1ZGlvR2Fpbk5vZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9H
YWluTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9H
YWluTm9kZS5pZGwJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvR2Fpbk5vZGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi1tb2R1bGUgYXVkaW8gewotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlv
bmFsPVdFQl9BVURJTywKLSAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKLSAgICBdIEF1ZGlv
R2Fpbk5vZGUgOiBBdWRpb05vZGUgewotICAgICAgICAvLyBGSVhNRTogZXZlbnR1YWxseSBpdCB3
aWxsIGJlIGludGVyZXN0aW5nIHRvIHJlbW92ZSB0aGUgcmVhZG9ubHkgcmVzdHJpY3Rpb24sIGJ1
dCBuZWVkIHRvIHByb3Blcmx5IGRlYWwgd2l0aCB0aHJlYWQgc2FmZXR5IGhlcmUuCi0gICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb0dhaW4gZ2FpbjsKLSAgICB9OwotfQpJbmRleDogU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5jcHAJKHJldmlzaW9uIDExMTIwOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUo
V0VCX0FVRElPKQotCi0jaW5jbHVkZSAiQXVkaW9MaXN0ZW5lci5oIgotCi0jaW5jbHVkZSAiQXVk
aW9CdXMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1BdWRpb0xpc3RlbmVyOjpBdWRpb0xp
c3RlbmVyKCkKLSAgICA6IG1fcG9zaXRpb24oMCwgMCwgMCkKLSAgICAsIG1fb3JpZW50YXRpb24o
MCwgMCwgLTEpCi0gICAgLCBtX3VwVmVjdG9yKDAsIDEsIDApCi0gICAgLCBtX3ZlbG9jaXR5KDAs
IDAsIDApCi0gICAgLCBtX2RvcHBsZXJGYWN0b3IoMSkKLSAgICAsIG1fc3BlZWRPZlNvdW5kKDM0
My4zKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
V0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaAko
cmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9MaXN0ZW5l
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEF1ZGlvTGlzdGVu
ZXJfaAotI2RlZmluZSBBdWRpb0xpc3RlbmVyX2gKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5o
IgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBBdWRpb0xpc3RlbmVyIG1haW50YWlucyB0
aGUgc3RhdGUgb2YgdGhlIGxpc3RlbmVyIGluIHRoZSBhdWRpbyBzY2VuZSBhcyBkZWZpbmVkIGlu
IHRoZSBPcGVuQUwgc3BlY2lmaWNhdGlvbi4KLQotY2xhc3MgQXVkaW9MaXN0ZW5lciA6IHB1Ymxp
YyBSZWZDb3VudGVkPEF1ZGlvTGlzdGVuZXI+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxBdWRpb0xpc3RlbmVyPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBBdWRpb0xpc3RlbmVyKCkpOwotICAgIH0KLQotICAgIC8vIFBvc2l0aW9uCi0gICAg
dm9pZCBzZXRQb3NpdGlvbihmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7IHNldFBvc2l0aW9u
KEZsb2F0UG9pbnQzRCh4LCB5LCB6KSk7IH0KLSAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZs
b2F0UG9pbnQzRCAmcG9zaXRpb24pIHsgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOyB9Ci0gICAgY29u
c3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0K
LQotICAgIC8vIE9yaWVudGF0aW9uCi0gICAgdm9pZCBzZXRPcmllbnRhdGlvbihmbG9hdCB4LCBm
bG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB1cFgsIGZsb2F0IHVwWSwgZmxvYXQgdXBaKQotICAgIHsK
LSAgICAgICAgc2V0T3JpZW50YXRpb24oRmxvYXRQb2ludDNEKHgsIHksIHopKTsKLSAgICAgICAg
c2V0VXBWZWN0b3IoRmxvYXRQb2ludDNEKHVwWCwgdXBZLCB1cFopKTsKLSAgICB9Ci0gICAgdm9p
ZCBzZXRPcmllbnRhdGlvbihjb25zdCBGbG9hdFBvaW50M0QgJm9yaWVudGF0aW9uKSB7IG1fb3Jp
ZW50YXRpb24gPSBvcmllbnRhdGlvbjsgfQotICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgb3JpZW50
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX29yaWVudGF0aW9uOyB9Ci0KLSAgICAvLyBVcC12ZWN0
b3IKLSAgICB2b2lkIHNldFVwVmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQzRCAmdXBWZWN0b3IpIHsg
bV91cFZlY3RvciA9IHVwVmVjdG9yOyB9Ci0gICAgY29uc3QgRmxvYXRQb2ludDNEJiB1cFZlY3Rv
cigpIGNvbnN0IHsgcmV0dXJuIG1fdXBWZWN0b3I7IH0KLQotICAgIC8vIFZlbG9jaXR5Ci0gICAg
dm9pZCBzZXRWZWxvY2l0eShmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7IHNldFZlbG9jaXR5
KEZsb2F0UG9pbnQzRCh4LCB5LCB6KSk7IH0KLSAgICB2b2lkIHNldFZlbG9jaXR5KGNvbnN0IEZs
b2F0UG9pbnQzRCAmdmVsb2NpdHkpIHsgbV92ZWxvY2l0eSA9IHZlbG9jaXR5OyB9Ci0gICAgY29u
c3QgRmxvYXRQb2ludDNEJiB2ZWxvY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVsb2NpdHk7IH0K
LQotICAgIC8vIERvcHBsZXIgZmFjdG9yCi0gICAgdm9pZCBzZXREb3BwbGVyRmFjdG9yKGRvdWJs
ZSBkb3BwbGVyRmFjdG9yKSB7IG1fZG9wcGxlckZhY3RvciA9IGRvcHBsZXJGYWN0b3I7IH0KLSAg
ICBkb3VibGUgZG9wcGxlckZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fZG9wcGxlckZhY3Rvcjsg
fQotCi0gICAgLy8gU3BlZWQgb2Ygc291bmQKLSAgICB2b2lkIHNldFNwZWVkT2ZTb3VuZChkb3Vi
bGUgc3BlZWRPZlNvdW5kKSB7IG1fc3BlZWRPZlNvdW5kID0gc3BlZWRPZlNvdW5kOyB9Ci0gICAg
ZG91YmxlIHNwZWVkT2ZTb3VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlZWRPZlNvdW5kOyB9Ci0K
LXByaXZhdGU6Ci0gICAgQXVkaW9MaXN0ZW5lcigpOwotCi0gICAgLy8gUG9zaXRpb24gLyBPcmll
bnRhdGlvbgotICAgIEZsb2F0UG9pbnQzRCBtX3Bvc2l0aW9uOwotICAgIEZsb2F0UG9pbnQzRCBt
X29yaWVudGF0aW9uOwotICAgIEZsb2F0UG9pbnQzRCBtX3VwVmVjdG9yOwotCi0gICAgRmxvYXRQ
b2ludDNEIG1fdmVsb2NpdHk7Ci0KLSAgICBkb3VibGUgbV9kb3BwbGVyRmFjdG9yOwotICAgIGRv
dWJsZSBtX3NwZWVkT2ZTb3VuZDsKLX07Ci0KLX0gLy8gV2ViQ29yZQotCi0jZW5kaWYgLy8gQXVk
aW9MaXN0ZW5lcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0xpc3RlbmVy
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0xpc3RlbmVy
LmlkbAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9M
aXN0ZW5lci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBhdWRp
byB7Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPCi0gICAg
XSBBdWRpb0xpc3RlbmVyIHsKLSAgICAgICAgYXR0cmlidXRlIGZsb2F0IGRvcHBsZXJGYWN0b3I7
ICAvLyBzYW1lIGFzIE9wZW5BTCAoZGVmYXVsdCAxLjApCi0gICAgICAgIGF0dHJpYnV0ZSBmbG9h
dCBzcGVlZE9mU291bmQ7ICAgLy8gaW4gbWV0ZXJzIC8gc2Vjb25kIChkZWZhdWx0IDM0My4zKQot
Ci0gICAgICAgIHZvaWQgc2V0UG9zaXRpb24oaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSwgaW4gZmxv
YXQgeik7Ci0gICAgICAgIHZvaWQgc2V0T3JpZW50YXRpb24oaW4gZmxvYXQgeCwgaW4gZmxvYXQg
eSwgaW4gZmxvYXQgeiwgaW4gZmxvYXQgeFVwLCBpbiBmbG9hdCB5VXAsIGluIGZsb2F0IHpVcCk7
Ci0gICAgICAgIHZvaWQgc2V0VmVsb2NpdHkoaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSwgaW4gZmxv
YXQgeik7Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlLmNw
cAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJBdWRp
b05vZGUuaCIKLQotI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9k
ZUlucHV0LmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCi0jaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgotI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1BdWRpb05vZGU6OkF1ZGlvTm9kZShB
dWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBtX2lzSW5pdGlh
bGl6ZWQoZmFsc2UpCi0gICAgLCBtX25vZGVUeXBlKE5vZGVUeXBlVW5rbm93bikKLSAgICAsIG1f
Y29udGV4dChjb250ZXh0KQotICAgICwgbV9zYW1wbGVSYXRlKHNhbXBsZVJhdGUpCi0gICAgLCBt
X2xhc3RQcm9jZXNzaW5nVGltZSgtMS4wKQotICAgICwgbV9ub3JtYWxSZWZDb3VudCgxKSAvLyBz
dGFydCBvdXQgd2l0aCBub3JtYWwgcmVmQ291bnQgPT0gMSAobGlrZSBXVEY6OlJlZkNvdW50ZWQg
Y2xhc3MpCi0gICAgLCBtX2Nvbm5lY3Rpb25SZWZDb3VudCgwKQotICAgICwgbV9kaXNhYmxlZFJl
ZkNvdW50KDApCi0gICAgLCBtX2lzTWFya2VkRm9yRGVsZXRpb24oZmFsc2UpCi0gICAgLCBtX2lz
RGlzYWJsZWQoZmFsc2UpCi17Ci0jaWYgREVCVUdfQVVESU9OT0RFX1JFRkVSRU5DRVMKLSAgICBp
ZiAoIXNfaXNOb2RlQ291bnRJbml0aWFsaXplZCkgewotICAgICAgICBzX2lzTm9kZUNvdW50SW5p
dGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICBhdGV4aXQoQXVkaW9Ob2RlOjpwcmludE5vZGVDb3Vu
dHMpOwotICAgIH0KLSNlbmRpZgotfQotCi1BdWRpb05vZGU6On5BdWRpb05vZGUoKQotewotI2lm
IERFQlVHX0FVRElPTk9ERV9SRUZFUkVOQ0VTCi0gICAgLS1zX25vZGVDb3VudFtub2RlVHlwZSgp
XTsKLSAgICBwcmludGYoIiVwOiAlZDogQXVkaW9Ob2RlOjp+QXVkaW9Ob2RlKCkgJWQgJWQgJWRc
biIsIHRoaXMsIG5vZGVUeXBlKCksIG1fbm9ybWFsUmVmQ291bnQsIG1fY29ubmVjdGlvblJlZkNv
dW50LCBtX2Rpc2FibGVkUmVmQ291bnQpOwotI2VuZGlmCi19Ci0KLXZvaWQgQXVkaW9Ob2RlOjpp
bml0aWFsaXplKCkKLXsKLSAgICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVlOwotfQotCi12b2lkIEF1
ZGlvTm9kZTo6dW5pbml0aWFsaXplKCkKLXsKLSAgICBtX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTsK
LX0KLQotdm9pZCBBdWRpb05vZGU6OnNldE5vZGVUeXBlKE5vZGVUeXBlIHR5cGUpCi17Ci0gICAg
bV9ub2RlVHlwZSA9IHR5cGU7Ci0KLSNpZiBERUJVR19BVURJT05PREVfUkVGRVJFTkNFUwotICAg
ICsrc19ub2RlQ291bnRbdHlwZV07Ci0jZW5kaWYKLX0KLQotdm9pZCBBdWRpb05vZGU6OmxhenlJ
bml0aWFsaXplKCkKLXsKLSAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgaW5pdGlh
bGl6ZSgpOwotfQotCi12b2lkIEF1ZGlvTm9kZTo6YWRkSW5wdXQoUGFzc093blB0cjxBdWRpb05v
ZGVJbnB1dD4gaW5wdXQpCi17Ci0gICAgbV9pbnB1dHMuYXBwZW5kKGlucHV0KTsKLX0KLQotdm9p
ZCBBdWRpb05vZGU6OmFkZE91dHB1dChQYXNzT3duUHRyPEF1ZGlvTm9kZU91dHB1dD4gb3V0cHV0
KQotewotICAgIG1fb3V0cHV0cy5hcHBlbmQob3V0cHV0KTsKLX0KLQotQXVkaW9Ob2RlSW5wdXQq
IEF1ZGlvTm9kZTo6aW5wdXQodW5zaWduZWQgaSkKLXsKLSAgICBpZiAoaSA8IG1faW5wdXRzLnNp
emUoKSkKLSAgICAgICAgcmV0dXJuIG1faW5wdXRzW2ldLmdldCgpOwotICAgIHJldHVybiAwOwot
fQotCi1BdWRpb05vZGVPdXRwdXQqIEF1ZGlvTm9kZTo6b3V0cHV0KHVuc2lnbmVkIGkpCi17Ci0g
ICAgaWYgKGkgPCBtX291dHB1dHMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gbV9vdXRwdXRzW2ld
LmdldCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIEF1ZGlvTm9kZTo6Y29ubmVjdChBdWRp
b05vZGUqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBvdXRwdXRJbmRleCwgdW5zaWduZWQgaW5wdXRJ
bmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsg
Ci0gICAgQXVkaW9Db250ZXh0OjpBdXRvTG9ja2VyIGxvY2tlcihjb250ZXh0KCkpOwotCi0gICAg
aWYgKCFkZXN0aW5hdGlvbikgewotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBTYW5pdHkgY2hlY2sgaW5wdXQgYW5kIG91dHB1dCBpbmRp
Y2VzLgotICAgIGlmIChvdXRwdXRJbmRleCA+PSBudW1iZXJPZk91dHB1dHMoKSkgewotICAgICAg
ICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KGRlc3RpbmF0aW9uICYmIGlucHV0SW5kZXggPj0gZGVzdGluYXRpb24tPm51bWJlck9mSW5wdXRz
KCkpIHsKLSAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChjb250ZXh0KCkgIT0gZGVzdGluYXRpb24tPmNvbnRleHQoKSkgewotICAg
ICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBdWRp
b05vZGVJbnB1dCogaW5wdXQgPSBkZXN0aW5hdGlvbi0+aW5wdXQoaW5wdXRJbmRleCk7Ci0gICAg
QXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQgPSB0aGlzLT5vdXRwdXQob3V0cHV0SW5kZXgpOwotICAg
IGlucHV0LT5jb25uZWN0KG91dHB1dCk7Ci0KLSAgICAvLyBMZXQgY29udGV4dCBrbm93IHRoYXQg
YSBjb25uZWN0aW9uIGhhcyBiZWVuIG1hZGUuCi0gICAgY29udGV4dCgpLT5pbmNyZW1lbnRDb25u
ZWN0aW9uQ291bnQoKTsKLX0KLQotdm9pZCBBdWRpb05vZGU6OmRpc2Nvbm5lY3QodW5zaWduZWQg
b3V0cHV0SW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgQXVkaW9Db250ZXh0OjpBdXRvTG9ja2VyIGxvY2tlcihjb250ZXh0KCkpOwot
Ci0gICAgLy8gU2FuaXR5IGNoZWNrIGlucHV0IGFuZCBvdXRwdXQgaW5kaWNlcy4KLSAgICBpZiAo
b3V0cHV0SW5kZXggPj0gbnVtYmVyT2ZPdXRwdXRzKCkpIHsKLSAgICAgICAgZWMgPSBJTkRFWF9T
SVpFX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEF1ZGlvTm9kZU91dHB1dCog
b3V0cHV0ID0gdGhpcy0+b3V0cHV0KG91dHB1dEluZGV4KTsKLSAgICBvdXRwdXQtPmRpc2Nvbm5l
Y3RBbGxJbnB1dHMoKTsKLX0KLQotdm9pZCBBdWRpb05vZGU6OnByb2Nlc3NJZk5lY2Vzc2FyeShz
aXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9U
aHJlYWQoKSk7Ci0gICAgCi0gICAgaWYgKCFpc0luaXRpYWxpemVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIEVuc3VyZSB0aGF0IHdlIG9ubHkgcHJvY2VzcyBvbmNlIHBlciByZW5kZXJp
bmcgcXVhbnR1bS4KLSAgICAvLyBUaGlzIGhhbmRsZXMgdGhlICJmYW5vdXQiIHByb2JsZW0gd2hl
cmUgYW4gb3V0cHV0IGlzIGNvbm5lY3RlZCB0byBtdWx0aXBsZSBpbnB1dHMuCi0gICAgLy8gVGhl
IGZpcnN0IHRpbWUgd2UncmUgY2FsbGVkIGR1cmluZyB0aGlzIHRpbWUgc2xpY2Ugd2UgcHJvY2Vz
cywgYnV0IGFmdGVyIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byByZS1wcm9jZXNzLAotICAgIC8vIGlu
c3RlYWQgb3VyIG91dHB1dChzKSB3aWxsIGFscmVhZHkgaGF2ZSB0aGUgcmVzdWx0cyBjYWNoZWQg
aW4gdGhlaXIgYnVzOwotICAgIGRvdWJsZSBjdXJyZW50VGltZSA9IGNvbnRleHQoKS0+Y3VycmVu
dFRpbWUoKTsKLSAgICBpZiAobV9sYXN0UHJvY2Vzc2luZ1RpbWUgIT0gY3VycmVudFRpbWUpIHsK
LSAgICAgICAgbV9sYXN0UHJvY2Vzc2luZ1RpbWUgPSBjdXJyZW50VGltZTsgLy8gaW1wb3J0YW50
IHRvIGZpcnN0IHVwZGF0ZSB0aGlzIHRpbWUgYmVjYXVzZSBvZiBmZWVkYmFjayBsb29wcyBpbiB0
aGUgcmVuZGVyaW5nIGdyYXBoCi0gICAgICAgIHB1bGxJbnB1dHMoZnJhbWVzVG9Qcm9jZXNzKTsK
LSAgICAgICAgcHJvY2VzcyhmcmFtZXNUb1Byb2Nlc3MpOwotICAgIH0KLX0KLQotdm9pZCBBdWRp
b05vZGU6OmNoZWNrTnVtYmVyT2ZDaGFubmVsc0ZvcklucHV0KEF1ZGlvTm9kZUlucHV0KiBpbnB1
dCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkgJiYgY29udGV4dCgp
LT5pc0dyYXBoT3duZXIoKSk7Ci0KLSAgICBBU1NFUlQobV9pbnB1dHMuY29udGFpbnMoaW5wdXQp
KTsKLSAgICBpZiAoIW1faW5wdXRzLmNvbnRhaW5zKGlucHV0KSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaW5wdXQtPnVwZGF0ZUludGVybmFsQnVzKCk7Ci19Ci0KLXZvaWQgQXVkaW9Ob2RlOjpw
dWxsSW5wdXRzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQo
KS0+aXNBdWRpb1RocmVhZCgpKTsKLSAgICAKLSAgICAvLyBQcm9jZXNzIGFsbCBvZiB0aGUgQXVk
aW9Ob2RlcyBjb25uZWN0ZWQgdG8gb3VyIGlucHV0cy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9pbnB1dHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGlucHV0KGkpLT5wdWxsKDAsIGZy
YW1lc1RvUHJvY2Vzcyk7Ci19Ci0KLXZvaWQgQXVkaW9Ob2RlOjpyZWYoUmVmVHlwZSByZWZUeXBl
KQotewotICAgIHN3aXRjaCAocmVmVHlwZSkgewotICAgIGNhc2UgUmVmVHlwZU5vcm1hbDoKLSAg
ICAgICAgYXRvbWljSW5jcmVtZW50KCZtX25vcm1hbFJlZkNvdW50KTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBSZWZUeXBlQ29ubmVjdGlvbjoKLSAgICAgICAgYXRvbWljSW5jcmVtZW50KCZt
X2Nvbm5lY3Rpb25SZWZDb3VudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVmVHlwZURp
c2FibGVkOgotICAgICAgICBhdG9taWNJbmNyZW1lbnQoJm1fZGlzYWJsZWRSZWZDb3VudCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIH0KLQotI2lmIERFQlVHX0FVRElPTk9ERV9SRUZFUkVOQ0VTCi0gICAgcHJpbnRmKCIl
cDogJWQ6IEF1ZGlvTm9kZTo6cmVmKCVkKSAlZCAlZCAlZFxuIiwgdGhpcywgbm9kZVR5cGUoKSwg
cmVmVHlwZSwgbV9ub3JtYWxSZWZDb3VudCwgbV9jb25uZWN0aW9uUmVmQ291bnQsIG1fZGlzYWJs
ZWRSZWZDb3VudCk7Ci0jZW5kaWYKLQotICAgIC8vIFNlZSB0aGUgZGlzYWJsaW5nIGNvZGUgaW4g
ZmluaXNoRGVyZWYoKSBiZWxvdy4gVGhpcyBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIGEgbm9kZQot
ICAgIC8vIGlzIGJlaW5nIHJlLWNvbm5lY3RlZCBhZnRlciBiZWluZyB1c2VkIGF0IGxlYXN0IG9u
Y2UgYW5kIGRpc2Nvbm5lY3RlZC4KLSAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIG5lZWQgdG8gcmUt
ZW5hYmxlLgotICAgIGlmIChtX2lzRGlzYWJsZWQgJiYgbV9jb25uZWN0aW9uUmVmQ291bnQgPiAw
ICYmIHJlZlR5cGUgPT0gUmVmVHlwZUNvbm5lY3Rpb24pIHsKLSAgICAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICAgICAgQXVkaW9Db250ZXh0OjpBdXRvTG9ja2VyIGxvY2tlcihjb250
ZXh0KCkpOwotCi0gICAgICAgIG1faXNEaXNhYmxlZCA9IGZhbHNlOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9vdXRwdXRzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgb3V0
cHV0KGkpLT5lbmFibGUoKTsKLSAgICB9Ci19Ci0KLXZvaWQgQXVkaW9Ob2RlOjpkZXJlZihSZWZU
eXBlIHJlZlR5cGUpCi17Ci0gICAgLy8gVGhlIGFjdHVhbGx5IHdvcmsgZm9yIGRlcmVmIGhhcHBl
bnMgY29tcGxldGVseSB3aXRoaW4gdGhlIGF1ZGlvIGNvbnRleHQncyBncmFwaCBsb2NrLgotICAg
IC8vIEluIHRoZSBjYXNlIG9mIHRoZSBhdWRpbyB0aHJlYWQsIHdlIG11c3QgdXNlIGEgdHJ5TG9j
ayB0byBhdm9pZCBnbGl0Y2hlcy4KLSAgICBib29sIGhhc0xvY2sgPSBmYWxzZTsKLSAgICBib29s
IG11c3RSZWxlYXNlTG9jayA9IGZhbHNlOwotICAgIAotICAgIGlmIChjb250ZXh0KCktPmlzQXVk
aW9UaHJlYWQoKSkgewotICAgICAgICAvLyBSZWFsLXRpbWUgYXVkaW8gdGhyZWFkIG11c3Qgbm90
IGNvbnRlbmQgbG9jayAodG8gYXZvaWQgZ2xpdGNoZXMpLgotICAgICAgICBoYXNMb2NrID0gY29u
dGV4dCgpLT50cnlMb2NrKG11c3RSZWxlYXNlTG9jayk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
Y29udGV4dCgpLT5sb2NrKG11c3RSZWxlYXNlTG9jayk7Ci0gICAgICAgIGhhc0xvY2sgPSB0cnVl
OwotICAgIH0KLSAgICAKLSAgICBpZiAoaGFzTG9jaykgewotICAgICAgICAvLyBUaGlzIGlzIHdo
ZXJlIHRoZSByZWFsIGRlcmVmIHdvcmsgaGFwcGVucy4KLSAgICAgICAgZmluaXNoRGVyZWYocmVm
VHlwZSk7Ci0KLSAgICAgICAgaWYgKG11c3RSZWxlYXNlTG9jaykKLSAgICAgICAgICAgIGNvbnRl
eHQoKS0+dW5sb2NrKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gV2Ugd2VyZSB1bmFibGUg
dG8gZ2V0IHRoZSBsb2NrLCBzbyBwdXQgdGhpcyBpbiBhIGxpc3QgdG8gZmluaXNoIHVwIGxhdGVy
LgotICAgICAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkpOwotICAgICAgICBj
b250ZXh0KCktPmFkZERlZmVycmVkRmluaXNoRGVyZWYodGhpcywgcmVmVHlwZSk7Ci0gICAgfQot
Ci0gICAgLy8gT25jZSBBdWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6ZSgpIGlzIGNhbGxlZCB0aGVy
ZSdzIG5vIG1vcmUgY2hhbmNlcyBmb3IgZGVsZXRlTWFya2VkTm9kZXMoKSB0byBnZXQgY2FsbGVk
LCBzbyB3ZSBjYWxsIGhlcmUuCi0gICAgLy8gV2UgY2FuJ3QgY2FsbCBpbiBBdWRpb0NvbnRleHQ6
On5BdWRpb0NvbnRleHQoKSBzaW5jZSBpdCB3aWxsIG5ldmVyIGJlIGNhbGxlZCBhcyBsb25nIGFz
IGFueSBBdWRpb05vZGUgaXMgYWxpdmUKLSAgICAvLyBiZWNhdXNlIEF1ZGlvTm9kZXMga2VlcCBh
IHJlZmVyZW5jZSB0byB0aGUgY29udGV4dC4KLSAgICBpZiAoY29udGV4dCgpLT5pc0F1ZGlvVGhy
ZWFkRmluaXNoZWQoKSkKLSAgICAgICAgY29udGV4dCgpLT5kZWxldGVNYXJrZWROb2RlcygpOwot
fQotCi12b2lkIEF1ZGlvTm9kZTo6ZmluaXNoRGVyZWYoUmVmVHlwZSByZWZUeXBlKQotewotICAg
IEFTU0VSVChjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKLSAgICAKLSAgICBzd2l0Y2ggKHJl
ZlR5cGUpIHsKLSAgICBjYXNlIFJlZlR5cGVOb3JtYWw6Ci0gICAgICAgIEFTU0VSVChtX25vcm1h
bFJlZkNvdW50ID4gMCk7Ci0gICAgICAgIGF0b21pY0RlY3JlbWVudCgmbV9ub3JtYWxSZWZDb3Vu
dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVmVHlwZUNvbm5lY3Rpb246Ci0gICAgICAg
IEFTU0VSVChtX2Nvbm5lY3Rpb25SZWZDb3VudCA+IDApOwotICAgICAgICBhdG9taWNEZWNyZW1l
bnQoJm1fY29ubmVjdGlvblJlZkNvdW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWZU
eXBlRGlzYWJsZWQ6Ci0gICAgICAgIEFTU0VSVChtX2Rpc2FibGVkUmVmQ291bnQgPiAwKTsKLSAg
ICAgICAgYXRvbWljRGVjcmVtZW50KCZtX2Rpc2FibGVkUmVmQ291bnQpOwotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0g
ICAgCi0jaWYgREVCVUdfQVVESU9OT0RFX1JFRkVSRU5DRVMKLSAgICBwcmludGYoIiVwOiAlZDog
QXVkaW9Ob2RlOjpkZXJlZiglZCkgJWQgJWQgJWRcbiIsIHRoaXMsIG5vZGVUeXBlKCksIHJlZlR5
cGUsIG1fbm9ybWFsUmVmQ291bnQsIG1fY29ubmVjdGlvblJlZkNvdW50LCBtX2Rpc2FibGVkUmVm
Q291bnQpOwotI2VuZGlmCi0KLSAgICBpZiAoIW1fY29ubmVjdGlvblJlZkNvdW50KSB7Ci0gICAg
ICAgIGlmICghbV9ub3JtYWxSZWZDb3VudCAmJiAhbV9kaXNhYmxlZFJlZkNvdW50KSB7Ci0gICAg
ICAgICAgICBpZiAoIW1faXNNYXJrZWRGb3JEZWxldGlvbikgewotICAgICAgICAgICAgICAgIC8v
IEFsbCByZWZlcmVuY2VzIGFyZSBnb25lIC0gd2UgbmVlZCB0byBnbyBhd2F5LgotICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX291dHB1dHMuc2l6ZSgpOyArK2kpCi0g
ICAgICAgICAgICAgICAgICAgIG91dHB1dChpKS0+ZGlzY29ubmVjdEFsbElucHV0cygpOyAvLyB0
aGlzIHdpbGwgZGVyZWYoKSBub2RlcyB3ZSdyZSBjb25uZWN0ZWQgdG8uLi4KLQotICAgICAgICAg
ICAgICAgIC8vIE1hcmsgZm9yIGRlbGV0aW9uIGF0IGVuZCBvZiBlYWNoIHJlbmRlciBxdWFudHVt
IG9yIHdoZW4gY29udGV4dCBzaHV0cyBkb3duLgotICAgICAgICAgICAgICAgIGNvbnRleHQoKS0+
bWFya0ZvckRlbGV0aW9uKHRoaXMpOwotICAgICAgICAgICAgICAgIG1faXNNYXJrZWRGb3JEZWxl
dGlvbiA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAocmVmVHlwZSA9
PSBSZWZUeXBlQ29ubmVjdGlvbikgewotICAgICAgICAgICAgaWYgKCFtX2lzRGlzYWJsZWQpIHsK
LSAgICAgICAgICAgICAgICAvLyBTdGlsbCBtYXkgaGF2ZSBKYXZhU2NyaXB0IHJlZmVyZW5jZXMs
IGJ1dCBubyBtb3JlICJhY3RpdmUiIGNvbm5lY3Rpb24gcmVmZXJlbmNlcywgc28gcHV0IGFsbCBv
ZiBvdXIgb3V0cHV0cyBpbiBhICJkb3JtYW50IiBkaXNhYmxlZCBzdGF0ZS4KLSAgICAgICAgICAg
ICAgICAvLyBHYXJiYWdlIGNvbGxlY3Rpb24gbWF5IHRha2UgYSB2ZXJ5IGxvbmcgdGltZSBhZnRl
ciB0aGlzIHRpbWUsIHNvIHRoZSAiZG9ybWFudCIgZGlzYWJsZWQgbm9kZXMgc2hvdWxkIG5vdCBi
b2cgZG93biB0aGUgcmVuZGVyaW5nLi4uCi0KLSAgICAgICAgICAgICAgICAvLyBBcyBmYXIgYXMg
SmF2YVNjcmlwdCBpcyBjb25jZXJuZWQsIG91ciBvdXRwdXRzIG11c3Qgc3RpbGwgYXBwZWFyIHRv
IGJlIGNvbm5lY3RlZC4KLSAgICAgICAgICAgICAgICAvLyBCdXQgaW50ZXJuYWxseSBvdXIgb3V0
cHV0cyBzaG91bGQgYmUgZGlzYWJsZWQgZnJvbSB0aGUgaW5wdXRzIHRoZXkncmUgY29ubmVjdGVk
IHRvLgotICAgICAgICAgICAgICAgIC8vIGRpc2FibGUoKSBjYW4gcmVjdXJzaXZlbHkgZGVyZWYg
Y29ubmVjdGlvbnMgKGFuZCBjYWxsIGRpc2FibGUoKSkgZG93biBhIHdob2xlIGNoYWluIG9mIGNv
bm5lY3RlZCBub2Rlcy4KLQotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3ZSBzcGVjaWFsIGNh
c2UgdGhlIGNvbnZvbHZlciBhbmQgZGVsYXkgc2luY2UgdGhleSBoYXZlIGEgc2lnbmlmaWNhbnQg
dGFpbC10aW1lIGFuZCBzaG91bGRuJ3QgYmUgZGlzY29ubmVjdGVkIHNpbXBseQotICAgICAgICAg
ICAgICAgIC8vIGJlY2F1c2UgdGhleSBubyBsb25nZXIgaGF2ZSBhbnkgaW5wdXQgY29ubmVjdGlv
bnMuICBUaGlzIG5lZWRzIHRvIGJlIGhhbmRsZWQgbW9yZSBnZW5lcmFsbHkgd2hlcmUgQXVkaW9O
b2RlcyBoYXZlCi0gICAgICAgICAgICAgICAgLy8gYSB0YWlsVGltZSBhdHRyaWJ1dGUuICBUaGVu
IHRoZSBBdWRpb05vZGUgb25seSBuZWVkcyB0byByZW1haW4gImFjdGl2ZSIgZm9yIHRhaWxUaW1l
IHNlY29uZHMgYWZ0ZXIgdGhlcmUgYXJlIG5vCi0gICAgICAgICAgICAgICAgLy8gbG9uZ2VyIGFu
eSBhY3RpdmUgY29ubmVjdGlvbnMuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGVUeXBlKCkgIT0g
Tm9kZVR5cGVDb252b2x2ZXIgJiYgbm9kZVR5cGUoKSAhPSBOb2RlVHlwZURlbGF5KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG1faXNEaXNhYmxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX291dHB1dHMuc2l6ZSgpOyArK2kpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwdXQoaSktPmRpc2FibGUoKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLSNpZiBERUJVR19BVURJT05P
REVfUkVGRVJFTkNFUwotCi1ib29sIEF1ZGlvTm9kZTo6c19pc05vZGVDb3VudEluaXRpYWxpemVk
ID0gZmFsc2U7Ci1pbnQgQXVkaW9Ob2RlOjpzX25vZGVDb3VudFtOb2RlVHlwZUVuZF07Ci0KLXZv
aWQgQXVkaW9Ob2RlOjpwcmludE5vZGVDb3VudHMoKQotewotICAgIHByaW50ZigiXG5cbiIpOwot
ICAgIHByaW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKLSAgICBwcmludGYo
IkF1ZGlvTm9kZTogcmVmZXJlbmNlIGNvdW50c1xuIik7Ci0gICAgcHJpbnRmKCI9PT09PT09PT09
PT09PT09PT09PT09PT09PT1cbiIpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE5v
ZGVUeXBlRW5kOyArK2kpCi0gICAgICAgIHByaW50ZigiJWQ6ICVkXG4iLCBpLCBzX25vZGVDb3Vu
dFtpXSk7Ci0KLSAgICBwcmludGYoIj09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5cbiIp
OwotfQotCi0jZW5kaWYgLy8gREVCVUdfQVVESU9OT0RFX1JFRkVSRU5DRVMKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9BdWRpb05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxODMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
LSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgQXVkaW9Ob2RlX2gKLSNkZWZpbmUgQXVkaW9Ob2RlX2gK
LQotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLSNkZWZp
bmUgREVCVUdfQVVESU9OT0RFX1JFRkVSRU5DRVMgMAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIEF1ZGlvQ29udGV4dDsKLWNsYXNzIEF1ZGlvTm9kZUlucHV0OwotY2xhc3MgQXVkaW9O
b2RlT3V0cHV0OwotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi0vLyBBbiBBdWRpb05v
ZGUgaXMgdGhlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrIGZvciBoYW5kbGluZyBhdWRpbyB3aXRoaW4g
YW4gQXVkaW9Db250ZXh0LgotLy8gSXQgbWF5IGJlIGFuIGF1ZGlvIHNvdXJjZSwgYW4gaW50ZXJt
ZWRpYXRlIHByb2Nlc3NpbmcgbW9kdWxlLCBvciBhbiBhdWRpbyBkZXN0aW5hdGlvbi4KLS8vIEVh
Y2ggQXVkaW9Ob2RlIGNhbiBoYXZlIGlucHV0cyBhbmQvb3Igb3V0cHV0cy4gQW4gQXVkaW9Tb3Vy
Y2VOb2RlIGhhcyBubyBpbnB1dHMgYW5kIGEgc2luZ2xlIG91dHB1dC4KLS8vIEFuIEF1ZGlvRGVz
dGluYXRpb25Ob2RlIGhhcyBvbmUgaW5wdXQgYW5kIG5vIG91dHB1dHMgYW5kIHJlcHJlc2VudHMg
dGhlIGZpbmFsIGRlc3RpbmF0aW9uIHRvIHRoZSBhdWRpbyBoYXJkd2FyZS4KLS8vIE1vc3QgcHJv
Y2Vzc2luZyBub2RlcyBzdWNoIGFzIGZpbHRlcnMgd2lsbCBoYXZlIG9uZSBpbnB1dCBhbmQgb25l
IG91dHB1dCwgYWx0aG91Z2ggbXVsdGlwbGUgaW5wdXRzIGFuZCBvdXRwdXRzIGFyZSBwb3NzaWJs
ZS4KLQotY2xhc3MgQXVkaW9Ob2RlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsgUHJvY2Vzc2luZ1Np
emVJbkZyYW1lcyA9IDEyOCB9OwotCi0gICAgQXVkaW9Ob2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0
IHNhbXBsZVJhdGUpOwotICAgIHZpcnR1YWwgfkF1ZGlvTm9kZSgpOwotCi0gICAgQXVkaW9Db250
ZXh0KiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9Ci0KLSAgICBlbnVtIE5v
ZGVUeXBlIHsKLSAgICAgICAgTm9kZVR5cGVVbmtub3duLAotICAgICAgICBOb2RlVHlwZURlc3Rp
bmF0aW9uLAotICAgICAgICBOb2RlVHlwZUF1ZGlvQnVmZmVyU291cmNlLAotICAgICAgICBOb2Rl
VHlwZU1lZGlhRWxlbWVudEF1ZGlvU291cmNlLAotICAgICAgICBOb2RlVHlwZUphdmFTY3JpcHQs
Ci0gICAgICAgIE5vZGVUeXBlQmlxdWFkRmlsdGVyLAotICAgICAgICBOb2RlVHlwZUxvd1Bhc3My
RmlsdGVyLAotICAgICAgICBOb2RlVHlwZUhpZ2hQYXNzMkZpbHRlciwKLSAgICAgICAgTm9kZVR5
cGVQYW5uZXIsCi0gICAgICAgIE5vZGVUeXBlQ29udm9sdmVyLAotICAgICAgICBOb2RlVHlwZURl
bGF5LAotICAgICAgICBOb2RlVHlwZUdhaW4sCi0gICAgICAgIE5vZGVUeXBlQ2hhbm5lbFNwbGl0
dGVyLAotICAgICAgICBOb2RlVHlwZUNoYW5uZWxNZXJnZXIsCi0gICAgICAgIE5vZGVUeXBlQW5h
bHlzZXIsCi0gICAgICAgIE5vZGVUeXBlRHluYW1pY3NDb21wcmVzc29yLAotICAgICAgICBOb2Rl
VHlwZVdhdmVTaGFwZXIsCi0gICAgICAgIE5vZGVUeXBlRW5kCi0gICAgfTsKLQotICAgIE5vZGVU
eXBlIG5vZGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlVHlwZTsgfQotICAgIHZvaWQgc2V0
Tm9kZVR5cGUoTm9kZVR5cGUpOwotCi0gICAgLy8gV2UgaGFuZGxlIG91ciBvd24gcmVmLWNvdW50
aW5nIGJlY2F1c2Ugb2YgdGhlIHRocmVhZGluZyBpc3N1ZXMgYW5kIHN1YnRsZSBuYXR1cmUgb2YK
LSAgICAvLyBob3cgQXVkaW9Ob2RlcyBjYW4gY29udGludWUgcHJvY2Vzc2luZyAocGxheWluZyBv
bmUtc2hvdCBzb3VuZCkgYWZ0ZXIgdGhlcmUgYXJlIG5vIG1vcmUKLSAgICAvLyBKYXZhU2NyaXB0
IHJlZmVyZW5jZXMgdG8gdGhlIG9iamVjdC4KLSAgICBlbnVtIFJlZlR5cGUgeyBSZWZUeXBlTm9y
bWFsLCBSZWZUeXBlQ29ubmVjdGlvbiwgUmVmVHlwZURpc2FibGVkIH07Ci0KLSAgICAvLyBDYW4g
YmUgY2FsbGVkIGZyb20gbWFpbiB0aHJlYWQgb3IgY29udGV4dCdzIGF1ZGlvIHRocmVhZC4KLSAg
ICB2b2lkIHJlZihSZWZUeXBlIHJlZlR5cGUgPSBSZWZUeXBlTm9ybWFsKTsKLSAgICB2b2lkIGRl
cmVmKFJlZlR5cGUgcmVmVHlwZSA9IFJlZlR5cGVOb3JtYWwpOwotCi0gICAgLy8gQ2FuIGJlIGNh
bGxlZCBmcm9tIG1haW4gdGhyZWFkIG9yIGNvbnRleHQncyBhdWRpbyB0aHJlYWQuICBJdCBtdXN0
IGJlIGNhbGxlZCB3aGlsZSB0aGUgY29udGV4dCdzIGdyYXBoIGxvY2sgaXMgaGVsZC4KLSAgICB2
b2lkIGZpbmlzaERlcmVmKFJlZlR5cGUgcmVmVHlwZSk7Ci0KLSAgICAvLyBUaGUgQXVkaW9Ob2Rl
SW5wdXQocykgKGlmIGFueSkgd2lsbCBhbHJlYWR5IGhhdmUgdGhlaXIgaW5wdXQgZGF0YSBhdmFp
bGFibGUgd2hlbiBwcm9jZXNzKCkgaXMgY2FsbGVkLgotICAgIC8vIFN1YmNsYXNzZXMgd2lsbCB0
YWtlIHRoaXMgaW5wdXQgZGF0YSBhbmQgcHV0IHRoZSByZXN1bHRzIGluIHRoZSBBdWRpb0J1cyhz
KSBvZiBpdHMgQXVkaW9Ob2RlT3V0cHV0KHMpIChpZiBhbnkpLgotICAgIC8vIENhbGxlZCBmcm9t
IGNvbnRleHQncyBhdWRpbyB0aHJlYWQuCi0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3Moc2l6ZV90
IGZyYW1lc1RvUHJvY2VzcykgPSAwOwotCi0gICAgLy8gUmVzZXRzIERTUCBwcm9jZXNzaW5nIHN0
YXRlIChjbGVhcnMgZGVsYXkgbGluZXMsIGZpbHRlciBtZW1vcnksIGV0Yy4pCi0gICAgLy8gQ2Fs
bGVkIGZyb20gY29udGV4dCdzIGF1ZGlvIHRocmVhZC4KLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQo
KSA9IDA7Ci0KLSAgICAvLyBObyBzaWduaWZpY2FudCByZXNvdXJjZXMgc2hvdWxkIGJlIGFsbG9j
YXRlZCB1bnRpbCBpbml0aWFsaXplKCkgaXMgY2FsbGVkLgotICAgIC8vIFByb2Nlc3NpbmcgbWF5
IG5vdCBvY2N1ciB1bnRpbCBhIG5vZGUgaXMgaW5pdGlhbGl6ZWQuCi0gICAgdmlydHVhbCB2b2lk
IGluaXRpYWxpemUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdW5pbml0aWFsaXplKCk7Ci0KLSAgICBi
b29sIGlzSW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzSW5pdGlhbGl6ZWQ7IH0KLSAg
ICB2b2lkIGxhenlJbml0aWFsaXplKCk7Ci0KLSAgICB1bnNpZ25lZCBudW1iZXJPZklucHV0cygp
IGNvbnN0IHsgcmV0dXJuIG1faW5wdXRzLnNpemUoKTsgfQotICAgIHVuc2lnbmVkIG51bWJlck9m
T3V0cHV0cygpIGNvbnN0IHsgcmV0dXJuIG1fb3V0cHV0cy5zaXplKCk7IH0KLQotICAgIEF1ZGlv
Tm9kZUlucHV0KiBpbnB1dCh1bnNpZ25lZCk7Ci0gICAgQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQo
dW5zaWduZWQpOwotCi0gICAgLy8gQ2FsbGVkIGZyb20gbWFpbiB0aHJlYWQgYnkgY29ycmVzcG9u
ZGluZyBKYXZhU2NyaXB0IG1ldGhvZHMuCi0gICAgdm9pZCBjb25uZWN0KEF1ZGlvTm9kZSosIHVu
c2lnbmVkIG91dHB1dEluZGV4LCB1bnNpZ25lZCBpbnB1dEluZGV4LCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgdm9pZCBkaXNjb25uZWN0KHVuc2lnbmVkIG91dHB1dEluZGV4LCBFeGNlcHRpb25Db2Rl
Jik7Ci0KLSAgICB2aXJ0dWFsIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBtX3Nh
bXBsZVJhdGU7IH0KLQotICAgIC8vIHByb2Nlc3NJZk5lY2Vzc2FyeSgpIGlzIGNhbGxlZCBieSBv
dXIgb3V0cHV0KHMpIHdoZW4gdGhlIHJlbmRlcmluZyBncmFwaCBuZWVkcyB0aGlzIEF1ZGlvTm9k
ZSB0byBwcm9jZXNzLgotICAgIC8vIFRoaXMgbWV0aG9kIGVuc3VyZXMgdGhhdCB0aGUgQXVkaW9O
b2RlIHdpbGwgb25seSBwcm9jZXNzIG9uY2UgcGVyIHJlbmRlcmluZyB0aW1lIHF1YW50dW0gZXZl
biBpZiBpdCdzIGNhbGxlZCByZXBlYXRlZGx5LgotICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgY2Fz
ZSBvZiAiZmFub3V0IiB3aGVyZSBhbiBvdXRwdXQgaXMgY29ubmVjdGVkIHRvIG11bHRpcGxlIEF1
ZGlvTm9kZSBpbnB1dHMuCi0gICAgLy8gQ2FsbGVkIGZyb20gY29udGV4dCdzIGF1ZGlvIHRocmVh
ZC4KLSAgICB2b2lkIHByb2Nlc3NJZk5lY2Vzc2FyeShzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsK
LQotICAgIC8vIENhbGxlZCB3aGVuIGEgbmV3IGNvbm5lY3Rpb24gaGFzIGJlZW4gbWFkZSB0byBv
bmUgb2Ygb3VyIGlucHV0cyBvciB0aGUgY29ubmVjdGlvbiBudW1iZXIgb2YgY2hhbm5lbHMgaGFz
IGNoYW5nZWQuCi0gICAgLy8gVGhpcyBwb3RlbnRpYWxseSBnaXZlcyB1cyBlbm91Z2ggaW5mb3Jt
YXRpb24gdG8gcGVyZm9ybSBhIGxhenkgaW5pdGlhbGl6YXRpb24gb3IsIGlmIG5lY2Vzc2FyeSwg
YSByZS1pbml0aWFsaXphdGlvbi4KLSAgICAvLyBDYWxsZWQgZnJvbSBtYWluIHRocmVhZC4KLSAg
ICB2aXJ0dWFsIHZvaWQgY2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQoQXVkaW9Ob2RlSW5w
dXQqKTsKLQotI2lmIERFQlVHX0FVRElPTk9ERV9SRUZFUkVOQ0VTCi0gICAgc3RhdGljIHZvaWQg
cHJpbnROb2RlQ291bnRzKCk7Ci0jZW5kaWYKLQotICAgIGJvb2wgaXNNYXJrZWRGb3JEZWxldGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1faXNNYXJrZWRGb3JEZWxldGlvbjsgfQotCi0gICAgLy8gdGFp
bFRpbWUoKSBpcyB0aGUgbGVuZ3RoIG9mIHRpbWUgKG5vdCBjb3VudGluZyBsYXRlbmN5IHRpbWUp
IHdoZXJlIG5vbi16ZXJvIG91dHB1dCBtYXkgb2NjdXIgYWZ0ZXIgY29udGludW91cyBzaWxlbnQg
aW5wdXQuCi0gICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCA9IDA7Ci0gICAgLy8g
bGF0ZW5jeVRpbWUoKSBpcyB0aGUgbGVuZ3RoIG9mIHRpbWUgaXQgdGFrZXMgZm9yIG5vbi16ZXJv
IG91dHB1dCB0byBhcHBlYXIgYWZ0ZXIgbm9uLXplcm8gaW5wdXQgaXMgcHJvdmlkZWQuIFRoaXMg
b25seSBhcHBsaWVzIHRvCi0gICAgLy8gcHJvY2Vzc2luZyBkZWxheSB3aGljaCBpcyBhbiBhcnRp
ZmFjdCBvZiB0aGUgcHJvY2Vzc2luZyBhbGdvcml0aG0gY2hvc2VuIGFuZCBpcyAqbm90KiBwYXJ0
IG9mIHRoZSBpbnRyaW5zaWMgZGVzaXJlZCBlZmZlY3QuIEZvciAKLSAgICAvLyBleGFtcGxlLCBh
ICJkZWxheSIgZWZmZWN0IGlzIGV4cGVjdGVkIHRvIGRlbGF5IHRoZSBzaWduYWwsIGFuZCB0aHVz
IHdvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGxhdGVuY3kuCi0gICAgdmlydHVhbCBkb3VibGUgbGF0
ZW5jeVRpbWUoKSBjb25zdCA9IDA7Ci0KLXByb3RlY3RlZDoKLSAgICAvLyBJbnB1dHMgYW5kIG91
dHB1dHMgbXVzdCBiZSBjcmVhdGVkIGJlZm9yZSB0aGUgQXVkaW9Ob2RlIGlzIGluaXRpYWxpemVk
LgotICAgIHZvaWQgYWRkSW5wdXQoUGFzc093blB0cjxBdWRpb05vZGVJbnB1dD4pOwotICAgIHZv
aWQgYWRkT3V0cHV0KFBhc3NPd25QdHI8QXVkaW9Ob2RlT3V0cHV0Pik7Ci0gICAgCi0gICAgLy8g
Q2FsbGVkIGJ5IHByb2Nlc3NJZk5lY2Vzc2FyeSgpIHRvIGNhdXNlIGFsbCBwYXJ0cyBvZiB0aGUg
cmVuZGVyaW5nIGdyYXBoIGNvbm5lY3RlZCB0byB1cyB0byBwcm9jZXNzLgotICAgIC8vIEVhY2gg
cmVuZGVyaW5nIHF1YW50dW0sIHRoZSBhdWRpbyBkYXRhIGZvciBlYWNoIG9mIHRoZSBBdWRpb05v
ZGUncyBpbnB1dHMgd2lsbCBiZSBhdmFpbGFibGUgYWZ0ZXIgdGhpcyBtZXRob2QgaXMgY2FsbGVk
LgotICAgIC8vIENhbGxlZCBmcm9tIGNvbnRleHQncyBhdWRpbyB0aHJlYWQuCi0gICAgdmlydHVh
bCB2b2lkIHB1bGxJbnB1dHMoc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7Ci0KLXByaXZhdGU6Ci0g
ICAgdm9sYXRpbGUgYm9vbCBtX2lzSW5pdGlhbGl6ZWQ7Ci0gICAgTm9kZVR5cGUgbV9ub2RlVHlw
ZTsKLSAgICBSZWZQdHI8QXVkaW9Db250ZXh0PiBtX2NvbnRleHQ7Ci0gICAgZmxvYXQgbV9zYW1w
bGVSYXRlOwotICAgIFZlY3RvcjxPd25QdHI8QXVkaW9Ob2RlSW5wdXQ+ID4gbV9pbnB1dHM7Ci0g
ICAgVmVjdG9yPE93blB0cjxBdWRpb05vZGVPdXRwdXQ+ID4gbV9vdXRwdXRzOwotCi0gICAgZG91
YmxlIG1fbGFzdFByb2Nlc3NpbmdUaW1lOwotCi0gICAgLy8gUmVmLWNvdW50aW5nCi0gICAgdm9s
YXRpbGUgaW50IG1fbm9ybWFsUmVmQ291bnQ7Ci0gICAgdm9sYXRpbGUgaW50IG1fY29ubmVjdGlv
blJlZkNvdW50OwotICAgIHZvbGF0aWxlIGludCBtX2Rpc2FibGVkUmVmQ291bnQ7Ci0gICAgCi0g
ICAgYm9vbCBtX2lzTWFya2VkRm9yRGVsZXRpb247Ci0gICAgYm9vbCBtX2lzRGlzYWJsZWQ7Ci0g
ICAgCi0jaWYgREVCVUdfQVVESU9OT0RFX1JFRkVSRU5DRVMKLSAgICBzdGF0aWMgYm9vbCBzX2lz
Tm9kZUNvdW50SW5pdGlhbGl6ZWQ7Ci0gICAgc3RhdGljIGludCBzX25vZGVDb3VudFtOb2RlVHlw
ZUVuZF07Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEF1ZGlvTm9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGUuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5pZGwJKHJl
dmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBhdWRp
byB7Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPCi0gICAg
XSBBdWRpb05vZGUgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9Db250ZXh0IGNv
bnRleHQ7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIG51bWJlck9m
SW5wdXRzOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBudW1iZXJP
Zk91dHB1dHM7Ci0KLSAgICAgICAgdm9pZCBjb25uZWN0KGluIEF1ZGlvTm9kZSBkZXN0aW5hdGlv
biwgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gdW5zaWduZWQgbG9uZyBvdXRwdXQs
IGluIFtPcHRpb25hbD1EZWZhdWx0SXNVbmRlZmluZWRdIHVuc2lnbmVkIGxvbmcgaW5wdXQpCi0g
ICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLQotICAgICAgICB2b2lkIGRpc2Nvbm5l
Y3QoaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gdW5zaWduZWQgbG9uZyBvdXRwdXQp
Ci0gICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLSAgICB9OwotfQpJbmRleDogU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcAkocmV2aXNpb24gMTExMjA4
KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDI3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0Lmgi
Ci0KLSNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKLSNpbmNsdWRlICJBdWRpb05vZGUuaCIKLSNp
bmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBzdGQ7Ci0gCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUF1ZGlvTm9kZUlucHV0
OjpBdWRpb05vZGVJbnB1dChBdWRpb05vZGUqIG5vZGUpCi0gICAgOiBtX25vZGUobm9kZSkKLSAg
ICAsIG1fcmVuZGVyaW5nU3RhdGVOZWVkVXBkYXRpbmcoZmFsc2UpCi17Ci0gICAgLy8gU2V0IHRv
IG1vbm8gYnkgZGVmYXVsdC4KLSAgICBtX2ludGVybmFsU3VtbWluZ0J1cyA9IGFkb3B0UHRyKG5l
dyBBdWRpb0J1cygxLCBBdWRpb05vZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXMpKTsKLX0KLQot
dm9pZCBBdWRpb05vZGVJbnB1dDo6Y29ubmVjdChBdWRpb05vZGVPdXRwdXQqIG91dHB1dCkKLXsK
LSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0gICAgCi0gICAgQVNTRVJU
KG91dHB1dCAmJiBub2RlKCkpOwotICAgIGlmICghb3V0cHV0IHx8ICFub2RlKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIENoZWNrIGlmIHdlJ3JlIGFscmVhZHkgY29ubmVjdGVkIHRvIHRo
aXMgb3V0cHV0LgotICAgIGlmIChtX291dHB1dHMuY29udGFpbnMob3V0cHV0KSkKLSAgICAgICAg
cmV0dXJuOwotICAgICAgICAKLSAgICBvdXRwdXQtPmFkZElucHV0KHRoaXMpOwotICAgIG1fb3V0
cHV0cy5hZGQob3V0cHV0KTsKLSAgICBjaGFuZ2VkT3V0cHV0cygpOwotCi0gICAgLy8gU29tYm9k
eSBoYXMganVzdCBjb25uZWN0ZWQgdG8gdXMsIHNvIGNvdW50IGl0IGFzIGEgcmVmZXJlbmNlLgot
ICAgIG5vZGUoKS0+cmVmKEF1ZGlvTm9kZTo6UmVmVHlwZUNvbm5lY3Rpb24pOwotfQotCi12b2lk
IEF1ZGlvTm9kZUlucHV0OjpkaXNjb25uZWN0KEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0KQotewot
ICAgIEFTU0VSVChjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKLQotICAgIEFTU0VSVChvdXRw
dXQgJiYgbm9kZSgpKTsKLSAgICBpZiAoIW91dHB1dCB8fCAhbm9kZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBGaXJzdCB0cnkgdG8gZGlzY29ubmVjdCBmcm9tICJhY3RpdmUiIGNvbm5l
Y3Rpb25zLgotICAgIGlmIChtX291dHB1dHMuY29udGFpbnMob3V0cHV0KSkgewotICAgICAgICBt
X291dHB1dHMucmVtb3ZlKG91dHB1dCk7Ci0gICAgICAgIGNoYW5nZWRPdXRwdXRzKCk7Ci0gICAg
ICAgIG91dHB1dC0+cmVtb3ZlSW5wdXQodGhpcyk7Ci0gICAgICAgIG5vZGUoKS0+ZGVyZWYoQXVk
aW9Ob2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7IC8vIE5vdGU6IGl0J3MgaW1wb3J0YW50IHRvIHJl
dHVybiBpbW1lZGlhdGVseSBhZnRlciBhbGwgZGVyZWYoKSBjYWxscyBzaW5jZSB0aGUgbm9kZSBt
YXkgYmUgZGVsZXRlZC4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICAvLyBPdGhl
cndpc2UsIHRyeSB0byBkaXNjb25uZWN0IGZyb20gZGlzYWJsZWQgY29ubmVjdGlvbnMuCi0gICAg
aWYgKG1fZGlzYWJsZWRPdXRwdXRzLmNvbnRhaW5zKG91dHB1dCkpIHsKLSAgICAgICAgbV9kaXNh
YmxlZE91dHB1dHMucmVtb3ZlKG91dHB1dCk7Ci0gICAgICAgIG91dHB1dC0+cmVtb3ZlSW5wdXQo
dGhpcyk7Ci0gICAgICAgIG5vZGUoKS0+ZGVyZWYoQXVkaW9Ob2RlOjpSZWZUeXBlRGlzYWJsZWQp
OyAvLyBOb3RlOiBpdCdzIGltcG9ydGFudCB0byByZXR1cm4gaW1tZWRpYXRlbHkgYWZ0ZXIgYWxs
IGRlcmVmKCkgY2FsbHMgc2luY2UgdGhlIG5vZGUgbWF5IGJlIGRlbGV0ZWQuCi0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBBdWRp
b05vZGVJbnB1dDo6ZGlzYWJsZShBdWRpb05vZGVPdXRwdXQqIG91dHB1dCkKLXsKLSAgICBBU1NF
UlQoY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0KLSAgICBBU1NFUlQob3V0cHV0ICYmIG5v
ZGUoKSk7Ci0gICAgaWYgKCFvdXRwdXQgfHwgIW5vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUKG1fb3V0cHV0cy5jb250YWlucyhvdXRwdXQpKTsKLSAgICAKLSAgICBtX2Rpc2Fi
bGVkT3V0cHV0cy5hZGQob3V0cHV0KTsKLSAgICBtX291dHB1dHMucmVtb3ZlKG91dHB1dCk7Ci0g
ICAgY2hhbmdlZE91dHB1dHMoKTsKLQotICAgIG5vZGUoKS0+cmVmKEF1ZGlvTm9kZTo6UmVmVHlw
ZURpc2FibGVkKTsKLSAgICBub2RlKCktPmRlcmVmKEF1ZGlvTm9kZTo6UmVmVHlwZUNvbm5lY3Rp
b24pOyAvLyBOb3RlOiBpdCdzIGltcG9ydGFudCB0byByZXR1cm4gaW1tZWRpYXRlbHkgYWZ0ZXIg
YWxsIGRlcmVmKCkgY2FsbHMgc2luY2UgdGhlIG5vZGUgbWF5IGJlIGRlbGV0ZWQuCi19Ci0KLXZv
aWQgQXVkaW9Ob2RlSW5wdXQ6OmVuYWJsZShBdWRpb05vZGVPdXRwdXQqIG91dHB1dCkKLXsKLSAg
ICBBU1NFUlQoY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0KLSAgICBBU1NFUlQob3V0cHV0
ICYmIG5vZGUoKSk7Ci0gICAgaWYgKCFvdXRwdXQgfHwgIW5vZGUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQVNTRVJUKG1fZGlzYWJsZWRPdXRwdXRzLmNvbnRhaW5zKG91dHB1dCkpOwotCi0g
ICAgLy8gTW92ZSBvdXRwdXQgZnJvbSBkaXNhYmxlZCBsaXN0IHRvIGFjdGl2ZSBsaXN0LgotICAg
IG1fb3V0cHV0cy5hZGQob3V0cHV0KTsKLSAgICBtX2Rpc2FibGVkT3V0cHV0cy5yZW1vdmUob3V0
cHV0KTsKLSAgICBjaGFuZ2VkT3V0cHV0cygpOwotCi0gICAgbm9kZSgpLT5yZWYoQXVkaW9Ob2Rl
OjpSZWZUeXBlQ29ubmVjdGlvbik7Ci0gICAgbm9kZSgpLT5kZXJlZihBdWRpb05vZGU6OlJlZlR5
cGVEaXNhYmxlZCk7IC8vIE5vdGU6IGl0J3MgaW1wb3J0YW50IHRvIHJldHVybiBpbW1lZGlhdGVs
eSBhZnRlciBhbGwgZGVyZWYoKSBjYWxscyBzaW5jZSB0aGUgbm9kZSBtYXkgYmUgZGVsZXRlZC4K
LX0KLQotdm9pZCBBdWRpb05vZGVJbnB1dDo6Y2hhbmdlZE91dHB1dHMoKQotewotICAgIEFTU0VS
VChjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKLSAgICBpZiAoIW1fcmVuZGVyaW5nU3RhdGVO
ZWVkVXBkYXRpbmcgJiYgIW5vZGUoKS0+aXNNYXJrZWRGb3JEZWxldGlvbigpKSB7ICAgIAotICAg
ICAgICBjb250ZXh0KCktPm1hcmtBdWRpb05vZGVJbnB1dERpcnR5KHRoaXMpOwotICAgICAgICBt
X3JlbmRlcmluZ1N0YXRlTmVlZFVwZGF0aW5nID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQXVk
aW9Ob2RlSW5wdXQ6OnVwZGF0ZVJlbmRlcmluZ1N0YXRlKCkKLXsKLSAgICBBU1NFUlQoY29udGV4
dCgpLT5pc0F1ZGlvVGhyZWFkKCkgJiYgY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0gICAg
Ci0gICAgaWYgKG1fcmVuZGVyaW5nU3RhdGVOZWVkVXBkYXRpbmcgJiYgIW5vZGUoKS0+aXNNYXJr
ZWRGb3JEZWxldGlvbigpKSB7Ci0gICAgICAgIC8vIENvcHkgZnJvbSBtX291dHB1dHMgdG8gbV9y
ZW5kZXJpbmdPdXRwdXRzLgotICAgICAgICBtX3JlbmRlcmluZ091dHB1dHMucmVzaXplKG1fb3V0
cHV0cy5zaXplKCkpOwotICAgICAgICB1bnNpZ25lZCBqID0gMDsKLSAgICAgICAgZm9yIChIYXNo
U2V0PEF1ZGlvTm9kZU91dHB1dCo+OjppdGVyYXRvciBpID0gbV9vdXRwdXRzLmJlZ2luKCk7IGkg
IT0gbV9vdXRwdXRzLmVuZCgpOyArK2ksICsraikgewotICAgICAgICAgICAgQXVkaW9Ob2RlT3V0
cHV0KiBvdXRwdXQgPSAqaTsKLSAgICAgICAgICAgIG1fcmVuZGVyaW5nT3V0cHV0c1tqXSA9IG91
dHB1dDsKLSAgICAgICAgICAgIG91dHB1dC0+dXBkYXRlUmVuZGVyaW5nU3RhdGUoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIG5vZGUoKS0+Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQodGhp
cyk7Ci0gICAgICAgIAotICAgICAgICBtX3JlbmRlcmluZ1N0YXRlTmVlZFVwZGF0aW5nID0gZmFs
c2U7Ci0gICAgfQotfQotCi12b2lkIEF1ZGlvTm9kZUlucHV0Ojp1cGRhdGVJbnRlcm5hbEJ1cygp
Ci17Ci0gICAgQVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgpICYmIGNvbnRleHQoKS0+
aXNHcmFwaE93bmVyKCkpOwotCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dENoYW5uZWxzID0g
bnVtYmVyT2ZDaGFubmVscygpOwotCi0gICAgaWYgKG51bWJlck9mSW5wdXRDaGFubmVscyA9PSBt
X2ludGVybmFsU3VtbWluZ0J1cy0+bnVtYmVyT2ZDaGFubmVscygpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2ludGVybmFsU3VtbWluZ0J1cyA9IGFkb3B0UHRyKG5ldyBBdWRpb0J1cyhudW1i
ZXJPZklucHV0Q2hhbm5lbHMsIEF1ZGlvTm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1lcykpOwot
fQotCi11bnNpZ25lZCBBdWRpb05vZGVJbnB1dDo6bnVtYmVyT2ZDaGFubmVscygpIGNvbnN0Ci17
Ci0gICAgLy8gRmluZCB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIG9mIHRoZSBjb25uZWN0aW9uIHdp
dGggdGhlIGxhcmdlc3QgbnVtYmVyIG9mIGNoYW5uZWxzLgotICAgIHVuc2lnbmVkIG1heENoYW5u
ZWxzID0gMTsgLy8gb25lIGNoYW5uZWwgaXMgdGhlIG1pbmltdW0gYWxsb3dlZAotCi0gICAgZm9y
IChIYXNoU2V0PEF1ZGlvTm9kZU91dHB1dCo+OjppdGVyYXRvciBpID0gbV9vdXRwdXRzLmJlZ2lu
KCk7IGkgIT0gbV9vdXRwdXRzLmVuZCgpOyArK2kpIHsKLSAgICAgICAgQXVkaW9Ob2RlT3V0cHV0
KiBvdXRwdXQgPSAqaTsKLSAgICAgICAgbWF4Q2hhbm5lbHMgPSBtYXgobWF4Q2hhbm5lbHMsIG91
dHB1dC0+YnVzKCktPm51bWJlck9mQ2hhbm5lbHMoKSk7Ci0gICAgfQotICAgIAotICAgIHJldHVy
biBtYXhDaGFubmVsczsKLX0KLQotdW5zaWduZWQgQXVkaW9Ob2RlSW5wdXQ6Om51bWJlck9mUmVu
ZGVyaW5nQ2hhbm5lbHMoKQotewotICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQo
KSk7Ci0KLSAgICAvLyBGaW5kIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgb2YgdGhlIHJlbmRlcmlu
ZyBjb25uZWN0aW9uIHdpdGggdGhlIGxhcmdlc3QgbnVtYmVyIG9mIGNoYW5uZWxzLgotICAgIHVu
c2lnbmVkIG1heENoYW5uZWxzID0gMTsgLy8gb25lIGNoYW5uZWwgaXMgdGhlIG1pbmltdW0gYWxs
b3dlZAotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mUmVuZGVyaW5nQ29u
bmVjdGlvbnMoKTsgKytpKQotICAgICAgICBtYXhDaGFubmVscyA9IG1heChtYXhDaGFubmVscywg
cmVuZGVyaW5nT3V0cHV0KGkpLT5idXMoKS0+bnVtYmVyT2ZDaGFubmVscygpKTsKLSAgICAKLSAg
ICByZXR1cm4gbWF4Q2hhbm5lbHM7Ci19Ci0KLUF1ZGlvQnVzKiBBdWRpb05vZGVJbnB1dDo6YnVz
KCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkpOwotCi0gICAgLy8g
SGFuZGxlIHNpbmdsZSBjb25uZWN0aW9uIHNwZWNpYWxseSB0byBhbGxvdyBmb3IgaW4tcGxhY2Ug
cHJvY2Vzc2luZy4KLSAgICBpZiAobnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9ucygpID09IDEp
Ci0gICAgICAgIHJldHVybiByZW5kZXJpbmdPdXRwdXQoMCktPmJ1cygpOwotCi0gICAgLy8gTXVs
dGlwbGUgY29ubmVjdGlvbnMgY2FzZSAob3Igbm8gY29ubmVjdGlvbnMpLgotICAgIHJldHVybiBp
bnRlcm5hbFN1bW1pbmdCdXMoKTsKLX0KLQotQXVkaW9CdXMqIEF1ZGlvTm9kZUlucHV0OjppbnRl
cm5hbFN1bW1pbmdCdXMoKQotewotICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQo
KSk7Ci0KLSAgICBBU1NFUlQobnVtYmVyT2ZSZW5kZXJpbmdDaGFubmVscygpID09IG1faW50ZXJu
YWxTdW1taW5nQnVzLT5udW1iZXJPZkNoYW5uZWxzKCkpOwotCi0gICAgcmV0dXJuIG1faW50ZXJu
YWxTdW1taW5nQnVzLmdldCgpOwotfQotCi12b2lkIEF1ZGlvTm9kZUlucHV0OjpzdW1BbGxDb25u
ZWN0aW9ucyhBdWRpb0J1cyogc3VtbWluZ0J1cywgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKLXsK
LSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkpOwotCi0gICAgLy8gV2Ugc2hv
dWxkbid0IGJlIGNhbGxpbmcgdGhpcyBtZXRob2QgaWYgdGhlcmUncyBvbmx5IG9uZSBjb25uZWN0
aW9uLCBzaW5jZSBpdCdzIGxlc3MgZWZmaWNpZW50LgotICAgIEFTU0VSVChudW1iZXJPZlJlbmRl
cmluZ0Nvbm5lY3Rpb25zKCkgPiAxKTsKLQotICAgIEFTU0VSVChzdW1taW5nQnVzKTsKLSAgICBp
ZiAoIXN1bW1pbmdCdXMpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgc3VtbWluZ0J1
cy0+emVybygpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mUmVuZGVy
aW5nQ29ubmVjdGlvbnMoKTsgKytpKSB7Ci0gICAgICAgIEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0
ID0gcmVuZGVyaW5nT3V0cHV0KGkpOwotICAgICAgICBBU1NFUlQob3V0cHV0KTsKLQotICAgICAg
ICAvLyBSZW5kZXIgYXVkaW8gZnJvbSB0aGlzIG91dHB1dC4KLSAgICAgICAgQXVkaW9CdXMqIGNv
bm5lY3Rpb25CdXMgPSBvdXRwdXQtPnB1bGwoMCwgZnJhbWVzVG9Qcm9jZXNzKTsKLQotICAgICAg
ICAvLyBTdW0sIHdpdGggdW5pdHktZ2Fpbi4KLSAgICAgICAgc3VtbWluZ0J1cy0+c3VtRnJvbSgq
Y29ubmVjdGlvbkJ1cyk7Ci0gICAgfQotfQotCi1BdWRpb0J1cyogQXVkaW9Ob2RlSW5wdXQ6OnB1
bGwoQXVkaW9CdXMqIGluUGxhY2VCdXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAg
QVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgpKTsKLQotICAgIC8vIEhhbmRsZSBzaW5n
bGUgY29ubmVjdGlvbiBjYXNlLgotICAgIGlmIChudW1iZXJPZlJlbmRlcmluZ0Nvbm5lY3Rpb25z
KCkgPT0gMSkgewotICAgICAgICAvLyBUaGUgb3V0cHV0IHdpbGwgb3B0aW1pemUgcHJvY2Vzc2lu
ZyB1c2luZyBpblBsYWNlQnVzIGlmIGl0J3MgYWJsZS4KLSAgICAgICAgQXVkaW9Ob2RlT3V0cHV0
KiBvdXRwdXQgPSB0aGlzLT5yZW5kZXJpbmdPdXRwdXQoMCk7Ci0gICAgICAgIHJldHVybiBvdXRw
dXQtPnB1bGwoaW5QbGFjZUJ1cywgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB9Ci0KLSAgICBBdWRp
b0J1cyogaW50ZXJuYWxTdW1taW5nQnVzID0gdGhpcy0+aW50ZXJuYWxTdW1taW5nQnVzKCk7Ci0K
LSAgICBpZiAoIW51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKSkgewotICAgICAgICAvLyBB
dCBsZWFzdCwgZ2VuZXJhdGUgc2lsZW5jZSBpZiB3ZSdyZSBub3QgY29ubmVjdGVkIHRvIGFueXRo
aW5nLgotICAgICAgICAvLyBGSVhNRTogaWYgd2Ugd2FudGVkIHRvIGdldCBmYW5jeSwgd2UgY291
bGQgcHJvcGFnYXRlIGEgJ3NpbGVudCBoaW50JyBoZXJlIHRvIG9wdGltaXplIHRoZSBkb3duc3Ry
ZWFtIGdyYXBoIHByb2Nlc3NpbmcuCi0gICAgICAgIGludGVybmFsU3VtbWluZ0J1cy0+emVybygp
OwotICAgICAgICByZXR1cm4gaW50ZXJuYWxTdW1taW5nQnVzOwotICAgIH0KLQotICAgIC8vIEhh
bmRsZSBtdWx0aXBsZSBjb25uZWN0aW9ucyBjYXNlLgotICAgIHN1bUFsbENvbm5lY3Rpb25zKGlu
dGVybmFsU3VtbWluZ0J1cywgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAKLSAgICByZXR1cm4gaW50
ZXJuYWxTdW1taW5nQnVzOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9O
b2RlSW5wdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05v
ZGVJbnB1dC5oCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9B
dWRpb05vZGVJbnB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyOCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBBdWRpb05vZGVJbnB1dF9oCi0jZGVmaW5lIEF1ZGlvTm9kZUlucHV0X2gK
LQotI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCi0jaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9Ob2RlOwotY2xhc3MgQXVkaW9Ob2RlT3V0cHV0OwotCi0v
LyBBbiBBdWRpb05vZGVJbnB1dCByZXByZXNlbnRzIGFuIGlucHV0IHRvIGFuIEF1ZGlvTm9kZSBh
bmQgY2FuIGJlIGNvbm5lY3RlZCBmcm9tIG9uZSBvciBtb3JlIEF1ZGlvTm9kZU91dHB1dHMuCi0v
LyBJbiB0aGUgY2FzZSBvZiBtdWx0aXBsZSBjb25uZWN0aW9ucywgdGhlIGlucHV0IHdpbGwgYWN0
IGFzIGEgdW5pdHktZ2FpbiBzdW1taW5nIGp1bmN0aW9uLCBtaXhpbmcgYWxsIHRoZSBvdXRwdXRz
LgotLy8gVGhlIG51bWJlciBvZiBjaGFubmVscyBvZiB0aGUgaW5wdXQncyBidXMgaXMgdGhlIG1h
eGltdW0gb2YgdGhlIG51bWJlciBvZiBjaGFubmVscyBvZiBhbGwgaXRzIGNvbm5lY3Rpb25zLgot
Ci1jbGFzcyBBdWRpb05vZGVJbnB1dCB7Ci1wdWJsaWM6Ci0gICAgQXVkaW9Ob2RlSW5wdXQoQXVk
aW9Ob2RlKik7Ci0KLSAgICAvLyBDYW4gYmUgY2FsbGVkIGZyb20gYW55IHRocmVhZC4KLSAgICBB
dWRpb05vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KLSAgICBBdWRpb0NvbnRl
eHQqIGNvbnRleHQoKSB7IHJldHVybiBtX25vZGUtPmNvbnRleHQoKTsgfQotCi0gICAgLy8gTXVz
dCBiZSBjYWxsZWQgd2l0aCB0aGUgY29udGV4dCdzIGdyYXBoIGxvY2suCi0gICAgdm9pZCBjb25u
ZWN0KEF1ZGlvTm9kZU91dHB1dCopOwotICAgIHZvaWQgZGlzY29ubmVjdChBdWRpb05vZGVPdXRw
dXQqKTsKLQotICAgIC8vIGRpc2FibGUoKSB3aWxsIHRha2UgdGhlIG91dHB1dCBvdXQgb2YgdGhl
IGFjdGl2ZSBjb25uZWN0aW9ucyBsaXN0IGFuZCBzZXQgYXNpZGUgaW4gYSBkaXNhYmxlZCBsaXN0
LgotICAgIC8vIGVuYWJsZSgpIHdpbGwgcHV0IHRoZSBvdXRwdXQgYmFjayBpbnRvIHRoZSBhY3Rp
dmUgY29ubmVjdGlvbnMgbGlzdC4KLSAgICAvLyBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBjb250
ZXh0J3MgZ3JhcGggbG9jay4KLSAgICB2b2lkIGVuYWJsZShBdWRpb05vZGVPdXRwdXQqKTsKLSAg
ICB2b2lkIGRpc2FibGUoQXVkaW9Ob2RlT3V0cHV0Kik7Ci0KLSAgICAvLyBwdWxsKCkgcHJvY2Vz
c2VzIGFsbCBvZiB0aGUgQXVkaW9Ob2RlcyBjb25uZWN0ZWQgdG8gdXMuCi0gICAgLy8gSW4gdGhl
IGNhc2Ugb2YgbXVsdGlwbGUgY29ubmVjdGlvbnMgaXQgc3VtcyB0aGUgcmVzdWx0IGludG8gYW4g
aW50ZXJuYWwgc3VtbWluZyBidXMuCi0gICAgLy8gSW4gdGhlIHNpbmdsZSBjb25uZWN0aW9uIGNh
c2UsIGl0IGFsbG93cyBpbi1wbGFjZSBwcm9jZXNzaW5nIHdoZXJlIHBvc3NpYmxlIHVzaW5nIGlu
UGxhY2VCdXMuCi0gICAgLy8gSXQgcmV0dXJucyB0aGUgYnVzIHdoaWNoIGl0IHJlbmRlcmVkIGlu
dG8sIHJldHVybmluZyBpblBsYWNlQnVzIGlmIGluLXBsYWNlIHByb2Nlc3Npbmcgd2FzIHBlcmZv
cm1lZC4KLSAgICAvLyBDYWxsZWQgZnJvbSBjb250ZXh0J3MgYXVkaW8gdGhyZWFkLgotICAgIEF1
ZGlvQnVzKiBwdWxsKEF1ZGlvQnVzKiBpblBsYWNlQnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNz
KTsKLQotICAgIC8vIGJ1cygpIGNvbnRhaW5zIHRoZSByZW5kZXJlZCBhdWRpbyBhZnRlciBwdWxs
KCkgaGFzIGJlZW4gY2FsbGVkIGZvciBlYWNoIHRpbWUgcXVhbnR1bS4KLSAgICAvLyBDYWxsZWQg
ZnJvbSBjb250ZXh0J3MgYXVkaW8gdGhyZWFkLgotICAgIEF1ZGlvQnVzKiBidXMoKTsKLSAgICAK
LSAgICAvLyBUaGlzIGNvcGllcyBtX291dHB1dHMgdG8gbV9yZW5kZXJpbmdPdXRwdXRzLiAgUGxl
YXNlIHNlZSBjb21tZW50cyBmb3IgdGhlc2UgbGlzdHMgYmVsb3cuCi0gICAgLy8gVGhpcyBtdXN0
IGJlIGNhbGxlZCB3aGVuIHdlIG93biB0aGUgY29udGV4dCdzIGdyYXBoIGxvY2sgaW4gdGhlIGF1
ZGlvIHRocmVhZCBhdCB0aGUgdmVyeSBzdGFydCBvciBlbmQgb2YgdGhlIHJlbmRlciBxdWFudHVt
LgotICAgIHZvaWQgdXBkYXRlUmVuZGVyaW5nU3RhdGUoKTsKLQotICAgIC8vIHVwZGF0ZUludGVy
bmFsQnVzKCkgdXBkYXRlcyBtX2ludGVybmFsU3VtbWluZ0J1cyBhcHByb3ByaWF0ZWx5IGZvciB0
aGUgbnVtYmVyIG9mIGNoYW5uZWxzLgotICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2hlbiB3
ZSBvd24gdGhlIGNvbnRleHQncyBncmFwaCBsb2NrIGluIHRoZSBhdWRpbyB0aHJlYWQgYXQgdGhl
IHZlcnkgc3RhcnQgb3IgZW5kIG9mIHRoZSByZW5kZXIgcXVhbnR1bS4KLSAgICB2b2lkIHVwZGF0
ZUludGVybmFsQnVzKCk7Ci0KLSAgICAvLyBSZW5kZXJpbmcgY29kZSBhY2Nlc3NlcyBpdHMgdmVy
c2lvbiBvZiB0aGUgY3VycmVudCBjb25uZWN0aW9ucyBoZXJlLgotICAgIHVuc2lnbmVkIG51bWJl
ck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ091dHB1
dHMuc2l6ZSgpOyB9Ci0gICAgQXVkaW9Ob2RlT3V0cHV0KiByZW5kZXJpbmdPdXRwdXQodW5zaWdu
ZWQgaSkgeyByZXR1cm4gbV9yZW5kZXJpbmdPdXRwdXRzW2ldOyB9Ci0gICAgY29uc3QgQXVkaW9O
b2RlT3V0cHV0KiByZW5kZXJpbmdPdXRwdXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9y
ZW5kZXJpbmdPdXRwdXRzW2ldOyB9Ci0gICAgYm9vbCBpc0Nvbm5lY3RlZCgpIGNvbnN0IHsgcmV0
dXJuIG51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKSA+IDA7IH0KLQotICAgIC8vIFRoZSBu
dW1iZXIgb2YgY2hhbm5lbHMgb2YgdGhlIGNvbm5lY3Rpb24gd2l0aCB0aGUgbGFyZ2VzdCBudW1i
ZXIgb2YgY2hhbm5lbHMuCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscygpIGNvbnN0OyAg
ICAgICAgCi0gICAgCi1wcml2YXRlOgotICAgIEF1ZGlvTm9kZSogbV9ub2RlOwotCi0gICAgLy8g
bV9vdXRwdXRzIGNvbnRhaW5zIHRoZSBBdWRpb05vZGVPdXRwdXRzIHJlcHJlc2VudGluZyBjdXJy
ZW50IGNvbm5lY3Rpb25zIHdoaWNoIGFyZSBub3QgZGlzYWJsZWQuCi0gICAgLy8gVGhlIHJlbmRl
cmluZyBjb2RlIHNob3VsZCBuZXZlciB1c2UgdGhpcyBkaXJlY3RseSwgYnV0IGluc3RlYWQgdXNl
cyBtX3JlbmRlcmluZ091dHB1dHMuCi0gICAgSGFzaFNldDxBdWRpb05vZGVPdXRwdXQqPiBtX291
dHB1dHM7Ci0KLSAgICAvLyBudW1iZXJPZkNvbm5lY3Rpb25zKCkgc2hvdWxkIG5ldmVyIGJlIGNh
bGxlZCBmcm9tIHRoZSBhdWRpbyByZW5kZXJpbmcgdGhyZWFkLgotICAgIC8vIEluc3RlYWQgbnVt
YmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9ucygpIGFuZCByZW5kZXJpbmdPdXRwdXQoKSBzaG91bGQg
YmUgdXNlZC4KLSAgICB1bnNpZ25lZCBudW1iZXJPZkNvbm5lY3Rpb25zKCkgY29uc3QgeyByZXR1
cm4gbV9vdXRwdXRzLnNpemUoKTsgfQotCi0gICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCB3aGVu
ZXZlciB3ZSBtb2RpZnkgbV9vdXRwdXRzLgotICAgIHZvaWQgY2hhbmdlZE91dHB1dHMoKTsKLSAg
ICAKLSAgICAvLyBtX3JlbmRlcmluZ091dHB1dHMgaXMgYSBjb3B5IG9mIG1fb3V0cHV0cyB3aGlj
aCB3aWxsIG5ldmVyIGJlIG1vZGlmaWVkIGR1cmluZyB0aGUgZ3JhcGggcmVuZGVyaW5nIG9uIHRo
ZSBhdWRpbyB0aHJlYWQuCi0gICAgLy8gVGhpcyBpcyB0aGUgbGlzdCB3aGljaCBpcyB1c2VkIGJ5
IHRoZSByZW5kZXJpbmcgY29kZS4KLSAgICAvLyBXaGVuZXZlciBtX291dHB1dHMgaXMgbW9kaWZp
ZWQsIHRoZSBjb250ZXh0IGlzIHRvbGQgc28gaXQgY2FuIGxhdGVyIHVwZGF0ZSBtX3JlbmRlcmlu
Z091dHB1dHMgZnJvbSBtX291dHB1dHMgYXQgYSBzYWZlIHRpbWUuCi0gICAgLy8gTW9zdCBvZiB0
aGUgdGltZSwgbV9yZW5kZXJpbmdPdXRwdXRzIGlzIGlkZW50aWNhbCB0byBtX291dHB1dHMuCi0g
ICAgVmVjdG9yPEF1ZGlvTm9kZU91dHB1dCo+IG1fcmVuZGVyaW5nT3V0cHV0czsKLQotICAgIC8v
IG1fcmVuZGVyaW5nU3RhdGVOZWVkVXBkYXRpbmcga2VlcHMgdHJhY2sgaWYgbV9vdXRwdXRzIGlz
IG1vZGlmaWVkLgotICAgIGJvb2wgbV9yZW5kZXJpbmdTdGF0ZU5lZWRVcGRhdGluZzsKLQotICAg
IC8vIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgb2YgdGhlIHJlbmRlcmluZyBjb25uZWN0aW9uIHdp
dGggdGhlIGxhcmdlc3QgbnVtYmVyIG9mIGNoYW5uZWxzLgotICAgIHVuc2lnbmVkIG51bWJlck9m
UmVuZGVyaW5nQ2hhbm5lbHMoKTsKLQotICAgIC8vIG1fZGlzYWJsZWRPdXRwdXRzIGNvbnRhaW5z
IHRoZSBBdWRpb05vZGVPdXRwdXRzIHdoaWNoIGFyZSBkaXNhYmxlZCAod2lsbCBub3QgYmUgcHJv
Y2Vzc2VkKSBieSB0aGUgYXVkaW8gZ3JhcGggcmVuZGVyaW5nLgotICAgIC8vIEJ1dCwgZnJvbSBK
YXZhU2NyaXB0J3MgcGVyc3BlY3RpdmUsIHRoZXNlIG91dHB1dHMgYXJlIHN0aWxsIGNvbm5lY3Rl
ZCB0byB1cy4KLSAgICAvLyBHZW5lcmFsbHksIHRoZXNlIHJlcHJlc2VudCBkaXNhYmxlZCBjb25u
ZWN0aW9ucyBmcm9tICJub3RlcyIgd2hpY2ggaGF2ZSBmaW5pc2hlZCBwbGF5aW5nIGJ1dCBhcmUg
bm90IHlldCBnYXJiYWdlIGNvbGxlY3RlZC4KLSAgICBIYXNoU2V0PEF1ZGlvTm9kZU91dHB1dCo+
IG1fZGlzYWJsZWRPdXRwdXRzOwotCi0gICAgLy8gQ2FsbGVkIGZyb20gY29udGV4dCdzIGF1ZGlv
IHRocmVhZC4KLSAgICBBdWRpb0J1cyogaW50ZXJuYWxTdW1taW5nQnVzKCk7Ci0gICAgdm9pZCBz
dW1BbGxDb25uZWN0aW9ucyhBdWRpb0J1cyogc3VtbWluZ0J1cywgc2l6ZV90IGZyYW1lc1RvUHJv
Y2Vzcyk7Ci0KLSAgICBPd25QdHI8QXVkaW9CdXM+IG1faW50ZXJuYWxTdW1taW5nQnVzOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQXVkaW9Ob2RlSW5wdXRfaApJ
bmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuY3BwCShyZXZp
c2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIwOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIkF1ZGlv
Tm9kZU91dHB1dC5oIgotCi0jaW5jbHVkZSAiQXVkaW9CdXMuaCIKLSNpbmNsdWRlICJBdWRpb0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgotI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1BdWRpb05vZGVPdXRwdXQ6OkF1ZGlv
Tm9kZU91dHB1dChBdWRpb05vZGUqIG5vZGUsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMpCi0g
ICAgOiBtX25vZGUobm9kZSkKLSAgICAsIG1fbnVtYmVyT2ZDaGFubmVscyhudW1iZXJPZkNoYW5u
ZWxzKQotICAgICwgbV9kZXNpcmVkTnVtYmVyT2ZDaGFubmVscyhudW1iZXJPZkNoYW5uZWxzKQot
ICAgICwgbV9hY3R1YWxEZXN0aW5hdGlvbkJ1cygwKQotICAgICwgbV9pc0VuYWJsZWQodHJ1ZSkK
LSAgICAsIG1fcmVuZGVyaW5nRmFuT3V0Q291bnQoMCkKLXsKLSAgICBBU1NFUlQobnVtYmVyT2ZD
aGFubmVscyA8PSBBdWRpb0NvbnRleHQ6Om1heE51bWJlck9mQ2hhbm5lbHMoKSk7Ci0KLSAgICBt
X2ludGVybmFsQnVzID0gYWRvcHRQdHIobmV3IEF1ZGlvQnVzKG51bWJlck9mQ2hhbm5lbHMsIEF1
ZGlvTm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1lcykpOwotICAgIG1fYWN0dWFsRGVzdGluYXRp
b25CdXMgPSBtX2ludGVybmFsQnVzLmdldCgpOwotfQotCi12b2lkIEF1ZGlvTm9kZU91dHB1dDo6
c2V0TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKQotewotICAgIEFT
U0VSVChudW1iZXJPZkNoYW5uZWxzIDw9IEF1ZGlvQ29udGV4dDo6bWF4TnVtYmVyT2ZDaGFubmVs
cygpKTsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0KLSAgICBtX2Rl
c2lyZWROdW1iZXJPZkNoYW5uZWxzID0gbnVtYmVyT2ZDaGFubmVsczsKLQotICAgIGlmIChjb250
ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSkgewotICAgICAgICAvLyBJZiB3ZSdyZSBpbiB0aGUgYXVk
aW8gdGhyZWFkIHRoZW4gd2UgY2FuIHRha2UgY2FyZSBvZiBpdCByaWdodCBhd2F5ICh3ZSBzaG91
bGQgYmUgYXQgdGhlIHZlcnkgc3RhcnQgb3IgZW5kIG9mIGEgcmVuZGVyaW5nIHF1YW50dW0pLgot
ICAgICAgICB1cGRhdGVOdW1iZXJPZkNoYW5uZWxzKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
Ly8gTGV0IHRoZSBjb250ZXh0IHRha2UgY2FyZSBvZiBpdCBpbiB0aGUgYXVkaW8gdGhyZWFkIGlu
IHRoZSBwcmUgYW5kIHBvc3QgcmVuZGVyIHRhc2tzLgotICAgICAgICBjb250ZXh0KCktPm1hcmtB
dWRpb05vZGVPdXRwdXREaXJ0eSh0aGlzKTsKLSAgICB9Ci19Ci0KLXZvaWQgQXVkaW9Ob2RlT3V0
cHV0Ojp1cGRhdGVJbnRlcm5hbEJ1cygpCi17Ci0gICAgaWYgKG51bWJlck9mQ2hhbm5lbHMoKSA9
PSBtX2ludGVybmFsQnVzLT5udW1iZXJPZkNoYW5uZWxzKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1faW50ZXJuYWxCdXMgPSBhZG9wdFB0cihuZXcgQXVkaW9CdXMobnVtYmVyT2ZDaGFubmVs
cygpLCBBdWRpb05vZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXMpKTsKLQotICAgIC8vIFRoaXMg
bWF5IGxhdGVyIGJlIGNoYW5nZWQgaW4gcHVsbCgpIHRvIHBvaW50IHRvIGFuIGluLXBsYWNlIGJ1
cyB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBjaGFubmVscy4KLSAgICBtX2FjdHVhbERlc3RpbmF0
aW9uQnVzID0gbV9pbnRlcm5hbEJ1cy5nZXQoKTsKLX0KLQotdm9pZCBBdWRpb05vZGVPdXRwdXQ6
OnVwZGF0ZVJlbmRlcmluZ1N0YXRlKCkKLXsKLSAgICB1cGRhdGVOdW1iZXJPZkNoYW5uZWxzKCk7
Ci0gICAgbV9yZW5kZXJpbmdGYW5PdXRDb3VudCA9IGZhbk91dENvdW50KCk7Ci19Ci0KLXZvaWQg
QXVkaW9Ob2RlT3V0cHV0Ojp1cGRhdGVOdW1iZXJPZkNoYW5uZWxzKCkKLXsKLSAgICBBU1NFUlQo
Y29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkgJiYgY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7
Ci0KLSAgICBpZiAobV9udW1iZXJPZkNoYW5uZWxzICE9IG1fZGVzaXJlZE51bWJlck9mQ2hhbm5l
bHMpIHsKLSAgICAgICAgbV9udW1iZXJPZkNoYW5uZWxzID0gbV9kZXNpcmVkTnVtYmVyT2ZDaGFu
bmVsczsKLSAgICAgICAgdXBkYXRlSW50ZXJuYWxCdXMoKTsKLSAgICAgICAgcHJvcGFnYXRlQ2hh
bm5lbENvdW50KCk7Ci0gICAgfQotfQotCi12b2lkIEF1ZGlvTm9kZU91dHB1dDo6cHJvcGFnYXRl
Q2hhbm5lbENvdW50KCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkg
JiYgY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0gICAgCi0gICAgaWYgKGlzQ2hhbm5lbENv
dW50S25vd24oKSkgewotICAgICAgICAvLyBBbm5vdW5jZSB0byBhbnkgbm9kZXMgd2UncmUgY29u
bmVjdGVkIHRvIHRoYXQgd2UgY2hhbmdlZCBvdXIgY2hhbm5lbCBjb3VudCBmb3IgaXRzIGlucHV0
LgotICAgICAgICBmb3IgKElucHV0c0l0ZXJhdG9yIGkgPSBtX2lucHV0cy5iZWdpbigpOyBpICE9
IG1faW5wdXRzLmVuZCgpOyArK2kpIHsKLSAgICAgICAgICAgIEF1ZGlvTm9kZUlucHV0KiBpbnB1
dCA9ICppOwotICAgICAgICAgICAgQXVkaW9Ob2RlKiBjb25uZWN0aW9uTm9kZSA9IGlucHV0LT5u
b2RlKCk7Ci0gICAgICAgICAgICBjb25uZWN0aW9uTm9kZS0+Y2hlY2tOdW1iZXJPZkNoYW5uZWxz
Rm9ySW5wdXQoaW5wdXQpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1BdWRpb0J1cyogQXVkaW9O
b2RlT3V0cHV0OjpwdWxsKEF1ZGlvQnVzKiBpblBsYWNlQnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9j
ZXNzKQotewotICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSk7Ci0gICAgQVNT
RVJUKG1fcmVuZGVyaW5nRmFuT3V0Q291bnQgPiAwKTsKLSAgICAKLSAgICAvLyBDYXVzZXMgb3Vy
IEF1ZGlvTm9kZSB0byBwcm9jZXNzIGlmIGl0IGhhc24ndCBhbHJlYWR5IGZvciB0aGlzIHJlbmRl
ciBxdWFudHVtLgotICAgIC8vIFdlIHRyeSB0byBkbyBpbi1wbGFjZSBwcm9jZXNzaW5nICh1c2lu
ZyBpblBsYWNlQnVzKSBpZiBhdCBhbGwgcG9zc2libGUsCi0gICAgLy8gYnV0IHdlIGNhbid0IHBy
b2Nlc3MgaW4tcGxhY2UgaWYgd2UncmUgY29ubmVjdGVkIHRvIG1vcmUgdGhhbiBvbmUgaW5wdXQg
KGZhbi1vdXQgPiAxKS4KLSAgICAvLyBJbiB0aGlzIGNhc2UgcHVsbCgpIGlzIGNhbGxlZCBtdWx0
aXBsZSB0aW1lcyBwZXIgcmVuZGVyaW5nIHF1YW50dW0sIGFuZCB0aGUgcHJvY2Vzc0lmTmVjZXNz
YXJ5KCkgY2FsbCBiZWxvdyB3aWxsCi0gICAgLy8gY2F1c2Ugb3VyIG5vZGUgdG8gcHJvY2Vzcygp
IG9ubHkgdGhlIGZpcnN0IHRpbWUsIGNhY2hpbmcgdGhlIG91dHB1dCBpbiBtX2ludGVybmFsT3V0
cHV0QnVzIGZvciBzdWJzZXF1ZW50IGNhbGxzLiAgICAKLSAgICAKLSAgICBib29sIGlzSW5QbGFj
ZSA9IGluUGxhY2VCdXMgJiYgaW5QbGFjZUJ1cy0+bnVtYmVyT2ZDaGFubmVscygpID09IG51bWJl
ck9mQ2hhbm5lbHMoKSAmJiBtX3JlbmRlcmluZ0Zhbk91dENvdW50ID09IDE7Ci0KLSAgICAvLyBT
ZXR1cCB0aGUgYWN0dWFsIGRlc3RpbmF0aW9uIGJ1cyBmb3IgcHJvY2Vzc2luZyB3aGVuIG91ciBu
b2RlJ3MgcHJvY2VzcygpIG1ldGhvZCBnZXRzIGNhbGxlZCBpbiBwcm9jZXNzSWZOZWNlc3Nhcnko
KSBiZWxvdy4KLSAgICBtX2FjdHVhbERlc3RpbmF0aW9uQnVzID0gaXNJblBsYWNlID8gaW5QbGFj
ZUJ1cyA6IG1faW50ZXJuYWxCdXMuZ2V0KCk7Ci0KLSAgICBub2RlKCktPnByb2Nlc3NJZk5lY2Vz
c2FyeShmcmFtZXNUb1Byb2Nlc3MpOwotICAgIHJldHVybiBtX2FjdHVhbERlc3RpbmF0aW9uQnVz
OwotfQotCi1BdWRpb0J1cyogQXVkaW9Ob2RlT3V0cHV0OjpidXMoKSBjb25zdAotewotICAgIEFT
U0VSVChjb25zdF9jYXN0PEF1ZGlvTm9kZU91dHB1dCo+KHRoaXMpLT5jb250ZXh0KCktPmlzQXVk
aW9UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKG1fYWN0dWFsRGVzdGluYXRpb25CdXMpOwotICAgIHJl
dHVybiBtX2FjdHVhbERlc3RpbmF0aW9uQnVzOwotfQotCi11bnNpZ25lZCBBdWRpb05vZGVPdXRw
dXQ6OnJlbmRlcmluZ0Zhbk91dENvdW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZW5kZXJp
bmdGYW5PdXRDb3VudDsKLX0KLQotdW5zaWduZWQgQXVkaW9Ob2RlT3V0cHV0OjpmYW5PdXRDb3Vu
dCgpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOwotICAgIHJldHVy
biBtX2lucHV0cy5zaXplKCk7Ci19Ci0KLXZvaWQgQXVkaW9Ob2RlT3V0cHV0OjphZGRJbnB1dChB
dWRpb05vZGVJbnB1dCogaW5wdXQpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQoKS0+aXNHcmFwaE93
bmVyKCkpOwotCi0gICAgQVNTRVJUKGlucHV0KTsKLSAgICBpZiAoIWlucHV0KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2lucHV0cy5hZGQoaW5wdXQpOwotfQotCi12b2lkIEF1ZGlvTm9kZU91
dHB1dDo6cmVtb3ZlSW5wdXQoQXVkaW9Ob2RlSW5wdXQqIGlucHV0KQotewotICAgIEFTU0VSVChj
b250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKLQotICAgIEFTU0VSVChpbnB1dCk7Ci0gICAgaWYg
KCFpbnB1dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbnB1dHMucmVtb3ZlKGlucHV0KTsK
LX0KLQotdm9pZCBBdWRpb05vZGVPdXRwdXQ6OmRpc2Nvbm5lY3RBbGxJbnB1dHMoKQotewotICAg
IEFTU0VSVChjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKLSAgICAKLSAgICAvLyBBdWRpb05v
ZGVJbnB1dDo6ZGlzY29ubmVjdCgpIGNoYW5nZXMgbV9pbnB1dHMgYnkgY2FsbGluZyByZW1vdmVJ
bnB1dCgpLgotICAgIHdoaWxlICghbV9pbnB1dHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEF1ZGlv
Tm9kZUlucHV0KiBpbnB1dCA9ICptX2lucHV0cy5iZWdpbigpOwotICAgICAgICBpbnB1dC0+ZGlz
Y29ubmVjdCh0aGlzKTsKLSAgICB9Ci19Ci0KLXZvaWQgQXVkaW9Ob2RlT3V0cHV0OjpkaXNhYmxl
KCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0KLSAgICBpZiAo
bV9pc0VuYWJsZWQpIHsKLSAgICAgICAgZm9yIChJbnB1dHNJdGVyYXRvciBpID0gbV9pbnB1dHMu
YmVnaW4oKTsgaSAhPSBtX2lucHV0cy5lbmQoKTsgKytpKSB7Ci0gICAgICAgICAgICBBdWRpb05v
ZGVJbnB1dCogaW5wdXQgPSAqaTsKLSAgICAgICAgICAgIGlucHV0LT5kaXNhYmxlKHRoaXMpOwot
ICAgICAgICB9Ci0gICAgICAgIG1faXNFbmFibGVkID0gZmFsc2U7Ci0gICAgfQotfQotCi12b2lk
IEF1ZGlvTm9kZU91dHB1dDo6ZW5hYmxlKCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0dy
YXBoT3duZXIoKSk7Ci0KLSAgICBpZiAoIW1faXNFbmFibGVkKSB7Ci0gICAgICAgIGZvciAoSW5w
dXRzSXRlcmF0b3IgaSA9IG1faW5wdXRzLmJlZ2luKCk7IGkgIT0gbV9pbnB1dHMuZW5kKCk7ICsr
aSkgewotICAgICAgICAgICAgQXVkaW9Ob2RlSW5wdXQqIGlucHV0ID0gKmk7Ci0gICAgICAgICAg
ICBpbnB1dC0+ZW5hYmxlKHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIG1faXNFbmFibGVkID0g
dHJ1ZTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVO
QUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGVP
dXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGVP
dXRwdXQuaAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9Ob2RlT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIEF1ZGlvTm9kZU91dHB1dF9oCi0jZGVmaW5lIEF1ZGlvTm9kZU91dHB1dF9o
Ci0KLSNpbmNsdWRlICJBdWRpb0J1cy5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZS5oIgotI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb0NvbnRleHQ7
Ci1jbGFzcyBBdWRpb05vZGVJbnB1dDsKLQotLy8gQXVkaW9Ob2RlT3V0cHV0IHJlcHJlc2VudHMg
YSBzaW5nbGUgb3V0cHV0IGZvciBhbiBBdWRpb05vZGUuCi0vLyBJdCBtYXkgYmUgY29ubmVjdGVk
IHRvIG9uZSBvciBtb3JlIEF1ZGlvTm9kZUlucHV0cy4KLQotY2xhc3MgQXVkaW9Ob2RlT3V0cHV0
IHsKLXB1YmxpYzoKLSAgICAvLyBJdCdzIE9LIHRvIHBhc3MgMCBmb3IgbnVtYmVyT2ZDaGFubmVs
cyBpbiB3aGljaCBjYXNlIHNldE51bWJlck9mQ2hhbm5lbHMoKSBtdXN0IGJlIGNhbGxlZCBsYXRl
ciBvbi4KLSAgICBBdWRpb05vZGVPdXRwdXQoQXVkaW9Ob2RlKiwgdW5zaWduZWQgbnVtYmVyT2ZD
aGFubmVscyk7Ci0KLSAgICAvLyBDYW4gYmUgY2FsbGVkIGZyb20gYW55IHRocmVhZC4KLSAgICBB
dWRpb05vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KLSAgICBBdWRpb0NvbnRl
eHQqIGNvbnRleHQoKSB7IHJldHVybiBtX25vZGUtPmNvbnRleHQoKTsgfQotICAgIAotICAgIC8v
IENhdXNlcyBvdXIgQXVkaW9Ob2RlIHRvIHByb2Nlc3MgaWYgaXQgaGFzbid0IGFscmVhZHkgZm9y
IHRoaXMgcmVuZGVyIHF1YW50dW0uCi0gICAgLy8gSXQgcmV0dXJucyB0aGUgYnVzIGNvbnRhaW5p
bmcgdGhlIHByb2Nlc3NlZCBhdWRpbyBmb3IgdGhpcyBvdXRwdXQsIHJldHVybmluZyBpblBsYWNl
QnVzIGlmIGluLXBsYWNlIHByb2Nlc3Npbmcgd2FzIHBvc3NpYmxlLgotICAgIC8vIENhbGxlZCBm
cm9tIGNvbnRleHQncyBhdWRpbyB0aHJlYWQuCi0gICAgQXVkaW9CdXMqIHB1bGwoQXVkaW9CdXMq
IGluUGxhY2VCdXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwotCi0gICAgLy8gYnVzKCkgd2ls
bCBjb250YWluIHRoZSByZW5kZXJlZCBhdWRpbyBhZnRlciBwdWxsKCkgaXMgY2FsbGVkIGZvciBl
YWNoIHJlbmRlcmluZyB0aW1lIHF1YW50dW0uCi0gICAgLy8gQ2FsbGVkIGZyb20gY29udGV4dCdz
IGF1ZGlvIHRocmVhZC4KLSAgICBBdWRpb0J1cyogYnVzKCkgY29uc3Q7Ci0KLSAgICAvLyBmYW5P
dXRDb3VudCgpIGlzIHRoZSBudW1iZXIgb2YgQXVkaW9Ob2RlSW5wdXRzIHRoYXQgd2UncmUgY29u
bmVjdGVkIHRvLgotICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgaW4g
YXVkaW8gdGhyZWFkIHJlbmRlcmluZyBjb2RlLCBpbnN0ZWFkIHJlbmRlcmluZ0Zhbk91dENvdW50
KCkgc2hvdWxkIGJlIHVzZWQuCi0gICAgLy8gSXQgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgY29u
dGV4dCdzIGdyYXBoIGxvY2suCi0gICAgdW5zaWduZWQgZmFuT3V0Q291bnQoKTsKLQotICAgIC8v
IHJlbmRlcmluZ0Zhbk91dENvdW50KCkgaXMgdGhlIG51bWJlciBvZiBBdWRpb05vZGVJbnB1dHMg
dGhhdCB3ZSdyZSBjb25uZWN0ZWQgdG8gZHVyaW5nIHJlbmRlcmluZy4KLSAgICAvLyBVbmxpa2Ug
ZmFuT3V0Q291bnQoKSBpdCB3aWxsIG5vdCBjaGFuZ2UgZHVyaW5nIHRoZSBjb3Vyc2Ugb2YgYSBy
ZW5kZXIgcXVhbnR1bS4KLSAgICB1bnNpZ25lZCByZW5kZXJpbmdGYW5PdXRDb3VudCgpIGNvbnN0
OwotCi0gICAgLy8gSXQgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgY29udGV4dCdzIGdyYXBoIGxv
Y2suCi0gICAgdm9pZCBkaXNjb25uZWN0QWxsSW5wdXRzKCk7Ci0KLSAgICB2b2lkIHNldE51bWJl
ck9mQ2hhbm5lbHModW5zaWduZWQpOwotICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMoKSBj
b25zdCB7IHJldHVybiBtX251bWJlck9mQ2hhbm5lbHM7IH0KLSAgICBib29sIGlzQ2hhbm5lbENv
dW50S25vd24oKSBjb25zdCB7IHJldHVybiBudW1iZXJPZkNoYW5uZWxzKCkgPiAwOyB9Ci0KLSAg
ICAvLyBEaXNhYmxlL0VuYWJsZSBoYXBwZW5zIHdoZW4gdGhlcmUgYXJlIHN0aWxsIEphdmFTY3Jp
cHQgcmVmZXJlbmNlcyB0byBhIG5vZGUsIGJ1dCBpdCBoYXMgb3RoZXJ3aXNlICJmaW5pc2hlZCIg
aXRzIHdvcmsuCi0gICAgLy8gRm9yIGV4YW1wbGUsIHdoZW4gYSBub3RlIGhhcyBmaW5pc2hlZCBw
bGF5aW5nLiAgSXQgaXMga2VwdCBhcm91bmQsIGJlY2F1c2UgaXQgbWF5IGJlIHBsYXllZCBhZ2Fp
biBhdCBhIGxhdGVyIHRpbWUuCi0gICAgLy8gVGhleSBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBj
b250ZXh0J3MgZ3JhcGggbG9jay4KLSAgICB2b2lkIGRpc2FibGUoKTsKLSAgICB2b2lkIGVuYWJs
ZSgpOwotCi0gICAgLy8gdXBkYXRlUmVuZGVyaW5nU3RhdGUoKSBpcyBjYWxsZWQgaW4gdGhlIGF1
ZGlvIHRocmVhZCBhdCB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSByZW5kZXIgcXVhbnR1bSB0byBo
YW5kbGUgYW55IHJlY2VudCBjaGFuZ2VzIHRvIHRoZSBncmFwaCBzdGF0ZS4KLSAgICAvLyBJdCBt
dXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jay4KLSAgICB2b2lkIHVw
ZGF0ZVJlbmRlcmluZ1N0YXRlKCk7Ci0gICAgCi1wcml2YXRlOgotICAgIEF1ZGlvTm9kZSogbV9u
b2RlOwotCi0gICAgZnJpZW5kIGNsYXNzIEF1ZGlvTm9kZUlucHV0OwotICAgIAotICAgIC8vIFRo
ZXNlIGFyZSBjYWxsZWQgZnJvbSBBdWRpb05vZGVJbnB1dC4KLSAgICAvLyBUaGV5IG11c3QgYmUg
Y2FsbGVkIHdpdGggdGhlIGNvbnRleHQncyBncmFwaCBsb2NrLgotICAgIHZvaWQgYWRkSW5wdXQo
QXVkaW9Ob2RlSW5wdXQqKTsKLSAgICB2b2lkIHJlbW92ZUlucHV0KEF1ZGlvTm9kZUlucHV0Kik7
Ci0KLSAgICAvLyB1cGRhdGVJbnRlcm5hbEJ1cygpIHVwZGF0ZXMgbV9pbnRlcm5hbEJ1cyBhcHBy
b3ByaWF0ZWx5IGZvciB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzLgotICAgIC8vIEl0IGlzIGNhbGxl
ZCBpbiB0aGUgY29uc3RydWN0b3Igb3IgaW4gdGhlIGF1ZGlvIHRocmVhZCB3aXRoIHRoZSBjb250
ZXh0J3MgZ3JhcGggbG9jay4KLSAgICB2b2lkIHVwZGF0ZUludGVybmFsQnVzKCk7Ci0KLSAgICAv
LyBBbm5vdW5jZSB0byBhbnkgbm9kZXMgd2UncmUgY29ubmVjdGVkIHRvIHRoYXQgd2UgY2hhbmdl
ZCBvdXIgY2hhbm5lbCBjb3VudCBmb3IgaXRzIGlucHV0LgotICAgIC8vIEl0IG11c3QgYmUgY2Fs
bGVkIGluIHRoZSBhdWRpbyB0aHJlYWQgd2l0aCB0aGUgY29udGV4dCdzIGdyYXBoIGxvY2suCi0g
ICAgdm9pZCBwcm9wYWdhdGVDaGFubmVsQ291bnQoKTsKLQotICAgIC8vIHVwZGF0ZU51bWJlck9m
Q2hhbm5lbHMoKSBpcyBjYWxsZWQgaW4gdGhlIGF1ZGlvIHRocmVhZCBhdCB0aGUgc3RhcnQgb3Ig
ZW5kIG9mIHRoZSByZW5kZXIgcXVhbnR1bSB0byBwaWNrIHVwIGNoYW5uZWwgY2hhbmdlcy4KLSAg
ICAvLyBJdCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jay4KLSAg
ICB2b2lkIHVwZGF0ZU51bWJlck9mQ2hhbm5lbHMoKTsKLQotICAgIC8vIG1fbnVtYmVyT2ZDaGFu
bmVscyB3aWxsIG9ubHkgYmUgY2hhbmdlZCBpbiB0aGUgYXVkaW8gdGhyZWFkLgotICAgIC8vIFRo
ZSBtYWluIHRocmVhZCBzZXRzIG1fZGVzaXJlZE51bWJlck9mQ2hhbm5lbHMgd2hpY2ggd2lsbCBs
YXRlciBnZXQgcGlja2VkIHVwIGluIHRoZSBhdWRpbyB0aHJlYWQgaW4gdXBkYXRlTnVtYmVyT2ZD
aGFubmVscygpLgotICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZDaGFubmVsczsKLSAgICB1bnNpZ25l
ZCBtX2Rlc2lyZWROdW1iZXJPZkNoYW5uZWxzOwotICAgIAotICAgIC8vIG1faW50ZXJuYWxCdXMg
bXVzdCBvbmx5IGJlIGNoYW5nZWQgaW4gdGhlIGF1ZGlvIHRocmVhZCB3aXRoIHRoZSBjb250ZXh0
J3MgZ3JhcGggbG9jayAob3IgY29uc3RydWN0b3IpLgotICAgIE93blB0cjxBdWRpb0J1cz4gbV9p
bnRlcm5hbEJ1czsKLQotICAgIC8vIG1fYWN0dWFsRGVzdGluYXRpb25CdXMgaXMgc2V0IGluIHB1
bGwoKSBhbmQgd2lsbCBlaXRoZXIgcG9pbnQgdG8gb25lIG9mIG91ciBpbnRlcm5hbCBidXNzZXMg
b3IgdG8gdGhlIGluLXBsYWNlIGJ1cy4KLSAgICAvLyBJdCBtdXN0IG9ubHkgYmUgY2hhbmdlZCBp
biB0aGUgYXVkaW8gdGhyZWFkIChvciBjb25zdHJ1Y3RvcikuCi0gICAgQXVkaW9CdXMqIG1fYWN0
dWFsRGVzdGluYXRpb25CdXM7Ci0KLSAgICBIYXNoU2V0PEF1ZGlvTm9kZUlucHV0Kj4gbV9pbnB1
dHM7Ci0gICAgdHlwZWRlZiBIYXNoU2V0PEF1ZGlvTm9kZUlucHV0Kj46Oml0ZXJhdG9yIElucHV0
c0l0ZXJhdG9yOwotICAgIGJvb2wgbV9pc0VuYWJsZWQ7Ci0gICAgCi0gICAgLy8gRm9yIHRoZSBw
dXJwb3NlcyBvZiByZW5kZXJpbmcsIGtlZXBzIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgaW5wdXRz
IHdlJ3JlIGNvbm5lY3RlZCB0by4KLSAgICAvLyBUaGlzIHZhbHVlIHNob3VsZCBvbmx5IGJlIGNo
YW5nZWQgYXQgdGhlIHZlcnkgc3RhcnQgb3IgZW5kIG9mIHRoZSByZW5kZXJpbmcgcXVhbnR1bS4K
LSAgICB1bnNpZ25lZCBtX3JlbmRlcmluZ0Zhbk91dENvdW50OwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQXVkaW9Ob2RlT3V0cHV0X2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmNwcAkocmV2aXNpb24gMTExMjA4KQor
KysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSwzMzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJBdWRpb1Bhbm5lck5vZGUuaCIK
LQotI2luY2x1ZGUgIkF1ZGlvQnVmZmVyU291cmNlTm9kZS5oIgotI2luY2x1ZGUgIkF1ZGlvQnVz
LmgiCi0jaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlSW5wdXQu
aCIKLSNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCi0jaW5jbHVkZSAiSFJURlBhbm5lci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGlj
IHZvaWQgZml4TkFOcyhkb3VibGUgJngpCi17Ci0gICAgaWYgKGlzbmFuKHgpIHx8IGlzaW5mKHgp
KQotICAgICAgICB4ID0gMC4wOwotfQotCi1BdWRpb1Bhbm5lck5vZGU6OkF1ZGlvUGFubmVyTm9k
ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBBdWRpb05v
ZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkKLSAgICAsIG1fcGFubmluZ01vZGVsKFBhbm5lcjo6UGFu
bmluZ01vZGVsSFJURikKLSAgICAsIG1fbGFzdEdhaW4oLTEuMCkKLSAgICAsIG1fY29ubmVjdGlv
bkNvdW50KDApCi17Ci0gICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRo
aXMpKSk7Ci0gICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywg
MikpKTsKLSAgICAKLSAgICBtX2Rpc3RhbmNlR2FpbiA9IEF1ZGlvR2Fpbjo6Y3JlYXRlKCJkaXN0
YW5jZUdhaW4iLCAxLjAsIDAuMCwgMS4wKTsKLSAgICBtX2NvbmVHYWluID0gQXVkaW9HYWluOjpj
cmVhdGUoImNvbmVHYWluIiwgMS4wLCAwLjAsIDEuMCk7Ci0KLSAgICBtX3Bvc2l0aW9uID0gRmxv
YXRQb2ludDNEKDAsIDAsIDApOwotICAgIG1fb3JpZW50YXRpb24gPSBGbG9hdFBvaW50M0QoMSwg
MCwgMCk7Ci0gICAgbV92ZWxvY2l0eSA9IEZsb2F0UG9pbnQzRCgwLCAwLCAwKTsKLSAgICAKLSAg
ICBzZXROb2RlVHlwZShOb2RlVHlwZVBhbm5lcik7Ci0KLSAgICBpbml0aWFsaXplKCk7Ci19Ci0K
LUF1ZGlvUGFubmVyTm9kZTo6fkF1ZGlvUGFubmVyTm9kZSgpCi17Ci0gICAgdW5pbml0aWFsaXpl
KCk7Ci19Ci0KLXZvaWQgQXVkaW9QYW5uZXJOb2RlOjpwdWxsSW5wdXRzKHNpemVfdCBmcmFtZXNU
b1Byb2Nlc3MpCi17Ci0gICAgLy8gV2Ugb3ZlcnJpZGUgcHVsbElucHV0cygpLCBzbyB3ZSBjYW4g
ZGV0ZWN0IG5ldyBBdWRpb1NvdXJjZU5vZGVzIHdoaWNoIGhhdmUgY29ubmVjdGVkIHRvIHVzIHdo
ZW4gbmV3IGNvbm5lY3Rpb25zIGFyZSBtYWRlLgotICAgIC8vIFRoZXNlIEF1ZGlvU291cmNlTm9k
ZXMgbmVlZCB0byBiZSBtYWRlIGF3YXJlIG9mIG91ciBleGlzdGVuY2UgaW4gb3JkZXIgdG8gaGFu
ZGxlIGRvcHBsZXIgc2hpZnQgcGl0Y2ggY2hhbmdlcy4KLSAgICBpZiAobV9jb25uZWN0aW9uQ291
bnQgIT0gY29udGV4dCgpLT5jb25uZWN0aW9uQ291bnQoKSkgewotICAgICAgICBtX2Nvbm5lY3Rp
b25Db3VudCA9IGNvbnRleHQoKS0+Y29ubmVjdGlvbkNvdW50KCk7Ci0KLSAgICAgICAgLy8gUmVj
dXJzaXZlbHkgZ28gdGhyb3VnaCBhbGwgbm9kZXMgY29ubmVjdGVkIHRvIHVzLgotICAgICAgICBu
b3RpZnlBdWRpb1NvdXJjZXNDb25uZWN0ZWRUb05vZGUodGhpcyk7Ci0gICAgfQotICAgIAotICAg
IEF1ZGlvTm9kZTo6cHVsbElucHV0cyhmcmFtZXNUb1Byb2Nlc3MpOwotfQotCi12b2lkIEF1ZGlv
UGFubmVyTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIEF1ZGlv
QnVzKiBkZXN0aW5hdGlvbiA9IG91dHB1dCgwKS0+YnVzKCk7Ci0KLSAgICBpZiAoIWlzSW5pdGlh
bGl6ZWQoKSB8fCAhaW5wdXQoMCktPmlzQ29ubmVjdGVkKCkgfHwgIW1fcGFubmVyLmdldCgpKSB7
Ci0gICAgICAgIGRlc3RpbmF0aW9uLT56ZXJvKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBBdWRpb0J1cyogc291cmNlID0gaW5wdXQoMCktPmJ1cygpOwotCi0gICAgaWYgKCFzb3Vy
Y2UpIHsKLSAgICAgICAgZGVzdGluYXRpb24tPnplcm8oKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIEFwcGx5IHRoZSBwYW5uaW5nIGVmZmVjdC4KLSAgICBkb3VibGUgYXppbXV0
aDsKLSAgICBkb3VibGUgZWxldmF0aW9uOwotICAgIGdldEF6aW11dGhFbGV2YXRpb24oJmF6aW11
dGgsICZlbGV2YXRpb24pOwotICAgIG1fcGFubmVyLT5wYW4oYXppbXV0aCwgZWxldmF0aW9uLCBz
b3VyY2UsIGRlc3RpbmF0aW9uLCBmcmFtZXNUb1Byb2Nlc3MpOwotCi0gICAgLy8gR2V0IHRoZSBk
aXN0YW5jZSBhbmQgY29uZSBnYWluLgotICAgIGRvdWJsZSB0b3RhbEdhaW4gPSBkaXN0YW5jZUNv
bmVHYWluKCk7Ci0KLSAgICAvLyBTbmFwIHRvIGRlc2lyZWQgZ2FpbiBhdCB0aGUgYmVnaW5uaW5n
LgotICAgIGlmIChtX2xhc3RHYWluID09IC0xLjApCi0gICAgICAgIG1fbGFzdEdhaW4gPSB0b3Rh
bEdhaW47Ci0gICAgICAgIAotICAgIC8vIEFwcGx5IGdhaW4gaW4tcGxhY2Ugd2l0aCBkZS16aXBw
ZXJpbmcuCi0gICAgZGVzdGluYXRpb24tPmNvcHlXaXRoR2FpbkZyb20oKmRlc3RpbmF0aW9uLCAm
bV9sYXN0R2FpbiwgdG90YWxHYWluKTsKLX0KLQotdm9pZCBBdWRpb1Bhbm5lck5vZGU6OnJlc2V0
KCkKLXsKLSAgICBtX2xhc3RHYWluID0gLTEuMDsgLy8gZm9yY2UgdG8gc25hcCB0byBpbml0aWFs
IGdhaW4KLSAgICBpZiAobV9wYW5uZXIuZ2V0KCkpCi0gICAgICAgIG1fcGFubmVyLT5yZXNldCgp
OwotfQotCi12b2lkIEF1ZGlvUGFubmVyTm9kZTo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgaWYgKGlz
SW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBtX3Bhbm5lciA9
IFBhbm5lcjo6Y3JlYXRlKG1fcGFubmluZ01vZGVsLCBzYW1wbGVSYXRlKCkpOwotCi0gICAgQXVk
aW9Ob2RlOjppbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgQXVkaW9QYW5uZXJOb2RlOjp1bmluaXRp
YWxpemUoKQotewotICAgIGlmICghaXNJbml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgICAgIAotICAgIG1fcGFubmVyLmNsZWFyKCk7Ci0gICAgQXVkaW9Ob2RlOjp1bmluaXRpYWxp
emUoKTsKLX0KLQotQXVkaW9MaXN0ZW5lciogQXVkaW9QYW5uZXJOb2RlOjpsaXN0ZW5lcigpCi17
Ci0gICAgcmV0dXJuIGNvbnRleHQoKS0+bGlzdGVuZXIoKTsKLX0KLQotdm9pZCBBdWRpb1Bhbm5l
ck5vZGU6OnNldFBhbm5pbmdNb2RlbCh1bnNpZ25lZCBzaG9ydCBtb2RlbCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgc3dpdGNoIChtb2RlbCkgewotICAgIGNhc2UgRVFVQUxQT1dFUjoKLSAg
ICBjYXNlIEhSVEY6Ci0gICAgICAgIGlmICghbV9wYW5uZXIuZ2V0KCkgfHwgbW9kZWwgIT0gbV9w
YW5uaW5nTW9kZWwpIHsKLSAgICAgICAgICAgIE93blB0cjxQYW5uZXI+IG5ld1Bhbm5lciA9IFBh
bm5lcjo6Y3JlYXRlKG1vZGVsLCBzYW1wbGVSYXRlKCkpOwotICAgICAgICAgICAgbV9wYW5uZXIg
PSBuZXdQYW5uZXIucmVsZWFzZSgpOwotICAgICAgICAgICAgbV9wYW5uaW5nTW9kZWwgPSBtb2Rl
bDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNPVU5ERklFTEQ6Ci0gICAg
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgc291bmQgZmllbGQgbW9kZWwuIFNlZSAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczNjcuCi0gICAgICAgIC8vIEZvciBu
b3csIGZhbGwgdGhyb3VnaCB0byB0aHJvdyBhbiBleGNlcHRpb24uCi0gICAgZGVmYXVsdDoKLSAg
ICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQot
Ci12b2lkIEF1ZGlvUGFubmVyTm9kZTo6Z2V0QXppbXV0aEVsZXZhdGlvbihkb3VibGUqIG91dEF6
aW11dGgsIGRvdWJsZSogb3V0RWxldmF0aW9uKQotewotICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQg
Y2FjaGUgYXppbXV0aCBhbmQgZWxldmF0aW9uIChpZiBwb3NzaWJsZSksIHNvIHdlIG9ubHkgcmUt
Y2FsY3VsYXRlIGlmIGEgY2hhbmdlIGhhcyBiZWVuIG1hZGUuCi0KLSAgICBkb3VibGUgYXppbXV0
aCA9IDAuMDsKLQotICAgIC8vIENhbGN1bGF0ZSB0aGUgc291cmNlLWxpc3RlbmVyIHZlY3Rvcgot
ICAgIEZsb2F0UG9pbnQzRCBsaXN0ZW5lclBvc2l0aW9uID0gbGlzdGVuZXIoKS0+cG9zaXRpb24o
KTsKLSAgICBGbG9hdFBvaW50M0Qgc291cmNlTGlzdGVuZXIgPSBtX3Bvc2l0aW9uIC0gbGlzdGVu
ZXJQb3NpdGlvbjsKLQotICAgIGlmIChzb3VyY2VMaXN0ZW5lci5pc1plcm8oKSkgewotICAgICAg
ICAvLyBkZWdlbmVyYXRlIGNhc2UgaWYgc291cmNlIGFuZCBsaXN0ZW5lciBhcmUgYXQgdGhlIHNh
bWUgcG9pbnQKLSAgICAgICAgKm91dEF6aW11dGggPSAwLjA7Ci0gICAgICAgICpvdXRFbGV2YXRp
b24gPSAwLjA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzb3VyY2VMaXN0ZW5lci5u
b3JtYWxpemUoKTsKLQotICAgIC8vIEFsaWduIGF4ZXMKLSAgICBGbG9hdFBvaW50M0QgbGlzdGVu
ZXJGcm9udCA9IGxpc3RlbmVyKCktPm9yaWVudGF0aW9uKCk7Ci0gICAgRmxvYXRQb2ludDNEIGxp
c3RlbmVyVXAgPSBsaXN0ZW5lcigpLT51cFZlY3RvcigpOwotICAgIEZsb2F0UG9pbnQzRCBsaXN0
ZW5lclJpZ2h0ID0gbGlzdGVuZXJGcm9udC5jcm9zcyhsaXN0ZW5lclVwKTsKLSAgICBsaXN0ZW5l
clJpZ2h0Lm5vcm1hbGl6ZSgpOwotCi0gICAgRmxvYXRQb2ludDNEIGxpc3RlbmVyRnJvbnROb3Jt
ID0gbGlzdGVuZXJGcm9udDsKLSAgICBsaXN0ZW5lckZyb250Tm9ybS5ub3JtYWxpemUoKTsKLQot
ICAgIEZsb2F0UG9pbnQzRCB1cCA9IGxpc3RlbmVyUmlnaHQuY3Jvc3MobGlzdGVuZXJGcm9udE5v
cm0pOwotCi0gICAgZmxvYXQgdXBQcm9qZWN0aW9uID0gc291cmNlTGlzdGVuZXIuZG90KHVwKTsK
LQotICAgIEZsb2F0UG9pbnQzRCBwcm9qZWN0ZWRTb3VyY2UgPSBzb3VyY2VMaXN0ZW5lciAtIHVw
UHJvamVjdGlvbiAqIHVwOwotICAgIHByb2plY3RlZFNvdXJjZS5ub3JtYWxpemUoKTsKLQotICAg
IGF6aW11dGggPSAxODAuMCAqIGFjb3MocHJvamVjdGVkU291cmNlLmRvdChsaXN0ZW5lclJpZ2h0
KSkgLyBwaURvdWJsZTsKLSAgICBmaXhOQU5zKGF6aW11dGgpOyAvLyBhdm9pZCBpbGxlZ2FsIHZh
bHVlcwotCi0gICAgLy8gU291cmNlICBpbiBmcm9udCBvciBiZWhpbmQgdGhlIGxpc3RlbmVyCi0g
ICAgZG91YmxlIGZyb250QmFjayA9IHByb2plY3RlZFNvdXJjZS5kb3QobGlzdGVuZXJGcm9udE5v
cm0pOwotICAgIGlmIChmcm9udEJhY2sgPCAwLjApCi0gICAgICAgIGF6aW11dGggPSAzNjAuMCAt
IGF6aW11dGg7Ci0KLSAgICAvLyBNYWtlIGF6aW11dGggcmVsYXRpdmUgdG8gImZyb250IiBhbmQg
bm90ICJyaWdodCIgbGlzdGVuZXIgdmVjdG9yCi0gICAgaWYgKChhemltdXRoID49IDAuMCkgJiYg
KGF6aW11dGggPD0gMjcwLjApKQotICAgICAgICBhemltdXRoID0gOTAuMCAtIGF6aW11dGg7Ci0g
ICAgZWxzZQotICAgICAgICBhemltdXRoID0gNDUwLjAgLSBhemltdXRoOwotCi0gICAgLy8gRWxl
dmF0aW9uCi0gICAgZG91YmxlIGVsZXZhdGlvbiA9IDkwLjAgLSAxODAuMCAqIGFjb3Moc291cmNl
TGlzdGVuZXIuZG90KHVwKSkgLyBwaURvdWJsZTsKLSAgICBmaXhOQU5zKGVsZXZhdGlvbik7IC8v
IGF2b2lkIGlsbGVnYWwgdmFsdWVzCi0KLSAgICBpZiAoZWxldmF0aW9uID4gOTAuMCkKLSAgICAg
ICAgZWxldmF0aW9uID0gMTgwLjAgLSBlbGV2YXRpb247Ci0gICAgZWxzZSBpZiAoZWxldmF0aW9u
IDwgLTkwLjApCi0gICAgICAgIGVsZXZhdGlvbiA9IC0xODAuMCAtIGVsZXZhdGlvbjsKLQotICAg
IGlmIChvdXRBemltdXRoKQotICAgICAgICAqb3V0QXppbXV0aCA9IGF6aW11dGg7Ci0gICAgaWYg
KG91dEVsZXZhdGlvbikKLSAgICAgICAgKm91dEVsZXZhdGlvbiA9IGVsZXZhdGlvbjsKLX0KLQot
ZmxvYXQgQXVkaW9QYW5uZXJOb2RlOjpkb3BwbGVyUmF0ZSgpCi17Ci0gICAgZG91YmxlIGRvcHBs
ZXJTaGlmdCA9IDEuMDsKLQotICAgIC8vIEZJWE1FOiBvcHRpbWl6ZSBmb3IgY2FzZSB3aGVuIG5l
aXRoZXIgc291cmNlIG5vciBsaXN0ZW5lciBoYXMgY2hhbmdlZC4uLgotICAgIGRvdWJsZSBkb3Bw
bGVyRmFjdG9yID0gbGlzdGVuZXIoKS0+ZG9wcGxlckZhY3RvcigpOwotCi0gICAgaWYgKGRvcHBs
ZXJGYWN0b3IgPiAwLjApIHsKLSAgICAgICAgZG91YmxlIHNwZWVkT2ZTb3VuZCA9IGxpc3RlbmVy
KCktPnNwZWVkT2ZTb3VuZCgpOwotCi0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQzRCAmc291cmNl
VmVsb2NpdHkgPSBtX3ZlbG9jaXR5OwotICAgICAgICBjb25zdCBGbG9hdFBvaW50M0QgJmxpc3Rl
bmVyVmVsb2NpdHkgPSBsaXN0ZW5lcigpLT52ZWxvY2l0eSgpOwotCi0gICAgICAgIC8vIERvbid0
IGJvdGhlciBpZiBib3RoIHNvdXJjZSBhbmQgbGlzdGVuZXIgaGF2ZSBubyB2ZWxvY2l0eQotICAg
ICAgICBib29sIHNvdXJjZUhhc1ZlbG9jaXR5ID0gIXNvdXJjZVZlbG9jaXR5LmlzWmVybygpOwot
ICAgICAgICBib29sIGxpc3RlbmVySGFzVmVsb2NpdHkgPSAhbGlzdGVuZXJWZWxvY2l0eS5pc1pl
cm8oKTsKLQotICAgICAgICBpZiAoc291cmNlSGFzVmVsb2NpdHkgfHwgbGlzdGVuZXJIYXNWZWxv
Y2l0eSkgewotICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBzb3VyY2UgdG8gbGlzdGVuZXIg
dmVjdG9yCi0gICAgICAgICAgICBGbG9hdFBvaW50M0QgbGlzdGVuZXJQb3NpdGlvbiA9IGxpc3Rl
bmVyKCktPnBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50M0Qgc291cmNlVG9MaXN0
ZW5lciA9IG1fcG9zaXRpb24gLSBsaXN0ZW5lclBvc2l0aW9uOwotCi0gICAgICAgICAgICBkb3Vi
bGUgc291cmNlTGlzdGVuZXJNYWduaXR1ZGUgPSBzb3VyY2VUb0xpc3RlbmVyLmxlbmd0aCgpOwot
Ci0gICAgICAgICAgICBkb3VibGUgbGlzdGVuZXJQcm9qZWN0aW9uID0gc291cmNlVG9MaXN0ZW5l
ci5kb3QobGlzdGVuZXJWZWxvY2l0eSkgLyBzb3VyY2VMaXN0ZW5lck1hZ25pdHVkZTsKLSAgICAg
ICAgICAgIGRvdWJsZSBzb3VyY2VQcm9qZWN0aW9uID0gc291cmNlVG9MaXN0ZW5lci5kb3Qoc291
cmNlVmVsb2NpdHkpIC8gc291cmNlTGlzdGVuZXJNYWduaXR1ZGU7Ci0KLSAgICAgICAgICAgIGxp
c3RlbmVyUHJvamVjdGlvbiA9IC1saXN0ZW5lclByb2plY3Rpb247Ci0gICAgICAgICAgICBzb3Vy
Y2VQcm9qZWN0aW9uID0gLXNvdXJjZVByb2plY3Rpb247Ci0KLSAgICAgICAgICAgIGRvdWJsZSBz
Y2FsZWRTcGVlZE9mU291bmQgPSBzcGVlZE9mU291bmQgLyBkb3BwbGVyRmFjdG9yOwotICAgICAg
ICAgICAgbGlzdGVuZXJQcm9qZWN0aW9uID0gbWluKGxpc3RlbmVyUHJvamVjdGlvbiwgc2NhbGVk
U3BlZWRPZlNvdW5kKTsKLSAgICAgICAgICAgIHNvdXJjZVByb2plY3Rpb24gPSBtaW4oc291cmNl
UHJvamVjdGlvbiwgc2NhbGVkU3BlZWRPZlNvdW5kKTsKLQotICAgICAgICAgICAgZG9wcGxlclNo
aWZ0ID0gKChzcGVlZE9mU291bmQgLSBkb3BwbGVyRmFjdG9yICogbGlzdGVuZXJQcm9qZWN0aW9u
KSAvIChzcGVlZE9mU291bmQgLSBkb3BwbGVyRmFjdG9yICogc291cmNlUHJvamVjdGlvbikpOwot
ICAgICAgICAgICAgZml4TkFOcyhkb3BwbGVyU2hpZnQpOyAvLyBhdm9pZCBpbGxlZ2FsIHZhbHVl
cwotCi0gICAgICAgICAgICAvLyBMaW1pdCB0aGUgcGl0Y2ggc2hpZnRpbmcgdG8gNCBvY3RhdmVz
IHVwIGFuZCAzIG9jdGF2ZXMgZG93bi4KLSAgICAgICAgICAgIGlmIChkb3BwbGVyU2hpZnQgPiAx
Ni4wKQotICAgICAgICAgICAgICAgIGRvcHBsZXJTaGlmdCA9IDE2LjA7Ci0gICAgICAgICAgICBl
bHNlIGlmIChkb3BwbGVyU2hpZnQgPCAwLjEyNSkKLSAgICAgICAgICAgICAgICBkb3BwbGVyU2hp
ZnQgPSAwLjEyNTsgICAKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxmbG9hdD4oZG9wcGxlclNoaWZ0KTsKLX0KLQotZmxvYXQgQXVkaW9QYW5uZXJOb2RlOjpkaXN0
YW5jZUNvbmVHYWluKCkKLXsKLSAgICBGbG9hdFBvaW50M0QgbGlzdGVuZXJQb3NpdGlvbiA9IGxp
c3RlbmVyKCktPnBvc2l0aW9uKCk7Ci0KLSAgICBkb3VibGUgbGlzdGVuZXJEaXN0YW5jZSA9IG1f
cG9zaXRpb24uZGlzdGFuY2VUbyhsaXN0ZW5lclBvc2l0aW9uKTsKLSAgICBkb3VibGUgZGlzdGFu
Y2VHYWluID0gbV9kaXN0YW5jZUVmZmVjdC5nYWluKGxpc3RlbmVyRGlzdGFuY2UpOwotICAgIAot
ICAgIG1fZGlzdGFuY2VHYWluLT5zZXRWYWx1ZShzdGF0aWNfY2FzdDxmbG9hdD4oZGlzdGFuY2VH
YWluKSk7Ci0KLSAgICAvLyBGSVhNRTogY291bGQgb3B0aW1pemUgYnkgY2FjaGluZyBjb25lR2Fp
bgotICAgIGRvdWJsZSBjb25lR2FpbiA9IG1fY29uZUVmZmVjdC5nYWluKG1fcG9zaXRpb24sIG1f
b3JpZW50YXRpb24sIGxpc3RlbmVyUG9zaXRpb24pOwotICAgIAotICAgIG1fY29uZUdhaW4tPnNl
dFZhbHVlKHN0YXRpY19jYXN0PGZsb2F0Pihjb25lR2FpbikpOwotCi0gICAgcmV0dXJuIGZsb2F0
KGRpc3RhbmNlR2FpbiAqIGNvbmVHYWluKTsKLX0KLQotdm9pZCBBdWRpb1Bhbm5lck5vZGU6Om5v
dGlmeUF1ZGlvU291cmNlc0Nvbm5lY3RlZFRvTm9kZShBdWRpb05vZGUqIG5vZGUpCi17Ci0gICAg
QVNTRVJUKG5vZGUpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAK
LSAgICAvLyBGaXJzdCBjaGVjayBpZiB0aGlzIG5vZGUgaXMgYW4gQXVkaW9CdWZmZXJTb3VyY2VO
b2RlLiAgSWYgc28sIGxldCBpdCBrbm93IGFib3V0IHVzIHNvIHRoYXQgZG9wcGxlciBzaGlmdCBw
aXRjaCBjYW4gYmUgdGFrZW4gaW50byBhY2NvdW50LgotICAgIGlmIChub2RlLT5ub2RlVHlwZSgp
ID09IE5vZGVUeXBlQXVkaW9CdWZmZXJTb3VyY2UpIHsKLSAgICAgICAgQXVkaW9CdWZmZXJTb3Vy
Y2VOb2RlKiBidWZmZXJTb3VyY2VOb2RlID0gcmVpbnRlcnByZXRfY2FzdDxBdWRpb0J1ZmZlclNv
dXJjZU5vZGUqPihub2RlKTsKLSAgICAgICAgYnVmZmVyU291cmNlTm9kZS0+c2V0UGFubmVyTm9k
ZSh0aGlzKTsKLSAgICB9IGVsc2UgeyAgICAKLSAgICAgICAgLy8gR28gdGhyb3VnaCBhbGwgaW5w
dXRzIHRvIHRoaXMgbm9kZS4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGUt
Pm51bWJlck9mSW5wdXRzKCk7ICsraSkgewotICAgICAgICAgICAgQXVkaW9Ob2RlSW5wdXQqIGlu
cHV0ID0gbm9kZS0+aW5wdXQoaSk7Ci0KLSAgICAgICAgICAgIC8vIEZvciBlYWNoIGlucHV0LCBn
byB0aHJvdWdoIGFsbCBvZiBpdHMgY29ubmVjdGlvbnMsIGxvb2tpbmcgZm9yIEF1ZGlvQnVmZmVy
U291cmNlTm9kZXMuCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgaW5wdXQt
Pm51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAg
QXVkaW9Ob2RlT3V0cHV0KiBjb25uZWN0ZWRPdXRwdXQgPSBpbnB1dC0+cmVuZGVyaW5nT3V0cHV0
KGopOwotICAgICAgICAgICAgICAgIEF1ZGlvTm9kZSogY29ubmVjdGVkTm9kZSA9IGNvbm5lY3Rl
ZE91dHB1dC0+bm9kZSgpOwotICAgICAgICAgICAgICAgIG5vdGlmeUF1ZGlvU291cmNlc0Nvbm5l
Y3RlZFRvTm9kZShjb25uZWN0ZWROb2RlKTsgLy8gcmVjdXJzZQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
TkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5u
ZXJOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5u
ZXJOb2RlLmgJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1
ZGlvUGFubmVyTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1OSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBBdWRpb1Bhbm5lck5vZGVfaAotI2RlZmluZSBBdWRpb1Bhbm5lck5vZGVf
aAotCi0jaW5jbHVkZSAiQXVkaW9CdXMuaCIKLSNpbmNsdWRlICJBdWRpb0dhaW4uaCIKLSNpbmNs
dWRlICJBdWRpb0xpc3RlbmVyLmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCi0jaW5jbHVkZSAi
Q29uZS5oIgotI2luY2x1ZGUgIkRpc3RhbmNlLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludDNELmgi
Ci0jaW5jbHVkZSAiUGFubmVyLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLS8vIEF1ZGlvUGFubmVyTm9kZSBpcyBhbiBBdWRpb05vZGUgd2l0aCBv
bmUgaW5wdXQgYW5kIG9uZSBvdXRwdXQuCi0vLyBJdCBwb3NpdGlvbnMgYSBzb3VuZCBpbiAzRCBz
cGFjZSwgd2l0aCB0aGUgZXhhY3QgZWZmZWN0IGRlcGVuZGVudCBvbiB0aGUgcGFubmluZyBtb2Rl
bC4KLS8vIEl0IGhhcyBhIHBvc2l0aW9uIGFuZCBhbiBvcmllbnRhdGlvbiBpbiAzRCBzcGFjZSB3
aGljaCBpcyByZWxhdGl2ZSB0byB0aGUgcG9zaXRpb24gYW5kIG9yaWVudGF0aW9uIG9mIHRoZSBj
b250ZXh0J3MgQXVkaW9MaXN0ZW5lci4KLS8vIEEgZGlzdGFuY2UgZWZmZWN0IHdpbGwgYXR0ZW51
YXRlIHRoZSBnYWluIGFzIHRoZSBwb3NpdGlvbiBtb3ZlcyBhd2F5IGZyb20gdGhlIGxpc3RlbmVy
LgotLy8gQSBjb25lIGVmZmVjdCB3aWxsIGF0dGVudWF0ZSB0aGUgZ2FpbiBhcyB0aGUgb3JpZW50
YXRpb24gbW92ZXMgYXdheSBmcm9tIHRoZSBsaXN0ZW5lci4KLS8vIEFsbCBvZiB0aGVzZSBlZmZl
Y3RzIGZvbGxvdyB0aGUgT3BlbkFMIHNwZWNpZmljYXRpb24gdmVyeSBjbG9zZWx5LgotCi1jbGFz
cyBBdWRpb1Bhbm5lck5vZGUgOiBwdWJsaWMgQXVkaW9Ob2RlIHsKLXB1YmxpYzoKLSAgICAvLyBU
aGVzZSBtdXN0IGJlIGRlZmluZWQgYXMgaW4gdGhlIC5pZGwgZmlsZSBhbmQgbXVzdCBtYXRjaCB0
aG9zZSBpbiB0aGUgUGFubmVyIGNsYXNzLgotICAgIGVudW0gewotICAgICAgICBFUVVBTFBPV0VS
ID0gMCwKLSAgICAgICAgSFJURiA9IDEsCi0gICAgICAgIFNPVU5ERklFTEQgPSAyLAotICAgIH07
Ci0KLSAgICAvLyBUaGVzZSBtdXN0IGJlIGRlZmluZWQgYXMgaW4gdGhlIC5pZGwgZmlsZSBhbmQg
bXVzdCBtYXRjaCB0aG9zZQotICAgIC8vIGluIHRoZSBEaXN0YW5jZUVmZmVjdCBjbGFzcy4KLSAg
ICBlbnVtIHsKLSAgICAgICAgTElORUFSX0RJU1RBTkNFID0gMCwKLSAgICAgICAgSU5WRVJTRV9E
SVNUQU5DRSA9IDEsCi0gICAgICAgIEVYUE9ORU5USUFMX0RJU1RBTkNFID0gMiwKLSAgICB9Owot
ICAgIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlvUGFubmVyTm9kZT4gY3JlYXRlKEF1ZGlv
Q29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQXVkaW9QYW5uZXJOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpKTsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIH5BdWRpb1Bhbm5lck5vZGUoKTsKLQotICAgIC8vIEF1ZGlvTm9k
ZQotICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwotICAg
IHZpcnR1YWwgdm9pZCBwdWxsSW5wdXRzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgIHZp
cnR1YWwgdm9pZCByZXNldCgpOwotICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKCk7Ci0gICAg
dmlydHVhbCB2b2lkIHVuaW5pdGlhbGl6ZSgpOwotCi0gICAgLy8gTGlzdGVuZXIKLSAgICBBdWRp
b0xpc3RlbmVyKiBsaXN0ZW5lcigpOwotCi0gICAgLy8gUGFubmluZyBtb2RlbAotICAgIHVuc2ln
bmVkIHNob3J0IHBhbm5pbmdNb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFubmluZ01vZGVsOyB9
Ci0gICAgdm9pZCBzZXRQYW5uaW5nTW9kZWwodW5zaWduZWQgc2hvcnQsIEV4Y2VwdGlvbkNvZGUm
KTsKLQotICAgIC8vIFBvc2l0aW9uCi0gICAgRmxvYXRQb2ludDNEIHBvc2l0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9wb3NpdGlvbjsgfQotICAgIHZvaWQgc2V0UG9zaXRpb24oZmxvYXQgeCwgZmxv
YXQgeSwgZmxvYXQgeikgeyBtX3Bvc2l0aW9uID0gRmxvYXRQb2ludDNEKHgsIHksIHopOyB9Ci0K
LSAgICAvLyBPcmllbnRhdGlvbgotICAgIEZsb2F0UG9pbnQzRCBvcmllbnRhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KLSAgICB2b2lkIHNldE9yaWVudGF0aW9uKGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IHopIHsgbV9vcmllbnRhdGlvbiA9IEZsb2F0UG9pbnQzRCh4LCB5LCB6
KTsgfQotCi0gICAgLy8gVmVsb2NpdHkKLSAgICBGbG9hdFBvaW50M0QgdmVsb2NpdHkoKSBjb25z
dCB7IHJldHVybiBtX3ZlbG9jaXR5OyB9Ci0gICAgdm9pZCBzZXRWZWxvY2l0eShmbG9hdCB4LCBm
bG9hdCB5LCBmbG9hdCB6KSB7IG1fdmVsb2NpdHkgPSBGbG9hdFBvaW50M0QoeCwgeSwgeik7IH0K
LQotICAgIC8vIERpc3RhbmNlIHBhcmFtZXRlcnMKLSAgICB1bnNpZ25lZCBzaG9ydCBkaXN0YW5j
ZU1vZGVsKCkgeyByZXR1cm4gbV9kaXN0YW5jZUVmZmVjdC5tb2RlbCgpOyB9Ci0gICAgdm9pZCBz
ZXREaXN0YW5jZU1vZGVsKHVuc2lnbmVkIHNob3J0IG1vZGVsKSB7IG1fZGlzdGFuY2VFZmZlY3Qu
c2V0TW9kZWwoc3RhdGljX2Nhc3Q8RGlzdGFuY2VFZmZlY3Q6Ok1vZGVsVHlwZT4obW9kZWwpLCB0
cnVlKTsgfQotICAgIAotICAgIGZsb2F0IHJlZkRpc3RhbmNlKCkgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG1fZGlzdGFuY2VFZmZlY3QucmVmRGlzdGFuY2UoKSk7IH0KLSAgICB2b2lkIHNl
dFJlZkRpc3RhbmNlKGZsb2F0IHJlZkRpc3RhbmNlKSB7IG1fZGlzdGFuY2VFZmZlY3Quc2V0UmVm
RGlzdGFuY2UocmVmRGlzdGFuY2UpOyB9Ci0KLSAgICBmbG9hdCBtYXhEaXN0YW5jZSgpIHsgcmV0
dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX2Rpc3RhbmNlRWZmZWN0Lm1heERpc3RhbmNlKCkpOyB9
Ci0gICAgdm9pZCBzZXRNYXhEaXN0YW5jZShmbG9hdCBtYXhEaXN0YW5jZSkgeyBtX2Rpc3RhbmNl
RWZmZWN0LnNldE1heERpc3RhbmNlKG1heERpc3RhbmNlKTsgfQotCi0gICAgZmxvYXQgcm9sbG9m
ZkZhY3RvcigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX2Rpc3RhbmNlRWZmZWN0LnJv
bGxvZmZGYWN0b3IoKSk7IH0KLSAgICB2b2lkIHNldFJvbGxvZmZGYWN0b3IoZmxvYXQgcm9sbG9m
ZkZhY3RvcikgeyBtX2Rpc3RhbmNlRWZmZWN0LnNldFJvbGxvZmZGYWN0b3Iocm9sbG9mZkZhY3Rv
cik7IH0KLQotICAgIC8vIFNvdW5kIGNvbmVzIC0gYW5nbGVzIGluIGRlZ3JlZXMKLSAgICBmbG9h
dCBjb25lSW5uZXJBbmdsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX2Nv
bmVFZmZlY3QuaW5uZXJBbmdsZSgpKTsgfQotICAgIHZvaWQgc2V0Q29uZUlubmVyQW5nbGUoZmxv
YXQgYW5nbGUpIHsgbV9jb25lRWZmZWN0LnNldElubmVyQW5nbGUoYW5nbGUpOyB9Ci0KLSAgICBm
bG9hdCBjb25lT3V0ZXJBbmdsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Piht
X2NvbmVFZmZlY3Qub3V0ZXJBbmdsZSgpKTsgfQotICAgIHZvaWQgc2V0Q29uZU91dGVyQW5nbGUo
ZmxvYXQgYW5nbGUpIHsgbV9jb25lRWZmZWN0LnNldE91dGVyQW5nbGUoYW5nbGUpOyB9Ci0KLSAg
ICBmbG9hdCBjb25lT3V0ZXJHYWluKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG1fY29uZUVmZmVjdC5vdXRlckdhaW4oKSk7IH0KLSAgICB2b2lkIHNldENvbmVPdXRlckdhaW4o
ZmxvYXQgYW5nbGUpIHsgbV9jb25lRWZmZWN0LnNldE91dGVyR2FpbihhbmdsZSk7IH0KLQotICAg
IHZvaWQgZ2V0QXppbXV0aEVsZXZhdGlvbihkb3VibGUqIG91dEF6aW11dGgsIGRvdWJsZSogb3V0
RWxldmF0aW9uKTsKLSAgICBmbG9hdCBkb3BwbGVyUmF0ZSgpOwotCi0gICAgLy8gQWNjZXNzb3Jz
IGZvciBkeW5hbWljYWxseSBjYWxjdWxhdGVkIGdhaW4gdmFsdWVzLgotICAgIEF1ZGlvR2Fpbiog
ZGlzdGFuY2VHYWluKCkgeyByZXR1cm4gbV9kaXN0YW5jZUdhaW4uZ2V0KCk7IH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgQXVkaW9HYWluKiBjb25lR2Fpbigp
IHsgcmV0dXJuIG1fY29uZUdhaW4uZ2V0KCk7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCi0KLSAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIG1fcGFubmVyID8gbV9wYW5uZXItPnRhaWxUaW1lKCkgOiAwOyB9Ci0gICAg
dmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3Bh
bm5lciA/IG1fcGFubmVyLT5sYXRlbmN5VGltZSgpIDogMDsgfQotCi1wcml2YXRlOgotICAgIEF1
ZGlvUGFubmVyTm9kZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKLQotICAgIC8v
IFJldHVybnMgdGhlIGNvbWJpbmVkIGRpc3RhbmNlIGFuZCBjb25lIGdhaW4gYXR0ZW51YXRpb24u
Ci0gICAgZmxvYXQgZGlzdGFuY2VDb25lR2FpbigpOwotCi0gICAgLy8gTm90aWZpZXMgYW55IEF1
ZGlvQnVmZmVyU291cmNlTm9kZXMgY29ubmVjdGVkIHRvIHVzIGVpdGhlciBkaXJlY3RseSBvciBp
bmRpcmVjdGx5IGFib3V0IG91ciBleGlzdGVuY2UuCi0gICAgLy8gVGhpcyBpcyBpbiBvcmRlciB0
byBoYW5kbGUgdGhlIHBpdGNoIGNoYW5nZSBuZWNlc3NhcnkgZm9yIHRoZSBkb3BwbGVyIHNoaWZ0
LgotICAgIHZvaWQgbm90aWZ5QXVkaW9Tb3VyY2VzQ29ubmVjdGVkVG9Ob2RlKEF1ZGlvTm9kZSop
OwotCi0gICAgT3duUHRyPFBhbm5lcj4gbV9wYW5uZXI7Ci0gICAgdW5zaWduZWQgbV9wYW5uaW5n
TW9kZWw7Ci0KLSAgICBGbG9hdFBvaW50M0QgbV9wb3NpdGlvbjsKLSAgICBGbG9hdFBvaW50M0Qg
bV9vcmllbnRhdGlvbjsKLSAgICBGbG9hdFBvaW50M0QgbV92ZWxvY2l0eTsKLQotICAgIC8vIEdh
aW4KLSAgICBSZWZQdHI8QXVkaW9HYWluPiBtX2Rpc3RhbmNlR2FpbjsKLSAgICBSZWZQdHI8QXVk
aW9HYWluPiBtX2NvbmVHYWluOwotICAgIERpc3RhbmNlRWZmZWN0IG1fZGlzdGFuY2VFZmZlY3Q7
Ci0gICAgQ29uZUVmZmVjdCBtX2NvbmVFZmZlY3Q7Ci0gICAgZmxvYXQgbV9sYXN0R2FpbjsKLQot
ICAgIHVuc2lnbmVkIG1fY29ubmVjdGlvbkNvdW50OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gQXVkaW9QYW5uZXJOb2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbAkocmV2aXNpb24gMTExMjA4KQorKysgU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbAkod29ya2luZyBjb3B5KQpA
QCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGF1ZGlvIHsKLSAgICBpbnRlcmZh
Y2UgWwotICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCi0gICAgICAgIEpTR2VuZXJhdGVU
b0pTT2JqZWN0Ci0gICAgXSBBdWRpb1Bhbm5lck5vZGUgOiBBdWRpb05vZGUgewotICAgICAgICAv
LyBQYW5uaW5nIG1vZGVsCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEVRVUFMUE9XRVIg
PSAwOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBIUlRGID0gMTsKLSAgICAgICAgY29u
c3QgdW5zaWduZWQgc2hvcnQgU09VTkRGSUVMRCA9IDI7Ci0KLSAgICAgICAgLy8gRGlzdGFuY2Ug
bW9kZWwKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTElORUFSX0RJU1RBTkNFID0gMDsK
LSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgSU5WRVJTRV9ESVNUQU5DRSA9IDE7Ci0gICAg
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEVYUE9ORU5USUFMX0RJU1RBTkNFID0gMjsKLQotICAg
ICAgICAvLyBEZWZhdWx0IG1vZGVsIGZvciBzdGVyZW8gaXMgSFJURiAKLSAgICAgICAgLy8gRklY
TUU6IHVzZSB1bnNpZ25lZCBzaG9ydCB3aGVuIGdsdWUgZ2VuZXJhdGlvbiBzdXBwb3J0cyBpdAot
ICAgICAgICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBwYW5uaW5nTW9kZWwKLSAgICAgICAgICAg
IHNldHRlciByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLQotICAgICAgICAvLyBVc2VzIGEgM0QgY2Fy
dGVzaWFuIGNvb3JkaW5hdGUgc3lzdGVtIAotICAgICAgICB2b2lkIHNldFBvc2l0aW9uKGluIGZs
b2F0IHgsIGluIGZsb2F0IHksIGluIGZsb2F0IHopOwotICAgICAgICB2b2lkIHNldE9yaWVudGF0
aW9uKGluIGZsb2F0IHgsIGluIGZsb2F0IHksIGluIGZsb2F0IHopOwotICAgICAgICB2b2lkIHNl
dFZlbG9jaXR5KGluIGZsb2F0IHgsIGluIGZsb2F0IHksIGluIGZsb2F0IHopOwotCi0gICAgICAg
IC8vIERpc3RhbmNlIG1vZGVsCi0gICAgICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGRpc3Rh
bmNlTW9kZWw7IC8vIEZJWE1FOiB1c2UgdW5zaWduZWQgc2hvcnQgd2hlbiBnbHVlIGdlbmVyYXRp
b24gc3VwcG9ydHMgaXQKLSAgICAgICAgYXR0cmlidXRlIGZsb2F0IHJlZkRpc3RhbmNlOwotICAg
ICAgICBhdHRyaWJ1dGUgZmxvYXQgbWF4RGlzdGFuY2U7Ci0gICAgICAgIGF0dHJpYnV0ZSBmbG9h
dCByb2xsb2ZmRmFjdG9yOwotCi0gICAgICAgIC8vIERpcmVjdGlvbmFsIHNvdW5kIGNvbmUKLSAg
ICAgICAgYXR0cmlidXRlIGZsb2F0IGNvbmVJbm5lckFuZ2xlOwotICAgICAgICBhdHRyaWJ1dGUg
ZmxvYXQgY29uZU91dGVyQW5nbGU7Ci0gICAgICAgIGF0dHJpYnV0ZSBmbG9hdCBjb25lT3V0ZXJH
YWluOwotCi0gICAgICAgIC8vIER5bmFtaWNhbGx5IGNhbGN1bGF0ZWQgZ2FpbiB2YWx1ZXMgICAg
ICAgICAgCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb0dhaW4gY29uZUdhaW47Ci0g
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb0dhaW4gZGlzdGFuY2VHYWluOwotICAgIH07
Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtLmNwcAkocmV2aXNpb24g
MTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTE2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0K
LSNpZiBFTkFCTEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiQXVkaW9QYXJhbS5oIgotCi0jaW5j
bHVkZSAiQXVkaW9Ob2RlLmgiCi0jaW5jbHVkZSAiQXVkaW9VdGlsaXRpZXMuaCIKLSNpbmNsdWRl
ICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0IGRvdWJsZSBBdWRpb1BhcmFtOjpEZWZhdWx0U21vb3Ro
aW5nQ29uc3RhbnQgPSAwLjA1OwotY29uc3QgZG91YmxlIEF1ZGlvUGFyYW06OlNuYXBUaHJlc2hv
bGQgPSAwLjAwMTsKLQotZmxvYXQgQXVkaW9QYXJhbTo6dmFsdWUoKQotewotICAgIC8vIFVwZGF0
ZSB2YWx1ZSBmb3IgdGltZWxpbmUuCi0gICAgaWYgKGNvbnRleHQoKSAmJiBjb250ZXh0KCktPmlz
QXVkaW9UaHJlYWQoKSkgewotICAgICAgICBib29sIGhhc1ZhbHVlOwotICAgICAgICBmbG9hdCB0
aW1lbGluZVZhbHVlID0gbV90aW1lbGluZS52YWx1ZUZvckNvbnRleHRUaW1lKGNvbnRleHQoKSwg
bmFycm93UHJlY2lzaW9uVG9GbG9hdChtX3ZhbHVlKSwgaGFzVmFsdWUpOwotCi0gICAgICAgIGlm
IChoYXNWYWx1ZSkKLSAgICAgICAgICAgIG1fdmFsdWUgPSB0aW1lbGluZVZhbHVlOwotICAgIH0K
LQotICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KG1fdmFsdWUpOwotfQotCi12b2lk
IEF1ZGlvUGFyYW06OnNldFZhbHVlKGZsb2F0IHZhbHVlKQotewotICAgIC8vIENoZWNrIGFnYWlu
c3QgSmF2YVNjcmlwdCBnaXZpbmcgdXMgYm9ndXMgZmxvYXRpbmctcG9pbnQgdmFsdWVzLgotICAg
IC8vIERvbid0IEFTU0VSVCwgc2luY2UgdGhpcyBjYW4gaGFwcGVuIGlmIHNvbWVib2R5IHdyaXRl
cyBiYWQgSlMuCi0gICAgaWYgKCFpc25hbih2YWx1ZSkgJiYgIWlzaW5mKHZhbHVlKSkKLSAgICAg
ICAgbV92YWx1ZSA9IHZhbHVlOwotfQotCi1mbG9hdCBBdWRpb1BhcmFtOjpzbW9vdGhlZFZhbHVl
KCkKLXsKLSAgICByZXR1cm4gbmFycm93UHJlY2lzaW9uVG9GbG9hdChtX3Ntb290aGVkVmFsdWUp
OwotfQotCi1ib29sIEF1ZGlvUGFyYW06OnNtb290aCgpCi17Ci0gICAgLy8gSWYgdmFsdWVzIGhh
dmUgYmVlbiBleHBsaWNpdGx5IHNjaGVkdWxlZCBvbiB0aGUgdGltZWxpbmUsIHRoZW4gdXNlIHRo
ZSBleGFjdCB2YWx1ZS4KLSAgICAvLyBTbW9vdGhpbmcgZWZmZWN0aXZlbHkgaXMgcGVyZm9ybWVk
IGJ5IHRoZSB0aW1lbGluZS4KLSAgICBib29sIHVzZVRpbWVsaW5lVmFsdWUgPSBmYWxzZTsKLSAg
ICBpZiAoY29udGV4dCgpKQotICAgICAgICBtX3ZhbHVlID0gbV90aW1lbGluZS52YWx1ZUZvckNv
bnRleHRUaW1lKGNvbnRleHQoKSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChtX3ZhbHVlKSwgdXNl
VGltZWxpbmVWYWx1ZSk7Ci0gICAgCi0gICAgaWYgKG1fc21vb3RoZWRWYWx1ZSA9PSBtX3ZhbHVl
KSB7Ci0gICAgICAgIC8vIFNtb290aGVkIHZhbHVlIGhhcyBhbHJlYWR5IGFwcHJvYWNoZWQgYW5k
IHNuYXBwZWQgdG8gdmFsdWUuCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAg
ICBpZiAodXNlVGltZWxpbmVWYWx1ZSkKLSAgICAgICAgbV9zbW9vdGhlZFZhbHVlID0gbV92YWx1
ZTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gRGV6aXBwZXIgLSBleHBvbmVudGlhbCBhcHByb2Fj
aC4KLSAgICAgICAgbV9zbW9vdGhlZFZhbHVlICs9IChtX3ZhbHVlIC0gbV9zbW9vdGhlZFZhbHVl
KSAqIG1fc21vb3RoaW5nQ29uc3RhbnQ7Ci0KLSAgICAgICAgLy8gSWYgd2UgZ2V0IGNsb3NlIGVu
b3VnaCB0aGVuIHNuYXAgdG8gYWN0dWFsIHZhbHVlLgotICAgICAgICBpZiAoZmFicyhtX3Ntb290
aGVkVmFsdWUgLSBtX3ZhbHVlKSA8IFNuYXBUaHJlc2hvbGQpIC8vIEZJWE1FOiB0aGUgdGhyZXNo
b2xkIG5lZWRzIHRvIGJlIGFkanVzdGFibGUgZGVwZW5kaW5nIG9uIHJhbmdlIC0gYnV0IHRoaXMg
aXMgT0sgZ2VuZXJhbCBwdXJwb3NlIHZhbHVlLgotICAgICAgICAgICAgbV9zbW9vdGhlZFZhbHVl
ID0gbV92YWx1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQXVkaW9Q
YXJhbTo6Y2FsY3VsYXRlU2FtcGxlQWNjdXJhdGVWYWx1ZXMoZmxvYXQqIHZhbHVlcywgdW5zaWdu
ZWQgbnVtYmVyT2ZWYWx1ZXMpCi17Ci0gICAgYm9vbCBpc1NhZmUgPSBjb250ZXh0KCkgJiYgY29u
dGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkgJiYgdmFsdWVzOwotICAgIEFTU0VSVChpc1NhZmUpOwot
ICAgIGlmICghaXNTYWZlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDYWxjdWxhdGUgdmFs
dWVzIGZvciB0aGlzIHJlbmRlciBxdWFudHVtLgotICAgIC8vIE5vcm1hbGx5IG51bWJlck9mVmFs
dWVzIHdpbGwgZXF1YWwgQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVzICh0aGUgcmVu
ZGVyIHF1YW50dW0gc2l6ZSkuCi0gICAgZmxvYXQgc2FtcGxlUmF0ZSA9IGNvbnRleHQoKS0+c2Ft
cGxlUmF0ZSgpOwotICAgIGZsb2F0IHN0YXJ0VGltZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
Y29udGV4dCgpLT5jdXJyZW50VGltZSgpKTsKLSAgICBmbG9hdCBlbmRUaW1lID0gc3RhcnRUaW1l
ICsgbnVtYmVyT2ZWYWx1ZXMgLyBzYW1wbGVSYXRlOwotCi0gICAgLy8gTm90ZSB3ZSdyZSBydW5u
aW5nIGNvbnRyb2wgcmF0ZSBhdCB0aGUgc2FtcGxlLXJhdGUuCi0gICAgLy8gUGFzcyBpbiB0aGUg
Y3VycmVudCB2YWx1ZSBhcyBkZWZhdWx0IHZhbHVlLgotICAgIG1fdmFsdWUgPSBtX3RpbWVsaW5l
LnZhbHVlc0ZvclRpbWVSYW5nZShzdGFydFRpbWUsIGVuZFRpbWUsIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQobV92YWx1ZSksIHZhbHVlcywgbnVtYmVyT2ZWYWx1ZXMsIHNhbXBsZVJhdGUsIHNhbXBs
ZVJhdGUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
V0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uaAkocmV2aXNp
b24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDEyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBdWRpb1BhcmFtX2gKLSNkZWZp
bmUgQXVkaW9QYXJhbV9oCi0KLSNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKLSNpbmNsdWRlICJB
dWRpb1BhcmFtVGltZWxpbmUuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1
ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9GbG9hdDMyQXJyYXkuaD4KLSNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9QYXJhbSA6IHB1YmxpYyBSZWZDb3VudGVkPEF1
ZGlvUGFyYW0+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIERlZmF1bHRTbW9v
dGhpbmdDb25zdGFudDsKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIFNuYXBUaHJlc2hvbGQ7Ci0K
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb1BhcmFtPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBu
YW1lLCBkb3VibGUgZGVmYXVsdFZhbHVlLCBkb3VibGUgbWluVmFsdWUsIGRvdWJsZSBtYXhWYWx1
ZSwgdW5zaWduZWQgdW5pdHMgPSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBBdWRpb1BhcmFtKG5hbWUsIGRlZmF1bHRWYWx1ZSwgbWluVmFsdWUsIG1heFZhbHVlLCB1bml0
cykpOwotICAgIH0KLQotICAgIEF1ZGlvUGFyYW0oY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUg
ZGVmYXVsdFZhbHVlLCBkb3VibGUgbWluVmFsdWUsIGRvdWJsZSBtYXhWYWx1ZSwgdW5zaWduZWQg
dW5pdHMgPSAwKQotICAgICAgICA6IG1fbmFtZShuYW1lKQotICAgICAgICAsIG1fdmFsdWUoZGVm
YXVsdFZhbHVlKQotICAgICAgICAsIG1fZGVmYXVsdFZhbHVlKGRlZmF1bHRWYWx1ZSkKLSAgICAg
ICAgLCBtX21pblZhbHVlKG1pblZhbHVlKQotICAgICAgICAsIG1fbWF4VmFsdWUobWF4VmFsdWUp
Ci0gICAgICAgICwgbV91bml0cyh1bml0cykKLSAgICAgICAgLCBtX3Ntb290aGVkVmFsdWUoZGVm
YXVsdFZhbHVlKQotICAgICAgICAsIG1fc21vb3RoaW5nQ29uc3RhbnQoRGVmYXVsdFNtb290aGlu
Z0NvbnN0YW50KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRDb250ZXh0KEF1ZGlv
Q29udGV4dCogY29udGV4dCkgeyBtX2NvbnRleHQgPSBjb250ZXh0OyB9Ci0gICAgQXVkaW9Db250
ZXh0KiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9Ci0KLSAgICBmbG9hdCB2
YWx1ZSgpOwotICAgIAotICAgIHZvaWQgc2V0VmFsdWUoZmxvYXQpOwotCi0gICAgU3RyaW5nIG5h
bWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLQotICAgIGZsb2F0IG1pblZhbHVlKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWluVmFsdWUpOyB9Ci0gICAgZmxvYXQg
bWF4VmFsdWUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV9tYXhWYWx1ZSk7
IH0KLSAgICBmbG9hdCBkZWZhdWx0VmFsdWUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4obV9kZWZhdWx0VmFsdWUpOyB9Ci0gICAgdW5zaWduZWQgdW5pdHMoKSBjb25zdCB7IHJl
dHVybiBtX3VuaXRzOyB9Ci0KLSAgICAvLyBWYWx1ZSBzbW9vdGhpbmc6Ci0KLSAgICAvLyBXaGVu
IGEgbmV3IHZhbHVlIGlzIHNldCB3aXRoIHNldFZhbHVlKCksIGluIG91ciBpbnRlcm5hbCB1c2Ug
b2YgdGhlIHBhcmFtZXRlciB3ZSBkb24ndCBpbW1lZGlhdGVseSBqdW1wIHRvIGl0LgotICAgIC8v
IEluc3RlYWQgd2Ugc21vb3RobHkgYXBwcm9hY2ggdGhpcyB2YWx1ZSB0byBhdm9pZCBnbGl0Y2hp
bmcuCi0gICAgZmxvYXQgc21vb3RoZWRWYWx1ZSgpOwotCi0gICAgLy8gU21vb3RobHkgZXhwb25l
bnRpYWxseSBhcHByb2FjaGVzIHRvIChkZS16aXBwZXJzKSB0aGUgZGVzaXJlZCB2YWx1ZS4KLSAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgc21vb3RoZWQgdmFsdWUgaGFzIGFscmVhZHkgc25hcHBlZCBl
eGFjdGx5IHRvIHZhbHVlLgotICAgIGJvb2wgc21vb3RoKCk7Ci0KLSAgICB2b2lkIHJlc2V0U21v
b3RoZWRWYWx1ZSgpIHsgbV9zbW9vdGhlZFZhbHVlID0gbV92YWx1ZTsgfQotICAgIHZvaWQgc2V0
U21vb3RoaW5nQ29uc3RhbnQoZG91YmxlIGspIHsgbV9zbW9vdGhpbmdDb25zdGFudCA9IGs7IH0K
LQotICAgIC8vIFBhcmFtZXRlciBhdXRvbWF0aW9uLiAgICAKLSAgICB2b2lkIHNldFZhbHVlQXRU
aW1lKGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1lKSB7IG1fdGltZWxpbmUuc2V0VmFsdWVBdFRpbWUo
dmFsdWUsIHRpbWUpOyB9Ci0gICAgdm9pZCBsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZShmbG9hdCB2
YWx1ZSwgZmxvYXQgdGltZSkgeyBtX3RpbWVsaW5lLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZh
bHVlLCB0aW1lKTsgfQotICAgIHZvaWQgZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZShmbG9h
dCB2YWx1ZSwgZmxvYXQgdGltZSkgeyBtX3RpbWVsaW5lLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVB
dFRpbWUodmFsdWUsIHRpbWUpOyB9Ci0gICAgdm9pZCBzZXRUYXJnZXRWYWx1ZUF0VGltZShmbG9h
dCB0YXJnZXRWYWx1ZSwgZmxvYXQgdGltZSwgZmxvYXQgdGltZUNvbnN0YW50KSB7IG1fdGltZWxp
bmUuc2V0VGFyZ2V0VmFsdWVBdFRpbWUodGFyZ2V0VmFsdWUsIHRpbWUsIHRpbWVDb25zdGFudCk7
IH0KLSAgICB2b2lkIHNldFZhbHVlQ3VydmVBdFRpbWUoRmxvYXQzMkFycmF5KiBjdXJ2ZSwgZmxv
YXQgdGltZSwgZmxvYXQgZHVyYXRpb24pIHsgbV90aW1lbGluZS5zZXRWYWx1ZUN1cnZlQXRUaW1l
KGN1cnZlLCB0aW1lLCBkdXJhdGlvbik7IH0KLSAgICB2b2lkIGNhbmNlbFNjaGVkdWxlZFZhbHVl
cyhmbG9hdCBzdGFydFRpbWUpIHsgbV90aW1lbGluZS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMoc3Rh
cnRUaW1lKTsgfQotCi0gICAgYm9vbCBoYXNUaW1lbGluZVZhbHVlcygpIHsgcmV0dXJuIG1fdGlt
ZWxpbmUuaGFzVmFsdWVzKCk7IH0KLSAgICAKLSAgICAvLyBDYWxjdWxhdGVzIG51bWJlck9mVmFs
dWVzIHBhcmFtZXRlciB2YWx1ZXMgc3RhcnRpbmcgYXQgdGhlIGNvbnRleHQncyBjdXJyZW50IHRp
bWUuCi0gICAgLy8gTXVzdCBiZSBjYWxsZWQgaW4gdGhlIGNvbnRleHQncyByZW5kZXIgdGhyZWFk
LgotICAgIHZvaWQgY2FsY3VsYXRlU2FtcGxlQWNjdXJhdGVWYWx1ZXMoZmxvYXQqIHZhbHVlcywg
dW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMpOwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxBdWRpb0Nv
bnRleHQ+IG1fY29udGV4dDsKLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIGRvdWJsZSBtX3ZhbHVl
OwotICAgIGRvdWJsZSBtX2RlZmF1bHRWYWx1ZTsKLSAgICBkb3VibGUgbV9taW5WYWx1ZTsKLSAg
ICBkb3VibGUgbV9tYXhWYWx1ZTsKLSAgICB1bnNpZ25lZCBtX3VuaXRzOwotCi0gICAgLy8gU21v
b3RoaW5nIChkZS16aXBwZXJpbmcpCi0gICAgZG91YmxlIG1fc21vb3RoZWRWYWx1ZTsKLSAgICBk
b3VibGUgbV9zbW9vdGhpbmdDb25zdGFudDsKLSAgICAKLSAgICBBdWRpb1BhcmFtVGltZWxpbmUg
bV90aW1lbGluZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEF1
ZGlvUGFyYW1faApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbS5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbS5pZGwJKHJl
dmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgd2ViYXVkaW8gewotICAg
IGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTwotICAgIF0gQXVkaW9Q
YXJhbSB7Ci0gICAgICAgIGF0dHJpYnV0ZSBmbG9hdCB2YWx1ZTsKLSAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIGZsb2F0IG1pblZhbHVlOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgZmxv
YXQgbWF4VmFsdWU7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBmbG9hdCBkZWZhdWx0VmFs
dWU7Ci0KLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBuYW1lOwotCi0gICAg
ICAgIC8vIEZJWE1FOiBDb3VsZCBkZWZpbmUgdW5pdHMgY29uc3RhbnRzIGhlcmUgKHNlY29uZHMs
IGRlY2liZWxzLCBjZW50cywgZXRjLikuLi4KLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVu
c2lnbmVkIHNob3J0IHVuaXRzOwotCi0gICAgICAgIC8vIFBhcmFtZXRlciBhdXRvbWF0aW9uLgot
ICAgICAgICB2b2lkIHNldFZhbHVlQXRUaW1lKGluIGZsb2F0IHZhbHVlLCBpbiBmbG9hdCB0aW1l
KTsKLSAgICAgICAgdm9pZCBsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZShpbiBmbG9hdCB2YWx1ZSwg
aW4gZmxvYXQgdGltZSk7Ci0gICAgICAgIHZvaWQgZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGlt
ZShpbiBmbG9hdCB2YWx1ZSwgaW4gZmxvYXQgdGltZSk7Ci0KLSAgICAgICAgLy8gRXhwb25lbnRp
YWxseSBhcHByb2FjaCB0aGUgdGFyZ2V0IHZhbHVlIHdpdGggYSByYXRlIGhhdmluZyB0aGUgZ2l2
ZW4gdGltZSBjb25zdGFudC4KLSAgICAgICAgdm9pZCBzZXRUYXJnZXRWYWx1ZUF0VGltZShpbiBm
bG9hdCB0YXJnZXRWYWx1ZSwgaW4gZmxvYXQgdGltZSwgaW4gZmxvYXQgdGltZUNvbnN0YW50KTsK
LQotICAgICAgICAvLyBTZXRzIGFuIGFycmF5IG9mIGFyYml0cmFyeSBwYXJhbWV0ZXIgdmFsdWVz
IHN0YXJ0aW5nIGF0IHRpbWUgZm9yIHRoZSBnaXZlbiBkdXJhdGlvbi4KLSAgICAgICAgLy8gVGhl
IG51bWJlciBvZiB2YWx1ZXMgd2lsbCBiZSBzY2FsZWQgdG8gZml0IGludG8gdGhlIGRlc2lyZWQg
ZHVyYXRpb24uCi0gICAgICAgIHZvaWQgc2V0VmFsdWVDdXJ2ZUF0VGltZShpbiBGbG9hdDMyQXJy
YXkgdmFsdWVzLCBpbiBmbG9hdCB0aW1lLCBpbiBmbG9hdCBkdXJhdGlvbik7Ci0KLSAgICAgICAg
Ly8gQ2FuY2VscyBhbGwgc2NoZWR1bGVkIHBhcmFtZXRlciBjaGFuZ2VzIHdpdGggdGltZXMgZ3Jl
YXRlciB0aGFuIG9yIGVxdWFsIHRvIHN0YXJ0VGltZS4KLSAgICAgICAgdm9pZCBjYW5jZWxTY2hl
ZHVsZWRWYWx1ZXMoaW4gZmxvYXQgc3RhcnRUaW1lKTsKLSAgICB9OwotfQpJbmRleDogU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3BwCShyZXZpc2lvbiAx
MTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDM2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIkF1ZGlvUGFyYW1UaW1l
bGluZS5oIgotCi0jaW5jbHVkZSAiQXVkaW9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJGbG9hdENv
bnZlcnNpb24uaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12
b2lkIEF1ZGlvUGFyYW1UaW1lbGluZTo6c2V0VmFsdWVBdFRpbWUoZmxvYXQgdmFsdWUsIGZsb2F0
IHRpbWUpCi17Ci0gICAgaW5zZXJ0RXZlbnQoUGFyYW1FdmVudChQYXJhbUV2ZW50OjpTZXRWYWx1
ZSwgdmFsdWUsIHRpbWUsIDAsIDAsIDApKTsKLX0KLQotdm9pZCBBdWRpb1BhcmFtVGltZWxpbmU6
OmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1lKQotewotICAg
IGluc2VydEV2ZW50KFBhcmFtRXZlbnQoUGFyYW1FdmVudDo6TGluZWFyUmFtcFRvVmFsdWUsIHZh
bHVlLCB0aW1lLCAwLCAwLCAwKSk7Ci19Ci0KLXZvaWQgQXVkaW9QYXJhbVRpbWVsaW5lOjpleHBv
bmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1lKQotewotICAg
IGluc2VydEV2ZW50KFBhcmFtRXZlbnQoUGFyYW1FdmVudDo6RXhwb25lbnRpYWxSYW1wVG9WYWx1
ZSwgdmFsdWUsIHRpbWUsIDAsIDAsIDApKTsKLX0KLQotdm9pZCBBdWRpb1BhcmFtVGltZWxpbmU6
OnNldFRhcmdldFZhbHVlQXRUaW1lKGZsb2F0IHRhcmdldFZhbHVlLCBmbG9hdCB0aW1lLCBmbG9h
dCB0aW1lQ29uc3RhbnQpCi17Ci0gICAgaW5zZXJ0RXZlbnQoUGFyYW1FdmVudChQYXJhbUV2ZW50
OjpTZXRUYXJnZXRWYWx1ZSwgdGFyZ2V0VmFsdWUsIHRpbWUsIHRpbWVDb25zdGFudCwgMCwgMCkp
OwotfQotCi12b2lkIEF1ZGlvUGFyYW1UaW1lbGluZTo6c2V0VmFsdWVDdXJ2ZUF0VGltZShGbG9h
dDMyQXJyYXkqIGN1cnZlLCBmbG9hdCB0aW1lLCBmbG9hdCBkdXJhdGlvbikKLXsKLSAgICBpbnNl
cnRFdmVudChQYXJhbUV2ZW50KFBhcmFtRXZlbnQ6OlNldFZhbHVlQ3VydmUsIDAsIHRpbWUsIDAs
IGR1cmF0aW9uLCBjdXJ2ZSkpOwotfQotCi1zdGF0aWMgYm9vbCBpc1ZhbGlkTnVtYmVyKGZsb2F0
IHgpCi17Ci0gICAgcmV0dXJuICFpc25hbih4KSAmJiAhaXNpbmYoeCk7Ci19Ci0KLXZvaWQgQXVk
aW9QYXJhbVRpbWVsaW5lOjppbnNlcnRFdmVudChjb25zdCBQYXJhbUV2ZW50JiBldmVudCkKLXsK
LSAgICAvLyBTYW5pdHkgY2hlY2sgdGhlIGV2ZW50LiBCZSBzdXBlciBjYXJlZnVsIHdlJ3JlIG5v
dCBnZXR0aW5nIGluZmVjdGVkIHdpdGggTmFOIG9yIEluZi4KLSAgICBib29sIGlzVmFsaWQgPSBl
dmVudC50eXBlKCkgPCBQYXJhbUV2ZW50OjpMYXN0VHlwZQotICAgICAgICAmJiBpc1ZhbGlkTnVt
YmVyKGV2ZW50LnZhbHVlKCkpCi0gICAgICAgICYmIGlzVmFsaWROdW1iZXIoZXZlbnQudGltZSgp
KQotICAgICAgICAmJiBpc1ZhbGlkTnVtYmVyKGV2ZW50LnRpbWVDb25zdGFudCgpKQotICAgICAg
ICAmJiBpc1ZhbGlkTnVtYmVyKGV2ZW50LmR1cmF0aW9uKCkpCi0gICAgICAgICYmIGV2ZW50LmR1
cmF0aW9uKCkgPj0gMDsKLQotICAgIEFTU0VSVChpc1ZhbGlkKTsKLSAgICBpZiAoIWlzVmFsaWQp
Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZl
bnRzTG9jayk7Ci0gICAgCi0gICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgZmxvYXQgaW5zZXJ0VGlt
ZSA9IGV2ZW50LnRpbWUoKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbV9ldmVudHMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgLy8gT3ZlcndyaXRlIHNhbWUgZXZlbnQgdHlwZSBhbmQgdGltZS4KLSAg
ICAgICAgaWYgKG1fZXZlbnRzW2ldLnRpbWUoKSA9PSBpbnNlcnRUaW1lICYmIG1fZXZlbnRzW2ld
LnR5cGUoKSA9PSBldmVudC50eXBlKCkpIHsKLSAgICAgICAgICAgIG1fZXZlbnRzW2ldID0gZXZl
bnQ7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9ldmVu
dHNbaV0udGltZSgpID4gaW5zZXJ0VGltZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIG1fZXZlbnRzLmluc2VydChpLCBldmVudCk7Ci19Ci0KLXZvaWQgQXVkaW9QYXJhbVRpbWVs
aW5lOjpjYW5jZWxTY2hlZHVsZWRWYWx1ZXMoZmxvYXQgc3RhcnRUaW1lKQotewotICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX2V2ZW50c0xvY2spOwotCi0gICAgLy8gUmVtb3ZlIGFsbCBldmVudHMg
c3RhcnRpbmcgYXQgc3RhcnRUaW1lLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2V2
ZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9ldmVudHNbaV0udGltZSgpID49IHN0
YXJ0VGltZSkgewotICAgICAgICAgICAgbV9ldmVudHMucmVtb3ZlKGksIG1fZXZlbnRzLnNpemUo
KSAtIGkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWZsb2F0
IEF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVGb3JDb250ZXh0VGltZShBdWRpb0NvbnRleHQqIGNv
bnRleHQsIGZsb2F0IGRlZmF1bHRWYWx1ZSwgYm9vbCYgaGFzVmFsdWUpCi17Ci0gICAgQVNTRVJU
KGNvbnRleHQpOwotCi0gICAgaWYgKCFjb250ZXh0IHx8ICFtX2V2ZW50cy5zaXplKCkgfHwgY29u
dGV4dC0+Y3VycmVudFRpbWUoKSA8IG1fZXZlbnRzWzBdLnRpbWUoKSkgewotICAgICAgICBoYXNW
YWx1ZSA9IGZhbHNlOwotICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotICAgIH0KLQotICAg
IC8vIEFzayBmb3IganVzdCBhIHNpbmdsZSB2YWx1ZS4KLSAgICBmbG9hdCB2YWx1ZTsKLSAgICBm
bG9hdCBzYW1wbGVSYXRlID0gY29udGV4dC0+c2FtcGxlUmF0ZSgpOwotICAgIGZsb2F0IHN0YXJ0
VGltZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29udGV4dC0+Y3VycmVudFRpbWUoKSk7Ci0g
ICAgZmxvYXQgZW5kVGltZSA9IHN0YXJ0VGltZSArIDEuMWYgLyBzYW1wbGVSYXRlOyAvLyB0aW1l
IGp1c3QgYmV5b25kIG9uZSBzYW1wbGUtZnJhbWUKLSAgICBmbG9hdCBjb250cm9sUmF0ZSA9IHNh
bXBsZVJhdGUgLyBBdWRpb05vZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXM7IC8vIG9uZSBwYXJh
bWV0ZXIgY2hhbmdlIHBlciByZW5kZXIgcXVhbnR1bQotICAgIHZhbHVlID0gdmFsdWVzRm9yVGlt
ZVJhbmdlKHN0YXJ0VGltZSwgZW5kVGltZSwgZGVmYXVsdFZhbHVlLCAmdmFsdWUsIDEsIHNhbXBs
ZVJhdGUsIGNvbnRyb2xSYXRlKTsKLQotICAgIGhhc1ZhbHVlID0gdHJ1ZTsKLSAgICByZXR1cm4g
dmFsdWU7Ci19Ci0KLWZsb2F0IEF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVzRm9yVGltZVJhbmdl
KGZsb2F0IHN0YXJ0VGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZsb2F0IGVuZFRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbG9hdCBkZWZhdWx0VmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmbG9hdCogdmFsdWVzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBzYW1wbGVSYXRlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgY29udHJv
bFJhdGUpCi17Ci0gICAgLy8gV2UgY2FuJ3QgY29udGVuZCB0aGUgbG9jayBpbiB0aGUgcmVhbHRp
bWUgYXVkaW8gdGhyZWFkLgotICAgIGlmICghbV9ldmVudHNMb2NrLnRyeUxvY2soKSkgewotICAg
ICAgICBpZiAodmFsdWVzKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtYmVyT2ZWYWx1ZXM7ICsraSkKLSAgICAgICAgICAgICAgICB2YWx1ZXNbaV0gPSBkZWZhdWx0
VmFsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKLSAgICB9Ci0K
LSAgICBmbG9hdCB2YWx1ZSA9IHZhbHVlc0ZvclRpbWVSYW5nZUltcGwoc3RhcnRUaW1lLCBlbmRU
aW1lLCBkZWZhdWx0VmFsdWUsIHZhbHVlcywgbnVtYmVyT2ZWYWx1ZXMsIHNhbXBsZVJhdGUsIGNv
bnRyb2xSYXRlKTsKLSAgICBtX2V2ZW50c0xvY2sudW5sb2NrKCk7Ci0KLSAgICByZXR1cm4gdmFs
dWU7Ci19Ci0KLWZsb2F0IEF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVzRm9yVGltZVJhbmdlSW1w
bChmbG9hdCBzdGFydFRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgZW5kVGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmbG9hdCBkZWZhdWx0VmFsdWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIHZhbHVlcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJP
ZlZhbHVlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCBzYW1wbGVSYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZsb2F0IGNvbnRyb2xSYXRlKQotewotICAgIEFTU0VSVCh2YWx1ZXMpOwot
ICAgIGlmICghdmFsdWVzKQotICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotCi0gICAgLy8g
UmV0dXJuIGRlZmF1bHQgdmFsdWUgaWYgdGhlcmUgYXJlIG5vIGV2ZW50cyBtYXRjaGluZyB0aGUg
ZGVzaXJlZCB0aW1lIHJhbmdlLgotICAgIEFTU0VSVChtX2V2ZW50cy5zaXplKCkpOwotICAgIGlm
ICghbV9ldmVudHMuc2l6ZSgpIHx8IGVuZFRpbWUgPD0gbV9ldmVudHNbMF0udGltZSgpKSB7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZlZhbHVlczsgKytpKQotICAg
ICAgICAgICAgdmFsdWVzW2ldID0gZGVmYXVsdFZhbHVlOwotICAgICAgICByZXR1cm4gZGVmYXVs
dFZhbHVlOwotICAgIH0KLQotICAgIC8vIE1haW50YWluIGEgcnVubmluZyB0aW1lIGFuZCBpbmRl
eCBmb3Igd3JpdGluZyB0aGUgdmFsdWVzIGJ1ZmZlci4KLSAgICBmbG9hdCBjdXJyZW50VGltZSA9
IHN0YXJ0VGltZTsKLSAgICB1bnNpZ25lZCB3cml0ZUluZGV4ID0gMDsKLQotICAgIC8vIElmIGZp
cnN0IGV2ZW50IGlzIGFmdGVyIHN0YXJ0VGltZSB0aGVuIGZpbGwgaW5pdGlhbCBwYXJ0IG9mIHZh
bHVlcyBidWZmZXIgd2l0aCBkZWZhdWx0VmFsdWUKLSAgICAvLyB1bnRpbCB3ZSByZWFjaCB0aGUg
Zmlyc3QgZXZlbnQgdGltZS4KLSAgICBmbG9hdCBmaXJzdEV2ZW50VGltZSA9IG1fZXZlbnRzWzBd
LnRpbWUoKTsKLSAgICBpZiAoZmlyc3RFdmVudFRpbWUgPiBzdGFydFRpbWUpIHsKLSAgICAgICAg
ZmxvYXQgZmlsbFRvVGltZSA9IG1pbihlbmRUaW1lLCBmaXJzdEV2ZW50VGltZSk7Ci0gICAgICAg
IHVuc2lnbmVkIGZpbGxUb0ZyYW1lID0gQXVkaW9VdGlsaXRpZXM6OnRpbWVUb1NhbXBsZUZyYW1l
KGZpbGxUb1RpbWUgLSBzdGFydFRpbWUsIHNhbXBsZVJhdGUpOwotICAgICAgICBmaWxsVG9GcmFt
ZSA9IG1pbihmaWxsVG9GcmFtZSwgbnVtYmVyT2ZWYWx1ZXMpOwotICAgICAgICBmb3IgKDsgd3Jp
dGVJbmRleCA8IGZpbGxUb0ZyYW1lOyArK3dyaXRlSW5kZXgpCi0gICAgICAgICAgICB2YWx1ZXNb
d3JpdGVJbmRleF0gPSBkZWZhdWx0VmFsdWU7Ci0KLSAgICAgICAgY3VycmVudFRpbWUgPSBmaWxs
VG9UaW1lOwotICAgIH0KLQotICAgIGZsb2F0IHZhbHVlID0gZGVmYXVsdFZhbHVlOwotCi0gICAg
Ly8gR28gdGhyb3VnaCBlYWNoIGV2ZW50IGFuZCByZW5kZXIgdGhlIHZhbHVlIGJ1ZmZlciB3aGVy
ZSB0aGUgdGltZXMgb3ZlcmxhcCwKLSAgICAvLyBzdG9wcGluZyB3aGVuIHdlJ3ZlIHJlbmRlcmVk
IGFsbCB0aGUgcmVxdWVzdGVkIHZhbHVlcy4KLSAgICAvLyBGSVhNRTogY291bGQgdHJ5IHRvIG9w
dGltaXplIGJ5IGF2b2lkaW5nIGhhdmluZyB0byBpdGVyYXRlIHN0YXJ0aW5nIGZyb20gdGhlIHZl
cnkgZmlyc3QgZXZlbnQKLSAgICAvLyBhbmQga2VlcGluZyB0cmFjayBvZiBhICJjdXJyZW50IiBl
dmVudCBpbmRleC4KLSAgICBpbnQgbiA9IG1fZXZlbnRzLnNpemUoKTsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG4gJiYgd3JpdGVJbmRleCA8IG51bWJlck9mVmFsdWVzOyArK2kpIHsKLSAgICAg
ICAgUGFyYW1FdmVudCYgZXZlbnQgPSBtX2V2ZW50c1tpXTsKLSAgICAgICAgUGFyYW1FdmVudCog
bmV4dEV2ZW50ID0gaSA8IG4gLSAxID8gJihtX2V2ZW50c1tpICsgMV0pIDogMDsKLQotICAgICAg
ICAvLyBXYWl0IHVudGlsIHdlIGdldCBhIG1vcmUgcmVjZW50IGV2ZW50LgotICAgICAgICBpZiAo
bmV4dEV2ZW50ICYmIG5leHRFdmVudC0+dGltZSgpIDwgY3VycmVudFRpbWUpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBmbG9hdCB2YWx1ZTEgPSBldmVudC52YWx1ZSgpOwotICAg
ICAgICBmbG9hdCB0aW1lMSA9IGV2ZW50LnRpbWUoKTsKLSAgICAgICAgZmxvYXQgdmFsdWUyID0g
bmV4dEV2ZW50ID8gbmV4dEV2ZW50LT52YWx1ZSgpIDogdmFsdWUxOwotICAgICAgICBmbG9hdCB0
aW1lMiA9IG5leHRFdmVudCA/IG5leHRFdmVudC0+dGltZSgpIDogZW5kVGltZSArIDE7Ci0KLSAg
ICAgICAgZmxvYXQgZGVsdGFUaW1lID0gdGltZTIgLSB0aW1lMTsKLSAgICAgICAgZmxvYXQgayA9
IGRlbHRhVGltZSA+IDAgPyAxIC8gZGVsdGFUaW1lIDogMDsKLSAgICAgICAgZmxvYXQgc2FtcGxl
RnJhbWVUaW1lSW5jciA9IDEgLyBzYW1wbGVSYXRlOwotCi0gICAgICAgIGZsb2F0IGZpbGxUb1Rp
bWUgPSBtaW4oZW5kVGltZSwgdGltZTIpOwotICAgICAgICB1bnNpZ25lZCBmaWxsVG9GcmFtZSA9
IEF1ZGlvVXRpbGl0aWVzOjp0aW1lVG9TYW1wbGVGcmFtZShmaWxsVG9UaW1lIC0gc3RhcnRUaW1l
LCBzYW1wbGVSYXRlKTsKLSAgICAgICAgZmlsbFRvRnJhbWUgPSBtaW4oZmlsbFRvRnJhbWUsIG51
bWJlck9mVmFsdWVzKTsKLQotICAgICAgICBQYXJhbUV2ZW50OjpUeXBlIG5leHRFdmVudFR5cGUg
PSBuZXh0RXZlbnQgPyBzdGF0aWNfY2FzdDxQYXJhbUV2ZW50OjpUeXBlPihuZXh0RXZlbnQtPnR5
cGUoKSkgOiBQYXJhbUV2ZW50OjpMYXN0VHlwZSAvKiB1bmtub3duICovOwotCi0gICAgICAgIC8v
IEZpcnN0IGhhbmRsZSBsaW5lYXIgYW5kIGV4cG9uZW50aWFsIHJhbXBzIHdoaWNoIHJlcXVpcmUg
bG9va2luZyBhaGVhZCB0byB0aGUgbmV4dCBldmVudC4KLSAgICAgICAgaWYgKG5leHRFdmVudFR5
cGUgPT0gUGFyYW1FdmVudDo6TGluZWFyUmFtcFRvVmFsdWUpIHsKLSAgICAgICAgICAgIGZvciAo
OyB3cml0ZUluZGV4IDwgZmlsbFRvRnJhbWU7ICsrd3JpdGVJbmRleCkgewotICAgICAgICAgICAg
ICAgIGZsb2F0IHggPSAoY3VycmVudFRpbWUgLSB0aW1lMSkgKiBrOwotICAgICAgICAgICAgICAg
IHZhbHVlID0gKDEgLSB4KSAqIHZhbHVlMSArIHggKiB2YWx1ZTI7Ci0gICAgICAgICAgICAgICAg
dmFsdWVzW3dyaXRlSW5kZXhdID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgY3VycmVudFRpbWUg
Kz0gc2FtcGxlRnJhbWVUaW1lSW5jcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlm
IChuZXh0RXZlbnRUeXBlID09IFBhcmFtRXZlbnQ6OkV4cG9uZW50aWFsUmFtcFRvVmFsdWUpIHsK
LSAgICAgICAgICAgIGlmICh2YWx1ZTEgPD0gMCB8fCB2YWx1ZTIgPD0gMCkgewotICAgICAgICAg
ICAgICAgIC8vIEhhbmRsZSBuZWdhdGl2ZSB2YWx1ZXMgZXJyb3IgY2FzZSBieSBwcm9wYWdhdGlu
ZyBwcmV2aW91cyB2YWx1ZS4KLSAgICAgICAgICAgICAgICBmb3IgKDsgd3JpdGVJbmRleCA8IGZp
bGxUb0ZyYW1lOyArK3dyaXRlSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlc1t3cml0
ZUluZGV4XSA9IHZhbHVlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBm
bG9hdCBudW1TYW1wbGVGcmFtZXMgPSBkZWx0YVRpbWUgKiBzYW1wbGVSYXRlOwotICAgICAgICAg
ICAgICAgIC8vIFRoZSB2YWx1ZSBnb2VzIGV4cG9uZW50aWFsbHkgZnJvbSB2YWx1ZTEgdG8gdmFs
dWUyIGluIGEgZHVyYXRpb24gb2YgZGVsdGFUaW1lIHNlY29uZHMgKGNvcnJlc3BvbmRpbmcgdG8g
bnVtU2FtcGxlRnJhbWVzKS4KLSAgICAgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBwZXItc2Ft
cGxlIG11bHRpcGxpZXIuCi0gICAgICAgICAgICAgICAgZmxvYXQgbXVsdGlwbGllciA9IHBvd2Yo
dmFsdWUyIC8gdmFsdWUxLCAxIC8gbnVtU2FtcGxlRnJhbWVzKTsKLQotICAgICAgICAgICAgICAg
IC8vIFNldCB0aGUgc3RhcnRpbmcgdmFsdWUgb2YgdGhlIGV4cG9uZW50aWFsIHJhbXAuIFRoaXMg
aXMgdGhlIHNhbWUgYXMgbXVsdGlwbGllciBeCi0gICAgICAgICAgICAgICAgLy8gQXVkaW9VdGls
aXRpZXM6OnRpbWVUb1NhbXBsZUZyYW1lKGN1cnJlbnRUaW1lIC0gdGltZTEsIHNhbXBsZVJhdGUp
LCBidXQgaXMgbW9yZQotICAgICAgICAgICAgICAgIC8vIGFjY3VyYXRlLCBlc3BlY2lhbGx5IGlm
IG11bHRpcGxpZXIgaXMgY2xvc2UgdG8gMS4KLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVl
MSAqIHBvd2YodmFsdWUyIC8gdmFsdWUxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBdWRpb1V0aWxpdGllczo6dGltZVRvU2FtcGxlRnJhbWUoY3VycmVudFRpbWUgLSB0
aW1lMSwgc2FtcGxlUmF0ZSkgLyBudW1TYW1wbGVGcmFtZXMpOwotCi0gICAgICAgICAgICAgICAg
Zm9yICg7IHdyaXRlSW5kZXggPCBmaWxsVG9GcmFtZTsgKyt3cml0ZUluZGV4KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHZhbHVlc1t3cml0ZUluZGV4XSA9IHZhbHVlOwotICAgICAgICAgICAgICAg
ICAgICB2YWx1ZSAqPSBtdWx0aXBsaWVyOwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGlt
ZSArPSBzYW1wbGVGcmFtZVRpbWVJbmNyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEhhbmRsZSBldmVudCB0eXBlcyBu
b3QgcmVxdWlyaW5nIGxvb2tpbmcgYWhlYWQgdG8gdGhlIG5leHQgZXZlbnQuCi0gICAgICAgICAg
ICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBQYXJhbUV2ZW50OjpT
ZXRWYWx1ZToKLSAgICAgICAgICAgIGNhc2UgUGFyYW1FdmVudDo6TGluZWFyUmFtcFRvVmFsdWU6
Ci0gICAgICAgICAgICBjYXNlIFBhcmFtRXZlbnQ6OkV4cG9uZW50aWFsUmFtcFRvVmFsdWU6Ci0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGltZSA9IGZpbGxU
b1RpbWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gU2ltcGx5IHN0YXkgYXQgYSBjb25zdGFu
dCB2YWx1ZS4KLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBldmVudC52YWx1ZSgpOwotICAg
ICAgICAgICAgICAgICAgICBmb3IgKDsgd3JpdGVJbmRleCA8IGZpbGxUb0ZyYW1lOyArK3dyaXRl
SW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbd3JpdGVJbmRleF0gPSB2YWx1
ZTsKLQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGNhc2UgUGFyYW1FdmVudDo6U2V0VGFyZ2V0VmFsdWU6Ci0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGltZSA9IGZpbGxUb1RpbWU7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgLy8gRXhwb25lbnRpYWwgYXBwcm9hY2ggdG8gdGFyZ2V0IHZhbHVl
IHdpdGggZ2l2ZW4gdGltZSBjb25zdGFudC4KLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgdGFy
Z2V0VmFsdWUgPSBldmVudC52YWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICBmbG9hdCB0aW1l
Q29uc3RhbnQgPSBldmVudC50aW1lQ29uc3RhbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgZmxv
YXQgZGlzY3JldGVUaW1lQ29uc3RhbnQgPSBzdGF0aWNfY2FzdDxmbG9hdD4oQXVkaW9VdGlsaXRp
ZXM6OmRpc2NyZXRlVGltZUNvbnN0YW50Rm9yU2FtcGxlUmF0ZSh0aW1lQ29uc3RhbnQsIGNvbnRy
b2xSYXRlKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICg7IHdyaXRlSW5kZXggPCBmaWxs
VG9GcmFtZTsgKyt3cml0ZUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNb
d3JpdGVJbmRleF0gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICs9ICh0
YXJnZXRWYWx1ZSAtIHZhbHVlKSAqIGRpc2NyZXRlVGltZUNvbnN0YW50OwotICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBjYXNlIFBhcmFtRXZlbnQ6OlNldFZhbHVlQ3VydmU6Ci0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBGbG9hdDMyQXJyYXkqIGN1cnZlID0gZXZl
bnQuY3VydmUoKTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQqIGN1cnZlRGF0YSA9IGN1cnZl
ID8gY3VydmUtPmRhdGEoKSA6IDA7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mQ3VydmVQb2ludHMgPSBjdXJ2ZSA/IGN1cnZlLT5sZW5ndGgoKSA6IDA7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgLy8gQ3VydmUgZXZlbnRzIGhhdmUgZHVyYXRpb24sIHNvIGRvbid0IGp1c3Qg
dXNlIG5leHQgZXZlbnQgdGltZS4KLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgZHVyYXRpb24g
PSBldmVudC5kdXJhdGlvbigpOwotICAgICAgICAgICAgICAgICAgICBmbG9hdCBkdXJhdGlvbkZy
YW1lcyA9IGR1cmF0aW9uICogc2FtcGxlUmF0ZTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQg
Y3VydmVQb2ludHNQZXJGcmFtZSA9IHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXJPZkN1cnZlUG9p
bnRzKSAvIGR1cmF0aW9uRnJhbWVzOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICghY3VydmUg
fHwgIWN1cnZlRGF0YSB8fCAhbnVtYmVyT2ZDdXJ2ZVBvaW50cyB8fCBkdXJhdGlvbiA8PSAwIHx8
IHNhbXBsZVJhdGUgPD0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXJyb3IgY29u
ZGl0aW9uIC0gc2ltcGx5IHByb3BhZ2F0ZSBwcmV2aW91cyB2YWx1ZS4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRUaW1lID0gZmlsbFRvVGltZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoOyB3cml0ZUluZGV4IDwgZmlsbFRvRnJhbWU7ICsrd3JpdGVJbmRleCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbd3JpdGVJbmRleF0gPSB2YWx1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgLy8gU2F2ZSBvbGQgdmFsdWVzIGFuZCByZWNhbGN1bGF0ZSBpbmZvcm1h
dGlvbiBiYXNlZCBvbiB0aGUgY3VydmUncyBkdXJhdGlvbgotICAgICAgICAgICAgICAgICAgICAv
LyBpbnN0ZWFkIG9mIHRoZSBuZXh0IGV2ZW50IHRpbWUuCi0gICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIG5leHRFdmVudEZpbGxUb0ZyYW1lID0gZmlsbFRvRnJhbWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGZsb2F0IG5leHRFdmVudEZpbGxUb1RpbWUgPSBmaWxsVG9UaW1lOwotICAgICAgICAg
ICAgICAgICAgICBmaWxsVG9UaW1lID0gbWluKGVuZFRpbWUsIHRpbWUxICsgZHVyYXRpb24pOwot
ICAgICAgICAgICAgICAgICAgICBmaWxsVG9GcmFtZSA9IEF1ZGlvVXRpbGl0aWVzOjp0aW1lVG9T
YW1wbGVGcmFtZShmaWxsVG9UaW1lIC0gc3RhcnRUaW1lLCBzYW1wbGVSYXRlKTsKLSAgICAgICAg
ICAgICAgICAgICAgZmlsbFRvRnJhbWUgPSBtaW4oZmlsbFRvRnJhbWUsIG51bWJlck9mVmFsdWVz
KTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBJbmRleCBpbnRvIHRoZSBjdXJ2ZSBkYXRhIHVz
aW5nIGEgZmxvYXRpbmctcG9pbnQgdmFsdWUuCi0gICAgICAgICAgICAgICAgICAgIC8vIFdlJ3Jl
IHNjYWxpbmcgdGhlIG51bWJlciBvZiBjdXJ2ZSBwb2ludHMgYnkgdGhlIGR1cmF0aW9uIChzZWUg
Y3VydmVQb2ludHNQZXJGcmFtZSkuCi0gICAgICAgICAgICAgICAgICAgIGZsb2F0IGN1cnZlVmly
dHVhbEluZGV4ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRpbWUxIDwgY3VycmVudFRp
bWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluZGV4IHNvbWV3aGVyZSBpbiB0aGUg
bWlkZGxlIG9mIHRoZSBjdXJ2ZSBkYXRhLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9u
J3QgdXNlIHRpbWVUb1NhbXBsZUZyYW1lKCkgc2luY2Ugd2Ugd2FudCB0aGUgZXhhY3QgZmxvYXRp
bmctcG9pbnQgZnJhbWUuCi0gICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBmcmFtZU9mZnNl
dCA9IChjdXJyZW50VGltZSAtIHRpbWUxKSAqIHNhbXBsZVJhdGU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjdXJ2ZVZpcnR1YWxJbmRleCA9IGN1cnZlUG9pbnRzUGVyRnJhbWUgKiBmcmFtZU9m
ZnNldDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIFJl
bmRlciB0aGUgc3RyZXRjaGVkIGN1cnZlIGRhdGEgdXNpbmcgbmVhcmVzdCBuZWlnaGJvciBzYW1w
bGluZy4KLSAgICAgICAgICAgICAgICAgICAgLy8gT3ZlcnNhbXBsZWQgY3VydmUgZGF0YSBjYW4g
YmUgcHJvdmlkZWQgaWYgc21vb3RobmVzcyBpcyBkZXNpcmVkLgotICAgICAgICAgICAgICAgICAg
ICBmb3IgKDsgd3JpdGVJbmRleCA8IGZpbGxUb0ZyYW1lOyArK3dyaXRlSW5kZXgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIElkZWFsbHkgd2UnZCB1c2Ugcm91bmQoKSBmcm9tIE1hdGhF
eHRyYXMsIGJ1dCB3ZSdyZSBpbiBhIHRpZ2h0IGxvb3AgaGVyZQotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYW5kIHdlJ3JlIHRyYWRpbmcgb2ZmIHByZWNpc2lvbiBmb3IgZXh0cmEgc3BlZWQu
Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjdXJ2ZUluZGV4ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KDAuNSArIGN1cnZlVmlydHVhbEluZGV4KTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgY3VydmVWaXJ0dWFsSW5kZXggKz0gY3VydmVQb2ludHNQZXJGcmFtZTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQm91bmRzIGNoZWNrLgotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGN1cnZlSW5kZXggPCBudW1iZXJPZkN1cnZlUG9pbnRzKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlID0gY3VydmVEYXRhW2N1cnZlSW5kZXhdOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZXNbd3JpdGVJbmRleF0gPSB2YWx1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYW55IHRpbWUg
bGVmdCBhZnRlciB0aGUgZHVyYXRpb24gb2YgdGhpcyBldmVudCBhbmQgdGhlIHN0YXJ0Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBuZXh0LCB0aGVuIGp1c3QgcHJvcGFnYXRlIHRoZSBs
YXN0IHZhbHVlLgotICAgICAgICAgICAgICAgICAgICBmb3IgKDsgd3JpdGVJbmRleCA8IG5leHRF
dmVudEZpbGxUb0ZyYW1lOyArK3dyaXRlSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZXNbd3JpdGVJbmRleF0gPSB2YWx1ZTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBSZS1h
ZGp1c3QgY3VycmVudCB0aW1lCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1lID0gbmV4
dEV2ZW50RmlsbFRvVGltZTsKLQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB0
aGVyZSdzIGFueSB0aW1lIGxlZnQgYWZ0ZXIgcHJvY2Vzc2luZyB0aGUgbGFzdCBldmVudCB0aGVu
IGp1c3QgcHJvcGFnYXRlIHRoZSBsYXN0IHZhbHVlCi0gICAgLy8gdG8gdGhlIGVuZCBvZiB0aGUg
dmFsdWVzIGJ1ZmZlci4KLSAgICBmb3IgKDsgd3JpdGVJbmRleCA8IG51bWJlck9mVmFsdWVzOyAr
K3dyaXRlSW5kZXgpCi0gICAgICAgIHZhbHVlc1t3cml0ZUluZGV4XSA9IHZhbHVlOwotCi0gICAg
cmV0dXJuIHZhbHVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
TkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJh
bVRpbWVsaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Q
YXJhbVRpbWVsaW5lLmgJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExOSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBBdWRpb1BhcmFtVGltZWxpbmVfaAotI2RlZmluZSBBdWRpb1BhcmFtVGltZWxp
bmVfaAotCi0jaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL0Zsb2F0MzJB
cnJheS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvUGFyYW1UaW1lbGluZSB7
Ci1wdWJsaWM6Ci0gICAgQXVkaW9QYXJhbVRpbWVsaW5lKCkKLSAgICAgICAgOiBtX2N1cnJlbnRF
dmVudEluZGV4KDApCi0gICAgICAgICwgbV92YWx1ZSgwKQotICAgIHsKLSAgICB9Ci0KLSAgICB2
b2lkIHNldFZhbHVlQXRUaW1lKGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1lKTsKLSAgICB2b2lkIGxp
bmVhclJhbXBUb1ZhbHVlQXRUaW1lKGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1lKTsKLSAgICB2b2lk
IGV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoZmxvYXQgdmFsdWUsIGZsb2F0IHRpbWUpOwot
ICAgIHZvaWQgc2V0VGFyZ2V0VmFsdWVBdFRpbWUoZmxvYXQgdGFyZ2V0VmFsdWUsIGZsb2F0IHRp
bWUsIGZsb2F0IHRpbWVDb25zdGFudCk7Ci0gICAgdm9pZCBzZXRWYWx1ZUN1cnZlQXRUaW1lKEZs
b2F0MzJBcnJheSogY3VydmUsIGZsb2F0IHRpbWUsIGZsb2F0IGR1cmF0aW9uKTsKLSAgICB2b2lk
IGNhbmNlbFNjaGVkdWxlZFZhbHVlcyhmbG9hdCBzdGFydFRpbWUpOwotCi0gICAgLy8gaGFzVmFs
dWUgaXMgc2V0IHRvIHRydWUgaWYgYSB2YWxpZCB0aW1lbGluZSB2YWx1ZSBpcyByZXR1cm5lZC4K
LSAgICAvLyBvdGhlcndpc2UgZGVmYXVsdFZhbHVlIGlzIHJldHVybmVkLgotICAgIGZsb2F0IHZh
bHVlRm9yQ29udGV4dFRpbWUoQXVkaW9Db250ZXh0KiwgZmxvYXQgZGVmYXVsdFZhbHVlLCBib29s
JiBoYXNWYWx1ZSk7Ci0KLSAgICAvLyBHaXZlbiB0aGUgdGltZSByYW5nZSwgY2FsY3VsYXRlcyBw
YXJhbWV0ZXIgdmFsdWVzIGludG8gdGhlIHZhbHVlcyBidWZmZXIKLSAgICAvLyBhbmQgcmV0dXJu
cyB0aGUgbGFzdCBwYXJhbWV0ZXIgdmFsdWUgY2FsY3VsYXRlZCBmb3IgInZhbHVlcyIgb3IgdGhl
IGRlZmF1bHRWYWx1ZSBpZiBub25lIHdlcmUgY2FsY3VsYXRlZC4KLSAgICAvLyBjb250cm9sUmF0
ZSBpcyB0aGUgcmF0ZSAobnVtYmVyIHBlciBzZWNvbmQpIGF0IHdoaWNoIHBhcmFtZXRlciB2YWx1
ZXMgd2lsbCBiZSBjYWxjdWxhdGVkLgotICAgIC8vIEl0IHNob3VsZCBlcXVhbCBzYW1wbGVSYXRl
IGZvciBzYW1wbGUtYWNjdXJhdGUgcGFyYW1ldGVyIGNoYW5nZXMsIGFuZCBvdGhlcndpc2Ugd2ls
bCB1c3VhbGx5IG1hdGNoCi0gICAgLy8gdGhlIHJlbmRlciBxdWFudHVtIHNpemUgc3VjaCB0aGF0
IHRoZSBwYXJhbWV0ZXIgdmFsdWUgY2hhbmdlcyBvbmNlIHBlciByZW5kZXIgcXVhbnR1bS4KLSAg
ICBmbG9hdCB2YWx1ZXNGb3JUaW1lUmFuZ2UoZmxvYXQgc3RhcnRUaW1lLCBmbG9hdCBlbmRUaW1l
LCBmbG9hdCBkZWZhdWx0VmFsdWUsIGZsb2F0KiB2YWx1ZXMsIHVuc2lnbmVkIG51bWJlck9mVmFs
dWVzLCBmbG9hdCBzYW1wbGVSYXRlLCBmbG9hdCBjb250cm9sUmF0ZSk7Ci0KLSAgICBib29sIGhh
c1ZhbHVlcygpIHsgcmV0dXJuIG1fZXZlbnRzLnNpemUoKTsgfQotCi1wcml2YXRlOgotICAgIGNs
YXNzIFBhcmFtRXZlbnQgewotICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBUeXBlIHsKLSAgICAg
ICAgICAgIFNldFZhbHVlLAotICAgICAgICAgICAgTGluZWFyUmFtcFRvVmFsdWUsCi0gICAgICAg
ICAgICBFeHBvbmVudGlhbFJhbXBUb1ZhbHVlLAotICAgICAgICAgICAgU2V0VGFyZ2V0VmFsdWUs
Ci0gICAgICAgICAgICBTZXRWYWx1ZUN1cnZlLAotICAgICAgICAgICAgTGFzdFR5cGUKLSAgICAg
ICAgfTsKLQotICAgICAgICBQYXJhbUV2ZW50KFR5cGUgdHlwZSwgZmxvYXQgdmFsdWUsIGZsb2F0
IHRpbWUsIGZsb2F0IHRpbWVDb25zdGFudCwgZmxvYXQgZHVyYXRpb24sIFBhc3NSZWZQdHI8Rmxv
YXQzMkFycmF5PiBjdXJ2ZSkKLSAgICAgICAgICAgIDogbV90eXBlKHR5cGUpCi0gICAgICAgICAg
ICAsIG1fdmFsdWUodmFsdWUpCi0gICAgICAgICAgICAsIG1fdGltZSh0aW1lKQotICAgICAgICAg
ICAgLCBtX3RpbWVDb25zdGFudCh0aW1lQ29uc3RhbnQpCi0gICAgICAgICAgICAsIG1fZHVyYXRp
b24oZHVyYXRpb24pCi0gICAgICAgICAgICAsIG1fY3VydmUoY3VydmUpCi0gICAgICAgIHsKLSAg
ICAgICAgfQotCi0gICAgICAgIHVuc2lnbmVkIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KLSAgICAgICAgZmxvYXQgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAg
ICAgIGZsb2F0IHRpbWUoKSBjb25zdCB7IHJldHVybiBtX3RpbWU7IH0KLSAgICAgICAgZmxvYXQg
dGltZUNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV90aW1lQ29uc3RhbnQ7IH0KLSAgICAgICAg
ZmxvYXQgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9Ci0gICAgICAgIEZs
b2F0MzJBcnJheSogY3VydmUoKSB7IHJldHVybiBtX2N1cnZlLmdldCgpOyB9Ci0KLSAgICBwcml2
YXRlOgotICAgICAgICB1bnNpZ25lZCBtX3R5cGU7Ci0gICAgICAgIGZsb2F0IG1fdmFsdWU7Ci0g
ICAgICAgIGZsb2F0IG1fdGltZTsKLSAgICAgICAgZmxvYXQgbV90aW1lQ29uc3RhbnQ7Ci0gICAg
ICAgIGZsb2F0IG1fZHVyYXRpb247Ci0gICAgICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IG1fY3Vy
dmU7Ci0gICAgfTsKLQotICAgIHZvaWQgaW5zZXJ0RXZlbnQoY29uc3QgUGFyYW1FdmVudCYpOwot
ICAgIGZsb2F0IHZhbHVlc0ZvclRpbWVSYW5nZUltcGwoZmxvYXQgc3RhcnRUaW1lLCBmbG9hdCBl
bmRUaW1lLCBmbG9hdCBkZWZhdWx0VmFsdWUsIGZsb2F0KiB2YWx1ZXMsIHVuc2lnbmVkIG51bWJl
ck9mVmFsdWVzLCBmbG9hdCBzYW1wbGVSYXRlLCBmbG9hdCBjb250cm9sUmF0ZSk7Ci0KLSAgICBW
ZWN0b3I8UGFyYW1FdmVudD4gbV9ldmVudHM7Ci0gICAgdW5zaWduZWQgbV9jdXJyZW50RXZlbnRJ
bmRleDsKLSAgICBmbG9hdCBtX3ZhbHVlOwotCi0gICAgTXV0ZXggbV9ldmVudHNMb2NrOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQXVkaW9QYXJhbVRpbWVsaW5l
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdF
dmVudC5jcHAJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1
ZGlvUHJvY2Vzc2luZ0V2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2OCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykK
LQotI2luY2x1ZGUgIkF1ZGlvUHJvY2Vzc2luZ0V2ZW50LmgiCi0KLSNpbmNsdWRlICJBdWRpb0J1
ZmZlci5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1QYXNzUmVmUHRyPEF1ZGlvUHJvY2Vzc2luZ0V2ZW50PiBBdWRpb1Byb2Nlc3NpbmdFdmVudDo6
Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvUHJvY2Vzc2luZ0V2ZW50
KTsKLX0KLQotUGFzc1JlZlB0cjxBdWRpb1Byb2Nlc3NpbmdFdmVudD4gQXVkaW9Qcm9jZXNzaW5n
RXZlbnQ6OmNyZWF0ZShQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBpbnB1dEJ1ZmZlciwgUGFzc1Jl
ZlB0cjxBdWRpb0J1ZmZlcj4gb3V0cHV0QnVmZmVyKQotewotICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQXVkaW9Qcm9jZXNzaW5nRXZlbnQoaW5wdXRCdWZmZXIsIG91dHB1dEJ1ZmZlcikpOwotfQot
Ci1BdWRpb1Byb2Nlc3NpbmdFdmVudDo6QXVkaW9Qcm9jZXNzaW5nRXZlbnQoKQotewotfQotCi1B
dWRpb1Byb2Nlc3NpbmdFdmVudDo6QXVkaW9Qcm9jZXNzaW5nRXZlbnQoUGFzc1JlZlB0cjxBdWRp
b0J1ZmZlcj4gaW5wdXRCdWZmZXIsIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IG91dHB1dEJ1ZmZl
cikKLSAgICA6IEV2ZW50KGV2ZW50TmFtZXMoKS5hdWRpb3Byb2Nlc3NFdmVudCwgdHJ1ZSwgZmFs
c2UpCi0gICAgLCBtX2lucHV0QnVmZmVyKGlucHV0QnVmZmVyKQotICAgICwgbV9vdXRwdXRCdWZm
ZXIob3V0cHV0QnVmZmVyKQotewotfQotCi1BdWRpb1Byb2Nlc3NpbmdFdmVudDo6fkF1ZGlvUHJv
Y2Vzc2luZ0V2ZW50KCkKLXsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBBdWRpb1Byb2Nlc3Np
bmdFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMo
KS5pbnRlcmZhY2VGb3JBdWRpb1Byb2Nlc3NpbmdFdmVudDsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaAkocmV2aXNpb24gMTExMjA4
KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBdWRpb1By
b2Nlc3NpbmdFdmVudF9oCi0jZGVmaW5lIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50X2gKLQotI2luY2x1
ZGUgIkF1ZGlvQnVmZmVyLmgiCi0jaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBBdWRpb0J1ZmZlcjsKLSAgICAKLWNsYXNzIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50
IDogcHVibGljIEV2ZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb1By
b2Nlc3NpbmdFdmVudD4gY3JlYXRlKCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8QXVkaW9Qcm9j
ZXNzaW5nRXZlbnQ+IGNyZWF0ZShQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBpbnB1dEJ1ZmZlciwg
UGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gb3V0cHV0QnVmZmVyKTsKLSAgICAKLSAgICB2aXJ0dWFs
IH5BdWRpb1Byb2Nlc3NpbmdFdmVudCgpOwotCi0gICAgQXVkaW9CdWZmZXIqIGlucHV0QnVmZmVy
KCkgeyByZXR1cm4gbV9pbnB1dEJ1ZmZlci5nZXQoKTsgfQotICAgIEF1ZGlvQnVmZmVyKiBvdXRw
dXRCdWZmZXIoKSB7IHJldHVybiBtX291dHB1dEJ1ZmZlci5nZXQoKTsgfQotCi0gICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKLQotcHJpdmF0ZToK
LSAgICBBdWRpb1Byb2Nlc3NpbmdFdmVudCgpOwotICAgIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50KFBh
c3NSZWZQdHI8QXVkaW9CdWZmZXI+IGlucHV0QnVmZmVyLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVy
PiBvdXRwdXRCdWZmZXIpOwotCi0gICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBtX2lucHV0QnVmZmVy
OwotICAgIFJlZlB0cjxBdWRpb0J1ZmZlcj4gbV9vdXRwdXRCdWZmZXI7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBBdWRpb1Byb2Nlc3NpbmdFdmVudF9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaWRs
CShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Byb2Nl
c3NpbmdFdmVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
Ci0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLW1vZHVsZSBhdWRpbyB7Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9
V0VCX0FVRElPLAotICAgICAgICBKU0dlbmVyYXRlVG9KU09iamVjdAotICAgIF0gQXVkaW9Qcm9j
ZXNzaW5nRXZlbnQgOiBFdmVudCB7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb0J1
ZmZlciBpbnB1dEJ1ZmZlcjsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlvQnVmZmVy
IG91dHB1dEJ1ZmZlcjsgCi0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvU291cmNlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvU291cmNlTm9kZS5oCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBBdWRpb1NvdXJjZU5vZGVfaAotI2RlZmluZSBBdWRpb1NvdXJjZU5vZGVfaAot
Ci0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
QXVkaW9Tb3VyY2VOb2RlIDogcHVibGljIEF1ZGlvTm9kZSB7Ci1wdWJsaWM6Ci0gICAgQXVkaW9T
b3VyY2VOb2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICAg
ICAgOiBBdWRpb05vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkKLSAgICB7Ci0gICAgfQotcHJvdGVj
dGVkOgotICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gMDsgfQotICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJREUg
eyByZXR1cm4gMDsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
QXVkaW9Tb3VyY2VOb2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvU291
cmNlTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9T
b3VyY2VOb2RlLmlkbAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9Tb3VyY2VOb2RlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzNCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
bW9kdWxlIGF1ZGlvIHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1XRUJf
QVVESU8KLSAgICBdIEF1ZGlvU291cmNlTm9kZSA6IEF1ZGlvTm9kZSB7Ci0gICAgfTsKLX0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmNwcAkocmV2aXNp
b24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJCaXF1YWRE
U1BLZXJuZWwuaCIKLQotI2luY2x1ZGUgIkJpcXVhZFByb2Nlc3Nvci5oIgotI2luY2x1ZGUgIkZs
b2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBGSVhNRTogQXMgYSByZWN1cnNpdmUg
bGluZWFyIGZpbHRlciwgZGVwZW5kaW5nIG9uIGl0cyBwYXJhbWV0ZXJzLCBhIGJpcXVhZCBmaWx0
ZXIgY2FuIGhhdmUKLS8vIGFuIGluZmluaXRlIHRhaWxUaW1lLiBJbiBwcmFjdGljZSwgQmlxdWFk
IGZpbHRlcnMgZG8gbm90IHVzdWFsbHkgKGV4Y2VwdCBmb3IgdmVyeSBoaWdoIHJlc29uYW5jZSB2
YWx1ZXMpIAotLy8gaGF2ZSBhIHRhaWxUaW1lIG9mIGxvbmdlciB0aGFuIGFwcHJveC4gMjAwbXMu
IFRoaXMgdmFsdWUgY291bGQgcG9zc2libHkgYmUgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUKLS8v
IHNldHRpbmdzIG9mIHRoZSBCaXF1YWQuCi1zdGF0aWMgY29uc3QgZG91YmxlIE1heEJpcXVhZERl
bGF5VGltZSA9IDAuMjsKLQotdm9pZCBCaXF1YWREU1BLZXJuZWw6OnVwZGF0ZUNvZWZmaWNpZW50
c0lmTmVjZXNzYXJ5KGJvb2wgdXNlU21vb3RoaW5nLCBib29sIGZvcmNlVXBkYXRlKQotewotICAg
IGlmIChmb3JjZVVwZGF0ZSB8fCBiaXF1YWRQcm9jZXNzb3IoKS0+ZmlsdGVyQ29lZmZpY2llbnRz
RGlydHkoKSkgewotICAgICAgICBkb3VibGUgdmFsdWUxOwotICAgICAgICBkb3VibGUgdmFsdWUy
OwotICAgICAgICBkb3VibGUgZ2FpbjsKLSAgICAgICAgCi0gICAgICAgIGlmICh1c2VTbW9vdGhp
bmcpIHsKLSAgICAgICAgICAgIHZhbHVlMSA9IGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIx
KCktPnNtb290aGVkVmFsdWUoKTsKLSAgICAgICAgICAgIHZhbHVlMiA9IGJpcXVhZFByb2Nlc3Nv
cigpLT5wYXJhbWV0ZXIyKCktPnNtb290aGVkVmFsdWUoKTsKLSAgICAgICAgICAgIGdhaW4gPSBi
aXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMygpLT5zbW9vdGhlZFZhbHVlKCk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICB2YWx1ZTEgPSBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1l
dGVyMSgpLT52YWx1ZSgpOwotICAgICAgICAgICAgdmFsdWUyID0gYmlxdWFkUHJvY2Vzc29yKCkt
PnBhcmFtZXRlcjIoKS0+dmFsdWUoKTsKLSAgICAgICAgICAgIGdhaW4gPSBiaXF1YWRQcm9jZXNz
b3IoKS0+cGFyYW1ldGVyMygpLT52YWx1ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ29u
dmVydCBmcm9tIEhlcnR6IHRvIG5vcm1hbGl6ZWQgZnJlcXVlbmN5IDAgLT4gMS4KLSAgICAgICAg
ZG91YmxlIG55cXVpc3QgPSB0aGlzLT5ueXF1aXN0KCk7Ci0gICAgICAgIGRvdWJsZSBub3JtYWxp
emVkRnJlcXVlbmN5ID0gdmFsdWUxIC8gbnlxdWlzdDsKLQotICAgICAgICAvLyBDb25maWd1cmUg
dGhlIGJpcXVhZCB3aXRoIHRoZSBuZXcgZmlsdGVyIHBhcmFtZXRlcnMgZm9yIHRoZSBhcHByb3By
aWF0ZSB0eXBlIG9mIGZpbHRlci4KLSAgICAgICAgc3dpdGNoIChiaXF1YWRQcm9jZXNzb3IoKS0+
dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQmlxdWFkUHJvY2Vzc29yOjpMb3dQYXNzOgotICAgICAg
ICAgICAgbV9iaXF1YWQuc2V0TG93cGFzc1BhcmFtcyhub3JtYWxpemVkRnJlcXVlbmN5LCB2YWx1
ZTIpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBCaXF1YWRQcm9jZXNzb3I6
OkhpZ2hQYXNzOgotICAgICAgICAgICAgbV9iaXF1YWQuc2V0SGlnaHBhc3NQYXJhbXMobm9ybWFs
aXplZEZyZXF1ZW5jeSwgdmFsdWUyKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNh
c2UgQmlxdWFkUHJvY2Vzc29yOjpCYW5kUGFzczoKLSAgICAgICAgICAgIG1fYmlxdWFkLnNldEJh
bmRwYXNzUGFyYW1zKG5vcm1hbGl6ZWRGcmVxdWVuY3ksIHZhbHVlMik7Ci0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBjYXNlIEJpcXVhZFByb2Nlc3Nvcjo6TG93U2hlbGY6Ci0gICAgICAg
ICAgICBtX2JpcXVhZC5zZXRMb3dTaGVsZlBhcmFtcyhub3JtYWxpemVkRnJlcXVlbmN5LCBnYWlu
KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQmlxdWFkUHJvY2Vzc29yOjpI
aWdoU2hlbGY6Ci0gICAgICAgICAgICBtX2JpcXVhZC5zZXRIaWdoU2hlbGZQYXJhbXMobm9ybWFs
aXplZEZyZXF1ZW5jeSwgZ2Fpbik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
IEJpcXVhZFByb2Nlc3Nvcjo6UGVha2luZzoKLSAgICAgICAgICAgIG1fYmlxdWFkLnNldFBlYWtp
bmdQYXJhbXMobm9ybWFsaXplZEZyZXF1ZW5jeSwgdmFsdWUyLCBnYWluKTsKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGNhc2UgQmlxdWFkUHJvY2Vzc29yOjpOb3RjaDoKLSAgICAgICAg
ICAgIG1fYmlxdWFkLnNldE5vdGNoUGFyYW1zKG5vcm1hbGl6ZWRGcmVxdWVuY3ksIHZhbHVlMik7
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEJpcXVhZFByb2Nlc3Nvcjo6QWxs
cGFzczoKLSAgICAgICAgICAgIG1fYmlxdWFkLnNldEFsbHBhc3NQYXJhbXMobm9ybWFsaXplZEZy
ZXF1ZW5jeSwgdmFsdWUyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIEJpcXVhZERTUEtlcm5lbDo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlLCBm
bG9hdCogZGVzdGluYXRpb24sIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgQVNTRVJU
KHNvdXJjZSAmJiBkZXN0aW5hdGlvbiAmJiBiaXF1YWRQcm9jZXNzb3IoKSk7Ci0gICAgCi0gICAg
Ly8gUmVjb21wdXRlIGZpbHRlciBjb2VmZmljaWVudHMgaWYgYW55IG9mIHRoZSBwYXJhbWV0ZXJz
IGhhdmUgY2hhbmdlZC4KLSAgICAvLyBGSVhNRTogYXMgYW4gb3B0aW1pemF0aW9uLCBpbXBsZW1l
bnQgYSB3YXkgdGhhdCBhIEJpcXVhZCBvYmplY3QgY2FuIHNpbXBseSBjb3B5IGl0cyBpbnRlcm5h
bCBmaWx0ZXIgY29lZmZpY2llbnRzIGZyb20gYW5vdGhlciBCaXF1YWQgb2JqZWN0LgotICAgIC8v
IFRoZW4gcmUtZmFjdG9yIHRoaXMgY29kZSB0byBvbmx5IHJ1biBmb3IgdGhlIGZpcnN0IEJpcXVh
ZERTUEtlcm5lbCBvZiBlYWNoIEJpcXVhZFByb2Nlc3Nvci4KLQotICAgIHVwZGF0ZUNvZWZmaWNp
ZW50c0lmTmVjZXNzYXJ5KHRydWUsIGZhbHNlKTsKLQotICAgIG1fYmlxdWFkLnByb2Nlc3Moc291
cmNlLCBkZXN0aW5hdGlvbiwgZnJhbWVzVG9Qcm9jZXNzKTsKLX0KLQotdm9pZCBCaXF1YWREU1BL
ZXJuZWw6OmdldEZyZXF1ZW5jeVJlc3BvbnNlKGludCBuRnJlcXVlbmNpZXMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIGZyZXF1ZW5jeUh6
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBtYWdS
ZXNwb25zZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9h
dCogcGhhc2VSZXNwb25zZSkKLXsKLSAgICBib29sIGlzR29vZCA9IG5GcmVxdWVuY2llcyA+IDAg
JiYgZnJlcXVlbmN5SHogJiYgbWFnUmVzcG9uc2UgJiYgcGhhc2VSZXNwb25zZTsKLSAgICBBU1NF
UlQoaXNHb29kKTsKLSAgICBpZiAoIWlzR29vZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVj
dG9yPGZsb2F0PiBmcmVxdWVuY3kobkZyZXF1ZW5jaWVzKTsKLQotICAgIGRvdWJsZSBueXF1aXN0
ID0gdGhpcy0+bnlxdWlzdCgpOwotCi0gICAgLy8gQ29udmVydCBmcm9tIGZyZXF1ZW5jeSBpbiBI
eiB0byBub3JtYWxpemVkIGZyZXF1ZW5jeSAoMCAtPiAxKSwKLSAgICAvLyB3aXRoIDEgZXF1YWwg
dG8gdGhlIE55cXVpc3QgZnJlcXVlbmN5LgotICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbkZyZXF1
ZW5jaWVzOyArK2spCi0gICAgICAgIGZyZXF1ZW5jeVtrXSA9IG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoZnJlcXVlbmN5SHpba10gLyBueXF1aXN0KTsKLQotICAgIC8vIFdlIHdhbnQgdG8gZ2V0IHRo
ZSBmaW5hbCB2YWx1ZXMgb2YgdGhlIGNvZWZmaWNpZW50cyBhbmQgY29tcHV0ZQotICAgIC8vIHRo
ZSByZXNwb25zZSBmcm9tIHRoYXQgaW5zdGVhZCBvZiBzb21lIGludGVybWVkaWF0ZSBzbW9vdGhl
ZAotICAgIC8vIHNldC4gRm9yY2VmdWxseSB1cGRhdGUgdGhlIGNvZWZmaWNpZW50cyBldmVuIGlm
IHRoZXkgYXJlIG5vdAotICAgIC8vIGRpcnR5LgotCi0gICAgdXBkYXRlQ29lZmZpY2llbnRzSWZO
ZWNlc3NhcnkoZmFsc2UsIHRydWUpOwotCi0gICAgbV9iaXF1YWQuZ2V0RnJlcXVlbmN5UmVzcG9u
c2UobkZyZXF1ZW5jaWVzLCBmcmVxdWVuY3kuZGF0YSgpLCBtYWdSZXNwb25zZSwgcGhhc2VSZXNw
b25zZSk7Ci19Ci0KLWRvdWJsZSBCaXF1YWREU1BLZXJuZWw6OnRhaWxUaW1lKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gTWF4QmlxdWFkRGVsYXlUaW1lOwotfQotCi1kb3VibGUgQmlxdWFkRFNQS2Vy
bmVsOjpsYXRlbmN5VGltZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuaAkocmV2aXNpb24gMTExMjA4KQor
KysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQmlxdWFkRFNQS2VybmVs
X2gKLSNkZWZpbmUgQmlxdWFkRFNQS2VybmVsX2gKLQotI2luY2x1ZGUgIkF1ZGlvRFNQS2VybmVs
LmgiCi0jaW5jbHVkZSAiQmlxdWFkLmgiCi0jaW5jbHVkZSAiQmlxdWFkUHJvY2Vzc29yLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQmlxdWFkUHJvY2Vzc29yOwotCi0vLyBCaXF1
YWREU1BLZXJuZWwgaXMgYW4gQXVkaW9EU1BLZXJuZWwgYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBm
aWx0ZXJpbmcgb25lIGNoYW5uZWwgb2YgYSBCaXF1YWRQcm9jZXNzb3IgdXNpbmcgYSBCaXF1YWQg
b2JqZWN0LgotCi1jbGFzcyBCaXF1YWREU1BLZXJuZWwgOiBwdWJsaWMgQXVkaW9EU1BLZXJuZWwg
ewotcHVibGljOiAgCi0gICAgQmlxdWFkRFNQS2VybmVsKEJpcXVhZFByb2Nlc3NvciogcHJvY2Vz
c29yKQotICAgIDogQXVkaW9EU1BLZXJuZWwocHJvY2Vzc29yKQotICAgIHsKLSAgICB9Ci0gICAg
Ci0gICAgLy8gQXVkaW9EU1BLZXJuZWwKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzcyhjb25zdCBm
bG9hdCogc291cmNlLCBmbG9hdCogZGVzdCwgc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAg
dmlydHVhbCB2b2lkIHJlc2V0KCkgeyBtX2JpcXVhZC5yZXNldCgpOyB9Ci0KLSAgICAvLyBHZXQg
dGhlIG1hZ25pdHVkZSBhbmQgcGhhc2UgcmVzcG9uc2Ugb2YgdGhlIGZpbHRlciBhdCB0aGUgZ2l2
ZW4KLSAgICAvLyBzZXQgb2YgZnJlcXVlbmNpZXMgKGluIEh6KS4gVGhlIHBoYXNlIHJlc3BvbnNl
IGlzIGluIHJhZGlhbnMuCi0gICAgdm9pZCBnZXRGcmVxdWVuY3lSZXNwb25zZShpbnQgbkZyZXF1
ZW5jaWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIGZyZXF1
ZW5jeUh6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIG1hZ1Jlc3BvbnNl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIHBoYXNlUmVzcG9uc2UpOwot
Ci0gICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFOwotCi1wcm90ZWN0ZWQ6Ci0g
ICAgQmlxdWFkIG1fYmlxdWFkOwotICAgIEJpcXVhZFByb2Nlc3NvciogYmlxdWFkUHJvY2Vzc29y
KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmlxdWFkUHJvY2Vzc29yKj4ocHJvY2Vzc29yKCkpOyB9
Ci0KLSAgICAvLyBUbyBwcmV2ZW50IGF1ZGlvIGdsaXRjaGVzIHdoZW4gcGFyYW1ldGVycyBhcmUg
Y2hhbmdlZCwKLSAgICAvLyBkZXppcHBlcmluZyBpcyB1c2VkIHRvIHNsb3dseSBjaGFuZ2UgdGhl
IHBhcmFtZXRlcnMuCi0gICAgLy8gfHVzZVNtb290aGluZ3wgaW1wbGllcyB0aGF0IHdlIHdhbnQg
dG8gdXBkYXRlIHVzaW5nIHRoZQotICAgIC8vIHNtb290aGVkIHZhbHVlcy4gT3RoZXJ3aXNlIHRo
ZSBmaW5hbCB0YXJnZXQgdmFsdWVzIGFyZQotICAgIC8vIHVzZWQuIElmIHxmb3JjZVVwZGF0ZXwg
aXMgdHJ1ZSwgd2UgdXBkYXRlIHRoZSBjb2VmZmljaWVudHMgZXZlbgotICAgIC8vIGlmIHRoZXkg
YXJlIG5vdCBkaXJ0eS4gKFVzZWQgd2hlbiBjb21wdXRpbmcgdGhlIGZyZXF1ZW5jeQotICAgIC8v
IHJlc3BvbnNlLikKLSAgICB2b2lkIHVwZGF0ZUNvZWZmaWNpZW50c0lmTmVjZXNzYXJ5KGJvb2wg
dXNlU21vb3RoaW5nLCBib29sIGZvcmNlVXBkYXRlKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEJpcXVhZERTUEtlcm5lbF9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmNwcAkocmV2aXNpb24gMTExMjA4KQorKysg
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJCaXF1YWRGaWx0ZXJOb2RlLmgiCi0K
LSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQmlx
dWFkRmlsdGVyTm9kZTo6QmlxdWFkRmlsdGVyTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZs
b2F0IHNhbXBsZVJhdGUpCi0gICAgOiBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZShjb250ZXh0LCBz
YW1wbGVSYXRlKQotewotICAgIC8vIEluaXRpYWxseSBzZXR1cCBhcyBsb3dwYXNzIGZpbHRlci4K
LSAgICBtX3Byb2Nlc3NvciA9IGFkb3B0UHRyKG5ldyBCaXF1YWRQcm9jZXNzb3IoQmlxdWFkUHJv
Y2Vzc29yOjpMb3dQYXNzLCBzYW1wbGVSYXRlLCAxLCBmYWxzZSkpOwotICAgIGJpcXVhZFByb2Nl
c3NvcigpLT5wYXJhbWV0ZXIxKCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgYmlxdWFkUHJv
Y2Vzc29yKCktPnBhcmFtZXRlcjIoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICBiaXF1YWRQ
cm9jZXNzb3IoKS0+cGFyYW1ldGVyMygpLT5zZXRDb250ZXh0KGNvbnRleHQpOwotICAgIHNldE5v
ZGVUeXBlKE5vZGVUeXBlQmlxdWFkRmlsdGVyKTsKLX0KLQotdm9pZCBCaXF1YWRGaWx0ZXJOb2Rl
OjpzZXRUeXBlKHVuc2lnbmVkIHNob3J0IHR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IGlmICh0eXBlID4gQmlxdWFkUHJvY2Vzc29yOjpBbGxwYXNzKSB7Ci0gICAgICAgIGVjID0gTk9U
X1NVUFBPUlRFRF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgYmlxdWFk
UHJvY2Vzc29yKCktPnNldFR5cGUoc3RhdGljX2Nhc3Q8QmlxdWFkUHJvY2Vzc29yOjpGaWx0ZXJU
eXBlPih0eXBlKSk7Ci19Ci0KLQotdm9pZCBCaXF1YWRGaWx0ZXJOb2RlOjpnZXRGcmVxdWVuY3lS
ZXNwb25zZShjb25zdCBGbG9hdDMyQXJyYXkqIGZyZXF1ZW5jeUh6LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdDMyQXJyYXkqIG1hZ1Jlc3BvbnNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdDMyQXJyYXkq
IHBoYXNlUmVzcG9uc2UpCi17Ci0gICAgaWYgKCFmcmVxdWVuY3lIeiB8fCAhbWFnUmVzcG9uc2Ug
fHwgIXBoYXNlUmVzcG9uc2UpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpbnQgbiA9IHN0
ZDo6bWluKGZyZXF1ZW5jeUh6LT5sZW5ndGgoKSwKLSAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
bWluKG1hZ1Jlc3BvbnNlLT5sZW5ndGgoKSwgcGhhc2VSZXNwb25zZS0+bGVuZ3RoKCkpKTsKLQot
ICAgIGlmIChuKSB7Ci0gICAgICAgIGJpcXVhZFByb2Nlc3NvcigpLT5nZXRGcmVxdWVuY3lSZXNw
b25zZShuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZnJlcXVlbmN5SHotPmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1hZ1Jlc3BvbnNlLT5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwaGFzZVJlc3BvbnNlLT5kYXRhKCkpOwotICAgIH0K
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJ
TykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmgJKHJl
dmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBCaXF1YWRGaWx0ZXJOb2RlX2gKLSNkZWZpbmUgQmlxdWFkRmlsdGVyTm9kZV9oCi0KLSNpbmNs
dWRlICJBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oIgotI2luY2x1ZGUgIkJpcXVhZFByb2Nlc3Nv
ci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvUGFyYW07Ci0gICAgCi1j
bGFzcyBCaXF1YWRGaWx0ZXJOb2RlIDogcHVibGljIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlIHsK
LXB1YmxpYzoKLSAgICAvLyBUaGVzZSBtdXN0IGJlIGRlZmluZWQgYXMgaW4gdGhlIC5pZGwgZmls
ZSBhbmQgbXVzdCBtYXRjaCB0aG9zZSBpbiB0aGUgQmlxdWFkUHJvY2Vzc29yIGNsYXNzLgotICAg
IGVudW0gewotICAgICAgICBMT1dQQVNTID0gMCwKLSAgICAgICAgSElHSFBBU1MgPSAxLAotICAg
ICAgICBCQU5EUEFTUyA9IDIsCi0gICAgICAgIExPV1NIRUxGID0gMywKLSAgICAgICAgSElHSFNI
RUxGID0gNCwKLSAgICAgICAgUEVBS0lORyA9IDUsCi0gICAgICAgIE5PVENIID0gNiwKLSAgICAg
ICAgQUxMUEFTUyA9IDcKLSAgICB9OwotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8QmlxdWFkRmls
dGVyTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmlxdWFkRmlsdGVyTm9kZShjb250
ZXh0LCBzYW1wbGVSYXRlKSk7ICAgICAgCi0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIHNob3J0
IHR5cGUoKSB7IHJldHVybiBiaXF1YWRQcm9jZXNzb3IoKS0+dHlwZSgpOyB9Ci0gICAgdm9pZCBz
ZXRUeXBlKHVuc2lnbmVkIHNob3J0IHR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIEF1ZGlv
UGFyYW0qIGZyZXF1ZW5jeSgpIHsgcmV0dXJuIGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIx
KCk7IH0KLSAgICBBdWRpb1BhcmFtKiBxKCkgeyByZXR1cm4gYmlxdWFkUHJvY2Vzc29yKCktPnBh
cmFtZXRlcjIoKTsgfQotICAgIEF1ZGlvUGFyYW0qIGdhaW4oKSB7IHJldHVybiBiaXF1YWRQcm9j
ZXNzb3IoKS0+cGFyYW1ldGVyMygpOyB9Ci0KLSAgICAvLyBHZXQgdGhlIG1hZ25pdHVkZSBhbmQg
cGhhc2UgcmVzcG9uc2Ugb2YgdGhlIGZpbHRlciBhdCB0aGUgZ2l2ZW4KLSAgICAvLyBzZXQgb2Yg
ZnJlcXVlbmNpZXMgKGluIEh6KS4gVGhlIHBoYXNlIHJlc3BvbnNlIGlzIGluIHJhZGlhbnMuCi0g
ICAgdm9pZCBnZXRGcmVxdWVuY3lSZXNwb25zZShjb25zdCBGbG9hdDMyQXJyYXkqIGZyZXF1ZW5j
eUh6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXQzMkFycmF5KiBtYWdSZXNw
b25zZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0MzJBcnJheSogcGhhc2VS
ZXNwb25zZSk7Ci0KLXByaXZhdGU6Ci0gICAgQmlxdWFkRmlsdGVyTm9kZShBdWRpb0NvbnRleHQq
LCBmbG9hdCBzYW1wbGVSYXRlKTsKLQotICAgIEJpcXVhZFByb2Nlc3NvciogYmlxdWFkUHJvY2Vz
c29yKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmlxdWFkUHJvY2Vzc29yKj4ocHJvY2Vzc29yKCkp
OyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBCaXF1YWRGaWx0
ZXJOb2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5v
ZGUuaWRsCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1
YWRGaWx0ZXJOb2RlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw1MSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotbW9kdWxlIGF1ZGlvIHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25h
bD1XRUJfQVVESU8sCi0gICAgICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0Ci0gICAgXSBCaXF1YWRG
aWx0ZXJOb2RlIDogQXVkaW9Ob2RlIHsKLSAgICAgICAgLy8gRmlsdGVyIHR5cGUuCi0gICAgICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0IExPV1BBU1MgPSAwOwotICAgICAgICBjb25zdCB1bnNpZ25l
ZCBzaG9ydCBISUdIUEFTUyA9IDE7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEJBTkRQ
QVNTID0gMjsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTE9XU0hFTEYgPSAzOwotICAg
ICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBISUdIU0hFTEYgPSA0OwotICAgICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBQRUFLSU5HID0gNTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
Tk9UQ0ggPSA2OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBBTExQQVNTID0gNzsKLQot
ICAgICAgICBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgdHlwZQotICAgICAgICAgICAgc2V0dGVy
IHJhaXNlcyhET01FeGNlcHRpb24pOwotICAgICAgICAKLSAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIEF1ZGlvUGFyYW0gZnJlcXVlbmN5OyAvLyBpbiBIZXJ0egotICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgQXVkaW9QYXJhbSBROyAvLyBRdWFsaXR5IGZhY3RvcgotICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgQXVkaW9QYXJhbSBnYWluOyAvLyBpbiBEZWNpYmVscwotCi0gICAgICAgIHZv
aWQgZ2V0RnJlcXVlbmN5UmVzcG9uc2UoaW4gRmxvYXQzMkFycmF5IGZyZXF1ZW5jeUh6LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEZsb2F0MzJBcnJheSBtYWdSZXNwb25z
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBGbG9hdDMyQXJyYXkgcGhh
c2VSZXNwb25zZSk7Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0Jp
cXVhZFByb2Nlc3Nvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QmlxdWFkUHJvY2Vzc29yLmNwcAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJf
QVVESU8pCi0KLSNpbmNsdWRlICJCaXF1YWRQcm9jZXNzb3IuaCIKLQotI2luY2x1ZGUgIkJpcXVh
ZERTUEtlcm5lbC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1CaXF1YWRQcm9jZXNz
b3I6OkJpcXVhZFByb2Nlc3NvcihmbG9hdCBzYW1wbGVSYXRlLCBzaXplX3QgbnVtYmVyT2ZDaGFu
bmVscywgYm9vbCBhdXRvSW5pdGlhbGl6ZSkKLSAgICA6IEF1ZGlvRFNQS2VybmVsUHJvY2Vzc29y
KHNhbXBsZVJhdGUsIG51bWJlck9mQ2hhbm5lbHMpCi0gICAgLCBtX3R5cGUoTG93UGFzcykKLSAg
ICAsIG1fcGFyYW1ldGVyMSgwKQotICAgICwgbV9wYXJhbWV0ZXIyKDApCi0gICAgLCBtX3BhcmFt
ZXRlcjMoMCkKLSAgICAsIG1fZmlsdGVyQ29lZmZpY2llbnRzRGlydHkodHJ1ZSkKLXsKLSAgICBk
b3VibGUgbnlxdWlzdCA9IDAuNSAqIHRoaXMtPnNhbXBsZVJhdGUoKTsKLQotICAgIC8vIENyZWF0
ZSBwYXJhbWV0ZXJzIGZvciBCaXF1YWRGaWx0ZXJOb2RlLgotICAgIG1fcGFyYW1ldGVyMSA9IEF1
ZGlvUGFyYW06OmNyZWF0ZSgiZnJlcXVlbmN5IiwgMzUwLjAsIDEwLjAsIG55cXVpc3QpOwotICAg
IG1fcGFyYW1ldGVyMiA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgiUSIsIDEsIDAuMDAwMSwgMTAwMC4w
KTsKLSAgICBtX3BhcmFtZXRlcjMgPSBBdWRpb1BhcmFtOjpjcmVhdGUoImdhaW4iLCAwLjAsIC00
MCwgNDApOwotCi0gICAgaWYgKGF1dG9Jbml0aWFsaXplKQotICAgICAgICBpbml0aWFsaXplKCk7
Ci19Ci0KLUJpcXVhZFByb2Nlc3Nvcjo6QmlxdWFkUHJvY2Vzc29yKEZpbHRlclR5cGUgdHlwZSwg
ZmxvYXQgc2FtcGxlUmF0ZSwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGJvb2wgYXV0b0luaXRp
YWxpemUpCi0gICAgOiBBdWRpb0RTUEtlcm5lbFByb2Nlc3NvcihzYW1wbGVSYXRlLCBudW1iZXJP
ZkNoYW5uZWxzKQotICAgICwgbV90eXBlKHR5cGUpCi0gICAgLCBtX3BhcmFtZXRlcjEoMCkKLSAg
ICAsIG1fcGFyYW1ldGVyMigwKQotICAgICwgbV9wYXJhbWV0ZXIzKDApCi0gICAgLCBtX2ZpbHRl
ckNvZWZmaWNpZW50c0RpcnR5KHRydWUpCi17Ci0gICAgZG91YmxlIG55cXVpc3QgPSAwLjUgKiB0
aGlzLT5zYW1wbGVSYXRlKCk7Ci0gICAgCi0gICAgLy8gSGFuZGxlIHRoZSBkZXByZWNhdGVkIExv
d1Bhc3MyRmlsdGVyTm9kZSBhbmQgSGlnaFBhc3MyRmlsdGVyTm9kZS4KLSAgICBzd2l0Y2ggKHR5
cGUpIHsKLSAgICAvLyBIaWdocGFzcyBhbmQgbG93cGFzcyBzaGFyZSB0aGUgc2FtZSBwYXJhbWV0
ZXJzIGFuZCBvbmx5IGRpZmZlciBpbiBmaWx0ZXIgdHlwZS4KLSAgICBjYXNlIExvd1Bhc3M6Ci0g
ICAgY2FzZSBIaWdoUGFzczoKLSAgICAgICAgbV9wYXJhbWV0ZXIxID0gQXVkaW9QYXJhbTo6Y3Jl
YXRlKCJmcmVxdWVuY3kiLCAzNTAuMCwgMjAuMCwgbnlxdWlzdCk7Ci0gICAgICAgIG1fcGFyYW1l
dGVyMiA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgicmVzb25hbmNlIiwgMC4wLCAtMjAuMCwgMjAuMCk7
Ci0gICAgICAgIG1fcGFyYW1ldGVyMyA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgidW51c2VkIiwgMC4w
LCAwLjAsIDEuMCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgaWYgKGF1dG9Jbml0aWFsaXplKQotICAg
ICAgICBpbml0aWFsaXplKCk7Ci19Ci0KLUJpcXVhZFByb2Nlc3Nvcjo6fkJpcXVhZFByb2Nlc3Nv
cigpCi17Ci0gICAgaWYgKGlzSW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgdW5pbml0aWFsaXplKCk7
Ci19Ci0KLVBhc3NPd25QdHI8QXVkaW9EU1BLZXJuZWw+IEJpcXVhZFByb2Nlc3Nvcjo6Y3JlYXRl
S2VybmVsKCkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEJpcXVhZERTUEtlcm5lbCh0aGlz
KSk7Ci19Ci0KLXZvaWQgQmlxdWFkUHJvY2Vzc29yOjpjaGVja0ZvckRpcnR5Q29lZmZpY2llbnRz
KCkKLXsKLSAgICAvLyBEZWFsIHdpdGggc21vb3RoaW5nIC8gZGUtemlwcGVyaW5nLiBTdGFydCBv
dXQgYXNzdW1pbmcgZmlsdGVyIHBhcmFtZXRlcnMgYXJlIG5vdCBjaGFuZ2luZy4KLQotICAgIC8v
IFRoZSBCaXF1YWREU1BLZXJuZWwgb2JqZWN0cyByZWx5IG9uIHRoaXMgdmFsdWUgdG8gc2VlIGlm
IHRoZXkgbmVlZCB0byByZS1jb21wdXRlIHRoZWlyIGludGVybmFsIGZpbHRlciBjb2VmZmljaWVu
dHMuCi0gICAgbV9maWx0ZXJDb2VmZmljaWVudHNEaXJ0eSA9IGZhbHNlOwotICAgIAotICAgIGlm
IChtX2hhc0p1c3RSZXNldCkgewotICAgICAgICAvLyBTbmFwIHRvIGV4YWN0IHZhbHVlcyBmaXJz
dCB0aW1lIGFmdGVyIHJlc2V0LCB0aGVuIHNtb290aCBmb3Igc3Vic2VxdWVudCBjaGFuZ2VzLgot
ICAgICAgICBtX3BhcmFtZXRlcjEtPnJlc2V0U21vb3RoZWRWYWx1ZSgpOwotICAgICAgICBtX3Bh
cmFtZXRlcjItPnJlc2V0U21vb3RoZWRWYWx1ZSgpOwotICAgICAgICBtX3BhcmFtZXRlcjMtPnJl
c2V0U21vb3RoZWRWYWx1ZSgpOwotICAgICAgICBtX2ZpbHRlckNvZWZmaWNpZW50c0RpcnR5ID0g
dHJ1ZTsKLSAgICAgICAgbV9oYXNKdXN0UmVzZXQgPSBmYWxzZTsKLSAgICB9IGVsc2UgewotICAg
ICAgICAvLyBTbW9vdGggYWxsIG9mIHRoZSBmaWx0ZXIgcGFyYW1ldGVycy4gSWYgdGhleSBoYXZl
bid0IHlldCBjb252ZXJnZWQgdG8gdGhlaXIgdGFyZ2V0IHZhbHVlIHRoZW4gbWFyayBjb2VmZmlj
aWVudHMgYXMgZGlydHkuCi0gICAgICAgIGJvb2wgaXNTdGFibGUxID0gbV9wYXJhbWV0ZXIxLT5z
bW9vdGgoKTsKLSAgICAgICAgYm9vbCBpc1N0YWJsZTIgPSBtX3BhcmFtZXRlcjItPnNtb290aCgp
OwotICAgICAgICBib29sIGlzU3RhYmxlMyA9IG1fcGFyYW1ldGVyMy0+c21vb3RoKCk7Ci0gICAg
ICAgIGlmICghKGlzU3RhYmxlMSAmJiBpc1N0YWJsZTIgJiYgaXNTdGFibGUzKSkKLSAgICAgICAg
ICAgIG1fZmlsdGVyQ29lZmZpY2llbnRzRGlydHkgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBC
aXF1YWRQcm9jZXNzb3I6OnByb2Nlc3MoY29uc3QgQXVkaW9CdXMqIHNvdXJjZSwgQXVkaW9CdXMq
IGRlc3RpbmF0aW9uLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIGlmICghaXNJbml0
aWFsaXplZCgpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uLT56ZXJvKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgICAgIAotICAgIGNoZWNrRm9yRGlydHlDb2VmZmljaWVudHMoKTsKLSAg
ICAgICAgICAgIAotICAgIC8vIEZvciBlYWNoIGNoYW5uZWwgb2Ygb3VyIGlucHV0LCBwcm9jZXNz
IHVzaW5nIHRoZSBjb3JyZXNwb25kaW5nIEJpcXVhZERTUEtlcm5lbCBpbnRvIHRoZSBvdXRwdXQg
Y2hhbm5lbC4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9rZXJuZWxzLnNpemUoKTsg
KytpKQotICAgICAgICBtX2tlcm5lbHNbaV0tPnByb2Nlc3Moc291cmNlLT5jaGFubmVsKGkpLT5k
YXRhKCksIGRlc3RpbmF0aW9uLT5jaGFubmVsKGkpLT5tdXRhYmxlRGF0YSgpLCBmcmFtZXNUb1By
b2Nlc3MpOwotfQotCi12b2lkIEJpcXVhZFByb2Nlc3Nvcjo6c2V0VHlwZShGaWx0ZXJUeXBlIHR5
cGUpCi17Ci0gICAgaWYgKHR5cGUgIT0gbV90eXBlKSB7Ci0gICAgICAgIG1fdHlwZSA9IHR5cGU7
Ci0gICAgICAgIHJlc2V0KCk7IC8vIFRoZSBmaWx0ZXIgc3RhdGUgbXVzdCBiZSByZXNldCBvbmx5
IGlmIHRoZSB0eXBlIGhhcyBjaGFuZ2VkLgotICAgIH0KLX0KLQotdm9pZCBCaXF1YWRQcm9jZXNz
b3I6OmdldEZyZXF1ZW5jeVJlc3BvbnNlKGludCBuRnJlcXVlbmNpZXMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIGZyZXF1ZW5jeUh6LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBtYWdSZXNw
b25zZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCog
cGhhc2VSZXNwb25zZSkKLXsKLSAgICAvLyBDb21wdXRlIHRoZSBmcmVxdWVuY3kgcmVzcG9uc2Ug
b24gYSBzZXBhcmF0ZSB0ZW1wb3Jhcnkga2VybmVsCi0gICAgLy8gdG8gYXZvaWQgaW50ZXJmZXJp
bmcgd2l0aCB0aGUgcHJvY2Vzc2luZyBydW5uaW5nIGluIHRoZSBhdWRpbwotICAgIC8vIHRocmVh
ZCBvbiB0aGUgbWFpbiBrZXJuZWxzLgotICAgIAotICAgIE93blB0cjxCaXF1YWREU1BLZXJuZWw+
IHJlc3BvbnNlS2VybmVsID0gYWRvcHRQdHIobmV3IEJpcXVhZERTUEtlcm5lbCh0aGlzKSk7Ci0K
LSAgICByZXNwb25zZUtlcm5lbC0+Z2V0RnJlcXVlbmN5UmVzcG9uc2UobkZyZXF1ZW5jaWVzLCBm
cmVxdWVuY3lIeiwgbWFnUmVzcG9uc2UsIHBoYXNlUmVzcG9uc2UpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmgJKHJldmlzaW9uIDExMTIwOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEJpcXVhZFByb2Nlc3Nvcl9o
Ci0jZGVmaW5lIEJpcXVhZFByb2Nlc3Nvcl9oCi0KLSNpbmNsdWRlICJBdWRpb0RTUEtlcm5lbC5o
IgotI2luY2x1ZGUgIkF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmgiCi0jaW5jbHVkZSAiQXVkaW9O
b2RlLmgiCi0jaW5jbHVkZSAiQXVkaW9QYXJhbS5oIgotI2luY2x1ZGUgIkJpcXVhZC5oIgotI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBCaXF1YWRQ
cm9jZXNzb3IgaXMgYW4gQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3Igd2hpY2ggdXNlcyBCaXF1YWQg
b2JqZWN0cyB0byBpbXBsZW1lbnQgc2V2ZXJhbCBjb21tb24gZmlsdGVycy4KLQotY2xhc3MgQmlx
dWFkUHJvY2Vzc29yIDogcHVibGljIEF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yIHsKLXB1YmxpYzoK
LSAgICBlbnVtIEZpbHRlclR5cGUgewotICAgICAgICBMb3dQYXNzID0gMCwKLSAgICAgICAgSGln
aFBhc3MgPSAxLAotICAgICAgICBCYW5kUGFzcyA9IDIsCi0gICAgICAgIExvd1NoZWxmID0gMywK
LSAgICAgICAgSGlnaFNoZWxmID0gNCwKLSAgICAgICAgUGVha2luZyA9IDUsCi0gICAgICAgIE5v
dGNoID0gNiwKLSAgICAgICAgQWxscGFzcyA9IDcKLSAgICB9OwotCi0gICAgQmlxdWFkUHJvY2Vz
c29yKGZsb2F0IHNhbXBsZVJhdGUsIHNpemVfdCBudW1iZXJPZkNoYW5uZWxzLCBib29sIGF1dG9J
bml0aWFsaXplKTsKLQotICAgIC8vIE9sZCBjb25zdHJ1Y3RvciB1c2VkIGJ5IGRlcHJlY2F0ZWQg
TG93UGFzczJGaWx0ZXJOb2RlIGFuZCBIaWdoUGFzczJGaWx0ZXJOb2RlCi0gICAgQmlxdWFkUHJv
Y2Vzc29yKEZpbHRlclR5cGUsIGZsb2F0IHNhbXBsZVJhdGUsIHNpemVfdCBudW1iZXJPZkNoYW5u
ZWxzLCBib29sIGF1dG9Jbml0aWFsaXplID0gdHJ1ZSk7Ci0KLSAgICB2aXJ0dWFsIH5CaXF1YWRQ
cm9jZXNzb3IoKTsKLSAgICAKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8QXVkaW9EU1BLZXJuZWw+
IGNyZWF0ZUtlcm5lbCgpOwotICAgICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzcyhjb25z
dCBBdWRpb0J1cyogc291cmNlLCBBdWRpb0J1cyogZGVzdGluYXRpb24sIHNpemVfdCBmcmFtZXNU
b1Byb2Nlc3MpOwotCi0gICAgLy8gR2V0IHRoZSBtYWduaXR1ZGUgYW5kIHBoYXNlIHJlc3BvbnNl
IG9mIHRoZSBmaWx0ZXIgYXQgdGhlIGdpdmVuCi0gICAgLy8gc2V0IG9mIGZyZXF1ZW5jaWVzIChp
biBIeikuIFRoZSBwaGFzZSByZXNwb25zZSBpcyBpbiByYWRpYW5zLgotICAgIHZvaWQgZ2V0RnJl
cXVlbmN5UmVzcG9uc2UoaW50IG5GcmVxdWVuY2llcywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGZsb2F0KiBmcmVxdWVuY3lIeiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZsb2F0KiBtYWdSZXNwb25zZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZsb2F0KiBwaGFzZVJlc3BvbnNlKTsKLQotICAgIHZvaWQgY2hlY2tGb3JEaXJ0eUNvZWZmaWNp
ZW50cygpOwotICAgIAotICAgIGJvb2wgZmlsdGVyQ29lZmZpY2llbnRzRGlydHkoKSBjb25zdCB7
IHJldHVybiBtX2ZpbHRlckNvZWZmaWNpZW50c0RpcnR5OyB9Ci0KLSAgICBBdWRpb1BhcmFtKiBw
YXJhbWV0ZXIxKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXIxLmdldCgpOyB9Ci0gICAgQXVkaW9QYXJh
bSogcGFyYW1ldGVyMigpIHsgcmV0dXJuIG1fcGFyYW1ldGVyMi5nZXQoKTsgfQotICAgIEF1ZGlv
UGFyYW0qIHBhcmFtZXRlcjMoKSB7IHJldHVybiBtX3BhcmFtZXRlcjMuZ2V0KCk7IH0KLQotICAg
IEZpbHRlclR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIHZvaWQgc2V0
VHlwZShGaWx0ZXJUeXBlKTsKLQotcHJpdmF0ZToKLSAgICBGaWx0ZXJUeXBlIG1fdHlwZTsKLQot
ICAgIFJlZlB0cjxBdWRpb1BhcmFtPiBtX3BhcmFtZXRlcjE7Ci0gICAgUmVmUHRyPEF1ZGlvUGFy
YW0+IG1fcGFyYW1ldGVyMjsKLSAgICBSZWZQdHI8QXVkaW9QYXJhbT4gbV9wYXJhbWV0ZXIzOwot
Ci0gICAgLy8gc28gRFNQIGtlcm5lbHMga25vdyB3aGVuIHRvIHJlLWNvbXB1dGUgY29lZmZpY2ll
bnRzCi0gICAgYm9vbCBtX2ZpbHRlckNvZWZmaWNpZW50c0RpcnR5OwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQmlxdWFkUHJvY2Vzc29yX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCShyZXZpc2lvbiAxMTEyMDgpCisr
KyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwxNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJDb252b2x2ZXJOb2RlLmgiCi0KLSNp
bmNsdWRlICJBdWRpb0J1ZmZlci5oIgotI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgotI2luY2x1
ZGUgIkF1ZGlvTm9kZUlucHV0LmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCi0jaW5j
bHVkZSAiUmV2ZXJiLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotLy8gTm90ZSBh
Ym91dCBlbXBpcmljYWwgdHVuaW5nOgotLy8gVGhlIG1heGltdW0gRkZUIHNpemUgYWZmZWN0cyBy
ZXZlcmIgcGVyZm9ybWFuY2UgYW5kIGFjY3VyYWN5LgotLy8gSWYgdGhlIHJldmVyYiBpcyBzaW5n
bGUtdGhyZWFkZWQgYW5kIHByb2Nlc3NlcyBlbnRpcmVseSBpbiB0aGUgcmVhbC10aW1lIGF1ZGlv
IHRocmVhZCwKLS8vIGl0J3MgaW1wb3J0YW50IG5vdCB0byBtYWtlIHRoaXMgdG9vIGhpZ2guICBJ
biB0aGlzIGNhc2UgODE5MiBpcyBhIGdvb2QgdmFsdWUuCi0vLyBCdXQsIHRoZSBSZXZlcmIgb2Jq
ZWN0IGlzIG11bHRpLXRocmVhZGVkLCBzbyB3ZSB3YW50IHRoaXMgYXMgaGlnaCBhcyBwb3NzaWJs
ZSB3aXRob3V0IGxvc2luZyB0b28gbXVjaCBhY2N1cmFjeS4KLS8vIFZlcnkgbGFyZ2UgRkZUcyB3
aWxsIGhhdmUgd29yc2UgcGhhc2UgZXJyb3JzLiBHaXZlbiB0aGVzZSBjb25zdHJhaW50cyAzMjc2
OCBpcyBhIGdvb2QgY29tcHJvbWlzZS4KLWNvbnN0IHNpemVfdCBNYXhGRlRTaXplID0gMzI3Njg7
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ29udm9sdmVyTm9kZTo6Q29udm9sdmVyTm9kZShB
dWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBBdWRpb05vZGUo
Y29udGV4dCwgc2FtcGxlUmF0ZSkKLSAgICAsIG1fbm9ybWFsaXplKHRydWUpCi17Ci0gICAgYWRk
SW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7Ci0gICAgYWRkT3V0cHV0
KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywgMikpKTsKLSAgICAKLSAgICBzZXRO
b2RlVHlwZShOb2RlVHlwZUNvbnZvbHZlcik7Ci0gICAgCi0gICAgaW5pdGlhbGl6ZSgpOwotfQot
Ci1Db252b2x2ZXJOb2RlOjp+Q29udm9sdmVyTm9kZSgpCi17Ci0gICAgdW5pbml0aWFsaXplKCk7
Ci19Ci0KLXZvaWQgQ29udm9sdmVyTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNz
KQotewotICAgIEF1ZGlvQnVzKiBvdXRwdXRCdXMgPSBvdXRwdXQoMCktPmJ1cygpOwotICAgIEFT
U0VSVChvdXRwdXRCdXMpOwotCi0gICAgLy8gU3luY2hyb25pemUgd2l0aCBwb3NzaWJsZSBkeW5h
bWljIGNoYW5nZXMgdG8gdGhlIGltcHVsc2UgcmVzcG9uc2UuCi0gICAgaWYgKG1fcHJvY2Vzc0xv
Y2sudHJ5TG9jaygpKSB7Ci0gICAgICAgIGlmICghaXNJbml0aWFsaXplZCgpIHx8ICFtX3JldmVy
Yi5nZXQoKSkKLSAgICAgICAgICAgIG91dHB1dEJ1cy0+emVybygpOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIC8vIFByb2Nlc3MgdXNpbmcgdGhlIGNvbnZvbHV0aW9uIGVuZ2luZS4KLSAg
ICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBjYW4gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG5vdGhp
bmcgaXMgY29ubmVjdGVkIHRvIHRoZSBpbnB1dCwgaW4gd2hpY2ggY2FzZSB3ZSdsbCBqdXN0IGZl
ZWQgc2lsZW5jZSBpbnRvIHRoZSBjb252b2x2ZXIuCi0gICAgICAgICAgICAvLyBGSVhNRTogIElm
IHdlIHdhbnRlZCB0byBnZXQgZmFuY3kgd2UgY291bGQgdHJ5IHRvIGZhY3RvciBpbiB0aGUgJ3Rh
aWwgdGltZScgYW5kIHN0b3AgcHJvY2Vzc2luZyBvbmNlIHRoZSB0YWlsIGRpZXMgZG93biBpZgot
ICAgICAgICAgICAgLy8gd2Uga2VlcCBnZXR0aW5nIGZlZCBzaWxlbmNlLgotICAgICAgICAgICAg
bV9yZXZlcmItPnByb2Nlc3MoaW5wdXQoMCktPmJ1cygpLCBvdXRwdXRCdXMsIGZyYW1lc1RvUHJv
Y2Vzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fcHJvY2Vzc0xvY2sudW5sb2Nr
KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gVG9vIGJhZCAtIHRoZSB0cnlMb2NrKCkgZmFp
bGVkLiAgV2UgbXVzdCBiZSBpbiB0aGUgbWlkZGxlIG9mIHNldHRpbmcgYSBuZXcgaW1wdWxzZSBy
ZXNwb25zZS4KLSAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7Ci0gICAgfQotfQotCi12b2lkIENv
bnZvbHZlck5vZGU6OnJlc2V0KCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9wcm9jZXNz
TG9jayk7Ci0gICAgaWYgKG1fcmV2ZXJiLmdldCgpKQotICAgICAgICBtX3JldmVyYi0+cmVzZXQo
KTsKLX0KLQotdm9pZCBDb252b2x2ZXJOb2RlOjppbml0aWFsaXplKCkKLXsKLSAgICBpZiAoaXNJ
bml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIEF1ZGlvTm9kZTo6
aW5pdGlhbGl6ZSgpOwotfQotCi12b2lkIENvbnZvbHZlck5vZGU6OnVuaW5pdGlhbGl6ZSgpCi17
Ci0gICAgaWYgKCFpc0luaXRpYWxpemVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcmV2
ZXJiLmNsZWFyKCk7Ci0gICAgQXVkaW9Ob2RlOjp1bmluaXRpYWxpemUoKTsKLX0KLQotdm9pZCBD
b252b2x2ZXJOb2RlOjpzZXRCdWZmZXIoQXVkaW9CdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotICAgIAotICAgIEFTU0VSVChidWZmZXIpOwotICAgIGlmICgh
YnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxz
ID0gYnVmZmVyLT5udW1iZXJPZkNoYW5uZWxzKCk7Ci0gICAgc2l6ZV90IGJ1ZmZlckxlbmd0aCA9
IGJ1ZmZlci0+bGVuZ3RoKCk7Ci0KLSAgICAvLyBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBz
dXBwb3J0cyB1cCB0byBmb3VyIGNoYW5uZWwgaW1wdWxzZSByZXNwb25zZXMsIHdoaWNoIGFyZSBp
bnRlcnByZXRlZCBhcyB0cnVlLXN0ZXJlbyAoc2VlIFJldmVyYiBjbGFzcykuCi0gICAgYm9vbCBp
c0J1ZmZlckdvb2QgPSBudW1iZXJPZkNoYW5uZWxzID4gMCAmJiBudW1iZXJPZkNoYW5uZWxzIDw9
IDQgJiYgYnVmZmVyTGVuZ3RoOwotICAgIEFTU0VSVChpc0J1ZmZlckdvb2QpOwotICAgIGlmICgh
aXNCdWZmZXJHb29kKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXcmFwIHRoZSBBdWRpb0J1
ZmZlciBieSBhbiBBdWRpb0J1cy4gSXQncyBhbiBlZmZpY2llbnQgcG9pbnRlciBzZXQgYW5kIG5v
dCBhIG1lbWNweSgpLgotICAgIC8vIFRoaXMgbWVtb3J5IGlzIHNpbXBseSB1c2VkIGluIHRoZSBS
ZXZlcmIgY29uc3RydWN0b3IgYW5kIG5vIHJlZmVyZW5jZSB0byBpdCBpcyBrZXB0IGZvciBsYXRl
ciB1c2UgaW4gdGhhdCBjbGFzcy4KLSAgICBBdWRpb0J1cyBidWZmZXJCdXMobnVtYmVyT2ZDaGFu
bmVscywgYnVmZmVyTGVuZ3RoLCBmYWxzZSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bWJlck9mQ2hhbm5lbHM7ICsraSkKLSAgICAgICAgYnVmZmVyQnVzLnNldENoYW5uZWxNZW1v
cnkoaSwgYnVmZmVyLT5nZXRDaGFubmVsRGF0YShpKS0+ZGF0YSgpLCBidWZmZXJMZW5ndGgpOwot
Ci0gICAgYnVmZmVyQnVzLnNldFNhbXBsZVJhdGUoYnVmZmVyLT5zYW1wbGVSYXRlKCkpOwotCi0g
ICAgLy8gQ3JlYXRlIHRoZSByZXZlcmIgd2l0aCB0aGUgZ2l2ZW4gaW1wdWxzZSByZXNwb25zZS4K
LSAgICBib29sIHVzZUJhY2tncm91bmRUaHJlYWRzID0gIWNvbnRleHQoKS0+aXNPZmZsaW5lQ29u
dGV4dCgpOwotICAgIE93blB0cjxSZXZlcmI+IHJldmVyYiA9IGFkb3B0UHRyKG5ldyBSZXZlcmIo
JmJ1ZmZlckJ1cywgQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVzLCBNYXhGRlRTaXpl
LCAyLCB1c2VCYWNrZ3JvdW5kVGhyZWFkcywgbV9ub3JtYWxpemUpKTsKLQotICAgIHsKLSAgICAg
ICAgLy8gU3luY2hyb25pemUgd2l0aCBwcm9jZXNzKCkuCi0gICAgICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX3Byb2Nlc3NMb2NrKTsKLSAgICAgICAgbV9yZXZlcmIgPSByZXZlcmIucmVsZWFzZSgp
OwotICAgICAgICBtX2J1ZmZlciA9IGJ1ZmZlcjsKLSAgICB9Ci19Ci0KLUF1ZGlvQnVmZmVyKiBD
b252b2x2ZXJOb2RlOjpidWZmZXIoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgcmV0dXJuIG1fYnVmZmVyLmdldCgpOwotfQotCi1kb3VibGUgQ29udm9sdmVyTm9kZTo6dGFp
bFRpbWUoKSBjb25zdAotewotICAgIHJldHVybiBtX3JldmVyYiA/IG1fcmV2ZXJiLT5pbXB1bHNl
UmVzcG9uc2VMZW5ndGgoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oc2FtcGxlUmF0ZSgpKSA6IDA7
Ci19Ci0KLWRvdWJsZSBDb252b2x2ZXJOb2RlOjpsYXRlbmN5VGltZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fcmV2ZXJiID8gbV9yZXZlcmItPmxhdGVuY3lGcmFtZXMoKSAvIHN0YXRpY19jYXN0
PGRvdWJsZT4oc2FtcGxlUmF0ZSgpKSA6IDA7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9Db252b2x2ZXJOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQ29udm9sdmVyTm9kZS5oCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9Db252b2x2ZXJOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgQ29udm9sdmVyTm9kZV9oCi0jZGVmaW5lIENvbnZvbHZlck5v
ZGVfaAotCi0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9CdWZmZXI7Ci1jbGFzcyBSZXZlcmI7Ci0g
ICAgCi1jbGFzcyBDb252b2x2ZXJOb2RlIDogcHVibGljIEF1ZGlvTm9kZSB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q29udm9sdmVyTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCog
Y29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ29udm9sdmVyTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKSk7ICAgICAgCi0gICAgfQot
ICAgIAotICAgIHZpcnR1YWwgfkNvbnZvbHZlck5vZGUoKTsKLSAgICAKLSAgICAvLyBBdWRpb05v
ZGUKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpOwot
ICAgIHZpcnR1YWwgdm9pZCB1bmluaXRpYWxpemUoKTsKLQotICAgIC8vIEltcHVsc2UgcmVzcG9u
c2VzCi0gICAgdm9pZCBzZXRCdWZmZXIoQXVkaW9CdWZmZXIqKTsKLSAgICBBdWRpb0J1ZmZlciog
YnVmZmVyKCk7Ci0KLSAgICBib29sIG5vcm1hbGl6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9ybWFs
aXplOyB9Ci0gICAgdm9pZCBzZXROb3JtYWxpemUoYm9vbCBub3JtYWxpemUpIHsgbV9ub3JtYWxp
emUgPSBub3JtYWxpemU7IH0KLQotcHJpdmF0ZToKLSAgICBDb252b2x2ZXJOb2RlKEF1ZGlvQ29u
dGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwotCi0gICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUo
KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0
IE9WRVJSSURFOwotCi0gICAgT3duUHRyPFJldmVyYj4gbV9yZXZlcmI7Ci0gICAgUmVmUHRyPEF1
ZGlvQnVmZmVyPiBtX2J1ZmZlcjsKLQotICAgIC8vIFRoaXMgc3luY2hyb25pemVzIGR5bmFtaWMg
Y2hhbmdlcyB0byB0aGUgY29udm9sdXRpb24gaW1wdWxzZSByZXNwb25zZSB3aXRoIHByb2Nlc3Mo
KS4KLSAgICBtdXRhYmxlIE11dGV4IG1fcHJvY2Vzc0xvY2s7Ci0KLSAgICAvLyBOb3JtYWxpemUg
dGhlIGltcHVsc2UgcmVzcG9uc2Ugb3Igbm90LiBNdXN0IGRlZmF1bHQgdG8gdHJ1ZS4KLSAgICBi
b29sIG1fbm9ybWFsaXplOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gQ29udm9sdmVyTm9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2
ZXJOb2RlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2
ZXJOb2RlLmlkbAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
Q29udm9sdmVyTm9kZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLW1vZHVsZSBhdWRpbyB7Ci0gICAgLy8gQSBsaW5lYXIgY29udm9sdXRpb24gZWZmZWN0
Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAotICAgICAg
ICBKU0dlbmVyYXRlVG9KU09iamVjdAotICAgIF0gQ29udm9sdmVyTm9kZSA6IEF1ZGlvTm9kZSB7
Ci0gICAgICAgIGF0dHJpYnV0ZSBbSlNDdXN0b21TZXR0ZXJdIEF1ZGlvQnVmZmVyIGJ1ZmZlcjsK
LSAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gbm9ybWFsaXplOwotICAgIH07Ci19CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9ET01XaW5kb3dXZWJBdWRpby5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRE9NV2luZG93V2ViQXVkaW8uaWRsCShyZXZpc2lv
biAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9ET01XaW5kb3dXZWJBdWRpby5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi1tb2R1bGUgd2luZG93IHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlv
bmFsPVdFQl9BVURJTywKLSAgICAgICAgU3VwcGxlbWVudGFsPURPTVdpbmRvdwotICAgIF0gRE9N
V2luZG93V2ViQXVkaW8gewotI2lmICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdF
X0NQUAotICAgICAgICBhdHRyaWJ1dGUgW0pTQ3VzdG9tR2V0dGVyLCBWOEVuYWJsZWRBdFJ1bnRp
bWVdIEF1ZGlvQ29udGV4dENvbnN0cnVjdG9yIHdlYmtpdEF1ZGlvQ29udGV4dDsKLSAgICAgICAg
YXR0cmlidXRlIEF1ZGlvUGFubmVyTm9kZUNvbnN0cnVjdG9yIHdlYmtpdEF1ZGlvUGFubmVyTm9k
ZTsKLSAgICAgICAgYXR0cmlidXRlIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50Q29uc3RydWN0b3IgQXVk
aW9Qcm9jZXNzaW5nRXZlbnQ7Ci0gICAgICAgIGF0dHJpYnV0ZSBPZmZsaW5lQXVkaW9Db21wbGV0
aW9uRXZlbnRDb25zdHJ1Y3RvciBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ7Ci0jZW5kaWYK
LSAgICB9OwotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWZhdWx0QXVkaW9E
ZXN0aW5hdGlvbk5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAJKHJldmlzaW9uIDExMTIwOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJEZWZhdWx0QXVkaW9E
ZXN0aW5hdGlvbk5vZGUuaCIKLQotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotICAgIAotRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjpEZWZhdWx0QXVkaW9E
ZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0KQotICAgIDogQXVkaW9EZXN0aW5h
dGlvbk5vZGUoY29udGV4dCwgQXVkaW9EZXN0aW5hdGlvbjo6aGFyZHdhcmVTYW1wbGVSYXRlKCkp
Ci17Ci19Ci0KLURlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6fkRlZmF1bHRBdWRpb0Rlc3Rp
bmF0aW9uTm9kZSgpCi17Ci0gICAgdW5pbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgRGVmYXVsdEF1
ZGlvRGVzdGluYXRpb25Ob2RlOjppbml0aWFsaXplKCkKLXsKLSAgICBpZiAoaXNJbml0aWFsaXpl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCBoYXJkd2FyZVNhbXBsZVJhdGUgPSBB
dWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJhdGUoKTsKLSAgICBMT0coV2ViQXVkaW8s
ICI+Pj4+IGhhcmR3YXJlU2FtcGxlUmF0ZSA9ICVmXG4iLCBoYXJkd2FyZVNhbXBsZVJhdGUpOwot
ICAgIAotICAgIG1fZGVzdGluYXRpb24gPSBBdWRpb0Rlc3RpbmF0aW9uOjpjcmVhdGUoKnRoaXMs
IGhhcmR3YXJlU2FtcGxlUmF0ZSk7Ci0gICAgCi0gICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7
Ci19Ci0KLXZvaWQgRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjp1bmluaXRpYWxpemUoKQot
ewotICAgIGlmICghaXNJbml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Rl
c3RpbmF0aW9uLT5zdG9wKCk7Ci0KLSAgICBBdWRpb05vZGU6OnVuaW5pdGlhbGl6ZSgpOwotfQot
Ci12b2lkIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6c3RhcnRSZW5kZXJpbmcoKQotewot
ICAgIEFTU0VSVChpc0luaXRpYWxpemVkKCkpOwotICAgIGlmIChpc0luaXRpYWxpemVkKCkpCi0g
ICAgICAgIG1fZGVzdGluYXRpb24tPnN0YXJ0KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaAkocmV2aXNp
b24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGlu
YXRpb25Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0g
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlX2gKLSNkZWZpbmUgRGVmYXVsdEF1
ZGlvRGVzdGluYXRpb25Ob2RlX2gKLQotI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb24uaCIKLSNp
bmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb0NvbnRleHQ7Ci0gICAgCi1jbGFz
cyBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUgOiBwdWJsaWMgQXVkaW9EZXN0aW5hdGlvbk5v
ZGUgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERlZmF1bHRBdWRpb0Rlc3RpbmF0
aW9uTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCogY29udGV4dCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlKGNvbnRleHQpKTsg
ICAgIAotICAgIH0KLQotICAgIHZpcnR1YWwgfkRlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZSgp
OwotICAgIAotICAgIC8vIEF1ZGlvTm9kZSAgIAotICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXpl
KCk7Ci0gICAgdmlydHVhbCB2b2lkIHVuaW5pdGlhbGl6ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBz
dGFydFJlbmRlcmluZygpOwotICAgIAotcHJpdmF0ZToKLSAgICBEZWZhdWx0QXVkaW9EZXN0aW5h
dGlvbk5vZGUoQXVkaW9Db250ZXh0Kik7Ci0KLSAgICBPd25QdHI8QXVkaW9EZXN0aW5hdGlvbj4g
bV9kZXN0aW5hdGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9EZWxheURTUEtlcm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vRGVsYXlEU1BLZXJuZWwuY3BwCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9EZWxheURTUEtlcm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQ5
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUo
V0VCX0FVRElPKQotCi0jaW5jbHVkZSAiRGVsYXlEU1BLZXJuZWwuaCIKLQotI2luY2x1ZGUgIkF1
ZGlvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotCi11c2luZyBuYW1lc3BhY2Ug
c3RkOwotCi1jb25zdCBmbG9hdCBTbW9vdGhpbmdUaW1lQ29uc3RhbnQgPSAwLjAyMGY7IC8vIDIw
bXMKLSAgCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURlbGF5RFNQS2VybmVsOjpEZWxheURTUEtl
cm5lbChEZWxheVByb2Nlc3NvciogcHJvY2Vzc29yKQotICAgIDogQXVkaW9EU1BLZXJuZWwocHJv
Y2Vzc29yKQotICAgICwgbV93cml0ZUluZGV4KDApCi0gICAgLCBtX2ZpcnN0VGltZSh0cnVlKQot
ewotICAgIEFTU0VSVChwcm9jZXNzb3IgJiYgcHJvY2Vzc29yLT5zYW1wbGVSYXRlKCkgPiAwKTsK
LSAgICBpZiAoIXByb2Nlc3NvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9tYXhEZWxheVRp
bWUgPSBwcm9jZXNzb3ItPm1heERlbGF5VGltZSgpOwotICAgIG1fYnVmZmVyLmFsbG9jYXRlKHN0
YXRpY19jYXN0PHNpemVfdD4ocHJvY2Vzc29yLT5zYW1wbGVSYXRlKCkgKiBtX21heERlbGF5VGlt
ZSkpOwotICAgIG1fYnVmZmVyLnplcm8oKTsKLQotICAgIG1fc21vb3RoaW5nUmF0ZSA9IEF1ZGlv
VXRpbGl0aWVzOjpkaXNjcmV0ZVRpbWVDb25zdGFudEZvclNhbXBsZVJhdGUoU21vb3RoaW5nVGlt
ZUNvbnN0YW50LCBwcm9jZXNzb3ItPnNhbXBsZVJhdGUoKSk7Ci19Ci0KLURlbGF5RFNQS2VybmVs
OjpEZWxheURTUEtlcm5lbChkb3VibGUgbWF4RGVsYXlUaW1lLCBmbG9hdCBzYW1wbGVSYXRlKQot
ICAgIDogQXVkaW9EU1BLZXJuZWwoc2FtcGxlUmF0ZSkKLSAgICAsIG1fbWF4RGVsYXlUaW1lKG1h
eERlbGF5VGltZSkKLSAgICAsIG1fd3JpdGVJbmRleCgwKQotICAgICwgbV9maXJzdFRpbWUodHJ1
ZSkKLXsKLSAgICBBU1NFUlQobWF4RGVsYXlUaW1lID4gMC4wKTsKLSAgICBpZiAobWF4RGVsYXlU
aW1lIDw9IDAuMCkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBzaXplX3QgYnVmZmVy
TGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzYW1wbGVSYXRlICogbWF4RGVsYXlUaW1lKTsK
LSAgICBBU1NFUlQoYnVmZmVyTGVuZ3RoKTsKLSAgICBpZiAoIWJ1ZmZlckxlbmd0aCkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIG1fYnVmZmVyLmFsbG9jYXRlKGJ1ZmZlckxlbmd0aCk7Ci0g
ICAgbV9idWZmZXIuemVybygpOwotCi0gICAgbV9zbW9vdGhpbmdSYXRlID0gQXVkaW9VdGlsaXRp
ZXM6OmRpc2NyZXRlVGltZUNvbnN0YW50Rm9yU2FtcGxlUmF0ZShTbW9vdGhpbmdUaW1lQ29uc3Rh
bnQsIHNhbXBsZVJhdGUpOwotfQotCi12b2lkIERlbGF5RFNQS2VybmVsOjpwcm9jZXNzKGNvbnN0
IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgc2l6ZV90IGZyYW1lc1RvUHJvY2Vz
cykKLXsKLSAgICBzaXplX3QgYnVmZmVyTGVuZ3RoID0gbV9idWZmZXIuc2l6ZSgpOwotICAgIGZs
b2F0KiBidWZmZXIgPSBtX2J1ZmZlci5kYXRhKCk7Ci0KLSAgICBBU1NFUlQoYnVmZmVyTGVuZ3Ro
KTsKLSAgICBpZiAoIWJ1ZmZlckxlbmd0aCkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAg
ICBBU1NFUlQoc291cmNlICYmIGRlc3RpbmF0aW9uKTsKLSAgICBpZiAoIXNvdXJjZSB8fCAhZGVz
dGluYXRpb24pCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgZmxvYXQgc2FtcGxlUmF0
ZSA9IHRoaXMtPnNhbXBsZVJhdGUoKTsKLSAgICBkb3VibGUgZGVsYXlUaW1lID0gZGVsYXlQcm9j
ZXNzb3IoKSA/IGRlbGF5UHJvY2Vzc29yKCktPmRlbGF5VGltZSgpLT52YWx1ZSgpIDogbV9kZXNp
cmVkRGVsYXlGcmFtZXMgLyBzYW1wbGVSYXRlOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBkZWxh
eSB0aW1lIGlzIGluIGEgdmFsaWQgcmFuZ2UuCi0gICAgZGVsYXlUaW1lID0gbWluKG1heERlbGF5
VGltZSgpLCBkZWxheVRpbWUpOwotICAgIGRlbGF5VGltZSA9IG1heCgwLjAsIGRlbGF5VGltZSk7
Ci0KLSAgICBpZiAobV9maXJzdFRpbWUpIHsKLSAgICAgICAgbV9jdXJyZW50RGVsYXlUaW1lID0g
ZGVsYXlUaW1lOwotICAgICAgICBtX2ZpcnN0VGltZSA9IGZhbHNlOwotICAgIH0KLSAgICAKLSAg
ICBpbnQgbiA9IGZyYW1lc1RvUHJvY2VzczsKLSAgICB3aGlsZSAobi0tKSB7Ci0gICAgICAgIC8v
IEFwcHJvYWNoIGRlc2lyZWQgZGVsYXkgdGltZS4KLSAgICAgICAgbV9jdXJyZW50RGVsYXlUaW1l
ICs9IChkZWxheVRpbWUgLSBtX2N1cnJlbnREZWxheVRpbWUpICogbV9zbW9vdGhpbmdSYXRlOwot
Ci0gICAgICAgIGRvdWJsZSBkZXNpcmVkRGVsYXlGcmFtZXMgPSBtX2N1cnJlbnREZWxheVRpbWUg
KiBzYW1wbGVSYXRlOwotCi0gICAgICAgIGRvdWJsZSByZWFkUG9zaXRpb24gPSBtX3dyaXRlSW5k
ZXggKyBidWZmZXJMZW5ndGggLSBkZXNpcmVkRGVsYXlGcmFtZXM7Ci0gICAgICAgIGlmIChyZWFk
UG9zaXRpb24gPj0gYnVmZmVyTGVuZ3RoKQotICAgICAgICAgICAgcmVhZFBvc2l0aW9uIC09IGJ1
ZmZlckxlbmd0aDsKLQotICAgICAgICAvLyBMaW5lYXJseSBpbnRlcnBvbGF0ZSBpbi1iZXR3ZWVu
IGRlbGF5IHRpbWVzLgotICAgICAgICBpbnQgcmVhZEluZGV4MSA9IHN0YXRpY19jYXN0PGludD4o
cmVhZFBvc2l0aW9uKTsKLSAgICAgICAgaW50IHJlYWRJbmRleDIgPSAocmVhZEluZGV4MSArIDEp
ICUgYnVmZmVyTGVuZ3RoOwotICAgICAgICBkb3VibGUgaW50ZXJwb2xhdGlvbkZhY3RvciA9IHJl
YWRQb3NpdGlvbiAtIHJlYWRJbmRleDE7Ci0KLSAgICAgICAgZG91YmxlIGlucHV0ID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KCpzb3VyY2UrKyk7Ci0gICAgICAgIGJ1ZmZlclttX3dyaXRlSW5kZXhdID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGlucHV0KTsKLSAgICAgICAgbV93cml0ZUluZGV4ID0gKG1fd3Jp
dGVJbmRleCArIDEpICUgYnVmZmVyTGVuZ3RoOyAgICAgICAgCi0gICAgICAgIAotICAgICAgICBk
b3VibGUgc2FtcGxlMSA9IGJ1ZmZlcltyZWFkSW5kZXgxXTsKLSAgICAgICAgZG91YmxlIHNhbXBs
ZTIgPSBidWZmZXJbcmVhZEluZGV4Ml07Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgb3V0cHV0
ID0gKDEuMCAtIGludGVycG9sYXRpb25GYWN0b3IpICogc2FtcGxlMSArIGludGVycG9sYXRpb25G
YWN0b3IgKiBzYW1wbGUyOwotCi0gICAgICAgICpkZXN0aW5hdGlvbisrID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG91dHB1dCk7Ci0gICAgfSAgICAgICAgCi19Ci0KLXZvaWQgRGVsYXlEU1BLZXJuZWw6
OnJlc2V0KCkKLXsKLSAgICBtX2ZpcnN0VGltZSA9IHRydWU7Ci0gICAgbV9idWZmZXIuemVybygp
OwotfQotCi1kb3VibGUgRGVsYXlEU1BLZXJuZWw6OnRhaWxUaW1lKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9tYXhEZWxheVRpbWU7Ci19Ci0KLWRvdWJsZSBEZWxheURTUEtlcm5lbDo6bGF0ZW5j
eVRpbWUoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9EZWxheURTUEtlcm5lbC5oCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9EZWxheURTUEtlcm5lbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERlbGF5RFNQS2VybmVsX2gKLSNkZWZpbmUgRGVs
YXlEU1BLZXJuZWxfaAotCi0jaW5jbHVkZSAiQXVkaW9BcnJheS5oIgotI2luY2x1ZGUgIkF1ZGlv
RFNQS2VybmVsLmgiCi0jaW5jbHVkZSAiRGVsYXlQcm9jZXNzb3IuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBEZWxheVByb2Nlc3NvcjsKLSAgICAKLWNsYXNzIERlbGF5RFNQS2Vy
bmVsIDogcHVibGljIEF1ZGlvRFNQS2VybmVsIHsKLXB1YmxpYzogIAotICAgIERlbGF5RFNQS2Vy
bmVsKERlbGF5UHJvY2Vzc29yKik7Ci0gICAgRGVsYXlEU1BLZXJuZWwoZG91YmxlIG1heERlbGF5
VGltZSwgZmxvYXQgc2FtcGxlUmF0ZSk7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3Mo
Y29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCBzaXplX3QgZnJhbWVzVG9Q
cm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKLSAgICAKLSAgICBkb3VibGUgbWF4
RGVsYXlUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9tYXhEZWxheVRpbWU7IH0KLSAgICAKLSAgICB2
b2lkIHNldERlbGF5RnJhbWVzKGRvdWJsZSBudW1iZXJPZkZyYW1lcykgeyBtX2Rlc2lyZWREZWxh
eUZyYW1lcyA9IG51bWJlck9mRnJhbWVzOyB9Ci0KLSAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGlt
ZSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29u
c3QgT1ZFUlJJREU7Ci0KLXByaXZhdGU6Ci0gICAgQXVkaW9GbG9hdEFycmF5IG1fYnVmZmVyOwot
ICAgIGRvdWJsZSBtX21heERlbGF5VGltZTsKLSAgICBpbnQgbV93cml0ZUluZGV4OwotICAgIGRv
dWJsZSBtX2N1cnJlbnREZWxheVRpbWU7Ci0gICAgZG91YmxlIG1fc21vb3RoaW5nUmF0ZTsKLSAg
ICBib29sIG1fZmlyc3RUaW1lOwotICAgIGRvdWJsZSBtX2Rlc2lyZWREZWxheUZyYW1lczsKLQot
ICAgIERlbGF5UHJvY2Vzc29yKiBkZWxheVByb2Nlc3NvcigpIHsgcmV0dXJuIHN0YXRpY19jYXN0
PERlbGF5UHJvY2Vzc29yKj4ocHJvY2Vzc29yKCkpOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBEZWxheURTUEtlcm5lbF9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9EZWxheU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0RlbGF5Tm9kZS5jcHAJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0RlbGF5Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8p
Ci0KLSNpbmNsdWRlICJEZWxheU5vZGUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1EZWxh
eU5vZGU6OkRlbGF5Tm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUs
IGRvdWJsZSBtYXhEZWxheVRpbWUpCi0gICAgOiBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZShjb250
ZXh0LCBzYW1wbGVSYXRlKQotewotICAgIG1fcHJvY2Vzc29yID0gYWRvcHRQdHIobmV3IERlbGF5
UHJvY2Vzc29yKHNhbXBsZVJhdGUsIDEsIG1heERlbGF5VGltZSkpOwotICAgIGRlbGF5VGltZSgp
LT5zZXRDb250ZXh0KGNvbnRleHQpOwotICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlRGVsYXkpOwot
fQotCi1BdWRpb1BhcmFtKiBEZWxheU5vZGU6OmRlbGF5VGltZSgpCi17Ci0gICAgcmV0dXJuIGRl
bGF5UHJvY2Vzc29yKCktPmRlbGF5VGltZSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vRGVsYXlOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
RGVsYXlOb2RlLmgJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0RlbGF5Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgot
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIERlbGF5Tm9kZV9oCi0jZGVmaW5lIERlbGF5Tm9kZV9oCi0KLSNpbmNsdWRlICJB
dWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oIgotI2luY2x1ZGUgIkRlbGF5UHJvY2Vzc29yLmgiCi0j
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBBdWRpb1BhcmFtOwotCi1jbGFzcyBEZWxheU5vZGUgOiBwdWJsaWMgQXVkaW9CYXNpY1Byb2Nl
c3Nvck5vZGUgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERlbGF5Tm9kZT4gY3Jl
YXRlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSwgZG91YmxlIG1heERl
bGF5VGltZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGVsYXlOb2RlKGNv
bnRleHQsIHNhbXBsZVJhdGUsIG1heERlbGF5VGltZSkpOyAgICAgIAotICAgIH0KLQotICAgIEF1
ZGlvUGFyYW0qIGRlbGF5VGltZSgpOwotCi1wcml2YXRlOgotICAgIERlbGF5Tm9kZShBdWRpb0Nv
bnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlLCBkb3VibGUgbWF4RGVsYXlUaW1lKTsKLQotICAgIERl
bGF5UHJvY2Vzc29yKiBkZWxheVByb2Nlc3NvcigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PERlbGF5
UHJvY2Vzc29yKj4ocHJvY2Vzc29yKCkpOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBEZWxheU5vZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
RGVsYXlOb2RlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxh
eU5vZGUuaWRsCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9E
ZWxheU5vZGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgot
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci1tb2R1bGUgYXVkaW8gewotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdF
Ql9BVURJTywKLSAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKLSAgICBdIERlbGF5Tm9kZSA6
IEF1ZGlvTm9kZSB7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIGRlbGF5
VGltZTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlQcm9j
ZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5UHJv
Y2Vzc29yLmNwcAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
RGVsYXlQcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotCi0j
aW5jbHVkZSAiRGVsYXlQcm9jZXNzb3IuaCIKLSAKLSNpbmNsdWRlICJEZWxheURTUEtlcm5lbC5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURlbGF5UHJvY2Vzc29yOjpEZWxheVByb2Nlc3Nv
cihmbG9hdCBzYW1wbGVSYXRlLCB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBkb3VibGUgbWF4
RGVsYXlUaW1lKQotICAgIDogQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3Ioc2FtcGxlUmF0ZSwgbnVt
YmVyT2ZDaGFubmVscykKLSAgICAsIG1fbWF4RGVsYXlUaW1lKG1heERlbGF5VGltZSkKLXsKLSAg
ICBtX2RlbGF5VGltZSA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgiZGVsYXlUaW1lIiwgMC4wLCAwLjAs
IG1heERlbGF5VGltZSk7Ci19Ci0KLURlbGF5UHJvY2Vzc29yOjp+RGVsYXlQcm9jZXNzb3IoKQot
ewotICAgIGlmIChpc0luaXRpYWxpemVkKCkpCi0gICAgICAgIHVuaW5pdGlhbGl6ZSgpOwotfQot
Ci1QYXNzT3duUHRyPEF1ZGlvRFNQS2VybmVsPiBEZWxheVByb2Nlc3Nvcjo6Y3JlYXRlS2VybmVs
KCkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGF5RFNQS2VybmVsKHRoaXMpKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5UHJvY2Vzc29yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuaAkocmV2aXNpb24g
MTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBEZWxheVBy
b2Nlc3Nvcl9oCi0jZGVmaW5lIERlbGF5UHJvY2Vzc29yX2gKLQotI2luY2x1ZGUgIkF1ZGlvRFNQ
S2VybmVsUHJvY2Vzc29yLmgiCi0jaW5jbHVkZSAiQXVkaW9QYXJhbS5oIgotCi0jaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9EU1BLZXJuZWw7Ci0gICAgCi1jbGFzcyBEZWxheVByb2Nl
c3NvciA6IHB1YmxpYyBBdWRpb0RTUEtlcm5lbFByb2Nlc3NvciB7Ci1wdWJsaWM6Ci0gICAgRGVs
YXlQcm9jZXNzb3IoZmxvYXQgc2FtcGxlUmF0ZSwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywg
ZG91YmxlIG1heERlbGF5VGltZSk7Ci0gICAgdmlydHVhbCB+RGVsYXlQcm9jZXNzb3IoKTsKLSAg
ICAKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8QXVkaW9EU1BLZXJuZWw+IGNyZWF0ZUtlcm5lbCgp
OwotICAgICAgICAKLSAgICBBdWRpb1BhcmFtKiBkZWxheVRpbWUoKSBjb25zdCB7IHJldHVybiBt
X2RlbGF5VGltZS5nZXQoKTsgfQotCi0gICAgZG91YmxlIG1heERlbGF5VGltZSgpIHsgcmV0dXJu
IG1fbWF4RGVsYXlUaW1lOyB9Ci1wcml2YXRlOgotCi0gICAgUmVmUHRyPEF1ZGlvUGFyYW0+IG1f
ZGVsYXlUaW1lOwotICAgIGRvdWJsZSBtX21heERlbGF5VGltZTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIERlbGF5UHJvY2Vzc29yX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwCShyZXZp
c2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNz
b3JOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0g
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRl
ICJEeW5hbWljc0NvbXByZXNzb3JOb2RlLmgiCi0KLSNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIK
LSNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5o
IgotI2luY2x1ZGUgIkR5bmFtaWNzQ29tcHJlc3Nvci5oIgotCi0vLyBTZXQgb3V0cHV0IHRvIHN0
ZXJlbyBieSBkZWZhdWx0Lgotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHROdW1iZXJPZk91
dHB1dENoYW5uZWxzID0gMjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1EeW5hbWljc0NvbXBy
ZXNzb3JOb2RlOjpEeW5hbWljc0NvbXByZXNzb3JOb2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwg
ZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQot
ewotICAgIGFkZElucHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVJbnB1dCh0aGlzKSkpOwotICAg
IGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMsIGRlZmF1bHROdW1i
ZXJPZk91dHB1dENoYW5uZWxzKSkpOwotCi0gICAgc2V0Tm9kZVR5cGUoTm9kZVR5cGVEeW5hbWlj
c0NvbXByZXNzb3IpOwotCi0gICAgbV90aHJlc2hvbGQgPSBBdWRpb1BhcmFtOjpjcmVhdGUoInRo
cmVzaG9sZCIsIC0yNCwgLTEwMCwgMCk7Ci0gICAgbV9rbmVlID0gQXVkaW9QYXJhbTo6Y3JlYXRl
KCJrbmVlIiwgMzAsIDAsIDQwKTsKLSAgICBtX3JhdGlvID0gQXVkaW9QYXJhbTo6Y3JlYXRlKCJy
YXRpbyIsIDEyLCAxLCAyMCk7Ci0gICAgbV9yZWR1Y3Rpb24gPSBBdWRpb1BhcmFtOjpjcmVhdGUo
InJlZHVjdGlvbiIsIDAsIC0yMCwgMCk7Ci0KLSAgICBtX3RocmVzaG9sZC0+c2V0Q29udGV4dChj
b250ZXh0KTsKLSAgICBtX2tuZWUtPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgbV9yYXRpby0+
c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICBtX3JlZHVjdGlvbi0+c2V0Q29udGV4dChjb250ZXh0
KTsKLQotICAgIGluaXRpYWxpemUoKTsKLX0KLQotRHluYW1pY3NDb21wcmVzc29yTm9kZTo6fkR5
bmFtaWNzQ29tcHJlc3Nvck5vZGUoKQotewotICAgIHVuaW5pdGlhbGl6ZSgpOwotfQotCi12b2lk
IER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OnByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykK
LXsKLSAgICBBdWRpb0J1cyogb3V0cHV0QnVzID0gb3V0cHV0KDApLT5idXMoKTsKLSAgICBBU1NF
UlQob3V0cHV0QnVzKTsKLQotICAgIGZsb2F0IHRocmVzaG9sZCA9IG1fdGhyZXNob2xkLT52YWx1
ZSgpOwotICAgIGZsb2F0IGtuZWUgPSBtX2tuZWUtPnZhbHVlKCk7Ci0gICAgZmxvYXQgcmF0aW8g
PSBtX3JhdGlvLT52YWx1ZSgpOwotCi0gICAgbV9keW5hbWljc0NvbXByZXNzb3ItPnNldFBhcmFt
ZXRlclZhbHVlKER5bmFtaWNzQ29tcHJlc3Nvcjo6UGFyYW1UaHJlc2hvbGQsIHRocmVzaG9sZCk7
Ci0gICAgbV9keW5hbWljc0NvbXByZXNzb3ItPnNldFBhcmFtZXRlclZhbHVlKER5bmFtaWNzQ29t
cHJlc3Nvcjo6UGFyYW1LbmVlLCBrbmVlKTsKLSAgICBtX2R5bmFtaWNzQ29tcHJlc3Nvci0+c2V0
UGFyYW1ldGVyVmFsdWUoRHluYW1pY3NDb21wcmVzc29yOjpQYXJhbVJhdGlvLCByYXRpbyk7Ci0K
LSAgICBtX2R5bmFtaWNzQ29tcHJlc3Nvci0+cHJvY2VzcyhpbnB1dCgwKS0+YnVzKCksIG91dHB1
dEJ1cywgZnJhbWVzVG9Qcm9jZXNzKTsKLQotICAgIGZsb2F0IHJlZHVjdGlvbiA9IG1fZHluYW1p
Y3NDb21wcmVzc29yLT5wYXJhbWV0ZXJWYWx1ZShEeW5hbWljc0NvbXByZXNzb3I6OlBhcmFtUmVk
dWN0aW9uKTsKLSAgICBtX3JlZHVjdGlvbi0+c2V0VmFsdWUocmVkdWN0aW9uKTsKLX0KLQotdm9p
ZCBEeW5hbWljc0NvbXByZXNzb3JOb2RlOjpyZXNldCgpCi17Ci0gICAgbV9keW5hbWljc0NvbXBy
ZXNzb3ItPnJlc2V0KCk7Ci19Ci0KLXZvaWQgRHluYW1pY3NDb21wcmVzc29yTm9kZTo6aW5pdGlh
bGl6ZSgpCi17Ci0gICAgaWYgKGlzSW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7ICAgIAotICAgIG1fZHluYW1pY3NDb21wcmVzc29y
ID0gYWRvcHRQdHIobmV3IER5bmFtaWNzQ29tcHJlc3NvcihzYW1wbGVSYXRlKCksIGRlZmF1bHRO
dW1iZXJPZk91dHB1dENoYW5uZWxzKSk7Ci19Ci0KLXZvaWQgRHluYW1pY3NDb21wcmVzc29yTm9k
ZTo6dW5pbml0aWFsaXplKCkKLXsKLSAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9keW5hbWljc0NvbXByZXNzb3IuY2xlYXIoKTsKLSAgICBBdWRpb05v
ZGU6OnVuaW5pdGlhbGl6ZSgpOwotfQotCi1kb3VibGUgRHluYW1pY3NDb21wcmVzc29yTm9kZTo6
dGFpbFRpbWUoKSBjb25zdAotewotICAgIHJldHVybiBtX2R5bmFtaWNzQ29tcHJlc3Nvci0+dGFp
bFRpbWUoKTsKLX0KLQotZG91YmxlIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OmxhdGVuY3lUaW1l
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9keW5hbWljc0NvbXByZXNzb3ItPmxhdGVuY3lUaW1l
KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJf
QVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JO
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21w
cmVzc29yTm9kZS5oCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
LSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgRHluYW1pY3NDb21wcmVzc29yTm9kZV9oCi0jZGVmaW5l
IER5bmFtaWNzQ29tcHJlc3Nvck5vZGVfaAotCi0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCi0jaW5j
bHVkZSAiQXVkaW9QYXJhbS5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBEeW5hbWljc0NvbXByZXNzb3I7Ci0KLWNsYXNzIER5bmFtaWNz
Q29tcHJlc3Nvck5vZGUgOiBwdWJsaWMgQXVkaW9Ob2RlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxEeW5hbWljc0NvbXByZXNzb3JOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiBj
b250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBEeW5hbWljc0NvbXByZXNzb3JOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpKTsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIH5EeW5hbWljc0NvbXByZXNzb3JOb2RlKCk7Ci0KLSAgICAvLyBBdWRp
b05vZGUKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgp
OwotICAgIHZpcnR1YWwgdm9pZCB1bmluaXRpYWxpemUoKTsKLQotICAgIC8vIFN0YXRpYyBjb21w
cmVzc2lvbiBjdXJ2ZSBwYXJhbWV0ZXJzLgotICAgIEF1ZGlvUGFyYW0qIHRocmVzaG9sZCgpIHsg
cmV0dXJuIG1fdGhyZXNob2xkLmdldCgpOyB9Ci0gICAgQXVkaW9QYXJhbSoga25lZSgpIHsgcmV0
dXJuIG1fa25lZS5nZXQoKTsgfQotICAgIEF1ZGlvUGFyYW0qIHJhdGlvKCkgeyByZXR1cm4gbV9y
YXRpby5nZXQoKTsgfQotCi0gICAgLy8gQW1vdW50IGJ5IHdoaWNoIHRoZSBjb21wcmVzc29yIGlz
IGN1cnJlbnRseSBjb21wcmVzc2luZyB0aGUgc2lnbmFsIGluIGRlY2liZWxzLgotICAgIEF1ZGlv
UGFyYW0qIHJlZHVjdGlvbigpIHsgcmV0dXJuIG1fcmVkdWN0aW9uLmdldCgpOyB9Ci0KLXByaXZh
dGU6Ci0gICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFOwotCi0gICAgRHluYW1p
Y3NDb21wcmVzc29yTm9kZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKLQotICAg
IE93blB0cjxEeW5hbWljc0NvbXByZXNzb3I+IG1fZHluYW1pY3NDb21wcmVzc29yOwotICAgIFJl
ZlB0cjxBdWRpb1BhcmFtPiBtX3RocmVzaG9sZDsKLSAgICBSZWZQdHI8QXVkaW9QYXJhbT4gbV9r
bmVlOwotICAgIFJlZlB0cjxBdWRpb1BhcmFtPiBtX3JhdGlvOwotICAgIFJlZlB0cjxBdWRpb1Bh
cmFtPiBtX3JlZHVjdGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIER5bmFtaWNzQ29tcHJlc3Nvck5vZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5pZGwJKHJldmlzaW9uIDExMTIwOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgYXVkaW8g
ewotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKLSAgICAg
ICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKLSAgICBdIER5bmFtaWNzQ29tcHJlc3Nvck5vZGUgOiBB
dWRpb05vZGUgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9QYXJhbSB0aHJlc2hv
bGQ7IC8vIGluIERlY2liZWxzCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb1BhcmFt
IGtuZWU7IC8vIGluIERlY2liZWxzCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb1Bh
cmFtIHJhdGlvOyAvLyB1bml0LWxlc3MKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlv
UGFyYW0gcmVkdWN0aW9uOyAvLyBpbiBEZWNpYmVscwotICAgIH07Ci19CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmNwcAkocmV2aXNpb24g
MTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJIaWdoUGFz
czJGaWx0ZXJOb2RlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSGlnaFBhc3MyRmlsdGVy
Tm9kZTo6SGlnaFBhc3MyRmlsdGVyTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNh
bXBsZVJhdGUpCi0gICAgOiBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZShjb250ZXh0LCBzYW1wbGVS
YXRlKQotewotICAgIG1fcHJvY2Vzc29yID0gYWRvcHRQdHIobmV3IEJpcXVhZFByb2Nlc3NvcihC
aXF1YWRQcm9jZXNzb3I6OkhpZ2hQYXNzLCBzYW1wbGVSYXRlLCAxLCBmYWxzZSkpOwotICAgIGJp
cXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIxKCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAg
YmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjIoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAg
ICBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMygpLT5zZXRDb250ZXh0KGNvbnRleHQpOwot
ICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlSGlnaFBhc3MyRmlsdGVyKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmgJKHJldmlzaW9uIDEx
MTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBIaWdo
UGFzczJGaWx0ZXJOb2RlX2gKLSNkZWZpbmUgSGlnaFBhc3MyRmlsdGVyTm9kZV9oCi0KLSNpbmNs
dWRlICJBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oIgotI2luY2x1ZGUgIkJpcXVhZFByb2Nlc3Nv
ci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvUGFyYW07Ci0gICAgCi1j
bGFzcyBIaWdoUGFzczJGaWx0ZXJOb2RlIDogcHVibGljIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2Rl
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxIaWdoUGFzczJGaWx0ZXJOb2RlPiBj
cmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIaWdoUGFzczJGaWx0ZXJOb2RlKGNvbnRleHQsIHNh
bXBsZVJhdGUpKTsgICAgICAKLSAgICB9Ci0KLSAgICBBdWRpb1BhcmFtKiBjdXRvZmYoKSB7IHJl
dHVybiBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMSgpOyB9Ci0gICAgQXVkaW9QYXJhbSog
cmVzb25hbmNlKCkgeyByZXR1cm4gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjIoKTsgfQot
ICAgIAotcHJpdmF0ZToKLSAgICBIaWdoUGFzczJGaWx0ZXJOb2RlKEF1ZGlvQ29udGV4dCosIGZs
b2F0IHNhbXBsZVJhdGUpOwotCi0gICAgQmlxdWFkUHJvY2Vzc29yKiBiaXF1YWRQcm9jZXNzb3Io
KSB7IHJldHVybiBzdGF0aWNfY2FzdDxCaXF1YWRQcm9jZXNzb3IqPihwcm9jZXNzb3IoKSk7IH0K
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEhpZ2hQYXNzMkZpbHRl
ck5vZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9k
ZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSGlnaFBhc3MyRmls
dGVyTm9kZS5pZGwJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0hpZ2hQYXNzMkZpbHRlck5vZGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0g
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi1tb2R1bGUgYXVkaW8gewotICAgIC8vIFR3by1wb2xlIGhpZ2hwYXNzIGZp
bHRlcgotICAgIC8vIEZJWE1FOiBkZXNpZ24gQmlxdWFkTm9kZSBhbmQgdXNlIGluc3RlYWQgb2Yg
dGhpcwotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKLSAg
ICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKLSAgICBdIEhpZ2hQYXNzMkZpbHRlck5vZGUgOiBB
dWRpb05vZGUgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9QYXJhbSBjdXRvZmY7
Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIHJlc29uYW5jZTsKLSAgICB9
OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlv
Tm9kZS5jcHAJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0ph
dmFTY3JpcHRBdWRpb05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI4MiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykK
LQotI2luY2x1ZGUgIkphdmFTY3JpcHRBdWRpb05vZGUuaCIKLQotI2luY2x1ZGUgIkF1ZGlvQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiQXVkaW9CdXMuaCIKLSNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIK
LSNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5o
IgotI2luY2x1ZGUgIkF1ZGlvUHJvY2Vzc2luZ0V2ZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlIDx3dGYvRmxvYXQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jb25zdCBzaXplX3QgRGVmYXVsdEJ1ZmZl
clNpemUgPSA0MDk2OwotCi1QYXNzUmVmUHRyPEphdmFTY3JpcHRBdWRpb05vZGU+IEphdmFTY3Jp
cHRBdWRpb05vZGU6OmNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJh
dGUsIHNpemVfdCBidWZmZXJTaXplLCB1bnNpZ25lZCBudW1iZXJPZklucHV0cywgdW5zaWduZWQg
bnVtYmVyT2ZPdXRwdXRzKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSmF2YVNjcmlwdEF1
ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlLCBidWZmZXJTaXplLCBudW1iZXJPZklucHV0cywg
bnVtYmVyT2ZPdXRwdXRzKSk7Ci19Ci0KLUphdmFTY3JpcHRBdWRpb05vZGU6OkphdmFTY3JpcHRB
dWRpb05vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlLCBzaXplX3Qg
YnVmZmVyU2l6ZSwgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dHMsIHVuc2lnbmVkIG51bWJlck9mT3V0
cHV0cykKLSAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQotICAgICwgbV9kb3Vi
bGVCdWZmZXJJbmRleCgwKQotICAgICwgbV9kb3VibGVCdWZmZXJJbmRleEZvckV2ZW50KDApCi0g
ICAgLCBtX2J1ZmZlclNpemUoYnVmZmVyU2l6ZSkKLSAgICAsIG1fYnVmZmVyUmVhZFdyaXRlSW5k
ZXgoMCkKLSAgICAsIG1faXNSZXF1ZXN0T3V0c3RhbmRpbmcoZmFsc2UpCi17Ci0gICAgLy8gQ2hl
Y2sgZm9yIHZhbGlkIGJ1ZmZlciBzaXplLgotICAgIHN3aXRjaCAoYnVmZmVyU2l6ZSkgewotICAg
IGNhc2UgMjU2OgotICAgIGNhc2UgNTEyOgotICAgIGNhc2UgMTAyNDoKLSAgICBjYXNlIDIwNDg6
Ci0gICAgY2FzZSA0MDk2OgotICAgIGNhc2UgODE5MjoKLSAgICBjYXNlIDE2Mzg0OgotICAgICAg
ICBtX2J1ZmZlclNpemUgPSBidWZmZXJTaXplOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBtX2J1ZmZlclNpemUgPSBEZWZhdWx0QnVmZmVyU2l6ZTsKLSAgICB9Ci0gICAg
ICAgIAotICAgIC8vIFJlZ2FyZGxlc3Mgb2YgdGhlIGFsbG93ZWQgYnVmZmVyIHNpemVzIGFib3Zl
LCB3ZSBzdGlsbCBuZWVkIHRvIHByb2Nlc3MgYXQgdGhlIGdyYW51bGFyaXR5IG9mIHRoZSBBdWRp
b05vZGUuCi0gICAgaWYgKG1fYnVmZmVyU2l6ZSA8IEF1ZGlvTm9kZTo6UHJvY2Vzc2luZ1NpemVJ
bkZyYW1lcykKLSAgICAgICAgbV9idWZmZXJTaXplID0gQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6
ZUluRnJhbWVzOwotCi0gICAgLy8gRklYTUU6IFJpZ2h0IG5vdyB3ZSdyZSBoYXJkY29kZWQgdG8g
c2luZ2xlIGlucHV0IGFuZCBzaW5nbGUgb3V0cHV0LgotICAgIC8vIEFsdGhvdWdoIHRoZSBzcGVj
aWZpY2F0aW9uIHNheXMgdGhpcyBpcyBPSyBmb3IgYSBzaW1wbGUgaW1wbGVtZW50YXRpb24sIG11
bHRpcGxlIGlucHV0cyBhbmQgb3V0cHV0cyB3b3VsZCBiZSBnb29kLgotICAgIEFTU0VSVF9VTlVT
RUQobnVtYmVyT2ZJbnB1dHMsIG51bWJlck9mSW5wdXRzID09IDEpOwotICAgIEFTU0VSVF9VTlVT
RUQobnVtYmVyT2ZPdXRwdXRzLCBudW1iZXJPZk91dHB1dHMgPT0gMSk7Ci0gICAgYWRkSW5wdXQo
YWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7Ci0gICAgYWRkT3V0cHV0KGFkb3B0
UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywgMikpKTsKLQotICAgIHNldE5vZGVUeXBlKE5v
ZGVUeXBlSmF2YVNjcmlwdCk7Ci0KLSAgICBpbml0aWFsaXplKCk7Ci19Ci0KLUphdmFTY3JpcHRB
dWRpb05vZGU6On5KYXZhU2NyaXB0QXVkaW9Ob2RlKCkKLXsKLSAgICB1bmluaXRpYWxpemUoKTsK
LX0KLQotdm9pZCBKYXZhU2NyaXB0QXVkaW9Ob2RlOjppbml0aWFsaXplKCkKLXsKLSAgICBpZiAo
aXNJbml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCBzYW1wbGVSYXRl
ID0gY29udGV4dCgpLT5zYW1wbGVSYXRlKCk7Ci0KLSAgICAvLyBDcmVhdGUgZG91YmxlIGJ1ZmZl
cnMgb24gYm90aCB0aGUgaW5wdXQgYW5kIG91dHB1dCBzaWRlcy4KLSAgICAvLyBUaGVzZSBBdWRp
b0J1ZmZlcnMgd2lsbCBiZSBkaXJlY3RseSBhY2Nlc3NlZCBpbiB0aGUgbWFpbiB0aHJlYWQgYnkg
SmF2YVNjcmlwdC4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjsgKytpKSB7Ci0gICAg
ICAgIG1faW5wdXRCdWZmZXJzLmFwcGVuZChBdWRpb0J1ZmZlcjo6Y3JlYXRlKDIsIGJ1ZmZlclNp
emUoKSwgc2FtcGxlUmF0ZSkpOwotICAgICAgICBtX291dHB1dEJ1ZmZlcnMuYXBwZW5kKEF1ZGlv
QnVmZmVyOjpjcmVhdGUoMiwgYnVmZmVyU2l6ZSgpLCBzYW1wbGVSYXRlKSk7Ci0gICAgfQotCi0g
ICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgSmF2YVNjcmlwdEF1ZGlvTm9k
ZTo6dW5pbml0aWFsaXplKCkKLXsKLSAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9pbnB1dEJ1ZmZlcnMuY2xlYXIoKTsKLSAgICBtX291dHB1dEJ1ZmZl
cnMuY2xlYXIoKTsKLQotICAgIEF1ZGlvTm9kZTo6dW5pbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQg
SmF2YVNjcmlwdEF1ZGlvTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewot
ICAgIC8vIERpc2N1c3Npb24gYWJvdXQgaW5wdXRzIGFuZCBvdXRwdXRzOgotICAgIC8vIEFzIGlu
IG90aGVyIEF1ZGlvTm9kZXMsIEphdmFTY3JpcHRBdWRpb05vZGUgdXNlcyBhbiBBdWRpb0J1cyBm
b3IgaXRzIGlucHV0IGFuZCBvdXRwdXQgKHNlZSBpbnB1dEJ1cyBhbmQgb3V0cHV0QnVzIGJlbG93
KS4KLSAgICAvLyBBZGRpdGlvbmFsbHksIHRoZXJlIGlzIGEgZG91YmxlLWJ1ZmZlcmluZyBmb3Ig
aW5wdXQgYW5kIG91dHB1dCB3aGljaCBpcyBleHBvc2VkIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQg
KHNlZSBpbnB1dEJ1ZmZlciBhbmQgb3V0cHV0QnVmZmVyIGJlbG93KS4KLSAgICAvLyBUaGlzIG5v
ZGUgaXMgdGhlIHByb2R1Y2VyIGZvciBpbnB1dEJ1ZmZlciBhbmQgdGhlIGNvbnN1bWVyIGZvciBv
dXRwdXRCdWZmZXIuCi0gICAgLy8gVGhlIEphdmFTY3JpcHQgY29kZSBpcyB0aGUgY29uc3VtZXIg
b2YgaW5wdXRCdWZmZXIgYW5kIHRoZSBwcm9kdWNlciBmb3Igb3V0cHV0QnVmZmVyLgotICAgIAot
ICAgIC8vIEdldCBpbnB1dCBhbmQgb3V0cHV0IGJ1c3Nlcy4KLSAgICBBdWRpb0J1cyogaW5wdXRC
dXMgPSB0aGlzLT5pbnB1dCgwKS0+YnVzKCk7Ci0gICAgQXVkaW9CdXMqIG91dHB1dEJ1cyA9IHRo
aXMtPm91dHB1dCgwKS0+YnVzKCk7Ci0KLSAgICAvLyBHZXQgaW5wdXQgYW5kIG91dHB1dCBidWZm
ZXJzLiAgV2UgZG91YmxlLWJ1ZmZlciBib3RoIHRoZSBpbnB1dCBhbmQgb3V0cHV0IHNpZGVzLgot
ICAgIHVuc2lnbmVkIGRvdWJsZUJ1ZmZlckluZGV4ID0gdGhpcy0+ZG91YmxlQnVmZmVySW5kZXgo
KTsKLSAgICBib29sIGlzRG91YmxlQnVmZmVySW5kZXhHb29kID0gZG91YmxlQnVmZmVySW5kZXgg
PCAyICYmIGRvdWJsZUJ1ZmZlckluZGV4IDwgbV9pbnB1dEJ1ZmZlcnMuc2l6ZSgpICYmIGRvdWJs
ZUJ1ZmZlckluZGV4IDwgbV9vdXRwdXRCdWZmZXJzLnNpemUoKTsKLSAgICBBU1NFUlQoaXNEb3Vi
bGVCdWZmZXJJbmRleEdvb2QpOwotICAgIGlmICghaXNEb3VibGVCdWZmZXJJbmRleEdvb2QpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBBdWRpb0J1ZmZlciogaW5wdXRCdWZmZXIgPSBtX2lu
cHV0QnVmZmVyc1tkb3VibGVCdWZmZXJJbmRleF0uZ2V0KCk7Ci0gICAgQXVkaW9CdWZmZXIqIG91
dHB1dEJ1ZmZlciA9IG1fb3V0cHV0QnVmZmVyc1tkb3VibGVCdWZmZXJJbmRleF0uZ2V0KCk7Ci0K
LSAgICAvLyBDaGVjayB0aGUgY29uc2lzdGVuY3kgb2YgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJz
LgotICAgIGJvb2wgYnVmZmVyc0FyZUdvb2QgPSBpbnB1dEJ1ZmZlciAmJiBvdXRwdXRCdWZmZXIg
JiYgYnVmZmVyU2l6ZSgpID09IGlucHV0QnVmZmVyLT5sZW5ndGgoKSAmJiBidWZmZXJTaXplKCkg
PT0gb3V0cHV0QnVmZmVyLT5sZW5ndGgoKQotICAgICAgICAmJiBtX2J1ZmZlclJlYWRXcml0ZUlu
ZGV4ICsgZnJhbWVzVG9Qcm9jZXNzIDw9IGJ1ZmZlclNpemUoKTsKLSAgICBBU1NFUlQoYnVmZmVy
c0FyZUdvb2QpOwotICAgIGlmICghYnVmZmVyc0FyZUdvb2QpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIFdlIGFzc3VtZSB0aGF0IGJ1ZmZlclNpemUoKSBpcyBldmVubHkgZGl2aXNpYmxlIGJ5
IGZyYW1lc1RvUHJvY2VzcyAtIHNob3VsZCBhbHdheXMgYmUgdHJ1ZSwgYnV0IHdlIHNob3VsZCBz
dGlsbCBjaGVjay4KLSAgICBib29sIGlzRnJhbWVzVG9Qcm9jZXNzR29vZCA9IGZyYW1lc1RvUHJv
Y2VzcyAmJiBidWZmZXJTaXplKCkgPj0gZnJhbWVzVG9Qcm9jZXNzICYmICEoYnVmZmVyU2l6ZSgp
ICUgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICBBU1NFUlQoaXNGcmFtZXNUb1Byb2Nlc3NHb29kKTsK
LSAgICBpZiAoIWlzRnJhbWVzVG9Qcm9jZXNzR29vZCkKLSAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKLSAgICB1bnNpZ25lZCBudW1iZXJPZklucHV0Q2hhbm5lbHMgPSBpbnB1dEJ1cy0+bnVtYmVy
T2ZDaGFubmVscygpOwotICAgIAotICAgIGJvb2wgY2hhbm5lbHNBcmVHb29kID0gKG51bWJlck9m
SW5wdXRDaGFubmVscyA9PSAxIHx8IG51bWJlck9mSW5wdXRDaGFubmVscyA9PSAyKSAmJiBvdXRw
dXRCdXMtPm51bWJlck9mQ2hhbm5lbHMoKSA9PSAyOwotICAgIEFTU0VSVChjaGFubmVsc0FyZUdv
b2QpOwotICAgIGlmICghY2hhbm5lbHNBcmVHb29kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBj
b25zdCBmbG9hdCogc291cmNlTCA9IGlucHV0QnVzLT5jaGFubmVsKDApLT5kYXRhKCk7Ci0gICAg
Y29uc3QgZmxvYXQqIHNvdXJjZVIgPSBudW1iZXJPZklucHV0Q2hhbm5lbHMgPiAxID8gaW5wdXRC
dXMtPmNoYW5uZWwoMSktPmRhdGEoKSA6IDA7Ci0gICAgZmxvYXQqIGRlc3RpbmF0aW9uTCA9IG91
dHB1dEJ1cy0+Y2hhbm5lbCgwKS0+bXV0YWJsZURhdGEoKTsKLSAgICBmbG9hdCogZGVzdGluYXRp
b25SID0gb3V0cHV0QnVzLT5jaGFubmVsKDEpLT5tdXRhYmxlRGF0YSgpOwotCi0gICAgLy8gQ29w
eSBmcm9tIHRoZSBpbnB1dCB0byB0aGUgaW5wdXQgYnVmZmVyLiAgU2VlICJidWZmZXJzQXJlR29v
ZCIgY2hlY2sgYWJvdmUgZm9yIHNhZmV0eS4KLSAgICBzaXplX3QgYnl0ZXNUb0NvcHkgPSBzaXpl
b2YoZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNzOwotICAgIG1lbWNweShpbnB1dEJ1ZmZlci0+Z2V0
Q2hhbm5lbERhdGEoMCktPmRhdGEoKSArIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXgsIHNvdXJjZUws
IGJ5dGVzVG9Db3B5KTsKLSAgICAKLSAgICBpZiAobnVtYmVyT2ZJbnB1dENoYW5uZWxzID09IDIp
Ci0gICAgICAgIG1lbWNweShpbnB1dEJ1ZmZlci0+Z2V0Q2hhbm5lbERhdGEoMSktPmRhdGEoKSAr
IG1fYnVmZmVyUmVhZFdyaXRlSW5kZXgsIHNvdXJjZVIsIGJ5dGVzVG9Db3B5KTsKLSAgICBlbHNl
IGlmIChudW1iZXJPZklucHV0Q2hhbm5lbHMgPT0gMSkgewotICAgICAgICAvLyBJZiB0aGUgaW5w
dXQgaXMgbW9ubywgdGhlbiBhbHNvIGNvcHkgdGhlIG1vbm8gaW5wdXQgdG8gdGhlIHJpZ2h0IGNo
YW5uZWwgb2YgdGhlIEF1ZGlvQnVmZmVyIHdoaWNoIHRoZSBBdWRpb1Byb2Nlc3NpbmdFdmVudCB1
c2VzLgotICAgICAgICAvLyBGSVhNRTogaXQgaXMgbGlrZWx5IHRoZSBhdWRpbyBBUEkgd2lsbCBl
dm9sdmUgdG8gcHJlc2VudCBhbiBBdWRpb0J1ZmZlciB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBj
aGFubmVscyBhcyBvdXIgaW5wdXQuCi0gICAgICAgIG1lbWNweShpbnB1dEJ1ZmZlci0+Z2V0Q2hh
bm5lbERhdGEoMSktPmRhdGEoKSArIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXgsIHNvdXJjZUwsIGJ5
dGVzVG9Db3B5KTsKLSAgICB9Ci0gICAgCi0gICAgLy8gQ29weSBmcm9tIHRoZSBvdXRwdXQgYnVm
ZmVyIHRvIHRoZSBvdXRwdXQuICBTZWUgImJ1ZmZlcnNBcmVHb29kIiBjaGVjayBhYm92ZSBmb3Ig
c2FmZXR5LgotICAgIG1lbWNweShkZXN0aW5hdGlvbkwsIG91dHB1dEJ1ZmZlci0+Z2V0Q2hhbm5l
bERhdGEoMCktPmRhdGEoKSArIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXgsIGJ5dGVzVG9Db3B5KTsK
LSAgICBtZW1jcHkoZGVzdGluYXRpb25SLCBvdXRwdXRCdWZmZXItPmdldENoYW5uZWxEYXRhKDEp
LT5kYXRhKCkgKyBtX2J1ZmZlclJlYWRXcml0ZUluZGV4LCBieXRlc1RvQ29weSk7Ci0KLSAgICAv
LyBVcGRhdGUgdGhlIGJ1ZmZlcmluZyBpbmRleC4KLSAgICBtX2J1ZmZlclJlYWRXcml0ZUluZGV4
ID0gKG1fYnVmZmVyUmVhZFdyaXRlSW5kZXggKyBmcmFtZXNUb1Byb2Nlc3MpICUgYnVmZmVyU2l6
ZSgpOwotCi0gICAgLy8gbV9idWZmZXJSZWFkV3JpdGVJbmRleCB3aWxsIHdyYXAgYmFjayBhcm91
bmQgdG8gMCB3aGVuIHRoZSBjdXJyZW50IGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycyBhcmUgZnVs
bC4KLSAgICAvLyBXaGVuIHRoaXMgaGFwcGVucywgZmlyZSBhbiBldmVudCBhbmQgc3dhcCBidWZm
ZXJzLgotICAgIGlmICghbV9idWZmZXJSZWFkV3JpdGVJbmRleCkgewotICAgICAgICAvLyBBdm9p
ZCBidWlsZGluZyB1cCByZXF1ZXN0cyBvbiB0aGUgbWFpbiB0aHJlYWQgdG8gZmlyZSBwcm9jZXNz
IGV2ZW50cyB3aGVuIHRoZXkncmUgbm90IGJlaW5nIGhhbmRsZWQuCi0gICAgICAgIC8vIFRoaXMg
Y291bGQgYmUgYSBwcm9ibGVtIGlmIHRoZSBtYWluIHRocmVhZCBpcyB2ZXJ5IGJ1c3kgZG9pbmcg
b3RoZXIgdGhpbmdzIGFuZCBpcyBiZWluZyBoZWxkIHVwIGhhbmRsaW5nIHByZXZpb3VzIHJlcXVl
c3RzLgotICAgICAgICBpZiAobV9pc1JlcXVlc3RPdXRzdGFuZGluZykgewotICAgICAgICAgICAg
Ly8gV2UncmUgbGF0ZSBpbiBoYW5kbGluZyB0aGUgcHJldmlvdXMgcmVxdWVzdC4gIFRoZSBtYWlu
IHRocmVhZCBtdXN0IGJlIHZlcnkgYnVzeS4KLSAgICAgICAgICAgIC8vIFRoZSBiZXN0IHdlIGNh
biBkbyBpcyBjbGVhciBvdXQgdGhlIGJ1ZmZlciBvdXJzZWxmIGhlcmUuCi0gICAgICAgICAgICBv
dXRwdXRCdWZmZXItPnplcm8oKTsgICAgICAgICAgICAKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIC8vIFJlZmVyZW5jZSBvdXJzZWxmIHNvIHdlIGRvbid0IGFjY2lkZW50YWxseSBnZXQg
ZGVsZXRlZCBiZWZvcmUgZmlyZVByb2Nlc3NFdmVudCgpIGdldHMgY2FsbGVkLgotICAgICAgICAg
ICAgcmVmKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZpcmUgdGhlIGV2ZW50IG9u
IHRoZSBtYWluIHRocmVhZCwgbm90IHRoaXMgb25lICh3aGljaCBpcyB0aGUgcmVhbHRpbWUgYXVk
aW8gdGhyZWFkKS4KLSAgICAgICAgICAgIG1fZG91YmxlQnVmZmVySW5kZXhGb3JFdmVudCA9IG1f
ZG91YmxlQnVmZmVySW5kZXg7Ci0gICAgICAgICAgICBtX2lzUmVxdWVzdE91dHN0YW5kaW5nID0g
dHJ1ZTsKLSAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoZmlyZVByb2Nlc3NFdmVudERpc3Bh
dGNoLCB0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3YXBCdWZmZXJzKCk7Ci0gICAgfQot
fQotCi12b2lkIEphdmFTY3JpcHRBdWRpb05vZGU6OmZpcmVQcm9jZXNzRXZlbnREaXNwYXRjaCh2
b2lkKiB1c2VyRGF0YSkKLXsKLSAgICBKYXZhU2NyaXB0QXVkaW9Ob2RlKiBqc0F1ZGlvTm9kZSA9
IHN0YXRpY19jYXN0PEphdmFTY3JpcHRBdWRpb05vZGUqPih1c2VyRGF0YSk7Ci0gICAgQVNTRVJU
KGpzQXVkaW9Ob2RlKTsKLSAgICBpZiAoIWpzQXVkaW9Ob2RlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBqc0F1ZGlvTm9kZS0+ZmlyZVByb2Nlc3NFdmVudCgpOwotCi0gICAgLy8gRGUtcmVmZXJl
bmNlIHRvIG1hdGNoIHRoZSByZWYoKSBjYWxsIGluIHByb2Nlc3MoKS4KLSAgICBqc0F1ZGlvTm9k
ZS0+ZGVyZWYoKTsKLX0KLQotdm9pZCBKYXZhU2NyaXB0QXVkaW9Ob2RlOjpmaXJlUHJvY2Vzc0V2
ZW50KCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkgJiYgbV9pc1JlcXVlc3RPdXRzdGFu
ZGluZyk7Ci0gICAgCi0gICAgYm9vbCBpc0luZGV4R29vZCA9IG1fZG91YmxlQnVmZmVySW5kZXhG
b3JFdmVudCA8IDI7Ci0gICAgQVNTRVJUKGlzSW5kZXhHb29kKTsKLSAgICBpZiAoIWlzSW5kZXhH
b29kKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIEF1ZGlvQnVmZmVyKiBpbnB1dEJ1
ZmZlciA9IG1faW5wdXRCdWZmZXJzW21fZG91YmxlQnVmZmVySW5kZXhGb3JFdmVudF0uZ2V0KCk7
Ci0gICAgQXVkaW9CdWZmZXIqIG91dHB1dEJ1ZmZlciA9IG1fb3V0cHV0QnVmZmVyc1ttX2RvdWJs
ZUJ1ZmZlckluZGV4Rm9yRXZlbnRdLmdldCgpOwotICAgIEFTU0VSVChpbnB1dEJ1ZmZlciAmJiBv
dXRwdXRCdWZmZXIpOwotICAgIGlmICghaW5wdXRCdWZmZXIgfHwgIW91dHB1dEJ1ZmZlcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gQXZvaWQgZmlyaW5nIHRoZSBldmVudCBpZiB0aGUgZG9j
dW1lbnQgaGFzIGFscmVhZHkgZ29uZSBhd2F5LgotICAgIGlmIChjb250ZXh0KCktPmhhc0RvY3Vt
ZW50KCkpIHsKLSAgICAgICAgLy8gTGV0IHRoZSBhdWRpbyB0aHJlYWQga25vdyB3ZSd2ZSBnb3R0
ZW4gdG8gdGhlIHBvaW50IHdoZXJlIGl0J3MgT0sgZm9yIGl0IHRvIG1ha2UgYW5vdGhlciByZXF1
ZXN0LgotICAgICAgICBtX2lzUmVxdWVzdE91dHN0YW5kaW5nID0gZmFsc2U7Ci0gICAgICAgIAot
ICAgICAgICAvLyBDYWxsIHRoZSBKYXZhU2NyaXB0IGV2ZW50IGhhbmRsZXIgd2hpY2ggd2lsbCBk
byB0aGUgYXVkaW8gcHJvY2Vzc2luZy4KLSAgICAgICAgZGlzcGF0Y2hFdmVudChBdWRpb1Byb2Nl
c3NpbmdFdmVudDo6Y3JlYXRlKGlucHV0QnVmZmVyLCBvdXRwdXRCdWZmZXIpKTsKLSAgICB9Ci19
Ci0KLXZvaWQgSmF2YVNjcmlwdEF1ZGlvTm9kZTo6cmVzZXQoKQotewotICAgIG1fYnVmZmVyUmVh
ZFdyaXRlSW5kZXggPSAwOwotICAgIG1fZG91YmxlQnVmZmVySW5kZXggPSAwOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IDI7ICsraSkgewotICAgICAgICBtX2lucHV0QnVmZmVyc1tp
XS0+emVybygpOwotICAgICAgICBtX291dHB1dEJ1ZmZlcnNbaV0tPnplcm8oKTsKLSAgICB9Ci19
Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgSmF2YVNjcmlwdEF1ZGlvTm9kZTo6aW50ZXJmYWNlTmFt
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JKYXZhU2Ny
aXB0QXVkaW9Ob2RlOwotfQotCi1TY3JpcHRFeGVjdXRpb25Db250ZXh0KiBKYXZhU2NyaXB0QXVk
aW9Ob2RlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29u
c3RfY2FzdDxKYXZhU2NyaXB0QXVkaW9Ob2RlKj4odGhpcyktPmNvbnRleHQoKS0+ZG9jdW1lbnQo
KTsKLX0KLQotZG91YmxlIEphdmFTY3JpcHRBdWRpb05vZGU6OnRhaWxUaW1lKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOwotfQot
Ci1kb3VibGUgSmF2YVNjcmlwdEF1ZGlvTm9kZTo6bGF0ZW5jeVRpbWUoKSBjb25zdAotewotICAg
IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5oCShyZXZp
c2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9O
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIEphdmFTY3JpcHRBdWRpb05vZGVfaAotI2RlZmluZSBKYXZhU2NyaXB0QXVkaW9Ob2RlX2gK
LQotI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZS5oIgot
I2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJFdmVudFRhcmdldC5oIgotI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvQnVmZmVyOwotY2xhc3MgQXVkaW9Db250ZXh0OwotY2xh
c3MgQXVkaW9Qcm9jZXNzaW5nRXZlbnQ7Ci0KLS8vIEphdmFTY3JpcHRBdWRpb05vZGUgaXMgYW4g
QXVkaW9Ob2RlIHdoaWNoIGFsbG93cyBmb3IgYXJiaXRyYXJ5IHN5bnRoZXNpcyBvciBwcm9jZXNz
aW5nIGRpcmVjdGx5IHVzaW5nIEphdmFTY3JpcHQuCi0vLyBUaGUgQVBJIGFsbG93cyBmb3IgYSB2
YXJpYWJsZSBudW1iZXIgb2YgaW5wdXRzIGFuZCBvdXRwdXRzLCBhbHRob3VnaCBpdCBtdXN0IGhh
dmUgYXQgbGVhc3Qgb25lIGlucHV0IG9yIG91dHB1dC4KLS8vIFRoaXMgYmFzaWMgaW1wbGVtZW50
YXRpb24gc3VwcG9ydHMgbm8gbW9yZSB0aGFuIG9uZSBpbnB1dCBhbmQgb3V0cHV0LgotLy8gVGhl
ICJvbmF1ZGlvcHJvY2VzcyIgYXR0cmlidXRlIGlzIGFuIGV2ZW50IGxpc3RlbmVyIHdoaWNoIHdp
bGwgZ2V0IGNhbGxlZCBwZXJpb2RpY2FsbHkgd2l0aCBhbiBBdWRpb1Byb2Nlc3NpbmdFdmVudCB3
aGljaCBoYXMKLS8vIEF1ZGlvQnVmZmVycyBmb3IgZWFjaCBpbnB1dCBhbmQgb3V0cHV0LgotCi0v
LyBGSVhNRTogRXZlbnRUYXJnZXQgc2hvdWxkIGJlIGludHJvZHVjZWQgYXQgdGhlIGJhc2Ugb2Yg
dGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeSAoaS5lLiwgYXMgYSBiYXNlIGNsYXNzIGZvciBBdWRp
b05vZGUpLgotY2xhc3MgSmF2YVNjcmlwdEF1ZGlvTm9kZSA6IHB1YmxpYyBBdWRpb05vZGUsIHB1
YmxpYyBFdmVudFRhcmdldCB7Ci1wdWJsaWM6Ci0gICAgLy8gYnVmZmVyU2l6ZSBtdXN0IGJlIG9u
ZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczogMjU2LCA1MTIsIDEwMjQsIDIwNDgsIDQwOTYsIDgx
OTIsIDE2Mzg0LgotICAgIC8vIFRoaXMgdmFsdWUgY29udHJvbHMgaG93IGZyZXF1ZW50bHkgdGhl
IG9uYXVkaW9wcm9jZXNzIGV2ZW50IGhhbmRsZXIgaXMgY2FsbGVkIGFuZCBob3cgbWFueSBzYW1w
bGUtZnJhbWVzIG5lZWQgdG8gYmUgcHJvY2Vzc2VkIGVhY2ggY2FsbC4KLSAgICAvLyBMb3dlciBu
dW1iZXJzIGZvciBidWZmZXJTaXplIHdpbGwgcmVzdWx0IGluIGEgbG93ZXIgKGJldHRlcikgbGF0
ZW5jeS4gSGlnaGVyIG51bWJlcnMgd2lsbCBiZSBuZWNlc3NhcnkgdG8gYXZvaWQgYXVkaW8gYnJl
YWt1cCBhbmQgZ2xpdGNoZXMuCi0gICAgLy8gVGhlIHZhbHVlIGNob3NlbiBtdXN0IGNhcmVmdWxs
eSBiYWxhbmNlIGJldHdlZW4gbGF0ZW5jeSBhbmQgYXVkaW8gcXVhbGl0eS4KLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxKYXZhU2NyaXB0QXVkaW9Ob2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiwgZmxv
YXQgc2FtcGxlUmF0ZSwgc2l6ZV90IGJ1ZmZlclNpemUsIHVuc2lnbmVkIG51bWJlck9mSW5wdXRz
ID0gMSwgdW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRzID0gMSk7Ci0KLSAgICB2aXJ0dWFsIH5KYXZh
U2NyaXB0QXVkaW9Ob2RlKCk7Ci0KLSAgICAvLyBBdWRpb05vZGUKLSAgICB2aXJ0dWFsIHZvaWQg
cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQo
KTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1bmlu
aXRpYWxpemUoKTsKLQotICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgeyByZXR1cm4gJm1fZXZlbnRUYXJn
ZXREYXRhOyB9Ci0gICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0
RGF0YSgpICB7IHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7IH0KLQotICAgIHNpemVfdCBidWZm
ZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJTaXplOyB9Ci0KLSAgICBERUZJTkVfQVRU
UklCVVRFX0VWRU5UX0xJU1RFTkVSKGF1ZGlvcHJvY2Vzcyk7Ci0KLSAgICAvLyBSZWNvbmNpbGUg
cmVmL2RlcmVmIHdoaWNoIGFyZSBkZWZpbmVkIGJvdGggaW4gQXVkaW9Ob2RlIGFuZCBFdmVudFRh
cmdldC4KLSAgICB1c2luZyBBdWRpb05vZGU6OnJlZjsKLSAgICB1c2luZyBBdWRpb05vZGU6OmRl
cmVmOwotICAgIAotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJ
REU7Ci0KLSAgICBKYXZhU2NyaXB0QXVkaW9Ob2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBs
ZVJhdGUsIHNpemVfdCBidWZmZXJTaXplLCB1bnNpZ25lZCBudW1iZXJPZklucHV0cywgdW5zaWdu
ZWQgbnVtYmVyT2ZPdXRwdXRzKTsKLQotICAgIHN0YXRpYyB2b2lkIGZpcmVQcm9jZXNzRXZlbnRE
aXNwYXRjaCh2b2lkKiB1c2VyRGF0YSk7Ci0gICAgdm9pZCBmaXJlUHJvY2Vzc0V2ZW50KCk7Ci0K
LSAgICAvLyBEb3VibGUgYnVmZmVyaW5nCi0gICAgdW5zaWduZWQgZG91YmxlQnVmZmVySW5kZXgo
KSBjb25zdCB7IHJldHVybiBtX2RvdWJsZUJ1ZmZlckluZGV4OyB9Ci0gICAgdm9pZCBzd2FwQnVm
ZmVycygpIHsgbV9kb3VibGVCdWZmZXJJbmRleCA9IDEgLSBtX2RvdWJsZUJ1ZmZlckluZGV4OyB9
Ci0gICAgdW5zaWduZWQgbV9kb3VibGVCdWZmZXJJbmRleDsKLSAgICB1bnNpZ25lZCBtX2RvdWJs
ZUJ1ZmZlckluZGV4Rm9yRXZlbnQ7Ci0gICAgVmVjdG9yPFJlZlB0cjxBdWRpb0J1ZmZlcj4gPiBt
X2lucHV0QnVmZmVyczsKLSAgICBWZWN0b3I8UmVmUHRyPEF1ZGlvQnVmZmVyPiA+IG1fb3V0cHV0
QnVmZmVyczsKLQotICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQotICAgIEV2
ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKLQotICAgIHNpemVfdCBtX2J1ZmZlclNp
emU7Ci0gICAgdW5zaWduZWQgbV9idWZmZXJSZWFkV3JpdGVJbmRleDsKLSAgICB2b2xhdGlsZSBi
b29sIG1faXNSZXF1ZXN0T3V0c3RhbmRpbmc7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBKYXZhU2NyaXB0QXVkaW9Ob2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaWRsCShyZXZpc2lvbiAxMTEyMDgp
CisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmlkbAkod29y
a2luZyBjb3B5KQpAQCAtMSwzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGF1ZGlvIHsK
LSAgICAvLyBGb3IgcmVhbC10aW1lIGF1ZGlvIHN0cmVhbSBzeW50aGVzaXMvcHJvY2Vzc2luZyBp
biBKYXZhU2NyaXB0IAotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9B
VURJTywKLSAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QsCi0gICAgICAgIEpTQ3VzdG9tTWFy
a0Z1bmN0aW9uLAotICAgICAgICBFdmVudFRhcmdldAotICAgIF0gSmF2YVNjcmlwdEF1ZGlvTm9k
ZSA6IEF1ZGlvTm9kZSB7Ci0gICAgICAgIC8vIFJlbmRlcmluZyBjYWxsYmFjawotICAgICAgICBh
dHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmF1ZGlvcHJvY2VzczsKLSAgICAgICAgCi0gICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIGJ1ZmZlclNpemU7Ci0gICAgfTsKLX0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmNwcAkocmV2aXNp
b24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIkxvd1Bh
c3MyRmlsdGVyTm9kZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUxvd1Bhc3MyRmlsdGVy
Tm9kZTo6TG93UGFzczJGaWx0ZXJOb2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2Ft
cGxlUmF0ZSkKLSAgICA6IEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlKGNvbnRleHQsIHNhbXBsZVJh
dGUpCi17Ci0gICAgbV9wcm9jZXNzb3IgPSBhZG9wdFB0cihuZXcgQmlxdWFkUHJvY2Vzc29yKEJp
cXVhZFByb2Nlc3Nvcjo6TG93UGFzcywgc2FtcGxlUmF0ZSwgMSwgZmFsc2UpKTsKLSAgICBiaXF1
YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwotICAgIGJp
cXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIyKCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAg
YmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjMoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAg
ICBzZXROb2RlVHlwZShOb2RlVHlwZUxvd1Bhc3MyRmlsdGVyKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5oCShyZXZpc2lvbiAxMTEyMDgp
CisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMb3dQYXNzMkZp
bHRlck5vZGVfaAotI2RlZmluZSBMb3dQYXNzMkZpbHRlck5vZGVfaAotCi0jaW5jbHVkZSAiQXVk
aW9CYXNpY1Byb2Nlc3Nvck5vZGUuaCIKLSNpbmNsdWRlICJCaXF1YWRQcm9jZXNzb3IuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb1BhcmFtOwotICAgIAotY2xhc3MgTG93
UGFzczJGaWx0ZXJOb2RlIDogcHVibGljIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb3dQYXNzMkZpbHRlck5vZGU+IGNyZWF0ZShBdWRp
b0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IExvd1Bhc3MyRmlsdGVyTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKSk7
ICAgICAgCi0gICAgfQotCi0gICAgQXVkaW9QYXJhbSogY3V0b2ZmKCkgeyByZXR1cm4gYmlxdWFk
UHJvY2Vzc29yKCktPnBhcmFtZXRlcjEoKTsgfQotICAgIEF1ZGlvUGFyYW0qIHJlc29uYW5jZSgp
IHsgcmV0dXJuIGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIyKCk7IH0KLSAgICAKLXByaXZh
dGU6Ci0gICAgTG93UGFzczJGaWx0ZXJOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJh
dGUpOwotCi0gICAgQmlxdWFkUHJvY2Vzc29yKiBiaXF1YWRQcm9jZXNzb3IoKSB7IHJldHVybiBz
dGF0aWNfY2FzdDxCaXF1YWRQcm9jZXNzb3IqPihwcm9jZXNzb3IoKSk7IH0KLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIExvd1Bhc3MyRmlsdGVyTm9kZV9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5pZGwJKHJl
dmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVy
Tm9kZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1v
ZHVsZSBhdWRpbyB7Ci0gICAgLy8gVHdvLXBvbGUgbG93cGFzcyBmaWx0ZXIKLSAgICAvLyBGSVhN
RTogZGVzaWduIEJpcXVhZE5vZGUgYW5kIHVzZSBpbnN0ZWFkIG9mIHRoaXMKLSAgICBpbnRlcmZh
Y2UgWwotICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCi0gICAgICAgIEpTR2VuZXJhdGVU
b0pTT2JqZWN0Ci0gICAgXSBMb3dQYXNzMkZpbHRlck5vZGUgOiBBdWRpb05vZGUgewotICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9QYXJhbSBjdXRvZmY7Ci0gICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIHJlc29uYW5jZTsKLSAgICB9OwotfQpJbmRleDogU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGUuY3BwCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRp
YUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1NyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9B
VURJTykgJiYgRU5BQkxFKFZJREVPKQotCi0jaW5jbHVkZSAiTWVkaWFFbGVtZW50QXVkaW9Tb3Vy
Y2VOb2RlLmgiCi0KLSNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKLSNpbmNsdWRlICJBdWRpb05v
ZGVPdXRwdXQuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXIu
aCIKLSNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+Ci0KLS8vIFRoZXNlIGFyZSBzb21ld2hhdCBhcmJp
dHJhcnkgbGltaXRzLCBidXQgd2UgbmVlZCB0byBkbyBzb21lIGtpbmQgb2Ygc2FuaXR5LWNoZWNr
aW5nLgotY29uc3QgdW5zaWduZWQgbWluU2FtcGxlUmF0ZSA9IDgwMDA7Ci1jb25zdCB1bnNpZ25l
ZCBtYXhTYW1wbGVSYXRlID0gMTkyMDAwOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NS
ZWZQdHI8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBNZWRpYUVsZW1lbnRBdWRpb1NvdXJj
ZU5vZGU6OmNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIEhUTUxNZWRpYUVsZW1lbnQqIG1l
ZGlhRWxlbWVudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZShjb250ZXh0LCBtZWRpYUVsZW1lbnQpKTsKLX0KLQotTWVkaWFFbGVtZW50QXVk
aW9Tb3VyY2VOb2RlOjpNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUoQXVkaW9Db250ZXh0KiBj
b250ZXh0LCBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCi0gICAgOiBBdWRpb1NvdXJj
ZU5vZGUoY29udGV4dCwgY29udGV4dC0+c2FtcGxlUmF0ZSgpKQotICAgICwgbV9tZWRpYUVsZW1l
bnQobWVkaWFFbGVtZW50KQotICAgICwgbV9zb3VyY2VOdW1iZXJPZkNoYW5uZWxzKDApCi0gICAg
LCBtX3NvdXJjZVNhbXBsZVJhdGUoMCkKLXsKLSAgICAvLyBEZWZhdWx0IHRvIHN0ZXJlby4gVGhp
cyBjb3VsZCBjaGFuZ2UgZGVwZW5kaW5nIG9uIHdoYXQgdGhlIG1lZGlhIGVsZW1lbnQgLnNyYyBp
cyBzZXQgdG8uCi0gICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhp
cywgMikpKTsKLQotICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlTWVkaWFFbGVtZW50QXVkaW9Tb3Vy
Y2UpOwotCi0gICAgaW5pdGlhbGl6ZSgpOwotfQotCi1NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGU6On5NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUoKQotewotICAgIG1fbWVkaWFFbGVtZW50
LT5zZXRBdWRpb1NvdXJjZU5vZGUoMCk7Ci0gICAgdW5pbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQg
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpzZXRGb3JtYXQoc2l6ZV90IG51bWJlck9mQ2hh
bm5lbHMsIGZsb2F0IHNvdXJjZVNhbXBsZVJhdGUpCi17Ci0gICAgaWYgKG51bWJlck9mQ2hhbm5l
bHMgIT0gbV9zb3VyY2VOdW1iZXJPZkNoYW5uZWxzIHx8IHNvdXJjZVNhbXBsZVJhdGUgIT0gbV9z
b3VyY2VTYW1wbGVSYXRlKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgbXVsdGktY2hh
bm5lbCBncmVhdGVyIHRoYW4gc3RlcmVvLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUxMTkKLSAgICAgICAgaWYgKCFudW1iZXJPZkNoYW5uZWxz
IHx8IG51bWJlck9mQ2hhbm5lbHMgPiAyIHx8IHNvdXJjZVNhbXBsZVJhdGUgPCBtaW5TYW1wbGVS
YXRlIHx8IHNvdXJjZVNhbXBsZVJhdGUgPiBtYXhTYW1wbGVSYXRlKSB7Ci0gICAgICAgICAgICAv
LyBwcm9jZXNzKCkgd2lsbCBnZW5lcmF0ZSBzaWxlbmNlIGZvciB0aGVzZSB1bmluaXRpYWxpemVk
IHZhbHVlcy4KLSAgICAgICAgICAgIExPRyhNZWRpYSwgIk1lZGlhRWxlbWVudEF1ZGlvU291cmNl
Tm9kZTo6c2V0Rm9ybWF0KCV1LCAlZikgLSB1bmhhbmRsZWQgZm9ybWF0IGNoYW5nZSIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihudW1iZXJPZkNoYW5uZWxzKSwgc291cmNlU2FtcGxlUmF0ZSk7Ci0g
ICAgICAgICAgICBtX3NvdXJjZU51bWJlck9mQ2hhbm5lbHMgPSAwOwotICAgICAgICAgICAgbV9z
b3VyY2VTYW1wbGVSYXRlID0gMDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIG1fc291cmNlTnVtYmVyT2ZDaGFubmVscyA9IG51bWJlck9mQ2hhbm5lbHM7Ci0gICAg
ICAgIG1fc291cmNlU2FtcGxlUmF0ZSA9IHNvdXJjZVNhbXBsZVJhdGU7Ci0KLSAgICAgICAgLy8g
U3luY2hyb25pemUgd2l0aCBwcm9jZXNzKCkuCi0gICAgICAgIExvY2tlcjxNZWRpYUVsZW1lbnRB
dWRpb1NvdXJjZU5vZGU+IGxvY2tlcigqdGhpcyk7Ci0KLSAgICAgICAgaWYgKHNvdXJjZVNhbXBs
ZVJhdGUgIT0gc2FtcGxlUmF0ZSgpKSB7Ci0gICAgICAgICAgICBkb3VibGUgc2NhbGVGYWN0b3Ig
PSBzb3VyY2VTYW1wbGVSYXRlIC8gc2FtcGxlUmF0ZSgpOwotICAgICAgICAgICAgbV9tdWx0aUNo
YW5uZWxSZXNhbXBsZXIgPSBhZG9wdFB0cihuZXcgTXVsdGlDaGFubmVsUmVzYW1wbGVyKHNjYWxl
RmFjdG9yLCBudW1iZXJPZkNoYW5uZWxzKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAvLyBCeXBhc3MgcmVzYW1wbGluZy4KLSAgICAgICAgICAgIG1fbXVsdGlDaGFubmVsUmVzYW1w
bGVyLmNsZWFyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUaGUg
Y29udGV4dCBtdXN0IGJlIGxvY2tlZCB3aGVuIGNoYW5naW5nIHRoZSBudW1iZXIgb2Ygb3V0cHV0
IGNoYW5uZWxzLgotICAgICAgICAgICAgQXVkaW9Db250ZXh0OjpBdXRvTG9ja2VyIGNvbnRleHRM
b2NrZXIoY29udGV4dCgpKTsKLQotICAgICAgICAgICAgLy8gRG8gYW55IG5lY2Vzc3NhcnkgcmUt
Y29uZmlndXJhdGlvbiB0byB0aGUgb3V0cHV0J3MgbnVtYmVyIG9mIGNoYW5uZWxzLgotICAgICAg
ICAgICAgb3V0cHV0KDApLT5zZXROdW1iZXJPZkNoYW5uZWxzKG51bWJlck9mQ2hhbm5lbHMpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6
cHJvY2VzcyhzaXplX3QgbnVtYmVyT2ZGcmFtZXMpCi17Ci0gICAgQXVkaW9CdXMqIG91dHB1dEJ1
cyA9IG91dHB1dCgwKS0+YnVzKCk7Ci0KLSAgICBpZiAoIW1lZGlhRWxlbWVudCgpIHx8ICFtX3Nv
dXJjZU51bWJlck9mQ2hhbm5lbHMgfHwgIW1fc291cmNlU2FtcGxlUmF0ZSkgewotICAgICAgICBv
dXRwdXRCdXMtPnplcm8oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFVzZSBh
IHRyeUxvY2soKSB0byBhdm9pZCBjb250ZW50aW9uIGluIHRoZSByZWFsLXRpbWUgYXVkaW8gdGhy
ZWFkLgotICAgIC8vIElmIHdlIGZhaWwgdG8gYWNxdWlyZSB0aGUgbG9jayB0aGVuIHRoZSBIVE1M
TWVkaWFFbGVtZW50IG11c3QgYmUgaW4gdGhlIG1pZGRsZSBvZgotICAgIC8vIHJlY29uZmlndXJp
bmcgaXRzIHBsYXliYWNrIGVuZ2luZSwgc28gd2Ugb3V0cHV0IHNpbGVuY2UgaW4gdGhpcyBjYXNl
LgotICAgIGlmIChtX3Byb2Nlc3NMb2NrLnRyeUxvY2soKSkgewotICAgICAgICBpZiAoQXVkaW9T
b3VyY2VQcm92aWRlciogcHJvdmlkZXIgPSBtZWRpYUVsZW1lbnQoKS0+YXVkaW9Tb3VyY2VQcm92
aWRlcigpKSB7Ci0gICAgICAgICAgICBpZiAobV9tdWx0aUNoYW5uZWxSZXNhbXBsZXIuZ2V0KCkp
IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9zb3VyY2VTYW1wbGVSYXRlICE9IHNhbXBsZVJh
dGUoKSk7Ci0gICAgICAgICAgICAgICAgbV9tdWx0aUNoYW5uZWxSZXNhbXBsZXItPnByb2Nlc3Mo
cHJvdmlkZXIsIG91dHB1dEJ1cywgbnVtYmVyT2ZGcmFtZXMpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAvLyBCeXBhc3MgdGhlIHJlc2FtcGxlciBjb21wbGV0ZWx5IGlm
IHRoZSBzb3VyY2UgaXMgYXQgdGhlIGNvbnRleHQncyBzYW1wbGUtcmF0ZS4KLSAgICAgICAgICAg
ICAgICBBU1NFUlQobV9zb3VyY2VTYW1wbGVSYXRlID09IHNhbXBsZVJhdGUoKSk7Ci0gICAgICAg
ICAgICAgICAgcHJvdmlkZXItPnByb3ZpZGVJbnB1dChvdXRwdXRCdXMsIG51bWJlck9mRnJhbWVz
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEVpdGhl
ciB0aGlzIHBvcnQgZG9lc24ndCB5ZXQgc3VwcG9ydCBIVE1MTWVkaWFFbGVtZW50IGF1ZGlvIHN0
cmVhbSBhY2Nlc3MsCi0gICAgICAgICAgICAvLyBvciB0aGUgc3RyZWFtIGlzIG5vdCB5ZXQgYXZh
aWxhYmxlLgotICAgICAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgbV9wcm9jZXNzTG9jay51bmxvY2soKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXZSBm
YWlsZWQgdG8gYWNxdWlyZSB0aGUgbG9jay4KLSAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7Ci0g
ICAgfQotfQotCi12b2lkIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6cmVzZXQoKQotewot
fQotCi12b2lkIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6bG9jaygpCi17Ci0gICAgcmVm
KCk7Ci0gICAgbV9wcm9jZXNzTG9jay5sb2NrKCk7Ci19Ci0KLXZvaWQgTWVkaWFFbGVtZW50QXVk
aW9Tb3VyY2VOb2RlOjp1bmxvY2soKQotewotICAgIG1fcHJvY2Vzc0xvY2sudW5sb2NrKCk7Ci0g
ICAgZGVyZWYoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5B
QkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBNZWRpYUVsZW1l
bnRBdWRpb1NvdXJjZU5vZGVfaAotI2RlZmluZSBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGVf
aAotCi0jaWYgRU5BQkxFKFZJREVPKQotCi0jaW5jbHVkZSAiQXVkaW9Tb3VyY2VOb2RlLmgiCi0j
aW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlckNsaWVudC5oIgotI2luY2x1ZGUgIkhUTUxNZWRp
YUVsZW1lbnQuaCIKLSNpbmNsdWRlICJNdWx0aUNoYW5uZWxSZXNhbXBsZXIuaCIKLSNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9Db250
ZXh0OwotICAgIAotY2xhc3MgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlIDogcHVibGljIEF1
ZGlvU291cmNlTm9kZSwgcHVibGljIEF1ZGlvU291cmNlUHJvdmlkZXJDbGllbnQgewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4gY3Jl
YXRlKEF1ZGlvQ29udGV4dCosIEhUTUxNZWRpYUVsZW1lbnQqKTsKLQotICAgIHZpcnR1YWwgfk1l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSgpOwotCi0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVk
aWFFbGVtZW50KCkgeyByZXR1cm4gbV9tZWRpYUVsZW1lbnQuZ2V0KCk7IH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLSAgICAvLyBBdWRpb05vZGUKLSAgICB2aXJ0
dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVzZXQoKTsKLSAgICAKLSAgICAvLyBBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50Ci0gICAg
dmlydHVhbCB2b2lkIHNldEZvcm1hdChzaXplX3QgbnVtYmVyT2ZDaGFubmVscywgZmxvYXQgc2Ft
cGxlUmF0ZSk7Ci0gICAgCi0gICAgdm9pZCBsb2NrKCk7Ci0gICAgdm9pZCB1bmxvY2soKTsKLQot
cHJpdmF0ZToKLSAgICBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUoQXVkaW9Db250ZXh0Kiwg
SFRNTE1lZGlhRWxlbWVudCopOwotCi0gICAgUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1fbWVk
aWFFbGVtZW50OwotICAgIE11dGV4IG1fcHJvY2Vzc0xvY2s7Ci0KLSAgICB1bnNpZ25lZCBtX3Nv
dXJjZU51bWJlck9mQ2hhbm5lbHM7Ci0gICAgZG91YmxlIG1fc291cmNlU2FtcGxlUmF0ZTsKLQot
ICAgIE93blB0cjxNdWx0aUNoYW5uZWxSZXNhbXBsZXI+IG1fbXVsdGlDaGFubmVsUmVzYW1wbGVy
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFZJREVP
KQotCi0jZW5kaWYgLy8gTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VO
b2RlLmlkbAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVk
aWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzMiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGF1ZGlvIHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAg
ICBDb25kaXRpb25hbD1XRUJfQVVESU8mVklERU8sCi0gICAgICAgIEpTR2VuZXJhdGVUb0pTT2Jq
ZWN0Ci0gICAgXSBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUgOiBBdWRpb1NvdXJjZU5vZGUg
ewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSFRNTE1lZGlhRWxlbWVudCBtZWRpYUVsZW1l
bnQ7Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRp
b0NvbXBsZXRpb25FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmNwcAkocmV2aXNpb24gMTExMjA4KQorKysg
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIk9mZmxpbmVBdWRp
b0NvbXBsZXRpb25FdmVudC5oIgotCi0jaW5jbHVkZSAiQXVkaW9CdWZmZXIuaCIKLSNpbmNsdWRl
ICJFdmVudE5hbWVzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxPZmZs
aW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ+IE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6Y3Jl
YXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9mZmxpbmVBdWRpb0NvbXBsZXRpb25F
dmVudCk7Ci19Ci0KLVBhc3NSZWZQdHI8T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50PiBPZmZs
aW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ6OmNyZWF0ZShQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBy
ZW5kZXJlZEJ1ZmZlcikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9mZmxpbmVBdWRpb0Nv
bXBsZXRpb25FdmVudChyZW5kZXJlZEJ1ZmZlcikpOwotfQotCi1PZmZsaW5lQXVkaW9Db21wbGV0
aW9uRXZlbnQ6Ok9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCgpCi17Ci19Ci0KLQotT2ZmbGlu
ZUF1ZGlvQ29tcGxldGlvbkV2ZW50OjpPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQoUGFzc1Jl
ZlB0cjxBdWRpb0J1ZmZlcj4gcmVuZGVyZWRCdWZmZXIpCi0gICAgOiBFdmVudChldmVudE5hbWVz
KCkuY29tcGxldGVFdmVudCwgdHJ1ZSwgZmFsc2UpCi0gICAgLCBtX3JlbmRlcmVkQnVmZmVyKHJl
bmRlcmVkQnVmZmVyKQotewotfQotCi1PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ6On5PZmZs
aW5lQXVkaW9Db21wbGV0aW9uRXZlbnQoKQotewotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIE9m
ZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZl
bnQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJf
QVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0
aW9uRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5l
QXVkaW9Db21wbGV0aW9uRXZlbnQuaAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgT2ZmbGluZUF1ZGlvQ29tcGxl
dGlvbkV2ZW50X2gKLSNkZWZpbmUgT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50X2gKLQotI2lu
Y2x1ZGUgIkF1ZGlvQnVmZmVyLmgiCi0jaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBBdWRpb0J1ZmZlcjsKLSAgICAKLWNsYXNzIE9mZmxpbmVBdWRpb0NvbXBs
ZXRpb25FdmVudCA6IHB1YmxpYyBFdmVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50PiBjcmVhdGUoKTsKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ+IGNyZWF0ZShQYXNzUmVmUHRyPEF1
ZGlvQnVmZmVyPiByZW5kZXJlZEJ1ZmZlcik7Ci0gICAgCi0gICAgdmlydHVhbCB+T2ZmbGluZUF1
ZGlvQ29tcGxldGlvbkV2ZW50KCk7Ci0KLSAgICBBdWRpb0J1ZmZlciogcmVuZGVyZWRCdWZmZXIo
KSB7IHJldHVybiBtX3JlbmRlcmVkQnVmZmVyLmdldCgpOyB9Ci0KLSAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIE9m
ZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCgpOwotICAgIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25F
dmVudChQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiByZW5kZXJlZEJ1ZmZlcik7Ci0KLSAgICBSZWZQ
dHI8QXVkaW9CdWZmZXI+IG1fcmVuZGVyZWRCdWZmZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnRfaApJbmRleDog
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0
aW9uRXZlbnQuaWRsCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgYXVkaW8gewotICAgIGludGVyZmFjZSBbCi0g
ICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKLSAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmpl
Y3QKLSAgICBdIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCA6IEV2ZW50IHsKLSAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlvQnVmZmVyIHJlbmRlcmVkQnVmZmVyOwotICAgIH07Ci19
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRp
b0Rlc3RpbmF0aW9uTm9kZS5jcHAJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
ZiBFTkFCTEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25O
b2RlLmgiCi0KLSNpbmNsdWRlICJBdWRpb0J1cy5oIgotI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5o
IgotI2luY2x1ZGUgIkhSVEZEYXRhYmFzZUxvYWRlci5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4K
LSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotIAot
bmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotY29uc3Qgc2l6ZV90IHJlbmRlclF1YW50dW1TaXpl
ID0gMTI4OyAgICAKLQotT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpPZmZsaW5lQXVkaW9E
ZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBBdWRpb0J1ZmZlciogcmVuZGVy
VGFyZ2V0KQotICAgIDogQXVkaW9EZXN0aW5hdGlvbk5vZGUoY29udGV4dCwgcmVuZGVyVGFyZ2V0
LT5zYW1wbGVSYXRlKCkpCi0gICAgLCBtX3JlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpCi0gICAg
LCBtX3JlbmRlclRocmVhZCgwKQotICAgICwgbV9zdGFydGVkUmVuZGVyaW5nKGZhbHNlKQotewot
ICAgIG1fcmVuZGVyQnVzID0gYWRvcHRQdHIobmV3IEF1ZGlvQnVzKHJlbmRlclRhcmdldC0+bnVt
YmVyT2ZDaGFubmVscygpLCByZW5kZXJRdWFudHVtU2l6ZSkpOwotfQotCi1PZmZsaW5lQXVkaW9E
ZXN0aW5hdGlvbk5vZGU6On5PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUoKQotewotICAgIHVu
aW5pdGlhbGl6ZSgpOwotfQotCi12b2lkIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6aW5p
dGlhbGl6ZSgpCi17Ci0gICAgaWYgKGlzSW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgT2ZmbGluZUF1ZGlvRGVz
dGluYXRpb25Ob2RlOjp1bmluaXRpYWxpemUoKQotewotICAgIGlmICghaXNJbml0aWFsaXplZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9yZW5kZXJUaHJlYWQpIHsKLSAgICAgICAg
d2FpdEZvclRocmVhZENvbXBsZXRpb24obV9yZW5kZXJUaHJlYWQpOwotICAgICAgICBtX3JlbmRl
clRocmVhZCA9IDA7Ci0gICAgfQotCi0gICAgQXVkaW9Ob2RlOjp1bmluaXRpYWxpemUoKTsKLX0K
LQotdm9pZCBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnN0YXJ0UmVuZGVyaW5nKCkKLXsK
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVChtX3JlbmRlclRhcmdldC5n
ZXQoKSk7Ci0gICAgaWYgKCFtX3JlbmRlclRhcmdldC5nZXQoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIGlmICghbV9zdGFydGVkUmVuZGVyaW5nKSB7Ci0gICAgICAgIG1fc3RhcnRlZFJl
bmRlcmluZyA9IHRydWU7Ci0gICAgICAgIHJlZigpOyAvLyBTZWUgY29ycmVzcG9uZGluZyBkZXJl
ZigpIGNhbGwgaW4gbm90aWZ5Q29tcGxldGVEaXNwYXRjaCgpLgotICAgICAgICBtX3JlbmRlclRo
cmVhZCA9IGNyZWF0ZVRocmVhZChPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnJlbmRlckVu
dHJ5LCB0aGlzLCAib2ZmbGluZSByZW5kZXJlciIpOwotICAgIH0KLX0KLQotLy8gRG8gb2ZmbGlu
ZSByZW5kZXJpbmcgaW4gdGhpcyB0aHJlYWQuCi12b2lkIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9u
Tm9kZTo6cmVuZGVyRW50cnkodm9pZCogdGhyZWFkRGF0YSkKLXsKLSAgICBPZmZsaW5lQXVkaW9E
ZXN0aW5hdGlvbk5vZGUqIGRlc3RpbmF0aW9uTm9kZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8T2ZmbGlu
ZUF1ZGlvRGVzdGluYXRpb25Ob2RlKj4odGhyZWFkRGF0YSk7Ci0gICAgQVNTRVJUKGRlc3RpbmF0
aW9uTm9kZSk7Ci0gICAgZGVzdGluYXRpb25Ob2RlLT5yZW5kZXIoKTsKLX0KLQotdm9pZCBPZmZs
aW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnJlbmRlcigpCi17Ci0gICAgQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7Ci0gICAgQVNTRVJUKG1fcmVuZGVyQnVzLmdldCgpKTsKLSAgICBpZiAoIW1fcmVu
ZGVyQnVzLmdldCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYm9vbCBjaGFubmVsc01h
dGNoID0gbV9yZW5kZXJCdXMtPm51bWJlck9mQ2hhbm5lbHMoKSA9PSBtX3JlbmRlclRhcmdldC0+
bnVtYmVyT2ZDaGFubmVscygpOwotICAgIEFTU0VSVChjaGFubmVsc01hdGNoKTsKLSAgICBpZiAo
IWNoYW5uZWxzTWF0Y2gpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgYm9vbCBpc1Jl
bmRlckJ1c0FsbG9jYXRlZCA9IG1fcmVuZGVyQnVzLT5sZW5ndGgoKSA+PSByZW5kZXJRdWFudHVt
U2l6ZTsKLSAgICBBU1NFUlQoaXNSZW5kZXJCdXNBbGxvY2F0ZWQpOwotICAgIGlmICghaXNSZW5k
ZXJCdXNBbGxvY2F0ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgLy8gU3luY2hy
b25pemUgd2l0aCBIUlRGRGF0YWJhc2VMb2FkZXIuCi0gICAgLy8gVGhlIGRhdGFiYXNlIG11c3Qg
YmUgbG9hZGVkIGJlZm9yZSB3ZSBjYW4gcHJvY2VlZC4KLSAgICBIUlRGRGF0YWJhc2VMb2FkZXIq
IGxvYWRlciA9IEhSVEZEYXRhYmFzZUxvYWRlcjo6bG9hZGVyKCk7Ci0gICAgQVNTRVJUKGxvYWRl
cik7Ci0gICAgaWYgKCFsb2FkZXIpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBsb2FkZXIt
PndhaXRGb3JMb2FkZXJUaHJlYWRDb21wbGV0aW9uKCk7Ci0gICAgICAgIAotICAgIC8vIEJyZWFr
IHVwIHRoZSByZW5kZXIgdGFyZ2V0IGludG8gc21hbGxlciAicmVuZGVyIHF1YW50aXplIiBzaXpl
ZCBwaWVjZXMuCi0gICAgLy8gUmVuZGVyIHVudGlsIHdlJ3JlIGZpbmlzaGVkLgotICAgIHNpemVf
dCBmcmFtZXNUb1Byb2Nlc3MgPSBtX3JlbmRlclRhcmdldC0+bGVuZ3RoKCk7Ci0gICAgdW5zaWdu
ZWQgbnVtYmVyT2ZDaGFubmVscyA9IG1fcmVuZGVyVGFyZ2V0LT5udW1iZXJPZkNoYW5uZWxzKCk7
Ci0KLSAgICB1bnNpZ25lZCBuID0gMDsKLSAgICB3aGlsZSAoZnJhbWVzVG9Qcm9jZXNzID4gMCkg
ewotICAgICAgICAvLyBSZW5kZXIgb25lIHJlbmRlciBxdWFudHVtLgotICAgICAgICBwcm92aWRl
SW5wdXQobV9yZW5kZXJCdXMuZ2V0KCksIHJlbmRlclF1YW50dW1TaXplKTsKLSAgICAgICAgCi0g
ICAgICAgIHNpemVfdCBmcmFtZXNBdmFpbGFibGVUb0NvcHkgPSBtaW4oZnJhbWVzVG9Qcm9jZXNz
LCByZW5kZXJRdWFudHVtU2l6ZSk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGNo
YW5uZWxJbmRleCA9IDA7IGNoYW5uZWxJbmRleCA8IG51bWJlck9mQ2hhbm5lbHM7ICsrY2hhbm5l
bEluZGV4KSB7Ci0gICAgICAgICAgICBjb25zdCBmbG9hdCogc291cmNlID0gbV9yZW5kZXJCdXMt
PmNoYW5uZWwoY2hhbm5lbEluZGV4KS0+ZGF0YSgpOwotICAgICAgICAgICAgZmxvYXQqIGRlc3Rp
bmF0aW9uID0gbV9yZW5kZXJUYXJnZXQtPmdldENoYW5uZWxEYXRhKGNoYW5uZWxJbmRleCktPmRh
dGEoKTsKLSAgICAgICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiArIG4sIHNvdXJjZSwgc2l6ZW9m
KGZsb2F0KSAqIGZyYW1lc0F2YWlsYWJsZVRvQ29weSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIG4gKz0gZnJhbWVzQXZhaWxhYmxlVG9Db3B5OwotICAgICAgICBmcmFtZXNUb1Byb2Nl
c3MgLT0gZnJhbWVzQXZhaWxhYmxlVG9Db3B5OwotICAgIH0KLSAgICAKLSAgICAvLyBPdXIgd29y
ayBpcyBkb25lLiBMZXQgdGhlIEF1ZGlvQ29udGV4dCBrbm93LgotICAgIGNhbGxPbk1haW5UaHJl
YWQobm90aWZ5Q29tcGxldGVEaXNwYXRjaCwgdGhpcyk7Ci19Ci0KLXZvaWQgT2ZmbGluZUF1ZGlv
RGVzdGluYXRpb25Ob2RlOjpub3RpZnlDb21wbGV0ZURpc3BhdGNoKHZvaWQqIHVzZXJEYXRhKQot
ewotICAgIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZSogZGVzdGluYXRpb25Ob2RlID0gc3Rh
dGljX2Nhc3Q8T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlKj4odXNlckRhdGEpOwotICAgIEFT
U0VSVChkZXN0aW5hdGlvbk5vZGUpOwotICAgIGlmICghZGVzdGluYXRpb25Ob2RlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBkZXN0aW5hdGlvbk5vZGUtPm5vdGlmeUNvbXBsZXRlKCk7Ci0gICAg
ZGVzdGluYXRpb25Ob2RlLT5kZXJlZigpOwotfQotCi12b2lkIE9mZmxpbmVBdWRpb0Rlc3RpbmF0
aW9uTm9kZTo6bm90aWZ5Q29tcGxldGUoKQotewotICAgIGNvbnRleHQoKS0+ZmlyZUNvbXBsZXRp
b25FdmVudCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlv
RGVzdGluYXRpb25Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE9mZmxpbmVBdWRp
b0Rlc3RpbmF0aW9uTm9kZV9oCi0jZGVmaW5lIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZV9o
Ci0KLSNpbmNsdWRlICJBdWRpb0J1ZmZlci5oIgotI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb25O
b2RlLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIEF1ZGlvQnVzOwotY2xhc3MgQXVkaW9Db250ZXh0OwotICAgIAotY2xhc3MgT2ZmbGlu
ZUF1ZGlvRGVzdGluYXRpb25Ob2RlIDogcHVibGljIEF1ZGlvRGVzdGluYXRpb25Ob2RlIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU+
IGNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIEF1ZGlvQnVmZmVyKiByZW5kZXJUYXJnZXQp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9mZmxpbmVBdWRpb0Rlc3RpbmF0
aW9uTm9kZShjb250ZXh0LCByZW5kZXJUYXJnZXQpKTsgICAgIAotICAgIH0KLQotICAgIHZpcnR1
YWwgfk9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZSgpOwotICAgIAotICAgIC8vIEF1ZGlvTm9k
ZSAgIAotICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVu
aW5pdGlhbGl6ZSgpOwotICAgIHZpcnR1YWwgZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVuZGVyVGFyZ2V0LT5zYW1wbGVSYXRlKCk7IH0KLQotICAgIHZvaWQgc3RhcnRSZW5k
ZXJpbmcoKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2Rl
KEF1ZGlvQ29udGV4dCosIEF1ZGlvQnVmZmVyKiByZW5kZXJUYXJnZXQpOwotCi0gICAgLy8gVGhp
cyBBdWRpb05vZGUgcmVuZGVycyBpbnRvIHRoaXMgQXVkaW9CdWZmZXIuCi0gICAgUmVmUHRyPEF1
ZGlvQnVmZmVyPiBtX3JlbmRlclRhcmdldDsKLSAgICAKLSAgICAvLyBUZW1wb3JhcnkgQXVkaW9C
dXMgZm9yIGVhY2ggcmVuZGVyIHF1YW50dW0uCi0gICAgT3duUHRyPEF1ZGlvQnVzPiBtX3JlbmRl
ckJ1czsKLSAgICAKLSAgICAvLyBSZW5kZXJpbmcgdGhyZWFkLgotICAgIHZvbGF0aWxlIFRocmVh
ZElkZW50aWZpZXIgbV9yZW5kZXJUaHJlYWQ7Ci0gICAgYm9vbCBtX3N0YXJ0ZWRSZW5kZXJpbmc7
Ci0gICAgc3RhdGljIHZvaWQgcmVuZGVyRW50cnkodm9pZCogdGhyZWFkRGF0YSk7Ci0gICAgdm9p
ZCByZW5kZXIoKTsKLSAgICAKLSAgICAvLyBGb3IgY29tcGxldGlvbiBjYWxsYmFjayBvbiBtYWlu
IHRocmVhZC4KLSAgICBzdGF0aWMgdm9pZCBub3RpZnlDb21wbGV0ZURpc3BhdGNoKHZvaWQqIHVz
ZXJEYXRhKTsKLSAgICB2b2lkIG5vdGlmeUNvbXBsZXRlKCk7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGVfaApJbmRl
eDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5jcHAJKHJldmlz
aW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIlJlYWx0
aW1lQW5hbHlzZXIuaCIKLQotI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCi0jaW5jbHVkZSAiQXVkaW9V
dGlsaXRpZXMuaCIKLSNpbmNsdWRlICJGRlRGcmFtZS5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGht
PgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9Db21wbGV4Lmg+Ci0jaW5jbHVk
ZSA8d3RmL0Zsb2F0MzJBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvVWludDhBcnJheS5oPgotCi11
c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0IGRvdWJs
ZSBSZWFsdGltZUFuYWx5c2VyOjpEZWZhdWx0U21vb3RoaW5nVGltZUNvbnN0YW50ICA9IDAuODsK
LWNvbnN0IGRvdWJsZSBSZWFsdGltZUFuYWx5c2VyOjpEZWZhdWx0TWluRGVjaWJlbHMgPSAtMTAw
OwotY29uc3QgZG91YmxlIFJlYWx0aW1lQW5hbHlzZXI6OkRlZmF1bHRNYXhEZWNpYmVscyA9IC0z
MDsKLQotY29uc3QgdW5zaWduZWQgUmVhbHRpbWVBbmFseXNlcjo6RGVmYXVsdEZGVFNpemUgPSAy
MDQ4OwotLy8gQWxsIEZGVCBpbXBsZW1lbnRhdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGhhbmRsZSBw
b3dlci1vZi10d28gc2l6ZXMgTWluRkZUU2l6ZSA8PSBzaXplIDw9IE1heEZGVFNpemUuCi1jb25z
dCB1bnNpZ25lZCBSZWFsdGltZUFuYWx5c2VyOjpNaW5GRlRTaXplID0gMTI4OwotY29uc3QgdW5z
aWduZWQgUmVhbHRpbWVBbmFseXNlcjo6TWF4RkZUU2l6ZSA9IDIwNDg7Ci1jb25zdCB1bnNpZ25l
ZCBSZWFsdGltZUFuYWx5c2VyOjpJbnB1dEJ1ZmZlclNpemUgPSBSZWFsdGltZUFuYWx5c2VyOjpN
YXhGRlRTaXplICogMjsKLQotUmVhbHRpbWVBbmFseXNlcjo6UmVhbHRpbWVBbmFseXNlcigpCi0g
ICAgOiBtX2lucHV0QnVmZmVyKElucHV0QnVmZmVyU2l6ZSkKLSAgICAsIG1fd3JpdGVJbmRleCgw
KQotICAgICwgbV9mZnRTaXplKERlZmF1bHRGRlRTaXplKQotICAgICwgbV9tYWduaXR1ZGVCdWZm
ZXIoRGVmYXVsdEZGVFNpemUgLyAyKQotICAgICwgbV9zbW9vdGhpbmdUaW1lQ29uc3RhbnQoRGVm
YXVsdFNtb290aGluZ1RpbWVDb25zdGFudCkKLSAgICAsIG1fbWluRGVjaWJlbHMoRGVmYXVsdE1p
bkRlY2liZWxzKQotICAgICwgbV9tYXhEZWNpYmVscyhEZWZhdWx0TWF4RGVjaWJlbHMpCi17Ci0g
ICAgbV9hbmFseXNpc0ZyYW1lID0gYWRvcHRQdHIobmV3IEZGVEZyYW1lKERlZmF1bHRGRlRTaXpl
KSk7Ci19Ci0KLVJlYWx0aW1lQW5hbHlzZXI6On5SZWFsdGltZUFuYWx5c2VyKCkKLXsKLX0KLQot
dm9pZCBSZWFsdGltZUFuYWx5c2VyOjpyZXNldCgpCi17Ci0gICAgbV93cml0ZUluZGV4ID0gMDsK
LSAgICBtX2lucHV0QnVmZmVyLnplcm8oKTsKLSAgICBtX21hZ25pdHVkZUJ1ZmZlci56ZXJvKCk7
Ci19Ci0KLXZvaWQgUmVhbHRpbWVBbmFseXNlcjo6c2V0RmZ0U2l6ZShzaXplX3Qgc2l6ZSkKLXsK
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gT25seSBhbGxvdyBwb3dlcnMg
b2YgdHdvLgotICAgIHVuc2lnbmVkIGxvZzJzaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxv
ZzIoc2l6ZSkpOwotICAgIGJvb2wgaXNQT1QoMVVMIDw8IGxvZzJzaXplID09IHNpemUpOwotCi0g
ICAgaWYgKCFpc1BPVCB8fCBzaXplID4gTWF4RkZUU2l6ZSB8fCBzaXplIDwgTWluRkZUU2l6ZSkg
ewotICAgICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgZ29vZCB0byBhbHNvIHNldCBhbiBleGNl
cHRpb24uCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9mZnRTaXplICE9IHNp
emUpIHsKLSAgICAgICAgbV9hbmFseXNpc0ZyYW1lID0gYWRvcHRQdHIobmV3IEZGVEZyYW1lKHNp
emUpKTsKLSAgICAgICAgLy8gbV9tYWduaXR1ZGVCdWZmZXIgaGFzIHNpemUgPSBmZnRTaXplIC8g
MiBiZWNhdXNlIGl0IGNvbnRhaW5zIGZsb2F0cyByZWR1Y2VkIGZyb20gY29tcGxleCB2YWx1ZXMg
aW4gbV9hbmFseXNpc0ZyYW1lLgotICAgICAgICBtX21hZ25pdHVkZUJ1ZmZlci5hbGxvY2F0ZShz
aXplIC8gMik7Ci0gICAgICAgIG1fZmZ0U2l6ZSA9IHNpemU7Ci0gICAgfQotfQotCi12b2lkIFJl
YWx0aW1lQW5hbHlzZXI6OndyaXRlSW5wdXQoQXVkaW9CdXMqIGJ1cywgc2l6ZV90IGZyYW1lc1Rv
UHJvY2VzcykKLXsKLSAgICBib29sIGlzQnVzR29vZCA9IGJ1cyAmJiBidXMtPm51bWJlck9mQ2hh
bm5lbHMoKSA+IDAgJiYgYnVzLT5jaGFubmVsKDApLT5sZW5ndGgoKSA+PSBmcmFtZXNUb1Byb2Nl
c3M7Ci0gICAgQVNTRVJUKGlzQnVzR29vZCk7Ci0gICAgaWYgKCFpc0J1c0dvb2QpCi0gICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgLy8gRklYTUUgOiBhbGxvdyB0byB3b3JrIHdpdGggbm9u
LUZGVFNpemUgZGl2aXNpYmxlIGNodW5raW5nCi0gICAgYm9vbCBpc0Rlc3RpbmF0aW9uR29vZCA9
IG1fd3JpdGVJbmRleCA8IG1faW5wdXRCdWZmZXIuc2l6ZSgpICYmIG1fd3JpdGVJbmRleCArIGZy
YW1lc1RvUHJvY2VzcyA8PSBtX2lucHV0QnVmZmVyLnNpemUoKTsKLSAgICBBU1NFUlQoaXNEZXN0
aW5hdGlvbkdvb2QpOwotICAgIGlmICghaXNEZXN0aW5hdGlvbkdvb2QpCi0gICAgICAgIHJldHVy
bjsgICAgCi0gICAgCi0gICAgLy8gUGVyZm9ybSByZWFsLXRpbWUgYW5hbHlzaXMKLSAgICAvLyBG
SVhNRSA6IGZvciBub3cganVzdCB1c2UgbGVmdCBjaGFubmVsIChtdXN0IG1peCBpZiBzdGVyZW8g
c291cmNlKQotICAgIGNvbnN0IGZsb2F0KiBzb3VyY2UgPSBidXMtPmNoYW5uZWwoMCktPmRhdGEo
KTsKLQotICAgIC8vIFRoZSBzb3VyY2UgaGFzIGFscmVhZHkgYmVlbiBzYW5pdHkgY2hlY2tlZCB3
aXRoIGlzQnVzR29vZCBhYm92ZS4KLSAgICAKLSAgICBtZW1jcHkobV9pbnB1dEJ1ZmZlci5kYXRh
KCkgKyBtX3dyaXRlSW5kZXgsIHNvdXJjZSwgc2l6ZW9mKGZsb2F0KSAqIGZyYW1lc1RvUHJvY2Vz
cyk7Ci0KLSAgICBtX3dyaXRlSW5kZXggKz0gZnJhbWVzVG9Qcm9jZXNzOwotICAgIGlmIChtX3dy
aXRlSW5kZXggPj0gSW5wdXRCdWZmZXJTaXplKQotICAgICAgICBtX3dyaXRlSW5kZXggPSAwOwot
fQotCi1uYW1lc3BhY2UgewotCi12b2lkIGFwcGx5V2luZG93KGZsb2F0KiBwLCBzaXplX3QgbikK
LXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIAotICAgIC8vIEJsYWNrbWFuIHdp
bmRvdwotICAgIGRvdWJsZSBhbHBoYSA9IDAuMTY7Ci0gICAgZG91YmxlIGEwID0gMC41ICogKDEg
LSBhbHBoYSk7Ci0gICAgZG91YmxlIGExID0gMC41OwotICAgIGRvdWJsZSBhMiA9IDAuNSAqIGFs
cGhhOwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuOyArK2kpIHsKLSAgICAg
ICAgZG91YmxlIHggPSBzdGF0aWNfY2FzdDxkb3VibGU+KGkpIC8gc3RhdGljX2Nhc3Q8ZG91Ymxl
PihuKTsKLSAgICAgICAgZG91YmxlIHdpbmRvdyA9IGEwIC0gYTEgKiBjb3MoMiAqIHBpRG91Ymxl
ICogeCkgKyBhMiAqIGNvcyg0ICogcGlEb3VibGUgKiB4KTsKLSAgICAgICAgcFtpXSAqPSBmbG9h
dCh3aW5kb3cpOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UKLQotdm9pZCBSZWFsdGltZUFu
YWx5c2VyOjpkb0ZGVEFuYWx5c2lzKCkKLXsgICAgCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKLQotICAgIC8vIFVucm9sbCB0aGUgaW5wdXQgYnVmZmVyIGludG8gYSB0ZW1wb3JhcnkgYnVm
ZmVyLCB3aGVyZSB3ZSdsbCBhcHBseSBhbiBhbmFseXNpcyB3aW5kb3cgZm9sbG93ZWQgYnkgYW4g
RkZULgotICAgIHNpemVfdCBmZnRTaXplID0gdGhpcy0+ZmZ0U2l6ZSgpOwotICAgIAotICAgIEF1
ZGlvRmxvYXRBcnJheSB0ZW1wb3JhcnlCdWZmZXIoZmZ0U2l6ZSk7Ci0gICAgZmxvYXQqIGlucHV0
QnVmZmVyID0gbV9pbnB1dEJ1ZmZlci5kYXRhKCk7Ci0gICAgZmxvYXQqIHRlbXBQID0gdGVtcG9y
YXJ5QnVmZmVyLmRhdGEoKTsKLQotICAgIC8vIFRha2UgdGhlIHByZXZpb3VzIGZmdFNpemUgdmFs
dWVzIGZyb20gdGhlIGlucHV0IGJ1ZmZlciBhbmQgY29weSBpbnRvIHRoZSB0ZW1wb3JhcnkgYnVm
ZmVyLgotICAgIHVuc2lnbmVkIHdyaXRlSW5kZXggPSBtX3dyaXRlSW5kZXg7Ci0gICAgaWYgKHdy
aXRlSW5kZXggPCBmZnRTaXplKSB7Ci0gICAgICAgIG1lbWNweSh0ZW1wUCwgaW5wdXRCdWZmZXIg
KyB3cml0ZUluZGV4IC0gZmZ0U2l6ZSArIElucHV0QnVmZmVyU2l6ZSwgc2l6ZW9mKCp0ZW1wUCkg
KiAoZmZ0U2l6ZSAtIHdyaXRlSW5kZXgpKTsKLSAgICAgICAgbWVtY3B5KHRlbXBQICsgZmZ0U2l6
ZSAtIHdyaXRlSW5kZXgsIGlucHV0QnVmZmVyLCBzaXplb2YoKnRlbXBQKSAqIHdyaXRlSW5kZXgp
OwotICAgIH0gZWxzZSAKLSAgICAgICAgbWVtY3B5KHRlbXBQLCBpbnB1dEJ1ZmZlciArIHdyaXRl
SW5kZXggLSBmZnRTaXplLCBzaXplb2YoKnRlbXBQKSAqIGZmdFNpemUpOwotCi0gICAgCi0gICAg
Ly8gV2luZG93IHRoZSBpbnB1dCBzYW1wbGVzLgotICAgIGFwcGx5V2luZG93KHRlbXBQLCBmZnRT
aXplKTsKLSAgICAKLSAgICAvLyBEbyB0aGUgYW5hbHlzaXMuCi0gICAgbV9hbmFseXNpc0ZyYW1l
LT5kb0ZGVCh0ZW1wUCk7Ci0KLSAgICBmbG9hdCogcmVhbFAgPSBtX2FuYWx5c2lzRnJhbWUtPnJl
YWxEYXRhKCk7Ci0gICAgZmxvYXQqIGltYWdQID0gbV9hbmFseXNpc0ZyYW1lLT5pbWFnRGF0YSgp
OwotCi0gICAgLy8gQmxvdyBhd2F5IHRoZSBwYWNrZWQgbnlxdWlzdCBjb21wb25lbnQuCi0gICAg
aW1hZ1BbMF0gPSAwOwotICAgIAotICAgIC8vIE5vcm1hbGl6ZSBzbyB0aGFuIGFuIGlucHV0IHNp
bmUgd2F2ZSBhdCAwZEJmcyByZWdpc3RlcnMgYXMgMGRCZnMgKHVuZG8gRkZUIHNjYWxpbmcgZmFj
dG9yKS4KLSAgICBjb25zdCBkb3VibGUgbWFnbml0dWRlU2NhbGUgPSAxLjAgLyBEZWZhdWx0RkZU
U2l6ZTsKLQotICAgIC8vIEEgdmFsdWUgb2YgMCBkb2VzIG5vIGF2ZXJhZ2luZyB3aXRoIHRoZSBw
cmV2aW91cyByZXN1bHQuICBMYXJnZXIgdmFsdWVzIHByb2R1Y2Ugc2xvd2VyLCBidXQgc21vb3Ro
ZXIgY2hhbmdlcy4KLSAgICBkb3VibGUgayA9IG1fc21vb3RoaW5nVGltZUNvbnN0YW50OwotICAg
IGsgPSBtYXgoMC4wLCBrKTsKLSAgICBrID0gbWluKDEuMCwgayk7ICAgIAotICAgIAotICAgIC8v
IENvbnZlcnQgdGhlIGFuYWx5c2lzIGRhdGEgZnJvbSBjb21wbGV4IHRvIG1hZ25pdHVkZSBhbmQg
YXZlcmFnZSB3aXRoIHRoZSBwcmV2aW91cyByZXN1bHQuCi0gICAgZmxvYXQqIGRlc3RpbmF0aW9u
ID0gbWFnbml0dWRlQnVmZmVyKCkuZGF0YSgpOwotICAgIHNpemVfdCBuID0gbWFnbml0dWRlQnVm
ZmVyKCkuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7Ci0gICAg
ICAgIENvbXBsZXggYyhyZWFsUFtpXSwgaW1hZ1BbaV0pOwotICAgICAgICBkb3VibGUgc2NhbGFy
TWFnbml0dWRlID0gYWJzKGMpICogbWFnbml0dWRlU2NhbGU7ICAgICAgICAKLSAgICAgICAgZGVz
dGluYXRpb25baV0gPSBmbG9hdChrICogZGVzdGluYXRpb25baV0gKyAoMSAtIGspICogc2NhbGFy
TWFnbml0dWRlKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVhbHRpbWVBbmFseXNlcjo6Z2V0RmxvYXRG
cmVxdWVuY3lEYXRhKEZsb2F0MzJBcnJheSogZGVzdGluYXRpb25BcnJheSkKLXsKLSAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKCFkZXN0aW5hdGlvbkFycmF5KQotICAgICAg
ICByZXR1cm47Ci0gICAgICAgIAotICAgIGRvRkZUQW5hbHlzaXMoKTsKLSAgICAKLSAgICAvLyBD
b252ZXJ0IGZyb20gbGluZWFyIG1hZ25pdHVkZSB0byBmbG9hdGluZy1wb2ludCBkZWNpYmVscy4K
LSAgICBjb25zdCBkb3VibGUgbWluRGVjaWJlbHMgPSBtX21pbkRlY2liZWxzOwotICAgIHVuc2ln
bmVkIHNvdXJjZUxlbmd0aCA9IG1hZ25pdHVkZUJ1ZmZlcigpLnNpemUoKTsKLSAgICBzaXplX3Qg
bGVuID0gbWluKHNvdXJjZUxlbmd0aCwgZGVzdGluYXRpb25BcnJheS0+bGVuZ3RoKCkpOwotICAg
IGlmIChsZW4gPiAwKSB7Ci0gICAgICAgIGNvbnN0IGZsb2F0KiBzb3VyY2UgPSBtYWduaXR1ZGVC
dWZmZXIoKS5kYXRhKCk7Ci0gICAgICAgIGZsb2F0KiBkZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9u
QXJyYXktPmRhdGEoKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW47ICsraSkgewotICAgICAgICAgICAgZmxvYXQgbGluZWFyVmFsdWUgPSBzb3VyY2VbaV07
Ci0gICAgICAgICAgICBkb3VibGUgZGJNYWcgPSAhbGluZWFyVmFsdWUgPyBtaW5EZWNpYmVscyA6
IEF1ZGlvVXRpbGl0aWVzOjpsaW5lYXJUb0RlY2liZWxzKGxpbmVhclZhbHVlKTsKLSAgICAgICAg
ICAgIGRlc3RpbmF0aW9uW2ldID0gZmxvYXQoZGJNYWcpOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci12b2lkIFJlYWx0aW1lQW5hbHlzZXI6OmdldEJ5dGVGcmVxdWVuY3lEYXRhKFVpbnQ4QXJyYXkq
IGRlc3RpbmF0aW9uQXJyYXkpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAg
IGlmICghZGVzdGluYXRpb25BcnJheSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBk
b0ZGVEFuYWx5c2lzKCk7Ci0gICAgCi0gICAgLy8gQ29udmVydCBmcm9tIGxpbmVhciBtYWduaXR1
ZGUgdG8gdW5zaWduZWQtYnl0ZSBkZWNpYmVscy4KLSAgICB1bnNpZ25lZCBzb3VyY2VMZW5ndGgg
PSBtYWduaXR1ZGVCdWZmZXIoKS5zaXplKCk7Ci0gICAgc2l6ZV90IGxlbiA9IG1pbihzb3VyY2VM
ZW5ndGgsIGRlc3RpbmF0aW9uQXJyYXktPmxlbmd0aCgpKTsKLSAgICBpZiAobGVuID4gMCkgewot
ICAgICAgICBjb25zdCBkb3VibGUgcmFuZ2VTY2FsZUZhY3RvciA9IG1fbWF4RGVjaWJlbHMgPT0g
bV9taW5EZWNpYmVscyA/IDEgOiAxIC8gKG1fbWF4RGVjaWJlbHMgLSBtX21pbkRlY2liZWxzKTsK
LSAgICAgICAgY29uc3QgZG91YmxlIG1pbkRlY2liZWxzID0gbV9taW5EZWNpYmVsczsKLQotICAg
ICAgICBjb25zdCBmbG9hdCogc291cmNlID0gbWFnbml0dWRlQnVmZmVyKCkuZGF0YSgpOwotICAg
ICAgICB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uQXJyYXktPmRhdGEo
KTsgICAgICAgIAotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bjsgKytpKSB7Ci0gICAgICAgICAgICBmbG9hdCBsaW5lYXJWYWx1ZSA9IHNvdXJjZVtpXTsKLSAg
ICAgICAgICAgIGRvdWJsZSBkYk1hZyA9ICFsaW5lYXJWYWx1ZSA/IG1pbkRlY2liZWxzIDogQXVk
aW9VdGlsaXRpZXM6OmxpbmVhclRvRGVjaWJlbHMobGluZWFyVmFsdWUpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAvLyBUaGUgcmFuZ2UgbV9taW5EZWNpYmVscyB0byBtX21heERlY2liZWxz
IHdpbGwgYmUgc2NhbGVkIHRvIGJ5dGUgdmFsdWVzIGZyb20gMCB0byBVQ0hBUl9NQVguCi0gICAg
ICAgICAgICBkb3VibGUgc2NhbGVkVmFsdWUgPSBVQ0hBUl9NQVggKiAoZGJNYWcgLSBtaW5EZWNp
YmVscykgKiByYW5nZVNjYWxlRmFjdG9yOwotCi0gICAgICAgICAgICAvLyBDbGlwIHRvIHZhbGlk
IHJhbmdlLgotICAgICAgICAgICAgaWYgKHNjYWxlZFZhbHVlIDwgMCkKLSAgICAgICAgICAgICAg
ICBzY2FsZWRWYWx1ZSA9IDA7Ci0gICAgICAgICAgICBpZiAoc2NhbGVkVmFsdWUgPiBVQ0hBUl9N
QVgpCi0gICAgICAgICAgICAgICAgc2NhbGVkVmFsdWUgPSBVQ0hBUl9NQVg7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oc2NhbGVkVmFsdWUpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFJlYWx0aW1lQW5h
bHlzZXI6OmdldEJ5dGVUaW1lRG9tYWluRGF0YShVaW50OEFycmF5KiBkZXN0aW5hdGlvbkFycmF5
KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoIWRlc3RpbmF0aW9u
QXJyYXkpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgdW5zaWduZWQgZmZ0U2l6ZSA9
IHRoaXMtPmZmdFNpemUoKTsKLSAgICBzaXplX3QgbGVuID0gbWluKGZmdFNpemUsIGRlc3RpbmF0
aW9uQXJyYXktPmxlbmd0aCgpKTsKLSAgICBpZiAobGVuID4gMCkgewotICAgICAgICBib29sIGlz
SW5wdXRCdWZmZXJHb29kID0gbV9pbnB1dEJ1ZmZlci5zaXplKCkgPT0gSW5wdXRCdWZmZXJTaXpl
ICYmIG1faW5wdXRCdWZmZXIuc2l6ZSgpID4gZmZ0U2l6ZTsKLSAgICAgICAgQVNTRVJUKGlzSW5w
dXRCdWZmZXJHb29kKTsKLSAgICAgICAgaWYgKCFpc0lucHV0QnVmZmVyR29vZCkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBmbG9hdCogaW5wdXRCdWZmZXIgPSBtX2lucHV0QnVmZmVy
LmRhdGEoKTsgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiA9IGRl
c3RpbmF0aW9uQXJyYXktPmRhdGEoKTsKLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIHdyaXRl
SW5kZXggPSBtX3dyaXRlSW5kZXg7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICAvLyBCdWZmZXIgYWNjZXNzIGlzIHByb3RlY3RlZCBk
dWUgdG8gbW9kdWxvIG9wZXJhdGlvbi4KLSAgICAgICAgICAgIGZsb2F0IHZhbHVlID0gaW5wdXRC
dWZmZXJbKGkgKyB3cml0ZUluZGV4IC0gZmZ0U2l6ZSArIElucHV0QnVmZmVyU2l6ZSkgJSBJbnB1
dEJ1ZmZlclNpemVdOwotCi0gICAgICAgICAgICAvLyBTY2FsZSBmcm9tIG5vbWluYWwgLTEgLT4g
KzEgdG8gdW5zaWduZWQgYnl0ZS4KLSAgICAgICAgICAgIGRvdWJsZSBzY2FsZWRWYWx1ZSA9IDEy
OCAqICh2YWx1ZSArIDEpOwotCi0gICAgICAgICAgICAvLyBDbGlwIHRvIHZhbGlkIHJhbmdlLgot
ICAgICAgICAgICAgaWYgKHNjYWxlZFZhbHVlIDwgMCkKLSAgICAgICAgICAgICAgICBzY2FsZWRW
YWx1ZSA9IDA7Ci0gICAgICAgICAgICBpZiAoc2NhbGVkVmFsdWUgPiBVQ0hBUl9NQVgpCi0gICAg
ICAgICAgICAgICAgc2NhbGVkVmFsdWUgPSBVQ0hBUl9NQVg7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGRlc3RpbmF0aW9uW2ldID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc2NhbGVk
VmFsdWUpOwotICAgICAgICB9Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vUmVhbHRpbWVBbmFseXNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL1JlYWx0aW1lQW5hbHlzZXIuaAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk5ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFJlYWx0aW1lQW5hbHlzZXJfaAotI2RlZmluZSBS
ZWFsdGltZUFuYWx5c2VyX2gKLQotI2luY2x1ZGUgIkF1ZGlvQXJyYXkuaCIKLSNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb0J1czsKLWNs
YXNzIEZGVEZyYW1lOwotCi1jbGFzcyBSZWFsdGltZUFuYWx5c2VyIHsKLSAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShSZWFsdGltZUFuYWx5c2VyKTsKLXB1YmxpYzoKLSAgICBSZWFsdGltZUFuYWx5
c2VyKCk7Ci0gICAgdmlydHVhbCB+UmVhbHRpbWVBbmFseXNlcigpOwotICAgIAotICAgIHZvaWQg
cmVzZXQoKTsKLQotICAgIHNpemVfdCBmZnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9mZnRTaXpl
OyB9Ci0gICAgdm9pZCBzZXRGZnRTaXplKHNpemVfdCBzaXplKTsKLQotICAgIHVuc2lnbmVkIGZy
ZXF1ZW5jeUJpbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9mZnRTaXplIC8gMjsgfQotCi0gICAg
dm9pZCBzZXRNaW5EZWNpYmVscyhmbG9hdCBrKSB7IG1fbWluRGVjaWJlbHMgPSBrOyB9Ci0gICAg
ZmxvYXQgbWluRGVjaWJlbHMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV9t
aW5EZWNpYmVscyk7IH0KLQotICAgIHZvaWQgc2V0TWF4RGVjaWJlbHMoZmxvYXQgaykgeyBtX21h
eERlY2liZWxzID0gazsgfQotICAgIGZsb2F0IG1heERlY2liZWxzKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWF4RGVjaWJlbHMpOyB9Ci0KLSAgICB2b2lkIHNldFNtb290
aGluZ1RpbWVDb25zdGFudChmbG9hdCBrKSB7IG1fc21vb3RoaW5nVGltZUNvbnN0YW50ID0gazsg
fQotICAgIGZsb2F0IHNtb290aGluZ1RpbWVDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGZsb2F0PihtX3Ntb290aGluZ1RpbWVDb25zdGFudCk7IH0KLQotICAgIHZvaWQgZ2V0
RmxvYXRGcmVxdWVuY3lEYXRhKEZsb2F0MzJBcnJheSopOwotICAgIHZvaWQgZ2V0Qnl0ZUZyZXF1
ZW5jeURhdGEoVWludDhBcnJheSopOwotICAgIHZvaWQgZ2V0Qnl0ZVRpbWVEb21haW5EYXRhKFVp
bnQ4QXJyYXkqKTsKLQotICAgIC8vIFRoZSBhdWRpbyB0aHJlYWQgd3JpdGVzIGlucHV0IGRhdGEg
aGVyZS4KLSAgICB2b2lkIHdyaXRlSW5wdXQoQXVkaW9CdXMqLCBzaXplX3QgZnJhbWVzVG9Qcm9j
ZXNzKTsKLQotICAgIHN0YXRpYyBjb25zdCBkb3VibGUgRGVmYXVsdFNtb290aGluZ1RpbWVDb25z
dGFudDsKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIERlZmF1bHRNaW5EZWNpYmVsczsKLSAgICBz
dGF0aWMgY29uc3QgZG91YmxlIERlZmF1bHRNYXhEZWNpYmVsczsKLQotICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBEZWZhdWx0RkZUU2l6ZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgTWlu
RkZUU2l6ZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgTWF4RkZUU2l6ZTsKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgSW5wdXRCdWZmZXJTaXplOwotCi1wcml2YXRlOgotICAgIC8vIFRo
ZSBhdWRpbyB0aHJlYWQgd3JpdGVzIHRoZSBpbnB1dCBhdWRpbyBoZXJlLgotICAgIEF1ZGlvRmxv
YXRBcnJheSBtX2lucHV0QnVmZmVyOwotICAgIHVuc2lnbmVkIG1fd3JpdGVJbmRleDsKLSAgICAK
LSAgICBzaXplX3QgbV9mZnRTaXplOwotICAgIE93blB0cjxGRlRGcmFtZT4gbV9hbmFseXNpc0Zy
YW1lOwotICAgIHZvaWQgZG9GRlRBbmFseXNpcygpOwotICAgIAotICAgIC8vIGRvRkZUQW5hbHlz
aXMoKSBzdG9yZXMgdGhlIGZsb2F0aW5nLXBvaW50IG1hZ25pdHVkZSBhbmFseXNpcyBkYXRhIGhl
cmUuCi0gICAgQXVkaW9GbG9hdEFycmF5IG1fbWFnbml0dWRlQnVmZmVyOwotICAgIEF1ZGlvRmxv
YXRBcnJheSYgbWFnbml0dWRlQnVmZmVyKCkgeyByZXR1cm4gbV9tYWduaXR1ZGVCdWZmZXI7IH0K
LQotICAgIC8vIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxIHdoaWNoIGF2ZXJhZ2VzIHRoZSBwcmV2
aW91cyB2ZXJzaW9uIG9mIG1fbWFnbml0dWRlQnVmZmVyIHdpdGggdGhlIGN1cnJlbnQgYW5hbHlz
aXMgbWFnbml0dWRlIGRhdGEuCi0gICAgZG91YmxlIG1fc21vb3RoaW5nVGltZUNvbnN0YW50OyAg
ICAKLQotICAgIC8vIFRoZSByYW5nZSB1c2VkIHdoZW4gY29udmVydGluZyB3aGVuIHVzaW5nIGdl
dEJ5dGVGcmVxdWVuY3lEYXRhKCkuIAotICAgIGRvdWJsZSBtX21pbkRlY2liZWxzOwotICAgIGRv
dWJsZSBtX21heERlY2liZWxzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gUmVhbHRpbWVBbmFseXNlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9S
ZWFsdGltZUFuYWx5c2VyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuY3BwCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJSZWFsdGltZUFuYWx5c2VyTm9kZS5o
IgotCi0jaW5jbHVkZSAiQXVkaW9Ob2RlSW5wdXQuaCIKLSNpbmNsdWRlICJBdWRpb05vZGVPdXRw
dXQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZWFsdGltZUFuYWx5c2VyTm9kZTo6UmVh
bHRpbWVBbmFseXNlck5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRl
KQotICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCi17Ci0gICAgYWRkSW5wdXQo
YWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7Ci0gICAgYWRkT3V0cHV0KGFkb3B0
UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywgMikpKTsKLSAgICAKLSAgICBzZXROb2RlVHlw
ZShOb2RlVHlwZUFuYWx5c2VyKTsKLSAgICAKLSAgICBpbml0aWFsaXplKCk7Ci19Ci0KLVJlYWx0
aW1lQW5hbHlzZXJOb2RlOjp+UmVhbHRpbWVBbmFseXNlck5vZGUoKQotewotICAgIHVuaW5pdGlh
bGl6ZSgpOwotfQotCi12b2lkIFJlYWx0aW1lQW5hbHlzZXJOb2RlOjpwcm9jZXNzKHNpemVfdCBm
cmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgQXVkaW9CdXMqIG91dHB1dEJ1cyA9IG91dHB1dCgwKS0+
YnVzKCk7Ci0KLSAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSB8fCAhaW5wdXQoMCktPmlzQ29ubmVj
dGVkKCkpIHsKLSAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBBdWRpb0J1cyogaW5wdXRCdXMgPSBpbnB1dCgwKS0+YnVzKCk7Ci0gICAgCi0g
ICAgLy8gR2l2ZSB0aGUgYW5hbHlzZXIgdGhlIGF1ZGlvIHdoaWNoIGlzIHBhc3NpbmcgdGhyb3Vn
aCB0aGlzIEF1ZGlvTm9kZS4KLSAgICBtX2FuYWx5c2VyLndyaXRlSW5wdXQoaW5wdXRCdXMsIGZy
YW1lc1RvUHJvY2Vzcyk7Ci0KLSAgICAvLyBGb3IgaW4tcGxhY2UgcHJvY2Vzc2luZywgb3VyIG92
ZXJyaWRlIG9mIHB1bGxJbnB1dHMoKSB3aWxsIGp1c3QgcGFzcyB0aGUgYXVkaW8gZGF0YSB0aHJv
dWdoIHVuY2hhbmdlZCBpZiB0aGUgY2hhbm5lbCBjb3VudCBtYXRjaGVzIGZyb20gaW5wdXQgdG8g
b3V0cHV0Ci0gICAgLy8gKHJlc3VsdGluZyBpbiBpbnB1dEJ1cyA9PSBvdXRwdXRCdXMpLiAgT3Ro
ZXJ3aXNlLCBkbyBhbiB1cC1taXggdG8gc3RlcmVvLgotICAgIGlmIChpbnB1dEJ1cyAhPSBvdXRw
dXRCdXMpCi0gICAgICAgIG91dHB1dEJ1cy0+Y29weUZyb20oKmlucHV0QnVzKTsKLX0KLQotLy8g
V2Ugb3ZlcnJpZGUgcHVsbElucHV0cygpIGFzIGFuIG9wdGltaXphdGlvbiBhbGxvd2luZyB0aGlz
IG5vZGUgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgaW4tcGxhY2UgcHJvY2Vzc2luZywKLS8vIHdoZXJl
IHRoZSBpbnB1dCBpcyBzaW1wbHkgcGFzc2VkIHRocm91Z2ggdW5wcm9jZXNzZWQgdG8gdGhlIG91
dHB1dC4KLS8vIE5vdGU6IHRoaXMgb25seSBhcHBsaWVzIGlmIHRoZSBpbnB1dCBhbmQgb3V0cHV0
IGNoYW5uZWwgY291bnRzIG1hdGNoLgotdm9pZCBSZWFsdGltZUFuYWx5c2VyTm9kZTo6cHVsbElu
cHV0cyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIC8vIFJlbmRlciBpbnB1dCBzdHJl
YW0gLSB0cnkgdG8gcmVuZGVyIGRpcmVjdGx5IGludG8gb3V0cHV0IGJ1cyBmb3IgcGFzcy10aHJv
dWdoIHByb2Nlc3Npbmcgd2hlcmUgcHJvY2VzcygpIGRvZXNuJ3QgbmVlZCB0byBkbyBhbnl0aGlu
Zy4uLgotICAgIGlucHV0KDApLT5wdWxsKG91dHB1dCgwKS0+YnVzKCksIGZyYW1lc1RvUHJvY2Vz
cyk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVBbmFseXNlck5vZGU6OnJlc2V0KCkKLXsKLSAgICBtX2Fu
YWx5c2VyLnJlc2V0KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGlt
ZUFuYWx5c2VyTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1Jl
YWx0aW1lQW5hbHlzZXJOb2RlLmgJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUmVhbHRpbWVBbmFseXNlck5vZGVfaAotI2Rl
ZmluZSBSZWFsdGltZUFuYWx5c2VyTm9kZV9oCi0KLSNpbmNsdWRlICJBdWRpb05vZGUuaCIKLSNp
bmNsdWRlICJSZWFsdGltZUFuYWx5c2VyLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZWFsdGltZUFuYWx5c2VyTm9kZSA6IHB1Ymxp
YyBBdWRpb05vZGUgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlYWx0aW1lQW5h
bHlzZXJOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZWFsdGltZUFuYWx5c2VyTm9k
ZShjb250ZXh0LCBzYW1wbGVSYXRlKSk7ICAgICAgCi0gICAgfQotCi0gICAgdmlydHVhbCB+UmVh
bHRpbWVBbmFseXNlck5vZGUoKTsKLSAgICAKLSAgICAvLyBBdWRpb05vZGUKLSAgICB2aXJ0dWFs
IHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQg
cHVsbElucHV0cyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVz
ZXQoKTsKLQotICAgIC8vIEphdmFzY3JpcHQgYmluZGluZ3MKLSAgICB1bnNpZ25lZCBpbnQgZmZ0
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5hbHlzZXIuZmZ0U2l6ZSgpOyB9Ci0gICAgdm9pZCBz
ZXRGZnRTaXplKHVuc2lnbmVkIGludCBzaXplKSB7IG1fYW5hbHlzZXIuc2V0RmZ0U2l6ZShzaXpl
KTsgfQotCi0gICAgdW5zaWduZWQgZnJlcXVlbmN5QmluQ291bnQoKSBjb25zdCB7IHJldHVybiBt
X2FuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50KCk7IH0KLQotICAgIHZvaWQgc2V0TWluRGVjaWJl
bHMoZmxvYXQgaykgeyBtX2FuYWx5c2VyLnNldE1pbkRlY2liZWxzKGspOyB9Ci0gICAgZmxvYXQg
bWluRGVjaWJlbHMoKSBjb25zdCB7IHJldHVybiBtX2FuYWx5c2VyLm1pbkRlY2liZWxzKCk7IH0K
LQotICAgIHZvaWQgc2V0TWF4RGVjaWJlbHMoZmxvYXQgaykgeyBtX2FuYWx5c2VyLnNldE1heERl
Y2liZWxzKGspOyB9Ci0gICAgZmxvYXQgbWF4RGVjaWJlbHMoKSBjb25zdCB7IHJldHVybiBtX2Fu
YWx5c2VyLm1heERlY2liZWxzKCk7IH0KLQotICAgIHZvaWQgc2V0U21vb3RoaW5nVGltZUNvbnN0
YW50KGZsb2F0IGspIHsgbV9hbmFseXNlci5zZXRTbW9vdGhpbmdUaW1lQ29uc3RhbnQoayk7IH0K
LSAgICBmbG9hdCBzbW9vdGhpbmdUaW1lQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX2FuYWx5
c2VyLnNtb290aGluZ1RpbWVDb25zdGFudCgpOyB9Ci0KLSAgICB2b2lkIGdldEZsb2F0RnJlcXVl
bmN5RGF0YShGbG9hdDMyQXJyYXkqIGFycmF5KSB7IG1fYW5hbHlzZXIuZ2V0RmxvYXRGcmVxdWVu
Y3lEYXRhKGFycmF5KTsgfQotICAgIHZvaWQgZ2V0Qnl0ZUZyZXF1ZW5jeURhdGEoVWludDhBcnJh
eSogYXJyYXkpIHsgbV9hbmFseXNlci5nZXRCeXRlRnJlcXVlbmN5RGF0YShhcnJheSk7IH0KLSAg
ICB2b2lkIGdldEJ5dGVUaW1lRG9tYWluRGF0YShVaW50OEFycmF5KiBhcnJheSkgeyBtX2FuYWx5
c2VyLmdldEJ5dGVUaW1lRG9tYWluRGF0YShhcnJheSk7IH0KLQotcHJpdmF0ZToKLSAgICB2aXJ0
dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KLSAgICB2
aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0K
LQotICAgIFJlYWx0aW1lQW5hbHlzZXJOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJh
dGUpOwotCi0gICAgUmVhbHRpbWVBbmFseXNlciBtX2FuYWx5c2VyOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUmVhbHRpbWVBbmFseXNlck5vZGVfaApJbmRleDog
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmlkbAko
cmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFs
eXNlck5vZGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgot
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci1tb2R1bGUgYXVkaW8gewotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdF
Ql9BVURJTywKLSAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKLSAgICBdIFJlYWx0aW1lQW5h
bHlzZXJOb2RlIDogQXVkaW9Ob2RlIHsKLSAgICAgICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcg
ZmZ0U2l6ZTsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgZnJlcXVl
bmN5QmluQ291bnQ7Ci0KLSAgICAgICAgLy8gbWluRGVjaWJlbHMgLyBtYXhEZWNpYmVscyByZXBy
ZXNlbnQgdGhlIHJhbmdlIHRvIHNjYWxlIHRoZSBGRlQgYW5hbHlzaXMgZGF0YSBmb3IgY29udmVy
c2lvbiB0byB1bnNpZ25lZCBieXRlIHZhbHVlcy4KLSAgICAgICAgYXR0cmlidXRlIGZsb2F0IG1p
bkRlY2liZWxzOwotICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgbWF4RGVjaWJlbHM7Ci0KLSAgICAg
ICAgLy8gQSB2YWx1ZSBmcm9tIDAuMCAtPiAxLjAgd2hlcmUgMC4wIHJlcHJlc2VudHMgbm8gdGlt
ZSBhdmVyYWdpbmcgd2l0aCB0aGUgbGFzdCBhbmFseXNpcyBmcmFtZS4KLSAgICAgICAgYXR0cmli
dXRlIGZsb2F0IHNtb290aGluZ1RpbWVDb25zdGFudDsKLQotICAgICAgICAvLyBDb3BpZXMgdGhl
IGN1cnJlbnQgZnJlcXVlbmN5IGRhdGEgaW50byB0aGUgcGFzc2VkIGFycmF5LgotICAgICAgICAv
LyBJZiB0aGUgYXJyYXkgaGFzIGZld2VyIGVsZW1lbnRzIHRoYW4gdGhlIGZyZXF1ZW5jeUJpbkNv
dW50LCB0aGUgZXhjZXNzIGVsZW1lbnRzIHdpbGwgYmUgZHJvcHBlZC4KLSAgICAgICAgdm9pZCBn
ZXRGbG9hdEZyZXF1ZW5jeURhdGEoaW4gRmxvYXQzMkFycmF5IGFycmF5KTsKLSAgICAgICAgdm9p
ZCBnZXRCeXRlRnJlcXVlbmN5RGF0YShpbiBVaW50OEFycmF5IGFycmF5KTsKLQotICAgICAgICAv
LyBSZWFsLXRpbWUgd2F2ZWZvcm0gZGF0YQotICAgICAgICB2b2lkIGdldEJ5dGVUaW1lRG9tYWlu
RGF0YShpbiBVaW50OEFycmF5IGFycmF5KTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vV2F2ZVNoYXBlckRTUEtlcm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlckRTUEtlcm5lbC5jcHAJKHJldmlzaW9uIDExMTIw
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJEU1BLZXJuZWwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiV2F2ZVNoYXBlckRT
UEtlcm5lbC5oIgotCi0jaW5jbHVkZSAiV2F2ZVNoYXBlclByb2Nlc3Nvci5oIgotI2luY2x1ZGUg
PGFsZ29yaXRobT4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi12b2lkIFdhdmVTaGFwZXJEU1BLZXJuZWw6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJj
ZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIEFT
U0VSVChzb3VyY2UgJiYgZGVzdGluYXRpb24gJiYgd2F2ZVNoYXBlclByb2Nlc3NvcigpKTsKLQot
ICAgIEZsb2F0MzJBcnJheSogY3VydmUgPSB3YXZlU2hhcGVyUHJvY2Vzc29yKCktPmN1cnZlKCk7
Ci0gICAgaWYgKCFjdXJ2ZSkgewotICAgICAgICAvLyBBY3QgYXMgInN0cmFpZ2h0IHdpcmUiIHBh
c3MtdGhyb3VnaCBpZiBubyBjdXJ2ZSBpcyBzZXQuCi0gICAgICAgIG1lbWNweShkZXN0aW5hdGlv
biwgc291cmNlLCBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGZsb2F0KiBjdXJ2ZURhdGEgPSBjdXJ2ZS0+ZGF0YSgpOwotICAg
IGludCBjdXJ2ZUxlbmd0aCA9IGN1cnZlLT5sZW5ndGgoKTsKLQotICAgIEFTU0VSVChjdXJ2ZURh
dGEpOwotCi0gICAgaWYgKCFjdXJ2ZURhdGEgfHwgIWN1cnZlTGVuZ3RoKSB7Ci0gICAgICAgIG1l
bWNweShkZXN0aW5hdGlvbiwgc291cmNlLCBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNz
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEFwcGx5IHdhdmVzaGFwaW5nIGN1
cnZlLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXNUb1Byb2Nlc3M7ICsraSkg
ewotICAgICAgICBjb25zdCBmbG9hdCBpbnB1dCA9IHNvdXJjZVtpXTsKLQotICAgICAgICAvLyBD
YWxjdWxhdGUgYW4gaW5kZXggYmFzZWQgb24gaW5wdXQgLTEgLT4gKzEgd2l0aCAwIGJlaW5nIGF0
IHRoZSBjZW50ZXIgb2YgdGhlIGN1cnZlIGRhdGEuCi0gICAgICAgIGludCBpbmRleCA9IChjdXJ2
ZUxlbmd0aCAqIChpbnB1dCArIDEpKSAvIDI7Ci0KLSAgICAgICAgLy8gQ2xpcCBpbmRleCB0byB0
aGUgaW5wdXQgcmFuZ2Ugb2YgdGhlIGN1cnZlLgotICAgICAgICAvLyBUaGlzIHRha2VzIGNhcmUg
b2YgaW5wdXQgb3V0c2lkZSBvZiBub21pbmFsIHJhbmdlIC0xIC0+ICsxCi0gICAgICAgIGluZGV4
ID0gbWF4KGluZGV4LCAwKTsKLSAgICAgICAgaW5kZXggPSBtaW4oaW5kZXgsIGN1cnZlTGVuZ3Ro
IC0gMSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uW2ldID0gY3VydmVEYXRhW2luZGV4XTsKLSAgICB9
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVE
SU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlckRTUEtlcm5l
bC5oCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZlU2hh
cGVyRFNQS2VybmVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
Ci0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgV2F2ZVNoYXBlckRTUEtlcm5lbF9oCi0jZGVmaW5lIFdhdmVTaGFwZXJEU1BL
ZXJuZWxfaAotCi0jaW5jbHVkZSAiQXVkaW9EU1BLZXJuZWwuaCIKLSNpbmNsdWRlICJXYXZlU2hh
cGVyUHJvY2Vzc29yLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgV2F2ZVNoYXBl
clByb2Nlc3NvcjsKLQotLy8gV2F2ZVNoYXBlckRTUEtlcm5lbCBpcyBhbiBBdWRpb0RTUEtlcm5l
bCBhbmQgaXMgcmVzcG9uc2libGUgZm9yIG5vbi1saW5lYXIgZGlzdG9ydGlvbiBvbiBvbmUgY2hh
bm5lbC4KLQotY2xhc3MgV2F2ZVNoYXBlckRTUEtlcm5lbCA6IHB1YmxpYyBBdWRpb0RTUEtlcm5l
bCB7Ci1wdWJsaWM6ICAKLSAgICBXYXZlU2hhcGVyRFNQS2VybmVsKFdhdmVTaGFwZXJQcm9jZXNz
b3IqIHByb2Nlc3NvcikKLSAgICA6IEF1ZGlvRFNQS2VybmVsKHByb2Nlc3NvcikKLSAgICB7Ci0g
ICAgfQotICAgIAotICAgIC8vIEF1ZGlvRFNQS2VybmVsCi0gICAgdmlydHVhbCB2b2lkIHByb2Nl
c3MoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3QsIHNpemVfdCBmcmFtZXNUb1Byb2Nl
c3MpOwotICAgIHZpcnR1YWwgdm9pZCByZXNldCgpIHsgfQotICAgIHZpcnR1YWwgZG91YmxlIHRh
aWxUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgZG91Ymxl
IGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQotICAgIAotcHJvdGVj
dGVkOgotICAgIFdhdmVTaGFwZXJQcm9jZXNzb3IqIHdhdmVTaGFwZXJQcm9jZXNzb3IoKSB7IHJl
dHVybiBzdGF0aWNfY2FzdDxXYXZlU2hhcGVyUHJvY2Vzc29yKj4ocHJvY2Vzc29yKCkpOyB9Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBXYXZlU2hhcGVyRFNQS2Vy
bmVsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5jcHAJ
KHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJO
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIldh
dmVTaGFwZXJOb2RlLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1XYXZlU2hhcGVyTm9kZTo6V2F2ZVNoYXBlck5vZGUoQXVkaW9Db250ZXh0
KiBjb250ZXh0KQotICAgIDogQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUoY29udGV4dCwgY29udGV4
dC0+c2FtcGxlUmF0ZSgpKQotewotICAgIG1fcHJvY2Vzc29yID0gYWRvcHRQdHIobmV3IFdhdmVT
aGFwZXJQcm9jZXNzb3IoY29udGV4dC0+c2FtcGxlUmF0ZSgpLCAxKSk7Ci0gICAgc2V0Tm9kZVR5
cGUoTm9kZVR5cGVXYXZlU2hhcGVyKTsKLX0KLQotdm9pZCBXYXZlU2hhcGVyTm9kZTo6c2V0Q3Vy
dmUoRmxvYXQzMkFycmF5KiBjdXJ2ZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyAK
LSAgICB3YXZlU2hhcGVyUHJvY2Vzc29yKCktPnNldEN1cnZlKGN1cnZlKTsKLX0KLQotRmxvYXQz
MkFycmF5KiBXYXZlU2hhcGVyTm9kZTo6Y3VydmUoKQotewotICAgIHJldHVybiB3YXZlU2hhcGVy
UHJvY2Vzc29yKCktPmN1cnZlKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9X
YXZlU2hhcGVyTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dh
dmVTaGFwZXJOb2RlLmgJKHJldmlzaW9uIDExMTIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL1dhdmVTaGFwZXJOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgV2F2ZVNoYXBlck5vZGVfaAotI2RlZmluZSBXYXZlU2hhcGVyTm9k
ZV9oCi0KLSNpbmNsdWRlICJBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oIgotI2luY2x1ZGUgIkJp
cXVhZFByb2Nlc3Nvci5oIgotI2luY2x1ZGUgIldhdmVTaGFwZXJQcm9jZXNzb3IuaCIKLSNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1jbGFzcyBX
YXZlU2hhcGVyTm9kZSA6IHB1YmxpYyBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2F2ZVNoYXBlck5vZGU+IGNyZWF0ZShBdWRpb0NvbnRl
eHQqIGNvbnRleHQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdhdmVTaGFw
ZXJOb2RlKGNvbnRleHQpKTsKLSAgICB9Ci0KLSAgICAvLyBzZXRDdXJ2ZSgpIGlzIGNhbGxlZCBv
biB0aGUgbWFpbiB0aHJlYWQuCi0gICAgdm9pZCBzZXRDdXJ2ZShGbG9hdDMyQXJyYXkqKTsKLSAg
ICBGbG9hdDMyQXJyYXkqIGN1cnZlKCk7Ci0KLXByaXZhdGU6ICAgIAotICAgIFdhdmVTaGFwZXJO
b2RlKEF1ZGlvQ29udGV4dCopOyAgICAKLQotICAgIFdhdmVTaGFwZXJQcm9jZXNzb3IqIHdhdmVT
aGFwZXJQcm9jZXNzb3IoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxXYXZlU2hhcGVyUHJvY2Vzc29y
Kj4ocHJvY2Vzc29yKCkpOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBXYXZlU2hhcGVyTm9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZl
U2hhcGVyTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2
ZVNoYXBlck5vZGUuaWRsCShyZXZpc2lvbiAxMTEyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9XYXZlU2hhcGVyTm9kZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLW1vZHVsZSBhdWRpbyB7Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29u
ZGl0aW9uYWw9V0VCX0FVRElPLAotICAgICAgICBKU0dlbmVyYXRlVG9KU09iamVjdAotICAgIF0g
V2F2ZVNoYXBlck5vZGUgOiBBdWRpb05vZGUgewotICAgICAgICBhdHRyaWJ1dGUgW0pTQ3VzdG9t
U2V0dGVyXSBGbG9hdDMyQXJyYXkgY3VydmU7Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuY3BwCShyZXZpc2lvbiAxMTEy
MDgpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIldhdmVTaGFwZXJQ
cm9jZXNzb3IuaCIKLQotI2luY2x1ZGUgIldhdmVTaGFwZXJEU1BLZXJuZWwuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotICAgIAotV2F2ZVNoYXBlclByb2Nlc3Nvcjo6V2F2ZVNoYXBlclByb2Nl
c3NvcihmbG9hdCBzYW1wbGVSYXRlLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscykKLSAgICA6IEF1
ZGlvRFNQS2VybmVsUHJvY2Vzc29yKHNhbXBsZVJhdGUsIG51bWJlck9mQ2hhbm5lbHMpCi17Ci19
Ci0KLVdhdmVTaGFwZXJQcm9jZXNzb3I6On5XYXZlU2hhcGVyUHJvY2Vzc29yKCkKLXsKLSAgICBp
ZiAoaXNJbml0aWFsaXplZCgpKQotICAgICAgICB1bmluaXRpYWxpemUoKTsKLX0KLQotUGFzc093
blB0cjxBdWRpb0RTUEtlcm5lbD4gV2F2ZVNoYXBlclByb2Nlc3Nvcjo6Y3JlYXRlS2VybmVsKCkK
LXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdhdmVTaGFwZXJEU1BLZXJuZWwodGhpcykpOwot
fQotCi12b2lkIFdhdmVTaGFwZXJQcm9jZXNzb3I6OnNldEN1cnZlKEZsb2F0MzJBcnJheSogY3Vy
dmUpCi17Ci0gICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgd2l0aCBwcm9jZXNzKCkuCi0gICAgTXV0
ZXhMb2NrZXIgcHJvY2Vzc0xvY2tlcihtX3Byb2Nlc3NMb2NrKTsKLSAgICAKLSAgICBtX2N1cnZl
ID0gY3VydmU7Ci19Ci0KLXZvaWQgV2F2ZVNoYXBlclByb2Nlc3Nvcjo6cHJvY2Vzcyhjb25zdCBB
dWRpb0J1cyogc291cmNlLCBBdWRpb0J1cyogZGVzdGluYXRpb24sIHNpemVfdCBmcmFtZXNUb1By
b2Nlc3MpCi17Ci0gICAgaWYgKCFpc0luaXRpYWxpemVkKCkpIHsKLSAgICAgICAgZGVzdGluYXRp
b24tPnplcm8oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFRoZSBhdWRpbyB0
aHJlYWQgY2FuJ3QgYmxvY2sgb24gdGhpcyBsb2NrLCBzbyB3ZSBjYWxsIHRyeUxvY2soKSBpbnN0
ZWFkLgotICAgIC8vIENhcmVmdWwgLSB0aGlzIGlzIGEgdHJ5TG9jaygpIGFuZCBub3QgYW4gYXV0
b2xvY2tlciwgc28gd2UgbXVzdCB1bmxvY2soKSBiZWZvcmUgZXZlcnkgcmV0dXJuLgotICAgIGlm
IChtX3Byb2Nlc3NMb2NrLnRyeUxvY2soKSkgeyAgICAgICAgCi0gICAgICAgIC8vIEZvciBlYWNo
IGNoYW5uZWwgb2Ygb3VyIGlucHV0LCBwcm9jZXNzIHVzaW5nIHRoZSBjb3JyZXNwb25kaW5nIFdh
dmVTaGFwZXJEU1BLZXJuZWwgaW50byB0aGUgb3V0cHV0IGNoYW5uZWwuCi0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2tlcm5lbHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBt
X2tlcm5lbHNbaV0tPnByb2Nlc3Moc291cmNlLT5jaGFubmVsKGkpLT5kYXRhKCksIGRlc3RpbmF0
aW9uLT5jaGFubmVsKGkpLT5tdXRhYmxlRGF0YSgpLCBmcmFtZXNUb1Byb2Nlc3MpOwotCi0gICAg
ICAgIG1fcHJvY2Vzc0xvY2sudW5sb2NrKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gVG9v
IGJhZCAtIHRoZSB0cnlMb2NrKCkgZmFpbGVkLiBXZSBtdXN0IGJlIGluIHRoZSBtaWRkbGUgb2Yg
YSBzZXRDdXJ2ZSgpIGNhbGwuCi0gICAgICAgIGRlc3RpbmF0aW9uLT56ZXJvKCk7Ci0gICAgfQot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElP
KQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3Iu
aAkocmV2aXNpb24gMTExMjA4KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBl
clByb2Nlc3Nvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgot
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIFdhdmVTaGFwZXJQcm9jZXNzb3JfaAotI2RlZmluZSBXYXZlU2hhcGVyUHJvY2Vz
c29yX2gKLQotI2luY2x1ZGUgIkF1ZGlvRFNQS2VybmVsLmgiCi0jaW5jbHVkZSAiQXVkaW9EU1BL
ZXJuZWxQcm9jZXNzb3IuaCIKLSNpbmNsdWRlICJBdWRpb05vZGUuaCIKLSNpbmNsdWRlIDx3dGYv
RmxvYXQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBXYXZlU2hhcGVyUHJvY2Vz
c29yIGlzIGFuIEF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yIHdoaWNoIHVzZXMgV2F2ZVNoYXBlckRT
UEtlcm5lbCBvYmplY3RzIHRvIGltcGxlbWVudCBub24tbGluZWFyIGRpc3RvcnRpb24gZWZmZWN0
cy4KLQotY2xhc3MgV2F2ZVNoYXBlclByb2Nlc3NvciA6IHB1YmxpYyBBdWRpb0RTUEtlcm5lbFBy
b2Nlc3NvciB7Ci1wdWJsaWM6Ci0gICAgV2F2ZVNoYXBlclByb2Nlc3NvcihmbG9hdCBzYW1wbGVS
YXRlLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscyk7Ci0KLSAgICB2aXJ0dWFsIH5XYXZlU2hhcGVy
UHJvY2Vzc29yKCk7Ci0KLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8QXVkaW9EU1BLZXJuZWw+IGNy
ZWF0ZUtlcm5lbCgpOwotCi0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3MoY29uc3QgQXVkaW9CdXMq
IHNvdXJjZSwgQXVkaW9CdXMqIGRlc3RpbmF0aW9uLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsK
LQotICAgIHZvaWQgc2V0Q3VydmUoRmxvYXQzMkFycmF5Kik7Ci0gICAgRmxvYXQzMkFycmF5KiBj
dXJ2ZSgpIHsgcmV0dXJuIG1fY3VydmUuZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICAvLyBtX2N1
cnZlIHJlcHJlc2VudHMgdGhlIG5vbi1saW5lYXIgc2hhcGluZyBjdXJ2ZS4KLSAgICBSZWZQdHI8
RmxvYXQzMkFycmF5PiBtX2N1cnZlOwotCi0gICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgcHJvY2Vz
cygpIHdpdGggc2V0Q3VydmUoKS4KLSAgICBtdXRhYmxlIE11dGV4IG1fcHJvY2Vzc0xvY2s7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBXYXZlU2hhcGVyUHJvY2Vz
c29yX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132661</attachid>
            <date>2012-03-19 13:56:09 -0700</date>
            <delta_ts>2012-03-20 14:03:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81541-20120319165559.patch</filename>
            <type>text/plain</type>
            <size>965789</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTIzOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzMiBAQAorMjAxMi0wMy0xOSAgTWFyayBQ
aWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgTW92ZSB3ZWJhdWRpbyB0
byBNb2R1bGVzL3dlYmF1ZGlvLworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODE1NDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBObyBuZXcgdGVzdHMsIGFsbCBleGlzdGluZyB0ZXN0cyBwYXNzLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAg
ICAgICAgKiBEZXJpdmVkU291cmNlcy5wcmk6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06Cisg
ICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlv
OiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIu
Y3BwLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaC4KKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUu
Y3BwLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nv
ck5vZGUuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwLgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvQnVmZmVyLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9CdWZmZXIuaWRsLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxs
YmFjay5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlckNh
bGxiYWNrLmguCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlckNhbGxiYWNr
LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxs
YmFjay5pZGwuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5v
ZGUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNv
dXJjZU5vZGUuY3BwLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3Vy
Y2VOb2RlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVy
U291cmNlTm9kZS5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3Vy
Y2VOb2RlLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZm
ZXJTb3VyY2VOb2RlLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5l
bE1lcmdlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hh
bm5lbE1lcmdlci5jcHAuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxN
ZXJnZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVs
TWVyZ2VyLmguCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIu
aWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJn
ZXIuaWRsLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIu
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxp
dHRlci5jcHAuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRl
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxp
dHRlci5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIu
aWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxp
dHRlci5pZGwuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwLgorICAg
ICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0Lmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oLgorICAgICAgICAqIE1vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9Db250ZXh0LmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVz
dGluYXRpb25Ob2RlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9EZXN0aW5hdGlvbk5vZGUuY3BwLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9E
ZXN0aW5hdGlvbk5vZGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9EZXN0aW5hdGlvbk5vZGUuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVz
dGluYXRpb25Ob2RlLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9EZXN0aW5hdGlvbk5vZGUuaWRsLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9H
YWluLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvR2Fpbi5oLgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9HYWluLmlkbDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9HYWluLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9BdWRpb0dhaW5Ob2RlLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
R2Fpbk5vZGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9HYWlu
Tm9kZS5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5pZGw6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaWRsLgorICAg
ICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5jcHA6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuY3BwLgorICAgICAgICAqIE1vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmguCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0xpc3RlbmVyLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9M
aXN0ZW5lci5pZGwuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGUuY3BwLgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVk
aW9Ob2RlLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2Rl
LmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuY3BwLgorICAg
ICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuaC4KKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5jcHAuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRp
by9BdWRpb05vZGVPdXRwdXQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9Ob2RlT3V0cHV0LmguCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Bhbm5l
ck5vZGUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5l
ck5vZGUuY3BwLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oLgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbC4KKyAgICAgICAg
KiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9BdWRpb1BhcmFtLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvUGFyYW0uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Q
YXJhbS5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5pZGw6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uaWRsLgorICAgICAgICAq
IE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcC4KKyAgICAgICAgKiBN
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuaC4KKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuY3BwLgorICAgICAgICAqIE1vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaC4KKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaWRsLgorICAgICAgICAqIE1vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8v
QXVkaW9Tb3VyY2VOb2RlLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9Tb3VyY2VOb2RlLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0JpcXVhZERT
UEtlcm5lbC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERT
UEtlcm5lbC5jcHAuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmgu
CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmNwcDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5jcHAuCisgICAg
ICAgICogTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaC4KKyAgICAgICAgKiBNb2R1
bGVzL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3dl
YmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5jcHAuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9C
aXF1YWRQcm9jZXNzb3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlx
dWFkUHJvY2Vzc29yLmguCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9Db252b2x2ZXJOb2Rl
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5j
cHAuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaC4KKyAgICAgICAgKiBN
b2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1
ZGlvL0RPTVdpbmRvd1dlYkF1ZGlvLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vRE9NV2luZG93V2ViQXVkaW8uaWRsLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8v
RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcC4KKyAgICAgICAgKiBN
b2R1bGVzL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaC4K
KyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0RlbGF5RFNQS2VybmVsLmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuY3BwLgorICAgICAgICAq
IE1vZHVsZXMvd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1
ZGlvL0RlbGF5Tm9kZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0Rl
bGF5Tm9kZS5jcHAuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9EZWxheU5vZGUuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlOb2RlLmguCisgICAgICAgICog
TW9kdWxlcy93ZWJhdWRpby9EZWxheU5vZGUuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9EZWxheU5vZGUuaWRsLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vRGVs
YXlQcm9jZXNzb3IuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxh
eVByb2Nlc3Nvci5jcHAuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9EZWxheVByb2Nlc3Nv
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheVByb2Nlc3Nvci5o
LgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5v
ZGUuY3BwLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9k
ZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNz
b3JOb2RlLmguCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JO
b2RlLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21w
cmVzc29yTm9kZS5pZGwuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9IaWdoUGFzczJGaWx0
ZXJOb2RlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSGlnaFBhc3My
RmlsdGVyTm9kZS5jcHAuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9IaWdoUGFzczJGaWx0
ZXJOb2RlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0hpZ2hQYXNzMkZp
bHRlck5vZGUuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5v
ZGUuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9IaWdoUGFzczJGaWx0
ZXJOb2RlLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05v
ZGUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVk
aW9Ob2RlLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05v
ZGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlv
Tm9kZS5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5p
ZGw6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05v
ZGUuaWRsLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2Rl
LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuaC4K
KyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5pZGw6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5pZGwuCisg
ICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1Nv
dXJjZU5vZGUuY3BwLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVk
aW9Tb3VyY2VOb2RlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZS5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vTWVk
aWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmlkbC4KKyAgICAgICAgKiBNb2R1
bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5jcHA6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5jcHAu
CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxl
dGlvbkV2ZW50LmguCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21w
bGV0aW9uRXZlbnQuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZs
aW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaWRsLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8v
T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcC4KKyAgICAgICAgKiBN
b2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaC4K
KyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIuY3BwOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyLmNwcC4KKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5oLgorICAgICAgICAqIE1vZHVs
ZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5jcHAuCisgICAgICAgICogTW9k
dWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5oLgorICAgICAgICAqIE1vZHVs
ZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5pZGwuCisgICAgICAgICogTW9k
dWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmNwcDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlckRTUEtlcm5lbC5jcHAuCisgICAgICAgICogTW9k
dWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJEU1BLZXJuZWwuaC4KKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuY3BwLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8v
V2F2ZVNoYXBlck5vZGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2
ZVNoYXBlck5vZGUuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2Rl
LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUu
aWRsLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3Iu
Y3BwLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmgu
CisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIFdlYkNvcmUucHJpOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3ZWJhdWRpbzogUmVtb3ZlZC4KKyAgICAgICAg
KiB3ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2Vi
YXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9B
dWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8v
QXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9B
dWRpb0J1ZmZlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9CdWZmZXIu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0J1ZmZlci5pZGw6IFJlbW92ZWQu
CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFjay5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHdlYmF1ZGlvL0F1ZGlvQnVmZmVyQ2FsbGJhY2suaWRsOiBSZW1vdmVkLgorICAgICAg
ICAqIHdlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmg6IFJlbW92ZWQuCisgICAgICAgICog
d2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiB3
ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1
ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1
ZGlvQ2hhbm5lbE1lcmdlci5pZGw6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9D
aGFubmVsU3BsaXR0ZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQ2hh
bm5lbFNwbGl0dGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9DaGFubmVs
U3BsaXR0ZXIuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQ29udGV4dC5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Db250ZXh0Lmg6IFJlbW92ZWQu
CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbDogUmVtb3ZlZC4KKyAgICAgICAg
KiB3ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
d2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJh
dWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVk
aW8vQXVkaW9HYWluLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9HYWluLmlk
bDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmg6IFJlbW92ZWQuCisgICAgICAg
ICogd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVk
aW8vQXVkaW9MaXN0ZW5lci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9M
aXN0ZW5lci5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaWRs
OiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvTm9kZS5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogd2ViYXVkaW8vQXVkaW9Ob2RlLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVk
aW8vQXVkaW9Ob2RlLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb05vZGVJ
bnB1dC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHdlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2Vi
YXVkaW8vQXVkaW9QYW5uZXJOb2RlLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVk
aW9QYW5uZXJOb2RlLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb1BhcmFt
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb1BhcmFtLmg6IFJlbW92ZWQu
CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9QYXJhbS5pZGw6IFJlbW92ZWQuCisgICAgICAgICog
d2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJh
dWRpby9BdWRpb1BhcmFtVGltZWxpbmUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9B
dWRpb1Byb2Nlc3NpbmdFdmVudC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVk
aW9Qcm9jZXNzaW5nRXZlbnQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb1By
b2Nlc3NpbmdFdmVudC5pZGw6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Tb3Vy
Y2VOb2RlLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmlk
bDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHdlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHdlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRp
by9CaXF1YWRGaWx0ZXJOb2RlLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9CaXF1
YWRQcm9jZXNzb3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0JpcXVhZFByb2Nl
c3Nvci5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiB3ZWJhdWRpby9Db252b2x2ZXJOb2RlLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiB3
ZWJhdWRpby9ET01XaW5kb3dXZWJBdWRpby5pZGw6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVk
aW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3
ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiB3ZWJhdWRpby9EZWxheURTUEtlcm5lbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVk
aW8vRGVsYXlEU1BLZXJuZWwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9EZWxheU5v
ZGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0RlbGF5Tm9kZS5oOiBSZW1vdmVk
LgorICAgICAgICAqIHdlYmF1ZGlvL0RlbGF5Tm9kZS5pZGw6IFJlbW92ZWQuCisgICAgICAgICog
d2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlv
L0RlbGF5UHJvY2Vzc29yLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vRHluYW1pY3ND
b21wcmVzc29yTm9kZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vRHluYW1pY3ND
b21wcmVzc29yTm9kZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0R5bmFtaWNzQ29t
cHJlc3Nvck5vZGUuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0hpZ2hQYXNzMkZp
bHRlck5vZGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRl
ck5vZGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2Rl
LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmg6IFJl
bW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5pZGw6IFJlbW92
ZWQuCisgICAgICAgICogd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiB3ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiB3ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuaWRsOiBSZW1vdmVkLgorICAgICAgICAq
IHdlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmg6IFJlbW92ZWQuCisg
ICAgICAgICogd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmlkbDogUmVtb3Zl
ZC4KKyAgICAgICAgKiB3ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5o
OiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVu
dC5pZGw6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRp
b25Ob2RlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0
aW5hdGlvbk5vZGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9SZWFsdGltZUFuYWx5
c2VyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyLmg6
IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmg6IFJlbW92
ZWQuCisgICAgICAgICogd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaWRsOiBSZW1vdmVk
LgorICAgICAgICAqIHdlYmF1ZGlvL1dhdmVTaGFwZXJEU1BLZXJuZWwuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHdlYmF1ZGlvL1dhdmVTaGFwZXJEU1BLZXJuZWwuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiB3ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2Vi
YXVkaW8vV2F2ZVNoYXBlck5vZGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9XYXZl
U2hhcGVyTm9kZS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vV2F2ZVNoYXBlclBy
b2Nlc3Nvci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nl
c3Nvci5oOiBSZW1vdmVkLgorCiAyMDEyLTAzLTE5ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZp
ZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTA5
MDE0LgpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDExMTIzMykKKysrIFNvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQCBT
RVQoV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVs
ZXMvZmlsZXN5c3RlbSIKICAgICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9nZW9sb2NhdGlvbiIK
ICAgICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9pbmRleGVkZGIiCisgICAgIiR7V0VCQ09SRV9E
SVJ9L01vZHVsZXMvd2ViYXVkaW8iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvd2ViZGF0
YWJhc2UiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvd2Vic29ja2V0cyIKICAgICAiJHtX
RUJDT1JFX0RJUn0vYWNjZXNzaWJpbGl0eSIKQEAgLTY0LDcgKzY1LDYgQEAgU0VUKFdlYkNvcmVf
SU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS9zdmcvZ3JhcGhpY3MiCiAg
ICAgIiR7V0VCQ09SRV9ESVJ9L3N2Zy9ncmFwaGljcy9maWx0ZXJzIgogICAgICIke1dFQkNPUkVf
RElSfS9zdmcvcHJvcGVydGllcyIKLSAgICAiJHtXRUJDT1JFX0RJUn0vd2ViYXVkaW8iCiAgICAg
IiR7V0VCQ09SRV9ESVJ9L3dlYnNvY2tldHMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3dvcmtlcnMi
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L3htbCIKQEAgLTk2LDYgKzk2LDcgQEAgU0VUKFdlYkNvcmVf
SURMX0lOQ0xVREVTCiAgICAgTW9kdWxlcy9maWxlc3lzdGVtCiAgICAgTW9kdWxlcy9nZW9sb2Nh
dGlvbgogICAgIE1vZHVsZXMvaW5kZXhlZGRiCisgICAgTW9kdWxlcy93ZWJhdWRpbwogICAgIE1v
ZHVsZXMvd2ViZGF0YWJhc2UKICAgICBNb2R1bGVzL3dlYnNvY2tldHMKICAgICBiaW5kaW5ncy9n
ZW5lcmljCkBAIC0xMTAsNyArMTExLDYgQEAgU0VUKFdlYkNvcmVfSURMX0lOQ0xVREVTCiAgICAg
cGx1Z2lucwogICAgIHN0b3JhZ2UKICAgICBzdmcKLSAgICB3ZWJhdWRpbwogICAgIHdvcmtlcnMK
ICAgICB4bWwKICkKQEAgLTM3NiwyNyArMzc2LDI3IEBAIFNFVChXZWJDb3JlX0lETF9GSUxFUwog
ICAgIHN0b3JhZ2UvU3RvcmFnZUluZm9RdW90YUNhbGxiYWNrLmlkbAogICAgIHN0b3JhZ2UvU3Rv
cmFnZUluZm9Vc2FnZUNhbGxiYWNrLmlkbAogCi0gICAgd2ViYXVkaW8vQXVkaW9CdWZmZXIuaWRs
Ci0gICAgd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlkbAotICAgIHdlYmF1ZGlvL0F1
ZGlvQ2hhbm5lbFNwbGl0dGVyLmlkbAotICAgIHdlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5p
ZGwKLSAgICB3ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCi0gICAgd2ViYXVkaW8vQXVkaW9EZXN0
aW5hdGlvbk5vZGUuaWRsCi0gICAgd2ViYXVkaW8vQXVkaW9HYWluLmlkbAotICAgIHdlYmF1ZGlv
L0F1ZGlvR2Fpbk5vZGUuaWRsCi0gICAgd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5pZGwKLSAgICB3
ZWJhdWRpby9BdWRpb05vZGUuaWRsCi0gICAgd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbAot
ICAgIHdlYmF1ZGlvL0F1ZGlvUGFyYW0uaWRsCi0gICAgd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5n
RXZlbnQuaWRsCi0gICAgd2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmlkbAotICAgIHdlYmF1ZGlv
L0NvbnZvbHZlck5vZGUuaWRsCi0gICAgd2ViYXVkaW8vRE9NV2luZG93V2ViQXVkaW8uaWRsCi0g
ICAgd2ViYXVkaW8vRGVsYXlOb2RlLmlkbAotICAgIHdlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5v
ZGUuaWRsCi0gICAgd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5pZGwKLSAgICB3ZWJhdWRp
by9Mb3dQYXNzMkZpbHRlck5vZGUuaWRsCi0gICAgd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5v
ZGUuaWRsCisgICAgTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5pZGwKKyAgICBNb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5pZGwKKyAgICBNb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmlkbAorICAgIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFu
bmVsTWVyZ2VyLmlkbAorICAgIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbAorICAg
IE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaWRsCisgICAgTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0dhaW4uaWRsCisgICAgTW9kdWxlcy93ZWJhdWRpby9BdWRpb0dhaW5Ob2Rl
LmlkbAorICAgIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5pZGwKKyAgICBNb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvTm9kZS5pZGwKKyAgICBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFubmVy
Tm9kZS5pZGwKKyAgICBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uaWRsCisgICAgTW9kdWxl
cy93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5pZGwKKyAgICBNb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvU291cmNlTm9kZS5pZGwKKyAgICBNb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUu
aWRsCisgICAgTW9kdWxlcy93ZWJhdWRpby9ET01XaW5kb3dXZWJBdWRpby5pZGwKKyAgICBNb2R1
bGVzL3dlYmF1ZGlvL0RlbGF5Tm9kZS5pZGwKKyAgICBNb2R1bGVzL3dlYmF1ZGlvL0hpZ2hQYXNz
MkZpbHRlck5vZGUuaWRsCisgICAgTW9kdWxlcy93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2Rl
LmlkbAorICAgIE1vZHVsZXMvd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmlkbAorICAgIE1v
ZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaWRsCiAKICAgICB4bWwvRE9NUGFy
c2VyLmlkbAogICAgIHhtbC9YTUxIdHRwUmVxdWVzdC5pZGwKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQkocmV2aXNpb24gMTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQCBWUEFUSCA9IFwK
ICAgICAkKFdlYkNvcmUpL01vZHVsZXMvZmlsZXN5c3RlbSBcCiAgICAgJChXZWJDb3JlKS9Nb2R1
bGVzL2dlb2xvY2F0aW9uIFwKICAgICAkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiIFwKKyAg
ICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8gXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy93
ZWJkYXRhYmFzZSBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYnNvY2tldHMgXAogICAgICQo
V2ViQ29yZSkvYmluZGluZ3MvZ2VuZXJpYyBcCkBAIC01MCw3ICs1MSw2IEBAIFZQQVRIID0gXAog
ICAgICQoV2ViQ29yZSkvcGx1Z2lucyBcCiAgICAgJChXZWJDb3JlKS9zdG9yYWdlIFwKICAgICAk
KFdlYkNvcmUpL3htbCBcCi0gICAgJChXZWJDb3JlKS93ZWJhdWRpbyBcCiAgICAgJChXZWJDb3Jl
KS93b3JrZXJzIFwKICAgICAkKFdlYkNvcmUpL3N2ZyBcCiAgICAgJChXZWJDb3JlKS90ZXN0aW5n
IFwKQEAgLTEwNCw2ICsxMDQsMzMgQEAgQklORElOR19JRExTID0gXAogICAgICQoV2ViQ29yZSkv
TW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbCBcCiAgICAgJChXZWJD
b3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwgXAogICAg
ICQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvV29ya2VyQ29udGV4dEluZGV4ZWREYXRhYmFz
ZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5pZGwg
XAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlckNhbGxiYWNrLmlk
bCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9k
ZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJn
ZXIuaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3Bs
aXR0ZXIuaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0
LmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25O
b2RlLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbi5pZGwg
XAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmlkbCBcCisg
ICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaWRsIFwKKyAgICAk
KFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmlkbCBcCisgICAgJChXZWJDb3Jl
KS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwgXAorICAgICQoV2ViQ29yZSkv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxl
cy93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVz
L3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2Vi
YXVkaW8vRE9NV2luZG93V2ViQXVkaW8uaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2Vi
YXVkaW8vRGVsYXlOb2RlLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0R5
bmFtaWNzQ29tcHJlc3Nvck5vZGUuaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVk
aW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJh
dWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dl
YmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93
ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaWRsIFwKKyAgICAkKFdlYkNvcmUp
L01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmlkbCBcCisgICAg
JChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmlkbCBcCisg
ICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmlkbCBcCiAgICAg
JChXZWJDb3JlKS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RPTVdpbmRvd1NRTERhdGFiYXNlLmlkbCBc
CiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmlkbCBcCiAgICAg
JChXZWJDb3JlKS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ2FsbGJhY2suaWRsIFwKQEAg
LTU0NSwzMyArNTcyLDYgQEAgQklORElOR19JRExTID0gXAogICAgICQoV2ViQ29yZSkvc3ZnL1NW
R1pvb21FdmVudC5pZGwgXAogICAgICQoV2ViQ29yZSkvdGVzdGluZy9JbnRlcm5hbHMuaWRsIFwK
ICAgICAkKFdlYkNvcmUpL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5pZGwgXAotICAgICQoV2Vi
Q29yZSkvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3dlYmF1ZGlv
L0F1ZGlvQnVmZmVyQ2FsbGJhY2suaWRsIFwKLSAgICAkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlv
QnVmZmVyU291cmNlTm9kZS5pZGwgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9DaGFu
bmVsTWVyZ2VyLmlkbCBcCi0gICAgJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxp
dHRlci5pZGwgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbCBcCi0g
ICAgJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGwgXAotICAgICQo
V2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9HYWluLmlkbCBcCi0gICAgJChXZWJDb3JlKS93ZWJhdWRp
by9BdWRpb0dhaW5Ob2RlLmlkbCBcCi0gICAgJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb0xpc3Rl
bmVyLmlkbCBcCi0gICAgJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb05vZGUuaWRsIFwKLSAgICAk
KFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwgXAotICAgICQoV2ViQ29yZSkv
d2ViYXVkaW8vQXVkaW9QYXJhbS5pZGwgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9Q
cm9jZXNzaW5nRXZlbnQuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlvU291cmNl
Tm9kZS5pZGwgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5pZGwg
XAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5pZGwgXAotICAgICQoV2Vi
Q29yZSkvd2ViYXVkaW8vRE9NV2luZG93V2ViQXVkaW8uaWRsIFwKLSAgICAkKFdlYkNvcmUpL3dl
YmF1ZGlvL0RlbGF5Tm9kZS5pZGwgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8vRHluYW1pY3ND
b21wcmVzc29yTm9kZS5pZGwgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8vSGlnaFBhc3MyRmls
dGVyTm9kZS5pZGwgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9k
ZS5pZGwgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmlkbCBc
Ci0gICAgJChXZWJDb3JlKS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaWRs
IFwKLSAgICAkKFdlYkNvcmUpL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5p
ZGwgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaWRsIFwK
LSAgICAkKFdlYkNvcmUpL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmlkbCBcCiAgICAgJChXZWJD
b3JlKS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmlkbCBcCiAgICAgJChXZWJDb3JlKS93b3JrZXJz
L0RlZGljYXRlZFdvcmtlckNvbnRleHQuaWRsIFwKICAgICAkKFdlYkNvcmUpL3dvcmtlcnMvU2hh
cmVkV29ya2VyLmlkbCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCShyZXZpc2lv
biAxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkJKHdvcmtpbmcg
Y29weSkKQEAgLTEyOSw2ICsxMjksMjcgQEAgSURMX0JJTkRJTkdTICs9IFwKICAgICAkJFBXRC9N
b2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbCBcCiAgICAgJCRQV0QvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhbnNhY3Rpb24uaWRsIFwKICAgICAkJFBXRC9Nb2R1bGVzL2luZGV4ZWRkYi9X
b3JrZXJDb250ZXh0SW5kZXhlZERhdGFiYXNlLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0J1ZmZlci5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9C
dWZmZXJTb3VyY2VOb2RlLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0No
YW5uZWxNZXJnZXIuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5l
bFNwbGl0dGVyLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQu
aWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmlk
bCBcCisgICAgJCRQV0QvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0dhaW4uaWRsIFwKKyAgICAkJFBX
RC9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvTm9kZS5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYW5uZXJO
b2RlLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmlkbCBcCisg
ICAgJCRQV0QvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5pZGwgXAorICAg
ICQkUFdEL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmlkbCBcCisgICAgJCRQV0Qv
TW9kdWxlcy93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy93
ZWJhdWRpby9EZWxheU5vZGUuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL3dlYmF1ZGlvL0RPTVdp
bmRvd1dlYkF1ZGlvLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy93ZWJhdWRpby9IaWdoUGFzczJG
aWx0ZXJOb2RlLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy93ZWJhdWRpby9KYXZhU2NyaXB0QXVk
aW9Ob2RlLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy93ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5v
ZGUuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2Rl
LmlkbCBcCiAgICAgJCRQV0QvTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dTUUxEYXRhYmFz
ZS5pZGwgXAogICAgICQkUFdEL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaWRsIFwKICAg
ICAkJFBXRC9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ2FsbGJhY2suaWRsIFwKQEAgLTQx
MSwyNyArNDMyLDYgQEAgSURMX0JJTkRJTkdTICs9IFwKICAgICAkJFBXRC9zdG9yYWdlL1N0b3Jh
Z2VJbmZvVXNhZ2VDYWxsYmFjay5pZGwgXAogICAgICQkUFdEL3Rlc3RpbmcvSW50ZXJuYWxzLmlk
bCBcCiAgICAgJCRQV0QvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmlkbCBcCi0gICAgJCRQV0Qv
d2ViYXVkaW8vQXVkaW9CdWZmZXIuaWRsIFwKLSAgICAkJFBXRC93ZWJhdWRpby9BdWRpb0J1ZmZl
clNvdXJjZU5vZGUuaWRsIFwKLSAgICAkJFBXRC93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIu
aWRsIFwKLSAgICAkJFBXRC93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5pZGwgXAotICAg
ICQkUFdEL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwgXAotICAgICQkUFdEL3dlYmF1ZGlvL0F1
ZGlvRGVzdGluYXRpb25Ob2RlLmlkbCBcCi0gICAgJCRQV0Qvd2ViYXVkaW8vQXVkaW9HYWluLmlk
bCBcCi0gICAgJCRQV0Qvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5pZGwgXAotICAgICQkUFdEL3dl
YmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaWRsIFwKLSAgICAkJFBXRC93ZWJhdWRpby9BdWRpb05vZGUu
aWRsIFwKLSAgICAkJFBXRC93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaWRsIFwKLSAgICAkJFBX
RC93ZWJhdWRpby9BdWRpb1BhcmFtLmlkbCBcCi0gICAgJCRQV0Qvd2ViYXVkaW8vQXVkaW9Qcm9j
ZXNzaW5nRXZlbnQuaWRsIFwKLSAgICAkJFBXRC93ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaWRs
IFwKLSAgICAkJFBXRC93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmlkbCBcCi0gICAgJCRQV0Qvd2Vi
YXVkaW8vRGVsYXlOb2RlLmlkbCBcCi0gICAgJCRQV0Qvd2ViYXVkaW8vRE9NV2luZG93V2ViQXVk
aW8uaWRsIFwKLSAgICAkJFBXRC93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmlkbCBcCi0g
ICAgJCRQV0Qvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5pZGwgXAotICAgICQkUFdEL3dl
YmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5pZGwgXAotICAgICQkUFdEL3dlYmF1ZGlvL1JlYWx0
aW1lQW5hbHlzZXJOb2RlLmlkbCBcCiAgICAgJCRQV0Qvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5p
ZGwgXAogICAgICQkUFdEL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5pZGwgXAogICAg
ICQkUFdEL3dvcmtlcnMvU2hhcmVkV29ya2VyLmlkbCBcCkBAIC02OTksNiArNjk5LDcgQEAgZ2Vu
ZXJhdGVCaW5kaW5ncy5jb21tYW5kcyA9IHBlcmwgLUkkJFBXRAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC0taW5jbHVkZSAkJFBXRC9Nb2R1bGVzL2ZpbGVzeXN0ZW0gXAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAkJFBXRC9Nb2R1bGVzL2dlb2xvY2F0aW9uIFwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWluY2x1ZGUgJCRQV0QvTW9kdWxlcy9pbmRl
eGVkZGIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAkJFBXRC9Nb2R1
bGVzL3dlYmF1ZGlvIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWluY2x1ZGUgJCRQ
V0QvTW9kdWxlcy93ZWJkYXRhYmFzZSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1p
bmNsdWRlICQkUFdEL01vZHVsZXMvd2Vic29ja2V0cyBcCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLS1pbmNsdWRlICQkUFdEL2RvbSBcCkBAIC03MDksNyArNzEwLDYgQEAgZ2VuZXJhdGVC
aW5kaW5ncy5jb21tYW5kcyA9IHBlcmwgLUkkJFBXRAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC0taW5jbHVkZSAkJFBXRC9zdG9yYWdlIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAtLWluY2x1ZGUgJCRQV0QvY3NzIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWlu
Y2x1ZGUgJCRQV0QvdGVzdGluZyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1pbmNs
dWRlICQkUFdEL3dlYmF1ZGlvIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWluY2x1
ZGUgJCRQV0Qvd29ya2VycyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1vdXRwdXRE
aXIgJHtRTUFLRV9GVU5DX0ZJTEVfT1VUX1BBVEh9IFwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAtLXN1cHBsZW1lbnRhbERlcGVuZGVuY3lGaWxlICR7UU1BS0VfRlVOQ19GSUxFX09VVF9Q
QVRIfS8kJFNVUFBMRU1FTlRBTF9ERVBFTkRFTkNZX0ZJTEUgXApJbmRleDogU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0JKHJldmlzaW9uIDExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
CSh3b3JraW5nIGNvcHkpCkBAIC0xNSw2ICsxNSw3IEBAIHdlYmNvcmVfY3BwZmxhZ3MgKz0gXAog
CS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24gXAogCS1JJChz
cmNkaXIpL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiIFwKIAktSSQoc3JjZGlyKS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYnNvY2tldHMgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkg
XApAQCAtODcsNyArODgsNiBAQCB3ZWJjb3JlX2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGlyKS9T
b3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcyBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNv
cmUvdGVzdGluZyBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcyBcCi0J
LUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8gXAogCS1JJChzcmNkaXIpL1NvdXJj
ZS9XZWJDb3JlL3dlYnNvY2tldHMgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3htbCBcCkBAIC03ODMsNiArNzgzLDcg
QEAgSURMX1BBVEggOj0gXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy9nZW9sb2NhdGlvbiBcCiAg
ICAgJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYiBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVz
L21lZGlhc3RyZWFtIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8gXAogICAgICQo
V2ViQ29yZSkvTW9kdWxlcy93ZWJkYXRhYmFzZSBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dl
YnNvY2tldHMgXAogICAgICQoV2ViQ29yZSkvYmluZGluZ3MvanMgXApAQCAtODAyLDcgKzgwMyw2
IEBAIElETF9QQVRIIDo9IFwKICAgICAkKFdlYkNvcmUpL3N0b3JhZ2UgXAogICAgICQoV2ViQ29y
ZSkvc3ZnIFwKICAgICAkKFdlYkNvcmUpL3Rlc3RpbmcgXAotICAgICQoV2ViQ29yZSkvd2ViYXVk
aW8gXAogICAgICQoV2ViQ29yZSkvd2Vic29ja2V0cyBcCiAgICAgJChXZWJDb3JlKS93b3JrZXJz
IFwKICAgICAkKFdlYkNvcmUpL3htbApAQCAtOTI3LDYgKzkyNyw3IEBAIEVYVFJBX0RJU1QgKz0g
XAogCSQoc2hlbGwgbHMgJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRp
b24vKi5pZGwpIFwKIAkkKHNoZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi8qLmlkbCkgXAogCSQoc2hlbGwgbHMgJChzcmNkaXIpL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vKi5pZGwpIFwKKwkkKHNoZWxsIGxzICQoc3JjZGlyKS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvLyouaWRsKSBcCiAJJChzaGVsbCBscyAkKHNyY2Rp
cikvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS8qLmlkbCkgXAogCSQoc2hlbGwg
bHMgJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy8qLmlkbCkgXAog
CSQoc2hlbGwgbHMgJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL2Nzcy8qLmlkbCkgXApAQCAtOTQ0
LDcgKzk0NSw2IEBAIEVYVFJBX0RJU1QgKz0gXAogCSQoc2hlbGwgbHMgJChzcmNkaXIpL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvKi5pZGwpIFwKIAkkKHNoZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvKi5pZGwpIFwKIAkkKHNoZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nLyouaWRsKSBcCi0JJChzaGVsbCBscyAkKHNyY2RpcikvU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vKi5pZGwpIFwKIAkkKHNoZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzLyouaWRsKSBcCiAJJChzaGVsbCBscyAkKHNyY2RpcikvU291cmNlL1dlYkNvcmUveG1s
LyouaWRsKSBcCiAJU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcu
bCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDExMTIzMykK
KysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAg
LTY3Nyw2ICs2NzcsMTEgQEAgZG9tX2JpbmRpbmdfaWRscyArPSBcCiAJJChXZWJDb3JlKS9Nb2R1
bGVzL21lZGlhc3RyZWFtL05hdmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjay5pZGwgXAog
CSQoV2ViQ29yZSkvTW9kdWxlcy9tZWRpYXN0cmVhbS9TZXNzaW9uRGVzY3JpcHRpb24uaWRsIFwK
IAkkKFdlYkNvcmUpL01vZHVsZXMvbWVkaWFzdHJlYW0vU2lnbmFsaW5nQ2FsbGJhY2suaWRsIFwK
KwkkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbCBcCisJJChXZWJD
b3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwgXAorCSQoV2ViQ29yZSkv
TW9kdWxlcy93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmlkbCBcCisJJChXZWJDb3Jl
KS9Nb2R1bGVzL3dlYmF1ZGlvL0RPTVdpbmRvd1dlYkF1ZGlvLmlkbCBcCisJJChXZWJDb3JlKS9N
b2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmlkbCBcCiAJJChXZWJDb3JlKS9jc3MvQ1NT
Q2hhcnNldFJ1bGUuaWRsIFwKIAkkKFdlYkNvcmUpL2Nzcy9DU1NGb250RmFjZVJ1bGUuaWRsIFwK
IAkkKFdlYkNvcmUpL2Nzcy9DU1NJbXBvcnRSdWxlLmlkbCBcCkBAIC05MzYsMTEgKzk0MSw2IEBA
IGRvbV9iaW5kaW5nX2lkbHMgKz0gXAogCSQoV2ViQ29yZSkvc3RvcmFnZS9TdG9yYWdlRXZlbnQu
aWRsIFwKIAkkKFdlYkNvcmUpL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCBcCiAJJChXZWJDb3JlKS90
ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaWRsIFwKLQkkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlv
Q29udGV4dC5pZGwgXAotCSQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbCBc
Ci0JJChXZWJDb3JlKS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmlkbCBcCi0JJChX
ZWJDb3JlKS93ZWJhdWRpby9ET01XaW5kb3dXZWJBdWRpby5pZGwgXAotCSQoV2ViQ29yZSkvd2Vi
YXVkaW8vV2F2ZVNoYXBlck5vZGUuaWRsIFwKIAkkKFdlYkNvcmUpL3dvcmtlcnMvQWJzdHJhY3RX
b3JrZXIuaWRsIFwKIAkkKFdlYkNvcmUpL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5p
ZGwgXAogCSQoV2ViQ29yZSkvd29ya2Vycy9TaGFyZWRXb3JrZXIuaWRsIFwKQEAgLTUzNzUsODgg
KzUzNzUsODggQEAgZW5kaWYgIyBFTkQgRU5BQkxFX1NWRwogCiBpZiBFTkFCTEVfV0VCX0FVRElP
CiB3ZWJjb3JlX3NvdXJjZXMgKz0gXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXN5bmNBdWRpb0RlY29kZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0FzeW5jQXVkaW9EZWNvZGVyLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQnVmZmVyLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9CdWZmZXJDYWxsYmFjay5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvQnVmZmVyU291cmNlTm9kZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuaCBcCisJU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbi5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvR2Fpbk5vZGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvR2Fpbk5vZGUuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0xpc3RlbmVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0xp
c3RlbmVyLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNw
cCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaCBcCisJU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuaCBcCisJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5oIFwKKwlTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5jcHAgXAorCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmggXAorCVNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9QYXJhbS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvUGFyYW1UaW1lbGluZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9QYXJhbVRpbWVsaW5lLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQmlxdWFkRFNQS2VybmVsLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9CaXF1YWREU1BLZXJuZWwuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9CaXF1YWRGaWx0ZXJOb2RlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9CaXF1YWRGaWx0ZXJOb2RlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QmlxdWFkUHJvY2Vzc29yLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9C
aXF1YWRQcm9jZXNzb3IuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Db252
b2x2ZXJOb2RlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Db252b2x2
ZXJOb2RlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1ZGlv
RGVzdGluYXRpb25Ob2RlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVm
YXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9EZWxheURTUEtlcm5lbC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vRGVsYXlEU1BLZXJuZWwuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9EZWxheU5vZGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5
Tm9kZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5UHJvY2Vzc29y
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWxheVByb2Nlc3Nvci5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5v
ZGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJl
c3Nvck5vZGUuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9IaWdoUGFzczJG
aWx0ZXJOb2RlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9IaWdoUGFz
czJGaWx0ZXJOb2RlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vSmF2YVNj
cmlwdEF1ZGlvTm9kZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vSmF2
YVNjcmlwdEF1ZGlvTm9kZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0xv
d1Bhc3MyRmlsdGVyTm9kZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
TG93UGFzczJGaWx0ZXJOb2RlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCBcCisJU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCBcCisJU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBs
ZXRpb25FdmVudC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVB
dWRpb0NvbXBsZXRpb25FdmVudC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vUmVhbHRpbWVBbmFseXNlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vUmVhbHRpbWVBbmFseXNlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L1JlYWx0aW1lQW5hbHlzZXJOb2RlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vV2F2ZVNoYXBlckRTUEtlcm5lbC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vV2F2ZVNoYXBlckRTUEtlcm5lbC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmggXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQXVkaW9CdWZmZXJTb3VyY2VOb2RlQ3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBdWRpb0NvbnRleHRDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NvbnZvbHZlck5vZGVDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0phdmFTY3JpcHRBdWRpb05vZGVDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dhdmVTaGFwZXJOb2RlQ3VzdG9tLmNwcCBcCi0JU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9B
dWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1
ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
QnVmZmVyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaCBcCi0J
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFjay5oIFwKLQlTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuY3BwIFwKLQlTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaCBcCi0JU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9DaGFubmVsTWVyZ2VyLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
Q2hhbm5lbFNwbGl0dGVyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFu
bmVsU3BsaXR0ZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmggXAotCVNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBcCi0JU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCBcCi0JU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9HYWluLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5v
ZGUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmggXAotCVNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1
ZGlvTm9kZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oIFwKLQlT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5jcHAgXAotCVNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvTm9kZU91dHB1dC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9k
ZU91dHB1dC5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaCBcCi0JU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvUGFyYW0uaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbVRp
bWVsaW5lLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5l
LmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmNwcCBc
Ci0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaCBcCi0JU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmggXAotCVNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0JpcXVhZERTUEtlcm5lbC5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0
ZXJOb2RlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5o
IFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuY3BwIFwKLQlTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuaCBcCi0JU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0Nv
bnZvbHZlck5vZGUuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVz
dGluYXRpb25Ob2RlLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rl
c3RpbmF0aW9uTm9kZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5RFNQS2Vy
bmVsLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuaCBcCi0J
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlOb2RlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vRGVsYXlOb2RlLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5UHJv
Y2Vzc29yLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuaCBc
Ci0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaCBcCi0JU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuaCBcCi0JU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTG93
UGFzczJGaWx0ZXJOb2RlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTG93UGFzczJG
aWx0ZXJOb2RlLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9E
ZXN0aW5hdGlvbk5vZGUuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlv
RGVzdGluYXRpb25Ob2RlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1
ZGlvQ29tcGxldGlvbkV2ZW50LmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVB
dWRpb0NvbXBsZXRpb25FdmVudC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0
aW1lQW5hbHlzZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5
c2VyLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaCBcCi0J
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuY3BwIFwKLQlTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmggXAotCVNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL1dhdmVTaGFwZXJEU1BLZXJuZWwuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9XYXZlU2hhcGVyRFNQS2VybmVsLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVT
aGFwZXJQcm9jZXNzb3IuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZlU2hhcGVy
Tm9kZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0FycmF5LmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvQnVzLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuaCBcCkBAIC01NTgxLDI4ICs1NTgxLDI4IEBA
IHdlYmNvcmVfYnVpbHRfc291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1Jl
YWx0aW1lQW5hbHlzZXJOb2RlLmgKIAogZG9tX2JpbmRpbmdfaWRscyArPSBcCi0JJChXZWJDb3Jl
KS93ZWJhdWRpby9BdWRpb0J1ZmZlci5pZGwgXAotCSQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9C
dWZmZXJDYWxsYmFjay5pZGwgXAotCSQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3Vy
Y2VOb2RlLmlkbCBcCi0JJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuaWRs
IFwKLQkkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmlkbCBcCi0JJChX
ZWJDb3JlKS93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGwgXAotCSQoV2ViQ29yZSkv
d2ViYXVkaW8vQXVkaW9HYWluLmlkbCBcCi0JJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb0dhaW5O
b2RlLmlkbCBcCi0JJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmlkbCBcCi0JJChX
ZWJDb3JlKS93ZWJhdWRpby9BdWRpb05vZGUuaWRsIFwKLQkkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1
ZGlvUGFyYW0uaWRsIFwKLQkkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50
LmlkbCBcCi0JJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaWRsIFwKLQkkKFdl
YkNvcmUpL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaWRsIFwKLQkkKFdlYkNvcmUpL3dlYmF1
ZGlvL0NvbnZvbHZlck5vZGUuaWRsIFwKLQkkKFdlYkNvcmUpL3dlYmF1ZGlvL0RlbGF5Tm9kZS5p
ZGwgXAotCSQoV2ViQ29yZSkvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5pZGwgXAotCSQo
V2ViQ29yZSkvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5pZGwgXAotCSQoV2ViQ29yZSkv
d2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmlkbCBcCi0JJChXZWJDb3JlKS93ZWJhdWRpby9N
ZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaWRsIFwKLQkkKFdlYkNvcmUpL3dlYmF1ZGlvL09m
ZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5pZGwgXAotCSQoV2ViQ29yZSkvd2ViYXVkaW8vUmVh
bHRpbWVBbmFseXNlck5vZGUuaWRsCisJJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
QnVmZmVyLmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyQ2Fs
bGJhY2suaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3Vy
Y2VOb2RlLmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1l
cmdlci5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxp
dHRlci5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9u
Tm9kZS5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0dhaW4uaWRsIFwK
KwkkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5pZGwgXAorCSQoV2Vi
Q29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmlkbCBcCisJJChXZWJDb3JlKS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb1BhcmFtLmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
UHJvY2Vzc2luZ0V2ZW50LmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
U291cmNlTm9kZS5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRGaWx0
ZXJOb2RlLmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUu
aWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vRGVsYXlOb2RlLmlkbCBcCisJJChX
ZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuaWRsIFwKKwkkKFdl
YkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5pZGwgXAorCSQoV2Vi
Q29yZSkvTW9kdWxlcy93ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuaWRsIFwKKwkkKFdlYkNv
cmUpL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmlkbCBcCisJ
JChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5p
ZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5p
ZGwKIGVuZGlmCiAKIApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gMTExMjMzKQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC04MTIsNiArODEy
LDMzIEBACiAgICAgICAgICAgICAnTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25FdmVu
dC5pZGwnLAogICAgICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uUmVz
dWx0LmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25S
ZXN1bHRMaXN0LmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZl
ci5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFj
ay5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VO
b2RlLmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJn
ZXIuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0
dGVyLmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRs
JywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmlk
bCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0dhaW4uaWRsJywKKyAgICAg
ICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaWRsJywKKyAgICAgICAgICAg
ICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaWRsJywKKyAgICAgICAgICAgICdNb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9QYW5uZXJOb2RlLmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9B
dWRpb1BhcmFtLmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Byb2Nl
c3NpbmdFdmVudC5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Tb3Vy
Y2VOb2RlLmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRGaWx0ZXJO
b2RlLmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmlk
bCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9EZWxheU5vZGUuaWRsJywKKyAgICAg
ICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0RPTVdpbmRvd1dlYkF1ZGlvLmlkbCcsCisgICAgICAg
ICAgICAnTW9kdWxlcy93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmlkbCcsCisgICAg
ICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmlkbCcsCisgICAg
ICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmlkbCcsCisgICAg
ICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuaWRsJywKKyAgICAg
ICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5pZGwn
LAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2
ZW50LmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2Vy
Tm9kZS5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUu
aWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL0RPTVdpbmRvd1NRTERhdGFi
YXNlLmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5pZGwn
LAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDYWxsYmFjay5pZGwn
LApAQCAtMTEwNSwzMyArMTEzMiw2IEBACiAgICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdlSW5m
b0Vycm9yQ2FsbGJhY2suaWRsJywKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VJbmZvUXVv
dGFDYWxsYmFjay5pZGwnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZUluZm9Vc2FnZUNh
bGxiYWNrLmlkbCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9CdWZmZXIuaWRsJywKLSAg
ICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0J1ZmZlckNhbGxiYWNrLmlkbCcsCi0gICAgICAgICAg
ICAnd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlkbCcsCi0gICAgICAgICAgICAnd2Vi
YXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmlkbCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVk
aW9DaGFubmVsU3BsaXR0ZXIuaWRsJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0NvbnRl
eHQuaWRsJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGwn
LAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvR2Fpbi5pZGwnLAotICAgICAgICAgICAgJ3dl
YmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaWRsJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0xp
c3RlbmVyLmlkbCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9Ob2RlLmlkbCcsCi0gICAg
ICAgICAgICAnd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbCcsCi0gICAgICAgICAgICAnd2Vi
YXVkaW8vQXVkaW9QYXJhbS5pZGwnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvUHJvY2Vz
c2luZ0V2ZW50LmlkbCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmlk
bCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5pZGwnLAotICAgICAg
ICAgICAgJ3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsJywKLSAgICAgICAgICAgICd3ZWJhdWRp
by9EZWxheU5vZGUuaWRsJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9ET01XaW5kb3dXZWJBdWRp
by5pZGwnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaWRs
JywKLSAgICAgICAgICAgICd3ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmlkbCcsCi0gICAg
ICAgICAgICAnd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5pZGwnLAotICAgICAgICAgICAg
J3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5pZGwnLAotICAgICAgICAgICAgJ3dlYmF1ZGlv
L01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5pZGwnLAotICAgICAgICAgICAgJ3dlYmF1ZGlv
L09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5pZGwnLAotICAgICAgICAgICAgJ3dlYmF1ZGlv
L1JlYWx0aW1lQW5hbHlzZXJOb2RlLmlkbCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vV2F2ZVNo
YXBlck5vZGUuaWRsJywKICAgICAgICAgICAgICd3b3JrZXJzL0Fic3RyYWN0V29ya2VyLmlkbCcs
CiAgICAgICAgICAgICAnd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmlkbCcsCiAgICAg
ICAgICAgICAnd29ya2Vycy9TaGFyZWRXb3JrZXIuaWRsJywKQEAgLTE1MDYsNiArMTUwNiw4MyBA
QAogICAgICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uUmVzdWx0Lmgn
LAogICAgICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlz
dC5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uUmVz
dWx0TGlzdC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9j
ZXNzb3JOb2RlLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2lj
UHJvY2Vzc29yTm9kZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVm
ZmVyLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5oJywK
KyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyQ2FsbGJhY2suaCcsCisg
ICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuY3BwJywK
KyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5oJywK
KyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5jcHAnLAor
ICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmgnLAorICAg
ICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuY3BwJywKKyAg
ICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmgnLAorICAg
ICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcCcsCisgICAgICAgICAg
ICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaCcsCisgICAgICAgICAgICAnTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCcsCisgICAgICAgICAgICAnTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0dhaW4uaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0dhaW5Ob2RlLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0dh
aW5Ob2RlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5j
cHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5oJywKKyAg
ICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAnLAorICAgICAgICAgICAg
J01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Ob2RlSW5wdXQuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvTm9kZUlucHV0LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9O
b2RlT3V0cHV0LmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVP
dXRwdXQuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUu
Y3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oJywK
KyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uY3BwJywKKyAgICAgICAg
ICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uaCcsCisgICAgICAgICAgICAnTW9kdWxl
cy93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93
ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlv
L0FzeW5jQXVkaW9EZWNvZGVyLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9B
c3luY0F1ZGlvRGVjb2Rlci5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0JpcXVh
ZERTUEtlcm5lbC5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkRFNQ
S2VybmVsLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9k
ZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5o
JywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5jcHAnLAor
ICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmgnLAorICAgICAg
ICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAnLAorICAgICAgICAgICAg
J01vZHVsZXMvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVz
L3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAnLAorICAgICAgICAgICAg
J01vZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmgnLAorICAgICAg
ICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuY3BwJywKKyAgICAgICAgICAg
ICdNb2R1bGVzL3dlYmF1ZGlvL0RlbGF5RFNQS2VybmVsLmgnLAorICAgICAgICAgICAgJ01vZHVs
ZXMvd2ViYXVkaW8vRGVsYXlOb2RlLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRp
by9EZWxheU5vZGUuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9EZWxheVByb2Nl
c3Nvci5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3Iu
aCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2Rl
LmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JO
b2RlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9k
ZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9k
ZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUu
Y3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUu
aCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuY3Bw
JywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5oJywK
KyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9k
ZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9T
b3VyY2VOb2RlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlv
Q29tcGxldGlvbkV2ZW50LmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9PZmZs
aW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRp
by9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVz
L3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oJywKKyAgICAgICAgICAgICdN
b2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIuY3BwJywKKyAgICAgICAgICAgICdNb2R1
bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93
ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMv
d2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93
ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93
ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2Vi
YXVkaW8vV2F2ZVNoYXBlck5vZGUuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlv
L1dhdmVTaGFwZXJOb2RlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNo
YXBlclByb2Nlc3Nvci5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNo
YXBlclByb2Nlc3Nvci5oJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3Ry
YWN0RGF0YWJhc2UuY3BwJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL0NoYW5n
ZVZlcnNpb25XcmFwcGVyLmNwcCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9D
aGFuZ2VWZXJzaW9uV3JhcHBlci5oJywKQEAgLTQ4NDUsODMgKzQ5MjIsNiBAQAogICAgICAgICAg
ICAgJ3N0b3JhZ2Uvd2luY2UvRGF0YWJhc2VUaHJlYWRXaW5DRS5oJywKICAgICAgICAgICAgICdz
dG9yYWdlL3dpbmNlL1N0b3JhZ2VUaHJlYWRXaW5DRS5jcHAnLAogICAgICAgICAgICAgJ3N0b3Jh
Z2Uvd2luY2UvU3RvcmFnZVRocmVhZFdpbkNFLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1
ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9C
YXNpY1Byb2Nlc3Nvck5vZGUuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9CdWZmZXIu
Y3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0J1ZmZlci5oJywKLSAgICAgICAgICAg
ICd3ZWJhdWRpby9BdWRpb0J1ZmZlckNhbGxiYWNrLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlv
L0F1ZGlvQnVmZmVyU291cmNlTm9kZS5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlv
QnVmZmVyU291cmNlTm9kZS5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0NoYW5uZWxN
ZXJnZXIuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuaCcs
Ci0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuY3BwJywKLSAgICAg
ICAgICAgICd3ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5oJywKLSAgICAgICAgICAgICd3
ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0Nv
bnRleHQuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3Bw
JywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oJywKLSAgICAg
ICAgICAgICd3ZWJhdWRpby9BdWRpb0dhaW4uaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVk
aW9HYWluTm9kZS5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaCcs
Ci0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5jcHAnLAotICAgICAgICAgICAg
J3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9O
b2RlLmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9Ob2RlLmgnLAotICAgICAgICAg
ICAgJ3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8v
QXVkaW9Ob2RlSW5wdXQuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0
LmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmgnLAotICAgICAg
ICAgICAgJ3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1
ZGlvL0F1ZGlvUGFubmVyTm9kZS5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb1BhcmFt
LmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9QYXJhbS5oJywKLSAgICAgICAgICAg
ICd3ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRp
by9BdWRpb1BhcmFtVGltZWxpbmUuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9Qcm9j
ZXNzaW5nRXZlbnQuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdF
dmVudC5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaCcsCi0gICAg
ICAgICAgICAnd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwJywKLSAgICAgICAgICAgICd3
ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9CaXF1
YWREU1BLZXJuZWwuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwu
aCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5jcHAnLAotICAgICAg
ICAgICAgJ3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaCcsCi0gICAgICAgICAgICAnd2ViYXVk
aW8vQmlxdWFkUHJvY2Vzc29yLmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQmlxdWFkUHJv
Y2Vzc29yLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwJywKLSAg
ICAgICAgICAgICd3ZWJhdWRpby9Db252b2x2ZXJOb2RlLmgnLAotICAgICAgICAgICAgJ3dlYmF1
ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1
ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oJywKLSAgICAgICAgICAgICd3ZWJhdWRp
by9EZWxheURTUEtlcm5lbC5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0RlbGF5RFNQS2Vy
bmVsLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0RlbGF5Tm9kZS5jcHAnLAotICAgICAgICAg
ICAgJ3dlYmF1ZGlvL0RlbGF5Tm9kZS5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9EZWxheVBy
b2Nlc3Nvci5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0RlbGF5UHJvY2Vzc29yLmgnLAot
ICAgICAgICAgICAgJ3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwJywKLSAgICAg
ICAgICAgICd3ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmgnLAotICAgICAgICAgICAg
J3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRp
by9IaWdoUGFzczJGaWx0ZXJOb2RlLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0phdmFTY3Jp
cHRBdWRpb05vZGUuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9O
b2RlLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5jcHAnLAot
ICAgICAgICAgICAgJ3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5oJywKLSAgICAgICAgICAg
ICd3ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwJywKLSAgICAgICAgICAg
ICd3ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCcsCi0gICAgICAgICAgICAn
d2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmNwcCcsCi0gICAgICAgICAgICAn
d2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmgnLAotICAgICAgICAgICAgJ3dl
YmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAnLAotICAgICAgICAgICAgJ3dl
YmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oJywKLSAgICAgICAgICAgICd3ZWJh
dWRpby9SZWFsdGltZUFuYWx5c2VyLmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vUmVhbHRp
bWVBbmFseXNlci5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9k
ZS5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmgnLAot
ICAgICAgICAgICAgJ3dlYmF1ZGlvL1dhdmVTaGFwZXJEU1BLZXJuZWwuY3BwJywKLSAgICAgICAg
ICAgICd3ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmgnLAotICAgICAgICAgICAgJ3dlYmF1
ZGlvL1dhdmVTaGFwZXJOb2RlLmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vV2F2ZVNoYXBl
ck5vZGUuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5jcHAn
LAotICAgICAgICAgICAgJ3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuaCcsCiAgICAgICAg
ICAgICAnd29ya2Vycy9BYnN0cmFjdFdvcmtlci5jcHAnLAogICAgICAgICAgICAgJ3dvcmtlcnMv
QWJzdHJhY3RXb3JrZXIuaCcsCiAgICAgICAgICAgICAnd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJD
b250ZXh0LmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQkocmV2aXNpb24gMTExMjMzKQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAg
SU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJUi9Nb2R1bGVzL2ZpbGVzeXN0ZW0gXAog
ICAgICQkU09VUkNFX0RJUi9Nb2R1bGVzL2dlb2xvY2F0aW9uIFwKICAgICAkJFNPVVJDRV9ESVIv
TW9kdWxlcy9pbmRleGVkZGIgXAorICAgICQkU09VUkNFX0RJUi9Nb2R1bGVzL3dlYmF1ZGlvIFwK
ICAgICAkJFNPVVJDRV9ESVIvTW9kdWxlcy93ZWJkYXRhYmFzZSBcCiAgICAgJCRTT1VSQ0VfRElS
L01vZHVsZXMvd2Vic29ja2V0cyBcCiAgICAgJCRTT1VSQ0VfRElSL2FjY2Vzc2liaWxpdHkgXApA
QCAtODIsNyArODMsNiBAQCBJTkNMVURFUEFUSCArPSBcCiAgICAgJCRTT1VSQ0VfRElSL3N2Zy9n
cmFwaGljcy9maWx0ZXJzIFwKICAgICAkJFNPVVJDRV9ESVIvc3ZnL3Byb3BlcnRpZXMgXAogICAg
ICQkU09VUkNFX0RJUi90ZXN0aW5nIFwKLSAgICAkJFNPVVJDRV9ESVIvd2ViYXVkaW8gXAogICAg
ICQkU09VUkNFX0RJUi93ZWJzb2NrZXRzIFwKICAgICAkJFNPVVJDRV9ESVIvd29ya2VycyBcCiAg
ICAgJCRTT1VSQ0VfRElSL3htbCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcAkocmV2aXNpb24gMTExMjMzKQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHA6MTExMjMz
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiQXN5bmNB
dWRpb0RlY29kZXIuaCIKKworI2luY2x1ZGUgIkF1ZGlvQnVmZmVyLmgiCisjaW5jbHVkZSAiQXVk
aW9CdWZmZXJDYWxsYmFjay5oIgorI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlci5oPgorI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQXN5bmNBdWRpb0Rl
Y29kZXI6OkFzeW5jQXVkaW9EZWNvZGVyKCkKK3sKKyAgICAvLyBTdGFydCB3b3JrZXIgdGhyZWFk
LgorICAgIE11dGV4TG9ja2VyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKKyAgICBtX3Ro
cmVhZElEID0gY3JlYXRlVGhyZWFkKEFzeW5jQXVkaW9EZWNvZGVyOjp0aHJlYWRFbnRyeSwgdGhp
cywgIkF1ZGlvIERlY29kZXIiKTsKK30KKworQXN5bmNBdWRpb0RlY29kZXI6On5Bc3luY0F1ZGlv
RGVjb2RlcigpCit7CisgICAgbV9xdWV1ZS5raWxsKCk7CisgICAgCisgICAgLy8gU3RvcCB0aHJl
YWQuCisgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV90aHJlYWRJRCk7CisgICAgbV90aHJl
YWRJRCA9IDA7Cit9CisKK3ZvaWQgQXN5bmNBdWRpb0RlY29kZXI6OmRlY29kZUFzeW5jKEFycmF5
QnVmZmVyKiBhdWRpb0RhdGEsIGZsb2F0IHNhbXBsZVJhdGUsIFBhc3NSZWZQdHI8QXVkaW9CdWZm
ZXJDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJh
Y2s+IGVycm9yQ2FsbGJhY2spCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBB
U1NFUlQoYXVkaW9EYXRhKTsKKyAgICBpZiAoIWF1ZGlvRGF0YSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgT3duUHRyPERlY29kaW5nVGFzaz4gZGVjb2RpbmdUYXNrID0gRGVjb2RpbmdUYXNrOjpj
cmVhdGUoYXVkaW9EYXRhLCBzYW1wbGVSYXRlLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJh
Y2spOworICAgIG1fcXVldWUuYXBwZW5kKGRlY29kaW5nVGFzay5yZWxlYXNlKCkpOyAvLyBub3Rl
IHRoYXQgb3duZXJzaGlwIG9mIHRoZSB0YXNrIGlzIGVmZmVjdGl2ZWx5IHRha2VuIGJ5IHRoZSBx
dWV1ZS4KK30KKworLy8gQXN5bmNocm9ub3VzbHkgZGVjb2RlIGluIHRoaXMgdGhyZWFkLgordm9p
ZCBBc3luY0F1ZGlvRGVjb2Rlcjo6dGhyZWFkRW50cnkodm9pZCogdGhyZWFkRGF0YSkKK3sKKyAg
ICBBU1NFUlQodGhyZWFkRGF0YSk7CisgICAgQXN5bmNBdWRpb0RlY29kZXIqIGRlY29kZXIgPSBy
ZWludGVycHJldF9jYXN0PEFzeW5jQXVkaW9EZWNvZGVyKj4odGhyZWFkRGF0YSk7CisgICAgZGVj
b2Rlci0+cnVuTG9vcCgpOworfQorCit2b2lkIEFzeW5jQXVkaW9EZWNvZGVyOjpydW5Mb29wKCkK
K3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIHsKKyAgICAgICAgLy8gV2Fp
dCBmb3IgdW50aWwgd2UgaGF2ZSBtX3RocmVhZElEIGVzdGFibGlzaGVkIGJlZm9yZSBzdGFydGlu
ZyB0aGUgcnVuIGxvb3AuCisgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV90aHJlYWRDcmVhdGlv
bk11dGV4KTsKKyAgICB9CisKKyAgICAvLyBLZWVwIHJ1bm5pbmcgZGVjb2RpbmcgdGFza3MgdW50
aWwgd2UncmUga2lsbGVkLgorICAgIHdoaWxlIChPd25QdHI8RGVjb2RpbmdUYXNrPiBkZWNvZGlu
Z1Rhc2sgPSBtX3F1ZXVlLndhaXRGb3JNZXNzYWdlKCkpIHsKKyAgICAgICAgLy8gTGV0IHRoZSB0
YXNrIHRha2UgY2FyZSBvZiBpdHMgb3duIG93bmVyc2hpcC4KKyAgICAgICAgLy8gU2VlIERlY29k
aW5nVGFzazo6bm90aWZ5Q29tcGxldGUoKSBmb3IgY2xlYW51cC4KKyAgICAgICAgZGVjb2RpbmdU
YXNrLmxlYWtQdHIoKS0+ZGVjb2RlKCk7CisgICAgfQorfQorCitQYXNzT3duUHRyPEFzeW5jQXVk
aW9EZWNvZGVyOjpEZWNvZGluZ1Rhc2s+IEFzeW5jQXVkaW9EZWNvZGVyOjpEZWNvZGluZ1Rhc2s6
OmNyZWF0ZShBcnJheUJ1ZmZlciogYXVkaW9EYXRhLCBmbG9hdCBzYW1wbGVSYXRlLCBQYXNzUmVm
UHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxBdWRp
b0J1ZmZlckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQoreworICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgRGVjb2RpbmdUYXNrKGF1ZGlvRGF0YSwgc2FtcGxlUmF0ZSwgc3VjY2Vzc0NhbGxiYWNrLCBl
cnJvckNhbGxiYWNrKSk7Cit9CisKK0FzeW5jQXVkaW9EZWNvZGVyOjpEZWNvZGluZ1Rhc2s6OkRl
Y29kaW5nVGFzayhBcnJheUJ1ZmZlciogYXVkaW9EYXRhLCBmbG9hdCBzYW1wbGVSYXRlLCBQYXNz
UmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxB
dWRpb0J1ZmZlckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQorICAgIDogbV9hdWRpb0RhdGEoYXVk
aW9EYXRhKQorICAgICwgbV9zYW1wbGVSYXRlKHNhbXBsZVJhdGUpCisgICAgLCBtX3N1Y2Nlc3ND
YWxsYmFjayhzdWNjZXNzQ2FsbGJhY2spCisgICAgLCBtX2Vycm9yQ2FsbGJhY2soZXJyb3JDYWxs
YmFjaykKK3sKK30KKwordm9pZCBBc3luY0F1ZGlvRGVjb2Rlcjo6RGVjb2RpbmdUYXNrOjpkZWNv
ZGUoKQoreworICAgIEFTU0VSVChtX2F1ZGlvRGF0YS5nZXQoKSk7CisgICAgaWYgKCFtX2F1ZGlv
RGF0YS5nZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRG8gdGhlIGFjdHVhbCBkZWNv
ZGluZyBhbmQgaW52b2tlIHRoZSBjYWxsYmFjay4KKyAgICBtX2F1ZGlvQnVmZmVyID0gQXVkaW9C
dWZmZXI6OmNyZWF0ZUZyb21BdWRpb0ZpbGVEYXRhKG1fYXVkaW9EYXRhLT5kYXRhKCksIG1fYXVk
aW9EYXRhLT5ieXRlTGVuZ3RoKCksIGZhbHNlLCBzYW1wbGVSYXRlKCkpOworICAgIAorICAgIC8v
IERlY29kaW5nIGlzIGZpbmlzaGVkLCBidXQgd2UgbmVlZCB0byBkbyB0aGUgY2FsbGJhY2tzIG9u
IHRoZSBtYWluIHRocmVhZC4KKyAgICBjYWxsT25NYWluVGhyZWFkKG5vdGlmeUNvbXBsZXRlRGlz
cGF0Y2gsIHRoaXMpOworfQorCit2b2lkIEFzeW5jQXVkaW9EZWNvZGVyOjpEZWNvZGluZ1Rhc2s6
Om5vdGlmeUNvbXBsZXRlRGlzcGF0Y2godm9pZCogdXNlckRhdGEpCit7CisgICAgQXN5bmNBdWRp
b0RlY29kZXI6OkRlY29kaW5nVGFzayogdGFzayA9IHJlaW50ZXJwcmV0X2Nhc3Q8QXN5bmNBdWRp
b0RlY29kZXI6OkRlY29kaW5nVGFzayo+KHVzZXJEYXRhKTsKKyAgICBBU1NFUlQodGFzayk7Cisg
ICAgaWYgKCF0YXNrKQorICAgICAgICByZXR1cm47CisKKyAgICB0YXNrLT5ub3RpZnlDb21wbGV0
ZSgpOworfQorCit2b2lkIEFzeW5jQXVkaW9EZWNvZGVyOjpEZWNvZGluZ1Rhc2s6Om5vdGlmeUNv
bXBsZXRlKCkKK3sKKyAgICBpZiAoYXVkaW9CdWZmZXIoKSAmJiBzdWNjZXNzQ2FsbGJhY2soKSkK
KyAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKCktPmhhbmRsZUV2ZW50KGF1ZGlvQnVmZmVyKCkpOwor
ICAgIGVsc2UgaWYgKGVycm9yQ2FsbGJhY2soKSkKKyAgICAgICAgZXJyb3JDYWxsYmFjaygpLT5o
YW5kbGVFdmVudChhdWRpb0J1ZmZlcigpKTsKKworICAgIC8vIE91ciBvd25lcnNoaXAgd2FzIGdp
dmVuIHVwIGluIEFzeW5jQXVkaW9EZWNvZGVyOjpydW5Mb29wKCkKKyAgICAvLyBNYWtlIHN1cmUg
dG8gY2xlYW4gdXAgaGVyZS4KKyAgICBkZWxldGUgdGhpczsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmgJKHJldmlz
aW9uIDExMTIzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29k
ZXIuaDoxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVk
aW9EZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgQXN5bmNBdWRpb0RlY29kZXJfaAorI2RlZmluZSBBc3luY0F1ZGlvRGVjb2Rlcl9o
CisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9NZXNzYWdlUXVldWUu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb0J1ZmZlcjsKK2NsYXNzIEF1ZGlv
QnVmZmVyQ2FsbGJhY2s7CisKKy8vIEFzeW5jQXVkaW9EZWNvZGVyIGFzeW5jaHJvbm91c2x5IGRl
Y29kZXMgYXVkaW8gZmlsZSBkYXRhIGZyb20gYW4gQXJyYXlCdWZmZXIgaW4gYSB3b3JrZXIgdGhy
ZWFkLgorLy8gVXBvbiBzdWNjZXNzZnVsIGRlY29kaW5nLCBhIGNvbXBsZXRpb24gY2FsbGJhY2sg
d2lsbCBiZSBpbnZva2VkIHdpdGggdGhlIGRlY29kZWQgUENNIGRhdGEgaW4gYW4gQXVkaW9CdWZm
ZXIuCisKK2NsYXNzIEFzeW5jQXVkaW9EZWNvZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShBc3luY0F1ZGlvRGVjb2Rlcik7CitwdWJsaWM6CisgICAgQXN5bmNBdWRpb0RlY29kZXIoKTsK
KyAgICB+QXN5bmNBdWRpb0RlY29kZXIoKTsKKworICAgIC8vIE11c3QgYmUgY2FsbGVkIG9uIHRo
ZSBtYWluIHRocmVhZC4KKyAgICB2b2lkIGRlY29kZUFzeW5jKEFycmF5QnVmZmVyKiBhdWRpb0Rh
dGEsIGZsb2F0IHNhbXBsZVJhdGUsIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gc3Vj
Y2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IGVycm9yQ2FsbGJh
Y2spOworCitwcml2YXRlOgorICAgIGNsYXNzIERlY29kaW5nVGFzayB7CisgICAgICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKERlY29kaW5nVGFzayk7CisgICAgcHVibGljOgorICAgICAgICBzdGF0
aWMgUGFzc093blB0cjxEZWNvZGluZ1Rhc2s+IGNyZWF0ZShBcnJheUJ1ZmZlciogYXVkaW9EYXRh
LCBmbG9hdCBzYW1wbGVSYXRlLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IHN1Y2Nl
c3NDYWxsYmFjaywgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBlcnJvckNhbGxiYWNr
KTsKKworICAgICAgICB2b2lkIGRlY29kZSgpOworICAgICAgICAKKyAgICBwcml2YXRlOgorICAg
ICAgICBEZWNvZGluZ1Rhc2soQXJyYXlCdWZmZXIqIGF1ZGlvRGF0YSwgZmxvYXQgc2FtcGxlUmF0
ZSwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NS
ZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayk7CisKKyAgICAgICAgQXJy
YXlCdWZmZXIqIGF1ZGlvRGF0YSgpIHsgcmV0dXJuIG1fYXVkaW9EYXRhLmdldCgpOyB9CisgICAg
ICAgIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KKyAg
ICAgICAgQXVkaW9CdWZmZXJDYWxsYmFjayogc3VjY2Vzc0NhbGxiYWNrKCkgeyByZXR1cm4gbV9z
dWNjZXNzQ2FsbGJhY2suZ2V0KCk7IH0KKyAgICAgICAgQXVkaW9CdWZmZXJDYWxsYmFjayogZXJy
b3JDYWxsYmFjaygpIHsgcmV0dXJuIG1fZXJyb3JDYWxsYmFjay5nZXQoKTsgfQorICAgICAgICBB
dWRpb0J1ZmZlciogYXVkaW9CdWZmZXIoKSB7IHJldHVybiBtX2F1ZGlvQnVmZmVyLmdldCgpOyB9
CisKKyAgICAgICAgc3RhdGljIHZvaWQgbm90aWZ5Q29tcGxldGVEaXNwYXRjaCh2b2lkKiB1c2Vy
RGF0YSk7CisgICAgICAgIHZvaWQgbm90aWZ5Q29tcGxldGUoKTsKKworICAgICAgICBSZWZQdHI8
QXJyYXlCdWZmZXI+IG1fYXVkaW9EYXRhOworICAgICAgICBmbG9hdCBtX3NhbXBsZVJhdGU7Cisg
ICAgICAgIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBtX3N1Y2Nlc3NDYWxsYmFjazsKKyAg
ICAgICAgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IG1fZXJyb3JDYWxsYmFjazsKKyAgICAg
ICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBtX2F1ZGlvQnVmZmVyOworICAgIH07CisgICAgCisgICAg
c3RhdGljIHZvaWQgdGhyZWFkRW50cnkodm9pZCogdGhyZWFkRGF0YSk7CisgICAgdm9pZCBydW5M
b29wKCk7CisKKyAgICBXVEY6OlRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKKyAgICBNdXRl
eCBtX3RocmVhZENyZWF0aW9uTXV0ZXg7CisgICAgTWVzc2FnZVF1ZXVlPERlY29kaW5nVGFzaz4g
bV9xdWV1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEFzeW5j
QXVkaW9EZWNvZGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9CYXNpY1Byb2Nlc3Nvck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuY3BwCShyZXZpc2lvbiAxMTEy
MzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2Rl
LmNwcDoxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFz
aWNQcm9jZXNzb3JOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisK
KyNpbmNsdWRlICJBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oIgorCisjaW5jbHVkZSAiQXVkaW9C
dXMuaCIKKyNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKKyNpbmNsdWRlICJBdWRpb05vZGVJbnB1
dC5oIgorI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgorI2luY2x1ZGUgIkF1ZGlvUHJvY2Vz
c29yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGU6
OkF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2Ft
cGxlUmF0ZSkKKyAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQoreworICAgIGFk
ZElucHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVJbnB1dCh0aGlzKSkpOworICAgIGFkZE91dHB1
dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMsIDEpKSk7CisKKyAgICAvLyBUaGUg
c3ViY2xhc3MgbXVzdCBjcmVhdGUgbV9wcm9jZXNzb3IuCit9CisKK3ZvaWQgQXVkaW9CYXNpY1By
b2Nlc3Nvck5vZGU6OmluaXRpYWxpemUoKQoreworICAgIGlmIChpc0luaXRpYWxpemVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChwcm9jZXNzb3IoKSk7CisgICAgcHJvY2Vzc29y
KCktPmluaXRpYWxpemUoKTsKKworICAgIEF1ZGlvTm9kZTo6aW5pdGlhbGl6ZSgpOworfQorCit2
b2lkIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlOjp1bmluaXRpYWxpemUoKQoreworICAgIGlmICgh
aXNJbml0aWFsaXplZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocHJvY2Vzc29y
KCkpOworICAgIHByb2Nlc3NvcigpLT51bmluaXRpYWxpemUoKTsKKworICAgIEF1ZGlvTm9kZTo6
dW5pbml0aWFsaXplKCk7Cit9CisKK3ZvaWQgQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGU6OnByb2Nl
c3Moc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICBBdWRpb0J1cyogZGVzdGluYXRpb25C
dXMgPSBvdXRwdXQoMCktPmJ1cygpOworICAgIAorICAgIGlmICghaXNJbml0aWFsaXplZCgpIHx8
ICFwcm9jZXNzb3IoKSkKKyAgICAgICAgZGVzdGluYXRpb25CdXMtPnplcm8oKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgQXVkaW9CdXMqIHNvdXJjZUJ1cyA9IGlucHV0KDApLT5idXMoKTsKKworICAg
ICAgICAvLyBGSVhNRTogaWYgd2UgdGFrZSAidGFpbCB0aW1lIiBpbnRvIGFjY291bnQsIHRoZW4g
d2UgY2FuIGF2b2lkIGNhbGxpbmcgcHJvY2Vzc29yKCktPnByb2Nlc3MoKSBvbmNlIHRoZSB0YWls
IGRpZXMgZG93bi4KKyAgICAgICAgaWYgKCFpbnB1dCgwKS0+aXNDb25uZWN0ZWQoKSkKKyAgICAg
ICAgICAgIHNvdXJjZUJ1cy0+emVybygpOworCisgICAgICAgIHByb2Nlc3NvcigpLT5wcm9jZXNz
KHNvdXJjZUJ1cywgZGVzdGluYXRpb25CdXMsIGZyYW1lc1RvUHJvY2Vzcyk7ICAKKyAgICB9Cit9
CisKKy8vIE5pY2Ugb3B0aW1pemF0aW9uIGluIHRoZSB2ZXJ5IGNvbW1vbiBjYXNlIGFsbG93aW5n
IGZvciAiaW4tcGxhY2UiIHByb2Nlc3NpbmcKK3ZvaWQgQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGU6
OnB1bGxJbnB1dHMoc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICAvLyBSZW5kZXIgaW5w
dXQgc3RyZWFtIC0gc3VnZ2VzdCB0byB0aGUgaW5wdXQgdG8gcmVuZGVyIGRpcmVjdGx5IGludG8g
b3V0cHV0IGJ1cyBmb3IgaW4tcGxhY2UgcHJvY2Vzc2luZyBpbiBwcm9jZXNzKCkgaWYgcG9zc2li
bGUuCisgICAgaW5wdXQoMCktPnB1bGwob3V0cHV0KDApLT5idXMoKSwgZnJhbWVzVG9Qcm9jZXNz
KTsKK30KKwordm9pZCBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZTo6cmVzZXQoKQoreworICAgIGlm
IChwcm9jZXNzb3IoKSkKKyAgICAgICAgcHJvY2Vzc29yKCktPnJlc2V0KCk7Cit9CisKKy8vIEFz
IHNvb24gYXMgd2Uga25vdyB0aGUgY2hhbm5lbCBjb3VudCBvZiBvdXIgaW5wdXQsIHdlIGNhbiBs
YXppbHkgaW5pdGlhbGl6ZS4KKy8vIFNvbWV0aW1lcyB0aGlzIG1heSBiZSBjYWxsZWQgbW9yZSB0
aGFuIG9uY2Ugd2l0aCBkaWZmZXJlbnQgY2hhbm5lbCBjb3VudHMsIGluIHdoaWNoIGNhc2Ugd2Ug
bXVzdCBzYWZlbHkKKy8vIHVuaW5pdGlhbGl6ZSBhbmQgdGhlbiByZS1pbml0aWFsaXplIHdpdGgg
dGhlIG5ldyBjaGFubmVsIGNvdW50Lgordm9pZCBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZTo6Y2hl
Y2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQoQXVkaW9Ob2RlSW5wdXQqIGlucHV0KQoreworICAg
IEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSAmJiBjb250ZXh0KCktPmlzR3JhcGhP
d25lcigpKTsKKyAgICAKKyAgICBBU1NFUlQoaW5wdXQgPT0gdGhpcy0+aW5wdXQoMCkpOworICAg
IGlmIChpbnB1dCAhPSB0aGlzLT5pbnB1dCgwKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNT
RVJUKHByb2Nlc3NvcigpKTsKKyAgICBpZiAoIXByb2Nlc3NvcigpKQorICAgICAgICByZXR1cm47
CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzID0gaW5wdXQtPm51bWJlck9mQ2hhbm5l
bHMoKTsKKyAgICAKKyAgICBpZiAoaXNJbml0aWFsaXplZCgpICYmIG51bWJlck9mQ2hhbm5lbHMg
IT0gb3V0cHV0KDApLT5udW1iZXJPZkNoYW5uZWxzKCkpIHsKKyAgICAgICAgLy8gV2UncmUgYWxy
ZWFkeSBpbml0aWFsaXplZCBidXQgdGhlIGNoYW5uZWwgY291bnQgaGFzIGNoYW5nZWQuCisgICAg
ICAgIHVuaW5pdGlhbGl6ZSgpOworICAgIH0KKyAgICAKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQo
KSkgeworICAgICAgICAvLyBUaGlzIHdpbGwgcHJvcGFnYXRlIHRoZSBjaGFubmVsIGNvdW50IHRv
IGFueSBub2RlcyBjb25uZWN0ZWQgZnVydGhlciBkb3duIHRoZSBjaGFpbi4uLgorICAgICAgICBv
dXRwdXQoMCktPnNldE51bWJlck9mQ2hhbm5lbHMobnVtYmVyT2ZDaGFubmVscyk7CisKKyAgICAg
ICAgLy8gUmUtaW5pdGlhbGl6ZSB0aGUgcHJvY2Vzc29yIHdpdGggdGhlIG5ldyBjaGFubmVsIGNv
dW50LgorICAgICAgICBwcm9jZXNzb3IoKS0+c2V0TnVtYmVyT2ZDaGFubmVscyhudW1iZXJPZkNo
YW5uZWxzKTsKKyAgICAgICAgaW5pdGlhbGl6ZSgpOworICAgIH0KKworICAgIEF1ZGlvTm9kZTo6
Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQoaW5wdXQpOworfQorCit1bnNpZ25lZCBBdWRp
b0Jhc2ljUHJvY2Vzc29yTm9kZTo6bnVtYmVyT2ZDaGFubmVscygpCit7CisgICAgcmV0dXJuIG91
dHB1dCgwKS0+bnVtYmVyT2ZDaGFubmVscygpOworfQorCitkb3VibGUgQXVkaW9CYXNpY1Byb2Nl
c3Nvck5vZGU6OnRhaWxUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcm9jZXNzb3ItPnRh
aWxUaW1lKCk7Cit9CisKK2RvdWJsZSBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZTo6bGF0ZW5jeVRp
bWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3Byb2Nlc3Nvci0+bGF0ZW5jeVRpbWUoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nv
ck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmgJKHJldmlzaW9uIDExMTIzMykJKGZyb20gU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaDoxMTEyMzMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXVkaW9C
YXNpY1Byb2Nlc3Nvck5vZGVfaAorI2RlZmluZSBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZV9oCisK
KyNpbmNsdWRlICJBdWRpb05vZGUuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvQnVzOworY2xhc3MgQXVkaW9Ob2RlSW5w
dXQ7CitjbGFzcyBBdWRpb1Byb2Nlc3NvcjsKKyAgICAKKy8vIEF1ZGlvQmFzaWNQcm9jZXNzb3JO
b2RlIGlzIGFuIEF1ZGlvTm9kZSB3aXRoIG9uZSBpbnB1dCBhbmQgb25lIG91dHB1dCB3aGVyZSB0
aGUgaW5wdXQgYW5kIG91dHB1dCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBjaGFubmVscy4KK2Ns
YXNzIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlIDogcHVibGljIEF1ZGlvTm9kZSB7CitwdWJsaWM6
CisgICAgQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxl
UmF0ZSk7CisKKyAgICAvLyBBdWRpb05vZGUKKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXpl
X3QgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHVsbElucHV0cyhzaXplX3Qg
ZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIHZpcnR1YWwgdm9pZCB1bmluaXRpYWxpemUoKTsKKwor
ICAgIC8vIENhbGxlZCBpbiB0aGUgbWFpbiB0aHJlYWQgd2hlbiB0aGUgbnVtYmVyIG9mIGNoYW5u
ZWxzIGZvciB0aGUgaW5wdXQgbWF5IGhhdmUgY2hhbmdlZC4KKyAgICB2aXJ0dWFsIHZvaWQgY2hl
Y2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQoQXVkaW9Ob2RlSW5wdXQqKTsKKworICAgIC8vIFJl
dHVybnMgdGhlIG51bWJlciBvZiBjaGFubmVscyBmb3IgYm90aCB0aGUgaW5wdXQgYW5kIHRoZSBv
dXRwdXQuCisgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscygpOworCitwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFOworCisgICAgQXVkaW9Qcm9jZXNz
b3IqIHByb2Nlc3NvcigpIHsgcmV0dXJuIG1fcHJvY2Vzc29yLmdldCgpOyB9CisgICAgT3duUHRy
PEF1ZGlvUHJvY2Vzc29yPiBtX3Byb2Nlc3NvcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwCShyZXZpc2lvbiAx
MTEyMzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcDoxMTEy
MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJBdWRpb0J1ZmZlci5oIgorCisjaW5j
bHVkZSAiQXVkaW9CdXMuaCIKKyNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKKyNpbmNsdWRlICJB
dWRpb0ZpbGVSZWFkZXIuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSA8
d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8QXVkaW9C
dWZmZXI+IEF1ZGlvQnVmZmVyOjpjcmVhdGUodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6
ZV90IG51bWJlck9mRnJhbWVzLCBmbG9hdCBzYW1wbGVSYXRlKQoreworICAgIGlmIChzYW1wbGVS
YXRlIDwgMjIwNTAgfHwgc2FtcGxlUmF0ZSA+IDk2MDAwIHx8IG51bWJlck9mQ2hhbm5lbHMgPiBB
dWRpb0NvbnRleHQ6Om1heE51bWJlck9mQ2hhbm5lbHMoKSB8fCAhbnVtYmVyT2ZGcmFtZXMpCisg
ICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVkaW9CdWZm
ZXIobnVtYmVyT2ZDaGFubmVscywgbnVtYmVyT2ZGcmFtZXMsIHNhbXBsZVJhdGUpKTsKK30KKwor
UGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gQXVkaW9CdWZmZXI6OmNyZWF0ZUZyb21BdWRpb0ZpbGVE
YXRhKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSwgYm9vbCBtaXhUb01vbm8sIGZs
b2F0IHNhbXBsZVJhdGUpCit7CisgICAgT3duUHRyPEF1ZGlvQnVzPiBidXMgPSBjcmVhdGVCdXNG
cm9tSW5NZW1vcnlBdWRpb0ZpbGUoZGF0YSwgZGF0YVNpemUsIG1peFRvTW9ubywgc2FtcGxlUmF0
ZSk7CisgICAgaWYgKGJ1cy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBdWRp
b0J1ZmZlcihidXMuZ2V0KCkpKTsKKworICAgIHJldHVybiAwOworfQorCitBdWRpb0J1ZmZlcjo6
QXVkaW9CdWZmZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IG51bWJlck9mRnJh
bWVzLCBmbG9hdCBzYW1wbGVSYXRlKQorICAgIDogbV9nYWluKDEuMCkKKyAgICAsIG1fc2FtcGxl
UmF0ZShzYW1wbGVSYXRlKQorICAgICwgbV9sZW5ndGgobnVtYmVyT2ZGcmFtZXMpCit7CisgICAg
bV9jaGFubmVscy5yZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZDaGFubmVscyk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSB7CisgICAgICAgIFJl
ZlB0cjxGbG9hdDMyQXJyYXk+IGNoYW5uZWxEYXRhQXJyYXkgPSBGbG9hdDMyQXJyYXk6OmNyZWF0
ZShtX2xlbmd0aCk7CisgICAgICAgIG1fY2hhbm5lbHMuYXBwZW5kKGNoYW5uZWxEYXRhQXJyYXkp
OworICAgIH0KK30KKworQXVkaW9CdWZmZXI6OkF1ZGlvQnVmZmVyKEF1ZGlvQnVzKiBidXMpCisg
ICAgOiBtX2dhaW4oMS4wKQorICAgICwgbV9zYW1wbGVSYXRlKGJ1cy0+c2FtcGxlUmF0ZSgpKQor
ICAgICwgbV9sZW5ndGgoYnVzLT5sZW5ndGgoKSkKK3sKKyAgICAvLyBDb3B5IGF1ZGlvIGRhdGEg
ZnJvbSB0aGUgYnVzIHRvIHRoZSBGbG9hdDMyQXJyYXlzIHdlIG1hbmFnZS4KKyAgICB1bnNpZ25l
ZCBudW1iZXJPZkNoYW5uZWxzID0gYnVzLT5udW1iZXJPZkNoYW5uZWxzKCk7CisgICAgbV9jaGFu
bmVscy5yZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZDaGFubmVscyk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgeworICAgICAgICBSZWZQdHI8Rmxv
YXQzMkFycmF5PiBjaGFubmVsRGF0YUFycmF5ID0gRmxvYXQzMkFycmF5OjpjcmVhdGUobV9sZW5n
dGgpOworICAgICAgICBjaGFubmVsRGF0YUFycmF5LT5zZXRSYW5nZShidXMtPmNoYW5uZWwoaSkt
PmRhdGEoKSwgbV9sZW5ndGgsIDApOworICAgICAgICBtX2NoYW5uZWxzLmFwcGVuZChjaGFubmVs
RGF0YUFycmF5KTsKKyAgICB9Cit9CisKK3ZvaWQgQXVkaW9CdWZmZXI6OnJlbGVhc2VNZW1vcnko
KQoreworICAgIG1fY2hhbm5lbHMuY2xlYXIoKTsKK30KKworRmxvYXQzMkFycmF5KiBBdWRpb0J1
ZmZlcjo6Z2V0Q2hhbm5lbERhdGEodW5zaWduZWQgY2hhbm5lbEluZGV4KQoreworICAgIGlmIChj
aGFubmVsSW5kZXggPj0gbV9jaGFubmVscy5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgcmV0dXJuIG1fY2hhbm5lbHNbY2hhbm5lbEluZGV4XS5nZXQoKTsKK30KKwordm9pZCBBdWRp
b0J1ZmZlcjo6emVybygpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2hhbm5l
bHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGdldENoYW5uZWxEYXRhKGkpKQorICAgICAg
ICAgICAgZ2V0Q2hhbm5lbERhdGEoaSktPnplcm9SYW5nZSgwLCBsZW5ndGgoKSk7CisgICAgfQor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElP
KQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIu
aAkocmV2aXNpb24gMTExMjMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1
ZmZlci5oOjExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9C
dWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBdWRpb0J1
ZmZlcl9oCisjZGVmaW5lIEF1ZGlvQnVmZmVyX2gKKworI2luY2x1ZGUgPHd0Zi9GbG9hdDMyQXJy
YXkuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb0J1czsKKyAgICAKK2NsYXNzIEF1
ZGlvQnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8QXVkaW9CdWZmZXI+IHsKK3B1YmxpYzogICAK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gY3JlYXRlKHVuc2lnbmVkIG51bWJl
ck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSk7CisK
KyAgICAvLyBSZXR1cm5zIDAgaWYgZGF0YSBpcyBub3QgYSB2YWxpZCBhdWRpbyBmaWxlLgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBjcmVhdGVGcm9tQXVkaW9GaWxlRGF0YShj
b25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUsIGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBz
YW1wbGVSYXRlKTsKKworICAgIC8vIEZvcm1hdAorICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7
IHJldHVybiBtX2xlbmd0aDsgfQorICAgIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IGxlbmd0aCgpIC8gc2FtcGxlUmF0ZSgpOyB9CisgICAgZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2FtcGxlUmF0ZTsgfQorCisgICAgLy8gQ2hhbm5lbCBkYXRhIGFjY2Vzcwor
ICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMoKSBjb25zdCB7IHJldHVybiBtX2NoYW5uZWxz
LnNpemUoKTsgfQorICAgIEZsb2F0MzJBcnJheSogZ2V0Q2hhbm5lbERhdGEodW5zaWduZWQgY2hh
bm5lbEluZGV4KTsKKyAgICB2b2lkIHplcm8oKTsKKworICAgIC8vIFNjYWxhciBnYWluCisgICAg
ZG91YmxlIGdhaW4oKSBjb25zdCB7IHJldHVybiBtX2dhaW47IH0KKyAgICB2b2lkIHNldEdhaW4o
ZG91YmxlIGdhaW4pIHsgbV9nYWluID0gZ2FpbjsgfQorCisgICAgLy8gQmVjYXVzZSBhbiBBdWRp
b0J1ZmZlciBoYXMgYSBKYXZhU2NyaXB0IHdyYXBwZXIsIHdoaWNoIHdpbGwgYmUgZ2FyYmFnZSBj
b2xsZWN0ZWQsIGl0IG1heSB0YWtlIGF3aGlsZSBmb3IgdGhpcyBvYmplY3QgdG8gYmUgZGVsZXRl
ZC4KKyAgICAvLyByZWxlYXNlTWVtb3J5KCkgY2FuIGJlIGNhbGxlZCB3aGVuIHRoZSBBdWRpb0Nv
bnRleHQgZ29lcyBhd2F5LCBzbyB3ZSBjYW4gcmVsZWFzZSB0aGUgbWVtb3J5IGVhcmxpZXIgdGhh
biB3aGVuIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gaGFwcGVucy4KKyAgICAvLyBDYXJlZnVsISBP
bmx5IGNhbGwgdGhpcyB3aGVuIHRoZSBwYWdlIHVubG9hZHMsIGFmdGVyIHRoZSBBdWRpb0NvbnRl
eHQgaXMgbm8gbG9uZ2VyIHByb2Nlc3NpbmcuCisgICAgdm9pZCByZWxlYXNlTWVtb3J5KCk7Cisg
ICAgCitwcm90ZWN0ZWQ6CisgICAgQXVkaW9CdWZmZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVs
cywgc2l6ZV90IG51bWJlck9mRnJhbWVzLCBmbG9hdCBzYW1wbGVSYXRlKTsKKyAgICBBdWRpb0J1
ZmZlcihBdWRpb0J1cyogYnVzKTsKKworICAgIGRvdWJsZSBtX2dhaW47IC8vIHNjYWxhciBnYWlu
CisgICAgZmxvYXQgbV9zYW1wbGVSYXRlOworICAgIHNpemVfdCBtX2xlbmd0aDsKKworICAgIFZl
Y3RvcjxSZWZQdHI8RmxvYXQzMkFycmF5PiA+IG1fY2hhbm5lbHM7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBBdWRpb0J1ZmZlcl9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmlkbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmlkbAkocmV2aXNpb24gMTEx
MjMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlci5pZGw6MTExMjMz
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBhdWRpbyB7CisgICAgaW50ZXJm
YWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPCisgICAgXSBBdWRpb0J1ZmZlciB7
CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIGxlbmd0aDsgLy8gaW4gc2FtcGxlLWZy
YW1lcworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgZmxvYXQgZHVyYXRpb247IC8vIGluIHNl
Y29uZHMKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0IHNhbXBsZVJhdGU7IC8vIGlu
IHNhbXBsZS1mcmFtZXMgcGVyIHNlY29uZAorCisgICAgICAgIGF0dHJpYnV0ZSBmbG9hdCBnYWlu
OyAvLyBsaW5lYXIgZ2FpbiAoZGVmYXVsdCAxLjApCisKKyAgICAgICAgLy8gQ2hhbm5lbCBhY2Nl
c3MKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZDaGFu
bmVsczsKKyAgICAgICAgRmxvYXQzMkFycmF5IGdldENoYW5uZWxEYXRhKGluIHVuc2lnbmVkIGxv
bmcgY2hhbm5lbEluZGV4KTsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0J1ZmZlckNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlckNhbGxiYWNrLmgJKHJldmlzaW9uIDEx
MTIzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFjay5o
OjExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJD
YWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEF1ZGlvQnVmZmVyQ2FsbGJhY2tfaAorI2RlZmluZSBBdWRpb0J1ZmZlckNhbGxiYWNr
X2gKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvQnVmZmVyOworCitjbGFzcyBB
dWRpb0J1ZmZlckNhbGxiYWNrIDogcHVibGljIFJlZkNvdW50ZWQ8QXVkaW9CdWZmZXJDYWxsYmFj
az4geworcHVibGljOgorICAgIHZpcnR1YWwgfkF1ZGlvQnVmZmVyQ2FsbGJhY2soKSB7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoQXVkaW9CdWZmZXIqKSA9IDA7Cit9OworCit9IC8v
IG5hbWVzcGFjZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKKworI2VuZGlmIC8vIEF1
ZGlvQnVmZmVyQ2FsbGJhY2tfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb0J1ZmZlckNhbGxiYWNrLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyQ2FsbGJhY2suaWRsCShyZXZpc2lvbiAxMTEyMzMp
CShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyQ2FsbGJhY2suaWRsOjEx
MTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxs
YmFjay5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21v
ZHVsZSBhdWRpbyB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FV
RElPLAorICAgICAgICBKU0dlbmVyYXRlVG9KU09iamVjdCwKKyAgICAgICAgQ2FsbGJhY2sKKyAg
ICBdIEF1ZGlvQnVmZmVyQ2FsbGJhY2sgeworICAgICAgICBib29sZWFuIGhhbmRsZUV2ZW50KGlu
IEF1ZGlvQnVmZmVyIGF1ZGlvQnVmZmVyKTsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2Rl
LmNwcAkocmV2aXNpb24gMTExMjMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b0J1ZmZlclNvdXJjZU5vZGUuY3BwOjExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJBdWRpb0J1ZmZlclNvdXJjZU5vZGUuaCIKKworI2lu
Y2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgorI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgorI2lu
Y2x1ZGUgIkF1ZGlvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKKyNpbmNs
dWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NvbnN0IGRvdWJsZSBEZWZhdWx0R3JhaW5EdXJhdGlvbiA9IDAuMDIwOyAvLyAy
MG1zCitjb25zdCBkb3VibGUgVW5rbm93blRpbWUgPSAtMTsKKworLy8gQXJiaXRyYXJ5IHVwcGVy
IGxpbWl0IG9uIHBsYXliYWNrIHJhdGUuCisvLyBIaWdoZXIgdGhhbiBleHBlY3RlZCByYXRlcyBj
YW4gYmUgdXNlZnVsIHdoZW4gcGxheWluZyBiYWNrIG92ZXJzYW1wbGVkIGJ1ZmZlcnMKKy8vIHRv
IG1pbmltaXplIGxpbmVhciBpbnRlcnBvbGF0aW9uIGFsaWFzaW5nLgorY29uc3QgZG91YmxlIE1h
eFJhdGUgPSAxMDI0OworCitQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4gQXVkaW9C
dWZmZXJTb3VyY2VOb2RlOjpjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1w
bGVSYXRlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVkaW9CdWZmZXJTb3VyY2VOb2Rl
KGNvbnRleHQsIHNhbXBsZVJhdGUpKTsKK30KKworQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpBdWRp
b0J1ZmZlclNvdXJjZU5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRl
KQorICAgIDogQXVkaW9Tb3VyY2VOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCisgICAgLCBtX2J1
ZmZlcigwKQorICAgICwgbV9pc1BsYXlpbmcoZmFsc2UpCisgICAgLCBtX2lzTG9vcGluZyhmYWxz
ZSkKKyAgICAsIG1faGFzRmluaXNoZWQoZmFsc2UpCisgICAgLCBtX3N0YXJ0VGltZSgwLjApCisg
ICAgLCBtX2VuZFRpbWUoVW5rbm93blRpbWUpCisgICAgLCBtX3ZpcnR1YWxSZWFkSW5kZXgoMCkK
KyAgICAsIG1faXNHcmFpbihmYWxzZSkKKyAgICAsIG1fZ3JhaW5PZmZzZXQoMC4wKQorICAgICwg
bV9ncmFpbkR1cmF0aW9uKERlZmF1bHRHcmFpbkR1cmF0aW9uKQorICAgICwgbV9sYXN0R2Fpbigx
LjApCisgICAgLCBtX3Bhbm5lck5vZGUoMCkKK3sKKyAgICBzZXROb2RlVHlwZShOb2RlVHlwZUF1
ZGlvQnVmZmVyU291cmNlKTsKKworICAgIG1fZ2FpbiA9IEF1ZGlvR2Fpbjo6Y3JlYXRlKCJnYWlu
IiwgMS4wLCAwLjAsIDEuMCk7CisgICAgbV9wbGF5YmFja1JhdGUgPSBBdWRpb1BhcmFtOjpjcmVh
dGUoInBsYXliYWNrUmF0ZSIsIDEuMCwgMC4wLCBNYXhSYXRlKTsKKyAgICAKKyAgICBtX2dhaW4t
PnNldENvbnRleHQoY29udGV4dCk7CisgICAgbV9wbGF5YmFja1JhdGUtPnNldENvbnRleHQoY29u
dGV4dCk7CisKKyAgICAvLyBEZWZhdWx0IHRvIG1vbm8uICBBIGNhbGwgdG8gc2V0QnVmZmVyKCkg
d2lsbCBzZXQgdGhlIG51bWJlciBvZiBvdXRwdXQgY2hhbm5lbHMgdG8gdGhhdCBvZiB0aGUgYnVm
ZmVyLgorICAgIGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMsIDEp
KSk7CisKKyAgICBpbml0aWFsaXplKCk7Cit9CisKK0F1ZGlvQnVmZmVyU291cmNlTm9kZTo6fkF1
ZGlvQnVmZmVyU291cmNlTm9kZSgpCit7CisgICAgdW5pbml0aWFsaXplKCk7Cit9CisKK3ZvaWQg
QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7
CisgICAgQXVkaW9CdXMqIG91dHB1dEJ1cyA9IG91dHB1dCgwKS0+YnVzKCk7CisKKyAgICBpZiAo
IWlzSW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIFRoZSBhdWRpbyB0aHJlYWQgY2FuJ3QgYmxvY2sgb24g
dGhpcyBsb2NrLCBzbyB3ZSBjYWxsIHRyeUxvY2soKSBpbnN0ZWFkLgorICAgIC8vIENhcmVmdWwg
LSB0aGlzIGlzIGEgdHJ5TG9jaygpIGFuZCBub3QgYW4gYXV0b2xvY2tlciwgc28gd2UgbXVzdCB1
bmxvY2soKSBiZWZvcmUgZXZlcnkgcmV0dXJuLgorICAgIGlmIChtX3Byb2Nlc3NMb2NrLnRyeUxv
Y2soKSkgeworICAgICAgICAvLyBDaGVjayBpZiBpdCdzIHRpbWUgdG8gc3RhcnQgcGxheWluZy4K
KyAgICAgICAgZG91YmxlIHNhbXBsZVJhdGUgPSB0aGlzLT5zYW1wbGVSYXRlKCk7CisgICAgICAg
IHNpemVfdCBxdWFudHVtU3RhcnRGcmFtZSA9IGNvbnRleHQoKS0+Y3VycmVudFNhbXBsZUZyYW1l
KCk7CisgICAgICAgIHNpemVfdCBxdWFudHVtRW5kRnJhbWUgPSBxdWFudHVtU3RhcnRGcmFtZSAr
IGZyYW1lc1RvUHJvY2VzczsKKyAgICAgICAgc2l6ZV90IHN0YXJ0RnJhbWUgPSBBdWRpb1V0aWxp
dGllczo6dGltZVRvU2FtcGxlRnJhbWUobV9zdGFydFRpbWUsIHNhbXBsZVJhdGUpOworICAgICAg
ICBzaXplX3QgZW5kRnJhbWUgPSBtX2VuZFRpbWUgPT0gVW5rbm93blRpbWUgPyAwIDogQXVkaW9V
dGlsaXRpZXM6OnRpbWVUb1NhbXBsZUZyYW1lKG1fZW5kVGltZSwgc2FtcGxlUmF0ZSk7CisKKyAg
ICAgICAgLy8gSWYgd2Uga25vdyB0aGUgZW5kIHRpbWUgYW5kIGl0J3MgYWxyZWFkeSBwYXNzZWQs
IHRoZW4gZG9uJ3QgYm90aGVyIGRvaW5nIGFueSBtb3JlIHJlbmRlcmluZyB0aGlzIGN5Y2xlLgor
ICAgICAgICBpZiAobV9lbmRUaW1lICE9IFVua25vd25UaW1lICYmIGVuZEZyYW1lIDw9IHF1YW50
dW1TdGFydEZyYW1lKSB7CisgICAgICAgICAgICBtX2lzUGxheWluZyA9IGZhbHNlOworICAgICAg
ICAgICAgbV92aXJ0dWFsUmVhZEluZGV4ID0gMDsKKyAgICAgICAgICAgIGZpbmlzaCgpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW1faXNQbGF5aW5nIHx8IG1faGFzRmluaXNo
ZWQgfHwgIWJ1ZmZlcigpIHx8IHN0YXJ0RnJhbWUgPj0gcXVhbnR1bUVuZEZyYW1lKSB7CisgICAg
ICAgICAgICAvLyBGSVhNRTogY2FuIG9wdGltaXplIGhlcmUgYnkgcHJvcGFnYXRpbmcgc2lsZW50
IGhpbnQgaW5zdGVhZCBvZiBmb3JjaW5nIHRoZSB3aG9sZSBjaGFpbiB0byBwcm9jZXNzIHNpbGVu
Y2UuCisgICAgICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKKyAgICAgICAgICAgIG1fcHJvY2Vz
c0xvY2sudW5sb2NrKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBzaXplX3QgcXVhbnR1bUZyYW1lT2Zmc2V0ID0gc3RhcnRGcmFtZSA+IHF1YW50dW1TdGFydEZy
YW1lID8gc3RhcnRGcmFtZSAtIHF1YW50dW1TdGFydEZyYW1lIDogMDsKKyAgICAgICAgcXVhbnR1
bUZyYW1lT2Zmc2V0ID0gbWluKHF1YW50dW1GcmFtZU9mZnNldCwgZnJhbWVzVG9Qcm9jZXNzKTsg
Ly8gY2xhbXAgdG8gdmFsaWQgcmFuZ2UKKyAgICAgICAgc2l6ZV90IGJ1ZmZlckZyYW1lc1RvUHJv
Y2VzcyA9IGZyYW1lc1RvUHJvY2VzcyAtIHF1YW50dW1GcmFtZU9mZnNldDsKKworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3V0cHV0QnVzLT5udW1iZXJPZkNoYW5uZWxzKCk7ICsr
aSkgCisgICAgICAgICAgICBtX2Rlc3RpbmF0aW9uQ2hhbm5lbHNbaV0gPSBvdXRwdXRCdXMtPmNo
YW5uZWwoaSktPm11dGFibGVEYXRhKCk7CisKKyAgICAgICAgLy8gUmVuZGVyIGJ5IHJlYWRpbmcg
ZGlyZWN0bHkgZnJvbSB0aGUgYnVmZmVyLgorICAgICAgICByZW5kZXJGcm9tQnVmZmVyKG91dHB1
dEJ1cywgcXVhbnR1bUZyYW1lT2Zmc2V0LCBidWZmZXJGcmFtZXNUb1Byb2Nlc3MpOworCisgICAg
ICAgIC8vIEFwcGx5IHRoZSBnYWluIChpbi1wbGFjZSkgdG8gdGhlIG91dHB1dCBidXMuCisgICAg
ICAgIGZsb2F0IHRvdGFsR2FpbiA9IGdhaW4oKS0+dmFsdWUoKSAqIG1fYnVmZmVyLT5nYWluKCk7
CisgICAgICAgIG91dHB1dEJ1cy0+Y29weVdpdGhHYWluRnJvbSgqb3V0cHV0QnVzLCAmbV9sYXN0
R2FpbiwgdG90YWxHYWluKTsKKworICAgICAgICAvLyBJZiB0aGUgZW5kIHRpbWUgaXMgc29tZXdo
ZXJlIGluIHRoZSBtaWRkbGUgb2YgdGhpcyB0aW1lIHF1YW50dW0sIHRoZW4gc2ltcGx5IHplcm8g
b3V0IHRoZQorICAgICAgICAvLyBmcmFtZXMgc3RhcnRpbmcgYXQgdGhlIGVuZCB0aW1lLgorICAg
ICAgICBpZiAobV9lbmRUaW1lICE9IFVua25vd25UaW1lICYmIGVuZEZyYW1lID49IHF1YW50dW1T
dGFydEZyYW1lICYmIGVuZEZyYW1lIDwgcXVhbnR1bUVuZEZyYW1lKSB7CisgICAgICAgICAgICBz
aXplX3QgemVyb1N0YXJ0RnJhbWUgPSBlbmRGcmFtZSAtIHF1YW50dW1TdGFydEZyYW1lOworICAg
ICAgICAgICAgc2l6ZV90IGZyYW1lc1RvWmVybyA9IGZyYW1lc1RvUHJvY2VzcyAtIHplcm9TdGFy
dEZyYW1lOworCisgICAgICAgICAgICBib29sIGlzU2FmZSA9IHplcm9TdGFydEZyYW1lIDwgZnJh
bWVzVG9Qcm9jZXNzICYmIGZyYW1lc1RvWmVybyA8PSBmcmFtZXNUb1Byb2Nlc3MgJiYgemVyb1N0
YXJ0RnJhbWUgKyBmcmFtZXNUb1plcm8gPD0gZnJhbWVzVG9Qcm9jZXNzOworICAgICAgICAgICAg
QVNTRVJUKGlzU2FmZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpc1NhZmUpIHsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3V0cHV0QnVzLT5udW1i
ZXJPZkNoYW5uZWxzKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgbWVtc2V0KG1fZGVzdGlu
YXRpb25DaGFubmVsc1tpXSArIHplcm9TdGFydEZyYW1lLCAwLCBzaXplb2YoZmxvYXQpICogZnJh
bWVzVG9aZXJvKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9pc1BsYXlpbmcgPSBm
YWxzZTsKKyAgICAgICAgICAgIG1fdmlydHVhbFJlYWRJbmRleCA9IDA7CisgICAgICAgICAgICBm
aW5pc2goKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fcHJvY2Vzc0xvY2sudW5sb2NrKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVG9vIGJhZCAtIHRoZSB0cnlMb2NrKCkgZmFpbGVkLiAg
V2UgbXVzdCBiZSBpbiB0aGUgbWlkZGxlIG9mIGNoYW5naW5nIGJ1ZmZlcnMgYW5kIHdlcmUgYWxy
ZWFkeSBvdXRwdXR0aW5nIHNpbGVuY2UgYW55d2F5LgorICAgICAgICBvdXRwdXRCdXMtPnplcm8o
KTsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdHJ1ZSBpZiB3ZSdyZSBmaW5pc2hlZC4KK2Jvb2wg
QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpyZW5kZXJTaWxlbmNlQW5kRmluaXNoSWZOb3RMb29waW5n
KEF1ZGlvQnVzKiwgdW5zaWduZWQgaW5kZXgsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7Cisg
ICAgaWYgKCFsb29wKCkpIHsKKyAgICAgICAgLy8gSWYgd2UncmUgbm90IGxvb3BpbmcsIHRoZW4g
c3RvcCBwbGF5aW5nIHdoZW4gd2UgZ2V0IHRvIHRoZSBlbmQuCisgICAgICAgIG1faXNQbGF5aW5n
ID0gZmFsc2U7CisKKyAgICAgICAgaWYgKGZyYW1lc1RvUHJvY2VzcyA+IDApIHsKKyAgICAgICAg
ICAgIC8vIFdlJ3JlIG5vdCBsb29waW5nIGFuZCB3ZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhl
IHNhbXBsZSBkYXRhLCBidXQgd2Ugc3RpbGwgbmVlZCB0byBwcm92aWRlIG1vcmUgb3V0cHV0LAor
ICAgICAgICAgICAgLy8gc28gZ2VuZXJhdGUgc2lsZW5jZSBmb3IgdGhlIHJlbWFpbmluZy4KKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzKCk7ICsr
aSkgCisgICAgICAgICAgICAgICAgbWVtc2V0KG1fZGVzdGluYXRpb25DaGFubmVsc1tpXSArIGlu
ZGV4LCAwLCBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZpbmlzaCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6cmVuZGVyRnJvbUJ1ZmZl
cihBdWRpb0J1cyogYnVzLCB1bnNpZ25lZCBkZXN0aW5hdGlvbkZyYW1lT2Zmc2V0LCBzaXplX3Qg
bnVtYmVyT2ZGcmFtZXMpCit7CisgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgp
KTsKKyAgICAKKyAgICAvLyBCYXNpYyBzYW5pdHkgY2hlY2tpbmcKKyAgICBBU1NFUlQoYnVzKTsK
KyAgICBBU1NFUlQoYnVmZmVyKCkpOworICAgIGlmICghYnVzIHx8ICFidWZmZXIoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscyA9IHRoaXMtPm51bWJl
ck9mQ2hhbm5lbHMoKTsKKyAgICB1bnNpZ25lZCBidXNOdW1iZXJPZkNoYW5uZWxzID0gYnVzLT5u
dW1iZXJPZkNoYW5uZWxzKCk7CisKKyAgICBib29sIGNoYW5uZWxDb3VudEdvb2QgPSBudW1iZXJP
ZkNoYW5uZWxzICYmIG51bWJlck9mQ2hhbm5lbHMgPT0gYnVzTnVtYmVyT2ZDaGFubmVsczsKKyAg
ICBBU1NFUlQoY2hhbm5lbENvdW50R29vZCk7CisgICAgaWYgKCFjaGFubmVsQ291bnRHb29kKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBTYW5pdHkgY2hlY2sgZGVzdGluYXRpb25GcmFtZU9m
ZnNldCwgbnVtYmVyT2ZGcmFtZXMuCisgICAgc2l6ZV90IGRlc3RpbmF0aW9uTGVuZ3RoID0gYnVz
LT5sZW5ndGgoKTsKKworICAgIGJvb2wgaXNMZW5ndGhHb29kID0gZGVzdGluYXRpb25MZW5ndGgg
PD0gNDA5NiAmJiBudW1iZXJPZkZyYW1lcyA8PSA0MDk2OworICAgIEFTU0VSVChpc0xlbmd0aEdv
b2QpOworICAgIGlmICghaXNMZW5ndGhHb29kKQorICAgICAgICByZXR1cm47CisKKyAgICBib29s
IGlzT2Zmc2V0R29vZCA9IGRlc3RpbmF0aW9uRnJhbWVPZmZzZXQgPD0gZGVzdGluYXRpb25MZW5n
dGggJiYgZGVzdGluYXRpb25GcmFtZU9mZnNldCArIG51bWJlck9mRnJhbWVzIDw9IGRlc3RpbmF0
aW9uTGVuZ3RoOworICAgIEFTU0VSVChpc09mZnNldEdvb2QpOworICAgIGlmICghaXNPZmZzZXRH
b29kKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBQb3RlbnRpYWxseSB6ZXJvIG91dCBpbml0
aWFsIGZyYW1lcyBsZWFkaW5nIHVwIHRvIHRoZSBvZmZzZXQuCisgICAgaWYgKGRlc3RpbmF0aW9u
RnJhbWVPZmZzZXQpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9m
Q2hhbm5lbHM7ICsraSkgCisgICAgICAgICAgICBtZW1zZXQobV9kZXN0aW5hdGlvbkNoYW5uZWxz
W2ldLCAwLCBzaXplb2YoZmxvYXQpICogZGVzdGluYXRpb25GcmFtZU9mZnNldCk7CisgICAgfQor
CisgICAgLy8gT2Zmc2V0IHRoZSBwb2ludGVycyB0byB0aGUgY29ycmVjdCBvZmZzZXQgZnJhbWUu
CisgICAgdW5zaWduZWQgd3JpdGVJbmRleCA9IGRlc3RpbmF0aW9uRnJhbWVPZmZzZXQ7CisKKyAg
ICBzaXplX3QgYnVmZmVyTGVuZ3RoID0gYnVmZmVyKCktPmxlbmd0aCgpOworICAgIGRvdWJsZSBi
dWZmZXJTYW1wbGVSYXRlID0gYnVmZmVyKCktPnNhbXBsZVJhdGUoKTsKKworICAgIC8vIENhbGN1
bGF0ZSB0aGUgc3RhcnQgYW5kIGVuZCBmcmFtZXMgaW4gb3VyIGJ1ZmZlciB0aGF0IHdlIHdhbnQg
dG8gcGxheS4KKyAgICAvLyBJZiBtX2lzR3JhaW4gaXMgdHJ1ZSwgdGhlbiB3ZSB3aWxsIGJlIHBs
YXlpbmcgYSBwb3J0aW9uIG9mIHRoZSB0b3RhbCBidWZmZXIuCisgICAgdW5zaWduZWQgc3RhcnRG
cmFtZSA9IG1faXNHcmFpbiA/IEF1ZGlvVXRpbGl0aWVzOjp0aW1lVG9TYW1wbGVGcmFtZShtX2dy
YWluT2Zmc2V0LCBidWZmZXJTYW1wbGVSYXRlKSA6IDA7CisKKyAgICAvLyBBdm9pZCBjb252ZXJ0
aW5nIGZyb20gdGltZSB0byBzYW1wbGUtZnJhbWVzIHR3aWNlIGJ5IGNvbXB1dGluZworICAgIC8v
IHRoZSBncmFpbiBlbmQgdGltZSBmaXJzdCBiZWZvcmUgY29tcHV0aW5nIHRoZSBzYW1wbGUgZnJh
bWUuCisgICAgdW5zaWduZWQgZW5kRnJhbWUgPSBtX2lzR3JhaW4gPyBBdWRpb1V0aWxpdGllczo6
dGltZVRvU2FtcGxlRnJhbWUobV9ncmFpbk9mZnNldCArIG1fZ3JhaW5EdXJhdGlvbiwgYnVmZmVy
U2FtcGxlUmF0ZSkgOiBidWZmZXJMZW5ndGg7CisgICAgCisgICAgQVNTRVJUKGVuZEZyYW1lID49
IHN0YXJ0RnJhbWUpOworICAgIGlmIChlbmRGcmFtZSA8IHN0YXJ0RnJhbWUpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICB1bnNpZ25lZCBkZWx0YUZyYW1lcyA9IGVuZEZyYW1lIC0gc3RhcnRG
cmFtZTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIGEgSEFDSyB0byBhbGxvdyBmb3IgSFJURiB0YWls
LXRpbWUgLSBhdm9pZHMgZ2xpdGNoIGF0IGVuZC4KKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRh
aWxUaW1lIGZvciBlYWNoIEF1ZGlvTm9kZSBmb3IgYSBtb3JlIGdlbmVyYWwgc29sdXRpb24gdG8g
dGhpcyBwcm9ibGVtLgorICAgIGlmIChtX2lzR3JhaW4pCisgICAgICAgIGVuZEZyYW1lICs9IDUx
MjsKKworICAgIC8vIERvIHNvbWUgc2FuaXR5IGNoZWNraW5nLgorICAgIGlmIChzdGFydEZyYW1l
ID49IGJ1ZmZlckxlbmd0aCkKKyAgICAgICAgc3RhcnRGcmFtZSA9ICFidWZmZXJMZW5ndGggPyAw
IDogYnVmZmVyTGVuZ3RoIC0gMTsKKyAgICBpZiAoZW5kRnJhbWUgPiBidWZmZXJMZW5ndGgpCisg
ICAgICAgIGVuZEZyYW1lID0gYnVmZmVyTGVuZ3RoOworICAgIGlmIChtX3ZpcnR1YWxSZWFkSW5k
ZXggPj0gZW5kRnJhbWUpCisgICAgICAgIG1fdmlydHVhbFJlYWRJbmRleCA9IHN0YXJ0RnJhbWU7
IC8vIHJlc2V0IHRvIHN0YXJ0CisKKyAgICBkb3VibGUgcGl0Y2hSYXRlID0gdG90YWxQaXRjaFJh
dGUoKTsKKworICAgIC8vIEdldCBsb2NhbCBjb3B5LgorICAgIGRvdWJsZSB2aXJ0dWFsUmVhZElu
ZGV4ID0gbV92aXJ0dWFsUmVhZEluZGV4OworCisgICAgLy8gUmVuZGVyIGxvb3AgLSByZWFkaW5n
IGZyb20gdGhlIHNvdXJjZSBidWZmZXIgdG8gdGhlIGRlc3RpbmF0aW9uIHVzaW5nIGxpbmVhciBp
bnRlcnBvbGF0aW9uLgorICAgIGludCBmcmFtZXNUb1Byb2Nlc3MgPSBudW1iZXJPZkZyYW1lczsK
KworICAgIGNvbnN0IGZsb2F0Kiogc291cmNlQ2hhbm5lbHMgPSBtX3NvdXJjZUNoYW5uZWxzLmdl
dCgpOworICAgIGZsb2F0KiogZGVzdGluYXRpb25DaGFubmVscyA9IG1fZGVzdGluYXRpb25DaGFu
bmVscy5nZXQoKTsKKworICAgIC8vIE9wdGltaXplIGZvciB0aGUgdmVyeSBjb21tb24gY2FzZSBv
ZiBwbGF5aW5nIGJhY2sgd2l0aCBwaXRjaFJhdGUgPT0gMS4KKyAgICAvLyBXZSBjYW4gYXZvaWQg
dGhlIGxpbmVhciBpbnRlcnBvbGF0aW9uLgorICAgIGlmIChwaXRjaFJhdGUgPT0gMSAmJiB2aXJ0
dWFsUmVhZEluZGV4ID09IGZsb29yKHZpcnR1YWxSZWFkSW5kZXgpKSB7CisgICAgICAgIHVuc2ln
bmVkIHJlYWRJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2aXJ0dWFsUmVhZEluZGV4KTsK
KyAgICAgICAgd2hpbGUgKGZyYW1lc1RvUHJvY2VzcyA+IDApIHsKKyAgICAgICAgICAgIGludCBm
cmFtZXNUb0VuZCA9IGVuZEZyYW1lIC0gcmVhZEluZGV4OworICAgICAgICAgICAgaW50IGZyYW1l
c1RoaXNUaW1lID0gbWluKGZyYW1lc1RvUHJvY2VzcywgZnJhbWVzVG9FbmQpOworICAgICAgICAg
ICAgZnJhbWVzVGhpc1RpbWUgPSBtYXgoMCwgZnJhbWVzVGhpc1RpbWUpOworCisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSAKKyAgICAg
ICAgICAgICAgICBtZW1jcHkoZGVzdGluYXRpb25DaGFubmVsc1tpXSArIHdyaXRlSW5kZXgsIHNv
dXJjZUNoYW5uZWxzW2ldICsgcmVhZEluZGV4LCBzaXplb2YoZmxvYXQpICogZnJhbWVzVGhpc1Rp
bWUpOworCisgICAgICAgICAgICB3cml0ZUluZGV4ICs9IGZyYW1lc1RoaXNUaW1lOworICAgICAg
ICAgICAgcmVhZEluZGV4ICs9IGZyYW1lc1RoaXNUaW1lOworICAgICAgICAgICAgZnJhbWVzVG9Q
cm9jZXNzIC09IGZyYW1lc1RoaXNUaW1lOworCisgICAgICAgICAgICAvLyBXcmFwLWFyb3VuZC4K
KyAgICAgICAgICAgIGlmIChyZWFkSW5kZXggPj0gZW5kRnJhbWUpIHsKKyAgICAgICAgICAgICAg
ICByZWFkSW5kZXggLT0gZGVsdGFGcmFtZXM7CisgICAgICAgICAgICAgICAgaWYgKHJlbmRlclNp
bGVuY2VBbmRGaW5pc2hJZk5vdExvb3BpbmcoYnVzLCB3cml0ZUluZGV4LCBmcmFtZXNUb1Byb2Nl
c3MpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICB2aXJ0dWFsUmVhZEluZGV4ID0gcmVhZEluZGV4OworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHdoaWxlIChmcmFtZXNUb1Byb2Nlc3MtLSkgeworICAgICAgICAgICAgdW5zaWduZWQg
cmVhZEluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZpcnR1YWxSZWFkSW5kZXgpOworICAg
ICAgICAgICAgZG91YmxlIGludGVycG9sYXRpb25GYWN0b3IgPSB2aXJ0dWFsUmVhZEluZGV4IC0g
cmVhZEluZGV4OworCisgICAgICAgICAgICAvLyBGb3IgbGluZWFyIGludGVycG9sYXRpb24gd2Ug
bmVlZCB0aGUgbmV4dCBzYW1wbGUtZnJhbWUgdG9vLgorICAgICAgICAgICAgdW5zaWduZWQgcmVh
ZEluZGV4MiA9IHJlYWRJbmRleCArIDE7CisgICAgICAgICAgICBpZiAocmVhZEluZGV4MiA+PSBl
bmRGcmFtZSkgeworICAgICAgICAgICAgICAgIGlmIChsb29wKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gTWFrZSBzdXJlIHRvIHdyYXAgYXJvdW5kIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZl
ci4KKyAgICAgICAgICAgICAgICAgICAgcmVhZEluZGV4MiAtPSBkZWx0YUZyYW1lczsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmVhZEluZGV4MiA9IHJlYWRJ
bmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRmluYWwgc2FuaXR5IGNoZWNr
IG9uIGJ1ZmZlciBhY2Nlc3MuCisgICAgICAgICAgICAvLyBGSVhNRTogYXMgYW4gb3B0aW1pemF0
aW9uLCB0cnkgdG8gZ2V0IHJpZCBvZiB0aGlzIGlubmVyLWxvb3AgY2hlY2sgYW5kIHB1dCBhc3Nl
cnRpb25zIGFuZCBndWFyZHMgYmVmb3JlIHRoZSBsb29wLgorICAgICAgICAgICAgaWYgKHJlYWRJ
bmRleCA+PSBidWZmZXJMZW5ndGggfHwgcmVhZEluZGV4MiA+PSBidWZmZXJMZW5ndGgpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vIExpbmVhciBpbnRlcnBvbGF0aW9u
LgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7
ICsraSkgeworICAgICAgICAgICAgICAgIGZsb2F0KiBkZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9u
Q2hhbm5lbHNbaV07CisgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIHNvdXJjZSA9IHNvdXJj
ZUNoYW5uZWxzW2ldOworCisgICAgICAgICAgICAgICAgZG91YmxlIHNhbXBsZTEgPSBzb3VyY2Vb
cmVhZEluZGV4XTsKKyAgICAgICAgICAgICAgICBkb3VibGUgc2FtcGxlMiA9IHNvdXJjZVtyZWFk
SW5kZXgyXTsKKyAgICAgICAgICAgICAgICBkb3VibGUgc2FtcGxlID0gKDEuMCAtIGludGVycG9s
YXRpb25GYWN0b3IpICogc2FtcGxlMSArIGludGVycG9sYXRpb25GYWN0b3IgKiBzYW1wbGUyOwor
CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bd3JpdGVJbmRleF0gPSBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KHNhbXBsZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3cml0ZUluZGV4
Kys7CisKKyAgICAgICAgICAgIHZpcnR1YWxSZWFkSW5kZXggKz0gcGl0Y2hSYXRlOworCisgICAg
ICAgICAgICAvLyBXcmFwLWFyb3VuZCwgcmV0YWluaW5nIHN1Yi1zYW1wbGUgcG9zaXRpb24gc2lu
Y2UgdmlydHVhbFJlYWRJbmRleCBpcyBmbG9hdGluZy1wb2ludC4KKyAgICAgICAgICAgIGlmICh2
aXJ0dWFsUmVhZEluZGV4ID49IGVuZEZyYW1lKSB7CisgICAgICAgICAgICAgICAgdmlydHVhbFJl
YWRJbmRleCAtPSBkZWx0YUZyYW1lczsKKworICAgICAgICAgICAgICAgIGlmIChyZW5kZXJTaWxl
bmNlQW5kRmluaXNoSWZOb3RMb29waW5nKGJ1cywgd3JpdGVJbmRleCwgZnJhbWVzVG9Qcm9jZXNz
KSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9IAorICAgIG1fdmlydHVhbFJlYWRJbmRleCA9IHZpcnR1YWxSZWFkSW5kZXg7Cit9CisK
Kwordm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnJlc2V0KCkKK3sKKyAgICBtX3ZpcnR1YWxS
ZWFkSW5kZXggPSAwOworICAgIG1fbGFzdEdhaW4gPSBnYWluKCktPnZhbHVlKCk7Cit9CisKK3Zv
aWQgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpmaW5pc2goKQoreworICAgIGlmICghbV9oYXNGaW5p
c2hlZCkgeworICAgICAgICAvLyBMZXQgdGhlIGNvbnRleHQgZGVyZWZlcmVuY2UgdGhpcyBBdWRp
b05vZGUuCisgICAgICAgIGNvbnRleHQoKS0+bm90aWZ5Tm9kZUZpbmlzaGVkUHJvY2Vzc2luZyh0
aGlzKTsKKyAgICAgICAgbV9oYXNGaW5pc2hlZCA9IHRydWU7CisgICAgfQorfQorCitib29sIEF1
ZGlvQnVmZmVyU291cmNlTm9kZTo6c2V0QnVmZmVyKEF1ZGlvQnVmZmVyKiBidWZmZXIpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAKKyAgICAvLyBUaGUgY29udGV4dCBtdXN0
IGJlIGxvY2tlZCBzaW5jZSBjaGFuZ2luZyB0aGUgYnVmZmVyIGNhbiByZS1jb25maWd1cmUgdGhl
IG51bWJlciBvZiBjaGFubmVscyB0aGF0IGFyZSBvdXRwdXQuCisgICAgQXVkaW9Db250ZXh0OjpB
dXRvTG9ja2VyIGNvbnRleHRMb2NrZXIoY29udGV4dCgpKTsKKyAgICAKKyAgICAvLyBUaGlzIHN5
bmNocm9uaXplcyB3aXRoIHByb2Nlc3MoKS4KKyAgICBNdXRleExvY2tlciBwcm9jZXNzTG9ja2Vy
KG1fcHJvY2Vzc0xvY2spOworICAgIAorICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAgLy8gRG8g
YW55IG5lY2Vzc3NhcnkgcmUtY29uZmlndXJhdGlvbiB0byB0aGUgYnVmZmVyJ3MgbnVtYmVyIG9m
IGNoYW5uZWxzLgorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzID0gYnVmZmVyLT5u
dW1iZXJPZkNoYW5uZWxzKCk7CisKKyAgICAgICAgaWYgKG51bWJlck9mQ2hhbm5lbHMgPiBBdWRp
b0NvbnRleHQ6Om1heE51bWJlck9mQ2hhbm5lbHMoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICBvdXRwdXQoMCktPnNldE51bWJlck9mQ2hhbm5lbHMobnVtYmVyT2ZDaGFu
bmVscyk7CisKKyAgICAgICAgbV9zb3VyY2VDaGFubmVscyA9IGFkb3B0QXJyYXlQdHIobmV3IGNv
bnN0IGZsb2F0KiBbbnVtYmVyT2ZDaGFubmVsc10pOworICAgICAgICBtX2Rlc3RpbmF0aW9uQ2hh
bm5lbHMgPSBhZG9wdEFycmF5UHRyKG5ldyBmbG9hdCogW251bWJlck9mQ2hhbm5lbHNdKTsKKwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSAK
KyAgICAgICAgICAgIG1fc291cmNlQ2hhbm5lbHNbaV0gPSBidWZmZXItPmdldENoYW5uZWxEYXRh
KGkpLT5kYXRhKCk7CisgICAgfQorCisgICAgbV92aXJ0dWFsUmVhZEluZGV4ID0gMDsKKyAgICBt
X2J1ZmZlciA9IGJ1ZmZlcjsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordW5zaWduZWQg
QXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpudW1iZXJPZkNoYW5uZWxzKCkKK3sKKyAgICByZXR1cm4g
b3V0cHV0KDApLT5udW1iZXJPZkNoYW5uZWxzKCk7Cit9CisKK3ZvaWQgQXVkaW9CdWZmZXJTb3Vy
Y2VOb2RlOjpub3RlT24oZG91YmxlIHdoZW4pCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICBpZiAobV9pc1BsYXlpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNHcmFp
biA9IGZhbHNlOworICAgIG1fc3RhcnRUaW1lID0gd2hlbjsKKyAgICBtX3ZpcnR1YWxSZWFkSW5k
ZXggPSAwOworICAgIG1faXNQbGF5aW5nID0gdHJ1ZTsKK30KKwordm9pZCBBdWRpb0J1ZmZlclNv
dXJjZU5vZGU6Om5vdGVHcmFpbk9uKGRvdWJsZSB3aGVuLCBkb3VibGUgZ3JhaW5PZmZzZXQsIGRv
dWJsZSBncmFpbkR1cmF0aW9uKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAg
aWYgKG1faXNQbGF5aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWJ1ZmZlcigpKQor
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIC8vIERvIHNhbml0eSBjaGVja2luZyBvZiBn
cmFpbiBwYXJhbWV0ZXJzIHZlcnN1cyBidWZmZXIgc2l6ZS4KKyAgICBkb3VibGUgYnVmZmVyRHVy
YXRpb24gPSBidWZmZXIoKS0+ZHVyYXRpb24oKTsKKworICAgIGlmIChncmFpbkR1cmF0aW9uID4g
YnVmZmVyRHVyYXRpb24pCisgICAgICAgIHJldHVybjsgLy8gRklYTUU6IG1heWJlIHNob3VsZCB0
aHJvdyBleGNlcHRpb24gLSBjb25zaWRlciBpbiBzcGVjaWZpY2F0aW9uLgorICAgIAorICAgIGRv
dWJsZSBtYXhHcmFpbk9mZnNldCA9IGJ1ZmZlckR1cmF0aW9uIC0gZ3JhaW5EdXJhdGlvbjsKKyAg
ICBtYXhHcmFpbk9mZnNldCA9IG1heCgwLjAsIG1heEdyYWluT2Zmc2V0KTsKKworICAgIGdyYWlu
T2Zmc2V0ID0gbWF4KDAuMCwgZ3JhaW5PZmZzZXQpOworICAgIGdyYWluT2Zmc2V0ID0gbWluKG1h
eEdyYWluT2Zmc2V0LCBncmFpbk9mZnNldCk7CisgICAgbV9ncmFpbk9mZnNldCA9IGdyYWluT2Zm
c2V0OworCisgICAgbV9ncmFpbkR1cmF0aW9uID0gZ3JhaW5EdXJhdGlvbjsKKyAgICAKKyAgICBt
X2lzR3JhaW4gPSB0cnVlOworICAgIG1fc3RhcnRUaW1lID0gd2hlbjsKKworICAgIC8vIFdlIGNh
bGwgdGltZVRvU2FtcGxlRnJhbWUgaGVyZSBzaW5jZSBhdCBwbGF5YmFja1JhdGUgPT0gMSB3ZSBk
b24ndCB3YW50IHRvIGdvIHRocm91Z2ggbGluZWFyIGludGVycG9sYXRpb24KKyAgICAvLyBhdCBh
IHN1Yi1zYW1wbGUgcG9zaXRpb24gc2luY2UgaXQgd2lsbCBkZWdyYWRlIHRoZSBxdWFsaXR5Lgor
ICAgIC8vIFdoZW4gYWxpZ25lZCB0byB0aGUgc2FtcGxlLWZyYW1lIHRoZSBwbGF5YmFjayB3aWxs
IGJlIGlkZW50aWNhbCB0byB0aGUgUENNIGRhdGEgc3RvcmVkIGluIHRoZSBidWZmZXIuCisgICAg
Ly8gU2luY2UgcGxheWJhY2tSYXRlID09IDEgaXMgdmVyeSBjb21tb24sIGl0J3Mgd29ydGggY29u
c2lkZXJpbmcgcXVhbGl0eS4KKyAgICBtX3ZpcnR1YWxSZWFkSW5kZXggPSBBdWRpb1V0aWxpdGll
czo6dGltZVRvU2FtcGxlRnJhbWUobV9ncmFpbk9mZnNldCwgYnVmZmVyKCktPnNhbXBsZVJhdGUo
KSk7CisgICAgCisgICAgbV9pc1BsYXlpbmcgPSB0cnVlOworfQorCit2b2lkIEF1ZGlvQnVmZmVy
U291cmNlTm9kZTo6bm90ZU9mZihkb3VibGUgd2hlbikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgIGlmICghbV9pc1BsYXlpbmcpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICB3aGVuID0gbWF4KDAuMCwgd2hlbik7CisgICAgbV9lbmRUaW1lID0gd2hlbjsKK30KKworZG91
YmxlIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6dG90YWxQaXRjaFJhdGUoKQoreworICAgIGRvdWJs
ZSBkb3BwbGVyUmF0ZSA9IDEuMDsKKyAgICBpZiAobV9wYW5uZXJOb2RlLmdldCgpKQorICAgICAg
ICBkb3BwbGVyUmF0ZSA9IG1fcGFubmVyTm9kZS0+ZG9wcGxlclJhdGUoKTsKKyAgICAKKyAgICAv
LyBJbmNvcnBvcmF0ZSBidWZmZXIncyBzYW1wbGUtcmF0ZSB2ZXJzdXMgQXVkaW9Db250ZXh0J3Mg
c2FtcGxlLXJhdGUuCisgICAgLy8gTm9ybWFsbHkgaXQncyBub3QgYW4gaXNzdWUgYmVjYXVzZSBi
dWZmZXJzIGFyZSBsb2FkZWQgYXQgdGhlIEF1ZGlvQ29udGV4dCdzIHNhbXBsZS1yYXRlLCBidXQg
d2UgY2FuIGhhbmRsZSBpdCBpbiBhbnkgY2FzZS4KKyAgICBkb3VibGUgc2FtcGxlUmF0ZUZhY3Rv
ciA9IDEuMDsKKyAgICBpZiAoYnVmZmVyKCkpCisgICAgICAgIHNhbXBsZVJhdGVGYWN0b3IgPSBi
dWZmZXIoKS0+c2FtcGxlUmF0ZSgpIC8gc2FtcGxlUmF0ZSgpOworICAgIAorICAgIGRvdWJsZSBi
YXNlUGl0Y2hSYXRlID0gcGxheWJhY2tSYXRlKCktPnZhbHVlKCk7CisKKyAgICBkb3VibGUgdG90
YWxSYXRlID0gZG9wcGxlclJhdGUgKiBzYW1wbGVSYXRlRmFjdG9yICogYmFzZVBpdGNoUmF0ZTsK
KworICAgIC8vIFNhbml0eSBjaGVjayB0aGUgdG90YWwgcmF0ZS4gIEl0J3MgdmVyeSBpbXBvcnRh
bnQgdGhhdCB0aGUgcmVzYW1wbGVyIG5vdCBnZXQgYW55IGJhZCByYXRlIHZhbHVlcy4KKyAgICB0
b3RhbFJhdGUgPSBtYXgoMC4wLCB0b3RhbFJhdGUpOworICAgIGlmICghdG90YWxSYXRlKQorICAg
ICAgICB0b3RhbFJhdGUgPSAxOyAvLyB6ZXJvIHJhdGUgaXMgY29uc2lkZXJlZCBpbGxlZ2FsCisg
ICAgdG90YWxSYXRlID0gbWluKE1heFJhdGUsIHRvdGFsUmF0ZSk7CisgICAgCisgICAgYm9vbCBp
c1RvdGFsUmF0ZVZhbGlkID0gIWlzbmFuKHRvdGFsUmF0ZSkgJiYgIWlzaW5mKHRvdGFsUmF0ZSk7
CisgICAgQVNTRVJUKGlzVG90YWxSYXRlVmFsaWQpOworICAgIGlmICghaXNUb3RhbFJhdGVWYWxp
ZCkKKyAgICAgICAgdG90YWxSYXRlID0gMS4wOworCisgICAgcmV0dXJuIHRvdGFsUmF0ZTsKK30K
KworYm9vbCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6Omxvb3BpbmcoKQoreworICAgIHN0YXRpYyBi
b29sIGZpcnN0VGltZSA9IHRydWU7CisgICAgaWYgKGZpcnN0VGltZSAmJiBjb250ZXh0KCkgJiYg
Y29udGV4dCgpLT5kb2N1bWVudCgpKSB7CisgICAgICAgIGNvbnRleHQoKS0+ZG9jdW1lbnQoKS0+
YWRkQ29uc29sZU1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgV2Fybmlu
Z01lc3NhZ2VMZXZlbCwgIkF1ZGlvQnVmZmVyU291cmNlTm9kZSAnbG9vcGluZycgYXR0cmlidXRl
IGlzIGRlcHJlY2F0ZWQuICBVc2UgJ2xvb3AnIGluc3RlYWQuIik7CisgICAgICAgIGZpcnN0VGlt
ZSA9IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBtX2lzTG9vcGluZzsKK30KKwordm9pZCBB
dWRpb0J1ZmZlclNvdXJjZU5vZGU6OnNldExvb3BpbmcoYm9vbCBsb29waW5nKQoreworICAgIHN0
YXRpYyBib29sIGZpcnN0VGltZSA9IHRydWU7CisgICAgaWYgKGZpcnN0VGltZSAmJiBjb250ZXh0
KCkgJiYgY29udGV4dCgpLT5kb2N1bWVudCgpKSB7CisgICAgICAgIGNvbnRleHQoKS0+ZG9jdW1l
bnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwg
V2FybmluZ01lc3NhZ2VMZXZlbCwgIkF1ZGlvQnVmZmVyU291cmNlTm9kZSAnbG9vcGluZycgYXR0
cmlidXRlIGlzIGRlcHJlY2F0ZWQuICBVc2UgJ2xvb3AnIGluc3RlYWQuIik7CisgICAgICAgIGZp
cnN0VGltZSA9IGZhbHNlOworICAgIH0KKworICAgIG1faXNMb29waW5nID0gbG9vcGluZzsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VO
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0J1ZmZlclNvdXJjZU5vZGUuaAkocmV2aXNpb24gMTExMjMzKQkoZnJvbSBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaDoxMTEyMzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBdWRpb0J1ZmZlclNv
dXJjZU5vZGVfaAorI2RlZmluZSBBdWRpb0J1ZmZlclNvdXJjZU5vZGVfaAorCisjaW5jbHVkZSAi
QXVkaW9CdWZmZXIuaCIKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgorI2luY2x1ZGUgIkF1ZGlvR2Fp
bi5oIgorI2luY2x1ZGUgIkF1ZGlvUGFubmVyTm9kZS5oIgorI2luY2x1ZGUgIkF1ZGlvU291cmNl
Tm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb0NvbnRleHQ7CisKKy8v
IEF1ZGlvQnVmZmVyU291cmNlTm9kZSBpcyBhbiBBdWRpb05vZGUgcmVwcmVzZW50aW5nIGFuIGF1
ZGlvIHNvdXJjZSBmcm9tIGFuIGluLW1lbW9yeSBhdWRpbyBhc3NldCByZXByZXNlbnRlZCBieSBh
biBBdWRpb0J1ZmZlci4KKy8vIEl0IGdlbmVyYWxseSB3aWxsIGJlIHVzZWQgZm9yIHNob3J0IHNv
dW5kcyB3aGljaCByZXF1aXJlIGEgaGlnaCBkZWdyZWUgb2Ygc2NoZWR1bGluZyBmbGV4aWJpbGl0
eSAoY2FuIHBsYXliYWNrIGluIHJoeXRobWljYWxseSBwZXJmZWN0IHdheXMpLgorCitjbGFzcyBB
dWRpb0J1ZmZlclNvdXJjZU5vZGUgOiBwdWJsaWMgQXVkaW9Tb3VyY2VOb2RlIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlclNvdXJjZU5vZGU+IGNyZWF0ZShBdWRp
b0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKKworICAgIHZpcnR1YWwgfkF1ZGlvQnVmZmVy
U291cmNlTm9kZSgpOworICAgIAorICAgIC8vIEF1ZGlvTm9kZQorICAgIHZpcnR1YWwgdm9pZCBw
cm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOworICAgIHZpcnR1YWwgdm9pZCByZXNldCgp
OworICAgIAorICAgIC8vIHNldEJ1ZmZlcigpIGlzIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQu
ICBUaGlzIGlzIHRoZSBidWZmZXIgd2UgdXNlIGZvciBwbGF5YmFjay4KKyAgICAvLyByZXR1cm5z
IHRydWUgb24gc3VjY2Vzcy4KKyAgICBib29sIHNldEJ1ZmZlcihBdWRpb0J1ZmZlciopOworICAg
IEF1ZGlvQnVmZmVyKiBidWZmZXIoKSB7IHJldHVybiBtX2J1ZmZlci5nZXQoKTsgfQorICAgICAg
ICAgICAgICAgICAgICAKKyAgICAvLyBudW1iZXJPZkNoYW5uZWxzKCkgcmV0dXJucyB0aGUgbnVt
YmVyIG9mIG91dHB1dCBjaGFubmVscy4gIFRoaXMgdmFsdWUgZXF1YWxzIHRoZSBudW1iZXIgb2Yg
Y2hhbm5lbHMgZnJvbSB0aGUgYnVmZmVyLgorICAgIC8vIElmIGEgbmV3IGJ1ZmZlciBpcyBzZXQg
d2l0aCBhIGRpZmZlcmVudCBudW1iZXIgb2YgY2hhbm5lbHMsIHRoZW4gdGhpcyB2YWx1ZSB3aWxs
IGR5bmFtaWNhbGx5IGNoYW5nZS4KKyAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKCk7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgIC8vIFBsYXktc3RhdGUKKyAgICAvLyBub3RlT24oKSwg
bm90ZUdyYWluT24oKSwgYW5kIG5vdGVPZmYoKSBtdXN0IGFsbCBiZSBjYWxsZWQgZnJvbSB0aGUg
bWFpbiB0aHJlYWQuCisgICAgdm9pZCBub3RlT24oZG91YmxlIHdoZW4pOworICAgIHZvaWQgbm90
ZUdyYWluT24oZG91YmxlIHdoZW4sIGRvdWJsZSBncmFpbk9mZnNldCwgZG91YmxlIGdyYWluRHVy
YXRpb24pOworICAgIHZvaWQgbm90ZU9mZihkb3VibGUgd2hlbik7CisKKyAgICAvLyBOb3RlOiB0
aGUgYXR0cmlidXRlIHdhcyBvcmlnaW5hbGx5IGV4cG9zZWQgYXMgLmxvb3BpbmcsIGJ1dCB0byBi
ZSBtb3JlIGNvbnNpc3RlbnQgaW4gbmFtaW5nIHdpdGggPGF1ZGlvPgorICAgIC8vIGFuZCB3aXRo
IGhvdyBpdCdzIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWNhdGlvbiwgdGhlIHByb3BlciBhdHRy
aWJ1dGUgbmFtZSBpcyAubG9vcAorICAgIC8vIFRoZSBvbGQgYXR0cmlidXRlIGlzIGtlcHQgZm9y
IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorICAgIGJvb2wgbG9vcCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNMb29waW5nOyB9CisgICAgdm9pZCBzZXRMb29wKGJvb2wgbG9vcGluZykgeyBtX2lzTG9v
cGluZyA9IGxvb3Bpbmc7IH0KKworICAgIC8vIERlcHJlY2F0ZWQuCisgICAgYm9vbCBsb29waW5n
KCk7CisgICAgdm9pZCBzZXRMb29waW5nKGJvb2wpOworICAgIAorICAgIEF1ZGlvR2FpbiogZ2Fp
bigpIHsgcmV0dXJuIG1fZ2Fpbi5nZXQoKTsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKKyAgICBBdWRpb1BhcmFtKiBwbGF5YmFja1JhdGUoKSB7IHJldHVybiBtX3Bs
YXliYWNrUmF0ZS5nZXQoKTsgfQorCisgICAgLy8gSWYgYSBwYW5uZXIgbm9kZSBpcyBzZXQsIHRo
ZW4gd2UgY2FuIGluY29ycG9yYXRlIGRvcHBsZXIgc2hpZnQgaW50byB0aGUgcGxheWJhY2sgcGl0
Y2ggcmF0ZS4KKyAgICB2b2lkIHNldFBhbm5lck5vZGUoUGFzc1JlZlB0cjxBdWRpb1Bhbm5lck5v
ZGU+IHBhbm5lck5vZGUpIHsgbV9wYW5uZXJOb2RlID0gcGFubmVyTm9kZTsgfQorCitwcml2YXRl
OgorICAgIEF1ZGlvQnVmZmVyU291cmNlTm9kZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVS
YXRlKTsKKworICAgIHZvaWQgcmVuZGVyRnJvbUJ1ZmZlcihBdWRpb0J1cyosIHVuc2lnbmVkIGRl
c3RpbmF0aW9uRnJhbWVPZmZzZXQsIHNpemVfdCBudW1iZXJPZkZyYW1lcyk7CisKKyAgICAvLyBS
ZW5kZXIgc2lsZW5jZSBzdGFydGluZyBmcm9tICJpbmRleCIgZnJhbWUgaW4gQXVkaW9CdXMuCisg
ICAgaW5saW5lIGJvb2wgcmVuZGVyU2lsZW5jZUFuZEZpbmlzaElmTm90TG9vcGluZyhBdWRpb0J1
cyosIHVuc2lnbmVkIGluZGV4LCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKworICAgIC8vIG1f
YnVmZmVyIGhvbGRzIHRoZSBzYW1wbGUgZGF0YSB3aGljaCB0aGlzIG5vZGUgb3V0cHV0cy4KKyAg
ICBSZWZQdHI8QXVkaW9CdWZmZXI+IG1fYnVmZmVyOworCisgICAgLy8gUG9pbnRlcnMgZm9yIHRo
ZSBidWZmZXIgYW5kIGRlc3RpbmF0aW9uLgorICAgIE93bkFycmF5UHRyPGNvbnN0IGZsb2F0Kj4g
bV9zb3VyY2VDaGFubmVsczsKKyAgICBPd25BcnJheVB0cjxmbG9hdCo+IG1fZGVzdGluYXRpb25D
aGFubmVsczsKKworICAgIC8vIFVzZWQgZm9yIHRoZSAiZ2FpbiIgYW5kICJwbGF5YmFja1JhdGUi
IGF0dHJpYnV0ZXMuCisgICAgUmVmUHRyPEF1ZGlvR2Fpbj4gbV9nYWluOworICAgIFJlZlB0cjxB
dWRpb1BhcmFtPiBtX3BsYXliYWNrUmF0ZTsKKworICAgIC8vIG1faXNQbGF5aW5nIGlzIHNldCB0
byB0cnVlIHdoZW4gbm90ZU9uKCkgb3Igbm90ZUdyYWluT24oKSBpcyBjYWxsZWQuCisgICAgYm9v
bCBtX2lzUGxheWluZzsKKworICAgIC8vIElmIG1faXNMb29waW5nIGlzIGZhbHNlLCB0aGVuIHRo
aXMgbm9kZSB3aWxsIGJlIGRvbmUgcGxheWluZyBhbmQgYmVjb21lIGluYWN0aXZlIGFmdGVyIGl0
IHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUgc2FtcGxlIGRhdGEgaW4gdGhlIGJ1ZmZlci4KKyAgICAv
LyBJZiB0cnVlLCBpdCB3aWxsIHdyYXAgYXJvdW5kIHRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVy
IGVhY2ggdGltZSBpdCByZWFjaGVzIHRoZSBlbmQuCisgICAgYm9vbCBtX2lzTG9vcGluZzsKKwor
ICAgIC8vIFRoaXMgbm9kZSBpcyBjb25zaWRlcmVkIGZpbmlzaGVkIHdoZW4gaXQgcmVhY2hlcyB0
aGUgZW5kIG9mIHRoZSBidWZmZXIncyBzYW1wbGUgZGF0YSBhZnRlciBub3RlT24oKSBoYXMgYmVl
biBjYWxsZWQuCisgICAgLy8gVGhpcyB3aWxsIG9ubHkgYmUgc2V0IHRvIHRydWUgaWYgbV9pc0xv
b3BpbmcgPT0gZmFsc2UuCisgICAgYm9vbCBtX2hhc0ZpbmlzaGVkOworCisgICAgLy8gbV9zdGFy
dFRpbWUgaXMgdGhlIHRpbWUgdG8gc3RhcnQgcGxheWluZyBiYXNlZCBvbiB0aGUgY29udGV4dCdz
IHRpbWVsaW5lICgwLjAgb3IgYSB0aW1lIGxlc3MgdGhhbiB0aGUgY29udGV4dCdzIGN1cnJlbnQg
dGltZSBtZWFucyAibm93IikuCisgICAgZG91YmxlIG1fc3RhcnRUaW1lOyAvLyBpbiBzZWNvbmRz
CisKKyAgICAvLyBtX2VuZFRpbWUgaXMgdGhlIHRpbWUgdG8gc3RvcCBwbGF5aW5nIGJhc2VkIG9u
IHRoZSBjb250ZXh0J3MgdGltZWxpbmUgKDAuMCBvciBhIHRpbWUgbGVzcyB0aGFuIHRoZSBjb250
ZXh0J3MgY3VycmVudCB0aW1lIG1lYW5zICJub3ciKS4KKyAgICAvLyBJZiBpdCBoYXNuJ3QgYmVl
biBzZXQgZXhwbGljaXRseSwgdGhlbiB0aGUgc291bmQgd2lsbCBub3Qgc3RvcCBwbGF5aW5nIChp
ZiBsb29waW5nKSBvciB3aWxsIHN0b3Agd2hlbiB0aGUgZW5kIG9mIHRoZSBBdWRpb0J1ZmZlcgor
ICAgIC8vIGhhcyBiZWVuIHJlYWNoZWQuCisgICAgZG91YmxlIG1fZW5kVGltZTsgLy8gaW4gc2Vj
b25kcworICAgIAorICAgIC8vIG1fdmlydHVhbFJlYWRJbmRleCBpcyBhIHNhbXBsZS1mcmFtZSBp
bmRleCBpbnRvIG91ciBidWZmZXIgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHBsYXliYWNrIHBv
c2l0aW9uLgorICAgIC8vIFNpbmNlIGl0J3MgZmxvYXRpbmctcG9pbnQsIGl0IGhhcyBzdWItc2Ft
cGxlIGFjY3VyYWN5LgorICAgIGRvdWJsZSBtX3ZpcnR1YWxSZWFkSW5kZXg7CisKKyAgICAvLyBH
cmFudWxhciBwbGF5YmFjaworICAgIGJvb2wgbV9pc0dyYWluOworICAgIGRvdWJsZSBtX2dyYWlu
T2Zmc2V0OyAvLyBpbiBzZWNvbmRzCisgICAgZG91YmxlIG1fZ3JhaW5EdXJhdGlvbjsgLy8gaW4g
c2Vjb25kcworCisgICAgLy8gdG90YWxQaXRjaFJhdGUoKSByZXR1cm5zIHRoZSBpbnN0YW50YW5l
b3VzIHBpdGNoIHJhdGUgKG5vbi10aW1lIHByZXNlcnZpbmcpLgorICAgIC8vIEl0IGluY29ycG9y
YXRlcyB0aGUgYmFzZSBwaXRjaCByYXRlLCBhbnkgc2FtcGxlLXJhdGUgY29udmVyc2lvbiBmYWN0
b3IgZnJvbSB0aGUgYnVmZmVyLCBhbmQgYW55IGRvcHBsZXIgc2hpZnQgZnJvbSBhbiBhc3NvY2lh
dGVkIHBhbm5lciBub2RlLgorICAgIGRvdWJsZSB0b3RhbFBpdGNoUmF0ZSgpOworCisgICAgLy8g
bV9sYXN0R2FpbiBwcm92aWRlcyBjb250aW51aXR5IHdoZW4gd2UgZHluYW1pY2FsbHkgYWRqdXN0
IHRoZSBnYWluLgorICAgIGZsb2F0IG1fbGFzdEdhaW47CisgICAgCisgICAgLy8gV2Ugb3B0aW9u
YWxseSBrZWVwIHRyYWNrIG9mIGEgcGFubmVyIG5vZGUgd2hpY2ggaGFzIGEgZG9wcGxlciBzaGlm
dCB0aGF0IGlzIGluY29ycG9yYXRlZCBpbnRvIHRoZSBwaXRjaCByYXRlLgorICAgIFJlZlB0cjxB
dWRpb1Bhbm5lck5vZGU+IG1fcGFubmVyTm9kZTsKKworICAgIC8vIFRoaXMgc3luY2hyb25pemVz
IHByb2Nlc3MoKSB3aXRoIHNldEJ1ZmZlcigpIHdoaWNoIGNhbiBjYXVzZSBkeW5hbWljIGNoYW5u
ZWwgY291bnQgY2hhbmdlcy4KKyAgICBtdXRhYmxlIE11dGV4IG1fcHJvY2Vzc0xvY2s7CisKKyAg
ICAvLyBIYW5kbGVzIHRoZSB0aW1lIHdoZW4gd2UgcmVhY2ggdGhlIGVuZCBvZiBzYW1wbGUgZGF0
YSAobm9uLWxvb3BpbmcpIG9yIHRoZSBub3RlT2ZmKCkgdGltZSBoYXMgYmVlbiByZWFjaGVkLgor
ICAgIHZvaWQgZmluaXNoKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBBdWRpb0J1ZmZlclNvdXJjZU5vZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlkbAkocmV2
aXNpb24gMTExMjMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNv
dXJjZU5vZGUuaWRsOjExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9CdWZmZXJTb3VyY2VOb2RlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworbW9kdWxlIGF1ZGlvIHsKKyAgICAvLyBBIGNhY2hlZCAobm9uLXN0cmVh
bWVkKSwgbWVtb3J5LXJlc2lkZW50IGF1ZGlvIHNvdXJjZQorICAgIGludGVyZmFjZSBbCisgICAg
ICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKKyAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QK
KyAgICBdIEF1ZGlvQnVmZmVyU291cmNlTm9kZSA6IEF1ZGlvU291cmNlTm9kZSB7CisgICAgICAg
IGF0dHJpYnV0ZSBbQ3VzdG9tU2V0dGVyXSBBdWRpb0J1ZmZlciBidWZmZXIKKyAgICAgICAgICAg
IHNldHRlciByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIEF1ZGlvR2FpbiBnYWluOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9QYXJh
bSBwbGF5YmFja1JhdGU7CisKKyAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gbG9vcDsgLy8gVGhp
cyBpcyB0aGUgcHJvcGVyIGF0dHJpYnV0ZSBuYW1lIGZyb20gdGhlIHNwZWNpZmljYXRpb24uCisg
ICAgICAgIGF0dHJpYnV0ZSBib29sZWFuIGxvb3Bpbmc7IC8vIFRoaXMgaXMgYW4gYWxpYXMgZm9y
IHRoZSAubG9vcCBhdHRyaWJ1dGUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorCisgICAg
ICAgIHZvaWQgbm90ZU9uKGluIGRvdWJsZSB3aGVuKTsKKyAgICAgICAgdm9pZCBub3RlR3JhaW5P
bihpbiBkb3VibGUgd2hlbiwgaW4gZG91YmxlIGdyYWluT2Zmc2V0LCBpbiBkb3VibGUgZ3JhaW5E
dXJhdGlvbik7CisgICAgICAgIHZvaWQgbm90ZU9mZihpbiBkb3VibGUgd2hlbik7CisgICAgfTsK
K30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVy
Z2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQ2hhbm5lbE1lcmdlci5jcHAJKHJldmlzaW9uIDExMTIzMykJKGZyb20gU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmNwcDoxMTEyMzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
V0VCX0FVRElPKQorCisjaW5jbHVkZSAiQXVkaW9DaGFubmVsTWVyZ2VyLmgiCisKKyNpbmNsdWRl
ICJBdWRpb0NvbnRleHQuaCIKKyNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgorI2luY2x1ZGUg
IkF1ZGlvTm9kZU91dHB1dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisvLyBUaGlz
IGlzIGNvbnNpZGVyaW5nIHRoYXQgNS4xICg2IGNoYW5uZWxzKSBpcyB0aGUgbGFyZ2VzdCB3ZSds
bCBldmVyIGRlYWwgd2l0aC4KKy8vIEl0IGNhbiBlYXNpbHkgYmUgaW5jcmVhc2VkIHRvIHN1cHBv
cnQgbW9yZSBpZiB0aGUgd2ViIGF1ZGlvIHNwZWNpZmljYXRpb24gaXMgdXBkYXRlZC4KK2NvbnN0
IHVuc2lnbmVkIE51bWJlck9mSW5wdXRzID0gNjsKKworQXVkaW9DaGFubmVsTWVyZ2VyOjpBdWRp
b0NoYW5uZWxNZXJnZXIoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQor
ICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCit7CisgICAgLy8gQ3JlYXRlIGEg
Zml4ZWQgbnVtYmVyIG9mIGlucHV0cyAoYWJsZSB0byBoYW5kbGUgdGhlIG1heGltdW0gbnVtYmVy
IG9mIGNoYW5uZWxzIHdlIGRlYWwgd2l0aCkuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IE51bWJlck9mSW5wdXRzOyArK2kpCisgICAgICAgIGFkZElucHV0KGFkb3B0UHRyKG5ldyBBdWRp
b05vZGVJbnB1dCh0aGlzKSkpOworCisgICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05v
ZGVPdXRwdXQodGhpcywgMSkpKTsKKyAgICAKKyAgICBzZXROb2RlVHlwZShOb2RlVHlwZUNoYW5u
ZWxNZXJnZXIpOworICAgIAorICAgIGluaXRpYWxpemUoKTsKK30KKwordm9pZCBBdWRpb0NoYW5u
ZWxNZXJnZXI6OnByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICBBdWRpb05v
ZGVPdXRwdXQqIG91dHB1dCA9IHRoaXMtPm91dHB1dCgwKTsKKyAgICBBU1NFUlQob3V0cHV0KTsK
KyAgICBBU1NFUlRfVU5VU0VEKGZyYW1lc1RvUHJvY2VzcywgZnJhbWVzVG9Qcm9jZXNzID09IG91
dHB1dC0+YnVzKCktPmxlbmd0aCgpKTsgICAgCisgICAgCisgICAgLy8gTWVyZ2UgYWxsIHRoZSBj
aGFubmVscyBmcm9tIGFsbCB0aGUgaW5wdXRzIGludG8gb25lIG91dHB1dC4KKyAgICB1bnNpZ25l
ZCBvdXRwdXRDaGFubmVsSW5kZXggPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZklucHV0cygpOyArK2kpIHsKKyAgICAgICAgQXVkaW9Ob2RlSW5wdXQqIGlucHV0ID0g
dGhpcy0+aW5wdXQoaSk7CisgICAgICAgIGlmIChpbnB1dC0+aXNDb25uZWN0ZWQoKSkgeworICAg
ICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dENoYW5uZWxzID0gaW5wdXQtPmJ1cygpLT5u
dW1iZXJPZkNoYW5uZWxzKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIE1lcmdlIGNo
YW5uZWxzIGZyb20gdGhpcyBwYXJ0aWN1bGFyIGlucHV0LgorICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMDsgaiA8IG51bWJlck9mSW5wdXRDaGFubmVsczsgKytqKSB7CisgICAgICAgICAg
ICAgICAgQXVkaW9DaGFubmVsKiBpbnB1dENoYW5uZWwgPSBpbnB1dC0+YnVzKCktPmNoYW5uZWwo
aik7CisgICAgICAgICAgICAgICAgQXVkaW9DaGFubmVsKiBvdXRwdXRDaGFubmVsID0gb3V0cHV0
LT5idXMoKS0+Y2hhbm5lbChvdXRwdXRDaGFubmVsSW5kZXgpOworICAgICAgICAgICAgICAgIG91
dHB1dENoYW5uZWwtPmNvcHlGcm9tKGlucHV0Q2hhbm5lbCk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgKytvdXRwdXRDaGFubmVsSW5kZXg7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgQVNTRVJUKG91dHB1dENoYW5uZWxJbmRleCA9PSBvdXRw
dXQtPm51bWJlck9mQ2hhbm5lbHMoKSk7Cit9CisKK3ZvaWQgQXVkaW9DaGFubmVsTWVyZ2VyOjpy
ZXNldCgpCit7Cit9CisKKy8vIEFueSB0aW1lIGEgY29ubmVjdGlvbiBvciBkaXNjb25uZWN0aW9u
IGhhcHBlbnMgb24gYW55IG9mIG91ciBpbnB1dHMsIHdlIHBvdGVudGlhbGx5IG5lZWQgdG8gY2hh
bmdlIHRoZQorLy8gbnVtYmVyIG9mIGNoYW5uZWxzIG9mIG91ciBvdXRwdXQuCit2b2lkIEF1ZGlv
Q2hhbm5lbE1lcmdlcjo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQoQXVkaW9Ob2RlSW5w
dXQqIGlucHV0KQoreworICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSAmJiBj
b250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKKworICAgIC8vIENvdW50IGhvdyBtYW55IGNoYW5u
ZWxzIHdlIGhhdmUgYWxsIHRvZ2V0aGVyIGZyb20gYWxsIG9mIHRoZSBpbnB1dHMuCisgICAgdW5z
aWduZWQgbnVtYmVyT2ZPdXRwdXRDaGFubmVscyA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bWJlck9mSW5wdXRzKCk7ICsraSkgeworICAgICAgICBBdWRpb05vZGVJbnB1dCog
aW5wdXQgPSB0aGlzLT5pbnB1dChpKTsKKyAgICAgICAgaWYgKGlucHV0LT5pc0Nvbm5lY3RlZCgp
KQorICAgICAgICAgICAgbnVtYmVyT2ZPdXRwdXRDaGFubmVscyArPSBpbnB1dC0+YnVzKCktPm51
bWJlck9mQ2hhbm5lbHMoKTsKKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIGNvcnJlY3QgbnVtYmVy
IG9mIGNoYW5uZWxzIG9uIHRoZSBvdXRwdXQKKyAgICBBdWRpb05vZGVPdXRwdXQqIG91dHB1dCA9
IHRoaXMtPm91dHB1dCgwKTsKKyAgICBBU1NFUlQob3V0cHV0KTsKKyAgICBvdXRwdXQtPnNldE51
bWJlck9mQ2hhbm5lbHMobnVtYmVyT2ZPdXRwdXRDaGFubmVscyk7CisKKyAgICBBdWRpb05vZGU6
OmNoZWNrTnVtYmVyT2ZDaGFubmVsc0ZvcklucHV0KGlucHV0KTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuaAko
cmV2aXNpb24gMTExMjMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5u
ZWxNZXJnZXIuaDoxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQ2hhbm5lbE1lcmdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEF1ZGlvQ2hhbm5lbE1lcmdlcl9oCisjZGVmaW5lIEF1ZGlvQ2hhbm5lbE1lcmdlcl9oCisK
KyNpbmNsdWRlICJBdWRpb05vZGUuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvQ29udGV4dDsKKyAgICAKK2NsYXNzIEF1
ZGlvQ2hhbm5lbE1lcmdlciA6IHB1YmxpYyBBdWRpb05vZGUgeworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEF1ZGlvQ2hhbm5lbE1lcmdlcj4gY3JlYXRlKEF1ZGlvQ29udGV4dCogY29u
dGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQXVkaW9DaGFubmVsTWVyZ2VyKGNvbnRleHQsIHNhbXBsZVJhdGUpKTsgICAgICAKKyAgICB9
CisKKyAgICAvLyBBdWRpb05vZGUKKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJh
bWVzVG9Qcm9jZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKKworICAgIC8vIENhbGxl
ZCBpbiB0aGUgYXVkaW8gdGhyZWFkIChwcmUtcmVuZGVyaW5nIHRhc2spIHdoZW4gdGhlIG51bWJl
ciBvZiBjaGFubmVscyBmb3IgYW4gaW5wdXQgbWF5IGhhdmUgY2hhbmdlZC4KKyAgICB2aXJ0dWFs
IHZvaWQgY2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQoQXVkaW9Ob2RlSW5wdXQqKTsKKwor
cHJpdmF0ZToKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIDA7IH0KKworICAgIEF1ZGlvQ2hhbm5lbE1lcmdlcihBdWRpb0NvbnRleHQq
LCBmbG9hdCBzYW1wbGVSYXRlKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEF1ZGlvQ2hhbm5lbE1lcmdlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuaWRsCShyZXZpc2lvbiAx
MTEyMzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5p
ZGw6MTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5u
ZWxNZXJnZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgYXVk
aW8geworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTworICAg
IF0gQXVkaW9DaGFubmVsTWVyZ2VyIDogQXVkaW9Ob2RlIHsKKyAgICB9OworfQpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxT
cGxpdHRlci5jcHAJKHJldmlzaW9uIDExMTIzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuY3BwOjExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBF
TkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiQXVkaW9DaGFubmVsU3BsaXR0ZXIuaCIKKwor
I2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0LmgiCisjaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKKy8vIFRoaXMgaXMgY29uc2lkZXJpbmcgdGhh
dCA1LjEgKDYgY2hhbm5lbHMpIGlzIHRoZSBsYXJnZXN0IHdlJ2xsIGV2ZXIgZGVhbCB3aXRoLgor
Ly8gSXQgY2FuIGVhc2lseSBiZSBpbmNyZWFzZWQgdG8gc3VwcG9ydCBtb3JlIGlmIHRoZSB3ZWIg
YXVkaW8gc3BlY2lmaWNhdGlvbiBpcyB1cGRhdGVkLgorY29uc3QgdW5zaWduZWQgTnVtYmVyT2ZP
dXRwdXRzID0gNjsKKworQXVkaW9DaGFubmVsU3BsaXR0ZXI6OkF1ZGlvQ2hhbm5lbFNwbGl0dGVy
KEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKKyAgICA6IEF1ZGlvTm9k
ZShjb250ZXh0LCBzYW1wbGVSYXRlKQoreworICAgIGFkZElucHV0KGFkb3B0UHRyKG5ldyBBdWRp
b05vZGVJbnB1dCh0aGlzKSkpOworCisgICAgLy8gQ3JlYXRlIGEgZml4ZWQgbnVtYmVyIG9mIG91
dHB1dHMgKGFibGUgdG8gaGFuZGxlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFubmVscyBmZWQg
dG8gYW4gaW5wdXQpLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOdW1iZXJPZk91dHB1
dHM7ICsraSkKKyAgICAgICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQo
dGhpcywgMSkpKTsKKyAgICAKKyAgICBzZXROb2RlVHlwZShOb2RlVHlwZUNoYW5uZWxTcGxpdHRl
cik7CisgICAgCisgICAgaW5pdGlhbGl6ZSgpOworfQorCit2b2lkIEF1ZGlvQ2hhbm5lbFNwbGl0
dGVyOjpwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAgQXVkaW9CdXMqIHNv
dXJjZSA9IGlucHV0KDApLT5idXMoKTsKKyAgICBBU1NFUlQoc291cmNlKTsKKyAgICBBU1NFUlRf
VU5VU0VEKGZyYW1lc1RvUHJvY2VzcywgZnJhbWVzVG9Qcm9jZXNzID09IHNvdXJjZS0+bGVuZ3Ro
KCkpOworICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mU291cmNlQ2hhbm5lbHMgPSBzb3VyY2Ut
Pm51bWJlck9mQ2hhbm5lbHMoKTsKKyAgICAKKyAgICBBU1NFUlQobnVtYmVyT2ZPdXRwdXRzKCkg
PT0gTnVtYmVyT2ZPdXRwdXRzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTnVtYmVy
T2ZPdXRwdXRzOyArK2kpIHsKKyAgICAgICAgQXVkaW9CdXMqIGRlc3RpbmF0aW9uID0gb3V0cHV0
KGkpLT5idXMoKTsKKyAgICAgICAgQVNTRVJUKGRlc3RpbmF0aW9uKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChpIDwgbnVtYmVyT2ZTb3VyY2VDaGFubmVscykgeworICAgICAgICAgICAgLy8gU3Bs
aXQgdGhlIGNoYW5uZWwgb3V0IGlmIGl0IGV4aXN0cyBpbiB0aGUgc291cmNlLgorICAgICAgICAg
ICAgLy8gSXQgd291bGQgYmUgbmljZSB0byBhdm9pZCB0aGUgY29weSBhbmQgc2ltcGx5IHBhc3Mg
YWxvbmcgcG9pbnRlcnMsIGJ1dCB0aGlzIGJlY29tZXMgZXh0cmVtZWx5IGRpZmZpY3VsdCB3aXRo
IGZhbm91dCBhbmQgZmFuaW4uCisgICAgICAgICAgICBkZXN0aW5hdGlvbi0+Y2hhbm5lbCgwKS0+
Y29weUZyb20oc291cmNlLT5jaGFubmVsKGkpKTsKKyAgICAgICAgfSBlbHNlIGlmIChvdXRwdXQo
aSktPnJlbmRlcmluZ0Zhbk91dENvdW50KCkgPiAwKSB7CisgICAgICAgICAgICAvLyBPbmx5IGJv
dGhlciB6ZXJvaW5nIG91dCB0aGUgZGVzdGluYXRpb24gaWYgaXQncyBjb25uZWN0ZWQgdG8gYW55
dGhpbmcKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uLT56ZXJvKCk7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3ZvaWQgQXVkaW9DaGFubmVsU3BsaXR0ZXI6OnJlc2V0KCkKK3sKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNw
bGl0dGVyLmgJKHJldmlzaW9uIDExMTIzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9DaGFubmVsU3BsaXR0ZXIuaDoxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXVkaW9DaGFubmVsU3BsaXR0ZXJfaAorI2Rl
ZmluZSBBdWRpb0NoYW5uZWxTcGxpdHRlcl9oCisKKyNpbmNsdWRlICJBdWRpb05vZGUuaCIKKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEF1ZGlvQ29udGV4dDsKKyAgICAKK2NsYXNzIEF1ZGlvQ2hhbm5lbFNwbGl0dGVyIDogcHVibGlj
IEF1ZGlvTm9kZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXVkaW9DaGFubmVs
U3BsaXR0ZXI+IGNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvQ2hhbm5lbFNwbGl0dGVy
KGNvbnRleHQsIHNhbXBsZVJhdGUpKTsgICAgICAKKyAgICB9CisKKyAgICAvLyBBdWRpb05vZGUK
KyAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVzZXQoKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWls
VGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGRvdWJsZSBs
YXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKworICAgIEF1ZGlvQ2hh
bm5lbFNwbGl0dGVyKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQXVkaW9DaGFubmVsU3BsaXR0ZXJfaApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRl
ci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0NoYW5uZWxTcGxpdHRlci5pZGwJKHJldmlzaW9uIDExMTIzMykJKGZyb20gU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuaWRsOjExMTIzMykKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgYXVkaW8geworICAg
IGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTworICAgIF0gQXVkaW9D
aGFubmVsU3BsaXR0ZXIgOiBBdWRpb05vZGUgeworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCShyZXZpc2lvbiAx
MTEyMzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHA6MTEx
MjMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkF1ZGlvQ29u
dGV4dC5oIgorCisjaW5jbHVkZSAiQXN5bmNBdWRpb0RlY29kZXIuaCIKKyNpbmNsdWRlICJBdWRp
b0J1ZmZlci5oIgorI2luY2x1ZGUgIkF1ZGlvQnVmZmVyQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJB
dWRpb0J1ZmZlclNvdXJjZU5vZGUuaCIKKyNpbmNsdWRlICJBdWRpb0NoYW5uZWxNZXJnZXIuaCIK
KyNpbmNsdWRlICJBdWRpb0NoYW5uZWxTcGxpdHRlci5oIgorI2luY2x1ZGUgIkF1ZGlvR2Fpbk5v
ZGUuaCIKKyNpbmNsdWRlICJBdWRpb0xpc3RlbmVyLmgiCisjaW5jbHVkZSAiQXVkaW9Ob2RlSW5w
dXQuaCIKKyNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKKyNpbmNsdWRlICJBdWRpb1Bhbm5l
ck5vZGUuaCIKKyNpbmNsdWRlICJCaXF1YWRGaWx0ZXJOb2RlLmgiCisjaW5jbHVkZSAiQ29udm9s
dmVyTm9kZS5oIgorI2luY2x1ZGUgIkRlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgorI2lu
Y2x1ZGUgIkRlbGF5Tm9kZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRHlu
YW1pY3NDb21wcmVzc29yTm9kZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNs
dWRlICJGRlRGcmFtZS5oIgorI2luY2x1ZGUgIkhSVEZEYXRhYmFzZUxvYWRlci5oIgorI2luY2x1
ZGUgIkhSVEZQYW5uZXIuaCIKKyNpbmNsdWRlICJIaWdoUGFzczJGaWx0ZXJOb2RlLmgiCisjaW5j
bHVkZSAiSmF2YVNjcmlwdEF1ZGlvTm9kZS5oIgorI2luY2x1ZGUgIkxvd1Bhc3MyRmlsdGVyTm9k
ZS5oIgorI2luY2x1ZGUgIk9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oIgorI2luY2x1ZGUg
Ik9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisjaW5jbHVkZSAiUmVhbHRpbWVBbmFseXNlck5vZGUuaCIKKyNpbmNsdWRlICJXYXZlU2hh
cGVyTm9kZS5oIgorI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgorCisjaWYgRU5BQkxFKFZJ
REVPKQorI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJNZWRpYUVsZW1l
bnRBdWRpb1NvdXJjZU5vZGUuaCIKKyNlbmRpZgorCisjaWYgREVCVUdfQVVESU9OT0RFX1JFRkVS
RU5DRVMKKyNpbmNsdWRlIDxzdGRpby5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDx3dGYvQXJyYXlC
dWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisKKy8vIEZJWE1FOiBjaGVjayB0aGUgcHJvcGVyIHdheSB0byByZWZlcmVuY2UgYW4g
dW5kZWZpbmVkIHRocmVhZCBJRAorY29uc3QgaW50IFVuZGVmaW5lZFRocmVhZElkZW50aWZpZXIg
PSAweGZmZmZmZmZmOworCitjb25zdCB1bnNpZ25lZCBNYXhOb2Rlc1RvRGVsZXRlUGVyUXVhbnR1
bSA9IDEwOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCituYW1lc3BhY2UgeworICAgIAor
Ym9vbCBpc1NhbXBsZVJhdGVSYW5nZUdvb2QoZmxvYXQgc2FtcGxlUmF0ZSkKK3sKKyAgICAvLyBG
SVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB0aGUgbWluaW11bSBzYW1wbGUtcmF0ZSBjb3VsZCBi
ZSBsZXNzIHRoYW4gNDQuMUtIeiwKKyAgICAvLyBidXQgdGhhdCB3aWxsIHJlcXVpcmUgc29tZSBm
aXhlcyBpbiBIUlRGUGFubmVyOjpmZnRTaXplRm9yU2FtcGxlUmF0ZSgpLCBhbmQgc29tZSB0ZXN0
aW5nIHRoZXJlLgorICAgIHJldHVybiBzYW1wbGVSYXRlID49IDQ0MTAwICYmIHNhbXBsZVJhdGUg
PD0gOTYwMDA7Cit9CisKK30KKworLy8gRG9uJ3QgYWxsb3cgbW9yZSB0aGFuIHRoaXMgbnVtYmVy
IG9mIHNpbXVsdGFuZW91cyBBdWRpb0NvbnRleHRzIHRhbGtpbmcgdG8gaGFyZHdhcmUuCitjb25z
dCB1bnNpZ25lZCBNYXhIYXJkd2FyZUNvbnRleHRzID0gNDsKK3Vuc2lnbmVkIEF1ZGlvQ29udGV4
dDo6c19oYXJkd2FyZUNvbnRleHRDb3VudCA9IDA7CisgICAgCitQYXNzUmVmUHRyPEF1ZGlvQ29u
dGV4dD4gQXVkaW9Db250ZXh0OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworCisgICAgQVNTRVJUKGRvY3VtZW50
KTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmIChzX2hhcmR3YXJlQ29udGV4
dENvdW50ID49IE1heEhhcmR3YXJlQ29udGV4dHMpCisgICAgICAgIHJldHVybiAwOworCisgICAg
UmVmUHRyPEF1ZGlvQ29udGV4dD4gYXVkaW9Db250ZXh0KGFkb3B0UmVmKG5ldyBBdWRpb0NvbnRl
eHQoZG9jdW1lbnQpKSk7CisgICAgYXVkaW9Db250ZXh0LT5zdXNwZW5kSWZOZWVkZWQoKTsKKyAg
ICByZXR1cm4gYXVkaW9Db250ZXh0LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxBdWRpb0Nv
bnRleHQ+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlT2ZmbGluZUNvbnRleHQoRG9jdW1lbnQqIGRvY3Vt
ZW50LCB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMsIGZs
b2F0IHNhbXBsZVJhdGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFTU0VSVChkb2N1bWVu
dCk7CisKKyAgICAvLyBGSVhNRTogb2ZmbGluZSBjb250ZXh0cyBoYXZlIGxpbWl0YXRpb25zIG9u
IHN1cHBvcnRlZCBzYW1wbGUtcmF0ZXMuCisgICAgLy8gQ3VycmVudGx5IGFsbCBBdWRpb0NvbnRl
eHRzIG11c3QgaGF2ZSB0aGUgc2FtZSBzYW1wbGUtcmF0ZS4KKyAgICBIUlRGRGF0YWJhc2VMb2Fk
ZXIqIGxvYWRlciA9IEhSVEZEYXRhYmFzZUxvYWRlcjo6bG9hZGVyKCk7CisgICAgaWYgKG51bWJl
ck9mQ2hhbm5lbHMgPiAxMCB8fCAhaXNTYW1wbGVSYXRlUmFuZ2VHb29kKHNhbXBsZVJhdGUpIHx8
IChsb2FkZXIgJiYgbG9hZGVyLT5kYXRhYmFzZVNhbXBsZVJhdGUoKSAhPSBzYW1wbGVSYXRlKSkg
eworICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIFJlZlB0cjxBdWRpb0NvbnRleHQ+IGF1ZGlvQ29udGV4dChuZXcgQXVkaW9Db250ZXh0KGRv
Y3VtZW50LCBudW1iZXJPZkNoYW5uZWxzLCBudW1iZXJPZkZyYW1lcywgc2FtcGxlUmF0ZSkpOwor
ICAgIGF1ZGlvQ29udGV4dC0+c3VzcGVuZElmTmVlZGVkKCk7CisgICAgcmV0dXJuIGF1ZGlvQ29u
dGV4dC5yZWxlYXNlKCk7Cit9CisKKy8vIENvbnN0cnVjdG9yIGZvciByZW5kZXJpbmcgdG8gdGhl
IGF1ZGlvIGhhcmR3YXJlLgorQXVkaW9Db250ZXh0OjpBdWRpb0NvbnRleHQoRG9jdW1lbnQqIGRv
Y3VtZW50KQorICAgIDogQWN0aXZlRE9NT2JqZWN0KGRvY3VtZW50LCB0aGlzKQorICAgICwgbV9p
c0luaXRpYWxpemVkKGZhbHNlKQorICAgICwgbV9pc0F1ZGlvVGhyZWFkRmluaXNoZWQoZmFsc2Up
CisgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQorICAgICwgbV9kZXN0aW5hdGlvbk5vZGUoMCkK
KyAgICAsIG1faXNEZWxldGlvblNjaGVkdWxlZChmYWxzZSkKKyAgICAsIG1fY29ubmVjdGlvbkNv
dW50KDApCisgICAgLCBtX2F1ZGlvVGhyZWFkKDApCisgICAgLCBtX2dyYXBoT3duZXJUaHJlYWQo
VW5kZWZpbmVkVGhyZWFkSWRlbnRpZmllcikKKyAgICAsIG1faXNPZmZsaW5lQ29udGV4dChmYWxz
ZSkKK3sKKyAgICBjb25zdHJ1Y3RDb21tb24oKTsKKworICAgIG1fZGVzdGluYXRpb25Ob2RlID0g
RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjpjcmVhdGUodGhpcyk7CisKKyAgICAvLyBUaGlz
IHNldHMgaW4gbW90aW9uIGFuIGFzeW5jaHJvbm91cyBsb2FkaW5nIG1lY2hhbmlzbSBvbiBhbm90
aGVyIHRocmVhZC4KKyAgICAvLyBXZSBjYW4gY2hlY2sgbV9ocnRmRGF0YWJhc2VMb2FkZXItPmlz
TG9hZGVkKCkgdG8gZmluZCBvdXQgd2hldGhlciBvciBub3QgaXQgaGFzIGJlZW4gZnVsbHkgbG9h
ZGVkLgorICAgIC8vIEl0J3Mgbm90IHRoYXQgdXNlZnVsIHRvIGhhdmUgYSBjYWxsYmFjayBmdW5j
dGlvbiBmb3IgdGhpcyBzaW5jZSB0aGUgYXVkaW8gdGhyZWFkIGF1dG9tYXRpY2FsbHkgc3RhcnRz
IHJlbmRlcmluZyBvbiB0aGUgZ3JhcGgKKyAgICAvLyB3aGVuIHRoaXMgaGFzIGZpbmlzaGVkIChz
ZWUgQXVkaW9EZXN0aW5hdGlvbk5vZGUpLgorICAgIG1faHJ0ZkRhdGFiYXNlTG9hZGVyID0gSFJU
RkRhdGFiYXNlTG9hZGVyOjpjcmVhdGVBbmRMb2FkQXN5bmNocm9ub3VzbHlJZk5lY2Vzc2FyeShz
YW1wbGVSYXRlKCkpOworfQorCisvLyBDb25zdHJ1Y3RvciBmb3Igb2ZmbGluZSAobm9uLXJlYWx0
aW1lKSByZW5kZXJpbmcuCitBdWRpb0NvbnRleHQ6OkF1ZGlvQ29udGV4dChEb2N1bWVudCogZG9j
dW1lbnQsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywg
ZmxvYXQgc2FtcGxlUmF0ZSkKKyAgICA6IEFjdGl2ZURPTU9iamVjdChkb2N1bWVudCwgdGhpcykK
KyAgICAsIG1faXNJbml0aWFsaXplZChmYWxzZSkKKyAgICAsIG1faXNBdWRpb1RocmVhZEZpbmlz
aGVkKGZhbHNlKQorICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKKyAgICAsIG1fZGVzdGluYXRp
b25Ob2RlKDApCisgICAgLCBtX2Nvbm5lY3Rpb25Db3VudCgwKQorICAgICwgbV9hdWRpb1RocmVh
ZCgwKQorICAgICwgbV9ncmFwaE93bmVyVGhyZWFkKFVuZGVmaW5lZFRocmVhZElkZW50aWZpZXIp
CisgICAgLCBtX2lzT2ZmbGluZUNvbnRleHQodHJ1ZSkKK3sKKyAgICBjb25zdHJ1Y3RDb21tb24o
KTsKKworICAgIC8vIEZJWE1FOiB0aGUgcGFzc2VkIGluIHNhbXBsZVJhdGUgTVVTVCBtYXRjaCB0
aGUgaGFyZHdhcmUgc2FtcGxlLXJhdGUgc2luY2UgSFJURkRhdGFiYXNlTG9hZGVyIGlzIGEgc2lu
Z2xldG9uLgorICAgIG1faHJ0ZkRhdGFiYXNlTG9hZGVyID0gSFJURkRhdGFiYXNlTG9hZGVyOjpj
cmVhdGVBbmRMb2FkQXN5bmNocm9ub3VzbHlJZk5lY2Vzc2FyeShzYW1wbGVSYXRlKTsKKworICAg
IC8vIENyZWF0ZSBhIG5ldyBkZXN0aW5hdGlvbiBmb3Igb2ZmbGluZSByZW5kZXJpbmcuCisgICAg
bV9yZW5kZXJUYXJnZXQgPSBBdWRpb0J1ZmZlcjo6Y3JlYXRlKG51bWJlck9mQ2hhbm5lbHMsIG51
bWJlck9mRnJhbWVzLCBzYW1wbGVSYXRlKTsKKyAgICBtX2Rlc3RpbmF0aW9uTm9kZSA9IE9mZmxp
bmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6Y3JlYXRlKHRoaXMsIG1fcmVuZGVyVGFyZ2V0LmdldCgp
KTsKK30KKwordm9pZCBBdWRpb0NvbnRleHQ6OmNvbnN0cnVjdENvbW1vbigpCit7CisgICAgRkZU
RnJhbWU6OmluaXRpYWxpemUoKTsKKyAgICAKKyAgICBtX2xpc3RlbmVyID0gQXVkaW9MaXN0ZW5l
cjo6Y3JlYXRlKCk7Cit9CisKK0F1ZGlvQ29udGV4dDo6fkF1ZGlvQ29udGV4dCgpCit7CisjaWYg
REVCVUdfQVVESU9OT0RFX1JFRkVSRU5DRVMKKyAgICBwcmludGYoIiVwOiBBdWRpb0NvbnRleHQ6
On5BdWRpb0NvbnRleHQoKVxuIiwgdGhpcyk7CisjZW5kaWYKKyAgICAvLyBBdWRpb05vZGVzIGtl
ZXAgYSByZWZlcmVuY2UgdG8gdGhlaXIgY29udGV4dCwgc28gdGhlcmUgc2hvdWxkIGJlIG5vIHdh
eSB0byBiZSBpbiB0aGUgZGVzdHJ1Y3RvciBpZiB0aGVyZSBhcmUgc3RpbGwgQXVkaW9Ob2RlcyBh
cm91bmQuCisgICAgQVNTRVJUKCFtX25vZGVzVG9EZWxldGUuc2l6ZSgpKTsKKyAgICBBU1NFUlQo
IW1fcmVmZXJlbmNlZE5vZGVzLnNpemUoKSk7CisgICAgQVNTRVJUKCFtX2ZpbmlzaGVkTm9kZXMu
c2l6ZSgpKTsKK30KKwordm9pZCBBdWRpb0NvbnRleHQ6OmxhenlJbml0aWFsaXplKCkKK3sKKyAg
ICBpZiAoIW1faXNJbml0aWFsaXplZCkgeworICAgICAgICAvLyBEb24ndCBhbGxvdyB0aGUgY29u
dGV4dCB0byBpbml0aWFsaXplIGEgc2Vjb25kIHRpbWUgYWZ0ZXIgaXQncyBhbHJlYWR5IGJlZW4g
ZXhwbGljaXRseSB1bmluaXRpYWxpemVkLgorICAgICAgICBBU1NFUlQoIW1faXNBdWRpb1RocmVh
ZEZpbmlzaGVkKTsKKyAgICAgICAgaWYgKCFtX2lzQXVkaW9UaHJlYWRGaW5pc2hlZCkgeworICAg
ICAgICAgICAgaWYgKG1fZGVzdGluYXRpb25Ob2RlLmdldCgpKSB7CisgICAgICAgICAgICAgICAg
bV9kZXN0aW5hdGlvbk5vZGUtPmluaXRpYWxpemUoKTsKKworICAgICAgICAgICAgICAgIGlmICgh
aXNPZmZsaW5lQ29udGV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgc3RhcnRz
IHRoZSBhdWRpbyB0aHJlYWQuIFRoZSBkZXN0aW5hdGlvbiBub2RlJ3MgcHJvdmlkZUlucHV0KCkg
bWV0aG9kIHdpbGwgbm93IGJlIGNhbGxlZCByZXBlYXRlZGx5IHRvIHJlbmRlciBhdWRpby4KKyAg
ICAgICAgICAgICAgICAgICAgLy8gRWFjaCB0aW1lIHByb3ZpZGVJbnB1dCgpIGlzIGNhbGxlZCwg
YSBwb3J0aW9uIG9mIHRoZSBhdWRpbyBzdHJlYW0gaXMgcmVuZGVyZWQuIExldCdzIGNhbGwgdGhp
cyB0aW1lIHBlcmlvZCBhICJyZW5kZXIgcXVhbnR1bSIuCisgICAgICAgICAgICAgICAgICAgIC8v
IE5PVEU6IGZvciBub3cgZGVmYXVsdCBBdWRpb0NvbnRleHQgZG9lcyBub3QgbmVlZCBhbiBleHBs
aWNpdCBzdGFydFJlbmRlcmluZygpIGNhbGwgZnJvbSBKYXZhU2NyaXB0LgorICAgICAgICAgICAg
ICAgICAgICAvLyBXZSBtYXkgd2FudCB0byBjb25zaWRlciByZXF1aXJpbmcgaXQgZm9yIHN5bW1l
dHJ5IHdpdGggT2ZmbGluZUF1ZGlvQ29udGV4dC4KKyAgICAgICAgICAgICAgICAgICAgbV9kZXN0
aW5hdGlvbk5vZGUtPnN0YXJ0UmVuZGVyaW5nKCk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgKytzX2hhcmR3YXJlQ29udGV4dENvdW50OworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9pc0luaXRpYWxpemVkID0gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBBdWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6ZSgp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmIChtX2lzSW5pdGlhbGl6
ZWQpIHsKKyAgICAgICAgLy8gUHJvdGVjdCB0aGlzIG9iamVjdCBmcm9tIGJlaW5nIGRlbGV0ZWQg
YmVmb3JlIHdlIGZpbmlzaCB1bmluaXRpYWxpemluZy4KKyAgICAgICAgUmVmUHRyPEF1ZGlvQ29u
dGV4dD4gcHJvdGVjdCh0aGlzKTsKKworICAgICAgICAvLyBUaGlzIHN0b3BzIHRoZSBhdWRpbyB0
aHJlYWQgYW5kIGFsbCBhdWRpbyByZW5kZXJpbmcuCisgICAgICAgIG1fZGVzdGluYXRpb25Ob2Rl
LT51bmluaXRpYWxpemUoKTsKKworICAgICAgICAvLyBEb24ndCBhbGxvdyB0aGUgY29udGV4dCB0
byBpbml0aWFsaXplIGEgc2Vjb25kIHRpbWUgYWZ0ZXIgaXQncyBhbHJlYWR5IGJlZW4gZXhwbGlj
aXRseSB1bmluaXRpYWxpemVkLgorICAgICAgICBtX2lzQXVkaW9UaHJlYWRGaW5pc2hlZCA9IHRy
dWU7CisKKyAgICAgICAgLy8gV2UgaGF2ZSB0byByZWxlYXNlIG91ciByZWZlcmVuY2UgdG8gdGhl
IGRlc3RpbmF0aW9uIG5vZGUgYmVmb3JlIHRoZSBjb250ZXh0IHdpbGwgZXZlciBiZSBkZWxldGVk
IHNpbmNlIHRoZSBkZXN0aW5hdGlvbiBub2RlIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBjb250
ZXh0LgorICAgICAgICBtX2Rlc3RpbmF0aW9uTm9kZS5jbGVhcigpOworCisgICAgICAgIGlmICgh
aXNPZmZsaW5lQ29udGV4dCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoc19oYXJkd2FyZUNvbnRl
eHRDb3VudCk7CisgICAgICAgICAgICAtLXNfaGFyZHdhcmVDb250ZXh0Q291bnQ7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIEdldCByaWQgb2YgdGhlIHNvdXJjZXMgd2hpY2ggbWF5
IHN0aWxsIGJlIHBsYXlpbmcuCisgICAgICAgIGRlcmVmVW5maW5pc2hlZFNvdXJjZU5vZGVzKCk7
CisKKyAgICAgICAgZGVsZXRlTWFya2VkTm9kZXMoKTsKKworICAgICAgICBtX2lzSW5pdGlhbGl6
ZWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgQXVkaW9Db250ZXh0Ojppc0luaXRpYWxpemVk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pc0luaXRpYWxpemVkOworfQorCitib29sIEF1ZGlv
Q29udGV4dDo6aXNSdW5uYWJsZSgpIGNvbnN0Cit7CisgICAgaWYgKCFpc0luaXRpYWxpemVkKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBDaGVjayB3aXRoIHRoZSBIUlRG
IHNwYXRpYWxpemF0aW9uIHN5c3RlbSB0byBzZWUgaWYgaXQncyBmaW5pc2hlZCBsb2FkaW5nLgor
ICAgIHJldHVybiBtX2hydGZEYXRhYmFzZUxvYWRlci0+aXNMb2FkZWQoKTsKK30KKwordm9pZCBB
dWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6ZURpc3BhdGNoKHZvaWQqIHVzZXJEYXRhKQoreworICAg
IEF1ZGlvQ29udGV4dCogY29udGV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8QXVkaW9Db250ZXh0Kj4o
dXNlckRhdGEpOworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGNvbnRleHQtPnVuaW5pdGlhbGl6ZSgpOworfQorCit2b2lkIEF1
ZGlvQ29udGV4dDo6c3RvcCgpCit7CisgICAgbV9kb2N1bWVudCA9IDA7IC8vIGRvY3VtZW50IGlz
IGdvaW5nIGF3YXkKKworICAgIC8vIERvbid0IGNhbGwgdW5pbml0aWFsaXplKCkgaW1tZWRpYXRl
bHkgaGVyZSBiZWNhdXNlIHRoZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IGlzIGluIHRoZSBtaWRk
bGUKKyAgICAvLyBvZiBkZWFsaW5nIHdpdGggYWxsIG9mIGl0cyBBY3RpdmVET01PYmplY3RzIGF0
IHRoaXMgcG9pbnQuIHVuaW5pdGlhbGl6ZSgpIGNhbiBkZS1yZWZlcmVuY2Ugb3RoZXIKKyAgICAv
LyBBY3RpdmVET01PYmplY3RzIHNvIGxldCdzIHNjaGVkdWxlIHVuaW5pdGlhbGl6ZSgpIHRvIGJl
IGNhbGxlZCBsYXRlci4KKyAgICAvLyBGSVhNRTogc2VlIGlmIHRoZXJlJ3MgYSBtb3JlIGRpcmVj
dCB3YXkgdG8gaGFuZGxlIHRoaXMgaXNzdWUuCisgICAgY2FsbE9uTWFpblRocmVhZCh1bmluaXRp
YWxpemVEaXNwYXRjaCwgdGhpcyk7Cit9CisKK0RvY3VtZW50KiBBdWRpb0NvbnRleHQ6OmRvY3Vt
ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9kb2N1bWVudCk7CisgICAgcmV0dXJuIG1fZG9j
dW1lbnQ7Cit9CisKK2Jvb2wgQXVkaW9Db250ZXh0OjpoYXNEb2N1bWVudCgpCit7CisgICAgcmV0
dXJuIG1fZG9jdW1lbnQ7Cit9CisKK1Bhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IEF1ZGlvQ29udGV4
dDo6Y3JlYXRlQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJP
ZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgUmVm
UHRyPEF1ZGlvQnVmZmVyPiBhdWRpb0J1ZmZlciA9IEF1ZGlvQnVmZmVyOjpjcmVhdGUobnVtYmVy
T2ZDaGFubmVscywgbnVtYmVyT2ZGcmFtZXMsIHNhbXBsZVJhdGUpOworICAgIGlmICghYXVkaW9C
dWZmZXIuZ2V0KCkpIHsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICByZXR1cm4gYXVkaW9CdWZmZXI7Cit9CisKK1Bhc3NSZWZQdHI8QXVk
aW9CdWZmZXI+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQnVmZmVyKEFycmF5QnVmZmVyKiBhcnJheUJ1
ZmZlciwgYm9vbCBtaXhUb01vbm8sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFTU0VSVChh
cnJheUJ1ZmZlcik7CisgICAgaWYgKCFhcnJheUJ1ZmZlcikgeworICAgICAgICBlYyA9IFNZTlRB
WF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxBdWRpb0J1ZmZl
cj4gYXVkaW9CdWZmZXIgPSBBdWRpb0J1ZmZlcjo6Y3JlYXRlRnJvbUF1ZGlvRmlsZURhdGEoYXJy
YXlCdWZmZXItPmRhdGEoKSwgYXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSwgbWl4VG9Nb25vLCBz
YW1wbGVSYXRlKCkpOworICAgIGlmICghYXVkaW9CdWZmZXIuZ2V0KCkpIHsKKyAgICAgICAgZWMg
PSBTWU5UQVhfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gYXVk
aW9CdWZmZXI7Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0OjpkZWNvZGVBdWRpb0RhdGEoQXJyYXlC
dWZmZXIqIGF1ZGlvRGF0YSwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBzdWNjZXNz
Q2FsbGJhY2ssIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFhdWRpb0RhdGEpIHsKKyAgICAgICAgZWMg
PSBTWU5UQVhfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fYXVkaW9EZWNvZGVy
LmRlY29kZUFzeW5jKGF1ZGlvRGF0YSwgc2FtcGxlUmF0ZSgpLCBzdWNjZXNzQ2FsbGJhY2ssIGVy
cm9yQ2FsbGJhY2spOworfQorCitQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4gQXVk
aW9Db250ZXh0OjpjcmVhdGVCdWZmZXJTb3VyY2UoKQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgbGF6eUluaXRpYWxpemUoKTsKKyAgICBSZWZQdHI8QXVkaW9CdWZmZXJTb3Vy
Y2VOb2RlPiBub2RlID0gQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpjcmVhdGUodGhpcywgbV9kZXN0
aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7CisKKyAgICByZWZOb2RlKG5vZGUuZ2V0KCkpOyAv
LyBjb250ZXh0IGtlZXBzIHJlZmVyZW5jZSB1bnRpbCBzb3VyY2UgaGFzIGZpbmlzaGVkIHBsYXlp
bmcKKyAgICByZXR1cm4gbm9kZTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK1Bhc3NSZWZQdHI8
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZU1lZGlhRWxl
bWVudFNvdXJjZShIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIEFTU0VSVChtZWRpYUVsZW1lbnQpOworICAgIGlmICghbWVkaWFFbGVtZW50
KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICAgICAgCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBsYXp5SW5p
dGlhbGl6ZSgpOworICAgIAorICAgIC8vIEZpcnN0IGNoZWNrIGlmIHRoaXMgbWVkaWEgZWxlbWVu
dCBhbHJlYWR5IGhhcyBhIHNvdXJjZSBub2RlLgorICAgIGlmIChtZWRpYUVsZW1lbnQtPmF1ZGlv
U291cmNlTm9kZSgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICAgICAgCisgICAgUmVmUHRyPE1lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZT4gbm9kZSA9IE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6Y3JlYXRlKHRo
aXMsIG1lZGlhRWxlbWVudCk7CisKKyAgICBtZWRpYUVsZW1lbnQtPnNldEF1ZGlvU291cmNlTm9k
ZShub2RlLmdldCgpKTsKKworICAgIHJlZk5vZGUobm9kZS5nZXQoKSk7IC8vIGNvbnRleHQga2Vl
cHMgcmVmZXJlbmNlIHVudGlsIG5vZGUgaXMgZGlzY29ubmVjdGVkCisgICAgcmV0dXJuIG5vZGU7
Cit9CisjZW5kaWYKKworUGFzc1JlZlB0cjxKYXZhU2NyaXB0QXVkaW9Ob2RlPiBBdWRpb0NvbnRl
eHQ6OmNyZWF0ZUphdmFTY3JpcHROb2RlKHNpemVfdCBidWZmZXJTaXplKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgbGF6eUluaXRpYWxpemUoKTsKKyAgICBSZWZQdHI8SmF2
YVNjcmlwdEF1ZGlvTm9kZT4gbm9kZSA9IEphdmFTY3JpcHRBdWRpb05vZGU6OmNyZWF0ZSh0aGlz
LCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpLCBidWZmZXJTaXplKTsKKworICAgIHJl
Zk5vZGUobm9kZS5nZXQoKSk7IC8vIGNvbnRleHQga2VlcHMgcmVmZXJlbmNlIHVudGlsIHdlIHN0
b3AgbWFraW5nIGphdmFzY3JpcHQgcmVuZGVyaW5nIGNhbGxiYWNrcworICAgIHJldHVybiBub2Rl
OworfQorCitQYXNzUmVmUHRyPEJpcXVhZEZpbHRlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRl
QmlxdWFkRmlsdGVyKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGxhenlJ
bml0aWFsaXplKCk7CisgICAgcmV0dXJuIEJpcXVhZEZpbHRlck5vZGU6OmNyZWF0ZSh0aGlzLCBt
X2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpKTsKK30KKworUGFzc1JlZlB0cjxXYXZlU2hh
cGVyTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVXYXZlU2hhcGVyKCkKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIGxhenlJbml0aWFsaXplKCk7CisgICAgcmV0dXJuIFdhdmVT
aGFwZXJOb2RlOjpjcmVhdGUodGhpcyk7Cit9CisKK1Bhc3NSZWZQdHI8TG93UGFzczJGaWx0ZXJO
b2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUxvd1Bhc3MyRmlsdGVyKCkKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIGxhenlJbml0aWFsaXplKCk7CisgICAgaWYgKGRvY3VtZW50
KCkpCisgICAgICAgIGRvY3VtZW50KCktPmFkZENvbnNvbGVNZXNzYWdlKEpTTWVzc2FnZVNvdXJj
ZSwgTG9nTWVzc2FnZVR5cGUsIFdhcm5pbmdNZXNzYWdlTGV2ZWwsICJjcmVhdGVMb3dQYXNzMkZp
bHRlcigpIGlzIGRlcHJlY2F0ZWQuICBVc2UgY3JlYXRlQmlxdWFkRmlsdGVyKCkgaW5zdGVhZC4i
KTsKKyAgICAgICAgCisgICAgcmV0dXJuIExvd1Bhc3MyRmlsdGVyTm9kZTo6Y3JlYXRlKHRoaXMs
IG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkpOworfQorCitQYXNzUmVmUHRyPEhpZ2hQ
YXNzMkZpbHRlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlSGlnaFBhc3MyRmlsdGVyKCkKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGxhenlJbml0aWFsaXplKCk7CisgICAg
aWYgKGRvY3VtZW50KCkpCisgICAgICAgIGRvY3VtZW50KCktPmFkZENvbnNvbGVNZXNzYWdlKEpT
TWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIFdhcm5pbmdNZXNzYWdlTGV2ZWwsICJjcmVh
dGVIaWdoUGFzczJGaWx0ZXIoKSBpcyBkZXByZWNhdGVkLiAgVXNlIGNyZWF0ZUJpcXVhZEZpbHRl
cigpIGluc3RlYWQuIik7CisKKyAgICByZXR1cm4gSGlnaFBhc3MyRmlsdGVyTm9kZTo6Y3JlYXRl
KHRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkpOworfQorCitQYXNzUmVmUHRy
PEF1ZGlvUGFubmVyTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVQYW5uZXIoKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgbGF6eUluaXRpYWxpemUoKTsKKyAgICByZXR1cm4g
QXVkaW9QYW5uZXJOb2RlOjpjcmVhdGUodGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJh
dGUoKSk7Cit9CisKK1Bhc3NSZWZQdHI8Q29udm9sdmVyTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVh
dGVDb252b2x2ZXIoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgbGF6eUlu
aXRpYWxpemUoKTsKKyAgICByZXR1cm4gQ29udm9sdmVyTm9kZTo6Y3JlYXRlKHRoaXMsIG1fZGVz
dGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkpOworfQorCitQYXNzUmVmUHRyPER5bmFtaWNzQ29t
cHJlc3Nvck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlRHluYW1pY3NDb21wcmVzc29yKCkKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGxhenlJbml0aWFsaXplKCk7CisgICAg
cmV0dXJuIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OmNyZWF0ZSh0aGlzLCBtX2Rlc3RpbmF0aW9u
Tm9kZS0+c2FtcGxlUmF0ZSgpKTsKK30KKworUGFzc1JlZlB0cjxSZWFsdGltZUFuYWx5c2VyTm9k
ZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVBbmFseXNlcigpCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBsYXp5SW5pdGlhbGl6ZSgpOworICAgIHJldHVybiBSZWFsdGltZUFuYWx5
c2VyTm9kZTo6Y3JlYXRlKHRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkpOwor
fQorCitQYXNzUmVmUHRyPEF1ZGlvR2Fpbk5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlR2Fpbk5v
ZGUoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgbGF6eUluaXRpYWxpemUo
KTsKKyAgICByZXR1cm4gQXVkaW9HYWluTm9kZTo6Y3JlYXRlKHRoaXMsIG1fZGVzdGluYXRpb25O
b2RlLT5zYW1wbGVSYXRlKCkpOworfQorCitQYXNzUmVmUHRyPERlbGF5Tm9kZT4gQXVkaW9Db250
ZXh0OjpjcmVhdGVEZWxheU5vZGUoKQoreworICAgIGNvbnN0IGRvdWJsZSBkZWZhdWx0TWF4RGVs
YXlUaW1lID0gMTsKKyAgICByZXR1cm4gY3JlYXRlRGVsYXlOb2RlKGRlZmF1bHRNYXhEZWxheVRp
bWUpOworfQorCitQYXNzUmVmUHRyPERlbGF5Tm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVEZWxh
eU5vZGUoZG91YmxlIG1heERlbGF5VGltZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIGxhenlJbml0aWFsaXplKCk7CisgICAgcmV0dXJuIERlbGF5Tm9kZTo6Y3JlYXRlKHRo
aXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCksIG1heERlbGF5VGltZSk7Cit9CisK
K1Bhc3NSZWZQdHI8QXVkaW9DaGFubmVsU3BsaXR0ZXI+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hh
bm5lbFNwbGl0dGVyKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGxhenlJ
bml0aWFsaXplKCk7CisgICAgcmV0dXJuIEF1ZGlvQ2hhbm5lbFNwbGl0dGVyOjpjcmVhdGUodGhp
cywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7Cit9CisKK1Bhc3NSZWZQdHI8QXVk
aW9DaGFubmVsTWVyZ2VyPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUNoYW5uZWxNZXJnZXIoKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgbGF6eUluaXRpYWxpemUoKTsKKyAgICBy
ZXR1cm4gQXVkaW9DaGFubmVsTWVyZ2VyOjpjcmVhdGUodGhpcywgbV9kZXN0aW5hdGlvbk5vZGUt
PnNhbXBsZVJhdGUoKSk7Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0Ojpub3RpZnlOb2RlRmluaXNo
ZWRQcm9jZXNzaW5nKEF1ZGlvTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQoaXNBdWRpb1RocmVh
ZCgpKTsKKyAgICBtX2ZpbmlzaGVkTm9kZXMuYXBwZW5kKG5vZGUpOworfQorCit2b2lkIEF1ZGlv
Q29udGV4dDo6ZGVyZWZGaW5pc2hlZFNvdXJjZU5vZGVzKCkKK3sKKyAgICBBU1NFUlQoaXNHcmFw
aE93bmVyKCkpOworICAgIEFTU0VSVChpc0F1ZGlvVGhyZWFkKCkgfHwgaXNBdWRpb1RocmVhZEZp
bmlzaGVkKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ZpbmlzaGVkTm9kZXMu
c2l6ZSgpOyBpKyspCisgICAgICAgIGRlcmVmTm9kZShtX2ZpbmlzaGVkTm9kZXNbaV0pOworCisg
ICAgbV9maW5pc2hlZE5vZGVzLmNsZWFyKCk7Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0OjpyZWZO
b2RlKEF1ZGlvTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IEF1dG9Mb2NrZXIgbG9ja2VyKHRoaXMpOworICAgIAorICAgIG5vZGUtPnJlZihBdWRpb05vZGU6
OlJlZlR5cGVDb25uZWN0aW9uKTsKKyAgICBtX3JlZmVyZW5jZWROb2Rlcy5hcHBlbmQobm9kZSk7
Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0OjpkZXJlZk5vZGUoQXVkaW9Ob2RlKiBub2RlKQorewor
ICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7CisgICAgCisgICAgbm9kZS0+ZGVyZWYoQXVkaW9O
b2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9yZWZlcmVuY2VkTm9kZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG5vZGUgPT0gbV9y
ZWZlcmVuY2VkTm9kZXNbaV0pIHsKKyAgICAgICAgICAgIG1fcmVmZXJlbmNlZE5vZGVzLnJlbW92
ZShpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEF1
ZGlvQ29udGV4dDo6ZGVyZWZVbmZpbmlzaGVkU291cmNlTm9kZXMoKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSAmJiBpc0F1ZGlvVGhyZWFkRmluaXNoZWQoKSk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fcmVmZXJlbmNlZE5vZGVzLnNpemUoKTsgKytpKQorICAgICAgICBt
X3JlZmVyZW5jZWROb2Rlc1tpXS0+ZGVyZWYoQXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7
CisKKyAgICBtX3JlZmVyZW5jZWROb2Rlcy5jbGVhcigpOworfQorCit2b2lkIEF1ZGlvQ29udGV4
dDo6bG9jayhib29sJiBtdXN0UmVsZWFzZUxvY2spCit7CisgICAgLy8gRG9uJ3QgYWxsb3cgcmVn
dWxhciBsb2NrIGluIHJlYWwtdGltZSBhdWRpbyB0aHJlYWQuCisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKworICAgIFRocmVhZElkZW50aWZpZXIgdGhpc1RocmVhZCA9IGN1cnJlbnRUaHJl
YWQoKTsKKworICAgIGlmICh0aGlzVGhyZWFkID09IG1fZ3JhcGhPd25lclRocmVhZCkgeworICAg
ICAgICAvLyBXZSBhbHJlYWR5IGhhdmUgdGhlIGxvY2suCisgICAgICAgIG11c3RSZWxlYXNlTG9j
ayA9IGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEFjcXVpcmUgdGhlIGxvY2suCisg
ICAgICAgIG1fY29udGV4dEdyYXBoTXV0ZXgubG9jaygpOworICAgICAgICBtX2dyYXBoT3duZXJU
aHJlYWQgPSB0aGlzVGhyZWFkOworICAgICAgICBtdXN0UmVsZWFzZUxvY2sgPSB0cnVlOworICAg
IH0KK30KKworYm9vbCBBdWRpb0NvbnRleHQ6OnRyeUxvY2soYm9vbCYgbXVzdFJlbGVhc2VMb2Nr
KQoreworICAgIFRocmVhZElkZW50aWZpZXIgdGhpc1RocmVhZCA9IGN1cnJlbnRUaHJlYWQoKTsK
KyAgICBib29sIGlzQXVkaW9UaHJlYWQgPSB0aGlzVGhyZWFkID09IGF1ZGlvVGhyZWFkKCk7CisK
KyAgICAvLyBUcnkgdG8gY2F0Y2ggY2FzZXMgb2YgdXNpbmcgdHJ5IGxvY2sgb24gbWFpbiB0aHJl
YWQgLSBpdCBzaG91bGQgdXNlIHJlZ3VsYXIgbG9jay4KKyAgICBBU1NFUlQoaXNBdWRpb1RocmVh
ZCB8fCBpc0F1ZGlvVGhyZWFkRmluaXNoZWQoKSk7CisgICAgCisgICAgaWYgKCFpc0F1ZGlvVGhy
ZWFkKSB7CisgICAgICAgIC8vIEluIHJlbGVhc2UgYnVpbGQgdHJlYXQgdHJ5TG9jaygpIGFzIGxv
Y2soKSAoc2luY2UgYWJvdmUgQVNTRVJUKGlzQXVkaW9UaHJlYWQpIG5ldmVyIGZpcmVzKSAtIHRo
aXMgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvLgorICAgICAgICBsb2NrKG11c3RSZWxlYXNlTG9jayk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIGhhc0xvY2s7Cisg
ICAgCisgICAgaWYgKHRoaXNUaHJlYWQgPT0gbV9ncmFwaE93bmVyVGhyZWFkKSB7CisgICAgICAg
IC8vIFRocmVhZCBhbHJlYWR5IGhhcyB0aGUgbG9jay4KKyAgICAgICAgaGFzTG9jayA9IHRydWU7
CisgICAgICAgIG11c3RSZWxlYXNlTG9jayA9IGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIERvbid0IGFscmVhZHkgaGF2ZSB0aGUgbG9jayAtIHRyeSB0byBhY3F1aXJlIGl0LgorICAg
ICAgICBoYXNMb2NrID0gbV9jb250ZXh0R3JhcGhNdXRleC50cnlMb2NrKCk7CisgICAgICAgIAor
ICAgICAgICBpZiAoaGFzTG9jaykKKyAgICAgICAgICAgIG1fZ3JhcGhPd25lclRocmVhZCA9IHRo
aXNUaHJlYWQ7CisKKyAgICAgICAgbXVzdFJlbGVhc2VMb2NrID0gaGFzTG9jazsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIGhhc0xvY2s7Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0Ojp1bmxvY2so
KQoreworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9ncmFwaE93bmVyVGhyZWFkKTsK
KworICAgIG1fZ3JhcGhPd25lclRocmVhZCA9IFVuZGVmaW5lZFRocmVhZElkZW50aWZpZXI7Cisg
ICAgbV9jb250ZXh0R3JhcGhNdXRleC51bmxvY2soKTsKK30KKworYm9vbCBBdWRpb0NvbnRleHQ6
OmlzQXVkaW9UaHJlYWQoKSBjb25zdAoreworICAgIHJldHVybiBjdXJyZW50VGhyZWFkKCkgPT0g
bV9hdWRpb1RocmVhZDsKK30KKworYm9vbCBBdWRpb0NvbnRleHQ6OmlzR3JhcGhPd25lcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKSA9PSBtX2dyYXBoT3duZXJUaHJlYWQ7
Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0OjphZGREZWZlcnJlZEZpbmlzaERlcmVmKEF1ZGlvTm9k
ZSogbm9kZSwgQXVkaW9Ob2RlOjpSZWZUeXBlIHJlZlR5cGUpCit7CisgICAgQVNTRVJUKGlzQXVk
aW9UaHJlYWQoKSk7CisgICAgbV9kZWZlcnJlZEZpbmlzaERlcmVmTGlzdC5hcHBlbmQoQXVkaW9D
b250ZXh0OjpSZWZJbmZvKG5vZGUsIHJlZlR5cGUpKTsKK30KKwordm9pZCBBdWRpb0NvbnRleHQ6
OmhhbmRsZVByZVJlbmRlclRhc2tzKCkKK3sKKyAgICBBU1NFUlQoaXNBdWRpb1RocmVhZCgpKTsK
KyAKKyAgICAvLyBBdCB0aGUgYmVnaW5uaW5nIG9mIGV2ZXJ5IHJlbmRlciBxdWFudHVtLCB0cnkg
dG8gdXBkYXRlIHRoZSBpbnRlcm5hbCByZW5kZXJpbmcgZ3JhcGggc3RhdGUgKGZyb20gbWFpbiB0
aHJlYWQgY2hhbmdlcykuCisgICAgLy8gSXQncyBPSyBpZiB0aGUgdHJ5TG9jaygpIGZhaWxzLCB3
ZSdsbCBqdXN0IHRha2Ugc2xpZ2h0bHkgbG9uZ2VyIHRvIHBpY2sgdXAgdGhlIGNoYW5nZXMuCisg
ICAgYm9vbCBtdXN0UmVsZWFzZUxvY2s7CisgICAgaWYgKHRyeUxvY2sobXVzdFJlbGVhc2VMb2Nr
KSkgeworICAgICAgICAvLyBGaXh1cCB0aGUgc3RhdGUgb2YgYW55IGRpcnR5IEF1ZGlvTm9kZUlu
cHV0cyBhbmQgQXVkaW9Ob2RlT3V0cHV0cy4KKyAgICAgICAgaGFuZGxlRGlydHlBdWRpb05vZGVJ
bnB1dHMoKTsKKyAgICAgICAgaGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRzKCk7CisgICAgICAg
IAorICAgICAgICBpZiAobXVzdFJlbGVhc2VMb2NrKQorICAgICAgICAgICAgdW5sb2NrKCk7Cisg
ICAgfQorfQorCit2b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxlUG9zdFJlbmRlclRhc2tzKCkKK3sK
KyAgICBBU1NFUlQoaXNBdWRpb1RocmVhZCgpKTsKKyAKKyAgICAvLyBNdXN0IHVzZSBhIHRyeUxv
Y2soKSBoZXJlIHRvby4gIERvbid0IHdvcnJ5LCB0aGUgbG9jayB3aWxsIHZlcnkgcmFyZWx5IGJl
IGNvbnRlbmRlZCBhbmQgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyZXF1ZW50bHkuCisgICAgLy8g
VGhlIHdvcnN0IHRoYXQgY2FuIGhhcHBlbiBpcyB0aGF0IHRoZXJlIHdpbGwgYmUgc29tZSBub2Rl
cyB3aGljaCB3aWxsIHRha2Ugc2xpZ2h0bHkgbG9uZ2VyIHRoYW4gdXN1YWwgdG8gYmUgZGVsZXRl
ZCBvciByZW1vdmVkCisgICAgLy8gZnJvbSB0aGUgcmVuZGVyIGdyYXBoIChpbiB3aGljaCBjYXNl
IHRoZXknbGwgcmVuZGVyIHNpbGVuY2UpLgorICAgIGJvb2wgbXVzdFJlbGVhc2VMb2NrOworICAg
IGlmICh0cnlMb2NrKG11c3RSZWxlYXNlTG9jaykpIHsKKyAgICAgICAgLy8gVGFrZSBjYXJlIG9m
IGZpbmlzaGluZyBhbnkgZGVyZWZzIHdoZXJlIHRoZSB0cnlMb2NrKCkgZmFpbGVkIHByZXZpb3Vz
bHkuCisgICAgICAgIGhhbmRsZURlZmVycmVkRmluaXNoRGVyZWZzKCk7CisKKyAgICAgICAgLy8g
RHluYW1pY2FsbHkgY2xlYW4gdXAgbm9kZXMgd2hpY2ggYXJlIG5vIGxvbmdlciBuZWVkZWQuCisg
ICAgICAgIGRlcmVmRmluaXNoZWRTb3VyY2VOb2RlcygpOworCisgICAgICAgIC8vIERvbid0IGRl
bGV0ZSBpbiB0aGUgcmVhbC10aW1lIHRocmVhZC4gTGV0IHRoZSBtYWluIHRocmVhZCBkbyBpdC4K
KyAgICAgICAgLy8gUmVmLWNvdW50ZWQgb2JqZWN0cyBoZWxkIGJ5IGNlcnRhaW4gQXVkaW9Ob2Rl
cyBtYXkgbm90IGJlIHRocmVhZC1zYWZlLgorICAgICAgICBzY2hlZHVsZU5vZGVEZWxldGlvbigp
OworCisgICAgICAgIC8vIEZpeHVwIHRoZSBzdGF0ZSBvZiBhbnkgZGlydHkgQXVkaW9Ob2RlSW5w
dXRzIGFuZCBBdWRpb05vZGVPdXRwdXRzLgorICAgICAgICBoYW5kbGVEaXJ0eUF1ZGlvTm9kZUlu
cHV0cygpOworICAgICAgICBoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMoKTsKKyAgICAgICAg
CisgICAgICAgIGlmIChtdXN0UmVsZWFzZUxvY2spCisgICAgICAgICAgICB1bmxvY2soKTsKKyAg
ICB9Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0OjpoYW5kbGVEZWZlcnJlZEZpbmlzaERlcmVmcygp
Cit7CisgICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSAmJiBpc0dyYXBoT3duZXIoKSk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZGVmZXJyZWRGaW5pc2hEZXJlZkxpc3Quc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgQXVkaW9Ob2RlKiBub2RlID0gbV9kZWZlcnJlZEZpbmlzaERlcmVm
TGlzdFtpXS5tX25vZGU7CisgICAgICAgIEF1ZGlvTm9kZTo6UmVmVHlwZSByZWZUeXBlID0gbV9k
ZWZlcnJlZEZpbmlzaERlcmVmTGlzdFtpXS5tX3JlZlR5cGU7CisgICAgICAgIG5vZGUtPmZpbmlz
aERlcmVmKHJlZlR5cGUpOworICAgIH0KKyAgICAKKyAgICBtX2RlZmVycmVkRmluaXNoRGVyZWZM
aXN0LmNsZWFyKCk7Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0OjptYXJrRm9yRGVsZXRpb24oQXVk
aW9Ob2RlKiBub2RlKQoreworICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7CisgICAgbV9ub2Rl
c1RvRGVsZXRlLmFwcGVuZChub2RlKTsKK30KKwordm9pZCBBdWRpb0NvbnRleHQ6OnNjaGVkdWxl
Tm9kZURlbGV0aW9uKCkKK3sKKyAgICBib29sIGlzR29vZCA9IG1faXNJbml0aWFsaXplZCAmJiBp
c0dyYXBoT3duZXIoKTsKKyAgICBBU1NFUlQoaXNHb29kKTsKKyAgICBpZiAoIWlzR29vZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gTWFrZSBzdXJlIHRvIGNhbGwgZGVsZXRlTWFya2VkTm9k
ZXMoKSBvbiBtYWluIHRocmVhZC4gICAgCisgICAgaWYgKG1fbm9kZXNUb0RlbGV0ZS5zaXplKCkg
JiYgIW1faXNEZWxldGlvblNjaGVkdWxlZCkgeworICAgICAgICBtX2lzRGVsZXRpb25TY2hlZHVs
ZWQgPSB0cnVlOworCisgICAgICAgIC8vIERvbid0IGxldCBvdXJzZWxmIGdldCBkZWxldGVkIGJl
Zm9yZSB0aGUgY2FsbGJhY2suCisgICAgICAgIC8vIFNlZSBtYXRjaGluZyBkZXJlZigpIGluIGRl
bGV0ZU1hcmtlZE5vZGVzRGlzcGF0Y2goKS4KKyAgICAgICAgcmVmKCk7CisgICAgICAgIGNhbGxP
bk1haW5UaHJlYWQoZGVsZXRlTWFya2VkTm9kZXNEaXNwYXRjaCwgdGhpcyk7CisgICAgfQorfQor
Cit2b2lkIEF1ZGlvQ29udGV4dDo6ZGVsZXRlTWFya2VkTm9kZXNEaXNwYXRjaCh2b2lkKiB1c2Vy
RGF0YSkKK3sKKyAgICBBdWRpb0NvbnRleHQqIGNvbnRleHQgPSByZWludGVycHJldF9jYXN0PEF1
ZGlvQ29udGV4dCo+KHVzZXJEYXRhKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisgICAgaWYgKCFj
b250ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICBjb250ZXh0LT5kZWxldGVNYXJrZWROb2Rl
cygpOworICAgIGNvbnRleHQtPmRlcmVmKCk7Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0OjpkZWxl
dGVNYXJrZWROb2RlcygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIEF1
dG9Mb2NrZXIgbG9ja2VyKHRoaXMpOworICAgIAorICAgIC8vIE5vdGU6IGRlbGV0aW5nIGFuIEF1
ZGlvTm9kZSBjYW4gY2F1c2UgbV9ub2Rlc1RvRGVsZXRlIHRvIGdyb3cuCisgICAgd2hpbGUgKHNp
emVfdCBuID0gbV9ub2Rlc1RvRGVsZXRlLnNpemUoKSkgeworICAgICAgICBBdWRpb05vZGUqIG5v
ZGUgPSBtX25vZGVzVG9EZWxldGVbbiAtIDFdOworICAgICAgICBtX25vZGVzVG9EZWxldGUucmVt
b3ZlTGFzdCgpOworCisgICAgICAgIC8vIEJlZm9yZSBkZWxldGluZyB0aGUgbm9kZSwgY2xlYXIg
b3V0IGFueSBBdWRpb05vZGVJbnB1dHMgZnJvbSBtX2RpcnR5QXVkaW9Ob2RlSW5wdXRzLgorICAg
ICAgICB1bnNpZ25lZCBudW1iZXJPZklucHV0cyA9IG5vZGUtPm51bWJlck9mSW5wdXRzKCk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklucHV0czsgKytpKQorICAg
ICAgICAgICAgbV9kaXJ0eUF1ZGlvTm9kZUlucHV0cy5yZW1vdmUobm9kZS0+aW5wdXQoaSkpOwor
CisgICAgICAgIC8vIEJlZm9yZSBkZWxldGluZyB0aGUgbm9kZSwgY2xlYXIgb3V0IGFueSBBdWRp
b05vZGVPdXRwdXRzIGZyb20gbV9kaXJ0eUF1ZGlvTm9kZU91dHB1dHMuCisgICAgICAgIHVuc2ln
bmVkIG51bWJlck9mT3V0cHV0cyA9IG5vZGUtPm51bWJlck9mT3V0cHV0cygpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZPdXRwdXRzOyArK2kpCisgICAgICAgICAg
ICBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5yZW1vdmUobm9kZS0+b3V0cHV0KGkpKTsKKworICAg
ICAgICAvLyBGaW5hbGx5LCBkZWxldGUgaXQuCisgICAgICAgIGRlbGV0ZSBub2RlOworICAgIH0K
KyAgICAKKyAgICBtX2lzRGVsZXRpb25TY2hlZHVsZWQgPSBmYWxzZTsKK30KKwordm9pZCBBdWRp
b0NvbnRleHQ6Om1hcmtBdWRpb05vZGVJbnB1dERpcnR5KEF1ZGlvTm9kZUlucHV0KiBpbnB1dCkK
K3sKKyAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOyAgICAKKyAgICBtX2RpcnR5QXVkaW9Ob2Rl
SW5wdXRzLmFkZChpbnB1dCk7Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0OjptYXJrQXVkaW9Ob2Rl
T3V0cHV0RGlydHkoQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQpCit7CisgICAgQVNTRVJUKGlzR3Jh
cGhPd25lcigpKTsgICAgCisgICAgbV9kaXJ0eUF1ZGlvTm9kZU91dHB1dHMuYWRkKG91dHB1dCk7
Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0eUF1ZGlvTm9kZUlucHV0cygpCit7
CisgICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsgICAgCisKKyAgICBmb3IgKEhhc2hTZXQ8QXVk
aW9Ob2RlSW5wdXQqPjo6aXRlcmF0b3IgaSA9IG1fZGlydHlBdWRpb05vZGVJbnB1dHMuYmVnaW4o
KTsgaSAhPSBtX2RpcnR5QXVkaW9Ob2RlSW5wdXRzLmVuZCgpOyArK2kpCisgICAgICAgICgqaSkt
PnVwZGF0ZVJlbmRlcmluZ1N0YXRlKCk7CisKKyAgICBtX2RpcnR5QXVkaW9Ob2RlSW5wdXRzLmNs
ZWFyKCk7Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1
dHMoKQoreworICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7ICAgIAorCisgICAgZm9yIChIYXNo
U2V0PEF1ZGlvTm9kZU91dHB1dCo+OjppdGVyYXRvciBpID0gbV9kaXJ0eUF1ZGlvTm9kZU91dHB1
dHMuYmVnaW4oKTsgaSAhPSBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5lbmQoKTsgKytpKQorICAg
ICAgICAoKmkpLT51cGRhdGVSZW5kZXJpbmdTdGF0ZSgpOworCisgICAgbV9kaXJ0eUF1ZGlvTm9k
ZU91dHB1dHMuY2xlYXIoKTsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBBdWRpb0NvbnRleHQ6
OmludGVyZmFjZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJm
YWNlRm9yQXVkaW9Db250ZXh0OworfQorCitTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBBdWRpb0Nv
bnRleHQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBkb2N1
bWVudCgpOworfQorCit2b2lkIEF1ZGlvQ29udGV4dDo6c3RhcnRSZW5kZXJpbmcoKQoreworICAg
IGRlc3RpbmF0aW9uKCktPnN0YXJ0UmVuZGVyaW5nKCk7Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0
OjpmaXJlQ29tcGxldGlvbkV2ZW50KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIGlmICghaXNNYWluVGhyZWFkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
QXVkaW9CdWZmZXIqIHJlbmRlcmVkQnVmZmVyID0gbV9yZW5kZXJUYXJnZXQuZ2V0KCk7CisKKyAg
ICBBU1NFUlQocmVuZGVyZWRCdWZmZXIpOworICAgIGlmICghcmVuZGVyZWRCdWZmZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIEF2b2lkIGZpcmluZyB0aGUgZXZlbnQgaWYgdGhlIGRvY3Vt
ZW50IGhhcyBhbHJlYWR5IGdvbmUgYXdheS4KKyAgICBpZiAoaGFzRG9jdW1lbnQoKSkgeworICAg
ICAgICAvLyBDYWxsIHRoZSBvZmZsaW5lIHJlbmRlcmluZyBjb21wbGV0aW9uIGV2ZW50IGxpc3Rl
bmVyLgorICAgICAgICBkaXNwYXRjaEV2ZW50KE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6
Y3JlYXRlKHJlbmRlcmVkQnVmZmVyKSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCShyZXZpc2lvbiAxMTEyMzMpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oOjExMTIzMykKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEF1ZGlvQ29udGV4dF9o
CisjZGVmaW5lIEF1ZGlvQ29udGV4dF9oCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIK
KyNpbmNsdWRlICJBc3luY0F1ZGlvRGVjb2Rlci5oIgorI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisj
aW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVy
LmgiCisjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJIUlRGRGF0YWJhc2VMb2Fk
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9t
aWNTdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9CdWZm
ZXI7CitjbGFzcyBBdWRpb0J1ZmZlckNhbGxiYWNrOworY2xhc3MgQXVkaW9CdWZmZXJTb3VyY2VO
b2RlOworY2xhc3MgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOworY2xhc3MgSFRNTE1lZGlh
RWxlbWVudDsKK2NsYXNzIEF1ZGlvQ2hhbm5lbE1lcmdlcjsKK2NsYXNzIEF1ZGlvQ2hhbm5lbFNw
bGl0dGVyOworY2xhc3MgQXVkaW9HYWluTm9kZTsKK2NsYXNzIEF1ZGlvUGFubmVyTm9kZTsKK2Ns
YXNzIEF1ZGlvTGlzdGVuZXI7CitjbGFzcyBCaXF1YWRGaWx0ZXJOb2RlOworY2xhc3MgRGVsYXlO
b2RlOworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBMb3dQYXNzMkZpbHRlck5vZGU7CitjbGFzcyBI
aWdoUGFzczJGaWx0ZXJOb2RlOworY2xhc3MgQ29udm9sdmVyTm9kZTsKK2NsYXNzIER5bmFtaWNz
Q29tcHJlc3Nvck5vZGU7CitjbGFzcyBSZWFsdGltZUFuYWx5c2VyTm9kZTsKK2NsYXNzIFdhdmVT
aGFwZXJOb2RlOworY2xhc3MgSmF2YVNjcmlwdEF1ZGlvTm9kZTsKKworLy8gQXVkaW9Db250ZXh0
IGlzIHRoZSBjb3JuZXJzdG9uZSBvZiB0aGUgd2ViIGF1ZGlvIEFQSSBhbmQgYWxsIEF1ZGlvTm9k
ZXMgYXJlIGNyZWF0ZWQgZnJvbSBpdC4KKy8vIEZvciB0aHJlYWQgc2FmZXR5IGJldHdlZW4gdGhl
IGF1ZGlvIHRocmVhZCBhbmQgdGhlIG1haW4gdGhyZWFkLCBpdCBoYXMgYSByZW5kZXJpbmcgZ3Jh
cGggbG9ja2luZyBtZWNoYW5pc20uIAorCitjbGFzcyBBdWRpb0NvbnRleHQgOiBwdWJsaWMgQWN0
aXZlRE9NT2JqZWN0LCBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QXVkaW9Db250ZXh0Piwg
cHVibGljIEV2ZW50VGFyZ2V0IHsKK3B1YmxpYzoKKyAgICAvLyBDcmVhdGUgYW4gQXVkaW9Db250
ZXh0IGZvciByZW5kZXJpbmcgdG8gdGhlIGF1ZGlvIGhhcmR3YXJlLgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEF1ZGlvQ29udGV4dD4gY3JlYXRlKERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwor
CisgICAgLy8gQ3JlYXRlIGFuIEF1ZGlvQ29udGV4dCBmb3Igb2ZmbGluZSAobm9uLXJlYWx0aW1l
KSByZW5kZXJpbmcuCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXVkaW9Db250ZXh0PiBjcmVhdGVP
ZmZsaW5lQ29udGV4dChEb2N1bWVudCosIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVf
dCBudW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSwgRXhjZXB0aW9uQ29kZSYpOworCisg
ICAgdmlydHVhbCB+QXVkaW9Db250ZXh0KCk7CisKKyAgICBib29sIGlzSW5pdGlhbGl6ZWQoKSBj
b25zdDsKKyAgICAKKyAgICBib29sIGlzT2ZmbGluZUNvbnRleHQoKSB7IHJldHVybiBtX2lzT2Zm
bGluZUNvbnRleHQ7IH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIGluaXRpYWxpemUoKSB3
YXMgY2FsbGVkIEFORCBhbGwgYXN5bmNocm9ub3VzIGluaXRpYWxpemF0aW9uIGhhcyBjb21wbGV0
ZWQuCisgICAgYm9vbCBpc1J1bm5hYmxlKCkgY29uc3Q7CisKKyAgICAvLyBEb2N1bWVudCBub3Rp
ZmljYXRpb24KKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOworCisgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50KCkgY29uc3Q7IC8vIEFTU0VSVHMgaWYgZG9jdW1lbnQgbm8gbG9uZ2VyIGV4aXN0cy4KKyAg
ICBib29sIGhhc0RvY3VtZW50KCk7CisKKyAgICBBdWRpb0Rlc3RpbmF0aW9uTm9kZSogZGVzdGlu
YXRpb24oKSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZS5nZXQoKTsgfQorICAgIHNpemVfdCBj
dXJyZW50U2FtcGxlRnJhbWUoKSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZS0+Y3VycmVudFNh
bXBsZUZyYW1lKCk7IH0KKyAgICBkb3VibGUgY3VycmVudFRpbWUoKSB7IHJldHVybiBtX2Rlc3Rp
bmF0aW9uTm9kZS0+Y3VycmVudFRpbWUoKTsgfQorICAgIGZsb2F0IHNhbXBsZVJhdGUoKSB7IHJl
dHVybiBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpOyB9CisKKyAgICBQYXNzUmVmUHRy
PEF1ZGlvQnVmZmVyPiBjcmVhdGVCdWZmZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6
ZV90IG51bWJlck9mRnJhbWVzLCBmbG9hdCBzYW1wbGVSYXRlLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gY3JlYXRlQnVmZmVyKEFycmF5QnVmZmVyKiwgYm9v
bCBtaXhUb01vbm8sIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIC8vIEFzeW5jaHJvbm91cyBhdWRp
byBmaWxlIGRhdGEgZGVjb2RpbmcuCisgICAgdm9pZCBkZWNvZGVBdWRpb0RhdGEoQXJyYXlCdWZm
ZXIqLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEF1ZGlvQnVm
ZmVyQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJiBlYyk7CisKKyAgICBBdWRpb0xpc3RlbmVyKiBs
aXN0ZW5lcigpIHsgcmV0dXJuIG1fbGlzdGVuZXIuZ2V0KCk7IH0KKworICAgIC8vIFRoZSBBdWRp
b05vZGUgY3JlYXRlIG1ldGhvZHMgYXJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQgKGZyb20g
SmF2YVNjcmlwdCkuCisgICAgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlclNvdXJjZU5vZGU+IGNyZWF0
ZUJ1ZmZlclNvdXJjZSgpOworI2lmIEVOQUJMRShWSURFTykKKyAgICBQYXNzUmVmUHRyPE1lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZT4gY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKEhUTUxNZWRp
YUVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisjZW5kaWYKKyAgICBQYXNzUmVmUHRyPEF1ZGlv
R2Fpbk5vZGU+IGNyZWF0ZUdhaW5Ob2RlKCk7CisgICAgUGFzc1JlZlB0cjxCaXF1YWRGaWx0ZXJO
b2RlPiBjcmVhdGVCaXF1YWRGaWx0ZXIoKTsKKyAgICBQYXNzUmVmUHRyPFdhdmVTaGFwZXJOb2Rl
PiBjcmVhdGVXYXZlU2hhcGVyKCk7CisgICAgUGFzc1JlZlB0cjxEZWxheU5vZGU+IGNyZWF0ZURl
bGF5Tm9kZSgpOworICAgIFBhc3NSZWZQdHI8RGVsYXlOb2RlPiBjcmVhdGVEZWxheU5vZGUoZG91
YmxlIG1heERlbGF5VGltZSk7CisgICAgUGFzc1JlZlB0cjxMb3dQYXNzMkZpbHRlck5vZGU+IGNy
ZWF0ZUxvd1Bhc3MyRmlsdGVyKCk7CisgICAgUGFzc1JlZlB0cjxIaWdoUGFzczJGaWx0ZXJOb2Rl
PiBjcmVhdGVIaWdoUGFzczJGaWx0ZXIoKTsKKyAgICBQYXNzUmVmUHRyPEF1ZGlvUGFubmVyTm9k
ZT4gY3JlYXRlUGFubmVyKCk7CisgICAgUGFzc1JlZlB0cjxDb252b2x2ZXJOb2RlPiBjcmVhdGVD
b252b2x2ZXIoKTsKKyAgICBQYXNzUmVmUHRyPER5bmFtaWNzQ29tcHJlc3Nvck5vZGU+IGNyZWF0
ZUR5bmFtaWNzQ29tcHJlc3NvcigpOyAgICAKKyAgICBQYXNzUmVmUHRyPFJlYWx0aW1lQW5hbHlz
ZXJOb2RlPiBjcmVhdGVBbmFseXNlcigpOworICAgIFBhc3NSZWZQdHI8SmF2YVNjcmlwdEF1ZGlv
Tm9kZT4gY3JlYXRlSmF2YVNjcmlwdE5vZGUoc2l6ZV90IGJ1ZmZlclNpemUpOworICAgIFBhc3NS
ZWZQdHI8QXVkaW9DaGFubmVsU3BsaXR0ZXI+IGNyZWF0ZUNoYW5uZWxTcGxpdHRlcigpOworICAg
IFBhc3NSZWZQdHI8QXVkaW9DaGFubmVsTWVyZ2VyPiBjcmVhdGVDaGFubmVsTWVyZ2VyKCk7CisK
KyAgICAvLyBXaGVuIGEgc291cmNlIG5vZGUgaGFzIG5vIG1vcmUgcHJvY2Vzc2luZyB0byBkbyAo
aGFzIGZpbmlzaGVkIHBsYXlpbmcpLCB0aGVuIGl0IHRlbGxzIHRoZSBjb250ZXh0IHRvIGRlcmVm
ZXJlbmNlIGl0LgorICAgIHZvaWQgbm90aWZ5Tm9kZUZpbmlzaGVkUHJvY2Vzc2luZyhBdWRpb05v
ZGUqKTsKKworICAgIC8vIENhbGxlZCBhdCB0aGUgc3RhcnQgb2YgZWFjaCByZW5kZXIgcXVhbnR1
bS4KKyAgICB2b2lkIGhhbmRsZVByZVJlbmRlclRhc2tzKCk7CisKKyAgICAvLyBDYWxsZWQgYXQg
dGhlIGVuZCBvZiBlYWNoIHJlbmRlciBxdWFudHVtLgorICAgIHZvaWQgaGFuZGxlUG9zdFJlbmRl
clRhc2tzKCk7CisKKyAgICAvLyBDYWxsZWQgcGVyaW9kaWNhbGx5IGF0IHRoZSBlbmQgb2YgZWFj
aCByZW5kZXIgcXVhbnR1bSB0byBkZXJlZmVyZW5jZSBmaW5pc2hlZCBzb3VyY2Ugbm9kZXMuCisg
ICAgdm9pZCBkZXJlZkZpbmlzaGVkU291cmNlTm9kZXMoKTsKKworICAgIC8vIFdlIHNjaGVkdWxl
IGRlbGV0aW9uIG9mIGFsbCBtYXJrZWQgbm9kZXMgYXQgdGhlIGVuZCBvZiBlYWNoIHJlYWx0aW1l
IHJlbmRlciBxdWFudHVtLgorICAgIHZvaWQgbWFya0ZvckRlbGV0aW9uKEF1ZGlvTm9kZSopOwor
ICAgIHZvaWQgZGVsZXRlTWFya2VkTm9kZXMoKTsKKyAgICAKKyAgICAvLyBLZWVwcyB0cmFjayBv
ZiB0aGUgbnVtYmVyIG9mIGNvbm5lY3Rpb25zIG1hZGUuCisgICAgdm9pZCBpbmNyZW1lbnRDb25u
ZWN0aW9uQ291bnQoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICAgICAgbV9jb25uZWN0aW9uQ291bnQrKzsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjb25uZWN0
aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2Nvbm5lY3Rpb25Db3VudDsgfQorCisgICAgLy8K
KyAgICAvLyBUaHJlYWQgU2FmZXR5IGFuZCBHcmFwaCBMb2NraW5nOgorICAgIC8vCisgICAgCisg
ICAgdm9pZCBzZXRBdWRpb1RocmVhZChUaHJlYWRJZGVudGlmaWVyIHRocmVhZCkgeyBtX2F1ZGlv
VGhyZWFkID0gdGhyZWFkOyB9IC8vIEZJWE1FOiBjaGVjayBlaXRoZXIgbm90IGluaXRpYWxpemVk
IG9yIHRoZSBzYW1lCisgICAgVGhyZWFkSWRlbnRpZmllciBhdWRpb1RocmVhZCgpIGNvbnN0IHsg
cmV0dXJuIG1fYXVkaW9UaHJlYWQ7IH0KKyAgICBib29sIGlzQXVkaW9UaHJlYWQoKSBjb25zdDsK
KworICAgIC8vIFJldHVybnMgdHJ1ZSBvbmx5IGFmdGVyIHRoZSBhdWRpbyB0aHJlYWQgaGFzIGJl
ZW4gc3RhcnRlZCBhbmQgdGhlbiBzaHV0ZG93bi4KKyAgICBib29sIGlzQXVkaW9UaHJlYWRGaW5p
c2hlZCgpIHsgcmV0dXJuIG1faXNBdWRpb1RocmVhZEZpbmlzaGVkOyB9CisgICAgCisgICAgLy8g
bXVzdFJlbGVhc2VMb2NrIGlzIHNldCB0byB0cnVlIGlmIHdlIGFjcXVpcmVkIHRoZSBsb2NrIGlu
IHRoaXMgbWV0aG9kIGNhbGwgYW5kIGNhbGxlciBtdXN0IHVubG9jaygpLCBmYWxzZSBpZiBpdCB3
YXMgcHJldmlvdXNseSBhY3F1aXJlZC4KKyAgICB2b2lkIGxvY2soYm9vbCYgbXVzdFJlbGVhc2VM
b2NrKTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBvd24gdGhlIGxvY2suCisgICAgLy8g
bXVzdFJlbGVhc2VMb2NrIGlzIHNldCB0byB0cnVlIGlmIHdlIGFjcXVpcmVkIHRoZSBsb2NrIGlu
IHRoaXMgbWV0aG9kIGNhbGwgYW5kIGNhbGxlciBtdXN0IHVubG9jaygpLCBmYWxzZSBpZiBpdCB3
YXMgcHJldmlvdXNseSBhY3F1aXJlZC4KKyAgICBib29sIHRyeUxvY2soYm9vbCYgbXVzdFJlbGVh
c2VMb2NrKTsKKworICAgIHZvaWQgdW5sb2NrKCk7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhpcyB0aHJlYWQgb3ducyB0aGUgY29udGV4dCdzIGxvY2suCisgICAgYm9vbCBpc0dyYXBoT3du
ZXIoKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdGhlIG1heGltdW0gbnVtdWJlciBvZiBjaGFu
bmVscyB3ZSBjYW4gc3VwcG9ydC4KKyAgICBzdGF0aWMgdW5zaWduZWQgbWF4TnVtYmVyT2ZDaGFu
bmVscygpIHsgcmV0dXJuIE1heE51bWJlck9mQ2hhbm5lbHM7fQorCisgICAgY2xhc3MgQXV0b0xv
Y2tlciB7CisgICAgcHVibGljOgorICAgICAgICBBdXRvTG9ja2VyKEF1ZGlvQ29udGV4dCogY29u
dGV4dCkKKyAgICAgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICAgICAgICAgIGNvbnRleHQtPmxvY2sobV9tdXN0
UmVsZWFzZUxvY2spOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB+QXV0b0xvY2tlcigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX211c3RSZWxlYXNlTG9jaykKKyAgICAgICAg
ICAgICAgICBtX2NvbnRleHQtPnVubG9jaygpOworICAgICAgICB9CisgICAgcHJpdmF0ZToKKyAg
ICAgICAgQXVkaW9Db250ZXh0KiBtX2NvbnRleHQ7CisgICAgICAgIGJvb2wgbV9tdXN0UmVsZWFz
ZUxvY2s7CisgICAgfTsKKyAgICAKKyAgICAvLyBJbiBBdWRpb05vZGU6OmRlcmVmKCkgYSB0cnlM
b2NrKCkgaXMgdXNlZCBmb3IgY2FsbGluZyBmaW5pc2hEZXJlZigpLCBidXQgaWYgaXQgZmFpbHMg
a2VlcCB0cmFjayBoZXJlLgorICAgIHZvaWQgYWRkRGVmZXJyZWRGaW5pc2hEZXJlZihBdWRpb05v
ZGUqLCBBdWRpb05vZGU6OlJlZlR5cGUpOworCisgICAgLy8gSW4gdGhlIGF1ZGlvIHRocmVhZCBh
dCB0aGUgc3RhcnQgb2YgZWFjaCByZW5kZXIgY3ljbGUsIHdlJ2xsIGNhbGwgaGFuZGxlRGVmZXJy
ZWRGaW5pc2hEZXJlZnMoKS4KKyAgICB2b2lkIGhhbmRsZURlZmVycmVkRmluaXNoRGVyZWZzKCk7
CisKKyAgICAvLyBPbmx5IGFjY2Vzc2VkIHdoZW4gdGhlIGdyYXBoIGxvY2sgaXMgaGVsZC4KKyAg
ICB2b2lkIG1hcmtBdWRpb05vZGVJbnB1dERpcnR5KEF1ZGlvTm9kZUlucHV0Kik7CisgICAgdm9p
ZCBtYXJrQXVkaW9Ob2RlT3V0cHV0RGlydHkoQXVkaW9Ob2RlT3V0cHV0Kik7CisKKyAgICAvLyBF
dmVudFRhcmdldAorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1l
KCkgY29uc3Q7CisgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgY29uc3Q7CisgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50
VGFyZ2V0RGF0YSgpIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsgfQorICAgIHZpcnR1YWwg
RXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKSB7IHJldHVybiAmbV9ldmVu
dFRhcmdldERhdGE7IH0KKworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoY29t
cGxldGUpOworCisgICAgLy8gUmVjb25jaWxlIHJlZi9kZXJlZiB3aGljaCBhcmUgZGVmaW5lZCBi
b3RoIGluIFRocmVhZFNhZmVSZWZDb3VudGVkIGFuZCBFdmVudFRhcmdldC4KKyAgICB1c2luZyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxBdWRpb0NvbnRleHQ+OjpyZWY7CisgICAgdXNpbmcgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8QXVkaW9Db250ZXh0Pjo6ZGVyZWY7CisKKyAgICB2b2lkIHN0YXJ0UmVu
ZGVyaW5nKCk7CisgICAgdm9pZCBmaXJlQ29tcGxldGlvbkV2ZW50KCk7CisgICAgCisgICAgc3Rh
dGljIHVuc2lnbmVkIHNfaGFyZHdhcmVDb250ZXh0Q291bnQ7CisgICAgCitwcml2YXRlOgorICAg
IEF1ZGlvQ29udGV4dChEb2N1bWVudCopOworICAgIEF1ZGlvQ29udGV4dChEb2N1bWVudCosIHVu
c2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQgc2Ft
cGxlUmF0ZSk7CisgICAgdm9pZCBjb25zdHJ1Y3RDb21tb24oKTsKKworICAgIHZvaWQgbGF6eUlu
aXRpYWxpemUoKTsKKyAgICB2b2lkIHVuaW5pdGlhbGl6ZSgpOworICAgIHN0YXRpYyB2b2lkIHVu
aW5pdGlhbGl6ZURpc3BhdGNoKHZvaWQqIHVzZXJEYXRhKTsKKworICAgIHZvaWQgc2NoZWR1bGVO
b2RlRGVsZXRpb24oKTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVNYXJrZWROb2Rlc0Rpc3BhdGNo
KHZvaWQqIHVzZXJEYXRhKTsKKyAgICAKKyAgICBib29sIG1faXNJbml0aWFsaXplZDsKKyAgICBi
b29sIG1faXNBdWRpb1RocmVhZEZpbmlzaGVkOworICAgIGJvb2wgbV9pc0F1ZGlvVGhyZWFkU2h1
dGRvd247CisKKyAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKKworICAgIC8vIFRoZSBjb250ZXh0
IGl0c2VsZiBrZWVwcyBhIHJlZmVyZW5jZSB0byBhbGwgc291cmNlIG5vZGVzLiAgVGhlIHNvdXJj
ZSBub2RlcywgdGhlbiByZWZlcmVuY2UgYWxsIG5vZGVzIHRoZXkncmUgY29ubmVjdGVkIHRvLgor
ICAgIC8vIEluIHR1cm4sIHRoZXNlIG5vZGVzIHJlZmVyZW5jZSBhbGwgbm9kZXMgdGhleSdyZSBj
b25uZWN0ZWQgdG8uICBBbGwgbm9kZXMgYXJlIHVsdGltYXRlbHkgY29ubmVjdGVkIHRvIHRoZSBB
dWRpb0Rlc3RpbmF0aW9uTm9kZS4KKyAgICAvLyBXaGVuIHRoZSBjb250ZXh0IGRlcmVmZXJlbmNl
cyBhIHNvdXJjZSBub2RlLCBpdCB3aWxsIGJlIGRlYWN0aXZhdGVkIGZyb20gdGhlIHJlbmRlcmlu
ZyBncmFwaCBhbG9uZyB3aXRoIGFsbCBvdGhlciBub2RlcyBpdCBpcworICAgIC8vIHVuaXF1ZWx5
IGNvbm5lY3RlZCB0by4gIFNlZSB0aGUgQXVkaW9Ob2RlOjpyZWYoKSBhbmQgQXVkaW9Ob2RlOjpk
ZXJlZigpIG1ldGhvZHMgZm9yIG1vcmUgZGV0YWlscy4KKyAgICB2b2lkIHJlZk5vZGUoQXVkaW9O
b2RlKik7CisgICAgdm9pZCBkZXJlZk5vZGUoQXVkaW9Ob2RlKik7CisKKyAgICAvLyBXaGVuIHRo
ZSBjb250ZXh0IGdvZXMgYXdheSwgdGhlcmUgbWlnaHQgc3RpbGwgYmUgc29tZSBzb3VyY2VzIHdo
aWNoIGhhdmVuJ3QgZmluaXNoZWQgcGxheWluZy4KKyAgICAvLyBNYWtlIHN1cmUgdG8gZGVyZWZl
cmVuY2UgdGhlbSBoZXJlLgorICAgIHZvaWQgZGVyZWZVbmZpbmlzaGVkU291cmNlTm9kZXMoKTsK
KworICAgIFJlZlB0cjxBdWRpb0Rlc3RpbmF0aW9uTm9kZT4gbV9kZXN0aW5hdGlvbk5vZGU7Cisg
ICAgUmVmUHRyPEF1ZGlvTGlzdGVuZXI+IG1fbGlzdGVuZXI7CisKKyAgICAvLyBPbmx5IGFjY2Vz
c2VkIGluIHRoZSBhdWRpbyB0aHJlYWQuCisgICAgVmVjdG9yPEF1ZGlvTm9kZSo+IG1fZmluaXNo
ZWROb2RlczsKKworICAgIC8vIFdlIGRvbid0IHVzZSBSZWZQdHI8QXVkaW9Ob2RlPiBoZXJlIGJl
Y2F1c2UgQXVkaW9Ob2RlIGhhcyBhIG1vcmUgY29tcGxleCByZWYoKSAvIGRlcmVmKCkgaW1wbGVt
ZW50YXRpb24KKyAgICAvLyB3aXRoIGFuIG9wdGlvbmFsIGFyZ3VtZW50IGZvciByZWZUeXBlLiAg
V2UgbmVlZCB0byB1c2UgdGhlIHNwZWNpYWwgcmVmVHlwZTogUmVmVHlwZUNvbm5lY3Rpb24KKyAg
ICAvLyBFaXRoZXIgYWNjZXNzZWQgd2hlbiB0aGUgZ3JhcGggbG9jayBpcyBoZWxkLCBvciBvbiB0
aGUgbWFpbiB0aHJlYWQgd2hlbiB0aGUgYXVkaW8gdGhyZWFkIGhhcyBmaW5pc2hlZC4KKyAgICBW
ZWN0b3I8QXVkaW9Ob2RlKj4gbV9yZWZlcmVuY2VkTm9kZXM7CisKKyAgICAvLyBBY2N1bXVsYXRl
IG5vZGVzIHdoaWNoIG5lZWQgdG8gYmUgZGVsZXRlZCBoZXJlLgorICAgIC8vIFRoZXkgd2lsbCBi
ZSBzY2hlZHVsZWQgZm9yIGRlbGV0aW9uIChvbiB0aGUgbWFpbiB0aHJlYWQpIGF0IHRoZSBlbmQg
b2YgYSByZW5kZXIgY3ljbGUgKGluIHJlYWx0aW1lIHRocmVhZCkuCisgICAgVmVjdG9yPEF1ZGlv
Tm9kZSo+IG1fbm9kZXNUb0RlbGV0ZTsKKyAgICBib29sIG1faXNEZWxldGlvblNjaGVkdWxlZDsK
KworICAgIC8vIE9ubHkgYWNjZXNzZWQgd2hlbiB0aGUgZ3JhcGggbG9jayBpcyBoZWxkLgorICAg
IEhhc2hTZXQ8QXVkaW9Ob2RlSW5wdXQqPiBtX2RpcnR5QXVkaW9Ob2RlSW5wdXRzOworICAgIEhh
c2hTZXQ8QXVkaW9Ob2RlT3V0cHV0Kj4gbV9kaXJ0eUF1ZGlvTm9kZU91dHB1dHM7CisgICAgdm9p
ZCBoYW5kbGVEaXJ0eUF1ZGlvTm9kZUlucHV0cygpOworICAgIHZvaWQgaGFuZGxlRGlydHlBdWRp
b05vZGVPdXRwdXRzKCk7CisKKyAgICB1bnNpZ25lZCBtX2Nvbm5lY3Rpb25Db3VudDsKKworICAg
IC8vIEdyYXBoIGxvY2tpbmcuCisgICAgTXV0ZXggbV9jb250ZXh0R3JhcGhNdXRleDsKKyAgICB2
b2xhdGlsZSBUaHJlYWRJZGVudGlmaWVyIG1fYXVkaW9UaHJlYWQ7CisgICAgdm9sYXRpbGUgVGhy
ZWFkSWRlbnRpZmllciBtX2dyYXBoT3duZXJUaHJlYWQ7IC8vIGlmIHRoZSBsb2NrIGlzIGhlbGQg
dGhlbiB0aGlzIGlzIHRoZSB0aHJlYWQgd2hpY2ggb3ducyBpdCwgb3RoZXJ3aXNlID09IFVuZGVm
aW5lZFRocmVhZElkZW50aWZpZXIKKyAgICAKKyAgICAvLyBEZWZlcnJlZCBkZS1yZWZlcmVuY2lu
Zy4KKyAgICBzdHJ1Y3QgUmVmSW5mbyB7CisgICAgICAgIFJlZkluZm8oQXVkaW9Ob2RlKiBub2Rl
LCBBdWRpb05vZGU6OlJlZlR5cGUgcmVmVHlwZSkKKyAgICAgICAgICAgIDogbV9ub2RlKG5vZGUp
CisgICAgICAgICAgICAsIG1fcmVmVHlwZShyZWZUeXBlKQorICAgICAgICB7CisgICAgICAgIH0K
KyAgICAgICAgQXVkaW9Ob2RlKiBtX25vZGU7CisgICAgICAgIEF1ZGlvTm9kZTo6UmVmVHlwZSBt
X3JlZlR5cGU7CisgICAgfTsgICAgCisKKyAgICAvLyBPbmx5IGFjY2Vzc2VkIGluIHRoZSBhdWRp
byB0aHJlYWQuCisgICAgVmVjdG9yPFJlZkluZm8+IG1fZGVmZXJyZWRGaW5pc2hEZXJlZkxpc3Q7
CisgICAgCisgICAgLy8gSFJURiBEYXRhYmFzZSBsb2FkZXIKKyAgICBSZWZQdHI8SFJURkRhdGFi
YXNlTG9hZGVyPiBtX2hydGZEYXRhYmFzZUxvYWRlcjsKKworICAgIC8vIEV2ZW50VGFyZ2V0Cisg
ICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQorICAgIHZpcnR1YWwg
dm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CisgICAgRXZlbnRUYXJnZXREYXRh
IG1fZXZlbnRUYXJnZXREYXRhOworCisgICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBtX3JlbmRlclRh
cmdldDsKKyAgICAKKyAgICBib29sIG1faXNPZmZsaW5lQ29udGV4dDsKKworICAgIEFzeW5jQXVk
aW9EZWNvZGVyIG1fYXVkaW9EZWNvZGVyOworCisgICAgLy8gVGhpcyBpcyBjb25zaWRlcmluZyAz
MiBpcyBsYXJnZSBlbm91Z2ggZm9yIG11bHRpcGxlIGNoYW5uZWxzIGF1ZGlvLiAKKyAgICAvLyBJ
dCBpcyBzb21ld2hhdCBhcmJpdHJhcnkgYW5kIGNvdWxkIGJlIGluY3JlYXNlZCBpZiBuZWNlc3Nh
cnkuCisgICAgZW51bSB7IE1heE51bWJlck9mQ2hhbm5lbHMgPSAzMiB9OworCit9OworCit9IC8v
IFdlYkNvcmUKKworI2VuZGlmIC8vIEF1ZGlvQ29udGV4dF9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCShyZXZpc2lvbiAxMTEy
MzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGw6MTExMjMz
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHdlYmF1ZGlv
IHsKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCisgICAg
ICAgIEFjdGl2ZURPTU9iamVjdCwKKyAgICAgICAgQ3VzdG9tQ29uc3RydWN0b3IsCisgICAgICAg
IENvbnN0cnVjdG9yUGFyYW1ldGVycz0wLAorICAgICAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwK
KyAgICAgICAgRXZlbnRUYXJnZXQKKyAgICBdIEF1ZGlvQ29udGV4dCB7CisgICAgICAgIC8vIEFs
bCByZW5kZXJlZCBhdWRpbyB1bHRpbWF0ZWx5IGNvbm5lY3RzIHRvIGRlc3RpbmF0aW9uLCB3aGlj
aCByZXByZXNlbnRzIHRoZSBhdWRpbyBoYXJkd2FyZS4KKyAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIEF1ZGlvRGVzdGluYXRpb25Ob2RlIGRlc3RpbmF0aW9uOworCisgICAgICAgIC8vIEFsbCBz
Y2hlZHVsZWQgdGltZXMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgdGltZSBpbiBzZWNvbmRzLgorICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgZmxvYXQgY3VycmVudFRpbWU7CisKKyAgICAgICAgLy8g
QWxsIEF1ZGlvTm9kZXMgaW4gdGhlIGNvbnRleHQgcnVuIGF0IHRoaXMgc2FtcGxlLXJhdGUgKGlu
IHNhbXBsZS1mcmFtZXMgcGVyIHNlY29uZCkuCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBm
bG9hdCBzYW1wbGVSYXRlOworCisgICAgICAgIC8vIEFsbCBwYW5uaW5nIGlzIHJlbGF0aXZlIHRv
IHRoaXMgbGlzdGVuZXIuCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb0xpc3RlbmVy
IGxpc3RlbmVyOworCisgICAgICAgIEF1ZGlvQnVmZmVyIGNyZWF0ZUJ1ZmZlcihpbiB1bnNpZ25l
ZCBsb25nIG51bWJlck9mQ2hhbm5lbHMsIGluIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZGcmFtZXMs
IGluIGZsb2F0IHNhbXBsZVJhdGUpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsK
KyAgICAgICAgQXVkaW9CdWZmZXIgY3JlYXRlQnVmZmVyKGluIEFycmF5QnVmZmVyIGJ1ZmZlciwg
aW4gYm9vbGVhbiBtaXhUb01vbm8pCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsK
KworICAgICAgICAvLyBBc3luY2hyb25vdXMgYXVkaW8gZmlsZSBkYXRhIGRlY29kaW5nLgorICAg
ICAgICB2b2lkIGRlY29kZUF1ZGlvRGF0YShpbiBBcnJheUJ1ZmZlciBhdWRpb0RhdGEsIGluIFtD
YWxsYmFja10gQXVkaW9CdWZmZXJDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2ssIGluIFtPcHRpb25h
bCwgQ2FsbGJhY2tdIEF1ZGlvQnVmZmVyQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaykKKyAgICAgICAg
ICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworCisgICAgICAgIC8vIFNvdXJjZXMKKyAgICAgICAg
QXVkaW9CdWZmZXJTb3VyY2VOb2RlIGNyZWF0ZUJ1ZmZlclNvdXJjZSgpOworI2lmIGRlZmluZWQo
RU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVfVklERU8KKyAgICAgICAgTWVkaWFFbGVtZW50QXVkaW9T
b3VyY2VOb2RlIGNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZShpbiBIVE1MTWVkaWFFbGVtZW50IG1l
ZGlhRWxlbWVudCkKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworI2VuZGlmCisg
ICAgICAgIC8vIFByb2Nlc3Npbmcgbm9kZXMKKyAgICAgICAgQXVkaW9HYWluTm9kZSBjcmVhdGVH
YWluTm9kZSgpOworICAgICAgICBEZWxheU5vZGUgY3JlYXRlRGVsYXlOb2RlKGluIFtPcHRpb25h
bF0gZG91YmxlIG1heERlbGF5VGltZSk7CisgICAgICAgIEJpcXVhZEZpbHRlck5vZGUgY3JlYXRl
QmlxdWFkRmlsdGVyKCk7CisgICAgICAgIFdhdmVTaGFwZXJOb2RlIGNyZWF0ZVdhdmVTaGFwZXIo
KTsKKyAgICAgICAgTG93UGFzczJGaWx0ZXJOb2RlIGNyZWF0ZUxvd1Bhc3MyRmlsdGVyKCk7Cisg
ICAgICAgIEhpZ2hQYXNzMkZpbHRlck5vZGUgY3JlYXRlSGlnaFBhc3MyRmlsdGVyKCk7CisgICAg
ICAgIEF1ZGlvUGFubmVyTm9kZSBjcmVhdGVQYW5uZXIoKTsKKyAgICAgICAgQ29udm9sdmVyTm9k
ZSBjcmVhdGVDb252b2x2ZXIoKTsKKyAgICAgICAgRHluYW1pY3NDb21wcmVzc29yTm9kZSBjcmVh
dGVEeW5hbWljc0NvbXByZXNzb3IoKTsKKyAgICAgICAgUmVhbHRpbWVBbmFseXNlck5vZGUgY3Jl
YXRlQW5hbHlzZXIoKTsKKyAgICAgICAgSmF2YVNjcmlwdEF1ZGlvTm9kZSBjcmVhdGVKYXZhU2Ny
aXB0Tm9kZShpbiB1bnNpZ25lZCBsb25nIGJ1ZmZlclNpemUpOworCisgICAgICAgIC8vIENoYW5u
ZWwgc3BsaXR0aW5nIGFuZCBtZXJnaW5nCisgICAgICAgIEF1ZGlvQ2hhbm5lbFNwbGl0dGVyIGNy
ZWF0ZUNoYW5uZWxTcGxpdHRlcigpOworICAgICAgICBBdWRpb0NoYW5uZWxNZXJnZXIgY3JlYXRl
Q2hhbm5lbE1lcmdlcigpOworCisgICAgICAgIC8vIE9mZmxpbmUgcmVuZGVyaW5nCisgICAgICAg
IC8vIHZvaWQgcHJlcGFyZU9mZmxpbmVCdWZmZXJSZW5kZXJpbmcoaW4gdW5zaWduZWQgbG9uZyBu
dW1iZXJPZkNoYW5uZWxzLCBpbiB1bnNpZ25lZCBsb25nIG51bWJlck9mRnJhbWVzLCBpbiBmbG9h
dCBzYW1wbGVSYXRlKTsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25jb21wbGV0
ZTsKKyAgICAgICAgdm9pZCBzdGFydFJlbmRlcmluZygpOworICAgIH07Cit9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRp
b25Ob2RlLmNwcAkocmV2aXNpb24gMTExMjMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHA6MTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgorCisj
aW5jbHVkZSAiQXVkaW9CdXMuaCIKKyNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJBdWRpb05vZGVJbnB1dC5oIgorI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgorI2luY2x1
ZGUgIkF1ZGlvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiRGVub3JtYWxEaXNhYmxlci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6QXVkaW9EZXN0
aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQorICAg
IDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCisgICAgLCBtX2N1cnJlbnRTYW1wbGVG
cmFtZSgwKQoreworICAgIGFkZElucHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVJbnB1dCh0aGlz
KSkpOworICAgIAorICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlRGVzdGluYXRpb24pOworfQorCitB
dWRpb0Rlc3RpbmF0aW9uTm9kZTo6fkF1ZGlvRGVzdGluYXRpb25Ob2RlKCkKK3sKKyAgICB1bmlu
aXRpYWxpemUoKTsKK30KKworLy8gVGhlIGF1ZGlvIGhhcmR3YXJlIGNhbGxzIHVzIGJhY2sgaGVy
ZSB0byBnZXRzIGl0cyBpbnB1dCBzdHJlYW0uCit2b2lkIEF1ZGlvRGVzdGluYXRpb25Ob2RlOjpw
cm92aWRlSW5wdXQoQXVkaW9CdXMqIGRlc3RpbmF0aW9uQnVzLCBzaXplX3QgbnVtYmVyT2ZGcmFt
ZXMpCit7CisgICAgLy8gV2UgZG9uJ3Qgd2FudCBkZW5vcm1hbHMgc2xvd2luZyBkb3duIGFueSBv
ZiB0aGUgYXVkaW8gcHJvY2Vzc2luZworICAgIC8vIHNpbmNlIHRoZXkgY2FuIHZlcnkgc2VyaW91
c2x5IGh1cnQgcGVyZm9ybWFuY2UuCisgICAgLy8gVGhpcyB3aWxsIHRha2UgY2FyZSBvZiBhbGwg
QXVkaW9Ob2RlcyBiZWNhdXNlIHRoZXkgYWxsIHByb2Nlc3Mgd2l0aGluIHRoaXMgc2NvcGUuCisg
ICAgRGVub3JtYWxEaXNhYmxlciBkZW5vcm1hbERpc2FibGVyOworICAgIAorICAgIGNvbnRleHQo
KS0+c2V0QXVkaW9UaHJlYWQoY3VycmVudFRocmVhZCgpKTsKKyAgICAKKyAgICBpZiAoIWNvbnRl
eHQoKS0+aXNSdW5uYWJsZSgpKSB7CisgICAgICAgIGRlc3RpbmF0aW9uQnVzLT56ZXJvKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBMZXQgdGhlIGNvbnRleHQgdGFrZSBjYXJl
IG9mIGFueSBidXNpbmVzcyBhdCB0aGUgc3RhcnQgb2YgZWFjaCByZW5kZXIgcXVhbnR1bS4KKyAg
ICBjb250ZXh0KCktPmhhbmRsZVByZVJlbmRlclRhc2tzKCk7CisKKyAgICAvLyBUaGlzIHdpbGwg
Y2F1c2UgdGhlIG5vZGUocykgY29ubmVjdGVkIHRvIHVzIHRvIHByb2Nlc3MsIHdoaWNoIGluIHR1
cm4gd2lsbCBwdWxsIG9uIHRoZWlyIGlucHV0KHMpLAorICAgIC8vIGFsbCB0aGUgd2F5IGJhY2t3
YXJkcyB0aHJvdWdoIHRoZSByZW5kZXJpbmcgZ3JhcGguCisgICAgQXVkaW9CdXMqIHJlbmRlcmVk
QnVzID0gaW5wdXQoMCktPnB1bGwoZGVzdGluYXRpb25CdXMsIG51bWJlck9mRnJhbWVzKTsKKyAg
ICAKKyAgICBpZiAoIXJlbmRlcmVkQnVzKQorICAgICAgICBkZXN0aW5hdGlvbkJ1cy0+emVybygp
OworICAgIGVsc2UgaWYgKHJlbmRlcmVkQnVzICE9IGRlc3RpbmF0aW9uQnVzKSB7CisgICAgICAg
IC8vIGluLXBsYWNlIHByb2Nlc3Npbmcgd2FzIG5vdCBwb3NzaWJsZSAtIHNvIGNvcHkKKyAgICAg
ICAgZGVzdGluYXRpb25CdXMtPmNvcHlGcm9tKCpyZW5kZXJlZEJ1cyk7CisgICAgfQorCisgICAg
Ly8gTGV0IHRoZSBjb250ZXh0IHRha2UgY2FyZSBvZiBhbnkgYnVzaW5lc3MgYXQgdGhlIGVuZCBv
ZiBlYWNoIHJlbmRlciBxdWFudHVtLgorICAgIGNvbnRleHQoKS0+aGFuZGxlUG9zdFJlbmRlclRh
c2tzKCk7CisgICAgCisgICAgLy8gQWR2YW5jZSBjdXJyZW50IHNhbXBsZS1mcmFtZS4KKyAgICBt
X2N1cnJlbnRTYW1wbGVGcmFtZSArPSBudW1iZXJPZkZyYW1lczsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2Rl
LmgJKHJldmlzaW9uIDExMTIzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9E
ZXN0aW5hdGlvbk5vZGUuaDoxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQXVkaW9EZXN0aW5hdGlvbk5vZGVfaAorI2RlZmluZSBB
dWRpb0Rlc3RpbmF0aW9uTm9kZV9oCisKKyNpbmNsdWRlICJBdWRpb0J1ZmZlci5oIgorI2luY2x1
ZGUgIkF1ZGlvTm9kZS5oIgorI2luY2x1ZGUgIkF1ZGlvU291cmNlUHJvdmlkZXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb0J1czsKK2NsYXNzIEF1ZGlvQ29udGV4dDsK
KyAgICAKK2NsYXNzIEF1ZGlvRGVzdGluYXRpb25Ob2RlIDogcHVibGljIEF1ZGlvTm9kZSwgcHVi
bGljIEF1ZGlvU291cmNlUHJvdmlkZXIgeworcHVibGljOgorICAgIEF1ZGlvRGVzdGluYXRpb25O
b2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOworICAgIHZpcnR1YWwgfkF1ZGlv
RGVzdGluYXRpb25Ob2RlKCk7CisgICAgCisgICAgLy8gQXVkaW9Ob2RlICAgCisgICAgdmlydHVh
bCB2b2lkIHByb2Nlc3Moc2l6ZV90KSB7IH07IC8vIHdlJ3JlIHB1bGxlZCBieSBoYXJkd2FyZSBz
byB0aGlzIGlzIG5ldmVyIGNhbGxlZAorICAgIHZpcnR1YWwgdm9pZCByZXNldCgpIHsgbV9jdXJy
ZW50U2FtcGxlRnJhbWUgPSAwOyB9OworICAgIAorICAgIC8vIFRoZSBhdWRpbyBoYXJkd2FyZSBj
YWxscyBoZXJlIHBlcmlvZGljYWxseSB0byBnZXRzIGl0cyBpbnB1dCBzdHJlYW0uCisgICAgdmly
dHVhbCB2b2lkIHByb3ZpZGVJbnB1dChBdWRpb0J1cyosIHNpemVfdCBudW1iZXJPZkZyYW1lcyk7
CisKKyAgICBzaXplX3QgY3VycmVudFNhbXBsZUZyYW1lKCkgeyByZXR1cm4gbV9jdXJyZW50U2Ft
cGxlRnJhbWU7IH0KKyAgICBkb3VibGUgY3VycmVudFRpbWUoKSB7IHJldHVybiBjdXJyZW50U2Ft
cGxlRnJhbWUoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oc2FtcGxlUmF0ZSgpKTsgfQorCisgICAg
dmlydHVhbCB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKCkgY29uc3QgeyByZXR1cm4gMjsgfSAv
LyBGSVhNRTogdXBkYXRlIHdoZW4gbXVsdGktY2hhbm5lbCAobW9yZSB0aGFuIHN0ZXJlbykgaXMg
c3VwcG9ydGVkCisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRSZW5kZXJpbmcoKSA9IDA7CisgICAg
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiAwOyB9CisKKyAgICAvLyBDb3VudHMgdGhlIG51bWJlciBvZiBzYW1w
bGUtZnJhbWVzIHByb2Nlc3NlZCBieSB0aGUgZGVzdGluYXRpb24uCisgICAgc2l6ZV90IG1fY3Vy
cmVudFNhbXBsZUZyYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gQXVkaW9EZXN0aW5hdGlvbk5vZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGwJKHJldmlzaW9u
IDExMTIzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5v
ZGUuaWRsOjExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9E
ZXN0aW5hdGlvbk5vZGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCittb2R1bGUgYXVkaW8geworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlv
bmFsPVdFQl9BVURJTywKKyAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKKyAgICBdIEF1ZGlv
RGVzdGluYXRpb25Ob2RlIDogQXVkaW9Ob2RlIHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IGxvbmcgbnVtYmVyT2ZDaGFubmVsczsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb0dhaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbi5oCShyZXZpc2lvbiAxMTEyMzMpCShmcm9tIFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvR2Fpbi5oOjExMTIzMykKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9HYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQXVkaW9HYWluX2gKKyNkZWZpbmUgQXVkaW9HYWluX2gKKworI2lu
Y2x1ZGUgIkF1ZGlvUGFyYW0uaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvR2FpbiA6IHB1YmxpYyBBdWRpb1BhcmFtIHsK
K3B1YmxpYzogICAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb0dhaW4+IGNyZWF0ZShjb25z
dCBjaGFyKiBuYW1lLCBkb3VibGUgZGVmYXVsdFZhbHVlLCBkb3VibGUgbWluVmFsdWUsIGRvdWJs
ZSBtYXhWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVkaW9HYWlu
KG5hbWUsIGRlZmF1bHRWYWx1ZSwgbWluVmFsdWUsIG1heFZhbHVlKSk7CisgICAgfQorCitwcml2
YXRlOgorICAgIEF1ZGlvR2Fpbihjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUgZGVmYXVsdFZhbHVl
LCBkb3VibGUgbWluVmFsdWUsIGRvdWJsZSBtYXhWYWx1ZSkKKyAgICAgICAgOiBBdWRpb1BhcmFt
KG5hbWUsIGRlZmF1bHRWYWx1ZSwgbWluVmFsdWUsIG1heFZhbHVlKQorICAgIHsKKyAgICB9Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBBdWRpb1BhcmFtX2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9HYWluLmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbi5pZGwJKHJl
dmlzaW9uIDExMTIzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9HYWluLmlk
bDoxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbi5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBhdWRpbyB7CisgICAg
aW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAorICAgICAgICBKU0dl
bmVyYXRlVG9KU09iamVjdAorICAgIF0gQXVkaW9HYWluIDogQXVkaW9QYXJhbSB7CisgICAgfTsK
K30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0dh
aW5Ob2RlLmNwcAkocmV2aXNpb24gMTExMjMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb0dhaW5Ob2RlLmNwcDoxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJ
TykKKworI2luY2x1ZGUgIkF1ZGlvR2Fpbk5vZGUuaCIKKworI2luY2x1ZGUgIkF1ZGlvQnVzLmgi
CisjaW5jbHVkZSAiQXVkaW9Ob2RlSW5wdXQuaCIKKyNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitBdWRpb0dhaW5Ob2RlOjpBdWRpb0dhaW5Ob2Rl
KEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKKyAgICA6IEF1ZGlvTm9k
ZShjb250ZXh0LCBzYW1wbGVSYXRlKQorICAgICwgbV9sYXN0R2FpbigxLjApCisgICAgLCBtX3Nh
bXBsZUFjY3VyYXRlR2FpblZhbHVlcyhBdWRpb05vZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXMp
IC8vIEZJWE1FOiBjYW4gcHJvYmFibHkgc2hhcmUgdGVtcCBidWZmZXIgaW4gY29udGV4dAorewor
ICAgIG1fZ2FpbiA9IEF1ZGlvR2Fpbjo6Y3JlYXRlKCJnYWluIiwgMS4wLCAwLjAsIDEuMCk7Cisg
ICAgbV9nYWluLT5zZXRDb250ZXh0KGNvbnRleHQpOworCisgICAgYWRkSW5wdXQoYWRvcHRQdHIo
bmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7CisgICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBB
dWRpb05vZGVPdXRwdXQodGhpcywgMSkpKTsKKyAgICAKKyAgICBzZXROb2RlVHlwZShOb2RlVHlw
ZUdhaW4pOworICAgIAorICAgIGluaXRpYWxpemUoKTsKK30KKwordm9pZCBBdWRpb0dhaW5Ob2Rl
Ojpwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAgLy8gRklYTUU6IGZvciBz
b21lIGNhc2VzIHRoZXJlIGlzIGEgbmljZSBvcHRpbWl6YXRpb24gdG8gYXZvaWQgcHJvY2Vzc2lu
ZyBoZXJlLCBhbmQgbGV0IHRoZSBnYWluIGNoYW5nZQorICAgIC8vIGhhcHBlbiBpbiB0aGUgc3Vt
bWluZyBqdW5jdGlvbiBpbnB1dCBvZiB0aGUgQXVkaW9Ob2RlIHdlJ3JlIGNvbm5lY3RlZCB0by4K
KyAgICAvLyBUaGVuIHdlIGNhbiBhdm9pZCBhbGwgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIEF1
ZGlvQnVzKiBvdXRwdXRCdXMgPSBvdXRwdXQoMCktPmJ1cygpOworICAgIEFTU0VSVChvdXRwdXRC
dXMpOworCisgICAgaWYgKCFpc0luaXRpYWxpemVkKCkgfHwgIWlucHV0KDApLT5pc0Nvbm5lY3Rl
ZCgpKQorICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQXVk
aW9CdXMqIGlucHV0QnVzID0gaW5wdXQoMCktPmJ1cygpOworCisgICAgICAgIGlmIChnYWluKCkt
Pmhhc1RpbWVsaW5lVmFsdWVzKCkpIHsKKyAgICAgICAgICAgIC8vIEFwcGx5IHNhbXBsZS1hY2N1
cmF0ZSBnYWluIHNjYWxpbmcgZm9yIHByZWNpc2UgZW52ZWxvcGVzLCBncmFpbiB3aW5kb3dzLCBl
dGMuCisgICAgICAgICAgICBBU1NFUlQoZnJhbWVzVG9Qcm9jZXNzIDw9IG1fc2FtcGxlQWNjdXJh
dGVHYWluVmFsdWVzLnNpemUoKSk7CisgICAgICAgICAgICBpZiAoZnJhbWVzVG9Qcm9jZXNzIDw9
IG1fc2FtcGxlQWNjdXJhdGVHYWluVmFsdWVzLnNpemUoKSkgeworICAgICAgICAgICAgICAgIGZs
b2F0KiBnYWluVmFsdWVzID0gbV9zYW1wbGVBY2N1cmF0ZUdhaW5WYWx1ZXMuZGF0YSgpOworICAg
ICAgICAgICAgICAgIGdhaW4oKS0+Y2FsY3VsYXRlU2FtcGxlQWNjdXJhdGVWYWx1ZXMoZ2FpblZh
bHVlcywgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICAgICAgICAgICAgICBvdXRwdXRCdXMtPmNvcHlX
aXRoU2FtcGxlQWNjdXJhdGVHYWluVmFsdWVzRnJvbSgqaW5wdXRCdXMsIGdhaW5WYWx1ZXMsIGZy
YW1lc1RvUHJvY2Vzcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAvLyBBcHBseSB0aGUgZ2FpbiB3aXRoIGRlLXppcHBlcmluZyBpbnRvIHRoZSBvdXRwdXQg
YnVzLgorICAgICAgICAgICAgb3V0cHV0QnVzLT5jb3B5V2l0aEdhaW5Gcm9tKCppbnB1dEJ1cywg
Jm1fbGFzdEdhaW4sIGdhaW4oKS0+dmFsdWUoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgQXVkaW9HYWluTm9kZTo6cmVzZXQoKQoreworICAgIC8vIFNuYXAgZGlyZWN0bHkgdG8gZGVz
aXJlZCBnYWluLgorICAgIG1fbGFzdEdhaW4gPSBnYWluKCktPnZhbHVlKCk7Cit9CisKKy8vIEZJ
WE1FOiB0aGlzIGNhbiBnbyBhd2F5IHdoZW4gd2UgZG8gbWl4aW5nIHdpdGggZ2FpbiBkaXJlY3Rs
eSBpbiBzdW1taW5nIGp1bmN0aW9uIG9mIEF1ZGlvTm9kZUlucHV0CisvLworLy8gQXMgc29vbiBh
cyB3ZSBrbm93IHRoZSBjaGFubmVsIGNvdW50IG9mIG91ciBpbnB1dCwgd2UgY2FuIGxhemlseSBp
bml0aWFsaXplLgorLy8gU29tZXRpbWVzIHRoaXMgbWF5IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25j
ZSB3aXRoIGRpZmZlcmVudCBjaGFubmVsIGNvdW50cywgaW4gd2hpY2ggY2FzZSB3ZSBtdXN0IHNh
ZmVseQorLy8gdW5pbml0aWFsaXplIGFuZCB0aGVuIHJlLWluaXRpYWxpemUgd2l0aCB0aGUgbmV3
IGNoYW5uZWwgY291bnQuCit2b2lkIEF1ZGlvR2Fpbk5vZGU6OmNoZWNrTnVtYmVyT2ZDaGFubmVs
c0ZvcklucHV0KEF1ZGlvTm9kZUlucHV0KiBpbnB1dCkKK3sKKyAgICBBU1NFUlQoY29udGV4dCgp
LT5pc0F1ZGlvVGhyZWFkKCkgJiYgY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7CisKKyAgICBB
U1NFUlQoaW5wdXQgJiYgaW5wdXQgPT0gdGhpcy0+aW5wdXQoMCkpOworICAgIGlmIChpbnB1dCAh
PSB0aGlzLT5pbnB1dCgwKSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICB1bnNpZ25l
ZCBudW1iZXJPZkNoYW5uZWxzID0gaW5wdXQtPm51bWJlck9mQ2hhbm5lbHMoKTsgICAgCisKKyAg
ICBpZiAoaXNJbml0aWFsaXplZCgpICYmIG51bWJlck9mQ2hhbm5lbHMgIT0gb3V0cHV0KDApLT5u
dW1iZXJPZkNoYW5uZWxzKCkpIHsKKyAgICAgICAgLy8gV2UncmUgYWxyZWFkeSBpbml0aWFsaXpl
ZCBidXQgdGhlIGNoYW5uZWwgY291bnQgaGFzIGNoYW5nZWQuCisgICAgICAgIHVuaW5pdGlhbGl6
ZSgpOworICAgIH0KKworICAgIGlmICghaXNJbml0aWFsaXplZCgpKSB7CisgICAgICAgIC8vIFRo
aXMgd2lsbCBwcm9wYWdhdGUgdGhlIGNoYW5uZWwgY291bnQgdG8gYW55IG5vZGVzIGNvbm5lY3Rl
ZCBmdXJ0aGVyIGRvd25zdHJlYW0gaW4gdGhlIGdyYXBoLgorICAgICAgICBvdXRwdXQoMCktPnNl
dE51bWJlck9mQ2hhbm5lbHMobnVtYmVyT2ZDaGFubmVscyk7CisgICAgICAgIGluaXRpYWxpemUo
KTsKKyAgICB9CisKKyAgICBBdWRpb05vZGU6OmNoZWNrTnVtYmVyT2ZDaGFubmVsc0ZvcklucHV0
KGlucHV0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9H
YWluTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9HYWluTm9kZS5oCShyZXZpc2lvbiAxMTEyMzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaDoxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBBdWRpb0dhaW5Ob2RlX2gKKyNkZWZpbmUgQXVkaW9HYWlu
Tm9kZV9oCisKKyNpbmNsdWRlICJBdWRpb0dhaW4uaCIKKyNpbmNsdWRlICJBdWRpb05vZGUuaCIK
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb0NvbnRleHQ7CisgICAgCisvLyBB
dWRpb0dhaW5Ob2RlIGlzIGFuIEF1ZGlvTm9kZSB3aXRoIG9uZSBpbnB1dCBhbmQgb25lIG91dHB1
dCB3aGljaCBhcHBsaWVzIGEgZ2FpbiAodm9sdW1lKSBjaGFuZ2UgdG8gdGhlIGF1ZGlvIHNpZ25h
bC4KKy8vIERlLXppcHBlcmluZyAoc21vb3RoaW5nKSBpcyBhcHBsaWVkIHdoZW4gdGhlIGdhaW4g
dmFsdWUgaXMgY2hhbmdlZCBkeW5hbWljYWxseS4KKworY2xhc3MgQXVkaW9HYWluTm9kZSA6IHB1
YmxpYyBBdWRpb05vZGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlvR2Fp
bk5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvR2Fpbk5vZGUoY29udGV4dCwg
c2FtcGxlUmF0ZSkpOyAgICAgIAorICAgIH0KKyAgICAKKyAgICAvLyBBdWRpb05vZGUKKyAgICB2
aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVzZXQoKTsKKworICAgIC8vIENhbGxlZCBpbiB0aGUgbWFpbiB0aHJlYWQgd2hlbiB0
aGUgbnVtYmVyIG9mIGNoYW5uZWxzIGZvciB0aGUgaW5wdXQgbWF5IGhhdmUgY2hhbmdlZC4KKyAg
ICB2aXJ0dWFsIHZvaWQgY2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQoQXVkaW9Ob2RlSW5w
dXQqKTsKKworICAgIC8vIEphdmFTY3JpcHQgaW50ZXJmYWNlCisgICAgQXVkaW9HYWluKiBnYWlu
KCkgeyByZXR1cm4gbV9nYWluLmdldCgpOyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAKK3ByaXZhdGU6CisgICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUo
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9CisKKyAgICBBdWRpb0dhaW5Ob2RlKEF1ZGlv
Q29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOworCisgICAgZmxvYXQgbV9sYXN0R2FpbjsgLy8g
Zm9yIGRlLXppcHBlcmluZworICAgIFJlZlB0cjxBdWRpb0dhaW4+IG1fZ2FpbjsKKworICAgIEF1
ZGlvRmxvYXRBcnJheSBtX3NhbXBsZUFjY3VyYXRlR2FpblZhbHVlczsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEF1ZGlvR2Fpbk5vZGVfaApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaWRsCShyZXZp
c2lvbiAxMTEyMzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUu
aWRsOjExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9HYWlu
Tm9kZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21v
ZHVsZSBhdWRpbyB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FV
RElPLAorICAgICAgICBKU0dlbmVyYXRlVG9KU09iamVjdAorICAgIF0gQXVkaW9HYWluTm9kZSA6
IEF1ZGlvTm9kZSB7CisgICAgICAgIC8vIEZJWE1FOiBldmVudHVhbGx5IGl0IHdpbGwgYmUgaW50
ZXJlc3RpbmcgdG8gcmVtb3ZlIHRoZSByZWFkb25seSByZXN0cmljdGlvbiwgYnV0IG5lZWQgdG8g
cHJvcGVybHkgZGVhbCB3aXRoIHRocmVhZCBzYWZldHkgaGVyZS4KKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIEF1ZGlvR2FpbiBnYWluOworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5jcHAJKHJldmlzaW9uIDEx
MTIzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5jcHA6MTEx
MjMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkF1ZGlvTGlzdGVuZXIuaCIKKwor
I2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQXVkaW9MaXN0
ZW5lcjo6QXVkaW9MaXN0ZW5lcigpCisgICAgOiBtX3Bvc2l0aW9uKDAsIDAsIDApCisgICAgLCBt
X29yaWVudGF0aW9uKDAsIDAsIC0xKQorICAgICwgbV91cFZlY3RvcigwLCAxLCAwKQorICAgICwg
bV92ZWxvY2l0eSgwLCAwLCAwKQorICAgICwgbV9kb3BwbGVyRmFjdG9yKDEpCisgICAgLCBtX3Nw
ZWVkT2ZTb3VuZCgzNDMuMykKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9MaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5oCShyZXZpc2lvbiAxMTEyMzMpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaDoxMTEyMzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBBdWRpb0xpc3RlbmVyX2gKKyNkZWZpbmUgQXVkaW9MaXN0
ZW5lcl9oCisKKyNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworLy8gQXVkaW9MaXN0ZW5lciBtYWludGFpbnMgdGhlIHN0YXRlIG9mIHRoZSBsaXN0ZW5l
ciBpbiB0aGUgYXVkaW8gc2NlbmUgYXMgZGVmaW5lZCBpbiB0aGUgT3BlbkFMIHNwZWNpZmljYXRp
b24uCisKK2NsYXNzIEF1ZGlvTGlzdGVuZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxBdWRpb0xpc3Rl
bmVyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXVkaW9MaXN0ZW5lcj4gY3Jl
YXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVkaW9MaXN0ZW5lcigp
KTsKKyAgICB9CisKKyAgICAvLyBQb3NpdGlvbgorICAgIHZvaWQgc2V0UG9zaXRpb24oZmxvYXQg
eCwgZmxvYXQgeSwgZmxvYXQgeikgeyBzZXRQb3NpdGlvbihGbG9hdFBvaW50M0QoeCwgeSwgeikp
OyB9CisgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50M0QgJnBvc2l0aW9uKSB7
IG1fcG9zaXRpb24gPSBwb3NpdGlvbjsgfQorICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CisKKyAgICAvLyBPcmllbnRhdGlvbgor
ICAgIHZvaWQgc2V0T3JpZW50YXRpb24oZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQg
dXBYLCBmbG9hdCB1cFksIGZsb2F0IHVwWikKKyAgICB7CisgICAgICAgIHNldE9yaWVudGF0aW9u
KEZsb2F0UG9pbnQzRCh4LCB5LCB6KSk7CisgICAgICAgIHNldFVwVmVjdG9yKEZsb2F0UG9pbnQz
RCh1cFgsIHVwWSwgdXBaKSk7CisgICAgfQorICAgIHZvaWQgc2V0T3JpZW50YXRpb24oY29uc3Qg
RmxvYXRQb2ludDNEICZvcmllbnRhdGlvbikgeyBtX29yaWVudGF0aW9uID0gb3JpZW50YXRpb247
IH0KKyAgICBjb25zdCBGbG9hdFBvaW50M0QmIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9vcmllbnRhdGlvbjsgfQorCisgICAgLy8gVXAtdmVjdG9yCisgICAgdm9pZCBzZXRVcFZlY3Rv
cihjb25zdCBGbG9hdFBvaW50M0QgJnVwVmVjdG9yKSB7IG1fdXBWZWN0b3IgPSB1cFZlY3Rvcjsg
fQorICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgdXBWZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3Vw
VmVjdG9yOyB9CisKKyAgICAvLyBWZWxvY2l0eQorICAgIHZvaWQgc2V0VmVsb2NpdHkoZmxvYXQg
eCwgZmxvYXQgeSwgZmxvYXQgeikgeyBzZXRWZWxvY2l0eShGbG9hdFBvaW50M0QoeCwgeSwgeikp
OyB9CisgICAgdm9pZCBzZXRWZWxvY2l0eShjb25zdCBGbG9hdFBvaW50M0QgJnZlbG9jaXR5KSB7
IG1fdmVsb2NpdHkgPSB2ZWxvY2l0eTsgfQorICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgdmVsb2Np
dHkoKSBjb25zdCB7IHJldHVybiBtX3ZlbG9jaXR5OyB9CisKKyAgICAvLyBEb3BwbGVyIGZhY3Rv
cgorICAgIHZvaWQgc2V0RG9wcGxlckZhY3Rvcihkb3VibGUgZG9wcGxlckZhY3RvcikgeyBtX2Rv
cHBsZXJGYWN0b3IgPSBkb3BwbGVyRmFjdG9yOyB9CisgICAgZG91YmxlIGRvcHBsZXJGYWN0b3Io
KSBjb25zdCB7IHJldHVybiBtX2RvcHBsZXJGYWN0b3I7IH0KKworICAgIC8vIFNwZWVkIG9mIHNv
dW5kCisgICAgdm9pZCBzZXRTcGVlZE9mU291bmQoZG91YmxlIHNwZWVkT2ZTb3VuZCkgeyBtX3Nw
ZWVkT2ZTb3VuZCA9IHNwZWVkT2ZTb3VuZDsgfQorICAgIGRvdWJsZSBzcGVlZE9mU291bmQoKSBj
b25zdCB7IHJldHVybiBtX3NwZWVkT2ZTb3VuZDsgfQorCitwcml2YXRlOgorICAgIEF1ZGlvTGlz
dGVuZXIoKTsKKworICAgIC8vIFBvc2l0aW9uIC8gT3JpZW50YXRpb24KKyAgICBGbG9hdFBvaW50
M0QgbV9wb3NpdGlvbjsKKyAgICBGbG9hdFBvaW50M0QgbV9vcmllbnRhdGlvbjsKKyAgICBGbG9h
dFBvaW50M0QgbV91cFZlY3RvcjsKKworICAgIEZsb2F0UG9pbnQzRCBtX3ZlbG9jaXR5OworCisg
ICAgZG91YmxlIG1fZG9wcGxlckZhY3RvcjsKKyAgICBkb3VibGUgbV9zcGVlZE9mU291bmQ7Cit9
OworCit9IC8vIFdlYkNvcmUKKworI2VuZGlmIC8vIEF1ZGlvTGlzdGVuZXJfaApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaWRsCShy
ZXZpc2lvbiAxMTEyMzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTGlzdGVu
ZXIuaWRsOjExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9M
aXN0ZW5lci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBhdWRp
byB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPCisgICAg
XSBBdWRpb0xpc3RlbmVyIHsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0IGRvcHBsZXJGYWN0b3I7
ICAvLyBzYW1lIGFzIE9wZW5BTCAoZGVmYXVsdCAxLjApCisgICAgICAgIGF0dHJpYnV0ZSBmbG9h
dCBzcGVlZE9mU291bmQ7ICAgLy8gaW4gbWV0ZXJzIC8gc2Vjb25kIChkZWZhdWx0IDM0My4zKQor
CisgICAgICAgIHZvaWQgc2V0UG9zaXRpb24oaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSwgaW4gZmxv
YXQgeik7CisgICAgICAgIHZvaWQgc2V0T3JpZW50YXRpb24oaW4gZmxvYXQgeCwgaW4gZmxvYXQg
eSwgaW4gZmxvYXQgeiwgaW4gZmxvYXQgeFVwLCBpbiBmbG9hdCB5VXAsIGluIGZsb2F0IHpVcCk7
CisgICAgICAgIHZvaWQgc2V0VmVsb2NpdHkoaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSwgaW4gZmxv
YXQgeik7CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvTm9kZS5jcHAJKHJldmlzaW9uIDExMTIzMykJKGZyb20gU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQXVkaW9Ob2RlLmNwcDoxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElP
KQorCisjaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCisKKyNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIK
KyNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgorI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgor
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQXVk
aW9Ob2RlOjpBdWRpb05vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRl
KQorICAgIDogbV9pc0luaXRpYWxpemVkKGZhbHNlKQorICAgICwgbV9ub2RlVHlwZShOb2RlVHlw
ZVVua25vd24pCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fc2FtcGxlUmF0ZShz
YW1wbGVSYXRlKQorICAgICwgbV9sYXN0UHJvY2Vzc2luZ1RpbWUoLTEuMCkKKyAgICAsIG1fbm9y
bWFsUmVmQ291bnQoMSkgLy8gc3RhcnQgb3V0IHdpdGggbm9ybWFsIHJlZkNvdW50ID09IDEgKGxp
a2UgV1RGOjpSZWZDb3VudGVkIGNsYXNzKQorICAgICwgbV9jb25uZWN0aW9uUmVmQ291bnQoMCkK
KyAgICAsIG1fZGlzYWJsZWRSZWZDb3VudCgwKQorICAgICwgbV9pc01hcmtlZEZvckRlbGV0aW9u
KGZhbHNlKQorICAgICwgbV9pc0Rpc2FibGVkKGZhbHNlKQoreworI2lmIERFQlVHX0FVRElPTk9E
RV9SRUZFUkVOQ0VTCisgICAgaWYgKCFzX2lzTm9kZUNvdW50SW5pdGlhbGl6ZWQpIHsKKyAgICAg
ICAgc19pc05vZGVDb3VudEluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgYXRleGl0KEF1ZGlv
Tm9kZTo6cHJpbnROb2RlQ291bnRzKTsKKyAgICB9CisjZW5kaWYKK30KKworQXVkaW9Ob2RlOjp+
QXVkaW9Ob2RlKCkKK3sKKyNpZiBERUJVR19BVURJT05PREVfUkVGRVJFTkNFUworICAgIC0tc19u
b2RlQ291bnRbbm9kZVR5cGUoKV07CisgICAgcHJpbnRmKCIlcDogJWQ6IEF1ZGlvTm9kZTo6fkF1
ZGlvTm9kZSgpICVkICVkICVkXG4iLCB0aGlzLCBub2RlVHlwZSgpLCBtX25vcm1hbFJlZkNvdW50
LCBtX2Nvbm5lY3Rpb25SZWZDb3VudCwgbV9kaXNhYmxlZFJlZkNvdW50KTsKKyNlbmRpZgorfQor
Cit2b2lkIEF1ZGlvTm9kZTo6aW5pdGlhbGl6ZSgpCit7CisgICAgbV9pc0luaXRpYWxpemVkID0g
dHJ1ZTsKK30KKwordm9pZCBBdWRpb05vZGU6OnVuaW5pdGlhbGl6ZSgpCit7CisgICAgbV9pc0lu
aXRpYWxpemVkID0gZmFsc2U7Cit9CisKK3ZvaWQgQXVkaW9Ob2RlOjpzZXROb2RlVHlwZShOb2Rl
VHlwZSB0eXBlKQoreworICAgIG1fbm9kZVR5cGUgPSB0eXBlOworCisjaWYgREVCVUdfQVVESU9O
T0RFX1JFRkVSRU5DRVMKKyAgICArK3Nfbm9kZUNvdW50W3R5cGVdOworI2VuZGlmCit9CisKK3Zv
aWQgQXVkaW9Ob2RlOjpsYXp5SW5pdGlhbGl6ZSgpCit7CisgICAgaWYgKCFpc0luaXRpYWxpemVk
KCkpCisgICAgICAgIGluaXRpYWxpemUoKTsKK30KKwordm9pZCBBdWRpb05vZGU6OmFkZElucHV0
KFBhc3NPd25QdHI8QXVkaW9Ob2RlSW5wdXQ+IGlucHV0KQoreworICAgIG1faW5wdXRzLmFwcGVu
ZChpbnB1dCk7Cit9CisKK3ZvaWQgQXVkaW9Ob2RlOjphZGRPdXRwdXQoUGFzc093blB0cjxBdWRp
b05vZGVPdXRwdXQ+IG91dHB1dCkKK3sKKyAgICBtX291dHB1dHMuYXBwZW5kKG91dHB1dCk7Cit9
CisKK0F1ZGlvTm9kZUlucHV0KiBBdWRpb05vZGU6OmlucHV0KHVuc2lnbmVkIGkpCit7CisgICAg
aWYgKGkgPCBtX2lucHV0cy5zaXplKCkpCisgICAgICAgIHJldHVybiBtX2lucHV0c1tpXS5nZXQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworQXVkaW9Ob2RlT3V0cHV0KiBBdWRpb05vZGU6Om91dHB1
dCh1bnNpZ25lZCBpKQoreworICAgIGlmIChpIDwgbV9vdXRwdXRzLnNpemUoKSkKKyAgICAgICAg
cmV0dXJuIG1fb3V0cHV0c1tpXS5nZXQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBBdWRp
b05vZGU6OmNvbm5lY3QoQXVkaW9Ob2RlKiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgb3V0cHV0SW5k
ZXgsIHVuc2lnbmVkIGlucHV0SW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7IAorICAgIEF1ZGlvQ29udGV4dDo6QXV0b0xvY2tlciBsb2NrZXIo
Y29udGV4dCgpKTsKKworICAgIGlmICghZGVzdGluYXRpb24pIHsKKyAgICAgICAgZWMgPSBTWU5U
QVhfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU2FuaXR5IGNoZWNrIGlu
cHV0IGFuZCBvdXRwdXQgaW5kaWNlcy4KKyAgICBpZiAob3V0cHV0SW5kZXggPj0gbnVtYmVyT2ZP
dXRwdXRzKCkpIHsKKyAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChkZXN0aW5hdGlvbiAmJiBpbnB1dEluZGV4ID49IGRlc3RpbmF0
aW9uLT5udW1iZXJPZklucHV0cygpKSB7CisgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoY29udGV4dCgpICE9IGRlc3RpbmF0aW9u
LT5jb250ZXh0KCkpIHsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQXVkaW9Ob2RlSW5wdXQqIGlucHV0ID0gZGVzdGluYXRpb24tPmlucHV0
KGlucHV0SW5kZXgpOworICAgIEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0ID0gdGhpcy0+b3V0cHV0
KG91dHB1dEluZGV4KTsKKyAgICBpbnB1dC0+Y29ubmVjdChvdXRwdXQpOworCisgICAgLy8gTGV0
IGNvbnRleHQga25vdyB0aGF0IGEgY29ubmVjdGlvbiBoYXMgYmVlbiBtYWRlLgorICAgIGNvbnRl
eHQoKS0+aW5jcmVtZW50Q29ubmVjdGlvbkNvdW50KCk7Cit9CisKK3ZvaWQgQXVkaW9Ob2RlOjpk
aXNjb25uZWN0KHVuc2lnbmVkIG91dHB1dEluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEF1ZGlvQ29udGV4dDo6QXV0b0xvY2tlciBs
b2NrZXIoY29udGV4dCgpKTsKKworICAgIC8vIFNhbml0eSBjaGVjayBpbnB1dCBhbmQgb3V0cHV0
IGluZGljZXMuCisgICAgaWYgKG91dHB1dEluZGV4ID49IG51bWJlck9mT3V0cHV0cygpKSB7Cisg
ICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBBdWRpb05vZGVPdXRwdXQqIG91dHB1dCA9IHRoaXMtPm91dHB1dChvdXRwdXRJbmRleCk7Cisg
ICAgb3V0cHV0LT5kaXNjb25uZWN0QWxsSW5wdXRzKCk7Cit9CisKK3ZvaWQgQXVkaW9Ob2RlOjpw
cm9jZXNzSWZOZWNlc3Nhcnkoc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICBBU1NFUlQo
Y29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkpOworICAgIAorICAgIGlmICghaXNJbml0aWFsaXpl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBFbnN1cmUgdGhhdCB3ZSBvbmx5IHByb2Nl
c3Mgb25jZSBwZXIgcmVuZGVyaW5nIHF1YW50dW0uCisgICAgLy8gVGhpcyBoYW5kbGVzIHRoZSAi
ZmFub3V0IiBwcm9ibGVtIHdoZXJlIGFuIG91dHB1dCBpcyBjb25uZWN0ZWQgdG8gbXVsdGlwbGUg
aW5wdXRzLgorICAgIC8vIFRoZSBmaXJzdCB0aW1lIHdlJ3JlIGNhbGxlZCBkdXJpbmcgdGhpcyB0
aW1lIHNsaWNlIHdlIHByb2Nlc3MsIGJ1dCBhZnRlciB0aGF0IHdlIGRvbid0IHdhbnQgdG8gcmUt
cHJvY2VzcywKKyAgICAvLyBpbnN0ZWFkIG91ciBvdXRwdXQocykgd2lsbCBhbHJlYWR5IGhhdmUg
dGhlIHJlc3VsdHMgY2FjaGVkIGluIHRoZWlyIGJ1czsKKyAgICBkb3VibGUgY3VycmVudFRpbWUg
PSBjb250ZXh0KCktPmN1cnJlbnRUaW1lKCk7CisgICAgaWYgKG1fbGFzdFByb2Nlc3NpbmdUaW1l
ICE9IGN1cnJlbnRUaW1lKSB7CisgICAgICAgIG1fbGFzdFByb2Nlc3NpbmdUaW1lID0gY3VycmVu
dFRpbWU7IC8vIGltcG9ydGFudCB0byBmaXJzdCB1cGRhdGUgdGhpcyB0aW1lIGJlY2F1c2Ugb2Yg
ZmVlZGJhY2sgbG9vcHMgaW4gdGhlIHJlbmRlcmluZyBncmFwaAorICAgICAgICBwdWxsSW5wdXRz
KGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIHByb2Nlc3MoZnJhbWVzVG9Qcm9jZXNzKTsKKyAg
ICB9Cit9CisKK3ZvaWQgQXVkaW9Ob2RlOjpjaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1dChB
dWRpb05vZGVJbnB1dCogaW5wdXQpCit7CisgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1Ro
cmVhZCgpICYmIGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOworCisgICAgQVNTRVJUKG1faW5w
dXRzLmNvbnRhaW5zKGlucHV0KSk7CisgICAgaWYgKCFtX2lucHV0cy5jb250YWlucyhpbnB1dCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlucHV0LT51cGRhdGVJbnRlcm5hbEJ1cygpOworfQor
Cit2b2lkIEF1ZGlvTm9kZTo6cHVsbElucHV0cyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQorewor
ICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSk7CisgICAgCisgICAgLy8gUHJv
Y2VzcyBhbGwgb2YgdGhlIEF1ZGlvTm9kZXMgY29ubmVjdGVkIHRvIG91ciBpbnB1dHMuCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW5wdXRzLnNpemUoKTsgKytpKQorICAgICAgICBp
bnB1dChpKS0+cHVsbCgwLCBmcmFtZXNUb1Byb2Nlc3MpOworfQorCit2b2lkIEF1ZGlvTm9kZTo6
cmVmKFJlZlR5cGUgcmVmVHlwZSkKK3sKKyAgICBzd2l0Y2ggKHJlZlR5cGUpIHsKKyAgICBjYXNl
IFJlZlR5cGVOb3JtYWw6CisgICAgICAgIGF0b21pY0luY3JlbWVudCgmbV9ub3JtYWxSZWZDb3Vu
dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmVmVHlwZUNvbm5lY3Rpb246CisgICAgICAg
IGF0b21pY0luY3JlbWVudCgmbV9jb25uZWN0aW9uUmVmQ291bnQpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFJlZlR5cGVEaXNhYmxlZDoKKyAgICAgICAgYXRvbWljSW5jcmVtZW50KCZtX2Rp
c2FibGVkUmVmQ291bnQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyNpZiBERUJVR19BVURJT05PREVfUkVGRVJF
TkNFUworICAgIHByaW50ZigiJXA6ICVkOiBBdWRpb05vZGU6OnJlZiglZCkgJWQgJWQgJWRcbiIs
IHRoaXMsIG5vZGVUeXBlKCksIHJlZlR5cGUsIG1fbm9ybWFsUmVmQ291bnQsIG1fY29ubmVjdGlv
blJlZkNvdW50LCBtX2Rpc2FibGVkUmVmQ291bnQpOworI2VuZGlmCisKKyAgICAvLyBTZWUgdGhl
IGRpc2FibGluZyBjb2RlIGluIGZpbmlzaERlcmVmKCkgYmVsb3cuIFRoaXMgaGFuZGxlcyB0aGUg
Y2FzZSB3aGVyZSBhIG5vZGUKKyAgICAvLyBpcyBiZWluZyByZS1jb25uZWN0ZWQgYWZ0ZXIgYmVp
bmcgdXNlZCBhdCBsZWFzdCBvbmNlIGFuZCBkaXNjb25uZWN0ZWQuCisgICAgLy8gSW4gdGhpcyBj
YXNlLCB3ZSBuZWVkIHRvIHJlLWVuYWJsZS4KKyAgICBpZiAobV9pc0Rpc2FibGVkICYmIG1fY29u
bmVjdGlvblJlZkNvdW50ID4gMCAmJiByZWZUeXBlID09IFJlZlR5cGVDb25uZWN0aW9uKSB7Cisg
ICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIEF1ZGlvQ29udGV4dDo6QXV0
b0xvY2tlciBsb2NrZXIoY29udGV4dCgpKTsKKworICAgICAgICBtX2lzRGlzYWJsZWQgPSBmYWxz
ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb3V0cHV0cy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIG91dHB1dChpKS0+ZW5hYmxlKCk7CisgICAgfQorfQorCit2b2lkIEF1
ZGlvTm9kZTo6ZGVyZWYoUmVmVHlwZSByZWZUeXBlKQoreworICAgIC8vIFRoZSBhY3R1YWxseSB3
b3JrIGZvciBkZXJlZiBoYXBwZW5zIGNvbXBsZXRlbHkgd2l0aGluIHRoZSBhdWRpbyBjb250ZXh0
J3MgZ3JhcGggbG9jay4KKyAgICAvLyBJbiB0aGUgY2FzZSBvZiB0aGUgYXVkaW8gdGhyZWFkLCB3
ZSBtdXN0IHVzZSBhIHRyeUxvY2sgdG8gYXZvaWQgZ2xpdGNoZXMuCisgICAgYm9vbCBoYXNMb2Nr
ID0gZmFsc2U7CisgICAgYm9vbCBtdXN0UmVsZWFzZUxvY2sgPSBmYWxzZTsKKyAgICAKKyAgICBp
ZiAoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkpIHsKKyAgICAgICAgLy8gUmVhbC10aW1lIGF1
ZGlvIHRocmVhZCBtdXN0IG5vdCBjb250ZW5kIGxvY2sgKHRvIGF2b2lkIGdsaXRjaGVzKS4KKyAg
ICAgICAgaGFzTG9jayA9IGNvbnRleHQoKS0+dHJ5TG9jayhtdXN0UmVsZWFzZUxvY2spOworICAg
IH0gZWxzZSB7CisgICAgICAgIGNvbnRleHQoKS0+bG9jayhtdXN0UmVsZWFzZUxvY2spOworICAg
ICAgICBoYXNMb2NrID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKGhhc0xvY2spIHsKKyAg
ICAgICAgLy8gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBkZXJlZiB3b3JrIGhhcHBlbnMuCisgICAg
ICAgIGZpbmlzaERlcmVmKHJlZlR5cGUpOworCisgICAgICAgIGlmIChtdXN0UmVsZWFzZUxvY2sp
CisgICAgICAgICAgICBjb250ZXh0KCktPnVubG9jaygpOworICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIFdlIHdlcmUgdW5hYmxlIHRvIGdldCB0aGUgbG9jaywgc28gcHV0IHRoaXMgaW4gYSBsaXN0
IHRvIGZpbmlzaCB1cCBsYXRlci4KKyAgICAgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1Ro
cmVhZCgpKTsKKyAgICAgICAgY29udGV4dCgpLT5hZGREZWZlcnJlZEZpbmlzaERlcmVmKHRoaXMs
IHJlZlR5cGUpOworICAgIH0KKworICAgIC8vIE9uY2UgQXVkaW9Db250ZXh0Ojp1bmluaXRpYWxp
emUoKSBpcyBjYWxsZWQgdGhlcmUncyBubyBtb3JlIGNoYW5jZXMgZm9yIGRlbGV0ZU1hcmtlZE5v
ZGVzKCkgdG8gZ2V0IGNhbGxlZCwgc28gd2UgY2FsbCBoZXJlLgorICAgIC8vIFdlIGNhbid0IGNh
bGwgaW4gQXVkaW9Db250ZXh0Ojp+QXVkaW9Db250ZXh0KCkgc2luY2UgaXQgd2lsbCBuZXZlciBi
ZSBjYWxsZWQgYXMgbG9uZyBhcyBhbnkgQXVkaW9Ob2RlIGlzIGFsaXZlCisgICAgLy8gYmVjYXVz
ZSBBdWRpb05vZGVzIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnRleHQuCisgICAgaWYgKGNv
bnRleHQoKS0+aXNBdWRpb1RocmVhZEZpbmlzaGVkKCkpCisgICAgICAgIGNvbnRleHQoKS0+ZGVs
ZXRlTWFya2VkTm9kZXMoKTsKK30KKwordm9pZCBBdWRpb05vZGU6OmZpbmlzaERlcmVmKFJlZlR5
cGUgcmVmVHlwZSkKK3sKKyAgICBBU1NFUlQoY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Cisg
ICAgCisgICAgc3dpdGNoIChyZWZUeXBlKSB7CisgICAgY2FzZSBSZWZUeXBlTm9ybWFsOgorICAg
ICAgICBBU1NFUlQobV9ub3JtYWxSZWZDb3VudCA+IDApOworICAgICAgICBhdG9taWNEZWNyZW1l
bnQoJm1fbm9ybWFsUmVmQ291bnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJlZlR5cGVD
b25uZWN0aW9uOgorICAgICAgICBBU1NFUlQobV9jb25uZWN0aW9uUmVmQ291bnQgPiAwKTsKKyAg
ICAgICAgYXRvbWljRGVjcmVtZW50KCZtX2Nvbm5lY3Rpb25SZWZDb3VudCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUmVmVHlwZURpc2FibGVkOgorICAgICAgICBBU1NFUlQobV9kaXNhYmxl
ZFJlZkNvdW50ID4gMCk7CisgICAgICAgIGF0b21pY0RlY3JlbWVudCgmbV9kaXNhYmxlZFJlZkNv
dW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorICAgIAorI2lmIERFQlVHX0FVRElPTk9ERV9SRUZFUkVOQ0VTCisg
ICAgcHJpbnRmKCIlcDogJWQ6IEF1ZGlvTm9kZTo6ZGVyZWYoJWQpICVkICVkICVkXG4iLCB0aGlz
LCBub2RlVHlwZSgpLCByZWZUeXBlLCBtX25vcm1hbFJlZkNvdW50LCBtX2Nvbm5lY3Rpb25SZWZD
b3VudCwgbV9kaXNhYmxlZFJlZkNvdW50KTsKKyNlbmRpZgorCisgICAgaWYgKCFtX2Nvbm5lY3Rp
b25SZWZDb3VudCkgeworICAgICAgICBpZiAoIW1fbm9ybWFsUmVmQ291bnQgJiYgIW1fZGlzYWJs
ZWRSZWZDb3VudCkgeworICAgICAgICAgICAgaWYgKCFtX2lzTWFya2VkRm9yRGVsZXRpb24pIHsK
KyAgICAgICAgICAgICAgICAvLyBBbGwgcmVmZXJlbmNlcyBhcmUgZ29uZSAtIHdlIG5lZWQgdG8g
Z28gYXdheS4KKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vdXRw
dXRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBvdXRwdXQoaSktPmRpc2Nvbm5l
Y3RBbGxJbnB1dHMoKTsgLy8gdGhpcyB3aWxsIGRlcmVmKCkgbm9kZXMgd2UncmUgY29ubmVjdGVk
IHRvLi4uCisKKyAgICAgICAgICAgICAgICAvLyBNYXJrIGZvciBkZWxldGlvbiBhdCBlbmQgb2Yg
ZWFjaCByZW5kZXIgcXVhbnR1bSBvciB3aGVuIGNvbnRleHQgc2h1dHMgZG93bi4KKyAgICAgICAg
ICAgICAgICBjb250ZXh0KCktPm1hcmtGb3JEZWxldGlvbih0aGlzKTsKKyAgICAgICAgICAgICAg
ICBtX2lzTWFya2VkRm9yRGVsZXRpb24gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKHJlZlR5cGUgPT0gUmVmVHlwZUNvbm5lY3Rpb24pIHsKKyAgICAgICAgICAgIGlm
ICghbV9pc0Rpc2FibGVkKSB7CisgICAgICAgICAgICAgICAgLy8gU3RpbGwgbWF5IGhhdmUgSmF2
YVNjcmlwdCByZWZlcmVuY2VzLCBidXQgbm8gbW9yZSAiYWN0aXZlIiBjb25uZWN0aW9uIHJlZmVy
ZW5jZXMsIHNvIHB1dCBhbGwgb2Ygb3VyIG91dHB1dHMgaW4gYSAiZG9ybWFudCIgZGlzYWJsZWQg
c3RhdGUuCisgICAgICAgICAgICAgICAgLy8gR2FyYmFnZSBjb2xsZWN0aW9uIG1heSB0YWtlIGEg
dmVyeSBsb25nIHRpbWUgYWZ0ZXIgdGhpcyB0aW1lLCBzbyB0aGUgImRvcm1hbnQiIGRpc2FibGVk
IG5vZGVzIHNob3VsZCBub3QgYm9nIGRvd24gdGhlIHJlbmRlcmluZy4uLgorCisgICAgICAgICAg
ICAgICAgLy8gQXMgZmFyIGFzIEphdmFTY3JpcHQgaXMgY29uY2VybmVkLCBvdXIgb3V0cHV0cyBt
dXN0IHN0aWxsIGFwcGVhciB0byBiZSBjb25uZWN0ZWQuCisgICAgICAgICAgICAgICAgLy8gQnV0
IGludGVybmFsbHkgb3VyIG91dHB1dHMgc2hvdWxkIGJlIGRpc2FibGVkIGZyb20gdGhlIGlucHV0
cyB0aGV5J3JlIGNvbm5lY3RlZCB0by4KKyAgICAgICAgICAgICAgICAvLyBkaXNhYmxlKCkgY2Fu
IHJlY3Vyc2l2ZWx5IGRlcmVmIGNvbm5lY3Rpb25zIChhbmQgY2FsbCBkaXNhYmxlKCkpIGRvd24g
YSB3aG9sZSBjaGFpbiBvZiBjb25uZWN0ZWQgbm9kZXMuCisKKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogd2Ugc3BlY2lhbCBjYXNlIHRoZSBjb252b2x2ZXIgYW5kIGRlbGF5IHNpbmNlIHRoZXkg
aGF2ZSBhIHNpZ25pZmljYW50IHRhaWwtdGltZSBhbmQgc2hvdWxkbid0IGJlIGRpc2Nvbm5lY3Rl
ZCBzaW1wbHkKKyAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIHRoZXkgbm8gbG9uZ2VyIGhhdmUg
YW55IGlucHV0IGNvbm5lY3Rpb25zLiAgVGhpcyBuZWVkcyB0byBiZSBoYW5kbGVkIG1vcmUgZ2Vu
ZXJhbGx5IHdoZXJlIEF1ZGlvTm9kZXMgaGF2ZQorICAgICAgICAgICAgICAgIC8vIGEgdGFpbFRp
bWUgYXR0cmlidXRlLiAgVGhlbiB0aGUgQXVkaW9Ob2RlIG9ubHkgbmVlZHMgdG8gcmVtYWluICJh
Y3RpdmUiIGZvciB0YWlsVGltZSBzZWNvbmRzIGFmdGVyIHRoZXJlIGFyZSBubworICAgICAgICAg
ICAgICAgIC8vIGxvbmdlciBhbnkgYWN0aXZlIGNvbm5lY3Rpb25zLgorICAgICAgICAgICAgICAg
IGlmIChub2RlVHlwZSgpICE9IE5vZGVUeXBlQ29udm9sdmVyICYmIG5vZGVUeXBlKCkgIT0gTm9k
ZVR5cGVEZWxheSkgeworICAgICAgICAgICAgICAgICAgICBtX2lzRGlzYWJsZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vdXRwdXRzLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0KGkpLT5kaXNhYmxlKCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
CisjaWYgREVCVUdfQVVESU9OT0RFX1JFRkVSRU5DRVMKKworYm9vbCBBdWRpb05vZGU6OnNfaXNO
b2RlQ291bnRJbml0aWFsaXplZCA9IGZhbHNlOworaW50IEF1ZGlvTm9kZTo6c19ub2RlQ291bnRb
Tm9kZVR5cGVFbmRdOworCit2b2lkIEF1ZGlvTm9kZTo6cHJpbnROb2RlQ291bnRzKCkKK3sKKyAg
ICBwcmludGYoIlxuXG4iKTsKKyAgICBwcmludGYoIj09PT09PT09PT09PT09PT09PT09PT09PT09
PVxuIik7CisgICAgcHJpbnRmKCJBdWRpb05vZGU6IHJlZmVyZW5jZSBjb3VudHNcbiIpOworICAg
IHByaW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBOb2RlVHlwZUVuZDsgKytpKQorICAgICAgICBwcmludGYoIiVkOiAl
ZFxuIiwgaSwgc19ub2RlQ291bnRbaV0pOworCisgICAgcHJpbnRmKCI9PT09PT09PT09PT09PT09
PT09PT09PT09PT1cblxuXG4iKTsKK30KKworI2VuZGlmIC8vIERFQlVHX0FVRElPTk9ERV9SRUZF
UkVOQ0VTCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJf
QVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2Rl
LmgJKHJldmlzaW9uIDExMTIzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9O
b2RlLmg6MTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQXVkaW9Ob2RlX2gKKyNkZWZpbmUgQXVkaW9Ob2RlX2gKKworI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNkZWZpbmUgREVCVUdfQVVESU9OT0RFX1JF
RkVSRU5DRVMgMAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvQ29udGV4dDsK
K2NsYXNzIEF1ZGlvTm9kZUlucHV0OworY2xhc3MgQXVkaW9Ob2RlT3V0cHV0OworCit0eXBlZGVm
IGludCBFeGNlcHRpb25Db2RlOworCisvLyBBbiBBdWRpb05vZGUgaXMgdGhlIGJhc2ljIGJ1aWxk
aW5nIGJsb2NrIGZvciBoYW5kbGluZyBhdWRpbyB3aXRoaW4gYW4gQXVkaW9Db250ZXh0LgorLy8g
SXQgbWF5IGJlIGFuIGF1ZGlvIHNvdXJjZSwgYW4gaW50ZXJtZWRpYXRlIHByb2Nlc3NpbmcgbW9k
dWxlLCBvciBhbiBhdWRpbyBkZXN0aW5hdGlvbi4KKy8vIEVhY2ggQXVkaW9Ob2RlIGNhbiBoYXZl
IGlucHV0cyBhbmQvb3Igb3V0cHV0cy4gQW4gQXVkaW9Tb3VyY2VOb2RlIGhhcyBubyBpbnB1dHMg
YW5kIGEgc2luZ2xlIG91dHB1dC4KKy8vIEFuIEF1ZGlvRGVzdGluYXRpb25Ob2RlIGhhcyBvbmUg
aW5wdXQgYW5kIG5vIG91dHB1dHMgYW5kIHJlcHJlc2VudHMgdGhlIGZpbmFsIGRlc3RpbmF0aW9u
IHRvIHRoZSBhdWRpbyBoYXJkd2FyZS4KKy8vIE1vc3QgcHJvY2Vzc2luZyBub2RlcyBzdWNoIGFz
IGZpbHRlcnMgd2lsbCBoYXZlIG9uZSBpbnB1dCBhbmQgb25lIG91dHB1dCwgYWx0aG91Z2ggbXVs
dGlwbGUgaW5wdXRzIGFuZCBvdXRwdXRzIGFyZSBwb3NzaWJsZS4KKworY2xhc3MgQXVkaW9Ob2Rl
IHsKK3B1YmxpYzoKKyAgICBlbnVtIHsgUHJvY2Vzc2luZ1NpemVJbkZyYW1lcyA9IDEyOCB9Owor
CisgICAgQXVkaW9Ob2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOworICAgIHZp
cnR1YWwgfkF1ZGlvTm9kZSgpOworCisgICAgQXVkaW9Db250ZXh0KiBjb250ZXh0KCkgeyByZXR1
cm4gbV9jb250ZXh0LmdldCgpOyB9CisKKyAgICBlbnVtIE5vZGVUeXBlIHsKKyAgICAgICAgTm9k
ZVR5cGVVbmtub3duLAorICAgICAgICBOb2RlVHlwZURlc3RpbmF0aW9uLAorICAgICAgICBOb2Rl
VHlwZUF1ZGlvQnVmZmVyU291cmNlLAorICAgICAgICBOb2RlVHlwZU1lZGlhRWxlbWVudEF1ZGlv
U291cmNlLAorICAgICAgICBOb2RlVHlwZUphdmFTY3JpcHQsCisgICAgICAgIE5vZGVUeXBlQmlx
dWFkRmlsdGVyLAorICAgICAgICBOb2RlVHlwZUxvd1Bhc3MyRmlsdGVyLAorICAgICAgICBOb2Rl
VHlwZUhpZ2hQYXNzMkZpbHRlciwKKyAgICAgICAgTm9kZVR5cGVQYW5uZXIsCisgICAgICAgIE5v
ZGVUeXBlQ29udm9sdmVyLAorICAgICAgICBOb2RlVHlwZURlbGF5LAorICAgICAgICBOb2RlVHlw
ZUdhaW4sCisgICAgICAgIE5vZGVUeXBlQ2hhbm5lbFNwbGl0dGVyLAorICAgICAgICBOb2RlVHlw
ZUNoYW5uZWxNZXJnZXIsCisgICAgICAgIE5vZGVUeXBlQW5hbHlzZXIsCisgICAgICAgIE5vZGVU
eXBlRHluYW1pY3NDb21wcmVzc29yLAorICAgICAgICBOb2RlVHlwZVdhdmVTaGFwZXIsCisgICAg
ICAgIE5vZGVUeXBlRW5kCisgICAgfTsKKworICAgIE5vZGVUeXBlIG5vZGVUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9ub2RlVHlwZTsgfQorICAgIHZvaWQgc2V0Tm9kZVR5cGUoTm9kZVR5cGUpOwor
CisgICAgLy8gV2UgaGFuZGxlIG91ciBvd24gcmVmLWNvdW50aW5nIGJlY2F1c2Ugb2YgdGhlIHRo
cmVhZGluZyBpc3N1ZXMgYW5kIHN1YnRsZSBuYXR1cmUgb2YKKyAgICAvLyBob3cgQXVkaW9Ob2Rl
cyBjYW4gY29udGludWUgcHJvY2Vzc2luZyAocGxheWluZyBvbmUtc2hvdCBzb3VuZCkgYWZ0ZXIg
dGhlcmUgYXJlIG5vIG1vcmUKKyAgICAvLyBKYXZhU2NyaXB0IHJlZmVyZW5jZXMgdG8gdGhlIG9i
amVjdC4KKyAgICBlbnVtIFJlZlR5cGUgeyBSZWZUeXBlTm9ybWFsLCBSZWZUeXBlQ29ubmVjdGlv
biwgUmVmVHlwZURpc2FibGVkIH07CisKKyAgICAvLyBDYW4gYmUgY2FsbGVkIGZyb20gbWFpbiB0
aHJlYWQgb3IgY29udGV4dCdzIGF1ZGlvIHRocmVhZC4KKyAgICB2b2lkIHJlZihSZWZUeXBlIHJl
ZlR5cGUgPSBSZWZUeXBlTm9ybWFsKTsKKyAgICB2b2lkIGRlcmVmKFJlZlR5cGUgcmVmVHlwZSA9
IFJlZlR5cGVOb3JtYWwpOworCisgICAgLy8gQ2FuIGJlIGNhbGxlZCBmcm9tIG1haW4gdGhyZWFk
IG9yIGNvbnRleHQncyBhdWRpbyB0aHJlYWQuICBJdCBtdXN0IGJlIGNhbGxlZCB3aGlsZSB0aGUg
Y29udGV4dCdzIGdyYXBoIGxvY2sgaXMgaGVsZC4KKyAgICB2b2lkIGZpbmlzaERlcmVmKFJlZlR5
cGUgcmVmVHlwZSk7CisKKyAgICAvLyBUaGUgQXVkaW9Ob2RlSW5wdXQocykgKGlmIGFueSkgd2ls
bCBhbHJlYWR5IGhhdmUgdGhlaXIgaW5wdXQgZGF0YSBhdmFpbGFibGUgd2hlbiBwcm9jZXNzKCkg
aXMgY2FsbGVkLgorICAgIC8vIFN1YmNsYXNzZXMgd2lsbCB0YWtlIHRoaXMgaW5wdXQgZGF0YSBh
bmQgcHV0IHRoZSByZXN1bHRzIGluIHRoZSBBdWRpb0J1cyhzKSBvZiBpdHMgQXVkaW9Ob2RlT3V0
cHV0KHMpIChpZiBhbnkpLgorICAgIC8vIENhbGxlZCBmcm9tIGNvbnRleHQncyBhdWRpbyB0aHJl
YWQuCisgICAgdmlydHVhbCB2b2lkIHByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykgPSAw
OworCisgICAgLy8gUmVzZXRzIERTUCBwcm9jZXNzaW5nIHN0YXRlIChjbGVhcnMgZGVsYXkgbGlu
ZXMsIGZpbHRlciBtZW1vcnksIGV0Yy4pCisgICAgLy8gQ2FsbGVkIGZyb20gY29udGV4dCdzIGF1
ZGlvIHRocmVhZC4KKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSA9IDA7CisKKyAgICAvLyBObyBz
aWduaWZpY2FudCByZXNvdXJjZXMgc2hvdWxkIGJlIGFsbG9jYXRlZCB1bnRpbCBpbml0aWFsaXpl
KCkgaXMgY2FsbGVkLgorICAgIC8vIFByb2Nlc3NpbmcgbWF5IG5vdCBvY2N1ciB1bnRpbCBhIG5v
ZGUgaXMgaW5pdGlhbGl6ZWQuCisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdW5pbml0aWFsaXplKCk7CisKKyAgICBib29sIGlzSW5pdGlhbGl6ZWQoKSBj
b25zdCB7IHJldHVybiBtX2lzSW5pdGlhbGl6ZWQ7IH0KKyAgICB2b2lkIGxhenlJbml0aWFsaXpl
KCk7CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZklucHV0cygpIGNvbnN0IHsgcmV0dXJuIG1faW5w
dXRzLnNpemUoKTsgfQorICAgIHVuc2lnbmVkIG51bWJlck9mT3V0cHV0cygpIGNvbnN0IHsgcmV0
dXJuIG1fb3V0cHV0cy5zaXplKCk7IH0KKworICAgIEF1ZGlvTm9kZUlucHV0KiBpbnB1dCh1bnNp
Z25lZCk7CisgICAgQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQodW5zaWduZWQpOworCisgICAgLy8g
Q2FsbGVkIGZyb20gbWFpbiB0aHJlYWQgYnkgY29ycmVzcG9uZGluZyBKYXZhU2NyaXB0IG1ldGhv
ZHMuCisgICAgdm9pZCBjb25uZWN0KEF1ZGlvTm9kZSosIHVuc2lnbmVkIG91dHB1dEluZGV4LCB1
bnNpZ25lZCBpbnB1dEluZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBkaXNjb25uZWN0
KHVuc2lnbmVkIG91dHB1dEluZGV4LCBFeGNlcHRpb25Db2RlJik7CisKKyAgICB2aXJ0dWFsIGZs
b2F0IHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KKworICAgIC8v
IHByb2Nlc3NJZk5lY2Vzc2FyeSgpIGlzIGNhbGxlZCBieSBvdXIgb3V0cHV0KHMpIHdoZW4gdGhl
IHJlbmRlcmluZyBncmFwaCBuZWVkcyB0aGlzIEF1ZGlvTm9kZSB0byBwcm9jZXNzLgorICAgIC8v
IFRoaXMgbWV0aG9kIGVuc3VyZXMgdGhhdCB0aGUgQXVkaW9Ob2RlIHdpbGwgb25seSBwcm9jZXNz
IG9uY2UgcGVyIHJlbmRlcmluZyB0aW1lIHF1YW50dW0gZXZlbiBpZiBpdCdzIGNhbGxlZCByZXBl
YXRlZGx5LgorICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSBvZiAiZmFub3V0IiB3aGVyZSBh
biBvdXRwdXQgaXMgY29ubmVjdGVkIHRvIG11bHRpcGxlIEF1ZGlvTm9kZSBpbnB1dHMuCisgICAg
Ly8gQ2FsbGVkIGZyb20gY29udGV4dCdzIGF1ZGlvIHRocmVhZC4KKyAgICB2b2lkIHByb2Nlc3NJ
Zk5lY2Vzc2FyeShzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKworICAgIC8vIENhbGxlZCB3aGVu
IGEgbmV3IGNvbm5lY3Rpb24gaGFzIGJlZW4gbWFkZSB0byBvbmUgb2Ygb3VyIGlucHV0cyBvciB0
aGUgY29ubmVjdGlvbiBudW1iZXIgb2YgY2hhbm5lbHMgaGFzIGNoYW5nZWQuCisgICAgLy8gVGhp
cyBwb3RlbnRpYWxseSBnaXZlcyB1cyBlbm91Z2ggaW5mb3JtYXRpb24gdG8gcGVyZm9ybSBhIGxh
enkgaW5pdGlhbGl6YXRpb24gb3IsIGlmIG5lY2Vzc2FyeSwgYSByZS1pbml0aWFsaXphdGlvbi4K
KyAgICAvLyBDYWxsZWQgZnJvbSBtYWluIHRocmVhZC4KKyAgICB2aXJ0dWFsIHZvaWQgY2hlY2tO
dW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQoQXVkaW9Ob2RlSW5wdXQqKTsKKworI2lmIERFQlVHX0FV
RElPTk9ERV9SRUZFUkVOQ0VTCisgICAgc3RhdGljIHZvaWQgcHJpbnROb2RlQ291bnRzKCk7Cisj
ZW5kaWYKKworICAgIGJvb2wgaXNNYXJrZWRGb3JEZWxldGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
aXNNYXJrZWRGb3JEZWxldGlvbjsgfQorCisgICAgLy8gdGFpbFRpbWUoKSBpcyB0aGUgbGVuZ3Ro
IG9mIHRpbWUgKG5vdCBjb3VudGluZyBsYXRlbmN5IHRpbWUpIHdoZXJlIG5vbi16ZXJvIG91dHB1
dCBtYXkgb2NjdXIgYWZ0ZXIgY29udGludW91cyBzaWxlbnQgaW5wdXQuCisgICAgdmlydHVhbCBk
b3VibGUgdGFpbFRpbWUoKSBjb25zdCA9IDA7CisgICAgLy8gbGF0ZW5jeVRpbWUoKSBpcyB0aGUg
bGVuZ3RoIG9mIHRpbWUgaXQgdGFrZXMgZm9yIG5vbi16ZXJvIG91dHB1dCB0byBhcHBlYXIgYWZ0
ZXIgbm9uLXplcm8gaW5wdXQgaXMgcHJvdmlkZWQuIFRoaXMgb25seSBhcHBsaWVzIHRvCisgICAg
Ly8gcHJvY2Vzc2luZyBkZWxheSB3aGljaCBpcyBhbiBhcnRpZmFjdCBvZiB0aGUgcHJvY2Vzc2lu
ZyBhbGdvcml0aG0gY2hvc2VuIGFuZCBpcyAqbm90KiBwYXJ0IG9mIHRoZSBpbnRyaW5zaWMgZGVz
aXJlZCBlZmZlY3QuIEZvciAKKyAgICAvLyBleGFtcGxlLCBhICJkZWxheSIgZWZmZWN0IGlzIGV4
cGVjdGVkIHRvIGRlbGF5IHRoZSBzaWduYWwsIGFuZCB0aHVzIHdvdWxkIG5vdCBiZSBjb25zaWRl
cmVkIGxhdGVuY3kuCisgICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCA9IDA7
CisKK3Byb3RlY3RlZDoKKyAgICAvLyBJbnB1dHMgYW5kIG91dHB1dHMgbXVzdCBiZSBjcmVhdGVk
IGJlZm9yZSB0aGUgQXVkaW9Ob2RlIGlzIGluaXRpYWxpemVkLgorICAgIHZvaWQgYWRkSW5wdXQo
UGFzc093blB0cjxBdWRpb05vZGVJbnB1dD4pOworICAgIHZvaWQgYWRkT3V0cHV0KFBhc3NPd25Q
dHI8QXVkaW9Ob2RlT3V0cHV0Pik7CisgICAgCisgICAgLy8gQ2FsbGVkIGJ5IHByb2Nlc3NJZk5l
Y2Vzc2FyeSgpIHRvIGNhdXNlIGFsbCBwYXJ0cyBvZiB0aGUgcmVuZGVyaW5nIGdyYXBoIGNvbm5l
Y3RlZCB0byB1cyB0byBwcm9jZXNzLgorICAgIC8vIEVhY2ggcmVuZGVyaW5nIHF1YW50dW0sIHRo
ZSBhdWRpbyBkYXRhIGZvciBlYWNoIG9mIHRoZSBBdWRpb05vZGUncyBpbnB1dHMgd2lsbCBiZSBh
dmFpbGFibGUgYWZ0ZXIgdGhpcyBtZXRob2QgaXMgY2FsbGVkLgorICAgIC8vIENhbGxlZCBmcm9t
IGNvbnRleHQncyBhdWRpbyB0aHJlYWQuCisgICAgdmlydHVhbCB2b2lkIHB1bGxJbnB1dHMoc2l6
ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CisKK3ByaXZhdGU6CisgICAgdm9sYXRpbGUgYm9vbCBtX2lz
SW5pdGlhbGl6ZWQ7CisgICAgTm9kZVR5cGUgbV9ub2RlVHlwZTsKKyAgICBSZWZQdHI8QXVkaW9D
b250ZXh0PiBtX2NvbnRleHQ7CisgICAgZmxvYXQgbV9zYW1wbGVSYXRlOworICAgIFZlY3RvcjxP
d25QdHI8QXVkaW9Ob2RlSW5wdXQ+ID4gbV9pbnB1dHM7CisgICAgVmVjdG9yPE93blB0cjxBdWRp
b05vZGVPdXRwdXQ+ID4gbV9vdXRwdXRzOworCisgICAgZG91YmxlIG1fbGFzdFByb2Nlc3NpbmdU
aW1lOworCisgICAgLy8gUmVmLWNvdW50aW5nCisgICAgdm9sYXRpbGUgaW50IG1fbm9ybWFsUmVm
Q291bnQ7CisgICAgdm9sYXRpbGUgaW50IG1fY29ubmVjdGlvblJlZkNvdW50OworICAgIHZvbGF0
aWxlIGludCBtX2Rpc2FibGVkUmVmQ291bnQ7CisgICAgCisgICAgYm9vbCBtX2lzTWFya2VkRm9y
RGVsZXRpb247CisgICAgYm9vbCBtX2lzRGlzYWJsZWQ7CisgICAgCisjaWYgREVCVUdfQVVESU9O
T0RFX1JFRkVSRU5DRVMKKyAgICBzdGF0aWMgYm9vbCBzX2lzTm9kZUNvdW50SW5pdGlhbGl6ZWQ7
CisgICAgc3RhdGljIGludCBzX25vZGVDb3VudFtOb2RlVHlwZUVuZF07CisjZW5kaWYKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEF1ZGlvTm9kZV9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaWRsCShyZXZpc2lv
biAxMTEyMzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5pZGw6MTEx
MjMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgYXVkaW8g
eworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTworICAgIF0g
QXVkaW9Ob2RlIHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlvQ29udGV4dCBjb250
ZXh0OworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBudW1iZXJPZklu
cHV0czsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZP
dXRwdXRzOworCisgICAgICAgIHZvaWQgY29ubmVjdChpbiBBdWRpb05vZGUgZGVzdGluYXRpb24s
IGluIFtPcHRpb25hbD1EZWZhdWx0SXNVbmRlZmluZWRdIHVuc2lnbmVkIGxvbmcgb3V0cHV0LCBp
biBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSB1bnNpZ25lZCBsb25nIGlucHV0KQorICAg
ICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisKKyAgICAgICAgdm9pZCBkaXNjb25uZWN0
KGluIFtPcHRpb25hbD1EZWZhdWx0SXNVbmRlZmluZWRdIHVuc2lnbmVkIGxvbmcgb3V0cHV0KQor
ICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgfTsKK30KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuY3BwCShy
ZXZpc2lvbiAxMTEyMzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZUlu
cHV0LmNwcDoxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
Tm9kZUlucHV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI3NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNs
dWRlICJBdWRpb05vZGVJbnB1dC5oIgorCisjaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCisjaW5j
bHVkZSAiQXVkaW9Ob2RlLmgiCisjaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCisjaW5jbHVk
ZSA8YWxnb3JpdGhtPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworIAorbmFtZXNwYWNlIFdlYkNv
cmUgeworCitBdWRpb05vZGVJbnB1dDo6QXVkaW9Ob2RlSW5wdXQoQXVkaW9Ob2RlKiBub2RlKQor
ICAgIDogbV9ub2RlKG5vZGUpCisgICAgLCBtX3JlbmRlcmluZ1N0YXRlTmVlZFVwZGF0aW5nKGZh
bHNlKQoreworICAgIC8vIFNldCB0byBtb25vIGJ5IGRlZmF1bHQuCisgICAgbV9pbnRlcm5hbFN1
bW1pbmdCdXMgPSBhZG9wdFB0cihuZXcgQXVkaW9CdXMoMSwgQXVkaW9Ob2RlOjpQcm9jZXNzaW5n
U2l6ZUluRnJhbWVzKSk7Cit9CisKK3ZvaWQgQXVkaW9Ob2RlSW5wdXQ6OmNvbm5lY3QoQXVkaW9O
b2RlT3V0cHV0KiBvdXRwdXQpCit7CisgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNHcmFwaE93bmVy
KCkpOworICAgIAorICAgIEFTU0VSVChvdXRwdXQgJiYgbm9kZSgpKTsKKyAgICBpZiAoIW91dHB1
dCB8fCAhbm9kZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDaGVjayBpZiB3ZSdyZSBh
bHJlYWR5IGNvbm5lY3RlZCB0byB0aGlzIG91dHB1dC4KKyAgICBpZiAobV9vdXRwdXRzLmNvbnRh
aW5zKG91dHB1dCkpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgb3V0cHV0LT5hZGRJ
bnB1dCh0aGlzKTsKKyAgICBtX291dHB1dHMuYWRkKG91dHB1dCk7CisgICAgY2hhbmdlZE91dHB1
dHMoKTsKKworICAgIC8vIFNvbWJvZHkgaGFzIGp1c3QgY29ubmVjdGVkIHRvIHVzLCBzbyBjb3Vu
dCBpdCBhcyBhIHJlZmVyZW5jZS4KKyAgICBub2RlKCktPnJlZihBdWRpb05vZGU6OlJlZlR5cGVD
b25uZWN0aW9uKTsKK30KKwordm9pZCBBdWRpb05vZGVJbnB1dDo6ZGlzY29ubmVjdChBdWRpb05v
ZGVPdXRwdXQqIG91dHB1dCkKK3sKKyAgICBBU1NFUlQoY29udGV4dCgpLT5pc0dyYXBoT3duZXIo
KSk7CisKKyAgICBBU1NFUlQob3V0cHV0ICYmIG5vZGUoKSk7CisgICAgaWYgKCFvdXRwdXQgfHwg
IW5vZGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRmlyc3QgdHJ5IHRvIGRpc2Nvbm5l
Y3QgZnJvbSAiYWN0aXZlIiBjb25uZWN0aW9ucy4KKyAgICBpZiAobV9vdXRwdXRzLmNvbnRhaW5z
KG91dHB1dCkpIHsKKyAgICAgICAgbV9vdXRwdXRzLnJlbW92ZShvdXRwdXQpOworICAgICAgICBj
aGFuZ2VkT3V0cHV0cygpOworICAgICAgICBvdXRwdXQtPnJlbW92ZUlucHV0KHRoaXMpOworICAg
ICAgICBub2RlKCktPmRlcmVmKEF1ZGlvTm9kZTo6UmVmVHlwZUNvbm5lY3Rpb24pOyAvLyBOb3Rl
OiBpdCdzIGltcG9ydGFudCB0byByZXR1cm4gaW1tZWRpYXRlbHkgYWZ0ZXIgYWxsIGRlcmVmKCkg
Y2FsbHMgc2luY2UgdGhlIG5vZGUgbWF5IGJlIGRlbGV0ZWQuCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgLy8gT3RoZXJ3aXNlLCB0cnkgdG8gZGlzY29ubmVjdCBmcm9tIGRpc2Fi
bGVkIGNvbm5lY3Rpb25zLgorICAgIGlmIChtX2Rpc2FibGVkT3V0cHV0cy5jb250YWlucyhvdXRw
dXQpKSB7CisgICAgICAgIG1fZGlzYWJsZWRPdXRwdXRzLnJlbW92ZShvdXRwdXQpOworICAgICAg
ICBvdXRwdXQtPnJlbW92ZUlucHV0KHRoaXMpOworICAgICAgICBub2RlKCktPmRlcmVmKEF1ZGlv
Tm9kZTo6UmVmVHlwZURpc2FibGVkKTsgLy8gTm90ZTogaXQncyBpbXBvcnRhbnQgdG8gcmV0dXJu
IGltbWVkaWF0ZWx5IGFmdGVyIGFsbCBkZXJlZigpIGNhbGxzIHNpbmNlIHRoZSBub2RlIG1heSBi
ZSBkZWxldGVkLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK3ZvaWQgQXVkaW9Ob2RlSW5wdXQ6OmRpc2FibGUoQXVkaW9Ob2RlT3V0cHV0
KiBvdXRwdXQpCit7CisgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOworCisg
ICAgQVNTRVJUKG91dHB1dCAmJiBub2RlKCkpOworICAgIGlmICghb3V0cHV0IHx8ICFub2RlKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX291dHB1dHMuY29udGFpbnMob3V0cHV0
KSk7CisgICAgCisgICAgbV9kaXNhYmxlZE91dHB1dHMuYWRkKG91dHB1dCk7CisgICAgbV9vdXRw
dXRzLnJlbW92ZShvdXRwdXQpOworICAgIGNoYW5nZWRPdXRwdXRzKCk7CisKKyAgICBub2RlKCkt
PnJlZihBdWRpb05vZGU6OlJlZlR5cGVEaXNhYmxlZCk7CisgICAgbm9kZSgpLT5kZXJlZihBdWRp
b05vZGU6OlJlZlR5cGVDb25uZWN0aW9uKTsgLy8gTm90ZTogaXQncyBpbXBvcnRhbnQgdG8gcmV0
dXJuIGltbWVkaWF0ZWx5IGFmdGVyIGFsbCBkZXJlZigpIGNhbGxzIHNpbmNlIHRoZSBub2RlIG1h
eSBiZSBkZWxldGVkLgorfQorCit2b2lkIEF1ZGlvTm9kZUlucHV0OjplbmFibGUoQXVkaW9Ob2Rl
T3V0cHV0KiBvdXRwdXQpCit7CisgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkp
OworCisgICAgQVNTRVJUKG91dHB1dCAmJiBub2RlKCkpOworICAgIGlmICghb3V0cHV0IHx8ICFu
b2RlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX2Rpc2FibGVkT3V0cHV0cy5j
b250YWlucyhvdXRwdXQpKTsKKworICAgIC8vIE1vdmUgb3V0cHV0IGZyb20gZGlzYWJsZWQgbGlz
dCB0byBhY3RpdmUgbGlzdC4KKyAgICBtX291dHB1dHMuYWRkKG91dHB1dCk7CisgICAgbV9kaXNh
YmxlZE91dHB1dHMucmVtb3ZlKG91dHB1dCk7CisgICAgY2hhbmdlZE91dHB1dHMoKTsKKworICAg
IG5vZGUoKS0+cmVmKEF1ZGlvTm9kZTo6UmVmVHlwZUNvbm5lY3Rpb24pOworICAgIG5vZGUoKS0+
ZGVyZWYoQXVkaW9Ob2RlOjpSZWZUeXBlRGlzYWJsZWQpOyAvLyBOb3RlOiBpdCdzIGltcG9ydGFu
dCB0byByZXR1cm4gaW1tZWRpYXRlbHkgYWZ0ZXIgYWxsIGRlcmVmKCkgY2FsbHMgc2luY2UgdGhl
IG5vZGUgbWF5IGJlIGRlbGV0ZWQuCit9CisKK3ZvaWQgQXVkaW9Ob2RlSW5wdXQ6OmNoYW5nZWRP
dXRwdXRzKCkKK3sKKyAgICBBU1NFUlQoY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7CisgICAg
aWYgKCFtX3JlbmRlcmluZ1N0YXRlTmVlZFVwZGF0aW5nICYmICFub2RlKCktPmlzTWFya2VkRm9y
RGVsZXRpb24oKSkgeyAgICAKKyAgICAgICAgY29udGV4dCgpLT5tYXJrQXVkaW9Ob2RlSW5wdXRE
aXJ0eSh0aGlzKTsKKyAgICAgICAgbV9yZW5kZXJpbmdTdGF0ZU5lZWRVcGRhdGluZyA9IHRydWU7
CisgICAgfQorfQorCit2b2lkIEF1ZGlvTm9kZUlucHV0Ojp1cGRhdGVSZW5kZXJpbmdTdGF0ZSgp
Cit7CisgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgpICYmIGNvbnRleHQoKS0+
aXNHcmFwaE93bmVyKCkpOworICAgIAorICAgIGlmIChtX3JlbmRlcmluZ1N0YXRlTmVlZFVwZGF0
aW5nICYmICFub2RlKCktPmlzTWFya2VkRm9yRGVsZXRpb24oKSkgeworICAgICAgICAvLyBDb3B5
IGZyb20gbV9vdXRwdXRzIHRvIG1fcmVuZGVyaW5nT3V0cHV0cy4KKyAgICAgICAgbV9yZW5kZXJp
bmdPdXRwdXRzLnJlc2l6ZShtX291dHB1dHMuc2l6ZSgpKTsKKyAgICAgICAgdW5zaWduZWQgaiA9
IDA7CisgICAgICAgIGZvciAoSGFzaFNldDxBdWRpb05vZGVPdXRwdXQqPjo6aXRlcmF0b3IgaSA9
IG1fb3V0cHV0cy5iZWdpbigpOyBpICE9IG1fb3V0cHV0cy5lbmQoKTsgKytpLCArK2opIHsKKyAg
ICAgICAgICAgIEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0ID0gKmk7CisgICAgICAgICAgICBtX3Jl
bmRlcmluZ091dHB1dHNbal0gPSBvdXRwdXQ7CisgICAgICAgICAgICBvdXRwdXQtPnVwZGF0ZVJl
bmRlcmluZ1N0YXRlKCk7CisgICAgICAgIH0KKworICAgICAgICBub2RlKCktPmNoZWNrTnVtYmVy
T2ZDaGFubmVsc0ZvcklucHV0KHRoaXMpOworICAgICAgICAKKyAgICAgICAgbV9yZW5kZXJpbmdT
dGF0ZU5lZWRVcGRhdGluZyA9IGZhbHNlOworICAgIH0KK30KKwordm9pZCBBdWRpb05vZGVJbnB1
dDo6dXBkYXRlSW50ZXJuYWxCdXMoKQoreworICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9U
aHJlYWQoKSAmJiBjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKKworICAgIHVuc2lnbmVkIG51
bWJlck9mSW5wdXRDaGFubmVscyA9IG51bWJlck9mQ2hhbm5lbHMoKTsKKworICAgIGlmIChudW1i
ZXJPZklucHV0Q2hhbm5lbHMgPT0gbV9pbnRlcm5hbFN1bW1pbmdCdXMtPm51bWJlck9mQ2hhbm5l
bHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnRlcm5hbFN1bW1pbmdCdXMgPSBhZG9w
dFB0cihuZXcgQXVkaW9CdXMobnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBBdWRpb05vZGU6OlByb2Nl
c3NpbmdTaXplSW5GcmFtZXMpKTsKK30KKwordW5zaWduZWQgQXVkaW9Ob2RlSW5wdXQ6Om51bWJl
ck9mQ2hhbm5lbHMoKSBjb25zdAoreworICAgIC8vIEZpbmQgdGhlIG51bWJlciBvZiBjaGFubmVs
cyBvZiB0aGUgY29ubmVjdGlvbiB3aXRoIHRoZSBsYXJnZXN0IG51bWJlciBvZiBjaGFubmVscy4K
KyAgICB1bnNpZ25lZCBtYXhDaGFubmVscyA9IDE7IC8vIG9uZSBjaGFubmVsIGlzIHRoZSBtaW5p
bXVtIGFsbG93ZWQKKworICAgIGZvciAoSGFzaFNldDxBdWRpb05vZGVPdXRwdXQqPjo6aXRlcmF0
b3IgaSA9IG1fb3V0cHV0cy5iZWdpbigpOyBpICE9IG1fb3V0cHV0cy5lbmQoKTsgKytpKSB7Cisg
ICAgICAgIEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0ID0gKmk7CisgICAgICAgIG1heENoYW5uZWxz
ID0gbWF4KG1heENoYW5uZWxzLCBvdXRwdXQtPmJ1cygpLT5udW1iZXJPZkNoYW5uZWxzKCkpOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gbWF4Q2hhbm5lbHM7Cit9CisKK3Vuc2lnbmVkIEF1ZGlv
Tm9kZUlucHV0OjpudW1iZXJPZlJlbmRlcmluZ0NoYW5uZWxzKCkKK3sKKyAgICBBU1NFUlQoY29u
dGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkpOworCisgICAgLy8gRmluZCB0aGUgbnVtYmVyIG9mIGNo
YW5uZWxzIG9mIHRoZSByZW5kZXJpbmcgY29ubmVjdGlvbiB3aXRoIHRoZSBsYXJnZXN0IG51bWJl
ciBvZiBjaGFubmVscy4KKyAgICB1bnNpZ25lZCBtYXhDaGFubmVscyA9IDE7IC8vIG9uZSBjaGFu
bmVsIGlzIHRoZSBtaW5pbXVtIGFsbG93ZWQKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1iZXJPZlJlbmRlcmluZ0Nvbm5lY3Rpb25zKCk7ICsraSkKKyAgICAgICAgbWF4Q2hhbm5l
bHMgPSBtYXgobWF4Q2hhbm5lbHMsIHJlbmRlcmluZ091dHB1dChpKS0+YnVzKCktPm51bWJlck9m
Q2hhbm5lbHMoKSk7CisgICAgCisgICAgcmV0dXJuIG1heENoYW5uZWxzOworfQorCitBdWRpb0J1
cyogQXVkaW9Ob2RlSW5wdXQ6OmJ1cygpCit7CisgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNBdWRp
b1RocmVhZCgpKTsKKworICAgIC8vIEhhbmRsZSBzaW5nbGUgY29ubmVjdGlvbiBzcGVjaWFsbHkg
dG8gYWxsb3cgZm9yIGluLXBsYWNlIHByb2Nlc3NpbmcuCisgICAgaWYgKG51bWJlck9mUmVuZGVy
aW5nQ29ubmVjdGlvbnMoKSA9PSAxKQorICAgICAgICByZXR1cm4gcmVuZGVyaW5nT3V0cHV0KDAp
LT5idXMoKTsKKworICAgIC8vIE11bHRpcGxlIGNvbm5lY3Rpb25zIGNhc2UgKG9yIG5vIGNvbm5l
Y3Rpb25zKS4KKyAgICByZXR1cm4gaW50ZXJuYWxTdW1taW5nQnVzKCk7Cit9CisKK0F1ZGlvQnVz
KiBBdWRpb05vZGVJbnB1dDo6aW50ZXJuYWxTdW1taW5nQnVzKCkKK3sKKyAgICBBU1NFUlQoY29u
dGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkpOworCisgICAgQVNTRVJUKG51bWJlck9mUmVuZGVyaW5n
Q2hhbm5lbHMoKSA9PSBtX2ludGVybmFsU3VtbWluZ0J1cy0+bnVtYmVyT2ZDaGFubmVscygpKTsK
KworICAgIHJldHVybiBtX2ludGVybmFsU3VtbWluZ0J1cy5nZXQoKTsKK30KKwordm9pZCBBdWRp
b05vZGVJbnB1dDo6c3VtQWxsQ29ubmVjdGlvbnMoQXVkaW9CdXMqIHN1bW1pbmdCdXMsIHNpemVf
dCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1RocmVh
ZCgpKTsKKworICAgIC8vIFdlIHNob3VsZG4ndCBiZSBjYWxsaW5nIHRoaXMgbWV0aG9kIGlmIHRo
ZXJlJ3Mgb25seSBvbmUgY29ubmVjdGlvbiwgc2luY2UgaXQncyBsZXNzIGVmZmljaWVudC4KKyAg
ICBBU1NFUlQobnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9ucygpID4gMSk7CisKKyAgICBBU1NF
UlQoc3VtbWluZ0J1cyk7CisgICAgaWYgKCFzdW1taW5nQnVzKQorICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIHN1bW1pbmdCdXMtPnplcm8oKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1iZXJPZlJlbmRlcmluZ0Nvbm5lY3Rpb25zKCk7ICsraSkgeworICAgICAgICBB
dWRpb05vZGVPdXRwdXQqIG91dHB1dCA9IHJlbmRlcmluZ091dHB1dChpKTsKKyAgICAgICAgQVNT
RVJUKG91dHB1dCk7CisKKyAgICAgICAgLy8gUmVuZGVyIGF1ZGlvIGZyb20gdGhpcyBvdXRwdXQu
CisgICAgICAgIEF1ZGlvQnVzKiBjb25uZWN0aW9uQnVzID0gb3V0cHV0LT5wdWxsKDAsIGZyYW1l
c1RvUHJvY2Vzcyk7CisKKyAgICAgICAgLy8gU3VtLCB3aXRoIHVuaXR5LWdhaW4uCisgICAgICAg
IHN1bW1pbmdCdXMtPnN1bUZyb20oKmNvbm5lY3Rpb25CdXMpOworICAgIH0KK30KKworQXVkaW9C
dXMqIEF1ZGlvTm9kZUlucHV0OjpwdWxsKEF1ZGlvQnVzKiBpblBsYWNlQnVzLCBzaXplX3QgZnJh
bWVzVG9Qcm9jZXNzKQoreworICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSk7
CisKKyAgICAvLyBIYW5kbGUgc2luZ2xlIGNvbm5lY3Rpb24gY2FzZS4KKyAgICBpZiAobnVtYmVy
T2ZSZW5kZXJpbmdDb25uZWN0aW9ucygpID09IDEpIHsKKyAgICAgICAgLy8gVGhlIG91dHB1dCB3
aWxsIG9wdGltaXplIHByb2Nlc3NpbmcgdXNpbmcgaW5QbGFjZUJ1cyBpZiBpdCdzIGFibGUuCisg
ICAgICAgIEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0ID0gdGhpcy0+cmVuZGVyaW5nT3V0cHV0KDAp
OworICAgICAgICByZXR1cm4gb3V0cHV0LT5wdWxsKGluUGxhY2VCdXMsIGZyYW1lc1RvUHJvY2Vz
cyk7CisgICAgfQorCisgICAgQXVkaW9CdXMqIGludGVybmFsU3VtbWluZ0J1cyA9IHRoaXMtPmlu
dGVybmFsU3VtbWluZ0J1cygpOworCisgICAgaWYgKCFudW1iZXJPZlJlbmRlcmluZ0Nvbm5lY3Rp
b25zKCkpIHsKKyAgICAgICAgLy8gQXQgbGVhc3QsIGdlbmVyYXRlIHNpbGVuY2UgaWYgd2UncmUg
bm90IGNvbm5lY3RlZCB0byBhbnl0aGluZy4KKyAgICAgICAgLy8gRklYTUU6IGlmIHdlIHdhbnRl
ZCB0byBnZXQgZmFuY3ksIHdlIGNvdWxkIHByb3BhZ2F0ZSBhICdzaWxlbnQgaGludCcgaGVyZSB0
byBvcHRpbWl6ZSB0aGUgZG93bnN0cmVhbSBncmFwaCBwcm9jZXNzaW5nLgorICAgICAgICBpbnRl
cm5hbFN1bW1pbmdCdXMtPnplcm8oKTsKKyAgICAgICAgcmV0dXJuIGludGVybmFsU3VtbWluZ0J1
czsKKyAgICB9CisKKyAgICAvLyBIYW5kbGUgbXVsdGlwbGUgY29ubmVjdGlvbnMgY2FzZS4KKyAg
ICBzdW1BbGxDb25uZWN0aW9ucyhpbnRlcm5hbFN1bW1pbmdCdXMsIGZyYW1lc1RvUHJvY2Vzcyk7
CisgICAgCisgICAgcmV0dXJuIGludGVybmFsU3VtbWluZ0J1czsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmgJKHJldmlzaW9u
IDExMTIzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuaDox
MTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IEF1ZGlvTm9kZUlucHV0X2gKKyNkZWZpbmUgQXVkaW9Ob2RlSW5wdXRfaAorCisjaW5jbHVkZSAi
QXVkaW9CdXMuaCIKKyNpbmNsdWRlICJBdWRpb05vZGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBBdWRpb05vZGU7CitjbGFzcyBBdWRpb05vZGVPdXRwdXQ7CisKKy8vIEFuIEF1ZGlvTm9k
ZUlucHV0IHJlcHJlc2VudHMgYW4gaW5wdXQgdG8gYW4gQXVkaW9Ob2RlIGFuZCBjYW4gYmUgY29u
bmVjdGVkIGZyb20gb25lIG9yIG1vcmUgQXVkaW9Ob2RlT3V0cHV0cy4KKy8vIEluIHRoZSBjYXNl
IG9mIG11bHRpcGxlIGNvbm5lY3Rpb25zLCB0aGUgaW5wdXQgd2lsbCBhY3QgYXMgYSB1bml0eS1n
YWluIHN1bW1pbmcganVuY3Rpb24sIG1peGluZyBhbGwgdGhlIG91dHB1dHMuCisvLyBUaGUgbnVt
YmVyIG9mIGNoYW5uZWxzIG9mIHRoZSBpbnB1dCdzIGJ1cyBpcyB0aGUgbWF4aW11bSBvZiB0aGUg
bnVtYmVyIG9mIGNoYW5uZWxzIG9mIGFsbCBpdHMgY29ubmVjdGlvbnMuCisKK2NsYXNzIEF1ZGlv
Tm9kZUlucHV0IHsKK3B1YmxpYzoKKyAgICBBdWRpb05vZGVJbnB1dChBdWRpb05vZGUqKTsKKwor
ICAgIC8vIENhbiBiZSBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkLgorICAgIEF1ZGlvTm9kZSogbm9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsgfQorICAgIEF1ZGlvQ29udGV4dCogY29udGV4dCgp
IHsgcmV0dXJuIG1fbm9kZS0+Y29udGV4dCgpOyB9CisKKyAgICAvLyBNdXN0IGJlIGNhbGxlZCB3
aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jay4KKyAgICB2b2lkIGNvbm5lY3QoQXVkaW9Ob2Rl
T3V0cHV0Kik7CisgICAgdm9pZCBkaXNjb25uZWN0KEF1ZGlvTm9kZU91dHB1dCopOworCisgICAg
Ly8gZGlzYWJsZSgpIHdpbGwgdGFrZSB0aGUgb3V0cHV0IG91dCBvZiB0aGUgYWN0aXZlIGNvbm5l
Y3Rpb25zIGxpc3QgYW5kIHNldCBhc2lkZSBpbiBhIGRpc2FibGVkIGxpc3QuCisgICAgLy8gZW5h
YmxlKCkgd2lsbCBwdXQgdGhlIG91dHB1dCBiYWNrIGludG8gdGhlIGFjdGl2ZSBjb25uZWN0aW9u
cyBsaXN0LgorICAgIC8vIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGNvbnRleHQncyBncmFwaCBs
b2NrLgorICAgIHZvaWQgZW5hYmxlKEF1ZGlvTm9kZU91dHB1dCopOworICAgIHZvaWQgZGlzYWJs
ZShBdWRpb05vZGVPdXRwdXQqKTsKKworICAgIC8vIHB1bGwoKSBwcm9jZXNzZXMgYWxsIG9mIHRo
ZSBBdWRpb05vZGVzIGNvbm5lY3RlZCB0byB1cy4KKyAgICAvLyBJbiB0aGUgY2FzZSBvZiBtdWx0
aXBsZSBjb25uZWN0aW9ucyBpdCBzdW1zIHRoZSByZXN1bHQgaW50byBhbiBpbnRlcm5hbCBzdW1t
aW5nIGJ1cy4KKyAgICAvLyBJbiB0aGUgc2luZ2xlIGNvbm5lY3Rpb24gY2FzZSwgaXQgYWxsb3dz
IGluLXBsYWNlIHByb2Nlc3Npbmcgd2hlcmUgcG9zc2libGUgdXNpbmcgaW5QbGFjZUJ1cy4KKyAg
ICAvLyBJdCByZXR1cm5zIHRoZSBidXMgd2hpY2ggaXQgcmVuZGVyZWQgaW50bywgcmV0dXJuaW5n
IGluUGxhY2VCdXMgaWYgaW4tcGxhY2UgcHJvY2Vzc2luZyB3YXMgcGVyZm9ybWVkLgorICAgIC8v
IENhbGxlZCBmcm9tIGNvbnRleHQncyBhdWRpbyB0aHJlYWQuCisgICAgQXVkaW9CdXMqIHB1bGwo
QXVkaW9CdXMqIGluUGxhY2VCdXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOworCisgICAgLy8g
YnVzKCkgY29udGFpbnMgdGhlIHJlbmRlcmVkIGF1ZGlvIGFmdGVyIHB1bGwoKSBoYXMgYmVlbiBj
YWxsZWQgZm9yIGVhY2ggdGltZSBxdWFudHVtLgorICAgIC8vIENhbGxlZCBmcm9tIGNvbnRleHQn
cyBhdWRpbyB0aHJlYWQuCisgICAgQXVkaW9CdXMqIGJ1cygpOworICAgIAorICAgIC8vIFRoaXMg
Y29waWVzIG1fb3V0cHV0cyB0byBtX3JlbmRlcmluZ091dHB1dHMuICBQbGVhc2Ugc2VlIGNvbW1l
bnRzIGZvciB0aGVzZSBsaXN0cyBiZWxvdy4KKyAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIHdo
ZW4gd2Ugb3duIHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jayBpbiB0aGUgYXVkaW8gdGhyZWFkIGF0
IHRoZSB2ZXJ5IHN0YXJ0IG9yIGVuZCBvZiB0aGUgcmVuZGVyIHF1YW50dW0uCisgICAgdm9pZCB1
cGRhdGVSZW5kZXJpbmdTdGF0ZSgpOworCisgICAgLy8gdXBkYXRlSW50ZXJuYWxCdXMoKSB1cGRh
dGVzIG1faW50ZXJuYWxTdW1taW5nQnVzIGFwcHJvcHJpYXRlbHkgZm9yIHRoZSBudW1iZXIgb2Yg
Y2hhbm5lbHMuCisgICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCB3aGVuIHdlIG93biB0aGUgY29u
dGV4dCdzIGdyYXBoIGxvY2sgaW4gdGhlIGF1ZGlvIHRocmVhZCBhdCB0aGUgdmVyeSBzdGFydCBv
ciBlbmQgb2YgdGhlIHJlbmRlciBxdWFudHVtLgorICAgIHZvaWQgdXBkYXRlSW50ZXJuYWxCdXMo
KTsKKworICAgIC8vIFJlbmRlcmluZyBjb2RlIGFjY2Vzc2VzIGl0cyB2ZXJzaW9uIG9mIHRoZSBj
dXJyZW50IGNvbm5lY3Rpb25zIGhlcmUuCisgICAgdW5zaWduZWQgbnVtYmVyT2ZSZW5kZXJpbmdD
b25uZWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nT3V0cHV0cy5zaXplKCk7IH0K
KyAgICBBdWRpb05vZGVPdXRwdXQqIHJlbmRlcmluZ091dHB1dCh1bnNpZ25lZCBpKSB7IHJldHVy
biBtX3JlbmRlcmluZ091dHB1dHNbaV07IH0KKyAgICBjb25zdCBBdWRpb05vZGVPdXRwdXQqIHJl
bmRlcmluZ091dHB1dCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ091dHB1
dHNbaV07IH0KKyAgICBib29sIGlzQ29ubmVjdGVkKCkgY29uc3QgeyByZXR1cm4gbnVtYmVyT2ZS
ZW5kZXJpbmdDb25uZWN0aW9ucygpID4gMDsgfQorCisgICAgLy8gVGhlIG51bWJlciBvZiBjaGFu
bmVscyBvZiB0aGUgY29ubmVjdGlvbiB3aXRoIHRoZSBsYXJnZXN0IG51bWJlciBvZiBjaGFubmVs
cy4KKyAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKCkgY29uc3Q7ICAgICAgICAKKyAgICAK
K3ByaXZhdGU6CisgICAgQXVkaW9Ob2RlKiBtX25vZGU7CisKKyAgICAvLyBtX291dHB1dHMgY29u
dGFpbnMgdGhlIEF1ZGlvTm9kZU91dHB1dHMgcmVwcmVzZW50aW5nIGN1cnJlbnQgY29ubmVjdGlv
bnMgd2hpY2ggYXJlIG5vdCBkaXNhYmxlZC4KKyAgICAvLyBUaGUgcmVuZGVyaW5nIGNvZGUgc2hv
dWxkIG5ldmVyIHVzZSB0aGlzIGRpcmVjdGx5LCBidXQgaW5zdGVhZCB1c2VzIG1fcmVuZGVyaW5n
T3V0cHV0cy4KKyAgICBIYXNoU2V0PEF1ZGlvTm9kZU91dHB1dCo+IG1fb3V0cHV0czsKKworICAg
IC8vIG51bWJlck9mQ29ubmVjdGlvbnMoKSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGZyb20gdGhl
IGF1ZGlvIHJlbmRlcmluZyB0aHJlYWQuCisgICAgLy8gSW5zdGVhZCBudW1iZXJPZlJlbmRlcmlu
Z0Nvbm5lY3Rpb25zKCkgYW5kIHJlbmRlcmluZ091dHB1dCgpIHNob3VsZCBiZSB1c2VkLgorICAg
IHVuc2lnbmVkIG51bWJlck9mQ29ubmVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX291dHB1dHMu
c2l6ZSgpOyB9CisKKyAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIHdoZW5ldmVyIHdlIG1vZGlm
eSBtX291dHB1dHMuCisgICAgdm9pZCBjaGFuZ2VkT3V0cHV0cygpOworICAgIAorICAgIC8vIG1f
cmVuZGVyaW5nT3V0cHV0cyBpcyBhIGNvcHkgb2YgbV9vdXRwdXRzIHdoaWNoIHdpbGwgbmV2ZXIg
YmUgbW9kaWZpZWQgZHVyaW5nIHRoZSBncmFwaCByZW5kZXJpbmcgb24gdGhlIGF1ZGlvIHRocmVh
ZC4KKyAgICAvLyBUaGlzIGlzIHRoZSBsaXN0IHdoaWNoIGlzIHVzZWQgYnkgdGhlIHJlbmRlcmlu
ZyBjb2RlLgorICAgIC8vIFdoZW5ldmVyIG1fb3V0cHV0cyBpcyBtb2RpZmllZCwgdGhlIGNvbnRl
eHQgaXMgdG9sZCBzbyBpdCBjYW4gbGF0ZXIgdXBkYXRlIG1fcmVuZGVyaW5nT3V0cHV0cyBmcm9t
IG1fb3V0cHV0cyBhdCBhIHNhZmUgdGltZS4KKyAgICAvLyBNb3N0IG9mIHRoZSB0aW1lLCBtX3Jl
bmRlcmluZ091dHB1dHMgaXMgaWRlbnRpY2FsIHRvIG1fb3V0cHV0cy4KKyAgICBWZWN0b3I8QXVk
aW9Ob2RlT3V0cHV0Kj4gbV9yZW5kZXJpbmdPdXRwdXRzOworCisgICAgLy8gbV9yZW5kZXJpbmdT
dGF0ZU5lZWRVcGRhdGluZyBrZWVwcyB0cmFjayBpZiBtX291dHB1dHMgaXMgbW9kaWZpZWQuCisg
ICAgYm9vbCBtX3JlbmRlcmluZ1N0YXRlTmVlZFVwZGF0aW5nOworCisgICAgLy8gVGhlIG51bWJl
ciBvZiBjaGFubmVscyBvZiB0aGUgcmVuZGVyaW5nIGNvbm5lY3Rpb24gd2l0aCB0aGUgbGFyZ2Vz
dCBudW1iZXIgb2YgY2hhbm5lbHMuCisgICAgdW5zaWduZWQgbnVtYmVyT2ZSZW5kZXJpbmdDaGFu
bmVscygpOworCisgICAgLy8gbV9kaXNhYmxlZE91dHB1dHMgY29udGFpbnMgdGhlIEF1ZGlvTm9k
ZU91dHB1dHMgd2hpY2ggYXJlIGRpc2FibGVkICh3aWxsIG5vdCBiZSBwcm9jZXNzZWQpIGJ5IHRo
ZSBhdWRpbyBncmFwaCByZW5kZXJpbmcuCisgICAgLy8gQnV0LCBmcm9tIEphdmFTY3JpcHQncyBw
ZXJzcGVjdGl2ZSwgdGhlc2Ugb3V0cHV0cyBhcmUgc3RpbGwgY29ubmVjdGVkIHRvIHVzLgorICAg
IC8vIEdlbmVyYWxseSwgdGhlc2UgcmVwcmVzZW50IGRpc2FibGVkIGNvbm5lY3Rpb25zIGZyb20g
Im5vdGVzIiB3aGljaCBoYXZlIGZpbmlzaGVkIHBsYXlpbmcgYnV0IGFyZSBub3QgeWV0IGdhcmJh
Z2UgY29sbGVjdGVkLgorICAgIEhhc2hTZXQ8QXVkaW9Ob2RlT3V0cHV0Kj4gbV9kaXNhYmxlZE91
dHB1dHM7CisKKyAgICAvLyBDYWxsZWQgZnJvbSBjb250ZXh0J3MgYXVkaW8gdGhyZWFkLgorICAg
IEF1ZGlvQnVzKiBpbnRlcm5hbFN1bW1pbmdCdXMoKTsKKyAgICB2b2lkIHN1bUFsbENvbm5lY3Rp
b25zKEF1ZGlvQnVzKiBzdW1taW5nQnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKworICAg
IE93blB0cjxBdWRpb0J1cz4gbV9pbnRlcm5hbFN1bW1pbmdCdXM7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBBdWRpb05vZGVJbnB1dF9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuY3BwCShy
ZXZpc2lvbiAxMTEyMzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZU91
dHB1dC5jcHA6MTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b05vZGVPdXRwdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2lu
Y2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgorCisjaW5jbHVkZSAiQXVkaW9CdXMuaCIKKyNpbmNs
dWRlICJBdWRpb0NvbnRleHQuaCIKKyNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgorI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitBdWRpb05vZGVP
dXRwdXQ6OkF1ZGlvTm9kZU91dHB1dChBdWRpb05vZGUqIG5vZGUsIHVuc2lnbmVkIG51bWJlck9m
Q2hhbm5lbHMpCisgICAgOiBtX25vZGUobm9kZSkKKyAgICAsIG1fbnVtYmVyT2ZDaGFubmVscyhu
dW1iZXJPZkNoYW5uZWxzKQorICAgICwgbV9kZXNpcmVkTnVtYmVyT2ZDaGFubmVscyhudW1iZXJP
ZkNoYW5uZWxzKQorICAgICwgbV9hY3R1YWxEZXN0aW5hdGlvbkJ1cygwKQorICAgICwgbV9pc0Vu
YWJsZWQodHJ1ZSkKKyAgICAsIG1fcmVuZGVyaW5nRmFuT3V0Q291bnQoMCkKK3sKKyAgICBBU1NF
UlQobnVtYmVyT2ZDaGFubmVscyA8PSBBdWRpb0NvbnRleHQ6Om1heE51bWJlck9mQ2hhbm5lbHMo
KSk7CisKKyAgICBtX2ludGVybmFsQnVzID0gYWRvcHRQdHIobmV3IEF1ZGlvQnVzKG51bWJlck9m
Q2hhbm5lbHMsIEF1ZGlvTm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1lcykpOworICAgIG1fYWN0
dWFsRGVzdGluYXRpb25CdXMgPSBtX2ludGVybmFsQnVzLmdldCgpOworfQorCit2b2lkIEF1ZGlv
Tm9kZU91dHB1dDo6c2V0TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxz
KQoreworICAgIEFTU0VSVChudW1iZXJPZkNoYW5uZWxzIDw9IEF1ZGlvQ29udGV4dDo6bWF4TnVt
YmVyT2ZDaGFubmVscygpKTsKKyAgICBBU1NFUlQoY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7
CisKKyAgICBtX2Rlc2lyZWROdW1iZXJPZkNoYW5uZWxzID0gbnVtYmVyT2ZDaGFubmVsczsKKwor
ICAgIGlmIChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSkgeworICAgICAgICAvLyBJZiB3ZSdy
ZSBpbiB0aGUgYXVkaW8gdGhyZWFkIHRoZW4gd2UgY2FuIHRha2UgY2FyZSBvZiBpdCByaWdodCBh
d2F5ICh3ZSBzaG91bGQgYmUgYXQgdGhlIHZlcnkgc3RhcnQgb3IgZW5kIG9mIGEgcmVuZGVyaW5n
IHF1YW50dW0pLgorICAgICAgICB1cGRhdGVOdW1iZXJPZkNoYW5uZWxzKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gTGV0IHRoZSBjb250ZXh0IHRha2UgY2FyZSBvZiBpdCBpbiB0aGUgYXVk
aW8gdGhyZWFkIGluIHRoZSBwcmUgYW5kIHBvc3QgcmVuZGVyIHRhc2tzLgorICAgICAgICBjb250
ZXh0KCktPm1hcmtBdWRpb05vZGVPdXRwdXREaXJ0eSh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQg
QXVkaW9Ob2RlT3V0cHV0Ojp1cGRhdGVJbnRlcm5hbEJ1cygpCit7CisgICAgaWYgKG51bWJlck9m
Q2hhbm5lbHMoKSA9PSBtX2ludGVybmFsQnVzLT5udW1iZXJPZkNoYW5uZWxzKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1faW50ZXJuYWxCdXMgPSBhZG9wdFB0cihuZXcgQXVkaW9CdXMobnVt
YmVyT2ZDaGFubmVscygpLCBBdWRpb05vZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXMpKTsKKwor
ICAgIC8vIFRoaXMgbWF5IGxhdGVyIGJlIGNoYW5nZWQgaW4gcHVsbCgpIHRvIHBvaW50IHRvIGFu
IGluLXBsYWNlIGJ1cyB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBjaGFubmVscy4KKyAgICBtX2Fj
dHVhbERlc3RpbmF0aW9uQnVzID0gbV9pbnRlcm5hbEJ1cy5nZXQoKTsKK30KKwordm9pZCBBdWRp
b05vZGVPdXRwdXQ6OnVwZGF0ZVJlbmRlcmluZ1N0YXRlKCkKK3sKKyAgICB1cGRhdGVOdW1iZXJP
ZkNoYW5uZWxzKCk7CisgICAgbV9yZW5kZXJpbmdGYW5PdXRDb3VudCA9IGZhbk91dENvdW50KCk7
Cit9CisKK3ZvaWQgQXVkaW9Ob2RlT3V0cHV0Ojp1cGRhdGVOdW1iZXJPZkNoYW5uZWxzKCkKK3sK
KyAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkgJiYgY29udGV4dCgpLT5pc0dy
YXBoT3duZXIoKSk7CisKKyAgICBpZiAobV9udW1iZXJPZkNoYW5uZWxzICE9IG1fZGVzaXJlZE51
bWJlck9mQ2hhbm5lbHMpIHsKKyAgICAgICAgbV9udW1iZXJPZkNoYW5uZWxzID0gbV9kZXNpcmVk
TnVtYmVyT2ZDaGFubmVsczsKKyAgICAgICAgdXBkYXRlSW50ZXJuYWxCdXMoKTsKKyAgICAgICAg
cHJvcGFnYXRlQ2hhbm5lbENvdW50KCk7CisgICAgfQorfQorCit2b2lkIEF1ZGlvTm9kZU91dHB1
dDo6cHJvcGFnYXRlQ2hhbm5lbENvdW50KCkKK3sKKyAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1
ZGlvVGhyZWFkKCkgJiYgY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7CisgICAgCisgICAgaWYg
KGlzQ2hhbm5lbENvdW50S25vd24oKSkgeworICAgICAgICAvLyBBbm5vdW5jZSB0byBhbnkgbm9k
ZXMgd2UncmUgY29ubmVjdGVkIHRvIHRoYXQgd2UgY2hhbmdlZCBvdXIgY2hhbm5lbCBjb3VudCBm
b3IgaXRzIGlucHV0LgorICAgICAgICBmb3IgKElucHV0c0l0ZXJhdG9yIGkgPSBtX2lucHV0cy5i
ZWdpbigpOyBpICE9IG1faW5wdXRzLmVuZCgpOyArK2kpIHsKKyAgICAgICAgICAgIEF1ZGlvTm9k
ZUlucHV0KiBpbnB1dCA9ICppOworICAgICAgICAgICAgQXVkaW9Ob2RlKiBjb25uZWN0aW9uTm9k
ZSA9IGlucHV0LT5ub2RlKCk7CisgICAgICAgICAgICBjb25uZWN0aW9uTm9kZS0+Y2hlY2tOdW1i
ZXJPZkNoYW5uZWxzRm9ySW5wdXQoaW5wdXQpOworICAgICAgICB9CisgICAgfQorfQorCitBdWRp
b0J1cyogQXVkaW9Ob2RlT3V0cHV0OjpwdWxsKEF1ZGlvQnVzKiBpblBsYWNlQnVzLCBzaXplX3Qg
ZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQo
KSk7CisgICAgQVNTRVJUKG1fcmVuZGVyaW5nRmFuT3V0Q291bnQgPiAwKTsKKyAgICAKKyAgICAv
LyBDYXVzZXMgb3VyIEF1ZGlvTm9kZSB0byBwcm9jZXNzIGlmIGl0IGhhc24ndCBhbHJlYWR5IGZv
ciB0aGlzIHJlbmRlciBxdWFudHVtLgorICAgIC8vIFdlIHRyeSB0byBkbyBpbi1wbGFjZSBwcm9j
ZXNzaW5nICh1c2luZyBpblBsYWNlQnVzKSBpZiBhdCBhbGwgcG9zc2libGUsCisgICAgLy8gYnV0
IHdlIGNhbid0IHByb2Nlc3MgaW4tcGxhY2UgaWYgd2UncmUgY29ubmVjdGVkIHRvIG1vcmUgdGhh
biBvbmUgaW5wdXQgKGZhbi1vdXQgPiAxKS4KKyAgICAvLyBJbiB0aGlzIGNhc2UgcHVsbCgpIGlz
IGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBwZXIgcmVuZGVyaW5nIHF1YW50dW0sIGFuZCB0aGUgcHJv
Y2Vzc0lmTmVjZXNzYXJ5KCkgY2FsbCBiZWxvdyB3aWxsCisgICAgLy8gY2F1c2Ugb3VyIG5vZGUg
dG8gcHJvY2VzcygpIG9ubHkgdGhlIGZpcnN0IHRpbWUsIGNhY2hpbmcgdGhlIG91dHB1dCBpbiBt
X2ludGVybmFsT3V0cHV0QnVzIGZvciBzdWJzZXF1ZW50IGNhbGxzLiAgICAKKyAgICAKKyAgICBi
b29sIGlzSW5QbGFjZSA9IGluUGxhY2VCdXMgJiYgaW5QbGFjZUJ1cy0+bnVtYmVyT2ZDaGFubmVs
cygpID09IG51bWJlck9mQ2hhbm5lbHMoKSAmJiBtX3JlbmRlcmluZ0Zhbk91dENvdW50ID09IDE7
CisKKyAgICAvLyBTZXR1cCB0aGUgYWN0dWFsIGRlc3RpbmF0aW9uIGJ1cyBmb3IgcHJvY2Vzc2lu
ZyB3aGVuIG91ciBub2RlJ3MgcHJvY2VzcygpIG1ldGhvZCBnZXRzIGNhbGxlZCBpbiBwcm9jZXNz
SWZOZWNlc3NhcnkoKSBiZWxvdy4KKyAgICBtX2FjdHVhbERlc3RpbmF0aW9uQnVzID0gaXNJblBs
YWNlID8gaW5QbGFjZUJ1cyA6IG1faW50ZXJuYWxCdXMuZ2V0KCk7CisKKyAgICBub2RlKCktPnBy
b2Nlc3NJZk5lY2Vzc2FyeShmcmFtZXNUb1Byb2Nlc3MpOworICAgIHJldHVybiBtX2FjdHVhbERl
c3RpbmF0aW9uQnVzOworfQorCitBdWRpb0J1cyogQXVkaW9Ob2RlT3V0cHV0OjpidXMoKSBjb25z
dAoreworICAgIEFTU0VSVChjb25zdF9jYXN0PEF1ZGlvTm9kZU91dHB1dCo+KHRoaXMpLT5jb250
ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fYWN0dWFsRGVzdGluYXRpb25C
dXMpOworICAgIHJldHVybiBtX2FjdHVhbERlc3RpbmF0aW9uQnVzOworfQorCit1bnNpZ25lZCBB
dWRpb05vZGVPdXRwdXQ6OnJlbmRlcmluZ0Zhbk91dENvdW50KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9yZW5kZXJpbmdGYW5PdXRDb3VudDsKK30KKwordW5zaWduZWQgQXVkaW9Ob2RlT3V0cHV0
OjpmYW5PdXRDb3VudCgpCit7CisgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkp
OworICAgIHJldHVybiBtX2lucHV0cy5zaXplKCk7Cit9CisKK3ZvaWQgQXVkaW9Ob2RlT3V0cHV0
OjphZGRJbnB1dChBdWRpb05vZGVJbnB1dCogaW5wdXQpCit7CisgICAgQVNTRVJUKGNvbnRleHQo
KS0+aXNHcmFwaE93bmVyKCkpOworCisgICAgQVNTRVJUKGlucHV0KTsKKyAgICBpZiAoIWlucHV0
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lucHV0cy5hZGQoaW5wdXQpOworfQorCit2b2lk
IEF1ZGlvTm9kZU91dHB1dDo6cmVtb3ZlSW5wdXQoQXVkaW9Ob2RlSW5wdXQqIGlucHV0KQorewor
ICAgIEFTU0VSVChjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKKworICAgIEFTU0VSVChpbnB1
dCk7CisgICAgaWYgKCFpbnB1dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnB1dHMucmVt
b3ZlKGlucHV0KTsKK30KKwordm9pZCBBdWRpb05vZGVPdXRwdXQ6OmRpc2Nvbm5lY3RBbGxJbnB1
dHMoKQoreworICAgIEFTU0VSVChjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKKyAgICAKKyAg
ICAvLyBBdWRpb05vZGVJbnB1dDo6ZGlzY29ubmVjdCgpIGNoYW5nZXMgbV9pbnB1dHMgYnkgY2Fs
bGluZyByZW1vdmVJbnB1dCgpLgorICAgIHdoaWxlICghbV9pbnB1dHMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIEF1ZGlvTm9kZUlucHV0KiBpbnB1dCA9ICptX2lucHV0cy5iZWdpbigpOworICAgICAg
ICBpbnB1dC0+ZGlzY29ubmVjdCh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgQXVkaW9Ob2RlT3V0
cHV0OjpkaXNhYmxlKCkKK3sKKyAgICBBU1NFUlQoY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7
CisKKyAgICBpZiAobV9pc0VuYWJsZWQpIHsKKyAgICAgICAgZm9yIChJbnB1dHNJdGVyYXRvciBp
ID0gbV9pbnB1dHMuYmVnaW4oKTsgaSAhPSBtX2lucHV0cy5lbmQoKTsgKytpKSB7CisgICAgICAg
ICAgICBBdWRpb05vZGVJbnB1dCogaW5wdXQgPSAqaTsKKyAgICAgICAgICAgIGlucHV0LT5kaXNh
YmxlKHRoaXMpOworICAgICAgICB9CisgICAgICAgIG1faXNFbmFibGVkID0gZmFsc2U7CisgICAg
fQorfQorCit2b2lkIEF1ZGlvTm9kZU91dHB1dDo6ZW5hYmxlKCkKK3sKKyAgICBBU1NFUlQoY29u
dGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7CisKKyAgICBpZiAoIW1faXNFbmFibGVkKSB7CisgICAg
ICAgIGZvciAoSW5wdXRzSXRlcmF0b3IgaSA9IG1faW5wdXRzLmJlZ2luKCk7IGkgIT0gbV9pbnB1
dHMuZW5kKCk7ICsraSkgeworICAgICAgICAgICAgQXVkaW9Ob2RlSW5wdXQqIGlucHV0ID0gKmk7
CisgICAgICAgICAgICBpbnB1dC0+ZW5hYmxlKHRoaXMpOworICAgICAgICB9CisgICAgICAgIG1f
aXNFbmFibGVkID0gdHJ1ZTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmgJKHJldmlzaW9uIDExMTIzMykJKGZy
b20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0Lmg6MTExMjMzKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXVkaW9Ob2Rl
T3V0cHV0X2gKKyNkZWZpbmUgQXVkaW9Ob2RlT3V0cHV0X2gKKworI2luY2x1ZGUgIkF1ZGlvQnVz
LmgiCisjaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvQ29udGV4dDsKK2NsYXNzIEF1ZGlvTm9kZUlucHV0
OworCisvLyBBdWRpb05vZGVPdXRwdXQgcmVwcmVzZW50cyBhIHNpbmdsZSBvdXRwdXQgZm9yIGFu
IEF1ZGlvTm9kZS4KKy8vIEl0IG1heSBiZSBjb25uZWN0ZWQgdG8gb25lIG9yIG1vcmUgQXVkaW9O
b2RlSW5wdXRzLgorCitjbGFzcyBBdWRpb05vZGVPdXRwdXQgeworcHVibGljOgorICAgIC8vIEl0
J3MgT0sgdG8gcGFzcyAwIGZvciBudW1iZXJPZkNoYW5uZWxzIGluIHdoaWNoIGNhc2Ugc2V0TnVt
YmVyT2ZDaGFubmVscygpIG11c3QgYmUgY2FsbGVkIGxhdGVyIG9uLgorICAgIEF1ZGlvTm9kZU91
dHB1dChBdWRpb05vZGUqLCB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKTsKKworICAgIC8vIENh
biBiZSBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkLgorICAgIEF1ZGlvTm9kZSogbm9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbm9kZTsgfQorICAgIEF1ZGlvQ29udGV4dCogY29udGV4dCgpIHsgcmV0dXJu
IG1fbm9kZS0+Y29udGV4dCgpOyB9CisgICAgCisgICAgLy8gQ2F1c2VzIG91ciBBdWRpb05vZGUg
dG8gcHJvY2VzcyBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBmb3IgdGhpcyByZW5kZXIgcXVhbnR1bS4K
KyAgICAvLyBJdCByZXR1cm5zIHRoZSBidXMgY29udGFpbmluZyB0aGUgcHJvY2Vzc2VkIGF1ZGlv
IGZvciB0aGlzIG91dHB1dCwgcmV0dXJuaW5nIGluUGxhY2VCdXMgaWYgaW4tcGxhY2UgcHJvY2Vz
c2luZyB3YXMgcG9zc2libGUuCisgICAgLy8gQ2FsbGVkIGZyb20gY29udGV4dCdzIGF1ZGlvIHRo
cmVhZC4KKyAgICBBdWRpb0J1cyogcHVsbChBdWRpb0J1cyogaW5QbGFjZUJ1cywgc2l6ZV90IGZy
YW1lc1RvUHJvY2Vzcyk7CisKKyAgICAvLyBidXMoKSB3aWxsIGNvbnRhaW4gdGhlIHJlbmRlcmVk
IGF1ZGlvIGFmdGVyIHB1bGwoKSBpcyBjYWxsZWQgZm9yIGVhY2ggcmVuZGVyaW5nIHRpbWUgcXVh
bnR1bS4KKyAgICAvLyBDYWxsZWQgZnJvbSBjb250ZXh0J3MgYXVkaW8gdGhyZWFkLgorICAgIEF1
ZGlvQnVzKiBidXMoKSBjb25zdDsKKworICAgIC8vIGZhbk91dENvdW50KCkgaXMgdGhlIG51bWJl
ciBvZiBBdWRpb05vZGVJbnB1dHMgdGhhdCB3ZSdyZSBjb25uZWN0ZWQgdG8uCisgICAgLy8gVGhp
cyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCBpbiBhdWRpbyB0aHJlYWQgcmVuZGVyaW5n
IGNvZGUsIGluc3RlYWQgcmVuZGVyaW5nRmFuT3V0Q291bnQoKSBzaG91bGQgYmUgdXNlZC4KKyAg
ICAvLyBJdCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jay4KKyAg
ICB1bnNpZ25lZCBmYW5PdXRDb3VudCgpOworCisgICAgLy8gcmVuZGVyaW5nRmFuT3V0Q291bnQo
KSBpcyB0aGUgbnVtYmVyIG9mIEF1ZGlvTm9kZUlucHV0cyB0aGF0IHdlJ3JlIGNvbm5lY3RlZCB0
byBkdXJpbmcgcmVuZGVyaW5nLgorICAgIC8vIFVubGlrZSBmYW5PdXRDb3VudCgpIGl0IHdpbGwg
bm90IGNoYW5nZSBkdXJpbmcgdGhlIGNvdXJzZSBvZiBhIHJlbmRlciBxdWFudHVtLgorICAgIHVu
c2lnbmVkIHJlbmRlcmluZ0Zhbk91dENvdW50KCkgY29uc3Q7CisKKyAgICAvLyBJdCBtdXN0IGJl
IGNhbGxlZCB3aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jay4KKyAgICB2b2lkIGRpc2Nvbm5l
Y3RBbGxJbnB1dHMoKTsKKworICAgIHZvaWQgc2V0TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25lZCk7
CisgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtYmVy
T2ZDaGFubmVsczsgfQorICAgIGJvb2wgaXNDaGFubmVsQ291bnRLbm93bigpIGNvbnN0IHsgcmV0
dXJuIG51bWJlck9mQ2hhbm5lbHMoKSA+IDA7IH0KKworICAgIC8vIERpc2FibGUvRW5hYmxlIGhh
cHBlbnMgd2hlbiB0aGVyZSBhcmUgc3RpbGwgSmF2YVNjcmlwdCByZWZlcmVuY2VzIHRvIGEgbm9k
ZSwgYnV0IGl0IGhhcyBvdGhlcndpc2UgImZpbmlzaGVkIiBpdHMgd29yay4KKyAgICAvLyBGb3Ig
ZXhhbXBsZSwgd2hlbiBhIG5vdGUgaGFzIGZpbmlzaGVkIHBsYXlpbmcuICBJdCBpcyBrZXB0IGFy
b3VuZCwgYmVjYXVzZSBpdCBtYXkgYmUgcGxheWVkIGFnYWluIGF0IGEgbGF0ZXIgdGltZS4KKyAg
ICAvLyBUaGV5IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGNvbnRleHQncyBncmFwaCBsb2NrLgor
ICAgIHZvaWQgZGlzYWJsZSgpOworICAgIHZvaWQgZW5hYmxlKCk7CisKKyAgICAvLyB1cGRhdGVS
ZW5kZXJpbmdTdGF0ZSgpIGlzIGNhbGxlZCBpbiB0aGUgYXVkaW8gdGhyZWFkIGF0IHRoZSBzdGFy
dCBvciBlbmQgb2YgdGhlIHJlbmRlciBxdWFudHVtIHRvIGhhbmRsZSBhbnkgcmVjZW50IGNoYW5n
ZXMgdG8gdGhlIGdyYXBoIHN0YXRlLgorICAgIC8vIEl0IG11c3QgYmUgY2FsbGVkIHdpdGggdGhl
IGNvbnRleHQncyBncmFwaCBsb2NrLgorICAgIHZvaWQgdXBkYXRlUmVuZGVyaW5nU3RhdGUoKTsK
KyAgICAKK3ByaXZhdGU6CisgICAgQXVkaW9Ob2RlKiBtX25vZGU7CisKKyAgICBmcmllbmQgY2xh
c3MgQXVkaW9Ob2RlSW5wdXQ7CisgICAgCisgICAgLy8gVGhlc2UgYXJlIGNhbGxlZCBmcm9tIEF1
ZGlvTm9kZUlucHV0LgorICAgIC8vIFRoZXkgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgY29udGV4
dCdzIGdyYXBoIGxvY2suCisgICAgdm9pZCBhZGRJbnB1dChBdWRpb05vZGVJbnB1dCopOworICAg
IHZvaWQgcmVtb3ZlSW5wdXQoQXVkaW9Ob2RlSW5wdXQqKTsKKworICAgIC8vIHVwZGF0ZUludGVy
bmFsQnVzKCkgdXBkYXRlcyBtX2ludGVybmFsQnVzIGFwcHJvcHJpYXRlbHkgZm9yIHRoZSBudW1i
ZXIgb2YgY2hhbm5lbHMuCisgICAgLy8gSXQgaXMgY2FsbGVkIGluIHRoZSBjb25zdHJ1Y3RvciBv
ciBpbiB0aGUgYXVkaW8gdGhyZWFkIHdpdGggdGhlIGNvbnRleHQncyBncmFwaCBsb2NrLgorICAg
IHZvaWQgdXBkYXRlSW50ZXJuYWxCdXMoKTsKKworICAgIC8vIEFubm91bmNlIHRvIGFueSBub2Rl
cyB3ZSdyZSBjb25uZWN0ZWQgdG8gdGhhdCB3ZSBjaGFuZ2VkIG91ciBjaGFubmVsIGNvdW50IGZv
ciBpdHMgaW5wdXQuCisgICAgLy8gSXQgbXVzdCBiZSBjYWxsZWQgaW4gdGhlIGF1ZGlvIHRocmVh
ZCB3aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jay4KKyAgICB2b2lkIHByb3BhZ2F0ZUNoYW5u
ZWxDb3VudCgpOworCisgICAgLy8gdXBkYXRlTnVtYmVyT2ZDaGFubmVscygpIGlzIGNhbGxlZCBp
biB0aGUgYXVkaW8gdGhyZWFkIGF0IHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIHJlbmRlciBxdWFu
dHVtIHRvIHBpY2sgdXAgY2hhbm5lbCBjaGFuZ2VzLgorICAgIC8vIEl0IG11c3QgYmUgY2FsbGVk
IHdpdGggdGhlIGNvbnRleHQncyBncmFwaCBsb2NrLgorICAgIHZvaWQgdXBkYXRlTnVtYmVyT2ZD
aGFubmVscygpOworCisgICAgLy8gbV9udW1iZXJPZkNoYW5uZWxzIHdpbGwgb25seSBiZSBjaGFu
Z2VkIGluIHRoZSBhdWRpbyB0aHJlYWQuCisgICAgLy8gVGhlIG1haW4gdGhyZWFkIHNldHMgbV9k
ZXNpcmVkTnVtYmVyT2ZDaGFubmVscyB3aGljaCB3aWxsIGxhdGVyIGdldCBwaWNrZWQgdXAgaW4g
dGhlIGF1ZGlvIHRocmVhZCBpbiB1cGRhdGVOdW1iZXJPZkNoYW5uZWxzKCkuCisgICAgdW5zaWdu
ZWQgbV9udW1iZXJPZkNoYW5uZWxzOworICAgIHVuc2lnbmVkIG1fZGVzaXJlZE51bWJlck9mQ2hh
bm5lbHM7CisgICAgCisgICAgLy8gbV9pbnRlcm5hbEJ1cyBtdXN0IG9ubHkgYmUgY2hhbmdlZCBp
biB0aGUgYXVkaW8gdGhyZWFkIHdpdGggdGhlIGNvbnRleHQncyBncmFwaCBsb2NrIChvciBjb25z
dHJ1Y3RvcikuCisgICAgT3duUHRyPEF1ZGlvQnVzPiBtX2ludGVybmFsQnVzOworCisgICAgLy8g
bV9hY3R1YWxEZXN0aW5hdGlvbkJ1cyBpcyBzZXQgaW4gcHVsbCgpIGFuZCB3aWxsIGVpdGhlciBw
b2ludCB0byBvbmUgb2Ygb3VyIGludGVybmFsIGJ1c3NlcyBvciB0byB0aGUgaW4tcGxhY2UgYnVz
LgorICAgIC8vIEl0IG11c3Qgb25seSBiZSBjaGFuZ2VkIGluIHRoZSBhdWRpbyB0aHJlYWQgKG9y
IGNvbnN0cnVjdG9yKS4KKyAgICBBdWRpb0J1cyogbV9hY3R1YWxEZXN0aW5hdGlvbkJ1czsKKwor
ICAgIEhhc2hTZXQ8QXVkaW9Ob2RlSW5wdXQqPiBtX2lucHV0czsKKyAgICB0eXBlZGVmIEhhc2hT
ZXQ8QXVkaW9Ob2RlSW5wdXQqPjo6aXRlcmF0b3IgSW5wdXRzSXRlcmF0b3I7CisgICAgYm9vbCBt
X2lzRW5hYmxlZDsKKyAgICAKKyAgICAvLyBGb3IgdGhlIHB1cnBvc2VzIG9mIHJlbmRlcmluZywg
a2VlcHMgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBpbnB1dHMgd2UncmUgY29ubmVjdGVkIHRvLgor
ICAgIC8vIFRoaXMgdmFsdWUgc2hvdWxkIG9ubHkgYmUgY2hhbmdlZCBhdCB0aGUgdmVyeSBzdGFy
dCBvciBlbmQgb2YgdGhlIHJlbmRlcmluZyBxdWFudHVtLgorICAgIHVuc2lnbmVkIG1fcmVuZGVy
aW5nRmFuT3V0Q291bnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBBdWRpb05vZGVPdXRwdXRfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb1Bhbm5lck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmNwcAkocmV2aXNpb24gMTExMjMzKQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuY3BwOjExMTIzMykKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDMzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJBdWRpb1Bhbm5lck5vZGUu
aCIKKworI2luY2x1ZGUgIkF1ZGlvQnVmZmVyU291cmNlTm9kZS5oIgorI2luY2x1ZGUgIkF1ZGlv
QnVzLmgiCisjaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCisjaW5jbHVkZSAiQXVkaW9Ob2RlSW5w
dXQuaCIKKyNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCisjaW5jbHVkZSAiSFJURlBhbm5lci5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Rh
dGljIHZvaWQgZml4TkFOcyhkb3VibGUgJngpCit7CisgICAgaWYgKGlzbmFuKHgpIHx8IGlzaW5m
KHgpKQorICAgICAgICB4ID0gMC4wOworfQorCitBdWRpb1Bhbm5lck5vZGU6OkF1ZGlvUGFubmVy
Tm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCisgICAgOiBBdWRp
b05vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkKKyAgICAsIG1fcGFubmluZ01vZGVsKFBhbm5lcjo6
UGFubmluZ01vZGVsSFJURikKKyAgICAsIG1fbGFzdEdhaW4oLTEuMCkKKyAgICAsIG1fY29ubmVj
dGlvbkNvdW50KDApCit7CisgICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0
KHRoaXMpKSk7CisgICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhp
cywgMikpKTsKKyAgICAKKyAgICBtX2Rpc3RhbmNlR2FpbiA9IEF1ZGlvR2Fpbjo6Y3JlYXRlKCJk
aXN0YW5jZUdhaW4iLCAxLjAsIDAuMCwgMS4wKTsKKyAgICBtX2NvbmVHYWluID0gQXVkaW9HYWlu
OjpjcmVhdGUoImNvbmVHYWluIiwgMS4wLCAwLjAsIDEuMCk7CisKKyAgICBtX3Bvc2l0aW9uID0g
RmxvYXRQb2ludDNEKDAsIDAsIDApOworICAgIG1fb3JpZW50YXRpb24gPSBGbG9hdFBvaW50M0Qo
MSwgMCwgMCk7CisgICAgbV92ZWxvY2l0eSA9IEZsb2F0UG9pbnQzRCgwLCAwLCAwKTsKKyAgICAK
KyAgICBzZXROb2RlVHlwZShOb2RlVHlwZVBhbm5lcik7CisKKyAgICBpbml0aWFsaXplKCk7Cit9
CisKK0F1ZGlvUGFubmVyTm9kZTo6fkF1ZGlvUGFubmVyTm9kZSgpCit7CisgICAgdW5pbml0aWFs
aXplKCk7Cit9CisKK3ZvaWQgQXVkaW9QYW5uZXJOb2RlOjpwdWxsSW5wdXRzKHNpemVfdCBmcmFt
ZXNUb1Byb2Nlc3MpCit7CisgICAgLy8gV2Ugb3ZlcnJpZGUgcHVsbElucHV0cygpLCBzbyB3ZSBj
YW4gZGV0ZWN0IG5ldyBBdWRpb1NvdXJjZU5vZGVzIHdoaWNoIGhhdmUgY29ubmVjdGVkIHRvIHVz
IHdoZW4gbmV3IGNvbm5lY3Rpb25zIGFyZSBtYWRlLgorICAgIC8vIFRoZXNlIEF1ZGlvU291cmNl
Tm9kZXMgbmVlZCB0byBiZSBtYWRlIGF3YXJlIG9mIG91ciBleGlzdGVuY2UgaW4gb3JkZXIgdG8g
aGFuZGxlIGRvcHBsZXIgc2hpZnQgcGl0Y2ggY2hhbmdlcy4KKyAgICBpZiAobV9jb25uZWN0aW9u
Q291bnQgIT0gY29udGV4dCgpLT5jb25uZWN0aW9uQ291bnQoKSkgeworICAgICAgICBtX2Nvbm5l
Y3Rpb25Db3VudCA9IGNvbnRleHQoKS0+Y29ubmVjdGlvbkNvdW50KCk7CisKKyAgICAgICAgLy8g
UmVjdXJzaXZlbHkgZ28gdGhyb3VnaCBhbGwgbm9kZXMgY29ubmVjdGVkIHRvIHVzLgorICAgICAg
ICBub3RpZnlBdWRpb1NvdXJjZXNDb25uZWN0ZWRUb05vZGUodGhpcyk7CisgICAgfQorICAgIAor
ICAgIEF1ZGlvTm9kZTo6cHVsbElucHV0cyhmcmFtZXNUb1Byb2Nlc3MpOworfQorCit2b2lkIEF1
ZGlvUGFubmVyTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIEF1
ZGlvQnVzKiBkZXN0aW5hdGlvbiA9IG91dHB1dCgwKS0+YnVzKCk7CisKKyAgICBpZiAoIWlzSW5p
dGlhbGl6ZWQoKSB8fCAhaW5wdXQoMCktPmlzQ29ubmVjdGVkKCkgfHwgIW1fcGFubmVyLmdldCgp
KSB7CisgICAgICAgIGRlc3RpbmF0aW9uLT56ZXJvKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBBdWRpb0J1cyogc291cmNlID0gaW5wdXQoMCktPmJ1cygpOworCisgICAgaWYgKCFz
b3VyY2UpIHsKKyAgICAgICAgZGVzdGluYXRpb24tPnplcm8oKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIEFwcGx5IHRoZSBwYW5uaW5nIGVmZmVjdC4KKyAgICBkb3VibGUgYXpp
bXV0aDsKKyAgICBkb3VibGUgZWxldmF0aW9uOworICAgIGdldEF6aW11dGhFbGV2YXRpb24oJmF6
aW11dGgsICZlbGV2YXRpb24pOworICAgIG1fcGFubmVyLT5wYW4oYXppbXV0aCwgZWxldmF0aW9u
LCBzb3VyY2UsIGRlc3RpbmF0aW9uLCBmcmFtZXNUb1Byb2Nlc3MpOworCisgICAgLy8gR2V0IHRo
ZSBkaXN0YW5jZSBhbmQgY29uZSBnYWluLgorICAgIGRvdWJsZSB0b3RhbEdhaW4gPSBkaXN0YW5j
ZUNvbmVHYWluKCk7CisKKyAgICAvLyBTbmFwIHRvIGRlc2lyZWQgZ2FpbiBhdCB0aGUgYmVnaW5u
aW5nLgorICAgIGlmIChtX2xhc3RHYWluID09IC0xLjApCisgICAgICAgIG1fbGFzdEdhaW4gPSB0
b3RhbEdhaW47CisgICAgICAgIAorICAgIC8vIEFwcGx5IGdhaW4gaW4tcGxhY2Ugd2l0aCBkZS16
aXBwZXJpbmcuCisgICAgZGVzdGluYXRpb24tPmNvcHlXaXRoR2FpbkZyb20oKmRlc3RpbmF0aW9u
LCAmbV9sYXN0R2FpbiwgdG90YWxHYWluKTsKK30KKwordm9pZCBBdWRpb1Bhbm5lck5vZGU6OnJl
c2V0KCkKK3sKKyAgICBtX2xhc3RHYWluID0gLTEuMDsgLy8gZm9yY2UgdG8gc25hcCB0byBpbml0
aWFsIGdhaW4KKyAgICBpZiAobV9wYW5uZXIuZ2V0KCkpCisgICAgICAgIG1fcGFubmVyLT5yZXNl
dCgpOworfQorCit2b2lkIEF1ZGlvUGFubmVyTm9kZTo6aW5pdGlhbGl6ZSgpCit7CisgICAgaWYg
KGlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBtX3Bhbm5l
ciA9IFBhbm5lcjo6Y3JlYXRlKG1fcGFubmluZ01vZGVsLCBzYW1wbGVSYXRlKCkpOworCisgICAg
QXVkaW9Ob2RlOjppbml0aWFsaXplKCk7Cit9CisKK3ZvaWQgQXVkaW9QYW5uZXJOb2RlOjp1bmlu
aXRpYWxpemUoKQoreworICAgIGlmICghaXNJbml0aWFsaXplZCgpKQorICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgIG1fcGFubmVyLmNsZWFyKCk7CisgICAgQXVkaW9Ob2RlOjp1bmluaXRp
YWxpemUoKTsKK30KKworQXVkaW9MaXN0ZW5lciogQXVkaW9QYW5uZXJOb2RlOjpsaXN0ZW5lcigp
Cit7CisgICAgcmV0dXJuIGNvbnRleHQoKS0+bGlzdGVuZXIoKTsKK30KKwordm9pZCBBdWRpb1Bh
bm5lck5vZGU6OnNldFBhbm5pbmdNb2RlbCh1bnNpZ25lZCBzaG9ydCBtb2RlbCwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgc3dpdGNoIChtb2RlbCkgeworICAgIGNhc2UgRVFVQUxQT1dFUjoK
KyAgICBjYXNlIEhSVEY6CisgICAgICAgIGlmICghbV9wYW5uZXIuZ2V0KCkgfHwgbW9kZWwgIT0g
bV9wYW5uaW5nTW9kZWwpIHsKKyAgICAgICAgICAgIE93blB0cjxQYW5uZXI+IG5ld1Bhbm5lciA9
IFBhbm5lcjo6Y3JlYXRlKG1vZGVsLCBzYW1wbGVSYXRlKCkpOworICAgICAgICAgICAgbV9wYW5u
ZXIgPSBuZXdQYW5uZXIucmVsZWFzZSgpOworICAgICAgICAgICAgbV9wYW5uaW5nTW9kZWwgPSBt
b2RlbDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFNPVU5ERklFTEQ6Cisg
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgc291bmQgZmllbGQgbW9kZWwuIFNlZSAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczNjcuCisgICAgICAgIC8vIEZv
ciBub3csIGZhbGwgdGhyb3VnaCB0byB0aHJvdyBhbiBleGNlcHRpb24uCisgICAgZGVmYXVsdDoK
KyAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCit2b2lkIEF1ZGlvUGFubmVyTm9kZTo6Z2V0QXppbXV0aEVsZXZhdGlvbihkb3VibGUqIG91
dEF6aW11dGgsIGRvdWJsZSogb3V0RWxldmF0aW9uKQoreworICAgIC8vIEZJWE1FOiB3ZSBzaG91
bGQgY2FjaGUgYXppbXV0aCBhbmQgZWxldmF0aW9uIChpZiBwb3NzaWJsZSksIHNvIHdlIG9ubHkg
cmUtY2FsY3VsYXRlIGlmIGEgY2hhbmdlIGhhcyBiZWVuIG1hZGUuCisKKyAgICBkb3VibGUgYXpp
bXV0aCA9IDAuMDsKKworICAgIC8vIENhbGN1bGF0ZSB0aGUgc291cmNlLWxpc3RlbmVyIHZlY3Rv
cgorICAgIEZsb2F0UG9pbnQzRCBsaXN0ZW5lclBvc2l0aW9uID0gbGlzdGVuZXIoKS0+cG9zaXRp
b24oKTsKKyAgICBGbG9hdFBvaW50M0Qgc291cmNlTGlzdGVuZXIgPSBtX3Bvc2l0aW9uIC0gbGlz
dGVuZXJQb3NpdGlvbjsKKworICAgIGlmIChzb3VyY2VMaXN0ZW5lci5pc1plcm8oKSkgeworICAg
ICAgICAvLyBkZWdlbmVyYXRlIGNhc2UgaWYgc291cmNlIGFuZCBsaXN0ZW5lciBhcmUgYXQgdGhl
IHNhbWUgcG9pbnQKKyAgICAgICAgKm91dEF6aW11dGggPSAwLjA7CisgICAgICAgICpvdXRFbGV2
YXRpb24gPSAwLjA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzb3VyY2VMaXN0ZW5l
ci5ub3JtYWxpemUoKTsKKworICAgIC8vIEFsaWduIGF4ZXMKKyAgICBGbG9hdFBvaW50M0QgbGlz
dGVuZXJGcm9udCA9IGxpc3RlbmVyKCktPm9yaWVudGF0aW9uKCk7CisgICAgRmxvYXRQb2ludDNE
IGxpc3RlbmVyVXAgPSBsaXN0ZW5lcigpLT51cFZlY3RvcigpOworICAgIEZsb2F0UG9pbnQzRCBs
aXN0ZW5lclJpZ2h0ID0gbGlzdGVuZXJGcm9udC5jcm9zcyhsaXN0ZW5lclVwKTsKKyAgICBsaXN0
ZW5lclJpZ2h0Lm5vcm1hbGl6ZSgpOworCisgICAgRmxvYXRQb2ludDNEIGxpc3RlbmVyRnJvbnRO
b3JtID0gbGlzdGVuZXJGcm9udDsKKyAgICBsaXN0ZW5lckZyb250Tm9ybS5ub3JtYWxpemUoKTsK
KworICAgIEZsb2F0UG9pbnQzRCB1cCA9IGxpc3RlbmVyUmlnaHQuY3Jvc3MobGlzdGVuZXJGcm9u
dE5vcm0pOworCisgICAgZmxvYXQgdXBQcm9qZWN0aW9uID0gc291cmNlTGlzdGVuZXIuZG90KHVw
KTsKKworICAgIEZsb2F0UG9pbnQzRCBwcm9qZWN0ZWRTb3VyY2UgPSBzb3VyY2VMaXN0ZW5lciAt
IHVwUHJvamVjdGlvbiAqIHVwOworICAgIHByb2plY3RlZFNvdXJjZS5ub3JtYWxpemUoKTsKKwor
ICAgIGF6aW11dGggPSAxODAuMCAqIGFjb3MocHJvamVjdGVkU291cmNlLmRvdChsaXN0ZW5lclJp
Z2h0KSkgLyBwaURvdWJsZTsKKyAgICBmaXhOQU5zKGF6aW11dGgpOyAvLyBhdm9pZCBpbGxlZ2Fs
IHZhbHVlcworCisgICAgLy8gU291cmNlICBpbiBmcm9udCBvciBiZWhpbmQgdGhlIGxpc3RlbmVy
CisgICAgZG91YmxlIGZyb250QmFjayA9IHByb2plY3RlZFNvdXJjZS5kb3QobGlzdGVuZXJGcm9u
dE5vcm0pOworICAgIGlmIChmcm9udEJhY2sgPCAwLjApCisgICAgICAgIGF6aW11dGggPSAzNjAu
MCAtIGF6aW11dGg7CisKKyAgICAvLyBNYWtlIGF6aW11dGggcmVsYXRpdmUgdG8gImZyb250IiBh
bmQgbm90ICJyaWdodCIgbGlzdGVuZXIgdmVjdG9yCisgICAgaWYgKChhemltdXRoID49IDAuMCkg
JiYgKGF6aW11dGggPD0gMjcwLjApKQorICAgICAgICBhemltdXRoID0gOTAuMCAtIGF6aW11dGg7
CisgICAgZWxzZQorICAgICAgICBhemltdXRoID0gNDUwLjAgLSBhemltdXRoOworCisgICAgLy8g
RWxldmF0aW9uCisgICAgZG91YmxlIGVsZXZhdGlvbiA9IDkwLjAgLSAxODAuMCAqIGFjb3Moc291
cmNlTGlzdGVuZXIuZG90KHVwKSkgLyBwaURvdWJsZTsKKyAgICBmaXhOQU5zKGVsZXZhdGlvbik7
IC8vIGF2b2lkIGlsbGVnYWwgdmFsdWVzCisKKyAgICBpZiAoZWxldmF0aW9uID4gOTAuMCkKKyAg
ICAgICAgZWxldmF0aW9uID0gMTgwLjAgLSBlbGV2YXRpb247CisgICAgZWxzZSBpZiAoZWxldmF0
aW9uIDwgLTkwLjApCisgICAgICAgIGVsZXZhdGlvbiA9IC0xODAuMCAtIGVsZXZhdGlvbjsKKwor
ICAgIGlmIChvdXRBemltdXRoKQorICAgICAgICAqb3V0QXppbXV0aCA9IGF6aW11dGg7CisgICAg
aWYgKG91dEVsZXZhdGlvbikKKyAgICAgICAgKm91dEVsZXZhdGlvbiA9IGVsZXZhdGlvbjsKK30K
KworZmxvYXQgQXVkaW9QYW5uZXJOb2RlOjpkb3BwbGVyUmF0ZSgpCit7CisgICAgZG91YmxlIGRv
cHBsZXJTaGlmdCA9IDEuMDsKKworICAgIC8vIEZJWE1FOiBvcHRpbWl6ZSBmb3IgY2FzZSB3aGVu
IG5laXRoZXIgc291cmNlIG5vciBsaXN0ZW5lciBoYXMgY2hhbmdlZC4uLgorICAgIGRvdWJsZSBk
b3BwbGVyRmFjdG9yID0gbGlzdGVuZXIoKS0+ZG9wcGxlckZhY3RvcigpOworCisgICAgaWYgKGRv
cHBsZXJGYWN0b3IgPiAwLjApIHsKKyAgICAgICAgZG91YmxlIHNwZWVkT2ZTb3VuZCA9IGxpc3Rl
bmVyKCktPnNwZWVkT2ZTb3VuZCgpOworCisgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQzRCAmc291
cmNlVmVsb2NpdHkgPSBtX3ZlbG9jaXR5OworICAgICAgICBjb25zdCBGbG9hdFBvaW50M0QgJmxp
c3RlbmVyVmVsb2NpdHkgPSBsaXN0ZW5lcigpLT52ZWxvY2l0eSgpOworCisgICAgICAgIC8vIERv
bid0IGJvdGhlciBpZiBib3RoIHNvdXJjZSBhbmQgbGlzdGVuZXIgaGF2ZSBubyB2ZWxvY2l0eQor
ICAgICAgICBib29sIHNvdXJjZUhhc1ZlbG9jaXR5ID0gIXNvdXJjZVZlbG9jaXR5LmlzWmVybygp
OworICAgICAgICBib29sIGxpc3RlbmVySGFzVmVsb2NpdHkgPSAhbGlzdGVuZXJWZWxvY2l0eS5p
c1plcm8oKTsKKworICAgICAgICBpZiAoc291cmNlSGFzVmVsb2NpdHkgfHwgbGlzdGVuZXJIYXNW
ZWxvY2l0eSkgeworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBzb3VyY2UgdG8gbGlzdGVu
ZXIgdmVjdG9yCisgICAgICAgICAgICBGbG9hdFBvaW50M0QgbGlzdGVuZXJQb3NpdGlvbiA9IGxp
c3RlbmVyKCktPnBvc2l0aW9uKCk7CisgICAgICAgICAgICBGbG9hdFBvaW50M0Qgc291cmNlVG9M
aXN0ZW5lciA9IG1fcG9zaXRpb24gLSBsaXN0ZW5lclBvc2l0aW9uOworCisgICAgICAgICAgICBk
b3VibGUgc291cmNlTGlzdGVuZXJNYWduaXR1ZGUgPSBzb3VyY2VUb0xpc3RlbmVyLmxlbmd0aCgp
OworCisgICAgICAgICAgICBkb3VibGUgbGlzdGVuZXJQcm9qZWN0aW9uID0gc291cmNlVG9MaXN0
ZW5lci5kb3QobGlzdGVuZXJWZWxvY2l0eSkgLyBzb3VyY2VMaXN0ZW5lck1hZ25pdHVkZTsKKyAg
ICAgICAgICAgIGRvdWJsZSBzb3VyY2VQcm9qZWN0aW9uID0gc291cmNlVG9MaXN0ZW5lci5kb3Qo
c291cmNlVmVsb2NpdHkpIC8gc291cmNlTGlzdGVuZXJNYWduaXR1ZGU7CisKKyAgICAgICAgICAg
IGxpc3RlbmVyUHJvamVjdGlvbiA9IC1saXN0ZW5lclByb2plY3Rpb247CisgICAgICAgICAgICBz
b3VyY2VQcm9qZWN0aW9uID0gLXNvdXJjZVByb2plY3Rpb247CisKKyAgICAgICAgICAgIGRvdWJs
ZSBzY2FsZWRTcGVlZE9mU291bmQgPSBzcGVlZE9mU291bmQgLyBkb3BwbGVyRmFjdG9yOworICAg
ICAgICAgICAgbGlzdGVuZXJQcm9qZWN0aW9uID0gbWluKGxpc3RlbmVyUHJvamVjdGlvbiwgc2Nh
bGVkU3BlZWRPZlNvdW5kKTsKKyAgICAgICAgICAgIHNvdXJjZVByb2plY3Rpb24gPSBtaW4oc291
cmNlUHJvamVjdGlvbiwgc2NhbGVkU3BlZWRPZlNvdW5kKTsKKworICAgICAgICAgICAgZG9wcGxl
clNoaWZ0ID0gKChzcGVlZE9mU291bmQgLSBkb3BwbGVyRmFjdG9yICogbGlzdGVuZXJQcm9qZWN0
aW9uKSAvIChzcGVlZE9mU291bmQgLSBkb3BwbGVyRmFjdG9yICogc291cmNlUHJvamVjdGlvbikp
OworICAgICAgICAgICAgZml4TkFOcyhkb3BwbGVyU2hpZnQpOyAvLyBhdm9pZCBpbGxlZ2FsIHZh
bHVlcworCisgICAgICAgICAgICAvLyBMaW1pdCB0aGUgcGl0Y2ggc2hpZnRpbmcgdG8gNCBvY3Rh
dmVzIHVwIGFuZCAzIG9jdGF2ZXMgZG93bi4KKyAgICAgICAgICAgIGlmIChkb3BwbGVyU2hpZnQg
PiAxNi4wKQorICAgICAgICAgICAgICAgIGRvcHBsZXJTaGlmdCA9IDE2LjA7CisgICAgICAgICAg
ICBlbHNlIGlmIChkb3BwbGVyU2hpZnQgPCAwLjEyNSkKKyAgICAgICAgICAgICAgICBkb3BwbGVy
U2hpZnQgPSAwLjEyNTsgICAKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4oZG9wcGxlclNoaWZ0KTsKK30KKworZmxvYXQgQXVkaW9QYW5uZXJOb2RlOjpk
aXN0YW5jZUNvbmVHYWluKCkKK3sKKyAgICBGbG9hdFBvaW50M0QgbGlzdGVuZXJQb3NpdGlvbiA9
IGxpc3RlbmVyKCktPnBvc2l0aW9uKCk7CisKKyAgICBkb3VibGUgbGlzdGVuZXJEaXN0YW5jZSA9
IG1fcG9zaXRpb24uZGlzdGFuY2VUbyhsaXN0ZW5lclBvc2l0aW9uKTsKKyAgICBkb3VibGUgZGlz
dGFuY2VHYWluID0gbV9kaXN0YW5jZUVmZmVjdC5nYWluKGxpc3RlbmVyRGlzdGFuY2UpOworICAg
IAorICAgIG1fZGlzdGFuY2VHYWluLT5zZXRWYWx1ZShzdGF0aWNfY2FzdDxmbG9hdD4oZGlzdGFu
Y2VHYWluKSk7CisKKyAgICAvLyBGSVhNRTogY291bGQgb3B0aW1pemUgYnkgY2FjaGluZyBjb25l
R2FpbgorICAgIGRvdWJsZSBjb25lR2FpbiA9IG1fY29uZUVmZmVjdC5nYWluKG1fcG9zaXRpb24s
IG1fb3JpZW50YXRpb24sIGxpc3RlbmVyUG9zaXRpb24pOworICAgIAorICAgIG1fY29uZUdhaW4t
PnNldFZhbHVlKHN0YXRpY19jYXN0PGZsb2F0Pihjb25lR2FpbikpOworCisgICAgcmV0dXJuIGZs
b2F0KGRpc3RhbmNlR2FpbiAqIGNvbmVHYWluKTsKK30KKwordm9pZCBBdWRpb1Bhbm5lck5vZGU6
Om5vdGlmeUF1ZGlvU291cmNlc0Nvbm5lY3RlZFRvTm9kZShBdWRpb05vZGUqIG5vZGUpCit7Cisg
ICAgQVNTRVJUKG5vZGUpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAvLyBGaXJzdCBjaGVjayBpZiB0aGlzIG5vZGUgaXMgYW4gQXVkaW9CdWZmZXJTb3Vy
Y2VOb2RlLiAgSWYgc28sIGxldCBpdCBrbm93IGFib3V0IHVzIHNvIHRoYXQgZG9wcGxlciBzaGlm
dCBwaXRjaCBjYW4gYmUgdGFrZW4gaW50byBhY2NvdW50LgorICAgIGlmIChub2RlLT5ub2RlVHlw
ZSgpID09IE5vZGVUeXBlQXVkaW9CdWZmZXJTb3VyY2UpIHsKKyAgICAgICAgQXVkaW9CdWZmZXJT
b3VyY2VOb2RlKiBidWZmZXJTb3VyY2VOb2RlID0gcmVpbnRlcnByZXRfY2FzdDxBdWRpb0J1ZmZl
clNvdXJjZU5vZGUqPihub2RlKTsKKyAgICAgICAgYnVmZmVyU291cmNlTm9kZS0+c2V0UGFubmVy
Tm9kZSh0aGlzKTsKKyAgICB9IGVsc2UgeyAgICAKKyAgICAgICAgLy8gR28gdGhyb3VnaCBhbGwg
aW5wdXRzIHRvIHRoaXMgbm9kZS4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5v
ZGUtPm51bWJlck9mSW5wdXRzKCk7ICsraSkgeworICAgICAgICAgICAgQXVkaW9Ob2RlSW5wdXQq
IGlucHV0ID0gbm9kZS0+aW5wdXQoaSk7CisKKyAgICAgICAgICAgIC8vIEZvciBlYWNoIGlucHV0
LCBnbyB0aHJvdWdoIGFsbCBvZiBpdHMgY29ubmVjdGlvbnMsIGxvb2tpbmcgZm9yIEF1ZGlvQnVm
ZmVyU291cmNlTm9kZXMuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgaW5w
dXQtPm51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKTsgKytqKSB7CisgICAgICAgICAgICAg
ICAgQXVkaW9Ob2RlT3V0cHV0KiBjb25uZWN0ZWRPdXRwdXQgPSBpbnB1dC0+cmVuZGVyaW5nT3V0
cHV0KGopOworICAgICAgICAgICAgICAgIEF1ZGlvTm9kZSogY29ubmVjdGVkTm9kZSA9IGNvbm5l
Y3RlZE91dHB1dC0+bm9kZSgpOworICAgICAgICAgICAgICAgIG5vdGlmeUF1ZGlvU291cmNlc0Nv
bm5lY3RlZFRvTm9kZShjb25uZWN0ZWROb2RlKTsgLy8gcmVjdXJzZQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb1Bhbm5lck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oCShyZXZpc2lvbiAxMTEyMzMpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oOjExMTIzMykKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEF1ZGlvUGFubmVyTm9kZV9o
CisjZGVmaW5lIEF1ZGlvUGFubmVyTm9kZV9oCisKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgorI2lu
Y2x1ZGUgIkF1ZGlvR2Fpbi5oIgorI2luY2x1ZGUgIkF1ZGlvTGlzdGVuZXIuaCIKKyNpbmNsdWRl
ICJBdWRpb05vZGUuaCIKKyNpbmNsdWRlICJDb25lLmgiCisjaW5jbHVkZSAiRGlzdGFuY2UuaCIK
KyNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKKyNpbmNsdWRlICJQYW5uZXIuaCIKKyNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQXVkaW9QYW5uZXJO
b2RlIGlzIGFuIEF1ZGlvTm9kZSB3aXRoIG9uZSBpbnB1dCBhbmQgb25lIG91dHB1dC4KKy8vIEl0
IHBvc2l0aW9ucyBhIHNvdW5kIGluIDNEIHNwYWNlLCB3aXRoIHRoZSBleGFjdCBlZmZlY3QgZGVw
ZW5kZW50IG9uIHRoZSBwYW5uaW5nIG1vZGVsLgorLy8gSXQgaGFzIGEgcG9zaXRpb24gYW5kIGFu
IG9yaWVudGF0aW9uIGluIDNEIHNwYWNlIHdoaWNoIGlzIHJlbGF0aXZlIHRvIHRoZSBwb3NpdGlv
biBhbmQgb3JpZW50YXRpb24gb2YgdGhlIGNvbnRleHQncyBBdWRpb0xpc3RlbmVyLgorLy8gQSBk
aXN0YW5jZSBlZmZlY3Qgd2lsbCBhdHRlbnVhdGUgdGhlIGdhaW4gYXMgdGhlIHBvc2l0aW9uIG1v
dmVzIGF3YXkgZnJvbSB0aGUgbGlzdGVuZXIuCisvLyBBIGNvbmUgZWZmZWN0IHdpbGwgYXR0ZW51
YXRlIHRoZSBnYWluIGFzIHRoZSBvcmllbnRhdGlvbiBtb3ZlcyBhd2F5IGZyb20gdGhlIGxpc3Rl
bmVyLgorLy8gQWxsIG9mIHRoZXNlIGVmZmVjdHMgZm9sbG93IHRoZSBPcGVuQUwgc3BlY2lmaWNh
dGlvbiB2ZXJ5IGNsb3NlbHkuCisKK2NsYXNzIEF1ZGlvUGFubmVyTm9kZSA6IHB1YmxpYyBBdWRp
b05vZGUgeworcHVibGljOgorICAgIC8vIFRoZXNlIG11c3QgYmUgZGVmaW5lZCBhcyBpbiB0aGUg
LmlkbCBmaWxlIGFuZCBtdXN0IG1hdGNoIHRob3NlIGluIHRoZSBQYW5uZXIgY2xhc3MuCisgICAg
ZW51bSB7CisgICAgICAgIEVRVUFMUE9XRVIgPSAwLAorICAgICAgICBIUlRGID0gMSwKKyAgICAg
ICAgU09VTkRGSUVMRCA9IDIsCisgICAgfTsKKworICAgIC8vIFRoZXNlIG11c3QgYmUgZGVmaW5l
ZCBhcyBpbiB0aGUgLmlkbCBmaWxlIGFuZCBtdXN0IG1hdGNoIHRob3NlCisgICAgLy8gaW4gdGhl
IERpc3RhbmNlRWZmZWN0IGNsYXNzLgorICAgIGVudW0geworICAgICAgICBMSU5FQVJfRElTVEFO
Q0UgPSAwLAorICAgICAgICBJTlZFUlNFX0RJU1RBTkNFID0gMSwKKyAgICAgICAgRVhQT05FTlRJ
QUxfRElTVEFOQ0UgPSAyLAorICAgIH07CisgICAgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXVk
aW9QYW5uZXJOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVS
YXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBdWRpb1Bhbm5lck5vZGUo
Y29udGV4dCwgc2FtcGxlUmF0ZSkpOworICAgIH0KKworICAgIHZpcnR1YWwgfkF1ZGlvUGFubmVy
Tm9kZSgpOworCisgICAgLy8gQXVkaW9Ob2RlCisgICAgdmlydHVhbCB2b2lkIHByb2Nlc3Moc2l6
ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgdmlydHVhbCB2b2lkIHB1bGxJbnB1dHMoc2l6ZV90
IGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgdmlydHVhbCB2b2lkIHJlc2V0KCk7CisgICAgdmlydHVh
bCB2b2lkIGluaXRpYWxpemUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pbml0aWFsaXplKCk7CisK
KyAgICAvLyBMaXN0ZW5lcgorICAgIEF1ZGlvTGlzdGVuZXIqIGxpc3RlbmVyKCk7CisKKyAgICAv
LyBQYW5uaW5nIG1vZGVsCisgICAgdW5zaWduZWQgc2hvcnQgcGFubmluZ01vZGVsKCkgY29uc3Qg
eyByZXR1cm4gbV9wYW5uaW5nTW9kZWw7IH0KKyAgICB2b2lkIHNldFBhbm5pbmdNb2RlbCh1bnNp
Z25lZCBzaG9ydCwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgLy8gUG9zaXRpb24KKyAgICBGbG9h
dFBvaW50M0QgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CisgICAgdm9p
ZCBzZXRQb3NpdGlvbihmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7IG1fcG9zaXRpb24gPSBG
bG9hdFBvaW50M0QoeCwgeSwgeik7IH0KKworICAgIC8vIE9yaWVudGF0aW9uCisgICAgRmxvYXRQ
b2ludDNEIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQorICAgIHZv
aWQgc2V0T3JpZW50YXRpb24oZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikgeyBtX29yaWVudGF0
aW9uID0gRmxvYXRQb2ludDNEKHgsIHksIHopOyB9CisKKyAgICAvLyBWZWxvY2l0eQorICAgIEZs
b2F0UG9pbnQzRCB2ZWxvY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVsb2NpdHk7IH0KKyAgICB2
b2lkIHNldFZlbG9jaXR5KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopIHsgbV92ZWxvY2l0eSA9
IEZsb2F0UG9pbnQzRCh4LCB5LCB6KTsgfQorCisgICAgLy8gRGlzdGFuY2UgcGFyYW1ldGVycwor
ICAgIHVuc2lnbmVkIHNob3J0IGRpc3RhbmNlTW9kZWwoKSB7IHJldHVybiBtX2Rpc3RhbmNlRWZm
ZWN0Lm1vZGVsKCk7IH0KKyAgICB2b2lkIHNldERpc3RhbmNlTW9kZWwodW5zaWduZWQgc2hvcnQg
bW9kZWwpIHsgbV9kaXN0YW5jZUVmZmVjdC5zZXRNb2RlbChzdGF0aWNfY2FzdDxEaXN0YW5jZUVm
ZmVjdDo6TW9kZWxUeXBlPihtb2RlbCksIHRydWUpOyB9CisgICAgCisgICAgZmxvYXQgcmVmRGlz
dGFuY2UoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV9kaXN0YW5jZUVmZmVjdC5yZWZE
aXN0YW5jZSgpKTsgfQorICAgIHZvaWQgc2V0UmVmRGlzdGFuY2UoZmxvYXQgcmVmRGlzdGFuY2Up
IHsgbV9kaXN0YW5jZUVmZmVjdC5zZXRSZWZEaXN0YW5jZShyZWZEaXN0YW5jZSk7IH0KKworICAg
IGZsb2F0IG1heERpc3RhbmNlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fZGlzdGFu
Y2VFZmZlY3QubWF4RGlzdGFuY2UoKSk7IH0KKyAgICB2b2lkIHNldE1heERpc3RhbmNlKGZsb2F0
IG1heERpc3RhbmNlKSB7IG1fZGlzdGFuY2VFZmZlY3Quc2V0TWF4RGlzdGFuY2UobWF4RGlzdGFu
Y2UpOyB9CisKKyAgICBmbG9hdCByb2xsb2ZmRmFjdG9yKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG1fZGlzdGFuY2VFZmZlY3Qucm9sbG9mZkZhY3RvcigpKTsgfQorICAgIHZvaWQgc2V0
Um9sbG9mZkZhY3RvcihmbG9hdCByb2xsb2ZmRmFjdG9yKSB7IG1fZGlzdGFuY2VFZmZlY3Quc2V0
Um9sbG9mZkZhY3Rvcihyb2xsb2ZmRmFjdG9yKTsgfQorCisgICAgLy8gU291bmQgY29uZXMgLSBh
bmdsZXMgaW4gZGVncmVlcworICAgIGZsb2F0IGNvbmVJbm5lckFuZ2xlKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fY29uZUVmZmVjdC5pbm5lckFuZ2xlKCkpOyB9CisgICAg
dm9pZCBzZXRDb25lSW5uZXJBbmdsZShmbG9hdCBhbmdsZSkgeyBtX2NvbmVFZmZlY3Quc2V0SW5u
ZXJBbmdsZShhbmdsZSk7IH0KKworICAgIGZsb2F0IGNvbmVPdXRlckFuZ2xlKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fY29uZUVmZmVjdC5vdXRlckFuZ2xlKCkpOyB9Cisg
ICAgdm9pZCBzZXRDb25lT3V0ZXJBbmdsZShmbG9hdCBhbmdsZSkgeyBtX2NvbmVFZmZlY3Quc2V0
T3V0ZXJBbmdsZShhbmdsZSk7IH0KKworICAgIGZsb2F0IGNvbmVPdXRlckdhaW4oKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV9jb25lRWZmZWN0Lm91dGVyR2FpbigpKTsgfQor
ICAgIHZvaWQgc2V0Q29uZU91dGVyR2FpbihmbG9hdCBhbmdsZSkgeyBtX2NvbmVFZmZlY3Quc2V0
T3V0ZXJHYWluKGFuZ2xlKTsgfQorCisgICAgdm9pZCBnZXRBemltdXRoRWxldmF0aW9uKGRvdWJs
ZSogb3V0QXppbXV0aCwgZG91YmxlKiBvdXRFbGV2YXRpb24pOworICAgIGZsb2F0IGRvcHBsZXJS
YXRlKCk7CisKKyAgICAvLyBBY2Nlc3NvcnMgZm9yIGR5bmFtaWNhbGx5IGNhbGN1bGF0ZWQgZ2Fp
biB2YWx1ZXMuCisgICAgQXVkaW9HYWluKiBkaXN0YW5jZUdhaW4oKSB7IHJldHVybiBtX2Rpc3Rh
bmNlR2Fpbi5nZXQoKTsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICBBdWRpb0dhaW4qIGNvbmVHYWluKCkgeyByZXR1cm4gbV9jb25lR2Fpbi5nZXQoKTsgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKworICAgIHZpcnR1YWwgZG91
YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9wYW5uZXIgPyBtX3Bhbm5l
ci0+dGFpbFRpbWUoKSA6IDA7IH0KKyAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcGFubmVyID8gbV9wYW5uZXItPmxhdGVuY3lUaW1lKCkg
OiAwOyB9CisKK3ByaXZhdGU6CisgICAgQXVkaW9QYW5uZXJOb2RlKEF1ZGlvQ29udGV4dCosIGZs
b2F0IHNhbXBsZVJhdGUpOworCisgICAgLy8gUmV0dXJucyB0aGUgY29tYmluZWQgZGlzdGFuY2Ug
YW5kIGNvbmUgZ2FpbiBhdHRlbnVhdGlvbi4KKyAgICBmbG9hdCBkaXN0YW5jZUNvbmVHYWluKCk7
CisKKyAgICAvLyBOb3RpZmllcyBhbnkgQXVkaW9CdWZmZXJTb3VyY2VOb2RlcyBjb25uZWN0ZWQg
dG8gdXMgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgYWJvdXQgb3VyIGV4aXN0ZW5jZS4K
KyAgICAvLyBUaGlzIGlzIGluIG9yZGVyIHRvIGhhbmRsZSB0aGUgcGl0Y2ggY2hhbmdlIG5lY2Vz
c2FyeSBmb3IgdGhlIGRvcHBsZXIgc2hpZnQuCisgICAgdm9pZCBub3RpZnlBdWRpb1NvdXJjZXND
b25uZWN0ZWRUb05vZGUoQXVkaW9Ob2RlKik7CisKKyAgICBPd25QdHI8UGFubmVyPiBtX3Bhbm5l
cjsKKyAgICB1bnNpZ25lZCBtX3Bhbm5pbmdNb2RlbDsKKworICAgIEZsb2F0UG9pbnQzRCBtX3Bv
c2l0aW9uOworICAgIEZsb2F0UG9pbnQzRCBtX29yaWVudGF0aW9uOworICAgIEZsb2F0UG9pbnQz
RCBtX3ZlbG9jaXR5OworCisgICAgLy8gR2FpbgorICAgIFJlZlB0cjxBdWRpb0dhaW4+IG1fZGlz
dGFuY2VHYWluOworICAgIFJlZlB0cjxBdWRpb0dhaW4+IG1fY29uZUdhaW47CisgICAgRGlzdGFu
Y2VFZmZlY3QgbV9kaXN0YW5jZUVmZmVjdDsKKyAgICBDb25lRWZmZWN0IG1fY29uZUVmZmVjdDsK
KyAgICBmbG9hdCBtX2xhc3RHYWluOworCisgICAgdW5zaWduZWQgbV9jb25uZWN0aW9uQ291bnQ7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBBdWRpb1Bhbm5lck5v
ZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Bhbm5lck5v
ZGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9QYW5uZXJOb2RlLmlkbAkocmV2aXNpb24gMTExMjMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaWRsOjExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIGF1ZGlvIHsKKyAgICBpbnRlcmZhY2UgWwor
ICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCisgICAgICAgIEpTR2VuZXJhdGVUb0pTT2Jq
ZWN0CisgICAgXSBBdWRpb1Bhbm5lck5vZGUgOiBBdWRpb05vZGUgeworICAgICAgICAvLyBQYW5u
aW5nIG1vZGVsCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEVRVUFMUE9XRVIgPSAwOwor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBIUlRGID0gMTsKKyAgICAgICAgY29uc3QgdW5z
aWduZWQgc2hvcnQgU09VTkRGSUVMRCA9IDI7CisKKyAgICAgICAgLy8gRGlzdGFuY2UgbW9kZWwK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTElORUFSX0RJU1RBTkNFID0gMDsKKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgc2hvcnQgSU5WRVJTRV9ESVNUQU5DRSA9IDE7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IEVYUE9ORU5USUFMX0RJU1RBTkNFID0gMjsKKworICAgICAgICAv
LyBEZWZhdWx0IG1vZGVsIGZvciBzdGVyZW8gaXMgSFJURiAKKyAgICAgICAgLy8gRklYTUU6IHVz
ZSB1bnNpZ25lZCBzaG9ydCB3aGVuIGdsdWUgZ2VuZXJhdGlvbiBzdXBwb3J0cyBpdAorICAgICAg
ICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBwYW5uaW5nTW9kZWwKKyAgICAgICAgICAgIHNldHRl
ciByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKworICAgICAgICAvLyBVc2VzIGEgM0QgY2FydGVzaWFu
IGNvb3JkaW5hdGUgc3lzdGVtIAorICAgICAgICB2b2lkIHNldFBvc2l0aW9uKGluIGZsb2F0IHgs
IGluIGZsb2F0IHksIGluIGZsb2F0IHopOworICAgICAgICB2b2lkIHNldE9yaWVudGF0aW9uKGlu
IGZsb2F0IHgsIGluIGZsb2F0IHksIGluIGZsb2F0IHopOworICAgICAgICB2b2lkIHNldFZlbG9j
aXR5KGluIGZsb2F0IHgsIGluIGZsb2F0IHksIGluIGZsb2F0IHopOworCisgICAgICAgIC8vIERp
c3RhbmNlIG1vZGVsCisgICAgICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGRpc3RhbmNlTW9k
ZWw7IC8vIEZJWE1FOiB1c2UgdW5zaWduZWQgc2hvcnQgd2hlbiBnbHVlIGdlbmVyYXRpb24gc3Vw
cG9ydHMgaXQKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0IHJlZkRpc3RhbmNlOworICAgICAgICBh
dHRyaWJ1dGUgZmxvYXQgbWF4RGlzdGFuY2U7CisgICAgICAgIGF0dHJpYnV0ZSBmbG9hdCByb2xs
b2ZmRmFjdG9yOworCisgICAgICAgIC8vIERpcmVjdGlvbmFsIHNvdW5kIGNvbmUKKyAgICAgICAg
YXR0cmlidXRlIGZsb2F0IGNvbmVJbm5lckFuZ2xlOworICAgICAgICBhdHRyaWJ1dGUgZmxvYXQg
Y29uZU91dGVyQW5nbGU7CisgICAgICAgIGF0dHJpYnV0ZSBmbG9hdCBjb25lT3V0ZXJHYWluOwor
CisgICAgICAgIC8vIER5bmFtaWNhbGx5IGNhbGN1bGF0ZWQgZ2FpbiB2YWx1ZXMgICAgICAgICAg
CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb0dhaW4gY29uZUdhaW47CisgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb0dhaW4gZGlzdGFuY2VHYWluOworICAgIH07Cit9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5jcHAJ
KHJldmlzaW9uIDExMTIzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJh
bS5jcHA6MTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Bh
cmFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJBdWRpb1Bh
cmFtLmgiCisKKyNpbmNsdWRlICJBdWRpb05vZGUuaCIKKyNpbmNsdWRlICJBdWRpb1V0aWxpdGll
cy5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgZG91YmxlIEF1ZGlvUGFyYW06
OkRlZmF1bHRTbW9vdGhpbmdDb25zdGFudCA9IDAuMDU7Citjb25zdCBkb3VibGUgQXVkaW9QYXJh
bTo6U25hcFRocmVzaG9sZCA9IDAuMDAxOworCitmbG9hdCBBdWRpb1BhcmFtOjp2YWx1ZSgpCit7
CisgICAgLy8gVXBkYXRlIHZhbHVlIGZvciB0aW1lbGluZS4KKyAgICBpZiAoY29udGV4dCgpICYm
IGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgpKSB7CisgICAgICAgIGJvb2wgaGFzVmFsdWU7Cisg
ICAgICAgIGZsb2F0IHRpbWVsaW5lVmFsdWUgPSBtX3RpbWVsaW5lLnZhbHVlRm9yQ29udGV4dFRp
bWUoY29udGV4dCgpLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KG1fdmFsdWUpLCBoYXNWYWx1ZSk7
CisKKyAgICAgICAgaWYgKGhhc1ZhbHVlKQorICAgICAgICAgICAgbV92YWx1ZSA9IHRpbWVsaW5l
VmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQobV92YWx1
ZSk7Cit9CisKK3ZvaWQgQXVkaW9QYXJhbTo6c2V0VmFsdWUoZmxvYXQgdmFsdWUpCit7CisgICAg
Ly8gQ2hlY2sgYWdhaW5zdCBKYXZhU2NyaXB0IGdpdmluZyB1cyBib2d1cyBmbG9hdGluZy1wb2lu
dCB2YWx1ZXMuCisgICAgLy8gRG9uJ3QgQVNTRVJULCBzaW5jZSB0aGlzIGNhbiBoYXBwZW4gaWYg
c29tZWJvZHkgd3JpdGVzIGJhZCBKUy4KKyAgICBpZiAoIWlzbmFuKHZhbHVlKSAmJiAhaXNpbmYo
dmFsdWUpKQorICAgICAgICBtX3ZhbHVlID0gdmFsdWU7Cit9CisKK2Zsb2F0IEF1ZGlvUGFyYW06
OnNtb290aGVkVmFsdWUoKQoreworICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KG1f
c21vb3RoZWRWYWx1ZSk7Cit9CisKK2Jvb2wgQXVkaW9QYXJhbTo6c21vb3RoKCkKK3sKKyAgICAv
LyBJZiB2YWx1ZXMgaGF2ZSBiZWVuIGV4cGxpY2l0bHkgc2NoZWR1bGVkIG9uIHRoZSB0aW1lbGlu
ZSwgdGhlbiB1c2UgdGhlIGV4YWN0IHZhbHVlLgorICAgIC8vIFNtb290aGluZyBlZmZlY3RpdmVs
eSBpcyBwZXJmb3JtZWQgYnkgdGhlIHRpbWVsaW5lLgorICAgIGJvb2wgdXNlVGltZWxpbmVWYWx1
ZSA9IGZhbHNlOworICAgIGlmIChjb250ZXh0KCkpCisgICAgICAgIG1fdmFsdWUgPSBtX3RpbWVs
aW5lLnZhbHVlRm9yQ29udGV4dFRpbWUoY29udGV4dCgpLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KG1fdmFsdWUpLCB1c2VUaW1lbGluZVZhbHVlKTsKKyAgICAKKyAgICBpZiAobV9zbW9vdGhlZFZh
bHVlID09IG1fdmFsdWUpIHsKKyAgICAgICAgLy8gU21vb3RoZWQgdmFsdWUgaGFzIGFscmVhZHkg
YXBwcm9hY2hlZCBhbmQgc25hcHBlZCB0byB2YWx1ZS4KKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIGlmICh1c2VUaW1lbGluZVZhbHVlKQorICAgICAgICBtX3Ntb290aGVk
VmFsdWUgPSBtX3ZhbHVlOworICAgIGVsc2UgeworICAgICAgICAvLyBEZXppcHBlciAtIGV4cG9u
ZW50aWFsIGFwcHJvYWNoLgorICAgICAgICBtX3Ntb290aGVkVmFsdWUgKz0gKG1fdmFsdWUgLSBt
X3Ntb290aGVkVmFsdWUpICogbV9zbW9vdGhpbmdDb25zdGFudDsKKworICAgICAgICAvLyBJZiB3
ZSBnZXQgY2xvc2UgZW5vdWdoIHRoZW4gc25hcCB0byBhY3R1YWwgdmFsdWUuCisgICAgICAgIGlm
IChmYWJzKG1fc21vb3RoZWRWYWx1ZSAtIG1fdmFsdWUpIDwgU25hcFRocmVzaG9sZCkgLy8gRklY
TUU6IHRoZSB0aHJlc2hvbGQgbmVlZHMgdG8gYmUgYWRqdXN0YWJsZSBkZXBlbmRpbmcgb24gcmFu
Z2UgLSBidXQgdGhpcyBpcyBPSyBnZW5lcmFsIHB1cnBvc2UgdmFsdWUuCisgICAgICAgICAgICBt
X3Ntb290aGVkVmFsdWUgPSBtX3ZhbHVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBBdWRpb1BhcmFtOjpjYWxjdWxhdGVTYW1wbGVBY2N1cmF0ZVZhbHVlcyhmbG9hdCog
dmFsdWVzLCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcykKK3sKKyAgICBib29sIGlzU2FmZSA9IGNv
bnRleHQoKSAmJiBjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSAmJiB2YWx1ZXM7CisgICAgQVNT
RVJUKGlzU2FmZSk7CisgICAgaWYgKCFpc1NhZmUpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IENhbGN1bGF0ZSB2YWx1ZXMgZm9yIHRoaXMgcmVuZGVyIHF1YW50dW0uCisgICAgLy8gTm9ybWFs
bHkgbnVtYmVyT2ZWYWx1ZXMgd2lsbCBlcXVhbCBBdWRpb05vZGU6OlByb2Nlc3NpbmdTaXplSW5G
cmFtZXMgKHRoZSByZW5kZXIgcXVhbnR1bSBzaXplKS4KKyAgICBmbG9hdCBzYW1wbGVSYXRlID0g
Y29udGV4dCgpLT5zYW1wbGVSYXRlKCk7CisgICAgZmxvYXQgc3RhcnRUaW1lID0gbmFycm93UHJl
Y2lzaW9uVG9GbG9hdChjb250ZXh0KCktPmN1cnJlbnRUaW1lKCkpOworICAgIGZsb2F0IGVuZFRp
bWUgPSBzdGFydFRpbWUgKyBudW1iZXJPZlZhbHVlcyAvIHNhbXBsZVJhdGU7CisKKyAgICAvLyBO
b3RlIHdlJ3JlIHJ1bm5pbmcgY29udHJvbCByYXRlIGF0IHRoZSBzYW1wbGUtcmF0ZS4KKyAgICAv
LyBQYXNzIGluIHRoZSBjdXJyZW50IHZhbHVlIGFzIGRlZmF1bHQgdmFsdWUuCisgICAgbV92YWx1
ZSA9IG1fdGltZWxpbmUudmFsdWVzRm9yVGltZVJhbmdlKHN0YXJ0VGltZSwgZW5kVGltZSwgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdChtX3ZhbHVlKSwgdmFsdWVzLCBudW1iZXJPZlZhbHVlcywgc2Ft
cGxlUmF0ZSwgc2FtcGxlUmF0ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvUGFyYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvUGFyYW0uaAkocmV2aXNpb24gMTExMjMzKQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9BdWRpb1BhcmFtLmg6MTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIEF1ZGlvUGFyYW1faAorI2RlZmluZSBBdWRpb1BhcmFtX2gKKworI2luY2x1
ZGUgIkF1ZGlvQ29udGV4dC5oIgorI2luY2x1ZGUgIkF1ZGlvUGFyYW1UaW1lbGluZS5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVk
ZSA8d3RmL0Zsb2F0MzJBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBB
dWRpb1BhcmFtIDogcHVibGljIFJlZkNvdW50ZWQ8QXVkaW9QYXJhbT4geworcHVibGljOgorICAg
IHN0YXRpYyBjb25zdCBkb3VibGUgRGVmYXVsdFNtb290aGluZ0NvbnN0YW50OworICAgIHN0YXRp
YyBjb25zdCBkb3VibGUgU25hcFRocmVzaG9sZDsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1
ZGlvUGFyYW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSBkZWZhdWx0VmFsdWUs
IGRvdWJsZSBtaW5WYWx1ZSwgZG91YmxlIG1heFZhbHVlLCB1bnNpZ25lZCB1bml0cyA9IDApCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvUGFyYW0obmFtZSwgZGVmYXVs
dFZhbHVlLCBtaW5WYWx1ZSwgbWF4VmFsdWUsIHVuaXRzKSk7CisgICAgfQorCisgICAgQXVkaW9Q
YXJhbShjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSBkZWZhdWx0VmFsdWUsIGRvdWJsZSBtaW5W
YWx1ZSwgZG91YmxlIG1heFZhbHVlLCB1bnNpZ25lZCB1bml0cyA9IDApCisgICAgICAgIDogbV9u
YW1lKG5hbWUpCisgICAgICAgICwgbV92YWx1ZShkZWZhdWx0VmFsdWUpCisgICAgICAgICwgbV9k
ZWZhdWx0VmFsdWUoZGVmYXVsdFZhbHVlKQorICAgICAgICAsIG1fbWluVmFsdWUobWluVmFsdWUp
CisgICAgICAgICwgbV9tYXhWYWx1ZShtYXhWYWx1ZSkKKyAgICAgICAgLCBtX3VuaXRzKHVuaXRz
KQorICAgICAgICAsIG1fc21vb3RoZWRWYWx1ZShkZWZhdWx0VmFsdWUpCisgICAgICAgICwgbV9z
bW9vdGhpbmdDb25zdGFudChEZWZhdWx0U21vb3RoaW5nQ29uc3RhbnQpCisgICAgeworICAgIH0K
KyAgICAKKyAgICB2b2lkIHNldENvbnRleHQoQXVkaW9Db250ZXh0KiBjb250ZXh0KSB7IG1fY29u
dGV4dCA9IGNvbnRleHQ7IH0KKyAgICBBdWRpb0NvbnRleHQqIGNvbnRleHQoKSB7IHJldHVybiBt
X2NvbnRleHQuZ2V0KCk7IH0KKworICAgIGZsb2F0IHZhbHVlKCk7CisgICAgCisgICAgdm9pZCBz
ZXRWYWx1ZShmbG9hdCk7CisKKyAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFt
ZTsgfQorCisgICAgZmxvYXQgbWluVmFsdWUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4obV9taW5WYWx1ZSk7IH0KKyAgICBmbG9hdCBtYXhWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PGZsb2F0PihtX21heFZhbHVlKTsgfQorICAgIGZsb2F0IGRlZmF1bHRWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX2RlZmF1bHRWYWx1ZSk7IH0K
KyAgICB1bnNpZ25lZCB1bml0cygpIGNvbnN0IHsgcmV0dXJuIG1fdW5pdHM7IH0KKworICAgIC8v
IFZhbHVlIHNtb290aGluZzoKKworICAgIC8vIFdoZW4gYSBuZXcgdmFsdWUgaXMgc2V0IHdpdGgg
c2V0VmFsdWUoKSwgaW4gb3VyIGludGVybmFsIHVzZSBvZiB0aGUgcGFyYW1ldGVyIHdlIGRvbid0
IGltbWVkaWF0ZWx5IGp1bXAgdG8gaXQuCisgICAgLy8gSW5zdGVhZCB3ZSBzbW9vdGhseSBhcHBy
b2FjaCB0aGlzIHZhbHVlIHRvIGF2b2lkIGdsaXRjaGluZy4KKyAgICBmbG9hdCBzbW9vdGhlZFZh
bHVlKCk7CisKKyAgICAvLyBTbW9vdGhseSBleHBvbmVudGlhbGx5IGFwcHJvYWNoZXMgdG8gKGRl
LXppcHBlcnMpIHRoZSBkZXNpcmVkIHZhbHVlLgorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzbW9v
dGhlZCB2YWx1ZSBoYXMgYWxyZWFkeSBzbmFwcGVkIGV4YWN0bHkgdG8gdmFsdWUuCisgICAgYm9v
bCBzbW9vdGgoKTsKKworICAgIHZvaWQgcmVzZXRTbW9vdGhlZFZhbHVlKCkgeyBtX3Ntb290aGVk
VmFsdWUgPSBtX3ZhbHVlOyB9CisgICAgdm9pZCBzZXRTbW9vdGhpbmdDb25zdGFudChkb3VibGUg
aykgeyBtX3Ntb290aGluZ0NvbnN0YW50ID0gazsgfQorCisgICAgLy8gUGFyYW1ldGVyIGF1dG9t
YXRpb24uICAgIAorICAgIHZvaWQgc2V0VmFsdWVBdFRpbWUoZmxvYXQgdmFsdWUsIGZsb2F0IHRp
bWUpIHsgbV90aW1lbGluZS5zZXRWYWx1ZUF0VGltZSh2YWx1ZSwgdGltZSk7IH0KKyAgICB2b2lk
IGxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1lKSB7IG1fdGlt
ZWxpbmUubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodmFsdWUsIHRpbWUpOyB9CisgICAgdm9pZCBl
eHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1lKSB7IG1f
dGltZWxpbmUuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgdGltZSk7IH0KKyAg
ICB2b2lkIHNldFRhcmdldFZhbHVlQXRUaW1lKGZsb2F0IHRhcmdldFZhbHVlLCBmbG9hdCB0aW1l
LCBmbG9hdCB0aW1lQ29uc3RhbnQpIHsgbV90aW1lbGluZS5zZXRUYXJnZXRWYWx1ZUF0VGltZSh0
YXJnZXRWYWx1ZSwgdGltZSwgdGltZUNvbnN0YW50KTsgfQorICAgIHZvaWQgc2V0VmFsdWVDdXJ2
ZUF0VGltZShGbG9hdDMyQXJyYXkqIGN1cnZlLCBmbG9hdCB0aW1lLCBmbG9hdCBkdXJhdGlvbikg
eyBtX3RpbWVsaW5lLnNldFZhbHVlQ3VydmVBdFRpbWUoY3VydmUsIHRpbWUsIGR1cmF0aW9uKTsg
fQorICAgIHZvaWQgY2FuY2VsU2NoZWR1bGVkVmFsdWVzKGZsb2F0IHN0YXJ0VGltZSkgeyBtX3Rp
bWVsaW5lLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyhzdGFydFRpbWUpOyB9CisKKyAgICBib29sIGhh
c1RpbWVsaW5lVmFsdWVzKCkgeyByZXR1cm4gbV90aW1lbGluZS5oYXNWYWx1ZXMoKTsgfQorICAg
IAorICAgIC8vIENhbGN1bGF0ZXMgbnVtYmVyT2ZWYWx1ZXMgcGFyYW1ldGVyIHZhbHVlcyBzdGFy
dGluZyBhdCB0aGUgY29udGV4dCdzIGN1cnJlbnQgdGltZS4KKyAgICAvLyBNdXN0IGJlIGNhbGxl
ZCBpbiB0aGUgY29udGV4dCdzIHJlbmRlciB0aHJlYWQuCisgICAgdm9pZCBjYWxjdWxhdGVTYW1w
bGVBY2N1cmF0ZVZhbHVlcyhmbG9hdCogdmFsdWVzLCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyk7
CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPEF1ZGlvQ29udGV4dD4gbV9jb250ZXh0OworICAgIFN0
cmluZyBtX25hbWU7CisgICAgZG91YmxlIG1fdmFsdWU7CisgICAgZG91YmxlIG1fZGVmYXVsdFZh
bHVlOworICAgIGRvdWJsZSBtX21pblZhbHVlOworICAgIGRvdWJsZSBtX21heFZhbHVlOworICAg
IHVuc2lnbmVkIG1fdW5pdHM7CisKKyAgICAvLyBTbW9vdGhpbmcgKGRlLXppcHBlcmluZykKKyAg
ICBkb3VibGUgbV9zbW9vdGhlZFZhbHVlOworICAgIGRvdWJsZSBtX3Ntb290aGluZ0NvbnN0YW50
OworICAgIAorICAgIEF1ZGlvUGFyYW1UaW1lbGluZSBtX3RpbWVsaW5lOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQXVkaW9QYXJhbV9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5pZGwJKHJldmlzaW9uIDEx
MTIzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbS5pZGw6MTExMjMz
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmlkbAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHdlYmF1ZGlvIHsKKyAgICBpbnRl
cmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8KKyAgICBdIEF1ZGlvUGFyYW0g
eworICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgdmFsdWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBmbG9hdCBtaW5WYWx1ZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0IG1h
eFZhbHVlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgZmxvYXQgZGVmYXVsdFZhbHVlOwor
CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKKworICAgICAgICAv
LyBGSVhNRTogQ291bGQgZGVmaW5lIHVuaXRzIGNvbnN0YW50cyBoZXJlIChzZWNvbmRzLCBkZWNp
YmVscywgY2VudHMsIGV0Yy4pLi4uCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25l
ZCBzaG9ydCB1bml0czsKKworICAgICAgICAvLyBQYXJhbWV0ZXIgYXV0b21hdGlvbi4KKyAgICAg
ICAgdm9pZCBzZXRWYWx1ZUF0VGltZShpbiBmbG9hdCB2YWx1ZSwgaW4gZmxvYXQgdGltZSk7Cisg
ICAgICAgIHZvaWQgbGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoaW4gZmxvYXQgdmFsdWUsIGluIGZs
b2F0IHRpbWUpOworICAgICAgICB2b2lkIGV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoaW4g
ZmxvYXQgdmFsdWUsIGluIGZsb2F0IHRpbWUpOworCisgICAgICAgIC8vIEV4cG9uZW50aWFsbHkg
YXBwcm9hY2ggdGhlIHRhcmdldCB2YWx1ZSB3aXRoIGEgcmF0ZSBoYXZpbmcgdGhlIGdpdmVuIHRp
bWUgY29uc3RhbnQuCisgICAgICAgIHZvaWQgc2V0VGFyZ2V0VmFsdWVBdFRpbWUoaW4gZmxvYXQg
dGFyZ2V0VmFsdWUsIGluIGZsb2F0IHRpbWUsIGluIGZsb2F0IHRpbWVDb25zdGFudCk7CisKKyAg
ICAgICAgLy8gU2V0cyBhbiBhcnJheSBvZiBhcmJpdHJhcnkgcGFyYW1ldGVyIHZhbHVlcyBzdGFy
dGluZyBhdCB0aW1lIGZvciB0aGUgZ2l2ZW4gZHVyYXRpb24uCisgICAgICAgIC8vIFRoZSBudW1i
ZXIgb2YgdmFsdWVzIHdpbGwgYmUgc2NhbGVkIHRvIGZpdCBpbnRvIHRoZSBkZXNpcmVkIGR1cmF0
aW9uLgorICAgICAgICB2b2lkIHNldFZhbHVlQ3VydmVBdFRpbWUoaW4gRmxvYXQzMkFycmF5IHZh
bHVlcywgaW4gZmxvYXQgdGltZSwgaW4gZmxvYXQgZHVyYXRpb24pOworCisgICAgICAgIC8vIENh
bmNlbHMgYWxsIHNjaGVkdWxlZCBwYXJhbWV0ZXIgY2hhbmdlcyB3aXRoIHRpbWVzIGdyZWF0ZXIg
dGhhbiBvciBlcXVhbCB0byBzdGFydFRpbWUuCisgICAgICAgIHZvaWQgY2FuY2VsU2NoZWR1bGVk
VmFsdWVzKGluIGZsb2F0IHN0YXJ0VGltZSk7CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5jcHAJ
KHJldmlzaW9uIDExMTIzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJh
bVRpbWVsaW5lLmNwcDoxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvUGFyYW1UaW1lbGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNjkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisj
aW5jbHVkZSAiQXVkaW9QYXJhbVRpbWVsaW5lLmgiCisKKyNpbmNsdWRlICJBdWRpb1V0aWxpdGll
cy5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4K
KyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQXVkaW9QYXJhbVRpbWVsaW5lOjpzZXRWYWx1ZUF0
VGltZShmbG9hdCB2YWx1ZSwgZmxvYXQgdGltZSkKK3sKKyAgICBpbnNlcnRFdmVudChQYXJhbUV2
ZW50KFBhcmFtRXZlbnQ6OlNldFZhbHVlLCB2YWx1ZSwgdGltZSwgMCwgMCwgMCkpOworfQorCit2
b2lkIEF1ZGlvUGFyYW1UaW1lbGluZTo6bGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoZmxvYXQgdmFs
dWUsIGZsb2F0IHRpbWUpCit7CisgICAgaW5zZXJ0RXZlbnQoUGFyYW1FdmVudChQYXJhbUV2ZW50
OjpMaW5lYXJSYW1wVG9WYWx1ZSwgdmFsdWUsIHRpbWUsIDAsIDAsIDApKTsKK30KKwordm9pZCBB
dWRpb1BhcmFtVGltZWxpbmU6OmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoZmxvYXQgdmFs
dWUsIGZsb2F0IHRpbWUpCit7CisgICAgaW5zZXJ0RXZlbnQoUGFyYW1FdmVudChQYXJhbUV2ZW50
OjpFeHBvbmVudGlhbFJhbXBUb1ZhbHVlLCB2YWx1ZSwgdGltZSwgMCwgMCwgMCkpOworfQorCit2
b2lkIEF1ZGlvUGFyYW1UaW1lbGluZTo6c2V0VGFyZ2V0VmFsdWVBdFRpbWUoZmxvYXQgdGFyZ2V0
VmFsdWUsIGZsb2F0IHRpbWUsIGZsb2F0IHRpbWVDb25zdGFudCkKK3sKKyAgICBpbnNlcnRFdmVu
dChQYXJhbUV2ZW50KFBhcmFtRXZlbnQ6OlNldFRhcmdldFZhbHVlLCB0YXJnZXRWYWx1ZSwgdGlt
ZSwgdGltZUNvbnN0YW50LCAwLCAwKSk7Cit9CisKK3ZvaWQgQXVkaW9QYXJhbVRpbWVsaW5lOjpz
ZXRWYWx1ZUN1cnZlQXRUaW1lKEZsb2F0MzJBcnJheSogY3VydmUsIGZsb2F0IHRpbWUsIGZsb2F0
IGR1cmF0aW9uKQoreworICAgIGluc2VydEV2ZW50KFBhcmFtRXZlbnQoUGFyYW1FdmVudDo6U2V0
VmFsdWVDdXJ2ZSwgMCwgdGltZSwgMCwgZHVyYXRpb24sIGN1cnZlKSk7Cit9CisKK3N0YXRpYyBi
b29sIGlzVmFsaWROdW1iZXIoZmxvYXQgeCkKK3sKKyAgICByZXR1cm4gIWlzbmFuKHgpICYmICFp
c2luZih4KTsKK30KKwordm9pZCBBdWRpb1BhcmFtVGltZWxpbmU6Omluc2VydEV2ZW50KGNvbnN0
IFBhcmFtRXZlbnQmIGV2ZW50KQoreworICAgIC8vIFNhbml0eSBjaGVjayB0aGUgZXZlbnQuIEJl
IHN1cGVyIGNhcmVmdWwgd2UncmUgbm90IGdldHRpbmcgaW5mZWN0ZWQgd2l0aCBOYU4gb3IgSW5m
LgorICAgIGJvb2wgaXNWYWxpZCA9IGV2ZW50LnR5cGUoKSA8IFBhcmFtRXZlbnQ6Okxhc3RUeXBl
CisgICAgICAgICYmIGlzVmFsaWROdW1iZXIoZXZlbnQudmFsdWUoKSkKKyAgICAgICAgJiYgaXNW
YWxpZE51bWJlcihldmVudC50aW1lKCkpCisgICAgICAgICYmIGlzVmFsaWROdW1iZXIoZXZlbnQu
dGltZUNvbnN0YW50KCkpCisgICAgICAgICYmIGlzVmFsaWROdW1iZXIoZXZlbnQuZHVyYXRpb24o
KSkKKyAgICAgICAgJiYgZXZlbnQuZHVyYXRpb24oKSA+PSAwOworCisgICAgQVNTRVJUKGlzVmFs
aWQpOworICAgIGlmICghaXNWYWxpZCkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBN
dXRleExvY2tlciBsb2NrZXIobV9ldmVudHNMb2NrKTsKKyAgICAKKyAgICB1bnNpZ25lZCBpID0g
MDsKKyAgICBmbG9hdCBpbnNlcnRUaW1lID0gZXZlbnQudGltZSgpOworICAgIGZvciAoaSA9IDA7
IGkgPCBtX2V2ZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICAvLyBPdmVyd3JpdGUgc2FtZSBl
dmVudCB0eXBlIGFuZCB0aW1lLgorICAgICAgICBpZiAobV9ldmVudHNbaV0udGltZSgpID09IGlu
c2VydFRpbWUgJiYgbV9ldmVudHNbaV0udHlwZSgpID09IGV2ZW50LnR5cGUoKSkgeworICAgICAg
ICAgICAgbV9ldmVudHNbaV0gPSBldmVudDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChtX2V2ZW50c1tpXS50aW1lKCkgPiBpbnNlcnRUaW1lKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9ldmVudHMuaW5zZXJ0KGksIGV2ZW50KTsKK30K
Kwordm9pZCBBdWRpb1BhcmFtVGltZWxpbmU6OmNhbmNlbFNjaGVkdWxlZFZhbHVlcyhmbG9hdCBz
dGFydFRpbWUpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRzTG9jayk7CisKKyAg
ICAvLyBSZW1vdmUgYWxsIGV2ZW50cyBzdGFydGluZyBhdCBzdGFydFRpbWUuCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fZXZlbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICht
X2V2ZW50c1tpXS50aW1lKCkgPj0gc3RhcnRUaW1lKSB7CisgICAgICAgICAgICBtX2V2ZW50cy5y
ZW1vdmUoaSwgbV9ldmVudHMuc2l6ZSgpIC0gaSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KK30KKworZmxvYXQgQXVkaW9QYXJhbVRpbWVsaW5lOjp2YWx1ZUZvckNvbnRl
eHRUaW1lKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgZGVmYXVsdFZhbHVlLCBib29sJiBo
YXNWYWx1ZSkKK3sKKyAgICBBU1NFUlQoY29udGV4dCk7CisKKyAgICBpZiAoIWNvbnRleHQgfHwg
IW1fZXZlbnRzLnNpemUoKSB8fCBjb250ZXh0LT5jdXJyZW50VGltZSgpIDwgbV9ldmVudHNbMF0u
dGltZSgpKSB7CisgICAgICAgIGhhc1ZhbHVlID0gZmFsc2U7CisgICAgICAgIHJldHVybiBkZWZh
dWx0VmFsdWU7CisgICAgfQorCisgICAgLy8gQXNrIGZvciBqdXN0IGEgc2luZ2xlIHZhbHVlLgor
ICAgIGZsb2F0IHZhbHVlOworICAgIGZsb2F0IHNhbXBsZVJhdGUgPSBjb250ZXh0LT5zYW1wbGVS
YXRlKCk7CisgICAgZmxvYXQgc3RhcnRUaW1lID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb250
ZXh0LT5jdXJyZW50VGltZSgpKTsKKyAgICBmbG9hdCBlbmRUaW1lID0gc3RhcnRUaW1lICsgMS4x
ZiAvIHNhbXBsZVJhdGU7IC8vIHRpbWUganVzdCBiZXlvbmQgb25lIHNhbXBsZS1mcmFtZQorICAg
IGZsb2F0IGNvbnRyb2xSYXRlID0gc2FtcGxlUmF0ZSAvIEF1ZGlvTm9kZTo6UHJvY2Vzc2luZ1Np
emVJbkZyYW1lczsgLy8gb25lIHBhcmFtZXRlciBjaGFuZ2UgcGVyIHJlbmRlciBxdWFudHVtCisg
ICAgdmFsdWUgPSB2YWx1ZXNGb3JUaW1lUmFuZ2Uoc3RhcnRUaW1lLCBlbmRUaW1lLCBkZWZhdWx0
VmFsdWUsICZ2YWx1ZSwgMSwgc2FtcGxlUmF0ZSwgY29udHJvbFJhdGUpOworCisgICAgaGFzVmFs
dWUgPSB0cnVlOworICAgIHJldHVybiB2YWx1ZTsKK30KKworZmxvYXQgQXVkaW9QYXJhbVRpbWVs
aW5lOjp2YWx1ZXNGb3JUaW1lUmFuZ2UoZmxvYXQgc3RhcnRUaW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZW5kVGltZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGRlZmF1bHRWYWx1ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiB2YWx1ZXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBu
dW1iZXJPZlZhbHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZsb2F0IHNhbXBsZVJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbG9hdCBjb250cm9sUmF0ZSkKK3sKKyAgICAvLyBXZSBjYW4ndCBjb250ZW5k
IHRoZSBsb2NrIGluIHRoZSByZWFsdGltZSBhdWRpbyB0aHJlYWQuCisgICAgaWYgKCFtX2V2ZW50
c0xvY2sudHJ5TG9jaygpKSB7CisgICAgICAgIGlmICh2YWx1ZXMpIHsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZlZhbHVlczsgKytpKQorICAgICAgICAgICAg
ICAgIHZhbHVlc1tpXSA9IGRlZmF1bHRWYWx1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZGVmYXVsdFZhbHVlOworICAgIH0KKworICAgIGZsb2F0IHZhbHVlID0gdmFsdWVzRm9yVGltZVJh
bmdlSW1wbChzdGFydFRpbWUsIGVuZFRpbWUsIGRlZmF1bHRWYWx1ZSwgdmFsdWVzLCBudW1iZXJP
ZlZhbHVlcywgc2FtcGxlUmF0ZSwgY29udHJvbFJhdGUpOworICAgIG1fZXZlbnRzTG9jay51bmxv
Y2soKTsKKworICAgIHJldHVybiB2YWx1ZTsKK30KKworZmxvYXQgQXVkaW9QYXJhbVRpbWVsaW5l
Ojp2YWx1ZXNGb3JUaW1lUmFuZ2VJbXBsKGZsb2F0IHN0YXJ0VGltZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBlbmRUaW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGRlZmF1bHRW
YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
bG9hdCogdmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIG51bWJlck9mVmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHNhbXBsZVJhdGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgY29udHJvbFJhdGUpCit7
CisgICAgQVNTRVJUKHZhbHVlcyk7CisgICAgaWYgKCF2YWx1ZXMpCisgICAgICAgIHJldHVybiBk
ZWZhdWx0VmFsdWU7CisKKyAgICAvLyBSZXR1cm4gZGVmYXVsdCB2YWx1ZSBpZiB0aGVyZSBhcmUg
bm8gZXZlbnRzIG1hdGNoaW5nIHRoZSBkZXNpcmVkIHRpbWUgcmFuZ2UuCisgICAgQVNTRVJUKG1f
ZXZlbnRzLnNpemUoKSk7CisgICAgaWYgKCFtX2V2ZW50cy5zaXplKCkgfHwgZW5kVGltZSA8PSBt
X2V2ZW50c1swXS50aW1lKCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51
bWJlck9mVmFsdWVzOyArK2kpCisgICAgICAgICAgICB2YWx1ZXNbaV0gPSBkZWZhdWx0VmFsdWU7
CisgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7CisgICAgfQorCisgICAgLy8gTWFpbnRhaW4g
YSBydW5uaW5nIHRpbWUgYW5kIGluZGV4IGZvciB3cml0aW5nIHRoZSB2YWx1ZXMgYnVmZmVyLgor
ICAgIGZsb2F0IGN1cnJlbnRUaW1lID0gc3RhcnRUaW1lOworICAgIHVuc2lnbmVkIHdyaXRlSW5k
ZXggPSAwOworCisgICAgLy8gSWYgZmlyc3QgZXZlbnQgaXMgYWZ0ZXIgc3RhcnRUaW1lIHRoZW4g
ZmlsbCBpbml0aWFsIHBhcnQgb2YgdmFsdWVzIGJ1ZmZlciB3aXRoIGRlZmF1bHRWYWx1ZQorICAg
IC8vIHVudGlsIHdlIHJlYWNoIHRoZSBmaXJzdCBldmVudCB0aW1lLgorICAgIGZsb2F0IGZpcnN0
RXZlbnRUaW1lID0gbV9ldmVudHNbMF0udGltZSgpOworICAgIGlmIChmaXJzdEV2ZW50VGltZSA+
IHN0YXJ0VGltZSkgeworICAgICAgICBmbG9hdCBmaWxsVG9UaW1lID0gbWluKGVuZFRpbWUsIGZp
cnN0RXZlbnRUaW1lKTsKKyAgICAgICAgdW5zaWduZWQgZmlsbFRvRnJhbWUgPSBBdWRpb1V0aWxp
dGllczo6dGltZVRvU2FtcGxlRnJhbWUoZmlsbFRvVGltZSAtIHN0YXJ0VGltZSwgc2FtcGxlUmF0
ZSk7CisgICAgICAgIGZpbGxUb0ZyYW1lID0gbWluKGZpbGxUb0ZyYW1lLCBudW1iZXJPZlZhbHVl
cyk7CisgICAgICAgIGZvciAoOyB3cml0ZUluZGV4IDwgZmlsbFRvRnJhbWU7ICsrd3JpdGVJbmRl
eCkKKyAgICAgICAgICAgIHZhbHVlc1t3cml0ZUluZGV4XSA9IGRlZmF1bHRWYWx1ZTsKKworICAg
ICAgICBjdXJyZW50VGltZSA9IGZpbGxUb1RpbWU7CisgICAgfQorCisgICAgZmxvYXQgdmFsdWUg
PSBkZWZhdWx0VmFsdWU7CisKKyAgICAvLyBHbyB0aHJvdWdoIGVhY2ggZXZlbnQgYW5kIHJlbmRl
ciB0aGUgdmFsdWUgYnVmZmVyIHdoZXJlIHRoZSB0aW1lcyBvdmVybGFwLAorICAgIC8vIHN0b3Bw
aW5nIHdoZW4gd2UndmUgcmVuZGVyZWQgYWxsIHRoZSByZXF1ZXN0ZWQgdmFsdWVzLgorICAgIC8v
IEZJWE1FOiBjb3VsZCB0cnkgdG8gb3B0aW1pemUgYnkgYXZvaWRpbmcgaGF2aW5nIHRvIGl0ZXJh
dGUgc3RhcnRpbmcgZnJvbSB0aGUgdmVyeSBmaXJzdCBldmVudAorICAgIC8vIGFuZCBrZWVwaW5n
IHRyYWNrIG9mIGEgImN1cnJlbnQiIGV2ZW50IGluZGV4LgorICAgIGludCBuID0gbV9ldmVudHMu
c2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbiAmJiB3cml0ZUluZGV4IDwgbnVtYmVy
T2ZWYWx1ZXM7ICsraSkgeworICAgICAgICBQYXJhbUV2ZW50JiBldmVudCA9IG1fZXZlbnRzW2ld
OworICAgICAgICBQYXJhbUV2ZW50KiBuZXh0RXZlbnQgPSBpIDwgbiAtIDEgPyAmKG1fZXZlbnRz
W2kgKyAxXSkgOiAwOworCisgICAgICAgIC8vIFdhaXQgdW50aWwgd2UgZ2V0IGEgbW9yZSByZWNl
bnQgZXZlbnQuCisgICAgICAgIGlmIChuZXh0RXZlbnQgJiYgbmV4dEV2ZW50LT50aW1lKCkgPCBj
dXJyZW50VGltZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGZsb2F0IHZhbHVl
MSA9IGV2ZW50LnZhbHVlKCk7CisgICAgICAgIGZsb2F0IHRpbWUxID0gZXZlbnQudGltZSgpOwor
ICAgICAgICBmbG9hdCB2YWx1ZTIgPSBuZXh0RXZlbnQgPyBuZXh0RXZlbnQtPnZhbHVlKCkgOiB2
YWx1ZTE7CisgICAgICAgIGZsb2F0IHRpbWUyID0gbmV4dEV2ZW50ID8gbmV4dEV2ZW50LT50aW1l
KCkgOiBlbmRUaW1lICsgMTsKKworICAgICAgICBmbG9hdCBkZWx0YVRpbWUgPSB0aW1lMiAtIHRp
bWUxOworICAgICAgICBmbG9hdCBrID0gZGVsdGFUaW1lID4gMCA/IDEgLyBkZWx0YVRpbWUgOiAw
OworICAgICAgICBmbG9hdCBzYW1wbGVGcmFtZVRpbWVJbmNyID0gMSAvIHNhbXBsZVJhdGU7CisK
KyAgICAgICAgZmxvYXQgZmlsbFRvVGltZSA9IG1pbihlbmRUaW1lLCB0aW1lMik7CisgICAgICAg
IHVuc2lnbmVkIGZpbGxUb0ZyYW1lID0gQXVkaW9VdGlsaXRpZXM6OnRpbWVUb1NhbXBsZUZyYW1l
KGZpbGxUb1RpbWUgLSBzdGFydFRpbWUsIHNhbXBsZVJhdGUpOworICAgICAgICBmaWxsVG9GcmFt
ZSA9IG1pbihmaWxsVG9GcmFtZSwgbnVtYmVyT2ZWYWx1ZXMpOworCisgICAgICAgIFBhcmFtRXZl
bnQ6OlR5cGUgbmV4dEV2ZW50VHlwZSA9IG5leHRFdmVudCA/IHN0YXRpY19jYXN0PFBhcmFtRXZl
bnQ6OlR5cGU+KG5leHRFdmVudC0+dHlwZSgpKSA6IFBhcmFtRXZlbnQ6Okxhc3RUeXBlIC8qIHVu
a25vd24gKi87CisKKyAgICAgICAgLy8gRmlyc3QgaGFuZGxlIGxpbmVhciBhbmQgZXhwb25lbnRp
YWwgcmFtcHMgd2hpY2ggcmVxdWlyZSBsb29raW5nIGFoZWFkIHRvIHRoZSBuZXh0IGV2ZW50Lgor
ICAgICAgICBpZiAobmV4dEV2ZW50VHlwZSA9PSBQYXJhbUV2ZW50OjpMaW5lYXJSYW1wVG9WYWx1
ZSkgeworICAgICAgICAgICAgZm9yICg7IHdyaXRlSW5kZXggPCBmaWxsVG9GcmFtZTsgKyt3cml0
ZUluZGV4KSB7CisgICAgICAgICAgICAgICAgZmxvYXQgeCA9IChjdXJyZW50VGltZSAtIHRpbWUx
KSAqIGs7CisgICAgICAgICAgICAgICAgdmFsdWUgPSAoMSAtIHgpICogdmFsdWUxICsgeCAqIHZh
bHVlMjsKKyAgICAgICAgICAgICAgICB2YWx1ZXNbd3JpdGVJbmRleF0gPSB2YWx1ZTsKKyAgICAg
ICAgICAgICAgICBjdXJyZW50VGltZSArPSBzYW1wbGVGcmFtZVRpbWVJbmNyOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKG5leHRFdmVudFR5cGUgPT0gUGFyYW1FdmVudDo6RXhw
b25lbnRpYWxSYW1wVG9WYWx1ZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlMSA8PSAwIHx8IHZh
bHVlMiA8PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gSGFuZGxlIG5lZ2F0aXZlIHZhbHVlcyBl
cnJvciBjYXNlIGJ5IHByb3BhZ2F0aW5nIHByZXZpb3VzIHZhbHVlLgorICAgICAgICAgICAgICAg
IGZvciAoOyB3cml0ZUluZGV4IDwgZmlsbFRvRnJhbWU7ICsrd3JpdGVJbmRleCkKKyAgICAgICAg
ICAgICAgICAgICAgdmFsdWVzW3dyaXRlSW5kZXhdID0gdmFsdWU7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGZsb2F0IG51bVNhbXBsZUZyYW1lcyA9IGRlbHRhVGltZSAq
IHNhbXBsZVJhdGU7CisgICAgICAgICAgICAgICAgLy8gVGhlIHZhbHVlIGdvZXMgZXhwb25lbnRp
YWxseSBmcm9tIHZhbHVlMSB0byB2YWx1ZTIgaW4gYSBkdXJhdGlvbiBvZiBkZWx0YVRpbWUgc2Vj
b25kcyAoY29ycmVzcG9uZGluZyB0byBudW1TYW1wbGVGcmFtZXMpLgorICAgICAgICAgICAgICAg
IC8vIENvbXB1dGUgdGhlIHBlci1zYW1wbGUgbXVsdGlwbGllci4KKyAgICAgICAgICAgICAgICBm
bG9hdCBtdWx0aXBsaWVyID0gcG93Zih2YWx1ZTIgLyB2YWx1ZTEsIDEgLyBudW1TYW1wbGVGcmFt
ZXMpOworCisgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBzdGFydGluZyB2YWx1ZSBvZiB0aGUg
ZXhwb25lbnRpYWwgcmFtcC4gVGhpcyBpcyB0aGUgc2FtZSBhcyBtdWx0aXBsaWVyIF4KKyAgICAg
ICAgICAgICAgICAvLyBBdWRpb1V0aWxpdGllczo6dGltZVRvU2FtcGxlRnJhbWUoY3VycmVudFRp
bWUgLSB0aW1lMSwgc2FtcGxlUmF0ZSksIGJ1dCBpcyBtb3JlCisgICAgICAgICAgICAgICAgLy8g
YWNjdXJhdGUsIGVzcGVjaWFsbHkgaWYgbXVsdGlwbGllciBpcyBjbG9zZSB0byAxLgorICAgICAg
ICAgICAgICAgIHZhbHVlID0gdmFsdWUxICogcG93Zih2YWx1ZTIgLyB2YWx1ZTEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1ZGlvVXRpbGl0aWVzOjp0aW1lVG9TYW1w
bGVGcmFtZShjdXJyZW50VGltZSAtIHRpbWUxLCBzYW1wbGVSYXRlKSAvIG51bVNhbXBsZUZyYW1l
cyk7CisKKyAgICAgICAgICAgICAgICBmb3IgKDsgd3JpdGVJbmRleCA8IGZpbGxUb0ZyYW1lOyAr
K3dyaXRlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3dyaXRlSW5kZXhdID0g
dmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlICo9IG11bHRpcGxpZXI7CisgICAgICAg
ICAgICAgICAgICAgIGN1cnJlbnRUaW1lICs9IHNhbXBsZUZyYW1lVGltZUluY3I7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gSGFuZGxlIGV2ZW50IHR5cGVzIG5vdCByZXF1aXJpbmcgbG9va2luZyBhaGVhZCB0byB0aGUg
bmV4dCBldmVudC4KKyAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQudHlwZSgpKSB7CisgICAgICAg
ICAgICBjYXNlIFBhcmFtRXZlbnQ6OlNldFZhbHVlOgorICAgICAgICAgICAgY2FzZSBQYXJhbUV2
ZW50OjpMaW5lYXJSYW1wVG9WYWx1ZToKKyAgICAgICAgICAgIGNhc2UgUGFyYW1FdmVudDo6RXhw
b25lbnRpYWxSYW1wVG9WYWx1ZToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRUaW1lID0gZmlsbFRvVGltZTsKKworICAgICAgICAgICAgICAgICAgICAvLyBT
aW1wbHkgc3RheSBhdCBhIGNvbnN0YW50IHZhbHVlLgorICAgICAgICAgICAgICAgICAgICB2YWx1
ZSA9IGV2ZW50LnZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoOyB3cml0ZUluZGV4
IDwgZmlsbFRvRnJhbWU7ICsrd3JpdGVJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlc1t3cml0ZUluZGV4XSA9IHZhbHVlOworCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBQYXJhbUV2ZW50OjpTZXRUYXJn
ZXRWYWx1ZToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRU
aW1lID0gZmlsbFRvVGltZTsKKworICAgICAgICAgICAgICAgICAgICAvLyBFeHBvbmVudGlhbCBh
cHByb2FjaCB0byB0YXJnZXQgdmFsdWUgd2l0aCBnaXZlbiB0aW1lIGNvbnN0YW50LgorICAgICAg
ICAgICAgICAgICAgICBmbG9hdCB0YXJnZXRWYWx1ZSA9IGV2ZW50LnZhbHVlKCk7CisgICAgICAg
ICAgICAgICAgICAgIGZsb2F0IHRpbWVDb25zdGFudCA9IGV2ZW50LnRpbWVDb25zdGFudCgpOwor
ICAgICAgICAgICAgICAgICAgICBmbG9hdCBkaXNjcmV0ZVRpbWVDb25zdGFudCA9IHN0YXRpY19j
YXN0PGZsb2F0PihBdWRpb1V0aWxpdGllczo6ZGlzY3JldGVUaW1lQ29uc3RhbnRGb3JTYW1wbGVS
YXRlKHRpbWVDb25zdGFudCwgY29udHJvbFJhdGUpKTsKKworICAgICAgICAgICAgICAgICAgICBm
b3IgKDsgd3JpdGVJbmRleCA8IGZpbGxUb0ZyYW1lOyArK3dyaXRlSW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlc1t3cml0ZUluZGV4XSA9IHZhbHVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgKz0gKHRhcmdldFZhbHVlIC0gdmFsdWUpICogZGlzY3JldGVUaW1l
Q29uc3RhbnQ7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgUGFyYW1FdmVudDo6
U2V0VmFsdWVDdXJ2ZToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEZs
b2F0MzJBcnJheSogY3VydmUgPSBldmVudC5jdXJ2ZSgpOworICAgICAgICAgICAgICAgICAgICBm
bG9hdCogY3VydmVEYXRhID0gY3VydmUgPyBjdXJ2ZS0+ZGF0YSgpIDogMDsKKyAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDdXJ2ZVBvaW50cyA9IGN1cnZlID8gY3VydmUtPmxl
bmd0aCgpIDogMDsKKworICAgICAgICAgICAgICAgICAgICAvLyBDdXJ2ZSBldmVudHMgaGF2ZSBk
dXJhdGlvbiwgc28gZG9uJ3QganVzdCB1c2UgbmV4dCBldmVudCB0aW1lLgorICAgICAgICAgICAg
ICAgICAgICBmbG9hdCBkdXJhdGlvbiA9IGV2ZW50LmR1cmF0aW9uKCk7CisgICAgICAgICAgICAg
ICAgICAgIGZsb2F0IGR1cmF0aW9uRnJhbWVzID0gZHVyYXRpb24gKiBzYW1wbGVSYXRlOworICAg
ICAgICAgICAgICAgICAgICBmbG9hdCBjdXJ2ZVBvaW50c1BlckZyYW1lID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG51bWJlck9mQ3VydmVQb2ludHMpIC8gZHVyYXRpb25GcmFtZXM7CisKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFjdXJ2ZSB8fCAhY3VydmVEYXRhIHx8ICFudW1iZXJPZkN1cnZlUG9p
bnRzIHx8IGR1cmF0aW9uIDw9IDAgfHwgc2FtcGxlUmF0ZSA8PSAwKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBFcnJvciBjb25kaXRpb24gLSBzaW1wbHkgcHJvcGFnYXRlIHByZXZpb3Vz
IHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFRpbWUgPSBmaWxsVG9UaW1l
OworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHdyaXRlSW5kZXggPCBmaWxsVG9GcmFt
ZTsgKyt3cml0ZUluZGV4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1t3cml0
ZUluZGV4XSA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBTYXZlIG9sZCB2YWx1ZXMg
YW5kIHJlY2FsY3VsYXRlIGluZm9ybWF0aW9uIGJhc2VkIG9uIHRoZSBjdXJ2ZSdzIGR1cmF0aW9u
CisgICAgICAgICAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgdGhlIG5leHQgZXZlbnQgdGltZS4K
KyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbmV4dEV2ZW50RmlsbFRvRnJhbWUgPSBmaWxs
VG9GcmFtZTsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgbmV4dEV2ZW50RmlsbFRvVGltZSA9
IGZpbGxUb1RpbWU7CisgICAgICAgICAgICAgICAgICAgIGZpbGxUb1RpbWUgPSBtaW4oZW5kVGlt
ZSwgdGltZTEgKyBkdXJhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGZpbGxUb0ZyYW1lID0g
QXVkaW9VdGlsaXRpZXM6OnRpbWVUb1NhbXBsZUZyYW1lKGZpbGxUb1RpbWUgLSBzdGFydFRpbWUs
IHNhbXBsZVJhdGUpOworICAgICAgICAgICAgICAgICAgICBmaWxsVG9GcmFtZSA9IG1pbihmaWxs
VG9GcmFtZSwgbnVtYmVyT2ZWYWx1ZXMpOworCisgICAgICAgICAgICAgICAgICAgIC8vIEluZGV4
IGludG8gdGhlIGN1cnZlIGRhdGEgdXNpbmcgYSBmbG9hdGluZy1wb2ludCB2YWx1ZS4KKyAgICAg
ICAgICAgICAgICAgICAgLy8gV2UncmUgc2NhbGluZyB0aGUgbnVtYmVyIG9mIGN1cnZlIHBvaW50
cyBieSB0aGUgZHVyYXRpb24gKHNlZSBjdXJ2ZVBvaW50c1BlckZyYW1lKS4KKyAgICAgICAgICAg
ICAgICAgICAgZmxvYXQgY3VydmVWaXJ0dWFsSW5kZXggPSAwOworICAgICAgICAgICAgICAgICAg
ICBpZiAodGltZTEgPCBjdXJyZW50VGltZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SW5kZXggc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2YgdGhlIGN1cnZlIGRhdGEuCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBEb24ndCB1c2UgdGltZVRvU2FtcGxlRnJhbWUoKSBzaW5jZSB3
ZSB3YW50IHRoZSBleGFjdCBmbG9hdGluZy1wb2ludCBmcmFtZS4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZsb2F0IGZyYW1lT2Zmc2V0ID0gKGN1cnJlbnRUaW1lIC0gdGltZTEpICogc2FtcGxl
UmF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlVmlydHVhbEluZGV4ID0gY3VydmVQ
b2ludHNQZXJGcmFtZSAqIGZyYW1lT2Zmc2V0OworICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgLy8gUmVuZGVyIHRoZSBzdHJldGNoZWQgY3VydmUgZGF0YSB1c2lu
ZyBuZWFyZXN0IG5laWdoYm9yIHNhbXBsaW5nLgorICAgICAgICAgICAgICAgICAgICAvLyBPdmVy
c2FtcGxlZCBjdXJ2ZSBkYXRhIGNhbiBiZSBwcm92aWRlZCBpZiBzbW9vdGhuZXNzIGlzIGRlc2ly
ZWQuCisgICAgICAgICAgICAgICAgICAgIGZvciAoOyB3cml0ZUluZGV4IDwgZmlsbFRvRnJhbWU7
ICsrd3JpdGVJbmRleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWRlYWxseSB3ZSdk
IHVzZSByb3VuZCgpIGZyb20gTWF0aEV4dHJhcywgYnV0IHdlJ3JlIGluIGEgdGlnaHQgbG9vcCBo
ZXJlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgd2UncmUgdHJhZGluZyBvZmYgcHJl
Y2lzaW9uIGZvciBleHRyYSBzcGVlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGN1cnZlSW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMC41ICsgY3VydmVWaXJ0dWFsSW5k
ZXgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZVZpcnR1YWxJbmRleCArPSBjdXJ2
ZVBvaW50c1BlckZyYW1lOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBCb3VuZHMgY2hl
Y2suCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VydmVJbmRleCA8IG51bWJlck9mQ3Vy
dmVQb2ludHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjdXJ2ZURhdGFb
Y3VydmVJbmRleF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1t3cml0ZUluZGV4
XSA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gSWYgdGhlcmUncyBhbnkgdGltZSBsZWZ0IGFmdGVyIHRoZSBkdXJhdGlvbiBvZiB0aGlzIGV2
ZW50IGFuZCB0aGUgc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIG5leHQsIHRo
ZW4ganVzdCBwcm9wYWdhdGUgdGhlIGxhc3QgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgIGZv
ciAoOyB3cml0ZUluZGV4IDwgbmV4dEV2ZW50RmlsbFRvRnJhbWU7ICsrd3JpdGVJbmRleCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1t3cml0ZUluZGV4XSA9IHZhbHVlOworCisgICAg
ICAgICAgICAgICAgICAgIC8vIFJlLWFkanVzdCBjdXJyZW50IHRpbWUKKyAgICAgICAgICAgICAg
ICAgICAgY3VycmVudFRpbWUgPSBuZXh0RXZlbnRGaWxsVG9UaW1lOworCisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIElmIHRoZXJlJ3MgYW55IHRpbWUgbGVmdCBhZnRlciBwcm9jZXNz
aW5nIHRoZSBsYXN0IGV2ZW50IHRoZW4ganVzdCBwcm9wYWdhdGUgdGhlIGxhc3QgdmFsdWUKKyAg
ICAvLyB0byB0aGUgZW5kIG9mIHRoZSB2YWx1ZXMgYnVmZmVyLgorICAgIGZvciAoOyB3cml0ZUlu
ZGV4IDwgbnVtYmVyT2ZWYWx1ZXM7ICsrd3JpdGVJbmRleCkKKyAgICAgICAgdmFsdWVzW3dyaXRl
SW5kZXhdID0gdmFsdWU7CisKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmgJKHJl
dmlzaW9uIDExMTIzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbVRp
bWVsaW5lLmg6MTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b1BhcmFtVGltZWxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQXVkaW9QYXJhbVRpbWVsaW5lX2gKKyNkZWZpbmUgQXVkaW9QYXJhbVRpbWVsaW5lX2gKKwor
I2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgorI2luY2x1ZGUgPHd0Zi9GbG9hdDMyQXJyYXkuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb1BhcmFtVGltZWxpbmUgeworcHVibGlj
OgorICAgIEF1ZGlvUGFyYW1UaW1lbGluZSgpCisgICAgICAgIDogbV9jdXJyZW50RXZlbnRJbmRl
eCgwKQorICAgICAgICAsIG1fdmFsdWUoMCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBzZXRW
YWx1ZUF0VGltZShmbG9hdCB2YWx1ZSwgZmxvYXQgdGltZSk7CisgICAgdm9pZCBsaW5lYXJSYW1w
VG9WYWx1ZUF0VGltZShmbG9hdCB2YWx1ZSwgZmxvYXQgdGltZSk7CisgICAgdm9pZCBleHBvbmVu
dGlhbFJhbXBUb1ZhbHVlQXRUaW1lKGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1lKTsKKyAgICB2b2lk
IHNldFRhcmdldFZhbHVlQXRUaW1lKGZsb2F0IHRhcmdldFZhbHVlLCBmbG9hdCB0aW1lLCBmbG9h
dCB0aW1lQ29uc3RhbnQpOworICAgIHZvaWQgc2V0VmFsdWVDdXJ2ZUF0VGltZShGbG9hdDMyQXJy
YXkqIGN1cnZlLCBmbG9hdCB0aW1lLCBmbG9hdCBkdXJhdGlvbik7CisgICAgdm9pZCBjYW5jZWxT
Y2hlZHVsZWRWYWx1ZXMoZmxvYXQgc3RhcnRUaW1lKTsKKworICAgIC8vIGhhc1ZhbHVlIGlzIHNl
dCB0byB0cnVlIGlmIGEgdmFsaWQgdGltZWxpbmUgdmFsdWUgaXMgcmV0dXJuZWQuCisgICAgLy8g
b3RoZXJ3aXNlIGRlZmF1bHRWYWx1ZSBpcyByZXR1cm5lZC4KKyAgICBmbG9hdCB2YWx1ZUZvckNv
bnRleHRUaW1lKEF1ZGlvQ29udGV4dCosIGZsb2F0IGRlZmF1bHRWYWx1ZSwgYm9vbCYgaGFzVmFs
dWUpOworCisgICAgLy8gR2l2ZW4gdGhlIHRpbWUgcmFuZ2UsIGNhbGN1bGF0ZXMgcGFyYW1ldGVy
IHZhbHVlcyBpbnRvIHRoZSB2YWx1ZXMgYnVmZmVyCisgICAgLy8gYW5kIHJldHVybnMgdGhlIGxh
c3QgcGFyYW1ldGVyIHZhbHVlIGNhbGN1bGF0ZWQgZm9yICJ2YWx1ZXMiIG9yIHRoZSBkZWZhdWx0
VmFsdWUgaWYgbm9uZSB3ZXJlIGNhbGN1bGF0ZWQuCisgICAgLy8gY29udHJvbFJhdGUgaXMgdGhl
IHJhdGUgKG51bWJlciBwZXIgc2Vjb25kKSBhdCB3aGljaCBwYXJhbWV0ZXIgdmFsdWVzIHdpbGwg
YmUgY2FsY3VsYXRlZC4KKyAgICAvLyBJdCBzaG91bGQgZXF1YWwgc2FtcGxlUmF0ZSBmb3Igc2Ft
cGxlLWFjY3VyYXRlIHBhcmFtZXRlciBjaGFuZ2VzLCBhbmQgb3RoZXJ3aXNlIHdpbGwgdXN1YWxs
eSBtYXRjaAorICAgIC8vIHRoZSByZW5kZXIgcXVhbnR1bSBzaXplIHN1Y2ggdGhhdCB0aGUgcGFy
YW1ldGVyIHZhbHVlIGNoYW5nZXMgb25jZSBwZXIgcmVuZGVyIHF1YW50dW0uCisgICAgZmxvYXQg
dmFsdWVzRm9yVGltZVJhbmdlKGZsb2F0IHN0YXJ0VGltZSwgZmxvYXQgZW5kVGltZSwgZmxvYXQg
ZGVmYXVsdFZhbHVlLCBmbG9hdCogdmFsdWVzLCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcywgZmxv
YXQgc2FtcGxlUmF0ZSwgZmxvYXQgY29udHJvbFJhdGUpOworCisgICAgYm9vbCBoYXNWYWx1ZXMo
KSB7IHJldHVybiBtX2V2ZW50cy5zaXplKCk7IH0KKworcHJpdmF0ZToKKyAgICBjbGFzcyBQYXJh
bUV2ZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIGVudW0gVHlwZSB7CisgICAgICAgICAgICBT
ZXRWYWx1ZSwKKyAgICAgICAgICAgIExpbmVhclJhbXBUb1ZhbHVlLAorICAgICAgICAgICAgRXhw
b25lbnRpYWxSYW1wVG9WYWx1ZSwKKyAgICAgICAgICAgIFNldFRhcmdldFZhbHVlLAorICAgICAg
ICAgICAgU2V0VmFsdWVDdXJ2ZSwKKyAgICAgICAgICAgIExhc3RUeXBlCisgICAgICAgIH07CisK
KyAgICAgICAgUGFyYW1FdmVudChUeXBlIHR5cGUsIGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1lLCBm
bG9hdCB0aW1lQ29uc3RhbnQsIGZsb2F0IGR1cmF0aW9uLCBQYXNzUmVmUHRyPEZsb2F0MzJBcnJh
eT4gY3VydmUpCisgICAgICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAgICAgICAgICAgLCBtX3Zh
bHVlKHZhbHVlKQorICAgICAgICAgICAgLCBtX3RpbWUodGltZSkKKyAgICAgICAgICAgICwgbV90
aW1lQ29uc3RhbnQodGltZUNvbnN0YW50KQorICAgICAgICAgICAgLCBtX2R1cmF0aW9uKGR1cmF0
aW9uKQorICAgICAgICAgICAgLCBtX2N1cnZlKGN1cnZlKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICB1bnNpZ25lZCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAg
ICAgIGZsb2F0IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgICAgICBmbG9h
dCB0aW1lKCkgY29uc3QgeyByZXR1cm4gbV90aW1lOyB9CisgICAgICAgIGZsb2F0IHRpbWVDb25z
dGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZUNvbnN0YW50OyB9CisgICAgICAgIGZsb2F0IGR1
cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQorICAgICAgICBGbG9hdDMyQXJy
YXkqIGN1cnZlKCkgeyByZXR1cm4gbV9jdXJ2ZS5nZXQoKTsgfQorCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgdW5zaWduZWQgbV90eXBlOworICAgICAgICBmbG9hdCBtX3ZhbHVlOworICAgICAgICBm
bG9hdCBtX3RpbWU7CisgICAgICAgIGZsb2F0IG1fdGltZUNvbnN0YW50OworICAgICAgICBmbG9h
dCBtX2R1cmF0aW9uOworICAgICAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiBtX2N1cnZlOworICAg
IH07CisKKyAgICB2b2lkIGluc2VydEV2ZW50KGNvbnN0IFBhcmFtRXZlbnQmKTsKKyAgICBmbG9h
dCB2YWx1ZXNGb3JUaW1lUmFuZ2VJbXBsKGZsb2F0IHN0YXJ0VGltZSwgZmxvYXQgZW5kVGltZSwg
ZmxvYXQgZGVmYXVsdFZhbHVlLCBmbG9hdCogdmFsdWVzLCB1bnNpZ25lZCBudW1iZXJPZlZhbHVl
cywgZmxvYXQgc2FtcGxlUmF0ZSwgZmxvYXQgY29udHJvbFJhdGUpOworCisgICAgVmVjdG9yPFBh
cmFtRXZlbnQ+IG1fZXZlbnRzOworICAgIHVuc2lnbmVkIG1fY3VycmVudEV2ZW50SW5kZXg7Cisg
ICAgZmxvYXQgbV92YWx1ZTsKKworICAgIE11dGV4IG1fZXZlbnRzTG9jazsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEF1ZGlvUGFyYW1UaW1lbGluZV9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUHJv
Y2Vzc2luZ0V2ZW50LmNwcAkocmV2aXNpb24gMTExMjMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5jcHA6MTExMjMzKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJBdWRpb1Byb2Nlc3NpbmdFdmVudC5o
IgorCisjaW5jbHVkZSAiQXVkaW9CdWZmZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxBdWRpb1Byb2Nlc3NpbmdFdmVudD4g
QXVkaW9Qcm9jZXNzaW5nRXZlbnQ6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBBdWRpb1Byb2Nlc3NpbmdFdmVudCk7Cit9CisKK1Bhc3NSZWZQdHI8QXVkaW9Qcm9jZXNzaW5n
RXZlbnQ+IEF1ZGlvUHJvY2Vzc2luZ0V2ZW50OjpjcmVhdGUoUGFzc1JlZlB0cjxBdWRpb0J1ZmZl
cj4gaW5wdXRCdWZmZXIsIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IG91dHB1dEJ1ZmZlcikKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvUHJvY2Vzc2luZ0V2ZW50KGlucHV0QnVmZmVy
LCBvdXRwdXRCdWZmZXIpKTsKK30KKworQXVkaW9Qcm9jZXNzaW5nRXZlbnQ6OkF1ZGlvUHJvY2Vz
c2luZ0V2ZW50KCkKK3sKK30KKworQXVkaW9Qcm9jZXNzaW5nRXZlbnQ6OkF1ZGlvUHJvY2Vzc2lu
Z0V2ZW50KFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IGlucHV0QnVmZmVyLCBQYXNzUmVmUHRyPEF1
ZGlvQnVmZmVyPiBvdXRwdXRCdWZmZXIpCisgICAgOiBFdmVudChldmVudE5hbWVzKCkuYXVkaW9w
cm9jZXNzRXZlbnQsIHRydWUsIGZhbHNlKQorICAgICwgbV9pbnB1dEJ1ZmZlcihpbnB1dEJ1ZmZl
cikKKyAgICAsIG1fb3V0cHV0QnVmZmVyKG91dHB1dEJ1ZmZlcikKK3sKK30KKworQXVkaW9Qcm9j
ZXNzaW5nRXZlbnQ6On5BdWRpb1Byb2Nlc3NpbmdFdmVudCgpCit7Cit9CisKK2NvbnN0IEF0b21p
Y1N0cmluZyYgQXVkaW9Qcm9jZXNzaW5nRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAorewor
ICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yQXVkaW9Qcm9jZXNzaW5nRXZlbnQ7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVE
SU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2lu
Z0V2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb1Byb2Nlc3NpbmdFdmVudC5oCShyZXZpc2lvbiAxMTEyMzMpCShmcm9tIFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50Lmg6MTExMjMzKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEF1ZGlvUHJvY2Vzc2lu
Z0V2ZW50X2gKKyNkZWZpbmUgQXVkaW9Qcm9jZXNzaW5nRXZlbnRfaAorCisjaW5jbHVkZSAiQXVk
aW9CdWZmZXIuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEF1ZGlvQnVmZmVyOworICAgIAorY2xhc3MgQXVkaW9Qcm9jZXNzaW5nRXZlbnQgOiBwdWJs
aWMgRXZlbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlvUHJvY2Vzc2lu
Z0V2ZW50PiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb1Byb2Nlc3NpbmdF
dmVudD4gY3JlYXRlKFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IGlucHV0QnVmZmVyLCBQYXNzUmVm
UHRyPEF1ZGlvQnVmZmVyPiBvdXRwdXRCdWZmZXIpOworICAgIAorICAgIHZpcnR1YWwgfkF1ZGlv
UHJvY2Vzc2luZ0V2ZW50KCk7CisKKyAgICBBdWRpb0J1ZmZlciogaW5wdXRCdWZmZXIoKSB7IHJl
dHVybiBtX2lucHV0QnVmZmVyLmdldCgpOyB9CisgICAgQXVkaW9CdWZmZXIqIG91dHB1dEJ1ZmZl
cigpIHsgcmV0dXJuIG1fb3V0cHV0QnVmZmVyLmdldCgpOyB9CisKKyAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIEF1
ZGlvUHJvY2Vzc2luZ0V2ZW50KCk7CisgICAgQXVkaW9Qcm9jZXNzaW5nRXZlbnQoUGFzc1JlZlB0
cjxBdWRpb0J1ZmZlcj4gaW5wdXRCdWZmZXIsIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IG91dHB1
dEJ1ZmZlcik7CisKKyAgICBSZWZQdHI8QXVkaW9CdWZmZXI+IG1faW5wdXRCdWZmZXI7CisgICAg
UmVmUHRyPEF1ZGlvQnVmZmVyPiBtX291dHB1dEJ1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50X2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5n
RXZlbnQuaWRsCShyZXZpc2lvbiAxMTEyMzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmlkbDoxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIGF1ZGlvIHsKKyAgICBpbnRlcmZhY2Ug
WworICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCisgICAgICAgIEpTR2VuZXJhdGVUb0pT
T2JqZWN0CisgICAgXSBBdWRpb1Byb2Nlc3NpbmdFdmVudCA6IEV2ZW50IHsKKyAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIEF1ZGlvQnVmZmVyIGlucHV0QnVmZmVyOworICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgQXVkaW9CdWZmZXIgb3V0cHV0QnVmZmVyOyAKKyAgICB9OworfQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5o
CShyZXZpc2lvbiAxMTEyMzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvU291
cmNlTm9kZS5oOjExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9Tb3VyY2VOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
QXVkaW9Tb3VyY2VOb2RlX2gKKyNkZWZpbmUgQXVkaW9Tb3VyY2VOb2RlX2gKKworI2luY2x1ZGUg
IkF1ZGlvTm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvU291cmNl
Tm9kZSA6IHB1YmxpYyBBdWRpb05vZGUgeworcHVibGljOgorICAgIEF1ZGlvU291cmNlTm9kZShB
dWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCisgICAgICAgIDogQXVkaW9O
b2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCisgICAgeworICAgIH0KK3Byb3RlY3RlZDoKKyAgICB2
aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKyAg
ICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7
IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEF1ZGlvU291cmNl
Tm9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU291cmNl
Tm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb1NvdXJjZU5vZGUuaWRsCShyZXZpc2lvbiAxMTEyMzMpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5pZGw6MTExMjMzKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCittb2R1bGUgYXVkaW8geworICAgIGludGVyZmFjZSBbCisgICAgICAgIENv
bmRpdGlvbmFsPVdFQl9BVURJTworICAgIF0gQXVkaW9Tb3VyY2VOb2RlIDogQXVkaW9Ob2RlIHsK
KyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRE
U1BLZXJuZWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQmlxdWFkRFNQS2VybmVsLmNwcAkocmV2aXNpb24gMTExMjMzKQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuY3BwOjExMTIzMykKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJCaXF1YWREU1BLZXJuZWwuaCIKKworI2lu
Y2x1ZGUgIkJpcXVhZFByb2Nlc3Nvci5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgor
I2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisvLyBGSVhNRTogQXMgYSByZWN1cnNpdmUgbGluZWFyIGZpbHRlciwgZGVw
ZW5kaW5nIG9uIGl0cyBwYXJhbWV0ZXJzLCBhIGJpcXVhZCBmaWx0ZXIgY2FuIGhhdmUKKy8vIGFu
IGluZmluaXRlIHRhaWxUaW1lLiBJbiBwcmFjdGljZSwgQmlxdWFkIGZpbHRlcnMgZG8gbm90IHVz
dWFsbHkgKGV4Y2VwdCBmb3IgdmVyeSBoaWdoIHJlc29uYW5jZSB2YWx1ZXMpIAorLy8gaGF2ZSBh
IHRhaWxUaW1lIG9mIGxvbmdlciB0aGFuIGFwcHJveC4gMjAwbXMuIFRoaXMgdmFsdWUgY291bGQg
cG9zc2libHkgYmUgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUKKy8vIHNldHRpbmdzIG9mIHRoZSBC
aXF1YWQuCitzdGF0aWMgY29uc3QgZG91YmxlIE1heEJpcXVhZERlbGF5VGltZSA9IDAuMjsKKwor
dm9pZCBCaXF1YWREU1BLZXJuZWw6OnVwZGF0ZUNvZWZmaWNpZW50c0lmTmVjZXNzYXJ5KGJvb2wg
dXNlU21vb3RoaW5nLCBib29sIGZvcmNlVXBkYXRlKQoreworICAgIGlmIChmb3JjZVVwZGF0ZSB8
fCBiaXF1YWRQcm9jZXNzb3IoKS0+ZmlsdGVyQ29lZmZpY2llbnRzRGlydHkoKSkgeworICAgICAg
ICBkb3VibGUgdmFsdWUxOworICAgICAgICBkb3VibGUgdmFsdWUyOworICAgICAgICBkb3VibGUg
Z2FpbjsKKyAgICAgICAgCisgICAgICAgIGlmICh1c2VTbW9vdGhpbmcpIHsKKyAgICAgICAgICAg
IHZhbHVlMSA9IGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIxKCktPnNtb290aGVkVmFsdWUo
KTsKKyAgICAgICAgICAgIHZhbHVlMiA9IGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIyKCkt
PnNtb290aGVkVmFsdWUoKTsKKyAgICAgICAgICAgIGdhaW4gPSBiaXF1YWRQcm9jZXNzb3IoKS0+
cGFyYW1ldGVyMygpLT5zbW9vdGhlZFZhbHVlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICB2YWx1ZTEgPSBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMSgpLT52YWx1ZSgpOwor
ICAgICAgICAgICAgdmFsdWUyID0gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjIoKS0+dmFs
dWUoKTsKKyAgICAgICAgICAgIGdhaW4gPSBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMygp
LT52YWx1ZSgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ29udmVydCBmcm9tIEhlcnR6IHRv
IG5vcm1hbGl6ZWQgZnJlcXVlbmN5IDAgLT4gMS4KKyAgICAgICAgZG91YmxlIG55cXVpc3QgPSB0
aGlzLT5ueXF1aXN0KCk7CisgICAgICAgIGRvdWJsZSBub3JtYWxpemVkRnJlcXVlbmN5ID0gdmFs
dWUxIC8gbnlxdWlzdDsKKworICAgICAgICAvLyBDb25maWd1cmUgdGhlIGJpcXVhZCB3aXRoIHRo
ZSBuZXcgZmlsdGVyIHBhcmFtZXRlcnMgZm9yIHRoZSBhcHByb3ByaWF0ZSB0eXBlIG9mIGZpbHRl
ci4KKyAgICAgICAgc3dpdGNoIChiaXF1YWRQcm9jZXNzb3IoKS0+dHlwZSgpKSB7CisgICAgICAg
IGNhc2UgQmlxdWFkUHJvY2Vzc29yOjpMb3dQYXNzOgorICAgICAgICAgICAgbV9iaXF1YWQuc2V0
TG93cGFzc1BhcmFtcyhub3JtYWxpemVkRnJlcXVlbmN5LCB2YWx1ZTIpOworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBCaXF1YWRQcm9jZXNzb3I6OkhpZ2hQYXNzOgorICAgICAg
ICAgICAgbV9iaXF1YWQuc2V0SGlnaHBhc3NQYXJhbXMobm9ybWFsaXplZEZyZXF1ZW5jeSwgdmFs
dWUyKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQmlxdWFkUHJvY2Vzc29y
OjpCYW5kUGFzczoKKyAgICAgICAgICAgIG1fYmlxdWFkLnNldEJhbmRwYXNzUGFyYW1zKG5vcm1h
bGl6ZWRGcmVxdWVuY3ksIHZhbHVlMik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBj
YXNlIEJpcXVhZFByb2Nlc3Nvcjo6TG93U2hlbGY6CisgICAgICAgICAgICBtX2JpcXVhZC5zZXRM
b3dTaGVsZlBhcmFtcyhub3JtYWxpemVkRnJlcXVlbmN5LCBnYWluKTsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgQmlxdWFkUHJvY2Vzc29yOjpIaWdoU2hlbGY6CisgICAgICAg
ICAgICBtX2JpcXVhZC5zZXRIaWdoU2hlbGZQYXJhbXMobm9ybWFsaXplZEZyZXF1ZW5jeSwgZ2Fp
bik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJpcXVhZFByb2Nlc3Nvcjo6
UGVha2luZzoKKyAgICAgICAgICAgIG1fYmlxdWFkLnNldFBlYWtpbmdQYXJhbXMobm9ybWFsaXpl
ZEZyZXF1ZW5jeSwgdmFsdWUyLCBnYWluKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgQmlxdWFkUHJvY2Vzc29yOjpOb3RjaDoKKyAgICAgICAgICAgIG1fYmlxdWFkLnNldE5v
dGNoUGFyYW1zKG5vcm1hbGl6ZWRGcmVxdWVuY3ksIHZhbHVlMik7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIEJpcXVhZFByb2Nlc3Nvcjo6QWxscGFzczoKKyAgICAgICAgICAg
IG1fYmlxdWFkLnNldEFsbHBhc3NQYXJhbXMobm9ybWFsaXplZEZyZXF1ZW5jeSwgdmFsdWUyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEJpcXVhZERT
UEtlcm5lbDo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24s
IHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAgQVNTRVJUKHNvdXJjZSAmJiBkZXN0aW5h
dGlvbiAmJiBiaXF1YWRQcm9jZXNzb3IoKSk7CisgICAgCisgICAgLy8gUmVjb21wdXRlIGZpbHRl
ciBjb2VmZmljaWVudHMgaWYgYW55IG9mIHRoZSBwYXJhbWV0ZXJzIGhhdmUgY2hhbmdlZC4KKyAg
ICAvLyBGSVhNRTogYXMgYW4gb3B0aW1pemF0aW9uLCBpbXBsZW1lbnQgYSB3YXkgdGhhdCBhIEJp
cXVhZCBvYmplY3QgY2FuIHNpbXBseSBjb3B5IGl0cyBpbnRlcm5hbCBmaWx0ZXIgY29lZmZpY2ll
bnRzIGZyb20gYW5vdGhlciBCaXF1YWQgb2JqZWN0LgorICAgIC8vIFRoZW4gcmUtZmFjdG9yIHRo
aXMgY29kZSB0byBvbmx5IHJ1biBmb3IgdGhlIGZpcnN0IEJpcXVhZERTUEtlcm5lbCBvZiBlYWNo
IEJpcXVhZFByb2Nlc3Nvci4KKworICAgIHVwZGF0ZUNvZWZmaWNpZW50c0lmTmVjZXNzYXJ5KHRy
dWUsIGZhbHNlKTsKKworICAgIG1fYmlxdWFkLnByb2Nlc3Moc291cmNlLCBkZXN0aW5hdGlvbiwg
ZnJhbWVzVG9Qcm9jZXNzKTsKK30KKwordm9pZCBCaXF1YWREU1BLZXJuZWw6OmdldEZyZXF1ZW5j
eVJlc3BvbnNlKGludCBuRnJlcXVlbmNpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIGZyZXF1ZW5jeUh6LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBtYWdSZXNwb25zZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCogcGhhc2VSZXNwb25zZSkK
K3sKKyAgICBib29sIGlzR29vZCA9IG5GcmVxdWVuY2llcyA+IDAgJiYgZnJlcXVlbmN5SHogJiYg
bWFnUmVzcG9uc2UgJiYgcGhhc2VSZXNwb25zZTsKKyAgICBBU1NFUlQoaXNHb29kKTsKKyAgICBp
ZiAoIWlzR29vZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPGZsb2F0PiBmcmVxdWVu
Y3kobkZyZXF1ZW5jaWVzKTsKKworICAgIGRvdWJsZSBueXF1aXN0ID0gdGhpcy0+bnlxdWlzdCgp
OworCisgICAgLy8gQ29udmVydCBmcm9tIGZyZXF1ZW5jeSBpbiBIeiB0byBub3JtYWxpemVkIGZy
ZXF1ZW5jeSAoMCAtPiAxKSwKKyAgICAvLyB3aXRoIDEgZXF1YWwgdG8gdGhlIE55cXVpc3QgZnJl
cXVlbmN5LgorICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbkZyZXF1ZW5jaWVzOyArK2spCisgICAg
ICAgIGZyZXF1ZW5jeVtrXSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZnJlcXVlbmN5SHpba10g
LyBueXF1aXN0KTsKKworICAgIC8vIFdlIHdhbnQgdG8gZ2V0IHRoZSBmaW5hbCB2YWx1ZXMgb2Yg
dGhlIGNvZWZmaWNpZW50cyBhbmQgY29tcHV0ZQorICAgIC8vIHRoZSByZXNwb25zZSBmcm9tIHRo
YXQgaW5zdGVhZCBvZiBzb21lIGludGVybWVkaWF0ZSBzbW9vdGhlZAorICAgIC8vIHNldC4gRm9y
Y2VmdWxseSB1cGRhdGUgdGhlIGNvZWZmaWNpZW50cyBldmVuIGlmIHRoZXkgYXJlIG5vdAorICAg
IC8vIGRpcnR5LgorCisgICAgdXBkYXRlQ29lZmZpY2llbnRzSWZOZWNlc3NhcnkoZmFsc2UsIHRy
dWUpOworCisgICAgbV9iaXF1YWQuZ2V0RnJlcXVlbmN5UmVzcG9uc2UobkZyZXF1ZW5jaWVzLCBm
cmVxdWVuY3kuZGF0YSgpLCBtYWdSZXNwb25zZSwgcGhhc2VSZXNwb25zZSk7Cit9CisKK2RvdWJs
ZSBCaXF1YWREU1BLZXJuZWw6OnRhaWxUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTWF4Qmlx
dWFkRGVsYXlUaW1lOworfQorCitkb3VibGUgQmlxdWFkRFNQS2VybmVsOjpsYXRlbmN5VGltZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmgJKHJldmlzaW9uIDExMTIzMykJKGZy
b20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmg6MTExMjMzKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCaXF1YWREU1BL
ZXJuZWxfaAorI2RlZmluZSBCaXF1YWREU1BLZXJuZWxfaAorCisjaW5jbHVkZSAiQXVkaW9EU1BL
ZXJuZWwuaCIKKyNpbmNsdWRlICJCaXF1YWQuaCIKKyNpbmNsdWRlICJCaXF1YWRQcm9jZXNzb3Iu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCaXF1YWRQcm9jZXNzb3I7CisKKy8v
IEJpcXVhZERTUEtlcm5lbCBpcyBhbiBBdWRpb0RTUEtlcm5lbCBhbmQgaXMgcmVzcG9uc2libGUg
Zm9yIGZpbHRlcmluZyBvbmUgY2hhbm5lbCBvZiBhIEJpcXVhZFByb2Nlc3NvciB1c2luZyBhIEJp
cXVhZCBvYmplY3QuCisKK2NsYXNzIEJpcXVhZERTUEtlcm5lbCA6IHB1YmxpYyBBdWRpb0RTUEtl
cm5lbCB7CitwdWJsaWM6ICAKKyAgICBCaXF1YWREU1BLZXJuZWwoQmlxdWFkUHJvY2Vzc29yKiBw
cm9jZXNzb3IpCisgICAgOiBBdWRpb0RTUEtlcm5lbChwcm9jZXNzb3IpCisgICAgeworICAgIH0K
KyAgICAKKyAgICAvLyBBdWRpb0RTUEtlcm5lbAorICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKGNv
bnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0LCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSB7IG1fYmlxdWFkLnJlc2V0KCk7IH0KKworICAgIC8v
IEdldCB0aGUgbWFnbml0dWRlIGFuZCBwaGFzZSByZXNwb25zZSBvZiB0aGUgZmlsdGVyIGF0IHRo
ZSBnaXZlbgorICAgIC8vIHNldCBvZiBmcmVxdWVuY2llcyAoaW4gSHopLiBUaGUgcGhhc2UgcmVz
cG9uc2UgaXMgaW4gcmFkaWFucy4KKyAgICB2b2lkIGdldEZyZXF1ZW5jeVJlc3BvbnNlKGludCBu
RnJlcXVlbmNpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCog
ZnJlcXVlbmN5SHosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCogbWFnUmVz
cG9uc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCogcGhhc2VSZXNwb25z
ZSk7CisKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFOworICAg
IHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJREU7CisKK3Byb3RlY3Rl
ZDoKKyAgICBCaXF1YWQgbV9iaXF1YWQ7CisgICAgQmlxdWFkUHJvY2Vzc29yKiBiaXF1YWRQcm9j
ZXNzb3IoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxCaXF1YWRQcm9jZXNzb3IqPihwcm9jZXNzb3Io
KSk7IH0KKworICAgIC8vIFRvIHByZXZlbnQgYXVkaW8gZ2xpdGNoZXMgd2hlbiBwYXJhbWV0ZXJz
IGFyZSBjaGFuZ2VkLAorICAgIC8vIGRlemlwcGVyaW5nIGlzIHVzZWQgdG8gc2xvd2x5IGNoYW5n
ZSB0aGUgcGFyYW1ldGVycy4KKyAgICAvLyB8dXNlU21vb3RoaW5nfCBpbXBsaWVzIHRoYXQgd2Ug
d2FudCB0byB1cGRhdGUgdXNpbmcgdGhlCisgICAgLy8gc21vb3RoZWQgdmFsdWVzLiBPdGhlcndp
c2UgdGhlIGZpbmFsIHRhcmdldCB2YWx1ZXMgYXJlCisgICAgLy8gdXNlZC4gSWYgfGZvcmNlVXBk
YXRlfCBpcyB0cnVlLCB3ZSB1cGRhdGUgdGhlIGNvZWZmaWNpZW50cyBldmVuCisgICAgLy8gaWYg
dGhleSBhcmUgbm90IGRpcnR5LiAoVXNlZCB3aGVuIGNvbXB1dGluZyB0aGUgZnJlcXVlbmN5Cisg
ICAgLy8gcmVzcG9uc2UuKQorICAgIHZvaWQgdXBkYXRlQ29lZmZpY2llbnRzSWZOZWNlc3Nhcnko
Ym9vbCB1c2VTbW9vdGhpbmcsIGJvb2wgZm9yY2VVcGRhdGUpOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQmlxdWFkRFNQS2VybmVsX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmNwcAko
cmV2aXNpb24gMTExMjMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0
ZXJOb2RlLmNwcDoxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0Jp
cXVhZEZpbHRlck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisj
aW5jbHVkZSAiQmlxdWFkRmlsdGVyTm9kZS5oIgorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0JpcXVhZEZpbHRlck5vZGU6OkJpcXVhZEZpbHRl
ck5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQorICAgIDogQXVk
aW9CYXNpY1Byb2Nlc3Nvck5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkKK3sKKyAgICAvLyBJbml0
aWFsbHkgc2V0dXAgYXMgbG93cGFzcyBmaWx0ZXIuCisgICAgbV9wcm9jZXNzb3IgPSBhZG9wdFB0
cihuZXcgQmlxdWFkUHJvY2Vzc29yKEJpcXVhZFByb2Nlc3Nvcjo6TG93UGFzcywgc2FtcGxlUmF0
ZSwgMSwgZmFsc2UpKTsKKyAgICBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMSgpLT5zZXRD
b250ZXh0KGNvbnRleHQpOworICAgIGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIyKCktPnNl
dENvbnRleHQoY29udGV4dCk7CisgICAgYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjMoKS0+
c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICBzZXROb2RlVHlwZShOb2RlVHlwZUJpcXVhZEZpbHRl
cik7Cit9CisKK3ZvaWQgQmlxdWFkRmlsdGVyTm9kZTo6c2V0VHlwZSh1bnNpZ25lZCBzaG9ydCB0
eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAodHlwZSA+IEJpcXVhZFByb2Nlc3Nv
cjo6QWxscGFzcykgeworICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIGJpcXVhZFByb2Nlc3NvcigpLT5zZXRUeXBlKHN0YXRp
Y19jYXN0PEJpcXVhZFByb2Nlc3Nvcjo6RmlsdGVyVHlwZT4odHlwZSkpOworfQorCisKK3ZvaWQg
QmlxdWFkRmlsdGVyTm9kZTo6Z2V0RnJlcXVlbmN5UmVzcG9uc2UoY29uc3QgRmxvYXQzMkFycmF5
KiBmcmVxdWVuY3lIeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRmxvYXQzMkFycmF5KiBtYWdSZXNwb25zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRmxvYXQzMkFycmF5KiBwaGFzZVJlc3BvbnNlKQoreworICAgIGlm
ICghZnJlcXVlbmN5SHogfHwgIW1hZ1Jlc3BvbnNlIHx8ICFwaGFzZVJlc3BvbnNlKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgaW50IG4gPSBzdGQ6Om1pbihmcmVxdWVuY3lIei0+bGVuZ3Ro
KCksCisgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1pbihtYWdSZXNwb25zZS0+bGVuZ3RoKCks
IHBoYXNlUmVzcG9uc2UtPmxlbmd0aCgpKSk7CisKKyAgICBpZiAobikgeworICAgICAgICBiaXF1
YWRQcm9jZXNzb3IoKS0+Z2V0RnJlcXVlbmN5UmVzcG9uc2UobiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jeUh6LT5kYXRhKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWdSZXNwb25zZS0+
ZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGhhc2VSZXNwb25zZS0+ZGF0YSgpKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaAkocmV2aXNpb24gMTEx
MjMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmg6MTEx
MjMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
QmlxdWFkRmlsdGVyTm9kZV9oCisjZGVmaW5lIEJpcXVhZEZpbHRlck5vZGVfaAorCisjaW5jbHVk
ZSAiQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaCIKKyNpbmNsdWRlICJCaXF1YWRQcm9jZXNzb3Iu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb1BhcmFtOworICAgIAorY2xh
c3MgQmlxdWFkRmlsdGVyTm9kZSA6IHB1YmxpYyBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZSB7Citw
dWJsaWM6CisgICAgLy8gVGhlc2UgbXVzdCBiZSBkZWZpbmVkIGFzIGluIHRoZSAuaWRsIGZpbGUg
YW5kIG11c3QgbWF0Y2ggdGhvc2UgaW4gdGhlIEJpcXVhZFByb2Nlc3NvciBjbGFzcy4KKyAgICBl
bnVtIHsKKyAgICAgICAgTE9XUEFTUyA9IDAsCisgICAgICAgIEhJR0hQQVNTID0gMSwKKyAgICAg
ICAgQkFORFBBU1MgPSAyLAorICAgICAgICBMT1dTSEVMRiA9IDMsCisgICAgICAgIEhJR0hTSEVM
RiA9IDQsCisgICAgICAgIFBFQUtJTkcgPSA1LAorICAgICAgICBOT1RDSCA9IDYsCisgICAgICAg
IEFMTFBBU1MgPSA3CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJpcXVhZEZpbHRl
ck5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJpcXVhZEZpbHRlck5vZGUoY29udGV4
dCwgc2FtcGxlUmF0ZSkpOyAgICAgIAorICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBzaG9ydCB0
eXBlKCkgeyByZXR1cm4gYmlxdWFkUHJvY2Vzc29yKCktPnR5cGUoKTsgfQorICAgIHZvaWQgc2V0
VHlwZSh1bnNpZ25lZCBzaG9ydCB0eXBlLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICBBdWRpb1Bh
cmFtKiBmcmVxdWVuY3koKSB7IHJldHVybiBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMSgp
OyB9CisgICAgQXVkaW9QYXJhbSogcSgpIHsgcmV0dXJuIGJpcXVhZFByb2Nlc3NvcigpLT5wYXJh
bWV0ZXIyKCk7IH0KKyAgICBBdWRpb1BhcmFtKiBnYWluKCkgeyByZXR1cm4gYmlxdWFkUHJvY2Vz
c29yKCktPnBhcmFtZXRlcjMoKTsgfQorCisgICAgLy8gR2V0IHRoZSBtYWduaXR1ZGUgYW5kIHBo
YXNlIHJlc3BvbnNlIG9mIHRoZSBmaWx0ZXIgYXQgdGhlIGdpdmVuCisgICAgLy8gc2V0IG9mIGZy
ZXF1ZW5jaWVzIChpbiBIeikuIFRoZSBwaGFzZSByZXNwb25zZSBpcyBpbiByYWRpYW5zLgorICAg
IHZvaWQgZ2V0RnJlcXVlbmN5UmVzcG9uc2UoY29uc3QgRmxvYXQzMkFycmF5KiBmcmVxdWVuY3lI
eiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0MzJBcnJheSogbWFnUmVzcG9u
c2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdDMyQXJyYXkqIHBoYXNlUmVz
cG9uc2UpOworCitwcml2YXRlOgorICAgIEJpcXVhZEZpbHRlck5vZGUoQXVkaW9Db250ZXh0Kiwg
ZmxvYXQgc2FtcGxlUmF0ZSk7CisKKyAgICBCaXF1YWRQcm9jZXNzb3IqIGJpcXVhZFByb2Nlc3Nv
cigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEJpcXVhZFByb2Nlc3Nvcio+KHByb2Nlc3NvcigpKTsg
fQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQmlxdWFkRmlsdGVy
Tm9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0JpcXVhZEZpbHRl
ck5vZGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QmlxdWFkRmlsdGVyTm9kZS5pZGwJKHJldmlzaW9uIDExMTIzMykJKGZyb20gU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5pZGw6MTExMjMzKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmlkbAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIGF1ZGlvIHsKKyAgICBpbnRlcmZh
Y2UgWworICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCisgICAgICAgIEpTR2VuZXJhdGVU
b0pTT2JqZWN0CisgICAgXSBCaXF1YWRGaWx0ZXJOb2RlIDogQXVkaW9Ob2RlIHsKKyAgICAgICAg
Ly8gRmlsdGVyIHR5cGUuCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IExPV1BBU1MgPSAw
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBISUdIUEFTUyA9IDE7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IEJBTkRQQVNTID0gMjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgTE9XU0hFTEYgPSAzOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBISUdIU0hF
TEYgPSA0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBQRUFLSU5HID0gNTsKKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTk9UQ0ggPSA2OworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBzaG9ydCBBTExQQVNTID0gNzsKKworICAgICAgICBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQg
dHlwZQorICAgICAgICAgICAgc2V0dGVyIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICAK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlvUGFyYW0gZnJlcXVlbmN5OyAvLyBpbiBI
ZXJ0egorICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9QYXJhbSBROyAvLyBRdWFsaXR5
IGZhY3RvcgorICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9QYXJhbSBnYWluOyAvLyBp
biBEZWNpYmVscworCisgICAgICAgIHZvaWQgZ2V0RnJlcXVlbmN5UmVzcG9uc2UoaW4gRmxvYXQz
MkFycmF5IGZyZXF1ZW5jeUh6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IEZsb2F0MzJBcnJheSBtYWdSZXNwb25zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbiBGbG9hdDMyQXJyYXkgcGhhc2VSZXNwb25zZSk7CisgICAgfTsKK30KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5j
cHAJKHJldmlzaW9uIDExMTIzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFk
UHJvY2Vzc29yLmNwcDoxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0JpcXVhZFByb2Nlc3Nvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQor
CisjaW5jbHVkZSAiQmlxdWFkUHJvY2Vzc29yLmgiCisKKyNpbmNsdWRlICJCaXF1YWREU1BLZXJu
ZWwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorQmlxdWFkUHJvY2Vzc29yOjpCaXF1
YWRQcm9jZXNzb3IoZmxvYXQgc2FtcGxlUmF0ZSwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGJv
b2wgYXV0b0luaXRpYWxpemUpCisgICAgOiBBdWRpb0RTUEtlcm5lbFByb2Nlc3NvcihzYW1wbGVS
YXRlLCBudW1iZXJPZkNoYW5uZWxzKQorICAgICwgbV90eXBlKExvd1Bhc3MpCisgICAgLCBtX3Bh
cmFtZXRlcjEoMCkKKyAgICAsIG1fcGFyYW1ldGVyMigwKQorICAgICwgbV9wYXJhbWV0ZXIzKDAp
CisgICAgLCBtX2ZpbHRlckNvZWZmaWNpZW50c0RpcnR5KHRydWUpCit7CisgICAgZG91YmxlIG55
cXVpc3QgPSAwLjUgKiB0aGlzLT5zYW1wbGVSYXRlKCk7CisKKyAgICAvLyBDcmVhdGUgcGFyYW1l
dGVycyBmb3IgQmlxdWFkRmlsdGVyTm9kZS4KKyAgICBtX3BhcmFtZXRlcjEgPSBBdWRpb1BhcmFt
OjpjcmVhdGUoImZyZXF1ZW5jeSIsIDM1MC4wLCAxMC4wLCBueXF1aXN0KTsKKyAgICBtX3BhcmFt
ZXRlcjIgPSBBdWRpb1BhcmFtOjpjcmVhdGUoIlEiLCAxLCAwLjAwMDEsIDEwMDAuMCk7CisgICAg
bV9wYXJhbWV0ZXIzID0gQXVkaW9QYXJhbTo6Y3JlYXRlKCJnYWluIiwgMC4wLCAtNDAsIDQwKTsK
KworICAgIGlmIChhdXRvSW5pdGlhbGl6ZSkKKyAgICAgICAgaW5pdGlhbGl6ZSgpOworfQorCitC
aXF1YWRQcm9jZXNzb3I6OkJpcXVhZFByb2Nlc3NvcihGaWx0ZXJUeXBlIHR5cGUsIGZsb2F0IHNh
bXBsZVJhdGUsIHNpemVfdCBudW1iZXJPZkNoYW5uZWxzLCBib29sIGF1dG9Jbml0aWFsaXplKQor
ICAgIDogQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3Ioc2FtcGxlUmF0ZSwgbnVtYmVyT2ZDaGFubmVs
cykKKyAgICAsIG1fdHlwZSh0eXBlKQorICAgICwgbV9wYXJhbWV0ZXIxKDApCisgICAgLCBtX3Bh
cmFtZXRlcjIoMCkKKyAgICAsIG1fcGFyYW1ldGVyMygwKQorICAgICwgbV9maWx0ZXJDb2VmZmlj
aWVudHNEaXJ0eSh0cnVlKQoreworICAgIGRvdWJsZSBueXF1aXN0ID0gMC41ICogdGhpcy0+c2Ft
cGxlUmF0ZSgpOworICAgIAorICAgIC8vIEhhbmRsZSB0aGUgZGVwcmVjYXRlZCBMb3dQYXNzMkZp
bHRlck5vZGUgYW5kIEhpZ2hQYXNzMkZpbHRlck5vZGUuCisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgLy8gSGlnaHBhc3MgYW5kIGxvd3Bhc3Mgc2hhcmUgdGhlIHNhbWUgcGFyYW1ldGVycyBhbmQg
b25seSBkaWZmZXIgaW4gZmlsdGVyIHR5cGUuCisgICAgY2FzZSBMb3dQYXNzOgorICAgIGNhc2Ug
SGlnaFBhc3M6CisgICAgICAgIG1fcGFyYW1ldGVyMSA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgiZnJl
cXVlbmN5IiwgMzUwLjAsIDIwLjAsIG55cXVpc3QpOworICAgICAgICBtX3BhcmFtZXRlcjIgPSBB
dWRpb1BhcmFtOjpjcmVhdGUoInJlc29uYW5jZSIsIDAuMCwgLTIwLjAsIDIwLjApOworICAgICAg
ICBtX3BhcmFtZXRlcjMgPSBBdWRpb1BhcmFtOjpjcmVhdGUoInVudXNlZCIsIDAuMCwgMC4wLCAx
LjApOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KKworICAgIGlmIChhdXRvSW5pdGlhbGl6ZSkKKyAgICAgICAgaW5p
dGlhbGl6ZSgpOworfQorCitCaXF1YWRQcm9jZXNzb3I6On5CaXF1YWRQcm9jZXNzb3IoKQorewor
ICAgIGlmIChpc0luaXRpYWxpemVkKCkpCisgICAgICAgIHVuaW5pdGlhbGl6ZSgpOworfQorCitQ
YXNzT3duUHRyPEF1ZGlvRFNQS2VybmVsPiBCaXF1YWRQcm9jZXNzb3I6OmNyZWF0ZUtlcm5lbCgp
Cit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBCaXF1YWREU1BLZXJuZWwodGhpcykpOworfQor
Cit2b2lkIEJpcXVhZFByb2Nlc3Nvcjo6Y2hlY2tGb3JEaXJ0eUNvZWZmaWNpZW50cygpCit7Cisg
ICAgLy8gRGVhbCB3aXRoIHNtb290aGluZyAvIGRlLXppcHBlcmluZy4gU3RhcnQgb3V0IGFzc3Vt
aW5nIGZpbHRlciBwYXJhbWV0ZXJzIGFyZSBub3QgY2hhbmdpbmcuCisKKyAgICAvLyBUaGUgQmlx
dWFkRFNQS2VybmVsIG9iamVjdHMgcmVseSBvbiB0aGlzIHZhbHVlIHRvIHNlZSBpZiB0aGV5IG5l
ZWQgdG8gcmUtY29tcHV0ZSB0aGVpciBpbnRlcm5hbCBmaWx0ZXIgY29lZmZpY2llbnRzLgorICAg
IG1fZmlsdGVyQ29lZmZpY2llbnRzRGlydHkgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAobV9oYXNK
dXN0UmVzZXQpIHsKKyAgICAgICAgLy8gU25hcCB0byBleGFjdCB2YWx1ZXMgZmlyc3QgdGltZSBh
ZnRlciByZXNldCwgdGhlbiBzbW9vdGggZm9yIHN1YnNlcXVlbnQgY2hhbmdlcy4KKyAgICAgICAg
bV9wYXJhbWV0ZXIxLT5yZXNldFNtb290aGVkVmFsdWUoKTsKKyAgICAgICAgbV9wYXJhbWV0ZXIy
LT5yZXNldFNtb290aGVkVmFsdWUoKTsKKyAgICAgICAgbV9wYXJhbWV0ZXIzLT5yZXNldFNtb290
aGVkVmFsdWUoKTsKKyAgICAgICAgbV9maWx0ZXJDb2VmZmljaWVudHNEaXJ0eSA9IHRydWU7Cisg
ICAgICAgIG1faGFzSnVzdFJlc2V0ID0gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
U21vb3RoIGFsbCBvZiB0aGUgZmlsdGVyIHBhcmFtZXRlcnMuIElmIHRoZXkgaGF2ZW4ndCB5ZXQg
Y29udmVyZ2VkIHRvIHRoZWlyIHRhcmdldCB2YWx1ZSB0aGVuIG1hcmsgY29lZmZpY2llbnRzIGFz
IGRpcnR5LgorICAgICAgICBib29sIGlzU3RhYmxlMSA9IG1fcGFyYW1ldGVyMS0+c21vb3RoKCk7
CisgICAgICAgIGJvb2wgaXNTdGFibGUyID0gbV9wYXJhbWV0ZXIyLT5zbW9vdGgoKTsKKyAgICAg
ICAgYm9vbCBpc1N0YWJsZTMgPSBtX3BhcmFtZXRlcjMtPnNtb290aCgpOworICAgICAgICBpZiAo
IShpc1N0YWJsZTEgJiYgaXNTdGFibGUyICYmIGlzU3RhYmxlMykpCisgICAgICAgICAgICBtX2Zp
bHRlckNvZWZmaWNpZW50c0RpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQmlxdWFkUHJv
Y2Vzc29yOjpwcm9jZXNzKGNvbnN0IEF1ZGlvQnVzKiBzb3VyY2UsIEF1ZGlvQnVzKiBkZXN0aW5h
dGlvbiwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQo
KSkgeworICAgICAgICBkZXN0aW5hdGlvbi0+emVybygpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgICAgICAKKyAgICBjaGVja0ZvckRpcnR5Q29lZmZpY2llbnRzKCk7CisgICAgICAgICAg
ICAKKyAgICAvLyBGb3IgZWFjaCBjaGFubmVsIG9mIG91ciBpbnB1dCwgcHJvY2VzcyB1c2luZyB0
aGUgY29ycmVzcG9uZGluZyBCaXF1YWREU1BLZXJuZWwgaW50byB0aGUgb3V0cHV0IGNoYW5uZWwu
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fa2VybmVscy5zaXplKCk7ICsraSkKKyAg
ICAgICAgbV9rZXJuZWxzW2ldLT5wcm9jZXNzKHNvdXJjZS0+Y2hhbm5lbChpKS0+ZGF0YSgpLCBk
ZXN0aW5hdGlvbi0+Y2hhbm5lbChpKS0+bXV0YWJsZURhdGEoKSwgZnJhbWVzVG9Qcm9jZXNzKTsK
K30KKwordm9pZCBCaXF1YWRQcm9jZXNzb3I6OnNldFR5cGUoRmlsdGVyVHlwZSB0eXBlKQorewor
ICAgIGlmICh0eXBlICE9IG1fdHlwZSkgeworICAgICAgICBtX3R5cGUgPSB0eXBlOworICAgICAg
ICByZXNldCgpOyAvLyBUaGUgZmlsdGVyIHN0YXRlIG11c3QgYmUgcmVzZXQgb25seSBpZiB0aGUg
dHlwZSBoYXMgY2hhbmdlZC4KKyAgICB9Cit9CisKK3ZvaWQgQmlxdWFkUHJvY2Vzc29yOjpnZXRG
cmVxdWVuY3lSZXNwb25zZShpbnQgbkZyZXF1ZW5jaWVzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBmcmVxdWVuY3lIeiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCogbWFnUmVzcG9uc2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIHBoYXNlUmVz
cG9uc2UpCit7CisgICAgLy8gQ29tcHV0ZSB0aGUgZnJlcXVlbmN5IHJlc3BvbnNlIG9uIGEgc2Vw
YXJhdGUgdGVtcG9yYXJ5IGtlcm5lbAorICAgIC8vIHRvIGF2b2lkIGludGVyZmVyaW5nIHdpdGgg
dGhlIHByb2Nlc3NpbmcgcnVubmluZyBpbiB0aGUgYXVkaW8KKyAgICAvLyB0aHJlYWQgb24gdGhl
IG1haW4ga2VybmVscy4KKyAgICAKKyAgICBPd25QdHI8QmlxdWFkRFNQS2VybmVsPiByZXNwb25z
ZUtlcm5lbCA9IGFkb3B0UHRyKG5ldyBCaXF1YWREU1BLZXJuZWwodGhpcykpOworCisgICAgcmVz
cG9uc2VLZXJuZWwtPmdldEZyZXF1ZW5jeVJlc3BvbnNlKG5GcmVxdWVuY2llcywgZnJlcXVlbmN5
SHosIG1hZ1Jlc3BvbnNlLCBwaGFzZVJlc3BvbnNlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuaAkocmV2aXNpb24gMTEx
MjMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuaDoxMTEy
MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJp
cXVhZFByb2Nlc3Nvcl9oCisjZGVmaW5lIEJpcXVhZFByb2Nlc3Nvcl9oCisKKyNpbmNsdWRlICJB
dWRpb0RTUEtlcm5lbC5oIgorI2luY2x1ZGUgIkF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmgiCisj
aW5jbHVkZSAiQXVkaW9Ob2RlLmgiCisjaW5jbHVkZSAiQXVkaW9QYXJhbS5oIgorI2luY2x1ZGUg
IkJpcXVhZC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisvLyBCaXF1YWRQcm9jZXNzb3IgaXMgYW4gQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3Igd2hp
Y2ggdXNlcyBCaXF1YWQgb2JqZWN0cyB0byBpbXBsZW1lbnQgc2V2ZXJhbCBjb21tb24gZmlsdGVy
cy4KKworY2xhc3MgQmlxdWFkUHJvY2Vzc29yIDogcHVibGljIEF1ZGlvRFNQS2VybmVsUHJvY2Vz
c29yIHsKK3B1YmxpYzoKKyAgICBlbnVtIEZpbHRlclR5cGUgeworICAgICAgICBMb3dQYXNzID0g
MCwKKyAgICAgICAgSGlnaFBhc3MgPSAxLAorICAgICAgICBCYW5kUGFzcyA9IDIsCisgICAgICAg
IExvd1NoZWxmID0gMywKKyAgICAgICAgSGlnaFNoZWxmID0gNCwKKyAgICAgICAgUGVha2luZyA9
IDUsCisgICAgICAgIE5vdGNoID0gNiwKKyAgICAgICAgQWxscGFzcyA9IDcKKyAgICB9OworCisg
ICAgQmlxdWFkUHJvY2Vzc29yKGZsb2F0IHNhbXBsZVJhdGUsIHNpemVfdCBudW1iZXJPZkNoYW5u
ZWxzLCBib29sIGF1dG9Jbml0aWFsaXplKTsKKworICAgIC8vIE9sZCBjb25zdHJ1Y3RvciB1c2Vk
IGJ5IGRlcHJlY2F0ZWQgTG93UGFzczJGaWx0ZXJOb2RlIGFuZCBIaWdoUGFzczJGaWx0ZXJOb2Rl
CisgICAgQmlxdWFkUHJvY2Vzc29yKEZpbHRlclR5cGUsIGZsb2F0IHNhbXBsZVJhdGUsIHNpemVf
dCBudW1iZXJPZkNoYW5uZWxzLCBib29sIGF1dG9Jbml0aWFsaXplID0gdHJ1ZSk7CisKKyAgICB2
aXJ0dWFsIH5CaXF1YWRQcm9jZXNzb3IoKTsKKyAgICAKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8
QXVkaW9EU1BLZXJuZWw+IGNyZWF0ZUtlcm5lbCgpOworICAgICAgICAKKyAgICB2aXJ0dWFsIHZv
aWQgcHJvY2Vzcyhjb25zdCBBdWRpb0J1cyogc291cmNlLCBBdWRpb0J1cyogZGVzdGluYXRpb24s
IHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOworCisgICAgLy8gR2V0IHRoZSBtYWduaXR1ZGUgYW5k
IHBoYXNlIHJlc3BvbnNlIG9mIHRoZSBmaWx0ZXIgYXQgdGhlIGdpdmVuCisgICAgLy8gc2V0IG9m
IGZyZXF1ZW5jaWVzIChpbiBIeikuIFRoZSBwaGFzZSByZXNwb25zZSBpcyBpbiByYWRpYW5zLgor
ICAgIHZvaWQgZ2V0RnJlcXVlbmN5UmVzcG9uc2UoaW50IG5GcmVxdWVuY2llcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBmcmVxdWVuY3lIeiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBtYWdSZXNwb25zZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZsb2F0KiBwaGFzZVJlc3BvbnNlKTsKKworICAgIHZvaWQgY2hlY2tG
b3JEaXJ0eUNvZWZmaWNpZW50cygpOworICAgIAorICAgIGJvb2wgZmlsdGVyQ29lZmZpY2llbnRz
RGlydHkoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlckNvZWZmaWNpZW50c0RpcnR5OyB9CisKKyAg
ICBBdWRpb1BhcmFtKiBwYXJhbWV0ZXIxKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXIxLmdldCgpOyB9
CisgICAgQXVkaW9QYXJhbSogcGFyYW1ldGVyMigpIHsgcmV0dXJuIG1fcGFyYW1ldGVyMi5nZXQo
KTsgfQorICAgIEF1ZGlvUGFyYW0qIHBhcmFtZXRlcjMoKSB7IHJldHVybiBtX3BhcmFtZXRlcjMu
Z2V0KCk7IH0KKworICAgIEZpbHRlclR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsg
fQorICAgIHZvaWQgc2V0VHlwZShGaWx0ZXJUeXBlKTsKKworcHJpdmF0ZToKKyAgICBGaWx0ZXJU
eXBlIG1fdHlwZTsKKworICAgIFJlZlB0cjxBdWRpb1BhcmFtPiBtX3BhcmFtZXRlcjE7CisgICAg
UmVmUHRyPEF1ZGlvUGFyYW0+IG1fcGFyYW1ldGVyMjsKKyAgICBSZWZQdHI8QXVkaW9QYXJhbT4g
bV9wYXJhbWV0ZXIzOworCisgICAgLy8gc28gRFNQIGtlcm5lbHMga25vdyB3aGVuIHRvIHJlLWNv
bXB1dGUgY29lZmZpY2llbnRzCisgICAgYm9vbCBtX2ZpbHRlckNvZWZmaWNpZW50c0RpcnR5Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQmlxdWFkUHJvY2Vzc29y
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Db252b2x2
ZXJOb2RlLmNwcAkocmV2aXNpb24gMTExMjMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9Db252b2x2ZXJOb2RlLmNwcDoxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJ
TykKKworI2luY2x1ZGUgIkNvbnZvbHZlck5vZGUuaCIKKworI2luY2x1ZGUgIkF1ZGlvQnVmZmVy
LmgiCisjaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCisjaW5jbHVkZSAiQXVkaW9Ob2RlSW5wdXQu
aCIKKyNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKKyNpbmNsdWRlICJSZXZlcmIuaCIKKyNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCisvLyBOb3RlIGFib3V0IGVtcGlyaWNhbCB0dW5p
bmc6CisvLyBUaGUgbWF4aW11bSBGRlQgc2l6ZSBhZmZlY3RzIHJldmVyYiBwZXJmb3JtYW5jZSBh
bmQgYWNjdXJhY3kuCisvLyBJZiB0aGUgcmV2ZXJiIGlzIHNpbmdsZS10aHJlYWRlZCBhbmQgcHJv
Y2Vzc2VzIGVudGlyZWx5IGluIHRoZSByZWFsLXRpbWUgYXVkaW8gdGhyZWFkLAorLy8gaXQncyBp
bXBvcnRhbnQgbm90IHRvIG1ha2UgdGhpcyB0b28gaGlnaC4gIEluIHRoaXMgY2FzZSA4MTkyIGlz
IGEgZ29vZCB2YWx1ZS4KKy8vIEJ1dCwgdGhlIFJldmVyYiBvYmplY3QgaXMgbXVsdGktdGhyZWFk
ZWQsIHNvIHdlIHdhbnQgdGhpcyBhcyBoaWdoIGFzIHBvc3NpYmxlIHdpdGhvdXQgbG9zaW5nIHRv
byBtdWNoIGFjY3VyYWN5LgorLy8gVmVyeSBsYXJnZSBGRlRzIHdpbGwgaGF2ZSB3b3JzZSBwaGFz
ZSBlcnJvcnMuIEdpdmVuIHRoZXNlIGNvbnN0cmFpbnRzIDMyNzY4IGlzIGEgZ29vZCBjb21wcm9t
aXNlLgorY29uc3Qgc2l6ZV90IE1heEZGVFNpemUgPSAzMjc2ODsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitDb252b2x2ZXJOb2RlOjpDb252b2x2ZXJOb2RlKEF1ZGlvQ29udGV4dCogY29udGV4
dCwgZmxvYXQgc2FtcGxlUmF0ZSkKKyAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRl
KQorICAgICwgbV9ub3JtYWxpemUodHJ1ZSkKK3sKKyAgICBhZGRJbnB1dChhZG9wdFB0cihuZXcg
QXVkaW9Ob2RlSW5wdXQodGhpcykpKTsKKyAgICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1ZGlv
Tm9kZU91dHB1dCh0aGlzLCAyKSkpOworICAgIAorICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlQ29u
dm9sdmVyKTsKKyAgICAKKyAgICBpbml0aWFsaXplKCk7Cit9CisKK0NvbnZvbHZlck5vZGU6On5D
b252b2x2ZXJOb2RlKCkKK3sKKyAgICB1bmluaXRpYWxpemUoKTsKK30KKwordm9pZCBDb252b2x2
ZXJOb2RlOjpwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAgQXVkaW9CdXMq
IG91dHB1dEJ1cyA9IG91dHB1dCgwKS0+YnVzKCk7CisgICAgQVNTRVJUKG91dHB1dEJ1cyk7CisK
KyAgICAvLyBTeW5jaHJvbml6ZSB3aXRoIHBvc3NpYmxlIGR5bmFtaWMgY2hhbmdlcyB0byB0aGUg
aW1wdWxzZSByZXNwb25zZS4KKyAgICBpZiAobV9wcm9jZXNzTG9jay50cnlMb2NrKCkpIHsKKyAg
ICAgICAgaWYgKCFpc0luaXRpYWxpemVkKCkgfHwgIW1fcmV2ZXJiLmdldCgpKQorICAgICAgICAg
ICAgb3V0cHV0QnVzLT56ZXJvKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gUHJv
Y2VzcyB1c2luZyB0aGUgY29udm9sdXRpb24gZW5naW5lLgorICAgICAgICAgICAgLy8gTm90ZSB0
aGF0IHdlIGNhbiBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbm90aGluZyBpcyBjb25uZWN0ZWQgdG8g
dGhlIGlucHV0LCBpbiB3aGljaCBjYXNlIHdlJ2xsIGp1c3QgZmVlZCBzaWxlbmNlIGludG8gdGhl
IGNvbnZvbHZlci4KKyAgICAgICAgICAgIC8vIEZJWE1FOiAgSWYgd2Ugd2FudGVkIHRvIGdldCBm
YW5jeSB3ZSBjb3VsZCB0cnkgdG8gZmFjdG9yIGluIHRoZSAndGFpbCB0aW1lJyBhbmQgc3RvcCBw
cm9jZXNzaW5nIG9uY2UgdGhlIHRhaWwgZGllcyBkb3duIGlmCisgICAgICAgICAgICAvLyB3ZSBr
ZWVwIGdldHRpbmcgZmVkIHNpbGVuY2UuCisgICAgICAgICAgICBtX3JldmVyYi0+cHJvY2Vzcyhp
bnB1dCgwKS0+YnVzKCksIG91dHB1dEJ1cywgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgbV9wcm9jZXNzTG9jay51bmxvY2soKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBUb28gYmFkIC0gdGhlIHRyeUxvY2soKSBmYWlsZWQuICBXZSBtdXN0IGJlIGlu
IHRoZSBtaWRkbGUgb2Ygc2V0dGluZyBhIG5ldyBpbXB1bHNlIHJlc3BvbnNlLgorICAgICAgICBv
dXRwdXRCdXMtPnplcm8oKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udm9sdmVyTm9kZTo6cmVzZXQo
KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Byb2Nlc3NMb2NrKTsKKyAgICBpZiAobV9y
ZXZlcmIuZ2V0KCkpCisgICAgICAgIG1fcmV2ZXJiLT5yZXNldCgpOworfQorCit2b2lkIENvbnZv
bHZlck5vZGU6OmluaXRpYWxpemUoKQoreworICAgIGlmIChpc0luaXRpYWxpemVkKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7Cit9CisK
K3ZvaWQgQ29udm9sdmVyTm9kZTo6dW5pbml0aWFsaXplKCkKK3sKKyAgICBpZiAoIWlzSW5pdGlh
bGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZXZlcmIuY2xlYXIoKTsKKyAgICBB
dWRpb05vZGU6OnVuaW5pdGlhbGl6ZSgpOworfQorCit2b2lkIENvbnZvbHZlck5vZGU6OnNldEJ1
ZmZlcihBdWRpb0J1ZmZlciogYnVmZmVyKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgCisgICAgQVNTRVJUKGJ1ZmZlcik7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMgPSBidWZmZXItPm51bWJlck9m
Q2hhbm5lbHMoKTsKKyAgICBzaXplX3QgYnVmZmVyTGVuZ3RoID0gYnVmZmVyLT5sZW5ndGgoKTsK
KworICAgIC8vIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIHVwIHRvIGZvdXIg
Y2hhbm5lbCBpbXB1bHNlIHJlc3BvbnNlcywgd2hpY2ggYXJlIGludGVycHJldGVkIGFzIHRydWUt
c3RlcmVvIChzZWUgUmV2ZXJiIGNsYXNzKS4KKyAgICBib29sIGlzQnVmZmVyR29vZCA9IG51bWJl
ck9mQ2hhbm5lbHMgPiAwICYmIG51bWJlck9mQ2hhbm5lbHMgPD0gNCAmJiBidWZmZXJMZW5ndGg7
CisgICAgQVNTRVJUKGlzQnVmZmVyR29vZCk7CisgICAgaWYgKCFpc0J1ZmZlckdvb2QpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIFdyYXAgdGhlIEF1ZGlvQnVmZmVyIGJ5IGFuIEF1ZGlvQnVz
LiBJdCdzIGFuIGVmZmljaWVudCBwb2ludGVyIHNldCBhbmQgbm90IGEgbWVtY3B5KCkuCisgICAg
Ly8gVGhpcyBtZW1vcnkgaXMgc2ltcGx5IHVzZWQgaW4gdGhlIFJldmVyYiBjb25zdHJ1Y3RvciBh
bmQgbm8gcmVmZXJlbmNlIHRvIGl0IGlzIGtlcHQgZm9yIGxhdGVyIHVzZSBpbiB0aGF0IGNsYXNz
LgorICAgIEF1ZGlvQnVzIGJ1ZmZlckJ1cyhudW1iZXJPZkNoYW5uZWxzLCBidWZmZXJMZW5ndGgs
IGZhbHNlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsg
KytpKQorICAgICAgICBidWZmZXJCdXMuc2V0Q2hhbm5lbE1lbW9yeShpLCBidWZmZXItPmdldENo
YW5uZWxEYXRhKGkpLT5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7CisKKyAgICBidWZmZXJCdXMuc2V0
U2FtcGxlUmF0ZShidWZmZXItPnNhbXBsZVJhdGUoKSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIHJl
dmVyYiB3aXRoIHRoZSBnaXZlbiBpbXB1bHNlIHJlc3BvbnNlLgorICAgIGJvb2wgdXNlQmFja2dy
b3VuZFRocmVhZHMgPSAhY29udGV4dCgpLT5pc09mZmxpbmVDb250ZXh0KCk7CisgICAgT3duUHRy
PFJldmVyYj4gcmV2ZXJiID0gYWRvcHRQdHIobmV3IFJldmVyYigmYnVmZmVyQnVzLCBBdWRpb05v
ZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXMsIE1heEZGVFNpemUsIDIsIHVzZUJhY2tncm91bmRU
aHJlYWRzLCBtX25vcm1hbGl6ZSkpOworCisgICAgeworICAgICAgICAvLyBTeW5jaHJvbml6ZSB3
aXRoIHByb2Nlc3MoKS4KKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcHJvY2Vzc0xvY2sp
OworICAgICAgICBtX3JldmVyYiA9IHJldmVyYi5yZWxlYXNlKCk7CisgICAgICAgIG1fYnVmZmVy
ID0gYnVmZmVyOworICAgIH0KK30KKworQXVkaW9CdWZmZXIqIENvbnZvbHZlck5vZGU6OmJ1ZmZl
cigpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICByZXR1cm4gbV9idWZmZXIu
Z2V0KCk7Cit9CisKK2RvdWJsZSBDb252b2x2ZXJOb2RlOjp0YWlsVGltZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcmV2ZXJiID8gbV9yZXZlcmItPmltcHVsc2VSZXNwb25zZUxlbmd0aCgpIC8g
c3RhdGljX2Nhc3Q8ZG91YmxlPihzYW1wbGVSYXRlKCkpIDogMDsKK30KKworZG91YmxlIENvbnZv
bHZlck5vZGU6OmxhdGVuY3lUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZXZlcmIgPyBt
X3JldmVyYi0+bGF0ZW5jeUZyYW1lcygpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihzYW1wbGVSYXRl
KCkpIDogMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQ29udm9s
dmVyTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
Q29udm9sdmVyTm9kZS5oCShyZXZpc2lvbiAxMTEyMzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0NvbnZvbHZlck5vZGUuaDoxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBDb252b2x2ZXJOb2RlX2gKKyNkZWZpbmUgQ29udm9sdmVy
Tm9kZV9oCisKKyNpbmNsdWRlICJBdWRpb05vZGUuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb0J1ZmZlcjsKK2NsYXNzIFJldmVyYjsK
KyAgICAKK2NsYXNzIENvbnZvbHZlck5vZGUgOiBwdWJsaWMgQXVkaW9Ob2RlIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb252b2x2ZXJOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0
KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDb252b2x2ZXJOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpKTsgICAgICAKKyAgICB9
CisgICAgCisgICAgdmlydHVhbCB+Q29udm9sdmVyTm9kZSgpOworICAgIAorICAgIC8vIEF1ZGlv
Tm9kZQorICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwor
ICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKCk7
CisgICAgdmlydHVhbCB2b2lkIHVuaW5pdGlhbGl6ZSgpOworCisgICAgLy8gSW1wdWxzZSByZXNw
b25zZXMKKyAgICB2b2lkIHNldEJ1ZmZlcihBdWRpb0J1ZmZlciopOworICAgIEF1ZGlvQnVmZmVy
KiBidWZmZXIoKTsKKworICAgIGJvb2wgbm9ybWFsaXplKCkgY29uc3QgeyByZXR1cm4gbV9ub3Jt
YWxpemU7IH0KKyAgICB2b2lkIHNldE5vcm1hbGl6ZShib29sIG5vcm1hbGl6ZSkgeyBtX25vcm1h
bGl6ZSA9IG5vcm1hbGl6ZTsgfQorCitwcml2YXRlOgorICAgIENvbnZvbHZlck5vZGUoQXVkaW9D
b250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7CisKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGlt
ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29u
c3QgT1ZFUlJJREU7CisKKyAgICBPd25QdHI8UmV2ZXJiPiBtX3JldmVyYjsKKyAgICBSZWZQdHI8
QXVkaW9CdWZmZXI+IG1fYnVmZmVyOworCisgICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgZHluYW1p
YyBjaGFuZ2VzIHRvIHRoZSBjb252b2x1dGlvbiBpbXB1bHNlIHJlc3BvbnNlIHdpdGggcHJvY2Vz
cygpLgorICAgIG11dGFibGUgTXV0ZXggbV9wcm9jZXNzTG9jazsKKworICAgIC8vIE5vcm1hbGl6
ZSB0aGUgaW1wdWxzZSByZXNwb25zZSBvciBub3QuIE11c3QgZGVmYXVsdCB0byB0cnVlLgorICAg
IGJvb2wgbV9ub3JtYWxpemU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBDb252b2x2ZXJOb2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQ29udm9sdmVyTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmlkbAkocmV2aXNpb24gMTExMjMzKQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmlkbDoxMTEyMzMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgYXVkaW8geworICAgIC8vIEEg
bGluZWFyIGNvbnZvbHV0aW9uIGVmZmVjdAorICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRp
dGlvbmFsPVdFQl9BVURJTywKKyAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKKyAgICBdIENv
bnZvbHZlck5vZGUgOiBBdWRpb05vZGUgeworICAgICAgICBhdHRyaWJ1dGUgW0pTQ3VzdG9tU2V0
dGVyXSBBdWRpb0J1ZmZlciBidWZmZXI7CisgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuIG5vcm1h
bGl6ZTsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9E
T01XaW5kb3dXZWJBdWRpby5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9ET01XaW5kb3dXZWJBdWRpby5pZGwJKHJldmlzaW9uIDExMTIzMykJKGZyb20g
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRE9NV2luZG93V2ViQXVkaW8uaWRsOjExMTIzMykKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRE9NV2luZG93V2ViQXVkaW8uaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
bW9kdWxlIHdpbmRvdyB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1X
RUJfQVVESU8sCisgICAgICAgIFN1cHBsZW1lbnRhbD1ET01XaW5kb3cKKyAgICBdIERPTVdpbmRv
d1dlYkF1ZGlvIHsKKyNpZiAhZGVmaW5lZChMQU5HVUFHRV9DUFApIHx8ICFMQU5HVUFHRV9DUFAK
KyAgICAgICAgYXR0cmlidXRlIFtKU0N1c3RvbUdldHRlciwgVjhFbmFibGVkQXRSdW50aW1lXSBB
dWRpb0NvbnRleHRDb25zdHJ1Y3RvciB3ZWJraXRBdWRpb0NvbnRleHQ7CisgICAgICAgIGF0dHJp
YnV0ZSBBdWRpb1Bhbm5lck5vZGVDb25zdHJ1Y3RvciB3ZWJraXRBdWRpb1Bhbm5lck5vZGU7Cisg
ICAgICAgIGF0dHJpYnV0ZSBBdWRpb1Byb2Nlc3NpbmdFdmVudENvbnN0cnVjdG9yIEF1ZGlvUHJv
Y2Vzc2luZ0V2ZW50OworICAgICAgICBhdHRyaWJ1dGUgT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2
ZW50Q29uc3RydWN0b3IgT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50OworI2VuZGlmCisgICAg
fTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWZhdWx0QXVk
aW9EZXN0aW5hdGlvbk5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAkocmV2aXNpb24gMTEx
MjMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlv
bk5vZGUuY3BwOjExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVm
YXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9B
VURJTykKKworI2luY2x1ZGUgIkRlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgorCisjaW5j
bHVkZSAiTG9nZ2luZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitEZWZhdWx0QXVk
aW9EZXN0aW5hdGlvbk5vZGU6OkRlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZShBdWRpb0NvbnRl
eHQqIGNvbnRleHQpCisgICAgOiBBdWRpb0Rlc3RpbmF0aW9uTm9kZShjb250ZXh0LCBBdWRpb0Rl
c3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJhdGUoKSkKK3sKK30KKworRGVmYXVsdEF1ZGlvRGVz
dGluYXRpb25Ob2RlOjp+RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlKCkKK3sKKyAgICB1bmlu
aXRpYWxpemUoKTsKK30KKwordm9pZCBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGU6OmluaXRp
YWxpemUoKQoreworICAgIGlmIChpc0luaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGZsb2F0IGhhcmR3YXJlU2FtcGxlUmF0ZSA9IEF1ZGlvRGVzdGluYXRpb246OmhhcmR3YXJl
U2FtcGxlUmF0ZSgpOworICAgIExPRyhXZWJBdWRpbywgIj4+Pj4gaGFyZHdhcmVTYW1wbGVSYXRl
ID0gJWZcbiIsIGhhcmR3YXJlU2FtcGxlUmF0ZSk7CisgICAgCisgICAgbV9kZXN0aW5hdGlvbiA9
IEF1ZGlvRGVzdGluYXRpb246OmNyZWF0ZSgqdGhpcywgaGFyZHdhcmVTYW1wbGVSYXRlKTsKKyAg
ICAKKyAgICBBdWRpb05vZGU6OmluaXRpYWxpemUoKTsKK30KKwordm9pZCBEZWZhdWx0QXVkaW9E
ZXN0aW5hdGlvbk5vZGU6OnVuaW5pdGlhbGl6ZSgpCit7CisgICAgaWYgKCFpc0luaXRpYWxpemVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGVzdGluYXRpb24tPnN0b3AoKTsKKworICAg
IEF1ZGlvTm9kZTo6dW5pbml0aWFsaXplKCk7Cit9CisKK3ZvaWQgRGVmYXVsdEF1ZGlvRGVzdGlu
YXRpb25Ob2RlOjpzdGFydFJlbmRlcmluZygpCit7CisgICAgQVNTRVJUKGlzSW5pdGlhbGl6ZWQo
KSk7CisgICAgaWYgKGlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgbV9kZXN0aW5hdGlvbi0+c3Rh
cnQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
Ql9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1
ZGlvRGVzdGluYXRpb25Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaAkocmV2aXNpb24gMTExMjMz
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5v
ZGUuaDoxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlZmF1bHRB
dWRpb0Rlc3RpbmF0aW9uTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZV9oCisjZGVmaW5l
IERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZV9oCisKKyNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0
aW9uLmgiCisjaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCIKKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9Db250ZXh0Owor
ICAgIAorY2xhc3MgRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlIDogcHVibGljIEF1ZGlvRGVz
dGluYXRpb25Ob2RlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEZWZhdWx0QXVk
aW9EZXN0aW5hdGlvbk5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZShj
b250ZXh0KSk7ICAgICAKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5EZWZhdWx0QXVkaW9EZXN0aW5h
dGlvbk5vZGUoKTsKKyAgICAKKyAgICAvLyBBdWRpb05vZGUgICAKKyAgICB2aXJ0dWFsIHZvaWQg
aW5pdGlhbGl6ZSgpOworICAgIHZpcnR1YWwgdm9pZCB1bmluaXRpYWxpemUoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc3RhcnRSZW5kZXJpbmcoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgRGVmYXVsdEF1
ZGlvRGVzdGluYXRpb25Ob2RlKEF1ZGlvQ29udGV4dCopOworCisgICAgT3duUHRyPEF1ZGlvRGVz
dGluYXRpb24+IG1fZGVzdGluYXRpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGVfaApJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWxheURTUEtlcm5lbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWxheURTUEtlcm5lbC5jcHAJKHJldmlz
aW9uIDExMTIzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwu
Y3BwOjExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVsYXlEU1BL
ZXJuZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUg
IkRlbGF5RFNQS2VybmVsLmgiCisKKyNpbmNsdWRlICJBdWRpb1V0aWxpdGllcy5oIgorI2luY2x1
ZGUgPGFsZ29yaXRobT4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworY29uc3QgZmxvYXQgU21v
b3RoaW5nVGltZUNvbnN0YW50ID0gMC4wMjBmOyAvLyAyMG1zCisgIAorbmFtZXNwYWNlIFdlYkNv
cmUgeworCitEZWxheURTUEtlcm5lbDo6RGVsYXlEU1BLZXJuZWwoRGVsYXlQcm9jZXNzb3IqIHBy
b2Nlc3NvcikKKyAgICA6IEF1ZGlvRFNQS2VybmVsKHByb2Nlc3NvcikKKyAgICAsIG1fd3JpdGVJ
bmRleCgwKQorICAgICwgbV9maXJzdFRpbWUodHJ1ZSkKK3sKKyAgICBBU1NFUlQocHJvY2Vzc29y
ICYmIHByb2Nlc3Nvci0+c2FtcGxlUmF0ZSgpID4gMCk7CisgICAgaWYgKCFwcm9jZXNzb3IpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fbWF4RGVsYXlUaW1lID0gcHJvY2Vzc29yLT5tYXhEZWxh
eVRpbWUoKTsKKyAgICBtX2J1ZmZlci5hbGxvY2F0ZShzdGF0aWNfY2FzdDxzaXplX3Q+KHByb2Nl
c3Nvci0+c2FtcGxlUmF0ZSgpICogbV9tYXhEZWxheVRpbWUpKTsKKyAgICBtX2J1ZmZlci56ZXJv
KCk7CisKKyAgICBtX3Ntb290aGluZ1JhdGUgPSBBdWRpb1V0aWxpdGllczo6ZGlzY3JldGVUaW1l
Q29uc3RhbnRGb3JTYW1wbGVSYXRlKFNtb290aGluZ1RpbWVDb25zdGFudCwgcHJvY2Vzc29yLT5z
YW1wbGVSYXRlKCkpOworfQorCitEZWxheURTUEtlcm5lbDo6RGVsYXlEU1BLZXJuZWwoZG91Ymxl
IG1heERlbGF5VGltZSwgZmxvYXQgc2FtcGxlUmF0ZSkKKyAgICA6IEF1ZGlvRFNQS2VybmVsKHNh
bXBsZVJhdGUpCisgICAgLCBtX21heERlbGF5VGltZShtYXhEZWxheVRpbWUpCisgICAgLCBtX3dy
aXRlSW5kZXgoMCkKKyAgICAsIG1fZmlyc3RUaW1lKHRydWUpCit7CisgICAgQVNTRVJUKG1heERl
bGF5VGltZSA+IDAuMCk7CisgICAgaWYgKG1heERlbGF5VGltZSA8PSAwLjApCisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgc2l6ZV90IGJ1ZmZlckxlbmd0aCA9IHN0YXRpY19jYXN0PHNp
emVfdD4oc2FtcGxlUmF0ZSAqIG1heERlbGF5VGltZSk7CisgICAgQVNTRVJUKGJ1ZmZlckxlbmd0
aCk7CisgICAgaWYgKCFidWZmZXJMZW5ndGgpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBt
X2J1ZmZlci5hbGxvY2F0ZShidWZmZXJMZW5ndGgpOworICAgIG1fYnVmZmVyLnplcm8oKTsKKwor
ICAgIG1fc21vb3RoaW5nUmF0ZSA9IEF1ZGlvVXRpbGl0aWVzOjpkaXNjcmV0ZVRpbWVDb25zdGFu
dEZvclNhbXBsZVJhdGUoU21vb3RoaW5nVGltZUNvbnN0YW50LCBzYW1wbGVSYXRlKTsKK30KKwor
dm9pZCBEZWxheURTUEtlcm5lbDo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCog
ZGVzdGluYXRpb24sIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAgc2l6ZV90IGJ1ZmZl
ckxlbmd0aCA9IG1fYnVmZmVyLnNpemUoKTsKKyAgICBmbG9hdCogYnVmZmVyID0gbV9idWZmZXIu
ZGF0YSgpOworCisgICAgQVNTRVJUKGJ1ZmZlckxlbmd0aCk7CisgICAgaWYgKCFidWZmZXJMZW5n
dGgpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgQVNTRVJUKHNvdXJjZSAmJiBkZXN0
aW5hdGlvbik7CisgICAgaWYgKCFzb3VyY2UgfHwgIWRlc3RpbmF0aW9uKQorICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgIGZsb2F0IHNhbXBsZVJhdGUgPSB0aGlzLT5zYW1wbGVSYXRlKCk7
CisgICAgZG91YmxlIGRlbGF5VGltZSA9IGRlbGF5UHJvY2Vzc29yKCkgPyBkZWxheVByb2Nlc3Nv
cigpLT5kZWxheVRpbWUoKS0+dmFsdWUoKSA6IG1fZGVzaXJlZERlbGF5RnJhbWVzIC8gc2FtcGxl
UmF0ZTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgZGVsYXkgdGltZSBpcyBpbiBhIHZhbGlkIHJh
bmdlLgorICAgIGRlbGF5VGltZSA9IG1pbihtYXhEZWxheVRpbWUoKSwgZGVsYXlUaW1lKTsKKyAg
ICBkZWxheVRpbWUgPSBtYXgoMC4wLCBkZWxheVRpbWUpOworCisgICAgaWYgKG1fZmlyc3RUaW1l
KSB7CisgICAgICAgIG1fY3VycmVudERlbGF5VGltZSA9IGRlbGF5VGltZTsKKyAgICAgICAgbV9m
aXJzdFRpbWUgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaW50IG4gPSBmcmFtZXNUb1Byb2Nl
c3M7CisgICAgd2hpbGUgKG4tLSkgeworICAgICAgICAvLyBBcHByb2FjaCBkZXNpcmVkIGRlbGF5
IHRpbWUuCisgICAgICAgIG1fY3VycmVudERlbGF5VGltZSArPSAoZGVsYXlUaW1lIC0gbV9jdXJy
ZW50RGVsYXlUaW1lKSAqIG1fc21vb3RoaW5nUmF0ZTsKKworICAgICAgICBkb3VibGUgZGVzaXJl
ZERlbGF5RnJhbWVzID0gbV9jdXJyZW50RGVsYXlUaW1lICogc2FtcGxlUmF0ZTsKKworICAgICAg
ICBkb3VibGUgcmVhZFBvc2l0aW9uID0gbV93cml0ZUluZGV4ICsgYnVmZmVyTGVuZ3RoIC0gZGVz
aXJlZERlbGF5RnJhbWVzOworICAgICAgICBpZiAocmVhZFBvc2l0aW9uID49IGJ1ZmZlckxlbmd0
aCkKKyAgICAgICAgICAgIHJlYWRQb3NpdGlvbiAtPSBidWZmZXJMZW5ndGg7CisKKyAgICAgICAg
Ly8gTGluZWFybHkgaW50ZXJwb2xhdGUgaW4tYmV0d2VlbiBkZWxheSB0aW1lcy4KKyAgICAgICAg
aW50IHJlYWRJbmRleDEgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlYWRQb3NpdGlvbik7CisgICAgICAg
IGludCByZWFkSW5kZXgyID0gKHJlYWRJbmRleDEgKyAxKSAlIGJ1ZmZlckxlbmd0aDsKKyAgICAg
ICAgZG91YmxlIGludGVycG9sYXRpb25GYWN0b3IgPSByZWFkUG9zaXRpb24gLSByZWFkSW5kZXgx
OworCisgICAgICAgIGRvdWJsZSBpbnB1dCA9IHN0YXRpY19jYXN0PGZsb2F0Pigqc291cmNlKysp
OworICAgICAgICBidWZmZXJbbV93cml0ZUluZGV4XSA9IHN0YXRpY19jYXN0PGZsb2F0PihpbnB1
dCk7CisgICAgICAgIG1fd3JpdGVJbmRleCA9IChtX3dyaXRlSW5kZXggKyAxKSAlIGJ1ZmZlckxl
bmd0aDsgICAgICAgIAorICAgICAgICAKKyAgICAgICAgZG91YmxlIHNhbXBsZTEgPSBidWZmZXJb
cmVhZEluZGV4MV07CisgICAgICAgIGRvdWJsZSBzYW1wbGUyID0gYnVmZmVyW3JlYWRJbmRleDJd
OworICAgICAgICAKKyAgICAgICAgZG91YmxlIG91dHB1dCA9ICgxLjAgLSBpbnRlcnBvbGF0aW9u
RmFjdG9yKSAqIHNhbXBsZTEgKyBpbnRlcnBvbGF0aW9uRmFjdG9yICogc2FtcGxlMjsKKworICAg
ICAgICAqZGVzdGluYXRpb24rKyA9IHN0YXRpY19jYXN0PGZsb2F0PihvdXRwdXQpOworICAgIH0g
ICAgICAgIAorfQorCit2b2lkIERlbGF5RFNQS2VybmVsOjpyZXNldCgpCit7CisgICAgbV9maXJz
dFRpbWUgPSB0cnVlOworICAgIG1fYnVmZmVyLnplcm8oKTsKK30KKworZG91YmxlIERlbGF5RFNQ
S2VybmVsOjp0YWlsVGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWF4RGVsYXlUaW1lOwor
fQorCitkb3VibGUgRGVsYXlEU1BLZXJuZWw6OmxhdGVuY3lUaW1lKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVsYXlE
U1BLZXJuZWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0RlbGF5RFNQS2VybmVsLmgJKHJldmlzaW9uIDExMTIzMykJKGZyb20gU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuaDoxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0RlbGF5RFNQS2VybmVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGVsYXlEU1BLZXJuZWxfaAorI2RlZmluZSBEZWxh
eURTUEtlcm5lbF9oCisKKyNpbmNsdWRlICJBdWRpb0FycmF5LmgiCisjaW5jbHVkZSAiQXVkaW9E
U1BLZXJuZWwuaCIKKyNpbmNsdWRlICJEZWxheVByb2Nlc3Nvci5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIERlbGF5UHJvY2Vzc29yOworICAgIAorY2xhc3MgRGVsYXlEU1BLZXJu
ZWwgOiBwdWJsaWMgQXVkaW9EU1BLZXJuZWwgeworcHVibGljOiAgCisgICAgRGVsYXlEU1BLZXJu
ZWwoRGVsYXlQcm9jZXNzb3IqKTsKKyAgICBEZWxheURTUEtlcm5lbChkb3VibGUgbWF4RGVsYXlU
aW1lLCBmbG9hdCBzYW1wbGVSYXRlKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzcyhj
b25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHNpemVfdCBmcmFtZXNUb1By
b2Nlc3MpOworICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOworICAgIAorICAgIGRvdWJsZSBtYXhE
ZWxheVRpbWUoKSBjb25zdCB7IHJldHVybiBtX21heERlbGF5VGltZTsgfQorICAgIAorICAgIHZv
aWQgc2V0RGVsYXlGcmFtZXMoZG91YmxlIG51bWJlck9mRnJhbWVzKSB7IG1fZGVzaXJlZERlbGF5
RnJhbWVzID0gbnVtYmVyT2ZGcmFtZXM7IH0KKworICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1l
KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25z
dCBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICBBdWRpb0Zsb2F0QXJyYXkgbV9idWZmZXI7Cisg
ICAgZG91YmxlIG1fbWF4RGVsYXlUaW1lOworICAgIGludCBtX3dyaXRlSW5kZXg7CisgICAgZG91
YmxlIG1fY3VycmVudERlbGF5VGltZTsKKyAgICBkb3VibGUgbV9zbW9vdGhpbmdSYXRlOworICAg
IGJvb2wgbV9maXJzdFRpbWU7CisgICAgZG91YmxlIG1fZGVzaXJlZERlbGF5RnJhbWVzOworCisg
ICAgRGVsYXlQcm9jZXNzb3IqIGRlbGF5UHJvY2Vzc29yKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
RGVsYXlQcm9jZXNzb3IqPihwcm9jZXNzb3IoKSk7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIERlbGF5RFNQS2VybmVsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vRGVsYXlOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5Tm9kZS5jcHAJKHJldmlzaW9uIDExMTIzMykJKGZy
b20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlOb2RlLmNwcDoxMTEyMzMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJEZWxheU5vZGUuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitEZWxheU5vZGU6OkRlbGF5Tm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQs
IGZsb2F0IHNhbXBsZVJhdGUsIGRvdWJsZSBtYXhEZWxheVRpbWUpCisgICAgOiBBdWRpb0Jhc2lj
UHJvY2Vzc29yTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQoreworICAgIG1fcHJvY2Vzc29yID0g
YWRvcHRQdHIobmV3IERlbGF5UHJvY2Vzc29yKHNhbXBsZVJhdGUsIDEsIG1heERlbGF5VGltZSkp
OworICAgIGRlbGF5VGltZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIHNldE5vZGVUeXBl
KE5vZGVUeXBlRGVsYXkpOworfQorCitBdWRpb1BhcmFtKiBEZWxheU5vZGU6OmRlbGF5VGltZSgp
Cit7CisgICAgcmV0dXJuIGRlbGF5UHJvY2Vzc29yKCktPmRlbGF5VGltZSgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWxheU5vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5Tm9kZS5oCShyZXZpc2lvbiAx
MTEyMzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5Tm9kZS5oOjExMTIzMykK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVsYXlOb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGVsYXlOb2RlX2gK
KyNkZWZpbmUgRGVsYXlOb2RlX2gKKworI2luY2x1ZGUgIkF1ZGlvQmFzaWNQcm9jZXNzb3JOb2Rl
LmgiCisjaW5jbHVkZSAiRGVsYXlQcm9jZXNzb3IuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvUGFyYW07CisKK2NsYXNz
IERlbGF5Tm9kZSA6IHB1YmxpYyBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8RGVsYXlOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250
ZXh0LCBmbG9hdCBzYW1wbGVSYXRlLCBkb3VibGUgbWF4RGVsYXlUaW1lKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEZWxheU5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSwgbWF4
RGVsYXlUaW1lKSk7ICAgICAgCisgICAgfQorCisgICAgQXVkaW9QYXJhbSogZGVsYXlUaW1lKCk7
CisKK3ByaXZhdGU6CisgICAgRGVsYXlOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJh
dGUsIGRvdWJsZSBtYXhEZWxheVRpbWUpOworCisgICAgRGVsYXlQcm9jZXNzb3IqIGRlbGF5UHJv
Y2Vzc29yKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RGVsYXlQcm9jZXNzb3IqPihwcm9jZXNzb3Io
KSk7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIERlbGF5Tm9k
ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5Tm9kZS5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWxheU5vZGUu
aWRsCShyZXZpc2lvbiAxMTEyMzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5
Tm9kZS5pZGw6MTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWxh
eU5vZGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitt
b2R1bGUgYXVkaW8geworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPVdFQl9B
VURJTywKKyAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKKyAgICBdIERlbGF5Tm9kZSA6IEF1
ZGlvTm9kZSB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIGRlbGF5VGlt
ZTsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWxh
eVByb2Nlc3Nvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9EZWxheVByb2Nlc3Nvci5jcHAJKHJldmlzaW9uIDExMTIzMykJKGZyb20gU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuY3BwOjExMTIzMykKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBF
TkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiRGVsYXlQcm9jZXNzb3IuaCIKKyAKKyNpbmNs
dWRlICJEZWxheURTUEtlcm5lbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0RlbGF5UHJv
Y2Vzc29yOjpEZWxheVByb2Nlc3NvcihmbG9hdCBzYW1wbGVSYXRlLCB1bnNpZ25lZCBudW1iZXJP
ZkNoYW5uZWxzLCBkb3VibGUgbWF4RGVsYXlUaW1lKQorICAgIDogQXVkaW9EU1BLZXJuZWxQcm9j
ZXNzb3Ioc2FtcGxlUmF0ZSwgbnVtYmVyT2ZDaGFubmVscykKKyAgICAsIG1fbWF4RGVsYXlUaW1l
KG1heERlbGF5VGltZSkKK3sKKyAgICBtX2RlbGF5VGltZSA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgi
ZGVsYXlUaW1lIiwgMC4wLCAwLjAsIG1heERlbGF5VGltZSk7Cit9CisKK0RlbGF5UHJvY2Vzc29y
Ojp+RGVsYXlQcm9jZXNzb3IoKQoreworICAgIGlmIChpc0luaXRpYWxpemVkKCkpCisgICAgICAg
IHVuaW5pdGlhbGl6ZSgpOworfQorCitQYXNzT3duUHRyPEF1ZGlvRFNQS2VybmVsPiBEZWxheVBy
b2Nlc3Nvcjo6Y3JlYXRlS2VybmVsKCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGF5
RFNQS2VybmVsKHRoaXMpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vRGVsYXlQcm9jZXNzb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0RlbGF5UHJvY2Vzc29yLmgJKHJldmlzaW9uIDExMTIzMykJKGZyb20gU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuaDoxMTEyMzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5UHJvY2Vzc29yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGVsYXlQcm9jZXNzb3JfaAorI2Rl
ZmluZSBEZWxheVByb2Nlc3Nvcl9oCisKKyNpbmNsdWRlICJBdWRpb0RTUEtlcm5lbFByb2Nlc3Nv
ci5oIgorI2luY2x1ZGUgIkF1ZGlvUGFyYW0uaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEF1ZGlvRFNQS2VybmVsOworICAgIAorY2xhc3MgRGVsYXlQcm9jZXNzb3IgOiBwdWJsaWMg
QXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IgeworcHVibGljOgorICAgIERlbGF5UHJvY2Vzc29yKGZs
b2F0IHNhbXBsZVJhdGUsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIGRvdWJsZSBtYXhEZWxh
eVRpbWUpOworICAgIHZpcnR1YWwgfkRlbGF5UHJvY2Vzc29yKCk7CisgICAgCisgICAgdmlydHVh
bCBQYXNzT3duUHRyPEF1ZGlvRFNQS2VybmVsPiBjcmVhdGVLZXJuZWwoKTsKKyAgICAgICAgCisg
ICAgQXVkaW9QYXJhbSogZGVsYXlUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9kZWxheVRpbWUuZ2V0
KCk7IH0KKworICAgIGRvdWJsZSBtYXhEZWxheVRpbWUoKSB7IHJldHVybiBtX21heERlbGF5VGlt
ZTsgfQorcHJpdmF0ZToKKworICAgIFJlZlB0cjxBdWRpb1BhcmFtPiBtX2RlbGF5VGltZTsKKyAg
ICBkb3VibGUgbV9tYXhEZWxheVRpbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBEZWxheVByb2Nlc3Nvcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHAJKHJl
dmlzaW9uIDExMTIzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21w
cmVzc29yTm9kZS5jcHA6MTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEy
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJf
QVVESU8pCisKKyNpbmNsdWRlICJEeW5hbWljc0NvbXByZXNzb3JOb2RlLmgiCisKKyNpbmNsdWRl
ICJBdWRpb0NvbnRleHQuaCIKKyNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgorI2luY2x1ZGUg
IkF1ZGlvTm9kZU91dHB1dC5oIgorI2luY2x1ZGUgIkR5bmFtaWNzQ29tcHJlc3Nvci5oIgorCisv
LyBTZXQgb3V0cHV0IHRvIHN0ZXJlbyBieSBkZWZhdWx0Lgorc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGRlZmF1bHROdW1iZXJPZk91dHB1dENoYW5uZWxzID0gMjsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitEeW5hbWljc0NvbXByZXNzb3JOb2RlOjpEeW5hbWljc0NvbXByZXNzb3JOb2RlKEF1ZGlv
Q29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKKyAgICA6IEF1ZGlvTm9kZShjb250
ZXh0LCBzYW1wbGVSYXRlKQoreworICAgIGFkZElucHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVJ
bnB1dCh0aGlzKSkpOworICAgIGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0
KHRoaXMsIGRlZmF1bHROdW1iZXJPZk91dHB1dENoYW5uZWxzKSkpOworCisgICAgc2V0Tm9kZVR5
cGUoTm9kZVR5cGVEeW5hbWljc0NvbXByZXNzb3IpOworCisgICAgbV90aHJlc2hvbGQgPSBBdWRp
b1BhcmFtOjpjcmVhdGUoInRocmVzaG9sZCIsIC0yNCwgLTEwMCwgMCk7CisgICAgbV9rbmVlID0g
QXVkaW9QYXJhbTo6Y3JlYXRlKCJrbmVlIiwgMzAsIDAsIDQwKTsKKyAgICBtX3JhdGlvID0gQXVk
aW9QYXJhbTo6Y3JlYXRlKCJyYXRpbyIsIDEyLCAxLCAyMCk7CisgICAgbV9yZWR1Y3Rpb24gPSBB
dWRpb1BhcmFtOjpjcmVhdGUoInJlZHVjdGlvbiIsIDAsIC0yMCwgMCk7CisKKyAgICBtX3RocmVz
aG9sZC0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICBtX2tuZWUtPnNldENvbnRleHQoY29udGV4
dCk7CisgICAgbV9yYXRpby0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICBtX3JlZHVjdGlvbi0+
c2V0Q29udGV4dChjb250ZXh0KTsKKworICAgIGluaXRpYWxpemUoKTsKK30KKworRHluYW1pY3ND
b21wcmVzc29yTm9kZTo6fkR5bmFtaWNzQ29tcHJlc3Nvck5vZGUoKQoreworICAgIHVuaW5pdGlh
bGl6ZSgpOworfQorCit2b2lkIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OnByb2Nlc3Moc2l6ZV90
IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICBBdWRpb0J1cyogb3V0cHV0QnVzID0gb3V0cHV0KDAp
LT5idXMoKTsKKyAgICBBU1NFUlQob3V0cHV0QnVzKTsKKworICAgIGZsb2F0IHRocmVzaG9sZCA9
IG1fdGhyZXNob2xkLT52YWx1ZSgpOworICAgIGZsb2F0IGtuZWUgPSBtX2tuZWUtPnZhbHVlKCk7
CisgICAgZmxvYXQgcmF0aW8gPSBtX3JhdGlvLT52YWx1ZSgpOworCisgICAgbV9keW5hbWljc0Nv
bXByZXNzb3ItPnNldFBhcmFtZXRlclZhbHVlKER5bmFtaWNzQ29tcHJlc3Nvcjo6UGFyYW1UaHJl
c2hvbGQsIHRocmVzaG9sZCk7CisgICAgbV9keW5hbWljc0NvbXByZXNzb3ItPnNldFBhcmFtZXRl
clZhbHVlKER5bmFtaWNzQ29tcHJlc3Nvcjo6UGFyYW1LbmVlLCBrbmVlKTsKKyAgICBtX2R5bmFt
aWNzQ29tcHJlc3Nvci0+c2V0UGFyYW1ldGVyVmFsdWUoRHluYW1pY3NDb21wcmVzc29yOjpQYXJh
bVJhdGlvLCByYXRpbyk7CisKKyAgICBtX2R5bmFtaWNzQ29tcHJlc3Nvci0+cHJvY2VzcyhpbnB1
dCgwKS0+YnVzKCksIG91dHB1dEJ1cywgZnJhbWVzVG9Qcm9jZXNzKTsKKworICAgIGZsb2F0IHJl
ZHVjdGlvbiA9IG1fZHluYW1pY3NDb21wcmVzc29yLT5wYXJhbWV0ZXJWYWx1ZShEeW5hbWljc0Nv
bXByZXNzb3I6OlBhcmFtUmVkdWN0aW9uKTsKKyAgICBtX3JlZHVjdGlvbi0+c2V0VmFsdWUocmVk
dWN0aW9uKTsKK30KKwordm9pZCBEeW5hbWljc0NvbXByZXNzb3JOb2RlOjpyZXNldCgpCit7Cisg
ICAgbV9keW5hbWljc0NvbXByZXNzb3ItPnJlc2V0KCk7Cit9CisKK3ZvaWQgRHluYW1pY3NDb21w
cmVzc29yTm9kZTo6aW5pdGlhbGl6ZSgpCit7CisgICAgaWYgKGlzSW5pdGlhbGl6ZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7ICAgIAorICAgIG1f
ZHluYW1pY3NDb21wcmVzc29yID0gYWRvcHRQdHIobmV3IER5bmFtaWNzQ29tcHJlc3NvcihzYW1w
bGVSYXRlKCksIGRlZmF1bHROdW1iZXJPZk91dHB1dENoYW5uZWxzKSk7Cit9CisKK3ZvaWQgRHlu
YW1pY3NDb21wcmVzc29yTm9kZTo6dW5pbml0aWFsaXplKCkKK3sKKyAgICBpZiAoIWlzSW5pdGlh
bGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9keW5hbWljc0NvbXByZXNzb3IuY2xl
YXIoKTsKKyAgICBBdWRpb05vZGU6OnVuaW5pdGlhbGl6ZSgpOworfQorCitkb3VibGUgRHluYW1p
Y3NDb21wcmVzc29yTm9kZTo6dGFpbFRpbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX2R5bmFt
aWNzQ29tcHJlc3Nvci0+dGFpbFRpbWUoKTsKK30KKworZG91YmxlIER5bmFtaWNzQ29tcHJlc3Nv
ck5vZGU6OmxhdGVuY3lUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9keW5hbWljc0NvbXBy
ZXNzb3ItPmxhdGVuY3lUaW1lKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaAkocmV2aXNpb24g
MTExMjMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JO
b2RlLmg6MTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EeW5hbWlj
c0NvbXByZXNzb3JOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgRHluYW1pY3NDb21wcmVzc29yTm9kZV9oCisjZGVmaW5lIER5bmFtaWNz
Q29tcHJlc3Nvck5vZGVfaAorCisjaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCisjaW5jbHVkZSAiQXVk
aW9QYXJhbS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBEeW5hbWljc0NvbXByZXNzb3I7CisKK2NsYXNzIER5bmFtaWNzQ29tcHJlc3Nv
ck5vZGUgOiBwdWJsaWMgQXVkaW9Ob2RlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxEeW5hbWljc0NvbXByZXNzb3JOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBm
bG9hdCBzYW1wbGVSYXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEeW5h
bWljc0NvbXByZXNzb3JOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpKTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIH5EeW5hbWljc0NvbXByZXNzb3JOb2RlKCk7CisKKyAgICAvLyBBdWRpb05vZGUKKyAg
ICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVzZXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIHZp
cnR1YWwgdm9pZCB1bmluaXRpYWxpemUoKTsKKworICAgIC8vIFN0YXRpYyBjb21wcmVzc2lvbiBj
dXJ2ZSBwYXJhbWV0ZXJzLgorICAgIEF1ZGlvUGFyYW0qIHRocmVzaG9sZCgpIHsgcmV0dXJuIG1f
dGhyZXNob2xkLmdldCgpOyB9CisgICAgQXVkaW9QYXJhbSoga25lZSgpIHsgcmV0dXJuIG1fa25l
ZS5nZXQoKTsgfQorICAgIEF1ZGlvUGFyYW0qIHJhdGlvKCkgeyByZXR1cm4gbV9yYXRpby5nZXQo
KTsgfQorCisgICAgLy8gQW1vdW50IGJ5IHdoaWNoIHRoZSBjb21wcmVzc29yIGlzIGN1cnJlbnRs
eSBjb21wcmVzc2luZyB0aGUgc2lnbmFsIGluIGRlY2liZWxzLgorICAgIEF1ZGlvUGFyYW0qIHJl
ZHVjdGlvbigpIHsgcmV0dXJuIG1fcmVkdWN0aW9uLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAg
dmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGRv
dWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFOworCisgICAgRHluYW1pY3NDb21wcmVz
c29yTm9kZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKKworICAgIE93blB0cjxE
eW5hbWljc0NvbXByZXNzb3I+IG1fZHluYW1pY3NDb21wcmVzc29yOworICAgIFJlZlB0cjxBdWRp
b1BhcmFtPiBtX3RocmVzaG9sZDsKKyAgICBSZWZQdHI8QXVkaW9QYXJhbT4gbV9rbmVlOworICAg
IFJlZlB0cjxBdWRpb1BhcmFtPiBtX3JhdGlvOworICAgIFJlZlB0cjxBdWRpb1BhcmFtPiBtX3Jl
ZHVjdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIER5bmFt
aWNzQ29tcHJlc3Nvck5vZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaWRsCShyZXZpc2lvbiAx
MTEyMzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5v
ZGUuaWRsOjExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRHluYW1p
Y3NDb21wcmVzc29yTm9kZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKK21vZHVsZSBhdWRpbyB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0
aW9uYWw9V0VCX0FVRElPLAorICAgICAgICBKU0dlbmVyYXRlVG9KU09iamVjdAorICAgIF0gRHlu
YW1pY3NDb21wcmVzc29yTm9kZSA6IEF1ZGlvTm9kZSB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBBdWRpb1BhcmFtIHRocmVzaG9sZDsgLy8gaW4gRGVjaWJlbHMKKyAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIEF1ZGlvUGFyYW0ga25lZTsgLy8gaW4gRGVjaWJlbHMKKyAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIEF1ZGlvUGFyYW0gcmF0aW87IC8vIHVuaXQtbGVzcworICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9QYXJhbSByZWR1Y3Rpb247IC8vIGluIERlY2liZWxzCisg
ICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vSGlnaFBhc3My
RmlsdGVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmNwcAkocmV2aXNpb24gMTExMjMzKQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmNwcDoxMTEyMzMpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiSGlnaFBhc3MyRmls
dGVyTm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0hpZ2hQYXNzMkZpbHRlck5vZGU6
OkhpZ2hQYXNzMkZpbHRlck5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVS
YXRlKQorICAgIDogQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkK
K3sKKyAgICBtX3Byb2Nlc3NvciA9IGFkb3B0UHRyKG5ldyBCaXF1YWRQcm9jZXNzb3IoQmlxdWFk
UHJvY2Vzc29yOjpIaWdoUGFzcywgc2FtcGxlUmF0ZSwgMSwgZmFsc2UpKTsKKyAgICBiaXF1YWRQ
cm9jZXNzb3IoKS0+cGFyYW1ldGVyMSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIGJpcXVh
ZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIyKCktPnNldENvbnRleHQoY29udGV4dCk7CisgICAgYmlx
dWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjMoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICBz
ZXROb2RlVHlwZShOb2RlVHlwZUhpZ2hQYXNzMkZpbHRlcik7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuaAko
cmV2aXNpb24gMTExMjMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9IaWdoUGFzczJG
aWx0ZXJOb2RlLmg6MTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9I
aWdoUGFzczJGaWx0ZXJOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgSGlnaFBhc3MyRmlsdGVyTm9kZV9oCisjZGVmaW5lIEhpZ2hQYXNz
MkZpbHRlck5vZGVfaAorCisjaW5jbHVkZSAiQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaCIKKyNp
bmNsdWRlICJCaXF1YWRQcm9jZXNzb3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBBdWRpb1BhcmFtOworICAgIAorY2xhc3MgSGlnaFBhc3MyRmlsdGVyTm9kZSA6IHB1YmxpYyBB
dWRpb0Jhc2ljUHJvY2Vzc29yTm9kZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SGlnaFBhc3MyRmlsdGVyTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQg
c2FtcGxlUmF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGlnaFBhc3My
RmlsdGVyTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKSk7ICAgICAgCisgICAgfQorCisgICAgQXVk
aW9QYXJhbSogY3V0b2ZmKCkgeyByZXR1cm4gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjEo
KTsgfQorICAgIEF1ZGlvUGFyYW0qIHJlc29uYW5jZSgpIHsgcmV0dXJuIGJpcXVhZFByb2Nlc3Nv
cigpLT5wYXJhbWV0ZXIyKCk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgSGlnaFBhc3MyRmlsdGVy
Tm9kZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKKworICAgIEJpcXVhZFByb2Nl
c3NvciogYmlxdWFkUHJvY2Vzc29yKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmlxdWFkUHJvY2Vz
c29yKj4ocHJvY2Vzc29yKCkpOyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBIaWdoUGFzczJGaWx0ZXJOb2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmlkbAkocmV2aXNp
b24gMTExMjMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJO
b2RlLmlkbDoxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0hpZ2hQ
YXNzMkZpbHRlck5vZGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCittb2R1bGUgYXVkaW8geworICAgIC8vIFR3by1wb2xlIGhpZ2hwYXNzIGZpbHRlcgor
ICAgIC8vIEZJWE1FOiBkZXNpZ24gQmlxdWFkTm9kZSBhbmQgdXNlIGluc3RlYWQgb2YgdGhpcwor
ICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKKyAgICAgICAg
SlNHZW5lcmF0ZVRvSlNPYmplY3QKKyAgICBdIEhpZ2hQYXNzMkZpbHRlck5vZGUgOiBBdWRpb05v
ZGUgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9QYXJhbSBjdXRvZmY7CisgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIHJlc29uYW5jZTsKKyAgICB9OworfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0phdmFT
Y3JpcHRBdWRpb05vZGUuY3BwCShyZXZpc2lvbiAxMTEyMzMpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuY3BwOjExMTIzMykKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiSmF2YVNjcmlwdEF1ZGlvTm9kZS5o
IgorCisjaW5jbHVkZSAiQXVkaW9CdWZmZXIuaCIKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgorI2lu
Y2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgorI2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0LmgiCisjaW5j
bHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCisjaW5jbHVkZSAiQXVkaW9Qcm9jZXNzaW5nRXZlbnQu
aCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgPHd0Zi9GbG9hdDMyQXJyYXkuaD4K
KyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Nv
bnN0IHNpemVfdCBEZWZhdWx0QnVmZmVyU2l6ZSA9IDQwOTY7CisKK1Bhc3NSZWZQdHI8SmF2YVNj
cmlwdEF1ZGlvTm9kZT4gSmF2YVNjcmlwdEF1ZGlvTm9kZTo6Y3JlYXRlKEF1ZGlvQ29udGV4dCog
Y29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSwgc2l6ZV90IGJ1ZmZlclNpemUsIHVuc2lnbmVkIG51
bWJlck9mSW5wdXRzLCB1bnNpZ25lZCBudW1iZXJPZk91dHB1dHMpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBKYXZhU2NyaXB0QXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUsIGJ1ZmZl
clNpemUsIG51bWJlck9mSW5wdXRzLCBudW1iZXJPZk91dHB1dHMpKTsKK30KKworSmF2YVNjcmlw
dEF1ZGlvTm9kZTo6SmF2YVNjcmlwdEF1ZGlvTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZs
b2F0IHNhbXBsZVJhdGUsIHNpemVfdCBidWZmZXJTaXplLCB1bnNpZ25lZCBudW1iZXJPZklucHV0
cywgdW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRzKQorICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNh
bXBsZVJhdGUpCisgICAgLCBtX2RvdWJsZUJ1ZmZlckluZGV4KDApCisgICAgLCBtX2RvdWJsZUJ1
ZmZlckluZGV4Rm9yRXZlbnQoMCkKKyAgICAsIG1fYnVmZmVyU2l6ZShidWZmZXJTaXplKQorICAg
ICwgbV9idWZmZXJSZWFkV3JpdGVJbmRleCgwKQorICAgICwgbV9pc1JlcXVlc3RPdXRzdGFuZGlu
ZyhmYWxzZSkKK3sKKyAgICAvLyBDaGVjayBmb3IgdmFsaWQgYnVmZmVyIHNpemUuCisgICAgc3dp
dGNoIChidWZmZXJTaXplKSB7CisgICAgY2FzZSAyNTY6CisgICAgY2FzZSA1MTI6CisgICAgY2Fz
ZSAxMDI0OgorICAgIGNhc2UgMjA0ODoKKyAgICBjYXNlIDQwOTY6CisgICAgY2FzZSA4MTkyOgor
ICAgIGNhc2UgMTYzODQ6CisgICAgICAgIG1fYnVmZmVyU2l6ZSA9IGJ1ZmZlclNpemU7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG1fYnVmZmVyU2l6ZSA9IERlZmF1bHRC
dWZmZXJTaXplOworICAgIH0KKyAgICAgICAgCisgICAgLy8gUmVnYXJkbGVzcyBvZiB0aGUgYWxs
b3dlZCBidWZmZXIgc2l6ZXMgYWJvdmUsIHdlIHN0aWxsIG5lZWQgdG8gcHJvY2VzcyBhdCB0aGUg
Z3JhbnVsYXJpdHkgb2YgdGhlIEF1ZGlvTm9kZS4KKyAgICBpZiAobV9idWZmZXJTaXplIDwgQXVk
aW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVzKQorICAgICAgICBtX2J1ZmZlclNpemUgPSBB
dWRpb05vZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXM7CisKKyAgICAvLyBGSVhNRTogUmlnaHQg
bm93IHdlJ3JlIGhhcmRjb2RlZCB0byBzaW5nbGUgaW5wdXQgYW5kIHNpbmdsZSBvdXRwdXQuCisg
ICAgLy8gQWx0aG91Z2ggdGhlIHNwZWNpZmljYXRpb24gc2F5cyB0aGlzIGlzIE9LIGZvciBhIHNp
bXBsZSBpbXBsZW1lbnRhdGlvbiwgbXVsdGlwbGUgaW5wdXRzIGFuZCBvdXRwdXRzIHdvdWxkIGJl
IGdvb2QuCisgICAgQVNTRVJUX1VOVVNFRChudW1iZXJPZklucHV0cywgbnVtYmVyT2ZJbnB1dHMg
PT0gMSk7CisgICAgQVNTRVJUX1VOVVNFRChudW1iZXJPZk91dHB1dHMsIG51bWJlck9mT3V0cHV0
cyA9PSAxKTsKKyAgICBhZGRJbnB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlSW5wdXQodGhpcykp
KTsKKyAgICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZU91dHB1dCh0aGlzLCAyKSkp
OworCisgICAgc2V0Tm9kZVR5cGUoTm9kZVR5cGVKYXZhU2NyaXB0KTsKKworICAgIGluaXRpYWxp
emUoKTsKK30KKworSmF2YVNjcmlwdEF1ZGlvTm9kZTo6fkphdmFTY3JpcHRBdWRpb05vZGUoKQor
eworICAgIHVuaW5pdGlhbGl6ZSgpOworfQorCit2b2lkIEphdmFTY3JpcHRBdWRpb05vZGU6Omlu
aXRpYWxpemUoKQoreworICAgIGlmIChpc0luaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGZsb2F0IHNhbXBsZVJhdGUgPSBjb250ZXh0KCktPnNhbXBsZVJhdGUoKTsKKworICAg
IC8vIENyZWF0ZSBkb3VibGUgYnVmZmVycyBvbiBib3RoIHRoZSBpbnB1dCBhbmQgb3V0cHV0IHNp
ZGVzLgorICAgIC8vIFRoZXNlIEF1ZGlvQnVmZmVycyB3aWxsIGJlIGRpcmVjdGx5IGFjY2Vzc2Vk
IGluIHRoZSBtYWluIHRocmVhZCBieSBKYXZhU2NyaXB0LgorICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCAyOyArK2kpIHsKKyAgICAgICAgbV9pbnB1dEJ1ZmZlcnMuYXBwZW5kKEF1ZGlvQnVm
ZmVyOjpjcmVhdGUoMiwgYnVmZmVyU2l6ZSgpLCBzYW1wbGVSYXRlKSk7CisgICAgICAgIG1fb3V0
cHV0QnVmZmVycy5hcHBlbmQoQXVkaW9CdWZmZXI6OmNyZWF0ZSgyLCBidWZmZXJTaXplKCksIHNh
bXBsZVJhdGUpKTsKKyAgICB9CisKKyAgICBBdWRpb05vZGU6OmluaXRpYWxpemUoKTsKK30KKwor
dm9pZCBKYXZhU2NyaXB0QXVkaW9Ob2RlOjp1bmluaXRpYWxpemUoKQoreworICAgIGlmICghaXNJ
bml0aWFsaXplZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lucHV0QnVmZmVycy5jbGVh
cigpOworICAgIG1fb3V0cHV0QnVmZmVycy5jbGVhcigpOworCisgICAgQXVkaW9Ob2RlOjp1bmlu
aXRpYWxpemUoKTsKK30KKwordm9pZCBKYXZhU2NyaXB0QXVkaW9Ob2RlOjpwcm9jZXNzKHNpemVf
dCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAgLy8gRGlzY3Vzc2lvbiBhYm91dCBpbnB1dHMgYW5k
IG91dHB1dHM6CisgICAgLy8gQXMgaW4gb3RoZXIgQXVkaW9Ob2RlcywgSmF2YVNjcmlwdEF1ZGlv
Tm9kZSB1c2VzIGFuIEF1ZGlvQnVzIGZvciBpdHMgaW5wdXQgYW5kIG91dHB1dCAoc2VlIGlucHV0
QnVzIGFuZCBvdXRwdXRCdXMgYmVsb3cpLgorICAgIC8vIEFkZGl0aW9uYWxseSwgdGhlcmUgaXMg
YSBkb3VibGUtYnVmZmVyaW5nIGZvciBpbnB1dCBhbmQgb3V0cHV0IHdoaWNoIGlzIGV4cG9zZWQg
ZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCAoc2VlIGlucHV0QnVmZmVyIGFuZCBvdXRwdXRCdWZmZXIg
YmVsb3cpLgorICAgIC8vIFRoaXMgbm9kZSBpcyB0aGUgcHJvZHVjZXIgZm9yIGlucHV0QnVmZmVy
IGFuZCB0aGUgY29uc3VtZXIgZm9yIG91dHB1dEJ1ZmZlci4KKyAgICAvLyBUaGUgSmF2YVNjcmlw
dCBjb2RlIGlzIHRoZSBjb25zdW1lciBvZiBpbnB1dEJ1ZmZlciBhbmQgdGhlIHByb2R1Y2VyIGZv
ciBvdXRwdXRCdWZmZXIuCisgICAgCisgICAgLy8gR2V0IGlucHV0IGFuZCBvdXRwdXQgYnVzc2Vz
LgorICAgIEF1ZGlvQnVzKiBpbnB1dEJ1cyA9IHRoaXMtPmlucHV0KDApLT5idXMoKTsKKyAgICBB
dWRpb0J1cyogb3V0cHV0QnVzID0gdGhpcy0+b3V0cHV0KDApLT5idXMoKTsKKworICAgIC8vIEdl
dCBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMuICBXZSBkb3VibGUtYnVmZmVyIGJvdGggdGhlIGlu
cHV0IGFuZCBvdXRwdXQgc2lkZXMuCisgICAgdW5zaWduZWQgZG91YmxlQnVmZmVySW5kZXggPSB0
aGlzLT5kb3VibGVCdWZmZXJJbmRleCgpOworICAgIGJvb2wgaXNEb3VibGVCdWZmZXJJbmRleEdv
b2QgPSBkb3VibGVCdWZmZXJJbmRleCA8IDIgJiYgZG91YmxlQnVmZmVySW5kZXggPCBtX2lucHV0
QnVmZmVycy5zaXplKCkgJiYgZG91YmxlQnVmZmVySW5kZXggPCBtX291dHB1dEJ1ZmZlcnMuc2l6
ZSgpOworICAgIEFTU0VSVChpc0RvdWJsZUJ1ZmZlckluZGV4R29vZCk7CisgICAgaWYgKCFpc0Rv
dWJsZUJ1ZmZlckluZGV4R29vZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEF1ZGlvQnVm
ZmVyKiBpbnB1dEJ1ZmZlciA9IG1faW5wdXRCdWZmZXJzW2RvdWJsZUJ1ZmZlckluZGV4XS5nZXQo
KTsKKyAgICBBdWRpb0J1ZmZlciogb3V0cHV0QnVmZmVyID0gbV9vdXRwdXRCdWZmZXJzW2RvdWJs
ZUJ1ZmZlckluZGV4XS5nZXQoKTsKKworICAgIC8vIENoZWNrIHRoZSBjb25zaXN0ZW5jeSBvZiBp
bnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMuCisgICAgYm9vbCBidWZmZXJzQXJlR29vZCA9IGlucHV0
QnVmZmVyICYmIG91dHB1dEJ1ZmZlciAmJiBidWZmZXJTaXplKCkgPT0gaW5wdXRCdWZmZXItPmxl
bmd0aCgpICYmIGJ1ZmZlclNpemUoKSA9PSBvdXRwdXRCdWZmZXItPmxlbmd0aCgpCisgICAgICAg
ICYmIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXggKyBmcmFtZXNUb1Byb2Nlc3MgPD0gYnVmZmVyU2l6
ZSgpOworICAgIEFTU0VSVChidWZmZXJzQXJlR29vZCk7CisgICAgaWYgKCFidWZmZXJzQXJlR29v
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgYXNzdW1lIHRoYXQgYnVmZmVyU2l6ZSgp
IGlzIGV2ZW5seSBkaXZpc2libGUgYnkgZnJhbWVzVG9Qcm9jZXNzIC0gc2hvdWxkIGFsd2F5cyBi
ZSB0cnVlLCBidXQgd2Ugc2hvdWxkIHN0aWxsIGNoZWNrLgorICAgIGJvb2wgaXNGcmFtZXNUb1By
b2Nlc3NHb29kID0gZnJhbWVzVG9Qcm9jZXNzICYmIGJ1ZmZlclNpemUoKSA+PSBmcmFtZXNUb1By
b2Nlc3MgJiYgIShidWZmZXJTaXplKCkgJSBmcmFtZXNUb1Byb2Nlc3MpOworICAgIEFTU0VSVChp
c0ZyYW1lc1RvUHJvY2Vzc0dvb2QpOworICAgIGlmICghaXNGcmFtZXNUb1Byb2Nlc3NHb29kKQor
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mSW5wdXRDaGFu
bmVscyA9IGlucHV0QnVzLT5udW1iZXJPZkNoYW5uZWxzKCk7CisgICAgCisgICAgYm9vbCBjaGFu
bmVsc0FyZUdvb2QgPSAobnVtYmVyT2ZJbnB1dENoYW5uZWxzID09IDEgfHwgbnVtYmVyT2ZJbnB1
dENoYW5uZWxzID09IDIpICYmIG91dHB1dEJ1cy0+bnVtYmVyT2ZDaGFubmVscygpID09IDI7Cisg
ICAgQVNTRVJUKGNoYW5uZWxzQXJlR29vZCk7CisgICAgaWYgKCFjaGFubmVsc0FyZUdvb2QpCisg
ICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IGZsb2F0KiBzb3VyY2VMID0gaW5wdXRCdXMtPmNo
YW5uZWwoMCktPmRhdGEoKTsKKyAgICBjb25zdCBmbG9hdCogc291cmNlUiA9IG51bWJlck9mSW5w
dXRDaGFubmVscyA+IDEgPyBpbnB1dEJ1cy0+Y2hhbm5lbCgxKS0+ZGF0YSgpIDogMDsKKyAgICBm
bG9hdCogZGVzdGluYXRpb25MID0gb3V0cHV0QnVzLT5jaGFubmVsKDApLT5tdXRhYmxlRGF0YSgp
OworICAgIGZsb2F0KiBkZXN0aW5hdGlvblIgPSBvdXRwdXRCdXMtPmNoYW5uZWwoMSktPm11dGFi
bGVEYXRhKCk7CisKKyAgICAvLyBDb3B5IGZyb20gdGhlIGlucHV0IHRvIHRoZSBpbnB1dCBidWZm
ZXIuICBTZWUgImJ1ZmZlcnNBcmVHb29kIiBjaGVjayBhYm92ZSBmb3Igc2FmZXR5LgorICAgIHNp
emVfdCBieXRlc1RvQ29weSA9IHNpemVvZihmbG9hdCkgKiBmcmFtZXNUb1Byb2Nlc3M7CisgICAg
bWVtY3B5KGlucHV0QnVmZmVyLT5nZXRDaGFubmVsRGF0YSgwKS0+ZGF0YSgpICsgbV9idWZmZXJS
ZWFkV3JpdGVJbmRleCwgc291cmNlTCwgYnl0ZXNUb0NvcHkpOworICAgIAorICAgIGlmIChudW1i
ZXJPZklucHV0Q2hhbm5lbHMgPT0gMikKKyAgICAgICAgbWVtY3B5KGlucHV0QnVmZmVyLT5nZXRD
aGFubmVsRGF0YSgxKS0+ZGF0YSgpICsgbV9idWZmZXJSZWFkV3JpdGVJbmRleCwgc291cmNlUiwg
Ynl0ZXNUb0NvcHkpOworICAgIGVsc2UgaWYgKG51bWJlck9mSW5wdXRDaGFubmVscyA9PSAxKSB7
CisgICAgICAgIC8vIElmIHRoZSBpbnB1dCBpcyBtb25vLCB0aGVuIGFsc28gY29weSB0aGUgbW9u
byBpbnB1dCB0byB0aGUgcmlnaHQgY2hhbm5lbCBvZiB0aGUgQXVkaW9CdWZmZXIgd2hpY2ggdGhl
IEF1ZGlvUHJvY2Vzc2luZ0V2ZW50IHVzZXMuCisgICAgICAgIC8vIEZJWE1FOiBpdCBpcyBsaWtl
bHkgdGhlIGF1ZGlvIEFQSSB3aWxsIGV2b2x2ZSB0byBwcmVzZW50IGFuIEF1ZGlvQnVmZmVyIHdp
dGggdGhlIHNhbWUgbnVtYmVyIG9mIGNoYW5uZWxzIGFzIG91ciBpbnB1dC4KKyAgICAgICAgbWVt
Y3B5KGlucHV0QnVmZmVyLT5nZXRDaGFubmVsRGF0YSgxKS0+ZGF0YSgpICsgbV9idWZmZXJSZWFk
V3JpdGVJbmRleCwgc291cmNlTCwgYnl0ZXNUb0NvcHkpOworICAgIH0KKyAgICAKKyAgICAvLyBD
b3B5IGZyb20gdGhlIG91dHB1dCBidWZmZXIgdG8gdGhlIG91dHB1dC4gIFNlZSAiYnVmZmVyc0Fy
ZUdvb2QiIGNoZWNrIGFib3ZlIGZvciBzYWZldHkuCisgICAgbWVtY3B5KGRlc3RpbmF0aW9uTCwg
b3V0cHV0QnVmZmVyLT5nZXRDaGFubmVsRGF0YSgwKS0+ZGF0YSgpICsgbV9idWZmZXJSZWFkV3Jp
dGVJbmRleCwgYnl0ZXNUb0NvcHkpOworICAgIG1lbWNweShkZXN0aW5hdGlvblIsIG91dHB1dEJ1
ZmZlci0+Z2V0Q2hhbm5lbERhdGEoMSktPmRhdGEoKSArIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXgs
IGJ5dGVzVG9Db3B5KTsKKworICAgIC8vIFVwZGF0ZSB0aGUgYnVmZmVyaW5nIGluZGV4LgorICAg
IG1fYnVmZmVyUmVhZFdyaXRlSW5kZXggPSAobV9idWZmZXJSZWFkV3JpdGVJbmRleCArIGZyYW1l
c1RvUHJvY2VzcykgJSBidWZmZXJTaXplKCk7CisKKyAgICAvLyBtX2J1ZmZlclJlYWRXcml0ZUlu
ZGV4IHdpbGwgd3JhcCBiYWNrIGFyb3VuZCB0byAwIHdoZW4gdGhlIGN1cnJlbnQgaW5wdXQgYW5k
IG91dHB1dCBidWZmZXJzIGFyZSBmdWxsLgorICAgIC8vIFdoZW4gdGhpcyBoYXBwZW5zLCBmaXJl
IGFuIGV2ZW50IGFuZCBzd2FwIGJ1ZmZlcnMuCisgICAgaWYgKCFtX2J1ZmZlclJlYWRXcml0ZUlu
ZGV4KSB7CisgICAgICAgIC8vIEF2b2lkIGJ1aWxkaW5nIHVwIHJlcXVlc3RzIG9uIHRoZSBtYWlu
IHRocmVhZCB0byBmaXJlIHByb2Nlc3MgZXZlbnRzIHdoZW4gdGhleSdyZSBub3QgYmVpbmcgaGFu
ZGxlZC4KKyAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBhIHByb2JsZW0gaWYgdGhlIG1haW4gdGhy
ZWFkIGlzIHZlcnkgYnVzeSBkb2luZyBvdGhlciB0aGluZ3MgYW5kIGlzIGJlaW5nIGhlbGQgdXAg
aGFuZGxpbmcgcHJldmlvdXMgcmVxdWVzdHMuCisgICAgICAgIGlmIChtX2lzUmVxdWVzdE91dHN0
YW5kaW5nKSB7CisgICAgICAgICAgICAvLyBXZSdyZSBsYXRlIGluIGhhbmRsaW5nIHRoZSBwcmV2
aW91cyByZXF1ZXN0LiAgVGhlIG1haW4gdGhyZWFkIG11c3QgYmUgdmVyeSBidXN5LgorICAgICAg
ICAgICAgLy8gVGhlIGJlc3Qgd2UgY2FuIGRvIGlzIGNsZWFyIG91dCB0aGUgYnVmZmVyIG91cnNl
bGYgaGVyZS4KKyAgICAgICAgICAgIG91dHB1dEJ1ZmZlci0+emVybygpOyAgICAgICAgICAgIAor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gUmVmZXJlbmNlIG91cnNlbGYgc28gd2Ug
ZG9uJ3QgYWNjaWRlbnRhbGx5IGdldCBkZWxldGVkIGJlZm9yZSBmaXJlUHJvY2Vzc0V2ZW50KCkg
Z2V0cyBjYWxsZWQuCisgICAgICAgICAgICByZWYoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gRmlyZSB0aGUgZXZlbnQgb24gdGhlIG1haW4gdGhyZWFkLCBub3QgdGhpcyBvbmUgKHdo
aWNoIGlzIHRoZSByZWFsdGltZSBhdWRpbyB0aHJlYWQpLgorICAgICAgICAgICAgbV9kb3VibGVC
dWZmZXJJbmRleEZvckV2ZW50ID0gbV9kb3VibGVCdWZmZXJJbmRleDsKKyAgICAgICAgICAgIG1f
aXNSZXF1ZXN0T3V0c3RhbmRpbmcgPSB0cnVlOworICAgICAgICAgICAgY2FsbE9uTWFpblRocmVh
ZChmaXJlUHJvY2Vzc0V2ZW50RGlzcGF0Y2gsIHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAg
c3dhcEJ1ZmZlcnMoKTsKKyAgICB9Cit9CisKK3ZvaWQgSmF2YVNjcmlwdEF1ZGlvTm9kZTo6Zmly
ZVByb2Nlc3NFdmVudERpc3BhdGNoKHZvaWQqIHVzZXJEYXRhKQoreworICAgIEphdmFTY3JpcHRB
dWRpb05vZGUqIGpzQXVkaW9Ob2RlID0gc3RhdGljX2Nhc3Q8SmF2YVNjcmlwdEF1ZGlvTm9kZSo+
KHVzZXJEYXRhKTsKKyAgICBBU1NFUlQoanNBdWRpb05vZGUpOworICAgIGlmICghanNBdWRpb05v
ZGUpCisgICAgICAgIHJldHVybjsKKworICAgIGpzQXVkaW9Ob2RlLT5maXJlUHJvY2Vzc0V2ZW50
KCk7CisKKyAgICAvLyBEZS1yZWZlcmVuY2UgdG8gbWF0Y2ggdGhlIHJlZigpIGNhbGwgaW4gcHJv
Y2VzcygpLgorICAgIGpzQXVkaW9Ob2RlLT5kZXJlZigpOworfQorCit2b2lkIEphdmFTY3JpcHRB
dWRpb05vZGU6OmZpcmVQcm9jZXNzRXZlbnQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSAmJiBtX2lzUmVxdWVzdE91dHN0YW5kaW5nKTsKKyAgICAKKyAgICBib29sIGlzSW5kZXhHb29k
ID0gbV9kb3VibGVCdWZmZXJJbmRleEZvckV2ZW50IDwgMjsKKyAgICBBU1NFUlQoaXNJbmRleEdv
b2QpOworICAgIGlmICghaXNJbmRleEdvb2QpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgQXVkaW9CdWZmZXIqIGlucHV0QnVmZmVyID0gbV9pbnB1dEJ1ZmZlcnNbbV9kb3VibGVCdWZm
ZXJJbmRleEZvckV2ZW50XS5nZXQoKTsKKyAgICBBdWRpb0J1ZmZlciogb3V0cHV0QnVmZmVyID0g
bV9vdXRwdXRCdWZmZXJzW21fZG91YmxlQnVmZmVySW5kZXhGb3JFdmVudF0uZ2V0KCk7CisgICAg
QVNTRVJUKGlucHV0QnVmZmVyICYmIG91dHB1dEJ1ZmZlcik7CisgICAgaWYgKCFpbnB1dEJ1ZmZl
ciB8fCAhb3V0cHV0QnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBBdm9pZCBmaXJp
bmcgdGhlIGV2ZW50IGlmIHRoZSBkb2N1bWVudCBoYXMgYWxyZWFkeSBnb25lIGF3YXkuCisgICAg
aWYgKGNvbnRleHQoKS0+aGFzRG9jdW1lbnQoKSkgeworICAgICAgICAvLyBMZXQgdGhlIGF1ZGlv
IHRocmVhZCBrbm93IHdlJ3ZlIGdvdHRlbiB0byB0aGUgcG9pbnQgd2hlcmUgaXQncyBPSyBmb3Ig
aXQgdG8gbWFrZSBhbm90aGVyIHJlcXVlc3QuCisgICAgICAgIG1faXNSZXF1ZXN0T3V0c3RhbmRp
bmcgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIENhbGwgdGhlIEphdmFTY3JpcHQgZXZl
bnQgaGFuZGxlciB3aGljaCB3aWxsIGRvIHRoZSBhdWRpbyBwcm9jZXNzaW5nLgorICAgICAgICBk
aXNwYXRjaEV2ZW50KEF1ZGlvUHJvY2Vzc2luZ0V2ZW50OjpjcmVhdGUoaW5wdXRCdWZmZXIsIG91
dHB1dEJ1ZmZlcikpOworICAgIH0KK30KKwordm9pZCBKYXZhU2NyaXB0QXVkaW9Ob2RlOjpyZXNl
dCgpCit7CisgICAgbV9idWZmZXJSZWFkV3JpdGVJbmRleCA9IDA7CisgICAgbV9kb3VibGVCdWZm
ZXJJbmRleCA9IDA7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjsgKytpKSB7Cisg
ICAgICAgIG1faW5wdXRCdWZmZXJzW2ldLT56ZXJvKCk7CisgICAgICAgIG1fb3V0cHV0QnVmZmVy
c1tpXS0+emVybygpOworICAgIH0KK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBKYXZhU2NyaXB0
QXVkaW9Ob2RlOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZXZlbnROYW1l
cygpLmludGVyZmFjZUZvckphdmFTY3JpcHRBdWRpb05vZGU7Cit9CisKK1NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIEphdmFTY3JpcHRBdWRpb05vZGU6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBj
b25zdAoreworICAgIHJldHVybiBjb25zdF9jYXN0PEphdmFTY3JpcHRBdWRpb05vZGUqPih0aGlz
KS0+Y29udGV4dCgpLT5kb2N1bWVudCgpOworfQorCitkb3VibGUgSmF2YVNjcmlwdEF1ZGlvTm9k
ZTo6dGFpbFRpbWUoKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRv
dWJsZT46OmluZmluaXR5KCk7Cit9CisKK2RvdWJsZSBKYXZhU2NyaXB0QXVkaW9Ob2RlOjpsYXRl
bmN5VGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6aW5maW5pdHkoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
SmF2YVNjcmlwdEF1ZGlvTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5oCShyZXZpc2lvbiAxMTEyMzMpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaDoxMTEyMzMpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSmF2
YVNjcmlwdEF1ZGlvTm9kZV9oCisjZGVmaW5lIEphdmFTY3JpcHRBdWRpb05vZGVfaAorCisjaW5j
bHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCisjaW5jbHVk
ZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQXVkaW9CdWZmZXI7CitjbGFzcyBBdWRpb0NvbnRleHQ7CitjbGFzcyBBdWRp
b1Byb2Nlc3NpbmdFdmVudDsKKworLy8gSmF2YVNjcmlwdEF1ZGlvTm9kZSBpcyBhbiBBdWRpb05v
ZGUgd2hpY2ggYWxsb3dzIGZvciBhcmJpdHJhcnkgc3ludGhlc2lzIG9yIHByb2Nlc3NpbmcgZGly
ZWN0bHkgdXNpbmcgSmF2YVNjcmlwdC4KKy8vIFRoZSBBUEkgYWxsb3dzIGZvciBhIHZhcmlhYmxl
IG51bWJlciBvZiBpbnB1dHMgYW5kIG91dHB1dHMsIGFsdGhvdWdoIGl0IG11c3QgaGF2ZSBhdCBs
ZWFzdCBvbmUgaW5wdXQgb3Igb3V0cHV0LgorLy8gVGhpcyBiYXNpYyBpbXBsZW1lbnRhdGlvbiBz
dXBwb3J0cyBubyBtb3JlIHRoYW4gb25lIGlucHV0IGFuZCBvdXRwdXQuCisvLyBUaGUgIm9uYXVk
aW9wcm9jZXNzIiBhdHRyaWJ1dGUgaXMgYW4gZXZlbnQgbGlzdGVuZXIgd2hpY2ggd2lsbCBnZXQg
Y2FsbGVkIHBlcmlvZGljYWxseSB3aXRoIGFuIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50IHdoaWNoIGhh
cworLy8gQXVkaW9CdWZmZXJzIGZvciBlYWNoIGlucHV0IGFuZCBvdXRwdXQuCisKKy8vIEZJWE1F
OiBFdmVudFRhcmdldCBzaG91bGQgYmUgaW50cm9kdWNlZCBhdCB0aGUgYmFzZSBvZiB0aGUgaW5o
ZXJpdGFuY2UgaGllcmFyY2h5IChpLmUuLCBhcyBhIGJhc2UgY2xhc3MgZm9yIEF1ZGlvTm9kZSku
CitjbGFzcyBKYXZhU2NyaXB0QXVkaW9Ob2RlIDogcHVibGljIEF1ZGlvTm9kZSwgcHVibGljIEV2
ZW50VGFyZ2V0IHsKK3B1YmxpYzoKKyAgICAvLyBidWZmZXJTaXplIG11c3QgYmUgb25lIG9mIHRo
ZSBmb2xsb3dpbmcgdmFsdWVzOiAyNTYsIDUxMiwgMTAyNCwgMjA0OCwgNDA5NiwgODE5MiwgMTYz
ODQuCisgICAgLy8gVGhpcyB2YWx1ZSBjb250cm9scyBob3cgZnJlcXVlbnRseSB0aGUgb25hdWRp
b3Byb2Nlc3MgZXZlbnQgaGFuZGxlciBpcyBjYWxsZWQgYW5kIGhvdyBtYW55IHNhbXBsZS1mcmFt
ZXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZWFjaCBjYWxsLgorICAgIC8vIExvd2VyIG51bWJlcnMg
Zm9yIGJ1ZmZlclNpemUgd2lsbCByZXN1bHQgaW4gYSBsb3dlciAoYmV0dGVyKSBsYXRlbmN5LiBI
aWdoZXIgbnVtYmVycyB3aWxsIGJlIG5lY2Vzc2FyeSB0byBhdm9pZCBhdWRpbyBicmVha3VwIGFu
ZCBnbGl0Y2hlcy4KKyAgICAvLyBUaGUgdmFsdWUgY2hvc2VuIG11c3QgY2FyZWZ1bGx5IGJhbGFu
Y2UgYmV0d2VlbiBsYXRlbmN5IGFuZCBhdWRpbyBxdWFsaXR5LgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEphdmFTY3JpcHRBdWRpb05vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1w
bGVSYXRlLCBzaXplX3QgYnVmZmVyU2l6ZSwgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dHMgPSAxLCB1
bnNpZ25lZCBudW1iZXJPZk91dHB1dHMgPSAxKTsKKworICAgIHZpcnR1YWwgfkphdmFTY3JpcHRB
dWRpb05vZGUoKTsKKworICAgIC8vIEF1ZGlvTm9kZQorICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNz
KHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOworICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOworICAg
IHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKCk7CisgICAgdmlydHVhbCB2b2lkIHVuaW5pdGlhbGl6
ZSgpOworCisgICAgLy8gRXZlbnRUYXJnZXQKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OworICAgIHZpcnR1YWwgRXZlbnRU
YXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKSB7IHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7
IH0KKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkg
IHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsgfQorCisgICAgc2l6ZV90IGJ1ZmZlclNpemUo
KSBjb25zdCB7IHJldHVybiBtX2J1ZmZlclNpemU7IH0KKworICAgIERFRklORV9BVFRSSUJVVEVf
RVZFTlRfTElTVEVORVIoYXVkaW9wcm9jZXNzKTsKKworICAgIC8vIFJlY29uY2lsZSByZWYvZGVy
ZWYgd2hpY2ggYXJlIGRlZmluZWQgYm90aCBpbiBBdWRpb05vZGUgYW5kIEV2ZW50VGFyZ2V0Lgor
ICAgIHVzaW5nIEF1ZGlvTm9kZTo6cmVmOworICAgIHVzaW5nIEF1ZGlvTm9kZTo6ZGVyZWY7Cisg
ICAgCitwcml2YXRlOgorICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERTsKKwor
ICAgIEphdmFTY3JpcHRBdWRpb05vZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSwg
c2l6ZV90IGJ1ZmZlclNpemUsIHVuc2lnbmVkIG51bWJlck9mSW5wdXRzLCB1bnNpZ25lZCBudW1i
ZXJPZk91dHB1dHMpOworCisgICAgc3RhdGljIHZvaWQgZmlyZVByb2Nlc3NFdmVudERpc3BhdGNo
KHZvaWQqIHVzZXJEYXRhKTsKKyAgICB2b2lkIGZpcmVQcm9jZXNzRXZlbnQoKTsKKworICAgIC8v
IERvdWJsZSBidWZmZXJpbmcKKyAgICB1bnNpZ25lZCBkb3VibGVCdWZmZXJJbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1fZG91YmxlQnVmZmVySW5kZXg7IH0KKyAgICB2b2lkIHN3YXBCdWZmZXJzKCkg
eyBtX2RvdWJsZUJ1ZmZlckluZGV4ID0gMSAtIG1fZG91YmxlQnVmZmVySW5kZXg7IH0KKyAgICB1
bnNpZ25lZCBtX2RvdWJsZUJ1ZmZlckluZGV4OworICAgIHVuc2lnbmVkIG1fZG91YmxlQnVmZmVy
SW5kZXhGb3JFdmVudDsKKyAgICBWZWN0b3I8UmVmUHRyPEF1ZGlvQnVmZmVyPiA+IG1faW5wdXRC
dWZmZXJzOworICAgIFZlY3RvcjxSZWZQdHI8QXVkaW9CdWZmZXI+ID4gbV9vdXRwdXRCdWZmZXJz
OworCisgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQorICAgIHZp
cnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CisgICAgRXZlbnRUYXJn
ZXREYXRhIG1fZXZlbnRUYXJnZXREYXRhOworCisgICAgc2l6ZV90IG1fYnVmZmVyU2l6ZTsKKyAg
ICB1bnNpZ25lZCBtX2J1ZmZlclJlYWRXcml0ZUluZGV4OworICAgIHZvbGF0aWxlIGJvb2wgbV9p
c1JlcXVlc3RPdXRzdGFuZGluZzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEphdmFTY3JpcHRBdWRpb05vZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaWRsCShyZXZpc2lv
biAxMTEyMzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05v
ZGUuaWRsOjExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vSmF2YVNj
cmlwdEF1ZGlvTm9kZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKK21vZHVsZSBhdWRpbyB7CisgICAgLy8gRm9yIHJlYWwtdGltZSBhdWRpbyBzdHJlYW0g
c3ludGhlc2lzL3Byb2Nlc3NpbmcgaW4gSmF2YVNjcmlwdCAKKyAgICBpbnRlcmZhY2UgWworICAg
ICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCisgICAgICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0
LAorICAgICAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKKyAgICAgICAgRXZlbnRUYXJnZXQKKyAg
ICBdIEphdmFTY3JpcHRBdWRpb05vZGUgOiBBdWRpb05vZGUgeworICAgICAgICAvLyBSZW5kZXJp
bmcgY2FsbGJhY2sKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25hdWRpb3Byb2Nl
c3M7CisgICAgICAgIAorICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBidWZmZXJTaXpl
OworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0xvd1Bh
c3MyRmlsdGVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuY3BwCShyZXZpc2lvbiAxMTEyMzMpCShmcm9tIFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5jcHA6MTExMjMzKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiTG93UGFzczJGaWx0
ZXJOb2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTG93UGFzczJGaWx0ZXJOb2RlOjpM
b3dQYXNzMkZpbHRlck5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRl
KQorICAgIDogQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkKK3sK
KyAgICBtX3Byb2Nlc3NvciA9IGFkb3B0UHRyKG5ldyBCaXF1YWRQcm9jZXNzb3IoQmlxdWFkUHJv
Y2Vzc29yOjpMb3dQYXNzLCBzYW1wbGVSYXRlLCAxLCBmYWxzZSkpOworICAgIGJpcXVhZFByb2Nl
c3NvcigpLT5wYXJhbWV0ZXIxKCktPnNldENvbnRleHQoY29udGV4dCk7CisgICAgYmlxdWFkUHJv
Y2Vzc29yKCktPnBhcmFtZXRlcjIoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICBiaXF1YWRQ
cm9jZXNzb3IoKS0+cGFyYW1ldGVyMygpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIHNldE5v
ZGVUeXBlKE5vZGVUeXBlTG93UGFzczJGaWx0ZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5oCShyZXZpc2lv
biAxMTEyMzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9k
ZS5oOjExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTG93UGFzczJG
aWx0ZXJOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgTG93UGFzczJGaWx0ZXJOb2RlX2gKKyNkZWZpbmUgTG93UGFzczJGaWx0ZXJOb2Rl
X2gKKworI2luY2x1ZGUgIkF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmgiCisjaW5jbHVkZSAiQmlx
dWFkUHJvY2Vzc29yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9QYXJh
bTsKKyAgICAKK2NsYXNzIExvd1Bhc3MyRmlsdGVyTm9kZSA6IHB1YmxpYyBBdWRpb0Jhc2ljUHJv
Y2Vzc29yTm9kZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TG93UGFzczJGaWx0
ZXJOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMb3dQYXNzMkZpbHRlck5vZGUoY29u
dGV4dCwgc2FtcGxlUmF0ZSkpOyAgICAgIAorICAgIH0KKworICAgIEF1ZGlvUGFyYW0qIGN1dG9m
ZigpIHsgcmV0dXJuIGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIxKCk7IH0KKyAgICBBdWRp
b1BhcmFtKiByZXNvbmFuY2UoKSB7IHJldHVybiBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVy
MigpOyB9CisgICAgCitwcml2YXRlOgorICAgIExvd1Bhc3MyRmlsdGVyTm9kZShBdWRpb0NvbnRl
eHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKKworICAgIEJpcXVhZFByb2Nlc3NvciogYmlxdWFkUHJv
Y2Vzc29yKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmlxdWFkUHJvY2Vzc29yKj4ocHJvY2Vzc29y
KCkpOyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBMb3dQYXNz
MkZpbHRlck5vZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Mb3dQ
YXNzMkZpbHRlck5vZGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmlkbAkocmV2aXNpb24gMTExMjMzKQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuaWRsOjExMTIzMykKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmlkbAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIGF1ZGlv
IHsKKyAgICAvLyBUd28tcG9sZSBsb3dwYXNzIGZpbHRlcgorICAgIC8vIEZJWE1FOiBkZXNpZ24g
QmlxdWFkTm9kZSBhbmQgdXNlIGluc3RlYWQgb2YgdGhpcworICAgIGludGVyZmFjZSBbCisgICAg
ICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKKyAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QK
KyAgICBdIExvd1Bhc3MyRmlsdGVyTm9kZSA6IEF1ZGlvTm9kZSB7CisgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIGN1dG9mZjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IEF1ZGlvUGFyYW0gcmVzb25hbmNlOworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1Nv
dXJjZU5vZGUuY3BwCShyZXZpc2lvbiAxMTEyMzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHA6MTExMjMzKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykgJiYgRU5BQkxFKFZJREVPKQorCisjaW5j
bHVkZSAiTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmgiCisKKyNpbmNsdWRlICJBdWRpb0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKKyNpbmNsdWRlICJMb2dnaW5n
LmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CisK
Ky8vIFRoZXNlIGFyZSBzb21ld2hhdCBhcmJpdHJhcnkgbGltaXRzLCBidXQgd2UgbmVlZCB0byBk
byBzb21lIGtpbmQgb2Ygc2FuaXR5LWNoZWNraW5nLgorY29uc3QgdW5zaWduZWQgbWluU2FtcGxl
UmF0ZSA9IDgwMDA7Citjb25zdCB1bnNpZ25lZCBtYXhTYW1wbGVSYXRlID0gMTkyMDAwOworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VO
b2RlPiBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6OmNyZWF0ZShBdWRpb0NvbnRleHQqIGNv
bnRleHQsIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZShjb250ZXh0LCBtZWRpYUVsZW1l
bnQpKTsKK30KKworTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpNZWRpYUVsZW1lbnRBdWRp
b1NvdXJjZU5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBIVE1MTWVkaWFFbGVtZW50KiBtZWRp
YUVsZW1lbnQpCisgICAgOiBBdWRpb1NvdXJjZU5vZGUoY29udGV4dCwgY29udGV4dC0+c2FtcGxl
UmF0ZSgpKQorICAgICwgbV9tZWRpYUVsZW1lbnQobWVkaWFFbGVtZW50KQorICAgICwgbV9zb3Vy
Y2VOdW1iZXJPZkNoYW5uZWxzKDApCisgICAgLCBtX3NvdXJjZVNhbXBsZVJhdGUoMCkKK3sKKyAg
ICAvLyBEZWZhdWx0IHRvIHN0ZXJlby4gVGhpcyBjb3VsZCBjaGFuZ2UgZGVwZW5kaW5nIG9uIHdo
YXQgdGhlIG1lZGlhIGVsZW1lbnQgLnNyYyBpcyBzZXQgdG8uCisgICAgYWRkT3V0cHV0KGFkb3B0
UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywgMikpKTsKKworICAgIHNldE5vZGVUeXBlKE5v
ZGVUeXBlTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2UpOworCisgICAgaW5pdGlhbGl6ZSgpOworfQor
CitNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6On5NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGUoKQoreworICAgIG1fbWVkaWFFbGVtZW50LT5zZXRBdWRpb1NvdXJjZU5vZGUoMCk7CisgICAg
dW5pbml0aWFsaXplKCk7Cit9CisKK3ZvaWQgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpz
ZXRGb3JtYXQoc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGZsb2F0IHNvdXJjZVNhbXBsZVJhdGUp
Cit7CisgICAgaWYgKG51bWJlck9mQ2hhbm5lbHMgIT0gbV9zb3VyY2VOdW1iZXJPZkNoYW5uZWxz
IHx8IHNvdXJjZVNhbXBsZVJhdGUgIT0gbV9zb3VyY2VTYW1wbGVSYXRlKSB7CisgICAgICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQgbXVsdGktY2hhbm5lbCBncmVhdGVyIHRoYW4gc3RlcmVvLgorICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUxMTkKKyAg
ICAgICAgaWYgKCFudW1iZXJPZkNoYW5uZWxzIHx8IG51bWJlck9mQ2hhbm5lbHMgPiAyIHx8IHNv
dXJjZVNhbXBsZVJhdGUgPCBtaW5TYW1wbGVSYXRlIHx8IHNvdXJjZVNhbXBsZVJhdGUgPiBtYXhT
YW1wbGVSYXRlKSB7CisgICAgICAgICAgICAvLyBwcm9jZXNzKCkgd2lsbCBnZW5lcmF0ZSBzaWxl
bmNlIGZvciB0aGVzZSB1bmluaXRpYWxpemVkIHZhbHVlcy4KKyAgICAgICAgICAgIExPRyhNZWRp
YSwgIk1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6c2V0Rm9ybWF0KCV1LCAlZikgLSB1bmhh
bmRsZWQgZm9ybWF0IGNoYW5nZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihudW1iZXJPZkNoYW5u
ZWxzKSwgc291cmNlU2FtcGxlUmF0ZSk7CisgICAgICAgICAgICBtX3NvdXJjZU51bWJlck9mQ2hh
bm5lbHMgPSAwOworICAgICAgICAgICAgbV9zb3VyY2VTYW1wbGVSYXRlID0gMDsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fc291cmNlTnVtYmVyT2ZDaGFubmVs
cyA9IG51bWJlck9mQ2hhbm5lbHM7CisgICAgICAgIG1fc291cmNlU2FtcGxlUmF0ZSA9IHNvdXJj
ZVNhbXBsZVJhdGU7CisKKyAgICAgICAgLy8gU3luY2hyb25pemUgd2l0aCBwcm9jZXNzKCkuCisg
ICAgICAgIExvY2tlcjxNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+IGxvY2tlcigqdGhpcyk7
CisKKyAgICAgICAgaWYgKHNvdXJjZVNhbXBsZVJhdGUgIT0gc2FtcGxlUmF0ZSgpKSB7CisgICAg
ICAgICAgICBkb3VibGUgc2NhbGVGYWN0b3IgPSBzb3VyY2VTYW1wbGVSYXRlIC8gc2FtcGxlUmF0
ZSgpOworICAgICAgICAgICAgbV9tdWx0aUNoYW5uZWxSZXNhbXBsZXIgPSBhZG9wdFB0cihuZXcg
TXVsdGlDaGFubmVsUmVzYW1wbGVyKHNjYWxlRmFjdG9yLCBudW1iZXJPZkNoYW5uZWxzKSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBCeXBhc3MgcmVzYW1wbGluZy4KKyAgICAg
ICAgICAgIG1fbXVsdGlDaGFubmVsUmVzYW1wbGVyLmNsZWFyKCk7CisgICAgICAgIH0KKworICAg
ICAgICB7CisgICAgICAgICAgICAvLyBUaGUgY29udGV4dCBtdXN0IGJlIGxvY2tlZCB3aGVuIGNo
YW5naW5nIHRoZSBudW1iZXIgb2Ygb3V0cHV0IGNoYW5uZWxzLgorICAgICAgICAgICAgQXVkaW9D
b250ZXh0OjpBdXRvTG9ja2VyIGNvbnRleHRMb2NrZXIoY29udGV4dCgpKTsKKworICAgICAgICAg
ICAgLy8gRG8gYW55IG5lY2Vzc3NhcnkgcmUtY29uZmlndXJhdGlvbiB0byB0aGUgb3V0cHV0J3Mg
bnVtYmVyIG9mIGNoYW5uZWxzLgorICAgICAgICAgICAgb3V0cHV0KDApLT5zZXROdW1iZXJPZkNo
YW5uZWxzKG51bWJlck9mQ2hhbm5lbHMpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIE1l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6cHJvY2VzcyhzaXplX3QgbnVtYmVyT2ZGcmFtZXMp
Cit7CisgICAgQXVkaW9CdXMqIG91dHB1dEJ1cyA9IG91dHB1dCgwKS0+YnVzKCk7CisKKyAgICBp
ZiAoIW1lZGlhRWxlbWVudCgpIHx8ICFtX3NvdXJjZU51bWJlck9mQ2hhbm5lbHMgfHwgIW1fc291
cmNlU2FtcGxlUmF0ZSkgeworICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIFVzZSBhIHRyeUxvY2soKSB0byBhdm9pZCBjb250ZW50aW9u
IGluIHRoZSByZWFsLXRpbWUgYXVkaW8gdGhyZWFkLgorICAgIC8vIElmIHdlIGZhaWwgdG8gYWNx
dWlyZSB0aGUgbG9jayB0aGVuIHRoZSBIVE1MTWVkaWFFbGVtZW50IG11c3QgYmUgaW4gdGhlIG1p
ZGRsZSBvZgorICAgIC8vIHJlY29uZmlndXJpbmcgaXRzIHBsYXliYWNrIGVuZ2luZSwgc28gd2Ug
b3V0cHV0IHNpbGVuY2UgaW4gdGhpcyBjYXNlLgorICAgIGlmIChtX3Byb2Nlc3NMb2NrLnRyeUxv
Y2soKSkgeworICAgICAgICBpZiAoQXVkaW9Tb3VyY2VQcm92aWRlciogcHJvdmlkZXIgPSBtZWRp
YUVsZW1lbnQoKS0+YXVkaW9Tb3VyY2VQcm92aWRlcigpKSB7CisgICAgICAgICAgICBpZiAobV9t
dWx0aUNoYW5uZWxSZXNhbXBsZXIuZ2V0KCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9z
b3VyY2VTYW1wbGVSYXRlICE9IHNhbXBsZVJhdGUoKSk7CisgICAgICAgICAgICAgICAgbV9tdWx0
aUNoYW5uZWxSZXNhbXBsZXItPnByb2Nlc3MocHJvdmlkZXIsIG91dHB1dEJ1cywgbnVtYmVyT2ZG
cmFtZXMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBCeXBhc3Mg
dGhlIHJlc2FtcGxlciBjb21wbGV0ZWx5IGlmIHRoZSBzb3VyY2UgaXMgYXQgdGhlIGNvbnRleHQn
cyBzYW1wbGUtcmF0ZS4KKyAgICAgICAgICAgICAgICBBU1NFUlQobV9zb3VyY2VTYW1wbGVSYXRl
ID09IHNhbXBsZVJhdGUoKSk7CisgICAgICAgICAgICAgICAgcHJvdmlkZXItPnByb3ZpZGVJbnB1
dChvdXRwdXRCdXMsIG51bWJlck9mRnJhbWVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIEVpdGhlciB0aGlzIHBvcnQgZG9lc24ndCB5ZXQgc3VwcG9y
dCBIVE1MTWVkaWFFbGVtZW50IGF1ZGlvIHN0cmVhbSBhY2Nlc3MsCisgICAgICAgICAgICAvLyBv
ciB0aGUgc3RyZWFtIGlzIG5vdCB5ZXQgYXZhaWxhYmxlLgorICAgICAgICAgICAgb3V0cHV0QnVz
LT56ZXJvKCk7CisgICAgICAgIH0KKyAgICAgICAgbV9wcm9jZXNzTG9jay51bmxvY2soKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBXZSBmYWlsZWQgdG8gYWNxdWlyZSB0aGUgbG9jay4KKyAg
ICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7CisgICAgfQorfQorCit2b2lkIE1lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZTo6cmVzZXQoKQoreworfQorCit2b2lkIE1lZGlhRWxlbWVudEF1ZGlvU291
cmNlTm9kZTo6bG9jaygpCit7CisgICAgcmVmKCk7CisgICAgbV9wcm9jZXNzTG9jay5sb2NrKCk7
Cit9CisKK3ZvaWQgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjp1bmxvY2soKQoreworICAg
IG1fcHJvY2Vzc0xvY2sudW5sb2NrKCk7CisgICAgZGVyZWYoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRB
dWRpb1NvdXJjZU5vZGUuaAkocmV2aXNpb24gMTExMjMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaDoxMTEyMzMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZV9oCisjZGVmaW5lIE1lZGlhRWxlbWVudEF1ZGlvU291cmNl
Tm9kZV9oCisKKyNpZiBFTkFCTEUoVklERU8pCisKKyNpbmNsdWRlICJBdWRpb1NvdXJjZU5vZGUu
aCIKKyNpbmNsdWRlICJBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiSFRN
TE1lZGlhRWxlbWVudC5oIgorI2luY2x1ZGUgIk11bHRpQ2hhbm5lbFJlc2FtcGxlci5oIgorI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRp
b0NvbnRleHQ7CisgICAgCitjbGFzcyBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUgOiBwdWJs
aWMgQXVkaW9Tb3VyY2VOb2RlLCBwdWJsaWMgQXVkaW9Tb3VyY2VQcm92aWRlckNsaWVudCB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2Rl
PiBjcmVhdGUoQXVkaW9Db250ZXh0KiwgSFRNTE1lZGlhRWxlbWVudCopOworCisgICAgdmlydHVh
bCB+TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlKCk7CisKKyAgICBIVE1MTWVkaWFFbGVtZW50
KiBtZWRpYUVsZW1lbnQoKSB7IHJldHVybiBtX21lZGlhRWxlbWVudC5nZXQoKTsgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKworICAgIC8vIEF1ZGlvTm9kZQorICAg
IHZpcnR1YWwgdm9pZCBwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOworICAgIHZpcnR1
YWwgdm9pZCByZXNldCgpOworICAgIAorICAgIC8vIEF1ZGlvU291cmNlUHJvdmlkZXJDbGllbnQK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9ybWF0KHNpemVfdCBudW1iZXJPZkNoYW5uZWxzLCBmbG9h
dCBzYW1wbGVSYXRlKTsKKyAgICAKKyAgICB2b2lkIGxvY2soKTsKKyAgICB2b2lkIHVubG9jaygp
OworCitwcml2YXRlOgorICAgIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZShBdWRpb0NvbnRl
eHQqLCBIVE1MTWVkaWFFbGVtZW50Kik7CisKKyAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4g
bV9tZWRpYUVsZW1lbnQ7CisgICAgTXV0ZXggbV9wcm9jZXNzTG9jazsKKworICAgIHVuc2lnbmVk
IG1fc291cmNlTnVtYmVyT2ZDaGFubmVsczsKKyAgICBkb3VibGUgbV9zb3VyY2VTYW1wbGVSYXRl
OworCisgICAgT3duUHRyPE11bHRpQ2hhbm5lbFJlc2FtcGxlcj4gbV9tdWx0aUNoYW5uZWxSZXNh
bXBsZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
VklERU8pCisKKyNlbmRpZiAvLyBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGVfaApJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVk
aWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmlkbAkocmV2aXNpb24gMTExMjMzKQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaWRsOjExMTIz
MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9T
b3VyY2VOb2RlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworbW9kdWxlIGF1ZGlvIHsKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1X
RUJfQVVESU8mVklERU8sCisgICAgICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0CisgICAgXSBNZWRp
YUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUgOiBBdWRpb1NvdXJjZU5vZGUgeworICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgSFRNTE1lZGlhRWxlbWVudCBtZWRpYUVsZW1lbnQ7CisgICAgfTsKK30K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxl
dGlvbkV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5jcHAJKHJldmlzaW9uIDExMTIzMykJKGZy
b20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmNw
cDoxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRp
b0NvbXBsZXRpb25FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisK
KyNpbmNsdWRlICJPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaCIKKworI2luY2x1ZGUgIkF1
ZGlvQnVmZmVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1Bhc3NSZWZQdHI8T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50PiBPZmZsaW5lQXVk
aW9Db21wbGV0aW9uRXZlbnQ6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBP
ZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQpOworfQorCitQYXNzUmVmUHRyPE9mZmxpbmVBdWRp
b0NvbXBsZXRpb25FdmVudD4gT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50OjpjcmVhdGUoUGFz
c1JlZlB0cjxBdWRpb0J1ZmZlcj4gcmVuZGVyZWRCdWZmZXIpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQocmVuZGVyZWRCdWZmZXIpKTsKK30K
KworT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50OjpPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZl
bnQoKQoreworfQorCisKK09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6T2ZmbGluZUF1ZGlv
Q29tcGxldGlvbkV2ZW50KFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IHJlbmRlcmVkQnVmZmVyKQor
ICAgIDogRXZlbnQoZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQsIHRydWUsIGZhbHNlKQorICAg
ICwgbV9yZW5kZXJlZEJ1ZmZlcihyZW5kZXJlZEJ1ZmZlcikKK3sKK30KKworT2ZmbGluZUF1ZGlv
Q29tcGxldGlvbkV2ZW50Ojp+T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50KCkKK3sKK30KKwor
Y29uc3QgQXRvbWljU3RyaW5nJiBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ6OmludGVyZmFj
ZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yT2Zm
bGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVu
dC5oCShyZXZpc2lvbiAxMTEyMzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxp
bmVBdWRpb0NvbXBsZXRpb25FdmVudC5oOjExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgT2ZmbGluZUF1ZGlvQ29tcGxl
dGlvbkV2ZW50X2gKKyNkZWZpbmUgT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50X2gKKworI2lu
Y2x1ZGUgIkF1ZGlvQnVmZmVyLmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBBdWRpb0J1ZmZlcjsKKyAgICAKK2NsYXNzIE9mZmxpbmVBdWRpb0NvbXBs
ZXRpb25FdmVudCA6IHB1YmxpYyBFdmVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50PiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ+IGNyZWF0ZShQYXNzUmVmUHRyPEF1
ZGlvQnVmZmVyPiByZW5kZXJlZEJ1ZmZlcik7CisgICAgCisgICAgdmlydHVhbCB+T2ZmbGluZUF1
ZGlvQ29tcGxldGlvbkV2ZW50KCk7CisKKyAgICBBdWRpb0J1ZmZlciogcmVuZGVyZWRCdWZmZXIo
KSB7IHJldHVybiBtX3JlbmRlcmVkQnVmZmVyLmdldCgpOyB9CisKKyAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIE9m
ZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCgpOworICAgIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25F
dmVudChQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiByZW5kZXJlZEJ1ZmZlcik7CisKKyAgICBSZWZQ
dHI8QXVkaW9CdWZmZXI+IG1fcmVuZGVyZWRCdWZmZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnRfaApJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZl
bnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2Zm
bGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmlkbAkocmV2aXNpb24gMTExMjMzKQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaWRsOjExMTIz
MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxl
dGlvbkV2ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworbW9kdWxlIGF1ZGlvIHsKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1X
RUJfQVVESU8sCisgICAgICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0CisgICAgXSBPZmZsaW5lQXVk
aW9Db21wbGV0aW9uRXZlbnQgOiBFdmVudCB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBB
dWRpb0J1ZmZlciByZW5kZXJlZEJ1ZmZlcjsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVz
dGluYXRpb25Ob2RlLmNwcAkocmV2aXNpb24gMTExMjMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwOjExMTIzMykKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJPZmZsaW5l
QXVkaW9EZXN0aW5hdGlvbk5vZGUuaCIKKworI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisjaW5jbHVk
ZSAiQXVkaW9Db250ZXh0LmgiCisjaW5jbHVkZSAiSFJURkRhdGFiYXNlTG9hZGVyLmgiCisjaW5j
bHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBzdGQ7CisgCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitjb25zdCBzaXplX3Qg
cmVuZGVyUXVhbnR1bVNpemUgPSAxMjg7ICAgIAorCitPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGU6Ok9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIEF1
ZGlvQnVmZmVyKiByZW5kZXJUYXJnZXQpCisgICAgOiBBdWRpb0Rlc3RpbmF0aW9uTm9kZShjb250
ZXh0LCByZW5kZXJUYXJnZXQtPnNhbXBsZVJhdGUoKSkKKyAgICAsIG1fcmVuZGVyVGFyZ2V0KHJl
bmRlclRhcmdldCkKKyAgICAsIG1fcmVuZGVyVGhyZWFkKDApCisgICAgLCBtX3N0YXJ0ZWRSZW5k
ZXJpbmcoZmFsc2UpCit7CisgICAgbV9yZW5kZXJCdXMgPSBhZG9wdFB0cihuZXcgQXVkaW9CdXMo
cmVuZGVyVGFyZ2V0LT5udW1iZXJPZkNoYW5uZWxzKCksIHJlbmRlclF1YW50dW1TaXplKSk7Cit9
CisKK09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6fk9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9u
Tm9kZSgpCit7CisgICAgdW5pbml0aWFsaXplKCk7Cit9CisKK3ZvaWQgT2ZmbGluZUF1ZGlvRGVz
dGluYXRpb25Ob2RlOjppbml0aWFsaXplKCkKK3sKKyAgICBpZiAoaXNJbml0aWFsaXplZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBdWRpb05vZGU6OmluaXRpYWxpemUoKTsKK30KKwordm9p
ZCBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnVuaW5pdGlhbGl6ZSgpCit7CisgICAgaWYg
KCFpc0luaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3JlbmRlclRo
cmVhZCkgeworICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3JlbmRlclRocmVhZCk7
CisgICAgICAgIG1fcmVuZGVyVGhyZWFkID0gMDsKKyAgICB9CisKKyAgICBBdWRpb05vZGU6OnVu
aW5pdGlhbGl6ZSgpOworfQorCit2b2lkIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6c3Rh
cnRSZW5kZXJpbmcoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJU
KG1fcmVuZGVyVGFyZ2V0LmdldCgpKTsKKyAgICBpZiAoIW1fcmVuZGVyVGFyZ2V0LmdldCgpKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCFtX3N0YXJ0ZWRSZW5kZXJpbmcpIHsKKyAg
ICAgICAgbV9zdGFydGVkUmVuZGVyaW5nID0gdHJ1ZTsKKyAgICAgICAgcmVmKCk7IC8vIFNlZSBj
b3JyZXNwb25kaW5nIGRlcmVmKCkgY2FsbCBpbiBub3RpZnlDb21wbGV0ZURpc3BhdGNoKCkuCisg
ICAgICAgIG1fcmVuZGVyVGhyZWFkID0gY3JlYXRlVGhyZWFkKE9mZmxpbmVBdWRpb0Rlc3RpbmF0
aW9uTm9kZTo6cmVuZGVyRW50cnksIHRoaXMsICJvZmZsaW5lIHJlbmRlcmVyIik7CisgICAgfQor
fQorCisvLyBEbyBvZmZsaW5lIHJlbmRlcmluZyBpbiB0aGlzIHRocmVhZC4KK3ZvaWQgT2ZmbGlu
ZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpyZW5kZXJFbnRyeSh2b2lkKiB0aHJlYWREYXRhKQorewor
ICAgIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZSogZGVzdGluYXRpb25Ob2RlID0gcmVpbnRl
cnByZXRfY2FzdDxPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUqPih0aHJlYWREYXRhKTsKKyAg
ICBBU1NFUlQoZGVzdGluYXRpb25Ob2RlKTsKKyAgICBkZXN0aW5hdGlvbk5vZGUtPnJlbmRlcigp
OworfQorCit2b2lkIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6cmVuZGVyKCkKK3sKKyAg
ICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9yZW5kZXJCdXMuZ2V0KCkp
OworICAgIGlmICghbV9yZW5kZXJCdXMuZ2V0KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBib29sIGNoYW5uZWxzTWF0Y2ggPSBtX3JlbmRlckJ1cy0+bnVtYmVyT2ZDaGFubmVscygpID09
IG1fcmVuZGVyVGFyZ2V0LT5udW1iZXJPZkNoYW5uZWxzKCk7CisgICAgQVNTRVJUKGNoYW5uZWxz
TWF0Y2gpOworICAgIGlmICghY2hhbm5lbHNNYXRjaCkKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICBib29sIGlzUmVuZGVyQnVzQWxsb2NhdGVkID0gbV9yZW5kZXJCdXMtPmxlbmd0aCgp
ID49IHJlbmRlclF1YW50dW1TaXplOworICAgIEFTU0VSVChpc1JlbmRlckJ1c0FsbG9jYXRlZCk7
CisgICAgaWYgKCFpc1JlbmRlckJ1c0FsbG9jYXRlZCkKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAvLyBTeW5jaHJvbml6ZSB3aXRoIEhSVEZEYXRhYmFzZUxvYWRlci4KKyAgICAvLyBU
aGUgZGF0YWJhc2UgbXVzdCBiZSBsb2FkZWQgYmVmb3JlIHdlIGNhbiBwcm9jZWVkLgorICAgIEhS
VEZEYXRhYmFzZUxvYWRlciogbG9hZGVyID0gSFJURkRhdGFiYXNlTG9hZGVyOjpsb2FkZXIoKTsK
KyAgICBBU1NFUlQobG9hZGVyKTsKKyAgICBpZiAoIWxvYWRlcikKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGxvYWRlci0+d2FpdEZvckxvYWRlclRocmVhZENvbXBsZXRpb24oKTsKKyAgICAg
ICAgCisgICAgLy8gQnJlYWsgdXAgdGhlIHJlbmRlciB0YXJnZXQgaW50byBzbWFsbGVyICJyZW5k
ZXIgcXVhbnRpemUiIHNpemVkIHBpZWNlcy4KKyAgICAvLyBSZW5kZXIgdW50aWwgd2UncmUgZmlu
aXNoZWQuCisgICAgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcyA9IG1fcmVuZGVyVGFyZ2V0LT5sZW5n
dGgoKTsKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzID0gbV9yZW5kZXJUYXJnZXQtPm51
bWJlck9mQ2hhbm5lbHMoKTsKKworICAgIHVuc2lnbmVkIG4gPSAwOworICAgIHdoaWxlIChmcmFt
ZXNUb1Byb2Nlc3MgPiAwKSB7CisgICAgICAgIC8vIFJlbmRlciBvbmUgcmVuZGVyIHF1YW50dW0u
CisgICAgICAgIHByb3ZpZGVJbnB1dChtX3JlbmRlckJ1cy5nZXQoKSwgcmVuZGVyUXVhbnR1bVNp
emUpOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IGZyYW1lc0F2YWlsYWJsZVRvQ29weSA9IG1p
bihmcmFtZXNUb1Byb2Nlc3MsIHJlbmRlclF1YW50dW1TaXplKTsKKyAgICAgICAgCisgICAgICAg
IGZvciAodW5zaWduZWQgY2hhbm5lbEluZGV4ID0gMDsgY2hhbm5lbEluZGV4IDwgbnVtYmVyT2ZD
aGFubmVsczsgKytjaGFubmVsSW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBzb3Vy
Y2UgPSBtX3JlbmRlckJ1cy0+Y2hhbm5lbChjaGFubmVsSW5kZXgpLT5kYXRhKCk7CisgICAgICAg
ICAgICBmbG9hdCogZGVzdGluYXRpb24gPSBtX3JlbmRlclRhcmdldC0+Z2V0Q2hhbm5lbERhdGEo
Y2hhbm5lbEluZGV4KS0+ZGF0YSgpOworICAgICAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uICsg
biwgc291cmNlLCBzaXplb2YoZmxvYXQpICogZnJhbWVzQXZhaWxhYmxlVG9Db3B5KTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgbiArPSBmcmFtZXNBdmFpbGFibGVUb0NvcHk7CisgICAg
ICAgIGZyYW1lc1RvUHJvY2VzcyAtPSBmcmFtZXNBdmFpbGFibGVUb0NvcHk7CisgICAgfQorICAg
IAorICAgIC8vIE91ciB3b3JrIGlzIGRvbmUuIExldCB0aGUgQXVkaW9Db250ZXh0IGtub3cuCisg
ICAgY2FsbE9uTWFpblRocmVhZChub3RpZnlDb21wbGV0ZURpc3BhdGNoLCB0aGlzKTsKK30KKwor
dm9pZCBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6Om5vdGlmeUNvbXBsZXRlRGlzcGF0Y2go
dm9pZCogdXNlckRhdGEpCit7CisgICAgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlKiBkZXN0
aW5hdGlvbk5vZGUgPSBzdGF0aWNfY2FzdDxPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUqPih1
c2VyRGF0YSk7CisgICAgQVNTRVJUKGRlc3RpbmF0aW9uTm9kZSk7CisgICAgaWYgKCFkZXN0aW5h
dGlvbk5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIGRlc3RpbmF0aW9uTm9kZS0+bm90aWZ5
Q29tcGxldGUoKTsKKyAgICBkZXN0aW5hdGlvbk5vZGUtPmRlcmVmKCk7Cit9CisKK3ZvaWQgT2Zm
bGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpub3RpZnlDb21wbGV0ZSgpCit7CisgICAgY29udGV4
dCgpLT5maXJlQ29tcGxldGlvbkV2ZW50KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25O
b2RlLmgJKHJldmlzaW9uIDExMTIzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2Zm
bGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmg6MTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBPZmZsaW5lQXVkaW9EZXN0
aW5hdGlvbk5vZGVfaAorI2RlZmluZSBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGVfaAorCisj
aW5jbHVkZSAiQXVkaW9CdWZmZXIuaCIKKyNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uTm9kZS5o
IgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBBdWRpb0J1czsKK2NsYXNzIEF1ZGlvQ29udGV4dDsKKyAgICAKK2NsYXNzIE9mZmxpbmVBdWRp
b0Rlc3RpbmF0aW9uTm9kZSA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uTm9kZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlPiBjcmVh
dGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBBdWRpb0J1ZmZlciogcmVuZGVyVGFyZ2V0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGUoY29udGV4dCwgcmVuZGVyVGFyZ2V0KSk7ICAgICAKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5P
ZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUoKTsKKyAgICAKKyAgICAvLyBBdWRpb05vZGUgICAK
KyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIHZpcnR1YWwgdm9pZCB1bmluaXRp
YWxpemUoKTsKKyAgICB2aXJ0dWFsIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBt
X3JlbmRlclRhcmdldC0+c2FtcGxlUmF0ZSgpOyB9CisKKyAgICB2b2lkIHN0YXJ0UmVuZGVyaW5n
KCk7CisgICAgCitwcml2YXRlOgorICAgIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZShBdWRp
b0NvbnRleHQqLCBBdWRpb0J1ZmZlciogcmVuZGVyVGFyZ2V0KTsKKworICAgIC8vIFRoaXMgQXVk
aW9Ob2RlIHJlbmRlcnMgaW50byB0aGlzIEF1ZGlvQnVmZmVyLgorICAgIFJlZlB0cjxBdWRpb0J1
ZmZlcj4gbV9yZW5kZXJUYXJnZXQ7CisgICAgCisgICAgLy8gVGVtcG9yYXJ5IEF1ZGlvQnVzIGZv
ciBlYWNoIHJlbmRlciBxdWFudHVtLgorICAgIE93blB0cjxBdWRpb0J1cz4gbV9yZW5kZXJCdXM7
CisgICAgCisgICAgLy8gUmVuZGVyaW5nIHRocmVhZC4KKyAgICB2b2xhdGlsZSBUaHJlYWRJZGVu
dGlmaWVyIG1fcmVuZGVyVGhyZWFkOworICAgIGJvb2wgbV9zdGFydGVkUmVuZGVyaW5nOworICAg
IHN0YXRpYyB2b2lkIHJlbmRlckVudHJ5KHZvaWQqIHRocmVhZERhdGEpOworICAgIHZvaWQgcmVu
ZGVyKCk7CisgICAgCisgICAgLy8gRm9yIGNvbXBsZXRpb24gY2FsbGJhY2sgb24gbWFpbiB0aHJl
YWQuCisgICAgc3RhdGljIHZvaWQgbm90aWZ5Q29tcGxldGVEaXNwYXRjaCh2b2lkKiB1c2VyRGF0
YSk7CisgICAgdm9pZCBub3RpZnlDb21wbGV0ZSgpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2Vy
LmNwcAkocmV2aXNpb24gMTExMjMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFs
dGltZUFuYWx5c2VyLmNwcDoxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL1JlYWx0aW1lQW5hbHlzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJ
TykKKworI2luY2x1ZGUgIlJlYWx0aW1lQW5hbHlzZXIuaCIKKworI2luY2x1ZGUgIkF1ZGlvQnVz
LmgiCisjaW5jbHVkZSAiQXVkaW9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJGRlRGcmFtZS5oIgor
CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHd0
Zi9Db21wbGV4Lmg+CisjaW5jbHVkZSA8d3RmL0Zsb2F0MzJBcnJheS5oPgorI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3
dGYvVWludDhBcnJheS5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NvbnN0IGRvdWJsZSBSZWFsdGltZUFuYWx5c2VyOjpEZWZhdWx0U21vb3RoaW5n
VGltZUNvbnN0YW50ICA9IDAuODsKK2NvbnN0IGRvdWJsZSBSZWFsdGltZUFuYWx5c2VyOjpEZWZh
dWx0TWluRGVjaWJlbHMgPSAtMTAwOworY29uc3QgZG91YmxlIFJlYWx0aW1lQW5hbHlzZXI6OkRl
ZmF1bHRNYXhEZWNpYmVscyA9IC0zMDsKKworY29uc3QgdW5zaWduZWQgUmVhbHRpbWVBbmFseXNl
cjo6RGVmYXVsdEZGVFNpemUgPSAyMDQ4OworLy8gQWxsIEZGVCBpbXBsZW1lbnRhdGlvbnMgYXJl
IGV4cGVjdGVkIHRvIGhhbmRsZSBwb3dlci1vZi10d28gc2l6ZXMgTWluRkZUU2l6ZSA8PSBzaXpl
IDw9IE1heEZGVFNpemUuCitjb25zdCB1bnNpZ25lZCBSZWFsdGltZUFuYWx5c2VyOjpNaW5GRlRT
aXplID0gMTI4OworY29uc3QgdW5zaWduZWQgUmVhbHRpbWVBbmFseXNlcjo6TWF4RkZUU2l6ZSA9
IDIwNDg7Citjb25zdCB1bnNpZ25lZCBSZWFsdGltZUFuYWx5c2VyOjpJbnB1dEJ1ZmZlclNpemUg
PSBSZWFsdGltZUFuYWx5c2VyOjpNYXhGRlRTaXplICogMjsKKworUmVhbHRpbWVBbmFseXNlcjo6
UmVhbHRpbWVBbmFseXNlcigpCisgICAgOiBtX2lucHV0QnVmZmVyKElucHV0QnVmZmVyU2l6ZSkK
KyAgICAsIG1fd3JpdGVJbmRleCgwKQorICAgICwgbV9mZnRTaXplKERlZmF1bHRGRlRTaXplKQor
ICAgICwgbV9tYWduaXR1ZGVCdWZmZXIoRGVmYXVsdEZGVFNpemUgLyAyKQorICAgICwgbV9zbW9v
dGhpbmdUaW1lQ29uc3RhbnQoRGVmYXVsdFNtb290aGluZ1RpbWVDb25zdGFudCkKKyAgICAsIG1f
bWluRGVjaWJlbHMoRGVmYXVsdE1pbkRlY2liZWxzKQorICAgICwgbV9tYXhEZWNpYmVscyhEZWZh
dWx0TWF4RGVjaWJlbHMpCit7CisgICAgbV9hbmFseXNpc0ZyYW1lID0gYWRvcHRQdHIobmV3IEZG
VEZyYW1lKERlZmF1bHRGRlRTaXplKSk7Cit9CisKK1JlYWx0aW1lQW5hbHlzZXI6On5SZWFsdGlt
ZUFuYWx5c2VyKCkKK3sKK30KKwordm9pZCBSZWFsdGltZUFuYWx5c2VyOjpyZXNldCgpCit7Cisg
ICAgbV93cml0ZUluZGV4ID0gMDsKKyAgICBtX2lucHV0QnVmZmVyLnplcm8oKTsKKyAgICBtX21h
Z25pdHVkZUJ1ZmZlci56ZXJvKCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVBbmFseXNlcjo6c2V0RmZ0
U2l6ZShzaXplX3Qgc2l6ZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAg
Ly8gT25seSBhbGxvdyBwb3dlcnMgb2YgdHdvLgorICAgIHVuc2lnbmVkIGxvZzJzaXplID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGxvZzIoc2l6ZSkpOworICAgIGJvb2wgaXNQT1QoMVVMIDw8IGxv
ZzJzaXplID09IHNpemUpOworCisgICAgaWYgKCFpc1BPVCB8fCBzaXplID4gTWF4RkZUU2l6ZSB8
fCBzaXplIDwgTWluRkZUU2l6ZSkgeworICAgICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgZ29v
ZCB0byBhbHNvIHNldCBhbiBleGNlcHRpb24uCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAobV9mZnRTaXplICE9IHNpemUpIHsKKyAgICAgICAgbV9hbmFseXNpc0ZyYW1lID0gYWRv
cHRQdHIobmV3IEZGVEZyYW1lKHNpemUpKTsKKyAgICAgICAgLy8gbV9tYWduaXR1ZGVCdWZmZXIg
aGFzIHNpemUgPSBmZnRTaXplIC8gMiBiZWNhdXNlIGl0IGNvbnRhaW5zIGZsb2F0cyByZWR1Y2Vk
IGZyb20gY29tcGxleCB2YWx1ZXMgaW4gbV9hbmFseXNpc0ZyYW1lLgorICAgICAgICBtX21hZ25p
dHVkZUJ1ZmZlci5hbGxvY2F0ZShzaXplIC8gMik7CisgICAgICAgIG1fZmZ0U2l6ZSA9IHNpemU7
CisgICAgfQorfQorCit2b2lkIFJlYWx0aW1lQW5hbHlzZXI6OndyaXRlSW5wdXQoQXVkaW9CdXMq
IGJ1cywgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICBib29sIGlzQnVzR29vZCA9IGJ1
cyAmJiBidXMtPm51bWJlck9mQ2hhbm5lbHMoKSA+IDAgJiYgYnVzLT5jaGFubmVsKDApLT5sZW5n
dGgoKSA+PSBmcmFtZXNUb1Byb2Nlc3M7CisgICAgQVNTRVJUKGlzQnVzR29vZCk7CisgICAgaWYg
KCFpc0J1c0dvb2QpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgLy8gRklYTUUgOiBh
bGxvdyB0byB3b3JrIHdpdGggbm9uLUZGVFNpemUgZGl2aXNpYmxlIGNodW5raW5nCisgICAgYm9v
bCBpc0Rlc3RpbmF0aW9uR29vZCA9IG1fd3JpdGVJbmRleCA8IG1faW5wdXRCdWZmZXIuc2l6ZSgp
ICYmIG1fd3JpdGVJbmRleCArIGZyYW1lc1RvUHJvY2VzcyA8PSBtX2lucHV0QnVmZmVyLnNpemUo
KTsKKyAgICBBU1NFUlQoaXNEZXN0aW5hdGlvbkdvb2QpOworICAgIGlmICghaXNEZXN0aW5hdGlv
bkdvb2QpCisgICAgICAgIHJldHVybjsgICAgCisgICAgCisgICAgLy8gUGVyZm9ybSByZWFsLXRp
bWUgYW5hbHlzaXMKKyAgICAvLyBGSVhNRSA6IGZvciBub3cganVzdCB1c2UgbGVmdCBjaGFubmVs
IChtdXN0IG1peCBpZiBzdGVyZW8gc291cmNlKQorICAgIGNvbnN0IGZsb2F0KiBzb3VyY2UgPSBi
dXMtPmNoYW5uZWwoMCktPmRhdGEoKTsKKworICAgIC8vIFRoZSBzb3VyY2UgaGFzIGFscmVhZHkg
YmVlbiBzYW5pdHkgY2hlY2tlZCB3aXRoIGlzQnVzR29vZCBhYm92ZS4KKyAgICAKKyAgICBtZW1j
cHkobV9pbnB1dEJ1ZmZlci5kYXRhKCkgKyBtX3dyaXRlSW5kZXgsIHNvdXJjZSwgc2l6ZW9mKGZs
b2F0KSAqIGZyYW1lc1RvUHJvY2Vzcyk7CisKKyAgICBtX3dyaXRlSW5kZXggKz0gZnJhbWVzVG9Q
cm9jZXNzOworICAgIGlmIChtX3dyaXRlSW5kZXggPj0gSW5wdXRCdWZmZXJTaXplKQorICAgICAg
ICBtX3dyaXRlSW5kZXggPSAwOworfQorCituYW1lc3BhY2UgeworCit2b2lkIGFwcGx5V2luZG93
KGZsb2F0KiBwLCBzaXplX3QgbikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IAorICAgIC8vIEJsYWNrbWFuIHdpbmRvdworICAgIGRvdWJsZSBhbHBoYSA9IDAuMTY7CisgICAg
ZG91YmxlIGEwID0gMC41ICogKDEgLSBhbHBoYSk7CisgICAgZG91YmxlIGExID0gMC41OworICAg
IGRvdWJsZSBhMiA9IDAuNSAqIGFscGhhOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBuOyArK2kpIHsKKyAgICAgICAgZG91YmxlIHggPSBzdGF0aWNfY2FzdDxkb3VibGU+KGkp
IC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihuKTsKKyAgICAgICAgZG91YmxlIHdpbmRvdyA9IGEwIC0g
YTEgKiBjb3MoMiAqIHBpRG91YmxlICogeCkgKyBhMiAqIGNvcyg0ICogcGlEb3VibGUgKiB4KTsK
KyAgICAgICAgcFtpXSAqPSBmbG9hdCh3aW5kb3cpOworICAgIH0KK30KKworfSAvLyBuYW1lc3Bh
Y2UKKwordm9pZCBSZWFsdGltZUFuYWx5c2VyOjpkb0ZGVEFuYWx5c2lzKCkKK3sgICAgCisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIC8vIFVucm9sbCB0aGUgaW5wdXQgYnVmZmVy
IGludG8gYSB0ZW1wb3JhcnkgYnVmZmVyLCB3aGVyZSB3ZSdsbCBhcHBseSBhbiBhbmFseXNpcyB3
aW5kb3cgZm9sbG93ZWQgYnkgYW4gRkZULgorICAgIHNpemVfdCBmZnRTaXplID0gdGhpcy0+ZmZ0
U2l6ZSgpOworICAgIAorICAgIEF1ZGlvRmxvYXRBcnJheSB0ZW1wb3JhcnlCdWZmZXIoZmZ0U2l6
ZSk7CisgICAgZmxvYXQqIGlucHV0QnVmZmVyID0gbV9pbnB1dEJ1ZmZlci5kYXRhKCk7CisgICAg
ZmxvYXQqIHRlbXBQID0gdGVtcG9yYXJ5QnVmZmVyLmRhdGEoKTsKKworICAgIC8vIFRha2UgdGhl
IHByZXZpb3VzIGZmdFNpemUgdmFsdWVzIGZyb20gdGhlIGlucHV0IGJ1ZmZlciBhbmQgY29weSBp
bnRvIHRoZSB0ZW1wb3JhcnkgYnVmZmVyLgorICAgIHVuc2lnbmVkIHdyaXRlSW5kZXggPSBtX3dy
aXRlSW5kZXg7CisgICAgaWYgKHdyaXRlSW5kZXggPCBmZnRTaXplKSB7CisgICAgICAgIG1lbWNw
eSh0ZW1wUCwgaW5wdXRCdWZmZXIgKyB3cml0ZUluZGV4IC0gZmZ0U2l6ZSArIElucHV0QnVmZmVy
U2l6ZSwgc2l6ZW9mKCp0ZW1wUCkgKiAoZmZ0U2l6ZSAtIHdyaXRlSW5kZXgpKTsKKyAgICAgICAg
bWVtY3B5KHRlbXBQICsgZmZ0U2l6ZSAtIHdyaXRlSW5kZXgsIGlucHV0QnVmZmVyLCBzaXplb2Yo
KnRlbXBQKSAqIHdyaXRlSW5kZXgpOworICAgIH0gZWxzZSAKKyAgICAgICAgbWVtY3B5KHRlbXBQ
LCBpbnB1dEJ1ZmZlciArIHdyaXRlSW5kZXggLSBmZnRTaXplLCBzaXplb2YoKnRlbXBQKSAqIGZm
dFNpemUpOworCisgICAgCisgICAgLy8gV2luZG93IHRoZSBpbnB1dCBzYW1wbGVzLgorICAgIGFw
cGx5V2luZG93KHRlbXBQLCBmZnRTaXplKTsKKyAgICAKKyAgICAvLyBEbyB0aGUgYW5hbHlzaXMu
CisgICAgbV9hbmFseXNpc0ZyYW1lLT5kb0ZGVCh0ZW1wUCk7CisKKyAgICBmbG9hdCogcmVhbFAg
PSBtX2FuYWx5c2lzRnJhbWUtPnJlYWxEYXRhKCk7CisgICAgZmxvYXQqIGltYWdQID0gbV9hbmFs
eXNpc0ZyYW1lLT5pbWFnRGF0YSgpOworCisgICAgLy8gQmxvdyBhd2F5IHRoZSBwYWNrZWQgbnlx
dWlzdCBjb21wb25lbnQuCisgICAgaW1hZ1BbMF0gPSAwOworICAgIAorICAgIC8vIE5vcm1hbGl6
ZSBzbyB0aGFuIGFuIGlucHV0IHNpbmUgd2F2ZSBhdCAwZEJmcyByZWdpc3RlcnMgYXMgMGRCZnMg
KHVuZG8gRkZUIHNjYWxpbmcgZmFjdG9yKS4KKyAgICBjb25zdCBkb3VibGUgbWFnbml0dWRlU2Nh
bGUgPSAxLjAgLyBEZWZhdWx0RkZUU2l6ZTsKKworICAgIC8vIEEgdmFsdWUgb2YgMCBkb2VzIG5v
IGF2ZXJhZ2luZyB3aXRoIHRoZSBwcmV2aW91cyByZXN1bHQuICBMYXJnZXIgdmFsdWVzIHByb2R1
Y2Ugc2xvd2VyLCBidXQgc21vb3RoZXIgY2hhbmdlcy4KKyAgICBkb3VibGUgayA9IG1fc21vb3Ro
aW5nVGltZUNvbnN0YW50OworICAgIGsgPSBtYXgoMC4wLCBrKTsKKyAgICBrID0gbWluKDEuMCwg
ayk7ICAgIAorICAgIAorICAgIC8vIENvbnZlcnQgdGhlIGFuYWx5c2lzIGRhdGEgZnJvbSBjb21w
bGV4IHRvIG1hZ25pdHVkZSBhbmQgYXZlcmFnZSB3aXRoIHRoZSBwcmV2aW91cyByZXN1bHQuCisg
ICAgZmxvYXQqIGRlc3RpbmF0aW9uID0gbWFnbml0dWRlQnVmZmVyKCkuZGF0YSgpOworICAgIHNp
emVfdCBuID0gbWFnbml0dWRlQnVmZmVyKCkuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbjsgKytpKSB7CisgICAgICAgIENvbXBsZXggYyhyZWFsUFtpXSwgaW1hZ1BbaV0pOwor
ICAgICAgICBkb3VibGUgc2NhbGFyTWFnbml0dWRlID0gYWJzKGMpICogbWFnbml0dWRlU2NhbGU7
ICAgICAgICAKKyAgICAgICAgZGVzdGluYXRpb25baV0gPSBmbG9hdChrICogZGVzdGluYXRpb25b
aV0gKyAoMSAtIGspICogc2NhbGFyTWFnbml0dWRlKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVhbHRp
bWVBbmFseXNlcjo6Z2V0RmxvYXRGcmVxdWVuY3lEYXRhKEZsb2F0MzJBcnJheSogZGVzdGluYXRp
b25BcnJheSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKCFkZXN0
aW5hdGlvbkFycmF5KQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGRvRkZUQW5hbHlz
aXMoKTsKKyAgICAKKyAgICAvLyBDb252ZXJ0IGZyb20gbGluZWFyIG1hZ25pdHVkZSB0byBmbG9h
dGluZy1wb2ludCBkZWNpYmVscy4KKyAgICBjb25zdCBkb3VibGUgbWluRGVjaWJlbHMgPSBtX21p
bkRlY2liZWxzOworICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCA9IG1hZ25pdHVkZUJ1ZmZlcigp
LnNpemUoKTsKKyAgICBzaXplX3QgbGVuID0gbWluKHNvdXJjZUxlbmd0aCwgZGVzdGluYXRpb25B
cnJheS0+bGVuZ3RoKCkpOworICAgIGlmIChsZW4gPiAwKSB7CisgICAgICAgIGNvbnN0IGZsb2F0
KiBzb3VyY2UgPSBtYWduaXR1ZGVCdWZmZXIoKS5kYXRhKCk7CisgICAgICAgIGZsb2F0KiBkZXN0
aW5hdGlvbiA9IGRlc3RpbmF0aW9uQXJyYXktPmRhdGEoKTsKKyAgICAgICAgCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICAgICAgZmxvYXQgbGlu
ZWFyVmFsdWUgPSBzb3VyY2VbaV07CisgICAgICAgICAgICBkb3VibGUgZGJNYWcgPSAhbGluZWFy
VmFsdWUgPyBtaW5EZWNpYmVscyA6IEF1ZGlvVXRpbGl0aWVzOjpsaW5lYXJUb0RlY2liZWxzKGxp
bmVhclZhbHVlKTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldID0gZmxvYXQoZGJNYWcpOwor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFJlYWx0aW1lQW5hbHlzZXI6OmdldEJ5dGVGcmVx
dWVuY3lEYXRhKFVpbnQ4QXJyYXkqIGRlc3RpbmF0aW9uQXJyYXkpCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKworICAgIGlmICghZGVzdGluYXRpb25BcnJheSkKKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICBkb0ZGVEFuYWx5c2lzKCk7CisgICAgCisgICAgLy8gQ29udmVy
dCBmcm9tIGxpbmVhciBtYWduaXR1ZGUgdG8gdW5zaWduZWQtYnl0ZSBkZWNpYmVscy4KKyAgICB1
bnNpZ25lZCBzb3VyY2VMZW5ndGggPSBtYWduaXR1ZGVCdWZmZXIoKS5zaXplKCk7CisgICAgc2l6
ZV90IGxlbiA9IG1pbihzb3VyY2VMZW5ndGgsIGRlc3RpbmF0aW9uQXJyYXktPmxlbmd0aCgpKTsK
KyAgICBpZiAobGVuID4gMCkgeworICAgICAgICBjb25zdCBkb3VibGUgcmFuZ2VTY2FsZUZhY3Rv
ciA9IG1fbWF4RGVjaWJlbHMgPT0gbV9taW5EZWNpYmVscyA/IDEgOiAxIC8gKG1fbWF4RGVjaWJl
bHMgLSBtX21pbkRlY2liZWxzKTsKKyAgICAgICAgY29uc3QgZG91YmxlIG1pbkRlY2liZWxzID0g
bV9taW5EZWNpYmVsczsKKworICAgICAgICBjb25zdCBmbG9hdCogc291cmNlID0gbWFnbml0dWRl
QnVmZmVyKCkuZGF0YSgpOworICAgICAgICB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiA9IGRl
c3RpbmF0aW9uQXJyYXktPmRhdGEoKTsgICAgICAgIAorICAgICAgICAKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgICAgICBmbG9hdCBsaW5lYXJW
YWx1ZSA9IHNvdXJjZVtpXTsKKyAgICAgICAgICAgIGRvdWJsZSBkYk1hZyA9ICFsaW5lYXJWYWx1
ZSA/IG1pbkRlY2liZWxzIDogQXVkaW9VdGlsaXRpZXM6OmxpbmVhclRvRGVjaWJlbHMobGluZWFy
VmFsdWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGUgcmFuZ2UgbV9taW5EZWNp
YmVscyB0byBtX21heERlY2liZWxzIHdpbGwgYmUgc2NhbGVkIHRvIGJ5dGUgdmFsdWVzIGZyb20g
MCB0byBVQ0hBUl9NQVguCisgICAgICAgICAgICBkb3VibGUgc2NhbGVkVmFsdWUgPSBVQ0hBUl9N
QVggKiAoZGJNYWcgLSBtaW5EZWNpYmVscykgKiByYW5nZVNjYWxlRmFjdG9yOworCisgICAgICAg
ICAgICAvLyBDbGlwIHRvIHZhbGlkIHJhbmdlLgorICAgICAgICAgICAgaWYgKHNjYWxlZFZhbHVl
IDwgMCkKKyAgICAgICAgICAgICAgICBzY2FsZWRWYWx1ZSA9IDA7CisgICAgICAgICAgICBpZiAo
c2NhbGVkVmFsdWUgPiBVQ0hBUl9NQVgpCisgICAgICAgICAgICAgICAgc2NhbGVkVmFsdWUgPSBV
Q0hBUl9NQVg7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc2NhbGVkVmFsdWUpOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIFJlYWx0aW1lQW5hbHlzZXI6OmdldEJ5dGVUaW1lRG9tYWluRGF0YShVaW50OEFy
cmF5KiBkZXN0aW5hdGlvbkFycmF5KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisK
KyAgICBpZiAoIWRlc3RpbmF0aW9uQXJyYXkpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgdW5zaWduZWQgZmZ0U2l6ZSA9IHRoaXMtPmZmdFNpemUoKTsKKyAgICBzaXplX3QgbGVuID0g
bWluKGZmdFNpemUsIGRlc3RpbmF0aW9uQXJyYXktPmxlbmd0aCgpKTsKKyAgICBpZiAobGVuID4g
MCkgeworICAgICAgICBib29sIGlzSW5wdXRCdWZmZXJHb29kID0gbV9pbnB1dEJ1ZmZlci5zaXpl
KCkgPT0gSW5wdXRCdWZmZXJTaXplICYmIG1faW5wdXRCdWZmZXIuc2l6ZSgpID4gZmZ0U2l6ZTsK
KyAgICAgICAgQVNTRVJUKGlzSW5wdXRCdWZmZXJHb29kKTsKKyAgICAgICAgaWYgKCFpc0lucHV0
QnVmZmVyR29vZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBmbG9hdCogaW5wdXRC
dWZmZXIgPSBtX2lucHV0QnVmZmVyLmRhdGEoKTsgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBj
aGFyKiBkZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uQXJyYXktPmRhdGEoKTsKKyAgICAgICAgCisg
ICAgICAgIHVuc2lnbmVkIHdyaXRlSW5kZXggPSBtX3dyaXRlSW5kZXg7CisKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgICAgICAvLyBCdWZmZXIg
YWNjZXNzIGlzIHByb3RlY3RlZCBkdWUgdG8gbW9kdWxvIG9wZXJhdGlvbi4KKyAgICAgICAgICAg
IGZsb2F0IHZhbHVlID0gaW5wdXRCdWZmZXJbKGkgKyB3cml0ZUluZGV4IC0gZmZ0U2l6ZSArIElu
cHV0QnVmZmVyU2l6ZSkgJSBJbnB1dEJ1ZmZlclNpemVdOworCisgICAgICAgICAgICAvLyBTY2Fs
ZSBmcm9tIG5vbWluYWwgLTEgLT4gKzEgdG8gdW5zaWduZWQgYnl0ZS4KKyAgICAgICAgICAgIGRv
dWJsZSBzY2FsZWRWYWx1ZSA9IDEyOCAqICh2YWx1ZSArIDEpOworCisgICAgICAgICAgICAvLyBD
bGlwIHRvIHZhbGlkIHJhbmdlLgorICAgICAgICAgICAgaWYgKHNjYWxlZFZhbHVlIDwgMCkKKyAg
ICAgICAgICAgICAgICBzY2FsZWRWYWx1ZSA9IDA7CisgICAgICAgICAgICBpZiAoc2NhbGVkVmFs
dWUgPiBVQ0hBUl9NQVgpCisgICAgICAgICAgICAgICAgc2NhbGVkVmFsdWUgPSBVQ0hBUl9NQVg7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcj4oc2NhbGVkVmFsdWUpOworICAgICAgICB9CisgICAgfQorfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2Vy
LmgJKHJldmlzaW9uIDExMTIzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRp
bWVBbmFseXNlci5oOjExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
UmVhbHRpbWVBbmFseXNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFJlYWx0aW1lQW5hbHlzZXJfaAorI2RlZmluZSBSZWFsdGltZUFuYWx5
c2VyX2gKKworI2luY2x1ZGUgIkF1ZGlvQXJyYXkuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb0J1czsKK2NsYXNzIEZGVEZyYW1l
OworCitjbGFzcyBSZWFsdGltZUFuYWx5c2VyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShS
ZWFsdGltZUFuYWx5c2VyKTsKK3B1YmxpYzoKKyAgICBSZWFsdGltZUFuYWx5c2VyKCk7CisgICAg
dmlydHVhbCB+UmVhbHRpbWVBbmFseXNlcigpOworICAgIAorICAgIHZvaWQgcmVzZXQoKTsKKwor
ICAgIHNpemVfdCBmZnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9mZnRTaXplOyB9CisgICAgdm9p
ZCBzZXRGZnRTaXplKHNpemVfdCBzaXplKTsKKworICAgIHVuc2lnbmVkIGZyZXF1ZW5jeUJpbkNv
dW50KCkgY29uc3QgeyByZXR1cm4gbV9mZnRTaXplIC8gMjsgfQorCisgICAgdm9pZCBzZXRNaW5E
ZWNpYmVscyhmbG9hdCBrKSB7IG1fbWluRGVjaWJlbHMgPSBrOyB9CisgICAgZmxvYXQgbWluRGVj
aWJlbHMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV9taW5EZWNpYmVscyk7
IH0KKworICAgIHZvaWQgc2V0TWF4RGVjaWJlbHMoZmxvYXQgaykgeyBtX21heERlY2liZWxzID0g
azsgfQorICAgIGZsb2F0IG1heERlY2liZWxzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG1fbWF4RGVjaWJlbHMpOyB9CisKKyAgICB2b2lkIHNldFNtb290aGluZ1RpbWVDb25z
dGFudChmbG9hdCBrKSB7IG1fc21vb3RoaW5nVGltZUNvbnN0YW50ID0gazsgfQorICAgIGZsb2F0
IHNtb290aGluZ1RpbWVDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0
PihtX3Ntb290aGluZ1RpbWVDb25zdGFudCk7IH0KKworICAgIHZvaWQgZ2V0RmxvYXRGcmVxdWVu
Y3lEYXRhKEZsb2F0MzJBcnJheSopOworICAgIHZvaWQgZ2V0Qnl0ZUZyZXF1ZW5jeURhdGEoVWlu
dDhBcnJheSopOworICAgIHZvaWQgZ2V0Qnl0ZVRpbWVEb21haW5EYXRhKFVpbnQ4QXJyYXkqKTsK
KworICAgIC8vIFRoZSBhdWRpbyB0aHJlYWQgd3JpdGVzIGlucHV0IGRhdGEgaGVyZS4KKyAgICB2
b2lkIHdyaXRlSW5wdXQoQXVkaW9CdXMqLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKworICAg
IHN0YXRpYyBjb25zdCBkb3VibGUgRGVmYXVsdFNtb290aGluZ1RpbWVDb25zdGFudDsKKyAgICBz
dGF0aWMgY29uc3QgZG91YmxlIERlZmF1bHRNaW5EZWNpYmVsczsKKyAgICBzdGF0aWMgY29uc3Qg
ZG91YmxlIERlZmF1bHRNYXhEZWNpYmVsczsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBE
ZWZhdWx0RkZUU2l6ZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgTWluRkZUU2l6ZTsKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgTWF4RkZUU2l6ZTsKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgSW5wdXRCdWZmZXJTaXplOworCitwcml2YXRlOgorICAgIC8vIFRoZSBhdWRpbyB0aHJl
YWQgd3JpdGVzIHRoZSBpbnB1dCBhdWRpbyBoZXJlLgorICAgIEF1ZGlvRmxvYXRBcnJheSBtX2lu
cHV0QnVmZmVyOworICAgIHVuc2lnbmVkIG1fd3JpdGVJbmRleDsKKyAgICAKKyAgICBzaXplX3Qg
bV9mZnRTaXplOworICAgIE93blB0cjxGRlRGcmFtZT4gbV9hbmFseXNpc0ZyYW1lOworICAgIHZv
aWQgZG9GRlRBbmFseXNpcygpOworICAgIAorICAgIC8vIGRvRkZUQW5hbHlzaXMoKSBzdG9yZXMg
dGhlIGZsb2F0aW5nLXBvaW50IG1hZ25pdHVkZSBhbmFseXNpcyBkYXRhIGhlcmUuCisgICAgQXVk
aW9GbG9hdEFycmF5IG1fbWFnbml0dWRlQnVmZmVyOworICAgIEF1ZGlvRmxvYXRBcnJheSYgbWFn
bml0dWRlQnVmZmVyKCkgeyByZXR1cm4gbV9tYWduaXR1ZGVCdWZmZXI7IH0KKworICAgIC8vIEEg
dmFsdWUgYmV0d2VlbiAwIGFuZCAxIHdoaWNoIGF2ZXJhZ2VzIHRoZSBwcmV2aW91cyB2ZXJzaW9u
IG9mIG1fbWFnbml0dWRlQnVmZmVyIHdpdGggdGhlIGN1cnJlbnQgYW5hbHlzaXMgbWFnbml0dWRl
IGRhdGEuCisgICAgZG91YmxlIG1fc21vb3RoaW5nVGltZUNvbnN0YW50OyAgICAKKworICAgIC8v
IFRoZSByYW5nZSB1c2VkIHdoZW4gY29udmVydGluZyB3aGVuIHVzaW5nIGdldEJ5dGVGcmVxdWVu
Y3lEYXRhKCkuIAorICAgIGRvdWJsZSBtX21pbkRlY2liZWxzOworICAgIGRvdWJsZSBtX21heERl
Y2liZWxzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUmVhbHRp
bWVBbmFseXNlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0
aW1lQW5hbHlzZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmNwcAkocmV2aXNpb24gMTExMjMzKQkoZnJv
bSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5jcHA6MTExMjMz
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJSZWFs
dGltZUFuYWx5c2VyTm9kZS5oIgorCisjaW5jbHVkZSAiQXVkaW9Ob2RlSW5wdXQuaCIKKyNpbmNs
dWRlICJBdWRpb05vZGVPdXRwdXQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWFsdGlt
ZUFuYWx5c2VyTm9kZTo6UmVhbHRpbWVBbmFseXNlck5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0
LCBmbG9hdCBzYW1wbGVSYXRlKQorICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUp
Cit7CisgICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7Cisg
ICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywgMikpKTsKKyAg
ICAKKyAgICBzZXROb2RlVHlwZShOb2RlVHlwZUFuYWx5c2VyKTsKKyAgICAKKyAgICBpbml0aWFs
aXplKCk7Cit9CisKK1JlYWx0aW1lQW5hbHlzZXJOb2RlOjp+UmVhbHRpbWVBbmFseXNlck5vZGUo
KQoreworICAgIHVuaW5pdGlhbGl6ZSgpOworfQorCit2b2lkIFJlYWx0aW1lQW5hbHlzZXJOb2Rl
Ojpwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAgQXVkaW9CdXMqIG91dHB1
dEJ1cyA9IG91dHB1dCgwKS0+YnVzKCk7CisKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSB8fCAh
aW5wdXQoMCktPmlzQ29ubmVjdGVkKCkpIHsKKyAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBdWRpb0J1cyogaW5wdXRCdXMgPSBpbnB1dCgw
KS0+YnVzKCk7CisgICAgCisgICAgLy8gR2l2ZSB0aGUgYW5hbHlzZXIgdGhlIGF1ZGlvIHdoaWNo
IGlzIHBhc3NpbmcgdGhyb3VnaCB0aGlzIEF1ZGlvTm9kZS4KKyAgICBtX2FuYWx5c2VyLndyaXRl
SW5wdXQoaW5wdXRCdXMsIGZyYW1lc1RvUHJvY2Vzcyk7CisKKyAgICAvLyBGb3IgaW4tcGxhY2Ug
cHJvY2Vzc2luZywgb3VyIG92ZXJyaWRlIG9mIHB1bGxJbnB1dHMoKSB3aWxsIGp1c3QgcGFzcyB0
aGUgYXVkaW8gZGF0YSB0aHJvdWdoIHVuY2hhbmdlZCBpZiB0aGUgY2hhbm5lbCBjb3VudCBtYXRj
aGVzIGZyb20gaW5wdXQgdG8gb3V0cHV0CisgICAgLy8gKHJlc3VsdGluZyBpbiBpbnB1dEJ1cyA9
PSBvdXRwdXRCdXMpLiAgT3RoZXJ3aXNlLCBkbyBhbiB1cC1taXggdG8gc3RlcmVvLgorICAgIGlm
IChpbnB1dEJ1cyAhPSBvdXRwdXRCdXMpCisgICAgICAgIG91dHB1dEJ1cy0+Y29weUZyb20oKmlu
cHV0QnVzKTsKK30KKworLy8gV2Ugb3ZlcnJpZGUgcHVsbElucHV0cygpIGFzIGFuIG9wdGltaXph
dGlvbiBhbGxvd2luZyB0aGlzIG5vZGUgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgaW4tcGxhY2UgcHJv
Y2Vzc2luZywKKy8vIHdoZXJlIHRoZSBpbnB1dCBpcyBzaW1wbHkgcGFzc2VkIHRocm91Z2ggdW5w
cm9jZXNzZWQgdG8gdGhlIG91dHB1dC4KKy8vIE5vdGU6IHRoaXMgb25seSBhcHBsaWVzIGlmIHRo
ZSBpbnB1dCBhbmQgb3V0cHV0IGNoYW5uZWwgY291bnRzIG1hdGNoLgordm9pZCBSZWFsdGltZUFu
YWx5c2VyTm9kZTo6cHVsbElucHV0cyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIC8v
IFJlbmRlciBpbnB1dCBzdHJlYW0gLSB0cnkgdG8gcmVuZGVyIGRpcmVjdGx5IGludG8gb3V0cHV0
IGJ1cyBmb3IgcGFzcy10aHJvdWdoIHByb2Nlc3Npbmcgd2hlcmUgcHJvY2VzcygpIGRvZXNuJ3Qg
bmVlZCB0byBkbyBhbnl0aGluZy4uLgorICAgIGlucHV0KDApLT5wdWxsKG91dHB1dCgwKS0+YnVz
KCksIGZyYW1lc1RvUHJvY2Vzcyk7Cit9CisKK3ZvaWQgUmVhbHRpbWVBbmFseXNlck5vZGU6OnJl
c2V0KCkKK3sKKyAgICBtX2FuYWx5c2VyLnJlc2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5oCShy
ZXZpc2lvbiAxMTEyMzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5h
bHlzZXJOb2RlLmg6MTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9S
ZWFsdGltZUFuYWx5c2VyTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFJlYWx0aW1lQW5hbHlzZXJOb2RlX2gKKyNkZWZpbmUgUmVhbHRp
bWVBbmFseXNlck5vZGVfaAorCisjaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCisjaW5jbHVkZSAiUmVh
bHRpbWVBbmFseXNlci5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgUmVhbHRpbWVBbmFseXNlck5vZGUgOiBwdWJsaWMgQXVkaW9Ob2Rl
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWFsdGltZUFuYWx5c2VyTm9kZT4g
Y3JlYXRlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVhbHRpbWVBbmFseXNlck5vZGUoY29udGV4dCwg
c2FtcGxlUmF0ZSkpOyAgICAgIAorICAgIH0KKworICAgIHZpcnR1YWwgflJlYWx0aW1lQW5hbHlz
ZXJOb2RlKCk7CisgICAgCisgICAgLy8gQXVkaW9Ob2RlCisgICAgdmlydHVhbCB2b2lkIHByb2Nl
c3Moc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgdmlydHVhbCB2b2lkIHB1bGxJbnB1dHMo
c2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgdmlydHVhbCB2b2lkIHJlc2V0KCk7CisKKyAg
ICAvLyBKYXZhc2NyaXB0IGJpbmRpbmdzCisgICAgdW5zaWduZWQgaW50IGZmdFNpemUoKSBjb25z
dCB7IHJldHVybiBtX2FuYWx5c2VyLmZmdFNpemUoKTsgfQorICAgIHZvaWQgc2V0RmZ0U2l6ZSh1
bnNpZ25lZCBpbnQgc2l6ZSkgeyBtX2FuYWx5c2VyLnNldEZmdFNpemUoc2l6ZSk7IH0KKworICAg
IHVuc2lnbmVkIGZyZXF1ZW5jeUJpbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9hbmFseXNlci5m
cmVxdWVuY3lCaW5Db3VudCgpOyB9CisKKyAgICB2b2lkIHNldE1pbkRlY2liZWxzKGZsb2F0IGsp
IHsgbV9hbmFseXNlci5zZXRNaW5EZWNpYmVscyhrKTsgfQorICAgIGZsb2F0IG1pbkRlY2liZWxz
KCkgY29uc3QgeyByZXR1cm4gbV9hbmFseXNlci5taW5EZWNpYmVscygpOyB9CisKKyAgICB2b2lk
IHNldE1heERlY2liZWxzKGZsb2F0IGspIHsgbV9hbmFseXNlci5zZXRNYXhEZWNpYmVscyhrKTsg
fQorICAgIGZsb2F0IG1heERlY2liZWxzKCkgY29uc3QgeyByZXR1cm4gbV9hbmFseXNlci5tYXhE
ZWNpYmVscygpOyB9CisKKyAgICB2b2lkIHNldFNtb290aGluZ1RpbWVDb25zdGFudChmbG9hdCBr
KSB7IG1fYW5hbHlzZXIuc2V0U21vb3RoaW5nVGltZUNvbnN0YW50KGspOyB9CisgICAgZmxvYXQg
c21vb3RoaW5nVGltZUNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9hbmFseXNlci5zbW9vdGhp
bmdUaW1lQ29uc3RhbnQoKTsgfQorCisgICAgdm9pZCBnZXRGbG9hdEZyZXF1ZW5jeURhdGEoRmxv
YXQzMkFycmF5KiBhcnJheSkgeyBtX2FuYWx5c2VyLmdldEZsb2F0RnJlcXVlbmN5RGF0YShhcnJh
eSk7IH0KKyAgICB2b2lkIGdldEJ5dGVGcmVxdWVuY3lEYXRhKFVpbnQ4QXJyYXkqIGFycmF5KSB7
IG1fYW5hbHlzZXIuZ2V0Qnl0ZUZyZXF1ZW5jeURhdGEoYXJyYXkpOyB9CisgICAgdm9pZCBnZXRC
eXRlVGltZURvbWFpbkRhdGEoVWludDhBcnJheSogYXJyYXkpIHsgbV9hbmFseXNlci5nZXRCeXRl
VGltZURvbWFpbkRhdGEoYXJyYXkpOyB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBkb3VibGUg
dGFpbFRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBkb3Vi
bGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9CisKKyAgICBSZWFs
dGltZUFuYWx5c2VyTm9kZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKKworICAg
IFJlYWx0aW1lQW5hbHlzZXIgbV9hbmFseXNlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFJlYWx0aW1lQW5hbHlzZXJOb2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUu
aWRsCShyZXZpc2lvbiAxMTEyMzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0
aW1lQW5hbHlzZXJOb2RlLmlkbDoxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIGF1ZGlvIHsKKyAgICBpbnRlcmZhY2UgWworICAg
ICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCisgICAgICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0
CisgICAgXSBSZWFsdGltZUFuYWx5c2VyTm9kZSA6IEF1ZGlvTm9kZSB7CisgICAgICAgIGF0dHJp
YnV0ZSB1bnNpZ25lZCBsb25nIGZmdFNpemU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1
bnNpZ25lZCBsb25nIGZyZXF1ZW5jeUJpbkNvdW50OworCisgICAgICAgIC8vIG1pbkRlY2liZWxz
IC8gbWF4RGVjaWJlbHMgcmVwcmVzZW50IHRoZSByYW5nZSB0byBzY2FsZSB0aGUgRkZUIGFuYWx5
c2lzIGRhdGEgZm9yIGNvbnZlcnNpb24gdG8gdW5zaWduZWQgYnl0ZSB2YWx1ZXMuCisgICAgICAg
IGF0dHJpYnV0ZSBmbG9hdCBtaW5EZWNpYmVsczsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0IG1h
eERlY2liZWxzOworCisgICAgICAgIC8vIEEgdmFsdWUgZnJvbSAwLjAgLT4gMS4wIHdoZXJlIDAu
MCByZXByZXNlbnRzIG5vIHRpbWUgYXZlcmFnaW5nIHdpdGggdGhlIGxhc3QgYW5hbHlzaXMgZnJh
bWUuCisgICAgICAgIGF0dHJpYnV0ZSBmbG9hdCBzbW9vdGhpbmdUaW1lQ29uc3RhbnQ7CisKKyAg
ICAgICAgLy8gQ29waWVzIHRoZSBjdXJyZW50IGZyZXF1ZW5jeSBkYXRhIGludG8gdGhlIHBhc3Nl
ZCBhcnJheS4KKyAgICAgICAgLy8gSWYgdGhlIGFycmF5IGhhcyBmZXdlciBlbGVtZW50cyB0aGFu
IHRoZSBmcmVxdWVuY3lCaW5Db3VudCwgdGhlIGV4Y2VzcyBlbGVtZW50cyB3aWxsIGJlIGRyb3Bw
ZWQuCisgICAgICAgIHZvaWQgZ2V0RmxvYXRGcmVxdWVuY3lEYXRhKGluIEZsb2F0MzJBcnJheSBh
cnJheSk7CisgICAgICAgIHZvaWQgZ2V0Qnl0ZUZyZXF1ZW5jeURhdGEoaW4gVWludDhBcnJheSBh
cnJheSk7CisKKyAgICAgICAgLy8gUmVhbC10aW1lIHdhdmVmb3JtIGRhdGEKKyAgICAgICAgdm9p
ZCBnZXRCeXRlVGltZURvbWFpbkRhdGEoaW4gVWludDhBcnJheSBhcnJheSk7CisgICAgfTsKK30K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlckRTUEtlcm5l
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XYXZl
U2hhcGVyRFNQS2VybmVsLmNwcAkocmV2aXNpb24gMTExMjMzKQkoZnJvbSBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmNwcDoxMTEyMzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJEU1BLZXJuZWwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiV2F2ZVNoYXBlckRTUEtlcm5lbC5o
IgorCisjaW5jbHVkZSAiV2F2ZVNoYXBlclByb2Nlc3Nvci5oIgorI2luY2x1ZGUgPGFsZ29yaXRo
bT4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lk
IFdhdmVTaGFwZXJEU1BLZXJuZWw6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQq
IGRlc3RpbmF0aW9uLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIEFTU0VSVChzb3Vy
Y2UgJiYgZGVzdGluYXRpb24gJiYgd2F2ZVNoYXBlclByb2Nlc3NvcigpKTsKKworICAgIEZsb2F0
MzJBcnJheSogY3VydmUgPSB3YXZlU2hhcGVyUHJvY2Vzc29yKCktPmN1cnZlKCk7CisgICAgaWYg
KCFjdXJ2ZSkgeworICAgICAgICAvLyBBY3QgYXMgInN0cmFpZ2h0IHdpcmUiIHBhc3MtdGhyb3Vn
aCBpZiBubyBjdXJ2ZSBpcyBzZXQuCisgICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNl
LCBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGZsb2F0KiBjdXJ2ZURhdGEgPSBjdXJ2ZS0+ZGF0YSgpOworICAgIGludCBjdXJ2
ZUxlbmd0aCA9IGN1cnZlLT5sZW5ndGgoKTsKKworICAgIEFTU0VSVChjdXJ2ZURhdGEpOworCisg
ICAgaWYgKCFjdXJ2ZURhdGEgfHwgIWN1cnZlTGVuZ3RoKSB7CisgICAgICAgIG1lbWNweShkZXN0
aW5hdGlvbiwgc291cmNlLCBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEFwcGx5IHdhdmVzaGFwaW5nIGN1cnZlLgorICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXNUb1Byb2Nlc3M7ICsraSkgeworICAgICAg
ICBjb25zdCBmbG9hdCBpbnB1dCA9IHNvdXJjZVtpXTsKKworICAgICAgICAvLyBDYWxjdWxhdGUg
YW4gaW5kZXggYmFzZWQgb24gaW5wdXQgLTEgLT4gKzEgd2l0aCAwIGJlaW5nIGF0IHRoZSBjZW50
ZXIgb2YgdGhlIGN1cnZlIGRhdGEuCisgICAgICAgIGludCBpbmRleCA9IChjdXJ2ZUxlbmd0aCAq
IChpbnB1dCArIDEpKSAvIDI7CisKKyAgICAgICAgLy8gQ2xpcCBpbmRleCB0byB0aGUgaW5wdXQg
cmFuZ2Ugb2YgdGhlIGN1cnZlLgorICAgICAgICAvLyBUaGlzIHRha2VzIGNhcmUgb2YgaW5wdXQg
b3V0c2lkZSBvZiBub21pbmFsIHJhbmdlIC0xIC0+ICsxCisgICAgICAgIGluZGV4ID0gbWF4KGlu
ZGV4LCAwKTsKKyAgICAgICAgaW5kZXggPSBtaW4oaW5kZXgsIGN1cnZlTGVuZ3RoIC0gMSk7Cisg
ICAgICAgIGRlc3RpbmF0aW9uW2ldID0gY3VydmVEYXRhW2luZGV4XTsKKyAgICB9Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJEU1BLZXJuZWwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJE
U1BLZXJuZWwuaAkocmV2aXNpb24gMTExMjMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9XYXZlU2hhcGVyRFNQS2VybmVsLmg6MTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2F2ZVNoYXBlckRTUEtlcm5lbF9oCisjZGVm
aW5lIFdhdmVTaGFwZXJEU1BLZXJuZWxfaAorCisjaW5jbHVkZSAiQXVkaW9EU1BLZXJuZWwuaCIK
KyNpbmNsdWRlICJXYXZlU2hhcGVyUHJvY2Vzc29yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgV2F2ZVNoYXBlclByb2Nlc3NvcjsKKworLy8gV2F2ZVNoYXBlckRTUEtlcm5lbCBp
cyBhbiBBdWRpb0RTUEtlcm5lbCBhbmQgaXMgcmVzcG9uc2libGUgZm9yIG5vbi1saW5lYXIgZGlz
dG9ydGlvbiBvbiBvbmUgY2hhbm5lbC4KKworY2xhc3MgV2F2ZVNoYXBlckRTUEtlcm5lbCA6IHB1
YmxpYyBBdWRpb0RTUEtlcm5lbCB7CitwdWJsaWM6ICAKKyAgICBXYXZlU2hhcGVyRFNQS2VybmVs
KFdhdmVTaGFwZXJQcm9jZXNzb3IqIHByb2Nlc3NvcikKKyAgICA6IEF1ZGlvRFNQS2VybmVsKHBy
b2Nlc3NvcikKKyAgICB7CisgICAgfQorICAgIAorICAgIC8vIEF1ZGlvRFNQS2VybmVsCisgICAg
dmlydHVhbCB2b2lkIHByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3QsIHNp
emVfdCBmcmFtZXNUb1Byb2Nlc3MpOworICAgIHZpcnR1YWwgdm9pZCByZXNldCgpIHsgfQorICAg
IHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQor
ICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
MDsgfQorICAgIAorcHJvdGVjdGVkOgorICAgIFdhdmVTaGFwZXJQcm9jZXNzb3IqIHdhdmVTaGFw
ZXJQcm9jZXNzb3IoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxXYXZlU2hhcGVyUHJvY2Vzc29yKj4o
cHJvY2Vzc29yKCkpOyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBXYXZlU2hhcGVyRFNQS2VybmVsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vV2F2ZVNoYXBlck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuY3BwCShyZXZpc2lvbiAxMTEyMzMpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmNwcDoxMTEyMzMpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIldhdmVTaGFwZXJOb2RlLmgi
CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitX
YXZlU2hhcGVyTm9kZTo6V2F2ZVNoYXBlck5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0KQorICAg
IDogQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUoY29udGV4dCwgY29udGV4dC0+c2FtcGxlUmF0ZSgp
KQoreworICAgIG1fcHJvY2Vzc29yID0gYWRvcHRQdHIobmV3IFdhdmVTaGFwZXJQcm9jZXNzb3Io
Y29udGV4dC0+c2FtcGxlUmF0ZSgpLCAxKSk7CisgICAgc2V0Tm9kZVR5cGUoTm9kZVR5cGVXYXZl
U2hhcGVyKTsKK30KKwordm9pZCBXYXZlU2hhcGVyTm9kZTo6c2V0Q3VydmUoRmxvYXQzMkFycmF5
KiBjdXJ2ZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyAKKyAgICB3YXZlU2hhcGVy
UHJvY2Vzc29yKCktPnNldEN1cnZlKGN1cnZlKTsKK30KKworRmxvYXQzMkFycmF5KiBXYXZlU2hh
cGVyTm9kZTo6Y3VydmUoKQoreworICAgIHJldHVybiB3YXZlU2hhcGVyUHJvY2Vzc29yKCktPmN1
cnZlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShX
RUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFw
ZXJOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9X
YXZlU2hhcGVyTm9kZS5oCShyZXZpc2lvbiAxMTEyMzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmg6MTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdhdmVTaGFwZXJOb2RlX2gKKyNkZWZpbmUgV2F2ZVNo
YXBlck5vZGVfaAorCisjaW5jbHVkZSAiQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaCIKKyNpbmNs
dWRlICJCaXF1YWRQcm9jZXNzb3IuaCIKKyNpbmNsdWRlICJXYXZlU2hhcGVyUHJvY2Vzc29yLmgi
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAor
Y2xhc3MgV2F2ZVNoYXBlck5vZGUgOiBwdWJsaWMgQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUgewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdhdmVTaGFwZXJOb2RlPiBjcmVhdGUoQXVk
aW9Db250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBX
YXZlU2hhcGVyTm9kZShjb250ZXh0KSk7CisgICAgfQorCisgICAgLy8gc2V0Q3VydmUoKSBpcyBj
YWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLgorICAgIHZvaWQgc2V0Q3VydmUoRmxvYXQzMkFycmF5
Kik7CisgICAgRmxvYXQzMkFycmF5KiBjdXJ2ZSgpOworCitwcml2YXRlOiAgICAKKyAgICBXYXZl
U2hhcGVyTm9kZShBdWRpb0NvbnRleHQqKTsgICAgCisKKyAgICBXYXZlU2hhcGVyUHJvY2Vzc29y
KiB3YXZlU2hhcGVyUHJvY2Vzc29yKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8V2F2ZVNoYXBlclBy
b2Nlc3Nvcio+KHByb2Nlc3NvcigpKTsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gV2F2ZVNoYXBlck5vZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5pZGwJKHJldmlzaW9uIDExMTIzMykJ
KGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuaWRsOjExMTIzMykK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgYXVkaW8g
eworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKKyAgICAg
ICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKKyAgICBdIFdhdmVTaGFwZXJOb2RlIDogQXVkaW9Ob2Rl
IHsKKyAgICAgICAgYXR0cmlidXRlIFtKU0N1c3RvbVNldHRlcl0gRmxvYXQzMkFycmF5IGN1cnZl
OworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVT
aGFwZXJQcm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5jcHAJKHJldmlzaW9uIDExMTIzMykJKGZyb20g
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5jcHA6MTExMjMzKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIldhdmVTaGFw
ZXJQcm9jZXNzb3IuaCIKKworI2luY2x1ZGUgIldhdmVTaGFwZXJEU1BLZXJuZWwuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworICAgIAorV2F2ZVNoYXBlclByb2Nlc3Nvcjo6V2F2ZVNoYXBlclBy
b2Nlc3NvcihmbG9hdCBzYW1wbGVSYXRlLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscykKKyAgICA6
IEF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yKHNhbXBsZVJhdGUsIG51bWJlck9mQ2hhbm5lbHMpCit7
Cit9CisKK1dhdmVTaGFwZXJQcm9jZXNzb3I6On5XYXZlU2hhcGVyUHJvY2Vzc29yKCkKK3sKKyAg
ICBpZiAoaXNJbml0aWFsaXplZCgpKQorICAgICAgICB1bmluaXRpYWxpemUoKTsKK30KKworUGFz
c093blB0cjxBdWRpb0RTUEtlcm5lbD4gV2F2ZVNoYXBlclByb2Nlc3Nvcjo6Y3JlYXRlS2VybmVs
KCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdhdmVTaGFwZXJEU1BLZXJuZWwodGhpcykp
OworfQorCit2b2lkIFdhdmVTaGFwZXJQcm9jZXNzb3I6OnNldEN1cnZlKEZsb2F0MzJBcnJheSog
Y3VydmUpCit7CisgICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgd2l0aCBwcm9jZXNzKCkuCisgICAg
TXV0ZXhMb2NrZXIgcHJvY2Vzc0xvY2tlcihtX3Byb2Nlc3NMb2NrKTsKKyAgICAKKyAgICBtX2N1
cnZlID0gY3VydmU7Cit9CisKK3ZvaWQgV2F2ZVNoYXBlclByb2Nlc3Nvcjo6cHJvY2Vzcyhjb25z
dCBBdWRpb0J1cyogc291cmNlLCBBdWRpb0J1cyogZGVzdGluYXRpb24sIHNpemVfdCBmcmFtZXNU
b1Byb2Nlc3MpCit7CisgICAgaWYgKCFpc0luaXRpYWxpemVkKCkpIHsKKyAgICAgICAgZGVzdGlu
YXRpb24tPnplcm8oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoZSBhdWRp
byB0aHJlYWQgY2FuJ3QgYmxvY2sgb24gdGhpcyBsb2NrLCBzbyB3ZSBjYWxsIHRyeUxvY2soKSBp
bnN0ZWFkLgorICAgIC8vIENhcmVmdWwgLSB0aGlzIGlzIGEgdHJ5TG9jaygpIGFuZCBub3QgYW4g
YXV0b2xvY2tlciwgc28gd2UgbXVzdCB1bmxvY2soKSBiZWZvcmUgZXZlcnkgcmV0dXJuLgorICAg
IGlmIChtX3Byb2Nlc3NMb2NrLnRyeUxvY2soKSkgeyAgICAgICAgCisgICAgICAgIC8vIEZvciBl
YWNoIGNoYW5uZWwgb2Ygb3VyIGlucHV0LCBwcm9jZXNzIHVzaW5nIHRoZSBjb3JyZXNwb25kaW5n
IFdhdmVTaGFwZXJEU1BLZXJuZWwgaW50byB0aGUgb3V0cHV0IGNoYW5uZWwuCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2tlcm5lbHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICBtX2tlcm5lbHNbaV0tPnByb2Nlc3Moc291cmNlLT5jaGFubmVsKGkpLT5kYXRhKCksIGRlc3Rp
bmF0aW9uLT5jaGFubmVsKGkpLT5tdXRhYmxlRGF0YSgpLCBmcmFtZXNUb1Byb2Nlc3MpOworCisg
ICAgICAgIG1fcHJvY2Vzc0xvY2sudW5sb2NrKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
VG9vIGJhZCAtIHRoZSB0cnlMb2NrKCkgZmFpbGVkLiBXZSBtdXN0IGJlIGluIHRoZSBtaWRkbGUg
b2YgYSBzZXRDdXJ2ZSgpIGNhbGwuCisgICAgICAgIGRlc3RpbmF0aW9uLT56ZXJvKCk7CisgICAg
fQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FV
RElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyUHJv
Y2Vzc29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9X
YXZlU2hhcGVyUHJvY2Vzc29yLmgJKHJldmlzaW9uIDExMTIzMykJKGZyb20gU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5oOjExMTIzMykKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdhdmVTaGFwZXJQcm9jZXNz
b3JfaAorI2RlZmluZSBXYXZlU2hhcGVyUHJvY2Vzc29yX2gKKworI2luY2x1ZGUgIkF1ZGlvRFNQ
S2VybmVsLmgiCisjaW5jbHVkZSAiQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuaCIKKyNpbmNsdWRl
ICJBdWRpb05vZGUuaCIKKyNpbmNsdWRlIDx3dGYvRmxvYXQzMkFycmF5Lmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisvLyBXYXZlU2hhcGVyUHJvY2Vzc29yIGlzIGFuIEF1ZGlvRFNQS2VybmVsUHJv
Y2Vzc29yIHdoaWNoIHVzZXMgV2F2ZVNoYXBlckRTUEtlcm5lbCBvYmplY3RzIHRvIGltcGxlbWVu
dCBub24tbGluZWFyIGRpc3RvcnRpb24gZWZmZWN0cy4KKworY2xhc3MgV2F2ZVNoYXBlclByb2Nl
c3NvciA6IHB1YmxpYyBBdWRpb0RTUEtlcm5lbFByb2Nlc3NvciB7CitwdWJsaWM6CisgICAgV2F2
ZVNoYXBlclByb2Nlc3NvcihmbG9hdCBzYW1wbGVSYXRlLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVs
cyk7CisKKyAgICB2aXJ0dWFsIH5XYXZlU2hhcGVyUHJvY2Vzc29yKCk7CisKKyAgICB2aXJ0dWFs
IFBhc3NPd25QdHI8QXVkaW9EU1BLZXJuZWw+IGNyZWF0ZUtlcm5lbCgpOworCisgICAgdmlydHVh
bCB2b2lkIHByb2Nlc3MoY29uc3QgQXVkaW9CdXMqIHNvdXJjZSwgQXVkaW9CdXMqIGRlc3RpbmF0
aW9uLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKworICAgIHZvaWQgc2V0Q3VydmUoRmxvYXQz
MkFycmF5Kik7CisgICAgRmxvYXQzMkFycmF5KiBjdXJ2ZSgpIHsgcmV0dXJuIG1fY3VydmUuZ2V0
KCk7IH0KKworcHJpdmF0ZToKKyAgICAvLyBtX2N1cnZlIHJlcHJlc2VudHMgdGhlIG5vbi1saW5l
YXIgc2hhcGluZyBjdXJ2ZS4KKyAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiBtX2N1cnZlOworCisg
ICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgcHJvY2VzcygpIHdpdGggc2V0Q3VydmUoKS4KKyAgICBt
dXRhYmxlIE11dGV4IG1fcHJvY2Vzc0xvY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBXYXZlU2hhcGVyUHJvY2Vzc29yX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCShyZXZpc2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBA
QAogICAgICAgJy4uL01vZHVsZXMvaW5kZXhlZGRiJywKICAgICAgICcuLi9Nb2R1bGVzL21lZGlh
c3RyZWFtJywKICAgICAgICcuLi9Nb2R1bGVzL3NwZWVjaCcsCisgICAgICAnLi4vTW9kdWxlcy93
ZWJhdWRpbycsCiAgICAgICAnLi4vTW9kdWxlcy93ZWJkYXRhYmFzZScsCiAgICAgICAnLi4vTW9k
dWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bScsCiAgICAgICAnLi4vTW9kdWxlcy93ZWJzb2NrZXRz
JywKQEAgLTE0MCw3ICsxNDEsNiBAQAogICAgICAgJy4uL3N2Zy9ncmFwaGljcy9maWx0ZXJzJywK
ICAgICAgICcuLi9zdmcvcHJvcGVydGllcycsCiAgICAgICAnLi4vLi4vVGhpcmRQYXJ0eS9nbHUn
LAotICAgICAgJy4uL3dlYmF1ZGlvJywKICAgICAgICcuLi93b3JrZXJzJywKICAgICAgICcuLi94
bWwnLAogICAgICAgJy4uL3htbC9wYXJzZXInLApAQCAtOTc5LDYgKzk3OSw3IEBACiAgICAgICAg
ICAgICAgICctLWluY2x1ZGUnLCAnLi4vTW9kdWxlcy9maWxlc3lzdGVtJywKICAgICAgICAgICAg
ICAgJy0taW5jbHVkZScsICcuLi9Nb2R1bGVzL2luZGV4ZWRkYicsCiAgICAgICAgICAgICAgICct
LWluY2x1ZGUnLCAnLi4vTW9kdWxlcy9tZWRpYXN0cmVhbScsCisgICAgICAgICAgICAgICctLWlu
Y2x1ZGUnLCAnLi4vTW9kdWxlcy93ZWJhdWRpbycsCiAgICAgICAgICAgICAgICctLWluY2x1ZGUn
LCAnLi4vTW9kdWxlcy93ZWJkYXRhYmFzZScsCiAgICAgICAgICAgICAgICctLWluY2x1ZGUnLCAn
Li4vY3NzJywKICAgICAgICAgICAgICAgJy0taW5jbHVkZScsICcuLi9kb20nLApAQCAtOTkwLDcg
Kzk5MSw2IEBACiAgICAgICAgICAgICAgICctLWluY2x1ZGUnLCAnLi4vc3RvcmFnZScsCiAgICAg
ICAgICAgICAgICctLWluY2x1ZGUnLCAnLi4vc3ZnJywKICAgICAgICAgICAgICAgJy0taW5jbHVk
ZScsICcuLi90ZXN0aW5nJywKLSAgICAgICAgICAgICAgJy0taW5jbHVkZScsICcuLi93ZWJhdWRp
bycsCiAgICAgICAgICAgICAgICctLWluY2x1ZGUnLCAnLi4vd29ya2VycycsCiAgICAgICAgICAg
ICAgICctLWluY2x1ZGUnLCAnLi4veG1sJywKICAgICAgICAgICAgIF0sCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIxMjYxLDcgKzIxMjYxLDcgQEAKIAkJCQlGRDdGMjk4
RjEzRDRDMENCMDBBRDk1MzUgLyogV2F2ZVNoYXBlclByb2Nlc3Nvci5jcHAgKi8sCiAJCQkJRkQ3
RjI5OTAxM0Q0QzBDQjAwQUQ5NTM1IC8qIFdhdmVTaGFwZXJQcm9jZXNzb3IuaCAqLywKIAkJCSk7
Ci0JCQlwYXRoID0gd2ViYXVkaW87CisJCQlwYXRoID0gTW9kdWxlcy93ZWJhdWRpbzsKIAkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CiAJCUZEMzE2MDQwMTJCMDI2QTMwMEMxQTM1OSAv
KiBhdWRpbyAqLyA9IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0FzeW5jQXVkaW9E
ZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Bc3luY0F1
ZGlvRGVjb2Rlci5jcHAJKHJldmlzaW9uIDExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
LSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVE
SU8pCi0KLSNpbmNsdWRlICJBc3luY0F1ZGlvRGVjb2Rlci5oIgotCi0jaW5jbHVkZSAiQXVkaW9C
dWZmZXIuaCIKLSNpbmNsdWRlICJBdWRpb0J1ZmZlckNhbGxiYWNrLmgiCi0jaW5jbHVkZSA8d3Rm
L0FycmF5QnVmZmVyLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1Bc3luY0F1ZGlvRGVjb2Rlcjo6QXN5bmNBdWRpb0RlY29kZXIoKQotewotICAg
IC8vIFN0YXJ0IHdvcmtlciB0aHJlYWQuCi0gICAgTXV0ZXhMb2NrZXIgbG9jayhtX3RocmVhZENy
ZWF0aW9uTXV0ZXgpOwotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoQXN5bmNBdWRpb0Rl
Y29kZXI6OnRocmVhZEVudHJ5LCB0aGlzLCAiQXVkaW8gRGVjb2RlciIpOwotfQotCi1Bc3luY0F1
ZGlvRGVjb2Rlcjo6fkFzeW5jQXVkaW9EZWNvZGVyKCkKLXsKLSAgICBtX3F1ZXVlLmtpbGwoKTsK
LSAgICAKLSAgICAvLyBTdG9wIHRocmVhZC4KLSAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbiht
X3RocmVhZElEKTsKLSAgICBtX3RocmVhZElEID0gMDsKLX0KLQotdm9pZCBBc3luY0F1ZGlvRGVj
b2Rlcjo6ZGVjb2RlQXN5bmMoQXJyYXlCdWZmZXIqIGF1ZGlvRGF0YSwgZmxvYXQgc2FtcGxlUmF0
ZSwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NS
ZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKLXsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVChhdWRpb0RhdGEpOwotICAgIGlmICghYXVkaW9E
YXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBPd25QdHI8RGVjb2RpbmdUYXNrPiBkZWNvZGlu
Z1Rhc2sgPSBEZWNvZGluZ1Rhc2s6OmNyZWF0ZShhdWRpb0RhdGEsIHNhbXBsZVJhdGUsIHN1Y2Nl
c3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7Ci0gICAgbV9xdWV1ZS5hcHBlbmQoZGVjb2RpbmdU
YXNrLnJlbGVhc2UoKSk7IC8vIG5vdGUgdGhhdCBvd25lcnNoaXAgb2YgdGhlIHRhc2sgaXMgZWZm
ZWN0aXZlbHkgdGFrZW4gYnkgdGhlIHF1ZXVlLgotfQotCi0vLyBBc3luY2hyb25vdXNseSBkZWNv
ZGUgaW4gdGhpcyB0aHJlYWQuCi12b2lkIEFzeW5jQXVkaW9EZWNvZGVyOjp0aHJlYWRFbnRyeSh2
b2lkKiB0aHJlYWREYXRhKQotewotICAgIEFTU0VSVCh0aHJlYWREYXRhKTsKLSAgICBBc3luY0F1
ZGlvRGVjb2RlciogZGVjb2RlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8QXN5bmNBdWRpb0RlY29kZXIq
Pih0aHJlYWREYXRhKTsKLSAgICBkZWNvZGVyLT5ydW5Mb29wKCk7Ci19Ci0KLXZvaWQgQXN5bmNB
dWRpb0RlY29kZXI6OnJ1bkxvb3AoKQotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwot
Ci0gICAgewotICAgICAgICAvLyBXYWl0IGZvciB1bnRpbCB3ZSBoYXZlIG1fdGhyZWFkSUQgZXN0
YWJsaXNoZWQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBydW4gbG9vcC4KLSAgICAgICAgTXV0ZXhMb2Nr
ZXIgbG9jayhtX3RocmVhZENyZWF0aW9uTXV0ZXgpOwotICAgIH0KLQotICAgIC8vIEtlZXAgcnVu
bmluZyBkZWNvZGluZyB0YXNrcyB1bnRpbCB3ZSdyZSBraWxsZWQuCi0gICAgd2hpbGUgKE93blB0
cjxEZWNvZGluZ1Rhc2s+IGRlY29kaW5nVGFzayA9IG1fcXVldWUud2FpdEZvck1lc3NhZ2UoKSkg
ewotICAgICAgICAvLyBMZXQgdGhlIHRhc2sgdGFrZSBjYXJlIG9mIGl0cyBvd24gb3duZXJzaGlw
LgotICAgICAgICAvLyBTZWUgRGVjb2RpbmdUYXNrOjpub3RpZnlDb21wbGV0ZSgpIGZvciBjbGVh
bnVwLgotICAgICAgICBkZWNvZGluZ1Rhc2subGVha1B0cigpLT5kZWNvZGUoKTsKLSAgICB9Ci19
Ci0KLVBhc3NPd25QdHI8QXN5bmNBdWRpb0RlY29kZXI6OkRlY29kaW5nVGFzaz4gQXN5bmNBdWRp
b0RlY29kZXI6OkRlY29kaW5nVGFzazo6Y3JlYXRlKEFycmF5QnVmZmVyKiBhdWRpb0RhdGEsIGZs
b2F0IHNhbXBsZVJhdGUsIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gc3VjY2Vzc0Nh
bGxiYWNrLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCi17
Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWNvZGluZ1Rhc2soYXVkaW9EYXRhLCBzYW1wbGVS
YXRlLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsKLX0KLQotQXN5bmNBdWRpb0Rl
Y29kZXI6OkRlY29kaW5nVGFzazo6RGVjb2RpbmdUYXNrKEFycmF5QnVmZmVyKiBhdWRpb0RhdGEs
IGZsb2F0IHNhbXBsZVJhdGUsIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gc3VjY2Vz
c0NhbGxiYWNrLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sp
Ci0gICAgOiBtX2F1ZGlvRGF0YShhdWRpb0RhdGEpCi0gICAgLCBtX3NhbXBsZVJhdGUoc2FtcGxl
UmF0ZSkKLSAgICAsIG1fc3VjY2Vzc0NhbGxiYWNrKHN1Y2Nlc3NDYWxsYmFjaykKLSAgICAsIG1f
ZXJyb3JDYWxsYmFjayhlcnJvckNhbGxiYWNrKQotewotfQotCi12b2lkIEFzeW5jQXVkaW9EZWNv
ZGVyOjpEZWNvZGluZ1Rhc2s6OmRlY29kZSgpCi17Ci0gICAgQVNTRVJUKG1fYXVkaW9EYXRhLmdl
dCgpKTsKLSAgICBpZiAoIW1fYXVkaW9EYXRhLmdldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBEbyB0aGUgYWN0dWFsIGRlY29kaW5nIGFuZCBpbnZva2UgdGhlIGNhbGxiYWNrLgotICAg
IG1fYXVkaW9CdWZmZXIgPSBBdWRpb0J1ZmZlcjo6Y3JlYXRlRnJvbUF1ZGlvRmlsZURhdGEobV9h
dWRpb0RhdGEtPmRhdGEoKSwgbV9hdWRpb0RhdGEtPmJ5dGVMZW5ndGgoKSwgZmFsc2UsIHNhbXBs
ZVJhdGUoKSk7Ci0gICAgCi0gICAgLy8gRGVjb2RpbmcgaXMgZmluaXNoZWQsIGJ1dCB3ZSBuZWVk
IHRvIGRvIHRoZSBjYWxsYmFja3Mgb24gdGhlIG1haW4gdGhyZWFkLgotICAgIGNhbGxPbk1haW5U
aHJlYWQobm90aWZ5Q29tcGxldGVEaXNwYXRjaCwgdGhpcyk7Ci19Ci0KLXZvaWQgQXN5bmNBdWRp
b0RlY29kZXI6OkRlY29kaW5nVGFzazo6bm90aWZ5Q29tcGxldGVEaXNwYXRjaCh2b2lkKiB1c2Vy
RGF0YSkKLXsKLSAgICBBc3luY0F1ZGlvRGVjb2Rlcjo6RGVjb2RpbmdUYXNrKiB0YXNrID0gcmVp
bnRlcnByZXRfY2FzdDxBc3luY0F1ZGlvRGVjb2Rlcjo6RGVjb2RpbmdUYXNrKj4odXNlckRhdGEp
OwotICAgIEFTU0VSVCh0YXNrKTsKLSAgICBpZiAoIXRhc2spCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHRhc2stPm5vdGlmeUNvbXBsZXRlKCk7Ci19Ci0KLXZvaWQgQXN5bmNBdWRpb0RlY29kZXI6
OkRlY29kaW5nVGFzazo6bm90aWZ5Q29tcGxldGUoKQotewotICAgIGlmIChhdWRpb0J1ZmZlcigp
ICYmIHN1Y2Nlc3NDYWxsYmFjaygpKQotICAgICAgICBzdWNjZXNzQ2FsbGJhY2soKS0+aGFuZGxl
RXZlbnQoYXVkaW9CdWZmZXIoKSk7Ci0gICAgZWxzZSBpZiAoZXJyb3JDYWxsYmFjaygpKQotICAg
ICAgICBlcnJvckNhbGxiYWNrKCktPmhhbmRsZUV2ZW50KGF1ZGlvQnVmZmVyKCkpOwotCi0gICAg
Ly8gT3VyIG93bmVyc2hpcCB3YXMgZ2l2ZW4gdXAgaW4gQXN5bmNBdWRpb0RlY29kZXI6OnJ1bkxv
b3AoKQotICAgIC8vIE1ha2Ugc3VyZSB0byBjbGVhbiB1cCBoZXJlLgotICAgIGRlbGV0ZSB0aGlz
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FV
RElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5o
CShyZXZpc2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Bc3luY0F1ZGlv
RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIEFzeW5jQXVkaW9EZWNvZGVyX2gKLSNkZWZpbmUgQXN5bmNBdWRpb0RlY29kZXJfaAot
Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvTWVzc2FnZVF1ZXVlLmg+
Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9CdWZmZXI7Ci1jbGFzcyBBdWRpb0J1
ZmZlckNhbGxiYWNrOwotCi0vLyBBc3luY0F1ZGlvRGVjb2RlciBhc3luY2hyb25vdXNseSBkZWNv
ZGVzIGF1ZGlvIGZpbGUgZGF0YSBmcm9tIGFuIEFycmF5QnVmZmVyIGluIGEgd29ya2VyIHRocmVh
ZC4KLS8vIFVwb24gc3VjY2Vzc2Z1bCBkZWNvZGluZywgYSBjb21wbGV0aW9uIGNhbGxiYWNrIHdp
bGwgYmUgaW52b2tlZCB3aXRoIHRoZSBkZWNvZGVkIFBDTSBkYXRhIGluIGFuIEF1ZGlvQnVmZmVy
LgotCi1jbGFzcyBBc3luY0F1ZGlvRGVjb2RlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
QXN5bmNBdWRpb0RlY29kZXIpOwotcHVibGljOgotICAgIEFzeW5jQXVkaW9EZWNvZGVyKCk7Ci0g
ICAgfkFzeW5jQXVkaW9EZWNvZGVyKCk7Ci0KLSAgICAvLyBNdXN0IGJlIGNhbGxlZCBvbiB0aGUg
bWFpbiB0aHJlYWQuCi0gICAgdm9pZCBkZWNvZGVBc3luYyhBcnJheUJ1ZmZlciogYXVkaW9EYXRh
LCBmbG9hdCBzYW1wbGVSYXRlLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IHN1Y2Nl
c3NDYWxsYmFjaywgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBlcnJvckNhbGxiYWNr
KTsKLQotcHJpdmF0ZToKLSAgICBjbGFzcyBEZWNvZGluZ1Rhc2sgewotICAgICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShEZWNvZGluZ1Rhc2spOwotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGlj
IFBhc3NPd25QdHI8RGVjb2RpbmdUYXNrPiBjcmVhdGUoQXJyYXlCdWZmZXIqIGF1ZGlvRGF0YSwg
ZmxvYXQgc2FtcGxlUmF0ZSwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBzdWNjZXNz
Q2FsbGJhY2ssIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayk7
Ci0KLSAgICAgICAgdm9pZCBkZWNvZGUoKTsKLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgRGVjb2RpbmdUYXNrKEFycmF5QnVmZmVyKiBhdWRpb0RhdGEsIGZsb2F0IHNhbXBsZVJhdGUs
IFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVm
UHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spOwotCi0gICAgICAgIEFycmF5
QnVmZmVyKiBhdWRpb0RhdGEoKSB7IHJldHVybiBtX2F1ZGlvRGF0YS5nZXQoKTsgfQotICAgICAg
ICBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVSYXRlOyB9Ci0gICAg
ICAgIEF1ZGlvQnVmZmVyQ2FsbGJhY2sqIHN1Y2Nlc3NDYWxsYmFjaygpIHsgcmV0dXJuIG1fc3Vj
Y2Vzc0NhbGxiYWNrLmdldCgpOyB9Ci0gICAgICAgIEF1ZGlvQnVmZmVyQ2FsbGJhY2sqIGVycm9y
Q2FsbGJhY2soKSB7IHJldHVybiBtX2Vycm9yQ2FsbGJhY2suZ2V0KCk7IH0KLSAgICAgICAgQXVk
aW9CdWZmZXIqIGF1ZGlvQnVmZmVyKCkgeyByZXR1cm4gbV9hdWRpb0J1ZmZlci5nZXQoKTsgfQot
Ci0gICAgICAgIHN0YXRpYyB2b2lkIG5vdGlmeUNvbXBsZXRlRGlzcGF0Y2godm9pZCogdXNlckRh
dGEpOwotICAgICAgICB2b2lkIG5vdGlmeUNvbXBsZXRlKCk7Ci0KLSAgICAgICAgUmVmUHRyPEFy
cmF5QnVmZmVyPiBtX2F1ZGlvRGF0YTsKLSAgICAgICAgZmxvYXQgbV9zYW1wbGVSYXRlOwotICAg
ICAgICBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gbV9zdWNjZXNzQ2FsbGJhY2s7Ci0gICAg
ICAgIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBtX2Vycm9yQ2FsbGJhY2s7Ci0gICAgICAg
IFJlZlB0cjxBdWRpb0J1ZmZlcj4gbV9hdWRpb0J1ZmZlcjsKLSAgICB9OwotICAgIAotICAgIHN0
YXRpYyB2b2lkIHRocmVhZEVudHJ5KHZvaWQqIHRocmVhZERhdGEpOwotICAgIHZvaWQgcnVuTG9v
cCgpOwotCi0gICAgV1RGOjpUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7Ci0gICAgTXV0ZXgg
bV90aHJlYWRDcmVhdGlvbk11dGV4OwotICAgIE1lc3NhZ2VRdWV1ZTxEZWNvZGluZ1Rhc2s+IG1f
cXVldWU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBBc3luY0F1
ZGlvRGVjb2Rlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Jhc2ljUHJv
Y2Vzc29yTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9CYXNpY1Byb2Nlc3Nvck5vZGUuY3BwCShyZXZpc2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
ZiBFTkFCTEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUu
aCIKLQotI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCi0jaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCi0j
aW5jbHVkZSAiQXVkaW9Ob2RlSW5wdXQuaCIKLSNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIK
LSNpbmNsdWRlICJBdWRpb1Byb2Nlc3Nvci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUF1
ZGlvQmFzaWNQcm9jZXNzb3JOb2RlOjpBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZShBdWRpb0NvbnRl
eHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBBdWRpb05vZGUoY29udGV4dCwg
c2FtcGxlUmF0ZSkKLXsKLSAgICBhZGRJbnB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlSW5wdXQo
dGhpcykpKTsKLSAgICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZU91dHB1dCh0aGlz
LCAxKSkpOwotCi0gICAgLy8gVGhlIHN1YmNsYXNzIG11c3QgY3JlYXRlIG1fcHJvY2Vzc29yLgot
fQotCi12b2lkIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlOjppbml0aWFsaXplKCkKLXsKLSAgICBp
ZiAoaXNJbml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQocHJvY2Vz
c29yKCkpOwotICAgIHByb2Nlc3NvcigpLT5pbml0aWFsaXplKCk7Ci0KLSAgICBBdWRpb05vZGU6
OmluaXRpYWxpemUoKTsKLX0KLQotdm9pZCBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZTo6dW5pbml0
aWFsaXplKCkKLXsKLSAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUKHByb2Nlc3NvcigpKTsKLSAgICBwcm9jZXNzb3IoKS0+dW5pbml0aWFsaXpl
KCk7Ci0KLSAgICBBdWRpb05vZGU6OnVuaW5pdGlhbGl6ZSgpOwotfQotCi12b2lkIEF1ZGlvQmFz
aWNQcm9jZXNzb3JOb2RlOjpwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAg
QXVkaW9CdXMqIGRlc3RpbmF0aW9uQnVzID0gb3V0cHV0KDApLT5idXMoKTsKLSAgICAKLSAgICBp
ZiAoIWlzSW5pdGlhbGl6ZWQoKSB8fCAhcHJvY2Vzc29yKCkpCi0gICAgICAgIGRlc3RpbmF0aW9u
QnVzLT56ZXJvKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEF1ZGlvQnVzKiBzb3VyY2VCdXMgPSBp
bnB1dCgwKS0+YnVzKCk7Ci0KLSAgICAgICAgLy8gRklYTUU6IGlmIHdlIHRha2UgInRhaWwgdGlt
ZSIgaW50byBhY2NvdW50LCB0aGVuIHdlIGNhbiBhdm9pZCBjYWxsaW5nIHByb2Nlc3NvcigpLT5w
cm9jZXNzKCkgb25jZSB0aGUgdGFpbCBkaWVzIGRvd24uCi0gICAgICAgIGlmICghaW5wdXQoMCkt
PmlzQ29ubmVjdGVkKCkpCi0gICAgICAgICAgICBzb3VyY2VCdXMtPnplcm8oKTsKLQotICAgICAg
ICBwcm9jZXNzb3IoKS0+cHJvY2Vzcyhzb3VyY2VCdXMsIGRlc3RpbmF0aW9uQnVzLCBmcmFtZXNU
b1Byb2Nlc3MpOyAgCi0gICAgfQotfQotCi0vLyBOaWNlIG9wdGltaXphdGlvbiBpbiB0aGUgdmVy
eSBjb21tb24gY2FzZSBhbGxvd2luZyBmb3IgImluLXBsYWNlIiBwcm9jZXNzaW5nCi12b2lkIEF1
ZGlvQmFzaWNQcm9jZXNzb3JOb2RlOjpwdWxsSW5wdXRzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3Mp
Ci17Ci0gICAgLy8gUmVuZGVyIGlucHV0IHN0cmVhbSAtIHN1Z2dlc3QgdG8gdGhlIGlucHV0IHRv
IHJlbmRlciBkaXJlY3RseSBpbnRvIG91dHB1dCBidXMgZm9yIGluLXBsYWNlIHByb2Nlc3Npbmcg
aW4gcHJvY2VzcygpIGlmIHBvc3NpYmxlLgotICAgIGlucHV0KDApLT5wdWxsKG91dHB1dCgwKS0+
YnVzKCksIGZyYW1lc1RvUHJvY2Vzcyk7Ci19Ci0KLXZvaWQgQXVkaW9CYXNpY1Byb2Nlc3Nvck5v
ZGU6OnJlc2V0KCkKLXsKLSAgICBpZiAocHJvY2Vzc29yKCkpCi0gICAgICAgIHByb2Nlc3Nvcigp
LT5yZXNldCgpOwotfQotCi0vLyBBcyBzb29uIGFzIHdlIGtub3cgdGhlIGNoYW5uZWwgY291bnQg
b2Ygb3VyIGlucHV0LCB3ZSBjYW4gbGF6aWx5IGluaXRpYWxpemUuCi0vLyBTb21ldGltZXMgdGhp
cyBtYXkgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIHdpdGggZGlmZmVyZW50IGNoYW5uZWwgY291
bnRzLCBpbiB3aGljaCBjYXNlIHdlIG11c3Qgc2FmZWx5Ci0vLyB1bmluaXRpYWxpemUgYW5kIHRo
ZW4gcmUtaW5pdGlhbGl6ZSB3aXRoIHRoZSBuZXcgY2hhbm5lbCBjb3VudC4KLXZvaWQgQXVkaW9C
YXNpY1Byb2Nlc3Nvck5vZGU6OmNoZWNrTnVtYmVyT2ZDaGFubmVsc0ZvcklucHV0KEF1ZGlvTm9k
ZUlucHV0KiBpbnB1dCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkg
JiYgY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0gICAgCi0gICAgQVNTRVJUKGlucHV0ID09
IHRoaXMtPmlucHV0KDApKTsKLSAgICBpZiAoaW5wdXQgIT0gdGhpcy0+aW5wdXQoMCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVChwcm9jZXNzb3IoKSk7Ci0gICAgaWYgKCFwcm9jZXNz
b3IoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscyA9
IGlucHV0LT5udW1iZXJPZkNoYW5uZWxzKCk7Ci0gICAgCi0gICAgaWYgKGlzSW5pdGlhbGl6ZWQo
KSAmJiBudW1iZXJPZkNoYW5uZWxzICE9IG91dHB1dCgwKS0+bnVtYmVyT2ZDaGFubmVscygpKSB7
Ci0gICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgaW5pdGlhbGl6ZWQgYnV0IHRoZSBjaGFubmVsIGNv
dW50IGhhcyBjaGFuZ2VkLgotICAgICAgICB1bmluaXRpYWxpemUoKTsKLSAgICB9Ci0gICAgCi0g
ICAgaWYgKCFpc0luaXRpYWxpemVkKCkpIHsKLSAgICAgICAgLy8gVGhpcyB3aWxsIHByb3BhZ2F0
ZSB0aGUgY2hhbm5lbCBjb3VudCB0byBhbnkgbm9kZXMgY29ubmVjdGVkIGZ1cnRoZXIgZG93biB0
aGUgY2hhaW4uLi4KLSAgICAgICAgb3V0cHV0KDApLT5zZXROdW1iZXJPZkNoYW5uZWxzKG51bWJl
ck9mQ2hhbm5lbHMpOwotCi0gICAgICAgIC8vIFJlLWluaXRpYWxpemUgdGhlIHByb2Nlc3NvciB3
aXRoIHRoZSBuZXcgY2hhbm5lbCBjb3VudC4KLSAgICAgICAgcHJvY2Vzc29yKCktPnNldE51bWJl
ck9mQ2hhbm5lbHMobnVtYmVyT2ZDaGFubmVscyk7Ci0gICAgICAgIGluaXRpYWxpemUoKTsKLSAg
ICB9Ci0KLSAgICBBdWRpb05vZGU6OmNoZWNrTnVtYmVyT2ZDaGFubmVsc0ZvcklucHV0KGlucHV0
KTsKLX0KLQotdW5zaWduZWQgQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGU6Om51bWJlck9mQ2hhbm5l
bHMoKQotewotICAgIHJldHVybiBvdXRwdXQoMCktPm51bWJlck9mQ2hhbm5lbHMoKTsKLX0KLQot
ZG91YmxlIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlOjp0YWlsVGltZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fcHJvY2Vzc29yLT50YWlsVGltZSgpOwotfQotCi1kb3VibGUgQXVkaW9CYXNpY1By
b2Nlc3Nvck5vZGU6OmxhdGVuY3lUaW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcm9jZXNz
b3ItPmxhdGVuY3lUaW1lKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b0Jhc2ljUHJvY2Vzc29yTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmgJKHJldmlzaW9uIDExMTIzMykKKysrIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQXVkaW9CYXNpY1Byb2Nl
c3Nvck5vZGVfaAotI2RlZmluZSBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZV9oCi0KLSNpbmNsdWRl
ICJBdWRpb05vZGUuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvQnVzOwotY2xhc3MgQXVkaW9Ob2RlSW5wdXQ7Ci1jbGFz
cyBBdWRpb1Byb2Nlc3NvcjsKLSAgICAKLS8vIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlIGlzIGFu
IEF1ZGlvTm9kZSB3aXRoIG9uZSBpbnB1dCBhbmQgb25lIG91dHB1dCB3aGVyZSB0aGUgaW5wdXQg
YW5kIG91dHB1dCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBjaGFubmVscy4KLWNsYXNzIEF1ZGlv
QmFzaWNQcm9jZXNzb3JOb2RlIDogcHVibGljIEF1ZGlvTm9kZSB7Ci1wdWJsaWM6Ci0gICAgQXVk
aW9CYXNpY1Byb2Nlc3Nvck5vZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7Ci0K
LSAgICAvLyBBdWRpb05vZGUKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVz
VG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHVsbElucHV0cyhzaXplX3QgZnJhbWVzVG9Q
cm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5p
dGlhbGl6ZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1bmluaXRpYWxpemUoKTsKLQotICAgIC8vIENh
bGxlZCBpbiB0aGUgbWFpbiB0aHJlYWQgd2hlbiB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIGZvciB0
aGUgaW5wdXQgbWF5IGhhdmUgY2hhbmdlZC4KLSAgICB2aXJ0dWFsIHZvaWQgY2hlY2tOdW1iZXJP
ZkNoYW5uZWxzRm9ySW5wdXQoQXVkaW9Ob2RlSW5wdXQqKTsKLQotICAgIC8vIFJldHVybnMgdGhl
IG51bWJlciBvZiBjaGFubmVscyBmb3IgYm90aCB0aGUgaW5wdXQgYW5kIHRoZSBvdXRwdXQuCi0g
ICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscygpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVh
bCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGRvdWJsZSBs
YXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFOwotCi0gICAgQXVkaW9Qcm9jZXNzb3IqIHByb2Nl
c3NvcigpIHsgcmV0dXJuIG1fcHJvY2Vzc29yLmdldCgpOyB9Ci0gICAgT3duUHRyPEF1ZGlvUHJv
Y2Vzc29yPiBtX3Byb2Nlc3NvcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9BdWRpb0J1ZmZlci5jcHAJKHJldmlzaW9uIDExMTIzMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNs
dWRlICJBdWRpb0J1ZmZlci5oIgotCi0jaW5jbHVkZSAiQXVkaW9CdXMuaCIKLSNpbmNsdWRlICJB
dWRpb0NvbnRleHQuaCIKLSNpbmNsdWRlICJBdWRpb0ZpbGVSZWFkZXIuaCIKLSNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLVBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IEF1ZGlvQnVmZmVyOjpjcmVhdGUodW5z
aWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IG51bWJlck9mRnJhbWVzLCBmbG9hdCBzYW1w
bGVSYXRlKQotewotICAgIGlmIChzYW1wbGVSYXRlIDwgMjIwNTAgfHwgc2FtcGxlUmF0ZSA+IDk2
MDAwIHx8IG51bWJlck9mQ2hhbm5lbHMgPiBBdWRpb0NvbnRleHQ6Om1heE51bWJlck9mQ2hhbm5l
bHMoKSB8fCAhbnVtYmVyT2ZGcmFtZXMpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQXVkaW9CdWZmZXIobnVtYmVyT2ZDaGFubmVscywgbnVtYmVyT2ZG
cmFtZXMsIHNhbXBsZVJhdGUpKTsKLX0KLQotUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gQXVkaW9C
dWZmZXI6OmNyZWF0ZUZyb21BdWRpb0ZpbGVEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBk
YXRhU2l6ZSwgYm9vbCBtaXhUb01vbm8sIGZsb2F0IHNhbXBsZVJhdGUpCi17Ci0gICAgT3duUHRy
PEF1ZGlvQnVzPiBidXMgPSBjcmVhdGVCdXNGcm9tSW5NZW1vcnlBdWRpb0ZpbGUoZGF0YSwgZGF0
YVNpemUsIG1peFRvTW9ubywgc2FtcGxlUmF0ZSk7Ci0gICAgaWYgKGJ1cy5nZXQoKSkKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBdWRpb0J1ZmZlcihidXMuZ2V0KCkpKTsKLQotICAgIHJl
dHVybiAwOwotfQotCi1BdWRpb0J1ZmZlcjo6QXVkaW9CdWZmZXIodW5zaWduZWQgbnVtYmVyT2ZD
aGFubmVscywgc2l6ZV90IG51bWJlck9mRnJhbWVzLCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIDog
bV9nYWluKDEuMCkKLSAgICAsIG1fc2FtcGxlUmF0ZShzYW1wbGVSYXRlKQotICAgICwgbV9sZW5n
dGgobnVtYmVyT2ZGcmFtZXMpCi17Ci0gICAgbV9jaGFubmVscy5yZXNlcnZlQ2FwYWNpdHkobnVt
YmVyT2ZDaGFubmVscyk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZD
aGFubmVsczsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IGNoYW5uZWxEYXRh
QXJyYXkgPSBGbG9hdDMyQXJyYXk6OmNyZWF0ZShtX2xlbmd0aCk7Ci0gICAgICAgIG1fY2hhbm5l
bHMuYXBwZW5kKGNoYW5uZWxEYXRhQXJyYXkpOwotICAgIH0KLX0KLQotQXVkaW9CdWZmZXI6OkF1
ZGlvQnVmZmVyKEF1ZGlvQnVzKiBidXMpCi0gICAgOiBtX2dhaW4oMS4wKQotICAgICwgbV9zYW1w
bGVSYXRlKGJ1cy0+c2FtcGxlUmF0ZSgpKQotICAgICwgbV9sZW5ndGgoYnVzLT5sZW5ndGgoKSkK
LXsKLSAgICAvLyBDb3B5IGF1ZGlvIGRhdGEgZnJvbSB0aGUgYnVzIHRvIHRoZSBGbG9hdDMyQXJy
YXlzIHdlIG1hbmFnZS4KLSAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzID0gYnVzLT5udW1i
ZXJPZkNoYW5uZWxzKCk7Ci0gICAgbV9jaGFubmVscy5yZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZD
aGFubmVscyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7
ICsraSkgewotICAgICAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiBjaGFubmVsRGF0YUFycmF5ID0g
RmxvYXQzMkFycmF5OjpjcmVhdGUobV9sZW5ndGgpOwotICAgICAgICBjaGFubmVsRGF0YUFycmF5
LT5zZXRSYW5nZShidXMtPmNoYW5uZWwoaSktPmRhdGEoKSwgbV9sZW5ndGgsIDApOwotICAgICAg
ICBtX2NoYW5uZWxzLmFwcGVuZChjaGFubmVsRGF0YUFycmF5KTsKLSAgICB9Ci19Ci0KLXZvaWQg
QXVkaW9CdWZmZXI6OnJlbGVhc2VNZW1vcnkoKQotewotICAgIG1fY2hhbm5lbHMuY2xlYXIoKTsK
LX0KLQotRmxvYXQzMkFycmF5KiBBdWRpb0J1ZmZlcjo6Z2V0Q2hhbm5lbERhdGEodW5zaWduZWQg
Y2hhbm5lbEluZGV4KQotewotICAgIGlmIChjaGFubmVsSW5kZXggPj0gbV9jaGFubmVscy5zaXpl
KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fY2hhbm5lbHNbY2hhbm5lbElu
ZGV4XS5nZXQoKTsKLX0KLQotdm9pZCBBdWRpb0J1ZmZlcjo6emVybygpCi17Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fY2hhbm5lbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYg
KGdldENoYW5uZWxEYXRhKGkpKQotICAgICAgICAgICAgZ2V0Q2hhbm5lbERhdGEoaSktPnplcm9S
YW5nZSgwLCBsZW5ndGgoKSk7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9CdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9B
dWRpb0J1ZmZlci5oCShyZXZpc2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IEF1ZGlvQnVmZmVyX2gKLSNkZWZpbmUgQXVkaW9CdWZmZXJfaAotCi0jaW5jbHVkZSA8d3RmL0Zs
b2F0MzJBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvQnVzOwotICAgIAot
Y2xhc3MgQXVkaW9CdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxBdWRpb0J1ZmZlcj4gewotcHVi
bGljOiAgIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBjcmVhdGUodW5zaWdu
ZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IG51bWJlck9mRnJhbWVzLCBmbG9hdCBzYW1wbGVS
YXRlKTsKLQotICAgIC8vIFJldHVybnMgMCBpZiBkYXRhIGlzIG5vdCBhIHZhbGlkIGF1ZGlvIGZp
bGUuCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IGNyZWF0ZUZyb21BdWRpb0Zp
bGVEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSwgYm9vbCBtaXhUb01vbm8s
IGZsb2F0IHNhbXBsZVJhdGUpOwotCi0gICAgLy8gRm9ybWF0Ci0gICAgc2l6ZV90IGxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9Ci0gICAgZG91YmxlIGR1cmF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbGVuZ3RoKCkgLyBzYW1wbGVSYXRlKCk7IH0KLSAgICBmbG9hdCBzYW1wbGVSYXRl
KCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVSYXRlOyB9Ci0KLSAgICAvLyBDaGFubmVsIGRhdGEg
YWNjZXNzCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscygpIGNvbnN0IHsgcmV0dXJuIG1f
Y2hhbm5lbHMuc2l6ZSgpOyB9Ci0gICAgRmxvYXQzMkFycmF5KiBnZXRDaGFubmVsRGF0YSh1bnNp
Z25lZCBjaGFubmVsSW5kZXgpOwotICAgIHZvaWQgemVybygpOwotCi0gICAgLy8gU2NhbGFyIGdh
aW4KLSAgICBkb3VibGUgZ2FpbigpIGNvbnN0IHsgcmV0dXJuIG1fZ2FpbjsgfQotICAgIHZvaWQg
c2V0R2Fpbihkb3VibGUgZ2FpbikgeyBtX2dhaW4gPSBnYWluOyB9Ci0KLSAgICAvLyBCZWNhdXNl
IGFuIEF1ZGlvQnVmZmVyIGhhcyBhIEphdmFTY3JpcHQgd3JhcHBlciwgd2hpY2ggd2lsbCBiZSBn
YXJiYWdlIGNvbGxlY3RlZCwgaXQgbWF5IHRha2UgYXdoaWxlIGZvciB0aGlzIG9iamVjdCB0byBi
ZSBkZWxldGVkLgotICAgIC8vIHJlbGVhc2VNZW1vcnkoKSBjYW4gYmUgY2FsbGVkIHdoZW4gdGhl
IEF1ZGlvQ29udGV4dCBnb2VzIGF3YXksIHNvIHdlIGNhbiByZWxlYXNlIHRoZSBtZW1vcnkgZWFy
bGllciB0aGFuIHdoZW4gdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBoYXBwZW5zLgotICAgIC8vIENh
cmVmdWwhIE9ubHkgY2FsbCB0aGlzIHdoZW4gdGhlIHBhZ2UgdW5sb2FkcywgYWZ0ZXIgdGhlIEF1
ZGlvQ29udGV4dCBpcyBubyBsb25nZXIgcHJvY2Vzc2luZy4KLSAgICB2b2lkIHJlbGVhc2VNZW1v
cnkoKTsKLSAgICAKLXByb3RlY3RlZDoKLSAgICBBdWRpb0J1ZmZlcih1bnNpZ25lZCBudW1iZXJP
ZkNoYW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMsIGZsb2F0IHNhbXBsZVJhdGUpOwotICAg
IEF1ZGlvQnVmZmVyKEF1ZGlvQnVzKiBidXMpOwotCi0gICAgZG91YmxlIG1fZ2FpbjsgLy8gc2Nh
bGFyIGdhaW4KLSAgICBmbG9hdCBtX3NhbXBsZVJhdGU7Ci0gICAgc2l6ZV90IG1fbGVuZ3RoOwot
Ci0gICAgVmVjdG9yPFJlZlB0cjxGbG9hdDMyQXJyYXk+ID4gbV9jaGFubmVsczsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEF1ZGlvQnVmZmVyX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmlkbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlci5pZGwJKHJldmlzaW9uIDExMTIzMykKKysr
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmlkbAkod29ya2luZyBjb3B5KQpA
QCAtMSw0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGF1ZGlvIHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAg
ICBDb25kaXRpb25hbD1XRUJfQVVESU8KLSAgICBdIEF1ZGlvQnVmZmVyIHsKLSAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIGxvbmcgbGVuZ3RoOyAvLyBpbiBzYW1wbGUtZnJhbWVzCi0gICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBmbG9hdCBkdXJhdGlvbjsgLy8gaW4gc2Vjb25kcwotICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgZmxvYXQgc2FtcGxlUmF0ZTsgLy8gaW4gc2FtcGxlLWZyYW1l
cyBwZXIgc2Vjb25kCi0KLSAgICAgICAgYXR0cmlidXRlIGZsb2F0IGdhaW47IC8vIGxpbmVhciBn
YWluIChkZWZhdWx0IDEuMCkKLQotICAgICAgICAvLyBDaGFubmVsIGFjY2VzcwotICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBudW1iZXJPZkNoYW5uZWxzOwotICAgICAg
ICBGbG9hdDMyQXJyYXkgZ2V0Q2hhbm5lbERhdGEoaW4gdW5zaWduZWQgbG9uZyBjaGFubmVsSW5k
ZXgpOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZl
ckNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9C
dWZmZXJDYWxsYmFjay5oCShyZXZpc2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9BdWRpb0J1ZmZlckNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
LSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgQXVkaW9CdWZmZXJDYWxsYmFja19oCi0jZGVmaW5lIEF1
ZGlvQnVmZmVyQ2FsbGJhY2tfaAotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9C
dWZmZXI7Ci0KLWNsYXNzIEF1ZGlvQnVmZmVyQ2FsbGJhY2sgOiBwdWJsaWMgUmVmQ291bnRlZDxB
dWRpb0J1ZmZlckNhbGxiYWNrPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QXVkaW9CdWZmZXJD
YWxsYmFjaygpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChBdWRpb0J1ZmZlciop
ID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElP
KQotCi0jZW5kaWYgLy8gQXVkaW9CdWZmZXJDYWxsYmFja19oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb0J1ZmZlckNhbGxiYWNrLmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlckNhbGxiYWNrLmlkbAkocmV2aXNpb24gMTExMjMz
KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFjay5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBhdWRpbyB7
Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAotICAgICAg
ICBKU0dlbmVyYXRlVG9KU09iamVjdCwKLSAgICAgICAgQ2FsbGJhY2sKLSAgICBdIEF1ZGlvQnVm
ZmVyQ2FsbGJhY2sgewotICAgICAgICBib29sZWFuIGhhbmRsZUV2ZW50KGluIEF1ZGlvQnVmZmVy
IGF1ZGlvQnVmZmVyKTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuY3BwCShyZXZpc2lvbiAxMTEyMzMpCisrKyBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIkF1ZGlvQnVmZmVyU291cmNl
Tm9kZS5oIgotCi0jaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2Rl
T3V0cHV0LmgiCi0jaW5jbHVkZSAiQXVkaW9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJEb2N1bWVu
dC5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIlNjcmlwdENhbGxT
dGFjay5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY29uc3QgZG91YmxlIERlZmF1bHRHcmFpbkR1cmF0aW9u
ID0gMC4wMjA7IC8vIDIwbXMKLWNvbnN0IGRvdWJsZSBVbmtub3duVGltZSA9IC0xOwotCi0vLyBB
cmJpdHJhcnkgdXBwZXIgbGltaXQgb24gcGxheWJhY2sgcmF0ZS4KLS8vIEhpZ2hlciB0aGFuIGV4
cGVjdGVkIHJhdGVzIGNhbiBiZSB1c2VmdWwgd2hlbiBwbGF5aW5nIGJhY2sgb3ZlcnNhbXBsZWQg
YnVmZmVycwotLy8gdG8gbWluaW1pemUgbGluZWFyIGludGVycG9sYXRpb24gYWxpYXNpbmcuCi1j
b25zdCBkb3VibGUgTWF4UmF0ZSA9IDEwMjQ7Ci0KLVBhc3NSZWZQdHI8QXVkaW9CdWZmZXJTb3Vy
Y2VOb2RlPiBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OmNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRl
eHQsIGZsb2F0IHNhbXBsZVJhdGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBdWRpb0J1
ZmZlclNvdXJjZU5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkpOwotfQotCi1BdWRpb0J1ZmZlclNv
dXJjZU5vZGU6OkF1ZGlvQnVmZmVyU291cmNlTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZs
b2F0IHNhbXBsZVJhdGUpCi0gICAgOiBBdWRpb1NvdXJjZU5vZGUoY29udGV4dCwgc2FtcGxlUmF0
ZSkKLSAgICAsIG1fYnVmZmVyKDApCi0gICAgLCBtX2lzUGxheWluZyhmYWxzZSkKLSAgICAsIG1f
aXNMb29waW5nKGZhbHNlKQotICAgICwgbV9oYXNGaW5pc2hlZChmYWxzZSkKLSAgICAsIG1fc3Rh
cnRUaW1lKDAuMCkKLSAgICAsIG1fZW5kVGltZShVbmtub3duVGltZSkKLSAgICAsIG1fdmlydHVh
bFJlYWRJbmRleCgwKQotICAgICwgbV9pc0dyYWluKGZhbHNlKQotICAgICwgbV9ncmFpbk9mZnNl
dCgwLjApCi0gICAgLCBtX2dyYWluRHVyYXRpb24oRGVmYXVsdEdyYWluRHVyYXRpb24pCi0gICAg
LCBtX2xhc3RHYWluKDEuMCkKLSAgICAsIG1fcGFubmVyTm9kZSgwKQotewotICAgIHNldE5vZGVU
eXBlKE5vZGVUeXBlQXVkaW9CdWZmZXJTb3VyY2UpOwotCi0gICAgbV9nYWluID0gQXVkaW9HYWlu
OjpjcmVhdGUoImdhaW4iLCAxLjAsIDAuMCwgMS4wKTsKLSAgICBtX3BsYXliYWNrUmF0ZSA9IEF1
ZGlvUGFyYW06OmNyZWF0ZSgicGxheWJhY2tSYXRlIiwgMS4wLCAwLjAsIE1heFJhdGUpOwotICAg
IAotICAgIG1fZ2Fpbi0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICBtX3BsYXliYWNrUmF0ZS0+
c2V0Q29udGV4dChjb250ZXh0KTsKLQotICAgIC8vIERlZmF1bHQgdG8gbW9uby4gIEEgY2FsbCB0
byBzZXRCdWZmZXIoKSB3aWxsIHNldCB0aGUgbnVtYmVyIG9mIG91dHB1dCBjaGFubmVscyB0byB0
aGF0IG9mIHRoZSBidWZmZXIuCi0gICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVP
dXRwdXQodGhpcywgMSkpKTsKLQotICAgIGluaXRpYWxpemUoKTsKLX0KLQotQXVkaW9CdWZmZXJT
b3VyY2VOb2RlOjp+QXVkaW9CdWZmZXJTb3VyY2VOb2RlKCkKLXsKLSAgICB1bmluaXRpYWxpemUo
KTsKLX0KLQotdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnByb2Nlc3Moc2l6ZV90IGZyYW1l
c1RvUHJvY2VzcykKLXsKLSAgICBBdWRpb0J1cyogb3V0cHV0QnVzID0gb3V0cHV0KDApLT5idXMo
KTsKLQotICAgIGlmICghaXNJbml0aWFsaXplZCgpKSB7Ci0gICAgICAgIG91dHB1dEJ1cy0+emVy
bygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVGhlIGF1ZGlvIHRocmVhZCBj
YW4ndCBibG9jayBvbiB0aGlzIGxvY2ssIHNvIHdlIGNhbGwgdHJ5TG9jaygpIGluc3RlYWQuCi0g
ICAgLy8gQ2FyZWZ1bCAtIHRoaXMgaXMgYSB0cnlMb2NrKCkgYW5kIG5vdCBhbiBhdXRvbG9ja2Vy
LCBzbyB3ZSBtdXN0IHVubG9jaygpIGJlZm9yZSBldmVyeSByZXR1cm4uCi0gICAgaWYgKG1fcHJv
Y2Vzc0xvY2sudHJ5TG9jaygpKSB7Ci0gICAgICAgIC8vIENoZWNrIGlmIGl0J3MgdGltZSB0byBz
dGFydCBwbGF5aW5nLgotICAgICAgICBkb3VibGUgc2FtcGxlUmF0ZSA9IHRoaXMtPnNhbXBsZVJh
dGUoKTsKLSAgICAgICAgc2l6ZV90IHF1YW50dW1TdGFydEZyYW1lID0gY29udGV4dCgpLT5jdXJy
ZW50U2FtcGxlRnJhbWUoKTsKLSAgICAgICAgc2l6ZV90IHF1YW50dW1FbmRGcmFtZSA9IHF1YW50
dW1TdGFydEZyYW1lICsgZnJhbWVzVG9Qcm9jZXNzOwotICAgICAgICBzaXplX3Qgc3RhcnRGcmFt
ZSA9IEF1ZGlvVXRpbGl0aWVzOjp0aW1lVG9TYW1wbGVGcmFtZShtX3N0YXJ0VGltZSwgc2FtcGxl
UmF0ZSk7Ci0gICAgICAgIHNpemVfdCBlbmRGcmFtZSA9IG1fZW5kVGltZSA9PSBVbmtub3duVGlt
ZSA/IDAgOiBBdWRpb1V0aWxpdGllczo6dGltZVRvU2FtcGxlRnJhbWUobV9lbmRUaW1lLCBzYW1w
bGVSYXRlKTsKLQotICAgICAgICAvLyBJZiB3ZSBrbm93IHRoZSBlbmQgdGltZSBhbmQgaXQncyBh
bHJlYWR5IHBhc3NlZCwgdGhlbiBkb24ndCBib3RoZXIgZG9pbmcgYW55IG1vcmUgcmVuZGVyaW5n
IHRoaXMgY3ljbGUuCi0gICAgICAgIGlmIChtX2VuZFRpbWUgIT0gVW5rbm93blRpbWUgJiYgZW5k
RnJhbWUgPD0gcXVhbnR1bVN0YXJ0RnJhbWUpIHsKLSAgICAgICAgICAgIG1faXNQbGF5aW5nID0g
ZmFsc2U7Ci0gICAgICAgICAgICBtX3ZpcnR1YWxSZWFkSW5kZXggPSAwOwotICAgICAgICAgICAg
ZmluaXNoKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghbV9pc1BsYXlpbmcg
fHwgbV9oYXNGaW5pc2hlZCB8fCAhYnVmZmVyKCkgfHwgc3RhcnRGcmFtZSA+PSBxdWFudHVtRW5k
RnJhbWUpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBjYW4gb3B0aW1pemUgaGVyZSBieSBwcm9w
YWdhdGluZyBzaWxlbnQgaGludCBpbnN0ZWFkIG9mIGZvcmNpbmcgdGhlIHdob2xlIGNoYWluIHRv
IHByb2Nlc3Mgc2lsZW5jZS4KLSAgICAgICAgICAgIG91dHB1dEJ1cy0+emVybygpOwotICAgICAg
ICAgICAgbV9wcm9jZXNzTG9jay51bmxvY2soKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIHNpemVfdCBxdWFudHVtRnJhbWVPZmZzZXQgPSBzdGFydEZyYW1lID4g
cXVhbnR1bVN0YXJ0RnJhbWUgPyBzdGFydEZyYW1lIC0gcXVhbnR1bVN0YXJ0RnJhbWUgOiAwOwot
ICAgICAgICBxdWFudHVtRnJhbWVPZmZzZXQgPSBtaW4ocXVhbnR1bUZyYW1lT2Zmc2V0LCBmcmFt
ZXNUb1Byb2Nlc3MpOyAvLyBjbGFtcCB0byB2YWxpZCByYW5nZQotICAgICAgICBzaXplX3QgYnVm
ZmVyRnJhbWVzVG9Qcm9jZXNzID0gZnJhbWVzVG9Qcm9jZXNzIC0gcXVhbnR1bUZyYW1lT2Zmc2V0
OwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvdXRwdXRCdXMtPm51bWJlck9m
Q2hhbm5lbHMoKTsgKytpKSAKLSAgICAgICAgICAgIG1fZGVzdGluYXRpb25DaGFubmVsc1tpXSA9
IG91dHB1dEJ1cy0+Y2hhbm5lbChpKS0+bXV0YWJsZURhdGEoKTsKLQotICAgICAgICAvLyBSZW5k
ZXIgYnkgcmVhZGluZyBkaXJlY3RseSBmcm9tIHRoZSBidWZmZXIuCi0gICAgICAgIHJlbmRlckZy
b21CdWZmZXIob3V0cHV0QnVzLCBxdWFudHVtRnJhbWVPZmZzZXQsIGJ1ZmZlckZyYW1lc1RvUHJv
Y2Vzcyk7Ci0KLSAgICAgICAgLy8gQXBwbHkgdGhlIGdhaW4gKGluLXBsYWNlKSB0byB0aGUgb3V0
cHV0IGJ1cy4KLSAgICAgICAgZmxvYXQgdG90YWxHYWluID0gZ2FpbigpLT52YWx1ZSgpICogbV9i
dWZmZXItPmdhaW4oKTsKLSAgICAgICAgb3V0cHV0QnVzLT5jb3B5V2l0aEdhaW5Gcm9tKCpvdXRw
dXRCdXMsICZtX2xhc3RHYWluLCB0b3RhbEdhaW4pOwotCi0gICAgICAgIC8vIElmIHRoZSBlbmQg
dGltZSBpcyBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGlzIHRpbWUgcXVhbnR1bSwgdGhl
biBzaW1wbHkgemVybyBvdXQgdGhlCi0gICAgICAgIC8vIGZyYW1lcyBzdGFydGluZyBhdCB0aGUg
ZW5kIHRpbWUuCi0gICAgICAgIGlmIChtX2VuZFRpbWUgIT0gVW5rbm93blRpbWUgJiYgZW5kRnJh
bWUgPj0gcXVhbnR1bVN0YXJ0RnJhbWUgJiYgZW5kRnJhbWUgPCBxdWFudHVtRW5kRnJhbWUpIHsK
LSAgICAgICAgICAgIHNpemVfdCB6ZXJvU3RhcnRGcmFtZSA9IGVuZEZyYW1lIC0gcXVhbnR1bVN0
YXJ0RnJhbWU7Ci0gICAgICAgICAgICBzaXplX3QgZnJhbWVzVG9aZXJvID0gZnJhbWVzVG9Qcm9j
ZXNzIC0gemVyb1N0YXJ0RnJhbWU7Ci0KLSAgICAgICAgICAgIGJvb2wgaXNTYWZlID0gemVyb1N0
YXJ0RnJhbWUgPCBmcmFtZXNUb1Byb2Nlc3MgJiYgZnJhbWVzVG9aZXJvIDw9IGZyYW1lc1RvUHJv
Y2VzcyAmJiB6ZXJvU3RhcnRGcmFtZSArIGZyYW1lc1RvWmVybyA8PSBmcmFtZXNUb1Byb2Nlc3M7
Ci0gICAgICAgICAgICBBU1NFUlQoaXNTYWZlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKGlzU2FmZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBv
dXRwdXRCdXMtPm51bWJlck9mQ2hhbm5lbHMoKTsgKytpKQotICAgICAgICAgICAgICAgICAgICBt
ZW1zZXQobV9kZXN0aW5hdGlvbkNoYW5uZWxzW2ldICsgemVyb1N0YXJ0RnJhbWUsIDAsIHNpemVv
ZihmbG9hdCkgKiBmcmFtZXNUb1plcm8pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBt
X2lzUGxheWluZyA9IGZhbHNlOwotICAgICAgICAgICAgbV92aXJ0dWFsUmVhZEluZGV4ID0gMDsK
LSAgICAgICAgICAgIGZpbmlzaCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9wcm9jZXNzTG9j
ay51bmxvY2soKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBUb28gYmFkIC0gdGhlIHRyeUxv
Y2soKSBmYWlsZWQuICBXZSBtdXN0IGJlIGluIHRoZSBtaWRkbGUgb2YgY2hhbmdpbmcgYnVmZmVy
cyBhbmQgd2VyZSBhbHJlYWR5IG91dHB1dHRpbmcgc2lsZW5jZSBhbnl3YXkuCi0gICAgICAgIG91
dHB1dEJ1cy0+emVybygpOwotICAgIH0KLX0KLQotLy8gUmV0dXJucyB0cnVlIGlmIHdlJ3JlIGZp
bmlzaGVkLgotYm9vbCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnJlbmRlclNpbGVuY2VBbmRGaW5p
c2hJZk5vdExvb3BpbmcoQXVkaW9CdXMqLCB1bnNpZ25lZCBpbmRleCwgc2l6ZV90IGZyYW1lc1Rv
UHJvY2VzcykKLXsKLSAgICBpZiAoIWxvb3AoKSkgewotICAgICAgICAvLyBJZiB3ZSdyZSBub3Qg
bG9vcGluZywgdGhlbiBzdG9wIHBsYXlpbmcgd2hlbiB3ZSBnZXQgdG8gdGhlIGVuZC4KLSAgICAg
ICAgbV9pc1BsYXlpbmcgPSBmYWxzZTsKLQotICAgICAgICBpZiAoZnJhbWVzVG9Qcm9jZXNzID4g
MCkgewotICAgICAgICAgICAgLy8gV2UncmUgbm90IGxvb3BpbmcgYW5kIHdlJ3ZlIHJlYWNoZWQg
dGhlIGVuZCBvZiB0aGUgc2FtcGxlIGRhdGEsIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvIHByb3ZpZGUg
bW9yZSBvdXRwdXQsCi0gICAgICAgICAgICAvLyBzbyBnZW5lcmF0ZSBzaWxlbmNlIGZvciB0aGUg
cmVtYWluaW5nLgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9m
Q2hhbm5lbHMoKTsgKytpKSAKLSAgICAgICAgICAgICAgICBtZW1zZXQobV9kZXN0aW5hdGlvbkNo
YW5uZWxzW2ldICsgaW5kZXgsIDAsIHNpemVvZihmbG9hdCkgKiBmcmFtZXNUb1Byb2Nlc3MpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZmluaXNoKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpy
ZW5kZXJGcm9tQnVmZmVyKEF1ZGlvQnVzKiBidXMsIHVuc2lnbmVkIGRlc3RpbmF0aW9uRnJhbWVP
ZmZzZXQsIHNpemVfdCBudW1iZXJPZkZyYW1lcykKLXsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5p
c0F1ZGlvVGhyZWFkKCkpOwotICAgIAotICAgIC8vIEJhc2ljIHNhbml0eSBjaGVja2luZwotICAg
IEFTU0VSVChidXMpOwotICAgIEFTU0VSVChidWZmZXIoKSk7Ci0gICAgaWYgKCFidXMgfHwgIWJ1
ZmZlcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxz
ID0gdGhpcy0+bnVtYmVyT2ZDaGFubmVscygpOwotICAgIHVuc2lnbmVkIGJ1c051bWJlck9mQ2hh
bm5lbHMgPSBidXMtPm51bWJlck9mQ2hhbm5lbHMoKTsKLQotICAgIGJvb2wgY2hhbm5lbENvdW50
R29vZCA9IG51bWJlck9mQ2hhbm5lbHMgJiYgbnVtYmVyT2ZDaGFubmVscyA9PSBidXNOdW1iZXJP
ZkNoYW5uZWxzOwotICAgIEFTU0VSVChjaGFubmVsQ291bnRHb29kKTsKLSAgICBpZiAoIWNoYW5u
ZWxDb3VudEdvb2QpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFNhbml0eSBjaGVjayBkZXN0
aW5hdGlvbkZyYW1lT2Zmc2V0LCBudW1iZXJPZkZyYW1lcy4KLSAgICBzaXplX3QgZGVzdGluYXRp
b25MZW5ndGggPSBidXMtPmxlbmd0aCgpOwotCi0gICAgYm9vbCBpc0xlbmd0aEdvb2QgPSBkZXN0
aW5hdGlvbkxlbmd0aCA8PSA0MDk2ICYmIG51bWJlck9mRnJhbWVzIDw9IDQwOTY7Ci0gICAgQVNT
RVJUKGlzTGVuZ3RoR29vZCk7Ci0gICAgaWYgKCFpc0xlbmd0aEdvb2QpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGJvb2wgaXNPZmZzZXRHb29kID0gZGVzdGluYXRpb25GcmFtZU9mZnNldCA8PSBk
ZXN0aW5hdGlvbkxlbmd0aCAmJiBkZXN0aW5hdGlvbkZyYW1lT2Zmc2V0ICsgbnVtYmVyT2ZGcmFt
ZXMgPD0gZGVzdGluYXRpb25MZW5ndGg7Ci0gICAgQVNTRVJUKGlzT2Zmc2V0R29vZCk7Ci0gICAg
aWYgKCFpc09mZnNldEdvb2QpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFBvdGVudGlhbGx5
IHplcm8gb3V0IGluaXRpYWwgZnJhbWVzIGxlYWRpbmcgdXAgdG8gdGhlIG9mZnNldC4KLSAgICBp
ZiAoZGVzdGluYXRpb25GcmFtZU9mZnNldCkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSAKLSAgICAgICAgICAgIG1lbXNldChtX2Rlc3Rp
bmF0aW9uQ2hhbm5lbHNbaV0sIDAsIHNpemVvZihmbG9hdCkgKiBkZXN0aW5hdGlvbkZyYW1lT2Zm
c2V0KTsKLSAgICB9Ci0KLSAgICAvLyBPZmZzZXQgdGhlIHBvaW50ZXJzIHRvIHRoZSBjb3JyZWN0
IG9mZnNldCBmcmFtZS4KLSAgICB1bnNpZ25lZCB3cml0ZUluZGV4ID0gZGVzdGluYXRpb25GcmFt
ZU9mZnNldDsKLQotICAgIHNpemVfdCBidWZmZXJMZW5ndGggPSBidWZmZXIoKS0+bGVuZ3RoKCk7
Ci0gICAgZG91YmxlIGJ1ZmZlclNhbXBsZVJhdGUgPSBidWZmZXIoKS0+c2FtcGxlUmF0ZSgpOwot
Ci0gICAgLy8gQ2FsY3VsYXRlIHRoZSBzdGFydCBhbmQgZW5kIGZyYW1lcyBpbiBvdXIgYnVmZmVy
IHRoYXQgd2Ugd2FudCB0byBwbGF5LgotICAgIC8vIElmIG1faXNHcmFpbiBpcyB0cnVlLCB0aGVu
IHdlIHdpbGwgYmUgcGxheWluZyBhIHBvcnRpb24gb2YgdGhlIHRvdGFsIGJ1ZmZlci4KLSAgICB1
bnNpZ25lZCBzdGFydEZyYW1lID0gbV9pc0dyYWluID8gQXVkaW9VdGlsaXRpZXM6OnRpbWVUb1Nh
bXBsZUZyYW1lKG1fZ3JhaW5PZmZzZXQsIGJ1ZmZlclNhbXBsZVJhdGUpIDogMDsKLQotICAgIC8v
IEF2b2lkIGNvbnZlcnRpbmcgZnJvbSB0aW1lIHRvIHNhbXBsZS1mcmFtZXMgdHdpY2UgYnkgY29t
cHV0aW5nCi0gICAgLy8gdGhlIGdyYWluIGVuZCB0aW1lIGZpcnN0IGJlZm9yZSBjb21wdXRpbmcg
dGhlIHNhbXBsZSBmcmFtZS4KLSAgICB1bnNpZ25lZCBlbmRGcmFtZSA9IG1faXNHcmFpbiA/IEF1
ZGlvVXRpbGl0aWVzOjp0aW1lVG9TYW1wbGVGcmFtZShtX2dyYWluT2Zmc2V0ICsgbV9ncmFpbkR1
cmF0aW9uLCBidWZmZXJTYW1wbGVSYXRlKSA6IGJ1ZmZlckxlbmd0aDsKLSAgICAKLSAgICBBU1NF
UlQoZW5kRnJhbWUgPj0gc3RhcnRGcmFtZSk7Ci0gICAgaWYgKGVuZEZyYW1lIDwgc3RhcnRGcmFt
ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHVuc2lnbmVkIGRlbHRhRnJhbWVzID0gZW5k
RnJhbWUgLSBzdGFydEZyYW1lOwotICAgIAotICAgIC8vIFRoaXMgaXMgYSBIQUNLIHRvIGFsbG93
IGZvciBIUlRGIHRhaWwtdGltZSAtIGF2b2lkcyBnbGl0Y2ggYXQgZW5kLgotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQgdGFpbFRpbWUgZm9yIGVhY2ggQXVkaW9Ob2RlIGZvciBhIG1vcmUgZ2VuZXJh
bCBzb2x1dGlvbiB0byB0aGlzIHByb2JsZW0uCi0gICAgaWYgKG1faXNHcmFpbikKLSAgICAgICAg
ZW5kRnJhbWUgKz0gNTEyOwotCi0gICAgLy8gRG8gc29tZSBzYW5pdHkgY2hlY2tpbmcuCi0gICAg
aWYgKHN0YXJ0RnJhbWUgPj0gYnVmZmVyTGVuZ3RoKQotICAgICAgICBzdGFydEZyYW1lID0gIWJ1
ZmZlckxlbmd0aCA/IDAgOiBidWZmZXJMZW5ndGggLSAxOwotICAgIGlmIChlbmRGcmFtZSA+IGJ1
ZmZlckxlbmd0aCkKLSAgICAgICAgZW5kRnJhbWUgPSBidWZmZXJMZW5ndGg7Ci0gICAgaWYgKG1f
dmlydHVhbFJlYWRJbmRleCA+PSBlbmRGcmFtZSkKLSAgICAgICAgbV92aXJ0dWFsUmVhZEluZGV4
ID0gc3RhcnRGcmFtZTsgLy8gcmVzZXQgdG8gc3RhcnQKLQotICAgIGRvdWJsZSBwaXRjaFJhdGUg
PSB0b3RhbFBpdGNoUmF0ZSgpOwotCi0gICAgLy8gR2V0IGxvY2FsIGNvcHkuCi0gICAgZG91Ymxl
IHZpcnR1YWxSZWFkSW5kZXggPSBtX3ZpcnR1YWxSZWFkSW5kZXg7Ci0KLSAgICAvLyBSZW5kZXIg
bG9vcCAtIHJlYWRpbmcgZnJvbSB0aGUgc291cmNlIGJ1ZmZlciB0byB0aGUgZGVzdGluYXRpb24g
dXNpbmcgbGluZWFyIGludGVycG9sYXRpb24uCi0gICAgaW50IGZyYW1lc1RvUHJvY2VzcyA9IG51
bWJlck9mRnJhbWVzOwotCi0gICAgY29uc3QgZmxvYXQqKiBzb3VyY2VDaGFubmVscyA9IG1fc291
cmNlQ2hhbm5lbHMuZ2V0KCk7Ci0gICAgZmxvYXQqKiBkZXN0aW5hdGlvbkNoYW5uZWxzID0gbV9k
ZXN0aW5hdGlvbkNoYW5uZWxzLmdldCgpOwotCi0gICAgLy8gT3B0aW1pemUgZm9yIHRoZSB2ZXJ5
IGNvbW1vbiBjYXNlIG9mIHBsYXlpbmcgYmFjayB3aXRoIHBpdGNoUmF0ZSA9PSAxLgotICAgIC8v
IFdlIGNhbiBhdm9pZCB0aGUgbGluZWFyIGludGVycG9sYXRpb24uCi0gICAgaWYgKHBpdGNoUmF0
ZSA9PSAxICYmIHZpcnR1YWxSZWFkSW5kZXggPT0gZmxvb3IodmlydHVhbFJlYWRJbmRleCkpIHsK
LSAgICAgICAgdW5zaWduZWQgcmVhZEluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZpcnR1
YWxSZWFkSW5kZXgpOwotICAgICAgICB3aGlsZSAoZnJhbWVzVG9Qcm9jZXNzID4gMCkgewotICAg
ICAgICAgICAgaW50IGZyYW1lc1RvRW5kID0gZW5kRnJhbWUgLSByZWFkSW5kZXg7Ci0gICAgICAg
ICAgICBpbnQgZnJhbWVzVGhpc1RpbWUgPSBtaW4oZnJhbWVzVG9Qcm9jZXNzLCBmcmFtZXNUb0Vu
ZCk7Ci0gICAgICAgICAgICBmcmFtZXNUaGlzVGltZSA9IG1heCgwLCBmcmFtZXNUaGlzVGltZSk7
Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxz
OyArK2kpIAotICAgICAgICAgICAgICAgIG1lbWNweShkZXN0aW5hdGlvbkNoYW5uZWxzW2ldICsg
d3JpdGVJbmRleCwgc291cmNlQ2hhbm5lbHNbaV0gKyByZWFkSW5kZXgsIHNpemVvZihmbG9hdCkg
KiBmcmFtZXNUaGlzVGltZSk7Ci0KLSAgICAgICAgICAgIHdyaXRlSW5kZXggKz0gZnJhbWVzVGhp
c1RpbWU7Ci0gICAgICAgICAgICByZWFkSW5kZXggKz0gZnJhbWVzVGhpc1RpbWU7Ci0gICAgICAg
ICAgICBmcmFtZXNUb1Byb2Nlc3MgLT0gZnJhbWVzVGhpc1RpbWU7Ci0KLSAgICAgICAgICAgIC8v
IFdyYXAtYXJvdW5kLgotICAgICAgICAgICAgaWYgKHJlYWRJbmRleCA+PSBlbmRGcmFtZSkgewot
ICAgICAgICAgICAgICAgIHJlYWRJbmRleCAtPSBkZWx0YUZyYW1lczsKLSAgICAgICAgICAgICAg
ICBpZiAocmVuZGVyU2lsZW5jZUFuZEZpbmlzaElmTm90TG9vcGluZyhidXMsIHdyaXRlSW5kZXgs
IGZyYW1lc1RvUHJvY2VzcykpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIHZpcnR1YWxSZWFkSW5kZXggPSByZWFkSW5kZXg7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgd2hpbGUgKGZyYW1lc1RvUHJvY2Vzcy0tKSB7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCByZWFkSW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmlydHVhbFJl
YWRJbmRleCk7Ci0gICAgICAgICAgICBkb3VibGUgaW50ZXJwb2xhdGlvbkZhY3RvciA9IHZpcnR1
YWxSZWFkSW5kZXggLSByZWFkSW5kZXg7Ci0KLSAgICAgICAgICAgIC8vIEZvciBsaW5lYXIgaW50
ZXJwb2xhdGlvbiB3ZSBuZWVkIHRoZSBuZXh0IHNhbXBsZS1mcmFtZSB0b28uCi0gICAgICAgICAg
ICB1bnNpZ25lZCByZWFkSW5kZXgyID0gcmVhZEluZGV4ICsgMTsKLSAgICAgICAgICAgIGlmIChy
ZWFkSW5kZXgyID49IGVuZEZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxvb3AoKSkgewot
ICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdG8gd3JhcCBhcm91bmQgYXQgdGhlIGVu
ZCBvZiB0aGUgYnVmZmVyLgotICAgICAgICAgICAgICAgICAgICByZWFkSW5kZXgyIC09IGRlbHRh
RnJhbWVzOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICByZWFk
SW5kZXgyID0gcmVhZEluZGV4OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBGaW5h
bCBzYW5pdHkgY2hlY2sgb24gYnVmZmVyIGFjY2Vzcy4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBh
cyBhbiBvcHRpbWl6YXRpb24sIHRyeSB0byBnZXQgcmlkIG9mIHRoaXMgaW5uZXItbG9vcCBjaGVj
ayBhbmQgcHV0IGFzc2VydGlvbnMgYW5kIGd1YXJkcyBiZWZvcmUgdGhlIGxvb3AuCi0gICAgICAg
ICAgICBpZiAocmVhZEluZGV4ID49IGJ1ZmZlckxlbmd0aCB8fCByZWFkSW5kZXgyID49IGJ1ZmZl
ckxlbmd0aCkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgLy8gTGluZWFy
IGludGVycG9sYXRpb24uCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
YmVyT2ZDaGFubmVsczsgKytpKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9u
ID0gZGVzdGluYXRpb25DaGFubmVsc1tpXTsKLSAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCog
c291cmNlID0gc291cmNlQ2hhbm5lbHNbaV07Ci0KLSAgICAgICAgICAgICAgICBkb3VibGUgc2Ft
cGxlMSA9IHNvdXJjZVtyZWFkSW5kZXhdOwotICAgICAgICAgICAgICAgIGRvdWJsZSBzYW1wbGUy
ID0gc291cmNlW3JlYWRJbmRleDJdOwotICAgICAgICAgICAgICAgIGRvdWJsZSBzYW1wbGUgPSAo
MS4wIC0gaW50ZXJwb2xhdGlvbkZhY3RvcikgKiBzYW1wbGUxICsgaW50ZXJwb2xhdGlvbkZhY3Rv
ciAqIHNhbXBsZTI7Ci0KLSAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblt3cml0ZUluZGV4XSA9
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoc2FtcGxlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHdyaXRlSW5kZXgrKzsKLQotICAgICAgICAgICAgdmlydHVhbFJlYWRJbmRleCArPSBwaXRj
aFJhdGU7Ci0KLSAgICAgICAgICAgIC8vIFdyYXAtYXJvdW5kLCByZXRhaW5pbmcgc3ViLXNhbXBs
ZSBwb3NpdGlvbiBzaW5jZSB2aXJ0dWFsUmVhZEluZGV4IGlzIGZsb2F0aW5nLXBvaW50LgotICAg
ICAgICAgICAgaWYgKHZpcnR1YWxSZWFkSW5kZXggPj0gZW5kRnJhbWUpIHsKLSAgICAgICAgICAg
ICAgICB2aXJ0dWFsUmVhZEluZGV4IC09IGRlbHRhRnJhbWVzOwotCi0gICAgICAgICAgICAgICAg
aWYgKHJlbmRlclNpbGVuY2VBbmRGaW5pc2hJZk5vdExvb3BpbmcoYnVzLCB3cml0ZUluZGV4LCBm
cmFtZXNUb1Byb2Nlc3MpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0gCi0gICAgbV92aXJ0dWFsUmVhZEluZGV4ID0gdmlydHVhbFJl
YWRJbmRleDsKLX0KLQotCi12b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6cmVzZXQoKQotewot
ICAgIG1fdmlydHVhbFJlYWRJbmRleCA9IDA7Ci0gICAgbV9sYXN0R2FpbiA9IGdhaW4oKS0+dmFs
dWUoKTsKLX0KLQotdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OmZpbmlzaCgpCi17Ci0gICAg
aWYgKCFtX2hhc0ZpbmlzaGVkKSB7Ci0gICAgICAgIC8vIExldCB0aGUgY29udGV4dCBkZXJlZmVy
ZW5jZSB0aGlzIEF1ZGlvTm9kZS4KLSAgICAgICAgY29udGV4dCgpLT5ub3RpZnlOb2RlRmluaXNo
ZWRQcm9jZXNzaW5nKHRoaXMpOwotICAgICAgICBtX2hhc0ZpbmlzaGVkID0gdHJ1ZTsKLSAgICB9
Ci19Ci0KLWJvb2wgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpzZXRCdWZmZXIoQXVkaW9CdWZmZXIq
IGJ1ZmZlcikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIAotICAgIC8vIFRo
ZSBjb250ZXh0IG11c3QgYmUgbG9ja2VkIHNpbmNlIGNoYW5naW5nIHRoZSBidWZmZXIgY2FuIHJl
LWNvbmZpZ3VyZSB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIHRoYXQgYXJlIG91dHB1dC4KLSAgICBB
dWRpb0NvbnRleHQ6OkF1dG9Mb2NrZXIgY29udGV4dExvY2tlcihjb250ZXh0KCkpOwotICAgIAot
ICAgIC8vIFRoaXMgc3luY2hyb25pemVzIHdpdGggcHJvY2VzcygpLgotICAgIE11dGV4TG9ja2Vy
IHByb2Nlc3NMb2NrZXIobV9wcm9jZXNzTG9jayk7Ci0gICAgCi0gICAgaWYgKGJ1ZmZlcikgewot
ICAgICAgICAvLyBEbyBhbnkgbmVjZXNzc2FyeSByZS1jb25maWd1cmF0aW9uIHRvIHRoZSBidWZm
ZXIncyBudW1iZXIgb2YgY2hhbm5lbHMuCi0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5l
bHMgPSBidWZmZXItPm51bWJlck9mQ2hhbm5lbHMoKTsKLQotICAgICAgICBpZiAobnVtYmVyT2ZD
aGFubmVscyA+IEF1ZGlvQ29udGV4dDo6bWF4TnVtYmVyT2ZDaGFubmVscygpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIG91dHB1dCgwKS0+c2V0TnVtYmVyT2ZDaGFubmVs
cyhudW1iZXJPZkNoYW5uZWxzKTsKLQotICAgICAgICBtX3NvdXJjZUNoYW5uZWxzID0gYWRvcHRB
cnJheVB0cihuZXcgY29uc3QgZmxvYXQqIFtudW1iZXJPZkNoYW5uZWxzXSk7Ci0gICAgICAgIG1f
ZGVzdGluYXRpb25DaGFubmVscyA9IGFkb3B0QXJyYXlQdHIobmV3IGZsb2F0KiBbbnVtYmVyT2ZD
aGFubmVsc10pOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNo
YW5uZWxzOyArK2kpIAotICAgICAgICAgICAgbV9zb3VyY2VDaGFubmVsc1tpXSA9IGJ1ZmZlci0+
Z2V0Q2hhbm5lbERhdGEoaSktPmRhdGEoKTsKLSAgICB9Ci0KLSAgICBtX3ZpcnR1YWxSZWFkSW5k
ZXggPSAwOwotICAgIG1fYnVmZmVyID0gYnVmZmVyOwotICAgIAotICAgIHJldHVybiB0cnVlOwot
fQotCi11bnNpZ25lZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6Om51bWJlck9mQ2hhbm5lbHMoKQot
ewotICAgIHJldHVybiBvdXRwdXQoMCktPm51bWJlck9mQ2hhbm5lbHMoKTsKLX0KLQotdm9pZCBB
dWRpb0J1ZmZlclNvdXJjZU5vZGU6Om5vdGVPbihkb3VibGUgd2hlbikKLXsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX2lzUGxheWluZykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9pc0dyYWluID0gZmFsc2U7Ci0gICAgbV9zdGFydFRpbWUgPSB3aGVuOwotICAgIG1f
dmlydHVhbFJlYWRJbmRleCA9IDA7Ci0gICAgbV9pc1BsYXlpbmcgPSB0cnVlOwotfQotCi12b2lk
IEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6bm90ZUdyYWluT24oZG91YmxlIHdoZW4sIGRvdWJsZSBn
cmFpbk9mZnNldCwgZG91YmxlIGdyYWluRHVyYXRpb24pCi17Ci0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLSAgICBpZiAobV9pc1BsYXlpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghYnVmZmVyKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgLy8gRG8gc2FuaXR5
IGNoZWNraW5nIG9mIGdyYWluIHBhcmFtZXRlcnMgdmVyc3VzIGJ1ZmZlciBzaXplLgotICAgIGRv
dWJsZSBidWZmZXJEdXJhdGlvbiA9IGJ1ZmZlcigpLT5kdXJhdGlvbigpOwotCi0gICAgaWYgKGdy
YWluRHVyYXRpb24gPiBidWZmZXJEdXJhdGlvbikKLSAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTog
bWF5YmUgc2hvdWxkIHRocm93IGV4Y2VwdGlvbiAtIGNvbnNpZGVyIGluIHNwZWNpZmljYXRpb24u
Ci0gICAgCi0gICAgZG91YmxlIG1heEdyYWluT2Zmc2V0ID0gYnVmZmVyRHVyYXRpb24gLSBncmFp
bkR1cmF0aW9uOwotICAgIG1heEdyYWluT2Zmc2V0ID0gbWF4KDAuMCwgbWF4R3JhaW5PZmZzZXQp
OwotCi0gICAgZ3JhaW5PZmZzZXQgPSBtYXgoMC4wLCBncmFpbk9mZnNldCk7Ci0gICAgZ3JhaW5P
ZmZzZXQgPSBtaW4obWF4R3JhaW5PZmZzZXQsIGdyYWluT2Zmc2V0KTsKLSAgICBtX2dyYWluT2Zm
c2V0ID0gZ3JhaW5PZmZzZXQ7Ci0KLSAgICBtX2dyYWluRHVyYXRpb24gPSBncmFpbkR1cmF0aW9u
OwotICAgIAotICAgIG1faXNHcmFpbiA9IHRydWU7Ci0gICAgbV9zdGFydFRpbWUgPSB3aGVuOwot
Ci0gICAgLy8gV2UgY2FsbCB0aW1lVG9TYW1wbGVGcmFtZSBoZXJlIHNpbmNlIGF0IHBsYXliYWNr
UmF0ZSA9PSAxIHdlIGRvbid0IHdhbnQgdG8gZ28gdGhyb3VnaCBsaW5lYXIgaW50ZXJwb2xhdGlv
bgotICAgIC8vIGF0IGEgc3ViLXNhbXBsZSBwb3NpdGlvbiBzaW5jZSBpdCB3aWxsIGRlZ3JhZGUg
dGhlIHF1YWxpdHkuCi0gICAgLy8gV2hlbiBhbGlnbmVkIHRvIHRoZSBzYW1wbGUtZnJhbWUgdGhl
IHBsYXliYWNrIHdpbGwgYmUgaWRlbnRpY2FsIHRvIHRoZSBQQ00gZGF0YSBzdG9yZWQgaW4gdGhl
IGJ1ZmZlci4KLSAgICAvLyBTaW5jZSBwbGF5YmFja1JhdGUgPT0gMSBpcyB2ZXJ5IGNvbW1vbiwg
aXQncyB3b3J0aCBjb25zaWRlcmluZyBxdWFsaXR5LgotICAgIG1fdmlydHVhbFJlYWRJbmRleCA9
IEF1ZGlvVXRpbGl0aWVzOjp0aW1lVG9TYW1wbGVGcmFtZShtX2dyYWluT2Zmc2V0LCBidWZmZXIo
KS0+c2FtcGxlUmF0ZSgpKTsKLSAgICAKLSAgICBtX2lzUGxheWluZyA9IHRydWU7Ci19Ci0KLXZv
aWQgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpub3RlT2ZmKGRvdWJsZSB3aGVuKQotewotICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX2lzUGxheWluZykKLSAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIHdoZW4gPSBtYXgoMC4wLCB3aGVuKTsKLSAgICBtX2VuZFRpbWUgPSB3
aGVuOwotfQotCi1kb3VibGUgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjp0b3RhbFBpdGNoUmF0ZSgp
Ci17Ci0gICAgZG91YmxlIGRvcHBsZXJSYXRlID0gMS4wOwotICAgIGlmIChtX3Bhbm5lck5vZGUu
Z2V0KCkpCi0gICAgICAgIGRvcHBsZXJSYXRlID0gbV9wYW5uZXJOb2RlLT5kb3BwbGVyUmF0ZSgp
OwotICAgIAotICAgIC8vIEluY29ycG9yYXRlIGJ1ZmZlcidzIHNhbXBsZS1yYXRlIHZlcnN1cyBB
dWRpb0NvbnRleHQncyBzYW1wbGUtcmF0ZS4KLSAgICAvLyBOb3JtYWxseSBpdCdzIG5vdCBhbiBp
c3N1ZSBiZWNhdXNlIGJ1ZmZlcnMgYXJlIGxvYWRlZCBhdCB0aGUgQXVkaW9Db250ZXh0J3Mgc2Ft
cGxlLXJhdGUsIGJ1dCB3ZSBjYW4gaGFuZGxlIGl0IGluIGFueSBjYXNlLgotICAgIGRvdWJsZSBz
YW1wbGVSYXRlRmFjdG9yID0gMS4wOwotICAgIGlmIChidWZmZXIoKSkKLSAgICAgICAgc2FtcGxl
UmF0ZUZhY3RvciA9IGJ1ZmZlcigpLT5zYW1wbGVSYXRlKCkgLyBzYW1wbGVSYXRlKCk7Ci0gICAg
Ci0gICAgZG91YmxlIGJhc2VQaXRjaFJhdGUgPSBwbGF5YmFja1JhdGUoKS0+dmFsdWUoKTsKLQot
ICAgIGRvdWJsZSB0b3RhbFJhdGUgPSBkb3BwbGVyUmF0ZSAqIHNhbXBsZVJhdGVGYWN0b3IgKiBi
YXNlUGl0Y2hSYXRlOwotCi0gICAgLy8gU2FuaXR5IGNoZWNrIHRoZSB0b3RhbCByYXRlLiAgSXQn
cyB2ZXJ5IGltcG9ydGFudCB0aGF0IHRoZSByZXNhbXBsZXIgbm90IGdldCBhbnkgYmFkIHJhdGUg
dmFsdWVzLgotICAgIHRvdGFsUmF0ZSA9IG1heCgwLjAsIHRvdGFsUmF0ZSk7Ci0gICAgaWYgKCF0
b3RhbFJhdGUpCi0gICAgICAgIHRvdGFsUmF0ZSA9IDE7IC8vIHplcm8gcmF0ZSBpcyBjb25zaWRl
cmVkIGlsbGVnYWwKLSAgICB0b3RhbFJhdGUgPSBtaW4oTWF4UmF0ZSwgdG90YWxSYXRlKTsKLSAg
ICAKLSAgICBib29sIGlzVG90YWxSYXRlVmFsaWQgPSAhaXNuYW4odG90YWxSYXRlKSAmJiAhaXNp
bmYodG90YWxSYXRlKTsKLSAgICBBU1NFUlQoaXNUb3RhbFJhdGVWYWxpZCk7Ci0gICAgaWYgKCFp
c1RvdGFsUmF0ZVZhbGlkKQotICAgICAgICB0b3RhbFJhdGUgPSAxLjA7Ci0KLSAgICByZXR1cm4g
dG90YWxSYXRlOwotfQotCi1ib29sIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6bG9vcGluZygpCi17
Ci0gICAgc3RhdGljIGJvb2wgZmlyc3RUaW1lID0gdHJ1ZTsKLSAgICBpZiAoZmlyc3RUaW1lICYm
IGNvbnRleHQoKSAmJiBjb250ZXh0KCktPmRvY3VtZW50KCkpIHsKLSAgICAgICAgY29udGV4dCgp
LT5kb2N1bWVudCgpLT5hZGRDb25zb2xlTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3Nh
Z2VUeXBlLCBXYXJuaW5nTWVzc2FnZUxldmVsLCAiQXVkaW9CdWZmZXJTb3VyY2VOb2RlICdsb29w
aW5nJyBhdHRyaWJ1dGUgaXMgZGVwcmVjYXRlZC4gIFVzZSAnbG9vcCcgaW5zdGVhZC4iKTsKLSAg
ICAgICAgZmlyc3RUaW1lID0gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1faXNMb29waW5n
OwotfQotCi12b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6c2V0TG9vcGluZyhib29sIGxvb3Bp
bmcpCi17Ci0gICAgc3RhdGljIGJvb2wgZmlyc3RUaW1lID0gdHJ1ZTsKLSAgICBpZiAoZmlyc3RU
aW1lICYmIGNvbnRleHQoKSAmJiBjb250ZXh0KCktPmRvY3VtZW50KCkpIHsKLSAgICAgICAgY29u
dGV4dCgpLT5kb2N1bWVudCgpLT5hZGRDb25zb2xlTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExv
Z01lc3NhZ2VUeXBlLCBXYXJuaW5nTWVzc2FnZUxldmVsLCAiQXVkaW9CdWZmZXJTb3VyY2VOb2Rl
ICdsb29waW5nJyBhdHRyaWJ1dGUgaXMgZGVwcmVjYXRlZC4gIFVzZSAnbG9vcCcgaW5zdGVhZC4i
KTsKLSAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7Ci0gICAgfQotCi0gICAgbV9pc0xvb3Bpbmcg
PSBsb29waW5nOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJT
b3VyY2VOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9C
dWZmZXJTb3VyY2VOb2RlLmgJKHJldmlzaW9uIDExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBdWRpb0J1ZmZlclNvdXJjZU5vZGVfaAotI2Rl
ZmluZSBBdWRpb0J1ZmZlclNvdXJjZU5vZGVfaAotCi0jaW5jbHVkZSAiQXVkaW9CdWZmZXIuaCIK
LSNpbmNsdWRlICJBdWRpb0J1cy5oIgotI2luY2x1ZGUgIkF1ZGlvR2Fpbi5oIgotI2luY2x1ZGUg
IkF1ZGlvUGFubmVyTm9kZS5oIgotI2luY2x1ZGUgIkF1ZGlvU291cmNlTm9kZS5oIgotI2luY2x1
ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb0NvbnRleHQ7Ci0KLS8vIEF1ZGlvQnVmZmVyU291
cmNlTm9kZSBpcyBhbiBBdWRpb05vZGUgcmVwcmVzZW50aW5nIGFuIGF1ZGlvIHNvdXJjZSBmcm9t
IGFuIGluLW1lbW9yeSBhdWRpbyBhc3NldCByZXByZXNlbnRlZCBieSBhbiBBdWRpb0J1ZmZlci4K
LS8vIEl0IGdlbmVyYWxseSB3aWxsIGJlIHVzZWQgZm9yIHNob3J0IHNvdW5kcyB3aGljaCByZXF1
aXJlIGEgaGlnaCBkZWdyZWUgb2Ygc2NoZWR1bGluZyBmbGV4aWJpbGl0eSAoY2FuIHBsYXliYWNr
IGluIHJoeXRobWljYWxseSBwZXJmZWN0IHdheXMpLgotCi1jbGFzcyBBdWRpb0J1ZmZlclNvdXJj
ZU5vZGUgOiBwdWJsaWMgQXVkaW9Tb3VyY2VOb2RlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxBdWRpb0J1ZmZlclNvdXJjZU5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHQqLCBmbG9h
dCBzYW1wbGVSYXRlKTsKLQotICAgIHZpcnR1YWwgfkF1ZGlvQnVmZmVyU291cmNlTm9kZSgpOwot
ICAgIAotICAgIC8vIEF1ZGlvTm9kZQotICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKHNpemVfdCBm
cmFtZXNUb1Byb2Nlc3MpOwotICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOwotICAgIAotICAgIC8v
IHNldEJ1ZmZlcigpIGlzIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQuICBUaGlzIGlzIHRoZSBi
dWZmZXIgd2UgdXNlIGZvciBwbGF5YmFjay4KLSAgICAvLyByZXR1cm5zIHRydWUgb24gc3VjY2Vz
cy4KLSAgICBib29sIHNldEJ1ZmZlcihBdWRpb0J1ZmZlciopOwotICAgIEF1ZGlvQnVmZmVyKiBi
dWZmZXIoKSB7IHJldHVybiBtX2J1ZmZlci5nZXQoKTsgfQotICAgICAgICAgICAgICAgICAgICAK
LSAgICAvLyBudW1iZXJPZkNoYW5uZWxzKCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIG91dHB1dCBj
aGFubmVscy4gIFRoaXMgdmFsdWUgZXF1YWxzIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgZnJvbSB0
aGUgYnVmZmVyLgotICAgIC8vIElmIGEgbmV3IGJ1ZmZlciBpcyBzZXQgd2l0aCBhIGRpZmZlcmVu
dCBudW1iZXIgb2YgY2hhbm5lbHMsIHRoZW4gdGhpcyB2YWx1ZSB3aWxsIGR5bmFtaWNhbGx5IGNo
YW5nZS4KLSAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIAotICAgIC8vIFBsYXktc3RhdGUKLSAgICAvLyBub3RlT24oKSwgbm90ZUdyYWluT24oKSwg
YW5kIG5vdGVPZmYoKSBtdXN0IGFsbCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCi0g
ICAgdm9pZCBub3RlT24oZG91YmxlIHdoZW4pOwotICAgIHZvaWQgbm90ZUdyYWluT24oZG91Ymxl
IHdoZW4sIGRvdWJsZSBncmFpbk9mZnNldCwgZG91YmxlIGdyYWluRHVyYXRpb24pOwotICAgIHZv
aWQgbm90ZU9mZihkb3VibGUgd2hlbik7Ci0KLSAgICAvLyBOb3RlOiB0aGUgYXR0cmlidXRlIHdh
cyBvcmlnaW5hbGx5IGV4cG9zZWQgYXMgLmxvb3BpbmcsIGJ1dCB0byBiZSBtb3JlIGNvbnNpc3Rl
bnQgaW4gbmFtaW5nIHdpdGggPGF1ZGlvPgotICAgIC8vIGFuZCB3aXRoIGhvdyBpdCdzIGRlc2Ny
aWJlZCBpbiB0aGUgc3BlY2lmaWNhdGlvbiwgdGhlIHByb3BlciBhdHRyaWJ1dGUgbmFtZSBpcyAu
bG9vcAotICAgIC8vIFRoZSBvbGQgYXR0cmlidXRlIGlzIGtlcHQgZm9yIGJhY2t3YXJkcyBjb21w
YXRpYmlsaXR5LgotICAgIGJvb2wgbG9vcCgpIGNvbnN0IHsgcmV0dXJuIG1faXNMb29waW5nOyB9
Ci0gICAgdm9pZCBzZXRMb29wKGJvb2wgbG9vcGluZykgeyBtX2lzTG9vcGluZyA9IGxvb3Bpbmc7
IH0KLQotICAgIC8vIERlcHJlY2F0ZWQuCi0gICAgYm9vbCBsb29waW5nKCk7Ci0gICAgdm9pZCBz
ZXRMb29waW5nKGJvb2wpOwotICAgIAotICAgIEF1ZGlvR2FpbiogZ2FpbigpIHsgcmV0dXJuIG1f
Z2Fpbi5nZXQoKTsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAg
ICBBdWRpb1BhcmFtKiBwbGF5YmFja1JhdGUoKSB7IHJldHVybiBtX3BsYXliYWNrUmF0ZS5nZXQo
KTsgfQotCi0gICAgLy8gSWYgYSBwYW5uZXIgbm9kZSBpcyBzZXQsIHRoZW4gd2UgY2FuIGluY29y
cG9yYXRlIGRvcHBsZXIgc2hpZnQgaW50byB0aGUgcGxheWJhY2sgcGl0Y2ggcmF0ZS4KLSAgICB2
b2lkIHNldFBhbm5lck5vZGUoUGFzc1JlZlB0cjxBdWRpb1Bhbm5lck5vZGU+IHBhbm5lck5vZGUp
IHsgbV9wYW5uZXJOb2RlID0gcGFubmVyTm9kZTsgfQotCi1wcml2YXRlOgotICAgIEF1ZGlvQnVm
ZmVyU291cmNlTm9kZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKLQotICAgIHZv
aWQgcmVuZGVyRnJvbUJ1ZmZlcihBdWRpb0J1cyosIHVuc2lnbmVkIGRlc3RpbmF0aW9uRnJhbWVP
ZmZzZXQsIHNpemVfdCBudW1iZXJPZkZyYW1lcyk7Ci0KLSAgICAvLyBSZW5kZXIgc2lsZW5jZSBz
dGFydGluZyBmcm9tICJpbmRleCIgZnJhbWUgaW4gQXVkaW9CdXMuCi0gICAgaW5saW5lIGJvb2wg
cmVuZGVyU2lsZW5jZUFuZEZpbmlzaElmTm90TG9vcGluZyhBdWRpb0J1cyosIHVuc2lnbmVkIGlu
ZGV4LCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLQotICAgIC8vIG1fYnVmZmVyIGhvbGRzIHRo
ZSBzYW1wbGUgZGF0YSB3aGljaCB0aGlzIG5vZGUgb3V0cHV0cy4KLSAgICBSZWZQdHI8QXVkaW9C
dWZmZXI+IG1fYnVmZmVyOwotCi0gICAgLy8gUG9pbnRlcnMgZm9yIHRoZSBidWZmZXIgYW5kIGRl
c3RpbmF0aW9uLgotICAgIE93bkFycmF5UHRyPGNvbnN0IGZsb2F0Kj4gbV9zb3VyY2VDaGFubmVs
czsKLSAgICBPd25BcnJheVB0cjxmbG9hdCo+IG1fZGVzdGluYXRpb25DaGFubmVsczsKLQotICAg
IC8vIFVzZWQgZm9yIHRoZSAiZ2FpbiIgYW5kICJwbGF5YmFja1JhdGUiIGF0dHJpYnV0ZXMuCi0g
ICAgUmVmUHRyPEF1ZGlvR2Fpbj4gbV9nYWluOwotICAgIFJlZlB0cjxBdWRpb1BhcmFtPiBtX3Bs
YXliYWNrUmF0ZTsKLQotICAgIC8vIG1faXNQbGF5aW5nIGlzIHNldCB0byB0cnVlIHdoZW4gbm90
ZU9uKCkgb3Igbm90ZUdyYWluT24oKSBpcyBjYWxsZWQuCi0gICAgYm9vbCBtX2lzUGxheWluZzsK
LQotICAgIC8vIElmIG1faXNMb29waW5nIGlzIGZhbHNlLCB0aGVuIHRoaXMgbm9kZSB3aWxsIGJl
IGRvbmUgcGxheWluZyBhbmQgYmVjb21lIGluYWN0aXZlIGFmdGVyIGl0IHJlYWNoZXMgdGhlIGVu
ZCBvZiB0aGUgc2FtcGxlIGRhdGEgaW4gdGhlIGJ1ZmZlci4KLSAgICAvLyBJZiB0cnVlLCBpdCB3
aWxsIHdyYXAgYXJvdW5kIHRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyIGVhY2ggdGltZSBpdCBy
ZWFjaGVzIHRoZSBlbmQuCi0gICAgYm9vbCBtX2lzTG9vcGluZzsKLQotICAgIC8vIFRoaXMgbm9k
ZSBpcyBjb25zaWRlcmVkIGZpbmlzaGVkIHdoZW4gaXQgcmVhY2hlcyB0aGUgZW5kIG9mIHRoZSBi
dWZmZXIncyBzYW1wbGUgZGF0YSBhZnRlciBub3RlT24oKSBoYXMgYmVlbiBjYWxsZWQuCi0gICAg
Ly8gVGhpcyB3aWxsIG9ubHkgYmUgc2V0IHRvIHRydWUgaWYgbV9pc0xvb3BpbmcgPT0gZmFsc2Uu
Ci0gICAgYm9vbCBtX2hhc0ZpbmlzaGVkOwotCi0gICAgLy8gbV9zdGFydFRpbWUgaXMgdGhlIHRp
bWUgdG8gc3RhcnQgcGxheWluZyBiYXNlZCBvbiB0aGUgY29udGV4dCdzIHRpbWVsaW5lICgwLjAg
b3IgYSB0aW1lIGxlc3MgdGhhbiB0aGUgY29udGV4dCdzIGN1cnJlbnQgdGltZSBtZWFucyAibm93
IikuCi0gICAgZG91YmxlIG1fc3RhcnRUaW1lOyAvLyBpbiBzZWNvbmRzCi0KLSAgICAvLyBtX2Vu
ZFRpbWUgaXMgdGhlIHRpbWUgdG8gc3RvcCBwbGF5aW5nIGJhc2VkIG9uIHRoZSBjb250ZXh0J3Mg
dGltZWxpbmUgKDAuMCBvciBhIHRpbWUgbGVzcyB0aGFuIHRoZSBjb250ZXh0J3MgY3VycmVudCB0
aW1lIG1lYW5zICJub3ciKS4KLSAgICAvLyBJZiBpdCBoYXNuJ3QgYmVlbiBzZXQgZXhwbGljaXRs
eSwgdGhlbiB0aGUgc291bmQgd2lsbCBub3Qgc3RvcCBwbGF5aW5nIChpZiBsb29waW5nKSBvciB3
aWxsIHN0b3Agd2hlbiB0aGUgZW5kIG9mIHRoZSBBdWRpb0J1ZmZlcgotICAgIC8vIGhhcyBiZWVu
IHJlYWNoZWQuCi0gICAgZG91YmxlIG1fZW5kVGltZTsgLy8gaW4gc2Vjb25kcwotICAgIAotICAg
IC8vIG1fdmlydHVhbFJlYWRJbmRleCBpcyBhIHNhbXBsZS1mcmFtZSBpbmRleCBpbnRvIG91ciBi
dWZmZXIgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uLgotICAgIC8v
IFNpbmNlIGl0J3MgZmxvYXRpbmctcG9pbnQsIGl0IGhhcyBzdWItc2FtcGxlIGFjY3VyYWN5Lgot
ICAgIGRvdWJsZSBtX3ZpcnR1YWxSZWFkSW5kZXg7Ci0KLSAgICAvLyBHcmFudWxhciBwbGF5YmFj
awotICAgIGJvb2wgbV9pc0dyYWluOwotICAgIGRvdWJsZSBtX2dyYWluT2Zmc2V0OyAvLyBpbiBz
ZWNvbmRzCi0gICAgZG91YmxlIG1fZ3JhaW5EdXJhdGlvbjsgLy8gaW4gc2Vjb25kcwotCi0gICAg
Ly8gdG90YWxQaXRjaFJhdGUoKSByZXR1cm5zIHRoZSBpbnN0YW50YW5lb3VzIHBpdGNoIHJhdGUg
KG5vbi10aW1lIHByZXNlcnZpbmcpLgotICAgIC8vIEl0IGluY29ycG9yYXRlcyB0aGUgYmFzZSBw
aXRjaCByYXRlLCBhbnkgc2FtcGxlLXJhdGUgY29udmVyc2lvbiBmYWN0b3IgZnJvbSB0aGUgYnVm
ZmVyLCBhbmQgYW55IGRvcHBsZXIgc2hpZnQgZnJvbSBhbiBhc3NvY2lhdGVkIHBhbm5lciBub2Rl
LgotICAgIGRvdWJsZSB0b3RhbFBpdGNoUmF0ZSgpOwotCi0gICAgLy8gbV9sYXN0R2FpbiBwcm92
aWRlcyBjb250aW51aXR5IHdoZW4gd2UgZHluYW1pY2FsbHkgYWRqdXN0IHRoZSBnYWluLgotICAg
IGZsb2F0IG1fbGFzdEdhaW47Ci0gICAgCi0gICAgLy8gV2Ugb3B0aW9uYWxseSBrZWVwIHRyYWNr
IG9mIGEgcGFubmVyIG5vZGUgd2hpY2ggaGFzIGEgZG9wcGxlciBzaGlmdCB0aGF0IGlzIGluY29y
cG9yYXRlZCBpbnRvIHRoZSBwaXRjaCByYXRlLgotICAgIFJlZlB0cjxBdWRpb1Bhbm5lck5vZGU+
IG1fcGFubmVyTm9kZTsKLQotICAgIC8vIFRoaXMgc3luY2hyb25pemVzIHByb2Nlc3MoKSB3aXRo
IHNldEJ1ZmZlcigpIHdoaWNoIGNhbiBjYXVzZSBkeW5hbWljIGNoYW5uZWwgY291bnQgY2hhbmdl
cy4KLSAgICBtdXRhYmxlIE11dGV4IG1fcHJvY2Vzc0xvY2s7Ci0KLSAgICAvLyBIYW5kbGVzIHRo
ZSB0aW1lIHdoZW4gd2UgcmVhY2ggdGhlIGVuZCBvZiBzYW1wbGUgZGF0YSAobm9uLWxvb3Bpbmcp
IG9yIHRoZSBub3RlT2ZmKCkgdGltZSBoYXMgYmVlbiByZWFjaGVkLgotICAgIHZvaWQgZmluaXNo
KCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBBdWRpb0J1ZmZl
clNvdXJjZU5vZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJT
b3VyY2VOb2RlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b0J1ZmZlclNvdXJjZU5vZGUuaWRsCShyZXZpc2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgYXVkaW8gewotICAgIC8vIEEgY2FjaGVk
IChub24tc3RyZWFtZWQpLCBtZW1vcnktcmVzaWRlbnQgYXVkaW8gc291cmNlCi0gICAgaW50ZXJm
YWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAotICAgICAgICBKU0dlbmVyYXRl
VG9KU09iamVjdAotICAgIF0gQXVkaW9CdWZmZXJTb3VyY2VOb2RlIDogQXVkaW9Tb3VyY2VOb2Rl
IHsKLSAgICAgICAgYXR0cmlidXRlIFtDdXN0b21TZXR0ZXJdIEF1ZGlvQnVmZmVyIGJ1ZmZlcgot
ICAgICAgICAgICAgc2V0dGVyIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKLQotICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgQXVkaW9HYWluIGdhaW47Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBBdWRpb1BhcmFtIHBsYXliYWNrUmF0ZTsKLQotICAgICAgICBhdHRyaWJ1dGUgYm9vbGVhbiBs
b29wOyAvLyBUaGlzIGlzIHRoZSBwcm9wZXIgYXR0cmlidXRlIG5hbWUgZnJvbSB0aGUgc3BlY2lm
aWNhdGlvbi4KLSAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gbG9vcGluZzsgLy8gVGhpcyBpcyBh
biBhbGlhcyBmb3IgdGhlIC5sb29wIGF0dHJpYnV0ZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxp
dHkuCi0KLSAgICAgICAgdm9pZCBub3RlT24oaW4gZG91YmxlIHdoZW4pOwotICAgICAgICB2b2lk
IG5vdGVHcmFpbk9uKGluIGRvdWJsZSB3aGVuLCBpbiBkb3VibGUgZ3JhaW5PZmZzZXQsIGluIGRv
dWJsZSBncmFpbkR1cmF0aW9uKTsKLSAgICAgICAgdm9pZCBub3RlT2ZmKGluIGRvdWJsZSB3aGVu
KTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVs
TWVyZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0No
YW5uZWxNZXJnZXIuY3BwCShyZXZpc2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExNCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2lu
Y2x1ZGUgIkF1ZGlvQ2hhbm5lbE1lcmdlci5oIgotCi0jaW5jbHVkZSAiQXVkaW9Db250ZXh0Lmgi
Ci0jaW5jbHVkZSAiQXVkaW9Ob2RlSW5wdXQuaCIKLSNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotLy8gVGhpcyBpcyBjb25zaWRlcmluZyB0
aGF0IDUuMSAoNiBjaGFubmVscykgaXMgdGhlIGxhcmdlc3Qgd2UnbGwgZXZlciBkZWFsIHdpdGgu
Ci0vLyBJdCBjYW4gZWFzaWx5IGJlIGluY3JlYXNlZCB0byBzdXBwb3J0IG1vcmUgaWYgdGhlIHdl
YiBhdWRpbyBzcGVjaWZpY2F0aW9uIGlzIHVwZGF0ZWQuCi1jb25zdCB1bnNpZ25lZCBOdW1iZXJP
ZklucHV0cyA9IDY7Ci0KLUF1ZGlvQ2hhbm5lbE1lcmdlcjo6QXVkaW9DaGFubmVsTWVyZ2VyKEF1
ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICA6IEF1ZGlvTm9kZShj
b250ZXh0LCBzYW1wbGVSYXRlKQotewotICAgIC8vIENyZWF0ZSBhIGZpeGVkIG51bWJlciBvZiBp
bnB1dHMgKGFibGUgdG8gaGFuZGxlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFubmVscyB3ZSBk
ZWFsIHdpdGgpLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOdW1iZXJPZklucHV0czsg
KytpKQotICAgICAgICBhZGRJbnB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlSW5wdXQodGhpcykp
KTsKLQotICAgIGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMsIDEp
KSk7Ci0gICAgCi0gICAgc2V0Tm9kZVR5cGUoTm9kZVR5cGVDaGFubmVsTWVyZ2VyKTsKLSAgICAK
LSAgICBpbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgQXVkaW9DaGFubmVsTWVyZ2VyOjpwcm9jZXNz
KHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQg
PSB0aGlzLT5vdXRwdXQoMCk7Ci0gICAgQVNTRVJUKG91dHB1dCk7Ci0gICAgQVNTRVJUX1VOVVNF
RChmcmFtZXNUb1Byb2Nlc3MsIGZyYW1lc1RvUHJvY2VzcyA9PSBvdXRwdXQtPmJ1cygpLT5sZW5n
dGgoKSk7ICAgIAotICAgIAotICAgIC8vIE1lcmdlIGFsbCB0aGUgY2hhbm5lbHMgZnJvbSBhbGwg
dGhlIGlucHV0cyBpbnRvIG9uZSBvdXRwdXQuCi0gICAgdW5zaWduZWQgb3V0cHV0Q2hhbm5lbElu
ZGV4ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZJbnB1dHMoKTsg
KytpKSB7Ci0gICAgICAgIEF1ZGlvTm9kZUlucHV0KiBpbnB1dCA9IHRoaXMtPmlucHV0KGkpOwot
ICAgICAgICBpZiAoaW5wdXQtPmlzQ29ubmVjdGVkKCkpIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mSW5wdXRDaGFubmVscyA9IGlucHV0LT5idXMoKS0+bnVtYmVyT2ZDaGFubmVscygp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBNZXJnZSBjaGFubmVscyBmcm9tIHRoaXMg
cGFydGljdWxhciBpbnB1dC4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBu
dW1iZXJPZklucHV0Q2hhbm5lbHM7ICsraikgewotICAgICAgICAgICAgICAgIEF1ZGlvQ2hhbm5l
bCogaW5wdXRDaGFubmVsID0gaW5wdXQtPmJ1cygpLT5jaGFubmVsKGopOwotICAgICAgICAgICAg
ICAgIEF1ZGlvQ2hhbm5lbCogb3V0cHV0Q2hhbm5lbCA9IG91dHB1dC0+YnVzKCktPmNoYW5uZWwo
b3V0cHV0Q2hhbm5lbEluZGV4KTsKLSAgICAgICAgICAgICAgICBvdXRwdXRDaGFubmVsLT5jb3B5
RnJvbShpbnB1dENoYW5uZWwpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICsr
b3V0cHV0Q2hhbm5lbEluZGV4OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAg
IAotICAgIEFTU0VSVChvdXRwdXRDaGFubmVsSW5kZXggPT0gb3V0cHV0LT5udW1iZXJPZkNoYW5u
ZWxzKCkpOwotfQotCi12b2lkIEF1ZGlvQ2hhbm5lbE1lcmdlcjo6cmVzZXQoKQotewotfQotCi0v
LyBBbnkgdGltZSBhIGNvbm5lY3Rpb24gb3IgZGlzY29ubmVjdGlvbiBoYXBwZW5zIG9uIGFueSBv
ZiBvdXIgaW5wdXRzLCB3ZSBwb3RlbnRpYWxseSBuZWVkIHRvIGNoYW5nZSB0aGUKLS8vIG51bWJl
ciBvZiBjaGFubmVscyBvZiBvdXIgb3V0cHV0Lgotdm9pZCBBdWRpb0NoYW5uZWxNZXJnZXI6OmNo
ZWNrTnVtYmVyT2ZDaGFubmVsc0ZvcklucHV0KEF1ZGlvTm9kZUlucHV0KiBpbnB1dCkKLXsKLSAg
ICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkgJiYgY29udGV4dCgpLT5pc0dyYXBo
T3duZXIoKSk7Ci0KLSAgICAvLyBDb3VudCBob3cgbWFueSBjaGFubmVscyB3ZSBoYXZlIGFsbCB0
b2dldGhlciBmcm9tIGFsbCBvZiB0aGUgaW5wdXRzLgotICAgIHVuc2lnbmVkIG51bWJlck9mT3V0
cHV0Q2hhbm5lbHMgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklu
cHV0cygpOyArK2kpIHsKLSAgICAgICAgQXVkaW9Ob2RlSW5wdXQqIGlucHV0ID0gdGhpcy0+aW5w
dXQoaSk7Ci0gICAgICAgIGlmIChpbnB1dC0+aXNDb25uZWN0ZWQoKSkKLSAgICAgICAgICAgIG51
bWJlck9mT3V0cHV0Q2hhbm5lbHMgKz0gaW5wdXQtPmJ1cygpLT5udW1iZXJPZkNoYW5uZWxzKCk7
Ci0gICAgfQotCi0gICAgLy8gU2V0IHRoZSBjb3JyZWN0IG51bWJlciBvZiBjaGFubmVscyBvbiB0
aGUgb3V0cHV0Ci0gICAgQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQgPSB0aGlzLT5vdXRwdXQoMCk7
Ci0gICAgQVNTRVJUKG91dHB1dCk7Ci0gICAgb3V0cHV0LT5zZXROdW1iZXJPZkNoYW5uZWxzKG51
bWJlck9mT3V0cHV0Q2hhbm5lbHMpOwotCi0gICAgQXVkaW9Ob2RlOjpjaGVja051bWJlck9mQ2hh
bm5lbHNGb3JJbnB1dChpbnB1dCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9B
dWRpb0NoYW5uZWxNZXJnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb0NoYW5uZWxNZXJnZXIuaAkocmV2aXNpb24gMTExMjMzKQorKysgU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjIg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgQXVkaW9DaGFubmVsTWVyZ2VyX2gKLSNkZWZpbmUgQXVkaW9DaGFu
bmVsTWVyZ2VyX2gKLQotI2luY2x1ZGUgIkF1ZGlvTm9kZS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9Db250ZXh0Owot
ICAgIAotY2xhc3MgQXVkaW9DaGFubmVsTWVyZ2VyIDogcHVibGljIEF1ZGlvTm9kZSB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8QXVkaW9DaGFubmVsTWVyZ2VyPiBjcmVhdGUoQXVk
aW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBBdWRpb0NoYW5uZWxNZXJnZXIoY29udGV4dCwgc2FtcGxlUmF0ZSkp
OyAgICAgIAotICAgIH0KLQotICAgIC8vIEF1ZGlvTm9kZQotICAgIHZpcnR1YWwgdm9pZCBwcm9j
ZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOwot
Ci0gICAgLy8gQ2FsbGVkIGluIHRoZSBhdWRpbyB0aHJlYWQgKHByZS1yZW5kZXJpbmcgdGFzaykg
d2hlbiB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIGZvciBhbiBpbnB1dCBtYXkgaGF2ZSBjaGFuZ2Vk
LgotICAgIHZpcnR1YWwgdm9pZCBjaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1dChBdWRpb05v
ZGVJbnB1dCopOwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1l
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQotCi0gICAgQXVkaW9DaGFubmVsTWVyZ2Vy
KEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gQXVkaW9DaGFubmVsTWVyZ2VyX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmlkbAkocmV2aXNpb24gMTEx
MjMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmlkbAko
d29ya2luZyBjb3B5KQpAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGF1ZGlvIHsKLSAgICBpbnRl
cmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8KLSAgICBdIEF1ZGlvQ2hhbm5l
bE1lcmdlciA6IEF1ZGlvTm9kZSB7Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5jcHAJKHJldmlzaW9uIDExMTIzMykK
KysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIkF1ZGlvQ2hhbm5lbFNw
bGl0dGVyLmgiCi0KLSNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgotI2luY2x1ZGUgIkF1ZGlv
Tm9kZU91dHB1dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi0vLyBUaGlzIGlzIGNv
bnNpZGVyaW5nIHRoYXQgNS4xICg2IGNoYW5uZWxzKSBpcyB0aGUgbGFyZ2VzdCB3ZSdsbCBldmVy
IGRlYWwgd2l0aC4KLS8vIEl0IGNhbiBlYXNpbHkgYmUgaW5jcmVhc2VkIHRvIHN1cHBvcnQgbW9y
ZSBpZiB0aGUgd2ViIGF1ZGlvIHNwZWNpZmljYXRpb24gaXMgdXBkYXRlZC4KLWNvbnN0IHVuc2ln
bmVkIE51bWJlck9mT3V0cHV0cyA9IDY7Ci0KLUF1ZGlvQ2hhbm5lbFNwbGl0dGVyOjpBdWRpb0No
YW5uZWxTcGxpdHRlcihBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0g
ICAgOiBBdWRpb05vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkKLXsKLSAgICBhZGRJbnB1dChhZG9w
dFB0cihuZXcgQXVkaW9Ob2RlSW5wdXQodGhpcykpKTsKLQotICAgIC8vIENyZWF0ZSBhIGZpeGVk
IG51bWJlciBvZiBvdXRwdXRzIChhYmxlIHRvIGhhbmRsZSB0aGUgbWF4aW11bSBudW1iZXIgb2Yg
Y2hhbm5lbHMgZmVkIHRvIGFuIGlucHV0KS4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
TnVtYmVyT2ZPdXRwdXRzOyArK2kpCi0gICAgICAgIGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVk
aW9Ob2RlT3V0cHV0KHRoaXMsIDEpKSk7Ci0gICAgCi0gICAgc2V0Tm9kZVR5cGUoTm9kZVR5cGVD
aGFubmVsU3BsaXR0ZXIpOwotICAgIAotICAgIGluaXRpYWxpemUoKTsKLX0KLQotdm9pZCBBdWRp
b0NoYW5uZWxTcGxpdHRlcjo6cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAg
IEF1ZGlvQnVzKiBzb3VyY2UgPSBpbnB1dCgwKS0+YnVzKCk7Ci0gICAgQVNTRVJUKHNvdXJjZSk7
Ci0gICAgQVNTRVJUX1VOVVNFRChmcmFtZXNUb1Byb2Nlc3MsIGZyYW1lc1RvUHJvY2VzcyA9PSBz
b3VyY2UtPmxlbmd0aCgpKTsKLSAgICAKLSAgICB1bnNpZ25lZCBudW1iZXJPZlNvdXJjZUNoYW5u
ZWxzID0gc291cmNlLT5udW1iZXJPZkNoYW5uZWxzKCk7Ci0gICAgCi0gICAgQVNTRVJUKG51bWJl
ck9mT3V0cHV0cygpID09IE51bWJlck9mT3V0cHV0cyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IE51bWJlck9mT3V0cHV0czsgKytpKSB7Ci0gICAgICAgIEF1ZGlvQnVzKiBkZXN0aW5h
dGlvbiA9IG91dHB1dChpKS0+YnVzKCk7Ci0gICAgICAgIEFTU0VSVChkZXN0aW5hdGlvbik7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoaSA8IG51bWJlck9mU291cmNlQ2hhbm5lbHMpIHsKLSAgICAg
ICAgICAgIC8vIFNwbGl0IHRoZSBjaGFubmVsIG91dCBpZiBpdCBleGlzdHMgaW4gdGhlIHNvdXJj
ZS4KLSAgICAgICAgICAgIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8gYXZvaWQgdGhlIGNvcHkgYW5k
IHNpbXBseSBwYXNzIGFsb25nIHBvaW50ZXJzLCBidXQgdGhpcyBiZWNvbWVzIGV4dHJlbWVseSBk
aWZmaWN1bHQgd2l0aCBmYW5vdXQgYW5kIGZhbmluLgotICAgICAgICAgICAgZGVzdGluYXRpb24t
PmNoYW5uZWwoMCktPmNvcHlGcm9tKHNvdXJjZS0+Y2hhbm5lbChpKSk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAob3V0cHV0KGkpLT5yZW5kZXJpbmdGYW5PdXRDb3VudCgpID4gMCkgewotICAgICAgICAg
ICAgLy8gT25seSBib3RoZXIgemVyb2luZyBvdXQgdGhlIGRlc3RpbmF0aW9uIGlmIGl0J3MgY29u
bmVjdGVkIHRvIGFueXRoaW5nCi0gICAgICAgICAgICBkZXN0aW5hdGlvbi0+emVybygpOwotICAg
ICAgICB9Ci0gICAgfQotfQotCi12b2lkIEF1ZGlvQ2hhbm5lbFNwbGl0dGVyOjpyZXNldCgpCi17
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVE
SU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0
dGVyLmgJKHJldmlzaW9uIDExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
Q2hhbm5lbFNwbGl0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgQXVkaW9DaGFubmVsU3BsaXR0ZXJfaAotI2RlZmluZSBBdWRpb0NoYW5u
ZWxTcGxpdHRlcl9oCi0KLSNpbmNsdWRlICJBdWRpb05vZGUuaCIKLSNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvQ29udGV4dDsK
LSAgICAKLWNsYXNzIEF1ZGlvQ2hhbm5lbFNwbGl0dGVyIDogcHVibGljIEF1ZGlvTm9kZSB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8QXVkaW9DaGFubmVsU3BsaXR0ZXI+IGNyZWF0
ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvQ2hhbm5lbFNwbGl0dGVyKGNvbnRleHQsIHNhbXBs
ZVJhdGUpKTsgICAgICAKLSAgICB9Ci0KLSAgICAvLyBBdWRpb05vZGUKLSAgICB2aXJ0dWFsIHZv
aWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVz
ZXQoKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9W
RVJSSURFIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KLQotICAgIEF1ZGlvQ2hhbm5lbFNwbGl0dGVyKEF1
ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gQXVkaW9DaGFubmVsU3BsaXR0ZXJfaApJbmRleDogU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmlkbAkocmV2aXNpb24g
MTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUg
YXVkaW8gewotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTwot
ICAgIF0gQXVkaW9DaGFubmVsU3BsaXR0ZXIgOiBBdWRpb05vZGUgewotICAgIH07Ci19CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAJKHJldmlzaW9uIDExMTIz
MykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNzg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCi0K
LSNpbmNsdWRlICJBc3luY0F1ZGlvRGVjb2Rlci5oIgotI2luY2x1ZGUgIkF1ZGlvQnVmZmVyLmgi
Ci0jaW5jbHVkZSAiQXVkaW9CdWZmZXJDYWxsYmFjay5oIgotI2luY2x1ZGUgIkF1ZGlvQnVmZmVy
U291cmNlTm9kZS5oIgotI2luY2x1ZGUgIkF1ZGlvQ2hhbm5lbE1lcmdlci5oIgotI2luY2x1ZGUg
IkF1ZGlvQ2hhbm5lbFNwbGl0dGVyLmgiCi0jaW5jbHVkZSAiQXVkaW9HYWluTm9kZS5oIgotI2lu
Y2x1ZGUgIkF1ZGlvTGlzdGVuZXIuaCIKLSNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgotI2lu
Y2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgotI2luY2x1ZGUgIkF1ZGlvUGFubmVyTm9kZS5oIgot
I2luY2x1ZGUgIkJpcXVhZEZpbHRlck5vZGUuaCIKLSNpbmNsdWRlICJDb252b2x2ZXJOb2RlLmgi
Ci0jaW5jbHVkZSAiRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmgiCi0jaW5jbHVkZSAiRGVs
YXlOb2RlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEeW5hbWljc0NvbXBy
ZXNzb3JOb2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkZGVEZy
YW1lLmgiCi0jaW5jbHVkZSAiSFJURkRhdGFiYXNlTG9hZGVyLmgiCi0jaW5jbHVkZSAiSFJURlBh
bm5lci5oIgotI2luY2x1ZGUgIkhpZ2hQYXNzMkZpbHRlck5vZGUuaCIKLSNpbmNsdWRlICJKYXZh
U2NyaXB0QXVkaW9Ob2RlLmgiCi0jaW5jbHVkZSAiTG93UGFzczJGaWx0ZXJOb2RlLmgiCi0jaW5j
bHVkZSAiT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmgiCi0jaW5jbHVkZSAiT2ZmbGluZUF1
ZGlvRGVzdGluYXRpb25Ob2RlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNs
dWRlICJSZWFsdGltZUFuYWx5c2VyTm9kZS5oIgotI2luY2x1ZGUgIldhdmVTaGFwZXJOb2RlLmgi
Ci0jaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCi0KLSNpZiBFTkFCTEUoVklERU8pCi0jaW5j
bHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgotI2luY2x1ZGUgIk1lZGlhRWxlbWVudEF1ZGlvU291
cmNlTm9kZS5oIgotI2VuZGlmCi0KLSNpZiBERUJVR19BVURJT05PREVfUkVGRVJFTkNFUwotI2lu
Y2x1ZGUgPHN0ZGlvLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlci5oPgot
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQot
Ly8gRklYTUU6IGNoZWNrIHRoZSBwcm9wZXIgd2F5IHRvIHJlZmVyZW5jZSBhbiB1bmRlZmluZWQg
dGhyZWFkIElECi1jb25zdCBpbnQgVW5kZWZpbmVkVGhyZWFkSWRlbnRpZmllciA9IDB4ZmZmZmZm
ZmY7Ci0KLWNvbnN0IHVuc2lnbmVkIE1heE5vZGVzVG9EZWxldGVQZXJRdWFudHVtID0gMTA7Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLW5hbWVzcGFjZSB7Ci0gICAgCi1ib29sIGlzU2Ft
cGxlUmF0ZVJhbmdlR29vZChmbG9hdCBzYW1wbGVSYXRlKQotewotICAgIC8vIEZJWE1FOiBJdCB3
b3VsZCBiZSBuaWNlIGlmIHRoZSBtaW5pbXVtIHNhbXBsZS1yYXRlIGNvdWxkIGJlIGxlc3MgdGhh
biA0NC4xS0h6LAotICAgIC8vIGJ1dCB0aGF0IHdpbGwgcmVxdWlyZSBzb21lIGZpeGVzIGluIEhS
VEZQYW5uZXI6OmZmdFNpemVGb3JTYW1wbGVSYXRlKCksIGFuZCBzb21lIHRlc3RpbmcgdGhlcmUu
Ci0gICAgcmV0dXJuIHNhbXBsZVJhdGUgPj0gNDQxMDAgJiYgc2FtcGxlUmF0ZSA8PSA5NjAwMDsK
LX0KLQotfQotCi0vLyBEb24ndCBhbGxvdyBtb3JlIHRoYW4gdGhpcyBudW1iZXIgb2Ygc2ltdWx0
YW5lb3VzIEF1ZGlvQ29udGV4dHMgdGFsa2luZyB0byBoYXJkd2FyZS4KLWNvbnN0IHVuc2lnbmVk
IE1heEhhcmR3YXJlQ29udGV4dHMgPSA0OwotdW5zaWduZWQgQXVkaW9Db250ZXh0OjpzX2hhcmR3
YXJlQ29udGV4dENvdW50ID0gMDsKLSAgICAKLVBhc3NSZWZQdHI8QXVkaW9Db250ZXh0PiBBdWRp
b0NvbnRleHQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0KLSAgICBBU1NFUlQoZG9jdW1lbnQpOwotICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKHNfaGFyZHdhcmVDb250ZXh0Q291bnQgPj0g
TWF4SGFyZHdhcmVDb250ZXh0cykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZWZQdHI8QXVk
aW9Db250ZXh0PiBhdWRpb0NvbnRleHQoYWRvcHRSZWYobmV3IEF1ZGlvQ29udGV4dChkb2N1bWVu
dCkpKTsKLSAgICBhdWRpb0NvbnRleHQtPnN1c3BlbmRJZk5lZWRlZCgpOwotICAgIHJldHVybiBh
dWRpb0NvbnRleHQucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPEF1ZGlvQ29udGV4dD4gQXVk
aW9Db250ZXh0OjpjcmVhdGVPZmZsaW5lQ29udGV4dChEb2N1bWVudCogZG9jdW1lbnQsIHVuc2ln
bmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxl
UmF0ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgQVNTRVJUKGRvY3VtZW50KTsKLQotICAg
IC8vIEZJWE1FOiBvZmZsaW5lIGNvbnRleHRzIGhhdmUgbGltaXRhdGlvbnMgb24gc3VwcG9ydGVk
IHNhbXBsZS1yYXRlcy4KLSAgICAvLyBDdXJyZW50bHkgYWxsIEF1ZGlvQ29udGV4dHMgbXVzdCBo
YXZlIHRoZSBzYW1lIHNhbXBsZS1yYXRlLgotICAgIEhSVEZEYXRhYmFzZUxvYWRlciogbG9hZGVy
ID0gSFJURkRhdGFiYXNlTG9hZGVyOjpsb2FkZXIoKTsKLSAgICBpZiAobnVtYmVyT2ZDaGFubmVs
cyA+IDEwIHx8ICFpc1NhbXBsZVJhdGVSYW5nZUdvb2Qoc2FtcGxlUmF0ZSkgfHwgKGxvYWRlciAm
JiBsb2FkZXItPmRhdGFiYXNlU2FtcGxlUmF0ZSgpICE9IHNhbXBsZVJhdGUpKSB7Ci0gICAgICAg
IGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRy
PEF1ZGlvQ29udGV4dD4gYXVkaW9Db250ZXh0KG5ldyBBdWRpb0NvbnRleHQoZG9jdW1lbnQsIG51
bWJlck9mQ2hhbm5lbHMsIG51bWJlck9mRnJhbWVzLCBzYW1wbGVSYXRlKSk7Ci0gICAgYXVkaW9D
b250ZXh0LT5zdXNwZW5kSWZOZWVkZWQoKTsKLSAgICByZXR1cm4gYXVkaW9Db250ZXh0LnJlbGVh
c2UoKTsKLX0KLQotLy8gQ29uc3RydWN0b3IgZm9yIHJlbmRlcmluZyB0byB0aGUgYXVkaW8gaGFy
ZHdhcmUuCi1BdWRpb0NvbnRleHQ6OkF1ZGlvQ29udGV4dChEb2N1bWVudCogZG9jdW1lbnQpCi0g
ICAgOiBBY3RpdmVET01PYmplY3QoZG9jdW1lbnQsIHRoaXMpCi0gICAgLCBtX2lzSW5pdGlhbGl6
ZWQoZmFsc2UpCi0gICAgLCBtX2lzQXVkaW9UaHJlYWRGaW5pc2hlZChmYWxzZSkKLSAgICAsIG1f
ZG9jdW1lbnQoZG9jdW1lbnQpCi0gICAgLCBtX2Rlc3RpbmF0aW9uTm9kZSgwKQotICAgICwgbV9p
c0RlbGV0aW9uU2NoZWR1bGVkKGZhbHNlKQotICAgICwgbV9jb25uZWN0aW9uQ291bnQoMCkKLSAg
ICAsIG1fYXVkaW9UaHJlYWQoMCkKLSAgICAsIG1fZ3JhcGhPd25lclRocmVhZChVbmRlZmluZWRU
aHJlYWRJZGVudGlmaWVyKQotICAgICwgbV9pc09mZmxpbmVDb250ZXh0KGZhbHNlKQotewotICAg
IGNvbnN0cnVjdENvbW1vbigpOwotCi0gICAgbV9kZXN0aW5hdGlvbk5vZGUgPSBEZWZhdWx0QXVk
aW9EZXN0aW5hdGlvbk5vZGU6OmNyZWF0ZSh0aGlzKTsKLQotICAgIC8vIFRoaXMgc2V0cyBpbiBt
b3Rpb24gYW4gYXN5bmNocm9ub3VzIGxvYWRpbmcgbWVjaGFuaXNtIG9uIGFub3RoZXIgdGhyZWFk
LgotICAgIC8vIFdlIGNhbiBjaGVjayBtX2hydGZEYXRhYmFzZUxvYWRlci0+aXNMb2FkZWQoKSB0
byBmaW5kIG91dCB3aGV0aGVyIG9yIG5vdCBpdCBoYXMgYmVlbiBmdWxseSBsb2FkZWQuCi0gICAg
Ly8gSXQncyBub3QgdGhhdCB1c2VmdWwgdG8gaGF2ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0
aGlzIHNpbmNlIHRoZSBhdWRpbyB0aHJlYWQgYXV0b21hdGljYWxseSBzdGFydHMgcmVuZGVyaW5n
IG9uIHRoZSBncmFwaAotICAgIC8vIHdoZW4gdGhpcyBoYXMgZmluaXNoZWQgKHNlZSBBdWRpb0Rl
c3RpbmF0aW9uTm9kZSkuCi0gICAgbV9ocnRmRGF0YWJhc2VMb2FkZXIgPSBIUlRGRGF0YWJhc2VM
b2FkZXI6OmNyZWF0ZUFuZExvYWRBc3luY2hyb25vdXNseUlmTmVjZXNzYXJ5KHNhbXBsZVJhdGUo
KSk7Ci19Ci0KLS8vIENvbnN0cnVjdG9yIGZvciBvZmZsaW5lIChub24tcmVhbHRpbWUpIHJlbmRl
cmluZy4KLUF1ZGlvQ29udGV4dDo6QXVkaW9Db250ZXh0KERvY3VtZW50KiBkb2N1bWVudCwgdW5z
aWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IG51bWJlck9mRnJhbWVzLCBmbG9hdCBzYW1w
bGVSYXRlKQotICAgIDogQWN0aXZlRE9NT2JqZWN0KGRvY3VtZW50LCB0aGlzKQotICAgICwgbV9p
c0luaXRpYWxpemVkKGZhbHNlKQotICAgICwgbV9pc0F1ZGlvVGhyZWFkRmluaXNoZWQoZmFsc2Up
Ci0gICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQotICAgICwgbV9kZXN0aW5hdGlvbk5vZGUoMCkK
LSAgICAsIG1fY29ubmVjdGlvbkNvdW50KDApCi0gICAgLCBtX2F1ZGlvVGhyZWFkKDApCi0gICAg
LCBtX2dyYXBoT3duZXJUaHJlYWQoVW5kZWZpbmVkVGhyZWFkSWRlbnRpZmllcikKLSAgICAsIG1f
aXNPZmZsaW5lQ29udGV4dCh0cnVlKQotewotICAgIGNvbnN0cnVjdENvbW1vbigpOwotCi0gICAg
Ly8gRklYTUU6IHRoZSBwYXNzZWQgaW4gc2FtcGxlUmF0ZSBNVVNUIG1hdGNoIHRoZSBoYXJkd2Fy
ZSBzYW1wbGUtcmF0ZSBzaW5jZSBIUlRGRGF0YWJhc2VMb2FkZXIgaXMgYSBzaW5nbGV0b24uCi0g
ICAgbV9ocnRmRGF0YWJhc2VMb2FkZXIgPSBIUlRGRGF0YWJhc2VMb2FkZXI6OmNyZWF0ZUFuZExv
YWRBc3luY2hyb25vdXNseUlmTmVjZXNzYXJ5KHNhbXBsZVJhdGUpOwotCi0gICAgLy8gQ3JlYXRl
IGEgbmV3IGRlc3RpbmF0aW9uIGZvciBvZmZsaW5lIHJlbmRlcmluZy4KLSAgICBtX3JlbmRlclRh
cmdldCA9IEF1ZGlvQnVmZmVyOjpjcmVhdGUobnVtYmVyT2ZDaGFubmVscywgbnVtYmVyT2ZGcmFt
ZXMsIHNhbXBsZVJhdGUpOwotICAgIG1fZGVzdGluYXRpb25Ob2RlID0gT2ZmbGluZUF1ZGlvRGVz
dGluYXRpb25Ob2RlOjpjcmVhdGUodGhpcywgbV9yZW5kZXJUYXJnZXQuZ2V0KCkpOwotfQotCi12
b2lkIEF1ZGlvQ29udGV4dDo6Y29uc3RydWN0Q29tbW9uKCkKLXsKLSAgICBGRlRGcmFtZTo6aW5p
dGlhbGl6ZSgpOwotICAgIAotICAgIG1fbGlzdGVuZXIgPSBBdWRpb0xpc3RlbmVyOjpjcmVhdGUo
KTsKLX0KLQotQXVkaW9Db250ZXh0Ojp+QXVkaW9Db250ZXh0KCkKLXsKLSNpZiBERUJVR19BVURJ
T05PREVfUkVGRVJFTkNFUwotICAgIHByaW50ZigiJXA6IEF1ZGlvQ29udGV4dDo6fkF1ZGlvQ29u
dGV4dCgpXG4iLCB0aGlzKTsKLSNlbmRpZgotICAgIC8vIEF1ZGlvTm9kZXMga2VlcCBhIHJlZmVy
ZW5jZSB0byB0aGVpciBjb250ZXh0LCBzbyB0aGVyZSBzaG91bGQgYmUgbm8gd2F5IHRvIGJlIGlu
IHRoZSBkZXN0cnVjdG9yIGlmIHRoZXJlIGFyZSBzdGlsbCBBdWRpb05vZGVzIGFyb3VuZC4KLSAg
ICBBU1NFUlQoIW1fbm9kZXNUb0RlbGV0ZS5zaXplKCkpOwotICAgIEFTU0VSVCghbV9yZWZlcmVu
Y2VkTm9kZXMuc2l6ZSgpKTsKLSAgICBBU1NFUlQoIW1fZmluaXNoZWROb2Rlcy5zaXplKCkpOwot
fQotCi12b2lkIEF1ZGlvQ29udGV4dDo6bGF6eUluaXRpYWxpemUoKQotewotICAgIGlmICghbV9p
c0luaXRpYWxpemVkKSB7Ci0gICAgICAgIC8vIERvbid0IGFsbG93IHRoZSBjb250ZXh0IHRvIGlu
aXRpYWxpemUgYSBzZWNvbmQgdGltZSBhZnRlciBpdCdzIGFscmVhZHkgYmVlbiBleHBsaWNpdGx5
IHVuaW5pdGlhbGl6ZWQuCi0gICAgICAgIEFTU0VSVCghbV9pc0F1ZGlvVGhyZWFkRmluaXNoZWQp
OwotICAgICAgICBpZiAoIW1faXNBdWRpb1RocmVhZEZpbmlzaGVkKSB7Ci0gICAgICAgICAgICBp
ZiAobV9kZXN0aW5hdGlvbk5vZGUuZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICBtX2Rlc3RpbmF0
aW9uTm9kZS0+aW5pdGlhbGl6ZSgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFpc09mZmxpbmVD
b250ZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBzdGFydHMgdGhlIGF1ZGlv
IHRocmVhZC4gVGhlIGRlc3RpbmF0aW9uIG5vZGUncyBwcm92aWRlSW5wdXQoKSBtZXRob2Qgd2ls
bCBub3cgYmUgY2FsbGVkIHJlcGVhdGVkbHkgdG8gcmVuZGVyIGF1ZGlvLgotICAgICAgICAgICAg
ICAgICAgICAvLyBFYWNoIHRpbWUgcHJvdmlkZUlucHV0KCkgaXMgY2FsbGVkLCBhIHBvcnRpb24g
b2YgdGhlIGF1ZGlvIHN0cmVhbSBpcyByZW5kZXJlZC4gTGV0J3MgY2FsbCB0aGlzIHRpbWUgcGVy
aW9kIGEgInJlbmRlciBxdWFudHVtIi4KLSAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogZm9y
IG5vdyBkZWZhdWx0IEF1ZGlvQ29udGV4dCBkb2VzIG5vdCBuZWVkIGFuIGV4cGxpY2l0IHN0YXJ0
UmVuZGVyaW5nKCkgY2FsbCBmcm9tIEphdmFTY3JpcHQuCi0gICAgICAgICAgICAgICAgICAgIC8v
IFdlIG1heSB3YW50IHRvIGNvbnNpZGVyIHJlcXVpcmluZyBpdCBmb3Igc3ltbWV0cnkgd2l0aCBP
ZmZsaW5lQXVkaW9Db250ZXh0LgotICAgICAgICAgICAgICAgICAgICBtX2Rlc3RpbmF0aW9uTm9k
ZS0+c3RhcnRSZW5kZXJpbmcoKTsgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICArK3NfaGFyZHdhcmVDb250ZXh0Q291bnQ7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICB9
Ci0gICAgfQotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6dW5pbml0aWFsaXplKCkKLXsKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKG1faXNJbml0aWFsaXplZCkgewotICAg
ICAgICAvLyBQcm90ZWN0IHRoaXMgb2JqZWN0IGZyb20gYmVpbmcgZGVsZXRlZCBiZWZvcmUgd2Ug
ZmluaXNoIHVuaW5pdGlhbGl6aW5nLgotICAgICAgICBSZWZQdHI8QXVkaW9Db250ZXh0PiBwcm90
ZWN0KHRoaXMpOwotCi0gICAgICAgIC8vIFRoaXMgc3RvcHMgdGhlIGF1ZGlvIHRocmVhZCBhbmQg
YWxsIGF1ZGlvIHJlbmRlcmluZy4KLSAgICAgICAgbV9kZXN0aW5hdGlvbk5vZGUtPnVuaW5pdGlh
bGl6ZSgpOwotCi0gICAgICAgIC8vIERvbid0IGFsbG93IHRoZSBjb250ZXh0IHRvIGluaXRpYWxp
emUgYSBzZWNvbmQgdGltZSBhZnRlciBpdCdzIGFscmVhZHkgYmVlbiBleHBsaWNpdGx5IHVuaW5p
dGlhbGl6ZWQuCi0gICAgICAgIG1faXNBdWRpb1RocmVhZEZpbmlzaGVkID0gdHJ1ZTsKLQotICAg
ICAgICAvLyBXZSBoYXZlIHRvIHJlbGVhc2Ugb3VyIHJlZmVyZW5jZSB0byB0aGUgZGVzdGluYXRp
b24gbm9kZSBiZWZvcmUgdGhlIGNvbnRleHQgd2lsbCBldmVyIGJlIGRlbGV0ZWQgc2luY2UgdGhl
IGRlc3RpbmF0aW9uIG5vZGUgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnRleHQuCi0gICAg
ICAgIG1fZGVzdGluYXRpb25Ob2RlLmNsZWFyKCk7Ci0KLSAgICAgICAgaWYgKCFpc09mZmxpbmVD
b250ZXh0KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChzX2hhcmR3YXJlQ29udGV4dENvdW50KTsK
LSAgICAgICAgICAgIC0tc19oYXJkd2FyZUNvbnRleHRDb3VudDsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgLy8gR2V0IHJpZCBvZiB0aGUgc291cmNlcyB3aGljaCBtYXkgc3RpbGwgYmUg
cGxheWluZy4KLSAgICAgICAgZGVyZWZVbmZpbmlzaGVkU291cmNlTm9kZXMoKTsKLQotICAgICAg
ICBkZWxldGVNYXJrZWROb2RlcygpOwotCi0gICAgICAgIG1faXNJbml0aWFsaXplZCA9IGZhbHNl
OwotICAgIH0KLX0KLQotYm9vbCBBdWRpb0NvbnRleHQ6OmlzSW5pdGlhbGl6ZWQoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2lzSW5pdGlhbGl6ZWQ7Ci19Ci0KLWJvb2wgQXVkaW9Db250ZXh0Ojpp
c1J1bm5hYmxlKCkgY29uc3QKLXsKLSAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAotICAgIC8vIENoZWNrIHdpdGggdGhlIEhSVEYgc3BhdGlhbGl6
YXRpb24gc3lzdGVtIHRvIHNlZSBpZiBpdCdzIGZpbmlzaGVkIGxvYWRpbmcuCi0gICAgcmV0dXJu
IG1faHJ0ZkRhdGFiYXNlTG9hZGVyLT5pc0xvYWRlZCgpOwotfQotCi12b2lkIEF1ZGlvQ29udGV4
dDo6dW5pbml0aWFsaXplRGlzcGF0Y2godm9pZCogdXNlckRhdGEpCi17Ci0gICAgQXVkaW9Db250
ZXh0KiBjb250ZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxBdWRpb0NvbnRleHQqPih1c2VyRGF0YSk7
Ci0gICAgQVNTRVJUKGNvbnRleHQpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgY29udGV4dC0+dW5pbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0
OjpzdG9wKCkKLXsKLSAgICBtX2RvY3VtZW50ID0gMDsgLy8gZG9jdW1lbnQgaXMgZ29pbmcgYXdh
eQotCi0gICAgLy8gRG9uJ3QgY2FsbCB1bmluaXRpYWxpemUoKSBpbW1lZGlhdGVseSBoZXJlIGJl
Y2F1c2UgdGhlIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgaXMgaW4gdGhlIG1pZGRsZQotICAgIC8v
IG9mIGRlYWxpbmcgd2l0aCBhbGwgb2YgaXRzIEFjdGl2ZURPTU9iamVjdHMgYXQgdGhpcyBwb2lu
dC4gdW5pbml0aWFsaXplKCkgY2FuIGRlLXJlZmVyZW5jZSBvdGhlcgotICAgIC8vIEFjdGl2ZURP
TU9iamVjdHMgc28gbGV0J3Mgc2NoZWR1bGUgdW5pbml0aWFsaXplKCkgdG8gYmUgY2FsbGVkIGxh
dGVyLgotICAgIC8vIEZJWE1FOiBzZWUgaWYgdGhlcmUncyBhIG1vcmUgZGlyZWN0IHdheSB0byBo
YW5kbGUgdGhpcyBpc3N1ZS4KLSAgICBjYWxsT25NYWluVGhyZWFkKHVuaW5pdGlhbGl6ZURpc3Bh
dGNoLCB0aGlzKTsKLX0KLQotRG9jdW1lbnQqIEF1ZGlvQ29udGV4dDo6ZG9jdW1lbnQoKSBjb25z
dAotewotICAgIEFTU0VSVChtX2RvY3VtZW50KTsKLSAgICByZXR1cm4gbV9kb2N1bWVudDsKLX0K
LQotYm9vbCBBdWRpb0NvbnRleHQ6Omhhc0RvY3VtZW50KCkKLXsKLSAgICByZXR1cm4gbV9kb2N1
bWVudDsKLX0KLQotUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gQXVkaW9Db250ZXh0OjpjcmVhdGVC
dWZmZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IG51bWJlck9mRnJhbWVzLCBm
bG9hdCBzYW1wbGVSYXRlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBSZWZQdHI8QXVkaW9C
dWZmZXI+IGF1ZGlvQnVmZmVyID0gQXVkaW9CdWZmZXI6OmNyZWF0ZShudW1iZXJPZkNoYW5uZWxz
LCBudW1iZXJPZkZyYW1lcywgc2FtcGxlUmF0ZSk7Ci0gICAgaWYgKCFhdWRpb0J1ZmZlci5nZXQo
KSkgewotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LQotICAgIHJldHVybiBhdWRpb0J1ZmZlcjsKLX0KLQotUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4g
QXVkaW9Db250ZXh0OjpjcmVhdGVCdWZmZXIoQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyLCBib29s
IG1peFRvTW9ubywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgQVNTRVJUKGFycmF5QnVmZmVy
KTsKLSAgICBpZiAoIWFycmF5QnVmZmVyKSB7Ci0gICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBhdWRpb0J1
ZmZlciA9IEF1ZGlvQnVmZmVyOjpjcmVhdGVGcm9tQXVkaW9GaWxlRGF0YShhcnJheUJ1ZmZlci0+
ZGF0YSgpLCBhcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpLCBtaXhUb01vbm8sIHNhbXBsZVJhdGUo
KSk7Ci0gICAgaWYgKCFhdWRpb0J1ZmZlci5nZXQoKSkgewotICAgICAgICBlYyA9IFNZTlRBWF9F
UlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiBhdWRpb0J1ZmZlcjsK
LX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OmRlY29kZUF1ZGlvRGF0YShBcnJheUJ1ZmZlciogYXVk
aW9EYXRhLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywg
UGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBpZiAoIWF1ZGlvRGF0YSkgewotICAgICAgICBlYyA9IFNZTlRBWF9F
UlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9hdWRpb0RlY29kZXIuZGVjb2RlQXN5
bmMoYXVkaW9EYXRhLCBzYW1wbGVSYXRlKCksIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFj
ayk7Ci19Ci0KLVBhc3NSZWZQdHI8QXVkaW9CdWZmZXJTb3VyY2VOb2RlPiBBdWRpb0NvbnRleHQ6
OmNyZWF0ZUJ1ZmZlclNvdXJjZSgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBsYXp5SW5pdGlhbGl6ZSgpOwotICAgIFJlZlB0cjxBdWRpb0J1ZmZlclNvdXJjZU5vZGU+IG5v
ZGUgPSBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OmNyZWF0ZSh0aGlzLCBtX2Rlc3RpbmF0aW9uTm9k
ZS0+c2FtcGxlUmF0ZSgpKTsKLQotICAgIHJlZk5vZGUobm9kZS5nZXQoKSk7IC8vIGNvbnRleHQg
a2VlcHMgcmVmZXJlbmNlIHVudGlsIHNvdXJjZSBoYXMgZmluaXNoZWQgcGxheWluZwotICAgIHJl
dHVybiBub2RlOwotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotUGFzc1JlZlB0cjxNZWRpYUVsZW1l
bnRBdWRpb1NvdXJjZU5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFFbGVtZW50U291cmNl
KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgQVNTRVJUKG1lZGlhRWxlbWVudCk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpIHsKLSAgICAg
ICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAg
ICAgICAKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGxhenlJbml0aWFsaXplKCk7
Ci0gICAgCi0gICAgLy8gRmlyc3QgY2hlY2sgaWYgdGhpcyBtZWRpYSBlbGVtZW50IGFscmVhZHkg
aGFzIGEgc291cmNlIG5vZGUuCi0gICAgaWYgKG1lZGlhRWxlbWVudC0+YXVkaW9Tb3VyY2VOb2Rl
KCkpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotICAgICAgICAKLSAgICBSZWZQdHI8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2Rl
PiBub2RlID0gTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpjcmVhdGUodGhpcywgbWVkaWFF
bGVtZW50KTsKLQotICAgIG1lZGlhRWxlbWVudC0+c2V0QXVkaW9Tb3VyY2VOb2RlKG5vZGUuZ2V0
KCkpOwotCi0gICAgcmVmTm9kZShub2RlLmdldCgpKTsgLy8gY29udGV4dCBrZWVwcyByZWZlcmVu
Y2UgdW50aWwgbm9kZSBpcyBkaXNjb25uZWN0ZWQKLSAgICByZXR1cm4gbm9kZTsKLX0KLSNlbmRp
ZgotCi1QYXNzUmVmUHRyPEphdmFTY3JpcHRBdWRpb05vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRl
SmF2YVNjcmlwdE5vZGUoc2l6ZV90IGJ1ZmZlclNpemUpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLSAgICBsYXp5SW5pdGlhbGl6ZSgpOwotICAgIFJlZlB0cjxKYXZhU2NyaXB0QXVk
aW9Ob2RlPiBub2RlID0gSmF2YVNjcmlwdEF1ZGlvTm9kZTo6Y3JlYXRlKHRoaXMsIG1fZGVzdGlu
YXRpb25Ob2RlLT5zYW1wbGVSYXRlKCksIGJ1ZmZlclNpemUpOwotCi0gICAgcmVmTm9kZShub2Rl
LmdldCgpKTsgLy8gY29udGV4dCBrZWVwcyByZWZlcmVuY2UgdW50aWwgd2Ugc3RvcCBtYWtpbmcg
amF2YXNjcmlwdCByZW5kZXJpbmcgY2FsbGJhY2tzCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLVBh
c3NSZWZQdHI8QmlxdWFkRmlsdGVyTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVCaXF1YWRGaWx0
ZXIoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbGF6eUluaXRpYWxpemUo
KTsKLSAgICByZXR1cm4gQmlxdWFkRmlsdGVyTm9kZTo6Y3JlYXRlKHRoaXMsIG1fZGVzdGluYXRp
b25Ob2RlLT5zYW1wbGVSYXRlKCkpOwotfQotCi1QYXNzUmVmUHRyPFdhdmVTaGFwZXJOb2RlPiBB
dWRpb0NvbnRleHQ6OmNyZWF0ZVdhdmVTaGFwZXIoKQotewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgbGF6eUluaXRpYWxpemUoKTsKLSAgICByZXR1cm4gV2F2ZVNoYXBlck5vZGU6
OmNyZWF0ZSh0aGlzKTsKLX0KLQotUGFzc1JlZlB0cjxMb3dQYXNzMkZpbHRlck5vZGU+IEF1ZGlv
Q29udGV4dDo6Y3JlYXRlTG93UGFzczJGaWx0ZXIoKQotewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgbGF6eUluaXRpYWxpemUoKTsKLSAgICBpZiAoZG9jdW1lbnQoKSkKLSAgICAg
ICAgZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNz
YWdlVHlwZSwgV2FybmluZ01lc3NhZ2VMZXZlbCwgImNyZWF0ZUxvd1Bhc3MyRmlsdGVyKCkgaXMg
ZGVwcmVjYXRlZC4gIFVzZSBjcmVhdGVCaXF1YWRGaWx0ZXIoKSBpbnN0ZWFkLiIpOwotICAgICAg
ICAKLSAgICByZXR1cm4gTG93UGFzczJGaWx0ZXJOb2RlOjpjcmVhdGUodGhpcywgbV9kZXN0aW5h
dGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8SGlnaFBhc3MyRmlsdGVy
Tm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVIaWdoUGFzczJGaWx0ZXIoKQotewotICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7Ci0gICAgbGF6eUluaXRpYWxpemUoKTsKLSAgICBpZiAoZG9jdW1l
bnQoKSkKLSAgICAgICAgZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoSlNNZXNzYWdlU291
cmNlLCBMb2dNZXNzYWdlVHlwZSwgV2FybmluZ01lc3NhZ2VMZXZlbCwgImNyZWF0ZUhpZ2hQYXNz
MkZpbHRlcigpIGlzIGRlcHJlY2F0ZWQuICBVc2UgY3JlYXRlQmlxdWFkRmlsdGVyKCkgaW5zdGVh
ZC4iKTsKLQotICAgIHJldHVybiBIaWdoUGFzczJGaWx0ZXJOb2RlOjpjcmVhdGUodGhpcywgbV9k
ZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8QXVkaW9QYW5u
ZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZVBhbm5lcigpCi17Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBsYXp5SW5pdGlhbGl6ZSgpOwotICAgIHJldHVybiBBdWRpb1Bhbm5l
ck5vZGU6OmNyZWF0ZSh0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpKTsKLX0K
LQotUGFzc1JlZlB0cjxDb252b2x2ZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUNvbnZvbHZl
cigpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBsYXp5SW5pdGlhbGl6ZSgp
OwotICAgIHJldHVybiBDb252b2x2ZXJOb2RlOjpjcmVhdGUodGhpcywgbV9kZXN0aW5hdGlvbk5v
ZGUtPnNhbXBsZVJhdGUoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8RHluYW1pY3NDb21wcmVzc29yTm9k
ZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVEeW5hbWljc0NvbXByZXNzb3IoKQotewotICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7Ci0gICAgbGF6eUluaXRpYWxpemUoKTsKLSAgICByZXR1cm4gRHlu
YW1pY3NDb21wcmVzc29yTm9kZTo6Y3JlYXRlKHRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1w
bGVSYXRlKCkpOwotfQotCi1QYXNzUmVmUHRyPFJlYWx0aW1lQW5hbHlzZXJOb2RlPiBBdWRpb0Nv
bnRleHQ6OmNyZWF0ZUFuYWx5c2VyKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
ICAgIGxhenlJbml0aWFsaXplKCk7Ci0gICAgcmV0dXJuIFJlYWx0aW1lQW5hbHlzZXJOb2RlOjpj
cmVhdGUodGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7Ci19Ci0KLVBhc3NS
ZWZQdHI8QXVkaW9HYWluTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVHYWluTm9kZSgpCi17Ci0g
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBsYXp5SW5pdGlhbGl6ZSgpOwotICAgIHJl
dHVybiBBdWRpb0dhaW5Ob2RlOjpjcmVhdGUodGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBs
ZVJhdGUoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8RGVsYXlOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0
ZURlbGF5Tm9kZSgpCi17Ci0gICAgY29uc3QgZG91YmxlIGRlZmF1bHRNYXhEZWxheVRpbWUgPSAx
OwotICAgIHJldHVybiBjcmVhdGVEZWxheU5vZGUoZGVmYXVsdE1heERlbGF5VGltZSk7Ci19Ci0K
LVBhc3NSZWZQdHI8RGVsYXlOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZURlbGF5Tm9kZShkb3Vi
bGUgbWF4RGVsYXlUaW1lKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbGF6
eUluaXRpYWxpemUoKTsKLSAgICByZXR1cm4gRGVsYXlOb2RlOjpjcmVhdGUodGhpcywgbV9kZXN0
aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSwgbWF4RGVsYXlUaW1lKTsKLX0KLQotUGFzc1JlZlB0
cjxBdWRpb0NoYW5uZWxTcGxpdHRlcj4gQXVkaW9Db250ZXh0OjpjcmVhdGVDaGFubmVsU3BsaXR0
ZXIoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbGF6eUluaXRpYWxpemUo
KTsKLSAgICByZXR1cm4gQXVkaW9DaGFubmVsU3BsaXR0ZXI6OmNyZWF0ZSh0aGlzLCBtX2Rlc3Rp
bmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpKTsKLX0KLQotUGFzc1JlZlB0cjxBdWRpb0NoYW5uZWxN
ZXJnZXI+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5lbE1lcmdlcigpCi17Ci0gICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLSAgICBsYXp5SW5pdGlhbGl6ZSgpOwotICAgIHJldHVybiBBdWRp
b0NoYW5uZWxNZXJnZXI6OmNyZWF0ZSh0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0
ZSgpKTsKLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6Om5vdGlmeU5vZGVGaW5pc2hlZFByb2Nlc3Np
bmcoQXVkaW9Ob2RlKiBub2RlKQotewotICAgIEFTU0VSVChpc0F1ZGlvVGhyZWFkKCkpOwotICAg
IG1fZmluaXNoZWROb2Rlcy5hcHBlbmQobm9kZSk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0Ojpk
ZXJlZkZpbmlzaGVkU291cmNlTm9kZXMoKQotewotICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7
Ci0gICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSB8fCBpc0F1ZGlvVGhyZWFkRmluaXNoZWQoKSk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZmluaXNoZWROb2Rlcy5zaXplKCk7IGkr
KykKLSAgICAgICAgZGVyZWZOb2RlKG1fZmluaXNoZWROb2Rlc1tpXSk7Ci0KLSAgICBtX2Zpbmlz
aGVkTm9kZXMuY2xlYXIoKTsKLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OnJlZk5vZGUoQXVkaW9O
b2RlKiBub2RlKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQXV0b0xvY2tl
ciBsb2NrZXIodGhpcyk7Ci0gICAgCi0gICAgbm9kZS0+cmVmKEF1ZGlvTm9kZTo6UmVmVHlwZUNv
bm5lY3Rpb24pOwotICAgIG1fcmVmZXJlbmNlZE5vZGVzLmFwcGVuZChub2RlKTsKLX0KLQotdm9p
ZCBBdWRpb0NvbnRleHQ6OmRlcmVmTm9kZShBdWRpb05vZGUqIG5vZGUpCi17Ci0gICAgQVNTRVJU
KGlzR3JhcGhPd25lcigpKTsKLSAgICAKLSAgICBub2RlLT5kZXJlZihBdWRpb05vZGU6OlJlZlR5
cGVDb25uZWN0aW9uKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3JlZmVyZW5j
ZWROb2Rlcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobm9kZSA9PSBtX3JlZmVyZW5jZWRO
b2Rlc1tpXSkgewotICAgICAgICAgICAgbV9yZWZlcmVuY2VkTm9kZXMucmVtb3ZlKGkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0
OjpkZXJlZlVuZmluaXNoZWRTb3VyY2VOb2RlcygpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpICYmIGlzQXVkaW9UaHJlYWRGaW5pc2hlZCgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9yZWZlcmVuY2VkTm9kZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fcmVmZXJlbmNl
ZE5vZGVzW2ldLT5kZXJlZihBdWRpb05vZGU6OlJlZlR5cGVDb25uZWN0aW9uKTsKLQotICAgIG1f
cmVmZXJlbmNlZE5vZGVzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0Ojpsb2NrKGJv
b2wmIG11c3RSZWxlYXNlTG9jaykKLXsKLSAgICAvLyBEb24ndCBhbGxvdyByZWd1bGFyIGxvY2sg
aW4gcmVhbC10aW1lIGF1ZGlvIHRocmVhZC4KLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
Ci0gICAgVGhyZWFkSWRlbnRpZmllciB0aGlzVGhyZWFkID0gY3VycmVudFRocmVhZCgpOwotCi0g
ICAgaWYgKHRoaXNUaHJlYWQgPT0gbV9ncmFwaE93bmVyVGhyZWFkKSB7Ci0gICAgICAgIC8vIFdl
IGFscmVhZHkgaGF2ZSB0aGUgbG9jay4KLSAgICAgICAgbXVzdFJlbGVhc2VMb2NrID0gZmFsc2U7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQWNxdWlyZSB0aGUgbG9jay4KLSAgICAgICAgbV9j
b250ZXh0R3JhcGhNdXRleC5sb2NrKCk7Ci0gICAgICAgIG1fZ3JhcGhPd25lclRocmVhZCA9IHRo
aXNUaHJlYWQ7Ci0gICAgICAgIG11c3RSZWxlYXNlTG9jayA9IHRydWU7Ci0gICAgfQotfQotCi1i
b29sIEF1ZGlvQ29udGV4dDo6dHJ5TG9jayhib29sJiBtdXN0UmVsZWFzZUxvY2spCi17Ci0gICAg
VGhyZWFkSWRlbnRpZmllciB0aGlzVGhyZWFkID0gY3VycmVudFRocmVhZCgpOwotICAgIGJvb2wg
aXNBdWRpb1RocmVhZCA9IHRoaXNUaHJlYWQgPT0gYXVkaW9UaHJlYWQoKTsKLQotICAgIC8vIFRy
eSB0byBjYXRjaCBjYXNlcyBvZiB1c2luZyB0cnkgbG9jayBvbiBtYWluIHRocmVhZCAtIGl0IHNo
b3VsZCB1c2UgcmVndWxhciBsb2NrLgotICAgIEFTU0VSVChpc0F1ZGlvVGhyZWFkIHx8IGlzQXVk
aW9UaHJlYWRGaW5pc2hlZCgpKTsKLSAgICAKLSAgICBpZiAoIWlzQXVkaW9UaHJlYWQpIHsKLSAg
ICAgICAgLy8gSW4gcmVsZWFzZSBidWlsZCB0cmVhdCB0cnlMb2NrKCkgYXMgbG9jaygpIChzaW5j
ZSBhYm92ZSBBU1NFUlQoaXNBdWRpb1RocmVhZCkgbmV2ZXIgZmlyZXMpIC0gdGhpcyBpcyB0aGUg
YmVzdCB3ZSBjYW4gZG8uCi0gICAgICAgIGxvY2sobXVzdFJlbGVhc2VMb2NrKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaGFzTG9jazsKLSAgICAKLSAgICBp
ZiAodGhpc1RocmVhZCA9PSBtX2dyYXBoT3duZXJUaHJlYWQpIHsKLSAgICAgICAgLy8gVGhyZWFk
IGFscmVhZHkgaGFzIHRoZSBsb2NrLgotICAgICAgICBoYXNMb2NrID0gdHJ1ZTsKLSAgICAgICAg
bXVzdFJlbGVhc2VMb2NrID0gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRG9uJ3Qg
YWxyZWFkeSBoYXZlIHRoZSBsb2NrIC0gdHJ5IHRvIGFjcXVpcmUgaXQuCi0gICAgICAgIGhhc0xv
Y2sgPSBtX2NvbnRleHRHcmFwaE11dGV4LnRyeUxvY2soKTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChoYXNMb2NrKQotICAgICAgICAgICAgbV9ncmFwaE93bmVyVGhyZWFkID0gdGhpc1RocmVhZDsK
LQotICAgICAgICBtdXN0UmVsZWFzZUxvY2sgPSBoYXNMb2NrOwotICAgIH0KLSAgICAKLSAgICBy
ZXR1cm4gaGFzTG9jazsKLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OnVubG9jaygpCi17Ci0gICAg
QVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX2dyYXBoT3duZXJUaHJlYWQpOwotCi0gICAgbV9n
cmFwaE93bmVyVGhyZWFkID0gVW5kZWZpbmVkVGhyZWFkSWRlbnRpZmllcjsKLSAgICBtX2NvbnRl
eHRHcmFwaE11dGV4LnVubG9jaygpOwotfQotCi1ib29sIEF1ZGlvQ29udGV4dDo6aXNBdWRpb1Ro
cmVhZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKSA9PSBtX2F1ZGlvVGhy
ZWFkOwotfQotCi1ib29sIEF1ZGlvQ29udGV4dDo6aXNHcmFwaE93bmVyKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gY3VycmVudFRocmVhZCgpID09IG1fZ3JhcGhPd25lclRocmVhZDsKLX0KLQotdm9p
ZCBBdWRpb0NvbnRleHQ6OmFkZERlZmVycmVkRmluaXNoRGVyZWYoQXVkaW9Ob2RlKiBub2RlLCBB
dWRpb05vZGU6OlJlZlR5cGUgcmVmVHlwZSkKLXsKLSAgICBBU1NFUlQoaXNBdWRpb1RocmVhZCgp
KTsKLSAgICBtX2RlZmVycmVkRmluaXNoRGVyZWZMaXN0LmFwcGVuZChBdWRpb0NvbnRleHQ6OlJl
ZkluZm8obm9kZSwgcmVmVHlwZSkpOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxlUHJl
UmVuZGVyVGFza3MoKQotewotICAgIEFTU0VSVChpc0F1ZGlvVGhyZWFkKCkpOwotIAotICAgIC8v
IEF0IHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkgcmVuZGVyIHF1YW50dW0sIHRyeSB0byB1cGRhdGUg
dGhlIGludGVybmFsIHJlbmRlcmluZyBncmFwaCBzdGF0ZSAoZnJvbSBtYWluIHRocmVhZCBjaGFu
Z2VzKS4KLSAgICAvLyBJdCdzIE9LIGlmIHRoZSB0cnlMb2NrKCkgZmFpbHMsIHdlJ2xsIGp1c3Qg
dGFrZSBzbGlnaHRseSBsb25nZXIgdG8gcGljayB1cCB0aGUgY2hhbmdlcy4KLSAgICBib29sIG11
c3RSZWxlYXNlTG9jazsKLSAgICBpZiAodHJ5TG9jayhtdXN0UmVsZWFzZUxvY2spKSB7Ci0gICAg
ICAgIC8vIEZpeHVwIHRoZSBzdGF0ZSBvZiBhbnkgZGlydHkgQXVkaW9Ob2RlSW5wdXRzIGFuZCBB
dWRpb05vZGVPdXRwdXRzLgotICAgICAgICBoYW5kbGVEaXJ0eUF1ZGlvTm9kZUlucHV0cygpOwot
ICAgICAgICBoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMoKTsKLSAgICAgICAgCi0gICAgICAg
IGlmIChtdXN0UmVsZWFzZUxvY2spCi0gICAgICAgICAgICB1bmxvY2soKTsKLSAgICB9Ci19Ci0K
LXZvaWQgQXVkaW9Db250ZXh0OjpoYW5kbGVQb3N0UmVuZGVyVGFza3MoKQotewotICAgIEFTU0VS
VChpc0F1ZGlvVGhyZWFkKCkpOwotIAotICAgIC8vIE11c3QgdXNlIGEgdHJ5TG9jaygpIGhlcmUg
dG9vLiAgRG9uJ3Qgd29ycnksIHRoZSBsb2NrIHdpbGwgdmVyeSByYXJlbHkgYmUgY29udGVuZGVk
IGFuZCB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJlcXVlbnRseS4KLSAgICAvLyBUaGUgd29yc3Qg
dGhhdCBjYW4gaGFwcGVuIGlzIHRoYXQgdGhlcmUgd2lsbCBiZSBzb21lIG5vZGVzIHdoaWNoIHdp
bGwgdGFrZSBzbGlnaHRseSBsb25nZXIgdGhhbiB1c3VhbCB0byBiZSBkZWxldGVkIG9yIHJlbW92
ZWQKLSAgICAvLyBmcm9tIHRoZSByZW5kZXIgZ3JhcGggKGluIHdoaWNoIGNhc2UgdGhleSdsbCBy
ZW5kZXIgc2lsZW5jZSkuCi0gICAgYm9vbCBtdXN0UmVsZWFzZUxvY2s7Ci0gICAgaWYgKHRyeUxv
Y2sobXVzdFJlbGVhc2VMb2NrKSkgewotICAgICAgICAvLyBUYWtlIGNhcmUgb2YgZmluaXNoaW5n
IGFueSBkZXJlZnMgd2hlcmUgdGhlIHRyeUxvY2soKSBmYWlsZWQgcHJldmlvdXNseS4KLSAgICAg
ICAgaGFuZGxlRGVmZXJyZWRGaW5pc2hEZXJlZnMoKTsKLQotICAgICAgICAvLyBEeW5hbWljYWxs
eSBjbGVhbiB1cCBub2RlcyB3aGljaCBhcmUgbm8gbG9uZ2VyIG5lZWRlZC4KLSAgICAgICAgZGVy
ZWZGaW5pc2hlZFNvdXJjZU5vZGVzKCk7Ci0KLSAgICAgICAgLy8gRG9uJ3QgZGVsZXRlIGluIHRo
ZSByZWFsLXRpbWUgdGhyZWFkLiBMZXQgdGhlIG1haW4gdGhyZWFkIGRvIGl0LgotICAgICAgICAv
LyBSZWYtY291bnRlZCBvYmplY3RzIGhlbGQgYnkgY2VydGFpbiBBdWRpb05vZGVzIG1heSBub3Qg
YmUgdGhyZWFkLXNhZmUuCi0gICAgICAgIHNjaGVkdWxlTm9kZURlbGV0aW9uKCk7Ci0KLSAgICAg
ICAgLy8gRml4dXAgdGhlIHN0YXRlIG9mIGFueSBkaXJ0eSBBdWRpb05vZGVJbnB1dHMgYW5kIEF1
ZGlvTm9kZU91dHB1dHMuCi0gICAgICAgIGhhbmRsZURpcnR5QXVkaW9Ob2RlSW5wdXRzKCk7Ci0g
ICAgICAgIGhhbmRsZURpcnR5QXVkaW9Ob2RlT3V0cHV0cygpOwotICAgICAgICAKLSAgICAgICAg
aWYgKG11c3RSZWxlYXNlTG9jaykKLSAgICAgICAgICAgIHVubG9jaygpOwotICAgIH0KLX0KLQot
dm9pZCBBdWRpb0NvbnRleHQ6OmhhbmRsZURlZmVycmVkRmluaXNoRGVyZWZzKCkKLXsKLSAgICBB
U1NFUlQoaXNBdWRpb1RocmVhZCgpICYmIGlzR3JhcGhPd25lcigpKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9kZWZlcnJlZEZpbmlzaERlcmVmTGlzdC5zaXplKCk7ICsraSkgewot
ICAgICAgICBBdWRpb05vZGUqIG5vZGUgPSBtX2RlZmVycmVkRmluaXNoRGVyZWZMaXN0W2ldLm1f
bm9kZTsKLSAgICAgICAgQXVkaW9Ob2RlOjpSZWZUeXBlIHJlZlR5cGUgPSBtX2RlZmVycmVkRmlu
aXNoRGVyZWZMaXN0W2ldLm1fcmVmVHlwZTsKLSAgICAgICAgbm9kZS0+ZmluaXNoRGVyZWYocmVm
VHlwZSk7Ci0gICAgfQotICAgIAotICAgIG1fZGVmZXJyZWRGaW5pc2hEZXJlZkxpc3QuY2xlYXIo
KTsKLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6Om1hcmtGb3JEZWxldGlvbihBdWRpb05vZGUqIG5v
ZGUpCi17Ci0gICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsKLSAgICBtX25vZGVzVG9EZWxldGUu
YXBwZW5kKG5vZGUpOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6c2NoZWR1bGVOb2RlRGVsZXRp
b24oKQotewotICAgIGJvb2wgaXNHb29kID0gbV9pc0luaXRpYWxpemVkICYmIGlzR3JhcGhPd25l
cigpOwotICAgIEFTU0VSVChpc0dvb2QpOwotICAgIGlmICghaXNHb29kKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBNYWtlIHN1cmUgdG8gY2FsbCBkZWxldGVNYXJrZWROb2RlcygpIG9uIG1h
aW4gdGhyZWFkLiAgICAKLSAgICBpZiAobV9ub2Rlc1RvRGVsZXRlLnNpemUoKSAmJiAhbV9pc0Rl
bGV0aW9uU2NoZWR1bGVkKSB7Ci0gICAgICAgIG1faXNEZWxldGlvblNjaGVkdWxlZCA9IHRydWU7
Ci0KLSAgICAgICAgLy8gRG9uJ3QgbGV0IG91cnNlbGYgZ2V0IGRlbGV0ZWQgYmVmb3JlIHRoZSBj
YWxsYmFjay4KLSAgICAgICAgLy8gU2VlIG1hdGNoaW5nIGRlcmVmKCkgaW4gZGVsZXRlTWFya2Vk
Tm9kZXNEaXNwYXRjaCgpLgotICAgICAgICByZWYoKTsKLSAgICAgICAgY2FsbE9uTWFpblRocmVh
ZChkZWxldGVNYXJrZWROb2Rlc0Rpc3BhdGNoLCB0aGlzKTsKLSAgICB9Ci19Ci0KLXZvaWQgQXVk
aW9Db250ZXh0OjpkZWxldGVNYXJrZWROb2Rlc0Rpc3BhdGNoKHZvaWQqIHVzZXJEYXRhKQotewot
ICAgIEF1ZGlvQ29udGV4dCogY29udGV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8QXVkaW9Db250ZXh0
Kj4odXNlckRhdGEpOwotICAgIEFTU0VSVChjb250ZXh0KTsKLSAgICBpZiAoIWNvbnRleHQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGNvbnRleHQtPmRlbGV0ZU1hcmtlZE5vZGVzKCk7Ci0gICAg
Y29udGV4dC0+ZGVyZWYoKTsKLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OmRlbGV0ZU1hcmtlZE5v
ZGVzKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgQXV0b0xvY2tlciBs
b2NrZXIodGhpcyk7Ci0gICAgCi0gICAgLy8gTm90ZTogZGVsZXRpbmcgYW4gQXVkaW9Ob2RlIGNh
biBjYXVzZSBtX25vZGVzVG9EZWxldGUgdG8gZ3Jvdy4KLSAgICB3aGlsZSAoc2l6ZV90IG4gPSBt
X25vZGVzVG9EZWxldGUuc2l6ZSgpKSB7Ci0gICAgICAgIEF1ZGlvTm9kZSogbm9kZSA9IG1fbm9k
ZXNUb0RlbGV0ZVtuIC0gMV07Ci0gICAgICAgIG1fbm9kZXNUb0RlbGV0ZS5yZW1vdmVMYXN0KCk7
Ci0KLSAgICAgICAgLy8gQmVmb3JlIGRlbGV0aW5nIHRoZSBub2RlLCBjbGVhciBvdXQgYW55IEF1
ZGlvTm9kZUlucHV0cyBmcm9tIG1fZGlydHlBdWRpb05vZGVJbnB1dHMuCi0gICAgICAgIHVuc2ln
bmVkIG51bWJlck9mSW5wdXRzID0gbm9kZS0+bnVtYmVyT2ZJbnB1dHMoKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSW5wdXRzOyArK2kpCi0gICAgICAgICAgICBt
X2RpcnR5QXVkaW9Ob2RlSW5wdXRzLnJlbW92ZShub2RlLT5pbnB1dChpKSk7Ci0KLSAgICAgICAg
Ly8gQmVmb3JlIGRlbGV0aW5nIHRoZSBub2RlLCBjbGVhciBvdXQgYW55IEF1ZGlvTm9kZU91dHB1
dHMgZnJvbSBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy4KLSAgICAgICAgdW5zaWduZWQgbnVtYmVy
T2ZPdXRwdXRzID0gbm9kZS0+bnVtYmVyT2ZPdXRwdXRzKCk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1iZXJPZk91dHB1dHM7ICsraSkKLSAgICAgICAgICAgIG1fZGlydHlB
dWRpb05vZGVPdXRwdXRzLnJlbW92ZShub2RlLT5vdXRwdXQoaSkpOwotCi0gICAgICAgIC8vIEZp
bmFsbHksIGRlbGV0ZSBpdC4KLSAgICAgICAgZGVsZXRlIG5vZGU7Ci0gICAgfQotICAgIAotICAg
IG1faXNEZWxldGlvblNjaGVkdWxlZCA9IGZhbHNlOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6
bWFya0F1ZGlvTm9kZUlucHV0RGlydHkoQXVkaW9Ob2RlSW5wdXQqIGlucHV0KQotewotICAgIEFT
U0VSVChpc0dyYXBoT3duZXIoKSk7ICAgIAotICAgIG1fZGlydHlBdWRpb05vZGVJbnB1dHMuYWRk
KGlucHV0KTsKLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6Om1hcmtBdWRpb05vZGVPdXRwdXREaXJ0
eShBdWRpb05vZGVPdXRwdXQqIG91dHB1dCkKLXsKLSAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkp
OyAgICAKLSAgICBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5hZGQob3V0cHV0KTsKLX0KLQotdm9p
ZCBBdWRpb0NvbnRleHQ6OmhhbmRsZURpcnR5QXVkaW9Ob2RlSW5wdXRzKCkKLXsKLSAgICBBU1NF
UlQoaXNHcmFwaE93bmVyKCkpOyAgICAKLQotICAgIGZvciAoSGFzaFNldDxBdWRpb05vZGVJbnB1
dCo+OjppdGVyYXRvciBpID0gbV9kaXJ0eUF1ZGlvTm9kZUlucHV0cy5iZWdpbigpOyBpICE9IG1f
ZGlydHlBdWRpb05vZGVJbnB1dHMuZW5kKCk7ICsraSkKLSAgICAgICAgKCppKS0+dXBkYXRlUmVu
ZGVyaW5nU3RhdGUoKTsKLQotICAgIG1fZGlydHlBdWRpb05vZGVJbnB1dHMuY2xlYXIoKTsKLX0K
LQotdm9pZCBBdWRpb0NvbnRleHQ6OmhhbmRsZURpcnR5QXVkaW9Ob2RlT3V0cHV0cygpCi17Ci0g
ICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsgICAgCi0KLSAgICBmb3IgKEhhc2hTZXQ8QXVkaW9O
b2RlT3V0cHV0Kj46Oml0ZXJhdG9yIGkgPSBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5iZWdpbigp
OyBpICE9IG1fZGlydHlBdWRpb05vZGVPdXRwdXRzLmVuZCgpOyArK2kpCi0gICAgICAgICgqaSkt
PnVwZGF0ZVJlbmRlcmluZ1N0YXRlKCk7Ci0KLSAgICBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5j
bGVhcigpOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIEF1ZGlvQ29udGV4dDo6aW50ZXJmYWNl
TmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JBdWRp
b0NvbnRleHQ7Ci19Ci0KLVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEF1ZGlvQ29udGV4dDo6c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCk7Ci19
Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpzdGFydFJlbmRlcmluZygpCi17Ci0gICAgZGVzdGluYXRp
b24oKS0+c3RhcnRSZW5kZXJpbmcoKTsKLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OmZpcmVDb21w
bGV0aW9uRXZlbnQoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFp
c01haW5UaHJlYWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBBdWRpb0J1ZmZl
ciogcmVuZGVyZWRCdWZmZXIgPSBtX3JlbmRlclRhcmdldC5nZXQoKTsKLQotICAgIEFTU0VSVChy
ZW5kZXJlZEJ1ZmZlcik7Ci0gICAgaWYgKCFyZW5kZXJlZEJ1ZmZlcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gQXZvaWQgZmlyaW5nIHRoZSBldmVudCBpZiB0aGUgZG9jdW1lbnQgaGFzIGFs
cmVhZHkgZ29uZSBhd2F5LgotICAgIGlmIChoYXNEb2N1bWVudCgpKSB7Ci0gICAgICAgIC8vIENh
bGwgdGhlIG9mZmxpbmUgcmVuZGVyaW5nIGNvbXBsZXRpb24gZXZlbnQgbGlzdGVuZXIuCi0gICAg
ICAgIGRpc3BhdGNoRXZlbnQoT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50OjpjcmVhdGUocmVu
ZGVyZWRCdWZmZXIpKTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9B
dWRpb0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b0NvbnRleHQuaAkocmV2aXNpb24gMTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMzE5ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIEF1ZGlvQ29udGV4dF9oCi0jZGVmaW5lIEF1ZGlvQ29udGV4dF9oCi0KLSNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJBc3luY0F1ZGlvRGVjb2Rlci5o
IgotI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCi0jaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbk5vZGUu
aCIKLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIK
LSNpbmNsdWRlICJIUlRGRGF0YWJhc2VMb2FkZXIuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3Vu
dGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9CdWZmZXI7Ci1jbGFzcyBBdWRpb0J1ZmZlckNhbGxiYWNr
OwotY2xhc3MgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOwotY2xhc3MgTWVkaWFFbGVtZW50QXVkaW9T
b3VyY2VOb2RlOwotY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKLWNsYXNzIEF1ZGlvQ2hhbm5lbE1l
cmdlcjsKLWNsYXNzIEF1ZGlvQ2hhbm5lbFNwbGl0dGVyOwotY2xhc3MgQXVkaW9HYWluTm9kZTsK
LWNsYXNzIEF1ZGlvUGFubmVyTm9kZTsKLWNsYXNzIEF1ZGlvTGlzdGVuZXI7Ci1jbGFzcyBCaXF1
YWRGaWx0ZXJOb2RlOwotY2xhc3MgRGVsYXlOb2RlOwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBM
b3dQYXNzMkZpbHRlck5vZGU7Ci1jbGFzcyBIaWdoUGFzczJGaWx0ZXJOb2RlOwotY2xhc3MgQ29u
dm9sdmVyTm9kZTsKLWNsYXNzIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU7Ci1jbGFzcyBSZWFsdGlt
ZUFuYWx5c2VyTm9kZTsKLWNsYXNzIFdhdmVTaGFwZXJOb2RlOwotY2xhc3MgSmF2YVNjcmlwdEF1
ZGlvTm9kZTsKLQotLy8gQXVkaW9Db250ZXh0IGlzIHRoZSBjb3JuZXJzdG9uZSBvZiB0aGUgd2Vi
IGF1ZGlvIEFQSSBhbmQgYWxsIEF1ZGlvTm9kZXMgYXJlIGNyZWF0ZWQgZnJvbSBpdC4KLS8vIEZv
ciB0aHJlYWQgc2FmZXR5IGJldHdlZW4gdGhlIGF1ZGlvIHRocmVhZCBhbmQgdGhlIG1haW4gdGhy
ZWFkLCBpdCBoYXMgYSByZW5kZXJpbmcgZ3JhcGggbG9ja2luZyBtZWNoYW5pc20uIAotCi1jbGFz
cyBBdWRpb0NvbnRleHQgOiBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8QXVkaW9Db250ZXh0PiwgcHVibGljIEV2ZW50VGFyZ2V0IHsKLXB1YmxpYzoK
LSAgICAvLyBDcmVhdGUgYW4gQXVkaW9Db250ZXh0IGZvciByZW5kZXJpbmcgdG8gdGhlIGF1ZGlv
IGhhcmR3YXJlLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlvQ29udGV4dD4gY3JlYXRlKERv
Y3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgLy8gQ3JlYXRlIGFuIEF1ZGlvQ29udGV4
dCBmb3Igb2ZmbGluZSAobm9uLXJlYWx0aW1lKSByZW5kZXJpbmcuCi0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8QXVkaW9Db250ZXh0PiBjcmVhdGVPZmZsaW5lQ29udGV4dChEb2N1bWVudCosIHVuc2ln
bmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxl
UmF0ZSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdmlydHVhbCB+QXVkaW9Db250ZXh0KCk7Ci0K
LSAgICBib29sIGlzSW5pdGlhbGl6ZWQoKSBjb25zdDsKLSAgICAKLSAgICBib29sIGlzT2ZmbGlu
ZUNvbnRleHQoKSB7IHJldHVybiBtX2lzT2ZmbGluZUNvbnRleHQ7IH0KLQotICAgIC8vIFJldHVy
bnMgdHJ1ZSB3aGVuIGluaXRpYWxpemUoKSB3YXMgY2FsbGVkIEFORCBhbGwgYXN5bmNocm9ub3Vz
IGluaXRpYWxpemF0aW9uIGhhcyBjb21wbGV0ZWQuCi0gICAgYm9vbCBpc1J1bm5hYmxlKCkgY29u
c3Q7Ci0KLSAgICAvLyBEb2N1bWVudCBub3RpZmljYXRpb24KLSAgICB2aXJ0dWFsIHZvaWQgc3Rv
cCgpOwotCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7IC8vIEFTU0VSVHMgaWYgZG9j
dW1lbnQgbm8gbG9uZ2VyIGV4aXN0cy4KLSAgICBib29sIGhhc0RvY3VtZW50KCk7Ci0KLSAgICBB
dWRpb0Rlc3RpbmF0aW9uTm9kZSogZGVzdGluYXRpb24oKSB7IHJldHVybiBtX2Rlc3RpbmF0aW9u
Tm9kZS5nZXQoKTsgfQotICAgIHNpemVfdCBjdXJyZW50U2FtcGxlRnJhbWUoKSB7IHJldHVybiBt
X2Rlc3RpbmF0aW9uTm9kZS0+Y3VycmVudFNhbXBsZUZyYW1lKCk7IH0KLSAgICBkb3VibGUgY3Vy
cmVudFRpbWUoKSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZS0+Y3VycmVudFRpbWUoKTsgfQot
ICAgIGZsb2F0IHNhbXBsZVJhdGUoKSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxl
UmF0ZSgpOyB9Ci0KLSAgICBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBjcmVhdGVCdWZmZXIodW5z
aWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IG51bWJlck9mRnJhbWVzLCBmbG9hdCBzYW1w
bGVSYXRlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gY3Jl
YXRlQnVmZmVyKEFycmF5QnVmZmVyKiwgYm9vbCBtaXhUb01vbm8sIEV4Y2VwdGlvbkNvZGUmKTsK
LQotICAgIC8vIEFzeW5jaHJvbm91cyBhdWRpbyBmaWxlIGRhdGEgZGVjb2RpbmcuCi0gICAgdm9p
ZCBkZWNvZGVBdWRpb0RhdGEoQXJyYXlCdWZmZXIqLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2Fs
bGJhY2s+LCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJiBl
Yyk7Ci0KLSAgICBBdWRpb0xpc3RlbmVyKiBsaXN0ZW5lcigpIHsgcmV0dXJuIG1fbGlzdGVuZXIu
Z2V0KCk7IH0KLQotICAgIC8vIFRoZSBBdWRpb05vZGUgY3JlYXRlIG1ldGhvZHMgYXJlIGNhbGxl
ZCBvbiB0aGUgbWFpbiB0aHJlYWQgKGZyb20gSmF2YVNjcmlwdCkuCi0gICAgUGFzc1JlZlB0cjxB
dWRpb0J1ZmZlclNvdXJjZU5vZGU+IGNyZWF0ZUJ1ZmZlclNvdXJjZSgpOwotI2lmIEVOQUJMRShW
SURFTykKLSAgICBQYXNzUmVmUHRyPE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4gY3JlYXRl
TWVkaWFFbGVtZW50U291cmNlKEhUTUxNZWRpYUVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Ci0j
ZW5kaWYKLSAgICBQYXNzUmVmUHRyPEF1ZGlvR2Fpbk5vZGU+IGNyZWF0ZUdhaW5Ob2RlKCk7Ci0g
ICAgUGFzc1JlZlB0cjxCaXF1YWRGaWx0ZXJOb2RlPiBjcmVhdGVCaXF1YWRGaWx0ZXIoKTsKLSAg
ICBQYXNzUmVmUHRyPFdhdmVTaGFwZXJOb2RlPiBjcmVhdGVXYXZlU2hhcGVyKCk7Ci0gICAgUGFz
c1JlZlB0cjxEZWxheU5vZGU+IGNyZWF0ZURlbGF5Tm9kZSgpOwotICAgIFBhc3NSZWZQdHI8RGVs
YXlOb2RlPiBjcmVhdGVEZWxheU5vZGUoZG91YmxlIG1heERlbGF5VGltZSk7Ci0gICAgUGFzc1Jl
ZlB0cjxMb3dQYXNzMkZpbHRlck5vZGU+IGNyZWF0ZUxvd1Bhc3MyRmlsdGVyKCk7Ci0gICAgUGFz
c1JlZlB0cjxIaWdoUGFzczJGaWx0ZXJOb2RlPiBjcmVhdGVIaWdoUGFzczJGaWx0ZXIoKTsKLSAg
ICBQYXNzUmVmUHRyPEF1ZGlvUGFubmVyTm9kZT4gY3JlYXRlUGFubmVyKCk7Ci0gICAgUGFzc1Jl
ZlB0cjxDb252b2x2ZXJOb2RlPiBjcmVhdGVDb252b2x2ZXIoKTsKLSAgICBQYXNzUmVmUHRyPER5
bmFtaWNzQ29tcHJlc3Nvck5vZGU+IGNyZWF0ZUR5bmFtaWNzQ29tcHJlc3NvcigpOyAgICAKLSAg
ICBQYXNzUmVmUHRyPFJlYWx0aW1lQW5hbHlzZXJOb2RlPiBjcmVhdGVBbmFseXNlcigpOwotICAg
IFBhc3NSZWZQdHI8SmF2YVNjcmlwdEF1ZGlvTm9kZT4gY3JlYXRlSmF2YVNjcmlwdE5vZGUoc2l6
ZV90IGJ1ZmZlclNpemUpOwotICAgIFBhc3NSZWZQdHI8QXVkaW9DaGFubmVsU3BsaXR0ZXI+IGNy
ZWF0ZUNoYW5uZWxTcGxpdHRlcigpOwotICAgIFBhc3NSZWZQdHI8QXVkaW9DaGFubmVsTWVyZ2Vy
PiBjcmVhdGVDaGFubmVsTWVyZ2VyKCk7Ci0KLSAgICAvLyBXaGVuIGEgc291cmNlIG5vZGUgaGFz
IG5vIG1vcmUgcHJvY2Vzc2luZyB0byBkbyAoaGFzIGZpbmlzaGVkIHBsYXlpbmcpLCB0aGVuIGl0
IHRlbGxzIHRoZSBjb250ZXh0IHRvIGRlcmVmZXJlbmNlIGl0LgotICAgIHZvaWQgbm90aWZ5Tm9k
ZUZpbmlzaGVkUHJvY2Vzc2luZyhBdWRpb05vZGUqKTsKLQotICAgIC8vIENhbGxlZCBhdCB0aGUg
c3RhcnQgb2YgZWFjaCByZW5kZXIgcXVhbnR1bS4KLSAgICB2b2lkIGhhbmRsZVByZVJlbmRlclRh
c2tzKCk7Ci0KLSAgICAvLyBDYWxsZWQgYXQgdGhlIGVuZCBvZiBlYWNoIHJlbmRlciBxdWFudHVt
LgotICAgIHZvaWQgaGFuZGxlUG9zdFJlbmRlclRhc2tzKCk7Ci0KLSAgICAvLyBDYWxsZWQgcGVy
aW9kaWNhbGx5IGF0IHRoZSBlbmQgb2YgZWFjaCByZW5kZXIgcXVhbnR1bSB0byBkZXJlZmVyZW5j
ZSBmaW5pc2hlZCBzb3VyY2Ugbm9kZXMuCi0gICAgdm9pZCBkZXJlZkZpbmlzaGVkU291cmNlTm9k
ZXMoKTsKLQotICAgIC8vIFdlIHNjaGVkdWxlIGRlbGV0aW9uIG9mIGFsbCBtYXJrZWQgbm9kZXMg
YXQgdGhlIGVuZCBvZiBlYWNoIHJlYWx0aW1lIHJlbmRlciBxdWFudHVtLgotICAgIHZvaWQgbWFy
a0ZvckRlbGV0aW9uKEF1ZGlvTm9kZSopOwotICAgIHZvaWQgZGVsZXRlTWFya2VkTm9kZXMoKTsK
LSAgICAKLSAgICAvLyBLZWVwcyB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGNvbm5lY3Rpb25zIG1h
ZGUuCi0gICAgdm9pZCBpbmNyZW1lbnRDb25uZWN0aW9uQ291bnQoKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICAgICAgbV9jb25uZWN0aW9uQ291bnQrKzsKLSAg
ICB9Ci0KLSAgICB1bnNpZ25lZCBjb25uZWN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2Nv
bm5lY3Rpb25Db3VudDsgfQotCi0gICAgLy8KLSAgICAvLyBUaHJlYWQgU2FmZXR5IGFuZCBHcmFw
aCBMb2NraW5nOgotICAgIC8vCi0gICAgCi0gICAgdm9pZCBzZXRBdWRpb1RocmVhZChUaHJlYWRJ
ZGVudGlmaWVyIHRocmVhZCkgeyBtX2F1ZGlvVGhyZWFkID0gdGhyZWFkOyB9IC8vIEZJWE1FOiBj
aGVjayBlaXRoZXIgbm90IGluaXRpYWxpemVkIG9yIHRoZSBzYW1lCi0gICAgVGhyZWFkSWRlbnRp
ZmllciBhdWRpb1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXVkaW9UaHJlYWQ7IH0KLSAgICBi
b29sIGlzQXVkaW9UaHJlYWQoKSBjb25zdDsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBvbmx5IGFm
dGVyIHRoZSBhdWRpbyB0aHJlYWQgaGFzIGJlZW4gc3RhcnRlZCBhbmQgdGhlbiBzaHV0ZG93bi4K
LSAgICBib29sIGlzQXVkaW9UaHJlYWRGaW5pc2hlZCgpIHsgcmV0dXJuIG1faXNBdWRpb1RocmVh
ZEZpbmlzaGVkOyB9Ci0gICAgCi0gICAgLy8gbXVzdFJlbGVhc2VMb2NrIGlzIHNldCB0byB0cnVl
IGlmIHdlIGFjcXVpcmVkIHRoZSBsb2NrIGluIHRoaXMgbWV0aG9kIGNhbGwgYW5kIGNhbGxlciBt
dXN0IHVubG9jaygpLCBmYWxzZSBpZiBpdCB3YXMgcHJldmlvdXNseSBhY3F1aXJlZC4KLSAgICB2
b2lkIGxvY2soYm9vbCYgbXVzdFJlbGVhc2VMb2NrKTsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiB3ZSBvd24gdGhlIGxvY2suCi0gICAgLy8gbXVzdFJlbGVhc2VMb2NrIGlzIHNldCB0byB0cnVl
IGlmIHdlIGFjcXVpcmVkIHRoZSBsb2NrIGluIHRoaXMgbWV0aG9kIGNhbGwgYW5kIGNhbGxlciBt
dXN0IHVubG9jaygpLCBmYWxzZSBpZiBpdCB3YXMgcHJldmlvdXNseSBhY3F1aXJlZC4KLSAgICBi
b29sIHRyeUxvY2soYm9vbCYgbXVzdFJlbGVhc2VMb2NrKTsKLQotICAgIHZvaWQgdW5sb2NrKCk7
Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyB0aHJlYWQgb3ducyB0aGUgY29udGV4dCdz
IGxvY2suCi0gICAgYm9vbCBpc0dyYXBoT3duZXIoKSBjb25zdDsKLQotICAgIC8vIFJldHVybnMg
dGhlIG1heGltdW0gbnVtdWJlciBvZiBjaGFubmVscyB3ZSBjYW4gc3VwcG9ydC4KLSAgICBzdGF0
aWMgdW5zaWduZWQgbWF4TnVtYmVyT2ZDaGFubmVscygpIHsgcmV0dXJuIE1heE51bWJlck9mQ2hh
bm5lbHM7fQotCi0gICAgY2xhc3MgQXV0b0xvY2tlciB7Ci0gICAgcHVibGljOgotICAgICAgICBB
dXRvTG9ja2VyKEF1ZGlvQ29udGV4dCogY29udGV4dCkKLSAgICAgICAgICAgIDogbV9jb250ZXh0
KGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjb250ZXh0KTsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmxvY2sobV9tdXN0UmVsZWFzZUxvY2spOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICB+QXV0b0xvY2tlcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICht
X211c3RSZWxlYXNlTG9jaykKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnVubG9jaygpOwot
ICAgICAgICB9Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgQXVkaW9Db250ZXh0KiBtX2NvbnRleHQ7
Ci0gICAgICAgIGJvb2wgbV9tdXN0UmVsZWFzZUxvY2s7Ci0gICAgfTsKLSAgICAKLSAgICAvLyBJ
biBBdWRpb05vZGU6OmRlcmVmKCkgYSB0cnlMb2NrKCkgaXMgdXNlZCBmb3IgY2FsbGluZyBmaW5p
c2hEZXJlZigpLCBidXQgaWYgaXQgZmFpbHMga2VlcCB0cmFjayBoZXJlLgotICAgIHZvaWQgYWRk
RGVmZXJyZWRGaW5pc2hEZXJlZihBdWRpb05vZGUqLCBBdWRpb05vZGU6OlJlZlR5cGUpOwotCi0g
ICAgLy8gSW4gdGhlIGF1ZGlvIHRocmVhZCBhdCB0aGUgc3RhcnQgb2YgZWFjaCByZW5kZXIgY3lj
bGUsIHdlJ2xsIGNhbGwgaGFuZGxlRGVmZXJyZWRGaW5pc2hEZXJlZnMoKS4KLSAgICB2b2lkIGhh
bmRsZURlZmVycmVkRmluaXNoRGVyZWZzKCk7Ci0KLSAgICAvLyBPbmx5IGFjY2Vzc2VkIHdoZW4g
dGhlIGdyYXBoIGxvY2sgaXMgaGVsZC4KLSAgICB2b2lkIG1hcmtBdWRpb05vZGVJbnB1dERpcnR5
KEF1ZGlvTm9kZUlucHV0Kik7Ci0gICAgdm9pZCBtYXJrQXVkaW9Ob2RlT3V0cHV0RGlydHkoQXVk
aW9Ob2RlT3V0cHV0Kik7Ci0KLSAgICAvLyBFdmVudFRhcmdldAotICAgIHZpcnR1YWwgY29uc3Qg
QXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpIHsgcmV0dXJuICZtX2V2ZW50
VGFyZ2V0RGF0YTsgfQotICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRh
cmdldERhdGEoKSB7IHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7IH0KLQotICAgIERFRklORV9B
VFRSSUJVVEVfRVZFTlRfTElTVEVORVIoY29tcGxldGUpOwotCi0gICAgLy8gUmVjb25jaWxlIHJl
Zi9kZXJlZiB3aGljaCBhcmUgZGVmaW5lZCBib3RoIGluIFRocmVhZFNhZmVSZWZDb3VudGVkIGFu
ZCBFdmVudFRhcmdldC4KLSAgICB1c2luZyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBdWRpb0NvbnRl
eHQ+OjpyZWY7Ci0gICAgdXNpbmcgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QXVkaW9Db250ZXh0Pjo6
ZGVyZWY7Ci0KLSAgICB2b2lkIHN0YXJ0UmVuZGVyaW5nKCk7Ci0gICAgdm9pZCBmaXJlQ29tcGxl
dGlvbkV2ZW50KCk7Ci0gICAgCi0gICAgc3RhdGljIHVuc2lnbmVkIHNfaGFyZHdhcmVDb250ZXh0
Q291bnQ7Ci0gICAgCi1wcml2YXRlOgotICAgIEF1ZGlvQ29udGV4dChEb2N1bWVudCopOwotICAg
IEF1ZGlvQ29udGV4dChEb2N1bWVudCosIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVf
dCBudW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSk7Ci0gICAgdm9pZCBjb25zdHJ1Y3RD
b21tb24oKTsKLQotICAgIHZvaWQgbGF6eUluaXRpYWxpemUoKTsKLSAgICB2b2lkIHVuaW5pdGlh
bGl6ZSgpOwotICAgIHN0YXRpYyB2b2lkIHVuaW5pdGlhbGl6ZURpc3BhdGNoKHZvaWQqIHVzZXJE
YXRhKTsKLQotICAgIHZvaWQgc2NoZWR1bGVOb2RlRGVsZXRpb24oKTsKLSAgICBzdGF0aWMgdm9p
ZCBkZWxldGVNYXJrZWROb2Rlc0Rpc3BhdGNoKHZvaWQqIHVzZXJEYXRhKTsKLSAgICAKLSAgICBi
b29sIG1faXNJbml0aWFsaXplZDsKLSAgICBib29sIG1faXNBdWRpb1RocmVhZEZpbmlzaGVkOwot
ICAgIGJvb2wgbV9pc0F1ZGlvVGhyZWFkU2h1dGRvd247Ci0KLSAgICBEb2N1bWVudCogbV9kb2N1
bWVudDsKLQotICAgIC8vIFRoZSBjb250ZXh0IGl0c2VsZiBrZWVwcyBhIHJlZmVyZW5jZSB0byBh
bGwgc291cmNlIG5vZGVzLiAgVGhlIHNvdXJjZSBub2RlcywgdGhlbiByZWZlcmVuY2UgYWxsIG5v
ZGVzIHRoZXkncmUgY29ubmVjdGVkIHRvLgotICAgIC8vIEluIHR1cm4sIHRoZXNlIG5vZGVzIHJl
ZmVyZW5jZSBhbGwgbm9kZXMgdGhleSdyZSBjb25uZWN0ZWQgdG8uICBBbGwgbm9kZXMgYXJlIHVs
dGltYXRlbHkgY29ubmVjdGVkIHRvIHRoZSBBdWRpb0Rlc3RpbmF0aW9uTm9kZS4KLSAgICAvLyBX
aGVuIHRoZSBjb250ZXh0IGRlcmVmZXJlbmNlcyBhIHNvdXJjZSBub2RlLCBpdCB3aWxsIGJlIGRl
YWN0aXZhdGVkIGZyb20gdGhlIHJlbmRlcmluZyBncmFwaCBhbG9uZyB3aXRoIGFsbCBvdGhlciBu
b2RlcyBpdCBpcwotICAgIC8vIHVuaXF1ZWx5IGNvbm5lY3RlZCB0by4gIFNlZSB0aGUgQXVkaW9O
b2RlOjpyZWYoKSBhbmQgQXVkaW9Ob2RlOjpkZXJlZigpIG1ldGhvZHMgZm9yIG1vcmUgZGV0YWls
cy4KLSAgICB2b2lkIHJlZk5vZGUoQXVkaW9Ob2RlKik7Ci0gICAgdm9pZCBkZXJlZk5vZGUoQXVk
aW9Ob2RlKik7Ci0KLSAgICAvLyBXaGVuIHRoZSBjb250ZXh0IGdvZXMgYXdheSwgdGhlcmUgbWln
aHQgc3RpbGwgYmUgc29tZSBzb3VyY2VzIHdoaWNoIGhhdmVuJ3QgZmluaXNoZWQgcGxheWluZy4K
LSAgICAvLyBNYWtlIHN1cmUgdG8gZGVyZWZlcmVuY2UgdGhlbSBoZXJlLgotICAgIHZvaWQgZGVy
ZWZVbmZpbmlzaGVkU291cmNlTm9kZXMoKTsKLQotICAgIFJlZlB0cjxBdWRpb0Rlc3RpbmF0aW9u
Tm9kZT4gbV9kZXN0aW5hdGlvbk5vZGU7Ci0gICAgUmVmUHRyPEF1ZGlvTGlzdGVuZXI+IG1fbGlz
dGVuZXI7Ci0KLSAgICAvLyBPbmx5IGFjY2Vzc2VkIGluIHRoZSBhdWRpbyB0aHJlYWQuCi0gICAg
VmVjdG9yPEF1ZGlvTm9kZSo+IG1fZmluaXNoZWROb2RlczsKLQotICAgIC8vIFdlIGRvbid0IHVz
ZSBSZWZQdHI8QXVkaW9Ob2RlPiBoZXJlIGJlY2F1c2UgQXVkaW9Ob2RlIGhhcyBhIG1vcmUgY29t
cGxleCByZWYoKSAvIGRlcmVmKCkgaW1wbGVtZW50YXRpb24KLSAgICAvLyB3aXRoIGFuIG9wdGlv
bmFsIGFyZ3VtZW50IGZvciByZWZUeXBlLiAgV2UgbmVlZCB0byB1c2UgdGhlIHNwZWNpYWwgcmVm
VHlwZTogUmVmVHlwZUNvbm5lY3Rpb24KLSAgICAvLyBFaXRoZXIgYWNjZXNzZWQgd2hlbiB0aGUg
Z3JhcGggbG9jayBpcyBoZWxkLCBvciBvbiB0aGUgbWFpbiB0aHJlYWQgd2hlbiB0aGUgYXVkaW8g
dGhyZWFkIGhhcyBmaW5pc2hlZC4KLSAgICBWZWN0b3I8QXVkaW9Ob2RlKj4gbV9yZWZlcmVuY2Vk
Tm9kZXM7Ci0KLSAgICAvLyBBY2N1bXVsYXRlIG5vZGVzIHdoaWNoIG5lZWQgdG8gYmUgZGVsZXRl
ZCBoZXJlLgotICAgIC8vIFRoZXkgd2lsbCBiZSBzY2hlZHVsZWQgZm9yIGRlbGV0aW9uIChvbiB0
aGUgbWFpbiB0aHJlYWQpIGF0IHRoZSBlbmQgb2YgYSByZW5kZXIgY3ljbGUgKGluIHJlYWx0aW1l
IHRocmVhZCkuCi0gICAgVmVjdG9yPEF1ZGlvTm9kZSo+IG1fbm9kZXNUb0RlbGV0ZTsKLSAgICBi
b29sIG1faXNEZWxldGlvblNjaGVkdWxlZDsKLQotICAgIC8vIE9ubHkgYWNjZXNzZWQgd2hlbiB0
aGUgZ3JhcGggbG9jayBpcyBoZWxkLgotICAgIEhhc2hTZXQ8QXVkaW9Ob2RlSW5wdXQqPiBtX2Rp
cnR5QXVkaW9Ob2RlSW5wdXRzOwotICAgIEhhc2hTZXQ8QXVkaW9Ob2RlT3V0cHV0Kj4gbV9kaXJ0
eUF1ZGlvTm9kZU91dHB1dHM7Ci0gICAgdm9pZCBoYW5kbGVEaXJ0eUF1ZGlvTm9kZUlucHV0cygp
OwotICAgIHZvaWQgaGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRzKCk7Ci0KLSAgICB1bnNpZ25l
ZCBtX2Nvbm5lY3Rpb25Db3VudDsKLQotICAgIC8vIEdyYXBoIGxvY2tpbmcuCi0gICAgTXV0ZXgg
bV9jb250ZXh0R3JhcGhNdXRleDsKLSAgICB2b2xhdGlsZSBUaHJlYWRJZGVudGlmaWVyIG1fYXVk
aW9UaHJlYWQ7Ci0gICAgdm9sYXRpbGUgVGhyZWFkSWRlbnRpZmllciBtX2dyYXBoT3duZXJUaHJl
YWQ7IC8vIGlmIHRoZSBsb2NrIGlzIGhlbGQgdGhlbiB0aGlzIGlzIHRoZSB0aHJlYWQgd2hpY2gg
b3ducyBpdCwgb3RoZXJ3aXNlID09IFVuZGVmaW5lZFRocmVhZElkZW50aWZpZXIKLSAgICAKLSAg
ICAvLyBEZWZlcnJlZCBkZS1yZWZlcmVuY2luZy4KLSAgICBzdHJ1Y3QgUmVmSW5mbyB7Ci0gICAg
ICAgIFJlZkluZm8oQXVkaW9Ob2RlKiBub2RlLCBBdWRpb05vZGU6OlJlZlR5cGUgcmVmVHlwZSkK
LSAgICAgICAgICAgIDogbV9ub2RlKG5vZGUpCi0gICAgICAgICAgICAsIG1fcmVmVHlwZShyZWZU
eXBlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgQXVkaW9Ob2RlKiBtX25vZGU7Ci0g
ICAgICAgIEF1ZGlvTm9kZTo6UmVmVHlwZSBtX3JlZlR5cGU7Ci0gICAgfTsgICAgCi0KLSAgICAv
LyBPbmx5IGFjY2Vzc2VkIGluIHRoZSBhdWRpbyB0aHJlYWQuCi0gICAgVmVjdG9yPFJlZkluZm8+
IG1fZGVmZXJyZWRGaW5pc2hEZXJlZkxpc3Q7Ci0gICAgCi0gICAgLy8gSFJURiBEYXRhYmFzZSBs
b2FkZXIKLSAgICBSZWZQdHI8SFJURkRhdGFiYXNlTG9hZGVyPiBtX2hydGZEYXRhYmFzZUxvYWRl
cjsKLQotICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0
KCkgeyByZWYoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJl
ZigpOyB9Ci0gICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXREYXRhOwotCi0gICAgUmVm
UHRyPEF1ZGlvQnVmZmVyPiBtX3JlbmRlclRhcmdldDsKLSAgICAKLSAgICBib29sIG1faXNPZmZs
aW5lQ29udGV4dDsKLQotICAgIEFzeW5jQXVkaW9EZWNvZGVyIG1fYXVkaW9EZWNvZGVyOwotCi0g
ICAgLy8gVGhpcyBpcyBjb25zaWRlcmluZyAzMiBpcyBsYXJnZSBlbm91Z2ggZm9yIG11bHRpcGxl
IGNoYW5uZWxzIGF1ZGlvLiAKLSAgICAvLyBJdCBpcyBzb21ld2hhdCBhcmJpdHJhcnkgYW5kIGNv
dWxkIGJlIGluY3JlYXNlZCBpZiBuZWNlc3NhcnkuCi0gICAgZW51bSB7IE1heE51bWJlck9mQ2hh
bm5lbHMgPSAzMiB9OwotCi19OwotCi19IC8vIFdlYkNvcmUKLQotI2VuZGlmIC8vIEF1ZGlvQ29u
dGV4dF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwJKHJl
dmlzaW9uIDExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgd2Vi
YXVkaW8gewotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywK
LSAgICAgICAgQWN0aXZlRE9NT2JqZWN0LAotICAgICAgICBDdXN0b21Db25zdHJ1Y3RvciwKLSAg
ICAgICAgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPTAsCi0gICAgICAgIEpTQ3VzdG9tTWFya0Z1bmN0
aW9uLAotICAgICAgICBFdmVudFRhcmdldAotICAgIF0gQXVkaW9Db250ZXh0IHsKLSAgICAgICAg
Ly8gQWxsIHJlbmRlcmVkIGF1ZGlvIHVsdGltYXRlbHkgY29ubmVjdHMgdG8gZGVzdGluYXRpb24s
IHdoaWNoIHJlcHJlc2VudHMgdGhlIGF1ZGlvIGhhcmR3YXJlLgotICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgQXVkaW9EZXN0aW5hdGlvbk5vZGUgZGVzdGluYXRpb247Ci0KLSAgICAgICAgLy8g
QWxsIHNjaGVkdWxlZCB0aW1lcyBhcmUgcmVsYXRpdmUgdG8gdGhpcyB0aW1lIGluIHNlY29uZHMu
Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBmbG9hdCBjdXJyZW50VGltZTsKLQotICAgICAg
ICAvLyBBbGwgQXVkaW9Ob2RlcyBpbiB0aGUgY29udGV4dCBydW4gYXQgdGhpcyBzYW1wbGUtcmF0
ZSAoaW4gc2FtcGxlLWZyYW1lcyBwZXIgc2Vjb25kKS4KLSAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIGZsb2F0IHNhbXBsZVJhdGU7Ci0KLSAgICAgICAgLy8gQWxsIHBhbm5pbmcgaXMgcmVsYXRp
dmUgdG8gdGhpcyBsaXN0ZW5lci4KLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlvTGlz
dGVuZXIgbGlzdGVuZXI7Ci0KLSAgICAgICAgQXVkaW9CdWZmZXIgY3JlYXRlQnVmZmVyKGluIHVu
c2lnbmVkIGxvbmcgbnVtYmVyT2ZDaGFubmVscywgaW4gdW5zaWduZWQgbG9uZyBudW1iZXJPZkZy
YW1lcywgaW4gZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRp
b24pOwotICAgICAgICBBdWRpb0J1ZmZlciBjcmVhdGVCdWZmZXIoaW4gQXJyYXlCdWZmZXIgYnVm
ZmVyLCBpbiBib29sZWFuIG1peFRvTW9ubykKLSAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRp
b24pOwotCi0gICAgICAgIC8vIEFzeW5jaHJvbm91cyBhdWRpbyBmaWxlIGRhdGEgZGVjb2Rpbmcu
Ci0gICAgICAgIHZvaWQgZGVjb2RlQXVkaW9EYXRhKGluIEFycmF5QnVmZmVyIGF1ZGlvRGF0YSwg
aW4gW0NhbGxiYWNrXSBBdWRpb0J1ZmZlckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywgaW4gW09w
dGlvbmFsLCBDYWxsYmFja10gQXVkaW9CdWZmZXJDYWxsYmFjayBlcnJvckNhbGxiYWNrKQotICAg
ICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0KLSAgICAgICAgLy8gU291cmNlcwotICAg
ICAgICBBdWRpb0J1ZmZlclNvdXJjZU5vZGUgY3JlYXRlQnVmZmVyU291cmNlKCk7Ci0jaWYgZGVm
aW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9WSURFTwotICAgICAgICBNZWRpYUVsZW1lbnRB
dWRpb1NvdXJjZU5vZGUgY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKGluIEhUTUxNZWRpYUVsZW1l
bnQgbWVkaWFFbGVtZW50KQotICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0jZW5k
aWYKLSAgICAgICAgLy8gUHJvY2Vzc2luZyBub2RlcwotICAgICAgICBBdWRpb0dhaW5Ob2RlIGNy
ZWF0ZUdhaW5Ob2RlKCk7Ci0gICAgICAgIERlbGF5Tm9kZSBjcmVhdGVEZWxheU5vZGUoaW4gW09w
dGlvbmFsXSBkb3VibGUgbWF4RGVsYXlUaW1lKTsKLSAgICAgICAgQmlxdWFkRmlsdGVyTm9kZSBj
cmVhdGVCaXF1YWRGaWx0ZXIoKTsKLSAgICAgICAgV2F2ZVNoYXBlck5vZGUgY3JlYXRlV2F2ZVNo
YXBlcigpOwotICAgICAgICBMb3dQYXNzMkZpbHRlck5vZGUgY3JlYXRlTG93UGFzczJGaWx0ZXIo
KTsKLSAgICAgICAgSGlnaFBhc3MyRmlsdGVyTm9kZSBjcmVhdGVIaWdoUGFzczJGaWx0ZXIoKTsK
LSAgICAgICAgQXVkaW9QYW5uZXJOb2RlIGNyZWF0ZVBhbm5lcigpOwotICAgICAgICBDb252b2x2
ZXJOb2RlIGNyZWF0ZUNvbnZvbHZlcigpOwotICAgICAgICBEeW5hbWljc0NvbXByZXNzb3JOb2Rl
IGNyZWF0ZUR5bmFtaWNzQ29tcHJlc3NvcigpOwotICAgICAgICBSZWFsdGltZUFuYWx5c2VyTm9k
ZSBjcmVhdGVBbmFseXNlcigpOwotICAgICAgICBKYXZhU2NyaXB0QXVkaW9Ob2RlIGNyZWF0ZUph
dmFTY3JpcHROb2RlKGluIHVuc2lnbmVkIGxvbmcgYnVmZmVyU2l6ZSk7Ci0KLSAgICAgICAgLy8g
Q2hhbm5lbCBzcGxpdHRpbmcgYW5kIG1lcmdpbmcKLSAgICAgICAgQXVkaW9DaGFubmVsU3BsaXR0
ZXIgY3JlYXRlQ2hhbm5lbFNwbGl0dGVyKCk7Ci0gICAgICAgIEF1ZGlvQ2hhbm5lbE1lcmdlciBj
cmVhdGVDaGFubmVsTWVyZ2VyKCk7Ci0KLSAgICAgICAgLy8gT2ZmbGluZSByZW5kZXJpbmcKLSAg
ICAgICAgLy8gdm9pZCBwcmVwYXJlT2ZmbGluZUJ1ZmZlclJlbmRlcmluZyhpbiB1bnNpZ25lZCBs
b25nIG51bWJlck9mQ2hhbm5lbHMsIGluIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZGcmFtZXMsIGlu
IGZsb2F0IHNhbXBsZVJhdGUpOwotICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmNv
bXBsZXRlOwotICAgICAgICB2b2lkIHN0YXJ0UmVuZGVyaW5nKCk7Ci0gICAgfTsKLX0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAJ
KHJldmlzaW9uIDExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvRGVzdGlu
YXRpb25Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5MiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
LSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1
ZGUgIkF1ZGlvRGVzdGluYXRpb25Ob2RlLmgiCi0KLSNpbmNsdWRlICJBdWRpb0J1cy5oIgotI2lu
Y2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0LmgiCi0jaW5j
bHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCi0jaW5jbHVkZSAiQXVkaW9VdGlsaXRpZXMuaCIKLSNp
bmNsdWRlICJEZW5vcm1hbERpc2FibGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAK
LUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpBdWRpb0Rlc3RpbmF0aW9uTm9kZShBdWRpb0NvbnRleHQq
IGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBBdWRpb05vZGUoY29udGV4dCwgc2Ft
cGxlUmF0ZSkKLSAgICAsIG1fY3VycmVudFNhbXBsZUZyYW1lKDApCi17Ci0gICAgYWRkSW5wdXQo
YWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7Ci0gICAgCi0gICAgc2V0Tm9kZVR5
cGUoTm9kZVR5cGVEZXN0aW5hdGlvbik7Ci19Ci0KLUF1ZGlvRGVzdGluYXRpb25Ob2RlOjp+QXVk
aW9EZXN0aW5hdGlvbk5vZGUoKQotewotICAgIHVuaW5pdGlhbGl6ZSgpOwotfQotCi0vLyBUaGUg
YXVkaW8gaGFyZHdhcmUgY2FsbHMgdXMgYmFjayBoZXJlIHRvIGdldHMgaXRzIGlucHV0IHN0cmVh
bS4KLXZvaWQgQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnByb3ZpZGVJbnB1dChBdWRpb0J1cyogZGVz
dGluYXRpb25CdXMsIHNpemVfdCBudW1iZXJPZkZyYW1lcykKLXsKLSAgICAvLyBXZSBkb24ndCB3
YW50IGRlbm9ybWFscyBzbG93aW5nIGRvd24gYW55IG9mIHRoZSBhdWRpbyBwcm9jZXNzaW5nCi0g
ICAgLy8gc2luY2UgdGhleSBjYW4gdmVyeSBzZXJpb3VzbHkgaHVydCBwZXJmb3JtYW5jZS4KLSAg
ICAvLyBUaGlzIHdpbGwgdGFrZSBjYXJlIG9mIGFsbCBBdWRpb05vZGVzIGJlY2F1c2UgdGhleSBh
bGwgcHJvY2VzcyB3aXRoaW4gdGhpcyBzY29wZS4KLSAgICBEZW5vcm1hbERpc2FibGVyIGRlbm9y
bWFsRGlzYWJsZXI7Ci0gICAgCi0gICAgY29udGV4dCgpLT5zZXRBdWRpb1RocmVhZChjdXJyZW50
VGhyZWFkKCkpOwotICAgIAotICAgIGlmICghY29udGV4dCgpLT5pc1J1bm5hYmxlKCkpIHsKLSAg
ICAgICAgZGVzdGluYXRpb25CdXMtPnplcm8oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIExldCB0aGUgY29udGV4dCB0YWtlIGNhcmUgb2YgYW55IGJ1c2luZXNzIGF0IHRoZSBz
dGFydCBvZiBlYWNoIHJlbmRlciBxdWFudHVtLgotICAgIGNvbnRleHQoKS0+aGFuZGxlUHJlUmVu
ZGVyVGFza3MoKTsKLQotICAgIC8vIFRoaXMgd2lsbCBjYXVzZSB0aGUgbm9kZShzKSBjb25uZWN0
ZWQgdG8gdXMgdG8gcHJvY2Vzcywgd2hpY2ggaW4gdHVybiB3aWxsIHB1bGwgb24gdGhlaXIgaW5w
dXQocyksCi0gICAgLy8gYWxsIHRoZSB3YXkgYmFja3dhcmRzIHRocm91Z2ggdGhlIHJlbmRlcmlu
ZyBncmFwaC4KLSAgICBBdWRpb0J1cyogcmVuZGVyZWRCdXMgPSBpbnB1dCgwKS0+cHVsbChkZXN0
aW5hdGlvbkJ1cywgbnVtYmVyT2ZGcmFtZXMpOwotICAgIAotICAgIGlmICghcmVuZGVyZWRCdXMp
Ci0gICAgICAgIGRlc3RpbmF0aW9uQnVzLT56ZXJvKCk7Ci0gICAgZWxzZSBpZiAocmVuZGVyZWRC
dXMgIT0gZGVzdGluYXRpb25CdXMpIHsKLSAgICAgICAgLy8gaW4tcGxhY2UgcHJvY2Vzc2luZyB3
YXMgbm90IHBvc3NpYmxlIC0gc28gY29weQotICAgICAgICBkZXN0aW5hdGlvbkJ1cy0+Y29weUZy
b20oKnJlbmRlcmVkQnVzKTsKLSAgICB9Ci0KLSAgICAvLyBMZXQgdGhlIGNvbnRleHQgdGFrZSBj
YXJlIG9mIGFueSBidXNpbmVzcyBhdCB0aGUgZW5kIG9mIGVhY2ggcmVuZGVyIHF1YW50dW0uCi0g
ICAgY29udGV4dCgpLT5oYW5kbGVQb3N0UmVuZGVyVGFza3MoKTsKLSAgICAKLSAgICAvLyBBZHZh
bmNlIGN1cnJlbnQgc2FtcGxlLWZyYW1lLgotICAgIG1fY3VycmVudFNhbXBsZUZyYW1lICs9IG51
bWJlck9mRnJhbWVzOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
TkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0
aW5hdGlvbk5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b0Rlc3RpbmF0aW9uTm9kZS5oCShyZXZpc2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY2ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEF1ZGlvRGVzdGluYXRpb25Ob2RlX2gKLSNkZWZp
bmUgQXVkaW9EZXN0aW5hdGlvbk5vZGVfaAotCi0jaW5jbHVkZSAiQXVkaW9CdWZmZXIuaCIKLSNp
bmNsdWRlICJBdWRpb05vZGUuaCIKLSNpbmNsdWRlICJBdWRpb1NvdXJjZVByb3ZpZGVyLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9CdXM7Ci1jbGFzcyBBdWRpb0NvbnRl
eHQ7Ci0gICAgCi1jbGFzcyBBdWRpb0Rlc3RpbmF0aW9uTm9kZSA6IHB1YmxpYyBBdWRpb05vZGUs
IHB1YmxpYyBBdWRpb1NvdXJjZVByb3ZpZGVyIHsKLXB1YmxpYzoKLSAgICBBdWRpb0Rlc3RpbmF0
aW9uTm9kZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKLSAgICB2aXJ0dWFsIH5B
dWRpb0Rlc3RpbmF0aW9uTm9kZSgpOwotICAgIAotICAgIC8vIEF1ZGlvTm9kZSAgIAotICAgIHZp
cnR1YWwgdm9pZCBwcm9jZXNzKHNpemVfdCkgeyB9OyAvLyB3ZSdyZSBwdWxsZWQgYnkgaGFyZHdh
cmUgc28gdGhpcyBpcyBuZXZlciBjYWxsZWQKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSB7IG1f
Y3VycmVudFNhbXBsZUZyYW1lID0gMDsgfTsKLSAgICAKLSAgICAvLyBUaGUgYXVkaW8gaGFyZHdh
cmUgY2FsbHMgaGVyZSBwZXJpb2RpY2FsbHkgdG8gZ2V0cyBpdHMgaW5wdXQgc3RyZWFtLgotICAg
IHZpcnR1YWwgdm9pZCBwcm92aWRlSW5wdXQoQXVkaW9CdXMqLCBzaXplX3QgbnVtYmVyT2ZGcmFt
ZXMpOwotCi0gICAgc2l6ZV90IGN1cnJlbnRTYW1wbGVGcmFtZSgpIHsgcmV0dXJuIG1fY3VycmVu
dFNhbXBsZUZyYW1lOyB9Ci0gICAgZG91YmxlIGN1cnJlbnRUaW1lKCkgeyByZXR1cm4gY3VycmVu
dFNhbXBsZUZyYW1lKCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KHNhbXBsZVJhdGUoKSk7IH0KLQot
ICAgIHZpcnR1YWwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscygpIGNvbnN0IHsgcmV0dXJuIDI7
IH0gLy8gRklYTUU6IHVwZGF0ZSB3aGVuIG11bHRpLWNoYW5uZWwgKG1vcmUgdGhhbiBzdGVyZW8p
IGlzIHN1cHBvcnRlZAotCi0gICAgdmlydHVhbCB2b2lkIHN0YXJ0UmVuZGVyaW5nKCkgPSAwOwot
ICAgIAotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQotCi0gICAgLy8gQ291bnRzIHRoZSBudW1iZXIgb2Yg
c2FtcGxlLWZyYW1lcyBwcm9jZXNzZWQgYnkgdGhlIGRlc3RpbmF0aW9uLgotICAgIHNpemVfdCBt
X2N1cnJlbnRTYW1wbGVGcmFtZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEF1ZGlvRGVzdGluYXRpb25Ob2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGwJKHJldmlzaW9uIDExMTIzMykKKysr
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGF1ZGlvIHsKLSAg
ICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCi0gICAgICAgIEpT
R2VuZXJhdGVUb0pTT2JqZWN0Ci0gICAgXSBBdWRpb0Rlc3RpbmF0aW9uTm9kZSA6IEF1ZGlvTm9k
ZSB7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIG51bWJlck9mQ2hhbm5lbHM7Ci0g
ICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvR2Fpbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvR2Fpbi5oCShyZXZpc2lvbiAx
MTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0dhaW4uaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBdWRpb0dhaW5faAotI2RlZmluZSBBdWRp
b0dhaW5faAotCi0jaW5jbHVkZSAiQXVkaW9QYXJhbS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9HYWluIDogcHVibGlj
IEF1ZGlvUGFyYW0gewotcHVibGljOiAgIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlvR2Fp
bj4gY3JlYXRlKGNvbnN0IGNoYXIqIG5hbWUsIGRvdWJsZSBkZWZhdWx0VmFsdWUsIGRvdWJsZSBt
aW5WYWx1ZSwgZG91YmxlIG1heFZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBBdWRpb0dhaW4obmFtZSwgZGVmYXVsdFZhbHVlLCBtaW5WYWx1ZSwgbWF4VmFsdWUpKTsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQXVkaW9HYWluKGNvbnN0IGNoYXIqIG5hbWUsIGRvdWJs
ZSBkZWZhdWx0VmFsdWUsIGRvdWJsZSBtaW5WYWx1ZSwgZG91YmxlIG1heFZhbHVlKQotICAgICAg
ICA6IEF1ZGlvUGFyYW0obmFtZSwgZGVmYXVsdFZhbHVlLCBtaW5WYWx1ZSwgbWF4VmFsdWUpCi0g
ICAgewotICAgIH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEF1
ZGlvUGFyYW1faApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9HYWluLmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0dhaW4uaWRsCShyZXZp
c2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0dhaW4uaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgYXVkaW8gewotICAgIGludGVy
ZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKLSAgICAgICAgSlNHZW5lcmF0
ZVRvSlNPYmplY3QKLSAgICBdIEF1ZGlvR2FpbiA6IEF1ZGlvUGFyYW0gewotICAgIH07Ci19Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmNwcAkocmV2aXNpb24g
MTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTE5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiQXVkaW9HYWluTm9k
ZS5oIgotCi0jaW5jbHVkZSAiQXVkaW9CdXMuaCIKLSNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5o
IgotI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LUF1ZGlvR2Fpbk5vZGU6OkF1ZGlvR2Fpbk5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9h
dCBzYW1wbGVSYXRlKQotICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCi0gICAg
LCBtX2xhc3RHYWluKDEuMCkKLSAgICAsIG1fc2FtcGxlQWNjdXJhdGVHYWluVmFsdWVzKEF1ZGlv
Tm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1lcykgLy8gRklYTUU6IGNhbiBwcm9iYWJseSBzaGFy
ZSB0ZW1wIGJ1ZmZlciBpbiBjb250ZXh0Ci17Ci0gICAgbV9nYWluID0gQXVkaW9HYWluOjpjcmVh
dGUoImdhaW4iLCAxLjAsIDAuMCwgMS4wKTsKLSAgICBtX2dhaW4tPnNldENvbnRleHQoY29udGV4
dCk7Ci0KLSAgICBhZGRJbnB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlSW5wdXQodGhpcykpKTsK
LSAgICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZU91dHB1dCh0aGlzLCAxKSkpOwot
ICAgIAotICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlR2Fpbik7Ci0gICAgCi0gICAgaW5pdGlhbGl6
ZSgpOwotfQotCi12b2lkIEF1ZGlvR2Fpbk5vZGU6OnByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJv
Y2VzcykKLXsKLSAgICAvLyBGSVhNRTogZm9yIHNvbWUgY2FzZXMgdGhlcmUgaXMgYSBuaWNlIG9w
dGltaXphdGlvbiB0byBhdm9pZCBwcm9jZXNzaW5nIGhlcmUsIGFuZCBsZXQgdGhlIGdhaW4gY2hh
bmdlCi0gICAgLy8gaGFwcGVuIGluIHRoZSBzdW1taW5nIGp1bmN0aW9uIGlucHV0IG9mIHRoZSBB
dWRpb05vZGUgd2UncmUgY29ubmVjdGVkIHRvLgotICAgIC8vIFRoZW4gd2UgY2FuIGF2b2lkIGFs
bCBvZiB0aGUgZm9sbG93aW5nOgotCi0gICAgQXVkaW9CdXMqIG91dHB1dEJ1cyA9IG91dHB1dCgw
KS0+YnVzKCk7Ci0gICAgQVNTRVJUKG91dHB1dEJ1cyk7Ci0KLSAgICBpZiAoIWlzSW5pdGlhbGl6
ZWQoKSB8fCAhaW5wdXQoMCktPmlzQ29ubmVjdGVkKCkpCi0gICAgICAgIG91dHB1dEJ1cy0+emVy
bygpOwotICAgIGVsc2UgewotICAgICAgICBBdWRpb0J1cyogaW5wdXRCdXMgPSBpbnB1dCgwKS0+
YnVzKCk7Ci0KLSAgICAgICAgaWYgKGdhaW4oKS0+aGFzVGltZWxpbmVWYWx1ZXMoKSkgewotICAg
ICAgICAgICAgLy8gQXBwbHkgc2FtcGxlLWFjY3VyYXRlIGdhaW4gc2NhbGluZyBmb3IgcHJlY2lz
ZSBlbnZlbG9wZXMsIGdyYWluIHdpbmRvd3MsIGV0Yy4KLSAgICAgICAgICAgIEFTU0VSVChmcmFt
ZXNUb1Byb2Nlc3MgPD0gbV9zYW1wbGVBY2N1cmF0ZUdhaW5WYWx1ZXMuc2l6ZSgpKTsKLSAgICAg
ICAgICAgIGlmIChmcmFtZXNUb1Byb2Nlc3MgPD0gbV9zYW1wbGVBY2N1cmF0ZUdhaW5WYWx1ZXMu
c2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQqIGdhaW5WYWx1ZXMgPSBtX3NhbXBsZUFj
Y3VyYXRlR2FpblZhbHVlcy5kYXRhKCk7Ci0gICAgICAgICAgICAgICAgZ2FpbigpLT5jYWxjdWxh
dGVTYW1wbGVBY2N1cmF0ZVZhbHVlcyhnYWluVmFsdWVzLCBmcmFtZXNUb1Byb2Nlc3MpOwotICAg
ICAgICAgICAgICAgIG91dHB1dEJ1cy0+Y29weVdpdGhTYW1wbGVBY2N1cmF0ZUdhaW5WYWx1ZXNG
cm9tKCppbnB1dEJ1cywgZ2FpblZhbHVlcywgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEFwcGx5IHRoZSBnYWluIHdpdGgg
ZGUtemlwcGVyaW5nIGludG8gdGhlIG91dHB1dCBidXMuCi0gICAgICAgICAgICBvdXRwdXRCdXMt
PmNvcHlXaXRoR2FpbkZyb20oKmlucHV0QnVzLCAmbV9sYXN0R2FpbiwgZ2FpbigpLT52YWx1ZSgp
KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBBdWRpb0dhaW5Ob2RlOjpyZXNldCgpCi17
Ci0gICAgLy8gU25hcCBkaXJlY3RseSB0byBkZXNpcmVkIGdhaW4uCi0gICAgbV9sYXN0R2FpbiA9
IGdhaW4oKS0+dmFsdWUoKTsKLX0KLQotLy8gRklYTUU6IHRoaXMgY2FuIGdvIGF3YXkgd2hlbiB3
ZSBkbyBtaXhpbmcgd2l0aCBnYWluIGRpcmVjdGx5IGluIHN1bW1pbmcganVuY3Rpb24gb2YgQXVk
aW9Ob2RlSW5wdXQKLS8vCi0vLyBBcyBzb29uIGFzIHdlIGtub3cgdGhlIGNoYW5uZWwgY291bnQg
b2Ygb3VyIGlucHV0LCB3ZSBjYW4gbGF6aWx5IGluaXRpYWxpemUuCi0vLyBTb21ldGltZXMgdGhp
cyBtYXkgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIHdpdGggZGlmZmVyZW50IGNoYW5uZWwgY291
bnRzLCBpbiB3aGljaCBjYXNlIHdlIG11c3Qgc2FmZWx5Ci0vLyB1bmluaXRpYWxpemUgYW5kIHRo
ZW4gcmUtaW5pdGlhbGl6ZSB3aXRoIHRoZSBuZXcgY2hhbm5lbCBjb3VudC4KLXZvaWQgQXVkaW9H
YWluTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQoQXVkaW9Ob2RlSW5wdXQqIGlu
cHV0KQotewotICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSAmJiBjb250ZXh0
KCktPmlzR3JhcGhPd25lcigpKTsKLQotICAgIEFTU0VSVChpbnB1dCAmJiBpbnB1dCA9PSB0aGlz
LT5pbnB1dCgwKSk7Ci0gICAgaWYgKGlucHV0ICE9IHRoaXMtPmlucHV0KDApKQotICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIAotICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMgPSBpbnB1dC0+
bnVtYmVyT2ZDaGFubmVscygpOyAgICAKLQotICAgIGlmIChpc0luaXRpYWxpemVkKCkgJiYgbnVt
YmVyT2ZDaGFubmVscyAhPSBvdXRwdXQoMCktPm51bWJlck9mQ2hhbm5lbHMoKSkgewotICAgICAg
ICAvLyBXZSdyZSBhbHJlYWR5IGluaXRpYWxpemVkIGJ1dCB0aGUgY2hhbm5lbCBjb3VudCBoYXMg
Y2hhbmdlZC4KLSAgICAgICAgdW5pbml0aWFsaXplKCk7Ci0gICAgfQotCi0gICAgaWYgKCFpc0lu
aXRpYWxpemVkKCkpIHsKLSAgICAgICAgLy8gVGhpcyB3aWxsIHByb3BhZ2F0ZSB0aGUgY2hhbm5l
bCBjb3VudCB0byBhbnkgbm9kZXMgY29ubmVjdGVkIGZ1cnRoZXIgZG93bnN0cmVhbSBpbiB0aGUg
Z3JhcGguCi0gICAgICAgIG91dHB1dCgwKS0+c2V0TnVtYmVyT2ZDaGFubmVscyhudW1iZXJPZkNo
YW5uZWxzKTsKLSAgICAgICAgaW5pdGlhbGl6ZSgpOwotICAgIH0KLQotICAgIEF1ZGlvTm9kZTo6
Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQoaW5wdXQpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaAkocmV2aXNpb24gMTExMjMzKQorKysgU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcx
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEF1ZGlvR2Fpbk5vZGVfaAotI2RlZmluZSBB
dWRpb0dhaW5Ob2RlX2gKLQotI2luY2x1ZGUgIkF1ZGlvR2Fpbi5oIgotI2luY2x1ZGUgIkF1ZGlv
Tm9kZS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvQ29udGV4dDsKLSAg
ICAKLS8vIEF1ZGlvR2Fpbk5vZGUgaXMgYW4gQXVkaW9Ob2RlIHdpdGggb25lIGlucHV0IGFuZCBv
bmUgb3V0cHV0IHdoaWNoIGFwcGxpZXMgYSBnYWluICh2b2x1bWUpIGNoYW5nZSB0byB0aGUgYXVk
aW8gc2lnbmFsLgotLy8gRGUtemlwcGVyaW5nIChzbW9vdGhpbmcpIGlzIGFwcGxpZWQgd2hlbiB0
aGUgZ2FpbiB2YWx1ZSBpcyBjaGFuZ2VkIGR5bmFtaWNhbGx5LgotCi1jbGFzcyBBdWRpb0dhaW5O
b2RlIDogcHVibGljIEF1ZGlvTm9kZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
QXVkaW9HYWluTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxl
UmF0ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVkaW9HYWluTm9kZShj
b250ZXh0LCBzYW1wbGVSYXRlKSk7ICAgICAgCi0gICAgfQotICAgIAotICAgIC8vIEF1ZGlvTm9k
ZQotICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwotICAg
IHZpcnR1YWwgdm9pZCByZXNldCgpOwotCi0gICAgLy8gQ2FsbGVkIGluIHRoZSBtYWluIHRocmVh
ZCB3aGVuIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgZm9yIHRoZSBpbnB1dCBtYXkgaGF2ZSBjaGFu
Z2VkLgotICAgIHZpcnR1YWwgdm9pZCBjaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1dChBdWRp
b05vZGVJbnB1dCopOwotCi0gICAgLy8gSmF2YVNjcmlwdCBpbnRlcmZhY2UKLSAgICBBdWRpb0dh
aW4qIGdhaW4oKSB7IHJldHVybiBtX2dhaW4uZ2V0KCk7IH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAotICAgIAotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGlt
ZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGRvdWJsZSBsYXRl
bmN5VGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KLQotICAgIEF1ZGlvR2Fpbk5v
ZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7Ci0KLSAgICBmbG9hdCBtX2xhc3RH
YWluOyAvLyBmb3IgZGUtemlwcGVyaW5nCi0gICAgUmVmUHRyPEF1ZGlvR2Fpbj4gbV9nYWluOwot
Ci0gICAgQXVkaW9GbG9hdEFycmF5IG1fc2FtcGxlQWNjdXJhdGVHYWluVmFsdWVzOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQXVkaW9HYWluTm9kZV9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmlkbAkocmV2aXNpb24gMTEx
MjMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBhdWRpbyB7Ci0g
ICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAotICAgICAgICBK
U0dlbmVyYXRlVG9KU09iamVjdAotICAgIF0gQXVkaW9HYWluTm9kZSA6IEF1ZGlvTm9kZSB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBldmVudHVhbGx5IGl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gcmVt
b3ZlIHRoZSByZWFkb25seSByZXN0cmljdGlvbiwgYnV0IG5lZWQgdG8gcHJvcGVybHkgZGVhbCB3
aXRoIHRocmVhZCBzYWZldHkgaGVyZS4KLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlv
R2FpbiBnYWluOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b0xpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b0xpc3RlbmVyLmNwcAkocmV2aXNpb24gMTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9MaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0g
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJB
dWRpb0xpc3RlbmVyLmgiCi0KLSNpbmNsdWRlICJBdWRpb0J1cy5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLUF1ZGlvTGlzdGVuZXI6OkF1ZGlvTGlzdGVuZXIoKQotICAgIDogbV9wb3NpdGlv
bigwLCAwLCAwKQotICAgICwgbV9vcmllbnRhdGlvbigwLCAwLCAtMSkKLSAgICAsIG1fdXBWZWN0
b3IoMCwgMSwgMCkKLSAgICAsIG1fdmVsb2NpdHkoMCwgMCwgMCkKLSAgICAsIG1fZG9wcGxlckZh
Y3RvcigxKQotICAgICwgbV9zcGVlZE9mU291bmQoMzQzLjMpCi17Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5oCShyZXZpc2lvbiAxMTEyMzMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
OTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgQXVkaW9MaXN0ZW5lcl9oCi0jZGVmaW5lIEF1ZGlvTGlzdGVu
ZXJfaAotCi0jaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLS8vIEF1ZGlvTGlzdGVuZXIgbWFpbnRhaW5zIHRoZSBzdGF0ZSBvZiB0aGUgbGlzdGVuZXIg
aW4gdGhlIGF1ZGlvIHNjZW5lIGFzIGRlZmluZWQgaW4gdGhlIE9wZW5BTCBzcGVjaWZpY2F0aW9u
LgotCi1jbGFzcyBBdWRpb0xpc3RlbmVyIDogcHVibGljIFJlZkNvdW50ZWQ8QXVkaW9MaXN0ZW5l
cj4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlvTGlzdGVuZXI+IGNyZWF0
ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvTGlzdGVuZXIoKSk7
Ci0gICAgfQotCi0gICAgLy8gUG9zaXRpb24KLSAgICB2b2lkIHNldFBvc2l0aW9uKGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IHopIHsgc2V0UG9zaXRpb24oRmxvYXRQb2ludDNEKHgsIHksIHopKTsg
fQotICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludDNEICZwb3NpdGlvbikgeyBt
X3Bvc2l0aW9uID0gcG9zaXRpb247IH0KLSAgICBjb25zdCBGbG9hdFBvaW50M0QmIHBvc2l0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQotCi0gICAgLy8gT3JpZW50YXRpb24KLSAg
ICB2b2lkIHNldE9yaWVudGF0aW9uKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHVw
WCwgZmxvYXQgdXBZLCBmbG9hdCB1cFopCi0gICAgewotICAgICAgICBzZXRPcmllbnRhdGlvbihG
bG9hdFBvaW50M0QoeCwgeSwgeikpOwotICAgICAgICBzZXRVcFZlY3RvcihGbG9hdFBvaW50M0Qo
dXBYLCB1cFksIHVwWikpOwotICAgIH0KLSAgICB2b2lkIHNldE9yaWVudGF0aW9uKGNvbnN0IEZs
b2F0UG9pbnQzRCAmb3JpZW50YXRpb24pIHsgbV9vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOyB9
Ci0gICAgY29uc3QgRmxvYXRQb2ludDNEJiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
b3JpZW50YXRpb247IH0KLQotICAgIC8vIFVwLXZlY3RvcgotICAgIHZvaWQgc2V0VXBWZWN0b3Io
Y29uc3QgRmxvYXRQb2ludDNEICZ1cFZlY3RvcikgeyBtX3VwVmVjdG9yID0gdXBWZWN0b3I7IH0K
LSAgICBjb25zdCBGbG9hdFBvaW50M0QmIHVwVmVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV91cFZl
Y3RvcjsgfQotCi0gICAgLy8gVmVsb2NpdHkKLSAgICB2b2lkIHNldFZlbG9jaXR5KGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IHopIHsgc2V0VmVsb2NpdHkoRmxvYXRQb2ludDNEKHgsIHksIHopKTsg
fQotICAgIHZvaWQgc2V0VmVsb2NpdHkoY29uc3QgRmxvYXRQb2ludDNEICZ2ZWxvY2l0eSkgeyBt
X3ZlbG9jaXR5ID0gdmVsb2NpdHk7IH0KLSAgICBjb25zdCBGbG9hdFBvaW50M0QmIHZlbG9jaXR5
KCkgY29uc3QgeyByZXR1cm4gbV92ZWxvY2l0eTsgfQotCi0gICAgLy8gRG9wcGxlciBmYWN0b3IK
LSAgICB2b2lkIHNldERvcHBsZXJGYWN0b3IoZG91YmxlIGRvcHBsZXJGYWN0b3IpIHsgbV9kb3Bw
bGVyRmFjdG9yID0gZG9wcGxlckZhY3RvcjsgfQotICAgIGRvdWJsZSBkb3BwbGVyRmFjdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9kb3BwbGVyRmFjdG9yOyB9Ci0KLSAgICAvLyBTcGVlZCBvZiBzb3Vu
ZAotICAgIHZvaWQgc2V0U3BlZWRPZlNvdW5kKGRvdWJsZSBzcGVlZE9mU291bmQpIHsgbV9zcGVl
ZE9mU291bmQgPSBzcGVlZE9mU291bmQ7IH0KLSAgICBkb3VibGUgc3BlZWRPZlNvdW5kKCkgY29u
c3QgeyByZXR1cm4gbV9zcGVlZE9mU291bmQ7IH0KLQotcHJpdmF0ZToKLSAgICBBdWRpb0xpc3Rl
bmVyKCk7Ci0KLSAgICAvLyBQb3NpdGlvbiAvIE9yaWVudGF0aW9uCi0gICAgRmxvYXRQb2ludDNE
IG1fcG9zaXRpb247Ci0gICAgRmxvYXRQb2ludDNEIG1fb3JpZW50YXRpb247Ci0gICAgRmxvYXRQ
b2ludDNEIG1fdXBWZWN0b3I7Ci0KLSAgICBGbG9hdFBvaW50M0QgbV92ZWxvY2l0eTsKLQotICAg
IGRvdWJsZSBtX2RvcHBsZXJGYWN0b3I7Ci0gICAgZG91YmxlIG1fc3BlZWRPZlNvdW5kOwotfTsK
LQotfSAvLyBXZWJDb3JlCi0KLSNlbmRpZiAvLyBBdWRpb0xpc3RlbmVyX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaWRsCShyZXZpc2lvbiAxMTEyMzMpCisr
KyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmlkbAkod29ya2luZyBjb3B5
KQpAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGF1ZGlvIHsKLSAgICBpbnRlcmZhY2UgWwotICAg
ICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8KLSAgICBdIEF1ZGlvTGlzdGVuZXIgewotICAgICAg
ICBhdHRyaWJ1dGUgZmxvYXQgZG9wcGxlckZhY3RvcjsgIC8vIHNhbWUgYXMgT3BlbkFMIChkZWZh
dWx0IDEuMCkKLSAgICAgICAgYXR0cmlidXRlIGZsb2F0IHNwZWVkT2ZTb3VuZDsgICAvLyBpbiBt
ZXRlcnMgLyBzZWNvbmQgKGRlZmF1bHQgMzQzLjMpCi0KLSAgICAgICAgdm9pZCBzZXRQb3NpdGlv
bihpbiBmbG9hdCB4LCBpbiBmbG9hdCB5LCBpbiBmbG9hdCB6KTsKLSAgICAgICAgdm9pZCBzZXRP
cmllbnRhdGlvbihpbiBmbG9hdCB4LCBpbiBmbG9hdCB5LCBpbiBmbG9hdCB6LCBpbiBmbG9hdCB4
VXAsIGluIGZsb2F0IHlVcCwgaW4gZmxvYXQgelVwKTsKLSAgICAgICAgdm9pZCBzZXRWZWxvY2l0
eShpbiBmbG9hdCB4LCBpbiBmbG9hdCB5LCBpbiBmbG9hdCB6KTsKLSAgICB9OwotfQpJbmRleDog
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGUuY3BwCShyZXZpc2lvbiAxMTEyMzMpCisrKyBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDM1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5B
QkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIkF1ZGlvTm9kZS5oIgotCi0jaW5jbHVkZSAiQXVk
aW9Db250ZXh0LmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlSW5wdXQuaCIKLSNpbmNsdWRlICJBdWRp
b05vZGVPdXRwdXQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSA8d3Rm
L0F0b21pY3MuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLUF1ZGlvTm9kZTo6QXVkaW9Ob2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxv
YXQgc2FtcGxlUmF0ZSkKLSAgICA6IG1faXNJbml0aWFsaXplZChmYWxzZSkKLSAgICAsIG1fbm9k
ZVR5cGUoTm9kZVR5cGVVbmtub3duKQotICAgICwgbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBt
X3NhbXBsZVJhdGUoc2FtcGxlUmF0ZSkKLSAgICAsIG1fbGFzdFByb2Nlc3NpbmdUaW1lKC0xLjAp
Ci0gICAgLCBtX25vcm1hbFJlZkNvdW50KDEpIC8vIHN0YXJ0IG91dCB3aXRoIG5vcm1hbCByZWZD
b3VudCA9PSAxIChsaWtlIFdURjo6UmVmQ291bnRlZCBjbGFzcykKLSAgICAsIG1fY29ubmVjdGlv
blJlZkNvdW50KDApCi0gICAgLCBtX2Rpc2FibGVkUmVmQ291bnQoMCkKLSAgICAsIG1faXNNYXJr
ZWRGb3JEZWxldGlvbihmYWxzZSkKLSAgICAsIG1faXNEaXNhYmxlZChmYWxzZSkKLXsKLSNpZiBE
RUJVR19BVURJT05PREVfUkVGRVJFTkNFUwotICAgIGlmICghc19pc05vZGVDb3VudEluaXRpYWxp
emVkKSB7Ci0gICAgICAgIHNfaXNOb2RlQ291bnRJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgICAg
IGF0ZXhpdChBdWRpb05vZGU6OnByaW50Tm9kZUNvdW50cyk7Ci0gICAgfQotI2VuZGlmCi19Ci0K
LUF1ZGlvTm9kZTo6fkF1ZGlvTm9kZSgpCi17Ci0jaWYgREVCVUdfQVVESU9OT0RFX1JFRkVSRU5D
RVMKLSAgICAtLXNfbm9kZUNvdW50W25vZGVUeXBlKCldOwotICAgIHByaW50ZigiJXA6ICVkOiBB
dWRpb05vZGU6On5BdWRpb05vZGUoKSAlZCAlZCAlZFxuIiwgdGhpcywgbm9kZVR5cGUoKSwgbV9u
b3JtYWxSZWZDb3VudCwgbV9jb25uZWN0aW9uUmVmQ291bnQsIG1fZGlzYWJsZWRSZWZDb3VudCk7
Ci0jZW5kaWYKLX0KLQotdm9pZCBBdWRpb05vZGU6OmluaXRpYWxpemUoKQotewotICAgIG1faXNJ
bml0aWFsaXplZCA9IHRydWU7Ci19Ci0KLXZvaWQgQXVkaW9Ob2RlOjp1bmluaXRpYWxpemUoKQot
ewotICAgIG1faXNJbml0aWFsaXplZCA9IGZhbHNlOwotfQotCi12b2lkIEF1ZGlvTm9kZTo6c2V0
Tm9kZVR5cGUoTm9kZVR5cGUgdHlwZSkKLXsKLSAgICBtX25vZGVUeXBlID0gdHlwZTsKLQotI2lm
IERFQlVHX0FVRElPTk9ERV9SRUZFUkVOQ0VTCi0gICAgKytzX25vZGVDb3VudFt0eXBlXTsKLSNl
bmRpZgotfQotCi12b2lkIEF1ZGlvTm9kZTo6bGF6eUluaXRpYWxpemUoKQotewotICAgIGlmICgh
aXNJbml0aWFsaXplZCgpKQotICAgICAgICBpbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgQXVkaW9O
b2RlOjphZGRJbnB1dChQYXNzT3duUHRyPEF1ZGlvTm9kZUlucHV0PiBpbnB1dCkKLXsKLSAgICBt
X2lucHV0cy5hcHBlbmQoaW5wdXQpOwotfQotCi12b2lkIEF1ZGlvTm9kZTo6YWRkT3V0cHV0KFBh
c3NPd25QdHI8QXVkaW9Ob2RlT3V0cHV0PiBvdXRwdXQpCi17Ci0gICAgbV9vdXRwdXRzLmFwcGVu
ZChvdXRwdXQpOwotfQotCi1BdWRpb05vZGVJbnB1dCogQXVkaW9Ob2RlOjppbnB1dCh1bnNpZ25l
ZCBpKQotewotICAgIGlmIChpIDwgbV9pbnB1dHMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gbV9p
bnB1dHNbaV0uZ2V0KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUF1ZGlvTm9kZU91dHB1dCogQXVk
aW9Ob2RlOjpvdXRwdXQodW5zaWduZWQgaSkKLXsKLSAgICBpZiAoaSA8IG1fb3V0cHV0cy5zaXpl
KCkpCi0gICAgICAgIHJldHVybiBtX291dHB1dHNbaV0uZ2V0KCk7Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLXZvaWQgQXVkaW9Ob2RlOjpjb25uZWN0KEF1ZGlvTm9kZSogZGVzdGluYXRpb24sIHVuc2ln
bmVkIG91dHB1dEluZGV4LCB1bnNpZ25lZCBpbnB1dEluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyAKLSAgICBBdWRpb0NvbnRleHQ6OkF1dG9M
b2NrZXIgbG9ja2VyKGNvbnRleHQoKSk7Ci0KLSAgICBpZiAoIWRlc3RpbmF0aW9uKSB7Ci0gICAg
ICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFNh
bml0eSBjaGVjayBpbnB1dCBhbmQgb3V0cHV0IGluZGljZXMuCi0gICAgaWYgKG91dHB1dEluZGV4
ID49IG51bWJlck9mT3V0cHV0cygpKSB7Ci0gICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZGVzdGluYXRpb24gJiYgaW5wdXRJbmRl
eCA+PSBkZXN0aW5hdGlvbi0+bnVtYmVyT2ZJbnB1dHMoKSkgewotICAgICAgICBlYyA9IElOREVY
X1NJWkVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGNvbnRleHQoKSAh
PSBkZXN0aW5hdGlvbi0+Y29udGV4dCgpKSB7Ci0gICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEF1ZGlvTm9kZUlucHV0KiBpbnB1dCA9IGRlc3Rp
bmF0aW9uLT5pbnB1dChpbnB1dEluZGV4KTsKLSAgICBBdWRpb05vZGVPdXRwdXQqIG91dHB1dCA9
IHRoaXMtPm91dHB1dChvdXRwdXRJbmRleCk7Ci0gICAgaW5wdXQtPmNvbm5lY3Qob3V0cHV0KTsK
LQotICAgIC8vIExldCBjb250ZXh0IGtub3cgdGhhdCBhIGNvbm5lY3Rpb24gaGFzIGJlZW4gbWFk
ZS4KLSAgICBjb250ZXh0KCktPmluY3JlbWVudENvbm5lY3Rpb25Db3VudCgpOwotfQotCi12b2lk
IEF1ZGlvTm9kZTo6ZGlzY29ubmVjdCh1bnNpZ25lZCBvdXRwdXRJbmRleCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBdWRpb0NvbnRleHQ6
OkF1dG9Mb2NrZXIgbG9ja2VyKGNvbnRleHQoKSk7Ci0KLSAgICAvLyBTYW5pdHkgY2hlY2sgaW5w
dXQgYW5kIG91dHB1dCBpbmRpY2VzLgotICAgIGlmIChvdXRwdXRJbmRleCA+PSBudW1iZXJPZk91
dHB1dHMoKSkgewotICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQgPSB0aGlzLT5vdXRwdXQob3V0
cHV0SW5kZXgpOwotICAgIG91dHB1dC0+ZGlzY29ubmVjdEFsbElucHV0cygpOwotfQotCi12b2lk
IEF1ZGlvTm9kZTo6cHJvY2Vzc0lmTmVjZXNzYXJ5KHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17
Ci0gICAgQVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgpKTsKLSAgICAKLSAgICBpZiAo
IWlzSW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRW5zdXJlIHRoYXQg
d2Ugb25seSBwcm9jZXNzIG9uY2UgcGVyIHJlbmRlcmluZyBxdWFudHVtLgotICAgIC8vIFRoaXMg
aGFuZGxlcyB0aGUgImZhbm91dCIgcHJvYmxlbSB3aGVyZSBhbiBvdXRwdXQgaXMgY29ubmVjdGVk
IHRvIG11bHRpcGxlIGlucHV0cy4KLSAgICAvLyBUaGUgZmlyc3QgdGltZSB3ZSdyZSBjYWxsZWQg
ZHVyaW5nIHRoaXMgdGltZSBzbGljZSB3ZSBwcm9jZXNzLCBidXQgYWZ0ZXIgdGhhdCB3ZSBkb24n
dCB3YW50IHRvIHJlLXByb2Nlc3MsCi0gICAgLy8gaW5zdGVhZCBvdXIgb3V0cHV0KHMpIHdpbGwg
YWxyZWFkeSBoYXZlIHRoZSByZXN1bHRzIGNhY2hlZCBpbiB0aGVpciBidXM7Ci0gICAgZG91Ymxl
IGN1cnJlbnRUaW1lID0gY29udGV4dCgpLT5jdXJyZW50VGltZSgpOwotICAgIGlmIChtX2xhc3RQ
cm9jZXNzaW5nVGltZSAhPSBjdXJyZW50VGltZSkgewotICAgICAgICBtX2xhc3RQcm9jZXNzaW5n
VGltZSA9IGN1cnJlbnRUaW1lOyAvLyBpbXBvcnRhbnQgdG8gZmlyc3QgdXBkYXRlIHRoaXMgdGlt
ZSBiZWNhdXNlIG9mIGZlZWRiYWNrIGxvb3BzIGluIHRoZSByZW5kZXJpbmcgZ3JhcGgKLSAgICAg
ICAgcHVsbElucHV0cyhmcmFtZXNUb1Byb2Nlc3MpOwotICAgICAgICBwcm9jZXNzKGZyYW1lc1Rv
UHJvY2Vzcyk7Ci0gICAgfQotfQotCi12b2lkIEF1ZGlvTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5u
ZWxzRm9ySW5wdXQoQXVkaW9Ob2RlSW5wdXQqIGlucHV0KQotewotICAgIEFTU0VSVChjb250ZXh0
KCktPmlzQXVkaW9UaHJlYWQoKSAmJiBjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKLQotICAg
IEFTU0VSVChtX2lucHV0cy5jb250YWlucyhpbnB1dCkpOwotICAgIGlmICghbV9pbnB1dHMuY29u
dGFpbnMoaW5wdXQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnB1dC0+dXBkYXRlSW50ZXJu
YWxCdXMoKTsKLX0KLQotdm9pZCBBdWRpb05vZGU6OnB1bGxJbnB1dHMoc2l6ZV90IGZyYW1lc1Rv
UHJvY2VzcykKLXsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkpOwotICAg
IAotICAgIC8vIFByb2Nlc3MgYWxsIG9mIHRoZSBBdWRpb05vZGVzIGNvbm5lY3RlZCB0byBvdXIg
aW5wdXRzLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2lucHV0cy5zaXplKCk7ICsr
aSkKLSAgICAgICAgaW5wdXQoaSktPnB1bGwoMCwgZnJhbWVzVG9Qcm9jZXNzKTsKLX0KLQotdm9p
ZCBBdWRpb05vZGU6OnJlZihSZWZUeXBlIHJlZlR5cGUpCi17Ci0gICAgc3dpdGNoIChyZWZUeXBl
KSB7Ci0gICAgY2FzZSBSZWZUeXBlTm9ybWFsOgotICAgICAgICBhdG9taWNJbmNyZW1lbnQoJm1f
bm9ybWFsUmVmQ291bnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJlZlR5cGVDb25uZWN0
aW9uOgotICAgICAgICBhdG9taWNJbmNyZW1lbnQoJm1fY29ubmVjdGlvblJlZkNvdW50KTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWZUeXBlRGlzYWJsZWQ6Ci0gICAgICAgIGF0b21pY0lu
Y3JlbWVudCgmbV9kaXNhYmxlZFJlZkNvdW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0jaWYgREVCVUdfQVVE
SU9OT0RFX1JFRkVSRU5DRVMKLSAgICBwcmludGYoIiVwOiAlZDogQXVkaW9Ob2RlOjpyZWYoJWQp
ICVkICVkICVkXG4iLCB0aGlzLCBub2RlVHlwZSgpLCByZWZUeXBlLCBtX25vcm1hbFJlZkNvdW50
LCBtX2Nvbm5lY3Rpb25SZWZDb3VudCwgbV9kaXNhYmxlZFJlZkNvdW50KTsKLSNlbmRpZgotCi0g
ICAgLy8gU2VlIHRoZSBkaXNhYmxpbmcgY29kZSBpbiBmaW5pc2hEZXJlZigpIGJlbG93LiBUaGlz
IGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgYSBub2RlCi0gICAgLy8gaXMgYmVpbmcgcmUtY29ubmVj
dGVkIGFmdGVyIGJlaW5nIHVzZWQgYXQgbGVhc3Qgb25jZSBhbmQgZGlzY29ubmVjdGVkLgotICAg
IC8vIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byByZS1lbmFibGUuCi0gICAgaWYgKG1faXNEaXNh
YmxlZCAmJiBtX2Nvbm5lY3Rpb25SZWZDb3VudCA+IDAgJiYgcmVmVHlwZSA9PSBSZWZUeXBlQ29u
bmVjdGlvbikgewotICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgICAgICBBdWRp
b0NvbnRleHQ6OkF1dG9Mb2NrZXIgbG9ja2VyKGNvbnRleHQoKSk7Ci0KLSAgICAgICAgbV9pc0Rp
c2FibGVkID0gZmFsc2U7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX291dHB1
dHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBvdXRwdXQoaSktPmVuYWJsZSgpOwotICAgIH0K
LX0KLQotdm9pZCBBdWRpb05vZGU6OmRlcmVmKFJlZlR5cGUgcmVmVHlwZSkKLXsKLSAgICAvLyBU
aGUgYWN0dWFsbHkgd29yayBmb3IgZGVyZWYgaGFwcGVucyBjb21wbGV0ZWx5IHdpdGhpbiB0aGUg
YXVkaW8gY29udGV4dCdzIGdyYXBoIGxvY2suCi0gICAgLy8gSW4gdGhlIGNhc2Ugb2YgdGhlIGF1
ZGlvIHRocmVhZCwgd2UgbXVzdCB1c2UgYSB0cnlMb2NrIHRvIGF2b2lkIGdsaXRjaGVzLgotICAg
IGJvb2wgaGFzTG9jayA9IGZhbHNlOwotICAgIGJvb2wgbXVzdFJlbGVhc2VMb2NrID0gZmFsc2U7
Ci0gICAgCi0gICAgaWYgKGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgpKSB7Ci0gICAgICAgIC8v
IFJlYWwtdGltZSBhdWRpbyB0aHJlYWQgbXVzdCBub3QgY29udGVuZCBsb2NrICh0byBhdm9pZCBn
bGl0Y2hlcykuCi0gICAgICAgIGhhc0xvY2sgPSBjb250ZXh0KCktPnRyeUxvY2sobXVzdFJlbGVh
c2VMb2NrKTsKLSAgICB9IGVsc2UgewotICAgICAgICBjb250ZXh0KCktPmxvY2sobXVzdFJlbGVh
c2VMb2NrKTsKLSAgICAgICAgaGFzTG9jayA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmICho
YXNMb2NrKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgZGVyZWYgd29yayBo
YXBwZW5zLgotICAgICAgICBmaW5pc2hEZXJlZihyZWZUeXBlKTsKLQotICAgICAgICBpZiAobXVz
dFJlbGVhc2VMb2NrKQotICAgICAgICAgICAgY29udGV4dCgpLT51bmxvY2soKTsKLSAgICB9IGVs
c2UgewotICAgICAgICAvLyBXZSB3ZXJlIHVuYWJsZSB0byBnZXQgdGhlIGxvY2ssIHNvIHB1dCB0
aGlzIGluIGEgbGlzdCB0byBmaW5pc2ggdXAgbGF0ZXIuCi0gICAgICAgIEFTU0VSVChjb250ZXh0
KCktPmlzQXVkaW9UaHJlYWQoKSk7Ci0gICAgICAgIGNvbnRleHQoKS0+YWRkRGVmZXJyZWRGaW5p
c2hEZXJlZih0aGlzLCByZWZUeXBlKTsKLSAgICB9Ci0KLSAgICAvLyBPbmNlIEF1ZGlvQ29udGV4
dDo6dW5pbml0aWFsaXplKCkgaXMgY2FsbGVkIHRoZXJlJ3Mgbm8gbW9yZSBjaGFuY2VzIGZvciBk
ZWxldGVNYXJrZWROb2RlcygpIHRvIGdldCBjYWxsZWQsIHNvIHdlIGNhbGwgaGVyZS4KLSAgICAv
LyBXZSBjYW4ndCBjYWxsIGluIEF1ZGlvQ29udGV4dDo6fkF1ZGlvQ29udGV4dCgpIHNpbmNlIGl0
IHdpbGwgbmV2ZXIgYmUgY2FsbGVkIGFzIGxvbmcgYXMgYW55IEF1ZGlvTm9kZSBpcyBhbGl2ZQot
ICAgIC8vIGJlY2F1c2UgQXVkaW9Ob2RlcyBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBjb250ZXh0
LgotICAgIGlmIChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWRGaW5pc2hlZCgpKQotICAgICAgICBj
b250ZXh0KCktPmRlbGV0ZU1hcmtlZE5vZGVzKCk7Ci19Ci0KLXZvaWQgQXVkaW9Ob2RlOjpmaW5p
c2hEZXJlZihSZWZUeXBlIHJlZlR5cGUpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQoKS0+aXNHcmFw
aE93bmVyKCkpOwotICAgIAotICAgIHN3aXRjaCAocmVmVHlwZSkgewotICAgIGNhc2UgUmVmVHlw
ZU5vcm1hbDoKLSAgICAgICAgQVNTRVJUKG1fbm9ybWFsUmVmQ291bnQgPiAwKTsKLSAgICAgICAg
YXRvbWljRGVjcmVtZW50KCZtX25vcm1hbFJlZkNvdW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBSZWZUeXBlQ29ubmVjdGlvbjoKLSAgICAgICAgQVNTRVJUKG1fY29ubmVjdGlvblJlZkNv
dW50ID4gMCk7Ci0gICAgICAgIGF0b21pY0RlY3JlbWVudCgmbV9jb25uZWN0aW9uUmVmQ291bnQp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJlZlR5cGVEaXNhYmxlZDoKLSAgICAgICAgQVNT
RVJUKG1fZGlzYWJsZWRSZWZDb3VudCA+IDApOwotICAgICAgICBhdG9taWNEZWNyZW1lbnQoJm1f
ZGlzYWJsZWRSZWZDb3VudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICAKLSNpZiBERUJVR19BVURJT05PREVf
UkVGRVJFTkNFUwotICAgIHByaW50ZigiJXA6ICVkOiBBdWRpb05vZGU6OmRlcmVmKCVkKSAlZCAl
ZCAlZFxuIiwgdGhpcywgbm9kZVR5cGUoKSwgcmVmVHlwZSwgbV9ub3JtYWxSZWZDb3VudCwgbV9j
b25uZWN0aW9uUmVmQ291bnQsIG1fZGlzYWJsZWRSZWZDb3VudCk7Ci0jZW5kaWYKLQotICAgIGlm
ICghbV9jb25uZWN0aW9uUmVmQ291bnQpIHsKLSAgICAgICAgaWYgKCFtX25vcm1hbFJlZkNvdW50
ICYmICFtX2Rpc2FibGVkUmVmQ291bnQpIHsKLSAgICAgICAgICAgIGlmICghbV9pc01hcmtlZEZv
ckRlbGV0aW9uKSB7Ci0gICAgICAgICAgICAgICAgLy8gQWxsIHJlZmVyZW5jZXMgYXJlIGdvbmUg
LSB3ZSBuZWVkIHRvIGdvIGF3YXkuCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fb3V0cHV0cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0
KGkpLT5kaXNjb25uZWN0QWxsSW5wdXRzKCk7IC8vIHRoaXMgd2lsbCBkZXJlZigpIG5vZGVzIHdl
J3JlIGNvbm5lY3RlZCB0by4uLgotCi0gICAgICAgICAgICAgICAgLy8gTWFyayBmb3IgZGVsZXRp
b24gYXQgZW5kIG9mIGVhY2ggcmVuZGVyIHF1YW50dW0gb3Igd2hlbiBjb250ZXh0IHNodXRzIGRv
d24uCi0gICAgICAgICAgICAgICAgY29udGV4dCgpLT5tYXJrRm9yRGVsZXRpb24odGhpcyk7Ci0g
ICAgICAgICAgICAgICAgbV9pc01hcmtlZEZvckRlbGV0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIGlmIChyZWZUeXBlID09IFJlZlR5cGVDb25uZWN0aW9uKSB7Ci0g
ICAgICAgICAgICBpZiAoIW1faXNEaXNhYmxlZCkgewotICAgICAgICAgICAgICAgIC8vIFN0aWxs
IG1heSBoYXZlIEphdmFTY3JpcHQgcmVmZXJlbmNlcywgYnV0IG5vIG1vcmUgImFjdGl2ZSIgY29u
bmVjdGlvbiByZWZlcmVuY2VzLCBzbyBwdXQgYWxsIG9mIG91ciBvdXRwdXRzIGluIGEgImRvcm1h
bnQiIGRpc2FibGVkIHN0YXRlLgotICAgICAgICAgICAgICAgIC8vIEdhcmJhZ2UgY29sbGVjdGlv
biBtYXkgdGFrZSBhIHZlcnkgbG9uZyB0aW1lIGFmdGVyIHRoaXMgdGltZSwgc28gdGhlICJkb3Jt
YW50IiBkaXNhYmxlZCBub2RlcyBzaG91bGQgbm90IGJvZyBkb3duIHRoZSByZW5kZXJpbmcuLi4K
LQotICAgICAgICAgICAgICAgIC8vIEFzIGZhciBhcyBKYXZhU2NyaXB0IGlzIGNvbmNlcm5lZCwg
b3VyIG91dHB1dHMgbXVzdCBzdGlsbCBhcHBlYXIgdG8gYmUgY29ubmVjdGVkLgotICAgICAgICAg
ICAgICAgIC8vIEJ1dCBpbnRlcm5hbGx5IG91ciBvdXRwdXRzIHNob3VsZCBiZSBkaXNhYmxlZCBm
cm9tIHRoZSBpbnB1dHMgdGhleSdyZSBjb25uZWN0ZWQgdG8uCi0gICAgICAgICAgICAgICAgLy8g
ZGlzYWJsZSgpIGNhbiByZWN1cnNpdmVseSBkZXJlZiBjb25uZWN0aW9ucyAoYW5kIGNhbGwgZGlz
YWJsZSgpKSBkb3duIGEgd2hvbGUgY2hhaW4gb2YgY29ubmVjdGVkIG5vZGVzLgotCi0gICAgICAg
ICAgICAgICAgLy8gRklYTUU6IHdlIHNwZWNpYWwgY2FzZSB0aGUgY29udm9sdmVyIGFuZCBkZWxh
eSBzaW5jZSB0aGV5IGhhdmUgYSBzaWduaWZpY2FudCB0YWlsLXRpbWUgYW5kIHNob3VsZG4ndCBi
ZSBkaXNjb25uZWN0ZWQgc2ltcGx5Ci0gICAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGV5IG5v
IGxvbmdlciBoYXZlIGFueSBpbnB1dCBjb25uZWN0aW9ucy4gIFRoaXMgbmVlZHMgdG8gYmUgaGFu
ZGxlZCBtb3JlIGdlbmVyYWxseSB3aGVyZSBBdWRpb05vZGVzIGhhdmUKLSAgICAgICAgICAgICAg
ICAvLyBhIHRhaWxUaW1lIGF0dHJpYnV0ZS4gIFRoZW4gdGhlIEF1ZGlvTm9kZSBvbmx5IG5lZWRz
IHRvIHJlbWFpbiAiYWN0aXZlIiBmb3IgdGFpbFRpbWUgc2Vjb25kcyBhZnRlciB0aGVyZSBhcmUg
bm8KLSAgICAgICAgICAgICAgICAvLyBsb25nZXIgYW55IGFjdGl2ZSBjb25uZWN0aW9ucy4KLSAg
ICAgICAgICAgICAgICBpZiAobm9kZVR5cGUoKSAhPSBOb2RlVHlwZUNvbnZvbHZlciAmJiBub2Rl
VHlwZSgpICE9IE5vZGVUeXBlRGVsYXkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9pc0Rpc2Fi
bGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fb3V0cHV0cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dChp
KS0+ZGlzYWJsZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLX0KLQotI2lmIERFQlVHX0FVRElPTk9ERV9SRUZFUkVOQ0VTCi0KLWJvb2wgQXVk
aW9Ob2RlOjpzX2lzTm9kZUNvdW50SW5pdGlhbGl6ZWQgPSBmYWxzZTsKLWludCBBdWRpb05vZGU6
OnNfbm9kZUNvdW50W05vZGVUeXBlRW5kXTsKLQotdm9pZCBBdWRpb05vZGU6OnByaW50Tm9kZUNv
dW50cygpCi17Ci0gICAgcHJpbnRmKCJcblxuIik7Ci0gICAgcHJpbnRmKCI9PT09PT09PT09PT09
PT09PT09PT09PT09PT1cbiIpOwotICAgIHByaW50ZigiQXVkaW9Ob2RlOiByZWZlcmVuY2UgY291
bnRzXG4iKTsKLSAgICBwcmludGYoIj09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTm9kZVR5cGVFbmQ7ICsraSkKLSAgICAgICAg
cHJpbnRmKCIlZDogJWRcbiIsIGksIHNfbm9kZUNvdW50W2ldKTsKLQotICAgIHByaW50ZigiPT09
PT09PT09PT09PT09PT09PT09PT09PT09XG5cblxuIik7Ci19Ci0KLSNlbmRpZiAvLyBERUJVR19B
VURJT05PREVfUkVGRVJFTkNFUwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9O
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlLmgJ
KHJldmlzaW9uIDExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBB
dWRpb05vZGVfaAotI2RlZmluZSBBdWRpb05vZGVfaAotCi0jaW5jbHVkZSA8d3RmL093blB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotI2RlZmluZSBERUJVR19BVURJT05PREVfUkVGRVJF
TkNFUyAwCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9Db250ZXh0OwotY2xh
c3MgQXVkaW9Ob2RlSW5wdXQ7Ci1jbGFzcyBBdWRpb05vZGVPdXRwdXQ7Ci0KLXR5cGVkZWYgaW50
IEV4Y2VwdGlvbkNvZGU7Ci0KLS8vIEFuIEF1ZGlvTm9kZSBpcyB0aGUgYmFzaWMgYnVpbGRpbmcg
YmxvY2sgZm9yIGhhbmRsaW5nIGF1ZGlvIHdpdGhpbiBhbiBBdWRpb0NvbnRleHQuCi0vLyBJdCBt
YXkgYmUgYW4gYXVkaW8gc291cmNlLCBhbiBpbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBtb2R1bGUs
IG9yIGFuIGF1ZGlvIGRlc3RpbmF0aW9uLgotLy8gRWFjaCBBdWRpb05vZGUgY2FuIGhhdmUgaW5w
dXRzIGFuZC9vciBvdXRwdXRzLiBBbiBBdWRpb1NvdXJjZU5vZGUgaGFzIG5vIGlucHV0cyBhbmQg
YSBzaW5nbGUgb3V0cHV0LgotLy8gQW4gQXVkaW9EZXN0aW5hdGlvbk5vZGUgaGFzIG9uZSBpbnB1
dCBhbmQgbm8gb3V0cHV0cyBhbmQgcmVwcmVzZW50cyB0aGUgZmluYWwgZGVzdGluYXRpb24gdG8g
dGhlIGF1ZGlvIGhhcmR3YXJlLgotLy8gTW9zdCBwcm9jZXNzaW5nIG5vZGVzIHN1Y2ggYXMgZmls
dGVycyB3aWxsIGhhdmUgb25lIGlucHV0IGFuZCBvbmUgb3V0cHV0LCBhbHRob3VnaCBtdWx0aXBs
ZSBpbnB1dHMgYW5kIG91dHB1dHMgYXJlIHBvc3NpYmxlLgotCi1jbGFzcyBBdWRpb05vZGUgewot
cHVibGljOgotICAgIGVudW0geyBQcm9jZXNzaW5nU2l6ZUluRnJhbWVzID0gMTI4IH07Ci0KLSAg
ICBBdWRpb05vZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7Ci0gICAgdmlydHVh
bCB+QXVkaW9Ob2RlKCk7Ci0KLSAgICBBdWRpb0NvbnRleHQqIGNvbnRleHQoKSB7IHJldHVybiBt
X2NvbnRleHQuZ2V0KCk7IH0KLQotICAgIGVudW0gTm9kZVR5cGUgewotICAgICAgICBOb2RlVHlw
ZVVua25vd24sCi0gICAgICAgIE5vZGVUeXBlRGVzdGluYXRpb24sCi0gICAgICAgIE5vZGVUeXBl
QXVkaW9CdWZmZXJTb3VyY2UsCi0gICAgICAgIE5vZGVUeXBlTWVkaWFFbGVtZW50QXVkaW9Tb3Vy
Y2UsCi0gICAgICAgIE5vZGVUeXBlSmF2YVNjcmlwdCwKLSAgICAgICAgTm9kZVR5cGVCaXF1YWRG
aWx0ZXIsCi0gICAgICAgIE5vZGVUeXBlTG93UGFzczJGaWx0ZXIsCi0gICAgICAgIE5vZGVUeXBl
SGlnaFBhc3MyRmlsdGVyLAotICAgICAgICBOb2RlVHlwZVBhbm5lciwKLSAgICAgICAgTm9kZVR5
cGVDb252b2x2ZXIsCi0gICAgICAgIE5vZGVUeXBlRGVsYXksCi0gICAgICAgIE5vZGVUeXBlR2Fp
biwKLSAgICAgICAgTm9kZVR5cGVDaGFubmVsU3BsaXR0ZXIsCi0gICAgICAgIE5vZGVUeXBlQ2hh
bm5lbE1lcmdlciwKLSAgICAgICAgTm9kZVR5cGVBbmFseXNlciwKLSAgICAgICAgTm9kZVR5cGVE
eW5hbWljc0NvbXByZXNzb3IsCi0gICAgICAgIE5vZGVUeXBlV2F2ZVNoYXBlciwKLSAgICAgICAg
Tm9kZVR5cGVFbmQKLSAgICB9OwotCi0gICAgTm9kZVR5cGUgbm9kZVR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX25vZGVUeXBlOyB9Ci0gICAgdm9pZCBzZXROb2RlVHlwZShOb2RlVHlwZSk7Ci0KLSAg
ICAvLyBXZSBoYW5kbGUgb3VyIG93biByZWYtY291bnRpbmcgYmVjYXVzZSBvZiB0aGUgdGhyZWFk
aW5nIGlzc3VlcyBhbmQgc3VidGxlIG5hdHVyZSBvZgotICAgIC8vIGhvdyBBdWRpb05vZGVzIGNh
biBjb250aW51ZSBwcm9jZXNzaW5nIChwbGF5aW5nIG9uZS1zaG90IHNvdW5kKSBhZnRlciB0aGVy
ZSBhcmUgbm8gbW9yZQotICAgIC8vIEphdmFTY3JpcHQgcmVmZXJlbmNlcyB0byB0aGUgb2JqZWN0
LgotICAgIGVudW0gUmVmVHlwZSB7IFJlZlR5cGVOb3JtYWwsIFJlZlR5cGVDb25uZWN0aW9uLCBS
ZWZUeXBlRGlzYWJsZWQgfTsKLQotICAgIC8vIENhbiBiZSBjYWxsZWQgZnJvbSBtYWluIHRocmVh
ZCBvciBjb250ZXh0J3MgYXVkaW8gdGhyZWFkLgotICAgIHZvaWQgcmVmKFJlZlR5cGUgcmVmVHlw
ZSA9IFJlZlR5cGVOb3JtYWwpOwotICAgIHZvaWQgZGVyZWYoUmVmVHlwZSByZWZUeXBlID0gUmVm
VHlwZU5vcm1hbCk7Ci0KLSAgICAvLyBDYW4gYmUgY2FsbGVkIGZyb20gbWFpbiB0aHJlYWQgb3Ig
Y29udGV4dCdzIGF1ZGlvIHRocmVhZC4gIEl0IG11c3QgYmUgY2FsbGVkIHdoaWxlIHRoZSBjb250
ZXh0J3MgZ3JhcGggbG9jayBpcyBoZWxkLgotICAgIHZvaWQgZmluaXNoRGVyZWYoUmVmVHlwZSBy
ZWZUeXBlKTsKLQotICAgIC8vIFRoZSBBdWRpb05vZGVJbnB1dChzKSAoaWYgYW55KSB3aWxsIGFs
cmVhZHkgaGF2ZSB0aGVpciBpbnB1dCBkYXRhIGF2YWlsYWJsZSB3aGVuIHByb2Nlc3MoKSBpcyBj
YWxsZWQuCi0gICAgLy8gU3ViY2xhc3NlcyB3aWxsIHRha2UgdGhpcyBpbnB1dCBkYXRhIGFuZCBw
dXQgdGhlIHJlc3VsdHMgaW4gdGhlIEF1ZGlvQnVzKHMpIG9mIGl0cyBBdWRpb05vZGVPdXRwdXQo
cykgKGlmIGFueSkuCi0gICAgLy8gQ2FsbGVkIGZyb20gY29udGV4dCdzIGF1ZGlvIHRocmVhZC4K
LSAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKSA9IDA7Ci0K
LSAgICAvLyBSZXNldHMgRFNQIHByb2Nlc3Npbmcgc3RhdGUgKGNsZWFycyBkZWxheSBsaW5lcywg
ZmlsdGVyIG1lbW9yeSwgZXRjLikKLSAgICAvLyBDYWxsZWQgZnJvbSBjb250ZXh0J3MgYXVkaW8g
dGhyZWFkLgotICAgIHZpcnR1YWwgdm9pZCByZXNldCgpID0gMDsKLQotICAgIC8vIE5vIHNpZ25p
ZmljYW50IHJlc291cmNlcyBzaG91bGQgYmUgYWxsb2NhdGVkIHVudGlsIGluaXRpYWxpemUoKSBp
cyBjYWxsZWQuCi0gICAgLy8gUHJvY2Vzc2luZyBtYXkgbm90IG9jY3VyIHVudGlsIGEgbm9kZSBp
cyBpbml0aWFsaXplZC4KLSAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpOwotICAgIHZpcnR1
YWwgdm9pZCB1bmluaXRpYWxpemUoKTsKLQotICAgIGJvb2wgaXNJbml0aWFsaXplZCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNJbml0aWFsaXplZDsgfQotICAgIHZvaWQgbGF6eUluaXRpYWxpemUoKTsK
LQotICAgIHVuc2lnbmVkIG51bWJlck9mSW5wdXRzKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dHMu
c2l6ZSgpOyB9Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRzKCkgY29uc3QgeyByZXR1cm4g
bV9vdXRwdXRzLnNpemUoKTsgfQotCi0gICAgQXVkaW9Ob2RlSW5wdXQqIGlucHV0KHVuc2lnbmVk
KTsKLSAgICBBdWRpb05vZGVPdXRwdXQqIG91dHB1dCh1bnNpZ25lZCk7Ci0KLSAgICAvLyBDYWxs
ZWQgZnJvbSBtYWluIHRocmVhZCBieSBjb3JyZXNwb25kaW5nIEphdmFTY3JpcHQgbWV0aG9kcy4K
LSAgICB2b2lkIGNvbm5lY3QoQXVkaW9Ob2RlKiwgdW5zaWduZWQgb3V0cHV0SW5kZXgsIHVuc2ln
bmVkIGlucHV0SW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGRpc2Nvbm5lY3QodW5z
aWduZWQgb3V0cHV0SW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgZmxvYXQg
c2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlUmF0ZTsgfQotCi0gICAgLy8gcHJv
Y2Vzc0lmTmVjZXNzYXJ5KCkgaXMgY2FsbGVkIGJ5IG91ciBvdXRwdXQocykgd2hlbiB0aGUgcmVu
ZGVyaW5nIGdyYXBoIG5lZWRzIHRoaXMgQXVkaW9Ob2RlIHRvIHByb2Nlc3MuCi0gICAgLy8gVGhp
cyBtZXRob2QgZW5zdXJlcyB0aGF0IHRoZSBBdWRpb05vZGUgd2lsbCBvbmx5IHByb2Nlc3Mgb25j
ZSBwZXIgcmVuZGVyaW5nIHRpbWUgcXVhbnR1bSBldmVuIGlmIGl0J3MgY2FsbGVkIHJlcGVhdGVk
bHkuCi0gICAgLy8gVGhpcyBoYW5kbGVzIHRoZSBjYXNlIG9mICJmYW5vdXQiIHdoZXJlIGFuIG91
dHB1dCBpcyBjb25uZWN0ZWQgdG8gbXVsdGlwbGUgQXVkaW9Ob2RlIGlucHV0cy4KLSAgICAvLyBD
YWxsZWQgZnJvbSBjb250ZXh0J3MgYXVkaW8gdGhyZWFkLgotICAgIHZvaWQgcHJvY2Vzc0lmTmVj
ZXNzYXJ5KHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwotCi0gICAgLy8gQ2FsbGVkIHdoZW4gYSBu
ZXcgY29ubmVjdGlvbiBoYXMgYmVlbiBtYWRlIHRvIG9uZSBvZiBvdXIgaW5wdXRzIG9yIHRoZSBj
b25uZWN0aW9uIG51bWJlciBvZiBjaGFubmVscyBoYXMgY2hhbmdlZC4KLSAgICAvLyBUaGlzIHBv
dGVudGlhbGx5IGdpdmVzIHVzIGVub3VnaCBpbmZvcm1hdGlvbiB0byBwZXJmb3JtIGEgbGF6eSBp
bml0aWFsaXphdGlvbiBvciwgaWYgbmVjZXNzYXJ5LCBhIHJlLWluaXRpYWxpemF0aW9uLgotICAg
IC8vIENhbGxlZCBmcm9tIG1haW4gdGhyZWFkLgotICAgIHZpcnR1YWwgdm9pZCBjaGVja051bWJl
ck9mQ2hhbm5lbHNGb3JJbnB1dChBdWRpb05vZGVJbnB1dCopOwotCi0jaWYgREVCVUdfQVVESU9O
T0RFX1JFRkVSRU5DRVMKLSAgICBzdGF0aWMgdm9pZCBwcmludE5vZGVDb3VudHMoKTsKLSNlbmRp
ZgotCi0gICAgYm9vbCBpc01hcmtlZEZvckRlbGV0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc01h
cmtlZEZvckRlbGV0aW9uOyB9Ci0KLSAgICAvLyB0YWlsVGltZSgpIGlzIHRoZSBsZW5ndGggb2Yg
dGltZSAobm90IGNvdW50aW5nIGxhdGVuY3kgdGltZSkgd2hlcmUgbm9uLXplcm8gb3V0cHV0IG1h
eSBvY2N1ciBhZnRlciBjb250aW51b3VzIHNpbGVudCBpbnB1dC4KLSAgICB2aXJ0dWFsIGRvdWJs
ZSB0YWlsVGltZSgpIGNvbnN0ID0gMDsKLSAgICAvLyBsYXRlbmN5VGltZSgpIGlzIHRoZSBsZW5n
dGggb2YgdGltZSBpdCB0YWtlcyBmb3Igbm9uLXplcm8gb3V0cHV0IHRvIGFwcGVhciBhZnRlciBu
b24temVybyBpbnB1dCBpcyBwcm92aWRlZC4gVGhpcyBvbmx5IGFwcGxpZXMgdG8KLSAgICAvLyBw
cm9jZXNzaW5nIGRlbGF5IHdoaWNoIGlzIGFuIGFydGlmYWN0IG9mIHRoZSBwcm9jZXNzaW5nIGFs
Z29yaXRobSBjaG9zZW4gYW5kIGlzICpub3QqIHBhcnQgb2YgdGhlIGludHJpbnNpYyBkZXNpcmVk
IGVmZmVjdC4gRm9yIAotICAgIC8vIGV4YW1wbGUsIGEgImRlbGF5IiBlZmZlY3QgaXMgZXhwZWN0
ZWQgdG8gZGVsYXkgdGhlIHNpZ25hbCwgYW5kIHRodXMgd291bGQgbm90IGJlIGNvbnNpZGVyZWQg
bGF0ZW5jeS4KLSAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0ID0gMDsKLQot
cHJvdGVjdGVkOgotICAgIC8vIElucHV0cyBhbmQgb3V0cHV0cyBtdXN0IGJlIGNyZWF0ZWQgYmVm
b3JlIHRoZSBBdWRpb05vZGUgaXMgaW5pdGlhbGl6ZWQuCi0gICAgdm9pZCBhZGRJbnB1dChQYXNz
T3duUHRyPEF1ZGlvTm9kZUlucHV0Pik7Ci0gICAgdm9pZCBhZGRPdXRwdXQoUGFzc093blB0cjxB
dWRpb05vZGVPdXRwdXQ+KTsKLSAgICAKLSAgICAvLyBDYWxsZWQgYnkgcHJvY2Vzc0lmTmVjZXNz
YXJ5KCkgdG8gY2F1c2UgYWxsIHBhcnRzIG9mIHRoZSByZW5kZXJpbmcgZ3JhcGggY29ubmVjdGVk
IHRvIHVzIHRvIHByb2Nlc3MuCi0gICAgLy8gRWFjaCByZW5kZXJpbmcgcXVhbnR1bSwgdGhlIGF1
ZGlvIGRhdGEgZm9yIGVhY2ggb2YgdGhlIEF1ZGlvTm9kZSdzIGlucHV0cyB3aWxsIGJlIGF2YWls
YWJsZSBhZnRlciB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuCi0gICAgLy8gQ2FsbGVkIGZyb20gY29u
dGV4dCdzIGF1ZGlvIHRocmVhZC4KLSAgICB2aXJ0dWFsIHZvaWQgcHVsbElucHV0cyhzaXplX3Qg
ZnJhbWVzVG9Qcm9jZXNzKTsKLQotcHJpdmF0ZToKLSAgICB2b2xhdGlsZSBib29sIG1faXNJbml0
aWFsaXplZDsKLSAgICBOb2RlVHlwZSBtX25vZGVUeXBlOwotICAgIFJlZlB0cjxBdWRpb0NvbnRl
eHQ+IG1fY29udGV4dDsKLSAgICBmbG9hdCBtX3NhbXBsZVJhdGU7Ci0gICAgVmVjdG9yPE93blB0
cjxBdWRpb05vZGVJbnB1dD4gPiBtX2lucHV0czsKLSAgICBWZWN0b3I8T3duUHRyPEF1ZGlvTm9k
ZU91dHB1dD4gPiBtX291dHB1dHM7Ci0KLSAgICBkb3VibGUgbV9sYXN0UHJvY2Vzc2luZ1RpbWU7
Ci0KLSAgICAvLyBSZWYtY291bnRpbmcKLSAgICB2b2xhdGlsZSBpbnQgbV9ub3JtYWxSZWZDb3Vu
dDsKLSAgICB2b2xhdGlsZSBpbnQgbV9jb25uZWN0aW9uUmVmQ291bnQ7Ci0gICAgdm9sYXRpbGUg
aW50IG1fZGlzYWJsZWRSZWZDb3VudDsKLSAgICAKLSAgICBib29sIG1faXNNYXJrZWRGb3JEZWxl
dGlvbjsKLSAgICBib29sIG1faXNEaXNhYmxlZDsKLSAgICAKLSNpZiBERUJVR19BVURJT05PREVf
UkVGRVJFTkNFUwotICAgIHN0YXRpYyBib29sIHNfaXNOb2RlQ291bnRJbml0aWFsaXplZDsKLSAg
ICBzdGF0aWMgaW50IHNfbm9kZUNvdW50W05vZGVUeXBlRW5kXTsKLSNlbmRpZgotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQXVkaW9Ob2RlX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlLmlkbAkocmV2aXNpb24gMTExMjMzKQorKysgU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzOSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGF1ZGlvIHsKLSAgICBpbnRlcmZhY2UgWwotICAg
ICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8KLSAgICBdIEF1ZGlvTm9kZSB7Ci0gICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBBdWRpb0NvbnRleHQgY29udGV4dDsKLSAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZJbnB1dHM7Ci0gICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIG51bWJlck9mT3V0cHV0czsKLQotICAgICAgICB2b2lk
IGNvbm5lY3QoaW4gQXVkaW9Ob2RlIGRlc3RpbmF0aW9uLCBpbiBbT3B0aW9uYWw9RGVmYXVsdElz
VW5kZWZpbmVkXSB1bnNpZ25lZCBsb25nIG91dHB1dCwgaW4gW09wdGlvbmFsPURlZmF1bHRJc1Vu
ZGVmaW5lZF0gdW5zaWduZWQgbG9uZyBpbnB1dCkKLSAgICAgICAgICAgIHJhaXNlcyhET01FeGNl
cHRpb24pOwotCi0gICAgICAgIHZvaWQgZGlzY29ubmVjdChpbiBbT3B0aW9uYWw9RGVmYXVsdElz
VW5kZWZpbmVkXSB1bnNpZ25lZCBsb25nIG91dHB1dCkKLSAgICAgICAgICAgIHJhaXNlcyhET01F
eGNlcHRpb24pOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b05vZGVJbnB1dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9Ob2RlSW5wdXQuY3BwCShyZXZpc2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9BdWRpb05vZGVJbnB1dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjc0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0g
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElP
KQotCi0jaW5jbHVkZSAiQXVkaW9Ob2RlSW5wdXQuaCIKLQotI2luY2x1ZGUgIkF1ZGlvQ29udGV4
dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZS5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5o
IgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLSAKLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotQXVkaW9Ob2RlSW5wdXQ6OkF1ZGlvTm9kZUlucHV0KEF1ZGlvTm9k
ZSogbm9kZSkKLSAgICA6IG1fbm9kZShub2RlKQotICAgICwgbV9yZW5kZXJpbmdTdGF0ZU5lZWRV
cGRhdGluZyhmYWxzZSkKLXsKLSAgICAvLyBTZXQgdG8gbW9ubyBieSBkZWZhdWx0LgotICAgIG1f
aW50ZXJuYWxTdW1taW5nQnVzID0gYWRvcHRQdHIobmV3IEF1ZGlvQnVzKDEsIEF1ZGlvTm9kZTo6
UHJvY2Vzc2luZ1NpemVJbkZyYW1lcykpOwotfQotCi12b2lkIEF1ZGlvTm9kZUlucHV0Ojpjb25u
ZWN0KEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0KQotewotICAgIEFTU0VSVChjb250ZXh0KCktPmlz
R3JhcGhPd25lcigpKTsKLSAgICAKLSAgICBBU1NFUlQob3V0cHV0ICYmIG5vZGUoKSk7Ci0gICAg
aWYgKCFvdXRwdXQgfHwgIW5vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ2hlY2sg
aWYgd2UncmUgYWxyZWFkeSBjb25uZWN0ZWQgdG8gdGhpcyBvdXRwdXQuCi0gICAgaWYgKG1fb3V0
cHV0cy5jb250YWlucyhvdXRwdXQpKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIG91
dHB1dC0+YWRkSW5wdXQodGhpcyk7Ci0gICAgbV9vdXRwdXRzLmFkZChvdXRwdXQpOwotICAgIGNo
YW5nZWRPdXRwdXRzKCk7Ci0KLSAgICAvLyBTb21ib2R5IGhhcyBqdXN0IGNvbm5lY3RlZCB0byB1
cywgc28gY291bnQgaXQgYXMgYSByZWZlcmVuY2UuCi0gICAgbm9kZSgpLT5yZWYoQXVkaW9Ob2Rl
OjpSZWZUeXBlQ29ubmVjdGlvbik7Ci19Ci0KLXZvaWQgQXVkaW9Ob2RlSW5wdXQ6OmRpc2Nvbm5l
Y3QoQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQoKS0+aXNH
cmFwaE93bmVyKCkpOwotCi0gICAgQVNTRVJUKG91dHB1dCAmJiBub2RlKCkpOwotICAgIGlmICgh
b3V0cHV0IHx8ICFub2RlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZpcnN0IHRyeSB0
byBkaXNjb25uZWN0IGZyb20gImFjdGl2ZSIgY29ubmVjdGlvbnMuCi0gICAgaWYgKG1fb3V0cHV0
cy5jb250YWlucyhvdXRwdXQpKSB7Ci0gICAgICAgIG1fb3V0cHV0cy5yZW1vdmUob3V0cHV0KTsK
LSAgICAgICAgY2hhbmdlZE91dHB1dHMoKTsKLSAgICAgICAgb3V0cHV0LT5yZW1vdmVJbnB1dCh0
aGlzKTsKLSAgICAgICAgbm9kZSgpLT5kZXJlZihBdWRpb05vZGU6OlJlZlR5cGVDb25uZWN0aW9u
KTsgLy8gTm90ZTogaXQncyBpbXBvcnRhbnQgdG8gcmV0dXJuIGltbWVkaWF0ZWx5IGFmdGVyIGFs
bCBkZXJlZigpIGNhbGxzIHNpbmNlIHRoZSBub2RlIG1heSBiZSBkZWxldGVkLgotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIAotICAgIC8vIE90aGVyd2lzZSwgdHJ5IHRvIGRpc2Nvbm5lY3Qg
ZnJvbSBkaXNhYmxlZCBjb25uZWN0aW9ucy4KLSAgICBpZiAobV9kaXNhYmxlZE91dHB1dHMuY29u
dGFpbnMob3V0cHV0KSkgewotICAgICAgICBtX2Rpc2FibGVkT3V0cHV0cy5yZW1vdmUob3V0cHV0
KTsKLSAgICAgICAgb3V0cHV0LT5yZW1vdmVJbnB1dCh0aGlzKTsKLSAgICAgICAgbm9kZSgpLT5k
ZXJlZihBdWRpb05vZGU6OlJlZlR5cGVEaXNhYmxlZCk7IC8vIE5vdGU6IGl0J3MgaW1wb3J0YW50
IHRvIHJldHVybiBpbW1lZGlhdGVseSBhZnRlciBhbGwgZGVyZWYoKSBjYWxscyBzaW5jZSB0aGUg
bm9kZSBtYXkgYmUgZGVsZXRlZC4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEF1ZGlvTm9kZUlucHV0OjpkaXNhYmxlKEF1ZGlv
Tm9kZU91dHB1dCogb3V0cHV0KQotewotICAgIEFTU0VSVChjb250ZXh0KCktPmlzR3JhcGhPd25l
cigpKTsKLQotICAgIEFTU0VSVChvdXRwdXQgJiYgbm9kZSgpKTsKLSAgICBpZiAoIW91dHB1dCB8
fCAhbm9kZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9vdXRwdXRzLmNvbnRh
aW5zKG91dHB1dCkpOwotICAgIAotICAgIG1fZGlzYWJsZWRPdXRwdXRzLmFkZChvdXRwdXQpOwot
ICAgIG1fb3V0cHV0cy5yZW1vdmUob3V0cHV0KTsKLSAgICBjaGFuZ2VkT3V0cHV0cygpOwotCi0g
ICAgbm9kZSgpLT5yZWYoQXVkaW9Ob2RlOjpSZWZUeXBlRGlzYWJsZWQpOwotICAgIG5vZGUoKS0+
ZGVyZWYoQXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7IC8vIE5vdGU6IGl0J3MgaW1wb3J0
YW50IHRvIHJldHVybiBpbW1lZGlhdGVseSBhZnRlciBhbGwgZGVyZWYoKSBjYWxscyBzaW5jZSB0
aGUgbm9kZSBtYXkgYmUgZGVsZXRlZC4KLX0KLQotdm9pZCBBdWRpb05vZGVJbnB1dDo6ZW5hYmxl
KEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0KQotewotICAgIEFTU0VSVChjb250ZXh0KCktPmlzR3Jh
cGhPd25lcigpKTsKLQotICAgIEFTU0VSVChvdXRwdXQgJiYgbm9kZSgpKTsKLSAgICBpZiAoIW91
dHB1dCB8fCAhbm9kZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9kaXNhYmxl
ZE91dHB1dHMuY29udGFpbnMob3V0cHV0KSk7Ci0KLSAgICAvLyBNb3ZlIG91dHB1dCBmcm9tIGRp
c2FibGVkIGxpc3QgdG8gYWN0aXZlIGxpc3QuCi0gICAgbV9vdXRwdXRzLmFkZChvdXRwdXQpOwot
ICAgIG1fZGlzYWJsZWRPdXRwdXRzLnJlbW92ZShvdXRwdXQpOwotICAgIGNoYW5nZWRPdXRwdXRz
KCk7Ci0KLSAgICBub2RlKCktPnJlZihBdWRpb05vZGU6OlJlZlR5cGVDb25uZWN0aW9uKTsKLSAg
ICBub2RlKCktPmRlcmVmKEF1ZGlvTm9kZTo6UmVmVHlwZURpc2FibGVkKTsgLy8gTm90ZTogaXQn
cyBpbXBvcnRhbnQgdG8gcmV0dXJuIGltbWVkaWF0ZWx5IGFmdGVyIGFsbCBkZXJlZigpIGNhbGxz
IHNpbmNlIHRoZSBub2RlIG1heSBiZSBkZWxldGVkLgotfQotCi12b2lkIEF1ZGlvTm9kZUlucHV0
OjpjaGFuZ2VkT3V0cHV0cygpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQoKS0+aXNHcmFwaE93bmVy
KCkpOwotICAgIGlmICghbV9yZW5kZXJpbmdTdGF0ZU5lZWRVcGRhdGluZyAmJiAhbm9kZSgpLT5p
c01hcmtlZEZvckRlbGV0aW9uKCkpIHsgICAgCi0gICAgICAgIGNvbnRleHQoKS0+bWFya0F1ZGlv
Tm9kZUlucHV0RGlydHkodGhpcyk7Ci0gICAgICAgIG1fcmVuZGVyaW5nU3RhdGVOZWVkVXBkYXRp
bmcgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBBdWRpb05vZGVJbnB1dDo6dXBkYXRlUmVuZGVy
aW5nU3RhdGUoKQotewotICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSAmJiBj
b250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKLSAgICAKLSAgICBpZiAobV9yZW5kZXJpbmdTdGF0
ZU5lZWRVcGRhdGluZyAmJiAhbm9kZSgpLT5pc01hcmtlZEZvckRlbGV0aW9uKCkpIHsKLSAgICAg
ICAgLy8gQ29weSBmcm9tIG1fb3V0cHV0cyB0byBtX3JlbmRlcmluZ091dHB1dHMuCi0gICAgICAg
IG1fcmVuZGVyaW5nT3V0cHV0cy5yZXNpemUobV9vdXRwdXRzLnNpemUoKSk7Ci0gICAgICAgIHVu
c2lnbmVkIGogPSAwOwotICAgICAgICBmb3IgKEhhc2hTZXQ8QXVkaW9Ob2RlT3V0cHV0Kj46Oml0
ZXJhdG9yIGkgPSBtX291dHB1dHMuYmVnaW4oKTsgaSAhPSBtX291dHB1dHMuZW5kKCk7ICsraSwg
KytqKSB7Ci0gICAgICAgICAgICBBdWRpb05vZGVPdXRwdXQqIG91dHB1dCA9ICppOwotICAgICAg
ICAgICAgbV9yZW5kZXJpbmdPdXRwdXRzW2pdID0gb3V0cHV0OwotICAgICAgICAgICAgb3V0cHV0
LT51cGRhdGVSZW5kZXJpbmdTdGF0ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbm9kZSgpLT5j
aGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1dCh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIG1f
cmVuZGVyaW5nU3RhdGVOZWVkVXBkYXRpbmcgPSBmYWxzZTsKLSAgICB9Ci19Ci0KLXZvaWQgQXVk
aW9Ob2RlSW5wdXQ6OnVwZGF0ZUludGVybmFsQnVzKCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCgp
LT5pc0F1ZGlvVGhyZWFkKCkgJiYgY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0KLSAgICB1
bnNpZ25lZCBudW1iZXJPZklucHV0Q2hhbm5lbHMgPSBudW1iZXJPZkNoYW5uZWxzKCk7Ci0KLSAg
ICBpZiAobnVtYmVyT2ZJbnB1dENoYW5uZWxzID09IG1faW50ZXJuYWxTdW1taW5nQnVzLT5udW1i
ZXJPZkNoYW5uZWxzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faW50ZXJuYWxTdW1taW5n
QnVzID0gYWRvcHRQdHIobmV3IEF1ZGlvQnVzKG51bWJlck9mSW5wdXRDaGFubmVscywgQXVkaW9O
b2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVzKSk7Ci19Ci0KLXVuc2lnbmVkIEF1ZGlvTm9kZUlu
cHV0OjpudW1iZXJPZkNoYW5uZWxzKCkgY29uc3QKLXsKLSAgICAvLyBGaW5kIHRoZSBudW1iZXIg
b2YgY2hhbm5lbHMgb2YgdGhlIGNvbm5lY3Rpb24gd2l0aCB0aGUgbGFyZ2VzdCBudW1iZXIgb2Yg
Y2hhbm5lbHMuCi0gICAgdW5zaWduZWQgbWF4Q2hhbm5lbHMgPSAxOyAvLyBvbmUgY2hhbm5lbCBp
cyB0aGUgbWluaW11bSBhbGxvd2VkCi0KLSAgICBmb3IgKEhhc2hTZXQ8QXVkaW9Ob2RlT3V0cHV0
Kj46Oml0ZXJhdG9yIGkgPSBtX291dHB1dHMuYmVnaW4oKTsgaSAhPSBtX291dHB1dHMuZW5kKCk7
ICsraSkgewotICAgICAgICBBdWRpb05vZGVPdXRwdXQqIG91dHB1dCA9ICppOwotICAgICAgICBt
YXhDaGFubmVscyA9IG1heChtYXhDaGFubmVscywgb3V0cHV0LT5idXMoKS0+bnVtYmVyT2ZDaGFu
bmVscygpKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG1heENoYW5uZWxzOwotfQotCi11bnNp
Z25lZCBBdWRpb05vZGVJbnB1dDo6bnVtYmVyT2ZSZW5kZXJpbmdDaGFubmVscygpCi17Ci0gICAg
QVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgpKTsKLQotICAgIC8vIEZpbmQgdGhlIG51
bWJlciBvZiBjaGFubmVscyBvZiB0aGUgcmVuZGVyaW5nIGNvbm5lY3Rpb24gd2l0aCB0aGUgbGFy
Z2VzdCBudW1iZXIgb2YgY2hhbm5lbHMuCi0gICAgdW5zaWduZWQgbWF4Q2hhbm5lbHMgPSAxOyAv
LyBvbmUgY2hhbm5lbCBpcyB0aGUgbWluaW11bSBhbGxvd2VkCi0KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9ucygpOyArK2kpCi0gICAgICAg
IG1heENoYW5uZWxzID0gbWF4KG1heENoYW5uZWxzLCByZW5kZXJpbmdPdXRwdXQoaSktPmJ1cygp
LT5udW1iZXJPZkNoYW5uZWxzKCkpOwotICAgIAotICAgIHJldHVybiBtYXhDaGFubmVsczsKLX0K
LQotQXVkaW9CdXMqIEF1ZGlvTm9kZUlucHV0OjpidXMoKQotewotICAgIEFTU0VSVChjb250ZXh0
KCktPmlzQXVkaW9UaHJlYWQoKSk7Ci0KLSAgICAvLyBIYW5kbGUgc2luZ2xlIGNvbm5lY3Rpb24g
c3BlY2lhbGx5IHRvIGFsbG93IGZvciBpbi1wbGFjZSBwcm9jZXNzaW5nLgotICAgIGlmIChudW1i
ZXJPZlJlbmRlcmluZ0Nvbm5lY3Rpb25zKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIHJlbmRlcmlu
Z091dHB1dCgwKS0+YnVzKCk7Ci0KLSAgICAvLyBNdWx0aXBsZSBjb25uZWN0aW9ucyBjYXNlIChv
ciBubyBjb25uZWN0aW9ucykuCi0gICAgcmV0dXJuIGludGVybmFsU3VtbWluZ0J1cygpOwotfQot
Ci1BdWRpb0J1cyogQXVkaW9Ob2RlSW5wdXQ6OmludGVybmFsU3VtbWluZ0J1cygpCi17Ci0gICAg
QVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgpKTsKLQotICAgIEFTU0VSVChudW1iZXJP
ZlJlbmRlcmluZ0NoYW5uZWxzKCkgPT0gbV9pbnRlcm5hbFN1bW1pbmdCdXMtPm51bWJlck9mQ2hh
bm5lbHMoKSk7Ci0KLSAgICByZXR1cm4gbV9pbnRlcm5hbFN1bW1pbmdCdXMuZ2V0KCk7Ci19Ci0K
LXZvaWQgQXVkaW9Ob2RlSW5wdXQ6OnN1bUFsbENvbm5lY3Rpb25zKEF1ZGlvQnVzKiBzdW1taW5n
QnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIEFTU0VSVChjb250ZXh0KCktPmlz
QXVkaW9UaHJlYWQoKSk7Ci0KLSAgICAvLyBXZSBzaG91bGRuJ3QgYmUgY2FsbGluZyB0aGlzIG1l
dGhvZCBpZiB0aGVyZSdzIG9ubHkgb25lIGNvbm5lY3Rpb24sIHNpbmNlIGl0J3MgbGVzcyBlZmZp
Y2llbnQuCi0gICAgQVNTRVJUKG51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKSA+IDEpOwot
Ci0gICAgQVNTRVJUKHN1bW1pbmdCdXMpOwotICAgIGlmICghc3VtbWluZ0J1cykKLSAgICAgICAg
cmV0dXJuOwotICAgICAgICAKLSAgICBzdW1taW5nQnVzLT56ZXJvKCk7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9ucygpOyArK2kpIHsK
LSAgICAgICAgQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQgPSByZW5kZXJpbmdPdXRwdXQoaSk7Ci0g
ICAgICAgIEFTU0VSVChvdXRwdXQpOwotCi0gICAgICAgIC8vIFJlbmRlciBhdWRpbyBmcm9tIHRo
aXMgb3V0cHV0LgotICAgICAgICBBdWRpb0J1cyogY29ubmVjdGlvbkJ1cyA9IG91dHB1dC0+cHVs
bCgwLCBmcmFtZXNUb1Byb2Nlc3MpOwotCi0gICAgICAgIC8vIFN1bSwgd2l0aCB1bml0eS1nYWlu
LgotICAgICAgICBzdW1taW5nQnVzLT5zdW1Gcm9tKCpjb25uZWN0aW9uQnVzKTsKLSAgICB9Ci19
Ci0KLUF1ZGlvQnVzKiBBdWRpb05vZGVJbnB1dDo6cHVsbChBdWRpb0J1cyogaW5QbGFjZUJ1cywg
c2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKLXsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlv
VGhyZWFkKCkpOwotCi0gICAgLy8gSGFuZGxlIHNpbmdsZSBjb25uZWN0aW9uIGNhc2UuCi0gICAg
aWYgKG51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKSA9PSAxKSB7Ci0gICAgICAgIC8vIFRo
ZSBvdXRwdXQgd2lsbCBvcHRpbWl6ZSBwcm9jZXNzaW5nIHVzaW5nIGluUGxhY2VCdXMgaWYgaXQn
cyBhYmxlLgotICAgICAgICBBdWRpb05vZGVPdXRwdXQqIG91dHB1dCA9IHRoaXMtPnJlbmRlcmlu
Z091dHB1dCgwKTsKLSAgICAgICAgcmV0dXJuIG91dHB1dC0+cHVsbChpblBsYWNlQnVzLCBmcmFt
ZXNUb1Byb2Nlc3MpOwotICAgIH0KLQotICAgIEF1ZGlvQnVzKiBpbnRlcm5hbFN1bW1pbmdCdXMg
PSB0aGlzLT5pbnRlcm5hbFN1bW1pbmdCdXMoKTsKLQotICAgIGlmICghbnVtYmVyT2ZSZW5kZXJp
bmdDb25uZWN0aW9ucygpKSB7Ci0gICAgICAgIC8vIEF0IGxlYXN0LCBnZW5lcmF0ZSBzaWxlbmNl
IGlmIHdlJ3JlIG5vdCBjb25uZWN0ZWQgdG8gYW55dGhpbmcuCi0gICAgICAgIC8vIEZJWE1FOiBp
ZiB3ZSB3YW50ZWQgdG8gZ2V0IGZhbmN5LCB3ZSBjb3VsZCBwcm9wYWdhdGUgYSAnc2lsZW50IGhp
bnQnIGhlcmUgdG8gb3B0aW1pemUgdGhlIGRvd25zdHJlYW0gZ3JhcGggcHJvY2Vzc2luZy4KLSAg
ICAgICAgaW50ZXJuYWxTdW1taW5nQnVzLT56ZXJvKCk7Ci0gICAgICAgIHJldHVybiBpbnRlcm5h
bFN1bW1pbmdCdXM7Ci0gICAgfQotCi0gICAgLy8gSGFuZGxlIG11bHRpcGxlIGNvbm5lY3Rpb25z
IGNhc2UuCi0gICAgc3VtQWxsQ29ubmVjdGlvbnMoaW50ZXJuYWxTdW1taW5nQnVzLCBmcmFtZXNU
b1Byb2Nlc3MpOwotICAgIAotICAgIHJldHVybiBpbnRlcm5hbFN1bW1pbmdCdXM7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmgJKHJldmlzaW9uIDExMTIz
MykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTI4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEF1ZGlvTm9kZUlu
cHV0X2gKLSNkZWZpbmUgQXVkaW9Ob2RlSW5wdXRfaAotCi0jaW5jbHVkZSAiQXVkaW9CdXMuaCIK
LSNpbmNsdWRlICJBdWRpb05vZGUuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb05v
ZGU7Ci1jbGFzcyBBdWRpb05vZGVPdXRwdXQ7Ci0KLS8vIEFuIEF1ZGlvTm9kZUlucHV0IHJlcHJl
c2VudHMgYW4gaW5wdXQgdG8gYW4gQXVkaW9Ob2RlIGFuZCBjYW4gYmUgY29ubmVjdGVkIGZyb20g
b25lIG9yIG1vcmUgQXVkaW9Ob2RlT3V0cHV0cy4KLS8vIEluIHRoZSBjYXNlIG9mIG11bHRpcGxl
IGNvbm5lY3Rpb25zLCB0aGUgaW5wdXQgd2lsbCBhY3QgYXMgYSB1bml0eS1nYWluIHN1bW1pbmcg
anVuY3Rpb24sIG1peGluZyBhbGwgdGhlIG91dHB1dHMuCi0vLyBUaGUgbnVtYmVyIG9mIGNoYW5u
ZWxzIG9mIHRoZSBpbnB1dCdzIGJ1cyBpcyB0aGUgbWF4aW11bSBvZiB0aGUgbnVtYmVyIG9mIGNo
YW5uZWxzIG9mIGFsbCBpdHMgY29ubmVjdGlvbnMuCi0KLWNsYXNzIEF1ZGlvTm9kZUlucHV0IHsK
LXB1YmxpYzoKLSAgICBBdWRpb05vZGVJbnB1dChBdWRpb05vZGUqKTsKLQotICAgIC8vIENhbiBi
ZSBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkLgotICAgIEF1ZGlvTm9kZSogbm9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbm9kZTsgfQotICAgIEF1ZGlvQ29udGV4dCogY29udGV4dCgpIHsgcmV0dXJuIG1f
bm9kZS0+Y29udGV4dCgpOyB9Ci0KLSAgICAvLyBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBjb250
ZXh0J3MgZ3JhcGggbG9jay4KLSAgICB2b2lkIGNvbm5lY3QoQXVkaW9Ob2RlT3V0cHV0Kik7Ci0g
ICAgdm9pZCBkaXNjb25uZWN0KEF1ZGlvTm9kZU91dHB1dCopOwotCi0gICAgLy8gZGlzYWJsZSgp
IHdpbGwgdGFrZSB0aGUgb3V0cHV0IG91dCBvZiB0aGUgYWN0aXZlIGNvbm5lY3Rpb25zIGxpc3Qg
YW5kIHNldCBhc2lkZSBpbiBhIGRpc2FibGVkIGxpc3QuCi0gICAgLy8gZW5hYmxlKCkgd2lsbCBw
dXQgdGhlIG91dHB1dCBiYWNrIGludG8gdGhlIGFjdGl2ZSBjb25uZWN0aW9ucyBsaXN0LgotICAg
IC8vIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGNvbnRleHQncyBncmFwaCBsb2NrLgotICAgIHZv
aWQgZW5hYmxlKEF1ZGlvTm9kZU91dHB1dCopOwotICAgIHZvaWQgZGlzYWJsZShBdWRpb05vZGVP
dXRwdXQqKTsKLQotICAgIC8vIHB1bGwoKSBwcm9jZXNzZXMgYWxsIG9mIHRoZSBBdWRpb05vZGVz
IGNvbm5lY3RlZCB0byB1cy4KLSAgICAvLyBJbiB0aGUgY2FzZSBvZiBtdWx0aXBsZSBjb25uZWN0
aW9ucyBpdCBzdW1zIHRoZSByZXN1bHQgaW50byBhbiBpbnRlcm5hbCBzdW1taW5nIGJ1cy4KLSAg
ICAvLyBJbiB0aGUgc2luZ2xlIGNvbm5lY3Rpb24gY2FzZSwgaXQgYWxsb3dzIGluLXBsYWNlIHBy
b2Nlc3Npbmcgd2hlcmUgcG9zc2libGUgdXNpbmcgaW5QbGFjZUJ1cy4KLSAgICAvLyBJdCByZXR1
cm5zIHRoZSBidXMgd2hpY2ggaXQgcmVuZGVyZWQgaW50bywgcmV0dXJuaW5nIGluUGxhY2VCdXMg
aWYgaW4tcGxhY2UgcHJvY2Vzc2luZyB3YXMgcGVyZm9ybWVkLgotICAgIC8vIENhbGxlZCBmcm9t
IGNvbnRleHQncyBhdWRpbyB0aHJlYWQuCi0gICAgQXVkaW9CdXMqIHB1bGwoQXVkaW9CdXMqIGlu
UGxhY2VCdXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwotCi0gICAgLy8gYnVzKCkgY29udGFp
bnMgdGhlIHJlbmRlcmVkIGF1ZGlvIGFmdGVyIHB1bGwoKSBoYXMgYmVlbiBjYWxsZWQgZm9yIGVh
Y2ggdGltZSBxdWFudHVtLgotICAgIC8vIENhbGxlZCBmcm9tIGNvbnRleHQncyBhdWRpbyB0aHJl
YWQuCi0gICAgQXVkaW9CdXMqIGJ1cygpOwotICAgIAotICAgIC8vIFRoaXMgY29waWVzIG1fb3V0
cHV0cyB0byBtX3JlbmRlcmluZ091dHB1dHMuICBQbGVhc2Ugc2VlIGNvbW1lbnRzIGZvciB0aGVz
ZSBsaXN0cyBiZWxvdy4KLSAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIHdoZW4gd2Ugb3duIHRo
ZSBjb250ZXh0J3MgZ3JhcGggbG9jayBpbiB0aGUgYXVkaW8gdGhyZWFkIGF0IHRoZSB2ZXJ5IHN0
YXJ0IG9yIGVuZCBvZiB0aGUgcmVuZGVyIHF1YW50dW0uCi0gICAgdm9pZCB1cGRhdGVSZW5kZXJp
bmdTdGF0ZSgpOwotCi0gICAgLy8gdXBkYXRlSW50ZXJuYWxCdXMoKSB1cGRhdGVzIG1faW50ZXJu
YWxTdW1taW5nQnVzIGFwcHJvcHJpYXRlbHkgZm9yIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMuCi0g
ICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCB3aGVuIHdlIG93biB0aGUgY29udGV4dCdzIGdyYXBo
IGxvY2sgaW4gdGhlIGF1ZGlvIHRocmVhZCBhdCB0aGUgdmVyeSBzdGFydCBvciBlbmQgb2YgdGhl
IHJlbmRlciBxdWFudHVtLgotICAgIHZvaWQgdXBkYXRlSW50ZXJuYWxCdXMoKTsKLQotICAgIC8v
IFJlbmRlcmluZyBjb2RlIGFjY2Vzc2VzIGl0cyB2ZXJzaW9uIG9mIHRoZSBjdXJyZW50IGNvbm5l
Y3Rpb25zIGhlcmUuCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9ucygp
IGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nT3V0cHV0cy5zaXplKCk7IH0KLSAgICBBdWRpb05v
ZGVPdXRwdXQqIHJlbmRlcmluZ091dHB1dCh1bnNpZ25lZCBpKSB7IHJldHVybiBtX3JlbmRlcmlu
Z091dHB1dHNbaV07IH0KLSAgICBjb25zdCBBdWRpb05vZGVPdXRwdXQqIHJlbmRlcmluZ091dHB1
dCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ091dHB1dHNbaV07IH0KLSAg
ICBib29sIGlzQ29ubmVjdGVkKCkgY29uc3QgeyByZXR1cm4gbnVtYmVyT2ZSZW5kZXJpbmdDb25u
ZWN0aW9ucygpID4gMDsgfQotCi0gICAgLy8gVGhlIG51bWJlciBvZiBjaGFubmVscyBvZiB0aGUg
Y29ubmVjdGlvbiB3aXRoIHRoZSBsYXJnZXN0IG51bWJlciBvZiBjaGFubmVscy4KLSAgICB1bnNp
Z25lZCBudW1iZXJPZkNoYW5uZWxzKCkgY29uc3Q7ICAgICAgICAKLSAgICAKLXByaXZhdGU6Ci0g
ICAgQXVkaW9Ob2RlKiBtX25vZGU7Ci0KLSAgICAvLyBtX291dHB1dHMgY29udGFpbnMgdGhlIEF1
ZGlvTm9kZU91dHB1dHMgcmVwcmVzZW50aW5nIGN1cnJlbnQgY29ubmVjdGlvbnMgd2hpY2ggYXJl
IG5vdCBkaXNhYmxlZC4KLSAgICAvLyBUaGUgcmVuZGVyaW5nIGNvZGUgc2hvdWxkIG5ldmVyIHVz
ZSB0aGlzIGRpcmVjdGx5LCBidXQgaW5zdGVhZCB1c2VzIG1fcmVuZGVyaW5nT3V0cHV0cy4KLSAg
ICBIYXNoU2V0PEF1ZGlvTm9kZU91dHB1dCo+IG1fb3V0cHV0czsKLQotICAgIC8vIG51bWJlck9m
Q29ubmVjdGlvbnMoKSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGZyb20gdGhlIGF1ZGlvIHJlbmRl
cmluZyB0aHJlYWQuCi0gICAgLy8gSW5zdGVhZCBudW1iZXJPZlJlbmRlcmluZ0Nvbm5lY3Rpb25z
KCkgYW5kIHJlbmRlcmluZ091dHB1dCgpIHNob3VsZCBiZSB1c2VkLgotICAgIHVuc2lnbmVkIG51
bWJlck9mQ29ubmVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX291dHB1dHMuc2l6ZSgpOyB9Ci0K
LSAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIHdoZW5ldmVyIHdlIG1vZGlmeSBtX291dHB1dHMu
Ci0gICAgdm9pZCBjaGFuZ2VkT3V0cHV0cygpOwotICAgIAotICAgIC8vIG1fcmVuZGVyaW5nT3V0
cHV0cyBpcyBhIGNvcHkgb2YgbV9vdXRwdXRzIHdoaWNoIHdpbGwgbmV2ZXIgYmUgbW9kaWZpZWQg
ZHVyaW5nIHRoZSBncmFwaCByZW5kZXJpbmcgb24gdGhlIGF1ZGlvIHRocmVhZC4KLSAgICAvLyBU
aGlzIGlzIHRoZSBsaXN0IHdoaWNoIGlzIHVzZWQgYnkgdGhlIHJlbmRlcmluZyBjb2RlLgotICAg
IC8vIFdoZW5ldmVyIG1fb3V0cHV0cyBpcyBtb2RpZmllZCwgdGhlIGNvbnRleHQgaXMgdG9sZCBz
byBpdCBjYW4gbGF0ZXIgdXBkYXRlIG1fcmVuZGVyaW5nT3V0cHV0cyBmcm9tIG1fb3V0cHV0cyBh
dCBhIHNhZmUgdGltZS4KLSAgICAvLyBNb3N0IG9mIHRoZSB0aW1lLCBtX3JlbmRlcmluZ091dHB1
dHMgaXMgaWRlbnRpY2FsIHRvIG1fb3V0cHV0cy4KLSAgICBWZWN0b3I8QXVkaW9Ob2RlT3V0cHV0
Kj4gbV9yZW5kZXJpbmdPdXRwdXRzOwotCi0gICAgLy8gbV9yZW5kZXJpbmdTdGF0ZU5lZWRVcGRh
dGluZyBrZWVwcyB0cmFjayBpZiBtX291dHB1dHMgaXMgbW9kaWZpZWQuCi0gICAgYm9vbCBtX3Jl
bmRlcmluZ1N0YXRlTmVlZFVwZGF0aW5nOwotCi0gICAgLy8gVGhlIG51bWJlciBvZiBjaGFubmVs
cyBvZiB0aGUgcmVuZGVyaW5nIGNvbm5lY3Rpb24gd2l0aCB0aGUgbGFyZ2VzdCBudW1iZXIgb2Yg
Y2hhbm5lbHMuCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZSZW5kZXJpbmdDaGFubmVscygpOwotCi0g
ICAgLy8gbV9kaXNhYmxlZE91dHB1dHMgY29udGFpbnMgdGhlIEF1ZGlvTm9kZU91dHB1dHMgd2hp
Y2ggYXJlIGRpc2FibGVkICh3aWxsIG5vdCBiZSBwcm9jZXNzZWQpIGJ5IHRoZSBhdWRpbyBncmFw
aCByZW5kZXJpbmcuCi0gICAgLy8gQnV0LCBmcm9tIEphdmFTY3JpcHQncyBwZXJzcGVjdGl2ZSwg
dGhlc2Ugb3V0cHV0cyBhcmUgc3RpbGwgY29ubmVjdGVkIHRvIHVzLgotICAgIC8vIEdlbmVyYWxs
eSwgdGhlc2UgcmVwcmVzZW50IGRpc2FibGVkIGNvbm5lY3Rpb25zIGZyb20gIm5vdGVzIiB3aGlj
aCBoYXZlIGZpbmlzaGVkIHBsYXlpbmcgYnV0IGFyZSBub3QgeWV0IGdhcmJhZ2UgY29sbGVjdGVk
LgotICAgIEhhc2hTZXQ8QXVkaW9Ob2RlT3V0cHV0Kj4gbV9kaXNhYmxlZE91dHB1dHM7Ci0KLSAg
ICAvLyBDYWxsZWQgZnJvbSBjb250ZXh0J3MgYXVkaW8gdGhyZWFkLgotICAgIEF1ZGlvQnVzKiBp
bnRlcm5hbFN1bW1pbmdCdXMoKTsKLSAgICB2b2lkIHN1bUFsbENvbm5lY3Rpb25zKEF1ZGlvQnVz
KiBzdW1taW5nQnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLQotICAgIE93blB0cjxBdWRp
b0J1cz4gbV9pbnRlcm5hbFN1bW1pbmdCdXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBBdWRpb05vZGVJbnB1dF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9BdWRpb05vZGVPdXRwdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5jcHAJKHJldmlzaW9uIDExMTIzMykKKysrIFNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MjA5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFC
TEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCi0KLSNpbmNsdWRl
ICJBdWRpb0J1cy5oIgotI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgotI2luY2x1ZGUgIkF1ZGlv
Tm9kZUlucHV0LmgiCi0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLUF1ZGlvTm9kZU91dHB1dDo6QXVkaW9Ob2RlT3V0cHV0KEF1ZGlvTm9kZSogbm9k
ZSwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscykKLSAgICA6IG1fbm9kZShub2RlKQotICAgICwg
bV9udW1iZXJPZkNoYW5uZWxzKG51bWJlck9mQ2hhbm5lbHMpCi0gICAgLCBtX2Rlc2lyZWROdW1i
ZXJPZkNoYW5uZWxzKG51bWJlck9mQ2hhbm5lbHMpCi0gICAgLCBtX2FjdHVhbERlc3RpbmF0aW9u
QnVzKDApCi0gICAgLCBtX2lzRW5hYmxlZCh0cnVlKQotICAgICwgbV9yZW5kZXJpbmdGYW5PdXRD
b3VudCgwKQotewotICAgIEFTU0VSVChudW1iZXJPZkNoYW5uZWxzIDw9IEF1ZGlvQ29udGV4dDo6
bWF4TnVtYmVyT2ZDaGFubmVscygpKTsKLQotICAgIG1faW50ZXJuYWxCdXMgPSBhZG9wdFB0cihu
ZXcgQXVkaW9CdXMobnVtYmVyT2ZDaGFubmVscywgQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUlu
RnJhbWVzKSk7Ci0gICAgbV9hY3R1YWxEZXN0aW5hdGlvbkJ1cyA9IG1faW50ZXJuYWxCdXMuZ2V0
KCk7Ci19Ci0KLXZvaWQgQXVkaW9Ob2RlT3V0cHV0OjpzZXROdW1iZXJPZkNoYW5uZWxzKHVuc2ln
bmVkIG51bWJlck9mQ2hhbm5lbHMpCi17Ci0gICAgQVNTRVJUKG51bWJlck9mQ2hhbm5lbHMgPD0g
QXVkaW9Db250ZXh0OjptYXhOdW1iZXJPZkNoYW5uZWxzKCkpOwotICAgIEFTU0VSVChjb250ZXh0
KCktPmlzR3JhcGhPd25lcigpKTsKLQotICAgIG1fZGVzaXJlZE51bWJlck9mQ2hhbm5lbHMgPSBu
dW1iZXJPZkNoYW5uZWxzOwotCi0gICAgaWYgKGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgpKSB7
Ci0gICAgICAgIC8vIElmIHdlJ3JlIGluIHRoZSBhdWRpbyB0aHJlYWQgdGhlbiB3ZSBjYW4gdGFr
ZSBjYXJlIG9mIGl0IHJpZ2h0IGF3YXkgKHdlIHNob3VsZCBiZSBhdCB0aGUgdmVyeSBzdGFydCBv
ciBlbmQgb2YgYSByZW5kZXJpbmcgcXVhbnR1bSkuCi0gICAgICAgIHVwZGF0ZU51bWJlck9mQ2hh
bm5lbHMoKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBMZXQgdGhlIGNvbnRleHQgdGFrZSBj
YXJlIG9mIGl0IGluIHRoZSBhdWRpbyB0aHJlYWQgaW4gdGhlIHByZSBhbmQgcG9zdCByZW5kZXIg
dGFza3MuCi0gICAgICAgIGNvbnRleHQoKS0+bWFya0F1ZGlvTm9kZU91dHB1dERpcnR5KHRoaXMp
OwotICAgIH0KLX0KLQotdm9pZCBBdWRpb05vZGVPdXRwdXQ6OnVwZGF0ZUludGVybmFsQnVzKCkK
LXsKLSAgICBpZiAobnVtYmVyT2ZDaGFubmVscygpID09IG1faW50ZXJuYWxCdXMtPm51bWJlck9m
Q2hhbm5lbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbnRlcm5hbEJ1cyA9IGFkb3B0
UHRyKG5ldyBBdWRpb0J1cyhudW1iZXJPZkNoYW5uZWxzKCksIEF1ZGlvTm9kZTo6UHJvY2Vzc2lu
Z1NpemVJbkZyYW1lcykpOwotCi0gICAgLy8gVGhpcyBtYXkgbGF0ZXIgYmUgY2hhbmdlZCBpbiBw
dWxsKCkgdG8gcG9pbnQgdG8gYW4gaW4tcGxhY2UgYnVzIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9m
IGNoYW5uZWxzLgotICAgIG1fYWN0dWFsRGVzdGluYXRpb25CdXMgPSBtX2ludGVybmFsQnVzLmdl
dCgpOwotfQotCi12b2lkIEF1ZGlvTm9kZU91dHB1dDo6dXBkYXRlUmVuZGVyaW5nU3RhdGUoKQot
ewotICAgIHVwZGF0ZU51bWJlck9mQ2hhbm5lbHMoKTsKLSAgICBtX3JlbmRlcmluZ0Zhbk91dENv
dW50ID0gZmFuT3V0Q291bnQoKTsKLX0KLQotdm9pZCBBdWRpb05vZGVPdXRwdXQ6OnVwZGF0ZU51
bWJlck9mQ2hhbm5lbHMoKQotewotICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQo
KSAmJiBjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKLQotICAgIGlmIChtX251bWJlck9mQ2hh
bm5lbHMgIT0gbV9kZXNpcmVkTnVtYmVyT2ZDaGFubmVscykgewotICAgICAgICBtX251bWJlck9m
Q2hhbm5lbHMgPSBtX2Rlc2lyZWROdW1iZXJPZkNoYW5uZWxzOwotICAgICAgICB1cGRhdGVJbnRl
cm5hbEJ1cygpOwotICAgICAgICBwcm9wYWdhdGVDaGFubmVsQ291bnQoKTsKLSAgICB9Ci19Ci0K
LXZvaWQgQXVkaW9Ob2RlT3V0cHV0Ojpwcm9wYWdhdGVDaGFubmVsQ291bnQoKQotewotICAgIEFT
U0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSAmJiBjb250ZXh0KCktPmlzR3JhcGhPd25l
cigpKTsKLSAgICAKLSAgICBpZiAoaXNDaGFubmVsQ291bnRLbm93bigpKSB7Ci0gICAgICAgIC8v
IEFubm91bmNlIHRvIGFueSBub2RlcyB3ZSdyZSBjb25uZWN0ZWQgdG8gdGhhdCB3ZSBjaGFuZ2Vk
IG91ciBjaGFubmVsIGNvdW50IGZvciBpdHMgaW5wdXQuCi0gICAgICAgIGZvciAoSW5wdXRzSXRl
cmF0b3IgaSA9IG1faW5wdXRzLmJlZ2luKCk7IGkgIT0gbV9pbnB1dHMuZW5kKCk7ICsraSkgewot
ICAgICAgICAgICAgQXVkaW9Ob2RlSW5wdXQqIGlucHV0ID0gKmk7Ci0gICAgICAgICAgICBBdWRp
b05vZGUqIGNvbm5lY3Rpb25Ob2RlID0gaW5wdXQtPm5vZGUoKTsKLSAgICAgICAgICAgIGNvbm5l
Y3Rpb25Ob2RlLT5jaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1dChpbnB1dCk7Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLUF1ZGlvQnVzKiBBdWRpb05vZGVPdXRwdXQ6OnB1bGwoQXVkaW9CdXMq
IGluUGxhY2VCdXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgQVNTRVJUKGNvbnRl
eHQoKS0+aXNBdWRpb1RocmVhZCgpKTsKLSAgICBBU1NFUlQobV9yZW5kZXJpbmdGYW5PdXRDb3Vu
dCA+IDApOwotICAgIAotICAgIC8vIENhdXNlcyBvdXIgQXVkaW9Ob2RlIHRvIHByb2Nlc3MgaWYg
aXQgaGFzbid0IGFscmVhZHkgZm9yIHRoaXMgcmVuZGVyIHF1YW50dW0uCi0gICAgLy8gV2UgdHJ5
IHRvIGRvIGluLXBsYWNlIHByb2Nlc3NpbmcgKHVzaW5nIGluUGxhY2VCdXMpIGlmIGF0IGFsbCBw
b3NzaWJsZSwKLSAgICAvLyBidXQgd2UgY2FuJ3QgcHJvY2VzcyBpbi1wbGFjZSBpZiB3ZSdyZSBj
b25uZWN0ZWQgdG8gbW9yZSB0aGFuIG9uZSBpbnB1dCAoZmFuLW91dCA+IDEpLgotICAgIC8vIElu
IHRoaXMgY2FzZSBwdWxsKCkgaXMgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHBlciByZW5kZXJpbmcg
cXVhbnR1bSwgYW5kIHRoZSBwcm9jZXNzSWZOZWNlc3NhcnkoKSBjYWxsIGJlbG93IHdpbGwKLSAg
ICAvLyBjYXVzZSBvdXIgbm9kZSB0byBwcm9jZXNzKCkgb25seSB0aGUgZmlyc3QgdGltZSwgY2Fj
aGluZyB0aGUgb3V0cHV0IGluIG1faW50ZXJuYWxPdXRwdXRCdXMgZm9yIHN1YnNlcXVlbnQgY2Fs
bHMuICAgIAotICAgIAotICAgIGJvb2wgaXNJblBsYWNlID0gaW5QbGFjZUJ1cyAmJiBpblBsYWNl
QnVzLT5udW1iZXJPZkNoYW5uZWxzKCkgPT0gbnVtYmVyT2ZDaGFubmVscygpICYmIG1fcmVuZGVy
aW5nRmFuT3V0Q291bnQgPT0gMTsKLQotICAgIC8vIFNldHVwIHRoZSBhY3R1YWwgZGVzdGluYXRp
b24gYnVzIGZvciBwcm9jZXNzaW5nIHdoZW4gb3VyIG5vZGUncyBwcm9jZXNzKCkgbWV0aG9kIGdl
dHMgY2FsbGVkIGluIHByb2Nlc3NJZk5lY2Vzc2FyeSgpIGJlbG93LgotICAgIG1fYWN0dWFsRGVz
dGluYXRpb25CdXMgPSBpc0luUGxhY2UgPyBpblBsYWNlQnVzIDogbV9pbnRlcm5hbEJ1cy5nZXQo
KTsKLQotICAgIG5vZGUoKS0+cHJvY2Vzc0lmTmVjZXNzYXJ5KGZyYW1lc1RvUHJvY2Vzcyk7Ci0g
ICAgcmV0dXJuIG1fYWN0dWFsRGVzdGluYXRpb25CdXM7Ci19Ci0KLUF1ZGlvQnVzKiBBdWRpb05v
ZGVPdXRwdXQ6OmJ1cygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGNvbnN0X2Nhc3Q8QXVkaW9Ob2Rl
T3V0cHV0Kj4odGhpcyktPmNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgpKTsKLSAgICBBU1NFUlQo
bV9hY3R1YWxEZXN0aW5hdGlvbkJ1cyk7Ci0gICAgcmV0dXJuIG1fYWN0dWFsRGVzdGluYXRpb25C
dXM7Ci19Ci0KLXVuc2lnbmVkIEF1ZGlvTm9kZU91dHB1dDo6cmVuZGVyaW5nRmFuT3V0Q291bnQo
KSBjb25zdAotewotICAgIHJldHVybiBtX3JlbmRlcmluZ0Zhbk91dENvdW50OwotfQotCi11bnNp
Z25lZCBBdWRpb05vZGVPdXRwdXQ6OmZhbk91dENvdW50KCkKLXsKLSAgICBBU1NFUlQoY29udGV4
dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0gICAgcmV0dXJuIG1faW5wdXRzLnNpemUoKTsKLX0KLQot
dm9pZCBBdWRpb05vZGVPdXRwdXQ6OmFkZElucHV0KEF1ZGlvTm9kZUlucHV0KiBpbnB1dCkKLXsK
LSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0KLSAgICBBU1NFUlQoaW5w
dXQpOwotICAgIGlmICghaW5wdXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faW5wdXRzLmFk
ZChpbnB1dCk7Ci19Ci0KLXZvaWQgQXVkaW9Ob2RlT3V0cHV0OjpyZW1vdmVJbnB1dChBdWRpb05v
ZGVJbnB1dCogaW5wdXQpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkp
OwotCi0gICAgQVNTRVJUKGlucHV0KTsKLSAgICBpZiAoIWlucHV0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2lucHV0cy5yZW1vdmUoaW5wdXQpOwotfQotCi12b2lkIEF1ZGlvTm9kZU91dHB1
dDo6ZGlzY29ubmVjdEFsbElucHV0cygpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQoKS0+aXNHcmFw
aE93bmVyKCkpOwotICAgIAotICAgIC8vIEF1ZGlvTm9kZUlucHV0OjpkaXNjb25uZWN0KCkgY2hh
bmdlcyBtX2lucHV0cyBieSBjYWxsaW5nIHJlbW92ZUlucHV0KCkuCi0gICAgd2hpbGUgKCFtX2lu
cHV0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgQXVkaW9Ob2RlSW5wdXQqIGlucHV0ID0gKm1faW5w
dXRzLmJlZ2luKCk7Ci0gICAgICAgIGlucHV0LT5kaXNjb25uZWN0KHRoaXMpOwotICAgIH0KLX0K
LQotdm9pZCBBdWRpb05vZGVPdXRwdXQ6OmRpc2FibGUoKQotewotICAgIEFTU0VSVChjb250ZXh0
KCktPmlzR3JhcGhPd25lcigpKTsKLQotICAgIGlmIChtX2lzRW5hYmxlZCkgewotICAgICAgICBm
b3IgKElucHV0c0l0ZXJhdG9yIGkgPSBtX2lucHV0cy5iZWdpbigpOyBpICE9IG1faW5wdXRzLmVu
ZCgpOyArK2kpIHsKLSAgICAgICAgICAgIEF1ZGlvTm9kZUlucHV0KiBpbnB1dCA9ICppOwotICAg
ICAgICAgICAgaW5wdXQtPmRpc2FibGUodGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9pc0Vu
YWJsZWQgPSBmYWxzZTsKLSAgICB9Ci19Ci0KLXZvaWQgQXVkaW9Ob2RlT3V0cHV0OjplbmFibGUo
KQotewotICAgIEFTU0VSVChjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKLQotICAgIGlmICgh
bV9pc0VuYWJsZWQpIHsKLSAgICAgICAgZm9yIChJbnB1dHNJdGVyYXRvciBpID0gbV9pbnB1dHMu
YmVnaW4oKTsgaSAhPSBtX2lucHV0cy5lbmQoKTsgKytpKSB7Ci0gICAgICAgICAgICBBdWRpb05v
ZGVJbnB1dCogaW5wdXQgPSAqaTsKLSAgICAgICAgICAgIGlucHV0LT5lbmFibGUodGhpcyk7Ci0g
ICAgICAgIH0KLSAgICAgICAgbV9pc0VuYWJsZWQgPSB0cnVlOwotICAgIH0KLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5oCShyZXZpc2lvbiAxMTEyMzMp
CisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSwxMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQXVkaW9Ob2RlT3V0
cHV0X2gKLSNkZWZpbmUgQXVkaW9Ob2RlT3V0cHV0X2gKLQotI2luY2x1ZGUgIkF1ZGlvQnVzLmgi
Ci0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvQ29udGV4dDsKLWNsYXNzIEF1ZGlvTm9kZUlucHV0Owot
Ci0vLyBBdWRpb05vZGVPdXRwdXQgcmVwcmVzZW50cyBhIHNpbmdsZSBvdXRwdXQgZm9yIGFuIEF1
ZGlvTm9kZS4KLS8vIEl0IG1heSBiZSBjb25uZWN0ZWQgdG8gb25lIG9yIG1vcmUgQXVkaW9Ob2Rl
SW5wdXRzLgotCi1jbGFzcyBBdWRpb05vZGVPdXRwdXQgewotcHVibGljOgotICAgIC8vIEl0J3Mg
T0sgdG8gcGFzcyAwIGZvciBudW1iZXJPZkNoYW5uZWxzIGluIHdoaWNoIGNhc2Ugc2V0TnVtYmVy
T2ZDaGFubmVscygpIG11c3QgYmUgY2FsbGVkIGxhdGVyIG9uLgotICAgIEF1ZGlvTm9kZU91dHB1
dChBdWRpb05vZGUqLCB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKTsKLQotICAgIC8vIENhbiBi
ZSBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkLgotICAgIEF1ZGlvTm9kZSogbm9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbm9kZTsgfQotICAgIEF1ZGlvQ29udGV4dCogY29udGV4dCgpIHsgcmV0dXJuIG1f
bm9kZS0+Y29udGV4dCgpOyB9Ci0gICAgCi0gICAgLy8gQ2F1c2VzIG91ciBBdWRpb05vZGUgdG8g
cHJvY2VzcyBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBmb3IgdGhpcyByZW5kZXIgcXVhbnR1bS4KLSAg
ICAvLyBJdCByZXR1cm5zIHRoZSBidXMgY29udGFpbmluZyB0aGUgcHJvY2Vzc2VkIGF1ZGlvIGZv
ciB0aGlzIG91dHB1dCwgcmV0dXJuaW5nIGluUGxhY2VCdXMgaWYgaW4tcGxhY2UgcHJvY2Vzc2lu
ZyB3YXMgcG9zc2libGUuCi0gICAgLy8gQ2FsbGVkIGZyb20gY29udGV4dCdzIGF1ZGlvIHRocmVh
ZC4KLSAgICBBdWRpb0J1cyogcHVsbChBdWRpb0J1cyogaW5QbGFjZUJ1cywgc2l6ZV90IGZyYW1l
c1RvUHJvY2Vzcyk7Ci0KLSAgICAvLyBidXMoKSB3aWxsIGNvbnRhaW4gdGhlIHJlbmRlcmVkIGF1
ZGlvIGFmdGVyIHB1bGwoKSBpcyBjYWxsZWQgZm9yIGVhY2ggcmVuZGVyaW5nIHRpbWUgcXVhbnR1
bS4KLSAgICAvLyBDYWxsZWQgZnJvbSBjb250ZXh0J3MgYXVkaW8gdGhyZWFkLgotICAgIEF1ZGlv
QnVzKiBidXMoKSBjb25zdDsKLQotICAgIC8vIGZhbk91dENvdW50KCkgaXMgdGhlIG51bWJlciBv
ZiBBdWRpb05vZGVJbnB1dHMgdGhhdCB3ZSdyZSBjb25uZWN0ZWQgdG8uCi0gICAgLy8gVGhpcyBm
dW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCBpbiBhdWRpbyB0aHJlYWQgcmVuZGVyaW5nIGNv
ZGUsIGluc3RlYWQgcmVuZGVyaW5nRmFuT3V0Q291bnQoKSBzaG91bGQgYmUgdXNlZC4KLSAgICAv
LyBJdCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jay4KLSAgICB1
bnNpZ25lZCBmYW5PdXRDb3VudCgpOwotCi0gICAgLy8gcmVuZGVyaW5nRmFuT3V0Q291bnQoKSBp
cyB0aGUgbnVtYmVyIG9mIEF1ZGlvTm9kZUlucHV0cyB0aGF0IHdlJ3JlIGNvbm5lY3RlZCB0byBk
dXJpbmcgcmVuZGVyaW5nLgotICAgIC8vIFVubGlrZSBmYW5PdXRDb3VudCgpIGl0IHdpbGwgbm90
IGNoYW5nZSBkdXJpbmcgdGhlIGNvdXJzZSBvZiBhIHJlbmRlciBxdWFudHVtLgotICAgIHVuc2ln
bmVkIHJlbmRlcmluZ0Zhbk91dENvdW50KCkgY29uc3Q7Ci0KLSAgICAvLyBJdCBtdXN0IGJlIGNh
bGxlZCB3aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jay4KLSAgICB2b2lkIGRpc2Nvbm5lY3RB
bGxJbnB1dHMoKTsKLQotICAgIHZvaWQgc2V0TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25lZCk7Ci0g
ICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtYmVyT2ZD
aGFubmVsczsgfQotICAgIGJvb2wgaXNDaGFubmVsQ291bnRLbm93bigpIGNvbnN0IHsgcmV0dXJu
IG51bWJlck9mQ2hhbm5lbHMoKSA+IDA7IH0KLQotICAgIC8vIERpc2FibGUvRW5hYmxlIGhhcHBl
bnMgd2hlbiB0aGVyZSBhcmUgc3RpbGwgSmF2YVNjcmlwdCByZWZlcmVuY2VzIHRvIGEgbm9kZSwg
YnV0IGl0IGhhcyBvdGhlcndpc2UgImZpbmlzaGVkIiBpdHMgd29yay4KLSAgICAvLyBGb3IgZXhh
bXBsZSwgd2hlbiBhIG5vdGUgaGFzIGZpbmlzaGVkIHBsYXlpbmcuICBJdCBpcyBrZXB0IGFyb3Vu
ZCwgYmVjYXVzZSBpdCBtYXkgYmUgcGxheWVkIGFnYWluIGF0IGEgbGF0ZXIgdGltZS4KLSAgICAv
LyBUaGV5IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGNvbnRleHQncyBncmFwaCBsb2NrLgotICAg
IHZvaWQgZGlzYWJsZSgpOwotICAgIHZvaWQgZW5hYmxlKCk7Ci0KLSAgICAvLyB1cGRhdGVSZW5k
ZXJpbmdTdGF0ZSgpIGlzIGNhbGxlZCBpbiB0aGUgYXVkaW8gdGhyZWFkIGF0IHRoZSBzdGFydCBv
ciBlbmQgb2YgdGhlIHJlbmRlciBxdWFudHVtIHRvIGhhbmRsZSBhbnkgcmVjZW50IGNoYW5nZXMg
dG8gdGhlIGdyYXBoIHN0YXRlLgotICAgIC8vIEl0IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGNv
bnRleHQncyBncmFwaCBsb2NrLgotICAgIHZvaWQgdXBkYXRlUmVuZGVyaW5nU3RhdGUoKTsKLSAg
ICAKLXByaXZhdGU6Ci0gICAgQXVkaW9Ob2RlKiBtX25vZGU7Ci0KLSAgICBmcmllbmQgY2xhc3Mg
QXVkaW9Ob2RlSW5wdXQ7Ci0gICAgCi0gICAgLy8gVGhlc2UgYXJlIGNhbGxlZCBmcm9tIEF1ZGlv
Tm9kZUlucHV0LgotICAgIC8vIFRoZXkgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgY29udGV4dCdz
IGdyYXBoIGxvY2suCi0gICAgdm9pZCBhZGRJbnB1dChBdWRpb05vZGVJbnB1dCopOwotICAgIHZv
aWQgcmVtb3ZlSW5wdXQoQXVkaW9Ob2RlSW5wdXQqKTsKLQotICAgIC8vIHVwZGF0ZUludGVybmFs
QnVzKCkgdXBkYXRlcyBtX2ludGVybmFsQnVzIGFwcHJvcHJpYXRlbHkgZm9yIHRoZSBudW1iZXIg
b2YgY2hhbm5lbHMuCi0gICAgLy8gSXQgaXMgY2FsbGVkIGluIHRoZSBjb25zdHJ1Y3RvciBvciBp
biB0aGUgYXVkaW8gdGhyZWFkIHdpdGggdGhlIGNvbnRleHQncyBncmFwaCBsb2NrLgotICAgIHZv
aWQgdXBkYXRlSW50ZXJuYWxCdXMoKTsKLQotICAgIC8vIEFubm91bmNlIHRvIGFueSBub2RlcyB3
ZSdyZSBjb25uZWN0ZWQgdG8gdGhhdCB3ZSBjaGFuZ2VkIG91ciBjaGFubmVsIGNvdW50IGZvciBp
dHMgaW5wdXQuCi0gICAgLy8gSXQgbXVzdCBiZSBjYWxsZWQgaW4gdGhlIGF1ZGlvIHRocmVhZCB3
aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jay4KLSAgICB2b2lkIHByb3BhZ2F0ZUNoYW5uZWxD
b3VudCgpOwotCi0gICAgLy8gdXBkYXRlTnVtYmVyT2ZDaGFubmVscygpIGlzIGNhbGxlZCBpbiB0
aGUgYXVkaW8gdGhyZWFkIGF0IHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIHJlbmRlciBxdWFudHVt
IHRvIHBpY2sgdXAgY2hhbm5lbCBjaGFuZ2VzLgotICAgIC8vIEl0IG11c3QgYmUgY2FsbGVkIHdp
dGggdGhlIGNvbnRleHQncyBncmFwaCBsb2NrLgotICAgIHZvaWQgdXBkYXRlTnVtYmVyT2ZDaGFu
bmVscygpOwotCi0gICAgLy8gbV9udW1iZXJPZkNoYW5uZWxzIHdpbGwgb25seSBiZSBjaGFuZ2Vk
IGluIHRoZSBhdWRpbyB0aHJlYWQuCi0gICAgLy8gVGhlIG1haW4gdGhyZWFkIHNldHMgbV9kZXNp
cmVkTnVtYmVyT2ZDaGFubmVscyB3aGljaCB3aWxsIGxhdGVyIGdldCBwaWNrZWQgdXAgaW4gdGhl
IGF1ZGlvIHRocmVhZCBpbiB1cGRhdGVOdW1iZXJPZkNoYW5uZWxzKCkuCi0gICAgdW5zaWduZWQg
bV9udW1iZXJPZkNoYW5uZWxzOwotICAgIHVuc2lnbmVkIG1fZGVzaXJlZE51bWJlck9mQ2hhbm5l
bHM7Ci0gICAgCi0gICAgLy8gbV9pbnRlcm5hbEJ1cyBtdXN0IG9ubHkgYmUgY2hhbmdlZCBpbiB0
aGUgYXVkaW8gdGhyZWFkIHdpdGggdGhlIGNvbnRleHQncyBncmFwaCBsb2NrIChvciBjb25zdHJ1
Y3RvcikuCi0gICAgT3duUHRyPEF1ZGlvQnVzPiBtX2ludGVybmFsQnVzOwotCi0gICAgLy8gbV9h
Y3R1YWxEZXN0aW5hdGlvbkJ1cyBpcyBzZXQgaW4gcHVsbCgpIGFuZCB3aWxsIGVpdGhlciBwb2lu
dCB0byBvbmUgb2Ygb3VyIGludGVybmFsIGJ1c3NlcyBvciB0byB0aGUgaW4tcGxhY2UgYnVzLgot
ICAgIC8vIEl0IG11c3Qgb25seSBiZSBjaGFuZ2VkIGluIHRoZSBhdWRpbyB0aHJlYWQgKG9yIGNv
bnN0cnVjdG9yKS4KLSAgICBBdWRpb0J1cyogbV9hY3R1YWxEZXN0aW5hdGlvbkJ1czsKLQotICAg
IEhhc2hTZXQ8QXVkaW9Ob2RlSW5wdXQqPiBtX2lucHV0czsKLSAgICB0eXBlZGVmIEhhc2hTZXQ8
QXVkaW9Ob2RlSW5wdXQqPjo6aXRlcmF0b3IgSW5wdXRzSXRlcmF0b3I7Ci0gICAgYm9vbCBtX2lz
RW5hYmxlZDsKLSAgICAKLSAgICAvLyBGb3IgdGhlIHB1cnBvc2VzIG9mIHJlbmRlcmluZywga2Vl
cHMgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBpbnB1dHMgd2UncmUgY29ubmVjdGVkIHRvLgotICAg
IC8vIFRoaXMgdmFsdWUgc2hvdWxkIG9ubHkgYmUgY2hhbmdlZCBhdCB0aGUgdmVyeSBzdGFydCBv
ciBlbmQgb2YgdGhlIHJlbmRlcmluZyBxdWFudHVtLgotICAgIHVuc2lnbmVkIG1fcmVuZGVyaW5n
RmFuT3V0Q291bnQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBB
dWRpb05vZGVPdXRwdXRfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5u
ZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bh
bm5lck5vZGUuY3BwCShyZXZpc2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb1Bhbm5lck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMzMCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykK
LQotI2luY2x1ZGUgIkF1ZGlvUGFubmVyTm9kZS5oIgotCi0jaW5jbHVkZSAiQXVkaW9CdWZmZXJT
b3VyY2VOb2RlLmgiCi0jaW5jbHVkZSAiQXVkaW9CdXMuaCIKLSNpbmNsdWRlICJBdWRpb0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZU91
dHB1dC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJIUlRGUGFubmVy
LmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgdm9pZCBmaXhOQU5zKGRvdWJsZSAmeCkK
LXsKLSAgICBpZiAoaXNuYW4oeCkgfHwgaXNpbmYoeCkpCi0gICAgICAgIHggPSAwLjA7Ci19Ci0K
LUF1ZGlvUGFubmVyTm9kZTo6QXVkaW9QYW5uZXJOb2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwg
ZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQot
ICAgICwgbV9wYW5uaW5nTW9kZWwoUGFubmVyOjpQYW5uaW5nTW9kZWxIUlRGKQotICAgICwgbV9s
YXN0R2FpbigtMS4wKQotICAgICwgbV9jb25uZWN0aW9uQ291bnQoMCkKLXsKLSAgICBhZGRJbnB1
dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlSW5wdXQodGhpcykpKTsKLSAgICBhZGRPdXRwdXQoYWRv
cHRQdHIobmV3IEF1ZGlvTm9kZU91dHB1dCh0aGlzLCAyKSkpOwotICAgIAotICAgIG1fZGlzdGFu
Y2VHYWluID0gQXVkaW9HYWluOjpjcmVhdGUoImRpc3RhbmNlR2FpbiIsIDEuMCwgMC4wLCAxLjAp
OwotICAgIG1fY29uZUdhaW4gPSBBdWRpb0dhaW46OmNyZWF0ZSgiY29uZUdhaW4iLCAxLjAsIDAu
MCwgMS4wKTsKLQotICAgIG1fcG9zaXRpb24gPSBGbG9hdFBvaW50M0QoMCwgMCwgMCk7Ci0gICAg
bV9vcmllbnRhdGlvbiA9IEZsb2F0UG9pbnQzRCgxLCAwLCAwKTsKLSAgICBtX3ZlbG9jaXR5ID0g
RmxvYXRQb2ludDNEKDAsIDAsIDApOwotICAgIAotICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlUGFu
bmVyKTsKLQotICAgIGluaXRpYWxpemUoKTsKLX0KLQotQXVkaW9QYW5uZXJOb2RlOjp+QXVkaW9Q
YW5uZXJOb2RlKCkKLXsKLSAgICB1bmluaXRpYWxpemUoKTsKLX0KLQotdm9pZCBBdWRpb1Bhbm5l
ck5vZGU6OnB1bGxJbnB1dHMoc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKLXsKLSAgICAvLyBXZSBv
dmVycmlkZSBwdWxsSW5wdXRzKCksIHNvIHdlIGNhbiBkZXRlY3QgbmV3IEF1ZGlvU291cmNlTm9k
ZXMgd2hpY2ggaGF2ZSBjb25uZWN0ZWQgdG8gdXMgd2hlbiBuZXcgY29ubmVjdGlvbnMgYXJlIG1h
ZGUuCi0gICAgLy8gVGhlc2UgQXVkaW9Tb3VyY2VOb2RlcyBuZWVkIHRvIGJlIG1hZGUgYXdhcmUg
b2Ygb3VyIGV4aXN0ZW5jZSBpbiBvcmRlciB0byBoYW5kbGUgZG9wcGxlciBzaGlmdCBwaXRjaCBj
aGFuZ2VzLgotICAgIGlmIChtX2Nvbm5lY3Rpb25Db3VudCAhPSBjb250ZXh0KCktPmNvbm5lY3Rp
b25Db3VudCgpKSB7Ci0gICAgICAgIG1fY29ubmVjdGlvbkNvdW50ID0gY29udGV4dCgpLT5jb25u
ZWN0aW9uQ291bnQoKTsKLQotICAgICAgICAvLyBSZWN1cnNpdmVseSBnbyB0aHJvdWdoIGFsbCBu
b2RlcyBjb25uZWN0ZWQgdG8gdXMuCi0gICAgICAgIG5vdGlmeUF1ZGlvU291cmNlc0Nvbm5lY3Rl
ZFRvTm9kZSh0aGlzKTsKLSAgICB9Ci0gICAgCi0gICAgQXVkaW9Ob2RlOjpwdWxsSW5wdXRzKGZy
YW1lc1RvUHJvY2Vzcyk7Ci19Ci0KLXZvaWQgQXVkaW9QYW5uZXJOb2RlOjpwcm9jZXNzKHNpemVf
dCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgQXVkaW9CdXMqIGRlc3RpbmF0aW9uID0gb3V0cHV0
KDApLT5idXMoKTsKLQotICAgIGlmICghaXNJbml0aWFsaXplZCgpIHx8ICFpbnB1dCgwKS0+aXND
b25uZWN0ZWQoKSB8fCAhbV9wYW5uZXIuZ2V0KCkpIHsKLSAgICAgICAgZGVzdGluYXRpb24tPnpl
cm8oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEF1ZGlvQnVzKiBzb3VyY2UgPSBp
bnB1dCgwKS0+YnVzKCk7Ci0KLSAgICBpZiAoIXNvdXJjZSkgewotICAgICAgICBkZXN0aW5hdGlv
bi0+emVybygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQXBwbHkgdGhlIHBh
bm5pbmcgZWZmZWN0LgotICAgIGRvdWJsZSBhemltdXRoOwotICAgIGRvdWJsZSBlbGV2YXRpb247
Ci0gICAgZ2V0QXppbXV0aEVsZXZhdGlvbigmYXppbXV0aCwgJmVsZXZhdGlvbik7Ci0gICAgbV9w
YW5uZXItPnBhbihhemltdXRoLCBlbGV2YXRpb24sIHNvdXJjZSwgZGVzdGluYXRpb24sIGZyYW1l
c1RvUHJvY2Vzcyk7Ci0KLSAgICAvLyBHZXQgdGhlIGRpc3RhbmNlIGFuZCBjb25lIGdhaW4uCi0g
ICAgZG91YmxlIHRvdGFsR2FpbiA9IGRpc3RhbmNlQ29uZUdhaW4oKTsKLQotICAgIC8vIFNuYXAg
dG8gZGVzaXJlZCBnYWluIGF0IHRoZSBiZWdpbm5pbmcuCi0gICAgaWYgKG1fbGFzdEdhaW4gPT0g
LTEuMCkKLSAgICAgICAgbV9sYXN0R2FpbiA9IHRvdGFsR2FpbjsKLSAgICAgICAgCi0gICAgLy8g
QXBwbHkgZ2FpbiBpbi1wbGFjZSB3aXRoIGRlLXppcHBlcmluZy4KLSAgICBkZXN0aW5hdGlvbi0+
Y29weVdpdGhHYWluRnJvbSgqZGVzdGluYXRpb24sICZtX2xhc3RHYWluLCB0b3RhbEdhaW4pOwot
fQotCi12b2lkIEF1ZGlvUGFubmVyTm9kZTo6cmVzZXQoKQotewotICAgIG1fbGFzdEdhaW4gPSAt
MS4wOyAvLyBmb3JjZSB0byBzbmFwIHRvIGluaXRpYWwgZ2FpbgotICAgIGlmIChtX3Bhbm5lci5n
ZXQoKSkKLSAgICAgICAgbV9wYW5uZXItPnJlc2V0KCk7Ci19Ci0KLXZvaWQgQXVkaW9QYW5uZXJO
b2RlOjppbml0aWFsaXplKCkKLXsKLSAgICBpZiAoaXNJbml0aWFsaXplZCgpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIAotICAgIG1fcGFubmVyID0gUGFubmVyOjpjcmVhdGUobV9wYW5uaW5n
TW9kZWwsIHNhbXBsZVJhdGUoKSk7Ci0KLSAgICBBdWRpb05vZGU6OmluaXRpYWxpemUoKTsKLX0K
LQotdm9pZCBBdWRpb1Bhbm5lck5vZGU6OnVuaW5pdGlhbGl6ZSgpCi17Ci0gICAgaWYgKCFpc0lu
aXRpYWxpemVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgbV9wYW5uZXIuY2xl
YXIoKTsKLSAgICBBdWRpb05vZGU6OnVuaW5pdGlhbGl6ZSgpOwotfQotCi1BdWRpb0xpc3RlbmVy
KiBBdWRpb1Bhbm5lck5vZGU6Omxpc3RlbmVyKCkKLXsKLSAgICByZXR1cm4gY29udGV4dCgpLT5s
aXN0ZW5lcigpOwotfQotCi12b2lkIEF1ZGlvUGFubmVyTm9kZTo6c2V0UGFubmluZ01vZGVsKHVu
c2lnbmVkIHNob3J0IG1vZGVsLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzd2l0Y2ggKG1v
ZGVsKSB7Ci0gICAgY2FzZSBFUVVBTFBPV0VSOgotICAgIGNhc2UgSFJURjoKLSAgICAgICAgaWYg
KCFtX3Bhbm5lci5nZXQoKSB8fCBtb2RlbCAhPSBtX3Bhbm5pbmdNb2RlbCkgewotICAgICAgICAg
ICAgT3duUHRyPFBhbm5lcj4gbmV3UGFubmVyID0gUGFubmVyOjpjcmVhdGUobW9kZWwsIHNhbXBs
ZVJhdGUoKSk7Ci0gICAgICAgICAgICBtX3Bhbm5lciA9IG5ld1Bhbm5lci5yZWxlYXNlKCk7Ci0g
ICAgICAgICAgICBtX3Bhbm5pbmdNb2RlbCA9IG1vZGVsOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgU09VTkRGSUVMRDoKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBz
b3VuZCBmaWVsZCBtb2RlbC4gU2VlIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03NzM2Ny4KLSAgICAgICAgLy8gRm9yIG5vdywgZmFsbCB0aHJvdWdoIHRvIHRocm93
IGFuIGV4Y2VwdGlvbi4KLSAgICBkZWZhdWx0OgotICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURf
RVJSOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgQXVkaW9QYW5uZXJOb2RlOjpn
ZXRBemltdXRoRWxldmF0aW9uKGRvdWJsZSogb3V0QXppbXV0aCwgZG91YmxlKiBvdXRFbGV2YXRp
b24pCi17Ci0gICAgLy8gRklYTUU6IHdlIHNob3VsZCBjYWNoZSBhemltdXRoIGFuZCBlbGV2YXRp
b24gKGlmIHBvc3NpYmxlKSwgc28gd2Ugb25seSByZS1jYWxjdWxhdGUgaWYgYSBjaGFuZ2UgaGFz
IGJlZW4gbWFkZS4KLQotICAgIGRvdWJsZSBhemltdXRoID0gMC4wOwotCi0gICAgLy8gQ2FsY3Vs
YXRlIHRoZSBzb3VyY2UtbGlzdGVuZXIgdmVjdG9yCi0gICAgRmxvYXRQb2ludDNEIGxpc3RlbmVy
UG9zaXRpb24gPSBsaXN0ZW5lcigpLT5wb3NpdGlvbigpOwotICAgIEZsb2F0UG9pbnQzRCBzb3Vy
Y2VMaXN0ZW5lciA9IG1fcG9zaXRpb24gLSBsaXN0ZW5lclBvc2l0aW9uOwotCi0gICAgaWYgKHNv
dXJjZUxpc3RlbmVyLmlzWmVybygpKSB7Ci0gICAgICAgIC8vIGRlZ2VuZXJhdGUgY2FzZSBpZiBz
b3VyY2UgYW5kIGxpc3RlbmVyIGFyZSBhdCB0aGUgc2FtZSBwb2ludAotICAgICAgICAqb3V0QXpp
bXV0aCA9IDAuMDsKLSAgICAgICAgKm91dEVsZXZhdGlvbiA9IDAuMDsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIHNvdXJjZUxpc3RlbmVyLm5vcm1hbGl6ZSgpOwotCi0gICAgLy8gQWxp
Z24gYXhlcwotICAgIEZsb2F0UG9pbnQzRCBsaXN0ZW5lckZyb250ID0gbGlzdGVuZXIoKS0+b3Jp
ZW50YXRpb24oKTsKLSAgICBGbG9hdFBvaW50M0QgbGlzdGVuZXJVcCA9IGxpc3RlbmVyKCktPnVw
VmVjdG9yKCk7Ci0gICAgRmxvYXRQb2ludDNEIGxpc3RlbmVyUmlnaHQgPSBsaXN0ZW5lckZyb250
LmNyb3NzKGxpc3RlbmVyVXApOwotICAgIGxpc3RlbmVyUmlnaHQubm9ybWFsaXplKCk7Ci0KLSAg
ICBGbG9hdFBvaW50M0QgbGlzdGVuZXJGcm9udE5vcm0gPSBsaXN0ZW5lckZyb250OwotICAgIGxp
c3RlbmVyRnJvbnROb3JtLm5vcm1hbGl6ZSgpOwotCi0gICAgRmxvYXRQb2ludDNEIHVwID0gbGlz
dGVuZXJSaWdodC5jcm9zcyhsaXN0ZW5lckZyb250Tm9ybSk7Ci0KLSAgICBmbG9hdCB1cFByb2pl
Y3Rpb24gPSBzb3VyY2VMaXN0ZW5lci5kb3QodXApOwotCi0gICAgRmxvYXRQb2ludDNEIHByb2pl
Y3RlZFNvdXJjZSA9IHNvdXJjZUxpc3RlbmVyIC0gdXBQcm9qZWN0aW9uICogdXA7Ci0gICAgcHJv
amVjdGVkU291cmNlLm5vcm1hbGl6ZSgpOwotCi0gICAgYXppbXV0aCA9IDE4MC4wICogYWNvcyhw
cm9qZWN0ZWRTb3VyY2UuZG90KGxpc3RlbmVyUmlnaHQpKSAvIHBpRG91YmxlOwotICAgIGZpeE5B
TnMoYXppbXV0aCk7IC8vIGF2b2lkIGlsbGVnYWwgdmFsdWVzCi0KLSAgICAvLyBTb3VyY2UgIGlu
IGZyb250IG9yIGJlaGluZCB0aGUgbGlzdGVuZXIKLSAgICBkb3VibGUgZnJvbnRCYWNrID0gcHJv
amVjdGVkU291cmNlLmRvdChsaXN0ZW5lckZyb250Tm9ybSk7Ci0gICAgaWYgKGZyb250QmFjayA8
IDAuMCkKLSAgICAgICAgYXppbXV0aCA9IDM2MC4wIC0gYXppbXV0aDsKLQotICAgIC8vIE1ha2Ug
YXppbXV0aCByZWxhdGl2ZSB0byAiZnJvbnQiIGFuZCBub3QgInJpZ2h0IiBsaXN0ZW5lciB2ZWN0
b3IKLSAgICBpZiAoKGF6aW11dGggPj0gMC4wKSAmJiAoYXppbXV0aCA8PSAyNzAuMCkpCi0gICAg
ICAgIGF6aW11dGggPSA5MC4wIC0gYXppbXV0aDsKLSAgICBlbHNlCi0gICAgICAgIGF6aW11dGgg
PSA0NTAuMCAtIGF6aW11dGg7Ci0KLSAgICAvLyBFbGV2YXRpb24KLSAgICBkb3VibGUgZWxldmF0
aW9uID0gOTAuMCAtIDE4MC4wICogYWNvcyhzb3VyY2VMaXN0ZW5lci5kb3QodXApKSAvIHBpRG91
YmxlOwotICAgIGZpeE5BTnMoZWxldmF0aW9uKTsgLy8gYXZvaWQgaWxsZWdhbCB2YWx1ZXMKLQot
ICAgIGlmIChlbGV2YXRpb24gPiA5MC4wKQotICAgICAgICBlbGV2YXRpb24gPSAxODAuMCAtIGVs
ZXZhdGlvbjsKLSAgICBlbHNlIGlmIChlbGV2YXRpb24gPCAtOTAuMCkKLSAgICAgICAgZWxldmF0
aW9uID0gLTE4MC4wIC0gZWxldmF0aW9uOwotCi0gICAgaWYgKG91dEF6aW11dGgpCi0gICAgICAg
ICpvdXRBemltdXRoID0gYXppbXV0aDsKLSAgICBpZiAob3V0RWxldmF0aW9uKQotICAgICAgICAq
b3V0RWxldmF0aW9uID0gZWxldmF0aW9uOwotfQotCi1mbG9hdCBBdWRpb1Bhbm5lck5vZGU6OmRv
cHBsZXJSYXRlKCkKLXsKLSAgICBkb3VibGUgZG9wcGxlclNoaWZ0ID0gMS4wOwotCi0gICAgLy8g
RklYTUU6IG9wdGltaXplIGZvciBjYXNlIHdoZW4gbmVpdGhlciBzb3VyY2Ugbm9yIGxpc3RlbmVy
IGhhcyBjaGFuZ2VkLi4uCi0gICAgZG91YmxlIGRvcHBsZXJGYWN0b3IgPSBsaXN0ZW5lcigpLT5k
b3BwbGVyRmFjdG9yKCk7Ci0KLSAgICBpZiAoZG9wcGxlckZhY3RvciA+IDAuMCkgewotICAgICAg
ICBkb3VibGUgc3BlZWRPZlNvdW5kID0gbGlzdGVuZXIoKS0+c3BlZWRPZlNvdW5kKCk7Ci0KLSAg
ICAgICAgY29uc3QgRmxvYXRQb2ludDNEICZzb3VyY2VWZWxvY2l0eSA9IG1fdmVsb2NpdHk7Ci0g
ICAgICAgIGNvbnN0IEZsb2F0UG9pbnQzRCAmbGlzdGVuZXJWZWxvY2l0eSA9IGxpc3RlbmVyKCkt
PnZlbG9jaXR5KCk7Ci0KLSAgICAgICAgLy8gRG9uJ3QgYm90aGVyIGlmIGJvdGggc291cmNlIGFu
ZCBsaXN0ZW5lciBoYXZlIG5vIHZlbG9jaXR5Ci0gICAgICAgIGJvb2wgc291cmNlSGFzVmVsb2Np
dHkgPSAhc291cmNlVmVsb2NpdHkuaXNaZXJvKCk7Ci0gICAgICAgIGJvb2wgbGlzdGVuZXJIYXNW
ZWxvY2l0eSA9ICFsaXN0ZW5lclZlbG9jaXR5LmlzWmVybygpOwotCi0gICAgICAgIGlmIChzb3Vy
Y2VIYXNWZWxvY2l0eSB8fCBsaXN0ZW5lckhhc1ZlbG9jaXR5KSB7Ci0gICAgICAgICAgICAvLyBD
YWxjdWxhdGUgdGhlIHNvdXJjZSB0byBsaXN0ZW5lciB2ZWN0b3IKLSAgICAgICAgICAgIEZsb2F0
UG9pbnQzRCBsaXN0ZW5lclBvc2l0aW9uID0gbGlzdGVuZXIoKS0+cG9zaXRpb24oKTsKLSAgICAg
ICAgICAgIEZsb2F0UG9pbnQzRCBzb3VyY2VUb0xpc3RlbmVyID0gbV9wb3NpdGlvbiAtIGxpc3Rl
bmVyUG9zaXRpb247Ci0KLSAgICAgICAgICAgIGRvdWJsZSBzb3VyY2VMaXN0ZW5lck1hZ25pdHVk
ZSA9IHNvdXJjZVRvTGlzdGVuZXIubGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIGRvdWJsZSBsaXN0
ZW5lclByb2plY3Rpb24gPSBzb3VyY2VUb0xpc3RlbmVyLmRvdChsaXN0ZW5lclZlbG9jaXR5KSAv
IHNvdXJjZUxpc3RlbmVyTWFnbml0dWRlOwotICAgICAgICAgICAgZG91YmxlIHNvdXJjZVByb2pl
Y3Rpb24gPSBzb3VyY2VUb0xpc3RlbmVyLmRvdChzb3VyY2VWZWxvY2l0eSkgLyBzb3VyY2VMaXN0
ZW5lck1hZ25pdHVkZTsKLQotICAgICAgICAgICAgbGlzdGVuZXJQcm9qZWN0aW9uID0gLWxpc3Rl
bmVyUHJvamVjdGlvbjsKLSAgICAgICAgICAgIHNvdXJjZVByb2plY3Rpb24gPSAtc291cmNlUHJv
amVjdGlvbjsKLQotICAgICAgICAgICAgZG91YmxlIHNjYWxlZFNwZWVkT2ZTb3VuZCA9IHNwZWVk
T2ZTb3VuZCAvIGRvcHBsZXJGYWN0b3I7Ci0gICAgICAgICAgICBsaXN0ZW5lclByb2plY3Rpb24g
PSBtaW4obGlzdGVuZXJQcm9qZWN0aW9uLCBzY2FsZWRTcGVlZE9mU291bmQpOwotICAgICAgICAg
ICAgc291cmNlUHJvamVjdGlvbiA9IG1pbihzb3VyY2VQcm9qZWN0aW9uLCBzY2FsZWRTcGVlZE9m
U291bmQpOwotCi0gICAgICAgICAgICBkb3BwbGVyU2hpZnQgPSAoKHNwZWVkT2ZTb3VuZCAtIGRv
cHBsZXJGYWN0b3IgKiBsaXN0ZW5lclByb2plY3Rpb24pIC8gKHNwZWVkT2ZTb3VuZCAtIGRvcHBs
ZXJGYWN0b3IgKiBzb3VyY2VQcm9qZWN0aW9uKSk7Ci0gICAgICAgICAgICBmaXhOQU5zKGRvcHBs
ZXJTaGlmdCk7IC8vIGF2b2lkIGlsbGVnYWwgdmFsdWVzCi0KLSAgICAgICAgICAgIC8vIExpbWl0
IHRoZSBwaXRjaCBzaGlmdGluZyB0byA0IG9jdGF2ZXMgdXAgYW5kIDMgb2N0YXZlcyBkb3duLgot
ICAgICAgICAgICAgaWYgKGRvcHBsZXJTaGlmdCA+IDE2LjApCi0gICAgICAgICAgICAgICAgZG9w
cGxlclNoaWZ0ID0gMTYuMDsKLSAgICAgICAgICAgIGVsc2UgaWYgKGRvcHBsZXJTaGlmdCA8IDAu
MTI1KQotICAgICAgICAgICAgICAgIGRvcHBsZXJTaGlmdCA9IDAuMTI1OyAgIAotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pihkb3BwbGVyU2hpZnQpOwot
fQotCi1mbG9hdCBBdWRpb1Bhbm5lck5vZGU6OmRpc3RhbmNlQ29uZUdhaW4oKQotewotICAgIEZs
b2F0UG9pbnQzRCBsaXN0ZW5lclBvc2l0aW9uID0gbGlzdGVuZXIoKS0+cG9zaXRpb24oKTsKLQot
ICAgIGRvdWJsZSBsaXN0ZW5lckRpc3RhbmNlID0gbV9wb3NpdGlvbi5kaXN0YW5jZVRvKGxpc3Rl
bmVyUG9zaXRpb24pOwotICAgIGRvdWJsZSBkaXN0YW5jZUdhaW4gPSBtX2Rpc3RhbmNlRWZmZWN0
LmdhaW4obGlzdGVuZXJEaXN0YW5jZSk7Ci0gICAgCi0gICAgbV9kaXN0YW5jZUdhaW4tPnNldFZh
bHVlKHN0YXRpY19jYXN0PGZsb2F0PihkaXN0YW5jZUdhaW4pKTsKLQotICAgIC8vIEZJWE1FOiBj
b3VsZCBvcHRpbWl6ZSBieSBjYWNoaW5nIGNvbmVHYWluCi0gICAgZG91YmxlIGNvbmVHYWluID0g
bV9jb25lRWZmZWN0LmdhaW4obV9wb3NpdGlvbiwgbV9vcmllbnRhdGlvbiwgbGlzdGVuZXJQb3Np
dGlvbik7Ci0gICAgCi0gICAgbV9jb25lR2Fpbi0+c2V0VmFsdWUoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGNvbmVHYWluKSk7Ci0KLSAgICByZXR1cm4gZmxvYXQoZGlzdGFuY2VHYWluICogY29uZUdhaW4p
OwotfQotCi12b2lkIEF1ZGlvUGFubmVyTm9kZTo6bm90aWZ5QXVkaW9Tb3VyY2VzQ29ubmVjdGVk
VG9Ob2RlKEF1ZGlvTm9kZSogbm9kZSkKLXsKLSAgICBBU1NFUlQobm9kZSk7Ci0gICAgaWYgKCFu
b2RlKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIC8vIEZpcnN0IGNoZWNrIGlmIHRo
aXMgbm9kZSBpcyBhbiBBdWRpb0J1ZmZlclNvdXJjZU5vZGUuICBJZiBzbywgbGV0IGl0IGtub3cg
YWJvdXQgdXMgc28gdGhhdCBkb3BwbGVyIHNoaWZ0IHBpdGNoIGNhbiBiZSB0YWtlbiBpbnRvIGFj
Y291bnQuCi0gICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZVR5cGVBdWRpb0J1ZmZlclNv
dXJjZSkgewotICAgICAgICBBdWRpb0J1ZmZlclNvdXJjZU5vZGUqIGJ1ZmZlclNvdXJjZU5vZGUg
PSByZWludGVycHJldF9jYXN0PEF1ZGlvQnVmZmVyU291cmNlTm9kZSo+KG5vZGUpOwotICAgICAg
ICBidWZmZXJTb3VyY2VOb2RlLT5zZXRQYW5uZXJOb2RlKHRoaXMpOwotICAgIH0gZWxzZSB7ICAg
IAotICAgICAgICAvLyBHbyB0aHJvdWdoIGFsbCBpbnB1dHMgdG8gdGhpcyBub2RlLgotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZS0+bnVtYmVyT2ZJbnB1dHMoKTsgKytpKSB7
Ci0gICAgICAgICAgICBBdWRpb05vZGVJbnB1dCogaW5wdXQgPSBub2RlLT5pbnB1dChpKTsKLQot
ICAgICAgICAgICAgLy8gRm9yIGVhY2ggaW5wdXQsIGdvIHRocm91Z2ggYWxsIG9mIGl0cyBjb25u
ZWN0aW9ucywgbG9va2luZyBmb3IgQXVkaW9CdWZmZXJTb3VyY2VOb2Rlcy4KLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBpbnB1dC0+bnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0
aW9ucygpOyArK2opIHsKLSAgICAgICAgICAgICAgICBBdWRpb05vZGVPdXRwdXQqIGNvbm5lY3Rl
ZE91dHB1dCA9IGlucHV0LT5yZW5kZXJpbmdPdXRwdXQoaik7Ci0gICAgICAgICAgICAgICAgQXVk
aW9Ob2RlKiBjb25uZWN0ZWROb2RlID0gY29ubmVjdGVkT3V0cHV0LT5ub2RlKCk7Ci0gICAgICAg
ICAgICAgICAgbm90aWZ5QXVkaW9Tb3VyY2VzQ29ubmVjdGVkVG9Ob2RlKGNvbm5lY3RlZE5vZGUp
OyAvLyByZWN1cnNlCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaAkocmV2aXNpb24gMTExMjMz
KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEF1ZGlvUGFubmVy
Tm9kZV9oCi0jZGVmaW5lIEF1ZGlvUGFubmVyTm9kZV9oCi0KLSNpbmNsdWRlICJBdWRpb0J1cy5o
IgotI2luY2x1ZGUgIkF1ZGlvR2Fpbi5oIgotI2luY2x1ZGUgIkF1ZGlvTGlzdGVuZXIuaCIKLSNp
bmNsdWRlICJBdWRpb05vZGUuaCIKLSNpbmNsdWRlICJDb25lLmgiCi0jaW5jbHVkZSAiRGlzdGFu
Y2UuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKLSNpbmNsdWRlICJQYW5uZXIuaCIKLSNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gQXVkaW9Q
YW5uZXJOb2RlIGlzIGFuIEF1ZGlvTm9kZSB3aXRoIG9uZSBpbnB1dCBhbmQgb25lIG91dHB1dC4K
LS8vIEl0IHBvc2l0aW9ucyBhIHNvdW5kIGluIDNEIHNwYWNlLCB3aXRoIHRoZSBleGFjdCBlZmZl
Y3QgZGVwZW5kZW50IG9uIHRoZSBwYW5uaW5nIG1vZGVsLgotLy8gSXQgaGFzIGEgcG9zaXRpb24g
YW5kIGFuIG9yaWVudGF0aW9uIGluIDNEIHNwYWNlIHdoaWNoIGlzIHJlbGF0aXZlIHRvIHRoZSBw
b3NpdGlvbiBhbmQgb3JpZW50YXRpb24gb2YgdGhlIGNvbnRleHQncyBBdWRpb0xpc3RlbmVyLgot
Ly8gQSBkaXN0YW5jZSBlZmZlY3Qgd2lsbCBhdHRlbnVhdGUgdGhlIGdhaW4gYXMgdGhlIHBvc2l0
aW9uIG1vdmVzIGF3YXkgZnJvbSB0aGUgbGlzdGVuZXIuCi0vLyBBIGNvbmUgZWZmZWN0IHdpbGwg
YXR0ZW51YXRlIHRoZSBnYWluIGFzIHRoZSBvcmllbnRhdGlvbiBtb3ZlcyBhd2F5IGZyb20gdGhl
IGxpc3RlbmVyLgotLy8gQWxsIG9mIHRoZXNlIGVmZmVjdHMgZm9sbG93IHRoZSBPcGVuQUwgc3Bl
Y2lmaWNhdGlvbiB2ZXJ5IGNsb3NlbHkuCi0KLWNsYXNzIEF1ZGlvUGFubmVyTm9kZSA6IHB1Ymxp
YyBBdWRpb05vZGUgewotcHVibGljOgotICAgIC8vIFRoZXNlIG11c3QgYmUgZGVmaW5lZCBhcyBp
biB0aGUgLmlkbCBmaWxlIGFuZCBtdXN0IG1hdGNoIHRob3NlIGluIHRoZSBQYW5uZXIgY2xhc3Mu
Ci0gICAgZW51bSB7Ci0gICAgICAgIEVRVUFMUE9XRVIgPSAwLAotICAgICAgICBIUlRGID0gMSwK
LSAgICAgICAgU09VTkRGSUVMRCA9IDIsCi0gICAgfTsKLQotICAgIC8vIFRoZXNlIG11c3QgYmUg
ZGVmaW5lZCBhcyBpbiB0aGUgLmlkbCBmaWxlIGFuZCBtdXN0IG1hdGNoIHRob3NlCi0gICAgLy8g
aW4gdGhlIERpc3RhbmNlRWZmZWN0IGNsYXNzLgotICAgIGVudW0gewotICAgICAgICBMSU5FQVJf
RElTVEFOQ0UgPSAwLAotICAgICAgICBJTlZFUlNFX0RJU1RBTkNFID0gMSwKLSAgICAgICAgRVhQ
T05FTlRJQUxfRElTVEFOQ0UgPSAyLAotICAgIH07Ci0gICAgCi0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8QXVkaW9QYW5uZXJOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBz
YW1wbGVSYXRlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBdWRpb1Bhbm5l
ck5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgfkF1ZGlv
UGFubmVyTm9kZSgpOwotCi0gICAgLy8gQXVkaW9Ob2RlCi0gICAgdmlydHVhbCB2b2lkIHByb2Nl
c3Moc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgdmlydHVhbCB2b2lkIHB1bGxJbnB1dHMo
c2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgdmlydHVhbCB2b2lkIHJlc2V0KCk7Ci0gICAg
dmlydHVhbCB2b2lkIGluaXRpYWxpemUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdW5pbml0aWFsaXpl
KCk7Ci0KLSAgICAvLyBMaXN0ZW5lcgotICAgIEF1ZGlvTGlzdGVuZXIqIGxpc3RlbmVyKCk7Ci0K
LSAgICAvLyBQYW5uaW5nIG1vZGVsCi0gICAgdW5zaWduZWQgc2hvcnQgcGFubmluZ01vZGVsKCkg
Y29uc3QgeyByZXR1cm4gbV9wYW5uaW5nTW9kZWw7IH0KLSAgICB2b2lkIHNldFBhbm5pbmdNb2Rl
bCh1bnNpZ25lZCBzaG9ydCwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgLy8gUG9zaXRpb24KLSAg
ICBGbG9hdFBvaW50M0QgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9Ci0g
ICAgdm9pZCBzZXRQb3NpdGlvbihmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7IG1fcG9zaXRp
b24gPSBGbG9hdFBvaW50M0QoeCwgeSwgeik7IH0KLQotICAgIC8vIE9yaWVudGF0aW9uCi0gICAg
RmxvYXRQb2ludDNEIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQot
ICAgIHZvaWQgc2V0T3JpZW50YXRpb24oZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikgeyBtX29y
aWVudGF0aW9uID0gRmxvYXRQb2ludDNEKHgsIHksIHopOyB9Ci0KLSAgICAvLyBWZWxvY2l0eQot
ICAgIEZsb2F0UG9pbnQzRCB2ZWxvY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVsb2NpdHk7IH0K
LSAgICB2b2lkIHNldFZlbG9jaXR5KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopIHsgbV92ZWxv
Y2l0eSA9IEZsb2F0UG9pbnQzRCh4LCB5LCB6KTsgfQotCi0gICAgLy8gRGlzdGFuY2UgcGFyYW1l
dGVycwotICAgIHVuc2lnbmVkIHNob3J0IGRpc3RhbmNlTW9kZWwoKSB7IHJldHVybiBtX2Rpc3Rh
bmNlRWZmZWN0Lm1vZGVsKCk7IH0KLSAgICB2b2lkIHNldERpc3RhbmNlTW9kZWwodW5zaWduZWQg
c2hvcnQgbW9kZWwpIHsgbV9kaXN0YW5jZUVmZmVjdC5zZXRNb2RlbChzdGF0aWNfY2FzdDxEaXN0
YW5jZUVmZmVjdDo6TW9kZWxUeXBlPihtb2RlbCksIHRydWUpOyB9Ci0gICAgCi0gICAgZmxvYXQg
cmVmRGlzdGFuY2UoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV9kaXN0YW5jZUVmZmVj
dC5yZWZEaXN0YW5jZSgpKTsgfQotICAgIHZvaWQgc2V0UmVmRGlzdGFuY2UoZmxvYXQgcmVmRGlz
dGFuY2UpIHsgbV9kaXN0YW5jZUVmZmVjdC5zZXRSZWZEaXN0YW5jZShyZWZEaXN0YW5jZSk7IH0K
LQotICAgIGZsb2F0IG1heERpc3RhbmNlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1f
ZGlzdGFuY2VFZmZlY3QubWF4RGlzdGFuY2UoKSk7IH0KLSAgICB2b2lkIHNldE1heERpc3RhbmNl
KGZsb2F0IG1heERpc3RhbmNlKSB7IG1fZGlzdGFuY2VFZmZlY3Quc2V0TWF4RGlzdGFuY2UobWF4
RGlzdGFuY2UpOyB9Ci0KLSAgICBmbG9hdCByb2xsb2ZmRmFjdG9yKCkgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG1fZGlzdGFuY2VFZmZlY3Qucm9sbG9mZkZhY3RvcigpKTsgfQotICAgIHZv
aWQgc2V0Um9sbG9mZkZhY3RvcihmbG9hdCByb2xsb2ZmRmFjdG9yKSB7IG1fZGlzdGFuY2VFZmZl
Y3Quc2V0Um9sbG9mZkZhY3Rvcihyb2xsb2ZmRmFjdG9yKTsgfQotCi0gICAgLy8gU291bmQgY29u
ZXMgLSBhbmdsZXMgaW4gZGVncmVlcwotICAgIGZsb2F0IGNvbmVJbm5lckFuZ2xlKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fY29uZUVmZmVjdC5pbm5lckFuZ2xlKCkpOyB9
Ci0gICAgdm9pZCBzZXRDb25lSW5uZXJBbmdsZShmbG9hdCBhbmdsZSkgeyBtX2NvbmVFZmZlY3Qu
c2V0SW5uZXJBbmdsZShhbmdsZSk7IH0KLQotICAgIGZsb2F0IGNvbmVPdXRlckFuZ2xlKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fY29uZUVmZmVjdC5vdXRlckFuZ2xlKCkp
OyB9Ci0gICAgdm9pZCBzZXRDb25lT3V0ZXJBbmdsZShmbG9hdCBhbmdsZSkgeyBtX2NvbmVFZmZl
Y3Quc2V0T3V0ZXJBbmdsZShhbmdsZSk7IH0KLQotICAgIGZsb2F0IGNvbmVPdXRlckdhaW4oKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV9jb25lRWZmZWN0Lm91dGVyR2Fpbigp
KTsgfQotICAgIHZvaWQgc2V0Q29uZU91dGVyR2FpbihmbG9hdCBhbmdsZSkgeyBtX2NvbmVFZmZl
Y3Quc2V0T3V0ZXJHYWluKGFuZ2xlKTsgfQotCi0gICAgdm9pZCBnZXRBemltdXRoRWxldmF0aW9u
KGRvdWJsZSogb3V0QXppbXV0aCwgZG91YmxlKiBvdXRFbGV2YXRpb24pOwotICAgIGZsb2F0IGRv
cHBsZXJSYXRlKCk7Ci0KLSAgICAvLyBBY2Nlc3NvcnMgZm9yIGR5bmFtaWNhbGx5IGNhbGN1bGF0
ZWQgZ2FpbiB2YWx1ZXMuCi0gICAgQXVkaW9HYWluKiBkaXN0YW5jZUdhaW4oKSB7IHJldHVybiBt
X2Rpc3RhbmNlR2Fpbi5nZXQoKTsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICBBdWRpb0dhaW4qIGNvbmVHYWluKCkgeyByZXR1cm4gbV9jb25lR2Fpbi5nZXQo
KTsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQotICAgIHZpcnR1
YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9wYW5uZXIgPyBt
X3Bhbm5lci0+dGFpbFRpbWUoKSA6IDA7IH0KLSAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGlt
ZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcGFubmVyID8gbV9wYW5uZXItPmxhdGVuY3lU
aW1lKCkgOiAwOyB9Ci0KLXByaXZhdGU6Ci0gICAgQXVkaW9QYW5uZXJOb2RlKEF1ZGlvQ29udGV4
dCosIGZsb2F0IHNhbXBsZVJhdGUpOwotCi0gICAgLy8gUmV0dXJucyB0aGUgY29tYmluZWQgZGlz
dGFuY2UgYW5kIGNvbmUgZ2FpbiBhdHRlbnVhdGlvbi4KLSAgICBmbG9hdCBkaXN0YW5jZUNvbmVH
YWluKCk7Ci0KLSAgICAvLyBOb3RpZmllcyBhbnkgQXVkaW9CdWZmZXJTb3VyY2VOb2RlcyBjb25u
ZWN0ZWQgdG8gdXMgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgYWJvdXQgb3VyIGV4aXN0
ZW5jZS4KLSAgICAvLyBUaGlzIGlzIGluIG9yZGVyIHRvIGhhbmRsZSB0aGUgcGl0Y2ggY2hhbmdl
IG5lY2Vzc2FyeSBmb3IgdGhlIGRvcHBsZXIgc2hpZnQuCi0gICAgdm9pZCBub3RpZnlBdWRpb1Nv
dXJjZXNDb25uZWN0ZWRUb05vZGUoQXVkaW9Ob2RlKik7Ci0KLSAgICBPd25QdHI8UGFubmVyPiBt
X3Bhbm5lcjsKLSAgICB1bnNpZ25lZCBtX3Bhbm5pbmdNb2RlbDsKLQotICAgIEZsb2F0UG9pbnQz
RCBtX3Bvc2l0aW9uOwotICAgIEZsb2F0UG9pbnQzRCBtX29yaWVudGF0aW9uOwotICAgIEZsb2F0
UG9pbnQzRCBtX3ZlbG9jaXR5OwotCi0gICAgLy8gR2FpbgotICAgIFJlZlB0cjxBdWRpb0dhaW4+
IG1fZGlzdGFuY2VHYWluOwotICAgIFJlZlB0cjxBdWRpb0dhaW4+IG1fY29uZUdhaW47Ci0gICAg
RGlzdGFuY2VFZmZlY3QgbV9kaXN0YW5jZUVmZmVjdDsKLSAgICBDb25lRWZmZWN0IG1fY29uZUVm
ZmVjdDsKLSAgICBmbG9hdCBtX2xhc3RHYWluOwotCi0gICAgdW5zaWduZWQgbV9jb25uZWN0aW9u
Q291bnQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBBdWRpb1Bh
bm5lck5vZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2Rl
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5v
ZGUuaWRsCShyZXZpc2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b1Bhbm5lck5vZGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi1tb2R1bGUgYXVkaW8gewotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFs
PVdFQl9BVURJTywKLSAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKLSAgICBdIEF1ZGlvUGFu
bmVyTm9kZSA6IEF1ZGlvTm9kZSB7Ci0gICAgICAgIC8vIFBhbm5pbmcgbW9kZWwKLSAgICAgICAg
Y29uc3QgdW5zaWduZWQgc2hvcnQgRVFVQUxQT1dFUiA9IDA7Ci0gICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IEhSVEYgPSAxOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBTT1VOREZJ
RUxEID0gMjsKLQotICAgICAgICAvLyBEaXN0YW5jZSBtb2RlbAotICAgICAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCBMSU5FQVJfRElTVEFOQ0UgPSAwOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCBJTlZFUlNFX0RJU1RBTkNFID0gMTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
RVhQT05FTlRJQUxfRElTVEFOQ0UgPSAyOwotCi0gICAgICAgIC8vIERlZmF1bHQgbW9kZWwgZm9y
IHN0ZXJlbyBpcyBIUlRGIAotICAgICAgICAvLyBGSVhNRTogdXNlIHVuc2lnbmVkIHNob3J0IHdo
ZW4gZ2x1ZSBnZW5lcmF0aW9uIHN1cHBvcnRzIGl0Ci0gICAgICAgIGF0dHJpYnV0ZSB1bnNpZ25l
ZCBsb25nIHBhbm5pbmdNb2RlbAotICAgICAgICAgICAgc2V0dGVyIHJhaXNlcyhET01FeGNlcHRp
b24pOwotCi0gICAgICAgIC8vIFVzZXMgYSAzRCBjYXJ0ZXNpYW4gY29vcmRpbmF0ZSBzeXN0ZW0g
Ci0gICAgICAgIHZvaWQgc2V0UG9zaXRpb24oaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSwgaW4gZmxv
YXQgeik7Ci0gICAgICAgIHZvaWQgc2V0T3JpZW50YXRpb24oaW4gZmxvYXQgeCwgaW4gZmxvYXQg
eSwgaW4gZmxvYXQgeik7Ci0gICAgICAgIHZvaWQgc2V0VmVsb2NpdHkoaW4gZmxvYXQgeCwgaW4g
ZmxvYXQgeSwgaW4gZmxvYXQgeik7Ci0KLSAgICAgICAgLy8gRGlzdGFuY2UgbW9kZWwKLSAgICAg
ICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgZGlzdGFuY2VNb2RlbDsgLy8gRklYTUU6IHVzZSB1
bnNpZ25lZCBzaG9ydCB3aGVuIGdsdWUgZ2VuZXJhdGlvbiBzdXBwb3J0cyBpdAotICAgICAgICBh
dHRyaWJ1dGUgZmxvYXQgcmVmRGlzdGFuY2U7Ci0gICAgICAgIGF0dHJpYnV0ZSBmbG9hdCBtYXhE
aXN0YW5jZTsKLSAgICAgICAgYXR0cmlidXRlIGZsb2F0IHJvbGxvZmZGYWN0b3I7Ci0KLSAgICAg
ICAgLy8gRGlyZWN0aW9uYWwgc291bmQgY29uZQotICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgY29u
ZUlubmVyQW5nbGU7Ci0gICAgICAgIGF0dHJpYnV0ZSBmbG9hdCBjb25lT3V0ZXJBbmdsZTsKLSAg
ICAgICAgYXR0cmlidXRlIGZsb2F0IGNvbmVPdXRlckdhaW47Ci0KLSAgICAgICAgLy8gRHluYW1p
Y2FsbHkgY2FsY3VsYXRlZCBnYWluIHZhbHVlcyAgICAgICAgICAKLSAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIEF1ZGlvR2FpbiBjb25lR2FpbjsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IEF1ZGlvR2FpbiBkaXN0YW5jZUdhaW47Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvUGFyYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0F1ZGlvUGFyYW0uY3BwCShyZXZpc2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb1BhcmFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0K
LSNpbmNsdWRlICJBdWRpb1BhcmFtLmgiCi0KLSNpbmNsdWRlICJBdWRpb05vZGUuaCIKLSNpbmNs
dWRlICJBdWRpb1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY29uc3Qg
ZG91YmxlIEF1ZGlvUGFyYW06OkRlZmF1bHRTbW9vdGhpbmdDb25zdGFudCA9IDAuMDU7Ci1jb25z
dCBkb3VibGUgQXVkaW9QYXJhbTo6U25hcFRocmVzaG9sZCA9IDAuMDAxOwotCi1mbG9hdCBBdWRp
b1BhcmFtOjp2YWx1ZSgpCi17Ci0gICAgLy8gVXBkYXRlIHZhbHVlIGZvciB0aW1lbGluZS4KLSAg
ICBpZiAoY29udGV4dCgpICYmIGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgpKSB7Ci0gICAgICAg
IGJvb2wgaGFzVmFsdWU7Ci0gICAgICAgIGZsb2F0IHRpbWVsaW5lVmFsdWUgPSBtX3RpbWVsaW5l
LnZhbHVlRm9yQ29udGV4dFRpbWUoY29udGV4dCgpLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KG1f
dmFsdWUpLCBoYXNWYWx1ZSk7Ci0KLSAgICAgICAgaWYgKGhhc1ZhbHVlKQotICAgICAgICAgICAg
bV92YWx1ZSA9IHRpbWVsaW5lVmFsdWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQobV92YWx1ZSk7Ci19Ci0KLXZvaWQgQXVkaW9QYXJhbTo6c2V0VmFsdWUoZmxv
YXQgdmFsdWUpCi17Ci0gICAgLy8gQ2hlY2sgYWdhaW5zdCBKYXZhU2NyaXB0IGdpdmluZyB1cyBi
b2d1cyBmbG9hdGluZy1wb2ludCB2YWx1ZXMuCi0gICAgLy8gRG9uJ3QgQVNTRVJULCBzaW5jZSB0
aGlzIGNhbiBoYXBwZW4gaWYgc29tZWJvZHkgd3JpdGVzIGJhZCBKUy4KLSAgICBpZiAoIWlzbmFu
KHZhbHVlKSAmJiAhaXNpbmYodmFsdWUpKQotICAgICAgICBtX3ZhbHVlID0gdmFsdWU7Ci19Ci0K
LWZsb2F0IEF1ZGlvUGFyYW06OnNtb290aGVkVmFsdWUoKQotewotICAgIHJldHVybiBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KG1fc21vb3RoZWRWYWx1ZSk7Ci19Ci0KLWJvb2wgQXVkaW9QYXJhbTo6
c21vb3RoKCkKLXsKLSAgICAvLyBJZiB2YWx1ZXMgaGF2ZSBiZWVuIGV4cGxpY2l0bHkgc2NoZWR1
bGVkIG9uIHRoZSB0aW1lbGluZSwgdGhlbiB1c2UgdGhlIGV4YWN0IHZhbHVlLgotICAgIC8vIFNt
b290aGluZyBlZmZlY3RpdmVseSBpcyBwZXJmb3JtZWQgYnkgdGhlIHRpbWVsaW5lLgotICAgIGJv
b2wgdXNlVGltZWxpbmVWYWx1ZSA9IGZhbHNlOwotICAgIGlmIChjb250ZXh0KCkpCi0gICAgICAg
IG1fdmFsdWUgPSBtX3RpbWVsaW5lLnZhbHVlRm9yQ29udGV4dFRpbWUoY29udGV4dCgpLCBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KG1fdmFsdWUpLCB1c2VUaW1lbGluZVZhbHVlKTsKLSAgICAKLSAg
ICBpZiAobV9zbW9vdGhlZFZhbHVlID09IG1fdmFsdWUpIHsKLSAgICAgICAgLy8gU21vb3RoZWQg
dmFsdWUgaGFzIGFscmVhZHkgYXBwcm9hY2hlZCBhbmQgc25hcHBlZCB0byB2YWx1ZS4KLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmICh1c2VUaW1lbGluZVZhbHVlKQot
ICAgICAgICBtX3Ntb290aGVkVmFsdWUgPSBtX3ZhbHVlOwotICAgIGVsc2UgewotICAgICAgICAv
LyBEZXppcHBlciAtIGV4cG9uZW50aWFsIGFwcHJvYWNoLgotICAgICAgICBtX3Ntb290aGVkVmFs
dWUgKz0gKG1fdmFsdWUgLSBtX3Ntb290aGVkVmFsdWUpICogbV9zbW9vdGhpbmdDb25zdGFudDsK
LQotICAgICAgICAvLyBJZiB3ZSBnZXQgY2xvc2UgZW5vdWdoIHRoZW4gc25hcCB0byBhY3R1YWwg
dmFsdWUuCi0gICAgICAgIGlmIChmYWJzKG1fc21vb3RoZWRWYWx1ZSAtIG1fdmFsdWUpIDwgU25h
cFRocmVzaG9sZCkgLy8gRklYTUU6IHRoZSB0aHJlc2hvbGQgbmVlZHMgdG8gYmUgYWRqdXN0YWJs
ZSBkZXBlbmRpbmcgb24gcmFuZ2UgLSBidXQgdGhpcyBpcyBPSyBnZW5lcmFsIHB1cnBvc2UgdmFs
dWUuCi0gICAgICAgICAgICBtX3Ntb290aGVkVmFsdWUgPSBtX3ZhbHVlOwotICAgIH0KLQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBBdWRpb1BhcmFtOjpjYWxjdWxhdGVTYW1wbGVBY2N1
cmF0ZVZhbHVlcyhmbG9hdCogdmFsdWVzLCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcykKLXsKLSAg
ICBib29sIGlzU2FmZSA9IGNvbnRleHQoKSAmJiBjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSAm
JiB2YWx1ZXM7Ci0gICAgQVNTRVJUKGlzU2FmZSk7Ci0gICAgaWYgKCFpc1NhZmUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIENhbGN1bGF0ZSB2YWx1ZXMgZm9yIHRoaXMgcmVuZGVyIHF1YW50
dW0uCi0gICAgLy8gTm9ybWFsbHkgbnVtYmVyT2ZWYWx1ZXMgd2lsbCBlcXVhbCBBdWRpb05vZGU6
OlByb2Nlc3NpbmdTaXplSW5GcmFtZXMgKHRoZSByZW5kZXIgcXVhbnR1bSBzaXplKS4KLSAgICBm
bG9hdCBzYW1wbGVSYXRlID0gY29udGV4dCgpLT5zYW1wbGVSYXRlKCk7Ci0gICAgZmxvYXQgc3Rh
cnRUaW1lID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb250ZXh0KCktPmN1cnJlbnRUaW1lKCkp
OwotICAgIGZsb2F0IGVuZFRpbWUgPSBzdGFydFRpbWUgKyBudW1iZXJPZlZhbHVlcyAvIHNhbXBs
ZVJhdGU7Ci0KLSAgICAvLyBOb3RlIHdlJ3JlIHJ1bm5pbmcgY29udHJvbCByYXRlIGF0IHRoZSBz
YW1wbGUtcmF0ZS4KLSAgICAvLyBQYXNzIGluIHRoZSBjdXJyZW50IHZhbHVlIGFzIGRlZmF1bHQg
dmFsdWUuCi0gICAgbV92YWx1ZSA9IG1fdGltZWxpbmUudmFsdWVzRm9yVGltZVJhbmdlKHN0YXJ0
VGltZSwgZW5kVGltZSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChtX3ZhbHVlKSwgdmFsdWVzLCBu
dW1iZXJPZlZhbHVlcywgc2FtcGxlUmF0ZSwgc2FtcGxlUmF0ZSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9QYXJhbS5oCShyZXZpc2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9BdWRpb1BhcmFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTIzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIEF1ZGlvUGFyYW1faAotI2RlZmluZSBBdWRpb1BhcmFtX2gKLQotI2luY2x1
ZGUgIkF1ZGlvQ29udGV4dC5oIgotI2luY2x1ZGUgIkF1ZGlvUGFyYW1UaW1lbGluZS5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Zsb2F0MzJBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBB
dWRpb1BhcmFtIDogcHVibGljIFJlZkNvdW50ZWQ8QXVkaW9QYXJhbT4gewotcHVibGljOgotICAg
IHN0YXRpYyBjb25zdCBkb3VibGUgRGVmYXVsdFNtb290aGluZ0NvbnN0YW50OwotICAgIHN0YXRp
YyBjb25zdCBkb3VibGUgU25hcFRocmVzaG9sZDsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1
ZGlvUGFyYW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSBkZWZhdWx0VmFsdWUs
IGRvdWJsZSBtaW5WYWx1ZSwgZG91YmxlIG1heFZhbHVlLCB1bnNpZ25lZCB1bml0cyA9IDApCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvUGFyYW0obmFtZSwgZGVmYXVs
dFZhbHVlLCBtaW5WYWx1ZSwgbWF4VmFsdWUsIHVuaXRzKSk7Ci0gICAgfQotCi0gICAgQXVkaW9Q
YXJhbShjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSBkZWZhdWx0VmFsdWUsIGRvdWJsZSBtaW5W
YWx1ZSwgZG91YmxlIG1heFZhbHVlLCB1bnNpZ25lZCB1bml0cyA9IDApCi0gICAgICAgIDogbV9u
YW1lKG5hbWUpCi0gICAgICAgICwgbV92YWx1ZShkZWZhdWx0VmFsdWUpCi0gICAgICAgICwgbV9k
ZWZhdWx0VmFsdWUoZGVmYXVsdFZhbHVlKQotICAgICAgICAsIG1fbWluVmFsdWUobWluVmFsdWUp
Ci0gICAgICAgICwgbV9tYXhWYWx1ZShtYXhWYWx1ZSkKLSAgICAgICAgLCBtX3VuaXRzKHVuaXRz
KQotICAgICAgICAsIG1fc21vb3RoZWRWYWx1ZShkZWZhdWx0VmFsdWUpCi0gICAgICAgICwgbV9z
bW9vdGhpbmdDb25zdGFudChEZWZhdWx0U21vb3RoaW5nQ29uc3RhbnQpCi0gICAgewotICAgIH0K
LSAgICAKLSAgICB2b2lkIHNldENvbnRleHQoQXVkaW9Db250ZXh0KiBjb250ZXh0KSB7IG1fY29u
dGV4dCA9IGNvbnRleHQ7IH0KLSAgICBBdWRpb0NvbnRleHQqIGNvbnRleHQoKSB7IHJldHVybiBt
X2NvbnRleHQuZ2V0KCk7IH0KLQotICAgIGZsb2F0IHZhbHVlKCk7Ci0gICAgCi0gICAgdm9pZCBz
ZXRWYWx1ZShmbG9hdCk7Ci0KLSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFt
ZTsgfQotCi0gICAgZmxvYXQgbWluVmFsdWUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4obV9taW5WYWx1ZSk7IH0KLSAgICBmbG9hdCBtYXhWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PGZsb2F0PihtX21heFZhbHVlKTsgfQotICAgIGZsb2F0IGRlZmF1bHRWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX2RlZmF1bHRWYWx1ZSk7IH0K
LSAgICB1bnNpZ25lZCB1bml0cygpIGNvbnN0IHsgcmV0dXJuIG1fdW5pdHM7IH0KLQotICAgIC8v
IFZhbHVlIHNtb290aGluZzoKLQotICAgIC8vIFdoZW4gYSBuZXcgdmFsdWUgaXMgc2V0IHdpdGgg
c2V0VmFsdWUoKSwgaW4gb3VyIGludGVybmFsIHVzZSBvZiB0aGUgcGFyYW1ldGVyIHdlIGRvbid0
IGltbWVkaWF0ZWx5IGp1bXAgdG8gaXQuCi0gICAgLy8gSW5zdGVhZCB3ZSBzbW9vdGhseSBhcHBy
b2FjaCB0aGlzIHZhbHVlIHRvIGF2b2lkIGdsaXRjaGluZy4KLSAgICBmbG9hdCBzbW9vdGhlZFZh
bHVlKCk7Ci0KLSAgICAvLyBTbW9vdGhseSBleHBvbmVudGlhbGx5IGFwcHJvYWNoZXMgdG8gKGRl
LXppcHBlcnMpIHRoZSBkZXNpcmVkIHZhbHVlLgotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzbW9v
dGhlZCB2YWx1ZSBoYXMgYWxyZWFkeSBzbmFwcGVkIGV4YWN0bHkgdG8gdmFsdWUuCi0gICAgYm9v
bCBzbW9vdGgoKTsKLQotICAgIHZvaWQgcmVzZXRTbW9vdGhlZFZhbHVlKCkgeyBtX3Ntb290aGVk
VmFsdWUgPSBtX3ZhbHVlOyB9Ci0gICAgdm9pZCBzZXRTbW9vdGhpbmdDb25zdGFudChkb3VibGUg
aykgeyBtX3Ntb290aGluZ0NvbnN0YW50ID0gazsgfQotCi0gICAgLy8gUGFyYW1ldGVyIGF1dG9t
YXRpb24uICAgIAotICAgIHZvaWQgc2V0VmFsdWVBdFRpbWUoZmxvYXQgdmFsdWUsIGZsb2F0IHRp
bWUpIHsgbV90aW1lbGluZS5zZXRWYWx1ZUF0VGltZSh2YWx1ZSwgdGltZSk7IH0KLSAgICB2b2lk
IGxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1lKSB7IG1fdGlt
ZWxpbmUubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodmFsdWUsIHRpbWUpOyB9Ci0gICAgdm9pZCBl
eHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1lKSB7IG1f
dGltZWxpbmUuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgdGltZSk7IH0KLSAg
ICB2b2lkIHNldFRhcmdldFZhbHVlQXRUaW1lKGZsb2F0IHRhcmdldFZhbHVlLCBmbG9hdCB0aW1l
LCBmbG9hdCB0aW1lQ29uc3RhbnQpIHsgbV90aW1lbGluZS5zZXRUYXJnZXRWYWx1ZUF0VGltZSh0
YXJnZXRWYWx1ZSwgdGltZSwgdGltZUNvbnN0YW50KTsgfQotICAgIHZvaWQgc2V0VmFsdWVDdXJ2
ZUF0VGltZShGbG9hdDMyQXJyYXkqIGN1cnZlLCBmbG9hdCB0aW1lLCBmbG9hdCBkdXJhdGlvbikg
eyBtX3RpbWVsaW5lLnNldFZhbHVlQ3VydmVBdFRpbWUoY3VydmUsIHRpbWUsIGR1cmF0aW9uKTsg
fQotICAgIHZvaWQgY2FuY2VsU2NoZWR1bGVkVmFsdWVzKGZsb2F0IHN0YXJ0VGltZSkgeyBtX3Rp
bWVsaW5lLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyhzdGFydFRpbWUpOyB9Ci0KLSAgICBib29sIGhh
c1RpbWVsaW5lVmFsdWVzKCkgeyByZXR1cm4gbV90aW1lbGluZS5oYXNWYWx1ZXMoKTsgfQotICAg
IAotICAgIC8vIENhbGN1bGF0ZXMgbnVtYmVyT2ZWYWx1ZXMgcGFyYW1ldGVyIHZhbHVlcyBzdGFy
dGluZyBhdCB0aGUgY29udGV4dCdzIGN1cnJlbnQgdGltZS4KLSAgICAvLyBNdXN0IGJlIGNhbGxl
ZCBpbiB0aGUgY29udGV4dCdzIHJlbmRlciB0aHJlYWQuCi0gICAgdm9pZCBjYWxjdWxhdGVTYW1w
bGVBY2N1cmF0ZVZhbHVlcyhmbG9hdCogdmFsdWVzLCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyk7
Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEF1ZGlvQ29udGV4dD4gbV9jb250ZXh0OwotICAgIFN0
cmluZyBtX25hbWU7Ci0gICAgZG91YmxlIG1fdmFsdWU7Ci0gICAgZG91YmxlIG1fZGVmYXVsdFZh
bHVlOwotICAgIGRvdWJsZSBtX21pblZhbHVlOwotICAgIGRvdWJsZSBtX21heFZhbHVlOwotICAg
IHVuc2lnbmVkIG1fdW5pdHM7Ci0KLSAgICAvLyBTbW9vdGhpbmcgKGRlLXppcHBlcmluZykKLSAg
ICBkb3VibGUgbV9zbW9vdGhlZFZhbHVlOwotICAgIGRvdWJsZSBtX3Ntb290aGluZ0NvbnN0YW50
OwotICAgIAotICAgIEF1ZGlvUGFyYW1UaW1lbGluZSBtX3RpbWVsaW5lOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQXVkaW9QYXJhbV9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9BdWRpb1BhcmFtLmlkbAkocmV2aXNpb24gMTExMjMzKQorKysgU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNTgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLW1vZHVsZSB3ZWJhdWRpbyB7Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29u
ZGl0aW9uYWw9V0VCX0FVRElPCi0gICAgXSBBdWRpb1BhcmFtIHsKLSAgICAgICAgYXR0cmlidXRl
IGZsb2F0IHZhbHVlOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgZmxvYXQgbWluVmFsdWU7
Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBmbG9hdCBtYXhWYWx1ZTsKLSAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIGZsb2F0IGRlZmF1bHRWYWx1ZTsKLQotICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7Ci0KLSAgICAgICAgLy8gRklYTUU6IENvdWxkIGRlZmlu
ZSB1bml0cyBjb25zdGFudHMgaGVyZSAoc2Vjb25kcywgZGVjaWJlbHMsIGNlbnRzLCBldGMuKS4u
LgotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgdW5pdHM7Ci0KLSAg
ICAgICAgLy8gUGFyYW1ldGVyIGF1dG9tYXRpb24uCi0gICAgICAgIHZvaWQgc2V0VmFsdWVBdFRp
bWUoaW4gZmxvYXQgdmFsdWUsIGluIGZsb2F0IHRpbWUpOwotICAgICAgICB2b2lkIGxpbmVhclJh
bXBUb1ZhbHVlQXRUaW1lKGluIGZsb2F0IHZhbHVlLCBpbiBmbG9hdCB0aW1lKTsKLSAgICAgICAg
dm9pZCBleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKGluIGZsb2F0IHZhbHVlLCBpbiBmbG9h
dCB0aW1lKTsKLQotICAgICAgICAvLyBFeHBvbmVudGlhbGx5IGFwcHJvYWNoIHRoZSB0YXJnZXQg
dmFsdWUgd2l0aCBhIHJhdGUgaGF2aW5nIHRoZSBnaXZlbiB0aW1lIGNvbnN0YW50LgotICAgICAg
ICB2b2lkIHNldFRhcmdldFZhbHVlQXRUaW1lKGluIGZsb2F0IHRhcmdldFZhbHVlLCBpbiBmbG9h
dCB0aW1lLCBpbiBmbG9hdCB0aW1lQ29uc3RhbnQpOwotCi0gICAgICAgIC8vIFNldHMgYW4gYXJy
YXkgb2YgYXJiaXRyYXJ5IHBhcmFtZXRlciB2YWx1ZXMgc3RhcnRpbmcgYXQgdGltZSBmb3IgdGhl
IGdpdmVuIGR1cmF0aW9uLgotICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIHZhbHVlcyB3aWxsIGJl
IHNjYWxlZCB0byBmaXQgaW50byB0aGUgZGVzaXJlZCBkdXJhdGlvbi4KLSAgICAgICAgdm9pZCBz
ZXRWYWx1ZUN1cnZlQXRUaW1lKGluIEZsb2F0MzJBcnJheSB2YWx1ZXMsIGluIGZsb2F0IHRpbWUs
IGluIGZsb2F0IGR1cmF0aW9uKTsKLQotICAgICAgICAvLyBDYW5jZWxzIGFsbCBzY2hlZHVsZWQg
cGFyYW1ldGVyIGNoYW5nZXMgd2l0aCB0aW1lcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gc3Rh
cnRUaW1lLgotICAgICAgICB2b2lkIGNhbmNlbFNjaGVkdWxlZFZhbHVlcyhpbiBmbG9hdCBzdGFy
dFRpbWUpOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bh
cmFtVGltZWxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1
ZGlvUGFyYW1UaW1lbGluZS5jcHAJKHJldmlzaW9uIDExMTIzMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzY5
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FV
RElPKQotCi0jaW5jbHVkZSAiQXVkaW9QYXJhbVRpbWVsaW5lLmgiCi0KLSNpbmNsdWRlICJBdWRp
b1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgPGFs
Z29yaXRobT4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi11c2luZyBuYW1lc3BhY2Ug
c3RkOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgQXVkaW9QYXJhbVRpbWVsaW5lOjpz
ZXRWYWx1ZUF0VGltZShmbG9hdCB2YWx1ZSwgZmxvYXQgdGltZSkKLXsKLSAgICBpbnNlcnRFdmVu
dChQYXJhbUV2ZW50KFBhcmFtRXZlbnQ6OlNldFZhbHVlLCB2YWx1ZSwgdGltZSwgMCwgMCwgMCkp
OwotfQotCi12b2lkIEF1ZGlvUGFyYW1UaW1lbGluZTo6bGluZWFyUmFtcFRvVmFsdWVBdFRpbWUo
ZmxvYXQgdmFsdWUsIGZsb2F0IHRpbWUpCi17Ci0gICAgaW5zZXJ0RXZlbnQoUGFyYW1FdmVudChQ
YXJhbUV2ZW50OjpMaW5lYXJSYW1wVG9WYWx1ZSwgdmFsdWUsIHRpbWUsIDAsIDAsIDApKTsKLX0K
LQotdm9pZCBBdWRpb1BhcmFtVGltZWxpbmU6OmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUo
ZmxvYXQgdmFsdWUsIGZsb2F0IHRpbWUpCi17Ci0gICAgaW5zZXJ0RXZlbnQoUGFyYW1FdmVudChQ
YXJhbUV2ZW50OjpFeHBvbmVudGlhbFJhbXBUb1ZhbHVlLCB2YWx1ZSwgdGltZSwgMCwgMCwgMCkp
OwotfQotCi12b2lkIEF1ZGlvUGFyYW1UaW1lbGluZTo6c2V0VGFyZ2V0VmFsdWVBdFRpbWUoZmxv
YXQgdGFyZ2V0VmFsdWUsIGZsb2F0IHRpbWUsIGZsb2F0IHRpbWVDb25zdGFudCkKLXsKLSAgICBp
bnNlcnRFdmVudChQYXJhbUV2ZW50KFBhcmFtRXZlbnQ6OlNldFRhcmdldFZhbHVlLCB0YXJnZXRW
YWx1ZSwgdGltZSwgdGltZUNvbnN0YW50LCAwLCAwKSk7Ci19Ci0KLXZvaWQgQXVkaW9QYXJhbVRp
bWVsaW5lOjpzZXRWYWx1ZUN1cnZlQXRUaW1lKEZsb2F0MzJBcnJheSogY3VydmUsIGZsb2F0IHRp
bWUsIGZsb2F0IGR1cmF0aW9uKQotewotICAgIGluc2VydEV2ZW50KFBhcmFtRXZlbnQoUGFyYW1F
dmVudDo6U2V0VmFsdWVDdXJ2ZSwgMCwgdGltZSwgMCwgZHVyYXRpb24sIGN1cnZlKSk7Ci19Ci0K
LXN0YXRpYyBib29sIGlzVmFsaWROdW1iZXIoZmxvYXQgeCkKLXsKLSAgICByZXR1cm4gIWlzbmFu
KHgpICYmICFpc2luZih4KTsKLX0KLQotdm9pZCBBdWRpb1BhcmFtVGltZWxpbmU6Omluc2VydEV2
ZW50KGNvbnN0IFBhcmFtRXZlbnQmIGV2ZW50KQotewotICAgIC8vIFNhbml0eSBjaGVjayB0aGUg
ZXZlbnQuIEJlIHN1cGVyIGNhcmVmdWwgd2UncmUgbm90IGdldHRpbmcgaW5mZWN0ZWQgd2l0aCBO
YU4gb3IgSW5mLgotICAgIGJvb2wgaXNWYWxpZCA9IGV2ZW50LnR5cGUoKSA8IFBhcmFtRXZlbnQ6
Okxhc3RUeXBlCi0gICAgICAgICYmIGlzVmFsaWROdW1iZXIoZXZlbnQudmFsdWUoKSkKLSAgICAg
ICAgJiYgaXNWYWxpZE51bWJlcihldmVudC50aW1lKCkpCi0gICAgICAgICYmIGlzVmFsaWROdW1i
ZXIoZXZlbnQudGltZUNvbnN0YW50KCkpCi0gICAgICAgICYmIGlzVmFsaWROdW1iZXIoZXZlbnQu
ZHVyYXRpb24oKSkKLSAgICAgICAgJiYgZXZlbnQuZHVyYXRpb24oKSA+PSAwOwotCi0gICAgQVNT
RVJUKGlzVmFsaWQpOwotICAgIGlmICghaXNWYWxpZCkKLSAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudHNMb2NrKTsKLSAgICAKLSAgICB1bnNp
Z25lZCBpID0gMDsKLSAgICBmbG9hdCBpbnNlcnRUaW1lID0gZXZlbnQudGltZSgpOwotICAgIGZv
ciAoaSA9IDA7IGkgPCBtX2V2ZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICAvLyBPdmVyd3Jp
dGUgc2FtZSBldmVudCB0eXBlIGFuZCB0aW1lLgotICAgICAgICBpZiAobV9ldmVudHNbaV0udGlt
ZSgpID09IGluc2VydFRpbWUgJiYgbV9ldmVudHNbaV0udHlwZSgpID09IGV2ZW50LnR5cGUoKSkg
ewotICAgICAgICAgICAgbV9ldmVudHNbaV0gPSBldmVudDsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX2V2ZW50c1tpXS50aW1lKCkgPiBpbnNlcnRUaW1l
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgbV9ldmVudHMuaW5zZXJ0KGksIGV2
ZW50KTsKLX0KLQotdm9pZCBBdWRpb1BhcmFtVGltZWxpbmU6OmNhbmNlbFNjaGVkdWxlZFZhbHVl
cyhmbG9hdCBzdGFydFRpbWUpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRzTG9j
ayk7Ci0KLSAgICAvLyBSZW1vdmUgYWxsIGV2ZW50cyBzdGFydGluZyBhdCBzdGFydFRpbWUuCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZXZlbnRzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGlmIChtX2V2ZW50c1tpXS50aW1lKCkgPj0gc3RhcnRUaW1lKSB7Ci0gICAgICAgICAgICBt
X2V2ZW50cy5yZW1vdmUoaSwgbV9ldmVudHMuc2l6ZSgpIC0gaSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgIH0KLX0KLQotZmxvYXQgQXVkaW9QYXJhbVRpbWVsaW5lOjp2YWx1
ZUZvckNvbnRleHRUaW1lKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgZGVmYXVsdFZhbHVl
LCBib29sJiBoYXNWYWx1ZSkKLXsKLSAgICBBU1NFUlQoY29udGV4dCk7Ci0KLSAgICBpZiAoIWNv
bnRleHQgfHwgIW1fZXZlbnRzLnNpemUoKSB8fCBjb250ZXh0LT5jdXJyZW50VGltZSgpIDwgbV9l
dmVudHNbMF0udGltZSgpKSB7Ci0gICAgICAgIGhhc1ZhbHVlID0gZmFsc2U7Ci0gICAgICAgIHJl
dHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgfQotCi0gICAgLy8gQXNrIGZvciBqdXN0IGEgc2luZ2xl
IHZhbHVlLgotICAgIGZsb2F0IHZhbHVlOwotICAgIGZsb2F0IHNhbXBsZVJhdGUgPSBjb250ZXh0
LT5zYW1wbGVSYXRlKCk7Ci0gICAgZmxvYXQgc3RhcnRUaW1lID0gbmFycm93UHJlY2lzaW9uVG9G
bG9hdChjb250ZXh0LT5jdXJyZW50VGltZSgpKTsKLSAgICBmbG9hdCBlbmRUaW1lID0gc3RhcnRU
aW1lICsgMS4xZiAvIHNhbXBsZVJhdGU7IC8vIHRpbWUganVzdCBiZXlvbmQgb25lIHNhbXBsZS1m
cmFtZQotICAgIGZsb2F0IGNvbnRyb2xSYXRlID0gc2FtcGxlUmF0ZSAvIEF1ZGlvTm9kZTo6UHJv
Y2Vzc2luZ1NpemVJbkZyYW1lczsgLy8gb25lIHBhcmFtZXRlciBjaGFuZ2UgcGVyIHJlbmRlciBx
dWFudHVtCi0gICAgdmFsdWUgPSB2YWx1ZXNGb3JUaW1lUmFuZ2Uoc3RhcnRUaW1lLCBlbmRUaW1l
LCBkZWZhdWx0VmFsdWUsICZ2YWx1ZSwgMSwgc2FtcGxlUmF0ZSwgY29udHJvbFJhdGUpOwotCi0g
ICAgaGFzVmFsdWUgPSB0cnVlOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotZmxvYXQgQXVkaW9Q
YXJhbVRpbWVsaW5lOjp2YWx1ZXNGb3JUaW1lUmFuZ2UoZmxvYXQgc3RhcnRUaW1lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZW5kVGltZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGRlZmF1bHRW
YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0
KiB2YWx1ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZlZhbHVlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZsb2F0IHNhbXBsZVJhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmbG9hdCBjb250cm9sUmF0ZSkKLXsKLSAgICAvLyBXZSBjYW4n
dCBjb250ZW5kIHRoZSBsb2NrIGluIHRoZSByZWFsdGltZSBhdWRpbyB0aHJlYWQuCi0gICAgaWYg
KCFtX2V2ZW50c0xvY2sudHJ5TG9jaygpKSB7Ci0gICAgICAgIGlmICh2YWx1ZXMpIHsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZlZhbHVlczsgKytpKQotICAg
ICAgICAgICAgICAgIHZhbHVlc1tpXSA9IGRlZmF1bHRWYWx1ZTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gZGVmYXVsdFZhbHVlOwotICAgIH0KLQotICAgIGZsb2F0IHZhbHVlID0gdmFsdWVz
Rm9yVGltZVJhbmdlSW1wbChzdGFydFRpbWUsIGVuZFRpbWUsIGRlZmF1bHRWYWx1ZSwgdmFsdWVz
LCBudW1iZXJPZlZhbHVlcywgc2FtcGxlUmF0ZSwgY29udHJvbFJhdGUpOwotICAgIG1fZXZlbnRz
TG9jay51bmxvY2soKTsKLQotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotZmxvYXQgQXVkaW9QYXJh
bVRpbWVsaW5lOjp2YWx1ZXNGb3JUaW1lUmFuZ2VJbXBsKGZsb2F0IHN0YXJ0VGltZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBlbmRUaW1l
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0
IGRlZmF1bHRWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmbG9hdCogdmFsdWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mVmFsdWVzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHNhbXBsZVJhdGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgY29udHJv
bFJhdGUpCi17Ci0gICAgQVNTRVJUKHZhbHVlcyk7Ci0gICAgaWYgKCF2YWx1ZXMpCi0gICAgICAg
IHJldHVybiBkZWZhdWx0VmFsdWU7Ci0KLSAgICAvLyBSZXR1cm4gZGVmYXVsdCB2YWx1ZSBpZiB0
aGVyZSBhcmUgbm8gZXZlbnRzIG1hdGNoaW5nIHRoZSBkZXNpcmVkIHRpbWUgcmFuZ2UuCi0gICAg
QVNTRVJUKG1fZXZlbnRzLnNpemUoKSk7Ci0gICAgaWYgKCFtX2V2ZW50cy5zaXplKCkgfHwgZW5k
VGltZSA8PSBtX2V2ZW50c1swXS50aW1lKCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bWJlck9mVmFsdWVzOyArK2kpCi0gICAgICAgICAgICB2YWx1ZXNbaV0gPSBkZWZh
dWx0VmFsdWU7Ci0gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0gICAgfQotCi0gICAgLy8g
TWFpbnRhaW4gYSBydW5uaW5nIHRpbWUgYW5kIGluZGV4IGZvciB3cml0aW5nIHRoZSB2YWx1ZXMg
YnVmZmVyLgotICAgIGZsb2F0IGN1cnJlbnRUaW1lID0gc3RhcnRUaW1lOwotICAgIHVuc2lnbmVk
IHdyaXRlSW5kZXggPSAwOwotCi0gICAgLy8gSWYgZmlyc3QgZXZlbnQgaXMgYWZ0ZXIgc3RhcnRU
aW1lIHRoZW4gZmlsbCBpbml0aWFsIHBhcnQgb2YgdmFsdWVzIGJ1ZmZlciB3aXRoIGRlZmF1bHRW
YWx1ZQotICAgIC8vIHVudGlsIHdlIHJlYWNoIHRoZSBmaXJzdCBldmVudCB0aW1lLgotICAgIGZs
b2F0IGZpcnN0RXZlbnRUaW1lID0gbV9ldmVudHNbMF0udGltZSgpOwotICAgIGlmIChmaXJzdEV2
ZW50VGltZSA+IHN0YXJ0VGltZSkgewotICAgICAgICBmbG9hdCBmaWxsVG9UaW1lID0gbWluKGVu
ZFRpbWUsIGZpcnN0RXZlbnRUaW1lKTsKLSAgICAgICAgdW5zaWduZWQgZmlsbFRvRnJhbWUgPSBB
dWRpb1V0aWxpdGllczo6dGltZVRvU2FtcGxlRnJhbWUoZmlsbFRvVGltZSAtIHN0YXJ0VGltZSwg
c2FtcGxlUmF0ZSk7Ci0gICAgICAgIGZpbGxUb0ZyYW1lID0gbWluKGZpbGxUb0ZyYW1lLCBudW1i
ZXJPZlZhbHVlcyk7Ci0gICAgICAgIGZvciAoOyB3cml0ZUluZGV4IDwgZmlsbFRvRnJhbWU7ICsr
d3JpdGVJbmRleCkKLSAgICAgICAgICAgIHZhbHVlc1t3cml0ZUluZGV4XSA9IGRlZmF1bHRWYWx1
ZTsKLQotICAgICAgICBjdXJyZW50VGltZSA9IGZpbGxUb1RpbWU7Ci0gICAgfQotCi0gICAgZmxv
YXQgdmFsdWUgPSBkZWZhdWx0VmFsdWU7Ci0KLSAgICAvLyBHbyB0aHJvdWdoIGVhY2ggZXZlbnQg
YW5kIHJlbmRlciB0aGUgdmFsdWUgYnVmZmVyIHdoZXJlIHRoZSB0aW1lcyBvdmVybGFwLAotICAg
IC8vIHN0b3BwaW5nIHdoZW4gd2UndmUgcmVuZGVyZWQgYWxsIHRoZSByZXF1ZXN0ZWQgdmFsdWVz
LgotICAgIC8vIEZJWE1FOiBjb3VsZCB0cnkgdG8gb3B0aW1pemUgYnkgYXZvaWRpbmcgaGF2aW5n
IHRvIGl0ZXJhdGUgc3RhcnRpbmcgZnJvbSB0aGUgdmVyeSBmaXJzdCBldmVudAotICAgIC8vIGFu
ZCBrZWVwaW5nIHRyYWNrIG9mIGEgImN1cnJlbnQiIGV2ZW50IGluZGV4LgotICAgIGludCBuID0g
bV9ldmVudHMuc2l6ZSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbiAmJiB3cml0ZUluZGV4
IDwgbnVtYmVyT2ZWYWx1ZXM7ICsraSkgewotICAgICAgICBQYXJhbUV2ZW50JiBldmVudCA9IG1f
ZXZlbnRzW2ldOwotICAgICAgICBQYXJhbUV2ZW50KiBuZXh0RXZlbnQgPSBpIDwgbiAtIDEgPyAm
KG1fZXZlbnRzW2kgKyAxXSkgOiAwOwotCi0gICAgICAgIC8vIFdhaXQgdW50aWwgd2UgZ2V0IGEg
bW9yZSByZWNlbnQgZXZlbnQuCi0gICAgICAgIGlmIChuZXh0RXZlbnQgJiYgbmV4dEV2ZW50LT50
aW1lKCkgPCBjdXJyZW50VGltZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZs
b2F0IHZhbHVlMSA9IGV2ZW50LnZhbHVlKCk7Ci0gICAgICAgIGZsb2F0IHRpbWUxID0gZXZlbnQu
dGltZSgpOwotICAgICAgICBmbG9hdCB2YWx1ZTIgPSBuZXh0RXZlbnQgPyBuZXh0RXZlbnQtPnZh
bHVlKCkgOiB2YWx1ZTE7Ci0gICAgICAgIGZsb2F0IHRpbWUyID0gbmV4dEV2ZW50ID8gbmV4dEV2
ZW50LT50aW1lKCkgOiBlbmRUaW1lICsgMTsKLQotICAgICAgICBmbG9hdCBkZWx0YVRpbWUgPSB0
aW1lMiAtIHRpbWUxOwotICAgICAgICBmbG9hdCBrID0gZGVsdGFUaW1lID4gMCA/IDEgLyBkZWx0
YVRpbWUgOiAwOwotICAgICAgICBmbG9hdCBzYW1wbGVGcmFtZVRpbWVJbmNyID0gMSAvIHNhbXBs
ZVJhdGU7Ci0KLSAgICAgICAgZmxvYXQgZmlsbFRvVGltZSA9IG1pbihlbmRUaW1lLCB0aW1lMik7
Ci0gICAgICAgIHVuc2lnbmVkIGZpbGxUb0ZyYW1lID0gQXVkaW9VdGlsaXRpZXM6OnRpbWVUb1Nh
bXBsZUZyYW1lKGZpbGxUb1RpbWUgLSBzdGFydFRpbWUsIHNhbXBsZVJhdGUpOwotICAgICAgICBm
aWxsVG9GcmFtZSA9IG1pbihmaWxsVG9GcmFtZSwgbnVtYmVyT2ZWYWx1ZXMpOwotCi0gICAgICAg
IFBhcmFtRXZlbnQ6OlR5cGUgbmV4dEV2ZW50VHlwZSA9IG5leHRFdmVudCA/IHN0YXRpY19jYXN0
PFBhcmFtRXZlbnQ6OlR5cGU+KG5leHRFdmVudC0+dHlwZSgpKSA6IFBhcmFtRXZlbnQ6Okxhc3RU
eXBlIC8qIHVua25vd24gKi87Ci0KLSAgICAgICAgLy8gRmlyc3QgaGFuZGxlIGxpbmVhciBhbmQg
ZXhwb25lbnRpYWwgcmFtcHMgd2hpY2ggcmVxdWlyZSBsb29raW5nIGFoZWFkIHRvIHRoZSBuZXh0
IGV2ZW50LgotICAgICAgICBpZiAobmV4dEV2ZW50VHlwZSA9PSBQYXJhbUV2ZW50OjpMaW5lYXJS
YW1wVG9WYWx1ZSkgewotICAgICAgICAgICAgZm9yICg7IHdyaXRlSW5kZXggPCBmaWxsVG9GcmFt
ZTsgKyt3cml0ZUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgeCA9IChjdXJyZW50VGlt
ZSAtIHRpbWUxKSAqIGs7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSAoMSAtIHgpICogdmFsdWUx
ICsgeCAqIHZhbHVlMjsKLSAgICAgICAgICAgICAgICB2YWx1ZXNbd3JpdGVJbmRleF0gPSB2YWx1
ZTsKLSAgICAgICAgICAgICAgICBjdXJyZW50VGltZSArPSBzYW1wbGVGcmFtZVRpbWVJbmNyOwot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKG5leHRFdmVudFR5cGUgPT0gUGFyYW1F
dmVudDo6RXhwb25lbnRpYWxSYW1wVG9WYWx1ZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlMSA8
PSAwIHx8IHZhbHVlMiA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gSGFuZGxlIG5lZ2F0aXZl
IHZhbHVlcyBlcnJvciBjYXNlIGJ5IHByb3BhZ2F0aW5nIHByZXZpb3VzIHZhbHVlLgotICAgICAg
ICAgICAgICAgIGZvciAoOyB3cml0ZUluZGV4IDwgZmlsbFRvRnJhbWU7ICsrd3JpdGVJbmRleCkK
LSAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3dyaXRlSW5kZXhdID0gdmFsdWU7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZsb2F0IG51bVNhbXBsZUZyYW1lcyA9IGRl
bHRhVGltZSAqIHNhbXBsZVJhdGU7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIHZhbHVlIGdvZXMg
ZXhwb25lbnRpYWxseSBmcm9tIHZhbHVlMSB0byB2YWx1ZTIgaW4gYSBkdXJhdGlvbiBvZiBkZWx0
YVRpbWUgc2Vjb25kcyAoY29ycmVzcG9uZGluZyB0byBudW1TYW1wbGVGcmFtZXMpLgotICAgICAg
ICAgICAgICAgIC8vIENvbXB1dGUgdGhlIHBlci1zYW1wbGUgbXVsdGlwbGllci4KLSAgICAgICAg
ICAgICAgICBmbG9hdCBtdWx0aXBsaWVyID0gcG93Zih2YWx1ZTIgLyB2YWx1ZTEsIDEgLyBudW1T
YW1wbGVGcmFtZXMpOwotCi0gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBzdGFydGluZyB2YWx1
ZSBvZiB0aGUgZXhwb25lbnRpYWwgcmFtcC4gVGhpcyBpcyB0aGUgc2FtZSBhcyBtdWx0aXBsaWVy
IF4KLSAgICAgICAgICAgICAgICAvLyBBdWRpb1V0aWxpdGllczo6dGltZVRvU2FtcGxlRnJhbWUo
Y3VycmVudFRpbWUgLSB0aW1lMSwgc2FtcGxlUmF0ZSksIGJ1dCBpcyBtb3JlCi0gICAgICAgICAg
ICAgICAgLy8gYWNjdXJhdGUsIGVzcGVjaWFsbHkgaWYgbXVsdGlwbGllciBpcyBjbG9zZSB0byAx
LgotICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUxICogcG93Zih2YWx1ZTIgLyB2YWx1ZTEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1ZGlvVXRpbGl0aWVzOjp0
aW1lVG9TYW1wbGVGcmFtZShjdXJyZW50VGltZSAtIHRpbWUxLCBzYW1wbGVSYXRlKSAvIG51bVNh
bXBsZUZyYW1lcyk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKDsgd3JpdGVJbmRleCA8IGZpbGxU
b0ZyYW1lOyArK3dyaXRlSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3dyaXRl
SW5kZXhdID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlICo9IG11bHRpcGxpZXI7
Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1lICs9IHNhbXBsZUZyYW1lVGltZUluY3I7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgLy8gSGFuZGxlIGV2ZW50IHR5cGVzIG5vdCByZXF1aXJpbmcgbG9va2luZyBhaGVh
ZCB0byB0aGUgbmV4dCBldmVudC4KLSAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQudHlwZSgpKSB7
Ci0gICAgICAgICAgICBjYXNlIFBhcmFtRXZlbnQ6OlNldFZhbHVlOgotICAgICAgICAgICAgY2Fz
ZSBQYXJhbUV2ZW50OjpMaW5lYXJSYW1wVG9WYWx1ZToKLSAgICAgICAgICAgIGNhc2UgUGFyYW1F
dmVudDo6RXhwb25lbnRpYWxSYW1wVG9WYWx1ZToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIGN1cnJlbnRUaW1lID0gZmlsbFRvVGltZTsKLQotICAgICAgICAgICAgICAg
ICAgICAvLyBTaW1wbHkgc3RheSBhdCBhIGNvbnN0YW50IHZhbHVlLgotICAgICAgICAgICAgICAg
ICAgICB2YWx1ZSA9IGV2ZW50LnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoOyB3
cml0ZUluZGV4IDwgZmlsbFRvRnJhbWU7ICsrd3JpdGVJbmRleCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlc1t3cml0ZUluZGV4XSA9IHZhbHVlOwotCi0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSBQYXJhbUV2ZW50
OjpTZXRUYXJnZXRWYWx1ZToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGN1cnJlbnRUaW1lID0gZmlsbFRvVGltZTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBFeHBv
bmVudGlhbCBhcHByb2FjaCB0byB0YXJnZXQgdmFsdWUgd2l0aCBnaXZlbiB0aW1lIGNvbnN0YW50
LgotICAgICAgICAgICAgICAgICAgICBmbG9hdCB0YXJnZXRWYWx1ZSA9IGV2ZW50LnZhbHVlKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IHRpbWVDb25zdGFudCA9IGV2ZW50LnRpbWVDb25z
dGFudCgpOwotICAgICAgICAgICAgICAgICAgICBmbG9hdCBkaXNjcmV0ZVRpbWVDb25zdGFudCA9
IHN0YXRpY19jYXN0PGZsb2F0PihBdWRpb1V0aWxpdGllczo6ZGlzY3JldGVUaW1lQ29uc3RhbnRG
b3JTYW1wbGVSYXRlKHRpbWVDb25zdGFudCwgY29udHJvbFJhdGUpKTsKLQotICAgICAgICAgICAg
ICAgICAgICBmb3IgKDsgd3JpdGVJbmRleCA8IGZpbGxUb0ZyYW1lOyArK3dyaXRlSW5kZXgpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1t3cml0ZUluZGV4XSA9IHZhbHVlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gKHRhcmdldFZhbHVlIC0gdmFsdWUpICogZGlz
Y3JldGVUaW1lQ29uc3RhbnQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgUGFy
YW1FdmVudDo6U2V0VmFsdWVDdXJ2ZToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIEZsb2F0MzJBcnJheSogY3VydmUgPSBldmVudC5jdXJ2ZSgpOwotICAgICAgICAgICAg
ICAgICAgICBmbG9hdCogY3VydmVEYXRhID0gY3VydmUgPyBjdXJ2ZS0+ZGF0YSgpIDogMDsKLSAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDdXJ2ZVBvaW50cyA9IGN1cnZlID8g
Y3VydmUtPmxlbmd0aCgpIDogMDsKLQotICAgICAgICAgICAgICAgICAgICAvLyBDdXJ2ZSBldmVu
dHMgaGF2ZSBkdXJhdGlvbiwgc28gZG9uJ3QganVzdCB1c2UgbmV4dCBldmVudCB0aW1lLgotICAg
ICAgICAgICAgICAgICAgICBmbG9hdCBkdXJhdGlvbiA9IGV2ZW50LmR1cmF0aW9uKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGZsb2F0IGR1cmF0aW9uRnJhbWVzID0gZHVyYXRpb24gKiBzYW1wbGVS
YXRlOwotICAgICAgICAgICAgICAgICAgICBmbG9hdCBjdXJ2ZVBvaW50c1BlckZyYW1lID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG51bWJlck9mQ3VydmVQb2ludHMpIC8gZHVyYXRpb25GcmFtZXM7Ci0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJ2ZSB8fCAhY3VydmVEYXRhIHx8ICFudW1iZXJP
ZkN1cnZlUG9pbnRzIHx8IGR1cmF0aW9uIDw9IDAgfHwgc2FtcGxlUmF0ZSA8PSAwKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBFcnJvciBjb25kaXRpb24gLSBzaW1wbHkgcHJvcGFnYXRl
IHByZXZpb3VzIHZhbHVlLgotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFRpbWUgPSBm
aWxsVG9UaW1lOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHdyaXRlSW5kZXggPCBm
aWxsVG9GcmFtZTsgKyt3cml0ZUluZGV4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlc1t3cml0ZUluZGV4XSA9IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBTYXZlIG9s
ZCB2YWx1ZXMgYW5kIHJlY2FsY3VsYXRlIGluZm9ybWF0aW9uIGJhc2VkIG9uIHRoZSBjdXJ2ZSdz
IGR1cmF0aW9uCi0gICAgICAgICAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgdGhlIG5leHQgZXZl
bnQgdGltZS4KLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbmV4dEV2ZW50RmlsbFRvRnJh
bWUgPSBmaWxsVG9GcmFtZTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgbmV4dEV2ZW50Rmls
bFRvVGltZSA9IGZpbGxUb1RpbWU7Ci0gICAgICAgICAgICAgICAgICAgIGZpbGxUb1RpbWUgPSBt
aW4oZW5kVGltZSwgdGltZTEgKyBkdXJhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIGZpbGxU
b0ZyYW1lID0gQXVkaW9VdGlsaXRpZXM6OnRpbWVUb1NhbXBsZUZyYW1lKGZpbGxUb1RpbWUgLSBz
dGFydFRpbWUsIHNhbXBsZVJhdGUpOwotICAgICAgICAgICAgICAgICAgICBmaWxsVG9GcmFtZSA9
IG1pbihmaWxsVG9GcmFtZSwgbnVtYmVyT2ZWYWx1ZXMpOwotCi0gICAgICAgICAgICAgICAgICAg
IC8vIEluZGV4IGludG8gdGhlIGN1cnZlIGRhdGEgdXNpbmcgYSBmbG9hdGluZy1wb2ludCB2YWx1
ZS4KLSAgICAgICAgICAgICAgICAgICAgLy8gV2UncmUgc2NhbGluZyB0aGUgbnVtYmVyIG9mIGN1
cnZlIHBvaW50cyBieSB0aGUgZHVyYXRpb24gKHNlZSBjdXJ2ZVBvaW50c1BlckZyYW1lKS4KLSAg
ICAgICAgICAgICAgICAgICAgZmxvYXQgY3VydmVWaXJ0dWFsSW5kZXggPSAwOwotICAgICAgICAg
ICAgICAgICAgICBpZiAodGltZTEgPCBjdXJyZW50VGltZSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSW5kZXggc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2YgdGhlIGN1cnZlIGRhdGEu
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCB1c2UgdGltZVRvU2FtcGxlRnJhbWUo
KSBzaW5jZSB3ZSB3YW50IHRoZSBleGFjdCBmbG9hdGluZy1wb2ludCBmcmFtZS4KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZsb2F0IGZyYW1lT2Zmc2V0ID0gKGN1cnJlbnRUaW1lIC0gdGltZTEp
ICogc2FtcGxlUmF0ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlVmlydHVhbEluZGV4
ID0gY3VydmVQb2ludHNQZXJGcmFtZSAqIGZyYW1lT2Zmc2V0OwotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gUmVuZGVyIHRoZSBzdHJldGNoZWQgY3VydmUg
ZGF0YSB1c2luZyBuZWFyZXN0IG5laWdoYm9yIHNhbXBsaW5nLgotICAgICAgICAgICAgICAgICAg
ICAvLyBPdmVyc2FtcGxlZCBjdXJ2ZSBkYXRhIGNhbiBiZSBwcm92aWRlZCBpZiBzbW9vdGhuZXNz
IGlzIGRlc2lyZWQuCi0gICAgICAgICAgICAgICAgICAgIGZvciAoOyB3cml0ZUluZGV4IDwgZmls
bFRvRnJhbWU7ICsrd3JpdGVJbmRleCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWRl
YWxseSB3ZSdkIHVzZSByb3VuZCgpIGZyb20gTWF0aEV4dHJhcywgYnV0IHdlJ3JlIGluIGEgdGln
aHQgbG9vcCBoZXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgd2UncmUgdHJhZGlu
ZyBvZmYgcHJlY2lzaW9uIGZvciBleHRyYSBzcGVlZC4KLSAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGN1cnZlSW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMC41ICsgY3VydmVW
aXJ0dWFsSW5kZXgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZVZpcnR1YWxJbmRl
eCArPSBjdXJ2ZVBvaW50c1BlckZyYW1lOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBC
b3VuZHMgY2hlY2suCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VydmVJbmRleCA8IG51
bWJlck9mQ3VydmVQb2ludHMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBj
dXJ2ZURhdGFbY3VydmVJbmRleF07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1t3
cml0ZUluZGV4XSA9IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgdGhlcmUncyBhbnkgdGltZSBsZWZ0IGFmdGVyIHRoZSBkdXJhdGlvbiBv
ZiB0aGlzIGV2ZW50IGFuZCB0aGUgc3RhcnQKLSAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhl
IG5leHQsIHRoZW4ganVzdCBwcm9wYWdhdGUgdGhlIGxhc3QgdmFsdWUuCi0gICAgICAgICAgICAg
ICAgICAgIGZvciAoOyB3cml0ZUluZGV4IDwgbmV4dEV2ZW50RmlsbFRvRnJhbWU7ICsrd3JpdGVJ
bmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1t3cml0ZUluZGV4XSA9IHZhbHVl
OwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFJlLWFkanVzdCBjdXJyZW50IHRpbWUKLSAgICAg
ICAgICAgICAgICAgICAgY3VycmVudFRpbWUgPSBuZXh0RXZlbnRGaWxsVG9UaW1lOwotCi0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIHRoZXJlJ3MgYW55IHRpbWUgbGVmdCBhZnRl
ciBwcm9jZXNzaW5nIHRoZSBsYXN0IGV2ZW50IHRoZW4ganVzdCBwcm9wYWdhdGUgdGhlIGxhc3Qg
dmFsdWUKLSAgICAvLyB0byB0aGUgZW5kIG9mIHRoZSB2YWx1ZXMgYnVmZmVyLgotICAgIGZvciAo
OyB3cml0ZUluZGV4IDwgbnVtYmVyT2ZWYWx1ZXM7ICsrd3JpdGVJbmRleCkKLSAgICAgICAgdmFs
dWVzW3dyaXRlSW5kZXhdID0gdmFsdWU7Ci0KLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuaAkocmV2aXNpb24g
MTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTE5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEF1ZGlvUGFyYW1UaW1l
bGluZV9oCi0jZGVmaW5lIEF1ZGlvUGFyYW1UaW1lbGluZV9oCi0KLSNpbmNsdWRlICJBdWRpb0Nv
bnRleHQuaCIKLSNpbmNsdWRlIDx3dGYvRmxvYXQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgQXVkaW9QYXJhbVRpbWVsaW5lIHsKLXB1YmxpYzoKLSAgICBBdWRpb1BhcmFt
VGltZWxpbmUoKQotICAgICAgICA6IG1fY3VycmVudEV2ZW50SW5kZXgoMCkKLSAgICAgICAgLCBt
X3ZhbHVlKDApCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgc2V0VmFsdWVBdFRpbWUoZmxvYXQg
dmFsdWUsIGZsb2F0IHRpbWUpOwotICAgIHZvaWQgbGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoZmxv
YXQgdmFsdWUsIGZsb2F0IHRpbWUpOwotICAgIHZvaWQgZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0
VGltZShmbG9hdCB2YWx1ZSwgZmxvYXQgdGltZSk7Ci0gICAgdm9pZCBzZXRUYXJnZXRWYWx1ZUF0
VGltZShmbG9hdCB0YXJnZXRWYWx1ZSwgZmxvYXQgdGltZSwgZmxvYXQgdGltZUNvbnN0YW50KTsK
LSAgICB2b2lkIHNldFZhbHVlQ3VydmVBdFRpbWUoRmxvYXQzMkFycmF5KiBjdXJ2ZSwgZmxvYXQg
dGltZSwgZmxvYXQgZHVyYXRpb24pOwotICAgIHZvaWQgY2FuY2VsU2NoZWR1bGVkVmFsdWVzKGZs
b2F0IHN0YXJ0VGltZSk7Ci0KLSAgICAvLyBoYXNWYWx1ZSBpcyBzZXQgdG8gdHJ1ZSBpZiBhIHZh
bGlkIHRpbWVsaW5lIHZhbHVlIGlzIHJldHVybmVkLgotICAgIC8vIG90aGVyd2lzZSBkZWZhdWx0
VmFsdWUgaXMgcmV0dXJuZWQuCi0gICAgZmxvYXQgdmFsdWVGb3JDb250ZXh0VGltZShBdWRpb0Nv
bnRleHQqLCBmbG9hdCBkZWZhdWx0VmFsdWUsIGJvb2wmIGhhc1ZhbHVlKTsKLQotICAgIC8vIEdp
dmVuIHRoZSB0aW1lIHJhbmdlLCBjYWxjdWxhdGVzIHBhcmFtZXRlciB2YWx1ZXMgaW50byB0aGUg
dmFsdWVzIGJ1ZmZlcgotICAgIC8vIGFuZCByZXR1cm5zIHRoZSBsYXN0IHBhcmFtZXRlciB2YWx1
ZSBjYWxjdWxhdGVkIGZvciAidmFsdWVzIiBvciB0aGUgZGVmYXVsdFZhbHVlIGlmIG5vbmUgd2Vy
ZSBjYWxjdWxhdGVkLgotICAgIC8vIGNvbnRyb2xSYXRlIGlzIHRoZSByYXRlIChudW1iZXIgcGVy
IHNlY29uZCkgYXQgd2hpY2ggcGFyYW1ldGVyIHZhbHVlcyB3aWxsIGJlIGNhbGN1bGF0ZWQuCi0g
ICAgLy8gSXQgc2hvdWxkIGVxdWFsIHNhbXBsZVJhdGUgZm9yIHNhbXBsZS1hY2N1cmF0ZSBwYXJh
bWV0ZXIgY2hhbmdlcywgYW5kIG90aGVyd2lzZSB3aWxsIHVzdWFsbHkgbWF0Y2gKLSAgICAvLyB0
aGUgcmVuZGVyIHF1YW50dW0gc2l6ZSBzdWNoIHRoYXQgdGhlIHBhcmFtZXRlciB2YWx1ZSBjaGFu
Z2VzIG9uY2UgcGVyIHJlbmRlciBxdWFudHVtLgotICAgIGZsb2F0IHZhbHVlc0ZvclRpbWVSYW5n
ZShmbG9hdCBzdGFydFRpbWUsIGZsb2F0IGVuZFRpbWUsIGZsb2F0IGRlZmF1bHRWYWx1ZSwgZmxv
YXQqIHZhbHVlcywgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMsIGZsb2F0IHNhbXBsZVJhdGUsIGZs
b2F0IGNvbnRyb2xSYXRlKTsKLQotICAgIGJvb2wgaGFzVmFsdWVzKCkgeyByZXR1cm4gbV9ldmVu
dHMuc2l6ZSgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgY2xhc3MgUGFyYW1FdmVudCB7Ci0gICAgcHVi
bGljOgotICAgICAgICBlbnVtIFR5cGUgewotICAgICAgICAgICAgU2V0VmFsdWUsCi0gICAgICAg
ICAgICBMaW5lYXJSYW1wVG9WYWx1ZSwKLSAgICAgICAgICAgIEV4cG9uZW50aWFsUmFtcFRvVmFs
dWUsCi0gICAgICAgICAgICBTZXRUYXJnZXRWYWx1ZSwKLSAgICAgICAgICAgIFNldFZhbHVlQ3Vy
dmUsCi0gICAgICAgICAgICBMYXN0VHlwZQotICAgICAgICB9OwotCi0gICAgICAgIFBhcmFtRXZl
bnQoVHlwZSB0eXBlLCBmbG9hdCB2YWx1ZSwgZmxvYXQgdGltZSwgZmxvYXQgdGltZUNvbnN0YW50
LCBmbG9hdCBkdXJhdGlvbiwgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IGN1cnZlKQotICAgICAg
ICAgICAgOiBtX3R5cGUodHlwZSkKLSAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKLSAgICAg
ICAgICAgICwgbV90aW1lKHRpbWUpCi0gICAgICAgICAgICAsIG1fdGltZUNvbnN0YW50KHRpbWVD
b25zdGFudCkKLSAgICAgICAgICAgICwgbV9kdXJhdGlvbihkdXJhdGlvbikKLSAgICAgICAgICAg
ICwgbV9jdXJ2ZShjdXJ2ZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdW5zaWdu
ZWQgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgICAgICBmbG9hdCB2YWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KLSAgICAgICAgZmxvYXQgdGltZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdGltZTsgfQotICAgICAgICBmbG9hdCB0aW1lQ29uc3RhbnQoKSBjb25zdCB7IHJl
dHVybiBtX3RpbWVDb25zdGFudDsgfQotICAgICAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fZHVyYXRpb247IH0KLSAgICAgICAgRmxvYXQzMkFycmF5KiBjdXJ2ZSgpIHsgcmV0
dXJuIG1fY3VydmUuZ2V0KCk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHVuc2lnbmVkIG1f
dHlwZTsKLSAgICAgICAgZmxvYXQgbV92YWx1ZTsKLSAgICAgICAgZmxvYXQgbV90aW1lOwotICAg
ICAgICBmbG9hdCBtX3RpbWVDb25zdGFudDsKLSAgICAgICAgZmxvYXQgbV9kdXJhdGlvbjsKLSAg
ICAgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gbV9jdXJ2ZTsKLSAgICB9OwotCi0gICAgdm9pZCBp
bnNlcnRFdmVudChjb25zdCBQYXJhbUV2ZW50Jik7Ci0gICAgZmxvYXQgdmFsdWVzRm9yVGltZVJh
bmdlSW1wbChmbG9hdCBzdGFydFRpbWUsIGZsb2F0IGVuZFRpbWUsIGZsb2F0IGRlZmF1bHRWYWx1
ZSwgZmxvYXQqIHZhbHVlcywgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMsIGZsb2F0IHNhbXBsZVJh
dGUsIGZsb2F0IGNvbnRyb2xSYXRlKTsKLQotICAgIFZlY3RvcjxQYXJhbUV2ZW50PiBtX2V2ZW50
czsKLSAgICB1bnNpZ25lZCBtX2N1cnJlbnRFdmVudEluZGV4OwotICAgIGZsb2F0IG1fdmFsdWU7
Ci0KLSAgICBNdXRleCBtX2V2ZW50c0xvY2s7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBBdWRpb1BhcmFtVGltZWxpbmVfaApJbmRleDogU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmNwcAkocmV2aXNpb24gMTExMjMz
KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiQXVkaW9Qcm9jZXNz
aW5nRXZlbnQuaCIKLQotI2luY2x1ZGUgIkF1ZGlvQnVmZmVyLmgiCi0jaW5jbHVkZSAiRXZlbnRO
YW1lcy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8QXVkaW9Qcm9jZXNz
aW5nRXZlbnQ+IEF1ZGlvUHJvY2Vzc2luZ0V2ZW50OjpjcmVhdGUoKQotewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQXVkaW9Qcm9jZXNzaW5nRXZlbnQpOwotfQotCi1QYXNzUmVmUHRyPEF1ZGlv
UHJvY2Vzc2luZ0V2ZW50PiBBdWRpb1Byb2Nlc3NpbmdFdmVudDo6Y3JlYXRlKFBhc3NSZWZQdHI8
QXVkaW9CdWZmZXI+IGlucHV0QnVmZmVyLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBvdXRwdXRC
dWZmZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBdWRpb1Byb2Nlc3NpbmdFdmVudChp
bnB1dEJ1ZmZlciwgb3V0cHV0QnVmZmVyKSk7Ci19Ci0KLUF1ZGlvUHJvY2Vzc2luZ0V2ZW50OjpB
dWRpb1Byb2Nlc3NpbmdFdmVudCgpCi17Ci19Ci0KLUF1ZGlvUHJvY2Vzc2luZ0V2ZW50OjpBdWRp
b1Byb2Nlc3NpbmdFdmVudChQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBpbnB1dEJ1ZmZlciwgUGFz
c1JlZlB0cjxBdWRpb0J1ZmZlcj4gb3V0cHV0QnVmZmVyKQotICAgIDogRXZlbnQoZXZlbnROYW1l
cygpLmF1ZGlvcHJvY2Vzc0V2ZW50LCB0cnVlLCBmYWxzZSkKLSAgICAsIG1faW5wdXRCdWZmZXIo
aW5wdXRCdWZmZXIpCi0gICAgLCBtX291dHB1dEJ1ZmZlcihvdXRwdXRCdWZmZXIpCi17Ci19Ci0K
LUF1ZGlvUHJvY2Vzc2luZ0V2ZW50Ojp+QXVkaW9Qcm9jZXNzaW5nRXZlbnQoKQotewotfQotCi1j
b25zdCBBdG9taWNTdHJpbmcmIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50OjppbnRlcmZhY2VOYW1lKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvckF1ZGlvUHJvY2Vz
c2luZ0V2ZW50OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Qcm9jZXNz
aW5nRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1By
b2Nlc3NpbmdFdmVudC5oCShyZXZpc2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
Ci0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50X2gKLSNkZWZpbmUg
QXVkaW9Qcm9jZXNzaW5nRXZlbnRfaAotCi0jaW5jbHVkZSAiQXVkaW9CdWZmZXIuaCIKLSNpbmNs
dWRlICJFdmVudC5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvQnVmZmVyOwot
ICAgIAotY2xhc3MgQXVkaW9Qcm9jZXNzaW5nRXZlbnQgOiBwdWJsaWMgRXZlbnQgewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlvUHJvY2Vzc2luZ0V2ZW50PiBjcmVhdGUoKTsK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb1Byb2Nlc3NpbmdFdmVudD4gY3JlYXRlKFBhc3NS
ZWZQdHI8QXVkaW9CdWZmZXI+IGlucHV0QnVmZmVyLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBv
dXRwdXRCdWZmZXIpOwotICAgIAotICAgIHZpcnR1YWwgfkF1ZGlvUHJvY2Vzc2luZ0V2ZW50KCk7
Ci0KLSAgICBBdWRpb0J1ZmZlciogaW5wdXRCdWZmZXIoKSB7IHJldHVybiBtX2lucHV0QnVmZmVy
LmdldCgpOyB9Ci0gICAgQXVkaW9CdWZmZXIqIG91dHB1dEJ1ZmZlcigpIHsgcmV0dXJuIG1fb3V0
cHV0QnVmZmVyLmdldCgpOyB9Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50
ZXJmYWNlTmFtZSgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50
KCk7Ci0gICAgQXVkaW9Qcm9jZXNzaW5nRXZlbnQoUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gaW5w
dXRCdWZmZXIsIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IG91dHB1dEJ1ZmZlcik7Ci0KLSAgICBS
ZWZQdHI8QXVkaW9CdWZmZXI+IG1faW5wdXRCdWZmZXI7Ci0gICAgUmVmUHRyPEF1ZGlvQnVmZmVy
PiBtX291dHB1dEJ1ZmZlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5pZGwJKHJldmlzaW9uIDExMTIzMykKKysrIFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmlkbAkod29ya2luZyBj
b3B5KQpAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGF1ZGlvIHsKLSAgICBp
bnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCi0gICAgICAgIEpTR2Vu
ZXJhdGVUb0pTT2JqZWN0Ci0gICAgXSBBdWRpb1Byb2Nlc3NpbmdFdmVudCA6IEV2ZW50IHsKLSAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlvQnVmZmVyIGlucHV0QnVmZmVyOwotICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9CdWZmZXIgb3V0cHV0QnVmZmVyOyAKLSAgICB9Owot
fQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmgJKHJldmlz
aW9uIDExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEF1ZGlvU291cmNlTm9k
ZV9oCi0jZGVmaW5lIEF1ZGlvU291cmNlTm9kZV9oCi0KLSNpbmNsdWRlICJBdWRpb05vZGUuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb1NvdXJjZU5vZGUgOiBwdWJsaWMg
QXVkaW9Ob2RlIHsKLXB1YmxpYzoKLSAgICBBdWRpb1NvdXJjZU5vZGUoQXVkaW9Db250ZXh0KiBj
b250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotICAgICAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBz
YW1wbGVSYXRlKQotICAgIHsKLSAgICB9Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBkb3VibGUg
dGFpbFRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBkb3Vi
bGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBBdWRpb1NvdXJjZU5vZGVfaApJbmRleDog
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaWRsCShyZXZpc2lvbiAx
MTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgYXVkaW8gewotICAgIGludGVy
ZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTwotICAgIF0gQXVkaW9Tb3VyY2VO
b2RlIDogQXVkaW9Ob2RlIHsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQmlxdWFkRFNQS2VybmVsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9CaXF1YWREU1BLZXJuZWwuY3BwCShyZXZpc2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxF
KFdFQl9BVURJTykKLQotI2luY2x1ZGUgIkJpcXVhZERTUEtlcm5lbC5oIgotCi0jaW5jbHVkZSAi
QmlxdWFkUHJvY2Vzc29yLmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVk
ZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLS8vIEZJWE1FOiBBcyBhIHJlY3Vyc2l2ZSBsaW5lYXIgZmlsdGVyLCBkZXBlbmRpbmcg
b24gaXRzIHBhcmFtZXRlcnMsIGEgYmlxdWFkIGZpbHRlciBjYW4gaGF2ZQotLy8gYW4gaW5maW5p
dGUgdGFpbFRpbWUuIEluIHByYWN0aWNlLCBCaXF1YWQgZmlsdGVycyBkbyBub3QgdXN1YWxseSAo
ZXhjZXB0IGZvciB2ZXJ5IGhpZ2ggcmVzb25hbmNlIHZhbHVlcykgCi0vLyBoYXZlIGEgdGFpbFRp
bWUgb2YgbG9uZ2VyIHRoYW4gYXBwcm94LiAyMDBtcy4gVGhpcyB2YWx1ZSBjb3VsZCBwb3NzaWJs
eSBiZSBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZQotLy8gc2V0dGluZ3Mgb2YgdGhlIEJpcXVhZC4K
LXN0YXRpYyBjb25zdCBkb3VibGUgTWF4QmlxdWFkRGVsYXlUaW1lID0gMC4yOwotCi12b2lkIEJp
cXVhZERTUEtlcm5lbDo6dXBkYXRlQ29lZmZpY2llbnRzSWZOZWNlc3NhcnkoYm9vbCB1c2VTbW9v
dGhpbmcsIGJvb2wgZm9yY2VVcGRhdGUpCi17Ci0gICAgaWYgKGZvcmNlVXBkYXRlIHx8IGJpcXVh
ZFByb2Nlc3NvcigpLT5maWx0ZXJDb2VmZmljaWVudHNEaXJ0eSgpKSB7Ci0gICAgICAgIGRvdWJs
ZSB2YWx1ZTE7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZTI7Ci0gICAgICAgIGRvdWJsZSBnYWluOwot
ICAgICAgICAKLSAgICAgICAgaWYgKHVzZVNtb290aGluZykgewotICAgICAgICAgICAgdmFsdWUx
ID0gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjEoKS0+c21vb3RoZWRWYWx1ZSgpOwotICAg
ICAgICAgICAgdmFsdWUyID0gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjIoKS0+c21vb3Ro
ZWRWYWx1ZSgpOwotICAgICAgICAgICAgZ2FpbiA9IGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0
ZXIzKCktPnNtb290aGVkVmFsdWUoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHZh
bHVlMSA9IGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIxKCktPnZhbHVlKCk7Ci0gICAgICAg
ICAgICB2YWx1ZTIgPSBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMigpLT52YWx1ZSgpOwot
ICAgICAgICAgICAgZ2FpbiA9IGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIzKCktPnZhbHVl
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDb252ZXJ0IGZyb20gSGVydHogdG8gbm9ybWFs
aXplZCBmcmVxdWVuY3kgMCAtPiAxLgotICAgICAgICBkb3VibGUgbnlxdWlzdCA9IHRoaXMtPm55
cXVpc3QoKTsKLSAgICAgICAgZG91YmxlIG5vcm1hbGl6ZWRGcmVxdWVuY3kgPSB2YWx1ZTEgLyBu
eXF1aXN0OwotCi0gICAgICAgIC8vIENvbmZpZ3VyZSB0aGUgYmlxdWFkIHdpdGggdGhlIG5ldyBm
aWx0ZXIgcGFyYW1ldGVycyBmb3IgdGhlIGFwcHJvcHJpYXRlIHR5cGUgb2YgZmlsdGVyLgotICAg
ICAgICBzd2l0Y2ggKGJpcXVhZFByb2Nlc3NvcigpLT50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBC
aXF1YWRQcm9jZXNzb3I6Okxvd1Bhc3M6Ci0gICAgICAgICAgICBtX2JpcXVhZC5zZXRMb3dwYXNz
UGFyYW1zKG5vcm1hbGl6ZWRGcmVxdWVuY3ksIHZhbHVlMik7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIEJpcXVhZFByb2Nlc3Nvcjo6SGlnaFBhc3M6Ci0gICAgICAgICAgICBt
X2JpcXVhZC5zZXRIaWdocGFzc1BhcmFtcyhub3JtYWxpemVkRnJlcXVlbmN5LCB2YWx1ZTIpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBCaXF1YWRQcm9jZXNzb3I6OkJhbmRQ
YXNzOgotICAgICAgICAgICAgbV9iaXF1YWQuc2V0QmFuZHBhc3NQYXJhbXMobm9ybWFsaXplZEZy
ZXF1ZW5jeSwgdmFsdWUyKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQmlx
dWFkUHJvY2Vzc29yOjpMb3dTaGVsZjoKLSAgICAgICAgICAgIG1fYmlxdWFkLnNldExvd1NoZWxm
UGFyYW1zKG5vcm1hbGl6ZWRGcmVxdWVuY3ksIGdhaW4pOwotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgY2FzZSBCaXF1YWRQcm9jZXNzb3I6OkhpZ2hTaGVsZjoKLSAgICAgICAgICAgIG1f
YmlxdWFkLnNldEhpZ2hTaGVsZlBhcmFtcyhub3JtYWxpemVkRnJlcXVlbmN5LCBnYWluKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQmlxdWFkUHJvY2Vzc29yOjpQZWFraW5n
OgotICAgICAgICAgICAgbV9iaXF1YWQuc2V0UGVha2luZ1BhcmFtcyhub3JtYWxpemVkRnJlcXVl
bmN5LCB2YWx1ZTIsIGdhaW4pOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBC
aXF1YWRQcm9jZXNzb3I6Ok5vdGNoOgotICAgICAgICAgICAgbV9iaXF1YWQuc2V0Tm90Y2hQYXJh
bXMobm9ybWFsaXplZEZyZXF1ZW5jeSwgdmFsdWUyKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgQmlxdWFkUHJvY2Vzc29yOjpBbGxwYXNzOgotICAgICAgICAgICAgbV9iaXF1
YWQuc2V0QWxscGFzc1BhcmFtcyhub3JtYWxpemVkRnJlcXVlbmN5LCB2YWx1ZTIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQmlxdWFkRFNQS2VybmVs
Ojpwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgc2l6ZV90
IGZyYW1lc1RvUHJvY2VzcykKLXsKLSAgICBBU1NFUlQoc291cmNlICYmIGRlc3RpbmF0aW9uICYm
IGJpcXVhZFByb2Nlc3NvcigpKTsKLSAgICAKLSAgICAvLyBSZWNvbXB1dGUgZmlsdGVyIGNvZWZm
aWNpZW50cyBpZiBhbnkgb2YgdGhlIHBhcmFtZXRlcnMgaGF2ZSBjaGFuZ2VkLgotICAgIC8vIEZJ
WE1FOiBhcyBhbiBvcHRpbWl6YXRpb24sIGltcGxlbWVudCBhIHdheSB0aGF0IGEgQmlxdWFkIG9i
amVjdCBjYW4gc2ltcGx5IGNvcHkgaXRzIGludGVybmFsIGZpbHRlciBjb2VmZmljaWVudHMgZnJv
bSBhbm90aGVyIEJpcXVhZCBvYmplY3QuCi0gICAgLy8gVGhlbiByZS1mYWN0b3IgdGhpcyBjb2Rl
IHRvIG9ubHkgcnVuIGZvciB0aGUgZmlyc3QgQmlxdWFkRFNQS2VybmVsIG9mIGVhY2ggQmlxdWFk
UHJvY2Vzc29yLgotCi0gICAgdXBkYXRlQ29lZmZpY2llbnRzSWZOZWNlc3NhcnkodHJ1ZSwgZmFs
c2UpOwotCi0gICAgbV9iaXF1YWQucHJvY2Vzcyhzb3VyY2UsIGRlc3RpbmF0aW9uLCBmcmFtZXNU
b1Byb2Nlc3MpOwotfQotCi12b2lkIEJpcXVhZERTUEtlcm5lbDo6Z2V0RnJlcXVlbmN5UmVzcG9u
c2UoaW50IG5GcmVxdWVuY2llcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBmbG9hdCogZnJlcXVlbmN5SHosCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIG1hZ1Jlc3BvbnNlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBwaGFzZVJlc3BvbnNlKQotewotICAg
IGJvb2wgaXNHb29kID0gbkZyZXF1ZW5jaWVzID4gMCAmJiBmcmVxdWVuY3lIeiAmJiBtYWdSZXNw
b25zZSAmJiBwaGFzZVJlc3BvbnNlOwotICAgIEFTU0VSVChpc0dvb2QpOwotICAgIGlmICghaXNH
b29kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8ZmxvYXQ+IGZyZXF1ZW5jeShuRnJl
cXVlbmNpZXMpOwotCi0gICAgZG91YmxlIG55cXVpc3QgPSB0aGlzLT5ueXF1aXN0KCk7Ci0KLSAg
ICAvLyBDb252ZXJ0IGZyb20gZnJlcXVlbmN5IGluIEh6IHRvIG5vcm1hbGl6ZWQgZnJlcXVlbmN5
ICgwIC0+IDEpLAotICAgIC8vIHdpdGggMSBlcXVhbCB0byB0aGUgTnlxdWlzdCBmcmVxdWVuY3ku
Ci0gICAgZm9yIChpbnQgayA9IDA7IGsgPCBuRnJlcXVlbmNpZXM7ICsraykKLSAgICAgICAgZnJl
cXVlbmN5W2tdID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChmcmVxdWVuY3lIeltrXSAvIG55cXVp
c3QpOwotCi0gICAgLy8gV2Ugd2FudCB0byBnZXQgdGhlIGZpbmFsIHZhbHVlcyBvZiB0aGUgY29l
ZmZpY2llbnRzIGFuZCBjb21wdXRlCi0gICAgLy8gdGhlIHJlc3BvbnNlIGZyb20gdGhhdCBpbnN0
ZWFkIG9mIHNvbWUgaW50ZXJtZWRpYXRlIHNtb290aGVkCi0gICAgLy8gc2V0LiBGb3JjZWZ1bGx5
IHVwZGF0ZSB0aGUgY29lZmZpY2llbnRzIGV2ZW4gaWYgdGhleSBhcmUgbm90Ci0gICAgLy8gZGly
dHkuCi0KLSAgICB1cGRhdGVDb2VmZmljaWVudHNJZk5lY2Vzc2FyeShmYWxzZSwgdHJ1ZSk7Ci0K
LSAgICBtX2JpcXVhZC5nZXRGcmVxdWVuY3lSZXNwb25zZShuRnJlcXVlbmNpZXMsIGZyZXF1ZW5j
eS5kYXRhKCksIG1hZ1Jlc3BvbnNlLCBwaGFzZVJlc3BvbnNlKTsKLX0KLQotZG91YmxlIEJpcXVh
ZERTUEtlcm5lbDo6dGFpbFRpbWUoKSBjb25zdAotewotICAgIHJldHVybiBNYXhCaXF1YWREZWxh
eVRpbWU7Ci19Ci0KLWRvdWJsZSBCaXF1YWREU1BLZXJuZWw6OmxhdGVuY3lUaW1lKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gMDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVh
ZERTUEtlcm5lbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVh
ZERTUEtlcm5lbC5oCShyZXZpc2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9CaXF1YWREU1BLZXJuZWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBCaXF1YWREU1BLZXJuZWxfaAotI2RlZmluZSBCaXF1YWREU1BLZXJu
ZWxfaAotCi0jaW5jbHVkZSAiQXVkaW9EU1BLZXJuZWwuaCIKLSNpbmNsdWRlICJCaXF1YWQuaCIK
LSNpbmNsdWRlICJCaXF1YWRQcm9jZXNzb3IuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBCaXF1YWRQcm9jZXNzb3I7Ci0KLS8vIEJpcXVhZERTUEtlcm5lbCBpcyBhbiBBdWRpb0RT
UEtlcm5lbCBhbmQgaXMgcmVzcG9uc2libGUgZm9yIGZpbHRlcmluZyBvbmUgY2hhbm5lbCBvZiBh
IEJpcXVhZFByb2Nlc3NvciB1c2luZyBhIEJpcXVhZCBvYmplY3QuCi0KLWNsYXNzIEJpcXVhZERT
UEtlcm5lbCA6IHB1YmxpYyBBdWRpb0RTUEtlcm5lbCB7Ci1wdWJsaWM6ICAKLSAgICBCaXF1YWRE
U1BLZXJuZWwoQmlxdWFkUHJvY2Vzc29yKiBwcm9jZXNzb3IpCi0gICAgOiBBdWRpb0RTUEtlcm5l
bChwcm9jZXNzb3IpCi0gICAgewotICAgIH0KLSAgICAKLSAgICAvLyBBdWRpb0RTUEtlcm5lbAot
ICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0
LCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSB7IG1f
YmlxdWFkLnJlc2V0KCk7IH0KLQotICAgIC8vIEdldCB0aGUgbWFnbml0dWRlIGFuZCBwaGFzZSBy
ZXNwb25zZSBvZiB0aGUgZmlsdGVyIGF0IHRoZSBnaXZlbgotICAgIC8vIHNldCBvZiBmcmVxdWVu
Y2llcyAoaW4gSHopLiBUaGUgcGhhc2UgcmVzcG9uc2UgaXMgaW4gcmFkaWFucy4KLSAgICB2b2lk
IGdldEZyZXF1ZW5jeVJlc3BvbnNlKGludCBuRnJlcXVlbmNpZXMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBmbG9hdCogZnJlcXVlbmN5SHosCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmbG9hdCogbWFnUmVzcG9uc2UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmbG9hdCogcGhhc2VSZXNwb25zZSk7Ci0KLSAgICB2aXJ0dWFsIGRvdWJsZSB0YWls
VGltZSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkg
Y29uc3QgT1ZFUlJJREU7Ci0KLXByb3RlY3RlZDoKLSAgICBCaXF1YWQgbV9iaXF1YWQ7Ci0gICAg
QmlxdWFkUHJvY2Vzc29yKiBiaXF1YWRQcm9jZXNzb3IoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxC
aXF1YWRQcm9jZXNzb3IqPihwcm9jZXNzb3IoKSk7IH0KLQotICAgIC8vIFRvIHByZXZlbnQgYXVk
aW8gZ2xpdGNoZXMgd2hlbiBwYXJhbWV0ZXJzIGFyZSBjaGFuZ2VkLAotICAgIC8vIGRlemlwcGVy
aW5nIGlzIHVzZWQgdG8gc2xvd2x5IGNoYW5nZSB0aGUgcGFyYW1ldGVycy4KLSAgICAvLyB8dXNl
U21vb3RoaW5nfCBpbXBsaWVzIHRoYXQgd2Ugd2FudCB0byB1cGRhdGUgdXNpbmcgdGhlCi0gICAg
Ly8gc21vb3RoZWQgdmFsdWVzLiBPdGhlcndpc2UgdGhlIGZpbmFsIHRhcmdldCB2YWx1ZXMgYXJl
Ci0gICAgLy8gdXNlZC4gSWYgfGZvcmNlVXBkYXRlfCBpcyB0cnVlLCB3ZSB1cGRhdGUgdGhlIGNv
ZWZmaWNpZW50cyBldmVuCi0gICAgLy8gaWYgdGhleSBhcmUgbm90IGRpcnR5LiAoVXNlZCB3aGVu
IGNvbXB1dGluZyB0aGUgZnJlcXVlbmN5Ci0gICAgLy8gcmVzcG9uc2UuKQotICAgIHZvaWQgdXBk
YXRlQ29lZmZpY2llbnRzSWZOZWNlc3NhcnkoYm9vbCB1c2VTbW9vdGhpbmcsIGJvb2wgZm9yY2VV
cGRhdGUpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQmlxdWFk
RFNQS2VybmVsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5v
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRl
ck5vZGUuY3BwCShyZXZpc2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9C
aXF1YWRGaWx0ZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3NyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQot
I2luY2x1ZGUgIkJpcXVhZEZpbHRlck5vZGUuaCIKLQotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1CaXF1YWRGaWx0ZXJOb2RlOjpCaXF1YWRGaWx0
ZXJOb2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICA6IEF1
ZGlvQmFzaWNQcm9jZXNzb3JOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCi17Ci0gICAgLy8gSW5p
dGlhbGx5IHNldHVwIGFzIGxvd3Bhc3MgZmlsdGVyLgotICAgIG1fcHJvY2Vzc29yID0gYWRvcHRQ
dHIobmV3IEJpcXVhZFByb2Nlc3NvcihCaXF1YWRQcm9jZXNzb3I6Okxvd1Bhc3MsIHNhbXBsZVJh
dGUsIDEsIGZhbHNlKSk7Ci0gICAgYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjEoKS0+c2V0
Q29udGV4dChjb250ZXh0KTsKLSAgICBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMigpLT5z
ZXRDb250ZXh0KGNvbnRleHQpOwotICAgIGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIzKCkt
PnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgc2V0Tm9kZVR5cGUoTm9kZVR5cGVCaXF1YWRGaWx0
ZXIpOwotfQotCi12b2lkIEJpcXVhZEZpbHRlck5vZGU6OnNldFR5cGUodW5zaWduZWQgc2hvcnQg
dHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKHR5cGUgPiBCaXF1YWRQcm9jZXNz
b3I6OkFsbHBhc3MpIHsKLSAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBiaXF1YWRQcm9jZXNzb3IoKS0+c2V0VHlwZShzdGF0
aWNfY2FzdDxCaXF1YWRQcm9jZXNzb3I6OkZpbHRlclR5cGU+KHR5cGUpKTsKLX0KLQotCi12b2lk
IEJpcXVhZEZpbHRlck5vZGU6OmdldEZyZXF1ZW5jeVJlc3BvbnNlKGNvbnN0IEZsb2F0MzJBcnJh
eSogZnJlcXVlbmN5SHosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEZsb2F0MzJBcnJheSogbWFnUmVzcG9uc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZsb2F0MzJBcnJheSogcGhhc2VSZXNwb25zZSkKLXsKLSAgICBp
ZiAoIWZyZXF1ZW5jeUh6IHx8ICFtYWdSZXNwb25zZSB8fCAhcGhhc2VSZXNwb25zZSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIGludCBuID0gc3RkOjptaW4oZnJlcXVlbmN5SHotPmxlbmd0
aCgpLAotICAgICAgICAgICAgICAgICAgICAgc3RkOjptaW4obWFnUmVzcG9uc2UtPmxlbmd0aCgp
LCBwaGFzZVJlc3BvbnNlLT5sZW5ndGgoKSkpOwotCi0gICAgaWYgKG4pIHsKLSAgICAgICAgYmlx
dWFkUHJvY2Vzc29yKCktPmdldEZyZXF1ZW5jeVJlc3BvbnNlKG4sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY3lIei0+ZGF0YSgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFnUmVzcG9uc2Ut
PmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBoYXNlUmVzcG9uc2UtPmRhdGEoKSk7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaAkocmV2aXNpb24gMTExMjMzKQorKysgU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEJpcXVhZEZpbHRlck5vZGVfaAotI2Rl
ZmluZSBCaXF1YWRGaWx0ZXJOb2RlX2gKLQotI2luY2x1ZGUgIkF1ZGlvQmFzaWNQcm9jZXNzb3JO
b2RlLmgiCi0jaW5jbHVkZSAiQmlxdWFkUHJvY2Vzc29yLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgQXVkaW9QYXJhbTsKLSAgICAKLWNsYXNzIEJpcXVhZEZpbHRlck5vZGUgOiBw
dWJsaWMgQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUgewotcHVibGljOgotICAgIC8vIFRoZXNlIG11
c3QgYmUgZGVmaW5lZCBhcyBpbiB0aGUgLmlkbCBmaWxlIGFuZCBtdXN0IG1hdGNoIHRob3NlIGlu
IHRoZSBCaXF1YWRQcm9jZXNzb3IgY2xhc3MuCi0gICAgZW51bSB7Ci0gICAgICAgIExPV1BBU1Mg
PSAwLAotICAgICAgICBISUdIUEFTUyA9IDEsCi0gICAgICAgIEJBTkRQQVNTID0gMiwKLSAgICAg
ICAgTE9XU0hFTEYgPSAzLAotICAgICAgICBISUdIU0hFTEYgPSA0LAotICAgICAgICBQRUFLSU5H
ID0gNSwKLSAgICAgICAgTk9UQ0ggPSA2LAotICAgICAgICBBTExQQVNTID0gNwotICAgIH07Ci0K
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxCaXF1YWRGaWx0ZXJOb2RlPiBjcmVhdGUoQXVkaW9Db250
ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBCaXF1YWRGaWx0ZXJOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpKTsgICAgICAK
LSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgc2hvcnQgdHlwZSgpIHsgcmV0dXJuIGJpcXVhZFBy
b2Nlc3NvcigpLT50eXBlKCk7IH0KLSAgICB2b2lkIHNldFR5cGUodW5zaWduZWQgc2hvcnQgdHlw
ZSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgQXVkaW9QYXJhbSogZnJlcXVlbmN5KCkgeyByZXR1
cm4gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjEoKTsgfQotICAgIEF1ZGlvUGFyYW0qIHEo
KSB7IHJldHVybiBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMigpOyB9Ci0gICAgQXVkaW9Q
YXJhbSogZ2FpbigpIHsgcmV0dXJuIGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIzKCk7IH0K
LQotICAgIC8vIEdldCB0aGUgbWFnbml0dWRlIGFuZCBwaGFzZSByZXNwb25zZSBvZiB0aGUgZmls
dGVyIGF0IHRoZSBnaXZlbgotICAgIC8vIHNldCBvZiBmcmVxdWVuY2llcyAoaW4gSHopLiBUaGUg
cGhhc2UgcmVzcG9uc2UgaXMgaW4gcmFkaWFucy4KLSAgICB2b2lkIGdldEZyZXF1ZW5jeVJlc3Bv
bnNlKGNvbnN0IEZsb2F0MzJBcnJheSogZnJlcXVlbmN5SHosCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGbG9hdDMyQXJyYXkqIG1hZ1Jlc3BvbnNlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRmxvYXQzMkFycmF5KiBwaGFzZVJlc3BvbnNlKTsKLQotcHJpdmF0ZToKLSAg
ICBCaXF1YWRGaWx0ZXJOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwotCi0g
ICAgQmlxdWFkUHJvY2Vzc29yKiBiaXF1YWRQcm9jZXNzb3IoKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxCaXF1YWRQcm9jZXNzb3IqPihwcm9jZXNzb3IoKSk7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEJpcXVhZEZpbHRlck5vZGVfaApJbmRleDogU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5pZGwJKHJldmlzaW9uIDExMTIzMykK
KysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgYXVkaW8gewotICAg
IGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKLSAgICAgICAgSlNH
ZW5lcmF0ZVRvSlNPYmplY3QKLSAgICBdIEJpcXVhZEZpbHRlck5vZGUgOiBBdWRpb05vZGUgewot
ICAgICAgICAvLyBGaWx0ZXIgdHlwZS4KLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTE9X
UEFTUyA9IDA7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEhJR0hQQVNTID0gMTsKLSAg
ICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQkFORFBBU1MgPSAyOwotICAgICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBMT1dTSEVMRiA9IDM7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0
IEhJR0hTSEVMRiA9IDQ7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFBFQUtJTkcgPSA1
OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBOT1RDSCA9IDY7Ci0gICAgICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0IEFMTFBBU1MgPSA3OwotCi0gICAgICAgIGF0dHJpYnV0ZSB1bnNpZ25l
ZCBzaG9ydCB0eXBlCi0gICAgICAgICAgICBzZXR0ZXIgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0g
ICAgICAgIAotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9QYXJhbSBmcmVxdWVuY3k7
IC8vIGluIEhlcnR6Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIFE7IC8v
IFF1YWxpdHkgZmFjdG9yCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIGdh
aW47IC8vIGluIERlY2liZWxzCi0KLSAgICAgICAgdm9pZCBnZXRGcmVxdWVuY3lSZXNwb25zZShp
biBGbG9hdDMyQXJyYXkgZnJlcXVlbmN5SHosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW4gRmxvYXQzMkFycmF5IG1hZ1Jlc3BvbnNlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluIEZsb2F0MzJBcnJheSBwaGFzZVJlc3BvbnNlKTsKLSAgICB9OwotfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuY3BwCShyZXZp
c2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIkJpcXVh
ZFByb2Nlc3Nvci5oIgotCi0jaW5jbHVkZSAiQmlxdWFkRFNQS2VybmVsLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLSAgICAKLUJpcXVhZFByb2Nlc3Nvcjo6QmlxdWFkUHJvY2Vzc29yKGZsb2F0
IHNhbXBsZVJhdGUsIHNpemVfdCBudW1iZXJPZkNoYW5uZWxzLCBib29sIGF1dG9Jbml0aWFsaXpl
KQotICAgIDogQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3Ioc2FtcGxlUmF0ZSwgbnVtYmVyT2ZDaGFu
bmVscykKLSAgICAsIG1fdHlwZShMb3dQYXNzKQotICAgICwgbV9wYXJhbWV0ZXIxKDApCi0gICAg
LCBtX3BhcmFtZXRlcjIoMCkKLSAgICAsIG1fcGFyYW1ldGVyMygwKQotICAgICwgbV9maWx0ZXJD
b2VmZmljaWVudHNEaXJ0eSh0cnVlKQotewotICAgIGRvdWJsZSBueXF1aXN0ID0gMC41ICogdGhp
cy0+c2FtcGxlUmF0ZSgpOwotCi0gICAgLy8gQ3JlYXRlIHBhcmFtZXRlcnMgZm9yIEJpcXVhZEZp
bHRlck5vZGUuCi0gICAgbV9wYXJhbWV0ZXIxID0gQXVkaW9QYXJhbTo6Y3JlYXRlKCJmcmVxdWVu
Y3kiLCAzNTAuMCwgMTAuMCwgbnlxdWlzdCk7Ci0gICAgbV9wYXJhbWV0ZXIyID0gQXVkaW9QYXJh
bTo6Y3JlYXRlKCJRIiwgMSwgMC4wMDAxLCAxMDAwLjApOwotICAgIG1fcGFyYW1ldGVyMyA9IEF1
ZGlvUGFyYW06OmNyZWF0ZSgiZ2FpbiIsIDAuMCwgLTQwLCA0MCk7Ci0KLSAgICBpZiAoYXV0b0lu
aXRpYWxpemUpCi0gICAgICAgIGluaXRpYWxpemUoKTsKLX0KLQotQmlxdWFkUHJvY2Vzc29yOjpC
aXF1YWRQcm9jZXNzb3IoRmlsdGVyVHlwZSB0eXBlLCBmbG9hdCBzYW1wbGVSYXRlLCBzaXplX3Qg
bnVtYmVyT2ZDaGFubmVscywgYm9vbCBhdXRvSW5pdGlhbGl6ZSkKLSAgICA6IEF1ZGlvRFNQS2Vy
bmVsUHJvY2Vzc29yKHNhbXBsZVJhdGUsIG51bWJlck9mQ2hhbm5lbHMpCi0gICAgLCBtX3R5cGUo
dHlwZSkKLSAgICAsIG1fcGFyYW1ldGVyMSgwKQotICAgICwgbV9wYXJhbWV0ZXIyKDApCi0gICAg
LCBtX3BhcmFtZXRlcjMoMCkKLSAgICAsIG1fZmlsdGVyQ29lZmZpY2llbnRzRGlydHkodHJ1ZSkK
LXsKLSAgICBkb3VibGUgbnlxdWlzdCA9IDAuNSAqIHRoaXMtPnNhbXBsZVJhdGUoKTsKLSAgICAK
LSAgICAvLyBIYW5kbGUgdGhlIGRlcHJlY2F0ZWQgTG93UGFzczJGaWx0ZXJOb2RlIGFuZCBIaWdo
UGFzczJGaWx0ZXJOb2RlLgotICAgIHN3aXRjaCAodHlwZSkgewotICAgIC8vIEhpZ2hwYXNzIGFu
ZCBsb3dwYXNzIHNoYXJlIHRoZSBzYW1lIHBhcmFtZXRlcnMgYW5kIG9ubHkgZGlmZmVyIGluIGZp
bHRlciB0eXBlLgotICAgIGNhc2UgTG93UGFzczoKLSAgICBjYXNlIEhpZ2hQYXNzOgotICAgICAg
ICBtX3BhcmFtZXRlcjEgPSBBdWRpb1BhcmFtOjpjcmVhdGUoImZyZXF1ZW5jeSIsIDM1MC4wLCAy
MC4wLCBueXF1aXN0KTsKLSAgICAgICAgbV9wYXJhbWV0ZXIyID0gQXVkaW9QYXJhbTo6Y3JlYXRl
KCJyZXNvbmFuY2UiLCAwLjAsIC0yMC4wLCAyMC4wKTsKLSAgICAgICAgbV9wYXJhbWV0ZXIzID0g
QXVkaW9QYXJhbTo6Y3JlYXRlKCJ1bnVzZWQiLCAwLjAsIDAuMCwgMS4wKTsKLSAgICAgICAgYnJl
YWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9
Ci0KLSAgICBpZiAoYXV0b0luaXRpYWxpemUpCi0gICAgICAgIGluaXRpYWxpemUoKTsKLX0KLQot
QmlxdWFkUHJvY2Vzc29yOjp+QmlxdWFkUHJvY2Vzc29yKCkKLXsKLSAgICBpZiAoaXNJbml0aWFs
aXplZCgpKQotICAgICAgICB1bmluaXRpYWxpemUoKTsKLX0KLQotUGFzc093blB0cjxBdWRpb0RT
UEtlcm5lbD4gQmlxdWFkUHJvY2Vzc29yOjpjcmVhdGVLZXJuZWwoKQotewotICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgQmlxdWFkRFNQS2VybmVsKHRoaXMpKTsKLX0KLQotdm9pZCBCaXF1YWRQcm9j
ZXNzb3I6OmNoZWNrRm9yRGlydHlDb2VmZmljaWVudHMoKQotewotICAgIC8vIERlYWwgd2l0aCBz
bW9vdGhpbmcgLyBkZS16aXBwZXJpbmcuIFN0YXJ0IG91dCBhc3N1bWluZyBmaWx0ZXIgcGFyYW1l
dGVycyBhcmUgbm90IGNoYW5naW5nLgotCi0gICAgLy8gVGhlIEJpcXVhZERTUEtlcm5lbCBvYmpl
Y3RzIHJlbHkgb24gdGhpcyB2YWx1ZSB0byBzZWUgaWYgdGhleSBuZWVkIHRvIHJlLWNvbXB1dGUg
dGhlaXIgaW50ZXJuYWwgZmlsdGVyIGNvZWZmaWNpZW50cy4KLSAgICBtX2ZpbHRlckNvZWZmaWNp
ZW50c0RpcnR5ID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKG1faGFzSnVzdFJlc2V0KSB7Ci0gICAg
ICAgIC8vIFNuYXAgdG8gZXhhY3QgdmFsdWVzIGZpcnN0IHRpbWUgYWZ0ZXIgcmVzZXQsIHRoZW4g
c21vb3RoIGZvciBzdWJzZXF1ZW50IGNoYW5nZXMuCi0gICAgICAgIG1fcGFyYW1ldGVyMS0+cmVz
ZXRTbW9vdGhlZFZhbHVlKCk7Ci0gICAgICAgIG1fcGFyYW1ldGVyMi0+cmVzZXRTbW9vdGhlZFZh
bHVlKCk7Ci0gICAgICAgIG1fcGFyYW1ldGVyMy0+cmVzZXRTbW9vdGhlZFZhbHVlKCk7Ci0gICAg
ICAgIG1fZmlsdGVyQ29lZmZpY2llbnRzRGlydHkgPSB0cnVlOwotICAgICAgICBtX2hhc0p1c3RS
ZXNldCA9IGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFNtb290aCBhbGwgb2YgdGhl
IGZpbHRlciBwYXJhbWV0ZXJzLiBJZiB0aGV5IGhhdmVuJ3QgeWV0IGNvbnZlcmdlZCB0byB0aGVp
ciB0YXJnZXQgdmFsdWUgdGhlbiBtYXJrIGNvZWZmaWNpZW50cyBhcyBkaXJ0eS4KLSAgICAgICAg
Ym9vbCBpc1N0YWJsZTEgPSBtX3BhcmFtZXRlcjEtPnNtb290aCgpOwotICAgICAgICBib29sIGlz
U3RhYmxlMiA9IG1fcGFyYW1ldGVyMi0+c21vb3RoKCk7Ci0gICAgICAgIGJvb2wgaXNTdGFibGUz
ID0gbV9wYXJhbWV0ZXIzLT5zbW9vdGgoKTsKLSAgICAgICAgaWYgKCEoaXNTdGFibGUxICYmIGlz
U3RhYmxlMiAmJiBpc1N0YWJsZTMpKQotICAgICAgICAgICAgbV9maWx0ZXJDb2VmZmljaWVudHNE
aXJ0eSA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIEJpcXVhZFByb2Nlc3Nvcjo6cHJvY2Vzcyhj
b25zdCBBdWRpb0J1cyogc291cmNlLCBBdWRpb0J1cyogZGVzdGluYXRpb24sIHNpemVfdCBmcmFt
ZXNUb1Byb2Nlc3MpCi17Ci0gICAgaWYgKCFpc0luaXRpYWxpemVkKCkpIHsKLSAgICAgICAgZGVz
dGluYXRpb24tPnplcm8oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAgICAgCi0gICAg
Y2hlY2tGb3JEaXJ0eUNvZWZmaWNpZW50cygpOwotICAgICAgICAgICAgCi0gICAgLy8gRm9yIGVh
Y2ggY2hhbm5lbCBvZiBvdXIgaW5wdXQsIHByb2Nlc3MgdXNpbmcgdGhlIGNvcnJlc3BvbmRpbmcg
QmlxdWFkRFNQS2VybmVsIGludG8gdGhlIG91dHB1dCBjaGFubmVsLgotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2tlcm5lbHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fa2VybmVsc1tp
XS0+cHJvY2Vzcyhzb3VyY2UtPmNoYW5uZWwoaSktPmRhdGEoKSwgZGVzdGluYXRpb24tPmNoYW5u
ZWwoaSktPm11dGFibGVEYXRhKCksIGZyYW1lc1RvUHJvY2Vzcyk7Ci19Ci0KLXZvaWQgQmlxdWFk
UHJvY2Vzc29yOjpzZXRUeXBlKEZpbHRlclR5cGUgdHlwZSkKLXsKLSAgICBpZiAodHlwZSAhPSBt
X3R5cGUpIHsKLSAgICAgICAgbV90eXBlID0gdHlwZTsKLSAgICAgICAgcmVzZXQoKTsgLy8gVGhl
IGZpbHRlciBzdGF0ZSBtdXN0IGJlIHJlc2V0IG9ubHkgaWYgdGhlIHR5cGUgaGFzIGNoYW5nZWQu
Ci0gICAgfQotfQotCi12b2lkIEJpcXVhZFByb2Nlc3Nvcjo6Z2V0RnJlcXVlbmN5UmVzcG9uc2Uo
aW50IG5GcmVxdWVuY2llcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBmbG9hdCogZnJlcXVlbmN5SHosCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmxvYXQqIG1hZ1Jlc3BvbnNlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBwaGFzZVJlc3BvbnNlKQotewotICAgIC8v
IENvbXB1dGUgdGhlIGZyZXF1ZW5jeSByZXNwb25zZSBvbiBhIHNlcGFyYXRlIHRlbXBvcmFyeSBr
ZXJuZWwKLSAgICAvLyB0byBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIHRoZSBwcm9jZXNzaW5nIHJ1
bm5pbmcgaW4gdGhlIGF1ZGlvCi0gICAgLy8gdGhyZWFkIG9uIHRoZSBtYWluIGtlcm5lbHMuCi0g
ICAgCi0gICAgT3duUHRyPEJpcXVhZERTUEtlcm5lbD4gcmVzcG9uc2VLZXJuZWwgPSBhZG9wdFB0
cihuZXcgQmlxdWFkRFNQS2VybmVsKHRoaXMpKTsKLQotICAgIHJlc3BvbnNlS2VybmVsLT5nZXRG
cmVxdWVuY3lSZXNwb25zZShuRnJlcXVlbmNpZXMsIGZyZXF1ZW5jeUh6LCBtYWdSZXNwb25zZSwg
cGhhc2VSZXNwb25zZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRQ
cm9jZXNzb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRQ
cm9jZXNzb3IuaAkocmV2aXNpb24gMTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QmlxdWFkUHJvY2Vzc29yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOTQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgQmlxdWFkUHJvY2Vzc29yX2gKLSNkZWZpbmUgQmlxdWFkUHJvY2Vzc29y
X2gKLQotI2luY2x1ZGUgIkF1ZGlvRFNQS2VybmVsLmgiCi0jaW5jbHVkZSAiQXVkaW9EU1BLZXJu
ZWxQcm9jZXNzb3IuaCIKLSNpbmNsdWRlICJBdWRpb05vZGUuaCIKLSNpbmNsdWRlICJBdWRpb1Bh
cmFtLmgiCi0jaW5jbHVkZSAiQmlxdWFkLmgiCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEJpcXVhZFByb2Nlc3NvciBpcyBhbiBBdWRpb0RTUEtl
cm5lbFByb2Nlc3NvciB3aGljaCB1c2VzIEJpcXVhZCBvYmplY3RzIHRvIGltcGxlbWVudCBzZXZl
cmFsIGNvbW1vbiBmaWx0ZXJzLgotCi1jbGFzcyBCaXF1YWRQcm9jZXNzb3IgOiBwdWJsaWMgQXVk
aW9EU1BLZXJuZWxQcm9jZXNzb3IgewotcHVibGljOgotICAgIGVudW0gRmlsdGVyVHlwZSB7Ci0g
ICAgICAgIExvd1Bhc3MgPSAwLAotICAgICAgICBIaWdoUGFzcyA9IDEsCi0gICAgICAgIEJhbmRQ
YXNzID0gMiwKLSAgICAgICAgTG93U2hlbGYgPSAzLAotICAgICAgICBIaWdoU2hlbGYgPSA0LAot
ICAgICAgICBQZWFraW5nID0gNSwKLSAgICAgICAgTm90Y2ggPSA2LAotICAgICAgICBBbGxwYXNz
ID0gNwotICAgIH07Ci0KLSAgICBCaXF1YWRQcm9jZXNzb3IoZmxvYXQgc2FtcGxlUmF0ZSwgc2l6
ZV90IG51bWJlck9mQ2hhbm5lbHMsIGJvb2wgYXV0b0luaXRpYWxpemUpOwotCi0gICAgLy8gT2xk
IGNvbnN0cnVjdG9yIHVzZWQgYnkgZGVwcmVjYXRlZCBMb3dQYXNzMkZpbHRlck5vZGUgYW5kIEhp
Z2hQYXNzMkZpbHRlck5vZGUKLSAgICBCaXF1YWRQcm9jZXNzb3IoRmlsdGVyVHlwZSwgZmxvYXQg
c2FtcGxlUmF0ZSwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGJvb2wgYXV0b0luaXRpYWxpemUg
PSB0cnVlKTsKLQotICAgIHZpcnR1YWwgfkJpcXVhZFByb2Nlc3NvcigpOwotICAgIAotICAgIHZp
cnR1YWwgUGFzc093blB0cjxBdWRpb0RTUEtlcm5lbD4gY3JlYXRlS2VybmVsKCk7Ci0gICAgICAg
IAotICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKGNvbnN0IEF1ZGlvQnVzKiBzb3VyY2UsIEF1ZGlv
QnVzKiBkZXN0aW5hdGlvbiwgc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7Ci0KLSAgICAvLyBHZXQg
dGhlIG1hZ25pdHVkZSBhbmQgcGhhc2UgcmVzcG9uc2Ugb2YgdGhlIGZpbHRlciBhdCB0aGUgZ2l2
ZW4KLSAgICAvLyBzZXQgb2YgZnJlcXVlbmNpZXMgKGluIEh6KS4gVGhlIHBoYXNlIHJlc3BvbnNl
IGlzIGluIHJhZGlhbnMuCi0gICAgdm9pZCBnZXRGcmVxdWVuY3lSZXNwb25zZShpbnQgbkZyZXF1
ZW5jaWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIGZyZXF1
ZW5jeUh6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIG1hZ1Jlc3BvbnNl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIHBoYXNlUmVzcG9uc2UpOwot
Ci0gICAgdm9pZCBjaGVja0ZvckRpcnR5Q29lZmZpY2llbnRzKCk7Ci0gICAgCi0gICAgYm9vbCBm
aWx0ZXJDb2VmZmljaWVudHNEaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyQ29lZmZpY2ll
bnRzRGlydHk7IH0KLQotICAgIEF1ZGlvUGFyYW0qIHBhcmFtZXRlcjEoKSB7IHJldHVybiBtX3Bh
cmFtZXRlcjEuZ2V0KCk7IH0KLSAgICBBdWRpb1BhcmFtKiBwYXJhbWV0ZXIyKCkgeyByZXR1cm4g
bV9wYXJhbWV0ZXIyLmdldCgpOyB9Ci0gICAgQXVkaW9QYXJhbSogcGFyYW1ldGVyMygpIHsgcmV0
dXJuIG1fcGFyYW1ldGVyMy5nZXQoKTsgfQotCi0gICAgRmlsdGVyVHlwZSB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlOyB9Ci0gICAgdm9pZCBzZXRUeXBlKEZpbHRlclR5cGUpOwotCi1wcml2
YXRlOgotICAgIEZpbHRlclR5cGUgbV90eXBlOwotCi0gICAgUmVmUHRyPEF1ZGlvUGFyYW0+IG1f
cGFyYW1ldGVyMTsKLSAgICBSZWZQdHI8QXVkaW9QYXJhbT4gbV9wYXJhbWV0ZXIyOwotICAgIFJl
ZlB0cjxBdWRpb1BhcmFtPiBtX3BhcmFtZXRlcjM7Ci0KLSAgICAvLyBzbyBEU1Aga2VybmVscyBr
bm93IHdoZW4gdG8gcmUtY29tcHV0ZSBjb2VmZmljaWVudHMKLSAgICBib29sIG1fZmlsdGVyQ29l
ZmZpY2llbnRzRGlydHk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBCaXF1YWRQcm9jZXNzb3JfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9s
dmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9s
dmVyTm9kZS5jcHAJKHJldmlzaW9uIDExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0NvbnZvbHZlck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2OCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQot
I2luY2x1ZGUgIkNvbnZvbHZlck5vZGUuaCIKLQotI2luY2x1ZGUgIkF1ZGlvQnVmZmVyLmgiCi0j
aW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlSW5wdXQuaCIKLSNp
bmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKLSNpbmNsdWRlICJSZXZlcmIuaCIKLSNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgotCi0vLyBOb3RlIGFib3V0IGVtcGlyaWNhbCB0dW5pbmc6Ci0v
LyBUaGUgbWF4aW11bSBGRlQgc2l6ZSBhZmZlY3RzIHJldmVyYiBwZXJmb3JtYW5jZSBhbmQgYWNj
dXJhY3kuCi0vLyBJZiB0aGUgcmV2ZXJiIGlzIHNpbmdsZS10aHJlYWRlZCBhbmQgcHJvY2Vzc2Vz
IGVudGlyZWx5IGluIHRoZSByZWFsLXRpbWUgYXVkaW8gdGhyZWFkLAotLy8gaXQncyBpbXBvcnRh
bnQgbm90IHRvIG1ha2UgdGhpcyB0b28gaGlnaC4gIEluIHRoaXMgY2FzZSA4MTkyIGlzIGEgZ29v
ZCB2YWx1ZS4KLS8vIEJ1dCwgdGhlIFJldmVyYiBvYmplY3QgaXMgbXVsdGktdGhyZWFkZWQsIHNv
IHdlIHdhbnQgdGhpcyBhcyBoaWdoIGFzIHBvc3NpYmxlIHdpdGhvdXQgbG9zaW5nIHRvbyBtdWNo
IGFjY3VyYWN5LgotLy8gVmVyeSBsYXJnZSBGRlRzIHdpbGwgaGF2ZSB3b3JzZSBwaGFzZSBlcnJv
cnMuIEdpdmVuIHRoZXNlIGNvbnN0cmFpbnRzIDMyNzY4IGlzIGEgZ29vZCBjb21wcm9taXNlLgot
Y29uc3Qgc2l6ZV90IE1heEZGVFNpemUgPSAzMjc2ODsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1Db252b2x2ZXJOb2RlOjpDb252b2x2ZXJOb2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxv
YXQgc2FtcGxlUmF0ZSkKLSAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQotICAg
ICwgbV9ub3JtYWxpemUodHJ1ZSkKLXsKLSAgICBhZGRJbnB1dChhZG9wdFB0cihuZXcgQXVkaW9O
b2RlSW5wdXQodGhpcykpKTsKLSAgICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZU91
dHB1dCh0aGlzLCAyKSkpOwotICAgIAotICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlQ29udm9sdmVy
KTsKLSAgICAKLSAgICBpbml0aWFsaXplKCk7Ci19Ci0KLUNvbnZvbHZlck5vZGU6On5Db252b2x2
ZXJOb2RlKCkKLXsKLSAgICB1bmluaXRpYWxpemUoKTsKLX0KLQotdm9pZCBDb252b2x2ZXJOb2Rl
Ojpwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgQXVkaW9CdXMqIG91dHB1
dEJ1cyA9IG91dHB1dCgwKS0+YnVzKCk7Ci0gICAgQVNTRVJUKG91dHB1dEJ1cyk7Ci0KLSAgICAv
LyBTeW5jaHJvbml6ZSB3aXRoIHBvc3NpYmxlIGR5bmFtaWMgY2hhbmdlcyB0byB0aGUgaW1wdWxz
ZSByZXNwb25zZS4KLSAgICBpZiAobV9wcm9jZXNzTG9jay50cnlMb2NrKCkpIHsKLSAgICAgICAg
aWYgKCFpc0luaXRpYWxpemVkKCkgfHwgIW1fcmV2ZXJiLmdldCgpKQotICAgICAgICAgICAgb3V0
cHV0QnVzLT56ZXJvKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gUHJvY2VzcyB1
c2luZyB0aGUgY29udm9sdXRpb24gZW5naW5lLgotICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdl
IGNhbiBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbm90aGluZyBpcyBjb25uZWN0ZWQgdG8gdGhlIGlu
cHV0LCBpbiB3aGljaCBjYXNlIHdlJ2xsIGp1c3QgZmVlZCBzaWxlbmNlIGludG8gdGhlIGNvbnZv
bHZlci4KLSAgICAgICAgICAgIC8vIEZJWE1FOiAgSWYgd2Ugd2FudGVkIHRvIGdldCBmYW5jeSB3
ZSBjb3VsZCB0cnkgdG8gZmFjdG9yIGluIHRoZSAndGFpbCB0aW1lJyBhbmQgc3RvcCBwcm9jZXNz
aW5nIG9uY2UgdGhlIHRhaWwgZGllcyBkb3duIGlmCi0gICAgICAgICAgICAvLyB3ZSBrZWVwIGdl
dHRpbmcgZmVkIHNpbGVuY2UuCi0gICAgICAgICAgICBtX3JldmVyYi0+cHJvY2VzcyhpbnB1dCgw
KS0+YnVzKCksIG91dHB1dEJ1cywgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgbV9wcm9jZXNzTG9jay51bmxvY2soKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICAvLyBUb28gYmFkIC0gdGhlIHRyeUxvY2soKSBmYWlsZWQuICBXZSBtdXN0IGJlIGluIHRoZSBt
aWRkbGUgb2Ygc2V0dGluZyBhIG5ldyBpbXB1bHNlIHJlc3BvbnNlLgotICAgICAgICBvdXRwdXRC
dXMtPnplcm8oKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udm9sdmVyTm9kZTo6cmVzZXQoKQotewot
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Byb2Nlc3NMb2NrKTsKLSAgICBpZiAobV9yZXZlcmIu
Z2V0KCkpCi0gICAgICAgIG1fcmV2ZXJiLT5yZXNldCgpOwotfQotCi12b2lkIENvbnZvbHZlck5v
ZGU6OmluaXRpYWxpemUoKQotewotICAgIGlmIChpc0luaXRpYWxpemVkKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICAgICAgCi0gICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQg
Q29udm9sdmVyTm9kZTo6dW5pbml0aWFsaXplKCkKLXsKLSAgICBpZiAoIWlzSW5pdGlhbGl6ZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9yZXZlcmIuY2xlYXIoKTsKLSAgICBBdWRpb05v
ZGU6OnVuaW5pdGlhbGl6ZSgpOwotfQotCi12b2lkIENvbnZvbHZlck5vZGU6OnNldEJ1ZmZlcihB
dWRpb0J1ZmZlciogYnVmZmVyKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAg
Ci0gICAgQVNTRVJUKGJ1ZmZlcik7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMgPSBidWZmZXItPm51bWJlck9mQ2hhbm5l
bHMoKTsKLSAgICBzaXplX3QgYnVmZmVyTGVuZ3RoID0gYnVmZmVyLT5sZW5ndGgoKTsKLQotICAg
IC8vIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIHVwIHRvIGZvdXIgY2hhbm5l
bCBpbXB1bHNlIHJlc3BvbnNlcywgd2hpY2ggYXJlIGludGVycHJldGVkIGFzIHRydWUtc3RlcmVv
IChzZWUgUmV2ZXJiIGNsYXNzKS4KLSAgICBib29sIGlzQnVmZmVyR29vZCA9IG51bWJlck9mQ2hh
bm5lbHMgPiAwICYmIG51bWJlck9mQ2hhbm5lbHMgPD0gNCAmJiBidWZmZXJMZW5ndGg7Ci0gICAg
QVNTRVJUKGlzQnVmZmVyR29vZCk7Ci0gICAgaWYgKCFpc0J1ZmZlckdvb2QpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIFdyYXAgdGhlIEF1ZGlvQnVmZmVyIGJ5IGFuIEF1ZGlvQnVzLiBJdCdz
IGFuIGVmZmljaWVudCBwb2ludGVyIHNldCBhbmQgbm90IGEgbWVtY3B5KCkuCi0gICAgLy8gVGhp
cyBtZW1vcnkgaXMgc2ltcGx5IHVzZWQgaW4gdGhlIFJldmVyYiBjb25zdHJ1Y3RvciBhbmQgbm8g
cmVmZXJlbmNlIHRvIGl0IGlzIGtlcHQgZm9yIGxhdGVyIHVzZSBpbiB0aGF0IGNsYXNzLgotICAg
IEF1ZGlvQnVzIGJ1ZmZlckJ1cyhudW1iZXJPZkNoYW5uZWxzLCBidWZmZXJMZW5ndGgsIGZhbHNl
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKQot
ICAgICAgICBidWZmZXJCdXMuc2V0Q2hhbm5lbE1lbW9yeShpLCBidWZmZXItPmdldENoYW5uZWxE
YXRhKGkpLT5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7Ci0KLSAgICBidWZmZXJCdXMuc2V0U2FtcGxl
UmF0ZShidWZmZXItPnNhbXBsZVJhdGUoKSk7Ci0KLSAgICAvLyBDcmVhdGUgdGhlIHJldmVyYiB3
aXRoIHRoZSBnaXZlbiBpbXB1bHNlIHJlc3BvbnNlLgotICAgIGJvb2wgdXNlQmFja2dyb3VuZFRo
cmVhZHMgPSAhY29udGV4dCgpLT5pc09mZmxpbmVDb250ZXh0KCk7Ci0gICAgT3duUHRyPFJldmVy
Yj4gcmV2ZXJiID0gYWRvcHRQdHIobmV3IFJldmVyYigmYnVmZmVyQnVzLCBBdWRpb05vZGU6OlBy
b2Nlc3NpbmdTaXplSW5GcmFtZXMsIE1heEZGVFNpemUsIDIsIHVzZUJhY2tncm91bmRUaHJlYWRz
LCBtX25vcm1hbGl6ZSkpOwotCi0gICAgewotICAgICAgICAvLyBTeW5jaHJvbml6ZSB3aXRoIHBy
b2Nlc3MoKS4KLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcHJvY2Vzc0xvY2spOwotICAg
ICAgICBtX3JldmVyYiA9IHJldmVyYi5yZWxlYXNlKCk7Ci0gICAgICAgIG1fYnVmZmVyID0gYnVm
ZmVyOwotICAgIH0KLX0KLQotQXVkaW9CdWZmZXIqIENvbnZvbHZlck5vZGU6OmJ1ZmZlcigpCi17
Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICByZXR1cm4gbV9idWZmZXIuZ2V0KCk7
Ci19Ci0KLWRvdWJsZSBDb252b2x2ZXJOb2RlOjp0YWlsVGltZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fcmV2ZXJiID8gbV9yZXZlcmItPmltcHVsc2VSZXNwb25zZUxlbmd0aCgpIC8gc3RhdGlj
X2Nhc3Q8ZG91YmxlPihzYW1wbGVSYXRlKCkpIDogMDsKLX0KLQotZG91YmxlIENvbnZvbHZlck5v
ZGU6OmxhdGVuY3lUaW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZXZlcmIgPyBtX3JldmVy
Yi0+bGF0ZW5jeUZyYW1lcygpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihzYW1wbGVSYXRlKCkpIDog
MDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9B
VURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmgJKHJldmlz
aW9uIDExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDb252
b2x2ZXJOb2RlX2gKLSNkZWZpbmUgQ29udm9sdmVyTm9kZV9oCi0KLSNpbmNsdWRlICJBdWRpb05v
ZGUuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBBdWRpb0J1ZmZlcjsKLWNsYXNzIFJldmVyYjsKLSAgICAKLWNsYXNzIENvbnZvbHZlck5vZGUg
OiBwdWJsaWMgQXVkaW9Ob2RlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb252
b2x2ZXJOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb252b2x2ZXJOb2RlKGNvbnRl
eHQsIHNhbXBsZVJhdGUpKTsgICAgICAKLSAgICB9Ci0gICAgCi0gICAgdmlydHVhbCB+Q29udm9s
dmVyTm9kZSgpOwotICAgIAotICAgIC8vIEF1ZGlvTm9kZQotICAgIHZpcnR1YWwgdm9pZCBwcm9j
ZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOwot
ICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVuaW5pdGlh
bGl6ZSgpOwotCi0gICAgLy8gSW1wdWxzZSByZXNwb25zZXMKLSAgICB2b2lkIHNldEJ1ZmZlcihB
dWRpb0J1ZmZlciopOwotICAgIEF1ZGlvQnVmZmVyKiBidWZmZXIoKTsKLQotICAgIGJvb2wgbm9y
bWFsaXplKCkgY29uc3QgeyByZXR1cm4gbV9ub3JtYWxpemU7IH0KLSAgICB2b2lkIHNldE5vcm1h
bGl6ZShib29sIG5vcm1hbGl6ZSkgeyBtX25vcm1hbGl6ZSA9IG5vcm1hbGl6ZTsgfQotCi1wcml2
YXRlOgotICAgIENvbnZvbHZlck5vZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7
Ci0KLSAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZp
cnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJREU7Ci0KLSAgICBPd25QdHI8
UmV2ZXJiPiBtX3JldmVyYjsKLSAgICBSZWZQdHI8QXVkaW9CdWZmZXI+IG1fYnVmZmVyOwotCi0g
ICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgZHluYW1pYyBjaGFuZ2VzIHRvIHRoZSBjb252b2x1dGlv
biBpbXB1bHNlIHJlc3BvbnNlIHdpdGggcHJvY2VzcygpLgotICAgIG11dGFibGUgTXV0ZXggbV9w
cm9jZXNzTG9jazsKLQotICAgIC8vIE5vcm1hbGl6ZSB0aGUgaW1wdWxzZSByZXNwb25zZSBvciBu
b3QuIE11c3QgZGVmYXVsdCB0byB0cnVlLgotICAgIGJvb2wgbV9ub3JtYWxpemU7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBDb252b2x2ZXJOb2RlX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsCShyZXZpc2lvbiAxMTEy
MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGF1ZGlvIHsKLSAg
ICAvLyBBIGxpbmVhciBjb252b2x1dGlvbiBlZmZlY3QKLSAgICBpbnRlcmZhY2UgWwotICAgICAg
ICBDb25kaXRpb25hbD1XRUJfQVVESU8sCi0gICAgICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0Ci0g
ICAgXSBDb252b2x2ZXJOb2RlIDogQXVkaW9Ob2RlIHsKLSAgICAgICAgYXR0cmlidXRlIFtKU0N1
c3RvbVNldHRlcl0gQXVkaW9CdWZmZXIgYnVmZmVyOwotICAgICAgICBhdHRyaWJ1dGUgYm9vbGVh
biBub3JtYWxpemU7Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RP
TVdpbmRvd1dlYkF1ZGlvLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9ET01XaW5kb3dXZWJBdWRpby5pZGwJKHJldmlzaW9uIDExMTIzMykKKysrIFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0RPTVdpbmRvd1dlYkF1ZGlvLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSB3aW5kb3cgewotCi0g
ICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAotICAgICAgICBT
dXBwbGVtZW50YWw9RE9NV2luZG93Ci0gICAgXSBET01XaW5kb3dXZWJBdWRpbyB7Ci0jaWYgIWRl
ZmluZWQoTEFOR1VBR0VfQ1BQKSB8fCAhTEFOR1VBR0VfQ1BQCi0gICAgICAgIGF0dHJpYnV0ZSBb
SlNDdXN0b21HZXR0ZXIsIFY4RW5hYmxlZEF0UnVudGltZV0gQXVkaW9Db250ZXh0Q29uc3RydWN0
b3Igd2Via2l0QXVkaW9Db250ZXh0OwotICAgICAgICBhdHRyaWJ1dGUgQXVkaW9QYW5uZXJOb2Rl
Q29uc3RydWN0b3Igd2Via2l0QXVkaW9QYW5uZXJOb2RlOwotICAgICAgICBhdHRyaWJ1dGUgQXVk
aW9Qcm9jZXNzaW5nRXZlbnRDb25zdHJ1Y3RvciBBdWRpb1Byb2Nlc3NpbmdFdmVudDsKLSAgICAg
ICAgYXR0cmlidXRlIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudENvbnN0cnVjdG9yIE9mZmxp
bmVBdWRpb0NvbXBsZXRpb25FdmVudDsKLSNlbmRpZgotICAgIH07Ci0KLX0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25O
b2RlLmNwcAkocmV2aXNpb24gMTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVm
YXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3NyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9B
VURJTykKLQotI2luY2x1ZGUgIkRlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgotCi0jaW5j
bHVkZSAiTG9nZ2luZy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1EZWZhdWx0QXVk
aW9EZXN0aW5hdGlvbk5vZGU6OkRlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZShBdWRpb0NvbnRl
eHQqIGNvbnRleHQpCi0gICAgOiBBdWRpb0Rlc3RpbmF0aW9uTm9kZShjb250ZXh0LCBBdWRpb0Rl
c3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJhdGUoKSkKLXsKLX0KLQotRGVmYXVsdEF1ZGlvRGVz
dGluYXRpb25Ob2RlOjp+RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlKCkKLXsKLSAgICB1bmlu
aXRpYWxpemUoKTsKLX0KLQotdm9pZCBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGU6OmluaXRp
YWxpemUoKQotewotICAgIGlmIChpc0luaXRpYWxpemVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGZsb2F0IGhhcmR3YXJlU2FtcGxlUmF0ZSA9IEF1ZGlvRGVzdGluYXRpb246OmhhcmR3YXJl
U2FtcGxlUmF0ZSgpOwotICAgIExPRyhXZWJBdWRpbywgIj4+Pj4gaGFyZHdhcmVTYW1wbGVSYXRl
ID0gJWZcbiIsIGhhcmR3YXJlU2FtcGxlUmF0ZSk7Ci0gICAgCi0gICAgbV9kZXN0aW5hdGlvbiA9
IEF1ZGlvRGVzdGluYXRpb246OmNyZWF0ZSgqdGhpcywgaGFyZHdhcmVTYW1wbGVSYXRlKTsKLSAg
ICAKLSAgICBBdWRpb05vZGU6OmluaXRpYWxpemUoKTsKLX0KLQotdm9pZCBEZWZhdWx0QXVkaW9E
ZXN0aW5hdGlvbk5vZGU6OnVuaW5pdGlhbGl6ZSgpCi17Ci0gICAgaWYgKCFpc0luaXRpYWxpemVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGVzdGluYXRpb24tPnN0b3AoKTsKLQotICAg
IEF1ZGlvTm9kZTo6dW5pbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgRGVmYXVsdEF1ZGlvRGVzdGlu
YXRpb25Ob2RlOjpzdGFydFJlbmRlcmluZygpCi17Ci0gICAgQVNTRVJUKGlzSW5pdGlhbGl6ZWQo
KSk7Ci0gICAgaWYgKGlzSW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgbV9kZXN0aW5hdGlvbi0+c3Rh
cnQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdF
Ql9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3Rp
bmF0aW9uTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlZmF1
bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCShyZXZpc2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBEZWZhdWx0QXVkaW9EZXN0
aW5hdGlvbk5vZGVfaAotI2RlZmluZSBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGVfaAotCi0j
aW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbi5oIgotI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb25O
b2RlLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIEF1ZGlvQ29udGV4dDsKLSAgICAKLWNsYXNzIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9u
Tm9kZSA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uTm9kZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlPiBjcmVhdGUoQXVkaW9Db250
ZXh0KiBjb250ZXh0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEZWZhdWx0
QXVkaW9EZXN0aW5hdGlvbk5vZGUoY29udGV4dCkpOyAgICAgCi0gICAgfQotCi0gICAgdmlydHVh
bCB+RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlKCk7Ci0gICAgCi0gICAgLy8gQXVkaW9Ob2Rl
ICAgCi0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdW5p
bml0aWFsaXplKCk7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0UmVuZGVyaW5nKCk7Ci0gICAgCi1w
cml2YXRlOgotICAgIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZShBdWRpb0NvbnRleHQqKTsK
LQotICAgIE93blB0cjxBdWRpb0Rlc3RpbmF0aW9uPiBtX2Rlc3RpbmF0aW9uOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25O
b2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5RFNQS2VybmVsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheURTUEtlcm5lbC5jcHAJ
KHJldmlzaW9uIDExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5RFNQS2Vy
bmVsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJE
ZWxheURTUEtlcm5lbC5oIgotCi0jaW5jbHVkZSAiQXVkaW9VdGlsaXRpZXMuaCIKLSNpbmNsdWRl
IDxhbGdvcml0aG0+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLWNvbnN0IGZsb2F0IFNtb290
aGluZ1RpbWVDb25zdGFudCA9IDAuMDIwZjsgLy8gMjBtcwotICAKLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotRGVsYXlEU1BLZXJuZWw6OkRlbGF5RFNQS2VybmVsKERlbGF5UHJvY2Vzc29yKiBwcm9j
ZXNzb3IpCi0gICAgOiBBdWRpb0RTUEtlcm5lbChwcm9jZXNzb3IpCi0gICAgLCBtX3dyaXRlSW5k
ZXgoMCkKLSAgICAsIG1fZmlyc3RUaW1lKHRydWUpCi17Ci0gICAgQVNTRVJUKHByb2Nlc3NvciAm
JiBwcm9jZXNzb3ItPnNhbXBsZVJhdGUoKSA+IDApOwotICAgIGlmICghcHJvY2Vzc29yKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX21heERlbGF5VGltZSA9IHByb2Nlc3Nvci0+bWF4RGVsYXlU
aW1lKCk7Ci0gICAgbV9idWZmZXIuYWxsb2NhdGUoc3RhdGljX2Nhc3Q8c2l6ZV90Pihwcm9jZXNz
b3ItPnNhbXBsZVJhdGUoKSAqIG1fbWF4RGVsYXlUaW1lKSk7Ci0gICAgbV9idWZmZXIuemVybygp
OwotCi0gICAgbV9zbW9vdGhpbmdSYXRlID0gQXVkaW9VdGlsaXRpZXM6OmRpc2NyZXRlVGltZUNv
bnN0YW50Rm9yU2FtcGxlUmF0ZShTbW9vdGhpbmdUaW1lQ29uc3RhbnQsIHByb2Nlc3Nvci0+c2Ft
cGxlUmF0ZSgpKTsKLX0KLQotRGVsYXlEU1BLZXJuZWw6OkRlbGF5RFNQS2VybmVsKGRvdWJsZSBt
YXhEZWxheVRpbWUsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBBdWRpb0RTUEtlcm5lbChzYW1w
bGVSYXRlKQotICAgICwgbV9tYXhEZWxheVRpbWUobWF4RGVsYXlUaW1lKQotICAgICwgbV93cml0
ZUluZGV4KDApCi0gICAgLCBtX2ZpcnN0VGltZSh0cnVlKQotewotICAgIEFTU0VSVChtYXhEZWxh
eVRpbWUgPiAwLjApOwotICAgIGlmIChtYXhEZWxheVRpbWUgPD0gMC4wKQotICAgICAgICByZXR1
cm47Ci0gICAgICAgIAotICAgIHNpemVfdCBidWZmZXJMZW5ndGggPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KHNhbXBsZVJhdGUgKiBtYXhEZWxheVRpbWUpOwotICAgIEFTU0VSVChidWZmZXJMZW5ndGgp
OwotICAgIGlmICghYnVmZmVyTGVuZ3RoKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9i
dWZmZXIuYWxsb2NhdGUoYnVmZmVyTGVuZ3RoKTsKLSAgICBtX2J1ZmZlci56ZXJvKCk7Ci0KLSAg
ICBtX3Ntb290aGluZ1JhdGUgPSBBdWRpb1V0aWxpdGllczo6ZGlzY3JldGVUaW1lQ29uc3RhbnRG
b3JTYW1wbGVSYXRlKFNtb290aGluZ1RpbWVDb25zdGFudCwgc2FtcGxlUmF0ZSk7Ci19Ci0KLXZv
aWQgRGVsYXlEU1BLZXJuZWw6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRl
c3RpbmF0aW9uLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIHNpemVfdCBidWZmZXJM
ZW5ndGggPSBtX2J1ZmZlci5zaXplKCk7Ci0gICAgZmxvYXQqIGJ1ZmZlciA9IG1fYnVmZmVyLmRh
dGEoKTsKLQotICAgIEFTU0VSVChidWZmZXJMZW5ndGgpOwotICAgIGlmICghYnVmZmVyTGVuZ3Ro
KQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIEFTU0VSVChzb3VyY2UgJiYgZGVzdGlu
YXRpb24pOwotICAgIGlmICghc291cmNlIHx8ICFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJu
OwotICAgICAgICAKLSAgICBmbG9hdCBzYW1wbGVSYXRlID0gdGhpcy0+c2FtcGxlUmF0ZSgpOwot
ICAgIGRvdWJsZSBkZWxheVRpbWUgPSBkZWxheVByb2Nlc3NvcigpID8gZGVsYXlQcm9jZXNzb3Io
KS0+ZGVsYXlUaW1lKCktPnZhbHVlKCkgOiBtX2Rlc2lyZWREZWxheUZyYW1lcyAvIHNhbXBsZVJh
dGU7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhlIGRlbGF5IHRpbWUgaXMgaW4gYSB2YWxpZCByYW5n
ZS4KLSAgICBkZWxheVRpbWUgPSBtaW4obWF4RGVsYXlUaW1lKCksIGRlbGF5VGltZSk7Ci0gICAg
ZGVsYXlUaW1lID0gbWF4KDAuMCwgZGVsYXlUaW1lKTsKLQotICAgIGlmIChtX2ZpcnN0VGltZSkg
ewotICAgICAgICBtX2N1cnJlbnREZWxheVRpbWUgPSBkZWxheVRpbWU7Ci0gICAgICAgIG1fZmly
c3RUaW1lID0gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGludCBuID0gZnJhbWVzVG9Qcm9jZXNz
OwotICAgIHdoaWxlIChuLS0pIHsKLSAgICAgICAgLy8gQXBwcm9hY2ggZGVzaXJlZCBkZWxheSB0
aW1lLgotICAgICAgICBtX2N1cnJlbnREZWxheVRpbWUgKz0gKGRlbGF5VGltZSAtIG1fY3VycmVu
dERlbGF5VGltZSkgKiBtX3Ntb290aGluZ1JhdGU7Ci0KLSAgICAgICAgZG91YmxlIGRlc2lyZWRE
ZWxheUZyYW1lcyA9IG1fY3VycmVudERlbGF5VGltZSAqIHNhbXBsZVJhdGU7Ci0KLSAgICAgICAg
ZG91YmxlIHJlYWRQb3NpdGlvbiA9IG1fd3JpdGVJbmRleCArIGJ1ZmZlckxlbmd0aCAtIGRlc2ly
ZWREZWxheUZyYW1lczsKLSAgICAgICAgaWYgKHJlYWRQb3NpdGlvbiA+PSBidWZmZXJMZW5ndGgp
Ci0gICAgICAgICAgICByZWFkUG9zaXRpb24gLT0gYnVmZmVyTGVuZ3RoOwotCi0gICAgICAgIC8v
IExpbmVhcmx5IGludGVycG9sYXRlIGluLWJldHdlZW4gZGVsYXkgdGltZXMuCi0gICAgICAgIGlu
dCByZWFkSW5kZXgxID0gc3RhdGljX2Nhc3Q8aW50PihyZWFkUG9zaXRpb24pOwotICAgICAgICBp
bnQgcmVhZEluZGV4MiA9IChyZWFkSW5kZXgxICsgMSkgJSBidWZmZXJMZW5ndGg7Ci0gICAgICAg
IGRvdWJsZSBpbnRlcnBvbGF0aW9uRmFjdG9yID0gcmVhZFBvc2l0aW9uIC0gcmVhZEluZGV4MTsK
LQotICAgICAgICBkb3VibGUgaW5wdXQgPSBzdGF0aWNfY2FzdDxmbG9hdD4oKnNvdXJjZSsrKTsK
LSAgICAgICAgYnVmZmVyW21fd3JpdGVJbmRleF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oaW5wdXQp
OwotICAgICAgICBtX3dyaXRlSW5kZXggPSAobV93cml0ZUluZGV4ICsgMSkgJSBidWZmZXJMZW5n
dGg7ICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIGRvdWJsZSBzYW1wbGUxID0gYnVmZmVyW3Jl
YWRJbmRleDFdOwotICAgICAgICBkb3VibGUgc2FtcGxlMiA9IGJ1ZmZlcltyZWFkSW5kZXgyXTsK
LSAgICAgICAgCi0gICAgICAgIGRvdWJsZSBvdXRwdXQgPSAoMS4wIC0gaW50ZXJwb2xhdGlvbkZh
Y3RvcikgKiBzYW1wbGUxICsgaW50ZXJwb2xhdGlvbkZhY3RvciAqIHNhbXBsZTI7Ci0KLSAgICAg
ICAgKmRlc3RpbmF0aW9uKysgPSBzdGF0aWNfY2FzdDxmbG9hdD4ob3V0cHV0KTsKLSAgICB9ICAg
ICAgICAKLX0KLQotdm9pZCBEZWxheURTUEtlcm5lbDo6cmVzZXQoKQotewotICAgIG1fZmlyc3RU
aW1lID0gdHJ1ZTsKLSAgICBtX2J1ZmZlci56ZXJvKCk7Ci19Ci0KLWRvdWJsZSBEZWxheURTUEtl
cm5lbDo6dGFpbFRpbWUoKSBjb25zdAotewotICAgIHJldHVybiBtX21heERlbGF5VGltZTsKLX0K
LQotZG91YmxlIERlbGF5RFNQS2VybmVsOjpsYXRlbmN5VGltZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShX
RUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheURTUEtlcm5lbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5RFNQS2VybmVsLmgJ
KHJldmlzaW9uIDExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5RFNQS2Vy
bmVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgRGVsYXlEU1BLZXJuZWxfaAotI2RlZmluZSBEZWxheURTUEtlcm5lbF9oCi0KLSNpbmNsdWRl
ICJBdWRpb0FycmF5LmgiCi0jaW5jbHVkZSAiQXVkaW9EU1BLZXJuZWwuaCIKLSNpbmNsdWRlICJE
ZWxheVByb2Nlc3Nvci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERlbGF5UHJv
Y2Vzc29yOwotICAgIAotY2xhc3MgRGVsYXlEU1BLZXJuZWwgOiBwdWJsaWMgQXVkaW9EU1BLZXJu
ZWwgewotcHVibGljOiAgCi0gICAgRGVsYXlEU1BLZXJuZWwoRGVsYXlQcm9jZXNzb3IqKTsKLSAg
ICBEZWxheURTUEtlcm5lbChkb3VibGUgbWF4RGVsYXlUaW1lLCBmbG9hdCBzYW1wbGVSYXRlKTsK
LSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlLCBmbG9h
dCogZGVzdGluYXRpb24sIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgIHZpcnR1YWwgdm9p
ZCByZXNldCgpOwotICAgIAotICAgIGRvdWJsZSBtYXhEZWxheVRpbWUoKSBjb25zdCB7IHJldHVy
biBtX21heERlbGF5VGltZTsgfQotICAgIAotICAgIHZvaWQgc2V0RGVsYXlGcmFtZXMoZG91Ymxl
IG51bWJlck9mRnJhbWVzKSB7IG1fZGVzaXJlZERlbGF5RnJhbWVzID0gbnVtYmVyT2ZGcmFtZXM7
IH0KLQotICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERTsKLQotcHJpdmF0ZToK
LSAgICBBdWRpb0Zsb2F0QXJyYXkgbV9idWZmZXI7Ci0gICAgZG91YmxlIG1fbWF4RGVsYXlUaW1l
OwotICAgIGludCBtX3dyaXRlSW5kZXg7Ci0gICAgZG91YmxlIG1fY3VycmVudERlbGF5VGltZTsK
LSAgICBkb3VibGUgbV9zbW9vdGhpbmdSYXRlOwotICAgIGJvb2wgbV9maXJzdFRpbWU7Ci0gICAg
ZG91YmxlIG1fZGVzaXJlZERlbGF5RnJhbWVzOwotCi0gICAgRGVsYXlQcm9jZXNzb3IqIGRlbGF5
UHJvY2Vzc29yKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RGVsYXlQcm9jZXNzb3IqPihwcm9jZXNz
b3IoKSk7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIERlbGF5
RFNQS2VybmVsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5Tm9kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlOb2RlLmNwcAkocmV2
aXNpb24gMTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlOb2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIkRlbGF5Tm9kZS5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURlbGF5Tm9kZTo6RGVsYXlOb2RlKEF1ZGlvQ29u
dGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSwgZG91YmxlIG1heERlbGF5VGltZSkKLSAg
ICA6IEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCi17Ci0gICAg
bV9wcm9jZXNzb3IgPSBhZG9wdFB0cihuZXcgRGVsYXlQcm9jZXNzb3Ioc2FtcGxlUmF0ZSwgMSwg
bWF4RGVsYXlUaW1lKSk7Ci0gICAgZGVsYXlUaW1lKCktPnNldENvbnRleHQoY29udGV4dCk7Ci0g
ICAgc2V0Tm9kZVR5cGUoTm9kZVR5cGVEZWxheSk7Ci19Ci0KLUF1ZGlvUGFyYW0qIERlbGF5Tm9k
ZTo6ZGVsYXlUaW1lKCkKLXsKLSAgICByZXR1cm4gZGVsYXlQcm9jZXNzb3IoKS0+ZGVsYXlUaW1l
KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJf
QVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheU5vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheU5vZGUuaAkocmV2aXNpb24gMTEx
MjMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlOb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRGVsYXlOb2RlX2gKLSNk
ZWZpbmUgRGVsYXlOb2RlX2gKLQotI2luY2x1ZGUgIkF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmgi
Ci0jaW5jbHVkZSAiRGVsYXlQcm9jZXNzb3IuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvUGFyYW07Ci0KLWNsYXNzIERl
bGF5Tm9kZSA6IHB1YmxpYyBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZSB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8RGVsYXlOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0
LCBmbG9hdCBzYW1wbGVSYXRlLCBkb3VibGUgbWF4RGVsYXlUaW1lKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBEZWxheU5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSwgbWF4RGVs
YXlUaW1lKSk7ICAgICAgCi0gICAgfQotCi0gICAgQXVkaW9QYXJhbSogZGVsYXlUaW1lKCk7Ci0K
LXByaXZhdGU6Ci0gICAgRGVsYXlOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUs
IGRvdWJsZSBtYXhEZWxheVRpbWUpOwotCi0gICAgRGVsYXlQcm9jZXNzb3IqIGRlbGF5UHJvY2Vz
c29yKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RGVsYXlQcm9jZXNzb3IqPihwcm9jZXNzb3IoKSk7
IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIERlbGF5Tm9kZV9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheU5vZGUuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5Tm9kZS5pZGwJKHJldmlzaW9uIDExMTIz
MykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5Tm9kZS5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBhdWRpbyB7Ci0gICAgaW50
ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAotICAgICAgICBKU0dlbmVy
YXRlVG9KU09iamVjdAotICAgIF0gRGVsYXlOb2RlIDogQXVkaW9Ob2RlIHsKLSAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIEF1ZGlvUGFyYW0gZGVsYXlUaW1lOwotICAgIH07Ci19CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheVByb2Nlc3Nvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuY3BwCShyZXZpc2lvbiAxMTEy
MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheVByb2Nlc3Nvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJEZWxheVByb2Nlc3Nvci5o
IgotIAotI2luY2x1ZGUgIkRlbGF5RFNQS2VybmVsLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotRGVsYXlQcm9jZXNzb3I6OkRlbGF5UHJvY2Vzc29yKGZsb2F0IHNhbXBsZVJhdGUsIHVuc2ln
bmVkIG51bWJlck9mQ2hhbm5lbHMsIGRvdWJsZSBtYXhEZWxheVRpbWUpCi0gICAgOiBBdWRpb0RT
UEtlcm5lbFByb2Nlc3NvcihzYW1wbGVSYXRlLCBudW1iZXJPZkNoYW5uZWxzKQotICAgICwgbV9t
YXhEZWxheVRpbWUobWF4RGVsYXlUaW1lKQotewotICAgIG1fZGVsYXlUaW1lID0gQXVkaW9QYXJh
bTo6Y3JlYXRlKCJkZWxheVRpbWUiLCAwLjAsIDAuMCwgbWF4RGVsYXlUaW1lKTsKLX0KLQotRGVs
YXlQcm9jZXNzb3I6On5EZWxheVByb2Nlc3NvcigpCi17Ci0gICAgaWYgKGlzSW5pdGlhbGl6ZWQo
KSkKLSAgICAgICAgdW5pbml0aWFsaXplKCk7Ci19Ci0KLVBhc3NPd25QdHI8QXVkaW9EU1BLZXJu
ZWw+IERlbGF5UHJvY2Vzc29yOjpjcmVhdGVLZXJuZWwoKQotewotICAgIHJldHVybiBhZG9wdFB0
cihuZXcgRGVsYXlEU1BLZXJuZWwodGhpcykpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vRGVsYXlQcm9jZXNzb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9EZWxheVByb2Nlc3Nvci5oCShyZXZpc2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9EZWxheVByb2Nlc3Nvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
Ci0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERlbGF5UHJvY2Vzc29yX2gKLSNkZWZpbmUgRGVsYXlQ
cm9jZXNzb3JfaAotCi0jaW5jbHVkZSAiQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuaCIKLSNpbmNs
dWRlICJBdWRpb1BhcmFtLmgiCi0KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb0RT
UEtlcm5lbDsKLSAgICAKLWNsYXNzIERlbGF5UHJvY2Vzc29yIDogcHVibGljIEF1ZGlvRFNQS2Vy
bmVsUHJvY2Vzc29yIHsKLXB1YmxpYzoKLSAgICBEZWxheVByb2Nlc3NvcihmbG9hdCBzYW1wbGVS
YXRlLCB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBkb3VibGUgbWF4RGVsYXlUaW1lKTsKLSAg
ICB2aXJ0dWFsIH5EZWxheVByb2Nlc3NvcigpOwotICAgIAotICAgIHZpcnR1YWwgUGFzc093blB0
cjxBdWRpb0RTUEtlcm5lbD4gY3JlYXRlS2VybmVsKCk7Ci0gICAgICAgIAotICAgIEF1ZGlvUGFy
YW0qIGRlbGF5VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsYXlUaW1lLmdldCgpOyB9Ci0KLSAg
ICBkb3VibGUgbWF4RGVsYXlUaW1lKCkgeyByZXR1cm4gbV9tYXhEZWxheVRpbWU7IH0KLXByaXZh
dGU6Ci0KLSAgICBSZWZQdHI8QXVkaW9QYXJhbT4gbV9kZWxheVRpbWU7Ci0gICAgZG91YmxlIG1f
bWF4RGVsYXlUaW1lOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RGVsYXlQcm9jZXNzb3JfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3ND
b21wcmVzc29yTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
RHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHAJKHJldmlzaW9uIDExMTIzMykKKysrIFNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDEyMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIkR5bmFtaWNzQ29tcHJlc3Nvck5vZGUu
aCIKLQotI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0
LmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCi0jaW5jbHVkZSAiRHluYW1pY3NDb21w
cmVzc29yLmgiCi0KLS8vIFNldCBvdXRwdXQgdG8gc3RlcmVvIGJ5IGRlZmF1bHQuCi1zdGF0aWMg
Y29uc3QgdW5zaWduZWQgZGVmYXVsdE51bWJlck9mT3V0cHV0Q2hhbm5lbHMgPSAyOwotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLUR5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OkR5bmFtaWNzQ29tcHJl
c3Nvck5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIDog
QXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCi17Ci0gICAgYWRkSW5wdXQoYWRvcHRQdHIo
bmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7Ci0gICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBB
dWRpb05vZGVPdXRwdXQodGhpcywgZGVmYXVsdE51bWJlck9mT3V0cHV0Q2hhbm5lbHMpKSk7Ci0K
LSAgICBzZXROb2RlVHlwZShOb2RlVHlwZUR5bmFtaWNzQ29tcHJlc3Nvcik7Ci0KLSAgICBtX3Ro
cmVzaG9sZCA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgidGhyZXNob2xkIiwgLTI0LCAtMTAwLCAwKTsK
LSAgICBtX2tuZWUgPSBBdWRpb1BhcmFtOjpjcmVhdGUoImtuZWUiLCAzMCwgMCwgNDApOwotICAg
IG1fcmF0aW8gPSBBdWRpb1BhcmFtOjpjcmVhdGUoInJhdGlvIiwgMTIsIDEsIDIwKTsKLSAgICBt
X3JlZHVjdGlvbiA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgicmVkdWN0aW9uIiwgMCwgLTIwLCAwKTsK
LQotICAgIG1fdGhyZXNob2xkLT5zZXRDb250ZXh0KGNvbnRleHQpOwotICAgIG1fa25lZS0+c2V0
Q29udGV4dChjb250ZXh0KTsKLSAgICBtX3JhdGlvLT5zZXRDb250ZXh0KGNvbnRleHQpOwotICAg
IG1fcmVkdWN0aW9uLT5zZXRDb250ZXh0KGNvbnRleHQpOwotCi0gICAgaW5pdGlhbGl6ZSgpOwot
fQotCi1EeW5hbWljc0NvbXByZXNzb3JOb2RlOjp+RHluYW1pY3NDb21wcmVzc29yTm9kZSgpCi17
Ci0gICAgdW5pbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgRHluYW1pY3NDb21wcmVzc29yTm9kZTo6
cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIEF1ZGlvQnVzKiBvdXRwdXRC
dXMgPSBvdXRwdXQoMCktPmJ1cygpOwotICAgIEFTU0VSVChvdXRwdXRCdXMpOwotCi0gICAgZmxv
YXQgdGhyZXNob2xkID0gbV90aHJlc2hvbGQtPnZhbHVlKCk7Ci0gICAgZmxvYXQga25lZSA9IG1f
a25lZS0+dmFsdWUoKTsKLSAgICBmbG9hdCByYXRpbyA9IG1fcmF0aW8tPnZhbHVlKCk7Ci0KLSAg
ICBtX2R5bmFtaWNzQ29tcHJlc3Nvci0+c2V0UGFyYW1ldGVyVmFsdWUoRHluYW1pY3NDb21wcmVz
c29yOjpQYXJhbVRocmVzaG9sZCwgdGhyZXNob2xkKTsKLSAgICBtX2R5bmFtaWNzQ29tcHJlc3Nv
ci0+c2V0UGFyYW1ldGVyVmFsdWUoRHluYW1pY3NDb21wcmVzc29yOjpQYXJhbUtuZWUsIGtuZWUp
OwotICAgIG1fZHluYW1pY3NDb21wcmVzc29yLT5zZXRQYXJhbWV0ZXJWYWx1ZShEeW5hbWljc0Nv
bXByZXNzb3I6OlBhcmFtUmF0aW8sIHJhdGlvKTsKLQotICAgIG1fZHluYW1pY3NDb21wcmVzc29y
LT5wcm9jZXNzKGlucHV0KDApLT5idXMoKSwgb3V0cHV0QnVzLCBmcmFtZXNUb1Byb2Nlc3MpOwot
Ci0gICAgZmxvYXQgcmVkdWN0aW9uID0gbV9keW5hbWljc0NvbXByZXNzb3ItPnBhcmFtZXRlclZh
bHVlKER5bmFtaWNzQ29tcHJlc3Nvcjo6UGFyYW1SZWR1Y3Rpb24pOwotICAgIG1fcmVkdWN0aW9u
LT5zZXRWYWx1ZShyZWR1Y3Rpb24pOwotfQotCi12b2lkIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6
OnJlc2V0KCkKLXsKLSAgICBtX2R5bmFtaWNzQ29tcHJlc3Nvci0+cmVzZXQoKTsKLX0KLQotdm9p
ZCBEeW5hbWljc0NvbXByZXNzb3JOb2RlOjppbml0aWFsaXplKCkKLXsKLSAgICBpZiAoaXNJbml0
aWFsaXplZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBdWRpb05vZGU6OmluaXRpYWxpemUo
KTsgICAgCi0gICAgbV9keW5hbWljc0NvbXByZXNzb3IgPSBhZG9wdFB0cihuZXcgRHluYW1pY3ND
b21wcmVzc29yKHNhbXBsZVJhdGUoKSwgZGVmYXVsdE51bWJlck9mT3V0cHV0Q2hhbm5lbHMpKTsK
LX0KLQotdm9pZCBEeW5hbWljc0NvbXByZXNzb3JOb2RlOjp1bmluaXRpYWxpemUoKQotewotICAg
IGlmICghaXNJbml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2R5bmFtaWNz
Q29tcHJlc3Nvci5jbGVhcigpOwotICAgIEF1ZGlvTm9kZTo6dW5pbml0aWFsaXplKCk7Ci19Ci0K
LWRvdWJsZSBEeW5hbWljc0NvbXByZXNzb3JOb2RlOjp0YWlsVGltZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fZHluYW1pY3NDb21wcmVzc29yLT50YWlsVGltZSgpOwotfQotCi1kb3VibGUgRHlu
YW1pY3NDb21wcmVzc29yTm9kZTo6bGF0ZW5jeVRpbWUoKSBjb25zdAotewotICAgIHJldHVybiBt
X2R5bmFtaWNzQ29tcHJlc3Nvci0+bGF0ZW5jeVRpbWUoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmgJKHJldmlzaW9uIDEx
MTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBE
eW5hbWljc0NvbXByZXNzb3JOb2RlX2gKLSNkZWZpbmUgRHluYW1pY3NDb21wcmVzc29yTm9kZV9o
Ci0KLSNpbmNsdWRlICJBdWRpb05vZGUuaCIKLSNpbmNsdWRlICJBdWRpb1BhcmFtLmgiCi0jaW5j
bHVkZSA8d3RmL093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIER5bmFt
aWNzQ29tcHJlc3NvcjsKLQotY2xhc3MgRHluYW1pY3NDb21wcmVzc29yTm9kZSA6IHB1YmxpYyBB
dWRpb05vZGUgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPER5bmFtaWNzQ29tcHJl
c3Nvck5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IER5bmFtaWNzQ29tcHJlc3Nvck5v
ZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgfkR5bmFtaWNz
Q29tcHJlc3Nvck5vZGUoKTsKLQotICAgIC8vIEF1ZGlvTm9kZQotICAgIHZpcnR1YWwgdm9pZCBw
cm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgIHZpcnR1YWwgdm9pZCByZXNldCgp
OwotICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVuaW5p
dGlhbGl6ZSgpOwotCi0gICAgLy8gU3RhdGljIGNvbXByZXNzaW9uIGN1cnZlIHBhcmFtZXRlcnMu
Ci0gICAgQXVkaW9QYXJhbSogdGhyZXNob2xkKCkgeyByZXR1cm4gbV90aHJlc2hvbGQuZ2V0KCk7
IH0KLSAgICBBdWRpb1BhcmFtKiBrbmVlKCkgeyByZXR1cm4gbV9rbmVlLmdldCgpOyB9Ci0gICAg
QXVkaW9QYXJhbSogcmF0aW8oKSB7IHJldHVybiBtX3JhdGlvLmdldCgpOyB9Ci0KLSAgICAvLyBB
bW91bnQgYnkgd2hpY2ggdGhlIGNvbXByZXNzb3IgaXMgY3VycmVudGx5IGNvbXByZXNzaW5nIHRo
ZSBzaWduYWwgaW4gZGVjaWJlbHMuCi0gICAgQXVkaW9QYXJhbSogcmVkdWN0aW9uKCkgeyByZXR1
cm4gbV9yZWR1Y3Rpb24uZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGRvdWJsZSB0
YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1l
KCkgY29uc3QgT1ZFUlJJREU7Ci0KLSAgICBEeW5hbWljc0NvbXByZXNzb3JOb2RlKEF1ZGlvQ29u
dGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwotCi0gICAgT3duUHRyPER5bmFtaWNzQ29tcHJlc3Nv
cj4gbV9keW5hbWljc0NvbXByZXNzb3I7Ci0gICAgUmVmUHRyPEF1ZGlvUGFyYW0+IG1fdGhyZXNo
b2xkOwotICAgIFJlZlB0cjxBdWRpb1BhcmFtPiBtX2tuZWU7Ci0gICAgUmVmUHRyPEF1ZGlvUGFy
YW0+IG1fcmF0aW87Ci0gICAgUmVmUHRyPEF1ZGlvUGFyYW0+IG1fcmVkdWN0aW9uOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRHluYW1pY3NDb21wcmVzc29yTm9k
ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2Rl
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXBy
ZXNzb3JOb2RlLmlkbAkocmV2aXNpb24gMTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBhdWRpbyB7Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAg
ICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAotICAgICAgICBKU0dlbmVyYXRlVG9KU09iamVjdAot
ICAgIF0gRHluYW1pY3NDb21wcmVzc29yTm9kZSA6IEF1ZGlvTm9kZSB7Ci0gICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIHRocmVzaG9sZDsgLy8gaW4gRGVjaWJlbHMKLSAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlvUGFyYW0ga25lZTsgLy8gaW4gRGVjaWJlbHMKLSAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlvUGFyYW0gcmF0aW87IC8vIHVuaXQtbGVzcwot
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9QYXJhbSByZWR1Y3Rpb247IC8vIGluIERl
Y2liZWxzCi0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0hpZ2hQYXNz
MkZpbHRlck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0hp
Z2hQYXNzMkZpbHRlck5vZGUuY3BwCShyZXZpc2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0
NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxF
KFdFQl9BVURJTykKLQotI2luY2x1ZGUgIkhpZ2hQYXNzMkZpbHRlck5vZGUuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1IaWdoUGFzczJGaWx0ZXJOb2RlOjpIaWdoUGFzczJGaWx0ZXJOb2Rl
KEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICA6IEF1ZGlvQmFz
aWNQcm9jZXNzb3JOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCi17Ci0gICAgbV9wcm9jZXNzb3Ig
PSBhZG9wdFB0cihuZXcgQmlxdWFkUHJvY2Vzc29yKEJpcXVhZFByb2Nlc3Nvcjo6SGlnaFBhc3Ms
IHNhbXBsZVJhdGUsIDEsIGZhbHNlKSk7Ci0gICAgYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRl
cjEoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1l
dGVyMigpLT5zZXRDb250ZXh0KGNvbnRleHQpOwotICAgIGJpcXVhZFByb2Nlc3NvcigpLT5wYXJh
bWV0ZXIzKCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgc2V0Tm9kZVR5cGUoTm9kZVR5cGVI
aWdoUGFzczJGaWx0ZXIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSGlnaFBh
c3MyRmlsdGVyTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0hp
Z2hQYXNzMkZpbHRlck5vZGUuaAkocmV2aXNpb24gMTExMjMzKQorKysgU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUzICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEhpZ2hQYXNzMkZpbHRlck5vZGVfaAotI2RlZmlu
ZSBIaWdoUGFzczJGaWx0ZXJOb2RlX2gKLQotI2luY2x1ZGUgIkF1ZGlvQmFzaWNQcm9jZXNzb3JO
b2RlLmgiCi0jaW5jbHVkZSAiQmlxdWFkUHJvY2Vzc29yLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgQXVkaW9QYXJhbTsKLSAgICAKLWNsYXNzIEhpZ2hQYXNzMkZpbHRlck5vZGUg
OiBwdWJsaWMgQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUgewotcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEhpZ2hQYXNzMkZpbHRlck5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRl
eHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEhpZ2hQYXNzMkZpbHRlck5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkpOyAgICAgIAotICAgIH0K
LQotICAgIEF1ZGlvUGFyYW0qIGN1dG9mZigpIHsgcmV0dXJuIGJpcXVhZFByb2Nlc3NvcigpLT5w
YXJhbWV0ZXIxKCk7IH0KLSAgICBBdWRpb1BhcmFtKiByZXNvbmFuY2UoKSB7IHJldHVybiBiaXF1
YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMigpOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIEhpZ2hQ
YXNzMkZpbHRlck5vZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7Ci0KLSAgICBC
aXF1YWRQcm9jZXNzb3IqIGJpcXVhZFByb2Nlc3NvcigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEJp
cXVhZFByb2Nlc3Nvcio+KHByb2Nlc3NvcigpKTsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gSGlnaFBhc3MyRmlsdGVyTm9kZV9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmlkbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmlkbAkocmV2aXNpb24gMTEx
MjMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBhdWRp
byB7Ci0gICAgLy8gVHdvLXBvbGUgaGlnaHBhc3MgZmlsdGVyCi0gICAgLy8gRklYTUU6IGRlc2ln
biBCaXF1YWROb2RlIGFuZCB1c2UgaW5zdGVhZCBvZiB0aGlzCi0gICAgaW50ZXJmYWNlIFsKLSAg
ICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAotICAgICAgICBKU0dlbmVyYXRlVG9KU09iamVj
dAotICAgIF0gSGlnaFBhc3MyRmlsdGVyTm9kZSA6IEF1ZGlvTm9kZSB7Ci0gICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIGN1dG9mZjsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIEF1ZGlvUGFyYW0gcmVzb25hbmNlOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmNwcAkocmV2aXNpb24gMTExMjMz
KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMjgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiSmF2YVNjcmlwdEF1
ZGlvTm9kZS5oIgotCi0jaW5jbHVkZSAiQXVkaW9CdWZmZXIuaCIKLSNpbmNsdWRlICJBdWRpb0J1
cy5oIgotI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0
LmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCi0jaW5jbHVkZSAiQXVkaW9Qcm9jZXNz
aW5nRXZlbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgPHd0Zi9GbG9hdDMy
QXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNvbnN0IHNpemVfdCBEZWZhdWx0QnVmZmVyU2l6ZSA9IDQwOTY7Ci0KLVBhc3NSZWZQ
dHI8SmF2YVNjcmlwdEF1ZGlvTm9kZT4gSmF2YVNjcmlwdEF1ZGlvTm9kZTo6Y3JlYXRlKEF1ZGlv
Q29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSwgc2l6ZV90IGJ1ZmZlclNpemUsIHVu
c2lnbmVkIG51bWJlck9mSW5wdXRzLCB1bnNpZ25lZCBudW1iZXJPZk91dHB1dHMpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBKYXZhU2NyaXB0QXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJh
dGUsIGJ1ZmZlclNpemUsIG51bWJlck9mSW5wdXRzLCBudW1iZXJPZk91dHB1dHMpKTsKLX0KLQot
SmF2YVNjcmlwdEF1ZGlvTm9kZTo6SmF2YVNjcmlwdEF1ZGlvTm9kZShBdWRpb0NvbnRleHQqIGNv
bnRleHQsIGZsb2F0IHNhbXBsZVJhdGUsIHNpemVfdCBidWZmZXJTaXplLCB1bnNpZ25lZCBudW1i
ZXJPZklucHV0cywgdW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRzKQotICAgIDogQXVkaW9Ob2RlKGNv
bnRleHQsIHNhbXBsZVJhdGUpCi0gICAgLCBtX2RvdWJsZUJ1ZmZlckluZGV4KDApCi0gICAgLCBt
X2RvdWJsZUJ1ZmZlckluZGV4Rm9yRXZlbnQoMCkKLSAgICAsIG1fYnVmZmVyU2l6ZShidWZmZXJT
aXplKQotICAgICwgbV9idWZmZXJSZWFkV3JpdGVJbmRleCgwKQotICAgICwgbV9pc1JlcXVlc3RP
dXRzdGFuZGluZyhmYWxzZSkKLXsKLSAgICAvLyBDaGVjayBmb3IgdmFsaWQgYnVmZmVyIHNpemUu
Ci0gICAgc3dpdGNoIChidWZmZXJTaXplKSB7Ci0gICAgY2FzZSAyNTY6Ci0gICAgY2FzZSA1MTI6
Ci0gICAgY2FzZSAxMDI0OgotICAgIGNhc2UgMjA0ODoKLSAgICBjYXNlIDQwOTY6Ci0gICAgY2Fz
ZSA4MTkyOgotICAgIGNhc2UgMTYzODQ6Ci0gICAgICAgIG1fYnVmZmVyU2l6ZSA9IGJ1ZmZlclNp
emU7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1fYnVmZmVyU2l6ZSA9
IERlZmF1bHRCdWZmZXJTaXplOwotICAgIH0KLSAgICAgICAgCi0gICAgLy8gUmVnYXJkbGVzcyBv
ZiB0aGUgYWxsb3dlZCBidWZmZXIgc2l6ZXMgYWJvdmUsIHdlIHN0aWxsIG5lZWQgdG8gcHJvY2Vz
cyBhdCB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhlIEF1ZGlvTm9kZS4KLSAgICBpZiAobV9idWZmZXJT
aXplIDwgQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVzKQotICAgICAgICBtX2J1ZmZl
clNpemUgPSBBdWRpb05vZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXM7Ci0KLSAgICAvLyBGSVhN
RTogUmlnaHQgbm93IHdlJ3JlIGhhcmRjb2RlZCB0byBzaW5nbGUgaW5wdXQgYW5kIHNpbmdsZSBv
dXRwdXQuCi0gICAgLy8gQWx0aG91Z2ggdGhlIHNwZWNpZmljYXRpb24gc2F5cyB0aGlzIGlzIE9L
IGZvciBhIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiwgbXVsdGlwbGUgaW5wdXRzIGFuZCBvdXRwdXRz
IHdvdWxkIGJlIGdvb2QuCi0gICAgQVNTRVJUX1VOVVNFRChudW1iZXJPZklucHV0cywgbnVtYmVy
T2ZJbnB1dHMgPT0gMSk7Ci0gICAgQVNTRVJUX1VOVVNFRChudW1iZXJPZk91dHB1dHMsIG51bWJl
ck9mT3V0cHV0cyA9PSAxKTsKLSAgICBhZGRJbnB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlSW5w
dXQodGhpcykpKTsKLSAgICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZU91dHB1dCh0
aGlzLCAyKSkpOwotCi0gICAgc2V0Tm9kZVR5cGUoTm9kZVR5cGVKYXZhU2NyaXB0KTsKLQotICAg
IGluaXRpYWxpemUoKTsKLX0KLQotSmF2YVNjcmlwdEF1ZGlvTm9kZTo6fkphdmFTY3JpcHRBdWRp
b05vZGUoKQotewotICAgIHVuaW5pdGlhbGl6ZSgpOwotfQotCi12b2lkIEphdmFTY3JpcHRBdWRp
b05vZGU6OmluaXRpYWxpemUoKQotewotICAgIGlmIChpc0luaXRpYWxpemVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGZsb2F0IHNhbXBsZVJhdGUgPSBjb250ZXh0KCktPnNhbXBsZVJhdGUo
KTsKLQotICAgIC8vIENyZWF0ZSBkb3VibGUgYnVmZmVycyBvbiBib3RoIHRoZSBpbnB1dCBhbmQg
b3V0cHV0IHNpZGVzLgotICAgIC8vIFRoZXNlIEF1ZGlvQnVmZmVycyB3aWxsIGJlIGRpcmVjdGx5
IGFjY2Vzc2VkIGluIHRoZSBtYWluIHRocmVhZCBieSBKYXZhU2NyaXB0LgotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAyOyArK2kpIHsKLSAgICAgICAgbV9pbnB1dEJ1ZmZlcnMuYXBwZW5k
KEF1ZGlvQnVmZmVyOjpjcmVhdGUoMiwgYnVmZmVyU2l6ZSgpLCBzYW1wbGVSYXRlKSk7Ci0gICAg
ICAgIG1fb3V0cHV0QnVmZmVycy5hcHBlbmQoQXVkaW9CdWZmZXI6OmNyZWF0ZSgyLCBidWZmZXJT
aXplKCksIHNhbXBsZVJhdGUpKTsKLSAgICB9Ci0KLSAgICBBdWRpb05vZGU6OmluaXRpYWxpemUo
KTsKLX0KLQotdm9pZCBKYXZhU2NyaXB0QXVkaW9Ob2RlOjp1bmluaXRpYWxpemUoKQotewotICAg
IGlmICghaXNJbml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lucHV0QnVm
ZmVycy5jbGVhcigpOwotICAgIG1fb3V0cHV0QnVmZmVycy5jbGVhcigpOwotCi0gICAgQXVkaW9O
b2RlOjp1bmluaXRpYWxpemUoKTsKLX0KLQotdm9pZCBKYXZhU2NyaXB0QXVkaW9Ob2RlOjpwcm9j
ZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgLy8gRGlzY3Vzc2lvbiBhYm91dCBp
bnB1dHMgYW5kIG91dHB1dHM6Ci0gICAgLy8gQXMgaW4gb3RoZXIgQXVkaW9Ob2RlcywgSmF2YVNj
cmlwdEF1ZGlvTm9kZSB1c2VzIGFuIEF1ZGlvQnVzIGZvciBpdHMgaW5wdXQgYW5kIG91dHB1dCAo
c2VlIGlucHV0QnVzIGFuZCBvdXRwdXRCdXMgYmVsb3cpLgotICAgIC8vIEFkZGl0aW9uYWxseSwg
dGhlcmUgaXMgYSBkb3VibGUtYnVmZmVyaW5nIGZvciBpbnB1dCBhbmQgb3V0cHV0IHdoaWNoIGlz
IGV4cG9zZWQgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCAoc2VlIGlucHV0QnVmZmVyIGFuZCBvdXRw
dXRCdWZmZXIgYmVsb3cpLgotICAgIC8vIFRoaXMgbm9kZSBpcyB0aGUgcHJvZHVjZXIgZm9yIGlu
cHV0QnVmZmVyIGFuZCB0aGUgY29uc3VtZXIgZm9yIG91dHB1dEJ1ZmZlci4KLSAgICAvLyBUaGUg
SmF2YVNjcmlwdCBjb2RlIGlzIHRoZSBjb25zdW1lciBvZiBpbnB1dEJ1ZmZlciBhbmQgdGhlIHBy
b2R1Y2VyIGZvciBvdXRwdXRCdWZmZXIuCi0gICAgCi0gICAgLy8gR2V0IGlucHV0IGFuZCBvdXRw
dXQgYnVzc2VzLgotICAgIEF1ZGlvQnVzKiBpbnB1dEJ1cyA9IHRoaXMtPmlucHV0KDApLT5idXMo
KTsKLSAgICBBdWRpb0J1cyogb3V0cHV0QnVzID0gdGhpcy0+b3V0cHV0KDApLT5idXMoKTsKLQot
ICAgIC8vIEdldCBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMuICBXZSBkb3VibGUtYnVmZmVyIGJv
dGggdGhlIGlucHV0IGFuZCBvdXRwdXQgc2lkZXMuCi0gICAgdW5zaWduZWQgZG91YmxlQnVmZmVy
SW5kZXggPSB0aGlzLT5kb3VibGVCdWZmZXJJbmRleCgpOwotICAgIGJvb2wgaXNEb3VibGVCdWZm
ZXJJbmRleEdvb2QgPSBkb3VibGVCdWZmZXJJbmRleCA8IDIgJiYgZG91YmxlQnVmZmVySW5kZXgg
PCBtX2lucHV0QnVmZmVycy5zaXplKCkgJiYgZG91YmxlQnVmZmVySW5kZXggPCBtX291dHB1dEJ1
ZmZlcnMuc2l6ZSgpOwotICAgIEFTU0VSVChpc0RvdWJsZUJ1ZmZlckluZGV4R29vZCk7Ci0gICAg
aWYgKCFpc0RvdWJsZUJ1ZmZlckluZGV4R29vZCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IEF1ZGlvQnVmZmVyKiBpbnB1dEJ1ZmZlciA9IG1faW5wdXRCdWZmZXJzW2RvdWJsZUJ1ZmZlcklu
ZGV4XS5nZXQoKTsKLSAgICBBdWRpb0J1ZmZlciogb3V0cHV0QnVmZmVyID0gbV9vdXRwdXRCdWZm
ZXJzW2RvdWJsZUJ1ZmZlckluZGV4XS5nZXQoKTsKLQotICAgIC8vIENoZWNrIHRoZSBjb25zaXN0
ZW5jeSBvZiBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMuCi0gICAgYm9vbCBidWZmZXJzQXJlR29v
ZCA9IGlucHV0QnVmZmVyICYmIG91dHB1dEJ1ZmZlciAmJiBidWZmZXJTaXplKCkgPT0gaW5wdXRC
dWZmZXItPmxlbmd0aCgpICYmIGJ1ZmZlclNpemUoKSA9PSBvdXRwdXRCdWZmZXItPmxlbmd0aCgp
Ci0gICAgICAgICYmIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXggKyBmcmFtZXNUb1Byb2Nlc3MgPD0g
YnVmZmVyU2l6ZSgpOwotICAgIEFTU0VSVChidWZmZXJzQXJlR29vZCk7Ci0gICAgaWYgKCFidWZm
ZXJzQXJlR29vZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgYXNzdW1lIHRoYXQgYnVm
ZmVyU2l6ZSgpIGlzIGV2ZW5seSBkaXZpc2libGUgYnkgZnJhbWVzVG9Qcm9jZXNzIC0gc2hvdWxk
IGFsd2F5cyBiZSB0cnVlLCBidXQgd2Ugc2hvdWxkIHN0aWxsIGNoZWNrLgotICAgIGJvb2wgaXNG
cmFtZXNUb1Byb2Nlc3NHb29kID0gZnJhbWVzVG9Qcm9jZXNzICYmIGJ1ZmZlclNpemUoKSA+PSBm
cmFtZXNUb1Byb2Nlc3MgJiYgIShidWZmZXJTaXplKCkgJSBmcmFtZXNUb1Byb2Nlc3MpOwotICAg
IEFTU0VSVChpc0ZyYW1lc1RvUHJvY2Vzc0dvb2QpOwotICAgIGlmICghaXNGcmFtZXNUb1Byb2Nl
c3NHb29kKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIHVuc2lnbmVkIG51bWJlck9m
SW5wdXRDaGFubmVscyA9IGlucHV0QnVzLT5udW1iZXJPZkNoYW5uZWxzKCk7Ci0gICAgCi0gICAg
Ym9vbCBjaGFubmVsc0FyZUdvb2QgPSAobnVtYmVyT2ZJbnB1dENoYW5uZWxzID09IDEgfHwgbnVt
YmVyT2ZJbnB1dENoYW5uZWxzID09IDIpICYmIG91dHB1dEJ1cy0+bnVtYmVyT2ZDaGFubmVscygp
ID09IDI7Ci0gICAgQVNTRVJUKGNoYW5uZWxzQXJlR29vZCk7Ci0gICAgaWYgKCFjaGFubmVsc0Fy
ZUdvb2QpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IGZsb2F0KiBzb3VyY2VMID0gaW5w
dXRCdXMtPmNoYW5uZWwoMCktPmRhdGEoKTsKLSAgICBjb25zdCBmbG9hdCogc291cmNlUiA9IG51
bWJlck9mSW5wdXRDaGFubmVscyA+IDEgPyBpbnB1dEJ1cy0+Y2hhbm5lbCgxKS0+ZGF0YSgpIDog
MDsKLSAgICBmbG9hdCogZGVzdGluYXRpb25MID0gb3V0cHV0QnVzLT5jaGFubmVsKDApLT5tdXRh
YmxlRGF0YSgpOwotICAgIGZsb2F0KiBkZXN0aW5hdGlvblIgPSBvdXRwdXRCdXMtPmNoYW5uZWwo
MSktPm11dGFibGVEYXRhKCk7Ci0KLSAgICAvLyBDb3B5IGZyb20gdGhlIGlucHV0IHRvIHRoZSBp
bnB1dCBidWZmZXIuICBTZWUgImJ1ZmZlcnNBcmVHb29kIiBjaGVjayBhYm92ZSBmb3Igc2FmZXR5
LgotICAgIHNpemVfdCBieXRlc1RvQ29weSA9IHNpemVvZihmbG9hdCkgKiBmcmFtZXNUb1Byb2Nl
c3M7Ci0gICAgbWVtY3B5KGlucHV0QnVmZmVyLT5nZXRDaGFubmVsRGF0YSgwKS0+ZGF0YSgpICsg
bV9idWZmZXJSZWFkV3JpdGVJbmRleCwgc291cmNlTCwgYnl0ZXNUb0NvcHkpOwotICAgIAotICAg
IGlmIChudW1iZXJPZklucHV0Q2hhbm5lbHMgPT0gMikKLSAgICAgICAgbWVtY3B5KGlucHV0QnVm
ZmVyLT5nZXRDaGFubmVsRGF0YSgxKS0+ZGF0YSgpICsgbV9idWZmZXJSZWFkV3JpdGVJbmRleCwg
c291cmNlUiwgYnl0ZXNUb0NvcHkpOwotICAgIGVsc2UgaWYgKG51bWJlck9mSW5wdXRDaGFubmVs
cyA9PSAxKSB7Ci0gICAgICAgIC8vIElmIHRoZSBpbnB1dCBpcyBtb25vLCB0aGVuIGFsc28gY29w
eSB0aGUgbW9ubyBpbnB1dCB0byB0aGUgcmlnaHQgY2hhbm5lbCBvZiB0aGUgQXVkaW9CdWZmZXIg
d2hpY2ggdGhlIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50IHVzZXMuCi0gICAgICAgIC8vIEZJWE1FOiBp
dCBpcyBsaWtlbHkgdGhlIGF1ZGlvIEFQSSB3aWxsIGV2b2x2ZSB0byBwcmVzZW50IGFuIEF1ZGlv
QnVmZmVyIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGNoYW5uZWxzIGFzIG91ciBpbnB1dC4KLSAg
ICAgICAgbWVtY3B5KGlucHV0QnVmZmVyLT5nZXRDaGFubmVsRGF0YSgxKS0+ZGF0YSgpICsgbV9i
dWZmZXJSZWFkV3JpdGVJbmRleCwgc291cmNlTCwgYnl0ZXNUb0NvcHkpOwotICAgIH0KLSAgICAK
LSAgICAvLyBDb3B5IGZyb20gdGhlIG91dHB1dCBidWZmZXIgdG8gdGhlIG91dHB1dC4gIFNlZSAi
YnVmZmVyc0FyZUdvb2QiIGNoZWNrIGFib3ZlIGZvciBzYWZldHkuCi0gICAgbWVtY3B5KGRlc3Rp
bmF0aW9uTCwgb3V0cHV0QnVmZmVyLT5nZXRDaGFubmVsRGF0YSgwKS0+ZGF0YSgpICsgbV9idWZm
ZXJSZWFkV3JpdGVJbmRleCwgYnl0ZXNUb0NvcHkpOwotICAgIG1lbWNweShkZXN0aW5hdGlvblIs
IG91dHB1dEJ1ZmZlci0+Z2V0Q2hhbm5lbERhdGEoMSktPmRhdGEoKSArIG1fYnVmZmVyUmVhZFdy
aXRlSW5kZXgsIGJ5dGVzVG9Db3B5KTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgYnVmZmVyaW5nIGlu
ZGV4LgotICAgIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXggPSAobV9idWZmZXJSZWFkV3JpdGVJbmRl
eCArIGZyYW1lc1RvUHJvY2VzcykgJSBidWZmZXJTaXplKCk7Ci0KLSAgICAvLyBtX2J1ZmZlclJl
YWRXcml0ZUluZGV4IHdpbGwgd3JhcCBiYWNrIGFyb3VuZCB0byAwIHdoZW4gdGhlIGN1cnJlbnQg
aW5wdXQgYW5kIG91dHB1dCBidWZmZXJzIGFyZSBmdWxsLgotICAgIC8vIFdoZW4gdGhpcyBoYXBw
ZW5zLCBmaXJlIGFuIGV2ZW50IGFuZCBzd2FwIGJ1ZmZlcnMuCi0gICAgaWYgKCFtX2J1ZmZlclJl
YWRXcml0ZUluZGV4KSB7Ci0gICAgICAgIC8vIEF2b2lkIGJ1aWxkaW5nIHVwIHJlcXVlc3RzIG9u
IHRoZSBtYWluIHRocmVhZCB0byBmaXJlIHByb2Nlc3MgZXZlbnRzIHdoZW4gdGhleSdyZSBub3Qg
YmVpbmcgaGFuZGxlZC4KLSAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBhIHByb2JsZW0gaWYgdGhl
IG1haW4gdGhyZWFkIGlzIHZlcnkgYnVzeSBkb2luZyBvdGhlciB0aGluZ3MgYW5kIGlzIGJlaW5n
IGhlbGQgdXAgaGFuZGxpbmcgcHJldmlvdXMgcmVxdWVzdHMuCi0gICAgICAgIGlmIChtX2lzUmVx
dWVzdE91dHN0YW5kaW5nKSB7Ci0gICAgICAgICAgICAvLyBXZSdyZSBsYXRlIGluIGhhbmRsaW5n
IHRoZSBwcmV2aW91cyByZXF1ZXN0LiAgVGhlIG1haW4gdGhyZWFkIG11c3QgYmUgdmVyeSBidXN5
LgotICAgICAgICAgICAgLy8gVGhlIGJlc3Qgd2UgY2FuIGRvIGlzIGNsZWFyIG91dCB0aGUgYnVm
ZmVyIG91cnNlbGYgaGVyZS4KLSAgICAgICAgICAgIG91dHB1dEJ1ZmZlci0+emVybygpOyAgICAg
ICAgICAgIAotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gUmVmZXJlbmNlIG91cnNl
bGYgc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IGdldCBkZWxldGVkIGJlZm9yZSBmaXJlUHJvY2Vz
c0V2ZW50KCkgZ2V0cyBjYWxsZWQuCi0gICAgICAgICAgICByZWYoKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgLy8gRmlyZSB0aGUgZXZlbnQgb24gdGhlIG1haW4gdGhyZWFkLCBub3QgdGhp
cyBvbmUgKHdoaWNoIGlzIHRoZSByZWFsdGltZSBhdWRpbyB0aHJlYWQpLgotICAgICAgICAgICAg
bV9kb3VibGVCdWZmZXJJbmRleEZvckV2ZW50ID0gbV9kb3VibGVCdWZmZXJJbmRleDsKLSAgICAg
ICAgICAgIG1faXNSZXF1ZXN0T3V0c3RhbmRpbmcgPSB0cnVlOwotICAgICAgICAgICAgY2FsbE9u
TWFpblRocmVhZChmaXJlUHJvY2Vzc0V2ZW50RGlzcGF0Y2gsIHRoaXMpOwotICAgICAgICB9Ci0K
LSAgICAgICAgc3dhcEJ1ZmZlcnMoKTsKLSAgICB9Ci19Ci0KLXZvaWQgSmF2YVNjcmlwdEF1ZGlv
Tm9kZTo6ZmlyZVByb2Nlc3NFdmVudERpc3BhdGNoKHZvaWQqIHVzZXJEYXRhKQotewotICAgIEph
dmFTY3JpcHRBdWRpb05vZGUqIGpzQXVkaW9Ob2RlID0gc3RhdGljX2Nhc3Q8SmF2YVNjcmlwdEF1
ZGlvTm9kZSo+KHVzZXJEYXRhKTsKLSAgICBBU1NFUlQoanNBdWRpb05vZGUpOwotICAgIGlmICgh
anNBdWRpb05vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGpzQXVkaW9Ob2RlLT5maXJlUHJv
Y2Vzc0V2ZW50KCk7Ci0KLSAgICAvLyBEZS1yZWZlcmVuY2UgdG8gbWF0Y2ggdGhlIHJlZigpIGNh
bGwgaW4gcHJvY2VzcygpLgotICAgIGpzQXVkaW9Ob2RlLT5kZXJlZigpOwotfQotCi12b2lkIEph
dmFTY3JpcHRBdWRpb05vZGU6OmZpcmVQcm9jZXNzRXZlbnQoKQotewotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSAmJiBtX2lzUmVxdWVzdE91dHN0YW5kaW5nKTsKLSAgICAKLSAgICBib29sIGlz
SW5kZXhHb29kID0gbV9kb3VibGVCdWZmZXJJbmRleEZvckV2ZW50IDwgMjsKLSAgICBBU1NFUlQo
aXNJbmRleEdvb2QpOwotICAgIGlmICghaXNJbmRleEdvb2QpCi0gICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgQXVkaW9CdWZmZXIqIGlucHV0QnVmZmVyID0gbV9pbnB1dEJ1ZmZlcnNbbV9k
b3VibGVCdWZmZXJJbmRleEZvckV2ZW50XS5nZXQoKTsKLSAgICBBdWRpb0J1ZmZlciogb3V0cHV0
QnVmZmVyID0gbV9vdXRwdXRCdWZmZXJzW21fZG91YmxlQnVmZmVySW5kZXhGb3JFdmVudF0uZ2V0
KCk7Ci0gICAgQVNTRVJUKGlucHV0QnVmZmVyICYmIG91dHB1dEJ1ZmZlcik7Ci0gICAgaWYgKCFp
bnB1dEJ1ZmZlciB8fCAhb3V0cHV0QnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBB
dm9pZCBmaXJpbmcgdGhlIGV2ZW50IGlmIHRoZSBkb2N1bWVudCBoYXMgYWxyZWFkeSBnb25lIGF3
YXkuCi0gICAgaWYgKGNvbnRleHQoKS0+aGFzRG9jdW1lbnQoKSkgewotICAgICAgICAvLyBMZXQg
dGhlIGF1ZGlvIHRocmVhZCBrbm93IHdlJ3ZlIGdvdHRlbiB0byB0aGUgcG9pbnQgd2hlcmUgaXQn
cyBPSyBmb3IgaXQgdG8gbWFrZSBhbm90aGVyIHJlcXVlc3QuCi0gICAgICAgIG1faXNSZXF1ZXN0
T3V0c3RhbmRpbmcgPSBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIC8vIENhbGwgdGhlIEphdmFT
Y3JpcHQgZXZlbnQgaGFuZGxlciB3aGljaCB3aWxsIGRvIHRoZSBhdWRpbyBwcm9jZXNzaW5nLgot
ICAgICAgICBkaXNwYXRjaEV2ZW50KEF1ZGlvUHJvY2Vzc2luZ0V2ZW50OjpjcmVhdGUoaW5wdXRC
dWZmZXIsIG91dHB1dEJ1ZmZlcikpOwotICAgIH0KLX0KLQotdm9pZCBKYXZhU2NyaXB0QXVkaW9O
b2RlOjpyZXNldCgpCi17Ci0gICAgbV9idWZmZXJSZWFkV3JpdGVJbmRleCA9IDA7Ci0gICAgbV9k
b3VibGVCdWZmZXJJbmRleCA9IDA7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjsg
KytpKSB7Ci0gICAgICAgIG1faW5wdXRCdWZmZXJzW2ldLT56ZXJvKCk7Ci0gICAgICAgIG1fb3V0
cHV0QnVmZmVyc1tpXS0+emVybygpOwotICAgIH0KLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBK
YXZhU2NyaXB0QXVkaW9Ob2RlOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
ZXZlbnROYW1lcygpLmludGVyZmFjZUZvckphdmFTY3JpcHRBdWRpb05vZGU7Ci19Ci0KLVNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIEphdmFTY3JpcHRBdWRpb05vZGU6OnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBjb25zdF9jYXN0PEphdmFTY3JpcHRBdWRpb05v
ZGUqPih0aGlzKS0+Y29udGV4dCgpLT5kb2N1bWVudCgpOwotfQotCi1kb3VibGUgSmF2YVNjcmlw
dEF1ZGlvTm9kZTo6dGFpbFRpbWUoKSBjb25zdAotewotICAgIHJldHVybiBzdGQ6Om51bWVyaWNf
bGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7Ci19Ci0KLWRvdWJsZSBKYXZhU2NyaXB0QXVkaW9O
b2RlOjpsYXRlbmN5VGltZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1p
dHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0phdmFTY3JpcHRBdWRpb05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmgJKHJldmlzaW9uIDExMTIzMykKKysrIFNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSwxMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSmF2YVNjcmlwdEF1ZGlvTm9kZV9o
Ci0jZGVmaW5lIEphdmFTY3JpcHRBdWRpb05vZGVfaAotCi0jaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCi0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5o
IgotI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9C
dWZmZXI7Ci1jbGFzcyBBdWRpb0NvbnRleHQ7Ci1jbGFzcyBBdWRpb1Byb2Nlc3NpbmdFdmVudDsK
LQotLy8gSmF2YVNjcmlwdEF1ZGlvTm9kZSBpcyBhbiBBdWRpb05vZGUgd2hpY2ggYWxsb3dzIGZv
ciBhcmJpdHJhcnkgc3ludGhlc2lzIG9yIHByb2Nlc3NpbmcgZGlyZWN0bHkgdXNpbmcgSmF2YVNj
cmlwdC4KLS8vIFRoZSBBUEkgYWxsb3dzIGZvciBhIHZhcmlhYmxlIG51bWJlciBvZiBpbnB1dHMg
YW5kIG91dHB1dHMsIGFsdGhvdWdoIGl0IG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgaW5wdXQgb3Ig
b3V0cHV0LgotLy8gVGhpcyBiYXNpYyBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBubyBtb3JlIHRo
YW4gb25lIGlucHV0IGFuZCBvdXRwdXQuCi0vLyBUaGUgIm9uYXVkaW9wcm9jZXNzIiBhdHRyaWJ1
dGUgaXMgYW4gZXZlbnQgbGlzdGVuZXIgd2hpY2ggd2lsbCBnZXQgY2FsbGVkIHBlcmlvZGljYWxs
eSB3aXRoIGFuIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50IHdoaWNoIGhhcwotLy8gQXVkaW9CdWZmZXJz
IGZvciBlYWNoIGlucHV0IGFuZCBvdXRwdXQuCi0KLS8vIEZJWE1FOiBFdmVudFRhcmdldCBzaG91
bGQgYmUgaW50cm9kdWNlZCBhdCB0aGUgYmFzZSBvZiB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5
IChpLmUuLCBhcyBhIGJhc2UgY2xhc3MgZm9yIEF1ZGlvTm9kZSkuCi1jbGFzcyBKYXZhU2NyaXB0
QXVkaW9Ob2RlIDogcHVibGljIEF1ZGlvTm9kZSwgcHVibGljIEV2ZW50VGFyZ2V0IHsKLXB1Ymxp
YzoKLSAgICAvLyBidWZmZXJTaXplIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVz
OiAyNTYsIDUxMiwgMTAyNCwgMjA0OCwgNDA5NiwgODE5MiwgMTYzODQuCi0gICAgLy8gVGhpcyB2
YWx1ZSBjb250cm9scyBob3cgZnJlcXVlbnRseSB0aGUgb25hdWRpb3Byb2Nlc3MgZXZlbnQgaGFu
ZGxlciBpcyBjYWxsZWQgYW5kIGhvdyBtYW55IHNhbXBsZS1mcmFtZXMgbmVlZCB0byBiZSBwcm9j
ZXNzZWQgZWFjaCBjYWxsLgotICAgIC8vIExvd2VyIG51bWJlcnMgZm9yIGJ1ZmZlclNpemUgd2ls
bCByZXN1bHQgaW4gYSBsb3dlciAoYmV0dGVyKSBsYXRlbmN5LiBIaWdoZXIgbnVtYmVycyB3aWxs
IGJlIG5lY2Vzc2FyeSB0byBhdm9pZCBhdWRpbyBicmVha3VwIGFuZCBnbGl0Y2hlcy4KLSAgICAv
LyBUaGUgdmFsdWUgY2hvc2VuIG11c3QgY2FyZWZ1bGx5IGJhbGFuY2UgYmV0d2VlbiBsYXRlbmN5
IGFuZCBhdWRpbyBxdWFsaXR5LgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEphdmFTY3JpcHRBdWRp
b05vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlLCBzaXplX3QgYnVm
ZmVyU2l6ZSwgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dHMgPSAxLCB1bnNpZ25lZCBudW1iZXJPZk91
dHB1dHMgPSAxKTsKLQotICAgIHZpcnR1YWwgfkphdmFTY3JpcHRBdWRpb05vZGUoKTsKLQotICAg
IC8vIEF1ZGlvTm9kZQotICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1By
b2Nlc3MpOwotICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOwotICAgIHZpcnR1YWwgdm9pZCBpbml0
aWFsaXplKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVuaW5pdGlhbGl6ZSgpOwotCi0gICAgLy8gRXZl
bnRUYXJnZXQKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgp
IGNvbnN0OwotICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRh
cmdldERhdGEoKSB7IHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7IH0KLSAgICB2aXJ0dWFsIEV2
ZW50VGFyZ2V0RGF0YSogZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkgIHsgcmV0dXJuICZtX2V2ZW50
VGFyZ2V0RGF0YTsgfQotCi0gICAgc2l6ZV90IGJ1ZmZlclNpemUoKSBjb25zdCB7IHJldHVybiBt
X2J1ZmZlclNpemU7IH0KLQotICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYXVk
aW9wcm9jZXNzKTsKLQotICAgIC8vIFJlY29uY2lsZSByZWYvZGVyZWYgd2hpY2ggYXJlIGRlZmlu
ZWQgYm90aCBpbiBBdWRpb05vZGUgYW5kIEV2ZW50VGFyZ2V0LgotICAgIHVzaW5nIEF1ZGlvTm9k
ZTo6cmVmOwotICAgIHVzaW5nIEF1ZGlvTm9kZTo6ZGVyZWY7Ci0gICAgCi1wcml2YXRlOgotICAg
IHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBk
b3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERTsKLQotICAgIEphdmFTY3JpcHRBdWRp
b05vZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSwgc2l6ZV90IGJ1ZmZlclNpemUs
IHVuc2lnbmVkIG51bWJlck9mSW5wdXRzLCB1bnNpZ25lZCBudW1iZXJPZk91dHB1dHMpOwotCi0g
ICAgc3RhdGljIHZvaWQgZmlyZVByb2Nlc3NFdmVudERpc3BhdGNoKHZvaWQqIHVzZXJEYXRhKTsK
LSAgICB2b2lkIGZpcmVQcm9jZXNzRXZlbnQoKTsKLQotICAgIC8vIERvdWJsZSBidWZmZXJpbmcK
LSAgICB1bnNpZ25lZCBkb3VibGVCdWZmZXJJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZG91Ymxl
QnVmZmVySW5kZXg7IH0KLSAgICB2b2lkIHN3YXBCdWZmZXJzKCkgeyBtX2RvdWJsZUJ1ZmZlcklu
ZGV4ID0gMSAtIG1fZG91YmxlQnVmZmVySW5kZXg7IH0KLSAgICB1bnNpZ25lZCBtX2RvdWJsZUJ1
ZmZlckluZGV4OwotICAgIHVuc2lnbmVkIG1fZG91YmxlQnVmZmVySW5kZXhGb3JFdmVudDsKLSAg
ICBWZWN0b3I8UmVmUHRyPEF1ZGlvQnVmZmVyPiA+IG1faW5wdXRCdWZmZXJzOwotICAgIFZlY3Rv
cjxSZWZQdHI8QXVkaW9CdWZmZXI+ID4gbV9vdXRwdXRCdWZmZXJzOwotCi0gICAgdmlydHVhbCB2
b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2
ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9Ci0gICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJn
ZXREYXRhOwotCi0gICAgc2l6ZV90IG1fYnVmZmVyU2l6ZTsKLSAgICB1bnNpZ25lZCBtX2J1ZmZl
clJlYWRXcml0ZUluZGV4OwotICAgIHZvbGF0aWxlIGJvb2wgbV9pc1JlcXVlc3RPdXRzdGFuZGlu
ZzsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEphdmFTY3JpcHRB
dWRpb05vZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlv
Tm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSmF2YVNjcmlw
dEF1ZGlvTm9kZS5pZGwJKHJldmlzaW9uIDExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
Ci0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi1tb2R1bGUgYXVkaW8gewotICAgIC8vIEZvciByZWFsLXRpbWUgYXVk
aW8gc3RyZWFtIHN5bnRoZXNpcy9wcm9jZXNzaW5nIGluIEphdmFTY3JpcHQgCi0gICAgaW50ZXJm
YWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAotICAgICAgICBKU0dlbmVyYXRl
VG9KU09iamVjdCwKLSAgICAgICAgSlNDdXN0b21NYXJrRnVuY3Rpb24sCi0gICAgICAgIEV2ZW50
VGFyZ2V0Ci0gICAgXSBKYXZhU2NyaXB0QXVkaW9Ob2RlIDogQXVkaW9Ob2RlIHsKLSAgICAgICAg
Ly8gUmVuZGVyaW5nIGNhbGxiYWNrCi0gICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9u
YXVkaW9wcm9jZXNzOwotICAgICAgICAKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcg
YnVmZmVyU2l6ZTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTG93
UGFzczJGaWx0ZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9Mb3dQYXNzMkZpbHRlck5vZGUuY3BwCShyZXZpc2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFC
TEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiTG93UGFzczJGaWx0ZXJOb2RlLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotTG93UGFzczJGaWx0ZXJOb2RlOjpMb3dQYXNzMkZpbHRlck5vZGUo
QXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIDogQXVkaW9CYXNp
Y1Byb2Nlc3Nvck5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkKLXsKLSAgICBtX3Byb2Nlc3NvciA9
IGFkb3B0UHRyKG5ldyBCaXF1YWRQcm9jZXNzb3IoQmlxdWFkUHJvY2Vzc29yOjpMb3dQYXNzLCBz
YW1wbGVSYXRlLCAxLCBmYWxzZSkpOwotICAgIGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIx
KCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRl
cjIoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1l
dGVyMygpLT5zZXRDb250ZXh0KGNvbnRleHQpOwotICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlTG93
UGFzczJGaWx0ZXIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
TkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTG93UGFzczJG
aWx0ZXJOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTG93UGFz
czJGaWx0ZXJOb2RlLmgJKHJldmlzaW9uIDExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUzICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0g
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIExvd1Bhc3MyRmlsdGVyTm9kZV9oCi0jZGVmaW5lIExvd1Bh
c3MyRmlsdGVyTm9kZV9oCi0KLSNpbmNsdWRlICJBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oIgot
I2luY2x1ZGUgIkJpcXVhZFByb2Nlc3Nvci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIEF1ZGlvUGFyYW07Ci0gICAgCi1jbGFzcyBMb3dQYXNzMkZpbHRlck5vZGUgOiBwdWJsaWMg
QXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PExvd1Bhc3MyRmlsdGVyTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQg
c2FtcGxlUmF0ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTG93UGFzczJG
aWx0ZXJOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpKTsgICAgICAKLSAgICB9Ci0KLSAgICBBdWRp
b1BhcmFtKiBjdXRvZmYoKSB7IHJldHVybiBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMSgp
OyB9Ci0gICAgQXVkaW9QYXJhbSogcmVzb25hbmNlKCkgeyByZXR1cm4gYmlxdWFkUHJvY2Vzc29y
KCktPnBhcmFtZXRlcjIoKTsgfQotICAgIAotcHJpdmF0ZToKLSAgICBMb3dQYXNzMkZpbHRlck5v
ZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7Ci0KLSAgICBCaXF1YWRQcm9jZXNz
b3IqIGJpcXVhZFByb2Nlc3NvcigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEJpcXVhZFByb2Nlc3Nv
cio+KHByb2Nlc3NvcigpKTsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gTG93UGFzczJGaWx0ZXJOb2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0xvd1Bhc3MyRmlsdGVyTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmlkbAkocmV2aXNpb24gMTExMjMzKQorKysgU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmlkbAkod29ya2luZyBjb3B5KQpA
QCAtMSwzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGF1ZGlvIHsKLSAgICAvLyBUd28t
cG9sZSBsb3dwYXNzIGZpbHRlcgotICAgIC8vIEZJWE1FOiBkZXNpZ24gQmlxdWFkTm9kZSBhbmQg
dXNlIGluc3RlYWQgb2YgdGhpcwotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFs
PVdFQl9BVURJTywKLSAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKLSAgICBdIExvd1Bhc3My
RmlsdGVyTm9kZSA6IEF1ZGlvTm9kZSB7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRp
b1BhcmFtIGN1dG9mZjsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlvUGFyYW0gcmVz
b25hbmNlOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVs
ZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAJKHJldmlzaW9uIDExMTIzMykK
KysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKSAmJiBFTkFCTEUoVklERU8pCi0K
LSNpbmNsdWRlICJNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCIKLQotI2luY2x1ZGUgIkF1
ZGlvQ29udGV4dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgotI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllci5oIgotI2luY2x1ZGUgPHd0Zi9Mb2NrZXIu
aD4KLQotLy8gVGhlc2UgYXJlIHNvbWV3aGF0IGFyYml0cmFyeSBsaW1pdHMsIGJ1dCB3ZSBuZWVk
IHRvIGRvIHNvbWUga2luZCBvZiBzYW5pdHktY2hlY2tpbmcuCi1jb25zdCB1bnNpZ25lZCBtaW5T
YW1wbGVSYXRlID0gODAwMDsKLWNvbnN0IHVuc2lnbmVkIG1heFNhbXBsZVJhdGUgPSAxOTIwMDA7
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxNZWRpYUVsZW1lbnRBdWRpb1Nv
dXJjZU5vZGU+IE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6Y3JlYXRlKEF1ZGlvQ29udGV4
dCogY29udGV4dCwgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQotewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlKGNvbnRleHQsIG1lZGlh
RWxlbWVudCkpOwotfQotCi1NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6Ok1lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIEhUTUxNZWRpYUVsZW1lbnQq
IG1lZGlhRWxlbWVudCkKLSAgICA6IEF1ZGlvU291cmNlTm9kZShjb250ZXh0LCBjb250ZXh0LT5z
YW1wbGVSYXRlKCkpCi0gICAgLCBtX21lZGlhRWxlbWVudChtZWRpYUVsZW1lbnQpCi0gICAgLCBt
X3NvdXJjZU51bWJlck9mQ2hhbm5lbHMoMCkKLSAgICAsIG1fc291cmNlU2FtcGxlUmF0ZSgwKQot
ewotICAgIC8vIERlZmF1bHQgdG8gc3RlcmVvLiBUaGlzIGNvdWxkIGNoYW5nZSBkZXBlbmRpbmcg
b24gd2hhdCB0aGUgbWVkaWEgZWxlbWVudCAuc3JjIGlzIHNldCB0by4KLSAgICBhZGRPdXRwdXQo
YWRvcHRQdHIobmV3IEF1ZGlvTm9kZU91dHB1dCh0aGlzLCAyKSkpOwotCi0gICAgc2V0Tm9kZVR5
cGUoTm9kZVR5cGVNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZSk7Ci0KLSAgICBpbml0aWFsaXplKCk7
Ci19Ci0KLU1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6fk1lZGlhRWxlbWVudEF1ZGlvU291
cmNlTm9kZSgpCi17Ci0gICAgbV9tZWRpYUVsZW1lbnQtPnNldEF1ZGlvU291cmNlTm9kZSgwKTsK
LSAgICB1bmluaXRpYWxpemUoKTsKLX0KLQotdm9pZCBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGU6OnNldEZvcm1hdChzaXplX3QgbnVtYmVyT2ZDaGFubmVscywgZmxvYXQgc291cmNlU2FtcGxl
UmF0ZSkKLXsKLSAgICBpZiAobnVtYmVyT2ZDaGFubmVscyAhPSBtX3NvdXJjZU51bWJlck9mQ2hh
bm5lbHMgfHwgc291cmNlU2FtcGxlUmF0ZSAhPSBtX3NvdXJjZVNhbXBsZVJhdGUpIHsKLSAgICAg
ICAgLy8gRklYTUU6IGltcGxlbWVudCBtdWx0aS1jaGFubmVsIGdyZWF0ZXIgdGhhbiBzdGVyZW8u
Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTEx
OQotICAgICAgICBpZiAoIW51bWJlck9mQ2hhbm5lbHMgfHwgbnVtYmVyT2ZDaGFubmVscyA+IDIg
fHwgc291cmNlU2FtcGxlUmF0ZSA8IG1pblNhbXBsZVJhdGUgfHwgc291cmNlU2FtcGxlUmF0ZSA+
IG1heFNhbXBsZVJhdGUpIHsKLSAgICAgICAgICAgIC8vIHByb2Nlc3MoKSB3aWxsIGdlbmVyYXRl
IHNpbGVuY2UgZm9yIHRoZXNlIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLgotICAgICAgICAgICAgTE9H
KE1lZGlhLCAiTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpzZXRGb3JtYXQoJXUsICVmKSAt
IHVuaGFuZGxlZCBmb3JtYXQgY2hhbmdlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG51bWJlck9m
Q2hhbm5lbHMpLCBzb3VyY2VTYW1wbGVSYXRlKTsKLSAgICAgICAgICAgIG1fc291cmNlTnVtYmVy
T2ZDaGFubmVscyA9IDA7Ci0gICAgICAgICAgICBtX3NvdXJjZVNhbXBsZVJhdGUgPSAwOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9zb3VyY2VOdW1iZXJPZkNo
YW5uZWxzID0gbnVtYmVyT2ZDaGFubmVsczsKLSAgICAgICAgbV9zb3VyY2VTYW1wbGVSYXRlID0g
c291cmNlU2FtcGxlUmF0ZTsKLQotICAgICAgICAvLyBTeW5jaHJvbml6ZSB3aXRoIHByb2Nlc3Mo
KS4KLSAgICAgICAgTG9ja2VyPE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4gbG9ja2VyKCp0
aGlzKTsKLQotICAgICAgICBpZiAoc291cmNlU2FtcGxlUmF0ZSAhPSBzYW1wbGVSYXRlKCkpIHsK
LSAgICAgICAgICAgIGRvdWJsZSBzY2FsZUZhY3RvciA9IHNvdXJjZVNhbXBsZVJhdGUgLyBzYW1w
bGVSYXRlKCk7Ci0gICAgICAgICAgICBtX211bHRpQ2hhbm5lbFJlc2FtcGxlciA9IGFkb3B0UHRy
KG5ldyBNdWx0aUNoYW5uZWxSZXNhbXBsZXIoc2NhbGVGYWN0b3IsIG51bWJlck9mQ2hhbm5lbHMp
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEJ5cGFzcyByZXNhbXBsaW5nLgot
ICAgICAgICAgICAgbV9tdWx0aUNoYW5uZWxSZXNhbXBsZXIuY2xlYXIoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRoZSBjb250ZXh0IG11c3QgYmUgbG9ja2VkIHdo
ZW4gY2hhbmdpbmcgdGhlIG51bWJlciBvZiBvdXRwdXQgY2hhbm5lbHMuCi0gICAgICAgICAgICBB
dWRpb0NvbnRleHQ6OkF1dG9Mb2NrZXIgY29udGV4dExvY2tlcihjb250ZXh0KCkpOwotCi0gICAg
ICAgICAgICAvLyBEbyBhbnkgbmVjZXNzc2FyeSByZS1jb25maWd1cmF0aW9uIHRvIHRoZSBvdXRw
dXQncyBudW1iZXIgb2YgY2hhbm5lbHMuCi0gICAgICAgICAgICBvdXRwdXQoMCktPnNldE51bWJl
ck9mQ2hhbm5lbHMobnVtYmVyT2ZDaGFubmVscyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZv
aWQgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpwcm9jZXNzKHNpemVfdCBudW1iZXJPZkZy
YW1lcykKLXsKLSAgICBBdWRpb0J1cyogb3V0cHV0QnVzID0gb3V0cHV0KDApLT5idXMoKTsKLQot
ICAgIGlmICghbWVkaWFFbGVtZW50KCkgfHwgIW1fc291cmNlTnVtYmVyT2ZDaGFubmVscyB8fCAh
bV9zb3VyY2VTYW1wbGVSYXRlKSB7Ci0gICAgICAgIG91dHB1dEJ1cy0+emVybygpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVXNlIGEgdHJ5TG9jaygpIHRvIGF2b2lkIGNvbnRl
bnRpb24gaW4gdGhlIHJlYWwtdGltZSBhdWRpbyB0aHJlYWQuCi0gICAgLy8gSWYgd2UgZmFpbCB0
byBhY3F1aXJlIHRoZSBsb2NrIHRoZW4gdGhlIEhUTUxNZWRpYUVsZW1lbnQgbXVzdCBiZSBpbiB0
aGUgbWlkZGxlIG9mCi0gICAgLy8gcmVjb25maWd1cmluZyBpdHMgcGxheWJhY2sgZW5naW5lLCBz
byB3ZSBvdXRwdXQgc2lsZW5jZSBpbiB0aGlzIGNhc2UuCi0gICAgaWYgKG1fcHJvY2Vzc0xvY2su
dHJ5TG9jaygpKSB7Ci0gICAgICAgIGlmIChBdWRpb1NvdXJjZVByb3ZpZGVyKiBwcm92aWRlciA9
IG1lZGlhRWxlbWVudCgpLT5hdWRpb1NvdXJjZVByb3ZpZGVyKCkpIHsKLSAgICAgICAgICAgIGlm
IChtX211bHRpQ2hhbm5lbFJlc2FtcGxlci5nZXQoKSkgewotICAgICAgICAgICAgICAgIEFTU0VS
VChtX3NvdXJjZVNhbXBsZVJhdGUgIT0gc2FtcGxlUmF0ZSgpKTsKLSAgICAgICAgICAgICAgICBt
X211bHRpQ2hhbm5lbFJlc2FtcGxlci0+cHJvY2Vzcyhwcm92aWRlciwgb3V0cHV0QnVzLCBudW1i
ZXJPZkZyYW1lcyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEJ5
cGFzcyB0aGUgcmVzYW1wbGVyIGNvbXBsZXRlbHkgaWYgdGhlIHNvdXJjZSBpcyBhdCB0aGUgY29u
dGV4dCdzIHNhbXBsZS1yYXRlLgotICAgICAgICAgICAgICAgIEFTU0VSVChtX3NvdXJjZVNhbXBs
ZVJhdGUgPT0gc2FtcGxlUmF0ZSgpKTsKLSAgICAgICAgICAgICAgICBwcm92aWRlci0+cHJvdmlk
ZUlucHV0KG91dHB1dEJ1cywgbnVtYmVyT2ZGcmFtZXMpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgLy8gRWl0aGVyIHRoaXMgcG9ydCBkb2Vzbid0IHlldCBz
dXBwb3J0IEhUTUxNZWRpYUVsZW1lbnQgYXVkaW8gc3RyZWFtIGFjY2VzcywKLSAgICAgICAgICAg
IC8vIG9yIHRoZSBzdHJlYW0gaXMgbm90IHlldCBhdmFpbGFibGUuCi0gICAgICAgICAgICBvdXRw
dXRCdXMtPnplcm8oKTsKLSAgICAgICAgfQotICAgICAgICBtX3Byb2Nlc3NMb2NrLnVubG9jaygp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFdlIGZhaWxlZCB0byBhY3F1aXJlIHRoZSBsb2Nr
LgotICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFFbGVt
ZW50QXVkaW9Tb3VyY2VOb2RlOjpyZXNldCgpCi17Ci19Ci0KLXZvaWQgTWVkaWFFbGVtZW50QXVk
aW9Tb3VyY2VOb2RlOjpsb2NrKCkKLXsKLSAgICByZWYoKTsKLSAgICBtX3Byb2Nlc3NMb2NrLmxv
Y2soKTsKLX0KLQotdm9pZCBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6OnVubG9jaygpCi17
Ci0gICAgbV9wcm9jZXNzTG9jay51bmxvY2soKTsKLSAgICBkZXJlZigpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VO
b2RlLmgJKHJldmlzaW9uIDExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0g
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZV9oCi0jZGVm
aW5lIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZV9oCi0KLSNpZiBFTkFCTEUoVklERU8pCi0K
LSNpbmNsdWRlICJBdWRpb1NvdXJjZU5vZGUuaCIKLSNpbmNsdWRlICJBdWRpb1NvdXJjZVByb3Zp
ZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgotI2luY2x1ZGUgIk11
bHRpQ2hhbm5lbFJlc2FtcGxlci5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb0NvbnRleHQ7Ci0gICAgCi1jbGFzcyBNZWRpYUVs
ZW1lbnRBdWRpb1NvdXJjZU5vZGUgOiBwdWJsaWMgQXVkaW9Tb3VyY2VOb2RlLCBwdWJsaWMgQXVk
aW9Tb3VyY2VQcm92aWRlckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiwgSFRNTE1l
ZGlhRWxlbWVudCopOwotCi0gICAgdmlydHVhbCB+TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2Rl
KCk7Ci0KLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQoKSB7IHJldHVybiBtX21l
ZGlhRWxlbWVudC5nZXQoKTsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKLQotICAgIC8vIEF1ZGlvTm9kZQotICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKHNpemVfdCBm
cmFtZXNUb1Byb2Nlc3MpOwotICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOwotICAgIAotICAgIC8v
IEF1ZGlvU291cmNlUHJvdmlkZXJDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9ybWF0KHNp
emVfdCBudW1iZXJPZkNoYW5uZWxzLCBmbG9hdCBzYW1wbGVSYXRlKTsKLSAgICAKLSAgICB2b2lk
IGxvY2soKTsKLSAgICB2b2lkIHVubG9jaygpOwotCi1wcml2YXRlOgotICAgIE1lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZShBdWRpb0NvbnRleHQqLCBIVE1MTWVkaWFFbGVtZW50Kik7Ci0KLSAg
ICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gbV9tZWRpYUVsZW1lbnQ7Ci0gICAgTXV0ZXggbV9w
cm9jZXNzTG9jazsKLQotICAgIHVuc2lnbmVkIG1fc291cmNlTnVtYmVyT2ZDaGFubmVsczsKLSAg
ICBkb3VibGUgbV9zb3VyY2VTYW1wbGVSYXRlOwotCi0gICAgT3duUHRyPE11bHRpQ2hhbm5lbFJl
c2FtcGxlcj4gbV9tdWx0aUNoYW5uZWxSZXNhbXBsZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoVklERU8pCi0KLSNlbmRpZiAvLyBNZWRpYUVsZW1l
bnRBdWRpb1NvdXJjZU5vZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaWRsCShyZXZpc2lvbiAxMTEyMzMp
CisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUg
YXVkaW8gewotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTyZW
SURFTywKLSAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKLSAgICBdIE1lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZSA6IEF1ZGlvU291cmNlTm9kZSB7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBIVE1MTWVkaWFFbGVtZW50IG1lZGlhRWxlbWVudDsKLSAgICB9OwotfQpJbmRleDogU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9u
RXZlbnQuY3BwCShyZXZpc2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9P
ZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VC
X0FVRElPKQotCi0jaW5jbHVkZSAiT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmgiCi0KLSNp
bmNsdWRlICJBdWRpb0J1ZmZlci5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudD4g
T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50OjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50KTsKLX0KLQotUGFzc1JlZlB0cjxP
ZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ+IE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6
Y3JlYXRlKFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IHJlbmRlcmVkQnVmZmVyKQotewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50KHJlbmRlcmVkQnVm
ZmVyKSk7Ci19Ci0KLU9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6T2ZmbGluZUF1ZGlvQ29t
cGxldGlvbkV2ZW50KCkKLXsKLX0KLQotCi1PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ6Ok9m
ZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudChQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiByZW5kZXJl
ZEJ1ZmZlcikKLSAgICA6IEV2ZW50KGV2ZW50TmFtZXMoKS5jb21wbGV0ZUV2ZW50LCB0cnVlLCBm
YWxzZSkKLSAgICAsIG1fcmVuZGVyZWRCdWZmZXIocmVuZGVyZWRCdWZmZXIpCi17Ci19Ci0KLU9m
ZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6fk9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCgp
Ci17Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50
OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVy
ZmFjZUZvck9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oCShy
ZXZpc2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9D
b21wbGV0aW9uRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnRfaAotI2RlZmluZSBPZmZs
aW5lQXVkaW9Db21wbGV0aW9uRXZlbnRfaAotCi0jaW5jbHVkZSAiQXVkaW9CdWZmZXIuaCIKLSNp
bmNsdWRlICJFdmVudC5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvQnVmZmVy
OwotICAgIAotY2xhc3MgT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50IDogcHVibGljIEV2ZW50
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxPZmZsaW5lQXVkaW9Db21wbGV0aW9u
RXZlbnQ+IGNyZWF0ZSgpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE9mZmxpbmVBdWRpb0NvbXBs
ZXRpb25FdmVudD4gY3JlYXRlKFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IHJlbmRlcmVkQnVmZmVy
KTsKLSAgICAKLSAgICB2aXJ0dWFsIH5PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQoKTsKLQot
ICAgIEF1ZGlvQnVmZmVyKiByZW5kZXJlZEJ1ZmZlcigpIHsgcmV0dXJuIG1fcmVuZGVyZWRCdWZm
ZXIuZ2V0KCk7IH0KLQotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VO
YW1lKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50
KCk7Ci0gICAgT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50KFBhc3NSZWZQdHI8QXVkaW9CdWZm
ZXI+IHJlbmRlcmVkQnVmZmVyKTsKLQotICAgIFJlZlB0cjxBdWRpb0J1ZmZlcj4gbV9yZW5kZXJl
ZEJ1ZmZlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIE9mZmxp
bmVBdWRpb0NvbXBsZXRpb25FdmVudF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9P
ZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5pZGwJKHJldmlzaW9uIDEx
MTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25F
dmVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1v
ZHVsZSBhdWRpbyB7Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FV
RElPLAotICAgICAgICBKU0dlbmVyYXRlVG9KU09iamVjdAotICAgIF0gT2ZmbGluZUF1ZGlvQ29t
cGxldGlvbkV2ZW50IDogRXZlbnQgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9C
dWZmZXIgcmVuZGVyZWRCdWZmZXI7Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAkocmV2
aXNpb24gMTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVz
dGluYXRpb25Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNzAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNp
bmNsdWRlICJPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCIKLQotI2luY2x1ZGUgIkF1ZGlv
QnVzLmgiCi0jaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCi0jaW5jbHVkZSAiSFJURkRhdGFiYXNl
TG9hZGVyLmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0gCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAg
Ci1jb25zdCBzaXplX3QgcmVuZGVyUXVhbnR1bVNpemUgPSAxMjg7ICAgIAotCi1PZmZsaW5lQXVk
aW9EZXN0aW5hdGlvbk5vZGU6Ok9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZShBdWRpb0NvbnRl
eHQqIGNvbnRleHQsIEF1ZGlvQnVmZmVyKiByZW5kZXJUYXJnZXQpCi0gICAgOiBBdWRpb0Rlc3Rp
bmF0aW9uTm9kZShjb250ZXh0LCByZW5kZXJUYXJnZXQtPnNhbXBsZVJhdGUoKSkKLSAgICAsIG1f
cmVuZGVyVGFyZ2V0KHJlbmRlclRhcmdldCkKLSAgICAsIG1fcmVuZGVyVGhyZWFkKDApCi0gICAg
LCBtX3N0YXJ0ZWRSZW5kZXJpbmcoZmFsc2UpCi17Ci0gICAgbV9yZW5kZXJCdXMgPSBhZG9wdFB0
cihuZXcgQXVkaW9CdXMocmVuZGVyVGFyZ2V0LT5udW1iZXJPZkNoYW5uZWxzKCksIHJlbmRlclF1
YW50dW1TaXplKSk7Ci19Ci0KLU9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6fk9mZmxpbmVB
dWRpb0Rlc3RpbmF0aW9uTm9kZSgpCi17Ci0gICAgdW5pbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQg
T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjppbml0aWFsaXplKCkKLXsKLSAgICBpZiAoaXNJ
bml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBdWRpb05vZGU6OmluaXRpYWxp
emUoKTsKLX0KLQotdm9pZCBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnVuaW5pdGlhbGl6
ZSgpCi17Ci0gICAgaWYgKCFpc0luaXRpYWxpemVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX3JlbmRlclRocmVhZCkgewotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbiht
X3JlbmRlclRocmVhZCk7Ci0gICAgICAgIG1fcmVuZGVyVGhyZWFkID0gMDsKLSAgICB9Ci0KLSAg
ICBBdWRpb05vZGU6OnVuaW5pdGlhbGl6ZSgpOwotfQotCi12b2lkIE9mZmxpbmVBdWRpb0Rlc3Rp
bmF0aW9uTm9kZTo6c3RhcnRSZW5kZXJpbmcoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0gICAgQVNTRVJUKG1fcmVuZGVyVGFyZ2V0LmdldCgpKTsKLSAgICBpZiAoIW1fcmVuZGVy
VGFyZ2V0LmdldCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKCFtX3N0YXJ0ZWRS
ZW5kZXJpbmcpIHsKLSAgICAgICAgbV9zdGFydGVkUmVuZGVyaW5nID0gdHJ1ZTsKLSAgICAgICAg
cmVmKCk7IC8vIFNlZSBjb3JyZXNwb25kaW5nIGRlcmVmKCkgY2FsbCBpbiBub3RpZnlDb21wbGV0
ZURpc3BhdGNoKCkuCi0gICAgICAgIG1fcmVuZGVyVGhyZWFkID0gY3JlYXRlVGhyZWFkKE9mZmxp
bmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6cmVuZGVyRW50cnksIHRoaXMsICJvZmZsaW5lIHJlbmRl
cmVyIik7Ci0gICAgfQotfQotCi0vLyBEbyBvZmZsaW5lIHJlbmRlcmluZyBpbiB0aGlzIHRocmVh
ZC4KLXZvaWQgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpyZW5kZXJFbnRyeSh2b2lkKiB0
aHJlYWREYXRhKQotewotICAgIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZSogZGVzdGluYXRp
b25Ob2RlID0gcmVpbnRlcnByZXRfY2FzdDxPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUqPih0
aHJlYWREYXRhKTsKLSAgICBBU1NFUlQoZGVzdGluYXRpb25Ob2RlKTsKLSAgICBkZXN0aW5hdGlv
bk5vZGUtPnJlbmRlcigpOwotfQotCi12b2lkIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6
cmVuZGVyKCkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQobV9y
ZW5kZXJCdXMuZ2V0KCkpOwotICAgIGlmICghbV9yZW5kZXJCdXMuZ2V0KCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBib29sIGNoYW5uZWxzTWF0Y2ggPSBtX3JlbmRlckJ1cy0+bnVtYmVy
T2ZDaGFubmVscygpID09IG1fcmVuZGVyVGFyZ2V0LT5udW1iZXJPZkNoYW5uZWxzKCk7Ci0gICAg
QVNTRVJUKGNoYW5uZWxzTWF0Y2gpOwotICAgIGlmICghY2hhbm5lbHNNYXRjaCkKLSAgICAgICAg
cmV0dXJuOwotICAgICAgICAKLSAgICBib29sIGlzUmVuZGVyQnVzQWxsb2NhdGVkID0gbV9yZW5k
ZXJCdXMtPmxlbmd0aCgpID49IHJlbmRlclF1YW50dW1TaXplOwotICAgIEFTU0VSVChpc1JlbmRl
ckJ1c0FsbG9jYXRlZCk7Ci0gICAgaWYgKCFpc1JlbmRlckJ1c0FsbG9jYXRlZCkKLSAgICAgICAg
cmV0dXJuOwotICAgICAgICAKLSAgICAvLyBTeW5jaHJvbml6ZSB3aXRoIEhSVEZEYXRhYmFzZUxv
YWRlci4KLSAgICAvLyBUaGUgZGF0YWJhc2UgbXVzdCBiZSBsb2FkZWQgYmVmb3JlIHdlIGNhbiBw
cm9jZWVkLgotICAgIEhSVEZEYXRhYmFzZUxvYWRlciogbG9hZGVyID0gSFJURkRhdGFiYXNlTG9h
ZGVyOjpsb2FkZXIoKTsKLSAgICBBU1NFUlQobG9hZGVyKTsKLSAgICBpZiAoIWxvYWRlcikKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIGxvYWRlci0+d2FpdEZvckxvYWRlclRocmVhZENvbXBs
ZXRpb24oKTsKLSAgICAgICAgCi0gICAgLy8gQnJlYWsgdXAgdGhlIHJlbmRlciB0YXJnZXQgaW50
byBzbWFsbGVyICJyZW5kZXIgcXVhbnRpemUiIHNpemVkIHBpZWNlcy4KLSAgICAvLyBSZW5kZXIg
dW50aWwgd2UncmUgZmluaXNoZWQuCi0gICAgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcyA9IG1fcmVu
ZGVyVGFyZ2V0LT5sZW5ndGgoKTsKLSAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzID0gbV9y
ZW5kZXJUYXJnZXQtPm51bWJlck9mQ2hhbm5lbHMoKTsKLQotICAgIHVuc2lnbmVkIG4gPSAwOwot
ICAgIHdoaWxlIChmcmFtZXNUb1Byb2Nlc3MgPiAwKSB7Ci0gICAgICAgIC8vIFJlbmRlciBvbmUg
cmVuZGVyIHF1YW50dW0uCi0gICAgICAgIHByb3ZpZGVJbnB1dChtX3JlbmRlckJ1cy5nZXQoKSwg
cmVuZGVyUXVhbnR1bVNpemUpOwotICAgICAgICAKLSAgICAgICAgc2l6ZV90IGZyYW1lc0F2YWls
YWJsZVRvQ29weSA9IG1pbihmcmFtZXNUb1Byb2Nlc3MsIHJlbmRlclF1YW50dW1TaXplKTsKLSAg
ICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgY2hhbm5lbEluZGV4ID0gMDsgY2hhbm5lbElu
ZGV4IDwgbnVtYmVyT2ZDaGFubmVsczsgKytjaGFubmVsSW5kZXgpIHsKLSAgICAgICAgICAgIGNv
bnN0IGZsb2F0KiBzb3VyY2UgPSBtX3JlbmRlckJ1cy0+Y2hhbm5lbChjaGFubmVsSW5kZXgpLT5k
YXRhKCk7Ci0gICAgICAgICAgICBmbG9hdCogZGVzdGluYXRpb24gPSBtX3JlbmRlclRhcmdldC0+
Z2V0Q2hhbm5lbERhdGEoY2hhbm5lbEluZGV4KS0+ZGF0YSgpOwotICAgICAgICAgICAgbWVtY3B5
KGRlc3RpbmF0aW9uICsgbiwgc291cmNlLCBzaXplb2YoZmxvYXQpICogZnJhbWVzQXZhaWxhYmxl
VG9Db3B5KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbiArPSBmcmFtZXNBdmFpbGFi
bGVUb0NvcHk7Ci0gICAgICAgIGZyYW1lc1RvUHJvY2VzcyAtPSBmcmFtZXNBdmFpbGFibGVUb0Nv
cHk7Ci0gICAgfQotICAgIAotICAgIC8vIE91ciB3b3JrIGlzIGRvbmUuIExldCB0aGUgQXVkaW9D
b250ZXh0IGtub3cuCi0gICAgY2FsbE9uTWFpblRocmVhZChub3RpZnlDb21wbGV0ZURpc3BhdGNo
LCB0aGlzKTsKLX0KLQotdm9pZCBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6Om5vdGlmeUNv
bXBsZXRlRGlzcGF0Y2godm9pZCogdXNlckRhdGEpCi17Ci0gICAgT2ZmbGluZUF1ZGlvRGVzdGlu
YXRpb25Ob2RlKiBkZXN0aW5hdGlvbk5vZGUgPSBzdGF0aWNfY2FzdDxPZmZsaW5lQXVkaW9EZXN0
aW5hdGlvbk5vZGUqPih1c2VyRGF0YSk7Ci0gICAgQVNTRVJUKGRlc3RpbmF0aW9uTm9kZSk7Ci0g
ICAgaWYgKCFkZXN0aW5hdGlvbk5vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRlc3RpbmF0
aW9uTm9kZS0+bm90aWZ5Q29tcGxldGUoKTsKLSAgICBkZXN0aW5hdGlvbk5vZGUtPmRlcmVmKCk7
Ci19Ci0KLXZvaWQgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpub3RpZnlDb21wbGV0ZSgp
Ci17Ci0gICAgY29udGV4dCgpLT5maXJlQ29tcGxldGlvbkV2ZW50KCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGUuaAkocmV2aXNpb24gMTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGlu
ZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlX2gKLSNkZWZp
bmUgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlX2gKLQotI2luY2x1ZGUgIkF1ZGlvQnVmZmVy
LmgiCi0jaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCIKLSNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9CdXM7Ci1jbGFzcyBB
dWRpb0NvbnRleHQ7Ci0gICAgCi1jbGFzcyBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUgOiBw
dWJsaWMgQXVkaW9EZXN0aW5hdGlvbk5vZGUgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCogY29u
dGV4dCwgQXVkaW9CdWZmZXIqIHJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlKGNvbnRleHQsIHJlbmRlclRh
cmdldCkpOyAgICAgCi0gICAgfQotCi0gICAgdmlydHVhbCB+T2ZmbGluZUF1ZGlvRGVzdGluYXRp
b25Ob2RlKCk7Ci0gICAgCi0gICAgLy8gQXVkaW9Ob2RlICAgCi0gICAgdmlydHVhbCB2b2lkIGlu
aXRpYWxpemUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdW5pbml0aWFsaXplKCk7Ci0gICAgdmlydHVh
bCBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJUYXJnZXQtPnNhbXBs
ZVJhdGUoKTsgfQotCi0gICAgdm9pZCBzdGFydFJlbmRlcmluZygpOwotICAgIAotcHJpdmF0ZToK
LSAgICBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0KiwgQXVkaW9CdWZm
ZXIqIHJlbmRlclRhcmdldCk7Ci0KLSAgICAvLyBUaGlzIEF1ZGlvTm9kZSByZW5kZXJzIGludG8g
dGhpcyBBdWRpb0J1ZmZlci4KLSAgICBSZWZQdHI8QXVkaW9CdWZmZXI+IG1fcmVuZGVyVGFyZ2V0
OwotICAgIAotICAgIC8vIFRlbXBvcmFyeSBBdWRpb0J1cyBmb3IgZWFjaCByZW5kZXIgcXVhbnR1
bS4KLSAgICBPd25QdHI8QXVkaW9CdXM+IG1fcmVuZGVyQnVzOwotICAgIAotICAgIC8vIFJlbmRl
cmluZyB0aHJlYWQuCi0gICAgdm9sYXRpbGUgVGhyZWFkSWRlbnRpZmllciBtX3JlbmRlclRocmVh
ZDsKLSAgICBib29sIG1fc3RhcnRlZFJlbmRlcmluZzsKLSAgICBzdGF0aWMgdm9pZCByZW5kZXJF
bnRyeSh2b2lkKiB0aHJlYWREYXRhKTsKLSAgICB2b2lkIHJlbmRlcigpOwotICAgIAotICAgIC8v
IEZvciBjb21wbGV0aW9uIGNhbGxiYWNrIG9uIG1haW4gdGhyZWFkLgotICAgIHN0YXRpYyB2b2lk
IG5vdGlmeUNvbXBsZXRlRGlzcGF0Y2godm9pZCogdXNlckRhdGEpOwotICAgIHZvaWQgbm90aWZ5
Q29tcGxldGUoKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIE9m
ZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9SZWFsdGltZUFuYWx5c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9SZWFsdGltZUFuYWx5c2VyLmNwcAkocmV2aXNpb24gMTExMjMzKQorKysgU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MzAwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFC
TEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiUmVhbHRpbWVBbmFseXNlci5oIgotCi0jaW5jbHVk
ZSAiQXVkaW9CdXMuaCIKLSNpbmNsdWRlICJBdWRpb1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIkZG
VEZyYW1lLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0j
aW5jbHVkZSA8d3RmL0NvbXBsZXguaD4KLSNpbmNsdWRlIDx3dGYvRmxvYXQzMkFycmF5Lmg+Ci0j
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgot
I2luY2x1ZGUgPHd0Zi9VaW50OEFycmF5Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY29uc3QgZG91YmxlIFJlYWx0aW1lQW5hbHlzZXI6OkRlZmF1
bHRTbW9vdGhpbmdUaW1lQ29uc3RhbnQgID0gMC44OwotY29uc3QgZG91YmxlIFJlYWx0aW1lQW5h
bHlzZXI6OkRlZmF1bHRNaW5EZWNpYmVscyA9IC0xMDA7Ci1jb25zdCBkb3VibGUgUmVhbHRpbWVB
bmFseXNlcjo6RGVmYXVsdE1heERlY2liZWxzID0gLTMwOwotCi1jb25zdCB1bnNpZ25lZCBSZWFs
dGltZUFuYWx5c2VyOjpEZWZhdWx0RkZUU2l6ZSA9IDIwNDg7Ci0vLyBBbGwgRkZUIGltcGxlbWVu
dGF0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gaGFuZGxlIHBvd2VyLW9mLXR3byBzaXplcyBNaW5GRlRT
aXplIDw9IHNpemUgPD0gTWF4RkZUU2l6ZS4KLWNvbnN0IHVuc2lnbmVkIFJlYWx0aW1lQW5hbHlz
ZXI6Ok1pbkZGVFNpemUgPSAxMjg7Ci1jb25zdCB1bnNpZ25lZCBSZWFsdGltZUFuYWx5c2VyOjpN
YXhGRlRTaXplID0gMjA0ODsKLWNvbnN0IHVuc2lnbmVkIFJlYWx0aW1lQW5hbHlzZXI6OklucHV0
QnVmZmVyU2l6ZSA9IFJlYWx0aW1lQW5hbHlzZXI6Ok1heEZGVFNpemUgKiAyOwotCi1SZWFsdGlt
ZUFuYWx5c2VyOjpSZWFsdGltZUFuYWx5c2VyKCkKLSAgICA6IG1faW5wdXRCdWZmZXIoSW5wdXRC
dWZmZXJTaXplKQotICAgICwgbV93cml0ZUluZGV4KDApCi0gICAgLCBtX2ZmdFNpemUoRGVmYXVs
dEZGVFNpemUpCi0gICAgLCBtX21hZ25pdHVkZUJ1ZmZlcihEZWZhdWx0RkZUU2l6ZSAvIDIpCi0g
ICAgLCBtX3Ntb290aGluZ1RpbWVDb25zdGFudChEZWZhdWx0U21vb3RoaW5nVGltZUNvbnN0YW50
KQotICAgICwgbV9taW5EZWNpYmVscyhEZWZhdWx0TWluRGVjaWJlbHMpCi0gICAgLCBtX21heERl
Y2liZWxzKERlZmF1bHRNYXhEZWNpYmVscykKLXsKLSAgICBtX2FuYWx5c2lzRnJhbWUgPSBhZG9w
dFB0cihuZXcgRkZURnJhbWUoRGVmYXVsdEZGVFNpemUpKTsKLX0KLQotUmVhbHRpbWVBbmFseXNl
cjo6flJlYWx0aW1lQW5hbHlzZXIoKQotewotfQotCi12b2lkIFJlYWx0aW1lQW5hbHlzZXI6OnJl
c2V0KCkKLXsKLSAgICBtX3dyaXRlSW5kZXggPSAwOwotICAgIG1faW5wdXRCdWZmZXIuemVybygp
OwotICAgIG1fbWFnbml0dWRlQnVmZmVyLnplcm8oKTsKLX0KLQotdm9pZCBSZWFsdGltZUFuYWx5
c2VyOjpzZXRGZnRTaXplKHNpemVfdCBzaXplKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0KLSAgICAvLyBPbmx5IGFsbG93IHBvd2VycyBvZiB0d28uCi0gICAgdW5zaWduZWQgbG9n
MnNpemUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obG9nMihzaXplKSk7Ci0gICAgYm9vbCBpc1BP
VCgxVUwgPDwgbG9nMnNpemUgPT0gc2l6ZSk7Ci0KLSAgICBpZiAoIWlzUE9UIHx8IHNpemUgPiBN
YXhGRlRTaXplIHx8IHNpemUgPCBNaW5GRlRTaXplKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJdCB3
b3VsZCBiZSBnb29kIHRvIGFsc28gc2V0IGFuIGV4Y2VwdGlvbi4KLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChtX2ZmdFNpemUgIT0gc2l6ZSkgewotICAgICAgICBtX2FuYWx5c2lz
RnJhbWUgPSBhZG9wdFB0cihuZXcgRkZURnJhbWUoc2l6ZSkpOwotICAgICAgICAvLyBtX21hZ25p
dHVkZUJ1ZmZlciBoYXMgc2l6ZSA9IGZmdFNpemUgLyAyIGJlY2F1c2UgaXQgY29udGFpbnMgZmxv
YXRzIHJlZHVjZWQgZnJvbSBjb21wbGV4IHZhbHVlcyBpbiBtX2FuYWx5c2lzRnJhbWUuCi0gICAg
ICAgIG1fbWFnbml0dWRlQnVmZmVyLmFsbG9jYXRlKHNpemUgLyAyKTsKLSAgICAgICAgbV9mZnRT
aXplID0gc2l6ZTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVhbHRpbWVBbmFseXNlcjo6d3JpdGVJbnB1
dChBdWRpb0J1cyogYnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIGJvb2wgaXNC
dXNHb29kID0gYnVzICYmIGJ1cy0+bnVtYmVyT2ZDaGFubmVscygpID4gMCAmJiBidXMtPmNoYW5u
ZWwoMCktPmxlbmd0aCgpID49IGZyYW1lc1RvUHJvY2VzczsKLSAgICBBU1NFUlQoaXNCdXNHb29k
KTsKLSAgICBpZiAoIWlzQnVzR29vZCkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAv
LyBGSVhNRSA6IGFsbG93IHRvIHdvcmsgd2l0aCBub24tRkZUU2l6ZSBkaXZpc2libGUgY2h1bmtp
bmcKLSAgICBib29sIGlzRGVzdGluYXRpb25Hb29kID0gbV93cml0ZUluZGV4IDwgbV9pbnB1dEJ1
ZmZlci5zaXplKCkgJiYgbV93cml0ZUluZGV4ICsgZnJhbWVzVG9Qcm9jZXNzIDw9IG1faW5wdXRC
dWZmZXIuc2l6ZSgpOwotICAgIEFTU0VSVChpc0Rlc3RpbmF0aW9uR29vZCk7Ci0gICAgaWYgKCFp
c0Rlc3RpbmF0aW9uR29vZCkKLSAgICAgICAgcmV0dXJuOyAgICAKLSAgICAKLSAgICAvLyBQZXJm
b3JtIHJlYWwtdGltZSBhbmFseXNpcwotICAgIC8vIEZJWE1FIDogZm9yIG5vdyBqdXN0IHVzZSBs
ZWZ0IGNoYW5uZWwgKG11c3QgbWl4IGlmIHN0ZXJlbyBzb3VyY2UpCi0gICAgY29uc3QgZmxvYXQq
IHNvdXJjZSA9IGJ1cy0+Y2hhbm5lbCgwKS0+ZGF0YSgpOwotCi0gICAgLy8gVGhlIHNvdXJjZSBo
YXMgYWxyZWFkeSBiZWVuIHNhbml0eSBjaGVja2VkIHdpdGggaXNCdXNHb29kIGFib3ZlLgotICAg
IAotICAgIG1lbWNweShtX2lucHV0QnVmZmVyLmRhdGEoKSArIG1fd3JpdGVJbmRleCwgc291cmNl
LCBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNzKTsKLQotICAgIG1fd3JpdGVJbmRleCAr
PSBmcmFtZXNUb1Byb2Nlc3M7Ci0gICAgaWYgKG1fd3JpdGVJbmRleCA+PSBJbnB1dEJ1ZmZlclNp
emUpCi0gICAgICAgIG1fd3JpdGVJbmRleCA9IDA7Ci19Ci0KLW5hbWVzcGFjZSB7Ci0KLXZvaWQg
YXBwbHlXaW5kb3coZmxvYXQqIHAsIHNpemVfdCBuKQotewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgCi0gICAgLy8gQmxhY2ttYW4gd2luZG93Ci0gICAgZG91YmxlIGFscGhhID0g
MC4xNjsKLSAgICBkb3VibGUgYTAgPSAwLjUgKiAoMSAtIGFscGhhKTsKLSAgICBkb3VibGUgYTEg
PSAwLjU7Ci0gICAgZG91YmxlIGEyID0gMC41ICogYWxwaGE7Ci0gICAgCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG47ICsraSkgewotICAgICAgICBkb3VibGUgeCA9IHN0YXRpY19jYXN0
PGRvdWJsZT4oaSkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KG4pOwotICAgICAgICBkb3VibGUgd2lu
ZG93ID0gYTAgLSBhMSAqIGNvcygyICogcGlEb3VibGUgKiB4KSArIGEyICogY29zKDQgKiBwaURv
dWJsZSAqIHgpOwotICAgICAgICBwW2ldICo9IGZsb2F0KHdpbmRvdyk7Ci0gICAgfQotfQotCi19
IC8vIG5hbWVzcGFjZQotCi12b2lkIFJlYWx0aW1lQW5hbHlzZXI6OmRvRkZUQW5hbHlzaXMoKQot
eyAgICAKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gVW5yb2xsIHRoZSBp
bnB1dCBidWZmZXIgaW50byBhIHRlbXBvcmFyeSBidWZmZXIsIHdoZXJlIHdlJ2xsIGFwcGx5IGFu
IGFuYWx5c2lzIHdpbmRvdyBmb2xsb3dlZCBieSBhbiBGRlQuCi0gICAgc2l6ZV90IGZmdFNpemUg
PSB0aGlzLT5mZnRTaXplKCk7Ci0gICAgCi0gICAgQXVkaW9GbG9hdEFycmF5IHRlbXBvcmFyeUJ1
ZmZlcihmZnRTaXplKTsKLSAgICBmbG9hdCogaW5wdXRCdWZmZXIgPSBtX2lucHV0QnVmZmVyLmRh
dGEoKTsKLSAgICBmbG9hdCogdGVtcFAgPSB0ZW1wb3JhcnlCdWZmZXIuZGF0YSgpOwotCi0gICAg
Ly8gVGFrZSB0aGUgcHJldmlvdXMgZmZ0U2l6ZSB2YWx1ZXMgZnJvbSB0aGUgaW5wdXQgYnVmZmVy
IGFuZCBjb3B5IGludG8gdGhlIHRlbXBvcmFyeSBidWZmZXIuCi0gICAgdW5zaWduZWQgd3JpdGVJ
bmRleCA9IG1fd3JpdGVJbmRleDsKLSAgICBpZiAod3JpdGVJbmRleCA8IGZmdFNpemUpIHsKLSAg
ICAgICAgbWVtY3B5KHRlbXBQLCBpbnB1dEJ1ZmZlciArIHdyaXRlSW5kZXggLSBmZnRTaXplICsg
SW5wdXRCdWZmZXJTaXplLCBzaXplb2YoKnRlbXBQKSAqIChmZnRTaXplIC0gd3JpdGVJbmRleCkp
OwotICAgICAgICBtZW1jcHkodGVtcFAgKyBmZnRTaXplIC0gd3JpdGVJbmRleCwgaW5wdXRCdWZm
ZXIsIHNpemVvZigqdGVtcFApICogd3JpdGVJbmRleCk7Ci0gICAgfSBlbHNlIAotICAgICAgICBt
ZW1jcHkodGVtcFAsIGlucHV0QnVmZmVyICsgd3JpdGVJbmRleCAtIGZmdFNpemUsIHNpemVvZigq
dGVtcFApICogZmZ0U2l6ZSk7Ci0KLSAgICAKLSAgICAvLyBXaW5kb3cgdGhlIGlucHV0IHNhbXBs
ZXMuCi0gICAgYXBwbHlXaW5kb3codGVtcFAsIGZmdFNpemUpOwotICAgIAotICAgIC8vIERvIHRo
ZSBhbmFseXNpcy4KLSAgICBtX2FuYWx5c2lzRnJhbWUtPmRvRkZUKHRlbXBQKTsKLQotICAgIGZs
b2F0KiByZWFsUCA9IG1fYW5hbHlzaXNGcmFtZS0+cmVhbERhdGEoKTsKLSAgICBmbG9hdCogaW1h
Z1AgPSBtX2FuYWx5c2lzRnJhbWUtPmltYWdEYXRhKCk7Ci0KLSAgICAvLyBCbG93IGF3YXkgdGhl
IHBhY2tlZCBueXF1aXN0IGNvbXBvbmVudC4KLSAgICBpbWFnUFswXSA9IDA7Ci0gICAgCi0gICAg
Ly8gTm9ybWFsaXplIHNvIHRoYW4gYW4gaW5wdXQgc2luZSB3YXZlIGF0IDBkQmZzIHJlZ2lzdGVy
cyBhcyAwZEJmcyAodW5kbyBGRlQgc2NhbGluZyBmYWN0b3IpLgotICAgIGNvbnN0IGRvdWJsZSBt
YWduaXR1ZGVTY2FsZSA9IDEuMCAvIERlZmF1bHRGRlRTaXplOwotCi0gICAgLy8gQSB2YWx1ZSBv
ZiAwIGRvZXMgbm8gYXZlcmFnaW5nIHdpdGggdGhlIHByZXZpb3VzIHJlc3VsdC4gIExhcmdlciB2
YWx1ZXMgcHJvZHVjZSBzbG93ZXIsIGJ1dCBzbW9vdGhlciBjaGFuZ2VzLgotICAgIGRvdWJsZSBr
ID0gbV9zbW9vdGhpbmdUaW1lQ29uc3RhbnQ7Ci0gICAgayA9IG1heCgwLjAsIGspOwotICAgIGsg
PSBtaW4oMS4wLCBrKTsgICAgCi0gICAgCi0gICAgLy8gQ29udmVydCB0aGUgYW5hbHlzaXMgZGF0
YSBmcm9tIGNvbXBsZXggdG8gbWFnbml0dWRlIGFuZCBhdmVyYWdlIHdpdGggdGhlIHByZXZpb3Vz
IHJlc3VsdC4KLSAgICBmbG9hdCogZGVzdGluYXRpb24gPSBtYWduaXR1ZGVCdWZmZXIoKS5kYXRh
KCk7Ci0gICAgc2l6ZV90IG4gPSBtYWduaXR1ZGVCdWZmZXIoKS5zaXplKCk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKLSAgICAgICAgQ29tcGxleCBjKHJlYWxQW2ldLCBp
bWFnUFtpXSk7Ci0gICAgICAgIGRvdWJsZSBzY2FsYXJNYWduaXR1ZGUgPSBhYnMoYykgKiBtYWdu
aXR1ZGVTY2FsZTsgICAgICAgIAotICAgICAgICBkZXN0aW5hdGlvbltpXSA9IGZsb2F0KGsgKiBk
ZXN0aW5hdGlvbltpXSArICgxIC0gaykgKiBzY2FsYXJNYWduaXR1ZGUpOwotICAgIH0KLX0KLQot
dm9pZCBSZWFsdGltZUFuYWx5c2VyOjpnZXRGbG9hdEZyZXF1ZW5jeURhdGEoRmxvYXQzMkFycmF5
KiBkZXN0aW5hdGlvbkFycmF5KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAg
ICBpZiAoIWRlc3RpbmF0aW9uQXJyYXkpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAg
ZG9GRlRBbmFseXNpcygpOwotICAgIAotICAgIC8vIENvbnZlcnQgZnJvbSBsaW5lYXIgbWFnbml0
dWRlIHRvIGZsb2F0aW5nLXBvaW50IGRlY2liZWxzLgotICAgIGNvbnN0IGRvdWJsZSBtaW5EZWNp
YmVscyA9IG1fbWluRGVjaWJlbHM7Ci0gICAgdW5zaWduZWQgc291cmNlTGVuZ3RoID0gbWFnbml0
dWRlQnVmZmVyKCkuc2l6ZSgpOwotICAgIHNpemVfdCBsZW4gPSBtaW4oc291cmNlTGVuZ3RoLCBk
ZXN0aW5hdGlvbkFycmF5LT5sZW5ndGgoKSk7Ci0gICAgaWYgKGxlbiA+IDApIHsKLSAgICAgICAg
Y29uc3QgZmxvYXQqIHNvdXJjZSA9IG1hZ25pdHVkZUJ1ZmZlcigpLmRhdGEoKTsKLSAgICAgICAg
ZmxvYXQqIGRlc3RpbmF0aW9uID0gZGVzdGluYXRpb25BcnJheS0+ZGF0YSgpOwotICAgICAgICAK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAg
ICBmbG9hdCBsaW5lYXJWYWx1ZSA9IHNvdXJjZVtpXTsKLSAgICAgICAgICAgIGRvdWJsZSBkYk1h
ZyA9ICFsaW5lYXJWYWx1ZSA/IG1pbkRlY2liZWxzIDogQXVkaW9VdGlsaXRpZXM6OmxpbmVhclRv
RGVjaWJlbHMobGluZWFyVmFsdWUpOwotICAgICAgICAgICAgZGVzdGluYXRpb25baV0gPSBmbG9h
dChkYk1hZyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgUmVhbHRpbWVBbmFseXNlcjo6
Z2V0Qnl0ZUZyZXF1ZW5jeURhdGEoVWludDhBcnJheSogZGVzdGluYXRpb25BcnJheSkKLXsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKCFkZXN0aW5hdGlvbkFycmF5KQot
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGRvRkZUQW5hbHlzaXMoKTsKLSAgICAKLSAg
ICAvLyBDb252ZXJ0IGZyb20gbGluZWFyIG1hZ25pdHVkZSB0byB1bnNpZ25lZC1ieXRlIGRlY2li
ZWxzLgotICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCA9IG1hZ25pdHVkZUJ1ZmZlcigpLnNpemUo
KTsKLSAgICBzaXplX3QgbGVuID0gbWluKHNvdXJjZUxlbmd0aCwgZGVzdGluYXRpb25BcnJheS0+
bGVuZ3RoKCkpOwotICAgIGlmIChsZW4gPiAwKSB7Ci0gICAgICAgIGNvbnN0IGRvdWJsZSByYW5n
ZVNjYWxlRmFjdG9yID0gbV9tYXhEZWNpYmVscyA9PSBtX21pbkRlY2liZWxzID8gMSA6IDEgLyAo
bV9tYXhEZWNpYmVscyAtIG1fbWluRGVjaWJlbHMpOwotICAgICAgICBjb25zdCBkb3VibGUgbWlu
RGVjaWJlbHMgPSBtX21pbkRlY2liZWxzOwotCi0gICAgICAgIGNvbnN0IGZsb2F0KiBzb3VyY2Ug
PSBtYWduaXR1ZGVCdWZmZXIoKS5kYXRhKCk7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIqIGRlc3Rp
bmF0aW9uID0gZGVzdGluYXRpb25BcnJheS0+ZGF0YSgpOyAgICAgICAgCi0gICAgICAgIAotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgIGZs
b2F0IGxpbmVhclZhbHVlID0gc291cmNlW2ldOwotICAgICAgICAgICAgZG91YmxlIGRiTWFnID0g
IWxpbmVhclZhbHVlID8gbWluRGVjaWJlbHMgOiBBdWRpb1V0aWxpdGllczo6bGluZWFyVG9EZWNp
YmVscyhsaW5lYXJWYWx1ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFRoZSByYW5n
ZSBtX21pbkRlY2liZWxzIHRvIG1fbWF4RGVjaWJlbHMgd2lsbCBiZSBzY2FsZWQgdG8gYnl0ZSB2
YWx1ZXMgZnJvbSAwIHRvIFVDSEFSX01BWC4KLSAgICAgICAgICAgIGRvdWJsZSBzY2FsZWRWYWx1
ZSA9IFVDSEFSX01BWCAqIChkYk1hZyAtIG1pbkRlY2liZWxzKSAqIHJhbmdlU2NhbGVGYWN0b3I7
Ci0KLSAgICAgICAgICAgIC8vIENsaXAgdG8gdmFsaWQgcmFuZ2UuCi0gICAgICAgICAgICBpZiAo
c2NhbGVkVmFsdWUgPCAwKQotICAgICAgICAgICAgICAgIHNjYWxlZFZhbHVlID0gMDsKLSAgICAg
ICAgICAgIGlmIChzY2FsZWRWYWx1ZSA+IFVDSEFSX01BWCkKLSAgICAgICAgICAgICAgICBzY2Fs
ZWRWYWx1ZSA9IFVDSEFSX01BWDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZGVzdGluYXRp
b25baV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihzY2FsZWRWYWx1ZSk7Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLXZvaWQgUmVhbHRpbWVBbmFseXNlcjo6Z2V0Qnl0ZVRpbWVEb21haW5E
YXRhKFVpbnQ4QXJyYXkqIGRlc3RpbmF0aW9uQXJyYXkpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLQotICAgIGlmICghZGVzdGluYXRpb25BcnJheSkKLSAgICAgICAgcmV0dXJuOwot
ICAgICAgICAKLSAgICB1bnNpZ25lZCBmZnRTaXplID0gdGhpcy0+ZmZ0U2l6ZSgpOwotICAgIHNp
emVfdCBsZW4gPSBtaW4oZmZ0U2l6ZSwgZGVzdGluYXRpb25BcnJheS0+bGVuZ3RoKCkpOwotICAg
IGlmIChsZW4gPiAwKSB7Ci0gICAgICAgIGJvb2wgaXNJbnB1dEJ1ZmZlckdvb2QgPSBtX2lucHV0
QnVmZmVyLnNpemUoKSA9PSBJbnB1dEJ1ZmZlclNpemUgJiYgbV9pbnB1dEJ1ZmZlci5zaXplKCkg
PiBmZnRTaXplOwotICAgICAgICBBU1NFUlQoaXNJbnB1dEJ1ZmZlckdvb2QpOwotICAgICAgICBp
ZiAoIWlzSW5wdXRCdWZmZXJHb29kKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGZs
b2F0KiBpbnB1dEJ1ZmZlciA9IG1faW5wdXRCdWZmZXIuZGF0YSgpOyAgICAgICAgCi0gICAgICAg
IHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uID0gZGVzdGluYXRpb25BcnJheS0+ZGF0YSgpOwot
ICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgd3JpdGVJbmRleCA9IG1fd3JpdGVJbmRleDsKLQot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAg
IC8vIEJ1ZmZlciBhY2Nlc3MgaXMgcHJvdGVjdGVkIGR1ZSB0byBtb2R1bG8gb3BlcmF0aW9uLgot
ICAgICAgICAgICAgZmxvYXQgdmFsdWUgPSBpbnB1dEJ1ZmZlclsoaSArIHdyaXRlSW5kZXggLSBm
ZnRTaXplICsgSW5wdXRCdWZmZXJTaXplKSAlIElucHV0QnVmZmVyU2l6ZV07Ci0KLSAgICAgICAg
ICAgIC8vIFNjYWxlIGZyb20gbm9taW5hbCAtMSAtPiArMSB0byB1bnNpZ25lZCBieXRlLgotICAg
ICAgICAgICAgZG91YmxlIHNjYWxlZFZhbHVlID0gMTI4ICogKHZhbHVlICsgMSk7Ci0KLSAgICAg
ICAgICAgIC8vIENsaXAgdG8gdmFsaWQgcmFuZ2UuCi0gICAgICAgICAgICBpZiAoc2NhbGVkVmFs
dWUgPCAwKQotICAgICAgICAgICAgICAgIHNjYWxlZFZhbHVlID0gMDsKLSAgICAgICAgICAgIGlm
IChzY2FsZWRWYWx1ZSA+IFVDSEFSX01BWCkKLSAgICAgICAgICAgICAgICBzY2FsZWRWYWx1ZSA9
IFVDSEFSX01BWDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZGVzdGluYXRpb25baV0gPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihzY2FsZWRWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVE
SU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5oCShy
ZXZpc2lvbiAxMTEyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5
c2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgUmVhbHRpbWVBbmFseXNlcl9oCi0jZGVmaW5lIFJlYWx0aW1lQW5hbHlzZXJfaAotCi0jaW5j
bHVkZSAiQXVkaW9BcnJheS5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvQnVzOwotY2xhc3MgRkZURnJhbWU7Ci0KLWNsYXNzIFJl
YWx0aW1lQW5hbHlzZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlYWx0aW1lQW5hbHlz
ZXIpOwotcHVibGljOgotICAgIFJlYWx0aW1lQW5hbHlzZXIoKTsKLSAgICB2aXJ0dWFsIH5SZWFs
dGltZUFuYWx5c2VyKCk7Ci0gICAgCi0gICAgdm9pZCByZXNldCgpOwotCi0gICAgc2l6ZV90IGZm
dFNpemUoKSBjb25zdCB7IHJldHVybiBtX2ZmdFNpemU7IH0KLSAgICB2b2lkIHNldEZmdFNpemUo
c2l6ZV90IHNpemUpOwotCi0gICAgdW5zaWduZWQgZnJlcXVlbmN5QmluQ291bnQoKSBjb25zdCB7
IHJldHVybiBtX2ZmdFNpemUgLyAyOyB9Ci0KLSAgICB2b2lkIHNldE1pbkRlY2liZWxzKGZsb2F0
IGspIHsgbV9taW5EZWNpYmVscyA9IGs7IH0KLSAgICBmbG9hdCBtaW5EZWNpYmVscygpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX21pbkRlY2liZWxzKTsgfQotCi0gICAgdm9p
ZCBzZXRNYXhEZWNpYmVscyhmbG9hdCBrKSB7IG1fbWF4RGVjaWJlbHMgPSBrOyB9Ci0gICAgZmxv
YXQgbWF4RGVjaWJlbHMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV9tYXhE
ZWNpYmVscyk7IH0KLQotICAgIHZvaWQgc2V0U21vb3RoaW5nVGltZUNvbnN0YW50KGZsb2F0IGsp
IHsgbV9zbW9vdGhpbmdUaW1lQ29uc3RhbnQgPSBrOyB9Ci0gICAgZmxvYXQgc21vb3RoaW5nVGlt
ZUNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc21vb3RoaW5n
VGltZUNvbnN0YW50KTsgfQotCi0gICAgdm9pZCBnZXRGbG9hdEZyZXF1ZW5jeURhdGEoRmxvYXQz
MkFycmF5Kik7Ci0gICAgdm9pZCBnZXRCeXRlRnJlcXVlbmN5RGF0YShVaW50OEFycmF5Kik7Ci0g
ICAgdm9pZCBnZXRCeXRlVGltZURvbWFpbkRhdGEoVWludDhBcnJheSopOwotCi0gICAgLy8gVGhl
IGF1ZGlvIHRocmVhZCB3cml0ZXMgaW5wdXQgZGF0YSBoZXJlLgotICAgIHZvaWQgd3JpdGVJbnB1
dChBdWRpb0J1cyosIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwotCi0gICAgc3RhdGljIGNvbnN0
IGRvdWJsZSBEZWZhdWx0U21vb3RoaW5nVGltZUNvbnN0YW50OwotICAgIHN0YXRpYyBjb25zdCBk
b3VibGUgRGVmYXVsdE1pbkRlY2liZWxzOwotICAgIHN0YXRpYyBjb25zdCBkb3VibGUgRGVmYXVs
dE1heERlY2liZWxzOwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIERlZmF1bHRGRlRTaXpl
OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBNaW5GRlRTaXplOwotICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBNYXhGRlRTaXplOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBJbnB1dEJ1
ZmZlclNpemU7Ci0KLXByaXZhdGU6Ci0gICAgLy8gVGhlIGF1ZGlvIHRocmVhZCB3cml0ZXMgdGhl
IGlucHV0IGF1ZGlvIGhlcmUuCi0gICAgQXVkaW9GbG9hdEFycmF5IG1faW5wdXRCdWZmZXI7Ci0g
ICAgdW5zaWduZWQgbV93cml0ZUluZGV4OwotICAgIAotICAgIHNpemVfdCBtX2ZmdFNpemU7Ci0g
ICAgT3duUHRyPEZGVEZyYW1lPiBtX2FuYWx5c2lzRnJhbWU7Ci0gICAgdm9pZCBkb0ZGVEFuYWx5
c2lzKCk7Ci0gICAgCi0gICAgLy8gZG9GRlRBbmFseXNpcygpIHN0b3JlcyB0aGUgZmxvYXRpbmct
cG9pbnQgbWFnbml0dWRlIGFuYWx5c2lzIGRhdGEgaGVyZS4KLSAgICBBdWRpb0Zsb2F0QXJyYXkg
bV9tYWduaXR1ZGVCdWZmZXI7Ci0gICAgQXVkaW9GbG9hdEFycmF5JiBtYWduaXR1ZGVCdWZmZXIo
KSB7IHJldHVybiBtX21hZ25pdHVkZUJ1ZmZlcjsgfQotCi0gICAgLy8gQSB2YWx1ZSBiZXR3ZWVu
IDAgYW5kIDEgd2hpY2ggYXZlcmFnZXMgdGhlIHByZXZpb3VzIHZlcnNpb24gb2YgbV9tYWduaXR1
ZGVCdWZmZXIgd2l0aCB0aGUgY3VycmVudCBhbmFseXNpcyBtYWduaXR1ZGUgZGF0YS4KLSAgICBk
b3VibGUgbV9zbW9vdGhpbmdUaW1lQ29uc3RhbnQ7ICAgIAotCi0gICAgLy8gVGhlIHJhbmdlIHVz
ZWQgd2hlbiBjb252ZXJ0aW5nIHdoZW4gdXNpbmcgZ2V0Qnl0ZUZyZXF1ZW5jeURhdGEoKS4gCi0g
ICAgZG91YmxlIG1fbWluRGVjaWJlbHM7Ci0gICAgZG91YmxlIG1fbWF4RGVjaWJlbHM7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBSZWFsdGltZUFuYWx5c2VyX2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9k
ZS5jcHAJKHJldmlzaW9uIDExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0
aW1lQW5hbHlzZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4OCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQot
I2luY2x1ZGUgIlJlYWx0aW1lQW5hbHlzZXJOb2RlLmgiCi0KLSNpbmNsdWRlICJBdWRpb05vZGVJ
bnB1dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLVJlYWx0aW1lQW5hbHlzZXJOb2RlOjpSZWFsdGltZUFuYWx5c2VyTm9kZShBdWRpb0Nv
bnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBBdWRpb05vZGUoY29udGV4
dCwgc2FtcGxlUmF0ZSkKLXsKLSAgICBhZGRJbnB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlSW5w
dXQodGhpcykpKTsKLSAgICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZU91dHB1dCh0
aGlzLCAyKSkpOwotICAgIAotICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlQW5hbHlzZXIpOwotICAg
IAotICAgIGluaXRpYWxpemUoKTsKLX0KLQotUmVhbHRpbWVBbmFseXNlck5vZGU6On5SZWFsdGlt
ZUFuYWx5c2VyTm9kZSgpCi17Ci0gICAgdW5pbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgUmVhbHRp
bWVBbmFseXNlck5vZGU6OnByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKLXsKLSAgICBB
dWRpb0J1cyogb3V0cHV0QnVzID0gb3V0cHV0KDApLT5idXMoKTsKLQotICAgIGlmICghaXNJbml0
aWFsaXplZCgpIHx8ICFpbnB1dCgwKS0+aXNDb25uZWN0ZWQoKSkgewotICAgICAgICBvdXRwdXRC
dXMtPnplcm8oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEF1ZGlvQnVzKiBpbnB1
dEJ1cyA9IGlucHV0KDApLT5idXMoKTsKLSAgICAKLSAgICAvLyBHaXZlIHRoZSBhbmFseXNlciB0
aGUgYXVkaW8gd2hpY2ggaXMgcGFzc2luZyB0aHJvdWdoIHRoaXMgQXVkaW9Ob2RlLgotICAgIG1f
YW5hbHlzZXIud3JpdGVJbnB1dChpbnB1dEJ1cywgZnJhbWVzVG9Qcm9jZXNzKTsKLQotICAgIC8v
IEZvciBpbi1wbGFjZSBwcm9jZXNzaW5nLCBvdXIgb3ZlcnJpZGUgb2YgcHVsbElucHV0cygpIHdp
bGwganVzdCBwYXNzIHRoZSBhdWRpbyBkYXRhIHRocm91Z2ggdW5jaGFuZ2VkIGlmIHRoZSBjaGFu
bmVsIGNvdW50IG1hdGNoZXMgZnJvbSBpbnB1dCB0byBvdXRwdXQKLSAgICAvLyAocmVzdWx0aW5n
IGluIGlucHV0QnVzID09IG91dHB1dEJ1cykuICBPdGhlcndpc2UsIGRvIGFuIHVwLW1peCB0byBz
dGVyZW8uCi0gICAgaWYgKGlucHV0QnVzICE9IG91dHB1dEJ1cykKLSAgICAgICAgb3V0cHV0QnVz
LT5jb3B5RnJvbSgqaW5wdXRCdXMpOwotfQotCi0vLyBXZSBvdmVycmlkZSBwdWxsSW5wdXRzKCkg
YXMgYW4gb3B0aW1pemF0aW9uIGFsbG93aW5nIHRoaXMgbm9kZSB0byB0YWtlIGFkdmFudGFnZSBv
ZiBpbi1wbGFjZSBwcm9jZXNzaW5nLAotLy8gd2hlcmUgdGhlIGlucHV0IGlzIHNpbXBseSBwYXNz
ZWQgdGhyb3VnaCB1bnByb2Nlc3NlZCB0byB0aGUgb3V0cHV0LgotLy8gTm90ZTogdGhpcyBvbmx5
IGFwcGxpZXMgaWYgdGhlIGlucHV0IGFuZCBvdXRwdXQgY2hhbm5lbCBjb3VudHMgbWF0Y2guCi12
b2lkIFJlYWx0aW1lQW5hbHlzZXJOb2RlOjpwdWxsSW5wdXRzKHNpemVfdCBmcmFtZXNUb1Byb2Nl
c3MpCi17Ci0gICAgLy8gUmVuZGVyIGlucHV0IHN0cmVhbSAtIHRyeSB0byByZW5kZXIgZGlyZWN0
bHkgaW50byBvdXRwdXQgYnVzIGZvciBwYXNzLXRocm91Z2ggcHJvY2Vzc2luZyB3aGVyZSBwcm9j
ZXNzKCkgZG9lc24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLi4uCi0gICAgaW5wdXQoMCktPnB1bGwo
b3V0cHV0KDApLT5idXMoKSwgZnJhbWVzVG9Qcm9jZXNzKTsKLX0KLQotdm9pZCBSZWFsdGltZUFu
YWx5c2VyTm9kZTo6cmVzZXQoKQotewotICAgIG1fYW5hbHlzZXIucmVzZXQoKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaAkocmV2
aXNpb24gMTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNl
ck5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBSZWFsdGltZUFuYWx5c2VyTm9kZV9oCi0jZGVmaW5lIFJlYWx0aW1lQW5hbHlzZXJOb2Rl
X2gKLQotI2luY2x1ZGUgIkF1ZGlvTm9kZS5oIgotI2luY2x1ZGUgIlJlYWx0aW1lQW5hbHlzZXIu
aCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIFJlYWx0aW1lQW5hbHlzZXJOb2RlIDogcHVibGljIEF1ZGlvTm9kZSB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8UmVhbHRpbWVBbmFseXNlck5vZGU+IGNyZWF0ZShBdWRpb0Nv
bnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFJlYWx0aW1lQW5hbHlzZXJOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpKTsg
ICAgICAKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5SZWFsdGltZUFuYWx5c2VyTm9kZSgpOwotICAg
IAotICAgIC8vIEF1ZGlvTm9kZQotICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKHNpemVfdCBmcmFt
ZXNUb1Byb2Nlc3MpOwotICAgIHZpcnR1YWwgdm9pZCBwdWxsSW5wdXRzKHNpemVfdCBmcmFtZXNU
b1Byb2Nlc3MpOwotICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOwotCi0gICAgLy8gSmF2YXNjcmlw
dCBiaW5kaW5ncwotICAgIHVuc2lnbmVkIGludCBmZnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9h
bmFseXNlci5mZnRTaXplKCk7IH0KLSAgICB2b2lkIHNldEZmdFNpemUodW5zaWduZWQgaW50IHNp
emUpIHsgbV9hbmFseXNlci5zZXRGZnRTaXplKHNpemUpOyB9Ci0KLSAgICB1bnNpZ25lZCBmcmVx
dWVuY3lCaW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYW5hbHlzZXIuZnJlcXVlbmN5QmluQ291
bnQoKTsgfQotCi0gICAgdm9pZCBzZXRNaW5EZWNpYmVscyhmbG9hdCBrKSB7IG1fYW5hbHlzZXIu
c2V0TWluRGVjaWJlbHMoayk7IH0KLSAgICBmbG9hdCBtaW5EZWNpYmVscygpIGNvbnN0IHsgcmV0
dXJuIG1fYW5hbHlzZXIubWluRGVjaWJlbHMoKTsgfQotCi0gICAgdm9pZCBzZXRNYXhEZWNpYmVs
cyhmbG9hdCBrKSB7IG1fYW5hbHlzZXIuc2V0TWF4RGVjaWJlbHMoayk7IH0KLSAgICBmbG9hdCBt
YXhEZWNpYmVscygpIGNvbnN0IHsgcmV0dXJuIG1fYW5hbHlzZXIubWF4RGVjaWJlbHMoKTsgfQot
Ci0gICAgdm9pZCBzZXRTbW9vdGhpbmdUaW1lQ29uc3RhbnQoZmxvYXQgaykgeyBtX2FuYWx5c2Vy
LnNldFNtb290aGluZ1RpbWVDb25zdGFudChrKTsgfQotICAgIGZsb2F0IHNtb290aGluZ1RpbWVD
b25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fYW5hbHlzZXIuc21vb3RoaW5nVGltZUNvbnN0YW50
KCk7IH0KLQotICAgIHZvaWQgZ2V0RmxvYXRGcmVxdWVuY3lEYXRhKEZsb2F0MzJBcnJheSogYXJy
YXkpIHsgbV9hbmFseXNlci5nZXRGbG9hdEZyZXF1ZW5jeURhdGEoYXJyYXkpOyB9Ci0gICAgdm9p
ZCBnZXRCeXRlRnJlcXVlbmN5RGF0YShVaW50OEFycmF5KiBhcnJheSkgeyBtX2FuYWx5c2VyLmdl
dEJ5dGVGcmVxdWVuY3lEYXRhKGFycmF5KTsgfQotICAgIHZvaWQgZ2V0Qnl0ZVRpbWVEb21haW5E
YXRhKFVpbnQ4QXJyYXkqIGFycmF5KSB7IG1fYW5hbHlzZXIuZ2V0Qnl0ZVRpbWVEb21haW5EYXRh
KGFycmF5KTsgfQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1l
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQotCi0gICAgUmVhbHRpbWVBbmFseXNlck5v
ZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7Ci0KLSAgICBSZWFsdGltZUFuYWx5
c2VyIG1fYW5hbHlzZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBSZWFsdGltZUFuYWx5c2VyTm9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9S
ZWFsdGltZUFuYWx5c2VyTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaWRsCShyZXZpc2lvbiAxMTEyMzMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBhdWRpbyB7Ci0gICAgaW50
ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAotICAgICAgICBKU0dlbmVy
YXRlVG9KU09iamVjdAotICAgIF0gUmVhbHRpbWVBbmFseXNlck5vZGUgOiBBdWRpb05vZGUgewot
ICAgICAgICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBmZnRTaXplOwotICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBmcmVxdWVuY3lCaW5Db3VudDsKLQotICAgICAgICAv
LyBtaW5EZWNpYmVscyAvIG1heERlY2liZWxzIHJlcHJlc2VudCB0aGUgcmFuZ2UgdG8gc2NhbGUg
dGhlIEZGVCBhbmFseXNpcyBkYXRhIGZvciBjb252ZXJzaW9uIHRvIHVuc2lnbmVkIGJ5dGUgdmFs
dWVzLgotICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgbWluRGVjaWJlbHM7Ci0gICAgICAgIGF0dHJp
YnV0ZSBmbG9hdCBtYXhEZWNpYmVsczsKLQotICAgICAgICAvLyBBIHZhbHVlIGZyb20gMC4wIC0+
IDEuMCB3aGVyZSAwLjAgcmVwcmVzZW50cyBubyB0aW1lIGF2ZXJhZ2luZyB3aXRoIHRoZSBsYXN0
IGFuYWx5c2lzIGZyYW1lLgotICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgc21vb3RoaW5nVGltZUNv
bnN0YW50OwotCi0gICAgICAgIC8vIENvcGllcyB0aGUgY3VycmVudCBmcmVxdWVuY3kgZGF0YSBp
bnRvIHRoZSBwYXNzZWQgYXJyYXkuCi0gICAgICAgIC8vIElmIHRoZSBhcnJheSBoYXMgZmV3ZXIg
ZWxlbWVudHMgdGhhbiB0aGUgZnJlcXVlbmN5QmluQ291bnQsIHRoZSBleGNlc3MgZWxlbWVudHMg
d2lsbCBiZSBkcm9wcGVkLgotICAgICAgICB2b2lkIGdldEZsb2F0RnJlcXVlbmN5RGF0YShpbiBG
bG9hdDMyQXJyYXkgYXJyYXkpOwotICAgICAgICB2b2lkIGdldEJ5dGVGcmVxdWVuY3lEYXRhKGlu
IFVpbnQ4QXJyYXkgYXJyYXkpOwotCi0gICAgICAgIC8vIFJlYWwtdGltZSB3YXZlZm9ybSBkYXRh
Ci0gICAgICAgIHZvaWQgZ2V0Qnl0ZVRpbWVEb21haW5EYXRhKGluIFVpbnQ4QXJyYXkgYXJyYXkp
OwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZlU2hhcGVyRFNQ
S2VybmVsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZlU2hh
cGVyRFNQS2VybmVsLmNwcAkocmV2aXNpb24gMTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vV2F2ZVNoYXBlckRTUEtlcm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJf
QVVESU8pCi0KLSNpbmNsdWRlICJXYXZlU2hhcGVyRFNQS2VybmVsLmgiCi0KLSNpbmNsdWRlICJX
YXZlU2hhcGVyUHJvY2Vzc29yLmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotCi11c2luZyBuYW1l
c3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgV2F2ZVNoYXBlckRTUEtl
cm5lbDo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHNp
emVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgQVNTRVJUKHNvdXJjZSAmJiBkZXN0aW5hdGlv
biAmJiB3YXZlU2hhcGVyUHJvY2Vzc29yKCkpOwotCi0gICAgRmxvYXQzMkFycmF5KiBjdXJ2ZSA9
IHdhdmVTaGFwZXJQcm9jZXNzb3IoKS0+Y3VydmUoKTsKLSAgICBpZiAoIWN1cnZlKSB7Ci0gICAg
ICAgIC8vIEFjdCBhcyAic3RyYWlnaHQgd2lyZSIgcGFzcy10aHJvdWdoIGlmIG5vIGN1cnZlIGlz
IHNldC4KLSAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2UsIHNpemVvZihmbG9hdCkg
KiBmcmFtZXNUb1Byb2Nlc3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZmxvYXQq
IGN1cnZlRGF0YSA9IGN1cnZlLT5kYXRhKCk7Ci0gICAgaW50IGN1cnZlTGVuZ3RoID0gY3VydmUt
Pmxlbmd0aCgpOwotCi0gICAgQVNTRVJUKGN1cnZlRGF0YSk7Ci0KLSAgICBpZiAoIWN1cnZlRGF0
YSB8fCAhY3VydmVMZW5ndGgpIHsKLSAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2Us
IHNpemVvZihmbG9hdCkgKiBmcmFtZXNUb1Byb2Nlc3MpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gQXBwbHkgd2F2ZXNoYXBpbmcgY3VydmUuCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGZyYW1lc1RvUHJvY2VzczsgKytpKSB7Ci0gICAgICAgIGNvbnN0IGZsb2F0IGlu
cHV0ID0gc291cmNlW2ldOwotCi0gICAgICAgIC8vIENhbGN1bGF0ZSBhbiBpbmRleCBiYXNlZCBv
biBpbnB1dCAtMSAtPiArMSB3aXRoIDAgYmVpbmcgYXQgdGhlIGNlbnRlciBvZiB0aGUgY3VydmUg
ZGF0YS4KLSAgICAgICAgaW50IGluZGV4ID0gKGN1cnZlTGVuZ3RoICogKGlucHV0ICsgMSkpIC8g
MjsKLQotICAgICAgICAvLyBDbGlwIGluZGV4IHRvIHRoZSBpbnB1dCByYW5nZSBvZiB0aGUgY3Vy
dmUuCi0gICAgICAgIC8vIFRoaXMgdGFrZXMgY2FyZSBvZiBpbnB1dCBvdXRzaWRlIG9mIG5vbWlu
YWwgcmFuZ2UgLTEgLT4gKzEKLSAgICAgICAgaW5kZXggPSBtYXgoaW5kZXgsIDApOwotICAgICAg
ICBpbmRleCA9IG1pbihpbmRleCwgY3VydmVMZW5ndGggLSAxKTsKLSAgICAgICAgZGVzdGluYXRp
b25baV0gPSBjdXJ2ZURhdGFbaW5kZXhdOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL1dhdmVTaGFwZXJEU1BLZXJuZWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmgJKHJldmlzaW9uIDExMTIzMykKKysr
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJEU1BLZXJuZWwuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXYXZlU2hhcGVyRFNQ
S2VybmVsX2gKLSNkZWZpbmUgV2F2ZVNoYXBlckRTUEtlcm5lbF9oCi0KLSNpbmNsdWRlICJBdWRp
b0RTUEtlcm5lbC5oIgotI2luY2x1ZGUgIldhdmVTaGFwZXJQcm9jZXNzb3IuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBXYXZlU2hhcGVyUHJvY2Vzc29yOwotCi0vLyBXYXZlU2hh
cGVyRFNQS2VybmVsIGlzIGFuIEF1ZGlvRFNQS2VybmVsIGFuZCBpcyByZXNwb25zaWJsZSBmb3Ig
bm9uLWxpbmVhciBkaXN0b3J0aW9uIG9uIG9uZSBjaGFubmVsLgotCi1jbGFzcyBXYXZlU2hhcGVy
RFNQS2VybmVsIDogcHVibGljIEF1ZGlvRFNQS2VybmVsIHsKLXB1YmxpYzogIAotICAgIFdhdmVT
aGFwZXJEU1BLZXJuZWwoV2F2ZVNoYXBlclByb2Nlc3NvciogcHJvY2Vzc29yKQotICAgIDogQXVk
aW9EU1BLZXJuZWwocHJvY2Vzc29yKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgLy8gQXVkaW9E
U1BLZXJuZWwKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlLCBm
bG9hdCogZGVzdCwgc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgdmlydHVhbCB2b2lkIHJl
c2V0KCkgeyB9Ci0gICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiAwOyB9Ci0gICAgCi1wcm90ZWN0ZWQ6Ci0gICAgV2F2ZVNoYXBlclByb2Nl
c3Nvciogd2F2ZVNoYXBlclByb2Nlc3NvcigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFdhdmVTaGFw
ZXJQcm9jZXNzb3IqPihwcm9jZXNzb3IoKSk7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIFdhdmVTaGFwZXJEU1BLZXJuZWxfaApJbmRleDogU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmNwcAkocmV2aXNpb24gMTExMjMzKQorKysgU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBF
TkFCTEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiV2F2ZVNoYXBlck5vZGUuaCIKLSNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVdhdmVTaGFwZXJO
b2RlOjpXYXZlU2hhcGVyTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQpCi0gICAgOiBBdWRpb0Jh
c2ljUHJvY2Vzc29yTm9kZShjb250ZXh0LCBjb250ZXh0LT5zYW1wbGVSYXRlKCkpCi17Ci0gICAg
bV9wcm9jZXNzb3IgPSBhZG9wdFB0cihuZXcgV2F2ZVNoYXBlclByb2Nlc3Nvcihjb250ZXh0LT5z
YW1wbGVSYXRlKCksIDEpKTsKLSAgICBzZXROb2RlVHlwZShOb2RlVHlwZVdhdmVTaGFwZXIpOwot
fQotCi12b2lkIFdhdmVTaGFwZXJOb2RlOjpzZXRDdXJ2ZShGbG9hdDMyQXJyYXkqIGN1cnZlKQot
ewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7IAotICAgIHdhdmVTaGFwZXJQcm9jZXNzb3Io
KS0+c2V0Q3VydmUoY3VydmUpOwotfQotCi1GbG9hdDMyQXJyYXkqIFdhdmVTaGFwZXJOb2RlOjpj
dXJ2ZSgpCi17Ci0gICAgcmV0dXJuIHdhdmVTaGFwZXJQcm9jZXNzb3IoKS0+Y3VydmUoKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuaAkocmV2aXNpb24g
MTExMjMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXYXZlU2hh
cGVyTm9kZV9oCi0jZGVmaW5lIFdhdmVTaGFwZXJOb2RlX2gKLQotI2luY2x1ZGUgIkF1ZGlvQmFz
aWNQcm9jZXNzb3JOb2RlLmgiCi0jaW5jbHVkZSAiQmlxdWFkUHJvY2Vzc29yLmgiCi0jaW5jbHVk
ZSAiV2F2ZVNoYXBlclByb2Nlc3Nvci5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLWNsYXNzIFdhdmVTaGFwZXJOb2RlIDogcHVibGljIEF1
ZGlvQmFzaWNQcm9jZXNzb3JOb2RlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxX
YXZlU2hhcGVyTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCogY29udGV4dCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2F2ZVNoYXBlck5vZGUoY29udGV4dCkpOwotICAgIH0K
LQotICAgIC8vIHNldEN1cnZlKCkgaXMgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZC4KLSAgICB2
b2lkIHNldEN1cnZlKEZsb2F0MzJBcnJheSopOwotICAgIEZsb2F0MzJBcnJheSogY3VydmUoKTsK
LQotcHJpdmF0ZTogICAgCi0gICAgV2F2ZVNoYXBlck5vZGUoQXVkaW9Db250ZXh0Kik7ICAgIAot
Ci0gICAgV2F2ZVNoYXBlclByb2Nlc3Nvciogd2F2ZVNoYXBlclByb2Nlc3NvcigpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PFdhdmVTaGFwZXJQcm9jZXNzb3IqPihwcm9jZXNzb3IoKSk7IH0KLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFdhdmVTaGFwZXJOb2RlX2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5pZGwJKHJldmlzaW9u
IDExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmlkbAko
d29ya2luZyBjb3B5KQpAQCAtMSwzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGF1ZGlv
IHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCi0gICAg
ICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0Ci0gICAgXSBXYXZlU2hhcGVyTm9kZSA6IEF1ZGlvTm9k
ZSB7Ci0gICAgICAgIGF0dHJpYnV0ZSBbSlNDdXN0b21TZXR0ZXJdIEZsb2F0MzJBcnJheSBjdXJ2
ZTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlclBy
b2Nlc3Nvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNo
YXBlclByb2Nlc3Nvci5jcHAJKHJldmlzaW9uIDExMTIzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgyICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VC
X0FVRElPKQotCi0jaW5jbHVkZSAiV2F2ZVNoYXBlclByb2Nlc3Nvci5oIgotCi0jaW5jbHVkZSAi
V2F2ZVNoYXBlckRTUEtlcm5lbC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1XYXZl
U2hhcGVyUHJvY2Vzc29yOjpXYXZlU2hhcGVyUHJvY2Vzc29yKGZsb2F0IHNhbXBsZVJhdGUsIHNp
emVfdCBudW1iZXJPZkNoYW5uZWxzKQotICAgIDogQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3Ioc2Ft
cGxlUmF0ZSwgbnVtYmVyT2ZDaGFubmVscykKLXsKLX0KLQotV2F2ZVNoYXBlclByb2Nlc3Nvcjo6
fldhdmVTaGFwZXJQcm9jZXNzb3IoKQotewotICAgIGlmIChpc0luaXRpYWxpemVkKCkpCi0gICAg
ICAgIHVuaW5pdGlhbGl6ZSgpOwotfQotCi1QYXNzT3duUHRyPEF1ZGlvRFNQS2VybmVsPiBXYXZl
U2hhcGVyUHJvY2Vzc29yOjpjcmVhdGVLZXJuZWwoKQotewotICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgV2F2ZVNoYXBlckRTUEtlcm5lbCh0aGlzKSk7Ci19Ci0KLXZvaWQgV2F2ZVNoYXBlclByb2Nl
c3Nvcjo6c2V0Q3VydmUoRmxvYXQzMkFycmF5KiBjdXJ2ZSkKLXsKLSAgICAvLyBUaGlzIHN5bmNo
cm9uaXplcyB3aXRoIHByb2Nlc3MoKS4KLSAgICBNdXRleExvY2tlciBwcm9jZXNzTG9ja2VyKG1f
cHJvY2Vzc0xvY2spOwotICAgIAotICAgIG1fY3VydmUgPSBjdXJ2ZTsKLX0KLQotdm9pZCBXYXZl
U2hhcGVyUHJvY2Vzc29yOjpwcm9jZXNzKGNvbnN0IEF1ZGlvQnVzKiBzb3VyY2UsIEF1ZGlvQnVz
KiBkZXN0aW5hdGlvbiwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKLXsKLSAgICBpZiAoIWlzSW5p
dGlhbGl6ZWQoKSkgewotICAgICAgICBkZXN0aW5hdGlvbi0+emVybygpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgLy8gVGhlIGF1ZGlvIHRocmVhZCBjYW4ndCBibG9jayBvbiB0aGlz
IGxvY2ssIHNvIHdlIGNhbGwgdHJ5TG9jaygpIGluc3RlYWQuCi0gICAgLy8gQ2FyZWZ1bCAtIHRo
aXMgaXMgYSB0cnlMb2NrKCkgYW5kIG5vdCBhbiBhdXRvbG9ja2VyLCBzbyB3ZSBtdXN0IHVubG9j
aygpIGJlZm9yZSBldmVyeSByZXR1cm4uCi0gICAgaWYgKG1fcHJvY2Vzc0xvY2sudHJ5TG9jaygp
KSB7ICAgICAgICAKLSAgICAgICAgLy8gRm9yIGVhY2ggY2hhbm5lbCBvZiBvdXIgaW5wdXQsIHBy
b2Nlc3MgdXNpbmcgdGhlIGNvcnJlc3BvbmRpbmcgV2F2ZVNoYXBlckRTUEtlcm5lbCBpbnRvIHRo
ZSBvdXRwdXQgY2hhbm5lbC4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fa2Vy
bmVscy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG1fa2VybmVsc1tpXS0+cHJvY2Vzcyhzb3Vy
Y2UtPmNoYW5uZWwoaSktPmRhdGEoKSwgZGVzdGluYXRpb24tPmNoYW5uZWwoaSktPm11dGFibGVE
YXRhKCksIGZyYW1lc1RvUHJvY2Vzcyk7Ci0KLSAgICAgICAgbV9wcm9jZXNzTG9jay51bmxvY2so
KTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBUb28gYmFkIC0gdGhlIHRyeUxvY2soKSBmYWls
ZWQuIFdlIG11c3QgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIHNldEN1cnZlKCkgY2FsbC4KLSAgICAg
ICAgZGVzdGluYXRpb24tPnplcm8oKTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5oCShyZXZpc2lvbiAxMTEyMzMpCisrKyBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2F2ZVNoYXBlclByb2Nl
c3Nvcl9oCi0jZGVmaW5lIFdhdmVTaGFwZXJQcm9jZXNzb3JfaAotCi0jaW5jbHVkZSAiQXVkaW9E
U1BLZXJuZWwuaCIKLSNpbmNsdWRlICJBdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5oIgotI2luY2x1
ZGUgIkF1ZGlvTm9kZS5oIgotI2luY2x1ZGUgPHd0Zi9GbG9hdDMyQXJyYXkuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLS8vIFdhdmVTaGFwZXJQcm9jZXNzb3IgaXMgYW4gQXVkaW9EU1BLZXJuZWxQ
cm9jZXNzb3Igd2hpY2ggdXNlcyBXYXZlU2hhcGVyRFNQS2VybmVsIG9iamVjdHMgdG8gaW1wbGVt
ZW50IG5vbi1saW5lYXIgZGlzdG9ydGlvbiBlZmZlY3RzLgotCi1jbGFzcyBXYXZlU2hhcGVyUHJv
Y2Vzc29yIDogcHVibGljIEF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yIHsKLXB1YmxpYzoKLSAgICBX
YXZlU2hhcGVyUHJvY2Vzc29yKGZsb2F0IHNhbXBsZVJhdGUsIHNpemVfdCBudW1iZXJPZkNoYW5u
ZWxzKTsKLQotICAgIHZpcnR1YWwgfldhdmVTaGFwZXJQcm9jZXNzb3IoKTsKLQotICAgIHZpcnR1
YWwgUGFzc093blB0cjxBdWRpb0RTUEtlcm5lbD4gY3JlYXRlS2VybmVsKCk7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgcHJvY2Vzcyhjb25zdCBBdWRpb0J1cyogc291cmNlLCBBdWRpb0J1cyogZGVzdGlu
YXRpb24sIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwotCi0gICAgdm9pZCBzZXRDdXJ2ZShGbG9h
dDMyQXJyYXkqKTsKLSAgICBGbG9hdDMyQXJyYXkqIGN1cnZlKCkgeyByZXR1cm4gbV9jdXJ2ZS5n
ZXQoKTsgfQotCi1wcml2YXRlOgotICAgIC8vIG1fY3VydmUgcmVwcmVzZW50cyB0aGUgbm9uLWxp
bmVhciBzaGFwaW5nIGN1cnZlLgotICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IG1fY3VydmU7Ci0K
LSAgICAvLyBUaGlzIHN5bmNocm9uaXplcyBwcm9jZXNzKCkgd2l0aCBzZXRDdXJ2ZSgpLgotICAg
IG11dGFibGUgTXV0ZXggbV9wcm9jZXNzTG9jazsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIFdhdmVTaGFwZXJQcm9jZXNzb3JfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132891</attachid>
            <date>2012-03-20 14:03:18 -0700</date>
            <delta_ts>2012-03-20 17:31:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81541-20120320170305.patch</filename>
            <type>text/plain</type>
            <size>969756</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTQzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzMSBAQAorMjAxMi0wMy0yMCAgTWFyayBQ
aWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgTW92ZSB3ZWJhdWRpbyB0
byBNb2R1bGVzL3dlYmF1ZGlvLworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODE1NDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBObyBuZXcgdGVzdHMsIGFsbCBleGlzdGluZyB0ZXN0cyBwYXNzLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAg
ICAgICAgKiBEZXJpdmVkU291cmNlcy5wcmk6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06Cisg
ICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlv
OiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIu
Y3BwLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaC4KKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUu
Y3BwLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nv
ck5vZGUuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwLgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvQnVmZmVyLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9CdWZmZXIuaWRsLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxs
YmFjay5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlckNh
bGxiYWNrLmguCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlckNhbGxiYWNr
LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxs
YmFjay5pZGwuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5v
ZGUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNv
dXJjZU5vZGUuY3BwLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3Vy
Y2VOb2RlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVy
U291cmNlTm9kZS5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3Vy
Y2VOb2RlLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZm
ZXJTb3VyY2VOb2RlLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5l
bE1lcmdlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hh
bm5lbE1lcmdlci5jcHAuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxN
ZXJnZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVs
TWVyZ2VyLmguCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIu
aWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJn
ZXIuaWRsLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIu
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxp
dHRlci5jcHAuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRl
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxp
dHRlci5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIu
aWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxp
dHRlci5pZGwuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwLgorICAg
ICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0Lmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oLgorICAgICAgICAqIE1vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9Db250ZXh0LmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVz
dGluYXRpb25Ob2RlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9EZXN0aW5hdGlvbk5vZGUuY3BwLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9E
ZXN0aW5hdGlvbk5vZGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9EZXN0aW5hdGlvbk5vZGUuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVz
dGluYXRpb25Ob2RlLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9EZXN0aW5hdGlvbk5vZGUuaWRsLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9H
YWluLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvR2Fpbi5oLgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9HYWluLmlkbDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9HYWluLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9BdWRpb0dhaW5Ob2RlLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
R2Fpbk5vZGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9HYWlu
Tm9kZS5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5pZGw6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaWRsLgorICAg
ICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5jcHA6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuY3BwLgorICAgICAgICAqIE1vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmguCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0xpc3RlbmVyLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9M
aXN0ZW5lci5pZGwuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGUuY3BwLgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVk
aW9Ob2RlLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2Rl
LmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuY3BwLgorICAg
ICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuaC4KKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5jcHAuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRp
by9BdWRpb05vZGVPdXRwdXQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9Ob2RlT3V0cHV0LmguCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Bhbm5l
ck5vZGUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5l
ck5vZGUuY3BwLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oLgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbC4KKyAgICAgICAg
KiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9BdWRpb1BhcmFtLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvUGFyYW0uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Q
YXJhbS5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5pZGw6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uaWRsLgorICAgICAgICAq
IE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcC4KKyAgICAgICAgKiBN
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuaC4KKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuY3BwLgorICAgICAgICAqIE1vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaC4KKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaWRsLgorICAgICAgICAqIE1vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8v
QXVkaW9Tb3VyY2VOb2RlLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9Tb3VyY2VOb2RlLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0JpcXVhZERT
UEtlcm5lbC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERT
UEtlcm5lbC5jcHAuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmgu
CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmNwcDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5jcHAuCisgICAg
ICAgICogTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaC4KKyAgICAgICAgKiBNb2R1
bGVzL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3dl
YmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5jcHAuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9C
aXF1YWRQcm9jZXNzb3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlx
dWFkUHJvY2Vzc29yLmguCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9Db252b2x2ZXJOb2Rl
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5j
cHAuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaC4KKyAgICAgICAgKiBN
b2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1
ZGlvL0RPTVdpbmRvd1dlYkF1ZGlvLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vRE9NV2luZG93V2ViQXVkaW8uaWRsLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8v
RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcC4KKyAgICAgICAgKiBN
b2R1bGVzL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaC4K
KyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0RlbGF5RFNQS2VybmVsLmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuY3BwLgorICAgICAgICAq
IE1vZHVsZXMvd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1
ZGlvL0RlbGF5Tm9kZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0Rl
bGF5Tm9kZS5jcHAuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9EZWxheU5vZGUuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlOb2RlLmguCisgICAgICAgICog
TW9kdWxlcy93ZWJhdWRpby9EZWxheU5vZGUuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9EZWxheU5vZGUuaWRsLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vRGVs
YXlQcm9jZXNzb3IuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxh
eVByb2Nlc3Nvci5jcHAuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9EZWxheVByb2Nlc3Nv
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheVByb2Nlc3Nvci5o
LgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5v
ZGUuY3BwLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9k
ZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNz
b3JOb2RlLmguCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JO
b2RlLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21w
cmVzc29yTm9kZS5pZGwuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9IaWdoUGFzczJGaWx0
ZXJOb2RlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSGlnaFBhc3My
RmlsdGVyTm9kZS5jcHAuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9IaWdoUGFzczJGaWx0
ZXJOb2RlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0hpZ2hQYXNzMkZp
bHRlck5vZGUuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5v
ZGUuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9IaWdoUGFzczJGaWx0
ZXJOb2RlLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05v
ZGUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVk
aW9Ob2RlLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05v
ZGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlv
Tm9kZS5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5p
ZGw6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05v
ZGUuaWRsLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2Rl
LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuaC4K
KyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5pZGw6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5pZGwuCisg
ICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1Nv
dXJjZU5vZGUuY3BwLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVk
aW9Tb3VyY2VOb2RlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZS5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vTWVk
aWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmlkbC4KKyAgICAgICAgKiBNb2R1
bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5jcHA6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5jcHAu
CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxl
dGlvbkV2ZW50LmguCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21w
bGV0aW9uRXZlbnQuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZs
aW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaWRsLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8v
T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcC4KKyAgICAgICAgKiBN
b2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaC4K
KyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIuY3BwOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyLmNwcC4KKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5oLgorICAgICAgICAqIE1vZHVs
ZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5jcHAuCisgICAgICAgICogTW9k
dWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5oLgorICAgICAgICAqIE1vZHVs
ZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5pZGwuCisgICAgICAgICogTW9k
dWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmNwcDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlckRTUEtlcm5lbC5jcHAuCisgICAgICAgICogTW9k
dWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJEU1BLZXJuZWwuaC4KKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuY3BwLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8v
V2F2ZVNoYXBlck5vZGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2
ZVNoYXBlck5vZGUuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2Rl
LmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUu
aWRsLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3Iu
Y3BwLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmgu
CisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIFdlYkNvcmUucHJpOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogd2ViYXVkaW8vQXVkaW9CdWZmZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRp
by9BdWRpb0J1ZmZlci5pZGw6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9CdWZm
ZXJDYWxsYmFjay5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQnVmZmVyQ2Fs
bGJhY2suaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNl
Tm9kZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VO
b2RlLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2Rl
LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5oOiBSZW1v
dmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5pZGw6IFJlbW92ZWQu
CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmg6IFJlbW92ZWQuCisgICAg
ICAgICogd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuaWRsOiBSZW1vdmVkLgorICAgICAg
ICAqIHdlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVk
aW8vQXVkaW9Db250ZXh0Lmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Db250
ZXh0LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9k
ZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGw6
IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9HYWluLmg6IFJlbW92ZWQuCisgICAg
ICAgICogd2ViYXVkaW8vQXVkaW9HYWluLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRp
by9BdWRpb0dhaW5Ob2RlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0dh
aW5Ob2RlLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5pZGw6
IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5oOiBSZW1vdmVkLgorICAgICAgICAq
IHdlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlv
L0F1ZGlvTm9kZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Ob2RlLmg6
IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Ob2RlLmlkbDogUmVtb3ZlZC4KKyAg
ICAgICAgKiB3ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
d2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9B
dWRpb05vZGVPdXRwdXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvTm9k
ZU91dHB1dC5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmg6IFJlbW92
ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbDogUmVtb3ZlZC4KKyAg
ICAgICAgKiB3ZWJhdWRpby9BdWRpb1BhcmFtLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJh
dWRpby9BdWRpb1BhcmFtLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9QYXJh
bS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5pZGw6IFJlbW92ZWQuCisg
ICAgICAgICogd2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmg6IFJlbW92ZWQuCisgICAgICAgICog
d2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRp
by9CaXF1YWREU1BLZXJuZWwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0JpcXVh
ZERTUEtlcm5lbC5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0JpcXVhZEZpbHRlck5v
ZGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmlkbDogUmVtb3Zl
ZC4KKyAgICAgICAgKiB3ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHdlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5oOiBSZW1vdmVkLgorICAgICAgICAqIHdl
YmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0Nv
bnZvbHZlck5vZGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9Db252b2x2ZXJOb2Rl
LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9ET01XaW5kb3dXZWJBdWRpby5pZGw6
IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2Rl
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlv
bk5vZGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9EZWxheURTUEtlcm5lbC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiB3ZWJhdWRpby9EZWxheU5vZGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdl
YmF1ZGlvL0RlbGF5Tm9kZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0RlbGF5Tm9k
ZS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL0RlbGF5UHJvY2Vzc29yLmg6IFJlbW92ZWQuCisg
ICAgICAgICogd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHdlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaWRsOiBSZW1vdmVkLgorICAg
ICAgICAqIHdlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHdlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3
ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJh
dWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRp
by9KYXZhU2NyaXB0QXVkaW9Ob2RlLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vSmF2
YVNjcmlwdEF1ZGlvTm9kZS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vTG93UGFz
czJGaWx0ZXJOb2RlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9Mb3dQYXNzMkZp
bHRlck5vZGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5v
ZGUuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291
cmNlTm9kZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVk
aW9Tb3VyY2VOb2RlLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vTWVkaWFFbGVtZW50
QXVkaW9Tb3VyY2VOb2RlLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9PZmZsaW5l
QXVkaW9Db21wbGV0aW9uRXZlbnQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL09m
ZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlv
L09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5pZGw6IFJlbW92ZWQuCisgICAgICAgICogd2Vi
YXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiB3ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiB3ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3
ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8v
UmVhbHRpbWVBbmFseXNlck5vZGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL1Jl
YWx0aW1lQW5hbHlzZXJOb2RlLmg6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vUmVhbHRp
bWVBbmFseXNlck5vZGUuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL1dhdmVTaGFw
ZXJEU1BLZXJuZWwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdlYmF1ZGlvL1dhdmVTaGFwZXJE
U1BLZXJuZWwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiB3ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5pZGw6IFJlbW92ZWQuCisgICAg
ICAgICogd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5oOiBSZW1vdmVkLgorCiAyMDEyLTAzLTIw
ICBKYWNreSBKaWFuZyAgPHpoYWppYW5nQHJpbS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVycnld
IERpaml0IGNyYXNoIFdlYkNvcmU6OkNvb2tpZU1hbmFnZXI6OmdldFJhd0Nvb2tpZXMKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAgU0VUKFdlYkNvcmVf
SU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL2ZpbGVzeXN0
ZW0iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvZ2VvbG9jYXRpb24iCiAgICAgIiR7V0VC
Q09SRV9ESVJ9L01vZHVsZXMvaW5kZXhlZGRiIgorICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVz
L3dlYmF1ZGlvIgogICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL3dlYmRhdGFiYXNlIgogICAg
ICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL3dlYnNvY2tldHMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9
L2FjY2Vzc2liaWxpdHkiCkBAIC02NCw3ICs2NSw2IEBAIFNFVChXZWJDb3JlX0lOQ0xVREVfRElS
RUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vc3ZnL2dyYXBoaWNzIgogICAgICIke1dFQkNP
UkVfRElSfS9zdmcvZ3JhcGhpY3MvZmlsdGVycyIKICAgICAiJHtXRUJDT1JFX0RJUn0vc3ZnL3By
b3BlcnRpZXMiCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3dlYmF1ZGlvIgogICAgICIke1dFQkNPUkVf
RElSfS93ZWJzb2NrZXRzIgogICAgICIke1dFQkNPUkVfRElSfS93b3JrZXJzIgogICAgICIke1dF
QkNPUkVfRElSfS94bWwiCkBAIC05Niw2ICs5Niw3IEBAIFNFVChXZWJDb3JlX0lETF9JTkNMVURF
UwogICAgIE1vZHVsZXMvZmlsZXN5c3RlbQogICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24KICAgICBN
b2R1bGVzL2luZGV4ZWRkYgorICAgIE1vZHVsZXMvd2ViYXVkaW8KICAgICBNb2R1bGVzL3dlYmRh
dGFiYXNlCiAgICAgTW9kdWxlcy93ZWJzb2NrZXRzCiAgICAgYmluZGluZ3MvZ2VuZXJpYwpAQCAt
MTEwLDcgKzExMSw2IEBAIFNFVChXZWJDb3JlX0lETF9JTkNMVURFUwogICAgIHBsdWdpbnMKICAg
ICBzdG9yYWdlCiAgICAgc3ZnCi0gICAgd2ViYXVkaW8KICAgICB3b3JrZXJzCiAgICAgeG1sCiAp
CkBAIC0zNzYsMjcgKzM3NiwyNyBAQCBTRVQoV2ViQ29yZV9JRExfRklMRVMKICAgICBzdG9yYWdl
L1N0b3JhZ2VJbmZvUXVvdGFDYWxsYmFjay5pZGwKICAgICBzdG9yYWdlL1N0b3JhZ2VJbmZvVXNh
Z2VDYWxsYmFjay5pZGwKIAotICAgIHdlYmF1ZGlvL0F1ZGlvQnVmZmVyLmlkbAotICAgIHdlYmF1
ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5pZGwKLSAgICB3ZWJhdWRpby9BdWRpb0NoYW5uZWxT
cGxpdHRlci5pZGwKLSAgICB3ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuaWRsCi0gICAgd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmlkbAotICAgIHdlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2Rl
LmlkbAotICAgIHdlYmF1ZGlvL0F1ZGlvR2Fpbi5pZGwKLSAgICB3ZWJhdWRpby9BdWRpb0dhaW5O
b2RlLmlkbAotICAgIHdlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaWRsCi0gICAgd2ViYXVkaW8vQXVk
aW9Ob2RlLmlkbAotICAgIHdlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwKLSAgICB3ZWJhdWRp
by9BdWRpb1BhcmFtLmlkbAotICAgIHdlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmlkbAot
ICAgIHdlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5pZGwKLSAgICB3ZWJhdWRpby9Db252b2x2ZXJO
b2RlLmlkbAotICAgIHdlYmF1ZGlvL0RPTVdpbmRvd1dlYkF1ZGlvLmlkbAotICAgIHdlYmF1ZGlv
L0RlbGF5Tm9kZS5pZGwKLSAgICB3ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmlkbAotICAg
IHdlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaWRsCi0gICAgd2ViYXVkaW8vTG93UGFzczJG
aWx0ZXJOb2RlLmlkbAotICAgIHdlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmlkbAorICAg
IE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaWRsCisgICAgTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0J1ZmZlclNvdXJjZU5vZGUuaWRsCisgICAgTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5u
ZWxTcGxpdHRlci5pZGwKKyAgICBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5p
ZGwKKyAgICBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwKKyAgICBNb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmlkbAorICAgIE1vZHVsZXMvd2ViYXVkaW8vQXVk
aW9HYWluLmlkbAorICAgIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5pZGwKKyAgICBN
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaWRsCisgICAgTW9kdWxlcy93ZWJhdWRpby9B
dWRpb05vZGUuaWRsCisgICAgTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaWRsCisg
ICAgTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmlkbAorICAgIE1vZHVsZXMvd2ViYXVkaW8v
QXVkaW9Qcm9jZXNzaW5nRXZlbnQuaWRsCisgICAgTW9kdWxlcy93ZWJhdWRpby9BdWRpb1NvdXJj
ZU5vZGUuaWRsCisgICAgTW9kdWxlcy93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmlkbAorICAgIE1v
ZHVsZXMvd2ViYXVkaW8vRE9NV2luZG93V2ViQXVkaW8uaWRsCisgICAgTW9kdWxlcy93ZWJhdWRp
by9EZWxheU5vZGUuaWRsCisgICAgTW9kdWxlcy93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2Rl
LmlkbAorICAgIE1vZHVsZXMvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5pZGwKKyAgICBN
b2R1bGVzL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5pZGwKKyAgICBNb2R1bGVzL3dlYmF1
ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmlkbAogCiAgICAgeG1sL0RPTVBhcnNlci5pZGwKICAg
ICB4bWwvWE1MSHR0cFJlcXVlc3QuaWRsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291
cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UJKHJldmlzaW9uIDExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAgVlBBVEggPSBcCiAgICAgJChXZWJD
b3JlKS9Nb2R1bGVzL2ZpbGVzeXN0ZW0gXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy9nZW9sb2Nh
dGlvbiBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYiBcCisgICAgJChXZWJDb3Jl
KS9Nb2R1bGVzL3dlYmF1ZGlvIFwKICAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViZGF0YWJhc2Ug
XAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJzb2NrZXRzIFwKICAgICAkKFdlYkNvcmUpL2Jp
bmRpbmdzL2dlbmVyaWMgXApAQCAtNTAsNyArNTEsNiBAQCBWUEFUSCA9IFwKICAgICAkKFdlYkNv
cmUpL3BsdWdpbnMgXAogICAgICQoV2ViQ29yZSkvc3RvcmFnZSBcCiAgICAgJChXZWJDb3JlKS94
bWwgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8gXAogICAgICQoV2ViQ29yZSkvd29ya2VycyBc
CiAgICAgJChXZWJDb3JlKS9zdmcgXAogICAgICQoV2ViQ29yZSkvdGVzdGluZyBcCkBAIC0xMDQs
NiArMTA0LDMzIEBAIEJJTkRJTkdfSURMUyA9IFwKICAgICAkKFdlYkNvcmUpL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwgXAogICAgICQoV2ViQ29yZSkvTW9kdWxl
cy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsIFwKICAgICAkKFdlYkNvcmUp
L01vZHVsZXMvaW5kZXhlZGRiL1dvcmtlckNvbnRleHRJbmRleGVkRGF0YWJhc2UuaWRsIFwKKyAg
ICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaWRsIFwKKyAgICAkKFdl
YkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFjay5pZGwgXAorICAgICQo
V2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaWRsIFwKKyAg
ICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmlkbCBcCisg
ICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmlkbCBc
CisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwgXAorICAg
ICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGwgXAor
ICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0dhaW4uaWRsIFwKKyAgICAkKFdl
YkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5pZGwgXAorICAgICQoV2ViQ29y
ZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmlkbCBcCisgICAgJChXZWJDb3JlKS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9QYXJhbS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb1Byb2Nlc3NpbmdFdmVudC5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb1NvdXJjZU5vZGUuaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8v
QmlxdWFkRmlsdGVyTm9kZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9D
b252b2x2ZXJOb2RlLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0RPTVdp
bmRvd1dlYkF1ZGlvLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5
Tm9kZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9EeW5hbWljc0NvbXBy
ZXNzb3JOb2RlLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0hpZ2hQYXNz
MkZpbHRlck5vZGUuaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vSmF2YVNj
cmlwdEF1ZGlvTm9kZS5pZGwgXAorICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9Mb3dQ
YXNzMkZpbHRlck5vZGUuaWRsIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vTWVk
aWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmlkbCBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dl
YmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5pZGwgXAorICAgICQoV2ViQ29yZSkv
TW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5pZGwgXAorICAgICQoV2ViQ29y
ZSkvTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5pZGwgXAogICAgICQoV2ViQ29yZSkv
TW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5pZGwgXAogICAgICQoV2Vi
Q29yZSkvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5pZGwgXAogICAgICQoV2ViQ29yZSkv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNhbGxiYWNrLmlkbCBcCkBAIC01NDUsMzMgKzU3
Miw2IEBAIEJJTkRJTkdfSURMUyA9IFwKICAgICAkKFdlYkNvcmUpL3N2Zy9TVkdab29tRXZlbnQu
aWRsIFwKICAgICAkKFdlYkNvcmUpL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCBcCiAgICAgJChXZWJD
b3JlKS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3dlYmF1
ZGlvL0F1ZGlvQnVmZmVyLmlkbCBcCi0gICAgJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb0J1ZmZl
ckNhbGxiYWNrLmlkbCBcCi0gICAgJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJj
ZU5vZGUuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5p
ZGwgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuaWRsIFwK
LSAgICAkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwgXAotICAgICQoV2ViQ29y
ZSkvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3dl
YmF1ZGlvL0F1ZGlvR2Fpbi5pZGwgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9HYWlu
Tm9kZS5pZGwgXAotICAgICQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5pZGwgXAot
ICAgICQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9Ob2RlLmlkbCBcCi0gICAgJChXZWJDb3JlKS93
ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1
ZGlvUGFyYW0uaWRsIFwKLSAgICAkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2
ZW50LmlkbCBcCi0gICAgJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaWRsIFwK
LSAgICAkKFdlYkNvcmUpL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaWRsIFwKLSAgICAkKFdl
YkNvcmUpL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3dlYmF1
ZGlvL0RPTVdpbmRvd1dlYkF1ZGlvLmlkbCBcCi0gICAgJChXZWJDb3JlKS93ZWJhdWRpby9EZWxh
eU5vZGUuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5v
ZGUuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuaWRs
IFwKLSAgICAkKFdlYkNvcmUpL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaWRsIFwKLSAg
ICAkKFdlYkNvcmUpL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5pZGwgXAotICAgICQoV2Vi
Q29yZSkvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmlkbCBcCi0gICAgJChX
ZWJDb3JlKS93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaWRsIFwKLSAgICAk
KFdlYkNvcmUpL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmlkbCBcCi0gICAgJChXZWJD
b3JlKS93ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5pZGwgXAogICAgICQoV2ViQ29yZSkvd29ya2Vy
cy9BYnN0cmFjdFdvcmtlci5pZGwgXAogICAgICQoV2ViQ29yZSkvd29ya2Vycy9EZWRpY2F0ZWRX
b3JrZXJDb250ZXh0LmlkbCBcCiAgICAgJChXZWJDb3JlKS93b3JrZXJzL1NoYXJlZFdvcmtlci5p
ZGwgXApJbmRleDogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaQkocmV2aXNpb24gMTExNDMzKQor
KysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjksNiArMTI5LDI3IEBAIElETF9CSU5ESU5HUyArPSBcCiAgICAgJCRQV0QvTW9kdWxlcy9pbmRl
eGVkZGIvSURCUmVxdWVzdC5pZGwgXAogICAgICQkUFdEL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uLmlkbCBcCiAgICAgJCRQV0QvTW9kdWxlcy9pbmRleGVkZGIvV29ya2VyQ29udGV4
dEluZGV4ZWREYXRhYmFzZS5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9C
dWZmZXIuaWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNl
Tm9kZS5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2Vy
LmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5p
ZGwgXAorICAgICQkUFdEL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbCBcCisgICAg
JCRQV0QvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGwgXAorICAgICQk
UFdEL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9HYWluLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0xpc3RlbmVyLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUu
aWRsIFwKKyAgICAkJFBXRC9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwgXAor
ICAgICQkUFdEL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5pZGwgXAorICAgICQkUFdEL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaWRsIFwKKyAgICAkJFBXRC9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvd2Vi
YXVkaW8vQ29udm9sdmVyTm9kZS5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvd2ViYXVkaW8vRGVs
YXlOb2RlLmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy93ZWJhdWRpby9ET01XaW5kb3dXZWJBdWRp
by5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5p
ZGwgXAorICAgICQkUFdEL01vZHVsZXMvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5pZGwg
XAorICAgICQkUFdEL01vZHVsZXMvd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmlkbCBcCisg
ICAgJCRQV0QvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5pZGwgXAogICAg
ICQkUFdEL01vZHVsZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93U1FMRGF0YWJhc2UuaWRsIFwKICAg
ICAkJFBXRC9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmlkbCBcCiAgICAgJCRQV0QvTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNhbGxiYWNrLmlkbCBcCkBAIC00MTEsMjcgKzQzMiw2
IEBAIElETF9CSU5ESU5HUyArPSBcCiAgICAgJCRQV0Qvc3RvcmFnZS9TdG9yYWdlSW5mb1VzYWdl
Q2FsbGJhY2suaWRsIFwKICAgICAkJFBXRC90ZXN0aW5nL0ludGVybmFscy5pZGwgXAogICAgICQk
UFdEL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5pZGwgXAotICAgICQkUFdEL3dlYmF1ZGlvL0F1
ZGlvQnVmZmVyLmlkbCBcCi0gICAgJCRQV0Qvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2Rl
LmlkbCBcCi0gICAgJCRQV0Qvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmlkbCBcCi0gICAg
JCRQV0Qvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuaWRsIFwKLSAgICAkJFBXRC93ZWJh
dWRpby9BdWRpb0NvbnRleHQuaWRsIFwKLSAgICAkJFBXRC93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0
aW9uTm9kZS5pZGwgXAotICAgICQkUFdEL3dlYmF1ZGlvL0F1ZGlvR2Fpbi5pZGwgXAotICAgICQk
UFdEL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaWRsIFwKLSAgICAkJFBXRC93ZWJhdWRpby9BdWRp
b0xpc3RlbmVyLmlkbCBcCi0gICAgJCRQV0Qvd2ViYXVkaW8vQXVkaW9Ob2RlLmlkbCBcCi0gICAg
JCRQV0Qvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbCBcCi0gICAgJCRQV0Qvd2ViYXVkaW8v
QXVkaW9QYXJhbS5pZGwgXAotICAgICQkUFdEL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50
LmlkbCBcCi0gICAgJCRQV0Qvd2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmlkbCBcCi0gICAgJCRQ
V0Qvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5pZGwgXAotICAgICQkUFdEL3dlYmF1ZGlvL0RlbGF5
Tm9kZS5pZGwgXAotICAgICQkUFdEL3dlYmF1ZGlvL0RPTVdpbmRvd1dlYkF1ZGlvLmlkbCBcCi0g
ICAgJCRQV0Qvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5pZGwgXAotICAgICQkUFdEL3dl
YmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaWRsIFwKLSAgICAkJFBXRC93ZWJhdWRpby9Mb3dQ
YXNzMkZpbHRlck5vZGUuaWRsIFwKLSAgICAkJFBXRC93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2Vy
Tm9kZS5pZGwgXAogICAgICQkUFdEL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuaWRsIFwKICAgICAk
JFBXRC93b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQuaWRsIFwKICAgICAkJFBXRC93b3Jr
ZXJzL1NoYXJlZFdvcmtlci5pZGwgXApAQCAtNjk5LDYgKzY5OSw3IEBAIGdlbmVyYXRlQmluZGlu
Z3MuY29tbWFuZHMgPSBwZXJsIC1JJCRQV0QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt
LWluY2x1ZGUgJCRQV0QvTW9kdWxlcy9maWxlc3lzdGVtIFwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAtLWluY2x1ZGUgJCRQV0QvTW9kdWxlcy9nZW9sb2NhdGlvbiBcCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLS1pbmNsdWRlICQkUFdEL01vZHVsZXMvaW5kZXhlZGRiIFwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtLWluY2x1ZGUgJCRQV0QvTW9kdWxlcy93ZWJhdWRp
byBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1pbmNsdWRlICQkUFdEL01vZHVsZXMv
d2ViZGF0YWJhc2UgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAkJFBX
RC9Nb2R1bGVzL3dlYnNvY2tldHMgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5j
bHVkZSAkJFBXRC9kb20gXApAQCAtNzA5LDcgKzcxMCw2IEBAIGdlbmVyYXRlQmluZGluZ3MuY29t
bWFuZHMgPSBwZXJsIC1JJCRQV0QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWluY2x1
ZGUgJCRQV0Qvc3RvcmFnZSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1pbmNsdWRl
ICQkUFdEL2NzcyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1pbmNsdWRlICQkUFdE
L3Rlc3RpbmcgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAkJFBXRC93
ZWJhdWRpbyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1pbmNsdWRlICQkUFdEL3dv
cmtlcnMgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tb3V0cHV0RGlyICR7UU1BS0Vf
RlVOQ19GSUxFX09VVF9QQVRIfSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1zdXBw
bGVtZW50YWxEZXBlbmRlbmN5RmlsZSAke1FNQUtFX0ZVTkNfRklMRV9PVVRfUEFUSH0vJCRTVVBQ
TEVNRU5UQUxfREVQRU5ERU5DWV9GSUxFIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBj
b3B5KQpAQCAtMTUsNiArMTUsNyBAQCB3ZWJjb3JlX2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGly
KS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uIFwKIAktSSQoc3JjZGlyKS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYiBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbSBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpbyBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRz
IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5IFwKQEAgLTg3LDcg
Kzg4LDYgQEAgd2ViY29yZV9jcHBmbGFncyArPSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNv
cmUvc3ZnL3Byb3BlcnRpZXMgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcg
XAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMgXAotCS1JJChzcmNkaXIp
L1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS93
ZWJzb2NrZXRzIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzIFwKIAktSSQo
c3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS94bWwgXApAQCAtNzgzLDYgKzc4Myw3IEBAIElETF9QQVRI
IDo9IFwKICAgICAkKFdlYkNvcmUpL01vZHVsZXMvZ2VvbG9jYXRpb24gXAogICAgICQoV2ViQ29y
ZSkvTW9kdWxlcy9pbmRleGVkZGIgXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy9tZWRpYXN0cmVh
bSBcCisgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvIFwKICAgICAkKFdlYkNvcmUpL01v
ZHVsZXMvd2ViZGF0YWJhc2UgXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJzb2NrZXRzIFwK
ICAgICAkKFdlYkNvcmUpL2JpbmRpbmdzL2pzIFwKQEAgLTgwMiw3ICs4MDMsNiBAQCBJRExfUEFU
SCA6PSBcCiAgICAgJChXZWJDb3JlKS9zdG9yYWdlIFwKICAgICAkKFdlYkNvcmUpL3N2ZyBcCiAg
ICAgJChXZWJDb3JlKS90ZXN0aW5nIFwKLSAgICAkKFdlYkNvcmUpL3dlYmF1ZGlvIFwKICAgICAk
KFdlYkNvcmUpL3dlYnNvY2tldHMgXAogICAgICQoV2ViQ29yZSkvd29ya2VycyBcCiAgICAgJChX
ZWJDb3JlKS94bWwKQEAgLTk0NSw2ICs5NDUsNyBAQCBFWFRSQV9ESVNUICs9IFwKIAkkKHNoZWxs
IGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uLyouaWRsKSBc
CiAJJChzaGVsbCBscyAkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
Ki5pZGwpIFwKIAkkKHNoZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtLyouaWRsKSBcCisJJChzaGVsbCBscyAkKHNyY2RpcikvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby8qLmlkbCkgXAogCSQoc2hlbGwgbHMgJChzcmNkaXIpL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvKi5pZGwpIFwKIAkkKHNoZWxsIGxzICQoc3JjZGly
KS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvKi5pZGwpIFwKIAkkKHNoZWxsIGxz
ICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9jc3MvKi5pZGwpIFwKQEAgLTk2Miw3ICs5NjMsNiBA
QCBFWFRSQV9ESVNUICs9IFwKIAkkKHNoZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlLyouaWRsKSBcCiAJJChzaGVsbCBscyAkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvc3Zn
LyouaWRsKSBcCiAJJChzaGVsbCBscyAkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvdGVzdGluZy8q
LmlkbCkgXAotCSQoc2hlbGwgbHMgJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvLyou
aWRsKSBcCiAJJChzaGVsbCBscyAkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvd29ya2Vycy8qLmlk
bCkgXAogCSQoc2hlbGwgbHMgJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3htbC8qLmlkbCkgXAog
CVNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmwgXApJbmRleDog
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC02NzcsNiArNjc3
LDExIEBAIGRvbV9iaW5kaW5nX2lkbHMgKz0gXAogCSQoV2ViQ29yZSkvTW9kdWxlcy9tZWRpYXN0
cmVhbS9OYXZpZ2F0b3JVc2VyTWVkaWFTdWNjZXNzQ2FsbGJhY2suaWRsIFwKIAkkKFdlYkNvcmUp
L01vZHVsZXMvbWVkaWFzdHJlYW0vU2Vzc2lvbkRlc2NyaXB0aW9uLmlkbCBcCiAJJChXZWJDb3Jl
KS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NpZ25hbGluZ0NhbGxiYWNrLmlkbCBcCisJJChXZWJDb3Jl
KS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvd2Vi
YXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93
ZWJhdWRpby9ET01XaW5kb3dXZWJBdWRpby5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJh
dWRpby9XYXZlU2hhcGVyTm9kZS5pZGwgXAogCSQoV2ViQ29yZSkvY3NzL0NTU0NoYXJzZXRSdWxl
LmlkbCBcCiAJJChXZWJDb3JlKS9jc3MvQ1NTRm9udEZhY2VSdWxlLmlkbCBcCiAJJChXZWJDb3Jl
KS9jc3MvQ1NTSW1wb3J0UnVsZS5pZGwgXApAQCAtOTM2LDExICs5NDEsNiBAQCBkb21fYmluZGlu
Z19pZGxzICs9IFwKIAkkKFdlYkNvcmUpL3N0b3JhZ2UvU3RvcmFnZUV2ZW50LmlkbCBcCiAJJChX
ZWJDb3JlKS90ZXN0aW5nL0ludGVybmFscy5pZGwgXAogCSQoV2ViQ29yZSkvdGVzdGluZy9JbnRl
cm5hbFNldHRpbmdzLmlkbCBcCi0JJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRs
IFwKLQkkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwgXAotCSQoV2ViQ29y
ZSkvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5pZGwgXAotCSQoV2ViQ29yZSkvd2Vi
YXVkaW8vRE9NV2luZG93V2ViQXVkaW8uaWRsIFwKLQkkKFdlYkNvcmUpL3dlYmF1ZGlvL1dhdmVT
aGFwZXJOb2RlLmlkbCBcCiAJJChXZWJDb3JlKS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmlkbCBc
CiAJJChXZWJDb3JlKS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQuaWRsIFwKIAkkKFdl
YkNvcmUpL3dvcmtlcnMvU2hhcmVkV29ya2VyLmlkbCBcCkBAIC01MzgxLDg4ICs1MzgxLDg4IEBA
IGVuZGlmICMgRU5EIEVOQUJMRV9TVkcKIAogaWYgRU5BQkxFX1dFQl9BVURJTwogd2ViY29yZV9z
b3VyY2VzICs9IFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FzeW5jQXVkaW9E
ZWNvZGVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlv
RGVjb2Rlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQ
cm9jZXNzb3JOb2RlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0Jhc2ljUHJvY2Vzc29yTm9kZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvQnVmZmVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0J1ZmZlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVy
Q2FsbGJhY2suaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZl
clNvdXJjZU5vZGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
QnVmZmVyU291cmNlTm9kZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQ2hhbm5lbE1lcmdlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9DaGFubmVsTWVyZ2VyLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9DaGFubmVsU3BsaXR0ZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb0NvbnRleHQuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0Rlc3RpbmF0aW9uTm9kZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9EZXN0aW5hdGlvbk5vZGUuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb0dhaW4uaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0dh
aW5Ob2RlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0dhaW5O
b2RlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5j
cHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmggXAorCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvUGFyYW0uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvUGFyYW0uaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFt
VGltZWxpbmUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFy
YW1UaW1lbGluZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUHJv
Y2Vzc2luZ0V2ZW50LmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b1Byb2Nlc3NpbmdFdmVudC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvU291cmNlTm9kZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0JpcXVh
ZERTUEtlcm5lbC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmlxdWFk
RFNQS2VybmVsLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkRmls
dGVyTm9kZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkRmls
dGVyTm9kZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0JpcXVhZFByb2Nl
c3Nvci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkUHJvY2Vz
c29yLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5j
cHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9u
Tm9kZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rl
c3RpbmF0aW9uTm9kZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVs
YXlEU1BLZXJuZWwuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5
RFNQS2VybmVsLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVsYXlOb2Rl
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWxheU5vZGUuaCBcCisJ
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWxheVByb2Nlc3Nvci5jcHAgXAorCVNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuaCBcCisJU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcCBcCisJ
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmgg
XAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5j
cHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9k
ZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05v
ZGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRp
b05vZGUuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Mb3dQYXNzMkZpbHRl
ck5vZGUuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0xvd1Bhc3MyRmls
dGVyTm9kZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmggXAorCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBcCisJU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQu
aCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0
aW9uRXZlbnQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1l
QW5hbHlzZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1l
QW5hbHlzZXIuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFu
YWx5c2VyTm9kZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRp
bWVBbmFseXNlck5vZGUuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XYXZl
U2hhcGVyTm9kZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNo
YXBlclByb2Nlc3Nvci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVT
aGFwZXJEU1BLZXJuZWwuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dh
dmVTaGFwZXJEU1BLZXJuZWwuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9X
YXZlU2hhcGVyUHJvY2Vzc29yLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9XYXZlU2hhcGVyTm9kZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlv
QnVmZmVyU291cmNlTm9kZUN1c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDb252b2x2ZXJOb2RlQ3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNKYXZhU2NyaXB0QXVkaW9Ob2RlQ3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXYXZlU2hhcGVyTm9kZUN1c3RvbS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXN5
bmNBdWRpb0RlY29kZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY1By
b2Nlc3Nvck5vZGUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Jhc2ljUHJv
Y2Vzc29yTm9kZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmggXAotCVNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyQ2FsbGJhY2suaCBcCi0JU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1
ZGlvQ2hhbm5lbE1lcmdlci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hh
bm5lbE1lcmdlci5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxp
dHRlci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVy
LmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvRGVzdGluYXRpb25Ob2RlLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
R2Fpbi5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5oIFwKLQlTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9MaXN0ZW5lci5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGUuY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGUuaCBcCi0JU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb05vZGVJbnB1dC5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGVP
dXRwdXQuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuaCBc
Ci0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmNwcCBcCi0JU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmggXAotCVNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0F1ZGlvUGFyYW0uY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bh
cmFtLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5oIFwKLQlTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmggXAotCVNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9C
aXF1YWREU1BLZXJuZWwuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWREU1BL
ZXJuZWwuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaCBcCi0JU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0Nv
bnZvbHZlck5vZGUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2Rl
LmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9k
ZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5v
ZGUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheURTUEtlcm5lbC5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5RFNQS2VybmVsLmggXAotCVNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0RlbGF5Tm9kZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0Rl
bGF5Tm9kZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheVByb2Nlc3Nvci5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5UHJvY2Vzc29yLmggXAotCVNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwIFwKLQlTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmggXAotCVNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0ph
dmFTY3JpcHRBdWRpb05vZGUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9KYXZhU2Ny
aXB0QXVkaW9Ob2RlLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVy
Tm9kZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5o
IFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUu
Y3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGUuaCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25O
b2RlLmggXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9u
Tm9kZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRp
b25FdmVudC5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0
aW9uRXZlbnQuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2Vy
LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5oIFwKLQlT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmggXAotCVNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZl
U2hhcGVyRFNQS2VybmVsLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBl
ckRTUEtlcm5lbC5oIFwKLQlTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vz
c29yLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuaCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9BcnJheS5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL0F1ZGlvQnVzLmggXApAQCAtNTU4NywyOCArNTU4NywyOCBAQCB3ZWJjb3JlX2J1
aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNSZWFsdGltZUFuYWx5
c2VyTm9kZS5oCiAKIGRvbV9iaW5kaW5nX2lkbHMgKz0gXAotCSQoV2ViQ29yZSkvd2ViYXVkaW8v
QXVkaW9CdWZmZXIuaWRsIFwKLQkkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyQ2FsbGJh
Y2suaWRsIFwKLQkkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5pZGwg
XAotCSQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmlkbCBcCi0JJChXZWJD
b3JlKS93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5pZGwgXAotCSQoV2ViQ29yZSkvd2Vi
YXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaWRsIFwKLQkkKFdlYkNvcmUpL3dlYmF1ZGlvL0F1
ZGlvR2Fpbi5pZGwgXAotCSQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5pZGwgXAot
CSQoV2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5pZGwgXAotCSQoV2ViQ29yZSkvd2Vi
YXVkaW8vQXVkaW9Ob2RlLmlkbCBcCi0JJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb1BhcmFtLmlk
bCBcCi0JJChXZWJDb3JlKS93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5pZGwgXAotCSQo
V2ViQ29yZSkvd2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmlkbCBcCi0JJChXZWJDb3JlKS93ZWJh
dWRpby9CaXF1YWRGaWx0ZXJOb2RlLmlkbCBcCi0JJChXZWJDb3JlKS93ZWJhdWRpby9Db252b2x2
ZXJOb2RlLmlkbCBcCi0JJChXZWJDb3JlKS93ZWJhdWRpby9EZWxheU5vZGUuaWRsIFwKLQkkKFdl
YkNvcmUpL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuaWRsIFwKLQkkKFdlYkNvcmUpL3dl
YmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaWRsIFwKLQkkKFdlYkNvcmUpL3dlYmF1ZGlvL0xv
d1Bhc3MyRmlsdGVyTm9kZS5pZGwgXAotCSQoV2ViQ29yZSkvd2ViYXVkaW8vTWVkaWFFbGVtZW50
QXVkaW9Tb3VyY2VOb2RlLmlkbCBcCi0JJChXZWJDb3JlKS93ZWJhdWRpby9PZmZsaW5lQXVkaW9D
b21wbGV0aW9uRXZlbnQuaWRsIFwKLQkkKFdlYkNvcmUpL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlz
ZXJOb2RlLmlkbAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5pZGwg
XAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlckNhbGxiYWNrLmlkbCBc
CisJJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5pZGwg
XAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuaWRsIFwK
KwkkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuaWRsIFwK
KwkkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaWRsIFwK
KwkkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9HYWluLmlkbCBcCisJJChXZWJDb3Jl
KS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb05vZGUuaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Q
YXJhbS5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdF
dmVudC5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUu
aWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5pZGwg
XAorCSQoV2ViQ29yZSkvTW9kdWxlcy93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmlkbCBcCisJJChX
ZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5Tm9kZS5pZGwgXAorCSQoV2ViQ29yZSkvTW9k
dWxlcy93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1
bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVs
ZXMvd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVz
L3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5pZGwgXAorCSQoV2ViQ29yZSkv
TW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaWRsIFwKKwkkKFdl
YkNvcmUpL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaWRsCiBlbmRpZgog
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDExMTQzMykKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtODEyLDYgKzgxMiwzMyBAQAogICAg
ICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uRXZlbnQuaWRsJywKICAg
ICAgICAgICAgICdNb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5pZGwnLAog
ICAgICAgICAgICAgJ01vZHVsZXMvc3BlZWNoL1NwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdC5p
ZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaWRsJywKKyAg
ICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyQ2FsbGJhY2suaWRsJywKKyAg
ICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5pZGwnLAor
ICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmlkbCcsCisg
ICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5pZGwnLAor
ICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbCcsCisgICAgICAg
ICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGwnLAorICAgICAg
ICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9HYWluLmlkbCcsCisgICAgICAgICAgICAnTW9k
dWxlcy93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRp
by9BdWRpb05vZGUuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFu
bmVyTm9kZS5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5p
ZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQu
aWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5pZGwn
LAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5pZGwnLAor
ICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5pZGwnLAorICAgICAg
ICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vRGVsYXlOb2RlLmlkbCcsCisgICAgICAgICAgICAnTW9k
dWxlcy93ZWJhdWRpby9ET01XaW5kb3dXZWJBdWRpby5pZGwnLAorICAgICAgICAgICAgJ01vZHVs
ZXMvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5pZGwnLAorICAgICAgICAgICAgJ01v
ZHVsZXMvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5pZGwnLAorICAgICAgICAgICAgJ01v
ZHVsZXMvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5pZGwnLAorICAgICAgICAgICAgJ01v
ZHVsZXMvd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmlkbCcsCisgICAgICAgICAgICAnTW9k
dWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaWRsJywKKyAgICAgICAg
ICAgICdNb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5pZGwnLAor
ICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaWRsJywK
KyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmlkbCcsCiAgICAg
ICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dTUUxEYXRhYmFzZS5pZGwnLAog
ICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaWRsJywKICAgICAgICAg
ICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQ2FsbGJhY2suaWRsJywKQEAgLTExMDUs
MzMgKzExMzIsNiBAQAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZUluZm9FcnJvckNhbGxi
YWNrLmlkbCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdlSW5mb1F1b3RhQ2FsbGJhY2su
aWRsJywKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2VJbmZvVXNhZ2VDYWxsYmFjay5pZGwn
LAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmlkbCcsCi0gICAgICAgICAgICAn
d2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFjay5pZGwnLAotICAgICAgICAgICAgJ3dlYmF1ZGlv
L0F1ZGlvQnVmZmVyU291cmNlTm9kZS5pZGwnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlv
Q2hhbm5lbE1lcmdlci5pZGwnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNw
bGl0dGVyLmlkbCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbCcsCi0g
ICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaWRsJywKLSAgICAgICAg
ICAgICd3ZWJhdWRpby9BdWRpb0dhaW4uaWRsJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRp
b0dhaW5Ob2RlLmlkbCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5pZGwn
LAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvTm9kZS5pZGwnLAotICAgICAgICAgICAgJ3dl
YmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlv
UGFyYW0uaWRsJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5p
ZGwnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5pZGwnLAotICAgICAg
ICAgICAgJ3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaWRsJywKLSAgICAgICAgICAgICd3ZWJh
dWRpby9Db252b2x2ZXJOb2RlLmlkbCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vRGVsYXlOb2Rl
LmlkbCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vRE9NV2luZG93V2ViQXVkaW8uaWRsJywKLSAg
ICAgICAgICAgICd3ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmlkbCcsCi0gICAgICAg
ICAgICAnd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5pZGwnLAotICAgICAgICAgICAgJ3dl
YmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaWRsJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9M
b3dQYXNzMkZpbHRlck5vZGUuaWRsJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9NZWRpYUVsZW1l
bnRBdWRpb1NvdXJjZU5vZGUuaWRsJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9PZmZsaW5lQXVk
aW9Db21wbGV0aW9uRXZlbnQuaWRsJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9SZWFsdGltZUFu
YWx5c2VyTm9kZS5pZGwnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmlk
bCcsCiAgICAgICAgICAgICAnd29ya2Vycy9BYnN0cmFjdFdvcmtlci5pZGwnLAogICAgICAgICAg
ICAgJ3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5pZGwnLAogICAgICAgICAgICAgJ3dv
cmtlcnMvU2hhcmVkV29ya2VyLmlkbCcsCkBAIC0xNTA2LDYgKzE1MDYsODMgQEAKICAgICAgICAg
ICAgICdNb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5oJywKICAgICAgICAg
ICAgICdNb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3QuY3BwJywKICAg
ICAgICAgICAgICdNb2R1bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3QuaCcs
CisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5j
cHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5v
ZGUuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAnLAor
ICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaCcsCisgICAgICAgICAg
ICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlckNhbGxiYWNrLmgnLAorICAgICAgICAgICAg
J01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcCcsCisgICAgICAgICAg
ICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaCcsCisgICAgICAgICAg
ICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuY3BwJywKKyAgICAgICAgICAg
ICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5oJywKKyAgICAgICAgICAgICdN
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmNwcCcsCisgICAgICAgICAgICAn
TW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5oJywKKyAgICAgICAgICAgICdN
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Db250ZXh0LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvRGVzdGluYXRpb25Ob2RlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9HYWluLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9HYWluTm9k
ZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5oJywK
KyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuY3BwJywKKyAgICAg
ICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaCcsCisgICAgICAgICAgICAn
TW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvTm9kZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
Tm9kZUlucHV0LmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVJ
bnB1dC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5j
cHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmgnLAor
ICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmNwcCcsCisgICAg
ICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaCcsCisgICAgICAgICAg
ICAnTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxl
cy93ZWJhdWRpby9BdWRpb1BhcmFtLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9QYXJhbVRpbWVsaW5lLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9B
dWRpb1BhcmFtVGltZWxpbmUuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRp
b1Byb2Nlc3NpbmdFdmVudC5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9Qcm9jZXNzaW5nRXZlbnQuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9BdWRp
b1NvdXJjZU5vZGUuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlv
RGVjb2Rlci5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0Rl
Y29kZXIuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwu
Y3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5oJywK
KyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuY3BwJywKKyAg
ICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaCcsCisgICAgICAg
ICAgICAnTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuY3BwJywKKyAgICAgICAgICAg
ICdNb2R1bGVzL3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5oJywKKyAgICAgICAgICAgICdNb2R1
bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dl
YmF1ZGlvL0NvbnZvbHZlck5vZGUuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9E
ZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dl
YmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oJywKKyAgICAgICAgICAgICdNb2R1
bGVzL3dlYmF1ZGlvL0RlbGF5RFNQS2VybmVsLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93
ZWJhdWRpby9EZWxheURTUEtlcm5lbC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlv
L0RlbGF5Tm9kZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vRGVsYXlOb2Rl
LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuY3BwJywK
KyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0RlbGF5UHJvY2Vzc29yLmgnLAorICAgICAg
ICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHAnLAorICAg
ICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5oJywKKyAg
ICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuY3BwJywKKyAg
ICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuaCcsCisgICAg
ICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmNwcCcsCisgICAg
ICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmgnLAorICAgICAg
ICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmNwcCcsCisgICAgICAg
ICAgICAnTW9kdWxlcy93ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuaCcsCisgICAgICAgICAg
ICAnTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwJywKKyAg
ICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5o
JywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25F
dmVudC5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29t
cGxldGlvbkV2ZW50LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1
ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9P
ZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJh
dWRpby9SZWFsdGltZUFuYWx5c2VyLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRp
by9SZWFsdGltZUFuYWx5c2VyLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vUmVh
bHRpbWVBbmFseXNlck5vZGUuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL1Jl
YWx0aW1lQW5hbHlzZXJOb2RlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vV2F2
ZVNoYXBlckRTUEtlcm5lbC5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vV2F2
ZVNoYXBlckRTUEtlcm5lbC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL1dhdmVT
aGFwZXJOb2RlLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVy
Tm9kZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNz
b3IuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNz
b3IuaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNl
LmNwcCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9DaGFuZ2VWZXJzaW9uV3Jh
cHBlci5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvQ2hhbmdlVmVyc2lv
bldyYXBwZXIuaCcsCkBAIC00ODQ3LDgzICs0OTI0LDYgQEAKICAgICAgICAgICAgICdzdG9yYWdl
L3dpbmNlL0RhdGFiYXNlVGhyZWFkV2luQ0UuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS93aW5j
ZS9TdG9yYWdlVGhyZWFkV2luQ0UuY3BwJywKICAgICAgICAgICAgICdzdG9yYWdlL3dpbmNlL1N0
b3JhZ2VUaHJlYWRXaW5DRS5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0Jhc2ljUHJv
Y2Vzc29yTm9kZS5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNz
b3JOb2RlLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcCcsCi0gICAg
ICAgICAgICAnd2ViYXVkaW8vQXVkaW9CdWZmZXIuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8v
QXVkaW9CdWZmZXJDYWxsYmFjay5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0J1ZmZl
clNvdXJjZU5vZGUuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJj
ZU5vZGUuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmNwcCcs
Ci0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmgnLAotICAgICAgICAg
ICAgJ3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmNwcCcsCi0gICAgICAgICAgICAnd2Vi
YXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVk
aW9Db250ZXh0LmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgnLAot
ICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCcsCi0gICAgICAg
ICAgICAnd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCcsCi0gICAgICAgICAgICAnd2Vi
YXVkaW8vQXVkaW9HYWluLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUu
Y3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmgnLAotICAgICAgICAg
ICAgJ3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9B
dWRpb0xpc3RlbmVyLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAnLAot
ICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvTm9kZS5oJywKLSAgICAgICAgICAgICd3ZWJhdWRp
by9BdWRpb05vZGVJbnB1dC5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvTm9kZUlu
cHV0LmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5jcHAnLAotICAg
ICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5oJywKLSAgICAgICAgICAgICd3ZWJh
dWRpby9BdWRpb1Bhbm5lck5vZGUuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9BdWRpb1Bh
bm5lck5vZGUuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9QYXJhbS5jcHAnLAotICAg
ICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvUGFyYW0uaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8v
QXVkaW9QYXJhbVRpbWVsaW5lLmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9QYXJh
bVRpbWVsaW5lLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50
LmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaCcsCi0g
ICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmgnLAotICAgICAgICAgICAgJ3dl
YmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQXN5
bmNBdWRpb0RlY29kZXIuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVs
LmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmgnLAotICAgICAg
ICAgICAgJ3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuY3BwJywKLSAgICAgICAgICAgICd3ZWJh
dWRpby9CaXF1YWRGaWx0ZXJOb2RlLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0JpcXVhZFBy
b2Nlc3Nvci5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5oJywK
LSAgICAgICAgICAgICd3ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcCcsCi0gICAgICAgICAgICAn
d2ViYXVkaW8vQ29udm9sdmVyTm9kZS5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9EZWZhdWx0
QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9EZWZhdWx0
QXVkaW9EZXN0aW5hdGlvbk5vZGUuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vRGVsYXlEU1BL
ZXJuZWwuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9EZWxheURTUEtlcm5lbC5oJywKLSAg
ICAgICAgICAgICd3ZWJhdWRpby9EZWxheU5vZGUuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRp
by9EZWxheU5vZGUuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuY3Bw
JywKLSAgICAgICAgICAgICd3ZWJhdWRpby9EZWxheVByb2Nlc3Nvci5oJywKLSAgICAgICAgICAg
ICd3ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcCcsCi0gICAgICAgICAgICAnd2Vi
YXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9I
aWdoUGFzczJGaWx0ZXJOb2RlLmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vSGlnaFBhc3My
RmlsdGVyTm9kZS5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2Rl
LmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5oJywKLSAg
ICAgICAgICAgICd3ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuY3BwJywKLSAgICAgICAgICAg
ICd3ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8v
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8v
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmgnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL09m
ZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL09m
ZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9PZmZs
aW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9PZmZs
aW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vUmVhbHRp
bWVBbmFseXNlci5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIu
aCcsCi0gICAgICAgICAgICAnd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuY3BwJywKLSAg
ICAgICAgICAgICd3ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5oJywKLSAgICAgICAgICAg
ICd3ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmNwcCcsCi0gICAgICAgICAgICAnd2ViYXVk
aW8vV2F2ZVNoYXBlckRTUEtlcm5lbC5oJywKLSAgICAgICAgICAgICd3ZWJhdWRpby9XYXZlU2hh
cGVyTm9kZS5jcHAnLAotICAgICAgICAgICAgJ3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmgnLAot
ICAgICAgICAgICAgJ3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuY3BwJywKLSAgICAgICAg
ICAgICd3ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmgnLAogICAgICAgICAgICAgJ3dvcmtl
cnMvQWJzdHJhY3RXb3JrZXIuY3BwJywKICAgICAgICAgICAgICd3b3JrZXJzL0Fic3RyYWN0V29y
a2VyLmgnLAogICAgICAgICAgICAgJ3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5jcHAn
LApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5wcmkJKHJldmlzaW9uIDExMTQzMykKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBAIElOQ0xVREVQQVRI
ICs9IFwKICAgICAkJFNPVVJDRV9ESVIvTW9kdWxlcy9maWxlc3lzdGVtIFwKICAgICAkJFNPVVJD
RV9ESVIvTW9kdWxlcy9nZW9sb2NhdGlvbiBcCiAgICAgJCRTT1VSQ0VfRElSL01vZHVsZXMvaW5k
ZXhlZGRiIFwKKyAgICAkJFNPVVJDRV9ESVIvTW9kdWxlcy93ZWJhdWRpbyBcCiAgICAgJCRTT1VS
Q0VfRElSL01vZHVsZXMvd2ViZGF0YWJhc2UgXAogICAgICQkU09VUkNFX0RJUi9Nb2R1bGVzL3dl
YnNvY2tldHMgXAogICAgICQkU09VUkNFX0RJUi9hY2Nlc3NpYmlsaXR5IFwKQEAgLTgyLDcgKzgz
LDYgQEAgSU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJUi9zdmcvZ3JhcGhpY3MvZmls
dGVycyBcCiAgICAgJCRTT1VSQ0VfRElSL3N2Zy9wcm9wZXJ0aWVzIFwKICAgICAkJFNPVVJDRV9E
SVIvdGVzdGluZyBcCi0gICAgJCRTT1VSQ0VfRElSL3dlYmF1ZGlvIFwKICAgICAkJFNPVVJDRV9E
SVIvd2Vic29ja2V0cyBcCiAgICAgJCRTT1VSQ0VfRElSL3dvcmtlcnMgXAogICAgICQkU09VUkNF
X0RJUi94bWwgXApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1
ZGlvRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHAJKHJldmlzaW9uIDExMTQzMykJKGZyb20gU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwOjExMTQzMykKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkFzeW5jQXVkaW9EZWNvZGVy
LmgiCisKKyNpbmNsdWRlICJBdWRpb0J1ZmZlci5oIgorI2luY2x1ZGUgIkF1ZGlvQnVmZmVyQ2Fs
bGJhY2suaCIKKyNpbmNsdWRlIDx3dGYvQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0FzeW5jQXVkaW9EZWNvZGVyOjpBc3lu
Y0F1ZGlvRGVjb2RlcigpCit7CisgICAgLy8gU3RhcnQgd29ya2VyIHRocmVhZC4KKyAgICBNdXRl
eExvY2tlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CisgICAgbV90aHJlYWRJRCA9IGNy
ZWF0ZVRocmVhZChBc3luY0F1ZGlvRGVjb2Rlcjo6dGhyZWFkRW50cnksIHRoaXMsICJBdWRpbyBE
ZWNvZGVyIik7Cit9CisKK0FzeW5jQXVkaW9EZWNvZGVyOjp+QXN5bmNBdWRpb0RlY29kZXIoKQor
eworICAgIG1fcXVldWUua2lsbCgpOworICAgIAorICAgIC8vIFN0b3AgdGhyZWFkLgorICAgIHdh
aXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSUQpOworICAgIG1fdGhyZWFkSUQgPSAwOwor
fQorCit2b2lkIEFzeW5jQXVkaW9EZWNvZGVyOjpkZWNvZGVBc3luYyhBcnJheUJ1ZmZlciogYXVk
aW9EYXRhLCBmbG9hdCBzYW1wbGVSYXRlLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+
IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBlcnJvckNh
bGxiYWNrKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKGF1ZGlv
RGF0YSk7CisgICAgaWYgKCFhdWRpb0RhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIE93blB0
cjxEZWNvZGluZ1Rhc2s+IGRlY29kaW5nVGFzayA9IERlY29kaW5nVGFzazo6Y3JlYXRlKGF1ZGlv
RGF0YSwgc2FtcGxlUmF0ZSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTsKKyAgICBt
X3F1ZXVlLmFwcGVuZChkZWNvZGluZ1Rhc2sucmVsZWFzZSgpKTsgLy8gbm90ZSB0aGF0IG93bmVy
c2hpcCBvZiB0aGUgdGFzayBpcyBlZmZlY3RpdmVseSB0YWtlbiBieSB0aGUgcXVldWUuCit9CisK
Ky8vIEFzeW5jaHJvbm91c2x5IGRlY29kZSBpbiB0aGlzIHRocmVhZC4KK3ZvaWQgQXN5bmNBdWRp
b0RlY29kZXI6OnRocmVhZEVudHJ5KHZvaWQqIHRocmVhZERhdGEpCit7CisgICAgQVNTRVJUKHRo
cmVhZERhdGEpOworICAgIEFzeW5jQXVkaW9EZWNvZGVyKiBkZWNvZGVyID0gcmVpbnRlcnByZXRf
Y2FzdDxBc3luY0F1ZGlvRGVjb2Rlcio+KHRocmVhZERhdGEpOworICAgIGRlY29kZXItPnJ1bkxv
b3AoKTsKK30KKwordm9pZCBBc3luY0F1ZGlvRGVjb2Rlcjo6cnVuTG9vcCgpCit7CisgICAgQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICB7CisgICAgICAgIC8vIFdhaXQgZm9yIHVudGls
IHdlIGhhdmUgbV90aHJlYWRJRCBlc3RhYmxpc2hlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIHJ1biBs
b29wLgorICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7Cisg
ICAgfQorCisgICAgLy8gS2VlcCBydW5uaW5nIGRlY29kaW5nIHRhc2tzIHVudGlsIHdlJ3JlIGtp
bGxlZC4KKyAgICB3aGlsZSAoT3duUHRyPERlY29kaW5nVGFzaz4gZGVjb2RpbmdUYXNrID0gbV9x
dWV1ZS53YWl0Rm9yTWVzc2FnZSgpKSB7CisgICAgICAgIC8vIExldCB0aGUgdGFzayB0YWtlIGNh
cmUgb2YgaXRzIG93biBvd25lcnNoaXAuCisgICAgICAgIC8vIFNlZSBEZWNvZGluZ1Rhc2s6Om5v
dGlmeUNvbXBsZXRlKCkgZm9yIGNsZWFudXAuCisgICAgICAgIGRlY29kaW5nVGFzay5sZWFrUHRy
KCktPmRlY29kZSgpOworICAgIH0KK30KKworUGFzc093blB0cjxBc3luY0F1ZGlvRGVjb2Rlcjo6
RGVjb2RpbmdUYXNrPiBBc3luY0F1ZGlvRGVjb2Rlcjo6RGVjb2RpbmdUYXNrOjpjcmVhdGUoQXJy
YXlCdWZmZXIqIGF1ZGlvRGF0YSwgZmxvYXQgc2FtcGxlUmF0ZSwgUGFzc1JlZlB0cjxBdWRpb0J1
ZmZlckNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxs
YmFjaz4gZXJyb3JDYWxsYmFjaykKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlY29kaW5n
VGFzayhhdWRpb0RhdGEsIHNhbXBsZVJhdGUsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFj
aykpOworfQorCitBc3luY0F1ZGlvRGVjb2Rlcjo6RGVjb2RpbmdUYXNrOjpEZWNvZGluZ1Rhc2so
QXJyYXlCdWZmZXIqIGF1ZGlvRGF0YSwgZmxvYXQgc2FtcGxlUmF0ZSwgUGFzc1JlZlB0cjxBdWRp
b0J1ZmZlckNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJD
YWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKKyAgICA6IG1fYXVkaW9EYXRhKGF1ZGlvRGF0YSkKKyAg
ICAsIG1fc2FtcGxlUmF0ZShzYW1wbGVSYXRlKQorICAgICwgbV9zdWNjZXNzQ2FsbGJhY2soc3Vj
Y2Vzc0NhbGxiYWNrKQorICAgICwgbV9lcnJvckNhbGxiYWNrKGVycm9yQ2FsbGJhY2spCit7Cit9
CisKK3ZvaWQgQXN5bmNBdWRpb0RlY29kZXI6OkRlY29kaW5nVGFzazo6ZGVjb2RlKCkKK3sKKyAg
ICBBU1NFUlQobV9hdWRpb0RhdGEuZ2V0KCkpOworICAgIGlmICghbV9hdWRpb0RhdGEuZ2V0KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIERvIHRoZSBhY3R1YWwgZGVjb2RpbmcgYW5kIGlu
dm9rZSB0aGUgY2FsbGJhY2suCisgICAgbV9hdWRpb0J1ZmZlciA9IEF1ZGlvQnVmZmVyOjpjcmVh
dGVGcm9tQXVkaW9GaWxlRGF0YShtX2F1ZGlvRGF0YS0+ZGF0YSgpLCBtX2F1ZGlvRGF0YS0+Ynl0
ZUxlbmd0aCgpLCBmYWxzZSwgc2FtcGxlUmF0ZSgpKTsKKyAgICAKKyAgICAvLyBEZWNvZGluZyBp
cyBmaW5pc2hlZCwgYnV0IHdlIG5lZWQgdG8gZG8gdGhlIGNhbGxiYWNrcyBvbiB0aGUgbWFpbiB0
aHJlYWQuCisgICAgY2FsbE9uTWFpblRocmVhZChub3RpZnlDb21wbGV0ZURpc3BhdGNoLCB0aGlz
KTsKK30KKwordm9pZCBBc3luY0F1ZGlvRGVjb2Rlcjo6RGVjb2RpbmdUYXNrOjpub3RpZnlDb21w
bGV0ZURpc3BhdGNoKHZvaWQqIHVzZXJEYXRhKQoreworICAgIEFzeW5jQXVkaW9EZWNvZGVyOjpE
ZWNvZGluZ1Rhc2sqIHRhc2sgPSByZWludGVycHJldF9jYXN0PEFzeW5jQXVkaW9EZWNvZGVyOjpE
ZWNvZGluZ1Rhc2sqPih1c2VyRGF0YSk7CisgICAgQVNTRVJUKHRhc2spOworICAgIGlmICghdGFz
aykKKyAgICAgICAgcmV0dXJuOworCisgICAgdGFzay0+bm90aWZ5Q29tcGxldGUoKTsKK30KKwor
dm9pZCBBc3luY0F1ZGlvRGVjb2Rlcjo6RGVjb2RpbmdUYXNrOjpub3RpZnlDb21wbGV0ZSgpCit7
CisgICAgaWYgKGF1ZGlvQnVmZmVyKCkgJiYgc3VjY2Vzc0NhbGxiYWNrKCkpCisgICAgICAgIHN1
Y2Nlc3NDYWxsYmFjaygpLT5oYW5kbGVFdmVudChhdWRpb0J1ZmZlcigpKTsKKyAgICBlbHNlIGlm
IChlcnJvckNhbGxiYWNrKCkpCisgICAgICAgIGVycm9yQ2FsbGJhY2soKS0+aGFuZGxlRXZlbnQo
YXVkaW9CdWZmZXIoKSk7CisKKyAgICAvLyBPdXIgb3duZXJzaGlwIHdhcyBnaXZlbiB1cCBpbiBB
c3luY0F1ZGlvRGVjb2Rlcjo6cnVuTG9vcCgpCisgICAgLy8gTWFrZSBzdXJlIHRvIGNsZWFuIHVw
IGhlcmUuCisgICAgZGVsZXRlIHRoaXM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5oCShyZXZpc2lvbiAxMTE0MzMp
CShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmg6MTExNDMz
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFz
eW5jQXVkaW9EZWNvZGVyX2gKKyNkZWZpbmUgQXN5bmNBdWRpb0RlY29kZXJfaAorCisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvTWVzc2FnZVF1ZXVlLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9CdWZmZXI7CitjbGFzcyBBdWRpb0J1ZmZlckNhbGxi
YWNrOworCisvLyBBc3luY0F1ZGlvRGVjb2RlciBhc3luY2hyb25vdXNseSBkZWNvZGVzIGF1ZGlv
IGZpbGUgZGF0YSBmcm9tIGFuIEFycmF5QnVmZmVyIGluIGEgd29ya2VyIHRocmVhZC4KKy8vIFVw
b24gc3VjY2Vzc2Z1bCBkZWNvZGluZywgYSBjb21wbGV0aW9uIGNhbGxiYWNrIHdpbGwgYmUgaW52
b2tlZCB3aXRoIHRoZSBkZWNvZGVkIFBDTSBkYXRhIGluIGFuIEF1ZGlvQnVmZmVyLgorCitjbGFz
cyBBc3luY0F1ZGlvRGVjb2RlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXN5bmNBdWRp
b0RlY29kZXIpOworcHVibGljOgorICAgIEFzeW5jQXVkaW9EZWNvZGVyKCk7CisgICAgfkFzeW5j
QXVkaW9EZWNvZGVyKCk7CisKKyAgICAvLyBNdXN0IGJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJl
YWQuCisgICAgdm9pZCBkZWNvZGVBc3luYyhBcnJheUJ1ZmZlciogYXVkaW9EYXRhLCBmbG9hdCBz
YW1wbGVSYXRlLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFj
aywgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKTsKKworcHJp
dmF0ZToKKyAgICBjbGFzcyBEZWNvZGluZ1Rhc2sgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShEZWNvZGluZ1Rhc2spOworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NPd25Q
dHI8RGVjb2RpbmdUYXNrPiBjcmVhdGUoQXJyYXlCdWZmZXIqIGF1ZGlvRGF0YSwgZmxvYXQgc2Ft
cGxlUmF0ZSwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ss
IFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayk7CisKKyAgICAg
ICAgdm9pZCBkZWNvZGUoKTsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgRGVjb2Rp
bmdUYXNrKEFycmF5QnVmZmVyKiBhdWRpb0RhdGEsIGZsb2F0IHNhbXBsZVJhdGUsIFBhc3NSZWZQ
dHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEF1ZGlv
QnVmZmVyQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spOworCisgICAgICAgIEFycmF5QnVmZmVyKiBh
dWRpb0RhdGEoKSB7IHJldHVybiBtX2F1ZGlvRGF0YS5nZXQoKTsgfQorICAgICAgICBmbG9hdCBz
YW1wbGVSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVSYXRlOyB9CisgICAgICAgIEF1ZGlv
QnVmZmVyQ2FsbGJhY2sqIHN1Y2Nlc3NDYWxsYmFjaygpIHsgcmV0dXJuIG1fc3VjY2Vzc0NhbGxi
YWNrLmdldCgpOyB9CisgICAgICAgIEF1ZGlvQnVmZmVyQ2FsbGJhY2sqIGVycm9yQ2FsbGJhY2so
KSB7IHJldHVybiBtX2Vycm9yQ2FsbGJhY2suZ2V0KCk7IH0KKyAgICAgICAgQXVkaW9CdWZmZXIq
IGF1ZGlvQnVmZmVyKCkgeyByZXR1cm4gbV9hdWRpb0J1ZmZlci5nZXQoKTsgfQorCisgICAgICAg
IHN0YXRpYyB2b2lkIG5vdGlmeUNvbXBsZXRlRGlzcGF0Y2godm9pZCogdXNlckRhdGEpOworICAg
ICAgICB2b2lkIG5vdGlmeUNvbXBsZXRlKCk7CisKKyAgICAgICAgUmVmUHRyPEFycmF5QnVmZmVy
PiBtX2F1ZGlvRGF0YTsKKyAgICAgICAgZmxvYXQgbV9zYW1wbGVSYXRlOworICAgICAgICBSZWZQ
dHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gbV9zdWNjZXNzQ2FsbGJhY2s7CisgICAgICAgIFJlZlB0
cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBtX2Vycm9yQ2FsbGJhY2s7CisgICAgICAgIFJlZlB0cjxB
dWRpb0J1ZmZlcj4gbV9hdWRpb0J1ZmZlcjsKKyAgICB9OworICAgIAorICAgIHN0YXRpYyB2b2lk
IHRocmVhZEVudHJ5KHZvaWQqIHRocmVhZERhdGEpOworICAgIHZvaWQgcnVuTG9vcCgpOworCisg
ICAgV1RGOjpUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisgICAgTXV0ZXggbV90aHJlYWRD
cmVhdGlvbk11dGV4OworICAgIE1lc3NhZ2VRdWV1ZTxEZWNvZGluZ1Rhc2s+IG1fcXVldWU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBBc3luY0F1ZGlvRGVjb2Rl
cl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9j
ZXNzb3JOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcAkocmV2aXNpb24gMTExNDMzKQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5jcHA6MTExNDMz
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29y
Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAi
QXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaCIKKworI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisjaW5j
bHVkZSAiQXVkaW9Db250ZXh0LmgiCisjaW5jbHVkZSAiQXVkaW9Ob2RlSW5wdXQuaCIKKyNpbmNs
dWRlICJBdWRpb05vZGVPdXRwdXQuaCIKKyNpbmNsdWRlICJBdWRpb1Byb2Nlc3Nvci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlOjpBdWRpb0Jhc2lj
UHJvY2Vzc29yTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCisg
ICAgOiBBdWRpb05vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkKK3sKKyAgICBhZGRJbnB1dChhZG9w
dFB0cihuZXcgQXVkaW9Ob2RlSW5wdXQodGhpcykpKTsKKyAgICBhZGRPdXRwdXQoYWRvcHRQdHIo
bmV3IEF1ZGlvTm9kZU91dHB1dCh0aGlzLCAxKSkpOworCisgICAgLy8gVGhlIHN1YmNsYXNzIG11
c3QgY3JlYXRlIG1fcHJvY2Vzc29yLgorfQorCit2b2lkIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2Rl
Ojppbml0aWFsaXplKCkKK3sKKyAgICBpZiAoaXNJbml0aWFsaXplZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBBU1NFUlQocHJvY2Vzc29yKCkpOworICAgIHByb2Nlc3NvcigpLT5pbml0aWFs
aXplKCk7CisKKyAgICBBdWRpb05vZGU6OmluaXRpYWxpemUoKTsKK30KKwordm9pZCBBdWRpb0Jh
c2ljUHJvY2Vzc29yTm9kZTo6dW5pbml0aWFsaXplKCkKK3sKKyAgICBpZiAoIWlzSW5pdGlhbGl6
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHByb2Nlc3NvcigpKTsKKyAgICBw
cm9jZXNzb3IoKS0+dW5pbml0aWFsaXplKCk7CisKKyAgICBBdWRpb05vZGU6OnVuaW5pdGlhbGl6
ZSgpOworfQorCit2b2lkIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlOjpwcm9jZXNzKHNpemVfdCBm
cmFtZXNUb1Byb2Nlc3MpCit7CisgICAgQXVkaW9CdXMqIGRlc3RpbmF0aW9uQnVzID0gb3V0cHV0
KDApLT5idXMoKTsKKyAgICAKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSB8fCAhcHJvY2Vzc29y
KCkpCisgICAgICAgIGRlc3RpbmF0aW9uQnVzLT56ZXJvKCk7CisgICAgZWxzZSB7CisgICAgICAg
IEF1ZGlvQnVzKiBzb3VyY2VCdXMgPSBpbnB1dCgwKS0+YnVzKCk7CisKKyAgICAgICAgLy8gRklY
TUU6IGlmIHdlIHRha2UgInRhaWwgdGltZSIgaW50byBhY2NvdW50LCB0aGVuIHdlIGNhbiBhdm9p
ZCBjYWxsaW5nIHByb2Nlc3NvcigpLT5wcm9jZXNzKCkgb25jZSB0aGUgdGFpbCBkaWVzIGRvd24u
CisgICAgICAgIGlmICghaW5wdXQoMCktPmlzQ29ubmVjdGVkKCkpCisgICAgICAgICAgICBzb3Vy
Y2VCdXMtPnplcm8oKTsKKworICAgICAgICBwcm9jZXNzb3IoKS0+cHJvY2Vzcyhzb3VyY2VCdXMs
IGRlc3RpbmF0aW9uQnVzLCBmcmFtZXNUb1Byb2Nlc3MpOyAgCisgICAgfQorfQorCisvLyBOaWNl
IG9wdGltaXphdGlvbiBpbiB0aGUgdmVyeSBjb21tb24gY2FzZSBhbGxvd2luZyBmb3IgImluLXBs
YWNlIiBwcm9jZXNzaW5nCit2b2lkIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlOjpwdWxsSW5wdXRz
KHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAgLy8gUmVuZGVyIGlucHV0IHN0cmVhbSAt
IHN1Z2dlc3QgdG8gdGhlIGlucHV0IHRvIHJlbmRlciBkaXJlY3RseSBpbnRvIG91dHB1dCBidXMg
Zm9yIGluLXBsYWNlIHByb2Nlc3NpbmcgaW4gcHJvY2VzcygpIGlmIHBvc3NpYmxlLgorICAgIGlu
cHV0KDApLT5wdWxsKG91dHB1dCgwKS0+YnVzKCksIGZyYW1lc1RvUHJvY2Vzcyk7Cit9CisKK3Zv
aWQgQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGU6OnJlc2V0KCkKK3sKKyAgICBpZiAocHJvY2Vzc29y
KCkpCisgICAgICAgIHByb2Nlc3NvcigpLT5yZXNldCgpOworfQorCisvLyBBcyBzb29uIGFzIHdl
IGtub3cgdGhlIGNoYW5uZWwgY291bnQgb2Ygb3VyIGlucHV0LCB3ZSBjYW4gbGF6aWx5IGluaXRp
YWxpemUuCisvLyBTb21ldGltZXMgdGhpcyBtYXkgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIHdp
dGggZGlmZmVyZW50IGNoYW5uZWwgY291bnRzLCBpbiB3aGljaCBjYXNlIHdlIG11c3Qgc2FmZWx5
CisvLyB1bmluaXRpYWxpemUgYW5kIHRoZW4gcmUtaW5pdGlhbGl6ZSB3aXRoIHRoZSBuZXcgY2hh
bm5lbCBjb3VudC4KK3ZvaWQgQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGU6OmNoZWNrTnVtYmVyT2ZD
aGFubmVsc0ZvcklucHV0KEF1ZGlvTm9kZUlucHV0KiBpbnB1dCkKK3sKKyAgICBBU1NFUlQoY29u
dGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkgJiYgY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Cisg
ICAgCisgICAgQVNTRVJUKGlucHV0ID09IHRoaXMtPmlucHV0KDApKTsKKyAgICBpZiAoaW5wdXQg
IT0gdGhpcy0+aW5wdXQoMCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChwcm9jZXNz
b3IoKSk7CisgICAgaWYgKCFwcm9jZXNzb3IoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5z
aWduZWQgbnVtYmVyT2ZDaGFubmVscyA9IGlucHV0LT5udW1iZXJPZkNoYW5uZWxzKCk7CisgICAg
CisgICAgaWYgKGlzSW5pdGlhbGl6ZWQoKSAmJiBudW1iZXJPZkNoYW5uZWxzICE9IG91dHB1dCgw
KS0+bnVtYmVyT2ZDaGFubmVscygpKSB7CisgICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgaW5pdGlh
bGl6ZWQgYnV0IHRoZSBjaGFubmVsIGNvdW50IGhhcyBjaGFuZ2VkLgorICAgICAgICB1bmluaXRp
YWxpemUoKTsKKyAgICB9CisgICAgCisgICAgaWYgKCFpc0luaXRpYWxpemVkKCkpIHsKKyAgICAg
ICAgLy8gVGhpcyB3aWxsIHByb3BhZ2F0ZSB0aGUgY2hhbm5lbCBjb3VudCB0byBhbnkgbm9kZXMg
Y29ubmVjdGVkIGZ1cnRoZXIgZG93biB0aGUgY2hhaW4uLi4KKyAgICAgICAgb3V0cHV0KDApLT5z
ZXROdW1iZXJPZkNoYW5uZWxzKG51bWJlck9mQ2hhbm5lbHMpOworCisgICAgICAgIC8vIFJlLWlu
aXRpYWxpemUgdGhlIHByb2Nlc3NvciB3aXRoIHRoZSBuZXcgY2hhbm5lbCBjb3VudC4KKyAgICAg
ICAgcHJvY2Vzc29yKCktPnNldE51bWJlck9mQ2hhbm5lbHMobnVtYmVyT2ZDaGFubmVscyk7Cisg
ICAgICAgIGluaXRpYWxpemUoKTsKKyAgICB9CisKKyAgICBBdWRpb05vZGU6OmNoZWNrTnVtYmVy
T2ZDaGFubmVsc0ZvcklucHV0KGlucHV0KTsKK30KKwordW5zaWduZWQgQXVkaW9CYXNpY1Byb2Nl
c3Nvck5vZGU6Om51bWJlck9mQ2hhbm5lbHMoKQoreworICAgIHJldHVybiBvdXRwdXQoMCktPm51
bWJlck9mQ2hhbm5lbHMoKTsKK30KKworZG91YmxlIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlOjp0
YWlsVGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJvY2Vzc29yLT50YWlsVGltZSgpOwor
fQorCitkb3VibGUgQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGU6OmxhdGVuY3lUaW1lKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9wcm9jZXNzb3ItPmxhdGVuY3lUaW1lKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljUHJv
Y2Vzc29yTm9kZS5oCShyZXZpc2lvbiAxMTE0MzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmg6MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEF1ZGlvQmFzaWNQcm9jZXNz
b3JOb2RlX2gKKyNkZWZpbmUgQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGVfaAorCisjaW5jbHVkZSAi
QXVkaW9Ob2RlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBBdWRpb0J1czsKK2NsYXNzIEF1ZGlvTm9kZUlucHV0OworY2xhc3Mg
QXVkaW9Qcm9jZXNzb3I7CisgICAgCisvLyBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZSBpcyBhbiBB
dWRpb05vZGUgd2l0aCBvbmUgaW5wdXQgYW5kIG9uZSBvdXRwdXQgd2hlcmUgdGhlIGlucHV0IGFu
ZCBvdXRwdXQgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgY2hhbm5lbHMuCitjbGFzcyBBdWRpb0Jh
c2ljUHJvY2Vzc29yTm9kZSA6IHB1YmxpYyBBdWRpb05vZGUgeworcHVibGljOgorICAgIEF1ZGlv
QmFzaWNQcm9jZXNzb3JOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOworCisg
ICAgLy8gQXVkaW9Ob2RlCisgICAgdmlydHVhbCB2b2lkIHByb2Nlc3Moc2l6ZV90IGZyYW1lc1Rv
UHJvY2Vzcyk7CisgICAgdmlydHVhbCB2b2lkIHB1bGxJbnB1dHMoc2l6ZV90IGZyYW1lc1RvUHJv
Y2Vzcyk7CisgICAgdmlydHVhbCB2b2lkIHJlc2V0KCk7CisgICAgdmlydHVhbCB2b2lkIGluaXRp
YWxpemUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pbml0aWFsaXplKCk7CisKKyAgICAvLyBDYWxs
ZWQgaW4gdGhlIG1haW4gdGhyZWFkIHdoZW4gdGhlIG51bWJlciBvZiBjaGFubmVscyBmb3IgdGhl
IGlucHV0IG1heSBoYXZlIGNoYW5nZWQuCisgICAgdmlydHVhbCB2b2lkIGNoZWNrTnVtYmVyT2ZD
aGFubmVsc0ZvcklucHV0KEF1ZGlvTm9kZUlucHV0Kik7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBu
dW1iZXIgb2YgY2hhbm5lbHMgZm9yIGJvdGggdGhlIGlucHV0IGFuZCB0aGUgb3V0cHV0LgorICAg
IHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwg
ZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBkb3VibGUgbGF0
ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERTsKKworICAgIEF1ZGlvUHJvY2Vzc29yKiBwcm9jZXNz
b3IoKSB7IHJldHVybiBtX3Byb2Nlc3Nvci5nZXQoKTsgfQorICAgIE93blB0cjxBdWRpb1Byb2Nl
c3Nvcj4gbV9wcm9jZXNzb3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAkocmV2aXNpb24gMTExNDMzKQkoZnJv
bSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHA6MTExNDMzKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
V0VCX0FVRElPKQorCisjaW5jbHVkZSAiQXVkaW9CdWZmZXIuaCIKKworI2luY2x1ZGUgIkF1ZGlv
QnVzLmgiCisjaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCisjaW5jbHVkZSAiQXVkaW9GaWxlUmVh
ZGVyLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBBdWRp
b0J1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJP
ZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSkKK3sKKyAgICBpZiAoc2FtcGxlUmF0ZSA8IDIyMDUw
IHx8IHNhbXBsZVJhdGUgPiA5NjAwMCB8fCBudW1iZXJPZkNoYW5uZWxzID4gQXVkaW9Db250ZXh0
OjptYXhOdW1iZXJPZkNoYW5uZWxzKCkgfHwgIW51bWJlck9mRnJhbWVzKQorICAgICAgICByZXR1
cm4gMDsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvQnVmZmVyKG51bWJlck9m
Q2hhbm5lbHMsIG51bWJlck9mRnJhbWVzLCBzYW1wbGVSYXRlKSk7Cit9CisKK1Bhc3NSZWZQdHI8
QXVkaW9CdWZmZXI+IEF1ZGlvQnVmZmVyOjpjcmVhdGVGcm9tQXVkaW9GaWxlRGF0YShjb25zdCB2
b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUsIGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBzYW1wbGVS
YXRlKQoreworICAgIE93blB0cjxBdWRpb0J1cz4gYnVzID0gY3JlYXRlQnVzRnJvbUluTWVtb3J5
QXVkaW9GaWxlKGRhdGEsIGRhdGFTaXplLCBtaXhUb01vbm8sIHNhbXBsZVJhdGUpOworICAgIGlm
IChidXMuZ2V0KCkpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVkaW9CdWZmZXIoYnVz
LmdldCgpKSk7CisKKyAgICByZXR1cm4gMDsKK30KKworQXVkaW9CdWZmZXI6OkF1ZGlvQnVmZmVy
KHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQg
c2FtcGxlUmF0ZSkKKyAgICA6IG1fZ2FpbigxLjApCisgICAgLCBtX3NhbXBsZVJhdGUoc2FtcGxl
UmF0ZSkKKyAgICAsIG1fbGVuZ3RoKG51bWJlck9mRnJhbWVzKQoreworICAgIG1fY2hhbm5lbHMu
cmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mQ2hhbm5lbHMpOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgeworICAgICAgICBSZWZQdHI8RmxvYXQz
MkFycmF5PiBjaGFubmVsRGF0YUFycmF5ID0gRmxvYXQzMkFycmF5OjpjcmVhdGUobV9sZW5ndGgp
OworICAgICAgICBtX2NoYW5uZWxzLmFwcGVuZChjaGFubmVsRGF0YUFycmF5KTsKKyAgICB9Cit9
CisKK0F1ZGlvQnVmZmVyOjpBdWRpb0J1ZmZlcihBdWRpb0J1cyogYnVzKQorICAgIDogbV9nYWlu
KDEuMCkKKyAgICAsIG1fc2FtcGxlUmF0ZShidXMtPnNhbXBsZVJhdGUoKSkKKyAgICAsIG1fbGVu
Z3RoKGJ1cy0+bGVuZ3RoKCkpCit7CisgICAgLy8gQ29weSBhdWRpbyBkYXRhIGZyb20gdGhlIGJ1
cyB0byB0aGUgRmxvYXQzMkFycmF5cyB3ZSBtYW5hZ2UuCisgICAgdW5zaWduZWQgbnVtYmVyT2ZD
aGFubmVscyA9IGJ1cy0+bnVtYmVyT2ZDaGFubmVscygpOworICAgIG1fY2hhbm5lbHMucmVzZXJ2
ZUNhcGFjaXR5KG51bWJlck9mQ2hhbm5lbHMpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1iZXJPZkNoYW5uZWxzOyArK2kpIHsKKyAgICAgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4g
Y2hhbm5lbERhdGFBcnJheSA9IEZsb2F0MzJBcnJheTo6Y3JlYXRlKG1fbGVuZ3RoKTsKKyAgICAg
ICAgY2hhbm5lbERhdGFBcnJheS0+c2V0UmFuZ2UoYnVzLT5jaGFubmVsKGkpLT5kYXRhKCksIG1f
bGVuZ3RoLCAwKTsKKyAgICAgICAgbV9jaGFubmVscy5hcHBlbmQoY2hhbm5lbERhdGFBcnJheSk7
CisgICAgfQorfQorCit2b2lkIEF1ZGlvQnVmZmVyOjpyZWxlYXNlTWVtb3J5KCkKK3sKKyAgICBt
X2NoYW5uZWxzLmNsZWFyKCk7Cit9CisKK0Zsb2F0MzJBcnJheSogQXVkaW9CdWZmZXI6OmdldENo
YW5uZWxEYXRhKHVuc2lnbmVkIGNoYW5uZWxJbmRleCkKK3sKKyAgICBpZiAoY2hhbm5lbEluZGV4
ID49IG1fY2hhbm5lbHMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBt
X2NoYW5uZWxzW2NoYW5uZWxJbmRleF0uZ2V0KCk7Cit9CisKK3ZvaWQgQXVkaW9CdWZmZXI6Onpl
cm8oKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NoYW5uZWxzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChnZXRDaGFubmVsRGF0YShpKSkKKyAgICAgICAgICAgIGdldENo
YW5uZWxEYXRhKGkpLT56ZXJvUmFuZ2UoMCwgbGVuZ3RoKCkpOworICAgIH0KK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgJKHJldmlzaW9u
IDExMTQzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaDoxMTE0
MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXVkaW9CdWZmZXJfaAorI2Rl
ZmluZSBBdWRpb0J1ZmZlcl9oCisKKyNpbmNsdWRlIDx3dGYvRmxvYXQzMkFycmF5Lmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9CdXM7CisgICAgCitjbGFzcyBBdWRpb0J1ZmZlciA6
IHB1YmxpYyBSZWZDb3VudGVkPEF1ZGlvQnVmZmVyPiB7CitwdWJsaWM6ICAgCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxz
LCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMsIGZsb2F0IHNhbXBsZVJhdGUpOworCisgICAgLy8gUmV0
dXJucyAwIGlmIGRhdGEgaXMgbm90IGEgdmFsaWQgYXVkaW8gZmlsZS4KKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxBdWRpb0J1ZmZlcj4gY3JlYXRlRnJvbUF1ZGlvRmlsZURhdGEoY29uc3Qgdm9pZCog
ZGF0YSwgc2l6ZV90IGRhdGFTaXplLCBib29sIG1peFRvTW9ubywgZmxvYXQgc2FtcGxlUmF0ZSk7
CisKKyAgICAvLyBGb3JtYXQKKyAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9s
ZW5ndGg7IH0KKyAgICBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBsZW5ndGgoKSAv
IHNhbXBsZVJhdGUoKTsgfQorICAgIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBt
X3NhbXBsZVJhdGU7IH0KKworICAgIC8vIENoYW5uZWwgZGF0YSBhY2Nlc3MKKyAgICB1bnNpZ25l
ZCBudW1iZXJPZkNoYW5uZWxzKCkgY29uc3QgeyByZXR1cm4gbV9jaGFubmVscy5zaXplKCk7IH0K
KyAgICBGbG9hdDMyQXJyYXkqIGdldENoYW5uZWxEYXRhKHVuc2lnbmVkIGNoYW5uZWxJbmRleCk7
CisgICAgdm9pZCB6ZXJvKCk7CisKKyAgICAvLyBTY2FsYXIgZ2FpbgorICAgIGRvdWJsZSBnYWlu
KCkgY29uc3QgeyByZXR1cm4gbV9nYWluOyB9CisgICAgdm9pZCBzZXRHYWluKGRvdWJsZSBnYWlu
KSB7IG1fZ2FpbiA9IGdhaW47IH0KKworICAgIC8vIEJlY2F1c2UgYW4gQXVkaW9CdWZmZXIgaGFz
IGEgSmF2YVNjcmlwdCB3cmFwcGVyLCB3aGljaCB3aWxsIGJlIGdhcmJhZ2UgY29sbGVjdGVkLCBp
dCBtYXkgdGFrZSBhd2hpbGUgZm9yIHRoaXMgb2JqZWN0IHRvIGJlIGRlbGV0ZWQuCisgICAgLy8g
cmVsZWFzZU1lbW9yeSgpIGNhbiBiZSBjYWxsZWQgd2hlbiB0aGUgQXVkaW9Db250ZXh0IGdvZXMg
YXdheSwgc28gd2UgY2FuIHJlbGVhc2UgdGhlIG1lbW9yeSBlYXJsaWVyIHRoYW4gd2hlbiB0aGUg
Z2FyYmFnZSBjb2xsZWN0aW9uIGhhcHBlbnMuCisgICAgLy8gQ2FyZWZ1bCEgT25seSBjYWxsIHRo
aXMgd2hlbiB0aGUgcGFnZSB1bmxvYWRzLCBhZnRlciB0aGUgQXVkaW9Db250ZXh0IGlzIG5vIGxv
bmdlciBwcm9jZXNzaW5nLgorICAgIHZvaWQgcmVsZWFzZU1lbW9yeSgpOworICAgIAorcHJvdGVj
dGVkOgorICAgIEF1ZGlvQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBu
dW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSk7CisgICAgQXVkaW9CdWZmZXIoQXVkaW9C
dXMqIGJ1cyk7CisKKyAgICBkb3VibGUgbV9nYWluOyAvLyBzY2FsYXIgZ2FpbgorICAgIGZsb2F0
IG1fc2FtcGxlUmF0ZTsKKyAgICBzaXplX3QgbV9sZW5ndGg7CisKKyAgICBWZWN0b3I8UmVmUHRy
PEZsb2F0MzJBcnJheT4gPiBtX2NoYW5uZWxzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gQXVkaW9CdWZmZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0J1ZmZlci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlci5pZGwJKHJldmlzaW9uIDExMTQzMykJKGZyb20g
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaWRsOjExMTQzMykKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaWRsCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgYXVkaW8geworICAgIGludGVyZmFjZSBbCisgICAg
ICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTworICAgIF0gQXVkaW9CdWZmZXIgeworICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBsZW5ndGg7IC8vIGluIHNhbXBsZS1mcmFtZXMKKyAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0IGR1cmF0aW9uOyAvLyBpbiBzZWNvbmRzCisgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBmbG9hdCBzYW1wbGVSYXRlOyAvLyBpbiBzYW1wbGUtZnJh
bWVzIHBlciBzZWNvbmQKKworICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgZ2FpbjsgLy8gbGluZWFy
IGdhaW4gKGRlZmF1bHQgMS4wKQorCisgICAgICAgIC8vIENoYW5uZWwgYWNjZXNzCisgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIG51bWJlck9mQ2hhbm5lbHM7CisgICAg
ICAgIEZsb2F0MzJBcnJheSBnZXRDaGFubmVsRGF0YShpbiB1bnNpZ25lZCBsb25nIGNoYW5uZWxJ
bmRleCk7CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9CdWZmZXJDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFjay5oCShyZXZpc2lvbiAxMTE0MzMpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyQ2FsbGJhY2suaDoxMTE0MzMpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyQ2FsbGJhY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBdWRp
b0J1ZmZlckNhbGxiYWNrX2gKKyNkZWZpbmUgQXVkaW9CdWZmZXJDYWxsYmFja19oCisKKyNpZiBF
TkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb0J1ZmZlcjsKKworY2xhc3MgQXVkaW9CdWZmZXJD
YWxsYmFjayA6IHB1YmxpYyBSZWZDb3VudGVkPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5BdWRpb0J1ZmZlckNhbGxiYWNrKCkgeyB9CisgICAgdmlydHVhbCBi
b29sIGhhbmRsZUV2ZW50KEF1ZGlvQnVmZmVyKikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UK
KworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCisKKyNlbmRpZiAvLyBBdWRpb0J1ZmZlckNh
bGxiYWNrX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZm
ZXJDYWxsYmFjay5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0J1ZmZlckNhbGxiYWNrLmlkbAkocmV2aXNpb24gMTExNDMzKQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlckNhbGxiYWNrLmlkbDoxMTE0MzMpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyQ2FsbGJhY2suaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgYXVkaW8g
eworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKKyAgICAg
ICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QsCisgICAgICAgIENhbGxiYWNrCisgICAgXSBBdWRpb0J1
ZmZlckNhbGxiYWNrIHsKKyAgICAgICAgYm9vbGVhbiBoYW5kbGVFdmVudChpbiBBdWRpb0J1ZmZl
ciBhdWRpb0J1ZmZlcik7CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5jcHAJKHJldmlz
aW9uIDExMTQzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3Vy
Y2VOb2RlLmNwcDoxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQnVmZmVyU291cmNlTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElP
KQorCisjaW5jbHVkZSAiQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmgiCisKKyNpbmNsdWRlICJBdWRp
b0NvbnRleHQuaCIKKyNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKKyNpbmNsdWRlICJBdWRp
b1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRmxvYXRDb252
ZXJzaW9uLmgiCisjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCisjaW5jbHVkZSA8YWxnb3Jp
dGhtPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
b25zdCBkb3VibGUgRGVmYXVsdEdyYWluRHVyYXRpb24gPSAwLjAyMDsgLy8gMjBtcworY29uc3Qg
ZG91YmxlIFVua25vd25UaW1lID0gLTE7CisKKy8vIEFyYml0cmFyeSB1cHBlciBsaW1pdCBvbiBw
bGF5YmFjayByYXRlLgorLy8gSGlnaGVyIHRoYW4gZXhwZWN0ZWQgcmF0ZXMgY2FuIGJlIHVzZWZ1
bCB3aGVuIHBsYXlpbmcgYmFjayBvdmVyc2FtcGxlZCBidWZmZXJzCisvLyB0byBtaW5pbWl6ZSBs
aW5lYXIgaW50ZXJwb2xhdGlvbiBhbGlhc2luZy4KK2NvbnN0IGRvdWJsZSBNYXhSYXRlID0gMTAy
NDsKKworUGFzc1JlZlB0cjxBdWRpb0J1ZmZlclNvdXJjZU5vZGU+IEF1ZGlvQnVmZmVyU291cmNl
Tm9kZTo6Y3JlYXRlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvQnVmZmVyU291cmNlTm9kZShjb250ZXh0LCBz
YW1wbGVSYXRlKSk7Cit9CisKK0F1ZGlvQnVmZmVyU291cmNlTm9kZTo6QXVkaW9CdWZmZXJTb3Vy
Y2VOb2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKKyAgICA6IEF1
ZGlvU291cmNlTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQorICAgICwgbV9idWZmZXIoMCkKKyAg
ICAsIG1faXNMb29waW5nKGZhbHNlKQorICAgICwgbV9zdGFydFRpbWUoMC4wKQorICAgICwgbV9l
bmRUaW1lKFVua25vd25UaW1lKQorICAgICwgbV92aXJ0dWFsUmVhZEluZGV4KDApCisgICAgLCBt
X2lzR3JhaW4oZmFsc2UpCisgICAgLCBtX2dyYWluT2Zmc2V0KDAuMCkKKyAgICAsIG1fZ3JhaW5E
dXJhdGlvbihEZWZhdWx0R3JhaW5EdXJhdGlvbikKKyAgICAsIG1fbGFzdEdhaW4oMS4wKQorICAg
ICwgbV9wYW5uZXJOb2RlKDApCisgICAgLCBtX3BsYXliYWNrU3RhdGUoVU5TQ0hFRFVMRURfU1RB
VEUpCit7CisgICAgc2V0Tm9kZVR5cGUoTm9kZVR5cGVBdWRpb0J1ZmZlclNvdXJjZSk7CisKKyAg
ICBtX2dhaW4gPSBBdWRpb0dhaW46OmNyZWF0ZSgiZ2FpbiIsIDEuMCwgMC4wLCAxLjApOworICAg
IG1fcGxheWJhY2tSYXRlID0gQXVkaW9QYXJhbTo6Y3JlYXRlKCJwbGF5YmFja1JhdGUiLCAxLjAs
IDAuMCwgTWF4UmF0ZSk7CisgICAgCisgICAgbV9nYWluLT5zZXRDb250ZXh0KGNvbnRleHQpOwor
ICAgIG1fcGxheWJhY2tSYXRlLT5zZXRDb250ZXh0KGNvbnRleHQpOworCisgICAgLy8gRGVmYXVs
dCB0byBtb25vLiAgQSBjYWxsIHRvIHNldEJ1ZmZlcigpIHdpbGwgc2V0IHRoZSBudW1iZXIgb2Yg
b3V0cHV0IGNoYW5uZWxzIHRvIHRoYXQgb2YgdGhlIGJ1ZmZlci4KKyAgICBhZGRPdXRwdXQoYWRv
cHRQdHIobmV3IEF1ZGlvTm9kZU91dHB1dCh0aGlzLCAxKSkpOworCisgICAgaW5pdGlhbGl6ZSgp
OworfQorCitBdWRpb0J1ZmZlclNvdXJjZU5vZGU6On5BdWRpb0J1ZmZlclNvdXJjZU5vZGUoKQor
eworICAgIHVuaW5pdGlhbGl6ZSgpOworfQorCit2b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6
cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIEF1ZGlvQnVzKiBvdXRwdXRC
dXMgPSBvdXRwdXQoMCktPmJ1cygpOworCisgICAgaWYgKCFpc0luaXRpYWxpemVkKCkpIHsKKyAg
ICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBUaGUgYXVkaW8gdGhyZWFkIGNhbid0IGJsb2NrIG9uIHRoaXMgbG9jaywgc28gd2UgY2FsbCB0
cnlMb2NrKCkgaW5zdGVhZC4KKyAgICAvLyBDYXJlZnVsIC0gdGhpcyBpcyBhIHRyeUxvY2soKSBh
bmQgbm90IGFuIGF1dG9sb2NrZXIsIHNvIHdlIG11c3QgdW5sb2NrKCkgYmVmb3JlIGV2ZXJ5IHJl
dHVybi4KKyAgICBpZiAobV9wcm9jZXNzTG9jay50cnlMb2NrKCkpIHsKKyAgICAgICAgLy8gQ2hl
Y2sgaWYgaXQncyB0aW1lIHRvIHN0YXJ0IHBsYXlpbmcuCisgICAgICAgIGRvdWJsZSBzYW1wbGVS
YXRlID0gdGhpcy0+c2FtcGxlUmF0ZSgpOworICAgICAgICBzaXplX3QgcXVhbnR1bVN0YXJ0RnJh
bWUgPSBjb250ZXh0KCktPmN1cnJlbnRTYW1wbGVGcmFtZSgpOworICAgICAgICBzaXplX3QgcXVh
bnR1bUVuZEZyYW1lID0gcXVhbnR1bVN0YXJ0RnJhbWUgKyBmcmFtZXNUb1Byb2Nlc3M7CisgICAg
ICAgIHNpemVfdCBzdGFydEZyYW1lID0gQXVkaW9VdGlsaXRpZXM6OnRpbWVUb1NhbXBsZUZyYW1l
KG1fc3RhcnRUaW1lLCBzYW1wbGVSYXRlKTsKKyAgICAgICAgc2l6ZV90IGVuZEZyYW1lID0gbV9l
bmRUaW1lID09IFVua25vd25UaW1lID8gMCA6IEF1ZGlvVXRpbGl0aWVzOjp0aW1lVG9TYW1wbGVG
cmFtZShtX2VuZFRpbWUsIHNhbXBsZVJhdGUpOworCisgICAgICAgIC8vIElmIHdlIGtub3cgdGhl
IGVuZCB0aW1lIGFuZCBpdCdzIGFscmVhZHkgcGFzc2VkLCB0aGVuIGRvbid0IGJvdGhlciBkb2lu
ZyBhbnkgbW9yZSByZW5kZXJpbmcgdGhpcyBjeWNsZS4KKyAgICAgICAgaWYgKG1fZW5kVGltZSAh
PSBVbmtub3duVGltZSAmJiBlbmRGcmFtZSA8PSBxdWFudHVtU3RhcnRGcmFtZSkgeworICAgICAg
ICAgICAgbV92aXJ0dWFsUmVhZEluZGV4ID0gMDsKKyAgICAgICAgICAgIGZpbmlzaCgpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9wbGF5YmFja1N0YXRlID09IFVOU0NIRURV
TEVEX1NUQVRFIHx8IG1fcGxheWJhY2tTdGF0ZSA9PSBGSU5JU0hFRF9TVEFURQorICAgICAgICAg
ICAgfHwgIWJ1ZmZlcigpIHx8IHN0YXJ0RnJhbWUgPj0gcXVhbnR1bUVuZEZyYW1lKSB7CisgICAg
ICAgICAgICAvLyBGSVhNRTogY2FuIG9wdGltaXplIGhlcmUgYnkgcHJvcGFnYXRpbmcgc2lsZW50
IGhpbnQgaW5zdGVhZCBvZiBmb3JjaW5nIHRoZSB3aG9sZSBjaGFpbiB0byBwcm9jZXNzIHNpbGVu
Y2UuCisgICAgICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKKyAgICAgICAgICAgIG1fcHJvY2Vz
c0xvY2sudW5sb2NrKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobV9wbGF5YmFja1N0YXRlID09IFNDSEVEVUxFRF9TVEFURSkgeworICAgICAgICAgICAg
Ly8gSW5jcmVtZW50IHRoZSBhY3RpdmUgc291cmNlIGNvdW50IG9ubHkgaWYgd2UncmUgdHJhbnNp
dGlvbmluZyBmcm9tIFNDSEVEVUxFRF9TVEFURSB0byBQTEFZSU5HX1NUQVRFLgorICAgICAgICAg
ICAgbV9wbGF5YmFja1N0YXRlID0gUExBWUlOR19TVEFURTsKKyAgICAgICAgICAgIGNvbnRleHQo
KS0+aW5jcmVtZW50QWN0aXZlU291cmNlQ291bnQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgc2l6ZV90IHF1YW50dW1GcmFtZU9mZnNldCA9IHN0YXJ0RnJhbWUgPiBxdWFudHVtU3Rh
cnRGcmFtZSA/IHN0YXJ0RnJhbWUgLSBxdWFudHVtU3RhcnRGcmFtZSA6IDA7CisgICAgICAgIHF1
YW50dW1GcmFtZU9mZnNldCA9IG1pbihxdWFudHVtRnJhbWVPZmZzZXQsIGZyYW1lc1RvUHJvY2Vz
cyk7IC8vIGNsYW1wIHRvIHZhbGlkIHJhbmdlCisgICAgICAgIHNpemVfdCBidWZmZXJGcmFtZXNU
b1Byb2Nlc3MgPSBmcmFtZXNUb1Byb2Nlc3MgLSBxdWFudHVtRnJhbWVPZmZzZXQ7CisKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG91dHB1dEJ1cy0+bnVtYmVyT2ZDaGFubmVscygp
OyArK2kpIAorICAgICAgICAgICAgbV9kZXN0aW5hdGlvbkNoYW5uZWxzW2ldID0gb3V0cHV0QnVz
LT5jaGFubmVsKGkpLT5tdXRhYmxlRGF0YSgpOworCisgICAgICAgIC8vIFJlbmRlciBieSByZWFk
aW5nIGRpcmVjdGx5IGZyb20gdGhlIGJ1ZmZlci4KKyAgICAgICAgcmVuZGVyRnJvbUJ1ZmZlcihv
dXRwdXRCdXMsIHF1YW50dW1GcmFtZU9mZnNldCwgYnVmZmVyRnJhbWVzVG9Qcm9jZXNzKTsKKwor
ICAgICAgICAvLyBBcHBseSB0aGUgZ2FpbiAoaW4tcGxhY2UpIHRvIHRoZSBvdXRwdXQgYnVzLgor
ICAgICAgICBmbG9hdCB0b3RhbEdhaW4gPSBnYWluKCktPnZhbHVlKCkgKiBtX2J1ZmZlci0+Z2Fp
bigpOworICAgICAgICBvdXRwdXRCdXMtPmNvcHlXaXRoR2FpbkZyb20oKm91dHB1dEJ1cywgJm1f
bGFzdEdhaW4sIHRvdGFsR2Fpbik7CisKKyAgICAgICAgLy8gSWYgdGhlIGVuZCB0aW1lIGlzIHNv
bWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHRoaXMgdGltZSBxdWFudHVtLCB0aGVuIHNpbXBseSB6
ZXJvIG91dCB0aGUKKyAgICAgICAgLy8gZnJhbWVzIHN0YXJ0aW5nIGF0IHRoZSBlbmQgdGltZS4K
KyAgICAgICAgaWYgKG1fZW5kVGltZSAhPSBVbmtub3duVGltZSAmJiBlbmRGcmFtZSA+PSBxdWFu
dHVtU3RhcnRGcmFtZSAmJiBlbmRGcmFtZSA8IHF1YW50dW1FbmRGcmFtZSkgeworICAgICAgICAg
ICAgc2l6ZV90IHplcm9TdGFydEZyYW1lID0gZW5kRnJhbWUgLSBxdWFudHVtU3RhcnRGcmFtZTsK
KyAgICAgICAgICAgIHNpemVfdCBmcmFtZXNUb1plcm8gPSBmcmFtZXNUb1Byb2Nlc3MgLSB6ZXJv
U3RhcnRGcmFtZTsKKworICAgICAgICAgICAgYm9vbCBpc1NhZmUgPSB6ZXJvU3RhcnRGcmFtZSA8
IGZyYW1lc1RvUHJvY2VzcyAmJiBmcmFtZXNUb1plcm8gPD0gZnJhbWVzVG9Qcm9jZXNzICYmIHpl
cm9TdGFydEZyYW1lICsgZnJhbWVzVG9aZXJvIDw9IGZyYW1lc1RvUHJvY2VzczsKKyAgICAgICAg
ICAgIEFTU0VSVChpc1NhZmUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaXNTYWZl
KSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG91dHB1dEJ1cy0+
bnVtYmVyT2ZDaGFubmVscygpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIG1lbXNldChtX2Rl
c3RpbmF0aW9uQ2hhbm5lbHNbaV0gKyB6ZXJvU3RhcnRGcmFtZSwgMCwgc2l6ZW9mKGZsb2F0KSAq
IGZyYW1lc1RvWmVybyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1fdmlydHVhbFJl
YWRJbmRleCA9IDA7CisKKyAgICAgICAgICAgIGZpbmlzaCgpOworICAgICAgICB9CisKKyAgICAg
ICAgbV9wcm9jZXNzTG9jay51bmxvY2soKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBUb28g
YmFkIC0gdGhlIHRyeUxvY2soKSBmYWlsZWQuICBXZSBtdXN0IGJlIGluIHRoZSBtaWRkbGUgb2Yg
Y2hhbmdpbmcgYnVmZmVycyBhbmQgd2VyZSBhbHJlYWR5IG91dHB1dHRpbmcgc2lsZW5jZSBhbnl3
YXkuCisgICAgICAgIG91dHB1dEJ1cy0+emVybygpOworICAgIH0KK30KKworLy8gUmV0dXJucyB0
cnVlIGlmIHdlJ3JlIGZpbmlzaGVkLgorYm9vbCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnJlbmRl
clNpbGVuY2VBbmRGaW5pc2hJZk5vdExvb3BpbmcoQXVkaW9CdXMqLCB1bnNpZ25lZCBpbmRleCwg
c2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICBpZiAoIWxvb3AoKSkgeworICAgICAgICAv
LyBJZiB3ZSdyZSBub3QgbG9vcGluZywgdGhlbiBzdG9wIHBsYXlpbmcgd2hlbiB3ZSBnZXQgdG8g
dGhlIGVuZC4KKworICAgICAgICBpZiAoZnJhbWVzVG9Qcm9jZXNzID4gMCkgeworICAgICAgICAg
ICAgLy8gV2UncmUgbm90IGxvb3BpbmcgYW5kIHdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUg
c2FtcGxlIGRhdGEsIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvIHByb3ZpZGUgbW9yZSBvdXRwdXQsCisg
ICAgICAgICAgICAvLyBzbyBnZW5lcmF0ZSBzaWxlbmNlIGZvciB0aGUgcmVtYWluaW5nLgorICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHMoKTsgKytp
KSAKKyAgICAgICAgICAgICAgICBtZW1zZXQobV9kZXN0aW5hdGlvbkNoYW5uZWxzW2ldICsgaW5k
ZXgsIDAsIHNpemVvZihmbG9hdCkgKiBmcmFtZXNUb1Byb2Nlc3MpOworICAgICAgICB9CisKKyAg
ICAgICAgZmluaXNoKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpyZW5kZXJGcm9tQnVmZmVy
KEF1ZGlvQnVzKiBidXMsIHVuc2lnbmVkIGRlc3RpbmF0aW9uRnJhbWVPZmZzZXQsIHNpemVfdCBu
dW1iZXJPZkZyYW1lcykKK3sKKyAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkp
OworICAgIAorICAgIC8vIEJhc2ljIHNhbml0eSBjaGVja2luZworICAgIEFTU0VSVChidXMpOwor
ICAgIEFTU0VSVChidWZmZXIoKSk7CisgICAgaWYgKCFidXMgfHwgIWJ1ZmZlcigpKQorICAgICAg
ICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzID0gdGhpcy0+bnVtYmVy
T2ZDaGFubmVscygpOworICAgIHVuc2lnbmVkIGJ1c051bWJlck9mQ2hhbm5lbHMgPSBidXMtPm51
bWJlck9mQ2hhbm5lbHMoKTsKKworICAgIGJvb2wgY2hhbm5lbENvdW50R29vZCA9IG51bWJlck9m
Q2hhbm5lbHMgJiYgbnVtYmVyT2ZDaGFubmVscyA9PSBidXNOdW1iZXJPZkNoYW5uZWxzOworICAg
IEFTU0VSVChjaGFubmVsQ291bnRHb29kKTsKKyAgICBpZiAoIWNoYW5uZWxDb3VudEdvb2QpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIFNhbml0eSBjaGVjayBkZXN0aW5hdGlvbkZyYW1lT2Zm
c2V0LCBudW1iZXJPZkZyYW1lcy4KKyAgICBzaXplX3QgZGVzdGluYXRpb25MZW5ndGggPSBidXMt
Pmxlbmd0aCgpOworCisgICAgYm9vbCBpc0xlbmd0aEdvb2QgPSBkZXN0aW5hdGlvbkxlbmd0aCA8
PSA0MDk2ICYmIG51bWJlck9mRnJhbWVzIDw9IDQwOTY7CisgICAgQVNTRVJUKGlzTGVuZ3RoR29v
ZCk7CisgICAgaWYgKCFpc0xlbmd0aEdvb2QpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wg
aXNPZmZzZXRHb29kID0gZGVzdGluYXRpb25GcmFtZU9mZnNldCA8PSBkZXN0aW5hdGlvbkxlbmd0
aCAmJiBkZXN0aW5hdGlvbkZyYW1lT2Zmc2V0ICsgbnVtYmVyT2ZGcmFtZXMgPD0gZGVzdGluYXRp
b25MZW5ndGg7CisgICAgQVNTRVJUKGlzT2Zmc2V0R29vZCk7CisgICAgaWYgKCFpc09mZnNldEdv
b2QpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFBvdGVudGlhbGx5IHplcm8gb3V0IGluaXRp
YWwgZnJhbWVzIGxlYWRpbmcgdXAgdG8gdGhlIG9mZnNldC4KKyAgICBpZiAoZGVzdGluYXRpb25G
cmFtZU9mZnNldCkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZD
aGFubmVsczsgKytpKSAKKyAgICAgICAgICAgIG1lbXNldChtX2Rlc3RpbmF0aW9uQ2hhbm5lbHNb
aV0sIDAsIHNpemVvZihmbG9hdCkgKiBkZXN0aW5hdGlvbkZyYW1lT2Zmc2V0KTsKKyAgICB9CisK
KyAgICAvLyBPZmZzZXQgdGhlIHBvaW50ZXJzIHRvIHRoZSBjb3JyZWN0IG9mZnNldCBmcmFtZS4K
KyAgICB1bnNpZ25lZCB3cml0ZUluZGV4ID0gZGVzdGluYXRpb25GcmFtZU9mZnNldDsKKworICAg
IHNpemVfdCBidWZmZXJMZW5ndGggPSBidWZmZXIoKS0+bGVuZ3RoKCk7CisgICAgZG91YmxlIGJ1
ZmZlclNhbXBsZVJhdGUgPSBidWZmZXIoKS0+c2FtcGxlUmF0ZSgpOworCisgICAgLy8gQ2FsY3Vs
YXRlIHRoZSBzdGFydCBhbmQgZW5kIGZyYW1lcyBpbiBvdXIgYnVmZmVyIHRoYXQgd2Ugd2FudCB0
byBwbGF5LgorICAgIC8vIElmIG1faXNHcmFpbiBpcyB0cnVlLCB0aGVuIHdlIHdpbGwgYmUgcGxh
eWluZyBhIHBvcnRpb24gb2YgdGhlIHRvdGFsIGJ1ZmZlci4KKyAgICB1bnNpZ25lZCBzdGFydEZy
YW1lID0gbV9pc0dyYWluID8gQXVkaW9VdGlsaXRpZXM6OnRpbWVUb1NhbXBsZUZyYW1lKG1fZ3Jh
aW5PZmZzZXQsIGJ1ZmZlclNhbXBsZVJhdGUpIDogMDsKKworICAgIC8vIEF2b2lkIGNvbnZlcnRp
bmcgZnJvbSB0aW1lIHRvIHNhbXBsZS1mcmFtZXMgdHdpY2UgYnkgY29tcHV0aW5nCisgICAgLy8g
dGhlIGdyYWluIGVuZCB0aW1lIGZpcnN0IGJlZm9yZSBjb21wdXRpbmcgdGhlIHNhbXBsZSBmcmFt
ZS4KKyAgICB1bnNpZ25lZCBlbmRGcmFtZSA9IG1faXNHcmFpbiA/IEF1ZGlvVXRpbGl0aWVzOjp0
aW1lVG9TYW1wbGVGcmFtZShtX2dyYWluT2Zmc2V0ICsgbV9ncmFpbkR1cmF0aW9uLCBidWZmZXJT
YW1wbGVSYXRlKSA6IGJ1ZmZlckxlbmd0aDsKKyAgICAKKyAgICBBU1NFUlQoZW5kRnJhbWUgPj0g
c3RhcnRGcmFtZSk7CisgICAgaWYgKGVuZEZyYW1lIDwgc3RhcnRGcmFtZSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIHVuc2lnbmVkIGRlbHRhRnJhbWVzID0gZW5kRnJhbWUgLSBzdGFydEZy
YW1lOworICAgIAorICAgIC8vIFRoaXMgaXMgYSBIQUNLIHRvIGFsbG93IGZvciBIUlRGIHRhaWwt
dGltZSAtIGF2b2lkcyBnbGl0Y2ggYXQgZW5kLgorICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGFp
bFRpbWUgZm9yIGVhY2ggQXVkaW9Ob2RlIGZvciBhIG1vcmUgZ2VuZXJhbCBzb2x1dGlvbiB0byB0
aGlzIHByb2JsZW0uCisgICAgaWYgKG1faXNHcmFpbikKKyAgICAgICAgZW5kRnJhbWUgKz0gNTEy
OworCisgICAgLy8gRG8gc29tZSBzYW5pdHkgY2hlY2tpbmcuCisgICAgaWYgKHN0YXJ0RnJhbWUg
Pj0gYnVmZmVyTGVuZ3RoKQorICAgICAgICBzdGFydEZyYW1lID0gIWJ1ZmZlckxlbmd0aCA/IDAg
OiBidWZmZXJMZW5ndGggLSAxOworICAgIGlmIChlbmRGcmFtZSA+IGJ1ZmZlckxlbmd0aCkKKyAg
ICAgICAgZW5kRnJhbWUgPSBidWZmZXJMZW5ndGg7CisgICAgaWYgKG1fdmlydHVhbFJlYWRJbmRl
eCA+PSBlbmRGcmFtZSkKKyAgICAgICAgbV92aXJ0dWFsUmVhZEluZGV4ID0gc3RhcnRGcmFtZTsg
Ly8gcmVzZXQgdG8gc3RhcnQKKworICAgIGRvdWJsZSBwaXRjaFJhdGUgPSB0b3RhbFBpdGNoUmF0
ZSgpOworCisgICAgLy8gR2V0IGxvY2FsIGNvcHkuCisgICAgZG91YmxlIHZpcnR1YWxSZWFkSW5k
ZXggPSBtX3ZpcnR1YWxSZWFkSW5kZXg7CisKKyAgICAvLyBSZW5kZXIgbG9vcCAtIHJlYWRpbmcg
ZnJvbSB0aGUgc291cmNlIGJ1ZmZlciB0byB0aGUgZGVzdGluYXRpb24gdXNpbmcgbGluZWFyIGlu
dGVycG9sYXRpb24uCisgICAgaW50IGZyYW1lc1RvUHJvY2VzcyA9IG51bWJlck9mRnJhbWVzOwor
CisgICAgY29uc3QgZmxvYXQqKiBzb3VyY2VDaGFubmVscyA9IG1fc291cmNlQ2hhbm5lbHMuZ2V0
KCk7CisgICAgZmxvYXQqKiBkZXN0aW5hdGlvbkNoYW5uZWxzID0gbV9kZXN0aW5hdGlvbkNoYW5u
ZWxzLmdldCgpOworCisgICAgLy8gT3B0aW1pemUgZm9yIHRoZSB2ZXJ5IGNvbW1vbiBjYXNlIG9m
IHBsYXlpbmcgYmFjayB3aXRoIHBpdGNoUmF0ZSA9PSAxLgorICAgIC8vIFdlIGNhbiBhdm9pZCB0
aGUgbGluZWFyIGludGVycG9sYXRpb24uCisgICAgaWYgKHBpdGNoUmF0ZSA9PSAxICYmIHZpcnR1
YWxSZWFkSW5kZXggPT0gZmxvb3IodmlydHVhbFJlYWRJbmRleCkpIHsKKyAgICAgICAgdW5zaWdu
ZWQgcmVhZEluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZpcnR1YWxSZWFkSW5kZXgpOwor
ICAgICAgICB3aGlsZSAoZnJhbWVzVG9Qcm9jZXNzID4gMCkgeworICAgICAgICAgICAgaW50IGZy
YW1lc1RvRW5kID0gZW5kRnJhbWUgLSByZWFkSW5kZXg7CisgICAgICAgICAgICBpbnQgZnJhbWVz
VGhpc1RpbWUgPSBtaW4oZnJhbWVzVG9Qcm9jZXNzLCBmcmFtZXNUb0VuZCk7CisgICAgICAgICAg
ICBmcmFtZXNUaGlzVGltZSA9IG1heCgwLCBmcmFtZXNUaGlzVGltZSk7CisKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpIAorICAgICAg
ICAgICAgICAgIG1lbWNweShkZXN0aW5hdGlvbkNoYW5uZWxzW2ldICsgd3JpdGVJbmRleCwgc291
cmNlQ2hhbm5lbHNbaV0gKyByZWFkSW5kZXgsIHNpemVvZihmbG9hdCkgKiBmcmFtZXNUaGlzVGlt
ZSk7CisKKyAgICAgICAgICAgIHdyaXRlSW5kZXggKz0gZnJhbWVzVGhpc1RpbWU7CisgICAgICAg
ICAgICByZWFkSW5kZXggKz0gZnJhbWVzVGhpc1RpbWU7CisgICAgICAgICAgICBmcmFtZXNUb1By
b2Nlc3MgLT0gZnJhbWVzVGhpc1RpbWU7CisKKyAgICAgICAgICAgIC8vIFdyYXAtYXJvdW5kLgor
ICAgICAgICAgICAgaWYgKHJlYWRJbmRleCA+PSBlbmRGcmFtZSkgeworICAgICAgICAgICAgICAg
IHJlYWRJbmRleCAtPSBkZWx0YUZyYW1lczsKKyAgICAgICAgICAgICAgICBpZiAocmVuZGVyU2ls
ZW5jZUFuZEZpbmlzaElmTm90TG9vcGluZyhidXMsIHdyaXRlSW5kZXgsIGZyYW1lc1RvUHJvY2Vz
cykpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHZpcnR1YWxSZWFkSW5kZXggPSByZWFkSW5kZXg7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgd2hpbGUgKGZyYW1lc1RvUHJvY2Vzcy0tKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBy
ZWFkSW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmlydHVhbFJlYWRJbmRleCk7CisgICAg
ICAgICAgICBkb3VibGUgaW50ZXJwb2xhdGlvbkZhY3RvciA9IHZpcnR1YWxSZWFkSW5kZXggLSBy
ZWFkSW5kZXg7CisKKyAgICAgICAgICAgIC8vIEZvciBsaW5lYXIgaW50ZXJwb2xhdGlvbiB3ZSBu
ZWVkIHRoZSBuZXh0IHNhbXBsZS1mcmFtZSB0b28uCisgICAgICAgICAgICB1bnNpZ25lZCByZWFk
SW5kZXgyID0gcmVhZEluZGV4ICsgMTsKKyAgICAgICAgICAgIGlmIChyZWFkSW5kZXgyID49IGVu
ZEZyYW1lKSB7CisgICAgICAgICAgICAgICAgaWYgKGxvb3AoKSkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBNYWtlIHN1cmUgdG8gd3JhcCBhcm91bmQgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVy
LgorICAgICAgICAgICAgICAgICAgICByZWFkSW5kZXgyIC09IGRlbHRhRnJhbWVzOworICAgICAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByZWFkSW5kZXgyID0gcmVhZElu
ZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGaW5hbCBzYW5pdHkgY2hlY2sg
b24gYnVmZmVyIGFjY2Vzcy4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBhcyBhbiBvcHRpbWl6YXRp
b24sIHRyeSB0byBnZXQgcmlkIG9mIHRoaXMgaW5uZXItbG9vcCBjaGVjayBhbmQgcHV0IGFzc2Vy
dGlvbnMgYW5kIGd1YXJkcyBiZWZvcmUgdGhlIGxvb3AuCisgICAgICAgICAgICBpZiAocmVhZElu
ZGV4ID49IGJ1ZmZlckxlbmd0aCB8fCByZWFkSW5kZXgyID49IGJ1ZmZlckxlbmd0aCkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLy8gTGluZWFyIGludGVycG9sYXRpb24u
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsg
KytpKSB7CisgICAgICAgICAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uID0gZGVzdGluYXRpb25D
aGFubmVsc1tpXTsKKyAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCogc291cmNlID0gc291cmNl
Q2hhbm5lbHNbaV07CisKKyAgICAgICAgICAgICAgICBkb3VibGUgc2FtcGxlMSA9IHNvdXJjZVty
ZWFkSW5kZXhdOworICAgICAgICAgICAgICAgIGRvdWJsZSBzYW1wbGUyID0gc291cmNlW3JlYWRJ
bmRleDJdOworICAgICAgICAgICAgICAgIGRvdWJsZSBzYW1wbGUgPSAoMS4wIC0gaW50ZXJwb2xh
dGlvbkZhY3RvcikgKiBzYW1wbGUxICsgaW50ZXJwb2xhdGlvbkZhY3RvciAqIHNhbXBsZTI7CisK
KyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblt3cml0ZUluZGV4XSA9IG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoc2FtcGxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdyaXRlSW5kZXgr
KzsKKworICAgICAgICAgICAgdmlydHVhbFJlYWRJbmRleCArPSBwaXRjaFJhdGU7CisKKyAgICAg
ICAgICAgIC8vIFdyYXAtYXJvdW5kLCByZXRhaW5pbmcgc3ViLXNhbXBsZSBwb3NpdGlvbiBzaW5j
ZSB2aXJ0dWFsUmVhZEluZGV4IGlzIGZsb2F0aW5nLXBvaW50LgorICAgICAgICAgICAgaWYgKHZp
cnR1YWxSZWFkSW5kZXggPj0gZW5kRnJhbWUpIHsKKyAgICAgICAgICAgICAgICB2aXJ0dWFsUmVh
ZEluZGV4IC09IGRlbHRhRnJhbWVzOworCisgICAgICAgICAgICAgICAgaWYgKHJlbmRlclNpbGVu
Y2VBbmRGaW5pc2hJZk5vdExvb3BpbmcoYnVzLCB3cml0ZUluZGV4LCBmcmFtZXNUb1Byb2Nlc3Mp
KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0gCisgICAgbV92aXJ0dWFsUmVhZEluZGV4ID0gdmlydHVhbFJlYWRJbmRleDsKK30KKwor
Cit2b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6cmVzZXQoKQoreworICAgIG1fdmlydHVhbFJl
YWRJbmRleCA9IDA7CisgICAgbV9sYXN0R2FpbiA9IGdhaW4oKS0+dmFsdWUoKTsKK30KKwordm9p
ZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OmZpbmlzaCgpCit7CisgICAgaWYgKG1fcGxheWJhY2tT
dGF0ZSAhPSBGSU5JU0hFRF9TVEFURSkgeworICAgICAgICAvLyBMZXQgdGhlIGNvbnRleHQgZGVy
ZWZlcmVuY2UgdGhpcyBBdWRpb05vZGUuCisgICAgICAgIGNvbnRleHQoKS0+bm90aWZ5Tm9kZUZp
bmlzaGVkUHJvY2Vzc2luZyh0aGlzKTsKKyAgICAgICAgbV9wbGF5YmFja1N0YXRlID0gRklOSVNI
RURfU1RBVEU7CisgICAgICAgIGNvbnRleHQoKS0+ZGVjcmVtZW50QWN0aXZlU291cmNlQ291bnQo
KTsKKyAgICB9Cit9CisKK2Jvb2wgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpzZXRCdWZmZXIoQXVk
aW9CdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIAor
ICAgIC8vIFRoZSBjb250ZXh0IG11c3QgYmUgbG9ja2VkIHNpbmNlIGNoYW5naW5nIHRoZSBidWZm
ZXIgY2FuIHJlLWNvbmZpZ3VyZSB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIHRoYXQgYXJlIG91dHB1
dC4KKyAgICBBdWRpb0NvbnRleHQ6OkF1dG9Mb2NrZXIgY29udGV4dExvY2tlcihjb250ZXh0KCkp
OworICAgIAorICAgIC8vIFRoaXMgc3luY2hyb25pemVzIHdpdGggcHJvY2VzcygpLgorICAgIE11
dGV4TG9ja2VyIHByb2Nlc3NMb2NrZXIobV9wcm9jZXNzTG9jayk7CisgICAgCisgICAgaWYgKGJ1
ZmZlcikgeworICAgICAgICAvLyBEbyBhbnkgbmVjZXNzc2FyeSByZS1jb25maWd1cmF0aW9uIHRv
IHRoZSBidWZmZXIncyBudW1iZXIgb2YgY2hhbm5lbHMuCisgICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mQ2hhbm5lbHMgPSBidWZmZXItPm51bWJlck9mQ2hhbm5lbHMoKTsKKworICAgICAgICBpZiAo
bnVtYmVyT2ZDaGFubmVscyA+IEF1ZGlvQ29udGV4dDo6bWF4TnVtYmVyT2ZDaGFubmVscygpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIG91dHB1dCgwKS0+c2V0TnVtYmVy
T2ZDaGFubmVscyhudW1iZXJPZkNoYW5uZWxzKTsKKworICAgICAgICBtX3NvdXJjZUNoYW5uZWxz
ID0gYWRvcHRBcnJheVB0cihuZXcgY29uc3QgZmxvYXQqIFtudW1iZXJPZkNoYW5uZWxzXSk7Cisg
ICAgICAgIG1fZGVzdGluYXRpb25DaGFubmVscyA9IGFkb3B0QXJyYXlQdHIobmV3IGZsb2F0KiBb
bnVtYmVyT2ZDaGFubmVsc10pOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZkNoYW5uZWxzOyArK2kpIAorICAgICAgICAgICAgbV9zb3VyY2VDaGFubmVsc1tpXSA9
IGJ1ZmZlci0+Z2V0Q2hhbm5lbERhdGEoaSktPmRhdGEoKTsKKyAgICB9CisKKyAgICBtX3ZpcnR1
YWxSZWFkSW5kZXggPSAwOworICAgIG1fYnVmZmVyID0gYnVmZmVyOworICAgIAorICAgIHJldHVy
biB0cnVlOworfQorCit1bnNpZ25lZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6Om51bWJlck9mQ2hh
bm5lbHMoKQoreworICAgIHJldHVybiBvdXRwdXQoMCktPm51bWJlck9mQ2hhbm5lbHMoKTsKK30K
Kwordm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6Om5vdGVPbihkb3VibGUgd2hlbikKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmIChtX3BsYXliYWNrU3RhdGUgIT0gVU5T
Q0hFRFVMRURfU1RBVEUpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNHcmFpbiA9IGZhbHNl
OworICAgIG1fc3RhcnRUaW1lID0gd2hlbjsKKyAgICBtX3ZpcnR1YWxSZWFkSW5kZXggPSAwOwor
ICAgIG1fcGxheWJhY2tTdGF0ZSA9IFNDSEVEVUxFRF9TVEFURTsKK30KKwordm9pZCBBdWRpb0J1
ZmZlclNvdXJjZU5vZGU6Om5vdGVHcmFpbk9uKGRvdWJsZSB3aGVuLCBkb3VibGUgZ3JhaW5PZmZz
ZXQsIGRvdWJsZSBncmFpbkR1cmF0aW9uKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisKKyAgICBpZiAobV9wbGF5YmFja1N0YXRlICE9IFVOU0NIRURVTEVEX1NUQVRFKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIWJ1ZmZlcigpKQorICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgIC8vIERvIHNhbml0eSBjaGVja2luZyBvZiBncmFpbiBwYXJhbWV0ZXJzIHZlcnN1cyBi
dWZmZXIgc2l6ZS4KKyAgICBkb3VibGUgYnVmZmVyRHVyYXRpb24gPSBidWZmZXIoKS0+ZHVyYXRp
b24oKTsKKworICAgIGlmIChncmFpbkR1cmF0aW9uID4gYnVmZmVyRHVyYXRpb24pCisgICAgICAg
IHJldHVybjsgLy8gRklYTUU6IG1heWJlIHNob3VsZCB0aHJvdyBleGNlcHRpb24gLSBjb25zaWRl
ciBpbiBzcGVjaWZpY2F0aW9uLgorICAgIAorICAgIGRvdWJsZSBtYXhHcmFpbk9mZnNldCA9IGJ1
ZmZlckR1cmF0aW9uIC0gZ3JhaW5EdXJhdGlvbjsKKyAgICBtYXhHcmFpbk9mZnNldCA9IG1heCgw
LjAsIG1heEdyYWluT2Zmc2V0KTsKKworICAgIGdyYWluT2Zmc2V0ID0gbWF4KDAuMCwgZ3JhaW5P
ZmZzZXQpOworICAgIGdyYWluT2Zmc2V0ID0gbWluKG1heEdyYWluT2Zmc2V0LCBncmFpbk9mZnNl
dCk7CisgICAgbV9ncmFpbk9mZnNldCA9IGdyYWluT2Zmc2V0OworCisgICAgbV9ncmFpbkR1cmF0
aW9uID0gZ3JhaW5EdXJhdGlvbjsKKyAgICAKKyAgICBtX2lzR3JhaW4gPSB0cnVlOworICAgIG1f
c3RhcnRUaW1lID0gd2hlbjsKKworICAgIC8vIFdlIGNhbGwgdGltZVRvU2FtcGxlRnJhbWUgaGVy
ZSBzaW5jZSBhdCBwbGF5YmFja1JhdGUgPT0gMSB3ZSBkb24ndCB3YW50IHRvIGdvIHRocm91Z2gg
bGluZWFyIGludGVycG9sYXRpb24KKyAgICAvLyBhdCBhIHN1Yi1zYW1wbGUgcG9zaXRpb24gc2lu
Y2UgaXQgd2lsbCBkZWdyYWRlIHRoZSBxdWFsaXR5LgorICAgIC8vIFdoZW4gYWxpZ25lZCB0byB0
aGUgc2FtcGxlLWZyYW1lIHRoZSBwbGF5YmFjayB3aWxsIGJlIGlkZW50aWNhbCB0byB0aGUgUENN
IGRhdGEgc3RvcmVkIGluIHRoZSBidWZmZXIuCisgICAgLy8gU2luY2UgcGxheWJhY2tSYXRlID09
IDEgaXMgdmVyeSBjb21tb24sIGl0J3Mgd29ydGggY29uc2lkZXJpbmcgcXVhbGl0eS4KKyAgICBt
X3ZpcnR1YWxSZWFkSW5kZXggPSBBdWRpb1V0aWxpdGllczo6dGltZVRvU2FtcGxlRnJhbWUobV9n
cmFpbk9mZnNldCwgYnVmZmVyKCktPnNhbXBsZVJhdGUoKSk7CisgICAgCisgICAgbV9wbGF5YmFj
a1N0YXRlID0gU0NIRURVTEVEX1NUQVRFOworfQorCit2b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9k
ZTo6bm90ZU9mZihkb3VibGUgd2hlbikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIGlmICghKG1fcGxheWJhY2tTdGF0ZSA9PSBTQ0hFRFVMRURfU1RBVEUgfHwgbV9wbGF5YmFj
a1N0YXRlID09IFBMQVlJTkdfU1RBVEUpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgd2hl
biA9IG1heCgwLjAsIHdoZW4pOworICAgIG1fZW5kVGltZSA9IHdoZW47Cit9CisKK2RvdWJsZSBB
dWRpb0J1ZmZlclNvdXJjZU5vZGU6OnRvdGFsUGl0Y2hSYXRlKCkKK3sKKyAgICBkb3VibGUgZG9w
cGxlclJhdGUgPSAxLjA7CisgICAgaWYgKG1fcGFubmVyTm9kZS5nZXQoKSkKKyAgICAgICAgZG9w
cGxlclJhdGUgPSBtX3Bhbm5lck5vZGUtPmRvcHBsZXJSYXRlKCk7CisgICAgCisgICAgLy8gSW5j
b3Jwb3JhdGUgYnVmZmVyJ3Mgc2FtcGxlLXJhdGUgdmVyc3VzIEF1ZGlvQ29udGV4dCdzIHNhbXBs
ZS1yYXRlLgorICAgIC8vIE5vcm1hbGx5IGl0J3Mgbm90IGFuIGlzc3VlIGJlY2F1c2UgYnVmZmVy
cyBhcmUgbG9hZGVkIGF0IHRoZSBBdWRpb0NvbnRleHQncyBzYW1wbGUtcmF0ZSwgYnV0IHdlIGNh
biBoYW5kbGUgaXQgaW4gYW55IGNhc2UuCisgICAgZG91YmxlIHNhbXBsZVJhdGVGYWN0b3IgPSAx
LjA7CisgICAgaWYgKGJ1ZmZlcigpKQorICAgICAgICBzYW1wbGVSYXRlRmFjdG9yID0gYnVmZmVy
KCktPnNhbXBsZVJhdGUoKSAvIHNhbXBsZVJhdGUoKTsKKyAgICAKKyAgICBkb3VibGUgYmFzZVBp
dGNoUmF0ZSA9IHBsYXliYWNrUmF0ZSgpLT52YWx1ZSgpOworCisgICAgZG91YmxlIHRvdGFsUmF0
ZSA9IGRvcHBsZXJSYXRlICogc2FtcGxlUmF0ZUZhY3RvciAqIGJhc2VQaXRjaFJhdGU7CisKKyAg
ICAvLyBTYW5pdHkgY2hlY2sgdGhlIHRvdGFsIHJhdGUuICBJdCdzIHZlcnkgaW1wb3J0YW50IHRo
YXQgdGhlIHJlc2FtcGxlciBub3QgZ2V0IGFueSBiYWQgcmF0ZSB2YWx1ZXMuCisgICAgdG90YWxS
YXRlID0gbWF4KDAuMCwgdG90YWxSYXRlKTsKKyAgICBpZiAoIXRvdGFsUmF0ZSkKKyAgICAgICAg
dG90YWxSYXRlID0gMTsgLy8gemVybyByYXRlIGlzIGNvbnNpZGVyZWQgaWxsZWdhbAorICAgIHRv
dGFsUmF0ZSA9IG1pbihNYXhSYXRlLCB0b3RhbFJhdGUpOworICAgIAorICAgIGJvb2wgaXNUb3Rh
bFJhdGVWYWxpZCA9ICFpc25hbih0b3RhbFJhdGUpICYmICFpc2luZih0b3RhbFJhdGUpOworICAg
IEFTU0VSVChpc1RvdGFsUmF0ZVZhbGlkKTsKKyAgICBpZiAoIWlzVG90YWxSYXRlVmFsaWQpCisg
ICAgICAgIHRvdGFsUmF0ZSA9IDEuMDsKKworICAgIHJldHVybiB0b3RhbFJhdGU7Cit9CisKK2Jv
b2wgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpsb29waW5nKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBm
aXJzdFRpbWUgPSB0cnVlOworICAgIGlmIChmaXJzdFRpbWUgJiYgY29udGV4dCgpICYmIGNvbnRl
eHQoKS0+ZG9jdW1lbnQoKSkgeworICAgICAgICBjb250ZXh0KCktPmRvY3VtZW50KCktPmFkZENv
bnNvbGVNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIFdhcm5pbmdNZXNz
YWdlTGV2ZWwsICJBdWRpb0J1ZmZlclNvdXJjZU5vZGUgJ2xvb3BpbmcnIGF0dHJpYnV0ZSBpcyBk
ZXByZWNhdGVkLiAgVXNlICdsb29wJyBpbnN0ZWFkLiIpOworICAgICAgICBmaXJzdFRpbWUgPSBm
YWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9pc0xvb3Bpbmc7Cit9CisKK3ZvaWQgQXVkaW9C
dWZmZXJTb3VyY2VOb2RlOjpzZXRMb29waW5nKGJvb2wgbG9vcGluZykKK3sKKyAgICBzdGF0aWMg
Ym9vbCBmaXJzdFRpbWUgPSB0cnVlOworICAgIGlmIChmaXJzdFRpbWUgJiYgY29udGV4dCgpICYm
IGNvbnRleHQoKS0+ZG9jdW1lbnQoKSkgeworICAgICAgICBjb250ZXh0KCktPmRvY3VtZW50KCkt
PmFkZENvbnNvbGVNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIFdhcm5p
bmdNZXNzYWdlTGV2ZWwsICJBdWRpb0J1ZmZlclNvdXJjZU5vZGUgJ2xvb3BpbmcnIGF0dHJpYnV0
ZSBpcyBkZXByZWNhdGVkLiAgVXNlICdsb29wJyBpbnN0ZWFkLiIpOworICAgICAgICBmaXJzdFRp
bWUgPSBmYWxzZTsKKyAgICB9CisKKyAgICBtX2lzTG9vcGluZyA9IGxvb3Bpbmc7Cit9Cit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVy
U291cmNlTm9kZS5oCShyZXZpc2lvbiAxMTE0MzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5oOjExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEF1ZGlvQnVmZmVyU291cmNlTm9k
ZV9oCisjZGVmaW5lIEF1ZGlvQnVmZmVyU291cmNlTm9kZV9oCisKKyNpbmNsdWRlICJBdWRpb0J1
ZmZlci5oIgorI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisjaW5jbHVkZSAiQXVkaW9HYWluLmgiCisj
aW5jbHVkZSAiQXVkaW9QYW5uZXJOb2RlLmgiCisjaW5jbHVkZSAiQXVkaW9Tb3VyY2VOb2RlLmgi
CisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvQ29udGV4dDsKKworLy8gQXVkaW9C
dWZmZXJTb3VyY2VOb2RlIGlzIGFuIEF1ZGlvTm9kZSByZXByZXNlbnRpbmcgYW4gYXVkaW8gc291
cmNlIGZyb20gYW4gaW4tbWVtb3J5IGF1ZGlvIGFzc2V0IHJlcHJlc2VudGVkIGJ5IGFuIEF1ZGlv
QnVmZmVyLgorLy8gSXQgZ2VuZXJhbGx5IHdpbGwgYmUgdXNlZCBmb3Igc2hvcnQgc291bmRzIHdo
aWNoIHJlcXVpcmUgYSBoaWdoIGRlZ3JlZSBvZiBzY2hlZHVsaW5nIGZsZXhpYmlsaXR5IChjYW4g
cGxheWJhY2sgaW4gcmh5dGhtaWNhbGx5IHBlcmZlY3Qgd2F5cykuCisKK2NsYXNzIEF1ZGlvQnVm
ZmVyU291cmNlTm9kZSA6IHB1YmxpYyBBdWRpb1NvdXJjZU5vZGUgeworcHVibGljOgorICAgIC8v
IFRoZXNlIGFyZSB0aGUgcG9zc2libGUgc3RhdGVzIGFuIEF1ZGlvQnVmZmVyU291cmNlTm9kZSBj
YW4gYmUgaW46CisgICAgLy8KKyAgICAvLyBVTlNDSEVEVUxFRF9TVEFURSAtIEluaXRpYWwgcGxh
eWJhY2sgc3RhdGUuIENyZWF0ZWQsIGJ1dCBub3QgeWV0IHNjaGVkdWxlZC4KKyAgICAvLyBTQ0hF
RFVMRURfU1RBVEUgLSBTY2hlZHVsZWQgdG8gcGxheSAodmlhIG5vdGVPbigpIG9yIG5vdGVHcmFp
bk9uKCkpLCBidXQgbm90IHlldCBwbGF5aW5nLgorICAgIC8vIFBMQVlJTkdfU1RBVEUgLSBHZW5l
cmF0aW5nIHNvdW5kLgorICAgIC8vIEZJTklTSEVEX1NUQVRFIC0gRmluaXNoZWQgZ2VuZXJhdGlu
ZyBzb3VuZC4KKyAgICAvLworICAgIC8vIFRoZSBzdGF0ZSBjYW4gb25seSB0cmFuc2l0aW9uIHRv
IHRoZSBuZXh0IHN0YXRlLCBleGNlcHQgZm9yIHRoZSBGSU5JU0hFRF9TVEFURSB3aGljaCBjYW4K
KyAgICAvLyBuZXZlciBiZSBjaGFuZ2VkLgorICAgIGVudW0gUGxheWJhY2tTdGF0ZSB7CisgICAg
ICAgIC8vIFRoZXNlIG11c3QgYmUgZGVmaW5lZCB3aXRoIHRoZSBzYW1lIG5hbWVzIGFuZCB2YWx1
ZXMgYXMgaW4gdGhlIC5pZGwgZmlsZS4KKyAgICAgICAgVU5TQ0hFRFVMRURfU1RBVEUgPSAwLAor
ICAgICAgICBTQ0hFRFVMRURfU1RBVEUgPSAxLAorICAgICAgICBQTEFZSU5HX1NUQVRFID0gMiwK
KyAgICAgICAgRklOSVNIRURfU1RBVEUgPSAzCisgICAgfTsKKyAgICAKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxBdWRpb0J1ZmZlclNvdXJjZU5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHQqLCBmbG9h
dCBzYW1wbGVSYXRlKTsKKworICAgIHZpcnR1YWwgfkF1ZGlvQnVmZmVyU291cmNlTm9kZSgpOwor
ICAgIAorICAgIC8vIEF1ZGlvTm9kZQorICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKHNpemVfdCBm
cmFtZXNUb1Byb2Nlc3MpOworICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOworICAgIAorICAgIC8v
IHNldEJ1ZmZlcigpIGlzIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQuICBUaGlzIGlzIHRoZSBi
dWZmZXIgd2UgdXNlIGZvciBwbGF5YmFjay4KKyAgICAvLyByZXR1cm5zIHRydWUgb24gc3VjY2Vz
cy4KKyAgICBib29sIHNldEJ1ZmZlcihBdWRpb0J1ZmZlciopOworICAgIEF1ZGlvQnVmZmVyKiBi
dWZmZXIoKSB7IHJldHVybiBtX2J1ZmZlci5nZXQoKTsgfQorICAgICAgICAgICAgICAgICAgICAK
KyAgICAvLyBudW1iZXJPZkNoYW5uZWxzKCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIG91dHB1dCBj
aGFubmVscy4gIFRoaXMgdmFsdWUgZXF1YWxzIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgZnJvbSB0
aGUgYnVmZmVyLgorICAgIC8vIElmIGEgbmV3IGJ1ZmZlciBpcyBzZXQgd2l0aCBhIGRpZmZlcmVu
dCBudW1iZXIgb2YgY2hhbm5lbHMsIHRoZW4gdGhpcyB2YWx1ZSB3aWxsIGR5bmFtaWNhbGx5IGNo
YW5nZS4KKyAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKCk7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgIC8vIFBsYXktc3RhdGUKKyAgICAvLyBub3RlT24oKSwgbm90ZUdyYWluT24oKSwg
YW5kIG5vdGVPZmYoKSBtdXN0IGFsbCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisg
ICAgdm9pZCBub3RlT24oZG91YmxlIHdoZW4pOworICAgIHZvaWQgbm90ZUdyYWluT24oZG91Ymxl
IHdoZW4sIGRvdWJsZSBncmFpbk9mZnNldCwgZG91YmxlIGdyYWluRHVyYXRpb24pOworICAgIHZv
aWQgbm90ZU9mZihkb3VibGUgd2hlbik7CisKKyAgICB1bnNpZ25lZCBzaG9ydCBwbGF5YmFja1N0
YXRlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KG1fcGxheWJhY2tTdGF0
ZSk7IH0KKworICAgIC8vIE5vdGU6IHRoZSBhdHRyaWJ1dGUgd2FzIG9yaWdpbmFsbHkgZXhwb3Nl
ZCBhcyAubG9vcGluZywgYnV0IHRvIGJlIG1vcmUgY29uc2lzdGVudCBpbiBuYW1pbmcgd2l0aCA8
YXVkaW8+CisgICAgLy8gYW5kIHdpdGggaG93IGl0J3MgZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZp
Y2F0aW9uLCB0aGUgcHJvcGVyIGF0dHJpYnV0ZSBuYW1lIGlzIC5sb29wCisgICAgLy8gVGhlIG9s
ZCBhdHRyaWJ1dGUgaXMga2VwdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisgICAgYm9v
bCBsb29wKCkgY29uc3QgeyByZXR1cm4gbV9pc0xvb3Bpbmc7IH0KKyAgICB2b2lkIHNldExvb3Ao
Ym9vbCBsb29waW5nKSB7IG1faXNMb29waW5nID0gbG9vcGluZzsgfQorCisgICAgLy8gRGVwcmVj
YXRlZC4KKyAgICBib29sIGxvb3BpbmcoKTsKKyAgICB2b2lkIHNldExvb3BpbmcoYm9vbCk7Cisg
ICAgCisgICAgQXVkaW9HYWluKiBnYWluKCkgeyByZXR1cm4gbV9nYWluLmdldCgpOyB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIEF1ZGlvUGFyYW0qIHBsYXli
YWNrUmF0ZSgpIHsgcmV0dXJuIG1fcGxheWJhY2tSYXRlLmdldCgpOyB9CisKKyAgICAvLyBJZiBh
IHBhbm5lciBub2RlIGlzIHNldCwgdGhlbiB3ZSBjYW4gaW5jb3Jwb3JhdGUgZG9wcGxlciBzaGlm
dCBpbnRvIHRoZSBwbGF5YmFjayBwaXRjaCByYXRlLgorICAgIHZvaWQgc2V0UGFubmVyTm9kZShQ
YXNzUmVmUHRyPEF1ZGlvUGFubmVyTm9kZT4gcGFubmVyTm9kZSkgeyBtX3Bhbm5lck5vZGUgPSBw
YW5uZXJOb2RlOyB9CisKK3ByaXZhdGU6CisgICAgQXVkaW9CdWZmZXJTb3VyY2VOb2RlKEF1ZGlv
Q29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOworCisgICAgdm9pZCByZW5kZXJGcm9tQnVmZmVy
KEF1ZGlvQnVzKiwgdW5zaWduZWQgZGVzdGluYXRpb25GcmFtZU9mZnNldCwgc2l6ZV90IG51bWJl
ck9mRnJhbWVzKTsKKworICAgIC8vIFJlbmRlciBzaWxlbmNlIHN0YXJ0aW5nIGZyb20gImluZGV4
IiBmcmFtZSBpbiBBdWRpb0J1cy4KKyAgICBpbmxpbmUgYm9vbCByZW5kZXJTaWxlbmNlQW5kRmlu
aXNoSWZOb3RMb29waW5nKEF1ZGlvQnVzKiwgdW5zaWduZWQgaW5kZXgsIHNpemVfdCBmcmFtZXNU
b1Byb2Nlc3MpOworCisgICAgLy8gbV9idWZmZXIgaG9sZHMgdGhlIHNhbXBsZSBkYXRhIHdoaWNo
IHRoaXMgbm9kZSBvdXRwdXRzLgorICAgIFJlZlB0cjxBdWRpb0J1ZmZlcj4gbV9idWZmZXI7CisK
KyAgICAvLyBQb2ludGVycyBmb3IgdGhlIGJ1ZmZlciBhbmQgZGVzdGluYXRpb24uCisgICAgT3du
QXJyYXlQdHI8Y29uc3QgZmxvYXQqPiBtX3NvdXJjZUNoYW5uZWxzOworICAgIE93bkFycmF5UHRy
PGZsb2F0Kj4gbV9kZXN0aW5hdGlvbkNoYW5uZWxzOworCisgICAgLy8gVXNlZCBmb3IgdGhlICJn
YWluIiBhbmQgInBsYXliYWNrUmF0ZSIgYXR0cmlidXRlcy4KKyAgICBSZWZQdHI8QXVkaW9HYWlu
PiBtX2dhaW47CisgICAgUmVmUHRyPEF1ZGlvUGFyYW0+IG1fcGxheWJhY2tSYXRlOworCisgICAg
Ly8gSWYgbV9pc0xvb3BpbmcgaXMgZmFsc2UsIHRoZW4gdGhpcyBub2RlIHdpbGwgYmUgZG9uZSBw
bGF5aW5nIGFuZCBiZWNvbWUgaW5hY3RpdmUgYWZ0ZXIgaXQgcmVhY2hlcyB0aGUgZW5kIG9mIHRo
ZSBzYW1wbGUgZGF0YSBpbiB0aGUgYnVmZmVyLgorICAgIC8vIElmIHRydWUsIGl0IHdpbGwgd3Jh
cCBhcm91bmQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgZWFjaCB0aW1lIGl0IHJlYWNoZXMg
dGhlIGVuZC4KKyAgICBib29sIG1faXNMb29waW5nOworCisgICAgLy8gbV9zdGFydFRpbWUgaXMg
dGhlIHRpbWUgdG8gc3RhcnQgcGxheWluZyBiYXNlZCBvbiB0aGUgY29udGV4dCdzIHRpbWVsaW5l
ICgwLjAgb3IgYSB0aW1lIGxlc3MgdGhhbiB0aGUgY29udGV4dCdzIGN1cnJlbnQgdGltZSBtZWFu
cyAibm93IikuCisgICAgZG91YmxlIG1fc3RhcnRUaW1lOyAvLyBpbiBzZWNvbmRzCisKKyAgICAv
LyBtX2VuZFRpbWUgaXMgdGhlIHRpbWUgdG8gc3RvcCBwbGF5aW5nIGJhc2VkIG9uIHRoZSBjb250
ZXh0J3MgdGltZWxpbmUgKDAuMCBvciBhIHRpbWUgbGVzcyB0aGFuIHRoZSBjb250ZXh0J3MgY3Vy
cmVudCB0aW1lIG1lYW5zICJub3ciKS4KKyAgICAvLyBJZiBpdCBoYXNuJ3QgYmVlbiBzZXQgZXhw
bGljaXRseSwgdGhlbiB0aGUgc291bmQgd2lsbCBub3Qgc3RvcCBwbGF5aW5nIChpZiBsb29waW5n
KSBvciB3aWxsIHN0b3Agd2hlbiB0aGUgZW5kIG9mIHRoZSBBdWRpb0J1ZmZlcgorICAgIC8vIGhh
cyBiZWVuIHJlYWNoZWQuCisgICAgZG91YmxlIG1fZW5kVGltZTsgLy8gaW4gc2Vjb25kcworICAg
IAorICAgIC8vIG1fdmlydHVhbFJlYWRJbmRleCBpcyBhIHNhbXBsZS1mcmFtZSBpbmRleCBpbnRv
IG91ciBidWZmZXIgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uLgor
ICAgIC8vIFNpbmNlIGl0J3MgZmxvYXRpbmctcG9pbnQsIGl0IGhhcyBzdWItc2FtcGxlIGFjY3Vy
YWN5LgorICAgIGRvdWJsZSBtX3ZpcnR1YWxSZWFkSW5kZXg7CisKKyAgICAvLyBHcmFudWxhciBw
bGF5YmFjaworICAgIGJvb2wgbV9pc0dyYWluOworICAgIGRvdWJsZSBtX2dyYWluT2Zmc2V0OyAv
LyBpbiBzZWNvbmRzCisgICAgZG91YmxlIG1fZ3JhaW5EdXJhdGlvbjsgLy8gaW4gc2Vjb25kcwor
CisgICAgLy8gdG90YWxQaXRjaFJhdGUoKSByZXR1cm5zIHRoZSBpbnN0YW50YW5lb3VzIHBpdGNo
IHJhdGUgKG5vbi10aW1lIHByZXNlcnZpbmcpLgorICAgIC8vIEl0IGluY29ycG9yYXRlcyB0aGUg
YmFzZSBwaXRjaCByYXRlLCBhbnkgc2FtcGxlLXJhdGUgY29udmVyc2lvbiBmYWN0b3IgZnJvbSB0
aGUgYnVmZmVyLCBhbmQgYW55IGRvcHBsZXIgc2hpZnQgZnJvbSBhbiBhc3NvY2lhdGVkIHBhbm5l
ciBub2RlLgorICAgIGRvdWJsZSB0b3RhbFBpdGNoUmF0ZSgpOworCisgICAgLy8gbV9sYXN0R2Fp
biBwcm92aWRlcyBjb250aW51aXR5IHdoZW4gd2UgZHluYW1pY2FsbHkgYWRqdXN0IHRoZSBnYWlu
LgorICAgIGZsb2F0IG1fbGFzdEdhaW47CisgICAgCisgICAgLy8gV2Ugb3B0aW9uYWxseSBrZWVw
IHRyYWNrIG9mIGEgcGFubmVyIG5vZGUgd2hpY2ggaGFzIGEgZG9wcGxlciBzaGlmdCB0aGF0IGlz
IGluY29ycG9yYXRlZCBpbnRvIHRoZSBwaXRjaCByYXRlLgorICAgIFJlZlB0cjxBdWRpb1Bhbm5l
ck5vZGU+IG1fcGFubmVyTm9kZTsKKworICAgIC8vIFRoaXMgc3luY2hyb25pemVzIHByb2Nlc3Mo
KSB3aXRoIHNldEJ1ZmZlcigpIHdoaWNoIGNhbiBjYXVzZSBkeW5hbWljIGNoYW5uZWwgY291bnQg
Y2hhbmdlcy4KKyAgICBtdXRhYmxlIE11dGV4IG1fcHJvY2Vzc0xvY2s7CisKKyAgICAvLyBIYW5k
bGVzIHRoZSB0aW1lIHdoZW4gd2UgcmVhY2ggdGhlIGVuZCBvZiBzYW1wbGUgZGF0YSAobm9uLWxv
b3BpbmcpIG9yIHRoZSBub3RlT2ZmKCkgdGltZSBoYXMgYmVlbiByZWFjaGVkLgorICAgIHZvaWQg
ZmluaXNoKCk7CisKKyAgICBQbGF5YmFja1N0YXRlIG1fcGxheWJhY2tTdGF0ZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEF1ZGlvQnVmZmVyU291cmNlTm9kZV9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNl
Tm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0J1ZmZlclNvdXJjZU5vZGUuaWRsCShyZXZpc2lvbiAxMTE0MzMpCShmcm9tIFNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5pZGw6MTExNDMzKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgYXVkaW8g
eworICAgIC8vIEEgY2FjaGVkIChub24tc3RyZWFtZWQpLCBtZW1vcnktcmVzaWRlbnQgYXVkaW8g
c291cmNlCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAor
ICAgICAgICBKU0dlbmVyYXRlVG9KU09iamVjdAorICAgIF0gQXVkaW9CdWZmZXJTb3VyY2VOb2Rl
IDogQXVkaW9Tb3VyY2VOb2RlIHsKKyAgICAgICAgYXR0cmlidXRlIFtDdXN0b21TZXR0ZXJdIEF1
ZGlvQnVmZmVyIGJ1ZmZlcgorICAgICAgICAgICAgc2V0dGVyIHJhaXNlcyAoRE9NRXhjZXB0aW9u
KTsKKworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBVTlNDSEVEVUxFRF9TVEFURSA9IDA7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNDSEVEVUxFRF9TVEFURSA9IDE7CisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFBMQVlJTkdfU1RBVEUgPSAyOworICAgICAgICBjb25z
dCB1bnNpZ25lZCBzaG9ydCBGSU5JU0hFRF9TVEFURSA9IDM7CisKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IHBsYXliYWNrU3RhdGU7CisKKyAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIEF1ZGlvR2FpbiBnYWluOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
QXVkaW9QYXJhbSBwbGF5YmFja1JhdGU7CisKKyAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gbG9v
cDsgLy8gVGhpcyBpcyB0aGUgcHJvcGVyIGF0dHJpYnV0ZSBuYW1lIGZyb20gdGhlIHNwZWNpZmlj
YXRpb24uCisgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuIGxvb3Bpbmc7IC8vIFRoaXMgaXMgYW4g
YWxpYXMgZm9yIHRoZSAubG9vcCBhdHRyaWJ1dGUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5
LgorCisgICAgICAgIHZvaWQgbm90ZU9uKGluIGRvdWJsZSB3aGVuKTsKKyAgICAgICAgdm9pZCBu
b3RlR3JhaW5PbihpbiBkb3VibGUgd2hlbiwgaW4gZG91YmxlIGdyYWluT2Zmc2V0LCBpbiBkb3Vi
bGUgZ3JhaW5EdXJhdGlvbik7CisgICAgICAgIHZvaWQgbm90ZU9mZihpbiBkb3VibGUgd2hlbik7
CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9D
aGFubmVsTWVyZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5jcHAJKHJldmlzaW9uIDExMTQzMykJKGZyb20gU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmNwcDoxMTE0MzMpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiQXVkaW9DaGFubmVsTWVyZ2VyLmgiCisK
KyNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKKyNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgor
I2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAg
CisvLyBUaGlzIGlzIGNvbnNpZGVyaW5nIHRoYXQgNS4xICg2IGNoYW5uZWxzKSBpcyB0aGUgbGFy
Z2VzdCB3ZSdsbCBldmVyIGRlYWwgd2l0aC4KKy8vIEl0IGNhbiBlYXNpbHkgYmUgaW5jcmVhc2Vk
IHRvIHN1cHBvcnQgbW9yZSBpZiB0aGUgd2ViIGF1ZGlvIHNwZWNpZmljYXRpb24gaXMgdXBkYXRl
ZC4KK2NvbnN0IHVuc2lnbmVkIE51bWJlck9mSW5wdXRzID0gNjsKKworQXVkaW9DaGFubmVsTWVy
Z2VyOjpBdWRpb0NoYW5uZWxNZXJnZXIoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1w
bGVSYXRlKQorICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCit7CisgICAgLy8g
Q3JlYXRlIGEgZml4ZWQgbnVtYmVyIG9mIGlucHV0cyAoYWJsZSB0byBoYW5kbGUgdGhlIG1heGlt
dW0gbnVtYmVyIG9mIGNoYW5uZWxzIHdlIGRlYWwgd2l0aCkuCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IE51bWJlck9mSW5wdXRzOyArK2kpCisgICAgICAgIGFkZElucHV0KGFkb3B0UHRy
KG5ldyBBdWRpb05vZGVJbnB1dCh0aGlzKSkpOworCisgICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5l
dyBBdWRpb05vZGVPdXRwdXQodGhpcywgMSkpKTsKKyAgICAKKyAgICBzZXROb2RlVHlwZShOb2Rl
VHlwZUNoYW5uZWxNZXJnZXIpOworICAgIAorICAgIGluaXRpYWxpemUoKTsKK30KKwordm9pZCBB
dWRpb0NoYW5uZWxNZXJnZXI6OnByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAg
ICBBdWRpb05vZGVPdXRwdXQqIG91dHB1dCA9IHRoaXMtPm91dHB1dCgwKTsKKyAgICBBU1NFUlQo
b3V0cHV0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGZyYW1lc1RvUHJvY2VzcywgZnJhbWVzVG9Qcm9j
ZXNzID09IG91dHB1dC0+YnVzKCktPmxlbmd0aCgpKTsgICAgCisgICAgCisgICAgLy8gTWVyZ2Ug
YWxsIHRoZSBjaGFubmVscyBmcm9tIGFsbCB0aGUgaW5wdXRzIGludG8gb25lIG91dHB1dC4KKyAg
ICB1bnNpZ25lZCBvdXRwdXRDaGFubmVsSW5kZXggPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1iZXJPZklucHV0cygpOyArK2kpIHsKKyAgICAgICAgQXVkaW9Ob2RlSW5wdXQq
IGlucHV0ID0gdGhpcy0+aW5wdXQoaSk7CisgICAgICAgIGlmIChpbnB1dC0+aXNDb25uZWN0ZWQo
KSkgeworICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dENoYW5uZWxzID0gaW5wdXQt
PmJ1cygpLT5udW1iZXJPZkNoYW5uZWxzKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IE1lcmdlIGNoYW5uZWxzIGZyb20gdGhpcyBwYXJ0aWN1bGFyIGlucHV0LgorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG51bWJlck9mSW5wdXRDaGFubmVsczsgKytqKSB7Cisg
ICAgICAgICAgICAgICAgQXVkaW9DaGFubmVsKiBpbnB1dENoYW5uZWwgPSBpbnB1dC0+YnVzKCkt
PmNoYW5uZWwoaik7CisgICAgICAgICAgICAgICAgQXVkaW9DaGFubmVsKiBvdXRwdXRDaGFubmVs
ID0gb3V0cHV0LT5idXMoKS0+Y2hhbm5lbChvdXRwdXRDaGFubmVsSW5kZXgpOworICAgICAgICAg
ICAgICAgIG91dHB1dENoYW5uZWwtPmNvcHlGcm9tKGlucHV0Q2hhbm5lbCk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgKytvdXRwdXRDaGFubmVsSW5kZXg7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgQVNTRVJUKG91dHB1dENoYW5uZWxJbmRl
eCA9PSBvdXRwdXQtPm51bWJlck9mQ2hhbm5lbHMoKSk7Cit9CisKK3ZvaWQgQXVkaW9DaGFubmVs
TWVyZ2VyOjpyZXNldCgpCit7Cit9CisKKy8vIEFueSB0aW1lIGEgY29ubmVjdGlvbiBvciBkaXNj
b25uZWN0aW9uIGhhcHBlbnMgb24gYW55IG9mIG91ciBpbnB1dHMsIHdlIHBvdGVudGlhbGx5IG5l
ZWQgdG8gY2hhbmdlIHRoZQorLy8gbnVtYmVyIG9mIGNoYW5uZWxzIG9mIG91ciBvdXRwdXQuCit2
b2lkIEF1ZGlvQ2hhbm5lbE1lcmdlcjo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQoQXVk
aW9Ob2RlSW5wdXQqIGlucHV0KQoreworICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJl
YWQoKSAmJiBjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKKworICAgIC8vIENvdW50IGhvdyBt
YW55IGNoYW5uZWxzIHdlIGhhdmUgYWxsIHRvZ2V0aGVyIGZyb20gYWxsIG9mIHRoZSBpbnB1dHMu
CisgICAgdW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRDaGFubmVscyA9IDA7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG51bWJlck9mSW5wdXRzKCk7ICsraSkgeworICAgICAgICBBdWRpb05v
ZGVJbnB1dCogaW5wdXQgPSB0aGlzLT5pbnB1dChpKTsKKyAgICAgICAgaWYgKGlucHV0LT5pc0Nv
bm5lY3RlZCgpKQorICAgICAgICAgICAgbnVtYmVyT2ZPdXRwdXRDaGFubmVscyArPSBpbnB1dC0+
YnVzKCktPm51bWJlck9mQ2hhbm5lbHMoKTsKKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIGNvcnJl
Y3QgbnVtYmVyIG9mIGNoYW5uZWxzIG9uIHRoZSBvdXRwdXQKKyAgICBBdWRpb05vZGVPdXRwdXQq
IG91dHB1dCA9IHRoaXMtPm91dHB1dCgwKTsKKyAgICBBU1NFUlQob3V0cHV0KTsKKyAgICBvdXRw
dXQtPnNldE51bWJlck9mQ2hhbm5lbHMobnVtYmVyT2ZPdXRwdXRDaGFubmVscyk7CisKKyAgICBB
dWRpb05vZGU6OmNoZWNrTnVtYmVyT2ZDaGFubmVsc0ZvcklucHV0KGlucHV0KTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxN
ZXJnZXIuaAkocmV2aXNpb24gMTExNDMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9B
dWRpb0NoYW5uZWxNZXJnZXIuaDoxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIEF1ZGlvQ2hhbm5lbE1lcmdlcl9oCisjZGVmaW5lIEF1ZGlvQ2hhbm5lbE1l
cmdlcl9oCisKKyNpbmNsdWRlICJBdWRpb05vZGUuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvQ29udGV4dDsKKyAgICAK
K2NsYXNzIEF1ZGlvQ2hhbm5lbE1lcmdlciA6IHB1YmxpYyBBdWRpb05vZGUgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlvQ2hhbm5lbE1lcmdlcj4gY3JlYXRlKEF1ZGlvQ29u
dGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQXVkaW9DaGFubmVsTWVyZ2VyKGNvbnRleHQsIHNhbXBsZVJhdGUpKTsgICAg
ICAKKyAgICB9CisKKyAgICAvLyBBdWRpb05vZGUKKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzcyhz
aXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKKworICAg
IC8vIENhbGxlZCBpbiB0aGUgYXVkaW8gdGhyZWFkIChwcmUtcmVuZGVyaW5nIHRhc2spIHdoZW4g
dGhlIG51bWJlciBvZiBjaGFubmVscyBmb3IgYW4gaW5wdXQgbWF5IGhhdmUgY2hhbmdlZC4KKyAg
ICB2aXJ0dWFsIHZvaWQgY2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQoQXVkaW9Ob2RlSW5w
dXQqKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9W
RVJSSURFIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKworICAgIEF1ZGlvQ2hhbm5lbE1lcmdlcihBdWRp
b0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEF1ZGlvQ2hhbm5lbE1lcmdlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5pZGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuaWRsCShy
ZXZpc2lvbiAxMTE0MzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5l
bE1lcmdlci5pZGw6MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0NoYW5uZWxNZXJnZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitt
b2R1bGUgYXVkaW8geworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPVdFQl9B
VURJTworICAgIF0gQXVkaW9DaGFubmVsTWVyZ2VyIDogQXVkaW9Ob2RlIHsKKyAgICB9OworfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0NoYW5uZWxTcGxpdHRlci5jcHAJKHJldmlzaW9uIDExMTQzMykJKGZyb20gU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuY3BwOjExMTQzMykKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiQXVkaW9DaGFubmVsU3BsaXR0
ZXIuaCIKKworI2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0LmgiCisjaW5jbHVkZSAiQXVkaW9Ob2Rl
T3V0cHV0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKKy8vIFRoaXMgaXMgY29uc2lk
ZXJpbmcgdGhhdCA1LjEgKDYgY2hhbm5lbHMpIGlzIHRoZSBsYXJnZXN0IHdlJ2xsIGV2ZXIgZGVh
bCB3aXRoLgorLy8gSXQgY2FuIGVhc2lseSBiZSBpbmNyZWFzZWQgdG8gc3VwcG9ydCBtb3JlIGlm
IHRoZSB3ZWIgYXVkaW8gc3BlY2lmaWNhdGlvbiBpcyB1cGRhdGVkLgorY29uc3QgdW5zaWduZWQg
TnVtYmVyT2ZPdXRwdXRzID0gNjsKKworQXVkaW9DaGFubmVsU3BsaXR0ZXI6OkF1ZGlvQ2hhbm5l
bFNwbGl0dGVyKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKKyAgICA6
IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQoreworICAgIGFkZElucHV0KGFkb3B0UHRy
KG5ldyBBdWRpb05vZGVJbnB1dCh0aGlzKSkpOworCisgICAgLy8gQ3JlYXRlIGEgZml4ZWQgbnVt
YmVyIG9mIG91dHB1dHMgKGFibGUgdG8gaGFuZGxlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFu
bmVscyBmZWQgdG8gYW4gaW5wdXQpLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOdW1i
ZXJPZk91dHB1dHM7ICsraSkKKyAgICAgICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05v
ZGVPdXRwdXQodGhpcywgMSkpKTsKKyAgICAKKyAgICBzZXROb2RlVHlwZShOb2RlVHlwZUNoYW5u
ZWxTcGxpdHRlcik7CisgICAgCisgICAgaW5pdGlhbGl6ZSgpOworfQorCit2b2lkIEF1ZGlvQ2hh
bm5lbFNwbGl0dGVyOjpwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAgQXVk
aW9CdXMqIHNvdXJjZSA9IGlucHV0KDApLT5idXMoKTsKKyAgICBBU1NFUlQoc291cmNlKTsKKyAg
ICBBU1NFUlRfVU5VU0VEKGZyYW1lc1RvUHJvY2VzcywgZnJhbWVzVG9Qcm9jZXNzID09IHNvdXJj
ZS0+bGVuZ3RoKCkpOworICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mU291cmNlQ2hhbm5lbHMg
PSBzb3VyY2UtPm51bWJlck9mQ2hhbm5lbHMoKTsKKyAgICAKKyAgICBBU1NFUlQobnVtYmVyT2ZP
dXRwdXRzKCkgPT0gTnVtYmVyT2ZPdXRwdXRzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgTnVtYmVyT2ZPdXRwdXRzOyArK2kpIHsKKyAgICAgICAgQXVkaW9CdXMqIGRlc3RpbmF0aW9u
ID0gb3V0cHV0KGkpLT5idXMoKTsKKyAgICAgICAgQVNTRVJUKGRlc3RpbmF0aW9uKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChpIDwgbnVtYmVyT2ZTb3VyY2VDaGFubmVscykgeworICAgICAgICAg
ICAgLy8gU3BsaXQgdGhlIGNoYW5uZWwgb3V0IGlmIGl0IGV4aXN0cyBpbiB0aGUgc291cmNlLgor
ICAgICAgICAgICAgLy8gSXQgd291bGQgYmUgbmljZSB0byBhdm9pZCB0aGUgY29weSBhbmQgc2lt
cGx5IHBhc3MgYWxvbmcgcG9pbnRlcnMsIGJ1dCB0aGlzIGJlY29tZXMgZXh0cmVtZWx5IGRpZmZp
Y3VsdCB3aXRoIGZhbm91dCBhbmQgZmFuaW4uCisgICAgICAgICAgICBkZXN0aW5hdGlvbi0+Y2hh
bm5lbCgwKS0+Y29weUZyb20oc291cmNlLT5jaGFubmVsKGkpKTsKKyAgICAgICAgfSBlbHNlIGlm
IChvdXRwdXQoaSktPnJlbmRlcmluZ0Zhbk91dENvdW50KCkgPiAwKSB7CisgICAgICAgICAgICAv
LyBPbmx5IGJvdGhlciB6ZXJvaW5nIG91dCB0aGUgZGVzdGluYXRpb24gaWYgaXQncyBjb25uZWN0
ZWQgdG8gYW55dGhpbmcKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uLT56ZXJvKCk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgQXVkaW9DaGFubmVsU3BsaXR0ZXI6OnJlc2V0KCkKK3sKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
Q2hhbm5lbFNwbGl0dGVyLmgJKHJldmlzaW9uIDExMTQzMykJKGZyb20gU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuaDoxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXVkaW9DaGFubmVsU3BsaXR0
ZXJfaAorI2RlZmluZSBBdWRpb0NoYW5uZWxTcGxpdHRlcl9oCisKKyNpbmNsdWRlICJBdWRpb05v
ZGUuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEF1ZGlvQ29udGV4dDsKKyAgICAKK2NsYXNzIEF1ZGlvQ2hhbm5lbFNwbGl0dGVy
IDogcHVibGljIEF1ZGlvTm9kZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXVk
aW9DaGFubmVsU3BsaXR0ZXI+IGNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNh
bXBsZVJhdGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvQ2hhbm5l
bFNwbGl0dGVyKGNvbnRleHQsIHNhbXBsZVJhdGUpKTsgICAgICAKKyAgICB9CisKKyAgICAvLyBB
dWRpb05vZGUKKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNz
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGRv
dWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFs
IGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKworICAg
IEF1ZGlvQ2hhbm5lbFNwbGl0dGVyKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQXVkaW9DaGFubmVsU3Bs
aXR0ZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NoYW5u
ZWxTcGxpdHRlci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5pZGwJKHJldmlzaW9uIDExMTQzMykJKGZyb20gU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuaWRsOjExMTQzMykKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgYXVk
aW8geworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTworICAg
IF0gQXVkaW9DaGFubmVsU3BsaXR0ZXIgOiBBdWRpb05vZGUgeworICAgIH07Cit9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCShy
ZXZpc2lvbiAxMTE0MzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4
dC5jcHA6MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Nv
bnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzk5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUg
IkF1ZGlvQ29udGV4dC5oIgorCisjaW5jbHVkZSAiQXN5bmNBdWRpb0RlY29kZXIuaCIKKyNpbmNs
dWRlICJBdWRpb0J1ZmZlci5oIgorI2luY2x1ZGUgIkF1ZGlvQnVmZmVyQ2FsbGJhY2suaCIKKyNp
bmNsdWRlICJBdWRpb0J1ZmZlclNvdXJjZU5vZGUuaCIKKyNpbmNsdWRlICJBdWRpb0NoYW5uZWxN
ZXJnZXIuaCIKKyNpbmNsdWRlICJBdWRpb0NoYW5uZWxTcGxpdHRlci5oIgorI2luY2x1ZGUgIkF1
ZGlvR2Fpbk5vZGUuaCIKKyNpbmNsdWRlICJBdWRpb0xpc3RlbmVyLmgiCisjaW5jbHVkZSAiQXVk
aW9Ob2RlSW5wdXQuaCIKKyNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKKyNpbmNsdWRlICJB
dWRpb1Bhbm5lck5vZGUuaCIKKyNpbmNsdWRlICJCaXF1YWRGaWx0ZXJOb2RlLmgiCisjaW5jbHVk
ZSAiQ29udm9sdmVyTm9kZS5oIgorI2luY2x1ZGUgIkRlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9k
ZS5oIgorI2luY2x1ZGUgIkRlbGF5Tm9kZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5j
bHVkZSAiRHluYW1pY3NDb21wcmVzc29yTm9kZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKKyNpbmNsdWRlICJGRlRGcmFtZS5oIgorI2luY2x1ZGUgIkhSVEZEYXRhYmFzZUxvYWRlci5o
IgorI2luY2x1ZGUgIkhSVEZQYW5uZXIuaCIKKyNpbmNsdWRlICJIaWdoUGFzczJGaWx0ZXJOb2Rl
LmgiCisjaW5jbHVkZSAiSmF2YVNjcmlwdEF1ZGlvTm9kZS5oIgorI2luY2x1ZGUgIkxvd1Bhc3My
RmlsdGVyTm9kZS5oIgorI2luY2x1ZGUgIk9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oIgor
I2luY2x1ZGUgIk9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVBbmFseXNlck5vZGUuaCIKKyNpbmNsdWRl
ICJXYXZlU2hhcGVyTm9kZS5oIgorI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgorCisjaWYg
RU5BQkxFKFZJREVPKQorI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJN
ZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCIKKyNlbmRpZgorCisjaWYgREVCVUdfQVVESU9O
T0RFX1JFRkVSRU5DRVMKKyNpbmNsdWRlIDxzdGRpby5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDx3
dGYvQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworLy8gRklYTUU6IGNo
ZWNrIHRoZSBwcm9wZXIgd2F5IHRvIHJlZmVyZW5jZSBhbiB1bmRlZmluZWQgdGhyZWFkIElECitj
b25zdCBpbnQgVW5kZWZpbmVkVGhyZWFkSWRlbnRpZmllciA9IDB4ZmZmZmZmZmY7CisKK2NvbnN0
IHVuc2lnbmVkIE1heE5vZGVzVG9EZWxldGVQZXJRdWFudHVtID0gMTA7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKyAgICAKK25hbWVzcGFjZSB7CisgICAgCitib29sIGlzU2FtcGxlUmF0ZVJhbmdl
R29vZChmbG9hdCBzYW1wbGVSYXRlKQoreworICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNl
IGlmIHRoZSBtaW5pbXVtIHNhbXBsZS1yYXRlIGNvdWxkIGJlIGxlc3MgdGhhbiA0NC4xS0h6LAor
ICAgIC8vIGJ1dCB0aGF0IHdpbGwgcmVxdWlyZSBzb21lIGZpeGVzIGluIEhSVEZQYW5uZXI6OmZm
dFNpemVGb3JTYW1wbGVSYXRlKCksIGFuZCBzb21lIHRlc3RpbmcgdGhlcmUuCisgICAgcmV0dXJu
IHNhbXBsZVJhdGUgPj0gNDQxMDAgJiYgc2FtcGxlUmF0ZSA8PSA5NjAwMDsKK30KKworfQorCisv
LyBEb24ndCBhbGxvdyBtb3JlIHRoYW4gdGhpcyBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIEF1ZGlv
Q29udGV4dHMgdGFsa2luZyB0byBoYXJkd2FyZS4KK2NvbnN0IHVuc2lnbmVkIE1heEhhcmR3YXJl
Q29udGV4dHMgPSA0OwordW5zaWduZWQgQXVkaW9Db250ZXh0OjpzX2hhcmR3YXJlQ29udGV4dENv
dW50ID0gMDsKKyAgICAKK1Bhc3NSZWZQdHI8QXVkaW9Db250ZXh0PiBBdWRpb0NvbnRleHQ6OmNy
ZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNF
RF9QQVJBTShlYyk7CisKKyAgICBBU1NFUlQoZG9jdW1lbnQpOworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgaWYgKHNfaGFyZHdhcmVDb250ZXh0Q291bnQgPj0gTWF4SGFyZHdhcmVD
b250ZXh0cykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8QXVkaW9Db250ZXh0PiBh
dWRpb0NvbnRleHQoYWRvcHRSZWYobmV3IEF1ZGlvQ29udGV4dChkb2N1bWVudCkpKTsKKyAgICBh
dWRpb0NvbnRleHQtPnN1c3BlbmRJZk5lZWRlZCgpOworICAgIHJldHVybiBhdWRpb0NvbnRleHQu
cmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPEF1ZGlvQ29udGV4dD4gQXVkaW9Db250ZXh0Ojpj
cmVhdGVPZmZsaW5lQ29udGV4dChEb2N1bWVudCogZG9jdW1lbnQsIHVuc2lnbmVkIG51bWJlck9m
Q2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJUKGRvY3VtZW50KTsKKworICAgIC8vIEZJWE1FOiBv
ZmZsaW5lIGNvbnRleHRzIGhhdmUgbGltaXRhdGlvbnMgb24gc3VwcG9ydGVkIHNhbXBsZS1yYXRl
cy4KKyAgICAvLyBDdXJyZW50bHkgYWxsIEF1ZGlvQ29udGV4dHMgbXVzdCBoYXZlIHRoZSBzYW1l
IHNhbXBsZS1yYXRlLgorICAgIEhSVEZEYXRhYmFzZUxvYWRlciogbG9hZGVyID0gSFJURkRhdGFi
YXNlTG9hZGVyOjpsb2FkZXIoKTsKKyAgICBpZiAobnVtYmVyT2ZDaGFubmVscyA+IDEwIHx8ICFp
c1NhbXBsZVJhdGVSYW5nZUdvb2Qoc2FtcGxlUmF0ZSkgfHwgKGxvYWRlciAmJiBsb2FkZXItPmRh
dGFiYXNlU2FtcGxlUmF0ZSgpICE9IHNhbXBsZVJhdGUpKSB7CisgICAgICAgIGVjID0gU1lOVEFY
X0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPEF1ZGlvQ29udGV4
dD4gYXVkaW9Db250ZXh0KG5ldyBBdWRpb0NvbnRleHQoZG9jdW1lbnQsIG51bWJlck9mQ2hhbm5l
bHMsIG51bWJlck9mRnJhbWVzLCBzYW1wbGVSYXRlKSk7CisgICAgYXVkaW9Db250ZXh0LT5zdXNw
ZW5kSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gYXVkaW9Db250ZXh0LnJlbGVhc2UoKTsKK30KKwor
Ly8gQ29uc3RydWN0b3IgZm9yIHJlbmRlcmluZyB0byB0aGUgYXVkaW8gaGFyZHdhcmUuCitBdWRp
b0NvbnRleHQ6OkF1ZGlvQ29udGV4dChEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBBY3RpdmVE
T01PYmplY3QoZG9jdW1lbnQsIHRoaXMpCisgICAgLCBtX2lzSW5pdGlhbGl6ZWQoZmFsc2UpCisg
ICAgLCBtX2lzQXVkaW9UaHJlYWRGaW5pc2hlZChmYWxzZSkKKyAgICAsIG1fZG9jdW1lbnQoZG9j
dW1lbnQpCisgICAgLCBtX2Rlc3RpbmF0aW9uTm9kZSgwKQorICAgICwgbV9pc0RlbGV0aW9uU2No
ZWR1bGVkKGZhbHNlKQorICAgICwgbV9jb25uZWN0aW9uQ291bnQoMCkKKyAgICAsIG1fYXVkaW9U
aHJlYWQoMCkKKyAgICAsIG1fZ3JhcGhPd25lclRocmVhZChVbmRlZmluZWRUaHJlYWRJZGVudGlm
aWVyKQorICAgICwgbV9pc09mZmxpbmVDb250ZXh0KGZhbHNlKQorICAgICwgbV9hY3RpdmVTb3Vy
Y2VDb3VudCgwKQoreworICAgIGNvbnN0cnVjdENvbW1vbigpOworCisgICAgbV9kZXN0aW5hdGlv
bk5vZGUgPSBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGU6OmNyZWF0ZSh0aGlzKTsKKworICAg
IC8vIFRoaXMgc2V0cyBpbiBtb3Rpb24gYW4gYXN5bmNocm9ub3VzIGxvYWRpbmcgbWVjaGFuaXNt
IG9uIGFub3RoZXIgdGhyZWFkLgorICAgIC8vIFdlIGNhbiBjaGVjayBtX2hydGZEYXRhYmFzZUxv
YWRlci0+aXNMb2FkZWQoKSB0byBmaW5kIG91dCB3aGV0aGVyIG9yIG5vdCBpdCBoYXMgYmVlbiBm
dWxseSBsb2FkZWQuCisgICAgLy8gSXQncyBub3QgdGhhdCB1c2VmdWwgdG8gaGF2ZSBhIGNhbGxi
YWNrIGZ1bmN0aW9uIGZvciB0aGlzIHNpbmNlIHRoZSBhdWRpbyB0aHJlYWQgYXV0b21hdGljYWxs
eSBzdGFydHMgcmVuZGVyaW5nIG9uIHRoZSBncmFwaAorICAgIC8vIHdoZW4gdGhpcyBoYXMgZmlu
aXNoZWQgKHNlZSBBdWRpb0Rlc3RpbmF0aW9uTm9kZSkuCisgICAgbV9ocnRmRGF0YWJhc2VMb2Fk
ZXIgPSBIUlRGRGF0YWJhc2VMb2FkZXI6OmNyZWF0ZUFuZExvYWRBc3luY2hyb25vdXNseUlmTmVj
ZXNzYXJ5KHNhbXBsZVJhdGUoKSk7Cit9CisKKy8vIENvbnN0cnVjdG9yIGZvciBvZmZsaW5lIChu
b24tcmVhbHRpbWUpIHJlbmRlcmluZy4KK0F1ZGlvQ29udGV4dDo6QXVkaW9Db250ZXh0KERvY3Vt
ZW50KiBkb2N1bWVudCwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IG51bWJlck9m
RnJhbWVzLCBmbG9hdCBzYW1wbGVSYXRlKQorICAgIDogQWN0aXZlRE9NT2JqZWN0KGRvY3VtZW50
LCB0aGlzKQorICAgICwgbV9pc0luaXRpYWxpemVkKGZhbHNlKQorICAgICwgbV9pc0F1ZGlvVGhy
ZWFkRmluaXNoZWQoZmFsc2UpCisgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQorICAgICwgbV9k
ZXN0aW5hdGlvbk5vZGUoMCkKKyAgICAsIG1fY29ubmVjdGlvbkNvdW50KDApCisgICAgLCBtX2F1
ZGlvVGhyZWFkKDApCisgICAgLCBtX2dyYXBoT3duZXJUaHJlYWQoVW5kZWZpbmVkVGhyZWFkSWRl
bnRpZmllcikKKyAgICAsIG1faXNPZmZsaW5lQ29udGV4dCh0cnVlKQorICAgICwgbV9hY3RpdmVT
b3VyY2VDb3VudCgwKQoreworICAgIGNvbnN0cnVjdENvbW1vbigpOworCisgICAgLy8gRklYTUU6
IHRoZSBwYXNzZWQgaW4gc2FtcGxlUmF0ZSBNVVNUIG1hdGNoIHRoZSBoYXJkd2FyZSBzYW1wbGUt
cmF0ZSBzaW5jZSBIUlRGRGF0YWJhc2VMb2FkZXIgaXMgYSBzaW5nbGV0b24uCisgICAgbV9ocnRm
RGF0YWJhc2VMb2FkZXIgPSBIUlRGRGF0YWJhc2VMb2FkZXI6OmNyZWF0ZUFuZExvYWRBc3luY2hy
b25vdXNseUlmTmVjZXNzYXJ5KHNhbXBsZVJhdGUpOworCisgICAgLy8gQ3JlYXRlIGEgbmV3IGRl
c3RpbmF0aW9uIGZvciBvZmZsaW5lIHJlbmRlcmluZy4KKyAgICBtX3JlbmRlclRhcmdldCA9IEF1
ZGlvQnVmZmVyOjpjcmVhdGUobnVtYmVyT2ZDaGFubmVscywgbnVtYmVyT2ZGcmFtZXMsIHNhbXBs
ZVJhdGUpOworICAgIG1fZGVzdGluYXRpb25Ob2RlID0gT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25O
b2RlOjpjcmVhdGUodGhpcywgbV9yZW5kZXJUYXJnZXQuZ2V0KCkpOworfQorCit2b2lkIEF1ZGlv
Q29udGV4dDo6Y29uc3RydWN0Q29tbW9uKCkKK3sKKyAgICBGRlRGcmFtZTo6aW5pdGlhbGl6ZSgp
OworICAgIAorICAgIG1fbGlzdGVuZXIgPSBBdWRpb0xpc3RlbmVyOjpjcmVhdGUoKTsKK30KKwor
QXVkaW9Db250ZXh0Ojp+QXVkaW9Db250ZXh0KCkKK3sKKyNpZiBERUJVR19BVURJT05PREVfUkVG
RVJFTkNFUworICAgIHByaW50ZigiJXA6IEF1ZGlvQ29udGV4dDo6fkF1ZGlvQ29udGV4dCgpXG4i
LCB0aGlzKTsKKyNlbmRpZgorICAgIC8vIEF1ZGlvTm9kZXMga2VlcCBhIHJlZmVyZW5jZSB0byB0
aGVpciBjb250ZXh0LCBzbyB0aGVyZSBzaG91bGQgYmUgbm8gd2F5IHRvIGJlIGluIHRoZSBkZXN0
cnVjdG9yIGlmIHRoZXJlIGFyZSBzdGlsbCBBdWRpb05vZGVzIGFyb3VuZC4KKyAgICBBU1NFUlQo
IW1fbm9kZXNUb0RlbGV0ZS5zaXplKCkpOworICAgIEFTU0VSVCghbV9yZWZlcmVuY2VkTm9kZXMu
c2l6ZSgpKTsKKyAgICBBU1NFUlQoIW1fZmluaXNoZWROb2Rlcy5zaXplKCkpOworfQorCit2b2lk
IEF1ZGlvQ29udGV4dDo6bGF6eUluaXRpYWxpemUoKQoreworICAgIGlmICghbV9pc0luaXRpYWxp
emVkKSB7CisgICAgICAgIC8vIERvbid0IGFsbG93IHRoZSBjb250ZXh0IHRvIGluaXRpYWxpemUg
YSBzZWNvbmQgdGltZSBhZnRlciBpdCdzIGFscmVhZHkgYmVlbiBleHBsaWNpdGx5IHVuaW5pdGlh
bGl6ZWQuCisgICAgICAgIEFTU0VSVCghbV9pc0F1ZGlvVGhyZWFkRmluaXNoZWQpOworICAgICAg
ICBpZiAoIW1faXNBdWRpb1RocmVhZEZpbmlzaGVkKSB7CisgICAgICAgICAgICBpZiAobV9kZXN0
aW5hdGlvbk5vZGUuZ2V0KCkpIHsKKyAgICAgICAgICAgICAgICBtX2Rlc3RpbmF0aW9uTm9kZS0+
aW5pdGlhbGl6ZSgpOworCisgICAgICAgICAgICAgICAgaWYgKCFpc09mZmxpbmVDb250ZXh0KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBzdGFydHMgdGhlIGF1ZGlvIHRocmVhZC4g
VGhlIGRlc3RpbmF0aW9uIG5vZGUncyBwcm92aWRlSW5wdXQoKSBtZXRob2Qgd2lsbCBub3cgYmUg
Y2FsbGVkIHJlcGVhdGVkbHkgdG8gcmVuZGVyIGF1ZGlvLgorICAgICAgICAgICAgICAgICAgICAv
LyBFYWNoIHRpbWUgcHJvdmlkZUlucHV0KCkgaXMgY2FsbGVkLCBhIHBvcnRpb24gb2YgdGhlIGF1
ZGlvIHN0cmVhbSBpcyByZW5kZXJlZC4gTGV0J3MgY2FsbCB0aGlzIHRpbWUgcGVyaW9kIGEgInJl
bmRlciBxdWFudHVtIi4KKyAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogZm9yIG5vdyBkZWZh
dWx0IEF1ZGlvQ29udGV4dCBkb2VzIG5vdCBuZWVkIGFuIGV4cGxpY2l0IHN0YXJ0UmVuZGVyaW5n
KCkgY2FsbCBmcm9tIEphdmFTY3JpcHQuCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIG1heSB3
YW50IHRvIGNvbnNpZGVyIHJlcXVpcmluZyBpdCBmb3Igc3ltbWV0cnkgd2l0aCBPZmZsaW5lQXVk
aW9Db250ZXh0LgorICAgICAgICAgICAgICAgICAgICBtX2Rlc3RpbmF0aW9uTm9kZS0+c3RhcnRS
ZW5kZXJpbmcoKTsgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICArK3Nf
aGFyZHdhcmVDb250ZXh0Q291bnQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9
CisgICAgICAgICAgICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIEF1ZGlvQ29udGV4dDo6dW5pbml0aWFsaXplKCkKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworCisgICAgaWYgKG1faXNJbml0aWFsaXplZCkgeworICAgICAgICAvLyBQ
cm90ZWN0IHRoaXMgb2JqZWN0IGZyb20gYmVpbmcgZGVsZXRlZCBiZWZvcmUgd2UgZmluaXNoIHVu
aW5pdGlhbGl6aW5nLgorICAgICAgICBSZWZQdHI8QXVkaW9Db250ZXh0PiBwcm90ZWN0KHRoaXMp
OworCisgICAgICAgIC8vIFRoaXMgc3RvcHMgdGhlIGF1ZGlvIHRocmVhZCBhbmQgYWxsIGF1ZGlv
IHJlbmRlcmluZy4KKyAgICAgICAgbV9kZXN0aW5hdGlvbk5vZGUtPnVuaW5pdGlhbGl6ZSgpOwor
CisgICAgICAgIC8vIERvbid0IGFsbG93IHRoZSBjb250ZXh0IHRvIGluaXRpYWxpemUgYSBzZWNv
bmQgdGltZSBhZnRlciBpdCdzIGFscmVhZHkgYmVlbiBleHBsaWNpdGx5IHVuaW5pdGlhbGl6ZWQu
CisgICAgICAgIG1faXNBdWRpb1RocmVhZEZpbmlzaGVkID0gdHJ1ZTsKKworICAgICAgICAvLyBX
ZSBoYXZlIHRvIHJlbGVhc2Ugb3VyIHJlZmVyZW5jZSB0byB0aGUgZGVzdGluYXRpb24gbm9kZSBi
ZWZvcmUgdGhlIGNvbnRleHQgd2lsbCBldmVyIGJlIGRlbGV0ZWQgc2luY2UgdGhlIGRlc3RpbmF0
aW9uIG5vZGUgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnRleHQuCisgICAgICAgIG1fZGVz
dGluYXRpb25Ob2RlLmNsZWFyKCk7CisKKyAgICAgICAgaWYgKCFpc09mZmxpbmVDb250ZXh0KCkp
IHsKKyAgICAgICAgICAgIEFTU0VSVChzX2hhcmR3YXJlQ29udGV4dENvdW50KTsKKyAgICAgICAg
ICAgIC0tc19oYXJkd2FyZUNvbnRleHRDb3VudDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgLy8gR2V0IHJpZCBvZiB0aGUgc291cmNlcyB3aGljaCBtYXkgc3RpbGwgYmUgcGxheWluZy4K
KyAgICAgICAgZGVyZWZVbmZpbmlzaGVkU291cmNlTm9kZXMoKTsKKworICAgICAgICBkZWxldGVN
YXJrZWROb2RlcygpOworCisgICAgICAgIG1faXNJbml0aWFsaXplZCA9IGZhbHNlOworICAgIH0K
K30KKworYm9vbCBBdWRpb0NvbnRleHQ6OmlzSW5pdGlhbGl6ZWQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2lzSW5pdGlhbGl6ZWQ7Cit9CisKK2Jvb2wgQXVkaW9Db250ZXh0Ojppc1J1bm5hYmxl
KCkgY29uc3QKK3sKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIC8vIENoZWNrIHdpdGggdGhlIEhSVEYgc3BhdGlhbGl6YXRpb24gc3lz
dGVtIHRvIHNlZSBpZiBpdCdzIGZpbmlzaGVkIGxvYWRpbmcuCisgICAgcmV0dXJuIG1faHJ0ZkRh
dGFiYXNlTG9hZGVyLT5pc0xvYWRlZCgpOworfQorCit2b2lkIEF1ZGlvQ29udGV4dDo6dW5pbml0
aWFsaXplRGlzcGF0Y2godm9pZCogdXNlckRhdGEpCit7CisgICAgQXVkaW9Db250ZXh0KiBjb250
ZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxBdWRpb0NvbnRleHQqPih1c2VyRGF0YSk7CisgICAgQVNT
RVJUKGNvbnRleHQpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y29udGV4dC0+dW5pbml0aWFsaXplKCk7Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0OjpzdG9wKCkK
K3sKKyAgICBtX2RvY3VtZW50ID0gMDsgLy8gZG9jdW1lbnQgaXMgZ29pbmcgYXdheQorCisgICAg
Ly8gRG9uJ3QgY2FsbCB1bmluaXRpYWxpemUoKSBpbW1lZGlhdGVseSBoZXJlIGJlY2F1c2UgdGhl
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgaXMgaW4gdGhlIG1pZGRsZQorICAgIC8vIG9mIGRlYWxp
bmcgd2l0aCBhbGwgb2YgaXRzIEFjdGl2ZURPTU9iamVjdHMgYXQgdGhpcyBwb2ludC4gdW5pbml0
aWFsaXplKCkgY2FuIGRlLXJlZmVyZW5jZSBvdGhlcgorICAgIC8vIEFjdGl2ZURPTU9iamVjdHMg
c28gbGV0J3Mgc2NoZWR1bGUgdW5pbml0aWFsaXplKCkgdG8gYmUgY2FsbGVkIGxhdGVyLgorICAg
IC8vIEZJWE1FOiBzZWUgaWYgdGhlcmUncyBhIG1vcmUgZGlyZWN0IHdheSB0byBoYW5kbGUgdGhp
cyBpc3N1ZS4KKyAgICBjYWxsT25NYWluVGhyZWFkKHVuaW5pdGlhbGl6ZURpc3BhdGNoLCB0aGlz
KTsKK30KKworRG9jdW1lbnQqIEF1ZGlvQ29udGV4dDo6ZG9jdW1lbnQoKSBjb25zdAoreworICAg
IEFTU0VSVChtX2RvY3VtZW50KTsKKyAgICByZXR1cm4gbV9kb2N1bWVudDsKK30KKworYm9vbCBB
dWRpb0NvbnRleHQ6Omhhc0RvY3VtZW50KCkKK3sKKyAgICByZXR1cm4gbV9kb2N1bWVudDsKK30K
KworUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gQXVkaW9Db250ZXh0OjpjcmVhdGVCdWZmZXIodW5z
aWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IG51bWJlck9mRnJhbWVzLCBmbG9hdCBzYW1w
bGVSYXRlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBSZWZQdHI8QXVkaW9CdWZmZXI+IGF1
ZGlvQnVmZmVyID0gQXVkaW9CdWZmZXI6OmNyZWF0ZShudW1iZXJPZkNoYW5uZWxzLCBudW1iZXJP
ZkZyYW1lcywgc2FtcGxlUmF0ZSk7CisgICAgaWYgKCFhdWRpb0J1ZmZlci5nZXQoKSkgeworICAg
ICAgICBlYyA9IFNZTlRBWF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJl
dHVybiBhdWRpb0J1ZmZlcjsKK30KKworUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gQXVkaW9Db250
ZXh0OjpjcmVhdGVCdWZmZXIoQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyLCBib29sIG1peFRvTW9u
bywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJUKGFycmF5QnVmZmVyKTsKKyAgICBp
ZiAoIWFycmF5QnVmZmVyKSB7CisgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBhdWRpb0J1ZmZlciA9IEF1
ZGlvQnVmZmVyOjpjcmVhdGVGcm9tQXVkaW9GaWxlRGF0YShhcnJheUJ1ZmZlci0+ZGF0YSgpLCBh
cnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpLCBtaXhUb01vbm8sIHNhbXBsZVJhdGUoKSk7CisgICAg
aWYgKCFhdWRpb0J1ZmZlci5nZXQoKSkgeworICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBhdWRpb0J1ZmZlcjsKK30KKwordm9p
ZCBBdWRpb0NvbnRleHQ6OmRlY29kZUF1ZGlvRGF0YShBcnJheUJ1ZmZlciogYXVkaW9EYXRhLCBQ
YXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0
cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBpZiAoIWF1ZGlvRGF0YSkgeworICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgbV9hdWRpb0RlY29kZXIuZGVjb2RlQXN5bmMoYXVkaW9E
YXRhLCBzYW1wbGVSYXRlKCksIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7Cit9CisK
K1Bhc3NSZWZQdHI8QXVkaW9CdWZmZXJTb3VyY2VOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUJ1
ZmZlclNvdXJjZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBsYXp5SW5p
dGlhbGl6ZSgpOworICAgIFJlZlB0cjxBdWRpb0J1ZmZlclNvdXJjZU5vZGU+IG5vZGUgPSBBdWRp
b0J1ZmZlclNvdXJjZU5vZGU6OmNyZWF0ZSh0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxl
UmF0ZSgpKTsKKworICAgIHJlZk5vZGUobm9kZS5nZXQoKSk7IC8vIGNvbnRleHQga2VlcHMgcmVm
ZXJlbmNlIHVudGlsIHNvdXJjZSBoYXMgZmluaXNoZWQgcGxheWluZworICAgIHJldHVybiBub2Rl
OworfQorCisjaWYgRU5BQkxFKFZJREVPKQorUGFzc1JlZlB0cjxNZWRpYUVsZW1lbnRBdWRpb1Nv
dXJjZU5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFFbGVtZW50U291cmNlKEhUTUxNZWRp
YUVsZW1lbnQqIG1lZGlhRWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJU
KG1lZGlhRWxlbWVudCk7CisgICAgaWYgKCFtZWRpYUVsZW1lbnQpIHsKKyAgICAgICAgZWMgPSBJ
TlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgICAgICAKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGxhenlJbml0aWFsaXplKCk7CisgICAgCisg
ICAgLy8gRmlyc3QgY2hlY2sgaWYgdGhpcyBtZWRpYSBlbGVtZW50IGFscmVhZHkgaGFzIGEgc291
cmNlIG5vZGUuCisgICAgaWYgKG1lZGlhRWxlbWVudC0+YXVkaW9Tb3VyY2VOb2RlKCkpIHsKKyAg
ICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
ICAgICAgICAKKyAgICBSZWZQdHI8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBub2RlID0g
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpjcmVhdGUodGhpcywgbWVkaWFFbGVtZW50KTsK
KworICAgIG1lZGlhRWxlbWVudC0+c2V0QXVkaW9Tb3VyY2VOb2RlKG5vZGUuZ2V0KCkpOworCisg
ICAgcmVmTm9kZShub2RlLmdldCgpKTsgLy8gY29udGV4dCBrZWVwcyByZWZlcmVuY2UgdW50aWwg
bm9kZSBpcyBkaXNjb25uZWN0ZWQKKyAgICByZXR1cm4gbm9kZTsKK30KKyNlbmRpZgorCitQYXNz
UmVmUHRyPEphdmFTY3JpcHRBdWRpb05vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlSmF2YVNjcmlw
dE5vZGUoc2l6ZV90IGJ1ZmZlclNpemUpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBsYXp5SW5pdGlhbGl6ZSgpOworICAgIFJlZlB0cjxKYXZhU2NyaXB0QXVkaW9Ob2RlPiBu
b2RlID0gSmF2YVNjcmlwdEF1ZGlvTm9kZTo6Y3JlYXRlKHRoaXMsIG1fZGVzdGluYXRpb25Ob2Rl
LT5zYW1wbGVSYXRlKCksIGJ1ZmZlclNpemUpOworCisgICAgcmVmTm9kZShub2RlLmdldCgpKTsg
Ly8gY29udGV4dCBrZWVwcyByZWZlcmVuY2UgdW50aWwgd2Ugc3RvcCBtYWtpbmcgamF2YXNjcmlw
dCByZW5kZXJpbmcgY2FsbGJhY2tzCisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bhc3NSZWZQdHI8
QmlxdWFkRmlsdGVyTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVCaXF1YWRGaWx0ZXIoKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgbGF6eUluaXRpYWxpemUoKTsKKyAgICBy
ZXR1cm4gQmlxdWFkRmlsdGVyTm9kZTo6Y3JlYXRlKHRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5z
YW1wbGVSYXRlKCkpOworfQorCitQYXNzUmVmUHRyPFdhdmVTaGFwZXJOb2RlPiBBdWRpb0NvbnRl
eHQ6OmNyZWF0ZVdhdmVTaGFwZXIoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgbGF6eUluaXRpYWxpemUoKTsKKyAgICByZXR1cm4gV2F2ZVNoYXBlck5vZGU6OmNyZWF0ZSh0
aGlzKTsKK30KKworUGFzc1JlZlB0cjxMb3dQYXNzMkZpbHRlck5vZGU+IEF1ZGlvQ29udGV4dDo6
Y3JlYXRlTG93UGFzczJGaWx0ZXIoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgbGF6eUluaXRpYWxpemUoKTsKKyAgICBpZiAoZG9jdW1lbnQoKSkKKyAgICAgICAgZG9jdW1l
bnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwg
V2FybmluZ01lc3NhZ2VMZXZlbCwgImNyZWF0ZUxvd1Bhc3MyRmlsdGVyKCkgaXMgZGVwcmVjYXRl
ZC4gIFVzZSBjcmVhdGVCaXF1YWRGaWx0ZXIoKSBpbnN0ZWFkLiIpOworICAgICAgICAKKyAgICBy
ZXR1cm4gTG93UGFzczJGaWx0ZXJOb2RlOjpjcmVhdGUodGhpcywgbV9kZXN0aW5hdGlvbk5vZGUt
PnNhbXBsZVJhdGUoKSk7Cit9CisKK1Bhc3NSZWZQdHI8SGlnaFBhc3MyRmlsdGVyTm9kZT4gQXVk
aW9Db250ZXh0OjpjcmVhdGVIaWdoUGFzczJGaWx0ZXIoKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgbGF6eUluaXRpYWxpemUoKTsKKyAgICBpZiAoZG9jdW1lbnQoKSkKKyAg
ICAgICAgZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dN
ZXNzYWdlVHlwZSwgV2FybmluZ01lc3NhZ2VMZXZlbCwgImNyZWF0ZUhpZ2hQYXNzMkZpbHRlcigp
IGlzIGRlcHJlY2F0ZWQuICBVc2UgY3JlYXRlQmlxdWFkRmlsdGVyKCkgaW5zdGVhZC4iKTsKKwor
ICAgIHJldHVybiBIaWdoUGFzczJGaWx0ZXJOb2RlOjpjcmVhdGUodGhpcywgbV9kZXN0aW5hdGlv
bk5vZGUtPnNhbXBsZVJhdGUoKSk7Cit9CisKK1Bhc3NSZWZQdHI8QXVkaW9QYW5uZXJOb2RlPiBB
dWRpb0NvbnRleHQ6OmNyZWF0ZVBhbm5lcigpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICBsYXp5SW5pdGlhbGl6ZSgpOworICAgIHJldHVybiBBdWRpb1Bhbm5lck5vZGU6OmNy
ZWF0ZSh0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpKTsKK30KKworUGFzc1Jl
ZlB0cjxDb252b2x2ZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUNvbnZvbHZlcigpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBsYXp5SW5pdGlhbGl6ZSgpOworICAgIHJl
dHVybiBDb252b2x2ZXJOb2RlOjpjcmVhdGUodGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBs
ZVJhdGUoKSk7Cit9CisKK1Bhc3NSZWZQdHI8RHluYW1pY3NDb21wcmVzc29yTm9kZT4gQXVkaW9D
b250ZXh0OjpjcmVhdGVEeW5hbWljc0NvbXByZXNzb3IoKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgbGF6eUluaXRpYWxpemUoKTsKKyAgICByZXR1cm4gRHluYW1pY3NDb21w
cmVzc29yTm9kZTo6Y3JlYXRlKHRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkp
OworfQorCitQYXNzUmVmUHRyPFJlYWx0aW1lQW5hbHlzZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNy
ZWF0ZUFuYWx5c2VyKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGxhenlJ
bml0aWFsaXplKCk7CisgICAgcmV0dXJuIFJlYWx0aW1lQW5hbHlzZXJOb2RlOjpjcmVhdGUodGhp
cywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7Cit9CisKK1Bhc3NSZWZQdHI8QXVk
aW9HYWluTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVHYWluTm9kZSgpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBsYXp5SW5pdGlhbGl6ZSgpOworICAgIHJldHVybiBBdWRp
b0dhaW5Ob2RlOjpjcmVhdGUodGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7
Cit9CisKK1Bhc3NSZWZQdHI8RGVsYXlOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZURlbGF5Tm9k
ZSgpCit7CisgICAgY29uc3QgZG91YmxlIGRlZmF1bHRNYXhEZWxheVRpbWUgPSAxOworICAgIHJl
dHVybiBjcmVhdGVEZWxheU5vZGUoZGVmYXVsdE1heERlbGF5VGltZSk7Cit9CisKK1Bhc3NSZWZQ
dHI8RGVsYXlOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZURlbGF5Tm9kZShkb3VibGUgbWF4RGVs
YXlUaW1lKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgbGF6eUluaXRpYWxp
emUoKTsKKyAgICByZXR1cm4gRGVsYXlOb2RlOjpjcmVhdGUodGhpcywgbV9kZXN0aW5hdGlvbk5v
ZGUtPnNhbXBsZVJhdGUoKSwgbWF4RGVsYXlUaW1lKTsKK30KKworUGFzc1JlZlB0cjxBdWRpb0No
YW5uZWxTcGxpdHRlcj4gQXVkaW9Db250ZXh0OjpjcmVhdGVDaGFubmVsU3BsaXR0ZXIoKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgbGF6eUluaXRpYWxpemUoKTsKKyAgICBy
ZXR1cm4gQXVkaW9DaGFubmVsU3BsaXR0ZXI6OmNyZWF0ZSh0aGlzLCBtX2Rlc3RpbmF0aW9uTm9k
ZS0+c2FtcGxlUmF0ZSgpKTsKK30KKworUGFzc1JlZlB0cjxBdWRpb0NoYW5uZWxNZXJnZXI+IEF1
ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5lbE1lcmdlcigpCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBsYXp5SW5pdGlhbGl6ZSgpOworICAgIHJldHVybiBBdWRpb0NoYW5uZWxN
ZXJnZXI6OmNyZWF0ZSh0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpKTsKK30K
Kwordm9pZCBBdWRpb0NvbnRleHQ6Om5vdGlmeU5vZGVGaW5pc2hlZFByb2Nlc3NpbmcoQXVkaW9O
b2RlKiBub2RlKQoreworICAgIEFTU0VSVChpc0F1ZGlvVGhyZWFkKCkpOworICAgIG1fZmluaXNo
ZWROb2Rlcy5hcHBlbmQobm9kZSk7Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0OjpkZXJlZkZpbmlz
aGVkU291cmNlTm9kZXMoKQoreworICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7CisgICAgQVNT
RVJUKGlzQXVkaW9UaHJlYWQoKSB8fCBpc0F1ZGlvVGhyZWFkRmluaXNoZWQoKSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZmluaXNoZWROb2Rlcy5zaXplKCk7IGkrKykKKyAgICAg
ICAgZGVyZWZOb2RlKG1fZmluaXNoZWROb2Rlc1tpXSk7CisKKyAgICBtX2ZpbmlzaGVkTm9kZXMu
Y2xlYXIoKTsKK30KKwordm9pZCBBdWRpb0NvbnRleHQ6OnJlZk5vZGUoQXVkaW9Ob2RlKiBub2Rl
KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQXV0b0xvY2tlciBsb2NrZXIo
dGhpcyk7CisgICAgCisgICAgbm9kZS0+cmVmKEF1ZGlvTm9kZTo6UmVmVHlwZUNvbm5lY3Rpb24p
OworICAgIG1fcmVmZXJlbmNlZE5vZGVzLmFwcGVuZChub2RlKTsKK30KKwordm9pZCBBdWRpb0Nv
bnRleHQ6OmRlcmVmTm9kZShBdWRpb05vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKGlzR3JhcGhP
d25lcigpKTsKKyAgICAKKyAgICBub2RlLT5kZXJlZihBdWRpb05vZGU6OlJlZlR5cGVDb25uZWN0
aW9uKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3JlZmVyZW5jZWROb2Rlcy5z
aXplKCk7ICsraSkgeworICAgICAgICBpZiAobm9kZSA9PSBtX3JlZmVyZW5jZWROb2Rlc1tpXSkg
eworICAgICAgICAgICAgbV9yZWZlcmVuY2VkTm9kZXMucmVtb3ZlKGkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0OjpkZXJlZlVu
ZmluaXNoZWRTb3VyY2VOb2RlcygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpICYmIGlz
QXVkaW9UaHJlYWRGaW5pc2hlZCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9y
ZWZlcmVuY2VkTm9kZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcmVmZXJlbmNlZE5vZGVzW2ld
LT5kZXJlZihBdWRpb05vZGU6OlJlZlR5cGVDb25uZWN0aW9uKTsKKworICAgIG1fcmVmZXJlbmNl
ZE5vZGVzLmNsZWFyKCk7Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0Ojpsb2NrKGJvb2wmIG11c3RS
ZWxlYXNlTG9jaykKK3sKKyAgICAvLyBEb24ndCBhbGxvdyByZWd1bGFyIGxvY2sgaW4gcmVhbC10
aW1lIGF1ZGlvIHRocmVhZC4KKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgVGhy
ZWFkSWRlbnRpZmllciB0aGlzVGhyZWFkID0gY3VycmVudFRocmVhZCgpOworCisgICAgaWYgKHRo
aXNUaHJlYWQgPT0gbV9ncmFwaE93bmVyVGhyZWFkKSB7CisgICAgICAgIC8vIFdlIGFscmVhZHkg
aGF2ZSB0aGUgbG9jay4KKyAgICAgICAgbXVzdFJlbGVhc2VMb2NrID0gZmFsc2U7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gQWNxdWlyZSB0aGUgbG9jay4KKyAgICAgICAgbV9jb250ZXh0R3Jh
cGhNdXRleC5sb2NrKCk7CisgICAgICAgIG1fZ3JhcGhPd25lclRocmVhZCA9IHRoaXNUaHJlYWQ7
CisgICAgICAgIG11c3RSZWxlYXNlTG9jayA9IHRydWU7CisgICAgfQorfQorCitib29sIEF1ZGlv
Q29udGV4dDo6dHJ5TG9jayhib29sJiBtdXN0UmVsZWFzZUxvY2spCit7CisgICAgVGhyZWFkSWRl
bnRpZmllciB0aGlzVGhyZWFkID0gY3VycmVudFRocmVhZCgpOworICAgIGJvb2wgaXNBdWRpb1Ro
cmVhZCA9IHRoaXNUaHJlYWQgPT0gYXVkaW9UaHJlYWQoKTsKKworICAgIC8vIFRyeSB0byBjYXRj
aCBjYXNlcyBvZiB1c2luZyB0cnkgbG9jayBvbiBtYWluIHRocmVhZCAtIGl0IHNob3VsZCB1c2Ug
cmVndWxhciBsb2NrLgorICAgIEFTU0VSVChpc0F1ZGlvVGhyZWFkIHx8IGlzQXVkaW9UaHJlYWRG
aW5pc2hlZCgpKTsKKyAgICAKKyAgICBpZiAoIWlzQXVkaW9UaHJlYWQpIHsKKyAgICAgICAgLy8g
SW4gcmVsZWFzZSBidWlsZCB0cmVhdCB0cnlMb2NrKCkgYXMgbG9jaygpIChzaW5jZSBhYm92ZSBB
U1NFUlQoaXNBdWRpb1RocmVhZCkgbmV2ZXIgZmlyZXMpIC0gdGhpcyBpcyB0aGUgYmVzdCB3ZSBj
YW4gZG8uCisgICAgICAgIGxvY2sobXVzdFJlbGVhc2VMb2NrKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzTG9jazsKKyAgICAKKyAgICBpZiAodGhpc1Ro
cmVhZCA9PSBtX2dyYXBoT3duZXJUaHJlYWQpIHsKKyAgICAgICAgLy8gVGhyZWFkIGFscmVhZHkg
aGFzIHRoZSBsb2NrLgorICAgICAgICBoYXNMb2NrID0gdHJ1ZTsKKyAgICAgICAgbXVzdFJlbGVh
c2VMb2NrID0gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRG9uJ3QgYWxyZWFkeSBo
YXZlIHRoZSBsb2NrIC0gdHJ5IHRvIGFjcXVpcmUgaXQuCisgICAgICAgIGhhc0xvY2sgPSBtX2Nv
bnRleHRHcmFwaE11dGV4LnRyeUxvY2soKTsKKyAgICAgICAgCisgICAgICAgIGlmIChoYXNMb2Nr
KQorICAgICAgICAgICAgbV9ncmFwaE93bmVyVGhyZWFkID0gdGhpc1RocmVhZDsKKworICAgICAg
ICBtdXN0UmVsZWFzZUxvY2sgPSBoYXNMb2NrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gaGFz
TG9jazsKK30KKwordm9pZCBBdWRpb0NvbnRleHQ6OnVubG9jaygpCit7CisgICAgQVNTRVJUKGN1
cnJlbnRUaHJlYWQoKSA9PSBtX2dyYXBoT3duZXJUaHJlYWQpOworCisgICAgbV9ncmFwaE93bmVy
VGhyZWFkID0gVW5kZWZpbmVkVGhyZWFkSWRlbnRpZmllcjsKKyAgICBtX2NvbnRleHRHcmFwaE11
dGV4LnVubG9jaygpOworfQorCitib29sIEF1ZGlvQ29udGV4dDo6aXNBdWRpb1RocmVhZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKSA9PSBtX2F1ZGlvVGhyZWFkOworfQor
Citib29sIEF1ZGlvQ29udGV4dDo6aXNHcmFwaE93bmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Y3VycmVudFRocmVhZCgpID09IG1fZ3JhcGhPd25lclRocmVhZDsKK30KKwordm9pZCBBdWRpb0Nv
bnRleHQ6OmFkZERlZmVycmVkRmluaXNoRGVyZWYoQXVkaW9Ob2RlKiBub2RlLCBBdWRpb05vZGU6
OlJlZlR5cGUgcmVmVHlwZSkKK3sKKyAgICBBU1NFUlQoaXNBdWRpb1RocmVhZCgpKTsKKyAgICBt
X2RlZmVycmVkRmluaXNoRGVyZWZMaXN0LmFwcGVuZChBdWRpb0NvbnRleHQ6OlJlZkluZm8obm9k
ZSwgcmVmVHlwZSkpOworfQorCit2b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxlUHJlUmVuZGVyVGFz
a3MoKQoreworICAgIEFTU0VSVChpc0F1ZGlvVGhyZWFkKCkpOworIAorICAgIC8vIEF0IHRoZSBi
ZWdpbm5pbmcgb2YgZXZlcnkgcmVuZGVyIHF1YW50dW0sIHRyeSB0byB1cGRhdGUgdGhlIGludGVy
bmFsIHJlbmRlcmluZyBncmFwaCBzdGF0ZSAoZnJvbSBtYWluIHRocmVhZCBjaGFuZ2VzKS4KKyAg
ICAvLyBJdCdzIE9LIGlmIHRoZSB0cnlMb2NrKCkgZmFpbHMsIHdlJ2xsIGp1c3QgdGFrZSBzbGln
aHRseSBsb25nZXIgdG8gcGljayB1cCB0aGUgY2hhbmdlcy4KKyAgICBib29sIG11c3RSZWxlYXNl
TG9jazsKKyAgICBpZiAodHJ5TG9jayhtdXN0UmVsZWFzZUxvY2spKSB7CisgICAgICAgIC8vIEZp
eHVwIHRoZSBzdGF0ZSBvZiBhbnkgZGlydHkgQXVkaW9Ob2RlSW5wdXRzIGFuZCBBdWRpb05vZGVP
dXRwdXRzLgorICAgICAgICBoYW5kbGVEaXJ0eUF1ZGlvTm9kZUlucHV0cygpOworICAgICAgICBo
YW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtdXN0
UmVsZWFzZUxvY2spCisgICAgICAgICAgICB1bmxvY2soKTsKKyAgICB9Cit9CisKK3ZvaWQgQXVk
aW9Db250ZXh0OjpoYW5kbGVQb3N0UmVuZGVyVGFza3MoKQoreworICAgIEFTU0VSVChpc0F1ZGlv
VGhyZWFkKCkpOworIAorICAgIC8vIE11c3QgdXNlIGEgdHJ5TG9jaygpIGhlcmUgdG9vLiAgRG9u
J3Qgd29ycnksIHRoZSBsb2NrIHdpbGwgdmVyeSByYXJlbHkgYmUgY29udGVuZGVkIGFuZCB0aGlz
IG1ldGhvZCBpcyBjYWxsZWQgZnJlcXVlbnRseS4KKyAgICAvLyBUaGUgd29yc3QgdGhhdCBjYW4g
aGFwcGVuIGlzIHRoYXQgdGhlcmUgd2lsbCBiZSBzb21lIG5vZGVzIHdoaWNoIHdpbGwgdGFrZSBz
bGlnaHRseSBsb25nZXIgdGhhbiB1c3VhbCB0byBiZSBkZWxldGVkIG9yIHJlbW92ZWQKKyAgICAv
LyBmcm9tIHRoZSByZW5kZXIgZ3JhcGggKGluIHdoaWNoIGNhc2UgdGhleSdsbCByZW5kZXIgc2ls
ZW5jZSkuCisgICAgYm9vbCBtdXN0UmVsZWFzZUxvY2s7CisgICAgaWYgKHRyeUxvY2sobXVzdFJl
bGVhc2VMb2NrKSkgeworICAgICAgICAvLyBUYWtlIGNhcmUgb2YgZmluaXNoaW5nIGFueSBkZXJl
ZnMgd2hlcmUgdGhlIHRyeUxvY2soKSBmYWlsZWQgcHJldmlvdXNseS4KKyAgICAgICAgaGFuZGxl
RGVmZXJyZWRGaW5pc2hEZXJlZnMoKTsKKworICAgICAgICAvLyBEeW5hbWljYWxseSBjbGVhbiB1
cCBub2RlcyB3aGljaCBhcmUgbm8gbG9uZ2VyIG5lZWRlZC4KKyAgICAgICAgZGVyZWZGaW5pc2hl
ZFNvdXJjZU5vZGVzKCk7CisKKyAgICAgICAgLy8gRG9uJ3QgZGVsZXRlIGluIHRoZSByZWFsLXRp
bWUgdGhyZWFkLiBMZXQgdGhlIG1haW4gdGhyZWFkIGRvIGl0LgorICAgICAgICAvLyBSZWYtY291
bnRlZCBvYmplY3RzIGhlbGQgYnkgY2VydGFpbiBBdWRpb05vZGVzIG1heSBub3QgYmUgdGhyZWFk
LXNhZmUuCisgICAgICAgIHNjaGVkdWxlTm9kZURlbGV0aW9uKCk7CisKKyAgICAgICAgLy8gRml4
dXAgdGhlIHN0YXRlIG9mIGFueSBkaXJ0eSBBdWRpb05vZGVJbnB1dHMgYW5kIEF1ZGlvTm9kZU91
dHB1dHMuCisgICAgICAgIGhhbmRsZURpcnR5QXVkaW9Ob2RlSW5wdXRzKCk7CisgICAgICAgIGhh
bmRsZURpcnR5QXVkaW9Ob2RlT3V0cHV0cygpOworICAgICAgICAKKyAgICAgICAgaWYgKG11c3RS
ZWxlYXNlTG9jaykKKyAgICAgICAgICAgIHVubG9jaygpOworICAgIH0KK30KKwordm9pZCBBdWRp
b0NvbnRleHQ6OmhhbmRsZURlZmVycmVkRmluaXNoRGVyZWZzKCkKK3sKKyAgICBBU1NFUlQoaXNB
dWRpb1RocmVhZCgpICYmIGlzR3JhcGhPd25lcigpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9kZWZlcnJlZEZpbmlzaERlcmVmTGlzdC5zaXplKCk7ICsraSkgeworICAgICAgICBB
dWRpb05vZGUqIG5vZGUgPSBtX2RlZmVycmVkRmluaXNoRGVyZWZMaXN0W2ldLm1fbm9kZTsKKyAg
ICAgICAgQXVkaW9Ob2RlOjpSZWZUeXBlIHJlZlR5cGUgPSBtX2RlZmVycmVkRmluaXNoRGVyZWZM
aXN0W2ldLm1fcmVmVHlwZTsKKyAgICAgICAgbm9kZS0+ZmluaXNoRGVyZWYocmVmVHlwZSk7Cisg
ICAgfQorICAgIAorICAgIG1fZGVmZXJyZWRGaW5pc2hEZXJlZkxpc3QuY2xlYXIoKTsKK30KKwor
dm9pZCBBdWRpb0NvbnRleHQ6Om1hcmtGb3JEZWxldGlvbihBdWRpb05vZGUqIG5vZGUpCit7Cisg
ICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsKKyAgICBtX25vZGVzVG9EZWxldGUuYXBwZW5kKG5v
ZGUpOworfQorCit2b2lkIEF1ZGlvQ29udGV4dDo6c2NoZWR1bGVOb2RlRGVsZXRpb24oKQorewor
ICAgIGJvb2wgaXNHb29kID0gbV9pc0luaXRpYWxpemVkICYmIGlzR3JhcGhPd25lcigpOworICAg
IEFTU0VSVChpc0dvb2QpOworICAgIGlmICghaXNHb29kKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBNYWtlIHN1cmUgdG8gY2FsbCBkZWxldGVNYXJrZWROb2RlcygpIG9uIG1haW4gdGhyZWFk
LiAgICAKKyAgICBpZiAobV9ub2Rlc1RvRGVsZXRlLnNpemUoKSAmJiAhbV9pc0RlbGV0aW9uU2No
ZWR1bGVkKSB7CisgICAgICAgIG1faXNEZWxldGlvblNjaGVkdWxlZCA9IHRydWU7CisKKyAgICAg
ICAgLy8gRG9uJ3QgbGV0IG91cnNlbGYgZ2V0IGRlbGV0ZWQgYmVmb3JlIHRoZSBjYWxsYmFjay4K
KyAgICAgICAgLy8gU2VlIG1hdGNoaW5nIGRlcmVmKCkgaW4gZGVsZXRlTWFya2VkTm9kZXNEaXNw
YXRjaCgpLgorICAgICAgICByZWYoKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChkZWxldGVN
YXJrZWROb2Rlc0Rpc3BhdGNoLCB0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0
OjpkZWxldGVNYXJrZWROb2Rlc0Rpc3BhdGNoKHZvaWQqIHVzZXJEYXRhKQoreworICAgIEF1ZGlv
Q29udGV4dCogY29udGV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8QXVkaW9Db250ZXh0Kj4odXNlckRh
dGEpOworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGNvbnRleHQtPmRlbGV0ZU1hcmtlZE5vZGVzKCk7CisgICAgY29udGV4dC0+
ZGVyZWYoKTsKK30KKwordm9pZCBBdWRpb0NvbnRleHQ6OmRlbGV0ZU1hcmtlZE5vZGVzKCkKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgQXV0b0xvY2tlciBsb2NrZXIodGhp
cyk7CisgICAgCisgICAgLy8gTm90ZTogZGVsZXRpbmcgYW4gQXVkaW9Ob2RlIGNhbiBjYXVzZSBt
X25vZGVzVG9EZWxldGUgdG8gZ3Jvdy4KKyAgICB3aGlsZSAoc2l6ZV90IG4gPSBtX25vZGVzVG9E
ZWxldGUuc2l6ZSgpKSB7CisgICAgICAgIEF1ZGlvTm9kZSogbm9kZSA9IG1fbm9kZXNUb0RlbGV0
ZVtuIC0gMV07CisgICAgICAgIG1fbm9kZXNUb0RlbGV0ZS5yZW1vdmVMYXN0KCk7CisKKyAgICAg
ICAgLy8gQmVmb3JlIGRlbGV0aW5nIHRoZSBub2RlLCBjbGVhciBvdXQgYW55IEF1ZGlvTm9kZUlu
cHV0cyBmcm9tIG1fZGlydHlBdWRpb05vZGVJbnB1dHMuCisgICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mSW5wdXRzID0gbm9kZS0+bnVtYmVyT2ZJbnB1dHMoKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bWJlck9mSW5wdXRzOyArK2kpCisgICAgICAgICAgICBtX2RpcnR5QXVk
aW9Ob2RlSW5wdXRzLnJlbW92ZShub2RlLT5pbnB1dChpKSk7CisKKyAgICAgICAgLy8gQmVmb3Jl
IGRlbGV0aW5nIHRoZSBub2RlLCBjbGVhciBvdXQgYW55IEF1ZGlvTm9kZU91dHB1dHMgZnJvbSBt
X2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy4KKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRz
ID0gbm9kZS0+bnVtYmVyT2ZPdXRwdXRzKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1iZXJPZk91dHB1dHM7ICsraSkKKyAgICAgICAgICAgIG1fZGlydHlBdWRpb05vZGVP
dXRwdXRzLnJlbW92ZShub2RlLT5vdXRwdXQoaSkpOworCisgICAgICAgIC8vIEZpbmFsbHksIGRl
bGV0ZSBpdC4KKyAgICAgICAgZGVsZXRlIG5vZGU7CisgICAgfQorICAgIAorICAgIG1faXNEZWxl
dGlvblNjaGVkdWxlZCA9IGZhbHNlOworfQorCit2b2lkIEF1ZGlvQ29udGV4dDo6bWFya0F1ZGlv
Tm9kZUlucHV0RGlydHkoQXVkaW9Ob2RlSW5wdXQqIGlucHV0KQoreworICAgIEFTU0VSVChpc0dy
YXBoT3duZXIoKSk7ICAgIAorICAgIG1fZGlydHlBdWRpb05vZGVJbnB1dHMuYWRkKGlucHV0KTsK
K30KKwordm9pZCBBdWRpb0NvbnRleHQ6Om1hcmtBdWRpb05vZGVPdXRwdXREaXJ0eShBdWRpb05v
ZGVPdXRwdXQqIG91dHB1dCkKK3sKKyAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOyAgICAKKyAg
ICBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5hZGQob3V0cHV0KTsKK30KKwordm9pZCBBdWRpb0Nv
bnRleHQ6OmhhbmRsZURpcnR5QXVkaW9Ob2RlSW5wdXRzKCkKK3sKKyAgICBBU1NFUlQoaXNHcmFw
aE93bmVyKCkpOyAgICAKKworICAgIGZvciAoSGFzaFNldDxBdWRpb05vZGVJbnB1dCo+OjppdGVy
YXRvciBpID0gbV9kaXJ0eUF1ZGlvTm9kZUlucHV0cy5iZWdpbigpOyBpICE9IG1fZGlydHlBdWRp
b05vZGVJbnB1dHMuZW5kKCk7ICsraSkKKyAgICAgICAgKCppKS0+dXBkYXRlUmVuZGVyaW5nU3Rh
dGUoKTsKKworICAgIG1fZGlydHlBdWRpb05vZGVJbnB1dHMuY2xlYXIoKTsKK30KKwordm9pZCBB
dWRpb0NvbnRleHQ6OmhhbmRsZURpcnR5QXVkaW9Ob2RlT3V0cHV0cygpCit7CisgICAgQVNTRVJU
KGlzR3JhcGhPd25lcigpKTsgICAgCisKKyAgICBmb3IgKEhhc2hTZXQ8QXVkaW9Ob2RlT3V0cHV0
Kj46Oml0ZXJhdG9yIGkgPSBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5iZWdpbigpOyBpICE9IG1f
ZGlydHlBdWRpb05vZGVPdXRwdXRzLmVuZCgpOyArK2kpCisgICAgICAgICgqaSktPnVwZGF0ZVJl
bmRlcmluZ1N0YXRlKCk7CisKKyAgICBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5jbGVhcigpOwor
fQorCitjb25zdCBBdG9taWNTdHJpbmcmIEF1ZGlvQ29udGV4dDo6aW50ZXJmYWNlTmFtZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JBdWRpb0NvbnRleHQ7
Cit9CisKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEF1ZGlvQ29udGV4dDo6c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRvY3VtZW50KCk7Cit9CisKK3ZvaWQg
QXVkaW9Db250ZXh0OjpzdGFydFJlbmRlcmluZygpCit7CisgICAgZGVzdGluYXRpb24oKS0+c3Rh
cnRSZW5kZXJpbmcoKTsKK30KKwordm9pZCBBdWRpb0NvbnRleHQ6OmZpcmVDb21wbGV0aW9uRXZl
bnQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFpc01haW5UaHJl
YWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBBdWRpb0J1ZmZlciogcmVuZGVy
ZWRCdWZmZXIgPSBtX3JlbmRlclRhcmdldC5nZXQoKTsKKworICAgIEFTU0VSVChyZW5kZXJlZEJ1
ZmZlcik7CisgICAgaWYgKCFyZW5kZXJlZEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gQXZvaWQgZmlyaW5nIHRoZSBldmVudCBpZiB0aGUgZG9jdW1lbnQgaGFzIGFscmVhZHkgZ29u
ZSBhd2F5LgorICAgIGlmIChoYXNEb2N1bWVudCgpKSB7CisgICAgICAgIC8vIENhbGwgdGhlIG9m
ZmxpbmUgcmVuZGVyaW5nIGNvbXBsZXRpb24gZXZlbnQgbGlzdGVuZXIuCisgICAgICAgIGRpc3Bh
dGNoRXZlbnQoT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50OjpjcmVhdGUocmVuZGVyZWRCdWZm
ZXIpKTsKKyAgICB9Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0OjppbmNyZW1lbnRBY3RpdmVTb3Vy
Y2VDb3VudCgpCit7CisgICAgYXRvbWljSW5jcmVtZW50KCZtX2FjdGl2ZVNvdXJjZUNvdW50KTsK
K30KKwordm9pZCBBdWRpb0NvbnRleHQ6OmRlY3JlbWVudEFjdGl2ZVNvdXJjZUNvdW50KCkKK3sK
KyAgICBhdG9taWNEZWNyZW1lbnQoJm1fYWN0aXZlU291cmNlQ291bnQpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCShyZXZpc2lv
biAxMTE0MzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oOjEx
MTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEF1
ZGlvQ29udGV4dF9oCisjZGVmaW5lIEF1ZGlvQ29udGV4dF9oCisKKyNpbmNsdWRlICJBY3RpdmVE
T01PYmplY3QuaCIKKyNpbmNsdWRlICJBc3luY0F1ZGlvRGVjb2Rlci5oIgorI2luY2x1ZGUgIkF1
ZGlvQnVzLmgiCisjaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCIKKyNpbmNsdWRlICJF
dmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJIUlRG
RGF0YWJhc2VMb2FkZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQXVkaW9CdWZmZXI7CitjbGFzcyBBdWRpb0J1ZmZlckNhbGxiYWNrOworY2xhc3MgQXVkaW9C
dWZmZXJTb3VyY2VOb2RlOworY2xhc3MgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOworY2xh
c3MgSFRNTE1lZGlhRWxlbWVudDsKK2NsYXNzIEF1ZGlvQ2hhbm5lbE1lcmdlcjsKK2NsYXNzIEF1
ZGlvQ2hhbm5lbFNwbGl0dGVyOworY2xhc3MgQXVkaW9HYWluTm9kZTsKK2NsYXNzIEF1ZGlvUGFu
bmVyTm9kZTsKK2NsYXNzIEF1ZGlvTGlzdGVuZXI7CitjbGFzcyBCaXF1YWRGaWx0ZXJOb2RlOwor
Y2xhc3MgRGVsYXlOb2RlOworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBMb3dQYXNzMkZpbHRlck5v
ZGU7CitjbGFzcyBIaWdoUGFzczJGaWx0ZXJOb2RlOworY2xhc3MgQ29udm9sdmVyTm9kZTsKK2Ns
YXNzIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU7CitjbGFzcyBSZWFsdGltZUFuYWx5c2VyTm9kZTsK
K2NsYXNzIFdhdmVTaGFwZXJOb2RlOworY2xhc3MgSmF2YVNjcmlwdEF1ZGlvTm9kZTsKKworLy8g
QXVkaW9Db250ZXh0IGlzIHRoZSBjb3JuZXJzdG9uZSBvZiB0aGUgd2ViIGF1ZGlvIEFQSSBhbmQg
YWxsIEF1ZGlvTm9kZXMgYXJlIGNyZWF0ZWQgZnJvbSBpdC4KKy8vIEZvciB0aHJlYWQgc2FmZXR5
IGJldHdlZW4gdGhlIGF1ZGlvIHRocmVhZCBhbmQgdGhlIG1haW4gdGhyZWFkLCBpdCBoYXMgYSBy
ZW5kZXJpbmcgZ3JhcGggbG9ja2luZyBtZWNoYW5pc20uIAorCitjbGFzcyBBdWRpb0NvbnRleHQg
OiBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QXVk
aW9Db250ZXh0PiwgcHVibGljIEV2ZW50VGFyZ2V0IHsKK3B1YmxpYzoKKyAgICAvLyBDcmVhdGUg
YW4gQXVkaW9Db250ZXh0IGZvciByZW5kZXJpbmcgdG8gdGhlIGF1ZGlvIGhhcmR3YXJlLgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlvQ29udGV4dD4gY3JlYXRlKERvY3VtZW50KiwgRXhjZXB0
aW9uQ29kZSYpOworCisgICAgLy8gQ3JlYXRlIGFuIEF1ZGlvQ29udGV4dCBmb3Igb2ZmbGluZSAo
bm9uLXJlYWx0aW1lKSByZW5kZXJpbmcuCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXVkaW9Db250
ZXh0PiBjcmVhdGVPZmZsaW5lQ29udGV4dChEb2N1bWVudCosIHVuc2lnbmVkIG51bWJlck9mQ2hh
bm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSwgRXhjZXB0aW9u
Q29kZSYpOworCisgICAgdmlydHVhbCB+QXVkaW9Db250ZXh0KCk7CisKKyAgICBib29sIGlzSW5p
dGlhbGl6ZWQoKSBjb25zdDsKKyAgICAKKyAgICBib29sIGlzT2ZmbGluZUNvbnRleHQoKSB7IHJl
dHVybiBtX2lzT2ZmbGluZUNvbnRleHQ7IH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIGlu
aXRpYWxpemUoKSB3YXMgY2FsbGVkIEFORCBhbGwgYXN5bmNocm9ub3VzIGluaXRpYWxpemF0aW9u
IGhhcyBjb21wbGV0ZWQuCisgICAgYm9vbCBpc1J1bm5hYmxlKCkgY29uc3Q7CisKKyAgICAvLyBE
b2N1bWVudCBub3RpZmljYXRpb24KKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOworCisgICAgRG9j
dW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7IC8vIEFTU0VSVHMgaWYgZG9jdW1lbnQgbm8gbG9uZ2Vy
IGV4aXN0cy4KKyAgICBib29sIGhhc0RvY3VtZW50KCk7CisKKyAgICBBdWRpb0Rlc3RpbmF0aW9u
Tm9kZSogZGVzdGluYXRpb24oKSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZS5nZXQoKTsgfQor
ICAgIHNpemVfdCBjdXJyZW50U2FtcGxlRnJhbWUoKSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9k
ZS0+Y3VycmVudFNhbXBsZUZyYW1lKCk7IH0KKyAgICBkb3VibGUgY3VycmVudFRpbWUoKSB7IHJl
dHVybiBtX2Rlc3RpbmF0aW9uTm9kZS0+Y3VycmVudFRpbWUoKTsgfQorICAgIGZsb2F0IHNhbXBs
ZVJhdGUoKSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpOyB9CisgICAg
dW5zaWduZWQgbG9uZyBhY3RpdmVTb3VyY2VDb3VudCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmc+KG1fYWN0aXZlU291cmNlQ291bnQpOyB9CisKKyAgICB2b2lkIGluY3JlbWVu
dEFjdGl2ZVNvdXJjZUNvdW50KCk7CisgICAgdm9pZCBkZWNyZW1lbnRBY3RpdmVTb3VyY2VDb3Vu
dCgpOworICAgIAorICAgIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IGNyZWF0ZUJ1ZmZlcih1bnNp
Z25lZCBudW1iZXJPZkNoYW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMsIGZsb2F0IHNhbXBs
ZVJhdGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBjcmVh
dGVCdWZmZXIoQXJyYXlCdWZmZXIqLCBib29sIG1peFRvTW9ubywgRXhjZXB0aW9uQ29kZSYpOwor
CisgICAgLy8gQXN5bmNocm9ub3VzIGF1ZGlvIGZpbGUgZGF0YSBkZWNvZGluZy4KKyAgICB2b2lk
IGRlY29kZUF1ZGlvRGF0YShBcnJheUJ1ZmZlciosIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxs
YmFjaz4sIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmIGVj
KTsKKworICAgIEF1ZGlvTGlzdGVuZXIqIGxpc3RlbmVyKCkgeyByZXR1cm4gbV9saXN0ZW5lci5n
ZXQoKTsgfQorCisgICAgLy8gVGhlIEF1ZGlvTm9kZSBjcmVhdGUgbWV0aG9kcyBhcmUgY2FsbGVk
IG9uIHRoZSBtYWluIHRocmVhZCAoZnJvbSBKYXZhU2NyaXB0KS4KKyAgICBQYXNzUmVmUHRyPEF1
ZGlvQnVmZmVyU291cmNlTm9kZT4gY3JlYXRlQnVmZmVyU291cmNlKCk7CisjaWYgRU5BQkxFKFZJ
REVPKQorICAgIFBhc3NSZWZQdHI8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBjcmVhdGVN
ZWRpYUVsZW1lbnRTb3VyY2UoSFRNTE1lZGlhRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyNl
bmRpZgorICAgIFBhc3NSZWZQdHI8QXVkaW9HYWluTm9kZT4gY3JlYXRlR2Fpbk5vZGUoKTsKKyAg
ICBQYXNzUmVmUHRyPEJpcXVhZEZpbHRlck5vZGU+IGNyZWF0ZUJpcXVhZEZpbHRlcigpOworICAg
IFBhc3NSZWZQdHI8V2F2ZVNoYXBlck5vZGU+IGNyZWF0ZVdhdmVTaGFwZXIoKTsKKyAgICBQYXNz
UmVmUHRyPERlbGF5Tm9kZT4gY3JlYXRlRGVsYXlOb2RlKCk7CisgICAgUGFzc1JlZlB0cjxEZWxh
eU5vZGU+IGNyZWF0ZURlbGF5Tm9kZShkb3VibGUgbWF4RGVsYXlUaW1lKTsKKyAgICBQYXNzUmVm
UHRyPExvd1Bhc3MyRmlsdGVyTm9kZT4gY3JlYXRlTG93UGFzczJGaWx0ZXIoKTsKKyAgICBQYXNz
UmVmUHRyPEhpZ2hQYXNzMkZpbHRlck5vZGU+IGNyZWF0ZUhpZ2hQYXNzMkZpbHRlcigpOworICAg
IFBhc3NSZWZQdHI8QXVkaW9QYW5uZXJOb2RlPiBjcmVhdGVQYW5uZXIoKTsKKyAgICBQYXNzUmVm
UHRyPENvbnZvbHZlck5vZGU+IGNyZWF0ZUNvbnZvbHZlcigpOworICAgIFBhc3NSZWZQdHI8RHlu
YW1pY3NDb21wcmVzc29yTm9kZT4gY3JlYXRlRHluYW1pY3NDb21wcmVzc29yKCk7ICAgIAorICAg
IFBhc3NSZWZQdHI8UmVhbHRpbWVBbmFseXNlck5vZGU+IGNyZWF0ZUFuYWx5c2VyKCk7CisgICAg
UGFzc1JlZlB0cjxKYXZhU2NyaXB0QXVkaW9Ob2RlPiBjcmVhdGVKYXZhU2NyaXB0Tm9kZShzaXpl
X3QgYnVmZmVyU2l6ZSk7CisgICAgUGFzc1JlZlB0cjxBdWRpb0NoYW5uZWxTcGxpdHRlcj4gY3Jl
YXRlQ2hhbm5lbFNwbGl0dGVyKCk7CisgICAgUGFzc1JlZlB0cjxBdWRpb0NoYW5uZWxNZXJnZXI+
IGNyZWF0ZUNoYW5uZWxNZXJnZXIoKTsKKworICAgIC8vIFdoZW4gYSBzb3VyY2Ugbm9kZSBoYXMg
bm8gbW9yZSBwcm9jZXNzaW5nIHRvIGRvIChoYXMgZmluaXNoZWQgcGxheWluZyksIHRoZW4gaXQg
dGVsbHMgdGhlIGNvbnRleHQgdG8gZGVyZWZlcmVuY2UgaXQuCisgICAgdm9pZCBub3RpZnlOb2Rl
RmluaXNoZWRQcm9jZXNzaW5nKEF1ZGlvTm9kZSopOworCisgICAgLy8gQ2FsbGVkIGF0IHRoZSBz
dGFydCBvZiBlYWNoIHJlbmRlciBxdWFudHVtLgorICAgIHZvaWQgaGFuZGxlUHJlUmVuZGVyVGFz
a3MoKTsKKworICAgIC8vIENhbGxlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcmVuZGVyIHF1YW50dW0u
CisgICAgdm9pZCBoYW5kbGVQb3N0UmVuZGVyVGFza3MoKTsKKworICAgIC8vIENhbGxlZCBwZXJp
b2RpY2FsbHkgYXQgdGhlIGVuZCBvZiBlYWNoIHJlbmRlciBxdWFudHVtIHRvIGRlcmVmZXJlbmNl
IGZpbmlzaGVkIHNvdXJjZSBub2Rlcy4KKyAgICB2b2lkIGRlcmVmRmluaXNoZWRTb3VyY2VOb2Rl
cygpOworCisgICAgLy8gV2Ugc2NoZWR1bGUgZGVsZXRpb24gb2YgYWxsIG1hcmtlZCBub2RlcyBh
dCB0aGUgZW5kIG9mIGVhY2ggcmVhbHRpbWUgcmVuZGVyIHF1YW50dW0uCisgICAgdm9pZCBtYXJr
Rm9yRGVsZXRpb24oQXVkaW9Ob2RlKik7CisgICAgdm9pZCBkZWxldGVNYXJrZWROb2RlcygpOwor
ICAgIAorICAgIC8vIEtlZXBzIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgY29ubmVjdGlvbnMgbWFk
ZS4KKyAgICB2b2lkIGluY3JlbWVudENvbm5lY3Rpb25Db3VudCgpCisgICAgeworICAgICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBtX2Nvbm5lY3Rpb25Db3VudCsrOworICAg
IH0KKworICAgIHVuc2lnbmVkIGNvbm5lY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
bmVjdGlvbkNvdW50OyB9CisKKyAgICAvLworICAgIC8vIFRocmVhZCBTYWZldHkgYW5kIEdyYXBo
IExvY2tpbmc6CisgICAgLy8KKyAgICAKKyAgICB2b2lkIHNldEF1ZGlvVGhyZWFkKFRocmVhZElk
ZW50aWZpZXIgdGhyZWFkKSB7IG1fYXVkaW9UaHJlYWQgPSB0aHJlYWQ7IH0gLy8gRklYTUU6IGNo
ZWNrIGVpdGhlciBub3QgaW5pdGlhbGl6ZWQgb3IgdGhlIHNhbWUKKyAgICBUaHJlYWRJZGVudGlm
aWVyIGF1ZGlvVGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV9hdWRpb1RocmVhZDsgfQorICAgIGJv
b2wgaXNBdWRpb1RocmVhZCgpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0cnVlIG9ubHkgYWZ0
ZXIgdGhlIGF1ZGlvIHRocmVhZCBoYXMgYmVlbiBzdGFydGVkIGFuZCB0aGVuIHNodXRkb3duLgor
ICAgIGJvb2wgaXNBdWRpb1RocmVhZEZpbmlzaGVkKCkgeyByZXR1cm4gbV9pc0F1ZGlvVGhyZWFk
RmluaXNoZWQ7IH0KKyAgICAKKyAgICAvLyBtdXN0UmVsZWFzZUxvY2sgaXMgc2V0IHRvIHRydWUg
aWYgd2UgYWNxdWlyZWQgdGhlIGxvY2sgaW4gdGhpcyBtZXRob2QgY2FsbCBhbmQgY2FsbGVyIG11
c3QgdW5sb2NrKCksIGZhbHNlIGlmIGl0IHdhcyBwcmV2aW91c2x5IGFjcXVpcmVkLgorICAgIHZv
aWQgbG9jayhib29sJiBtdXN0UmVsZWFzZUxvY2spOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlm
IHdlIG93biB0aGUgbG9jay4KKyAgICAvLyBtdXN0UmVsZWFzZUxvY2sgaXMgc2V0IHRvIHRydWUg
aWYgd2UgYWNxdWlyZWQgdGhlIGxvY2sgaW4gdGhpcyBtZXRob2QgY2FsbCBhbmQgY2FsbGVyIG11
c3QgdW5sb2NrKCksIGZhbHNlIGlmIGl0IHdhcyBwcmV2aW91c2x5IGFjcXVpcmVkLgorICAgIGJv
b2wgdHJ5TG9jayhib29sJiBtdXN0UmVsZWFzZUxvY2spOworCisgICAgdm9pZCB1bmxvY2soKTsK
KworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHRocmVhZCBvd25zIHRoZSBjb250ZXh0J3Mg
bG9jay4KKyAgICBib29sIGlzR3JhcGhPd25lcigpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0
aGUgbWF4aW11bSBudW11YmVyIG9mIGNoYW5uZWxzIHdlIGNhbiBzdXBwb3J0LgorICAgIHN0YXRp
YyB1bnNpZ25lZCBtYXhOdW1iZXJPZkNoYW5uZWxzKCkgeyByZXR1cm4gTWF4TnVtYmVyT2ZDaGFu
bmVsczt9CisKKyAgICBjbGFzcyBBdXRvTG9ja2VyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEF1
dG9Mb2NrZXIoQXVkaW9Db250ZXh0KiBjb250ZXh0KQorICAgICAgICAgICAgOiBtX2NvbnRleHQo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGNvbnRleHQpOworICAgICAg
ICAgICAgY29udGV4dC0+bG9jayhtX211c3RSZWxlYXNlTG9jayk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIH5BdXRvTG9ja2VyKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1f
bXVzdFJlbGVhc2VMb2NrKQorICAgICAgICAgICAgICAgIG1fY29udGV4dC0+dW5sb2NrKCk7Cisg
ICAgICAgIH0KKyAgICBwcml2YXRlOgorICAgICAgICBBdWRpb0NvbnRleHQqIG1fY29udGV4dDsK
KyAgICAgICAgYm9vbCBtX211c3RSZWxlYXNlTG9jazsKKyAgICB9OworICAgIAorICAgIC8vIElu
IEF1ZGlvTm9kZTo6ZGVyZWYoKSBhIHRyeUxvY2soKSBpcyB1c2VkIGZvciBjYWxsaW5nIGZpbmlz
aERlcmVmKCksIGJ1dCBpZiBpdCBmYWlscyBrZWVwIHRyYWNrIGhlcmUuCisgICAgdm9pZCBhZGRE
ZWZlcnJlZEZpbmlzaERlcmVmKEF1ZGlvTm9kZSosIEF1ZGlvTm9kZTo6UmVmVHlwZSk7CisKKyAg
ICAvLyBJbiB0aGUgYXVkaW8gdGhyZWFkIGF0IHRoZSBzdGFydCBvZiBlYWNoIHJlbmRlciBjeWNs
ZSwgd2UnbGwgY2FsbCBoYW5kbGVEZWZlcnJlZEZpbmlzaERlcmVmcygpLgorICAgIHZvaWQgaGFu
ZGxlRGVmZXJyZWRGaW5pc2hEZXJlZnMoKTsKKworICAgIC8vIE9ubHkgYWNjZXNzZWQgd2hlbiB0
aGUgZ3JhcGggbG9jayBpcyBoZWxkLgorICAgIHZvaWQgbWFya0F1ZGlvTm9kZUlucHV0RGlydHko
QXVkaW9Ob2RlSW5wdXQqKTsKKyAgICB2b2lkIG1hcmtBdWRpb05vZGVPdXRwdXREaXJ0eShBdWRp
b05vZGVPdXRwdXQqKTsKKworICAgIC8vIEV2ZW50VGFyZ2V0CisgICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgeyByZXR1cm4gJm1fZXZlbnRU
YXJnZXREYXRhOyB9CisgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFy
Z2V0RGF0YSgpIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsgfQorCisgICAgREVGSU5FX0FU
VFJJQlVURV9FVkVOVF9MSVNURU5FUihjb21wbGV0ZSk7CisKKyAgICAvLyBSZWNvbmNpbGUgcmVm
L2RlcmVmIHdoaWNoIGFyZSBkZWZpbmVkIGJvdGggaW4gVGhyZWFkU2FmZVJlZkNvdW50ZWQgYW5k
IEV2ZW50VGFyZ2V0LgorICAgIHVzaW5nIFRocmVhZFNhZmVSZWZDb3VudGVkPEF1ZGlvQ29udGV4
dD46OnJlZjsKKyAgICB1c2luZyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBdWRpb0NvbnRleHQ+Ojpk
ZXJlZjsKKworICAgIHZvaWQgc3RhcnRSZW5kZXJpbmcoKTsKKyAgICB2b2lkIGZpcmVDb21wbGV0
aW9uRXZlbnQoKTsKKyAgICAKKyAgICBzdGF0aWMgdW5zaWduZWQgc19oYXJkd2FyZUNvbnRleHRD
b3VudDsKKyAgICAKK3ByaXZhdGU6CisgICAgQXVkaW9Db250ZXh0KERvY3VtZW50Kik7CisgICAg
QXVkaW9Db250ZXh0KERvY3VtZW50KiwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90
IG51bWJlck9mRnJhbWVzLCBmbG9hdCBzYW1wbGVSYXRlKTsKKyAgICB2b2lkIGNvbnN0cnVjdENv
bW1vbigpOworCisgICAgdm9pZCBsYXp5SW5pdGlhbGl6ZSgpOworICAgIHZvaWQgdW5pbml0aWFs
aXplKCk7CisgICAgc3RhdGljIHZvaWQgdW5pbml0aWFsaXplRGlzcGF0Y2godm9pZCogdXNlckRh
dGEpOworCisgICAgdm9pZCBzY2hlZHVsZU5vZGVEZWxldGlvbigpOworICAgIHN0YXRpYyB2b2lk
IGRlbGV0ZU1hcmtlZE5vZGVzRGlzcGF0Y2godm9pZCogdXNlckRhdGEpOworICAgIAorICAgIGJv
b2wgbV9pc0luaXRpYWxpemVkOworICAgIGJvb2wgbV9pc0F1ZGlvVGhyZWFkRmluaXNoZWQ7Cisg
ICAgYm9vbCBtX2lzQXVkaW9UaHJlYWRTaHV0ZG93bjsKKworICAgIERvY3VtZW50KiBtX2RvY3Vt
ZW50OworCisgICAgLy8gVGhlIGNvbnRleHQgaXRzZWxmIGtlZXBzIGEgcmVmZXJlbmNlIHRvIGFs
bCBzb3VyY2Ugbm9kZXMuICBUaGUgc291cmNlIG5vZGVzLCB0aGVuIHJlZmVyZW5jZSBhbGwgbm9k
ZXMgdGhleSdyZSBjb25uZWN0ZWQgdG8uCisgICAgLy8gSW4gdHVybiwgdGhlc2Ugbm9kZXMgcmVm
ZXJlbmNlIGFsbCBub2RlcyB0aGV5J3JlIGNvbm5lY3RlZCB0by4gIEFsbCBub2RlcyBhcmUgdWx0
aW1hdGVseSBjb25uZWN0ZWQgdG8gdGhlIEF1ZGlvRGVzdGluYXRpb25Ob2RlLgorICAgIC8vIFdo
ZW4gdGhlIGNvbnRleHQgZGVyZWZlcmVuY2VzIGEgc291cmNlIG5vZGUsIGl0IHdpbGwgYmUgZGVh
Y3RpdmF0ZWQgZnJvbSB0aGUgcmVuZGVyaW5nIGdyYXBoIGFsb25nIHdpdGggYWxsIG90aGVyIG5v
ZGVzIGl0IGlzCisgICAgLy8gdW5pcXVlbHkgY29ubmVjdGVkIHRvLiAgU2VlIHRoZSBBdWRpb05v
ZGU6OnJlZigpIGFuZCBBdWRpb05vZGU6OmRlcmVmKCkgbWV0aG9kcyBmb3IgbW9yZSBkZXRhaWxz
LgorICAgIHZvaWQgcmVmTm9kZShBdWRpb05vZGUqKTsKKyAgICB2b2lkIGRlcmVmTm9kZShBdWRp
b05vZGUqKTsKKworICAgIC8vIFdoZW4gdGhlIGNvbnRleHQgZ29lcyBhd2F5LCB0aGVyZSBtaWdo
dCBzdGlsbCBiZSBzb21lIHNvdXJjZXMgd2hpY2ggaGF2ZW4ndCBmaW5pc2hlZCBwbGF5aW5nLgor
ICAgIC8vIE1ha2Ugc3VyZSB0byBkZXJlZmVyZW5jZSB0aGVtIGhlcmUuCisgICAgdm9pZCBkZXJl
ZlVuZmluaXNoZWRTb3VyY2VOb2RlcygpOworCisgICAgUmVmUHRyPEF1ZGlvRGVzdGluYXRpb25O
b2RlPiBtX2Rlc3RpbmF0aW9uTm9kZTsKKyAgICBSZWZQdHI8QXVkaW9MaXN0ZW5lcj4gbV9saXN0
ZW5lcjsKKworICAgIC8vIE9ubHkgYWNjZXNzZWQgaW4gdGhlIGF1ZGlvIHRocmVhZC4KKyAgICBW
ZWN0b3I8QXVkaW9Ob2RlKj4gbV9maW5pc2hlZE5vZGVzOworCisgICAgLy8gV2UgZG9uJ3QgdXNl
IFJlZlB0cjxBdWRpb05vZGU+IGhlcmUgYmVjYXVzZSBBdWRpb05vZGUgaGFzIGEgbW9yZSBjb21w
bGV4IHJlZigpIC8gZGVyZWYoKSBpbXBsZW1lbnRhdGlvbgorICAgIC8vIHdpdGggYW4gb3B0aW9u
YWwgYXJndW1lbnQgZm9yIHJlZlR5cGUuICBXZSBuZWVkIHRvIHVzZSB0aGUgc3BlY2lhbCByZWZU
eXBlOiBSZWZUeXBlQ29ubmVjdGlvbgorICAgIC8vIEVpdGhlciBhY2Nlc3NlZCB3aGVuIHRoZSBn
cmFwaCBsb2NrIGlzIGhlbGQsIG9yIG9uIHRoZSBtYWluIHRocmVhZCB3aGVuIHRoZSBhdWRpbyB0
aHJlYWQgaGFzIGZpbmlzaGVkLgorICAgIFZlY3RvcjxBdWRpb05vZGUqPiBtX3JlZmVyZW5jZWRO
b2RlczsKKworICAgIC8vIEFjY3VtdWxhdGUgbm9kZXMgd2hpY2ggbmVlZCB0byBiZSBkZWxldGVk
IGhlcmUuCisgICAgLy8gVGhleSB3aWxsIGJlIHNjaGVkdWxlZCBmb3IgZGVsZXRpb24gKG9uIHRo
ZSBtYWluIHRocmVhZCkgYXQgdGhlIGVuZCBvZiBhIHJlbmRlciBjeWNsZSAoaW4gcmVhbHRpbWUg
dGhyZWFkKS4KKyAgICBWZWN0b3I8QXVkaW9Ob2RlKj4gbV9ub2Rlc1RvRGVsZXRlOworICAgIGJv
b2wgbV9pc0RlbGV0aW9uU2NoZWR1bGVkOworCisgICAgLy8gT25seSBhY2Nlc3NlZCB3aGVuIHRo
ZSBncmFwaCBsb2NrIGlzIGhlbGQuCisgICAgSGFzaFNldDxBdWRpb05vZGVJbnB1dCo+IG1fZGly
dHlBdWRpb05vZGVJbnB1dHM7CisgICAgSGFzaFNldDxBdWRpb05vZGVPdXRwdXQqPiBtX2RpcnR5
QXVkaW9Ob2RlT3V0cHV0czsKKyAgICB2b2lkIGhhbmRsZURpcnR5QXVkaW9Ob2RlSW5wdXRzKCk7
CisgICAgdm9pZCBoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMoKTsKKworICAgIHVuc2lnbmVk
IG1fY29ubmVjdGlvbkNvdW50OworCisgICAgLy8gR3JhcGggbG9ja2luZy4KKyAgICBNdXRleCBt
X2NvbnRleHRHcmFwaE11dGV4OworICAgIHZvbGF0aWxlIFRocmVhZElkZW50aWZpZXIgbV9hdWRp
b1RocmVhZDsKKyAgICB2b2xhdGlsZSBUaHJlYWRJZGVudGlmaWVyIG1fZ3JhcGhPd25lclRocmVh
ZDsgLy8gaWYgdGhlIGxvY2sgaXMgaGVsZCB0aGVuIHRoaXMgaXMgdGhlIHRocmVhZCB3aGljaCBv
d25zIGl0LCBvdGhlcndpc2UgPT0gVW5kZWZpbmVkVGhyZWFkSWRlbnRpZmllcgorICAgIAorICAg
IC8vIERlZmVycmVkIGRlLXJlZmVyZW5jaW5nLgorICAgIHN0cnVjdCBSZWZJbmZvIHsKKyAgICAg
ICAgUmVmSW5mbyhBdWRpb05vZGUqIG5vZGUsIEF1ZGlvTm9kZTo6UmVmVHlwZSByZWZUeXBlKQor
ICAgICAgICAgICAgOiBtX25vZGUobm9kZSkKKyAgICAgICAgICAgICwgbV9yZWZUeXBlKHJlZlR5
cGUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICBBdWRpb05vZGUqIG1fbm9kZTsKKyAg
ICAgICAgQXVkaW9Ob2RlOjpSZWZUeXBlIG1fcmVmVHlwZTsKKyAgICB9OyAgICAKKworICAgIC8v
IE9ubHkgYWNjZXNzZWQgaW4gdGhlIGF1ZGlvIHRocmVhZC4KKyAgICBWZWN0b3I8UmVmSW5mbz4g
bV9kZWZlcnJlZEZpbmlzaERlcmVmTGlzdDsKKyAgICAKKyAgICAvLyBIUlRGIERhdGFiYXNlIGxv
YWRlcgorICAgIFJlZlB0cjxIUlRGRGF0YWJhc2VMb2FkZXI+IG1faHJ0ZkRhdGFiYXNlTG9hZGVy
OworCisgICAgLy8gRXZlbnRUYXJnZXQKKyAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQo
KSB7IHJlZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVm
KCk7IH0KKyAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CisKKyAgICBSZWZQ
dHI8QXVkaW9CdWZmZXI+IG1fcmVuZGVyVGFyZ2V0OworICAgIAorICAgIGJvb2wgbV9pc09mZmxp
bmVDb250ZXh0OworCisgICAgQXN5bmNBdWRpb0RlY29kZXIgbV9hdWRpb0RlY29kZXI7CisKKyAg
ICAvLyBUaGlzIGlzIGNvbnNpZGVyaW5nIDMyIGlzIGxhcmdlIGVub3VnaCBmb3IgbXVsdGlwbGUg
Y2hhbm5lbHMgYXVkaW8uIAorICAgIC8vIEl0IGlzIHNvbWV3aGF0IGFyYml0cmFyeSBhbmQgY291
bGQgYmUgaW5jcmVhc2VkIGlmIG5lY2Vzc2FyeS4KKyAgICBlbnVtIHsgTWF4TnVtYmVyT2ZDaGFu
bmVscyA9IDMyIH07CisKKyAgICAvLyBOdW1iZXIgb2YgQXVkaW9CdWZmZXJTb3VyY2VOb2RlcyB0
aGF0IGFyZSBhY3RpdmUgKHBsYXlpbmcpLgorICAgIGludCBtX2FjdGl2ZVNvdXJjZUNvdW50Owor
fTsKKworfSAvLyBXZWJDb3JlCisKKyNlbmRpZiAvLyBBdWRpb0NvbnRleHRfaApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbAkocmV2
aXNpb24gMTExNDMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQu
aWRsOjExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250
ZXh0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVs
ZSB3ZWJhdWRpbyB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FV
RElPLAorICAgICAgICBBY3RpdmVET01PYmplY3QsCisgICAgICAgIEN1c3RvbUNvbnN0cnVjdG9y
LAorICAgICAgICBDb25zdHJ1Y3RvclBhcmFtZXRlcnM9MCwKKyAgICAgICAgSlNDdXN0b21NYXJr
RnVuY3Rpb24sCisgICAgICAgIEV2ZW50VGFyZ2V0CisgICAgXSBBdWRpb0NvbnRleHQgeworICAg
ICAgICAvLyBBbGwgcmVuZGVyZWQgYXVkaW8gdWx0aW1hdGVseSBjb25uZWN0cyB0byBkZXN0aW5h
dGlvbiwgd2hpY2ggcmVwcmVzZW50cyB0aGUgYXVkaW8gaGFyZHdhcmUuCisgICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBBdWRpb0Rlc3RpbmF0aW9uTm9kZSBkZXN0aW5hdGlvbjsKKworICAgICAg
ICAvLyBBbGwgc2NoZWR1bGVkIHRpbWVzIGFyZSByZWxhdGl2ZSB0byB0aGlzIHRpbWUgaW4gc2Vj
b25kcy4KKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0IGN1cnJlbnRUaW1lOworCisg
ICAgICAgIC8vIEFsbCBBdWRpb05vZGVzIGluIHRoZSBjb250ZXh0IHJ1biBhdCB0aGlzIHNhbXBs
ZS1yYXRlIChpbiBzYW1wbGUtZnJhbWVzIHBlciBzZWNvbmQpLgorICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgZmxvYXQgc2FtcGxlUmF0ZTsKKworICAgICAgICAvLyBBbGwgcGFubmluZyBpcyBy
ZWxhdGl2ZSB0byB0aGlzIGxpc3RlbmVyLgorICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVk
aW9MaXN0ZW5lciBsaXN0ZW5lcjsKKworICAgICAgICAvLyBOdW1iZXIgb2YgQXVkaW9CdWZmZXJT
b3VyY2VOb2RlcyB0aGF0IGFyZSBjdXJyZW50bHkgcGxheWluZy4KKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgYWN0aXZlU291cmNlQ291bnQ7CisgICAgICAgIAorICAg
ICAgICBBdWRpb0J1ZmZlciBjcmVhdGVCdWZmZXIoaW4gdW5zaWduZWQgbG9uZyBudW1iZXJPZkNo
YW5uZWxzLCBpbiB1bnNpZ25lZCBsb25nIG51bWJlck9mRnJhbWVzLCBpbiBmbG9hdCBzYW1wbGVS
YXRlKQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIEF1ZGlvQnVm
ZmVyIGNyZWF0ZUJ1ZmZlcihpbiBBcnJheUJ1ZmZlciBidWZmZXIsIGluIGJvb2xlYW4gbWl4VG9N
b25vKQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisKKyAgICAgICAgLy8gQXN5
bmNocm9ub3VzIGF1ZGlvIGZpbGUgZGF0YSBkZWNvZGluZy4KKyAgICAgICAgdm9pZCBkZWNvZGVB
dWRpb0RhdGEoaW4gQXJyYXlCdWZmZXIgYXVkaW9EYXRhLCBpbiBbQ2FsbGJhY2tdIEF1ZGlvQnVm
ZmVyQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrLCBpbiBbT3B0aW9uYWwsIENhbGxiYWNrXSBBdWRp
b0J1ZmZlckNhbGxiYWNrIGVycm9yQ2FsbGJhY2spCisgICAgICAgICAgICByYWlzZXMoRE9NRXhj
ZXB0aW9uKTsKKworICAgICAgICAvLyBTb3VyY2VzCisgICAgICAgIEF1ZGlvQnVmZmVyU291cmNl
Tm9kZSBjcmVhdGVCdWZmZXJTb3VyY2UoKTsKKyNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYg
RU5BQkxFX1ZJREVPCisgICAgICAgIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSBjcmVhdGVN
ZWRpYUVsZW1lbnRTb3VyY2UoaW4gSFRNTE1lZGlhRWxlbWVudCBtZWRpYUVsZW1lbnQpCisgICAg
ICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyNlbmRpZgorICAgICAgICAvLyBQcm9jZXNz
aW5nIG5vZGVzCisgICAgICAgIEF1ZGlvR2Fpbk5vZGUgY3JlYXRlR2Fpbk5vZGUoKTsKKyAgICAg
ICAgRGVsYXlOb2RlIGNyZWF0ZURlbGF5Tm9kZShpbiBbT3B0aW9uYWxdIGRvdWJsZSBtYXhEZWxh
eVRpbWUpOworICAgICAgICBCaXF1YWRGaWx0ZXJOb2RlIGNyZWF0ZUJpcXVhZEZpbHRlcigpOwor
ICAgICAgICBXYXZlU2hhcGVyTm9kZSBjcmVhdGVXYXZlU2hhcGVyKCk7CisgICAgICAgIExvd1Bh
c3MyRmlsdGVyTm9kZSBjcmVhdGVMb3dQYXNzMkZpbHRlcigpOworICAgICAgICBIaWdoUGFzczJG
aWx0ZXJOb2RlIGNyZWF0ZUhpZ2hQYXNzMkZpbHRlcigpOworICAgICAgICBBdWRpb1Bhbm5lck5v
ZGUgY3JlYXRlUGFubmVyKCk7CisgICAgICAgIENvbnZvbHZlck5vZGUgY3JlYXRlQ29udm9sdmVy
KCk7CisgICAgICAgIER5bmFtaWNzQ29tcHJlc3Nvck5vZGUgY3JlYXRlRHluYW1pY3NDb21wcmVz
c29yKCk7CisgICAgICAgIFJlYWx0aW1lQW5hbHlzZXJOb2RlIGNyZWF0ZUFuYWx5c2VyKCk7Cisg
ICAgICAgIEphdmFTY3JpcHRBdWRpb05vZGUgY3JlYXRlSmF2YVNjcmlwdE5vZGUoaW4gdW5zaWdu
ZWQgbG9uZyBidWZmZXJTaXplKTsKKworICAgICAgICAvLyBDaGFubmVsIHNwbGl0dGluZyBhbmQg
bWVyZ2luZworICAgICAgICBBdWRpb0NoYW5uZWxTcGxpdHRlciBjcmVhdGVDaGFubmVsU3BsaXR0
ZXIoKTsKKyAgICAgICAgQXVkaW9DaGFubmVsTWVyZ2VyIGNyZWF0ZUNoYW5uZWxNZXJnZXIoKTsK
KworICAgICAgICAvLyBPZmZsaW5lIHJlbmRlcmluZworICAgICAgICAvLyB2b2lkIHByZXBhcmVP
ZmZsaW5lQnVmZmVyUmVuZGVyaW5nKGluIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZDaGFubmVscywg
aW4gdW5zaWduZWQgbG9uZyBudW1iZXJPZkZyYW1lcywgaW4gZmxvYXQgc2FtcGxlUmF0ZSk7Cisg
ICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uY29tcGxldGU7CisgICAgICAgIHZvaWQg
c3RhcnRSZW5kZXJpbmcoKTsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAJKHJldmlz
aW9uIDExMTQzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlv
bk5vZGUuY3BwOjExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9EZXN0aW5hdGlvbk5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQor
CisjaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCIKKworI2luY2x1ZGUgIkF1ZGlvQnVz
LmgiCisjaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCisjaW5jbHVkZSAiQXVkaW9Ob2RlSW5wdXQu
aCIKKyNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKKyNpbmNsdWRlICJBdWRpb1V0aWxpdGll
cy5oIgorI2luY2x1ZGUgIkRlbm9ybWFsRGlzYWJsZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworICAgIAorQXVkaW9EZXN0aW5hdGlvbk5vZGU6OkF1ZGlvRGVzdGluYXRpb25Ob2RlKEF1ZGlv
Q29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKKyAgICA6IEF1ZGlvTm9kZShjb250
ZXh0LCBzYW1wbGVSYXRlKQorICAgICwgbV9jdXJyZW50U2FtcGxlRnJhbWUoMCkKK3sKKyAgICBh
ZGRJbnB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlSW5wdXQodGhpcykpKTsKKyAgICAKKyAgICBz
ZXROb2RlVHlwZShOb2RlVHlwZURlc3RpbmF0aW9uKTsKK30KKworQXVkaW9EZXN0aW5hdGlvbk5v
ZGU6On5BdWRpb0Rlc3RpbmF0aW9uTm9kZSgpCit7CisgICAgdW5pbml0aWFsaXplKCk7Cit9CisK
Ky8vIFRoZSBhdWRpbyBoYXJkd2FyZSBjYWxscyB1cyBiYWNrIGhlcmUgdG8gZ2V0cyBpdHMgaW5w
dXQgc3RyZWFtLgordm9pZCBBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6cHJvdmlkZUlucHV0KEF1ZGlv
QnVzKiBkZXN0aW5hdGlvbkJ1cywgc2l6ZV90IG51bWJlck9mRnJhbWVzKQoreworICAgIC8vIFdl
IGRvbid0IHdhbnQgZGVub3JtYWxzIHNsb3dpbmcgZG93biBhbnkgb2YgdGhlIGF1ZGlvIHByb2Nl
c3NpbmcKKyAgICAvLyBzaW5jZSB0aGV5IGNhbiB2ZXJ5IHNlcmlvdXNseSBodXJ0IHBlcmZvcm1h
bmNlLgorICAgIC8vIFRoaXMgd2lsbCB0YWtlIGNhcmUgb2YgYWxsIEF1ZGlvTm9kZXMgYmVjYXVz
ZSB0aGV5IGFsbCBwcm9jZXNzIHdpdGhpbiB0aGlzIHNjb3BlLgorICAgIERlbm9ybWFsRGlzYWJs
ZXIgZGVub3JtYWxEaXNhYmxlcjsKKyAgICAKKyAgICBjb250ZXh0KCktPnNldEF1ZGlvVGhyZWFk
KGN1cnJlbnRUaHJlYWQoKSk7CisgICAgCisgICAgaWYgKCFjb250ZXh0KCktPmlzUnVubmFibGUo
KSkgeworICAgICAgICBkZXN0aW5hdGlvbkJ1cy0+emVybygpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gTGV0IHRoZSBjb250ZXh0IHRha2UgY2FyZSBvZiBhbnkgYnVzaW5lc3Mg
YXQgdGhlIHN0YXJ0IG9mIGVhY2ggcmVuZGVyIHF1YW50dW0uCisgICAgY29udGV4dCgpLT5oYW5k
bGVQcmVSZW5kZXJUYXNrcygpOworCisgICAgLy8gVGhpcyB3aWxsIGNhdXNlIHRoZSBub2RlKHMp
IGNvbm5lY3RlZCB0byB1cyB0byBwcm9jZXNzLCB3aGljaCBpbiB0dXJuIHdpbGwgcHVsbCBvbiB0
aGVpciBpbnB1dChzKSwKKyAgICAvLyBhbGwgdGhlIHdheSBiYWNrd2FyZHMgdGhyb3VnaCB0aGUg
cmVuZGVyaW5nIGdyYXBoLgorICAgIEF1ZGlvQnVzKiByZW5kZXJlZEJ1cyA9IGlucHV0KDApLT5w
dWxsKGRlc3RpbmF0aW9uQnVzLCBudW1iZXJPZkZyYW1lcyk7CisgICAgCisgICAgaWYgKCFyZW5k
ZXJlZEJ1cykKKyAgICAgICAgZGVzdGluYXRpb25CdXMtPnplcm8oKTsKKyAgICBlbHNlIGlmIChy
ZW5kZXJlZEJ1cyAhPSBkZXN0aW5hdGlvbkJ1cykgeworICAgICAgICAvLyBpbi1wbGFjZSBwcm9j
ZXNzaW5nIHdhcyBub3QgcG9zc2libGUgLSBzbyBjb3B5CisgICAgICAgIGRlc3RpbmF0aW9uQnVz
LT5jb3B5RnJvbSgqcmVuZGVyZWRCdXMpOworICAgIH0KKworICAgIC8vIExldCB0aGUgY29udGV4
dCB0YWtlIGNhcmUgb2YgYW55IGJ1c2luZXNzIGF0IHRoZSBlbmQgb2YgZWFjaCByZW5kZXIgcXVh
bnR1bS4KKyAgICBjb250ZXh0KCktPmhhbmRsZVBvc3RSZW5kZXJUYXNrcygpOworICAgIAorICAg
IC8vIEFkdmFuY2UgY3VycmVudCBzYW1wbGUtZnJhbWUuCisgICAgbV9jdXJyZW50U2FtcGxlRnJh
bWUgKz0gbnVtYmVyT2ZGcmFtZXM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCShyZXZpc2lvbiAxMTE0
MzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmg6
MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0
aW9uTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEF1ZGlvRGVzdGluYXRpb25Ob2RlX2gKKyNkZWZpbmUgQXVkaW9EZXN0aW5hdGlvbk5v
ZGVfaAorCisjaW5jbHVkZSAiQXVkaW9CdWZmZXIuaCIKKyNpbmNsdWRlICJBdWRpb05vZGUuaCIK
KyNpbmNsdWRlICJBdWRpb1NvdXJjZVByb3ZpZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQXVkaW9CdXM7CitjbGFzcyBBdWRpb0NvbnRleHQ7CisgICAgCitjbGFzcyBBdWRp
b0Rlc3RpbmF0aW9uTm9kZSA6IHB1YmxpYyBBdWRpb05vZGUsIHB1YmxpYyBBdWRpb1NvdXJjZVBy
b3ZpZGVyIHsKK3B1YmxpYzoKKyAgICBBdWRpb0Rlc3RpbmF0aW9uTm9kZShBdWRpb0NvbnRleHQq
LCBmbG9hdCBzYW1wbGVSYXRlKTsKKyAgICB2aXJ0dWFsIH5BdWRpb0Rlc3RpbmF0aW9uTm9kZSgp
OworICAgIAorICAgIC8vIEF1ZGlvTm9kZSAgIAorICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKHNp
emVfdCkgeyB9OyAvLyB3ZSdyZSBwdWxsZWQgYnkgaGFyZHdhcmUgc28gdGhpcyBpcyBuZXZlciBj
YWxsZWQKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSB7IG1fY3VycmVudFNhbXBsZUZyYW1lID0g
MDsgfTsKKyAgICAKKyAgICAvLyBUaGUgYXVkaW8gaGFyZHdhcmUgY2FsbHMgaGVyZSBwZXJpb2Rp
Y2FsbHkgdG8gZ2V0cyBpdHMgaW5wdXQgc3RyZWFtLgorICAgIHZpcnR1YWwgdm9pZCBwcm92aWRl
SW5wdXQoQXVkaW9CdXMqLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMpOworCisgICAgc2l6ZV90IGN1
cnJlbnRTYW1wbGVGcmFtZSgpIHsgcmV0dXJuIG1fY3VycmVudFNhbXBsZUZyYW1lOyB9CisgICAg
ZG91YmxlIGN1cnJlbnRUaW1lKCkgeyByZXR1cm4gY3VycmVudFNhbXBsZUZyYW1lKCkgLyBzdGF0
aWNfY2FzdDxkb3VibGU+KHNhbXBsZVJhdGUoKSk7IH0KKworICAgIHZpcnR1YWwgdW5zaWduZWQg
bnVtYmVyT2ZDaGFubmVscygpIGNvbnN0IHsgcmV0dXJuIDI7IH0gLy8gRklYTUU6IHVwZGF0ZSB3
aGVuIG11bHRpLWNoYW5uZWwgKG1vcmUgdGhhbiBzdGVyZW8pIGlzIHN1cHBvcnRlZAorCisgICAg
dmlydHVhbCB2b2lkIHN0YXJ0UmVuZGVyaW5nKCkgPSAwOworICAgIAorcHJvdGVjdGVkOgorICAg
IHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQor
ICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
MDsgfQorCisgICAgLy8gQ291bnRzIHRoZSBudW1iZXIgb2Ygc2FtcGxlLWZyYW1lcyBwcm9jZXNz
ZWQgYnkgdGhlIGRlc3RpbmF0aW9uLgorICAgIHNpemVfdCBtX2N1cnJlbnRTYW1wbGVGcmFtZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEF1ZGlvRGVzdGluYXRp
b25Ob2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9EZXN0
aW5hdGlvbk5vZGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaWRsCShyZXZpc2lvbiAxMTE0MzMpCShmcm9tIFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmlkbDoxMTE0MzMpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIGF1
ZGlvIHsKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCisg
ICAgICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0CisgICAgXSBBdWRpb0Rlc3RpbmF0aW9uTm9kZSA6
IEF1ZGlvTm9kZSB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIG51bWJlck9mQ2hh
bm5lbHM7CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9HYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb0dhaW4uaAkocmV2aXNpb24gMTExNDMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9BdWRpb0dhaW4uaDoxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvR2Fpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IEF1ZGlvR2Fpbl9oCisjZGVmaW5lIEF1ZGlvR2Fpbl9oCisKKyNpbmNsdWRlICJBdWRpb1BhcmFt
LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBBdWRpb0dhaW4gOiBwdWJsaWMgQXVkaW9QYXJhbSB7CitwdWJsaWM6ICAgCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8QXVkaW9HYWluPiBjcmVhdGUoY29uc3QgY2hhciogbmFtZSwgZG91
YmxlIGRlZmF1bHRWYWx1ZSwgZG91YmxlIG1pblZhbHVlLCBkb3VibGUgbWF4VmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvR2FpbihuYW1lLCBkZWZhdWx0VmFs
dWUsIG1pblZhbHVlLCBtYXhWYWx1ZSkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBBdWRpb0dh
aW4oY29uc3QgY2hhciogbmFtZSwgZG91YmxlIGRlZmF1bHRWYWx1ZSwgZG91YmxlIG1pblZhbHVl
LCBkb3VibGUgbWF4VmFsdWUpCisgICAgICAgIDogQXVkaW9QYXJhbShuYW1lLCBkZWZhdWx0VmFs
dWUsIG1pblZhbHVlLCBtYXhWYWx1ZSkKKyAgICB7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQXVkaW9QYXJhbV9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0dhaW4uaWRsCShyZXZpc2lvbiAxMTE0MzMpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvR2Fpbi5pZGw6MTExNDMzKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0dhaW4uaWRsCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgYXVkaW8geworICAgIGludGVyZmFjZSBbCisgICAg
ICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKKyAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QK
KyAgICBdIEF1ZGlvR2FpbiA6IEF1ZGlvUGFyYW0geworICAgIH07Cit9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5jcHAJKHJldmlz
aW9uIDExMTQzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5j
cHA6MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0dhaW5O
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJB
dWRpb0dhaW5Ob2RlLmgiCisKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgorI2luY2x1ZGUgIkF1ZGlv
Tm9kZUlucHV0LmgiCisjaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworQXVkaW9HYWluTm9kZTo6QXVkaW9HYWluTm9kZShBdWRpb0NvbnRleHQqIGNv
bnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCisgICAgOiBBdWRpb05vZGUoY29udGV4dCwgc2FtcGxl
UmF0ZSkKKyAgICAsIG1fbGFzdEdhaW4oMS4wKQorICAgICwgbV9zYW1wbGVBY2N1cmF0ZUdhaW5W
YWx1ZXMoQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVzKSAvLyBGSVhNRTogY2FuIHBy
b2JhYmx5IHNoYXJlIHRlbXAgYnVmZmVyIGluIGNvbnRleHQKK3sKKyAgICBtX2dhaW4gPSBBdWRp
b0dhaW46OmNyZWF0ZSgiZ2FpbiIsIDEuMCwgMC4wLCAxLjApOworICAgIG1fZ2Fpbi0+c2V0Q29u
dGV4dChjb250ZXh0KTsKKworICAgIGFkZElucHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVJbnB1
dCh0aGlzKSkpOworICAgIGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRo
aXMsIDEpKSk7CisgICAgCisgICAgc2V0Tm9kZVR5cGUoTm9kZVR5cGVHYWluKTsKKyAgICAKKyAg
ICBpbml0aWFsaXplKCk7Cit9CisKK3ZvaWQgQXVkaW9HYWluTm9kZTo6cHJvY2VzcyhzaXplX3Qg
ZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIC8vIEZJWE1FOiBmb3Igc29tZSBjYXNlcyB0aGVyZSBp
cyBhIG5pY2Ugb3B0aW1pemF0aW9uIHRvIGF2b2lkIHByb2Nlc3NpbmcgaGVyZSwgYW5kIGxldCB0
aGUgZ2FpbiBjaGFuZ2UKKyAgICAvLyBoYXBwZW4gaW4gdGhlIHN1bW1pbmcganVuY3Rpb24gaW5w
dXQgb2YgdGhlIEF1ZGlvTm9kZSB3ZSdyZSBjb25uZWN0ZWQgdG8uCisgICAgLy8gVGhlbiB3ZSBj
YW4gYXZvaWQgYWxsIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBBdWRpb0J1cyogb3V0cHV0QnVz
ID0gb3V0cHV0KDApLT5idXMoKTsKKyAgICBBU1NFUlQob3V0cHV0QnVzKTsKKworICAgIGlmICgh
aXNJbml0aWFsaXplZCgpIHx8ICFpbnB1dCgwKS0+aXNDb25uZWN0ZWQoKSkKKyAgICAgICAgb3V0
cHV0QnVzLT56ZXJvKCk7CisgICAgZWxzZSB7CisgICAgICAgIEF1ZGlvQnVzKiBpbnB1dEJ1cyA9
IGlucHV0KDApLT5idXMoKTsKKworICAgICAgICBpZiAoZ2FpbigpLT5oYXNUaW1lbGluZVZhbHVl
cygpKSB7CisgICAgICAgICAgICAvLyBBcHBseSBzYW1wbGUtYWNjdXJhdGUgZ2FpbiBzY2FsaW5n
IGZvciBwcmVjaXNlIGVudmVsb3BlcywgZ3JhaW4gd2luZG93cywgZXRjLgorICAgICAgICAgICAg
QVNTRVJUKGZyYW1lc1RvUHJvY2VzcyA8PSBtX3NhbXBsZUFjY3VyYXRlR2FpblZhbHVlcy5zaXpl
KCkpOworICAgICAgICAgICAgaWYgKGZyYW1lc1RvUHJvY2VzcyA8PSBtX3NhbXBsZUFjY3VyYXRl
R2FpblZhbHVlcy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBmbG9hdCogZ2FpblZhbHVlcyA9
IG1fc2FtcGxlQWNjdXJhdGVHYWluVmFsdWVzLmRhdGEoKTsKKyAgICAgICAgICAgICAgICBnYWlu
KCktPmNhbGN1bGF0ZVNhbXBsZUFjY3VyYXRlVmFsdWVzKGdhaW5WYWx1ZXMsIGZyYW1lc1RvUHJv
Y2Vzcyk7CisgICAgICAgICAgICAgICAgb3V0cHV0QnVzLT5jb3B5V2l0aFNhbXBsZUFjY3VyYXRl
R2FpblZhbHVlc0Zyb20oKmlucHV0QnVzLCBnYWluVmFsdWVzLCBmcmFtZXNUb1Byb2Nlc3MpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQXBwbHkgdGhl
IGdhaW4gd2l0aCBkZS16aXBwZXJpbmcgaW50byB0aGUgb3V0cHV0IGJ1cy4KKyAgICAgICAgICAg
IG91dHB1dEJ1cy0+Y29weVdpdGhHYWluRnJvbSgqaW5wdXRCdXMsICZtX2xhc3RHYWluLCBnYWlu
KCktPnZhbHVlKCkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEF1ZGlvR2Fpbk5vZGU6
OnJlc2V0KCkKK3sKKyAgICAvLyBTbmFwIGRpcmVjdGx5IHRvIGRlc2lyZWQgZ2Fpbi4KKyAgICBt
X2xhc3RHYWluID0gZ2FpbigpLT52YWx1ZSgpOworfQorCisvLyBGSVhNRTogdGhpcyBjYW4gZ28g
YXdheSB3aGVuIHdlIGRvIG1peGluZyB3aXRoIGdhaW4gZGlyZWN0bHkgaW4gc3VtbWluZyBqdW5j
dGlvbiBvZiBBdWRpb05vZGVJbnB1dAorLy8KKy8vIEFzIHNvb24gYXMgd2Uga25vdyB0aGUgY2hh
bm5lbCBjb3VudCBvZiBvdXIgaW5wdXQsIHdlIGNhbiBsYXppbHkgaW5pdGlhbGl6ZS4KKy8vIFNv
bWV0aW1lcyB0aGlzIG1heSBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCBkaWZmZXJlbnQg
Y2hhbm5lbCBjb3VudHMsIGluIHdoaWNoIGNhc2Ugd2UgbXVzdCBzYWZlbHkKKy8vIHVuaW5pdGlh
bGl6ZSBhbmQgdGhlbiByZS1pbml0aWFsaXplIHdpdGggdGhlIG5ldyBjaGFubmVsIGNvdW50Lgor
dm9pZCBBdWRpb0dhaW5Ob2RlOjpjaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1dChBdWRpb05v
ZGVJbnB1dCogaW5wdXQpCit7CisgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgp
ICYmIGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOworCisgICAgQVNTRVJUKGlucHV0ICYmIGlu
cHV0ID09IHRoaXMtPmlucHV0KDApKTsKKyAgICBpZiAoaW5wdXQgIT0gdGhpcy0+aW5wdXQoMCkp
CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVs
cyA9IGlucHV0LT5udW1iZXJPZkNoYW5uZWxzKCk7ICAgIAorCisgICAgaWYgKGlzSW5pdGlhbGl6
ZWQoKSAmJiBudW1iZXJPZkNoYW5uZWxzICE9IG91dHB1dCgwKS0+bnVtYmVyT2ZDaGFubmVscygp
KSB7CisgICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgaW5pdGlhbGl6ZWQgYnV0IHRoZSBjaGFubmVs
IGNvdW50IGhhcyBjaGFuZ2VkLgorICAgICAgICB1bmluaXRpYWxpemUoKTsKKyAgICB9CisKKyAg
ICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkgeworICAgICAgICAvLyBUaGlzIHdpbGwgcHJvcGFnYXRl
IHRoZSBjaGFubmVsIGNvdW50IHRvIGFueSBub2RlcyBjb25uZWN0ZWQgZnVydGhlciBkb3duc3Ry
ZWFtIGluIHRoZSBncmFwaC4KKyAgICAgICAgb3V0cHV0KDApLT5zZXROdW1iZXJPZkNoYW5uZWxz
KG51bWJlck9mQ2hhbm5lbHMpOworICAgICAgICBpbml0aWFsaXplKCk7CisgICAgfQorCisgICAg
QXVkaW9Ob2RlOjpjaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1dChpbnB1dCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaAko
cmV2aXNpb24gMTExNDMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0dhaW5O
b2RlLmg6MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0dh
aW5Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgQXVkaW9HYWluTm9kZV9oCisjZGVmaW5lIEF1ZGlvR2Fpbk5vZGVfaAorCisjaW5jbHVk
ZSAiQXVkaW9HYWluLmgiCisjaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgQXVkaW9Db250ZXh0OworICAgIAorLy8gQXVkaW9HYWluTm9kZSBpcyBh
biBBdWRpb05vZGUgd2l0aCBvbmUgaW5wdXQgYW5kIG9uZSBvdXRwdXQgd2hpY2ggYXBwbGllcyBh
IGdhaW4gKHZvbHVtZSkgY2hhbmdlIHRvIHRoZSBhdWRpbyBzaWduYWwuCisvLyBEZS16aXBwZXJp
bmcgKHNtb290aGluZykgaXMgYXBwbGllZCB3aGVuIHRoZSBnYWluIHZhbHVlIGlzIGNoYW5nZWQg
ZHluYW1pY2FsbHkuCisKK2NsYXNzIEF1ZGlvR2Fpbk5vZGUgOiBwdWJsaWMgQXVkaW9Ob2RlIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb0dhaW5Ob2RlPiBjcmVhdGUoQXVk
aW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBBdWRpb0dhaW5Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpKTsgICAg
ICAKKyAgICB9CisgICAgCisgICAgLy8gQXVkaW9Ob2RlCisgICAgdmlydHVhbCB2b2lkIHByb2Nl
c3Moc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgdmlydHVhbCB2b2lkIHJlc2V0KCk7CisK
KyAgICAvLyBDYWxsZWQgaW4gdGhlIG1haW4gdGhyZWFkIHdoZW4gdGhlIG51bWJlciBvZiBjaGFu
bmVscyBmb3IgdGhlIGlucHV0IG1heSBoYXZlIGNoYW5nZWQuCisgICAgdmlydHVhbCB2b2lkIGNo
ZWNrTnVtYmVyT2ZDaGFubmVsc0ZvcklucHV0KEF1ZGlvTm9kZUlucHV0Kik7CisKKyAgICAvLyBK
YXZhU2NyaXB0IGludGVyZmFjZQorICAgIEF1ZGlvR2FpbiogZ2FpbigpIHsgcmV0dXJuIG1fZ2Fp
bi5nZXQoKTsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgCitwcml2
YXRlOgorICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gMDsgfQorICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJREUg
eyByZXR1cm4gMDsgfQorCisgICAgQXVkaW9HYWluTm9kZShBdWRpb0NvbnRleHQqLCBmbG9hdCBz
YW1wbGVSYXRlKTsKKworICAgIGZsb2F0IG1fbGFzdEdhaW47IC8vIGZvciBkZS16aXBwZXJpbmcK
KyAgICBSZWZQdHI8QXVkaW9HYWluPiBtX2dhaW47CisKKyAgICBBdWRpb0Zsb2F0QXJyYXkgbV9z
YW1wbGVBY2N1cmF0ZUdhaW5WYWx1ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBBdWRpb0dhaW5Ob2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9HYWluTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmlkbAkocmV2aXNpb24gMTExNDMzKQkoZnJv
bSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmlkbDoxMTE0MzMpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgYXVkaW8geworICAg
IGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKKyAgICAgICAgSlNH
ZW5lcmF0ZVRvSlNPYmplY3QKKyAgICBdIEF1ZGlvR2Fpbk5vZGUgOiBBdWRpb05vZGUgeworICAg
ICAgICAvLyBGSVhNRTogZXZlbnR1YWxseSBpdCB3aWxsIGJlIGludGVyZXN0aW5nIHRvIHJlbW92
ZSB0aGUgcmVhZG9ubHkgcmVzdHJpY3Rpb24sIGJ1dCBuZWVkIHRvIHByb3Blcmx5IGRlYWwgd2l0
aCB0aHJlYWQgc2FmZXR5IGhlcmUuCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb0dh
aW4gZ2FpbjsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb0xpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuY3BwCShyZXZpc2lvbiAxMTE0MzMpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuY3BwOjExMTQzMykKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJf
QVVESU8pCisKKyNpbmNsdWRlICJBdWRpb0xpc3RlbmVyLmgiCisKKyNpbmNsdWRlICJBdWRpb0J1
cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0F1ZGlvTGlzdGVuZXI6OkF1ZGlvTGlzdGVu
ZXIoKQorICAgIDogbV9wb3NpdGlvbigwLCAwLCAwKQorICAgICwgbV9vcmllbnRhdGlvbigwLCAw
LCAtMSkKKyAgICAsIG1fdXBWZWN0b3IoMCwgMSwgMCkKKyAgICAsIG1fdmVsb2NpdHkoMCwgMCwg
MCkKKyAgICAsIG1fZG9wcGxlckZhY3RvcigxKQorICAgICwgbV9zcGVlZE9mU291bmQoMzQzLjMp
Cit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJf
QVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTGlzdGVu
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
TGlzdGVuZXIuaAkocmV2aXNpb24gMTExNDMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb0xpc3RlbmVyLmg6MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0xpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgQXVkaW9MaXN0ZW5lcl9oCisjZGVmaW5lIEF1ZGlvTGlzdGVuZXJfaAorCisjaW5jbHVk
ZSAiRmxvYXRQb2ludDNELmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEF1ZGlvTGlz
dGVuZXIgbWFpbnRhaW5zIHRoZSBzdGF0ZSBvZiB0aGUgbGlzdGVuZXIgaW4gdGhlIGF1ZGlvIHNj
ZW5lIGFzIGRlZmluZWQgaW4gdGhlIE9wZW5BTCBzcGVjaWZpY2F0aW9uLgorCitjbGFzcyBBdWRp
b0xpc3RlbmVyIDogcHVibGljIFJlZkNvdW50ZWQ8QXVkaW9MaXN0ZW5lcj4geworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlvTGlzdGVuZXI+IGNyZWF0ZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvTGlzdGVuZXIoKSk7CisgICAgfQorCisgICAg
Ly8gUG9zaXRpb24KKyAgICB2b2lkIHNldFBvc2l0aW9uKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0
IHopIHsgc2V0UG9zaXRpb24oRmxvYXRQb2ludDNEKHgsIHksIHopKTsgfQorICAgIHZvaWQgc2V0
UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludDNEICZwb3NpdGlvbikgeyBtX3Bvc2l0aW9uID0gcG9z
aXRpb247IH0KKyAgICBjb25zdCBGbG9hdFBvaW50M0QmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9wb3NpdGlvbjsgfQorCisgICAgLy8gT3JpZW50YXRpb24KKyAgICB2b2lkIHNldE9yaWVu
dGF0aW9uKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHVwWCwgZmxvYXQgdXBZLCBm
bG9hdCB1cFopCisgICAgeworICAgICAgICBzZXRPcmllbnRhdGlvbihGbG9hdFBvaW50M0QoeCwg
eSwgeikpOworICAgICAgICBzZXRVcFZlY3RvcihGbG9hdFBvaW50M0QodXBYLCB1cFksIHVwWikp
OworICAgIH0KKyAgICB2b2lkIHNldE9yaWVudGF0aW9uKGNvbnN0IEZsb2F0UG9pbnQzRCAmb3Jp
ZW50YXRpb24pIHsgbV9vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOyB9CisgICAgY29uc3QgRmxv
YXRQb2ludDNEJiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50YXRpb247IH0K
KworICAgIC8vIFVwLXZlY3RvcgorICAgIHZvaWQgc2V0VXBWZWN0b3IoY29uc3QgRmxvYXRQb2lu
dDNEICZ1cFZlY3RvcikgeyBtX3VwVmVjdG9yID0gdXBWZWN0b3I7IH0KKyAgICBjb25zdCBGbG9h
dFBvaW50M0QmIHVwVmVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV91cFZlY3RvcjsgfQorCisgICAg
Ly8gVmVsb2NpdHkKKyAgICB2b2lkIHNldFZlbG9jaXR5KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0
IHopIHsgc2V0VmVsb2NpdHkoRmxvYXRQb2ludDNEKHgsIHksIHopKTsgfQorICAgIHZvaWQgc2V0
VmVsb2NpdHkoY29uc3QgRmxvYXRQb2ludDNEICZ2ZWxvY2l0eSkgeyBtX3ZlbG9jaXR5ID0gdmVs
b2NpdHk7IH0KKyAgICBjb25zdCBGbG9hdFBvaW50M0QmIHZlbG9jaXR5KCkgY29uc3QgeyByZXR1
cm4gbV92ZWxvY2l0eTsgfQorCisgICAgLy8gRG9wcGxlciBmYWN0b3IKKyAgICB2b2lkIHNldERv
cHBsZXJGYWN0b3IoZG91YmxlIGRvcHBsZXJGYWN0b3IpIHsgbV9kb3BwbGVyRmFjdG9yID0gZG9w
cGxlckZhY3RvcjsgfQorICAgIGRvdWJsZSBkb3BwbGVyRmFjdG9yKCkgY29uc3QgeyByZXR1cm4g
bV9kb3BwbGVyRmFjdG9yOyB9CisKKyAgICAvLyBTcGVlZCBvZiBzb3VuZAorICAgIHZvaWQgc2V0
U3BlZWRPZlNvdW5kKGRvdWJsZSBzcGVlZE9mU291bmQpIHsgbV9zcGVlZE9mU291bmQgPSBzcGVl
ZE9mU291bmQ7IH0KKyAgICBkb3VibGUgc3BlZWRPZlNvdW5kKCkgY29uc3QgeyByZXR1cm4gbV9z
cGVlZE9mU291bmQ7IH0KKworcHJpdmF0ZToKKyAgICBBdWRpb0xpc3RlbmVyKCk7CisKKyAgICAv
LyBQb3NpdGlvbiAvIE9yaWVudGF0aW9uCisgICAgRmxvYXRQb2ludDNEIG1fcG9zaXRpb247Cisg
ICAgRmxvYXRQb2ludDNEIG1fb3JpZW50YXRpb247CisgICAgRmxvYXRQb2ludDNEIG1fdXBWZWN0
b3I7CisKKyAgICBGbG9hdFBvaW50M0QgbV92ZWxvY2l0eTsKKworICAgIGRvdWJsZSBtX2RvcHBs
ZXJGYWN0b3I7CisgICAgZG91YmxlIG1fc3BlZWRPZlNvdW5kOworfTsKKworfSAvLyBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBBdWRpb0xpc3RlbmVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmlkbAkocmV2aXNpb24gMTExNDMzKQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmlkbDoxMTE0MzMpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgYXVkaW8geworICAgIGludGVyZmFj
ZSBbCisgICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTworICAgIF0gQXVkaW9MaXN0ZW5lciB7
CisgICAgICAgIGF0dHJpYnV0ZSBmbG9hdCBkb3BwbGVyRmFjdG9yOyAgLy8gc2FtZSBhcyBPcGVu
QUwgKGRlZmF1bHQgMS4wKQorICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgc3BlZWRPZlNvdW5kOyAg
IC8vIGluIG1ldGVycyAvIHNlY29uZCAoZGVmYXVsdCAzNDMuMykKKworICAgICAgICB2b2lkIHNl
dFBvc2l0aW9uKGluIGZsb2F0IHgsIGluIGZsb2F0IHksIGluIGZsb2F0IHopOworICAgICAgICB2
b2lkIHNldE9yaWVudGF0aW9uKGluIGZsb2F0IHgsIGluIGZsb2F0IHksIGluIGZsb2F0IHosIGlu
IGZsb2F0IHhVcCwgaW4gZmxvYXQgeVVwLCBpbiBmbG9hdCB6VXApOworICAgICAgICB2b2lkIHNl
dFZlbG9jaXR5KGluIGZsb2F0IHgsIGluIGZsb2F0IHksIGluIGZsb2F0IHopOworICAgIH07Cit9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuY3Bw
CShyZXZpc2lvbiAxMTE0MzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9k
ZS5jcHA6MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05v
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkF1
ZGlvTm9kZS5oIgorCisjaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCisjaW5jbHVkZSAiQXVkaW9O
b2RlSW5wdXQuaCIKKyNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKKyNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0F1ZGlvTm9kZTo6QXVkaW9Ob2Rl
KEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKKyAgICA6IG1faXNJbml0
aWFsaXplZChmYWxzZSkKKyAgICAsIG1fbm9kZVR5cGUoTm9kZVR5cGVVbmtub3duKQorICAgICwg
bV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX3NhbXBsZVJhdGUoc2FtcGxlUmF0ZSkKKyAgICAs
IG1fbGFzdFByb2Nlc3NpbmdUaW1lKC0xLjApCisgICAgLCBtX25vcm1hbFJlZkNvdW50KDEpIC8v
IHN0YXJ0IG91dCB3aXRoIG5vcm1hbCByZWZDb3VudCA9PSAxIChsaWtlIFdURjo6UmVmQ291bnRl
ZCBjbGFzcykKKyAgICAsIG1fY29ubmVjdGlvblJlZkNvdW50KDApCisgICAgLCBtX2Rpc2FibGVk
UmVmQ291bnQoMCkKKyAgICAsIG1faXNNYXJrZWRGb3JEZWxldGlvbihmYWxzZSkKKyAgICAsIG1f
aXNEaXNhYmxlZChmYWxzZSkKK3sKKyNpZiBERUJVR19BVURJT05PREVfUkVGRVJFTkNFUworICAg
IGlmICghc19pc05vZGVDb3VudEluaXRpYWxpemVkKSB7CisgICAgICAgIHNfaXNOb2RlQ291bnRJ
bml0aWFsaXplZCA9IHRydWU7CisgICAgICAgIGF0ZXhpdChBdWRpb05vZGU6OnByaW50Tm9kZUNv
dW50cyk7CisgICAgfQorI2VuZGlmCit9CisKK0F1ZGlvTm9kZTo6fkF1ZGlvTm9kZSgpCit7Cisj
aWYgREVCVUdfQVVESU9OT0RFX1JFRkVSRU5DRVMKKyAgICAtLXNfbm9kZUNvdW50W25vZGVUeXBl
KCldOworICAgIHByaW50ZigiJXA6ICVkOiBBdWRpb05vZGU6On5BdWRpb05vZGUoKSAlZCAlZCAl
ZFxuIiwgdGhpcywgbm9kZVR5cGUoKSwgbV9ub3JtYWxSZWZDb3VudCwgbV9jb25uZWN0aW9uUmVm
Q291bnQsIG1fZGlzYWJsZWRSZWZDb3VudCk7CisjZW5kaWYKK30KKwordm9pZCBBdWRpb05vZGU6
OmluaXRpYWxpemUoKQoreworICAgIG1faXNJbml0aWFsaXplZCA9IHRydWU7Cit9CisKK3ZvaWQg
QXVkaW9Ob2RlOjp1bmluaXRpYWxpemUoKQoreworICAgIG1faXNJbml0aWFsaXplZCA9IGZhbHNl
OworfQorCit2b2lkIEF1ZGlvTm9kZTo6c2V0Tm9kZVR5cGUoTm9kZVR5cGUgdHlwZSkKK3sKKyAg
ICBtX25vZGVUeXBlID0gdHlwZTsKKworI2lmIERFQlVHX0FVRElPTk9ERV9SRUZFUkVOQ0VTCisg
ICAgKytzX25vZGVDb3VudFt0eXBlXTsKKyNlbmRpZgorfQorCit2b2lkIEF1ZGlvTm9kZTo6bGF6
eUluaXRpYWxpemUoKQoreworICAgIGlmICghaXNJbml0aWFsaXplZCgpKQorICAgICAgICBpbml0
aWFsaXplKCk7Cit9CisKK3ZvaWQgQXVkaW9Ob2RlOjphZGRJbnB1dChQYXNzT3duUHRyPEF1ZGlv
Tm9kZUlucHV0PiBpbnB1dCkKK3sKKyAgICBtX2lucHV0cy5hcHBlbmQoaW5wdXQpOworfQorCit2
b2lkIEF1ZGlvTm9kZTo6YWRkT3V0cHV0KFBhc3NPd25QdHI8QXVkaW9Ob2RlT3V0cHV0PiBvdXRw
dXQpCit7CisgICAgbV9vdXRwdXRzLmFwcGVuZChvdXRwdXQpOworfQorCitBdWRpb05vZGVJbnB1
dCogQXVkaW9Ob2RlOjppbnB1dCh1bnNpZ25lZCBpKQoreworICAgIGlmIChpIDwgbV9pbnB1dHMu
c2l6ZSgpKQorICAgICAgICByZXR1cm4gbV9pbnB1dHNbaV0uZ2V0KCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK0F1ZGlvTm9kZU91dHB1dCogQXVkaW9Ob2RlOjpvdXRwdXQodW5zaWduZWQgaSkKK3sK
KyAgICBpZiAoaSA8IG1fb3V0cHV0cy5zaXplKCkpCisgICAgICAgIHJldHVybiBtX291dHB1dHNb
aV0uZ2V0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQXVkaW9Ob2RlOjpjb25uZWN0KEF1
ZGlvTm9kZSogZGVzdGluYXRpb24sIHVuc2lnbmVkIG91dHB1dEluZGV4LCB1bnNpZ25lZCBpbnB1
dEluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OyAKKyAgICBBdWRpb0NvbnRleHQ6OkF1dG9Mb2NrZXIgbG9ja2VyKGNvbnRleHQoKSk7CisKKyAg
ICBpZiAoIWRlc3RpbmF0aW9uKSB7CisgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIFNhbml0eSBjaGVjayBpbnB1dCBhbmQgb3V0cHV0IGlu
ZGljZXMuCisgICAgaWYgKG91dHB1dEluZGV4ID49IG51bWJlck9mT3V0cHV0cygpKSB7CisgICAg
ICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoZGVzdGluYXRpb24gJiYgaW5wdXRJbmRleCA+PSBkZXN0aW5hdGlvbi0+bnVtYmVyT2ZJbnB1
dHMoKSkgeworICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGNvbnRleHQoKSAhPSBkZXN0aW5hdGlvbi0+Y29udGV4dCgpKSB7Cisg
ICAgICAgIGVjID0gU1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEF1
ZGlvTm9kZUlucHV0KiBpbnB1dCA9IGRlc3RpbmF0aW9uLT5pbnB1dChpbnB1dEluZGV4KTsKKyAg
ICBBdWRpb05vZGVPdXRwdXQqIG91dHB1dCA9IHRoaXMtPm91dHB1dChvdXRwdXRJbmRleCk7Cisg
ICAgaW5wdXQtPmNvbm5lY3Qob3V0cHV0KTsKKworICAgIC8vIExldCBjb250ZXh0IGtub3cgdGhh
dCBhIGNvbm5lY3Rpb24gaGFzIGJlZW4gbWFkZS4KKyAgICBjb250ZXh0KCktPmluY3JlbWVudENv
bm5lY3Rpb25Db3VudCgpOworfQorCit2b2lkIEF1ZGlvTm9kZTo6ZGlzY29ubmVjdCh1bnNpZ25l
ZCBvdXRwdXRJbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBBdWRpb0NvbnRleHQ6OkF1dG9Mb2NrZXIgbG9ja2VyKGNvbnRleHQoKSk7
CisKKyAgICAvLyBTYW5pdHkgY2hlY2sgaW5wdXQgYW5kIG91dHB1dCBpbmRpY2VzLgorICAgIGlm
IChvdXRwdXRJbmRleCA+PSBudW1iZXJPZk91dHB1dHMoKSkgeworICAgICAgICBlYyA9IElOREVY
X1NJWkVfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQXVkaW9Ob2RlT3V0cHV0
KiBvdXRwdXQgPSB0aGlzLT5vdXRwdXQob3V0cHV0SW5kZXgpOworICAgIG91dHB1dC0+ZGlzY29u
bmVjdEFsbElucHV0cygpOworfQorCit2b2lkIEF1ZGlvTm9kZTo6cHJvY2Vzc0lmTmVjZXNzYXJ5
KHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNBdWRp
b1RocmVhZCgpKTsKKyAgICAKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gRW5zdXJlIHRoYXQgd2Ugb25seSBwcm9jZXNzIG9uY2UgcGVyIHJlbmRl
cmluZyBxdWFudHVtLgorICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgImZhbm91dCIgcHJvYmxlbSB3
aGVyZSBhbiBvdXRwdXQgaXMgY29ubmVjdGVkIHRvIG11bHRpcGxlIGlucHV0cy4KKyAgICAvLyBU
aGUgZmlyc3QgdGltZSB3ZSdyZSBjYWxsZWQgZHVyaW5nIHRoaXMgdGltZSBzbGljZSB3ZSBwcm9j
ZXNzLCBidXQgYWZ0ZXIgdGhhdCB3ZSBkb24ndCB3YW50IHRvIHJlLXByb2Nlc3MsCisgICAgLy8g
aW5zdGVhZCBvdXIgb3V0cHV0KHMpIHdpbGwgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHRzIGNhY2hl
ZCBpbiB0aGVpciBidXM7CisgICAgZG91YmxlIGN1cnJlbnRUaW1lID0gY29udGV4dCgpLT5jdXJy
ZW50VGltZSgpOworICAgIGlmIChtX2xhc3RQcm9jZXNzaW5nVGltZSAhPSBjdXJyZW50VGltZSkg
eworICAgICAgICBtX2xhc3RQcm9jZXNzaW5nVGltZSA9IGN1cnJlbnRUaW1lOyAvLyBpbXBvcnRh
bnQgdG8gZmlyc3QgdXBkYXRlIHRoaXMgdGltZSBiZWNhdXNlIG9mIGZlZWRiYWNrIGxvb3BzIGlu
IHRoZSByZW5kZXJpbmcgZ3JhcGgKKyAgICAgICAgcHVsbElucHV0cyhmcmFtZXNUb1Byb2Nlc3Mp
OworICAgICAgICBwcm9jZXNzKGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgfQorfQorCit2b2lkIEF1
ZGlvTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQoQXVkaW9Ob2RlSW5wdXQqIGlu
cHV0KQoreworICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSAmJiBjb250ZXh0
KCktPmlzR3JhcGhPd25lcigpKTsKKworICAgIEFTU0VSVChtX2lucHV0cy5jb250YWlucyhpbnB1
dCkpOworICAgIGlmICghbV9pbnB1dHMuY29udGFpbnMoaW5wdXQpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpbnB1dC0+dXBkYXRlSW50ZXJuYWxCdXMoKTsKK30KKwordm9pZCBBdWRpb05vZGU6
OnB1bGxJbnB1dHMoc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICBBU1NFUlQoY29udGV4
dCgpLT5pc0F1ZGlvVGhyZWFkKCkpOworICAgIAorICAgIC8vIFByb2Nlc3MgYWxsIG9mIHRoZSBB
dWRpb05vZGVzIGNvbm5lY3RlZCB0byBvdXIgaW5wdXRzLgorICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2lucHV0cy5zaXplKCk7ICsraSkKKyAgICAgICAgaW5wdXQoaSktPnB1bGwoMCwg
ZnJhbWVzVG9Qcm9jZXNzKTsKK30KKwordm9pZCBBdWRpb05vZGU6OnJlZihSZWZUeXBlIHJlZlR5
cGUpCit7CisgICAgc3dpdGNoIChyZWZUeXBlKSB7CisgICAgY2FzZSBSZWZUeXBlTm9ybWFsOgor
ICAgICAgICBhdG9taWNJbmNyZW1lbnQoJm1fbm9ybWFsUmVmQ291bnQpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFJlZlR5cGVDb25uZWN0aW9uOgorICAgICAgICBhdG9taWNJbmNyZW1lbnQo
Jm1fY29ubmVjdGlvblJlZkNvdW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZWZUeXBl
RGlzYWJsZWQ6CisgICAgICAgIGF0b21pY0luY3JlbWVudCgmbV9kaXNhYmxlZFJlZkNvdW50KTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorCisjaWYgREVCVUdfQVVESU9OT0RFX1JFRkVSRU5DRVMKKyAgICBwcmludGYo
IiVwOiAlZDogQXVkaW9Ob2RlOjpyZWYoJWQpICVkICVkICVkXG4iLCB0aGlzLCBub2RlVHlwZSgp
LCByZWZUeXBlLCBtX25vcm1hbFJlZkNvdW50LCBtX2Nvbm5lY3Rpb25SZWZDb3VudCwgbV9kaXNh
YmxlZFJlZkNvdW50KTsKKyNlbmRpZgorCisgICAgLy8gU2VlIHRoZSBkaXNhYmxpbmcgY29kZSBp
biBmaW5pc2hEZXJlZigpIGJlbG93LiBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgYSBub2Rl
CisgICAgLy8gaXMgYmVpbmcgcmUtY29ubmVjdGVkIGFmdGVyIGJlaW5nIHVzZWQgYXQgbGVhc3Qg
b25jZSBhbmQgZGlzY29ubmVjdGVkLgorICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byBy
ZS1lbmFibGUuCisgICAgaWYgKG1faXNEaXNhYmxlZCAmJiBtX2Nvbm5lY3Rpb25SZWZDb3VudCA+
IDAgJiYgcmVmVHlwZSA9PSBSZWZUeXBlQ29ubmVjdGlvbikgeworICAgICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgICAgICBBdWRpb0NvbnRleHQ6OkF1dG9Mb2NrZXIgbG9ja2VyKGNv
bnRleHQoKSk7CisKKyAgICAgICAgbV9pc0Rpc2FibGVkID0gZmFsc2U7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX291dHB1dHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBv
dXRwdXQoaSktPmVuYWJsZSgpOworICAgIH0KK30KKwordm9pZCBBdWRpb05vZGU6OmRlcmVmKFJl
ZlR5cGUgcmVmVHlwZSkKK3sKKyAgICAvLyBUaGUgYWN0dWFsbHkgd29yayBmb3IgZGVyZWYgaGFw
cGVucyBjb21wbGV0ZWx5IHdpdGhpbiB0aGUgYXVkaW8gY29udGV4dCdzIGdyYXBoIGxvY2suCisg
ICAgLy8gSW4gdGhlIGNhc2Ugb2YgdGhlIGF1ZGlvIHRocmVhZCwgd2UgbXVzdCB1c2UgYSB0cnlM
b2NrIHRvIGF2b2lkIGdsaXRjaGVzLgorICAgIGJvb2wgaGFzTG9jayA9IGZhbHNlOworICAgIGJv
b2wgbXVzdFJlbGVhc2VMb2NrID0gZmFsc2U7CisgICAgCisgICAgaWYgKGNvbnRleHQoKS0+aXNB
dWRpb1RocmVhZCgpKSB7CisgICAgICAgIC8vIFJlYWwtdGltZSBhdWRpbyB0aHJlYWQgbXVzdCBu
b3QgY29udGVuZCBsb2NrICh0byBhdm9pZCBnbGl0Y2hlcykuCisgICAgICAgIGhhc0xvY2sgPSBj
b250ZXh0KCktPnRyeUxvY2sobXVzdFJlbGVhc2VMb2NrKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBjb250ZXh0KCktPmxvY2sobXVzdFJlbGVhc2VMb2NrKTsKKyAgICAgICAgaGFzTG9jayA9IHRy
dWU7CisgICAgfQorICAgIAorICAgIGlmIChoYXNMb2NrKSB7CisgICAgICAgIC8vIFRoaXMgaXMg
d2hlcmUgdGhlIHJlYWwgZGVyZWYgd29yayBoYXBwZW5zLgorICAgICAgICBmaW5pc2hEZXJlZihy
ZWZUeXBlKTsKKworICAgICAgICBpZiAobXVzdFJlbGVhc2VMb2NrKQorICAgICAgICAgICAgY29u
dGV4dCgpLT51bmxvY2soKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXZSB3ZXJlIHVuYWJs
ZSB0byBnZXQgdGhlIGxvY2ssIHNvIHB1dCB0aGlzIGluIGEgbGlzdCB0byBmaW5pc2ggdXAgbGF0
ZXIuCisgICAgICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSk7CisgICAgICAg
IGNvbnRleHQoKS0+YWRkRGVmZXJyZWRGaW5pc2hEZXJlZih0aGlzLCByZWZUeXBlKTsKKyAgICB9
CisKKyAgICAvLyBPbmNlIEF1ZGlvQ29udGV4dDo6dW5pbml0aWFsaXplKCkgaXMgY2FsbGVkIHRo
ZXJlJ3Mgbm8gbW9yZSBjaGFuY2VzIGZvciBkZWxldGVNYXJrZWROb2RlcygpIHRvIGdldCBjYWxs
ZWQsIHNvIHdlIGNhbGwgaGVyZS4KKyAgICAvLyBXZSBjYW4ndCBjYWxsIGluIEF1ZGlvQ29udGV4
dDo6fkF1ZGlvQ29udGV4dCgpIHNpbmNlIGl0IHdpbGwgbmV2ZXIgYmUgY2FsbGVkIGFzIGxvbmcg
YXMgYW55IEF1ZGlvTm9kZSBpcyBhbGl2ZQorICAgIC8vIGJlY2F1c2UgQXVkaW9Ob2RlcyBrZWVw
IGEgcmVmZXJlbmNlIHRvIHRoZSBjb250ZXh0LgorICAgIGlmIChjb250ZXh0KCktPmlzQXVkaW9U
aHJlYWRGaW5pc2hlZCgpKQorICAgICAgICBjb250ZXh0KCktPmRlbGV0ZU1hcmtlZE5vZGVzKCk7
Cit9CisKK3ZvaWQgQXVkaW9Ob2RlOjpmaW5pc2hEZXJlZihSZWZUeXBlIHJlZlR5cGUpCit7Cisg
ICAgQVNTRVJUKGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOworICAgIAorICAgIHN3aXRjaCAo
cmVmVHlwZSkgeworICAgIGNhc2UgUmVmVHlwZU5vcm1hbDoKKyAgICAgICAgQVNTRVJUKG1fbm9y
bWFsUmVmQ291bnQgPiAwKTsKKyAgICAgICAgYXRvbWljRGVjcmVtZW50KCZtX25vcm1hbFJlZkNv
dW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZWZUeXBlQ29ubmVjdGlvbjoKKyAgICAg
ICAgQVNTRVJUKG1fY29ubmVjdGlvblJlZkNvdW50ID4gMCk7CisgICAgICAgIGF0b21pY0RlY3Jl
bWVudCgmbV9jb25uZWN0aW9uUmVmQ291bnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJl
ZlR5cGVEaXNhYmxlZDoKKyAgICAgICAgQVNTRVJUKG1fZGlzYWJsZWRSZWZDb3VudCA+IDApOwor
ICAgICAgICBhdG9taWNEZWNyZW1lbnQoJm1fZGlzYWJsZWRSZWZDb3VudCk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KyAgICAKKyNpZiBERUJVR19BVURJT05PREVfUkVGRVJFTkNFUworICAgIHByaW50ZigiJXA6ICVk
OiBBdWRpb05vZGU6OmRlcmVmKCVkKSAlZCAlZCAlZFxuIiwgdGhpcywgbm9kZVR5cGUoKSwgcmVm
VHlwZSwgbV9ub3JtYWxSZWZDb3VudCwgbV9jb25uZWN0aW9uUmVmQ291bnQsIG1fZGlzYWJsZWRS
ZWZDb3VudCk7CisjZW5kaWYKKworICAgIGlmICghbV9jb25uZWN0aW9uUmVmQ291bnQpIHsKKyAg
ICAgICAgaWYgKCFtX25vcm1hbFJlZkNvdW50ICYmICFtX2Rpc2FibGVkUmVmQ291bnQpIHsKKyAg
ICAgICAgICAgIGlmICghbV9pc01hcmtlZEZvckRlbGV0aW9uKSB7CisgICAgICAgICAgICAgICAg
Ly8gQWxsIHJlZmVyZW5jZXMgYXJlIGdvbmUgLSB3ZSBuZWVkIHRvIGdvIGF3YXkuCisgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb3V0cHV0cy5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgICAgICAgICAgb3V0cHV0KGkpLT5kaXNjb25uZWN0QWxsSW5wdXRzKCk7IC8v
IHRoaXMgd2lsbCBkZXJlZigpIG5vZGVzIHdlJ3JlIGNvbm5lY3RlZCB0by4uLgorCisgICAgICAg
ICAgICAgICAgLy8gTWFyayBmb3IgZGVsZXRpb24gYXQgZW5kIG9mIGVhY2ggcmVuZGVyIHF1YW50
dW0gb3Igd2hlbiBjb250ZXh0IHNodXRzIGRvd24uCisgICAgICAgICAgICAgICAgY29udGV4dCgp
LT5tYXJrRm9yRGVsZXRpb24odGhpcyk7CisgICAgICAgICAgICAgICAgbV9pc01hcmtlZEZvckRl
bGV0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChyZWZUeXBl
ID09IFJlZlR5cGVDb25uZWN0aW9uKSB7CisgICAgICAgICAgICBpZiAoIW1faXNEaXNhYmxlZCkg
eworICAgICAgICAgICAgICAgIC8vIFN0aWxsIG1heSBoYXZlIEphdmFTY3JpcHQgcmVmZXJlbmNl
cywgYnV0IG5vIG1vcmUgImFjdGl2ZSIgY29ubmVjdGlvbiByZWZlcmVuY2VzLCBzbyBwdXQgYWxs
IG9mIG91ciBvdXRwdXRzIGluIGEgImRvcm1hbnQiIGRpc2FibGVkIHN0YXRlLgorICAgICAgICAg
ICAgICAgIC8vIEdhcmJhZ2UgY29sbGVjdGlvbiBtYXkgdGFrZSBhIHZlcnkgbG9uZyB0aW1lIGFm
dGVyIHRoaXMgdGltZSwgc28gdGhlICJkb3JtYW50IiBkaXNhYmxlZCBub2RlcyBzaG91bGQgbm90
IGJvZyBkb3duIHRoZSByZW5kZXJpbmcuLi4KKworICAgICAgICAgICAgICAgIC8vIEFzIGZhciBh
cyBKYXZhU2NyaXB0IGlzIGNvbmNlcm5lZCwgb3VyIG91dHB1dHMgbXVzdCBzdGlsbCBhcHBlYXIg
dG8gYmUgY29ubmVjdGVkLgorICAgICAgICAgICAgICAgIC8vIEJ1dCBpbnRlcm5hbGx5IG91ciBv
dXRwdXRzIHNob3VsZCBiZSBkaXNhYmxlZCBmcm9tIHRoZSBpbnB1dHMgdGhleSdyZSBjb25uZWN0
ZWQgdG8uCisgICAgICAgICAgICAgICAgLy8gZGlzYWJsZSgpIGNhbiByZWN1cnNpdmVseSBkZXJl
ZiBjb25uZWN0aW9ucyAoYW5kIGNhbGwgZGlzYWJsZSgpKSBkb3duIGEgd2hvbGUgY2hhaW4gb2Yg
Y29ubmVjdGVkIG5vZGVzLgorCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IHdlIHNwZWNpYWwg
Y2FzZSB0aGUgY29udm9sdmVyIGFuZCBkZWxheSBzaW5jZSB0aGV5IGhhdmUgYSBzaWduaWZpY2Fu
dCB0YWlsLXRpbWUgYW5kIHNob3VsZG4ndCBiZSBkaXNjb25uZWN0ZWQgc2ltcGx5CisgICAgICAg
ICAgICAgICAgLy8gYmVjYXVzZSB0aGV5IG5vIGxvbmdlciBoYXZlIGFueSBpbnB1dCBjb25uZWN0
aW9ucy4gIFRoaXMgbmVlZHMgdG8gYmUgaGFuZGxlZCBtb3JlIGdlbmVyYWxseSB3aGVyZSBBdWRp
b05vZGVzIGhhdmUKKyAgICAgICAgICAgICAgICAvLyBhIHRhaWxUaW1lIGF0dHJpYnV0ZS4gIFRo
ZW4gdGhlIEF1ZGlvTm9kZSBvbmx5IG5lZWRzIHRvIHJlbWFpbiAiYWN0aXZlIiBmb3IgdGFpbFRp
bWUgc2Vjb25kcyBhZnRlciB0aGVyZSBhcmUgbm8KKyAgICAgICAgICAgICAgICAvLyBsb25nZXIg
YW55IGFjdGl2ZSBjb25uZWN0aW9ucy4KKyAgICAgICAgICAgICAgICBpZiAobm9kZVR5cGUoKSAh
PSBOb2RlVHlwZUNvbnZvbHZlciAmJiBub2RlVHlwZSgpICE9IE5vZGVUeXBlRGVsYXkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbV9pc0Rpc2FibGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb3V0cHV0cy5zaXplKCk7ICsraSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG91dHB1dChpKS0+ZGlzYWJsZSgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworI2lmIERFQlVHX0FVRElP
Tk9ERV9SRUZFUkVOQ0VTCisKK2Jvb2wgQXVkaW9Ob2RlOjpzX2lzTm9kZUNvdW50SW5pdGlhbGl6
ZWQgPSBmYWxzZTsKK2ludCBBdWRpb05vZGU6OnNfbm9kZUNvdW50W05vZGVUeXBlRW5kXTsKKwor
dm9pZCBBdWRpb05vZGU6OnByaW50Tm9kZUNvdW50cygpCit7CisgICAgcHJpbnRmKCJcblxuIik7
CisgICAgcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworICAgIHByaW50
ZigiQXVkaW9Ob2RlOiByZWZlcmVuY2UgY291bnRzXG4iKTsKKyAgICBwcmludGYoIj09PT09PT09
PT09PT09PT09PT09PT09PT09PVxuIik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Tm9kZVR5cGVFbmQ7ICsraSkKKyAgICAgICAgcHJpbnRmKCIlZDogJWRcbiIsIGksIHNfbm9kZUNv
dW50W2ldKTsKKworICAgIHByaW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblxu
Iik7Cit9CisKKyNlbmRpZiAvLyBERUJVR19BVURJT05PREVfUkVGRVJFTkNFUworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCShyZXZpc2lvbiAxMTE0
MzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oOjExMTQzMykKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEF1ZGlvTm9kZV9oCisj
ZGVmaW5lIEF1ZGlvTm9kZV9oCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCisjZGVmaW5lIERFQlVHX0FVRElPTk9ERV9SRUZFUkVOQ0VTIDAKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb0NvbnRleHQ7CitjbGFzcyBBdWRpb05vZGVJ
bnB1dDsKK2NsYXNzIEF1ZGlvTm9kZU91dHB1dDsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29k
ZTsKKworLy8gQW4gQXVkaW9Ob2RlIGlzIHRoZSBiYXNpYyBidWlsZGluZyBibG9jayBmb3IgaGFu
ZGxpbmcgYXVkaW8gd2l0aGluIGFuIEF1ZGlvQ29udGV4dC4KKy8vIEl0IG1heSBiZSBhbiBhdWRp
byBzb3VyY2UsIGFuIGludGVybWVkaWF0ZSBwcm9jZXNzaW5nIG1vZHVsZSwgb3IgYW4gYXVkaW8g
ZGVzdGluYXRpb24uCisvLyBFYWNoIEF1ZGlvTm9kZSBjYW4gaGF2ZSBpbnB1dHMgYW5kL29yIG91
dHB1dHMuIEFuIEF1ZGlvU291cmNlTm9kZSBoYXMgbm8gaW5wdXRzIGFuZCBhIHNpbmdsZSBvdXRw
dXQuCisvLyBBbiBBdWRpb0Rlc3RpbmF0aW9uTm9kZSBoYXMgb25lIGlucHV0IGFuZCBubyBvdXRw
dXRzIGFuZCByZXByZXNlbnRzIHRoZSBmaW5hbCBkZXN0aW5hdGlvbiB0byB0aGUgYXVkaW8gaGFy
ZHdhcmUuCisvLyBNb3N0IHByb2Nlc3Npbmcgbm9kZXMgc3VjaCBhcyBmaWx0ZXJzIHdpbGwgaGF2
ZSBvbmUgaW5wdXQgYW5kIG9uZSBvdXRwdXQsIGFsdGhvdWdoIG11bHRpcGxlIGlucHV0cyBhbmQg
b3V0cHV0cyBhcmUgcG9zc2libGUuCisKK2NsYXNzIEF1ZGlvTm9kZSB7CitwdWJsaWM6CisgICAg
ZW51bSB7IFByb2Nlc3NpbmdTaXplSW5GcmFtZXMgPSAxMjggfTsKKworICAgIEF1ZGlvTm9kZShB
dWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKKyAgICB2aXJ0dWFsIH5BdWRpb05vZGUo
KTsKKworICAgIEF1ZGlvQ29udGV4dCogY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQo
KTsgfQorCisgICAgZW51bSBOb2RlVHlwZSB7CisgICAgICAgIE5vZGVUeXBlVW5rbm93biwKKyAg
ICAgICAgTm9kZVR5cGVEZXN0aW5hdGlvbiwKKyAgICAgICAgTm9kZVR5cGVBdWRpb0J1ZmZlclNv
dXJjZSwKKyAgICAgICAgTm9kZVR5cGVNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZSwKKyAgICAgICAg
Tm9kZVR5cGVKYXZhU2NyaXB0LAorICAgICAgICBOb2RlVHlwZUJpcXVhZEZpbHRlciwKKyAgICAg
ICAgTm9kZVR5cGVMb3dQYXNzMkZpbHRlciwKKyAgICAgICAgTm9kZVR5cGVIaWdoUGFzczJGaWx0
ZXIsCisgICAgICAgIE5vZGVUeXBlUGFubmVyLAorICAgICAgICBOb2RlVHlwZUNvbnZvbHZlciwK
KyAgICAgICAgTm9kZVR5cGVEZWxheSwKKyAgICAgICAgTm9kZVR5cGVHYWluLAorICAgICAgICBO
b2RlVHlwZUNoYW5uZWxTcGxpdHRlciwKKyAgICAgICAgTm9kZVR5cGVDaGFubmVsTWVyZ2VyLAor
ICAgICAgICBOb2RlVHlwZUFuYWx5c2VyLAorICAgICAgICBOb2RlVHlwZUR5bmFtaWNzQ29tcHJl
c3NvciwKKyAgICAgICAgTm9kZVR5cGVXYXZlU2hhcGVyLAorICAgICAgICBOb2RlVHlwZUVuZAor
ICAgIH07CisKKyAgICBOb2RlVHlwZSBub2RlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZVR5
cGU7IH0KKyAgICB2b2lkIHNldE5vZGVUeXBlKE5vZGVUeXBlKTsKKworICAgIC8vIFdlIGhhbmRs
ZSBvdXIgb3duIHJlZi1jb3VudGluZyBiZWNhdXNlIG9mIHRoZSB0aHJlYWRpbmcgaXNzdWVzIGFu
ZCBzdWJ0bGUgbmF0dXJlIG9mCisgICAgLy8gaG93IEF1ZGlvTm9kZXMgY2FuIGNvbnRpbnVlIHBy
b2Nlc3NpbmcgKHBsYXlpbmcgb25lLXNob3Qgc291bmQpIGFmdGVyIHRoZXJlIGFyZSBubyBtb3Jl
CisgICAgLy8gSmF2YVNjcmlwdCByZWZlcmVuY2VzIHRvIHRoZSBvYmplY3QuCisgICAgZW51bSBS
ZWZUeXBlIHsgUmVmVHlwZU5vcm1hbCwgUmVmVHlwZUNvbm5lY3Rpb24sIFJlZlR5cGVEaXNhYmxl
ZCB9OworCisgICAgLy8gQ2FuIGJlIGNhbGxlZCBmcm9tIG1haW4gdGhyZWFkIG9yIGNvbnRleHQn
cyBhdWRpbyB0aHJlYWQuCisgICAgdm9pZCByZWYoUmVmVHlwZSByZWZUeXBlID0gUmVmVHlwZU5v
cm1hbCk7CisgICAgdm9pZCBkZXJlZihSZWZUeXBlIHJlZlR5cGUgPSBSZWZUeXBlTm9ybWFsKTsK
KworICAgIC8vIENhbiBiZSBjYWxsZWQgZnJvbSBtYWluIHRocmVhZCBvciBjb250ZXh0J3MgYXVk
aW8gdGhyZWFkLiAgSXQgbXVzdCBiZSBjYWxsZWQgd2hpbGUgdGhlIGNvbnRleHQncyBncmFwaCBs
b2NrIGlzIGhlbGQuCisgICAgdm9pZCBmaW5pc2hEZXJlZihSZWZUeXBlIHJlZlR5cGUpOworCisg
ICAgLy8gVGhlIEF1ZGlvTm9kZUlucHV0KHMpIChpZiBhbnkpIHdpbGwgYWxyZWFkeSBoYXZlIHRo
ZWlyIGlucHV0IGRhdGEgYXZhaWxhYmxlIHdoZW4gcHJvY2VzcygpIGlzIGNhbGxlZC4KKyAgICAv
LyBTdWJjbGFzc2VzIHdpbGwgdGFrZSB0aGlzIGlucHV0IGRhdGEgYW5kIHB1dCB0aGUgcmVzdWx0
cyBpbiB0aGUgQXVkaW9CdXMocykgb2YgaXRzIEF1ZGlvTm9kZU91dHB1dChzKSAoaWYgYW55KS4K
KyAgICAvLyBDYWxsZWQgZnJvbSBjb250ZXh0J3MgYXVkaW8gdGhyZWFkLgorICAgIHZpcnR1YWwg
dm9pZCBwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpID0gMDsKKworICAgIC8vIFJlc2V0
cyBEU1AgcHJvY2Vzc2luZyBzdGF0ZSAoY2xlYXJzIGRlbGF5IGxpbmVzLCBmaWx0ZXIgbWVtb3J5
LCBldGMuKQorICAgIC8vIENhbGxlZCBmcm9tIGNvbnRleHQncyBhdWRpbyB0aHJlYWQuCisgICAg
dmlydHVhbCB2b2lkIHJlc2V0KCkgPSAwOworCisgICAgLy8gTm8gc2lnbmlmaWNhbnQgcmVzb3Vy
Y2VzIHNob3VsZCBiZSBhbGxvY2F0ZWQgdW50aWwgaW5pdGlhbGl6ZSgpIGlzIGNhbGxlZC4KKyAg
ICAvLyBQcm9jZXNzaW5nIG1heSBub3Qgb2NjdXIgdW50aWwgYSBub2RlIGlzIGluaXRpYWxpemVk
LgorICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKCk7CisgICAgdmlydHVhbCB2b2lkIHVuaW5p
dGlhbGl6ZSgpOworCisgICAgYm9vbCBpc0luaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9p
c0luaXRpYWxpemVkOyB9CisgICAgdm9pZCBsYXp5SW5pdGlhbGl6ZSgpOworCisgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZJbnB1dHMoKSBjb25zdCB7IHJldHVybiBtX2lucHV0cy5zaXplKCk7IH0KKyAg
ICB1bnNpZ25lZCBudW1iZXJPZk91dHB1dHMoKSBjb25zdCB7IHJldHVybiBtX291dHB1dHMuc2l6
ZSgpOyB9CisKKyAgICBBdWRpb05vZGVJbnB1dCogaW5wdXQodW5zaWduZWQpOworICAgIEF1ZGlv
Tm9kZU91dHB1dCogb3V0cHV0KHVuc2lnbmVkKTsKKworICAgIC8vIENhbGxlZCBmcm9tIG1haW4g
dGhyZWFkIGJ5IGNvcnJlc3BvbmRpbmcgSmF2YVNjcmlwdCBtZXRob2RzLgorICAgIHZvaWQgY29u
bmVjdChBdWRpb05vZGUqLCB1bnNpZ25lZCBvdXRwdXRJbmRleCwgdW5zaWduZWQgaW5wdXRJbmRl
eCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZGlzY29ubmVjdCh1bnNpZ25lZCBvdXRwdXRJ
bmRleCwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdmlydHVhbCBmbG9hdCBzYW1wbGVSYXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9zYW1wbGVSYXRlOyB9CisKKyAgICAvLyBwcm9jZXNzSWZOZWNlc3Nh
cnkoKSBpcyBjYWxsZWQgYnkgb3VyIG91dHB1dChzKSB3aGVuIHRoZSByZW5kZXJpbmcgZ3JhcGgg
bmVlZHMgdGhpcyBBdWRpb05vZGUgdG8gcHJvY2Vzcy4KKyAgICAvLyBUaGlzIG1ldGhvZCBlbnN1
cmVzIHRoYXQgdGhlIEF1ZGlvTm9kZSB3aWxsIG9ubHkgcHJvY2VzcyBvbmNlIHBlciByZW5kZXJp
bmcgdGltZSBxdWFudHVtIGV2ZW4gaWYgaXQncyBjYWxsZWQgcmVwZWF0ZWRseS4KKyAgICAvLyBU
aGlzIGhhbmRsZXMgdGhlIGNhc2Ugb2YgImZhbm91dCIgd2hlcmUgYW4gb3V0cHV0IGlzIGNvbm5l
Y3RlZCB0byBtdWx0aXBsZSBBdWRpb05vZGUgaW5wdXRzLgorICAgIC8vIENhbGxlZCBmcm9tIGNv
bnRleHQncyBhdWRpbyB0aHJlYWQuCisgICAgdm9pZCBwcm9jZXNzSWZOZWNlc3Nhcnkoc2l6ZV90
IGZyYW1lc1RvUHJvY2Vzcyk7CisKKyAgICAvLyBDYWxsZWQgd2hlbiBhIG5ldyBjb25uZWN0aW9u
IGhhcyBiZWVuIG1hZGUgdG8gb25lIG9mIG91ciBpbnB1dHMgb3IgdGhlIGNvbm5lY3Rpb24gbnVt
YmVyIG9mIGNoYW5uZWxzIGhhcyBjaGFuZ2VkLgorICAgIC8vIFRoaXMgcG90ZW50aWFsbHkgZ2l2
ZXMgdXMgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHBlcmZvcm0gYSBsYXp5IGluaXRpYWxpemF0aW9u
IG9yLCBpZiBuZWNlc3NhcnksIGEgcmUtaW5pdGlhbGl6YXRpb24uCisgICAgLy8gQ2FsbGVkIGZy
b20gbWFpbiB0aHJlYWQuCisgICAgdmlydHVhbCB2b2lkIGNoZWNrTnVtYmVyT2ZDaGFubmVsc0Zv
cklucHV0KEF1ZGlvTm9kZUlucHV0Kik7CisKKyNpZiBERUJVR19BVURJT05PREVfUkVGRVJFTkNF
UworICAgIHN0YXRpYyB2b2lkIHByaW50Tm9kZUNvdW50cygpOworI2VuZGlmCisKKyAgICBib29s
IGlzTWFya2VkRm9yRGVsZXRpb24oKSBjb25zdCB7IHJldHVybiBtX2lzTWFya2VkRm9yRGVsZXRp
b247IH0KKworICAgIC8vIHRhaWxUaW1lKCkgaXMgdGhlIGxlbmd0aCBvZiB0aW1lIChub3QgY291
bnRpbmcgbGF0ZW5jeSB0aW1lKSB3aGVyZSBub24temVybyBvdXRwdXQgbWF5IG9jY3VyIGFmdGVy
IGNvbnRpbnVvdXMgc2lsZW50IGlucHV0LgorICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkg
Y29uc3QgPSAwOworICAgIC8vIGxhdGVuY3lUaW1lKCkgaXMgdGhlIGxlbmd0aCBvZiB0aW1lIGl0
IHRha2VzIGZvciBub24temVybyBvdXRwdXQgdG8gYXBwZWFyIGFmdGVyIG5vbi16ZXJvIGlucHV0
IGlzIHByb3ZpZGVkLiBUaGlzIG9ubHkgYXBwbGllcyB0bworICAgIC8vIHByb2Nlc3NpbmcgZGVs
YXkgd2hpY2ggaXMgYW4gYXJ0aWZhY3Qgb2YgdGhlIHByb2Nlc3NpbmcgYWxnb3JpdGhtIGNob3Nl
biBhbmQgaXMgKm5vdCogcGFydCBvZiB0aGUgaW50cmluc2ljIGRlc2lyZWQgZWZmZWN0LiBGb3Ig
CisgICAgLy8gZXhhbXBsZSwgYSAiZGVsYXkiIGVmZmVjdCBpcyBleHBlY3RlZCB0byBkZWxheSB0
aGUgc2lnbmFsLCBhbmQgdGh1cyB3b3VsZCBub3QgYmUgY29uc2lkZXJlZCBsYXRlbmN5LgorICAg
IHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgPSAwOworCitwcm90ZWN0ZWQ6Cisg
ICAgLy8gSW5wdXRzIGFuZCBvdXRwdXRzIG11c3QgYmUgY3JlYXRlZCBiZWZvcmUgdGhlIEF1ZGlv
Tm9kZSBpcyBpbml0aWFsaXplZC4KKyAgICB2b2lkIGFkZElucHV0KFBhc3NPd25QdHI8QXVkaW9O
b2RlSW5wdXQ+KTsKKyAgICB2b2lkIGFkZE91dHB1dChQYXNzT3duUHRyPEF1ZGlvTm9kZU91dHB1
dD4pOworICAgIAorICAgIC8vIENhbGxlZCBieSBwcm9jZXNzSWZOZWNlc3NhcnkoKSB0byBjYXVz
ZSBhbGwgcGFydHMgb2YgdGhlIHJlbmRlcmluZyBncmFwaCBjb25uZWN0ZWQgdG8gdXMgdG8gcHJv
Y2Vzcy4KKyAgICAvLyBFYWNoIHJlbmRlcmluZyBxdWFudHVtLCB0aGUgYXVkaW8gZGF0YSBmb3Ig
ZWFjaCBvZiB0aGUgQXVkaW9Ob2RlJ3MgaW5wdXRzIHdpbGwgYmUgYXZhaWxhYmxlIGFmdGVyIHRo
aXMgbWV0aG9kIGlzIGNhbGxlZC4KKyAgICAvLyBDYWxsZWQgZnJvbSBjb250ZXh0J3MgYXVkaW8g
dGhyZWFkLgorICAgIHZpcnR1YWwgdm9pZCBwdWxsSW5wdXRzKHNpemVfdCBmcmFtZXNUb1Byb2Nl
c3MpOworCitwcml2YXRlOgorICAgIHZvbGF0aWxlIGJvb2wgbV9pc0luaXRpYWxpemVkOworICAg
IE5vZGVUeXBlIG1fbm9kZVR5cGU7CisgICAgUmVmUHRyPEF1ZGlvQ29udGV4dD4gbV9jb250ZXh0
OworICAgIGZsb2F0IG1fc2FtcGxlUmF0ZTsKKyAgICBWZWN0b3I8T3duUHRyPEF1ZGlvTm9kZUlu
cHV0PiA+IG1faW5wdXRzOworICAgIFZlY3RvcjxPd25QdHI8QXVkaW9Ob2RlT3V0cHV0PiA+IG1f
b3V0cHV0czsKKworICAgIGRvdWJsZSBtX2xhc3RQcm9jZXNzaW5nVGltZTsKKworICAgIC8vIFJl
Zi1jb3VudGluZworICAgIHZvbGF0aWxlIGludCBtX25vcm1hbFJlZkNvdW50OworICAgIHZvbGF0
aWxlIGludCBtX2Nvbm5lY3Rpb25SZWZDb3VudDsKKyAgICB2b2xhdGlsZSBpbnQgbV9kaXNhYmxl
ZFJlZkNvdW50OworICAgIAorICAgIGJvb2wgbV9pc01hcmtlZEZvckRlbGV0aW9uOworICAgIGJv
b2wgbV9pc0Rpc2FibGVkOworICAgIAorI2lmIERFQlVHX0FVRElPTk9ERV9SRUZFUkVOQ0VTCisg
ICAgc3RhdGljIGJvb2wgc19pc05vZGVDb3VudEluaXRpYWxpemVkOworICAgIHN0YXRpYyBpbnQg
c19ub2RlQ291bnRbTm9kZVR5cGVFbmRdOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBBdWRpb05vZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmlkbAkocmV2aXNpb24gMTExNDMzKQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGUuaWRsOjExMTQzMykKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIGF1ZGlvIHsKKyAgICBpbnRlcmZhY2Ug
WworICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8KKyAgICBdIEF1ZGlvTm9kZSB7CisgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb0NvbnRleHQgY29udGV4dDsKKyAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZJbnB1dHM7CisgICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIG51bWJlck9mT3V0cHV0czsKKworICAgICAg
ICB2b2lkIGNvbm5lY3QoaW4gQXVkaW9Ob2RlIGRlc3RpbmF0aW9uLCBpbiBbT3B0aW9uYWw9RGVm
YXVsdElzVW5kZWZpbmVkXSB1bnNpZ25lZCBsb25nIG91dHB1dCwgaW4gW09wdGlvbmFsPURlZmF1
bHRJc1VuZGVmaW5lZF0gdW5zaWduZWQgbG9uZyBpbnB1dCkKKyAgICAgICAgICAgIHJhaXNlcyhE
T01FeGNlcHRpb24pOworCisgICAgICAgIHZvaWQgZGlzY29ubmVjdChpbiBbT3B0aW9uYWw9RGVm
YXVsdElzVW5kZWZpbmVkXSB1bnNpZ25lZCBsb25nIG91dHB1dCkKKyAgICAgICAgICAgIHJhaXNl
cyhET01FeGNlcHRpb24pOworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcAkocmV2aXNpb24gMTExNDMzKQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5jcHA6MTExNDMzKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiQXVkaW9Ob2RlSW5w
dXQuaCIKKworI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgorI2luY2x1ZGUgIkF1ZGlvTm9kZS5o
IgorI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKwor
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKKyAKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQXVkaW9Ob2Rl
SW5wdXQ6OkF1ZGlvTm9kZUlucHV0KEF1ZGlvTm9kZSogbm9kZSkKKyAgICA6IG1fbm9kZShub2Rl
KQorICAgICwgbV9yZW5kZXJpbmdTdGF0ZU5lZWRVcGRhdGluZyhmYWxzZSkKK3sKKyAgICAvLyBT
ZXQgdG8gbW9ubyBieSBkZWZhdWx0LgorICAgIG1faW50ZXJuYWxTdW1taW5nQnVzID0gYWRvcHRQ
dHIobmV3IEF1ZGlvQnVzKDEsIEF1ZGlvTm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1lcykpOwor
fQorCit2b2lkIEF1ZGlvTm9kZUlucHV0Ojpjb25uZWN0KEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0
KQoreworICAgIEFTU0VSVChjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKKyAgICAKKyAgICBB
U1NFUlQob3V0cHV0ICYmIG5vZGUoKSk7CisgICAgaWYgKCFvdXRwdXQgfHwgIW5vZGUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gQ2hlY2sgaWYgd2UncmUgYWxyZWFkeSBjb25uZWN0ZWQg
dG8gdGhpcyBvdXRwdXQuCisgICAgaWYgKG1fb3V0cHV0cy5jb250YWlucyhvdXRwdXQpKQorICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIG91dHB1dC0+YWRkSW5wdXQodGhpcyk7CisgICAg
bV9vdXRwdXRzLmFkZChvdXRwdXQpOworICAgIGNoYW5nZWRPdXRwdXRzKCk7CisKKyAgICAvLyBT
b21ib2R5IGhhcyBqdXN0IGNvbm5lY3RlZCB0byB1cywgc28gY291bnQgaXQgYXMgYSByZWZlcmVu
Y2UuCisgICAgbm9kZSgpLT5yZWYoQXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7Cit9CisK
K3ZvaWQgQXVkaW9Ob2RlSW5wdXQ6OmRpc2Nvbm5lY3QoQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQp
Cit7CisgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOworCisgICAgQVNTRVJU
KG91dHB1dCAmJiBub2RlKCkpOworICAgIGlmICghb3V0cHV0IHx8ICFub2RlKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIEZpcnN0IHRyeSB0byBkaXNjb25uZWN0IGZyb20gImFjdGl2ZSIg
Y29ubmVjdGlvbnMuCisgICAgaWYgKG1fb3V0cHV0cy5jb250YWlucyhvdXRwdXQpKSB7CisgICAg
ICAgIG1fb3V0cHV0cy5yZW1vdmUob3V0cHV0KTsKKyAgICAgICAgY2hhbmdlZE91dHB1dHMoKTsK
KyAgICAgICAgb3V0cHV0LT5yZW1vdmVJbnB1dCh0aGlzKTsKKyAgICAgICAgbm9kZSgpLT5kZXJl
ZihBdWRpb05vZGU6OlJlZlR5cGVDb25uZWN0aW9uKTsgLy8gTm90ZTogaXQncyBpbXBvcnRhbnQg
dG8gcmV0dXJuIGltbWVkaWF0ZWx5IGFmdGVyIGFsbCBkZXJlZigpIGNhbGxzIHNpbmNlIHRoZSBu
b2RlIG1heSBiZSBkZWxldGVkLgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8v
IE90aGVyd2lzZSwgdHJ5IHRvIGRpc2Nvbm5lY3QgZnJvbSBkaXNhYmxlZCBjb25uZWN0aW9ucy4K
KyAgICBpZiAobV9kaXNhYmxlZE91dHB1dHMuY29udGFpbnMob3V0cHV0KSkgeworICAgICAgICBt
X2Rpc2FibGVkT3V0cHV0cy5yZW1vdmUob3V0cHV0KTsKKyAgICAgICAgb3V0cHV0LT5yZW1vdmVJ
bnB1dCh0aGlzKTsKKyAgICAgICAgbm9kZSgpLT5kZXJlZihBdWRpb05vZGU6OlJlZlR5cGVEaXNh
YmxlZCk7IC8vIE5vdGU6IGl0J3MgaW1wb3J0YW50IHRvIHJldHVybiBpbW1lZGlhdGVseSBhZnRl
ciBhbGwgZGVyZWYoKSBjYWxscyBzaW5jZSB0aGUgbm9kZSBtYXkgYmUgZGVsZXRlZC4KKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lk
IEF1ZGlvTm9kZUlucHV0OjpkaXNhYmxlKEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0KQoreworICAg
IEFTU0VSVChjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKKworICAgIEFTU0VSVChvdXRwdXQg
JiYgbm9kZSgpKTsKKyAgICBpZiAoIW91dHB1dCB8fCAhbm9kZSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBBU1NFUlQobV9vdXRwdXRzLmNvbnRhaW5zKG91dHB1dCkpOworICAgIAorICAgIG1f
ZGlzYWJsZWRPdXRwdXRzLmFkZChvdXRwdXQpOworICAgIG1fb3V0cHV0cy5yZW1vdmUob3V0cHV0
KTsKKyAgICBjaGFuZ2VkT3V0cHV0cygpOworCisgICAgbm9kZSgpLT5yZWYoQXVkaW9Ob2RlOjpS
ZWZUeXBlRGlzYWJsZWQpOworICAgIG5vZGUoKS0+ZGVyZWYoQXVkaW9Ob2RlOjpSZWZUeXBlQ29u
bmVjdGlvbik7IC8vIE5vdGU6IGl0J3MgaW1wb3J0YW50IHRvIHJldHVybiBpbW1lZGlhdGVseSBh
ZnRlciBhbGwgZGVyZWYoKSBjYWxscyBzaW5jZSB0aGUgbm9kZSBtYXkgYmUgZGVsZXRlZC4KK30K
Kwordm9pZCBBdWRpb05vZGVJbnB1dDo6ZW5hYmxlKEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0KQor
eworICAgIEFTU0VSVChjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKKworICAgIEFTU0VSVChv
dXRwdXQgJiYgbm9kZSgpKTsKKyAgICBpZiAoIW91dHB1dCB8fCAhbm9kZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBBU1NFUlQobV9kaXNhYmxlZE91dHB1dHMuY29udGFpbnMob3V0cHV0KSk7
CisKKyAgICAvLyBNb3ZlIG91dHB1dCBmcm9tIGRpc2FibGVkIGxpc3QgdG8gYWN0aXZlIGxpc3Qu
CisgICAgbV9vdXRwdXRzLmFkZChvdXRwdXQpOworICAgIG1fZGlzYWJsZWRPdXRwdXRzLnJlbW92
ZShvdXRwdXQpOworICAgIGNoYW5nZWRPdXRwdXRzKCk7CisKKyAgICBub2RlKCktPnJlZihBdWRp
b05vZGU6OlJlZlR5cGVDb25uZWN0aW9uKTsKKyAgICBub2RlKCktPmRlcmVmKEF1ZGlvTm9kZTo6
UmVmVHlwZURpc2FibGVkKTsgLy8gTm90ZTogaXQncyBpbXBvcnRhbnQgdG8gcmV0dXJuIGltbWVk
aWF0ZWx5IGFmdGVyIGFsbCBkZXJlZigpIGNhbGxzIHNpbmNlIHRoZSBub2RlIG1heSBiZSBkZWxl
dGVkLgorfQorCit2b2lkIEF1ZGlvTm9kZUlucHV0OjpjaGFuZ2VkT3V0cHV0cygpCit7CisgICAg
QVNTRVJUKGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOworICAgIGlmICghbV9yZW5kZXJpbmdT
dGF0ZU5lZWRVcGRhdGluZyAmJiAhbm9kZSgpLT5pc01hcmtlZEZvckRlbGV0aW9uKCkpIHsgICAg
CisgICAgICAgIGNvbnRleHQoKS0+bWFya0F1ZGlvTm9kZUlucHV0RGlydHkodGhpcyk7CisgICAg
ICAgIG1fcmVuZGVyaW5nU3RhdGVOZWVkVXBkYXRpbmcgPSB0cnVlOworICAgIH0KK30KKwordm9p
ZCBBdWRpb05vZGVJbnB1dDo6dXBkYXRlUmVuZGVyaW5nU3RhdGUoKQoreworICAgIEFTU0VSVChj
b250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSAmJiBjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsK
KyAgICAKKyAgICBpZiAobV9yZW5kZXJpbmdTdGF0ZU5lZWRVcGRhdGluZyAmJiAhbm9kZSgpLT5p
c01hcmtlZEZvckRlbGV0aW9uKCkpIHsKKyAgICAgICAgLy8gQ29weSBmcm9tIG1fb3V0cHV0cyB0
byBtX3JlbmRlcmluZ091dHB1dHMuCisgICAgICAgIG1fcmVuZGVyaW5nT3V0cHV0cy5yZXNpemUo
bV9vdXRwdXRzLnNpemUoKSk7CisgICAgICAgIHVuc2lnbmVkIGogPSAwOworICAgICAgICBmb3Ig
KEhhc2hTZXQ8QXVkaW9Ob2RlT3V0cHV0Kj46Oml0ZXJhdG9yIGkgPSBtX291dHB1dHMuYmVnaW4o
KTsgaSAhPSBtX291dHB1dHMuZW5kKCk7ICsraSwgKytqKSB7CisgICAgICAgICAgICBBdWRpb05v
ZGVPdXRwdXQqIG91dHB1dCA9ICppOworICAgICAgICAgICAgbV9yZW5kZXJpbmdPdXRwdXRzW2pd
ID0gb3V0cHV0OworICAgICAgICAgICAgb3V0cHV0LT51cGRhdGVSZW5kZXJpbmdTdGF0ZSgpOwor
ICAgICAgICB9CisKKyAgICAgICAgbm9kZSgpLT5jaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1
dCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIG1fcmVuZGVyaW5nU3RhdGVOZWVkVXBkYXRpbmcg
PSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQXVkaW9Ob2RlSW5wdXQ6OnVwZGF0ZUludGVybmFs
QnVzKCkKK3sKKyAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkgJiYgY29udGV4
dCgpLT5pc0dyYXBoT3duZXIoKSk7CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZklucHV0Q2hhbm5l
bHMgPSBudW1iZXJPZkNoYW5uZWxzKCk7CisKKyAgICBpZiAobnVtYmVyT2ZJbnB1dENoYW5uZWxz
ID09IG1faW50ZXJuYWxTdW1taW5nQnVzLT5udW1iZXJPZkNoYW5uZWxzKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1faW50ZXJuYWxTdW1taW5nQnVzID0gYWRvcHRQdHIobmV3IEF1ZGlvQnVz
KG51bWJlck9mSW5wdXRDaGFubmVscywgQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVz
KSk7Cit9CisKK3Vuc2lnbmVkIEF1ZGlvTm9kZUlucHV0OjpudW1iZXJPZkNoYW5uZWxzKCkgY29u
c3QKK3sKKyAgICAvLyBGaW5kIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgb2YgdGhlIGNvbm5lY3Rp
b24gd2l0aCB0aGUgbGFyZ2VzdCBudW1iZXIgb2YgY2hhbm5lbHMuCisgICAgdW5zaWduZWQgbWF4
Q2hhbm5lbHMgPSAxOyAvLyBvbmUgY2hhbm5lbCBpcyB0aGUgbWluaW11bSBhbGxvd2VkCisKKyAg
ICBmb3IgKEhhc2hTZXQ8QXVkaW9Ob2RlT3V0cHV0Kj46Oml0ZXJhdG9yIGkgPSBtX291dHB1dHMu
YmVnaW4oKTsgaSAhPSBtX291dHB1dHMuZW5kKCk7ICsraSkgeworICAgICAgICBBdWRpb05vZGVP
dXRwdXQqIG91dHB1dCA9ICppOworICAgICAgICBtYXhDaGFubmVscyA9IG1heChtYXhDaGFubmVs
cywgb3V0cHV0LT5idXMoKS0+bnVtYmVyT2ZDaGFubmVscygpKTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIG1heENoYW5uZWxzOworfQorCit1bnNpZ25lZCBBdWRpb05vZGVJbnB1dDo6bnVtYmVy
T2ZSZW5kZXJpbmdDaGFubmVscygpCit7CisgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1Ro
cmVhZCgpKTsKKworICAgIC8vIEZpbmQgdGhlIG51bWJlciBvZiBjaGFubmVscyBvZiB0aGUgcmVu
ZGVyaW5nIGNvbm5lY3Rpb24gd2l0aCB0aGUgbGFyZ2VzdCBudW1iZXIgb2YgY2hhbm5lbHMuCisg
ICAgdW5zaWduZWQgbWF4Q2hhbm5lbHMgPSAxOyAvLyBvbmUgY2hhbm5lbCBpcyB0aGUgbWluaW11
bSBhbGxvd2VkCisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZSZW5kZXJp
bmdDb25uZWN0aW9ucygpOyArK2kpCisgICAgICAgIG1heENoYW5uZWxzID0gbWF4KG1heENoYW5u
ZWxzLCByZW5kZXJpbmdPdXRwdXQoaSktPmJ1cygpLT5udW1iZXJPZkNoYW5uZWxzKCkpOworICAg
IAorICAgIHJldHVybiBtYXhDaGFubmVsczsKK30KKworQXVkaW9CdXMqIEF1ZGlvTm9kZUlucHV0
OjpidXMoKQoreworICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSk7CisKKyAg
ICAvLyBIYW5kbGUgc2luZ2xlIGNvbm5lY3Rpb24gc3BlY2lhbGx5IHRvIGFsbG93IGZvciBpbi1w
bGFjZSBwcm9jZXNzaW5nLgorICAgIGlmIChudW1iZXJPZlJlbmRlcmluZ0Nvbm5lY3Rpb25zKCkg
PT0gMSkKKyAgICAgICAgcmV0dXJuIHJlbmRlcmluZ091dHB1dCgwKS0+YnVzKCk7CisKKyAgICAv
LyBNdWx0aXBsZSBjb25uZWN0aW9ucyBjYXNlIChvciBubyBjb25uZWN0aW9ucykuCisgICAgcmV0
dXJuIGludGVybmFsU3VtbWluZ0J1cygpOworfQorCitBdWRpb0J1cyogQXVkaW9Ob2RlSW5wdXQ6
OmludGVybmFsU3VtbWluZ0J1cygpCit7CisgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1Ro
cmVhZCgpKTsKKworICAgIEFTU0VSVChudW1iZXJPZlJlbmRlcmluZ0NoYW5uZWxzKCkgPT0gbV9p
bnRlcm5hbFN1bW1pbmdCdXMtPm51bWJlck9mQ2hhbm5lbHMoKSk7CisKKyAgICByZXR1cm4gbV9p
bnRlcm5hbFN1bW1pbmdCdXMuZ2V0KCk7Cit9CisKK3ZvaWQgQXVkaW9Ob2RlSW5wdXQ6OnN1bUFs
bENvbm5lY3Rpb25zKEF1ZGlvQnVzKiBzdW1taW5nQnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNz
KQoreworICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSk7CisKKyAgICAvLyBX
ZSBzaG91bGRuJ3QgYmUgY2FsbGluZyB0aGlzIG1ldGhvZCBpZiB0aGVyZSdzIG9ubHkgb25lIGNv
bm5lY3Rpb24sIHNpbmNlIGl0J3MgbGVzcyBlZmZpY2llbnQuCisgICAgQVNTRVJUKG51bWJlck9m
UmVuZGVyaW5nQ29ubmVjdGlvbnMoKSA+IDEpOworCisgICAgQVNTRVJUKHN1bW1pbmdCdXMpOwor
ICAgIGlmICghc3VtbWluZ0J1cykKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBzdW1t
aW5nQnVzLT56ZXJvKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZS
ZW5kZXJpbmdDb25uZWN0aW9ucygpOyArK2kpIHsKKyAgICAgICAgQXVkaW9Ob2RlT3V0cHV0KiBv
dXRwdXQgPSByZW5kZXJpbmdPdXRwdXQoaSk7CisgICAgICAgIEFTU0VSVChvdXRwdXQpOworCisg
ICAgICAgIC8vIFJlbmRlciBhdWRpbyBmcm9tIHRoaXMgb3V0cHV0LgorICAgICAgICBBdWRpb0J1
cyogY29ubmVjdGlvbkJ1cyA9IG91dHB1dC0+cHVsbCgwLCBmcmFtZXNUb1Byb2Nlc3MpOworCisg
ICAgICAgIC8vIFN1bSwgd2l0aCB1bml0eS1nYWluLgorICAgICAgICBzdW1taW5nQnVzLT5zdW1G
cm9tKCpjb25uZWN0aW9uQnVzKTsKKyAgICB9Cit9CisKK0F1ZGlvQnVzKiBBdWRpb05vZGVJbnB1
dDo6cHVsbChBdWRpb0J1cyogaW5QbGFjZUJ1cywgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sK
KyAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkpOworCisgICAgLy8gSGFuZGxl
IHNpbmdsZSBjb25uZWN0aW9uIGNhc2UuCisgICAgaWYgKG51bWJlck9mUmVuZGVyaW5nQ29ubmVj
dGlvbnMoKSA9PSAxKSB7CisgICAgICAgIC8vIFRoZSBvdXRwdXQgd2lsbCBvcHRpbWl6ZSBwcm9j
ZXNzaW5nIHVzaW5nIGluUGxhY2VCdXMgaWYgaXQncyBhYmxlLgorICAgICAgICBBdWRpb05vZGVP
dXRwdXQqIG91dHB1dCA9IHRoaXMtPnJlbmRlcmluZ091dHB1dCgwKTsKKyAgICAgICAgcmV0dXJu
IG91dHB1dC0+cHVsbChpblBsYWNlQnVzLCBmcmFtZXNUb1Byb2Nlc3MpOworICAgIH0KKworICAg
IEF1ZGlvQnVzKiBpbnRlcm5hbFN1bW1pbmdCdXMgPSB0aGlzLT5pbnRlcm5hbFN1bW1pbmdCdXMo
KTsKKworICAgIGlmICghbnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9ucygpKSB7CisgICAgICAg
IC8vIEF0IGxlYXN0LCBnZW5lcmF0ZSBzaWxlbmNlIGlmIHdlJ3JlIG5vdCBjb25uZWN0ZWQgdG8g
YW55dGhpbmcuCisgICAgICAgIC8vIEZJWE1FOiBpZiB3ZSB3YW50ZWQgdG8gZ2V0IGZhbmN5LCB3
ZSBjb3VsZCBwcm9wYWdhdGUgYSAnc2lsZW50IGhpbnQnIGhlcmUgdG8gb3B0aW1pemUgdGhlIGRv
d25zdHJlYW0gZ3JhcGggcHJvY2Vzc2luZy4KKyAgICAgICAgaW50ZXJuYWxTdW1taW5nQnVzLT56
ZXJvKCk7CisgICAgICAgIHJldHVybiBpbnRlcm5hbFN1bW1pbmdCdXM7CisgICAgfQorCisgICAg
Ly8gSGFuZGxlIG11bHRpcGxlIGNvbm5lY3Rpb25zIGNhc2UuCisgICAgc3VtQWxsQ29ubmVjdGlv
bnMoaW50ZXJuYWxTdW1taW5nQnVzLCBmcmFtZXNUb1Byb2Nlc3MpOworICAgIAorICAgIHJldHVy
biBpbnRlcm5hbFN1bW1pbmdCdXM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5oCShyZXZpc2lvbiAxMTE0MzMpCShmcm9tIFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0Lmg6MTExNDMzKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBdWRpb05vZGVJbnB1dF9o
CisjZGVmaW5lIEF1ZGlvTm9kZUlucHV0X2gKKworI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisjaW5j
bHVkZSAiQXVkaW9Ob2RlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9Ob2RlOwor
Y2xhc3MgQXVkaW9Ob2RlT3V0cHV0OworCisvLyBBbiBBdWRpb05vZGVJbnB1dCByZXByZXNlbnRz
IGFuIGlucHV0IHRvIGFuIEF1ZGlvTm9kZSBhbmQgY2FuIGJlIGNvbm5lY3RlZCBmcm9tIG9uZSBv
ciBtb3JlIEF1ZGlvTm9kZU91dHB1dHMuCisvLyBJbiB0aGUgY2FzZSBvZiBtdWx0aXBsZSBjb25u
ZWN0aW9ucywgdGhlIGlucHV0IHdpbGwgYWN0IGFzIGEgdW5pdHktZ2FpbiBzdW1taW5nIGp1bmN0
aW9uLCBtaXhpbmcgYWxsIHRoZSBvdXRwdXRzLgorLy8gVGhlIG51bWJlciBvZiBjaGFubmVscyBv
ZiB0aGUgaW5wdXQncyBidXMgaXMgdGhlIG1heGltdW0gb2YgdGhlIG51bWJlciBvZiBjaGFubmVs
cyBvZiBhbGwgaXRzIGNvbm5lY3Rpb25zLgorCitjbGFzcyBBdWRpb05vZGVJbnB1dCB7CitwdWJs
aWM6CisgICAgQXVkaW9Ob2RlSW5wdXQoQXVkaW9Ob2RlKik7CisKKyAgICAvLyBDYW4gYmUgY2Fs
bGVkIGZyb20gYW55IHRocmVhZC4KKyAgICBBdWRpb05vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVy
biBtX25vZGU7IH0KKyAgICBBdWRpb0NvbnRleHQqIGNvbnRleHQoKSB7IHJldHVybiBtX25vZGUt
PmNvbnRleHQoKTsgfQorCisgICAgLy8gTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgY29udGV4dCdz
IGdyYXBoIGxvY2suCisgICAgdm9pZCBjb25uZWN0KEF1ZGlvTm9kZU91dHB1dCopOworICAgIHZv
aWQgZGlzY29ubmVjdChBdWRpb05vZGVPdXRwdXQqKTsKKworICAgIC8vIGRpc2FibGUoKSB3aWxs
IHRha2UgdGhlIG91dHB1dCBvdXQgb2YgdGhlIGFjdGl2ZSBjb25uZWN0aW9ucyBsaXN0IGFuZCBz
ZXQgYXNpZGUgaW4gYSBkaXNhYmxlZCBsaXN0LgorICAgIC8vIGVuYWJsZSgpIHdpbGwgcHV0IHRo
ZSBvdXRwdXQgYmFjayBpbnRvIHRoZSBhY3RpdmUgY29ubmVjdGlvbnMgbGlzdC4KKyAgICAvLyBN
dXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jay4KKyAgICB2b2lkIGVu
YWJsZShBdWRpb05vZGVPdXRwdXQqKTsKKyAgICB2b2lkIGRpc2FibGUoQXVkaW9Ob2RlT3V0cHV0
Kik7CisKKyAgICAvLyBwdWxsKCkgcHJvY2Vzc2VzIGFsbCBvZiB0aGUgQXVkaW9Ob2RlcyBjb25u
ZWN0ZWQgdG8gdXMuCisgICAgLy8gSW4gdGhlIGNhc2Ugb2YgbXVsdGlwbGUgY29ubmVjdGlvbnMg
aXQgc3VtcyB0aGUgcmVzdWx0IGludG8gYW4gaW50ZXJuYWwgc3VtbWluZyBidXMuCisgICAgLy8g
SW4gdGhlIHNpbmdsZSBjb25uZWN0aW9uIGNhc2UsIGl0IGFsbG93cyBpbi1wbGFjZSBwcm9jZXNz
aW5nIHdoZXJlIHBvc3NpYmxlIHVzaW5nIGluUGxhY2VCdXMuCisgICAgLy8gSXQgcmV0dXJucyB0
aGUgYnVzIHdoaWNoIGl0IHJlbmRlcmVkIGludG8sIHJldHVybmluZyBpblBsYWNlQnVzIGlmIGlu
LXBsYWNlIHByb2Nlc3Npbmcgd2FzIHBlcmZvcm1lZC4KKyAgICAvLyBDYWxsZWQgZnJvbSBjb250
ZXh0J3MgYXVkaW8gdGhyZWFkLgorICAgIEF1ZGlvQnVzKiBwdWxsKEF1ZGlvQnVzKiBpblBsYWNl
QnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKworICAgIC8vIGJ1cygpIGNvbnRhaW5zIHRo
ZSByZW5kZXJlZCBhdWRpbyBhZnRlciBwdWxsKCkgaGFzIGJlZW4gY2FsbGVkIGZvciBlYWNoIHRp
bWUgcXVhbnR1bS4KKyAgICAvLyBDYWxsZWQgZnJvbSBjb250ZXh0J3MgYXVkaW8gdGhyZWFkLgor
ICAgIEF1ZGlvQnVzKiBidXMoKTsKKyAgICAKKyAgICAvLyBUaGlzIGNvcGllcyBtX291dHB1dHMg
dG8gbV9yZW5kZXJpbmdPdXRwdXRzLiAgUGxlYXNlIHNlZSBjb21tZW50cyBmb3IgdGhlc2UgbGlz
dHMgYmVsb3cuCisgICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCB3aGVuIHdlIG93biB0aGUgY29u
dGV4dCdzIGdyYXBoIGxvY2sgaW4gdGhlIGF1ZGlvIHRocmVhZCBhdCB0aGUgdmVyeSBzdGFydCBv
ciBlbmQgb2YgdGhlIHJlbmRlciBxdWFudHVtLgorICAgIHZvaWQgdXBkYXRlUmVuZGVyaW5nU3Rh
dGUoKTsKKworICAgIC8vIHVwZGF0ZUludGVybmFsQnVzKCkgdXBkYXRlcyBtX2ludGVybmFsU3Vt
bWluZ0J1cyBhcHByb3ByaWF0ZWx5IGZvciB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzLgorICAgIC8v
IFRoaXMgbXVzdCBiZSBjYWxsZWQgd2hlbiB3ZSBvd24gdGhlIGNvbnRleHQncyBncmFwaCBsb2Nr
IGluIHRoZSBhdWRpbyB0aHJlYWQgYXQgdGhlIHZlcnkgc3RhcnQgb3IgZW5kIG9mIHRoZSByZW5k
ZXIgcXVhbnR1bS4KKyAgICB2b2lkIHVwZGF0ZUludGVybmFsQnVzKCk7CisKKyAgICAvLyBSZW5k
ZXJpbmcgY29kZSBhY2Nlc3NlcyBpdHMgdmVyc2lvbiBvZiB0aGUgY3VycmVudCBjb25uZWN0aW9u
cyBoZXJlLgorICAgIHVuc2lnbmVkIG51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKSBjb25z
dCB7IHJldHVybiBtX3JlbmRlcmluZ091dHB1dHMuc2l6ZSgpOyB9CisgICAgQXVkaW9Ob2RlT3V0
cHV0KiByZW5kZXJpbmdPdXRwdXQodW5zaWduZWQgaSkgeyByZXR1cm4gbV9yZW5kZXJpbmdPdXRw
dXRzW2ldOyB9CisgICAgY29uc3QgQXVkaW9Ob2RlT3V0cHV0KiByZW5kZXJpbmdPdXRwdXQodW5z
aWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdPdXRwdXRzW2ldOyB9CisgICAgYm9v
bCBpc0Nvbm5lY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlv
bnMoKSA+IDA7IH0KKworICAgIC8vIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgb2YgdGhlIGNvbm5l
Y3Rpb24gd2l0aCB0aGUgbGFyZ2VzdCBudW1iZXIgb2YgY2hhbm5lbHMuCisgICAgdW5zaWduZWQg
bnVtYmVyT2ZDaGFubmVscygpIGNvbnN0OyAgICAgICAgCisgICAgCitwcml2YXRlOgorICAgIEF1
ZGlvTm9kZSogbV9ub2RlOworCisgICAgLy8gbV9vdXRwdXRzIGNvbnRhaW5zIHRoZSBBdWRpb05v
ZGVPdXRwdXRzIHJlcHJlc2VudGluZyBjdXJyZW50IGNvbm5lY3Rpb25zIHdoaWNoIGFyZSBub3Qg
ZGlzYWJsZWQuCisgICAgLy8gVGhlIHJlbmRlcmluZyBjb2RlIHNob3VsZCBuZXZlciB1c2UgdGhp
cyBkaXJlY3RseSwgYnV0IGluc3RlYWQgdXNlcyBtX3JlbmRlcmluZ091dHB1dHMuCisgICAgSGFz
aFNldDxBdWRpb05vZGVPdXRwdXQqPiBtX291dHB1dHM7CisKKyAgICAvLyBudW1iZXJPZkNvbm5l
Y3Rpb25zKCkgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBmcm9tIHRoZSBhdWRpbyByZW5kZXJpbmcg
dGhyZWFkLgorICAgIC8vIEluc3RlYWQgbnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9ucygpIGFu
ZCByZW5kZXJpbmdPdXRwdXQoKSBzaG91bGQgYmUgdXNlZC4KKyAgICB1bnNpZ25lZCBudW1iZXJP
ZkNvbm5lY3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9vdXRwdXRzLnNpemUoKTsgfQorCisgICAg
Ly8gVGhpcyBtdXN0IGJlIGNhbGxlZCB3aGVuZXZlciB3ZSBtb2RpZnkgbV9vdXRwdXRzLgorICAg
IHZvaWQgY2hhbmdlZE91dHB1dHMoKTsKKyAgICAKKyAgICAvLyBtX3JlbmRlcmluZ091dHB1dHMg
aXMgYSBjb3B5IG9mIG1fb3V0cHV0cyB3aGljaCB3aWxsIG5ldmVyIGJlIG1vZGlmaWVkIGR1cmlu
ZyB0aGUgZ3JhcGggcmVuZGVyaW5nIG9uIHRoZSBhdWRpbyB0aHJlYWQuCisgICAgLy8gVGhpcyBp
cyB0aGUgbGlzdCB3aGljaCBpcyB1c2VkIGJ5IHRoZSByZW5kZXJpbmcgY29kZS4KKyAgICAvLyBX
aGVuZXZlciBtX291dHB1dHMgaXMgbW9kaWZpZWQsIHRoZSBjb250ZXh0IGlzIHRvbGQgc28gaXQg
Y2FuIGxhdGVyIHVwZGF0ZSBtX3JlbmRlcmluZ091dHB1dHMgZnJvbSBtX291dHB1dHMgYXQgYSBz
YWZlIHRpbWUuCisgICAgLy8gTW9zdCBvZiB0aGUgdGltZSwgbV9yZW5kZXJpbmdPdXRwdXRzIGlz
IGlkZW50aWNhbCB0byBtX291dHB1dHMuCisgICAgVmVjdG9yPEF1ZGlvTm9kZU91dHB1dCo+IG1f
cmVuZGVyaW5nT3V0cHV0czsKKworICAgIC8vIG1fcmVuZGVyaW5nU3RhdGVOZWVkVXBkYXRpbmcg
a2VlcHMgdHJhY2sgaWYgbV9vdXRwdXRzIGlzIG1vZGlmaWVkLgorICAgIGJvb2wgbV9yZW5kZXJp
bmdTdGF0ZU5lZWRVcGRhdGluZzsKKworICAgIC8vIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgb2Yg
dGhlIHJlbmRlcmluZyBjb25uZWN0aW9uIHdpdGggdGhlIGxhcmdlc3QgbnVtYmVyIG9mIGNoYW5u
ZWxzLgorICAgIHVuc2lnbmVkIG51bWJlck9mUmVuZGVyaW5nQ2hhbm5lbHMoKTsKKworICAgIC8v
IG1fZGlzYWJsZWRPdXRwdXRzIGNvbnRhaW5zIHRoZSBBdWRpb05vZGVPdXRwdXRzIHdoaWNoIGFy
ZSBkaXNhYmxlZCAod2lsbCBub3QgYmUgcHJvY2Vzc2VkKSBieSB0aGUgYXVkaW8gZ3JhcGggcmVu
ZGVyaW5nLgorICAgIC8vIEJ1dCwgZnJvbSBKYXZhU2NyaXB0J3MgcGVyc3BlY3RpdmUsIHRoZXNl
IG91dHB1dHMgYXJlIHN0aWxsIGNvbm5lY3RlZCB0byB1cy4KKyAgICAvLyBHZW5lcmFsbHksIHRo
ZXNlIHJlcHJlc2VudCBkaXNhYmxlZCBjb25uZWN0aW9ucyBmcm9tICJub3RlcyIgd2hpY2ggaGF2
ZSBmaW5pc2hlZCBwbGF5aW5nIGJ1dCBhcmUgbm90IHlldCBnYXJiYWdlIGNvbGxlY3RlZC4KKyAg
ICBIYXNoU2V0PEF1ZGlvTm9kZU91dHB1dCo+IG1fZGlzYWJsZWRPdXRwdXRzOworCisgICAgLy8g
Q2FsbGVkIGZyb20gY29udGV4dCdzIGF1ZGlvIHRocmVhZC4KKyAgICBBdWRpb0J1cyogaW50ZXJu
YWxTdW1taW5nQnVzKCk7CisgICAgdm9pZCBzdW1BbGxDb25uZWN0aW9ucyhBdWRpb0J1cyogc3Vt
bWluZ0J1cywgc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CisKKyAgICBPd25QdHI8QXVkaW9CdXM+
IG1faW50ZXJuYWxTdW1taW5nQnVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gQXVkaW9Ob2RlSW5wdXRfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmNwcAkocmV2aXNpb24gMTExNDMzKQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuY3BwOjExMTQzMykK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJBdWRpb05vZGVP
dXRwdXQuaCIKKworI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisjaW5jbHVkZSAiQXVkaW9Db250ZXh0
LmgiCisjaW5jbHVkZSAiQXVkaW9Ob2RlSW5wdXQuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQXVkaW9Ob2RlT3V0cHV0OjpBdWRpb05vZGVP
dXRwdXQoQXVkaW9Ob2RlKiBub2RlLCB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKQorICAgIDog
bV9ub2RlKG5vZGUpCisgICAgLCBtX251bWJlck9mQ2hhbm5lbHMobnVtYmVyT2ZDaGFubmVscykK
KyAgICAsIG1fZGVzaXJlZE51bWJlck9mQ2hhbm5lbHMobnVtYmVyT2ZDaGFubmVscykKKyAgICAs
IG1fYWN0dWFsRGVzdGluYXRpb25CdXMoMCkKKyAgICAsIG1faXNFbmFibGVkKHRydWUpCisgICAg
LCBtX3JlbmRlcmluZ0Zhbk91dENvdW50KDApCit7CisgICAgQVNTRVJUKG51bWJlck9mQ2hhbm5l
bHMgPD0gQXVkaW9Db250ZXh0OjptYXhOdW1iZXJPZkNoYW5uZWxzKCkpOworCisgICAgbV9pbnRl
cm5hbEJ1cyA9IGFkb3B0UHRyKG5ldyBBdWRpb0J1cyhudW1iZXJPZkNoYW5uZWxzLCBBdWRpb05v
ZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXMpKTsKKyAgICBtX2FjdHVhbERlc3RpbmF0aW9uQnVz
ID0gbV9pbnRlcm5hbEJ1cy5nZXQoKTsKK30KKwordm9pZCBBdWRpb05vZGVPdXRwdXQ6OnNldE51
bWJlck9mQ2hhbm5lbHModW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscykKK3sKKyAgICBBU1NFUlQo
bnVtYmVyT2ZDaGFubmVscyA8PSBBdWRpb0NvbnRleHQ6Om1heE51bWJlck9mQ2hhbm5lbHMoKSk7
CisgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOworCisgICAgbV9kZXNpcmVk
TnVtYmVyT2ZDaGFubmVscyA9IG51bWJlck9mQ2hhbm5lbHM7CisKKyAgICBpZiAoY29udGV4dCgp
LT5pc0F1ZGlvVGhyZWFkKCkpIHsKKyAgICAgICAgLy8gSWYgd2UncmUgaW4gdGhlIGF1ZGlvIHRo
cmVhZCB0aGVuIHdlIGNhbiB0YWtlIGNhcmUgb2YgaXQgcmlnaHQgYXdheSAod2Ugc2hvdWxkIGJl
IGF0IHRoZSB2ZXJ5IHN0YXJ0IG9yIGVuZCBvZiBhIHJlbmRlcmluZyBxdWFudHVtKS4KKyAgICAg
ICAgdXBkYXRlTnVtYmVyT2ZDaGFubmVscygpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIExl
dCB0aGUgY29udGV4dCB0YWtlIGNhcmUgb2YgaXQgaW4gdGhlIGF1ZGlvIHRocmVhZCBpbiB0aGUg
cHJlIGFuZCBwb3N0IHJlbmRlciB0YXNrcy4KKyAgICAgICAgY29udGV4dCgpLT5tYXJrQXVkaW9O
b2RlT3V0cHV0RGlydHkodGhpcyk7CisgICAgfQorfQorCit2b2lkIEF1ZGlvTm9kZU91dHB1dDo6
dXBkYXRlSW50ZXJuYWxCdXMoKQoreworICAgIGlmIChudW1iZXJPZkNoYW5uZWxzKCkgPT0gbV9p
bnRlcm5hbEJ1cy0+bnVtYmVyT2ZDaGFubmVscygpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2ludGVybmFsQnVzID0gYWRvcHRQdHIobmV3IEF1ZGlvQnVzKG51bWJlck9mQ2hhbm5lbHMoKSwg
QXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVzKSk7CisKKyAgICAvLyBUaGlzIG1heSBs
YXRlciBiZSBjaGFuZ2VkIGluIHB1bGwoKSB0byBwb2ludCB0byBhbiBpbi1wbGFjZSBidXMgd2l0
aCB0aGUgc2FtZSBudW1iZXIgb2YgY2hhbm5lbHMuCisgICAgbV9hY3R1YWxEZXN0aW5hdGlvbkJ1
cyA9IG1faW50ZXJuYWxCdXMuZ2V0KCk7Cit9CisKK3ZvaWQgQXVkaW9Ob2RlT3V0cHV0Ojp1cGRh
dGVSZW5kZXJpbmdTdGF0ZSgpCit7CisgICAgdXBkYXRlTnVtYmVyT2ZDaGFubmVscygpOworICAg
IG1fcmVuZGVyaW5nRmFuT3V0Q291bnQgPSBmYW5PdXRDb3VudCgpOworfQorCit2b2lkIEF1ZGlv
Tm9kZU91dHB1dDo6dXBkYXRlTnVtYmVyT2ZDaGFubmVscygpCit7CisgICAgQVNTRVJUKGNvbnRl
eHQoKS0+aXNBdWRpb1RocmVhZCgpICYmIGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOworCisg
ICAgaWYgKG1fbnVtYmVyT2ZDaGFubmVscyAhPSBtX2Rlc2lyZWROdW1iZXJPZkNoYW5uZWxzKSB7
CisgICAgICAgIG1fbnVtYmVyT2ZDaGFubmVscyA9IG1fZGVzaXJlZE51bWJlck9mQ2hhbm5lbHM7
CisgICAgICAgIHVwZGF0ZUludGVybmFsQnVzKCk7CisgICAgICAgIHByb3BhZ2F0ZUNoYW5uZWxD
b3VudCgpOworICAgIH0KK30KKwordm9pZCBBdWRpb05vZGVPdXRwdXQ6OnByb3BhZ2F0ZUNoYW5u
ZWxDb3VudCgpCit7CisgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgpICYmIGNv
bnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOworICAgIAorICAgIGlmIChpc0NoYW5uZWxDb3VudEtu
b3duKCkpIHsKKyAgICAgICAgLy8gQW5ub3VuY2UgdG8gYW55IG5vZGVzIHdlJ3JlIGNvbm5lY3Rl
ZCB0byB0aGF0IHdlIGNoYW5nZWQgb3VyIGNoYW5uZWwgY291bnQgZm9yIGl0cyBpbnB1dC4KKyAg
ICAgICAgZm9yIChJbnB1dHNJdGVyYXRvciBpID0gbV9pbnB1dHMuYmVnaW4oKTsgaSAhPSBtX2lu
cHV0cy5lbmQoKTsgKytpKSB7CisgICAgICAgICAgICBBdWRpb05vZGVJbnB1dCogaW5wdXQgPSAq
aTsKKyAgICAgICAgICAgIEF1ZGlvTm9kZSogY29ubmVjdGlvbk5vZGUgPSBpbnB1dC0+bm9kZSgp
OworICAgICAgICAgICAgY29ubmVjdGlvbk5vZGUtPmNoZWNrTnVtYmVyT2ZDaGFubmVsc0Zvcklu
cHV0KGlucHV0KTsKKyAgICAgICAgfQorICAgIH0KK30KKworQXVkaW9CdXMqIEF1ZGlvTm9kZU91
dHB1dDo6cHVsbChBdWRpb0J1cyogaW5QbGFjZUJ1cywgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykK
K3sKKyAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkpOworICAgIEFTU0VSVCht
X3JlbmRlcmluZ0Zhbk91dENvdW50ID4gMCk7CisgICAgCisgICAgLy8gQ2F1c2VzIG91ciBBdWRp
b05vZGUgdG8gcHJvY2VzcyBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBmb3IgdGhpcyByZW5kZXIgcXVh
bnR1bS4KKyAgICAvLyBXZSB0cnkgdG8gZG8gaW4tcGxhY2UgcHJvY2Vzc2luZyAodXNpbmcgaW5Q
bGFjZUJ1cykgaWYgYXQgYWxsIHBvc3NpYmxlLAorICAgIC8vIGJ1dCB3ZSBjYW4ndCBwcm9jZXNz
IGluLXBsYWNlIGlmIHdlJ3JlIGNvbm5lY3RlZCB0byBtb3JlIHRoYW4gb25lIGlucHV0IChmYW4t
b3V0ID4gMSkuCisgICAgLy8gSW4gdGhpcyBjYXNlIHB1bGwoKSBpcyBjYWxsZWQgbXVsdGlwbGUg
dGltZXMgcGVyIHJlbmRlcmluZyBxdWFudHVtLCBhbmQgdGhlIHByb2Nlc3NJZk5lY2Vzc2FyeSgp
IGNhbGwgYmVsb3cgd2lsbAorICAgIC8vIGNhdXNlIG91ciBub2RlIHRvIHByb2Nlc3MoKSBvbmx5
IHRoZSBmaXJzdCB0aW1lLCBjYWNoaW5nIHRoZSBvdXRwdXQgaW4gbV9pbnRlcm5hbE91dHB1dEJ1
cyBmb3Igc3Vic2VxdWVudCBjYWxscy4gICAgCisgICAgCisgICAgYm9vbCBpc0luUGxhY2UgPSBp
blBsYWNlQnVzICYmIGluUGxhY2VCdXMtPm51bWJlck9mQ2hhbm5lbHMoKSA9PSBudW1iZXJPZkNo
YW5uZWxzKCkgJiYgbV9yZW5kZXJpbmdGYW5PdXRDb3VudCA9PSAxOworCisgICAgLy8gU2V0dXAg
dGhlIGFjdHVhbCBkZXN0aW5hdGlvbiBidXMgZm9yIHByb2Nlc3Npbmcgd2hlbiBvdXIgbm9kZSdz
IHByb2Nlc3MoKSBtZXRob2QgZ2V0cyBjYWxsZWQgaW4gcHJvY2Vzc0lmTmVjZXNzYXJ5KCkgYmVs
b3cuCisgICAgbV9hY3R1YWxEZXN0aW5hdGlvbkJ1cyA9IGlzSW5QbGFjZSA/IGluUGxhY2VCdXMg
OiBtX2ludGVybmFsQnVzLmdldCgpOworCisgICAgbm9kZSgpLT5wcm9jZXNzSWZOZWNlc3Nhcnko
ZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICByZXR1cm4gbV9hY3R1YWxEZXN0aW5hdGlvbkJ1czsKK30K
KworQXVkaW9CdXMqIEF1ZGlvTm9kZU91dHB1dDo6YnVzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
Y29uc3RfY2FzdDxBdWRpb05vZGVPdXRwdXQqPih0aGlzKS0+Y29udGV4dCgpLT5pc0F1ZGlvVGhy
ZWFkKCkpOworICAgIEFTU0VSVChtX2FjdHVhbERlc3RpbmF0aW9uQnVzKTsKKyAgICByZXR1cm4g
bV9hY3R1YWxEZXN0aW5hdGlvbkJ1czsKK30KKwordW5zaWduZWQgQXVkaW9Ob2RlT3V0cHV0Ojpy
ZW5kZXJpbmdGYW5PdXRDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nRmFu
T3V0Q291bnQ7Cit9CisKK3Vuc2lnbmVkIEF1ZGlvTm9kZU91dHB1dDo6ZmFuT3V0Q291bnQoKQor
eworICAgIEFTU0VSVChjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKKyAgICByZXR1cm4gbV9p
bnB1dHMuc2l6ZSgpOworfQorCit2b2lkIEF1ZGlvTm9kZU91dHB1dDo6YWRkSW5wdXQoQXVkaW9O
b2RlSW5wdXQqIGlucHV0KQoreworICAgIEFTU0VSVChjb250ZXh0KCktPmlzR3JhcGhPd25lcigp
KTsKKworICAgIEFTU0VSVChpbnB1dCk7CisgICAgaWYgKCFpbnB1dCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9pbnB1dHMuYWRkKGlucHV0KTsKK30KKwordm9pZCBBdWRpb05vZGVPdXRwdXQ6
OnJlbW92ZUlucHV0KEF1ZGlvTm9kZUlucHV0KiBpbnB1dCkKK3sKKyAgICBBU1NFUlQoY29udGV4
dCgpLT5pc0dyYXBoT3duZXIoKSk7CisKKyAgICBBU1NFUlQoaW5wdXQpOworICAgIGlmICghaW5w
dXQpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5wdXRzLnJlbW92ZShpbnB1dCk7Cit9CisK
K3ZvaWQgQXVkaW9Ob2RlT3V0cHV0OjpkaXNjb25uZWN0QWxsSW5wdXRzKCkKK3sKKyAgICBBU1NF
UlQoY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7CisgICAgCisgICAgLy8gQXVkaW9Ob2RlSW5w
dXQ6OmRpc2Nvbm5lY3QoKSBjaGFuZ2VzIG1faW5wdXRzIGJ5IGNhbGxpbmcgcmVtb3ZlSW5wdXQo
KS4KKyAgICB3aGlsZSAoIW1faW5wdXRzLmlzRW1wdHkoKSkgeworICAgICAgICBBdWRpb05vZGVJ
bnB1dCogaW5wdXQgPSAqbV9pbnB1dHMuYmVnaW4oKTsKKyAgICAgICAgaW5wdXQtPmRpc2Nvbm5l
Y3QodGhpcyk7CisgICAgfQorfQorCit2b2lkIEF1ZGlvTm9kZU91dHB1dDo6ZGlzYWJsZSgpCit7
CisgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOworCisgICAgaWYgKG1faXNF
bmFibGVkKSB7CisgICAgICAgIGZvciAoSW5wdXRzSXRlcmF0b3IgaSA9IG1faW5wdXRzLmJlZ2lu
KCk7IGkgIT0gbV9pbnB1dHMuZW5kKCk7ICsraSkgeworICAgICAgICAgICAgQXVkaW9Ob2RlSW5w
dXQqIGlucHV0ID0gKmk7CisgICAgICAgICAgICBpbnB1dC0+ZGlzYWJsZSh0aGlzKTsKKyAgICAg
ICAgfQorICAgICAgICBtX2lzRW5hYmxlZCA9IGZhbHNlOworICAgIH0KK30KKwordm9pZCBBdWRp
b05vZGVPdXRwdXQ6OmVuYWJsZSgpCit7CisgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNHcmFwaE93
bmVyKCkpOworCisgICAgaWYgKCFtX2lzRW5hYmxlZCkgeworICAgICAgICBmb3IgKElucHV0c0l0
ZXJhdG9yIGkgPSBtX2lucHV0cy5iZWdpbigpOyBpICE9IG1faW5wdXRzLmVuZCgpOyArK2kpIHsK
KyAgICAgICAgICAgIEF1ZGlvTm9kZUlucHV0KiBpbnB1dCA9ICppOworICAgICAgICAgICAgaW5w
dXQtPmVuYWJsZSh0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBtX2lzRW5hYmxlZCA9IHRydWU7
CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05v
ZGVPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvTm9kZU91dHB1dC5oCShyZXZpc2lvbiAxMTE0MzMpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5oOjExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEF1ZGlvTm9kZU91dHB1dF9oCisjZGVmaW5l
IEF1ZGlvTm9kZU91dHB1dF9oCisKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgorI2luY2x1ZGUgIkF1
ZGlvTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBBdWRpb0NvbnRleHQ7CitjbGFzcyBBdWRpb05vZGVJbnB1dDsKKworLy8gQXVkaW9Ob2Rl
T3V0cHV0IHJlcHJlc2VudHMgYSBzaW5nbGUgb3V0cHV0IGZvciBhbiBBdWRpb05vZGUuCisvLyBJ
dCBtYXkgYmUgY29ubmVjdGVkIHRvIG9uZSBvciBtb3JlIEF1ZGlvTm9kZUlucHV0cy4KKworY2xh
c3MgQXVkaW9Ob2RlT3V0cHV0IHsKK3B1YmxpYzoKKyAgICAvLyBJdCdzIE9LIHRvIHBhc3MgMCBm
b3IgbnVtYmVyT2ZDaGFubmVscyBpbiB3aGljaCBjYXNlIHNldE51bWJlck9mQ2hhbm5lbHMoKSBt
dXN0IGJlIGNhbGxlZCBsYXRlciBvbi4KKyAgICBBdWRpb05vZGVPdXRwdXQoQXVkaW9Ob2RlKiwg
dW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscyk7CisKKyAgICAvLyBDYW4gYmUgY2FsbGVkIGZyb20g
YW55IHRocmVhZC4KKyAgICBBdWRpb05vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGU7
IH0KKyAgICBBdWRpb0NvbnRleHQqIGNvbnRleHQoKSB7IHJldHVybiBtX25vZGUtPmNvbnRleHQo
KTsgfQorICAgIAorICAgIC8vIENhdXNlcyBvdXIgQXVkaW9Ob2RlIHRvIHByb2Nlc3MgaWYgaXQg
aGFzbid0IGFscmVhZHkgZm9yIHRoaXMgcmVuZGVyIHF1YW50dW0uCisgICAgLy8gSXQgcmV0dXJu
cyB0aGUgYnVzIGNvbnRhaW5pbmcgdGhlIHByb2Nlc3NlZCBhdWRpbyBmb3IgdGhpcyBvdXRwdXQs
IHJldHVybmluZyBpblBsYWNlQnVzIGlmIGluLXBsYWNlIHByb2Nlc3Npbmcgd2FzIHBvc3NpYmxl
LgorICAgIC8vIENhbGxlZCBmcm9tIGNvbnRleHQncyBhdWRpbyB0aHJlYWQuCisgICAgQXVkaW9C
dXMqIHB1bGwoQXVkaW9CdXMqIGluUGxhY2VCdXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwor
CisgICAgLy8gYnVzKCkgd2lsbCBjb250YWluIHRoZSByZW5kZXJlZCBhdWRpbyBhZnRlciBwdWxs
KCkgaXMgY2FsbGVkIGZvciBlYWNoIHJlbmRlcmluZyB0aW1lIHF1YW50dW0uCisgICAgLy8gQ2Fs
bGVkIGZyb20gY29udGV4dCdzIGF1ZGlvIHRocmVhZC4KKyAgICBBdWRpb0J1cyogYnVzKCkgY29u
c3Q7CisKKyAgICAvLyBmYW5PdXRDb3VudCgpIGlzIHRoZSBudW1iZXIgb2YgQXVkaW9Ob2RlSW5w
dXRzIHRoYXQgd2UncmUgY29ubmVjdGVkIHRvLgorICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxk
IG5vdCBiZSBjYWxsZWQgaW4gYXVkaW8gdGhyZWFkIHJlbmRlcmluZyBjb2RlLCBpbnN0ZWFkIHJl
bmRlcmluZ0Zhbk91dENvdW50KCkgc2hvdWxkIGJlIHVzZWQuCisgICAgLy8gSXQgbXVzdCBiZSBj
YWxsZWQgd2l0aCB0aGUgY29udGV4dCdzIGdyYXBoIGxvY2suCisgICAgdW5zaWduZWQgZmFuT3V0
Q291bnQoKTsKKworICAgIC8vIHJlbmRlcmluZ0Zhbk91dENvdW50KCkgaXMgdGhlIG51bWJlciBv
ZiBBdWRpb05vZGVJbnB1dHMgdGhhdCB3ZSdyZSBjb25uZWN0ZWQgdG8gZHVyaW5nIHJlbmRlcmlu
Zy4KKyAgICAvLyBVbmxpa2UgZmFuT3V0Q291bnQoKSBpdCB3aWxsIG5vdCBjaGFuZ2UgZHVyaW5n
IHRoZSBjb3Vyc2Ugb2YgYSByZW5kZXIgcXVhbnR1bS4KKyAgICB1bnNpZ25lZCByZW5kZXJpbmdG
YW5PdXRDb3VudCgpIGNvbnN0OworCisgICAgLy8gSXQgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUg
Y29udGV4dCdzIGdyYXBoIGxvY2suCisgICAgdm9pZCBkaXNjb25uZWN0QWxsSW5wdXRzKCk7CisK
KyAgICB2b2lkIHNldE51bWJlck9mQ2hhbm5lbHModW5zaWduZWQpOworICAgIHVuc2lnbmVkIG51
bWJlck9mQ2hhbm5lbHMoKSBjb25zdCB7IHJldHVybiBtX251bWJlck9mQ2hhbm5lbHM7IH0KKyAg
ICBib29sIGlzQ2hhbm5lbENvdW50S25vd24oKSBjb25zdCB7IHJldHVybiBudW1iZXJPZkNoYW5u
ZWxzKCkgPiAwOyB9CisKKyAgICAvLyBEaXNhYmxlL0VuYWJsZSBoYXBwZW5zIHdoZW4gdGhlcmUg
YXJlIHN0aWxsIEphdmFTY3JpcHQgcmVmZXJlbmNlcyB0byBhIG5vZGUsIGJ1dCBpdCBoYXMgb3Ro
ZXJ3aXNlICJmaW5pc2hlZCIgaXRzIHdvcmsuCisgICAgLy8gRm9yIGV4YW1wbGUsIHdoZW4gYSBu
b3RlIGhhcyBmaW5pc2hlZCBwbGF5aW5nLiAgSXQgaXMga2VwdCBhcm91bmQsIGJlY2F1c2UgaXQg
bWF5IGJlIHBsYXllZCBhZ2FpbiBhdCBhIGxhdGVyIHRpbWUuCisgICAgLy8gVGhleSBtdXN0IGJl
IGNhbGxlZCB3aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jay4KKyAgICB2b2lkIGRpc2FibGUo
KTsKKyAgICB2b2lkIGVuYWJsZSgpOworCisgICAgLy8gdXBkYXRlUmVuZGVyaW5nU3RhdGUoKSBp
cyBjYWxsZWQgaW4gdGhlIGF1ZGlvIHRocmVhZCBhdCB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSBy
ZW5kZXIgcXVhbnR1bSB0byBoYW5kbGUgYW55IHJlY2VudCBjaGFuZ2VzIHRvIHRoZSBncmFwaCBz
dGF0ZS4KKyAgICAvLyBJdCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGgg
bG9jay4KKyAgICB2b2lkIHVwZGF0ZVJlbmRlcmluZ1N0YXRlKCk7CisgICAgCitwcml2YXRlOgor
ICAgIEF1ZGlvTm9kZSogbV9ub2RlOworCisgICAgZnJpZW5kIGNsYXNzIEF1ZGlvTm9kZUlucHV0
OworICAgIAorICAgIC8vIFRoZXNlIGFyZSBjYWxsZWQgZnJvbSBBdWRpb05vZGVJbnB1dC4KKyAg
ICAvLyBUaGV5IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGNvbnRleHQncyBncmFwaCBsb2NrLgor
ICAgIHZvaWQgYWRkSW5wdXQoQXVkaW9Ob2RlSW5wdXQqKTsKKyAgICB2b2lkIHJlbW92ZUlucHV0
KEF1ZGlvTm9kZUlucHV0Kik7CisKKyAgICAvLyB1cGRhdGVJbnRlcm5hbEJ1cygpIHVwZGF0ZXMg
bV9pbnRlcm5hbEJ1cyBhcHByb3ByaWF0ZWx5IGZvciB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzLgor
ICAgIC8vIEl0IGlzIGNhbGxlZCBpbiB0aGUgY29uc3RydWN0b3Igb3IgaW4gdGhlIGF1ZGlvIHRo
cmVhZCB3aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jay4KKyAgICB2b2lkIHVwZGF0ZUludGVy
bmFsQnVzKCk7CisKKyAgICAvLyBBbm5vdW5jZSB0byBhbnkgbm9kZXMgd2UncmUgY29ubmVjdGVk
IHRvIHRoYXQgd2UgY2hhbmdlZCBvdXIgY2hhbm5lbCBjb3VudCBmb3IgaXRzIGlucHV0LgorICAg
IC8vIEl0IG11c3QgYmUgY2FsbGVkIGluIHRoZSBhdWRpbyB0aHJlYWQgd2l0aCB0aGUgY29udGV4
dCdzIGdyYXBoIGxvY2suCisgICAgdm9pZCBwcm9wYWdhdGVDaGFubmVsQ291bnQoKTsKKworICAg
IC8vIHVwZGF0ZU51bWJlck9mQ2hhbm5lbHMoKSBpcyBjYWxsZWQgaW4gdGhlIGF1ZGlvIHRocmVh
ZCBhdCB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSByZW5kZXIgcXVhbnR1bSB0byBwaWNrIHVwIGNo
YW5uZWwgY2hhbmdlcy4KKyAgICAvLyBJdCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBjb250ZXh0
J3MgZ3JhcGggbG9jay4KKyAgICB2b2lkIHVwZGF0ZU51bWJlck9mQ2hhbm5lbHMoKTsKKworICAg
IC8vIG1fbnVtYmVyT2ZDaGFubmVscyB3aWxsIG9ubHkgYmUgY2hhbmdlZCBpbiB0aGUgYXVkaW8g
dGhyZWFkLgorICAgIC8vIFRoZSBtYWluIHRocmVhZCBzZXRzIG1fZGVzaXJlZE51bWJlck9mQ2hh
bm5lbHMgd2hpY2ggd2lsbCBsYXRlciBnZXQgcGlja2VkIHVwIGluIHRoZSBhdWRpbyB0aHJlYWQg
aW4gdXBkYXRlTnVtYmVyT2ZDaGFubmVscygpLgorICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZDaGFu
bmVsczsKKyAgICB1bnNpZ25lZCBtX2Rlc2lyZWROdW1iZXJPZkNoYW5uZWxzOworICAgIAorICAg
IC8vIG1faW50ZXJuYWxCdXMgbXVzdCBvbmx5IGJlIGNoYW5nZWQgaW4gdGhlIGF1ZGlvIHRocmVh
ZCB3aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jayAob3IgY29uc3RydWN0b3IpLgorICAgIE93
blB0cjxBdWRpb0J1cz4gbV9pbnRlcm5hbEJ1czsKKworICAgIC8vIG1fYWN0dWFsRGVzdGluYXRp
b25CdXMgaXMgc2V0IGluIHB1bGwoKSBhbmQgd2lsbCBlaXRoZXIgcG9pbnQgdG8gb25lIG9mIG91
ciBpbnRlcm5hbCBidXNzZXMgb3IgdG8gdGhlIGluLXBsYWNlIGJ1cy4KKyAgICAvLyBJdCBtdXN0
IG9ubHkgYmUgY2hhbmdlZCBpbiB0aGUgYXVkaW8gdGhyZWFkIChvciBjb25zdHJ1Y3RvcikuCisg
ICAgQXVkaW9CdXMqIG1fYWN0dWFsRGVzdGluYXRpb25CdXM7CisKKyAgICBIYXNoU2V0PEF1ZGlv
Tm9kZUlucHV0Kj4gbV9pbnB1dHM7CisgICAgdHlwZWRlZiBIYXNoU2V0PEF1ZGlvTm9kZUlucHV0
Kj46Oml0ZXJhdG9yIElucHV0c0l0ZXJhdG9yOworICAgIGJvb2wgbV9pc0VuYWJsZWQ7CisgICAg
CisgICAgLy8gRm9yIHRoZSBwdXJwb3NlcyBvZiByZW5kZXJpbmcsIGtlZXBzIHRyYWNrIG9mIHRo
ZSBudW1iZXIgb2YgaW5wdXRzIHdlJ3JlIGNvbm5lY3RlZCB0by4KKyAgICAvLyBUaGlzIHZhbHVl
IHNob3VsZCBvbmx5IGJlIGNoYW5nZWQgYXQgdGhlIHZlcnkgc3RhcnQgb3IgZW5kIG9mIHRoZSBy
ZW5kZXJpbmcgcXVhbnR1bS4KKyAgICB1bnNpZ25lZCBtX3JlbmRlcmluZ0Zhbk91dENvdW50Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQXVkaW9Ob2RlT3V0cHV0
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
UGFubmVyTm9kZS5jcHAJKHJldmlzaW9uIDExMTQzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9QYW5uZXJOb2RlLmNwcDoxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
V0VCX0FVRElPKQorCisjaW5jbHVkZSAiQXVkaW9QYW5uZXJOb2RlLmgiCisKKyNpbmNsdWRlICJB
dWRpb0J1ZmZlclNvdXJjZU5vZGUuaCIKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgorI2luY2x1ZGUg
IkF1ZGlvQ29udGV4dC5oIgorI2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0LmgiCisjaW5jbHVkZSAi
QXVkaW9Ob2RlT3V0cHV0LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUg
IkhSVEZQYW5uZXIuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCit1c2luZyBuYW1l
c3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyB2b2lkIGZpeE5BTnMo
ZG91YmxlICZ4KQoreworICAgIGlmIChpc25hbih4KSB8fCBpc2luZih4KSkKKyAgICAgICAgeCA9
IDAuMDsKK30KKworQXVkaW9QYW5uZXJOb2RlOjpBdWRpb1Bhbm5lck5vZGUoQXVkaW9Db250ZXh0
KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQorICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNh
bXBsZVJhdGUpCisgICAgLCBtX3Bhbm5pbmdNb2RlbChQYW5uZXI6OlBhbm5pbmdNb2RlbEhSVEYp
CisgICAgLCBtX2xhc3RHYWluKC0xLjApCisgICAgLCBtX2Nvbm5lY3Rpb25Db3VudCgwKQorewor
ICAgIGFkZElucHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVJbnB1dCh0aGlzKSkpOworICAgIGFk
ZE91dHB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMsIDIpKSk7CisgICAgCisg
ICAgbV9kaXN0YW5jZUdhaW4gPSBBdWRpb0dhaW46OmNyZWF0ZSgiZGlzdGFuY2VHYWluIiwgMS4w
LCAwLjAsIDEuMCk7CisgICAgbV9jb25lR2FpbiA9IEF1ZGlvR2Fpbjo6Y3JlYXRlKCJjb25lR2Fp
biIsIDEuMCwgMC4wLCAxLjApOworCisgICAgbV9wb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCgwLCAw
LCAwKTsKKyAgICBtX29yaWVudGF0aW9uID0gRmxvYXRQb2ludDNEKDEsIDAsIDApOworICAgIG1f
dmVsb2NpdHkgPSBGbG9hdFBvaW50M0QoMCwgMCwgMCk7CisgICAgCisgICAgc2V0Tm9kZVR5cGUo
Tm9kZVR5cGVQYW5uZXIpOworCisgICAgaW5pdGlhbGl6ZSgpOworfQorCitBdWRpb1Bhbm5lck5v
ZGU6On5BdWRpb1Bhbm5lck5vZGUoKQoreworICAgIHVuaW5pdGlhbGl6ZSgpOworfQorCit2b2lk
IEF1ZGlvUGFubmVyTm9kZTo6cHVsbElucHV0cyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQorewor
ICAgIC8vIFdlIG92ZXJyaWRlIHB1bGxJbnB1dHMoKSwgc28gd2UgY2FuIGRldGVjdCBuZXcgQXVk
aW9Tb3VyY2VOb2RlcyB3aGljaCBoYXZlIGNvbm5lY3RlZCB0byB1cyB3aGVuIG5ldyBjb25uZWN0
aW9ucyBhcmUgbWFkZS4KKyAgICAvLyBUaGVzZSBBdWRpb1NvdXJjZU5vZGVzIG5lZWQgdG8gYmUg
bWFkZSBhd2FyZSBvZiBvdXIgZXhpc3RlbmNlIGluIG9yZGVyIHRvIGhhbmRsZSBkb3BwbGVyIHNo
aWZ0IHBpdGNoIGNoYW5nZXMuCisgICAgaWYgKG1fY29ubmVjdGlvbkNvdW50ICE9IGNvbnRleHQo
KS0+Y29ubmVjdGlvbkNvdW50KCkpIHsKKyAgICAgICAgbV9jb25uZWN0aW9uQ291bnQgPSBjb250
ZXh0KCktPmNvbm5lY3Rpb25Db3VudCgpOworCisgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGdvIHRo
cm91Z2ggYWxsIG5vZGVzIGNvbm5lY3RlZCB0byB1cy4KKyAgICAgICAgbm90aWZ5QXVkaW9Tb3Vy
Y2VzQ29ubmVjdGVkVG9Ob2RlKHRoaXMpOworICAgIH0KKyAgICAKKyAgICBBdWRpb05vZGU6OnB1
bGxJbnB1dHMoZnJhbWVzVG9Qcm9jZXNzKTsKK30KKwordm9pZCBBdWRpb1Bhbm5lck5vZGU6OnBy
b2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICBBdWRpb0J1cyogZGVzdGluYXRp
b24gPSBvdXRwdXQoMCktPmJ1cygpOworCisgICAgaWYgKCFpc0luaXRpYWxpemVkKCkgfHwgIWlu
cHV0KDApLT5pc0Nvbm5lY3RlZCgpIHx8ICFtX3Bhbm5lci5nZXQoKSkgeworICAgICAgICBkZXN0
aW5hdGlvbi0+emVybygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQXVkaW9CdXMq
IHNvdXJjZSA9IGlucHV0KDApLT5idXMoKTsKKworICAgIGlmICghc291cmNlKSB7CisgICAgICAg
IGRlc3RpbmF0aW9uLT56ZXJvKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBB
cHBseSB0aGUgcGFubmluZyBlZmZlY3QuCisgICAgZG91YmxlIGF6aW11dGg7CisgICAgZG91Ymxl
IGVsZXZhdGlvbjsKKyAgICBnZXRBemltdXRoRWxldmF0aW9uKCZhemltdXRoLCAmZWxldmF0aW9u
KTsKKyAgICBtX3Bhbm5lci0+cGFuKGF6aW11dGgsIGVsZXZhdGlvbiwgc291cmNlLCBkZXN0aW5h
dGlvbiwgZnJhbWVzVG9Qcm9jZXNzKTsKKworICAgIC8vIEdldCB0aGUgZGlzdGFuY2UgYW5kIGNv
bmUgZ2Fpbi4KKyAgICBkb3VibGUgdG90YWxHYWluID0gZGlzdGFuY2VDb25lR2FpbigpOworCisg
ICAgLy8gU25hcCB0byBkZXNpcmVkIGdhaW4gYXQgdGhlIGJlZ2lubmluZy4KKyAgICBpZiAobV9s
YXN0R2FpbiA9PSAtMS4wKQorICAgICAgICBtX2xhc3RHYWluID0gdG90YWxHYWluOworICAgICAg
ICAKKyAgICAvLyBBcHBseSBnYWluIGluLXBsYWNlIHdpdGggZGUtemlwcGVyaW5nLgorICAgIGRl
c3RpbmF0aW9uLT5jb3B5V2l0aEdhaW5Gcm9tKCpkZXN0aW5hdGlvbiwgJm1fbGFzdEdhaW4sIHRv
dGFsR2Fpbik7Cit9CisKK3ZvaWQgQXVkaW9QYW5uZXJOb2RlOjpyZXNldCgpCit7CisgICAgbV9s
YXN0R2FpbiA9IC0xLjA7IC8vIGZvcmNlIHRvIHNuYXAgdG8gaW5pdGlhbCBnYWluCisgICAgaWYg
KG1fcGFubmVyLmdldCgpKQorICAgICAgICBtX3Bhbm5lci0+cmVzZXQoKTsKK30KKwordm9pZCBB
dWRpb1Bhbm5lck5vZGU6OmluaXRpYWxpemUoKQoreworICAgIGlmIChpc0luaXRpYWxpemVkKCkp
CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgbV9wYW5uZXIgPSBQYW5uZXI6OmNyZWF0
ZShtX3Bhbm5pbmdNb2RlbCwgc2FtcGxlUmF0ZSgpKTsKKworICAgIEF1ZGlvTm9kZTo6aW5pdGlh
bGl6ZSgpOworfQorCit2b2lkIEF1ZGlvUGFubmVyTm9kZTo6dW5pbml0aWFsaXplKCkKK3sKKyAg
ICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBt
X3Bhbm5lci5jbGVhcigpOworICAgIEF1ZGlvTm9kZTo6dW5pbml0aWFsaXplKCk7Cit9CisKK0F1
ZGlvTGlzdGVuZXIqIEF1ZGlvUGFubmVyTm9kZTo6bGlzdGVuZXIoKQoreworICAgIHJldHVybiBj
b250ZXh0KCktPmxpc3RlbmVyKCk7Cit9CisKK3ZvaWQgQXVkaW9QYW5uZXJOb2RlOjpzZXRQYW5u
aW5nTW9kZWwodW5zaWduZWQgc2hvcnQgbW9kZWwsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IHN3aXRjaCAobW9kZWwpIHsKKyAgICBjYXNlIEVRVUFMUE9XRVI6CisgICAgY2FzZSBIUlRGOgor
ICAgICAgICBpZiAoIW1fcGFubmVyLmdldCgpIHx8IG1vZGVsICE9IG1fcGFubmluZ01vZGVsKSB7
CisgICAgICAgICAgICBPd25QdHI8UGFubmVyPiBuZXdQYW5uZXIgPSBQYW5uZXI6OmNyZWF0ZSht
b2RlbCwgc2FtcGxlUmF0ZSgpKTsKKyAgICAgICAgICAgIG1fcGFubmVyID0gbmV3UGFubmVyLnJl
bGVhc2UoKTsKKyAgICAgICAgICAgIG1fcGFubmluZ01vZGVsID0gbW9kZWw7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTT1VOREZJRUxEOgorICAgICAgICAvLyBGSVhNRTog
SW1wbGVtZW50IHNvdW5kIGZpZWxkIG1vZGVsLiBTZWUgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc3MzY3LgorICAgICAgICAvLyBGb3Igbm93LCBmYWxsIHRocm91
Z2ggdG8gdGhyb3cgYW4gZXhjZXB0aW9uLgorICAgIGRlZmF1bHQ6CisgICAgICAgIGVjID0gTk9U
X1NVUFBPUlRFRF9FUlI7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBBdWRpb1Bh
bm5lck5vZGU6OmdldEF6aW11dGhFbGV2YXRpb24oZG91YmxlKiBvdXRBemltdXRoLCBkb3VibGUq
IG91dEVsZXZhdGlvbikKK3sKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGNhY2hlIGF6aW11dGgg
YW5kIGVsZXZhdGlvbiAoaWYgcG9zc2libGUpLCBzbyB3ZSBvbmx5IHJlLWNhbGN1bGF0ZSBpZiBh
IGNoYW5nZSBoYXMgYmVlbiBtYWRlLgorCisgICAgZG91YmxlIGF6aW11dGggPSAwLjA7CisKKyAg
ICAvLyBDYWxjdWxhdGUgdGhlIHNvdXJjZS1saXN0ZW5lciB2ZWN0b3IKKyAgICBGbG9hdFBvaW50
M0QgbGlzdGVuZXJQb3NpdGlvbiA9IGxpc3RlbmVyKCktPnBvc2l0aW9uKCk7CisgICAgRmxvYXRQ
b2ludDNEIHNvdXJjZUxpc3RlbmVyID0gbV9wb3NpdGlvbiAtIGxpc3RlbmVyUG9zaXRpb247CisK
KyAgICBpZiAoc291cmNlTGlzdGVuZXIuaXNaZXJvKCkpIHsKKyAgICAgICAgLy8gZGVnZW5lcmF0
ZSBjYXNlIGlmIHNvdXJjZSBhbmQgbGlzdGVuZXIgYXJlIGF0IHRoZSBzYW1lIHBvaW50CisgICAg
ICAgICpvdXRBemltdXRoID0gMC4wOworICAgICAgICAqb3V0RWxldmF0aW9uID0gMC4wOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cmNlTGlzdGVuZXIubm9ybWFsaXplKCk7CisK
KyAgICAvLyBBbGlnbiBheGVzCisgICAgRmxvYXRQb2ludDNEIGxpc3RlbmVyRnJvbnQgPSBsaXN0
ZW5lcigpLT5vcmllbnRhdGlvbigpOworICAgIEZsb2F0UG9pbnQzRCBsaXN0ZW5lclVwID0gbGlz
dGVuZXIoKS0+dXBWZWN0b3IoKTsKKyAgICBGbG9hdFBvaW50M0QgbGlzdGVuZXJSaWdodCA9IGxp
c3RlbmVyRnJvbnQuY3Jvc3MobGlzdGVuZXJVcCk7CisgICAgbGlzdGVuZXJSaWdodC5ub3JtYWxp
emUoKTsKKworICAgIEZsb2F0UG9pbnQzRCBsaXN0ZW5lckZyb250Tm9ybSA9IGxpc3RlbmVyRnJv
bnQ7CisgICAgbGlzdGVuZXJGcm9udE5vcm0ubm9ybWFsaXplKCk7CisKKyAgICBGbG9hdFBvaW50
M0QgdXAgPSBsaXN0ZW5lclJpZ2h0LmNyb3NzKGxpc3RlbmVyRnJvbnROb3JtKTsKKworICAgIGZs
b2F0IHVwUHJvamVjdGlvbiA9IHNvdXJjZUxpc3RlbmVyLmRvdCh1cCk7CisKKyAgICBGbG9hdFBv
aW50M0QgcHJvamVjdGVkU291cmNlID0gc291cmNlTGlzdGVuZXIgLSB1cFByb2plY3Rpb24gKiB1
cDsKKyAgICBwcm9qZWN0ZWRTb3VyY2Uubm9ybWFsaXplKCk7CisKKyAgICBhemltdXRoID0gMTgw
LjAgKiBhY29zKHByb2plY3RlZFNvdXJjZS5kb3QobGlzdGVuZXJSaWdodCkpIC8gcGlEb3VibGU7
CisgICAgZml4TkFOcyhhemltdXRoKTsgLy8gYXZvaWQgaWxsZWdhbCB2YWx1ZXMKKworICAgIC8v
IFNvdXJjZSAgaW4gZnJvbnQgb3IgYmVoaW5kIHRoZSBsaXN0ZW5lcgorICAgIGRvdWJsZSBmcm9u
dEJhY2sgPSBwcm9qZWN0ZWRTb3VyY2UuZG90KGxpc3RlbmVyRnJvbnROb3JtKTsKKyAgICBpZiAo
ZnJvbnRCYWNrIDwgMC4wKQorICAgICAgICBhemltdXRoID0gMzYwLjAgLSBhemltdXRoOworCisg
ICAgLy8gTWFrZSBhemltdXRoIHJlbGF0aXZlIHRvICJmcm9udCIgYW5kIG5vdCAicmlnaHQiIGxp
c3RlbmVyIHZlY3RvcgorICAgIGlmICgoYXppbXV0aCA+PSAwLjApICYmIChhemltdXRoIDw9IDI3
MC4wKSkKKyAgICAgICAgYXppbXV0aCA9IDkwLjAgLSBhemltdXRoOworICAgIGVsc2UKKyAgICAg
ICAgYXppbXV0aCA9IDQ1MC4wIC0gYXppbXV0aDsKKworICAgIC8vIEVsZXZhdGlvbgorICAgIGRv
dWJsZSBlbGV2YXRpb24gPSA5MC4wIC0gMTgwLjAgKiBhY29zKHNvdXJjZUxpc3RlbmVyLmRvdCh1
cCkpIC8gcGlEb3VibGU7CisgICAgZml4TkFOcyhlbGV2YXRpb24pOyAvLyBhdm9pZCBpbGxlZ2Fs
IHZhbHVlcworCisgICAgaWYgKGVsZXZhdGlvbiA+IDkwLjApCisgICAgICAgIGVsZXZhdGlvbiA9
IDE4MC4wIC0gZWxldmF0aW9uOworICAgIGVsc2UgaWYgKGVsZXZhdGlvbiA8IC05MC4wKQorICAg
ICAgICBlbGV2YXRpb24gPSAtMTgwLjAgLSBlbGV2YXRpb247CisKKyAgICBpZiAob3V0QXppbXV0
aCkKKyAgICAgICAgKm91dEF6aW11dGggPSBhemltdXRoOworICAgIGlmIChvdXRFbGV2YXRpb24p
CisgICAgICAgICpvdXRFbGV2YXRpb24gPSBlbGV2YXRpb247Cit9CisKK2Zsb2F0IEF1ZGlvUGFu
bmVyTm9kZTo6ZG9wcGxlclJhdGUoKQoreworICAgIGRvdWJsZSBkb3BwbGVyU2hpZnQgPSAxLjA7
CisKKyAgICAvLyBGSVhNRTogb3B0aW1pemUgZm9yIGNhc2Ugd2hlbiBuZWl0aGVyIHNvdXJjZSBu
b3IgbGlzdGVuZXIgaGFzIGNoYW5nZWQuLi4KKyAgICBkb3VibGUgZG9wcGxlckZhY3RvciA9IGxp
c3RlbmVyKCktPmRvcHBsZXJGYWN0b3IoKTsKKworICAgIGlmIChkb3BwbGVyRmFjdG9yID4gMC4w
KSB7CisgICAgICAgIGRvdWJsZSBzcGVlZE9mU291bmQgPSBsaXN0ZW5lcigpLT5zcGVlZE9mU291
bmQoKTsKKworICAgICAgICBjb25zdCBGbG9hdFBvaW50M0QgJnNvdXJjZVZlbG9jaXR5ID0gbV92
ZWxvY2l0eTsKKyAgICAgICAgY29uc3QgRmxvYXRQb2ludDNEICZsaXN0ZW5lclZlbG9jaXR5ID0g
bGlzdGVuZXIoKS0+dmVsb2NpdHkoKTsKKworICAgICAgICAvLyBEb24ndCBib3RoZXIgaWYgYm90
aCBzb3VyY2UgYW5kIGxpc3RlbmVyIGhhdmUgbm8gdmVsb2NpdHkKKyAgICAgICAgYm9vbCBzb3Vy
Y2VIYXNWZWxvY2l0eSA9ICFzb3VyY2VWZWxvY2l0eS5pc1plcm8oKTsKKyAgICAgICAgYm9vbCBs
aXN0ZW5lckhhc1ZlbG9jaXR5ID0gIWxpc3RlbmVyVmVsb2NpdHkuaXNaZXJvKCk7CisKKyAgICAg
ICAgaWYgKHNvdXJjZUhhc1ZlbG9jaXR5IHx8IGxpc3RlbmVySGFzVmVsb2NpdHkpIHsKKyAgICAg
ICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgc291cmNlIHRvIGxpc3RlbmVyIHZlY3RvcgorICAgICAg
ICAgICAgRmxvYXRQb2ludDNEIGxpc3RlbmVyUG9zaXRpb24gPSBsaXN0ZW5lcigpLT5wb3NpdGlv
bigpOworICAgICAgICAgICAgRmxvYXRQb2ludDNEIHNvdXJjZVRvTGlzdGVuZXIgPSBtX3Bvc2l0
aW9uIC0gbGlzdGVuZXJQb3NpdGlvbjsKKworICAgICAgICAgICAgZG91YmxlIHNvdXJjZUxpc3Rl
bmVyTWFnbml0dWRlID0gc291cmNlVG9MaXN0ZW5lci5sZW5ndGgoKTsKKworICAgICAgICAgICAg
ZG91YmxlIGxpc3RlbmVyUHJvamVjdGlvbiA9IHNvdXJjZVRvTGlzdGVuZXIuZG90KGxpc3RlbmVy
VmVsb2NpdHkpIC8gc291cmNlTGlzdGVuZXJNYWduaXR1ZGU7CisgICAgICAgICAgICBkb3VibGUg
c291cmNlUHJvamVjdGlvbiA9IHNvdXJjZVRvTGlzdGVuZXIuZG90KHNvdXJjZVZlbG9jaXR5KSAv
IHNvdXJjZUxpc3RlbmVyTWFnbml0dWRlOworCisgICAgICAgICAgICBsaXN0ZW5lclByb2plY3Rp
b24gPSAtbGlzdGVuZXJQcm9qZWN0aW9uOworICAgICAgICAgICAgc291cmNlUHJvamVjdGlvbiA9
IC1zb3VyY2VQcm9qZWN0aW9uOworCisgICAgICAgICAgICBkb3VibGUgc2NhbGVkU3BlZWRPZlNv
dW5kID0gc3BlZWRPZlNvdW5kIC8gZG9wcGxlckZhY3RvcjsKKyAgICAgICAgICAgIGxpc3RlbmVy
UHJvamVjdGlvbiA9IG1pbihsaXN0ZW5lclByb2plY3Rpb24sIHNjYWxlZFNwZWVkT2ZTb3VuZCk7
CisgICAgICAgICAgICBzb3VyY2VQcm9qZWN0aW9uID0gbWluKHNvdXJjZVByb2plY3Rpb24sIHNj
YWxlZFNwZWVkT2ZTb3VuZCk7CisKKyAgICAgICAgICAgIGRvcHBsZXJTaGlmdCA9ICgoc3BlZWRP
ZlNvdW5kIC0gZG9wcGxlckZhY3RvciAqIGxpc3RlbmVyUHJvamVjdGlvbikgLyAoc3BlZWRPZlNv
dW5kIC0gZG9wcGxlckZhY3RvciAqIHNvdXJjZVByb2plY3Rpb24pKTsKKyAgICAgICAgICAgIGZp
eE5BTnMoZG9wcGxlclNoaWZ0KTsgLy8gYXZvaWQgaWxsZWdhbCB2YWx1ZXMKKworICAgICAgICAg
ICAgLy8gTGltaXQgdGhlIHBpdGNoIHNoaWZ0aW5nIHRvIDQgb2N0YXZlcyB1cCBhbmQgMyBvY3Rh
dmVzIGRvd24uCisgICAgICAgICAgICBpZiAoZG9wcGxlclNoaWZ0ID4gMTYuMCkKKyAgICAgICAg
ICAgICAgICBkb3BwbGVyU2hpZnQgPSAxNi4wOworICAgICAgICAgICAgZWxzZSBpZiAoZG9wcGxl
clNoaWZ0IDwgMC4xMjUpCisgICAgICAgICAgICAgICAgZG9wcGxlclNoaWZ0ID0gMC4xMjU7ICAg
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRvcHBs
ZXJTaGlmdCk7Cit9CisKK2Zsb2F0IEF1ZGlvUGFubmVyTm9kZTo6ZGlzdGFuY2VDb25lR2Fpbigp
Cit7CisgICAgRmxvYXRQb2ludDNEIGxpc3RlbmVyUG9zaXRpb24gPSBsaXN0ZW5lcigpLT5wb3Np
dGlvbigpOworCisgICAgZG91YmxlIGxpc3RlbmVyRGlzdGFuY2UgPSBtX3Bvc2l0aW9uLmRpc3Rh
bmNlVG8obGlzdGVuZXJQb3NpdGlvbik7CisgICAgZG91YmxlIGRpc3RhbmNlR2FpbiA9IG1fZGlz
dGFuY2VFZmZlY3QuZ2FpbihsaXN0ZW5lckRpc3RhbmNlKTsKKyAgICAKKyAgICBtX2Rpc3RhbmNl
R2Fpbi0+c2V0VmFsdWUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRpc3RhbmNlR2FpbikpOworCisgICAg
Ly8gRklYTUU6IGNvdWxkIG9wdGltaXplIGJ5IGNhY2hpbmcgY29uZUdhaW4KKyAgICBkb3VibGUg
Y29uZUdhaW4gPSBtX2NvbmVFZmZlY3QuZ2FpbihtX3Bvc2l0aW9uLCBtX29yaWVudGF0aW9uLCBs
aXN0ZW5lclBvc2l0aW9uKTsKKyAgICAKKyAgICBtX2NvbmVHYWluLT5zZXRWYWx1ZShzdGF0aWNf
Y2FzdDxmbG9hdD4oY29uZUdhaW4pKTsKKworICAgIHJldHVybiBmbG9hdChkaXN0YW5jZUdhaW4g
KiBjb25lR2Fpbik7Cit9CisKK3ZvaWQgQXVkaW9QYW5uZXJOb2RlOjpub3RpZnlBdWRpb1NvdXJj
ZXNDb25uZWN0ZWRUb05vZGUoQXVkaW9Ob2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlKTsK
KyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgLy8gRmlyc3Qg
Y2hlY2sgaWYgdGhpcyBub2RlIGlzIGFuIEF1ZGlvQnVmZmVyU291cmNlTm9kZS4gIElmIHNvLCBs
ZXQgaXQga25vdyBhYm91dCB1cyBzbyB0aGF0IGRvcHBsZXIgc2hpZnQgcGl0Y2ggY2FuIGJlIHRh
a2VuIGludG8gYWNjb3VudC4KKyAgICBpZiAobm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlVHlwZUF1
ZGlvQnVmZmVyU291cmNlKSB7CisgICAgICAgIEF1ZGlvQnVmZmVyU291cmNlTm9kZSogYnVmZmVy
U291cmNlTm9kZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8QXVkaW9CdWZmZXJTb3VyY2VOb2RlKj4obm9k
ZSk7CisgICAgICAgIGJ1ZmZlclNvdXJjZU5vZGUtPnNldFBhbm5lck5vZGUodGhpcyk7CisgICAg
fSBlbHNlIHsgICAgCisgICAgICAgIC8vIEdvIHRocm91Z2ggYWxsIGlucHV0cyB0byB0aGlzIG5v
ZGUuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlLT5udW1iZXJPZklucHV0
cygpOyArK2kpIHsKKyAgICAgICAgICAgIEF1ZGlvTm9kZUlucHV0KiBpbnB1dCA9IG5vZGUtPmlu
cHV0KGkpOworCisgICAgICAgICAgICAvLyBGb3IgZWFjaCBpbnB1dCwgZ28gdGhyb3VnaCBhbGwg
b2YgaXRzIGNvbm5lY3Rpb25zLCBsb29raW5nIGZvciBBdWRpb0J1ZmZlclNvdXJjZU5vZGVzLgor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGlucHV0LT5udW1iZXJPZlJlbmRl
cmluZ0Nvbm5lY3Rpb25zKCk7ICsraikgeworICAgICAgICAgICAgICAgIEF1ZGlvTm9kZU91dHB1
dCogY29ubmVjdGVkT3V0cHV0ID0gaW5wdXQtPnJlbmRlcmluZ091dHB1dChqKTsKKyAgICAgICAg
ICAgICAgICBBdWRpb05vZGUqIGNvbm5lY3RlZE5vZGUgPSBjb25uZWN0ZWRPdXRwdXQtPm5vZGUo
KTsKKyAgICAgICAgICAgICAgICBub3RpZnlBdWRpb1NvdXJjZXNDb25uZWN0ZWRUb05vZGUoY29u
bmVjdGVkTm9kZSk7IC8vIHJlY3Vyc2UKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJ
TykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Bh
bm5lck5vZGUuaAkocmV2aXNpb24gMTExNDMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb1Bhbm5lck5vZGUuaDoxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBBdWRpb1Bhbm5lck5vZGVfaAorI2RlZmluZSBBdWRpb1Bh
bm5lck5vZGVfaAorCisjaW5jbHVkZSAiQXVkaW9CdXMuaCIKKyNpbmNsdWRlICJBdWRpb0dhaW4u
aCIKKyNpbmNsdWRlICJBdWRpb0xpc3RlbmVyLmgiCisjaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCisj
aW5jbHVkZSAiQ29uZS5oIgorI2luY2x1ZGUgIkRpc3RhbmNlLmgiCisjaW5jbHVkZSAiRmxvYXRQ
b2ludDNELmgiCisjaW5jbHVkZSAiUGFubmVyLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEF1ZGlvUGFubmVyTm9kZSBpcyBhbiBBdWRpb05v
ZGUgd2l0aCBvbmUgaW5wdXQgYW5kIG9uZSBvdXRwdXQuCisvLyBJdCBwb3NpdGlvbnMgYSBzb3Vu
ZCBpbiAzRCBzcGFjZSwgd2l0aCB0aGUgZXhhY3QgZWZmZWN0IGRlcGVuZGVudCBvbiB0aGUgcGFu
bmluZyBtb2RlbC4KKy8vIEl0IGhhcyBhIHBvc2l0aW9uIGFuZCBhbiBvcmllbnRhdGlvbiBpbiAz
RCBzcGFjZSB3aGljaCBpcyByZWxhdGl2ZSB0byB0aGUgcG9zaXRpb24gYW5kIG9yaWVudGF0aW9u
IG9mIHRoZSBjb250ZXh0J3MgQXVkaW9MaXN0ZW5lci4KKy8vIEEgZGlzdGFuY2UgZWZmZWN0IHdp
bGwgYXR0ZW51YXRlIHRoZSBnYWluIGFzIHRoZSBwb3NpdGlvbiBtb3ZlcyBhd2F5IGZyb20gdGhl
IGxpc3RlbmVyLgorLy8gQSBjb25lIGVmZmVjdCB3aWxsIGF0dGVudWF0ZSB0aGUgZ2FpbiBhcyB0
aGUgb3JpZW50YXRpb24gbW92ZXMgYXdheSBmcm9tIHRoZSBsaXN0ZW5lci4KKy8vIEFsbCBvZiB0
aGVzZSBlZmZlY3RzIGZvbGxvdyB0aGUgT3BlbkFMIHNwZWNpZmljYXRpb24gdmVyeSBjbG9zZWx5
LgorCitjbGFzcyBBdWRpb1Bhbm5lck5vZGUgOiBwdWJsaWMgQXVkaW9Ob2RlIHsKK3B1YmxpYzoK
KyAgICAvLyBUaGVzZSBtdXN0IGJlIGRlZmluZWQgYXMgaW4gdGhlIC5pZGwgZmlsZSBhbmQgbXVz
dCBtYXRjaCB0aG9zZSBpbiB0aGUgUGFubmVyIGNsYXNzLgorICAgIGVudW0geworICAgICAgICBF
UVVBTFBPV0VSID0gMCwKKyAgICAgICAgSFJURiA9IDEsCisgICAgICAgIFNPVU5ERklFTEQgPSAy
LAorICAgIH07CisKKyAgICAvLyBUaGVzZSBtdXN0IGJlIGRlZmluZWQgYXMgaW4gdGhlIC5pZGwg
ZmlsZSBhbmQgbXVzdCBtYXRjaCB0aG9zZQorICAgIC8vIGluIHRoZSBEaXN0YW5jZUVmZmVjdCBj
bGFzcy4KKyAgICBlbnVtIHsKKyAgICAgICAgTElORUFSX0RJU1RBTkNFID0gMCwKKyAgICAgICAg
SU5WRVJTRV9ESVNUQU5DRSA9IDEsCisgICAgICAgIEVYUE9ORU5USUFMX0RJU1RBTkNFID0gMiwK
KyAgICB9OworICAgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlvUGFubmVyTm9kZT4gY3Jl
YXRlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVkaW9QYW5uZXJOb2RlKGNvbnRleHQsIHNhbXBsZVJh
dGUpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5BdWRpb1Bhbm5lck5vZGUoKTsKKworICAgIC8v
IEF1ZGlvTm9kZQorICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nl
c3MpOworICAgIHZpcnR1YWwgdm9pZCBwdWxsSW5wdXRzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3Mp
OworICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXpl
KCk7CisgICAgdmlydHVhbCB2b2lkIHVuaW5pdGlhbGl6ZSgpOworCisgICAgLy8gTGlzdGVuZXIK
KyAgICBBdWRpb0xpc3RlbmVyKiBsaXN0ZW5lcigpOworCisgICAgLy8gUGFubmluZyBtb2RlbAor
ICAgIHVuc2lnbmVkIHNob3J0IHBhbm5pbmdNb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFubmlu
Z01vZGVsOyB9CisgICAgdm9pZCBzZXRQYW5uaW5nTW9kZWwodW5zaWduZWQgc2hvcnQsIEV4Y2Vw
dGlvbkNvZGUmKTsKKworICAgIC8vIFBvc2l0aW9uCisgICAgRmxvYXRQb2ludDNEIHBvc2l0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQorICAgIHZvaWQgc2V0UG9zaXRpb24oZmxv
YXQgeCwgZmxvYXQgeSwgZmxvYXQgeikgeyBtX3Bvc2l0aW9uID0gRmxvYXRQb2ludDNEKHgsIHks
IHopOyB9CisKKyAgICAvLyBPcmllbnRhdGlvbgorICAgIEZsb2F0UG9pbnQzRCBvcmllbnRhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKyAgICB2b2lkIHNldE9yaWVudGF0aW9u
KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopIHsgbV9vcmllbnRhdGlvbiA9IEZsb2F0UG9pbnQz
RCh4LCB5LCB6KTsgfQorCisgICAgLy8gVmVsb2NpdHkKKyAgICBGbG9hdFBvaW50M0QgdmVsb2Np
dHkoKSBjb25zdCB7IHJldHVybiBtX3ZlbG9jaXR5OyB9CisgICAgdm9pZCBzZXRWZWxvY2l0eShm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7IG1fdmVsb2NpdHkgPSBGbG9hdFBvaW50M0QoeCwg
eSwgeik7IH0KKworICAgIC8vIERpc3RhbmNlIHBhcmFtZXRlcnMKKyAgICB1bnNpZ25lZCBzaG9y
dCBkaXN0YW5jZU1vZGVsKCkgeyByZXR1cm4gbV9kaXN0YW5jZUVmZmVjdC5tb2RlbCgpOyB9Cisg
ICAgdm9pZCBzZXREaXN0YW5jZU1vZGVsKHVuc2lnbmVkIHNob3J0IG1vZGVsKSB7IG1fZGlzdGFu
Y2VFZmZlY3Quc2V0TW9kZWwoc3RhdGljX2Nhc3Q8RGlzdGFuY2VFZmZlY3Q6Ok1vZGVsVHlwZT4o
bW9kZWwpLCB0cnVlKTsgfQorICAgIAorICAgIGZsb2F0IHJlZkRpc3RhbmNlKCkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fZGlzdGFuY2VFZmZlY3QucmVmRGlzdGFuY2UoKSk7IH0KKyAg
ICB2b2lkIHNldFJlZkRpc3RhbmNlKGZsb2F0IHJlZkRpc3RhbmNlKSB7IG1fZGlzdGFuY2VFZmZl
Y3Quc2V0UmVmRGlzdGFuY2UocmVmRGlzdGFuY2UpOyB9CisKKyAgICBmbG9hdCBtYXhEaXN0YW5j
ZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX2Rpc3RhbmNlRWZmZWN0Lm1heERpc3Rh
bmNlKCkpOyB9CisgICAgdm9pZCBzZXRNYXhEaXN0YW5jZShmbG9hdCBtYXhEaXN0YW5jZSkgeyBt
X2Rpc3RhbmNlRWZmZWN0LnNldE1heERpc3RhbmNlKG1heERpc3RhbmNlKTsgfQorCisgICAgZmxv
YXQgcm9sbG9mZkZhY3RvcigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX2Rpc3RhbmNl
RWZmZWN0LnJvbGxvZmZGYWN0b3IoKSk7IH0KKyAgICB2b2lkIHNldFJvbGxvZmZGYWN0b3IoZmxv
YXQgcm9sbG9mZkZhY3RvcikgeyBtX2Rpc3RhbmNlRWZmZWN0LnNldFJvbGxvZmZGYWN0b3Iocm9s
bG9mZkZhY3Rvcik7IH0KKworICAgIC8vIFNvdW5kIGNvbmVzIC0gYW5nbGVzIGluIGRlZ3JlZXMK
KyAgICBmbG9hdCBjb25lSW5uZXJBbmdsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZs
b2F0PihtX2NvbmVFZmZlY3QuaW5uZXJBbmdsZSgpKTsgfQorICAgIHZvaWQgc2V0Q29uZUlubmVy
QW5nbGUoZmxvYXQgYW5nbGUpIHsgbV9jb25lRWZmZWN0LnNldElubmVyQW5nbGUoYW5nbGUpOyB9
CisKKyAgICBmbG9hdCBjb25lT3V0ZXJBbmdsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PGZsb2F0PihtX2NvbmVFZmZlY3Qub3V0ZXJBbmdsZSgpKTsgfQorICAgIHZvaWQgc2V0Q29uZU91
dGVyQW5nbGUoZmxvYXQgYW5nbGUpIHsgbV9jb25lRWZmZWN0LnNldE91dGVyQW5nbGUoYW5nbGUp
OyB9CisKKyAgICBmbG9hdCBjb25lT3V0ZXJHYWluKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG1fY29uZUVmZmVjdC5vdXRlckdhaW4oKSk7IH0KKyAgICB2b2lkIHNldENvbmVP
dXRlckdhaW4oZmxvYXQgYW5nbGUpIHsgbV9jb25lRWZmZWN0LnNldE91dGVyR2FpbihhbmdsZSk7
IH0KKworICAgIHZvaWQgZ2V0QXppbXV0aEVsZXZhdGlvbihkb3VibGUqIG91dEF6aW11dGgsIGRv
dWJsZSogb3V0RWxldmF0aW9uKTsKKyAgICBmbG9hdCBkb3BwbGVyUmF0ZSgpOworCisgICAgLy8g
QWNjZXNzb3JzIGZvciBkeW5hbWljYWxseSBjYWxjdWxhdGVkIGdhaW4gdmFsdWVzLgorICAgIEF1
ZGlvR2FpbiogZGlzdGFuY2VHYWluKCkgeyByZXR1cm4gbV9kaXN0YW5jZUdhaW4uZ2V0KCk7IH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgQXVkaW9HYWluKiBj
b25lR2FpbigpIHsgcmV0dXJuIG1fY29uZUdhaW4uZ2V0KCk7IH0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCisKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcGFubmVyID8gbV9wYW5uZXItPnRhaWxUaW1lKCkgOiAw
OyB9CisgICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBtX3Bhbm5lciA/IG1fcGFubmVyLT5sYXRlbmN5VGltZSgpIDogMDsgfQorCitwcml2YXRl
OgorICAgIEF1ZGlvUGFubmVyTm9kZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsK
KworICAgIC8vIFJldHVybnMgdGhlIGNvbWJpbmVkIGRpc3RhbmNlIGFuZCBjb25lIGdhaW4gYXR0
ZW51YXRpb24uCisgICAgZmxvYXQgZGlzdGFuY2VDb25lR2FpbigpOworCisgICAgLy8gTm90aWZp
ZXMgYW55IEF1ZGlvQnVmZmVyU291cmNlTm9kZXMgY29ubmVjdGVkIHRvIHVzIGVpdGhlciBkaXJl
Y3RseSBvciBpbmRpcmVjdGx5IGFib3V0IG91ciBleGlzdGVuY2UuCisgICAgLy8gVGhpcyBpcyBp
biBvcmRlciB0byBoYW5kbGUgdGhlIHBpdGNoIGNoYW5nZSBuZWNlc3NhcnkgZm9yIHRoZSBkb3Bw
bGVyIHNoaWZ0LgorICAgIHZvaWQgbm90aWZ5QXVkaW9Tb3VyY2VzQ29ubmVjdGVkVG9Ob2RlKEF1
ZGlvTm9kZSopOworCisgICAgT3duUHRyPFBhbm5lcj4gbV9wYW5uZXI7CisgICAgdW5zaWduZWQg
bV9wYW5uaW5nTW9kZWw7CisKKyAgICBGbG9hdFBvaW50M0QgbV9wb3NpdGlvbjsKKyAgICBGbG9h
dFBvaW50M0QgbV9vcmllbnRhdGlvbjsKKyAgICBGbG9hdFBvaW50M0QgbV92ZWxvY2l0eTsKKwor
ICAgIC8vIEdhaW4KKyAgICBSZWZQdHI8QXVkaW9HYWluPiBtX2Rpc3RhbmNlR2FpbjsKKyAgICBS
ZWZQdHI8QXVkaW9HYWluPiBtX2NvbmVHYWluOworICAgIERpc3RhbmNlRWZmZWN0IG1fZGlzdGFu
Y2VFZmZlY3Q7CisgICAgQ29uZUVmZmVjdCBtX2NvbmVFZmZlY3Q7CisgICAgZmxvYXQgbV9sYXN0
R2FpbjsKKworICAgIHVuc2lnbmVkIG1fY29ubmVjdGlvbkNvdW50OworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQXVkaW9QYW5uZXJOb2RlX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwJ
KHJldmlzaW9uIDExMTQzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5u
ZXJOb2RlLmlkbDoxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvUGFubmVyTm9kZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKK21vZHVsZSBhdWRpbyB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9u
YWw9V0VCX0FVRElPLAorICAgICAgICBKU0dlbmVyYXRlVG9KU09iamVjdAorICAgIF0gQXVkaW9Q
YW5uZXJOb2RlIDogQXVkaW9Ob2RlIHsKKyAgICAgICAgLy8gUGFubmluZyBtb2RlbAorICAgICAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCBFUVVBTFBPV0VSID0gMDsKKyAgICAgICAgY29uc3QgdW5z
aWduZWQgc2hvcnQgSFJURiA9IDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNPVU5E
RklFTEQgPSAyOworCisgICAgICAgIC8vIERpc3RhbmNlIG1vZGVsCisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IExJTkVBUl9ESVNUQU5DRSA9IDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IHNob3J0IElOVkVSU0VfRElTVEFOQ0UgPSAxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCBFWFBPTkVOVElBTF9ESVNUQU5DRSA9IDI7CisKKyAgICAgICAgLy8gRGVmYXVsdCBtb2RlbCBm
b3Igc3RlcmVvIGlzIEhSVEYgCisgICAgICAgIC8vIEZJWE1FOiB1c2UgdW5zaWduZWQgc2hvcnQg
d2hlbiBnbHVlIGdlbmVyYXRpb24gc3VwcG9ydHMgaXQKKyAgICAgICAgYXR0cmlidXRlIHVuc2ln
bmVkIGxvbmcgcGFubmluZ01vZGVsCisgICAgICAgICAgICBzZXR0ZXIgcmFpc2VzKERPTUV4Y2Vw
dGlvbik7CisKKyAgICAgICAgLy8gVXNlcyBhIDNEIGNhcnRlc2lhbiBjb29yZGluYXRlIHN5c3Rl
bSAKKyAgICAgICAgdm9pZCBzZXRQb3NpdGlvbihpbiBmbG9hdCB4LCBpbiBmbG9hdCB5LCBpbiBm
bG9hdCB6KTsKKyAgICAgICAgdm9pZCBzZXRPcmllbnRhdGlvbihpbiBmbG9hdCB4LCBpbiBmbG9h
dCB5LCBpbiBmbG9hdCB6KTsKKyAgICAgICAgdm9pZCBzZXRWZWxvY2l0eShpbiBmbG9hdCB4LCBp
biBmbG9hdCB5LCBpbiBmbG9hdCB6KTsKKworICAgICAgICAvLyBEaXN0YW5jZSBtb2RlbAorICAg
ICAgICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBkaXN0YW5jZU1vZGVsOyAvLyBGSVhNRTogdXNl
IHVuc2lnbmVkIHNob3J0IHdoZW4gZ2x1ZSBnZW5lcmF0aW9uIHN1cHBvcnRzIGl0CisgICAgICAg
IGF0dHJpYnV0ZSBmbG9hdCByZWZEaXN0YW5jZTsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0IG1h
eERpc3RhbmNlOworICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgcm9sbG9mZkZhY3RvcjsKKworICAg
ICAgICAvLyBEaXJlY3Rpb25hbCBzb3VuZCBjb25lCisgICAgICAgIGF0dHJpYnV0ZSBmbG9hdCBj
b25lSW5uZXJBbmdsZTsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0IGNvbmVPdXRlckFuZ2xlOwor
ICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgY29uZU91dGVyR2FpbjsKKworICAgICAgICAvLyBEeW5h
bWljYWxseSBjYWxjdWxhdGVkIGdhaW4gdmFsdWVzICAgICAgICAgIAorICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgQXVkaW9HYWluIGNvbmVHYWluOworICAgICAgICByZWFkb25seSBhdHRyaWJ1
dGUgQXVkaW9HYWluIGRpc3RhbmNlR2FpbjsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uY3BwCShyZXZpc2lvbiAxMTE0MzMp
CShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uY3BwOjExMTQzMykKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiQXVkaW9QYXJhbS5oIgorCisjaW5jbHVk
ZSAiQXVkaW9Ob2RlLmgiCisjaW5jbHVkZSAiQXVkaW9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJG
bG9hdENvbnZlcnNpb24uaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NvbnN0IGRvdWJsZSBBdWRpb1BhcmFtOjpEZWZhdWx0U21vb3RoaW5n
Q29uc3RhbnQgPSAwLjA1OworY29uc3QgZG91YmxlIEF1ZGlvUGFyYW06OlNuYXBUaHJlc2hvbGQg
PSAwLjAwMTsKKworZmxvYXQgQXVkaW9QYXJhbTo6dmFsdWUoKQoreworICAgIC8vIFVwZGF0ZSB2
YWx1ZSBmb3IgdGltZWxpbmUuCisgICAgaWYgKGNvbnRleHQoKSAmJiBjb250ZXh0KCktPmlzQXVk
aW9UaHJlYWQoKSkgeworICAgICAgICBib29sIGhhc1ZhbHVlOworICAgICAgICBmbG9hdCB0aW1l
bGluZVZhbHVlID0gbV90aW1lbGluZS52YWx1ZUZvckNvbnRleHRUaW1lKGNvbnRleHQoKSwgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdChtX3ZhbHVlKSwgaGFzVmFsdWUpOworCisgICAgICAgIGlmICho
YXNWYWx1ZSkKKyAgICAgICAgICAgIG1fdmFsdWUgPSB0aW1lbGluZVZhbHVlOworICAgIH0KKwor
ICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KG1fdmFsdWUpOworfQorCit2b2lkIEF1
ZGlvUGFyYW06OnNldFZhbHVlKGZsb2F0IHZhbHVlKQoreworICAgIC8vIENoZWNrIGFnYWluc3Qg
SmF2YVNjcmlwdCBnaXZpbmcgdXMgYm9ndXMgZmxvYXRpbmctcG9pbnQgdmFsdWVzLgorICAgIC8v
IERvbid0IEFTU0VSVCwgc2luY2UgdGhpcyBjYW4gaGFwcGVuIGlmIHNvbWVib2R5IHdyaXRlcyBi
YWQgSlMuCisgICAgaWYgKCFpc25hbih2YWx1ZSkgJiYgIWlzaW5mKHZhbHVlKSkKKyAgICAgICAg
bV92YWx1ZSA9IHZhbHVlOworfQorCitmbG9hdCBBdWRpb1BhcmFtOjpzbW9vdGhlZFZhbHVlKCkK
K3sKKyAgICByZXR1cm4gbmFycm93UHJlY2lzaW9uVG9GbG9hdChtX3Ntb290aGVkVmFsdWUpOwor
fQorCitib29sIEF1ZGlvUGFyYW06OnNtb290aCgpCit7CisgICAgLy8gSWYgdmFsdWVzIGhhdmUg
YmVlbiBleHBsaWNpdGx5IHNjaGVkdWxlZCBvbiB0aGUgdGltZWxpbmUsIHRoZW4gdXNlIHRoZSBl
eGFjdCB2YWx1ZS4KKyAgICAvLyBTbW9vdGhpbmcgZWZmZWN0aXZlbHkgaXMgcGVyZm9ybWVkIGJ5
IHRoZSB0aW1lbGluZS4KKyAgICBib29sIHVzZVRpbWVsaW5lVmFsdWUgPSBmYWxzZTsKKyAgICBp
ZiAoY29udGV4dCgpKQorICAgICAgICBtX3ZhbHVlID0gbV90aW1lbGluZS52YWx1ZUZvckNvbnRl
eHRUaW1lKGNvbnRleHQoKSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChtX3ZhbHVlKSwgdXNlVGlt
ZWxpbmVWYWx1ZSk7CisgICAgCisgICAgaWYgKG1fc21vb3RoZWRWYWx1ZSA9PSBtX3ZhbHVlKSB7
CisgICAgICAgIC8vIFNtb290aGVkIHZhbHVlIGhhcyBhbHJlYWR5IGFwcHJvYWNoZWQgYW5kIHNu
YXBwZWQgdG8gdmFsdWUuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBp
ZiAodXNlVGltZWxpbmVWYWx1ZSkKKyAgICAgICAgbV9zbW9vdGhlZFZhbHVlID0gbV92YWx1ZTsK
KyAgICBlbHNlIHsKKyAgICAgICAgLy8gRGV6aXBwZXIgLSBleHBvbmVudGlhbCBhcHByb2FjaC4K
KyAgICAgICAgbV9zbW9vdGhlZFZhbHVlICs9IChtX3ZhbHVlIC0gbV9zbW9vdGhlZFZhbHVlKSAq
IG1fc21vb3RoaW5nQ29uc3RhbnQ7CisKKyAgICAgICAgLy8gSWYgd2UgZ2V0IGNsb3NlIGVub3Vn
aCB0aGVuIHNuYXAgdG8gYWN0dWFsIHZhbHVlLgorICAgICAgICBpZiAoZmFicyhtX3Ntb290aGVk
VmFsdWUgLSBtX3ZhbHVlKSA8IFNuYXBUaHJlc2hvbGQpIC8vIEZJWE1FOiB0aGUgdGhyZXNob2xk
IG5lZWRzIHRvIGJlIGFkanVzdGFibGUgZGVwZW5kaW5nIG9uIHJhbmdlIC0gYnV0IHRoaXMgaXMg
T0sgZ2VuZXJhbCBwdXJwb3NlIHZhbHVlLgorICAgICAgICAgICAgbV9zbW9vdGhlZFZhbHVlID0g
bV92YWx1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQXVkaW9QYXJh
bTo6Y2FsY3VsYXRlU2FtcGxlQWNjdXJhdGVWYWx1ZXMoZmxvYXQqIHZhbHVlcywgdW5zaWduZWQg
bnVtYmVyT2ZWYWx1ZXMpCit7CisgICAgYm9vbCBpc1NhZmUgPSBjb250ZXh0KCkgJiYgY29udGV4
dCgpLT5pc0F1ZGlvVGhyZWFkKCkgJiYgdmFsdWVzOworICAgIEFTU0VSVChpc1NhZmUpOworICAg
IGlmICghaXNTYWZlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDYWxjdWxhdGUgdmFsdWVz
IGZvciB0aGlzIHJlbmRlciBxdWFudHVtLgorICAgIC8vIE5vcm1hbGx5IG51bWJlck9mVmFsdWVz
IHdpbGwgZXF1YWwgQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVzICh0aGUgcmVuZGVy
IHF1YW50dW0gc2l6ZSkuCisgICAgZmxvYXQgc2FtcGxlUmF0ZSA9IGNvbnRleHQoKS0+c2FtcGxl
UmF0ZSgpOworICAgIGZsb2F0IHN0YXJ0VGltZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29u
dGV4dCgpLT5jdXJyZW50VGltZSgpKTsKKyAgICBmbG9hdCBlbmRUaW1lID0gc3RhcnRUaW1lICsg
bnVtYmVyT2ZWYWx1ZXMgLyBzYW1wbGVSYXRlOworCisgICAgLy8gTm90ZSB3ZSdyZSBydW5uaW5n
IGNvbnRyb2wgcmF0ZSBhdCB0aGUgc2FtcGxlLXJhdGUuCisgICAgLy8gUGFzcyBpbiB0aGUgY3Vy
cmVudCB2YWx1ZSBhcyBkZWZhdWx0IHZhbHVlLgorICAgIG1fdmFsdWUgPSBtX3RpbWVsaW5lLnZh
bHVlc0ZvclRpbWVSYW5nZShzdGFydFRpbWUsIGVuZFRpbWUsIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQobV92YWx1ZSksIHZhbHVlcywgbnVtYmVyT2ZWYWx1ZXMsIHNhbXBsZVJhdGUsIHNhbXBsZVJh
dGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
X0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Bh
cmFtLmgJKHJldmlzaW9uIDExMTQzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9QYXJhbS5oOjExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9QYXJhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBdWRp
b1BhcmFtX2gKKyNkZWZpbmUgQXVkaW9QYXJhbV9oCisKKyNpbmNsdWRlICJBdWRpb0NvbnRleHQu
aCIKKyNpbmNsdWRlICJBdWRpb1BhcmFtVGltZWxpbmUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9GbG9hdDMyQXJy
YXkuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9QYXJhbSA6IHB1Ymxp
YyBSZWZDb3VudGVkPEF1ZGlvUGFyYW0+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgZG91
YmxlIERlZmF1bHRTbW9vdGhpbmdDb25zdGFudDsKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIFNu
YXBUaHJlc2hvbGQ7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb1BhcmFtPiBjcmVhdGUo
Y29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUgZGVmYXVsdFZhbHVlLCBkb3VibGUgbWluVmFsdWUs
IGRvdWJsZSBtYXhWYWx1ZSwgdW5zaWduZWQgdW5pdHMgPSAwKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBBdWRpb1BhcmFtKG5hbWUsIGRlZmF1bHRWYWx1ZSwgbWluVmFsdWUs
IG1heFZhbHVlLCB1bml0cykpOworICAgIH0KKworICAgIEF1ZGlvUGFyYW0oY29uc3QgU3RyaW5n
JiBuYW1lLCBkb3VibGUgZGVmYXVsdFZhbHVlLCBkb3VibGUgbWluVmFsdWUsIGRvdWJsZSBtYXhW
YWx1ZSwgdW5zaWduZWQgdW5pdHMgPSAwKQorICAgICAgICA6IG1fbmFtZShuYW1lKQorICAgICAg
ICAsIG1fdmFsdWUoZGVmYXVsdFZhbHVlKQorICAgICAgICAsIG1fZGVmYXVsdFZhbHVlKGRlZmF1
bHRWYWx1ZSkKKyAgICAgICAgLCBtX21pblZhbHVlKG1pblZhbHVlKQorICAgICAgICAsIG1fbWF4
VmFsdWUobWF4VmFsdWUpCisgICAgICAgICwgbV91bml0cyh1bml0cykKKyAgICAgICAgLCBtX3Nt
b290aGVkVmFsdWUoZGVmYXVsdFZhbHVlKQorICAgICAgICAsIG1fc21vb3RoaW5nQ29uc3RhbnQo
RGVmYXVsdFNtb290aGluZ0NvbnN0YW50KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBz
ZXRDb250ZXh0KEF1ZGlvQ29udGV4dCogY29udGV4dCkgeyBtX2NvbnRleHQgPSBjb250ZXh0OyB9
CisgICAgQXVkaW9Db250ZXh0KiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9
CisKKyAgICBmbG9hdCB2YWx1ZSgpOworICAgIAorICAgIHZvaWQgc2V0VmFsdWUoZmxvYXQpOwor
CisgICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKworICAgIGZsb2F0
IG1pblZhbHVlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWluVmFsdWUp
OyB9CisgICAgZmxvYXQgbWF4VmFsdWUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9h
dD4obV9tYXhWYWx1ZSk7IH0KKyAgICBmbG9hdCBkZWZhdWx0VmFsdWUoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4obV9kZWZhdWx0VmFsdWUpOyB9CisgICAgdW5zaWduZWQgdW5p
dHMoKSBjb25zdCB7IHJldHVybiBtX3VuaXRzOyB9CisKKyAgICAvLyBWYWx1ZSBzbW9vdGhpbmc6
CisKKyAgICAvLyBXaGVuIGEgbmV3IHZhbHVlIGlzIHNldCB3aXRoIHNldFZhbHVlKCksIGluIG91
ciBpbnRlcm5hbCB1c2Ugb2YgdGhlIHBhcmFtZXRlciB3ZSBkb24ndCBpbW1lZGlhdGVseSBqdW1w
IHRvIGl0LgorICAgIC8vIEluc3RlYWQgd2Ugc21vb3RobHkgYXBwcm9hY2ggdGhpcyB2YWx1ZSB0
byBhdm9pZCBnbGl0Y2hpbmcuCisgICAgZmxvYXQgc21vb3RoZWRWYWx1ZSgpOworCisgICAgLy8g
U21vb3RobHkgZXhwb25lbnRpYWxseSBhcHByb2FjaGVzIHRvIChkZS16aXBwZXJzKSB0aGUgZGVz
aXJlZCB2YWx1ZS4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgc21vb3RoZWQgdmFsdWUgaGFzIGFs
cmVhZHkgc25hcHBlZCBleGFjdGx5IHRvIHZhbHVlLgorICAgIGJvb2wgc21vb3RoKCk7CisKKyAg
ICB2b2lkIHJlc2V0U21vb3RoZWRWYWx1ZSgpIHsgbV9zbW9vdGhlZFZhbHVlID0gbV92YWx1ZTsg
fQorICAgIHZvaWQgc2V0U21vb3RoaW5nQ29uc3RhbnQoZG91YmxlIGspIHsgbV9zbW9vdGhpbmdD
b25zdGFudCA9IGs7IH0KKworICAgIC8vIFBhcmFtZXRlciBhdXRvbWF0aW9uLiAgICAKKyAgICB2
b2lkIHNldFZhbHVlQXRUaW1lKGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1lKSB7IG1fdGltZWxpbmUu
c2V0VmFsdWVBdFRpbWUodmFsdWUsIHRpbWUpOyB9CisgICAgdm9pZCBsaW5lYXJSYW1wVG9WYWx1
ZUF0VGltZShmbG9hdCB2YWx1ZSwgZmxvYXQgdGltZSkgeyBtX3RpbWVsaW5lLmxpbmVhclJhbXBU
b1ZhbHVlQXRUaW1lKHZhbHVlLCB0aW1lKTsgfQorICAgIHZvaWQgZXhwb25lbnRpYWxSYW1wVG9W
YWx1ZUF0VGltZShmbG9hdCB2YWx1ZSwgZmxvYXQgdGltZSkgeyBtX3RpbWVsaW5lLmV4cG9uZW50
aWFsUmFtcFRvVmFsdWVBdFRpbWUodmFsdWUsIHRpbWUpOyB9CisgICAgdm9pZCBzZXRUYXJnZXRW
YWx1ZUF0VGltZShmbG9hdCB0YXJnZXRWYWx1ZSwgZmxvYXQgdGltZSwgZmxvYXQgdGltZUNvbnN0
YW50KSB7IG1fdGltZWxpbmUuc2V0VGFyZ2V0VmFsdWVBdFRpbWUodGFyZ2V0VmFsdWUsIHRpbWUs
IHRpbWVDb25zdGFudCk7IH0KKyAgICB2b2lkIHNldFZhbHVlQ3VydmVBdFRpbWUoRmxvYXQzMkFy
cmF5KiBjdXJ2ZSwgZmxvYXQgdGltZSwgZmxvYXQgZHVyYXRpb24pIHsgbV90aW1lbGluZS5zZXRW
YWx1ZUN1cnZlQXRUaW1lKGN1cnZlLCB0aW1lLCBkdXJhdGlvbik7IH0KKyAgICB2b2lkIGNhbmNl
bFNjaGVkdWxlZFZhbHVlcyhmbG9hdCBzdGFydFRpbWUpIHsgbV90aW1lbGluZS5jYW5jZWxTY2hl
ZHVsZWRWYWx1ZXMoc3RhcnRUaW1lKTsgfQorCisgICAgYm9vbCBoYXNUaW1lbGluZVZhbHVlcygp
IHsgcmV0dXJuIG1fdGltZWxpbmUuaGFzVmFsdWVzKCk7IH0KKyAgICAKKyAgICAvLyBDYWxjdWxh
dGVzIG51bWJlck9mVmFsdWVzIHBhcmFtZXRlciB2YWx1ZXMgc3RhcnRpbmcgYXQgdGhlIGNvbnRl
eHQncyBjdXJyZW50IHRpbWUuCisgICAgLy8gTXVzdCBiZSBjYWxsZWQgaW4gdGhlIGNvbnRleHQn
cyByZW5kZXIgdGhyZWFkLgorICAgIHZvaWQgY2FsY3VsYXRlU2FtcGxlQWNjdXJhdGVWYWx1ZXMo
ZmxvYXQqIHZhbHVlcywgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMpOworCitwcml2YXRlOgorICAg
IFJlZlB0cjxBdWRpb0NvbnRleHQ+IG1fY29udGV4dDsKKyAgICBTdHJpbmcgbV9uYW1lOworICAg
IGRvdWJsZSBtX3ZhbHVlOworICAgIGRvdWJsZSBtX2RlZmF1bHRWYWx1ZTsKKyAgICBkb3VibGUg
bV9taW5WYWx1ZTsKKyAgICBkb3VibGUgbV9tYXhWYWx1ZTsKKyAgICB1bnNpZ25lZCBtX3VuaXRz
OworCisgICAgLy8gU21vb3RoaW5nIChkZS16aXBwZXJpbmcpCisgICAgZG91YmxlIG1fc21vb3Ro
ZWRWYWx1ZTsKKyAgICBkb3VibGUgbV9zbW9vdGhpbmdDb25zdGFudDsKKyAgICAKKyAgICBBdWRp
b1BhcmFtVGltZWxpbmUgbV90aW1lbGluZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEF1ZGlvUGFyYW1faApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb1BhcmFtLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uaWRsCShyZXZpc2lvbiAxMTE0MzMpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uaWRsOjExMTQzMykKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKK21vZHVsZSB3ZWJhdWRpbyB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAg
Q29uZGl0aW9uYWw9V0VCX0FVRElPCisgICAgXSBBdWRpb1BhcmFtIHsKKyAgICAgICAgYXR0cmli
dXRlIGZsb2F0IHZhbHVlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgZmxvYXQgbWluVmFs
dWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBmbG9hdCBtYXhWYWx1ZTsKKyAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0IGRlZmF1bHRWYWx1ZTsKKworICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7CisKKyAgICAgICAgLy8gRklYTUU6IENvdWxkIGRl
ZmluZSB1bml0cyBjb25zdGFudHMgaGVyZSAoc2Vjb25kcywgZGVjaWJlbHMsIGNlbnRzLCBldGMu
KS4uLgorICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgdW5pdHM7CisK
KyAgICAgICAgLy8gUGFyYW1ldGVyIGF1dG9tYXRpb24uCisgICAgICAgIHZvaWQgc2V0VmFsdWVB
dFRpbWUoaW4gZmxvYXQgdmFsdWUsIGluIGZsb2F0IHRpbWUpOworICAgICAgICB2b2lkIGxpbmVh
clJhbXBUb1ZhbHVlQXRUaW1lKGluIGZsb2F0IHZhbHVlLCBpbiBmbG9hdCB0aW1lKTsKKyAgICAg
ICAgdm9pZCBleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKGluIGZsb2F0IHZhbHVlLCBpbiBm
bG9hdCB0aW1lKTsKKworICAgICAgICAvLyBFeHBvbmVudGlhbGx5IGFwcHJvYWNoIHRoZSB0YXJn
ZXQgdmFsdWUgd2l0aCBhIHJhdGUgaGF2aW5nIHRoZSBnaXZlbiB0aW1lIGNvbnN0YW50LgorICAg
ICAgICB2b2lkIHNldFRhcmdldFZhbHVlQXRUaW1lKGluIGZsb2F0IHRhcmdldFZhbHVlLCBpbiBm
bG9hdCB0aW1lLCBpbiBmbG9hdCB0aW1lQ29uc3RhbnQpOworCisgICAgICAgIC8vIFNldHMgYW4g
YXJyYXkgb2YgYXJiaXRyYXJ5IHBhcmFtZXRlciB2YWx1ZXMgc3RhcnRpbmcgYXQgdGltZSBmb3Ig
dGhlIGdpdmVuIGR1cmF0aW9uLgorICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIHZhbHVlcyB3aWxs
IGJlIHNjYWxlZCB0byBmaXQgaW50byB0aGUgZGVzaXJlZCBkdXJhdGlvbi4KKyAgICAgICAgdm9p
ZCBzZXRWYWx1ZUN1cnZlQXRUaW1lKGluIEZsb2F0MzJBcnJheSB2YWx1ZXMsIGluIGZsb2F0IHRp
bWUsIGluIGZsb2F0IGR1cmF0aW9uKTsKKworICAgICAgICAvLyBDYW5jZWxzIGFsbCBzY2hlZHVs
ZWQgcGFyYW1ldGVyIGNoYW5nZXMgd2l0aCB0aW1lcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8g
c3RhcnRUaW1lLgorICAgICAgICB2b2lkIGNhbmNlbFNjaGVkdWxlZFZhbHVlcyhpbiBmbG9hdCBz
dGFydFRpbWUpOworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3BwCShyZXZpc2lvbiAxMTE0MzMp
CShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5jcHA6MTEx
NDMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxp
bmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzY5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkF1ZGlvUGFy
YW1UaW1lbGluZS5oIgorCisjaW5jbHVkZSAiQXVkaW9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJG
bG9hdENvbnZlcnNpb24uaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit2b2lkIEF1ZGlvUGFyYW1UaW1lbGluZTo6c2V0VmFsdWVBdFRpbWUoZmxvYXQgdmFsdWUs
IGZsb2F0IHRpbWUpCit7CisgICAgaW5zZXJ0RXZlbnQoUGFyYW1FdmVudChQYXJhbUV2ZW50OjpT
ZXRWYWx1ZSwgdmFsdWUsIHRpbWUsIDAsIDAsIDApKTsKK30KKwordm9pZCBBdWRpb1BhcmFtVGlt
ZWxpbmU6OmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1lKQor
eworICAgIGluc2VydEV2ZW50KFBhcmFtRXZlbnQoUGFyYW1FdmVudDo6TGluZWFyUmFtcFRvVmFs
dWUsIHZhbHVlLCB0aW1lLCAwLCAwLCAwKSk7Cit9CisKK3ZvaWQgQXVkaW9QYXJhbVRpbWVsaW5l
OjpleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1lKQor
eworICAgIGluc2VydEV2ZW50KFBhcmFtRXZlbnQoUGFyYW1FdmVudDo6RXhwb25lbnRpYWxSYW1w
VG9WYWx1ZSwgdmFsdWUsIHRpbWUsIDAsIDAsIDApKTsKK30KKwordm9pZCBBdWRpb1BhcmFtVGlt
ZWxpbmU6OnNldFRhcmdldFZhbHVlQXRUaW1lKGZsb2F0IHRhcmdldFZhbHVlLCBmbG9hdCB0aW1l
LCBmbG9hdCB0aW1lQ29uc3RhbnQpCit7CisgICAgaW5zZXJ0RXZlbnQoUGFyYW1FdmVudChQYXJh
bUV2ZW50OjpTZXRUYXJnZXRWYWx1ZSwgdGFyZ2V0VmFsdWUsIHRpbWUsIHRpbWVDb25zdGFudCwg
MCwgMCkpOworfQorCit2b2lkIEF1ZGlvUGFyYW1UaW1lbGluZTo6c2V0VmFsdWVDdXJ2ZUF0VGlt
ZShGbG9hdDMyQXJyYXkqIGN1cnZlLCBmbG9hdCB0aW1lLCBmbG9hdCBkdXJhdGlvbikKK3sKKyAg
ICBpbnNlcnRFdmVudChQYXJhbUV2ZW50KFBhcmFtRXZlbnQ6OlNldFZhbHVlQ3VydmUsIDAsIHRp
bWUsIDAsIGR1cmF0aW9uLCBjdXJ2ZSkpOworfQorCitzdGF0aWMgYm9vbCBpc1ZhbGlkTnVtYmVy
KGZsb2F0IHgpCit7CisgICAgcmV0dXJuICFpc25hbih4KSAmJiAhaXNpbmYoeCk7Cit9CisKK3Zv
aWQgQXVkaW9QYXJhbVRpbWVsaW5lOjppbnNlcnRFdmVudChjb25zdCBQYXJhbUV2ZW50JiBldmVu
dCkKK3sKKyAgICAvLyBTYW5pdHkgY2hlY2sgdGhlIGV2ZW50LiBCZSBzdXBlciBjYXJlZnVsIHdl
J3JlIG5vdCBnZXR0aW5nIGluZmVjdGVkIHdpdGggTmFOIG9yIEluZi4KKyAgICBib29sIGlzVmFs
aWQgPSBldmVudC50eXBlKCkgPCBQYXJhbUV2ZW50OjpMYXN0VHlwZQorICAgICAgICAmJiBpc1Zh
bGlkTnVtYmVyKGV2ZW50LnZhbHVlKCkpCisgICAgICAgICYmIGlzVmFsaWROdW1iZXIoZXZlbnQu
dGltZSgpKQorICAgICAgICAmJiBpc1ZhbGlkTnVtYmVyKGV2ZW50LnRpbWVDb25zdGFudCgpKQor
ICAgICAgICAmJiBpc1ZhbGlkTnVtYmVyKGV2ZW50LmR1cmF0aW9uKCkpCisgICAgICAgICYmIGV2
ZW50LmR1cmF0aW9uKCkgPj0gMDsKKworICAgIEFTU0VSVChpc1ZhbGlkKTsKKyAgICBpZiAoIWlz
VmFsaWQpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fZXZlbnRzTG9jayk7CisgICAgCisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgZmxvYXQgaW5z
ZXJ0VGltZSA9IGV2ZW50LnRpbWUoKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbV9ldmVudHMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgLy8gT3ZlcndyaXRlIHNhbWUgZXZlbnQgdHlwZSBhbmQgdGlt
ZS4KKyAgICAgICAgaWYgKG1fZXZlbnRzW2ldLnRpbWUoKSA9PSBpbnNlcnRUaW1lICYmIG1fZXZl
bnRzW2ldLnR5cGUoKSA9PSBldmVudC50eXBlKCkpIHsKKyAgICAgICAgICAgIG1fZXZlbnRzW2ld
ID0gZXZlbnQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bV9ldmVudHNbaV0udGltZSgpID4gaW5zZXJ0VGltZSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIG1fZXZlbnRzLmluc2VydChpLCBldmVudCk7Cit9CisKK3ZvaWQgQXVkaW9QYXJh
bVRpbWVsaW5lOjpjYW5jZWxTY2hlZHVsZWRWYWx1ZXMoZmxvYXQgc3RhcnRUaW1lKQoreworICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50c0xvY2spOworCisgICAgLy8gUmVtb3ZlIGFsbCBl
dmVudHMgc3RhcnRpbmcgYXQgc3RhcnRUaW1lLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2V2ZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9ldmVudHNbaV0udGltZSgp
ID49IHN0YXJ0VGltZSkgeworICAgICAgICAgICAgbV9ldmVudHMucmVtb3ZlKGksIG1fZXZlbnRz
LnNpemUoKSAtIGkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K2Zsb2F0IEF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVGb3JDb250ZXh0VGltZShBdWRpb0NvbnRl
eHQqIGNvbnRleHQsIGZsb2F0IGRlZmF1bHRWYWx1ZSwgYm9vbCYgaGFzVmFsdWUpCit7CisgICAg
QVNTRVJUKGNvbnRleHQpOworCisgICAgaWYgKCFjb250ZXh0IHx8ICFtX2V2ZW50cy5zaXplKCkg
fHwgY29udGV4dC0+Y3VycmVudFRpbWUoKSA8IG1fZXZlbnRzWzBdLnRpbWUoKSkgeworICAgICAg
ICBoYXNWYWx1ZSA9IGZhbHNlOworICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOworICAgIH0K
KworICAgIC8vIEFzayBmb3IganVzdCBhIHNpbmdsZSB2YWx1ZS4KKyAgICBmbG9hdCB2YWx1ZTsK
KyAgICBmbG9hdCBzYW1wbGVSYXRlID0gY29udGV4dC0+c2FtcGxlUmF0ZSgpOworICAgIGZsb2F0
IHN0YXJ0VGltZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29udGV4dC0+Y3VycmVudFRpbWUo
KSk7CisgICAgZmxvYXQgZW5kVGltZSA9IHN0YXJ0VGltZSArIDEuMWYgLyBzYW1wbGVSYXRlOyAv
LyB0aW1lIGp1c3QgYmV5b25kIG9uZSBzYW1wbGUtZnJhbWUKKyAgICBmbG9hdCBjb250cm9sUmF0
ZSA9IHNhbXBsZVJhdGUgLyBBdWRpb05vZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXM7IC8vIG9u
ZSBwYXJhbWV0ZXIgY2hhbmdlIHBlciByZW5kZXIgcXVhbnR1bQorICAgIHZhbHVlID0gdmFsdWVz
Rm9yVGltZVJhbmdlKHN0YXJ0VGltZSwgZW5kVGltZSwgZGVmYXVsdFZhbHVlLCAmdmFsdWUsIDEs
IHNhbXBsZVJhdGUsIGNvbnRyb2xSYXRlKTsKKworICAgIGhhc1ZhbHVlID0gdHJ1ZTsKKyAgICBy
ZXR1cm4gdmFsdWU7Cit9CisKK2Zsb2F0IEF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVzRm9yVGlt
ZVJhbmdlKGZsb2F0IHN0YXJ0VGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZsb2F0IGVuZFRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmbG9hdCBkZWZhdWx0VmFsdWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCogdmFsdWVzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBzYW1wbGVS
YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQg
Y29udHJvbFJhdGUpCit7CisgICAgLy8gV2UgY2FuJ3QgY29udGVuZCB0aGUgbG9jayBpbiB0aGUg
cmVhbHRpbWUgYXVkaW8gdGhyZWFkLgorICAgIGlmICghbV9ldmVudHNMb2NrLnRyeUxvY2soKSkg
eworICAgICAgICBpZiAodmFsdWVzKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtYmVyT2ZWYWx1ZXM7ICsraSkKKyAgICAgICAgICAgICAgICB2YWx1ZXNbaV0gPSBk
ZWZhdWx0VmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKKyAg
ICB9CisKKyAgICBmbG9hdCB2YWx1ZSA9IHZhbHVlc0ZvclRpbWVSYW5nZUltcGwoc3RhcnRUaW1l
LCBlbmRUaW1lLCBkZWZhdWx0VmFsdWUsIHZhbHVlcywgbnVtYmVyT2ZWYWx1ZXMsIHNhbXBsZVJh
dGUsIGNvbnRyb2xSYXRlKTsKKyAgICBtX2V2ZW50c0xvY2sudW5sb2NrKCk7CisKKyAgICByZXR1
cm4gdmFsdWU7Cit9CisKK2Zsb2F0IEF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVzRm9yVGltZVJh
bmdlSW1wbChmbG9hdCBzdGFydFRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmxvYXQgZW5kVGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBkZWZhdWx0VmFsdWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIHZhbHVlcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBu
dW1iZXJPZlZhbHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmbG9hdCBzYW1wbGVSYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0IGNvbnRyb2xSYXRlKQoreworICAgIEFTU0VSVCh2YWx1
ZXMpOworICAgIGlmICghdmFsdWVzKQorICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOworCisg
ICAgLy8gUmV0dXJuIGRlZmF1bHQgdmFsdWUgaWYgdGhlcmUgYXJlIG5vIGV2ZW50cyBtYXRjaGlu
ZyB0aGUgZGVzaXJlZCB0aW1lIHJhbmdlLgorICAgIEFTU0VSVChtX2V2ZW50cy5zaXplKCkpOwor
ICAgIGlmICghbV9ldmVudHMuc2l6ZSgpIHx8IGVuZFRpbWUgPD0gbV9ldmVudHNbMF0udGltZSgp
KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZlZhbHVlczsgKytp
KQorICAgICAgICAgICAgdmFsdWVzW2ldID0gZGVmYXVsdFZhbHVlOworICAgICAgICByZXR1cm4g
ZGVmYXVsdFZhbHVlOworICAgIH0KKworICAgIC8vIE1haW50YWluIGEgcnVubmluZyB0aW1lIGFu
ZCBpbmRleCBmb3Igd3JpdGluZyB0aGUgdmFsdWVzIGJ1ZmZlci4KKyAgICBmbG9hdCBjdXJyZW50
VGltZSA9IHN0YXJ0VGltZTsKKyAgICB1bnNpZ25lZCB3cml0ZUluZGV4ID0gMDsKKworICAgIC8v
IElmIGZpcnN0IGV2ZW50IGlzIGFmdGVyIHN0YXJ0VGltZSB0aGVuIGZpbGwgaW5pdGlhbCBwYXJ0
IG9mIHZhbHVlcyBidWZmZXIgd2l0aCBkZWZhdWx0VmFsdWUKKyAgICAvLyB1bnRpbCB3ZSByZWFj
aCB0aGUgZmlyc3QgZXZlbnQgdGltZS4KKyAgICBmbG9hdCBmaXJzdEV2ZW50VGltZSA9IG1fZXZl
bnRzWzBdLnRpbWUoKTsKKyAgICBpZiAoZmlyc3RFdmVudFRpbWUgPiBzdGFydFRpbWUpIHsKKyAg
ICAgICAgZmxvYXQgZmlsbFRvVGltZSA9IG1pbihlbmRUaW1lLCBmaXJzdEV2ZW50VGltZSk7Cisg
ICAgICAgIHVuc2lnbmVkIGZpbGxUb0ZyYW1lID0gQXVkaW9VdGlsaXRpZXM6OnRpbWVUb1NhbXBs
ZUZyYW1lKGZpbGxUb1RpbWUgLSBzdGFydFRpbWUsIHNhbXBsZVJhdGUpOworICAgICAgICBmaWxs
VG9GcmFtZSA9IG1pbihmaWxsVG9GcmFtZSwgbnVtYmVyT2ZWYWx1ZXMpOworICAgICAgICBmb3Ig
KDsgd3JpdGVJbmRleCA8IGZpbGxUb0ZyYW1lOyArK3dyaXRlSW5kZXgpCisgICAgICAgICAgICB2
YWx1ZXNbd3JpdGVJbmRleF0gPSBkZWZhdWx0VmFsdWU7CisKKyAgICAgICAgY3VycmVudFRpbWUg
PSBmaWxsVG9UaW1lOworICAgIH0KKworICAgIGZsb2F0IHZhbHVlID0gZGVmYXVsdFZhbHVlOwor
CisgICAgLy8gR28gdGhyb3VnaCBlYWNoIGV2ZW50IGFuZCByZW5kZXIgdGhlIHZhbHVlIGJ1ZmZl
ciB3aGVyZSB0aGUgdGltZXMgb3ZlcmxhcCwKKyAgICAvLyBzdG9wcGluZyB3aGVuIHdlJ3ZlIHJl
bmRlcmVkIGFsbCB0aGUgcmVxdWVzdGVkIHZhbHVlcy4KKyAgICAvLyBGSVhNRTogY291bGQgdHJ5
IHRvIG9wdGltaXplIGJ5IGF2b2lkaW5nIGhhdmluZyB0byBpdGVyYXRlIHN0YXJ0aW5nIGZyb20g
dGhlIHZlcnkgZmlyc3QgZXZlbnQKKyAgICAvLyBhbmQga2VlcGluZyB0cmFjayBvZiBhICJjdXJy
ZW50IiBldmVudCBpbmRleC4KKyAgICBpbnQgbiA9IG1fZXZlbnRzLnNpemUoKTsKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG4gJiYgd3JpdGVJbmRleCA8IG51bWJlck9mVmFsdWVzOyArK2kpIHsK
KyAgICAgICAgUGFyYW1FdmVudCYgZXZlbnQgPSBtX2V2ZW50c1tpXTsKKyAgICAgICAgUGFyYW1F
dmVudCogbmV4dEV2ZW50ID0gaSA8IG4gLSAxID8gJihtX2V2ZW50c1tpICsgMV0pIDogMDsKKwor
ICAgICAgICAvLyBXYWl0IHVudGlsIHdlIGdldCBhIG1vcmUgcmVjZW50IGV2ZW50LgorICAgICAg
ICBpZiAobmV4dEV2ZW50ICYmIG5leHRFdmVudC0+dGltZSgpIDwgY3VycmVudFRpbWUpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBmbG9hdCB2YWx1ZTEgPSBldmVudC52YWx1ZSgp
OworICAgICAgICBmbG9hdCB0aW1lMSA9IGV2ZW50LnRpbWUoKTsKKyAgICAgICAgZmxvYXQgdmFs
dWUyID0gbmV4dEV2ZW50ID8gbmV4dEV2ZW50LT52YWx1ZSgpIDogdmFsdWUxOworICAgICAgICBm
bG9hdCB0aW1lMiA9IG5leHRFdmVudCA/IG5leHRFdmVudC0+dGltZSgpIDogZW5kVGltZSArIDE7
CisKKyAgICAgICAgZmxvYXQgZGVsdGFUaW1lID0gdGltZTIgLSB0aW1lMTsKKyAgICAgICAgZmxv
YXQgayA9IGRlbHRhVGltZSA+IDAgPyAxIC8gZGVsdGFUaW1lIDogMDsKKyAgICAgICAgZmxvYXQg
c2FtcGxlRnJhbWVUaW1lSW5jciA9IDEgLyBzYW1wbGVSYXRlOworCisgICAgICAgIGZsb2F0IGZp
bGxUb1RpbWUgPSBtaW4oZW5kVGltZSwgdGltZTIpOworICAgICAgICB1bnNpZ25lZCBmaWxsVG9G
cmFtZSA9IEF1ZGlvVXRpbGl0aWVzOjp0aW1lVG9TYW1wbGVGcmFtZShmaWxsVG9UaW1lIC0gc3Rh
cnRUaW1lLCBzYW1wbGVSYXRlKTsKKyAgICAgICAgZmlsbFRvRnJhbWUgPSBtaW4oZmlsbFRvRnJh
bWUsIG51bWJlck9mVmFsdWVzKTsKKworICAgICAgICBQYXJhbUV2ZW50OjpUeXBlIG5leHRFdmVu
dFR5cGUgPSBuZXh0RXZlbnQgPyBzdGF0aWNfY2FzdDxQYXJhbUV2ZW50OjpUeXBlPihuZXh0RXZl
bnQtPnR5cGUoKSkgOiBQYXJhbUV2ZW50OjpMYXN0VHlwZSAvKiB1bmtub3duICovOworCisgICAg
ICAgIC8vIEZpcnN0IGhhbmRsZSBsaW5lYXIgYW5kIGV4cG9uZW50aWFsIHJhbXBzIHdoaWNoIHJl
cXVpcmUgbG9va2luZyBhaGVhZCB0byB0aGUgbmV4dCBldmVudC4KKyAgICAgICAgaWYgKG5leHRF
dmVudFR5cGUgPT0gUGFyYW1FdmVudDo6TGluZWFyUmFtcFRvVmFsdWUpIHsKKyAgICAgICAgICAg
IGZvciAoOyB3cml0ZUluZGV4IDwgZmlsbFRvRnJhbWU7ICsrd3JpdGVJbmRleCkgeworICAgICAg
ICAgICAgICAgIGZsb2F0IHggPSAoY3VycmVudFRpbWUgLSB0aW1lMSkgKiBrOworICAgICAgICAg
ICAgICAgIHZhbHVlID0gKDEgLSB4KSAqIHZhbHVlMSArIHggKiB2YWx1ZTI7CisgICAgICAgICAg
ICAgICAgdmFsdWVzW3dyaXRlSW5kZXhdID0gdmFsdWU7CisgICAgICAgICAgICAgICAgY3VycmVu
dFRpbWUgKz0gc2FtcGxlRnJhbWVUaW1lSW5jcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmIChuZXh0RXZlbnRUeXBlID09IFBhcmFtRXZlbnQ6OkV4cG9uZW50aWFsUmFtcFRvVmFs
dWUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZTEgPD0gMCB8fCB2YWx1ZTIgPD0gMCkgeworICAg
ICAgICAgICAgICAgIC8vIEhhbmRsZSBuZWdhdGl2ZSB2YWx1ZXMgZXJyb3IgY2FzZSBieSBwcm9w
YWdhdGluZyBwcmV2aW91cyB2YWx1ZS4KKyAgICAgICAgICAgICAgICBmb3IgKDsgd3JpdGVJbmRl
eCA8IGZpbGxUb0ZyYW1lOyArK3dyaXRlSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIHZhbHVl
c1t3cml0ZUluZGV4XSA9IHZhbHVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBmbG9hdCBudW1TYW1wbGVGcmFtZXMgPSBkZWx0YVRpbWUgKiBzYW1wbGVSYXRlOworICAg
ICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBnb2VzIGV4cG9uZW50aWFsbHkgZnJvbSB2YWx1ZTEg
dG8gdmFsdWUyIGluIGEgZHVyYXRpb24gb2YgZGVsdGFUaW1lIHNlY29uZHMgKGNvcnJlc3BvbmRp
bmcgdG8gbnVtU2FtcGxlRnJhbWVzKS4KKyAgICAgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBw
ZXItc2FtcGxlIG11bHRpcGxpZXIuCisgICAgICAgICAgICAgICAgZmxvYXQgbXVsdGlwbGllciA9
IHBvd2YodmFsdWUyIC8gdmFsdWUxLCAxIC8gbnVtU2FtcGxlRnJhbWVzKTsKKworICAgICAgICAg
ICAgICAgIC8vIFNldCB0aGUgc3RhcnRpbmcgdmFsdWUgb2YgdGhlIGV4cG9uZW50aWFsIHJhbXAu
IFRoaXMgaXMgdGhlIHNhbWUgYXMgbXVsdGlwbGllciBeCisgICAgICAgICAgICAgICAgLy8gQXVk
aW9VdGlsaXRpZXM6OnRpbWVUb1NhbXBsZUZyYW1lKGN1cnJlbnRUaW1lIC0gdGltZTEsIHNhbXBs
ZVJhdGUpLCBidXQgaXMgbW9yZQorICAgICAgICAgICAgICAgIC8vIGFjY3VyYXRlLCBlc3BlY2lh
bGx5IGlmIG11bHRpcGxpZXIgaXMgY2xvc2UgdG8gMS4KKyAgICAgICAgICAgICAgICB2YWx1ZSA9
IHZhbHVlMSAqIHBvd2YodmFsdWUyIC8gdmFsdWUxLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBdWRpb1V0aWxpdGllczo6dGltZVRvU2FtcGxlRnJhbWUoY3VycmVudFRp
bWUgLSB0aW1lMSwgc2FtcGxlUmF0ZSkgLyBudW1TYW1wbGVGcmFtZXMpOworCisgICAgICAgICAg
ICAgICAgZm9yICg7IHdyaXRlSW5kZXggPCBmaWxsVG9GcmFtZTsgKyt3cml0ZUluZGV4KSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhbHVlc1t3cml0ZUluZGV4XSA9IHZhbHVlOworICAgICAgICAg
ICAgICAgICAgICB2YWx1ZSAqPSBtdWx0aXBsaWVyOworICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50VGltZSArPSBzYW1wbGVGcmFtZVRpbWVJbmNyOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEhhbmRsZSBldmVudCB0
eXBlcyBub3QgcmVxdWlyaW5nIGxvb2tpbmcgYWhlYWQgdG8gdGhlIG5leHQgZXZlbnQuCisgICAg
ICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBQYXJhbUV2
ZW50OjpTZXRWYWx1ZToKKyAgICAgICAgICAgIGNhc2UgUGFyYW1FdmVudDo6TGluZWFyUmFtcFRv
VmFsdWU6CisgICAgICAgICAgICBjYXNlIFBhcmFtRXZlbnQ6OkV4cG9uZW50aWFsUmFtcFRvVmFs
dWU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGltZSA9
IGZpbGxUb1RpbWU7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gU2ltcGx5IHN0YXkgYXQgYSBj
b25zdGFudCB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBldmVudC52YWx1ZSgp
OworICAgICAgICAgICAgICAgICAgICBmb3IgKDsgd3JpdGVJbmRleCA8IGZpbGxUb0ZyYW1lOyAr
K3dyaXRlSW5kZXgpCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbd3JpdGVJbmRleF0g
PSB2YWx1ZTsKKworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGNhc2UgUGFyYW1FdmVudDo6U2V0VGFyZ2V0VmFsdWU6CisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGltZSA9IGZpbGxUb1RpbWU7
CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRXhwb25lbnRpYWwgYXBwcm9hY2ggdG8gdGFyZ2V0
IHZhbHVlIHdpdGggZ2l2ZW4gdGltZSBjb25zdGFudC4KKyAgICAgICAgICAgICAgICAgICAgZmxv
YXQgdGFyZ2V0VmFsdWUgPSBldmVudC52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBmbG9h
dCB0aW1lQ29uc3RhbnQgPSBldmVudC50aW1lQ29uc3RhbnQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgZGlzY3JldGVUaW1lQ29uc3RhbnQgPSBzdGF0aWNfY2FzdDxmbG9hdD4oQXVkaW9V
dGlsaXRpZXM6OmRpc2NyZXRlVGltZUNvbnN0YW50Rm9yU2FtcGxlUmF0ZSh0aW1lQ29uc3RhbnQs
IGNvbnRyb2xSYXRlKSk7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICg7IHdyaXRlSW5kZXgg
PCBmaWxsVG9GcmFtZTsgKyt3cml0ZUluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZXNbd3JpdGVJbmRleF0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
ICs9ICh0YXJnZXRWYWx1ZSAtIHZhbHVlKSAqIGRpc2NyZXRlVGltZUNvbnN0YW50OworICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBjYXNlIFBhcmFtRXZlbnQ6OlNldFZhbHVlQ3VydmU6Cisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBGbG9hdDMyQXJyYXkqIGN1cnZl
ID0gZXZlbnQuY3VydmUoKTsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQqIGN1cnZlRGF0YSA9
IGN1cnZlID8gY3VydmUtPmRhdGEoKSA6IDA7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mQ3VydmVQb2ludHMgPSBjdXJ2ZSA/IGN1cnZlLT5sZW5ndGgoKSA6IDA7CisKKyAg
ICAgICAgICAgICAgICAgICAgLy8gQ3VydmUgZXZlbnRzIGhhdmUgZHVyYXRpb24sIHNvIGRvbid0
IGp1c3QgdXNlIG5leHQgZXZlbnQgdGltZS4KKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgZHVy
YXRpb24gPSBldmVudC5kdXJhdGlvbigpOworICAgICAgICAgICAgICAgICAgICBmbG9hdCBkdXJh
dGlvbkZyYW1lcyA9IGR1cmF0aW9uICogc2FtcGxlUmF0ZTsKKyAgICAgICAgICAgICAgICAgICAg
ZmxvYXQgY3VydmVQb2ludHNQZXJGcmFtZSA9IHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXJPZkN1
cnZlUG9pbnRzKSAvIGR1cmF0aW9uRnJhbWVzOworCisgICAgICAgICAgICAgICAgICAgIGlmICgh
Y3VydmUgfHwgIWN1cnZlRGF0YSB8fCAhbnVtYmVyT2ZDdXJ2ZVBvaW50cyB8fCBkdXJhdGlvbiA8
PSAwIHx8IHNhbXBsZVJhdGUgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXJy
b3IgY29uZGl0aW9uIC0gc2ltcGx5IHByb3BhZ2F0ZSBwcmV2aW91cyB2YWx1ZS4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1lID0gZmlsbFRvVGltZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoOyB3cml0ZUluZGV4IDwgZmlsbFRvRnJhbWU7ICsrd3JpdGVJbmRleCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbd3JpdGVJbmRleF0gPSB2YWx1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gU2F2ZSBvbGQgdmFsdWVzIGFuZCByZWNhbGN1bGF0ZSBp
bmZvcm1hdGlvbiBiYXNlZCBvbiB0aGUgY3VydmUncyBkdXJhdGlvbgorICAgICAgICAgICAgICAg
ICAgICAvLyBpbnN0ZWFkIG9mIHRoZSBuZXh0IGV2ZW50IHRpbWUuCisgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIG5leHRFdmVudEZpbGxUb0ZyYW1lID0gZmlsbFRvRnJhbWU7CisgICAgICAg
ICAgICAgICAgICAgIGZsb2F0IG5leHRFdmVudEZpbGxUb1RpbWUgPSBmaWxsVG9UaW1lOworICAg
ICAgICAgICAgICAgICAgICBmaWxsVG9UaW1lID0gbWluKGVuZFRpbWUsIHRpbWUxICsgZHVyYXRp
b24pOworICAgICAgICAgICAgICAgICAgICBmaWxsVG9GcmFtZSA9IEF1ZGlvVXRpbGl0aWVzOjp0
aW1lVG9TYW1wbGVGcmFtZShmaWxsVG9UaW1lIC0gc3RhcnRUaW1lLCBzYW1wbGVSYXRlKTsKKyAg
ICAgICAgICAgICAgICAgICAgZmlsbFRvRnJhbWUgPSBtaW4oZmlsbFRvRnJhbWUsIG51bWJlck9m
VmFsdWVzKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBJbmRleCBpbnRvIHRoZSBjdXJ2ZSBk
YXRhIHVzaW5nIGEgZmxvYXRpbmctcG9pbnQgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgIC8v
IFdlJ3JlIHNjYWxpbmcgdGhlIG51bWJlciBvZiBjdXJ2ZSBwb2ludHMgYnkgdGhlIGR1cmF0aW9u
IChzZWUgY3VydmVQb2ludHNQZXJGcmFtZSkuCisgICAgICAgICAgICAgICAgICAgIGZsb2F0IGN1
cnZlVmlydHVhbEluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRpbWUxIDwgY3Vy
cmVudFRpbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluZGV4IHNvbWV3aGVyZSBp
biB0aGUgbWlkZGxlIG9mIHRoZSBjdXJ2ZSBkYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRG9uJ3QgdXNlIHRpbWVUb1NhbXBsZUZyYW1lKCkgc2luY2Ugd2Ugd2FudCB0aGUgZXhhY3Qg
ZmxvYXRpbmctcG9pbnQgZnJhbWUuCisgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBmcmFt
ZU9mZnNldCA9IChjdXJyZW50VGltZSAtIHRpbWUxKSAqIHNhbXBsZVJhdGU7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjdXJ2ZVZpcnR1YWxJbmRleCA9IGN1cnZlUG9pbnRzUGVyRnJhbWUgKiBm
cmFtZU9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
IC8vIFJlbmRlciB0aGUgc3RyZXRjaGVkIGN1cnZlIGRhdGEgdXNpbmcgbmVhcmVzdCBuZWlnaGJv
ciBzYW1wbGluZy4KKyAgICAgICAgICAgICAgICAgICAgLy8gT3ZlcnNhbXBsZWQgY3VydmUgZGF0
YSBjYW4gYmUgcHJvdmlkZWQgaWYgc21vb3RobmVzcyBpcyBkZXNpcmVkLgorICAgICAgICAgICAg
ICAgICAgICBmb3IgKDsgd3JpdGVJbmRleCA8IGZpbGxUb0ZyYW1lOyArK3dyaXRlSW5kZXgpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElkZWFsbHkgd2UnZCB1c2Ugcm91bmQoKSBmcm9t
IE1hdGhFeHRyYXMsIGJ1dCB3ZSdyZSBpbiBhIHRpZ2h0IGxvb3AgaGVyZQorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYW5kIHdlJ3JlIHRyYWRpbmcgb2ZmIHByZWNpc2lvbiBmb3IgZXh0cmEg
c3BlZWQuCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjdXJ2ZUluZGV4ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KDAuNSArIGN1cnZlVmlydHVhbEluZGV4KTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgY3VydmVWaXJ0dWFsSW5kZXggKz0gY3VydmVQb2ludHNQZXJGcmFtZTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQm91bmRzIGNoZWNrLgorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGN1cnZlSW5kZXggPCBudW1iZXJPZkN1cnZlUG9pbnRzKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY3VydmVEYXRhW2N1cnZlSW5kZXhdOworCisg
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbd3JpdGVJbmRleF0gPSB2YWx1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYW55
IHRpbWUgbGVmdCBhZnRlciB0aGUgZHVyYXRpb24gb2YgdGhpcyBldmVudCBhbmQgdGhlIHN0YXJ0
CisgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBuZXh0LCB0aGVuIGp1c3QgcHJvcGFnYXRl
IHRoZSBsYXN0IHZhbHVlLgorICAgICAgICAgICAgICAgICAgICBmb3IgKDsgd3JpdGVJbmRleCA8
IG5leHRFdmVudEZpbGxUb0ZyYW1lOyArK3dyaXRlSW5kZXgpCisgICAgICAgICAgICAgICAgICAg
ICAgICB2YWx1ZXNbd3JpdGVJbmRleF0gPSB2YWx1ZTsKKworICAgICAgICAgICAgICAgICAgICAv
LyBSZS1hZGp1c3QgY3VycmVudCB0aW1lCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1l
ID0gbmV4dEV2ZW50RmlsbFRvVGltZTsKKworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBJZiB0aGVyZSdzIGFueSB0aW1lIGxlZnQgYWZ0ZXIgcHJvY2Vzc2luZyB0aGUgbGFzdCBldmVu
dCB0aGVuIGp1c3QgcHJvcGFnYXRlIHRoZSBsYXN0IHZhbHVlCisgICAgLy8gdG8gdGhlIGVuZCBv
ZiB0aGUgdmFsdWVzIGJ1ZmZlci4KKyAgICBmb3IgKDsgd3JpdGVJbmRleCA8IG51bWJlck9mVmFs
dWVzOyArK3dyaXRlSW5kZXgpCisgICAgICAgIHZhbHVlc1t3cml0ZUluZGV4XSA9IHZhbHVlOwor
CisgICAgcmV0dXJuIHZhbHVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb1BhcmFtVGltZWxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5oCShyZXZpc2lvbiAxMTE0MzMpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5oOjExMTQzMykK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEF1ZGlvUGFyYW1UaW1l
bGluZV9oCisjZGVmaW5lIEF1ZGlvUGFyYW1UaW1lbGluZV9oCisKKyNpbmNsdWRlICJBdWRpb0Nv
bnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvRmxvYXQzMkFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQXVkaW9QYXJhbVRpbWVsaW5lIHsKK3B1YmxpYzoKKyAgICBBdWRpb1BhcmFt
VGltZWxpbmUoKQorICAgICAgICA6IG1fY3VycmVudEV2ZW50SW5kZXgoMCkKKyAgICAgICAgLCBt
X3ZhbHVlKDApCisgICAgeworICAgIH0KKworICAgIHZvaWQgc2V0VmFsdWVBdFRpbWUoZmxvYXQg
dmFsdWUsIGZsb2F0IHRpbWUpOworICAgIHZvaWQgbGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoZmxv
YXQgdmFsdWUsIGZsb2F0IHRpbWUpOworICAgIHZvaWQgZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0
VGltZShmbG9hdCB2YWx1ZSwgZmxvYXQgdGltZSk7CisgICAgdm9pZCBzZXRUYXJnZXRWYWx1ZUF0
VGltZShmbG9hdCB0YXJnZXRWYWx1ZSwgZmxvYXQgdGltZSwgZmxvYXQgdGltZUNvbnN0YW50KTsK
KyAgICB2b2lkIHNldFZhbHVlQ3VydmVBdFRpbWUoRmxvYXQzMkFycmF5KiBjdXJ2ZSwgZmxvYXQg
dGltZSwgZmxvYXQgZHVyYXRpb24pOworICAgIHZvaWQgY2FuY2VsU2NoZWR1bGVkVmFsdWVzKGZs
b2F0IHN0YXJ0VGltZSk7CisKKyAgICAvLyBoYXNWYWx1ZSBpcyBzZXQgdG8gdHJ1ZSBpZiBhIHZh
bGlkIHRpbWVsaW5lIHZhbHVlIGlzIHJldHVybmVkLgorICAgIC8vIG90aGVyd2lzZSBkZWZhdWx0
VmFsdWUgaXMgcmV0dXJuZWQuCisgICAgZmxvYXQgdmFsdWVGb3JDb250ZXh0VGltZShBdWRpb0Nv
bnRleHQqLCBmbG9hdCBkZWZhdWx0VmFsdWUsIGJvb2wmIGhhc1ZhbHVlKTsKKworICAgIC8vIEdp
dmVuIHRoZSB0aW1lIHJhbmdlLCBjYWxjdWxhdGVzIHBhcmFtZXRlciB2YWx1ZXMgaW50byB0aGUg
dmFsdWVzIGJ1ZmZlcgorICAgIC8vIGFuZCByZXR1cm5zIHRoZSBsYXN0IHBhcmFtZXRlciB2YWx1
ZSBjYWxjdWxhdGVkIGZvciAidmFsdWVzIiBvciB0aGUgZGVmYXVsdFZhbHVlIGlmIG5vbmUgd2Vy
ZSBjYWxjdWxhdGVkLgorICAgIC8vIGNvbnRyb2xSYXRlIGlzIHRoZSByYXRlIChudW1iZXIgcGVy
IHNlY29uZCkgYXQgd2hpY2ggcGFyYW1ldGVyIHZhbHVlcyB3aWxsIGJlIGNhbGN1bGF0ZWQuCisg
ICAgLy8gSXQgc2hvdWxkIGVxdWFsIHNhbXBsZVJhdGUgZm9yIHNhbXBsZS1hY2N1cmF0ZSBwYXJh
bWV0ZXIgY2hhbmdlcywgYW5kIG90aGVyd2lzZSB3aWxsIHVzdWFsbHkgbWF0Y2gKKyAgICAvLyB0
aGUgcmVuZGVyIHF1YW50dW0gc2l6ZSBzdWNoIHRoYXQgdGhlIHBhcmFtZXRlciB2YWx1ZSBjaGFu
Z2VzIG9uY2UgcGVyIHJlbmRlciBxdWFudHVtLgorICAgIGZsb2F0IHZhbHVlc0ZvclRpbWVSYW5n
ZShmbG9hdCBzdGFydFRpbWUsIGZsb2F0IGVuZFRpbWUsIGZsb2F0IGRlZmF1bHRWYWx1ZSwgZmxv
YXQqIHZhbHVlcywgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMsIGZsb2F0IHNhbXBsZVJhdGUsIGZs
b2F0IGNvbnRyb2xSYXRlKTsKKworICAgIGJvb2wgaGFzVmFsdWVzKCkgeyByZXR1cm4gbV9ldmVu
dHMuc2l6ZSgpOyB9CisKK3ByaXZhdGU6CisgICAgY2xhc3MgUGFyYW1FdmVudCB7CisgICAgcHVi
bGljOgorICAgICAgICBlbnVtIFR5cGUgeworICAgICAgICAgICAgU2V0VmFsdWUsCisgICAgICAg
ICAgICBMaW5lYXJSYW1wVG9WYWx1ZSwKKyAgICAgICAgICAgIEV4cG9uZW50aWFsUmFtcFRvVmFs
dWUsCisgICAgICAgICAgICBTZXRUYXJnZXRWYWx1ZSwKKyAgICAgICAgICAgIFNldFZhbHVlQ3Vy
dmUsCisgICAgICAgICAgICBMYXN0VHlwZQorICAgICAgICB9OworCisgICAgICAgIFBhcmFtRXZl
bnQoVHlwZSB0eXBlLCBmbG9hdCB2YWx1ZSwgZmxvYXQgdGltZSwgZmxvYXQgdGltZUNvbnN0YW50
LCBmbG9hdCBkdXJhdGlvbiwgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IGN1cnZlKQorICAgICAg
ICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAg
ICAgICAgICwgbV90aW1lKHRpbWUpCisgICAgICAgICAgICAsIG1fdGltZUNvbnN0YW50KHRpbWVD
b25zdGFudCkKKyAgICAgICAgICAgICwgbV9kdXJhdGlvbihkdXJhdGlvbikKKyAgICAgICAgICAg
ICwgbV9jdXJ2ZShjdXJ2ZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdW5zaWdu
ZWQgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgICAgICBmbG9hdCB2YWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAgICAgZmxvYXQgdGltZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdGltZTsgfQorICAgICAgICBmbG9hdCB0aW1lQ29uc3RhbnQoKSBjb25zdCB7IHJl
dHVybiBtX3RpbWVDb25zdGFudDsgfQorICAgICAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fZHVyYXRpb247IH0KKyAgICAgICAgRmxvYXQzMkFycmF5KiBjdXJ2ZSgpIHsgcmV0
dXJuIG1fY3VydmUuZ2V0KCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIG1f
dHlwZTsKKyAgICAgICAgZmxvYXQgbV92YWx1ZTsKKyAgICAgICAgZmxvYXQgbV90aW1lOworICAg
ICAgICBmbG9hdCBtX3RpbWVDb25zdGFudDsKKyAgICAgICAgZmxvYXQgbV9kdXJhdGlvbjsKKyAg
ICAgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gbV9jdXJ2ZTsKKyAgICB9OworCisgICAgdm9pZCBp
bnNlcnRFdmVudChjb25zdCBQYXJhbUV2ZW50Jik7CisgICAgZmxvYXQgdmFsdWVzRm9yVGltZVJh
bmdlSW1wbChmbG9hdCBzdGFydFRpbWUsIGZsb2F0IGVuZFRpbWUsIGZsb2F0IGRlZmF1bHRWYWx1
ZSwgZmxvYXQqIHZhbHVlcywgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMsIGZsb2F0IHNhbXBsZVJh
dGUsIGZsb2F0IGNvbnRyb2xSYXRlKTsKKworICAgIFZlY3RvcjxQYXJhbUV2ZW50PiBtX2V2ZW50
czsKKyAgICB1bnNpZ25lZCBtX2N1cnJlbnRFdmVudEluZGV4OworICAgIGZsb2F0IG1fdmFsdWU7
CisKKyAgICBNdXRleCBtX2V2ZW50c0xvY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBBdWRpb1BhcmFtVGltZWxpbmVfaApJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5jcHAJ
KHJldmlzaW9uIDExMTQzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Qcm9j
ZXNzaW5nRXZlbnQuY3BwOjExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FV
RElPKQorCisjaW5jbHVkZSAiQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaCIKKworI2luY2x1ZGUgIkF1
ZGlvQnVmZmVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1Bhc3NSZWZQdHI8QXVkaW9Qcm9jZXNzaW5nRXZlbnQ+IEF1ZGlvUHJvY2Vzc2luZ0V2
ZW50OjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVkaW9Qcm9jZXNzaW5n
RXZlbnQpOworfQorCitQYXNzUmVmUHRyPEF1ZGlvUHJvY2Vzc2luZ0V2ZW50PiBBdWRpb1Byb2Nl
c3NpbmdFdmVudDo6Y3JlYXRlKFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IGlucHV0QnVmZmVyLCBQ
YXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBvdXRwdXRCdWZmZXIpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBBdWRpb1Byb2Nlc3NpbmdFdmVudChpbnB1dEJ1ZmZlciwgb3V0cHV0QnVmZmVyKSk7
Cit9CisKK0F1ZGlvUHJvY2Vzc2luZ0V2ZW50OjpBdWRpb1Byb2Nlc3NpbmdFdmVudCgpCit7Cit9
CisKK0F1ZGlvUHJvY2Vzc2luZ0V2ZW50OjpBdWRpb1Byb2Nlc3NpbmdFdmVudChQYXNzUmVmUHRy
PEF1ZGlvQnVmZmVyPiBpbnB1dEJ1ZmZlciwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gb3V0cHV0
QnVmZmVyKQorICAgIDogRXZlbnQoZXZlbnROYW1lcygpLmF1ZGlvcHJvY2Vzc0V2ZW50LCB0cnVl
LCBmYWxzZSkKKyAgICAsIG1faW5wdXRCdWZmZXIoaW5wdXRCdWZmZXIpCisgICAgLCBtX291dHB1
dEJ1ZmZlcihvdXRwdXRCdWZmZXIpCit7Cit9CisKK0F1ZGlvUHJvY2Vzc2luZ0V2ZW50Ojp+QXVk
aW9Qcm9jZXNzaW5nRXZlbnQoKQoreworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIEF1ZGlvUHJv
Y2Vzc2luZ0V2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZXZlbnRO
YW1lcygpLmludGVyZmFjZUZvckF1ZGlvUHJvY2Vzc2luZ0V2ZW50OworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZl
bnQuaAkocmV2aXNpb24gMTExNDMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b1Byb2Nlc3NpbmdFdmVudC5oOjExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBdWRpb1Byb2Nlc3NpbmdFdmVudF9oCisjZGVmaW5l
IEF1ZGlvUHJvY2Vzc2luZ0V2ZW50X2gKKworI2luY2x1ZGUgIkF1ZGlvQnVmZmVyLmgiCisjaW5j
bHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb0J1ZmZlcjsK
KyAgICAKK2NsYXNzIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50IDogcHVibGljIEV2ZW50IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb1Byb2Nlc3NpbmdFdmVudD4gY3JlYXRlKCk7
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXVkaW9Qcm9jZXNzaW5nRXZlbnQ+IGNyZWF0ZShQYXNz
UmVmUHRyPEF1ZGlvQnVmZmVyPiBpbnB1dEJ1ZmZlciwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4g
b3V0cHV0QnVmZmVyKTsKKyAgICAKKyAgICB2aXJ0dWFsIH5BdWRpb1Byb2Nlc3NpbmdFdmVudCgp
OworCisgICAgQXVkaW9CdWZmZXIqIGlucHV0QnVmZmVyKCkgeyByZXR1cm4gbV9pbnB1dEJ1ZmZl
ci5nZXQoKTsgfQorICAgIEF1ZGlvQnVmZmVyKiBvdXRwdXRCdWZmZXIoKSB7IHJldHVybiBtX291
dHB1dEJ1ZmZlci5nZXQoKTsgfQorCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGlu
dGVyZmFjZU5hbWUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBBdWRpb1Byb2Nlc3NpbmdFdmVu
dCgpOworICAgIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50KFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IGlu
cHV0QnVmZmVyLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBvdXRwdXRCdWZmZXIpOworCisgICAg
UmVmUHRyPEF1ZGlvQnVmZmVyPiBtX2lucHV0QnVmZmVyOworICAgIFJlZlB0cjxBdWRpb0J1ZmZl
cj4gbV9vdXRwdXRCdWZmZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBBdWRpb1Byb2Nlc3NpbmdFdmVudF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmlkbAkocmV2aXNp
b24gMTExNDMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdF
dmVudC5pZGw6MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b1Byb2Nlc3NpbmdFdmVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKK21vZHVsZSBhdWRpbyB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0
aW9uYWw9V0VCX0FVRElPLAorICAgICAgICBKU0dlbmVyYXRlVG9KU09iamVjdAorICAgIF0gQXVk
aW9Qcm9jZXNzaW5nRXZlbnQgOiBFdmVudCB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBB
dWRpb0J1ZmZlciBpbnB1dEJ1ZmZlcjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlv
QnVmZmVyIG91dHB1dEJ1ZmZlcjsgCisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaAkocmV2aXNpb24gMTExNDMz
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaDoxMTE0MzMp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEF1ZGlvU291cmNlTm9kZV9o
CisjZGVmaW5lIEF1ZGlvU291cmNlTm9kZV9oCisKKyNpbmNsdWRlICJBdWRpb05vZGUuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb1NvdXJjZU5vZGUgOiBwdWJsaWMgQXVk
aW9Ob2RlIHsKK3B1YmxpYzoKKyAgICBBdWRpb1NvdXJjZU5vZGUoQXVkaW9Db250ZXh0KiBjb250
ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQorICAgICAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1w
bGVSYXRlKQorICAgIHsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBkb3VibGUgdGFp
bFRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBkb3VibGUg
bGF0ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBBdWRpb1NvdXJjZU5vZGVfaApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmlk
bAkocmV2aXNpb24gMTExNDMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Nv
dXJjZU5vZGUuaWRsOjExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9Tb3VyY2VOb2RlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9k
dWxlIGF1ZGlvIHsKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVE
SU8KKyAgICBdIEF1ZGlvU291cmNlTm9kZSA6IEF1ZGlvTm9kZSB7CisgICAgfTsKK30KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5l
bC5jcHAJKHJldmlzaW9uIDExMTQzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlx
dWFkRFNQS2VybmVsLmNwcDoxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0JpcXVhZERTUEtlcm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElP
KQorCisjaW5jbHVkZSAiQmlxdWFkRFNQS2VybmVsLmgiCisKKyNpbmNsdWRlICJCaXF1YWRQcm9j
ZXNzb3IuaCIKKyNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbmNsdWRlIDxsaW1pdHMu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8g
RklYTUU6IEFzIGEgcmVjdXJzaXZlIGxpbmVhciBmaWx0ZXIsIGRlcGVuZGluZyBvbiBpdHMgcGFy
YW1ldGVycywgYSBiaXF1YWQgZmlsdGVyIGNhbiBoYXZlCisvLyBhbiBpbmZpbml0ZSB0YWlsVGlt
ZS4gSW4gcHJhY3RpY2UsIEJpcXVhZCBmaWx0ZXJzIGRvIG5vdCB1c3VhbGx5IChleGNlcHQgZm9y
IHZlcnkgaGlnaCByZXNvbmFuY2UgdmFsdWVzKSAKKy8vIGhhdmUgYSB0YWlsVGltZSBvZiBsb25n
ZXIgdGhhbiBhcHByb3guIDIwMG1zLiBUaGlzIHZhbHVlIGNvdWxkIHBvc3NpYmx5IGJlIGNhbGN1
bGF0ZWQgYmFzZWQgb24gdGhlCisvLyBzZXR0aW5ncyBvZiB0aGUgQmlxdWFkLgorc3RhdGljIGNv
bnN0IGRvdWJsZSBNYXhCaXF1YWREZWxheVRpbWUgPSAwLjI7CisKK3ZvaWQgQmlxdWFkRFNQS2Vy
bmVsOjp1cGRhdGVDb2VmZmljaWVudHNJZk5lY2Vzc2FyeShib29sIHVzZVNtb290aGluZywgYm9v
bCBmb3JjZVVwZGF0ZSkKK3sKKyAgICBpZiAoZm9yY2VVcGRhdGUgfHwgYmlxdWFkUHJvY2Vzc29y
KCktPmZpbHRlckNvZWZmaWNpZW50c0RpcnR5KCkpIHsKKyAgICAgICAgZG91YmxlIHZhbHVlMTsK
KyAgICAgICAgZG91YmxlIHZhbHVlMjsKKyAgICAgICAgZG91YmxlIGdhaW47CisgICAgICAgIAor
ICAgICAgICBpZiAodXNlU21vb3RoaW5nKSB7CisgICAgICAgICAgICB2YWx1ZTEgPSBiaXF1YWRQ
cm9jZXNzb3IoKS0+cGFyYW1ldGVyMSgpLT5zbW9vdGhlZFZhbHVlKCk7CisgICAgICAgICAgICB2
YWx1ZTIgPSBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMigpLT5zbW9vdGhlZFZhbHVlKCk7
CisgICAgICAgICAgICBnYWluID0gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjMoKS0+c21v
b3RoZWRWYWx1ZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWUxID0gYmlx
dWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjEoKS0+dmFsdWUoKTsKKyAgICAgICAgICAgIHZhbHVl
MiA9IGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIyKCktPnZhbHVlKCk7CisgICAgICAgICAg
ICBnYWluID0gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjMoKS0+dmFsdWUoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIENvbnZlcnQgZnJvbSBIZXJ0eiB0byBub3JtYWxpemVkIGZyZXF1
ZW5jeSAwIC0+IDEuCisgICAgICAgIGRvdWJsZSBueXF1aXN0ID0gdGhpcy0+bnlxdWlzdCgpOwor
ICAgICAgICBkb3VibGUgbm9ybWFsaXplZEZyZXF1ZW5jeSA9IHZhbHVlMSAvIG55cXVpc3Q7CisK
KyAgICAgICAgLy8gQ29uZmlndXJlIHRoZSBiaXF1YWQgd2l0aCB0aGUgbmV3IGZpbHRlciBwYXJh
bWV0ZXJzIGZvciB0aGUgYXBwcm9wcmlhdGUgdHlwZSBvZiBmaWx0ZXIuCisgICAgICAgIHN3aXRj
aCAoYmlxdWFkUHJvY2Vzc29yKCktPnR5cGUoKSkgeworICAgICAgICBjYXNlIEJpcXVhZFByb2Nl
c3Nvcjo6TG93UGFzczoKKyAgICAgICAgICAgIG1fYmlxdWFkLnNldExvd3Bhc3NQYXJhbXMobm9y
bWFsaXplZEZyZXF1ZW5jeSwgdmFsdWUyKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgQmlxdWFkUHJvY2Vzc29yOjpIaWdoUGFzczoKKyAgICAgICAgICAgIG1fYmlxdWFkLnNl
dEhpZ2hwYXNzUGFyYW1zKG5vcm1hbGl6ZWRGcmVxdWVuY3ksIHZhbHVlMik7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIEJpcXVhZFByb2Nlc3Nvcjo6QmFuZFBhc3M6CisgICAg
ICAgICAgICBtX2JpcXVhZC5zZXRCYW5kcGFzc1BhcmFtcyhub3JtYWxpemVkRnJlcXVlbmN5LCB2
YWx1ZTIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBCaXF1YWRQcm9jZXNz
b3I6Okxvd1NoZWxmOgorICAgICAgICAgICAgbV9iaXF1YWQuc2V0TG93U2hlbGZQYXJhbXMobm9y
bWFsaXplZEZyZXF1ZW5jeSwgZ2Fpbik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBj
YXNlIEJpcXVhZFByb2Nlc3Nvcjo6SGlnaFNoZWxmOgorICAgICAgICAgICAgbV9iaXF1YWQuc2V0
SGlnaFNoZWxmUGFyYW1zKG5vcm1hbGl6ZWRGcmVxdWVuY3ksIGdhaW4pOworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBCaXF1YWRQcm9jZXNzb3I6OlBlYWtpbmc6CisgICAgICAg
ICAgICBtX2JpcXVhZC5zZXRQZWFraW5nUGFyYW1zKG5vcm1hbGl6ZWRGcmVxdWVuY3ksIHZhbHVl
MiwgZ2Fpbik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJpcXVhZFByb2Nl
c3Nvcjo6Tm90Y2g6CisgICAgICAgICAgICBtX2JpcXVhZC5zZXROb3RjaFBhcmFtcyhub3JtYWxp
emVkRnJlcXVlbmN5LCB2YWx1ZTIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBCaXF1YWRQcm9jZXNzb3I6OkFsbHBhc3M6CisgICAgICAgICAgICBtX2JpcXVhZC5zZXRBbGxw
YXNzUGFyYW1zKG5vcm1hbGl6ZWRGcmVxdWVuY3ksIHZhbHVlMik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBCaXF1YWREU1BLZXJuZWw6OnByb2Nlc3Mo
Y29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCBzaXplX3QgZnJhbWVzVG9Q
cm9jZXNzKQoreworICAgIEFTU0VSVChzb3VyY2UgJiYgZGVzdGluYXRpb24gJiYgYmlxdWFkUHJv
Y2Vzc29yKCkpOworICAgIAorICAgIC8vIFJlY29tcHV0ZSBmaWx0ZXIgY29lZmZpY2llbnRzIGlm
IGFueSBvZiB0aGUgcGFyYW1ldGVycyBoYXZlIGNoYW5nZWQuCisgICAgLy8gRklYTUU6IGFzIGFu
IG9wdGltaXphdGlvbiwgaW1wbGVtZW50IGEgd2F5IHRoYXQgYSBCaXF1YWQgb2JqZWN0IGNhbiBz
aW1wbHkgY29weSBpdHMgaW50ZXJuYWwgZmlsdGVyIGNvZWZmaWNpZW50cyBmcm9tIGFub3RoZXIg
QmlxdWFkIG9iamVjdC4KKyAgICAvLyBUaGVuIHJlLWZhY3RvciB0aGlzIGNvZGUgdG8gb25seSBy
dW4gZm9yIHRoZSBmaXJzdCBCaXF1YWREU1BLZXJuZWwgb2YgZWFjaCBCaXF1YWRQcm9jZXNzb3Iu
CisKKyAgICB1cGRhdGVDb2VmZmljaWVudHNJZk5lY2Vzc2FyeSh0cnVlLCBmYWxzZSk7CisKKyAg
ICBtX2JpcXVhZC5wcm9jZXNzKHNvdXJjZSwgZGVzdGluYXRpb24sIGZyYW1lc1RvUHJvY2Vzcyk7
Cit9CisKK3ZvaWQgQmlxdWFkRFNQS2VybmVsOjpnZXRGcmVxdWVuY3lSZXNwb25zZShpbnQgbkZy
ZXF1ZW5jaWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGZsb2F0KiBmcmVxdWVuY3lIeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbG9hdCogbWFnUmVzcG9uc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmxvYXQqIHBoYXNlUmVzcG9uc2UpCit7CisgICAgYm9vbCBpc0dv
b2QgPSBuRnJlcXVlbmNpZXMgPiAwICYmIGZyZXF1ZW5jeUh6ICYmIG1hZ1Jlc3BvbnNlICYmIHBo
YXNlUmVzcG9uc2U7CisgICAgQVNTRVJUKGlzR29vZCk7CisgICAgaWYgKCFpc0dvb2QpCisgICAg
ICAgIHJldHVybjsKKworICAgIFZlY3RvcjxmbG9hdD4gZnJlcXVlbmN5KG5GcmVxdWVuY2llcyk7
CisKKyAgICBkb3VibGUgbnlxdWlzdCA9IHRoaXMtPm55cXVpc3QoKTsKKworICAgIC8vIENvbnZl
cnQgZnJvbSBmcmVxdWVuY3kgaW4gSHogdG8gbm9ybWFsaXplZCBmcmVxdWVuY3kgKDAgLT4gMSks
CisgICAgLy8gd2l0aCAxIGVxdWFsIHRvIHRoZSBOeXF1aXN0IGZyZXF1ZW5jeS4KKyAgICBmb3Ig
KGludCBrID0gMDsgayA8IG5GcmVxdWVuY2llczsgKytrKQorICAgICAgICBmcmVxdWVuY3lba10g
PSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGZyZXF1ZW5jeUh6W2tdIC8gbnlxdWlzdCk7CisKKyAg
ICAvLyBXZSB3YW50IHRvIGdldCB0aGUgZmluYWwgdmFsdWVzIG9mIHRoZSBjb2VmZmljaWVudHMg
YW5kIGNvbXB1dGUKKyAgICAvLyB0aGUgcmVzcG9uc2UgZnJvbSB0aGF0IGluc3RlYWQgb2Ygc29t
ZSBpbnRlcm1lZGlhdGUgc21vb3RoZWQKKyAgICAvLyBzZXQuIEZvcmNlZnVsbHkgdXBkYXRlIHRo
ZSBjb2VmZmljaWVudHMgZXZlbiBpZiB0aGV5IGFyZSBub3QKKyAgICAvLyBkaXJ0eS4KKworICAg
IHVwZGF0ZUNvZWZmaWNpZW50c0lmTmVjZXNzYXJ5KGZhbHNlLCB0cnVlKTsKKworICAgIG1fYmlx
dWFkLmdldEZyZXF1ZW5jeVJlc3BvbnNlKG5GcmVxdWVuY2llcywgZnJlcXVlbmN5LmRhdGEoKSwg
bWFnUmVzcG9uc2UsIHBoYXNlUmVzcG9uc2UpOworfQorCitkb3VibGUgQmlxdWFkRFNQS2VybmVs
Ojp0YWlsVGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIE1heEJpcXVhZERlbGF5VGltZTsKK30K
KworZG91YmxlIEJpcXVhZERTUEtlcm5lbDo6bGF0ZW5jeVRpbWUoKSBjb25zdAoreworICAgIHJl
dHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRE
U1BLZXJuZWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0JpcXVhZERTUEtlcm5lbC5oCShyZXZpc2lvbiAxMTE0MzMpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5oOjExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQmlxdWFkRFNQS2VybmVsX2gKKyNkZWZpbmUg
QmlxdWFkRFNQS2VybmVsX2gKKworI2luY2x1ZGUgIkF1ZGlvRFNQS2VybmVsLmgiCisjaW5jbHVk
ZSAiQmlxdWFkLmgiCisjaW5jbHVkZSAiQmlxdWFkUHJvY2Vzc29yLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgQmlxdWFkUHJvY2Vzc29yOworCisvLyBCaXF1YWREU1BLZXJuZWwg
aXMgYW4gQXVkaW9EU1BLZXJuZWwgYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBmaWx0ZXJpbmcgb25l
IGNoYW5uZWwgb2YgYSBCaXF1YWRQcm9jZXNzb3IgdXNpbmcgYSBCaXF1YWQgb2JqZWN0LgorCitj
bGFzcyBCaXF1YWREU1BLZXJuZWwgOiBwdWJsaWMgQXVkaW9EU1BLZXJuZWwgeworcHVibGljOiAg
CisgICAgQmlxdWFkRFNQS2VybmVsKEJpcXVhZFByb2Nlc3NvciogcHJvY2Vzc29yKQorICAgIDog
QXVkaW9EU1BLZXJuZWwocHJvY2Vzc29yKQorICAgIHsKKyAgICB9CisgICAgCisgICAgLy8gQXVk
aW9EU1BLZXJuZWwKKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNl
LCBmbG9hdCogZGVzdCwgc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgdmlydHVhbCB2b2lk
IHJlc2V0KCkgeyBtX2JpcXVhZC5yZXNldCgpOyB9CisKKyAgICAvLyBHZXQgdGhlIG1hZ25pdHVk
ZSBhbmQgcGhhc2UgcmVzcG9uc2Ugb2YgdGhlIGZpbHRlciBhdCB0aGUgZ2l2ZW4KKyAgICAvLyBz
ZXQgb2YgZnJlcXVlbmNpZXMgKGluIEh6KS4gVGhlIHBoYXNlIHJlc3BvbnNlIGlzIGluIHJhZGlh
bnMuCisgICAgdm9pZCBnZXRGcmVxdWVuY3lSZXNwb25zZShpbnQgbkZyZXF1ZW5jaWVzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIGZyZXF1ZW5jeUh6LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIG1hZ1Jlc3BvbnNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIHBoYXNlUmVzcG9uc2UpOworCisgICAgdmlydHVh
bCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBs
YXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFOworCitwcm90ZWN0ZWQ6CisgICAgQmlxdWFkIG1f
YmlxdWFkOworICAgIEJpcXVhZFByb2Nlc3NvciogYmlxdWFkUHJvY2Vzc29yKCkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8QmlxdWFkUHJvY2Vzc29yKj4ocHJvY2Vzc29yKCkpOyB9CisKKyAgICAvLyBU
byBwcmV2ZW50IGF1ZGlvIGdsaXRjaGVzIHdoZW4gcGFyYW1ldGVycyBhcmUgY2hhbmdlZCwKKyAg
ICAvLyBkZXppcHBlcmluZyBpcyB1c2VkIHRvIHNsb3dseSBjaGFuZ2UgdGhlIHBhcmFtZXRlcnMu
CisgICAgLy8gfHVzZVNtb290aGluZ3wgaW1wbGllcyB0aGF0IHdlIHdhbnQgdG8gdXBkYXRlIHVz
aW5nIHRoZQorICAgIC8vIHNtb290aGVkIHZhbHVlcy4gT3RoZXJ3aXNlIHRoZSBmaW5hbCB0YXJn
ZXQgdmFsdWVzIGFyZQorICAgIC8vIHVzZWQuIElmIHxmb3JjZVVwZGF0ZXwgaXMgdHJ1ZSwgd2Ug
dXBkYXRlIHRoZSBjb2VmZmljaWVudHMgZXZlbgorICAgIC8vIGlmIHRoZXkgYXJlIG5vdCBkaXJ0
eS4gKFVzZWQgd2hlbiBjb21wdXRpbmcgdGhlIGZyZXF1ZW5jeQorICAgIC8vIHJlc3BvbnNlLikK
KyAgICB2b2lkIHVwZGF0ZUNvZWZmaWNpZW50c0lmTmVjZXNzYXJ5KGJvb2wgdXNlU21vb3RoaW5n
LCBib29sIGZvcmNlVXBkYXRlKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEJpcXVhZERTUEtlcm5lbF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5jcHAJKHJldmlzaW9uIDExMTQzMykJ
KGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5jcHA6MTExNDMz
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkJpcXVhZEZp
bHRlck5vZGUuaCIKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitCaXF1YWRGaWx0ZXJOb2RlOjpCaXF1YWRGaWx0ZXJOb2RlKEF1ZGlvQ29udGV4
dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKKyAgICA6IEF1ZGlvQmFzaWNQcm9jZXNzb3JO
b2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCit7CisgICAgLy8gSW5pdGlhbGx5IHNldHVwIGFzIGxv
d3Bhc3MgZmlsdGVyLgorICAgIG1fcHJvY2Vzc29yID0gYWRvcHRQdHIobmV3IEJpcXVhZFByb2Nl
c3NvcihCaXF1YWRQcm9jZXNzb3I6Okxvd1Bhc3MsIHNhbXBsZVJhdGUsIDEsIGZhbHNlKSk7Cisg
ICAgYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjEoKS0+c2V0Q29udGV4dChjb250ZXh0KTsK
KyAgICBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMigpLT5zZXRDb250ZXh0KGNvbnRleHQp
OworICAgIGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIzKCktPnNldENvbnRleHQoY29udGV4
dCk7CisgICAgc2V0Tm9kZVR5cGUoTm9kZVR5cGVCaXF1YWRGaWx0ZXIpOworfQorCit2b2lkIEJp
cXVhZEZpbHRlck5vZGU6OnNldFR5cGUodW5zaWduZWQgc2hvcnQgdHlwZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgaWYgKHR5cGUgPiBCaXF1YWRQcm9jZXNzb3I6OkFsbHBhc3MpIHsKKyAg
ICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBiaXF1YWRQcm9jZXNzb3IoKS0+c2V0VHlwZShzdGF0aWNfY2FzdDxCaXF1YWRQcm9j
ZXNzb3I6OkZpbHRlclR5cGU+KHR5cGUpKTsKK30KKworCit2b2lkIEJpcXVhZEZpbHRlck5vZGU6
OmdldEZyZXF1ZW5jeVJlc3BvbnNlKGNvbnN0IEZsb2F0MzJBcnJheSogZnJlcXVlbmN5SHosCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0MzJBcnJheSog
bWFnUmVzcG9uc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEZsb2F0MzJBcnJheSogcGhhc2VSZXNwb25zZSkKK3sKKyAgICBpZiAoIWZyZXF1ZW5jeUh6IHx8
ICFtYWdSZXNwb25zZSB8fCAhcGhhc2VSZXNwb25zZSkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIGludCBuID0gc3RkOjptaW4oZnJlcXVlbmN5SHotPmxlbmd0aCgpLAorICAgICAgICAgICAg
ICAgICAgICAgc3RkOjptaW4obWFnUmVzcG9uc2UtPmxlbmd0aCgpLCBwaGFzZVJlc3BvbnNlLT5s
ZW5ndGgoKSkpOworCisgICAgaWYgKG4pIHsKKyAgICAgICAgYmlxdWFkUHJvY2Vzc29yKCktPmdl
dEZyZXF1ZW5jeVJlc3BvbnNlKG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmcmVxdWVuY3lIei0+ZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFnUmVzcG9uc2UtPmRhdGEoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlUmVzcG9uc2UtPmRh
dGEoKSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9C
aXF1YWRGaWx0ZXJOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmgJKHJldmlzaW9uIDExMTQzMykJKGZyb20gU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5oOjExMTQzMykKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJpcXVhZEZpbHRlck5vZGVf
aAorI2RlZmluZSBCaXF1YWRGaWx0ZXJOb2RlX2gKKworI2luY2x1ZGUgIkF1ZGlvQmFzaWNQcm9j
ZXNzb3JOb2RlLmgiCisjaW5jbHVkZSAiQmlxdWFkUHJvY2Vzc29yLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgQXVkaW9QYXJhbTsKKyAgICAKK2NsYXNzIEJpcXVhZEZpbHRlck5v
ZGUgOiBwdWJsaWMgQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUgeworcHVibGljOgorICAgIC8vIFRo
ZXNlIG11c3QgYmUgZGVmaW5lZCBhcyBpbiB0aGUgLmlkbCBmaWxlIGFuZCBtdXN0IG1hdGNoIHRo
b3NlIGluIHRoZSBCaXF1YWRQcm9jZXNzb3IgY2xhc3MuCisgICAgZW51bSB7CisgICAgICAgIExP
V1BBU1MgPSAwLAorICAgICAgICBISUdIUEFTUyA9IDEsCisgICAgICAgIEJBTkRQQVNTID0gMiwK
KyAgICAgICAgTE9XU0hFTEYgPSAzLAorICAgICAgICBISUdIU0hFTEYgPSA0LAorICAgICAgICBQ
RUFLSU5HID0gNSwKKyAgICAgICAgTk9UQ0ggPSA2LAorICAgICAgICBBTExQQVNTID0gNworICAg
IH07CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCaXF1YWRGaWx0ZXJOb2RlPiBjcmVhdGUoQXVk
aW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBCaXF1YWRGaWx0ZXJOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpKTsg
ICAgICAKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgc2hvcnQgdHlwZSgpIHsgcmV0dXJuIGJp
cXVhZFByb2Nlc3NvcigpLT50eXBlKCk7IH0KKyAgICB2b2lkIHNldFR5cGUodW5zaWduZWQgc2hv
cnQgdHlwZSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgQXVkaW9QYXJhbSogZnJlcXVlbmN5KCkg
eyByZXR1cm4gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjEoKTsgfQorICAgIEF1ZGlvUGFy
YW0qIHEoKSB7IHJldHVybiBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMigpOyB9CisgICAg
QXVkaW9QYXJhbSogZ2FpbigpIHsgcmV0dXJuIGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIz
KCk7IH0KKworICAgIC8vIEdldCB0aGUgbWFnbml0dWRlIGFuZCBwaGFzZSByZXNwb25zZSBvZiB0
aGUgZmlsdGVyIGF0IHRoZSBnaXZlbgorICAgIC8vIHNldCBvZiBmcmVxdWVuY2llcyAoaW4gSHop
LiBUaGUgcGhhc2UgcmVzcG9uc2UgaXMgaW4gcmFkaWFucy4KKyAgICB2b2lkIGdldEZyZXF1ZW5j
eVJlc3BvbnNlKGNvbnN0IEZsb2F0MzJBcnJheSogZnJlcXVlbmN5SHosCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGbG9hdDMyQXJyYXkqIG1hZ1Jlc3BvbnNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRmxvYXQzMkFycmF5KiBwaGFzZVJlc3BvbnNlKTsKKworcHJpdmF0
ZToKKyAgICBCaXF1YWRGaWx0ZXJOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUp
OworCisgICAgQmlxdWFkUHJvY2Vzc29yKiBiaXF1YWRQcm9jZXNzb3IoKSB7IHJldHVybiBzdGF0
aWNfY2FzdDxCaXF1YWRQcm9jZXNzb3IqPihwcm9jZXNzb3IoKSk7IH0KK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEJpcXVhZEZpbHRlck5vZGVfaApJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUu
aWRsCShyZXZpc2lvbiAxMTE0MzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVh
ZEZpbHRlck5vZGUuaWRsOjExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQmlxdWFkRmlsdGVyTm9kZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKK21vZHVsZSBhdWRpbyB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29u
ZGl0aW9uYWw9V0VCX0FVRElPLAorICAgICAgICBKU0dlbmVyYXRlVG9KU09iamVjdAorICAgIF0g
QmlxdWFkRmlsdGVyTm9kZSA6IEF1ZGlvTm9kZSB7CisgICAgICAgIC8vIEZpbHRlciB0eXBlLgor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBMT1dQQVNTID0gMDsKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgSElHSFBBU1MgPSAxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCBCQU5EUEFTUyA9IDI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IExPV1NIRUxGID0g
MzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgSElHSFNIRUxGID0gNDsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgc2hvcnQgUEVBS0lORyA9IDU7CisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IHNob3J0IE5PVENIID0gNjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQUxMUEFTUyA9
IDc7CisKKyAgICAgICAgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IHR5cGUKKyAgICAgICAgICAg
IHNldHRlciByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgCisgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIGZyZXF1ZW5jeTsgLy8gaW4gSGVydHoKKyAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIEF1ZGlvUGFyYW0gUTsgLy8gUXVhbGl0eSBmYWN0b3IKKyAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlvUGFyYW0gZ2FpbjsgLy8gaW4gRGVjaWJlbHMKKworICAg
ICAgICB2b2lkIGdldEZyZXF1ZW5jeVJlc3BvbnNlKGluIEZsb2F0MzJBcnJheSBmcmVxdWVuY3lI
eiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBGbG9hdDMyQXJyYXkgbWFn
UmVzcG9uc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRmxvYXQzMkFy
cmF5IHBoYXNlUmVzcG9uc2UpOworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuY3BwCShyZXZpc2lvbiAxMTE0
MzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5jcHA6MTEx
NDMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkJpcXVh
ZFByb2Nlc3Nvci5oIgorCisjaW5jbHVkZSAiQmlxdWFkRFNQS2VybmVsLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKyAgICAKK0JpcXVhZFByb2Nlc3Nvcjo6QmlxdWFkUHJvY2Vzc29yKGZsb2F0
IHNhbXBsZVJhdGUsIHNpemVfdCBudW1iZXJPZkNoYW5uZWxzLCBib29sIGF1dG9Jbml0aWFsaXpl
KQorICAgIDogQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3Ioc2FtcGxlUmF0ZSwgbnVtYmVyT2ZDaGFu
bmVscykKKyAgICAsIG1fdHlwZShMb3dQYXNzKQorICAgICwgbV9wYXJhbWV0ZXIxKDApCisgICAg
LCBtX3BhcmFtZXRlcjIoMCkKKyAgICAsIG1fcGFyYW1ldGVyMygwKQorICAgICwgbV9maWx0ZXJD
b2VmZmljaWVudHNEaXJ0eSh0cnVlKQoreworICAgIGRvdWJsZSBueXF1aXN0ID0gMC41ICogdGhp
cy0+c2FtcGxlUmF0ZSgpOworCisgICAgLy8gQ3JlYXRlIHBhcmFtZXRlcnMgZm9yIEJpcXVhZEZp
bHRlck5vZGUuCisgICAgbV9wYXJhbWV0ZXIxID0gQXVkaW9QYXJhbTo6Y3JlYXRlKCJmcmVxdWVu
Y3kiLCAzNTAuMCwgMTAuMCwgbnlxdWlzdCk7CisgICAgbV9wYXJhbWV0ZXIyID0gQXVkaW9QYXJh
bTo6Y3JlYXRlKCJRIiwgMSwgMC4wMDAxLCAxMDAwLjApOworICAgIG1fcGFyYW1ldGVyMyA9IEF1
ZGlvUGFyYW06OmNyZWF0ZSgiZ2FpbiIsIDAuMCwgLTQwLCA0MCk7CisKKyAgICBpZiAoYXV0b0lu
aXRpYWxpemUpCisgICAgICAgIGluaXRpYWxpemUoKTsKK30KKworQmlxdWFkUHJvY2Vzc29yOjpC
aXF1YWRQcm9jZXNzb3IoRmlsdGVyVHlwZSB0eXBlLCBmbG9hdCBzYW1wbGVSYXRlLCBzaXplX3Qg
bnVtYmVyT2ZDaGFubmVscywgYm9vbCBhdXRvSW5pdGlhbGl6ZSkKKyAgICA6IEF1ZGlvRFNQS2Vy
bmVsUHJvY2Vzc29yKHNhbXBsZVJhdGUsIG51bWJlck9mQ2hhbm5lbHMpCisgICAgLCBtX3R5cGUo
dHlwZSkKKyAgICAsIG1fcGFyYW1ldGVyMSgwKQorICAgICwgbV9wYXJhbWV0ZXIyKDApCisgICAg
LCBtX3BhcmFtZXRlcjMoMCkKKyAgICAsIG1fZmlsdGVyQ29lZmZpY2llbnRzRGlydHkodHJ1ZSkK
K3sKKyAgICBkb3VibGUgbnlxdWlzdCA9IDAuNSAqIHRoaXMtPnNhbXBsZVJhdGUoKTsKKyAgICAK
KyAgICAvLyBIYW5kbGUgdGhlIGRlcHJlY2F0ZWQgTG93UGFzczJGaWx0ZXJOb2RlIGFuZCBIaWdo
UGFzczJGaWx0ZXJOb2RlLgorICAgIHN3aXRjaCAodHlwZSkgeworICAgIC8vIEhpZ2hwYXNzIGFu
ZCBsb3dwYXNzIHNoYXJlIHRoZSBzYW1lIHBhcmFtZXRlcnMgYW5kIG9ubHkgZGlmZmVyIGluIGZp
bHRlciB0eXBlLgorICAgIGNhc2UgTG93UGFzczoKKyAgICBjYXNlIEhpZ2hQYXNzOgorICAgICAg
ICBtX3BhcmFtZXRlcjEgPSBBdWRpb1BhcmFtOjpjcmVhdGUoImZyZXF1ZW5jeSIsIDM1MC4wLCAy
MC4wLCBueXF1aXN0KTsKKyAgICAgICAgbV9wYXJhbWV0ZXIyID0gQXVkaW9QYXJhbTo6Y3JlYXRl
KCJyZXNvbmFuY2UiLCAwLjAsIC0yMC4wLCAyMC4wKTsKKyAgICAgICAgbV9wYXJhbWV0ZXIzID0g
QXVkaW9QYXJhbTo6Y3JlYXRlKCJ1bnVzZWQiLCAwLjAsIDAuMCwgMS4wKTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
CisKKyAgICBpZiAoYXV0b0luaXRpYWxpemUpCisgICAgICAgIGluaXRpYWxpemUoKTsKK30KKwor
QmlxdWFkUHJvY2Vzc29yOjp+QmlxdWFkUHJvY2Vzc29yKCkKK3sKKyAgICBpZiAoaXNJbml0aWFs
aXplZCgpKQorICAgICAgICB1bmluaXRpYWxpemUoKTsKK30KKworUGFzc093blB0cjxBdWRpb0RT
UEtlcm5lbD4gQmlxdWFkUHJvY2Vzc29yOjpjcmVhdGVLZXJuZWwoKQoreworICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgQmlxdWFkRFNQS2VybmVsKHRoaXMpKTsKK30KKwordm9pZCBCaXF1YWRQcm9j
ZXNzb3I6OmNoZWNrRm9yRGlydHlDb2VmZmljaWVudHMoKQoreworICAgIC8vIERlYWwgd2l0aCBz
bW9vdGhpbmcgLyBkZS16aXBwZXJpbmcuIFN0YXJ0IG91dCBhc3N1bWluZyBmaWx0ZXIgcGFyYW1l
dGVycyBhcmUgbm90IGNoYW5naW5nLgorCisgICAgLy8gVGhlIEJpcXVhZERTUEtlcm5lbCBvYmpl
Y3RzIHJlbHkgb24gdGhpcyB2YWx1ZSB0byBzZWUgaWYgdGhleSBuZWVkIHRvIHJlLWNvbXB1dGUg
dGhlaXIgaW50ZXJuYWwgZmlsdGVyIGNvZWZmaWNpZW50cy4KKyAgICBtX2ZpbHRlckNvZWZmaWNp
ZW50c0RpcnR5ID0gZmFsc2U7CisgICAgCisgICAgaWYgKG1faGFzSnVzdFJlc2V0KSB7CisgICAg
ICAgIC8vIFNuYXAgdG8gZXhhY3QgdmFsdWVzIGZpcnN0IHRpbWUgYWZ0ZXIgcmVzZXQsIHRoZW4g
c21vb3RoIGZvciBzdWJzZXF1ZW50IGNoYW5nZXMuCisgICAgICAgIG1fcGFyYW1ldGVyMS0+cmVz
ZXRTbW9vdGhlZFZhbHVlKCk7CisgICAgICAgIG1fcGFyYW1ldGVyMi0+cmVzZXRTbW9vdGhlZFZh
bHVlKCk7CisgICAgICAgIG1fcGFyYW1ldGVyMy0+cmVzZXRTbW9vdGhlZFZhbHVlKCk7CisgICAg
ICAgIG1fZmlsdGVyQ29lZmZpY2llbnRzRGlydHkgPSB0cnVlOworICAgICAgICBtX2hhc0p1c3RS
ZXNldCA9IGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFNtb290aCBhbGwgb2YgdGhl
IGZpbHRlciBwYXJhbWV0ZXJzLiBJZiB0aGV5IGhhdmVuJ3QgeWV0IGNvbnZlcmdlZCB0byB0aGVp
ciB0YXJnZXQgdmFsdWUgdGhlbiBtYXJrIGNvZWZmaWNpZW50cyBhcyBkaXJ0eS4KKyAgICAgICAg
Ym9vbCBpc1N0YWJsZTEgPSBtX3BhcmFtZXRlcjEtPnNtb290aCgpOworICAgICAgICBib29sIGlz
U3RhYmxlMiA9IG1fcGFyYW1ldGVyMi0+c21vb3RoKCk7CisgICAgICAgIGJvb2wgaXNTdGFibGUz
ID0gbV9wYXJhbWV0ZXIzLT5zbW9vdGgoKTsKKyAgICAgICAgaWYgKCEoaXNTdGFibGUxICYmIGlz
U3RhYmxlMiAmJiBpc1N0YWJsZTMpKQorICAgICAgICAgICAgbV9maWx0ZXJDb2VmZmljaWVudHNE
aXJ0eSA9IHRydWU7CisgICAgfQorfQorCit2b2lkIEJpcXVhZFByb2Nlc3Nvcjo6cHJvY2Vzcyhj
b25zdCBBdWRpb0J1cyogc291cmNlLCBBdWRpb0J1cyogZGVzdGluYXRpb24sIHNpemVfdCBmcmFt
ZXNUb1Byb2Nlc3MpCit7CisgICAgaWYgKCFpc0luaXRpYWxpemVkKCkpIHsKKyAgICAgICAgZGVz
dGluYXRpb24tPnplcm8oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAg
Y2hlY2tGb3JEaXJ0eUNvZWZmaWNpZW50cygpOworICAgICAgICAgICAgCisgICAgLy8gRm9yIGVh
Y2ggY2hhbm5lbCBvZiBvdXIgaW5wdXQsIHByb2Nlc3MgdXNpbmcgdGhlIGNvcnJlc3BvbmRpbmcg
QmlxdWFkRFNQS2VybmVsIGludG8gdGhlIG91dHB1dCBjaGFubmVsLgorICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2tlcm5lbHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fa2VybmVsc1tp
XS0+cHJvY2Vzcyhzb3VyY2UtPmNoYW5uZWwoaSktPmRhdGEoKSwgZGVzdGluYXRpb24tPmNoYW5u
ZWwoaSktPm11dGFibGVEYXRhKCksIGZyYW1lc1RvUHJvY2Vzcyk7Cit9CisKK3ZvaWQgQmlxdWFk
UHJvY2Vzc29yOjpzZXRUeXBlKEZpbHRlclR5cGUgdHlwZSkKK3sKKyAgICBpZiAodHlwZSAhPSBt
X3R5cGUpIHsKKyAgICAgICAgbV90eXBlID0gdHlwZTsKKyAgICAgICAgcmVzZXQoKTsgLy8gVGhl
IGZpbHRlciBzdGF0ZSBtdXN0IGJlIHJlc2V0IG9ubHkgaWYgdGhlIHR5cGUgaGFzIGNoYW5nZWQu
CisgICAgfQorfQorCit2b2lkIEJpcXVhZFByb2Nlc3Nvcjo6Z2V0RnJlcXVlbmN5UmVzcG9uc2Uo
aW50IG5GcmVxdWVuY2llcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBmbG9hdCogZnJlcXVlbmN5SHosCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmxvYXQqIG1hZ1Jlc3BvbnNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBwaGFzZVJlc3BvbnNlKQoreworICAgIC8v
IENvbXB1dGUgdGhlIGZyZXF1ZW5jeSByZXNwb25zZSBvbiBhIHNlcGFyYXRlIHRlbXBvcmFyeSBr
ZXJuZWwKKyAgICAvLyB0byBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIHRoZSBwcm9jZXNzaW5nIHJ1
bm5pbmcgaW4gdGhlIGF1ZGlvCisgICAgLy8gdGhyZWFkIG9uIHRoZSBtYWluIGtlcm5lbHMuCisg
ICAgCisgICAgT3duUHRyPEJpcXVhZERTUEtlcm5lbD4gcmVzcG9uc2VLZXJuZWwgPSBhZG9wdFB0
cihuZXcgQmlxdWFkRFNQS2VybmVsKHRoaXMpKTsKKworICAgIHJlc3BvbnNlS2VybmVsLT5nZXRG
cmVxdWVuY3lSZXNwb25zZShuRnJlcXVlbmNpZXMsIGZyZXF1ZW5jeUh6LCBtYWdSZXNwb25zZSwg
cGhhc2VSZXNwb25zZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0JpcXVhZFByb2Nlc3Nvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmgJKHJldmlzaW9uIDExMTQzMykJKGZyb20gU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmg6MTExNDMzKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCaXF1YWRQcm9jZXNzb3JfaAor
I2RlZmluZSBCaXF1YWRQcm9jZXNzb3JfaAorCisjaW5jbHVkZSAiQXVkaW9EU1BLZXJuZWwuaCIK
KyNpbmNsdWRlICJBdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5oIgorI2luY2x1ZGUgIkF1ZGlvTm9k
ZS5oIgorI2luY2x1ZGUgIkF1ZGlvUGFyYW0uaCIKKyNpbmNsdWRlICJCaXF1YWQuaCIKKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQmlxdWFkUHJv
Y2Vzc29yIGlzIGFuIEF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yIHdoaWNoIHVzZXMgQmlxdWFkIG9i
amVjdHMgdG8gaW1wbGVtZW50IHNldmVyYWwgY29tbW9uIGZpbHRlcnMuCisKK2NsYXNzIEJpcXVh
ZFByb2Nlc3NvciA6IHB1YmxpYyBBdWRpb0RTUEtlcm5lbFByb2Nlc3NvciB7CitwdWJsaWM6Cisg
ICAgZW51bSBGaWx0ZXJUeXBlIHsKKyAgICAgICAgTG93UGFzcyA9IDAsCisgICAgICAgIEhpZ2hQ
YXNzID0gMSwKKyAgICAgICAgQmFuZFBhc3MgPSAyLAorICAgICAgICBMb3dTaGVsZiA9IDMsCisg
ICAgICAgIEhpZ2hTaGVsZiA9IDQsCisgICAgICAgIFBlYWtpbmcgPSA1LAorICAgICAgICBOb3Rj
aCA9IDYsCisgICAgICAgIEFsbHBhc3MgPSA3CisgICAgfTsKKworICAgIEJpcXVhZFByb2Nlc3Nv
cihmbG9hdCBzYW1wbGVSYXRlLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscywgYm9vbCBhdXRvSW5p
dGlhbGl6ZSk7CisKKyAgICAvLyBPbGQgY29uc3RydWN0b3IgdXNlZCBieSBkZXByZWNhdGVkIExv
d1Bhc3MyRmlsdGVyTm9kZSBhbmQgSGlnaFBhc3MyRmlsdGVyTm9kZQorICAgIEJpcXVhZFByb2Nl
c3NvcihGaWx0ZXJUeXBlLCBmbG9hdCBzYW1wbGVSYXRlLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVs
cywgYm9vbCBhdXRvSW5pdGlhbGl6ZSA9IHRydWUpOworCisgICAgdmlydHVhbCB+QmlxdWFkUHJv
Y2Vzc29yKCk7CisgICAgCisgICAgdmlydHVhbCBQYXNzT3duUHRyPEF1ZGlvRFNQS2VybmVsPiBj
cmVhdGVLZXJuZWwoKTsKKyAgICAgICAgCisgICAgdmlydHVhbCB2b2lkIHByb2Nlc3MoY29uc3Qg
QXVkaW9CdXMqIHNvdXJjZSwgQXVkaW9CdXMqIGRlc3RpbmF0aW9uLCBzaXplX3QgZnJhbWVzVG9Q
cm9jZXNzKTsKKworICAgIC8vIEdldCB0aGUgbWFnbml0dWRlIGFuZCBwaGFzZSByZXNwb25zZSBv
ZiB0aGUgZmlsdGVyIGF0IHRoZSBnaXZlbgorICAgIC8vIHNldCBvZiBmcmVxdWVuY2llcyAoaW4g
SHopLiBUaGUgcGhhc2UgcmVzcG9uc2UgaXMgaW4gcmFkaWFucy4KKyAgICB2b2lkIGdldEZyZXF1
ZW5jeVJlc3BvbnNlKGludCBuRnJlcXVlbmNpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBmbG9hdCogZnJlcXVlbmN5SHosCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmbG9hdCogbWFnUmVzcG9uc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
bG9hdCogcGhhc2VSZXNwb25zZSk7CisKKyAgICB2b2lkIGNoZWNrRm9yRGlydHlDb2VmZmljaWVu
dHMoKTsKKyAgICAKKyAgICBib29sIGZpbHRlckNvZWZmaWNpZW50c0RpcnR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9maWx0ZXJDb2VmZmljaWVudHNEaXJ0eTsgfQorCisgICAgQXVkaW9QYXJhbSogcGFy
YW1ldGVyMSgpIHsgcmV0dXJuIG1fcGFyYW1ldGVyMS5nZXQoKTsgfQorICAgIEF1ZGlvUGFyYW0q
IHBhcmFtZXRlcjIoKSB7IHJldHVybiBtX3BhcmFtZXRlcjIuZ2V0KCk7IH0KKyAgICBBdWRpb1Bh
cmFtKiBwYXJhbWV0ZXIzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXIzLmdldCgpOyB9CisKKyAgICBG
aWx0ZXJUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICB2b2lkIHNldFR5
cGUoRmlsdGVyVHlwZSk7CisKK3ByaXZhdGU6CisgICAgRmlsdGVyVHlwZSBtX3R5cGU7CisKKyAg
ICBSZWZQdHI8QXVkaW9QYXJhbT4gbV9wYXJhbWV0ZXIxOworICAgIFJlZlB0cjxBdWRpb1BhcmFt
PiBtX3BhcmFtZXRlcjI7CisgICAgUmVmUHRyPEF1ZGlvUGFyYW0+IG1fcGFyYW1ldGVyMzsKKwor
ICAgIC8vIHNvIERTUCBrZXJuZWxzIGtub3cgd2hlbiB0byByZS1jb21wdXRlIGNvZWZmaWNpZW50
cworICAgIGJvb2wgbV9maWx0ZXJDb2VmZmljaWVudHNEaXJ0eTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEJpcXVhZFByb2Nlc3Nvcl9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAJKHJldmlz
aW9uIDExMTQzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5j
cHA6MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Db252b2x2ZXJO
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJD
b252b2x2ZXJOb2RlLmgiCisKKyNpbmNsdWRlICJBdWRpb0J1ZmZlci5oIgorI2luY2x1ZGUgIkF1
ZGlvQ29udGV4dC5oIgorI2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0LmgiCisjaW5jbHVkZSAiQXVk
aW9Ob2RlT3V0cHV0LmgiCisjaW5jbHVkZSAiUmV2ZXJiLmgiCisjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KKworLy8gTm90ZSBhYm91dCBlbXBpcmljYWwgdHVuaW5nOgorLy8gVGhlIG1heGlt
dW0gRkZUIHNpemUgYWZmZWN0cyByZXZlcmIgcGVyZm9ybWFuY2UgYW5kIGFjY3VyYWN5LgorLy8g
SWYgdGhlIHJldmVyYiBpcyBzaW5nbGUtdGhyZWFkZWQgYW5kIHByb2Nlc3NlcyBlbnRpcmVseSBp
biB0aGUgcmVhbC10aW1lIGF1ZGlvIHRocmVhZCwKKy8vIGl0J3MgaW1wb3J0YW50IG5vdCB0byBt
YWtlIHRoaXMgdG9vIGhpZ2guICBJbiB0aGlzIGNhc2UgODE5MiBpcyBhIGdvb2QgdmFsdWUuCisv
LyBCdXQsIHRoZSBSZXZlcmIgb2JqZWN0IGlzIG11bHRpLXRocmVhZGVkLCBzbyB3ZSB3YW50IHRo
aXMgYXMgaGlnaCBhcyBwb3NzaWJsZSB3aXRob3V0IGxvc2luZyB0b28gbXVjaCBhY2N1cmFjeS4K
Ky8vIFZlcnkgbGFyZ2UgRkZUcyB3aWxsIGhhdmUgd29yc2UgcGhhc2UgZXJyb3JzLiBHaXZlbiB0
aGVzZSBjb25zdHJhaW50cyAzMjc2OCBpcyBhIGdvb2QgY29tcHJvbWlzZS4KK2NvbnN0IHNpemVf
dCBNYXhGRlRTaXplID0gMzI3Njg7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ29udm9sdmVy
Tm9kZTo6Q29udm9sdmVyTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJh
dGUpCisgICAgOiBBdWRpb05vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkKKyAgICAsIG1fbm9ybWFs
aXplKHRydWUpCit7CisgICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRo
aXMpKSk7CisgICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywg
MikpKTsKKyAgICAKKyAgICBzZXROb2RlVHlwZShOb2RlVHlwZUNvbnZvbHZlcik7CisgICAgCisg
ICAgaW5pdGlhbGl6ZSgpOworfQorCitDb252b2x2ZXJOb2RlOjp+Q29udm9sdmVyTm9kZSgpCit7
CisgICAgdW5pbml0aWFsaXplKCk7Cit9CisKK3ZvaWQgQ29udm9sdmVyTm9kZTo6cHJvY2Vzcyhz
aXplX3QgZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIEF1ZGlvQnVzKiBvdXRwdXRCdXMgPSBvdXRw
dXQoMCktPmJ1cygpOworICAgIEFTU0VSVChvdXRwdXRCdXMpOworCisgICAgLy8gU3luY2hyb25p
emUgd2l0aCBwb3NzaWJsZSBkeW5hbWljIGNoYW5nZXMgdG8gdGhlIGltcHVsc2UgcmVzcG9uc2Uu
CisgICAgaWYgKG1fcHJvY2Vzc0xvY2sudHJ5TG9jaygpKSB7CisgICAgICAgIGlmICghaXNJbml0
aWFsaXplZCgpIHx8ICFtX3JldmVyYi5nZXQoKSkKKyAgICAgICAgICAgIG91dHB1dEJ1cy0+emVy
bygpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIFByb2Nlc3MgdXNpbmcgdGhlIGNv
bnZvbHV0aW9uIGVuZ2luZS4KKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBjYW4gaGFuZGxl
IHRoZSBjYXNlIHdoZXJlIG5vdGhpbmcgaXMgY29ubmVjdGVkIHRvIHRoZSBpbnB1dCwgaW4gd2hp
Y2ggY2FzZSB3ZSdsbCBqdXN0IGZlZWQgc2lsZW5jZSBpbnRvIHRoZSBjb252b2x2ZXIuCisgICAg
ICAgICAgICAvLyBGSVhNRTogIElmIHdlIHdhbnRlZCB0byBnZXQgZmFuY3kgd2UgY291bGQgdHJ5
IHRvIGZhY3RvciBpbiB0aGUgJ3RhaWwgdGltZScgYW5kIHN0b3AgcHJvY2Vzc2luZyBvbmNlIHRo
ZSB0YWlsIGRpZXMgZG93biBpZgorICAgICAgICAgICAgLy8gd2Uga2VlcCBnZXR0aW5nIGZlZCBz
aWxlbmNlLgorICAgICAgICAgICAgbV9yZXZlcmItPnByb2Nlc3MoaW5wdXQoMCktPmJ1cygpLCBv
dXRwdXRCdXMsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IG1fcHJvY2Vzc0xvY2sudW5sb2NrKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVG9vIGJh
ZCAtIHRoZSB0cnlMb2NrKCkgZmFpbGVkLiAgV2UgbXVzdCBiZSBpbiB0aGUgbWlkZGxlIG9mIHNl
dHRpbmcgYSBuZXcgaW1wdWxzZSByZXNwb25zZS4KKyAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7
CisgICAgfQorfQorCit2b2lkIENvbnZvbHZlck5vZGU6OnJlc2V0KCkKK3sKKyAgICBNdXRleExv
Y2tlciBsb2NrZXIobV9wcm9jZXNzTG9jayk7CisgICAgaWYgKG1fcmV2ZXJiLmdldCgpKQorICAg
ICAgICBtX3JldmVyYi0+cmVzZXQoKTsKK30KKwordm9pZCBDb252b2x2ZXJOb2RlOjppbml0aWFs
aXplKCkKK3sKKyAgICBpZiAoaXNJbml0aWFsaXplZCgpKQorICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgIEF1ZGlvTm9kZTo6aW5pdGlhbGl6ZSgpOworfQorCit2b2lkIENvbnZvbHZlck5v
ZGU6OnVuaW5pdGlhbGl6ZSgpCit7CisgICAgaWYgKCFpc0luaXRpYWxpemVkKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fcmV2ZXJiLmNsZWFyKCk7CisgICAgQXVkaW9Ob2RlOjp1bmluaXRp
YWxpemUoKTsKK30KKwordm9pZCBDb252b2x2ZXJOb2RlOjpzZXRCdWZmZXIoQXVkaW9CdWZmZXIq
IGJ1ZmZlcikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIAorICAgIEFTU0VS
VChidWZmZXIpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNp
Z25lZCBudW1iZXJPZkNoYW5uZWxzID0gYnVmZmVyLT5udW1iZXJPZkNoYW5uZWxzKCk7CisgICAg
c2l6ZV90IGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlci0+bGVuZ3RoKCk7CisKKyAgICAvLyBUaGUgY3Vy
cmVudCBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyB1cCB0byBmb3VyIGNoYW5uZWwgaW1wdWxzZSBy
ZXNwb25zZXMsIHdoaWNoIGFyZSBpbnRlcnByZXRlZCBhcyB0cnVlLXN0ZXJlbyAoc2VlIFJldmVy
YiBjbGFzcykuCisgICAgYm9vbCBpc0J1ZmZlckdvb2QgPSBudW1iZXJPZkNoYW5uZWxzID4gMCAm
JiBudW1iZXJPZkNoYW5uZWxzIDw9IDQgJiYgYnVmZmVyTGVuZ3RoOworICAgIEFTU0VSVChpc0J1
ZmZlckdvb2QpOworICAgIGlmICghaXNCdWZmZXJHb29kKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBXcmFwIHRoZSBBdWRpb0J1ZmZlciBieSBhbiBBdWRpb0J1cy4gSXQncyBhbiBlZmZpY2ll
bnQgcG9pbnRlciBzZXQgYW5kIG5vdCBhIG1lbWNweSgpLgorICAgIC8vIFRoaXMgbWVtb3J5IGlz
IHNpbXBseSB1c2VkIGluIHRoZSBSZXZlcmIgY29uc3RydWN0b3IgYW5kIG5vIHJlZmVyZW5jZSB0
byBpdCBpcyBrZXB0IGZvciBsYXRlciB1c2UgaW4gdGhhdCBjbGFzcy4KKyAgICBBdWRpb0J1cyBi
dWZmZXJCdXMobnVtYmVyT2ZDaGFubmVscywgYnVmZmVyTGVuZ3RoLCBmYWxzZSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkKKyAgICAgICAgYnVm
ZmVyQnVzLnNldENoYW5uZWxNZW1vcnkoaSwgYnVmZmVyLT5nZXRDaGFubmVsRGF0YShpKS0+ZGF0
YSgpLCBidWZmZXJMZW5ndGgpOworCisgICAgYnVmZmVyQnVzLnNldFNhbXBsZVJhdGUoYnVmZmVy
LT5zYW1wbGVSYXRlKCkpOworCisgICAgLy8gQ3JlYXRlIHRoZSByZXZlcmIgd2l0aCB0aGUgZ2l2
ZW4gaW1wdWxzZSByZXNwb25zZS4KKyAgICBib29sIHVzZUJhY2tncm91bmRUaHJlYWRzID0gIWNv
bnRleHQoKS0+aXNPZmZsaW5lQ29udGV4dCgpOworICAgIE93blB0cjxSZXZlcmI+IHJldmVyYiA9
IGFkb3B0UHRyKG5ldyBSZXZlcmIoJmJ1ZmZlckJ1cywgQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6
ZUluRnJhbWVzLCBNYXhGRlRTaXplLCAyLCB1c2VCYWNrZ3JvdW5kVGhyZWFkcywgbV9ub3JtYWxp
emUpKTsKKworICAgIHsKKyAgICAgICAgLy8gU3luY2hyb25pemUgd2l0aCBwcm9jZXNzKCkuCisg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Byb2Nlc3NMb2NrKTsKKyAgICAgICAgbV9yZXZl
cmIgPSByZXZlcmIucmVsZWFzZSgpOworICAgICAgICBtX2J1ZmZlciA9IGJ1ZmZlcjsKKyAgICB9
Cit9CisKK0F1ZGlvQnVmZmVyKiBDb252b2x2ZXJOb2RlOjpidWZmZXIoKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgcmV0dXJuIG1fYnVmZmVyLmdldCgpOworfQorCitkb3Vi
bGUgQ29udm9sdmVyTm9kZTo6dGFpbFRpbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3JldmVy
YiA/IG1fcmV2ZXJiLT5pbXB1bHNlUmVzcG9uc2VMZW5ndGgoKSAvIHN0YXRpY19jYXN0PGRvdWJs
ZT4oc2FtcGxlUmF0ZSgpKSA6IDA7Cit9CisKK2RvdWJsZSBDb252b2x2ZXJOb2RlOjpsYXRlbmN5
VGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmV2ZXJiID8gbV9yZXZlcmItPmxhdGVuY3lG
cmFtZXMoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oc2FtcGxlUmF0ZSgpKSA6IDA7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaAko
cmV2aXNpb24gMTExNDMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJO
b2RlLmg6MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Db252b2x2
ZXJOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgQ29udm9sdmVyTm9kZV9oCisjZGVmaW5lIENvbnZvbHZlck5vZGVfaAorCisjaW5jbHVk
ZSAiQXVkaW9Ob2RlLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQXVkaW9CdWZmZXI7CitjbGFzcyBSZXZlcmI7CisgICAgCitjbGFzcyBDb252
b2x2ZXJOb2RlIDogcHVibGljIEF1ZGlvTm9kZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q29udm9sdmVyTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQg
c2FtcGxlUmF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29udm9sdmVy
Tm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKSk7ICAgICAgCisgICAgfQorICAgIAorICAgIHZpcnR1
YWwgfkNvbnZvbHZlck5vZGUoKTsKKyAgICAKKyAgICAvLyBBdWRpb05vZGUKKyAgICB2aXJ0dWFs
IHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVzZXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIHZpcnR1YWwgdm9p
ZCB1bmluaXRpYWxpemUoKTsKKworICAgIC8vIEltcHVsc2UgcmVzcG9uc2VzCisgICAgdm9pZCBz
ZXRCdWZmZXIoQXVkaW9CdWZmZXIqKTsKKyAgICBBdWRpb0J1ZmZlciogYnVmZmVyKCk7CisKKyAg
ICBib29sIG5vcm1hbGl6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9ybWFsaXplOyB9CisgICAgdm9p
ZCBzZXROb3JtYWxpemUoYm9vbCBub3JtYWxpemUpIHsgbV9ub3JtYWxpemUgPSBub3JtYWxpemU7
IH0KKworcHJpdmF0ZToKKyAgICBDb252b2x2ZXJOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNh
bXBsZVJhdGUpOworCisgICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFOworCisg
ICAgT3duUHRyPFJldmVyYj4gbV9yZXZlcmI7CisgICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBtX2J1
ZmZlcjsKKworICAgIC8vIFRoaXMgc3luY2hyb25pemVzIGR5bmFtaWMgY2hhbmdlcyB0byB0aGUg
Y29udm9sdXRpb24gaW1wdWxzZSByZXNwb25zZSB3aXRoIHByb2Nlc3MoKS4KKyAgICBtdXRhYmxl
IE11dGV4IG1fcHJvY2Vzc0xvY2s7CisKKyAgICAvLyBOb3JtYWxpemUgdGhlIGltcHVsc2UgcmVz
cG9uc2Ugb3Igbm90LiBNdXN0IGRlZmF1bHQgdG8gdHJ1ZS4KKyAgICBib29sIG1fbm9ybWFsaXpl
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ29udm9sdmVyTm9k
ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQ29udm9s
dmVyTm9kZS5pZGwJKHJldmlzaW9uIDExMTQzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQ29udm9sdmVyTm9kZS5pZGw6MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9Db252b2x2ZXJOb2RlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworbW9kdWxlIGF1ZGlvIHsKKyAgICAvLyBBIGxpbmVhciBjb252b2x1dGlv
biBlZmZlY3QKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8s
CisgICAgICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0CisgICAgXSBDb252b2x2ZXJOb2RlIDogQXVk
aW9Ob2RlIHsKKyAgICAgICAgYXR0cmlidXRlIFtKU0N1c3RvbVNldHRlcl0gQXVkaW9CdWZmZXIg
YnVmZmVyOworICAgICAgICBhdHRyaWJ1dGUgYm9vbGVhbiBub3JtYWxpemU7CisgICAgfTsKK30K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRE9NV2luZG93V2ViQXVkaW8u
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRE9NV2lu
ZG93V2ViQXVkaW8uaWRsCShyZXZpc2lvbiAxMTE0MzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0RPTVdpbmRvd1dlYkF1ZGlvLmlkbDoxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0RPTVdpbmRvd1dlYkF1ZGlvLmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSB3aW5kb3cgewor
CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAorICAgICAg
ICBTdXBwbGVtZW50YWw9RE9NV2luZG93CisgICAgXSBET01XaW5kb3dXZWJBdWRpbyB7CisjaWYg
IWRlZmluZWQoTEFOR1VBR0VfQ1BQKSB8fCAhTEFOR1VBR0VfQ1BQCisgICAgICAgIGF0dHJpYnV0
ZSBbSlNDdXN0b21HZXR0ZXIsIFY4RW5hYmxlZEF0UnVudGltZV0gQXVkaW9Db250ZXh0Q29uc3Ry
dWN0b3Igd2Via2l0QXVkaW9Db250ZXh0OworICAgICAgICBhdHRyaWJ1dGUgQXVkaW9QYW5uZXJO
b2RlQ29uc3RydWN0b3Igd2Via2l0QXVkaW9QYW5uZXJOb2RlOworICAgICAgICBhdHRyaWJ1dGUg
QXVkaW9Qcm9jZXNzaW5nRXZlbnRDb25zdHJ1Y3RvciBBdWRpb1Byb2Nlc3NpbmdFdmVudDsKKyAg
ICAgICAgYXR0cmlidXRlIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudENvbnN0cnVjdG9yIE9m
ZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDsKKyNlbmRpZgorICAgIH07CisKK30KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlZmF1
bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAJKHJldmlzaW9uIDExMTQzMykJKGZyb20gU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDoxMTE0MzMp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0
aW9uTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRl
ICJEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaCIKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2Rl
OjpEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0KQorICAg
IDogQXVkaW9EZXN0aW5hdGlvbk5vZGUoY29udGV4dCwgQXVkaW9EZXN0aW5hdGlvbjo6aGFyZHdh
cmVTYW1wbGVSYXRlKCkpCit7Cit9CisKK0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6fkRl
ZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZSgpCit7CisgICAgdW5pbml0aWFsaXplKCk7Cit9CisK
K3ZvaWQgRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjppbml0aWFsaXplKCkKK3sKKyAgICBp
ZiAoaXNJbml0aWFsaXplZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCBoYXJkd2Fy
ZVNhbXBsZVJhdGUgPSBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJhdGUoKTsKKyAg
ICBMT0coV2ViQXVkaW8sICI+Pj4+IGhhcmR3YXJlU2FtcGxlUmF0ZSA9ICVmXG4iLCBoYXJkd2Fy
ZVNhbXBsZVJhdGUpOworICAgIAorICAgIG1fZGVzdGluYXRpb24gPSBBdWRpb0Rlc3RpbmF0aW9u
OjpjcmVhdGUoKnRoaXMsIGhhcmR3YXJlU2FtcGxlUmF0ZSk7CisgICAgCisgICAgQXVkaW9Ob2Rl
Ojppbml0aWFsaXplKCk7Cit9CisKK3ZvaWQgRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjp1
bmluaXRpYWxpemUoKQoreworICAgIGlmICghaXNJbml0aWFsaXplZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2Rlc3RpbmF0aW9uLT5zdG9wKCk7CisKKyAgICBBdWRpb05vZGU6OnVuaW5p
dGlhbGl6ZSgpOworfQorCit2b2lkIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6c3RhcnRS
ZW5kZXJpbmcoKQoreworICAgIEFTU0VSVChpc0luaXRpYWxpemVkKCkpOworICAgIGlmIChpc0lu
aXRpYWxpemVkKCkpCisgICAgICAgIG1fZGVzdGluYXRpb24tPnN0YXJ0KCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVmYXVs
dEF1ZGlvRGVzdGluYXRpb25Ob2RlLmgJKHJldmlzaW9uIDExMTQzMykJKGZyb20gU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmg6MTExNDMzKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGVfaAorI2RlZmluZSBEZWZhdWx0QXVkaW9EZXN0
aW5hdGlvbk5vZGVfaAorCisjaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbi5oIgorI2luY2x1ZGUg
IkF1ZGlvRGVzdGluYXRpb25Ob2RlLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvQ29udGV4dDsKKyAgICAKK2NsYXNzIERlZmF1
bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZSA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uTm9kZSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2Rl
PiBjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUoY29udGV4dCkpOyAgICAgCisg
ICAgfQorCisgICAgdmlydHVhbCB+RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlKCk7CisgICAg
CisgICAgLy8gQXVkaW9Ob2RlICAgCisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdW5pbml0aWFsaXplKCk7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0UmVu
ZGVyaW5nKCk7CisgICAgCitwcml2YXRlOgorICAgIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9k
ZShBdWRpb0NvbnRleHQqKTsKKworICAgIE93blB0cjxBdWRpb0Rlc3RpbmF0aW9uPiBtX2Rlc3Rp
bmF0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRGVmYXVs
dEF1ZGlvRGVzdGluYXRpb25Ob2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vRGVsYXlEU1BLZXJuZWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuY3BwCShyZXZpc2lvbiAxMTE0MzMpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5RFNQS2VybmVsLmNwcDoxMTE0MzMpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5RFNQS2VybmVsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJEZWxheURTUEtlcm5lbC5o
IgorCisjaW5jbHVkZSAiQXVkaW9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisK
K3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK2NvbnN0IGZsb2F0IFNtb290aGluZ1RpbWVDb25zdGFu
dCA9IDAuMDIwZjsgLy8gMjBtcworICAKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRGVsYXlEU1BL
ZXJuZWw6OkRlbGF5RFNQS2VybmVsKERlbGF5UHJvY2Vzc29yKiBwcm9jZXNzb3IpCisgICAgOiBB
dWRpb0RTUEtlcm5lbChwcm9jZXNzb3IpCisgICAgLCBtX3dyaXRlSW5kZXgoMCkKKyAgICAsIG1f
Zmlyc3RUaW1lKHRydWUpCit7CisgICAgQVNTRVJUKHByb2Nlc3NvciAmJiBwcm9jZXNzb3ItPnNh
bXBsZVJhdGUoKSA+IDApOworICAgIGlmICghcHJvY2Vzc29yKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX21heERlbGF5VGltZSA9IHByb2Nlc3Nvci0+bWF4RGVsYXlUaW1lKCk7CisgICAgbV9i
dWZmZXIuYWxsb2NhdGUoc3RhdGljX2Nhc3Q8c2l6ZV90Pihwcm9jZXNzb3ItPnNhbXBsZVJhdGUo
KSAqIG1fbWF4RGVsYXlUaW1lKSk7CisgICAgbV9idWZmZXIuemVybygpOworCisgICAgbV9zbW9v
dGhpbmdSYXRlID0gQXVkaW9VdGlsaXRpZXM6OmRpc2NyZXRlVGltZUNvbnN0YW50Rm9yU2FtcGxl
UmF0ZShTbW9vdGhpbmdUaW1lQ29uc3RhbnQsIHByb2Nlc3Nvci0+c2FtcGxlUmF0ZSgpKTsKK30K
KworRGVsYXlEU1BLZXJuZWw6OkRlbGF5RFNQS2VybmVsKGRvdWJsZSBtYXhEZWxheVRpbWUsIGZs
b2F0IHNhbXBsZVJhdGUpCisgICAgOiBBdWRpb0RTUEtlcm5lbChzYW1wbGVSYXRlKQorICAgICwg
bV9tYXhEZWxheVRpbWUobWF4RGVsYXlUaW1lKQorICAgICwgbV93cml0ZUluZGV4KDApCisgICAg
LCBtX2ZpcnN0VGltZSh0cnVlKQoreworICAgIEFTU0VSVChtYXhEZWxheVRpbWUgPiAwLjApOwor
ICAgIGlmIChtYXhEZWxheVRpbWUgPD0gMC4wKQorICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgIHNpemVfdCBidWZmZXJMZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNhbXBsZVJhdGUg
KiBtYXhEZWxheVRpbWUpOworICAgIEFTU0VSVChidWZmZXJMZW5ndGgpOworICAgIGlmICghYnVm
ZmVyTGVuZ3RoKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9idWZmZXIuYWxsb2NhdGUo
YnVmZmVyTGVuZ3RoKTsKKyAgICBtX2J1ZmZlci56ZXJvKCk7CisKKyAgICBtX3Ntb290aGluZ1Jh
dGUgPSBBdWRpb1V0aWxpdGllczo6ZGlzY3JldGVUaW1lQ29uc3RhbnRGb3JTYW1wbGVSYXRlKFNt
b290aGluZ1RpbWVDb25zdGFudCwgc2FtcGxlUmF0ZSk7Cit9CisKK3ZvaWQgRGVsYXlEU1BLZXJu
ZWw6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCBzaXpl
X3QgZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIHNpemVfdCBidWZmZXJMZW5ndGggPSBtX2J1ZmZl
ci5zaXplKCk7CisgICAgZmxvYXQqIGJ1ZmZlciA9IG1fYnVmZmVyLmRhdGEoKTsKKworICAgIEFT
U0VSVChidWZmZXJMZW5ndGgpOworICAgIGlmICghYnVmZmVyTGVuZ3RoKQorICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgIEFTU0VSVChzb3VyY2UgJiYgZGVzdGluYXRpb24pOworICAgIGlm
ICghc291cmNlIHx8ICFkZXN0aW5hdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICBmbG9hdCBzYW1wbGVSYXRlID0gdGhpcy0+c2FtcGxlUmF0ZSgpOworICAgIGRvdWJsZSBkZWxh
eVRpbWUgPSBkZWxheVByb2Nlc3NvcigpID8gZGVsYXlQcm9jZXNzb3IoKS0+ZGVsYXlUaW1lKCkt
PnZhbHVlKCkgOiBtX2Rlc2lyZWREZWxheUZyYW1lcyAvIHNhbXBsZVJhdGU7CisKKyAgICAvLyBN
YWtlIHN1cmUgdGhlIGRlbGF5IHRpbWUgaXMgaW4gYSB2YWxpZCByYW5nZS4KKyAgICBkZWxheVRp
bWUgPSBtaW4obWF4RGVsYXlUaW1lKCksIGRlbGF5VGltZSk7CisgICAgZGVsYXlUaW1lID0gbWF4
KDAuMCwgZGVsYXlUaW1lKTsKKworICAgIGlmIChtX2ZpcnN0VGltZSkgeworICAgICAgICBtX2N1
cnJlbnREZWxheVRpbWUgPSBkZWxheVRpbWU7CisgICAgICAgIG1fZmlyc3RUaW1lID0gZmFsc2U7
CisgICAgfQorICAgIAorICAgIGludCBuID0gZnJhbWVzVG9Qcm9jZXNzOworICAgIHdoaWxlIChu
LS0pIHsKKyAgICAgICAgLy8gQXBwcm9hY2ggZGVzaXJlZCBkZWxheSB0aW1lLgorICAgICAgICBt
X2N1cnJlbnREZWxheVRpbWUgKz0gKGRlbGF5VGltZSAtIG1fY3VycmVudERlbGF5VGltZSkgKiBt
X3Ntb290aGluZ1JhdGU7CisKKyAgICAgICAgZG91YmxlIGRlc2lyZWREZWxheUZyYW1lcyA9IG1f
Y3VycmVudERlbGF5VGltZSAqIHNhbXBsZVJhdGU7CisKKyAgICAgICAgZG91YmxlIHJlYWRQb3Np
dGlvbiA9IG1fd3JpdGVJbmRleCArIGJ1ZmZlckxlbmd0aCAtIGRlc2lyZWREZWxheUZyYW1lczsK
KyAgICAgICAgaWYgKHJlYWRQb3NpdGlvbiA+PSBidWZmZXJMZW5ndGgpCisgICAgICAgICAgICBy
ZWFkUG9zaXRpb24gLT0gYnVmZmVyTGVuZ3RoOworCisgICAgICAgIC8vIExpbmVhcmx5IGludGVy
cG9sYXRlIGluLWJldHdlZW4gZGVsYXkgdGltZXMuCisgICAgICAgIGludCByZWFkSW5kZXgxID0g
c3RhdGljX2Nhc3Q8aW50PihyZWFkUG9zaXRpb24pOworICAgICAgICBpbnQgcmVhZEluZGV4MiA9
IChyZWFkSW5kZXgxICsgMSkgJSBidWZmZXJMZW5ndGg7CisgICAgICAgIGRvdWJsZSBpbnRlcnBv
bGF0aW9uRmFjdG9yID0gcmVhZFBvc2l0aW9uIC0gcmVhZEluZGV4MTsKKworICAgICAgICBkb3Vi
bGUgaW5wdXQgPSBzdGF0aWNfY2FzdDxmbG9hdD4oKnNvdXJjZSsrKTsKKyAgICAgICAgYnVmZmVy
W21fd3JpdGVJbmRleF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oaW5wdXQpOworICAgICAgICBtX3dy
aXRlSW5kZXggPSAobV93cml0ZUluZGV4ICsgMSkgJSBidWZmZXJMZW5ndGg7ICAgICAgICAKKyAg
ICAgICAgCisgICAgICAgIGRvdWJsZSBzYW1wbGUxID0gYnVmZmVyW3JlYWRJbmRleDFdOworICAg
ICAgICBkb3VibGUgc2FtcGxlMiA9IGJ1ZmZlcltyZWFkSW5kZXgyXTsKKyAgICAgICAgCisgICAg
ICAgIGRvdWJsZSBvdXRwdXQgPSAoMS4wIC0gaW50ZXJwb2xhdGlvbkZhY3RvcikgKiBzYW1wbGUx
ICsgaW50ZXJwb2xhdGlvbkZhY3RvciAqIHNhbXBsZTI7CisKKyAgICAgICAgKmRlc3RpbmF0aW9u
KysgPSBzdGF0aWNfY2FzdDxmbG9hdD4ob3V0cHV0KTsKKyAgICB9ICAgICAgICAKK30KKwordm9p
ZCBEZWxheURTUEtlcm5lbDo6cmVzZXQoKQoreworICAgIG1fZmlyc3RUaW1lID0gdHJ1ZTsKKyAg
ICBtX2J1ZmZlci56ZXJvKCk7Cit9CisKK2RvdWJsZSBEZWxheURTUEtlcm5lbDo6dGFpbFRpbWUo
KSBjb25zdAoreworICAgIHJldHVybiBtX21heERlbGF5VGltZTsKK30KKworZG91YmxlIERlbGF5
RFNQS2VybmVsOjpsYXRlbmN5VGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5RFNQS2VybmVsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWxheURTUEtlcm5lbC5o
CShyZXZpc2lvbiAxMTE0MzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5RFNQ
S2VybmVsLmg6MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWxh
eURTUEtlcm5lbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIERlbGF5RFNQS2VybmVsX2gKKyNkZWZpbmUgRGVsYXlEU1BLZXJuZWxfaAorCisj
aW5jbHVkZSAiQXVkaW9BcnJheS5oIgorI2luY2x1ZGUgIkF1ZGlvRFNQS2VybmVsLmgiCisjaW5j
bHVkZSAiRGVsYXlQcm9jZXNzb3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBE
ZWxheVByb2Nlc3NvcjsKKyAgICAKK2NsYXNzIERlbGF5RFNQS2VybmVsIDogcHVibGljIEF1ZGlv
RFNQS2VybmVsIHsKK3B1YmxpYzogIAorICAgIERlbGF5RFNQS2VybmVsKERlbGF5UHJvY2Vzc29y
Kik7CisgICAgRGVsYXlEU1BLZXJuZWwoZG91YmxlIG1heERlbGF5VGltZSwgZmxvYXQgc2FtcGxl
UmF0ZSk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIHByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJj
ZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVzZXQoKTsKKyAgICAKKyAgICBkb3VibGUgbWF4RGVsYXlUaW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXhEZWxheVRpbWU7IH0KKyAgICAKKyAgICB2b2lkIHNldERlbGF5RnJhbWVz
KGRvdWJsZSBudW1iZXJPZkZyYW1lcykgeyBtX2Rlc2lyZWREZWxheUZyYW1lcyA9IG51bWJlck9m
RnJhbWVzOyB9CisKKyAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJREU7CisKK3By
aXZhdGU6CisgICAgQXVkaW9GbG9hdEFycmF5IG1fYnVmZmVyOworICAgIGRvdWJsZSBtX21heERl
bGF5VGltZTsKKyAgICBpbnQgbV93cml0ZUluZGV4OworICAgIGRvdWJsZSBtX2N1cnJlbnREZWxh
eVRpbWU7CisgICAgZG91YmxlIG1fc21vb3RoaW5nUmF0ZTsKKyAgICBib29sIG1fZmlyc3RUaW1l
OworICAgIGRvdWJsZSBtX2Rlc2lyZWREZWxheUZyYW1lczsKKworICAgIERlbGF5UHJvY2Vzc29y
KiBkZWxheVByb2Nlc3NvcigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PERlbGF5UHJvY2Vzc29yKj4o
cHJvY2Vzc29yKCkpOyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBEZWxheURTUEtlcm5lbF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0RlbGF5Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9EZWxheU5vZGUuY3BwCShyZXZpc2lvbiAxMTE0MzMpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0RlbGF5Tm9kZS5jcHA6MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9EZWxheU5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElP
KQorCisjaW5jbHVkZSAiRGVsYXlOb2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRGVs
YXlOb2RlOjpEZWxheU5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRl
LCBkb3VibGUgbWF4RGVsYXlUaW1lKQorICAgIDogQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUoY29u
dGV4dCwgc2FtcGxlUmF0ZSkKK3sKKyAgICBtX3Byb2Nlc3NvciA9IGFkb3B0UHRyKG5ldyBEZWxh
eVByb2Nlc3NvcihzYW1wbGVSYXRlLCAxLCBtYXhEZWxheVRpbWUpKTsKKyAgICBkZWxheVRpbWUo
KS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICBzZXROb2RlVHlwZShOb2RlVHlwZURlbGF5KTsK
K30KKworQXVkaW9QYXJhbSogRGVsYXlOb2RlOjpkZWxheVRpbWUoKQoreworICAgIHJldHVybiBk
ZWxheVByb2Nlc3NvcigpLT5kZWxheVRpbWUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vRGVsYXlOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9EZWxheU5vZGUuaAkocmV2aXNpb24gMTExNDMzKQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheU5vZGUuaDoxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERlbGF5Tm9kZV9oCisjZGVmaW5lIERlbGF5Tm9k
ZV9oCisKKyNpbmNsdWRlICJBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oIgorI2luY2x1ZGUgIkRl
bGF5UHJvY2Vzc29yLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBBdWRpb1BhcmFtOworCitjbGFzcyBEZWxheU5vZGUgOiBwdWJs
aWMgQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPERlbGF5Tm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxl
UmF0ZSwgZG91YmxlIG1heERlbGF5VGltZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgRGVsYXlOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUsIG1heERlbGF5VGltZSkpOyAgICAg
IAorICAgIH0KKworICAgIEF1ZGlvUGFyYW0qIGRlbGF5VGltZSgpOworCitwcml2YXRlOgorICAg
IERlbGF5Tm9kZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlLCBkb3VibGUgbWF4RGVs
YXlUaW1lKTsKKworICAgIERlbGF5UHJvY2Vzc29yKiBkZWxheVByb2Nlc3NvcigpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PERlbGF5UHJvY2Vzc29yKj4ocHJvY2Vzc29yKCkpOyB9Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBEZWxheU5vZGVfaApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWxheU5vZGUuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVsYXlOb2RlLmlkbAkocmV2aXNpb24gMTEx
NDMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheU5vZGUuaWRsOjExMTQzMykK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVsYXlOb2RlLmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIGF1ZGlvIHsKKyAg
ICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCisgICAgICAgIEpT
R2VuZXJhdGVUb0pTT2JqZWN0CisgICAgXSBEZWxheU5vZGUgOiBBdWRpb05vZGUgeworICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9QYXJhbSBkZWxheVRpbWU7CisgICAgfTsKK30KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVsYXlQcm9jZXNz
b3IuY3BwCShyZXZpc2lvbiAxMTE0MzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0Rl
bGF5UHJvY2Vzc29yLmNwcDoxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0RlbGF5UHJvY2Vzc29yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykK
KworI2luY2x1ZGUgIkRlbGF5UHJvY2Vzc29yLmgiCisgCisjaW5jbHVkZSAiRGVsYXlEU1BLZXJu
ZWwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEZWxheVByb2Nlc3Nvcjo6RGVsYXlQcm9j
ZXNzb3IoZmxvYXQgc2FtcGxlUmF0ZSwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgZG91Ymxl
IG1heERlbGF5VGltZSkKKyAgICA6IEF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yKHNhbXBsZVJhdGUs
IG51bWJlck9mQ2hhbm5lbHMpCisgICAgLCBtX21heERlbGF5VGltZShtYXhEZWxheVRpbWUpCit7
CisgICAgbV9kZWxheVRpbWUgPSBBdWRpb1BhcmFtOjpjcmVhdGUoImRlbGF5VGltZSIsIDAuMCwg
MC4wLCBtYXhEZWxheVRpbWUpOworfQorCitEZWxheVByb2Nlc3Nvcjo6fkRlbGF5UHJvY2Vzc29y
KCkKK3sKKyAgICBpZiAoaXNJbml0aWFsaXplZCgpKQorICAgICAgICB1bmluaXRpYWxpemUoKTsK
K30KKworUGFzc093blB0cjxBdWRpb0RTUEtlcm5lbD4gRGVsYXlQcm9jZXNzb3I6OmNyZWF0ZUtl
cm5lbCgpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxheURTUEtlcm5lbCh0aGlzKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVE
SU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5UHJvY2Vzc29y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWxheVBy
b2Nlc3Nvci5oCShyZXZpc2lvbiAxMTE0MzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0RlbGF5UHJvY2Vzc29yLmg6MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9EZWxheVByb2Nlc3Nvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIERlbGF5UHJvY2Vzc29yX2gKKyNkZWZpbmUgRGVsYXlQcm9jZXNz
b3JfaAorCisjaW5jbHVkZSAiQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuaCIKKyNpbmNsdWRlICJB
dWRpb1BhcmFtLmgiCisKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb0RTUEtlcm5l
bDsKKyAgICAKK2NsYXNzIERlbGF5UHJvY2Vzc29yIDogcHVibGljIEF1ZGlvRFNQS2VybmVsUHJv
Y2Vzc29yIHsKK3B1YmxpYzoKKyAgICBEZWxheVByb2Nlc3NvcihmbG9hdCBzYW1wbGVSYXRlLCB1
bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBkb3VibGUgbWF4RGVsYXlUaW1lKTsKKyAgICB2aXJ0
dWFsIH5EZWxheVByb2Nlc3NvcigpOworICAgIAorICAgIHZpcnR1YWwgUGFzc093blB0cjxBdWRp
b0RTUEtlcm5lbD4gY3JlYXRlS2VybmVsKCk7CisgICAgICAgIAorICAgIEF1ZGlvUGFyYW0qIGRl
bGF5VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsYXlUaW1lLmdldCgpOyB9CisKKyAgICBkb3Vi
bGUgbWF4RGVsYXlUaW1lKCkgeyByZXR1cm4gbV9tYXhEZWxheVRpbWU7IH0KK3ByaXZhdGU6CisK
KyAgICBSZWZQdHI8QXVkaW9QYXJhbT4gbV9kZWxheVRpbWU7CisgICAgZG91YmxlIG1fbWF4RGVs
YXlUaW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRGVsYXlQ
cm9jZXNzb3JfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EeW5hbWlj
c0NvbXByZXNzb3JOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwCShyZXZpc2lvbiAxMTE0MzMpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwOjEx
MTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVz
c29yTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVk
ZSAiRHluYW1pY3NDb21wcmVzc29yTm9kZS5oIgorCisjaW5jbHVkZSAiQXVkaW9Db250ZXh0Lmgi
CisjaW5jbHVkZSAiQXVkaW9Ob2RlSW5wdXQuaCIKKyNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQu
aCIKKyNpbmNsdWRlICJEeW5hbWljc0NvbXByZXNzb3IuaCIKKworLy8gU2V0IG91dHB1dCB0byBz
dGVyZW8gYnkgZGVmYXVsdC4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0TnVtYmVyT2ZP
dXRwdXRDaGFubmVscyA9IDI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRHluYW1pY3NDb21w
cmVzc29yTm9kZTo6RHluYW1pY3NDb21wcmVzc29yTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQs
IGZsb2F0IHNhbXBsZVJhdGUpCisgICAgOiBBdWRpb05vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkK
K3sKKyAgICBhZGRJbnB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlSW5wdXQodGhpcykpKTsKKyAg
ICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZU91dHB1dCh0aGlzLCBkZWZhdWx0TnVt
YmVyT2ZPdXRwdXRDaGFubmVscykpKTsKKworICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlRHluYW1p
Y3NDb21wcmVzc29yKTsKKworICAgIG1fdGhyZXNob2xkID0gQXVkaW9QYXJhbTo6Y3JlYXRlKCJ0
aHJlc2hvbGQiLCAtMjQsIC0xMDAsIDApOworICAgIG1fa25lZSA9IEF1ZGlvUGFyYW06OmNyZWF0
ZSgia25lZSIsIDMwLCAwLCA0MCk7CisgICAgbV9yYXRpbyA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgi
cmF0aW8iLCAxMiwgMSwgMjApOworICAgIG1fcmVkdWN0aW9uID0gQXVkaW9QYXJhbTo6Y3JlYXRl
KCJyZWR1Y3Rpb24iLCAwLCAtMjAsIDApOworCisgICAgbV90aHJlc2hvbGQtPnNldENvbnRleHQo
Y29udGV4dCk7CisgICAgbV9rbmVlLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIG1fcmF0aW8t
PnNldENvbnRleHQoY29udGV4dCk7CisgICAgbV9yZWR1Y3Rpb24tPnNldENvbnRleHQoY29udGV4
dCk7CisKKyAgICBpbml0aWFsaXplKCk7Cit9CisKK0R5bmFtaWNzQ29tcHJlc3Nvck5vZGU6On5E
eW5hbWljc0NvbXByZXNzb3JOb2RlKCkKK3sKKyAgICB1bmluaXRpYWxpemUoKTsKK30KKwordm9p
ZCBEeW5hbWljc0NvbXByZXNzb3JOb2RlOjpwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3Mp
Cit7CisgICAgQXVkaW9CdXMqIG91dHB1dEJ1cyA9IG91dHB1dCgwKS0+YnVzKCk7CisgICAgQVNT
RVJUKG91dHB1dEJ1cyk7CisKKyAgICBmbG9hdCB0aHJlc2hvbGQgPSBtX3RocmVzaG9sZC0+dmFs
dWUoKTsKKyAgICBmbG9hdCBrbmVlID0gbV9rbmVlLT52YWx1ZSgpOworICAgIGZsb2F0IHJhdGlv
ID0gbV9yYXRpby0+dmFsdWUoKTsKKworICAgIG1fZHluYW1pY3NDb21wcmVzc29yLT5zZXRQYXJh
bWV0ZXJWYWx1ZShEeW5hbWljc0NvbXByZXNzb3I6OlBhcmFtVGhyZXNob2xkLCB0aHJlc2hvbGQp
OworICAgIG1fZHluYW1pY3NDb21wcmVzc29yLT5zZXRQYXJhbWV0ZXJWYWx1ZShEeW5hbWljc0Nv
bXByZXNzb3I6OlBhcmFtS25lZSwga25lZSk7CisgICAgbV9keW5hbWljc0NvbXByZXNzb3ItPnNl
dFBhcmFtZXRlclZhbHVlKER5bmFtaWNzQ29tcHJlc3Nvcjo6UGFyYW1SYXRpbywgcmF0aW8pOwor
CisgICAgbV9keW5hbWljc0NvbXByZXNzb3ItPnByb2Nlc3MoaW5wdXQoMCktPmJ1cygpLCBvdXRw
dXRCdXMsIGZyYW1lc1RvUHJvY2Vzcyk7CisKKyAgICBmbG9hdCByZWR1Y3Rpb24gPSBtX2R5bmFt
aWNzQ29tcHJlc3Nvci0+cGFyYW1ldGVyVmFsdWUoRHluYW1pY3NDb21wcmVzc29yOjpQYXJhbVJl
ZHVjdGlvbik7CisgICAgbV9yZWR1Y3Rpb24tPnNldFZhbHVlKHJlZHVjdGlvbik7Cit9CisKK3Zv
aWQgRHluYW1pY3NDb21wcmVzc29yTm9kZTo6cmVzZXQoKQoreworICAgIG1fZHluYW1pY3NDb21w
cmVzc29yLT5yZXNldCgpOworfQorCit2b2lkIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OmluaXRp
YWxpemUoKQoreworICAgIGlmIChpc0luaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEF1ZGlvTm9kZTo6aW5pdGlhbGl6ZSgpOyAgICAKKyAgICBtX2R5bmFtaWNzQ29tcHJlc3Nv
ciA9IGFkb3B0UHRyKG5ldyBEeW5hbWljc0NvbXByZXNzb3Ioc2FtcGxlUmF0ZSgpLCBkZWZhdWx0
TnVtYmVyT2ZPdXRwdXRDaGFubmVscykpOworfQorCit2b2lkIER5bmFtaWNzQ29tcHJlc3Nvck5v
ZGU6OnVuaW5pdGlhbGl6ZSgpCit7CisgICAgaWYgKCFpc0luaXRpYWxpemVkKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fZHluYW1pY3NDb21wcmVzc29yLmNsZWFyKCk7CisgICAgQXVkaW9O
b2RlOjp1bmluaXRpYWxpemUoKTsKK30KKworZG91YmxlIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6
OnRhaWxUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9keW5hbWljc0NvbXByZXNzb3ItPnRh
aWxUaW1lKCk7Cit9CisKK2RvdWJsZSBEeW5hbWljc0NvbXByZXNzb3JOb2RlOjpsYXRlbmN5VGlt
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZHluYW1pY3NDb21wcmVzc29yLT5sYXRlbmN5VGlt
ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
X0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EeW5hbWljc0Nv
bXByZXNzb3JOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmgJKHJldmlzaW9uIDExMTQzMykJKGZyb20gU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5oOjExMTQzMykKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIER5
bmFtaWNzQ29tcHJlc3Nvck5vZGVfaAorI2RlZmluZSBEeW5hbWljc0NvbXByZXNzb3JOb2RlX2gK
KworI2luY2x1ZGUgIkF1ZGlvTm9kZS5oIgorI2luY2x1ZGUgIkF1ZGlvUGFyYW0uaCIKKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRHluYW1p
Y3NDb21wcmVzc29yOworCitjbGFzcyBEeW5hbWljc0NvbXByZXNzb3JOb2RlIDogcHVibGljIEF1
ZGlvTm9kZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RHluYW1pY3NDb21wcmVz
c29yTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRHluYW1pY3NDb21wcmVzc29yTm9k
ZShjb250ZXh0LCBzYW1wbGVSYXRlKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+RHluYW1pY3ND
b21wcmVzc29yTm9kZSgpOworCisgICAgLy8gQXVkaW9Ob2RlCisgICAgdmlydHVhbCB2b2lkIHBy
b2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgdmlydHVhbCB2b2lkIHJlc2V0KCk7
CisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pbml0
aWFsaXplKCk7CisKKyAgICAvLyBTdGF0aWMgY29tcHJlc3Npb24gY3VydmUgcGFyYW1ldGVycy4K
KyAgICBBdWRpb1BhcmFtKiB0aHJlc2hvbGQoKSB7IHJldHVybiBtX3RocmVzaG9sZC5nZXQoKTsg
fQorICAgIEF1ZGlvUGFyYW0qIGtuZWUoKSB7IHJldHVybiBtX2tuZWUuZ2V0KCk7IH0KKyAgICBB
dWRpb1BhcmFtKiByYXRpbygpIHsgcmV0dXJuIG1fcmF0aW8uZ2V0KCk7IH0KKworICAgIC8vIEFt
b3VudCBieSB3aGljaCB0aGUgY29tcHJlc3NvciBpcyBjdXJyZW50bHkgY29tcHJlc3NpbmcgdGhl
IHNpZ25hbCBpbiBkZWNpYmVscy4KKyAgICBBdWRpb1BhcmFtKiByZWR1Y3Rpb24oKSB7IHJldHVy
biBtX3JlZHVjdGlvbi5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgZG91YmxlIHRh
aWxUaW1lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUo
KSBjb25zdCBPVkVSUklERTsKKworICAgIER5bmFtaWNzQ29tcHJlc3Nvck5vZGUoQXVkaW9Db250
ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7CisKKyAgICBPd25QdHI8RHluYW1pY3NDb21wcmVzc29y
PiBtX2R5bmFtaWNzQ29tcHJlc3NvcjsKKyAgICBSZWZQdHI8QXVkaW9QYXJhbT4gbV90aHJlc2hv
bGQ7CisgICAgUmVmUHRyPEF1ZGlvUGFyYW0+IG1fa25lZTsKKyAgICBSZWZQdHI8QXVkaW9QYXJh
bT4gbV9yYXRpbzsKKyAgICBSZWZQdHI8QXVkaW9QYXJhbT4gbV9yZWR1Y3Rpb247Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBEeW5hbWljc0NvbXByZXNzb3JOb2Rl
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVz
c29yTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmlkbAkocmV2aXNpb24gMTExNDMzKQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmlkbDoxMTE0MzMpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUg
YXVkaW8geworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywK
KyAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKKyAgICBdIER5bmFtaWNzQ29tcHJlc3Nvck5v
ZGUgOiBBdWRpb05vZGUgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9QYXJhbSB0
aHJlc2hvbGQ7IC8vIGluIERlY2liZWxzCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRp
b1BhcmFtIGtuZWU7IC8vIGluIERlY2liZWxzCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBB
dWRpb1BhcmFtIHJhdGlvOyAvLyB1bml0LWxlc3MKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IEF1ZGlvUGFyYW0gcmVkdWN0aW9uOyAvLyBpbiBEZWNpYmVscworICAgIH07Cit9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vSGlnaFBhc3MyRmls
dGVyTm9kZS5jcHAJKHJldmlzaW9uIDExMTQzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5jcHA6MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkhpZ2hQYXNzMkZpbHRlck5vZGUuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitIaWdoUGFzczJGaWx0ZXJOb2RlOjpIaWdoUGFzczJGaWx0ZXJO
b2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKKyAgICA6IEF1ZGlv
QmFzaWNQcm9jZXNzb3JOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCit7CisgICAgbV9wcm9jZXNz
b3IgPSBhZG9wdFB0cihuZXcgQmlxdWFkUHJvY2Vzc29yKEJpcXVhZFByb2Nlc3Nvcjo6SGlnaFBh
c3MsIHNhbXBsZVJhdGUsIDEsIGZhbHNlKSk7CisgICAgYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFt
ZXRlcjEoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICBiaXF1YWRQcm9jZXNzb3IoKS0+cGFy
YW1ldGVyMigpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIGJpcXVhZFByb2Nlc3NvcigpLT5w
YXJhbWV0ZXIzKCktPnNldENvbnRleHQoY29udGV4dCk7CisgICAgc2V0Tm9kZVR5cGUoTm9kZVR5
cGVIaWdoUGFzczJGaWx0ZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmgJKHJldmlzaW9uIDExMTQzMykJ
KGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5oOjExMTQz
MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IEhpZ2hQYXNzMkZpbHRlck5vZGVfaAorI2RlZmluZSBIaWdoUGFzczJGaWx0ZXJOb2RlX2gKKwor
I2luY2x1ZGUgIkF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmgiCisjaW5jbHVkZSAiQmlxdWFkUHJv
Y2Vzc29yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9QYXJhbTsKKyAg
ICAKK2NsYXNzIEhpZ2hQYXNzMkZpbHRlck5vZGUgOiBwdWJsaWMgQXVkaW9CYXNpY1Byb2Nlc3Nv
ck5vZGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhpZ2hQYXNzMkZpbHRlck5v
ZGU+IGNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhpZ2hQYXNzMkZpbHRlck5vZGUoY29udGV4
dCwgc2FtcGxlUmF0ZSkpOyAgICAgIAorICAgIH0KKworICAgIEF1ZGlvUGFyYW0qIGN1dG9mZigp
IHsgcmV0dXJuIGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIxKCk7IH0KKyAgICBBdWRpb1Bh
cmFtKiByZXNvbmFuY2UoKSB7IHJldHVybiBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMigp
OyB9CisgICAgCitwcml2YXRlOgorICAgIEhpZ2hQYXNzMkZpbHRlck5vZGUoQXVkaW9Db250ZXh0
KiwgZmxvYXQgc2FtcGxlUmF0ZSk7CisKKyAgICBCaXF1YWRQcm9jZXNzb3IqIGJpcXVhZFByb2Nl
c3NvcigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEJpcXVhZFByb2Nlc3Nvcio+KHByb2Nlc3Nvcigp
KTsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gSGlnaFBhc3My
RmlsdGVyTm9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0hpZ2hQ
YXNzMkZpbHRlck5vZGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5pZGwJKHJldmlzaW9uIDExMTQzMykJKGZyb20g
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5pZGw6MTExNDMzKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIGF1
ZGlvIHsKKyAgICAvLyBUd28tcG9sZSBoaWdocGFzcyBmaWx0ZXIKKyAgICAvLyBGSVhNRTogZGVz
aWduIEJpcXVhZE5vZGUgYW5kIHVzZSBpbnN0ZWFkIG9mIHRoaXMKKyAgICBpbnRlcmZhY2UgWwor
ICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCisgICAgICAgIEpTR2VuZXJhdGVUb0pTT2Jq
ZWN0CisgICAgXSBIaWdoUGFzczJGaWx0ZXJOb2RlIDogQXVkaW9Ob2RlIHsKKyAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIEF1ZGlvUGFyYW0gY3V0b2ZmOworICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgQXVkaW9QYXJhbSByZXNvbmFuY2U7CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmNw
cAkocmV2aXNpb24gMTExNDMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9KYXZhU2Ny
aXB0QXVkaW9Ob2RlLmNwcDoxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjgy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9B
VURJTykKKworI2luY2x1ZGUgIkphdmFTY3JpcHRBdWRpb05vZGUuaCIKKworI2luY2x1ZGUgIkF1
ZGlvQnVmZmVyLmgiCisjaW5jbHVkZSAiQXVkaW9CdXMuaCIKKyNpbmNsdWRlICJBdWRpb0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgorI2luY2x1ZGUgIkF1ZGlvTm9kZU91
dHB1dC5oIgorI2luY2x1ZGUgIkF1ZGlvUHJvY2Vzc2luZ0V2ZW50LmgiCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNpbmNsdWRlIDx3dGYvRmxvYXQzMkFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBzaXplX3QgRGVmYXVs
dEJ1ZmZlclNpemUgPSA0MDk2OworCitQYXNzUmVmUHRyPEphdmFTY3JpcHRBdWRpb05vZGU+IEph
dmFTY3JpcHRBdWRpb05vZGU6OmNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNh
bXBsZVJhdGUsIHNpemVfdCBidWZmZXJTaXplLCB1bnNpZ25lZCBudW1iZXJPZklucHV0cywgdW5z
aWduZWQgbnVtYmVyT2ZPdXRwdXRzKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSmF2YVNj
cmlwdEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlLCBidWZmZXJTaXplLCBudW1iZXJPZklu
cHV0cywgbnVtYmVyT2ZPdXRwdXRzKSk7Cit9CisKK0phdmFTY3JpcHRBdWRpb05vZGU6OkphdmFT
Y3JpcHRBdWRpb05vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlLCBz
aXplX3QgYnVmZmVyU2l6ZSwgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dHMsIHVuc2lnbmVkIG51bWJl
ck9mT3V0cHV0cykKKyAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQorICAgICwg
bV9kb3VibGVCdWZmZXJJbmRleCgwKQorICAgICwgbV9kb3VibGVCdWZmZXJJbmRleEZvckV2ZW50
KDApCisgICAgLCBtX2J1ZmZlclNpemUoYnVmZmVyU2l6ZSkKKyAgICAsIG1fYnVmZmVyUmVhZFdy
aXRlSW5kZXgoMCkKKyAgICAsIG1faXNSZXF1ZXN0T3V0c3RhbmRpbmcoZmFsc2UpCit7CisgICAg
Ly8gQ2hlY2sgZm9yIHZhbGlkIGJ1ZmZlciBzaXplLgorICAgIHN3aXRjaCAoYnVmZmVyU2l6ZSkg
eworICAgIGNhc2UgMjU2OgorICAgIGNhc2UgNTEyOgorICAgIGNhc2UgMTAyNDoKKyAgICBjYXNl
IDIwNDg6CisgICAgY2FzZSA0MDk2OgorICAgIGNhc2UgODE5MjoKKyAgICBjYXNlIDE2Mzg0Ogor
ICAgICAgICBtX2J1ZmZlclNpemUgPSBidWZmZXJTaXplOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBtX2J1ZmZlclNpemUgPSBEZWZhdWx0QnVmZmVyU2l6ZTsKKyAgICB9
CisgICAgICAgIAorICAgIC8vIFJlZ2FyZGxlc3Mgb2YgdGhlIGFsbG93ZWQgYnVmZmVyIHNpemVz
IGFib3ZlLCB3ZSBzdGlsbCBuZWVkIHRvIHByb2Nlc3MgYXQgdGhlIGdyYW51bGFyaXR5IG9mIHRo
ZSBBdWRpb05vZGUuCisgICAgaWYgKG1fYnVmZmVyU2l6ZSA8IEF1ZGlvTm9kZTo6UHJvY2Vzc2lu
Z1NpemVJbkZyYW1lcykKKyAgICAgICAgbV9idWZmZXJTaXplID0gQXVkaW9Ob2RlOjpQcm9jZXNz
aW5nU2l6ZUluRnJhbWVzOworCisgICAgLy8gRklYTUU6IFJpZ2h0IG5vdyB3ZSdyZSBoYXJkY29k
ZWQgdG8gc2luZ2xlIGlucHV0IGFuZCBzaW5nbGUgb3V0cHV0LgorICAgIC8vIEFsdGhvdWdoIHRo
ZSBzcGVjaWZpY2F0aW9uIHNheXMgdGhpcyBpcyBPSyBmb3IgYSBzaW1wbGUgaW1wbGVtZW50YXRp
b24sIG11bHRpcGxlIGlucHV0cyBhbmQgb3V0cHV0cyB3b3VsZCBiZSBnb29kLgorICAgIEFTU0VS
VF9VTlVTRUQobnVtYmVyT2ZJbnB1dHMsIG51bWJlck9mSW5wdXRzID09IDEpOworICAgIEFTU0VS
VF9VTlVTRUQobnVtYmVyT2ZPdXRwdXRzLCBudW1iZXJPZk91dHB1dHMgPT0gMSk7CisgICAgYWRk
SW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7CisgICAgYWRkT3V0cHV0
KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywgMikpKTsKKworICAgIHNldE5vZGVU
eXBlKE5vZGVUeXBlSmF2YVNjcmlwdCk7CisKKyAgICBpbml0aWFsaXplKCk7Cit9CisKK0phdmFT
Y3JpcHRBdWRpb05vZGU6On5KYXZhU2NyaXB0QXVkaW9Ob2RlKCkKK3sKKyAgICB1bmluaXRpYWxp
emUoKTsKK30KKwordm9pZCBKYXZhU2NyaXB0QXVkaW9Ob2RlOjppbml0aWFsaXplKCkKK3sKKyAg
ICBpZiAoaXNJbml0aWFsaXplZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCBzYW1w
bGVSYXRlID0gY29udGV4dCgpLT5zYW1wbGVSYXRlKCk7CisKKyAgICAvLyBDcmVhdGUgZG91Ymxl
IGJ1ZmZlcnMgb24gYm90aCB0aGUgaW5wdXQgYW5kIG91dHB1dCBzaWRlcy4KKyAgICAvLyBUaGVz
ZSBBdWRpb0J1ZmZlcnMgd2lsbCBiZSBkaXJlY3RseSBhY2Nlc3NlZCBpbiB0aGUgbWFpbiB0aHJl
YWQgYnkgSmF2YVNjcmlwdC4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjsgKytpKSB7
CisgICAgICAgIG1faW5wdXRCdWZmZXJzLmFwcGVuZChBdWRpb0J1ZmZlcjo6Y3JlYXRlKDIsIGJ1
ZmZlclNpemUoKSwgc2FtcGxlUmF0ZSkpOworICAgICAgICBtX291dHB1dEJ1ZmZlcnMuYXBwZW5k
KEF1ZGlvQnVmZmVyOjpjcmVhdGUoMiwgYnVmZmVyU2l6ZSgpLCBzYW1wbGVSYXRlKSk7CisgICAg
fQorCisgICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7Cit9CisKK3ZvaWQgSmF2YVNjcmlwdEF1
ZGlvTm9kZTo6dW5pbml0aWFsaXplKCkKK3sKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9pbnB1dEJ1ZmZlcnMuY2xlYXIoKTsKKyAgICBtX291dHB1
dEJ1ZmZlcnMuY2xlYXIoKTsKKworICAgIEF1ZGlvTm9kZTo6dW5pbml0aWFsaXplKCk7Cit9CisK
K3ZvaWQgSmF2YVNjcmlwdEF1ZGlvTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNz
KQoreworICAgIC8vIERpc2N1c3Npb24gYWJvdXQgaW5wdXRzIGFuZCBvdXRwdXRzOgorICAgIC8v
IEFzIGluIG90aGVyIEF1ZGlvTm9kZXMsIEphdmFTY3JpcHRBdWRpb05vZGUgdXNlcyBhbiBBdWRp
b0J1cyBmb3IgaXRzIGlucHV0IGFuZCBvdXRwdXQgKHNlZSBpbnB1dEJ1cyBhbmQgb3V0cHV0QnVz
IGJlbG93KS4KKyAgICAvLyBBZGRpdGlvbmFsbHksIHRoZXJlIGlzIGEgZG91YmxlLWJ1ZmZlcmlu
ZyBmb3IgaW5wdXQgYW5kIG91dHB1dCB3aGljaCBpcyBleHBvc2VkIGRpcmVjdGx5IHRvIEphdmFT
Y3JpcHQgKHNlZSBpbnB1dEJ1ZmZlciBhbmQgb3V0cHV0QnVmZmVyIGJlbG93KS4KKyAgICAvLyBU
aGlzIG5vZGUgaXMgdGhlIHByb2R1Y2VyIGZvciBpbnB1dEJ1ZmZlciBhbmQgdGhlIGNvbnN1bWVy
IGZvciBvdXRwdXRCdWZmZXIuCisgICAgLy8gVGhlIEphdmFTY3JpcHQgY29kZSBpcyB0aGUgY29u
c3VtZXIgb2YgaW5wdXRCdWZmZXIgYW5kIHRoZSBwcm9kdWNlciBmb3Igb3V0cHV0QnVmZmVyLgor
ICAgIAorICAgIC8vIEdldCBpbnB1dCBhbmQgb3V0cHV0IGJ1c3Nlcy4KKyAgICBBdWRpb0J1cyog
aW5wdXRCdXMgPSB0aGlzLT5pbnB1dCgwKS0+YnVzKCk7CisgICAgQXVkaW9CdXMqIG91dHB1dEJ1
cyA9IHRoaXMtPm91dHB1dCgwKS0+YnVzKCk7CisKKyAgICAvLyBHZXQgaW5wdXQgYW5kIG91dHB1
dCBidWZmZXJzLiAgV2UgZG91YmxlLWJ1ZmZlciBib3RoIHRoZSBpbnB1dCBhbmQgb3V0cHV0IHNp
ZGVzLgorICAgIHVuc2lnbmVkIGRvdWJsZUJ1ZmZlckluZGV4ID0gdGhpcy0+ZG91YmxlQnVmZmVy
SW5kZXgoKTsKKyAgICBib29sIGlzRG91YmxlQnVmZmVySW5kZXhHb29kID0gZG91YmxlQnVmZmVy
SW5kZXggPCAyICYmIGRvdWJsZUJ1ZmZlckluZGV4IDwgbV9pbnB1dEJ1ZmZlcnMuc2l6ZSgpICYm
IGRvdWJsZUJ1ZmZlckluZGV4IDwgbV9vdXRwdXRCdWZmZXJzLnNpemUoKTsKKyAgICBBU1NFUlQo
aXNEb3VibGVCdWZmZXJJbmRleEdvb2QpOworICAgIGlmICghaXNEb3VibGVCdWZmZXJJbmRleEdv
b2QpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBBdWRpb0J1ZmZlciogaW5wdXRCdWZmZXIg
PSBtX2lucHV0QnVmZmVyc1tkb3VibGVCdWZmZXJJbmRleF0uZ2V0KCk7CisgICAgQXVkaW9CdWZm
ZXIqIG91dHB1dEJ1ZmZlciA9IG1fb3V0cHV0QnVmZmVyc1tkb3VibGVCdWZmZXJJbmRleF0uZ2V0
KCk7CisKKyAgICAvLyBDaGVjayB0aGUgY29uc2lzdGVuY3kgb2YgaW5wdXQgYW5kIG91dHB1dCBi
dWZmZXJzLgorICAgIGJvb2wgYnVmZmVyc0FyZUdvb2QgPSBpbnB1dEJ1ZmZlciAmJiBvdXRwdXRC
dWZmZXIgJiYgYnVmZmVyU2l6ZSgpID09IGlucHV0QnVmZmVyLT5sZW5ndGgoKSAmJiBidWZmZXJT
aXplKCkgPT0gb3V0cHV0QnVmZmVyLT5sZW5ndGgoKQorICAgICAgICAmJiBtX2J1ZmZlclJlYWRX
cml0ZUluZGV4ICsgZnJhbWVzVG9Qcm9jZXNzIDw9IGJ1ZmZlclNpemUoKTsKKyAgICBBU1NFUlQo
YnVmZmVyc0FyZUdvb2QpOworICAgIGlmICghYnVmZmVyc0FyZUdvb2QpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIFdlIGFzc3VtZSB0aGF0IGJ1ZmZlclNpemUoKSBpcyBldmVubHkgZGl2aXNp
YmxlIGJ5IGZyYW1lc1RvUHJvY2VzcyAtIHNob3VsZCBhbHdheXMgYmUgdHJ1ZSwgYnV0IHdlIHNo
b3VsZCBzdGlsbCBjaGVjay4KKyAgICBib29sIGlzRnJhbWVzVG9Qcm9jZXNzR29vZCA9IGZyYW1l
c1RvUHJvY2VzcyAmJiBidWZmZXJTaXplKCkgPj0gZnJhbWVzVG9Qcm9jZXNzICYmICEoYnVmZmVy
U2l6ZSgpICUgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICBBU1NFUlQoaXNGcmFtZXNUb1Byb2Nlc3NH
b29kKTsKKyAgICBpZiAoIWlzRnJhbWVzVG9Qcm9jZXNzR29vZCkKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZklucHV0Q2hhbm5lbHMgPSBpbnB1dEJ1cy0+
bnVtYmVyT2ZDaGFubmVscygpOworICAgIAorICAgIGJvb2wgY2hhbm5lbHNBcmVHb29kID0gKG51
bWJlck9mSW5wdXRDaGFubmVscyA9PSAxIHx8IG51bWJlck9mSW5wdXRDaGFubmVscyA9PSAyKSAm
JiBvdXRwdXRCdXMtPm51bWJlck9mQ2hhbm5lbHMoKSA9PSAyOworICAgIEFTU0VSVChjaGFubmVs
c0FyZUdvb2QpOworICAgIGlmICghY2hhbm5lbHNBcmVHb29kKQorICAgICAgICByZXR1cm47CisK
KyAgICBjb25zdCBmbG9hdCogc291cmNlTCA9IGlucHV0QnVzLT5jaGFubmVsKDApLT5kYXRhKCk7
CisgICAgY29uc3QgZmxvYXQqIHNvdXJjZVIgPSBudW1iZXJPZklucHV0Q2hhbm5lbHMgPiAxID8g
aW5wdXRCdXMtPmNoYW5uZWwoMSktPmRhdGEoKSA6IDA7CisgICAgZmxvYXQqIGRlc3RpbmF0aW9u
TCA9IG91dHB1dEJ1cy0+Y2hhbm5lbCgwKS0+bXV0YWJsZURhdGEoKTsKKyAgICBmbG9hdCogZGVz
dGluYXRpb25SID0gb3V0cHV0QnVzLT5jaGFubmVsKDEpLT5tdXRhYmxlRGF0YSgpOworCisgICAg
Ly8gQ29weSBmcm9tIHRoZSBpbnB1dCB0byB0aGUgaW5wdXQgYnVmZmVyLiAgU2VlICJidWZmZXJz
QXJlR29vZCIgY2hlY2sgYWJvdmUgZm9yIHNhZmV0eS4KKyAgICBzaXplX3QgYnl0ZXNUb0NvcHkg
PSBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNzOworICAgIG1lbWNweShpbnB1dEJ1ZmZl
ci0+Z2V0Q2hhbm5lbERhdGEoMCktPmRhdGEoKSArIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXgsIHNv
dXJjZUwsIGJ5dGVzVG9Db3B5KTsKKyAgICAKKyAgICBpZiAobnVtYmVyT2ZJbnB1dENoYW5uZWxz
ID09IDIpCisgICAgICAgIG1lbWNweShpbnB1dEJ1ZmZlci0+Z2V0Q2hhbm5lbERhdGEoMSktPmRh
dGEoKSArIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXgsIHNvdXJjZVIsIGJ5dGVzVG9Db3B5KTsKKyAg
ICBlbHNlIGlmIChudW1iZXJPZklucHV0Q2hhbm5lbHMgPT0gMSkgeworICAgICAgICAvLyBJZiB0
aGUgaW5wdXQgaXMgbW9ubywgdGhlbiBhbHNvIGNvcHkgdGhlIG1vbm8gaW5wdXQgdG8gdGhlIHJp
Z2h0IGNoYW5uZWwgb2YgdGhlIEF1ZGlvQnVmZmVyIHdoaWNoIHRoZSBBdWRpb1Byb2Nlc3NpbmdF
dmVudCB1c2VzLgorICAgICAgICAvLyBGSVhNRTogaXQgaXMgbGlrZWx5IHRoZSBhdWRpbyBBUEkg
d2lsbCBldm9sdmUgdG8gcHJlc2VudCBhbiBBdWRpb0J1ZmZlciB3aXRoIHRoZSBzYW1lIG51bWJl
ciBvZiBjaGFubmVscyBhcyBvdXIgaW5wdXQuCisgICAgICAgIG1lbWNweShpbnB1dEJ1ZmZlci0+
Z2V0Q2hhbm5lbERhdGEoMSktPmRhdGEoKSArIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXgsIHNvdXJj
ZUwsIGJ5dGVzVG9Db3B5KTsKKyAgICB9CisgICAgCisgICAgLy8gQ29weSBmcm9tIHRoZSBvdXRw
dXQgYnVmZmVyIHRvIHRoZSBvdXRwdXQuICBTZWUgImJ1ZmZlcnNBcmVHb29kIiBjaGVjayBhYm92
ZSBmb3Igc2FmZXR5LgorICAgIG1lbWNweShkZXN0aW5hdGlvbkwsIG91dHB1dEJ1ZmZlci0+Z2V0
Q2hhbm5lbERhdGEoMCktPmRhdGEoKSArIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXgsIGJ5dGVzVG9D
b3B5KTsKKyAgICBtZW1jcHkoZGVzdGluYXRpb25SLCBvdXRwdXRCdWZmZXItPmdldENoYW5uZWxE
YXRhKDEpLT5kYXRhKCkgKyBtX2J1ZmZlclJlYWRXcml0ZUluZGV4LCBieXRlc1RvQ29weSk7CisK
KyAgICAvLyBVcGRhdGUgdGhlIGJ1ZmZlcmluZyBpbmRleC4KKyAgICBtX2J1ZmZlclJlYWRXcml0
ZUluZGV4ID0gKG1fYnVmZmVyUmVhZFdyaXRlSW5kZXggKyBmcmFtZXNUb1Byb2Nlc3MpICUgYnVm
ZmVyU2l6ZSgpOworCisgICAgLy8gbV9idWZmZXJSZWFkV3JpdGVJbmRleCB3aWxsIHdyYXAgYmFj
ayBhcm91bmQgdG8gMCB3aGVuIHRoZSBjdXJyZW50IGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycyBh
cmUgZnVsbC4KKyAgICAvLyBXaGVuIHRoaXMgaGFwcGVucywgZmlyZSBhbiBldmVudCBhbmQgc3dh
cCBidWZmZXJzLgorICAgIGlmICghbV9idWZmZXJSZWFkV3JpdGVJbmRleCkgeworICAgICAgICAv
LyBBdm9pZCBidWlsZGluZyB1cCByZXF1ZXN0cyBvbiB0aGUgbWFpbiB0aHJlYWQgdG8gZmlyZSBw
cm9jZXNzIGV2ZW50cyB3aGVuIHRoZXkncmUgbm90IGJlaW5nIGhhbmRsZWQuCisgICAgICAgIC8v
IFRoaXMgY291bGQgYmUgYSBwcm9ibGVtIGlmIHRoZSBtYWluIHRocmVhZCBpcyB2ZXJ5IGJ1c3kg
ZG9pbmcgb3RoZXIgdGhpbmdzIGFuZCBpcyBiZWluZyBoZWxkIHVwIGhhbmRsaW5nIHByZXZpb3Vz
IHJlcXVlc3RzLgorICAgICAgICBpZiAobV9pc1JlcXVlc3RPdXRzdGFuZGluZykgeworICAgICAg
ICAgICAgLy8gV2UncmUgbGF0ZSBpbiBoYW5kbGluZyB0aGUgcHJldmlvdXMgcmVxdWVzdC4gIFRo
ZSBtYWluIHRocmVhZCBtdXN0IGJlIHZlcnkgYnVzeS4KKyAgICAgICAgICAgIC8vIFRoZSBiZXN0
IHdlIGNhbiBkbyBpcyBjbGVhciBvdXQgdGhlIGJ1ZmZlciBvdXJzZWxmIGhlcmUuCisgICAgICAg
ICAgICBvdXRwdXRCdWZmZXItPnplcm8oKTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIFJlZmVyZW5jZSBvdXJzZWxmIHNvIHdlIGRvbid0IGFjY2lkZW50YWxs
eSBnZXQgZGVsZXRlZCBiZWZvcmUgZmlyZVByb2Nlc3NFdmVudCgpIGdldHMgY2FsbGVkLgorICAg
ICAgICAgICAgcmVmKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZpcmUgdGhlIGV2
ZW50IG9uIHRoZSBtYWluIHRocmVhZCwgbm90IHRoaXMgb25lICh3aGljaCBpcyB0aGUgcmVhbHRp
bWUgYXVkaW8gdGhyZWFkKS4KKyAgICAgICAgICAgIG1fZG91YmxlQnVmZmVySW5kZXhGb3JFdmVu
dCA9IG1fZG91YmxlQnVmZmVySW5kZXg7CisgICAgICAgICAgICBtX2lzUmVxdWVzdE91dHN0YW5k
aW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoZmlyZVByb2Nlc3NFdmVu
dERpc3BhdGNoLCB0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3YXBCdWZmZXJzKCk7Cisg
ICAgfQorfQorCit2b2lkIEphdmFTY3JpcHRBdWRpb05vZGU6OmZpcmVQcm9jZXNzRXZlbnREaXNw
YXRjaCh2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBKYXZhU2NyaXB0QXVkaW9Ob2RlKiBqc0F1ZGlv
Tm9kZSA9IHN0YXRpY19jYXN0PEphdmFTY3JpcHRBdWRpb05vZGUqPih1c2VyRGF0YSk7CisgICAg
QVNTRVJUKGpzQXVkaW9Ob2RlKTsKKyAgICBpZiAoIWpzQXVkaW9Ob2RlKQorICAgICAgICByZXR1
cm47CisKKyAgICBqc0F1ZGlvTm9kZS0+ZmlyZVByb2Nlc3NFdmVudCgpOworCisgICAgLy8gRGUt
cmVmZXJlbmNlIHRvIG1hdGNoIHRoZSByZWYoKSBjYWxsIGluIHByb2Nlc3MoKS4KKyAgICBqc0F1
ZGlvTm9kZS0+ZGVyZWYoKTsKK30KKwordm9pZCBKYXZhU2NyaXB0QXVkaW9Ob2RlOjpmaXJlUHJv
Y2Vzc0V2ZW50KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkgJiYgbV9pc1JlcXVlc3RP
dXRzdGFuZGluZyk7CisgICAgCisgICAgYm9vbCBpc0luZGV4R29vZCA9IG1fZG91YmxlQnVmZmVy
SW5kZXhGb3JFdmVudCA8IDI7CisgICAgQVNTRVJUKGlzSW5kZXhHb29kKTsKKyAgICBpZiAoIWlz
SW5kZXhHb29kKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIEF1ZGlvQnVmZmVyKiBp
bnB1dEJ1ZmZlciA9IG1faW5wdXRCdWZmZXJzW21fZG91YmxlQnVmZmVySW5kZXhGb3JFdmVudF0u
Z2V0KCk7CisgICAgQXVkaW9CdWZmZXIqIG91dHB1dEJ1ZmZlciA9IG1fb3V0cHV0QnVmZmVyc1tt
X2RvdWJsZUJ1ZmZlckluZGV4Rm9yRXZlbnRdLmdldCgpOworICAgIEFTU0VSVChpbnB1dEJ1ZmZl
ciAmJiBvdXRwdXRCdWZmZXIpOworICAgIGlmICghaW5wdXRCdWZmZXIgfHwgIW91dHB1dEJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQXZvaWQgZmlyaW5nIHRoZSBldmVudCBpZiB0
aGUgZG9jdW1lbnQgaGFzIGFscmVhZHkgZ29uZSBhd2F5LgorICAgIGlmIChjb250ZXh0KCktPmhh
c0RvY3VtZW50KCkpIHsKKyAgICAgICAgLy8gTGV0IHRoZSBhdWRpbyB0aHJlYWQga25vdyB3ZSd2
ZSBnb3R0ZW4gdG8gdGhlIHBvaW50IHdoZXJlIGl0J3MgT0sgZm9yIGl0IHRvIG1ha2UgYW5vdGhl
ciByZXF1ZXN0LgorICAgICAgICBtX2lzUmVxdWVzdE91dHN0YW5kaW5nID0gZmFsc2U7CisgICAg
ICAgIAorICAgICAgICAvLyBDYWxsIHRoZSBKYXZhU2NyaXB0IGV2ZW50IGhhbmRsZXIgd2hpY2gg
d2lsbCBkbyB0aGUgYXVkaW8gcHJvY2Vzc2luZy4KKyAgICAgICAgZGlzcGF0Y2hFdmVudChBdWRp
b1Byb2Nlc3NpbmdFdmVudDo6Y3JlYXRlKGlucHV0QnVmZmVyLCBvdXRwdXRCdWZmZXIpKTsKKyAg
ICB9Cit9CisKK3ZvaWQgSmF2YVNjcmlwdEF1ZGlvTm9kZTo6cmVzZXQoKQoreworICAgIG1fYnVm
ZmVyUmVhZFdyaXRlSW5kZXggPSAwOworICAgIG1fZG91YmxlQnVmZmVySW5kZXggPSAwOworCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI7ICsraSkgeworICAgICAgICBtX2lucHV0QnVm
ZmVyc1tpXS0+emVybygpOworICAgICAgICBtX291dHB1dEJ1ZmZlcnNbaV0tPnplcm8oKTsKKyAg
ICB9Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYgSmF2YVNjcmlwdEF1ZGlvTm9kZTo6aW50ZXJm
YWNlTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JK
YXZhU2NyaXB0QXVkaW9Ob2RlOworfQorCitTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBKYXZhU2Ny
aXB0QXVkaW9Ob2RlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gY29uc3RfY2FzdDxKYXZhU2NyaXB0QXVkaW9Ob2RlKj4odGhpcyktPmNvbnRleHQoKS0+ZG9j
dW1lbnQoKTsKK30KKworZG91YmxlIEphdmFTY3JpcHRBdWRpb05vZGU6OnRhaWxUaW1lKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgp
OworfQorCitkb3VibGUgSmF2YVNjcmlwdEF1ZGlvTm9kZTo6bGF0ZW5jeVRpbWUoKSBjb25zdAor
eworICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8p
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0phdmFT
Y3JpcHRBdWRpb05vZGUuaAkocmV2aXNpb24gMTExNDMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmg6MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEphdmFTY3JpcHRBdWRpb05vZGVf
aAorI2RlZmluZSBKYXZhU2NyaXB0QXVkaW9Ob2RlX2gKKworI2luY2x1ZGUgIkFjdGl2ZURPTU9i
amVjdC5oIgorI2luY2x1ZGUgIkF1ZGlvTm9kZS5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIu
aCIKKyNpbmNsdWRlICJFdmVudFRhcmdldC5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlv
QnVmZmVyOworY2xhc3MgQXVkaW9Db250ZXh0OworY2xhc3MgQXVkaW9Qcm9jZXNzaW5nRXZlbnQ7
CisKKy8vIEphdmFTY3JpcHRBdWRpb05vZGUgaXMgYW4gQXVkaW9Ob2RlIHdoaWNoIGFsbG93cyBm
b3IgYXJiaXRyYXJ5IHN5bnRoZXNpcyBvciBwcm9jZXNzaW5nIGRpcmVjdGx5IHVzaW5nIEphdmFT
Y3JpcHQuCisvLyBUaGUgQVBJIGFsbG93cyBmb3IgYSB2YXJpYWJsZSBudW1iZXIgb2YgaW5wdXRz
IGFuZCBvdXRwdXRzLCBhbHRob3VnaCBpdCBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGlucHV0IG9y
IG91dHB1dC4KKy8vIFRoaXMgYmFzaWMgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgbm8gbW9yZSB0
aGFuIG9uZSBpbnB1dCBhbmQgb3V0cHV0LgorLy8gVGhlICJvbmF1ZGlvcHJvY2VzcyIgYXR0cmli
dXRlIGlzIGFuIGV2ZW50IGxpc3RlbmVyIHdoaWNoIHdpbGwgZ2V0IGNhbGxlZCBwZXJpb2RpY2Fs
bHkgd2l0aCBhbiBBdWRpb1Byb2Nlc3NpbmdFdmVudCB3aGljaCBoYXMKKy8vIEF1ZGlvQnVmZmVy
cyBmb3IgZWFjaCBpbnB1dCBhbmQgb3V0cHV0LgorCisvLyBGSVhNRTogRXZlbnRUYXJnZXQgc2hv
dWxkIGJlIGludHJvZHVjZWQgYXQgdGhlIGJhc2Ugb2YgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNo
eSAoaS5lLiwgYXMgYSBiYXNlIGNsYXNzIGZvciBBdWRpb05vZGUpLgorY2xhc3MgSmF2YVNjcmlw
dEF1ZGlvTm9kZSA6IHB1YmxpYyBBdWRpb05vZGUsIHB1YmxpYyBFdmVudFRhcmdldCB7CitwdWJs
aWM6CisgICAgLy8gYnVmZmVyU2l6ZSBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVl
czogMjU2LCA1MTIsIDEwMjQsIDIwNDgsIDQwOTYsIDgxOTIsIDE2Mzg0LgorICAgIC8vIFRoaXMg
dmFsdWUgY29udHJvbHMgaG93IGZyZXF1ZW50bHkgdGhlIG9uYXVkaW9wcm9jZXNzIGV2ZW50IGhh
bmRsZXIgaXMgY2FsbGVkIGFuZCBob3cgbWFueSBzYW1wbGUtZnJhbWVzIG5lZWQgdG8gYmUgcHJv
Y2Vzc2VkIGVhY2ggY2FsbC4KKyAgICAvLyBMb3dlciBudW1iZXJzIGZvciBidWZmZXJTaXplIHdp
bGwgcmVzdWx0IGluIGEgbG93ZXIgKGJldHRlcikgbGF0ZW5jeS4gSGlnaGVyIG51bWJlcnMgd2ls
bCBiZSBuZWNlc3NhcnkgdG8gYXZvaWQgYXVkaW8gYnJlYWt1cCBhbmQgZ2xpdGNoZXMuCisgICAg
Ly8gVGhlIHZhbHVlIGNob3NlbiBtdXN0IGNhcmVmdWxseSBiYWxhbmNlIGJldHdlZW4gbGF0ZW5j
eSBhbmQgYXVkaW8gcXVhbGl0eS4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxKYXZhU2NyaXB0QXVk
aW9Ob2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSwgc2l6ZV90IGJ1
ZmZlclNpemUsIHVuc2lnbmVkIG51bWJlck9mSW5wdXRzID0gMSwgdW5zaWduZWQgbnVtYmVyT2ZP
dXRwdXRzID0gMSk7CisKKyAgICB2aXJ0dWFsIH5KYXZhU2NyaXB0QXVkaW9Ob2RlKCk7CisKKyAg
ICAvLyBBdWRpb05vZGUKKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Q
cm9jZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5p
dGlhbGl6ZSgpOworICAgIHZpcnR1YWwgdm9pZCB1bmluaXRpYWxpemUoKTsKKworICAgIC8vIEV2
ZW50VGFyZ2V0CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRU
YXJnZXREYXRhKCkgeyByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOyB9CisgICAgdmlydHVhbCBF
dmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpICB7IHJldHVybiAmbV9ldmVu
dFRhcmdldERhdGE7IH0KKworICAgIHNpemVfdCBidWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9idWZmZXJTaXplOyB9CisKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGF1
ZGlvcHJvY2Vzcyk7CisKKyAgICAvLyBSZWNvbmNpbGUgcmVmL2RlcmVmIHdoaWNoIGFyZSBkZWZp
bmVkIGJvdGggaW4gQXVkaW9Ob2RlIGFuZCBFdmVudFRhcmdldC4KKyAgICB1c2luZyBBdWRpb05v
ZGU6OnJlZjsKKyAgICB1c2luZyBBdWRpb05vZGU6OmRlcmVmOworICAgIAorcHJpdmF0ZToKKyAg
ICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwg
ZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICBKYXZhU2NyaXB0QXVk
aW9Ob2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUsIHNpemVfdCBidWZmZXJTaXpl
LCB1bnNpZ25lZCBudW1iZXJPZklucHV0cywgdW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRzKTsKKwor
ICAgIHN0YXRpYyB2b2lkIGZpcmVQcm9jZXNzRXZlbnREaXNwYXRjaCh2b2lkKiB1c2VyRGF0YSk7
CisgICAgdm9pZCBmaXJlUHJvY2Vzc0V2ZW50KCk7CisKKyAgICAvLyBEb3VibGUgYnVmZmVyaW5n
CisgICAgdW5zaWduZWQgZG91YmxlQnVmZmVySW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2RvdWJs
ZUJ1ZmZlckluZGV4OyB9CisgICAgdm9pZCBzd2FwQnVmZmVycygpIHsgbV9kb3VibGVCdWZmZXJJ
bmRleCA9IDEgLSBtX2RvdWJsZUJ1ZmZlckluZGV4OyB9CisgICAgdW5zaWduZWQgbV9kb3VibGVC
dWZmZXJJbmRleDsKKyAgICB1bnNpZ25lZCBtX2RvdWJsZUJ1ZmZlckluZGV4Rm9yRXZlbnQ7Cisg
ICAgVmVjdG9yPFJlZlB0cjxBdWRpb0J1ZmZlcj4gPiBtX2lucHV0QnVmZmVyczsKKyAgICBWZWN0
b3I8UmVmUHRyPEF1ZGlvQnVmZmVyPiA+IG1fb3V0cHV0QnVmZmVyczsKKworICAgIHZpcnR1YWwg
dm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVyZWZF
dmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQorICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFy
Z2V0RGF0YTsKKworICAgIHNpemVfdCBtX2J1ZmZlclNpemU7CisgICAgdW5zaWduZWQgbV9idWZm
ZXJSZWFkV3JpdGVJbmRleDsKKyAgICB2b2xhdGlsZSBib29sIG1faXNSZXF1ZXN0T3V0c3RhbmRp
bmc7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBKYXZhU2NyaXB0
QXVkaW9Ob2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vSmF2YVNj
cmlwdEF1ZGlvTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmlkbAkocmV2aXNpb24gMTExNDMzKQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmlkbDoxMTE0MzMpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgYXVk
aW8geworICAgIC8vIEZvciByZWFsLXRpbWUgYXVkaW8gc3RyZWFtIHN5bnRoZXNpcy9wcm9jZXNz
aW5nIGluIEphdmFTY3JpcHQgCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9
V0VCX0FVRElPLAorICAgICAgICBKU0dlbmVyYXRlVG9KU09iamVjdCwKKyAgICAgICAgSlNDdXN0
b21NYXJrRnVuY3Rpb24sCisgICAgICAgIEV2ZW50VGFyZ2V0CisgICAgXSBKYXZhU2NyaXB0QXVk
aW9Ob2RlIDogQXVkaW9Ob2RlIHsKKyAgICAgICAgLy8gUmVuZGVyaW5nIGNhbGxiYWNrCisgICAg
ICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uYXVkaW9wcm9jZXNzOworICAgICAgICAKKyAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgYnVmZmVyU2l6ZTsKKyAgICB9OworfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTG93UGFzczJG
aWx0ZXJOb2RlLmNwcAkocmV2aXNpb24gMTExNDMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuY3BwOjExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkxvd1Bhc3MyRmlsdGVyTm9kZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0xvd1Bhc3MyRmlsdGVyTm9kZTo6TG93UGFzczJGaWx0ZXJOb2Rl
KEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKKyAgICA6IEF1ZGlvQmFz
aWNQcm9jZXNzb3JOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCit7CisgICAgbV9wcm9jZXNzb3Ig
PSBhZG9wdFB0cihuZXcgQmlxdWFkUHJvY2Vzc29yKEJpcXVhZFByb2Nlc3Nvcjo6TG93UGFzcywg
c2FtcGxlUmF0ZSwgMSwgZmFsc2UpKTsKKyAgICBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVy
MSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0
ZXIyKCktPnNldENvbnRleHQoY29udGV4dCk7CisgICAgYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFt
ZXRlcjMoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICBzZXROb2RlVHlwZShOb2RlVHlwZUxv
d1Bhc3MyRmlsdGVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
TG93UGFzczJGaWx0ZXJOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuaAkocmV2aXNpb24gMTExNDMzKQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuaDoxMTE0MzMpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIExvd1Bhc3My
RmlsdGVyTm9kZV9oCisjZGVmaW5lIExvd1Bhc3MyRmlsdGVyTm9kZV9oCisKKyNpbmNsdWRlICJB
dWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oIgorI2luY2x1ZGUgIkJpcXVhZFByb2Nlc3Nvci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvUGFyYW07CisgICAgCitjbGFzcyBM
b3dQYXNzMkZpbHRlck5vZGUgOiBwdWJsaWMgQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvd1Bhc3MyRmlsdGVyTm9kZT4gY3JlYXRlKEF1
ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgTG93UGFzczJGaWx0ZXJOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUp
KTsgICAgICAKKyAgICB9CisKKyAgICBBdWRpb1BhcmFtKiBjdXRvZmYoKSB7IHJldHVybiBiaXF1
YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMSgpOyB9CisgICAgQXVkaW9QYXJhbSogcmVzb25hbmNl
KCkgeyByZXR1cm4gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjIoKTsgfQorICAgIAorcHJp
dmF0ZToKKyAgICBMb3dQYXNzMkZpbHRlck5vZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxl
UmF0ZSk7CisKKyAgICBCaXF1YWRQcm9jZXNzb3IqIGJpcXVhZFByb2Nlc3NvcigpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PEJpcXVhZFByb2Nlc3Nvcio+KHByb2Nlc3NvcigpKTsgfQorfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTG93UGFzczJGaWx0ZXJOb2RlX2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0xvd1Bhc3My
RmlsdGVyTm9kZS5pZGwJKHJldmlzaW9uIDExMTQzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmlkbDoxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBhdWRpbyB7CisgICAgLy8gVHdvLXBv
bGUgbG93cGFzcyBmaWx0ZXIKKyAgICAvLyBGSVhNRTogZGVzaWduIEJpcXVhZE5vZGUgYW5kIHVz
ZSBpbnN0ZWFkIG9mIHRoaXMKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1X
RUJfQVVESU8sCisgICAgICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0CisgICAgXSBMb3dQYXNzMkZp
bHRlck5vZGUgOiBBdWRpb05vZGUgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9Q
YXJhbSBjdXRvZmY7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIHJlc29u
YW5jZTsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9N
ZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcAkocmV2
aXNpb24gMTExNDMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRB
dWRpb1NvdXJjZU5vZGUuY3BwOjExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShXRUJfQVVESU8pICYmIEVOQUJMRShWSURFTykKKworI2luY2x1ZGUgIk1lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZS5oIgorCisjaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCisjaW5jbHVk
ZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1l
ZGlhUGxheWVyLmgiCisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorCisvLyBUaGVzZSBhcmUgc29t
ZXdoYXQgYXJiaXRyYXJ5IGxpbWl0cywgYnV0IHdlIG5lZWQgdG8gZG8gc29tZSBraW5kIG9mIHNh
bml0eS1jaGVja2luZy4KK2NvbnN0IHVuc2lnbmVkIG1pblNhbXBsZVJhdGUgPSA4MDAwOworY29u
c3QgdW5zaWduZWQgbWF4U2FtcGxlUmF0ZSA9IDE5MjAwMDsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitQYXNzUmVmUHRyPE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4gTWVkaWFFbGVtZW50
QXVkaW9Tb3VyY2VOb2RlOjpjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBIVE1MTWVkaWFF
bGVtZW50KiBtZWRpYUVsZW1lbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYUVs
ZW1lbnRBdWRpb1NvdXJjZU5vZGUoY29udGV4dCwgbWVkaWFFbGVtZW50KSk7Cit9CisKK01lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZTo6TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlKEF1ZGlv
Q29udGV4dCogY29udGV4dCwgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KQorICAgIDog
QXVkaW9Tb3VyY2VOb2RlKGNvbnRleHQsIGNvbnRleHQtPnNhbXBsZVJhdGUoKSkKKyAgICAsIG1f
bWVkaWFFbGVtZW50KG1lZGlhRWxlbWVudCkKKyAgICAsIG1fc291cmNlTnVtYmVyT2ZDaGFubmVs
cygwKQorICAgICwgbV9zb3VyY2VTYW1wbGVSYXRlKDApCit7CisgICAgLy8gRGVmYXVsdCB0byBz
dGVyZW8uIFRoaXMgY291bGQgY2hhbmdlIGRlcGVuZGluZyBvbiB3aGF0IHRoZSBtZWRpYSBlbGVt
ZW50IC5zcmMgaXMgc2V0IHRvLgorICAgIGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2Rl
T3V0cHV0KHRoaXMsIDIpKSk7CisKKyAgICBzZXROb2RlVHlwZShOb2RlVHlwZU1lZGlhRWxlbWVu
dEF1ZGlvU291cmNlKTsKKworICAgIGluaXRpYWxpemUoKTsKK30KKworTWVkaWFFbGVtZW50QXVk
aW9Tb3VyY2VOb2RlOjp+TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlKCkKK3sKKyAgICBtX21l
ZGlhRWxlbWVudC0+c2V0QXVkaW9Tb3VyY2VOb2RlKDApOworICAgIHVuaW5pdGlhbGl6ZSgpOwor
fQorCit2b2lkIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6c2V0Rm9ybWF0KHNpemVfdCBu
dW1iZXJPZkNoYW5uZWxzLCBmbG9hdCBzb3VyY2VTYW1wbGVSYXRlKQoreworICAgIGlmIChudW1i
ZXJPZkNoYW5uZWxzICE9IG1fc291cmNlTnVtYmVyT2ZDaGFubmVscyB8fCBzb3VyY2VTYW1wbGVS
YXRlICE9IG1fc291cmNlU2FtcGxlUmF0ZSkgeworICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50
IG11bHRpLWNoYW5uZWwgZ3JlYXRlciB0aGFuIHN0ZXJlby4KKyAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTE5CisgICAgICAgIGlmICghbnVtYmVy
T2ZDaGFubmVscyB8fCBudW1iZXJPZkNoYW5uZWxzID4gMiB8fCBzb3VyY2VTYW1wbGVSYXRlIDwg
bWluU2FtcGxlUmF0ZSB8fCBzb3VyY2VTYW1wbGVSYXRlID4gbWF4U2FtcGxlUmF0ZSkgeworICAg
ICAgICAgICAgLy8gcHJvY2VzcygpIHdpbGwgZ2VuZXJhdGUgc2lsZW5jZSBmb3IgdGhlc2UgdW5p
bml0aWFsaXplZCB2YWx1ZXMuCisgICAgICAgICAgICBMT0coTWVkaWEsICJNZWRpYUVsZW1lbnRB
dWRpb1NvdXJjZU5vZGU6OnNldEZvcm1hdCgldSwgJWYpIC0gdW5oYW5kbGVkIGZvcm1hdCBjaGFu
Z2UiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obnVtYmVyT2ZDaGFubmVscyksIHNvdXJjZVNhbXBs
ZVJhdGUpOworICAgICAgICAgICAgbV9zb3VyY2VOdW1iZXJPZkNoYW5uZWxzID0gMDsKKyAgICAg
ICAgICAgIG1fc291cmNlU2FtcGxlUmF0ZSA9IDA7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBtX3NvdXJjZU51bWJlck9mQ2hhbm5lbHMgPSBudW1iZXJPZkNoYW5u
ZWxzOworICAgICAgICBtX3NvdXJjZVNhbXBsZVJhdGUgPSBzb3VyY2VTYW1wbGVSYXRlOworCisg
ICAgICAgIC8vIFN5bmNocm9uaXplIHdpdGggcHJvY2VzcygpLgorICAgICAgICBMb2NrZXI8TWVk
aWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBsb2NrZXIoKnRoaXMpOworCisgICAgICAgIGlmIChz
b3VyY2VTYW1wbGVSYXRlICE9IHNhbXBsZVJhdGUoKSkgeworICAgICAgICAgICAgZG91YmxlIHNj
YWxlRmFjdG9yID0gc291cmNlU2FtcGxlUmF0ZSAvIHNhbXBsZVJhdGUoKTsKKyAgICAgICAgICAg
IG1fbXVsdGlDaGFubmVsUmVzYW1wbGVyID0gYWRvcHRQdHIobmV3IE11bHRpQ2hhbm5lbFJlc2Ft
cGxlcihzY2FsZUZhY3RvciwgbnVtYmVyT2ZDaGFubmVscykpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gQnlwYXNzIHJlc2FtcGxpbmcuCisgICAgICAgICAgICBtX211bHRpQ2hh
bm5lbFJlc2FtcGxlci5jbGVhcigpOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAg
ICAgLy8gVGhlIGNvbnRleHQgbXVzdCBiZSBsb2NrZWQgd2hlbiBjaGFuZ2luZyB0aGUgbnVtYmVy
IG9mIG91dHB1dCBjaGFubmVscy4KKyAgICAgICAgICAgIEF1ZGlvQ29udGV4dDo6QXV0b0xvY2tl
ciBjb250ZXh0TG9ja2VyKGNvbnRleHQoKSk7CisKKyAgICAgICAgICAgIC8vIERvIGFueSBuZWNl
c3NzYXJ5IHJlLWNvbmZpZ3VyYXRpb24gdG8gdGhlIG91dHB1dCdzIG51bWJlciBvZiBjaGFubmVs
cy4KKyAgICAgICAgICAgIG91dHB1dCgwKS0+c2V0TnVtYmVyT2ZDaGFubmVscyhudW1iZXJPZkNo
YW5uZWxzKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBNZWRpYUVsZW1lbnRBdWRpb1Nv
dXJjZU5vZGU6OnByb2Nlc3Moc2l6ZV90IG51bWJlck9mRnJhbWVzKQoreworICAgIEF1ZGlvQnVz
KiBvdXRwdXRCdXMgPSBvdXRwdXQoMCktPmJ1cygpOworCisgICAgaWYgKCFtZWRpYUVsZW1lbnQo
KSB8fCAhbV9zb3VyY2VOdW1iZXJPZkNoYW5uZWxzIHx8ICFtX3NvdXJjZVNhbXBsZVJhdGUpIHsK
KyAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBVc2UgYSB0cnlMb2NrKCkgdG8gYXZvaWQgY29udGVudGlvbiBpbiB0aGUgcmVhbC10aW1l
IGF1ZGlvIHRocmVhZC4KKyAgICAvLyBJZiB3ZSBmYWlsIHRvIGFjcXVpcmUgdGhlIGxvY2sgdGhl
biB0aGUgSFRNTE1lZGlhRWxlbWVudCBtdXN0IGJlIGluIHRoZSBtaWRkbGUgb2YKKyAgICAvLyBy
ZWNvbmZpZ3VyaW5nIGl0cyBwbGF5YmFjayBlbmdpbmUsIHNvIHdlIG91dHB1dCBzaWxlbmNlIGlu
IHRoaXMgY2FzZS4KKyAgICBpZiAobV9wcm9jZXNzTG9jay50cnlMb2NrKCkpIHsKKyAgICAgICAg
aWYgKEF1ZGlvU291cmNlUHJvdmlkZXIqIHByb3ZpZGVyID0gbWVkaWFFbGVtZW50KCktPmF1ZGlv
U291cmNlUHJvdmlkZXIoKSkgeworICAgICAgICAgICAgaWYgKG1fbXVsdGlDaGFubmVsUmVzYW1w
bGVyLmdldCgpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fc291cmNlU2FtcGxlUmF0ZSAh
PSBzYW1wbGVSYXRlKCkpOworICAgICAgICAgICAgICAgIG1fbXVsdGlDaGFubmVsUmVzYW1wbGVy
LT5wcm9jZXNzKHByb3ZpZGVyLCBvdXRwdXRCdXMsIG51bWJlck9mRnJhbWVzKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gQnlwYXNzIHRoZSByZXNhbXBsZXIgY29t
cGxldGVseSBpZiB0aGUgc291cmNlIGlzIGF0IHRoZSBjb250ZXh0J3Mgc2FtcGxlLXJhdGUuCisg
ICAgICAgICAgICAgICAgQVNTRVJUKG1fc291cmNlU2FtcGxlUmF0ZSA9PSBzYW1wbGVSYXRlKCkp
OworICAgICAgICAgICAgICAgIHByb3ZpZGVyLT5wcm92aWRlSW5wdXQob3V0cHV0QnVzLCBudW1i
ZXJPZkZyYW1lcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAvLyBFaXRoZXIgdGhpcyBwb3J0IGRvZXNuJ3QgeWV0IHN1cHBvcnQgSFRNTE1lZGlhRWxlbWVu
dCBhdWRpbyBzdHJlYW0gYWNjZXNzLAorICAgICAgICAgICAgLy8gb3IgdGhlIHN0cmVhbSBpcyBu
b3QgeWV0IGF2YWlsYWJsZS4KKyAgICAgICAgICAgIG91dHB1dEJ1cy0+emVybygpOworICAgICAg
ICB9CisgICAgICAgIG1fcHJvY2Vzc0xvY2sudW5sb2NrKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gV2UgZmFpbGVkIHRvIGFjcXVpcmUgdGhlIGxvY2suCisgICAgICAgIG91dHB1dEJ1cy0+
emVybygpOworICAgIH0KK30KKwordm9pZCBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6OnJl
c2V0KCkKK3sKK30KKwordm9pZCBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6OmxvY2soKQor
eworICAgIHJlZigpOworICAgIG1fcHJvY2Vzc0xvY2subG9jaygpOworfQorCit2b2lkIE1lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZTo6dW5sb2NrKCkKK3sKKyAgICBtX3Byb2Nlc3NMb2NrLnVu
bG9jaygpOworICAgIGRlcmVmKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmgJ
KHJldmlzaW9uIDExMTQzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVt
ZW50QXVkaW9Tb3VyY2VOb2RlLmg6MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNZWRpYUVsZW1lbnRBdWRpb1NvdXJj
ZU5vZGVfaAorI2RlZmluZSBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGVfaAorCisjaWYgRU5B
QkxFKFZJREVPKQorCisjaW5jbHVkZSAiQXVkaW9Tb3VyY2VOb2RlLmgiCisjaW5jbHVkZSAiQXVk
aW9Tb3VyY2VQcm92aWRlckNsaWVudC5oIgorI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIK
KyNpbmNsdWRlICJNdWx0aUNoYW5uZWxSZXNhbXBsZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9Db250ZXh0OworICAgIAor
Y2xhc3MgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlIDogcHVibGljIEF1ZGlvU291cmNlTm9k
ZSwgcHVibGljIEF1ZGlvU291cmNlUHJvdmlkZXJDbGllbnQgeworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4gY3JlYXRlKEF1ZGlvQ29u
dGV4dCosIEhUTUxNZWRpYUVsZW1lbnQqKTsKKworICAgIHZpcnR1YWwgfk1lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZSgpOworCisgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50KCkg
eyByZXR1cm4gbV9tZWRpYUVsZW1lbnQuZ2V0KCk7IH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCisKKyAgICAvLyBBdWRpb05vZGUKKyAgICB2aXJ0dWFsIHZvaWQgcHJv
Y2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsK
KyAgICAKKyAgICAvLyBBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50CisgICAgdmlydHVhbCB2b2lk
IHNldEZvcm1hdChzaXplX3QgbnVtYmVyT2ZDaGFubmVscywgZmxvYXQgc2FtcGxlUmF0ZSk7Cisg
ICAgCisgICAgdm9pZCBsb2NrKCk7CisgICAgdm9pZCB1bmxvY2soKTsKKworcHJpdmF0ZToKKyAg
ICBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUoQXVkaW9Db250ZXh0KiwgSFRNTE1lZGlhRWxl
bWVudCopOworCisgICAgUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1fbWVkaWFFbGVtZW50Owor
ICAgIE11dGV4IG1fcHJvY2Vzc0xvY2s7CisKKyAgICB1bnNpZ25lZCBtX3NvdXJjZU51bWJlck9m
Q2hhbm5lbHM7CisgICAgZG91YmxlIG1fc291cmNlU2FtcGxlUmF0ZTsKKworICAgIE93blB0cjxN
dWx0aUNoYW5uZWxSZXNhbXBsZXI+IG1fbXVsdGlDaGFubmVsUmVzYW1wbGVyOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorCisjZW5kaWYg
Ly8gTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291
cmNlTm9kZS5pZGwJKHJldmlzaW9uIDExMTQzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmlkbDoxMTE0MzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBhdWRpbyB7
CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPJlZJREVPLAor
ICAgICAgICBKU0dlbmVyYXRlVG9KU09iamVjdAorICAgIF0gTWVkaWFFbGVtZW50QXVkaW9Tb3Vy
Y2VOb2RlIDogQXVkaW9Tb3VyY2VOb2RlIHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEhU
TUxNZWRpYUVsZW1lbnQgbWVkaWFFbGVtZW50OworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9D
b21wbGV0aW9uRXZlbnQuY3BwCShyZXZpc2lvbiAxMTE0MzMpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5jcHA6MTExNDMzKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiT2ZmbGlu
ZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmgiCisKKyNpbmNsdWRlICJBdWRpb0J1ZmZlci5oIgorI2lu
Y2x1ZGUgIkV2ZW50TmFtZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRy
PE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudD4gT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50
OjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgT2ZmbGluZUF1ZGlvQ29tcGxl
dGlvbkV2ZW50KTsKK30KKworUGFzc1JlZlB0cjxPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ+
IE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6Y3JlYXRlKFBhc3NSZWZQdHI8QXVkaW9CdWZm
ZXI+IHJlbmRlcmVkQnVmZmVyKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgT2ZmbGluZUF1
ZGlvQ29tcGxldGlvbkV2ZW50KHJlbmRlcmVkQnVmZmVyKSk7Cit9CisKK09mZmxpbmVBdWRpb0Nv
bXBsZXRpb25FdmVudDo6T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50KCkKK3sKK30KKworCitP
ZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ6Ok9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudChQ
YXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiByZW5kZXJlZEJ1ZmZlcikKKyAgICA6IEV2ZW50KGV2ZW50
TmFtZXMoKS5jb21wbGV0ZUV2ZW50LCB0cnVlLCBmYWxzZSkKKyAgICAsIG1fcmVuZGVyZWRCdWZm
ZXIocmVuZGVyZWRCdWZmZXIpCit7Cit9CisKK09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6
fk9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCgpCit7Cit9CisKK2NvbnN0IEF0b21pY1N0cmlu
ZyYgT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvck9mZmxpbmVBdWRpb0NvbXBsZXRp
b25FdmVudDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGlu
ZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaAkocmV2aXNpb24gMTEx
NDMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9u
RXZlbnQuaDoxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxp
bmVBdWRpb0NvbXBsZXRpb25FdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudF9oCisjZGVm
aW5lIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudF9oCisKKyNpbmNsdWRlICJBdWRpb0J1ZmZl
ci5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVk
aW9CdWZmZXI7CisgICAgCitjbGFzcyBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQgOiBwdWJs
aWMgRXZlbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE9mZmxpbmVBdWRpb0Nv
bXBsZXRpb25FdmVudD4gY3JlYXRlKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8T2ZmbGluZUF1
ZGlvQ29tcGxldGlvbkV2ZW50PiBjcmVhdGUoUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gcmVuZGVy
ZWRCdWZmZXIpOworICAgIAorICAgIHZpcnR1YWwgfk9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVu
dCgpOworCisgICAgQXVkaW9CdWZmZXIqIHJlbmRlcmVkQnVmZmVyKCkgeyByZXR1cm4gbV9yZW5k
ZXJlZEJ1ZmZlci5nZXQoKTsgfQorCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGlu
dGVyZmFjZU5hbWUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBPZmZsaW5lQXVkaW9Db21wbGV0
aW9uRXZlbnQoKTsKKyAgICBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQoUGFzc1JlZlB0cjxB
dWRpb0J1ZmZlcj4gcmVuZGVyZWRCdWZmZXIpOworCisgICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBt
X3JlbmRlcmVkQnVmZmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRp
b25FdmVudC5pZGwJKHJldmlzaW9uIDExMTQzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmlkbDoxMTE0MzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBhdWRpbyB7
CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAorICAgICAg
ICBKU0dlbmVyYXRlVG9KU09iamVjdAorICAgIF0gT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50
IDogRXZlbnQgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9CdWZmZXIgcmVuZGVy
ZWRCdWZmZXI7CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAJ
KHJldmlzaW9uIDExMTQzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1
ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDoxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25O
b2RlLmgiCisKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgorI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5o
IgorI2luY2x1ZGUgIkhSVEZEYXRhYmFzZUxvYWRlci5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4K
KyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworIAor
bmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorY29uc3Qgc2l6ZV90IHJlbmRlclF1YW50dW1TaXpl
ID0gMTI4OyAgICAKKworT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpPZmZsaW5lQXVkaW9E
ZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBBdWRpb0J1ZmZlciogcmVuZGVy
VGFyZ2V0KQorICAgIDogQXVkaW9EZXN0aW5hdGlvbk5vZGUoY29udGV4dCwgcmVuZGVyVGFyZ2V0
LT5zYW1wbGVSYXRlKCkpCisgICAgLCBtX3JlbmRlclRhcmdldChyZW5kZXJUYXJnZXQpCisgICAg
LCBtX3JlbmRlclRocmVhZCgwKQorICAgICwgbV9zdGFydGVkUmVuZGVyaW5nKGZhbHNlKQorewor
ICAgIG1fcmVuZGVyQnVzID0gYWRvcHRQdHIobmV3IEF1ZGlvQnVzKHJlbmRlclRhcmdldC0+bnVt
YmVyT2ZDaGFubmVscygpLCByZW5kZXJRdWFudHVtU2l6ZSkpOworfQorCitPZmZsaW5lQXVkaW9E
ZXN0aW5hdGlvbk5vZGU6On5PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUoKQoreworICAgIHVu
aW5pdGlhbGl6ZSgpOworfQorCit2b2lkIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6aW5p
dGlhbGl6ZSgpCit7CisgICAgaWYgKGlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7Cit9CisKK3ZvaWQgT2ZmbGluZUF1ZGlvRGVz
dGluYXRpb25Ob2RlOjp1bmluaXRpYWxpemUoKQoreworICAgIGlmICghaXNJbml0aWFsaXplZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9yZW5kZXJUaHJlYWQpIHsKKyAgICAgICAg
d2FpdEZvclRocmVhZENvbXBsZXRpb24obV9yZW5kZXJUaHJlYWQpOworICAgICAgICBtX3JlbmRl
clRocmVhZCA9IDA7CisgICAgfQorCisgICAgQXVkaW9Ob2RlOjp1bmluaXRpYWxpemUoKTsKK30K
Kwordm9pZCBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnN0YXJ0UmVuZGVyaW5nKCkKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX3JlbmRlclRhcmdldC5n
ZXQoKSk7CisgICAgaWYgKCFtX3JlbmRlclRhcmdldC5nZXQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGlmICghbV9zdGFydGVkUmVuZGVyaW5nKSB7CisgICAgICAgIG1fc3RhcnRlZFJl
bmRlcmluZyA9IHRydWU7CisgICAgICAgIHJlZigpOyAvLyBTZWUgY29ycmVzcG9uZGluZyBkZXJl
ZigpIGNhbGwgaW4gbm90aWZ5Q29tcGxldGVEaXNwYXRjaCgpLgorICAgICAgICBtX3JlbmRlclRo
cmVhZCA9IGNyZWF0ZVRocmVhZChPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnJlbmRlckVu
dHJ5LCB0aGlzLCAib2ZmbGluZSByZW5kZXJlciIpOworICAgIH0KK30KKworLy8gRG8gb2ZmbGlu
ZSByZW5kZXJpbmcgaW4gdGhpcyB0aHJlYWQuCit2b2lkIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9u
Tm9kZTo6cmVuZGVyRW50cnkodm9pZCogdGhyZWFkRGF0YSkKK3sKKyAgICBPZmZsaW5lQXVkaW9E
ZXN0aW5hdGlvbk5vZGUqIGRlc3RpbmF0aW9uTm9kZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8T2ZmbGlu
ZUF1ZGlvRGVzdGluYXRpb25Ob2RlKj4odGhyZWFkRGF0YSk7CisgICAgQVNTRVJUKGRlc3RpbmF0
aW9uTm9kZSk7CisgICAgZGVzdGluYXRpb25Ob2RlLT5yZW5kZXIoKTsKK30KKwordm9pZCBPZmZs
aW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnJlbmRlcigpCit7CisgICAgQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7CisgICAgQVNTRVJUKG1fcmVuZGVyQnVzLmdldCgpKTsKKyAgICBpZiAoIW1fcmVu
ZGVyQnVzLmdldCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYm9vbCBjaGFubmVsc01h
dGNoID0gbV9yZW5kZXJCdXMtPm51bWJlck9mQ2hhbm5lbHMoKSA9PSBtX3JlbmRlclRhcmdldC0+
bnVtYmVyT2ZDaGFubmVscygpOworICAgIEFTU0VSVChjaGFubmVsc01hdGNoKTsKKyAgICBpZiAo
IWNoYW5uZWxzTWF0Y2gpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgYm9vbCBpc1Jl
bmRlckJ1c0FsbG9jYXRlZCA9IG1fcmVuZGVyQnVzLT5sZW5ndGgoKSA+PSByZW5kZXJRdWFudHVt
U2l6ZTsKKyAgICBBU1NFUlQoaXNSZW5kZXJCdXNBbGxvY2F0ZWQpOworICAgIGlmICghaXNSZW5k
ZXJCdXNBbGxvY2F0ZWQpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgLy8gU3luY2hy
b25pemUgd2l0aCBIUlRGRGF0YWJhc2VMb2FkZXIuCisgICAgLy8gVGhlIGRhdGFiYXNlIG11c3Qg
YmUgbG9hZGVkIGJlZm9yZSB3ZSBjYW4gcHJvY2VlZC4KKyAgICBIUlRGRGF0YWJhc2VMb2FkZXIq
IGxvYWRlciA9IEhSVEZEYXRhYmFzZUxvYWRlcjo6bG9hZGVyKCk7CisgICAgQVNTRVJUKGxvYWRl
cik7CisgICAgaWYgKCFsb2FkZXIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBsb2FkZXIt
PndhaXRGb3JMb2FkZXJUaHJlYWRDb21wbGV0aW9uKCk7CisgICAgICAgIAorICAgIC8vIEJyZWFr
IHVwIHRoZSByZW5kZXIgdGFyZ2V0IGludG8gc21hbGxlciAicmVuZGVyIHF1YW50aXplIiBzaXpl
ZCBwaWVjZXMuCisgICAgLy8gUmVuZGVyIHVudGlsIHdlJ3JlIGZpbmlzaGVkLgorICAgIHNpemVf
dCBmcmFtZXNUb1Byb2Nlc3MgPSBtX3JlbmRlclRhcmdldC0+bGVuZ3RoKCk7CisgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZDaGFubmVscyA9IG1fcmVuZGVyVGFyZ2V0LT5udW1iZXJPZkNoYW5uZWxzKCk7
CisKKyAgICB1bnNpZ25lZCBuID0gMDsKKyAgICB3aGlsZSAoZnJhbWVzVG9Qcm9jZXNzID4gMCkg
eworICAgICAgICAvLyBSZW5kZXIgb25lIHJlbmRlciBxdWFudHVtLgorICAgICAgICBwcm92aWRl
SW5wdXQobV9yZW5kZXJCdXMuZ2V0KCksIHJlbmRlclF1YW50dW1TaXplKTsKKyAgICAgICAgCisg
ICAgICAgIHNpemVfdCBmcmFtZXNBdmFpbGFibGVUb0NvcHkgPSBtaW4oZnJhbWVzVG9Qcm9jZXNz
LCByZW5kZXJRdWFudHVtU2l6ZSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGNo
YW5uZWxJbmRleCA9IDA7IGNoYW5uZWxJbmRleCA8IG51bWJlck9mQ2hhbm5lbHM7ICsrY2hhbm5l
bEluZGV4KSB7CisgICAgICAgICAgICBjb25zdCBmbG9hdCogc291cmNlID0gbV9yZW5kZXJCdXMt
PmNoYW5uZWwoY2hhbm5lbEluZGV4KS0+ZGF0YSgpOworICAgICAgICAgICAgZmxvYXQqIGRlc3Rp
bmF0aW9uID0gbV9yZW5kZXJUYXJnZXQtPmdldENoYW5uZWxEYXRhKGNoYW5uZWxJbmRleCktPmRh
dGEoKTsKKyAgICAgICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiArIG4sIHNvdXJjZSwgc2l6ZW9m
KGZsb2F0KSAqIGZyYW1lc0F2YWlsYWJsZVRvQ29weSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIG4gKz0gZnJhbWVzQXZhaWxhYmxlVG9Db3B5OworICAgICAgICBmcmFtZXNUb1Byb2Nl
c3MgLT0gZnJhbWVzQXZhaWxhYmxlVG9Db3B5OworICAgIH0KKyAgICAKKyAgICAvLyBPdXIgd29y
ayBpcyBkb25lLiBMZXQgdGhlIEF1ZGlvQ29udGV4dCBrbm93LgorICAgIGNhbGxPbk1haW5UaHJl
YWQobm90aWZ5Q29tcGxldGVEaXNwYXRjaCwgdGhpcyk7Cit9CisKK3ZvaWQgT2ZmbGluZUF1ZGlv
RGVzdGluYXRpb25Ob2RlOjpub3RpZnlDb21wbGV0ZURpc3BhdGNoKHZvaWQqIHVzZXJEYXRhKQor
eworICAgIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZSogZGVzdGluYXRpb25Ob2RlID0gc3Rh
dGljX2Nhc3Q8T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlKj4odXNlckRhdGEpOworICAgIEFT
U0VSVChkZXN0aW5hdGlvbk5vZGUpOworICAgIGlmICghZGVzdGluYXRpb25Ob2RlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBkZXN0aW5hdGlvbk5vZGUtPm5vdGlmeUNvbXBsZXRlKCk7CisgICAg
ZGVzdGluYXRpb25Ob2RlLT5kZXJlZigpOworfQorCit2b2lkIE9mZmxpbmVBdWRpb0Rlc3RpbmF0
aW9uTm9kZTo6bm90aWZ5Q29tcGxldGUoKQoreworICAgIGNvbnRleHQoKS0+ZmlyZUNvbXBsZXRp
b25FdmVudCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZs
aW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCShyZXZpc2lvbiAx
MTE0MzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0
aW9uTm9kZS5oOjExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2Zm
bGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlX2gKKyNk
ZWZpbmUgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlX2gKKworI2luY2x1ZGUgIkF1ZGlvQnVm
ZmVyLmgiCisjaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCIKKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9CdXM7CitjbGFz
cyBBdWRpb0NvbnRleHQ7CisgICAgCitjbGFzcyBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUg
OiBwdWJsaWMgQXVkaW9EZXN0aW5hdGlvbk5vZGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCog
Y29udGV4dCwgQXVkaW9CdWZmZXIqIHJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlKGNvbnRleHQsIHJlbmRl
clRhcmdldCkpOyAgICAgCisgICAgfQorCisgICAgdmlydHVhbCB+T2ZmbGluZUF1ZGlvRGVzdGlu
YXRpb25Ob2RlKCk7CisgICAgCisgICAgLy8gQXVkaW9Ob2RlICAgCisgICAgdmlydHVhbCB2b2lk
IGluaXRpYWxpemUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pbml0aWFsaXplKCk7CisgICAgdmly
dHVhbCBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJUYXJnZXQtPnNh
bXBsZVJhdGUoKTsgfQorCisgICAgdm9pZCBzdGFydFJlbmRlcmluZygpOworICAgIAorcHJpdmF0
ZToKKyAgICBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0KiwgQXVkaW9C
dWZmZXIqIHJlbmRlclRhcmdldCk7CisKKyAgICAvLyBUaGlzIEF1ZGlvTm9kZSByZW5kZXJzIGlu
dG8gdGhpcyBBdWRpb0J1ZmZlci4KKyAgICBSZWZQdHI8QXVkaW9CdWZmZXI+IG1fcmVuZGVyVGFy
Z2V0OworICAgIAorICAgIC8vIFRlbXBvcmFyeSBBdWRpb0J1cyBmb3IgZWFjaCByZW5kZXIgcXVh
bnR1bS4KKyAgICBPd25QdHI8QXVkaW9CdXM+IG1fcmVuZGVyQnVzOworICAgIAorICAgIC8vIFJl
bmRlcmluZyB0aHJlYWQuCisgICAgdm9sYXRpbGUgVGhyZWFkSWRlbnRpZmllciBtX3JlbmRlclRo
cmVhZDsKKyAgICBib29sIG1fc3RhcnRlZFJlbmRlcmluZzsKKyAgICBzdGF0aWMgdm9pZCByZW5k
ZXJFbnRyeSh2b2lkKiB0aHJlYWREYXRhKTsKKyAgICB2b2lkIHJlbmRlcigpOworICAgIAorICAg
IC8vIEZvciBjb21wbGV0aW9uIGNhbGxiYWNrIG9uIG1haW4gdGhyZWFkLgorICAgIHN0YXRpYyB2
b2lkIG5vdGlmeUNvbXBsZXRlRGlzcGF0Y2godm9pZCogdXNlckRhdGEpOworICAgIHZvaWQgbm90
aWZ5Q29tcGxldGUoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5jcHAJKHJldmlzaW9uIDEx
MTQzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5jcHA6
MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJS
ZWFsdGltZUFuYWx5c2VyLmgiCisKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgorI2luY2x1ZGUgIkF1
ZGlvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiRkZURnJhbWUuaCIKKworI2luY2x1ZGUgPGFsZ29y
aXRobT4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDx3dGYvQ29tcGxleC5oPgorI2lu
Y2x1ZGUgPHd0Zi9GbG9hdDMyQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgor
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1VpbnQ4QXJyYXkuaD4K
KwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBk
b3VibGUgUmVhbHRpbWVBbmFseXNlcjo6RGVmYXVsdFNtb290aGluZ1RpbWVDb25zdGFudCAgPSAw
Ljg7Citjb25zdCBkb3VibGUgUmVhbHRpbWVBbmFseXNlcjo6RGVmYXVsdE1pbkRlY2liZWxzID0g
LTEwMDsKK2NvbnN0IGRvdWJsZSBSZWFsdGltZUFuYWx5c2VyOjpEZWZhdWx0TWF4RGVjaWJlbHMg
PSAtMzA7CisKK2NvbnN0IHVuc2lnbmVkIFJlYWx0aW1lQW5hbHlzZXI6OkRlZmF1bHRGRlRTaXpl
ID0gMjA0ODsKKy8vIEFsbCBGRlQgaW1wbGVtZW50YXRpb25zIGFyZSBleHBlY3RlZCB0byBoYW5k
bGUgcG93ZXItb2YtdHdvIHNpemVzIE1pbkZGVFNpemUgPD0gc2l6ZSA8PSBNYXhGRlRTaXplLgor
Y29uc3QgdW5zaWduZWQgUmVhbHRpbWVBbmFseXNlcjo6TWluRkZUU2l6ZSA9IDEyODsKK2NvbnN0
IHVuc2lnbmVkIFJlYWx0aW1lQW5hbHlzZXI6Ok1heEZGVFNpemUgPSAyMDQ4OworY29uc3QgdW5z
aWduZWQgUmVhbHRpbWVBbmFseXNlcjo6SW5wdXRCdWZmZXJTaXplID0gUmVhbHRpbWVBbmFseXNl
cjo6TWF4RkZUU2l6ZSAqIDI7CisKK1JlYWx0aW1lQW5hbHlzZXI6OlJlYWx0aW1lQW5hbHlzZXIo
KQorICAgIDogbV9pbnB1dEJ1ZmZlcihJbnB1dEJ1ZmZlclNpemUpCisgICAgLCBtX3dyaXRlSW5k
ZXgoMCkKKyAgICAsIG1fZmZ0U2l6ZShEZWZhdWx0RkZUU2l6ZSkKKyAgICAsIG1fbWFnbml0dWRl
QnVmZmVyKERlZmF1bHRGRlRTaXplIC8gMikKKyAgICAsIG1fc21vb3RoaW5nVGltZUNvbnN0YW50
KERlZmF1bHRTbW9vdGhpbmdUaW1lQ29uc3RhbnQpCisgICAgLCBtX21pbkRlY2liZWxzKERlZmF1
bHRNaW5EZWNpYmVscykKKyAgICAsIG1fbWF4RGVjaWJlbHMoRGVmYXVsdE1heERlY2liZWxzKQor
eworICAgIG1fYW5hbHlzaXNGcmFtZSA9IGFkb3B0UHRyKG5ldyBGRlRGcmFtZShEZWZhdWx0RkZU
U2l6ZSkpOworfQorCitSZWFsdGltZUFuYWx5c2VyOjp+UmVhbHRpbWVBbmFseXNlcigpCit7Cit9
CisKK3ZvaWQgUmVhbHRpbWVBbmFseXNlcjo6cmVzZXQoKQoreworICAgIG1fd3JpdGVJbmRleCA9
IDA7CisgICAgbV9pbnB1dEJ1ZmZlci56ZXJvKCk7CisgICAgbV9tYWduaXR1ZGVCdWZmZXIuemVy
bygpOworfQorCit2b2lkIFJlYWx0aW1lQW5hbHlzZXI6OnNldEZmdFNpemUoc2l6ZV90IHNpemUp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIC8vIE9ubHkgYWxsb3cgcG93
ZXJzIG9mIHR3by4KKyAgICB1bnNpZ25lZCBsb2cyc2l6ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
Pihsb2cyKHNpemUpKTsKKyAgICBib29sIGlzUE9UKDFVTCA8PCBsb2cyc2l6ZSA9PSBzaXplKTsK
KworICAgIGlmICghaXNQT1QgfHwgc2l6ZSA+IE1heEZGVFNpemUgfHwgc2l6ZSA8IE1pbkZGVFNp
emUpIHsKKyAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIGdvb2QgdG8gYWxzbyBzZXQgYW4g
ZXhjZXB0aW9uLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fZmZ0U2l6ZSAh
PSBzaXplKSB7CisgICAgICAgIG1fYW5hbHlzaXNGcmFtZSA9IGFkb3B0UHRyKG5ldyBGRlRGcmFt
ZShzaXplKSk7CisgICAgICAgIC8vIG1fbWFnbml0dWRlQnVmZmVyIGhhcyBzaXplID0gZmZ0U2l6
ZSAvIDIgYmVjYXVzZSBpdCBjb250YWlucyBmbG9hdHMgcmVkdWNlZCBmcm9tIGNvbXBsZXggdmFs
dWVzIGluIG1fYW5hbHlzaXNGcmFtZS4KKyAgICAgICAgbV9tYWduaXR1ZGVCdWZmZXIuYWxsb2Nh
dGUoc2l6ZSAvIDIpOworICAgICAgICBtX2ZmdFNpemUgPSBzaXplOworICAgIH0KK30KKwordm9p
ZCBSZWFsdGltZUFuYWx5c2VyOjp3cml0ZUlucHV0KEF1ZGlvQnVzKiBidXMsIHNpemVfdCBmcmFt
ZXNUb1Byb2Nlc3MpCit7CisgICAgYm9vbCBpc0J1c0dvb2QgPSBidXMgJiYgYnVzLT5udW1iZXJP
ZkNoYW5uZWxzKCkgPiAwICYmIGJ1cy0+Y2hhbm5lbCgwKS0+bGVuZ3RoKCkgPj0gZnJhbWVzVG9Q
cm9jZXNzOworICAgIEFTU0VSVChpc0J1c0dvb2QpOworICAgIGlmICghaXNCdXNHb29kKQorICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIC8vIEZJWE1FIDogYWxsb3cgdG8gd29yayB3aXRo
IG5vbi1GRlRTaXplIGRpdmlzaWJsZSBjaHVua2luZworICAgIGJvb2wgaXNEZXN0aW5hdGlvbkdv
b2QgPSBtX3dyaXRlSW5kZXggPCBtX2lucHV0QnVmZmVyLnNpemUoKSAmJiBtX3dyaXRlSW5kZXgg
KyBmcmFtZXNUb1Byb2Nlc3MgPD0gbV9pbnB1dEJ1ZmZlci5zaXplKCk7CisgICAgQVNTRVJUKGlz
RGVzdGluYXRpb25Hb29kKTsKKyAgICBpZiAoIWlzRGVzdGluYXRpb25Hb29kKQorICAgICAgICBy
ZXR1cm47ICAgIAorICAgIAorICAgIC8vIFBlcmZvcm0gcmVhbC10aW1lIGFuYWx5c2lzCisgICAg
Ly8gRklYTUUgOiBmb3Igbm93IGp1c3QgdXNlIGxlZnQgY2hhbm5lbCAobXVzdCBtaXggaWYgc3Rl
cmVvIHNvdXJjZSkKKyAgICBjb25zdCBmbG9hdCogc291cmNlID0gYnVzLT5jaGFubmVsKDApLT5k
YXRhKCk7CisKKyAgICAvLyBUaGUgc291cmNlIGhhcyBhbHJlYWR5IGJlZW4gc2FuaXR5IGNoZWNr
ZWQgd2l0aCBpc0J1c0dvb2QgYWJvdmUuCisgICAgCisgICAgbWVtY3B5KG1faW5wdXRCdWZmZXIu
ZGF0YSgpICsgbV93cml0ZUluZGV4LCBzb3VyY2UsIHNpemVvZihmbG9hdCkgKiBmcmFtZXNUb1By
b2Nlc3MpOworCisgICAgbV93cml0ZUluZGV4ICs9IGZyYW1lc1RvUHJvY2VzczsKKyAgICBpZiAo
bV93cml0ZUluZGV4ID49IElucHV0QnVmZmVyU2l6ZSkKKyAgICAgICAgbV93cml0ZUluZGV4ID0g
MDsKK30KKworbmFtZXNwYWNlIHsKKwordm9pZCBhcHBseVdpbmRvdyhmbG9hdCogcCwgc2l6ZV90
IG4pCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAKKyAgICAvLyBCbGFja21h
biB3aW5kb3cKKyAgICBkb3VibGUgYWxwaGEgPSAwLjE2OworICAgIGRvdWJsZSBhMCA9IDAuNSAq
ICgxIC0gYWxwaGEpOworICAgIGRvdWJsZSBhMSA9IDAuNTsKKyAgICBkb3VibGUgYTIgPSAwLjUg
KiBhbHBoYTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbjsgKytpKSB7Cisg
ICAgICAgIGRvdWJsZSB4ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihpKSAvIHN0YXRpY19jYXN0PGRv
dWJsZT4obik7CisgICAgICAgIGRvdWJsZSB3aW5kb3cgPSBhMCAtIGExICogY29zKDIgKiBwaURv
dWJsZSAqIHgpICsgYTIgKiBjb3MoNCAqIHBpRG91YmxlICogeCk7CisgICAgICAgIHBbaV0gKj0g
ZmxvYXQod2luZG93KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlCisKK3ZvaWQgUmVhbHRp
bWVBbmFseXNlcjo6ZG9GRlRBbmFseXNpcygpCit7ICAgIAorICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisKKyAgICAvLyBVbnJvbGwgdGhlIGlucHV0IGJ1ZmZlciBpbnRvIGEgdGVtcG9yYXJ5
IGJ1ZmZlciwgd2hlcmUgd2UnbGwgYXBwbHkgYW4gYW5hbHlzaXMgd2luZG93IGZvbGxvd2VkIGJ5
IGFuIEZGVC4KKyAgICBzaXplX3QgZmZ0U2l6ZSA9IHRoaXMtPmZmdFNpemUoKTsKKyAgICAKKyAg
ICBBdWRpb0Zsb2F0QXJyYXkgdGVtcG9yYXJ5QnVmZmVyKGZmdFNpemUpOworICAgIGZsb2F0KiBp
bnB1dEJ1ZmZlciA9IG1faW5wdXRCdWZmZXIuZGF0YSgpOworICAgIGZsb2F0KiB0ZW1wUCA9IHRl
bXBvcmFyeUJ1ZmZlci5kYXRhKCk7CisKKyAgICAvLyBUYWtlIHRoZSBwcmV2aW91cyBmZnRTaXpl
IHZhbHVlcyBmcm9tIHRoZSBpbnB1dCBidWZmZXIgYW5kIGNvcHkgaW50byB0aGUgdGVtcG9yYXJ5
IGJ1ZmZlci4KKyAgICB1bnNpZ25lZCB3cml0ZUluZGV4ID0gbV93cml0ZUluZGV4OworICAgIGlm
ICh3cml0ZUluZGV4IDwgZmZ0U2l6ZSkgeworICAgICAgICBtZW1jcHkodGVtcFAsIGlucHV0QnVm
ZmVyICsgd3JpdGVJbmRleCAtIGZmdFNpemUgKyBJbnB1dEJ1ZmZlclNpemUsIHNpemVvZigqdGVt
cFApICogKGZmdFNpemUgLSB3cml0ZUluZGV4KSk7CisgICAgICAgIG1lbWNweSh0ZW1wUCArIGZm
dFNpemUgLSB3cml0ZUluZGV4LCBpbnB1dEJ1ZmZlciwgc2l6ZW9mKCp0ZW1wUCkgKiB3cml0ZUlu
ZGV4KTsKKyAgICB9IGVsc2UgCisgICAgICAgIG1lbWNweSh0ZW1wUCwgaW5wdXRCdWZmZXIgKyB3
cml0ZUluZGV4IC0gZmZ0U2l6ZSwgc2l6ZW9mKCp0ZW1wUCkgKiBmZnRTaXplKTsKKworICAgIAor
ICAgIC8vIFdpbmRvdyB0aGUgaW5wdXQgc2FtcGxlcy4KKyAgICBhcHBseVdpbmRvdyh0ZW1wUCwg
ZmZ0U2l6ZSk7CisgICAgCisgICAgLy8gRG8gdGhlIGFuYWx5c2lzLgorICAgIG1fYW5hbHlzaXNG
cmFtZS0+ZG9GRlQodGVtcFApOworCisgICAgZmxvYXQqIHJlYWxQID0gbV9hbmFseXNpc0ZyYW1l
LT5yZWFsRGF0YSgpOworICAgIGZsb2F0KiBpbWFnUCA9IG1fYW5hbHlzaXNGcmFtZS0+aW1hZ0Rh
dGEoKTsKKworICAgIC8vIEJsb3cgYXdheSB0aGUgcGFja2VkIG55cXVpc3QgY29tcG9uZW50Lgor
ICAgIGltYWdQWzBdID0gMDsKKyAgICAKKyAgICAvLyBOb3JtYWxpemUgc28gdGhhbiBhbiBpbnB1
dCBzaW5lIHdhdmUgYXQgMGRCZnMgcmVnaXN0ZXJzIGFzIDBkQmZzICh1bmRvIEZGVCBzY2FsaW5n
IGZhY3RvcikuCisgICAgY29uc3QgZG91YmxlIG1hZ25pdHVkZVNjYWxlID0gMS4wIC8gRGVmYXVs
dEZGVFNpemU7CisKKyAgICAvLyBBIHZhbHVlIG9mIDAgZG9lcyBubyBhdmVyYWdpbmcgd2l0aCB0
aGUgcHJldmlvdXMgcmVzdWx0LiAgTGFyZ2VyIHZhbHVlcyBwcm9kdWNlIHNsb3dlciwgYnV0IHNt
b290aGVyIGNoYW5nZXMuCisgICAgZG91YmxlIGsgPSBtX3Ntb290aGluZ1RpbWVDb25zdGFudDsK
KyAgICBrID0gbWF4KDAuMCwgayk7CisgICAgayA9IG1pbigxLjAsIGspOyAgICAKKyAgICAKKyAg
ICAvLyBDb252ZXJ0IHRoZSBhbmFseXNpcyBkYXRhIGZyb20gY29tcGxleCB0byBtYWduaXR1ZGUg
YW5kIGF2ZXJhZ2Ugd2l0aCB0aGUgcHJldmlvdXMgcmVzdWx0LgorICAgIGZsb2F0KiBkZXN0aW5h
dGlvbiA9IG1hZ25pdHVkZUJ1ZmZlcigpLmRhdGEoKTsKKyAgICBzaXplX3QgbiA9IG1hZ25pdHVk
ZUJ1ZmZlcigpLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkgewor
ICAgICAgICBDb21wbGV4IGMocmVhbFBbaV0sIGltYWdQW2ldKTsKKyAgICAgICAgZG91YmxlIHNj
YWxhck1hZ25pdHVkZSA9IGFicyhjKSAqIG1hZ25pdHVkZVNjYWxlOyAgICAgICAgCisgICAgICAg
IGRlc3RpbmF0aW9uW2ldID0gZmxvYXQoayAqIGRlc3RpbmF0aW9uW2ldICsgKDEgLSBrKSAqIHNj
YWxhck1hZ25pdHVkZSk7CisgICAgfQorfQorCit2b2lkIFJlYWx0aW1lQW5hbHlzZXI6OmdldEZs
b2F0RnJlcXVlbmN5RGF0YShGbG9hdDMyQXJyYXkqIGRlc3RpbmF0aW9uQXJyYXkpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghZGVzdGluYXRpb25BcnJheSkKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBkb0ZGVEFuYWx5c2lzKCk7CisgICAgCisgICAg
Ly8gQ29udmVydCBmcm9tIGxpbmVhciBtYWduaXR1ZGUgdG8gZmxvYXRpbmctcG9pbnQgZGVjaWJl
bHMuCisgICAgY29uc3QgZG91YmxlIG1pbkRlY2liZWxzID0gbV9taW5EZWNpYmVsczsKKyAgICB1
bnNpZ25lZCBzb3VyY2VMZW5ndGggPSBtYWduaXR1ZGVCdWZmZXIoKS5zaXplKCk7CisgICAgc2l6
ZV90IGxlbiA9IG1pbihzb3VyY2VMZW5ndGgsIGRlc3RpbmF0aW9uQXJyYXktPmxlbmd0aCgpKTsK
KyAgICBpZiAobGVuID4gMCkgeworICAgICAgICBjb25zdCBmbG9hdCogc291cmNlID0gbWFnbml0
dWRlQnVmZmVyKCkuZGF0YSgpOworICAgICAgICBmbG9hdCogZGVzdGluYXRpb24gPSBkZXN0aW5h
dGlvbkFycmF5LT5kYXRhKCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgICAgIGZsb2F0IGxpbmVhclZhbHVlID0gc291cmNl
W2ldOworICAgICAgICAgICAgZG91YmxlIGRiTWFnID0gIWxpbmVhclZhbHVlID8gbWluRGVjaWJl
bHMgOiBBdWRpb1V0aWxpdGllczo6bGluZWFyVG9EZWNpYmVscyhsaW5lYXJWYWx1ZSk7CisgICAg
ICAgICAgICBkZXN0aW5hdGlvbltpXSA9IGZsb2F0KGRiTWFnKTsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBSZWFsdGltZUFuYWx5c2VyOjpnZXRCeXRlRnJlcXVlbmN5RGF0YShVaW50OEFy
cmF5KiBkZXN0aW5hdGlvbkFycmF5KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisK
KyAgICBpZiAoIWRlc3RpbmF0aW9uQXJyYXkpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgZG9GRlRBbmFseXNpcygpOworICAgIAorICAgIC8vIENvbnZlcnQgZnJvbSBsaW5lYXIgbWFn
bml0dWRlIHRvIHVuc2lnbmVkLWJ5dGUgZGVjaWJlbHMuCisgICAgdW5zaWduZWQgc291cmNlTGVu
Z3RoID0gbWFnbml0dWRlQnVmZmVyKCkuc2l6ZSgpOworICAgIHNpemVfdCBsZW4gPSBtaW4oc291
cmNlTGVuZ3RoLCBkZXN0aW5hdGlvbkFycmF5LT5sZW5ndGgoKSk7CisgICAgaWYgKGxlbiA+IDAp
IHsKKyAgICAgICAgY29uc3QgZG91YmxlIHJhbmdlU2NhbGVGYWN0b3IgPSBtX21heERlY2liZWxz
ID09IG1fbWluRGVjaWJlbHMgPyAxIDogMSAvIChtX21heERlY2liZWxzIC0gbV9taW5EZWNpYmVs
cyk7CisgICAgICAgIGNvbnN0IGRvdWJsZSBtaW5EZWNpYmVscyA9IG1fbWluRGVjaWJlbHM7CisK
KyAgICAgICAgY29uc3QgZmxvYXQqIHNvdXJjZSA9IG1hZ25pdHVkZUJ1ZmZlcigpLmRhdGEoKTsK
KyAgICAgICAgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbkFycmF5LT5k
YXRhKCk7ICAgICAgICAKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW47ICsraSkgeworICAgICAgICAgICAgZmxvYXQgbGluZWFyVmFsdWUgPSBzb3VyY2VbaV07
CisgICAgICAgICAgICBkb3VibGUgZGJNYWcgPSAhbGluZWFyVmFsdWUgPyBtaW5EZWNpYmVscyA6
IEF1ZGlvVXRpbGl0aWVzOjpsaW5lYXJUb0RlY2liZWxzKGxpbmVhclZhbHVlKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gVGhlIHJhbmdlIG1fbWluRGVjaWJlbHMgdG8gbV9tYXhEZWNp
YmVscyB3aWxsIGJlIHNjYWxlZCB0byBieXRlIHZhbHVlcyBmcm9tIDAgdG8gVUNIQVJfTUFYLgor
ICAgICAgICAgICAgZG91YmxlIHNjYWxlZFZhbHVlID0gVUNIQVJfTUFYICogKGRiTWFnIC0gbWlu
RGVjaWJlbHMpICogcmFuZ2VTY2FsZUZhY3RvcjsKKworICAgICAgICAgICAgLy8gQ2xpcCB0byB2
YWxpZCByYW5nZS4KKyAgICAgICAgICAgIGlmIChzY2FsZWRWYWx1ZSA8IDApCisgICAgICAgICAg
ICAgICAgc2NhbGVkVmFsdWUgPSAwOworICAgICAgICAgICAgaWYgKHNjYWxlZFZhbHVlID4gVUNI
QVJfTUFYKQorICAgICAgICAgICAgICAgIHNjYWxlZFZhbHVlID0gVUNIQVJfTUFYOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBkZXN0aW5hdGlvbltpXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KHNjYWxlZFZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBSZWFsdGlt
ZUFuYWx5c2VyOjpnZXRCeXRlVGltZURvbWFpbkRhdGEoVWludDhBcnJheSogZGVzdGluYXRpb25B
cnJheSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKCFkZXN0aW5h
dGlvbkFycmF5KQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIHVuc2lnbmVkIGZmdFNp
emUgPSB0aGlzLT5mZnRTaXplKCk7CisgICAgc2l6ZV90IGxlbiA9IG1pbihmZnRTaXplLCBkZXN0
aW5hdGlvbkFycmF5LT5sZW5ndGgoKSk7CisgICAgaWYgKGxlbiA+IDApIHsKKyAgICAgICAgYm9v
bCBpc0lucHV0QnVmZmVyR29vZCA9IG1faW5wdXRCdWZmZXIuc2l6ZSgpID09IElucHV0QnVmZmVy
U2l6ZSAmJiBtX2lucHV0QnVmZmVyLnNpemUoKSA+IGZmdFNpemU7CisgICAgICAgIEFTU0VSVChp
c0lucHV0QnVmZmVyR29vZCk7CisgICAgICAgIGlmICghaXNJbnB1dEJ1ZmZlckdvb2QpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgZmxvYXQqIGlucHV0QnVmZmVyID0gbV9pbnB1dEJ1
ZmZlci5kYXRhKCk7ICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24g
PSBkZXN0aW5hdGlvbkFycmF5LT5kYXRhKCk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCB3
cml0ZUluZGV4ID0gbV93cml0ZUluZGV4OworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW47ICsraSkgeworICAgICAgICAgICAgLy8gQnVmZmVyIGFjY2VzcyBpcyBwcm90ZWN0
ZWQgZHVlIHRvIG1vZHVsbyBvcGVyYXRpb24uCisgICAgICAgICAgICBmbG9hdCB2YWx1ZSA9IGlu
cHV0QnVmZmVyWyhpICsgd3JpdGVJbmRleCAtIGZmdFNpemUgKyBJbnB1dEJ1ZmZlclNpemUpICUg
SW5wdXRCdWZmZXJTaXplXTsKKworICAgICAgICAgICAgLy8gU2NhbGUgZnJvbSBub21pbmFsIC0x
IC0+ICsxIHRvIHVuc2lnbmVkIGJ5dGUuCisgICAgICAgICAgICBkb3VibGUgc2NhbGVkVmFsdWUg
PSAxMjggKiAodmFsdWUgKyAxKTsKKworICAgICAgICAgICAgLy8gQ2xpcCB0byB2YWxpZCByYW5n
ZS4KKyAgICAgICAgICAgIGlmIChzY2FsZWRWYWx1ZSA8IDApCisgICAgICAgICAgICAgICAgc2Nh
bGVkVmFsdWUgPSAwOworICAgICAgICAgICAgaWYgKHNjYWxlZFZhbHVlID4gVUNIQVJfTUFYKQor
ICAgICAgICAgICAgICAgIHNjYWxlZFZhbHVlID0gVUNIQVJfTUFYOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBkZXN0aW5hdGlvbltpXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHNj
YWxlZFZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5oCShyZXZpc2lvbiAxMTE0
MzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIuaDoxMTE0
MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBS
ZWFsdGltZUFuYWx5c2VyX2gKKyNkZWZpbmUgUmVhbHRpbWVBbmFseXNlcl9oCisKKyNpbmNsdWRl
ICJBdWRpb0FycmF5LmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgQXVkaW9CdXM7CitjbGFzcyBGRlRGcmFtZTsKKworY2xhc3MgUmVhbHRp
bWVBbmFseXNlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVhbHRpbWVBbmFseXNlcik7
CitwdWJsaWM6CisgICAgUmVhbHRpbWVBbmFseXNlcigpOworICAgIHZpcnR1YWwgflJlYWx0aW1l
QW5hbHlzZXIoKTsKKyAgICAKKyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICBzaXplX3QgZmZ0U2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmZ0U2l6ZTsgfQorICAgIHZvaWQgc2V0RmZ0U2l6ZShzaXpl
X3Qgc2l6ZSk7CisKKyAgICB1bnNpZ25lZCBmcmVxdWVuY3lCaW5Db3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fZmZ0U2l6ZSAvIDI7IH0KKworICAgIHZvaWQgc2V0TWluRGVjaWJlbHMoZmxvYXQgaykg
eyBtX21pbkRlY2liZWxzID0gazsgfQorICAgIGZsb2F0IG1pbkRlY2liZWxzKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWluRGVjaWJlbHMpOyB9CisKKyAgICB2b2lkIHNl
dE1heERlY2liZWxzKGZsb2F0IGspIHsgbV9tYXhEZWNpYmVscyA9IGs7IH0KKyAgICBmbG9hdCBt
YXhEZWNpYmVscygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX21heERlY2li
ZWxzKTsgfQorCisgICAgdm9pZCBzZXRTbW9vdGhpbmdUaW1lQ29uc3RhbnQoZmxvYXQgaykgeyBt
X3Ntb290aGluZ1RpbWVDb25zdGFudCA9IGs7IH0KKyAgICBmbG9hdCBzbW9vdGhpbmdUaW1lQ29u
c3RhbnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV9zbW9vdGhpbmdUaW1l
Q29uc3RhbnQpOyB9CisKKyAgICB2b2lkIGdldEZsb2F0RnJlcXVlbmN5RGF0YShGbG9hdDMyQXJy
YXkqKTsKKyAgICB2b2lkIGdldEJ5dGVGcmVxdWVuY3lEYXRhKFVpbnQ4QXJyYXkqKTsKKyAgICB2
b2lkIGdldEJ5dGVUaW1lRG9tYWluRGF0YShVaW50OEFycmF5Kik7CisKKyAgICAvLyBUaGUgYXVk
aW8gdGhyZWFkIHdyaXRlcyBpbnB1dCBkYXRhIGhlcmUuCisgICAgdm9pZCB3cml0ZUlucHV0KEF1
ZGlvQnVzKiwgc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CisKKyAgICBzdGF0aWMgY29uc3QgZG91
YmxlIERlZmF1bHRTbW9vdGhpbmdUaW1lQ29uc3RhbnQ7CisgICAgc3RhdGljIGNvbnN0IGRvdWJs
ZSBEZWZhdWx0TWluRGVjaWJlbHM7CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBEZWZhdWx0TWF4
RGVjaWJlbHM7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgRGVmYXVsdEZGVFNpemU7Cisg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE1pbkZGVFNpemU7CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIE1heEZGVFNpemU7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIElucHV0QnVmZmVy
U2l6ZTsKKworcHJpdmF0ZToKKyAgICAvLyBUaGUgYXVkaW8gdGhyZWFkIHdyaXRlcyB0aGUgaW5w
dXQgYXVkaW8gaGVyZS4KKyAgICBBdWRpb0Zsb2F0QXJyYXkgbV9pbnB1dEJ1ZmZlcjsKKyAgICB1
bnNpZ25lZCBtX3dyaXRlSW5kZXg7CisgICAgCisgICAgc2l6ZV90IG1fZmZ0U2l6ZTsKKyAgICBP
d25QdHI8RkZURnJhbWU+IG1fYW5hbHlzaXNGcmFtZTsKKyAgICB2b2lkIGRvRkZUQW5hbHlzaXMo
KTsKKyAgICAKKyAgICAvLyBkb0ZGVEFuYWx5c2lzKCkgc3RvcmVzIHRoZSBmbG9hdGluZy1wb2lu
dCBtYWduaXR1ZGUgYW5hbHlzaXMgZGF0YSBoZXJlLgorICAgIEF1ZGlvRmxvYXRBcnJheSBtX21h
Z25pdHVkZUJ1ZmZlcjsKKyAgICBBdWRpb0Zsb2F0QXJyYXkmIG1hZ25pdHVkZUJ1ZmZlcigpIHsg
cmV0dXJuIG1fbWFnbml0dWRlQnVmZmVyOyB9CisKKyAgICAvLyBBIHZhbHVlIGJldHdlZW4gMCBh
bmQgMSB3aGljaCBhdmVyYWdlcyB0aGUgcHJldmlvdXMgdmVyc2lvbiBvZiBtX21hZ25pdHVkZUJ1
ZmZlciB3aXRoIHRoZSBjdXJyZW50IGFuYWx5c2lzIG1hZ25pdHVkZSBkYXRhLgorICAgIGRvdWJs
ZSBtX3Ntb290aGluZ1RpbWVDb25zdGFudDsgICAgCisKKyAgICAvLyBUaGUgcmFuZ2UgdXNlZCB3
aGVuIGNvbnZlcnRpbmcgd2hlbiB1c2luZyBnZXRCeXRlRnJlcXVlbmN5RGF0YSgpLiAKKyAgICBk
b3VibGUgbV9taW5EZWNpYmVsczsKKyAgICBkb3VibGUgbV9tYXhEZWNpYmVsczsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFJlYWx0aW1lQW5hbHlzZXJfaApJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGlt
ZUFuYWx5c2VyTm9kZS5jcHAJKHJldmlzaW9uIDExMTQzMykJKGZyb20gU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuY3BwOjExMTQzMykKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiUmVhbHRpbWVBbmFseXNlck5vZGUu
aCIKKworI2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0LmgiCisjaW5jbHVkZSAiQXVkaW9Ob2RlT3V0
cHV0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVhbHRpbWVBbmFseXNlck5vZGU6OlJl
YWx0aW1lQW5hbHlzZXJOb2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0
ZSkKKyAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQoreworICAgIGFkZElucHV0
KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVJbnB1dCh0aGlzKSkpOworICAgIGFkZE91dHB1dChhZG9w
dFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMsIDIpKSk7CisgICAgCisgICAgc2V0Tm9kZVR5
cGUoTm9kZVR5cGVBbmFseXNlcik7CisgICAgCisgICAgaW5pdGlhbGl6ZSgpOworfQorCitSZWFs
dGltZUFuYWx5c2VyTm9kZTo6flJlYWx0aW1lQW5hbHlzZXJOb2RlKCkKK3sKKyAgICB1bmluaXRp
YWxpemUoKTsKK30KKwordm9pZCBSZWFsdGltZUFuYWx5c2VyTm9kZTo6cHJvY2VzcyhzaXplX3Qg
ZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIEF1ZGlvQnVzKiBvdXRwdXRCdXMgPSBvdXRwdXQoMCkt
PmJ1cygpOworCisgICAgaWYgKCFpc0luaXRpYWxpemVkKCkgfHwgIWlucHV0KDApLT5pc0Nvbm5l
Y3RlZCgpKSB7CisgICAgICAgIG91dHB1dEJ1cy0+emVybygpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgQXVkaW9CdXMqIGlucHV0QnVzID0gaW5wdXQoMCktPmJ1cygpOworICAgIAor
ICAgIC8vIEdpdmUgdGhlIGFuYWx5c2VyIHRoZSBhdWRpbyB3aGljaCBpcyBwYXNzaW5nIHRocm91
Z2ggdGhpcyBBdWRpb05vZGUuCisgICAgbV9hbmFseXNlci53cml0ZUlucHV0KGlucHV0QnVzLCBm
cmFtZXNUb1Byb2Nlc3MpOworCisgICAgLy8gRm9yIGluLXBsYWNlIHByb2Nlc3NpbmcsIG91ciBv
dmVycmlkZSBvZiBwdWxsSW5wdXRzKCkgd2lsbCBqdXN0IHBhc3MgdGhlIGF1ZGlvIGRhdGEgdGhy
b3VnaCB1bmNoYW5nZWQgaWYgdGhlIGNoYW5uZWwgY291bnQgbWF0Y2hlcyBmcm9tIGlucHV0IHRv
IG91dHB1dAorICAgIC8vIChyZXN1bHRpbmcgaW4gaW5wdXRCdXMgPT0gb3V0cHV0QnVzKS4gIE90
aGVyd2lzZSwgZG8gYW4gdXAtbWl4IHRvIHN0ZXJlby4KKyAgICBpZiAoaW5wdXRCdXMgIT0gb3V0
cHV0QnVzKQorICAgICAgICBvdXRwdXRCdXMtPmNvcHlGcm9tKCppbnB1dEJ1cyk7Cit9CisKKy8v
IFdlIG92ZXJyaWRlIHB1bGxJbnB1dHMoKSBhcyBhbiBvcHRpbWl6YXRpb24gYWxsb3dpbmcgdGhp
cyBub2RlIHRvIHRha2UgYWR2YW50YWdlIG9mIGluLXBsYWNlIHByb2Nlc3NpbmcsCisvLyB3aGVy
ZSB0aGUgaW5wdXQgaXMgc2ltcGx5IHBhc3NlZCB0aHJvdWdoIHVucHJvY2Vzc2VkIHRvIHRoZSBv
dXRwdXQuCisvLyBOb3RlOiB0aGlzIG9ubHkgYXBwbGllcyBpZiB0aGUgaW5wdXQgYW5kIG91dHB1
dCBjaGFubmVsIGNvdW50cyBtYXRjaC4KK3ZvaWQgUmVhbHRpbWVBbmFseXNlck5vZGU6OnB1bGxJ
bnB1dHMoc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICAvLyBSZW5kZXIgaW5wdXQgc3Ry
ZWFtIC0gdHJ5IHRvIHJlbmRlciBkaXJlY3RseSBpbnRvIG91dHB1dCBidXMgZm9yIHBhc3MtdGhy
b3VnaCBwcm9jZXNzaW5nIHdoZXJlIHByb2Nlc3MoKSBkb2Vzbid0IG5lZWQgdG8gZG8gYW55dGhp
bmcuLi4KKyAgICBpbnB1dCgwKS0+cHVsbChvdXRwdXQoMCktPmJ1cygpLCBmcmFtZXNUb1Byb2Nl
c3MpOworfQorCit2b2lkIFJlYWx0aW1lQW5hbHlzZXJOb2RlOjpyZXNldCgpCit7CisgICAgbV9h
bmFseXNlci5yZXNldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9SZWFsdGltZUFuYWx5c2VyTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaAkocmV2aXNpb24gMTExNDMzKQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5oOjExMTQz
MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBSZWFsdGltZUFuYWx5c2VyTm9kZV9oCisjZGVmaW5lIFJlYWx0aW1lQW5hbHlzZXJOb2RlX2gK
KworI2luY2x1ZGUgIkF1ZGlvTm9kZS5oIgorI2luY2x1ZGUgIlJlYWx0aW1lQW5hbHlzZXIuaCIK
KyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFJlYWx0aW1lQW5hbHlzZXJOb2RlIDogcHVibGljIEF1ZGlvTm9kZSB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8UmVhbHRpbWVBbmFseXNlck5vZGU+IGNyZWF0ZShBdWRpb0NvbnRl
eHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFJlYWx0aW1lQW5hbHlzZXJOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpKTsgICAg
ICAKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5SZWFsdGltZUFuYWx5c2VyTm9kZSgpOworICAgIAor
ICAgIC8vIEF1ZGlvTm9kZQorICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKHNpemVfdCBmcmFtZXNU
b1Byb2Nlc3MpOworICAgIHZpcnR1YWwgdm9pZCBwdWxsSW5wdXRzKHNpemVfdCBmcmFtZXNUb1By
b2Nlc3MpOworICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOworCisgICAgLy8gSmF2YXNjcmlwdCBi
aW5kaW5ncworICAgIHVuc2lnbmVkIGludCBmZnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9hbmFs
eXNlci5mZnRTaXplKCk7IH0KKyAgICB2b2lkIHNldEZmdFNpemUodW5zaWduZWQgaW50IHNpemUp
IHsgbV9hbmFseXNlci5zZXRGZnRTaXplKHNpemUpOyB9CisKKyAgICB1bnNpZ25lZCBmcmVxdWVu
Y3lCaW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYW5hbHlzZXIuZnJlcXVlbmN5QmluQ291bnQo
KTsgfQorCisgICAgdm9pZCBzZXRNaW5EZWNpYmVscyhmbG9hdCBrKSB7IG1fYW5hbHlzZXIuc2V0
TWluRGVjaWJlbHMoayk7IH0KKyAgICBmbG9hdCBtaW5EZWNpYmVscygpIGNvbnN0IHsgcmV0dXJu
IG1fYW5hbHlzZXIubWluRGVjaWJlbHMoKTsgfQorCisgICAgdm9pZCBzZXRNYXhEZWNpYmVscyhm
bG9hdCBrKSB7IG1fYW5hbHlzZXIuc2V0TWF4RGVjaWJlbHMoayk7IH0KKyAgICBmbG9hdCBtYXhE
ZWNpYmVscygpIGNvbnN0IHsgcmV0dXJuIG1fYW5hbHlzZXIubWF4RGVjaWJlbHMoKTsgfQorCisg
ICAgdm9pZCBzZXRTbW9vdGhpbmdUaW1lQ29uc3RhbnQoZmxvYXQgaykgeyBtX2FuYWx5c2VyLnNl
dFNtb290aGluZ1RpbWVDb25zdGFudChrKTsgfQorICAgIGZsb2F0IHNtb290aGluZ1RpbWVDb25z
dGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fYW5hbHlzZXIuc21vb3RoaW5nVGltZUNvbnN0YW50KCk7
IH0KKworICAgIHZvaWQgZ2V0RmxvYXRGcmVxdWVuY3lEYXRhKEZsb2F0MzJBcnJheSogYXJyYXkp
IHsgbV9hbmFseXNlci5nZXRGbG9hdEZyZXF1ZW5jeURhdGEoYXJyYXkpOyB9CisgICAgdm9pZCBn
ZXRCeXRlRnJlcXVlbmN5RGF0YShVaW50OEFycmF5KiBhcnJheSkgeyBtX2FuYWx5c2VyLmdldEJ5
dGVGcmVxdWVuY3lEYXRhKGFycmF5KTsgfQorICAgIHZvaWQgZ2V0Qnl0ZVRpbWVEb21haW5EYXRh
KFVpbnQ4QXJyYXkqIGFycmF5KSB7IG1fYW5hbHlzZXIuZ2V0Qnl0ZVRpbWVEb21haW5EYXRhKGFy
cmF5KTsgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQorCisgICAgUmVhbHRpbWVBbmFseXNlck5vZGUo
QXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7CisKKyAgICBSZWFsdGltZUFuYWx5c2Vy
IG1fYW5hbHlzZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBS
ZWFsdGltZUFuYWx5c2VyTm9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmlkbAkocmV2aXNpb24gMTEx
NDMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5p
ZGw6MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFu
YWx5c2VyTm9kZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKK21vZHVsZSBhdWRpbyB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9
V0VCX0FVRElPLAorICAgICAgICBKU0dlbmVyYXRlVG9KU09iamVjdAorICAgIF0gUmVhbHRpbWVB
bmFseXNlck5vZGUgOiBBdWRpb05vZGUgeworICAgICAgICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9u
ZyBmZnRTaXplOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBmcmVx
dWVuY3lCaW5Db3VudDsKKworICAgICAgICAvLyBtaW5EZWNpYmVscyAvIG1heERlY2liZWxzIHJl
cHJlc2VudCB0aGUgcmFuZ2UgdG8gc2NhbGUgdGhlIEZGVCBhbmFseXNpcyBkYXRhIGZvciBjb252
ZXJzaW9uIHRvIHVuc2lnbmVkIGJ5dGUgdmFsdWVzLgorICAgICAgICBhdHRyaWJ1dGUgZmxvYXQg
bWluRGVjaWJlbHM7CisgICAgICAgIGF0dHJpYnV0ZSBmbG9hdCBtYXhEZWNpYmVsczsKKworICAg
ICAgICAvLyBBIHZhbHVlIGZyb20gMC4wIC0+IDEuMCB3aGVyZSAwLjAgcmVwcmVzZW50cyBubyB0
aW1lIGF2ZXJhZ2luZyB3aXRoIHRoZSBsYXN0IGFuYWx5c2lzIGZyYW1lLgorICAgICAgICBhdHRy
aWJ1dGUgZmxvYXQgc21vb3RoaW5nVGltZUNvbnN0YW50OworCisgICAgICAgIC8vIENvcGllcyB0
aGUgY3VycmVudCBmcmVxdWVuY3kgZGF0YSBpbnRvIHRoZSBwYXNzZWQgYXJyYXkuCisgICAgICAg
IC8vIElmIHRoZSBhcnJheSBoYXMgZmV3ZXIgZWxlbWVudHMgdGhhbiB0aGUgZnJlcXVlbmN5Qmlu
Q291bnQsIHRoZSBleGNlc3MgZWxlbWVudHMgd2lsbCBiZSBkcm9wcGVkLgorICAgICAgICB2b2lk
IGdldEZsb2F0RnJlcXVlbmN5RGF0YShpbiBGbG9hdDMyQXJyYXkgYXJyYXkpOworICAgICAgICB2
b2lkIGdldEJ5dGVGcmVxdWVuY3lEYXRhKGluIFVpbnQ4QXJyYXkgYXJyYXkpOworCisgICAgICAg
IC8vIFJlYWwtdGltZSB3YXZlZm9ybSBkYXRhCisgICAgICAgIHZvaWQgZ2V0Qnl0ZVRpbWVEb21h
aW5EYXRhKGluIFVpbnQ4QXJyYXkgYXJyYXkpOworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJEU1BLZXJuZWwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlckRTUEtlcm5lbC5j
cHAJKHJldmlzaW9uIDExMTQzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNo
YXBlckRTUEtlcm5lbC5jcHA6MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9B
VURJTykKKworI2luY2x1ZGUgIldhdmVTaGFwZXJEU1BLZXJuZWwuaCIKKworI2luY2x1ZGUgIldh
dmVTaGFwZXJQcm9jZXNzb3IuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKK3VzaW5nIG5hbWVz
cGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBXYXZlU2hhcGVyRFNQS2Vy
bmVsOjpwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgc2l6
ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICBBU1NFUlQoc291cmNlICYmIGRlc3RpbmF0aW9u
ICYmIHdhdmVTaGFwZXJQcm9jZXNzb3IoKSk7CisKKyAgICBGbG9hdDMyQXJyYXkqIGN1cnZlID0g
d2F2ZVNoYXBlclByb2Nlc3NvcigpLT5jdXJ2ZSgpOworICAgIGlmICghY3VydmUpIHsKKyAgICAg
ICAgLy8gQWN0IGFzICJzdHJhaWdodCB3aXJlIiBwYXNzLXRocm91Z2ggaWYgbm8gY3VydmUgaXMg
c2V0LgorICAgICAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNvdXJjZSwgc2l6ZW9mKGZsb2F0KSAq
IGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmbG9hdCog
Y3VydmVEYXRhID0gY3VydmUtPmRhdGEoKTsKKyAgICBpbnQgY3VydmVMZW5ndGggPSBjdXJ2ZS0+
bGVuZ3RoKCk7CisKKyAgICBBU1NFUlQoY3VydmVEYXRhKTsKKworICAgIGlmICghY3VydmVEYXRh
IHx8ICFjdXJ2ZUxlbmd0aCkgeworICAgICAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNvdXJjZSwg
c2l6ZW9mKGZsb2F0KSAqIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBBcHBseSB3YXZlc2hhcGluZyBjdXJ2ZS4KKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZnJhbWVzVG9Qcm9jZXNzOyArK2kpIHsKKyAgICAgICAgY29uc3QgZmxvYXQgaW5w
dXQgPSBzb3VyY2VbaV07CisKKyAgICAgICAgLy8gQ2FsY3VsYXRlIGFuIGluZGV4IGJhc2VkIG9u
IGlucHV0IC0xIC0+ICsxIHdpdGggMCBiZWluZyBhdCB0aGUgY2VudGVyIG9mIHRoZSBjdXJ2ZSBk
YXRhLgorICAgICAgICBpbnQgaW5kZXggPSAoY3VydmVMZW5ndGggKiAoaW5wdXQgKyAxKSkgLyAy
OworCisgICAgICAgIC8vIENsaXAgaW5kZXggdG8gdGhlIGlucHV0IHJhbmdlIG9mIHRoZSBjdXJ2
ZS4KKyAgICAgICAgLy8gVGhpcyB0YWtlcyBjYXJlIG9mIGlucHV0IG91dHNpZGUgb2Ygbm9taW5h
bCByYW5nZSAtMSAtPiArMQorICAgICAgICBpbmRleCA9IG1heChpbmRleCwgMCk7CisgICAgICAg
IGluZGV4ID0gbWluKGluZGV4LCBjdXJ2ZUxlbmd0aCAtIDEpOworICAgICAgICBkZXN0aW5hdGlv
bltpXSA9IGN1cnZlRGF0YVtpbmRleF07CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmgJKHJldmlz
aW9uIDExMTQzMykJKGZyb20gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlckRTUEtl
cm5lbC5oOjExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNo
YXBlckRTUEtlcm5lbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFdhdmVTaGFwZXJEU1BLZXJuZWxfaAorI2RlZmluZSBXYXZlU2hhcGVyRFNQ
S2VybmVsX2gKKworI2luY2x1ZGUgIkF1ZGlvRFNQS2VybmVsLmgiCisjaW5jbHVkZSAiV2F2ZVNo
YXBlclByb2Nlc3Nvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdhdmVTaGFw
ZXJQcm9jZXNzb3I7CisKKy8vIFdhdmVTaGFwZXJEU1BLZXJuZWwgaXMgYW4gQXVkaW9EU1BLZXJu
ZWwgYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBub24tbGluZWFyIGRpc3RvcnRpb24gb24gb25lIGNo
YW5uZWwuCisKK2NsYXNzIFdhdmVTaGFwZXJEU1BLZXJuZWwgOiBwdWJsaWMgQXVkaW9EU1BLZXJu
ZWwgeworcHVibGljOiAgCisgICAgV2F2ZVNoYXBlckRTUEtlcm5lbChXYXZlU2hhcGVyUHJvY2Vz
c29yKiBwcm9jZXNzb3IpCisgICAgOiBBdWRpb0RTUEtlcm5lbChwcm9jZXNzb3IpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICAvLyBBdWRpb0RTUEtlcm5lbAorICAgIHZpcnR1YWwgdm9pZCBwcm9j
ZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0LCBzaXplX3QgZnJhbWVzVG9Qcm9j
ZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSB7IH0KKyAgICB2aXJ0dWFsIGRvdWJsZSB0
YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGRvdWJs
ZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKyAgICAKK3Byb3Rl
Y3RlZDoKKyAgICBXYXZlU2hhcGVyUHJvY2Vzc29yKiB3YXZlU2hhcGVyUHJvY2Vzc29yKCkgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8V2F2ZVNoYXBlclByb2Nlc3Nvcio+KHByb2Nlc3NvcigpKTsgfQor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV2F2ZVNoYXBlckRTUEtl
cm5lbF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJO
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dh
dmVTaGFwZXJOb2RlLmNwcAkocmV2aXNpb24gMTExNDMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5jcHA6MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShX
RUJfQVVESU8pCisKKyNpbmNsdWRlICJXYXZlU2hhcGVyTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV2F2ZVNoYXBlck5vZGU6Oldh
dmVTaGFwZXJOb2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCkKKyAgICA6IEF1ZGlvQmFzaWNQcm9j
ZXNzb3JOb2RlKGNvbnRleHQsIGNvbnRleHQtPnNhbXBsZVJhdGUoKSkKK3sKKyAgICBtX3Byb2Nl
c3NvciA9IGFkb3B0UHRyKG5ldyBXYXZlU2hhcGVyUHJvY2Vzc29yKGNvbnRleHQtPnNhbXBsZVJh
dGUoKSwgMSkpOworICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlV2F2ZVNoYXBlcik7Cit9CisKK3Zv
aWQgV2F2ZVNoYXBlck5vZGU6OnNldEN1cnZlKEZsb2F0MzJBcnJheSogY3VydmUpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsgCisgICAgd2F2ZVNoYXBlclByb2Nlc3NvcigpLT5zZXRD
dXJ2ZShjdXJ2ZSk7Cit9CisKK0Zsb2F0MzJBcnJheSogV2F2ZVNoYXBlck5vZGU6OmN1cnZlKCkK
K3sKKyAgICByZXR1cm4gd2F2ZVNoYXBlclByb2Nlc3NvcigpLT5jdXJ2ZSgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuaAko
cmV2aXNpb24gMTExNDMzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZlU2hhcGVy
Tm9kZS5oOjExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNo
YXBlck5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXYXZlU2hhcGVyTm9kZV9oCisjZGVmaW5lIFdhdmVTaGFwZXJOb2RlX2gKKworI2lu
Y2x1ZGUgIkF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmgiCisjaW5jbHVkZSAiQmlxdWFkUHJvY2Vz
c29yLmgiCisjaW5jbHVkZSAiV2F2ZVNoYXBlclByb2Nlc3Nvci5oIgorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIFdhdmVTaGFwZXJO
b2RlIDogcHVibGljIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxXYXZlU2hhcGVyTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCogY29udGV4
dCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2F2ZVNoYXBlck5vZGUoY29u
dGV4dCkpOworICAgIH0KKworICAgIC8vIHNldEN1cnZlKCkgaXMgY2FsbGVkIG9uIHRoZSBtYWlu
IHRocmVhZC4KKyAgICB2b2lkIHNldEN1cnZlKEZsb2F0MzJBcnJheSopOworICAgIEZsb2F0MzJB
cnJheSogY3VydmUoKTsKKworcHJpdmF0ZTogICAgCisgICAgV2F2ZVNoYXBlck5vZGUoQXVkaW9D
b250ZXh0Kik7ICAgIAorCisgICAgV2F2ZVNoYXBlclByb2Nlc3Nvciogd2F2ZVNoYXBlclByb2Nl
c3NvcigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFdhdmVTaGFwZXJQcm9jZXNzb3IqPihwcm9jZXNz
b3IoKSk7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFdhdmVT
aGFwZXJOb2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNo
YXBlck5vZGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vV2F2ZVNoYXBlck5vZGUuaWRsCShyZXZpc2lvbiAxMTE0MzMpCShmcm9tIFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmlkbDoxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIGF1ZGlvIHsKKyAgICBpbnRlcmZhY2Ug
WworICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCisgICAgICAgIEpTR2VuZXJhdGVUb0pT
T2JqZWN0CisgICAgXSBXYXZlU2hhcGVyTm9kZSA6IEF1ZGlvTm9kZSB7CisgICAgICAgIGF0dHJp
YnV0ZSBbSlNDdXN0b21TZXR0ZXJdIEZsb2F0MzJBcnJheSBjdXJ2ZTsKKyAgICB9OworfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFw
ZXJQcm9jZXNzb3IuY3BwCShyZXZpc2lvbiAxMTE0MzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuY3BwOjExMTQzMykKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJXYXZlU2hhcGVyUHJvY2Vzc29yLmgiCisK
KyNpbmNsdWRlICJXYXZlU2hhcGVyRFNQS2VybmVsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KyAgICAKK1dhdmVTaGFwZXJQcm9jZXNzb3I6OldhdmVTaGFwZXJQcm9jZXNzb3IoZmxvYXQgc2Ft
cGxlUmF0ZSwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMpCisgICAgOiBBdWRpb0RTUEtlcm5lbFBy
b2Nlc3NvcihzYW1wbGVSYXRlLCBudW1iZXJPZkNoYW5uZWxzKQoreworfQorCitXYXZlU2hhcGVy
UHJvY2Vzc29yOjp+V2F2ZVNoYXBlclByb2Nlc3NvcigpCit7CisgICAgaWYgKGlzSW5pdGlhbGl6
ZWQoKSkKKyAgICAgICAgdW5pbml0aWFsaXplKCk7Cit9CisKK1Bhc3NPd25QdHI8QXVkaW9EU1BL
ZXJuZWw+IFdhdmVTaGFwZXJQcm9jZXNzb3I6OmNyZWF0ZUtlcm5lbCgpCit7CisgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBXYXZlU2hhcGVyRFNQS2VybmVsKHRoaXMpKTsKK30KKwordm9pZCBXYXZl
U2hhcGVyUHJvY2Vzc29yOjpzZXRDdXJ2ZShGbG9hdDMyQXJyYXkqIGN1cnZlKQoreworICAgIC8v
IFRoaXMgc3luY2hyb25pemVzIHdpdGggcHJvY2VzcygpLgorICAgIE11dGV4TG9ja2VyIHByb2Nl
c3NMb2NrZXIobV9wcm9jZXNzTG9jayk7CisgICAgCisgICAgbV9jdXJ2ZSA9IGN1cnZlOworfQor
Cit2b2lkIFdhdmVTaGFwZXJQcm9jZXNzb3I6OnByb2Nlc3MoY29uc3QgQXVkaW9CdXMqIHNvdXJj
ZSwgQXVkaW9CdXMqIGRlc3RpbmF0aW9uLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQoreworICAg
IGlmICghaXNJbml0aWFsaXplZCgpKSB7CisgICAgICAgIGRlc3RpbmF0aW9uLT56ZXJvKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGUgYXVkaW8gdGhyZWFkIGNhbid0IGJs
b2NrIG9uIHRoaXMgbG9jaywgc28gd2UgY2FsbCB0cnlMb2NrKCkgaW5zdGVhZC4KKyAgICAvLyBD
YXJlZnVsIC0gdGhpcyBpcyBhIHRyeUxvY2soKSBhbmQgbm90IGFuIGF1dG9sb2NrZXIsIHNvIHdl
IG11c3QgdW5sb2NrKCkgYmVmb3JlIGV2ZXJ5IHJldHVybi4KKyAgICBpZiAobV9wcm9jZXNzTG9j
ay50cnlMb2NrKCkpIHsgICAgICAgIAorICAgICAgICAvLyBGb3IgZWFjaCBjaGFubmVsIG9mIG91
ciBpbnB1dCwgcHJvY2VzcyB1c2luZyB0aGUgY29ycmVzcG9uZGluZyBXYXZlU2hhcGVyRFNQS2Vy
bmVsIGludG8gdGhlIG91dHB1dCBjaGFubmVsLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9rZXJuZWxzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9rZXJuZWxzW2ldLT5w
cm9jZXNzKHNvdXJjZS0+Y2hhbm5lbChpKS0+ZGF0YSgpLCBkZXN0aW5hdGlvbi0+Y2hhbm5lbChp
KS0+bXV0YWJsZURhdGEoKSwgZnJhbWVzVG9Qcm9jZXNzKTsKKworICAgICAgICBtX3Byb2Nlc3NM
b2NrLnVubG9jaygpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFRvbyBiYWQgLSB0aGUgdHJ5
TG9jaygpIGZhaWxlZC4gV2UgbXVzdCBiZSBpbiB0aGUgbWlkZGxlIG9mIGEgc2V0Q3VydmUoKSBj
YWxsLgorICAgICAgICBkZXN0aW5hdGlvbi0+emVybygpOworICAgIH0KK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nv
ci5oCShyZXZpc2lvbiAxMTE0MzMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVT
aGFwZXJQcm9jZXNzb3IuaDoxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBXYXZlU2hhcGVyUHJvY2Vzc29yX2gKKyNkZWZpbmUgV2F2
ZVNoYXBlclByb2Nlc3Nvcl9oCisKKyNpbmNsdWRlICJBdWRpb0RTUEtlcm5lbC5oIgorI2luY2x1
ZGUgIkF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmgiCisjaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCisj
aW5jbHVkZSA8d3RmL0Zsb2F0MzJBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gV2F2
ZVNoYXBlclByb2Nlc3NvciBpcyBhbiBBdWRpb0RTUEtlcm5lbFByb2Nlc3NvciB3aGljaCB1c2Vz
IFdhdmVTaGFwZXJEU1BLZXJuZWwgb2JqZWN0cyB0byBpbXBsZW1lbnQgbm9uLWxpbmVhciBkaXN0
b3J0aW9uIGVmZmVjdHMuCisKK2NsYXNzIFdhdmVTaGFwZXJQcm9jZXNzb3IgOiBwdWJsaWMgQXVk
aW9EU1BLZXJuZWxQcm9jZXNzb3IgeworcHVibGljOgorICAgIFdhdmVTaGFwZXJQcm9jZXNzb3Io
ZmxvYXQgc2FtcGxlUmF0ZSwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMpOworCisgICAgdmlydHVh
bCB+V2F2ZVNoYXBlclByb2Nlc3NvcigpOworCisgICAgdmlydHVhbCBQYXNzT3duUHRyPEF1ZGlv
RFNQS2VybmVsPiBjcmVhdGVLZXJuZWwoKTsKKworICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKGNv
bnN0IEF1ZGlvQnVzKiBzb3VyY2UsIEF1ZGlvQnVzKiBkZXN0aW5hdGlvbiwgc2l6ZV90IGZyYW1l
c1RvUHJvY2Vzcyk7CisKKyAgICB2b2lkIHNldEN1cnZlKEZsb2F0MzJBcnJheSopOworICAgIEZs
b2F0MzJBcnJheSogY3VydmUoKSB7IHJldHVybiBtX2N1cnZlLmdldCgpOyB9CisKK3ByaXZhdGU6
CisgICAgLy8gbV9jdXJ2ZSByZXByZXNlbnRzIHRoZSBub24tbGluZWFyIHNoYXBpbmcgY3VydmUu
CisgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gbV9jdXJ2ZTsKKworICAgIC8vIFRoaXMgc3luY2hy
b25pemVzIHByb2Nlc3MoKSB3aXRoIHNldEN1cnZlKCkuCisgICAgbXV0YWJsZSBNdXRleCBtX3By
b2Nlc3NMb2NrOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV2F2
ZVNoYXBlclByb2Nlc3Nvcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJD
b3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3Jl
Lmd5cAkocmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAKICAgICAgICcuLi9Nb2R1
bGVzL2luZGV4ZWRkYicsCiAgICAgICAnLi4vTW9kdWxlcy9tZWRpYXN0cmVhbScsCiAgICAgICAn
Li4vTW9kdWxlcy9zcGVlY2gnLAorICAgICAgJy4uL01vZHVsZXMvd2ViYXVkaW8nLAogICAgICAg
Jy4uL01vZHVsZXMvd2ViZGF0YWJhc2UnLAogICAgICAgJy4uL01vZHVsZXMvd2ViZGF0YWJhc2Uv
Y2hyb21pdW0nLAogICAgICAgJy4uL01vZHVsZXMvd2Vic29ja2V0cycsCkBAIC0xNDAsNyArMTQx
LDYgQEAKICAgICAgICcuLi9zdmcvZ3JhcGhpY3MvZmlsdGVycycsCiAgICAgICAnLi4vc3ZnL3By
b3BlcnRpZXMnLAogICAgICAgJy4uLy4uL1RoaXJkUGFydHkvZ2x1JywKLSAgICAgICcuLi93ZWJh
dWRpbycsCiAgICAgICAnLi4vd29ya2VycycsCiAgICAgICAnLi4veG1sJywKICAgICAgICcuLi94
bWwvcGFyc2VyJywKQEAgLTk3OSw2ICs5NzksNyBAQAogICAgICAgICAgICAgICAnLS1pbmNsdWRl
JywgJy4uL01vZHVsZXMvZmlsZXN5c3RlbScsCiAgICAgICAgICAgICAgICctLWluY2x1ZGUnLCAn
Li4vTW9kdWxlcy9pbmRleGVkZGInLAogICAgICAgICAgICAgICAnLS1pbmNsdWRlJywgJy4uL01v
ZHVsZXMvbWVkaWFzdHJlYW0nLAorICAgICAgICAgICAgICAnLS1pbmNsdWRlJywgJy4uL01vZHVs
ZXMvd2ViYXVkaW8nLAogICAgICAgICAgICAgICAnLS1pbmNsdWRlJywgJy4uL01vZHVsZXMvd2Vi
ZGF0YWJhc2UnLAogICAgICAgICAgICAgICAnLS1pbmNsdWRlJywgJy4uL2NzcycsCiAgICAgICAg
ICAgICAgICctLWluY2x1ZGUnLCAnLi4vZG9tJywKQEAgLTk5MCw3ICs5OTEsNiBAQAogICAgICAg
ICAgICAgICAnLS1pbmNsdWRlJywgJy4uL3N0b3JhZ2UnLAogICAgICAgICAgICAgICAnLS1pbmNs
dWRlJywgJy4uL3N2ZycsCiAgICAgICAgICAgICAgICctLWluY2x1ZGUnLCAnLi4vdGVzdGluZycs
Ci0gICAgICAgICAgICAgICctLWluY2x1ZGUnLCAnLi4vd2ViYXVkaW8nLAogICAgICAgICAgICAg
ICAnLS1pbmNsdWRlJywgJy4uL3dvcmtlcnMnLAogICAgICAgICAgICAgICAnLS1pbmNsdWRlJywg
Jy4uL3htbCcsCiAgICAgICAgICAgICBdLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTExNDMzKQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTI3Myw3ICsyMTI3Myw3IEBACiAJCQkJRkQ3RjI5OEYxM0Q0QzBDQjAwQUQ5NTM1
IC8qIFdhdmVTaGFwZXJQcm9jZXNzb3IuY3BwICovLAogCQkJCUZEN0YyOTkwMTNENEMwQ0IwMEFE
OTUzNSAvKiBXYXZlU2hhcGVyUHJvY2Vzc29yLmggKi8sCiAJCQkpOwotCQkJcGF0aCA9IHdlYmF1
ZGlvOworCQkJcGF0aCA9IE1vZHVsZXMvd2ViYXVkaW87CiAJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwogCQl9OwogCQlGRDMxNjA0MDEyQjAyNkEzMDBDMUEzNTkgLyogYXVkaW8gKi8gPSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Bc3luY0F1ZGlvRGVjb2Rlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuY3BwCShy
ZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Bc3luY0F1ZGlvRGVj
b2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAi
QXN5bmNBdWRpb0RlY29kZXIuaCIKLQotI2luY2x1ZGUgIkF1ZGlvQnVmZmVyLmgiCi0jaW5jbHVk
ZSAiQXVkaW9CdWZmZXJDYWxsYmFjay5oIgotI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlci5oPgot
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQXN5bmNB
dWRpb0RlY29kZXI6OkFzeW5jQXVkaW9EZWNvZGVyKCkKLXsKLSAgICAvLyBTdGFydCB3b3JrZXIg
dGhyZWFkLgotICAgIE11dGV4TG9ja2VyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKLSAg
ICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKEFzeW5jQXVkaW9EZWNvZGVyOjp0aHJlYWRFbnRy
eSwgdGhpcywgIkF1ZGlvIERlY29kZXIiKTsKLX0KLQotQXN5bmNBdWRpb0RlY29kZXI6On5Bc3lu
Y0F1ZGlvRGVjb2RlcigpCi17Ci0gICAgbV9xdWV1ZS5raWxsKCk7Ci0gICAgCi0gICAgLy8gU3Rv
cCB0aHJlYWQuCi0gICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV90aHJlYWRJRCk7Ci0gICAg
bV90aHJlYWRJRCA9IDA7Ci19Ci0KLXZvaWQgQXN5bmNBdWRpb0RlY29kZXI6OmRlY29kZUFzeW5j
KEFycmF5QnVmZmVyKiBhdWRpb0RhdGEsIGZsb2F0IHNhbXBsZVJhdGUsIFBhc3NSZWZQdHI8QXVk
aW9CdWZmZXJDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVy
Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LSAgICBBU1NFUlQoYXVkaW9EYXRhKTsKLSAgICBpZiAoIWF1ZGlvRGF0YSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgT3duUHRyPERlY29kaW5nVGFzaz4gZGVjb2RpbmdUYXNrID0gRGVjb2RpbmdU
YXNrOjpjcmVhdGUoYXVkaW9EYXRhLCBzYW1wbGVSYXRlLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9y
Q2FsbGJhY2spOwotICAgIG1fcXVldWUuYXBwZW5kKGRlY29kaW5nVGFzay5yZWxlYXNlKCkpOyAv
LyBub3RlIHRoYXQgb3duZXJzaGlwIG9mIHRoZSB0YXNrIGlzIGVmZmVjdGl2ZWx5IHRha2VuIGJ5
IHRoZSBxdWV1ZS4KLX0KLQotLy8gQXN5bmNocm9ub3VzbHkgZGVjb2RlIGluIHRoaXMgdGhyZWFk
Lgotdm9pZCBBc3luY0F1ZGlvRGVjb2Rlcjo6dGhyZWFkRW50cnkodm9pZCogdGhyZWFkRGF0YSkK
LXsKLSAgICBBU1NFUlQodGhyZWFkRGF0YSk7Ci0gICAgQXN5bmNBdWRpb0RlY29kZXIqIGRlY29k
ZXIgPSByZWludGVycHJldF9jYXN0PEFzeW5jQXVkaW9EZWNvZGVyKj4odGhyZWFkRGF0YSk7Ci0g
ICAgZGVjb2Rlci0+cnVuTG9vcCgpOwotfQotCi12b2lkIEFzeW5jQXVkaW9EZWNvZGVyOjpydW5M
b29wKCkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIHsKLSAgICAgICAg
Ly8gV2FpdCBmb3IgdW50aWwgd2UgaGF2ZSBtX3RocmVhZElEIGVzdGFibGlzaGVkIGJlZm9yZSBz
dGFydGluZyB0aGUgcnVuIGxvb3AuCi0gICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV90aHJlYWRD
cmVhdGlvbk11dGV4KTsKLSAgICB9Ci0KLSAgICAvLyBLZWVwIHJ1bm5pbmcgZGVjb2RpbmcgdGFz
a3MgdW50aWwgd2UncmUga2lsbGVkLgotICAgIHdoaWxlIChPd25QdHI8RGVjb2RpbmdUYXNrPiBk
ZWNvZGluZ1Rhc2sgPSBtX3F1ZXVlLndhaXRGb3JNZXNzYWdlKCkpIHsKLSAgICAgICAgLy8gTGV0
IHRoZSB0YXNrIHRha2UgY2FyZSBvZiBpdHMgb3duIG93bmVyc2hpcC4KLSAgICAgICAgLy8gU2Vl
IERlY29kaW5nVGFzazo6bm90aWZ5Q29tcGxldGUoKSBmb3IgY2xlYW51cC4KLSAgICAgICAgZGVj
b2RpbmdUYXNrLmxlYWtQdHIoKS0+ZGVjb2RlKCk7Ci0gICAgfQotfQotCi1QYXNzT3duUHRyPEFz
eW5jQXVkaW9EZWNvZGVyOjpEZWNvZGluZ1Rhc2s+IEFzeW5jQXVkaW9EZWNvZGVyOjpEZWNvZGlu
Z1Rhc2s6OmNyZWF0ZShBcnJheUJ1ZmZlciogYXVkaW9EYXRhLCBmbG9hdCBzYW1wbGVSYXRlLCBQ
YXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0
cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQotewotICAgIHJldHVybiBhZG9w
dFB0cihuZXcgRGVjb2RpbmdUYXNrKGF1ZGlvRGF0YSwgc2FtcGxlUmF0ZSwgc3VjY2Vzc0NhbGxi
YWNrLCBlcnJvckNhbGxiYWNrKSk7Ci19Ci0KLUFzeW5jQXVkaW9EZWNvZGVyOjpEZWNvZGluZ1Rh
c2s6OkRlY29kaW5nVGFzayhBcnJheUJ1ZmZlciogYXVkaW9EYXRhLCBmbG9hdCBzYW1wbGVSYXRl
LCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1Jl
ZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQotICAgIDogbV9hdWRpb0Rh
dGEoYXVkaW9EYXRhKQotICAgICwgbV9zYW1wbGVSYXRlKHNhbXBsZVJhdGUpCi0gICAgLCBtX3N1
Y2Nlc3NDYWxsYmFjayhzdWNjZXNzQ2FsbGJhY2spCi0gICAgLCBtX2Vycm9yQ2FsbGJhY2soZXJy
b3JDYWxsYmFjaykKLXsKLX0KLQotdm9pZCBBc3luY0F1ZGlvRGVjb2Rlcjo6RGVjb2RpbmdUYXNr
OjpkZWNvZGUoKQotewotICAgIEFTU0VSVChtX2F1ZGlvRGF0YS5nZXQoKSk7Ci0gICAgaWYgKCFt
X2F1ZGlvRGF0YS5nZXQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRG8gdGhlIGFjdHVh
bCBkZWNvZGluZyBhbmQgaW52b2tlIHRoZSBjYWxsYmFjay4KLSAgICBtX2F1ZGlvQnVmZmVyID0g
QXVkaW9CdWZmZXI6OmNyZWF0ZUZyb21BdWRpb0ZpbGVEYXRhKG1fYXVkaW9EYXRhLT5kYXRhKCks
IG1fYXVkaW9EYXRhLT5ieXRlTGVuZ3RoKCksIGZhbHNlLCBzYW1wbGVSYXRlKCkpOwotICAgIAot
ICAgIC8vIERlY29kaW5nIGlzIGZpbmlzaGVkLCBidXQgd2UgbmVlZCB0byBkbyB0aGUgY2FsbGJh
Y2tzIG9uIHRoZSBtYWluIHRocmVhZC4KLSAgICBjYWxsT25NYWluVGhyZWFkKG5vdGlmeUNvbXBs
ZXRlRGlzcGF0Y2gsIHRoaXMpOwotfQotCi12b2lkIEFzeW5jQXVkaW9EZWNvZGVyOjpEZWNvZGlu
Z1Rhc2s6Om5vdGlmeUNvbXBsZXRlRGlzcGF0Y2godm9pZCogdXNlckRhdGEpCi17Ci0gICAgQXN5
bmNBdWRpb0RlY29kZXI6OkRlY29kaW5nVGFzayogdGFzayA9IHJlaW50ZXJwcmV0X2Nhc3Q8QXN5
bmNBdWRpb0RlY29kZXI6OkRlY29kaW5nVGFzayo+KHVzZXJEYXRhKTsKLSAgICBBU1NFUlQodGFz
ayk7Ci0gICAgaWYgKCF0YXNrKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0YXNrLT5ub3RpZnlD
b21wbGV0ZSgpOwotfQotCi12b2lkIEFzeW5jQXVkaW9EZWNvZGVyOjpEZWNvZGluZ1Rhc2s6Om5v
dGlmeUNvbXBsZXRlKCkKLXsKLSAgICBpZiAoYXVkaW9CdWZmZXIoKSAmJiBzdWNjZXNzQ2FsbGJh
Y2soKSkKLSAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKCktPmhhbmRsZUV2ZW50KGF1ZGlvQnVmZmVy
KCkpOwotICAgIGVsc2UgaWYgKGVycm9yQ2FsbGJhY2soKSkKLSAgICAgICAgZXJyb3JDYWxsYmFj
aygpLT5oYW5kbGVFdmVudChhdWRpb0J1ZmZlcigpKTsKLQotICAgIC8vIE91ciBvd25lcnNoaXAg
d2FzIGdpdmVuIHVwIGluIEFzeW5jQXVkaW9EZWNvZGVyOjpydW5Mb29wKCkKLSAgICAvLyBNYWtl
IHN1cmUgdG8gY2xlYW4gdXAgaGVyZS4KLSAgICBkZWxldGUgdGhpczsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0FzeW5jQXVkaW9EZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaAkocmV2aXNpb24gMTExNDMz
KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXN5bmNBdWRpb0RlY29kZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBc3luY0F1ZGlv
RGVjb2Rlcl9oCi0jZGVmaW5lIEFzeW5jQXVkaW9EZWNvZGVyX2gKLQotI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5oPgotI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEF1ZGlvQnVmZmVyOwotY2xhc3MgQXVkaW9CdWZmZXJDYWxsYmFjazsKLQot
Ly8gQXN5bmNBdWRpb0RlY29kZXIgYXN5bmNocm9ub3VzbHkgZGVjb2RlcyBhdWRpbyBmaWxlIGRh
dGEgZnJvbSBhbiBBcnJheUJ1ZmZlciBpbiBhIHdvcmtlciB0aHJlYWQuCi0vLyBVcG9uIHN1Y2Nl
c3NmdWwgZGVjb2RpbmcsIGEgY29tcGxldGlvbiBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgd2l0
aCB0aGUgZGVjb2RlZCBQQ00gZGF0YSBpbiBhbiBBdWRpb0J1ZmZlci4KLQotY2xhc3MgQXN5bmNB
dWRpb0RlY29kZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFzeW5jQXVkaW9EZWNvZGVy
KTsKLXB1YmxpYzoKLSAgICBBc3luY0F1ZGlvRGVjb2RlcigpOwotICAgIH5Bc3luY0F1ZGlvRGVj
b2RlcigpOwotCi0gICAgLy8gTXVzdCBiZSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLgotICAg
IHZvaWQgZGVjb2RlQXN5bmMoQXJyYXlCdWZmZXIqIGF1ZGlvRGF0YSwgZmxvYXQgc2FtcGxlUmF0
ZSwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NS
ZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayk7Ci0KLXByaXZhdGU6Ci0g
ICAgY2xhc3MgRGVjb2RpbmdUYXNrIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVj
b2RpbmdUYXNrKTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPERlY29k
aW5nVGFzaz4gY3JlYXRlKEFycmF5QnVmZmVyKiBhdWRpb0RhdGEsIGZsb2F0IHNhbXBsZVJhdGUs
IFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVm
UHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spOwotCi0gICAgICAgIHZvaWQg
ZGVjb2RlKCk7Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIERlY29kaW5nVGFzayhB
cnJheUJ1ZmZlciogYXVkaW9EYXRhLCBmbG9hdCBzYW1wbGVSYXRlLCBQYXNzUmVmUHRyPEF1ZGlv
QnVmZmVyQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlckNh
bGxiYWNrPiBlcnJvckNhbGxiYWNrKTsKLQotICAgICAgICBBcnJheUJ1ZmZlciogYXVkaW9EYXRh
KCkgeyByZXR1cm4gbV9hdWRpb0RhdGEuZ2V0KCk7IH0KLSAgICAgICAgZmxvYXQgc2FtcGxlUmF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlUmF0ZTsgfQotICAgICAgICBBdWRpb0J1ZmZlckNh
bGxiYWNrKiBzdWNjZXNzQ2FsbGJhY2soKSB7IHJldHVybiBtX3N1Y2Nlc3NDYWxsYmFjay5nZXQo
KTsgfQotICAgICAgICBBdWRpb0J1ZmZlckNhbGxiYWNrKiBlcnJvckNhbGxiYWNrKCkgeyByZXR1
cm4gbV9lcnJvckNhbGxiYWNrLmdldCgpOyB9Ci0gICAgICAgIEF1ZGlvQnVmZmVyKiBhdWRpb0J1
ZmZlcigpIHsgcmV0dXJuIG1fYXVkaW9CdWZmZXIuZ2V0KCk7IH0KLQotICAgICAgICBzdGF0aWMg
dm9pZCBub3RpZnlDb21wbGV0ZURpc3BhdGNoKHZvaWQqIHVzZXJEYXRhKTsKLSAgICAgICAgdm9p
ZCBub3RpZnlDb21wbGV0ZSgpOwotCi0gICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbV9hdWRp
b0RhdGE7Ci0gICAgICAgIGZsb2F0IG1fc2FtcGxlUmF0ZTsKLSAgICAgICAgUmVmUHRyPEF1ZGlv
QnVmZmVyQ2FsbGJhY2s+IG1fc3VjY2Vzc0NhbGxiYWNrOwotICAgICAgICBSZWZQdHI8QXVkaW9C
dWZmZXJDYWxsYmFjaz4gbV9lcnJvckNhbGxiYWNrOwotICAgICAgICBSZWZQdHI8QXVkaW9CdWZm
ZXI+IG1fYXVkaW9CdWZmZXI7Ci0gICAgfTsKLSAgICAKLSAgICBzdGF0aWMgdm9pZCB0aHJlYWRF
bnRyeSh2b2lkKiB0aHJlYWREYXRhKTsKLSAgICB2b2lkIHJ1bkxvb3AoKTsKLQotICAgIFdURjo6
VGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOwotICAgIE11dGV4IG1fdGhyZWFkQ3JlYXRpb25N
dXRleDsKLSAgICBNZXNzYWdlUXVldWU8RGVjb2RpbmdUYXNrPiBtX3F1ZXVlOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQXN5bmNBdWRpb0RlY29kZXJfaApJbmRl
eDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JO
b2RlLmNwcAkocmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9CYXNpY1Byb2Nlc3Nvck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1MSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwot
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJ
TykKLQotI2luY2x1ZGUgIkF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmgiCi0KLSNpbmNsdWRlICJB
dWRpb0J1cy5oIgotI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9k
ZUlucHV0LmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCi0jaW5jbHVkZSAiQXVkaW9Q
cm9jZXNzb3IuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1BdWRpb0Jhc2ljUHJvY2Vzc29y
Tm9kZTo6QXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9h
dCBzYW1wbGVSYXRlKQotICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCi17Ci0g
ICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7Ci0gICAgYWRk
T3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywgMSkpKTsKLQotICAgIC8v
IFRoZSBzdWJjbGFzcyBtdXN0IGNyZWF0ZSBtX3Byb2Nlc3Nvci4KLX0KLQotdm9pZCBBdWRpb0Jh
c2ljUHJvY2Vzc29yTm9kZTo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgaWYgKGlzSW5pdGlhbGl6ZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKHByb2Nlc3NvcigpKTsKLSAgICBwcm9j
ZXNzb3IoKS0+aW5pdGlhbGl6ZSgpOwotCi0gICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7Ci19
Ci0KLXZvaWQgQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGU6OnVuaW5pdGlhbGl6ZSgpCi17Ci0gICAg
aWYgKCFpc0luaXRpYWxpemVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChwcm9j
ZXNzb3IoKSk7Ci0gICAgcHJvY2Vzc29yKCktPnVuaW5pdGlhbGl6ZSgpOwotCi0gICAgQXVkaW9O
b2RlOjp1bmluaXRpYWxpemUoKTsKLX0KLQotdm9pZCBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZTo6
cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIEF1ZGlvQnVzKiBkZXN0aW5h
dGlvbkJ1cyA9IG91dHB1dCgwKS0+YnVzKCk7Ci0gICAgCi0gICAgaWYgKCFpc0luaXRpYWxpemVk
KCkgfHwgIXByb2Nlc3NvcigpKQotICAgICAgICBkZXN0aW5hdGlvbkJ1cy0+emVybygpOwotICAg
IGVsc2UgewotICAgICAgICBBdWRpb0J1cyogc291cmNlQnVzID0gaW5wdXQoMCktPmJ1cygpOwot
Ci0gICAgICAgIC8vIEZJWE1FOiBpZiB3ZSB0YWtlICJ0YWlsIHRpbWUiIGludG8gYWNjb3VudCwg
dGhlbiB3ZSBjYW4gYXZvaWQgY2FsbGluZyBwcm9jZXNzb3IoKS0+cHJvY2VzcygpIG9uY2UgdGhl
IHRhaWwgZGllcyBkb3duLgotICAgICAgICBpZiAoIWlucHV0KDApLT5pc0Nvbm5lY3RlZCgpKQot
ICAgICAgICAgICAgc291cmNlQnVzLT56ZXJvKCk7Ci0KLSAgICAgICAgcHJvY2Vzc29yKCktPnBy
b2Nlc3Moc291cmNlQnVzLCBkZXN0aW5hdGlvbkJ1cywgZnJhbWVzVG9Qcm9jZXNzKTsgIAotICAg
IH0KLX0KLQotLy8gTmljZSBvcHRpbWl6YXRpb24gaW4gdGhlIHZlcnkgY29tbW9uIGNhc2UgYWxs
b3dpbmcgZm9yICJpbi1wbGFjZSIgcHJvY2Vzc2luZwotdm9pZCBBdWRpb0Jhc2ljUHJvY2Vzc29y
Tm9kZTo6cHVsbElucHV0cyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIC8vIFJlbmRl
ciBpbnB1dCBzdHJlYW0gLSBzdWdnZXN0IHRvIHRoZSBpbnB1dCB0byByZW5kZXIgZGlyZWN0bHkg
aW50byBvdXRwdXQgYnVzIGZvciBpbi1wbGFjZSBwcm9jZXNzaW5nIGluIHByb2Nlc3MoKSBpZiBw
b3NzaWJsZS4KLSAgICBpbnB1dCgwKS0+cHVsbChvdXRwdXQoMCktPmJ1cygpLCBmcmFtZXNUb1By
b2Nlc3MpOwotfQotCi12b2lkIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlOjpyZXNldCgpCi17Ci0g
ICAgaWYgKHByb2Nlc3NvcigpKQotICAgICAgICBwcm9jZXNzb3IoKS0+cmVzZXQoKTsKLX0KLQot
Ly8gQXMgc29vbiBhcyB3ZSBrbm93IHRoZSBjaGFubmVsIGNvdW50IG9mIG91ciBpbnB1dCwgd2Ug
Y2FuIGxhemlseSBpbml0aWFsaXplLgotLy8gU29tZXRpbWVzIHRoaXMgbWF5IGJlIGNhbGxlZCBt
b3JlIHRoYW4gb25jZSB3aXRoIGRpZmZlcmVudCBjaGFubmVsIGNvdW50cywgaW4gd2hpY2ggY2Fz
ZSB3ZSBtdXN0IHNhZmVseQotLy8gdW5pbml0aWFsaXplIGFuZCB0aGVuIHJlLWluaXRpYWxpemUg
d2l0aCB0aGUgbmV3IGNoYW5uZWwgY291bnQuCi12b2lkIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2Rl
OjpjaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1dChBdWRpb05vZGVJbnB1dCogaW5wdXQpCi17
Ci0gICAgQVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgpICYmIGNvbnRleHQoKS0+aXNH
cmFwaE93bmVyKCkpOwotICAgIAotICAgIEFTU0VSVChpbnB1dCA9PSB0aGlzLT5pbnB1dCgwKSk7
Ci0gICAgaWYgKGlucHV0ICE9IHRoaXMtPmlucHV0KDApKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBBU1NFUlQocHJvY2Vzc29yKCkpOwotICAgIGlmICghcHJvY2Vzc29yKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMgPSBpbnB1dC0+bnVtYmVyT2ZD
aGFubmVscygpOwotICAgIAotICAgIGlmIChpc0luaXRpYWxpemVkKCkgJiYgbnVtYmVyT2ZDaGFu
bmVscyAhPSBvdXRwdXQoMCktPm51bWJlck9mQ2hhbm5lbHMoKSkgewotICAgICAgICAvLyBXZSdy
ZSBhbHJlYWR5IGluaXRpYWxpemVkIGJ1dCB0aGUgY2hhbm5lbCBjb3VudCBoYXMgY2hhbmdlZC4K
LSAgICAgICAgdW5pbml0aWFsaXplKCk7Ci0gICAgfQotICAgIAotICAgIGlmICghaXNJbml0aWFs
aXplZCgpKSB7Ci0gICAgICAgIC8vIFRoaXMgd2lsbCBwcm9wYWdhdGUgdGhlIGNoYW5uZWwgY291
bnQgdG8gYW55IG5vZGVzIGNvbm5lY3RlZCBmdXJ0aGVyIGRvd24gdGhlIGNoYWluLi4uCi0gICAg
ICAgIG91dHB1dCgwKS0+c2V0TnVtYmVyT2ZDaGFubmVscyhudW1iZXJPZkNoYW5uZWxzKTsKLQot
ICAgICAgICAvLyBSZS1pbml0aWFsaXplIHRoZSBwcm9jZXNzb3Igd2l0aCB0aGUgbmV3IGNoYW5u
ZWwgY291bnQuCi0gICAgICAgIHByb2Nlc3NvcigpLT5zZXROdW1iZXJPZkNoYW5uZWxzKG51bWJl
ck9mQ2hhbm5lbHMpOwotICAgICAgICBpbml0aWFsaXplKCk7Ci0gICAgfQotCi0gICAgQXVkaW9O
b2RlOjpjaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1dChpbnB1dCk7Ci19Ci0KLXVuc2lnbmVk
IEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlOjpudW1iZXJPZkNoYW5uZWxzKCkKLXsKLSAgICByZXR1
cm4gb3V0cHV0KDApLT5udW1iZXJPZkNoYW5uZWxzKCk7Ci19Ci0KLWRvdWJsZSBBdWRpb0Jhc2lj
UHJvY2Vzc29yTm9kZTo6dGFpbFRpbWUoKSBjb25zdAotewotICAgIHJldHVybiBtX3Byb2Nlc3Nv
ci0+dGFpbFRpbWUoKTsKLX0KLQotZG91YmxlIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlOjpsYXRl
bmN5VGltZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJvY2Vzc29yLT5sYXRlbmN5VGltZSgp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FV
RElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Jhc2ljUHJv
Y2Vzc29yTm9kZS5oCShyZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
Ci0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlX2gKLSNkZWZp
bmUgQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGVfaAotCi0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCi0j
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgot
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBBdWRpb0J1czsKLWNsYXNzIEF1ZGlvTm9kZUlucHV0OwotY2xhc3MgQXVkaW9Qcm9jZXNzb3I7
Ci0gICAgCi0vLyBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZSBpcyBhbiBBdWRpb05vZGUgd2l0aCBv
bmUgaW5wdXQgYW5kIG9uZSBvdXRwdXQgd2hlcmUgdGhlIGlucHV0IGFuZCBvdXRwdXQgaGF2ZSB0
aGUgc2FtZSBudW1iZXIgb2YgY2hhbm5lbHMuCi1jbGFzcyBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9k
ZSA6IHB1YmxpYyBBdWRpb05vZGUgewotcHVibGljOgotICAgIEF1ZGlvQmFzaWNQcm9jZXNzb3JO
b2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwotCi0gICAgLy8gQXVkaW9Ob2Rl
Ci0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAg
dmlydHVhbCB2b2lkIHB1bGxJbnB1dHMoc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgdmly
dHVhbCB2b2lkIHJlc2V0KCk7Ci0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgdW5pbml0aWFsaXplKCk7Ci0KLSAgICAvLyBDYWxsZWQgaW4gdGhlIG1haW4g
dGhyZWFkIHdoZW4gdGhlIG51bWJlciBvZiBjaGFubmVscyBmb3IgdGhlIGlucHV0IG1heSBoYXZl
IGNoYW5nZWQuCi0gICAgdmlydHVhbCB2b2lkIGNoZWNrTnVtYmVyT2ZDaGFubmVsc0ZvcklucHV0
KEF1ZGlvTm9kZUlucHV0Kik7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhbm5l
bHMgZm9yIGJvdGggdGhlIGlucHV0IGFuZCB0aGUgb3V0cHV0LgotICAgIHVuc2lnbmVkIG51bWJl
ck9mQ2hhbm5lbHMoKTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1l
KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25z
dCBPVkVSUklERTsKLQotICAgIEF1ZGlvUHJvY2Vzc29yKiBwcm9jZXNzb3IoKSB7IHJldHVybiBt
X3Byb2Nlc3Nvci5nZXQoKTsgfQotICAgIE93blB0cjxBdWRpb1Byb2Nlc3Nvcj4gbV9wcm9jZXNz
b3I7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBBdWRpb0Jhc2lj
UHJvY2Vzc29yTm9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXIu
Y3BwCShyZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTExICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiQXVkaW9CdWZmZXIu
aCIKLQotI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCi0jaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCi0j
aW5jbHVkZSAiQXVkaW9GaWxlUmVhZGVyLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgot
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVm
UHRyPEF1ZGlvQnVmZmVyPiBBdWRpb0J1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51bWJlck9mQ2hh
bm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSkKLXsKLSAgICBp
ZiAoc2FtcGxlUmF0ZSA8IDIyMDUwIHx8IHNhbXBsZVJhdGUgPiA5NjAwMCB8fCBudW1iZXJPZkNo
YW5uZWxzID4gQXVkaW9Db250ZXh0OjptYXhOdW1iZXJPZkNoYW5uZWxzKCkgfHwgIW51bWJlck9m
RnJhbWVzKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEF1ZGlvQnVmZmVyKG51bWJlck9mQ2hhbm5lbHMsIG51bWJlck9mRnJhbWVzLCBzYW1wbGVSYXRl
KSk7Ci19Ci0KLVBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IEF1ZGlvQnVmZmVyOjpjcmVhdGVGcm9t
QXVkaW9GaWxlRGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUsIGJvb2wgbWl4
VG9Nb25vLCBmbG9hdCBzYW1wbGVSYXRlKQotewotICAgIE93blB0cjxBdWRpb0J1cz4gYnVzID0g
Y3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKGRhdGEsIGRhdGFTaXplLCBtaXhUb01vbm8s
IHNhbXBsZVJhdGUpOwotICAgIGlmIChidXMuZ2V0KCkpCi0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQXVkaW9CdWZmZXIoYnVzLmdldCgpKSk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotQXVk
aW9CdWZmZXI6OkF1ZGlvQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBu
dW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICA6IG1fZ2FpbigxLjApCi0gICAg
LCBtX3NhbXBsZVJhdGUoc2FtcGxlUmF0ZSkKLSAgICAsIG1fbGVuZ3RoKG51bWJlck9mRnJhbWVz
KQotewotICAgIG1fY2hhbm5lbHMucmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mQ2hhbm5lbHMpOwot
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgewot
ICAgICAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiBjaGFubmVsRGF0YUFycmF5ID0gRmxvYXQzMkFy
cmF5OjpjcmVhdGUobV9sZW5ndGgpOwotICAgICAgICBtX2NoYW5uZWxzLmFwcGVuZChjaGFubmVs
RGF0YUFycmF5KTsKLSAgICB9Ci19Ci0KLUF1ZGlvQnVmZmVyOjpBdWRpb0J1ZmZlcihBdWRpb0J1
cyogYnVzKQotICAgIDogbV9nYWluKDEuMCkKLSAgICAsIG1fc2FtcGxlUmF0ZShidXMtPnNhbXBs
ZVJhdGUoKSkKLSAgICAsIG1fbGVuZ3RoKGJ1cy0+bGVuZ3RoKCkpCi17Ci0gICAgLy8gQ29weSBh
dWRpbyBkYXRhIGZyb20gdGhlIGJ1cyB0byB0aGUgRmxvYXQzMkFycmF5cyB3ZSBtYW5hZ2UuCi0g
ICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscyA9IGJ1cy0+bnVtYmVyT2ZDaGFubmVscygpOwot
ICAgIG1fY2hhbm5lbHMucmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mQ2hhbm5lbHMpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpIHsKLSAgICAgICAg
UmVmUHRyPEZsb2F0MzJBcnJheT4gY2hhbm5lbERhdGFBcnJheSA9IEZsb2F0MzJBcnJheTo6Y3Jl
YXRlKG1fbGVuZ3RoKTsKLSAgICAgICAgY2hhbm5lbERhdGFBcnJheS0+c2V0UmFuZ2UoYnVzLT5j
aGFubmVsKGkpLT5kYXRhKCksIG1fbGVuZ3RoLCAwKTsKLSAgICAgICAgbV9jaGFubmVscy5hcHBl
bmQoY2hhbm5lbERhdGFBcnJheSk7Ci0gICAgfQotfQotCi12b2lkIEF1ZGlvQnVmZmVyOjpyZWxl
YXNlTWVtb3J5KCkKLXsKLSAgICBtX2NoYW5uZWxzLmNsZWFyKCk7Ci19Ci0KLUZsb2F0MzJBcnJh
eSogQXVkaW9CdWZmZXI6OmdldENoYW5uZWxEYXRhKHVuc2lnbmVkIGNoYW5uZWxJbmRleCkKLXsK
LSAgICBpZiAoY2hhbm5lbEluZGV4ID49IG1fY2hhbm5lbHMuc2l6ZSgpKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIHJldHVybiBtX2NoYW5uZWxzW2NoYW5uZWxJbmRleF0uZ2V0KCk7Ci19Ci0K
LXZvaWQgQXVkaW9CdWZmZXI6Onplcm8oKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2NoYW5uZWxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChnZXRDaGFubmVsRGF0YShp
KSkKLSAgICAgICAgICAgIGdldENoYW5uZWxEYXRhKGkpLT56ZXJvUmFuZ2UoMCwgbGVuZ3RoKCkp
OwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaAkocmV2
aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw4MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBdWRpb0J1ZmZlcl9oCi0j
ZGVmaW5lIEF1ZGlvQnVmZmVyX2gKLQotI2luY2x1ZGUgPHd0Zi9GbG9hdDMyQXJyYXkuaD4KLSNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb0J1czsKLSAgICAKLWNsYXNzIEF1ZGlvQnVmZmVy
IDogcHVibGljIFJlZkNvdW50ZWQ8QXVkaW9CdWZmZXI+IHsKLXB1YmxpYzogICAKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gY3JlYXRlKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5l
bHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSk7Ci0KLSAgICAvLyBS
ZXR1cm5zIDAgaWYgZGF0YSBpcyBub3QgYSB2YWxpZCBhdWRpbyBmaWxlLgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBjcmVhdGVGcm9tQXVkaW9GaWxlRGF0YShjb25zdCB2b2lk
KiBkYXRhLCBzaXplX3QgZGF0YVNpemUsIGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBzYW1wbGVSYXRl
KTsKLQotICAgIC8vIEZvcm1hdAotICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X2xlbmd0aDsgfQotICAgIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGxlbmd0aCgp
IC8gc2FtcGxlUmF0ZSgpOyB9Ci0gICAgZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2FtcGxlUmF0ZTsgfQotCi0gICAgLy8gQ2hhbm5lbCBkYXRhIGFjY2VzcwotICAgIHVuc2ln
bmVkIG51bWJlck9mQ2hhbm5lbHMoKSBjb25zdCB7IHJldHVybiBtX2NoYW5uZWxzLnNpemUoKTsg
fQotICAgIEZsb2F0MzJBcnJheSogZ2V0Q2hhbm5lbERhdGEodW5zaWduZWQgY2hhbm5lbEluZGV4
KTsKLSAgICB2b2lkIHplcm8oKTsKLQotICAgIC8vIFNjYWxhciBnYWluCi0gICAgZG91YmxlIGdh
aW4oKSBjb25zdCB7IHJldHVybiBtX2dhaW47IH0KLSAgICB2b2lkIHNldEdhaW4oZG91YmxlIGdh
aW4pIHsgbV9nYWluID0gZ2FpbjsgfQotCi0gICAgLy8gQmVjYXVzZSBhbiBBdWRpb0J1ZmZlciBo
YXMgYSBKYXZhU2NyaXB0IHdyYXBwZXIsIHdoaWNoIHdpbGwgYmUgZ2FyYmFnZSBjb2xsZWN0ZWQs
IGl0IG1heSB0YWtlIGF3aGlsZSBmb3IgdGhpcyBvYmplY3QgdG8gYmUgZGVsZXRlZC4KLSAgICAv
LyByZWxlYXNlTWVtb3J5KCkgY2FuIGJlIGNhbGxlZCB3aGVuIHRoZSBBdWRpb0NvbnRleHQgZ29l
cyBhd2F5LCBzbyB3ZSBjYW4gcmVsZWFzZSB0aGUgbWVtb3J5IGVhcmxpZXIgdGhhbiB3aGVuIHRo
ZSBnYXJiYWdlIGNvbGxlY3Rpb24gaGFwcGVucy4KLSAgICAvLyBDYXJlZnVsISBPbmx5IGNhbGwg
dGhpcyB3aGVuIHRoZSBwYWdlIHVubG9hZHMsIGFmdGVyIHRoZSBBdWRpb0NvbnRleHQgaXMgbm8g
bG9uZ2VyIHByb2Nlc3NpbmcuCi0gICAgdm9pZCByZWxlYXNlTWVtb3J5KCk7Ci0gICAgCi1wcm90
ZWN0ZWQ6Ci0gICAgQXVkaW9CdWZmZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90
IG51bWJlck9mRnJhbWVzLCBmbG9hdCBzYW1wbGVSYXRlKTsKLSAgICBBdWRpb0J1ZmZlcihBdWRp
b0J1cyogYnVzKTsKLQotICAgIGRvdWJsZSBtX2dhaW47IC8vIHNjYWxhciBnYWluCi0gICAgZmxv
YXQgbV9zYW1wbGVSYXRlOwotICAgIHNpemVfdCBtX2xlbmd0aDsKLQotICAgIFZlY3RvcjxSZWZQ
dHI8RmxvYXQzMkFycmF5PiA+IG1fY2hhbm5lbHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBBdWRpb0J1ZmZlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9BdWRpb0J1ZmZlci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9CdWZmZXIuaWRsCShyZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb0J1ZmZlci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDMgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
Ci0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LW1vZHVsZSBhdWRpbyB7Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9V0VC
X0FVRElPCi0gICAgXSBBdWRpb0J1ZmZlciB7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBs
b25nIGxlbmd0aDsgLy8gaW4gc2FtcGxlLWZyYW1lcwotICAgICAgICByZWFkb25seSBhdHRyaWJ1
dGUgZmxvYXQgZHVyYXRpb247IC8vIGluIHNlY29uZHMKLSAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIGZsb2F0IHNhbXBsZVJhdGU7IC8vIGluIHNhbXBsZS1mcmFtZXMgcGVyIHNlY29uZAotCi0g
ICAgICAgIGF0dHJpYnV0ZSBmbG9hdCBnYWluOyAvLyBsaW5lYXIgZ2FpbiAoZGVmYXVsdCAxLjAp
Ci0KLSAgICAgICAgLy8gQ2hhbm5lbCBhY2Nlc3MKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZDaGFubmVsczsKLSAgICAgICAgRmxvYXQzMkFycmF5IGdl
dENoYW5uZWxEYXRhKGluIHVuc2lnbmVkIGxvbmcgY2hhbm5lbEluZGV4KTsKLSAgICB9OwotfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJDYWxsYmFjay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyQ2FsbGJhY2suaAko
cmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZmZXJD
YWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIEF1ZGlvQnVmZmVyQ2FsbGJhY2tfaAotI2RlZmluZSBBdWRpb0J1ZmZlckNhbGxiYWNr
X2gKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvQnVmZmVyOwotCi1jbGFzcyBB
dWRpb0J1ZmZlckNhbGxiYWNrIDogcHVibGljIFJlZkNvdW50ZWQ8QXVkaW9CdWZmZXJDYWxsYmFj
az4gewotcHVibGljOgotICAgIHZpcnR1YWwgfkF1ZGlvQnVmZmVyQ2FsbGJhY2soKSB7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoQXVkaW9CdWZmZXIqKSA9IDA7Ci19OwotCi19IC8v
IG5hbWVzcGFjZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKLQotI2VuZGlmIC8vIEF1
ZGlvQnVmZmVyQ2FsbGJhY2tfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9C
dWZmZXJDYWxsYmFjay5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9CdWZmZXJDYWxsYmFjay5pZGwJKHJldmlzaW9uIDExMTQzMykKKysrIFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyQ2FsbGJhY2suaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgYXVkaW8gewotICAgIGludGVyZmFjZSBb
Ci0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKLSAgICAgICAgSlNHZW5lcmF0ZVRvSlNP
YmplY3QsCi0gICAgICAgIENhbGxiYWNrCi0gICAgXSBBdWRpb0J1ZmZlckNhbGxiYWNrIHsKLSAg
ICAgICAgYm9vbGVhbiBoYW5kbGVFdmVudChpbiBBdWRpb0J1ZmZlciBhdWRpb0J1ZmZlcik7Ci0g
ICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNl
Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9CdWZm
ZXJTb3VyY2VOb2RlLmNwcAkocmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1MDcg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShX
RUJfQVVESU8pCi0KLSNpbmNsdWRlICJBdWRpb0J1ZmZlclNvdXJjZU5vZGUuaCIKLQotI2luY2x1
ZGUgIkF1ZGlvQ29udGV4dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgotI2luY2x1
ZGUgIkF1ZGlvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJG
bG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKLSNpbmNsdWRl
IDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNvbnN0IGRvdWJsZSBEZWZhdWx0R3JhaW5EdXJhdGlvbiA9IDAuMDIwOyAvLyAyMG1z
Ci1jb25zdCBkb3VibGUgVW5rbm93blRpbWUgPSAtMTsKLQotLy8gQXJiaXRyYXJ5IHVwcGVyIGxp
bWl0IG9uIHBsYXliYWNrIHJhdGUuCi0vLyBIaWdoZXIgdGhhbiBleHBlY3RlZCByYXRlcyBjYW4g
YmUgdXNlZnVsIHdoZW4gcGxheWluZyBiYWNrIG92ZXJzYW1wbGVkIGJ1ZmZlcnMKLS8vIHRvIG1p
bmltaXplIGxpbmVhciBpbnRlcnBvbGF0aW9uIGFsaWFzaW5nLgotY29uc3QgZG91YmxlIE1heFJh
dGUgPSAxMDI0OwotCi1QYXNzUmVmUHRyPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4gQXVkaW9CdWZm
ZXJTb3VyY2VOb2RlOjpjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVS
YXRlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVkaW9CdWZmZXJTb3VyY2VOb2RlKGNv
bnRleHQsIHNhbXBsZVJhdGUpKTsKLX0KLQotQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpBdWRpb0J1
ZmZlclNvdXJjZU5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQot
ICAgIDogQXVkaW9Tb3VyY2VOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCi0gICAgLCBtX2J1ZmZl
cigwKQotICAgICwgbV9pc0xvb3BpbmcoZmFsc2UpCi0gICAgLCBtX3N0YXJ0VGltZSgwLjApCi0g
ICAgLCBtX2VuZFRpbWUoVW5rbm93blRpbWUpCi0gICAgLCBtX3ZpcnR1YWxSZWFkSW5kZXgoMCkK
LSAgICAsIG1faXNHcmFpbihmYWxzZSkKLSAgICAsIG1fZ3JhaW5PZmZzZXQoMC4wKQotICAgICwg
bV9ncmFpbkR1cmF0aW9uKERlZmF1bHRHcmFpbkR1cmF0aW9uKQotICAgICwgbV9sYXN0R2Fpbigx
LjApCi0gICAgLCBtX3Bhbm5lck5vZGUoMCkKLSAgICAsIG1fcGxheWJhY2tTdGF0ZShVTlNDSEVE
VUxFRF9TVEFURSkKLXsKLSAgICBzZXROb2RlVHlwZShOb2RlVHlwZUF1ZGlvQnVmZmVyU291cmNl
KTsKLQotICAgIG1fZ2FpbiA9IEF1ZGlvR2Fpbjo6Y3JlYXRlKCJnYWluIiwgMS4wLCAwLjAsIDEu
MCk7Ci0gICAgbV9wbGF5YmFja1JhdGUgPSBBdWRpb1BhcmFtOjpjcmVhdGUoInBsYXliYWNrUmF0
ZSIsIDEuMCwgMC4wLCBNYXhSYXRlKTsKLSAgICAKLSAgICBtX2dhaW4tPnNldENvbnRleHQoY29u
dGV4dCk7Ci0gICAgbV9wbGF5YmFja1JhdGUtPnNldENvbnRleHQoY29udGV4dCk7Ci0KLSAgICAv
LyBEZWZhdWx0IHRvIG1vbm8uICBBIGNhbGwgdG8gc2V0QnVmZmVyKCkgd2lsbCBzZXQgdGhlIG51
bWJlciBvZiBvdXRwdXQgY2hhbm5lbHMgdG8gdGhhdCBvZiB0aGUgYnVmZmVyLgotICAgIGFkZE91
dHB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMsIDEpKSk7Ci0KLSAgICBpbml0
aWFsaXplKCk7Ci19Ci0KLUF1ZGlvQnVmZmVyU291cmNlTm9kZTo6fkF1ZGlvQnVmZmVyU291cmNl
Tm9kZSgpCi17Ci0gICAgdW5pbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgQXVkaW9CdWZmZXJTb3Vy
Y2VOb2RlOjpwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgQXVkaW9CdXMq
IG91dHB1dEJ1cyA9IG91dHB1dCgwKS0+YnVzKCk7Ci0KLSAgICBpZiAoIWlzSW5pdGlhbGl6ZWQo
KSkgewotICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIFRoZSBhdWRpbyB0aHJlYWQgY2FuJ3QgYmxvY2sgb24gdGhpcyBsb2NrLCBzbyB3
ZSBjYWxsIHRyeUxvY2soKSBpbnN0ZWFkLgotICAgIC8vIENhcmVmdWwgLSB0aGlzIGlzIGEgdHJ5
TG9jaygpIGFuZCBub3QgYW4gYXV0b2xvY2tlciwgc28gd2UgbXVzdCB1bmxvY2soKSBiZWZvcmUg
ZXZlcnkgcmV0dXJuLgotICAgIGlmIChtX3Byb2Nlc3NMb2NrLnRyeUxvY2soKSkgewotICAgICAg
ICAvLyBDaGVjayBpZiBpdCdzIHRpbWUgdG8gc3RhcnQgcGxheWluZy4KLSAgICAgICAgZG91Ymxl
IHNhbXBsZVJhdGUgPSB0aGlzLT5zYW1wbGVSYXRlKCk7Ci0gICAgICAgIHNpemVfdCBxdWFudHVt
U3RhcnRGcmFtZSA9IGNvbnRleHQoKS0+Y3VycmVudFNhbXBsZUZyYW1lKCk7Ci0gICAgICAgIHNp
emVfdCBxdWFudHVtRW5kRnJhbWUgPSBxdWFudHVtU3RhcnRGcmFtZSArIGZyYW1lc1RvUHJvY2Vz
czsKLSAgICAgICAgc2l6ZV90IHN0YXJ0RnJhbWUgPSBBdWRpb1V0aWxpdGllczo6dGltZVRvU2Ft
cGxlRnJhbWUobV9zdGFydFRpbWUsIHNhbXBsZVJhdGUpOwotICAgICAgICBzaXplX3QgZW5kRnJh
bWUgPSBtX2VuZFRpbWUgPT0gVW5rbm93blRpbWUgPyAwIDogQXVkaW9VdGlsaXRpZXM6OnRpbWVU
b1NhbXBsZUZyYW1lKG1fZW5kVGltZSwgc2FtcGxlUmF0ZSk7Ci0KLSAgICAgICAgLy8gSWYgd2Ug
a25vdyB0aGUgZW5kIHRpbWUgYW5kIGl0J3MgYWxyZWFkeSBwYXNzZWQsIHRoZW4gZG9uJ3QgYm90
aGVyIGRvaW5nIGFueSBtb3JlIHJlbmRlcmluZyB0aGlzIGN5Y2xlLgotICAgICAgICBpZiAobV9l
bmRUaW1lICE9IFVua25vd25UaW1lICYmIGVuZEZyYW1lIDw9IHF1YW50dW1TdGFydEZyYW1lKSB7
Ci0gICAgICAgICAgICBtX3ZpcnR1YWxSZWFkSW5kZXggPSAwOwotICAgICAgICAgICAgZmluaXNo
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChtX3BsYXliYWNrU3RhdGUgPT0g
VU5TQ0hFRFVMRURfU1RBVEUgfHwgbV9wbGF5YmFja1N0YXRlID09IEZJTklTSEVEX1NUQVRFCi0g
ICAgICAgICAgICB8fCAhYnVmZmVyKCkgfHwgc3RhcnRGcmFtZSA+PSBxdWFudHVtRW5kRnJhbWUp
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBjYW4gb3B0aW1pemUgaGVyZSBieSBwcm9wYWdhdGlu
ZyBzaWxlbnQgaGludCBpbnN0ZWFkIG9mIGZvcmNpbmcgdGhlIHdob2xlIGNoYWluIHRvIHByb2Nl
c3Mgc2lsZW5jZS4KLSAgICAgICAgICAgIG91dHB1dEJ1cy0+emVybygpOwotICAgICAgICAgICAg
bV9wcm9jZXNzTG9jay51bmxvY2soKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChtX3BsYXliYWNrU3RhdGUgPT0gU0NIRURVTEVEX1NUQVRFKSB7Ci0gICAg
ICAgICAgICAvLyBJbmNyZW1lbnQgdGhlIGFjdGl2ZSBzb3VyY2UgY291bnQgb25seSBpZiB3ZSdy
ZSB0cmFuc2l0aW9uaW5nIGZyb20gU0NIRURVTEVEX1NUQVRFIHRvIFBMQVlJTkdfU1RBVEUuCi0g
ICAgICAgICAgICBtX3BsYXliYWNrU3RhdGUgPSBQTEFZSU5HX1NUQVRFOwotICAgICAgICAgICAg
Y29udGV4dCgpLT5pbmNyZW1lbnRBY3RpdmVTb3VyY2VDb3VudCgpOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBzaXplX3QgcXVhbnR1bUZyYW1lT2Zmc2V0ID0gc3RhcnRGcmFtZSA+IHF1
YW50dW1TdGFydEZyYW1lID8gc3RhcnRGcmFtZSAtIHF1YW50dW1TdGFydEZyYW1lIDogMDsKLSAg
ICAgICAgcXVhbnR1bUZyYW1lT2Zmc2V0ID0gbWluKHF1YW50dW1GcmFtZU9mZnNldCwgZnJhbWVz
VG9Qcm9jZXNzKTsgLy8gY2xhbXAgdG8gdmFsaWQgcmFuZ2UKLSAgICAgICAgc2l6ZV90IGJ1ZmZl
ckZyYW1lc1RvUHJvY2VzcyA9IGZyYW1lc1RvUHJvY2VzcyAtIHF1YW50dW1GcmFtZU9mZnNldDsK
LQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3V0cHV0QnVzLT5udW1iZXJPZkNo
YW5uZWxzKCk7ICsraSkgCi0gICAgICAgICAgICBtX2Rlc3RpbmF0aW9uQ2hhbm5lbHNbaV0gPSBv
dXRwdXRCdXMtPmNoYW5uZWwoaSktPm11dGFibGVEYXRhKCk7Ci0KLSAgICAgICAgLy8gUmVuZGVy
IGJ5IHJlYWRpbmcgZGlyZWN0bHkgZnJvbSB0aGUgYnVmZmVyLgotICAgICAgICByZW5kZXJGcm9t
QnVmZmVyKG91dHB1dEJ1cywgcXVhbnR1bUZyYW1lT2Zmc2V0LCBidWZmZXJGcmFtZXNUb1Byb2Nl
c3MpOwotCi0gICAgICAgIC8vIEFwcGx5IHRoZSBnYWluIChpbi1wbGFjZSkgdG8gdGhlIG91dHB1
dCBidXMuCi0gICAgICAgIGZsb2F0IHRvdGFsR2FpbiA9IGdhaW4oKS0+dmFsdWUoKSAqIG1fYnVm
ZmVyLT5nYWluKCk7Ci0gICAgICAgIG91dHB1dEJ1cy0+Y29weVdpdGhHYWluRnJvbSgqb3V0cHV0
QnVzLCAmbV9sYXN0R2FpbiwgdG90YWxHYWluKTsKLQotICAgICAgICAvLyBJZiB0aGUgZW5kIHRp
bWUgaXMgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2YgdGhpcyB0aW1lIHF1YW50dW0sIHRoZW4g
c2ltcGx5IHplcm8gb3V0IHRoZQotICAgICAgICAvLyBmcmFtZXMgc3RhcnRpbmcgYXQgdGhlIGVu
ZCB0aW1lLgotICAgICAgICBpZiAobV9lbmRUaW1lICE9IFVua25vd25UaW1lICYmIGVuZEZyYW1l
ID49IHF1YW50dW1TdGFydEZyYW1lICYmIGVuZEZyYW1lIDwgcXVhbnR1bUVuZEZyYW1lKSB7Ci0g
ICAgICAgICAgICBzaXplX3QgemVyb1N0YXJ0RnJhbWUgPSBlbmRGcmFtZSAtIHF1YW50dW1TdGFy
dEZyYW1lOwotICAgICAgICAgICAgc2l6ZV90IGZyYW1lc1RvWmVybyA9IGZyYW1lc1RvUHJvY2Vz
cyAtIHplcm9TdGFydEZyYW1lOwotCi0gICAgICAgICAgICBib29sIGlzU2FmZSA9IHplcm9TdGFy
dEZyYW1lIDwgZnJhbWVzVG9Qcm9jZXNzICYmIGZyYW1lc1RvWmVybyA8PSBmcmFtZXNUb1Byb2Nl
c3MgJiYgemVyb1N0YXJ0RnJhbWUgKyBmcmFtZXNUb1plcm8gPD0gZnJhbWVzVG9Qcm9jZXNzOwot
ICAgICAgICAgICAgQVNTRVJUKGlzU2FmZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChpc1NhZmUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3V0
cHV0QnVzLT5udW1iZXJPZkNoYW5uZWxzKCk7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgbWVt
c2V0KG1fZGVzdGluYXRpb25DaGFubmVsc1tpXSArIHplcm9TdGFydEZyYW1lLCAwLCBzaXplb2Yo
ZmxvYXQpICogZnJhbWVzVG9aZXJvKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbV92
aXJ0dWFsUmVhZEluZGV4ID0gMDsKLQotICAgICAgICAgICAgZmluaXNoKCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBtX3Byb2Nlc3NMb2NrLnVubG9jaygpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IC8vIFRvbyBiYWQgLSB0aGUgdHJ5TG9jaygpIGZhaWxlZC4gIFdlIG11c3QgYmUgaW4gdGhlIG1p
ZGRsZSBvZiBjaGFuZ2luZyBidWZmZXJzIGFuZCB3ZXJlIGFscmVhZHkgb3V0cHV0dGluZyBzaWxl
bmNlIGFueXdheS4KLSAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7Ci0gICAgfQotfQotCi0vLyBS
ZXR1cm5zIHRydWUgaWYgd2UncmUgZmluaXNoZWQuCi1ib29sIEF1ZGlvQnVmZmVyU291cmNlTm9k
ZTo6cmVuZGVyU2lsZW5jZUFuZEZpbmlzaElmTm90TG9vcGluZyhBdWRpb0J1cyosIHVuc2lnbmVk
IGluZGV4LCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIGlmICghbG9vcCgpKSB7Ci0g
ICAgICAgIC8vIElmIHdlJ3JlIG5vdCBsb29waW5nLCB0aGVuIHN0b3AgcGxheWluZyB3aGVuIHdl
IGdldCB0byB0aGUgZW5kLgotCi0gICAgICAgIGlmIChmcmFtZXNUb1Byb2Nlc3MgPiAwKSB7Ci0g
ICAgICAgICAgICAvLyBXZSdyZSBub3QgbG9vcGluZyBhbmQgd2UndmUgcmVhY2hlZCB0aGUgZW5k
IG9mIHRoZSBzYW1wbGUgZGF0YSwgYnV0IHdlIHN0aWxsIG5lZWQgdG8gcHJvdmlkZSBtb3JlIG91
dHB1dCwKLSAgICAgICAgICAgIC8vIHNvIGdlbmVyYXRlIHNpbGVuY2UgZm9yIHRoZSByZW1haW5p
bmcuCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVs
cygpOyArK2kpIAotICAgICAgICAgICAgICAgIG1lbXNldChtX2Rlc3RpbmF0aW9uQ2hhbm5lbHNb
aV0gKyBpbmRleCwgMCwgc2l6ZW9mKGZsb2F0KSAqIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgICAg
IH0KLQotICAgICAgICBmaW5pc2goKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnJlbmRlckZy
b21CdWZmZXIoQXVkaW9CdXMqIGJ1cywgdW5zaWduZWQgZGVzdGluYXRpb25GcmFtZU9mZnNldCwg
c2l6ZV90IG51bWJlck9mRnJhbWVzKQotewotICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9U
aHJlYWQoKSk7Ci0gICAgCi0gICAgLy8gQmFzaWMgc2FuaXR5IGNoZWNraW5nCi0gICAgQVNTRVJU
KGJ1cyk7Ci0gICAgQVNTRVJUKGJ1ZmZlcigpKTsKLSAgICBpZiAoIWJ1cyB8fCAhYnVmZmVyKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMgPSB0aGlz
LT5udW1iZXJPZkNoYW5uZWxzKCk7Ci0gICAgdW5zaWduZWQgYnVzTnVtYmVyT2ZDaGFubmVscyA9
IGJ1cy0+bnVtYmVyT2ZDaGFubmVscygpOwotCi0gICAgYm9vbCBjaGFubmVsQ291bnRHb29kID0g
bnVtYmVyT2ZDaGFubmVscyAmJiBudW1iZXJPZkNoYW5uZWxzID09IGJ1c051bWJlck9mQ2hhbm5l
bHM7Ci0gICAgQVNTRVJUKGNoYW5uZWxDb3VudEdvb2QpOwotICAgIGlmICghY2hhbm5lbENvdW50
R29vZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU2FuaXR5IGNoZWNrIGRlc3RpbmF0aW9u
RnJhbWVPZmZzZXQsIG51bWJlck9mRnJhbWVzLgotICAgIHNpemVfdCBkZXN0aW5hdGlvbkxlbmd0
aCA9IGJ1cy0+bGVuZ3RoKCk7Ci0KLSAgICBib29sIGlzTGVuZ3RoR29vZCA9IGRlc3RpbmF0aW9u
TGVuZ3RoIDw9IDQwOTYgJiYgbnVtYmVyT2ZGcmFtZXMgPD0gNDA5NjsKLSAgICBBU1NFUlQoaXNM
ZW5ndGhHb29kKTsKLSAgICBpZiAoIWlzTGVuZ3RoR29vZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYm9vbCBpc09mZnNldEdvb2QgPSBkZXN0aW5hdGlvbkZyYW1lT2Zmc2V0IDw9IGRlc3RpbmF0
aW9uTGVuZ3RoICYmIGRlc3RpbmF0aW9uRnJhbWVPZmZzZXQgKyBudW1iZXJPZkZyYW1lcyA8PSBk
ZXN0aW5hdGlvbkxlbmd0aDsKLSAgICBBU1NFUlQoaXNPZmZzZXRHb29kKTsKLSAgICBpZiAoIWlz
T2Zmc2V0R29vZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUG90ZW50aWFsbHkgemVybyBv
dXQgaW5pdGlhbCBmcmFtZXMgbGVhZGluZyB1cCB0byB0aGUgb2Zmc2V0LgotICAgIGlmIChkZXN0
aW5hdGlvbkZyYW1lT2Zmc2V0KSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZkNoYW5uZWxzOyArK2kpIAotICAgICAgICAgICAgbWVtc2V0KG1fZGVzdGluYXRpb25D
aGFubmVsc1tpXSwgMCwgc2l6ZW9mKGZsb2F0KSAqIGRlc3RpbmF0aW9uRnJhbWVPZmZzZXQpOwot
ICAgIH0KLQotICAgIC8vIE9mZnNldCB0aGUgcG9pbnRlcnMgdG8gdGhlIGNvcnJlY3Qgb2Zmc2V0
IGZyYW1lLgotICAgIHVuc2lnbmVkIHdyaXRlSW5kZXggPSBkZXN0aW5hdGlvbkZyYW1lT2Zmc2V0
OwotCi0gICAgc2l6ZV90IGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlcigpLT5sZW5ndGgoKTsKLSAgICBk
b3VibGUgYnVmZmVyU2FtcGxlUmF0ZSA9IGJ1ZmZlcigpLT5zYW1wbGVSYXRlKCk7Ci0KLSAgICAv
LyBDYWxjdWxhdGUgdGhlIHN0YXJ0IGFuZCBlbmQgZnJhbWVzIGluIG91ciBidWZmZXIgdGhhdCB3
ZSB3YW50IHRvIHBsYXkuCi0gICAgLy8gSWYgbV9pc0dyYWluIGlzIHRydWUsIHRoZW4gd2Ugd2ls
bCBiZSBwbGF5aW5nIGEgcG9ydGlvbiBvZiB0aGUgdG90YWwgYnVmZmVyLgotICAgIHVuc2lnbmVk
IHN0YXJ0RnJhbWUgPSBtX2lzR3JhaW4gPyBBdWRpb1V0aWxpdGllczo6dGltZVRvU2FtcGxlRnJh
bWUobV9ncmFpbk9mZnNldCwgYnVmZmVyU2FtcGxlUmF0ZSkgOiAwOwotCi0gICAgLy8gQXZvaWQg
Y29udmVydGluZyBmcm9tIHRpbWUgdG8gc2FtcGxlLWZyYW1lcyB0d2ljZSBieSBjb21wdXRpbmcK
LSAgICAvLyB0aGUgZ3JhaW4gZW5kIHRpbWUgZmlyc3QgYmVmb3JlIGNvbXB1dGluZyB0aGUgc2Ft
cGxlIGZyYW1lLgotICAgIHVuc2lnbmVkIGVuZEZyYW1lID0gbV9pc0dyYWluID8gQXVkaW9VdGls
aXRpZXM6OnRpbWVUb1NhbXBsZUZyYW1lKG1fZ3JhaW5PZmZzZXQgKyBtX2dyYWluRHVyYXRpb24s
IGJ1ZmZlclNhbXBsZVJhdGUpIDogYnVmZmVyTGVuZ3RoOwotICAgIAotICAgIEFTU0VSVChlbmRG
cmFtZSA+PSBzdGFydEZyYW1lKTsKLSAgICBpZiAoZW5kRnJhbWUgPCBzdGFydEZyYW1lKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgdW5zaWduZWQgZGVsdGFGcmFtZXMgPSBlbmRGcmFtZSAt
IHN0YXJ0RnJhbWU7Ci0gICAgCi0gICAgLy8gVGhpcyBpcyBhIEhBQ0sgdG8gYWxsb3cgZm9yIEhS
VEYgdGFpbC10aW1lIC0gYXZvaWRzIGdsaXRjaCBhdCBlbmQuCi0gICAgLy8gRklYTUU6IGltcGxl
bWVudCB0YWlsVGltZSBmb3IgZWFjaCBBdWRpb05vZGUgZm9yIGEgbW9yZSBnZW5lcmFsIHNvbHV0
aW9uIHRvIHRoaXMgcHJvYmxlbS4KLSAgICBpZiAobV9pc0dyYWluKQotICAgICAgICBlbmRGcmFt
ZSArPSA1MTI7Ci0KLSAgICAvLyBEbyBzb21lIHNhbml0eSBjaGVja2luZy4KLSAgICBpZiAoc3Rh
cnRGcmFtZSA+PSBidWZmZXJMZW5ndGgpCi0gICAgICAgIHN0YXJ0RnJhbWUgPSAhYnVmZmVyTGVu
Z3RoID8gMCA6IGJ1ZmZlckxlbmd0aCAtIDE7Ci0gICAgaWYgKGVuZEZyYW1lID4gYnVmZmVyTGVu
Z3RoKQotICAgICAgICBlbmRGcmFtZSA9IGJ1ZmZlckxlbmd0aDsKLSAgICBpZiAobV92aXJ0dWFs
UmVhZEluZGV4ID49IGVuZEZyYW1lKQotICAgICAgICBtX3ZpcnR1YWxSZWFkSW5kZXggPSBzdGFy
dEZyYW1lOyAvLyByZXNldCB0byBzdGFydAotCi0gICAgZG91YmxlIHBpdGNoUmF0ZSA9IHRvdGFs
UGl0Y2hSYXRlKCk7Ci0KLSAgICAvLyBHZXQgbG9jYWwgY29weS4KLSAgICBkb3VibGUgdmlydHVh
bFJlYWRJbmRleCA9IG1fdmlydHVhbFJlYWRJbmRleDsKLQotICAgIC8vIFJlbmRlciBsb29wIC0g
cmVhZGluZyBmcm9tIHRoZSBzb3VyY2UgYnVmZmVyIHRvIHRoZSBkZXN0aW5hdGlvbiB1c2luZyBs
aW5lYXIgaW50ZXJwb2xhdGlvbi4KLSAgICBpbnQgZnJhbWVzVG9Qcm9jZXNzID0gbnVtYmVyT2ZG
cmFtZXM7Ci0KLSAgICBjb25zdCBmbG9hdCoqIHNvdXJjZUNoYW5uZWxzID0gbV9zb3VyY2VDaGFu
bmVscy5nZXQoKTsKLSAgICBmbG9hdCoqIGRlc3RpbmF0aW9uQ2hhbm5lbHMgPSBtX2Rlc3RpbmF0
aW9uQ2hhbm5lbHMuZ2V0KCk7Ci0KLSAgICAvLyBPcHRpbWl6ZSBmb3IgdGhlIHZlcnkgY29tbW9u
IGNhc2Ugb2YgcGxheWluZyBiYWNrIHdpdGggcGl0Y2hSYXRlID09IDEuCi0gICAgLy8gV2UgY2Fu
IGF2b2lkIHRoZSBsaW5lYXIgaW50ZXJwb2xhdGlvbi4KLSAgICBpZiAocGl0Y2hSYXRlID09IDEg
JiYgdmlydHVhbFJlYWRJbmRleCA9PSBmbG9vcih2aXJ0dWFsUmVhZEluZGV4KSkgewotICAgICAg
ICB1bnNpZ25lZCByZWFkSW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmlydHVhbFJlYWRJ
bmRleCk7Ci0gICAgICAgIHdoaWxlIChmcmFtZXNUb1Byb2Nlc3MgPiAwKSB7Ci0gICAgICAgICAg
ICBpbnQgZnJhbWVzVG9FbmQgPSBlbmRGcmFtZSAtIHJlYWRJbmRleDsKLSAgICAgICAgICAgIGlu
dCBmcmFtZXNUaGlzVGltZSA9IG1pbihmcmFtZXNUb1Byb2Nlc3MsIGZyYW1lc1RvRW5kKTsKLSAg
ICAgICAgICAgIGZyYW1lc1RoaXNUaW1lID0gbWF4KDAsIGZyYW1lc1RoaXNUaW1lKTsKLQotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkg
Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uQ2hhbm5lbHNbaV0gKyB3cml0ZUlu
ZGV4LCBzb3VyY2VDaGFubmVsc1tpXSArIHJlYWRJbmRleCwgc2l6ZW9mKGZsb2F0KSAqIGZyYW1l
c1RoaXNUaW1lKTsKLQotICAgICAgICAgICAgd3JpdGVJbmRleCArPSBmcmFtZXNUaGlzVGltZTsK
LSAgICAgICAgICAgIHJlYWRJbmRleCArPSBmcmFtZXNUaGlzVGltZTsKLSAgICAgICAgICAgIGZy
YW1lc1RvUHJvY2VzcyAtPSBmcmFtZXNUaGlzVGltZTsKLQotICAgICAgICAgICAgLy8gV3JhcC1h
cm91bmQuCi0gICAgICAgICAgICBpZiAocmVhZEluZGV4ID49IGVuZEZyYW1lKSB7Ci0gICAgICAg
ICAgICAgICAgcmVhZEluZGV4IC09IGRlbHRhRnJhbWVzOwotICAgICAgICAgICAgICAgIGlmIChy
ZW5kZXJTaWxlbmNlQW5kRmluaXNoSWZOb3RMb29waW5nKGJ1cywgd3JpdGVJbmRleCwgZnJhbWVz
VG9Qcm9jZXNzKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgdmlydHVhbFJlYWRJbmRleCA9IHJlYWRJbmRleDsKLSAgICB9IGVs
c2UgewotICAgICAgICB3aGlsZSAoZnJhbWVzVG9Qcm9jZXNzLS0pIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIHJlYWRJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2aXJ0dWFsUmVhZEluZGV4
KTsKLSAgICAgICAgICAgIGRvdWJsZSBpbnRlcnBvbGF0aW9uRmFjdG9yID0gdmlydHVhbFJlYWRJ
bmRleCAtIHJlYWRJbmRleDsKLQotICAgICAgICAgICAgLy8gRm9yIGxpbmVhciBpbnRlcnBvbGF0
aW9uIHdlIG5lZWQgdGhlIG5leHQgc2FtcGxlLWZyYW1lIHRvby4KLSAgICAgICAgICAgIHVuc2ln
bmVkIHJlYWRJbmRleDIgPSByZWFkSW5kZXggKyAxOwotICAgICAgICAgICAgaWYgKHJlYWRJbmRl
eDIgPj0gZW5kRnJhbWUpIHsKLSAgICAgICAgICAgICAgICBpZiAobG9vcCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0byB3cmFwIGFyb3VuZCBhdCB0aGUgZW5kIG9mIHRo
ZSBidWZmZXIuCi0gICAgICAgICAgICAgICAgICAgIHJlYWRJbmRleDIgLT0gZGVsdGFGcmFtZXM7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlYWRJbmRleDIg
PSByZWFkSW5kZXg7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEZpbmFsIHNhbml0
eSBjaGVjayBvbiBidWZmZXIgYWNjZXNzLgotICAgICAgICAgICAgLy8gRklYTUU6IGFzIGFuIG9w
dGltaXphdGlvbiwgdHJ5IHRvIGdldCByaWQgb2YgdGhpcyBpbm5lci1sb29wIGNoZWNrIGFuZCBw
dXQgYXNzZXJ0aW9ucyBhbmQgZ3VhcmRzIGJlZm9yZSB0aGUgbG9vcC4KLSAgICAgICAgICAgIGlm
IChyZWFkSW5kZXggPj0gYnVmZmVyTGVuZ3RoIHx8IHJlYWRJbmRleDIgPj0gYnVmZmVyTGVuZ3Ro
KQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAvLyBMaW5lYXIgaW50ZXJw
b2xhdGlvbi4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNo
YW5uZWxzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBmbG9hdCogZGVzdGluYXRpb24gPSBkZXN0
aW5hdGlvbkNoYW5uZWxzW2ldOwotICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBzb3VyY2Ug
PSBzb3VyY2VDaGFubmVsc1tpXTsKLQotICAgICAgICAgICAgICAgIGRvdWJsZSBzYW1wbGUxID0g
c291cmNlW3JlYWRJbmRleF07Ci0gICAgICAgICAgICAgICAgZG91YmxlIHNhbXBsZTIgPSBzb3Vy
Y2VbcmVhZEluZGV4Ml07Ci0gICAgICAgICAgICAgICAgZG91YmxlIHNhbXBsZSA9ICgxLjAgLSBp
bnRlcnBvbGF0aW9uRmFjdG9yKSAqIHNhbXBsZTEgKyBpbnRlcnBvbGF0aW9uRmFjdG9yICogc2Ft
cGxlMjsKLQotICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uW3dyaXRlSW5kZXhdID0gbmFycm93
UHJlY2lzaW9uVG9GbG9hdChzYW1wbGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgd3Jp
dGVJbmRleCsrOwotCi0gICAgICAgICAgICB2aXJ0dWFsUmVhZEluZGV4ICs9IHBpdGNoUmF0ZTsK
LQotICAgICAgICAgICAgLy8gV3JhcC1hcm91bmQsIHJldGFpbmluZyBzdWItc2FtcGxlIHBvc2l0
aW9uIHNpbmNlIHZpcnR1YWxSZWFkSW5kZXggaXMgZmxvYXRpbmctcG9pbnQuCi0gICAgICAgICAg
ICBpZiAodmlydHVhbFJlYWRJbmRleCA+PSBlbmRGcmFtZSkgewotICAgICAgICAgICAgICAgIHZp
cnR1YWxSZWFkSW5kZXggLT0gZGVsdGFGcmFtZXM7Ci0KLSAgICAgICAgICAgICAgICBpZiAocmVu
ZGVyU2lsZW5jZUFuZEZpbmlzaElmTm90TG9vcGluZyhidXMsIHdyaXRlSW5kZXgsIGZyYW1lc1Rv
UHJvY2VzcykpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfSAKLSAgICBtX3ZpcnR1YWxSZWFkSW5kZXggPSB2aXJ0dWFsUmVhZEluZGV4
OwotfQotCi0KLXZvaWQgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpyZXNldCgpCi17Ci0gICAgbV92
aXJ0dWFsUmVhZEluZGV4ID0gMDsKLSAgICBtX2xhc3RHYWluID0gZ2FpbigpLT52YWx1ZSgpOwot
fQotCi12b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6ZmluaXNoKCkKLXsKLSAgICBpZiAobV9w
bGF5YmFja1N0YXRlICE9IEZJTklTSEVEX1NUQVRFKSB7Ci0gICAgICAgIC8vIExldCB0aGUgY29u
dGV4dCBkZXJlZmVyZW5jZSB0aGlzIEF1ZGlvTm9kZS4KLSAgICAgICAgY29udGV4dCgpLT5ub3Rp
ZnlOb2RlRmluaXNoZWRQcm9jZXNzaW5nKHRoaXMpOwotICAgICAgICBtX3BsYXliYWNrU3RhdGUg
PSBGSU5JU0hFRF9TVEFURTsKLSAgICAgICAgY29udGV4dCgpLT5kZWNyZW1lbnRBY3RpdmVTb3Vy
Y2VDb3VudCgpOwotICAgIH0KLX0KLQotYm9vbCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnNldEJ1
ZmZlcihBdWRpb0J1ZmZlciogYnVmZmVyKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0gICAgCi0gICAgLy8gVGhlIGNvbnRleHQgbXVzdCBiZSBsb2NrZWQgc2luY2UgY2hhbmdpbmcg
dGhlIGJ1ZmZlciBjYW4gcmUtY29uZmlndXJlIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgdGhhdCBh
cmUgb3V0cHV0LgotICAgIEF1ZGlvQ29udGV4dDo6QXV0b0xvY2tlciBjb250ZXh0TG9ja2VyKGNv
bnRleHQoKSk7Ci0gICAgCi0gICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgd2l0aCBwcm9jZXNzKCku
Ci0gICAgTXV0ZXhMb2NrZXIgcHJvY2Vzc0xvY2tlcihtX3Byb2Nlc3NMb2NrKTsKLSAgICAKLSAg
ICBpZiAoYnVmZmVyKSB7Ci0gICAgICAgIC8vIERvIGFueSBuZWNlc3NzYXJ5IHJlLWNvbmZpZ3Vy
YXRpb24gdG8gdGhlIGJ1ZmZlcidzIG51bWJlciBvZiBjaGFubmVscy4KLSAgICAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZDaGFubmVscyA9IGJ1ZmZlci0+bnVtYmVyT2ZDaGFubmVscygpOwotCi0gICAg
ICAgIGlmIChudW1iZXJPZkNoYW5uZWxzID4gQXVkaW9Db250ZXh0OjptYXhOdW1iZXJPZkNoYW5u
ZWxzKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgb3V0cHV0KDApLT5z
ZXROdW1iZXJPZkNoYW5uZWxzKG51bWJlck9mQ2hhbm5lbHMpOwotCi0gICAgICAgIG1fc291cmNl
Q2hhbm5lbHMgPSBhZG9wdEFycmF5UHRyKG5ldyBjb25zdCBmbG9hdCogW251bWJlck9mQ2hhbm5l
bHNdKTsKLSAgICAgICAgbV9kZXN0aW5hdGlvbkNoYW5uZWxzID0gYWRvcHRBcnJheVB0cihuZXcg
ZmxvYXQqIFtudW1iZXJPZkNoYW5uZWxzXSk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgCi0gICAgICAgICAgICBtX3NvdXJjZUNoYW5u
ZWxzW2ldID0gYnVmZmVyLT5nZXRDaGFubmVsRGF0YShpKS0+ZGF0YSgpOwotICAgIH0KLQotICAg
IG1fdmlydHVhbFJlYWRJbmRleCA9IDA7Ci0gICAgbV9idWZmZXIgPSBidWZmZXI7Ci0gICAgCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXVuc2lnbmVkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6bnVt
YmVyT2ZDaGFubmVscygpCi17Ci0gICAgcmV0dXJuIG91dHB1dCgwKS0+bnVtYmVyT2ZDaGFubmVs
cygpOwotfQotCi12b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6bm90ZU9uKGRvdWJsZSB3aGVu
KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1fcGxheWJhY2tTdGF0
ZSAhPSBVTlNDSEVEVUxFRF9TVEFURSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pc0dyYWlu
ID0gZmFsc2U7Ci0gICAgbV9zdGFydFRpbWUgPSB3aGVuOwotICAgIG1fdmlydHVhbFJlYWRJbmRl
eCA9IDA7Ci0gICAgbV9wbGF5YmFja1N0YXRlID0gU0NIRURVTEVEX1NUQVRFOwotfQotCi12b2lk
IEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6bm90ZUdyYWluT24oZG91YmxlIHdoZW4sIGRvdWJsZSBn
cmFpbk9mZnNldCwgZG91YmxlIGdyYWluRHVyYXRpb24pCi17Ci0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLQotICAgIGlmIChtX3BsYXliYWNrU3RhdGUgIT0gVU5TQ0hFRFVMRURfU1RBVEUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghYnVmZmVyKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICAgICAgCi0gICAgLy8gRG8gc2FuaXR5IGNoZWNraW5nIG9mIGdyYWluIHBhcmFtZXRlcnMg
dmVyc3VzIGJ1ZmZlciBzaXplLgotICAgIGRvdWJsZSBidWZmZXJEdXJhdGlvbiA9IGJ1ZmZlcigp
LT5kdXJhdGlvbigpOwotCi0gICAgaWYgKGdyYWluRHVyYXRpb24gPiBidWZmZXJEdXJhdGlvbikK
LSAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTogbWF5YmUgc2hvdWxkIHRocm93IGV4Y2VwdGlvbiAt
IGNvbnNpZGVyIGluIHNwZWNpZmljYXRpb24uCi0gICAgCi0gICAgZG91YmxlIG1heEdyYWluT2Zm
c2V0ID0gYnVmZmVyRHVyYXRpb24gLSBncmFpbkR1cmF0aW9uOwotICAgIG1heEdyYWluT2Zmc2V0
ID0gbWF4KDAuMCwgbWF4R3JhaW5PZmZzZXQpOwotCi0gICAgZ3JhaW5PZmZzZXQgPSBtYXgoMC4w
LCBncmFpbk9mZnNldCk7Ci0gICAgZ3JhaW5PZmZzZXQgPSBtaW4obWF4R3JhaW5PZmZzZXQsIGdy
YWluT2Zmc2V0KTsKLSAgICBtX2dyYWluT2Zmc2V0ID0gZ3JhaW5PZmZzZXQ7Ci0KLSAgICBtX2dy
YWluRHVyYXRpb24gPSBncmFpbkR1cmF0aW9uOwotICAgIAotICAgIG1faXNHcmFpbiA9IHRydWU7
Ci0gICAgbV9zdGFydFRpbWUgPSB3aGVuOwotCi0gICAgLy8gV2UgY2FsbCB0aW1lVG9TYW1wbGVG
cmFtZSBoZXJlIHNpbmNlIGF0IHBsYXliYWNrUmF0ZSA9PSAxIHdlIGRvbid0IHdhbnQgdG8gZ28g
dGhyb3VnaCBsaW5lYXIgaW50ZXJwb2xhdGlvbgotICAgIC8vIGF0IGEgc3ViLXNhbXBsZSBwb3Np
dGlvbiBzaW5jZSBpdCB3aWxsIGRlZ3JhZGUgdGhlIHF1YWxpdHkuCi0gICAgLy8gV2hlbiBhbGln
bmVkIHRvIHRoZSBzYW1wbGUtZnJhbWUgdGhlIHBsYXliYWNrIHdpbGwgYmUgaWRlbnRpY2FsIHRv
IHRoZSBQQ00gZGF0YSBzdG9yZWQgaW4gdGhlIGJ1ZmZlci4KLSAgICAvLyBTaW5jZSBwbGF5YmFj
a1JhdGUgPT0gMSBpcyB2ZXJ5IGNvbW1vbiwgaXQncyB3b3J0aCBjb25zaWRlcmluZyBxdWFsaXR5
LgotICAgIG1fdmlydHVhbFJlYWRJbmRleCA9IEF1ZGlvVXRpbGl0aWVzOjp0aW1lVG9TYW1wbGVG
cmFtZShtX2dyYWluT2Zmc2V0LCBidWZmZXIoKS0+c2FtcGxlUmF0ZSgpKTsKLSAgICAKLSAgICBt
X3BsYXliYWNrU3RhdGUgPSBTQ0hFRFVMRURfU1RBVEU7Ci19Ci0KLXZvaWQgQXVkaW9CdWZmZXJT
b3VyY2VOb2RlOjpub3RlT2ZmKGRvdWJsZSB3aGVuKQotewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgaWYgKCEobV9wbGF5YmFja1N0YXRlID09IFNDSEVEVUxFRF9TVEFURSB8fCBt
X3BsYXliYWNrU3RhdGUgPT0gUExBWUlOR19TVEFURSkpCi0gICAgICAgIHJldHVybjsKLSAgICAK
LSAgICB3aGVuID0gbWF4KDAuMCwgd2hlbik7Ci0gICAgbV9lbmRUaW1lID0gd2hlbjsKLX0KLQot
ZG91YmxlIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6dG90YWxQaXRjaFJhdGUoKQotewotICAgIGRv
dWJsZSBkb3BwbGVyUmF0ZSA9IDEuMDsKLSAgICBpZiAobV9wYW5uZXJOb2RlLmdldCgpKQotICAg
ICAgICBkb3BwbGVyUmF0ZSA9IG1fcGFubmVyTm9kZS0+ZG9wcGxlclJhdGUoKTsKLSAgICAKLSAg
ICAvLyBJbmNvcnBvcmF0ZSBidWZmZXIncyBzYW1wbGUtcmF0ZSB2ZXJzdXMgQXVkaW9Db250ZXh0
J3Mgc2FtcGxlLXJhdGUuCi0gICAgLy8gTm9ybWFsbHkgaXQncyBub3QgYW4gaXNzdWUgYmVjYXVz
ZSBidWZmZXJzIGFyZSBsb2FkZWQgYXQgdGhlIEF1ZGlvQ29udGV4dCdzIHNhbXBsZS1yYXRlLCBi
dXQgd2UgY2FuIGhhbmRsZSBpdCBpbiBhbnkgY2FzZS4KLSAgICBkb3VibGUgc2FtcGxlUmF0ZUZh
Y3RvciA9IDEuMDsKLSAgICBpZiAoYnVmZmVyKCkpCi0gICAgICAgIHNhbXBsZVJhdGVGYWN0b3Ig
PSBidWZmZXIoKS0+c2FtcGxlUmF0ZSgpIC8gc2FtcGxlUmF0ZSgpOwotICAgIAotICAgIGRvdWJs
ZSBiYXNlUGl0Y2hSYXRlID0gcGxheWJhY2tSYXRlKCktPnZhbHVlKCk7Ci0KLSAgICBkb3VibGUg
dG90YWxSYXRlID0gZG9wcGxlclJhdGUgKiBzYW1wbGVSYXRlRmFjdG9yICogYmFzZVBpdGNoUmF0
ZTsKLQotICAgIC8vIFNhbml0eSBjaGVjayB0aGUgdG90YWwgcmF0ZS4gIEl0J3MgdmVyeSBpbXBv
cnRhbnQgdGhhdCB0aGUgcmVzYW1wbGVyIG5vdCBnZXQgYW55IGJhZCByYXRlIHZhbHVlcy4KLSAg
ICB0b3RhbFJhdGUgPSBtYXgoMC4wLCB0b3RhbFJhdGUpOwotICAgIGlmICghdG90YWxSYXRlKQot
ICAgICAgICB0b3RhbFJhdGUgPSAxOyAvLyB6ZXJvIHJhdGUgaXMgY29uc2lkZXJlZCBpbGxlZ2Fs
Ci0gICAgdG90YWxSYXRlID0gbWluKE1heFJhdGUsIHRvdGFsUmF0ZSk7Ci0gICAgCi0gICAgYm9v
bCBpc1RvdGFsUmF0ZVZhbGlkID0gIWlzbmFuKHRvdGFsUmF0ZSkgJiYgIWlzaW5mKHRvdGFsUmF0
ZSk7Ci0gICAgQVNTRVJUKGlzVG90YWxSYXRlVmFsaWQpOwotICAgIGlmICghaXNUb3RhbFJhdGVW
YWxpZCkKLSAgICAgICAgdG90YWxSYXRlID0gMS4wOwotCi0gICAgcmV0dXJuIHRvdGFsUmF0ZTsK
LX0KLQotYm9vbCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6Omxvb3BpbmcoKQotewotICAgIHN0YXRp
YyBib29sIGZpcnN0VGltZSA9IHRydWU7Ci0gICAgaWYgKGZpcnN0VGltZSAmJiBjb250ZXh0KCkg
JiYgY29udGV4dCgpLT5kb2N1bWVudCgpKSB7Ci0gICAgICAgIGNvbnRleHQoKS0+ZG9jdW1lbnQo
KS0+YWRkQ29uc29sZU1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgV2Fy
bmluZ01lc3NhZ2VMZXZlbCwgIkF1ZGlvQnVmZmVyU291cmNlTm9kZSAnbG9vcGluZycgYXR0cmli
dXRlIGlzIGRlcHJlY2F0ZWQuICBVc2UgJ2xvb3AnIGluc3RlYWQuIik7Ci0gICAgICAgIGZpcnN0
VGltZSA9IGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBtX2lzTG9vcGluZzsKLX0KLQotdm9p
ZCBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnNldExvb3BpbmcoYm9vbCBsb29waW5nKQotewotICAg
IHN0YXRpYyBib29sIGZpcnN0VGltZSA9IHRydWU7Ci0gICAgaWYgKGZpcnN0VGltZSAmJiBjb250
ZXh0KCkgJiYgY29udGV4dCgpLT5kb2N1bWVudCgpKSB7Ci0gICAgICAgIGNvbnRleHQoKS0+ZG9j
dW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlw
ZSwgV2FybmluZ01lc3NhZ2VMZXZlbCwgIkF1ZGlvQnVmZmVyU291cmNlTm9kZSAnbG9vcGluZycg
YXR0cmlidXRlIGlzIGRlcHJlY2F0ZWQuICBVc2UgJ2xvb3AnIGluc3RlYWQuIik7Ci0gICAgICAg
IGZpcnN0VGltZSA9IGZhbHNlOwotICAgIH0KLQotICAgIG1faXNMb29waW5nID0gbG9vcGluZzsK
LX0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8p
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5v
ZGUuaAkocmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9C
dWZmZXJTb3VyY2VOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTY2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIEF1ZGlvQnVmZmVyU291cmNlTm9kZV9oCi0jZGVmaW5lIEF1ZGlvQnVm
ZmVyU291cmNlTm9kZV9oCi0KLSNpbmNsdWRlICJBdWRpb0J1ZmZlci5oIgotI2luY2x1ZGUgIkF1
ZGlvQnVzLmgiCi0jaW5jbHVkZSAiQXVkaW9HYWluLmgiCi0jaW5jbHVkZSAiQXVkaW9QYW5uZXJO
b2RlLmgiCi0jaW5jbHVkZSAiQXVkaW9Tb3VyY2VOb2RlLmgiCi0jaW5jbHVkZSA8d3RmL093bkFy
cmF5UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEF1ZGlvQ29udGV4dDsKLQotLy8gQXVkaW9CdWZmZXJTb3VyY2VOb2RlIGlzIGFu
IEF1ZGlvTm9kZSByZXByZXNlbnRpbmcgYW4gYXVkaW8gc291cmNlIGZyb20gYW4gaW4tbWVtb3J5
IGF1ZGlvIGFzc2V0IHJlcHJlc2VudGVkIGJ5IGFuIEF1ZGlvQnVmZmVyLgotLy8gSXQgZ2VuZXJh
bGx5IHdpbGwgYmUgdXNlZCBmb3Igc2hvcnQgc291bmRzIHdoaWNoIHJlcXVpcmUgYSBoaWdoIGRl
Z3JlZSBvZiBzY2hlZHVsaW5nIGZsZXhpYmlsaXR5IChjYW4gcGxheWJhY2sgaW4gcmh5dGhtaWNh
bGx5IHBlcmZlY3Qgd2F5cykuCi0KLWNsYXNzIEF1ZGlvQnVmZmVyU291cmNlTm9kZSA6IHB1Ymxp
YyBBdWRpb1NvdXJjZU5vZGUgewotcHVibGljOgotICAgIC8vIFRoZXNlIGFyZSB0aGUgcG9zc2li
bGUgc3RhdGVzIGFuIEF1ZGlvQnVmZmVyU291cmNlTm9kZSBjYW4gYmUgaW46Ci0gICAgLy8KLSAg
ICAvLyBVTlNDSEVEVUxFRF9TVEFURSAtIEluaXRpYWwgcGxheWJhY2sgc3RhdGUuIENyZWF0ZWQs
IGJ1dCBub3QgeWV0IHNjaGVkdWxlZC4KLSAgICAvLyBTQ0hFRFVMRURfU1RBVEUgLSBTY2hlZHVs
ZWQgdG8gcGxheSAodmlhIG5vdGVPbigpIG9yIG5vdGVHcmFpbk9uKCkpLCBidXQgbm90IHlldCBw
bGF5aW5nLgotICAgIC8vIFBMQVlJTkdfU1RBVEUgLSBHZW5lcmF0aW5nIHNvdW5kLgotICAgIC8v
IEZJTklTSEVEX1NUQVRFIC0gRmluaXNoZWQgZ2VuZXJhdGluZyBzb3VuZC4KLSAgICAvLwotICAg
IC8vIFRoZSBzdGF0ZSBjYW4gb25seSB0cmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLCBleGNl
cHQgZm9yIHRoZSBGSU5JU0hFRF9TVEFURSB3aGljaCBjYW4KLSAgICAvLyBuZXZlciBiZSBjaGFu
Z2VkLgotICAgIGVudW0gUGxheWJhY2tTdGF0ZSB7Ci0gICAgICAgIC8vIFRoZXNlIG11c3QgYmUg
ZGVmaW5lZCB3aXRoIHRoZSBzYW1lIG5hbWVzIGFuZCB2YWx1ZXMgYXMgaW4gdGhlIC5pZGwgZmls
ZS4KLSAgICAgICAgVU5TQ0hFRFVMRURfU1RBVEUgPSAwLAotICAgICAgICBTQ0hFRFVMRURfU1RB
VEUgPSAxLAotICAgICAgICBQTEFZSU5HX1NUQVRFID0gMiwKLSAgICAgICAgRklOSVNIRURfU1RB
VEUgPSAzCi0gICAgfTsKLSAgICAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlclNv
dXJjZU5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKLQotICAg
IHZpcnR1YWwgfkF1ZGlvQnVmZmVyU291cmNlTm9kZSgpOwotICAgIAotICAgIC8vIEF1ZGlvTm9k
ZQotICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwotICAg
IHZpcnR1YWwgdm9pZCByZXNldCgpOwotICAgIAotICAgIC8vIHNldEJ1ZmZlcigpIGlzIGNhbGxl
ZCBvbiB0aGUgbWFpbiB0aHJlYWQuICBUaGlzIGlzIHRoZSBidWZmZXIgd2UgdXNlIGZvciBwbGF5
YmFjay4KLSAgICAvLyByZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4KLSAgICBib29sIHNldEJ1ZmZl
cihBdWRpb0J1ZmZlciopOwotICAgIEF1ZGlvQnVmZmVyKiBidWZmZXIoKSB7IHJldHVybiBtX2J1
ZmZlci5nZXQoKTsgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAvLyBudW1iZXJPZkNoYW5u
ZWxzKCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIG91dHB1dCBjaGFubmVscy4gIFRoaXMgdmFsdWUg
ZXF1YWxzIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgZnJvbSB0aGUgYnVmZmVyLgotICAgIC8vIElm
IGEgbmV3IGJ1ZmZlciBpcyBzZXQgd2l0aCBhIGRpZmZlcmVudCBudW1iZXIgb2YgY2hhbm5lbHMs
IHRoZW4gdGhpcyB2YWx1ZSB3aWxsIGR5bmFtaWNhbGx5IGNoYW5nZS4KLSAgICB1bnNpZ25lZCBu
dW1iZXJPZkNoYW5uZWxzKCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgIC8vIFBsYXktc3Rh
dGUKLSAgICAvLyBub3RlT24oKSwgbm90ZUdyYWluT24oKSwgYW5kIG5vdGVPZmYoKSBtdXN0IGFs
bCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCi0gICAgdm9pZCBub3RlT24oZG91Ymxl
IHdoZW4pOwotICAgIHZvaWQgbm90ZUdyYWluT24oZG91YmxlIHdoZW4sIGRvdWJsZSBncmFpbk9m
ZnNldCwgZG91YmxlIGdyYWluRHVyYXRpb24pOwotICAgIHZvaWQgbm90ZU9mZihkb3VibGUgd2hl
bik7Ci0KLSAgICB1bnNpZ25lZCBzaG9ydCBwbGF5YmFja1N0YXRlKCkgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KG1fcGxheWJhY2tTdGF0ZSk7IH0KLQotICAgIC8vIE5vdGU6
IHRoZSBhdHRyaWJ1dGUgd2FzIG9yaWdpbmFsbHkgZXhwb3NlZCBhcyAubG9vcGluZywgYnV0IHRv
IGJlIG1vcmUgY29uc2lzdGVudCBpbiBuYW1pbmcgd2l0aCA8YXVkaW8+Ci0gICAgLy8gYW5kIHdp
dGggaG93IGl0J3MgZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpY2F0aW9uLCB0aGUgcHJvcGVyIGF0
dHJpYnV0ZSBuYW1lIGlzIC5sb29wCi0gICAgLy8gVGhlIG9sZCBhdHRyaWJ1dGUgaXMga2VwdCBm
b3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCi0gICAgYm9vbCBsb29wKCkgY29uc3QgeyByZXR1
cm4gbV9pc0xvb3Bpbmc7IH0KLSAgICB2b2lkIHNldExvb3AoYm9vbCBsb29waW5nKSB7IG1faXNM
b29waW5nID0gbG9vcGluZzsgfQotCi0gICAgLy8gRGVwcmVjYXRlZC4KLSAgICBib29sIGxvb3Bp
bmcoKTsKLSAgICB2b2lkIHNldExvb3BpbmcoYm9vbCk7Ci0gICAgCi0gICAgQXVkaW9HYWluKiBn
YWluKCkgeyByZXR1cm4gbV9nYWluLmdldCgpOyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAotICAgIEF1ZGlvUGFyYW0qIHBsYXliYWNrUmF0ZSgpIHsgcmV0dXJuIG1f
cGxheWJhY2tSYXRlLmdldCgpOyB9Ci0KLSAgICAvLyBJZiBhIHBhbm5lciBub2RlIGlzIHNldCwg
dGhlbiB3ZSBjYW4gaW5jb3Jwb3JhdGUgZG9wcGxlciBzaGlmdCBpbnRvIHRoZSBwbGF5YmFjayBw
aXRjaCByYXRlLgotICAgIHZvaWQgc2V0UGFubmVyTm9kZShQYXNzUmVmUHRyPEF1ZGlvUGFubmVy
Tm9kZT4gcGFubmVyTm9kZSkgeyBtX3Bhbm5lck5vZGUgPSBwYW5uZXJOb2RlOyB9Ci0KLXByaXZh
dGU6Ci0gICAgQXVkaW9CdWZmZXJTb3VyY2VOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBs
ZVJhdGUpOwotCi0gICAgdm9pZCByZW5kZXJGcm9tQnVmZmVyKEF1ZGlvQnVzKiwgdW5zaWduZWQg
ZGVzdGluYXRpb25GcmFtZU9mZnNldCwgc2l6ZV90IG51bWJlck9mRnJhbWVzKTsKLQotICAgIC8v
IFJlbmRlciBzaWxlbmNlIHN0YXJ0aW5nIGZyb20gImluZGV4IiBmcmFtZSBpbiBBdWRpb0J1cy4K
LSAgICBpbmxpbmUgYm9vbCByZW5kZXJTaWxlbmNlQW5kRmluaXNoSWZOb3RMb29waW5nKEF1ZGlv
QnVzKiwgdW5zaWduZWQgaW5kZXgsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwotCi0gICAgLy8g
bV9idWZmZXIgaG9sZHMgdGhlIHNhbXBsZSBkYXRhIHdoaWNoIHRoaXMgbm9kZSBvdXRwdXRzLgot
ICAgIFJlZlB0cjxBdWRpb0J1ZmZlcj4gbV9idWZmZXI7Ci0KLSAgICAvLyBQb2ludGVycyBmb3Ig
dGhlIGJ1ZmZlciBhbmQgZGVzdGluYXRpb24uCi0gICAgT3duQXJyYXlQdHI8Y29uc3QgZmxvYXQq
PiBtX3NvdXJjZUNoYW5uZWxzOwotICAgIE93bkFycmF5UHRyPGZsb2F0Kj4gbV9kZXN0aW5hdGlv
bkNoYW5uZWxzOwotCi0gICAgLy8gVXNlZCBmb3IgdGhlICJnYWluIiBhbmQgInBsYXliYWNrUmF0
ZSIgYXR0cmlidXRlcy4KLSAgICBSZWZQdHI8QXVkaW9HYWluPiBtX2dhaW47Ci0gICAgUmVmUHRy
PEF1ZGlvUGFyYW0+IG1fcGxheWJhY2tSYXRlOwotCi0gICAgLy8gSWYgbV9pc0xvb3BpbmcgaXMg
ZmFsc2UsIHRoZW4gdGhpcyBub2RlIHdpbGwgYmUgZG9uZSBwbGF5aW5nIGFuZCBiZWNvbWUgaW5h
Y3RpdmUgYWZ0ZXIgaXQgcmVhY2hlcyB0aGUgZW5kIG9mIHRoZSBzYW1wbGUgZGF0YSBpbiB0aGUg
YnVmZmVyLgotICAgIC8vIElmIHRydWUsIGl0IHdpbGwgd3JhcCBhcm91bmQgdG8gdGhlIHN0YXJ0
IG9mIHRoZSBidWZmZXIgZWFjaCB0aW1lIGl0IHJlYWNoZXMgdGhlIGVuZC4KLSAgICBib29sIG1f
aXNMb29waW5nOwotCi0gICAgLy8gbV9zdGFydFRpbWUgaXMgdGhlIHRpbWUgdG8gc3RhcnQgcGxh
eWluZyBiYXNlZCBvbiB0aGUgY29udGV4dCdzIHRpbWVsaW5lICgwLjAgb3IgYSB0aW1lIGxlc3Mg
dGhhbiB0aGUgY29udGV4dCdzIGN1cnJlbnQgdGltZSBtZWFucyAibm93IikuCi0gICAgZG91Ymxl
IG1fc3RhcnRUaW1lOyAvLyBpbiBzZWNvbmRzCi0KLSAgICAvLyBtX2VuZFRpbWUgaXMgdGhlIHRp
bWUgdG8gc3RvcCBwbGF5aW5nIGJhc2VkIG9uIHRoZSBjb250ZXh0J3MgdGltZWxpbmUgKDAuMCBv
ciBhIHRpbWUgbGVzcyB0aGFuIHRoZSBjb250ZXh0J3MgY3VycmVudCB0aW1lIG1lYW5zICJub3ci
KS4KLSAgICAvLyBJZiBpdCBoYXNuJ3QgYmVlbiBzZXQgZXhwbGljaXRseSwgdGhlbiB0aGUgc291
bmQgd2lsbCBub3Qgc3RvcCBwbGF5aW5nIChpZiBsb29waW5nKSBvciB3aWxsIHN0b3Agd2hlbiB0
aGUgZW5kIG9mIHRoZSBBdWRpb0J1ZmZlcgotICAgIC8vIGhhcyBiZWVuIHJlYWNoZWQuCi0gICAg
ZG91YmxlIG1fZW5kVGltZTsgLy8gaW4gc2Vjb25kcwotICAgIAotICAgIC8vIG1fdmlydHVhbFJl
YWRJbmRleCBpcyBhIHNhbXBsZS1mcmFtZSBpbmRleCBpbnRvIG91ciBidWZmZXIgcmVwcmVzZW50
aW5nIHRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uLgotICAgIC8vIFNpbmNlIGl0J3MgZmxv
YXRpbmctcG9pbnQsIGl0IGhhcyBzdWItc2FtcGxlIGFjY3VyYWN5LgotICAgIGRvdWJsZSBtX3Zp
cnR1YWxSZWFkSW5kZXg7Ci0KLSAgICAvLyBHcmFudWxhciBwbGF5YmFjawotICAgIGJvb2wgbV9p
c0dyYWluOwotICAgIGRvdWJsZSBtX2dyYWluT2Zmc2V0OyAvLyBpbiBzZWNvbmRzCi0gICAgZG91
YmxlIG1fZ3JhaW5EdXJhdGlvbjsgLy8gaW4gc2Vjb25kcwotCi0gICAgLy8gdG90YWxQaXRjaFJh
dGUoKSByZXR1cm5zIHRoZSBpbnN0YW50YW5lb3VzIHBpdGNoIHJhdGUgKG5vbi10aW1lIHByZXNl
cnZpbmcpLgotICAgIC8vIEl0IGluY29ycG9yYXRlcyB0aGUgYmFzZSBwaXRjaCByYXRlLCBhbnkg
c2FtcGxlLXJhdGUgY29udmVyc2lvbiBmYWN0b3IgZnJvbSB0aGUgYnVmZmVyLCBhbmQgYW55IGRv
cHBsZXIgc2hpZnQgZnJvbSBhbiBhc3NvY2lhdGVkIHBhbm5lciBub2RlLgotICAgIGRvdWJsZSB0
b3RhbFBpdGNoUmF0ZSgpOwotCi0gICAgLy8gbV9sYXN0R2FpbiBwcm92aWRlcyBjb250aW51aXR5
IHdoZW4gd2UgZHluYW1pY2FsbHkgYWRqdXN0IHRoZSBnYWluLgotICAgIGZsb2F0IG1fbGFzdEdh
aW47Ci0gICAgCi0gICAgLy8gV2Ugb3B0aW9uYWxseSBrZWVwIHRyYWNrIG9mIGEgcGFubmVyIG5v
ZGUgd2hpY2ggaGFzIGEgZG9wcGxlciBzaGlmdCB0aGF0IGlzIGluY29ycG9yYXRlZCBpbnRvIHRo
ZSBwaXRjaCByYXRlLgotICAgIFJlZlB0cjxBdWRpb1Bhbm5lck5vZGU+IG1fcGFubmVyTm9kZTsK
LQotICAgIC8vIFRoaXMgc3luY2hyb25pemVzIHByb2Nlc3MoKSB3aXRoIHNldEJ1ZmZlcigpIHdo
aWNoIGNhbiBjYXVzZSBkeW5hbWljIGNoYW5uZWwgY291bnQgY2hhbmdlcy4KLSAgICBtdXRhYmxl
IE11dGV4IG1fcHJvY2Vzc0xvY2s7Ci0KLSAgICAvLyBIYW5kbGVzIHRoZSB0aW1lIHdoZW4gd2Ug
cmVhY2ggdGhlIGVuZCBvZiBzYW1wbGUgZGF0YSAobm9uLWxvb3BpbmcpIG9yIHRoZSBub3RlT2Zm
KCkgdGltZSBoYXMgYmVlbiByZWFjaGVkLgotICAgIHZvaWQgZmluaXNoKCk7Ci0KLSAgICBQbGF5
YmFja1N0YXRlIG1fcGxheWJhY2tTdGF0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEF1ZGlvQnVmZmVyU291cmNlTm9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5pZGwJKHJldmlzaW9uIDEx
MTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBh
dWRpbyB7Ci0gICAgLy8gQSBjYWNoZWQgKG5vbi1zdHJlYW1lZCksIG1lbW9yeS1yZXNpZGVudCBh
dWRpbyBzb3VyY2UKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVE
SU8sCi0gICAgICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0Ci0gICAgXSBBdWRpb0J1ZmZlclNvdXJj
ZU5vZGUgOiBBdWRpb1NvdXJjZU5vZGUgewotICAgICAgICBhdHRyaWJ1dGUgW0N1c3RvbVNldHRl
cl0gQXVkaW9CdWZmZXIgYnVmZmVyCi0gICAgICAgICAgICBzZXR0ZXIgcmFpc2VzIChET01FeGNl
cHRpb24pOwotCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFVOU0NIRURVTEVEX1NUQVRF
ID0gMDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgU0NIRURVTEVEX1NUQVRFID0gMTsK
LSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgUExBWUlOR19TVEFURSA9IDI7Ci0gICAgICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0IEZJTklTSEVEX1NUQVRFID0gMzsKLQotICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgcGxheWJhY2tTdGF0ZTsKLQotICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9HYWluIGdhaW47Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBBdWRpb1BhcmFtIHBsYXliYWNrUmF0ZTsKLQotICAgICAgICBhdHRyaWJ1dGUgYm9vbGVh
biBsb29wOyAvLyBUaGlzIGlzIHRoZSBwcm9wZXIgYXR0cmlidXRlIG5hbWUgZnJvbSB0aGUgc3Bl
Y2lmaWNhdGlvbi4KLSAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gbG9vcGluZzsgLy8gVGhpcyBp
cyBhbiBhbGlhcyBmb3IgdGhlIC5sb29wIGF0dHJpYnV0ZSBmb3IgYmFja3dhcmRzIGNvbXBhdGli
aWxpdHkuCi0KLSAgICAgICAgdm9pZCBub3RlT24oaW4gZG91YmxlIHdoZW4pOwotICAgICAgICB2
b2lkIG5vdGVHcmFpbk9uKGluIGRvdWJsZSB3aGVuLCBpbiBkb3VibGUgZ3JhaW5PZmZzZXQsIGlu
IGRvdWJsZSBncmFpbkR1cmF0aW9uKTsKLSAgICAgICAgdm9pZCBub3RlT2ZmKGluIGRvdWJsZSB3
aGVuKTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFu
bmVsTWVyZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b0NoYW5uZWxNZXJnZXIuY3BwCShyZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExNCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQot
I2luY2x1ZGUgIkF1ZGlvQ2hhbm5lbE1lcmdlci5oIgotCi0jaW5jbHVkZSAiQXVkaW9Db250ZXh0
LmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlSW5wdXQuaCIKLSNpbmNsdWRlICJBdWRpb05vZGVPdXRw
dXQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotLy8gVGhpcyBpcyBjb25zaWRlcmlu
ZyB0aGF0IDUuMSAoNiBjaGFubmVscykgaXMgdGhlIGxhcmdlc3Qgd2UnbGwgZXZlciBkZWFsIHdp
dGguCi0vLyBJdCBjYW4gZWFzaWx5IGJlIGluY3JlYXNlZCB0byBzdXBwb3J0IG1vcmUgaWYgdGhl
IHdlYiBhdWRpbyBzcGVjaWZpY2F0aW9uIGlzIHVwZGF0ZWQuCi1jb25zdCB1bnNpZ25lZCBOdW1i
ZXJPZklucHV0cyA9IDY7Ci0KLUF1ZGlvQ2hhbm5lbE1lcmdlcjo6QXVkaW9DaGFubmVsTWVyZ2Vy
KEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICA6IEF1ZGlvTm9k
ZShjb250ZXh0LCBzYW1wbGVSYXRlKQotewotICAgIC8vIENyZWF0ZSBhIGZpeGVkIG51bWJlciBv
ZiBpbnB1dHMgKGFibGUgdG8gaGFuZGxlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFubmVscyB3
ZSBkZWFsIHdpdGgpLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOdW1iZXJPZklucHV0
czsgKytpKQotICAgICAgICBhZGRJbnB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlSW5wdXQodGhp
cykpKTsKLQotICAgIGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMs
IDEpKSk7Ci0gICAgCi0gICAgc2V0Tm9kZVR5cGUoTm9kZVR5cGVDaGFubmVsTWVyZ2VyKTsKLSAg
ICAKLSAgICBpbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgQXVkaW9DaGFubmVsTWVyZ2VyOjpwcm9j
ZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgQXVkaW9Ob2RlT3V0cHV0KiBvdXRw
dXQgPSB0aGlzLT5vdXRwdXQoMCk7Ci0gICAgQVNTRVJUKG91dHB1dCk7Ci0gICAgQVNTRVJUX1VO
VVNFRChmcmFtZXNUb1Byb2Nlc3MsIGZyYW1lc1RvUHJvY2VzcyA9PSBvdXRwdXQtPmJ1cygpLT5s
ZW5ndGgoKSk7ICAgIAotICAgIAotICAgIC8vIE1lcmdlIGFsbCB0aGUgY2hhbm5lbHMgZnJvbSBh
bGwgdGhlIGlucHV0cyBpbnRvIG9uZSBvdXRwdXQuCi0gICAgdW5zaWduZWQgb3V0cHV0Q2hhbm5l
bEluZGV4ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZJbnB1dHMo
KTsgKytpKSB7Ci0gICAgICAgIEF1ZGlvTm9kZUlucHV0KiBpbnB1dCA9IHRoaXMtPmlucHV0KGkp
OwotICAgICAgICBpZiAoaW5wdXQtPmlzQ29ubmVjdGVkKCkpIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIG51bWJlck9mSW5wdXRDaGFubmVscyA9IGlucHV0LT5idXMoKS0+bnVtYmVyT2ZDaGFubmVs
cygpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBNZXJnZSBjaGFubmVscyBmcm9tIHRo
aXMgcGFydGljdWxhciBpbnB1dC4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGog
PCBudW1iZXJPZklucHV0Q2hhbm5lbHM7ICsraikgewotICAgICAgICAgICAgICAgIEF1ZGlvQ2hh
bm5lbCogaW5wdXRDaGFubmVsID0gaW5wdXQtPmJ1cygpLT5jaGFubmVsKGopOwotICAgICAgICAg
ICAgICAgIEF1ZGlvQ2hhbm5lbCogb3V0cHV0Q2hhbm5lbCA9IG91dHB1dC0+YnVzKCktPmNoYW5u
ZWwob3V0cHV0Q2hhbm5lbEluZGV4KTsKLSAgICAgICAgICAgICAgICBvdXRwdXRDaGFubmVsLT5j
b3B5RnJvbShpbnB1dENoYW5uZWwpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICsrb3V0cHV0Q2hhbm5lbEluZGV4OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
ICAgIAotICAgIEFTU0VSVChvdXRwdXRDaGFubmVsSW5kZXggPT0gb3V0cHV0LT5udW1iZXJPZkNo
YW5uZWxzKCkpOwotfQotCi12b2lkIEF1ZGlvQ2hhbm5lbE1lcmdlcjo6cmVzZXQoKQotewotfQot
Ci0vLyBBbnkgdGltZSBhIGNvbm5lY3Rpb24gb3IgZGlzY29ubmVjdGlvbiBoYXBwZW5zIG9uIGFu
eSBvZiBvdXIgaW5wdXRzLCB3ZSBwb3RlbnRpYWxseSBuZWVkIHRvIGNoYW5nZSB0aGUKLS8vIG51
bWJlciBvZiBjaGFubmVscyBvZiBvdXIgb3V0cHV0Lgotdm9pZCBBdWRpb0NoYW5uZWxNZXJnZXI6
OmNoZWNrTnVtYmVyT2ZDaGFubmVsc0ZvcklucHV0KEF1ZGlvTm9kZUlucHV0KiBpbnB1dCkKLXsK
LSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkgJiYgY29udGV4dCgpLT5pc0dy
YXBoT3duZXIoKSk7Ci0KLSAgICAvLyBDb3VudCBob3cgbWFueSBjaGFubmVscyB3ZSBoYXZlIGFs
bCB0b2dldGhlciBmcm9tIGFsbCBvZiB0aGUgaW5wdXRzLgotICAgIHVuc2lnbmVkIG51bWJlck9m
T3V0cHV0Q2hhbm5lbHMgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJP
ZklucHV0cygpOyArK2kpIHsKLSAgICAgICAgQXVkaW9Ob2RlSW5wdXQqIGlucHV0ID0gdGhpcy0+
aW5wdXQoaSk7Ci0gICAgICAgIGlmIChpbnB1dC0+aXNDb25uZWN0ZWQoKSkKLSAgICAgICAgICAg
IG51bWJlck9mT3V0cHV0Q2hhbm5lbHMgKz0gaW5wdXQtPmJ1cygpLT5udW1iZXJPZkNoYW5uZWxz
KCk7Ci0gICAgfQotCi0gICAgLy8gU2V0IHRoZSBjb3JyZWN0IG51bWJlciBvZiBjaGFubmVscyBv
biB0aGUgb3V0cHV0Ci0gICAgQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQgPSB0aGlzLT5vdXRwdXQo
MCk7Ci0gICAgQVNTRVJUKG91dHB1dCk7Ci0gICAgb3V0cHV0LT5zZXROdW1iZXJPZkNoYW5uZWxz
KG51bWJlck9mT3V0cHV0Q2hhbm5lbHMpOwotCi0gICAgQXVkaW9Ob2RlOjpjaGVja051bWJlck9m
Q2hhbm5lbHNGb3JJbnB1dChpbnB1dCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb0NoYW5uZWxNZXJnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9BdWRpb0NoYW5uZWxNZXJnZXIuaAkocmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgQXVkaW9DaGFubmVsTWVyZ2VyX2gKLSNkZWZpbmUgQXVkaW9D
aGFubmVsTWVyZ2VyX2gKLQotI2luY2x1ZGUgIkF1ZGlvTm9kZS5oIgotI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9Db250ZXh0
OwotICAgIAotY2xhc3MgQXVkaW9DaGFubmVsTWVyZ2VyIDogcHVibGljIEF1ZGlvTm9kZSB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8QXVkaW9DaGFubmVsTWVyZ2VyPiBjcmVhdGUo
QXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBBdWRpb0NoYW5uZWxNZXJnZXIoY29udGV4dCwgc2FtcGxlUmF0
ZSkpOyAgICAgIAotICAgIH0KLQotICAgIC8vIEF1ZGlvTm9kZQotICAgIHZpcnR1YWwgdm9pZCBw
cm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwotICAgIHZpcnR1YWwgdm9pZCByZXNldCgp
OwotCi0gICAgLy8gQ2FsbGVkIGluIHRoZSBhdWRpbyB0aHJlYWQgKHByZS1yZW5kZXJpbmcgdGFz
aykgd2hlbiB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIGZvciBhbiBpbnB1dCBtYXkgaGF2ZSBjaGFu
Z2VkLgotICAgIHZpcnR1YWwgdm9pZCBjaGVja051bWJlck9mQ2hhbm5lbHNGb3JJbnB1dChBdWRp
b05vZGVJbnB1dCopOwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lU
aW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQotCi0gICAgQXVkaW9DaGFubmVsTWVy
Z2VyKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQXVkaW9DaGFubmVsTWVyZ2VyX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbE1lcmdlci5pZGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmlkbAkocmV2aXNpb24g
MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsTWVyZ2VyLmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGF1ZGlvIHsKLSAgICBp
bnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8KLSAgICBdIEF1ZGlvQ2hh
bm5lbE1lcmdlciA6IEF1ZGlvTm9kZSB7Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRlci5jcHAJKHJldmlzaW9uIDExMTQz
MykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIkF1ZGlvQ2hhbm5l
bFNwbGl0dGVyLmgiCi0KLSNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgotI2luY2x1ZGUgIkF1
ZGlvTm9kZU91dHB1dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi0vLyBUaGlzIGlz
IGNvbnNpZGVyaW5nIHRoYXQgNS4xICg2IGNoYW5uZWxzKSBpcyB0aGUgbGFyZ2VzdCB3ZSdsbCBl
dmVyIGRlYWwgd2l0aC4KLS8vIEl0IGNhbiBlYXNpbHkgYmUgaW5jcmVhc2VkIHRvIHN1cHBvcnQg
bW9yZSBpZiB0aGUgd2ViIGF1ZGlvIHNwZWNpZmljYXRpb24gaXMgdXBkYXRlZC4KLWNvbnN0IHVu
c2lnbmVkIE51bWJlck9mT3V0cHV0cyA9IDY7Ci0KLUF1ZGlvQ2hhbm5lbFNwbGl0dGVyOjpBdWRp
b0NoYW5uZWxTcGxpdHRlcihBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUp
Ci0gICAgOiBBdWRpb05vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkKLXsKLSAgICBhZGRJbnB1dChh
ZG9wdFB0cihuZXcgQXVkaW9Ob2RlSW5wdXQodGhpcykpKTsKLQotICAgIC8vIENyZWF0ZSBhIGZp
eGVkIG51bWJlciBvZiBvdXRwdXRzIChhYmxlIHRvIGhhbmRsZSB0aGUgbWF4aW11bSBudW1iZXIg
b2YgY2hhbm5lbHMgZmVkIHRvIGFuIGlucHV0KS4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgTnVtYmVyT2ZPdXRwdXRzOyArK2kpCi0gICAgICAgIGFkZE91dHB1dChhZG9wdFB0cihuZXcg
QXVkaW9Ob2RlT3V0cHV0KHRoaXMsIDEpKSk7Ci0gICAgCi0gICAgc2V0Tm9kZVR5cGUoTm9kZVR5
cGVDaGFubmVsU3BsaXR0ZXIpOwotICAgIAotICAgIGluaXRpYWxpemUoKTsKLX0KLQotdm9pZCBB
dWRpb0NoYW5uZWxTcGxpdHRlcjo6cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewot
ICAgIEF1ZGlvQnVzKiBzb3VyY2UgPSBpbnB1dCgwKS0+YnVzKCk7Ci0gICAgQVNTRVJUKHNvdXJj
ZSk7Ci0gICAgQVNTRVJUX1VOVVNFRChmcmFtZXNUb1Byb2Nlc3MsIGZyYW1lc1RvUHJvY2VzcyA9
PSBzb3VyY2UtPmxlbmd0aCgpKTsKLSAgICAKLSAgICB1bnNpZ25lZCBudW1iZXJPZlNvdXJjZUNo
YW5uZWxzID0gc291cmNlLT5udW1iZXJPZkNoYW5uZWxzKCk7Ci0gICAgCi0gICAgQVNTRVJUKG51
bWJlck9mT3V0cHV0cygpID09IE51bWJlck9mT3V0cHV0cyk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IE51bWJlck9mT3V0cHV0czsgKytpKSB7Ci0gICAgICAgIEF1ZGlvQnVzKiBkZXN0
aW5hdGlvbiA9IG91dHB1dChpKS0+YnVzKCk7Ci0gICAgICAgIEFTU0VSVChkZXN0aW5hdGlvbik7
Ci0gICAgICAgIAotICAgICAgICBpZiAoaSA8IG51bWJlck9mU291cmNlQ2hhbm5lbHMpIHsKLSAg
ICAgICAgICAgIC8vIFNwbGl0IHRoZSBjaGFubmVsIG91dCBpZiBpdCBleGlzdHMgaW4gdGhlIHNv
dXJjZS4KLSAgICAgICAgICAgIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8gYXZvaWQgdGhlIGNvcHkg
YW5kIHNpbXBseSBwYXNzIGFsb25nIHBvaW50ZXJzLCBidXQgdGhpcyBiZWNvbWVzIGV4dHJlbWVs
eSBkaWZmaWN1bHQgd2l0aCBmYW5vdXQgYW5kIGZhbmluLgotICAgICAgICAgICAgZGVzdGluYXRp
b24tPmNoYW5uZWwoMCktPmNvcHlGcm9tKHNvdXJjZS0+Y2hhbm5lbChpKSk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAob3V0cHV0KGkpLT5yZW5kZXJpbmdGYW5PdXRDb3VudCgpID4gMCkgewotICAgICAg
ICAgICAgLy8gT25seSBib3RoZXIgemVyb2luZyBvdXQgdGhlIGRlc3RpbmF0aW9uIGlmIGl0J3Mg
Y29ubmVjdGVkIHRvIGFueXRoaW5nCi0gICAgICAgICAgICBkZXN0aW5hdGlvbi0+emVybygpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEF1ZGlvQ2hhbm5lbFNwbGl0dGVyOjpyZXNldCgp
Ci17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJf
QVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NoYW5uZWxTcGxpdHRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNw
bGl0dGVyLmgJKHJldmlzaW9uIDExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1
ZGlvQ2hhbm5lbFNwbGl0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgQXVkaW9DaGFubmVsU3BsaXR0ZXJfaAotI2RlZmluZSBBdWRpb0No
YW5uZWxTcGxpdHRlcl9oCi0KLSNpbmNsdWRlICJBdWRpb05vZGUuaCIKLSNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvQ29udGV4
dDsKLSAgICAKLWNsYXNzIEF1ZGlvQ2hhbm5lbFNwbGl0dGVyIDogcHVibGljIEF1ZGlvTm9kZSB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8QXVkaW9DaGFubmVsU3BsaXR0ZXI+IGNy
ZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvQ2hhbm5lbFNwbGl0dGVyKGNvbnRleHQsIHNh
bXBsZVJhdGUpKTsgICAgICAKLSAgICB9Ci0KLSAgICAvLyBBdWRpb05vZGUKLSAgICB2aXJ0dWFs
IHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVzZXQoKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KLQotICAgIEF1ZGlvQ2hhbm5lbFNwbGl0dGVy
KEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gQXVkaW9DaGFubmVsU3BsaXR0ZXJfaApJbmRleDogU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0ZXIuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ2hhbm5lbFNwbGl0dGVyLmlkbAkocmV2aXNp
b24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9DaGFubmVsU3BsaXR0
ZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1
bGUgYXVkaW8gewotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJ
TwotICAgIF0gQXVkaW9DaGFubmVsU3BsaXR0ZXIgOiBBdWRpb05vZGUgewotICAgIH07Ci19Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAJKHJldmlzaW9uIDEx
MTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNzk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiQXVkaW9Db250ZXh0Lmgi
Ci0KLSNpbmNsdWRlICJBc3luY0F1ZGlvRGVjb2Rlci5oIgotI2luY2x1ZGUgIkF1ZGlvQnVmZmVy
LmgiCi0jaW5jbHVkZSAiQXVkaW9CdWZmZXJDYWxsYmFjay5oIgotI2luY2x1ZGUgIkF1ZGlvQnVm
ZmVyU291cmNlTm9kZS5oIgotI2luY2x1ZGUgIkF1ZGlvQ2hhbm5lbE1lcmdlci5oIgotI2luY2x1
ZGUgIkF1ZGlvQ2hhbm5lbFNwbGl0dGVyLmgiCi0jaW5jbHVkZSAiQXVkaW9HYWluTm9kZS5oIgot
I2luY2x1ZGUgIkF1ZGlvTGlzdGVuZXIuaCIKLSNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgot
I2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgotI2luY2x1ZGUgIkF1ZGlvUGFubmVyTm9kZS5o
IgotI2luY2x1ZGUgIkJpcXVhZEZpbHRlck5vZGUuaCIKLSNpbmNsdWRlICJDb252b2x2ZXJOb2Rl
LmgiCi0jaW5jbHVkZSAiRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmgiCi0jaW5jbHVkZSAi
RGVsYXlOb2RlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEeW5hbWljc0Nv
bXByZXNzb3JOb2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkZG
VEZyYW1lLmgiCi0jaW5jbHVkZSAiSFJURkRhdGFiYXNlTG9hZGVyLmgiCi0jaW5jbHVkZSAiSFJU
RlBhbm5lci5oIgotI2luY2x1ZGUgIkhpZ2hQYXNzMkZpbHRlck5vZGUuaCIKLSNpbmNsdWRlICJK
YXZhU2NyaXB0QXVkaW9Ob2RlLmgiCi0jaW5jbHVkZSAiTG93UGFzczJGaWx0ZXJOb2RlLmgiCi0j
aW5jbHVkZSAiT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmgiCi0jaW5jbHVkZSAiT2ZmbGlu
ZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNp
bmNsdWRlICJSZWFsdGltZUFuYWx5c2VyTm9kZS5oIgotI2luY2x1ZGUgIldhdmVTaGFwZXJOb2Rl
LmgiCi0jaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCi0KLSNpZiBFTkFCTEUoVklERU8pCi0j
aW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgotI2luY2x1ZGUgIk1lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZS5oIgotI2VuZGlmCi0KLSNpZiBERUJVR19BVURJT05PREVfUkVGRVJFTkNFUwot
I2luY2x1ZGUgPHN0ZGlvLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlci5o
PgotI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
LSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi0vLyBGSVhNRTogY2hlY2sgdGhlIHByb3BlciB3
YXkgdG8gcmVmZXJlbmNlIGFuIHVuZGVmaW5lZCB0aHJlYWQgSUQKLWNvbnN0IGludCBVbmRlZmlu
ZWRUaHJlYWRJZGVudGlmaWVyID0gMHhmZmZmZmZmZjsKLQotY29uc3QgdW5zaWduZWQgTWF4Tm9k
ZXNUb0RlbGV0ZVBlclF1YW50dW0gPSAxMDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAot
bmFtZXNwYWNlIHsKLSAgICAKLWJvb2wgaXNTYW1wbGVSYXRlUmFuZ2VHb29kKGZsb2F0IHNhbXBs
ZVJhdGUpCi17Ci0gICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgaWYgdGhlIG1pbmltdW0g
c2FtcGxlLXJhdGUgY291bGQgYmUgbGVzcyB0aGFuIDQ0LjFLSHosCi0gICAgLy8gYnV0IHRoYXQg
d2lsbCByZXF1aXJlIHNvbWUgZml4ZXMgaW4gSFJURlBhbm5lcjo6ZmZ0U2l6ZUZvclNhbXBsZVJh
dGUoKSwgYW5kIHNvbWUgdGVzdGluZyB0aGVyZS4KLSAgICByZXR1cm4gc2FtcGxlUmF0ZSA+PSA0
NDEwMCAmJiBzYW1wbGVSYXRlIDw9IDk2MDAwOwotfQotCi19Ci0KLS8vIERvbid0IGFsbG93IG1v
cmUgdGhhbiB0aGlzIG51bWJlciBvZiBzaW11bHRhbmVvdXMgQXVkaW9Db250ZXh0cyB0YWxraW5n
IHRvIGhhcmR3YXJlLgotY29uc3QgdW5zaWduZWQgTWF4SGFyZHdhcmVDb250ZXh0cyA9IDQ7Ci11
bnNpZ25lZCBBdWRpb0NvbnRleHQ6OnNfaGFyZHdhcmVDb250ZXh0Q291bnQgPSAwOwotICAgIAot
UGFzc1JlZlB0cjxBdWRpb0NvbnRleHQ+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlKERvY3VtZW50KiBk
b2N1bWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLQot
ICAgIEFTU0VSVChkb2N1bWVudCk7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBp
ZiAoc19oYXJkd2FyZUNvbnRleHRDb3VudCA+PSBNYXhIYXJkd2FyZUNvbnRleHRzKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIFJlZlB0cjxBdWRpb0NvbnRleHQ+IGF1ZGlvQ29udGV4dChhZG9w
dFJlZihuZXcgQXVkaW9Db250ZXh0KGRvY3VtZW50KSkpOwotICAgIGF1ZGlvQ29udGV4dC0+c3Vz
cGVuZElmTmVlZGVkKCk7Ci0gICAgcmV0dXJuIGF1ZGlvQ29udGV4dC5yZWxlYXNlKCk7Ci19Ci0K
LVBhc3NSZWZQdHI8QXVkaW9Db250ZXh0PiBBdWRpb0NvbnRleHQ6OmNyZWF0ZU9mZmxpbmVDb250
ZXh0KERvY3VtZW50KiBkb2N1bWVudCwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90
IG51bWJlck9mRnJhbWVzLCBmbG9hdCBzYW1wbGVSYXRlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBBU1NFUlQoZG9jdW1lbnQpOwotCi0gICAgLy8gRklYTUU6IG9mZmxpbmUgY29udGV4dHMg
aGF2ZSBsaW1pdGF0aW9ucyBvbiBzdXBwb3J0ZWQgc2FtcGxlLXJhdGVzLgotICAgIC8vIEN1cnJl
bnRseSBhbGwgQXVkaW9Db250ZXh0cyBtdXN0IGhhdmUgdGhlIHNhbWUgc2FtcGxlLXJhdGUuCi0g
ICAgSFJURkRhdGFiYXNlTG9hZGVyKiBsb2FkZXIgPSBIUlRGRGF0YWJhc2VMb2FkZXI6OmxvYWRl
cigpOwotICAgIGlmIChudW1iZXJPZkNoYW5uZWxzID4gMTAgfHwgIWlzU2FtcGxlUmF0ZVJhbmdl
R29vZChzYW1wbGVSYXRlKSB8fCAobG9hZGVyICYmIGxvYWRlci0+ZGF0YWJhc2VTYW1wbGVSYXRl
KCkgIT0gc2FtcGxlUmF0ZSkpIHsKLSAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8QXVkaW9Db250ZXh0PiBhdWRpb0NvbnRleHQo
bmV3IEF1ZGlvQ29udGV4dChkb2N1bWVudCwgbnVtYmVyT2ZDaGFubmVscywgbnVtYmVyT2ZGcmFt
ZXMsIHNhbXBsZVJhdGUpKTsKLSAgICBhdWRpb0NvbnRleHQtPnN1c3BlbmRJZk5lZWRlZCgpOwot
ICAgIHJldHVybiBhdWRpb0NvbnRleHQucmVsZWFzZSgpOwotfQotCi0vLyBDb25zdHJ1Y3RvciBm
b3IgcmVuZGVyaW5nIHRvIHRoZSBhdWRpbyBoYXJkd2FyZS4KLUF1ZGlvQ29udGV4dDo6QXVkaW9D
b250ZXh0KERvY3VtZW50KiBkb2N1bWVudCkKLSAgICA6IEFjdGl2ZURPTU9iamVjdChkb2N1bWVu
dCwgdGhpcykKLSAgICAsIG1faXNJbml0aWFsaXplZChmYWxzZSkKLSAgICAsIG1faXNBdWRpb1Ro
cmVhZEZpbmlzaGVkKGZhbHNlKQotICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKLSAgICAsIG1f
ZGVzdGluYXRpb25Ob2RlKDApCi0gICAgLCBtX2lzRGVsZXRpb25TY2hlZHVsZWQoZmFsc2UpCi0g
ICAgLCBtX2Nvbm5lY3Rpb25Db3VudCgwKQotICAgICwgbV9hdWRpb1RocmVhZCgwKQotICAgICwg
bV9ncmFwaE93bmVyVGhyZWFkKFVuZGVmaW5lZFRocmVhZElkZW50aWZpZXIpCi0gICAgLCBtX2lz
T2ZmbGluZUNvbnRleHQoZmFsc2UpCi0gICAgLCBtX2FjdGl2ZVNvdXJjZUNvdW50KDApCi17Ci0g
ICAgY29uc3RydWN0Q29tbW9uKCk7Ci0KLSAgICBtX2Rlc3RpbmF0aW9uTm9kZSA9IERlZmF1bHRB
dWRpb0Rlc3RpbmF0aW9uTm9kZTo6Y3JlYXRlKHRoaXMpOwotCi0gICAgLy8gVGhpcyBzZXRzIGlu
IG1vdGlvbiBhbiBhc3luY2hyb25vdXMgbG9hZGluZyBtZWNoYW5pc20gb24gYW5vdGhlciB0aHJl
YWQuCi0gICAgLy8gV2UgY2FuIGNoZWNrIG1faHJ0ZkRhdGFiYXNlTG9hZGVyLT5pc0xvYWRlZCgp
IHRvIGZpbmQgb3V0IHdoZXRoZXIgb3Igbm90IGl0IGhhcyBiZWVuIGZ1bGx5IGxvYWRlZC4KLSAg
ICAvLyBJdCdzIG5vdCB0aGF0IHVzZWZ1bCB0byBoYXZlIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9y
IHRoaXMgc2luY2UgdGhlIGF1ZGlvIHRocmVhZCBhdXRvbWF0aWNhbGx5IHN0YXJ0cyByZW5kZXJp
bmcgb24gdGhlIGdyYXBoCi0gICAgLy8gd2hlbiB0aGlzIGhhcyBmaW5pc2hlZCAoc2VlIEF1ZGlv
RGVzdGluYXRpb25Ob2RlKS4KLSAgICBtX2hydGZEYXRhYmFzZUxvYWRlciA9IEhSVEZEYXRhYmFz
ZUxvYWRlcjo6Y3JlYXRlQW5kTG9hZEFzeW5jaHJvbm91c2x5SWZOZWNlc3Nhcnkoc2FtcGxlUmF0
ZSgpKTsKLX0KLQotLy8gQ29uc3RydWN0b3IgZm9yIG9mZmxpbmUgKG5vbi1yZWFsdGltZSkgcmVu
ZGVyaW5nLgotQXVkaW9Db250ZXh0OjpBdWRpb0NvbnRleHQoRG9jdW1lbnQqIGRvY3VtZW50LCB1
bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMsIGZsb2F0IHNh
bXBsZVJhdGUpCi0gICAgOiBBY3RpdmVET01PYmplY3QoZG9jdW1lbnQsIHRoaXMpCi0gICAgLCBt
X2lzSW5pdGlhbGl6ZWQoZmFsc2UpCi0gICAgLCBtX2lzQXVkaW9UaHJlYWRGaW5pc2hlZChmYWxz
ZSkKLSAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCi0gICAgLCBtX2Rlc3RpbmF0aW9uTm9kZSgw
KQotICAgICwgbV9jb25uZWN0aW9uQ291bnQoMCkKLSAgICAsIG1fYXVkaW9UaHJlYWQoMCkKLSAg
ICAsIG1fZ3JhcGhPd25lclRocmVhZChVbmRlZmluZWRUaHJlYWRJZGVudGlmaWVyKQotICAgICwg
bV9pc09mZmxpbmVDb250ZXh0KHRydWUpCi0gICAgLCBtX2FjdGl2ZVNvdXJjZUNvdW50KDApCi17
Ci0gICAgY29uc3RydWN0Q29tbW9uKCk7Ci0KLSAgICAvLyBGSVhNRTogdGhlIHBhc3NlZCBpbiBz
YW1wbGVSYXRlIE1VU1QgbWF0Y2ggdGhlIGhhcmR3YXJlIHNhbXBsZS1yYXRlIHNpbmNlIEhSVEZE
YXRhYmFzZUxvYWRlciBpcyBhIHNpbmdsZXRvbi4KLSAgICBtX2hydGZEYXRhYmFzZUxvYWRlciA9
IEhSVEZEYXRhYmFzZUxvYWRlcjo6Y3JlYXRlQW5kTG9hZEFzeW5jaHJvbm91c2x5SWZOZWNlc3Nh
cnkoc2FtcGxlUmF0ZSk7Ci0KLSAgICAvLyBDcmVhdGUgYSBuZXcgZGVzdGluYXRpb24gZm9yIG9m
ZmxpbmUgcmVuZGVyaW5nLgotICAgIG1fcmVuZGVyVGFyZ2V0ID0gQXVkaW9CdWZmZXI6OmNyZWF0
ZShudW1iZXJPZkNoYW5uZWxzLCBudW1iZXJPZkZyYW1lcywgc2FtcGxlUmF0ZSk7Ci0gICAgbV9k
ZXN0aW5hdGlvbk5vZGUgPSBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OmNyZWF0ZSh0aGlz
LCBtX3JlbmRlclRhcmdldC5nZXQoKSk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0Ojpjb25zdHJ1
Y3RDb21tb24oKQotewotICAgIEZGVEZyYW1lOjppbml0aWFsaXplKCk7Ci0gICAgCi0gICAgbV9s
aXN0ZW5lciA9IEF1ZGlvTGlzdGVuZXI6OmNyZWF0ZSgpOwotfQotCi1BdWRpb0NvbnRleHQ6On5B
dWRpb0NvbnRleHQoKQotewotI2lmIERFQlVHX0FVRElPTk9ERV9SRUZFUkVOQ0VTCi0gICAgcHJp
bnRmKCIlcDogQXVkaW9Db250ZXh0Ojp+QXVkaW9Db250ZXh0KClcbiIsIHRoaXMpOwotI2VuZGlm
Ci0gICAgLy8gQXVkaW9Ob2RlcyBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZWlyIGNvbnRleHQsIHNv
IHRoZXJlIHNob3VsZCBiZSBubyB3YXkgdG8gYmUgaW4gdGhlIGRlc3RydWN0b3IgaWYgdGhlcmUg
YXJlIHN0aWxsIEF1ZGlvTm9kZXMgYXJvdW5kLgotICAgIEFTU0VSVCghbV9ub2Rlc1RvRGVsZXRl
LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFtX3JlZmVyZW5jZWROb2Rlcy5zaXplKCkpOwotICAgIEFT
U0VSVCghbV9maW5pc2hlZE5vZGVzLnNpemUoKSk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0Ojps
YXp5SW5pdGlhbGl6ZSgpCi17Ci0gICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQpIHsKLSAgICAgICAg
Ly8gRG9uJ3QgYWxsb3cgdGhlIGNvbnRleHQgdG8gaW5pdGlhbGl6ZSBhIHNlY29uZCB0aW1lIGFm
dGVyIGl0J3MgYWxyZWFkeSBiZWVuIGV4cGxpY2l0bHkgdW5pbml0aWFsaXplZC4KLSAgICAgICAg
QVNTRVJUKCFtX2lzQXVkaW9UaHJlYWRGaW5pc2hlZCk7Ci0gICAgICAgIGlmICghbV9pc0F1ZGlv
VGhyZWFkRmluaXNoZWQpIHsKLSAgICAgICAgICAgIGlmIChtX2Rlc3RpbmF0aW9uTm9kZS5nZXQo
KSkgewotICAgICAgICAgICAgICAgIG1fZGVzdGluYXRpb25Ob2RlLT5pbml0aWFsaXplKCk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoIWlzT2ZmbGluZUNvbnRleHQoKSkgewotICAgICAgICAgICAg
ICAgICAgICAvLyBUaGlzIHN0YXJ0cyB0aGUgYXVkaW8gdGhyZWFkLiBUaGUgZGVzdGluYXRpb24g
bm9kZSdzIHByb3ZpZGVJbnB1dCgpIG1ldGhvZCB3aWxsIG5vdyBiZSBjYWxsZWQgcmVwZWF0ZWRs
eSB0byByZW5kZXIgYXVkaW8uCi0gICAgICAgICAgICAgICAgICAgIC8vIEVhY2ggdGltZSBwcm92
aWRlSW5wdXQoKSBpcyBjYWxsZWQsIGEgcG9ydGlvbiBvZiB0aGUgYXVkaW8gc3RyZWFtIGlzIHJl
bmRlcmVkLiBMZXQncyBjYWxsIHRoaXMgdGltZSBwZXJpb2QgYSAicmVuZGVyIHF1YW50dW0iLgot
ICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiBmb3Igbm93IGRlZmF1bHQgQXVkaW9Db250ZXh0
IGRvZXMgbm90IG5lZWQgYW4gZXhwbGljaXQgc3RhcnRSZW5kZXJpbmcoKSBjYWxsIGZyb20gSmF2
YVNjcmlwdC4KLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgbWF5IHdhbnQgdG8gY29uc2lkZXIg
cmVxdWlyaW5nIGl0IGZvciBzeW1tZXRyeSB3aXRoIE9mZmxpbmVBdWRpb0NvbnRleHQuCi0gICAg
ICAgICAgICAgICAgICAgIG1fZGVzdGluYXRpb25Ob2RlLT5zdGFydFJlbmRlcmluZygpOyAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICsrc19oYXJkd2FyZUNvbnRleHRD
b3VudDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1f
aXNJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQXVkaW9D
b250ZXh0Ojp1bmluaXRpYWxpemUoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0K
LSAgICBpZiAobV9pc0luaXRpYWxpemVkKSB7Ci0gICAgICAgIC8vIFByb3RlY3QgdGhpcyBvYmpl
Y3QgZnJvbSBiZWluZyBkZWxldGVkIGJlZm9yZSB3ZSBmaW5pc2ggdW5pbml0aWFsaXppbmcuCi0g
ICAgICAgIFJlZlB0cjxBdWRpb0NvbnRleHQ+IHByb3RlY3QodGhpcyk7Ci0KLSAgICAgICAgLy8g
VGhpcyBzdG9wcyB0aGUgYXVkaW8gdGhyZWFkIGFuZCBhbGwgYXVkaW8gcmVuZGVyaW5nLgotICAg
ICAgICBtX2Rlc3RpbmF0aW9uTm9kZS0+dW5pbml0aWFsaXplKCk7Ci0KLSAgICAgICAgLy8gRG9u
J3QgYWxsb3cgdGhlIGNvbnRleHQgdG8gaW5pdGlhbGl6ZSBhIHNlY29uZCB0aW1lIGFmdGVyIGl0
J3MgYWxyZWFkeSBiZWVuIGV4cGxpY2l0bHkgdW5pbml0aWFsaXplZC4KLSAgICAgICAgbV9pc0F1
ZGlvVGhyZWFkRmluaXNoZWQgPSB0cnVlOwotCi0gICAgICAgIC8vIFdlIGhhdmUgdG8gcmVsZWFz
ZSBvdXIgcmVmZXJlbmNlIHRvIHRoZSBkZXN0aW5hdGlvbiBub2RlIGJlZm9yZSB0aGUgY29udGV4
dCB3aWxsIGV2ZXIgYmUgZGVsZXRlZCBzaW5jZSB0aGUgZGVzdGluYXRpb24gbm9kZSBob2xkcyBh
IHJlZmVyZW5jZSB0byB0aGUgY29udGV4dC4KLSAgICAgICAgbV9kZXN0aW5hdGlvbk5vZGUuY2xl
YXIoKTsKLQotICAgICAgICBpZiAoIWlzT2ZmbGluZUNvbnRleHQoKSkgewotICAgICAgICAgICAg
QVNTRVJUKHNfaGFyZHdhcmVDb250ZXh0Q291bnQpOwotICAgICAgICAgICAgLS1zX2hhcmR3YXJl
Q29udGV4dENvdW50OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBHZXQgcmlkIG9m
IHRoZSBzb3VyY2VzIHdoaWNoIG1heSBzdGlsbCBiZSBwbGF5aW5nLgotICAgICAgICBkZXJlZlVu
ZmluaXNoZWRTb3VyY2VOb2RlcygpOwotCi0gICAgICAgIGRlbGV0ZU1hcmtlZE5vZGVzKCk7Ci0K
LSAgICAgICAgbV9pc0luaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIEF1ZGlv
Q29udGV4dDo6aXNJbml0aWFsaXplZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faXNJbml0aWFs
aXplZDsKLX0KLQotYm9vbCBBdWRpb0NvbnRleHQ6OmlzUnVubmFibGUoKSBjb25zdAotewotICAg
IGlmICghaXNJbml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAg
Ly8gQ2hlY2sgd2l0aCB0aGUgSFJURiBzcGF0aWFsaXphdGlvbiBzeXN0ZW0gdG8gc2VlIGlmIGl0
J3MgZmluaXNoZWQgbG9hZGluZy4KLSAgICByZXR1cm4gbV9ocnRmRGF0YWJhc2VMb2FkZXItPmlz
TG9hZGVkKCk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0Ojp1bmluaXRpYWxpemVEaXNwYXRjaCh2
b2lkKiB1c2VyRGF0YSkKLXsKLSAgICBBdWRpb0NvbnRleHQqIGNvbnRleHQgPSByZWludGVycHJl
dF9jYXN0PEF1ZGlvQ29udGV4dCo+KHVzZXJEYXRhKTsKLSAgICBBU1NFUlQoY29udGV4dCk7Ci0g
ICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb250ZXh0LT51bmluaXRp
YWxpemUoKTsKLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OnN0b3AoKQotewotICAgIG1fZG9jdW1l
bnQgPSAwOyAvLyBkb2N1bWVudCBpcyBnb2luZyBhd2F5Ci0KLSAgICAvLyBEb24ndCBjYWxsIHVu
aW5pdGlhbGl6ZSgpIGltbWVkaWF0ZWx5IGhlcmUgYmVjYXVzZSB0aGUgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCBpcyBpbiB0aGUgbWlkZGxlCi0gICAgLy8gb2YgZGVhbGluZyB3aXRoIGFsbCBvZiBp
dHMgQWN0aXZlRE9NT2JqZWN0cyBhdCB0aGlzIHBvaW50LiB1bmluaXRpYWxpemUoKSBjYW4gZGUt
cmVmZXJlbmNlIG90aGVyCi0gICAgLy8gQWN0aXZlRE9NT2JqZWN0cyBzbyBsZXQncyBzY2hlZHVs
ZSB1bmluaXRpYWxpemUoKSB0byBiZSBjYWxsZWQgbGF0ZXIuCi0gICAgLy8gRklYTUU6IHNlZSBp
ZiB0aGVyZSdzIGEgbW9yZSBkaXJlY3Qgd2F5IHRvIGhhbmRsZSB0aGlzIGlzc3VlLgotICAgIGNh
bGxPbk1haW5UaHJlYWQodW5pbml0aWFsaXplRGlzcGF0Y2gsIHRoaXMpOwotfQotCi1Eb2N1bWVu
dCogQXVkaW9Db250ZXh0Ojpkb2N1bWVudCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fZG9jdW1l
bnQpOwotICAgIHJldHVybiBtX2RvY3VtZW50OwotfQotCi1ib29sIEF1ZGlvQ29udGV4dDo6aGFz
RG9jdW1lbnQoKQotewotICAgIHJldHVybiBtX2RvY3VtZW50OwotfQotCi1QYXNzUmVmUHRyPEF1
ZGlvQnVmZmVyPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcih1bnNpZ25lZCBudW1iZXJPZkNo
YW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMsIGZsb2F0IHNhbXBsZVJhdGUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIFJlZlB0cjxBdWRpb0J1ZmZlcj4gYXVkaW9CdWZmZXIgPSBBdWRp
b0J1ZmZlcjo6Y3JlYXRlKG51bWJlck9mQ2hhbm5lbHMsIG51bWJlck9mRnJhbWVzLCBzYW1wbGVS
YXRlKTsKLSAgICBpZiAoIWF1ZGlvQnVmZmVyLmdldCgpKSB7Ci0gICAgICAgIGVjID0gU1lOVEFY
X0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIGF1ZGlvQnVmZmVy
OwotfQotCi1QYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUJ1ZmZl
cihBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIsIGJvb2wgbWl4VG9Nb25vLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBBU1NFUlQoYXJyYXlCdWZmZXIpOwotICAgIGlmICghYXJyYXlCdWZmZXIp
IHsKLSAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0K
LSAgICBSZWZQdHI8QXVkaW9CdWZmZXI+IGF1ZGlvQnVmZmVyID0gQXVkaW9CdWZmZXI6OmNyZWF0
ZUZyb21BdWRpb0ZpbGVEYXRhKGFycmF5QnVmZmVyLT5kYXRhKCksIGFycmF5QnVmZmVyLT5ieXRl
TGVuZ3RoKCksIG1peFRvTW9ubywgc2FtcGxlUmF0ZSgpKTsKLSAgICBpZiAoIWF1ZGlvQnVmZmVy
LmdldCgpKSB7Ci0gICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGF1ZGlvQnVmZmVyOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6
ZGVjb2RlQXVkaW9EYXRhKEFycmF5QnVmZmVyKiBhdWRpb0RhdGEsIFBhc3NSZWZQdHI8QXVkaW9C
dWZmZXJDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyQ2Fs
bGJhY2s+IGVycm9yQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghYXVk
aW9EYXRhKSB7Ci0gICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBtX2F1ZGlvRGVjb2Rlci5kZWNvZGVBc3luYyhhdWRpb0RhdGEsIHNhbXBsZVJhdGUo
KSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTsKLX0KLQotUGFzc1JlZlB0cjxBdWRp
b0J1ZmZlclNvdXJjZU5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQnVmZmVyU291cmNlKCkKLXsK
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGxhenlJbml0aWFsaXplKCk7Ci0gICAg
UmVmUHRyPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4gbm9kZSA9IEF1ZGlvQnVmZmVyU291cmNlTm9k
ZTo6Y3JlYXRlKHRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkpOwotCi0gICAg
cmVmTm9kZShub2RlLmdldCgpKTsgLy8gY29udGV4dCBrZWVwcyByZWZlcmVuY2UgdW50aWwgc291
cmNlIGhhcyBmaW5pc2hlZCBwbGF5aW5nCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLSNpZiBFTkFC
TEUoVklERU8pCi1QYXNzUmVmUHRyPE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4gQXVkaW9D
b250ZXh0OjpjcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFF
bGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBBU1NFUlQobWVkaWFFbGVtZW50KTsK
LSAgICBpZiAoIW1lZGlhRWxlbWVudCkgewotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJS
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgICAgIAotICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0gICAgbGF6eUluaXRpYWxpemUoKTsKLSAgICAKLSAgICAvLyBGaXJzdCBjaGVj
ayBpZiB0aGlzIG1lZGlhIGVsZW1lbnQgYWxyZWFkeSBoYXMgYSBzb3VyY2Ugbm9kZS4KLSAgICBp
ZiAobWVkaWFFbGVtZW50LT5hdWRpb1NvdXJjZU5vZGUoKSkgewotICAgICAgICBlYyA9IElOVkFM
SURfU1RBVEVfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgICAgIAotICAgIFJl
ZlB0cjxNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+IG5vZGUgPSBNZWRpYUVsZW1lbnRBdWRp
b1NvdXJjZU5vZGU6OmNyZWF0ZSh0aGlzLCBtZWRpYUVsZW1lbnQpOwotCi0gICAgbWVkaWFFbGVt
ZW50LT5zZXRBdWRpb1NvdXJjZU5vZGUobm9kZS5nZXQoKSk7Ci0KLSAgICByZWZOb2RlKG5vZGUu
Z2V0KCkpOyAvLyBjb250ZXh0IGtlZXBzIHJlZmVyZW5jZSB1bnRpbCBub2RlIGlzIGRpc2Nvbm5l
Y3RlZAotICAgIHJldHVybiBub2RlOwotfQotI2VuZGlmCi0KLVBhc3NSZWZQdHI8SmF2YVNjcmlw
dEF1ZGlvTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVKYXZhU2NyaXB0Tm9kZShzaXplX3QgYnVm
ZmVyU2l6ZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGxhenlJbml0aWFs
aXplKCk7Ci0gICAgUmVmUHRyPEphdmFTY3JpcHRBdWRpb05vZGU+IG5vZGUgPSBKYXZhU2NyaXB0
QXVkaW9Ob2RlOjpjcmVhdGUodGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSwg
YnVmZmVyU2l6ZSk7Ci0KLSAgICByZWZOb2RlKG5vZGUuZ2V0KCkpOyAvLyBjb250ZXh0IGtlZXBz
IHJlZmVyZW5jZSB1bnRpbCB3ZSBzdG9wIG1ha2luZyBqYXZhc2NyaXB0IHJlbmRlcmluZyBjYWxs
YmFja3MKLSAgICByZXR1cm4gbm9kZTsKLX0KLQotUGFzc1JlZlB0cjxCaXF1YWRGaWx0ZXJOb2Rl
PiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUJpcXVhZEZpbHRlcigpCi17Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBsYXp5SW5pdGlhbGl6ZSgpOwotICAgIHJldHVybiBCaXF1YWRGaWx0
ZXJOb2RlOjpjcmVhdGUodGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7Ci19
Ci0KLVBhc3NSZWZQdHI8V2F2ZVNoYXBlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlV2F2ZVNo
YXBlcigpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBsYXp5SW5pdGlhbGl6
ZSgpOwotICAgIHJldHVybiBXYXZlU2hhcGVyTm9kZTo6Y3JlYXRlKHRoaXMpOwotfQotCi1QYXNz
UmVmUHRyPExvd1Bhc3MyRmlsdGVyTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVMb3dQYXNzMkZp
bHRlcigpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBsYXp5SW5pdGlhbGl6
ZSgpOwotICAgIGlmIChkb2N1bWVudCgpKQotICAgICAgICBkb2N1bWVudCgpLT5hZGRDb25zb2xl
TWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBXYXJuaW5nTWVzc2FnZUxl
dmVsLCAiY3JlYXRlTG93UGFzczJGaWx0ZXIoKSBpcyBkZXByZWNhdGVkLiAgVXNlIGNyZWF0ZUJp
cXVhZEZpbHRlcigpIGluc3RlYWQuIik7Ci0gICAgICAgIAotICAgIHJldHVybiBMb3dQYXNzMkZp
bHRlck5vZGU6OmNyZWF0ZSh0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpKTsK
LX0KLQotUGFzc1JlZlB0cjxIaWdoUGFzczJGaWx0ZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0
ZUhpZ2hQYXNzMkZpbHRlcigpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBs
YXp5SW5pdGlhbGl6ZSgpOwotICAgIGlmIChkb2N1bWVudCgpKQotICAgICAgICBkb2N1bWVudCgp
LT5hZGRDb25zb2xlTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBXYXJu
aW5nTWVzc2FnZUxldmVsLCAiY3JlYXRlSGlnaFBhc3MyRmlsdGVyKCkgaXMgZGVwcmVjYXRlZC4g
IFVzZSBjcmVhdGVCaXF1YWRGaWx0ZXIoKSBpbnN0ZWFkLiIpOwotCi0gICAgcmV0dXJuIEhpZ2hQ
YXNzMkZpbHRlck5vZGU6OmNyZWF0ZSh0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0
ZSgpKTsKLX0KLQotUGFzc1JlZlB0cjxBdWRpb1Bhbm5lck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3Jl
YXRlUGFubmVyKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGxhenlJbml0
aWFsaXplKCk7Ci0gICAgcmV0dXJuIEF1ZGlvUGFubmVyTm9kZTo6Y3JlYXRlKHRoaXMsIG1fZGVz
dGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkpOwotfQotCi1QYXNzUmVmUHRyPENvbnZvbHZlck5v
ZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ29udm9sdmVyKCkKLXsKLSAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotICAgIGxhenlJbml0aWFsaXplKCk7Ci0gICAgcmV0dXJuIENvbnZvbHZlck5v
ZGU6OmNyZWF0ZSh0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpKTsKLX0KLQot
UGFzc1JlZlB0cjxEeW5hbWljc0NvbXByZXNzb3JOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUR5
bmFtaWNzQ29tcHJlc3NvcigpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBs
YXp5SW5pdGlhbGl6ZSgpOwotICAgIHJldHVybiBEeW5hbWljc0NvbXByZXNzb3JOb2RlOjpjcmVh
dGUodGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7Ci19Ci0KLVBhc3NSZWZQ
dHI8UmVhbHRpbWVBbmFseXNlck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQW5hbHlzZXIoKQot
ewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbGF6eUluaXRpYWxpemUoKTsKLSAg
ICByZXR1cm4gUmVhbHRpbWVBbmFseXNlck5vZGU6OmNyZWF0ZSh0aGlzLCBtX2Rlc3RpbmF0aW9u
Tm9kZS0+c2FtcGxlUmF0ZSgpKTsKLX0KLQotUGFzc1JlZlB0cjxBdWRpb0dhaW5Ob2RlPiBBdWRp
b0NvbnRleHQ6OmNyZWF0ZUdhaW5Ob2RlKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIGxhenlJbml0aWFsaXplKCk7Ci0gICAgcmV0dXJuIEF1ZGlvR2Fpbk5vZGU6OmNyZWF0
ZSh0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpKTsKLX0KLQotUGFzc1JlZlB0
cjxEZWxheU5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlRGVsYXlOb2RlKCkKLXsKLSAgICBjb25z
dCBkb3VibGUgZGVmYXVsdE1heERlbGF5VGltZSA9IDE7Ci0gICAgcmV0dXJuIGNyZWF0ZURlbGF5
Tm9kZShkZWZhdWx0TWF4RGVsYXlUaW1lKTsKLX0KLQotUGFzc1JlZlB0cjxEZWxheU5vZGU+IEF1
ZGlvQ29udGV4dDo6Y3JlYXRlRGVsYXlOb2RlKGRvdWJsZSBtYXhEZWxheVRpbWUpCi17Ci0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBsYXp5SW5pdGlhbGl6ZSgpOwotICAgIHJldHVy
biBEZWxheU5vZGU6OmNyZWF0ZSh0aGlzLCBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgp
LCBtYXhEZWxheVRpbWUpOwotfQotCi1QYXNzUmVmUHRyPEF1ZGlvQ2hhbm5lbFNwbGl0dGVyPiBB
dWRpb0NvbnRleHQ6OmNyZWF0ZUNoYW5uZWxTcGxpdHRlcigpCi17Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBsYXp5SW5pdGlhbGl6ZSgpOwotICAgIHJldHVybiBBdWRpb0NoYW5u
ZWxTcGxpdHRlcjo6Y3JlYXRlKHRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkp
OwotfQotCi1QYXNzUmVmUHRyPEF1ZGlvQ2hhbm5lbE1lcmdlcj4gQXVkaW9Db250ZXh0OjpjcmVh
dGVDaGFubmVsTWVyZ2VyKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGxh
enlJbml0aWFsaXplKCk7Ci0gICAgcmV0dXJuIEF1ZGlvQ2hhbm5lbE1lcmdlcjo6Y3JlYXRlKHRo
aXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkpOwotfQotCi12b2lkIEF1ZGlvQ29u
dGV4dDo6bm90aWZ5Tm9kZUZpbmlzaGVkUHJvY2Vzc2luZyhBdWRpb05vZGUqIG5vZGUpCi17Ci0g
ICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSk7Ci0gICAgbV9maW5pc2hlZE5vZGVzLmFwcGVuZChu
b2RlKTsKLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OmRlcmVmRmluaXNoZWRTb3VyY2VOb2Rlcygp
Ci17Ci0gICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsKLSAgICBBU1NFUlQoaXNBdWRpb1RocmVh
ZCgpIHx8IGlzQXVkaW9UaHJlYWRGaW5pc2hlZCgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9maW5pc2hlZE5vZGVzLnNpemUoKTsgaSsrKQotICAgICAgICBkZXJlZk5vZGUobV9m
aW5pc2hlZE5vZGVzW2ldKTsKLQotICAgIG1fZmluaXNoZWROb2Rlcy5jbGVhcigpOwotfQotCi12
b2lkIEF1ZGlvQ29udGV4dDo6cmVmTm9kZShBdWRpb05vZGUqIG5vZGUpCi17Ci0gICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLSAgICBBdXRvTG9ja2VyIGxvY2tlcih0aGlzKTsKLSAgICAKLSAg
ICBub2RlLT5yZWYoQXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7Ci0gICAgbV9yZWZlcmVu
Y2VkTm9kZXMuYXBwZW5kKG5vZGUpOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6ZGVyZWZOb2Rl
KEF1ZGlvTm9kZSogbm9kZSkKLXsKLSAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwotICAgIAot
ICAgIG5vZGUtPmRlcmVmKEF1ZGlvTm9kZTo6UmVmVHlwZUNvbm5lY3Rpb24pOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcmVmZXJlbmNlZE5vZGVzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGlmIChub2RlID09IG1fcmVmZXJlbmNlZE5vZGVzW2ldKSB7Ci0gICAgICAgICAgICBt
X3JlZmVyZW5jZWROb2Rlcy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OmRlcmVmVW5maW5pc2hlZFNvdXJjZU5v
ZGVzKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkgJiYgaXNBdWRpb1RocmVhZEZpbmlz
aGVkKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3JlZmVyZW5jZWROb2Rlcy5z
aXplKCk7ICsraSkKLSAgICAgICAgbV9yZWZlcmVuY2VkTm9kZXNbaV0tPmRlcmVmKEF1ZGlvTm9k
ZTo6UmVmVHlwZUNvbm5lY3Rpb24pOwotCi0gICAgbV9yZWZlcmVuY2VkTm9kZXMuY2xlYXIoKTsK
LX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OmxvY2soYm9vbCYgbXVzdFJlbGVhc2VMb2NrKQotewot
ICAgIC8vIERvbid0IGFsbG93IHJlZ3VsYXIgbG9jayBpbiByZWFsLXRpbWUgYXVkaW8gdGhyZWFk
LgotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBUaHJlYWRJZGVudGlmaWVyIHRo
aXNUaHJlYWQgPSBjdXJyZW50VGhyZWFkKCk7Ci0KLSAgICBpZiAodGhpc1RocmVhZCA9PSBtX2dy
YXBoT3duZXJUaHJlYWQpIHsKLSAgICAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIHRoZSBsb2NrLgot
ICAgICAgICBtdXN0UmVsZWFzZUxvY2sgPSBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgICAgICAv
LyBBY3F1aXJlIHRoZSBsb2NrLgotICAgICAgICBtX2NvbnRleHRHcmFwaE11dGV4LmxvY2soKTsK
LSAgICAgICAgbV9ncmFwaE93bmVyVGhyZWFkID0gdGhpc1RocmVhZDsKLSAgICAgICAgbXVzdFJl
bGVhc2VMb2NrID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQXVkaW9Db250ZXh0Ojp0cnlMb2Nr
KGJvb2wmIG11c3RSZWxlYXNlTG9jaykKLXsKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRoaXNUaHJl
YWQgPSBjdXJyZW50VGhyZWFkKCk7Ci0gICAgYm9vbCBpc0F1ZGlvVGhyZWFkID0gdGhpc1RocmVh
ZCA9PSBhdWRpb1RocmVhZCgpOwotCi0gICAgLy8gVHJ5IHRvIGNhdGNoIGNhc2VzIG9mIHVzaW5n
IHRyeSBsb2NrIG9uIG1haW4gdGhyZWFkIC0gaXQgc2hvdWxkIHVzZSByZWd1bGFyIGxvY2suCi0g
ICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQgfHwgaXNBdWRpb1RocmVhZEZpbmlzaGVkKCkpOwotICAg
IAotICAgIGlmICghaXNBdWRpb1RocmVhZCkgewotICAgICAgICAvLyBJbiByZWxlYXNlIGJ1aWxk
IHRyZWF0IHRyeUxvY2soKSBhcyBsb2NrKCkgKHNpbmNlIGFib3ZlIEFTU0VSVChpc0F1ZGlvVGhy
ZWFkKSBuZXZlciBmaXJlcykgLSB0aGlzIGlzIHRoZSBiZXN0IHdlIGNhbiBkby4KLSAgICAgICAg
bG9jayhtdXN0UmVsZWFzZUxvY2spOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAg
Ci0gICAgYm9vbCBoYXNMb2NrOwotICAgIAotICAgIGlmICh0aGlzVGhyZWFkID09IG1fZ3JhcGhP
d25lclRocmVhZCkgewotICAgICAgICAvLyBUaHJlYWQgYWxyZWFkeSBoYXMgdGhlIGxvY2suCi0g
ICAgICAgIGhhc0xvY2sgPSB0cnVlOwotICAgICAgICBtdXN0UmVsZWFzZUxvY2sgPSBmYWxzZTsK
LSAgICB9IGVsc2UgewotICAgICAgICAvLyBEb24ndCBhbHJlYWR5IGhhdmUgdGhlIGxvY2sgLSB0
cnkgdG8gYWNxdWlyZSBpdC4KLSAgICAgICAgaGFzTG9jayA9IG1fY29udGV4dEdyYXBoTXV0ZXgu
dHJ5TG9jaygpOwotICAgICAgICAKLSAgICAgICAgaWYgKGhhc0xvY2spCi0gICAgICAgICAgICBt
X2dyYXBoT3duZXJUaHJlYWQgPSB0aGlzVGhyZWFkOwotCi0gICAgICAgIG11c3RSZWxlYXNlTG9j
ayA9IGhhc0xvY2s7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBoYXNMb2NrOwotfQotCi12b2lk
IEF1ZGlvQ29udGV4dDo6dW5sb2NrKCkKLXsKLSAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09
IG1fZ3JhcGhPd25lclRocmVhZCk7Ci0KLSAgICBtX2dyYXBoT3duZXJUaHJlYWQgPSBVbmRlZmlu
ZWRUaHJlYWRJZGVudGlmaWVyOwotICAgIG1fY29udGV4dEdyYXBoTXV0ZXgudW5sb2NrKCk7Ci19
Ci0KLWJvb2wgQXVkaW9Db250ZXh0Ojppc0F1ZGlvVGhyZWFkKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gY3VycmVudFRocmVhZCgpID09IG1fYXVkaW9UaHJlYWQ7Ci19Ci0KLWJvb2wgQXVkaW9Db250
ZXh0Ojppc0dyYXBoT3duZXIoKSBjb25zdAotewotICAgIHJldHVybiBjdXJyZW50VGhyZWFkKCkg
PT0gbV9ncmFwaE93bmVyVGhyZWFkOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6YWRkRGVmZXJy
ZWRGaW5pc2hEZXJlZihBdWRpb05vZGUqIG5vZGUsIEF1ZGlvTm9kZTo6UmVmVHlwZSByZWZUeXBl
KQotewotICAgIEFTU0VSVChpc0F1ZGlvVGhyZWFkKCkpOwotICAgIG1fZGVmZXJyZWRGaW5pc2hE
ZXJlZkxpc3QuYXBwZW5kKEF1ZGlvQ29udGV4dDo6UmVmSW5mbyhub2RlLCByZWZUeXBlKSk7Ci19
Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpoYW5kbGVQcmVSZW5kZXJUYXNrcygpCi17Ci0gICAgQVNT
RVJUKGlzQXVkaW9UaHJlYWQoKSk7Ci0gCi0gICAgLy8gQXQgdGhlIGJlZ2lubmluZyBvZiBldmVy
eSByZW5kZXIgcXVhbnR1bSwgdHJ5IHRvIHVwZGF0ZSB0aGUgaW50ZXJuYWwgcmVuZGVyaW5nIGdy
YXBoIHN0YXRlIChmcm9tIG1haW4gdGhyZWFkIGNoYW5nZXMpLgotICAgIC8vIEl0J3MgT0sgaWYg
dGhlIHRyeUxvY2soKSBmYWlscywgd2UnbGwganVzdCB0YWtlIHNsaWdodGx5IGxvbmdlciB0byBw
aWNrIHVwIHRoZSBjaGFuZ2VzLgotICAgIGJvb2wgbXVzdFJlbGVhc2VMb2NrOwotICAgIGlmICh0
cnlMb2NrKG11c3RSZWxlYXNlTG9jaykpIHsKLSAgICAgICAgLy8gRml4dXAgdGhlIHN0YXRlIG9m
IGFueSBkaXJ0eSBBdWRpb05vZGVJbnB1dHMgYW5kIEF1ZGlvTm9kZU91dHB1dHMuCi0gICAgICAg
IGhhbmRsZURpcnR5QXVkaW9Ob2RlSW5wdXRzKCk7Ci0gICAgICAgIGhhbmRsZURpcnR5QXVkaW9O
b2RlT3V0cHV0cygpOwotICAgICAgICAKLSAgICAgICAgaWYgKG11c3RSZWxlYXNlTG9jaykKLSAg
ICAgICAgICAgIHVubG9jaygpOwotICAgIH0KLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OmhhbmRs
ZVBvc3RSZW5kZXJUYXNrcygpCi17Ci0gICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSk7Ci0gCi0g
ICAgLy8gTXVzdCB1c2UgYSB0cnlMb2NrKCkgaGVyZSB0b28uICBEb24ndCB3b3JyeSwgdGhlIGxv
Y2sgd2lsbCB2ZXJ5IHJhcmVseSBiZSBjb250ZW5kZWQgYW5kIHRoaXMgbWV0aG9kIGlzIGNhbGxl
ZCBmcmVxdWVudGx5LgotICAgIC8vIFRoZSB3b3JzdCB0aGF0IGNhbiBoYXBwZW4gaXMgdGhhdCB0
aGVyZSB3aWxsIGJlIHNvbWUgbm9kZXMgd2hpY2ggd2lsbCB0YWtlIHNsaWdodGx5IGxvbmdlciB0
aGFuIHVzdWFsIHRvIGJlIGRlbGV0ZWQgb3IgcmVtb3ZlZAotICAgIC8vIGZyb20gdGhlIHJlbmRl
ciBncmFwaCAoaW4gd2hpY2ggY2FzZSB0aGV5J2xsIHJlbmRlciBzaWxlbmNlKS4KLSAgICBib29s
IG11c3RSZWxlYXNlTG9jazsKLSAgICBpZiAodHJ5TG9jayhtdXN0UmVsZWFzZUxvY2spKSB7Ci0g
ICAgICAgIC8vIFRha2UgY2FyZSBvZiBmaW5pc2hpbmcgYW55IGRlcmVmcyB3aGVyZSB0aGUgdHJ5
TG9jaygpIGZhaWxlZCBwcmV2aW91c2x5LgotICAgICAgICBoYW5kbGVEZWZlcnJlZEZpbmlzaERl
cmVmcygpOwotCi0gICAgICAgIC8vIER5bmFtaWNhbGx5IGNsZWFuIHVwIG5vZGVzIHdoaWNoIGFy
ZSBubyBsb25nZXIgbmVlZGVkLgotICAgICAgICBkZXJlZkZpbmlzaGVkU291cmNlTm9kZXMoKTsK
LQotICAgICAgICAvLyBEb24ndCBkZWxldGUgaW4gdGhlIHJlYWwtdGltZSB0aHJlYWQuIExldCB0
aGUgbWFpbiB0aHJlYWQgZG8gaXQuCi0gICAgICAgIC8vIFJlZi1jb3VudGVkIG9iamVjdHMgaGVs
ZCBieSBjZXJ0YWluIEF1ZGlvTm9kZXMgbWF5IG5vdCBiZSB0aHJlYWQtc2FmZS4KLSAgICAgICAg
c2NoZWR1bGVOb2RlRGVsZXRpb24oKTsKLQotICAgICAgICAvLyBGaXh1cCB0aGUgc3RhdGUgb2Yg
YW55IGRpcnR5IEF1ZGlvTm9kZUlucHV0cyBhbmQgQXVkaW9Ob2RlT3V0cHV0cy4KLSAgICAgICAg
aGFuZGxlRGlydHlBdWRpb05vZGVJbnB1dHMoKTsKLSAgICAgICAgaGFuZGxlRGlydHlBdWRpb05v
ZGVPdXRwdXRzKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAobXVzdFJlbGVhc2VMb2NrKQotICAg
ICAgICAgICAgdW5sb2NrKCk7Ci0gICAgfQotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxl
RGVmZXJyZWRGaW5pc2hEZXJlZnMoKQotewotICAgIEFTU0VSVChpc0F1ZGlvVGhyZWFkKCkgJiYg
aXNHcmFwaE93bmVyKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2RlZmVycmVk
RmluaXNoRGVyZWZMaXN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEF1ZGlvTm9kZSogbm9kZSA9
IG1fZGVmZXJyZWRGaW5pc2hEZXJlZkxpc3RbaV0ubV9ub2RlOwotICAgICAgICBBdWRpb05vZGU6
OlJlZlR5cGUgcmVmVHlwZSA9IG1fZGVmZXJyZWRGaW5pc2hEZXJlZkxpc3RbaV0ubV9yZWZUeXBl
OwotICAgICAgICBub2RlLT5maW5pc2hEZXJlZihyZWZUeXBlKTsKLSAgICB9Ci0gICAgCi0gICAg
bV9kZWZlcnJlZEZpbmlzaERlcmVmTGlzdC5jbGVhcigpOwotfQotCi12b2lkIEF1ZGlvQ29udGV4
dDo6bWFya0ZvckRlbGV0aW9uKEF1ZGlvTm9kZSogbm9kZSkKLXsKLSAgICBBU1NFUlQoaXNHcmFw
aE93bmVyKCkpOwotICAgIG1fbm9kZXNUb0RlbGV0ZS5hcHBlbmQobm9kZSk7Ci19Ci0KLXZvaWQg
QXVkaW9Db250ZXh0OjpzY2hlZHVsZU5vZGVEZWxldGlvbigpCi17Ci0gICAgYm9vbCBpc0dvb2Qg
PSBtX2lzSW5pdGlhbGl6ZWQgJiYgaXNHcmFwaE93bmVyKCk7Ci0gICAgQVNTRVJUKGlzR29vZCk7
Ci0gICAgaWYgKCFpc0dvb2QpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE1ha2Ugc3VyZSB0
byBjYWxsIGRlbGV0ZU1hcmtlZE5vZGVzKCkgb24gbWFpbiB0aHJlYWQuICAgIAotICAgIGlmICht
X25vZGVzVG9EZWxldGUuc2l6ZSgpICYmICFtX2lzRGVsZXRpb25TY2hlZHVsZWQpIHsKLSAgICAg
ICAgbV9pc0RlbGV0aW9uU2NoZWR1bGVkID0gdHJ1ZTsKLQotICAgICAgICAvLyBEb24ndCBsZXQg
b3Vyc2VsZiBnZXQgZGVsZXRlZCBiZWZvcmUgdGhlIGNhbGxiYWNrLgotICAgICAgICAvLyBTZWUg
bWF0Y2hpbmcgZGVyZWYoKSBpbiBkZWxldGVNYXJrZWROb2Rlc0Rpc3BhdGNoKCkuCi0gICAgICAg
IHJlZigpOwotICAgICAgICBjYWxsT25NYWluVGhyZWFkKGRlbGV0ZU1hcmtlZE5vZGVzRGlzcGF0
Y2gsIHRoaXMpOwotICAgIH0KLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OmRlbGV0ZU1hcmtlZE5v
ZGVzRGlzcGF0Y2godm9pZCogdXNlckRhdGEpCi17Ci0gICAgQXVkaW9Db250ZXh0KiBjb250ZXh0
ID0gcmVpbnRlcnByZXRfY2FzdDxBdWRpb0NvbnRleHQqPih1c2VyRGF0YSk7Ci0gICAgQVNTRVJU
KGNvbnRleHQpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29u
dGV4dC0+ZGVsZXRlTWFya2VkTm9kZXMoKTsKLSAgICBjb250ZXh0LT5kZXJlZigpOwotfQotCi12
b2lkIEF1ZGlvQ29udGV4dDo6ZGVsZXRlTWFya2VkTm9kZXMoKQotewotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0KLSAgICBBdXRvTG9ja2VyIGxvY2tlcih0aGlzKTsKLSAgICAKLSAgICAv
LyBOb3RlOiBkZWxldGluZyBhbiBBdWRpb05vZGUgY2FuIGNhdXNlIG1fbm9kZXNUb0RlbGV0ZSB0
byBncm93LgotICAgIHdoaWxlIChzaXplX3QgbiA9IG1fbm9kZXNUb0RlbGV0ZS5zaXplKCkpIHsK
LSAgICAgICAgQXVkaW9Ob2RlKiBub2RlID0gbV9ub2Rlc1RvRGVsZXRlW24gLSAxXTsKLSAgICAg
ICAgbV9ub2Rlc1RvRGVsZXRlLnJlbW92ZUxhc3QoKTsKLQotICAgICAgICAvLyBCZWZvcmUgZGVs
ZXRpbmcgdGhlIG5vZGUsIGNsZWFyIG91dCBhbnkgQXVkaW9Ob2RlSW5wdXRzIGZyb20gbV9kaXJ0
eUF1ZGlvTm9kZUlucHV0cy4KLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dHMgPSBub2Rl
LT5udW1iZXJPZklucHV0cygpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
YmVyT2ZJbnB1dHM7ICsraSkKLSAgICAgICAgICAgIG1fZGlydHlBdWRpb05vZGVJbnB1dHMucmVt
b3ZlKG5vZGUtPmlucHV0KGkpKTsKLQotICAgICAgICAvLyBCZWZvcmUgZGVsZXRpbmcgdGhlIG5v
ZGUsIGNsZWFyIG91dCBhbnkgQXVkaW9Ob2RlT3V0cHV0cyBmcm9tIG1fZGlydHlBdWRpb05vZGVP
dXRwdXRzLgotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZk91dHB1dHMgPSBub2RlLT5udW1iZXJP
Zk91dHB1dHMoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mT3V0
cHV0czsgKytpKQotICAgICAgICAgICAgbV9kaXJ0eUF1ZGlvTm9kZU91dHB1dHMucmVtb3ZlKG5v
ZGUtPm91dHB1dChpKSk7Ci0KLSAgICAgICAgLy8gRmluYWxseSwgZGVsZXRlIGl0LgotICAgICAg
ICBkZWxldGUgbm9kZTsKLSAgICB9Ci0gICAgCi0gICAgbV9pc0RlbGV0aW9uU2NoZWR1bGVkID0g
ZmFsc2U7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjptYXJrQXVkaW9Ob2RlSW5wdXREaXJ0eShB
dWRpb05vZGVJbnB1dCogaW5wdXQpCi17Ci0gICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsgICAg
Ci0gICAgbV9kaXJ0eUF1ZGlvTm9kZUlucHV0cy5hZGQoaW5wdXQpOwotfQotCi12b2lkIEF1ZGlv
Q29udGV4dDo6bWFya0F1ZGlvTm9kZU91dHB1dERpcnR5KEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0
KQotewotICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7ICAgIAotICAgIG1fZGlydHlBdWRpb05v
ZGVPdXRwdXRzLmFkZChvdXRwdXQpOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxlRGly
dHlBdWRpb05vZGVJbnB1dHMoKQotewotICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7ICAgIAot
Ci0gICAgZm9yIChIYXNoU2V0PEF1ZGlvTm9kZUlucHV0Kj46Oml0ZXJhdG9yIGkgPSBtX2RpcnR5
QXVkaW9Ob2RlSW5wdXRzLmJlZ2luKCk7IGkgIT0gbV9kaXJ0eUF1ZGlvTm9kZUlucHV0cy5lbmQo
KTsgKytpKQotICAgICAgICAoKmkpLT51cGRhdGVSZW5kZXJpbmdTdGF0ZSgpOwotCi0gICAgbV9k
aXJ0eUF1ZGlvTm9kZUlucHV0cy5jbGVhcigpOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6aGFu
ZGxlRGlydHlBdWRpb05vZGVPdXRwdXRzKCkKLXsKLSAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkp
OyAgICAKLQotICAgIGZvciAoSGFzaFNldDxBdWRpb05vZGVPdXRwdXQqPjo6aXRlcmF0b3IgaSA9
IG1fZGlydHlBdWRpb05vZGVPdXRwdXRzLmJlZ2luKCk7IGkgIT0gbV9kaXJ0eUF1ZGlvTm9kZU91
dHB1dHMuZW5kKCk7ICsraSkKLSAgICAgICAgKCppKS0+dXBkYXRlUmVuZGVyaW5nU3RhdGUoKTsK
LQotICAgIG1fZGlydHlBdWRpb05vZGVPdXRwdXRzLmNsZWFyKCk7Ci19Ci0KLWNvbnN0IEF0b21p
Y1N0cmluZyYgQXVkaW9Db250ZXh0OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvckF1ZGlvQ29udGV4dDsKLX0KLQotU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogQXVkaW9Db250ZXh0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZG9jdW1lbnQoKTsKLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OnN0
YXJ0UmVuZGVyaW5nKCkKLXsKLSAgICBkZXN0aW5hdGlvbigpLT5zdGFydFJlbmRlcmluZygpOwot
fQotCi12b2lkIEF1ZGlvQ29udGV4dDo6ZmlyZUNvbXBsZXRpb25FdmVudCgpCi17Ci0gICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIWlzTWFpblRocmVhZCgpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIAotICAgIEF1ZGlvQnVmZmVyKiByZW5kZXJlZEJ1ZmZlciA9IG1fcmVu
ZGVyVGFyZ2V0LmdldCgpOwotCi0gICAgQVNTRVJUKHJlbmRlcmVkQnVmZmVyKTsKLSAgICBpZiAo
IXJlbmRlcmVkQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBBdm9pZCBmaXJpbmcg
dGhlIGV2ZW50IGlmIHRoZSBkb2N1bWVudCBoYXMgYWxyZWFkeSBnb25lIGF3YXkuCi0gICAgaWYg
KGhhc0RvY3VtZW50KCkpIHsKLSAgICAgICAgLy8gQ2FsbCB0aGUgb2ZmbGluZSByZW5kZXJpbmcg
Y29tcGxldGlvbiBldmVudCBsaXN0ZW5lci4KLSAgICAgICAgZGlzcGF0Y2hFdmVudChPZmZsaW5l
QXVkaW9Db21wbGV0aW9uRXZlbnQ6OmNyZWF0ZShyZW5kZXJlZEJ1ZmZlcikpOwotICAgIH0KLX0K
LQotdm9pZCBBdWRpb0NvbnRleHQ6OmluY3JlbWVudEFjdGl2ZVNvdXJjZUNvdW50KCkKLXsKLSAg
ICBhdG9taWNJbmNyZW1lbnQoJm1fYWN0aXZlU291cmNlQ291bnQpOwotfQotCi12b2lkIEF1ZGlv
Q29udGV4dDo6ZGVjcmVtZW50QWN0aXZlU291cmNlQ291bnQoKQotewotICAgIGF0b21pY0RlY3Jl
bWVudCgmbV9hY3RpdmVTb3VyY2VDb3VudCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9BdWRpb0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb0NvbnRleHQuaAkocmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMzI1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIEF1ZGlvQ29udGV4dF9oCi0jZGVmaW5lIEF1ZGlvQ29udGV4dF9o
Ci0KLSNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJBc3luY0F1ZGlvRGVj
b2Rlci5oIgotI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCi0jaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlv
bk5vZGUuaCIKLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiRXZlbnRUYXJn
ZXQuaCIKLSNpbmNsdWRlICJIUlRGRGF0YWJhc2VMb2FkZXIuaCIKLSNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVS
ZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9CdWZmZXI7Ci1jbGFzcyBBdWRpb0J1ZmZlckNh
bGxiYWNrOwotY2xhc3MgQXVkaW9CdWZmZXJTb3VyY2VOb2RlOwotY2xhc3MgTWVkaWFFbGVtZW50
QXVkaW9Tb3VyY2VOb2RlOwotY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKLWNsYXNzIEF1ZGlvQ2hh
bm5lbE1lcmdlcjsKLWNsYXNzIEF1ZGlvQ2hhbm5lbFNwbGl0dGVyOwotY2xhc3MgQXVkaW9HYWlu
Tm9kZTsKLWNsYXNzIEF1ZGlvUGFubmVyTm9kZTsKLWNsYXNzIEF1ZGlvTGlzdGVuZXI7Ci1jbGFz
cyBCaXF1YWRGaWx0ZXJOb2RlOwotY2xhc3MgRGVsYXlOb2RlOwotY2xhc3MgRG9jdW1lbnQ7Ci1j
bGFzcyBMb3dQYXNzMkZpbHRlck5vZGU7Ci1jbGFzcyBIaWdoUGFzczJGaWx0ZXJOb2RlOwotY2xh
c3MgQ29udm9sdmVyTm9kZTsKLWNsYXNzIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU7Ci1jbGFzcyBS
ZWFsdGltZUFuYWx5c2VyTm9kZTsKLWNsYXNzIFdhdmVTaGFwZXJOb2RlOwotY2xhc3MgSmF2YVNj
cmlwdEF1ZGlvTm9kZTsKLQotLy8gQXVkaW9Db250ZXh0IGlzIHRoZSBjb3JuZXJzdG9uZSBvZiB0
aGUgd2ViIGF1ZGlvIEFQSSBhbmQgYWxsIEF1ZGlvTm9kZXMgYXJlIGNyZWF0ZWQgZnJvbSBpdC4K
LS8vIEZvciB0aHJlYWQgc2FmZXR5IGJldHdlZW4gdGhlIGF1ZGlvIHRocmVhZCBhbmQgdGhlIG1h
aW4gdGhyZWFkLCBpdCBoYXMgYSByZW5kZXJpbmcgZ3JhcGggbG9ja2luZyBtZWNoYW5pc20uIAot
Ci1jbGFzcyBBdWRpb0NvbnRleHQgOiBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8QXVkaW9Db250ZXh0PiwgcHVibGljIEV2ZW50VGFyZ2V0IHsKLXB1
YmxpYzoKLSAgICAvLyBDcmVhdGUgYW4gQXVkaW9Db250ZXh0IGZvciByZW5kZXJpbmcgdG8gdGhl
IGF1ZGlvIGhhcmR3YXJlLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlvQ29udGV4dD4gY3Jl
YXRlKERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgLy8gQ3JlYXRlIGFuIEF1ZGlv
Q29udGV4dCBmb3Igb2ZmbGluZSAobm9uLXJlYWx0aW1lKSByZW5kZXJpbmcuCi0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8QXVkaW9Db250ZXh0PiBjcmVhdGVPZmZsaW5lQ29udGV4dChEb2N1bWVudCos
IHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQg
c2FtcGxlUmF0ZSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdmlydHVhbCB+QXVkaW9Db250ZXh0
KCk7Ci0KLSAgICBib29sIGlzSW5pdGlhbGl6ZWQoKSBjb25zdDsKLSAgICAKLSAgICBib29sIGlz
T2ZmbGluZUNvbnRleHQoKSB7IHJldHVybiBtX2lzT2ZmbGluZUNvbnRleHQ7IH0KLQotICAgIC8v
IFJldHVybnMgdHJ1ZSB3aGVuIGluaXRpYWxpemUoKSB3YXMgY2FsbGVkIEFORCBhbGwgYXN5bmNo
cm9ub3VzIGluaXRpYWxpemF0aW9uIGhhcyBjb21wbGV0ZWQuCi0gICAgYm9vbCBpc1J1bm5hYmxl
KCkgY29uc3Q7Ci0KLSAgICAvLyBEb2N1bWVudCBub3RpZmljYXRpb24KLSAgICB2aXJ0dWFsIHZv
aWQgc3RvcCgpOwotCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7IC8vIEFTU0VSVHMg
aWYgZG9jdW1lbnQgbm8gbG9uZ2VyIGV4aXN0cy4KLSAgICBib29sIGhhc0RvY3VtZW50KCk7Ci0K
LSAgICBBdWRpb0Rlc3RpbmF0aW9uTm9kZSogZGVzdGluYXRpb24oKSB7IHJldHVybiBtX2Rlc3Rp
bmF0aW9uTm9kZS5nZXQoKTsgfQotICAgIHNpemVfdCBjdXJyZW50U2FtcGxlRnJhbWUoKSB7IHJl
dHVybiBtX2Rlc3RpbmF0aW9uTm9kZS0+Y3VycmVudFNhbXBsZUZyYW1lKCk7IH0KLSAgICBkb3Vi
bGUgY3VycmVudFRpbWUoKSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZS0+Y3VycmVudFRpbWUo
KTsgfQotICAgIGZsb2F0IHNhbXBsZVJhdGUoKSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZS0+
c2FtcGxlUmF0ZSgpOyB9Ci0gICAgdW5zaWduZWQgbG9uZyBhY3RpdmVTb3VyY2VDb3VudCgpIHsg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KG1fYWN0aXZlU291cmNlQ291bnQpOyB9
Ci0KLSAgICB2b2lkIGluY3JlbWVudEFjdGl2ZVNvdXJjZUNvdW50KCk7Ci0gICAgdm9pZCBkZWNy
ZW1lbnRBY3RpdmVTb3VyY2VDb3VudCgpOwotICAgIAotICAgIFBhc3NSZWZQdHI8QXVkaW9CdWZm
ZXI+IGNyZWF0ZUJ1ZmZlcih1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBzaXplX3QgbnVtYmVy
T2ZGcmFtZXMsIGZsb2F0IHNhbXBsZVJhdGUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVm
UHRyPEF1ZGlvQnVmZmVyPiBjcmVhdGVCdWZmZXIoQXJyYXlCdWZmZXIqLCBib29sIG1peFRvTW9u
bywgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgLy8gQXN5bmNocm9ub3VzIGF1ZGlvIGZpbGUgZGF0
YSBkZWNvZGluZy4KLSAgICB2b2lkIGRlY29kZUF1ZGlvRGF0YShBcnJheUJ1ZmZlciosIFBhc3NS
ZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4sIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFj
az4sIEV4Y2VwdGlvbkNvZGUmIGVjKTsKLQotICAgIEF1ZGlvTGlzdGVuZXIqIGxpc3RlbmVyKCkg
eyByZXR1cm4gbV9saXN0ZW5lci5nZXQoKTsgfQotCi0gICAgLy8gVGhlIEF1ZGlvTm9kZSBjcmVh
dGUgbWV0aG9kcyBhcmUgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZCAoZnJvbSBKYXZhU2NyaXB0
KS4KLSAgICBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4gY3JlYXRlQnVmZmVyU291
cmNlKCk7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIFBhc3NSZWZQdHI8TWVkaWFFbGVtZW50QXVk
aW9Tb3VyY2VOb2RlPiBjcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UoSFRNTE1lZGlhRWxlbWVudCos
IEV4Y2VwdGlvbkNvZGUmKTsKLSNlbmRpZgotICAgIFBhc3NSZWZQdHI8QXVkaW9HYWluTm9kZT4g
Y3JlYXRlR2Fpbk5vZGUoKTsKLSAgICBQYXNzUmVmUHRyPEJpcXVhZEZpbHRlck5vZGU+IGNyZWF0
ZUJpcXVhZEZpbHRlcigpOwotICAgIFBhc3NSZWZQdHI8V2F2ZVNoYXBlck5vZGU+IGNyZWF0ZVdh
dmVTaGFwZXIoKTsKLSAgICBQYXNzUmVmUHRyPERlbGF5Tm9kZT4gY3JlYXRlRGVsYXlOb2RlKCk7
Ci0gICAgUGFzc1JlZlB0cjxEZWxheU5vZGU+IGNyZWF0ZURlbGF5Tm9kZShkb3VibGUgbWF4RGVs
YXlUaW1lKTsKLSAgICBQYXNzUmVmUHRyPExvd1Bhc3MyRmlsdGVyTm9kZT4gY3JlYXRlTG93UGFz
czJGaWx0ZXIoKTsKLSAgICBQYXNzUmVmUHRyPEhpZ2hQYXNzMkZpbHRlck5vZGU+IGNyZWF0ZUhp
Z2hQYXNzMkZpbHRlcigpOwotICAgIFBhc3NSZWZQdHI8QXVkaW9QYW5uZXJOb2RlPiBjcmVhdGVQ
YW5uZXIoKTsKLSAgICBQYXNzUmVmUHRyPENvbnZvbHZlck5vZGU+IGNyZWF0ZUNvbnZvbHZlcigp
OwotICAgIFBhc3NSZWZQdHI8RHluYW1pY3NDb21wcmVzc29yTm9kZT4gY3JlYXRlRHluYW1pY3ND
b21wcmVzc29yKCk7ICAgIAotICAgIFBhc3NSZWZQdHI8UmVhbHRpbWVBbmFseXNlck5vZGU+IGNy
ZWF0ZUFuYWx5c2VyKCk7Ci0gICAgUGFzc1JlZlB0cjxKYXZhU2NyaXB0QXVkaW9Ob2RlPiBjcmVh
dGVKYXZhU2NyaXB0Tm9kZShzaXplX3QgYnVmZmVyU2l6ZSk7Ci0gICAgUGFzc1JlZlB0cjxBdWRp
b0NoYW5uZWxTcGxpdHRlcj4gY3JlYXRlQ2hhbm5lbFNwbGl0dGVyKCk7Ci0gICAgUGFzc1JlZlB0
cjxBdWRpb0NoYW5uZWxNZXJnZXI+IGNyZWF0ZUNoYW5uZWxNZXJnZXIoKTsKLQotICAgIC8vIFdo
ZW4gYSBzb3VyY2Ugbm9kZSBoYXMgbm8gbW9yZSBwcm9jZXNzaW5nIHRvIGRvIChoYXMgZmluaXNo
ZWQgcGxheWluZyksIHRoZW4gaXQgdGVsbHMgdGhlIGNvbnRleHQgdG8gZGVyZWZlcmVuY2UgaXQu
Ci0gICAgdm9pZCBub3RpZnlOb2RlRmluaXNoZWRQcm9jZXNzaW5nKEF1ZGlvTm9kZSopOwotCi0g
ICAgLy8gQ2FsbGVkIGF0IHRoZSBzdGFydCBvZiBlYWNoIHJlbmRlciBxdWFudHVtLgotICAgIHZv
aWQgaGFuZGxlUHJlUmVuZGVyVGFza3MoKTsKLQotICAgIC8vIENhbGxlZCBhdCB0aGUgZW5kIG9m
IGVhY2ggcmVuZGVyIHF1YW50dW0uCi0gICAgdm9pZCBoYW5kbGVQb3N0UmVuZGVyVGFza3MoKTsK
LQotICAgIC8vIENhbGxlZCBwZXJpb2RpY2FsbHkgYXQgdGhlIGVuZCBvZiBlYWNoIHJlbmRlciBx
dWFudHVtIHRvIGRlcmVmZXJlbmNlIGZpbmlzaGVkIHNvdXJjZSBub2Rlcy4KLSAgICB2b2lkIGRl
cmVmRmluaXNoZWRTb3VyY2VOb2RlcygpOwotCi0gICAgLy8gV2Ugc2NoZWR1bGUgZGVsZXRpb24g
b2YgYWxsIG1hcmtlZCBub2RlcyBhdCB0aGUgZW5kIG9mIGVhY2ggcmVhbHRpbWUgcmVuZGVyIHF1
YW50dW0uCi0gICAgdm9pZCBtYXJrRm9yRGVsZXRpb24oQXVkaW9Ob2RlKik7Ci0gICAgdm9pZCBk
ZWxldGVNYXJrZWROb2RlcygpOwotICAgIAotICAgIC8vIEtlZXBzIHRyYWNrIG9mIHRoZSBudW1i
ZXIgb2YgY29ubmVjdGlvbnMgbWFkZS4KLSAgICB2b2lkIGluY3JlbWVudENvbm5lY3Rpb25Db3Vu
dCgpCi0gICAgewotICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgICAgICBtX2Nv
bm5lY3Rpb25Db3VudCsrOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGNvbm5lY3Rpb25Db3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29ubmVjdGlvbkNvdW50OyB9Ci0KLSAgICAvLwotICAgIC8vIFRo
cmVhZCBTYWZldHkgYW5kIEdyYXBoIExvY2tpbmc6Ci0gICAgLy8KLSAgICAKLSAgICB2b2lkIHNl
dEF1ZGlvVGhyZWFkKFRocmVhZElkZW50aWZpZXIgdGhyZWFkKSB7IG1fYXVkaW9UaHJlYWQgPSB0
aHJlYWQ7IH0gLy8gRklYTUU6IGNoZWNrIGVpdGhlciBub3QgaW5pdGlhbGl6ZWQgb3IgdGhlIHNh
bWUKLSAgICBUaHJlYWRJZGVudGlmaWVyIGF1ZGlvVGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV9h
dWRpb1RocmVhZDsgfQotICAgIGJvb2wgaXNBdWRpb1RocmVhZCgpIGNvbnN0OwotCi0gICAgLy8g
UmV0dXJucyB0cnVlIG9ubHkgYWZ0ZXIgdGhlIGF1ZGlvIHRocmVhZCBoYXMgYmVlbiBzdGFydGVk
IGFuZCB0aGVuIHNodXRkb3duLgotICAgIGJvb2wgaXNBdWRpb1RocmVhZEZpbmlzaGVkKCkgeyBy
ZXR1cm4gbV9pc0F1ZGlvVGhyZWFkRmluaXNoZWQ7IH0KLSAgICAKLSAgICAvLyBtdXN0UmVsZWFz
ZUxvY2sgaXMgc2V0IHRvIHRydWUgaWYgd2UgYWNxdWlyZWQgdGhlIGxvY2sgaW4gdGhpcyBtZXRo
b2QgY2FsbCBhbmQgY2FsbGVyIG11c3QgdW5sb2NrKCksIGZhbHNlIGlmIGl0IHdhcyBwcmV2aW91
c2x5IGFjcXVpcmVkLgotICAgIHZvaWQgbG9jayhib29sJiBtdXN0UmVsZWFzZUxvY2spOwotCi0g
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHdlIG93biB0aGUgbG9jay4KLSAgICAvLyBtdXN0UmVsZWFz
ZUxvY2sgaXMgc2V0IHRvIHRydWUgaWYgd2UgYWNxdWlyZWQgdGhlIGxvY2sgaW4gdGhpcyBtZXRo
b2QgY2FsbCBhbmQgY2FsbGVyIG11c3QgdW5sb2NrKCksIGZhbHNlIGlmIGl0IHdhcyBwcmV2aW91
c2x5IGFjcXVpcmVkLgotICAgIGJvb2wgdHJ5TG9jayhib29sJiBtdXN0UmVsZWFzZUxvY2spOwot
Ci0gICAgdm9pZCB1bmxvY2soKTsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHRocmVh
ZCBvd25zIHRoZSBjb250ZXh0J3MgbG9jay4KLSAgICBib29sIGlzR3JhcGhPd25lcigpIGNvbnN0
OwotCi0gICAgLy8gUmV0dXJucyB0aGUgbWF4aW11bSBudW11YmVyIG9mIGNoYW5uZWxzIHdlIGNh
biBzdXBwb3J0LgotICAgIHN0YXRpYyB1bnNpZ25lZCBtYXhOdW1iZXJPZkNoYW5uZWxzKCkgeyBy
ZXR1cm4gTWF4TnVtYmVyT2ZDaGFubmVsczt9Ci0KLSAgICBjbGFzcyBBdXRvTG9ja2VyIHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIEF1dG9Mb2NrZXIoQXVkaW9Db250ZXh0KiBjb250ZXh0KQotICAg
ICAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNT
RVJUKGNvbnRleHQpOwotICAgICAgICAgICAgY29udGV4dC0+bG9jayhtX211c3RSZWxlYXNlTG9j
ayk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIH5BdXRvTG9ja2VyKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKG1fbXVzdFJlbGVhc2VMb2NrKQotICAgICAgICAgICAgICAgIG1f
Y29udGV4dC0+dW5sb2NrKCk7Ci0gICAgICAgIH0KLSAgICBwcml2YXRlOgotICAgICAgICBBdWRp
b0NvbnRleHQqIG1fY29udGV4dDsKLSAgICAgICAgYm9vbCBtX211c3RSZWxlYXNlTG9jazsKLSAg
ICB9OwotICAgIAotICAgIC8vIEluIEF1ZGlvTm9kZTo6ZGVyZWYoKSBhIHRyeUxvY2soKSBpcyB1
c2VkIGZvciBjYWxsaW5nIGZpbmlzaERlcmVmKCksIGJ1dCBpZiBpdCBmYWlscyBrZWVwIHRyYWNr
IGhlcmUuCi0gICAgdm9pZCBhZGREZWZlcnJlZEZpbmlzaERlcmVmKEF1ZGlvTm9kZSosIEF1ZGlv
Tm9kZTo6UmVmVHlwZSk7Ci0KLSAgICAvLyBJbiB0aGUgYXVkaW8gdGhyZWFkIGF0IHRoZSBzdGFy
dCBvZiBlYWNoIHJlbmRlciBjeWNsZSwgd2UnbGwgY2FsbCBoYW5kbGVEZWZlcnJlZEZpbmlzaERl
cmVmcygpLgotICAgIHZvaWQgaGFuZGxlRGVmZXJyZWRGaW5pc2hEZXJlZnMoKTsKLQotICAgIC8v
IE9ubHkgYWNjZXNzZWQgd2hlbiB0aGUgZ3JhcGggbG9jayBpcyBoZWxkLgotICAgIHZvaWQgbWFy
a0F1ZGlvTm9kZUlucHV0RGlydHkoQXVkaW9Ob2RlSW5wdXQqKTsKLSAgICB2b2lkIG1hcmtBdWRp
b05vZGVPdXRwdXREaXJ0eShBdWRpb05vZGVPdXRwdXQqKTsKLQotICAgIC8vIEV2ZW50VGFyZ2V0
Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRh
KCkgeyByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOyB9Ci0gICAgdmlydHVhbCBFdmVudFRhcmdl
dERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0
YTsgfQotCi0gICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihjb21wbGV0ZSk7Ci0K
LSAgICAvLyBSZWNvbmNpbGUgcmVmL2RlcmVmIHdoaWNoIGFyZSBkZWZpbmVkIGJvdGggaW4gVGhy
ZWFkU2FmZVJlZkNvdW50ZWQgYW5kIEV2ZW50VGFyZ2V0LgotICAgIHVzaW5nIFRocmVhZFNhZmVS
ZWZDb3VudGVkPEF1ZGlvQ29udGV4dD46OnJlZjsKLSAgICB1c2luZyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxBdWRpb0NvbnRleHQ+OjpkZXJlZjsKLQotICAgIHZvaWQgc3RhcnRSZW5kZXJpbmcoKTsK
LSAgICB2b2lkIGZpcmVDb21wbGV0aW9uRXZlbnQoKTsKLSAgICAKLSAgICBzdGF0aWMgdW5zaWdu
ZWQgc19oYXJkd2FyZUNvbnRleHRDb3VudDsKLSAgICAKLXByaXZhdGU6Ci0gICAgQXVkaW9Db250
ZXh0KERvY3VtZW50Kik7Ci0gICAgQXVkaW9Db250ZXh0KERvY3VtZW50KiwgdW5zaWduZWQgbnVt
YmVyT2ZDaGFubmVscywgc2l6ZV90IG51bWJlck9mRnJhbWVzLCBmbG9hdCBzYW1wbGVSYXRlKTsK
LSAgICB2b2lkIGNvbnN0cnVjdENvbW1vbigpOwotCi0gICAgdm9pZCBsYXp5SW5pdGlhbGl6ZSgp
OwotICAgIHZvaWQgdW5pbml0aWFsaXplKCk7Ci0gICAgc3RhdGljIHZvaWQgdW5pbml0aWFsaXpl
RGlzcGF0Y2godm9pZCogdXNlckRhdGEpOwotCi0gICAgdm9pZCBzY2hlZHVsZU5vZGVEZWxldGlv
bigpOwotICAgIHN0YXRpYyB2b2lkIGRlbGV0ZU1hcmtlZE5vZGVzRGlzcGF0Y2godm9pZCogdXNl
ckRhdGEpOwotICAgIAotICAgIGJvb2wgbV9pc0luaXRpYWxpemVkOwotICAgIGJvb2wgbV9pc0F1
ZGlvVGhyZWFkRmluaXNoZWQ7Ci0gICAgYm9vbCBtX2lzQXVkaW9UaHJlYWRTaHV0ZG93bjsKLQot
ICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwotCi0gICAgLy8gVGhlIGNvbnRleHQgaXRzZWxmIGtl
ZXBzIGEgcmVmZXJlbmNlIHRvIGFsbCBzb3VyY2Ugbm9kZXMuICBUaGUgc291cmNlIG5vZGVzLCB0
aGVuIHJlZmVyZW5jZSBhbGwgbm9kZXMgdGhleSdyZSBjb25uZWN0ZWQgdG8uCi0gICAgLy8gSW4g
dHVybiwgdGhlc2Ugbm9kZXMgcmVmZXJlbmNlIGFsbCBub2RlcyB0aGV5J3JlIGNvbm5lY3RlZCB0
by4gIEFsbCBub2RlcyBhcmUgdWx0aW1hdGVseSBjb25uZWN0ZWQgdG8gdGhlIEF1ZGlvRGVzdGlu
YXRpb25Ob2RlLgotICAgIC8vIFdoZW4gdGhlIGNvbnRleHQgZGVyZWZlcmVuY2VzIGEgc291cmNl
IG5vZGUsIGl0IHdpbGwgYmUgZGVhY3RpdmF0ZWQgZnJvbSB0aGUgcmVuZGVyaW5nIGdyYXBoIGFs
b25nIHdpdGggYWxsIG90aGVyIG5vZGVzIGl0IGlzCi0gICAgLy8gdW5pcXVlbHkgY29ubmVjdGVk
IHRvLiAgU2VlIHRoZSBBdWRpb05vZGU6OnJlZigpIGFuZCBBdWRpb05vZGU6OmRlcmVmKCkgbWV0
aG9kcyBmb3IgbW9yZSBkZXRhaWxzLgotICAgIHZvaWQgcmVmTm9kZShBdWRpb05vZGUqKTsKLSAg
ICB2b2lkIGRlcmVmTm9kZShBdWRpb05vZGUqKTsKLQotICAgIC8vIFdoZW4gdGhlIGNvbnRleHQg
Z29lcyBhd2F5LCB0aGVyZSBtaWdodCBzdGlsbCBiZSBzb21lIHNvdXJjZXMgd2hpY2ggaGF2ZW4n
dCBmaW5pc2hlZCBwbGF5aW5nLgotICAgIC8vIE1ha2Ugc3VyZSB0byBkZXJlZmVyZW5jZSB0aGVt
IGhlcmUuCi0gICAgdm9pZCBkZXJlZlVuZmluaXNoZWRTb3VyY2VOb2RlcygpOwotCi0gICAgUmVm
UHRyPEF1ZGlvRGVzdGluYXRpb25Ob2RlPiBtX2Rlc3RpbmF0aW9uTm9kZTsKLSAgICBSZWZQdHI8
QXVkaW9MaXN0ZW5lcj4gbV9saXN0ZW5lcjsKLQotICAgIC8vIE9ubHkgYWNjZXNzZWQgaW4gdGhl
IGF1ZGlvIHRocmVhZC4KLSAgICBWZWN0b3I8QXVkaW9Ob2RlKj4gbV9maW5pc2hlZE5vZGVzOwot
Ci0gICAgLy8gV2UgZG9uJ3QgdXNlIFJlZlB0cjxBdWRpb05vZGU+IGhlcmUgYmVjYXVzZSBBdWRp
b05vZGUgaGFzIGEgbW9yZSBjb21wbGV4IHJlZigpIC8gZGVyZWYoKSBpbXBsZW1lbnRhdGlvbgot
ICAgIC8vIHdpdGggYW4gb3B0aW9uYWwgYXJndW1lbnQgZm9yIHJlZlR5cGUuICBXZSBuZWVkIHRv
IHVzZSB0aGUgc3BlY2lhbCByZWZUeXBlOiBSZWZUeXBlQ29ubmVjdGlvbgotICAgIC8vIEVpdGhl
ciBhY2Nlc3NlZCB3aGVuIHRoZSBncmFwaCBsb2NrIGlzIGhlbGQsIG9yIG9uIHRoZSBtYWluIHRo
cmVhZCB3aGVuIHRoZSBhdWRpbyB0aHJlYWQgaGFzIGZpbmlzaGVkLgotICAgIFZlY3RvcjxBdWRp
b05vZGUqPiBtX3JlZmVyZW5jZWROb2RlczsKLQotICAgIC8vIEFjY3VtdWxhdGUgbm9kZXMgd2hp
Y2ggbmVlZCB0byBiZSBkZWxldGVkIGhlcmUuCi0gICAgLy8gVGhleSB3aWxsIGJlIHNjaGVkdWxl
ZCBmb3IgZGVsZXRpb24gKG9uIHRoZSBtYWluIHRocmVhZCkgYXQgdGhlIGVuZCBvZiBhIHJlbmRl
ciBjeWNsZSAoaW4gcmVhbHRpbWUgdGhyZWFkKS4KLSAgICBWZWN0b3I8QXVkaW9Ob2RlKj4gbV9u
b2Rlc1RvRGVsZXRlOwotICAgIGJvb2wgbV9pc0RlbGV0aW9uU2NoZWR1bGVkOwotCi0gICAgLy8g
T25seSBhY2Nlc3NlZCB3aGVuIHRoZSBncmFwaCBsb2NrIGlzIGhlbGQuCi0gICAgSGFzaFNldDxB
dWRpb05vZGVJbnB1dCo+IG1fZGlydHlBdWRpb05vZGVJbnB1dHM7Ci0gICAgSGFzaFNldDxBdWRp
b05vZGVPdXRwdXQqPiBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0czsKLSAgICB2b2lkIGhhbmRsZURp
cnR5QXVkaW9Ob2RlSW5wdXRzKCk7Ci0gICAgdm9pZCBoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1
dHMoKTsKLQotICAgIHVuc2lnbmVkIG1fY29ubmVjdGlvbkNvdW50OwotCi0gICAgLy8gR3JhcGgg
bG9ja2luZy4KLSAgICBNdXRleCBtX2NvbnRleHRHcmFwaE11dGV4OwotICAgIHZvbGF0aWxlIFRo
cmVhZElkZW50aWZpZXIgbV9hdWRpb1RocmVhZDsKLSAgICB2b2xhdGlsZSBUaHJlYWRJZGVudGlm
aWVyIG1fZ3JhcGhPd25lclRocmVhZDsgLy8gaWYgdGhlIGxvY2sgaXMgaGVsZCB0aGVuIHRoaXMg
aXMgdGhlIHRocmVhZCB3aGljaCBvd25zIGl0LCBvdGhlcndpc2UgPT0gVW5kZWZpbmVkVGhyZWFk
SWRlbnRpZmllcgotICAgIAotICAgIC8vIERlZmVycmVkIGRlLXJlZmVyZW5jaW5nLgotICAgIHN0
cnVjdCBSZWZJbmZvIHsKLSAgICAgICAgUmVmSW5mbyhBdWRpb05vZGUqIG5vZGUsIEF1ZGlvTm9k
ZTo6UmVmVHlwZSByZWZUeXBlKQotICAgICAgICAgICAgOiBtX25vZGUobm9kZSkKLSAgICAgICAg
ICAgICwgbV9yZWZUeXBlKHJlZlR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBB
dWRpb05vZGUqIG1fbm9kZTsKLSAgICAgICAgQXVkaW9Ob2RlOjpSZWZUeXBlIG1fcmVmVHlwZTsK
LSAgICB9OyAgICAKLQotICAgIC8vIE9ubHkgYWNjZXNzZWQgaW4gdGhlIGF1ZGlvIHRocmVhZC4K
LSAgICBWZWN0b3I8UmVmSW5mbz4gbV9kZWZlcnJlZEZpbmlzaERlcmVmTGlzdDsKLSAgICAKLSAg
ICAvLyBIUlRGIERhdGFiYXNlIGxvYWRlcgotICAgIFJlZlB0cjxIUlRGRGF0YWJhc2VMb2FkZXI+
IG1faHJ0ZkRhdGFiYXNlTG9hZGVyOwotCi0gICAgLy8gRXZlbnRUYXJnZXQKLSAgICB2aXJ0dWFs
IHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlcmVm
RXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KLSAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRh
cmdldERhdGE7Ci0KLSAgICBSZWZQdHI8QXVkaW9CdWZmZXI+IG1fcmVuZGVyVGFyZ2V0OwotICAg
IAotICAgIGJvb2wgbV9pc09mZmxpbmVDb250ZXh0OwotCi0gICAgQXN5bmNBdWRpb0RlY29kZXIg
bV9hdWRpb0RlY29kZXI7Ci0KLSAgICAvLyBUaGlzIGlzIGNvbnNpZGVyaW5nIDMyIGlzIGxhcmdl
IGVub3VnaCBmb3IgbXVsdGlwbGUgY2hhbm5lbHMgYXVkaW8uIAotICAgIC8vIEl0IGlzIHNvbWV3
aGF0IGFyYml0cmFyeSBhbmQgY291bGQgYmUgaW5jcmVhc2VkIGlmIG5lY2Vzc2FyeS4KLSAgICBl
bnVtIHsgTWF4TnVtYmVyT2ZDaGFubmVscyA9IDMyIH07Ci0KLSAgICAvLyBOdW1iZXIgb2YgQXVk
aW9CdWZmZXJTb3VyY2VOb2RlcyB0aGF0IGFyZSBhY3RpdmUgKHBsYXlpbmcpLgotICAgIGludCBt
X2FjdGl2ZVNvdXJjZUNvdW50OwotfTsKLQotfSAvLyBXZWJDb3JlCi0KLSNlbmRpZiAvLyBBdWRp
b0NvbnRleHRfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0Lmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRs
CShyZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRl
eHQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxl
IHdlYmF1ZGlvIHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVE
SU8sCi0gICAgICAgIEFjdGl2ZURPTU9iamVjdCwKLSAgICAgICAgQ3VzdG9tQ29uc3RydWN0b3Is
Ci0gICAgICAgIENvbnN0cnVjdG9yUGFyYW1ldGVycz0wLAotICAgICAgICBKU0N1c3RvbU1hcmtG
dW5jdGlvbiwKLSAgICAgICAgRXZlbnRUYXJnZXQKLSAgICBdIEF1ZGlvQ29udGV4dCB7Ci0gICAg
ICAgIC8vIEFsbCByZW5kZXJlZCBhdWRpbyB1bHRpbWF0ZWx5IGNvbm5lY3RzIHRvIGRlc3RpbmF0
aW9uLCB3aGljaCByZXByZXNlbnRzIHRoZSBhdWRpbyBoYXJkd2FyZS4KLSAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIEF1ZGlvRGVzdGluYXRpb25Ob2RlIGRlc3RpbmF0aW9uOwotCi0gICAgICAg
IC8vIEFsbCBzY2hlZHVsZWQgdGltZXMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgdGltZSBpbiBzZWNv
bmRzLgotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgZmxvYXQgY3VycmVudFRpbWU7Ci0KLSAg
ICAgICAgLy8gQWxsIEF1ZGlvTm9kZXMgaW4gdGhlIGNvbnRleHQgcnVuIGF0IHRoaXMgc2FtcGxl
LXJhdGUgKGluIHNhbXBsZS1mcmFtZXMgcGVyIHNlY29uZCkuCi0gICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBmbG9hdCBzYW1wbGVSYXRlOwotCi0gICAgICAgIC8vIEFsbCBwYW5uaW5nIGlzIHJl
bGF0aXZlIHRvIHRoaXMgbGlzdGVuZXIuCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRp
b0xpc3RlbmVyIGxpc3RlbmVyOwotCi0gICAgICAgIC8vIE51bWJlciBvZiBBdWRpb0J1ZmZlclNv
dXJjZU5vZGVzIHRoYXQgYXJlIGN1cnJlbnRseSBwbGF5aW5nLgotICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBhY3RpdmVTb3VyY2VDb3VudDsKLSAgICAgICAgCi0gICAg
ICAgIEF1ZGlvQnVmZmVyIGNyZWF0ZUJ1ZmZlcihpbiB1bnNpZ25lZCBsb25nIG51bWJlck9mQ2hh
bm5lbHMsIGluIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZGcmFtZXMsIGluIGZsb2F0IHNhbXBsZVJh
dGUpCi0gICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLSAgICAgICAgQXVkaW9CdWZm
ZXIgY3JlYXRlQnVmZmVyKGluIEFycmF5QnVmZmVyIGJ1ZmZlciwgaW4gYm9vbGVhbiBtaXhUb01v
bm8pCi0gICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLQotICAgICAgICAvLyBBc3lu
Y2hyb25vdXMgYXVkaW8gZmlsZSBkYXRhIGRlY29kaW5nLgotICAgICAgICB2b2lkIGRlY29kZUF1
ZGlvRGF0YShpbiBBcnJheUJ1ZmZlciBhdWRpb0RhdGEsIGluIFtDYWxsYmFja10gQXVkaW9CdWZm
ZXJDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2ssIGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIEF1ZGlv
QnVmZmVyQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaykKLSAgICAgICAgICAgIHJhaXNlcyhET01FeGNl
cHRpb24pOwotCi0gICAgICAgIC8vIFNvdXJjZXMKLSAgICAgICAgQXVkaW9CdWZmZXJTb3VyY2VO
b2RlIGNyZWF0ZUJ1ZmZlclNvdXJjZSgpOwotI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAmJiBF
TkFCTEVfVklERU8KLSAgICAgICAgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlIGNyZWF0ZU1l
ZGlhRWxlbWVudFNvdXJjZShpbiBIVE1MTWVkaWFFbGVtZW50IG1lZGlhRWxlbWVudCkKLSAgICAg
ICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwotI2VuZGlmCi0gICAgICAgIC8vIFByb2Nlc3Np
bmcgbm9kZXMKLSAgICAgICAgQXVkaW9HYWluTm9kZSBjcmVhdGVHYWluTm9kZSgpOwotICAgICAg
ICBEZWxheU5vZGUgY3JlYXRlRGVsYXlOb2RlKGluIFtPcHRpb25hbF0gZG91YmxlIG1heERlbGF5
VGltZSk7Ci0gICAgICAgIEJpcXVhZEZpbHRlck5vZGUgY3JlYXRlQmlxdWFkRmlsdGVyKCk7Ci0g
ICAgICAgIFdhdmVTaGFwZXJOb2RlIGNyZWF0ZVdhdmVTaGFwZXIoKTsKLSAgICAgICAgTG93UGFz
czJGaWx0ZXJOb2RlIGNyZWF0ZUxvd1Bhc3MyRmlsdGVyKCk7Ci0gICAgICAgIEhpZ2hQYXNzMkZp
bHRlck5vZGUgY3JlYXRlSGlnaFBhc3MyRmlsdGVyKCk7Ci0gICAgICAgIEF1ZGlvUGFubmVyTm9k
ZSBjcmVhdGVQYW5uZXIoKTsKLSAgICAgICAgQ29udm9sdmVyTm9kZSBjcmVhdGVDb252b2x2ZXIo
KTsKLSAgICAgICAgRHluYW1pY3NDb21wcmVzc29yTm9kZSBjcmVhdGVEeW5hbWljc0NvbXByZXNz
b3IoKTsKLSAgICAgICAgUmVhbHRpbWVBbmFseXNlck5vZGUgY3JlYXRlQW5hbHlzZXIoKTsKLSAg
ICAgICAgSmF2YVNjcmlwdEF1ZGlvTm9kZSBjcmVhdGVKYXZhU2NyaXB0Tm9kZShpbiB1bnNpZ25l
ZCBsb25nIGJ1ZmZlclNpemUpOwotCi0gICAgICAgIC8vIENoYW5uZWwgc3BsaXR0aW5nIGFuZCBt
ZXJnaW5nCi0gICAgICAgIEF1ZGlvQ2hhbm5lbFNwbGl0dGVyIGNyZWF0ZUNoYW5uZWxTcGxpdHRl
cigpOwotICAgICAgICBBdWRpb0NoYW5uZWxNZXJnZXIgY3JlYXRlQ2hhbm5lbE1lcmdlcigpOwot
Ci0gICAgICAgIC8vIE9mZmxpbmUgcmVuZGVyaW5nCi0gICAgICAgIC8vIHZvaWQgcHJlcGFyZU9m
ZmxpbmVCdWZmZXJSZW5kZXJpbmcoaW4gdW5zaWduZWQgbG9uZyBudW1iZXJPZkNoYW5uZWxzLCBp
biB1bnNpZ25lZCBsb25nIG51bWJlck9mRnJhbWVzLCBpbiBmbG9hdCBzYW1wbGVSYXRlKTsKLSAg
ICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25jb21wbGV0ZTsKLSAgICAgICAgdm9pZCBz
dGFydFJlbmRlcmluZygpOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCShyZXZpc2lvbiAxMTE0MzMpCisrKyBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uTm9k
ZS5oIgotCi0jaW5jbHVkZSAiQXVkaW9CdXMuaCIKLSNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIK
LSNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5o
IgotI2luY2x1ZGUgIkF1ZGlvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiRGVub3JtYWxEaXNhYmxl
ci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6
QXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVS
YXRlKQotICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCi0gICAgLCBtX2N1cnJl
bnRTYW1wbGVGcmFtZSgwKQotewotICAgIGFkZElucHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVJ
bnB1dCh0aGlzKSkpOwotICAgIAotICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlRGVzdGluYXRpb24p
OwotfQotCi1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6fkF1ZGlvRGVzdGluYXRpb25Ob2RlKCkKLXsK
LSAgICB1bmluaXRpYWxpemUoKTsKLX0KLQotLy8gVGhlIGF1ZGlvIGhhcmR3YXJlIGNhbGxzIHVz
IGJhY2sgaGVyZSB0byBnZXRzIGl0cyBpbnB1dCBzdHJlYW0uCi12b2lkIEF1ZGlvRGVzdGluYXRp
b25Ob2RlOjpwcm92aWRlSW5wdXQoQXVkaW9CdXMqIGRlc3RpbmF0aW9uQnVzLCBzaXplX3QgbnVt
YmVyT2ZGcmFtZXMpCi17Ci0gICAgLy8gV2UgZG9uJ3Qgd2FudCBkZW5vcm1hbHMgc2xvd2luZyBk
b3duIGFueSBvZiB0aGUgYXVkaW8gcHJvY2Vzc2luZwotICAgIC8vIHNpbmNlIHRoZXkgY2FuIHZl
cnkgc2VyaW91c2x5IGh1cnQgcGVyZm9ybWFuY2UuCi0gICAgLy8gVGhpcyB3aWxsIHRha2UgY2Fy
ZSBvZiBhbGwgQXVkaW9Ob2RlcyBiZWNhdXNlIHRoZXkgYWxsIHByb2Nlc3Mgd2l0aGluIHRoaXMg
c2NvcGUuCi0gICAgRGVub3JtYWxEaXNhYmxlciBkZW5vcm1hbERpc2FibGVyOwotICAgIAotICAg
IGNvbnRleHQoKS0+c2V0QXVkaW9UaHJlYWQoY3VycmVudFRocmVhZCgpKTsKLSAgICAKLSAgICBp
ZiAoIWNvbnRleHQoKS0+aXNSdW5uYWJsZSgpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uQnVzLT56
ZXJvKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBMZXQgdGhlIGNvbnRleHQg
dGFrZSBjYXJlIG9mIGFueSBidXNpbmVzcyBhdCB0aGUgc3RhcnQgb2YgZWFjaCByZW5kZXIgcXVh
bnR1bS4KLSAgICBjb250ZXh0KCktPmhhbmRsZVByZVJlbmRlclRhc2tzKCk7Ci0KLSAgICAvLyBU
aGlzIHdpbGwgY2F1c2UgdGhlIG5vZGUocykgY29ubmVjdGVkIHRvIHVzIHRvIHByb2Nlc3MsIHdo
aWNoIGluIHR1cm4gd2lsbCBwdWxsIG9uIHRoZWlyIGlucHV0KHMpLAotICAgIC8vIGFsbCB0aGUg
d2F5IGJhY2t3YXJkcyB0aHJvdWdoIHRoZSByZW5kZXJpbmcgZ3JhcGguCi0gICAgQXVkaW9CdXMq
IHJlbmRlcmVkQnVzID0gaW5wdXQoMCktPnB1bGwoZGVzdGluYXRpb25CdXMsIG51bWJlck9mRnJh
bWVzKTsKLSAgICAKLSAgICBpZiAoIXJlbmRlcmVkQnVzKQotICAgICAgICBkZXN0aW5hdGlvbkJ1
cy0+emVybygpOwotICAgIGVsc2UgaWYgKHJlbmRlcmVkQnVzICE9IGRlc3RpbmF0aW9uQnVzKSB7
Ci0gICAgICAgIC8vIGluLXBsYWNlIHByb2Nlc3Npbmcgd2FzIG5vdCBwb3NzaWJsZSAtIHNvIGNv
cHkKLSAgICAgICAgZGVzdGluYXRpb25CdXMtPmNvcHlGcm9tKCpyZW5kZXJlZEJ1cyk7Ci0gICAg
fQotCi0gICAgLy8gTGV0IHRoZSBjb250ZXh0IHRha2UgY2FyZSBvZiBhbnkgYnVzaW5lc3MgYXQg
dGhlIGVuZCBvZiBlYWNoIHJlbmRlciBxdWFudHVtLgotICAgIGNvbnRleHQoKS0+aGFuZGxlUG9z
dFJlbmRlclRhc2tzKCk7Ci0gICAgCi0gICAgLy8gQWR2YW5jZSBjdXJyZW50IHNhbXBsZS1mcmFt
ZS4KLSAgICBtX2N1cnJlbnRTYW1wbGVGcmFtZSArPSBudW1iZXJPZkZyYW1lczsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaAkocmV2
aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlv
bk5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBBdWRpb0Rlc3RpbmF0aW9uTm9kZV9oCi0jZGVmaW5lIEF1ZGlvRGVzdGluYXRpb25Ob2Rl
X2gKLQotI2luY2x1ZGUgIkF1ZGlvQnVmZmVyLmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCi0j
aW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIEF1ZGlvQnVzOwotY2xhc3MgQXVkaW9Db250ZXh0OwotICAgIAotY2xhc3MgQXVkaW9E
ZXN0aW5hdGlvbk5vZGUgOiBwdWJsaWMgQXVkaW9Ob2RlLCBwdWJsaWMgQXVkaW9Tb3VyY2VQcm92
aWRlciB7Ci1wdWJsaWM6Ci0gICAgQXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0Kiwg
ZmxvYXQgc2FtcGxlUmF0ZSk7Ci0gICAgdmlydHVhbCB+QXVkaW9EZXN0aW5hdGlvbk5vZGUoKTsK
LSAgICAKLSAgICAvLyBBdWRpb05vZGUgICAKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXpl
X3QpIHsgfTsgLy8gd2UncmUgcHVsbGVkIGJ5IGhhcmR3YXJlIHNvIHRoaXMgaXMgbmV2ZXIgY2Fs
bGVkCi0gICAgdmlydHVhbCB2b2lkIHJlc2V0KCkgeyBtX2N1cnJlbnRTYW1wbGVGcmFtZSA9IDA7
IH07Ci0gICAgCi0gICAgLy8gVGhlIGF1ZGlvIGhhcmR3YXJlIGNhbGxzIGhlcmUgcGVyaW9kaWNh
bGx5IHRvIGdldHMgaXRzIGlucHV0IHN0cmVhbS4KLSAgICB2aXJ0dWFsIHZvaWQgcHJvdmlkZUlu
cHV0KEF1ZGlvQnVzKiwgc2l6ZV90IG51bWJlck9mRnJhbWVzKTsKLQotICAgIHNpemVfdCBjdXJy
ZW50U2FtcGxlRnJhbWUoKSB7IHJldHVybiBtX2N1cnJlbnRTYW1wbGVGcmFtZTsgfQotICAgIGRv
dWJsZSBjdXJyZW50VGltZSgpIHsgcmV0dXJuIGN1cnJlbnRTYW1wbGVGcmFtZSgpIC8gc3RhdGlj
X2Nhc3Q8ZG91YmxlPihzYW1wbGVSYXRlKCkpOyB9Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIG51
bWJlck9mQ2hhbm5lbHMoKSBjb25zdCB7IHJldHVybiAyOyB9IC8vIEZJWE1FOiB1cGRhdGUgd2hl
biBtdWx0aS1jaGFubmVsIChtb3JlIHRoYW4gc3RlcmVvKSBpcyBzdXBwb3J0ZWQKLQotICAgIHZp
cnR1YWwgdm9pZCBzdGFydFJlbmRlcmluZygpID0gMDsKLSAgICAKLXByb3RlY3RlZDoKLSAgICB2
aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KLSAg
ICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7
IH0KLQotICAgIC8vIENvdW50cyB0aGUgbnVtYmVyIG9mIHNhbXBsZS1mcmFtZXMgcHJvY2Vzc2Vk
IGJ5IHRoZSBkZXN0aW5hdGlvbi4KLSAgICBzaXplX3QgbV9jdXJyZW50U2FtcGxlRnJhbWU7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBBdWRpb0Rlc3RpbmF0aW9u
Tm9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9k
ZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5h
dGlvbk5vZGUuaWRsCShyZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
LSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLW1vZHVsZSBhdWRpbyB7Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAg
Q29uZGl0aW9uYWw9V0VCX0FVRElPLAotICAgICAgICBKU0dlbmVyYXRlVG9KU09iamVjdAotICAg
IF0gQXVkaW9EZXN0aW5hdGlvbk5vZGUgOiBBdWRpb05vZGUgewotICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgbG9uZyBudW1iZXJPZkNoYW5uZWxzOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb0dhaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb0dhaW4uaAkocmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9HYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTMgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
Ci0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgQXVkaW9HYWluX2gKLSNkZWZpbmUgQXVkaW9HYWluX2gKLQotI2luY2x1ZGUgIkF1
ZGlvUGFyYW0uaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIEF1ZGlvR2FpbiA6IHB1YmxpYyBBdWRpb1BhcmFtIHsKLXB1YmxpYzog
ICAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb0dhaW4+IGNyZWF0ZShjb25zdCBjaGFyKiBu
YW1lLCBkb3VibGUgZGVmYXVsdFZhbHVlLCBkb3VibGUgbWluVmFsdWUsIGRvdWJsZSBtYXhWYWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVkaW9HYWluKG5hbWUsIGRl
ZmF1bHRWYWx1ZSwgbWluVmFsdWUsIG1heFZhbHVlKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IEF1ZGlvR2Fpbihjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUgZGVmYXVsdFZhbHVlLCBkb3VibGUg
bWluVmFsdWUsIGRvdWJsZSBtYXhWYWx1ZSkKLSAgICAgICAgOiBBdWRpb1BhcmFtKG5hbWUsIGRl
ZmF1bHRWYWx1ZSwgbWluVmFsdWUsIG1heFZhbHVlKQotICAgIHsKLSAgICB9Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBBdWRpb1BhcmFtX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvR2Fpbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9HYWluLmlkbAkocmV2aXNpb24gMTExNDMzKQorKysgU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9HYWluLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzNSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotbW9kdWxlIGF1ZGlvIHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRp
b25hbD1XRUJfQVVESU8sCi0gICAgICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0Ci0gICAgXSBBdWRp
b0dhaW4gOiBBdWRpb1BhcmFtIHsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9HYWluTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9HYWluTm9kZS5jcHAJKHJldmlzaW9uIDExMTQzMykKKysrIFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExOSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdF
Ql9BVURJTykKLQotI2luY2x1ZGUgIkF1ZGlvR2Fpbk5vZGUuaCIKLQotI2luY2x1ZGUgIkF1ZGlv
QnVzLmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlSW5wdXQuaCIKLSNpbmNsdWRlICJBdWRpb05vZGVP
dXRwdXQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1BdWRpb0dhaW5Ob2RlOjpBdWRpb0dh
aW5Ob2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICA6IEF1
ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQotICAgICwgbV9sYXN0R2FpbigxLjApCi0gICAg
LCBtX3NhbXBsZUFjY3VyYXRlR2FpblZhbHVlcyhBdWRpb05vZGU6OlByb2Nlc3NpbmdTaXplSW5G
cmFtZXMpIC8vIEZJWE1FOiBjYW4gcHJvYmFibHkgc2hhcmUgdGVtcCBidWZmZXIgaW4gY29udGV4
dAotewotICAgIG1fZ2FpbiA9IEF1ZGlvR2Fpbjo6Y3JlYXRlKCJnYWluIiwgMS4wLCAwLjAsIDEu
MCk7Ci0gICAgbV9nYWluLT5zZXRDb250ZXh0KGNvbnRleHQpOwotCi0gICAgYWRkSW5wdXQoYWRv
cHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7Ci0gICAgYWRkT3V0cHV0KGFkb3B0UHRy
KG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywgMSkpKTsKLSAgICAKLSAgICBzZXROb2RlVHlwZShO
b2RlVHlwZUdhaW4pOwotICAgIAotICAgIGluaXRpYWxpemUoKTsKLX0KLQotdm9pZCBBdWRpb0dh
aW5Ob2RlOjpwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgLy8gRklYTUU6
IGZvciBzb21lIGNhc2VzIHRoZXJlIGlzIGEgbmljZSBvcHRpbWl6YXRpb24gdG8gYXZvaWQgcHJv
Y2Vzc2luZyBoZXJlLCBhbmQgbGV0IHRoZSBnYWluIGNoYW5nZQotICAgIC8vIGhhcHBlbiBpbiB0
aGUgc3VtbWluZyBqdW5jdGlvbiBpbnB1dCBvZiB0aGUgQXVkaW9Ob2RlIHdlJ3JlIGNvbm5lY3Rl
ZCB0by4KLSAgICAvLyBUaGVuIHdlIGNhbiBhdm9pZCBhbGwgb2YgdGhlIGZvbGxvd2luZzoKLQot
ICAgIEF1ZGlvQnVzKiBvdXRwdXRCdXMgPSBvdXRwdXQoMCktPmJ1cygpOwotICAgIEFTU0VSVChv
dXRwdXRCdXMpOwotCi0gICAgaWYgKCFpc0luaXRpYWxpemVkKCkgfHwgIWlucHV0KDApLT5pc0Nv
bm5lY3RlZCgpKQotICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKLSAgICBlbHNlIHsKLSAgICAg
ICAgQXVkaW9CdXMqIGlucHV0QnVzID0gaW5wdXQoMCktPmJ1cygpOwotCi0gICAgICAgIGlmIChn
YWluKCktPmhhc1RpbWVsaW5lVmFsdWVzKCkpIHsKLSAgICAgICAgICAgIC8vIEFwcGx5IHNhbXBs
ZS1hY2N1cmF0ZSBnYWluIHNjYWxpbmcgZm9yIHByZWNpc2UgZW52ZWxvcGVzLCBncmFpbiB3aW5k
b3dzLCBldGMuCi0gICAgICAgICAgICBBU1NFUlQoZnJhbWVzVG9Qcm9jZXNzIDw9IG1fc2FtcGxl
QWNjdXJhdGVHYWluVmFsdWVzLnNpemUoKSk7Ci0gICAgICAgICAgICBpZiAoZnJhbWVzVG9Qcm9j
ZXNzIDw9IG1fc2FtcGxlQWNjdXJhdGVHYWluVmFsdWVzLnNpemUoKSkgewotICAgICAgICAgICAg
ICAgIGZsb2F0KiBnYWluVmFsdWVzID0gbV9zYW1wbGVBY2N1cmF0ZUdhaW5WYWx1ZXMuZGF0YSgp
OwotICAgICAgICAgICAgICAgIGdhaW4oKS0+Y2FsY3VsYXRlU2FtcGxlQWNjdXJhdGVWYWx1ZXMo
Z2FpblZhbHVlcywgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAgICAgICAgICAgICBvdXRwdXRCdXMt
PmNvcHlXaXRoU2FtcGxlQWNjdXJhdGVHYWluVmFsdWVzRnJvbSgqaW5wdXRCdXMsIGdhaW5WYWx1
ZXMsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAvLyBBcHBseSB0aGUgZ2FpbiB3aXRoIGRlLXppcHBlcmluZyBpbnRvIHRoZSBv
dXRwdXQgYnVzLgotICAgICAgICAgICAgb3V0cHV0QnVzLT5jb3B5V2l0aEdhaW5Gcm9tKCppbnB1
dEJ1cywgJm1fbGFzdEdhaW4sIGdhaW4oKS0+dmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgQXVkaW9HYWluTm9kZTo6cmVzZXQoKQotewotICAgIC8vIFNuYXAgZGlyZWN0bHkg
dG8gZGVzaXJlZCBnYWluLgotICAgIG1fbGFzdEdhaW4gPSBnYWluKCktPnZhbHVlKCk7Ci19Ci0K
LS8vIEZJWE1FOiB0aGlzIGNhbiBnbyBhd2F5IHdoZW4gd2UgZG8gbWl4aW5nIHdpdGggZ2FpbiBk
aXJlY3RseSBpbiBzdW1taW5nIGp1bmN0aW9uIG9mIEF1ZGlvTm9kZUlucHV0Ci0vLwotLy8gQXMg
c29vbiBhcyB3ZSBrbm93IHRoZSBjaGFubmVsIGNvdW50IG9mIG91ciBpbnB1dCwgd2UgY2FuIGxh
emlseSBpbml0aWFsaXplLgotLy8gU29tZXRpbWVzIHRoaXMgbWF5IGJlIGNhbGxlZCBtb3JlIHRo
YW4gb25jZSB3aXRoIGRpZmZlcmVudCBjaGFubmVsIGNvdW50cywgaW4gd2hpY2ggY2FzZSB3ZSBt
dXN0IHNhZmVseQotLy8gdW5pbml0aWFsaXplIGFuZCB0aGVuIHJlLWluaXRpYWxpemUgd2l0aCB0
aGUgbmV3IGNoYW5uZWwgY291bnQuCi12b2lkIEF1ZGlvR2Fpbk5vZGU6OmNoZWNrTnVtYmVyT2ZD
aGFubmVsc0ZvcklucHV0KEF1ZGlvTm9kZUlucHV0KiBpbnB1dCkKLXsKLSAgICBBU1NFUlQoY29u
dGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkgJiYgY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0K
LSAgICBBU1NFUlQoaW5wdXQgJiYgaW5wdXQgPT0gdGhpcy0+aW5wdXQoMCkpOwotICAgIGlmIChp
bnB1dCAhPSB0aGlzLT5pbnB1dCgwKSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICB1
bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzID0gaW5wdXQtPm51bWJlck9mQ2hhbm5lbHMoKTsgICAg
Ci0KLSAgICBpZiAoaXNJbml0aWFsaXplZCgpICYmIG51bWJlck9mQ2hhbm5lbHMgIT0gb3V0cHV0
KDApLT5udW1iZXJPZkNoYW5uZWxzKCkpIHsKLSAgICAgICAgLy8gV2UncmUgYWxyZWFkeSBpbml0
aWFsaXplZCBidXQgdGhlIGNoYW5uZWwgY291bnQgaGFzIGNoYW5nZWQuCi0gICAgICAgIHVuaW5p
dGlhbGl6ZSgpOwotICAgIH0KLQotICAgIGlmICghaXNJbml0aWFsaXplZCgpKSB7Ci0gICAgICAg
IC8vIFRoaXMgd2lsbCBwcm9wYWdhdGUgdGhlIGNoYW5uZWwgY291bnQgdG8gYW55IG5vZGVzIGNv
bm5lY3RlZCBmdXJ0aGVyIGRvd25zdHJlYW0gaW4gdGhlIGdyYXBoLgotICAgICAgICBvdXRwdXQo
MCktPnNldE51bWJlck9mQ2hhbm5lbHMobnVtYmVyT2ZDaGFubmVscyk7Ci0gICAgICAgIGluaXRp
YWxpemUoKTsKLSAgICB9Ci0KLSAgICBBdWRpb05vZGU6OmNoZWNrTnVtYmVyT2ZDaGFubmVsc0Zv
cklucHV0KGlucHV0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvR2Fp
bk5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0dhaW5O
b2RlLmgJKHJldmlzaW9uIDExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
R2Fpbk5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBBdWRpb0dhaW5Ob2RlX2gKLSNkZWZpbmUgQXVkaW9HYWluTm9kZV9oCi0KLSNpbmNs
dWRlICJBdWRpb0dhaW4uaCIKLSNpbmNsdWRlICJBdWRpb05vZGUuaCIKLSNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBBdWRpb0NvbnRleHQ7Ci0gICAgCi0vLyBBdWRpb0dhaW5Ob2RlIGlz
IGFuIEF1ZGlvTm9kZSB3aXRoIG9uZSBpbnB1dCBhbmQgb25lIG91dHB1dCB3aGljaCBhcHBsaWVz
IGEgZ2FpbiAodm9sdW1lKSBjaGFuZ2UgdG8gdGhlIGF1ZGlvIHNpZ25hbC4KLS8vIERlLXppcHBl
cmluZyAoc21vb3RoaW5nKSBpcyBhcHBsaWVkIHdoZW4gdGhlIGdhaW4gdmFsdWUgaXMgY2hhbmdl
ZCBkeW5hbWljYWxseS4KLQotY2xhc3MgQXVkaW9HYWluTm9kZSA6IHB1YmxpYyBBdWRpb05vZGUg
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlvR2Fpbk5vZGU+IGNyZWF0ZShB
dWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvR2Fpbk5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkpOyAg
ICAgIAotICAgIH0KLSAgICAKLSAgICAvLyBBdWRpb05vZGUKLSAgICB2aXJ0dWFsIHZvaWQgcHJv
Y2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsK
LQotICAgIC8vIENhbGxlZCBpbiB0aGUgbWFpbiB0aHJlYWQgd2hlbiB0aGUgbnVtYmVyIG9mIGNo
YW5uZWxzIGZvciB0aGUgaW5wdXQgbWF5IGhhdmUgY2hhbmdlZC4KLSAgICB2aXJ0dWFsIHZvaWQg
Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQoQXVkaW9Ob2RlSW5wdXQqKTsKLQotICAgIC8v
IEphdmFTY3JpcHQgaW50ZXJmYWNlCi0gICAgQXVkaW9HYWluKiBnYWluKCkgeyByZXR1cm4gbV9n
YWluLmdldCgpOyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAKLXBy
aXZhdGU6Ci0gICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiAwOyB9Ci0gICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiAwOyB9Ci0KLSAgICBBdWRpb0dhaW5Ob2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0
IHNhbXBsZVJhdGUpOwotCi0gICAgZmxvYXQgbV9sYXN0R2FpbjsgLy8gZm9yIGRlLXppcHBlcmlu
ZwotICAgIFJlZlB0cjxBdWRpb0dhaW4+IG1fZ2FpbjsKLQotICAgIEF1ZGlvRmxvYXRBcnJheSBt
X3NhbXBsZUFjY3VyYXRlR2FpblZhbHVlczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEF1ZGlvR2Fpbk5vZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9HYWluTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9HYWluTm9kZS5pZGwJKHJldmlzaW9uIDExMTQzMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
Ci0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi1tb2R1bGUgYXVkaW8gewotICAgIGludGVyZmFjZSBbCi0gICAgICAg
IENvbmRpdGlvbmFsPVdFQl9BVURJTywKLSAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKLSAg
ICBdIEF1ZGlvR2Fpbk5vZGUgOiBBdWRpb05vZGUgewotICAgICAgICAvLyBGSVhNRTogZXZlbnR1
YWxseSBpdCB3aWxsIGJlIGludGVyZXN0aW5nIHRvIHJlbW92ZSB0aGUgcmVhZG9ubHkgcmVzdHJp
Y3Rpb24sIGJ1dCBuZWVkIHRvIHByb3Blcmx5IGRlYWwgd2l0aCB0aHJlYWQgc2FmZXR5IGhlcmUu
Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb0dhaW4gZ2FpbjsKLSAgICB9OwotfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5jcHAJKHJldmlzaW9u
IDExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
ZiBFTkFCTEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiQXVkaW9MaXN0ZW5lci5oIgotCi0jaW5j
bHVkZSAiQXVkaW9CdXMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1BdWRpb0xpc3RlbmVy
OjpBdWRpb0xpc3RlbmVyKCkKLSAgICA6IG1fcG9zaXRpb24oMCwgMCwgMCkKLSAgICAsIG1fb3Jp
ZW50YXRpb24oMCwgMCwgLTEpCi0gICAgLCBtX3VwVmVjdG9yKDAsIDEsIDApCi0gICAgLCBtX3Zl
bG9jaXR5KDAsIDAsIDApCi0gICAgLCBtX2RvcHBsZXJGYWN0b3IoMSkKLSAgICAsIG1fc3BlZWRP
ZlNvdW5kKDM0My4zKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9M
aXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTGlz
dGVuZXIuaAkocmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9MaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEF1
ZGlvTGlzdGVuZXJfaAotI2RlZmluZSBBdWRpb0xpc3RlbmVyX2gKLQotI2luY2x1ZGUgIkZsb2F0
UG9pbnQzRC5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBBdWRpb0xpc3RlbmVyIG1h
aW50YWlucyB0aGUgc3RhdGUgb2YgdGhlIGxpc3RlbmVyIGluIHRoZSBhdWRpbyBzY2VuZSBhcyBk
ZWZpbmVkIGluIHRoZSBPcGVuQUwgc3BlY2lmaWNhdGlvbi4KLQotY2xhc3MgQXVkaW9MaXN0ZW5l
ciA6IHB1YmxpYyBSZWZDb3VudGVkPEF1ZGlvTGlzdGVuZXI+IHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxBdWRpb0xpc3RlbmVyPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBBdWRpb0xpc3RlbmVyKCkpOwotICAgIH0KLQotICAgIC8vIFBvc2l0
aW9uCi0gICAgdm9pZCBzZXRQb3NpdGlvbihmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7IHNl
dFBvc2l0aW9uKEZsb2F0UG9pbnQzRCh4LCB5LCB6KSk7IH0KLSAgICB2b2lkIHNldFBvc2l0aW9u
KGNvbnN0IEZsb2F0UG9pbnQzRCAmcG9zaXRpb24pIHsgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOyB9
Ci0gICAgY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9z
aXRpb247IH0KLQotICAgIC8vIE9yaWVudGF0aW9uCi0gICAgdm9pZCBzZXRPcmllbnRhdGlvbihm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB1cFgsIGZsb2F0IHVwWSwgZmxvYXQgdXBa
KQotICAgIHsKLSAgICAgICAgc2V0T3JpZW50YXRpb24oRmxvYXRQb2ludDNEKHgsIHksIHopKTsK
LSAgICAgICAgc2V0VXBWZWN0b3IoRmxvYXRQb2ludDNEKHVwWCwgdXBZLCB1cFopKTsKLSAgICB9
Ci0gICAgdm9pZCBzZXRPcmllbnRhdGlvbihjb25zdCBGbG9hdFBvaW50M0QgJm9yaWVudGF0aW9u
KSB7IG1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsgfQotICAgIGNvbnN0IEZsb2F0UG9pbnQz
RCYgb3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBtX29yaWVudGF0aW9uOyB9Ci0KLSAgICAv
LyBVcC12ZWN0b3IKLSAgICB2b2lkIHNldFVwVmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQzRCAmdXBW
ZWN0b3IpIHsgbV91cFZlY3RvciA9IHVwVmVjdG9yOyB9Ci0gICAgY29uc3QgRmxvYXRQb2ludDNE
JiB1cFZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fdXBWZWN0b3I7IH0KLQotICAgIC8vIFZlbG9j
aXR5Ci0gICAgdm9pZCBzZXRWZWxvY2l0eShmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7IHNl
dFZlbG9jaXR5KEZsb2F0UG9pbnQzRCh4LCB5LCB6KSk7IH0KLSAgICB2b2lkIHNldFZlbG9jaXR5
KGNvbnN0IEZsb2F0UG9pbnQzRCAmdmVsb2NpdHkpIHsgbV92ZWxvY2l0eSA9IHZlbG9jaXR5OyB9
Ci0gICAgY29uc3QgRmxvYXRQb2ludDNEJiB2ZWxvY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVs
b2NpdHk7IH0KLQotICAgIC8vIERvcHBsZXIgZmFjdG9yCi0gICAgdm9pZCBzZXREb3BwbGVyRmFj
dG9yKGRvdWJsZSBkb3BwbGVyRmFjdG9yKSB7IG1fZG9wcGxlckZhY3RvciA9IGRvcHBsZXJGYWN0
b3I7IH0KLSAgICBkb3VibGUgZG9wcGxlckZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fZG9wcGxl
ckZhY3RvcjsgfQotCi0gICAgLy8gU3BlZWQgb2Ygc291bmQKLSAgICB2b2lkIHNldFNwZWVkT2ZT
b3VuZChkb3VibGUgc3BlZWRPZlNvdW5kKSB7IG1fc3BlZWRPZlNvdW5kID0gc3BlZWRPZlNvdW5k
OyB9Ci0gICAgZG91YmxlIHNwZWVkT2ZTb3VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlZWRPZlNv
dW5kOyB9Ci0KLXByaXZhdGU6Ci0gICAgQXVkaW9MaXN0ZW5lcigpOwotCi0gICAgLy8gUG9zaXRp
b24gLyBPcmllbnRhdGlvbgotICAgIEZsb2F0UG9pbnQzRCBtX3Bvc2l0aW9uOwotICAgIEZsb2F0
UG9pbnQzRCBtX29yaWVudGF0aW9uOwotICAgIEZsb2F0UG9pbnQzRCBtX3VwVmVjdG9yOwotCi0g
ICAgRmxvYXRQb2ludDNEIG1fdmVsb2NpdHk7Ci0KLSAgICBkb3VibGUgbV9kb3BwbGVyRmFjdG9y
OwotICAgIGRvdWJsZSBtX3NwZWVkT2ZTb3VuZDsKLX07Ci0KLX0gLy8gV2ViQ29yZQotCi0jZW5k
aWYgLy8gQXVkaW9MaXN0ZW5lcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b0xpc3RlbmVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b0xpc3RlbmVyLmlkbAkocmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9MaXN0ZW5lci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDAgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0g
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1v
ZHVsZSBhdWRpbyB7Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FV
RElPCi0gICAgXSBBdWRpb0xpc3RlbmVyIHsKLSAgICAgICAgYXR0cmlidXRlIGZsb2F0IGRvcHBs
ZXJGYWN0b3I7ICAvLyBzYW1lIGFzIE9wZW5BTCAoZGVmYXVsdCAxLjApCi0gICAgICAgIGF0dHJp
YnV0ZSBmbG9hdCBzcGVlZE9mU291bmQ7ICAgLy8gaW4gbWV0ZXJzIC8gc2Vjb25kIChkZWZhdWx0
IDM0My4zKQotCi0gICAgICAgIHZvaWQgc2V0UG9zaXRpb24oaW4gZmxvYXQgeCwgaW4gZmxvYXQg
eSwgaW4gZmxvYXQgeik7Ci0gICAgICAgIHZvaWQgc2V0T3JpZW50YXRpb24oaW4gZmxvYXQgeCwg
aW4gZmxvYXQgeSwgaW4gZmxvYXQgeiwgaW4gZmxvYXQgeFVwLCBpbiBmbG9hdCB5VXAsIGluIGZs
b2F0IHpVcCk7Ci0gICAgICAgIHZvaWQgc2V0VmVsb2NpdHkoaW4gZmxvYXQgeCwgaW4gZmxvYXQg
eSwgaW4gZmxvYXQgeik7Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9Ob2RlLmNwcAkocmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzNTMgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
Ci0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNs
dWRlICJBdWRpb05vZGUuaCIKLQotI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgotI2luY2x1ZGUg
IkF1ZGlvTm9kZUlucHV0LmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCi0jaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+Ci0jaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1BdWRpb05vZGU6OkF1
ZGlvTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBt
X2lzSW5pdGlhbGl6ZWQoZmFsc2UpCi0gICAgLCBtX25vZGVUeXBlKE5vZGVUeXBlVW5rbm93bikK
LSAgICAsIG1fY29udGV4dChjb250ZXh0KQotICAgICwgbV9zYW1wbGVSYXRlKHNhbXBsZVJhdGUp
Ci0gICAgLCBtX2xhc3RQcm9jZXNzaW5nVGltZSgtMS4wKQotICAgICwgbV9ub3JtYWxSZWZDb3Vu
dCgxKSAvLyBzdGFydCBvdXQgd2l0aCBub3JtYWwgcmVmQ291bnQgPT0gMSAobGlrZSBXVEY6OlJl
ZkNvdW50ZWQgY2xhc3MpCi0gICAgLCBtX2Nvbm5lY3Rpb25SZWZDb3VudCgwKQotICAgICwgbV9k
aXNhYmxlZFJlZkNvdW50KDApCi0gICAgLCBtX2lzTWFya2VkRm9yRGVsZXRpb24oZmFsc2UpCi0g
ICAgLCBtX2lzRGlzYWJsZWQoZmFsc2UpCi17Ci0jaWYgREVCVUdfQVVESU9OT0RFX1JFRkVSRU5D
RVMKLSAgICBpZiAoIXNfaXNOb2RlQ291bnRJbml0aWFsaXplZCkgewotICAgICAgICBzX2lzTm9k
ZUNvdW50SW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICBhdGV4aXQoQXVkaW9Ob2RlOjpwcmlu
dE5vZGVDb3VudHMpOwotICAgIH0KLSNlbmRpZgotfQotCi1BdWRpb05vZGU6On5BdWRpb05vZGUo
KQotewotI2lmIERFQlVHX0FVRElPTk9ERV9SRUZFUkVOQ0VTCi0gICAgLS1zX25vZGVDb3VudFtu
b2RlVHlwZSgpXTsKLSAgICBwcmludGYoIiVwOiAlZDogQXVkaW9Ob2RlOjp+QXVkaW9Ob2RlKCkg
JWQgJWQgJWRcbiIsIHRoaXMsIG5vZGVUeXBlKCksIG1fbm9ybWFsUmVmQ291bnQsIG1fY29ubmVj
dGlvblJlZkNvdW50LCBtX2Rpc2FibGVkUmVmQ291bnQpOwotI2VuZGlmCi19Ci0KLXZvaWQgQXVk
aW9Ob2RlOjppbml0aWFsaXplKCkKLXsKLSAgICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVlOwotfQot
Ci12b2lkIEF1ZGlvTm9kZTo6dW5pbml0aWFsaXplKCkKLXsKLSAgICBtX2lzSW5pdGlhbGl6ZWQg
PSBmYWxzZTsKLX0KLQotdm9pZCBBdWRpb05vZGU6OnNldE5vZGVUeXBlKE5vZGVUeXBlIHR5cGUp
Ci17Ci0gICAgbV9ub2RlVHlwZSA9IHR5cGU7Ci0KLSNpZiBERUJVR19BVURJT05PREVfUkVGRVJF
TkNFUwotICAgICsrc19ub2RlQ291bnRbdHlwZV07Ci0jZW5kaWYKLX0KLQotdm9pZCBBdWRpb05v
ZGU6OmxhenlJbml0aWFsaXplKCkKLXsKLSAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKLSAgICAg
ICAgaW5pdGlhbGl6ZSgpOwotfQotCi12b2lkIEF1ZGlvTm9kZTo6YWRkSW5wdXQoUGFzc093blB0
cjxBdWRpb05vZGVJbnB1dD4gaW5wdXQpCi17Ci0gICAgbV9pbnB1dHMuYXBwZW5kKGlucHV0KTsK
LX0KLQotdm9pZCBBdWRpb05vZGU6OmFkZE91dHB1dChQYXNzT3duUHRyPEF1ZGlvTm9kZU91dHB1
dD4gb3V0cHV0KQotewotICAgIG1fb3V0cHV0cy5hcHBlbmQob3V0cHV0KTsKLX0KLQotQXVkaW9O
b2RlSW5wdXQqIEF1ZGlvTm9kZTo6aW5wdXQodW5zaWduZWQgaSkKLXsKLSAgICBpZiAoaSA8IG1f
aW5wdXRzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG1faW5wdXRzW2ldLmdldCgpOwotICAgIHJl
dHVybiAwOwotfQotCi1BdWRpb05vZGVPdXRwdXQqIEF1ZGlvTm9kZTo6b3V0cHV0KHVuc2lnbmVk
IGkpCi17Ci0gICAgaWYgKGkgPCBtX291dHB1dHMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gbV9v
dXRwdXRzW2ldLmdldCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIEF1ZGlvTm9kZTo6Y29u
bmVjdChBdWRpb05vZGUqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBvdXRwdXRJbmRleCwgdW5zaWdu
ZWQgaW5wdXRJbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsgCi0gICAgQXVkaW9Db250ZXh0OjpBdXRvTG9ja2VyIGxvY2tlcihjb250ZXh0KCkp
OwotCi0gICAgaWYgKCFkZXN0aW5hdGlvbikgewotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTYW5pdHkgY2hlY2sgaW5wdXQgYW5kIG91
dHB1dCBpbmRpY2VzLgotICAgIGlmIChvdXRwdXRJbmRleCA+PSBudW1iZXJPZk91dHB1dHMoKSkg
ewotICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKGRlc3RpbmF0aW9uICYmIGlucHV0SW5kZXggPj0gZGVzdGluYXRpb24tPm51bWJl
ck9mSW5wdXRzKCkpIHsKLSAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChjb250ZXh0KCkgIT0gZGVzdGluYXRpb24tPmNvbnRleHQo
KSkgewotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBBdWRpb05vZGVJbnB1dCogaW5wdXQgPSBkZXN0aW5hdGlvbi0+aW5wdXQoaW5wdXRJbmRl
eCk7Ci0gICAgQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQgPSB0aGlzLT5vdXRwdXQob3V0cHV0SW5k
ZXgpOwotICAgIGlucHV0LT5jb25uZWN0KG91dHB1dCk7Ci0KLSAgICAvLyBMZXQgY29udGV4dCBr
bm93IHRoYXQgYSBjb25uZWN0aW9uIGhhcyBiZWVuIG1hZGUuCi0gICAgY29udGV4dCgpLT5pbmNy
ZW1lbnRDb25uZWN0aW9uQ291bnQoKTsKLX0KLQotdm9pZCBBdWRpb05vZGU6OmRpc2Nvbm5lY3Qo
dW5zaWduZWQgb3V0cHV0SW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0gICAgQXVkaW9Db250ZXh0OjpBdXRvTG9ja2VyIGxvY2tlcihjb250
ZXh0KCkpOwotCi0gICAgLy8gU2FuaXR5IGNoZWNrIGlucHV0IGFuZCBvdXRwdXQgaW5kaWNlcy4K
LSAgICBpZiAob3V0cHV0SW5kZXggPj0gbnVtYmVyT2ZPdXRwdXRzKCkpIHsKLSAgICAgICAgZWMg
PSBJTkRFWF9TSVpFX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEF1ZGlvTm9k
ZU91dHB1dCogb3V0cHV0ID0gdGhpcy0+b3V0cHV0KG91dHB1dEluZGV4KTsKLSAgICBvdXRwdXQt
PmRpc2Nvbm5lY3RBbGxJbnB1dHMoKTsKLX0KLQotdm9pZCBBdWRpb05vZGU6OnByb2Nlc3NJZk5l
Y2Vzc2FyeShzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIEFTU0VSVChjb250ZXh0KCkt
PmlzQXVkaW9UaHJlYWQoKSk7Ci0gICAgCi0gICAgaWYgKCFpc0luaXRpYWxpemVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIEVuc3VyZSB0aGF0IHdlIG9ubHkgcHJvY2VzcyBvbmNlIHBl
ciByZW5kZXJpbmcgcXVhbnR1bS4KLSAgICAvLyBUaGlzIGhhbmRsZXMgdGhlICJmYW5vdXQiIHBy
b2JsZW0gd2hlcmUgYW4gb3V0cHV0IGlzIGNvbm5lY3RlZCB0byBtdWx0aXBsZSBpbnB1dHMuCi0g
ICAgLy8gVGhlIGZpcnN0IHRpbWUgd2UncmUgY2FsbGVkIGR1cmluZyB0aGlzIHRpbWUgc2xpY2Ug
d2UgcHJvY2VzcywgYnV0IGFmdGVyIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byByZS1wcm9jZXNzLAot
ICAgIC8vIGluc3RlYWQgb3VyIG91dHB1dChzKSB3aWxsIGFscmVhZHkgaGF2ZSB0aGUgcmVzdWx0
cyBjYWNoZWQgaW4gdGhlaXIgYnVzOwotICAgIGRvdWJsZSBjdXJyZW50VGltZSA9IGNvbnRleHQo
KS0+Y3VycmVudFRpbWUoKTsKLSAgICBpZiAobV9sYXN0UHJvY2Vzc2luZ1RpbWUgIT0gY3VycmVu
dFRpbWUpIHsKLSAgICAgICAgbV9sYXN0UHJvY2Vzc2luZ1RpbWUgPSBjdXJyZW50VGltZTsgLy8g
aW1wb3J0YW50IHRvIGZpcnN0IHVwZGF0ZSB0aGlzIHRpbWUgYmVjYXVzZSBvZiBmZWVkYmFjayBs
b29wcyBpbiB0aGUgcmVuZGVyaW5nIGdyYXBoCi0gICAgICAgIHB1bGxJbnB1dHMoZnJhbWVzVG9Q
cm9jZXNzKTsKLSAgICAgICAgcHJvY2VzcyhmcmFtZXNUb1Byb2Nlc3MpOwotICAgIH0KLX0KLQot
dm9pZCBBdWRpb05vZGU6OmNoZWNrTnVtYmVyT2ZDaGFubmVsc0ZvcklucHV0KEF1ZGlvTm9kZUlu
cHV0KiBpbnB1dCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkgJiYg
Y29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0KLSAgICBBU1NFUlQobV9pbnB1dHMuY29udGFp
bnMoaW5wdXQpKTsKLSAgICBpZiAoIW1faW5wdXRzLmNvbnRhaW5zKGlucHV0KSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaW5wdXQtPnVwZGF0ZUludGVybmFsQnVzKCk7Ci19Ci0KLXZvaWQgQXVk
aW9Ob2RlOjpwdWxsSW5wdXRzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgQVNTRVJU
KGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgpKTsKLSAgICAKLSAgICAvLyBQcm9jZXNzIGFsbCBv
ZiB0aGUgQXVkaW9Ob2RlcyBjb25uZWN0ZWQgdG8gb3VyIGlucHV0cy4KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9pbnB1dHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGlucHV0KGkpLT5w
dWxsKDAsIGZyYW1lc1RvUHJvY2Vzcyk7Ci19Ci0KLXZvaWQgQXVkaW9Ob2RlOjpyZWYoUmVmVHlw
ZSByZWZUeXBlKQotewotICAgIHN3aXRjaCAocmVmVHlwZSkgewotICAgIGNhc2UgUmVmVHlwZU5v
cm1hbDoKLSAgICAgICAgYXRvbWljSW5jcmVtZW50KCZtX25vcm1hbFJlZkNvdW50KTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBSZWZUeXBlQ29ubmVjdGlvbjoKLSAgICAgICAgYXRvbWljSW5j
cmVtZW50KCZtX2Nvbm5lY3Rpb25SZWZDb3VudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
UmVmVHlwZURpc2FibGVkOgotICAgICAgICBhdG9taWNJbmNyZW1lbnQoJm1fZGlzYWJsZWRSZWZD
b3VudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLQotI2lmIERFQlVHX0FVRElPTk9ERV9SRUZFUkVOQ0VTCi0gICAg
cHJpbnRmKCIlcDogJWQ6IEF1ZGlvTm9kZTo6cmVmKCVkKSAlZCAlZCAlZFxuIiwgdGhpcywgbm9k
ZVR5cGUoKSwgcmVmVHlwZSwgbV9ub3JtYWxSZWZDb3VudCwgbV9jb25uZWN0aW9uUmVmQ291bnQs
IG1fZGlzYWJsZWRSZWZDb3VudCk7Ci0jZW5kaWYKLQotICAgIC8vIFNlZSB0aGUgZGlzYWJsaW5n
IGNvZGUgaW4gZmluaXNoRGVyZWYoKSBiZWxvdy4gVGhpcyBoYW5kbGVzIHRoZSBjYXNlIHdoZXJl
IGEgbm9kZQotICAgIC8vIGlzIGJlaW5nIHJlLWNvbm5lY3RlZCBhZnRlciBiZWluZyB1c2VkIGF0
IGxlYXN0IG9uY2UgYW5kIGRpc2Nvbm5lY3RlZC4KLSAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIG5l
ZWQgdG8gcmUtZW5hYmxlLgotICAgIGlmIChtX2lzRGlzYWJsZWQgJiYgbV9jb25uZWN0aW9uUmVm
Q291bnQgPiAwICYmIHJlZlR5cGUgPT0gUmVmVHlwZUNvbm5lY3Rpb24pIHsKLSAgICAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICAgICAgQXVkaW9Db250ZXh0OjpBdXRvTG9ja2VyIGxv
Y2tlcihjb250ZXh0KCkpOwotCi0gICAgICAgIG1faXNEaXNhYmxlZCA9IGZhbHNlOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vdXRwdXRzLnNpemUoKTsgKytpKQotICAgICAg
ICAgICAgb3V0cHV0KGkpLT5lbmFibGUoKTsKLSAgICB9Ci19Ci0KLXZvaWQgQXVkaW9Ob2RlOjpk
ZXJlZihSZWZUeXBlIHJlZlR5cGUpCi17Ci0gICAgLy8gVGhlIGFjdHVhbGx5IHdvcmsgZm9yIGRl
cmVmIGhhcHBlbnMgY29tcGxldGVseSB3aXRoaW4gdGhlIGF1ZGlvIGNvbnRleHQncyBncmFwaCBs
b2NrLgotICAgIC8vIEluIHRoZSBjYXNlIG9mIHRoZSBhdWRpbyB0aHJlYWQsIHdlIG11c3QgdXNl
IGEgdHJ5TG9jayB0byBhdm9pZCBnbGl0Y2hlcy4KLSAgICBib29sIGhhc0xvY2sgPSBmYWxzZTsK
LSAgICBib29sIG11c3RSZWxlYXNlTG9jayA9IGZhbHNlOwotICAgIAotICAgIGlmIChjb250ZXh0
KCktPmlzQXVkaW9UaHJlYWQoKSkgewotICAgICAgICAvLyBSZWFsLXRpbWUgYXVkaW8gdGhyZWFk
IG11c3Qgbm90IGNvbnRlbmQgbG9jayAodG8gYXZvaWQgZ2xpdGNoZXMpLgotICAgICAgICBoYXNM
b2NrID0gY29udGV4dCgpLT50cnlMb2NrKG11c3RSZWxlYXNlTG9jayk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgY29udGV4dCgpLT5sb2NrKG11c3RSZWxlYXNlTG9jayk7Ci0gICAgICAgIGhhc0xv
Y2sgPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAoaGFzTG9jaykgewotICAgICAgICAvLyBU
aGlzIGlzIHdoZXJlIHRoZSByZWFsIGRlcmVmIHdvcmsgaGFwcGVucy4KLSAgICAgICAgZmluaXNo
RGVyZWYocmVmVHlwZSk7Ci0KLSAgICAgICAgaWYgKG11c3RSZWxlYXNlTG9jaykKLSAgICAgICAg
ICAgIGNvbnRleHQoKS0+dW5sb2NrKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gV2Ugd2Vy
ZSB1bmFibGUgdG8gZ2V0IHRoZSBsb2NrLCBzbyBwdXQgdGhpcyBpbiBhIGxpc3QgdG8gZmluaXNo
IHVwIGxhdGVyLgotICAgICAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkpOwot
ICAgICAgICBjb250ZXh0KCktPmFkZERlZmVycmVkRmluaXNoRGVyZWYodGhpcywgcmVmVHlwZSk7
Ci0gICAgfQotCi0gICAgLy8gT25jZSBBdWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6ZSgpIGlzIGNh
bGxlZCB0aGVyZSdzIG5vIG1vcmUgY2hhbmNlcyBmb3IgZGVsZXRlTWFya2VkTm9kZXMoKSB0byBn
ZXQgY2FsbGVkLCBzbyB3ZSBjYWxsIGhlcmUuCi0gICAgLy8gV2UgY2FuJ3QgY2FsbCBpbiBBdWRp
b0NvbnRleHQ6On5BdWRpb0NvbnRleHQoKSBzaW5jZSBpdCB3aWxsIG5ldmVyIGJlIGNhbGxlZCBh
cyBsb25nIGFzIGFueSBBdWRpb05vZGUgaXMgYWxpdmUKLSAgICAvLyBiZWNhdXNlIEF1ZGlvTm9k
ZXMga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgY29udGV4dC4KLSAgICBpZiAoY29udGV4dCgpLT5p
c0F1ZGlvVGhyZWFkRmluaXNoZWQoKSkKLSAgICAgICAgY29udGV4dCgpLT5kZWxldGVNYXJrZWRO
b2RlcygpOwotfQotCi12b2lkIEF1ZGlvTm9kZTo6ZmluaXNoRGVyZWYoUmVmVHlwZSByZWZUeXBl
KQotewotICAgIEFTU0VSVChjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKLSAgICAKLSAgICBz
d2l0Y2ggKHJlZlR5cGUpIHsKLSAgICBjYXNlIFJlZlR5cGVOb3JtYWw6Ci0gICAgICAgIEFTU0VS
VChtX25vcm1hbFJlZkNvdW50ID4gMCk7Ci0gICAgICAgIGF0b21pY0RlY3JlbWVudCgmbV9ub3Jt
YWxSZWZDb3VudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVmVHlwZUNvbm5lY3Rpb246
Ci0gICAgICAgIEFTU0VSVChtX2Nvbm5lY3Rpb25SZWZDb3VudCA+IDApOwotICAgICAgICBhdG9t
aWNEZWNyZW1lbnQoJm1fY29ubmVjdGlvblJlZkNvdW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBSZWZUeXBlRGlzYWJsZWQ6Ci0gICAgICAgIEFTU0VSVChtX2Rpc2FibGVkUmVmQ291bnQg
PiAwKTsKLSAgICAgICAgYXRvbWljRGVjcmVtZW50KCZtX2Rpc2FibGVkUmVmQ291bnQpOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICB9Ci0gICAgCi0jaWYgREVCVUdfQVVESU9OT0RFX1JFRkVSRU5DRVMKLSAgICBwcmludGYo
IiVwOiAlZDogQXVkaW9Ob2RlOjpkZXJlZiglZCkgJWQgJWQgJWRcbiIsIHRoaXMsIG5vZGVUeXBl
KCksIHJlZlR5cGUsIG1fbm9ybWFsUmVmQ291bnQsIG1fY29ubmVjdGlvblJlZkNvdW50LCBtX2Rp
c2FibGVkUmVmQ291bnQpOwotI2VuZGlmCi0KLSAgICBpZiAoIW1fY29ubmVjdGlvblJlZkNvdW50
KSB7Ci0gICAgICAgIGlmICghbV9ub3JtYWxSZWZDb3VudCAmJiAhbV9kaXNhYmxlZFJlZkNvdW50
KSB7Ci0gICAgICAgICAgICBpZiAoIW1faXNNYXJrZWRGb3JEZWxldGlvbikgewotICAgICAgICAg
ICAgICAgIC8vIEFsbCByZWZlcmVuY2VzIGFyZSBnb25lIC0gd2UgbmVlZCB0byBnbyBhd2F5Lgot
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX291dHB1dHMuc2l6ZSgp
OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIG91dHB1dChpKS0+ZGlzY29ubmVjdEFsbElucHV0
cygpOyAvLyB0aGlzIHdpbGwgZGVyZWYoKSBub2RlcyB3ZSdyZSBjb25uZWN0ZWQgdG8uLi4KLQot
ICAgICAgICAgICAgICAgIC8vIE1hcmsgZm9yIGRlbGV0aW9uIGF0IGVuZCBvZiBlYWNoIHJlbmRl
ciBxdWFudHVtIG9yIHdoZW4gY29udGV4dCBzaHV0cyBkb3duLgotICAgICAgICAgICAgICAgIGNv
bnRleHQoKS0+bWFya0ZvckRlbGV0aW9uKHRoaXMpOwotICAgICAgICAgICAgICAgIG1faXNNYXJr
ZWRGb3JEZWxldGlvbiA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAo
cmVmVHlwZSA9PSBSZWZUeXBlQ29ubmVjdGlvbikgewotICAgICAgICAgICAgaWYgKCFtX2lzRGlz
YWJsZWQpIHsKLSAgICAgICAgICAgICAgICAvLyBTdGlsbCBtYXkgaGF2ZSBKYXZhU2NyaXB0IHJl
ZmVyZW5jZXMsIGJ1dCBubyBtb3JlICJhY3RpdmUiIGNvbm5lY3Rpb24gcmVmZXJlbmNlcywgc28g
cHV0IGFsbCBvZiBvdXIgb3V0cHV0cyBpbiBhICJkb3JtYW50IiBkaXNhYmxlZCBzdGF0ZS4KLSAg
ICAgICAgICAgICAgICAvLyBHYXJiYWdlIGNvbGxlY3Rpb24gbWF5IHRha2UgYSB2ZXJ5IGxvbmcg
dGltZSBhZnRlciB0aGlzIHRpbWUsIHNvIHRoZSAiZG9ybWFudCIgZGlzYWJsZWQgbm9kZXMgc2hv
dWxkIG5vdCBib2cgZG93biB0aGUgcmVuZGVyaW5nLi4uCi0KLSAgICAgICAgICAgICAgICAvLyBB
cyBmYXIgYXMgSmF2YVNjcmlwdCBpcyBjb25jZXJuZWQsIG91ciBvdXRwdXRzIG11c3Qgc3RpbGwg
YXBwZWFyIHRvIGJlIGNvbm5lY3RlZC4KLSAgICAgICAgICAgICAgICAvLyBCdXQgaW50ZXJuYWxs
eSBvdXIgb3V0cHV0cyBzaG91bGQgYmUgZGlzYWJsZWQgZnJvbSB0aGUgaW5wdXRzIHRoZXkncmUg
Y29ubmVjdGVkIHRvLgotICAgICAgICAgICAgICAgIC8vIGRpc2FibGUoKSBjYW4gcmVjdXJzaXZl
bHkgZGVyZWYgY29ubmVjdGlvbnMgKGFuZCBjYWxsIGRpc2FibGUoKSkgZG93biBhIHdob2xlIGNo
YWluIG9mIGNvbm5lY3RlZCBub2Rlcy4KLQotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3ZSBz
cGVjaWFsIGNhc2UgdGhlIGNvbnZvbHZlciBhbmQgZGVsYXkgc2luY2UgdGhleSBoYXZlIGEgc2ln
bmlmaWNhbnQgdGFpbC10aW1lIGFuZCBzaG91bGRuJ3QgYmUgZGlzY29ubmVjdGVkIHNpbXBseQot
ICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhleSBubyBsb25nZXIgaGF2ZSBhbnkgaW5wdXQg
Y29ubmVjdGlvbnMuICBUaGlzIG5lZWRzIHRvIGJlIGhhbmRsZWQgbW9yZSBnZW5lcmFsbHkgd2hl
cmUgQXVkaW9Ob2RlcyBoYXZlCi0gICAgICAgICAgICAgICAgLy8gYSB0YWlsVGltZSBhdHRyaWJ1
dGUuICBUaGVuIHRoZSBBdWRpb05vZGUgb25seSBuZWVkcyB0byByZW1haW4gImFjdGl2ZSIgZm9y
IHRhaWxUaW1lIHNlY29uZHMgYWZ0ZXIgdGhlcmUgYXJlIG5vCi0gICAgICAgICAgICAgICAgLy8g
bG9uZ2VyIGFueSBhY3RpdmUgY29ubmVjdGlvbnMuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGVU
eXBlKCkgIT0gTm9kZVR5cGVDb252b2x2ZXIgJiYgbm9kZVR5cGUoKSAhPSBOb2RlVHlwZURlbGF5
KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1faXNEaXNhYmxlZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX291dHB1dHMuc2l6ZSgpOyArK2kp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQoaSktPmRpc2FibGUoKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLSNpZiBERUJV
R19BVURJT05PREVfUkVGRVJFTkNFUwotCi1ib29sIEF1ZGlvTm9kZTo6c19pc05vZGVDb3VudElu
aXRpYWxpemVkID0gZmFsc2U7Ci1pbnQgQXVkaW9Ob2RlOjpzX25vZGVDb3VudFtOb2RlVHlwZUVu
ZF07Ci0KLXZvaWQgQXVkaW9Ob2RlOjpwcmludE5vZGVDb3VudHMoKQotewotICAgIHByaW50Zigi
XG5cbiIpOwotICAgIHByaW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKLSAg
ICBwcmludGYoIkF1ZGlvTm9kZTogcmVmZXJlbmNlIGNvdW50c1xuIik7Ci0gICAgcHJpbnRmKCI9
PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IE5vZGVUeXBlRW5kOyArK2kpCi0gICAgICAgIHByaW50ZigiJWQ6ICVkXG4iLCBpLCBz
X25vZGVDb3VudFtpXSk7Ci0KLSAgICBwcmludGYoIj09PT09PT09PT09PT09PT09PT09PT09PT09
PVxuXG5cbiIpOwotfQotCi0jZW5kaWYgLy8gREVCVUdfQVVESU9OT0RFX1JFRkVSRU5DRVMKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCShyZXZpc2lvbiAxMTE0MzMpCisrKyBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSwx
ODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQXVkaW9Ob2RlX2gKLSNkZWZpbmUgQXVk
aW9Ob2RlX2gKLQotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0KLSNkZWZpbmUgREVCVUdfQVVESU9OT0RFX1JFRkVSRU5DRVMgMAotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIEF1ZGlvQ29udGV4dDsKLWNsYXNzIEF1ZGlvTm9kZUlucHV0OwotY2xh
c3MgQXVkaW9Ob2RlT3V0cHV0OwotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi0vLyBB
biBBdWRpb05vZGUgaXMgdGhlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrIGZvciBoYW5kbGluZyBhdWRp
byB3aXRoaW4gYW4gQXVkaW9Db250ZXh0LgotLy8gSXQgbWF5IGJlIGFuIGF1ZGlvIHNvdXJjZSwg
YW4gaW50ZXJtZWRpYXRlIHByb2Nlc3NpbmcgbW9kdWxlLCBvciBhbiBhdWRpbyBkZXN0aW5hdGlv
bi4KLS8vIEVhY2ggQXVkaW9Ob2RlIGNhbiBoYXZlIGlucHV0cyBhbmQvb3Igb3V0cHV0cy4gQW4g
QXVkaW9Tb3VyY2VOb2RlIGhhcyBubyBpbnB1dHMgYW5kIGEgc2luZ2xlIG91dHB1dC4KLS8vIEFu
IEF1ZGlvRGVzdGluYXRpb25Ob2RlIGhhcyBvbmUgaW5wdXQgYW5kIG5vIG91dHB1dHMgYW5kIHJl
cHJlc2VudHMgdGhlIGZpbmFsIGRlc3RpbmF0aW9uIHRvIHRoZSBhdWRpbyBoYXJkd2FyZS4KLS8v
IE1vc3QgcHJvY2Vzc2luZyBub2RlcyBzdWNoIGFzIGZpbHRlcnMgd2lsbCBoYXZlIG9uZSBpbnB1
dCBhbmQgb25lIG91dHB1dCwgYWx0aG91Z2ggbXVsdGlwbGUgaW5wdXRzIGFuZCBvdXRwdXRzIGFy
ZSBwb3NzaWJsZS4KLQotY2xhc3MgQXVkaW9Ob2RlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsgUHJv
Y2Vzc2luZ1NpemVJbkZyYW1lcyA9IDEyOCB9OwotCi0gICAgQXVkaW9Ob2RlKEF1ZGlvQ29udGV4
dCosIGZsb2F0IHNhbXBsZVJhdGUpOwotICAgIHZpcnR1YWwgfkF1ZGlvTm9kZSgpOwotCi0gICAg
QXVkaW9Db250ZXh0KiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9Ci0KLSAg
ICBlbnVtIE5vZGVUeXBlIHsKLSAgICAgICAgTm9kZVR5cGVVbmtub3duLAotICAgICAgICBOb2Rl
VHlwZURlc3RpbmF0aW9uLAotICAgICAgICBOb2RlVHlwZUF1ZGlvQnVmZmVyU291cmNlLAotICAg
ICAgICBOb2RlVHlwZU1lZGlhRWxlbWVudEF1ZGlvU291cmNlLAotICAgICAgICBOb2RlVHlwZUph
dmFTY3JpcHQsCi0gICAgICAgIE5vZGVUeXBlQmlxdWFkRmlsdGVyLAotICAgICAgICBOb2RlVHlw
ZUxvd1Bhc3MyRmlsdGVyLAotICAgICAgICBOb2RlVHlwZUhpZ2hQYXNzMkZpbHRlciwKLSAgICAg
ICAgTm9kZVR5cGVQYW5uZXIsCi0gICAgICAgIE5vZGVUeXBlQ29udm9sdmVyLAotICAgICAgICBO
b2RlVHlwZURlbGF5LAotICAgICAgICBOb2RlVHlwZUdhaW4sCi0gICAgICAgIE5vZGVUeXBlQ2hh
bm5lbFNwbGl0dGVyLAotICAgICAgICBOb2RlVHlwZUNoYW5uZWxNZXJnZXIsCi0gICAgICAgIE5v
ZGVUeXBlQW5hbHlzZXIsCi0gICAgICAgIE5vZGVUeXBlRHluYW1pY3NDb21wcmVzc29yLAotICAg
ICAgICBOb2RlVHlwZVdhdmVTaGFwZXIsCi0gICAgICAgIE5vZGVUeXBlRW5kCi0gICAgfTsKLQot
ICAgIE5vZGVUeXBlIG5vZGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlVHlwZTsgfQotICAg
IHZvaWQgc2V0Tm9kZVR5cGUoTm9kZVR5cGUpOwotCi0gICAgLy8gV2UgaGFuZGxlIG91ciBvd24g
cmVmLWNvdW50aW5nIGJlY2F1c2Ugb2YgdGhlIHRocmVhZGluZyBpc3N1ZXMgYW5kIHN1YnRsZSBu
YXR1cmUgb2YKLSAgICAvLyBob3cgQXVkaW9Ob2RlcyBjYW4gY29udGludWUgcHJvY2Vzc2luZyAo
cGxheWluZyBvbmUtc2hvdCBzb3VuZCkgYWZ0ZXIgdGhlcmUgYXJlIG5vIG1vcmUKLSAgICAvLyBK
YXZhU2NyaXB0IHJlZmVyZW5jZXMgdG8gdGhlIG9iamVjdC4KLSAgICBlbnVtIFJlZlR5cGUgeyBS
ZWZUeXBlTm9ybWFsLCBSZWZUeXBlQ29ubmVjdGlvbiwgUmVmVHlwZURpc2FibGVkIH07Ci0KLSAg
ICAvLyBDYW4gYmUgY2FsbGVkIGZyb20gbWFpbiB0aHJlYWQgb3IgY29udGV4dCdzIGF1ZGlvIHRo
cmVhZC4KLSAgICB2b2lkIHJlZihSZWZUeXBlIHJlZlR5cGUgPSBSZWZUeXBlTm9ybWFsKTsKLSAg
ICB2b2lkIGRlcmVmKFJlZlR5cGUgcmVmVHlwZSA9IFJlZlR5cGVOb3JtYWwpOwotCi0gICAgLy8g
Q2FuIGJlIGNhbGxlZCBmcm9tIG1haW4gdGhyZWFkIG9yIGNvbnRleHQncyBhdWRpbyB0aHJlYWQu
ICBJdCBtdXN0IGJlIGNhbGxlZCB3aGlsZSB0aGUgY29udGV4dCdzIGdyYXBoIGxvY2sgaXMgaGVs
ZC4KLSAgICB2b2lkIGZpbmlzaERlcmVmKFJlZlR5cGUgcmVmVHlwZSk7Ci0KLSAgICAvLyBUaGUg
QXVkaW9Ob2RlSW5wdXQocykgKGlmIGFueSkgd2lsbCBhbHJlYWR5IGhhdmUgdGhlaXIgaW5wdXQg
ZGF0YSBhdmFpbGFibGUgd2hlbiBwcm9jZXNzKCkgaXMgY2FsbGVkLgotICAgIC8vIFN1YmNsYXNz
ZXMgd2lsbCB0YWtlIHRoaXMgaW5wdXQgZGF0YSBhbmQgcHV0IHRoZSByZXN1bHRzIGluIHRoZSBB
dWRpb0J1cyhzKSBvZiBpdHMgQXVkaW9Ob2RlT3V0cHV0KHMpIChpZiBhbnkpLgotICAgIC8vIENh
bGxlZCBmcm9tIGNvbnRleHQncyBhdWRpbyB0aHJlYWQuCi0gICAgdmlydHVhbCB2b2lkIHByb2Nl
c3Moc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykgPSAwOwotCi0gICAgLy8gUmVzZXRzIERTUCBwcm9j
ZXNzaW5nIHN0YXRlIChjbGVhcnMgZGVsYXkgbGluZXMsIGZpbHRlciBtZW1vcnksIGV0Yy4pCi0g
ICAgLy8gQ2FsbGVkIGZyb20gY29udGV4dCdzIGF1ZGlvIHRocmVhZC4KLSAgICB2aXJ0dWFsIHZv
aWQgcmVzZXQoKSA9IDA7Ci0KLSAgICAvLyBObyBzaWduaWZpY2FudCByZXNvdXJjZXMgc2hvdWxk
IGJlIGFsbG9jYXRlZCB1bnRpbCBpbml0aWFsaXplKCkgaXMgY2FsbGVkLgotICAgIC8vIFByb2Nl
c3NpbmcgbWF5IG5vdCBvY2N1ciB1bnRpbCBhIG5vZGUgaXMgaW5pdGlhbGl6ZWQuCi0gICAgdmly
dHVhbCB2b2lkIGluaXRpYWxpemUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdW5pbml0aWFsaXplKCk7
Ci0KLSAgICBib29sIGlzSW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzSW5pdGlhbGl6
ZWQ7IH0KLSAgICB2b2lkIGxhenlJbml0aWFsaXplKCk7Ci0KLSAgICB1bnNpZ25lZCBudW1iZXJP
ZklucHV0cygpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRzLnNpemUoKTsgfQotICAgIHVuc2lnbmVk
IG51bWJlck9mT3V0cHV0cygpIGNvbnN0IHsgcmV0dXJuIG1fb3V0cHV0cy5zaXplKCk7IH0KLQot
ICAgIEF1ZGlvTm9kZUlucHV0KiBpbnB1dCh1bnNpZ25lZCk7Ci0gICAgQXVkaW9Ob2RlT3V0cHV0
KiBvdXRwdXQodW5zaWduZWQpOwotCi0gICAgLy8gQ2FsbGVkIGZyb20gbWFpbiB0aHJlYWQgYnkg
Y29ycmVzcG9uZGluZyBKYXZhU2NyaXB0IG1ldGhvZHMuCi0gICAgdm9pZCBjb25uZWN0KEF1ZGlv
Tm9kZSosIHVuc2lnbmVkIG91dHB1dEluZGV4LCB1bnNpZ25lZCBpbnB1dEluZGV4LCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCBkaXNjb25uZWN0KHVuc2lnbmVkIG91dHB1dEluZGV4LCBFeGNl
cHRpb25Db2RlJik7Ci0KLSAgICB2aXJ0dWFsIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCB7IHJl
dHVybiBtX3NhbXBsZVJhdGU7IH0KLQotICAgIC8vIHByb2Nlc3NJZk5lY2Vzc2FyeSgpIGlzIGNh
bGxlZCBieSBvdXIgb3V0cHV0KHMpIHdoZW4gdGhlIHJlbmRlcmluZyBncmFwaCBuZWVkcyB0aGlz
IEF1ZGlvTm9kZSB0byBwcm9jZXNzLgotICAgIC8vIFRoaXMgbWV0aG9kIGVuc3VyZXMgdGhhdCB0
aGUgQXVkaW9Ob2RlIHdpbGwgb25seSBwcm9jZXNzIG9uY2UgcGVyIHJlbmRlcmluZyB0aW1lIHF1
YW50dW0gZXZlbiBpZiBpdCdzIGNhbGxlZCByZXBlYXRlZGx5LgotICAgIC8vIFRoaXMgaGFuZGxl
cyB0aGUgY2FzZSBvZiAiZmFub3V0IiB3aGVyZSBhbiBvdXRwdXQgaXMgY29ubmVjdGVkIHRvIG11
bHRpcGxlIEF1ZGlvTm9kZSBpbnB1dHMuCi0gICAgLy8gQ2FsbGVkIGZyb20gY29udGV4dCdzIGF1
ZGlvIHRocmVhZC4KLSAgICB2b2lkIHByb2Nlc3NJZk5lY2Vzc2FyeShzaXplX3QgZnJhbWVzVG9Q
cm9jZXNzKTsKLQotICAgIC8vIENhbGxlZCB3aGVuIGEgbmV3IGNvbm5lY3Rpb24gaGFzIGJlZW4g
bWFkZSB0byBvbmUgb2Ygb3VyIGlucHV0cyBvciB0aGUgY29ubmVjdGlvbiBudW1iZXIgb2YgY2hh
bm5lbHMgaGFzIGNoYW5nZWQuCi0gICAgLy8gVGhpcyBwb3RlbnRpYWxseSBnaXZlcyB1cyBlbm91
Z2ggaW5mb3JtYXRpb24gdG8gcGVyZm9ybSBhIGxhenkgaW5pdGlhbGl6YXRpb24gb3IsIGlmIG5l
Y2Vzc2FyeSwgYSByZS1pbml0aWFsaXphdGlvbi4KLSAgICAvLyBDYWxsZWQgZnJvbSBtYWluIHRo
cmVhZC4KLSAgICB2aXJ0dWFsIHZvaWQgY2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQoQXVk
aW9Ob2RlSW5wdXQqKTsKLQotI2lmIERFQlVHX0FVRElPTk9ERV9SRUZFUkVOQ0VTCi0gICAgc3Rh
dGljIHZvaWQgcHJpbnROb2RlQ291bnRzKCk7Ci0jZW5kaWYKLQotICAgIGJvb2wgaXNNYXJrZWRG
b3JEZWxldGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNNYXJrZWRGb3JEZWxldGlvbjsgfQotCi0g
ICAgLy8gdGFpbFRpbWUoKSBpcyB0aGUgbGVuZ3RoIG9mIHRpbWUgKG5vdCBjb3VudGluZyBsYXRl
bmN5IHRpbWUpIHdoZXJlIG5vbi16ZXJvIG91dHB1dCBtYXkgb2NjdXIgYWZ0ZXIgY29udGludW91
cyBzaWxlbnQgaW5wdXQuCi0gICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCA9IDA7
Ci0gICAgLy8gbGF0ZW5jeVRpbWUoKSBpcyB0aGUgbGVuZ3RoIG9mIHRpbWUgaXQgdGFrZXMgZm9y
IG5vbi16ZXJvIG91dHB1dCB0byBhcHBlYXIgYWZ0ZXIgbm9uLXplcm8gaW5wdXQgaXMgcHJvdmlk
ZWQuIFRoaXMgb25seSBhcHBsaWVzIHRvCi0gICAgLy8gcHJvY2Vzc2luZyBkZWxheSB3aGljaCBp
cyBhbiBhcnRpZmFjdCBvZiB0aGUgcHJvY2Vzc2luZyBhbGdvcml0aG0gY2hvc2VuIGFuZCBpcyAq
bm90KiBwYXJ0IG9mIHRoZSBpbnRyaW5zaWMgZGVzaXJlZCBlZmZlY3QuIEZvciAKLSAgICAvLyBl
eGFtcGxlLCBhICJkZWxheSIgZWZmZWN0IGlzIGV4cGVjdGVkIHRvIGRlbGF5IHRoZSBzaWduYWws
IGFuZCB0aHVzIHdvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGxhdGVuY3kuCi0gICAgdmlydHVhbCBk
b3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCA9IDA7Ci0KLXByb3RlY3RlZDoKLSAgICAvLyBJbnB1
dHMgYW5kIG91dHB1dHMgbXVzdCBiZSBjcmVhdGVkIGJlZm9yZSB0aGUgQXVkaW9Ob2RlIGlzIGlu
aXRpYWxpemVkLgotICAgIHZvaWQgYWRkSW5wdXQoUGFzc093blB0cjxBdWRpb05vZGVJbnB1dD4p
OwotICAgIHZvaWQgYWRkT3V0cHV0KFBhc3NPd25QdHI8QXVkaW9Ob2RlT3V0cHV0Pik7Ci0gICAg
Ci0gICAgLy8gQ2FsbGVkIGJ5IHByb2Nlc3NJZk5lY2Vzc2FyeSgpIHRvIGNhdXNlIGFsbCBwYXJ0
cyBvZiB0aGUgcmVuZGVyaW5nIGdyYXBoIGNvbm5lY3RlZCB0byB1cyB0byBwcm9jZXNzLgotICAg
IC8vIEVhY2ggcmVuZGVyaW5nIHF1YW50dW0sIHRoZSBhdWRpbyBkYXRhIGZvciBlYWNoIG9mIHRo
ZSBBdWRpb05vZGUncyBpbnB1dHMgd2lsbCBiZSBhdmFpbGFibGUgYWZ0ZXIgdGhpcyBtZXRob2Qg
aXMgY2FsbGVkLgotICAgIC8vIENhbGxlZCBmcm9tIGNvbnRleHQncyBhdWRpbyB0aHJlYWQuCi0g
ICAgdmlydHVhbCB2b2lkIHB1bGxJbnB1dHMoc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7Ci0KLXBy
aXZhdGU6Ci0gICAgdm9sYXRpbGUgYm9vbCBtX2lzSW5pdGlhbGl6ZWQ7Ci0gICAgTm9kZVR5cGUg
bV9ub2RlVHlwZTsKLSAgICBSZWZQdHI8QXVkaW9Db250ZXh0PiBtX2NvbnRleHQ7Ci0gICAgZmxv
YXQgbV9zYW1wbGVSYXRlOwotICAgIFZlY3RvcjxPd25QdHI8QXVkaW9Ob2RlSW5wdXQ+ID4gbV9p
bnB1dHM7Ci0gICAgVmVjdG9yPE93blB0cjxBdWRpb05vZGVPdXRwdXQ+ID4gbV9vdXRwdXRzOwot
Ci0gICAgZG91YmxlIG1fbGFzdFByb2Nlc3NpbmdUaW1lOwotCi0gICAgLy8gUmVmLWNvdW50aW5n
Ci0gICAgdm9sYXRpbGUgaW50IG1fbm9ybWFsUmVmQ291bnQ7Ci0gICAgdm9sYXRpbGUgaW50IG1f
Y29ubmVjdGlvblJlZkNvdW50OwotICAgIHZvbGF0aWxlIGludCBtX2Rpc2FibGVkUmVmQ291bnQ7
Ci0gICAgCi0gICAgYm9vbCBtX2lzTWFya2VkRm9yRGVsZXRpb247Ci0gICAgYm9vbCBtX2lzRGlz
YWJsZWQ7Ci0gICAgCi0jaWYgREVCVUdfQVVESU9OT0RFX1JFRkVSRU5DRVMKLSAgICBzdGF0aWMg
Ym9vbCBzX2lzTm9kZUNvdW50SW5pdGlhbGl6ZWQ7Ci0gICAgc3RhdGljIGludCBzX25vZGVDb3Vu
dFtOb2RlVHlwZUVuZF07Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEF1ZGlvTm9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b05vZGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9k
ZS5pZGwJKHJldmlzaW9uIDExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
Tm9kZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1v
ZHVsZSBhdWRpbyB7Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FV
RElPCi0gICAgXSBBdWRpb05vZGUgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9D
b250ZXh0IGNvbnRleHQ7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25n
IG51bWJlck9mSW5wdXRzOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9u
ZyBudW1iZXJPZk91dHB1dHM7Ci0KLSAgICAgICAgdm9pZCBjb25uZWN0KGluIEF1ZGlvTm9kZSBk
ZXN0aW5hdGlvbiwgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gdW5zaWduZWQgbG9u
ZyBvdXRwdXQsIGluIFtPcHRpb25hbD1EZWZhdWx0SXNVbmRlZmluZWRdIHVuc2lnbmVkIGxvbmcg
aW5wdXQpCi0gICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLQotICAgICAgICB2b2lk
IGRpc2Nvbm5lY3QoaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gdW5zaWduZWQgbG9u
ZyBvdXRwdXQpCi0gICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLSAgICB9OwotfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcAkocmV2aXNp
b24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlSW5wdXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDI3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIkF1ZGlvTm9k
ZUlucHV0LmgiCi0KLSNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKLSNpbmNsdWRlICJBdWRpb05v
ZGUuaCIKLSNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0gCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUF1ZGlv
Tm9kZUlucHV0OjpBdWRpb05vZGVJbnB1dChBdWRpb05vZGUqIG5vZGUpCi0gICAgOiBtX25vZGUo
bm9kZSkKLSAgICAsIG1fcmVuZGVyaW5nU3RhdGVOZWVkVXBkYXRpbmcoZmFsc2UpCi17Ci0gICAg
Ly8gU2V0IHRvIG1vbm8gYnkgZGVmYXVsdC4KLSAgICBtX2ludGVybmFsU3VtbWluZ0J1cyA9IGFk
b3B0UHRyKG5ldyBBdWRpb0J1cygxLCBBdWRpb05vZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXMp
KTsKLX0KLQotdm9pZCBBdWRpb05vZGVJbnB1dDo6Y29ubmVjdChBdWRpb05vZGVPdXRwdXQqIG91
dHB1dCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0gICAgCi0g
ICAgQVNTRVJUKG91dHB1dCAmJiBub2RlKCkpOwotICAgIGlmICghb3V0cHV0IHx8ICFub2RlKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENoZWNrIGlmIHdlJ3JlIGFscmVhZHkgY29ubmVj
dGVkIHRvIHRoaXMgb3V0cHV0LgotICAgIGlmIChtX291dHB1dHMuY29udGFpbnMob3V0cHV0KSkK
LSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBvdXRwdXQtPmFkZElucHV0KHRoaXMpOwot
ICAgIG1fb3V0cHV0cy5hZGQob3V0cHV0KTsKLSAgICBjaGFuZ2VkT3V0cHV0cygpOwotCi0gICAg
Ly8gU29tYm9keSBoYXMganVzdCBjb25uZWN0ZWQgdG8gdXMsIHNvIGNvdW50IGl0IGFzIGEgcmVm
ZXJlbmNlLgotICAgIG5vZGUoKS0+cmVmKEF1ZGlvTm9kZTo6UmVmVHlwZUNvbm5lY3Rpb24pOwot
fQotCi12b2lkIEF1ZGlvTm9kZUlucHV0OjpkaXNjb25uZWN0KEF1ZGlvTm9kZU91dHB1dCogb3V0
cHV0KQotewotICAgIEFTU0VSVChjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKLQotICAgIEFT
U0VSVChvdXRwdXQgJiYgbm9kZSgpKTsKLSAgICBpZiAoIW91dHB1dCB8fCAhbm9kZSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBGaXJzdCB0cnkgdG8gZGlzY29ubmVjdCBmcm9tICJhY3Rp
dmUiIGNvbm5lY3Rpb25zLgotICAgIGlmIChtX291dHB1dHMuY29udGFpbnMob3V0cHV0KSkgewot
ICAgICAgICBtX291dHB1dHMucmVtb3ZlKG91dHB1dCk7Ci0gICAgICAgIGNoYW5nZWRPdXRwdXRz
KCk7Ci0gICAgICAgIG91dHB1dC0+cmVtb3ZlSW5wdXQodGhpcyk7Ci0gICAgICAgIG5vZGUoKS0+
ZGVyZWYoQXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7IC8vIE5vdGU6IGl0J3MgaW1wb3J0
YW50IHRvIHJldHVybiBpbW1lZGlhdGVseSBhZnRlciBhbGwgZGVyZWYoKSBjYWxscyBzaW5jZSB0
aGUgbm9kZSBtYXkgYmUgZGVsZXRlZC4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAg
ICAvLyBPdGhlcndpc2UsIHRyeSB0byBkaXNjb25uZWN0IGZyb20gZGlzYWJsZWQgY29ubmVjdGlv
bnMuCi0gICAgaWYgKG1fZGlzYWJsZWRPdXRwdXRzLmNvbnRhaW5zKG91dHB1dCkpIHsKLSAgICAg
ICAgbV9kaXNhYmxlZE91dHB1dHMucmVtb3ZlKG91dHB1dCk7Ci0gICAgICAgIG91dHB1dC0+cmVt
b3ZlSW5wdXQodGhpcyk7Ci0gICAgICAgIG5vZGUoKS0+ZGVyZWYoQXVkaW9Ob2RlOjpSZWZUeXBl
RGlzYWJsZWQpOyAvLyBOb3RlOiBpdCdzIGltcG9ydGFudCB0byByZXR1cm4gaW1tZWRpYXRlbHkg
YWZ0ZXIgYWxsIGRlcmVmKCkgY2FsbHMgc2luY2UgdGhlIG5vZGUgbWF5IGJlIGRlbGV0ZWQuCi0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQot
dm9pZCBBdWRpb05vZGVJbnB1dDo6ZGlzYWJsZShBdWRpb05vZGVPdXRwdXQqIG91dHB1dCkKLXsK
LSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0KLSAgICBBU1NFUlQob3V0
cHV0ICYmIG5vZGUoKSk7Ci0gICAgaWYgKCFvdXRwdXQgfHwgIW5vZGUoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKG1fb3V0cHV0cy5jb250YWlucyhvdXRwdXQpKTsKLSAgICAKLSAg
ICBtX2Rpc2FibGVkT3V0cHV0cy5hZGQob3V0cHV0KTsKLSAgICBtX291dHB1dHMucmVtb3ZlKG91
dHB1dCk7Ci0gICAgY2hhbmdlZE91dHB1dHMoKTsKLQotICAgIG5vZGUoKS0+cmVmKEF1ZGlvTm9k
ZTo6UmVmVHlwZURpc2FibGVkKTsKLSAgICBub2RlKCktPmRlcmVmKEF1ZGlvTm9kZTo6UmVmVHlw
ZUNvbm5lY3Rpb24pOyAvLyBOb3RlOiBpdCdzIGltcG9ydGFudCB0byByZXR1cm4gaW1tZWRpYXRl
bHkgYWZ0ZXIgYWxsIGRlcmVmKCkgY2FsbHMgc2luY2UgdGhlIG5vZGUgbWF5IGJlIGRlbGV0ZWQu
Ci19Ci0KLXZvaWQgQXVkaW9Ob2RlSW5wdXQ6OmVuYWJsZShBdWRpb05vZGVPdXRwdXQqIG91dHB1
dCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0KLSAgICBBU1NF
UlQob3V0cHV0ICYmIG5vZGUoKSk7Ci0gICAgaWYgKCFvdXRwdXQgfHwgIW5vZGUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fZGlzYWJsZWRPdXRwdXRzLmNvbnRhaW5zKG91dHB1
dCkpOwotCi0gICAgLy8gTW92ZSBvdXRwdXQgZnJvbSBkaXNhYmxlZCBsaXN0IHRvIGFjdGl2ZSBs
aXN0LgotICAgIG1fb3V0cHV0cy5hZGQob3V0cHV0KTsKLSAgICBtX2Rpc2FibGVkT3V0cHV0cy5y
ZW1vdmUob3V0cHV0KTsKLSAgICBjaGFuZ2VkT3V0cHV0cygpOwotCi0gICAgbm9kZSgpLT5yZWYo
QXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7Ci0gICAgbm9kZSgpLT5kZXJlZihBdWRpb05v
ZGU6OlJlZlR5cGVEaXNhYmxlZCk7IC8vIE5vdGU6IGl0J3MgaW1wb3J0YW50IHRvIHJldHVybiBp
bW1lZGlhdGVseSBhZnRlciBhbGwgZGVyZWYoKSBjYWxscyBzaW5jZSB0aGUgbm9kZSBtYXkgYmUg
ZGVsZXRlZC4KLX0KLQotdm9pZCBBdWRpb05vZGVJbnB1dDo6Y2hhbmdlZE91dHB1dHMoKQotewot
ICAgIEFTU0VSVChjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKLSAgICBpZiAoIW1fcmVuZGVy
aW5nU3RhdGVOZWVkVXBkYXRpbmcgJiYgIW5vZGUoKS0+aXNNYXJrZWRGb3JEZWxldGlvbigpKSB7
ICAgIAotICAgICAgICBjb250ZXh0KCktPm1hcmtBdWRpb05vZGVJbnB1dERpcnR5KHRoaXMpOwot
ICAgICAgICBtX3JlbmRlcmluZ1N0YXRlTmVlZFVwZGF0aW5nID0gdHJ1ZTsKLSAgICB9Ci19Ci0K
LXZvaWQgQXVkaW9Ob2RlSW5wdXQ6OnVwZGF0ZVJlbmRlcmluZ1N0YXRlKCkKLXsKLSAgICBBU1NF
UlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkgJiYgY29udGV4dCgpLT5pc0dyYXBoT3duZXIo
KSk7Ci0gICAgCi0gICAgaWYgKG1fcmVuZGVyaW5nU3RhdGVOZWVkVXBkYXRpbmcgJiYgIW5vZGUo
KS0+aXNNYXJrZWRGb3JEZWxldGlvbigpKSB7Ci0gICAgICAgIC8vIENvcHkgZnJvbSBtX291dHB1
dHMgdG8gbV9yZW5kZXJpbmdPdXRwdXRzLgotICAgICAgICBtX3JlbmRlcmluZ091dHB1dHMucmVz
aXplKG1fb3V0cHV0cy5zaXplKCkpOwotICAgICAgICB1bnNpZ25lZCBqID0gMDsKLSAgICAgICAg
Zm9yIChIYXNoU2V0PEF1ZGlvTm9kZU91dHB1dCo+OjppdGVyYXRvciBpID0gbV9vdXRwdXRzLmJl
Z2luKCk7IGkgIT0gbV9vdXRwdXRzLmVuZCgpOyArK2ksICsraikgewotICAgICAgICAgICAgQXVk
aW9Ob2RlT3V0cHV0KiBvdXRwdXQgPSAqaTsKLSAgICAgICAgICAgIG1fcmVuZGVyaW5nT3V0cHV0
c1tqXSA9IG91dHB1dDsKLSAgICAgICAgICAgIG91dHB1dC0+dXBkYXRlUmVuZGVyaW5nU3RhdGUo
KTsKLSAgICAgICAgfQotCi0gICAgICAgIG5vZGUoKS0+Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9y
SW5wdXQodGhpcyk7Ci0gICAgICAgIAotICAgICAgICBtX3JlbmRlcmluZ1N0YXRlTmVlZFVwZGF0
aW5nID0gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIEF1ZGlvTm9kZUlucHV0Ojp1cGRhdGVJbnRl
cm5hbEJ1cygpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgpICYmIGNv
bnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOwotCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dENo
YW5uZWxzID0gbnVtYmVyT2ZDaGFubmVscygpOwotCi0gICAgaWYgKG51bWJlck9mSW5wdXRDaGFu
bmVscyA9PSBtX2ludGVybmFsU3VtbWluZ0J1cy0+bnVtYmVyT2ZDaGFubmVscygpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2ludGVybmFsU3VtbWluZ0J1cyA9IGFkb3B0UHRyKG5ldyBBdWRp
b0J1cyhudW1iZXJPZklucHV0Q2hhbm5lbHMsIEF1ZGlvTm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZy
YW1lcykpOwotfQotCi11bnNpZ25lZCBBdWRpb05vZGVJbnB1dDo6bnVtYmVyT2ZDaGFubmVscygp
IGNvbnN0Ci17Ci0gICAgLy8gRmluZCB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIG9mIHRoZSBjb25u
ZWN0aW9uIHdpdGggdGhlIGxhcmdlc3QgbnVtYmVyIG9mIGNoYW5uZWxzLgotICAgIHVuc2lnbmVk
IG1heENoYW5uZWxzID0gMTsgLy8gb25lIGNoYW5uZWwgaXMgdGhlIG1pbmltdW0gYWxsb3dlZAot
Ci0gICAgZm9yIChIYXNoU2V0PEF1ZGlvTm9kZU91dHB1dCo+OjppdGVyYXRvciBpID0gbV9vdXRw
dXRzLmJlZ2luKCk7IGkgIT0gbV9vdXRwdXRzLmVuZCgpOyArK2kpIHsKLSAgICAgICAgQXVkaW9O
b2RlT3V0cHV0KiBvdXRwdXQgPSAqaTsKLSAgICAgICAgbWF4Q2hhbm5lbHMgPSBtYXgobWF4Q2hh
bm5lbHMsIG91dHB1dC0+YnVzKCktPm51bWJlck9mQ2hhbm5lbHMoKSk7Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiBtYXhDaGFubmVsczsKLX0KLQotdW5zaWduZWQgQXVkaW9Ob2RlSW5wdXQ6Om51
bWJlck9mUmVuZGVyaW5nQ2hhbm5lbHMoKQotewotICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVk
aW9UaHJlYWQoKSk7Ci0KLSAgICAvLyBGaW5kIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgb2YgdGhl
IHJlbmRlcmluZyBjb25uZWN0aW9uIHdpdGggdGhlIGxhcmdlc3QgbnVtYmVyIG9mIGNoYW5uZWxz
LgotICAgIHVuc2lnbmVkIG1heENoYW5uZWxzID0gMTsgLy8gb25lIGNoYW5uZWwgaXMgdGhlIG1p
bmltdW0gYWxsb3dlZAotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mUmVu
ZGVyaW5nQ29ubmVjdGlvbnMoKTsgKytpKQotICAgICAgICBtYXhDaGFubmVscyA9IG1heChtYXhD
aGFubmVscywgcmVuZGVyaW5nT3V0cHV0KGkpLT5idXMoKS0+bnVtYmVyT2ZDaGFubmVscygpKTsK
LSAgICAKLSAgICByZXR1cm4gbWF4Q2hhbm5lbHM7Ci19Ci0KLUF1ZGlvQnVzKiBBdWRpb05vZGVJ
bnB1dDo6YnVzKCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkpOwot
Ci0gICAgLy8gSGFuZGxlIHNpbmdsZSBjb25uZWN0aW9uIHNwZWNpYWxseSB0byBhbGxvdyBmb3Ig
aW4tcGxhY2UgcHJvY2Vzc2luZy4KLSAgICBpZiAobnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9u
cygpID09IDEpCi0gICAgICAgIHJldHVybiByZW5kZXJpbmdPdXRwdXQoMCktPmJ1cygpOwotCi0g
ICAgLy8gTXVsdGlwbGUgY29ubmVjdGlvbnMgY2FzZSAob3Igbm8gY29ubmVjdGlvbnMpLgotICAg
IHJldHVybiBpbnRlcm5hbFN1bW1pbmdCdXMoKTsKLX0KLQotQXVkaW9CdXMqIEF1ZGlvTm9kZUlu
cHV0OjppbnRlcm5hbFN1bW1pbmdCdXMoKQotewotICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVk
aW9UaHJlYWQoKSk7Ci0KLSAgICBBU1NFUlQobnVtYmVyT2ZSZW5kZXJpbmdDaGFubmVscygpID09
IG1faW50ZXJuYWxTdW1taW5nQnVzLT5udW1iZXJPZkNoYW5uZWxzKCkpOwotCi0gICAgcmV0dXJu
IG1faW50ZXJuYWxTdW1taW5nQnVzLmdldCgpOwotfQotCi12b2lkIEF1ZGlvTm9kZUlucHV0Ojpz
dW1BbGxDb25uZWN0aW9ucyhBdWRpb0J1cyogc3VtbWluZ0J1cywgc2l6ZV90IGZyYW1lc1RvUHJv
Y2VzcykKLXsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkpOwotCi0gICAg
Ly8gV2Ugc2hvdWxkbid0IGJlIGNhbGxpbmcgdGhpcyBtZXRob2QgaWYgdGhlcmUncyBvbmx5IG9u
ZSBjb25uZWN0aW9uLCBzaW5jZSBpdCdzIGxlc3MgZWZmaWNpZW50LgotICAgIEFTU0VSVChudW1i
ZXJPZlJlbmRlcmluZ0Nvbm5lY3Rpb25zKCkgPiAxKTsKLQotICAgIEFTU0VSVChzdW1taW5nQnVz
KTsKLSAgICBpZiAoIXN1bW1pbmdCdXMpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAg
c3VtbWluZ0J1cy0+emVybygpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJl
ck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKTsgKytpKSB7Ci0gICAgICAgIEF1ZGlvTm9kZU91dHB1
dCogb3V0cHV0ID0gcmVuZGVyaW5nT3V0cHV0KGkpOwotICAgICAgICBBU1NFUlQob3V0cHV0KTsK
LQotICAgICAgICAvLyBSZW5kZXIgYXVkaW8gZnJvbSB0aGlzIG91dHB1dC4KLSAgICAgICAgQXVk
aW9CdXMqIGNvbm5lY3Rpb25CdXMgPSBvdXRwdXQtPnB1bGwoMCwgZnJhbWVzVG9Qcm9jZXNzKTsK
LQotICAgICAgICAvLyBTdW0sIHdpdGggdW5pdHktZ2Fpbi4KLSAgICAgICAgc3VtbWluZ0J1cy0+
c3VtRnJvbSgqY29ubmVjdGlvbkJ1cyk7Ci0gICAgfQotfQotCi1BdWRpb0J1cyogQXVkaW9Ob2Rl
SW5wdXQ6OnB1bGwoQXVkaW9CdXMqIGluUGxhY2VCdXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3Mp
Ci17Ci0gICAgQVNTRVJUKGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgpKTsKLQotICAgIC8vIEhh
bmRsZSBzaW5nbGUgY29ubmVjdGlvbiBjYXNlLgotICAgIGlmIChudW1iZXJPZlJlbmRlcmluZ0Nv
bm5lY3Rpb25zKCkgPT0gMSkgewotICAgICAgICAvLyBUaGUgb3V0cHV0IHdpbGwgb3B0aW1pemUg
cHJvY2Vzc2luZyB1c2luZyBpblBsYWNlQnVzIGlmIGl0J3MgYWJsZS4KLSAgICAgICAgQXVkaW9O
b2RlT3V0cHV0KiBvdXRwdXQgPSB0aGlzLT5yZW5kZXJpbmdPdXRwdXQoMCk7Ci0gICAgICAgIHJl
dHVybiBvdXRwdXQtPnB1bGwoaW5QbGFjZUJ1cywgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB9Ci0K
LSAgICBBdWRpb0J1cyogaW50ZXJuYWxTdW1taW5nQnVzID0gdGhpcy0+aW50ZXJuYWxTdW1taW5n
QnVzKCk7Ci0KLSAgICBpZiAoIW51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKSkgewotICAg
ICAgICAvLyBBdCBsZWFzdCwgZ2VuZXJhdGUgc2lsZW5jZSBpZiB3ZSdyZSBub3QgY29ubmVjdGVk
IHRvIGFueXRoaW5nLgotICAgICAgICAvLyBGSVhNRTogaWYgd2Ugd2FudGVkIHRvIGdldCBmYW5j
eSwgd2UgY291bGQgcHJvcGFnYXRlIGEgJ3NpbGVudCBoaW50JyBoZXJlIHRvIG9wdGltaXplIHRo
ZSBkb3duc3RyZWFtIGdyYXBoIHByb2Nlc3NpbmcuCi0gICAgICAgIGludGVybmFsU3VtbWluZ0J1
cy0+emVybygpOwotICAgICAgICByZXR1cm4gaW50ZXJuYWxTdW1taW5nQnVzOwotICAgIH0KLQot
ICAgIC8vIEhhbmRsZSBtdWx0aXBsZSBjb25uZWN0aW9ucyBjYXNlLgotICAgIHN1bUFsbENvbm5l
Y3Rpb25zKGludGVybmFsU3VtbWluZ0J1cywgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICAKLSAgICBy
ZXR1cm4gaW50ZXJuYWxTdW1taW5nQnVzOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9Ob2RlSW5wdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb05vZGVJbnB1dC5oCShyZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyOCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwot
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBdWRpb05vZGVJbnB1dF9oCi0jZGVmaW5lIEF1ZGlvTm9k
ZUlucHV0X2gKLQotI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgi
Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9Ob2RlOwotY2xhc3MgQXVkaW9Ob2RlT3V0
cHV0OwotCi0vLyBBbiBBdWRpb05vZGVJbnB1dCByZXByZXNlbnRzIGFuIGlucHV0IHRvIGFuIEF1
ZGlvTm9kZSBhbmQgY2FuIGJlIGNvbm5lY3RlZCBmcm9tIG9uZSBvciBtb3JlIEF1ZGlvTm9kZU91
dHB1dHMuCi0vLyBJbiB0aGUgY2FzZSBvZiBtdWx0aXBsZSBjb25uZWN0aW9ucywgdGhlIGlucHV0
IHdpbGwgYWN0IGFzIGEgdW5pdHktZ2FpbiBzdW1taW5nIGp1bmN0aW9uLCBtaXhpbmcgYWxsIHRo
ZSBvdXRwdXRzLgotLy8gVGhlIG51bWJlciBvZiBjaGFubmVscyBvZiB0aGUgaW5wdXQncyBidXMg
aXMgdGhlIG1heGltdW0gb2YgdGhlIG51bWJlciBvZiBjaGFubmVscyBvZiBhbGwgaXRzIGNvbm5l
Y3Rpb25zLgotCi1jbGFzcyBBdWRpb05vZGVJbnB1dCB7Ci1wdWJsaWM6Ci0gICAgQXVkaW9Ob2Rl
SW5wdXQoQXVkaW9Ob2RlKik7Ci0KLSAgICAvLyBDYW4gYmUgY2FsbGVkIGZyb20gYW55IHRocmVh
ZC4KLSAgICBBdWRpb05vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KLSAgICBB
dWRpb0NvbnRleHQqIGNvbnRleHQoKSB7IHJldHVybiBtX25vZGUtPmNvbnRleHQoKTsgfQotCi0g
ICAgLy8gTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgY29udGV4dCdzIGdyYXBoIGxvY2suCi0gICAg
dm9pZCBjb25uZWN0KEF1ZGlvTm9kZU91dHB1dCopOwotICAgIHZvaWQgZGlzY29ubmVjdChBdWRp
b05vZGVPdXRwdXQqKTsKLQotICAgIC8vIGRpc2FibGUoKSB3aWxsIHRha2UgdGhlIG91dHB1dCBv
dXQgb2YgdGhlIGFjdGl2ZSBjb25uZWN0aW9ucyBsaXN0IGFuZCBzZXQgYXNpZGUgaW4gYSBkaXNh
YmxlZCBsaXN0LgotICAgIC8vIGVuYWJsZSgpIHdpbGwgcHV0IHRoZSBvdXRwdXQgYmFjayBpbnRv
IHRoZSBhY3RpdmUgY29ubmVjdGlvbnMgbGlzdC4KLSAgICAvLyBNdXN0IGJlIGNhbGxlZCB3aXRo
IHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jay4KLSAgICB2b2lkIGVuYWJsZShBdWRpb05vZGVPdXRw
dXQqKTsKLSAgICB2b2lkIGRpc2FibGUoQXVkaW9Ob2RlT3V0cHV0Kik7Ci0KLSAgICAvLyBwdWxs
KCkgcHJvY2Vzc2VzIGFsbCBvZiB0aGUgQXVkaW9Ob2RlcyBjb25uZWN0ZWQgdG8gdXMuCi0gICAg
Ly8gSW4gdGhlIGNhc2Ugb2YgbXVsdGlwbGUgY29ubmVjdGlvbnMgaXQgc3VtcyB0aGUgcmVzdWx0
IGludG8gYW4gaW50ZXJuYWwgc3VtbWluZyBidXMuCi0gICAgLy8gSW4gdGhlIHNpbmdsZSBjb25u
ZWN0aW9uIGNhc2UsIGl0IGFsbG93cyBpbi1wbGFjZSBwcm9jZXNzaW5nIHdoZXJlIHBvc3NpYmxl
IHVzaW5nIGluUGxhY2VCdXMuCi0gICAgLy8gSXQgcmV0dXJucyB0aGUgYnVzIHdoaWNoIGl0IHJl
bmRlcmVkIGludG8sIHJldHVybmluZyBpblBsYWNlQnVzIGlmIGluLXBsYWNlIHByb2Nlc3Npbmcg
d2FzIHBlcmZvcm1lZC4KLSAgICAvLyBDYWxsZWQgZnJvbSBjb250ZXh0J3MgYXVkaW8gdGhyZWFk
LgotICAgIEF1ZGlvQnVzKiBwdWxsKEF1ZGlvQnVzKiBpblBsYWNlQnVzLCBzaXplX3QgZnJhbWVz
VG9Qcm9jZXNzKTsKLQotICAgIC8vIGJ1cygpIGNvbnRhaW5zIHRoZSByZW5kZXJlZCBhdWRpbyBh
ZnRlciBwdWxsKCkgaGFzIGJlZW4gY2FsbGVkIGZvciBlYWNoIHRpbWUgcXVhbnR1bS4KLSAgICAv
LyBDYWxsZWQgZnJvbSBjb250ZXh0J3MgYXVkaW8gdGhyZWFkLgotICAgIEF1ZGlvQnVzKiBidXMo
KTsKLSAgICAKLSAgICAvLyBUaGlzIGNvcGllcyBtX291dHB1dHMgdG8gbV9yZW5kZXJpbmdPdXRw
dXRzLiAgUGxlYXNlIHNlZSBjb21tZW50cyBmb3IgdGhlc2UgbGlzdHMgYmVsb3cuCi0gICAgLy8g
VGhpcyBtdXN0IGJlIGNhbGxlZCB3aGVuIHdlIG93biB0aGUgY29udGV4dCdzIGdyYXBoIGxvY2sg
aW4gdGhlIGF1ZGlvIHRocmVhZCBhdCB0aGUgdmVyeSBzdGFydCBvciBlbmQgb2YgdGhlIHJlbmRl
ciBxdWFudHVtLgotICAgIHZvaWQgdXBkYXRlUmVuZGVyaW5nU3RhdGUoKTsKLQotICAgIC8vIHVw
ZGF0ZUludGVybmFsQnVzKCkgdXBkYXRlcyBtX2ludGVybmFsU3VtbWluZ0J1cyBhcHByb3ByaWF0
ZWx5IGZvciB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzLgotICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxs
ZWQgd2hlbiB3ZSBvd24gdGhlIGNvbnRleHQncyBncmFwaCBsb2NrIGluIHRoZSBhdWRpbyB0aHJl
YWQgYXQgdGhlIHZlcnkgc3RhcnQgb3IgZW5kIG9mIHRoZSByZW5kZXIgcXVhbnR1bS4KLSAgICB2
b2lkIHVwZGF0ZUludGVybmFsQnVzKCk7Ci0KLSAgICAvLyBSZW5kZXJpbmcgY29kZSBhY2Nlc3Nl
cyBpdHMgdmVyc2lvbiBvZiB0aGUgY3VycmVudCBjb25uZWN0aW9ucyBoZXJlLgotICAgIHVuc2ln
bmVkIG51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3JlbmRl
cmluZ091dHB1dHMuc2l6ZSgpOyB9Ci0gICAgQXVkaW9Ob2RlT3V0cHV0KiByZW5kZXJpbmdPdXRw
dXQodW5zaWduZWQgaSkgeyByZXR1cm4gbV9yZW5kZXJpbmdPdXRwdXRzW2ldOyB9Ci0gICAgY29u
c3QgQXVkaW9Ob2RlT3V0cHV0KiByZW5kZXJpbmdPdXRwdXQodW5zaWduZWQgaSkgY29uc3QgeyBy
ZXR1cm4gbV9yZW5kZXJpbmdPdXRwdXRzW2ldOyB9Ci0gICAgYm9vbCBpc0Nvbm5lY3RlZCgpIGNv
bnN0IHsgcmV0dXJuIG51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKSA+IDA7IH0KLQotICAg
IC8vIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgb2YgdGhlIGNvbm5lY3Rpb24gd2l0aCB0aGUgbGFy
Z2VzdCBudW1iZXIgb2YgY2hhbm5lbHMuCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscygp
IGNvbnN0OyAgICAgICAgCi0gICAgCi1wcml2YXRlOgotICAgIEF1ZGlvTm9kZSogbV9ub2RlOwot
Ci0gICAgLy8gbV9vdXRwdXRzIGNvbnRhaW5zIHRoZSBBdWRpb05vZGVPdXRwdXRzIHJlcHJlc2Vu
dGluZyBjdXJyZW50IGNvbm5lY3Rpb25zIHdoaWNoIGFyZSBub3QgZGlzYWJsZWQuCi0gICAgLy8g
VGhlIHJlbmRlcmluZyBjb2RlIHNob3VsZCBuZXZlciB1c2UgdGhpcyBkaXJlY3RseSwgYnV0IGlu
c3RlYWQgdXNlcyBtX3JlbmRlcmluZ091dHB1dHMuCi0gICAgSGFzaFNldDxBdWRpb05vZGVPdXRw
dXQqPiBtX291dHB1dHM7Ci0KLSAgICAvLyBudW1iZXJPZkNvbm5lY3Rpb25zKCkgc2hvdWxkIG5l
dmVyIGJlIGNhbGxlZCBmcm9tIHRoZSBhdWRpbyByZW5kZXJpbmcgdGhyZWFkLgotICAgIC8vIElu
c3RlYWQgbnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9ucygpIGFuZCByZW5kZXJpbmdPdXRwdXQo
KSBzaG91bGQgYmUgdXNlZC4KLSAgICB1bnNpZ25lZCBudW1iZXJPZkNvbm5lY3Rpb25zKCkgY29u
c3QgeyByZXR1cm4gbV9vdXRwdXRzLnNpemUoKTsgfQotCi0gICAgLy8gVGhpcyBtdXN0IGJlIGNh
bGxlZCB3aGVuZXZlciB3ZSBtb2RpZnkgbV9vdXRwdXRzLgotICAgIHZvaWQgY2hhbmdlZE91dHB1
dHMoKTsKLSAgICAKLSAgICAvLyBtX3JlbmRlcmluZ091dHB1dHMgaXMgYSBjb3B5IG9mIG1fb3V0
cHV0cyB3aGljaCB3aWxsIG5ldmVyIGJlIG1vZGlmaWVkIGR1cmluZyB0aGUgZ3JhcGggcmVuZGVy
aW5nIG9uIHRoZSBhdWRpbyB0aHJlYWQuCi0gICAgLy8gVGhpcyBpcyB0aGUgbGlzdCB3aGljaCBp
cyB1c2VkIGJ5IHRoZSByZW5kZXJpbmcgY29kZS4KLSAgICAvLyBXaGVuZXZlciBtX291dHB1dHMg
aXMgbW9kaWZpZWQsIHRoZSBjb250ZXh0IGlzIHRvbGQgc28gaXQgY2FuIGxhdGVyIHVwZGF0ZSBt
X3JlbmRlcmluZ091dHB1dHMgZnJvbSBtX291dHB1dHMgYXQgYSBzYWZlIHRpbWUuCi0gICAgLy8g
TW9zdCBvZiB0aGUgdGltZSwgbV9yZW5kZXJpbmdPdXRwdXRzIGlzIGlkZW50aWNhbCB0byBtX291
dHB1dHMuCi0gICAgVmVjdG9yPEF1ZGlvTm9kZU91dHB1dCo+IG1fcmVuZGVyaW5nT3V0cHV0czsK
LQotICAgIC8vIG1fcmVuZGVyaW5nU3RhdGVOZWVkVXBkYXRpbmcga2VlcHMgdHJhY2sgaWYgbV9v
dXRwdXRzIGlzIG1vZGlmaWVkLgotICAgIGJvb2wgbV9yZW5kZXJpbmdTdGF0ZU5lZWRVcGRhdGlu
ZzsKLQotICAgIC8vIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgb2YgdGhlIHJlbmRlcmluZyBjb25u
ZWN0aW9uIHdpdGggdGhlIGxhcmdlc3QgbnVtYmVyIG9mIGNoYW5uZWxzLgotICAgIHVuc2lnbmVk
IG51bWJlck9mUmVuZGVyaW5nQ2hhbm5lbHMoKTsKLQotICAgIC8vIG1fZGlzYWJsZWRPdXRwdXRz
IGNvbnRhaW5zIHRoZSBBdWRpb05vZGVPdXRwdXRzIHdoaWNoIGFyZSBkaXNhYmxlZCAod2lsbCBu
b3QgYmUgcHJvY2Vzc2VkKSBieSB0aGUgYXVkaW8gZ3JhcGggcmVuZGVyaW5nLgotICAgIC8vIEJ1
dCwgZnJvbSBKYXZhU2NyaXB0J3MgcGVyc3BlY3RpdmUsIHRoZXNlIG91dHB1dHMgYXJlIHN0aWxs
IGNvbm5lY3RlZCB0byB1cy4KLSAgICAvLyBHZW5lcmFsbHksIHRoZXNlIHJlcHJlc2VudCBkaXNh
YmxlZCBjb25uZWN0aW9ucyBmcm9tICJub3RlcyIgd2hpY2ggaGF2ZSBmaW5pc2hlZCBwbGF5aW5n
IGJ1dCBhcmUgbm90IHlldCBnYXJiYWdlIGNvbGxlY3RlZC4KLSAgICBIYXNoU2V0PEF1ZGlvTm9k
ZU91dHB1dCo+IG1fZGlzYWJsZWRPdXRwdXRzOwotCi0gICAgLy8gQ2FsbGVkIGZyb20gY29udGV4
dCdzIGF1ZGlvIHRocmVhZC4KLSAgICBBdWRpb0J1cyogaW50ZXJuYWxTdW1taW5nQnVzKCk7Ci0g
ICAgdm9pZCBzdW1BbGxDb25uZWN0aW9ucyhBdWRpb0J1cyogc3VtbWluZ0J1cywgc2l6ZV90IGZy
YW1lc1RvUHJvY2Vzcyk7Ci0KLSAgICBPd25QdHI8QXVkaW9CdXM+IG1faW50ZXJuYWxTdW1taW5n
QnVzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQXVkaW9Ob2Rl
SW5wdXRfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQu
Y3BwCShyZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb05v
ZGVPdXRwdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIwOSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
LSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1
ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgotCi0jaW5jbHVkZSAiQXVkaW9CdXMuaCIKLSNpbmNsdWRl
ICJBdWRpb0NvbnRleHQuaCIKLSNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgotI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1BdWRpb05vZGVPdXRw
dXQ6OkF1ZGlvTm9kZU91dHB1dChBdWRpb05vZGUqIG5vZGUsIHVuc2lnbmVkIG51bWJlck9mQ2hh
bm5lbHMpCi0gICAgOiBtX25vZGUobm9kZSkKLSAgICAsIG1fbnVtYmVyT2ZDaGFubmVscyhudW1i
ZXJPZkNoYW5uZWxzKQotICAgICwgbV9kZXNpcmVkTnVtYmVyT2ZDaGFubmVscyhudW1iZXJPZkNo
YW5uZWxzKQotICAgICwgbV9hY3R1YWxEZXN0aW5hdGlvbkJ1cygwKQotICAgICwgbV9pc0VuYWJs
ZWQodHJ1ZSkKLSAgICAsIG1fcmVuZGVyaW5nRmFuT3V0Q291bnQoMCkKLXsKLSAgICBBU1NFUlQo
bnVtYmVyT2ZDaGFubmVscyA8PSBBdWRpb0NvbnRleHQ6Om1heE51bWJlck9mQ2hhbm5lbHMoKSk7
Ci0KLSAgICBtX2ludGVybmFsQnVzID0gYWRvcHRQdHIobmV3IEF1ZGlvQnVzKG51bWJlck9mQ2hh
bm5lbHMsIEF1ZGlvTm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1lcykpOwotICAgIG1fYWN0dWFs
RGVzdGluYXRpb25CdXMgPSBtX2ludGVybmFsQnVzLmdldCgpOwotfQotCi12b2lkIEF1ZGlvTm9k
ZU91dHB1dDo6c2V0TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKQot
ewotICAgIEFTU0VSVChudW1iZXJPZkNoYW5uZWxzIDw9IEF1ZGlvQ29udGV4dDo6bWF4TnVtYmVy
T2ZDaGFubmVscygpKTsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0K
LSAgICBtX2Rlc2lyZWROdW1iZXJPZkNoYW5uZWxzID0gbnVtYmVyT2ZDaGFubmVsczsKLQotICAg
IGlmIChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSkgewotICAgICAgICAvLyBJZiB3ZSdyZSBp
biB0aGUgYXVkaW8gdGhyZWFkIHRoZW4gd2UgY2FuIHRha2UgY2FyZSBvZiBpdCByaWdodCBhd2F5
ICh3ZSBzaG91bGQgYmUgYXQgdGhlIHZlcnkgc3RhcnQgb3IgZW5kIG9mIGEgcmVuZGVyaW5nIHF1
YW50dW0pLgotICAgICAgICB1cGRhdGVOdW1iZXJPZkNoYW5uZWxzKCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgLy8gTGV0IHRoZSBjb250ZXh0IHRha2UgY2FyZSBvZiBpdCBpbiB0aGUgYXVkaW8g
dGhyZWFkIGluIHRoZSBwcmUgYW5kIHBvc3QgcmVuZGVyIHRhc2tzLgotICAgICAgICBjb250ZXh0
KCktPm1hcmtBdWRpb05vZGVPdXRwdXREaXJ0eSh0aGlzKTsKLSAgICB9Ci19Ci0KLXZvaWQgQXVk
aW9Ob2RlT3V0cHV0Ojp1cGRhdGVJbnRlcm5hbEJ1cygpCi17Ci0gICAgaWYgKG51bWJlck9mQ2hh
bm5lbHMoKSA9PSBtX2ludGVybmFsQnVzLT5udW1iZXJPZkNoYW5uZWxzKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1faW50ZXJuYWxCdXMgPSBhZG9wdFB0cihuZXcgQXVkaW9CdXMobnVtYmVy
T2ZDaGFubmVscygpLCBBdWRpb05vZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXMpKTsKLQotICAg
IC8vIFRoaXMgbWF5IGxhdGVyIGJlIGNoYW5nZWQgaW4gcHVsbCgpIHRvIHBvaW50IHRvIGFuIGlu
LXBsYWNlIGJ1cyB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBjaGFubmVscy4KLSAgICBtX2FjdHVh
bERlc3RpbmF0aW9uQnVzID0gbV9pbnRlcm5hbEJ1cy5nZXQoKTsKLX0KLQotdm9pZCBBdWRpb05v
ZGVPdXRwdXQ6OnVwZGF0ZVJlbmRlcmluZ1N0YXRlKCkKLXsKLSAgICB1cGRhdGVOdW1iZXJPZkNo
YW5uZWxzKCk7Ci0gICAgbV9yZW5kZXJpbmdGYW5PdXRDb3VudCA9IGZhbk91dENvdW50KCk7Ci19
Ci0KLXZvaWQgQXVkaW9Ob2RlT3V0cHV0Ojp1cGRhdGVOdW1iZXJPZkNoYW5uZWxzKCkKLXsKLSAg
ICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkgJiYgY29udGV4dCgpLT5pc0dyYXBo
T3duZXIoKSk7Ci0KLSAgICBpZiAobV9udW1iZXJPZkNoYW5uZWxzICE9IG1fZGVzaXJlZE51bWJl
ck9mQ2hhbm5lbHMpIHsKLSAgICAgICAgbV9udW1iZXJPZkNoYW5uZWxzID0gbV9kZXNpcmVkTnVt
YmVyT2ZDaGFubmVsczsKLSAgICAgICAgdXBkYXRlSW50ZXJuYWxCdXMoKTsKLSAgICAgICAgcHJv
cGFnYXRlQ2hhbm5lbENvdW50KCk7Ci0gICAgfQotfQotCi12b2lkIEF1ZGlvTm9kZU91dHB1dDo6
cHJvcGFnYXRlQ2hhbm5lbENvdW50KCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlv
VGhyZWFkKCkgJiYgY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0gICAgCi0gICAgaWYgKGlz
Q2hhbm5lbENvdW50S25vd24oKSkgewotICAgICAgICAvLyBBbm5vdW5jZSB0byBhbnkgbm9kZXMg
d2UncmUgY29ubmVjdGVkIHRvIHRoYXQgd2UgY2hhbmdlZCBvdXIgY2hhbm5lbCBjb3VudCBmb3Ig
aXRzIGlucHV0LgotICAgICAgICBmb3IgKElucHV0c0l0ZXJhdG9yIGkgPSBtX2lucHV0cy5iZWdp
bigpOyBpICE9IG1faW5wdXRzLmVuZCgpOyArK2kpIHsKLSAgICAgICAgICAgIEF1ZGlvTm9kZUlu
cHV0KiBpbnB1dCA9ICppOwotICAgICAgICAgICAgQXVkaW9Ob2RlKiBjb25uZWN0aW9uTm9kZSA9
IGlucHV0LT5ub2RlKCk7Ci0gICAgICAgICAgICBjb25uZWN0aW9uTm9kZS0+Y2hlY2tOdW1iZXJP
ZkNoYW5uZWxzRm9ySW5wdXQoaW5wdXQpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1BdWRpb0J1
cyogQXVkaW9Ob2RlT3V0cHV0OjpwdWxsKEF1ZGlvQnVzKiBpblBsYWNlQnVzLCBzaXplX3QgZnJh
bWVzVG9Qcm9jZXNzKQotewotICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSk7
Ci0gICAgQVNTRVJUKG1fcmVuZGVyaW5nRmFuT3V0Q291bnQgPiAwKTsKLSAgICAKLSAgICAvLyBD
YXVzZXMgb3VyIEF1ZGlvTm9kZSB0byBwcm9jZXNzIGlmIGl0IGhhc24ndCBhbHJlYWR5IGZvciB0
aGlzIHJlbmRlciBxdWFudHVtLgotICAgIC8vIFdlIHRyeSB0byBkbyBpbi1wbGFjZSBwcm9jZXNz
aW5nICh1c2luZyBpblBsYWNlQnVzKSBpZiBhdCBhbGwgcG9zc2libGUsCi0gICAgLy8gYnV0IHdl
IGNhbid0IHByb2Nlc3MgaW4tcGxhY2UgaWYgd2UncmUgY29ubmVjdGVkIHRvIG1vcmUgdGhhbiBv
bmUgaW5wdXQgKGZhbi1vdXQgPiAxKS4KLSAgICAvLyBJbiB0aGlzIGNhc2UgcHVsbCgpIGlzIGNh
bGxlZCBtdWx0aXBsZSB0aW1lcyBwZXIgcmVuZGVyaW5nIHF1YW50dW0sIGFuZCB0aGUgcHJvY2Vz
c0lmTmVjZXNzYXJ5KCkgY2FsbCBiZWxvdyB3aWxsCi0gICAgLy8gY2F1c2Ugb3VyIG5vZGUgdG8g
cHJvY2VzcygpIG9ubHkgdGhlIGZpcnN0IHRpbWUsIGNhY2hpbmcgdGhlIG91dHB1dCBpbiBtX2lu
dGVybmFsT3V0cHV0QnVzIGZvciBzdWJzZXF1ZW50IGNhbGxzLiAgICAKLSAgICAKLSAgICBib29s
IGlzSW5QbGFjZSA9IGluUGxhY2VCdXMgJiYgaW5QbGFjZUJ1cy0+bnVtYmVyT2ZDaGFubmVscygp
ID09IG51bWJlck9mQ2hhbm5lbHMoKSAmJiBtX3JlbmRlcmluZ0Zhbk91dENvdW50ID09IDE7Ci0K
LSAgICAvLyBTZXR1cCB0aGUgYWN0dWFsIGRlc3RpbmF0aW9uIGJ1cyBmb3IgcHJvY2Vzc2luZyB3
aGVuIG91ciBub2RlJ3MgcHJvY2VzcygpIG1ldGhvZCBnZXRzIGNhbGxlZCBpbiBwcm9jZXNzSWZO
ZWNlc3NhcnkoKSBiZWxvdy4KLSAgICBtX2FjdHVhbERlc3RpbmF0aW9uQnVzID0gaXNJblBsYWNl
ID8gaW5QbGFjZUJ1cyA6IG1faW50ZXJuYWxCdXMuZ2V0KCk7Ci0KLSAgICBub2RlKCktPnByb2Nl
c3NJZk5lY2Vzc2FyeShmcmFtZXNUb1Byb2Nlc3MpOwotICAgIHJldHVybiBtX2FjdHVhbERlc3Rp
bmF0aW9uQnVzOwotfQotCi1BdWRpb0J1cyogQXVkaW9Ob2RlT3V0cHV0OjpidXMoKSBjb25zdAot
ewotICAgIEFTU0VSVChjb25zdF9jYXN0PEF1ZGlvTm9kZU91dHB1dCo+KHRoaXMpLT5jb250ZXh0
KCktPmlzQXVkaW9UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKG1fYWN0dWFsRGVzdGluYXRpb25CdXMp
OwotICAgIHJldHVybiBtX2FjdHVhbERlc3RpbmF0aW9uQnVzOwotfQotCi11bnNpZ25lZCBBdWRp
b05vZGVPdXRwdXQ6OnJlbmRlcmluZ0Zhbk91dENvdW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9yZW5kZXJpbmdGYW5PdXRDb3VudDsKLX0KLQotdW5zaWduZWQgQXVkaW9Ob2RlT3V0cHV0Ojpm
YW5PdXRDb3VudCgpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOwot
ICAgIHJldHVybiBtX2lucHV0cy5zaXplKCk7Ci19Ci0KLXZvaWQgQXVkaW9Ob2RlT3V0cHV0Ojph
ZGRJbnB1dChBdWRpb05vZGVJbnB1dCogaW5wdXQpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQoKS0+
aXNHcmFwaE93bmVyKCkpOwotCi0gICAgQVNTRVJUKGlucHV0KTsKLSAgICBpZiAoIWlucHV0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lucHV0cy5hZGQoaW5wdXQpOwotfQotCi12b2lkIEF1
ZGlvTm9kZU91dHB1dDo6cmVtb3ZlSW5wdXQoQXVkaW9Ob2RlSW5wdXQqIGlucHV0KQotewotICAg
IEFTU0VSVChjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKLQotICAgIEFTU0VSVChpbnB1dCk7
Ci0gICAgaWYgKCFpbnB1dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbnB1dHMucmVtb3Zl
KGlucHV0KTsKLX0KLQotdm9pZCBBdWRpb05vZGVPdXRwdXQ6OmRpc2Nvbm5lY3RBbGxJbnB1dHMo
KQotewotICAgIEFTU0VSVChjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKLSAgICAKLSAgICAv
LyBBdWRpb05vZGVJbnB1dDo6ZGlzY29ubmVjdCgpIGNoYW5nZXMgbV9pbnB1dHMgYnkgY2FsbGlu
ZyByZW1vdmVJbnB1dCgpLgotICAgIHdoaWxlICghbV9pbnB1dHMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIEF1ZGlvTm9kZUlucHV0KiBpbnB1dCA9ICptX2lucHV0cy5iZWdpbigpOwotICAgICAgICBp
bnB1dC0+ZGlzY29ubmVjdCh0aGlzKTsKLSAgICB9Ci19Ci0KLXZvaWQgQXVkaW9Ob2RlT3V0cHV0
OjpkaXNhYmxlKCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0K
LSAgICBpZiAobV9pc0VuYWJsZWQpIHsKLSAgICAgICAgZm9yIChJbnB1dHNJdGVyYXRvciBpID0g
bV9pbnB1dHMuYmVnaW4oKTsgaSAhPSBtX2lucHV0cy5lbmQoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBBdWRpb05vZGVJbnB1dCogaW5wdXQgPSAqaTsKLSAgICAgICAgICAgIGlucHV0LT5kaXNhYmxl
KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIG1faXNFbmFibGVkID0gZmFsc2U7Ci0gICAgfQot
fQotCi12b2lkIEF1ZGlvTm9kZU91dHB1dDo6ZW5hYmxlKCkKLXsKLSAgICBBU1NFUlQoY29udGV4
dCgpLT5pc0dyYXBoT3duZXIoKSk7Ci0KLSAgICBpZiAoIW1faXNFbmFibGVkKSB7Ci0gICAgICAg
IGZvciAoSW5wdXRzSXRlcmF0b3IgaSA9IG1faW5wdXRzLmJlZ2luKCk7IGkgIT0gbV9pbnB1dHMu
ZW5kKCk7ICsraSkgewotICAgICAgICAgICAgQXVkaW9Ob2RlSW5wdXQqIGlucHV0ID0gKmk7Ci0g
ICAgICAgICAgICBpbnB1dC0+ZW5hYmxlKHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIG1faXNF
bmFibGVkID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9B
dWRpb05vZGVPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9B
dWRpb05vZGVPdXRwdXQuaAkocmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0g
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIEF1ZGlvTm9kZU91dHB1dF9oCi0jZGVmaW5lIEF1ZGlvTm9k
ZU91dHB1dF9oCi0KLSNpbmNsdWRlICJBdWRpb0J1cy5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZS5o
IgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRp
b0NvbnRleHQ7Ci1jbGFzcyBBdWRpb05vZGVJbnB1dDsKLQotLy8gQXVkaW9Ob2RlT3V0cHV0IHJl
cHJlc2VudHMgYSBzaW5nbGUgb3V0cHV0IGZvciBhbiBBdWRpb05vZGUuCi0vLyBJdCBtYXkgYmUg
Y29ubmVjdGVkIHRvIG9uZSBvciBtb3JlIEF1ZGlvTm9kZUlucHV0cy4KLQotY2xhc3MgQXVkaW9O
b2RlT3V0cHV0IHsKLXB1YmxpYzoKLSAgICAvLyBJdCdzIE9LIHRvIHBhc3MgMCBmb3IgbnVtYmVy
T2ZDaGFubmVscyBpbiB3aGljaCBjYXNlIHNldE51bWJlck9mQ2hhbm5lbHMoKSBtdXN0IGJlIGNh
bGxlZCBsYXRlciBvbi4KLSAgICBBdWRpb05vZGVPdXRwdXQoQXVkaW9Ob2RlKiwgdW5zaWduZWQg
bnVtYmVyT2ZDaGFubmVscyk7Ci0KLSAgICAvLyBDYW4gYmUgY2FsbGVkIGZyb20gYW55IHRocmVh
ZC4KLSAgICBBdWRpb05vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KLSAgICBB
dWRpb0NvbnRleHQqIGNvbnRleHQoKSB7IHJldHVybiBtX25vZGUtPmNvbnRleHQoKTsgfQotICAg
IAotICAgIC8vIENhdXNlcyBvdXIgQXVkaW9Ob2RlIHRvIHByb2Nlc3MgaWYgaXQgaGFzbid0IGFs
cmVhZHkgZm9yIHRoaXMgcmVuZGVyIHF1YW50dW0uCi0gICAgLy8gSXQgcmV0dXJucyB0aGUgYnVz
IGNvbnRhaW5pbmcgdGhlIHByb2Nlc3NlZCBhdWRpbyBmb3IgdGhpcyBvdXRwdXQsIHJldHVybmlu
ZyBpblBsYWNlQnVzIGlmIGluLXBsYWNlIHByb2Nlc3Npbmcgd2FzIHBvc3NpYmxlLgotICAgIC8v
IENhbGxlZCBmcm9tIGNvbnRleHQncyBhdWRpbyB0aHJlYWQuCi0gICAgQXVkaW9CdXMqIHB1bGwo
QXVkaW9CdXMqIGluUGxhY2VCdXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwotCi0gICAgLy8g
YnVzKCkgd2lsbCBjb250YWluIHRoZSByZW5kZXJlZCBhdWRpbyBhZnRlciBwdWxsKCkgaXMgY2Fs
bGVkIGZvciBlYWNoIHJlbmRlcmluZyB0aW1lIHF1YW50dW0uCi0gICAgLy8gQ2FsbGVkIGZyb20g
Y29udGV4dCdzIGF1ZGlvIHRocmVhZC4KLSAgICBBdWRpb0J1cyogYnVzKCkgY29uc3Q7Ci0KLSAg
ICAvLyBmYW5PdXRDb3VudCgpIGlzIHRoZSBudW1iZXIgb2YgQXVkaW9Ob2RlSW5wdXRzIHRoYXQg
d2UncmUgY29ubmVjdGVkIHRvLgotICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBj
YWxsZWQgaW4gYXVkaW8gdGhyZWFkIHJlbmRlcmluZyBjb2RlLCBpbnN0ZWFkIHJlbmRlcmluZ0Zh
bk91dENvdW50KCkgc2hvdWxkIGJlIHVzZWQuCi0gICAgLy8gSXQgbXVzdCBiZSBjYWxsZWQgd2l0
aCB0aGUgY29udGV4dCdzIGdyYXBoIGxvY2suCi0gICAgdW5zaWduZWQgZmFuT3V0Q291bnQoKTsK
LQotICAgIC8vIHJlbmRlcmluZ0Zhbk91dENvdW50KCkgaXMgdGhlIG51bWJlciBvZiBBdWRpb05v
ZGVJbnB1dHMgdGhhdCB3ZSdyZSBjb25uZWN0ZWQgdG8gZHVyaW5nIHJlbmRlcmluZy4KLSAgICAv
LyBVbmxpa2UgZmFuT3V0Q291bnQoKSBpdCB3aWxsIG5vdCBjaGFuZ2UgZHVyaW5nIHRoZSBjb3Vy
c2Ugb2YgYSByZW5kZXIgcXVhbnR1bS4KLSAgICB1bnNpZ25lZCByZW5kZXJpbmdGYW5PdXRDb3Vu
dCgpIGNvbnN0OwotCi0gICAgLy8gSXQgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgY29udGV4dCdz
IGdyYXBoIGxvY2suCi0gICAgdm9pZCBkaXNjb25uZWN0QWxsSW5wdXRzKCk7Ci0KLSAgICB2b2lk
IHNldE51bWJlck9mQ2hhbm5lbHModW5zaWduZWQpOwotICAgIHVuc2lnbmVkIG51bWJlck9mQ2hh
bm5lbHMoKSBjb25zdCB7IHJldHVybiBtX251bWJlck9mQ2hhbm5lbHM7IH0KLSAgICBib29sIGlz
Q2hhbm5lbENvdW50S25vd24oKSBjb25zdCB7IHJldHVybiBudW1iZXJPZkNoYW5uZWxzKCkgPiAw
OyB9Ci0KLSAgICAvLyBEaXNhYmxlL0VuYWJsZSBoYXBwZW5zIHdoZW4gdGhlcmUgYXJlIHN0aWxs
IEphdmFTY3JpcHQgcmVmZXJlbmNlcyB0byBhIG5vZGUsIGJ1dCBpdCBoYXMgb3RoZXJ3aXNlICJm
aW5pc2hlZCIgaXRzIHdvcmsuCi0gICAgLy8gRm9yIGV4YW1wbGUsIHdoZW4gYSBub3RlIGhhcyBm
aW5pc2hlZCBwbGF5aW5nLiAgSXQgaXMga2VwdCBhcm91bmQsIGJlY2F1c2UgaXQgbWF5IGJlIHBs
YXllZCBhZ2FpbiBhdCBhIGxhdGVyIHRpbWUuCi0gICAgLy8gVGhleSBtdXN0IGJlIGNhbGxlZCB3
aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jay4KLSAgICB2b2lkIGRpc2FibGUoKTsKLSAgICB2
b2lkIGVuYWJsZSgpOwotCi0gICAgLy8gdXBkYXRlUmVuZGVyaW5nU3RhdGUoKSBpcyBjYWxsZWQg
aW4gdGhlIGF1ZGlvIHRocmVhZCBhdCB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSByZW5kZXIgcXVh
bnR1bSB0byBoYW5kbGUgYW55IHJlY2VudCBjaGFuZ2VzIHRvIHRoZSBncmFwaCBzdGF0ZS4KLSAg
ICAvLyBJdCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jay4KLSAg
ICB2b2lkIHVwZGF0ZVJlbmRlcmluZ1N0YXRlKCk7Ci0gICAgCi1wcml2YXRlOgotICAgIEF1ZGlv
Tm9kZSogbV9ub2RlOwotCi0gICAgZnJpZW5kIGNsYXNzIEF1ZGlvTm9kZUlucHV0OwotICAgIAot
ICAgIC8vIFRoZXNlIGFyZSBjYWxsZWQgZnJvbSBBdWRpb05vZGVJbnB1dC4KLSAgICAvLyBUaGV5
IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGNvbnRleHQncyBncmFwaCBsb2NrLgotICAgIHZvaWQg
YWRkSW5wdXQoQXVkaW9Ob2RlSW5wdXQqKTsKLSAgICB2b2lkIHJlbW92ZUlucHV0KEF1ZGlvTm9k
ZUlucHV0Kik7Ci0KLSAgICAvLyB1cGRhdGVJbnRlcm5hbEJ1cygpIHVwZGF0ZXMgbV9pbnRlcm5h
bEJ1cyBhcHByb3ByaWF0ZWx5IGZvciB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzLgotICAgIC8vIEl0
IGlzIGNhbGxlZCBpbiB0aGUgY29uc3RydWN0b3Igb3IgaW4gdGhlIGF1ZGlvIHRocmVhZCB3aXRo
IHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jay4KLSAgICB2b2lkIHVwZGF0ZUludGVybmFsQnVzKCk7
Ci0KLSAgICAvLyBBbm5vdW5jZSB0byBhbnkgbm9kZXMgd2UncmUgY29ubmVjdGVkIHRvIHRoYXQg
d2UgY2hhbmdlZCBvdXIgY2hhbm5lbCBjb3VudCBmb3IgaXRzIGlucHV0LgotICAgIC8vIEl0IG11
c3QgYmUgY2FsbGVkIGluIHRoZSBhdWRpbyB0aHJlYWQgd2l0aCB0aGUgY29udGV4dCdzIGdyYXBo
IGxvY2suCi0gICAgdm9pZCBwcm9wYWdhdGVDaGFubmVsQ291bnQoKTsKLQotICAgIC8vIHVwZGF0
ZU51bWJlck9mQ2hhbm5lbHMoKSBpcyBjYWxsZWQgaW4gdGhlIGF1ZGlvIHRocmVhZCBhdCB0aGUg
c3RhcnQgb3IgZW5kIG9mIHRoZSByZW5kZXIgcXVhbnR1bSB0byBwaWNrIHVwIGNoYW5uZWwgY2hh
bmdlcy4KLSAgICAvLyBJdCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGgg
bG9jay4KLSAgICB2b2lkIHVwZGF0ZU51bWJlck9mQ2hhbm5lbHMoKTsKLQotICAgIC8vIG1fbnVt
YmVyT2ZDaGFubmVscyB3aWxsIG9ubHkgYmUgY2hhbmdlZCBpbiB0aGUgYXVkaW8gdGhyZWFkLgot
ICAgIC8vIFRoZSBtYWluIHRocmVhZCBzZXRzIG1fZGVzaXJlZE51bWJlck9mQ2hhbm5lbHMgd2hp
Y2ggd2lsbCBsYXRlciBnZXQgcGlja2VkIHVwIGluIHRoZSBhdWRpbyB0aHJlYWQgaW4gdXBkYXRl
TnVtYmVyT2ZDaGFubmVscygpLgotICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZDaGFubmVsczsKLSAg
ICB1bnNpZ25lZCBtX2Rlc2lyZWROdW1iZXJPZkNoYW5uZWxzOwotICAgIAotICAgIC8vIG1faW50
ZXJuYWxCdXMgbXVzdCBvbmx5IGJlIGNoYW5nZWQgaW4gdGhlIGF1ZGlvIHRocmVhZCB3aXRoIHRo
ZSBjb250ZXh0J3MgZ3JhcGggbG9jayAob3IgY29uc3RydWN0b3IpLgotICAgIE93blB0cjxBdWRp
b0J1cz4gbV9pbnRlcm5hbEJ1czsKLQotICAgIC8vIG1fYWN0dWFsRGVzdGluYXRpb25CdXMgaXMg
c2V0IGluIHB1bGwoKSBhbmQgd2lsbCBlaXRoZXIgcG9pbnQgdG8gb25lIG9mIG91ciBpbnRlcm5h
bCBidXNzZXMgb3IgdG8gdGhlIGluLXBsYWNlIGJ1cy4KLSAgICAvLyBJdCBtdXN0IG9ubHkgYmUg
Y2hhbmdlZCBpbiB0aGUgYXVkaW8gdGhyZWFkIChvciBjb25zdHJ1Y3RvcikuCi0gICAgQXVkaW9C
dXMqIG1fYWN0dWFsRGVzdGluYXRpb25CdXM7Ci0KLSAgICBIYXNoU2V0PEF1ZGlvTm9kZUlucHV0
Kj4gbV9pbnB1dHM7Ci0gICAgdHlwZWRlZiBIYXNoU2V0PEF1ZGlvTm9kZUlucHV0Kj46Oml0ZXJh
dG9yIElucHV0c0l0ZXJhdG9yOwotICAgIGJvb2wgbV9pc0VuYWJsZWQ7Ci0gICAgCi0gICAgLy8g
Rm9yIHRoZSBwdXJwb3NlcyBvZiByZW5kZXJpbmcsIGtlZXBzIHRyYWNrIG9mIHRoZSBudW1iZXIg
b2YgaW5wdXRzIHdlJ3JlIGNvbm5lY3RlZCB0by4KLSAgICAvLyBUaGlzIHZhbHVlIHNob3VsZCBv
bmx5IGJlIGNoYW5nZWQgYXQgdGhlIHZlcnkgc3RhcnQgb3IgZW5kIG9mIHRoZSByZW5kZXJpbmcg
cXVhbnR1bS4KLSAgICB1bnNpZ25lZCBtX3JlbmRlcmluZ0Zhbk91dENvdW50OwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQXVkaW9Ob2RlT3V0cHV0X2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmNwcAkocmV2aXNpb24g
MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSwzMzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJBdWRpb1Bhbm5l
ck5vZGUuaCIKLQotI2luY2x1ZGUgIkF1ZGlvQnVmZmVyU291cmNlTm9kZS5oIgotI2luY2x1ZGUg
IkF1ZGlvQnVzLmgiCi0jaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCi0jaW5jbHVkZSAiQXVkaW9O
b2RlSW5wdXQuaCIKLSNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKLSNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSFJURlBhbm5lci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotc3RhdGljIHZvaWQgZml4TkFOcyhkb3VibGUgJngpCi17Ci0gICAgaWYgKGlzbmFuKHgpIHx8
IGlzaW5mKHgpKQotICAgICAgICB4ID0gMC4wOwotfQotCi1BdWRpb1Bhbm5lck5vZGU6OkF1ZGlv
UGFubmVyTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAg
OiBBdWRpb05vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkKLSAgICAsIG1fcGFubmluZ01vZGVsKFBh
bm5lcjo6UGFubmluZ01vZGVsSFJURikKLSAgICAsIG1fbGFzdEdhaW4oLTEuMCkKLSAgICAsIG1f
Y29ubmVjdGlvbkNvdW50KDApCi17Ci0gICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9k
ZUlucHV0KHRoaXMpKSk7Ci0gICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRw
dXQodGhpcywgMikpKTsKLSAgICAKLSAgICBtX2Rpc3RhbmNlR2FpbiA9IEF1ZGlvR2Fpbjo6Y3Jl
YXRlKCJkaXN0YW5jZUdhaW4iLCAxLjAsIDAuMCwgMS4wKTsKLSAgICBtX2NvbmVHYWluID0gQXVk
aW9HYWluOjpjcmVhdGUoImNvbmVHYWluIiwgMS4wLCAwLjAsIDEuMCk7Ci0KLSAgICBtX3Bvc2l0
aW9uID0gRmxvYXRQb2ludDNEKDAsIDAsIDApOwotICAgIG1fb3JpZW50YXRpb24gPSBGbG9hdFBv
aW50M0QoMSwgMCwgMCk7Ci0gICAgbV92ZWxvY2l0eSA9IEZsb2F0UG9pbnQzRCgwLCAwLCAwKTsK
LSAgICAKLSAgICBzZXROb2RlVHlwZShOb2RlVHlwZVBhbm5lcik7Ci0KLSAgICBpbml0aWFsaXpl
KCk7Ci19Ci0KLUF1ZGlvUGFubmVyTm9kZTo6fkF1ZGlvUGFubmVyTm9kZSgpCi17Ci0gICAgdW5p
bml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgQXVkaW9QYW5uZXJOb2RlOjpwdWxsSW5wdXRzKHNpemVf
dCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgLy8gV2Ugb3ZlcnJpZGUgcHVsbElucHV0cygpLCBz
byB3ZSBjYW4gZGV0ZWN0IG5ldyBBdWRpb1NvdXJjZU5vZGVzIHdoaWNoIGhhdmUgY29ubmVjdGVk
IHRvIHVzIHdoZW4gbmV3IGNvbm5lY3Rpb25zIGFyZSBtYWRlLgotICAgIC8vIFRoZXNlIEF1ZGlv
U291cmNlTm9kZXMgbmVlZCB0byBiZSBtYWRlIGF3YXJlIG9mIG91ciBleGlzdGVuY2UgaW4gb3Jk
ZXIgdG8gaGFuZGxlIGRvcHBsZXIgc2hpZnQgcGl0Y2ggY2hhbmdlcy4KLSAgICBpZiAobV9jb25u
ZWN0aW9uQ291bnQgIT0gY29udGV4dCgpLT5jb25uZWN0aW9uQ291bnQoKSkgewotICAgICAgICBt
X2Nvbm5lY3Rpb25Db3VudCA9IGNvbnRleHQoKS0+Y29ubmVjdGlvbkNvdW50KCk7Ci0KLSAgICAg
ICAgLy8gUmVjdXJzaXZlbHkgZ28gdGhyb3VnaCBhbGwgbm9kZXMgY29ubmVjdGVkIHRvIHVzLgot
ICAgICAgICBub3RpZnlBdWRpb1NvdXJjZXNDb25uZWN0ZWRUb05vZGUodGhpcyk7Ci0gICAgfQot
ICAgIAotICAgIEF1ZGlvTm9kZTo6cHVsbElucHV0cyhmcmFtZXNUb1Byb2Nlc3MpOwotfQotCi12
b2lkIEF1ZGlvUGFubmVyTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewot
ICAgIEF1ZGlvQnVzKiBkZXN0aW5hdGlvbiA9IG91dHB1dCgwKS0+YnVzKCk7Ci0KLSAgICBpZiAo
IWlzSW5pdGlhbGl6ZWQoKSB8fCAhaW5wdXQoMCktPmlzQ29ubmVjdGVkKCkgfHwgIW1fcGFubmVy
LmdldCgpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uLT56ZXJvKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBBdWRpb0J1cyogc291cmNlID0gaW5wdXQoMCktPmJ1cygpOwotCi0gICAg
aWYgKCFzb3VyY2UpIHsKLSAgICAgICAgZGVzdGluYXRpb24tPnplcm8oKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIEFwcGx5IHRoZSBwYW5uaW5nIGVmZmVjdC4KLSAgICBkb3Vi
bGUgYXppbXV0aDsKLSAgICBkb3VibGUgZWxldmF0aW9uOwotICAgIGdldEF6aW11dGhFbGV2YXRp
b24oJmF6aW11dGgsICZlbGV2YXRpb24pOwotICAgIG1fcGFubmVyLT5wYW4oYXppbXV0aCwgZWxl
dmF0aW9uLCBzb3VyY2UsIGRlc3RpbmF0aW9uLCBmcmFtZXNUb1Byb2Nlc3MpOwotCi0gICAgLy8g
R2V0IHRoZSBkaXN0YW5jZSBhbmQgY29uZSBnYWluLgotICAgIGRvdWJsZSB0b3RhbEdhaW4gPSBk
aXN0YW5jZUNvbmVHYWluKCk7Ci0KLSAgICAvLyBTbmFwIHRvIGRlc2lyZWQgZ2FpbiBhdCB0aGUg
YmVnaW5uaW5nLgotICAgIGlmIChtX2xhc3RHYWluID09IC0xLjApCi0gICAgICAgIG1fbGFzdEdh
aW4gPSB0b3RhbEdhaW47Ci0gICAgICAgIAotICAgIC8vIEFwcGx5IGdhaW4gaW4tcGxhY2Ugd2l0
aCBkZS16aXBwZXJpbmcuCi0gICAgZGVzdGluYXRpb24tPmNvcHlXaXRoR2FpbkZyb20oKmRlc3Rp
bmF0aW9uLCAmbV9sYXN0R2FpbiwgdG90YWxHYWluKTsKLX0KLQotdm9pZCBBdWRpb1Bhbm5lck5v
ZGU6OnJlc2V0KCkKLXsKLSAgICBtX2xhc3RHYWluID0gLTEuMDsgLy8gZm9yY2UgdG8gc25hcCB0
byBpbml0aWFsIGdhaW4KLSAgICBpZiAobV9wYW5uZXIuZ2V0KCkpCi0gICAgICAgIG1fcGFubmVy
LT5yZXNldCgpOwotfQotCi12b2lkIEF1ZGlvUGFubmVyTm9kZTo6aW5pdGlhbGl6ZSgpCi17Ci0g
ICAgaWYgKGlzSW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBt
X3Bhbm5lciA9IFBhbm5lcjo6Y3JlYXRlKG1fcGFubmluZ01vZGVsLCBzYW1wbGVSYXRlKCkpOwot
Ci0gICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgQXVkaW9QYW5uZXJOb2Rl
Ojp1bmluaXRpYWxpemUoKQotewotICAgIGlmICghaXNJbml0aWFsaXplZCgpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIAotICAgIG1fcGFubmVyLmNsZWFyKCk7Ci0gICAgQXVkaW9Ob2RlOjp1
bmluaXRpYWxpemUoKTsKLX0KLQotQXVkaW9MaXN0ZW5lciogQXVkaW9QYW5uZXJOb2RlOjpsaXN0
ZW5lcigpCi17Ci0gICAgcmV0dXJuIGNvbnRleHQoKS0+bGlzdGVuZXIoKTsKLX0KLQotdm9pZCBB
dWRpb1Bhbm5lck5vZGU6OnNldFBhbm5pbmdNb2RlbCh1bnNpZ25lZCBzaG9ydCBtb2RlbCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc3dpdGNoIChtb2RlbCkgewotICAgIGNhc2UgRVFVQUxQ
T1dFUjoKLSAgICBjYXNlIEhSVEY6Ci0gICAgICAgIGlmICghbV9wYW5uZXIuZ2V0KCkgfHwgbW9k
ZWwgIT0gbV9wYW5uaW5nTW9kZWwpIHsKLSAgICAgICAgICAgIE93blB0cjxQYW5uZXI+IG5ld1Bh
bm5lciA9IFBhbm5lcjo6Y3JlYXRlKG1vZGVsLCBzYW1wbGVSYXRlKCkpOwotICAgICAgICAgICAg
bV9wYW5uZXIgPSBuZXdQYW5uZXIucmVsZWFzZSgpOwotICAgICAgICAgICAgbV9wYW5uaW5nTW9k
ZWwgPSBtb2RlbDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNPVU5ERklF
TEQ6Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgc291bmQgZmllbGQgbW9kZWwuIFNlZSAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczNjcuCi0gICAgICAg
IC8vIEZvciBub3csIGZhbGwgdGhyb3VnaCB0byB0aHJvdyBhbiBleGNlcHRpb24uCi0gICAgZGVm
YXVsdDoKLSAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotfQotCi12b2lkIEF1ZGlvUGFubmVyTm9kZTo6Z2V0QXppbXV0aEVsZXZhdGlvbihkb3Vi
bGUqIG91dEF6aW11dGgsIGRvdWJsZSogb3V0RWxldmF0aW9uKQotewotICAgIC8vIEZJWE1FOiB3
ZSBzaG91bGQgY2FjaGUgYXppbXV0aCBhbmQgZWxldmF0aW9uIChpZiBwb3NzaWJsZSksIHNvIHdl
IG9ubHkgcmUtY2FsY3VsYXRlIGlmIGEgY2hhbmdlIGhhcyBiZWVuIG1hZGUuCi0KLSAgICBkb3Vi
bGUgYXppbXV0aCA9IDAuMDsKLQotICAgIC8vIENhbGN1bGF0ZSB0aGUgc291cmNlLWxpc3RlbmVy
IHZlY3RvcgotICAgIEZsb2F0UG9pbnQzRCBsaXN0ZW5lclBvc2l0aW9uID0gbGlzdGVuZXIoKS0+
cG9zaXRpb24oKTsKLSAgICBGbG9hdFBvaW50M0Qgc291cmNlTGlzdGVuZXIgPSBtX3Bvc2l0aW9u
IC0gbGlzdGVuZXJQb3NpdGlvbjsKLQotICAgIGlmIChzb3VyY2VMaXN0ZW5lci5pc1plcm8oKSkg
ewotICAgICAgICAvLyBkZWdlbmVyYXRlIGNhc2UgaWYgc291cmNlIGFuZCBsaXN0ZW5lciBhcmUg
YXQgdGhlIHNhbWUgcG9pbnQKLSAgICAgICAgKm91dEF6aW11dGggPSAwLjA7Ci0gICAgICAgICpv
dXRFbGV2YXRpb24gPSAwLjA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzb3VyY2VM
aXN0ZW5lci5ub3JtYWxpemUoKTsKLQotICAgIC8vIEFsaWduIGF4ZXMKLSAgICBGbG9hdFBvaW50
M0QgbGlzdGVuZXJGcm9udCA9IGxpc3RlbmVyKCktPm9yaWVudGF0aW9uKCk7Ci0gICAgRmxvYXRQ
b2ludDNEIGxpc3RlbmVyVXAgPSBsaXN0ZW5lcigpLT51cFZlY3RvcigpOwotICAgIEZsb2F0UG9p
bnQzRCBsaXN0ZW5lclJpZ2h0ID0gbGlzdGVuZXJGcm9udC5jcm9zcyhsaXN0ZW5lclVwKTsKLSAg
ICBsaXN0ZW5lclJpZ2h0Lm5vcm1hbGl6ZSgpOwotCi0gICAgRmxvYXRQb2ludDNEIGxpc3RlbmVy
RnJvbnROb3JtID0gbGlzdGVuZXJGcm9udDsKLSAgICBsaXN0ZW5lckZyb250Tm9ybS5ub3JtYWxp
emUoKTsKLQotICAgIEZsb2F0UG9pbnQzRCB1cCA9IGxpc3RlbmVyUmlnaHQuY3Jvc3MobGlzdGVu
ZXJGcm9udE5vcm0pOwotCi0gICAgZmxvYXQgdXBQcm9qZWN0aW9uID0gc291cmNlTGlzdGVuZXIu
ZG90KHVwKTsKLQotICAgIEZsb2F0UG9pbnQzRCBwcm9qZWN0ZWRTb3VyY2UgPSBzb3VyY2VMaXN0
ZW5lciAtIHVwUHJvamVjdGlvbiAqIHVwOwotICAgIHByb2plY3RlZFNvdXJjZS5ub3JtYWxpemUo
KTsKLQotICAgIGF6aW11dGggPSAxODAuMCAqIGFjb3MocHJvamVjdGVkU291cmNlLmRvdChsaXN0
ZW5lclJpZ2h0KSkgLyBwaURvdWJsZTsKLSAgICBmaXhOQU5zKGF6aW11dGgpOyAvLyBhdm9pZCBp
bGxlZ2FsIHZhbHVlcwotCi0gICAgLy8gU291cmNlICBpbiBmcm9udCBvciBiZWhpbmQgdGhlIGxp
c3RlbmVyCi0gICAgZG91YmxlIGZyb250QmFjayA9IHByb2plY3RlZFNvdXJjZS5kb3QobGlzdGVu
ZXJGcm9udE5vcm0pOwotICAgIGlmIChmcm9udEJhY2sgPCAwLjApCi0gICAgICAgIGF6aW11dGgg
PSAzNjAuMCAtIGF6aW11dGg7Ci0KLSAgICAvLyBNYWtlIGF6aW11dGggcmVsYXRpdmUgdG8gImZy
b250IiBhbmQgbm90ICJyaWdodCIgbGlzdGVuZXIgdmVjdG9yCi0gICAgaWYgKChhemltdXRoID49
IDAuMCkgJiYgKGF6aW11dGggPD0gMjcwLjApKQotICAgICAgICBhemltdXRoID0gOTAuMCAtIGF6
aW11dGg7Ci0gICAgZWxzZQotICAgICAgICBhemltdXRoID0gNDUwLjAgLSBhemltdXRoOwotCi0g
ICAgLy8gRWxldmF0aW9uCi0gICAgZG91YmxlIGVsZXZhdGlvbiA9IDkwLjAgLSAxODAuMCAqIGFj
b3Moc291cmNlTGlzdGVuZXIuZG90KHVwKSkgLyBwaURvdWJsZTsKLSAgICBmaXhOQU5zKGVsZXZh
dGlvbik7IC8vIGF2b2lkIGlsbGVnYWwgdmFsdWVzCi0KLSAgICBpZiAoZWxldmF0aW9uID4gOTAu
MCkKLSAgICAgICAgZWxldmF0aW9uID0gMTgwLjAgLSBlbGV2YXRpb247Ci0gICAgZWxzZSBpZiAo
ZWxldmF0aW9uIDwgLTkwLjApCi0gICAgICAgIGVsZXZhdGlvbiA9IC0xODAuMCAtIGVsZXZhdGlv
bjsKLQotICAgIGlmIChvdXRBemltdXRoKQotICAgICAgICAqb3V0QXppbXV0aCA9IGF6aW11dGg7
Ci0gICAgaWYgKG91dEVsZXZhdGlvbikKLSAgICAgICAgKm91dEVsZXZhdGlvbiA9IGVsZXZhdGlv
bjsKLX0KLQotZmxvYXQgQXVkaW9QYW5uZXJOb2RlOjpkb3BwbGVyUmF0ZSgpCi17Ci0gICAgZG91
YmxlIGRvcHBsZXJTaGlmdCA9IDEuMDsKLQotICAgIC8vIEZJWE1FOiBvcHRpbWl6ZSBmb3IgY2Fz
ZSB3aGVuIG5laXRoZXIgc291cmNlIG5vciBsaXN0ZW5lciBoYXMgY2hhbmdlZC4uLgotICAgIGRv
dWJsZSBkb3BwbGVyRmFjdG9yID0gbGlzdGVuZXIoKS0+ZG9wcGxlckZhY3RvcigpOwotCi0gICAg
aWYgKGRvcHBsZXJGYWN0b3IgPiAwLjApIHsKLSAgICAgICAgZG91YmxlIHNwZWVkT2ZTb3VuZCA9
IGxpc3RlbmVyKCktPnNwZWVkT2ZTb3VuZCgpOwotCi0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQz
RCAmc291cmNlVmVsb2NpdHkgPSBtX3ZlbG9jaXR5OwotICAgICAgICBjb25zdCBGbG9hdFBvaW50
M0QgJmxpc3RlbmVyVmVsb2NpdHkgPSBsaXN0ZW5lcigpLT52ZWxvY2l0eSgpOwotCi0gICAgICAg
IC8vIERvbid0IGJvdGhlciBpZiBib3RoIHNvdXJjZSBhbmQgbGlzdGVuZXIgaGF2ZSBubyB2ZWxv
Y2l0eQotICAgICAgICBib29sIHNvdXJjZUhhc1ZlbG9jaXR5ID0gIXNvdXJjZVZlbG9jaXR5Lmlz
WmVybygpOwotICAgICAgICBib29sIGxpc3RlbmVySGFzVmVsb2NpdHkgPSAhbGlzdGVuZXJWZWxv
Y2l0eS5pc1plcm8oKTsKLQotICAgICAgICBpZiAoc291cmNlSGFzVmVsb2NpdHkgfHwgbGlzdGVu
ZXJIYXNWZWxvY2l0eSkgewotICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBzb3VyY2UgdG8g
bGlzdGVuZXIgdmVjdG9yCi0gICAgICAgICAgICBGbG9hdFBvaW50M0QgbGlzdGVuZXJQb3NpdGlv
biA9IGxpc3RlbmVyKCktPnBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50M0Qgc291
cmNlVG9MaXN0ZW5lciA9IG1fcG9zaXRpb24gLSBsaXN0ZW5lclBvc2l0aW9uOwotCi0gICAgICAg
ICAgICBkb3VibGUgc291cmNlTGlzdGVuZXJNYWduaXR1ZGUgPSBzb3VyY2VUb0xpc3RlbmVyLmxl
bmd0aCgpOwotCi0gICAgICAgICAgICBkb3VibGUgbGlzdGVuZXJQcm9qZWN0aW9uID0gc291cmNl
VG9MaXN0ZW5lci5kb3QobGlzdGVuZXJWZWxvY2l0eSkgLyBzb3VyY2VMaXN0ZW5lck1hZ25pdHVk
ZTsKLSAgICAgICAgICAgIGRvdWJsZSBzb3VyY2VQcm9qZWN0aW9uID0gc291cmNlVG9MaXN0ZW5l
ci5kb3Qoc291cmNlVmVsb2NpdHkpIC8gc291cmNlTGlzdGVuZXJNYWduaXR1ZGU7Ci0KLSAgICAg
ICAgICAgIGxpc3RlbmVyUHJvamVjdGlvbiA9IC1saXN0ZW5lclByb2plY3Rpb247Ci0gICAgICAg
ICAgICBzb3VyY2VQcm9qZWN0aW9uID0gLXNvdXJjZVByb2plY3Rpb247Ci0KLSAgICAgICAgICAg
IGRvdWJsZSBzY2FsZWRTcGVlZE9mU291bmQgPSBzcGVlZE9mU291bmQgLyBkb3BwbGVyRmFjdG9y
OwotICAgICAgICAgICAgbGlzdGVuZXJQcm9qZWN0aW9uID0gbWluKGxpc3RlbmVyUHJvamVjdGlv
biwgc2NhbGVkU3BlZWRPZlNvdW5kKTsKLSAgICAgICAgICAgIHNvdXJjZVByb2plY3Rpb24gPSBt
aW4oc291cmNlUHJvamVjdGlvbiwgc2NhbGVkU3BlZWRPZlNvdW5kKTsKLQotICAgICAgICAgICAg
ZG9wcGxlclNoaWZ0ID0gKChzcGVlZE9mU291bmQgLSBkb3BwbGVyRmFjdG9yICogbGlzdGVuZXJQ
cm9qZWN0aW9uKSAvIChzcGVlZE9mU291bmQgLSBkb3BwbGVyRmFjdG9yICogc291cmNlUHJvamVj
dGlvbikpOwotICAgICAgICAgICAgZml4TkFOcyhkb3BwbGVyU2hpZnQpOyAvLyBhdm9pZCBpbGxl
Z2FsIHZhbHVlcwotCi0gICAgICAgICAgICAvLyBMaW1pdCB0aGUgcGl0Y2ggc2hpZnRpbmcgdG8g
NCBvY3RhdmVzIHVwIGFuZCAzIG9jdGF2ZXMgZG93bi4KLSAgICAgICAgICAgIGlmIChkb3BwbGVy
U2hpZnQgPiAxNi4wKQotICAgICAgICAgICAgICAgIGRvcHBsZXJTaGlmdCA9IDE2LjA7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChkb3BwbGVyU2hpZnQgPCAwLjEyNSkKLSAgICAgICAgICAgICAgICBk
b3BwbGVyU2hpZnQgPSAwLjEyNTsgICAKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4oZG9wcGxlclNoaWZ0KTsKLX0KLQotZmxvYXQgQXVkaW9QYW5uZXJO
b2RlOjpkaXN0YW5jZUNvbmVHYWluKCkKLXsKLSAgICBGbG9hdFBvaW50M0QgbGlzdGVuZXJQb3Np
dGlvbiA9IGxpc3RlbmVyKCktPnBvc2l0aW9uKCk7Ci0KLSAgICBkb3VibGUgbGlzdGVuZXJEaXN0
YW5jZSA9IG1fcG9zaXRpb24uZGlzdGFuY2VUbyhsaXN0ZW5lclBvc2l0aW9uKTsKLSAgICBkb3Vi
bGUgZGlzdGFuY2VHYWluID0gbV9kaXN0YW5jZUVmZmVjdC5nYWluKGxpc3RlbmVyRGlzdGFuY2Up
OwotICAgIAotICAgIG1fZGlzdGFuY2VHYWluLT5zZXRWYWx1ZShzdGF0aWNfY2FzdDxmbG9hdD4o
ZGlzdGFuY2VHYWluKSk7Ci0KLSAgICAvLyBGSVhNRTogY291bGQgb3B0aW1pemUgYnkgY2FjaGlu
ZyBjb25lR2FpbgotICAgIGRvdWJsZSBjb25lR2FpbiA9IG1fY29uZUVmZmVjdC5nYWluKG1fcG9z
aXRpb24sIG1fb3JpZW50YXRpb24sIGxpc3RlbmVyUG9zaXRpb24pOwotICAgIAotICAgIG1fY29u
ZUdhaW4tPnNldFZhbHVlKHN0YXRpY19jYXN0PGZsb2F0Pihjb25lR2FpbikpOwotCi0gICAgcmV0
dXJuIGZsb2F0KGRpc3RhbmNlR2FpbiAqIGNvbmVHYWluKTsKLX0KLQotdm9pZCBBdWRpb1Bhbm5l
ck5vZGU6Om5vdGlmeUF1ZGlvU291cmNlc0Nvbm5lY3RlZFRvTm9kZShBdWRpb05vZGUqIG5vZGUp
Ci17Ci0gICAgQVNTRVJUKG5vZGUpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwot
ICAgICAgICAKLSAgICAvLyBGaXJzdCBjaGVjayBpZiB0aGlzIG5vZGUgaXMgYW4gQXVkaW9CdWZm
ZXJTb3VyY2VOb2RlLiAgSWYgc28sIGxldCBpdCBrbm93IGFib3V0IHVzIHNvIHRoYXQgZG9wcGxl
ciBzaGlmdCBwaXRjaCBjYW4gYmUgdGFrZW4gaW50byBhY2NvdW50LgotICAgIGlmIChub2RlLT5u
b2RlVHlwZSgpID09IE5vZGVUeXBlQXVkaW9CdWZmZXJTb3VyY2UpIHsKLSAgICAgICAgQXVkaW9C
dWZmZXJTb3VyY2VOb2RlKiBidWZmZXJTb3VyY2VOb2RlID0gcmVpbnRlcnByZXRfY2FzdDxBdWRp
b0J1ZmZlclNvdXJjZU5vZGUqPihub2RlKTsKLSAgICAgICAgYnVmZmVyU291cmNlTm9kZS0+c2V0
UGFubmVyTm9kZSh0aGlzKTsKLSAgICB9IGVsc2UgeyAgICAKLSAgICAgICAgLy8gR28gdGhyb3Vn
aCBhbGwgaW5wdXRzIHRvIHRoaXMgbm9kZS4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG5vZGUtPm51bWJlck9mSW5wdXRzKCk7ICsraSkgewotICAgICAgICAgICAgQXVkaW9Ob2Rl
SW5wdXQqIGlucHV0ID0gbm9kZS0+aW5wdXQoaSk7Ci0KLSAgICAgICAgICAgIC8vIEZvciBlYWNo
IGlucHV0LCBnbyB0aHJvdWdoIGFsbCBvZiBpdHMgY29ubmVjdGlvbnMsIGxvb2tpbmcgZm9yIEF1
ZGlvQnVmZmVyU291cmNlTm9kZXMuCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBq
IDwgaW5wdXQtPm51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKTsgKytqKSB7Ci0gICAgICAg
ICAgICAgICAgQXVkaW9Ob2RlT3V0cHV0KiBjb25uZWN0ZWRPdXRwdXQgPSBpbnB1dC0+cmVuZGVy
aW5nT3V0cHV0KGopOwotICAgICAgICAgICAgICAgIEF1ZGlvTm9kZSogY29ubmVjdGVkTm9kZSA9
IGNvbm5lY3RlZE91dHB1dC0+bm9kZSgpOwotICAgICAgICAgICAgICAgIG5vdGlmeUF1ZGlvU291
cmNlc0Nvbm5lY3RlZFRvTm9kZShjb25uZWN0ZWROb2RlKTsgLy8gcmVjdXJzZQotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9QYW5uZXJOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9QYW5uZXJOb2RlLmgJKHJldmlzaW9uIDExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwot
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBdWRpb1Bhbm5lck5vZGVfaAotI2RlZmluZSBBdWRpb1Bh
bm5lck5vZGVfaAotCi0jaW5jbHVkZSAiQXVkaW9CdXMuaCIKLSNpbmNsdWRlICJBdWRpb0dhaW4u
aCIKLSNpbmNsdWRlICJBdWRpb0xpc3RlbmVyLmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCi0j
aW5jbHVkZSAiQ29uZS5oIgotI2luY2x1ZGUgIkRpc3RhbmNlLmgiCi0jaW5jbHVkZSAiRmxvYXRQ
b2ludDNELmgiCi0jaW5jbHVkZSAiUGFubmVyLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEF1ZGlvUGFubmVyTm9kZSBpcyBhbiBBdWRpb05v
ZGUgd2l0aCBvbmUgaW5wdXQgYW5kIG9uZSBvdXRwdXQuCi0vLyBJdCBwb3NpdGlvbnMgYSBzb3Vu
ZCBpbiAzRCBzcGFjZSwgd2l0aCB0aGUgZXhhY3QgZWZmZWN0IGRlcGVuZGVudCBvbiB0aGUgcGFu
bmluZyBtb2RlbC4KLS8vIEl0IGhhcyBhIHBvc2l0aW9uIGFuZCBhbiBvcmllbnRhdGlvbiBpbiAz
RCBzcGFjZSB3aGljaCBpcyByZWxhdGl2ZSB0byB0aGUgcG9zaXRpb24gYW5kIG9yaWVudGF0aW9u
IG9mIHRoZSBjb250ZXh0J3MgQXVkaW9MaXN0ZW5lci4KLS8vIEEgZGlzdGFuY2UgZWZmZWN0IHdp
bGwgYXR0ZW51YXRlIHRoZSBnYWluIGFzIHRoZSBwb3NpdGlvbiBtb3ZlcyBhd2F5IGZyb20gdGhl
IGxpc3RlbmVyLgotLy8gQSBjb25lIGVmZmVjdCB3aWxsIGF0dGVudWF0ZSB0aGUgZ2FpbiBhcyB0
aGUgb3JpZW50YXRpb24gbW92ZXMgYXdheSBmcm9tIHRoZSBsaXN0ZW5lci4KLS8vIEFsbCBvZiB0
aGVzZSBlZmZlY3RzIGZvbGxvdyB0aGUgT3BlbkFMIHNwZWNpZmljYXRpb24gdmVyeSBjbG9zZWx5
LgotCi1jbGFzcyBBdWRpb1Bhbm5lck5vZGUgOiBwdWJsaWMgQXVkaW9Ob2RlIHsKLXB1YmxpYzoK
LSAgICAvLyBUaGVzZSBtdXN0IGJlIGRlZmluZWQgYXMgaW4gdGhlIC5pZGwgZmlsZSBhbmQgbXVz
dCBtYXRjaCB0aG9zZSBpbiB0aGUgUGFubmVyIGNsYXNzLgotICAgIGVudW0gewotICAgICAgICBF
UVVBTFBPV0VSID0gMCwKLSAgICAgICAgSFJURiA9IDEsCi0gICAgICAgIFNPVU5ERklFTEQgPSAy
LAotICAgIH07Ci0KLSAgICAvLyBUaGVzZSBtdXN0IGJlIGRlZmluZWQgYXMgaW4gdGhlIC5pZGwg
ZmlsZSBhbmQgbXVzdCBtYXRjaCB0aG9zZQotICAgIC8vIGluIHRoZSBEaXN0YW5jZUVmZmVjdCBj
bGFzcy4KLSAgICBlbnVtIHsKLSAgICAgICAgTElORUFSX0RJU1RBTkNFID0gMCwKLSAgICAgICAg
SU5WRVJTRV9ESVNUQU5DRSA9IDEsCi0gICAgICAgIEVYUE9ORU5USUFMX0RJU1RBTkNFID0gMiwK
LSAgICB9OwotICAgIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlvUGFubmVyTm9kZT4gY3Jl
YXRlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVkaW9QYW5uZXJOb2RlKGNvbnRleHQsIHNhbXBsZVJh
dGUpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5BdWRpb1Bhbm5lck5vZGUoKTsKLQotICAgIC8v
IEF1ZGlvTm9kZQotICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nl
c3MpOwotICAgIHZpcnR1YWwgdm9pZCBwdWxsSW5wdXRzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3Mp
OwotICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOwotICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXpl
KCk7Ci0gICAgdmlydHVhbCB2b2lkIHVuaW5pdGlhbGl6ZSgpOwotCi0gICAgLy8gTGlzdGVuZXIK
LSAgICBBdWRpb0xpc3RlbmVyKiBsaXN0ZW5lcigpOwotCi0gICAgLy8gUGFubmluZyBtb2RlbAot
ICAgIHVuc2lnbmVkIHNob3J0IHBhbm5pbmdNb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFubmlu
Z01vZGVsOyB9Ci0gICAgdm9pZCBzZXRQYW5uaW5nTW9kZWwodW5zaWduZWQgc2hvcnQsIEV4Y2Vw
dGlvbkNvZGUmKTsKLQotICAgIC8vIFBvc2l0aW9uCi0gICAgRmxvYXRQb2ludDNEIHBvc2l0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQotICAgIHZvaWQgc2V0UG9zaXRpb24oZmxv
YXQgeCwgZmxvYXQgeSwgZmxvYXQgeikgeyBtX3Bvc2l0aW9uID0gRmxvYXRQb2ludDNEKHgsIHks
IHopOyB9Ci0KLSAgICAvLyBPcmllbnRhdGlvbgotICAgIEZsb2F0UG9pbnQzRCBvcmllbnRhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KLSAgICB2b2lkIHNldE9yaWVudGF0aW9u
KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopIHsgbV9vcmllbnRhdGlvbiA9IEZsb2F0UG9pbnQz
RCh4LCB5LCB6KTsgfQotCi0gICAgLy8gVmVsb2NpdHkKLSAgICBGbG9hdFBvaW50M0QgdmVsb2Np
dHkoKSBjb25zdCB7IHJldHVybiBtX3ZlbG9jaXR5OyB9Ci0gICAgdm9pZCBzZXRWZWxvY2l0eShm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7IG1fdmVsb2NpdHkgPSBGbG9hdFBvaW50M0QoeCwg
eSwgeik7IH0KLQotICAgIC8vIERpc3RhbmNlIHBhcmFtZXRlcnMKLSAgICB1bnNpZ25lZCBzaG9y
dCBkaXN0YW5jZU1vZGVsKCkgeyByZXR1cm4gbV9kaXN0YW5jZUVmZmVjdC5tb2RlbCgpOyB9Ci0g
ICAgdm9pZCBzZXREaXN0YW5jZU1vZGVsKHVuc2lnbmVkIHNob3J0IG1vZGVsKSB7IG1fZGlzdGFu
Y2VFZmZlY3Quc2V0TW9kZWwoc3RhdGljX2Nhc3Q8RGlzdGFuY2VFZmZlY3Q6Ok1vZGVsVHlwZT4o
bW9kZWwpLCB0cnVlKTsgfQotICAgIAotICAgIGZsb2F0IHJlZkRpc3RhbmNlKCkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fZGlzdGFuY2VFZmZlY3QucmVmRGlzdGFuY2UoKSk7IH0KLSAg
ICB2b2lkIHNldFJlZkRpc3RhbmNlKGZsb2F0IHJlZkRpc3RhbmNlKSB7IG1fZGlzdGFuY2VFZmZl
Y3Quc2V0UmVmRGlzdGFuY2UocmVmRGlzdGFuY2UpOyB9Ci0KLSAgICBmbG9hdCBtYXhEaXN0YW5j
ZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX2Rpc3RhbmNlRWZmZWN0Lm1heERpc3Rh
bmNlKCkpOyB9Ci0gICAgdm9pZCBzZXRNYXhEaXN0YW5jZShmbG9hdCBtYXhEaXN0YW5jZSkgeyBt
X2Rpc3RhbmNlRWZmZWN0LnNldE1heERpc3RhbmNlKG1heERpc3RhbmNlKTsgfQotCi0gICAgZmxv
YXQgcm9sbG9mZkZhY3RvcigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX2Rpc3RhbmNl
RWZmZWN0LnJvbGxvZmZGYWN0b3IoKSk7IH0KLSAgICB2b2lkIHNldFJvbGxvZmZGYWN0b3IoZmxv
YXQgcm9sbG9mZkZhY3RvcikgeyBtX2Rpc3RhbmNlRWZmZWN0LnNldFJvbGxvZmZGYWN0b3Iocm9s
bG9mZkZhY3Rvcik7IH0KLQotICAgIC8vIFNvdW5kIGNvbmVzIC0gYW5nbGVzIGluIGRlZ3JlZXMK
LSAgICBmbG9hdCBjb25lSW5uZXJBbmdsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZs
b2F0PihtX2NvbmVFZmZlY3QuaW5uZXJBbmdsZSgpKTsgfQotICAgIHZvaWQgc2V0Q29uZUlubmVy
QW5nbGUoZmxvYXQgYW5nbGUpIHsgbV9jb25lRWZmZWN0LnNldElubmVyQW5nbGUoYW5nbGUpOyB9
Ci0KLSAgICBmbG9hdCBjb25lT3V0ZXJBbmdsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PGZsb2F0PihtX2NvbmVFZmZlY3Qub3V0ZXJBbmdsZSgpKTsgfQotICAgIHZvaWQgc2V0Q29uZU91
dGVyQW5nbGUoZmxvYXQgYW5nbGUpIHsgbV9jb25lRWZmZWN0LnNldE91dGVyQW5nbGUoYW5nbGUp
OyB9Ci0KLSAgICBmbG9hdCBjb25lT3V0ZXJHYWluKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG1fY29uZUVmZmVjdC5vdXRlckdhaW4oKSk7IH0KLSAgICB2b2lkIHNldENvbmVP
dXRlckdhaW4oZmxvYXQgYW5nbGUpIHsgbV9jb25lRWZmZWN0LnNldE91dGVyR2FpbihhbmdsZSk7
IH0KLQotICAgIHZvaWQgZ2V0QXppbXV0aEVsZXZhdGlvbihkb3VibGUqIG91dEF6aW11dGgsIGRv
dWJsZSogb3V0RWxldmF0aW9uKTsKLSAgICBmbG9hdCBkb3BwbGVyUmF0ZSgpOwotCi0gICAgLy8g
QWNjZXNzb3JzIGZvciBkeW5hbWljYWxseSBjYWxjdWxhdGVkIGdhaW4gdmFsdWVzLgotICAgIEF1
ZGlvR2FpbiogZGlzdGFuY2VHYWluKCkgeyByZXR1cm4gbV9kaXN0YW5jZUdhaW4uZ2V0KCk7IH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgQXVkaW9HYWluKiBj
b25lR2FpbigpIHsgcmV0dXJuIG1fY29uZUdhaW4uZ2V0KCk7IH0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCi0KLSAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcGFubmVyID8gbV9wYW5uZXItPnRhaWxUaW1lKCkgOiAw
OyB9Ci0gICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBtX3Bhbm5lciA/IG1fcGFubmVyLT5sYXRlbmN5VGltZSgpIDogMDsgfQotCi1wcml2YXRl
OgotICAgIEF1ZGlvUGFubmVyTm9kZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsK
LQotICAgIC8vIFJldHVybnMgdGhlIGNvbWJpbmVkIGRpc3RhbmNlIGFuZCBjb25lIGdhaW4gYXR0
ZW51YXRpb24uCi0gICAgZmxvYXQgZGlzdGFuY2VDb25lR2FpbigpOwotCi0gICAgLy8gTm90aWZp
ZXMgYW55IEF1ZGlvQnVmZmVyU291cmNlTm9kZXMgY29ubmVjdGVkIHRvIHVzIGVpdGhlciBkaXJl
Y3RseSBvciBpbmRpcmVjdGx5IGFib3V0IG91ciBleGlzdGVuY2UuCi0gICAgLy8gVGhpcyBpcyBp
biBvcmRlciB0byBoYW5kbGUgdGhlIHBpdGNoIGNoYW5nZSBuZWNlc3NhcnkgZm9yIHRoZSBkb3Bw
bGVyIHNoaWZ0LgotICAgIHZvaWQgbm90aWZ5QXVkaW9Tb3VyY2VzQ29ubmVjdGVkVG9Ob2RlKEF1
ZGlvTm9kZSopOwotCi0gICAgT3duUHRyPFBhbm5lcj4gbV9wYW5uZXI7Ci0gICAgdW5zaWduZWQg
bV9wYW5uaW5nTW9kZWw7Ci0KLSAgICBGbG9hdFBvaW50M0QgbV9wb3NpdGlvbjsKLSAgICBGbG9h
dFBvaW50M0QgbV9vcmllbnRhdGlvbjsKLSAgICBGbG9hdFBvaW50M0QgbV92ZWxvY2l0eTsKLQot
ICAgIC8vIEdhaW4KLSAgICBSZWZQdHI8QXVkaW9HYWluPiBtX2Rpc3RhbmNlR2FpbjsKLSAgICBS
ZWZQdHI8QXVkaW9HYWluPiBtX2NvbmVHYWluOwotICAgIERpc3RhbmNlRWZmZWN0IG1fZGlzdGFu
Y2VFZmZlY3Q7Ci0gICAgQ29uZUVmZmVjdCBtX2NvbmVFZmZlY3Q7Ci0gICAgZmxvYXQgbV9sYXN0
R2FpbjsKLQotICAgIHVuc2lnbmVkIG1fY29ubmVjdGlvbkNvdW50OwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQXVkaW9QYW5uZXJOb2RlX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbAkocmV2aXNpb24gMTExNDMz
KQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGF1ZGlvIHsKLSAg
ICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCi0gICAgICAgIEpT
R2VuZXJhdGVUb0pTT2JqZWN0Ci0gICAgXSBBdWRpb1Bhbm5lck5vZGUgOiBBdWRpb05vZGUgewot
ICAgICAgICAvLyBQYW5uaW5nIG1vZGVsCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEVR
VUFMUE9XRVIgPSAwOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBIUlRGID0gMTsKLSAg
ICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgU09VTkRGSUVMRCA9IDI7Ci0KLSAgICAgICAgLy8g
RGlzdGFuY2UgbW9kZWwKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTElORUFSX0RJU1RB
TkNFID0gMDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgSU5WRVJTRV9ESVNUQU5DRSA9
IDE7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEVYUE9ORU5USUFMX0RJU1RBTkNFID0g
MjsKLQotICAgICAgICAvLyBEZWZhdWx0IG1vZGVsIGZvciBzdGVyZW8gaXMgSFJURiAKLSAgICAg
ICAgLy8gRklYTUU6IHVzZSB1bnNpZ25lZCBzaG9ydCB3aGVuIGdsdWUgZ2VuZXJhdGlvbiBzdXBw
b3J0cyBpdAotICAgICAgICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBwYW5uaW5nTW9kZWwKLSAg
ICAgICAgICAgIHNldHRlciByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLQotICAgICAgICAvLyBVc2Vz
IGEgM0QgY2FydGVzaWFuIGNvb3JkaW5hdGUgc3lzdGVtIAotICAgICAgICB2b2lkIHNldFBvc2l0
aW9uKGluIGZsb2F0IHgsIGluIGZsb2F0IHksIGluIGZsb2F0IHopOwotICAgICAgICB2b2lkIHNl
dE9yaWVudGF0aW9uKGluIGZsb2F0IHgsIGluIGZsb2F0IHksIGluIGZsb2F0IHopOwotICAgICAg
ICB2b2lkIHNldFZlbG9jaXR5KGluIGZsb2F0IHgsIGluIGZsb2F0IHksIGluIGZsb2F0IHopOwot
Ci0gICAgICAgIC8vIERpc3RhbmNlIG1vZGVsCi0gICAgICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBs
b25nIGRpc3RhbmNlTW9kZWw7IC8vIEZJWE1FOiB1c2UgdW5zaWduZWQgc2hvcnQgd2hlbiBnbHVl
IGdlbmVyYXRpb24gc3VwcG9ydHMgaXQKLSAgICAgICAgYXR0cmlidXRlIGZsb2F0IHJlZkRpc3Rh
bmNlOwotICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgbWF4RGlzdGFuY2U7Ci0gICAgICAgIGF0dHJp
YnV0ZSBmbG9hdCByb2xsb2ZmRmFjdG9yOwotCi0gICAgICAgIC8vIERpcmVjdGlvbmFsIHNvdW5k
IGNvbmUKLSAgICAgICAgYXR0cmlidXRlIGZsb2F0IGNvbmVJbm5lckFuZ2xlOwotICAgICAgICBh
dHRyaWJ1dGUgZmxvYXQgY29uZU91dGVyQW5nbGU7Ci0gICAgICAgIGF0dHJpYnV0ZSBmbG9hdCBj
b25lT3V0ZXJHYWluOwotCi0gICAgICAgIC8vIER5bmFtaWNhbGx5IGNhbGN1bGF0ZWQgZ2FpbiB2
YWx1ZXMgICAgICAgICAgCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb0dhaW4gY29u
ZUdhaW47Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb0dhaW4gZGlzdGFuY2VHYWlu
OwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtLmNwcAko
cmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTE2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiQXVkaW9QYXJhbS5o
IgotCi0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCi0jaW5jbHVkZSAiQXVkaW9VdGlsaXRpZXMuaCIK
LSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0IGRvdWJsZSBBdWRpb1BhcmFtOjpEZWZh
dWx0U21vb3RoaW5nQ29uc3RhbnQgPSAwLjA1OwotY29uc3QgZG91YmxlIEF1ZGlvUGFyYW06OlNu
YXBUaHJlc2hvbGQgPSAwLjAwMTsKLQotZmxvYXQgQXVkaW9QYXJhbTo6dmFsdWUoKQotewotICAg
IC8vIFVwZGF0ZSB2YWx1ZSBmb3IgdGltZWxpbmUuCi0gICAgaWYgKGNvbnRleHQoKSAmJiBjb250
ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSkgewotICAgICAgICBib29sIGhhc1ZhbHVlOwotICAgICAg
ICBmbG9hdCB0aW1lbGluZVZhbHVlID0gbV90aW1lbGluZS52YWx1ZUZvckNvbnRleHRUaW1lKGNv
bnRleHQoKSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChtX3ZhbHVlKSwgaGFzVmFsdWUpOwotCi0g
ICAgICAgIGlmIChoYXNWYWx1ZSkKLSAgICAgICAgICAgIG1fdmFsdWUgPSB0aW1lbGluZVZhbHVl
OwotICAgIH0KLQotICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KG1fdmFsdWUpOwot
fQotCi12b2lkIEF1ZGlvUGFyYW06OnNldFZhbHVlKGZsb2F0IHZhbHVlKQotewotICAgIC8vIENo
ZWNrIGFnYWluc3QgSmF2YVNjcmlwdCBnaXZpbmcgdXMgYm9ndXMgZmxvYXRpbmctcG9pbnQgdmFs
dWVzLgotICAgIC8vIERvbid0IEFTU0VSVCwgc2luY2UgdGhpcyBjYW4gaGFwcGVuIGlmIHNvbWVi
b2R5IHdyaXRlcyBiYWQgSlMuCi0gICAgaWYgKCFpc25hbih2YWx1ZSkgJiYgIWlzaW5mKHZhbHVl
KSkKLSAgICAgICAgbV92YWx1ZSA9IHZhbHVlOwotfQotCi1mbG9hdCBBdWRpb1BhcmFtOjpzbW9v
dGhlZFZhbHVlKCkKLXsKLSAgICByZXR1cm4gbmFycm93UHJlY2lzaW9uVG9GbG9hdChtX3Ntb290
aGVkVmFsdWUpOwotfQotCi1ib29sIEF1ZGlvUGFyYW06OnNtb290aCgpCi17Ci0gICAgLy8gSWYg
dmFsdWVzIGhhdmUgYmVlbiBleHBsaWNpdGx5IHNjaGVkdWxlZCBvbiB0aGUgdGltZWxpbmUsIHRo
ZW4gdXNlIHRoZSBleGFjdCB2YWx1ZS4KLSAgICAvLyBTbW9vdGhpbmcgZWZmZWN0aXZlbHkgaXMg
cGVyZm9ybWVkIGJ5IHRoZSB0aW1lbGluZS4KLSAgICBib29sIHVzZVRpbWVsaW5lVmFsdWUgPSBm
YWxzZTsKLSAgICBpZiAoY29udGV4dCgpKQotICAgICAgICBtX3ZhbHVlID0gbV90aW1lbGluZS52
YWx1ZUZvckNvbnRleHRUaW1lKGNvbnRleHQoKSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChtX3Zh
bHVlKSwgdXNlVGltZWxpbmVWYWx1ZSk7Ci0gICAgCi0gICAgaWYgKG1fc21vb3RoZWRWYWx1ZSA9
PSBtX3ZhbHVlKSB7Ci0gICAgICAgIC8vIFNtb290aGVkIHZhbHVlIGhhcyBhbHJlYWR5IGFwcHJv
YWNoZWQgYW5kIHNuYXBwZWQgdG8gdmFsdWUuCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICAKLSAgICBpZiAodXNlVGltZWxpbmVWYWx1ZSkKLSAgICAgICAgbV9zbW9vdGhlZFZhbHVl
ID0gbV92YWx1ZTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gRGV6aXBwZXIgLSBleHBvbmVudGlh
bCBhcHByb2FjaC4KLSAgICAgICAgbV9zbW9vdGhlZFZhbHVlICs9IChtX3ZhbHVlIC0gbV9zbW9v
dGhlZFZhbHVlKSAqIG1fc21vb3RoaW5nQ29uc3RhbnQ7Ci0KLSAgICAgICAgLy8gSWYgd2UgZ2V0
IGNsb3NlIGVub3VnaCB0aGVuIHNuYXAgdG8gYWN0dWFsIHZhbHVlLgotICAgICAgICBpZiAoZmFi
cyhtX3Ntb290aGVkVmFsdWUgLSBtX3ZhbHVlKSA8IFNuYXBUaHJlc2hvbGQpIC8vIEZJWE1FOiB0
aGUgdGhyZXNob2xkIG5lZWRzIHRvIGJlIGFkanVzdGFibGUgZGVwZW5kaW5nIG9uIHJhbmdlIC0g
YnV0IHRoaXMgaXMgT0sgZ2VuZXJhbCBwdXJwb3NlIHZhbHVlLgotICAgICAgICAgICAgbV9zbW9v
dGhlZFZhbHVlID0gbV92YWx1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgQXVkaW9QYXJhbTo6Y2FsY3VsYXRlU2FtcGxlQWNjdXJhdGVWYWx1ZXMoZmxvYXQqIHZhbHVl
cywgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMpCi17Ci0gICAgYm9vbCBpc1NhZmUgPSBjb250ZXh0
KCkgJiYgY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkgJiYgdmFsdWVzOwotICAgIEFTU0VSVChp
c1NhZmUpOwotICAgIGlmICghaXNTYWZlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDYWxj
dWxhdGUgdmFsdWVzIGZvciB0aGlzIHJlbmRlciBxdWFudHVtLgotICAgIC8vIE5vcm1hbGx5IG51
bWJlck9mVmFsdWVzIHdpbGwgZXF1YWwgQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVz
ICh0aGUgcmVuZGVyIHF1YW50dW0gc2l6ZSkuCi0gICAgZmxvYXQgc2FtcGxlUmF0ZSA9IGNvbnRl
eHQoKS0+c2FtcGxlUmF0ZSgpOwotICAgIGZsb2F0IHN0YXJ0VGltZSA9IG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoY29udGV4dCgpLT5jdXJyZW50VGltZSgpKTsKLSAgICBmbG9hdCBlbmRUaW1lID0g
c3RhcnRUaW1lICsgbnVtYmVyT2ZWYWx1ZXMgLyBzYW1wbGVSYXRlOwotCi0gICAgLy8gTm90ZSB3
ZSdyZSBydW5uaW5nIGNvbnRyb2wgcmF0ZSBhdCB0aGUgc2FtcGxlLXJhdGUuCi0gICAgLy8gUGFz
cyBpbiB0aGUgY3VycmVudCB2YWx1ZSBhcyBkZWZhdWx0IHZhbHVlLgotICAgIG1fdmFsdWUgPSBt
X3RpbWVsaW5lLnZhbHVlc0ZvclRpbWVSYW5nZShzdGFydFRpbWUsIGVuZFRpbWUsIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQobV92YWx1ZSksIHZhbHVlcywgbnVtYmVyT2ZWYWx1ZXMsIHNhbXBsZVJh
dGUsIHNhbXBsZVJhdGUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Q
YXJhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFyYW0u
aAkocmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJh
bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBdWRpb1BhcmFt
X2gKLSNkZWZpbmUgQXVkaW9QYXJhbV9oCi0KLSNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKLSNp
bmNsdWRlICJBdWRpb1BhcmFtVGltZWxpbmUuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9GbG9hdDMyQXJyYXkuaD4K
LSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9QYXJhbSA6IHB1YmxpYyBSZWZD
b3VudGVkPEF1ZGlvUGFyYW0+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIERl
ZmF1bHRTbW9vdGhpbmdDb25zdGFudDsKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIFNuYXBUaHJl
c2hvbGQ7Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb1BhcmFtPiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBkb3VibGUgZGVmYXVsdFZhbHVlLCBkb3VibGUgbWluVmFsdWUsIGRvdWJs
ZSBtYXhWYWx1ZSwgdW5zaWduZWQgdW5pdHMgPSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBBdWRpb1BhcmFtKG5hbWUsIGRlZmF1bHRWYWx1ZSwgbWluVmFsdWUsIG1heFZh
bHVlLCB1bml0cykpOwotICAgIH0KLQotICAgIEF1ZGlvUGFyYW0oY29uc3QgU3RyaW5nJiBuYW1l
LCBkb3VibGUgZGVmYXVsdFZhbHVlLCBkb3VibGUgbWluVmFsdWUsIGRvdWJsZSBtYXhWYWx1ZSwg
dW5zaWduZWQgdW5pdHMgPSAwKQotICAgICAgICA6IG1fbmFtZShuYW1lKQotICAgICAgICAsIG1f
dmFsdWUoZGVmYXVsdFZhbHVlKQotICAgICAgICAsIG1fZGVmYXVsdFZhbHVlKGRlZmF1bHRWYWx1
ZSkKLSAgICAgICAgLCBtX21pblZhbHVlKG1pblZhbHVlKQotICAgICAgICAsIG1fbWF4VmFsdWUo
bWF4VmFsdWUpCi0gICAgICAgICwgbV91bml0cyh1bml0cykKLSAgICAgICAgLCBtX3Ntb290aGVk
VmFsdWUoZGVmYXVsdFZhbHVlKQotICAgICAgICAsIG1fc21vb3RoaW5nQ29uc3RhbnQoRGVmYXVs
dFNtb290aGluZ0NvbnN0YW50KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRDb250
ZXh0KEF1ZGlvQ29udGV4dCogY29udGV4dCkgeyBtX2NvbnRleHQgPSBjb250ZXh0OyB9Ci0gICAg
QXVkaW9Db250ZXh0KiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9Ci0KLSAg
ICBmbG9hdCB2YWx1ZSgpOwotICAgIAotICAgIHZvaWQgc2V0VmFsdWUoZmxvYXQpOwotCi0gICAg
U3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLQotICAgIGZsb2F0IG1pblZh
bHVlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWluVmFsdWUpOyB9Ci0g
ICAgZmxvYXQgbWF4VmFsdWUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV9t
YXhWYWx1ZSk7IH0KLSAgICBmbG9hdCBkZWZhdWx0VmFsdWUoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4obV9kZWZhdWx0VmFsdWUpOyB9Ci0gICAgdW5zaWduZWQgdW5pdHMoKSBj
b25zdCB7IHJldHVybiBtX3VuaXRzOyB9Ci0KLSAgICAvLyBWYWx1ZSBzbW9vdGhpbmc6Ci0KLSAg
ICAvLyBXaGVuIGEgbmV3IHZhbHVlIGlzIHNldCB3aXRoIHNldFZhbHVlKCksIGluIG91ciBpbnRl
cm5hbCB1c2Ugb2YgdGhlIHBhcmFtZXRlciB3ZSBkb24ndCBpbW1lZGlhdGVseSBqdW1wIHRvIGl0
LgotICAgIC8vIEluc3RlYWQgd2Ugc21vb3RobHkgYXBwcm9hY2ggdGhpcyB2YWx1ZSB0byBhdm9p
ZCBnbGl0Y2hpbmcuCi0gICAgZmxvYXQgc21vb3RoZWRWYWx1ZSgpOwotCi0gICAgLy8gU21vb3Ro
bHkgZXhwb25lbnRpYWxseSBhcHByb2FjaGVzIHRvIChkZS16aXBwZXJzKSB0aGUgZGVzaXJlZCB2
YWx1ZS4KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgc21vb3RoZWQgdmFsdWUgaGFzIGFscmVhZHkg
c25hcHBlZCBleGFjdGx5IHRvIHZhbHVlLgotICAgIGJvb2wgc21vb3RoKCk7Ci0KLSAgICB2b2lk
IHJlc2V0U21vb3RoZWRWYWx1ZSgpIHsgbV9zbW9vdGhlZFZhbHVlID0gbV92YWx1ZTsgfQotICAg
IHZvaWQgc2V0U21vb3RoaW5nQ29uc3RhbnQoZG91YmxlIGspIHsgbV9zbW9vdGhpbmdDb25zdGFu
dCA9IGs7IH0KLQotICAgIC8vIFBhcmFtZXRlciBhdXRvbWF0aW9uLiAgICAKLSAgICB2b2lkIHNl
dFZhbHVlQXRUaW1lKGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1lKSB7IG1fdGltZWxpbmUuc2V0VmFs
dWVBdFRpbWUodmFsdWUsIHRpbWUpOyB9Ci0gICAgdm9pZCBsaW5lYXJSYW1wVG9WYWx1ZUF0VGlt
ZShmbG9hdCB2YWx1ZSwgZmxvYXQgdGltZSkgeyBtX3RpbWVsaW5lLmxpbmVhclJhbXBUb1ZhbHVl
QXRUaW1lKHZhbHVlLCB0aW1lKTsgfQotICAgIHZvaWQgZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0
VGltZShmbG9hdCB2YWx1ZSwgZmxvYXQgdGltZSkgeyBtX3RpbWVsaW5lLmV4cG9uZW50aWFsUmFt
cFRvVmFsdWVBdFRpbWUodmFsdWUsIHRpbWUpOyB9Ci0gICAgdm9pZCBzZXRUYXJnZXRWYWx1ZUF0
VGltZShmbG9hdCB0YXJnZXRWYWx1ZSwgZmxvYXQgdGltZSwgZmxvYXQgdGltZUNvbnN0YW50KSB7
IG1fdGltZWxpbmUuc2V0VGFyZ2V0VmFsdWVBdFRpbWUodGFyZ2V0VmFsdWUsIHRpbWUsIHRpbWVD
b25zdGFudCk7IH0KLSAgICB2b2lkIHNldFZhbHVlQ3VydmVBdFRpbWUoRmxvYXQzMkFycmF5KiBj
dXJ2ZSwgZmxvYXQgdGltZSwgZmxvYXQgZHVyYXRpb24pIHsgbV90aW1lbGluZS5zZXRWYWx1ZUN1
cnZlQXRUaW1lKGN1cnZlLCB0aW1lLCBkdXJhdGlvbik7IH0KLSAgICB2b2lkIGNhbmNlbFNjaGVk
dWxlZFZhbHVlcyhmbG9hdCBzdGFydFRpbWUpIHsgbV90aW1lbGluZS5jYW5jZWxTY2hlZHVsZWRW
YWx1ZXMoc3RhcnRUaW1lKTsgfQotCi0gICAgYm9vbCBoYXNUaW1lbGluZVZhbHVlcygpIHsgcmV0
dXJuIG1fdGltZWxpbmUuaGFzVmFsdWVzKCk7IH0KLSAgICAKLSAgICAvLyBDYWxjdWxhdGVzIG51
bWJlck9mVmFsdWVzIHBhcmFtZXRlciB2YWx1ZXMgc3RhcnRpbmcgYXQgdGhlIGNvbnRleHQncyBj
dXJyZW50IHRpbWUuCi0gICAgLy8gTXVzdCBiZSBjYWxsZWQgaW4gdGhlIGNvbnRleHQncyByZW5k
ZXIgdGhyZWFkLgotICAgIHZvaWQgY2FsY3VsYXRlU2FtcGxlQWNjdXJhdGVWYWx1ZXMoZmxvYXQq
IHZhbHVlcywgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMpOwotCi1wcml2YXRlOgotICAgIFJlZlB0
cjxBdWRpb0NvbnRleHQ+IG1fY29udGV4dDsKLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIGRvdWJs
ZSBtX3ZhbHVlOwotICAgIGRvdWJsZSBtX2RlZmF1bHRWYWx1ZTsKLSAgICBkb3VibGUgbV9taW5W
YWx1ZTsKLSAgICBkb3VibGUgbV9tYXhWYWx1ZTsKLSAgICB1bnNpZ25lZCBtX3VuaXRzOwotCi0g
ICAgLy8gU21vb3RoaW5nIChkZS16aXBwZXJpbmcpCi0gICAgZG91YmxlIG1fc21vb3RoZWRWYWx1
ZTsKLSAgICBkb3VibGUgbV9zbW9vdGhpbmdDb25zdGFudDsKLSAgICAKLSAgICBBdWRpb1BhcmFt
VGltZWxpbmUgbV90aW1lbGluZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEF1ZGlvUGFyYW1faApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Q
YXJhbS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJh
bS5pZGwJKHJldmlzaW9uIDExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
UGFyYW0uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgd2ViYXVk
aW8gewotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTwotICAg
IF0gQXVkaW9QYXJhbSB7Ci0gICAgICAgIGF0dHJpYnV0ZSBmbG9hdCB2YWx1ZTsKLSAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0IG1pblZhbHVlOwotICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgZmxvYXQgbWF4VmFsdWU7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBmbG9hdCBk
ZWZhdWx0VmFsdWU7Ci0KLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBuYW1l
OwotCi0gICAgICAgIC8vIEZJWE1FOiBDb3VsZCBkZWZpbmUgdW5pdHMgY29uc3RhbnRzIGhlcmUg
KHNlY29uZHMsIGRlY2liZWxzLCBjZW50cywgZXRjLikuLi4KLSAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIHVuc2lnbmVkIHNob3J0IHVuaXRzOwotCi0gICAgICAgIC8vIFBhcmFtZXRlciBhdXRv
bWF0aW9uLgotICAgICAgICB2b2lkIHNldFZhbHVlQXRUaW1lKGluIGZsb2F0IHZhbHVlLCBpbiBm
bG9hdCB0aW1lKTsKLSAgICAgICAgdm9pZCBsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZShpbiBmbG9h
dCB2YWx1ZSwgaW4gZmxvYXQgdGltZSk7Ci0gICAgICAgIHZvaWQgZXhwb25lbnRpYWxSYW1wVG9W
YWx1ZUF0VGltZShpbiBmbG9hdCB2YWx1ZSwgaW4gZmxvYXQgdGltZSk7Ci0KLSAgICAgICAgLy8g
RXhwb25lbnRpYWxseSBhcHByb2FjaCB0aGUgdGFyZ2V0IHZhbHVlIHdpdGggYSByYXRlIGhhdmlu
ZyB0aGUgZ2l2ZW4gdGltZSBjb25zdGFudC4KLSAgICAgICAgdm9pZCBzZXRUYXJnZXRWYWx1ZUF0
VGltZShpbiBmbG9hdCB0YXJnZXRWYWx1ZSwgaW4gZmxvYXQgdGltZSwgaW4gZmxvYXQgdGltZUNv
bnN0YW50KTsKLQotICAgICAgICAvLyBTZXRzIGFuIGFycmF5IG9mIGFyYml0cmFyeSBwYXJhbWV0
ZXIgdmFsdWVzIHN0YXJ0aW5nIGF0IHRpbWUgZm9yIHRoZSBnaXZlbiBkdXJhdGlvbi4KLSAgICAg
ICAgLy8gVGhlIG51bWJlciBvZiB2YWx1ZXMgd2lsbCBiZSBzY2FsZWQgdG8gZml0IGludG8gdGhl
IGRlc2lyZWQgZHVyYXRpb24uCi0gICAgICAgIHZvaWQgc2V0VmFsdWVDdXJ2ZUF0VGltZShpbiBG
bG9hdDMyQXJyYXkgdmFsdWVzLCBpbiBmbG9hdCB0aW1lLCBpbiBmbG9hdCBkdXJhdGlvbik7Ci0K
LSAgICAgICAgLy8gQ2FuY2VscyBhbGwgc2NoZWR1bGVkIHBhcmFtZXRlciBjaGFuZ2VzIHdpdGgg
dGltZXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHN0YXJ0VGltZS4KLSAgICAgICAgdm9pZCBj
YW5jZWxTY2hlZHVsZWRWYWx1ZXMoaW4gZmxvYXQgc3RhcnRUaW1lKTsKLSAgICB9OwotfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3BwCShy
ZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtVGlt
ZWxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM2OSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIkF1ZGlv
UGFyYW1UaW1lbGluZS5oIgotCi0jaW5jbHVkZSAiQXVkaW9VdGlsaXRpZXMuaCIKLSNpbmNsdWRl
ICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi12b2lkIEF1ZGlvUGFyYW1UaW1lbGluZTo6c2V0VmFsdWVBdFRpbWUoZmxvYXQgdmFs
dWUsIGZsb2F0IHRpbWUpCi17Ci0gICAgaW5zZXJ0RXZlbnQoUGFyYW1FdmVudChQYXJhbUV2ZW50
OjpTZXRWYWx1ZSwgdmFsdWUsIHRpbWUsIDAsIDAsIDApKTsKLX0KLQotdm9pZCBBdWRpb1BhcmFt
VGltZWxpbmU6OmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1l
KQotewotICAgIGluc2VydEV2ZW50KFBhcmFtRXZlbnQoUGFyYW1FdmVudDo6TGluZWFyUmFtcFRv
VmFsdWUsIHZhbHVlLCB0aW1lLCAwLCAwLCAwKSk7Ci19Ci0KLXZvaWQgQXVkaW9QYXJhbVRpbWVs
aW5lOjpleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1l
KQotewotICAgIGluc2VydEV2ZW50KFBhcmFtRXZlbnQoUGFyYW1FdmVudDo6RXhwb25lbnRpYWxS
YW1wVG9WYWx1ZSwgdmFsdWUsIHRpbWUsIDAsIDAsIDApKTsKLX0KLQotdm9pZCBBdWRpb1BhcmFt
VGltZWxpbmU6OnNldFRhcmdldFZhbHVlQXRUaW1lKGZsb2F0IHRhcmdldFZhbHVlLCBmbG9hdCB0
aW1lLCBmbG9hdCB0aW1lQ29uc3RhbnQpCi17Ci0gICAgaW5zZXJ0RXZlbnQoUGFyYW1FdmVudChQ
YXJhbUV2ZW50OjpTZXRUYXJnZXRWYWx1ZSwgdGFyZ2V0VmFsdWUsIHRpbWUsIHRpbWVDb25zdGFu
dCwgMCwgMCkpOwotfQotCi12b2lkIEF1ZGlvUGFyYW1UaW1lbGluZTo6c2V0VmFsdWVDdXJ2ZUF0
VGltZShGbG9hdDMyQXJyYXkqIGN1cnZlLCBmbG9hdCB0aW1lLCBmbG9hdCBkdXJhdGlvbikKLXsK
LSAgICBpbnNlcnRFdmVudChQYXJhbUV2ZW50KFBhcmFtRXZlbnQ6OlNldFZhbHVlQ3VydmUsIDAs
IHRpbWUsIDAsIGR1cmF0aW9uLCBjdXJ2ZSkpOwotfQotCi1zdGF0aWMgYm9vbCBpc1ZhbGlkTnVt
YmVyKGZsb2F0IHgpCi17Ci0gICAgcmV0dXJuICFpc25hbih4KSAmJiAhaXNpbmYoeCk7Ci19Ci0K
LXZvaWQgQXVkaW9QYXJhbVRpbWVsaW5lOjppbnNlcnRFdmVudChjb25zdCBQYXJhbUV2ZW50JiBl
dmVudCkKLXsKLSAgICAvLyBTYW5pdHkgY2hlY2sgdGhlIGV2ZW50LiBCZSBzdXBlciBjYXJlZnVs
IHdlJ3JlIG5vdCBnZXR0aW5nIGluZmVjdGVkIHdpdGggTmFOIG9yIEluZi4KLSAgICBib29sIGlz
VmFsaWQgPSBldmVudC50eXBlKCkgPCBQYXJhbUV2ZW50OjpMYXN0VHlwZQotICAgICAgICAmJiBp
c1ZhbGlkTnVtYmVyKGV2ZW50LnZhbHVlKCkpCi0gICAgICAgICYmIGlzVmFsaWROdW1iZXIoZXZl
bnQudGltZSgpKQotICAgICAgICAmJiBpc1ZhbGlkTnVtYmVyKGV2ZW50LnRpbWVDb25zdGFudCgp
KQotICAgICAgICAmJiBpc1ZhbGlkTnVtYmVyKGV2ZW50LmR1cmF0aW9uKCkpCi0gICAgICAgICYm
IGV2ZW50LmR1cmF0aW9uKCkgPj0gMDsKLQotICAgIEFTU0VSVChpc1ZhbGlkKTsKLSAgICBpZiAo
IWlzVmFsaWQpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fZXZlbnRzTG9jayk7Ci0gICAgCi0gICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgZmxvYXQg
aW5zZXJ0VGltZSA9IGV2ZW50LnRpbWUoKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbV9ldmVudHMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgLy8gT3ZlcndyaXRlIHNhbWUgZXZlbnQgdHlwZSBhbmQg
dGltZS4KLSAgICAgICAgaWYgKG1fZXZlbnRzW2ldLnRpbWUoKSA9PSBpbnNlcnRUaW1lICYmIG1f
ZXZlbnRzW2ldLnR5cGUoKSA9PSBldmVudC50eXBlKCkpIHsKLSAgICAgICAgICAgIG1fZXZlbnRz
W2ldID0gZXZlbnQ7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAobV9ldmVudHNbaV0udGltZSgpID4gaW5zZXJ0VGltZSkKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgIH0KLQotICAgIG1fZXZlbnRzLmluc2VydChpLCBldmVudCk7Ci19Ci0KLXZvaWQgQXVkaW9Q
YXJhbVRpbWVsaW5lOjpjYW5jZWxTY2hlZHVsZWRWYWx1ZXMoZmxvYXQgc3RhcnRUaW1lKQotewot
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50c0xvY2spOwotCi0gICAgLy8gUmVtb3ZlIGFs
bCBldmVudHMgc3RhcnRpbmcgYXQgc3RhcnRUaW1lLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2V2ZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9ldmVudHNbaV0udGlt
ZSgpID49IHN0YXJ0VGltZSkgewotICAgICAgICAgICAgbV9ldmVudHMucmVtb3ZlKGksIG1fZXZl
bnRzLnNpemUoKSAtIGkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLWZsb2F0IEF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVGb3JDb250ZXh0VGltZShBdWRpb0Nv
bnRleHQqIGNvbnRleHQsIGZsb2F0IGRlZmF1bHRWYWx1ZSwgYm9vbCYgaGFzVmFsdWUpCi17Ci0g
ICAgQVNTRVJUKGNvbnRleHQpOwotCi0gICAgaWYgKCFjb250ZXh0IHx8ICFtX2V2ZW50cy5zaXpl
KCkgfHwgY29udGV4dC0+Y3VycmVudFRpbWUoKSA8IG1fZXZlbnRzWzBdLnRpbWUoKSkgewotICAg
ICAgICBoYXNWYWx1ZSA9IGZhbHNlOwotICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotICAg
IH0KLQotICAgIC8vIEFzayBmb3IganVzdCBhIHNpbmdsZSB2YWx1ZS4KLSAgICBmbG9hdCB2YWx1
ZTsKLSAgICBmbG9hdCBzYW1wbGVSYXRlID0gY29udGV4dC0+c2FtcGxlUmF0ZSgpOwotICAgIGZs
b2F0IHN0YXJ0VGltZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29udGV4dC0+Y3VycmVudFRp
bWUoKSk7Ci0gICAgZmxvYXQgZW5kVGltZSA9IHN0YXJ0VGltZSArIDEuMWYgLyBzYW1wbGVSYXRl
OyAvLyB0aW1lIGp1c3QgYmV5b25kIG9uZSBzYW1wbGUtZnJhbWUKLSAgICBmbG9hdCBjb250cm9s
UmF0ZSA9IHNhbXBsZVJhdGUgLyBBdWRpb05vZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXM7IC8v
IG9uZSBwYXJhbWV0ZXIgY2hhbmdlIHBlciByZW5kZXIgcXVhbnR1bQotICAgIHZhbHVlID0gdmFs
dWVzRm9yVGltZVJhbmdlKHN0YXJ0VGltZSwgZW5kVGltZSwgZGVmYXVsdFZhbHVlLCAmdmFsdWUs
IDEsIHNhbXBsZVJhdGUsIGNvbnRyb2xSYXRlKTsKLQotICAgIGhhc1ZhbHVlID0gdHJ1ZTsKLSAg
ICByZXR1cm4gdmFsdWU7Ci19Ci0KLWZsb2F0IEF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVzRm9y
VGltZVJhbmdlKGZsb2F0IHN0YXJ0VGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZsb2F0IGVuZFRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmbG9hdCBkZWZhdWx0VmFsdWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCogdmFsdWVzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBzYW1w
bGVSYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxv
YXQgY29udHJvbFJhdGUpCi17Ci0gICAgLy8gV2UgY2FuJ3QgY29udGVuZCB0aGUgbG9jayBpbiB0
aGUgcmVhbHRpbWUgYXVkaW8gdGhyZWFkLgotICAgIGlmICghbV9ldmVudHNMb2NrLnRyeUxvY2so
KSkgewotICAgICAgICBpZiAodmFsdWVzKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtYmVyT2ZWYWx1ZXM7ICsraSkKLSAgICAgICAgICAgICAgICB2YWx1ZXNbaV0g
PSBkZWZhdWx0VmFsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsK
LSAgICB9Ci0KLSAgICBmbG9hdCB2YWx1ZSA9IHZhbHVlc0ZvclRpbWVSYW5nZUltcGwoc3RhcnRU
aW1lLCBlbmRUaW1lLCBkZWZhdWx0VmFsdWUsIHZhbHVlcywgbnVtYmVyT2ZWYWx1ZXMsIHNhbXBs
ZVJhdGUsIGNvbnRyb2xSYXRlKTsKLSAgICBtX2V2ZW50c0xvY2sudW5sb2NrKCk7Ci0KLSAgICBy
ZXR1cm4gdmFsdWU7Ci19Ci0KLWZsb2F0IEF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVzRm9yVGlt
ZVJhbmdlSW1wbChmbG9hdCBzdGFydFRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZW5kVGltZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBkZWZhdWx0VmFsdWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIHZhbHVlcywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZlZhbHVlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbG9hdCBzYW1wbGVSYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGNvbnRyb2xSYXRlKQotewotICAgIEFTU0VSVCh2
YWx1ZXMpOwotICAgIGlmICghdmFsdWVzKQotICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwot
Ci0gICAgLy8gUmV0dXJuIGRlZmF1bHQgdmFsdWUgaWYgdGhlcmUgYXJlIG5vIGV2ZW50cyBtYXRj
aGluZyB0aGUgZGVzaXJlZCB0aW1lIHJhbmdlLgotICAgIEFTU0VSVChtX2V2ZW50cy5zaXplKCkp
OwotICAgIGlmICghbV9ldmVudHMuc2l6ZSgpIHx8IGVuZFRpbWUgPD0gbV9ldmVudHNbMF0udGlt
ZSgpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZlZhbHVlczsg
KytpKQotICAgICAgICAgICAgdmFsdWVzW2ldID0gZGVmYXVsdFZhbHVlOwotICAgICAgICByZXR1
cm4gZGVmYXVsdFZhbHVlOwotICAgIH0KLQotICAgIC8vIE1haW50YWluIGEgcnVubmluZyB0aW1l
IGFuZCBpbmRleCBmb3Igd3JpdGluZyB0aGUgdmFsdWVzIGJ1ZmZlci4KLSAgICBmbG9hdCBjdXJy
ZW50VGltZSA9IHN0YXJ0VGltZTsKLSAgICB1bnNpZ25lZCB3cml0ZUluZGV4ID0gMDsKLQotICAg
IC8vIElmIGZpcnN0IGV2ZW50IGlzIGFmdGVyIHN0YXJ0VGltZSB0aGVuIGZpbGwgaW5pdGlhbCBw
YXJ0IG9mIHZhbHVlcyBidWZmZXIgd2l0aCBkZWZhdWx0VmFsdWUKLSAgICAvLyB1bnRpbCB3ZSBy
ZWFjaCB0aGUgZmlyc3QgZXZlbnQgdGltZS4KLSAgICBmbG9hdCBmaXJzdEV2ZW50VGltZSA9IG1f
ZXZlbnRzWzBdLnRpbWUoKTsKLSAgICBpZiAoZmlyc3RFdmVudFRpbWUgPiBzdGFydFRpbWUpIHsK
LSAgICAgICAgZmxvYXQgZmlsbFRvVGltZSA9IG1pbihlbmRUaW1lLCBmaXJzdEV2ZW50VGltZSk7
Ci0gICAgICAgIHVuc2lnbmVkIGZpbGxUb0ZyYW1lID0gQXVkaW9VdGlsaXRpZXM6OnRpbWVUb1Nh
bXBsZUZyYW1lKGZpbGxUb1RpbWUgLSBzdGFydFRpbWUsIHNhbXBsZVJhdGUpOwotICAgICAgICBm
aWxsVG9GcmFtZSA9IG1pbihmaWxsVG9GcmFtZSwgbnVtYmVyT2ZWYWx1ZXMpOwotICAgICAgICBm
b3IgKDsgd3JpdGVJbmRleCA8IGZpbGxUb0ZyYW1lOyArK3dyaXRlSW5kZXgpCi0gICAgICAgICAg
ICB2YWx1ZXNbd3JpdGVJbmRleF0gPSBkZWZhdWx0VmFsdWU7Ci0KLSAgICAgICAgY3VycmVudFRp
bWUgPSBmaWxsVG9UaW1lOwotICAgIH0KLQotICAgIGZsb2F0IHZhbHVlID0gZGVmYXVsdFZhbHVl
OwotCi0gICAgLy8gR28gdGhyb3VnaCBlYWNoIGV2ZW50IGFuZCByZW5kZXIgdGhlIHZhbHVlIGJ1
ZmZlciB3aGVyZSB0aGUgdGltZXMgb3ZlcmxhcCwKLSAgICAvLyBzdG9wcGluZyB3aGVuIHdlJ3Zl
IHJlbmRlcmVkIGFsbCB0aGUgcmVxdWVzdGVkIHZhbHVlcy4KLSAgICAvLyBGSVhNRTogY291bGQg
dHJ5IHRvIG9wdGltaXplIGJ5IGF2b2lkaW5nIGhhdmluZyB0byBpdGVyYXRlIHN0YXJ0aW5nIGZy
b20gdGhlIHZlcnkgZmlyc3QgZXZlbnQKLSAgICAvLyBhbmQga2VlcGluZyB0cmFjayBvZiBhICJj
dXJyZW50IiBldmVudCBpbmRleC4KLSAgICBpbnQgbiA9IG1fZXZlbnRzLnNpemUoKTsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IG4gJiYgd3JpdGVJbmRleCA8IG51bWJlck9mVmFsdWVzOyArK2kp
IHsKLSAgICAgICAgUGFyYW1FdmVudCYgZXZlbnQgPSBtX2V2ZW50c1tpXTsKLSAgICAgICAgUGFy
YW1FdmVudCogbmV4dEV2ZW50ID0gaSA8IG4gLSAxID8gJihtX2V2ZW50c1tpICsgMV0pIDogMDsK
LQotICAgICAgICAvLyBXYWl0IHVudGlsIHdlIGdldCBhIG1vcmUgcmVjZW50IGV2ZW50LgotICAg
ICAgICBpZiAobmV4dEV2ZW50ICYmIG5leHRFdmVudC0+dGltZSgpIDwgY3VycmVudFRpbWUpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmbG9hdCB2YWx1ZTEgPSBldmVudC52YWx1
ZSgpOwotICAgICAgICBmbG9hdCB0aW1lMSA9IGV2ZW50LnRpbWUoKTsKLSAgICAgICAgZmxvYXQg
dmFsdWUyID0gbmV4dEV2ZW50ID8gbmV4dEV2ZW50LT52YWx1ZSgpIDogdmFsdWUxOwotICAgICAg
ICBmbG9hdCB0aW1lMiA9IG5leHRFdmVudCA/IG5leHRFdmVudC0+dGltZSgpIDogZW5kVGltZSAr
IDE7Ci0KLSAgICAgICAgZmxvYXQgZGVsdGFUaW1lID0gdGltZTIgLSB0aW1lMTsKLSAgICAgICAg
ZmxvYXQgayA9IGRlbHRhVGltZSA+IDAgPyAxIC8gZGVsdGFUaW1lIDogMDsKLSAgICAgICAgZmxv
YXQgc2FtcGxlRnJhbWVUaW1lSW5jciA9IDEgLyBzYW1wbGVSYXRlOwotCi0gICAgICAgIGZsb2F0
IGZpbGxUb1RpbWUgPSBtaW4oZW5kVGltZSwgdGltZTIpOwotICAgICAgICB1bnNpZ25lZCBmaWxs
VG9GcmFtZSA9IEF1ZGlvVXRpbGl0aWVzOjp0aW1lVG9TYW1wbGVGcmFtZShmaWxsVG9UaW1lIC0g
c3RhcnRUaW1lLCBzYW1wbGVSYXRlKTsKLSAgICAgICAgZmlsbFRvRnJhbWUgPSBtaW4oZmlsbFRv
RnJhbWUsIG51bWJlck9mVmFsdWVzKTsKLQotICAgICAgICBQYXJhbUV2ZW50OjpUeXBlIG5leHRF
dmVudFR5cGUgPSBuZXh0RXZlbnQgPyBzdGF0aWNfY2FzdDxQYXJhbUV2ZW50OjpUeXBlPihuZXh0
RXZlbnQtPnR5cGUoKSkgOiBQYXJhbUV2ZW50OjpMYXN0VHlwZSAvKiB1bmtub3duICovOwotCi0g
ICAgICAgIC8vIEZpcnN0IGhhbmRsZSBsaW5lYXIgYW5kIGV4cG9uZW50aWFsIHJhbXBzIHdoaWNo
IHJlcXVpcmUgbG9va2luZyBhaGVhZCB0byB0aGUgbmV4dCBldmVudC4KLSAgICAgICAgaWYgKG5l
eHRFdmVudFR5cGUgPT0gUGFyYW1FdmVudDo6TGluZWFyUmFtcFRvVmFsdWUpIHsKLSAgICAgICAg
ICAgIGZvciAoOyB3cml0ZUluZGV4IDwgZmlsbFRvRnJhbWU7ICsrd3JpdGVJbmRleCkgewotICAg
ICAgICAgICAgICAgIGZsb2F0IHggPSAoY3VycmVudFRpbWUgLSB0aW1lMSkgKiBrOwotICAgICAg
ICAgICAgICAgIHZhbHVlID0gKDEgLSB4KSAqIHZhbHVlMSArIHggKiB2YWx1ZTI7Ci0gICAgICAg
ICAgICAgICAgdmFsdWVzW3dyaXRlSW5kZXhdID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgY3Vy
cmVudFRpbWUgKz0gc2FtcGxlRnJhbWVUaW1lSW5jcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIGlmIChuZXh0RXZlbnRUeXBlID09IFBhcmFtRXZlbnQ6OkV4cG9uZW50aWFsUmFtcFRv
VmFsdWUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZTEgPD0gMCB8fCB2YWx1ZTIgPD0gMCkgewot
ICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBuZWdhdGl2ZSB2YWx1ZXMgZXJyb3IgY2FzZSBieSBw
cm9wYWdhdGluZyBwcmV2aW91cyB2YWx1ZS4KLSAgICAgICAgICAgICAgICBmb3IgKDsgd3JpdGVJ
bmRleCA8IGZpbGxUb0ZyYW1lOyArK3dyaXRlSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIHZh
bHVlc1t3cml0ZUluZGV4XSA9IHZhbHVlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBmbG9hdCBudW1TYW1wbGVGcmFtZXMgPSBkZWx0YVRpbWUgKiBzYW1wbGVSYXRlOwot
ICAgICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBnb2VzIGV4cG9uZW50aWFsbHkgZnJvbSB2YWx1
ZTEgdG8gdmFsdWUyIGluIGEgZHVyYXRpb24gb2YgZGVsdGFUaW1lIHNlY29uZHMgKGNvcnJlc3Bv
bmRpbmcgdG8gbnVtU2FtcGxlRnJhbWVzKS4KLSAgICAgICAgICAgICAgICAvLyBDb21wdXRlIHRo
ZSBwZXItc2FtcGxlIG11bHRpcGxpZXIuCi0gICAgICAgICAgICAgICAgZmxvYXQgbXVsdGlwbGll
ciA9IHBvd2YodmFsdWUyIC8gdmFsdWUxLCAxIC8gbnVtU2FtcGxlRnJhbWVzKTsKLQotICAgICAg
ICAgICAgICAgIC8vIFNldCB0aGUgc3RhcnRpbmcgdmFsdWUgb2YgdGhlIGV4cG9uZW50aWFsIHJh
bXAuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbXVsdGlwbGllciBeCi0gICAgICAgICAgICAgICAgLy8g
QXVkaW9VdGlsaXRpZXM6OnRpbWVUb1NhbXBsZUZyYW1lKGN1cnJlbnRUaW1lIC0gdGltZTEsIHNh
bXBsZVJhdGUpLCBidXQgaXMgbW9yZQotICAgICAgICAgICAgICAgIC8vIGFjY3VyYXRlLCBlc3Bl
Y2lhbGx5IGlmIG11bHRpcGxpZXIgaXMgY2xvc2UgdG8gMS4KLSAgICAgICAgICAgICAgICB2YWx1
ZSA9IHZhbHVlMSAqIHBvd2YodmFsdWUyIC8gdmFsdWUxLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBdWRpb1V0aWxpdGllczo6dGltZVRvU2FtcGxlRnJhbWUoY3VycmVu
dFRpbWUgLSB0aW1lMSwgc2FtcGxlUmF0ZSkgLyBudW1TYW1wbGVGcmFtZXMpOwotCi0gICAgICAg
ICAgICAgICAgZm9yICg7IHdyaXRlSW5kZXggPCBmaWxsVG9GcmFtZTsgKyt3cml0ZUluZGV4KSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlc1t3cml0ZUluZGV4XSA9IHZhbHVlOwotICAgICAg
ICAgICAgICAgICAgICB2YWx1ZSAqPSBtdWx0aXBsaWVyOwotICAgICAgICAgICAgICAgICAgICBj
dXJyZW50VGltZSArPSBzYW1wbGVGcmFtZVRpbWVJbmNyOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEhhbmRsZSBldmVu
dCB0eXBlcyBub3QgcmVxdWlyaW5nIGxvb2tpbmcgYWhlYWQgdG8gdGhlIG5leHQgZXZlbnQuCi0g
ICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBQYXJh
bUV2ZW50OjpTZXRWYWx1ZToKLSAgICAgICAgICAgIGNhc2UgUGFyYW1FdmVudDo6TGluZWFyUmFt
cFRvVmFsdWU6Ci0gICAgICAgICAgICBjYXNlIFBhcmFtRXZlbnQ6OkV4cG9uZW50aWFsUmFtcFRv
VmFsdWU6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGlt
ZSA9IGZpbGxUb1RpbWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gU2ltcGx5IHN0YXkgYXQg
YSBjb25zdGFudCB2YWx1ZS4KLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBldmVudC52YWx1
ZSgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKDsgd3JpdGVJbmRleCA8IGZpbGxUb0ZyYW1l
OyArK3dyaXRlSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbd3JpdGVJbmRl
eF0gPSB2YWx1ZTsKLQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGNhc2UgUGFyYW1FdmVudDo6U2V0VGFyZ2V0VmFsdWU6Ci0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGltZSA9IGZpbGxUb1Rp
bWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gRXhwb25lbnRpYWwgYXBwcm9hY2ggdG8gdGFy
Z2V0IHZhbHVlIHdpdGggZ2l2ZW4gdGltZSBjb25zdGFudC4KLSAgICAgICAgICAgICAgICAgICAg
ZmxvYXQgdGFyZ2V0VmFsdWUgPSBldmVudC52YWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICBm
bG9hdCB0aW1lQ29uc3RhbnQgPSBldmVudC50aW1lQ29uc3RhbnQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgZmxvYXQgZGlzY3JldGVUaW1lQ29uc3RhbnQgPSBzdGF0aWNfY2FzdDxmbG9hdD4oQXVk
aW9VdGlsaXRpZXM6OmRpc2NyZXRlVGltZUNvbnN0YW50Rm9yU2FtcGxlUmF0ZSh0aW1lQ29uc3Rh
bnQsIGNvbnRyb2xSYXRlKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICg7IHdyaXRlSW5k
ZXggPCBmaWxsVG9GcmFtZTsgKyt3cml0ZUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZXNbd3JpdGVJbmRleF0gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlICs9ICh0YXJnZXRWYWx1ZSAtIHZhbHVlKSAqIGRpc2NyZXRlVGltZUNvbnN0YW50OwotICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIFBhcmFtRXZlbnQ6OlNldFZhbHVlQ3VydmU6
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBGbG9hdDMyQXJyYXkqIGN1
cnZlID0gZXZlbnQuY3VydmUoKTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQqIGN1cnZlRGF0
YSA9IGN1cnZlID8gY3VydmUtPmRhdGEoKSA6IDA7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIG51bWJlck9mQ3VydmVQb2ludHMgPSBjdXJ2ZSA/IGN1cnZlLT5sZW5ndGgoKSA6IDA7Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gQ3VydmUgZXZlbnRzIGhhdmUgZHVyYXRpb24sIHNvIGRv
bid0IGp1c3QgdXNlIG5leHQgZXZlbnQgdGltZS4KLSAgICAgICAgICAgICAgICAgICAgZmxvYXQg
ZHVyYXRpb24gPSBldmVudC5kdXJhdGlvbigpOwotICAgICAgICAgICAgICAgICAgICBmbG9hdCBk
dXJhdGlvbkZyYW1lcyA9IGR1cmF0aW9uICogc2FtcGxlUmF0ZTsKLSAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgY3VydmVQb2ludHNQZXJGcmFtZSA9IHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXJP
ZkN1cnZlUG9pbnRzKSAvIGR1cmF0aW9uRnJhbWVzOwotCi0gICAgICAgICAgICAgICAgICAgIGlm
ICghY3VydmUgfHwgIWN1cnZlRGF0YSB8fCAhbnVtYmVyT2ZDdXJ2ZVBvaW50cyB8fCBkdXJhdGlv
biA8PSAwIHx8IHNhbXBsZVJhdGUgPD0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RXJyb3IgY29uZGl0aW9uIC0gc2ltcGx5IHByb3BhZ2F0ZSBwcmV2aW91cyB2YWx1ZS4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1lID0gZmlsbFRvVGltZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoOyB3cml0ZUluZGV4IDwgZmlsbFRvRnJhbWU7ICsrd3JpdGVJbmRl
eCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbd3JpdGVJbmRleF0gPSB2YWx1
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gU2F2ZSBvbGQgdmFsdWVzIGFuZCByZWNhbGN1bGF0
ZSBpbmZvcm1hdGlvbiBiYXNlZCBvbiB0aGUgY3VydmUncyBkdXJhdGlvbgotICAgICAgICAgICAg
ICAgICAgICAvLyBpbnN0ZWFkIG9mIHRoZSBuZXh0IGV2ZW50IHRpbWUuCi0gICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIG5leHRFdmVudEZpbGxUb0ZyYW1lID0gZmlsbFRvRnJhbWU7Ci0gICAg
ICAgICAgICAgICAgICAgIGZsb2F0IG5leHRFdmVudEZpbGxUb1RpbWUgPSBmaWxsVG9UaW1lOwot
ICAgICAgICAgICAgICAgICAgICBmaWxsVG9UaW1lID0gbWluKGVuZFRpbWUsIHRpbWUxICsgZHVy
YXRpb24pOwotICAgICAgICAgICAgICAgICAgICBmaWxsVG9GcmFtZSA9IEF1ZGlvVXRpbGl0aWVz
Ojp0aW1lVG9TYW1wbGVGcmFtZShmaWxsVG9UaW1lIC0gc3RhcnRUaW1lLCBzYW1wbGVSYXRlKTsK
LSAgICAgICAgICAgICAgICAgICAgZmlsbFRvRnJhbWUgPSBtaW4oZmlsbFRvRnJhbWUsIG51bWJl
ck9mVmFsdWVzKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBJbmRleCBpbnRvIHRoZSBjdXJ2
ZSBkYXRhIHVzaW5nIGEgZmxvYXRpbmctcG9pbnQgdmFsdWUuCi0gICAgICAgICAgICAgICAgICAg
IC8vIFdlJ3JlIHNjYWxpbmcgdGhlIG51bWJlciBvZiBjdXJ2ZSBwb2ludHMgYnkgdGhlIGR1cmF0
aW9uIChzZWUgY3VydmVQb2ludHNQZXJGcmFtZSkuCi0gICAgICAgICAgICAgICAgICAgIGZsb2F0
IGN1cnZlVmlydHVhbEluZGV4ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRpbWUxIDwg
Y3VycmVudFRpbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluZGV4IHNvbWV3aGVy
ZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBjdXJ2ZSBkYXRhLgotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRG9uJ3QgdXNlIHRpbWVUb1NhbXBsZUZyYW1lKCkgc2luY2Ugd2Ugd2FudCB0aGUgZXhh
Y3QgZmxvYXRpbmctcG9pbnQgZnJhbWUuCi0gICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBm
cmFtZU9mZnNldCA9IChjdXJyZW50VGltZSAtIHRpbWUxKSAqIHNhbXBsZVJhdGU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjdXJ2ZVZpcnR1YWxJbmRleCA9IGN1cnZlUG9pbnRzUGVyRnJhbWUg
KiBmcmFtZU9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIC8vIFJlbmRlciB0aGUgc3RyZXRjaGVkIGN1cnZlIGRhdGEgdXNpbmcgbmVhcmVzdCBuZWln
aGJvciBzYW1wbGluZy4KLSAgICAgICAgICAgICAgICAgICAgLy8gT3ZlcnNhbXBsZWQgY3VydmUg
ZGF0YSBjYW4gYmUgcHJvdmlkZWQgaWYgc21vb3RobmVzcyBpcyBkZXNpcmVkLgotICAgICAgICAg
ICAgICAgICAgICBmb3IgKDsgd3JpdGVJbmRleCA8IGZpbGxUb0ZyYW1lOyArK3dyaXRlSW5kZXgp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElkZWFsbHkgd2UnZCB1c2Ugcm91bmQoKSBm
cm9tIE1hdGhFeHRyYXMsIGJ1dCB3ZSdyZSBpbiBhIHRpZ2h0IGxvb3AgaGVyZQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYW5kIHdlJ3JlIHRyYWRpbmcgb2ZmIHByZWNpc2lvbiBmb3IgZXh0
cmEgc3BlZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjdXJ2ZUluZGV4ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDAuNSArIGN1cnZlVmlydHVhbEluZGV4KTsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgY3VydmVWaXJ0dWFsSW5kZXggKz0gY3VydmVQb2ludHNQZXJGcmFt
ZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQm91bmRzIGNoZWNrLgotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGN1cnZlSW5kZXggPCBudW1iZXJPZkN1cnZlUG9pbnRzKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY3VydmVEYXRhW2N1cnZlSW5kZXhdOwot
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbd3JpdGVJbmRleF0gPSB2YWx1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3Mg
YW55IHRpbWUgbGVmdCBhZnRlciB0aGUgZHVyYXRpb24gb2YgdGhpcyBldmVudCBhbmQgdGhlIHN0
YXJ0Ci0gICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBuZXh0LCB0aGVuIGp1c3QgcHJvcGFn
YXRlIHRoZSBsYXN0IHZhbHVlLgotICAgICAgICAgICAgICAgICAgICBmb3IgKDsgd3JpdGVJbmRl
eCA8IG5leHRFdmVudEZpbGxUb0ZyYW1lOyArK3dyaXRlSW5kZXgpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZXNbd3JpdGVJbmRleF0gPSB2YWx1ZTsKLQotICAgICAgICAgICAgICAgICAg
ICAvLyBSZS1hZGp1c3QgY3VycmVudCB0aW1lCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRU
aW1lID0gbmV4dEV2ZW50RmlsbFRvVGltZTsKLQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvLyBJZiB0aGVyZSdzIGFueSB0aW1lIGxlZnQgYWZ0ZXIgcHJvY2Vzc2luZyB0aGUgbGFzdCBl
dmVudCB0aGVuIGp1c3QgcHJvcGFnYXRlIHRoZSBsYXN0IHZhbHVlCi0gICAgLy8gdG8gdGhlIGVu
ZCBvZiB0aGUgdmFsdWVzIGJ1ZmZlci4KLSAgICBmb3IgKDsgd3JpdGVJbmRleCA8IG51bWJlck9m
VmFsdWVzOyArK3dyaXRlSW5kZXgpCi0gICAgICAgIHZhbHVlc1t3cml0ZUluZGV4XSA9IHZhbHVl
OwotCi0gICAgcmV0dXJuIHZhbHVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9QYXJhbVRpbWVsaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9QYXJhbVRpbWVsaW5lLmgJKHJldmlzaW9uIDExMTQzMykKKysrIFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEx
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBBdWRpb1BhcmFtVGltZWxpbmVfaAotI2RlZmluZSBBdWRpb1Bh
cmFtVGltZWxpbmVfaAotCi0jaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCi0jaW5jbHVkZSA8d3Rm
L0Zsb2F0MzJBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvUGFyYW1U
aW1lbGluZSB7Ci1wdWJsaWM6Ci0gICAgQXVkaW9QYXJhbVRpbWVsaW5lKCkKLSAgICAgICAgOiBt
X2N1cnJlbnRFdmVudEluZGV4KDApCi0gICAgICAgICwgbV92YWx1ZSgwKQotICAgIHsKLSAgICB9
Ci0KLSAgICB2b2lkIHNldFZhbHVlQXRUaW1lKGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1lKTsKLSAg
ICB2b2lkIGxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGZsb2F0IHZhbHVlLCBmbG9hdCB0aW1lKTsK
LSAgICB2b2lkIGV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoZmxvYXQgdmFsdWUsIGZsb2F0
IHRpbWUpOwotICAgIHZvaWQgc2V0VGFyZ2V0VmFsdWVBdFRpbWUoZmxvYXQgdGFyZ2V0VmFsdWUs
IGZsb2F0IHRpbWUsIGZsb2F0IHRpbWVDb25zdGFudCk7Ci0gICAgdm9pZCBzZXRWYWx1ZUN1cnZl
QXRUaW1lKEZsb2F0MzJBcnJheSogY3VydmUsIGZsb2F0IHRpbWUsIGZsb2F0IGR1cmF0aW9uKTsK
LSAgICB2b2lkIGNhbmNlbFNjaGVkdWxlZFZhbHVlcyhmbG9hdCBzdGFydFRpbWUpOwotCi0gICAg
Ly8gaGFzVmFsdWUgaXMgc2V0IHRvIHRydWUgaWYgYSB2YWxpZCB0aW1lbGluZSB2YWx1ZSBpcyBy
ZXR1cm5lZC4KLSAgICAvLyBvdGhlcndpc2UgZGVmYXVsdFZhbHVlIGlzIHJldHVybmVkLgotICAg
IGZsb2F0IHZhbHVlRm9yQ29udGV4dFRpbWUoQXVkaW9Db250ZXh0KiwgZmxvYXQgZGVmYXVsdFZh
bHVlLCBib29sJiBoYXNWYWx1ZSk7Ci0KLSAgICAvLyBHaXZlbiB0aGUgdGltZSByYW5nZSwgY2Fs
Y3VsYXRlcyBwYXJhbWV0ZXIgdmFsdWVzIGludG8gdGhlIHZhbHVlcyBidWZmZXIKLSAgICAvLyBh
bmQgcmV0dXJucyB0aGUgbGFzdCBwYXJhbWV0ZXIgdmFsdWUgY2FsY3VsYXRlZCBmb3IgInZhbHVl
cyIgb3IgdGhlIGRlZmF1bHRWYWx1ZSBpZiBub25lIHdlcmUgY2FsY3VsYXRlZC4KLSAgICAvLyBj
b250cm9sUmF0ZSBpcyB0aGUgcmF0ZSAobnVtYmVyIHBlciBzZWNvbmQpIGF0IHdoaWNoIHBhcmFt
ZXRlciB2YWx1ZXMgd2lsbCBiZSBjYWxjdWxhdGVkLgotICAgIC8vIEl0IHNob3VsZCBlcXVhbCBz
YW1wbGVSYXRlIGZvciBzYW1wbGUtYWNjdXJhdGUgcGFyYW1ldGVyIGNoYW5nZXMsIGFuZCBvdGhl
cndpc2Ugd2lsbCB1c3VhbGx5IG1hdGNoCi0gICAgLy8gdGhlIHJlbmRlciBxdWFudHVtIHNpemUg
c3VjaCB0aGF0IHRoZSBwYXJhbWV0ZXIgdmFsdWUgY2hhbmdlcyBvbmNlIHBlciByZW5kZXIgcXVh
bnR1bS4KLSAgICBmbG9hdCB2YWx1ZXNGb3JUaW1lUmFuZ2UoZmxvYXQgc3RhcnRUaW1lLCBmbG9h
dCBlbmRUaW1lLCBmbG9hdCBkZWZhdWx0VmFsdWUsIGZsb2F0KiB2YWx1ZXMsIHVuc2lnbmVkIG51
bWJlck9mVmFsdWVzLCBmbG9hdCBzYW1wbGVSYXRlLCBmbG9hdCBjb250cm9sUmF0ZSk7Ci0KLSAg
ICBib29sIGhhc1ZhbHVlcygpIHsgcmV0dXJuIG1fZXZlbnRzLnNpemUoKTsgfQotCi1wcml2YXRl
OgotICAgIGNsYXNzIFBhcmFtRXZlbnQgewotICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBUeXBl
IHsKLSAgICAgICAgICAgIFNldFZhbHVlLAotICAgICAgICAgICAgTGluZWFyUmFtcFRvVmFsdWUs
Ci0gICAgICAgICAgICBFeHBvbmVudGlhbFJhbXBUb1ZhbHVlLAotICAgICAgICAgICAgU2V0VGFy
Z2V0VmFsdWUsCi0gICAgICAgICAgICBTZXRWYWx1ZUN1cnZlLAotICAgICAgICAgICAgTGFzdFR5
cGUKLSAgICAgICAgfTsKLQotICAgICAgICBQYXJhbUV2ZW50KFR5cGUgdHlwZSwgZmxvYXQgdmFs
dWUsIGZsb2F0IHRpbWUsIGZsb2F0IHRpbWVDb25zdGFudCwgZmxvYXQgZHVyYXRpb24sIFBhc3NS
ZWZQdHI8RmxvYXQzMkFycmF5PiBjdXJ2ZSkKLSAgICAgICAgICAgIDogbV90eXBlKHR5cGUpCi0g
ICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCi0gICAgICAgICAgICAsIG1fdGltZSh0aW1lKQot
ICAgICAgICAgICAgLCBtX3RpbWVDb25zdGFudCh0aW1lQ29uc3RhbnQpCi0gICAgICAgICAgICAs
IG1fZHVyYXRpb24oZHVyYXRpb24pCi0gICAgICAgICAgICAsIG1fY3VydmUoY3VydmUpCi0gICAg
ICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHVuc2lnbmVkIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KLSAgICAgICAgZmxvYXQgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
OyB9Ci0gICAgICAgIGZsb2F0IHRpbWUoKSBjb25zdCB7IHJldHVybiBtX3RpbWU7IH0KLSAgICAg
ICAgZmxvYXQgdGltZUNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV90aW1lQ29uc3RhbnQ7IH0K
LSAgICAgICAgZmxvYXQgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9Ci0g
ICAgICAgIEZsb2F0MzJBcnJheSogY3VydmUoKSB7IHJldHVybiBtX2N1cnZlLmdldCgpOyB9Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICB1bnNpZ25lZCBtX3R5cGU7Ci0gICAgICAgIGZsb2F0IG1f
dmFsdWU7Ci0gICAgICAgIGZsb2F0IG1fdGltZTsKLSAgICAgICAgZmxvYXQgbV90aW1lQ29uc3Rh
bnQ7Ci0gICAgICAgIGZsb2F0IG1fZHVyYXRpb247Ci0gICAgICAgIFJlZlB0cjxGbG9hdDMyQXJy
YXk+IG1fY3VydmU7Ci0gICAgfTsKLQotICAgIHZvaWQgaW5zZXJ0RXZlbnQoY29uc3QgUGFyYW1F
dmVudCYpOwotICAgIGZsb2F0IHZhbHVlc0ZvclRpbWVSYW5nZUltcGwoZmxvYXQgc3RhcnRUaW1l
LCBmbG9hdCBlbmRUaW1lLCBmbG9hdCBkZWZhdWx0VmFsdWUsIGZsb2F0KiB2YWx1ZXMsIHVuc2ln
bmVkIG51bWJlck9mVmFsdWVzLCBmbG9hdCBzYW1wbGVSYXRlLCBmbG9hdCBjb250cm9sUmF0ZSk7
Ci0KLSAgICBWZWN0b3I8UGFyYW1FdmVudD4gbV9ldmVudHM7Ci0gICAgdW5zaWduZWQgbV9jdXJy
ZW50RXZlbnRJbmRleDsKLSAgICBmbG9hdCBtX3ZhbHVlOwotCi0gICAgTXV0ZXggbV9ldmVudHNM
b2NrOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQXVkaW9QYXJh
bVRpbWVsaW5lX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2lu
Z0V2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1By
b2Nlc3NpbmdFdmVudC5jcHAJKHJldmlzaW9uIDExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdF
Ql9BVURJTykKLQotI2luY2x1ZGUgIkF1ZGlvUHJvY2Vzc2luZ0V2ZW50LmgiCi0KLSNpbmNsdWRl
ICJBdWRpb0J1ZmZlci5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1QYXNzUmVmUHRyPEF1ZGlvUHJvY2Vzc2luZ0V2ZW50PiBBdWRpb1Byb2Nlc3Np
bmdFdmVudDo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvUHJvY2Vz
c2luZ0V2ZW50KTsKLX0KLQotUGFzc1JlZlB0cjxBdWRpb1Byb2Nlc3NpbmdFdmVudD4gQXVkaW9Q
cm9jZXNzaW5nRXZlbnQ6OmNyZWF0ZShQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBpbnB1dEJ1ZmZl
ciwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gb3V0cHV0QnVmZmVyKQotewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQXVkaW9Qcm9jZXNzaW5nRXZlbnQoaW5wdXRCdWZmZXIsIG91dHB1dEJ1ZmZl
cikpOwotfQotCi1BdWRpb1Byb2Nlc3NpbmdFdmVudDo6QXVkaW9Qcm9jZXNzaW5nRXZlbnQoKQot
ewotfQotCi1BdWRpb1Byb2Nlc3NpbmdFdmVudDo6QXVkaW9Qcm9jZXNzaW5nRXZlbnQoUGFzc1Jl
ZlB0cjxBdWRpb0J1ZmZlcj4gaW5wdXRCdWZmZXIsIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IG91
dHB1dEJ1ZmZlcikKLSAgICA6IEV2ZW50KGV2ZW50TmFtZXMoKS5hdWRpb3Byb2Nlc3NFdmVudCwg
dHJ1ZSwgZmFsc2UpCi0gICAgLCBtX2lucHV0QnVmZmVyKGlucHV0QnVmZmVyKQotICAgICwgbV9v
dXRwdXRCdWZmZXIob3V0cHV0QnVmZmVyKQotewotfQotCi1BdWRpb1Byb2Nlc3NpbmdFdmVudDo6
fkF1ZGlvUHJvY2Vzc2luZ0V2ZW50KCkKLXsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBBdWRp
b1Byb2Nlc3NpbmdFdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGV2
ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JBdWRpb1Byb2Nlc3NpbmdFdmVudDsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaAkocmV2aXNp
b24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5nRXZl
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBBdWRpb1Byb2Nlc3NpbmdFdmVudF9oCi0jZGVmaW5lIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50X2gK
LQotI2luY2x1ZGUgIkF1ZGlvQnVmZmVyLmgiCi0jaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb0J1ZmZlcjsKLSAgICAKLWNsYXNzIEF1ZGlvUHJvY2Vz
c2luZ0V2ZW50IDogcHVibGljIEV2ZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxBdWRpb1Byb2Nlc3NpbmdFdmVudD4gY3JlYXRlKCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
QXVkaW9Qcm9jZXNzaW5nRXZlbnQ+IGNyZWF0ZShQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiBpbnB1
dEJ1ZmZlciwgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gb3V0cHV0QnVmZmVyKTsKLSAgICAKLSAg
ICB2aXJ0dWFsIH5BdWRpb1Byb2Nlc3NpbmdFdmVudCgpOwotCi0gICAgQXVkaW9CdWZmZXIqIGlu
cHV0QnVmZmVyKCkgeyByZXR1cm4gbV9pbnB1dEJ1ZmZlci5nZXQoKTsgfQotICAgIEF1ZGlvQnVm
ZmVyKiBvdXRwdXRCdWZmZXIoKSB7IHJldHVybiBtX291dHB1dEJ1ZmZlci5nZXQoKTsgfQotCi0g
ICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKLQot
cHJpdmF0ZToKLSAgICBBdWRpb1Byb2Nlc3NpbmdFdmVudCgpOwotICAgIEF1ZGlvUHJvY2Vzc2lu
Z0V2ZW50KFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IGlucHV0QnVmZmVyLCBQYXNzUmVmUHRyPEF1
ZGlvQnVmZmVyPiBvdXRwdXRCdWZmZXIpOwotCi0gICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBtX2lu
cHV0QnVmZmVyOwotICAgIFJlZlB0cjxBdWRpb0J1ZmZlcj4gbV9vdXRwdXRCdWZmZXI7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBBdWRpb1Byb2Nlc3NpbmdFdmVu
dF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5n
RXZlbnQuaWRsCShyZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9B
dWRpb1Byb2Nlc3NpbmdFdmVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzMgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLW1vZHVsZSBhdWRpbyB7Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29u
ZGl0aW9uYWw9V0VCX0FVRElPLAotICAgICAgICBKU0dlbmVyYXRlVG9KU09iamVjdAotICAgIF0g
QXVkaW9Qcm9jZXNzaW5nRXZlbnQgOiBFdmVudCB7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBBdWRpb0J1ZmZlciBpbnB1dEJ1ZmZlcjsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1
ZGlvQnVmZmVyIG91dHB1dEJ1ZmZlcjsgCi0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvU291cmNlTm9kZS5oCShyZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb1NvdXJjZU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBBdWRpb1NvdXJjZU5vZGVfaAotI2RlZmluZSBBdWRpb1NvdXJj
ZU5vZGVfaAotCi0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgQXVkaW9Tb3VyY2VOb2RlIDogcHVibGljIEF1ZGlvTm9kZSB7Ci1wdWJsaWM6Ci0g
ICAgQXVkaW9Tb3VyY2VOb2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0
ZSkKLSAgICAgICAgOiBBdWRpb05vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkKLSAgICB7Ci0gICAg
fQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gMDsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gQXVkaW9Tb3VyY2VOb2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvU291cmNlTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9Tb3VyY2VOb2RlLmlkbAkocmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9Tb3VyY2VOb2RlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzNCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotbW9kdWxlIGF1ZGlvIHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRp
b25hbD1XRUJfQVVESU8KLSAgICBdIEF1ZGlvU291cmNlTm9kZSA6IEF1ZGlvTm9kZSB7Ci0gICAg
fTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmNw
cAkocmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRFNQ
S2VybmVsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTYgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0g
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRl
ICJCaXF1YWREU1BLZXJuZWwuaCIKLQotI2luY2x1ZGUgIkJpcXVhZFByb2Nlc3Nvci5oIgotI2lu
Y2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBGSVhNRTogQXMgYSBy
ZWN1cnNpdmUgbGluZWFyIGZpbHRlciwgZGVwZW5kaW5nIG9uIGl0cyBwYXJhbWV0ZXJzLCBhIGJp
cXVhZCBmaWx0ZXIgY2FuIGhhdmUKLS8vIGFuIGluZmluaXRlIHRhaWxUaW1lLiBJbiBwcmFjdGlj
ZSwgQmlxdWFkIGZpbHRlcnMgZG8gbm90IHVzdWFsbHkgKGV4Y2VwdCBmb3IgdmVyeSBoaWdoIHJl
c29uYW5jZSB2YWx1ZXMpIAotLy8gaGF2ZSBhIHRhaWxUaW1lIG9mIGxvbmdlciB0aGFuIGFwcHJv
eC4gMjAwbXMuIFRoaXMgdmFsdWUgY291bGQgcG9zc2libHkgYmUgY2FsY3VsYXRlZCBiYXNlZCBv
biB0aGUKLS8vIHNldHRpbmdzIG9mIHRoZSBCaXF1YWQuCi1zdGF0aWMgY29uc3QgZG91YmxlIE1h
eEJpcXVhZERlbGF5VGltZSA9IDAuMjsKLQotdm9pZCBCaXF1YWREU1BLZXJuZWw6OnVwZGF0ZUNv
ZWZmaWNpZW50c0lmTmVjZXNzYXJ5KGJvb2wgdXNlU21vb3RoaW5nLCBib29sIGZvcmNlVXBkYXRl
KQotewotICAgIGlmIChmb3JjZVVwZGF0ZSB8fCBiaXF1YWRQcm9jZXNzb3IoKS0+ZmlsdGVyQ29l
ZmZpY2llbnRzRGlydHkoKSkgewotICAgICAgICBkb3VibGUgdmFsdWUxOwotICAgICAgICBkb3Vi
bGUgdmFsdWUyOwotICAgICAgICBkb3VibGUgZ2FpbjsKLSAgICAgICAgCi0gICAgICAgIGlmICh1
c2VTbW9vdGhpbmcpIHsKLSAgICAgICAgICAgIHZhbHVlMSA9IGJpcXVhZFByb2Nlc3NvcigpLT5w
YXJhbWV0ZXIxKCktPnNtb290aGVkVmFsdWUoKTsKLSAgICAgICAgICAgIHZhbHVlMiA9IGJpcXVh
ZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIyKCktPnNtb290aGVkVmFsdWUoKTsKLSAgICAgICAgICAg
IGdhaW4gPSBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMygpLT5zbW9vdGhlZFZhbHVlKCk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2YWx1ZTEgPSBiaXF1YWRQcm9jZXNzb3Io
KS0+cGFyYW1ldGVyMSgpLT52YWx1ZSgpOwotICAgICAgICAgICAgdmFsdWUyID0gYmlxdWFkUHJv
Y2Vzc29yKCktPnBhcmFtZXRlcjIoKS0+dmFsdWUoKTsKLSAgICAgICAgICAgIGdhaW4gPSBiaXF1
YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMygpLT52YWx1ZSgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gQ29udmVydCBmcm9tIEhlcnR6IHRvIG5vcm1hbGl6ZWQgZnJlcXVlbmN5IDAgLT4gMS4K
LSAgICAgICAgZG91YmxlIG55cXVpc3QgPSB0aGlzLT5ueXF1aXN0KCk7Ci0gICAgICAgIGRvdWJs
ZSBub3JtYWxpemVkRnJlcXVlbmN5ID0gdmFsdWUxIC8gbnlxdWlzdDsKLQotICAgICAgICAvLyBD
b25maWd1cmUgdGhlIGJpcXVhZCB3aXRoIHRoZSBuZXcgZmlsdGVyIHBhcmFtZXRlcnMgZm9yIHRo
ZSBhcHByb3ByaWF0ZSB0eXBlIG9mIGZpbHRlci4KLSAgICAgICAgc3dpdGNoIChiaXF1YWRQcm9j
ZXNzb3IoKS0+dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQmlxdWFkUHJvY2Vzc29yOjpMb3dQYXNz
OgotICAgICAgICAgICAgbV9iaXF1YWQuc2V0TG93cGFzc1BhcmFtcyhub3JtYWxpemVkRnJlcXVl
bmN5LCB2YWx1ZTIpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBCaXF1YWRQ
cm9jZXNzb3I6OkhpZ2hQYXNzOgotICAgICAgICAgICAgbV9iaXF1YWQuc2V0SGlnaHBhc3NQYXJh
bXMobm9ybWFsaXplZEZyZXF1ZW5jeSwgdmFsdWUyKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgQmlxdWFkUHJvY2Vzc29yOjpCYW5kUGFzczoKLSAgICAgICAgICAgIG1fYmlx
dWFkLnNldEJhbmRwYXNzUGFyYW1zKG5vcm1hbGl6ZWRGcmVxdWVuY3ksIHZhbHVlMik7Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEJpcXVhZFByb2Nlc3Nvcjo6TG93U2hlbGY6
Ci0gICAgICAgICAgICBtX2JpcXVhZC5zZXRMb3dTaGVsZlBhcmFtcyhub3JtYWxpemVkRnJlcXVl
bmN5LCBnYWluKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQmlxdWFkUHJv
Y2Vzc29yOjpIaWdoU2hlbGY6Ci0gICAgICAgICAgICBtX2JpcXVhZC5zZXRIaWdoU2hlbGZQYXJh
bXMobm9ybWFsaXplZEZyZXF1ZW5jeSwgZ2Fpbik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICBjYXNlIEJpcXVhZFByb2Nlc3Nvcjo6UGVha2luZzoKLSAgICAgICAgICAgIG1fYmlxdWFk
LnNldFBlYWtpbmdQYXJhbXMobm9ybWFsaXplZEZyZXF1ZW5jeSwgdmFsdWUyLCBnYWluKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQmlxdWFkUHJvY2Vzc29yOjpOb3RjaDoK
LSAgICAgICAgICAgIG1fYmlxdWFkLnNldE5vdGNoUGFyYW1zKG5vcm1hbGl6ZWRGcmVxdWVuY3ks
IHZhbHVlMik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEJpcXVhZFByb2Nl
c3Nvcjo6QWxscGFzczoKLSAgICAgICAgICAgIG1fYmlxdWFkLnNldEFsbHBhc3NQYXJhbXMobm9y
bWFsaXplZEZyZXF1ZW5jeSwgdmFsdWUyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQotfQotCi12b2lkIEJpcXVhZERTUEtlcm5lbDo6cHJvY2Vzcyhjb25zdCBmbG9hdCog
c291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0g
ICAgQVNTRVJUKHNvdXJjZSAmJiBkZXN0aW5hdGlvbiAmJiBiaXF1YWRQcm9jZXNzb3IoKSk7Ci0g
ICAgCi0gICAgLy8gUmVjb21wdXRlIGZpbHRlciBjb2VmZmljaWVudHMgaWYgYW55IG9mIHRoZSBw
YXJhbWV0ZXJzIGhhdmUgY2hhbmdlZC4KLSAgICAvLyBGSVhNRTogYXMgYW4gb3B0aW1pemF0aW9u
LCBpbXBsZW1lbnQgYSB3YXkgdGhhdCBhIEJpcXVhZCBvYmplY3QgY2FuIHNpbXBseSBjb3B5IGl0
cyBpbnRlcm5hbCBmaWx0ZXIgY29lZmZpY2llbnRzIGZyb20gYW5vdGhlciBCaXF1YWQgb2JqZWN0
LgotICAgIC8vIFRoZW4gcmUtZmFjdG9yIHRoaXMgY29kZSB0byBvbmx5IHJ1biBmb3IgdGhlIGZp
cnN0IEJpcXVhZERTUEtlcm5lbCBvZiBlYWNoIEJpcXVhZFByb2Nlc3Nvci4KLQotICAgIHVwZGF0
ZUNvZWZmaWNpZW50c0lmTmVjZXNzYXJ5KHRydWUsIGZhbHNlKTsKLQotICAgIG1fYmlxdWFkLnBy
b2Nlc3Moc291cmNlLCBkZXN0aW5hdGlvbiwgZnJhbWVzVG9Qcm9jZXNzKTsKLX0KLQotdm9pZCBC
aXF1YWREU1BLZXJuZWw6OmdldEZyZXF1ZW5jeVJlc3BvbnNlKGludCBuRnJlcXVlbmNpZXMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIGZy
ZXF1ZW5jeUh6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZs
b2F0KiBtYWdSZXNwb25zZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmbG9hdCogcGhhc2VSZXNwb25zZSkKLXsKLSAgICBib29sIGlzR29vZCA9IG5GcmVxdWVu
Y2llcyA+IDAgJiYgZnJlcXVlbmN5SHogJiYgbWFnUmVzcG9uc2UgJiYgcGhhc2VSZXNwb25zZTsK
LSAgICBBU1NFUlQoaXNHb29kKTsKLSAgICBpZiAoIWlzR29vZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgVmVjdG9yPGZsb2F0PiBmcmVxdWVuY3kobkZyZXF1ZW5jaWVzKTsKLQotICAgIGRvdWJs
ZSBueXF1aXN0ID0gdGhpcy0+bnlxdWlzdCgpOwotCi0gICAgLy8gQ29udmVydCBmcm9tIGZyZXF1
ZW5jeSBpbiBIeiB0byBub3JtYWxpemVkIGZyZXF1ZW5jeSAoMCAtPiAxKSwKLSAgICAvLyB3aXRo
IDEgZXF1YWwgdG8gdGhlIE55cXVpc3QgZnJlcXVlbmN5LgotICAgIGZvciAoaW50IGsgPSAwOyBr
IDwgbkZyZXF1ZW5jaWVzOyArK2spCi0gICAgICAgIGZyZXF1ZW5jeVtrXSA9IG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoZnJlcXVlbmN5SHpba10gLyBueXF1aXN0KTsKLQotICAgIC8vIFdlIHdhbnQg
dG8gZ2V0IHRoZSBmaW5hbCB2YWx1ZXMgb2YgdGhlIGNvZWZmaWNpZW50cyBhbmQgY29tcHV0ZQot
ICAgIC8vIHRoZSByZXNwb25zZSBmcm9tIHRoYXQgaW5zdGVhZCBvZiBzb21lIGludGVybWVkaWF0
ZSBzbW9vdGhlZAotICAgIC8vIHNldC4gRm9yY2VmdWxseSB1cGRhdGUgdGhlIGNvZWZmaWNpZW50
cyBldmVuIGlmIHRoZXkgYXJlIG5vdAotICAgIC8vIGRpcnR5LgotCi0gICAgdXBkYXRlQ29lZmZp
Y2llbnRzSWZOZWNlc3NhcnkoZmFsc2UsIHRydWUpOwotCi0gICAgbV9iaXF1YWQuZ2V0RnJlcXVl
bmN5UmVzcG9uc2UobkZyZXF1ZW5jaWVzLCBmcmVxdWVuY3kuZGF0YSgpLCBtYWdSZXNwb25zZSwg
cGhhc2VSZXNwb25zZSk7Ci19Ci0KLWRvdWJsZSBCaXF1YWREU1BLZXJuZWw6OnRhaWxUaW1lKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gTWF4QmlxdWFkRGVsYXlUaW1lOwotfQotCi1kb3VibGUgQmlx
dWFkRFNQS2VybmVsOjpsYXRlbmN5VGltZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuaAkocmV2aXNpb24g
MTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQmlxdWFk
RFNQS2VybmVsX2gKLSNkZWZpbmUgQmlxdWFkRFNQS2VybmVsX2gKLQotI2luY2x1ZGUgIkF1ZGlv
RFNQS2VybmVsLmgiCi0jaW5jbHVkZSAiQmlxdWFkLmgiCi0jaW5jbHVkZSAiQmlxdWFkUHJvY2Vz
c29yLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQmlxdWFkUHJvY2Vzc29yOwot
Ci0vLyBCaXF1YWREU1BLZXJuZWwgaXMgYW4gQXVkaW9EU1BLZXJuZWwgYW5kIGlzIHJlc3BvbnNp
YmxlIGZvciBmaWx0ZXJpbmcgb25lIGNoYW5uZWwgb2YgYSBCaXF1YWRQcm9jZXNzb3IgdXNpbmcg
YSBCaXF1YWQgb2JqZWN0LgotCi1jbGFzcyBCaXF1YWREU1BLZXJuZWwgOiBwdWJsaWMgQXVkaW9E
U1BLZXJuZWwgewotcHVibGljOiAgCi0gICAgQmlxdWFkRFNQS2VybmVsKEJpcXVhZFByb2Nlc3Nv
ciogcHJvY2Vzc29yKQotICAgIDogQXVkaW9EU1BLZXJuZWwocHJvY2Vzc29yKQotICAgIHsKLSAg
ICB9Ci0gICAgCi0gICAgLy8gQXVkaW9EU1BLZXJuZWwKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vz
cyhjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdCwgc2l6ZV90IGZyYW1lc1RvUHJvY2Vz
cyk7Ci0gICAgdmlydHVhbCB2b2lkIHJlc2V0KCkgeyBtX2JpcXVhZC5yZXNldCgpOyB9Ci0KLSAg
ICAvLyBHZXQgdGhlIG1hZ25pdHVkZSBhbmQgcGhhc2UgcmVzcG9uc2Ugb2YgdGhlIGZpbHRlciBh
dCB0aGUgZ2l2ZW4KLSAgICAvLyBzZXQgb2YgZnJlcXVlbmNpZXMgKGluIEh6KS4gVGhlIHBoYXNl
IHJlc3BvbnNlIGlzIGluIHJhZGlhbnMuCi0gICAgdm9pZCBnZXRGcmVxdWVuY3lSZXNwb25zZShp
bnQgbkZyZXF1ZW5jaWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxv
YXQqIGZyZXF1ZW5jeUh6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIG1h
Z1Jlc3BvbnNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIHBoYXNlUmVz
cG9uc2UpOwotCi0gICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFOwotCi1wcm90
ZWN0ZWQ6Ci0gICAgQmlxdWFkIG1fYmlxdWFkOwotICAgIEJpcXVhZFByb2Nlc3NvciogYmlxdWFk
UHJvY2Vzc29yKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmlxdWFkUHJvY2Vzc29yKj4ocHJvY2Vz
c29yKCkpOyB9Ci0KLSAgICAvLyBUbyBwcmV2ZW50IGF1ZGlvIGdsaXRjaGVzIHdoZW4gcGFyYW1l
dGVycyBhcmUgY2hhbmdlZCwKLSAgICAvLyBkZXppcHBlcmluZyBpcyB1c2VkIHRvIHNsb3dseSBj
aGFuZ2UgdGhlIHBhcmFtZXRlcnMuCi0gICAgLy8gfHVzZVNtb290aGluZ3wgaW1wbGllcyB0aGF0
IHdlIHdhbnQgdG8gdXBkYXRlIHVzaW5nIHRoZQotICAgIC8vIHNtb290aGVkIHZhbHVlcy4gT3Ro
ZXJ3aXNlIHRoZSBmaW5hbCB0YXJnZXQgdmFsdWVzIGFyZQotICAgIC8vIHVzZWQuIElmIHxmb3Jj
ZVVwZGF0ZXwgaXMgdHJ1ZSwgd2UgdXBkYXRlIHRoZSBjb2VmZmljaWVudHMgZXZlbgotICAgIC8v
IGlmIHRoZXkgYXJlIG5vdCBkaXJ0eS4gKFVzZWQgd2hlbiBjb21wdXRpbmcgdGhlIGZyZXF1ZW5j
eQotICAgIC8vIHJlc3BvbnNlLikKLSAgICB2b2lkIHVwZGF0ZUNvZWZmaWNpZW50c0lmTmVjZXNz
YXJ5KGJvb2wgdXNlU21vb3RoaW5nLCBib29sIGZvcmNlVXBkYXRlKTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEJpcXVhZERTUEtlcm5lbF9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmNwcAkocmV2aXNpb24gMTEx
NDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJCaXF1YWRGaWx0ZXJO
b2RlLmgiCi0KLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotQmlxdWFkRmlsdGVyTm9kZTo6QmlxdWFkRmlsdGVyTm9kZShBdWRpb0NvbnRleHQqIGNv
bnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZShj
b250ZXh0LCBzYW1wbGVSYXRlKQotewotICAgIC8vIEluaXRpYWxseSBzZXR1cCBhcyBsb3dwYXNz
IGZpbHRlci4KLSAgICBtX3Byb2Nlc3NvciA9IGFkb3B0UHRyKG5ldyBCaXF1YWRQcm9jZXNzb3Io
QmlxdWFkUHJvY2Vzc29yOjpMb3dQYXNzLCBzYW1wbGVSYXRlLCAxLCBmYWxzZSkpOwotICAgIGJp
cXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIxKCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAg
YmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjIoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAg
ICBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMygpLT5zZXRDb250ZXh0KGNvbnRleHQpOwot
ICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlQmlxdWFkRmlsdGVyKTsKLX0KLQotdm9pZCBCaXF1YWRG
aWx0ZXJOb2RlOjpzZXRUeXBlKHVuc2lnbmVkIHNob3J0IHR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIGlmICh0eXBlID4gQmlxdWFkUHJvY2Vzc29yOjpBbGxwYXNzKSB7Ci0gICAgICAg
IGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgYmlxdWFkUHJvY2Vzc29yKCktPnNldFR5cGUoc3RhdGljX2Nhc3Q8QmlxdWFkUHJvY2Vzc29y
OjpGaWx0ZXJUeXBlPih0eXBlKSk7Ci19Ci0KLQotdm9pZCBCaXF1YWRGaWx0ZXJOb2RlOjpnZXRG
cmVxdWVuY3lSZXNwb25zZShjb25zdCBGbG9hdDMyQXJyYXkqIGZyZXF1ZW5jeUh6LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdDMyQXJyYXkqIG1hZ1Jl
c3BvbnNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h
dDMyQXJyYXkqIHBoYXNlUmVzcG9uc2UpCi17Ci0gICAgaWYgKCFmcmVxdWVuY3lIeiB8fCAhbWFn
UmVzcG9uc2UgfHwgIXBoYXNlUmVzcG9uc2UpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBp
bnQgbiA9IHN0ZDo6bWluKGZyZXF1ZW5jeUh6LT5sZW5ndGgoKSwKLSAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6bWluKG1hZ1Jlc3BvbnNlLT5sZW5ndGgoKSwgcGhhc2VSZXNwb25zZS0+bGVuZ3Ro
KCkpKTsKLQotICAgIGlmIChuKSB7Ci0gICAgICAgIGJpcXVhZFByb2Nlc3NvcigpLT5nZXRGcmVx
dWVuY3lSZXNwb25zZShuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZnJlcXVlbmN5SHotPmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1hZ1Jlc3BvbnNlLT5kYXRhKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaGFzZVJlc3BvbnNlLT5kYXRhKCkp
OwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJO
b2RlLmgJKHJldmlzaW9uIDExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVh
ZEZpbHRlck5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
LSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBCaXF1YWRGaWx0ZXJOb2RlX2gKLSNkZWZpbmUgQmlxdWFkRmlsdGVyTm9kZV9o
Ci0KLSNpbmNsdWRlICJBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oIgotI2luY2x1ZGUgIkJpcXVh
ZFByb2Nlc3Nvci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvUGFyYW07
Ci0gICAgCi1jbGFzcyBCaXF1YWRGaWx0ZXJOb2RlIDogcHVibGljIEF1ZGlvQmFzaWNQcm9jZXNz
b3JOb2RlIHsKLXB1YmxpYzoKLSAgICAvLyBUaGVzZSBtdXN0IGJlIGRlZmluZWQgYXMgaW4gdGhl
IC5pZGwgZmlsZSBhbmQgbXVzdCBtYXRjaCB0aG9zZSBpbiB0aGUgQmlxdWFkUHJvY2Vzc29yIGNs
YXNzLgotICAgIGVudW0gewotICAgICAgICBMT1dQQVNTID0gMCwKLSAgICAgICAgSElHSFBBU1Mg
PSAxLAotICAgICAgICBCQU5EUEFTUyA9IDIsCi0gICAgICAgIExPV1NIRUxGID0gMywKLSAgICAg
ICAgSElHSFNIRUxGID0gNCwKLSAgICAgICAgUEVBS0lORyA9IDUsCi0gICAgICAgIE5PVENIID0g
NiwKLSAgICAgICAgQUxMUEFTUyA9IDcKLSAgICB9OwotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8
QmlxdWFkRmlsdGVyTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2Ft
cGxlUmF0ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmlxdWFkRmlsdGVy
Tm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKSk7ICAgICAgCi0gICAgfQotICAgIAotICAgIHVuc2ln
bmVkIHNob3J0IHR5cGUoKSB7IHJldHVybiBiaXF1YWRQcm9jZXNzb3IoKS0+dHlwZSgpOyB9Ci0g
ICAgdm9pZCBzZXRUeXBlKHVuc2lnbmVkIHNob3J0IHR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKLQot
ICAgIEF1ZGlvUGFyYW0qIGZyZXF1ZW5jeSgpIHsgcmV0dXJuIGJpcXVhZFByb2Nlc3NvcigpLT5w
YXJhbWV0ZXIxKCk7IH0KLSAgICBBdWRpb1BhcmFtKiBxKCkgeyByZXR1cm4gYmlxdWFkUHJvY2Vz
c29yKCktPnBhcmFtZXRlcjIoKTsgfQotICAgIEF1ZGlvUGFyYW0qIGdhaW4oKSB7IHJldHVybiBi
aXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMygpOyB9Ci0KLSAgICAvLyBHZXQgdGhlIG1hZ25p
dHVkZSBhbmQgcGhhc2UgcmVzcG9uc2Ugb2YgdGhlIGZpbHRlciBhdCB0aGUgZ2l2ZW4KLSAgICAv
LyBzZXQgb2YgZnJlcXVlbmNpZXMgKGluIEh6KS4gVGhlIHBoYXNlIHJlc3BvbnNlIGlzIGluIHJh
ZGlhbnMuCi0gICAgdm9pZCBnZXRGcmVxdWVuY3lSZXNwb25zZShjb25zdCBGbG9hdDMyQXJyYXkq
IGZyZXF1ZW5jeUh6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXQzMkFycmF5
KiBtYWdSZXNwb25zZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0MzJBcnJh
eSogcGhhc2VSZXNwb25zZSk7Ci0KLXByaXZhdGU6Ci0gICAgQmlxdWFkRmlsdGVyTm9kZShBdWRp
b0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKLQotICAgIEJpcXVhZFByb2Nlc3NvciogYmlx
dWFkUHJvY2Vzc29yKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmlxdWFkUHJvY2Vzc29yKj4ocHJv
Y2Vzc29yKCkpOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBC
aXF1YWRGaWx0ZXJOb2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZp
bHRlck5vZGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVh
ZEZpbHRlck5vZGUuaWRsCShyZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9CaXF1YWRGaWx0ZXJOb2RlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw1MSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwot
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotbW9kdWxlIGF1ZGlvIHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBD
b25kaXRpb25hbD1XRUJfQVVESU8sCi0gICAgICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0Ci0gICAg
XSBCaXF1YWRGaWx0ZXJOb2RlIDogQXVkaW9Ob2RlIHsKLSAgICAgICAgLy8gRmlsdGVyIHR5cGUu
Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IExPV1BBU1MgPSAwOwotICAgICAgICBjb25z
dCB1bnNpZ25lZCBzaG9ydCBISUdIUEFTUyA9IDE7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IEJBTkRQQVNTID0gMjsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTE9XU0hFTEYg
PSAzOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBISUdIU0hFTEYgPSA0OwotICAgICAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCBQRUFLSU5HID0gNTsKLSAgICAgICAgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgTk9UQ0ggPSA2OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBBTExQQVNT
ID0gNzsKLQotICAgICAgICBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgdHlwZQotICAgICAgICAg
ICAgc2V0dGVyIHJhaXNlcyhET01FeGNlcHRpb24pOwotICAgICAgICAKLSAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIEF1ZGlvUGFyYW0gZnJlcXVlbmN5OyAvLyBpbiBIZXJ0egotICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9QYXJhbSBROyAvLyBRdWFsaXR5IGZhY3RvcgotICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9QYXJhbSBnYWluOyAvLyBpbiBEZWNpYmVscwotCi0g
ICAgICAgIHZvaWQgZ2V0RnJlcXVlbmN5UmVzcG9uc2UoaW4gRmxvYXQzMkFycmF5IGZyZXF1ZW5j
eUh6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEZsb2F0MzJBcnJheSBt
YWdSZXNwb25zZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBGbG9hdDMy
QXJyYXkgcGhhc2VSZXNwb25zZSk7Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmNwcAkocmV2aXNpb24gMTExNDMzKQorKysgU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSwxNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVO
QUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJCaXF1YWRQcm9jZXNzb3IuaCIKLQotI2luY2x1
ZGUgIkJpcXVhZERTUEtlcm5lbC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1CaXF1
YWRQcm9jZXNzb3I6OkJpcXVhZFByb2Nlc3NvcihmbG9hdCBzYW1wbGVSYXRlLCBzaXplX3QgbnVt
YmVyT2ZDaGFubmVscywgYm9vbCBhdXRvSW5pdGlhbGl6ZSkKLSAgICA6IEF1ZGlvRFNQS2VybmVs
UHJvY2Vzc29yKHNhbXBsZVJhdGUsIG51bWJlck9mQ2hhbm5lbHMpCi0gICAgLCBtX3R5cGUoTG93
UGFzcykKLSAgICAsIG1fcGFyYW1ldGVyMSgwKQotICAgICwgbV9wYXJhbWV0ZXIyKDApCi0gICAg
LCBtX3BhcmFtZXRlcjMoMCkKLSAgICAsIG1fZmlsdGVyQ29lZmZpY2llbnRzRGlydHkodHJ1ZSkK
LXsKLSAgICBkb3VibGUgbnlxdWlzdCA9IDAuNSAqIHRoaXMtPnNhbXBsZVJhdGUoKTsKLQotICAg
IC8vIENyZWF0ZSBwYXJhbWV0ZXJzIGZvciBCaXF1YWRGaWx0ZXJOb2RlLgotICAgIG1fcGFyYW1l
dGVyMSA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgiZnJlcXVlbmN5IiwgMzUwLjAsIDEwLjAsIG55cXVp
c3QpOwotICAgIG1fcGFyYW1ldGVyMiA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgiUSIsIDEsIDAuMDAw
MSwgMTAwMC4wKTsKLSAgICBtX3BhcmFtZXRlcjMgPSBBdWRpb1BhcmFtOjpjcmVhdGUoImdhaW4i
LCAwLjAsIC00MCwgNDApOwotCi0gICAgaWYgKGF1dG9Jbml0aWFsaXplKQotICAgICAgICBpbml0
aWFsaXplKCk7Ci19Ci0KLUJpcXVhZFByb2Nlc3Nvcjo6QmlxdWFkUHJvY2Vzc29yKEZpbHRlclR5
cGUgdHlwZSwgZmxvYXQgc2FtcGxlUmF0ZSwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGJvb2wg
YXV0b0luaXRpYWxpemUpCi0gICAgOiBBdWRpb0RTUEtlcm5lbFByb2Nlc3NvcihzYW1wbGVSYXRl
LCBudW1iZXJPZkNoYW5uZWxzKQotICAgICwgbV90eXBlKHR5cGUpCi0gICAgLCBtX3BhcmFtZXRl
cjEoMCkKLSAgICAsIG1fcGFyYW1ldGVyMigwKQotICAgICwgbV9wYXJhbWV0ZXIzKDApCi0gICAg
LCBtX2ZpbHRlckNvZWZmaWNpZW50c0RpcnR5KHRydWUpCi17Ci0gICAgZG91YmxlIG55cXVpc3Qg
PSAwLjUgKiB0aGlzLT5zYW1wbGVSYXRlKCk7Ci0gICAgCi0gICAgLy8gSGFuZGxlIHRoZSBkZXBy
ZWNhdGVkIExvd1Bhc3MyRmlsdGVyTm9kZSBhbmQgSGlnaFBhc3MyRmlsdGVyTm9kZS4KLSAgICBz
d2l0Y2ggKHR5cGUpIHsKLSAgICAvLyBIaWdocGFzcyBhbmQgbG93cGFzcyBzaGFyZSB0aGUgc2Ft
ZSBwYXJhbWV0ZXJzIGFuZCBvbmx5IGRpZmZlciBpbiBmaWx0ZXIgdHlwZS4KLSAgICBjYXNlIExv
d1Bhc3M6Ci0gICAgY2FzZSBIaWdoUGFzczoKLSAgICAgICAgbV9wYXJhbWV0ZXIxID0gQXVkaW9Q
YXJhbTo6Y3JlYXRlKCJmcmVxdWVuY3kiLCAzNTAuMCwgMjAuMCwgbnlxdWlzdCk7Ci0gICAgICAg
IG1fcGFyYW1ldGVyMiA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgicmVzb25hbmNlIiwgMC4wLCAtMjAu
MCwgMjAuMCk7Ci0gICAgICAgIG1fcGFyYW1ldGVyMyA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgidW51
c2VkIiwgMC4wLCAwLjAsIDEuMCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgaWYgKGF1dG9Jbml0aWFs
aXplKQotICAgICAgICBpbml0aWFsaXplKCk7Ci19Ci0KLUJpcXVhZFByb2Nlc3Nvcjo6fkJpcXVh
ZFByb2Nlc3NvcigpCi17Ci0gICAgaWYgKGlzSW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgdW5pbml0
aWFsaXplKCk7Ci19Ci0KLVBhc3NPd25QdHI8QXVkaW9EU1BLZXJuZWw+IEJpcXVhZFByb2Nlc3Nv
cjo6Y3JlYXRlS2VybmVsKCkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEJpcXVhZERTUEtl
cm5lbCh0aGlzKSk7Ci19Ci0KLXZvaWQgQmlxdWFkUHJvY2Vzc29yOjpjaGVja0ZvckRpcnR5Q29l
ZmZpY2llbnRzKCkKLXsKLSAgICAvLyBEZWFsIHdpdGggc21vb3RoaW5nIC8gZGUtemlwcGVyaW5n
LiBTdGFydCBvdXQgYXNzdW1pbmcgZmlsdGVyIHBhcmFtZXRlcnMgYXJlIG5vdCBjaGFuZ2luZy4K
LQotICAgIC8vIFRoZSBCaXF1YWREU1BLZXJuZWwgb2JqZWN0cyByZWx5IG9uIHRoaXMgdmFsdWUg
dG8gc2VlIGlmIHRoZXkgbmVlZCB0byByZS1jb21wdXRlIHRoZWlyIGludGVybmFsIGZpbHRlciBj
b2VmZmljaWVudHMuCi0gICAgbV9maWx0ZXJDb2VmZmljaWVudHNEaXJ0eSA9IGZhbHNlOwotICAg
IAotICAgIGlmIChtX2hhc0p1c3RSZXNldCkgewotICAgICAgICAvLyBTbmFwIHRvIGV4YWN0IHZh
bHVlcyBmaXJzdCB0aW1lIGFmdGVyIHJlc2V0LCB0aGVuIHNtb290aCBmb3Igc3Vic2VxdWVudCBj
aGFuZ2VzLgotICAgICAgICBtX3BhcmFtZXRlcjEtPnJlc2V0U21vb3RoZWRWYWx1ZSgpOwotICAg
ICAgICBtX3BhcmFtZXRlcjItPnJlc2V0U21vb3RoZWRWYWx1ZSgpOwotICAgICAgICBtX3BhcmFt
ZXRlcjMtPnJlc2V0U21vb3RoZWRWYWx1ZSgpOwotICAgICAgICBtX2ZpbHRlckNvZWZmaWNpZW50
c0RpcnR5ID0gdHJ1ZTsKLSAgICAgICAgbV9oYXNKdXN0UmVzZXQgPSBmYWxzZTsKLSAgICB9IGVs
c2UgewotICAgICAgICAvLyBTbW9vdGggYWxsIG9mIHRoZSBmaWx0ZXIgcGFyYW1ldGVycy4gSWYg
dGhleSBoYXZlbid0IHlldCBjb252ZXJnZWQgdG8gdGhlaXIgdGFyZ2V0IHZhbHVlIHRoZW4gbWFy
ayBjb2VmZmljaWVudHMgYXMgZGlydHkuCi0gICAgICAgIGJvb2wgaXNTdGFibGUxID0gbV9wYXJh
bWV0ZXIxLT5zbW9vdGgoKTsKLSAgICAgICAgYm9vbCBpc1N0YWJsZTIgPSBtX3BhcmFtZXRlcjIt
PnNtb290aCgpOwotICAgICAgICBib29sIGlzU3RhYmxlMyA9IG1fcGFyYW1ldGVyMy0+c21vb3Ro
KCk7Ci0gICAgICAgIGlmICghKGlzU3RhYmxlMSAmJiBpc1N0YWJsZTIgJiYgaXNTdGFibGUzKSkK
LSAgICAgICAgICAgIG1fZmlsdGVyQ29lZmZpY2llbnRzRGlydHkgPSB0cnVlOwotICAgIH0KLX0K
LQotdm9pZCBCaXF1YWRQcm9jZXNzb3I6OnByb2Nlc3MoY29uc3QgQXVkaW9CdXMqIHNvdXJjZSwg
QXVkaW9CdXMqIGRlc3RpbmF0aW9uLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIGlm
ICghaXNJbml0aWFsaXplZCgpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uLT56ZXJvKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgICAgIAotICAgIGNoZWNrRm9yRGlydHlDb2VmZmljaWVu
dHMoKTsKLSAgICAgICAgICAgIAotICAgIC8vIEZvciBlYWNoIGNoYW5uZWwgb2Ygb3VyIGlucHV0
LCBwcm9jZXNzIHVzaW5nIHRoZSBjb3JyZXNwb25kaW5nIEJpcXVhZERTUEtlcm5lbCBpbnRvIHRo
ZSBvdXRwdXQgY2hhbm5lbC4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9rZXJuZWxz
LnNpemUoKTsgKytpKQotICAgICAgICBtX2tlcm5lbHNbaV0tPnByb2Nlc3Moc291cmNlLT5jaGFu
bmVsKGkpLT5kYXRhKCksIGRlc3RpbmF0aW9uLT5jaGFubmVsKGkpLT5tdXRhYmxlRGF0YSgpLCBm
cmFtZXNUb1Byb2Nlc3MpOwotfQotCi12b2lkIEJpcXVhZFByb2Nlc3Nvcjo6c2V0VHlwZShGaWx0
ZXJUeXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgIT0gbV90eXBlKSB7Ci0gICAgICAgIG1fdHlw
ZSA9IHR5cGU7Ci0gICAgICAgIHJlc2V0KCk7IC8vIFRoZSBmaWx0ZXIgc3RhdGUgbXVzdCBiZSBy
ZXNldCBvbmx5IGlmIHRoZSB0eXBlIGhhcyBjaGFuZ2VkLgotICAgIH0KLX0KLQotdm9pZCBCaXF1
YWRQcm9jZXNzb3I6OmdldEZyZXF1ZW5jeVJlc3BvbnNlKGludCBuRnJlcXVlbmNpZXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIGZyZXF1
ZW5jeUh6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0
KiBtYWdSZXNwb25zZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCogcGhhc2VSZXNwb25zZSkKLXsKLSAgICAvLyBDb21wdXRlIHRoZSBmcmVxdWVuY3kg
cmVzcG9uc2Ugb24gYSBzZXBhcmF0ZSB0ZW1wb3Jhcnkga2VybmVsCi0gICAgLy8gdG8gYXZvaWQg
aW50ZXJmZXJpbmcgd2l0aCB0aGUgcHJvY2Vzc2luZyBydW5uaW5nIGluIHRoZSBhdWRpbwotICAg
IC8vIHRocmVhZCBvbiB0aGUgbWFpbiBrZXJuZWxzLgotICAgIAotICAgIE93blB0cjxCaXF1YWRE
U1BLZXJuZWw+IHJlc3BvbnNlS2VybmVsID0gYWRvcHRQdHIobmV3IEJpcXVhZERTUEtlcm5lbCh0
aGlzKSk7Ci0KLSAgICByZXNwb25zZUtlcm5lbC0+Z2V0RnJlcXVlbmN5UmVzcG9uc2UobkZyZXF1
ZW5jaWVzLCBmcmVxdWVuY3lIeiwgbWFnUmVzcG9uc2UsIHBoYXNlUmVzcG9uc2UpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmgJKHJldmlzaW9uIDEx
MTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEJpcXVhZFBy
b2Nlc3Nvcl9oCi0jZGVmaW5lIEJpcXVhZFByb2Nlc3Nvcl9oCi0KLSNpbmNsdWRlICJBdWRpb0RT
UEtlcm5lbC5oIgotI2luY2x1ZGUgIkF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmgiCi0jaW5jbHVk
ZSAiQXVkaW9Ob2RlLmgiCi0jaW5jbHVkZSAiQXVkaW9QYXJhbS5oIgotI2luY2x1ZGUgIkJpcXVh
ZC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0v
LyBCaXF1YWRQcm9jZXNzb3IgaXMgYW4gQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3Igd2hpY2ggdXNl
cyBCaXF1YWQgb2JqZWN0cyB0byBpbXBsZW1lbnQgc2V2ZXJhbCBjb21tb24gZmlsdGVycy4KLQot
Y2xhc3MgQmlxdWFkUHJvY2Vzc29yIDogcHVibGljIEF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yIHsK
LXB1YmxpYzoKLSAgICBlbnVtIEZpbHRlclR5cGUgewotICAgICAgICBMb3dQYXNzID0gMCwKLSAg
ICAgICAgSGlnaFBhc3MgPSAxLAotICAgICAgICBCYW5kUGFzcyA9IDIsCi0gICAgICAgIExvd1No
ZWxmID0gMywKLSAgICAgICAgSGlnaFNoZWxmID0gNCwKLSAgICAgICAgUGVha2luZyA9IDUsCi0g
ICAgICAgIE5vdGNoID0gNiwKLSAgICAgICAgQWxscGFzcyA9IDcKLSAgICB9OwotCi0gICAgQmlx
dWFkUHJvY2Vzc29yKGZsb2F0IHNhbXBsZVJhdGUsIHNpemVfdCBudW1iZXJPZkNoYW5uZWxzLCBi
b29sIGF1dG9Jbml0aWFsaXplKTsKLQotICAgIC8vIE9sZCBjb25zdHJ1Y3RvciB1c2VkIGJ5IGRl
cHJlY2F0ZWQgTG93UGFzczJGaWx0ZXJOb2RlIGFuZCBIaWdoUGFzczJGaWx0ZXJOb2RlCi0gICAg
QmlxdWFkUHJvY2Vzc29yKEZpbHRlclR5cGUsIGZsb2F0IHNhbXBsZVJhdGUsIHNpemVfdCBudW1i
ZXJPZkNoYW5uZWxzLCBib29sIGF1dG9Jbml0aWFsaXplID0gdHJ1ZSk7Ci0KLSAgICB2aXJ0dWFs
IH5CaXF1YWRQcm9jZXNzb3IoKTsKLSAgICAKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8QXVkaW9E
U1BLZXJuZWw+IGNyZWF0ZUtlcm5lbCgpOwotICAgICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgcHJv
Y2Vzcyhjb25zdCBBdWRpb0J1cyogc291cmNlLCBBdWRpb0J1cyogZGVzdGluYXRpb24sIHNpemVf
dCBmcmFtZXNUb1Byb2Nlc3MpOwotCi0gICAgLy8gR2V0IHRoZSBtYWduaXR1ZGUgYW5kIHBoYXNl
IHJlc3BvbnNlIG9mIHRoZSBmaWx0ZXIgYXQgdGhlIGdpdmVuCi0gICAgLy8gc2V0IG9mIGZyZXF1
ZW5jaWVzIChpbiBIeikuIFRoZSBwaGFzZSByZXNwb25zZSBpcyBpbiByYWRpYW5zLgotICAgIHZv
aWQgZ2V0RnJlcXVlbmN5UmVzcG9uc2UoaW50IG5GcmVxdWVuY2llcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBmcmVxdWVuY3lIeiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZsb2F0KiBtYWdSZXNwb25zZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZsb2F0KiBwaGFzZVJlc3BvbnNlKTsKLQotICAgIHZvaWQgY2hlY2tGb3JEaXJ0
eUNvZWZmaWNpZW50cygpOwotICAgIAotICAgIGJvb2wgZmlsdGVyQ29lZmZpY2llbnRzRGlydHko
KSBjb25zdCB7IHJldHVybiBtX2ZpbHRlckNvZWZmaWNpZW50c0RpcnR5OyB9Ci0KLSAgICBBdWRp
b1BhcmFtKiBwYXJhbWV0ZXIxKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXIxLmdldCgpOyB9Ci0gICAg
QXVkaW9QYXJhbSogcGFyYW1ldGVyMigpIHsgcmV0dXJuIG1fcGFyYW1ldGVyMi5nZXQoKTsgfQot
ICAgIEF1ZGlvUGFyYW0qIHBhcmFtZXRlcjMoKSB7IHJldHVybiBtX3BhcmFtZXRlcjMuZ2V0KCk7
IH0KLQotICAgIEZpbHRlclR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAg
IHZvaWQgc2V0VHlwZShGaWx0ZXJUeXBlKTsKLQotcHJpdmF0ZToKLSAgICBGaWx0ZXJUeXBlIG1f
dHlwZTsKLQotICAgIFJlZlB0cjxBdWRpb1BhcmFtPiBtX3BhcmFtZXRlcjE7Ci0gICAgUmVmUHRy
PEF1ZGlvUGFyYW0+IG1fcGFyYW1ldGVyMjsKLSAgICBSZWZQdHI8QXVkaW9QYXJhbT4gbV9wYXJh
bWV0ZXIzOwotCi0gICAgLy8gc28gRFNQIGtlcm5lbHMga25vdyB3aGVuIHRvIHJlLWNvbXB1dGUg
Y29lZmZpY2llbnRzCi0gICAgYm9vbCBtX2ZpbHRlckNvZWZmaWNpZW50c0RpcnR5OwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQmlxdWFkUHJvY2Vzc29yX2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCShyZXZpc2lvbiAx
MTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwxNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJDb252b2x2ZXJOb2Rl
LmgiCi0KLSNpbmNsdWRlICJBdWRpb0J1ZmZlci5oIgotI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5o
IgotI2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0LmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0
LmgiCi0jaW5jbHVkZSAiUmV2ZXJiLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQot
Ly8gTm90ZSBhYm91dCBlbXBpcmljYWwgdHVuaW5nOgotLy8gVGhlIG1heGltdW0gRkZUIHNpemUg
YWZmZWN0cyByZXZlcmIgcGVyZm9ybWFuY2UgYW5kIGFjY3VyYWN5LgotLy8gSWYgdGhlIHJldmVy
YiBpcyBzaW5nbGUtdGhyZWFkZWQgYW5kIHByb2Nlc3NlcyBlbnRpcmVseSBpbiB0aGUgcmVhbC10
aW1lIGF1ZGlvIHRocmVhZCwKLS8vIGl0J3MgaW1wb3J0YW50IG5vdCB0byBtYWtlIHRoaXMgdG9v
IGhpZ2guICBJbiB0aGlzIGNhc2UgODE5MiBpcyBhIGdvb2QgdmFsdWUuCi0vLyBCdXQsIHRoZSBS
ZXZlcmIgb2JqZWN0IGlzIG11bHRpLXRocmVhZGVkLCBzbyB3ZSB3YW50IHRoaXMgYXMgaGlnaCBh
cyBwb3NzaWJsZSB3aXRob3V0IGxvc2luZyB0b28gbXVjaCBhY2N1cmFjeS4KLS8vIFZlcnkgbGFy
Z2UgRkZUcyB3aWxsIGhhdmUgd29yc2UgcGhhc2UgZXJyb3JzLiBHaXZlbiB0aGVzZSBjb25zdHJh
aW50cyAzMjc2OCBpcyBhIGdvb2QgY29tcHJvbWlzZS4KLWNvbnN0IHNpemVfdCBNYXhGRlRTaXpl
ID0gMzI3Njg7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ29udm9sdmVyTm9kZTo6Q29udm9s
dmVyTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBB
dWRpb05vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkKLSAgICAsIG1fbm9ybWFsaXplKHRydWUpCi17
Ci0gICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7Ci0gICAg
YWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywgMikpKTsKLSAgICAK
LSAgICBzZXROb2RlVHlwZShOb2RlVHlwZUNvbnZvbHZlcik7Ci0gICAgCi0gICAgaW5pdGlhbGl6
ZSgpOwotfQotCi1Db252b2x2ZXJOb2RlOjp+Q29udm9sdmVyTm9kZSgpCi17Ci0gICAgdW5pbml0
aWFsaXplKCk7Ci19Ci0KLXZvaWQgQ29udm9sdmVyTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbWVz
VG9Qcm9jZXNzKQotewotICAgIEF1ZGlvQnVzKiBvdXRwdXRCdXMgPSBvdXRwdXQoMCktPmJ1cygp
OwotICAgIEFTU0VSVChvdXRwdXRCdXMpOwotCi0gICAgLy8gU3luY2hyb25pemUgd2l0aCBwb3Nz
aWJsZSBkeW5hbWljIGNoYW5nZXMgdG8gdGhlIGltcHVsc2UgcmVzcG9uc2UuCi0gICAgaWYgKG1f
cHJvY2Vzc0xvY2sudHJ5TG9jaygpKSB7Ci0gICAgICAgIGlmICghaXNJbml0aWFsaXplZCgpIHx8
ICFtX3JldmVyYi5nZXQoKSkKLSAgICAgICAgICAgIG91dHB1dEJ1cy0+emVybygpOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFByb2Nlc3MgdXNpbmcgdGhlIGNvbnZvbHV0aW9uIGVu
Z2luZS4KLSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBjYW4gaGFuZGxlIHRoZSBjYXNlIHdo
ZXJlIG5vdGhpbmcgaXMgY29ubmVjdGVkIHRvIHRoZSBpbnB1dCwgaW4gd2hpY2ggY2FzZSB3ZSds
bCBqdXN0IGZlZWQgc2lsZW5jZSBpbnRvIHRoZSBjb252b2x2ZXIuCi0gICAgICAgICAgICAvLyBG
SVhNRTogIElmIHdlIHdhbnRlZCB0byBnZXQgZmFuY3kgd2UgY291bGQgdHJ5IHRvIGZhY3RvciBp
biB0aGUgJ3RhaWwgdGltZScgYW5kIHN0b3AgcHJvY2Vzc2luZyBvbmNlIHRoZSB0YWlsIGRpZXMg
ZG93biBpZgotICAgICAgICAgICAgLy8gd2Uga2VlcCBnZXR0aW5nIGZlZCBzaWxlbmNlLgotICAg
ICAgICAgICAgbV9yZXZlcmItPnByb2Nlc3MoaW5wdXQoMCktPmJ1cygpLCBvdXRwdXRCdXMsIGZy
YW1lc1RvUHJvY2Vzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fcHJvY2Vzc0xv
Y2sudW5sb2NrKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gVG9vIGJhZCAtIHRoZSB0cnlM
b2NrKCkgZmFpbGVkLiAgV2UgbXVzdCBiZSBpbiB0aGUgbWlkZGxlIG9mIHNldHRpbmcgYSBuZXcg
aW1wdWxzZSByZXNwb25zZS4KLSAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7Ci0gICAgfQotfQot
Ci12b2lkIENvbnZvbHZlck5vZGU6OnJlc2V0KCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIo
bV9wcm9jZXNzTG9jayk7Ci0gICAgaWYgKG1fcmV2ZXJiLmdldCgpKQotICAgICAgICBtX3JldmVy
Yi0+cmVzZXQoKTsKLX0KLQotdm9pZCBDb252b2x2ZXJOb2RlOjppbml0aWFsaXplKCkKLXsKLSAg
ICBpZiAoaXNJbml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIEF1
ZGlvTm9kZTo6aW5pdGlhbGl6ZSgpOwotfQotCi12b2lkIENvbnZvbHZlck5vZGU6OnVuaW5pdGlh
bGl6ZSgpCi17Ci0gICAgaWYgKCFpc0luaXRpYWxpemVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fcmV2ZXJiLmNsZWFyKCk7Ci0gICAgQXVkaW9Ob2RlOjp1bmluaXRpYWxpemUoKTsKLX0K
LQotdm9pZCBDb252b2x2ZXJOb2RlOjpzZXRCdWZmZXIoQXVkaW9CdWZmZXIqIGJ1ZmZlcikKLXsK
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIAotICAgIEFTU0VSVChidWZmZXIpOwot
ICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBudW1iZXJP
ZkNoYW5uZWxzID0gYnVmZmVyLT5udW1iZXJPZkNoYW5uZWxzKCk7Ci0gICAgc2l6ZV90IGJ1ZmZl
ckxlbmd0aCA9IGJ1ZmZlci0+bGVuZ3RoKCk7Ci0KLSAgICAvLyBUaGUgY3VycmVudCBpbXBsZW1l
bnRhdGlvbiBzdXBwb3J0cyB1cCB0byBmb3VyIGNoYW5uZWwgaW1wdWxzZSByZXNwb25zZXMsIHdo
aWNoIGFyZSBpbnRlcnByZXRlZCBhcyB0cnVlLXN0ZXJlbyAoc2VlIFJldmVyYiBjbGFzcykuCi0g
ICAgYm9vbCBpc0J1ZmZlckdvb2QgPSBudW1iZXJPZkNoYW5uZWxzID4gMCAmJiBudW1iZXJPZkNo
YW5uZWxzIDw9IDQgJiYgYnVmZmVyTGVuZ3RoOwotICAgIEFTU0VSVChpc0J1ZmZlckdvb2QpOwot
ICAgIGlmICghaXNCdWZmZXJHb29kKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXcmFwIHRo
ZSBBdWRpb0J1ZmZlciBieSBhbiBBdWRpb0J1cy4gSXQncyBhbiBlZmZpY2llbnQgcG9pbnRlciBz
ZXQgYW5kIG5vdCBhIG1lbWNweSgpLgotICAgIC8vIFRoaXMgbWVtb3J5IGlzIHNpbXBseSB1c2Vk
IGluIHRoZSBSZXZlcmIgY29uc3RydWN0b3IgYW5kIG5vIHJlZmVyZW5jZSB0byBpdCBpcyBrZXB0
IGZvciBsYXRlciB1c2UgaW4gdGhhdCBjbGFzcy4KLSAgICBBdWRpb0J1cyBidWZmZXJCdXMobnVt
YmVyT2ZDaGFubmVscywgYnVmZmVyTGVuZ3RoLCBmYWxzZSk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkKLSAgICAgICAgYnVmZmVyQnVzLnNldENo
YW5uZWxNZW1vcnkoaSwgYnVmZmVyLT5nZXRDaGFubmVsRGF0YShpKS0+ZGF0YSgpLCBidWZmZXJM
ZW5ndGgpOwotCi0gICAgYnVmZmVyQnVzLnNldFNhbXBsZVJhdGUoYnVmZmVyLT5zYW1wbGVSYXRl
KCkpOwotCi0gICAgLy8gQ3JlYXRlIHRoZSByZXZlcmIgd2l0aCB0aGUgZ2l2ZW4gaW1wdWxzZSBy
ZXNwb25zZS4KLSAgICBib29sIHVzZUJhY2tncm91bmRUaHJlYWRzID0gIWNvbnRleHQoKS0+aXNP
ZmZsaW5lQ29udGV4dCgpOwotICAgIE93blB0cjxSZXZlcmI+IHJldmVyYiA9IGFkb3B0UHRyKG5l
dyBSZXZlcmIoJmJ1ZmZlckJ1cywgQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVzLCBN
YXhGRlRTaXplLCAyLCB1c2VCYWNrZ3JvdW5kVGhyZWFkcywgbV9ub3JtYWxpemUpKTsKLQotICAg
IHsKLSAgICAgICAgLy8gU3luY2hyb25pemUgd2l0aCBwcm9jZXNzKCkuCi0gICAgICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3Byb2Nlc3NMb2NrKTsKLSAgICAgICAgbV9yZXZlcmIgPSByZXZlcmIu
cmVsZWFzZSgpOwotICAgICAgICBtX2J1ZmZlciA9IGJ1ZmZlcjsKLSAgICB9Ci19Ci0KLUF1ZGlv
QnVmZmVyKiBDb252b2x2ZXJOb2RlOjpidWZmZXIoKQotewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgcmV0dXJuIG1fYnVmZmVyLmdldCgpOwotfQotCi1kb3VibGUgQ29udm9sdmVy
Tm9kZTo6dGFpbFRpbWUoKSBjb25zdAotewotICAgIHJldHVybiBtX3JldmVyYiA/IG1fcmV2ZXJi
LT5pbXB1bHNlUmVzcG9uc2VMZW5ndGgoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oc2FtcGxlUmF0
ZSgpKSA6IDA7Ci19Ci0KLWRvdWJsZSBDb252b2x2ZXJOb2RlOjpsYXRlbmN5VGltZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fcmV2ZXJiID8gbV9yZXZlcmItPmxhdGVuY3lGcmFtZXMoKSAvIHN0
YXRpY19jYXN0PGRvdWJsZT4oc2FtcGxlUmF0ZSgpKSA6IDA7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5oCShyZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ29udm9sdmVyTm9kZV9oCi0jZGVmaW5lIENv
bnZvbHZlck5vZGVfaAotCi0jaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCi0jaW5jbHVkZSA8d3RmL093
blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9CdWZmZXI7Ci1jbGFzcyBS
ZXZlcmI7Ci0gICAgCi1jbGFzcyBDb252b2x2ZXJOb2RlIDogcHVibGljIEF1ZGlvTm9kZSB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q29udm9sdmVyTm9kZT4gY3JlYXRlKEF1ZGlv
Q29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ29udm9sdmVyTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKSk7ICAgICAg
Ci0gICAgfQotICAgIAotICAgIHZpcnR1YWwgfkNvbnZvbHZlck5vZGUoKTsKLSAgICAKLSAgICAv
LyBBdWRpb05vZGUKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9j
ZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5pdGlh
bGl6ZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1bmluaXRpYWxpemUoKTsKLQotICAgIC8vIEltcHVs
c2UgcmVzcG9uc2VzCi0gICAgdm9pZCBzZXRCdWZmZXIoQXVkaW9CdWZmZXIqKTsKLSAgICBBdWRp
b0J1ZmZlciogYnVmZmVyKCk7Ci0KLSAgICBib29sIG5vcm1hbGl6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbm9ybWFsaXplOyB9Ci0gICAgdm9pZCBzZXROb3JtYWxpemUoYm9vbCBub3JtYWxpemUpIHsg
bV9ub3JtYWxpemUgPSBub3JtYWxpemU7IH0KLQotcHJpdmF0ZToKLSAgICBDb252b2x2ZXJOb2Rl
KEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwotCi0gICAgdmlydHVhbCBkb3VibGUg
dGFpbFRpbWUoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGlt
ZSgpIGNvbnN0IE9WRVJSSURFOwotCi0gICAgT3duUHRyPFJldmVyYj4gbV9yZXZlcmI7Ci0gICAg
UmVmUHRyPEF1ZGlvQnVmZmVyPiBtX2J1ZmZlcjsKLQotICAgIC8vIFRoaXMgc3luY2hyb25pemVz
IGR5bmFtaWMgY2hhbmdlcyB0byB0aGUgY29udm9sdXRpb24gaW1wdWxzZSByZXNwb25zZSB3aXRo
IHByb2Nlc3MoKS4KLSAgICBtdXRhYmxlIE11dGV4IG1fcHJvY2Vzc0xvY2s7Ci0KLSAgICAvLyBO
b3JtYWxpemUgdGhlIGltcHVsc2UgcmVzcG9uc2Ugb3Igbm90LiBNdXN0IGRlZmF1bHQgdG8gdHJ1
ZS4KLSAgICBib29sIG1fbm9ybWFsaXplOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gQ29udm9sdmVyTm9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9Db252b2x2ZXJOb2RlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9Db252b2x2ZXJOb2RlLmlkbAkocmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQ29udm9sdmVyTm9kZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
LSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLW1vZHVsZSBhdWRpbyB7Ci0gICAgLy8gQSBsaW5lYXIgY29udm9sdXRp
b24gZWZmZWN0Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElP
LAotICAgICAgICBKU0dlbmVyYXRlVG9KU09iamVjdAotICAgIF0gQ29udm9sdmVyTm9kZSA6IEF1
ZGlvTm9kZSB7Ci0gICAgICAgIGF0dHJpYnV0ZSBbSlNDdXN0b21TZXR0ZXJdIEF1ZGlvQnVmZmVy
IGJ1ZmZlcjsKLSAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gbm9ybWFsaXplOwotICAgIH07Ci19
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9ET01XaW5kb3dXZWJBdWRpby5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRE9NV2luZG93V2ViQXVkaW8uaWRs
CShyZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9ET01XaW5kb3dX
ZWJBdWRpby5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi1tb2R1bGUgd2luZG93IHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAg
IENvbmRpdGlvbmFsPVdFQl9BVURJTywKLSAgICAgICAgU3VwcGxlbWVudGFsPURPTVdpbmRvdwot
ICAgIF0gRE9NV2luZG93V2ViQXVkaW8gewotI2lmICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwg
IUxBTkdVQUdFX0NQUAotICAgICAgICBhdHRyaWJ1dGUgW0pTQ3VzdG9tR2V0dGVyLCBWOEVuYWJs
ZWRBdFJ1bnRpbWVdIEF1ZGlvQ29udGV4dENvbnN0cnVjdG9yIHdlYmtpdEF1ZGlvQ29udGV4dDsK
LSAgICAgICAgYXR0cmlidXRlIEF1ZGlvUGFubmVyTm9kZUNvbnN0cnVjdG9yIHdlYmtpdEF1ZGlv
UGFubmVyTm9kZTsKLSAgICAgICAgYXR0cmlidXRlIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50Q29uc3Ry
dWN0b3IgQXVkaW9Qcm9jZXNzaW5nRXZlbnQ7Ci0gICAgICAgIGF0dHJpYnV0ZSBPZmZsaW5lQXVk
aW9Db21wbGV0aW9uRXZlbnRDb25zdHJ1Y3RvciBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ7
Ci0jZW5kaWYKLSAgICB9OwotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWZh
dWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAJKHJldmlzaW9uIDExMTQz
MykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJEZWZh
dWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaCIKLQotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotICAgIAotRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjpEZWZh
dWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0KQotICAgIDogQXVk
aW9EZXN0aW5hdGlvbk5vZGUoY29udGV4dCwgQXVkaW9EZXN0aW5hdGlvbjo6aGFyZHdhcmVTYW1w
bGVSYXRlKCkpCi17Ci19Ci0KLURlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6fkRlZmF1bHRB
dWRpb0Rlc3RpbmF0aW9uTm9kZSgpCi17Ci0gICAgdW5pbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQg
RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjppbml0aWFsaXplKCkKLXsKLSAgICBpZiAoaXNJ
bml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCBoYXJkd2FyZVNhbXBs
ZVJhdGUgPSBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJhdGUoKTsKLSAgICBMT0co
V2ViQXVkaW8sICI+Pj4+IGhhcmR3YXJlU2FtcGxlUmF0ZSA9ICVmXG4iLCBoYXJkd2FyZVNhbXBs
ZVJhdGUpOwotICAgIAotICAgIG1fZGVzdGluYXRpb24gPSBBdWRpb0Rlc3RpbmF0aW9uOjpjcmVh
dGUoKnRoaXMsIGhhcmR3YXJlU2FtcGxlUmF0ZSk7Ci0gICAgCi0gICAgQXVkaW9Ob2RlOjppbml0
aWFsaXplKCk7Ci19Ci0KLXZvaWQgRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjp1bmluaXRp
YWxpemUoKQotewotICAgIGlmICghaXNJbml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2Rlc3RpbmF0aW9uLT5zdG9wKCk7Ci0KLSAgICBBdWRpb05vZGU6OnVuaW5pdGlhbGl6
ZSgpOwotfQotCi12b2lkIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6c3RhcnRSZW5kZXJp
bmcoKQotewotICAgIEFTU0VSVChpc0luaXRpYWxpemVkKCkpOwotICAgIGlmIChpc0luaXRpYWxp
emVkKCkpCi0gICAgICAgIG1fZGVzdGluYXRpb24tPnN0YXJ0KCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUu
aAkocmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVmYXVsdEF1
ZGlvRGVzdGluYXRpb25Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlX2gKLSNkZWZpbmUg
RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlX2gKLQotI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRp
b24uaCIKLSNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgotI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb0NvbnRleHQ7Ci0g
ICAgCi1jbGFzcyBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUgOiBwdWJsaWMgQXVkaW9EZXN0
aW5hdGlvbk5vZGUgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERlZmF1bHRBdWRp
b0Rlc3RpbmF0aW9uTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCogY29udGV4dCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlKGNv
bnRleHQpKTsgICAgIAotICAgIH0KLQotICAgIHZpcnR1YWwgfkRlZmF1bHRBdWRpb0Rlc3RpbmF0
aW9uTm9kZSgpOwotICAgIAotICAgIC8vIEF1ZGlvTm9kZSAgIAotICAgIHZpcnR1YWwgdm9pZCBp
bml0aWFsaXplKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVuaW5pdGlhbGl6ZSgpOwotICAgIHZpcnR1
YWwgdm9pZCBzdGFydFJlbmRlcmluZygpOwotICAgIAotcHJpdmF0ZToKLSAgICBEZWZhdWx0QXVk
aW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0Kik7Ci0KLSAgICBPd25QdHI8QXVkaW9EZXN0
aW5hdGlvbj4gbV9kZXN0aW5hdGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZV9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9EZWxheURTUEtlcm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuY3BwCShyZXZpc2lvbiAxMTE0MzMpCisrKyBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheURTUEtlcm5lbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
ZiBFTkFCTEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiRGVsYXlEU1BLZXJuZWwuaCIKLQotI2lu
Y2x1ZGUgIkF1ZGlvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotCi11c2luZyBu
YW1lc3BhY2Ugc3RkOwotCi1jb25zdCBmbG9hdCBTbW9vdGhpbmdUaW1lQ29uc3RhbnQgPSAwLjAy
MGY7IC8vIDIwbXMKLSAgCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURlbGF5RFNQS2VybmVsOjpE
ZWxheURTUEtlcm5lbChEZWxheVByb2Nlc3NvciogcHJvY2Vzc29yKQotICAgIDogQXVkaW9EU1BL
ZXJuZWwocHJvY2Vzc29yKQotICAgICwgbV93cml0ZUluZGV4KDApCi0gICAgLCBtX2ZpcnN0VGlt
ZSh0cnVlKQotewotICAgIEFTU0VSVChwcm9jZXNzb3IgJiYgcHJvY2Vzc29yLT5zYW1wbGVSYXRl
KCkgPiAwKTsKLSAgICBpZiAoIXByb2Nlc3NvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9t
YXhEZWxheVRpbWUgPSBwcm9jZXNzb3ItPm1heERlbGF5VGltZSgpOwotICAgIG1fYnVmZmVyLmFs
bG9jYXRlKHN0YXRpY19jYXN0PHNpemVfdD4ocHJvY2Vzc29yLT5zYW1wbGVSYXRlKCkgKiBtX21h
eERlbGF5VGltZSkpOwotICAgIG1fYnVmZmVyLnplcm8oKTsKLQotICAgIG1fc21vb3RoaW5nUmF0
ZSA9IEF1ZGlvVXRpbGl0aWVzOjpkaXNjcmV0ZVRpbWVDb25zdGFudEZvclNhbXBsZVJhdGUoU21v
b3RoaW5nVGltZUNvbnN0YW50LCBwcm9jZXNzb3ItPnNhbXBsZVJhdGUoKSk7Ci19Ci0KLURlbGF5
RFNQS2VybmVsOjpEZWxheURTUEtlcm5lbChkb3VibGUgbWF4RGVsYXlUaW1lLCBmbG9hdCBzYW1w
bGVSYXRlKQotICAgIDogQXVkaW9EU1BLZXJuZWwoc2FtcGxlUmF0ZSkKLSAgICAsIG1fbWF4RGVs
YXlUaW1lKG1heERlbGF5VGltZSkKLSAgICAsIG1fd3JpdGVJbmRleCgwKQotICAgICwgbV9maXJz
dFRpbWUodHJ1ZSkKLXsKLSAgICBBU1NFUlQobWF4RGVsYXlUaW1lID4gMC4wKTsKLSAgICBpZiAo
bWF4RGVsYXlUaW1lIDw9IDAuMCkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBzaXpl
X3QgYnVmZmVyTGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzYW1wbGVSYXRlICogbWF4RGVs
YXlUaW1lKTsKLSAgICBBU1NFUlQoYnVmZmVyTGVuZ3RoKTsKLSAgICBpZiAoIWJ1ZmZlckxlbmd0
aCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1fYnVmZmVyLmFsbG9jYXRlKGJ1ZmZlckxl
bmd0aCk7Ci0gICAgbV9idWZmZXIuemVybygpOwotCi0gICAgbV9zbW9vdGhpbmdSYXRlID0gQXVk
aW9VdGlsaXRpZXM6OmRpc2NyZXRlVGltZUNvbnN0YW50Rm9yU2FtcGxlUmF0ZShTbW9vdGhpbmdU
aW1lQ29uc3RhbnQsIHNhbXBsZVJhdGUpOwotfQotCi12b2lkIERlbGF5RFNQS2VybmVsOjpwcm9j
ZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgc2l6ZV90IGZyYW1l
c1RvUHJvY2VzcykKLXsKLSAgICBzaXplX3QgYnVmZmVyTGVuZ3RoID0gbV9idWZmZXIuc2l6ZSgp
OwotICAgIGZsb2F0KiBidWZmZXIgPSBtX2J1ZmZlci5kYXRhKCk7Ci0KLSAgICBBU1NFUlQoYnVm
ZmVyTGVuZ3RoKTsKLSAgICBpZiAoIWJ1ZmZlckxlbmd0aCkKLSAgICAgICAgcmV0dXJuOwotICAg
ICAgICAKLSAgICBBU1NFUlQoc291cmNlICYmIGRlc3RpbmF0aW9uKTsKLSAgICBpZiAoIXNvdXJj
ZSB8fCAhZGVzdGluYXRpb24pCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgZmxvYXQg
c2FtcGxlUmF0ZSA9IHRoaXMtPnNhbXBsZVJhdGUoKTsKLSAgICBkb3VibGUgZGVsYXlUaW1lID0g
ZGVsYXlQcm9jZXNzb3IoKSA/IGRlbGF5UHJvY2Vzc29yKCktPmRlbGF5VGltZSgpLT52YWx1ZSgp
IDogbV9kZXNpcmVkRGVsYXlGcmFtZXMgLyBzYW1wbGVSYXRlOwotCi0gICAgLy8gTWFrZSBzdXJl
IHRoZSBkZWxheSB0aW1lIGlzIGluIGEgdmFsaWQgcmFuZ2UuCi0gICAgZGVsYXlUaW1lID0gbWlu
KG1heERlbGF5VGltZSgpLCBkZWxheVRpbWUpOwotICAgIGRlbGF5VGltZSA9IG1heCgwLjAsIGRl
bGF5VGltZSk7Ci0KLSAgICBpZiAobV9maXJzdFRpbWUpIHsKLSAgICAgICAgbV9jdXJyZW50RGVs
YXlUaW1lID0gZGVsYXlUaW1lOwotICAgICAgICBtX2ZpcnN0VGltZSA9IGZhbHNlOwotICAgIH0K
LSAgICAKLSAgICBpbnQgbiA9IGZyYW1lc1RvUHJvY2VzczsKLSAgICB3aGlsZSAobi0tKSB7Ci0g
ICAgICAgIC8vIEFwcHJvYWNoIGRlc2lyZWQgZGVsYXkgdGltZS4KLSAgICAgICAgbV9jdXJyZW50
RGVsYXlUaW1lICs9IChkZWxheVRpbWUgLSBtX2N1cnJlbnREZWxheVRpbWUpICogbV9zbW9vdGhp
bmdSYXRlOwotCi0gICAgICAgIGRvdWJsZSBkZXNpcmVkRGVsYXlGcmFtZXMgPSBtX2N1cnJlbnRE
ZWxheVRpbWUgKiBzYW1wbGVSYXRlOwotCi0gICAgICAgIGRvdWJsZSByZWFkUG9zaXRpb24gPSBt
X3dyaXRlSW5kZXggKyBidWZmZXJMZW5ndGggLSBkZXNpcmVkRGVsYXlGcmFtZXM7Ci0gICAgICAg
IGlmIChyZWFkUG9zaXRpb24gPj0gYnVmZmVyTGVuZ3RoKQotICAgICAgICAgICAgcmVhZFBvc2l0
aW9uIC09IGJ1ZmZlckxlbmd0aDsKLQotICAgICAgICAvLyBMaW5lYXJseSBpbnRlcnBvbGF0ZSBp
bi1iZXR3ZWVuIGRlbGF5IHRpbWVzLgotICAgICAgICBpbnQgcmVhZEluZGV4MSA9IHN0YXRpY19j
YXN0PGludD4ocmVhZFBvc2l0aW9uKTsKLSAgICAgICAgaW50IHJlYWRJbmRleDIgPSAocmVhZElu
ZGV4MSArIDEpICUgYnVmZmVyTGVuZ3RoOwotICAgICAgICBkb3VibGUgaW50ZXJwb2xhdGlvbkZh
Y3RvciA9IHJlYWRQb3NpdGlvbiAtIHJlYWRJbmRleDE7Ci0KLSAgICAgICAgZG91YmxlIGlucHV0
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KCpzb3VyY2UrKyk7Ci0gICAgICAgIGJ1ZmZlclttX3dyaXRl
SW5kZXhdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGlucHV0KTsKLSAgICAgICAgbV93cml0ZUluZGV4
ID0gKG1fd3JpdGVJbmRleCArIDEpICUgYnVmZmVyTGVuZ3RoOyAgICAgICAgCi0gICAgICAgIAot
ICAgICAgICBkb3VibGUgc2FtcGxlMSA9IGJ1ZmZlcltyZWFkSW5kZXgxXTsKLSAgICAgICAgZG91
YmxlIHNhbXBsZTIgPSBidWZmZXJbcmVhZEluZGV4Ml07Ci0gICAgICAgIAotICAgICAgICBkb3Vi
bGUgb3V0cHV0ID0gKDEuMCAtIGludGVycG9sYXRpb25GYWN0b3IpICogc2FtcGxlMSArIGludGVy
cG9sYXRpb25GYWN0b3IgKiBzYW1wbGUyOwotCi0gICAgICAgICpkZXN0aW5hdGlvbisrID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG91dHB1dCk7Ci0gICAgfSAgICAgICAgCi19Ci0KLXZvaWQgRGVsYXlE
U1BLZXJuZWw6OnJlc2V0KCkKLXsKLSAgICBtX2ZpcnN0VGltZSA9IHRydWU7Ci0gICAgbV9idWZm
ZXIuemVybygpOwotfQotCi1kb3VibGUgRGVsYXlEU1BLZXJuZWw6OnRhaWxUaW1lKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9tYXhEZWxheVRpbWU7Ci19Ci0KLWRvdWJsZSBEZWxheURTUEtlcm5l
bDo6bGF0ZW5jeVRpbWUoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9EZWxheURTUEtlcm5lbC5oCShyZXZpc2lvbiAxMTE0MzMpCisrKyBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheURTUEtlcm5lbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERlbGF5RFNQS2VybmVsX2gKLSNk
ZWZpbmUgRGVsYXlEU1BLZXJuZWxfaAotCi0jaW5jbHVkZSAiQXVkaW9BcnJheS5oIgotI2luY2x1
ZGUgIkF1ZGlvRFNQS2VybmVsLmgiCi0jaW5jbHVkZSAiRGVsYXlQcm9jZXNzb3IuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBEZWxheVByb2Nlc3NvcjsKLSAgICAKLWNsYXNzIERl
bGF5RFNQS2VybmVsIDogcHVibGljIEF1ZGlvRFNQS2VybmVsIHsKLXB1YmxpYzogIAotICAgIERl
bGF5RFNQS2VybmVsKERlbGF5UHJvY2Vzc29yKik7Ci0gICAgRGVsYXlEU1BLZXJuZWwoZG91Ymxl
IG1heERlbGF5VGltZSwgZmxvYXQgc2FtcGxlUmF0ZSk7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lk
IHByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCBzaXplX3Qg
ZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKLSAgICAKLSAgICBk
b3VibGUgbWF4RGVsYXlUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9tYXhEZWxheVRpbWU7IH0KLSAg
ICAKLSAgICB2b2lkIHNldERlbGF5RnJhbWVzKGRvdWJsZSBudW1iZXJPZkZyYW1lcykgeyBtX2Rl
c2lyZWREZWxheUZyYW1lcyA9IG51bWJlck9mRnJhbWVzOyB9Ci0KLSAgICB2aXJ0dWFsIGRvdWJs
ZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lU
aW1lKCkgY29uc3QgT1ZFUlJJREU7Ci0KLXByaXZhdGU6Ci0gICAgQXVkaW9GbG9hdEFycmF5IG1f
YnVmZmVyOwotICAgIGRvdWJsZSBtX21heERlbGF5VGltZTsKLSAgICBpbnQgbV93cml0ZUluZGV4
OwotICAgIGRvdWJsZSBtX2N1cnJlbnREZWxheVRpbWU7Ci0gICAgZG91YmxlIG1fc21vb3RoaW5n
UmF0ZTsKLSAgICBib29sIG1fZmlyc3RUaW1lOwotICAgIGRvdWJsZSBtX2Rlc2lyZWREZWxheUZy
YW1lczsKLQotICAgIERlbGF5UHJvY2Vzc29yKiBkZWxheVByb2Nlc3NvcigpIHsgcmV0dXJuIHN0
YXRpY19jYXN0PERlbGF5UHJvY2Vzc29yKj4ocHJvY2Vzc29yKCkpOyB9Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBEZWxheURTUEtlcm5lbF9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9EZWxheU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0RlbGF5Tm9kZS5jcHAJKHJldmlzaW9uIDExMTQzMykKKysrIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShX
RUJfQVVESU8pCi0KLSNpbmNsdWRlICJEZWxheU5vZGUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1EZWxheU5vZGU6OkRlbGF5Tm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNh
bXBsZVJhdGUsIGRvdWJsZSBtYXhEZWxheVRpbWUpCi0gICAgOiBBdWRpb0Jhc2ljUHJvY2Vzc29y
Tm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQotewotICAgIG1fcHJvY2Vzc29yID0gYWRvcHRQdHIo
bmV3IERlbGF5UHJvY2Vzc29yKHNhbXBsZVJhdGUsIDEsIG1heERlbGF5VGltZSkpOwotICAgIGRl
bGF5VGltZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwotICAgIHNldE5vZGVUeXBlKE5vZGVUeXBl
RGVsYXkpOwotfQotCi1BdWRpb1BhcmFtKiBEZWxheU5vZGU6OmRlbGF5VGltZSgpCi17Ci0gICAg
cmV0dXJuIGRlbGF5UHJvY2Vzc29yKCktPmRlbGF5VGltZSgpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vRGVsYXlOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vRGVsYXlOb2RlLmgJKHJldmlzaW9uIDExMTQzMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0RlbGF5Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIERlbGF5Tm9kZV9oCi0jZGVmaW5lIERlbGF5Tm9kZV9oCi0KLSNp
bmNsdWRlICJBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oIgotI2luY2x1ZGUgIkRlbGF5UHJvY2Vz
c29yLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBBdWRpb1BhcmFtOwotCi1jbGFzcyBEZWxheU5vZGUgOiBwdWJsaWMgQXVkaW9C
YXNpY1Byb2Nlc3Nvck5vZGUgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERlbGF5
Tm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSwgZG91
YmxlIG1heERlbGF5VGltZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGVs
YXlOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUsIG1heERlbGF5VGltZSkpOyAgICAgIAotICAgIH0K
LQotICAgIEF1ZGlvUGFyYW0qIGRlbGF5VGltZSgpOwotCi1wcml2YXRlOgotICAgIERlbGF5Tm9k
ZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlLCBkb3VibGUgbWF4RGVsYXlUaW1lKTsK
LQotICAgIERlbGF5UHJvY2Vzc29yKiBkZWxheVByb2Nlc3NvcigpIHsgcmV0dXJuIHN0YXRpY19j
YXN0PERlbGF5UHJvY2Vzc29yKj4ocHJvY2Vzc29yKCkpOyB9Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBEZWxheU5vZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vRGVsYXlOb2RlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9EZWxheU5vZGUuaWRsCShyZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9EZWxheU5vZGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi1tb2R1bGUgYXVkaW8gewotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRp
dGlvbmFsPVdFQl9BVURJTywKLSAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKLSAgICBdIERl
bGF5Tm9kZSA6IEF1ZGlvTm9kZSB7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb1Bh
cmFtIGRlbGF5VGltZTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
RGVsYXlQcm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0RlbGF5UHJvY2Vzc29yLmNwcAkocmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
Ci0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FV
RElPKQotCi0jaW5jbHVkZSAiRGVsYXlQcm9jZXNzb3IuaCIKLSAKLSNpbmNsdWRlICJEZWxheURT
UEtlcm5lbC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURlbGF5UHJvY2Vzc29yOjpEZWxh
eVByb2Nlc3NvcihmbG9hdCBzYW1wbGVSYXRlLCB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBk
b3VibGUgbWF4RGVsYXlUaW1lKQotICAgIDogQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3Ioc2FtcGxl
UmF0ZSwgbnVtYmVyT2ZDaGFubmVscykKLSAgICAsIG1fbWF4RGVsYXlUaW1lKG1heERlbGF5VGlt
ZSkKLXsKLSAgICBtX2RlbGF5VGltZSA9IEF1ZGlvUGFyYW06OmNyZWF0ZSgiZGVsYXlUaW1lIiwg
MC4wLCAwLjAsIG1heERlbGF5VGltZSk7Ci19Ci0KLURlbGF5UHJvY2Vzc29yOjp+RGVsYXlQcm9j
ZXNzb3IoKQotewotICAgIGlmIChpc0luaXRpYWxpemVkKCkpCi0gICAgICAgIHVuaW5pdGlhbGl6
ZSgpOwotfQotCi1QYXNzT3duUHRyPEF1ZGlvRFNQS2VybmVsPiBEZWxheVByb2Nlc3Nvcjo6Y3Jl
YXRlS2VybmVsKCkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGF5RFNQS2VybmVsKHRo
aXMpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdF
Ql9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlbGF5UHJvY2Vzc29yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuaAko
cmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVsYXlQcm9jZXNz
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBEZWxheVByb2Nlc3Nvcl9oCi0jZGVmaW5lIERlbGF5UHJvY2Vzc29yX2gKLQotI2luY2x1ZGUg
IkF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmgiCi0jaW5jbHVkZSAiQXVkaW9QYXJhbS5oIgotCi0j
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9EU1BLZXJuZWw7Ci0gICAgCi1jbGFzcyBE
ZWxheVByb2Nlc3NvciA6IHB1YmxpYyBBdWRpb0RTUEtlcm5lbFByb2Nlc3NvciB7Ci1wdWJsaWM6
Ci0gICAgRGVsYXlQcm9jZXNzb3IoZmxvYXQgc2FtcGxlUmF0ZSwgdW5zaWduZWQgbnVtYmVyT2ZD
aGFubmVscywgZG91YmxlIG1heERlbGF5VGltZSk7Ci0gICAgdmlydHVhbCB+RGVsYXlQcm9jZXNz
b3IoKTsKLSAgICAKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8QXVkaW9EU1BLZXJuZWw+IGNyZWF0
ZUtlcm5lbCgpOwotICAgICAgICAKLSAgICBBdWRpb1BhcmFtKiBkZWxheVRpbWUoKSBjb25zdCB7
IHJldHVybiBtX2RlbGF5VGltZS5nZXQoKTsgfQotCi0gICAgZG91YmxlIG1heERlbGF5VGltZSgp
IHsgcmV0dXJuIG1fbWF4RGVsYXlUaW1lOyB9Ci1wcml2YXRlOgotCi0gICAgUmVmUHRyPEF1ZGlv
UGFyYW0+IG1fZGVsYXlUaW1lOwotICAgIGRvdWJsZSBtX21heERlbGF5VGltZTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIERlbGF5UHJvY2Vzc29yX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUu
Y3BwCShyZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWlj
c0NvbXByZXNzb3JOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0K
LSNpbmNsdWRlICJEeW5hbWljc0NvbXByZXNzb3JOb2RlLmgiCi0KLSNpbmNsdWRlICJBdWRpb0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9k
ZU91dHB1dC5oIgotI2luY2x1ZGUgIkR5bmFtaWNzQ29tcHJlc3Nvci5oIgotCi0vLyBTZXQgb3V0
cHV0IHRvIHN0ZXJlbyBieSBkZWZhdWx0Lgotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRO
dW1iZXJPZk91dHB1dENoYW5uZWxzID0gMjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1EeW5h
bWljc0NvbXByZXNzb3JOb2RlOjpEeW5hbWljc0NvbXByZXNzb3JOb2RlKEF1ZGlvQ29udGV4dCog
Y29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1w
bGVSYXRlKQotewotICAgIGFkZElucHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVJbnB1dCh0aGlz
KSkpOwotICAgIGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMsIGRl
ZmF1bHROdW1iZXJPZk91dHB1dENoYW5uZWxzKSkpOwotCi0gICAgc2V0Tm9kZVR5cGUoTm9kZVR5
cGVEeW5hbWljc0NvbXByZXNzb3IpOwotCi0gICAgbV90aHJlc2hvbGQgPSBBdWRpb1BhcmFtOjpj
cmVhdGUoInRocmVzaG9sZCIsIC0yNCwgLTEwMCwgMCk7Ci0gICAgbV9rbmVlID0gQXVkaW9QYXJh
bTo6Y3JlYXRlKCJrbmVlIiwgMzAsIDAsIDQwKTsKLSAgICBtX3JhdGlvID0gQXVkaW9QYXJhbTo6
Y3JlYXRlKCJyYXRpbyIsIDEyLCAxLCAyMCk7Ci0gICAgbV9yZWR1Y3Rpb24gPSBBdWRpb1BhcmFt
OjpjcmVhdGUoInJlZHVjdGlvbiIsIDAsIC0yMCwgMCk7Ci0KLSAgICBtX3RocmVzaG9sZC0+c2V0
Q29udGV4dChjb250ZXh0KTsKLSAgICBtX2tuZWUtPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAg
bV9yYXRpby0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICBtX3JlZHVjdGlvbi0+c2V0Q29udGV4
dChjb250ZXh0KTsKLQotICAgIGluaXRpYWxpemUoKTsKLX0KLQotRHluYW1pY3NDb21wcmVzc29y
Tm9kZTo6fkR5bmFtaWNzQ29tcHJlc3Nvck5vZGUoKQotewotICAgIHVuaW5pdGlhbGl6ZSgpOwot
fQotCi12b2lkIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OnByb2Nlc3Moc2l6ZV90IGZyYW1lc1Rv
UHJvY2VzcykKLXsKLSAgICBBdWRpb0J1cyogb3V0cHV0QnVzID0gb3V0cHV0KDApLT5idXMoKTsK
LSAgICBBU1NFUlQob3V0cHV0QnVzKTsKLQotICAgIGZsb2F0IHRocmVzaG9sZCA9IG1fdGhyZXNo
b2xkLT52YWx1ZSgpOwotICAgIGZsb2F0IGtuZWUgPSBtX2tuZWUtPnZhbHVlKCk7Ci0gICAgZmxv
YXQgcmF0aW8gPSBtX3JhdGlvLT52YWx1ZSgpOwotCi0gICAgbV9keW5hbWljc0NvbXByZXNzb3It
PnNldFBhcmFtZXRlclZhbHVlKER5bmFtaWNzQ29tcHJlc3Nvcjo6UGFyYW1UaHJlc2hvbGQsIHRo
cmVzaG9sZCk7Ci0gICAgbV9keW5hbWljc0NvbXByZXNzb3ItPnNldFBhcmFtZXRlclZhbHVlKER5
bmFtaWNzQ29tcHJlc3Nvcjo6UGFyYW1LbmVlLCBrbmVlKTsKLSAgICBtX2R5bmFtaWNzQ29tcHJl
c3Nvci0+c2V0UGFyYW1ldGVyVmFsdWUoRHluYW1pY3NDb21wcmVzc29yOjpQYXJhbVJhdGlvLCBy
YXRpbyk7Ci0KLSAgICBtX2R5bmFtaWNzQ29tcHJlc3Nvci0+cHJvY2VzcyhpbnB1dCgwKS0+YnVz
KCksIG91dHB1dEJ1cywgZnJhbWVzVG9Qcm9jZXNzKTsKLQotICAgIGZsb2F0IHJlZHVjdGlvbiA9
IG1fZHluYW1pY3NDb21wcmVzc29yLT5wYXJhbWV0ZXJWYWx1ZShEeW5hbWljc0NvbXByZXNzb3I6
OlBhcmFtUmVkdWN0aW9uKTsKLSAgICBtX3JlZHVjdGlvbi0+c2V0VmFsdWUocmVkdWN0aW9uKTsK
LX0KLQotdm9pZCBEeW5hbWljc0NvbXByZXNzb3JOb2RlOjpyZXNldCgpCi17Ci0gICAgbV9keW5h
bWljc0NvbXByZXNzb3ItPnJlc2V0KCk7Ci19Ci0KLXZvaWQgRHluYW1pY3NDb21wcmVzc29yTm9k
ZTo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgaWYgKGlzSW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7ICAgIAotICAgIG1fZHluYW1pY3ND
b21wcmVzc29yID0gYWRvcHRQdHIobmV3IER5bmFtaWNzQ29tcHJlc3NvcihzYW1wbGVSYXRlKCks
IGRlZmF1bHROdW1iZXJPZk91dHB1dENoYW5uZWxzKSk7Ci19Ci0KLXZvaWQgRHluYW1pY3NDb21w
cmVzc29yTm9kZTo6dW5pbml0aWFsaXplKCkKLXsKLSAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9keW5hbWljc0NvbXByZXNzb3IuY2xlYXIoKTsKLSAg
ICBBdWRpb05vZGU6OnVuaW5pdGlhbGl6ZSgpOwotfQotCi1kb3VibGUgRHluYW1pY3NDb21wcmVz
c29yTm9kZTo6dGFpbFRpbWUoKSBjb25zdAotewotICAgIHJldHVybiBtX2R5bmFtaWNzQ29tcHJl
c3Nvci0+dGFpbFRpbWUoKTsKLX0KLQotZG91YmxlIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6Omxh
dGVuY3lUaW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9keW5hbWljc0NvbXByZXNzb3ItPmxh
dGVuY3lUaW1lKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVO
QUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0Nv
bXByZXNzb3JOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHlu
YW1pY3NDb21wcmVzc29yTm9kZS5oCShyZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRHluYW1pY3NDb21wcmVzc29yTm9kZV9o
Ci0jZGVmaW5lIER5bmFtaWNzQ29tcHJlc3Nvck5vZGVfaAotCi0jaW5jbHVkZSAiQXVkaW9Ob2Rl
LmgiCi0jaW5jbHVkZSAiQXVkaW9QYXJhbS5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBEeW5hbWljc0NvbXByZXNzb3I7Ci0KLWNsYXNz
IER5bmFtaWNzQ29tcHJlc3Nvck5vZGUgOiBwdWJsaWMgQXVkaW9Ob2RlIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxEeW5hbWljc0NvbXByZXNzb3JOb2RlPiBjcmVhdGUoQXVkaW9D
b250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBEeW5hbWljc0NvbXByZXNzb3JOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUp
KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5EeW5hbWljc0NvbXByZXNzb3JOb2RlKCk7Ci0KLSAg
ICAvLyBBdWRpb05vZGUKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Q
cm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5p
dGlhbGl6ZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1bmluaXRpYWxpemUoKTsKLQotICAgIC8vIFN0
YXRpYyBjb21wcmVzc2lvbiBjdXJ2ZSBwYXJhbWV0ZXJzLgotICAgIEF1ZGlvUGFyYW0qIHRocmVz
aG9sZCgpIHsgcmV0dXJuIG1fdGhyZXNob2xkLmdldCgpOyB9Ci0gICAgQXVkaW9QYXJhbSoga25l
ZSgpIHsgcmV0dXJuIG1fa25lZS5nZXQoKTsgfQotICAgIEF1ZGlvUGFyYW0qIHJhdGlvKCkgeyBy
ZXR1cm4gbV9yYXRpby5nZXQoKTsgfQotCi0gICAgLy8gQW1vdW50IGJ5IHdoaWNoIHRoZSBjb21w
cmVzc29yIGlzIGN1cnJlbnRseSBjb21wcmVzc2luZyB0aGUgc2lnbmFsIGluIGRlY2liZWxzLgot
ICAgIEF1ZGlvUGFyYW0qIHJlZHVjdGlvbigpIHsgcmV0dXJuIG1fcmVkdWN0aW9uLmdldCgpOyB9
Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFOwotCi0g
ICAgRHluYW1pY3NDb21wcmVzc29yTm9kZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRl
KTsKLQotICAgIE93blB0cjxEeW5hbWljc0NvbXByZXNzb3I+IG1fZHluYW1pY3NDb21wcmVzc29y
OwotICAgIFJlZlB0cjxBdWRpb1BhcmFtPiBtX3RocmVzaG9sZDsKLSAgICBSZWZQdHI8QXVkaW9Q
YXJhbT4gbV9rbmVlOwotICAgIFJlZlB0cjxBdWRpb1BhcmFtPiBtX3JhdGlvOwotICAgIFJlZlB0
cjxBdWRpb1BhcmFtPiBtX3JlZHVjdGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIER5bmFtaWNzQ29tcHJlc3Nvck5vZGVfaApJbmRleDogU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5pZGwJKHJldmlzaW9u
IDExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5v
ZGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1
bGUgYXVkaW8gewotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJ
TywKLSAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKLSAgICBdIER5bmFtaWNzQ29tcHJlc3Nv
ck5vZGUgOiBBdWRpb05vZGUgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9QYXJh
bSB0aHJlc2hvbGQ7IC8vIGluIERlY2liZWxzCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBB
dWRpb1BhcmFtIGtuZWU7IC8vIGluIERlY2liZWxzCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBBdWRpb1BhcmFtIHJhdGlvOyAvLyB1bml0LWxlc3MKLSAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIEF1ZGlvUGFyYW0gcmVkdWN0aW9uOyAvLyBpbiBEZWNpYmVscwotICAgIH07Ci19CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmNwcAko
cmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSGlnaFBhc3MyRmls
dGVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0g
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRl
ICJIaWdoUGFzczJGaWx0ZXJOb2RlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSGlnaFBh
c3MyRmlsdGVyTm9kZTo6SGlnaFBhc3MyRmlsdGVyTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQs
IGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZShjb250ZXh0
LCBzYW1wbGVSYXRlKQotewotICAgIG1fcHJvY2Vzc29yID0gYWRvcHRQdHIobmV3IEJpcXVhZFBy
b2Nlc3NvcihCaXF1YWRQcm9jZXNzb3I6OkhpZ2hQYXNzLCBzYW1wbGVSYXRlLCAxLCBmYWxzZSkp
OwotICAgIGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIxKCktPnNldENvbnRleHQoY29udGV4
dCk7Ci0gICAgYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjIoKS0+c2V0Q29udGV4dChjb250
ZXh0KTsKLSAgICBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMygpLT5zZXRDb250ZXh0KGNv
bnRleHQpOwotICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlSGlnaFBhc3MyRmlsdGVyKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9IaWdoUGFzczJGaWx0ZXJOb2RlLmgJKHJl
dmlzaW9uIDExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRl
ck5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBIaWdoUGFzczJGaWx0ZXJOb2RlX2gKLSNkZWZpbmUgSGlnaFBhc3MyRmlsdGVyTm9kZV9o
Ci0KLSNpbmNsdWRlICJBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oIgotI2luY2x1ZGUgIkJpcXVh
ZFByb2Nlc3Nvci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvUGFyYW07
Ci0gICAgCi1jbGFzcyBIaWdoUGFzczJGaWx0ZXJOb2RlIDogcHVibGljIEF1ZGlvQmFzaWNQcm9j
ZXNzb3JOb2RlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxIaWdoUGFzczJGaWx0
ZXJOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIaWdoUGFzczJGaWx0ZXJOb2RlKGNv
bnRleHQsIHNhbXBsZVJhdGUpKTsgICAgICAKLSAgICB9Ci0KLSAgICBBdWRpb1BhcmFtKiBjdXRv
ZmYoKSB7IHJldHVybiBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMSgpOyB9Ci0gICAgQXVk
aW9QYXJhbSogcmVzb25hbmNlKCkgeyByZXR1cm4gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRl
cjIoKTsgfQotICAgIAotcHJpdmF0ZToKLSAgICBIaWdoUGFzczJGaWx0ZXJOb2RlKEF1ZGlvQ29u
dGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwotCi0gICAgQmlxdWFkUHJvY2Vzc29yKiBiaXF1YWRQ
cm9jZXNzb3IoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxCaXF1YWRQcm9jZXNzb3IqPihwcm9jZXNz
b3IoKSk7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEhpZ2hQ
YXNzMkZpbHRlck5vZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSGlnaFBhc3My
RmlsdGVyTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSGln
aFBhc3MyRmlsdGVyTm9kZS5pZGwJKHJldmlzaW9uIDExMTQzMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgYXVkaW8gewotICAgIC8vIFR3by1wb2xlIGhp
Z2hwYXNzIGZpbHRlcgotICAgIC8vIEZJWE1FOiBkZXNpZ24gQmlxdWFkTm9kZSBhbmQgdXNlIGlu
c3RlYWQgb2YgdGhpcwotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9B
VURJTywKLSAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKLSAgICBdIEhpZ2hQYXNzMkZpbHRl
ck5vZGUgOiBBdWRpb05vZGUgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9QYXJh
bSBjdXRvZmY7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIHJlc29uYW5j
ZTsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSmF2YVNjcmlwdEF1
ZGlvTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSmF2YVNj
cmlwdEF1ZGlvTm9kZS5jcHAJKHJldmlzaW9uIDExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI4MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdF
Ql9BVURJTykKLQotI2luY2x1ZGUgIkphdmFTY3JpcHRBdWRpb05vZGUuaCIKLQotI2luY2x1ZGUg
IkF1ZGlvQnVmZmVyLmgiCi0jaW5jbHVkZSAiQXVkaW9CdXMuaCIKLSNpbmNsdWRlICJBdWRpb0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9k
ZU91dHB1dC5oIgotI2luY2x1ZGUgIkF1ZGlvUHJvY2Vzc2luZ0V2ZW50LmgiCi0jaW5jbHVkZSAi
RG9jdW1lbnQuaCIKLSNpbmNsdWRlIDx3dGYvRmxvYXQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jb25zdCBzaXplX3QgRGVm
YXVsdEJ1ZmZlclNpemUgPSA0MDk2OwotCi1QYXNzUmVmUHRyPEphdmFTY3JpcHRBdWRpb05vZGU+
IEphdmFTY3JpcHRBdWRpb05vZGU6OmNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0
IHNhbXBsZVJhdGUsIHNpemVfdCBidWZmZXJTaXplLCB1bnNpZ25lZCBudW1iZXJPZklucHV0cywg
dW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRzKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSmF2
YVNjcmlwdEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlLCBidWZmZXJTaXplLCBudW1iZXJP
ZklucHV0cywgbnVtYmVyT2ZPdXRwdXRzKSk7Ci19Ci0KLUphdmFTY3JpcHRBdWRpb05vZGU6Okph
dmFTY3JpcHRBdWRpb05vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRl
LCBzaXplX3QgYnVmZmVyU2l6ZSwgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dHMsIHVuc2lnbmVkIG51
bWJlck9mT3V0cHV0cykKLSAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQotICAg
ICwgbV9kb3VibGVCdWZmZXJJbmRleCgwKQotICAgICwgbV9kb3VibGVCdWZmZXJJbmRleEZvckV2
ZW50KDApCi0gICAgLCBtX2J1ZmZlclNpemUoYnVmZmVyU2l6ZSkKLSAgICAsIG1fYnVmZmVyUmVh
ZFdyaXRlSW5kZXgoMCkKLSAgICAsIG1faXNSZXF1ZXN0T3V0c3RhbmRpbmcoZmFsc2UpCi17Ci0g
ICAgLy8gQ2hlY2sgZm9yIHZhbGlkIGJ1ZmZlciBzaXplLgotICAgIHN3aXRjaCAoYnVmZmVyU2l6
ZSkgewotICAgIGNhc2UgMjU2OgotICAgIGNhc2UgNTEyOgotICAgIGNhc2UgMTAyNDoKLSAgICBj
YXNlIDIwNDg6Ci0gICAgY2FzZSA0MDk2OgotICAgIGNhc2UgODE5MjoKLSAgICBjYXNlIDE2Mzg0
OgotICAgICAgICBtX2J1ZmZlclNpemUgPSBidWZmZXJTaXplOwotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBtX2J1ZmZlclNpemUgPSBEZWZhdWx0QnVmZmVyU2l6ZTsKLSAg
ICB9Ci0gICAgICAgIAotICAgIC8vIFJlZ2FyZGxlc3Mgb2YgdGhlIGFsbG93ZWQgYnVmZmVyIHNp
emVzIGFib3ZlLCB3ZSBzdGlsbCBuZWVkIHRvIHByb2Nlc3MgYXQgdGhlIGdyYW51bGFyaXR5IG9m
IHRoZSBBdWRpb05vZGUuCi0gICAgaWYgKG1fYnVmZmVyU2l6ZSA8IEF1ZGlvTm9kZTo6UHJvY2Vz
c2luZ1NpemVJbkZyYW1lcykKLSAgICAgICAgbV9idWZmZXJTaXplID0gQXVkaW9Ob2RlOjpQcm9j
ZXNzaW5nU2l6ZUluRnJhbWVzOwotCi0gICAgLy8gRklYTUU6IFJpZ2h0IG5vdyB3ZSdyZSBoYXJk
Y29kZWQgdG8gc2luZ2xlIGlucHV0IGFuZCBzaW5nbGUgb3V0cHV0LgotICAgIC8vIEFsdGhvdWdo
IHRoZSBzcGVjaWZpY2F0aW9uIHNheXMgdGhpcyBpcyBPSyBmb3IgYSBzaW1wbGUgaW1wbGVtZW50
YXRpb24sIG11bHRpcGxlIGlucHV0cyBhbmQgb3V0cHV0cyB3b3VsZCBiZSBnb29kLgotICAgIEFT
U0VSVF9VTlVTRUQobnVtYmVyT2ZJbnB1dHMsIG51bWJlck9mSW5wdXRzID09IDEpOwotICAgIEFT
U0VSVF9VTlVTRUQobnVtYmVyT2ZPdXRwdXRzLCBudW1iZXJPZk91dHB1dHMgPT0gMSk7Ci0gICAg
YWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7Ci0gICAgYWRkT3V0
cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywgMikpKTsKLQotICAgIHNldE5v
ZGVUeXBlKE5vZGVUeXBlSmF2YVNjcmlwdCk7Ci0KLSAgICBpbml0aWFsaXplKCk7Ci19Ci0KLUph
dmFTY3JpcHRBdWRpb05vZGU6On5KYXZhU2NyaXB0QXVkaW9Ob2RlKCkKLXsKLSAgICB1bmluaXRp
YWxpemUoKTsKLX0KLQotdm9pZCBKYXZhU2NyaXB0QXVkaW9Ob2RlOjppbml0aWFsaXplKCkKLXsK
LSAgICBpZiAoaXNJbml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCBz
YW1wbGVSYXRlID0gY29udGV4dCgpLT5zYW1wbGVSYXRlKCk7Ci0KLSAgICAvLyBDcmVhdGUgZG91
YmxlIGJ1ZmZlcnMgb24gYm90aCB0aGUgaW5wdXQgYW5kIG91dHB1dCBzaWRlcy4KLSAgICAvLyBU
aGVzZSBBdWRpb0J1ZmZlcnMgd2lsbCBiZSBkaXJlY3RseSBhY2Nlc3NlZCBpbiB0aGUgbWFpbiB0
aHJlYWQgYnkgSmF2YVNjcmlwdC4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjsgKytp
KSB7Ci0gICAgICAgIG1faW5wdXRCdWZmZXJzLmFwcGVuZChBdWRpb0J1ZmZlcjo6Y3JlYXRlKDIs
IGJ1ZmZlclNpemUoKSwgc2FtcGxlUmF0ZSkpOwotICAgICAgICBtX291dHB1dEJ1ZmZlcnMuYXBw
ZW5kKEF1ZGlvQnVmZmVyOjpjcmVhdGUoMiwgYnVmZmVyU2l6ZSgpLCBzYW1wbGVSYXRlKSk7Ci0g
ICAgfQotCi0gICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgSmF2YVNjcmlw
dEF1ZGlvTm9kZTo6dW5pbml0aWFsaXplKCkKLXsKLSAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbnB1dEJ1ZmZlcnMuY2xlYXIoKTsKLSAgICBtX291
dHB1dEJ1ZmZlcnMuY2xlYXIoKTsKLQotICAgIEF1ZGlvTm9kZTo6dW5pbml0aWFsaXplKCk7Ci19
Ci0KLXZvaWQgSmF2YVNjcmlwdEF1ZGlvTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9j
ZXNzKQotewotICAgIC8vIERpc2N1c3Npb24gYWJvdXQgaW5wdXRzIGFuZCBvdXRwdXRzOgotICAg
IC8vIEFzIGluIG90aGVyIEF1ZGlvTm9kZXMsIEphdmFTY3JpcHRBdWRpb05vZGUgdXNlcyBhbiBB
dWRpb0J1cyBmb3IgaXRzIGlucHV0IGFuZCBvdXRwdXQgKHNlZSBpbnB1dEJ1cyBhbmQgb3V0cHV0
QnVzIGJlbG93KS4KLSAgICAvLyBBZGRpdGlvbmFsbHksIHRoZXJlIGlzIGEgZG91YmxlLWJ1ZmZl
cmluZyBmb3IgaW5wdXQgYW5kIG91dHB1dCB3aGljaCBpcyBleHBvc2VkIGRpcmVjdGx5IHRvIEph
dmFTY3JpcHQgKHNlZSBpbnB1dEJ1ZmZlciBhbmQgb3V0cHV0QnVmZmVyIGJlbG93KS4KLSAgICAv
LyBUaGlzIG5vZGUgaXMgdGhlIHByb2R1Y2VyIGZvciBpbnB1dEJ1ZmZlciBhbmQgdGhlIGNvbnN1
bWVyIGZvciBvdXRwdXRCdWZmZXIuCi0gICAgLy8gVGhlIEphdmFTY3JpcHQgY29kZSBpcyB0aGUg
Y29uc3VtZXIgb2YgaW5wdXRCdWZmZXIgYW5kIHRoZSBwcm9kdWNlciBmb3Igb3V0cHV0QnVmZmVy
LgotICAgIAotICAgIC8vIEdldCBpbnB1dCBhbmQgb3V0cHV0IGJ1c3Nlcy4KLSAgICBBdWRpb0J1
cyogaW5wdXRCdXMgPSB0aGlzLT5pbnB1dCgwKS0+YnVzKCk7Ci0gICAgQXVkaW9CdXMqIG91dHB1
dEJ1cyA9IHRoaXMtPm91dHB1dCgwKS0+YnVzKCk7Ci0KLSAgICAvLyBHZXQgaW5wdXQgYW5kIG91
dHB1dCBidWZmZXJzLiAgV2UgZG91YmxlLWJ1ZmZlciBib3RoIHRoZSBpbnB1dCBhbmQgb3V0cHV0
IHNpZGVzLgotICAgIHVuc2lnbmVkIGRvdWJsZUJ1ZmZlckluZGV4ID0gdGhpcy0+ZG91YmxlQnVm
ZmVySW5kZXgoKTsKLSAgICBib29sIGlzRG91YmxlQnVmZmVySW5kZXhHb29kID0gZG91YmxlQnVm
ZmVySW5kZXggPCAyICYmIGRvdWJsZUJ1ZmZlckluZGV4IDwgbV9pbnB1dEJ1ZmZlcnMuc2l6ZSgp
ICYmIGRvdWJsZUJ1ZmZlckluZGV4IDwgbV9vdXRwdXRCdWZmZXJzLnNpemUoKTsKLSAgICBBU1NF
UlQoaXNEb3VibGVCdWZmZXJJbmRleEdvb2QpOwotICAgIGlmICghaXNEb3VibGVCdWZmZXJJbmRl
eEdvb2QpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBBdWRpb0J1ZmZlciogaW5wdXRCdWZm
ZXIgPSBtX2lucHV0QnVmZmVyc1tkb3VibGVCdWZmZXJJbmRleF0uZ2V0KCk7Ci0gICAgQXVkaW9C
dWZmZXIqIG91dHB1dEJ1ZmZlciA9IG1fb3V0cHV0QnVmZmVyc1tkb3VibGVCdWZmZXJJbmRleF0u
Z2V0KCk7Ci0KLSAgICAvLyBDaGVjayB0aGUgY29uc2lzdGVuY3kgb2YgaW5wdXQgYW5kIG91dHB1
dCBidWZmZXJzLgotICAgIGJvb2wgYnVmZmVyc0FyZUdvb2QgPSBpbnB1dEJ1ZmZlciAmJiBvdXRw
dXRCdWZmZXIgJiYgYnVmZmVyU2l6ZSgpID09IGlucHV0QnVmZmVyLT5sZW5ndGgoKSAmJiBidWZm
ZXJTaXplKCkgPT0gb3V0cHV0QnVmZmVyLT5sZW5ndGgoKQotICAgICAgICAmJiBtX2J1ZmZlclJl
YWRXcml0ZUluZGV4ICsgZnJhbWVzVG9Qcm9jZXNzIDw9IGJ1ZmZlclNpemUoKTsKLSAgICBBU1NF
UlQoYnVmZmVyc0FyZUdvb2QpOwotICAgIGlmICghYnVmZmVyc0FyZUdvb2QpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIFdlIGFzc3VtZSB0aGF0IGJ1ZmZlclNpemUoKSBpcyBldmVubHkgZGl2
aXNpYmxlIGJ5IGZyYW1lc1RvUHJvY2VzcyAtIHNob3VsZCBhbHdheXMgYmUgdHJ1ZSwgYnV0IHdl
IHNob3VsZCBzdGlsbCBjaGVjay4KLSAgICBib29sIGlzRnJhbWVzVG9Qcm9jZXNzR29vZCA9IGZy
YW1lc1RvUHJvY2VzcyAmJiBidWZmZXJTaXplKCkgPj0gZnJhbWVzVG9Qcm9jZXNzICYmICEoYnVm
ZmVyU2l6ZSgpICUgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICBBU1NFUlQoaXNGcmFtZXNUb1Byb2Nl
c3NHb29kKTsKLSAgICBpZiAoIWlzRnJhbWVzVG9Qcm9jZXNzR29vZCkKLSAgICAgICAgcmV0dXJu
OwotICAgICAgICAKLSAgICB1bnNpZ25lZCBudW1iZXJPZklucHV0Q2hhbm5lbHMgPSBpbnB1dEJ1
cy0+bnVtYmVyT2ZDaGFubmVscygpOwotICAgIAotICAgIGJvb2wgY2hhbm5lbHNBcmVHb29kID0g
KG51bWJlck9mSW5wdXRDaGFubmVscyA9PSAxIHx8IG51bWJlck9mSW5wdXRDaGFubmVscyA9PSAy
KSAmJiBvdXRwdXRCdXMtPm51bWJlck9mQ2hhbm5lbHMoKSA9PSAyOwotICAgIEFTU0VSVChjaGFu
bmVsc0FyZUdvb2QpOwotICAgIGlmICghY2hhbm5lbHNBcmVHb29kKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBjb25zdCBmbG9hdCogc291cmNlTCA9IGlucHV0QnVzLT5jaGFubmVsKDApLT5kYXRh
KCk7Ci0gICAgY29uc3QgZmxvYXQqIHNvdXJjZVIgPSBudW1iZXJPZklucHV0Q2hhbm5lbHMgPiAx
ID8gaW5wdXRCdXMtPmNoYW5uZWwoMSktPmRhdGEoKSA6IDA7Ci0gICAgZmxvYXQqIGRlc3RpbmF0
aW9uTCA9IG91dHB1dEJ1cy0+Y2hhbm5lbCgwKS0+bXV0YWJsZURhdGEoKTsKLSAgICBmbG9hdCog
ZGVzdGluYXRpb25SID0gb3V0cHV0QnVzLT5jaGFubmVsKDEpLT5tdXRhYmxlRGF0YSgpOwotCi0g
ICAgLy8gQ29weSBmcm9tIHRoZSBpbnB1dCB0byB0aGUgaW5wdXQgYnVmZmVyLiAgU2VlICJidWZm
ZXJzQXJlR29vZCIgY2hlY2sgYWJvdmUgZm9yIHNhZmV0eS4KLSAgICBzaXplX3QgYnl0ZXNUb0Nv
cHkgPSBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNzOwotICAgIG1lbWNweShpbnB1dEJ1
ZmZlci0+Z2V0Q2hhbm5lbERhdGEoMCktPmRhdGEoKSArIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXgs
IHNvdXJjZUwsIGJ5dGVzVG9Db3B5KTsKLSAgICAKLSAgICBpZiAobnVtYmVyT2ZJbnB1dENoYW5u
ZWxzID09IDIpCi0gICAgICAgIG1lbWNweShpbnB1dEJ1ZmZlci0+Z2V0Q2hhbm5lbERhdGEoMSkt
PmRhdGEoKSArIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXgsIHNvdXJjZVIsIGJ5dGVzVG9Db3B5KTsK
LSAgICBlbHNlIGlmIChudW1iZXJPZklucHV0Q2hhbm5lbHMgPT0gMSkgewotICAgICAgICAvLyBJ
ZiB0aGUgaW5wdXQgaXMgbW9ubywgdGhlbiBhbHNvIGNvcHkgdGhlIG1vbm8gaW5wdXQgdG8gdGhl
IHJpZ2h0IGNoYW5uZWwgb2YgdGhlIEF1ZGlvQnVmZmVyIHdoaWNoIHRoZSBBdWRpb1Byb2Nlc3Np
bmdFdmVudCB1c2VzLgotICAgICAgICAvLyBGSVhNRTogaXQgaXMgbGlrZWx5IHRoZSBhdWRpbyBB
UEkgd2lsbCBldm9sdmUgdG8gcHJlc2VudCBhbiBBdWRpb0J1ZmZlciB3aXRoIHRoZSBzYW1lIG51
bWJlciBvZiBjaGFubmVscyBhcyBvdXIgaW5wdXQuCi0gICAgICAgIG1lbWNweShpbnB1dEJ1ZmZl
ci0+Z2V0Q2hhbm5lbERhdGEoMSktPmRhdGEoKSArIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXgsIHNv
dXJjZUwsIGJ5dGVzVG9Db3B5KTsKLSAgICB9Ci0gICAgCi0gICAgLy8gQ29weSBmcm9tIHRoZSBv
dXRwdXQgYnVmZmVyIHRvIHRoZSBvdXRwdXQuICBTZWUgImJ1ZmZlcnNBcmVHb29kIiBjaGVjayBh
Ym92ZSBmb3Igc2FmZXR5LgotICAgIG1lbWNweShkZXN0aW5hdGlvbkwsIG91dHB1dEJ1ZmZlci0+
Z2V0Q2hhbm5lbERhdGEoMCktPmRhdGEoKSArIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXgsIGJ5dGVz
VG9Db3B5KTsKLSAgICBtZW1jcHkoZGVzdGluYXRpb25SLCBvdXRwdXRCdWZmZXItPmdldENoYW5u
ZWxEYXRhKDEpLT5kYXRhKCkgKyBtX2J1ZmZlclJlYWRXcml0ZUluZGV4LCBieXRlc1RvQ29weSk7
Ci0KLSAgICAvLyBVcGRhdGUgdGhlIGJ1ZmZlcmluZyBpbmRleC4KLSAgICBtX2J1ZmZlclJlYWRX
cml0ZUluZGV4ID0gKG1fYnVmZmVyUmVhZFdyaXRlSW5kZXggKyBmcmFtZXNUb1Byb2Nlc3MpICUg
YnVmZmVyU2l6ZSgpOwotCi0gICAgLy8gbV9idWZmZXJSZWFkV3JpdGVJbmRleCB3aWxsIHdyYXAg
YmFjayBhcm91bmQgdG8gMCB3aGVuIHRoZSBjdXJyZW50IGlucHV0IGFuZCBvdXRwdXQgYnVmZmVy
cyBhcmUgZnVsbC4KLSAgICAvLyBXaGVuIHRoaXMgaGFwcGVucywgZmlyZSBhbiBldmVudCBhbmQg
c3dhcCBidWZmZXJzLgotICAgIGlmICghbV9idWZmZXJSZWFkV3JpdGVJbmRleCkgewotICAgICAg
ICAvLyBBdm9pZCBidWlsZGluZyB1cCByZXF1ZXN0cyBvbiB0aGUgbWFpbiB0aHJlYWQgdG8gZmly
ZSBwcm9jZXNzIGV2ZW50cyB3aGVuIHRoZXkncmUgbm90IGJlaW5nIGhhbmRsZWQuCi0gICAgICAg
IC8vIFRoaXMgY291bGQgYmUgYSBwcm9ibGVtIGlmIHRoZSBtYWluIHRocmVhZCBpcyB2ZXJ5IGJ1
c3kgZG9pbmcgb3RoZXIgdGhpbmdzIGFuZCBpcyBiZWluZyBoZWxkIHVwIGhhbmRsaW5nIHByZXZp
b3VzIHJlcXVlc3RzLgotICAgICAgICBpZiAobV9pc1JlcXVlc3RPdXRzdGFuZGluZykgewotICAg
ICAgICAgICAgLy8gV2UncmUgbGF0ZSBpbiBoYW5kbGluZyB0aGUgcHJldmlvdXMgcmVxdWVzdC4g
IFRoZSBtYWluIHRocmVhZCBtdXN0IGJlIHZlcnkgYnVzeS4KLSAgICAgICAgICAgIC8vIFRoZSBi
ZXN0IHdlIGNhbiBkbyBpcyBjbGVhciBvdXQgdGhlIGJ1ZmZlciBvdXJzZWxmIGhlcmUuCi0gICAg
ICAgICAgICBvdXRwdXRCdWZmZXItPnplcm8oKTsgICAgICAgICAgICAKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIC8vIFJlZmVyZW5jZSBvdXJzZWxmIHNvIHdlIGRvbid0IGFjY2lkZW50
YWxseSBnZXQgZGVsZXRlZCBiZWZvcmUgZmlyZVByb2Nlc3NFdmVudCgpIGdldHMgY2FsbGVkLgot
ICAgICAgICAgICAgcmVmKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZpcmUgdGhl
IGV2ZW50IG9uIHRoZSBtYWluIHRocmVhZCwgbm90IHRoaXMgb25lICh3aGljaCBpcyB0aGUgcmVh
bHRpbWUgYXVkaW8gdGhyZWFkKS4KLSAgICAgICAgICAgIG1fZG91YmxlQnVmZmVySW5kZXhGb3JF
dmVudCA9IG1fZG91YmxlQnVmZmVySW5kZXg7Ci0gICAgICAgICAgICBtX2lzUmVxdWVzdE91dHN0
YW5kaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoZmlyZVByb2Nlc3NF
dmVudERpc3BhdGNoLCB0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3YXBCdWZmZXJzKCk7
Ci0gICAgfQotfQotCi12b2lkIEphdmFTY3JpcHRBdWRpb05vZGU6OmZpcmVQcm9jZXNzRXZlbnRE
aXNwYXRjaCh2b2lkKiB1c2VyRGF0YSkKLXsKLSAgICBKYXZhU2NyaXB0QXVkaW9Ob2RlKiBqc0F1
ZGlvTm9kZSA9IHN0YXRpY19jYXN0PEphdmFTY3JpcHRBdWRpb05vZGUqPih1c2VyRGF0YSk7Ci0g
ICAgQVNTRVJUKGpzQXVkaW9Ob2RlKTsKLSAgICBpZiAoIWpzQXVkaW9Ob2RlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBqc0F1ZGlvTm9kZS0+ZmlyZVByb2Nlc3NFdmVudCgpOwotCi0gICAgLy8g
RGUtcmVmZXJlbmNlIHRvIG1hdGNoIHRoZSByZWYoKSBjYWxsIGluIHByb2Nlc3MoKS4KLSAgICBq
c0F1ZGlvTm9kZS0+ZGVyZWYoKTsKLX0KLQotdm9pZCBKYXZhU2NyaXB0QXVkaW9Ob2RlOjpmaXJl
UHJvY2Vzc0V2ZW50KCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkgJiYgbV9pc1JlcXVl
c3RPdXRzdGFuZGluZyk7Ci0gICAgCi0gICAgYm9vbCBpc0luZGV4R29vZCA9IG1fZG91YmxlQnVm
ZmVySW5kZXhGb3JFdmVudCA8IDI7Ci0gICAgQVNTRVJUKGlzSW5kZXhHb29kKTsKLSAgICBpZiAo
IWlzSW5kZXhHb29kKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIEF1ZGlvQnVmZmVy
KiBpbnB1dEJ1ZmZlciA9IG1faW5wdXRCdWZmZXJzW21fZG91YmxlQnVmZmVySW5kZXhGb3JFdmVu
dF0uZ2V0KCk7Ci0gICAgQXVkaW9CdWZmZXIqIG91dHB1dEJ1ZmZlciA9IG1fb3V0cHV0QnVmZmVy
c1ttX2RvdWJsZUJ1ZmZlckluZGV4Rm9yRXZlbnRdLmdldCgpOwotICAgIEFTU0VSVChpbnB1dEJ1
ZmZlciAmJiBvdXRwdXRCdWZmZXIpOwotICAgIGlmICghaW5wdXRCdWZmZXIgfHwgIW91dHB1dEJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQXZvaWQgZmlyaW5nIHRoZSBldmVudCBp
ZiB0aGUgZG9jdW1lbnQgaGFzIGFscmVhZHkgZ29uZSBhd2F5LgotICAgIGlmIChjb250ZXh0KCkt
Pmhhc0RvY3VtZW50KCkpIHsKLSAgICAgICAgLy8gTGV0IHRoZSBhdWRpbyB0aHJlYWQga25vdyB3
ZSd2ZSBnb3R0ZW4gdG8gdGhlIHBvaW50IHdoZXJlIGl0J3MgT0sgZm9yIGl0IHRvIG1ha2UgYW5v
dGhlciByZXF1ZXN0LgotICAgICAgICBtX2lzUmVxdWVzdE91dHN0YW5kaW5nID0gZmFsc2U7Ci0g
ICAgICAgIAotICAgICAgICAvLyBDYWxsIHRoZSBKYXZhU2NyaXB0IGV2ZW50IGhhbmRsZXIgd2hp
Y2ggd2lsbCBkbyB0aGUgYXVkaW8gcHJvY2Vzc2luZy4KLSAgICAgICAgZGlzcGF0Y2hFdmVudChB
dWRpb1Byb2Nlc3NpbmdFdmVudDo6Y3JlYXRlKGlucHV0QnVmZmVyLCBvdXRwdXRCdWZmZXIpKTsK
LSAgICB9Ci19Ci0KLXZvaWQgSmF2YVNjcmlwdEF1ZGlvTm9kZTo6cmVzZXQoKQotewotICAgIG1f
YnVmZmVyUmVhZFdyaXRlSW5kZXggPSAwOwotICAgIG1fZG91YmxlQnVmZmVySW5kZXggPSAwOwot
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI7ICsraSkgewotICAgICAgICBtX2lucHV0
QnVmZmVyc1tpXS0+emVybygpOwotICAgICAgICBtX291dHB1dEJ1ZmZlcnNbaV0tPnplcm8oKTsK
LSAgICB9Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgSmF2YVNjcmlwdEF1ZGlvTm9kZTo6aW50
ZXJmYWNlTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VG
b3JKYXZhU2NyaXB0QXVkaW9Ob2RlOwotfQotCi1TY3JpcHRFeGVjdXRpb25Db250ZXh0KiBKYXZh
U2NyaXB0QXVkaW9Ob2RlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gY29uc3RfY2FzdDxKYXZhU2NyaXB0QXVkaW9Ob2RlKj4odGhpcyktPmNvbnRleHQoKS0+
ZG9jdW1lbnQoKTsKLX0KLQotZG91YmxlIEphdmFTY3JpcHRBdWRpb05vZGU6OnRhaWxUaW1lKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0
eSgpOwotfQotCi1kb3VibGUgSmF2YVNjcmlwdEF1ZGlvTm9kZTo6bGF0ZW5jeVRpbWUoKSBjb25z
dAotewotICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVE
SU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9k
ZS5oCShyZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9KYXZhU2Ny
aXB0QXVkaW9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIEphdmFTY3JpcHRBdWRpb05vZGVfaAotI2RlZmluZSBKYXZhU2NyaXB0QXVk
aW9Ob2RlX2gKLQotI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkF1ZGlv
Tm9kZS5oIgotI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJFdmVudFRhcmdl
dC5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1ZGlvQnVmZmVyOwotY2xhc3MgQXVkaW9Db250
ZXh0OwotY2xhc3MgQXVkaW9Qcm9jZXNzaW5nRXZlbnQ7Ci0KLS8vIEphdmFTY3JpcHRBdWRpb05v
ZGUgaXMgYW4gQXVkaW9Ob2RlIHdoaWNoIGFsbG93cyBmb3IgYXJiaXRyYXJ5IHN5bnRoZXNpcyBv
ciBwcm9jZXNzaW5nIGRpcmVjdGx5IHVzaW5nIEphdmFTY3JpcHQuCi0vLyBUaGUgQVBJIGFsbG93
cyBmb3IgYSB2YXJpYWJsZSBudW1iZXIgb2YgaW5wdXRzIGFuZCBvdXRwdXRzLCBhbHRob3VnaCBp
dCBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGlucHV0IG9yIG91dHB1dC4KLS8vIFRoaXMgYmFzaWMg
aW1wbGVtZW50YXRpb24gc3VwcG9ydHMgbm8gbW9yZSB0aGFuIG9uZSBpbnB1dCBhbmQgb3V0cHV0
LgotLy8gVGhlICJvbmF1ZGlvcHJvY2VzcyIgYXR0cmlidXRlIGlzIGFuIGV2ZW50IGxpc3RlbmVy
IHdoaWNoIHdpbGwgZ2V0IGNhbGxlZCBwZXJpb2RpY2FsbHkgd2l0aCBhbiBBdWRpb1Byb2Nlc3Np
bmdFdmVudCB3aGljaCBoYXMKLS8vIEF1ZGlvQnVmZmVycyBmb3IgZWFjaCBpbnB1dCBhbmQgb3V0
cHV0LgotCi0vLyBGSVhNRTogRXZlbnRUYXJnZXQgc2hvdWxkIGJlIGludHJvZHVjZWQgYXQgdGhl
IGJhc2Ugb2YgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeSAoaS5lLiwgYXMgYSBiYXNlIGNsYXNz
IGZvciBBdWRpb05vZGUpLgotY2xhc3MgSmF2YVNjcmlwdEF1ZGlvTm9kZSA6IHB1YmxpYyBBdWRp
b05vZGUsIHB1YmxpYyBFdmVudFRhcmdldCB7Ci1wdWJsaWM6Ci0gICAgLy8gYnVmZmVyU2l6ZSBt
dXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczogMjU2LCA1MTIsIDEwMjQsIDIwNDgs
IDQwOTYsIDgxOTIsIDE2Mzg0LgotICAgIC8vIFRoaXMgdmFsdWUgY29udHJvbHMgaG93IGZyZXF1
ZW50bHkgdGhlIG9uYXVkaW9wcm9jZXNzIGV2ZW50IGhhbmRsZXIgaXMgY2FsbGVkIGFuZCBob3cg
bWFueSBzYW1wbGUtZnJhbWVzIG5lZWQgdG8gYmUgcHJvY2Vzc2VkIGVhY2ggY2FsbC4KLSAgICAv
LyBMb3dlciBudW1iZXJzIGZvciBidWZmZXJTaXplIHdpbGwgcmVzdWx0IGluIGEgbG93ZXIgKGJl
dHRlcikgbGF0ZW5jeS4gSGlnaGVyIG51bWJlcnMgd2lsbCBiZSBuZWNlc3NhcnkgdG8gYXZvaWQg
YXVkaW8gYnJlYWt1cCBhbmQgZ2xpdGNoZXMuCi0gICAgLy8gVGhlIHZhbHVlIGNob3NlbiBtdXN0
IGNhcmVmdWxseSBiYWxhbmNlIGJldHdlZW4gbGF0ZW5jeSBhbmQgYXVkaW8gcXVhbGl0eS4KLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxKYXZhU2NyaXB0QXVkaW9Ob2RlPiBjcmVhdGUoQXVkaW9Db250
ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSwgc2l6ZV90IGJ1ZmZlclNpemUsIHVuc2lnbmVkIG51bWJl
ck9mSW5wdXRzID0gMSwgdW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRzID0gMSk7Ci0KLSAgICB2aXJ0
dWFsIH5KYXZhU2NyaXB0QXVkaW9Ob2RlKCk7Ci0KLSAgICAvLyBBdWRpb05vZGUKLSAgICB2aXJ0
dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVzZXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpOwotICAgIHZpcnR1YWwg
dm9pZCB1bmluaXRpYWxpemUoKTsKLQotICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAgdmlydHVhbCBj
b25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgeyByZXR1cm4gJm1f
ZXZlbnRUYXJnZXREYXRhOyB9Ci0gICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2
ZW50VGFyZ2V0RGF0YSgpICB7IHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7IH0KLQotICAgIHNp
emVfdCBidWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJTaXplOyB9Ci0KLSAgICBE
RUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGF1ZGlvcHJvY2Vzcyk7Ci0KLSAgICAvLyBS
ZWNvbmNpbGUgcmVmL2RlcmVmIHdoaWNoIGFyZSBkZWZpbmVkIGJvdGggaW4gQXVkaW9Ob2RlIGFu
ZCBFdmVudFRhcmdldC4KLSAgICB1c2luZyBBdWRpb05vZGU6OnJlZjsKLSAgICB1c2luZyBBdWRp
b05vZGU6OmRlcmVmOwotICAgIAotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGlt
ZSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29u
c3QgT1ZFUlJJREU7Ci0KLSAgICBKYXZhU2NyaXB0QXVkaW9Ob2RlKEF1ZGlvQ29udGV4dCosIGZs
b2F0IHNhbXBsZVJhdGUsIHNpemVfdCBidWZmZXJTaXplLCB1bnNpZ25lZCBudW1iZXJPZklucHV0
cywgdW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRzKTsKLQotICAgIHN0YXRpYyB2b2lkIGZpcmVQcm9j
ZXNzRXZlbnREaXNwYXRjaCh2b2lkKiB1c2VyRGF0YSk7Ci0gICAgdm9pZCBmaXJlUHJvY2Vzc0V2
ZW50KCk7Ci0KLSAgICAvLyBEb3VibGUgYnVmZmVyaW5nCi0gICAgdW5zaWduZWQgZG91YmxlQnVm
ZmVySW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2RvdWJsZUJ1ZmZlckluZGV4OyB9Ci0gICAgdm9p
ZCBzd2FwQnVmZmVycygpIHsgbV9kb3VibGVCdWZmZXJJbmRleCA9IDEgLSBtX2RvdWJsZUJ1ZmZl
ckluZGV4OyB9Ci0gICAgdW5zaWduZWQgbV9kb3VibGVCdWZmZXJJbmRleDsKLSAgICB1bnNpZ25l
ZCBtX2RvdWJsZUJ1ZmZlckluZGV4Rm9yRXZlbnQ7Ci0gICAgVmVjdG9yPFJlZlB0cjxBdWRpb0J1
ZmZlcj4gPiBtX2lucHV0QnVmZmVyczsKLSAgICBWZWN0b3I8UmVmUHRyPEF1ZGlvQnVmZmVyPiA+
IG1fb3V0cHV0QnVmZmVyczsKLQotICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsg
cmVmKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsg
fQotICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKLQotICAgIHNpemVfdCBt
X2J1ZmZlclNpemU7Ci0gICAgdW5zaWduZWQgbV9idWZmZXJSZWFkV3JpdGVJbmRleDsKLSAgICB2
b2xhdGlsZSBib29sIG1faXNSZXF1ZXN0T3V0c3RhbmRpbmc7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBKYXZhU2NyaXB0QXVkaW9Ob2RlX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaWRsCShyZXZpc2lv
biAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2Rl
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxl
IGF1ZGlvIHsKLSAgICAvLyBGb3IgcmVhbC10aW1lIGF1ZGlvIHN0cmVhbSBzeW50aGVzaXMvcHJv
Y2Vzc2luZyBpbiBKYXZhU2NyaXB0IAotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlv
bmFsPVdFQl9BVURJTywKLSAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QsCi0gICAgICAgIEpT
Q3VzdG9tTWFya0Z1bmN0aW9uLAotICAgICAgICBFdmVudFRhcmdldAotICAgIF0gSmF2YVNjcmlw
dEF1ZGlvTm9kZSA6IEF1ZGlvTm9kZSB7Ci0gICAgICAgIC8vIFJlbmRlcmluZyBjYWxsYmFjawot
ICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmF1ZGlvcHJvY2VzczsKLSAgICAgICAg
Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIGJ1ZmZlclNpemU7Ci0gICAgfTsKLX0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTG93UGFzczJGaWx0ZXJOb2RlLmNw
cAkocmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTG93UGFzczJG
aWx0ZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
LSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1
ZGUgIkxvd1Bhc3MyRmlsdGVyTm9kZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUxvd1Bh
c3MyRmlsdGVyTm9kZTo6TG93UGFzczJGaWx0ZXJOb2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwg
ZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICA6IEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlKGNvbnRleHQs
IHNhbXBsZVJhdGUpCi17Ci0gICAgbV9wcm9jZXNzb3IgPSBhZG9wdFB0cihuZXcgQmlxdWFkUHJv
Y2Vzc29yKEJpcXVhZFByb2Nlc3Nvcjo6TG93UGFzcywgc2FtcGxlUmF0ZSwgMSwgZmFsc2UpKTsK
LSAgICBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMSgpLT5zZXRDb250ZXh0KGNvbnRleHQp
OwotICAgIGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIyKCktPnNldENvbnRleHQoY29udGV4
dCk7Ci0gICAgYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjMoKS0+c2V0Q29udGV4dChjb250
ZXh0KTsKLSAgICBzZXROb2RlVHlwZShOb2RlVHlwZUxvd1Bhc3MyRmlsdGVyKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5oCShyZXZpc2lv
biAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBM
b3dQYXNzMkZpbHRlck5vZGVfaAotI2RlZmluZSBMb3dQYXNzMkZpbHRlck5vZGVfaAotCi0jaW5j
bHVkZSAiQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaCIKLSNpbmNsdWRlICJCaXF1YWRQcm9jZXNz
b3IuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb1BhcmFtOwotICAgIAot
Y2xhc3MgTG93UGFzczJGaWx0ZXJOb2RlIDogcHVibGljIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2Rl
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb3dQYXNzMkZpbHRlck5vZGU+IGNy
ZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IExvd1Bhc3MyRmlsdGVyTm9kZShjb250ZXh0LCBzYW1w
bGVSYXRlKSk7ICAgICAgCi0gICAgfQotCi0gICAgQXVkaW9QYXJhbSogY3V0b2ZmKCkgeyByZXR1
cm4gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjEoKTsgfQotICAgIEF1ZGlvUGFyYW0qIHJl
c29uYW5jZSgpIHsgcmV0dXJuIGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIyKCk7IH0KLSAg
ICAKLXByaXZhdGU6Ci0gICAgTG93UGFzczJGaWx0ZXJOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0
IHNhbXBsZVJhdGUpOwotCi0gICAgQmlxdWFkUHJvY2Vzc29yKiBiaXF1YWRQcm9jZXNzb3IoKSB7
IHJldHVybiBzdGF0aWNfY2FzdDxCaXF1YWRQcm9jZXNzb3IqPihwcm9jZXNzb3IoKSk7IH0KLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIExvd1Bhc3MyRmlsdGVyTm9k
ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9k
ZS5pZGwJKHJldmlzaW9uIDExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0xvd1Bh
c3MyRmlsdGVyTm9kZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLW1vZHVsZSBhdWRpbyB7Ci0gICAgLy8gVHdvLXBvbGUgbG93cGFzcyBmaWx0ZXIKLSAg
ICAvLyBGSVhNRTogZGVzaWduIEJpcXVhZE5vZGUgYW5kIHVzZSBpbnN0ZWFkIG9mIHRoaXMKLSAg
ICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCi0gICAgICAgIEpT
R2VuZXJhdGVUb0pTT2JqZWN0Ci0gICAgXSBMb3dQYXNzMkZpbHRlck5vZGUgOiBBdWRpb05vZGUg
ewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9QYXJhbSBjdXRvZmY7Ci0gICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIHJlc29uYW5jZTsKLSAgICB9OwotfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRp
b1NvdXJjZU5vZGUuY3BwCShyZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDE1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5B
QkxFKFdFQl9BVURJTykgJiYgRU5BQkxFKFZJREVPKQotCi0jaW5jbHVkZSAiTWVkaWFFbGVtZW50
QXVkaW9Tb3VyY2VOb2RlLmgiCi0KLSNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJBdWRpb05vZGVPdXRwdXQuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTWVk
aWFQbGF5ZXIuaCIKLSNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+Ci0KLS8vIFRoZXNlIGFyZSBzb21l
d2hhdCBhcmJpdHJhcnkgbGltaXRzLCBidXQgd2UgbmVlZCB0byBkbyBzb21lIGtpbmQgb2Ygc2Fu
aXR5LWNoZWNraW5nLgotY29uc3QgdW5zaWduZWQgbWluU2FtcGxlUmF0ZSA9IDgwMDA7Ci1jb25z
dCB1bnNpZ25lZCBtYXhTYW1wbGVSYXRlID0gMTkyMDAwOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLVBhc3NSZWZQdHI8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBNZWRpYUVsZW1lbnRB
dWRpb1NvdXJjZU5vZGU6OmNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIEhUTUxNZWRpYUVs
ZW1lbnQqIG1lZGlhRWxlbWVudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhRWxl
bWVudEF1ZGlvU291cmNlTm9kZShjb250ZXh0LCBtZWRpYUVsZW1lbnQpKTsKLX0KLQotTWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUoQXVkaW9D
b250ZXh0KiBjb250ZXh0LCBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQpCi0gICAgOiBB
dWRpb1NvdXJjZU5vZGUoY29udGV4dCwgY29udGV4dC0+c2FtcGxlUmF0ZSgpKQotICAgICwgbV9t
ZWRpYUVsZW1lbnQobWVkaWFFbGVtZW50KQotICAgICwgbV9zb3VyY2VOdW1iZXJPZkNoYW5uZWxz
KDApCi0gICAgLCBtX3NvdXJjZVNhbXBsZVJhdGUoMCkKLXsKLSAgICAvLyBEZWZhdWx0IHRvIHN0
ZXJlby4gVGhpcyBjb3VsZCBjaGFuZ2UgZGVwZW5kaW5nIG9uIHdoYXQgdGhlIG1lZGlhIGVsZW1l
bnQgLnNyYyBpcyBzZXQgdG8uCi0gICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVP
dXRwdXQodGhpcywgMikpKTsKLQotICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlTWVkaWFFbGVtZW50
QXVkaW9Tb3VyY2UpOwotCi0gICAgaW5pdGlhbGl6ZSgpOwotfQotCi1NZWRpYUVsZW1lbnRBdWRp
b1NvdXJjZU5vZGU6On5NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUoKQotewotICAgIG1fbWVk
aWFFbGVtZW50LT5zZXRBdWRpb1NvdXJjZU5vZGUoMCk7Ci0gICAgdW5pbml0aWFsaXplKCk7Ci19
Ci0KLXZvaWQgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpzZXRGb3JtYXQoc2l6ZV90IG51
bWJlck9mQ2hhbm5lbHMsIGZsb2F0IHNvdXJjZVNhbXBsZVJhdGUpCi17Ci0gICAgaWYgKG51bWJl
ck9mQ2hhbm5lbHMgIT0gbV9zb3VyY2VOdW1iZXJPZkNoYW5uZWxzIHx8IHNvdXJjZVNhbXBsZVJh
dGUgIT0gbV9zb3VyY2VTYW1wbGVSYXRlKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQg
bXVsdGktY2hhbm5lbCBncmVhdGVyIHRoYW4gc3RlcmVvLgotICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUxMTkKLSAgICAgICAgaWYgKCFudW1iZXJP
ZkNoYW5uZWxzIHx8IG51bWJlck9mQ2hhbm5lbHMgPiAyIHx8IHNvdXJjZVNhbXBsZVJhdGUgPCBt
aW5TYW1wbGVSYXRlIHx8IHNvdXJjZVNhbXBsZVJhdGUgPiBtYXhTYW1wbGVSYXRlKSB7Ci0gICAg
ICAgICAgICAvLyBwcm9jZXNzKCkgd2lsbCBnZW5lcmF0ZSBzaWxlbmNlIGZvciB0aGVzZSB1bmlu
aXRpYWxpemVkIHZhbHVlcy4KLSAgICAgICAgICAgIExPRyhNZWRpYSwgIk1lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZTo6c2V0Rm9ybWF0KCV1LCAlZikgLSB1bmhhbmRsZWQgZm9ybWF0IGNoYW5n
ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihudW1iZXJPZkNoYW5uZWxzKSwgc291cmNlU2FtcGxl
UmF0ZSk7Ci0gICAgICAgICAgICBtX3NvdXJjZU51bWJlck9mQ2hhbm5lbHMgPSAwOwotICAgICAg
ICAgICAgbV9zb3VyY2VTYW1wbGVSYXRlID0gMDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIG1fc291cmNlTnVtYmVyT2ZDaGFubmVscyA9IG51bWJlck9mQ2hhbm5l
bHM7Ci0gICAgICAgIG1fc291cmNlU2FtcGxlUmF0ZSA9IHNvdXJjZVNhbXBsZVJhdGU7Ci0KLSAg
ICAgICAgLy8gU3luY2hyb25pemUgd2l0aCBwcm9jZXNzKCkuCi0gICAgICAgIExvY2tlcjxNZWRp
YUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+IGxvY2tlcigqdGhpcyk7Ci0KLSAgICAgICAgaWYgKHNv
dXJjZVNhbXBsZVJhdGUgIT0gc2FtcGxlUmF0ZSgpKSB7Ci0gICAgICAgICAgICBkb3VibGUgc2Nh
bGVGYWN0b3IgPSBzb3VyY2VTYW1wbGVSYXRlIC8gc2FtcGxlUmF0ZSgpOwotICAgICAgICAgICAg
bV9tdWx0aUNoYW5uZWxSZXNhbXBsZXIgPSBhZG9wdFB0cihuZXcgTXVsdGlDaGFubmVsUmVzYW1w
bGVyKHNjYWxlRmFjdG9yLCBudW1iZXJPZkNoYW5uZWxzKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAvLyBCeXBhc3MgcmVzYW1wbGluZy4KLSAgICAgICAgICAgIG1fbXVsdGlDaGFu
bmVsUmVzYW1wbGVyLmNsZWFyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyBUaGUgY29udGV4dCBtdXN0IGJlIGxvY2tlZCB3aGVuIGNoYW5naW5nIHRoZSBudW1iZXIg
b2Ygb3V0cHV0IGNoYW5uZWxzLgotICAgICAgICAgICAgQXVkaW9Db250ZXh0OjpBdXRvTG9ja2Vy
IGNvbnRleHRMb2NrZXIoY29udGV4dCgpKTsKLQotICAgICAgICAgICAgLy8gRG8gYW55IG5lY2Vz
c3NhcnkgcmUtY29uZmlndXJhdGlvbiB0byB0aGUgb3V0cHV0J3MgbnVtYmVyIG9mIGNoYW5uZWxz
LgotICAgICAgICAgICAgb3V0cHV0KDApLT5zZXROdW1iZXJPZkNoYW5uZWxzKG51bWJlck9mQ2hh
bm5lbHMpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIE1lZGlhRWxlbWVudEF1ZGlvU291
cmNlTm9kZTo6cHJvY2VzcyhzaXplX3QgbnVtYmVyT2ZGcmFtZXMpCi17Ci0gICAgQXVkaW9CdXMq
IG91dHB1dEJ1cyA9IG91dHB1dCgwKS0+YnVzKCk7Ci0KLSAgICBpZiAoIW1lZGlhRWxlbWVudCgp
IHx8ICFtX3NvdXJjZU51bWJlck9mQ2hhbm5lbHMgfHwgIW1fc291cmNlU2FtcGxlUmF0ZSkgewot
ICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIFVzZSBhIHRyeUxvY2soKSB0byBhdm9pZCBjb250ZW50aW9uIGluIHRoZSByZWFsLXRpbWUg
YXVkaW8gdGhyZWFkLgotICAgIC8vIElmIHdlIGZhaWwgdG8gYWNxdWlyZSB0aGUgbG9jayB0aGVu
IHRoZSBIVE1MTWVkaWFFbGVtZW50IG11c3QgYmUgaW4gdGhlIG1pZGRsZSBvZgotICAgIC8vIHJl
Y29uZmlndXJpbmcgaXRzIHBsYXliYWNrIGVuZ2luZSwgc28gd2Ugb3V0cHV0IHNpbGVuY2UgaW4g
dGhpcyBjYXNlLgotICAgIGlmIChtX3Byb2Nlc3NMb2NrLnRyeUxvY2soKSkgewotICAgICAgICBp
ZiAoQXVkaW9Tb3VyY2VQcm92aWRlciogcHJvdmlkZXIgPSBtZWRpYUVsZW1lbnQoKS0+YXVkaW9T
b3VyY2VQcm92aWRlcigpKSB7Ci0gICAgICAgICAgICBpZiAobV9tdWx0aUNoYW5uZWxSZXNhbXBs
ZXIuZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9zb3VyY2VTYW1wbGVSYXRlICE9
IHNhbXBsZVJhdGUoKSk7Ci0gICAgICAgICAgICAgICAgbV9tdWx0aUNoYW5uZWxSZXNhbXBsZXIt
PnByb2Nlc3MocHJvdmlkZXIsIG91dHB1dEJ1cywgbnVtYmVyT2ZGcmFtZXMpOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBCeXBhc3MgdGhlIHJlc2FtcGxlciBjb21w
bGV0ZWx5IGlmIHRoZSBzb3VyY2UgaXMgYXQgdGhlIGNvbnRleHQncyBzYW1wbGUtcmF0ZS4KLSAg
ICAgICAgICAgICAgICBBU1NFUlQobV9zb3VyY2VTYW1wbGVSYXRlID09IHNhbXBsZVJhdGUoKSk7
Ci0gICAgICAgICAgICAgICAgcHJvdmlkZXItPnByb3ZpZGVJbnB1dChvdXRwdXRCdXMsIG51bWJl
ck9mRnJhbWVzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IC8vIEVpdGhlciB0aGlzIHBvcnQgZG9lc24ndCB5ZXQgc3VwcG9ydCBIVE1MTWVkaWFFbGVtZW50
IGF1ZGlvIHN0cmVhbSBhY2Nlc3MsCi0gICAgICAgICAgICAvLyBvciB0aGUgc3RyZWFtIGlzIG5v
dCB5ZXQgYXZhaWxhYmxlLgotICAgICAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgbV9wcm9jZXNzTG9jay51bmxvY2soKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICAvLyBXZSBmYWlsZWQgdG8gYWNxdWlyZSB0aGUgbG9jay4KLSAgICAgICAgb3V0cHV0QnVzLT56
ZXJvKCk7Ci0gICAgfQotfQotCi12b2lkIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6cmVz
ZXQoKQotewotfQotCi12b2lkIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6bG9jaygpCi17
Ci0gICAgcmVmKCk7Ci0gICAgbV9wcm9jZXNzTG9jay5sb2NrKCk7Ci19Ci0KLXZvaWQgTWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlOjp1bmxvY2soKQotewotICAgIG1fcHJvY2Vzc0xvY2sudW5s
b2NrKCk7Ci0gICAgZGVyZWYoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oCShyZXZpc2lvbiAxMTE0MzMp
CisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBN
ZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGVfaAotI2RlZmluZSBNZWRpYUVsZW1lbnRBdWRpb1Nv
dXJjZU5vZGVfaAotCi0jaWYgRU5BQkxFKFZJREVPKQotCi0jaW5jbHVkZSAiQXVkaW9Tb3VyY2VO
b2RlLmgiCi0jaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlckNsaWVudC5oIgotI2luY2x1ZGUg
IkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJNdWx0aUNoYW5uZWxSZXNhbXBsZXIuaCIK
LSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
QXVkaW9Db250ZXh0OwotICAgIAotY2xhc3MgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlIDog
cHVibGljIEF1ZGlvU291cmNlTm9kZSwgcHVibGljIEF1ZGlvU291cmNlUHJvdmlkZXJDbGllbnQg
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhRWxlbWVudEF1ZGlvU291cmNl
Tm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCosIEhUTUxNZWRpYUVsZW1lbnQqKTsKLQotICAgIHZp
cnR1YWwgfk1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSgpOwotCi0gICAgSFRNTE1lZGlhRWxl
bWVudCogbWVkaWFFbGVtZW50KCkgeyByZXR1cm4gbV9tZWRpYUVsZW1lbnQuZ2V0KCk7IH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLSAgICAvLyBBdWRpb05vZGUK
LSAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVzZXQoKTsKLSAgICAKLSAgICAvLyBBdWRpb1NvdXJjZVByb3ZpZGVyQ2xp
ZW50Ci0gICAgdmlydHVhbCB2b2lkIHNldEZvcm1hdChzaXplX3QgbnVtYmVyT2ZDaGFubmVscywg
ZmxvYXQgc2FtcGxlUmF0ZSk7Ci0gICAgCi0gICAgdm9pZCBsb2NrKCk7Ci0gICAgdm9pZCB1bmxv
Y2soKTsKLQotcHJpdmF0ZToKLSAgICBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUoQXVkaW9D
b250ZXh0KiwgSFRNTE1lZGlhRWxlbWVudCopOwotCi0gICAgUmVmUHRyPEhUTUxNZWRpYUVsZW1l
bnQ+IG1fbWVkaWFFbGVtZW50OwotICAgIE11dGV4IG1fcHJvY2Vzc0xvY2s7Ci0KLSAgICB1bnNp
Z25lZCBtX3NvdXJjZU51bWJlck9mQ2hhbm5lbHM7Ci0gICAgZG91YmxlIG1fc291cmNlU2FtcGxl
UmF0ZTsKLQotICAgIE93blB0cjxNdWx0aUNoYW5uZWxSZXNhbXBsZXI+IG1fbXVsdGlDaGFubmVs
UmVzYW1wbGVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5B
QkxFKFZJREVPKQotCi0jZW5kaWYgLy8gTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlX2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVk
aW9Tb3VyY2VOb2RlLmlkbAkocmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MSwzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGF1ZGlvIHsKLSAgICBpbnRlcmZhY2Ug
WwotICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8mVklERU8sCi0gICAgICAgIEpTR2VuZXJh
dGVUb0pTT2JqZWN0Ci0gICAgXSBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUgOiBBdWRpb1Nv
dXJjZU5vZGUgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSFRNTE1lZGlhRWxlbWVudCBt
ZWRpYUVsZW1lbnQ7Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09m
ZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmNwcAkocmV2aXNpb24gMTEx
NDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIk9m
ZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oIgotCi0jaW5jbHVkZSAiQXVkaW9CdWZmZXIuaCIK
LSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1Jl
ZlB0cjxPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ+IE9mZmxpbmVBdWRpb0NvbXBsZXRpb25F
dmVudDo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9mZmxpbmVBdWRpb0Nv
bXBsZXRpb25FdmVudCk7Ci19Ci0KLVBhc3NSZWZQdHI8T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2
ZW50PiBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ6OmNyZWF0ZShQYXNzUmVmUHRyPEF1ZGlv
QnVmZmVyPiByZW5kZXJlZEJ1ZmZlcikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9mZmxp
bmVBdWRpb0NvbXBsZXRpb25FdmVudChyZW5kZXJlZEJ1ZmZlcikpOwotfQotCi1PZmZsaW5lQXVk
aW9Db21wbGV0aW9uRXZlbnQ6Ok9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCgpCi17Ci19Ci0K
LQotT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50OjpPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZl
bnQoUGFzc1JlZlB0cjxBdWRpb0J1ZmZlcj4gcmVuZGVyZWRCdWZmZXIpCi0gICAgOiBFdmVudChl
dmVudE5hbWVzKCkuY29tcGxldGVFdmVudCwgdHJ1ZSwgZmFsc2UpCi0gICAgLCBtX3JlbmRlcmVk
QnVmZmVyKHJlbmRlcmVkQnVmZmVyKQotewotfQotCi1PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZl
bnQ6On5PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQoKQotewotfQotCi1jb25zdCBBdG9taWNT
dHJpbmcmIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JPZmZsaW5lQXVkaW9Db21w
bGV0aW9uRXZlbnQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVO
QUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVk
aW9Db21wbGV0aW9uRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaAkocmV2aXNpb24gMTExNDMzKQorKysgU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgT2ZmbGluZUF1
ZGlvQ29tcGxldGlvbkV2ZW50X2gKLSNkZWZpbmUgT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50
X2gKLQotI2luY2x1ZGUgIkF1ZGlvQnVmZmVyLmgiCi0jaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRpb0J1ZmZlcjsKLSAgICAKLWNsYXNzIE9mZmxpbmVB
dWRpb0NvbXBsZXRpb25FdmVudCA6IHB1YmxpYyBFdmVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50PiBjcmVhdGUoKTsKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ+IGNyZWF0ZShQYXNz
UmVmUHRyPEF1ZGlvQnVmZmVyPiByZW5kZXJlZEJ1ZmZlcik7Ci0gICAgCi0gICAgdmlydHVhbCB+
T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50KCk7Ci0KLSAgICBBdWRpb0J1ZmZlciogcmVuZGVy
ZWRCdWZmZXIoKSB7IHJldHVybiBtX3JlbmRlcmVkQnVmZmVyLmdldCgpOyB9Ci0KLSAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OwotCi1wcml2YXRl
OgotICAgIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCgpOwotICAgIE9mZmxpbmVBdWRpb0Nv
bXBsZXRpb25FdmVudChQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiByZW5kZXJlZEJ1ZmZlcik7Ci0K
LSAgICBSZWZQdHI8QXVkaW9CdWZmZXI+IG1fcmVuZGVyZWRCdWZmZXI7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnRf
aApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2
ZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVk
aW9Db21wbGV0aW9uRXZlbnQuaWRsCShyZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaWRsCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgYXVkaW8gewotICAgIGludGVy
ZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdFQl9BVURJTywKLSAgICAgICAgSlNHZW5lcmF0
ZVRvSlNPYmplY3QKLSAgICBdIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCA6IEV2ZW50IHsK
LSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlvQnVmZmVyIHJlbmRlcmVkQnVmZmVyOwot
ICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0
aW5hdGlvbk5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09m
ZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAJKHJldmlzaW9uIDExMTQzMykKKysrIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiT2ZmbGluZUF1ZGlvRGVz
dGluYXRpb25Ob2RlLmgiCi0KLSNpbmNsdWRlICJBdWRpb0J1cy5oIgotI2luY2x1ZGUgIkF1ZGlv
Q29udGV4dC5oIgotI2luY2x1ZGUgIkhSVEZEYXRhYmFzZUxvYWRlci5oIgotI2luY2x1ZGUgPGFs
Z29yaXRobT4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi11c2luZyBuYW1lc3BhY2Ug
c3RkOwotIAotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotY29uc3Qgc2l6ZV90IHJlbmRlclF1
YW50dW1TaXplID0gMTI4OyAgICAKLQotT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpPZmZs
aW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBBdWRpb0J1ZmZl
ciogcmVuZGVyVGFyZ2V0KQotICAgIDogQXVkaW9EZXN0aW5hdGlvbk5vZGUoY29udGV4dCwgcmVu
ZGVyVGFyZ2V0LT5zYW1wbGVSYXRlKCkpCi0gICAgLCBtX3JlbmRlclRhcmdldChyZW5kZXJUYXJn
ZXQpCi0gICAgLCBtX3JlbmRlclRocmVhZCgwKQotICAgICwgbV9zdGFydGVkUmVuZGVyaW5nKGZh
bHNlKQotewotICAgIG1fcmVuZGVyQnVzID0gYWRvcHRQdHIobmV3IEF1ZGlvQnVzKHJlbmRlclRh
cmdldC0+bnVtYmVyT2ZDaGFubmVscygpLCByZW5kZXJRdWFudHVtU2l6ZSkpOwotfQotCi1PZmZs
aW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6On5PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUoKQot
ewotICAgIHVuaW5pdGlhbGl6ZSgpOwotfQotCi12b2lkIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9u
Tm9kZTo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgaWYgKGlzSW5pdGlhbGl6ZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgT2ZmbGlu
ZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjp1bmluaXRpYWxpemUoKQotewotICAgIGlmICghaXNJbml0
aWFsaXplZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9yZW5kZXJUaHJlYWQpIHsK
LSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9yZW5kZXJUaHJlYWQpOwotICAgICAg
ICBtX3JlbmRlclRocmVhZCA9IDA7Ci0gICAgfQotCi0gICAgQXVkaW9Ob2RlOjp1bmluaXRpYWxp
emUoKTsKLX0KLQotdm9pZCBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnN0YXJ0UmVuZGVy
aW5nKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVChtX3JlbmRl
clRhcmdldC5nZXQoKSk7Ci0gICAgaWYgKCFtX3JlbmRlclRhcmdldC5nZXQoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIGlmICghbV9zdGFydGVkUmVuZGVyaW5nKSB7Ci0gICAgICAgIG1f
c3RhcnRlZFJlbmRlcmluZyA9IHRydWU7Ci0gICAgICAgIHJlZigpOyAvLyBTZWUgY29ycmVzcG9u
ZGluZyBkZXJlZigpIGNhbGwgaW4gbm90aWZ5Q29tcGxldGVEaXNwYXRjaCgpLgotICAgICAgICBt
X3JlbmRlclRocmVhZCA9IGNyZWF0ZVRocmVhZChPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6
OnJlbmRlckVudHJ5LCB0aGlzLCAib2ZmbGluZSByZW5kZXJlciIpOwotICAgIH0KLX0KLQotLy8g
RG8gb2ZmbGluZSByZW5kZXJpbmcgaW4gdGhpcyB0aHJlYWQuCi12b2lkIE9mZmxpbmVBdWRpb0Rl
c3RpbmF0aW9uTm9kZTo6cmVuZGVyRW50cnkodm9pZCogdGhyZWFkRGF0YSkKLXsKLSAgICBPZmZs
aW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUqIGRlc3RpbmF0aW9uTm9kZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlKj4odGhyZWFkRGF0YSk7Ci0gICAgQVNTRVJU
KGRlc3RpbmF0aW9uTm9kZSk7Ci0gICAgZGVzdGluYXRpb25Ob2RlLT5yZW5kZXIoKTsKLX0KLQot
dm9pZCBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnJlbmRlcigpCi17Ci0gICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKG1fcmVuZGVyQnVzLmdldCgpKTsKLSAgICBp
ZiAoIW1fcmVuZGVyQnVzLmdldCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYm9vbCBj
aGFubmVsc01hdGNoID0gbV9yZW5kZXJCdXMtPm51bWJlck9mQ2hhbm5lbHMoKSA9PSBtX3JlbmRl
clRhcmdldC0+bnVtYmVyT2ZDaGFubmVscygpOwotICAgIEFTU0VSVChjaGFubmVsc01hdGNoKTsK
LSAgICBpZiAoIWNoYW5uZWxzTWF0Y2gpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAg
Ym9vbCBpc1JlbmRlckJ1c0FsbG9jYXRlZCA9IG1fcmVuZGVyQnVzLT5sZW5ndGgoKSA+PSByZW5k
ZXJRdWFudHVtU2l6ZTsKLSAgICBBU1NFUlQoaXNSZW5kZXJCdXNBbGxvY2F0ZWQpOwotICAgIGlm
ICghaXNSZW5kZXJCdXNBbGxvY2F0ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAg
Ly8gU3luY2hyb25pemUgd2l0aCBIUlRGRGF0YWJhc2VMb2FkZXIuCi0gICAgLy8gVGhlIGRhdGFi
YXNlIG11c3QgYmUgbG9hZGVkIGJlZm9yZSB3ZSBjYW4gcHJvY2VlZC4KLSAgICBIUlRGRGF0YWJh
c2VMb2FkZXIqIGxvYWRlciA9IEhSVEZEYXRhYmFzZUxvYWRlcjo6bG9hZGVyKCk7Ci0gICAgQVNT
RVJUKGxvYWRlcik7Ci0gICAgaWYgKCFsb2FkZXIpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBsb2FkZXItPndhaXRGb3JMb2FkZXJUaHJlYWRDb21wbGV0aW9uKCk7Ci0gICAgICAgIAotICAg
IC8vIEJyZWFrIHVwIHRoZSByZW5kZXIgdGFyZ2V0IGludG8gc21hbGxlciAicmVuZGVyIHF1YW50
aXplIiBzaXplZCBwaWVjZXMuCi0gICAgLy8gUmVuZGVyIHVudGlsIHdlJ3JlIGZpbmlzaGVkLgot
ICAgIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MgPSBtX3JlbmRlclRhcmdldC0+bGVuZ3RoKCk7Ci0g
ICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscyA9IG1fcmVuZGVyVGFyZ2V0LT5udW1iZXJPZkNo
YW5uZWxzKCk7Ci0KLSAgICB1bnNpZ25lZCBuID0gMDsKLSAgICB3aGlsZSAoZnJhbWVzVG9Qcm9j
ZXNzID4gMCkgewotICAgICAgICAvLyBSZW5kZXIgb25lIHJlbmRlciBxdWFudHVtLgotICAgICAg
ICBwcm92aWRlSW5wdXQobV9yZW5kZXJCdXMuZ2V0KCksIHJlbmRlclF1YW50dW1TaXplKTsKLSAg
ICAgICAgCi0gICAgICAgIHNpemVfdCBmcmFtZXNBdmFpbGFibGVUb0NvcHkgPSBtaW4oZnJhbWVz
VG9Qcm9jZXNzLCByZW5kZXJRdWFudHVtU2l6ZSk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVu
c2lnbmVkIGNoYW5uZWxJbmRleCA9IDA7IGNoYW5uZWxJbmRleCA8IG51bWJlck9mQ2hhbm5lbHM7
ICsrY2hhbm5lbEluZGV4KSB7Ci0gICAgICAgICAgICBjb25zdCBmbG9hdCogc291cmNlID0gbV9y
ZW5kZXJCdXMtPmNoYW5uZWwoY2hhbm5lbEluZGV4KS0+ZGF0YSgpOwotICAgICAgICAgICAgZmxv
YXQqIGRlc3RpbmF0aW9uID0gbV9yZW5kZXJUYXJnZXQtPmdldENoYW5uZWxEYXRhKGNoYW5uZWxJ
bmRleCktPmRhdGEoKTsKLSAgICAgICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiArIG4sIHNvdXJj
ZSwgc2l6ZW9mKGZsb2F0KSAqIGZyYW1lc0F2YWlsYWJsZVRvQ29weSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIG4gKz0gZnJhbWVzQXZhaWxhYmxlVG9Db3B5OwotICAgICAgICBmcmFt
ZXNUb1Byb2Nlc3MgLT0gZnJhbWVzQXZhaWxhYmxlVG9Db3B5OwotICAgIH0KLSAgICAKLSAgICAv
LyBPdXIgd29yayBpcyBkb25lLiBMZXQgdGhlIEF1ZGlvQ29udGV4dCBrbm93LgotICAgIGNhbGxP
bk1haW5UaHJlYWQobm90aWZ5Q29tcGxldGVEaXNwYXRjaCwgdGhpcyk7Ci19Ci0KLXZvaWQgT2Zm
bGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpub3RpZnlDb21wbGV0ZURpc3BhdGNoKHZvaWQqIHVz
ZXJEYXRhKQotewotICAgIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZSogZGVzdGluYXRpb25O
b2RlID0gc3RhdGljX2Nhc3Q8T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlKj4odXNlckRhdGEp
OwotICAgIEFTU0VSVChkZXN0aW5hdGlvbk5vZGUpOwotICAgIGlmICghZGVzdGluYXRpb25Ob2Rl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBkZXN0aW5hdGlvbk5vZGUtPm5vdGlmeUNvbXBsZXRl
KCk7Ci0gICAgZGVzdGluYXRpb25Ob2RlLT5kZXJlZigpOwotfQotCi12b2lkIE9mZmxpbmVBdWRp
b0Rlc3RpbmF0aW9uTm9kZTo6bm90aWZ5Q29tcGxldGUoKQotewotICAgIGNvbnRleHQoKS0+Zmly
ZUNvbXBsZXRpb25FdmVudCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2Zm
bGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgJKHJldmlzaW9uIDExMTQzMykK
KysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE9m
ZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZV9oCi0jZGVmaW5lIE9mZmxpbmVBdWRpb0Rlc3RpbmF0
aW9uTm9kZV9oCi0KLSNpbmNsdWRlICJBdWRpb0J1ZmZlci5oIgotI2luY2x1ZGUgIkF1ZGlvRGVz
dGluYXRpb25Ob2RlLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIEF1ZGlvQnVzOwotY2xhc3MgQXVkaW9Db250ZXh0OwotICAgIAotY2xh
c3MgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlIDogcHVibGljIEF1ZGlvRGVzdGluYXRpb25O
b2RlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxPZmZsaW5lQXVkaW9EZXN0aW5h
dGlvbk5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIEF1ZGlvQnVmZmVyKiByZW5k
ZXJUYXJnZXQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9mZmxpbmVBdWRp
b0Rlc3RpbmF0aW9uTm9kZShjb250ZXh0LCByZW5kZXJUYXJnZXQpKTsgICAgIAotICAgIH0KLQot
ICAgIHZpcnR1YWwgfk9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZSgpOwotICAgIAotICAgIC8v
IEF1ZGlvTm9kZSAgIAotICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKCk7Ci0gICAgdmlydHVh
bCB2b2lkIHVuaW5pdGlhbGl6ZSgpOwotICAgIHZpcnR1YWwgZmxvYXQgc2FtcGxlUmF0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVuZGVyVGFyZ2V0LT5zYW1wbGVSYXRlKCk7IH0KLQotICAgIHZvaWQg
c3RhcnRSZW5kZXJpbmcoKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgT2ZmbGluZUF1ZGlvRGVzdGlu
YXRpb25Ob2RlKEF1ZGlvQ29udGV4dCosIEF1ZGlvQnVmZmVyKiByZW5kZXJUYXJnZXQpOwotCi0g
ICAgLy8gVGhpcyBBdWRpb05vZGUgcmVuZGVycyBpbnRvIHRoaXMgQXVkaW9CdWZmZXIuCi0gICAg
UmVmUHRyPEF1ZGlvQnVmZmVyPiBtX3JlbmRlclRhcmdldDsKLSAgICAKLSAgICAvLyBUZW1wb3Jh
cnkgQXVkaW9CdXMgZm9yIGVhY2ggcmVuZGVyIHF1YW50dW0uCi0gICAgT3duUHRyPEF1ZGlvQnVz
PiBtX3JlbmRlckJ1czsKLSAgICAKLSAgICAvLyBSZW5kZXJpbmcgdGhyZWFkLgotICAgIHZvbGF0
aWxlIFRocmVhZElkZW50aWZpZXIgbV9yZW5kZXJUaHJlYWQ7Ci0gICAgYm9vbCBtX3N0YXJ0ZWRS
ZW5kZXJpbmc7Ci0gICAgc3RhdGljIHZvaWQgcmVuZGVyRW50cnkodm9pZCogdGhyZWFkRGF0YSk7
Ci0gICAgdm9pZCByZW5kZXIoKTsKLSAgICAKLSAgICAvLyBGb3IgY29tcGxldGlvbiBjYWxsYmFj
ayBvbiBtYWluIHRocmVhZC4KLSAgICBzdGF0aWMgdm9pZCBub3RpZnlDb21wbGV0ZURpc3BhdGNo
KHZvaWQqIHVzZXJEYXRhKTsKLSAgICB2b2lkIG5vdGlmeUNvbXBsZXRlKCk7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5j
cHAJKHJldmlzaW9uIDExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1l
QW5hbHlzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMwMCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
LSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1
ZGUgIlJlYWx0aW1lQW5hbHlzZXIuaCIKLQotI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCi0jaW5jbHVk
ZSAiQXVkaW9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJGRlRGcmFtZS5oIgotCi0jaW5jbHVkZSA8
YWxnb3JpdGhtPgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9Db21wbGV4Lmg+
Ci0jaW5jbHVkZSA8d3RmL0Zsb2F0MzJBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvVWludDhBcnJh
eS5oPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNv
bnN0IGRvdWJsZSBSZWFsdGltZUFuYWx5c2VyOjpEZWZhdWx0U21vb3RoaW5nVGltZUNvbnN0YW50
ICA9IDAuODsKLWNvbnN0IGRvdWJsZSBSZWFsdGltZUFuYWx5c2VyOjpEZWZhdWx0TWluRGVjaWJl
bHMgPSAtMTAwOwotY29uc3QgZG91YmxlIFJlYWx0aW1lQW5hbHlzZXI6OkRlZmF1bHRNYXhEZWNp
YmVscyA9IC0zMDsKLQotY29uc3QgdW5zaWduZWQgUmVhbHRpbWVBbmFseXNlcjo6RGVmYXVsdEZG
VFNpemUgPSAyMDQ4OwotLy8gQWxsIEZGVCBpbXBsZW1lbnRhdGlvbnMgYXJlIGV4cGVjdGVkIHRv
IGhhbmRsZSBwb3dlci1vZi10d28gc2l6ZXMgTWluRkZUU2l6ZSA8PSBzaXplIDw9IE1heEZGVFNp
emUuCi1jb25zdCB1bnNpZ25lZCBSZWFsdGltZUFuYWx5c2VyOjpNaW5GRlRTaXplID0gMTI4Owot
Y29uc3QgdW5zaWduZWQgUmVhbHRpbWVBbmFseXNlcjo6TWF4RkZUU2l6ZSA9IDIwNDg7Ci1jb25z
dCB1bnNpZ25lZCBSZWFsdGltZUFuYWx5c2VyOjpJbnB1dEJ1ZmZlclNpemUgPSBSZWFsdGltZUFu
YWx5c2VyOjpNYXhGRlRTaXplICogMjsKLQotUmVhbHRpbWVBbmFseXNlcjo6UmVhbHRpbWVBbmFs
eXNlcigpCi0gICAgOiBtX2lucHV0QnVmZmVyKElucHV0QnVmZmVyU2l6ZSkKLSAgICAsIG1fd3Jp
dGVJbmRleCgwKQotICAgICwgbV9mZnRTaXplKERlZmF1bHRGRlRTaXplKQotICAgICwgbV9tYWdu
aXR1ZGVCdWZmZXIoRGVmYXVsdEZGVFNpemUgLyAyKQotICAgICwgbV9zbW9vdGhpbmdUaW1lQ29u
c3RhbnQoRGVmYXVsdFNtb290aGluZ1RpbWVDb25zdGFudCkKLSAgICAsIG1fbWluRGVjaWJlbHMo
RGVmYXVsdE1pbkRlY2liZWxzKQotICAgICwgbV9tYXhEZWNpYmVscyhEZWZhdWx0TWF4RGVjaWJl
bHMpCi17Ci0gICAgbV9hbmFseXNpc0ZyYW1lID0gYWRvcHRQdHIobmV3IEZGVEZyYW1lKERlZmF1
bHRGRlRTaXplKSk7Ci19Ci0KLVJlYWx0aW1lQW5hbHlzZXI6On5SZWFsdGltZUFuYWx5c2VyKCkK
LXsKLX0KLQotdm9pZCBSZWFsdGltZUFuYWx5c2VyOjpyZXNldCgpCi17Ci0gICAgbV93cml0ZUlu
ZGV4ID0gMDsKLSAgICBtX2lucHV0QnVmZmVyLnplcm8oKTsKLSAgICBtX21hZ25pdHVkZUJ1ZmZl
ci56ZXJvKCk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVBbmFseXNlcjo6c2V0RmZ0U2l6ZShzaXplX3Qg
c2l6ZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gT25seSBhbGxv
dyBwb3dlcnMgb2YgdHdvLgotICAgIHVuc2lnbmVkIGxvZzJzaXplID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGxvZzIoc2l6ZSkpOwotICAgIGJvb2wgaXNQT1QoMVVMIDw8IGxvZzJzaXplID09IHNp
emUpOwotCi0gICAgaWYgKCFpc1BPVCB8fCBzaXplID4gTWF4RkZUU2l6ZSB8fCBzaXplIDwgTWlu
RkZUU2l6ZSkgewotICAgICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgZ29vZCB0byBhbHNvIHNl
dCBhbiBleGNlcHRpb24uCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9mZnRT
aXplICE9IHNpemUpIHsKLSAgICAgICAgbV9hbmFseXNpc0ZyYW1lID0gYWRvcHRQdHIobmV3IEZG
VEZyYW1lKHNpemUpKTsKLSAgICAgICAgLy8gbV9tYWduaXR1ZGVCdWZmZXIgaGFzIHNpemUgPSBm
ZnRTaXplIC8gMiBiZWNhdXNlIGl0IGNvbnRhaW5zIGZsb2F0cyByZWR1Y2VkIGZyb20gY29tcGxl
eCB2YWx1ZXMgaW4gbV9hbmFseXNpc0ZyYW1lLgotICAgICAgICBtX21hZ25pdHVkZUJ1ZmZlci5h
bGxvY2F0ZShzaXplIC8gMik7Ci0gICAgICAgIG1fZmZ0U2l6ZSA9IHNpemU7Ci0gICAgfQotfQot
Ci12b2lkIFJlYWx0aW1lQW5hbHlzZXI6OndyaXRlSW5wdXQoQXVkaW9CdXMqIGJ1cywgc2l6ZV90
IGZyYW1lc1RvUHJvY2VzcykKLXsKLSAgICBib29sIGlzQnVzR29vZCA9IGJ1cyAmJiBidXMtPm51
bWJlck9mQ2hhbm5lbHMoKSA+IDAgJiYgYnVzLT5jaGFubmVsKDApLT5sZW5ndGgoKSA+PSBmcmFt
ZXNUb1Byb2Nlc3M7Ci0gICAgQVNTRVJUKGlzQnVzR29vZCk7Ci0gICAgaWYgKCFpc0J1c0dvb2Qp
Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgLy8gRklYTUUgOiBhbGxvdyB0byB3b3Jr
IHdpdGggbm9uLUZGVFNpemUgZGl2aXNpYmxlIGNodW5raW5nCi0gICAgYm9vbCBpc0Rlc3RpbmF0
aW9uR29vZCA9IG1fd3JpdGVJbmRleCA8IG1faW5wdXRCdWZmZXIuc2l6ZSgpICYmIG1fd3JpdGVJ
bmRleCArIGZyYW1lc1RvUHJvY2VzcyA8PSBtX2lucHV0QnVmZmVyLnNpemUoKTsKLSAgICBBU1NF
UlQoaXNEZXN0aW5hdGlvbkdvb2QpOwotICAgIGlmICghaXNEZXN0aW5hdGlvbkdvb2QpCi0gICAg
ICAgIHJldHVybjsgICAgCi0gICAgCi0gICAgLy8gUGVyZm9ybSByZWFsLXRpbWUgYW5hbHlzaXMK
LSAgICAvLyBGSVhNRSA6IGZvciBub3cganVzdCB1c2UgbGVmdCBjaGFubmVsIChtdXN0IG1peCBp
ZiBzdGVyZW8gc291cmNlKQotICAgIGNvbnN0IGZsb2F0KiBzb3VyY2UgPSBidXMtPmNoYW5uZWwo
MCktPmRhdGEoKTsKLQotICAgIC8vIFRoZSBzb3VyY2UgaGFzIGFscmVhZHkgYmVlbiBzYW5pdHkg
Y2hlY2tlZCB3aXRoIGlzQnVzR29vZCBhYm92ZS4KLSAgICAKLSAgICBtZW1jcHkobV9pbnB1dEJ1
ZmZlci5kYXRhKCkgKyBtX3dyaXRlSW5kZXgsIHNvdXJjZSwgc2l6ZW9mKGZsb2F0KSAqIGZyYW1l
c1RvUHJvY2Vzcyk7Ci0KLSAgICBtX3dyaXRlSW5kZXggKz0gZnJhbWVzVG9Qcm9jZXNzOwotICAg
IGlmIChtX3dyaXRlSW5kZXggPj0gSW5wdXRCdWZmZXJTaXplKQotICAgICAgICBtX3dyaXRlSW5k
ZXggPSAwOwotfQotCi1uYW1lc3BhY2UgewotCi12b2lkIGFwcGx5V2luZG93KGZsb2F0KiBwLCBz
aXplX3QgbikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIAotICAgIC8vIEJs
YWNrbWFuIHdpbmRvdwotICAgIGRvdWJsZSBhbHBoYSA9IDAuMTY7Ci0gICAgZG91YmxlIGEwID0g
MC41ICogKDEgLSBhbHBoYSk7Ci0gICAgZG91YmxlIGExID0gMC41OwotICAgIGRvdWJsZSBhMiA9
IDAuNSAqIGFscGhhOwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuOyArK2kp
IHsKLSAgICAgICAgZG91YmxlIHggPSBzdGF0aWNfY2FzdDxkb3VibGU+KGkpIC8gc3RhdGljX2Nh
c3Q8ZG91YmxlPihuKTsKLSAgICAgICAgZG91YmxlIHdpbmRvdyA9IGEwIC0gYTEgKiBjb3MoMiAq
IHBpRG91YmxlICogeCkgKyBhMiAqIGNvcyg0ICogcGlEb3VibGUgKiB4KTsKLSAgICAgICAgcFtp
XSAqPSBmbG9hdCh3aW5kb3cpOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UKLQotdm9pZCBS
ZWFsdGltZUFuYWx5c2VyOjpkb0ZGVEFuYWx5c2lzKCkKLXsgICAgCi0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLQotICAgIC8vIFVucm9sbCB0aGUgaW5wdXQgYnVmZmVyIGludG8gYSB0ZW1w
b3JhcnkgYnVmZmVyLCB3aGVyZSB3ZSdsbCBhcHBseSBhbiBhbmFseXNpcyB3aW5kb3cgZm9sbG93
ZWQgYnkgYW4gRkZULgotICAgIHNpemVfdCBmZnRTaXplID0gdGhpcy0+ZmZ0U2l6ZSgpOwotICAg
IAotICAgIEF1ZGlvRmxvYXRBcnJheSB0ZW1wb3JhcnlCdWZmZXIoZmZ0U2l6ZSk7Ci0gICAgZmxv
YXQqIGlucHV0QnVmZmVyID0gbV9pbnB1dEJ1ZmZlci5kYXRhKCk7Ci0gICAgZmxvYXQqIHRlbXBQ
ID0gdGVtcG9yYXJ5QnVmZmVyLmRhdGEoKTsKLQotICAgIC8vIFRha2UgdGhlIHByZXZpb3VzIGZm
dFNpemUgdmFsdWVzIGZyb20gdGhlIGlucHV0IGJ1ZmZlciBhbmQgY29weSBpbnRvIHRoZSB0ZW1w
b3JhcnkgYnVmZmVyLgotICAgIHVuc2lnbmVkIHdyaXRlSW5kZXggPSBtX3dyaXRlSW5kZXg7Ci0g
ICAgaWYgKHdyaXRlSW5kZXggPCBmZnRTaXplKSB7Ci0gICAgICAgIG1lbWNweSh0ZW1wUCwgaW5w
dXRCdWZmZXIgKyB3cml0ZUluZGV4IC0gZmZ0U2l6ZSArIElucHV0QnVmZmVyU2l6ZSwgc2l6ZW9m
KCp0ZW1wUCkgKiAoZmZ0U2l6ZSAtIHdyaXRlSW5kZXgpKTsKLSAgICAgICAgbWVtY3B5KHRlbXBQ
ICsgZmZ0U2l6ZSAtIHdyaXRlSW5kZXgsIGlucHV0QnVmZmVyLCBzaXplb2YoKnRlbXBQKSAqIHdy
aXRlSW5kZXgpOwotICAgIH0gZWxzZSAKLSAgICAgICAgbWVtY3B5KHRlbXBQLCBpbnB1dEJ1ZmZl
ciArIHdyaXRlSW5kZXggLSBmZnRTaXplLCBzaXplb2YoKnRlbXBQKSAqIGZmdFNpemUpOwotCi0g
ICAgCi0gICAgLy8gV2luZG93IHRoZSBpbnB1dCBzYW1wbGVzLgotICAgIGFwcGx5V2luZG93KHRl
bXBQLCBmZnRTaXplKTsKLSAgICAKLSAgICAvLyBEbyB0aGUgYW5hbHlzaXMuCi0gICAgbV9hbmFs
eXNpc0ZyYW1lLT5kb0ZGVCh0ZW1wUCk7Ci0KLSAgICBmbG9hdCogcmVhbFAgPSBtX2FuYWx5c2lz
RnJhbWUtPnJlYWxEYXRhKCk7Ci0gICAgZmxvYXQqIGltYWdQID0gbV9hbmFseXNpc0ZyYW1lLT5p
bWFnRGF0YSgpOwotCi0gICAgLy8gQmxvdyBhd2F5IHRoZSBwYWNrZWQgbnlxdWlzdCBjb21wb25l
bnQuCi0gICAgaW1hZ1BbMF0gPSAwOwotICAgIAotICAgIC8vIE5vcm1hbGl6ZSBzbyB0aGFuIGFu
IGlucHV0IHNpbmUgd2F2ZSBhdCAwZEJmcyByZWdpc3RlcnMgYXMgMGRCZnMgKHVuZG8gRkZUIHNj
YWxpbmcgZmFjdG9yKS4KLSAgICBjb25zdCBkb3VibGUgbWFnbml0dWRlU2NhbGUgPSAxLjAgLyBE
ZWZhdWx0RkZUU2l6ZTsKLQotICAgIC8vIEEgdmFsdWUgb2YgMCBkb2VzIG5vIGF2ZXJhZ2luZyB3
aXRoIHRoZSBwcmV2aW91cyByZXN1bHQuICBMYXJnZXIgdmFsdWVzIHByb2R1Y2Ugc2xvd2VyLCBi
dXQgc21vb3RoZXIgY2hhbmdlcy4KLSAgICBkb3VibGUgayA9IG1fc21vb3RoaW5nVGltZUNvbnN0
YW50OwotICAgIGsgPSBtYXgoMC4wLCBrKTsKLSAgICBrID0gbWluKDEuMCwgayk7ICAgIAotICAg
IAotICAgIC8vIENvbnZlcnQgdGhlIGFuYWx5c2lzIGRhdGEgZnJvbSBjb21wbGV4IHRvIG1hZ25p
dHVkZSBhbmQgYXZlcmFnZSB3aXRoIHRoZSBwcmV2aW91cyByZXN1bHQuCi0gICAgZmxvYXQqIGRl
c3RpbmF0aW9uID0gbWFnbml0dWRlQnVmZmVyKCkuZGF0YSgpOwotICAgIHNpemVfdCBuID0gbWFn
bml0dWRlQnVmZmVyKCkuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytp
KSB7Ci0gICAgICAgIENvbXBsZXggYyhyZWFsUFtpXSwgaW1hZ1BbaV0pOwotICAgICAgICBkb3Vi
bGUgc2NhbGFyTWFnbml0dWRlID0gYWJzKGMpICogbWFnbml0dWRlU2NhbGU7ICAgICAgICAKLSAg
ICAgICAgZGVzdGluYXRpb25baV0gPSBmbG9hdChrICogZGVzdGluYXRpb25baV0gKyAoMSAtIGsp
ICogc2NhbGFyTWFnbml0dWRlKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVhbHRpbWVBbmFseXNlcjo6
Z2V0RmxvYXRGcmVxdWVuY3lEYXRhKEZsb2F0MzJBcnJheSogZGVzdGluYXRpb25BcnJheSkKLXsK
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKCFkZXN0aW5hdGlvbkFycmF5
KQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGRvRkZUQW5hbHlzaXMoKTsKLSAgICAK
LSAgICAvLyBDb252ZXJ0IGZyb20gbGluZWFyIG1hZ25pdHVkZSB0byBmbG9hdGluZy1wb2ludCBk
ZWNpYmVscy4KLSAgICBjb25zdCBkb3VibGUgbWluRGVjaWJlbHMgPSBtX21pbkRlY2liZWxzOwot
ICAgIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCA9IG1hZ25pdHVkZUJ1ZmZlcigpLnNpemUoKTsKLSAg
ICBzaXplX3QgbGVuID0gbWluKHNvdXJjZUxlbmd0aCwgZGVzdGluYXRpb25BcnJheS0+bGVuZ3Ro
KCkpOwotICAgIGlmIChsZW4gPiAwKSB7Ci0gICAgICAgIGNvbnN0IGZsb2F0KiBzb3VyY2UgPSBt
YWduaXR1ZGVCdWZmZXIoKS5kYXRhKCk7Ci0gICAgICAgIGZsb2F0KiBkZXN0aW5hdGlvbiA9IGRl
c3RpbmF0aW9uQXJyYXktPmRhdGEoKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAgZmxvYXQgbGluZWFyVmFsdWUgPSBz
b3VyY2VbaV07Ci0gICAgICAgICAgICBkb3VibGUgZGJNYWcgPSAhbGluZWFyVmFsdWUgPyBtaW5E
ZWNpYmVscyA6IEF1ZGlvVXRpbGl0aWVzOjpsaW5lYXJUb0RlY2liZWxzKGxpbmVhclZhbHVlKTsK
LSAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldID0gZmxvYXQoZGJNYWcpOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIFJlYWx0aW1lQW5hbHlzZXI6OmdldEJ5dGVGcmVxdWVuY3lEYXRhKFVp
bnQ4QXJyYXkqIGRlc3RpbmF0aW9uQXJyYXkpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKLQotICAgIGlmICghZGVzdGluYXRpb25BcnJheSkKLSAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKLSAgICBkb0ZGVEFuYWx5c2lzKCk7Ci0gICAgCi0gICAgLy8gQ29udmVydCBmcm9tIGxpbmVh
ciBtYWduaXR1ZGUgdG8gdW5zaWduZWQtYnl0ZSBkZWNpYmVscy4KLSAgICB1bnNpZ25lZCBzb3Vy
Y2VMZW5ndGggPSBtYWduaXR1ZGVCdWZmZXIoKS5zaXplKCk7Ci0gICAgc2l6ZV90IGxlbiA9IG1p
bihzb3VyY2VMZW5ndGgsIGRlc3RpbmF0aW9uQXJyYXktPmxlbmd0aCgpKTsKLSAgICBpZiAobGVu
ID4gMCkgewotICAgICAgICBjb25zdCBkb3VibGUgcmFuZ2VTY2FsZUZhY3RvciA9IG1fbWF4RGVj
aWJlbHMgPT0gbV9taW5EZWNpYmVscyA/IDEgOiAxIC8gKG1fbWF4RGVjaWJlbHMgLSBtX21pbkRl
Y2liZWxzKTsKLSAgICAgICAgY29uc3QgZG91YmxlIG1pbkRlY2liZWxzID0gbV9taW5EZWNpYmVs
czsKLQotICAgICAgICBjb25zdCBmbG9hdCogc291cmNlID0gbWFnbml0dWRlQnVmZmVyKCkuZGF0
YSgpOwotICAgICAgICB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uQXJy
YXktPmRhdGEoKTsgICAgICAgIAotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICBmbG9hdCBsaW5lYXJWYWx1ZSA9IHNvdXJj
ZVtpXTsKLSAgICAgICAgICAgIGRvdWJsZSBkYk1hZyA9ICFsaW5lYXJWYWx1ZSA/IG1pbkRlY2li
ZWxzIDogQXVkaW9VdGlsaXRpZXM6OmxpbmVhclRvRGVjaWJlbHMobGluZWFyVmFsdWUpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAvLyBUaGUgcmFuZ2UgbV9taW5EZWNpYmVscyB0byBtX21h
eERlY2liZWxzIHdpbGwgYmUgc2NhbGVkIHRvIGJ5dGUgdmFsdWVzIGZyb20gMCB0byBVQ0hBUl9N
QVguCi0gICAgICAgICAgICBkb3VibGUgc2NhbGVkVmFsdWUgPSBVQ0hBUl9NQVggKiAoZGJNYWcg
LSBtaW5EZWNpYmVscykgKiByYW5nZVNjYWxlRmFjdG9yOwotCi0gICAgICAgICAgICAvLyBDbGlw
IHRvIHZhbGlkIHJhbmdlLgotICAgICAgICAgICAgaWYgKHNjYWxlZFZhbHVlIDwgMCkKLSAgICAg
ICAgICAgICAgICBzY2FsZWRWYWx1ZSA9IDA7Ci0gICAgICAgICAgICBpZiAoc2NhbGVkVmFsdWUg
PiBVQ0hBUl9NQVgpCi0gICAgICAgICAgICAgICAgc2NhbGVkVmFsdWUgPSBVQ0hBUl9NQVg7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oc2NhbGVkVmFsdWUpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFJl
YWx0aW1lQW5hbHlzZXI6OmdldEJ5dGVUaW1lRG9tYWluRGF0YShVaW50OEFycmF5KiBkZXN0aW5h
dGlvbkFycmF5KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoIWRl
c3RpbmF0aW9uQXJyYXkpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgdW5zaWduZWQg
ZmZ0U2l6ZSA9IHRoaXMtPmZmdFNpemUoKTsKLSAgICBzaXplX3QgbGVuID0gbWluKGZmdFNpemUs
IGRlc3RpbmF0aW9uQXJyYXktPmxlbmd0aCgpKTsKLSAgICBpZiAobGVuID4gMCkgewotICAgICAg
ICBib29sIGlzSW5wdXRCdWZmZXJHb29kID0gbV9pbnB1dEJ1ZmZlci5zaXplKCkgPT0gSW5wdXRC
dWZmZXJTaXplICYmIG1faW5wdXRCdWZmZXIuc2l6ZSgpID4gZmZ0U2l6ZTsKLSAgICAgICAgQVNT
RVJUKGlzSW5wdXRCdWZmZXJHb29kKTsKLSAgICAgICAgaWYgKCFpc0lucHV0QnVmZmVyR29vZCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBmbG9hdCogaW5wdXRCdWZmZXIgPSBtX2lu
cHV0QnVmZmVyLmRhdGEoKTsgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBjaGFyKiBkZXN0aW5h
dGlvbiA9IGRlc3RpbmF0aW9uQXJyYXktPmRhdGEoKTsKLSAgICAgICAgCi0gICAgICAgIHVuc2ln
bmVkIHdyaXRlSW5kZXggPSBtX3dyaXRlSW5kZXg7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICAvLyBCdWZmZXIgYWNjZXNzIGlzIHBy
b3RlY3RlZCBkdWUgdG8gbW9kdWxvIG9wZXJhdGlvbi4KLSAgICAgICAgICAgIGZsb2F0IHZhbHVl
ID0gaW5wdXRCdWZmZXJbKGkgKyB3cml0ZUluZGV4IC0gZmZ0U2l6ZSArIElucHV0QnVmZmVyU2l6
ZSkgJSBJbnB1dEJ1ZmZlclNpemVdOwotCi0gICAgICAgICAgICAvLyBTY2FsZSBmcm9tIG5vbWlu
YWwgLTEgLT4gKzEgdG8gdW5zaWduZWQgYnl0ZS4KLSAgICAgICAgICAgIGRvdWJsZSBzY2FsZWRW
YWx1ZSA9IDEyOCAqICh2YWx1ZSArIDEpOwotCi0gICAgICAgICAgICAvLyBDbGlwIHRvIHZhbGlk
IHJhbmdlLgotICAgICAgICAgICAgaWYgKHNjYWxlZFZhbHVlIDwgMCkKLSAgICAgICAgICAgICAg
ICBzY2FsZWRWYWx1ZSA9IDA7Ci0gICAgICAgICAgICBpZiAoc2NhbGVkVmFsdWUgPiBVQ0hBUl9N
QVgpCi0gICAgICAgICAgICAgICAgc2NhbGVkVmFsdWUgPSBVQ0hBUl9NQVg7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oc2NhbGVkVmFsdWUpOwotICAgICAgICB9Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIuaAkocmV2aXNpb24gMTExNDMzKQorKysgU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFJlYWx0aW1lQW5hbHlzZXJfaAot
I2RlZmluZSBSZWFsdGltZUFuYWx5c2VyX2gKLQotI2luY2x1ZGUgIkF1ZGlvQXJyYXkuaCIKLSNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdWRp
b0J1czsKLWNsYXNzIEZGVEZyYW1lOwotCi1jbGFzcyBSZWFsdGltZUFuYWx5c2VyIHsKLSAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShSZWFsdGltZUFuYWx5c2VyKTsKLXB1YmxpYzoKLSAgICBSZWFs
dGltZUFuYWx5c2VyKCk7Ci0gICAgdmlydHVhbCB+UmVhbHRpbWVBbmFseXNlcigpOwotICAgIAot
ICAgIHZvaWQgcmVzZXQoKTsKLQotICAgIHNpemVfdCBmZnRTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9mZnRTaXplOyB9Ci0gICAgdm9pZCBzZXRGZnRTaXplKHNpemVfdCBzaXplKTsKLQotICAgIHVu
c2lnbmVkIGZyZXF1ZW5jeUJpbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9mZnRTaXplIC8gMjsg
fQotCi0gICAgdm9pZCBzZXRNaW5EZWNpYmVscyhmbG9hdCBrKSB7IG1fbWluRGVjaWJlbHMgPSBr
OyB9Ci0gICAgZmxvYXQgbWluRGVjaWJlbHMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4obV9taW5EZWNpYmVscyk7IH0KLQotICAgIHZvaWQgc2V0TWF4RGVjaWJlbHMoZmxvYXQg
aykgeyBtX21heERlY2liZWxzID0gazsgfQotICAgIGZsb2F0IG1heERlY2liZWxzKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWF4RGVjaWJlbHMpOyB9Ci0KLSAgICB2b2lk
IHNldFNtb290aGluZ1RpbWVDb25zdGFudChmbG9hdCBrKSB7IG1fc21vb3RoaW5nVGltZUNvbnN0
YW50ID0gazsgfQotICAgIGZsb2F0IHNtb290aGluZ1RpbWVDb25zdGFudCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX3Ntb290aGluZ1RpbWVDb25zdGFudCk7IH0KLQotICAg
IHZvaWQgZ2V0RmxvYXRGcmVxdWVuY3lEYXRhKEZsb2F0MzJBcnJheSopOwotICAgIHZvaWQgZ2V0
Qnl0ZUZyZXF1ZW5jeURhdGEoVWludDhBcnJheSopOwotICAgIHZvaWQgZ2V0Qnl0ZVRpbWVEb21h
aW5EYXRhKFVpbnQ4QXJyYXkqKTsKLQotICAgIC8vIFRoZSBhdWRpbyB0aHJlYWQgd3JpdGVzIGlu
cHV0IGRhdGEgaGVyZS4KLSAgICB2b2lkIHdyaXRlSW5wdXQoQXVkaW9CdXMqLCBzaXplX3QgZnJh
bWVzVG9Qcm9jZXNzKTsKLQotICAgIHN0YXRpYyBjb25zdCBkb3VibGUgRGVmYXVsdFNtb290aGlu
Z1RpbWVDb25zdGFudDsKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIERlZmF1bHRNaW5EZWNpYmVs
czsKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIERlZmF1bHRNYXhEZWNpYmVsczsKLQotICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBEZWZhdWx0RkZUU2l6ZTsKLSAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgTWluRkZUU2l6ZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgTWF4RkZUU2l6ZTsK
LSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgSW5wdXRCdWZmZXJTaXplOwotCi1wcml2YXRlOgot
ICAgIC8vIFRoZSBhdWRpbyB0aHJlYWQgd3JpdGVzIHRoZSBpbnB1dCBhdWRpbyBoZXJlLgotICAg
IEF1ZGlvRmxvYXRBcnJheSBtX2lucHV0QnVmZmVyOwotICAgIHVuc2lnbmVkIG1fd3JpdGVJbmRl
eDsKLSAgICAKLSAgICBzaXplX3QgbV9mZnRTaXplOwotICAgIE93blB0cjxGRlRGcmFtZT4gbV9h
bmFseXNpc0ZyYW1lOwotICAgIHZvaWQgZG9GRlRBbmFseXNpcygpOwotICAgIAotICAgIC8vIGRv
RkZUQW5hbHlzaXMoKSBzdG9yZXMgdGhlIGZsb2F0aW5nLXBvaW50IG1hZ25pdHVkZSBhbmFseXNp
cyBkYXRhIGhlcmUuCi0gICAgQXVkaW9GbG9hdEFycmF5IG1fbWFnbml0dWRlQnVmZmVyOwotICAg
IEF1ZGlvRmxvYXRBcnJheSYgbWFnbml0dWRlQnVmZmVyKCkgeyByZXR1cm4gbV9tYWduaXR1ZGVC
dWZmZXI7IH0KLQotICAgIC8vIEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxIHdoaWNoIGF2ZXJhZ2Vz
IHRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIG1fbWFnbml0dWRlQnVmZmVyIHdpdGggdGhlIGN1cnJl
bnQgYW5hbHlzaXMgbWFnbml0dWRlIGRhdGEuCi0gICAgZG91YmxlIG1fc21vb3RoaW5nVGltZUNv
bnN0YW50OyAgICAKLQotICAgIC8vIFRoZSByYW5nZSB1c2VkIHdoZW4gY29udmVydGluZyB3aGVu
IHVzaW5nIGdldEJ5dGVGcmVxdWVuY3lEYXRhKCkuIAotICAgIGRvdWJsZSBtX21pbkRlY2liZWxz
OwotICAgIGRvdWJsZSBtX21heERlY2liZWxzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gUmVhbHRpbWVBbmFseXNlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuY3BwCShyZXZpc2lvbiAxMTE0MzMp
CisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJSZWFsdGltZUFuYWx5
c2VyTm9kZS5oIgotCi0jaW5jbHVkZSAiQXVkaW9Ob2RlSW5wdXQuaCIKLSNpbmNsdWRlICJBdWRp
b05vZGVPdXRwdXQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZWFsdGltZUFuYWx5c2Vy
Tm9kZTo6UmVhbHRpbWVBbmFseXNlck5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBz
YW1wbGVSYXRlKQotICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCi17Ci0gICAg
YWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7Ci0gICAgYWRkT3V0
cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywgMikpKTsKLSAgICAKLSAgICBz
ZXROb2RlVHlwZShOb2RlVHlwZUFuYWx5c2VyKTsKLSAgICAKLSAgICBpbml0aWFsaXplKCk7Ci19
Ci0KLVJlYWx0aW1lQW5hbHlzZXJOb2RlOjp+UmVhbHRpbWVBbmFseXNlck5vZGUoKQotewotICAg
IHVuaW5pdGlhbGl6ZSgpOwotfQotCi12b2lkIFJlYWx0aW1lQW5hbHlzZXJOb2RlOjpwcm9jZXNz
KHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgQXVkaW9CdXMqIG91dHB1dEJ1cyA9IG91
dHB1dCgwKS0+YnVzKCk7Ci0KLSAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSB8fCAhaW5wdXQoMCkt
PmlzQ29ubmVjdGVkKCkpIHsKLSAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBdWRpb0J1cyogaW5wdXRCdXMgPSBpbnB1dCgwKS0+YnVzKCk7
Ci0gICAgCi0gICAgLy8gR2l2ZSB0aGUgYW5hbHlzZXIgdGhlIGF1ZGlvIHdoaWNoIGlzIHBhc3Np
bmcgdGhyb3VnaCB0aGlzIEF1ZGlvTm9kZS4KLSAgICBtX2FuYWx5c2VyLndyaXRlSW5wdXQoaW5w
dXRCdXMsIGZyYW1lc1RvUHJvY2Vzcyk7Ci0KLSAgICAvLyBGb3IgaW4tcGxhY2UgcHJvY2Vzc2lu
Zywgb3VyIG92ZXJyaWRlIG9mIHB1bGxJbnB1dHMoKSB3aWxsIGp1c3QgcGFzcyB0aGUgYXVkaW8g
ZGF0YSB0aHJvdWdoIHVuY2hhbmdlZCBpZiB0aGUgY2hhbm5lbCBjb3VudCBtYXRjaGVzIGZyb20g
aW5wdXQgdG8gb3V0cHV0Ci0gICAgLy8gKHJlc3VsdGluZyBpbiBpbnB1dEJ1cyA9PSBvdXRwdXRC
dXMpLiAgT3RoZXJ3aXNlLCBkbyBhbiB1cC1taXggdG8gc3RlcmVvLgotICAgIGlmIChpbnB1dEJ1
cyAhPSBvdXRwdXRCdXMpCi0gICAgICAgIG91dHB1dEJ1cy0+Y29weUZyb20oKmlucHV0QnVzKTsK
LX0KLQotLy8gV2Ugb3ZlcnJpZGUgcHVsbElucHV0cygpIGFzIGFuIG9wdGltaXphdGlvbiBhbGxv
d2luZyB0aGlzIG5vZGUgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgaW4tcGxhY2UgcHJvY2Vzc2luZywK
LS8vIHdoZXJlIHRoZSBpbnB1dCBpcyBzaW1wbHkgcGFzc2VkIHRocm91Z2ggdW5wcm9jZXNzZWQg
dG8gdGhlIG91dHB1dC4KLS8vIE5vdGU6IHRoaXMgb25seSBhcHBsaWVzIGlmIHRoZSBpbnB1dCBh
bmQgb3V0cHV0IGNoYW5uZWwgY291bnRzIG1hdGNoLgotdm9pZCBSZWFsdGltZUFuYWx5c2VyTm9k
ZTo6cHVsbElucHV0cyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQotewotICAgIC8vIFJlbmRlciBp
bnB1dCBzdHJlYW0gLSB0cnkgdG8gcmVuZGVyIGRpcmVjdGx5IGludG8gb3V0cHV0IGJ1cyBmb3Ig
cGFzcy10aHJvdWdoIHByb2Nlc3Npbmcgd2hlcmUgcHJvY2VzcygpIGRvZXNuJ3QgbmVlZCB0byBk
byBhbnl0aGluZy4uLgotICAgIGlucHV0KDApLT5wdWxsKG91dHB1dCgwKS0+YnVzKCksIGZyYW1l
c1RvUHJvY2Vzcyk7Ci19Ci0KLXZvaWQgUmVhbHRpbWVBbmFseXNlck5vZGU6OnJlc2V0KCkKLXsK
LSAgICBtX2FuYWx5c2VyLnJlc2V0KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9SZWFsdGltZUFuYWx5c2VyTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmgJKHJldmlzaW9uIDExMTQzMykKKysrIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUmVhbHRpbWVBbmFseXNlck5v
ZGVfaAotI2RlZmluZSBSZWFsdGltZUFuYWx5c2VyTm9kZV9oCi0KLSNpbmNsdWRlICJBdWRpb05v
ZGUuaCIKLSNpbmNsdWRlICJSZWFsdGltZUFuYWx5c2VyLmgiCi0jaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZWFsdGltZUFuYWx5c2VyTm9k
ZSA6IHB1YmxpYyBBdWRpb05vZGUgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJl
YWx0aW1lQW5hbHlzZXJOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBz
YW1wbGVSYXRlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZWFsdGltZUFu
YWx5c2VyTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKSk7ICAgICAgCi0gICAgfQotCi0gICAgdmly
dHVhbCB+UmVhbHRpbWVBbmFseXNlck5vZGUoKTsKLSAgICAKLSAgICAvLyBBdWRpb05vZGUKLSAg
ICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcHVsbElucHV0cyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVzZXQoKTsKLQotICAgIC8vIEphdmFzY3JpcHQgYmluZGluZ3MKLSAgICB1bnNpZ25l
ZCBpbnQgZmZ0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5hbHlzZXIuZmZ0U2l6ZSgpOyB9Ci0g
ICAgdm9pZCBzZXRGZnRTaXplKHVuc2lnbmVkIGludCBzaXplKSB7IG1fYW5hbHlzZXIuc2V0RmZ0
U2l6ZShzaXplKTsgfQotCi0gICAgdW5zaWduZWQgZnJlcXVlbmN5QmluQ291bnQoKSBjb25zdCB7
IHJldHVybiBtX2FuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50KCk7IH0KLQotICAgIHZvaWQgc2V0
TWluRGVjaWJlbHMoZmxvYXQgaykgeyBtX2FuYWx5c2VyLnNldE1pbkRlY2liZWxzKGspOyB9Ci0g
ICAgZmxvYXQgbWluRGVjaWJlbHMoKSBjb25zdCB7IHJldHVybiBtX2FuYWx5c2VyLm1pbkRlY2li
ZWxzKCk7IH0KLQotICAgIHZvaWQgc2V0TWF4RGVjaWJlbHMoZmxvYXQgaykgeyBtX2FuYWx5c2Vy
LnNldE1heERlY2liZWxzKGspOyB9Ci0gICAgZmxvYXQgbWF4RGVjaWJlbHMoKSBjb25zdCB7IHJl
dHVybiBtX2FuYWx5c2VyLm1heERlY2liZWxzKCk7IH0KLQotICAgIHZvaWQgc2V0U21vb3RoaW5n
VGltZUNvbnN0YW50KGZsb2F0IGspIHsgbV9hbmFseXNlci5zZXRTbW9vdGhpbmdUaW1lQ29uc3Rh
bnQoayk7IH0KLSAgICBmbG9hdCBzbW9vdGhpbmdUaW1lQ29uc3RhbnQoKSBjb25zdCB7IHJldHVy
biBtX2FuYWx5c2VyLnNtb290aGluZ1RpbWVDb25zdGFudCgpOyB9Ci0KLSAgICB2b2lkIGdldEZs
b2F0RnJlcXVlbmN5RGF0YShGbG9hdDMyQXJyYXkqIGFycmF5KSB7IG1fYW5hbHlzZXIuZ2V0Rmxv
YXRGcmVxdWVuY3lEYXRhKGFycmF5KTsgfQotICAgIHZvaWQgZ2V0Qnl0ZUZyZXF1ZW5jeURhdGEo
VWludDhBcnJheSogYXJyYXkpIHsgbV9hbmFseXNlci5nZXRCeXRlRnJlcXVlbmN5RGF0YShhcnJh
eSk7IH0KLSAgICB2b2lkIGdldEJ5dGVUaW1lRG9tYWluRGF0YShVaW50OEFycmF5KiBhcnJheSkg
eyBtX2FuYWx5c2VyLmdldEJ5dGVUaW1lRG9tYWluRGF0YShhcnJheSk7IH0KLQotcHJpdmF0ZToK
LSAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7
IH0KLSAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIDA7IH0KLQotICAgIFJlYWx0aW1lQW5hbHlzZXJOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0
IHNhbXBsZVJhdGUpOwotCi0gICAgUmVhbHRpbWVBbmFseXNlciBtX2FuYWx5c2VyOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUmVhbHRpbWVBbmFseXNlck5vZGVf
aApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlck5vZGUuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJO
b2RlLmlkbAkocmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vUmVh
bHRpbWVBbmFseXNlck5vZGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi1tb2R1bGUgYXVkaW8gewotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRp
dGlvbmFsPVdFQl9BVURJTywKLSAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKLSAgICBdIFJl
YWx0aW1lQW5hbHlzZXJOb2RlIDogQXVkaW9Ob2RlIHsKLSAgICAgICAgYXR0cmlidXRlIHVuc2ln
bmVkIGxvbmcgZmZ0U2l6ZTsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxv
bmcgZnJlcXVlbmN5QmluQ291bnQ7Ci0KLSAgICAgICAgLy8gbWluRGVjaWJlbHMgLyBtYXhEZWNp
YmVscyByZXByZXNlbnQgdGhlIHJhbmdlIHRvIHNjYWxlIHRoZSBGRlQgYW5hbHlzaXMgZGF0YSBm
b3IgY29udmVyc2lvbiB0byB1bnNpZ25lZCBieXRlIHZhbHVlcy4KLSAgICAgICAgYXR0cmlidXRl
IGZsb2F0IG1pbkRlY2liZWxzOwotICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgbWF4RGVjaWJlbHM7
Ci0KLSAgICAgICAgLy8gQSB2YWx1ZSBmcm9tIDAuMCAtPiAxLjAgd2hlcmUgMC4wIHJlcHJlc2Vu
dHMgbm8gdGltZSBhdmVyYWdpbmcgd2l0aCB0aGUgbGFzdCBhbmFseXNpcyBmcmFtZS4KLSAgICAg
ICAgYXR0cmlidXRlIGZsb2F0IHNtb290aGluZ1RpbWVDb25zdGFudDsKLQotICAgICAgICAvLyBD
b3BpZXMgdGhlIGN1cnJlbnQgZnJlcXVlbmN5IGRhdGEgaW50byB0aGUgcGFzc2VkIGFycmF5Lgot
ICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaGFzIGZld2VyIGVsZW1lbnRzIHRoYW4gdGhlIGZyZXF1
ZW5jeUJpbkNvdW50LCB0aGUgZXhjZXNzIGVsZW1lbnRzIHdpbGwgYmUgZHJvcHBlZC4KLSAgICAg
ICAgdm9pZCBnZXRGbG9hdEZyZXF1ZW5jeURhdGEoaW4gRmxvYXQzMkFycmF5IGFycmF5KTsKLSAg
ICAgICAgdm9pZCBnZXRCeXRlRnJlcXVlbmN5RGF0YShpbiBVaW50OEFycmF5IGFycmF5KTsKLQot
ICAgICAgICAvLyBSZWFsLXRpbWUgd2F2ZWZvcm0gZGF0YQotICAgICAgICB2b2lkIGdldEJ5dGVU
aW1lRG9tYWluRGF0YShpbiBVaW50OEFycmF5IGFycmF5KTsKLSAgICB9OwotfQpJbmRleDogU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlckRTUEtlcm5lbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlckRTUEtlcm5lbC5jcHAJKHJldmlz
aW9uIDExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJEU1BLZXJu
ZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiV2F2
ZVNoYXBlckRTUEtlcm5lbC5oIgotCi0jaW5jbHVkZSAiV2F2ZVNoYXBlclByb2Nlc3Nvci5oIgot
I2luY2x1ZGUgPGFsZ29yaXRobT4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi12b2lkIFdhdmVTaGFwZXJEU1BLZXJuZWw6OnByb2Nlc3MoY29uc3QgZmxv
YXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQot
ewotICAgIEFTU0VSVChzb3VyY2UgJiYgZGVzdGluYXRpb24gJiYgd2F2ZVNoYXBlclByb2Nlc3Nv
cigpKTsKLQotICAgIEZsb2F0MzJBcnJheSogY3VydmUgPSB3YXZlU2hhcGVyUHJvY2Vzc29yKCkt
PmN1cnZlKCk7Ci0gICAgaWYgKCFjdXJ2ZSkgewotICAgICAgICAvLyBBY3QgYXMgInN0cmFpZ2h0
IHdpcmUiIHBhc3MtdGhyb3VnaCBpZiBubyBjdXJ2ZSBpcyBzZXQuCi0gICAgICAgIG1lbWNweShk
ZXN0aW5hdGlvbiwgc291cmNlLCBzaXplb2YoZmxvYXQpICogZnJhbWVzVG9Qcm9jZXNzKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZsb2F0KiBjdXJ2ZURhdGEgPSBjdXJ2ZS0+ZGF0
YSgpOwotICAgIGludCBjdXJ2ZUxlbmd0aCA9IGN1cnZlLT5sZW5ndGgoKTsKLQotICAgIEFTU0VS
VChjdXJ2ZURhdGEpOwotCi0gICAgaWYgKCFjdXJ2ZURhdGEgfHwgIWN1cnZlTGVuZ3RoKSB7Ci0g
ICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNlLCBzaXplb2YoZmxvYXQpICogZnJhbWVz
VG9Qcm9jZXNzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEFwcGx5IHdhdmVz
aGFwaW5nIGN1cnZlLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXNUb1Byb2Nl
c3M7ICsraSkgewotICAgICAgICBjb25zdCBmbG9hdCBpbnB1dCA9IHNvdXJjZVtpXTsKLQotICAg
ICAgICAvLyBDYWxjdWxhdGUgYW4gaW5kZXggYmFzZWQgb24gaW5wdXQgLTEgLT4gKzEgd2l0aCAw
IGJlaW5nIGF0IHRoZSBjZW50ZXIgb2YgdGhlIGN1cnZlIGRhdGEuCi0gICAgICAgIGludCBpbmRl
eCA9IChjdXJ2ZUxlbmd0aCAqIChpbnB1dCArIDEpKSAvIDI7Ci0KLSAgICAgICAgLy8gQ2xpcCBp
bmRleCB0byB0aGUgaW5wdXQgcmFuZ2Ugb2YgdGhlIGN1cnZlLgotICAgICAgICAvLyBUaGlzIHRh
a2VzIGNhcmUgb2YgaW5wdXQgb3V0c2lkZSBvZiBub21pbmFsIHJhbmdlIC0xIC0+ICsxCi0gICAg
ICAgIGluZGV4ID0gbWF4KGluZGV4LCAwKTsKLSAgICAgICAgaW5kZXggPSBtaW4oaW5kZXgsIGN1
cnZlTGVuZ3RoIC0gMSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uW2ldID0gY3VydmVEYXRhW2luZGV4
XTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZlU2hhcGVyRFNQ
S2VybmVsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBl
ckRTUEtlcm5lbC5oCShyZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9XYXZlU2hhcGVyRFNQS2VybmVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgV2F2ZVNoYXBlckRTUEtlcm5lbF9oCi0jZGVmaW5lIFdhdmVT
aGFwZXJEU1BLZXJuZWxfaAotCi0jaW5jbHVkZSAiQXVkaW9EU1BLZXJuZWwuaCIKLSNpbmNsdWRl
ICJXYXZlU2hhcGVyUHJvY2Vzc29yLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
V2F2ZVNoYXBlclByb2Nlc3NvcjsKLQotLy8gV2F2ZVNoYXBlckRTUEtlcm5lbCBpcyBhbiBBdWRp
b0RTUEtlcm5lbCBhbmQgaXMgcmVzcG9uc2libGUgZm9yIG5vbi1saW5lYXIgZGlzdG9ydGlvbiBv
biBvbmUgY2hhbm5lbC4KLQotY2xhc3MgV2F2ZVNoYXBlckRTUEtlcm5lbCA6IHB1YmxpYyBBdWRp
b0RTUEtlcm5lbCB7Ci1wdWJsaWM6ICAKLSAgICBXYXZlU2hhcGVyRFNQS2VybmVsKFdhdmVTaGFw
ZXJQcm9jZXNzb3IqIHByb2Nlc3NvcikKLSAgICA6IEF1ZGlvRFNQS2VybmVsKHByb2Nlc3NvcikK
LSAgICB7Ci0gICAgfQotICAgIAotICAgIC8vIEF1ZGlvRFNQS2VybmVsCi0gICAgdmlydHVhbCB2
b2lkIHByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3QsIHNpemVfdCBmcmFt
ZXNUb1Byb2Nlc3MpOwotICAgIHZpcnR1YWwgdm9pZCByZXNldCgpIHsgfQotICAgIHZpcnR1YWwg
ZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1
YWwgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQotICAg
IAotcHJvdGVjdGVkOgotICAgIFdhdmVTaGFwZXJQcm9jZXNzb3IqIHdhdmVTaGFwZXJQcm9jZXNz
b3IoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxXYXZlU2hhcGVyUHJvY2Vzc29yKj4ocHJvY2Vzc29y
KCkpOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBXYXZlU2hh
cGVyRFNQS2VybmVsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJO
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZlU2hhcGVy
Tm9kZS5jcHAJKHJldmlzaW9uIDExMTQzMykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dh
dmVTaGFwZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1NCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2lu
Y2x1ZGUgIldhdmVTaGFwZXJOb2RlLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1XYXZlU2hhcGVyTm9kZTo6V2F2ZVNoYXBlck5vZGUoQXVk
aW9Db250ZXh0KiBjb250ZXh0KQotICAgIDogQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUoY29udGV4
dCwgY29udGV4dC0+c2FtcGxlUmF0ZSgpKQotewotICAgIG1fcHJvY2Vzc29yID0gYWRvcHRQdHIo
bmV3IFdhdmVTaGFwZXJQcm9jZXNzb3IoY29udGV4dC0+c2FtcGxlUmF0ZSgpLCAxKSk7Ci0gICAg
c2V0Tm9kZVR5cGUoTm9kZVR5cGVXYXZlU2hhcGVyKTsKLX0KLQotdm9pZCBXYXZlU2hhcGVyTm9k
ZTo6c2V0Q3VydmUoRmxvYXQzMkFycmF5KiBjdXJ2ZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOyAKLSAgICB3YXZlU2hhcGVyUHJvY2Vzc29yKCktPnNldEN1cnZlKGN1cnZlKTsKLX0K
LQotRmxvYXQzMkFycmF5KiBXYXZlU2hhcGVyTm9kZTo6Y3VydmUoKQotewotICAgIHJldHVybiB3
YXZlU2hhcGVyUHJvY2Vzc29yKCktPmN1cnZlKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmgJKHJldmlzaW9uIDExMTQzMykKKysrIFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2F2ZVNoYXBlck5vZGVfaAotI2RlZmluZSBXYXZl
U2hhcGVyTm9kZV9oCi0KLSNpbmNsdWRlICJBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oIgotI2lu
Y2x1ZGUgIkJpcXVhZFByb2Nlc3Nvci5oIgotI2luY2x1ZGUgIldhdmVTaGFwZXJQcm9jZXNzb3Iu
aCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAg
Ci1jbGFzcyBXYXZlU2hhcGVyTm9kZSA6IHB1YmxpYyBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZSB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2F2ZVNoYXBlck5vZGU+IGNyZWF0ZShB
dWRpb0NvbnRleHQqIGNvbnRleHQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFdhdmVTaGFwZXJOb2RlKGNvbnRleHQpKTsKLSAgICB9Ci0KLSAgICAvLyBzZXRDdXJ2ZSgpIGlz
IGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCi0gICAgdm9pZCBzZXRDdXJ2ZShGbG9hdDMyQXJy
YXkqKTsKLSAgICBGbG9hdDMyQXJyYXkqIGN1cnZlKCk7Ci0KLXByaXZhdGU6ICAgIAotICAgIFdh
dmVTaGFwZXJOb2RlKEF1ZGlvQ29udGV4dCopOyAgICAKLQotICAgIFdhdmVTaGFwZXJQcm9jZXNz
b3IqIHdhdmVTaGFwZXJQcm9jZXNzb3IoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxXYXZlU2hhcGVy
UHJvY2Vzc29yKj4ocHJvY2Vzc29yKCkpOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBXYXZlU2hhcGVyTm9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9XYXZlU2hhcGVyTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vV2F2ZVNoYXBlck5vZGUuaWRsCShyZXZpc2lvbiAxMTE0MzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzIg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBhdWRpbyB7Ci0gICAgaW50ZXJmYWNlIFsKLSAg
ICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAotICAgICAgICBKU0dlbmVyYXRlVG9KU09iamVj
dAotICAgIF0gV2F2ZVNoYXBlck5vZGUgOiBBdWRpb05vZGUgewotICAgICAgICBhdHRyaWJ1dGUg
W0pTQ3VzdG9tU2V0dGVyXSBGbG9hdDMyQXJyYXkgY3VydmU7Ci0gICAgfTsKLX0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuY3BwCShyZXZp
c2lvbiAxMTE0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vz
c29yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2luY2x1ZGUgIldh
dmVTaGFwZXJQcm9jZXNzb3IuaCIKLQotI2luY2x1ZGUgIldhdmVTaGFwZXJEU1BLZXJuZWwuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotV2F2ZVNoYXBlclByb2Nlc3Nvcjo6V2F2ZVNo
YXBlclByb2Nlc3NvcihmbG9hdCBzYW1wbGVSYXRlLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscykK
LSAgICA6IEF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yKHNhbXBsZVJhdGUsIG51bWJlck9mQ2hhbm5l
bHMpCi17Ci19Ci0KLVdhdmVTaGFwZXJQcm9jZXNzb3I6On5XYXZlU2hhcGVyUHJvY2Vzc29yKCkK
LXsKLSAgICBpZiAoaXNJbml0aWFsaXplZCgpKQotICAgICAgICB1bmluaXRpYWxpemUoKTsKLX0K
LQotUGFzc093blB0cjxBdWRpb0RTUEtlcm5lbD4gV2F2ZVNoYXBlclByb2Nlc3Nvcjo6Y3JlYXRl
S2VybmVsKCkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdhdmVTaGFwZXJEU1BLZXJuZWwo
dGhpcykpOwotfQotCi12b2lkIFdhdmVTaGFwZXJQcm9jZXNzb3I6OnNldEN1cnZlKEZsb2F0MzJB
cnJheSogY3VydmUpCi17Ci0gICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgd2l0aCBwcm9jZXNzKCku
Ci0gICAgTXV0ZXhMb2NrZXIgcHJvY2Vzc0xvY2tlcihtX3Byb2Nlc3NMb2NrKTsKLSAgICAKLSAg
ICBtX2N1cnZlID0gY3VydmU7Ci19Ci0KLXZvaWQgV2F2ZVNoYXBlclByb2Nlc3Nvcjo6cHJvY2Vz
cyhjb25zdCBBdWRpb0J1cyogc291cmNlLCBBdWRpb0J1cyogZGVzdGluYXRpb24sIHNpemVfdCBm
cmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgaWYgKCFpc0luaXRpYWxpemVkKCkpIHsKLSAgICAgICAg
ZGVzdGluYXRpb24tPnplcm8oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFRo
ZSBhdWRpbyB0aHJlYWQgY2FuJ3QgYmxvY2sgb24gdGhpcyBsb2NrLCBzbyB3ZSBjYWxsIHRyeUxv
Y2soKSBpbnN0ZWFkLgotICAgIC8vIENhcmVmdWwgLSB0aGlzIGlzIGEgdHJ5TG9jaygpIGFuZCBu
b3QgYW4gYXV0b2xvY2tlciwgc28gd2UgbXVzdCB1bmxvY2soKSBiZWZvcmUgZXZlcnkgcmV0dXJu
LgotICAgIGlmIChtX3Byb2Nlc3NMb2NrLnRyeUxvY2soKSkgeyAgICAgICAgCi0gICAgICAgIC8v
IEZvciBlYWNoIGNoYW5uZWwgb2Ygb3VyIGlucHV0LCBwcm9jZXNzIHVzaW5nIHRoZSBjb3JyZXNw
b25kaW5nIFdhdmVTaGFwZXJEU1BLZXJuZWwgaW50byB0aGUgb3V0cHV0IGNoYW5uZWwuCi0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2tlcm5lbHMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgICAgICBtX2tlcm5lbHNbaV0tPnByb2Nlc3Moc291cmNlLT5jaGFubmVsKGkpLT5kYXRhKCks
IGRlc3RpbmF0aW9uLT5jaGFubmVsKGkpLT5tdXRhYmxlRGF0YSgpLCBmcmFtZXNUb1Byb2Nlc3Mp
OwotCi0gICAgICAgIG1fcHJvY2Vzc0xvY2sudW5sb2NrKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgLy8gVG9vIGJhZCAtIHRoZSB0cnlMb2NrKCkgZmFpbGVkLiBXZSBtdXN0IGJlIGluIHRoZSBt
aWRkbGUgb2YgYSBzZXRDdXJ2ZSgpIGNhbGwuCi0gICAgICAgIGRlc3RpbmF0aW9uLT56ZXJvKCk7
Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
V0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nl
c3Nvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL1dhdmVTaGFwZXJQ
cm9jZXNzb3IuaAkocmV2aXNpb24gMTExNDMzKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
V2F2ZVNoYXBlclByb2Nlc3Nvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIFdhdmVTaGFwZXJQcm9jZXNzb3JfaAotI2RlZmluZSBXYXZlU2hh
cGVyUHJvY2Vzc29yX2gKLQotI2luY2x1ZGUgIkF1ZGlvRFNQS2VybmVsLmgiCi0jaW5jbHVkZSAi
QXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuaCIKLSNpbmNsdWRlICJBdWRpb05vZGUuaCIKLSNpbmNs
dWRlIDx3dGYvRmxvYXQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBXYXZlU2hh
cGVyUHJvY2Vzc29yIGlzIGFuIEF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yIHdoaWNoIHVzZXMgV2F2
ZVNoYXBlckRTUEtlcm5lbCBvYmplY3RzIHRvIGltcGxlbWVudCBub24tbGluZWFyIGRpc3RvcnRp
b24gZWZmZWN0cy4KLQotY2xhc3MgV2F2ZVNoYXBlclByb2Nlc3NvciA6IHB1YmxpYyBBdWRpb0RT
UEtlcm5lbFByb2Nlc3NvciB7Ci1wdWJsaWM6Ci0gICAgV2F2ZVNoYXBlclByb2Nlc3NvcihmbG9h
dCBzYW1wbGVSYXRlLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscyk7Ci0KLSAgICB2aXJ0dWFsIH5X
YXZlU2hhcGVyUHJvY2Vzc29yKCk7Ci0KLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8QXVkaW9EU1BL
ZXJuZWw+IGNyZWF0ZUtlcm5lbCgpOwotCi0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3MoY29uc3Qg
QXVkaW9CdXMqIHNvdXJjZSwgQXVkaW9CdXMqIGRlc3RpbmF0aW9uLCBzaXplX3QgZnJhbWVzVG9Q
cm9jZXNzKTsKLQotICAgIHZvaWQgc2V0Q3VydmUoRmxvYXQzMkFycmF5Kik7Ci0gICAgRmxvYXQz
MkFycmF5KiBjdXJ2ZSgpIHsgcmV0dXJuIG1fY3VydmUuZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAg
ICAvLyBtX2N1cnZlIHJlcHJlc2VudHMgdGhlIG5vbi1saW5lYXIgc2hhcGluZyBjdXJ2ZS4KLSAg
ICBSZWZQdHI8RmxvYXQzMkFycmF5PiBtX2N1cnZlOwotCi0gICAgLy8gVGhpcyBzeW5jaHJvbml6
ZXMgcHJvY2VzcygpIHdpdGggc2V0Q3VydmUoKS4KLSAgICBtdXRhYmxlIE11dGV4IG1fcHJvY2Vz
c0xvY2s7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBXYXZlU2hh
cGVyUHJvY2Vzc29yX2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>