<?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>125017</bug_id>
          
          <creation_ts>2013-11-29 11:03:36 -0800</creation_ts>
          <short_desc>Move API files shared between Mac and iOS to the Cocoa directory</short_desc>
          <delta_ts>2013-11-29 12:52:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>955004</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-11-29 11:03:36 -0800</bug_when>
    <thetext>Move API files shared between Mac and iOS to the Cocoa directory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955005</commentid>
    <comment_count>1</comment_count>
      <attachid>218074</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-11-29 11:04:08 -0800</bug_when>
    <thetext>Created attachment 218074
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955006</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-29 11:06:58 -0800</bug_when>
    <thetext>Attachment 218074 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextController.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextController.mm&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextControllerInternal.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextControllerPrivate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextGroup.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextGroup.mm&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextGroupInternal.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextGroupPrivate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextLoadDelegate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextPolicyDelegate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKConnection.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKConnection.mm&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKConnectionInternal.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroup.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroup.mm&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroupInternal.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroupPrivate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKTypeRefWrapper.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKTypeRefWrapper.mm&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKView.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WebKit2.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKBrowsingContextController.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKBrowsingContextController.mm&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKBrowsingContextControllerInternal.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKBrowsingContextControllerPrivate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKBrowsingContextGroup.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKBrowsingContextGroup.mm&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKBrowsingContextGroupInternal.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKBrowsingContextGroupPrivate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKBrowsingContextLoadDelegate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKBrowsingContextPolicyDelegate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKConnection.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKConnection.mm&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKConnectionInternal.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKProcessGroup.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKProcessGroup.mm&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKProcessGroupInternal.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKProcessGroupPrivate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKTypeRefWrapper.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKTypeRefWrapper.mm&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKView.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKViewPrivate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WebKit2.h&apos;, u&apos;Source/WebKit2/WebKit2.xcodeproj/project.pbxproj&apos;]&quot; exit_code: 1
Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextController.h:87:  Missing spaces around /  [whitespace/operators] [3]
Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h:79:  Missing spaces around =  [whitespace/operators] [4]
Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextPolicyDelegate.h:32:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextPolicyDelegate.h:33:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextPolicyDelegate.h:34:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextPolicyDelegate.h:35:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextPolicyDelegate.h:36:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextPolicyDelegate.h:37:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextPolicyDelegate.h:38:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextPolicyDelegate.h:40:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 10 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955008</commentid>
    <comment_count>3</comment_count>
      <attachid>218074</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-11-29 11:11:27 -0800</bug_when>
    <thetext>Comment on attachment 218074
Patch

Attachment 218074 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/39328181</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955010</commentid>
    <comment_count>4</comment_count>
      <attachid>218074</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-11-29 11:34:14 -0800</bug_when>
    <thetext>Comment on attachment 218074
Patch

Attachment 218074 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/39978021</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955011</commentid>
    <comment_count>5</comment_count>
      <attachid>218074</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-11-29 12:00:30 -0800</bug_when>
    <thetext>Comment on attachment 218074
Patch

Attachment 218074 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/39998015</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955013</commentid>
    <comment_count>6</comment_count>
      <attachid>218076</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-11-29 12:09:36 -0800</bug_when>
    <thetext>Created attachment 218076
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955014</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-29 12:10:53 -0800</bug_when>
    <thetext>Attachment 218076 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextController.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextController.mm&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextControllerInternal.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextControllerPrivate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextGroup.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextGroup.mm&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextGroupInternal.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextGroupPrivate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextLoadDelegate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextPolicyDelegate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKConnection.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKConnection.mm&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKConnectionInternal.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroup.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroup.mm&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroupInternal.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroupPrivate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKTypeRefWrapper.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKTypeRefWrapper.mm&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKView.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/Cocoa/WebKit2.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKBrowsingContextController.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKBrowsingContextController.mm&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKBrowsingContextControllerInternal.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKBrowsingContextControllerPrivate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKBrowsingContextGroup.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKBrowsingContextGroup.mm&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKBrowsingContextGroupInternal.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKBrowsingContextGroupPrivate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKBrowsingContextLoadDelegate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKBrowsingContextPolicyDelegate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKConnection.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKConnection.mm&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKConnectionInternal.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKProcessGroup.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKProcessGroup.mm&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKProcessGroupInternal.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKProcessGroupPrivate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKTypeRefWrapper.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKTypeRefWrapper.mm&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKView.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKViewPrivate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WebKit2.h&apos;, u&apos;Source/WebKit2/WebKit2.xcodeproj/project.pbxproj&apos;]&quot; exit_code: 1
Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextController.h:87:  Missing spaces around /  [whitespace/operators] [3]
Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h:79:  Missing spaces around =  [whitespace/operators] [4]
Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextPolicyDelegate.h:32:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextPolicyDelegate.h:33:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextPolicyDelegate.h:34:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextPolicyDelegate.h:35:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextPolicyDelegate.h:36:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextPolicyDelegate.h:37:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextPolicyDelegate.h:38:  One space before end of line comments  [whitespace/comments] [5]
Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextPolicyDelegate.h:40:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 10 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955015</commentid>
    <comment_count>8</comment_count>
      <attachid>218076</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-11-29 12:14:18 -0800</bug_when>
    <thetext>Comment on attachment 218076
Patch

Attachment 218076 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/39948028</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955017</commentid>
    <comment_count>9</comment_count>
      <attachid>218076</attachid>
    <who name="">mitz</who>
    <bug_when>2013-11-29 12:47:32 -0800</bug_when>
    <thetext>Comment on attachment 218076
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955018</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-11-29 12:52:04 -0800</bug_when>
    <thetext>Committed r159874: &lt;http://trac.webkit.org/changeset/159874&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218074</attachid>
            <date>2013-11-29 11:04:08 -0800</date>
            <delta_ts>2013-11-29 12:09:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125017-20131129110408.patch</filename>
            <type>text/plain</type>
            <size>255322</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTg3MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDEzLTExLTI5ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBBUEkgZmlsZXMgc2hhcmVkIGJl
dHdlZW4gTWFjIGFuZCBpT1MgdG8gdGhlIENvY29hIGRpcmVjdG9yeQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1MDE3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dL
QnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIuaC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5tbTogQ29w
aWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2luZ0NvbnRl
eHRDb250cm9sbGVyLm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tCcm93c2lu
Z0NvbnRleHRDb250cm9sbGVySW50ZXJuYWwuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVySW50ZXJuYWwuaC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxl
clByaXZhdGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
V0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyUHJpdmF0ZS5oLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRHcm91cC5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dEdyb3VwLmguCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4dEdyb3VwLm1tOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4
dEdyb3VwLm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRl
eHRHcm91cEludGVybmFsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5oLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRHcm91cFByaXZhdGUuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2luZ0NvbnRleHRHcm91
cFByaXZhdGUuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250
ZXh0TG9hZERlbGVnYXRlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlLmguCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4dFBvbGljeURlbGVnYXRlLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0UG9s
aWN5RGVsZWdhdGUuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29ubmVjdGlv
bi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Nvbm5l
Y3Rpb24uaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29ubmVjdGlvbi5tbTog
Q29waWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tDb25uZWN0aW9u
Lm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb25uZWN0aW9uSW50ZXJuYWwu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tDb25uZWN0
aW9uSW50ZXJuYWwuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc0dy
b3VwLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJv
Y2Vzc0dyb3VwLmguCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91
cC5tbTogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcm9j
ZXNzR3JvdXAubW0uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91
cEludGVybmFsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1dLUHJvY2Vzc0dyb3VwSW50ZXJuYWwuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L1dLUHJvY2Vzc0dyb3VwUHJpdmF0ZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL21hYy9XS1Byb2Nlc3NHcm91cFByaXZhdGUuaC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL1dLVHlwZVJlZldyYXBwZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tUeXBlUmVmV3JhcHBlci5oLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tUeXBlUmVmV3JhcHBlci5tbTogQ29waWVkIGZyb20gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tUeXBlUmVmV3JhcHBlci5tbS4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLVmlldy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L1dLVmlld1ByaXZhdGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9tYWMvV0tWaWV3UHJpdmF0ZS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV2Vi
S2l0Mi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XZWJL
aXQyLmguCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2luZ0NvbnRleHRDb250
cm9sbGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2lu
Z0NvbnRleHRDb250cm9sbGVyLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
bWFjL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckludGVybmFsLmg6IFJlbW92ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyUHJpdmF0
ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250
ZXh0R3JvdXAuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dz
aW5nQ29udGV4dEdyb3VwLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFj
L1dLQnJvd3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0R3JvdXBQcml2YXRlLmg6IFJlbW92ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdh
dGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29u
dGV4dFBvbGljeURlbGVnYXRlLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9t
YWMvV0tDb25uZWN0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMv
V0tDb25uZWN0aW9uLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dL
Q29ubmVjdGlvbkludGVybmFsLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9t
YWMvV0tQcm9jZXNzR3JvdXAuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21h
Yy9XS1Byb2Nlc3NHcm91cC5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21h
Yy9XS1Byb2Nlc3NHcm91cEludGVybmFsLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9tYWMvV0tQcm9jZXNzR3JvdXBQcml2YXRlLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9tYWMvV0tUeXBlUmVmV3JhcHBlci5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvbWFjL1dLVHlwZVJlZldyYXBwZXIubW06IFJlbW92ZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9tYWMvV0tWaWV3UHJpdmF0ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvbWFjL1dlYktpdDIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisKIDIwMTMtMTEtMjkgIEh1bnNlb3AgSmVvbmcgIDxoczg1Lmplb25n
QHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIHZpZXdwb3J0IG11c3QgYmUgc2FtZSB3aXRo
IHRoZSBzaXplIG9mIHdlYnZpZXcKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIu
aAkocmV2aXNpb24gMTU5ODczKQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIuaDoxNTk4NzMpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxXZWJLaXQyL1dLQnJvd3NpbmdDb250ZXh0R3Jv
dXAuaD4KKyNpbXBvcnQgPFdlYktpdDIvV0tGb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxXZWJLaXQy
L1dLUHJvY2Vzc0dyb3VwLmg+CisKKyNpZiBXS19BUElfRU5BQkxFRAorCitAY2xhc3MgV0tCYWNr
Rm9yd2FyZExpc3Q7CitAY2xhc3MgV0tCYWNrRm9yd2FyZExpc3RJdGVtOworQHByb3RvY29sIFdL
QnJvd3NpbmdDb250ZXh0SGlzdG9yeURlbGVnYXRlOworQHByb3RvY29sIFdLQnJvd3NpbmdDb250
ZXh0TG9hZERlbGVnYXRlOworQHByb3RvY29sIFdLQnJvd3NpbmdDb250ZXh0UG9saWN5RGVsZWdh
dGU7CisKK1dLX0FQSV9DTEFTUworQGludGVyZmFjZSBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xs
ZXIgOiBOU09iamVjdAorCitAcHJvcGVydHkgKHJlYWRvbmx5KSBXS1Byb2Nlc3NHcm91cCAqcHJv
Y2Vzc0dyb3VwOworQHByb3BlcnR5IChyZWFkb25seSkgV0tCcm93c2luZ0NvbnRleHRHcm91cCAq
YnJvd3NpbmdDb250ZXh0R3JvdXA7CisKKyNwcmFnbWEgbWFyayBEZWxlZ2F0ZXMKKworQHByb3Bl
cnR5IChhc3NpZ24pIGlkIDxXS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZT4gbG9hZERlbGVn
YXRlOworQHByb3BlcnR5IChhc3NpZ24pIGlkIDxXS0Jyb3dzaW5nQ29udGV4dFBvbGljeURlbGVn
YXRlPiBwb2xpY3lEZWxlZ2F0ZTsKK0Bwcm9wZXJ0eSAoYXNzaWduKSBpZCA8V0tCcm93c2luZ0Nv
bnRleHRIaXN0b3J5RGVsZWdhdGU+IGhpc3RvcnlEZWxlZ2F0ZTsKKworI3ByYWdtYSBtYXJrIExv
YWRpbmcKKworKyAodm9pZClyZWdpc3RlclNjaGVtZUZvckN1c3RvbVByb3RvY29sOihOU1N0cmlu
ZyAqKXNjaGVtZTsKKysgKHZvaWQpdW5yZWdpc3RlclNjaGVtZUZvckN1c3RvbVByb3RvY29sOihO
U1N0cmluZyAqKXNjaGVtZTsKKworLyogTG9hZCBhIHJlcXVlc3QuIFRoaXMgaXMgb25seSB2YWxp
ZCBmb3IgcmVxdWVzdHMgb2Ygbm9uLWZpbGU6IFVSTHMuIFBhc3NpbmcgYQorICAgZmlsZTogVVJM
IHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uLiAqLworLSAodm9pZClsb2FkUmVxdWVzdDooTlNVUkxS
ZXF1ZXN0ICopcmVxdWVzdDsKKy0gKHZvaWQpbG9hZFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJl
cXVlc3QgdXNlckRhdGE6KGlkKXVzZXJEYXRhOworCisvKiBMb2FkIGEgZmlsZTogVVJMLiBPcGVu
cyB0aGUgc2FuZGJveCBvbmx5IGZvciBmaWxlcyB3aXRoaW4gYWxsb3dlZERpcmVjdG9yeS4KKyAg
ICAtIFBhc3NpbmcgYSBub24tZmlsZTogVVJMIHRvIGVpdGhlciBwYXJhbWV0ZXIgd2lsbCB5aWVs
ZCBhbiBleGNlcHRpb24uCisgICAgLSBQYXNzaW5nIG5pbCBhcyB0aGUgYWxsb3dlZERpcmVjdG9y
eSB3aWxsIG9wZW4gdGhlIGVudGlyZSBmaWxlLXN5c3RlbSBmb3IKKyAgICAgIHJlYWRpbmcuCisq
LworLSAodm9pZClsb2FkRmlsZVVSTDooTlNVUkwgKilVUkwgcmVzdHJpY3RUb0ZpbGVzV2l0aGlu
OihOU1VSTCAqKWFsbG93ZWREaXJlY3Rvcnk7CistICh2b2lkKWxvYWRGaWxlVVJMOihOU1VSTCAq
KVVSTCByZXN0cmljdFRvRmlsZXNXaXRoaW46KE5TVVJMICopYWxsb3dlZERpcmVjdG9yeSB1c2Vy
RGF0YTooaWQpdXNlckRhdGE7CisKKy8qIExvYWQgYSBwYWdlIHVzaW5nIHRoZSBwYXNzZWQgaW4g
c3RyaW5nIGFzIGl0cyBjb250ZW50cy4gKi8KKy0gKHZvaWQpbG9hZEhUTUxTdHJpbmc6KE5TU3Ry
aW5nICopSFRNTFN0cmluZyBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkw7CistICh2b2lkKWxvYWRI
VE1MU3RyaW5nOihOU1N0cmluZyAqKUhUTUxTdHJpbmcgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJM
IHVzZXJEYXRhOihpZCl1c2VyRGF0YTsKKworLyogTG9hZCBhIHBhZ2UgdXNpbmcgdGhlIHBhc3Nl
ZCBpbiBkYXRhIGFzIGl0cyBjb250ZW50cy4gKi8KKy0gKHZvaWQpbG9hZERhdGE6KE5TRGF0YSAq
KWRhdGEgTUlNRVR5cGU6KE5TU3RyaW5nICopTUlNRVR5cGUgdGV4dEVuY29kaW5nTmFtZTooTlNT
dHJpbmcgKillbmNvZGluZ05hbWUgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMOworLSAodm9pZCls
b2FkRGF0YTooTlNEYXRhICopZGF0YSBNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZSB0ZXh0
RW5jb2RpbmdOYW1lOihOU1N0cmluZyAqKWVuY29kaW5nTmFtZSBiYXNlVVJMOihOU1VSTCAqKWJh
c2VVUkwgdXNlckRhdGE6KGlkKXVzZXJEYXRhOworCisvKiBTdG9wcyB0aGUgbG9hZCBhc3NvY2lh
dGVkIHdpdGggdGhlIGFjdGl2ZSBVUkwuICovCistICh2b2lkKXN0b3BMb2FkaW5nOworCisvKiBS
ZWxvYWQgdGhlIGN1cnJlbnRseSBhY3RpdmUgVVJMLiAqLworLSAodm9pZClyZWxvYWQ7CisKKy8q
IFJlbG9hZCB0aGUgY3VycmVudGx5IGFjdGl2ZSBVUkwsIGJ5cGFzc2luZyBjYWNoZXMuICovCist
ICh2b2lkKXJlbG9hZEZyb21PcmlnaW47CisKKworI3ByYWdtYSBtYXJrIEJhY2svRm9yd2FyZAor
CisvKiBHbyB0byB0aGUgbmV4dCBwYWdlIGluIHRoZSBiYWNrL2ZvcndhcmQgbGlzdC4gKi8KKy0g
KHZvaWQpZ29Gb3J3YXJkOworCisvKiBXaGV0aGVyIHRoZXJlIGlzIGEgbmV4dCBwYWdlIGluIHRo
ZSBiYWNrL2ZvcndhcmQgbGlzdC4gKi8KK0Bwcm9wZXJ0eShyZWFkb25seSkgQk9PTCBjYW5Hb0Zv
cndhcmQ7CisKKy8qIEdvIHRvIHRoZSBwcmV2aW91cyBwYWdlIGluIHRoZSBiYWNrL2ZvcndhcmQg
bGlzdC4gKi8KKy0gKHZvaWQpZ29CYWNrOworCisvKiBXaGV0aGVyIHRoZXJlIGlzIGEgcHJldmlv
dXMgcGFnZSBpbiB0aGUgYmFjay9mb3J3YXJkIGxpc3QuICovCitAcHJvcGVydHkocmVhZG9ubHkp
IEJPT0wgY2FuR29CYWNrOworCistICh2b2lkKWdvVG9CYWNrRm9yd2FyZExpc3RJdGVtOihXS0Jh
Y2tGb3J3YXJkTGlzdEl0ZW0gKilpdGVtOworCitAcHJvcGVydHkocmVhZG9ubHkpIFdLQmFja0Zv
cndhcmRMaXN0ICpiYWNrRm9yd2FyZExpc3Q7CisKKyNwcmFnbWEgbWFyayBBY3RpdmUgTG9hZCBJ
bnRyb3NwZWN0aW9uCisKKy8qIFVSTCBmb3IgdGhlIGFjdGl2ZSBsb2FkLiBUaGlzIGlzIHRoZSBV
UkwgdGhhdCBzaG91bGQgYmUgc2hvd24gaW4gdXNlciBpbnRlcmZhY2UuICovCitAcHJvcGVydHko
cmVhZG9ubHkpIE5TVVJMICphY3RpdmVVUkw7CisKKy8qIFVSTCBmb3IgYSByZXF1ZXN0IHRoYXQg
aGFzIGJlZW4gc2VudCwgYnV0IG5vIHJlc3BvbnNlIGhhcyBiZWVuIHJlY2VpdmVkIHlldC4gKi8K
K0Bwcm9wZXJ0eShyZWFkb25seSkgTlNVUkwgKnByb3Zpc2lvbmFsVVJMOworCisvKiBVUkwgZm9y
IGEgcmVxdWVzdCB0aGF0IGhhcyBiZWVuIHJlY2VpdmVkLCBhbmQgaXMgbm93IGJlaW5nIHVzZWQu
ICovCitAcHJvcGVydHkocmVhZG9ubHkpIE5TVVJMICpjb21taXR0ZWRVUkw7CisKK0Bwcm9wZXJ0
eShyZWFkb25seSkgTlNVUkwgKnVucmVhY2hhYmxlVVJMOworCitAcHJvcGVydHkocmVhZG9ubHkp
IGRvdWJsZSBlc3RpbWF0ZWRQcm9ncmVzczsKKworI3ByYWdtYSBtYXJrIEFjdGl2ZSBEb2N1bWVu
dCBJbnRyb3NwZWN0aW9uCisKKy8qIFRpdGxlIG9mIHRoZSBkb2N1bWVudCBhc3NvY2lhdGVkIHdp
dGggdGhlIGFjdGl2ZSBsb2FkLiAqLworQHByb3BlcnR5KHJlYWRvbmx5KSBOU1N0cmluZyAqdGl0
bGU7CisKKworI3ByYWdtYSBtYXJrIFpvb20KKworLyogU2V0cyB0aGUgdGV4dCB6b29tIGZvciB0
aGUgYWN0aXZlIFVSTC4gKi8KK0Bwcm9wZXJ0eSBDR0Zsb2F0IHRleHRab29tOworCisvKiBTZXRz
IHRoZSB0ZXh0IHpvb20gZm9yIHRoZSBhY3RpdmUgVVJMLiAqLworQHByb3BlcnR5IENHRmxvYXQg
cGFnZVpvb207CisKK0BlbmQKKworI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxl
ci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
QnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5tbQkocmV2aXNpb24gMTU5ODczKQkoZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIu
bW06MTU5ODczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Jyb3dz
aW5nQ29udGV4dENvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldLQnJvd3NpbmdDb250
ZXh0Q29udHJvbGxlckludGVybmFsLmgiCisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0
ICJPYmpDT2JqZWN0R3JhcGguaCIKKyNpbXBvcnQgIldLQmFja0ZvcndhcmRMaXN0SW50ZXJuYWwu
aCIKKyNpbXBvcnQgIldLQmFja0ZvcndhcmRMaXN0SXRlbUludGVybmFsLmgiCisjaW1wb3J0ICJX
S0Vycm9yQ0YuaCIKKyNpbXBvcnQgIldLRnJhbWUuaCIKKyNpbXBvcnQgIldLRnJhbWVQb2xpY3lM
aXN0ZW5lci5oIgorI2ltcG9ydCAiV0tOU0FycmF5LmgiCisjaW1wb3J0ICJXS05TVVJMRXh0cmFz
LmgiCisjaW1wb3J0ICJXS1BhZ2VQcml2YXRlLmgiCisjaW1wb3J0ICJXS1JldGFpblB0ci5oIgor
I2ltcG9ydCAiV0tTdHJpbmdDRi5oIgorI2ltcG9ydCAiV0tVUkxDRi5oIgorI2ltcG9ydCAiV0tV
UkxSZXF1ZXN0LmgiCisjaW1wb3J0ICJXS1VSTFJlcXVlc3ROUy5oIgorI2ltcG9ydCAiV0tVUkxS
ZXNwb25zZS5oIgorI2ltcG9ydCAiV0tVUkxSZXNwb25zZU5TLmgiCisjaW1wb3J0ICJXZWJDb250
ZXh0LmgiCisjaW1wb3J0ICJXZWJEYXRhLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNp
bXBvcnQgPHd0Zi9PYmpjUnVudGltZUV4dHJhcy5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5o
PgorCisjaW1wb3J0ICJXS0Jyb3dzaW5nQ29udGV4dEdyb3VwSW50ZXJuYWwuaCIKKyNpbXBvcnQg
IldLQnJvd3NpbmdDb250ZXh0SGFuZGxlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLQnJvd3NpbmdD
b250ZXh0TG9hZERlbGVnYXRlLmgiCisjaW1wb3J0ICJXS0Jyb3dzaW5nQ29udGV4dFBvbGljeURl
bGVnYXRlLmgiCisjaW1wb3J0ICJXS1Byb2Nlc3NHcm91cEludGVybmFsLmgiCisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7CisKK2NsYXNzIFBhZ2VMb2FkU3RhdGVPYnNlcnZlciA6IHB1YmxpYyBQ
YWdlTG9hZFN0YXRlOjpPYnNlcnZlciB7CitwdWJsaWM6CisgICAgUGFnZUxvYWRTdGF0ZU9ic2Vy
dmVyKFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqY29udHJvbGxlcikKKyAgICAgICAgOiBt
X2NvbnRyb2xsZXIoY29udHJvbGxlcikKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIHZp
cnR1YWwgdm9pZCB3aWxsQ2hhbmdlVGl0bGUoKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgW21f
Y29udHJvbGxlciB3aWxsQ2hhbmdlVmFsdWVGb3JLZXk6QCJ0aXRsZSJdOworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VUaXRsZSgpIE9WRVJSSURFCisgICAgeworICAgICAgICBb
bV9jb250cm9sbGVyIGRpZENoYW5nZVZhbHVlRm9yS2V5OkAidGl0bGUiXTsKKyAgICB9CisKKyAg
ICBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKm1fY29udHJvbGxlcjsKK307CisKK3N0YXRp
YyBpbmxpbmUgTlNTdHJpbmcgKmF1dG9yZWxlYXNlZChXS1N0cmluZ1JlZiBzdHJpbmcpCit7Cisg
ICAgcmV0dXJuIHN0cmluZyA/IENGQnJpZGdpbmdSZWxlYXNlKFdLU3RyaW5nQ29weUNGU3RyaW5n
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGFkb3B0V0soc3RyaW5nKS5nZXQoKSkpIDogbmlsOworfQor
CitzdGF0aWMgaW5saW5lIE5TVVJMICphdXRvcmVsZWFzZWQoV0tVUkxSZWYgdXJsKQoreworICAg
IHJldHVybiB1cmwgPyBDRkJyaWRnaW5nUmVsZWFzZShXS1VSTENvcHlDRlVSTChrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBhZG9wdFdLKHVybCkuZ2V0KCkpKSA6IG5pbDsKK30KKworTlNTdHJpbmcgKiBj
b25zdCBXS0FjdGlvbklzTWFpbkZyYW1lS2V5ID0gQCJXS0FjdGlvbklzTWFpbkZyYW1lS2V5IjsK
K05TU3RyaW5nICogY29uc3QgV0tBY3Rpb25OYXZpZ2F0aW9uVHlwZUtleSA9IEAiV0tBY3Rpb25O
YXZpZ2F0aW9uVHlwZUtleSI7CitOU1N0cmluZyAqIGNvbnN0IFdLQWN0aW9uTW91c2VCdXR0b25L
ZXkgPSBAIldLQWN0aW9uTW91c2VCdXR0b25LZXkiOworTlNTdHJpbmcgKiBjb25zdCBXS0FjdGlv
bk1vZGlmaWVyRmxhZ3NLZXkgPSBAIldLQWN0aW9uTW9kaWZpZXJGbGFnc0tleSI7CitOU1N0cmlu
ZyAqIGNvbnN0IFdLQWN0aW9uVVJMUmVxdWVzdEtleSA9IEAiV0tBY3Rpb25VUkxSZXF1ZXN0S2V5
IjsKK05TU3RyaW5nICogY29uc3QgV0tBY3Rpb25VUkxSZXNwb25zZUtleSA9IEAiV0tBY3Rpb25V
UkxSZXNwb25zZUtleSI7CitOU1N0cmluZyAqIGNvbnN0IFdLQWN0aW9uRnJhbWVOYW1lS2V5ID0g
QCJXS0FjdGlvbkZyYW1lTmFtZUtleSI7CitOU1N0cmluZyAqIGNvbnN0IFdLQWN0aW9uT3JpZ2lu
YXRpbmdGcmFtZVVSTEtleSA9IEAiV0tBY3Rpb25PcmlnaW5hdGluZ0ZyYW1lVVJMS2V5IjsKK05T
U3RyaW5nICogY29uc3QgV0tBY3Rpb25DYW5TaG93TUlNRVR5cGVLZXkgPSBAIldLQWN0aW9uQ2Fu
U2hvd01JTUVUeXBlS2V5IjsKKworQGltcGxlbWVudGF0aW9uIFdLQnJvd3NpbmdDb250ZXh0Q29u
dHJvbGxlciB7CisgICAgLy8gVW5kZXJseWluZyBXS1BhZ2VSZWYuCisgICAgV0tSZXRhaW5QdHI8
V0tQYWdlUmVmPiBfcGFnZVJlZjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxQYWdlTG9hZFN0YXRl
T2JzZXJ2ZXI+IF9wYWdlTG9hZFN0YXRlT2JzZXJ2ZXI7Cit9CisKKy0gKHZvaWQpZGVhbGxvYwor
eworICAgIHRvSW1wbChfcGFnZVJlZi5nZXQoKSktPnBhZ2VMb2FkU3RhdGUoKS5yZW1vdmVPYnNl
cnZlcigqX3BhZ2VMb2FkU3RhdGVPYnNlcnZlcik7CisgICAgV0tQYWdlU2V0UGFnZUxvYWRlckNs
aWVudChfcGFnZVJlZi5nZXQoKSwgbnVsbHB0cik7CisgICAgV0tQYWdlU2V0UGFnZVBvbGljeUNs
aWVudChfcGFnZVJlZi5nZXQoKSwgbnVsbHB0cik7CisKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9
CisKKy0gKFdLUHJvY2Vzc0dyb3VwICopcHJvY2Vzc0dyb3VwCit7CisgICAgV2ViQ29udGV4dCog
Y29udGV4dCA9IHRvSW1wbChfcGFnZVJlZi5nZXQoKSktPnByb2Nlc3MoKS0+Y29udGV4dCgpOwor
ICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gd3JhcHBl
cigqY29udGV4dCk7Cit9CisKKy0gKFdLQnJvd3NpbmdDb250ZXh0R3JvdXAgKilicm93c2luZ0Nv
bnRleHRHcm91cAoreworICAgIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwID0gdG9JbXBsKF9wYWdl
UmVmLmdldCgpKS0+cGFnZUdyb3VwKCk7CisgICAgaWYgKCFwYWdlR3JvdXApCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgcmV0dXJuIHdyYXBwZXIoKnBhZ2VHcm91cCk7Cit9CisKKy0gKFdLUGFn
ZVJlZilfcGFnZVJlZgoreworICAgIHJldHVybiBfcGFnZVJlZi5nZXQoKTsKK30KKworI3ByYWdt
YSBtYXJrIExvYWRpbmcKKworKyAodm9pZClyZWdpc3RlclNjaGVtZUZvckN1c3RvbVByb3RvY29s
OihOU1N0cmluZyAqKXNjaGVtZQoreworICAgIGlmICghc2NoZW1lKQorICAgICAgICByZXR1cm47
CisKKyAgICBOU1N0cmluZyAqbG93ZXJjYXNlU2NoZW1lID0gW3NjaGVtZSBsb3dlcmNhc2VTdHJp
bmddOworICAgIFtbV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyIGN1c3RvbVNjaGVtZXNdIGFk
ZE9iamVjdDpsb3dlcmNhc2VTY2hlbWVdOworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl0gcG9zdE5vdGlmaWNhdGlvbk5hbWU6U2NoZW1lRm9yQ3VzdG9tUHJvdG9jb2xS
ZWdpc3RlcmVkTm90aWZpY2F0aW9uTmFtZSBvYmplY3Q6bG93ZXJjYXNlU2NoZW1lXTsKK30KKwor
KyAodm9pZCl1bnJlZ2lzdGVyU2NoZW1lRm9yQ3VzdG9tUHJvdG9jb2w6KE5TU3RyaW5nICopc2No
ZW1lCit7CisgICAgaWYgKCFzY2hlbWUpCisgICAgICAgIHJldHVybjsKKworICAgIE5TU3RyaW5n
ICpsb3dlcmNhc2VTY2hlbWUgPSBbc2NoZW1lIGxvd2VyY2FzZVN0cmluZ107CisgICAgW1tXS0Jy
b3dzaW5nQ29udGV4dENvbnRyb2xsZXIgY3VzdG9tU2NoZW1lc10gcmVtb3ZlT2JqZWN0Omxvd2Vy
Y2FzZVNjaGVtZV07CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBw
b3N0Tm90aWZpY2F0aW9uTmFtZTpTY2hlbWVGb3JDdXN0b21Qcm90b2NvbFVucmVnaXN0ZXJlZE5v
dGlmaWNhdGlvbk5hbWUgb2JqZWN0Omxvd2VyY2FzZVNjaGVtZV07Cit9CisKKy0gKHZvaWQpbG9h
ZFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QKK3sKKyAgICBbc2VsZiBsb2FkUmVxdWVz
dDpyZXF1ZXN0IHVzZXJEYXRhOm5pbF07Cit9CisKKy0gKHZvaWQpbG9hZFJlcXVlc3Q6KE5TVVJM
UmVxdWVzdCAqKXJlcXVlc3QgdXNlckRhdGE6KGlkKXVzZXJEYXRhCit7CisgICAgV0tSZXRhaW5Q
dHI8V0tVUkxSZXF1ZXN0UmVmPiB3a1JlcXVlc3QgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENyZWF0
ZVdpdGhOU1VSTFJlcXVlc3QocmVxdWVzdCkpOworCisgICAgUmVmUHRyPE9iakNPYmplY3RHcmFw
aD4gd2tVc2VyRGF0YTsKKyAgICBpZiAodXNlckRhdGEpCisgICAgICAgIHdrVXNlckRhdGEgPSBP
YmpDT2JqZWN0R3JhcGg6OmNyZWF0ZSh1c2VyRGF0YSk7CisKKyAgICBXS1BhZ2VMb2FkVVJMUmVx
dWVzdFdpdGhVc2VyRGF0YShfcGFnZVJlZi5nZXQoKSwgd2tSZXF1ZXN0LmdldCgpLCAoV0tUeXBl
UmVmKXdrVXNlckRhdGEuZ2V0KCkpOworfQorCistICh2b2lkKWxvYWRGaWxlVVJMOihOU1VSTCAq
KVVSTCByZXN0cmljdFRvRmlsZXNXaXRoaW46KE5TVVJMICopYWxsb3dlZERpcmVjdG9yeQorewor
ICAgIFtzZWxmIGxvYWRGaWxlVVJMOlVSTCByZXN0cmljdFRvRmlsZXNXaXRoaW46YWxsb3dlZERp
cmVjdG9yeSB1c2VyRGF0YTpuaWxdOworfQorCistICh2b2lkKWxvYWRGaWxlVVJMOihOU1VSTCAq
KVVSTCByZXN0cmljdFRvRmlsZXNXaXRoaW46KE5TVVJMICopYWxsb3dlZERpcmVjdG9yeSB1c2Vy
RGF0YTooaWQpdXNlckRhdGEKK3sKKyAgICBpZiAoIVtVUkwgaXNGaWxlVVJMXSB8fCAoYWxsb3dl
ZERpcmVjdG9yeSAmJiAhW2FsbG93ZWREaXJlY3RvcnkgaXNGaWxlVVJMXSkpCisgICAgICAgIFtO
U0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJBdHRl
bXB0ZWQgdG8gbG9hZCBhIG5vbi1maWxlIFVSTCJdOworCisgICAgV0tSZXRhaW5QdHI8V0tVUkxS
ZWY+IHdrVVJMID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhDRlVSTCgoQ0ZVUkxSZWYpVVJMKSk7
CisgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrQWxsb3dlZERpcmVjdG9yeSA9IGFkb3B0V0so
V0tVUkxDcmVhdGVXaXRoQ0ZVUkwoKENGVVJMUmVmKWFsbG93ZWREaXJlY3RvcnkpKTsKKyAgICAK
KyAgICBSZWZQdHI8T2JqQ09iamVjdEdyYXBoPiB3a1VzZXJEYXRhOworICAgIGlmICh1c2VyRGF0
YSkKKyAgICAgICAgd2tVc2VyRGF0YSA9IE9iakNPYmplY3RHcmFwaDo6Y3JlYXRlKHVzZXJEYXRh
KTsKKworICAgIFdLUGFnZUxvYWRGaWxlV2l0aFVzZXJEYXRhKF9wYWdlUmVmLmdldCgpLCB3a1VS
TC5nZXQoKSwgd2tBbGxvd2VkRGlyZWN0b3J5LmdldCgpLCAoV0tUeXBlUmVmKXdrVXNlckRhdGEu
Z2V0KCkpOworfQorCistICh2b2lkKWxvYWRIVE1MU3RyaW5nOihOU1N0cmluZyAqKUhUTUxTdHJp
bmcgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMCit7CisgICAgW3NlbGYgbG9hZEhUTUxTdHJpbmc6
SFRNTFN0cmluZyBiYXNlVVJMOmJhc2VVUkwgdXNlckRhdGE6bmlsXTsKK30KKworLSAodm9pZCls
b2FkSFRNTFN0cmluZzooTlNTdHJpbmcgKilIVE1MU3RyaW5nIGJhc2VVUkw6KE5TVVJMICopYmFz
ZVVSTCB1c2VyRGF0YTooaWQpdXNlckRhdGEKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gd2tIVE1MU3RyaW5nOworICAgIGlmIChIVE1MU3RyaW5nKQorICAgICAgICB3a0hUTUxTdHJp
bmcgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilIVE1M
U3RyaW5nKSk7CisKKyAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tCYXNlVVJMOworICAgIGlm
IChiYXNlVVJMKQorICAgICAgICB3a0Jhc2VVUkwgPSBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aENG
VVJMKChDRlVSTFJlZiliYXNlVVJMKSk7CisKKyAgICBSZWZQdHI8T2JqQ09iamVjdEdyYXBoPiB3
a1VzZXJEYXRhOworICAgIGlmICh1c2VyRGF0YSkKKyAgICAgICAgd2tVc2VyRGF0YSA9IE9iakNP
YmplY3RHcmFwaDo6Y3JlYXRlKHVzZXJEYXRhKTsKKworICAgIFdLUGFnZUxvYWRIVE1MU3RyaW5n
V2l0aFVzZXJEYXRhKF9wYWdlUmVmLmdldCgpLCB3a0hUTUxTdHJpbmcuZ2V0KCksIHdrQmFzZVVS
TC5nZXQoKSwgKFdLVHlwZVJlZil3a1VzZXJEYXRhLmdldCgpKTsKK30KKworLSAodm9pZClsb2Fk
RGF0YTooTlNEYXRhICopZGF0YSBNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZSB0ZXh0RW5j
b2RpbmdOYW1lOihOU1N0cmluZyAqKWVuY29kaW5nTmFtZSBiYXNlVVJMOihOU1VSTCAqKWJhc2VV
UkwKK3sKKyAgICBbc2VsZiBsb2FkRGF0YTpkYXRhIE1JTUVUeXBlOk1JTUVUeXBlIHRleHRFbmNv
ZGluZ05hbWU6ZW5jb2RpbmdOYW1lIGJhc2VVUkw6YmFzZVVSTCB1c2VyRGF0YTpuaWxdOworfQor
CitzdGF0aWMgdm9pZCByZWxlYXNlTlNEYXRhKHVuc2lnbmVkIGNoYXIqLCBjb25zdCB2b2lkKiBk
YXRhKQoreworICAgIFsoTlNEYXRhICopZGF0YSByZWxlYXNlXTsKK30KKworLSAodm9pZClsb2Fk
RGF0YTooTlNEYXRhICopZGF0YSBNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZSB0ZXh0RW5j
b2RpbmdOYW1lOihOU1N0cmluZyAqKWVuY29kaW5nTmFtZSBiYXNlVVJMOihOU1VSTCAqKWJhc2VV
UkwgdXNlckRhdGE6KGlkKXVzZXJEYXRhCit7CisgICAgUmVmUHRyPFdlYkRhdGE+IHdrRGF0YTsK
KyAgICBpZiAoZGF0YSkgeworICAgICAgICBbZGF0YSByZXRhaW5dOworICAgICAgICB3a0RhdGEg
PSBXZWJEYXRhOjpjcmVhdGVXaXRob3V0Q29weWluZygoY29uc3QgdW5zaWduZWQgY2hhciopW2Rh
dGEgYnl0ZXNdLCBbZGF0YSBsZW5ndGhdLCByZWxlYXNlTlNEYXRhLCBkYXRhKTsKKyAgICB9CisK
KyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tNSU1FVHlwZTsKKyAgICBpZiAoTUlNRVR5
cGUpCisgICAgICAgIHdrTUlNRVR5cGUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aENGU3Ry
aW5nKChDRlN0cmluZ1JlZilNSU1FVHlwZSkpOworCisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHdrRW5jb2RpbmdOYW1lOworICAgIGlmIChlbmNvZGluZ05hbWUpCisgICAgICAgIHdrRW5j
b2RpbmdOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdS
ZWYpZW5jb2RpbmdOYW1lKSk7CisKKyAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tCYXNlVVJM
OworICAgIGlmIChiYXNlVVJMKQorICAgICAgICB3a0Jhc2VVUkwgPSBhZG9wdFdLKFdLVVJMQ3Jl
YXRlV2l0aENGVVJMKChDRlVSTFJlZiliYXNlVVJMKSk7CisKKyAgICBSZWZQdHI8T2JqQ09iamVj
dEdyYXBoPiB3a1VzZXJEYXRhOworICAgIGlmICh1c2VyRGF0YSkKKyAgICAgICAgd2tVc2VyRGF0
YSA9IE9iakNPYmplY3RHcmFwaDo6Y3JlYXRlKHVzZXJEYXRhKTsKKworICAgIFdLUGFnZUxvYWRE
YXRhV2l0aFVzZXJEYXRhKF9wYWdlUmVmLmdldCgpLCB0b0FQSSh3a0RhdGEuZ2V0KCkpLCB3a01J
TUVUeXBlLmdldCgpLCB3a0VuY29kaW5nTmFtZS5nZXQoKSwgd2tCYXNlVVJMLmdldCgpLCAoV0tU
eXBlUmVmKXdrVXNlckRhdGEuZ2V0KCkpOworfQorCistICh2b2lkKXN0b3BMb2FkaW5nCit7Cisg
ICAgV0tQYWdlU3RvcExvYWRpbmcoX3BhZ2VSZWYuZ2V0KCkpOworfQorCistICh2b2lkKXJlbG9h
ZAoreworICAgIFdLUGFnZVJlbG9hZChfcGFnZVJlZi5nZXQoKSk7Cit9CisKKy0gKHZvaWQpcmVs
b2FkRnJvbU9yaWdpbgoreworICAgIFdLUGFnZVJlbG9hZEZyb21PcmlnaW4oX3BhZ2VSZWYuZ2V0
KCkpOworfQorCisjcHJhZ21hIG1hcmsgQmFjay9Gb3J3YXJkCisKKy0gKHZvaWQpZ29Gb3J3YXJk
Cit7CisgICAgV0tQYWdlR29Gb3J3YXJkKF9wYWdlUmVmLmdldCgpKTsKK30KKworLSAoQk9PTClj
YW5Hb0ZvcndhcmQKK3sKKyAgICByZXR1cm4gV0tQYWdlQ2FuR29Gb3J3YXJkKF9wYWdlUmVmLmdl
dCgpKTsKK30KKworLSAodm9pZClnb0JhY2sKK3sKKyAgICBXS1BhZ2VHb0JhY2soX3BhZ2VSZWYu
Z2V0KCkpOworfQorCistIChCT09MKWNhbkdvQmFjaworeworICAgIHJldHVybiBXS1BhZ2VDYW5H
b0JhY2soX3BhZ2VSZWYuZ2V0KCkpOworfQorCistICh2b2lkKWdvVG9CYWNrRm9yd2FyZExpc3RJ
dGVtOihXS0JhY2tGb3J3YXJkTGlzdEl0ZW0gKilpdGVtCit7CisgICAgdG9JbXBsKF9wYWdlUmVm
LmdldCgpKS0+Z29Ub0JhY2tGb3J3YXJkSXRlbSgmaXRlbS5faXRlbSk7Cit9CisKKy0gKFdLQmFj
a0ZvcndhcmRMaXN0ICopYmFja0ZvcndhcmRMaXN0Cit7CisgICAgV2ViQmFja0ZvcndhcmRMaXN0
KiBsaXN0ID0gdG9JbXBsKF9wYWdlUmVmLmdldCgpKS0+YmFja0ZvcndhcmRMaXN0KCk7CisgICAg
aWYgKCFsaXN0KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHdyYXBwZXIoKmxp
c3QpOworfQorCisjcHJhZ21hIG1hcmsgQWN0aXZlIExvYWQgSW50cm9zcGVjdGlvbgorCistIChO
U1VSTCAqKWFjdGl2ZVVSTAoreworICAgIHJldHVybiBhdXRvcmVsZWFzZWQoV0tQYWdlQ29weUFj
dGl2ZVVSTChfcGFnZVJlZi5nZXQoKSkpOworfQorCistIChOU1VSTCAqKXByb3Zpc2lvbmFsVVJM
Cit7CisgICAgcmV0dXJuIGF1dG9yZWxlYXNlZChXS1BhZ2VDb3B5UHJvdmlzaW9uYWxVUkwoX3Bh
Z2VSZWYuZ2V0KCkpKTsKK30KKworLSAoTlNVUkwgKiljb21taXR0ZWRVUkwKK3sKKyAgICByZXR1
cm4gYXV0b3JlbGVhc2VkKFdLUGFnZUNvcHlDb21taXR0ZWRVUkwoX3BhZ2VSZWYuZ2V0KCkpKTsK
K30KKworLSAoTlNVUkwgKil1bnJlYWNoYWJsZVVSTAoreworICAgIHJldHVybiBbTlNVUkwgX3dl
Yl9VUkxXaXRoV1RGU3RyaW5nOnRvSW1wbChfcGFnZVJlZi5nZXQoKSktPnBhZ2VMb2FkU3RhdGUo
KS51bnJlYWNoYWJsZVVSTCgpIHJlbGF0aXZlVG9VUkw6bmlsXTsKK30KKworLSAoZG91YmxlKWVz
dGltYXRlZFByb2dyZXNzCit7CisgICAgcmV0dXJuIHRvSW1wbChfcGFnZVJlZi5nZXQoKSktPmVz
dGltYXRlZFByb2dyZXNzKCk7Cit9CisKKyNwcmFnbWEgbWFyayBBY3RpdmUgRG9jdW1lbnQgSW50
cm9zcGVjdGlvbgorCistIChOU1N0cmluZyAqKXRpdGxlCit7CisgICAgcmV0dXJuIGF1dG9yZWxl
YXNlZChXS1BhZ2VDb3B5VGl0bGUoX3BhZ2VSZWYuZ2V0KCkpKTsKK30KKworI3ByYWdtYSBtYXJr
IFpvb20KKworLSAoQ0dGbG9hdCl0ZXh0Wm9vbQoreworICAgIHJldHVybiBXS1BhZ2VHZXRUZXh0
Wm9vbUZhY3RvcihfcGFnZVJlZi5nZXQoKSk7Cit9CisKKy0gKHZvaWQpc2V0VGV4dFpvb206KENH
RmxvYXQpdGV4dFpvb20KK3sKKyAgICByZXR1cm4gV0tQYWdlU2V0VGV4dFpvb21GYWN0b3IoX3Bh
Z2VSZWYuZ2V0KCksIHRleHRab29tKTsKK30KKworLSAoQ0dGbG9hdClwYWdlWm9vbQoreworICAg
IHJldHVybiBXS1BhZ2VHZXRQYWdlWm9vbUZhY3RvcihfcGFnZVJlZi5nZXQoKSk7Cit9CisKKy0g
KHZvaWQpc2V0UGFnZVpvb206KENHRmxvYXQpcGFnZVpvb20KK3sKKyAgICByZXR1cm4gV0tQYWdl
U2V0UGFnZVpvb21GYWN0b3IoX3BhZ2VSZWYuZ2V0KCksIHBhZ2Vab29tKTsKK30KKworc3RhdGlj
IHZvaWQgZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tG
cmFtZVJlZiBmcmFtZSwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQoreworICAgIGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93c2luZ0NvbnRleHQgPSAo
V0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopY2xpZW50SW5mbzsKKyAgICBpZiAoW2Jyb3dz
aW5nQ29udGV4dC5sb2FkRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihicm93
c2luZ0NvbnRleHRDb250cm9sbGVyRGlkU3RhcnRQcm92aXNpb25hbExvYWQ6KV0pCisgICAgICAg
IFticm93c2luZ0NvbnRleHQubG9hZERlbGVnYXRlIGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJE
aWRTdGFydFByb3Zpc2lvbmFsTG9hZDpicm93c2luZ0NvbnRleHRdOworfQorCitzdGF0aWMgdm9p
ZCBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS1Bh
Z2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQoreworICAgIGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93
c2luZ0NvbnRleHQgPSAoV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopY2xpZW50SW5mbzsK
KyAgICBpZiAoW2Jyb3dzaW5nQ29udGV4dC5sb2FkRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3Rvcihicm93c2luZ0NvbnRleHRDb250cm9sbGVyRGlkUmVjZWl2ZVNlcnZlclJlZGly
ZWN0Rm9yUHJvdmlzaW9uYWxMb2FkOildKQorICAgICAgICBbYnJvd3NpbmdDb250ZXh0LmxvYWRE
ZWxlZ2F0ZSBicm93c2luZ0NvbnRleHRDb250cm9sbGVyRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0
Rm9yUHJvdmlzaW9uYWxMb2FkOmJyb3dzaW5nQ29udGV4dF07Cit9CisKK3N0YXRpYyB2b2lkIGRp
ZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tG
cmFtZVJlZiBmcmFtZSwgV0tFcnJvclJlZiBlcnJvciwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1l
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpi
cm93c2luZ0NvbnRleHQgPSAoV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopY2xpZW50SW5m
bzsKKyAgICBpZiAoW2Jyb3dzaW5nQ29udGV4dC5sb2FkRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcihicm93c2luZ0NvbnRleHRDb250cm9sbGVyRGlkRmFpbFByb3Zpc2lvbmFs
TG9hZDp3aXRoRXJyb3I6KV0pIHsKKyAgICAgICAgUmV0YWluUHRyPENGRXJyb3JSZWY+IGNmRXJy
b3IgPSBhZG9wdENGKFdLRXJyb3JDb3B5Q0ZFcnJvcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBlcnJv
cikpOworICAgICAgICBbYnJvd3NpbmdDb250ZXh0LmxvYWREZWxlZ2F0ZSBicm93c2luZ0NvbnRl
eHRDb250cm9sbGVyRGlkRmFpbFByb3Zpc2lvbmFsTG9hZDpicm93c2luZ0NvbnRleHQgd2l0aEVy
cm9yOihOU0Vycm9yICopY2ZFcnJvci5nZXQoKV07CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBk
aWRDb21taXRMb2FkRm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdL
VHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBpZiAoIVdL
RnJhbWVJc01haW5GcmFtZShmcmFtZSkpCisgICAgICAgIHJldHVybjsKKworICAgIFdLQnJvd3Np
bmdDb250ZXh0Q29udHJvbGxlciAqYnJvd3NpbmdDb250ZXh0ID0gKFdLQnJvd3NpbmdDb250ZXh0
Q29udHJvbGxlciAqKWNsaWVudEluZm87CisgICAgaWYgKFticm93c2luZ0NvbnRleHQubG9hZERl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoYnJvd3NpbmdDb250ZXh0Q29udHJv
bGxlckRpZENvbW1pdExvYWQ6KV0pCisgICAgICAgIFticm93c2luZ0NvbnRleHQubG9hZERlbGVn
YXRlIGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJEaWRDb21taXRMb2FkOmJyb3dzaW5nQ29udGV4
dF07Cit9CisKK3N0YXRpYyB2b2lkIGRpZEZpbmlzaExvYWRGb3JGcmFtZShXS1BhZ2VSZWYgcGFn
ZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQoreworICAgIGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93c2luZ0NvbnRl
eHQgPSAoV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopY2xpZW50SW5mbzsKKyAgICBpZiAo
W2Jyb3dzaW5nQ29udGV4dC5sb2FkRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihicm93c2luZ0NvbnRleHRDb250cm9sbGVyRGlkRmluaXNoTG9hZDopXSkKKyAgICAgICAgW2Jy
b3dzaW5nQ29udGV4dC5sb2FkRGVsZWdhdGUgYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckRpZEZp
bmlzaExvYWQ6YnJvd3NpbmdDb250ZXh0XTsKK30KKworc3RhdGljIHZvaWQgZGlkRmFpbExvYWRX
aXRoRXJyb3JGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tFcnJv
clJlZiBlcnJvciwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQor
eworICAgIGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93c2luZ0NvbnRleHQgPSAoV0tC
cm93c2luZ0NvbnRleHRDb250cm9sbGVyICopY2xpZW50SW5mbzsKKyAgICBpZiAoW2Jyb3dzaW5n
Q29udGV4dC5sb2FkRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihicm93c2lu
Z0NvbnRleHRDb250cm9sbGVyRGlkRmFpbExvYWQ6d2l0aEVycm9yOildKSB7CisgICAgICAgIFJl
dGFpblB0cjxDRkVycm9yUmVmPiBjZkVycm9yID0gYWRvcHRDRihXS0Vycm9yQ29weUNGRXJyb3Io
a0NGQWxsb2NhdG9yRGVmYXVsdCwgZXJyb3IpKTsKKyAgICAgICAgW2Jyb3dzaW5nQ29udGV4dC5s
b2FkRGVsZWdhdGUgYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckRpZEZhaWxMb2FkOmJyb3dzaW5n
Q29udGV4dCB3aXRoRXJyb3I6KE5TRXJyb3IgKiljZkVycm9yLmdldCgpXTsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIGRpZFN0YXJ0UHJvZ3Jlc3MoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCit7CisgICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93c2lu
Z0NvbnRleHQgPSAoV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopY2xpZW50SW5mbzsKKyAg
ICBpZiAoW2Jyb3dzaW5nQ29udGV4dC5sb2FkRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcihicm93c2luZ0NvbnRleHRDb250cm9sbGVyRGlkU3RhcnRQcm9ncmVzczopXSkKKyAg
ICAgICAgW2Jyb3dzaW5nQ29udGV4dC5sb2FkRGVsZWdhdGUgYnJvd3NpbmdDb250ZXh0Q29udHJv
bGxlckRpZFN0YXJ0UHJvZ3Jlc3M6YnJvd3NpbmdDb250ZXh0XTsKK30KKworc3RhdGljIHZvaWQg
ZGlkQ2hhbmdlUHJvZ3Jlc3MoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Cit7CisgICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93c2luZ0NvbnRleHQgPSAo
V0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopY2xpZW50SW5mbzsKKyAgICBpZiAoW2Jyb3dz
aW5nQ29udGV4dC5sb2FkRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihicm93
c2luZ0NvbnRleHRDb250cm9sbGVyOmVzdGltYXRlZFByb2dyZXNzQ2hhbmdlZFRvOildKQorICAg
ICAgICBbYnJvd3NpbmdDb250ZXh0LmxvYWREZWxlZ2F0ZSBicm93c2luZ0NvbnRleHRDb250cm9s
bGVyOmJyb3dzaW5nQ29udGV4dCBlc3RpbWF0ZWRQcm9ncmVzc0NoYW5nZWRUbzp0b0ltcGwocGFn
ZSktPmVzdGltYXRlZFByb2dyZXNzKCldOworfQorCitzdGF0aWMgdm9pZCBkaWRGaW5pc2hQcm9n
cmVzcyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBXS0Jy
b3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmJyb3dzaW5nQ29udGV4dCA9IChXS0Jyb3dzaW5nQ29u
dGV4dENvbnRyb2xsZXIgKiljbGllbnRJbmZvOworICAgIGlmIChbYnJvd3NpbmdDb250ZXh0Lmxv
YWREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGJyb3dzaW5nQ29udGV4dENv
bnRyb2xsZXJEaWRGaW5pc2hQcm9ncmVzczopXSkKKyAgICAgICAgW2Jyb3dzaW5nQ29udGV4dC5s
b2FkRGVsZWdhdGUgYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckRpZEZpbmlzaFByb2dyZXNzOmJy
b3dzaW5nQ29udGV4dF07Cit9CisKK3N0YXRpYyB2b2lkIGRpZENoYW5nZUJhY2tGb3J3YXJkTGlz
dChXS1BhZ2VSZWYgcGFnZSwgV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGFkZGVkSXRlbSwgV0tB
cnJheVJlZiByZW1vdmVkSXRlbXMsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7CisgICAgV0tC
cm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93c2luZ0NvbnRleHQgPSAoV0tCcm93c2luZ0Nv
bnRleHRDb250cm9sbGVyICopY2xpZW50SW5mbzsKKyAgICBpZiAoIVticm93c2luZ0NvbnRleHQu
bG9hZERlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoYnJvd3NpbmdDb250ZXh0
Q29udHJvbGxlckRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdDphZGRlZEl0ZW06cmVtb3ZlZEl0ZW1z
OildKQorICAgICAgICByZXR1cm47CisKKyAgICBXS0JhY2tGb3J3YXJkTGlzdEl0ZW0gKmFkZGVk
ID0gYWRkZWRJdGVtID8gd3JhcHBlcigqdG9JbXBsKGFkZGVkSXRlbSkpIDogbmlsOworICAgIE5T
QXJyYXkgKnJlbW92ZWQgPSByZW1vdmVkSXRlbXMgPyB3cmFwcGVyKCp0b0ltcGwocmVtb3ZlZEl0
ZW1zKSkgOiBuaWw7CisgICAgW2Jyb3dzaW5nQ29udGV4dC5sb2FkRGVsZWdhdGUgYnJvd3NpbmdD
b250ZXh0Q29udHJvbGxlckRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdDpicm93c2luZ0NvbnRleHQg
YWRkZWRJdGVtOmFkZGVkIHJlbW92ZWRJdGVtczpyZW1vdmVkXTsKK30KKworc3RhdGljIHZvaWQg
c2V0VXBQYWdlTG9hZGVyQ2xpZW50KFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqYnJvd3Np
bmdDb250ZXh0LCBXS1BhZ2VSZWYgcGFnZVJlZikKK3sKKyAgICBXS1BhZ2VMb2FkZXJDbGllbnQg
bG9hZGVyQ2xpZW50OworICAgIG1lbXNldCgmbG9hZGVyQ2xpZW50LCAwLCBzaXplb2YobG9hZGVy
Q2xpZW50KSk7CisKKyAgICBsb2FkZXJDbGllbnQudmVyc2lvbiA9IGtXS1BhZ2VMb2FkZXJDbGll
bnRDdXJyZW50VmVyc2lvbjsKKyAgICBsb2FkZXJDbGllbnQuY2xpZW50SW5mbyA9IGJyb3dzaW5n
Q29udGV4dDsKKyAgICBsb2FkZXJDbGllbnQuZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFt
ZSA9IGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWU7CisgICAgbG9hZGVyQ2xpZW50LmRp
ZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lID0gZGlkUmVj
ZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWU7CisgICAgbG9hZGVy
Q2xpZW50LmRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZSA9IGRpZEZhaWxQ
cm92aXNpb25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZTsKKyAgICBsb2FkZXJDbGllbnQuZGlkQ29t
bWl0TG9hZEZvckZyYW1lID0gZGlkQ29tbWl0TG9hZEZvckZyYW1lOworICAgIGxvYWRlckNsaWVu
dC5kaWRGaW5pc2hMb2FkRm9yRnJhbWUgPSBkaWRGaW5pc2hMb2FkRm9yRnJhbWU7CisgICAgbG9h
ZGVyQ2xpZW50LmRpZEZhaWxMb2FkV2l0aEVycm9yRm9yRnJhbWUgPSBkaWRGYWlsTG9hZFdpdGhF
cnJvckZvckZyYW1lOworCisgICAgbG9hZGVyQ2xpZW50LmRpZFN0YXJ0UHJvZ3Jlc3MgPSBkaWRT
dGFydFByb2dyZXNzOworICAgIGxvYWRlckNsaWVudC5kaWRDaGFuZ2VQcm9ncmVzcyA9IGRpZENo
YW5nZVByb2dyZXNzOworICAgIGxvYWRlckNsaWVudC5kaWRGaW5pc2hQcm9ncmVzcyA9IGRpZEZp
bmlzaFByb2dyZXNzOworICAgIGxvYWRlckNsaWVudC5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3Qg
PSBkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3Q7CisKKyAgICBXS1BhZ2VTZXRQYWdlTG9hZGVyQ2xp
ZW50KHBhZ2VSZWYsICZsb2FkZXJDbGllbnQpOworfQorCitzdGF0aWMgV0tQb2xpY3lEZWNpc2lv
bkhhbmRsZXIgbWFrZVBvbGljeURlY2lzaW9uQmxvY2soV0tGcmFtZVBvbGljeUxpc3RlbmVyUmVm
IGxpc3RlbmVyKQoreworICAgIFdLUmV0YWluKGxpc3RlbmVyKTsgLy8gUmVsZWFzZWQgaW4gdGhl
IGRlY2lzaW9uIGhhbmRsZXIgYmVsb3cuCisKKyAgICByZXR1cm4gW1teKFdLUG9saWN5RGVjaXNp
b24gZGVjaXNpb24pIHsKKyAgICAgICAgc3dpdGNoIChkZWNpc2lvbikgeworICAgICAgICBjYXNl
IFdLUG9saWN5RGVjaXNpb25DYW5jZWw6CisgICAgICAgICAgICBXS0ZyYW1lUG9saWN5TGlzdGVu
ZXJJZ25vcmUobGlzdGVuZXIpOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgCisgICAgICAgIGNhc2UgV0tQb2xpY3lEZWNpc2lvbkFsbG93OgorICAgICAg
ICAgICAgV0tGcmFtZVBvbGljeUxpc3RlbmVyVXNlKGxpc3RlbmVyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAKKyAgICAgICAgY2FzZSBXS1BvbGljeURlY2lzaW9uQmVjb21lRG93bmxv
YWQ6CisgICAgICAgICAgICBXS0ZyYW1lUG9saWN5TGlzdGVuZXJEb3dubG9hZChsaXN0ZW5lcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfTsKKworICAgICAgICBXS1JlbGVhc2UobGlz
dGVuZXIpOyAvLyBSZXRhaW5lZCBpbiB0aGUgY29udGV4dCBhYm92ZS4KKyAgICB9IGNvcHldIGF1
dG9yZWxlYXNlXTsKK30KKworc3RhdGljIHZvaWQgc2V0VXBQYWdlUG9saWN5Q2xpZW50KFdLQnJv
d3NpbmdDb250ZXh0Q29udHJvbGxlciAqYnJvd3NpbmdDb250ZXh0LCBXS1BhZ2VSZWYgcGFnZVJl
ZikKK3sKKyAgICBXS1BhZ2VQb2xpY3lDbGllbnQgcG9saWN5Q2xpZW50OworICAgIG1lbXNldCgm
cG9saWN5Q2xpZW50LCAwLCBzaXplb2YocG9saWN5Q2xpZW50KSk7CisKKyAgICBwb2xpY3lDbGll
bnQudmVyc2lvbiA9IGtXS1BhZ2VQb2xpY3lDbGllbnRDdXJyZW50VmVyc2lvbjsKKyAgICBwb2xp
Y3lDbGllbnQuY2xpZW50SW5mbyA9IGJyb3dzaW5nQ29udGV4dDsKKworICAgIHBvbGljeUNsaWVu
dC5kZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uID0gW10oV0tQYWdlUmVmIHBhZ2UsIFdL
RnJhbWVSZWYgZnJhbWUsIFdLRnJhbWVOYXZpZ2F0aW9uVHlwZSBuYXZpZ2F0aW9uVHlwZSwgV0tF
dmVudE1vZGlmaWVycyBtb2RpZmllcnMsIFdLRXZlbnRNb3VzZUJ1dHRvbiBtb3VzZUJ1dHRvbiwg
V0tGcmFtZVJlZiBvcmlnaW5hdGluZ0ZyYW1lLCBXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgV0tG
cmFtZVBvbGljeUxpc3RlbmVyUmVmIGxpc3RlbmVyLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCisgICAgeworICAgICAgICBXS0Jyb3dzaW5nQ29udGV4dENvbnRy
b2xsZXIgKmJyb3dzaW5nQ29udGV4dCA9IChXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKilj
bGllbnRJbmZvOworICAgICAgICBpZiAoW2Jyb3dzaW5nQ29udGV4dC5wb2xpY3lEZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXI6ZGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjpkZWNpc2lvbkhhbmRsZXI6KV0pIHsKKyAgICAg
ICAgICAgIE5TRGljdGlvbmFyeSAqYWN0aW9uRGljdGlvbmFyeSA9IEB7CisgICAgICAgICAgICAg
ICAgV0tBY3Rpb25Jc01haW5GcmFtZUtleTogQChXS0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKSwK
KyAgICAgICAgICAgICAgICBXS0FjdGlvbk5hdmlnYXRpb25UeXBlS2V5OiBAKG5hdmlnYXRpb25U
eXBlKSwKKyAgICAgICAgICAgICAgICBXS0FjdGlvbk1vZGlmaWVyRmxhZ3NLZXk6IEAobW9kaWZp
ZXJzKSwKKyAgICAgICAgICAgICAgICBXS0FjdGlvbk1vdXNlQnV0dG9uS2V5OiBAKG1vdXNlQnV0
dG9uKSwKKyAgICAgICAgICAgICAgICBXS0FjdGlvblVSTFJlcXVlc3RLZXk6IGFkb3B0TlMoV0tV
UkxSZXF1ZXN0Q29weU5TVVJMUmVxdWVzdChyZXF1ZXN0KSkuZ2V0KCkKKyAgICAgICAgICAgIH07
CisKKyAgICAgICAgICAgIGlmIChvcmlnaW5hdGluZ0ZyYW1lKSB7CisgICAgICAgICAgICAgICAg
YWN0aW9uRGljdGlvbmFyeSA9IFtbYWN0aW9uRGljdGlvbmFyeSBtdXRhYmxlQ29weV0gYXV0b3Jl
bGVhc2VdOworICAgICAgICAgICAgICAgIFsoTlNNdXRhYmxlRGljdGlvbmFyeSAqKWFjdGlvbkRp
Y3Rpb25hcnkgc2V0T2JqZWN0OltOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6dG9JbXBsKG9y
aWdpbmF0aW5nRnJhbWUpLT51cmwoKSByZWxhdGl2ZVRvVVJMOm5pbF0gZm9yS2V5OldLQWN0aW9u
T3JpZ2luYXRpbmdGcmFtZVVSTEtleV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIFticm93c2luZ0NvbnRleHQucG9saWN5RGVsZWdhdGUgYnJvd3NpbmdDb250ZXh0
Q29udHJvbGxlcjpicm93c2luZ0NvbnRleHQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
bjphY3Rpb25EaWN0aW9uYXJ5IGRlY2lzaW9uSGFuZGxlcjptYWtlUG9saWN5RGVjaXNpb25CbG9j
ayhsaXN0ZW5lcildOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFdLRnJhbWVQb2xpY3lM
aXN0ZW5lclVzZShsaXN0ZW5lcik7CisgICAgfTsKKworICAgIHBvbGljeUNsaWVudC5kZWNpZGVQ
b2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24gPSBbXShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBm
cmFtZSwgV0tGcmFtZU5hdmlnYXRpb25UeXBlIG5hdmlnYXRpb25UeXBlLCBXS0V2ZW50TW9kaWZp
ZXJzIG1vZGlmaWVycywgV0tFdmVudE1vdXNlQnV0dG9uIG1vdXNlQnV0dG9uLCBXS1VSTFJlcXVl
c3RSZWYgcmVxdWVzdCwgV0tTdHJpbmdSZWYgZnJhbWVOYW1lLCBXS0ZyYW1lUG9saWN5TGlzdGVu
ZXJSZWYgbGlzdGVuZXIsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5m
bykKKyAgICB7CisgICAgICAgIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqYnJvd3NpbmdD
b250ZXh0ID0gKFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqKWNsaWVudEluZm87CisgICAg
ICAgIGlmIChbYnJvd3NpbmdDb250ZXh0LnBvbGljeURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3IoYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjpkZWNpZGVQb2xpY3lGb3JOZXdX
aW5kb3dBY3Rpb246ZGVjaXNpb25IYW5kbGVyOildKSB7CisgICAgICAgICAgICBOU0RpY3Rpb25h
cnkgKmFjdGlvbkRpY3Rpb25hcnkgPSBAeworICAgICAgICAgICAgICAgIFdLQWN0aW9uSXNNYWlu
RnJhbWVLZXk6IEAoV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSksCisgICAgICAgICAgICAgICAg
V0tBY3Rpb25OYXZpZ2F0aW9uVHlwZUtleTogQChuYXZpZ2F0aW9uVHlwZSksCisgICAgICAgICAg
ICAgICAgV0tBY3Rpb25Nb2RpZmllckZsYWdzS2V5OiBAKG1vZGlmaWVycyksCisgICAgICAgICAg
ICAgICAgV0tBY3Rpb25Nb3VzZUJ1dHRvbktleTogQChtb3VzZUJ1dHRvbiksCisgICAgICAgICAg
ICAgICAgV0tBY3Rpb25VUkxSZXF1ZXN0S2V5OiBhZG9wdE5TKFdLVVJMUmVxdWVzdENvcHlOU1VS
TFJlcXVlc3QocmVxdWVzdCkpLmdldCgpLAorICAgICAgICAgICAgICAgIFdLQWN0aW9uRnJhbWVO
YW1lS2V5OiB0b0ltcGwoZnJhbWVOYW1lKS0+d3JhcHBlcigpCisgICAgICAgICAgICB9OworICAg
ICAgICAgICAgCisgICAgICAgICAgICBbYnJvd3NpbmdDb250ZXh0LnBvbGljeURlbGVnYXRlIGJy
b3dzaW5nQ29udGV4dENvbnRyb2xsZXI6YnJvd3NpbmdDb250ZXh0IGRlY2lkZVBvbGljeUZvck5l
d1dpbmRvd0FjdGlvbjphY3Rpb25EaWN0aW9uYXJ5IGRlY2lzaW9uSGFuZGxlcjptYWtlUG9saWN5
RGVjaXNpb25CbG9jayhsaXN0ZW5lcildOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFdL
RnJhbWVQb2xpY3lMaXN0ZW5lclVzZShsaXN0ZW5lcik7CisgICAgfTsKKworICAgIHBvbGljeUNs
aWVudC5kZWNpZGVQb2xpY3lGb3JSZXNwb25zZSA9IFtdKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1l
UmVmIGZyYW1lLCBXS1VSTFJlc3BvbnNlUmVmIHJlc3BvbnNlLCBXS1VSTFJlcXVlc3RSZWYgcmVx
dWVzdCwgYm9vbCBjYW5TaG93TUlNRVR5cGUsIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclJlZiBsaXN0
ZW5lciwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorICAgIHsK
KyAgICAgICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93c2luZ0NvbnRleHQgPSAo
V0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopY2xpZW50SW5mbzsKKyAgICAgICAgaWYgKFti
cm93c2luZ0NvbnRleHQucG9saWN5RGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihicm93c2luZ0NvbnRleHRDb250cm9sbGVyOmRlY2lkZVBvbGljeUZvclJlc3BvbnNlQWN0aW9u
OmRlY2lzaW9uSGFuZGxlcjopXSkgeworICAgICAgICAgICAgTlNEaWN0aW9uYXJ5ICphY3Rpb25E
aWN0aW9uYXJ5ID0gQHsKKyAgICAgICAgICAgICAgICBXS0FjdGlvbklzTWFpbkZyYW1lS2V5OiBA
KFdLRnJhbWVJc01haW5GcmFtZShmcmFtZSkpLAorICAgICAgICAgICAgICAgIFdLQWN0aW9uVVJM
UmVxdWVzdEtleTogYWRvcHROUyhXS1VSTFJlcXVlc3RDb3B5TlNVUkxSZXF1ZXN0KHJlcXVlc3Qp
KS5nZXQoKSwKKyAgICAgICAgICAgICAgICBXS0FjdGlvblVSTFJlc3BvbnNlS2V5OiBhZG9wdE5T
KFdLVVJMUmVzcG9uc2VDb3B5TlNVUkxSZXNwb25zZShyZXNwb25zZSkpLmdldCgpLAorICAgICAg
ICAgICAgICAgIFdLQWN0aW9uQ2FuU2hvd01JTUVUeXBlS2V5OiBAKGNhblNob3dNSU1FVHlwZSks
CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBbYnJvd3NpbmdDb250ZXh0LnBvbGljeURl
bGVnYXRlIGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXI6YnJvd3NpbmdDb250ZXh0IGRlY2lkZVBv
bGljeUZvclJlc3BvbnNlQWN0aW9uOmFjdGlvbkRpY3Rpb25hcnkgZGVjaXNpb25IYW5kbGVyOm1h
a2VQb2xpY3lEZWNpc2lvbkJsb2NrKGxpc3RlbmVyKV07CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgV0tGcmFtZVBvbGljeUxpc3RlbmVyVXNlKGxpc3RlbmVyKTsKKyAgICB9OworCisgICAg
V0tQYWdlU2V0UGFnZVBvbGljeUNsaWVudChwYWdlUmVmLCAmcG9saWN5Q2xpZW50KTsKK30KKwor
LyogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSBhc3NvY2lhdGUgdmlldy4gKi8KKwor
LSAoaWQpX2luaXRXaXRoUGFnZVJlZjooV0tQYWdlUmVmKXBhZ2VSZWYKK3sKKyAgICBzZWxmID0g
W3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IF9wYWdlUmVmID0gcGFnZVJlZjsKKworICAgIF9wYWdlTG9hZFN0YXRlT2JzZXJ2ZXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPFBhZ2VMb2FkU3RhdGVPYnNlcnZlcj4oc2VsZik7CisgICAgdG9JbXBsKF9w
YWdlUmVmLmdldCgpKS0+cGFnZUxvYWRTdGF0ZSgpLmFkZE9ic2VydmVyKCpfcGFnZUxvYWRTdGF0
ZU9ic2VydmVyKTsKKworICAgIHNldFVwUGFnZUxvYWRlckNsaWVudChzZWxmLCBwYWdlUmVmKTsK
KyAgICBzZXRVcFBhZ2VQb2xpY3lDbGllbnQoc2VsZiwgcGFnZVJlZik7CisKKyAgICByZXR1cm4g
c2VsZjsKK30KKworKyAoV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopX2Jyb3dzaW5nQ29u
dGV4dENvbnRyb2xsZXJGb3JQYWdlUmVmOihXS1BhZ2VSZWYpcGFnZVJlZgoreworICAgIHJldHVy
biAoV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopV2ViS2l0Ojp0b0ltcGwocGFnZVJlZikt
PmxvYWRlckNsaWVudCgpLmNsaWVudCgpLmNsaWVudEluZm87Cit9CisKKysgKE5TTXV0YWJsZVNl
dCAqKWN1c3RvbVNjaGVtZXMKK3sKKyAgICBzdGF0aWMgTlNNdXRhYmxlU2V0ICpjdXN0b21TY2hl
bWVzID0gW1tOU011dGFibGVTZXQgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBjdXN0b21TY2hl
bWVzOworfQorIAorQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tCcm93c2luZ0NvbnRleHRDb250
cm9sbGVyIChQcml2YXRlKQorCistICh2b2lkKXNldFBhZ2luYXRpb25Nb2RlOihXS0Jyb3dzaW5n
Q29udGV4dFBhZ2luYXRpb25Nb2RlKXBhZ2luYXRpb25Nb2RlCit7CisgICAgV0tQYWdpbmF0aW9u
TW9kZSBtb2RlOworICAgIHN3aXRjaCAocGFnaW5hdGlvbk1vZGUpIHsKKyAgICBjYXNlIFdLUGFn
aW5hdGlvbk1vZGVVbnBhZ2luYXRlZDoKKyAgICAgICAgbW9kZSA9IGtXS1BhZ2luYXRpb25Nb2Rl
VW5wYWdpbmF0ZWQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0tQYWdpbmF0aW9uTW9kZUxl
ZnRUb1JpZ2h0OgorICAgICAgICBtb2RlID0ga1dLUGFnaW5hdGlvbk1vZGVMZWZ0VG9SaWdodDsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXS1BhZ2luYXRpb25Nb2RlUmlnaHRUb0xlZnQ6Cisg
ICAgICAgIG1vZGUgPSBrV0tQYWdpbmF0aW9uTW9kZVJpZ2h0VG9MZWZ0OworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFdLUGFnaW5hdGlvbk1vZGVUb3BUb0JvdHRvbToKKyAgICAgICAgbW9kZSA9
IGtXS1BhZ2luYXRpb25Nb2RlVG9wVG9Cb3R0b207CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
V0tQYWdpbmF0aW9uTW9kZUJvdHRvbVRvVG9wOgorICAgICAgICBtb2RlID0ga1dLUGFnaW5hdGlv
bk1vZGVCb3R0b21Ub1RvcDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFdLUGFnZVNldFBhZ2luYXRpb25Nb2RlKF9wYWdlUmVmLmdl
dCgpLCBtb2RlKTsKK30KKworLSAoV0tCcm93c2luZ0NvbnRleHRQYWdpbmF0aW9uTW9kZSlwYWdp
bmF0aW9uTW9kZQoreworICAgIHN3aXRjaCAoV0tQYWdlR2V0UGFnaW5hdGlvbk1vZGUoX3BhZ2VS
ZWYuZ2V0KCkpKSB7CisgICAgY2FzZSBrV0tQYWdpbmF0aW9uTW9kZVVucGFnaW5hdGVkOgorICAg
ICAgICByZXR1cm4gV0tQYWdpbmF0aW9uTW9kZVVucGFnaW5hdGVkOworICAgIGNhc2Uga1dLUGFn
aW5hdGlvbk1vZGVMZWZ0VG9SaWdodDoKKyAgICAgICAgcmV0dXJuIFdLUGFnaW5hdGlvbk1vZGVM
ZWZ0VG9SaWdodDsKKyAgICBjYXNlIGtXS1BhZ2luYXRpb25Nb2RlUmlnaHRUb0xlZnQ6CisgICAg
ICAgIHJldHVybiBXS1BhZ2luYXRpb25Nb2RlUmlnaHRUb0xlZnQ7CisgICAgY2FzZSBrV0tQYWdp
bmF0aW9uTW9kZVRvcFRvQm90dG9tOgorICAgICAgICByZXR1cm4gV0tQYWdpbmF0aW9uTW9kZVRv
cFRvQm90dG9tOworICAgIGNhc2Uga1dLUGFnaW5hdGlvbk1vZGVCb3R0b21Ub1RvcDoKKyAgICAg
ICAgcmV0dXJuIFdLUGFnaW5hdGlvbk1vZGVCb3R0b21Ub1RvcDsKKyAgICB9CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gV0tQYWdpbmF0aW9uTW9kZVVucGFnaW5hdGVk
OworfQorCistICh2b2lkKXNldFBhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnM6KEJPT0wpYmVo
YXZlc0xpa2VDb2x1bW5zCit7CisgICAgV0tQYWdlU2V0UGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29s
dW1ucyhfcGFnZVJlZi5nZXQoKSwgYmVoYXZlc0xpa2VDb2x1bW5zKTsKK30KKworLSAoQk9PTClw
YWdpbmF0aW9uQmVoYXZlc0xpa2VDb2x1bW5zCit7CisgICAgcmV0dXJuIFdLUGFnZUdldFBhZ2lu
YXRpb25CZWhhdmVzTGlrZUNvbHVtbnMoX3BhZ2VSZWYuZ2V0KCkpOworfQorCistICh2b2lkKXNl
dFBhZ2VMZW5ndGg6KENHRmxvYXQpcGFnZUxlbmd0aAoreworICAgIFdLUGFnZVNldFBhZ2VMZW5n
dGgoX3BhZ2VSZWYuZ2V0KCksIHBhZ2VMZW5ndGgpOworfQorCistIChDR0Zsb2F0KXBhZ2VMZW5n
dGgKK3sKKyAgICByZXR1cm4gV0tQYWdlR2V0UGFnZUxlbmd0aChfcGFnZVJlZi5nZXQoKSk7Cit9
CisKKy0gKHZvaWQpc2V0R2FwQmV0d2VlblBhZ2VzOihDR0Zsb2F0KWdhcEJldHdlZW5QYWdlcwor
eworICAgIFdLUGFnZVNldEdhcEJldHdlZW5QYWdlcyhfcGFnZVJlZi5nZXQoKSwgZ2FwQmV0d2Vl
blBhZ2VzKTsKK30KKworLSAoQ0dGbG9hdClnYXBCZXR3ZWVuUGFnZXMKK3sKKyAgICByZXR1cm4g
V0tQYWdlR2V0R2FwQmV0d2VlblBhZ2VzKF9wYWdlUmVmLmdldCgpKTsKK30KKworLSAoTlNVSW50
ZWdlcilwYWdlQ291bnQKK3sKKyAgICByZXR1cm4gV0tQYWdlR2V0UGFnZUNvdW50KF9wYWdlUmVm
LmdldCgpKTsKK30KKworLSAoV0tCcm93c2luZ0NvbnRleHRIYW5kbGUgKiloYW5kbGUKK3sKKyAg
ICByZXR1cm4gW1tbV0tCcm93c2luZ0NvbnRleHRIYW5kbGUgYWxsb2NdIF9pbml0V2l0aFBhZ2VJ
RDp0b0ltcGwoX3BhZ2VSZWYuZ2V0KCkpLT5wYWdlSUQoKV0gYXV0b3JlbGVhc2VdOworfQorCitA
ZW5kCisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJJbnRlcm5hbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tCcm93c2lu
Z0NvbnRleHRDb250cm9sbGVySW50ZXJuYWwuaAkocmV2aXNpb24gMTU5ODczKQkoZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJJ
bnRlcm5hbC5oOjE1OTg3MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVySW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiV0tCcm93c2luZ0NvbnRleHRDb250
cm9sbGVyUHJpdmF0ZS5oIgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworQGludGVyZmFjZSBXS0Jy
b3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKCkKKworLyogVGhpcyBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZnJvbSBhc3NvY2lhdGUgdmlldy4gKi8KKy0gKGlkKV9pbml0V2l0aFBhZ2VSZWY6KFdLUGFn
ZVJlZilwYWdlUmVmOworCisvKiBSZXR1cm5zIGEgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVy
IGFzc29jaWF0ZWQgd2l0aCB0aGUgV0tQYWdlUmVmLiAqLworKyAoV0tCcm93c2luZ0NvbnRleHRD
b250cm9sbGVyICopX2Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJGb3JQYWdlUmVmOihXS1BhZ2VS
ZWYpcGFnZVJlZjsKKworKyAoTlNNdXRhYmxlU2V0ICopY3VzdG9tU2NoZW1lczsKKworQGVuZAor
CisjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyUHJpdmF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRl
eHRDb250cm9sbGVyUHJpdmF0ZS5oCShyZXZpc2lvbiAxNTk4NzMpCShmcm9tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlclByaXZhdGUu
aDoxNTk4NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3Np
bmdDb250ZXh0Q29udHJvbGxlclByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0Mi9XS0Jyb3dzaW5nQ29udGV4dENvbnRy
b2xsZXIuaD4KKworI2lmIFdLX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgPFdlYktpdDIvV0tCYXNl
Lmg+CisKK3R5cGVkZWYgTlNfRU5VTShOU1VJbnRlZ2VyLCBXS0Jyb3dzaW5nQ29udGV4dFBhZ2lu
YXRpb25Nb2RlKSB7CisgICAgV0tQYWdpbmF0aW9uTW9kZVVucGFnaW5hdGVkLAorICAgIFdLUGFn
aW5hdGlvbk1vZGVMZWZ0VG9SaWdodCwKKyAgICBXS1BhZ2luYXRpb25Nb2RlUmlnaHRUb0xlZnQs
CisgICAgV0tQYWdpbmF0aW9uTW9kZVRvcFRvQm90dG9tLAorICAgIFdLUGFnaW5hdGlvbk1vZGVC
b3R0b21Ub1RvcCwKK307CisKK0BjbGFzcyBXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZTsKKworQGlu
dGVyZmFjZSBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKFByaXZhdGUpCisKK0Bwcm9wZXJ0
eSAocmVhZG9ubHkpIFdLUGFnZVJlZiBfcGFnZVJlZjsKKworQHByb3BlcnR5IFdLQnJvd3NpbmdD
b250ZXh0UGFnaW5hdGlvbk1vZGUgcGFnaW5hdGlvbk1vZGU7CisKKy8vIFdoZXRoZXIgdGhlIGNv
bHVtbi1icmVhay17YmVmb3JlLGFmdGVyfSBwcm9wZXJ0aWVzIGFyZSByZXNwZWN0ZWQgaW5zdGVh
ZCBvZiB0aGUKKy8vIHBhZ2UtYnJlYWste2JlZm9yZSxhZnRlcn0gcHJvcGVydGllcy4KK0Bwcm9w
ZXJ0eSBCT09MIHBhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnM7CisKKy8vIFNldCB0byAwIHRv
IGhhdmUgdGhlIHBhZ2UgbGVuZ3RoIGVxdWFsIHRoZSB2aWV3IGxlbmd0aC4KK0Bwcm9wZXJ0eSBD
R0Zsb2F0IHBhZ2VMZW5ndGg7CitAcHJvcGVydHkgQ0dGbG9hdCBnYXBCZXR3ZWVuUGFnZXM7CisK
K0Bwcm9wZXJ0eSAocmVhZG9ubHkpIE5TVUludGVnZXIgcGFnZUNvdW50OworCitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIFdLQnJvd3NpbmdDb250ZXh0SGFuZGxlICpoYW5kbGU7CisK
K0BlbmQKKworI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0R3JvdXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0R3Jv
dXAuaAkocmV2aXNpb24gMTU5ODczKQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L21hYy9XS0Jyb3dzaW5nQ29udGV4dEdyb3VwLmg6MTU5ODczKQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4dEdyb3VwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktpdDIvV0tGb3Vu
ZGF0aW9uLmg+CisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0Zv
dW5kYXRpb24uaD4KKyNpbXBvcnQgPFdlYktpdDIvV0tVc2VyU2NyaXB0SW5qZWN0aW9uVGltZS5o
PgorCitXS19BUElfQ0xBU1MKK0BpbnRlcmZhY2UgV0tCcm93c2luZ0NvbnRleHRHcm91cCA6IE5T
T2JqZWN0CisKKy0gKGlkKWluaXRXaXRoSWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVy
OworCisvKiBVc2VyIENvbnRlbnQgKi8KKworLSAodm9pZClhZGRVc2VyU3R5bGVTaGVldDooTlNT
dHJpbmcgKilzb3VyY2UgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMIHdoaXRlbGlzdGVkVVJMUGF0
dGVybnM6KE5TQXJyYXkgKil3aGl0ZWxpc3QgYmxhY2tsaXN0ZWRVUkxQYXR0ZXJuczooTlNBcnJh
eSAqKWJsYWNrbGlzdCBtYWluRnJhbWVPbmx5OihCT09MKW1haW5GcmFtZU9ubHk7CistICh2b2lk
KXJlbW92ZUFsbFVzZXJTdHlsZVNoZWV0czsKKworLSAodm9pZClhZGRVc2VyU2NyaXB0OihOU1N0
cmluZyAqKXNvdXJjZSBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwgd2hpdGVsaXN0ZWRVUkxQYXR0
ZXJuczooTlNBcnJheSAqKXdoaXRlbGlzdCBibGFja2xpc3RlZFVSTFBhdHRlcm5zOihOU0FycmF5
ICopYmxhY2tsaXN0IGluamVjdGlvblRpbWU6KFdLVXNlclNjcmlwdEluamVjdGlvblRpbWUpaW5q
ZWN0aW9uVGltZSBtYWluRnJhbWVPbmx5OihCT09MKW1haW5GcmFtZU9ubHk7CistICh2b2lkKXJl
bW92ZUFsbFVzZXJTY3JpcHRzOworCisKKy8qIFNldHRpbmdzICovCisKKy8qIFNldHRpbmcgdG8g
Y29udHJvbCB3aGV0aGVyIEphdmFTY3JpcHQgcmVmZXJlbmNlZCBieSBhIHBhZ2UgaXMgZW5hYmxl
ZC4KKyAgIERlZmF1bHQ6IFlFUworKi8KK0Bwcm9wZXJ0eSBCT09MIGFsbG93c0phdmFTY3JpcHQ7
CisKKy8qIFNldHRpbmcgdG8gY29udHJvbCB3aGV0aGVyIHBsdWctaW5zIGFyZSBlbmFibGVkLgor
ICAgRGVmYXVsdDogWUVTCisqLworQHByb3BlcnR5IEJPT0wgYWxsb3dzUGx1Z0luczsKKworQGVu
ZAorCisjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRHcm91cC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0R3JvdXAu
bW0JKHJldmlzaW9uIDE1OTg3MykJKGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9t
YWMvV0tCcm93c2luZ0NvbnRleHRHcm91cC5tbToxNTk4NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0R3JvdXAubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIldLQnJvd3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tCcm93
c2luZ0NvbnRleHRHcm91cFByaXZhdGUuaCIKKworI2lmIFdLX0FQSV9FTkFCTEVECisKKyNpbXBv
cnQgIkFQSUFycmF5LmgiCisjaW1wb3J0ICJXS0FycmF5LmgiCisjaW1wb3J0ICJXS1BhZ2VHcm91
cC5oIgorI2ltcG9ydCAiV0tQcmVmZXJlbmNlcy5oIgorI2ltcG9ydCAiV0tSZXRhaW5QdHIuaCIK
KyNpbXBvcnQgIldLU2hhcmVkQVBJQ2FzdC5oIgorI2ltcG9ydCAiV0tTdHJpbmdDRi5oIgorI2lt
cG9ydCAiV0tVUkwuaCIKKyNpbXBvcnQgIldLVVJMQ0YuaCIKKyNpbXBvcnQgIldlYlN0cmluZy5o
IgorI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitA
aW1wbGVtZW50YXRpb24gV0tCcm93c2luZ0NvbnRleHRHcm91cCB7CisgICAgc3RkOjphbGlnbmVk
X3N0b3JhZ2U8c2l6ZW9mKFdlYlBhZ2VHcm91cCksIHN0ZDo6YWxpZ25tZW50X29mPFdlYlBhZ2VH
cm91cD46OnZhbHVlPjo6dHlwZSBfcGFnZUdyb3VwOworfQorCistICh2b2lkKWRlYWxsb2MKK3sK
KyAgICByZWludGVycHJldF9jYXN0PFdlYlBhZ2VHcm91cCo+KCZfcGFnZUdyb3VwKS0+fldlYlBh
Z2VHcm91cCgpOworCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChpZClpbml0V2l0aElk
ZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgQVBJOjpPYmpl
Y3Q6OmNvbnN0cnVjdEluV3JhcHBlcjxXZWJQYWdlR3JvdXA+KHNlbGYsIGlkZW50aWZpZXIpOwor
CisgICAgLy8gR2l2ZSB0aGUgV0tCcm93c2luZ0NvbnRleHRHcm91cCBhIGlkZW50aWZpZXItbGVz
cyBwcmVmZXJlbmNlcywgc28gdGhhdCB0aGV5CisgICAgLy8gZG9uJ3QgZ2V0IGF1dG9tYXRpY2Fs
bHkgd3JpdHRlbiB0byB0aGUgZGlzay4gVGhlIGF1dG9tYXRpYyB3cml0aW5nIGhhcyBwcm92ZW4K
KyAgICAvLyBjb25mdXNpbmcgdG8gdXNlcnMgb2YgdGhlIEFQSS4KKyAgICBXS1JldGFpblB0cjxX
S1ByZWZlcmVuY2VzUmVmPiBwcmVmZXJlbmNlcyA9IGFkb3B0V0soV0tQcmVmZXJlbmNlc0NyZWF0
ZSgpKTsKKyAgICBXS1BhZ2VHcm91cFNldFByZWZlcmVuY2VzKHRvQVBJKHJlaW50ZXJwcmV0X2Nh
c3Q8V2ViUGFnZUdyb3VwKj4oJl9wYWdlR3JvdXApKSwgcHJlZmVyZW5jZXMuZ2V0KCkpOworCisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKEJPT0wpYWxsb3dzSmF2YVNjcmlwdAoreworICAgIHJl
dHVybiBXS1ByZWZlcmVuY2VzR2V0SmF2YVNjcmlwdEVuYWJsZWQoV0tQYWdlR3JvdXBHZXRQcmVm
ZXJlbmNlcyh0b0FQSShyZWludGVycHJldF9jYXN0PFdlYlBhZ2VHcm91cCo+KCZfcGFnZUdyb3Vw
KSkpKTsKK30KKworLSAodm9pZClzZXRBbGxvd3NKYXZhU2NyaXB0OihCT09MKWFsbG93c0phdmFT
Y3JpcHQKK3sKKyAgICBXS1ByZWZlcmVuY2VzU2V0SmF2YVNjcmlwdEVuYWJsZWQoV0tQYWdlR3Jv
dXBHZXRQcmVmZXJlbmNlcyh0b0FQSShyZWludGVycHJldF9jYXN0PFdlYlBhZ2VHcm91cCo+KCZf
cGFnZUdyb3VwKSkpLCBhbGxvd3NKYXZhU2NyaXB0KTsKK30KKworLSAoQk9PTClhbGxvd3NKYXZh
U2NyaXB0TWFya3VwCit7CisgICAgcmV0dXJuIFdLUHJlZmVyZW5jZXNHZXRKYXZhU2NyaXB0TWFy
a3VwRW5hYmxlZChXS1BhZ2VHcm91cEdldFByZWZlcmVuY2VzKHRvQVBJKHJlaW50ZXJwcmV0X2Nh
c3Q8V2ViUGFnZUdyb3VwKj4oJl9wYWdlR3JvdXApKSkpOworfQorCistICh2b2lkKXNldEFsbG93
c0phdmFTY3JpcHRNYXJrdXA6KEJPT0wpYWxsb3dzSmF2YVNjcmlwdE1hcmt1cAoreworICAgIFdL
UHJlZmVyZW5jZXNTZXRKYXZhU2NyaXB0TWFya3VwRW5hYmxlZChXS1BhZ2VHcm91cEdldFByZWZl
cmVuY2VzKHRvQVBJKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZUdyb3VwKj4oJl9wYWdlR3JvdXAp
KSksIGFsbG93c0phdmFTY3JpcHRNYXJrdXApOworfQorCistIChCT09MKWFsbG93c1BsdWdJbnMK
K3sKKyAgICByZXR1cm4gV0tQcmVmZXJlbmNlc0dldFBsdWdpbnNFbmFibGVkKFdLUGFnZUdyb3Vw
R2V0UHJlZmVyZW5jZXModG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlR3JvdXAqPigmX3Bh
Z2VHcm91cCkpKSk7Cit9CisKKy0gKHZvaWQpc2V0QWxsb3dzUGx1Z0luczooQk9PTClhbGxvd3NQ
bHVnSW5zCit7CisgICAgV0tQcmVmZXJlbmNlc1NldFBsdWdpbnNFbmFibGVkKFdLUGFnZUdyb3Vw
R2V0UHJlZmVyZW5jZXModG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlR3JvdXAqPigmX3Bh
Z2VHcm91cCkpKSwgYWxsb3dzUGx1Z0lucyk7Cit9CisKK3N0YXRpYyBXS1JldGFpblB0cjxXS0Fy
cmF5UmVmPiBjcmVhdGVXS0FycmF5KE5TQXJyYXkgKmFycmF5KQoreworICAgIE5TVUludGVnZXIg
Y291bnQgPSBbYXJyYXkgY291bnRdOworCisgICAgaWYgKCFjb3VudCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4gc3RyaW5nczsKKyAg
ICBzdHJpbmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY291bnQpOworCisgICAgZm9yIChpZCBl
bnRyeSBpbiBhcnJheSkgeworICAgICAgICBpZiAoW2VudHJ5IGlzS2luZE9mQ2xhc3M6W05TU3Ry
aW5nIGNsYXNzXV0pCisgICAgICAgICAgICBzdHJpbmdzLnVuY2hlY2tlZEFwcGVuZChhZG9wdFJl
Zih0b0ltcGwoV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKWVudHJ5KSkp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9BUEkoQVBJOjpBcnJheTo6Y3JlYXRlKHN0ZDo6bW92
ZShzdHJpbmdzKSkubGVha1JlZigpKTsKK30KKworLSh2b2lkKWFkZFVzZXJTdHlsZVNoZWV0OihO
U1N0cmluZyAqKXNvdXJjZSBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwgd2hpdGVsaXN0ZWRVUkxQ
YXR0ZXJuczooTlNBcnJheSAqKXdoaXRlbGlzdCBibGFja2xpc3RlZFVSTFBhdHRlcm5zOihOU0Fy
cmF5ICopYmxhY2tsaXN0IG1haW5GcmFtZU9ubHk6KEJPT0wpbWFpbkZyYW1lT25seQoreworICAg
IGlmICghc291cmNlKQorICAgICAgICBDUkFTSCgpOworCisgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHdrU291cmNlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZT
dHJpbmdSZWYpc291cmNlKSk7CisgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrQmFzZVVSTCA9
IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQ0ZVUkwoKENGVVJMUmVmKWJhc2VVUkwpKTsKKyAgICBh
dXRvIHdrV2hpdGVsaXN0ID0gY3JlYXRlV0tBcnJheSh3aGl0ZWxpc3QpOworICAgIGF1dG8gd2tC
bGFja2xpc3QgPSBjcmVhdGVXS0FycmF5KGJsYWNrbGlzdCk7CisgICAgV0tVc2VyQ29udGVudElu
amVjdGVkRnJhbWVzIGluamVjdGVkRnJhbWVzID0gbWFpbkZyYW1lT25seSA/IGtXS0luamVjdElu
VG9wRnJhbWVPbmx5IDoga1dLSW5qZWN0SW5BbGxGcmFtZXM7CisKKyAgICBXS1BhZ2VHcm91cEFk
ZFVzZXJTdHlsZVNoZWV0KHRvQVBJKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZUdyb3VwKj4oJl9w
YWdlR3JvdXApKSwgd2tTb3VyY2UuZ2V0KCksIHdrQmFzZVVSTC5nZXQoKSwgd2tXaGl0ZWxpc3Qu
Z2V0KCksIHdrQmxhY2tsaXN0LmdldCgpLCBpbmplY3RlZEZyYW1lcyk7Cit9CisKKy0gKHZvaWQp
cmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzCit7CisgICAgV0tQYWdlR3JvdXBSZW1vdmVBbGxVc2Vy
U3R5bGVTaGVldHModG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlR3JvdXAqPigmX3BhZ2VH
cm91cCkpKTsKK30KKworLSAodm9pZClhZGRVc2VyU2NyaXB0OihOU1N0cmluZyAqKXNvdXJjZSBi
YXNlVVJMOihOU1VSTCAqKWJhc2VVUkwgd2hpdGVsaXN0ZWRVUkxQYXR0ZXJuczooTlNBcnJheSAq
KXdoaXRlbGlzdCBibGFja2xpc3RlZFVSTFBhdHRlcm5zOihOU0FycmF5ICopYmxhY2tsaXN0IGlu
amVjdGlvblRpbWU6KFdLVXNlclNjcmlwdEluamVjdGlvblRpbWUpaW5qZWN0aW9uVGltZSBtYWlu
RnJhbWVPbmx5OihCT09MKW1haW5GcmFtZU9ubHkKK3sKKyAgICBpZiAoIXNvdXJjZSkKKyAgICAg
ICAgQ1JBU0goKTsKKworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a1NvdXJjZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKXNvdXJjZSkpOwor
ICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a0Jhc2VVUkwgPSBhZG9wdFdLKFdLVVJMQ3JlYXRl
V2l0aENGVVJMKChDRlVSTFJlZiliYXNlVVJMKSk7CisgICAgYXV0byB3a1doaXRlbGlzdCA9IGNy
ZWF0ZVdLQXJyYXkod2hpdGVsaXN0KTsKKyAgICBhdXRvIHdrQmxhY2tsaXN0ID0gY3JlYXRlV0tB
cnJheShibGFja2xpc3QpOworICAgIFdLVXNlckNvbnRlbnRJbmplY3RlZEZyYW1lcyBpbmplY3Rl
ZEZyYW1lcyA9IG1haW5GcmFtZU9ubHkgPyBrV0tJbmplY3RJblRvcEZyYW1lT25seSA6IGtXS0lu
amVjdEluQWxsRnJhbWVzOworCisgICAgV0tQYWdlR3JvdXBBZGRVc2VyU2NyaXB0KHRvQVBJKHJl
aW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZUdyb3VwKj4oJl9wYWdlR3JvdXApKSwgd2tTb3VyY2UuZ2V0
KCksIHdrQmFzZVVSTC5nZXQoKSwgd2tXaGl0ZWxpc3QuZ2V0KCksIHdrQmxhY2tsaXN0LmdldCgp
LCBpbmplY3RlZEZyYW1lcywgaW5qZWN0aW9uVGltZSk7Cit9CisKKy0gKHZvaWQpcmVtb3ZlQWxs
VXNlclNjcmlwdHMKK3sKKyAgICBXS1BhZ2VHcm91cFJlbW92ZUFsbFVzZXJTY3JpcHRzKHRvQVBJ
KHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZUdyb3VwKj4oJl9wYWdlR3JvdXApKSk7Cit9CisKKyNw
cmFnbWEgbWFyayBXS09iamVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgorCistIChBUEk6Ok9i
amVjdCYpX2FwaU9iamVjdAoreworICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxBUEk6Ok9i
amVjdCo+KCZfcGFnZUdyb3VwKTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tCcm93
c2luZ0NvbnRleHRHcm91cCAoUHJpdmF0ZSkKKworLSAoV0tQYWdlR3JvdXBSZWYpX3BhZ2VHcm91
cFJlZgoreworICAgIHJldHVybiB0b0FQSShyZWludGVycHJldF9jYXN0PFdlYlBhZ2VHcm91cCo+
KCZfcGFnZUdyb3VwKSk7Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0
R3JvdXBJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRHcm91cEludGVybmFsLmgJKHJldmlzaW9uIDE1OTg3
MykJKGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2luZ0NvbnRl
eHRHcm91cEludGVybmFsLmg6MTU5ODczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4dEdyb3VwSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiV0tCcm93c2luZ0NvbnRleHRH
cm91cC5oIgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCAiV0tPYmplY3QuaCIKKyNp
bXBvcnQgIldlYlBhZ2VHcm91cC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworaW5saW5lIFdL
QnJvd3NpbmdDb250ZXh0R3JvdXAgKndyYXBwZXIoV2ViUGFnZUdyb3VwJiBwYWdlR3JvdXApCit7
CisgICAgQVNTRVJUKFtwYWdlR3JvdXAud3JhcHBlcigpIGlzS2luZE9mQ2xhc3M6W1dLQnJvd3Np
bmdDb250ZXh0R3JvdXAgY2xhc3NdXSk7CisgICAgcmV0dXJuIChXS0Jyb3dzaW5nQ29udGV4dEdy
b3VwICopcGFnZUdyb3VwLndyYXBwZXIoKTsKK30KKworfQorCitAaW50ZXJmYWNlIFdLQnJvd3Np
bmdDb250ZXh0R3JvdXAgKCkgPFdLT2JqZWN0PgorQGVuZAorCisjZW5kaWYgLy8gV0tfQVBJX0VO
QUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tCcm93c2lu
Z0NvbnRleHRHcm91cFByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0R3JvdXBQcml2YXRlLmgJKHJldmlzaW9u
IDE1OTg3MykJKGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2lu
Z0NvbnRleHRHcm91cFByaXZhdGUuaDoxNTk4NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0R3JvdXBQcml2YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktpdDIvV0tCcm93
c2luZ0NvbnRleHRHcm91cC5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCA8V2Vi
S2l0Mi9XS0Jhc2UuaD4KKworQGludGVyZmFjZSBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwIChQcml2
YXRlKQorCitAcHJvcGVydHkocmVhZG9ubHkpIFdLUGFnZUdyb3VwUmVmIF9wYWdlR3JvdXBSZWY7
CisKK0BlbmQKKworI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Jyb3dzaW5n
Q29udGV4dExvYWREZWxlZ2F0ZS5oCShyZXZpc2lvbiAxNTk4NzMpCShmcm9tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlLmg6MTU5
ODczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29u
dGV4dExvYWREZWxlZ2F0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworQGNsYXNzIFdLQnJv
d3NpbmdDb250ZXh0Q29udHJvbGxlcjsKK0BjbGFzcyBXS0JhY2tGb3J3YXJkTGlzdEl0ZW07CisK
K0Bwcm90b2NvbCBXS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZSA8TlNPYmplY3Q+CitAb3B0
aW9uYWwKKworLyogU2VudCB3aGVuIHRoZSBwcm92aXNpb25hbCBsb2FkIGJlZ2lucy4gKi8KKy0g
KHZvaWQpYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkOihX
S0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKilzZW5kZXI7CisKKy8qIFNlbnQgaWYgYSBzZXJ2
ZXItc2lkZSByZWRpcmVjdCB3YXMgcmVjaWV2ZWQuICovCistICh2b2lkKWJyb3dzaW5nQ29udGV4
dENvbnRyb2xsZXJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWQ6KFdL
QnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqKXNlbmRlcjsKKworLyogU2VudCBpZiB0aGUgcHJv
dmlvbmFsIGxvYWQgZmFpbHMuICovCistICh2b2lkKWJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJE
aWRGYWlsUHJvdmlzaW9uYWxMb2FkOihXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKilzZW5k
ZXIgd2l0aEVycm9yOihOU0Vycm9yICopZXJyb3I7CisKKy8qIFNlbnQgd2hlbiB0aGUgbG9hZCBn
ZXRzIGNvbW1pdHRlZC4gKi8KKy0gKHZvaWQpYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckRpZENv
bW1pdExvYWQ6KFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqKXNlbmRlcjsKKworLyogU2Vu
dCB3aGVuIHRoZSBsb2FkIGNvbXBsZXRlcy4gKi8KKy0gKHZvaWQpYnJvd3NpbmdDb250ZXh0Q29u
dHJvbGxlckRpZEZpbmlzaExvYWQ6KFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqKXNlbmRl
cjsKKworLyogU2VudCBpZiB0aGUgY29tbWl0ZWQgbG9hZCBmYWlscy4gKi8KKy0gKHZvaWQpYnJv
d3NpbmdDb250ZXh0Q29udHJvbGxlckRpZEZhaWxMb2FkOihXS0Jyb3dzaW5nQ29udGV4dENvbnRy
b2xsZXIgKilzZW5kZXIgd2l0aEVycm9yOihOU0Vycm9yICopZXJyb3I7CisKKy0gKHZvaWQpYnJv
d3NpbmdDb250ZXh0Q29udHJvbGxlckRpZFN0YXJ0UHJvZ3Jlc3M6KFdLQnJvd3NpbmdDb250ZXh0
Q29udHJvbGxlciAqKXNlbmRlcjsKKy0gKHZvaWQpYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjoo
V0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopc2VuZGVyIGVzdGltYXRlZFByb2dyZXNzQ2hh
bmdlZFRvOihkb3VibGUpZXN0aW1hdGVkUHJvZ3Jlc3M7CistICh2b2lkKWJyb3dzaW5nQ29udGV4
dENvbnRyb2xsZXJEaWRGaW5pc2hQcm9ncmVzczooV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVy
ICopc2VuZGVyOworCistICh2b2lkKWJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJEaWRDaGFuZ2VC
YWNrRm9yd2FyZExpc3Q6KFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqKXNlbmRlciBhZGRl
ZEl0ZW06KFdLQmFja0ZvcndhcmRMaXN0SXRlbSAqKWFkZGVkSXRlbSByZW1vdmVkSXRlbXM6KE5T
QXJyYXkgKilyZW1vdmVkSXRlbXM7CisKK0BlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRQb2xpY3lEZWxlZ2F0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRl
eHRQb2xpY3lEZWxlZ2F0ZS5oCShyZXZpc2lvbiAxNTk4NzMpCShmcm9tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0UG9saWN5RGVsZWdhdGUuaDoxNTk4
NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250
ZXh0UG9saWN5RGVsZWdhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxXZWJL
aXQyL1dLRGVjbGFyYXRpb25TcGVjaWZpZXJzLmg+CisKK0BjbGFzcyBXS0Jyb3dzaW5nQ29udGV4
dENvbnRyb2xsZXI7CisKKy8qIENvbnN0YW50cyBmb3IgcG9saWN5IGFjdGlvbiBkaWN0aW9uYXJp
ZXMgKi8KK1dLX0VYUE9SVCBleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBXS0FjdGlvbklzTWFpbkZy
YW1lS2V5OyAgICAgICAgIC8vIE5TTnVtYmVyIChCT09MKQorV0tfRVhQT1JUIGV4dGVybiBOU1N0
cmluZyAqIGNvbnN0IFdLQWN0aW9uTmF2aWdhdGlvblR5cGVLZXk7ICAgICAgLy8gTlNOdW1iZXIg
KFdLTmF2aWdhdGlvblR5cGUpCitXS19FWFBPUlQgZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgV0tB
Y3Rpb25Nb3VzZUJ1dHRvbktleTsgICAgICAgICAvLyBOU051bWJlciAoMCBmb3IgbGVmdCBidXR0
b24sIDEgZm9yIG1pZGRsZSBidXR0b24sIDIgZm9yIHJpZ2h0IGJ1dHRvbikKK1dLX0VYUE9SVCBl
eHRlcm4gTlNTdHJpbmcgKiBjb25zdCBXS0FjdGlvbk1vZGlmaWVyRmxhZ3NLZXk7ICAgICAgIC8v
IE5TTnVtYmVyICh1bnNpZ25lZCkKK1dLX0VYUE9SVCBleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBX
S0FjdGlvblVSTFJlcXVlc3RLZXk7ICAgICAgICAgIC8vIE5TVVJMUmVxdWVzdAorV0tfRVhQT1JU
IGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IFdLQWN0aW9uVVJMUmVzcG9uc2VLZXk7ICAgICAgICAg
Ly8gTlNVUkxSZXNwb25zZQorV0tfRVhQT1JUIGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IFdLQWN0
aW9uRnJhbWVOYW1lS2V5OyAgICAgICAgICAgLy8gTlNTdHJpbmcKK1dLX0VYUE9SVCBleHRlcm4g
TlNTdHJpbmcgKiBjb25zdCBXS0FjdGlvbk9yaWdpbmF0aW5nRnJhbWVVUkxLZXk7IC8vIE5TVVJM
CitXS19FWFBPUlQgZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgV0tBY3Rpb25DYW5TaG93TUlNRVR5
cGVLZXk7ICAgICAvLyBOU051bWJlciAoQk9PTCkKKwordHlwZWRlZiBOU19FTlVNKE5TVUludGVn
ZXIsIFdLTmF2aWdhdGlvblR5cGUpIHsKKyAgICBXS05hdmlnYXRpb25UeXBlTGlua0NsaWNrZWQs
CisgICAgV0tOYXZpZ2F0aW9uVHlwZUZvcm1TdWJtaXR0ZWQsCisgICAgV0tOYXZpZ2F0aW9uVHlw
ZUJhY2tGb3J3YXJkLAorICAgIFdLTmF2aWdhdGlvblR5cGVSZWxvYWQsCisgICAgV0tOYXZpZ2F0
aW9uVHlwZUZvcm1SZXN1Ym1pdHRlZCwKKyAgICBXS05hdmlnYXRpb25UeXBlT3RoZXIKK307CisK
K3R5cGVkZWYgTlNfRU5VTShOU1VJbnRlZ2VyLCBXS1BvbGljeURlY2lzaW9uKSB7CisgICAgV0tQ
b2xpY3lEZWNpc2lvbkNhbmNlbCwKKyAgICBXS1BvbGljeURlY2lzaW9uQWxsb3csCisgICAgV0tQ
b2xpY3lEZWNpc2lvbkJlY29tZURvd25sb2FkCit9OworCit0eXBlZGVmIHZvaWQgKF5XS1BvbGlj
eURlY2lzaW9uSGFuZGxlcikoV0tQb2xpY3lEZWNpc2lvbik7CisKK0Bwcm90b2NvbCBXS0Jyb3dz
aW5nQ29udGV4dFBvbGljeURlbGVnYXRlIDxOU09iamVjdD4KK0BvcHRpb25hbAorCistICh2b2lk
KWJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXI6KFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAq
KXNlbmRlciBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOihOU0RpY3Rpb25hcnkgKilh
Y3Rpb25JbmZvcm1hdGlvbiBkZWNpc2lvbkhhbmRsZXI6KFdLUG9saWN5RGVjaXNpb25IYW5kbGVy
KWRlY2lzaW9uSGFuZGxlcjsKKy0gKHZvaWQpYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjooV0tC
cm93c2luZ0NvbnRleHRDb250cm9sbGVyICopc2VuZGVyIGRlY2lkZVBvbGljeUZvck5ld1dpbmRv
d0FjdGlvbjooTlNEaWN0aW9uYXJ5ICopYWN0aW9uSW5mb3JtYXRpb24gZGVjaXNpb25IYW5kbGVy
OihXS1BvbGljeURlY2lzaW9uSGFuZGxlcilkZWNpc2lvbkhhbmRsZXI7CistICh2b2lkKWJyb3dz
aW5nQ29udGV4dENvbnRyb2xsZXI6KFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqKXNlbmRl
ciBkZWNpZGVQb2xpY3lGb3JSZXNwb25zZUFjdGlvbjooTlNEaWN0aW9uYXJ5ICopYWN0aW9uSW5m
b3JtYXRpb24gZGVjaXNpb25IYW5kbGVyOihXS1BvbGljeURlY2lzaW9uSGFuZGxlcilkZWNpc2lv
bkhhbmRsZXI7CisKK0BlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tDb25uZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS0Nvbm5lY3Rpb24uaAkocmV2aXNpb24gMTU5ODczKQkoZnJvbSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Nvbm5lY3Rpb24uaDoxNTk4NzMpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29ubmVjdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQyL1dLRm91
bmRhdGlvbi5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9G
b3VuZGF0aW9uLmg+CisKK0BjbGFzcyBXS0Nvbm5lY3Rpb247CitAY2xhc3MgV0tSZW1vdGVPYmpl
Y3RSZWdpc3RyeTsKKworQHByb3RvY29sIFdLQ29ubmVjdGlvbkRlbGVnYXRlIDxOU09iamVjdD4K
KworLSAodm9pZCljb25uZWN0aW9uOihXS0Nvbm5lY3Rpb24gKiljb25uZWN0aW9uIGRpZFJlY2Vp
dmVNZXNzYWdlV2l0aE5hbWU6KE5TU3RyaW5nICopbWVzc2FnZU5hbWUgYm9keTooaWQpbWVzc2Fn
ZUJvZHk7CistICh2b2lkKWNvbm5lY3Rpb25EaWRDbG9zZTooV0tDb25uZWN0aW9uICopY29ubmVj
dGlvbjsKKworQGVuZAorCitXS19BUElfQ0xBU1MKK0BpbnRlcmZhY2UgV0tDb25uZWN0aW9uIDog
TlNPYmplY3QKKworLSAodm9pZClzZW5kTWVzc2FnZVdpdGhOYW1lOihOU1N0cmluZyAqKW1lc3Nh
Z2VOYW1lIGJvZHk6KGlkKW1lc3NhZ2VCb2R5OworCitAcHJvcGVydHkgKGFzc2lnbikgaWQgPFdL
Q29ubmVjdGlvbkRlbGVnYXRlPiBkZWxlZ2F0ZTsKKworQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBXS1JlbW90ZU9iamVjdFJlZ2lzdHJ5ICpyZW1vdGVPYmplY3RSZWdpc3RyeTsKKwor
QGVuZAorCisjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tDb25uZWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb25uZWN0aW9uLm1tCShyZXZpc2lvbiAxNTk4
NzMpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQ29ubmVjdGlvbi5t
bToxNTk4NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29ubmVj
dGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV0tDb25uZWN0aW9uSW50ZXJuYWwuaCIKKworI2lm
IFdLX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIk9iakNPYmplY3RHcmFwaC5oIgorI2ltcG9ydCAi
V0tDb25uZWN0aW9uUmVmLmgiCisjaW1wb3J0ICJXS0RhdGEuaCIKKyNpbXBvcnQgIldLUmV0YWlu
UHRyLmgiCisjaW1wb3J0ICJXS1N0cmluZ0NGLmgiCisjaW1wb3J0ICJXS1JlbW90ZU9iamVjdFJl
Z2lzdHJ5SW50ZXJuYWwuaCIKKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKKworQGltcGxlbWVudGF0aW9uIFdLQ29ubmVjdGlvbiB7CisgICAgLy8g
VW5kZXJseWluZyBjb25uZWN0aW9uIG9iamVjdC4KKyAgICBXS1JldGFpblB0cjxXS0Nvbm5lY3Rp
b25SZWY+IF9jb25uZWN0aW9uUmVmOworCisgICAgUmV0YWluUHRyPFdLUmVtb3RlT2JqZWN0UmVn
aXN0cnk+IF9yZW1vdGVPYmplY3RSZWdpc3RyeTsKK30KKworLSAodm9pZClkZWFsbG9jCit7Cisg
ICAgV0tDb25uZWN0aW9uU2V0Q29ubmVjdGlvbkNsaWVudChfY29ubmVjdGlvblJlZi5nZXQoKSwg
MCk7CisKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2VuZE1lc3NhZ2VXaXRo
TmFtZTooTlNTdHJpbmcgKiltZXNzYWdlTmFtZSBib2R5OihpZCltZXNzYWdlQm9keQoreworICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a01lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpbWVzc2FnZU5hbWUpKTsKKyAgICBSZWZQ
dHI8T2JqQ09iamVjdEdyYXBoPiB3a01lc3NhZ2VCb2R5ID0gT2JqQ09iamVjdEdyYXBoOjpjcmVh
dGUobWVzc2FnZUJvZHkpOworCisgICAgV0tDb25uZWN0aW9uUG9zdE1lc3NhZ2UoX2Nvbm5lY3Rp
b25SZWYuZ2V0KCksIHdrTWVzc2FnZU5hbWUuZ2V0KCksIChXS1R5cGVSZWYpd2tNZXNzYWdlQm9k
eS5nZXQoKSk7Cit9CisKKy0gKFdLUmVtb3RlT2JqZWN0UmVnaXN0cnkgKilyZW1vdGVPYmplY3RS
ZWdpc3RyeQoreworICAgIGlmICghX3JlbW90ZU9iamVjdFJlZ2lzdHJ5KQorICAgICAgICBfcmVt
b3RlT2JqZWN0UmVnaXN0cnkgPSBhZG9wdE5TKFtbV0tSZW1vdGVPYmplY3RSZWdpc3RyeSBhbGxv
Y10gX2luaXRXaXRoQ29ubmVjdGlvblJlZjpfY29ubmVjdGlvblJlZi5nZXQoKV0pOworCisgICAg
cmV0dXJuIF9yZW1vdGVPYmplY3RSZWdpc3RyeS5nZXQoKTsKK30KKworc3RhdGljIHZvaWQgZGlk
UmVjZWl2ZU1lc3NhZ2UoV0tDb25uZWN0aW9uUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwg
V0tUeXBlUmVmIG1lc3NhZ2VCb2R5LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIFdL
Q29ubmVjdGlvbiAqY29ubmVjdGlvbiA9IChXS0Nvbm5lY3Rpb24gKiljbGllbnRJbmZvOworCisg
ICAgaWYgKFtjb25uZWN0aW9uLT5fcmVtb3RlT2JqZWN0UmVnaXN0cnkgX2hhbmRsZU1lc3NhZ2VX
aXRoTmFtZTptZXNzYWdlTmFtZSBib2R5Om1lc3NhZ2VCb2R5XSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKFtjb25uZWN0aW9uLmRlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IoY29ubmVjdGlvbjpkaWRSZWNlaXZlTWVzc2FnZVdpdGhOYW1lOmJvZHk6KV0pIHsKKyAgICAg
ICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBuc01lc3NhZ2VOYW1lID0gYWRvcHRDRihXS1N0cmlu
Z0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBtZXNzYWdlTmFtZSkpOworICAgICAg
ICBSZXRhaW5QdHI8aWQ+IG5zTWVzc2FnZUJvZHkgPSAoKE9iakNPYmplY3RHcmFwaCopbWVzc2Fn
ZUJvZHkpLT5yb290T2JqZWN0KCk7CisKKyAgICAgICAgW2Nvbm5lY3Rpb24uZGVsZWdhdGUgY29u
bmVjdGlvbjpjb25uZWN0aW9uIGRpZFJlY2VpdmVNZXNzYWdlV2l0aE5hbWU6KE5TU3RyaW5nICop
bnNNZXNzYWdlTmFtZS5nZXQoKSBib2R5Om5zTWVzc2FnZUJvZHkuZ2V0KCldOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgZGlkQ2xvc2UoV0tDb25uZWN0aW9uUmVmLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQoreworICAgIFdLQ29ubmVjdGlvbiAqY29ubmVjdGlvbiA9IChXS0Nvbm5lY3Rpb24g
KiljbGllbnRJbmZvOworICAgIGlmIChbY29ubmVjdGlvbi5kZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKGNvbm5lY3Rpb25EaWRDbG9zZTopXSkgeworICAgICAgICBbY29ubmVj
dGlvbi5kZWxlZ2F0ZSBjb25uZWN0aW9uRGlkQ2xvc2U6Y29ubmVjdGlvbl07CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCBzZXRVcENsaWVudChXS0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIFdLQ29u
bmVjdGlvblJlZiBjb25uZWN0aW9uUmVmKQoreworICAgIFdLQ29ubmVjdGlvbkNsaWVudCBjbGll
bnQ7CisgICAgbWVtc2V0KCZjbGllbnQsIDAsIHNpemVvZihjbGllbnQpKTsKKworICAgIGNsaWVu
dC52ZXJzaW9uID0gV0tDb25uZWN0aW9uQ2xpZW50Q3VycmVudFZlcnNpb247CisgICAgY2xpZW50
LmNsaWVudEluZm8gPSBjb25uZWN0aW9uOworICAgIGNsaWVudC5kaWRSZWNlaXZlTWVzc2FnZSA9
IGRpZFJlY2VpdmVNZXNzYWdlOworICAgIGNsaWVudC5kaWRDbG9zZSA9IGRpZENsb3NlOworCisg
ICAgV0tDb25uZWN0aW9uU2V0Q29ubmVjdGlvbkNsaWVudChjb25uZWN0aW9uUmVmLCAmY2xpZW50
KTsKK30KKworLSAoaWQpX2luaXRXaXRoQ29ubmVjdGlvblJlZjooV0tDb25uZWN0aW9uUmVmKWNv
bm5lY3Rpb25SZWYKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9jb25uZWN0aW9uUmVmID0gY29ubmVjdGlvblJl
ZjsKKworICAgIHNldFVwQ2xpZW50KHNlbGYsIF9jb25uZWN0aW9uUmVmLmdldCgpKTsKKworICAg
IHJldHVybiBzZWxmOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Nvbm5lY3Rpb25JbnRlcm5h
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tD
b25uZWN0aW9uSW50ZXJuYWwuaAkocmV2aXNpb24gMTU5ODczKQkoZnJvbSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Nvbm5lY3Rpb25JbnRlcm5hbC5oOjE1OTg3MykKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb25uZWN0aW9uSW50ZXJuYWwuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiV0tD
b25uZWN0aW9uLmgiCisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0IDxXZWJLaXQyL1dL
QmFzZS5oPgorCitAaW50ZXJmYWNlIFdLQ29ubmVjdGlvbiAoKQorCistIChpZClfaW5pdFdpdGhD
b25uZWN0aW9uUmVmOihXS0Nvbm5lY3Rpb25SZWYpY29ubmVjdGlvblJlZjsKKworQGVuZAorCisj
ZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc0dyb3VwLmgJKHJldmlzaW9uIDE1OTg3MykJKGZy
b20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcm9jZXNzR3JvdXAuaDoxNTk4
NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc0dyb3Vw
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQg
PFdlYktpdDIvV0tGb3VuZGF0aW9uLmg+CisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0
IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPFdlYktpdDIvV0tDb25uZWN0aW9u
Lmg+CisKK0BjbGFzcyBXS1Byb2Nlc3NHcm91cDsKKworQHByb3RvY29sIFdLUHJvY2Vzc0dyb3Vw
RGVsZWdhdGUgPE5TT2JqZWN0PgorQG9wdGlvbmFsCisKKy0gKGlkKXByb2Nlc3NHcm91cFdpbGxD
cmVhdGVDb25uZWN0aW9uVG9XZWJQcm9jZXNzUGx1Z0luOihXS1Byb2Nlc3NHcm91cCAqKXByb2Nl
c3NHcm91cDsKKworQHJlcXVpcmVkCisKKy0gKHZvaWQpcHJvY2Vzc0dyb3VwOihXS1Byb2Nlc3NH
cm91cCAqKXByb2Nlc3NHcm91cCBkaWRDcmVhdGVDb25uZWN0aW9uVG9XZWJQcm9jZXNzUGx1Z0lu
OihXS0Nvbm5lY3Rpb24gKiljb25uZWN0aW9uOworCitAZW5kCisKK1dLX0FQSV9DTEFTUworQGlu
dGVyZmFjZSBXS1Byb2Nlc3NHcm91cCA6IE5TT2JqZWN0CisKKy0gKGlkKWluaXRXaXRoSW5qZWN0
ZWRCdW5kbGVVUkw6KE5TVVJMICopYnVuZGxlVVJMOworCisKKyNwcmFnbWEgbWFyayBEZWxlZ2F0
ZXMKKworQHByb3BlcnR5IChhc3NpZ24pIGlkIDxXS1Byb2Nlc3NHcm91cERlbGVnYXRlPiBkZWxl
Z2F0ZTsKKworQGVuZAorCisjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91cC5tbQko
cmV2aXNpb24gMTU5ODczKQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9X
S1Byb2Nlc3NHcm91cC5tbToxNTk4NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLUHJvY2Vzc0dyb3VwLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS1Byb2Nlc3NHcm91
cEludGVybmFsLmgiCisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJBUElOYXZpZ2F0
aW9uRGF0YS5oIgorI2ltcG9ydCAiT2JqQ09iamVjdEdyYXBoLmgiCisjaW1wb3J0ICJXS0FQSUNh
c3QuaCIKKyNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckludGVybmFsLmgiCisj
aW1wb3J0ICJXS0Jyb3dzaW5nQ29udGV4dEhpc3RvcnlEZWxlZ2F0ZS5oIgorI2ltcG9ydCAiV0tD
b25uZWN0aW9uSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLQ29udGV4dC5oIgorI2ltcG9ydCAiV0tO
U1N0cmluZy5oIgorI2ltcG9ydCAiV0tOU1VSTC5oIgorI2ltcG9ydCAiV0tOYXZpZ2F0aW9uRGF0
YUludGVybmFsLmgiCisjaW1wb3J0ICJXS1JldGFpblB0ci5oIgorI2ltcG9ydCAiV0tTdHJpbmdD
Ri5oIgorI2ltcG9ydCAiV2ViRnJhbWVQcm94eS5oIgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5o
PgorCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCAiV0tBUElDYXN0LmgiCisjaW1wb3J0ICJX
S0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MuaCIKKyNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVRocmVh
ZFN5c3RlbUludGVyZmFjZS5oPgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisK
K0BpbXBsZW1lbnRhdGlvbiBXS1Byb2Nlc3NHcm91cCB7CisgICAgc3RkOjphbGlnbmVkX3N0b3Jh
Z2U8c2l6ZW9mKFdlYkNvbnRleHQpLCBzdGQ6OmFsaWdubWVudF9vZjxXZWJDb250ZXh0Pjo6dmFs
dWU+Ojp0eXBlIF9jb250ZXh0OworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFJldGFpblB0cjxX
S0dlb2xvY2F0aW9uUHJvdmlkZXJJT1M+IF9nZW9sb2NhdGlvblByb3ZpZGVyOworI2VuZGlmIC8v
IFBMQVRGT1JNKElPUykKK30KKworc3RhdGljIHZvaWQgZGlkQ3JlYXRlQ29ubmVjdGlvbihXS0Nv
bnRleHRSZWYsIFdLQ29ubmVjdGlvblJlZiBjb25uZWN0aW9uUmVmLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQoreworICAgIFdLUHJvY2Vzc0dyb3VwICpwcm9jZXNzR3JvdXAgPSAoV0tQcm9jZXNz
R3JvdXAgKiljbGllbnRJbmZvOworICAgIGlmIChbcHJvY2Vzc0dyb3VwLmRlbGVnYXRlIHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocHJvY2Vzc0dyb3VwOmRpZENyZWF0ZUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3NQbHVnSW46KV0pIHsKKyAgICAgICAgUmV0YWluUHRyPFdLQ29ubmVjdGlvbj4g
Y29ubmVjdGlvbiA9IGFkb3B0TlMoW1tXS0Nvbm5lY3Rpb24gYWxsb2NdIF9pbml0V2l0aENvbm5l
Y3Rpb25SZWY6Y29ubmVjdGlvblJlZl0pOworICAgICAgICBbcHJvY2Vzc0dyb3VwLmRlbGVnYXRl
IHByb2Nlc3NHcm91cDpwcm9jZXNzR3JvdXAgZGlkQ3JlYXRlQ29ubmVjdGlvblRvV2ViUHJvY2Vz
c1BsdWdJbjpjb25uZWN0aW9uLmdldCgpXTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNldFVw
Q29ubmVjdGlvbkNsaWVudChXS1Byb2Nlc3NHcm91cCAqcHJvY2Vzc0dyb3VwLCBXS0NvbnRleHRS
ZWYgY29udGV4dFJlZikKK3sKKyAgICBXS0NvbnRleHRDb25uZWN0aW9uQ2xpZW50IGNvbm5lY3Rp
b25DbGllbnQ7CisgICAgbWVtc2V0KCZjb25uZWN0aW9uQ2xpZW50LCAwLCBzaXplb2YoY29ubmVj
dGlvbkNsaWVudCkpOworCisgICAgY29ubmVjdGlvbkNsaWVudC52ZXJzaW9uID0ga1dLQ29udGV4
dENvbm5lY3Rpb25DbGllbnRDdXJyZW50VmVyc2lvbjsKKyAgICBjb25uZWN0aW9uQ2xpZW50LmNs
aWVudEluZm8gPSBwcm9jZXNzR3JvdXA7CisgICAgY29ubmVjdGlvbkNsaWVudC5kaWRDcmVhdGVD
b25uZWN0aW9uID0gZGlkQ3JlYXRlQ29ubmVjdGlvbjsKKworICAgIFdLQ29udGV4dFNldENvbm5l
Y3Rpb25DbGllbnQoY29udGV4dFJlZiwgJmNvbm5lY3Rpb25DbGllbnQpOworfQorCitzdGF0aWMg
V0tUeXBlUmVmIGdldEluamVjdGVkQnVuZGxlSW5pdGlhbGl6YXRpb25Vc2VyRGF0YShXS0NvbnRl
eHRSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgV0tQcm9jZXNzR3JvdXAgKnBy
b2Nlc3NHcm91cCA9IChXS1Byb2Nlc3NHcm91cCAqKWNsaWVudEluZm87CisgICAgaWYgKFtwcm9j
ZXNzR3JvdXAuZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihwcm9jZXNzR3Jv
dXBXaWxsQ3JlYXRlQ29ubmVjdGlvblRvV2ViUHJvY2Vzc1BsdWdJbjopXSkgeworICAgICAgICBS
ZXRhaW5QdHI8aWQ+IGluaXRpYWxpemF0aW9uVXNlckRhdGEgPSBbcHJvY2Vzc0dyb3VwLmRlbGVn
YXRlIHByb2Nlc3NHcm91cFdpbGxDcmVhdGVDb25uZWN0aW9uVG9XZWJQcm9jZXNzUGx1Z0luOnBy
b2Nlc3NHcm91cF07CisgICAgICAgIFJlZlB0cjxXZWJLaXQ6Ok9iakNPYmplY3RHcmFwaD4gd2tN
ZXNzYWdlQm9keSA9IFdlYktpdDo6T2JqQ09iamVjdEdyYXBoOjpjcmVhdGUoaW5pdGlhbGl6YXRp
b25Vc2VyRGF0YS5nZXQoKSk7CisgICAgICAgIHJldHVybiAoV0tUeXBlUmVmKXdrTWVzc2FnZUJv
ZHkucmVsZWFzZSgpLmxlYWtSZWYoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3Rh
dGljIHZvaWQgc2V0VXBJbmVjdGVkQnVuZGxlQ2xpZW50KFdLUHJvY2Vzc0dyb3VwICpwcm9jZXNz
R3JvdXAsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQoreworICAgIFdLQ29udGV4dEluamVjdGVk
QnVuZGxlQ2xpZW50IGluamVjdGVkQnVuZGxlQ2xpZW50OworICAgIG1lbXNldCgmaW5qZWN0ZWRC
dW5kbGVDbGllbnQsIDAsIHNpemVvZihpbmplY3RlZEJ1bmRsZUNsaWVudCkpOworCisgICAgaW5q
ZWN0ZWRCdW5kbGVDbGllbnQudmVyc2lvbiA9IGtXS0NvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVu
dEN1cnJlbnRWZXJzaW9uOworICAgIGluamVjdGVkQnVuZGxlQ2xpZW50LmNsaWVudEluZm8gPSBw
cm9jZXNzR3JvdXA7CisgICAgaW5qZWN0ZWRCdW5kbGVDbGllbnQuZ2V0SW5qZWN0ZWRCdW5kbGVJ
bml0aWFsaXphdGlvblVzZXJEYXRhID0gZ2V0SW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVz
ZXJEYXRhOworCisgICAgV0tDb250ZXh0U2V0SW5qZWN0ZWRCdW5kbGVDbGllbnQoY29udGV4dFJl
ZiwgJmluamVjdGVkQnVuZGxlQ2xpZW50KTsKK30KKworc3RhdGljIHZvaWQgZGlkTmF2aWdhdGVX
aXRoTmF2aWdhdGlvbkRhdGEoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZVJlZiwgV0tOYXZp
Z2F0aW9uRGF0YVJlZiBuYXZpZ2F0aW9uRGF0YVJlZiwgV0tGcmFtZVJlZiBmcmFtZVJlZiwgY29u
c3Qgdm9pZCopCit7CisgICAgaWYgKCF0b0ltcGwoZnJhbWVSZWYpLT5pc01haW5GcmFtZSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmNvbnRy
b2xsZXIgPSBbV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyIF9icm93c2luZ0NvbnRleHRDb250
cm9sbGVyRm9yUGFnZVJlZjpwYWdlUmVmXTsKKyAgICBpZiAoW2NvbnRyb2xsZXIuaGlzdG9yeURl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoYnJvd3NpbmdDb250ZXh0Q29udHJv
bGxlcjpkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YTopXSkKKyAgICAgICAgW2NvbnRyb2xs
ZXIuaGlzdG9yeURlbGVnYXRlIGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXI6Y29udHJvbGxlciBk
aWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YTp3cmFwcGVyKCp0b0ltcGwobmF2aWdhdGlvbkRh
dGFSZWYpKV07Cit9CisKK3N0YXRpYyB2b2lkIGRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdChXS0Nv
bnRleHRSZWYsIFdLUGFnZVJlZiBwYWdlUmVmLCBXS1VSTFJlZiBzb3VyY2VVUkxSZWYsIFdLVVJM
UmVmIGRlc3RpbmF0aW9uVVJMUmVmLCBXS0ZyYW1lUmVmIGZyYW1lUmVmLCBjb25zdCB2b2lkKikK
K3sKKyAgICBpZiAoIXRvSW1wbChmcmFtZVJlZiktPmlzTWFpbkZyYW1lKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqY29udHJvbGxlciA9IFtX
S0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgX2Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJGb3JQ
YWdlUmVmOnBhZ2VSZWZdOworICAgIGlmIChbY29udHJvbGxlci5oaXN0b3J5RGVsZWdhdGUgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihicm93c2luZ0NvbnRleHRDb250cm9sbGVyOmRpZFBl
cmZvcm1DbGllbnRSZWRpcmVjdEZyb21VUkw6dG9VUkw6KV0pCisgICAgICAgIFtjb250cm9sbGVy
Lmhpc3RvcnlEZWxlZ2F0ZSBicm93c2luZ0NvbnRleHRDb250cm9sbGVyOmNvbnRyb2xsZXIgZGlk
UGVyZm9ybUNsaWVudFJlZGlyZWN0RnJvbVVSTDp3cmFwcGVyKCp0b0ltcGwoc291cmNlVVJMUmVm
KSkgdG9VUkw6d3JhcHBlcigqdG9JbXBsKGRlc3RpbmF0aW9uVVJMUmVmKSldOworfQorCitzdGF0
aWMgdm9pZCBkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYg
cGFnZVJlZiwgV0tVUkxSZWYgc291cmNlVVJMUmVmLCBXS1VSTFJlZiBkZXN0aW5hdGlvblVSTFJl
ZiwgV0tGcmFtZVJlZiBmcmFtZVJlZiwgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKCF0b0ltcGwo
ZnJhbWVSZWYpLT5pc01haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBXS0Jyb3dz
aW5nQ29udGV4dENvbnRyb2xsZXIgKmNvbnRyb2xsZXIgPSBbV0tCcm93c2luZ0NvbnRleHRDb250
cm9sbGVyIF9icm93c2luZ0NvbnRleHRDb250cm9sbGVyRm9yUGFnZVJlZjpwYWdlUmVmXTsKKyAg
ICBpZiAoW2NvbnRyb2xsZXIuaGlzdG9yeURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IoYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjpkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3RG
cm9tVVJMOnRvVVJMOildKQorICAgICAgICBbY29udHJvbGxlci5oaXN0b3J5RGVsZWdhdGUgYnJv
d3NpbmdDb250ZXh0Q29udHJvbGxlcjpjb250cm9sbGVyIGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVj
dEZyb21VUkw6d3JhcHBlcigqdG9JbXBsKHNvdXJjZVVSTFJlZikpIHRvVVJMOndyYXBwZXIoKnRv
SW1wbChkZXN0aW5hdGlvblVSTFJlZikpXTsKK30KKworc3RhdGljIHZvaWQgZGlkVXBkYXRlSGlz
dG9yeVRpdGxlKFdLQ29udGV4dFJlZiwgV0tQYWdlUmVmIHBhZ2VSZWYsIFdLU3RyaW5nUmVmIHRp
dGxlUmVmLCBXS1VSTFJlZiB1cmxSZWYsIFdLRnJhbWVSZWYgZnJhbWVSZWYsIGNvbnN0IHZvaWQq
KQoreworICAgIGlmICghdG9JbXBsKGZyYW1lUmVmKS0+aXNNYWluRnJhbWUoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpjb250cm9sbGVyID0g
W1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciBfYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckZv
clBhZ2VSZWY6cGFnZVJlZl07CisgICAgaWYgKFtjb250cm9sbGVyLmhpc3RvcnlEZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXI6ZGlk
VXBkYXRlSGlzdG9yeVRpdGxlOmZvclVSTDopXSkKKyAgICAgICAgW2NvbnRyb2xsZXIuaGlzdG9y
eURlbGVnYXRlIGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXI6Y29udHJvbGxlciBkaWRVcGRhdGVI
aXN0b3J5VGl0bGU6d3JhcHBlcigqdG9JbXBsKHRpdGxlUmVmKSkgZm9yVVJMOndyYXBwZXIoKnRv
SW1wbCh1cmxSZWYpKV07Cit9CisKK3N0YXRpYyB2b2lkIHNldFVwSGlzdG9yeUNsaWVudChXS1By
b2Nlc3NHcm91cCAqcHJvY2Vzc0dyb3VwLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZikKK3sKKyAg
ICBXS0NvbnRleHRIaXN0b3J5Q2xpZW50IGhpc3RvcnlDbGllbnQ7CisgICAgbWVtc2V0KCZoaXN0
b3J5Q2xpZW50LCAwLCBzaXplb2YoaGlzdG9yeUNsaWVudCkpOworCisgICAgaGlzdG9yeUNsaWVu
dC52ZXJzaW9uID0ga1dLQ29udGV4dEhpc3RvcnlDbGllbnRDdXJyZW50VmVyc2lvbjsKKyAgICBo
aXN0b3J5Q2xpZW50LmNsaWVudEluZm8gPSBwcm9jZXNzR3JvdXA7CisgICAgaGlzdG9yeUNsaWVu
dC5kaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSA9IGRpZE5hdmlnYXRlV2l0aE5hdmlnYXRp
b25EYXRhOworICAgIGhpc3RvcnlDbGllbnQuZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0ID0gZGlk
UGVyZm9ybUNsaWVudFJlZGlyZWN0OworICAgIGhpc3RvcnlDbGllbnQuZGlkUGVyZm9ybVNlcnZl
clJlZGlyZWN0ID0gZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0OworICAgIGhpc3RvcnlDbGllbnQu
ZGlkVXBkYXRlSGlzdG9yeVRpdGxlID0gZGlkVXBkYXRlSGlzdG9yeVRpdGxlOworCisgICAgV0tD
b250ZXh0U2V0SGlzdG9yeUNsaWVudChjb250ZXh0UmVmLCAmaGlzdG9yeUNsaWVudCk7Cit9CisK
Ky0gKGlkKWluaXQKK3sKKyAgICByZXR1cm4gW3NlbGYgaW5pdFdpdGhJbmplY3RlZEJ1bmRsZVVS
TDpuaWxdOworfQorCistIChpZClpbml0V2l0aEluamVjdGVkQnVuZGxlVVJMOihOU1VSTCAqKWJ1
bmRsZVVSTAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAg
ICAgICByZXR1cm4gbmlsOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBSZW1v
dmUgb25jZSA8cmRhcjovL3Byb2JsZW0vMTUyNTY1NzI+IGlzIGZpeGVkLgorICAgIEluaXRXZWJD
b3JlVGhyZWFkU3lzdGVtSW50ZXJmYWNlKCk7CisjZW5kaWYKKworICAgIEFQSTo6T2JqZWN0Ojpj
b25zdHJ1Y3RJbldyYXBwZXI8V2ViQ29udGV4dD4oc2VsZiwgYnVuZGxlVVJMID8gU3RyaW5nKFti
dW5kbGVVUkwgcGF0aF0pIDogU3RyaW5nKCkpOworCisgICAgc2V0VXBDb25uZWN0aW9uQ2xpZW50
KHNlbGYsIHRvQVBJKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29udGV4dCo+KCZfY29udGV4dCkpKTsK
KyAgICBzZXRVcEluZWN0ZWRCdW5kbGVDbGllbnQoc2VsZiwgdG9BUEkocmVpbnRlcnByZXRfY2Fz
dDxXZWJDb250ZXh0Kj4oJl9jb250ZXh0KSkpOworICAgIHNldFVwSGlzdG9yeUNsaWVudChzZWxm
LCB0b0FQSShyZWludGVycHJldF9jYXN0PFdlYkNvbnRleHQqPigmX2NvbnRleHQpKSk7CisKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgcmVpbnRlcnByZXRf
Y2FzdDxXZWJDb250ZXh0Kj4oJl9jb250ZXh0KS0+fldlYkNvbnRleHQoKTsKKworICAgIFtzdXBl
ciBkZWFsbG9jXTsKK30KKworI3ByYWdtYSBtYXJrIFdLT2JqZWN0IHByb3RvY29sIGltcGxlbWVu
dGF0aW9uCisKKy0gKEFQSTo6T2JqZWN0JilfYXBpT2JqZWN0Cit7CisgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEFQSTo6T2JqZWN0Kj4oJl9jb250ZXh0KTsKK30KKworQGVuZAorCitAaW1w
bGVtZW50YXRpb24gV0tQcm9jZXNzR3JvdXAgKFByaXZhdGUpCisKKy0gKFdLQ29udGV4dFJlZilf
Y29udGV4dFJlZgoreworICAgIHJldHVybiB0b0FQSShyZWludGVycHJldF9jYXN0PFdlYkNvbnRl
eHQqPigmX2NvbnRleHQpKTsKK30KKworI2lmIFBMQVRGT1JNKElPUykKKy0gKFdLR2VvbG9jYXRp
b25Qcm92aWRlcklPUyAqKV9nZW9sb2NhdGlvblByb3ZpZGVyCit7CisgICAgaWYgKCFfZ2VvbG9j
YXRpb25Qcm92aWRlcikKKyAgICAgICAgX2dlb2xvY2F0aW9uUHJvdmlkZXIgPSBhZG9wdE5TKFtb
V0tHZW9sb2NhdGlvblByb3ZpZGVySU9TIGFsbG9jXSBpbml0V2l0aENvbnRleHQ6cmVpbnRlcnBy
ZXRfY2FzdDxXZWJDb250ZXh0Kj4oJl9jb250ZXh0KV0pOworICAgIHJldHVybiBfZ2VvbG9jYXRp
b25Qcm92aWRlci5nZXQoKTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKK0BlbmQKKwor
I2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLUHJvY2Vzc0dyb3VwSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc0dyb3VwSW50ZXJuYWwuaAkocmV2
aXNpb24gMTU5ODczKQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1By
b2Nlc3NHcm91cEludGVybmFsLmg6MTU5ODczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91cEludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIldLUHJvY2Vzc0dyb3VwUHJpdmF0ZS5o
IgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCAiV0tPYmplY3QuaCIKKyNpbXBvcnQg
IldlYkNvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2lubGluZSBXS1Byb2Nlc3NH
cm91cCAqd3JhcHBlcihXZWJDb250ZXh0JiBjb250ZXh0KQoreworICAgIEFTU0VSVChbY29udGV4
dC53cmFwcGVyKCkgaXNLaW5kT2ZDbGFzczpbV0tQcm9jZXNzR3JvdXAgY2xhc3NdXSk7CisgICAg
cmV0dXJuIChXS1Byb2Nlc3NHcm91cCAqKWNvbnRleHQud3JhcHBlcigpOworfQorCit9CisKK0Bp
bnRlcmZhY2UgV0tQcm9jZXNzR3JvdXAgKCkgPFdLT2JqZWN0PgorQGVuZAorCisjZW5kaWYgLy8g
V0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tQcm9jZXNzR3JvdXBQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91cFByaXZhdGUuaAkocmV2aXNpb24gMTU5ODcz
KQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1Byb2Nlc3NHcm91cFBy
aXZhdGUuaDoxNTk4NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
UHJvY2Vzc0dyb3VwUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQyL1dLUHJvY2Vzc0dyb3VwLmg+CisKKyNpZiBXS19B
UElfRU5BQkxFRAorCisjaW1wb3J0IDxXZWJLaXQyL1dLQmFzZS5oPgorCisjaWYgVEFSR0VUX09T
X0lQSE9ORQorQGNsYXNzIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUzsKKyNlbmRpZgorCitAaW50
ZXJmYWNlIFdLUHJvY2Vzc0dyb3VwIChQcml2YXRlKQorCitAcHJvcGVydHkocmVhZG9ubHkpIFdL
Q29udGV4dFJlZiBfY29udGV4dFJlZjsKKyNpZiBUQVJHRVRfT1NfSVBIT05FCitAcHJvcGVydHko
cmVhZG9ubHkpIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUyAqX2dlb2xvY2F0aW9uUHJvdmlkZXI7
CisjZW5kaWYKKworQGVuZAorCisjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tUeXBlUmVmV3JhcHBlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tUeXBlUmVmV3JhcHBl
ci5oCShyZXZpc2lvbiAxNTk4NzMpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
bWFjL1dLVHlwZVJlZldyYXBwZXIuaDoxNTk4NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLVHlwZVJlZldyYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0Mi9XS0ZvdW5kYXRpb24uaD4KKwor
I2lmIFdLX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgor
I2ltcG9ydCA8V2ViS2l0Mi9XS0Jhc2UuaD4KKworV0tfQVBJX0NMQVNTCitAaW50ZXJmYWNlIFdL
VHlwZVJlZldyYXBwZXIgOiBOU09iamVjdAorCistIChpZClpbml0V2l0aE9iamVjdDooV0tUeXBl
UmVmKW9iamVjdDsKKworQHByb3BlcnR5KHJlYWRvbmx5KSBXS1R5cGVSZWYgb2JqZWN0OworCitA
ZW5kCisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1R5cGVSZWZXcmFwcGVyLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tUeXBlUmVmV3JhcHBlci5tbQkocmV2aXNp
b24gMTU5ODczKQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1R5cGVS
ZWZXcmFwcGVyLm1tOjE1OTg3MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tUeXBlUmVmV3JhcHBlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS1R5cGVSZWZXcmFwcGVy
LmgiCisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJXS1JldGFpblB0ci5oIgorCitA
aW50ZXJmYWNlIFdLVHlwZVJlZldyYXBwZXIgKCkgeworICAgIC8vIFVuZGVybHlpbmcgV0tUeXBl
UmVmLgorICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gX29iamVjdDsKK30KK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFdLVHlwZVJlZldyYXBwZXIKKworLSAoaWQpaW5pdFdpdGhPYmplY3Q6KFdL
VHlwZVJlZilvYmplY3QKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2Vs
ZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9vYmplY3QgPSBvYmplY3Q7CisKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAoV0tUeXBlUmVmKW9iamVjdAoreworICAgIHJldHVybiBfb2Jq
ZWN0LmdldCgpOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ZpZXcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVmlldy5oCShyZXZpc2lvbiAx
NTk4NzMpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5oOjE1
OTg3MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tWaWV3LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktp
dDIvV0tGb3VuZGF0aW9uLmg+CisKKyNpZiBUQVJHRVRfT1NfSVBIT05FCisjaW1wb3J0IDxVSUtp
dC9VSUtpdC5oPgorI2Vsc2UKKyNpbXBvcnQgPENvY29hL0NvY29hLmg+CisjZW5kaWYKKyNpbXBv
cnQgPFdlYktpdDIvV0tEZWNsYXJhdGlvblNwZWNpZmllcnMuaD4KKworQGNsYXNzIFdLQnJvd3Np
bmdDb250ZXh0Q29udHJvbGxlcjsKK0BjbGFzcyBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwOworQGNs
YXNzIFdLUHJvY2Vzc0dyb3VwOworQGNsYXNzIFdLVmlld0RhdGE7CisKKyNpZiBUQVJHRVRfT1Nf
SVBIT05FCitXS19FWFBPUlQKK0BpbnRlcmZhY2UgV0tWaWV3IDogVUlWaWV3IHsKKyNlbHNlCitX
S19FWFBPUlQKK0BpbnRlcmZhY2UgV0tWaWV3IDogTlNWaWV3IDxOU1RleHRJbnB1dENsaWVudD4g
eworI2VuZGlmCitAcHJpdmF0ZQorICAgIFdLVmlld0RhdGEgKl9kYXRhOworICAgIHVuc2lnbmVk
IF91bnVzZWQ7Cit9CisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaWYgVEFSR0VUX09TX0lQSE9O
RQorLSAoaWQpaW5pdFdpdGhGcmFtZTooQ0dSZWN0KWZyYW1lIHByb2Nlc3NHcm91cDooV0tQcm9j
ZXNzR3JvdXAgKilwcm9jZXNzR3JvdXAgYnJvd3NpbmdDb250ZXh0R3JvdXA6KFdLQnJvd3NpbmdD
b250ZXh0R3JvdXAgKilicm93c2luZ0NvbnRleHRHcm91cDsKKy0gKGlkKWluaXRXaXRoRnJhbWU6
KENHUmVjdClmcmFtZSBwcm9jZXNzR3JvdXA6KFdLUHJvY2Vzc0dyb3VwICopcHJvY2Vzc0dyb3Vw
IGJyb3dzaW5nQ29udGV4dEdyb3VwOihXS0Jyb3dzaW5nQ29udGV4dEdyb3VwICopYnJvd3NpbmdD
b250ZXh0R3JvdXAgcmVsYXRlZFRvVmlldzooV0tWaWV3ICopcmVsYXRlZFZpZXc7CisjZWxzZQor
LSAoaWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIHByb2Nlc3NHcm91cDooV0tQcm9jZXNz
R3JvdXAgKilwcm9jZXNzR3JvdXAgYnJvd3NpbmdDb250ZXh0R3JvdXA6KFdLQnJvd3NpbmdDb250
ZXh0R3JvdXAgKilicm93c2luZ0NvbnRleHRHcm91cDsKKy0gKGlkKWluaXRXaXRoRnJhbWU6KE5T
UmVjdClmcmFtZSBwcm9jZXNzR3JvdXA6KFdLUHJvY2Vzc0dyb3VwICopcHJvY2Vzc0dyb3VwIGJy
b3dzaW5nQ29udGV4dEdyb3VwOihXS0Jyb3dzaW5nQ29udGV4dEdyb3VwICopYnJvd3NpbmdDb250
ZXh0R3JvdXAgcmVsYXRlZFRvVmlldzooV0tWaWV3ICopcmVsYXRlZFZpZXc7CisjZW5kaWYKKwor
QHByb3BlcnR5KHJlYWRvbmx5KSBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmJyb3dzaW5n
Q29udGV4dENvbnRyb2xsZXI7CisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxFRAorCitAcHJvcGVy
dHkgQk9PTCBkcmF3c0JhY2tncm91bmQ7CitAcHJvcGVydHkgQk9PTCBkcmF3c1RyYW5zcGFyZW50
QmFja2dyb3VuZDsKKworQGVuZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1ZpZXdQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1ZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDE1OTg3MykJKGZyb20gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3UHJpdmF0ZS5oOjE1OTg3MykKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tWaWV3UHJpdmF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQy
L1dLQmFzZS5oPgorI2ltcG9ydCA8V2ViS2l0Mi9XS1ZpZXcuaD4KKworI2lmICFUQVJHRVRfT1Nf
SVBIT05FCisKK3R5cGVkZWYgZW51bSB7CisgICAgV0tDb250ZW50QW5jaG9yVG9wTGVmdCwKKyAg
ICBXS0NvbnRlbnRBbmNob3JUb3BSaWdodCwKKyAgICBXS0NvbnRlbnRBbmNob3JCb3R0b21MZWZ0
LAorICAgIFdLQ29udGVudEFuY2hvckJvdHRvbVJpZ2h0LAorfSBXS0NvbnRlbnRBbmNob3I7CisK
KyNlbmRpZgorCitAaW50ZXJmYWNlIFdLVmlldyAoUHJpdmF0ZSkKKworLyogQyBTUEkgc3VwcG9y
dC4gKi8KKworQHByb3BlcnR5IChyZWFkb25seSkgV0tQYWdlUmVmIHBhZ2VSZWY7CisKKyNpZiBU
QVJHRVRfT1NfSVBIT05FCistIChpZClpbml0V2l0aEZyYW1lOihDR1JlY3QpZnJhbWUgY29udGV4
dFJlZjooV0tDb250ZXh0UmVmKWNvbnRleHRSZWYgcGFnZUdyb3VwUmVmOihXS1BhZ2VHcm91cFJl
ZilwYWdlR3JvdXBSZWY7CistIChpZClpbml0V2l0aEZyYW1lOihDR1JlY3QpZnJhbWUgY29udGV4
dFJlZjooV0tDb250ZXh0UmVmKWNvbnRleHRSZWYgcGFnZUdyb3VwUmVmOihXS1BhZ2VHcm91cFJl
ZilwYWdlR3JvdXBSZWYgcmVsYXRlZFRvUGFnZTooV0tQYWdlUmVmKXJlbGF0ZWRQYWdlOworI2Vs
c2UKKy0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBjb250ZXh0UmVmOihXS0NvbnRl
eHRSZWYpY29udGV4dFJlZiBwYWdlR3JvdXBSZWY6KFdLUGFnZUdyb3VwUmVmKXBhZ2VHcm91cFJl
ZjsKKy0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBjb250ZXh0UmVmOihXS0NvbnRl
eHRSZWYpY29udGV4dFJlZiBwYWdlR3JvdXBSZWY6KFdLUGFnZUdyb3VwUmVmKXBhZ2VHcm91cFJl
ZiByZWxhdGVkVG9QYWdlOihXS1BhZ2VSZWYpcmVsYXRlZFBhZ2U7CisjZW5kaWYKKworI2lmICFU
QVJHRVRfT1NfSVBIT05FCisKK0Bwcm9wZXJ0eSBXS0NvbnRlbnRBbmNob3IgY29udGVudEFuY2hv
cjsKKworLSAoTlNQcmludE9wZXJhdGlvbiAqKXByaW50T3BlcmF0aW9uV2l0aFByaW50SW5mbzoo
TlNQcmludEluZm8gKilwcmludEluZm8gZm9yRnJhbWU6KFdLRnJhbWVSZWYpZnJhbWVSZWY7Cist
IChCT09MKWNhbkNoYW5nZUZyYW1lTGF5b3V0OihXS0ZyYW1lUmVmKWZyYW1lUmVmOworCistICh2
b2lkKXNldEZyYW1lOihOU1JlY3QpcmVjdCBhbmRTY3JvbGxCeTooTlNTaXplKW9mZnNldDsKKwor
Ly8gU3RvcHMgdXBkYXRpbmcgdGhlIHNpemUgb2YgdGhlIHBhZ2UgYXMgdGhlIFdLVmlldyBmcmFt
ZSBzaXplIHVwZGF0ZXMuCisvLyBUaGlzIHNob3VsZCBhbHdheXMgYmUgZm9sbG93ZWQgYnkgZW5h
YmxlRnJhbWVTaXplVXBkYXRlcy4gQ2FsbHMgY2FuIGJlIG5lc3RlZC4KKy0gKHZvaWQpZGlzYWJs
ZUZyYW1lU2l6ZVVwZGF0ZXM7CisvLyBJbW1lZGlhdGVseSB1cGRhdGVzIHRoZSBzaXplIG9mIHRo
ZSBwYWdlIHRvIG1hdGNoIFdLVmlldydzIGZyYW1lIHNpemUKKy8vIGFuZCBhbGxvd3Mgc3Vic2Vx
dWVudCB1cGRhdGVzIGFzIHRoZSBmcmFtZSBzaXplIGlzIHNldC4gQ2FsbHMgY2FuIGJlIG5lc3Rl
ZC4KKy0gKHZvaWQpZW5hYmxlRnJhbWVTaXplVXBkYXRlczsKKy0gKEJPT0wpZnJhbWVTaXplVXBk
YXRlc0Rpc2FibGVkOworCistICh2b2lkKXBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRDdXJyZW50
TW91c2VMb2NhdGlvbjsKKysgKHZvaWQpaGlkZVdvcmREZWZpbml0aW9uV2luZG93OworCitAcHJv
cGVydHkgKHJlYWR3cml0ZSkgQ0dGbG9hdCBtaW5pbXVtTGF5b3V0V2lkdGg7CitAcHJvcGVydHkg
KHJlYWR3cml0ZSkgQ0dGbG9hdCBtaW5pbXVtV2lkdGhGb3JBdXRvTGF5b3V0OworQHByb3BlcnR5
IChyZWFkd3JpdGUpIE5TU2l6ZSBtaW5pbXVtU2l6ZUZvckF1dG9MYXlvdXQ7CitAcHJvcGVydHkg
KHJlYWR3cml0ZSkgQk9PTCBzaG91bGRDbGlwVG9WaXNpYmxlUmVjdDsKK0Bwcm9wZXJ0eSAocmVh
ZHdyaXRlKSBCT09MIHNob3VsZEV4cGFuZFRvVmlld0hlaWdodEZvckF1dG9MYXlvdXQ7CitAcHJv
cGVydHkgKHJlYWRvbmx5LCBnZXR0ZXI9aXNVc2luZ1VJU2lkZUNvbXBvc2l0aW5nKSBCT09MIHVz
aW5nVUlTaWRlQ29tcG9zaXRpbmc7CisKK0Bwcm9wZXJ0eShjb3B5LCBub25hdG9taWMpIE5TQ29s
b3IgKnVuZGVybGF5Q29sb3I7CisKKy0gKE5TVmlldyopZnVsbFNjcmVlblBsYWNlaG9sZGVyVmll
dzsKKy0gKE5TV2luZG93KiljcmVhdGVGdWxsU2NyZWVuV2luZG93OworCistICh2b2lkKWJlZ2lu
RGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlczsKKy0gKHZvaWQpZW5kRGVmZXJyaW5nVmlld0lu
V2luZG93Q2hhbmdlczsKKy0gKHZvaWQpZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlc1N5
bmM7CistIChCT09MKWlzRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlczsKKworLSAoQk9PTCl3
aW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkOworLSAodm9pZClzZXRXaW5kb3dPY2NsdXNp
b25EZXRlY3Rpb25FbmFibGVkOihCT09MKWZsYWc7CisKKy0gKHZvaWQpZm9yY2VBc3luY0RyYXdp
bmdBcmVhU2l6ZVVwZGF0ZTooTlNTaXplKXNpemU7CistICh2b2lkKXdhaXRGb3JBc3luY0RyYXdp
bmdBcmVhU2l6ZVVwZGF0ZTsKKworI2VuZGlmCisKK0BlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV2ViS2l0Mi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV2ViS2l0Mi5oCShyZXZpc2lvbiAxNTk4NzMpCShmcm9t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dlYktpdDIuaDoxNTk4NzMpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dlYktpdDIuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0Mi9XS0Jyb3dz
aW5nQ29udGV4dENvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYktpdDIvV0tCcm93c2luZ0NvbnRl
eHRHcm91cC5oPgorI2ltcG9ydCA8V2ViS2l0Mi9XS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0
ZS5oPgorI2ltcG9ydCA8V2ViS2l0Mi9XS0Jyb3dzaW5nQ29udGV4dFBvbGljeURlbGVnYXRlLmg+
CisjaW1wb3J0IDxXZWJLaXQyL1dLQ29ubmVjdGlvbi5oPgorI2ltcG9ydCA8V2ViS2l0Mi9XS0Zv
dW5kYXRpb24uaD4KKyNpbXBvcnQgPFdlYktpdDIvV0tQcm9jZXNzR3JvdXAuaD4KKyNpbXBvcnQg
PFdlYktpdDIvV0tWaWV3Lmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIuaAkocmV2
aXNpb24gMTU5ODczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93
c2luZ0NvbnRleHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTM2ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLSNpbXBvcnQg
PFdlYktpdDIvV0tCcm93c2luZ0NvbnRleHRHcm91cC5oPgotI2ltcG9ydCA8V2ViS2l0Mi9XS0Zv
dW5kYXRpb24uaD4KLSNpbXBvcnQgPFdlYktpdDIvV0tQcm9jZXNzR3JvdXAuaD4KLQotI2lmIFdL
X0FQSV9FTkFCTEVECi0KLUBjbGFzcyBXS0JhY2tGb3J3YXJkTGlzdDsKLUBjbGFzcyBXS0JhY2tG
b3J3YXJkTGlzdEl0ZW07Ci1AcHJvdG9jb2wgV0tCcm93c2luZ0NvbnRleHRIaXN0b3J5RGVsZWdh
dGU7Ci1AcHJvdG9jb2wgV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGU7Ci1AcHJvdG9jb2wg
V0tCcm93c2luZ0NvbnRleHRQb2xpY3lEZWxlZ2F0ZTsKLQotV0tfQVBJX0NMQVNTCi1AaW50ZXJm
YWNlIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciA6IE5TT2JqZWN0Ci0KLUBwcm9wZXJ0eSAo
cmVhZG9ubHkpIFdLUHJvY2Vzc0dyb3VwICpwcm9jZXNzR3JvdXA7Ci1AcHJvcGVydHkgKHJlYWRv
bmx5KSBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwICpicm93c2luZ0NvbnRleHRHcm91cDsKLQotI3By
YWdtYSBtYXJrIERlbGVnYXRlcwotCi1AcHJvcGVydHkgKGFzc2lnbikgaWQgPFdLQnJvd3NpbmdD
b250ZXh0TG9hZERlbGVnYXRlPiBsb2FkRGVsZWdhdGU7Ci1AcHJvcGVydHkgKGFzc2lnbikgaWQg
PFdLQnJvd3NpbmdDb250ZXh0UG9saWN5RGVsZWdhdGU+IHBvbGljeURlbGVnYXRlOwotQHByb3Bl
cnR5IChhc3NpZ24pIGlkIDxXS0Jyb3dzaW5nQ29udGV4dEhpc3RvcnlEZWxlZ2F0ZT4gaGlzdG9y
eURlbGVnYXRlOwotCi0jcHJhZ21hIG1hcmsgTG9hZGluZwotCi0rICh2b2lkKXJlZ2lzdGVyU2No
ZW1lRm9yQ3VzdG9tUHJvdG9jb2w6KE5TU3RyaW5nICopc2NoZW1lOwotKyAodm9pZCl1bnJlZ2lz
dGVyU2NoZW1lRm9yQ3VzdG9tUHJvdG9jb2w6KE5TU3RyaW5nICopc2NoZW1lOwotCi0vKiBMb2Fk
IGEgcmVxdWVzdC4gVGhpcyBpcyBvbmx5IHZhbGlkIGZvciByZXF1ZXN0cyBvZiBub24tZmlsZTog
VVJMcy4gUGFzc2luZyBhCi0gICBmaWxlOiBVUkwgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24uICov
Ci0tICh2b2lkKWxvYWRSZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1ZXN0OwotLSAodm9pZCls
b2FkUmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdCB1c2VyRGF0YTooaWQpdXNlckRhdGE7
Ci0KLS8qIExvYWQgYSBmaWxlOiBVUkwuIE9wZW5zIHRoZSBzYW5kYm94IG9ubHkgZm9yIGZpbGVz
IHdpdGhpbiBhbGxvd2VkRGlyZWN0b3J5LgotICAgIC0gUGFzc2luZyBhIG5vbi1maWxlOiBVUkwg
dG8gZWl0aGVyIHBhcmFtZXRlciB3aWxsIHlpZWxkIGFuIGV4Y2VwdGlvbi4KLSAgICAtIFBhc3Np
bmcgbmlsIGFzIHRoZSBhbGxvd2VkRGlyZWN0b3J5IHdpbGwgb3BlbiB0aGUgZW50aXJlIGZpbGUt
c3lzdGVtIGZvcgotICAgICAgcmVhZGluZy4KLSovCi0tICh2b2lkKWxvYWRGaWxlVVJMOihOU1VS
TCAqKVVSTCByZXN0cmljdFRvRmlsZXNXaXRoaW46KE5TVVJMICopYWxsb3dlZERpcmVjdG9yeTsK
LS0gKHZvaWQpbG9hZEZpbGVVUkw6KE5TVVJMICopVVJMIHJlc3RyaWN0VG9GaWxlc1dpdGhpbjoo
TlNVUkwgKilhbGxvd2VkRGlyZWN0b3J5IHVzZXJEYXRhOihpZCl1c2VyRGF0YTsKLQotLyogTG9h
ZCBhIHBhZ2UgdXNpbmcgdGhlIHBhc3NlZCBpbiBzdHJpbmcgYXMgaXRzIGNvbnRlbnRzLiAqLwot
LSAodm9pZClsb2FkSFRNTFN0cmluZzooTlNTdHJpbmcgKilIVE1MU3RyaW5nIGJhc2VVUkw6KE5T
VVJMICopYmFzZVVSTDsKLS0gKHZvaWQpbG9hZEhUTUxTdHJpbmc6KE5TU3RyaW5nICopSFRNTFN0
cmluZyBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwgdXNlckRhdGE6KGlkKXVzZXJEYXRhOwotCi0v
KiBMb2FkIGEgcGFnZSB1c2luZyB0aGUgcGFzc2VkIGluIGRhdGEgYXMgaXRzIGNvbnRlbnRzLiAq
LwotLSAodm9pZClsb2FkRGF0YTooTlNEYXRhICopZGF0YSBNSU1FVHlwZTooTlNTdHJpbmcgKilN
SU1FVHlwZSB0ZXh0RW5jb2RpbmdOYW1lOihOU1N0cmluZyAqKWVuY29kaW5nTmFtZSBiYXNlVVJM
OihOU1VSTCAqKWJhc2VVUkw7Ci0tICh2b2lkKWxvYWREYXRhOihOU0RhdGEgKilkYXRhIE1JTUVU
eXBlOihOU1N0cmluZyAqKU1JTUVUeXBlIHRleHRFbmNvZGluZ05hbWU6KE5TU3RyaW5nICopZW5j
b2RpbmdOYW1lIGJhc2VVUkw6KE5TVVJMICopYmFzZVVSTCB1c2VyRGF0YTooaWQpdXNlckRhdGE7
Ci0KLS8qIFN0b3BzIHRoZSBsb2FkIGFzc29jaWF0ZWQgd2l0aCB0aGUgYWN0aXZlIFVSTC4gKi8K
LS0gKHZvaWQpc3RvcExvYWRpbmc7Ci0KLS8qIFJlbG9hZCB0aGUgY3VycmVudGx5IGFjdGl2ZSBV
UkwuICovCi0tICh2b2lkKXJlbG9hZDsKLQotLyogUmVsb2FkIHRoZSBjdXJyZW50bHkgYWN0aXZl
IFVSTCwgYnlwYXNzaW5nIGNhY2hlcy4gKi8KLS0gKHZvaWQpcmVsb2FkRnJvbU9yaWdpbjsKLQot
Ci0jcHJhZ21hIG1hcmsgQmFjay9Gb3J3YXJkCi0KLS8qIEdvIHRvIHRoZSBuZXh0IHBhZ2UgaW4g
dGhlIGJhY2svZm9yd2FyZCBsaXN0LiAqLwotLSAodm9pZClnb0ZvcndhcmQ7Ci0KLS8qIFdoZXRo
ZXIgdGhlcmUgaXMgYSBuZXh0IHBhZ2UgaW4gdGhlIGJhY2svZm9yd2FyZCBsaXN0LiAqLwotQHBy
b3BlcnR5KHJlYWRvbmx5KSBCT09MIGNhbkdvRm9yd2FyZDsKLQotLyogR28gdG8gdGhlIHByZXZp
b3VzIHBhZ2UgaW4gdGhlIGJhY2svZm9yd2FyZCBsaXN0LiAqLwotLSAodm9pZClnb0JhY2s7Ci0K
LS8qIFdoZXRoZXIgdGhlcmUgaXMgYSBwcmV2aW91cyBwYWdlIGluIHRoZSBiYWNrL2ZvcndhcmQg
bGlzdC4gKi8KLUBwcm9wZXJ0eShyZWFkb25seSkgQk9PTCBjYW5Hb0JhY2s7Ci0KLS0gKHZvaWQp
Z29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW06KFdLQmFja0ZvcndhcmRMaXN0SXRlbSAqKWl0ZW07Ci0K
LUBwcm9wZXJ0eShyZWFkb25seSkgV0tCYWNrRm9yd2FyZExpc3QgKmJhY2tGb3J3YXJkTGlzdDsK
LQotI3ByYWdtYSBtYXJrIEFjdGl2ZSBMb2FkIEludHJvc3BlY3Rpb24KLQotLyogVVJMIGZvciB0
aGUgYWN0aXZlIGxvYWQuIFRoaXMgaXMgdGhlIFVSTCB0aGF0IHNob3VsZCBiZSBzaG93biBpbiB1
c2VyIGludGVyZmFjZS4gKi8KLUBwcm9wZXJ0eShyZWFkb25seSkgTlNVUkwgKmFjdGl2ZVVSTDsK
LQotLyogVVJMIGZvciBhIHJlcXVlc3QgdGhhdCBoYXMgYmVlbiBzZW50LCBidXQgbm8gcmVzcG9u
c2UgaGFzIGJlZW4gcmVjZWl2ZWQgeWV0LiAqLwotQHByb3BlcnR5KHJlYWRvbmx5KSBOU1VSTCAq
cHJvdmlzaW9uYWxVUkw7Ci0KLS8qIFVSTCBmb3IgYSByZXF1ZXN0IHRoYXQgaGFzIGJlZW4gcmVj
ZWl2ZWQsIGFuZCBpcyBub3cgYmVpbmcgdXNlZC4gKi8KLUBwcm9wZXJ0eShyZWFkb25seSkgTlNV
UkwgKmNvbW1pdHRlZFVSTDsKLQotQHByb3BlcnR5KHJlYWRvbmx5KSBOU1VSTCAqdW5yZWFjaGFi
bGVVUkw7Ci0KLUBwcm9wZXJ0eShyZWFkb25seSkgZG91YmxlIGVzdGltYXRlZFByb2dyZXNzOwot
Ci0jcHJhZ21hIG1hcmsgQWN0aXZlIERvY3VtZW50IEludHJvc3BlY3Rpb24KLQotLyogVGl0bGUg
b2YgdGhlIGRvY3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgYWN0aXZlIGxvYWQuICovCi1AcHJv
cGVydHkocmVhZG9ubHkpIE5TU3RyaW5nICp0aXRsZTsKLQotCi0jcHJhZ21hIG1hcmsgWm9vbQot
Ci0vKiBTZXRzIHRoZSB0ZXh0IHpvb20gZm9yIHRoZSBhY3RpdmUgVVJMLiAqLwotQHByb3BlcnR5
IENHRmxvYXQgdGV4dFpvb207Ci0KLS8qIFNldHMgdGhlIHRleHQgem9vbSBmb3IgdGhlIGFjdGl2
ZSBVUkwuICovCi1AcHJvcGVydHkgQ0dGbG9hdCBwYWdlWm9vbTsKLQotQGVuZAotCi0jZW5kaWYg
Ly8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIubW0JKHJl
dmlzaW9uIDE1OTg3MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJv
d3NpbmdDb250ZXh0Q29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw2OTIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV0tCcm93c2luZ0Nv
bnRleHRDb250cm9sbGVySW50ZXJuYWwuaCIKLQotI2lmIFdLX0FQSV9FTkFCTEVECi0KLSNpbXBv
cnQgIk9iakNPYmplY3RHcmFwaC5oIgotI2ltcG9ydCAiV0tCYWNrRm9yd2FyZExpc3RJbnRlcm5h
bC5oIgotI2ltcG9ydCAiV0tCYWNrRm9yd2FyZExpc3RJdGVtSW50ZXJuYWwuaCIKLSNpbXBvcnQg
IldLRXJyb3JDRi5oIgotI2ltcG9ydCAiV0tGcmFtZS5oIgotI2ltcG9ydCAiV0tGcmFtZVBvbGlj
eUxpc3RlbmVyLmgiCi0jaW1wb3J0ICJXS05TQXJyYXkuaCIKLSNpbXBvcnQgIldLTlNVUkxFeHRy
YXMuaCIKLSNpbXBvcnQgIldLUGFnZVByaXZhdGUuaCIKLSNpbXBvcnQgIldLUmV0YWluUHRyLmgi
Ci0jaW1wb3J0ICJXS1N0cmluZ0NGLmgiCi0jaW1wb3J0ICJXS1VSTENGLmgiCi0jaW1wb3J0ICJX
S1VSTFJlcXVlc3QuaCIKLSNpbXBvcnQgIldLVVJMUmVxdWVzdE5TLmgiCi0jaW1wb3J0ICJXS1VS
TFJlc3BvbnNlLmgiCi0jaW1wb3J0ICJXS1VSTFJlc3BvbnNlTlMuaCIKLSNpbXBvcnQgIldlYkNv
bnRleHQuaCIKLSNpbXBvcnQgIldlYkRhdGEuaCIKLSNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgot
I2ltcG9ydCA8d3RmL09iamNSdW50aW1lRXh0cmFzLmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRy
Lmg+Ci0KLSNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5oIgotI2ltcG9y
dCAiV0tCcm93c2luZ0NvbnRleHRIYW5kbGVJbnRlcm5hbC5oIgotI2ltcG9ydCAiV0tCcm93c2lu
Z0NvbnRleHRMb2FkRGVsZWdhdGUuaCIKLSNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0UG9saWN5
RGVsZWdhdGUuaCIKLSNpbXBvcnQgIldLUHJvY2Vzc0dyb3VwSW50ZXJuYWwuaCIKLQotdXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKLQotY2xhc3MgUGFnZUxvYWRTdGF0ZU9ic2VydmVyIDogcHVibGlj
IFBhZ2VMb2FkU3RhdGU6Ok9ic2VydmVyIHsKLXB1YmxpYzoKLSAgICBQYWdlTG9hZFN0YXRlT2Jz
ZXJ2ZXIoV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpjb250cm9sbGVyKQotICAgICAgICA6
IG1fY29udHJvbGxlcihjb250cm9sbGVyKQotICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
dmlydHVhbCB2b2lkIHdpbGxDaGFuZ2VUaXRsZSgpIE9WRVJSSURFCi0gICAgewotICAgICAgICBb
bV9jb250cm9sbGVyIHdpbGxDaGFuZ2VWYWx1ZUZvcktleTpAInRpdGxlIl07Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVRpdGxlKCkgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAg
IFttX2NvbnRyb2xsZXIgZGlkQ2hhbmdlVmFsdWVGb3JLZXk6QCJ0aXRsZSJdOwotICAgIH0KLQot
ICAgIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqbV9jb250cm9sbGVyOwotfTsKLQotc3Rh
dGljIGlubGluZSBOU1N0cmluZyAqYXV0b3JlbGVhc2VkKFdLU3RyaW5nUmVmIHN0cmluZykKLXsK
LSAgICByZXR1cm4gc3RyaW5nID8gQ0ZCcmlkZ2luZ1JlbGVhc2UoV0tTdHJpbmdDb3B5Q0ZTdHJp
bmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYWRvcHRXSyhzdHJpbmcpLmdldCgpKSkgOiBuaWw7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgTlNVUkwgKmF1dG9yZWxlYXNlZChXS1VSTFJlZiB1cmwpCi17Ci0g
ICAgcmV0dXJuIHVybCA/IENGQnJpZGdpbmdSZWxlYXNlKFdLVVJMQ29weUNGVVJMKGtDRkFsbG9j
YXRvckRlZmF1bHQsIGFkb3B0V0sodXJsKS5nZXQoKSkpIDogbmlsOwotfQotCi1OU1N0cmluZyAq
IGNvbnN0IFdLQWN0aW9uSXNNYWluRnJhbWVLZXkgPSBAIldLQWN0aW9uSXNNYWluRnJhbWVLZXki
OwotTlNTdHJpbmcgKiBjb25zdCBXS0FjdGlvbk5hdmlnYXRpb25UeXBlS2V5ID0gQCJXS0FjdGlv
bk5hdmlnYXRpb25UeXBlS2V5IjsKLU5TU3RyaW5nICogY29uc3QgV0tBY3Rpb25Nb3VzZUJ1dHRv
bktleSA9IEAiV0tBY3Rpb25Nb3VzZUJ1dHRvbktleSI7Ci1OU1N0cmluZyAqIGNvbnN0IFdLQWN0
aW9uTW9kaWZpZXJGbGFnc0tleSA9IEAiV0tBY3Rpb25Nb2RpZmllckZsYWdzS2V5IjsKLU5TU3Ry
aW5nICogY29uc3QgV0tBY3Rpb25VUkxSZXF1ZXN0S2V5ID0gQCJXS0FjdGlvblVSTFJlcXVlc3RL
ZXkiOwotTlNTdHJpbmcgKiBjb25zdCBXS0FjdGlvblVSTFJlc3BvbnNlS2V5ID0gQCJXS0FjdGlv
blVSTFJlc3BvbnNlS2V5IjsKLU5TU3RyaW5nICogY29uc3QgV0tBY3Rpb25GcmFtZU5hbWVLZXkg
PSBAIldLQWN0aW9uRnJhbWVOYW1lS2V5IjsKLU5TU3RyaW5nICogY29uc3QgV0tBY3Rpb25Pcmln
aW5hdGluZ0ZyYW1lVVJMS2V5ID0gQCJXS0FjdGlvbk9yaWdpbmF0aW5nRnJhbWVVUkxLZXkiOwot
TlNTdHJpbmcgKiBjb25zdCBXS0FjdGlvbkNhblNob3dNSU1FVHlwZUtleSA9IEAiV0tBY3Rpb25D
YW5TaG93TUlNRVR5cGVLZXkiOwotCi1AaW1wbGVtZW50YXRpb24gV0tCcm93c2luZ0NvbnRleHRD
b250cm9sbGVyIHsKLSAgICAvLyBVbmRlcmx5aW5nIFdLUGFnZVJlZi4KLSAgICBXS1JldGFpblB0
cjxXS1BhZ2VSZWY+IF9wYWdlUmVmOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFBhZ2VMb2FkU3Rh
dGVPYnNlcnZlcj4gX3BhZ2VMb2FkU3RhdGVPYnNlcnZlcjsKLX0KLQotLSAodm9pZClkZWFsbG9j
Ci17Ci0gICAgdG9JbXBsKF9wYWdlUmVmLmdldCgpKS0+cGFnZUxvYWRTdGF0ZSgpLnJlbW92ZU9i
c2VydmVyKCpfcGFnZUxvYWRTdGF0ZU9ic2VydmVyKTsKLSAgICBXS1BhZ2VTZXRQYWdlTG9hZGVy
Q2xpZW50KF9wYWdlUmVmLmdldCgpLCBudWxscHRyKTsKLSAgICBXS1BhZ2VTZXRQYWdlUG9saWN5
Q2xpZW50KF9wYWdlUmVmLmdldCgpLCBudWxscHRyKTsKLQotICAgIFtzdXBlciBkZWFsbG9jXTsK
LX0KLQotLSAoV0tQcm9jZXNzR3JvdXAgKilwcm9jZXNzR3JvdXAKLXsKLSAgICBXZWJDb250ZXh0
KiBjb250ZXh0ID0gdG9JbXBsKF9wYWdlUmVmLmdldCgpKS0+cHJvY2VzcygpLT5jb250ZXh0KCk7
Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiB3cmFw
cGVyKCpjb250ZXh0KTsKLX0KLQotLSAoV0tCcm93c2luZ0NvbnRleHRHcm91cCAqKWJyb3dzaW5n
Q29udGV4dEdyb3VwCi17Ci0gICAgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXAgPSB0b0ltcGwoX3Bh
Z2VSZWYuZ2V0KCkpLT5wYWdlR3JvdXAoKTsKLSAgICBpZiAoIXBhZ2VHcm91cCkKLSAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICByZXR1cm4gd3JhcHBlcigqcGFnZUdyb3VwKTsKLX0KLQotLSAoV0tQ
YWdlUmVmKV9wYWdlUmVmCi17Ci0gICAgcmV0dXJuIF9wYWdlUmVmLmdldCgpOwotfQotCi0jcHJh
Z21hIG1hcmsgTG9hZGluZwotCi0rICh2b2lkKXJlZ2lzdGVyU2NoZW1lRm9yQ3VzdG9tUHJvdG9j
b2w6KE5TU3RyaW5nICopc2NoZW1lCi17Ci0gICAgaWYgKCFzY2hlbWUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIE5TU3RyaW5nICpsb3dlcmNhc2VTY2hlbWUgPSBbc2NoZW1lIGxvd2VyY2FzZVN0
cmluZ107Ci0gICAgW1tXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgY3VzdG9tU2NoZW1lc10g
YWRkT2JqZWN0Omxvd2VyY2FzZVNjaGVtZV07Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBk
ZWZhdWx0Q2VudGVyXSBwb3N0Tm90aWZpY2F0aW9uTmFtZTpTY2hlbWVGb3JDdXN0b21Qcm90b2Nv
bFJlZ2lzdGVyZWROb3RpZmljYXRpb25OYW1lIG9iamVjdDpsb3dlcmNhc2VTY2hlbWVdOwotfQot
Ci0rICh2b2lkKXVucmVnaXN0ZXJTY2hlbWVGb3JDdXN0b21Qcm90b2NvbDooTlNTdHJpbmcgKilz
Y2hlbWUKLXsKLSAgICBpZiAoIXNjaGVtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNTdHJp
bmcgKmxvd2VyY2FzZVNjaGVtZSA9IFtzY2hlbWUgbG93ZXJjYXNlU3RyaW5nXTsKLSAgICBbW1dL
QnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciBjdXN0b21TY2hlbWVzXSByZW1vdmVPYmplY3Q6bG93
ZXJjYXNlU2NoZW1lXTsKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJd
IHBvc3ROb3RpZmljYXRpb25OYW1lOlNjaGVtZUZvckN1c3RvbVByb3RvY29sVW5yZWdpc3RlcmVk
Tm90aWZpY2F0aW9uTmFtZSBvYmplY3Q6bG93ZXJjYXNlU2NoZW1lXTsKLX0KLQotLSAodm9pZCls
b2FkUmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdAotewotICAgIFtzZWxmIGxvYWRSZXF1
ZXN0OnJlcXVlc3QgdXNlckRhdGE6bmlsXTsKLX0KLQotLSAodm9pZClsb2FkUmVxdWVzdDooTlNV
UkxSZXF1ZXN0ICopcmVxdWVzdCB1c2VyRGF0YTooaWQpdXNlckRhdGEKLXsKLSAgICBXS1JldGFp
blB0cjxXS1VSTFJlcXVlc3RSZWY+IHdrUmVxdWVzdCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q3Jl
YXRlV2l0aE5TVVJMUmVxdWVzdChyZXF1ZXN0KSk7Ci0KLSAgICBSZWZQdHI8T2JqQ09iamVjdEdy
YXBoPiB3a1VzZXJEYXRhOwotICAgIGlmICh1c2VyRGF0YSkKLSAgICAgICAgd2tVc2VyRGF0YSA9
IE9iakNPYmplY3RHcmFwaDo6Y3JlYXRlKHVzZXJEYXRhKTsKLQotICAgIFdLUGFnZUxvYWRVUkxS
ZXF1ZXN0V2l0aFVzZXJEYXRhKF9wYWdlUmVmLmdldCgpLCB3a1JlcXVlc3QuZ2V0KCksIChXS1R5
cGVSZWYpd2tVc2VyRGF0YS5nZXQoKSk7Ci19Ci0KLS0gKHZvaWQpbG9hZEZpbGVVUkw6KE5TVVJM
ICopVVJMIHJlc3RyaWN0VG9GaWxlc1dpdGhpbjooTlNVUkwgKilhbGxvd2VkRGlyZWN0b3J5Ci17
Ci0gICAgW3NlbGYgbG9hZEZpbGVVUkw6VVJMIHJlc3RyaWN0VG9GaWxlc1dpdGhpbjphbGxvd2Vk
RGlyZWN0b3J5IHVzZXJEYXRhOm5pbF07Ci19Ci0KLS0gKHZvaWQpbG9hZEZpbGVVUkw6KE5TVVJM
ICopVVJMIHJlc3RyaWN0VG9GaWxlc1dpdGhpbjooTlNVUkwgKilhbGxvd2VkRGlyZWN0b3J5IHVz
ZXJEYXRhOihpZCl1c2VyRGF0YQotewotICAgIGlmICghW1VSTCBpc0ZpbGVVUkxdIHx8IChhbGxv
d2VkRGlyZWN0b3J5ICYmICFbYWxsb3dlZERpcmVjdG9yeSBpc0ZpbGVVUkxdKSkKLSAgICAgICAg
W05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIkF0
dGVtcHRlZCB0byBsb2FkIGEgbm9uLWZpbGUgVVJMIl07Ci0KLSAgICBXS1JldGFpblB0cjxXS1VS
TFJlZj4gd2tVUkwgPSBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aENGVVJMKChDRlVSTFJlZilVUkwp
KTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tBbGxvd2VkRGlyZWN0b3J5ID0gYWRvcHRX
SyhXS1VSTENyZWF0ZVdpdGhDRlVSTCgoQ0ZVUkxSZWYpYWxsb3dlZERpcmVjdG9yeSkpOwotICAg
IAotICAgIFJlZlB0cjxPYmpDT2JqZWN0R3JhcGg+IHdrVXNlckRhdGE7Ci0gICAgaWYgKHVzZXJE
YXRhKQotICAgICAgICB3a1VzZXJEYXRhID0gT2JqQ09iamVjdEdyYXBoOjpjcmVhdGUodXNlckRh
dGEpOwotCi0gICAgV0tQYWdlTG9hZEZpbGVXaXRoVXNlckRhdGEoX3BhZ2VSZWYuZ2V0KCksIHdr
VVJMLmdldCgpLCB3a0FsbG93ZWREaXJlY3RvcnkuZ2V0KCksIChXS1R5cGVSZWYpd2tVc2VyRGF0
YS5nZXQoKSk7Ci19Ci0KLS0gKHZvaWQpbG9hZEhUTUxTdHJpbmc6KE5TU3RyaW5nICopSFRNTFN0
cmluZyBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwKLXsKLSAgICBbc2VsZiBsb2FkSFRNTFN0cmlu
ZzpIVE1MU3RyaW5nIGJhc2VVUkw6YmFzZVVSTCB1c2VyRGF0YTpuaWxdOwotfQotCi0tICh2b2lk
KWxvYWRIVE1MU3RyaW5nOihOU1N0cmluZyAqKUhUTUxTdHJpbmcgYmFzZVVSTDooTlNVUkwgKili
YXNlVVJMIHVzZXJEYXRhOihpZCl1c2VyRGF0YQotewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB3a0hUTUxTdHJpbmc7Ci0gICAgaWYgKEhUTUxTdHJpbmcpCi0gICAgICAgIHdrSFRNTFN0
cmluZyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKUhU
TUxTdHJpbmcpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a0Jhc2VVUkw7Ci0gICAg
aWYgKGJhc2VVUkwpCi0gICAgICAgIHdrQmFzZVVSTCA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRo
Q0ZVUkwoKENGVVJMUmVmKWJhc2VVUkwpKTsKLQotICAgIFJlZlB0cjxPYmpDT2JqZWN0R3JhcGg+
IHdrVXNlckRhdGE7Ci0gICAgaWYgKHVzZXJEYXRhKQotICAgICAgICB3a1VzZXJEYXRhID0gT2Jq
Q09iamVjdEdyYXBoOjpjcmVhdGUodXNlckRhdGEpOwotCi0gICAgV0tQYWdlTG9hZEhUTUxTdHJp
bmdXaXRoVXNlckRhdGEoX3BhZ2VSZWYuZ2V0KCksIHdrSFRNTFN0cmluZy5nZXQoKSwgd2tCYXNl
VVJMLmdldCgpLCAoV0tUeXBlUmVmKXdrVXNlckRhdGEuZ2V0KCkpOwotfQotCi0tICh2b2lkKWxv
YWREYXRhOihOU0RhdGEgKilkYXRhIE1JTUVUeXBlOihOU1N0cmluZyAqKU1JTUVUeXBlIHRleHRF
bmNvZGluZ05hbWU6KE5TU3RyaW5nICopZW5jb2RpbmdOYW1lIGJhc2VVUkw6KE5TVVJMICopYmFz
ZVVSTAotewotICAgIFtzZWxmIGxvYWREYXRhOmRhdGEgTUlNRVR5cGU6TUlNRVR5cGUgdGV4dEVu
Y29kaW5nTmFtZTplbmNvZGluZ05hbWUgYmFzZVVSTDpiYXNlVVJMIHVzZXJEYXRhOm5pbF07Ci19
Ci0KLXN0YXRpYyB2b2lkIHJlbGVhc2VOU0RhdGEodW5zaWduZWQgY2hhciosIGNvbnN0IHZvaWQq
IGRhdGEpCi17Ci0gICAgWyhOU0RhdGEgKilkYXRhIHJlbGVhc2VdOwotfQotCi0tICh2b2lkKWxv
YWREYXRhOihOU0RhdGEgKilkYXRhIE1JTUVUeXBlOihOU1N0cmluZyAqKU1JTUVUeXBlIHRleHRF
bmNvZGluZ05hbWU6KE5TU3RyaW5nICopZW5jb2RpbmdOYW1lIGJhc2VVUkw6KE5TVVJMICopYmFz
ZVVSTCB1c2VyRGF0YTooaWQpdXNlckRhdGEKLXsKLSAgICBSZWZQdHI8V2ViRGF0YT4gd2tEYXRh
OwotICAgIGlmIChkYXRhKSB7Ci0gICAgICAgIFtkYXRhIHJldGFpbl07Ci0gICAgICAgIHdrRGF0
YSA9IFdlYkRhdGE6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKChjb25zdCB1bnNpZ25lZCBjaGFyKilb
ZGF0YSBieXRlc10sIFtkYXRhIGxlbmd0aF0sIHJlbGVhc2VOU0RhdGEsIGRhdGEpOwotICAgIH0K
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a01JTUVUeXBlOwotICAgIGlmIChNSU1F
VHlwZSkKLSAgICAgICAgd2tNSU1FVHlwZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoQ0ZT
dHJpbmcoKENGU3RyaW5nUmVmKU1JTUVUeXBlKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gd2tFbmNvZGluZ05hbWU7Ci0gICAgaWYgKGVuY29kaW5nTmFtZSkKLSAgICAgICAgd2tF
bmNvZGluZ05hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmlu
Z1JlZillbmNvZGluZ05hbWUpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a0Jhc2VV
Ukw7Ci0gICAgaWYgKGJhc2VVUkwpCi0gICAgICAgIHdrQmFzZVVSTCA9IGFkb3B0V0soV0tVUkxD
cmVhdGVXaXRoQ0ZVUkwoKENGVVJMUmVmKWJhc2VVUkwpKTsKLQotICAgIFJlZlB0cjxPYmpDT2Jq
ZWN0R3JhcGg+IHdrVXNlckRhdGE7Ci0gICAgaWYgKHVzZXJEYXRhKQotICAgICAgICB3a1VzZXJE
YXRhID0gT2JqQ09iamVjdEdyYXBoOjpjcmVhdGUodXNlckRhdGEpOwotCi0gICAgV0tQYWdlTG9h
ZERhdGFXaXRoVXNlckRhdGEoX3BhZ2VSZWYuZ2V0KCksIHRvQVBJKHdrRGF0YS5nZXQoKSksIHdr
TUlNRVR5cGUuZ2V0KCksIHdrRW5jb2RpbmdOYW1lLmdldCgpLCB3a0Jhc2VVUkwuZ2V0KCksIChX
S1R5cGVSZWYpd2tVc2VyRGF0YS5nZXQoKSk7Ci19Ci0KLS0gKHZvaWQpc3RvcExvYWRpbmcKLXsK
LSAgICBXS1BhZ2VTdG9wTG9hZGluZyhfcGFnZVJlZi5nZXQoKSk7Ci19Ci0KLS0gKHZvaWQpcmVs
b2FkCi17Ci0gICAgV0tQYWdlUmVsb2FkKF9wYWdlUmVmLmdldCgpKTsKLX0KLQotLSAodm9pZCly
ZWxvYWRGcm9tT3JpZ2luCi17Ci0gICAgV0tQYWdlUmVsb2FkRnJvbU9yaWdpbihfcGFnZVJlZi5n
ZXQoKSk7Ci19Ci0KLSNwcmFnbWEgbWFyayBCYWNrL0ZvcndhcmQKLQotLSAodm9pZClnb0Zvcndh
cmQKLXsKLSAgICBXS1BhZ2VHb0ZvcndhcmQoX3BhZ2VSZWYuZ2V0KCkpOwotfQotCi0tIChCT09M
KWNhbkdvRm9yd2FyZAotewotICAgIHJldHVybiBXS1BhZ2VDYW5Hb0ZvcndhcmQoX3BhZ2VSZWYu
Z2V0KCkpOwotfQotCi0tICh2b2lkKWdvQmFjawotewotICAgIFdLUGFnZUdvQmFjayhfcGFnZVJl
Zi5nZXQoKSk7Ci19Ci0KLS0gKEJPT0wpY2FuR29CYWNrCi17Ci0gICAgcmV0dXJuIFdLUGFnZUNh
bkdvQmFjayhfcGFnZVJlZi5nZXQoKSk7Ci19Ci0KLS0gKHZvaWQpZ29Ub0JhY2tGb3J3YXJkTGlz
dEl0ZW06KFdLQmFja0ZvcndhcmRMaXN0SXRlbSAqKWl0ZW0KLXsKLSAgICB0b0ltcGwoX3BhZ2VS
ZWYuZ2V0KCkpLT5nb1RvQmFja0ZvcndhcmRJdGVtKCZpdGVtLl9pdGVtKTsKLX0KLQotLSAoV0tC
YWNrRm9yd2FyZExpc3QgKiliYWNrRm9yd2FyZExpc3QKLXsKLSAgICBXZWJCYWNrRm9yd2FyZExp
c3QqIGxpc3QgPSB0b0ltcGwoX3BhZ2VSZWYuZ2V0KCkpLT5iYWNrRm9yd2FyZExpc3QoKTsKLSAg
ICBpZiAoIWxpc3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gd3JhcHBlcigq
bGlzdCk7Ci19Ci0KLSNwcmFnbWEgbWFyayBBY3RpdmUgTG9hZCBJbnRyb3NwZWN0aW9uCi0KLS0g
KE5TVVJMICopYWN0aXZlVVJMCi17Ci0gICAgcmV0dXJuIGF1dG9yZWxlYXNlZChXS1BhZ2VDb3B5
QWN0aXZlVVJMKF9wYWdlUmVmLmdldCgpKSk7Ci19Ci0KLS0gKE5TVVJMICopcHJvdmlzaW9uYWxV
UkwKLXsKLSAgICByZXR1cm4gYXV0b3JlbGVhc2VkKFdLUGFnZUNvcHlQcm92aXNpb25hbFVSTChf
cGFnZVJlZi5nZXQoKSkpOwotfQotCi0tIChOU1VSTCAqKWNvbW1pdHRlZFVSTAotewotICAgIHJl
dHVybiBhdXRvcmVsZWFzZWQoV0tQYWdlQ29weUNvbW1pdHRlZFVSTChfcGFnZVJlZi5nZXQoKSkp
OwotfQotCi0tIChOU1VSTCAqKXVucmVhY2hhYmxlVVJMCi17Ci0gICAgcmV0dXJuIFtOU1VSTCBf
d2ViX1VSTFdpdGhXVEZTdHJpbmc6dG9JbXBsKF9wYWdlUmVmLmdldCgpKS0+cGFnZUxvYWRTdGF0
ZSgpLnVucmVhY2hhYmxlVVJMKCkgcmVsYXRpdmVUb1VSTDpuaWxdOwotfQotCi0tIChkb3VibGUp
ZXN0aW1hdGVkUHJvZ3Jlc3MKLXsKLSAgICByZXR1cm4gdG9JbXBsKF9wYWdlUmVmLmdldCgpKS0+
ZXN0aW1hdGVkUHJvZ3Jlc3MoKTsKLX0KLQotI3ByYWdtYSBtYXJrIEFjdGl2ZSBEb2N1bWVudCBJ
bnRyb3NwZWN0aW9uCi0KLS0gKE5TU3RyaW5nICopdGl0bGUKLXsKLSAgICByZXR1cm4gYXV0b3Jl
bGVhc2VkKFdLUGFnZUNvcHlUaXRsZShfcGFnZVJlZi5nZXQoKSkpOwotfQotCi0jcHJhZ21hIG1h
cmsgWm9vbQotCi0tIChDR0Zsb2F0KXRleHRab29tCi17Ci0gICAgcmV0dXJuIFdLUGFnZUdldFRl
eHRab29tRmFjdG9yKF9wYWdlUmVmLmdldCgpKTsKLX0KLQotLSAodm9pZClzZXRUZXh0Wm9vbToo
Q0dGbG9hdCl0ZXh0Wm9vbQotewotICAgIHJldHVybiBXS1BhZ2VTZXRUZXh0Wm9vbUZhY3Rvcihf
cGFnZVJlZi5nZXQoKSwgdGV4dFpvb20pOwotfQotCi0tIChDR0Zsb2F0KXBhZ2Vab29tCi17Ci0g
ICAgcmV0dXJuIFdLUGFnZUdldFBhZ2Vab29tRmFjdG9yKF9wYWdlUmVmLmdldCgpKTsKLX0KLQot
LSAodm9pZClzZXRQYWdlWm9vbTooQ0dGbG9hdClwYWdlWm9vbQotewotICAgIHJldHVybiBXS1Bh
Z2VTZXRQYWdlWm9vbUZhY3RvcihfcGFnZVJlZi5nZXQoKSwgcGFnZVpvb20pOwotfQotCi1zdGF0
aWMgdm9pZCBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBX
S0ZyYW1lUmVmIGZyYW1lLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCi17Ci0gICAgaWYgKCFXS0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmJyb3dzaW5nQ29udGV4dCA9
IChXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKiljbGllbnRJbmZvOwotICAgIGlmIChbYnJv
d3NpbmdDb250ZXh0LmxvYWREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGJy
b3dzaW5nQ29udGV4dENvbnRyb2xsZXJEaWRTdGFydFByb3Zpc2lvbmFsTG9hZDopXSkKLSAgICAg
ICAgW2Jyb3dzaW5nQ29udGV4dC5sb2FkRGVsZWdhdGUgYnJvd3NpbmdDb250ZXh0Q29udHJvbGxl
ckRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkOmJyb3dzaW5nQ29udGV4dF07Ci19Ci0KLXN0YXRpYyB2
b2lkIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdL
UGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgaWYgKCFXS0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmJy
b3dzaW5nQ29udGV4dCA9IChXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKiljbGllbnRJbmZv
OwotICAgIGlmIChbYnJvd3NpbmdDb250ZXh0LmxvYWREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJEaWRSZWNlaXZlU2VydmVyUmVk
aXJlY3RGb3JQcm92aXNpb25hbExvYWQ6KV0pCi0gICAgICAgIFticm93c2luZ0NvbnRleHQubG9h
ZERlbGVnYXRlIGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJEaWRSZWNlaXZlU2VydmVyUmVkaXJl
Y3RGb3JQcm92aXNpb25hbExvYWQ6YnJvd3NpbmdDb250ZXh0XTsKLX0KLQotc3RhdGljIHZvaWQg
ZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBX
S0ZyYW1lUmVmIGZyYW1lLCBXS0Vycm9yUmVmIGVycm9yLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgaWYgKCFXS0ZyYW1lSXNNYWluRnJhbWUoZnJh
bWUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIg
KmJyb3dzaW5nQ29udGV4dCA9IChXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKiljbGllbnRJ
bmZvOwotICAgIGlmIChbYnJvd3NpbmdDb250ZXh0LmxvYWREZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJEaWRGYWlsUHJvdmlzaW9u
YWxMb2FkOndpdGhFcnJvcjopXSkgewotICAgICAgICBSZXRhaW5QdHI8Q0ZFcnJvclJlZj4gY2ZF
cnJvciA9IGFkb3B0Q0YoV0tFcnJvckNvcHlDRkVycm9yKGtDRkFsbG9jYXRvckRlZmF1bHQsIGVy
cm9yKSk7Ci0gICAgICAgIFticm93c2luZ0NvbnRleHQubG9hZERlbGVnYXRlIGJyb3dzaW5nQ29u
dGV4dENvbnRyb2xsZXJEaWRGYWlsUHJvdmlzaW9uYWxMb2FkOmJyb3dzaW5nQ29udGV4dCB3aXRo
RXJyb3I6KE5TRXJyb3IgKiljZkVycm9yLmdldCgpXTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lk
IGRpZENvbW1pdExvYWRGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwg
V0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIGlmICgh
V0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV0tCcm93
c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93c2luZ0NvbnRleHQgPSAoV0tCcm93c2luZ0NvbnRl
eHRDb250cm9sbGVyICopY2xpZW50SW5mbzsKLSAgICBpZiAoW2Jyb3dzaW5nQ29udGV4dC5sb2Fk
RGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihicm93c2luZ0NvbnRleHRDb250
cm9sbGVyRGlkQ29tbWl0TG9hZDopXSkKLSAgICAgICAgW2Jyb3dzaW5nQ29udGV4dC5sb2FkRGVs
ZWdhdGUgYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckRpZENvbW1pdExvYWQ6YnJvd3NpbmdDb250
ZXh0XTsKLX0KLQotc3RhdGljIHZvaWQgZGlkRmluaXNoTG9hZEZvckZyYW1lKFdLUGFnZVJlZiBw
YWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pCi17Ci0gICAgaWYgKCFXS0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmJyb3dzaW5nQ29u
dGV4dCA9IChXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKiljbGllbnRJbmZvOwotICAgIGlm
IChbYnJvd3NpbmdDb250ZXh0LmxvYWREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJEaWRGaW5pc2hMb2FkOildKQotICAgICAgICBb
YnJvd3NpbmdDb250ZXh0LmxvYWREZWxlZ2F0ZSBicm93c2luZ0NvbnRleHRDb250cm9sbGVyRGlk
RmluaXNoTG9hZDpicm93c2luZ0NvbnRleHRdOwotfQotCi1zdGF0aWMgdm9pZCBkaWRGYWlsTG9h
ZFdpdGhFcnJvckZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS0Vy
cm9yUmVmIGVycm9yLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Ci17Ci0gICAgaWYgKCFXS0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmJyb3dzaW5nQ29udGV4dCA9IChX
S0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKiljbGllbnRJbmZvOwotICAgIGlmIChbYnJvd3Np
bmdDb250ZXh0LmxvYWREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGJyb3dz
aW5nQ29udGV4dENvbnRyb2xsZXJEaWRGYWlsTG9hZDp3aXRoRXJyb3I6KV0pIHsKLSAgICAgICAg
UmV0YWluUHRyPENGRXJyb3JSZWY+IGNmRXJyb3IgPSBhZG9wdENGKFdLRXJyb3JDb3B5Q0ZFcnJv
cihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBlcnJvcikpOwotICAgICAgICBbYnJvd3NpbmdDb250ZXh0
LmxvYWREZWxlZ2F0ZSBicm93c2luZ0NvbnRleHRDb250cm9sbGVyRGlkRmFpbExvYWQ6YnJvd3Np
bmdDb250ZXh0IHdpdGhFcnJvcjooTlNFcnJvciAqKWNmRXJyb3IuZ2V0KCldOwotICAgIH0KLX0K
LQotc3RhdGljIHZvaWQgZGlkU3RhcnRQcm9ncmVzcyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKLXsKLSAgICBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmJyb3dz
aW5nQ29udGV4dCA9IChXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKiljbGllbnRJbmZvOwot
ICAgIGlmIChbYnJvd3NpbmdDb250ZXh0LmxvYWREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJEaWRTdGFydFByb2dyZXNzOildKQot
ICAgICAgICBbYnJvd3NpbmdDb250ZXh0LmxvYWREZWxlZ2F0ZSBicm93c2luZ0NvbnRleHRDb250
cm9sbGVyRGlkU3RhcnRQcm9ncmVzczpicm93c2luZ0NvbnRleHRdOwotfQotCi1zdGF0aWMgdm9p
ZCBkaWRDaGFuZ2VQcm9ncmVzcyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5m
bykKLXsKLSAgICBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmJyb3dzaW5nQ29udGV4dCA9
IChXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKiljbGllbnRJbmZvOwotICAgIGlmIChbYnJv
d3NpbmdDb250ZXh0LmxvYWREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGJy
b3dzaW5nQ29udGV4dENvbnRyb2xsZXI6ZXN0aW1hdGVkUHJvZ3Jlc3NDaGFuZ2VkVG86KV0pCi0g
ICAgICAgIFticm93c2luZ0NvbnRleHQubG9hZERlbGVnYXRlIGJyb3dzaW5nQ29udGV4dENvbnRy
b2xsZXI6YnJvd3NpbmdDb250ZXh0IGVzdGltYXRlZFByb2dyZXNzQ2hhbmdlZFRvOnRvSW1wbChw
YWdlKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKV07Ci19Ci0KLXN0YXRpYyB2b2lkIGRpZEZpbmlzaFBy
b2dyZXNzKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIFdL
QnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqYnJvd3NpbmdDb250ZXh0ID0gKFdLQnJvd3NpbmdD
b250ZXh0Q29udHJvbGxlciAqKWNsaWVudEluZm87Ci0gICAgaWYgKFticm93c2luZ0NvbnRleHQu
bG9hZERlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoYnJvd3NpbmdDb250ZXh0
Q29udHJvbGxlckRpZEZpbmlzaFByb2dyZXNzOildKQotICAgICAgICBbYnJvd3NpbmdDb250ZXh0
LmxvYWREZWxlZ2F0ZSBicm93c2luZ0NvbnRleHRDb250cm9sbGVyRGlkRmluaXNoUHJvZ3Jlc3M6
YnJvd3NpbmdDb250ZXh0XTsKLX0KLQotc3RhdGljIHZvaWQgZGlkQ2hhbmdlQmFja0ZvcndhcmRM
aXN0KFdLUGFnZVJlZiBwYWdlLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgYWRkZWRJdGVtLCBX
S0FycmF5UmVmIHJlbW92ZWRJdGVtcywgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKLXsKLSAgICBX
S0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmJyb3dzaW5nQ29udGV4dCA9IChXS0Jyb3dzaW5n
Q29udGV4dENvbnRyb2xsZXIgKiljbGllbnRJbmZvOwotICAgIGlmICghW2Jyb3dzaW5nQ29udGV4
dC5sb2FkRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihicm93c2luZ0NvbnRl
eHRDb250cm9sbGVyRGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0OmFkZGVkSXRlbTpyZW1vdmVkSXRl
bXM6KV0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFdLQmFja0ZvcndhcmRMaXN0SXRlbSAqYWRk
ZWQgPSBhZGRlZEl0ZW0gPyB3cmFwcGVyKCp0b0ltcGwoYWRkZWRJdGVtKSkgOiBuaWw7Ci0gICAg
TlNBcnJheSAqcmVtb3ZlZCA9IHJlbW92ZWRJdGVtcyA/IHdyYXBwZXIoKnRvSW1wbChyZW1vdmVk
SXRlbXMpKSA6IG5pbDsKLSAgICBbYnJvd3NpbmdDb250ZXh0LmxvYWREZWxlZ2F0ZSBicm93c2lu
Z0NvbnRleHRDb250cm9sbGVyRGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0OmJyb3dzaW5nQ29udGV4
dCBhZGRlZEl0ZW06YWRkZWQgcmVtb3ZlZEl0ZW1zOnJlbW92ZWRdOwotfQotCi1zdGF0aWMgdm9p
ZCBzZXRVcFBhZ2VMb2FkZXJDbGllbnQoV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93
c2luZ0NvbnRleHQsIFdLUGFnZVJlZiBwYWdlUmVmKQotewotICAgIFdLUGFnZUxvYWRlckNsaWVu
dCBsb2FkZXJDbGllbnQ7Ci0gICAgbWVtc2V0KCZsb2FkZXJDbGllbnQsIDAsIHNpemVvZihsb2Fk
ZXJDbGllbnQpKTsKLQotICAgIGxvYWRlckNsaWVudC52ZXJzaW9uID0ga1dLUGFnZUxvYWRlckNs
aWVudEN1cnJlbnRWZXJzaW9uOwotICAgIGxvYWRlckNsaWVudC5jbGllbnRJbmZvID0gYnJvd3Np
bmdDb250ZXh0OwotICAgIGxvYWRlckNsaWVudC5kaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZy
YW1lID0gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZTsKLSAgICBsb2FkZXJDbGllbnQu
ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUgPSBkaWRS
ZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZTsKLSAgICBsb2Fk
ZXJDbGllbnQuZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lID0gZGlkRmFp
bFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lOwotICAgIGxvYWRlckNsaWVudC5kaWRD
b21taXRMb2FkRm9yRnJhbWUgPSBkaWRDb21taXRMb2FkRm9yRnJhbWU7Ci0gICAgbG9hZGVyQ2xp
ZW50LmRpZEZpbmlzaExvYWRGb3JGcmFtZSA9IGRpZEZpbmlzaExvYWRGb3JGcmFtZTsKLSAgICBs
b2FkZXJDbGllbnQuZGlkRmFpbExvYWRXaXRoRXJyb3JGb3JGcmFtZSA9IGRpZEZhaWxMb2FkV2l0
aEVycm9yRm9yRnJhbWU7Ci0KLSAgICBsb2FkZXJDbGllbnQuZGlkU3RhcnRQcm9ncmVzcyA9IGRp
ZFN0YXJ0UHJvZ3Jlc3M7Ci0gICAgbG9hZGVyQ2xpZW50LmRpZENoYW5nZVByb2dyZXNzID0gZGlk
Q2hhbmdlUHJvZ3Jlc3M7Ci0gICAgbG9hZGVyQ2xpZW50LmRpZEZpbmlzaFByb2dyZXNzID0gZGlk
RmluaXNoUHJvZ3Jlc3M7Ci0gICAgbG9hZGVyQ2xpZW50LmRpZENoYW5nZUJhY2tGb3J3YXJkTGlz
dCA9IGRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdDsKLQotICAgIFdLUGFnZVNldFBhZ2VMb2FkZXJD
bGllbnQocGFnZVJlZiwgJmxvYWRlckNsaWVudCk7Ci19Ci0KLXN0YXRpYyBXS1BvbGljeURlY2lz
aW9uSGFuZGxlciBtYWtlUG9saWN5RGVjaXNpb25CbG9jayhXS0ZyYW1lUG9saWN5TGlzdGVuZXJS
ZWYgbGlzdGVuZXIpCi17Ci0gICAgV0tSZXRhaW4obGlzdGVuZXIpOyAvLyBSZWxlYXNlZCBpbiB0
aGUgZGVjaXNpb24gaGFuZGxlciBiZWxvdy4KLQotICAgIHJldHVybiBbW14oV0tQb2xpY3lEZWNp
c2lvbiBkZWNpc2lvbikgewotICAgICAgICBzd2l0Y2ggKGRlY2lzaW9uKSB7Ci0gICAgICAgIGNh
c2UgV0tQb2xpY3lEZWNpc2lvbkNhbmNlbDoKLSAgICAgICAgICAgIFdLRnJhbWVQb2xpY3lMaXN0
ZW5lcklnbm9yZShsaXN0ZW5lcik7ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAKLSAgICAgICAgY2FzZSBXS1BvbGljeURlY2lzaW9uQWxsb3c6Ci0gICAg
ICAgICAgICBXS0ZyYW1lUG9saWN5TGlzdGVuZXJVc2UobGlzdGVuZXIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIAotICAgICAgICBjYXNlIFdLUG9saWN5RGVjaXNpb25CZWNvbWVEb3du
bG9hZDoKLSAgICAgICAgICAgIFdLRnJhbWVQb2xpY3lMaXN0ZW5lckRvd25sb2FkKGxpc3RlbmVy
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9OwotCi0gICAgICAgIFdLUmVsZWFzZShs
aXN0ZW5lcik7IC8vIFJldGFpbmVkIGluIHRoZSBjb250ZXh0IGFib3ZlLgotICAgIH0gY29weV0g
YXV0b3JlbGVhc2VdOwotfQotCi1zdGF0aWMgdm9pZCBzZXRVcFBhZ2VQb2xpY3lDbGllbnQoV0tC
cm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93c2luZ0NvbnRleHQsIFdLUGFnZVJlZiBwYWdl
UmVmKQotewotICAgIFdLUGFnZVBvbGljeUNsaWVudCBwb2xpY3lDbGllbnQ7Ci0gICAgbWVtc2V0
KCZwb2xpY3lDbGllbnQsIDAsIHNpemVvZihwb2xpY3lDbGllbnQpKTsKLQotICAgIHBvbGljeUNs
aWVudC52ZXJzaW9uID0ga1dLUGFnZVBvbGljeUNsaWVudEN1cnJlbnRWZXJzaW9uOwotICAgIHBv
bGljeUNsaWVudC5jbGllbnRJbmZvID0gYnJvd3NpbmdDb250ZXh0OwotCi0gICAgcG9saWN5Q2xp
ZW50LmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24gPSBbXShXS1BhZ2VSZWYgcGFnZSwg
V0tGcmFtZVJlZiBmcmFtZSwgV0tGcmFtZU5hdmlnYXRpb25UeXBlIG5hdmlnYXRpb25UeXBlLCBX
S0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgV0tFdmVudE1vdXNlQnV0dG9uIG1vdXNlQnV0dG9u
LCBXS0ZyYW1lUmVmIG9yaWdpbmF0aW5nRnJhbWUsIFdLVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBX
S0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYgbGlzdGVuZXIsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKLSAgICB7Ci0gICAgICAgIFdLQnJvd3NpbmdDb250ZXh0Q29u
dHJvbGxlciAqYnJvd3NpbmdDb250ZXh0ID0gKFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAq
KWNsaWVudEluZm87Ci0gICAgICAgIGlmIChbYnJvd3NpbmdDb250ZXh0LnBvbGljeURlbGVnYXRl
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjpk
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOmRlY2lzaW9uSGFuZGxlcjopXSkgewotICAg
ICAgICAgICAgTlNEaWN0aW9uYXJ5ICphY3Rpb25EaWN0aW9uYXJ5ID0gQHsKLSAgICAgICAgICAg
ICAgICBXS0FjdGlvbklzTWFpbkZyYW1lS2V5OiBAKFdLRnJhbWVJc01haW5GcmFtZShmcmFtZSkp
LAotICAgICAgICAgICAgICAgIFdLQWN0aW9uTmF2aWdhdGlvblR5cGVLZXk6IEAobmF2aWdhdGlv
blR5cGUpLAotICAgICAgICAgICAgICAgIFdLQWN0aW9uTW9kaWZpZXJGbGFnc0tleTogQChtb2Rp
ZmllcnMpLAotICAgICAgICAgICAgICAgIFdLQWN0aW9uTW91c2VCdXR0b25LZXk6IEAobW91c2VC
dXR0b24pLAotICAgICAgICAgICAgICAgIFdLQWN0aW9uVVJMUmVxdWVzdEtleTogYWRvcHROUyhX
S1VSTFJlcXVlc3RDb3B5TlNVUkxSZXF1ZXN0KHJlcXVlc3QpKS5nZXQoKQotICAgICAgICAgICAg
fTsKLQotICAgICAgICAgICAgaWYgKG9yaWdpbmF0aW5nRnJhbWUpIHsKLSAgICAgICAgICAgICAg
ICBhY3Rpb25EaWN0aW9uYXJ5ID0gW1thY3Rpb25EaWN0aW9uYXJ5IG11dGFibGVDb3B5XSBhdXRv
cmVsZWFzZV07Ci0gICAgICAgICAgICAgICAgWyhOU011dGFibGVEaWN0aW9uYXJ5ICopYWN0aW9u
RGljdGlvbmFyeSBzZXRPYmplY3Q6W05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzp0b0ltcGwo
b3JpZ2luYXRpbmdGcmFtZSktPnVybCgpIHJlbGF0aXZlVG9VUkw6bmlsXSBmb3JLZXk6V0tBY3Rp
b25PcmlnaW5hdGluZ0ZyYW1lVVJMS2V5XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgW2Jyb3dzaW5nQ29udGV4dC5wb2xpY3lEZWxlZ2F0ZSBicm93c2luZ0NvbnRl
eHRDb250cm9sbGVyOmJyb3dzaW5nQ29udGV4dCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0
aW9uOmFjdGlvbkRpY3Rpb25hcnkgZGVjaXNpb25IYW5kbGVyOm1ha2VQb2xpY3lEZWNpc2lvbkJs
b2NrKGxpc3RlbmVyKV07Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgV0tGcmFtZVBvbGlj
eUxpc3RlbmVyVXNlKGxpc3RlbmVyKTsKLSAgICB9OwotCi0gICAgcG9saWN5Q2xpZW50LmRlY2lk
ZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbiA9IFtdKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVm
IGZyYW1lLCBXS0ZyYW1lTmF2aWdhdGlvblR5cGUgbmF2aWdhdGlvblR5cGUsIFdLRXZlbnRNb2Rp
ZmllcnMgbW9kaWZpZXJzLCBXS0V2ZW50TW91c2VCdXR0b24gbW91c2VCdXR0b24sIFdLVVJMUmVx
dWVzdFJlZiByZXF1ZXN0LCBXS1N0cmluZ1JlZiBmcmFtZU5hbWUsIFdLRnJhbWVQb2xpY3lMaXN0
ZW5lclJlZiBsaXN0ZW5lciwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQotICAgIHsKLSAgICAgICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93c2lu
Z0NvbnRleHQgPSAoV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopY2xpZW50SW5mbzsKLSAg
ICAgICAgaWYgKFticm93c2luZ0NvbnRleHQucG9saWN5RGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcihicm93c2luZ0NvbnRleHRDb250cm9sbGVyOmRlY2lkZVBvbGljeUZvck5l
d1dpbmRvd0FjdGlvbjpkZWNpc2lvbkhhbmRsZXI6KV0pIHsKLSAgICAgICAgICAgIE5TRGljdGlv
bmFyeSAqYWN0aW9uRGljdGlvbmFyeSA9IEB7Ci0gICAgICAgICAgICAgICAgV0tBY3Rpb25Jc01h
aW5GcmFtZUtleTogQChXS0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKSwKLSAgICAgICAgICAgICAg
ICBXS0FjdGlvbk5hdmlnYXRpb25UeXBlS2V5OiBAKG5hdmlnYXRpb25UeXBlKSwKLSAgICAgICAg
ICAgICAgICBXS0FjdGlvbk1vZGlmaWVyRmxhZ3NLZXk6IEAobW9kaWZpZXJzKSwKLSAgICAgICAg
ICAgICAgICBXS0FjdGlvbk1vdXNlQnV0dG9uS2V5OiBAKG1vdXNlQnV0dG9uKSwKLSAgICAgICAg
ICAgICAgICBXS0FjdGlvblVSTFJlcXVlc3RLZXk6IGFkb3B0TlMoV0tVUkxSZXF1ZXN0Q29weU5T
VVJMUmVxdWVzdChyZXF1ZXN0KSkuZ2V0KCksCi0gICAgICAgICAgICAgICAgV0tBY3Rpb25GcmFt
ZU5hbWVLZXk6IHRvSW1wbChmcmFtZU5hbWUpLT53cmFwcGVyKCkKLSAgICAgICAgICAgIH07Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIFticm93c2luZ0NvbnRleHQucG9saWN5RGVsZWdhdGUg
YnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjpicm93c2luZ0NvbnRleHQgZGVjaWRlUG9saWN5Rm9y
TmV3V2luZG93QWN0aW9uOmFjdGlvbkRpY3Rpb25hcnkgZGVjaXNpb25IYW5kbGVyOm1ha2VQb2xp
Y3lEZWNpc2lvbkJsb2NrKGxpc3RlbmVyKV07Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
V0tGcmFtZVBvbGljeUxpc3RlbmVyVXNlKGxpc3RlbmVyKTsKLSAgICB9OwotCi0gICAgcG9saWN5
Q2xpZW50LmRlY2lkZVBvbGljeUZvclJlc3BvbnNlID0gW10oV0tQYWdlUmVmIHBhZ2UsIFdLRnJh
bWVSZWYgZnJhbWUsIFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UsIFdLVVJMUmVxdWVzdFJlZiBy
ZXF1ZXN0LCBib29sIGNhblNob3dNSU1FVHlwZSwgV0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmIGxp
c3RlbmVyLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi0gICAg
ewotICAgICAgICBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmJyb3dzaW5nQ29udGV4dCA9
IChXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKiljbGllbnRJbmZvOwotICAgICAgICBpZiAo
W2Jyb3dzaW5nQ29udGV4dC5wb2xpY3lEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXI6ZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2VBY3Rp
b246ZGVjaXNpb25IYW5kbGVyOildKSB7Ci0gICAgICAgICAgICBOU0RpY3Rpb25hcnkgKmFjdGlv
bkRpY3Rpb25hcnkgPSBAewotICAgICAgICAgICAgICAgIFdLQWN0aW9uSXNNYWluRnJhbWVLZXk6
IEAoV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSksCi0gICAgICAgICAgICAgICAgV0tBY3Rpb25V
UkxSZXF1ZXN0S2V5OiBhZG9wdE5TKFdLVVJMUmVxdWVzdENvcHlOU1VSTFJlcXVlc3QocmVxdWVz
dCkpLmdldCgpLAotICAgICAgICAgICAgICAgIFdLQWN0aW9uVVJMUmVzcG9uc2VLZXk6IGFkb3B0
TlMoV0tVUkxSZXNwb25zZUNvcHlOU1VSTFJlc3BvbnNlKHJlc3BvbnNlKSkuZ2V0KCksCi0gICAg
ICAgICAgICAgICAgV0tBY3Rpb25DYW5TaG93TUlNRVR5cGVLZXk6IEAoY2FuU2hvd01JTUVUeXBl
KSwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIFticm93c2luZ0NvbnRleHQucG9saWN5
RGVsZWdhdGUgYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjpicm93c2luZ0NvbnRleHQgZGVjaWRl
UG9saWN5Rm9yUmVzcG9uc2VBY3Rpb246YWN0aW9uRGljdGlvbmFyeSBkZWNpc2lvbkhhbmRsZXI6
bWFrZVBvbGljeURlY2lzaW9uQmxvY2sobGlzdGVuZXIpXTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBXS0ZyYW1lUG9saWN5TGlzdGVuZXJVc2UobGlzdGVuZXIpOwotICAgIH07Ci0KLSAg
ICBXS1BhZ2VTZXRQYWdlUG9saWN5Q2xpZW50KHBhZ2VSZWYsICZwb2xpY3lDbGllbnQpOwotfQot
Ci0vKiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIGFzc29jaWF0ZSB2aWV3LiAqLwot
Ci0tIChpZClfaW5pdFdpdGhQYWdlUmVmOihXS1BhZ2VSZWYpcGFnZVJlZgotewotICAgIHNlbGYg
PSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotCi0g
ICAgX3BhZ2VSZWYgPSBwYWdlUmVmOwotCi0gICAgX3BhZ2VMb2FkU3RhdGVPYnNlcnZlciA9IHN0
ZDo6bWFrZV91bmlxdWU8UGFnZUxvYWRTdGF0ZU9ic2VydmVyPihzZWxmKTsKLSAgICB0b0ltcGwo
X3BhZ2VSZWYuZ2V0KCkpLT5wYWdlTG9hZFN0YXRlKCkuYWRkT2JzZXJ2ZXIoKl9wYWdlTG9hZFN0
YXRlT2JzZXJ2ZXIpOwotCi0gICAgc2V0VXBQYWdlTG9hZGVyQ2xpZW50KHNlbGYsIHBhZ2VSZWYp
OwotICAgIHNldFVwUGFnZVBvbGljeUNsaWVudChzZWxmLCBwYWdlUmVmKTsKLQotICAgIHJldHVy
biBzZWxmOwotfQotCi0rIChXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKilfYnJvd3NpbmdD
b250ZXh0Q29udHJvbGxlckZvclBhZ2VSZWY6KFdLUGFnZVJlZilwYWdlUmVmCi17Ci0gICAgcmV0
dXJuIChXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKilXZWJLaXQ6OnRvSW1wbChwYWdlUmVm
KS0+bG9hZGVyQ2xpZW50KCkuY2xpZW50KCkuY2xpZW50SW5mbzsKLX0KLQotKyAoTlNNdXRhYmxl
U2V0ICopY3VzdG9tU2NoZW1lcwotewotICAgIHN0YXRpYyBOU011dGFibGVTZXQgKmN1c3RvbVNj
aGVtZXMgPSBbW05TTXV0YWJsZVNldCBhbGxvY10gaW5pdF07Ci0gICAgcmV0dXJuIGN1c3RvbVNj
aGVtZXM7Ci19Ci0gCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS0Jyb3dzaW5nQ29udGV4dENv
bnRyb2xsZXIgKFByaXZhdGUpCi0KLS0gKHZvaWQpc2V0UGFnaW5hdGlvbk1vZGU6KFdLQnJvd3Np
bmdDb250ZXh0UGFnaW5hdGlvbk1vZGUpcGFnaW5hdGlvbk1vZGUKLXsKLSAgICBXS1BhZ2luYXRp
b25Nb2RlIG1vZGU7Ci0gICAgc3dpdGNoIChwYWdpbmF0aW9uTW9kZSkgewotICAgIGNhc2UgV0tQ
YWdpbmF0aW9uTW9kZVVucGFnaW5hdGVkOgotICAgICAgICBtb2RlID0ga1dLUGFnaW5hdGlvbk1v
ZGVVbnBhZ2luYXRlZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXS1BhZ2luYXRpb25Nb2Rl
TGVmdFRvUmlnaHQ6Ci0gICAgICAgIG1vZGUgPSBrV0tQYWdpbmF0aW9uTW9kZUxlZnRUb1JpZ2h0
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdLUGFnaW5hdGlvbk1vZGVSaWdodFRvTGVmdDoK
LSAgICAgICAgbW9kZSA9IGtXS1BhZ2luYXRpb25Nb2RlUmlnaHRUb0xlZnQ7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgV0tQYWdpbmF0aW9uTW9kZVRvcFRvQm90dG9tOgotICAgICAgICBtb2Rl
ID0ga1dLUGFnaW5hdGlvbk1vZGVUb3BUb0JvdHRvbTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBXS1BhZ2luYXRpb25Nb2RlQm90dG9tVG9Ub3A6Ci0gICAgICAgIG1vZGUgPSBrV0tQYWdpbmF0
aW9uTW9kZUJvdHRvbVRvVG9wOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgV0tQYWdlU2V0UGFnaW5hdGlvbk1vZGUoX3BhZ2VSZWYu
Z2V0KCksIG1vZGUpOwotfQotCi0tIChXS0Jyb3dzaW5nQ29udGV4dFBhZ2luYXRpb25Nb2RlKXBh
Z2luYXRpb25Nb2RlCi17Ci0gICAgc3dpdGNoIChXS1BhZ2VHZXRQYWdpbmF0aW9uTW9kZShfcGFn
ZVJlZi5nZXQoKSkpIHsKLSAgICBjYXNlIGtXS1BhZ2luYXRpb25Nb2RlVW5wYWdpbmF0ZWQ6Ci0g
ICAgICAgIHJldHVybiBXS1BhZ2luYXRpb25Nb2RlVW5wYWdpbmF0ZWQ7Ci0gICAgY2FzZSBrV0tQ
YWdpbmF0aW9uTW9kZUxlZnRUb1JpZ2h0OgotICAgICAgICByZXR1cm4gV0tQYWdpbmF0aW9uTW9k
ZUxlZnRUb1JpZ2h0OwotICAgIGNhc2Uga1dLUGFnaW5hdGlvbk1vZGVSaWdodFRvTGVmdDoKLSAg
ICAgICAgcmV0dXJuIFdLUGFnaW5hdGlvbk1vZGVSaWdodFRvTGVmdDsKLSAgICBjYXNlIGtXS1Bh
Z2luYXRpb25Nb2RlVG9wVG9Cb3R0b206Ci0gICAgICAgIHJldHVybiBXS1BhZ2luYXRpb25Nb2Rl
VG9wVG9Cb3R0b207Ci0gICAgY2FzZSBrV0tQYWdpbmF0aW9uTW9kZUJvdHRvbVRvVG9wOgotICAg
ICAgICByZXR1cm4gV0tQYWdpbmF0aW9uTW9kZUJvdHRvbVRvVG9wOwotICAgIH0KLQotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBXS1BhZ2luYXRpb25Nb2RlVW5wYWdpbmF0
ZWQ7Ci19Ci0KLS0gKHZvaWQpc2V0UGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1uczooQk9PTCli
ZWhhdmVzTGlrZUNvbHVtbnMKLXsKLSAgICBXS1BhZ2VTZXRQYWdpbmF0aW9uQmVoYXZlc0xpa2VD
b2x1bW5zKF9wYWdlUmVmLmdldCgpLCBiZWhhdmVzTGlrZUNvbHVtbnMpOwotfQotCi0tIChCT09M
KXBhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnMKLXsKLSAgICByZXR1cm4gV0tQYWdlR2V0UGFn
aW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1ucyhfcGFnZVJlZi5nZXQoKSk7Ci19Ci0KLS0gKHZvaWQp
c2V0UGFnZUxlbmd0aDooQ0dGbG9hdClwYWdlTGVuZ3RoCi17Ci0gICAgV0tQYWdlU2V0UGFnZUxl
bmd0aChfcGFnZVJlZi5nZXQoKSwgcGFnZUxlbmd0aCk7Ci19Ci0KLS0gKENHRmxvYXQpcGFnZUxl
bmd0aAotewotICAgIHJldHVybiBXS1BhZ2VHZXRQYWdlTGVuZ3RoKF9wYWdlUmVmLmdldCgpKTsK
LX0KLQotLSAodm9pZClzZXRHYXBCZXR3ZWVuUGFnZXM6KENHRmxvYXQpZ2FwQmV0d2VlblBhZ2Vz
Ci17Ci0gICAgV0tQYWdlU2V0R2FwQmV0d2VlblBhZ2VzKF9wYWdlUmVmLmdldCgpLCBnYXBCZXR3
ZWVuUGFnZXMpOwotfQotCi0tIChDR0Zsb2F0KWdhcEJldHdlZW5QYWdlcwotewotICAgIHJldHVy
biBXS1BhZ2VHZXRHYXBCZXR3ZWVuUGFnZXMoX3BhZ2VSZWYuZ2V0KCkpOwotfQotCi0tIChOU1VJ
bnRlZ2VyKXBhZ2VDb3VudAotewotICAgIHJldHVybiBXS1BhZ2VHZXRQYWdlQ291bnQoX3BhZ2VS
ZWYuZ2V0KCkpOwotfQotCi0tIChXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZSAqKWhhbmRsZQotewot
ICAgIHJldHVybiBbW1tXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZSBhbGxvY10gX2luaXRXaXRoUGFn
ZUlEOnRvSW1wbChfcGFnZVJlZi5nZXQoKSktPnBhZ2VJRCgpXSBhdXRvcmVsZWFzZV07Ci19Ci0K
LUBlbmQKLQotI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJJbnRlcm5hbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdD
b250ZXh0Q29udHJvbGxlckludGVybmFsLmgJKHJldmlzaW9uIDE1OTg3MykKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckludGVy
bmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBv
cnQgIldLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlclByaXZhdGUuaCIKLQotI2lmIFdLX0FQSV9F
TkFCTEVECi0KLUBpbnRlcmZhY2UgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICgpCi0KLS8q
IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gYXNzb2NpYXRlIHZpZXcuICovCi0tIChp
ZClfaW5pdFdpdGhQYWdlUmVmOihXS1BhZ2VSZWYpcGFnZVJlZjsKLQotLyogUmV0dXJucyBhIFdL
QnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciBhc3NvY2lhdGVkIHdpdGggdGhlIFdLUGFnZVJlZi4g
Ki8KLSsgKFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqKV9icm93c2luZ0NvbnRleHRDb250
cm9sbGVyRm9yUGFnZVJlZjooV0tQYWdlUmVmKXBhZ2VSZWY7Ci0KLSsgKE5TTXV0YWJsZVNldCAq
KWN1c3RvbVNjaGVtZXM7Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dENvbnRy
b2xsZXJQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9tYWMvV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyUHJpdmF0ZS5oCShyZXZpc2lvbiAxNTk4
NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4
dENvbnRyb2xsZXJQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjIgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbXBvcnQgPFdlYktpdDIvV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyLmg+
Ci0KLSNpZiBXS19BUElfRU5BQkxFRAotCi0jaW1wb3J0IDxXZWJLaXQyL1dLQmFzZS5oPgotCi10
eXBlZGVmIE5TX0VOVU0oTlNVSW50ZWdlciwgV0tCcm93c2luZ0NvbnRleHRQYWdpbmF0aW9uTW9k
ZSkgewotICAgIFdLUGFnaW5hdGlvbk1vZGVVbnBhZ2luYXRlZCwKLSAgICBXS1BhZ2luYXRpb25N
b2RlTGVmdFRvUmlnaHQsCi0gICAgV0tQYWdpbmF0aW9uTW9kZVJpZ2h0VG9MZWZ0LAotICAgIFdL
UGFnaW5hdGlvbk1vZGVUb3BUb0JvdHRvbSwKLSAgICBXS1BhZ2luYXRpb25Nb2RlQm90dG9tVG9U
b3AsCi19OwotCi1AY2xhc3MgV0tCcm93c2luZ0NvbnRleHRIYW5kbGU7Ci0KLUBpbnRlcmZhY2Ug
V0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyIChQcml2YXRlKQotCi1AcHJvcGVydHkgKHJlYWRv
bmx5KSBXS1BhZ2VSZWYgX3BhZ2VSZWY7Ci0KLUBwcm9wZXJ0eSBXS0Jyb3dzaW5nQ29udGV4dFBh
Z2luYXRpb25Nb2RlIHBhZ2luYXRpb25Nb2RlOwotCi0vLyBXaGV0aGVyIHRoZSBjb2x1bW4tYnJl
YWste2JlZm9yZSxhZnRlcn0gcHJvcGVydGllcyBhcmUgcmVzcGVjdGVkIGluc3RlYWQgb2YgdGhl
Ci0vLyBwYWdlLWJyZWFrLXtiZWZvcmUsYWZ0ZXJ9IHByb3BlcnRpZXMuCi1AcHJvcGVydHkgQk9P
TCBwYWdpbmF0aW9uQmVoYXZlc0xpa2VDb2x1bW5zOwotCi0vLyBTZXQgdG8gMCB0byBoYXZlIHRo
ZSBwYWdlIGxlbmd0aCBlcXVhbCB0aGUgdmlldyBsZW5ndGguCi1AcHJvcGVydHkgQ0dGbG9hdCBw
YWdlTGVuZ3RoOwotQHByb3BlcnR5IENHRmxvYXQgZ2FwQmV0d2VlblBhZ2VzOwotCi1AcHJvcGVy
dHkgKHJlYWRvbmx5KSBOU1VJbnRlZ2VyIHBhZ2VDb3VudDsKLQotQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZSAqaGFuZGxlOwotCi1AZW5kCi0K
LSNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvV0tCcm93c2luZ0NvbnRleHRHcm91cC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0R3JvdXAuaAkocmV2aXNp
b24gMTU5ODczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2lu
Z0NvbnRleHRHcm91cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW1wb3J0IDxXZWJLaXQyL1dLRm91bmRhdGlvbi5oPgotCi0jaWYgV0tfQVBJX0VOQUJM
RUQKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0jaW1wb3J0IDxXZWJLaXQy
L1dLVXNlclNjcmlwdEluamVjdGlvblRpbWUuaD4KLQotV0tfQVBJX0NMQVNTCi1AaW50ZXJmYWNl
IFdLQnJvd3NpbmdDb250ZXh0R3JvdXAgOiBOU09iamVjdAotCi0tIChpZClpbml0V2l0aElkZW50
aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcjsKLQotLyogVXNlciBDb250ZW50ICovCi0KLS0g
KHZvaWQpYWRkVXNlclN0eWxlU2hlZXQ6KE5TU3RyaW5nICopc291cmNlIGJhc2VVUkw6KE5TVVJM
ICopYmFzZVVSTCB3aGl0ZWxpc3RlZFVSTFBhdHRlcm5zOihOU0FycmF5ICopd2hpdGVsaXN0IGJs
YWNrbGlzdGVkVVJMUGF0dGVybnM6KE5TQXJyYXkgKilibGFja2xpc3QgbWFpbkZyYW1lT25seToo
Qk9PTCltYWluRnJhbWVPbmx5OwotLSAodm9pZClyZW1vdmVBbGxVc2VyU3R5bGVTaGVldHM7Ci0K
LS0gKHZvaWQpYWRkVXNlclNjcmlwdDooTlNTdHJpbmcgKilzb3VyY2UgYmFzZVVSTDooTlNVUkwg
KiliYXNlVVJMIHdoaXRlbGlzdGVkVVJMUGF0dGVybnM6KE5TQXJyYXkgKil3aGl0ZWxpc3QgYmxh
Y2tsaXN0ZWRVUkxQYXR0ZXJuczooTlNBcnJheSAqKWJsYWNrbGlzdCBpbmplY3Rpb25UaW1lOihX
S1VzZXJTY3JpcHRJbmplY3Rpb25UaW1lKWluamVjdGlvblRpbWUgbWFpbkZyYW1lT25seTooQk9P
TCltYWluRnJhbWVPbmx5OwotLSAodm9pZClyZW1vdmVBbGxVc2VyU2NyaXB0czsKLQotCi0vKiBT
ZXR0aW5ncyAqLwotCi0vKiBTZXR0aW5nIHRvIGNvbnRyb2wgd2hldGhlciBKYXZhU2NyaXB0IHJl
ZmVyZW5jZWQgYnkgYSBwYWdlIGlzIGVuYWJsZWQuCi0gICBEZWZhdWx0OiBZRVMKLSovCi1AcHJv
cGVydHkgQk9PTCBhbGxvd3NKYXZhU2NyaXB0OwotCi0vKiBTZXR0aW5nIHRvIGNvbnRyb2wgd2hl
dGhlciBwbHVnLWlucyBhcmUgZW5hYmxlZC4KLSAgIERlZmF1bHQ6IFlFUwotKi8KLUBwcm9wZXJ0
eSBCT09MIGFsbG93c1BsdWdJbnM7Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVE
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4
dEdyb3VwLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1dLQnJvd3NpbmdDb250ZXh0R3JvdXAubW0JKHJldmlzaW9uIDE1OTg3MykKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0R3JvdXAubW0JKHdvcmtp
bmcgY29weSkKQEAgLTEsMTc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcu
aCIKLSNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5oIgotI2ltcG9ydCAi
V0tCcm93c2luZ0NvbnRleHRHcm91cFByaXZhdGUuaCIKLQotI2lmIFdLX0FQSV9FTkFCTEVECi0K
LSNpbXBvcnQgIkFQSUFycmF5LmgiCi0jaW1wb3J0ICJXS0FycmF5LmgiCi0jaW1wb3J0ICJXS1Bh
Z2VHcm91cC5oIgotI2ltcG9ydCAiV0tQcmVmZXJlbmNlcy5oIgotI2ltcG9ydCAiV0tSZXRhaW5Q
dHIuaCIKLSNpbXBvcnQgIldLU2hhcmVkQVBJQ2FzdC5oIgotI2ltcG9ydCAiV0tTdHJpbmdDRi5o
IgotI2ltcG9ydCAiV0tVUkwuaCIKLSNpbXBvcnQgIldLVVJMQ0YuaCIKLSNpbXBvcnQgIldlYlN0
cmluZy5oIgotI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0
OwotCi1AaW1wbGVtZW50YXRpb24gV0tCcm93c2luZ0NvbnRleHRHcm91cCB7Ci0gICAgc3RkOjph
bGlnbmVkX3N0b3JhZ2U8c2l6ZW9mKFdlYlBhZ2VHcm91cCksIHN0ZDo6YWxpZ25tZW50X29mPFdl
YlBhZ2VHcm91cD46OnZhbHVlPjo6dHlwZSBfcGFnZUdyb3VwOwotfQotCi0tICh2b2lkKWRlYWxs
b2MKLXsKLSAgICByZWludGVycHJldF9jYXN0PFdlYlBhZ2VHcm91cCo+KCZfcGFnZUdyb3VwKS0+
fldlYlBhZ2VHcm91cCgpOwotCi0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tIChpZClpbml0
V2l0aElkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgotewotICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgQVBJ
OjpPYmplY3Q6OmNvbnN0cnVjdEluV3JhcHBlcjxXZWJQYWdlR3JvdXA+KHNlbGYsIGlkZW50aWZp
ZXIpOwotCi0gICAgLy8gR2l2ZSB0aGUgV0tCcm93c2luZ0NvbnRleHRHcm91cCBhIGlkZW50aWZp
ZXItbGVzcyBwcmVmZXJlbmNlcywgc28gdGhhdCB0aGV5Ci0gICAgLy8gZG9uJ3QgZ2V0IGF1dG9t
YXRpY2FsbHkgd3JpdHRlbiB0byB0aGUgZGlzay4gVGhlIGF1dG9tYXRpYyB3cml0aW5nIGhhcyBw
cm92ZW4KLSAgICAvLyBjb25mdXNpbmcgdG8gdXNlcnMgb2YgdGhlIEFQSS4KLSAgICBXS1JldGFp
blB0cjxXS1ByZWZlcmVuY2VzUmVmPiBwcmVmZXJlbmNlcyA9IGFkb3B0V0soV0tQcmVmZXJlbmNl
c0NyZWF0ZSgpKTsKLSAgICBXS1BhZ2VHcm91cFNldFByZWZlcmVuY2VzKHRvQVBJKHJlaW50ZXJw
cmV0X2Nhc3Q8V2ViUGFnZUdyb3VwKj4oJl9wYWdlR3JvdXApKSwgcHJlZmVyZW5jZXMuZ2V0KCkp
OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKEJPT0wpYWxsb3dzSmF2YVNjcmlwdAotewot
ICAgIHJldHVybiBXS1ByZWZlcmVuY2VzR2V0SmF2YVNjcmlwdEVuYWJsZWQoV0tQYWdlR3JvdXBH
ZXRQcmVmZXJlbmNlcyh0b0FQSShyZWludGVycHJldF9jYXN0PFdlYlBhZ2VHcm91cCo+KCZfcGFn
ZUdyb3VwKSkpKTsKLX0KLQotLSAodm9pZClzZXRBbGxvd3NKYXZhU2NyaXB0OihCT09MKWFsbG93
c0phdmFTY3JpcHQKLXsKLSAgICBXS1ByZWZlcmVuY2VzU2V0SmF2YVNjcmlwdEVuYWJsZWQoV0tQ
YWdlR3JvdXBHZXRQcmVmZXJlbmNlcyh0b0FQSShyZWludGVycHJldF9jYXN0PFdlYlBhZ2VHcm91
cCo+KCZfcGFnZUdyb3VwKSkpLCBhbGxvd3NKYXZhU2NyaXB0KTsKLX0KLQotLSAoQk9PTClhbGxv
d3NKYXZhU2NyaXB0TWFya3VwCi17Ci0gICAgcmV0dXJuIFdLUHJlZmVyZW5jZXNHZXRKYXZhU2Ny
aXB0TWFya3VwRW5hYmxlZChXS1BhZ2VHcm91cEdldFByZWZlcmVuY2VzKHRvQVBJKHJlaW50ZXJw
cmV0X2Nhc3Q8V2ViUGFnZUdyb3VwKj4oJl9wYWdlR3JvdXApKSkpOwotfQotCi0tICh2b2lkKXNl
dEFsbG93c0phdmFTY3JpcHRNYXJrdXA6KEJPT0wpYWxsb3dzSmF2YVNjcmlwdE1hcmt1cAotewot
ICAgIFdLUHJlZmVyZW5jZXNTZXRKYXZhU2NyaXB0TWFya3VwRW5hYmxlZChXS1BhZ2VHcm91cEdl
dFByZWZlcmVuY2VzKHRvQVBJKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZUdyb3VwKj4oJl9wYWdl
R3JvdXApKSksIGFsbG93c0phdmFTY3JpcHRNYXJrdXApOwotfQotCi0tIChCT09MKWFsbG93c1Bs
dWdJbnMKLXsKLSAgICByZXR1cm4gV0tQcmVmZXJlbmNlc0dldFBsdWdpbnNFbmFibGVkKFdLUGFn
ZUdyb3VwR2V0UHJlZmVyZW5jZXModG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlR3JvdXAq
PigmX3BhZ2VHcm91cCkpKSk7Ci19Ci0KLS0gKHZvaWQpc2V0QWxsb3dzUGx1Z0luczooQk9PTClh
bGxvd3NQbHVnSW5zCi17Ci0gICAgV0tQcmVmZXJlbmNlc1NldFBsdWdpbnNFbmFibGVkKFdLUGFn
ZUdyb3VwR2V0UHJlZmVyZW5jZXModG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlR3JvdXAq
PigmX3BhZ2VHcm91cCkpKSwgYWxsb3dzUGx1Z0lucyk7Ci19Ci0KLXN0YXRpYyBXS1JldGFpblB0
cjxXS0FycmF5UmVmPiBjcmVhdGVXS0FycmF5KE5TQXJyYXkgKmFycmF5KQotewotICAgIE5TVUlu
dGVnZXIgY291bnQgPSBbYXJyYXkgY291bnRdOwotCi0gICAgaWYgKCFjb3VudCkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4gc3RyaW5n
czsKLSAgICBzdHJpbmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY291bnQpOwotCi0gICAgZm9y
IChpZCBlbnRyeSBpbiBhcnJheSkgewotICAgICAgICBpZiAoW2VudHJ5IGlzS2luZE9mQ2xhc3M6
W05TU3RyaW5nIGNsYXNzXV0pCi0gICAgICAgICAgICBzdHJpbmdzLnVuY2hlY2tlZEFwcGVuZChh
ZG9wdFJlZih0b0ltcGwoV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKWVu
dHJ5KSkpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9BUEkoQVBJOjpBcnJheTo6Y3JlYXRlKHN0
ZDo6bW92ZShzdHJpbmdzKSkubGVha1JlZigpKTsKLX0KLQotLSh2b2lkKWFkZFVzZXJTdHlsZVNo
ZWV0OihOU1N0cmluZyAqKXNvdXJjZSBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwgd2hpdGVsaXN0
ZWRVUkxQYXR0ZXJuczooTlNBcnJheSAqKXdoaXRlbGlzdCBibGFja2xpc3RlZFVSTFBhdHRlcm5z
OihOU0FycmF5ICopYmxhY2tsaXN0IG1haW5GcmFtZU9ubHk6KEJPT0wpbWFpbkZyYW1lT25seQot
ewotICAgIGlmICghc291cmNlKQotICAgICAgICBDUkFTSCgpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHdrU291cmNlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmlu
ZygoQ0ZTdHJpbmdSZWYpc291cmNlKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrQmFz
ZVVSTCA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQ0ZVUkwoKENGVVJMUmVmKWJhc2VVUkwpKTsK
LSAgICBhdXRvIHdrV2hpdGVsaXN0ID0gY3JlYXRlV0tBcnJheSh3aGl0ZWxpc3QpOwotICAgIGF1
dG8gd2tCbGFja2xpc3QgPSBjcmVhdGVXS0FycmF5KGJsYWNrbGlzdCk7Ci0gICAgV0tVc2VyQ29u
dGVudEluamVjdGVkRnJhbWVzIGluamVjdGVkRnJhbWVzID0gbWFpbkZyYW1lT25seSA/IGtXS0lu
amVjdEluVG9wRnJhbWVPbmx5IDoga1dLSW5qZWN0SW5BbGxGcmFtZXM7Ci0KLSAgICBXS1BhZ2VH
cm91cEFkZFVzZXJTdHlsZVNoZWV0KHRvQVBJKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZUdyb3Vw
Kj4oJl9wYWdlR3JvdXApKSwgd2tTb3VyY2UuZ2V0KCksIHdrQmFzZVVSTC5nZXQoKSwgd2tXaGl0
ZWxpc3QuZ2V0KCksIHdrQmxhY2tsaXN0LmdldCgpLCBpbmplY3RlZEZyYW1lcyk7Ci19Ci0KLS0g
KHZvaWQpcmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzCi17Ci0gICAgV0tQYWdlR3JvdXBSZW1vdmVB
bGxVc2VyU3R5bGVTaGVldHModG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlR3JvdXAqPigm
X3BhZ2VHcm91cCkpKTsKLX0KLQotLSAodm9pZClhZGRVc2VyU2NyaXB0OihOU1N0cmluZyAqKXNv
dXJjZSBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwgd2hpdGVsaXN0ZWRVUkxQYXR0ZXJuczooTlNB
cnJheSAqKXdoaXRlbGlzdCBibGFja2xpc3RlZFVSTFBhdHRlcm5zOihOU0FycmF5ICopYmxhY2ts
aXN0IGluamVjdGlvblRpbWU6KFdLVXNlclNjcmlwdEluamVjdGlvblRpbWUpaW5qZWN0aW9uVGlt
ZSBtYWluRnJhbWVPbmx5OihCT09MKW1haW5GcmFtZU9ubHkKLXsKLSAgICBpZiAoIXNvdXJjZSkK
LSAgICAgICAgQ1JBU0goKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a1NvdXJj
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKXNvdXJj
ZSkpOwotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a0Jhc2VVUkwgPSBhZG9wdFdLKFdLVVJM
Q3JlYXRlV2l0aENGVVJMKChDRlVSTFJlZiliYXNlVVJMKSk7Ci0gICAgYXV0byB3a1doaXRlbGlz
dCA9IGNyZWF0ZVdLQXJyYXkod2hpdGVsaXN0KTsKLSAgICBhdXRvIHdrQmxhY2tsaXN0ID0gY3Jl
YXRlV0tBcnJheShibGFja2xpc3QpOwotICAgIFdLVXNlckNvbnRlbnRJbmplY3RlZEZyYW1lcyBp
bmplY3RlZEZyYW1lcyA9IG1haW5GcmFtZU9ubHkgPyBrV0tJbmplY3RJblRvcEZyYW1lT25seSA6
IGtXS0luamVjdEluQWxsRnJhbWVzOwotCi0gICAgV0tQYWdlR3JvdXBBZGRVc2VyU2NyaXB0KHRv
QVBJKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZUdyb3VwKj4oJl9wYWdlR3JvdXApKSwgd2tTb3Vy
Y2UuZ2V0KCksIHdrQmFzZVVSTC5nZXQoKSwgd2tXaGl0ZWxpc3QuZ2V0KCksIHdrQmxhY2tsaXN0
LmdldCgpLCBpbmplY3RlZEZyYW1lcywgaW5qZWN0aW9uVGltZSk7Ci19Ci0KLS0gKHZvaWQpcmVt
b3ZlQWxsVXNlclNjcmlwdHMKLXsKLSAgICBXS1BhZ2VHcm91cFJlbW92ZUFsbFVzZXJTY3JpcHRz
KHRvQVBJKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZUdyb3VwKj4oJl9wYWdlR3JvdXApKSk7Ci19
Ci0KLSNwcmFnbWEgbWFyayBXS09iamVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgotCi0tIChB
UEk6Ok9iamVjdCYpX2FwaU9iamVjdAotewotICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxB
UEk6Ok9iamVjdCo+KCZfcGFnZUdyb3VwKTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24g
V0tCcm93c2luZ0NvbnRleHRHcm91cCAoUHJpdmF0ZSkKLQotLSAoV0tQYWdlR3JvdXBSZWYpX3Bh
Z2VHcm91cFJlZgotewotICAgIHJldHVybiB0b0FQSShyZWludGVycHJldF9jYXN0PFdlYlBhZ2VH
cm91cCo+KCZfcGFnZUdyb3VwKSk7Ci19Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFdLX0FQSV9FTkFC
TEVECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29u
dGV4dEdyb3VwSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dEdyb3VwSW50ZXJuYWwuaAkocmV2aXNpb24gMTU5
ODczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2luZ0NvbnRl
eHRHcm91cEludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0R3JvdXAuaCIKLQotI2lmIFdLX0FQSV9F
TkFCTEVECi0KLSNpbXBvcnQgIldLT2JqZWN0LmgiCi0jaW1wb3J0ICJXZWJQYWdlR3JvdXAuaCIK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWlubGluZSBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwICp3
cmFwcGVyKFdlYlBhZ2VHcm91cCYgcGFnZUdyb3VwKQotewotICAgIEFTU0VSVChbcGFnZUdyb3Vw
LndyYXBwZXIoKSBpc0tpbmRPZkNsYXNzOltXS0Jyb3dzaW5nQ29udGV4dEdyb3VwIGNsYXNzXV0p
OwotICAgIHJldHVybiAoV0tCcm93c2luZ0NvbnRleHRHcm91cCAqKXBhZ2VHcm91cC53cmFwcGVy
KCk7Ci19Ci0KLX0KLQotQGludGVyZmFjZSBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwICgpIDxXS09i
amVjdD4KLUBlbmQKLQotI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dEdyb3VwUHJpdmF0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdD
b250ZXh0R3JvdXBQcml2YXRlLmgJKHJldmlzaW9uIDE1OTg3MykKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0R3JvdXBQcml2YXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgPFdlYktpdDIv
V0tCcm93c2luZ0NvbnRleHRHcm91cC5oPgotCi0jaWYgV0tfQVBJX0VOQUJMRUQKLQotI2ltcG9y
dCA8V2ViS2l0Mi9XS0Jhc2UuaD4KLQotQGludGVyZmFjZSBXS0Jyb3dzaW5nQ29udGV4dEdyb3Vw
IChQcml2YXRlKQotCi1AcHJvcGVydHkocmVhZG9ubHkpIFdLUGFnZUdyb3VwUmVmIF9wYWdlR3Jv
dXBSZWY7Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3Np
bmdDb250ZXh0TG9hZERlbGVnYXRlLmgJKHJldmlzaW9uIDE1OTg3MykKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgotCi1AY2xhc3MgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVy
OwotQGNsYXNzIFdLQmFja0ZvcndhcmRMaXN0SXRlbTsKLQotQHByb3RvY29sIFdLQnJvd3NpbmdD
b250ZXh0TG9hZERlbGVnYXRlIDxOU09iamVjdD4KLUBvcHRpb25hbAotCi0vKiBTZW50IHdoZW4g
dGhlIHByb3Zpc2lvbmFsIGxvYWQgYmVnaW5zLiAqLwotLSAodm9pZClicm93c2luZ0NvbnRleHRD
b250cm9sbGVyRGlkU3RhcnRQcm92aXNpb25hbExvYWQ6KFdLQnJvd3NpbmdDb250ZXh0Q29udHJv
bGxlciAqKXNlbmRlcjsKLQotLyogU2VudCBpZiBhIHNlcnZlci1zaWRlIHJlZGlyZWN0IHdhcyBy
ZWNpZXZlZC4gKi8KLS0gKHZvaWQpYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckRpZFJlY2VpdmVT
ZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZDooV0tCcm93c2luZ0NvbnRleHRDb250cm9s
bGVyICopc2VuZGVyOwotCi0vKiBTZW50IGlmIHRoZSBwcm92aW9uYWwgbG9hZCBmYWlscy4gKi8K
LS0gKHZvaWQpYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckRpZEZhaWxQcm92aXNpb25hbExvYWQ6
KFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqKXNlbmRlciB3aXRoRXJyb3I6KE5TRXJyb3Ig
KillcnJvcjsKLQotLyogU2VudCB3aGVuIHRoZSBsb2FkIGdldHMgY29tbWl0dGVkLiAqLwotLSAo
dm9pZClicm93c2luZ0NvbnRleHRDb250cm9sbGVyRGlkQ29tbWl0TG9hZDooV0tCcm93c2luZ0Nv
bnRleHRDb250cm9sbGVyICopc2VuZGVyOwotCi0vKiBTZW50IHdoZW4gdGhlIGxvYWQgY29tcGxl
dGVzLiAqLwotLSAodm9pZClicm93c2luZ0NvbnRleHRDb250cm9sbGVyRGlkRmluaXNoTG9hZDoo
V0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopc2VuZGVyOwotCi0vKiBTZW50IGlmIHRoZSBj
b21taXRlZCBsb2FkIGZhaWxzLiAqLwotLSAodm9pZClicm93c2luZ0NvbnRleHRDb250cm9sbGVy
RGlkRmFpbExvYWQ6KFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqKXNlbmRlciB3aXRoRXJy
b3I6KE5TRXJyb3IgKillcnJvcjsKLQotLSAodm9pZClicm93c2luZ0NvbnRleHRDb250cm9sbGVy
RGlkU3RhcnRQcm9ncmVzczooV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopc2VuZGVyOwot
LSAodm9pZClicm93c2luZ0NvbnRleHRDb250cm9sbGVyOihXS0Jyb3dzaW5nQ29udGV4dENvbnRy
b2xsZXIgKilzZW5kZXIgZXN0aW1hdGVkUHJvZ3Jlc3NDaGFuZ2VkVG86KGRvdWJsZSllc3RpbWF0
ZWRQcm9ncmVzczsKLS0gKHZvaWQpYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckRpZEZpbmlzaFBy
b2dyZXNzOihXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKilzZW5kZXI7Ci0KLS0gKHZvaWQp
YnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdDooV0tCcm93
c2luZ0NvbnRleHRDb250cm9sbGVyICopc2VuZGVyIGFkZGVkSXRlbTooV0tCYWNrRm9yd2FyZExp
c3RJdGVtICopYWRkZWRJdGVtIHJlbW92ZWRJdGVtczooTlNBcnJheSAqKXJlbW92ZWRJdGVtczsK
LQotQGVuZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2lu
Z0NvbnRleHRQb2xpY3lEZWxlZ2F0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0UG9saWN5RGVsZWdhdGUuaAkocmV2aXNp
b24gMTU5ODczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2lu
Z0NvbnRleHRQb2xpY3lEZWxlZ2F0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY2ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLSNpbXBvcnQg
PFdlYktpdDIvV0tEZWNsYXJhdGlvblNwZWNpZmllcnMuaD4KLQotQGNsYXNzIFdLQnJvd3NpbmdD
b250ZXh0Q29udHJvbGxlcjsKLQotLyogQ29uc3RhbnRzIGZvciBwb2xpY3kgYWN0aW9uIGRpY3Rp
b25hcmllcyAqLwotV0tfRVhQT1JUIGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IFdLQWN0aW9uSXNN
YWluRnJhbWVLZXk7ICAgICAgICAgLy8gTlNOdW1iZXIgKEJPT0wpCi1XS19FWFBPUlQgZXh0ZXJu
IE5TU3RyaW5nICogY29uc3QgV0tBY3Rpb25OYXZpZ2F0aW9uVHlwZUtleTsgICAgICAvLyBOU051
bWJlciAoV0tOYXZpZ2F0aW9uVHlwZSkKLVdLX0VYUE9SVCBleHRlcm4gTlNTdHJpbmcgKiBjb25z
dCBXS0FjdGlvbk1vdXNlQnV0dG9uS2V5OyAgICAgICAgIC8vIE5TTnVtYmVyICgwIGZvciBsZWZ0
IGJ1dHRvbiwgMSBmb3IgbWlkZGxlIGJ1dHRvbiwgMiBmb3IgcmlnaHQgYnV0dG9uKQotV0tfRVhQ
T1JUIGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IFdLQWN0aW9uTW9kaWZpZXJGbGFnc0tleTsgICAg
ICAgLy8gTlNOdW1iZXIgKHVuc2lnbmVkKQotV0tfRVhQT1JUIGV4dGVybiBOU1N0cmluZyAqIGNv
bnN0IFdLQWN0aW9uVVJMUmVxdWVzdEtleTsgICAgICAgICAgLy8gTlNVUkxSZXF1ZXN0Ci1XS19F
WFBPUlQgZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgV0tBY3Rpb25VUkxSZXNwb25zZUtleTsgICAg
ICAgICAvLyBOU1VSTFJlc3BvbnNlCi1XS19FWFBPUlQgZXh0ZXJuIE5TU3RyaW5nICogY29uc3Qg
V0tBY3Rpb25GcmFtZU5hbWVLZXk7ICAgICAgICAgICAvLyBOU1N0cmluZwotV0tfRVhQT1JUIGV4
dGVybiBOU1N0cmluZyAqIGNvbnN0IFdLQWN0aW9uT3JpZ2luYXRpbmdGcmFtZVVSTEtleTsgLy8g
TlNVUkwKLVdLX0VYUE9SVCBleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBXS0FjdGlvbkNhblNob3dN
SU1FVHlwZUtleTsgICAgIC8vIE5TTnVtYmVyIChCT09MKQotCi10eXBlZGVmIE5TX0VOVU0oTlNV
SW50ZWdlciwgV0tOYXZpZ2F0aW9uVHlwZSkgewotICAgIFdLTmF2aWdhdGlvblR5cGVMaW5rQ2xp
Y2tlZCwKLSAgICBXS05hdmlnYXRpb25UeXBlRm9ybVN1Ym1pdHRlZCwKLSAgICBXS05hdmlnYXRp
b25UeXBlQmFja0ZvcndhcmQsCi0gICAgV0tOYXZpZ2F0aW9uVHlwZVJlbG9hZCwKLSAgICBXS05h
dmlnYXRpb25UeXBlRm9ybVJlc3VibWl0dGVkLAotICAgIFdLTmF2aWdhdGlvblR5cGVPdGhlcgot
fTsKLQotdHlwZWRlZiBOU19FTlVNKE5TVUludGVnZXIsIFdLUG9saWN5RGVjaXNpb24pIHsKLSAg
ICBXS1BvbGljeURlY2lzaW9uQ2FuY2VsLAotICAgIFdLUG9saWN5RGVjaXNpb25BbGxvdywKLSAg
ICBXS1BvbGljeURlY2lzaW9uQmVjb21lRG93bmxvYWQKLX07Ci0KLXR5cGVkZWYgdm9pZCAoXldL
UG9saWN5RGVjaXNpb25IYW5kbGVyKShXS1BvbGljeURlY2lzaW9uKTsKLQotQHByb3RvY29sIFdL
QnJvd3NpbmdDb250ZXh0UG9saWN5RGVsZWdhdGUgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0KLS0g
KHZvaWQpYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjooV0tCcm93c2luZ0NvbnRleHRDb250cm9s
bGVyICopc2VuZGVyIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246KE5TRGljdGlvbmFy
eSAqKWFjdGlvbkluZm9ybWF0aW9uIGRlY2lzaW9uSGFuZGxlcjooV0tQb2xpY3lEZWNpc2lvbkhh
bmRsZXIpZGVjaXNpb25IYW5kbGVyOwotLSAodm9pZClicm93c2luZ0NvbnRleHRDb250cm9sbGVy
OihXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKilzZW5kZXIgZGVjaWRlUG9saWN5Rm9yTmV3
V2luZG93QWN0aW9uOihOU0RpY3Rpb25hcnkgKilhY3Rpb25JbmZvcm1hdGlvbiBkZWNpc2lvbkhh
bmRsZXI6KFdLUG9saWN5RGVjaXNpb25IYW5kbGVyKWRlY2lzaW9uSGFuZGxlcjsKLS0gKHZvaWQp
YnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjooV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICop
c2VuZGVyIGRlY2lkZVBvbGljeUZvclJlc3BvbnNlQWN0aW9uOihOU0RpY3Rpb25hcnkgKilhY3Rp
b25JbmZvcm1hdGlvbiBkZWNpc2lvbkhhbmRsZXI6KFdLUG9saWN5RGVjaXNpb25IYW5kbGVyKWRl
Y2lzaW9uSGFuZGxlcjsKLQotQGVuZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9tYWMvV0tDb25uZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9tYWMvV0tDb25uZWN0aW9uLmgJKHJldmlzaW9uIDE1OTg3MykKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQ29ubmVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0IDxXZWJLaXQyL1dLRm91bmRhdGlv
bi5oPgotCi0jaWYgV0tfQVBJX0VOQUJMRUQKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+Ci0KLUBjbGFzcyBXS0Nvbm5lY3Rpb247Ci1AY2xhc3MgV0tSZW1vdGVPYmplY3RSZWdp
c3RyeTsKLQotQHByb3RvY29sIFdLQ29ubmVjdGlvbkRlbGVnYXRlIDxOU09iamVjdD4KLQotLSAo
dm9pZCljb25uZWN0aW9uOihXS0Nvbm5lY3Rpb24gKiljb25uZWN0aW9uIGRpZFJlY2VpdmVNZXNz
YWdlV2l0aE5hbWU6KE5TU3RyaW5nICopbWVzc2FnZU5hbWUgYm9keTooaWQpbWVzc2FnZUJvZHk7
Ci0tICh2b2lkKWNvbm5lY3Rpb25EaWRDbG9zZTooV0tDb25uZWN0aW9uICopY29ubmVjdGlvbjsK
LQotQGVuZAotCi1XS19BUElfQ0xBU1MKLUBpbnRlcmZhY2UgV0tDb25uZWN0aW9uIDogTlNPYmpl
Y3QKLQotLSAodm9pZClzZW5kTWVzc2FnZVdpdGhOYW1lOihOU1N0cmluZyAqKW1lc3NhZ2VOYW1l
IGJvZHk6KGlkKW1lc3NhZ2VCb2R5OwotCi1AcHJvcGVydHkgKGFzc2lnbikgaWQgPFdLQ29ubmVj
dGlvbkRlbGVnYXRlPiBkZWxlZ2F0ZTsKLQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBXS1JlbW90ZU9iamVjdFJlZ2lzdHJ5ICpyZW1vdGVPYmplY3RSZWdpc3RyeTsKLQotQGVuZAot
Ci0jZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvbWFjL1dLQ29ubmVjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9XS0Nvbm5lY3Rpb24ubW0JKHJldmlzaW9uIDE1OTg3MykKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQ29ubmVjdGlvbi5tbQkod29ya2luZyBj
b3B5KQpAQCAtMSwxMjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiV0tDb25uZWN0aW9uSW50ZXJuYWwuaCIKLQotI2lmIFdLX0FQSV9FTkFCTEVECi0K
LSNpbXBvcnQgIk9iakNPYmplY3RHcmFwaC5oIgotI2ltcG9ydCAiV0tDb25uZWN0aW9uUmVmLmgi
Ci0jaW1wb3J0ICJXS0RhdGEuaCIKLSNpbXBvcnQgIldLUmV0YWluUHRyLmgiCi0jaW1wb3J0ICJX
S1N0cmluZ0NGLmgiCi0jaW1wb3J0ICJXS1JlbW90ZU9iamVjdFJlZ2lzdHJ5SW50ZXJuYWwuaCIK
LSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQot
QGltcGxlbWVudGF0aW9uIFdLQ29ubmVjdGlvbiB7Ci0gICAgLy8gVW5kZXJseWluZyBjb25uZWN0
aW9uIG9iamVjdC4KLSAgICBXS1JldGFpblB0cjxXS0Nvbm5lY3Rpb25SZWY+IF9jb25uZWN0aW9u
UmVmOwotCi0gICAgUmV0YWluUHRyPFdLUmVtb3RlT2JqZWN0UmVnaXN0cnk+IF9yZW1vdGVPYmpl
Y3RSZWdpc3RyeTsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgV0tDb25uZWN0aW9uU2V0
Q29ubmVjdGlvbkNsaWVudChfY29ubmVjdGlvblJlZi5nZXQoKSwgMCk7Ci0KLSAgICBbc3VwZXIg
ZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2VuZE1lc3NhZ2VXaXRoTmFtZTooTlNTdHJpbmcgKilt
ZXNzYWdlTmFtZSBib2R5OihpZCltZXNzYWdlQm9keQotewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB3a01lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmlu
ZygoQ0ZTdHJpbmdSZWYpbWVzc2FnZU5hbWUpKTsKLSAgICBSZWZQdHI8T2JqQ09iamVjdEdyYXBo
PiB3a01lc3NhZ2VCb2R5ID0gT2JqQ09iamVjdEdyYXBoOjpjcmVhdGUobWVzc2FnZUJvZHkpOwot
Ci0gICAgV0tDb25uZWN0aW9uUG9zdE1lc3NhZ2UoX2Nvbm5lY3Rpb25SZWYuZ2V0KCksIHdrTWVz
c2FnZU5hbWUuZ2V0KCksIChXS1R5cGVSZWYpd2tNZXNzYWdlQm9keS5nZXQoKSk7Ci19Ci0KLS0g
KFdLUmVtb3RlT2JqZWN0UmVnaXN0cnkgKilyZW1vdGVPYmplY3RSZWdpc3RyeQotewotICAgIGlm
ICghX3JlbW90ZU9iamVjdFJlZ2lzdHJ5KQotICAgICAgICBfcmVtb3RlT2JqZWN0UmVnaXN0cnkg
PSBhZG9wdE5TKFtbV0tSZW1vdGVPYmplY3RSZWdpc3RyeSBhbGxvY10gX2luaXRXaXRoQ29ubmVj
dGlvblJlZjpfY29ubmVjdGlvblJlZi5nZXQoKV0pOwotCi0gICAgcmV0dXJuIF9yZW1vdGVPYmpl
Y3RSZWdpc3RyeS5nZXQoKTsKLX0KLQotc3RhdGljIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoV0tD
b25uZWN0aW9uUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VC
b2R5LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIFdLQ29ubmVjdGlvbiAqY29ubmVj
dGlvbiA9IChXS0Nvbm5lY3Rpb24gKiljbGllbnRJbmZvOwotCi0gICAgaWYgKFtjb25uZWN0aW9u
LT5fcmVtb3RlT2JqZWN0UmVnaXN0cnkgX2hhbmRsZU1lc3NhZ2VXaXRoTmFtZTptZXNzYWdlTmFt
ZSBib2R5Om1lc3NhZ2VCb2R5XSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFtjb25uZWN0
aW9uLmRlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoY29ubmVjdGlvbjpkaWRS
ZWNlaXZlTWVzc2FnZVdpdGhOYW1lOmJvZHk6KV0pIHsKLSAgICAgICAgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiBuc01lc3NhZ2VOYW1lID0gYWRvcHRDRihXS1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBtZXNzYWdlTmFtZSkpOwotICAgICAgICBSZXRhaW5QdHI8aWQ+IG5z
TWVzc2FnZUJvZHkgPSAoKE9iakNPYmplY3RHcmFwaCopbWVzc2FnZUJvZHkpLT5yb290T2JqZWN0
KCk7Ci0KLSAgICAgICAgW2Nvbm5lY3Rpb24uZGVsZWdhdGUgY29ubmVjdGlvbjpjb25uZWN0aW9u
IGRpZFJlY2VpdmVNZXNzYWdlV2l0aE5hbWU6KE5TU3RyaW5nICopbnNNZXNzYWdlTmFtZS5nZXQo
KSBib2R5Om5zTWVzc2FnZUJvZHkuZ2V0KCldOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgZGlk
Q2xvc2UoV0tDb25uZWN0aW9uUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIFdL
Q29ubmVjdGlvbiAqY29ubmVjdGlvbiA9IChXS0Nvbm5lY3Rpb24gKiljbGllbnRJbmZvOwotICAg
IGlmIChbY29ubmVjdGlvbi5kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNv
bm5lY3Rpb25EaWRDbG9zZTopXSkgewotICAgICAgICBbY29ubmVjdGlvbi5kZWxlZ2F0ZSBjb25u
ZWN0aW9uRGlkQ2xvc2U6Y29ubmVjdGlvbl07Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBzZXRV
cENsaWVudChXS0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIFdLQ29ubmVjdGlvblJlZiBjb25uZWN0
aW9uUmVmKQotewotICAgIFdLQ29ubmVjdGlvbkNsaWVudCBjbGllbnQ7Ci0gICAgbWVtc2V0KCZj
bGllbnQsIDAsIHNpemVvZihjbGllbnQpKTsKLQotICAgIGNsaWVudC52ZXJzaW9uID0gV0tDb25u
ZWN0aW9uQ2xpZW50Q3VycmVudFZlcnNpb247Ci0gICAgY2xpZW50LmNsaWVudEluZm8gPSBjb25u
ZWN0aW9uOwotICAgIGNsaWVudC5kaWRSZWNlaXZlTWVzc2FnZSA9IGRpZFJlY2VpdmVNZXNzYWdl
OwotICAgIGNsaWVudC5kaWRDbG9zZSA9IGRpZENsb3NlOwotCi0gICAgV0tDb25uZWN0aW9uU2V0
Q29ubmVjdGlvbkNsaWVudChjb25uZWN0aW9uUmVmLCAmY2xpZW50KTsKLX0KLQotLSAoaWQpX2lu
aXRXaXRoQ29ubmVjdGlvblJlZjooV0tDb25uZWN0aW9uUmVmKWNvbm5lY3Rpb25SZWYKLXsKLSAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5p
bDsKLQotICAgIF9jb25uZWN0aW9uUmVmID0gY29ubmVjdGlvblJlZjsKLQotICAgIHNldFVwQ2xp
ZW50KHNlbGYsIF9jb25uZWN0aW9uUmVmLmdldCgpKTsKLQotICAgIHJldHVybiBzZWxmOwotfQot
Ci1AZW5kCi0KLSNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9tYWMvV0tDb25uZWN0aW9uSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Nvbm5lY3Rpb25JbnRlcm5hbC5oCShy
ZXZpc2lvbiAxNTk4NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Nv
bm5lY3Rpb25JbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW1wb3J0ICJXS0Nvbm5lY3Rpb24uaCIKLQotI2lmIFdLX0FQSV9FTkFCTEVECi0K
LSNpbXBvcnQgPFdlYktpdDIvV0tCYXNlLmg+Ci0KLUBpbnRlcmZhY2UgV0tDb25uZWN0aW9uICgp
Ci0KLS0gKGlkKV9pbml0V2l0aENvbm5lY3Rpb25SZWY6KFdLQ29ubmVjdGlvblJlZiljb25uZWN0
aW9uUmVmOwotCi1AZW5kCi0KLSNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcm9jZXNzR3JvdXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1Byb2Nlc3NHcm91cC5oCShyZXZp
c2lvbiAxNTk4NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1Byb2Nl
c3NHcm91cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW1wb3J0IDxXZWJLaXQyL1dLRm91bmRhdGlvbi5oPgotCi0jaWYgV0tfQVBJX0VOQUJMRUQKLQot
I2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0jaW1wb3J0IDxXZWJLaXQyL1dLQ29u
bmVjdGlvbi5oPgotCi1AY2xhc3MgV0tQcm9jZXNzR3JvdXA7Ci0KLUBwcm90b2NvbCBXS1Byb2Nl
c3NHcm91cERlbGVnYXRlIDxOU09iamVjdD4KLUBvcHRpb25hbAotCi0tIChpZClwcm9jZXNzR3Jv
dXBXaWxsQ3JlYXRlQ29ubmVjdGlvblRvV2ViUHJvY2Vzc1BsdWdJbjooV0tQcm9jZXNzR3JvdXAg
Kilwcm9jZXNzR3JvdXA7Ci0KLUByZXF1aXJlZAotCi0tICh2b2lkKXByb2Nlc3NHcm91cDooV0tQ
cm9jZXNzR3JvdXAgKilwcm9jZXNzR3JvdXAgZGlkQ3JlYXRlQ29ubmVjdGlvblRvV2ViUHJvY2Vz
c1BsdWdJbjooV0tDb25uZWN0aW9uICopY29ubmVjdGlvbjsKLQotQGVuZAotCi1XS19BUElfQ0xB
U1MKLUBpbnRlcmZhY2UgV0tQcm9jZXNzR3JvdXAgOiBOU09iamVjdAotCi0tIChpZClpbml0V2l0
aEluamVjdGVkQnVuZGxlVVJMOihOU1VSTCAqKWJ1bmRsZVVSTDsKLQotCi0jcHJhZ21hIG1hcmsg
RGVsZWdhdGVzCi0KLUBwcm9wZXJ0eSAoYXNzaWduKSBpZCA8V0tQcm9jZXNzR3JvdXBEZWxlZ2F0
ZT4gZGVsZWdhdGU7Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1Byb2Nlc3NHcm91cC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1Byb2Nlc3NHcm91cC5t
bQkocmV2aXNpb24gMTU5ODczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
V0tQcm9jZXNzR3JvdXAubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsMjIxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldLUHJvY2Vzc0dyb3VwSW50ZXJu
YWwuaCIKLQotI2lmIFdLX0FQSV9FTkFCTEVECi0KLSNpbXBvcnQgIkFQSU5hdmlnYXRpb25EYXRh
LmgiCi0jaW1wb3J0ICJPYmpDT2JqZWN0R3JhcGguaCIKLSNpbXBvcnQgIldLQVBJQ2FzdC5oIgot
I2ltcG9ydCAiV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVySW50ZXJuYWwuaCIKLSNpbXBvcnQg
IldLQnJvd3NpbmdDb250ZXh0SGlzdG9yeURlbGVnYXRlLmgiCi0jaW1wb3J0ICJXS0Nvbm5lY3Rp
b25JbnRlcm5hbC5oIgotI2ltcG9ydCAiV0tDb250ZXh0LmgiCi0jaW1wb3J0ICJXS05TU3RyaW5n
LmgiCi0jaW1wb3J0ICJXS05TVVJMLmgiCi0jaW1wb3J0ICJXS05hdmlnYXRpb25EYXRhSW50ZXJu
YWwuaCIKLSNpbXBvcnQgIldLUmV0YWluUHRyLmgiCi0jaW1wb3J0ICJXS1N0cmluZ0NGLmgiCi0j
aW1wb3J0ICJXZWJGcmFtZVByb3h5LmgiCi0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0KLSNp
ZiBQTEFURk9STShJT1MpCi0jaW1wb3J0ICJXS0FQSUNhc3QuaCIKLSNpbXBvcnQgIldLR2VvbG9j
YXRpb25Qcm92aWRlcklPUy5oIgotI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVGhyZWFkU3lzdGVt
SW50ZXJmYWNlLmg+Ci0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQotQGltcGxl
bWVudGF0aW9uIFdLUHJvY2Vzc0dyb3VwIHsKLSAgICBzdGQ6OmFsaWduZWRfc3RvcmFnZTxzaXpl
b2YoV2ViQ29udGV4dCksIHN0ZDo6YWxpZ25tZW50X29mPFdlYkNvbnRleHQ+Ojp2YWx1ZT46OnR5
cGUgX2NvbnRleHQ7Ci0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgUmV0YWluUHRyPFdLR2VvbG9j
YXRpb25Qcm92aWRlcklPUz4gX2dlb2xvY2F0aW9uUHJvdmlkZXI7Ci0jZW5kaWYgLy8gUExBVEZP
Uk0oSU9TKQotfQotCi1zdGF0aWMgdm9pZCBkaWRDcmVhdGVDb25uZWN0aW9uKFdLQ29udGV4dFJl
ZiwgV0tDb25uZWN0aW9uUmVmIGNvbm5lY3Rpb25SZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Ci17Ci0gICAgV0tQcm9jZXNzR3JvdXAgKnByb2Nlc3NHcm91cCA9IChXS1Byb2Nlc3NHcm91cCAq
KWNsaWVudEluZm87Ci0gICAgaWYgKFtwcm9jZXNzR3JvdXAuZGVsZWdhdGUgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3Rvcihwcm9jZXNzR3JvdXA6ZGlkQ3JlYXRlQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzc1BsdWdJbjopXSkgewotICAgICAgICBSZXRhaW5QdHI8V0tDb25uZWN0aW9uPiBjb25uZWN0
aW9uID0gYWRvcHROUyhbW1dLQ29ubmVjdGlvbiBhbGxvY10gX2luaXRXaXRoQ29ubmVjdGlvblJl
Zjpjb25uZWN0aW9uUmVmXSk7Ci0gICAgICAgIFtwcm9jZXNzR3JvdXAuZGVsZWdhdGUgcHJvY2Vz
c0dyb3VwOnByb2Nlc3NHcm91cCBkaWRDcmVhdGVDb25uZWN0aW9uVG9XZWJQcm9jZXNzUGx1Z0lu
OmNvbm5lY3Rpb24uZ2V0KCldOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgc2V0VXBDb25uZWN0
aW9uQ2xpZW50KFdLUHJvY2Vzc0dyb3VwICpwcm9jZXNzR3JvdXAsIFdLQ29udGV4dFJlZiBjb250
ZXh0UmVmKQotewotICAgIFdLQ29udGV4dENvbm5lY3Rpb25DbGllbnQgY29ubmVjdGlvbkNsaWVu
dDsKLSAgICBtZW1zZXQoJmNvbm5lY3Rpb25DbGllbnQsIDAsIHNpemVvZihjb25uZWN0aW9uQ2xp
ZW50KSk7Ci0KLSAgICBjb25uZWN0aW9uQ2xpZW50LnZlcnNpb24gPSBrV0tDb250ZXh0Q29ubmVj
dGlvbkNsaWVudEN1cnJlbnRWZXJzaW9uOwotICAgIGNvbm5lY3Rpb25DbGllbnQuY2xpZW50SW5m
byA9IHByb2Nlc3NHcm91cDsKLSAgICBjb25uZWN0aW9uQ2xpZW50LmRpZENyZWF0ZUNvbm5lY3Rp
b24gPSBkaWRDcmVhdGVDb25uZWN0aW9uOwotCi0gICAgV0tDb250ZXh0U2V0Q29ubmVjdGlvbkNs
aWVudChjb250ZXh0UmVmLCAmY29ubmVjdGlvbkNsaWVudCk7Ci19Ci0KLXN0YXRpYyBXS1R5cGVS
ZWYgZ2V0SW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhKFdLQ29udGV4dFJlZiwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICBXS1Byb2Nlc3NHcm91cCAqcHJvY2Vzc0dy
b3VwID0gKFdLUHJvY2Vzc0dyb3VwICopY2xpZW50SW5mbzsKLSAgICBpZiAoW3Byb2Nlc3NHcm91
cC5kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHByb2Nlc3NHcm91cFdpbGxD
cmVhdGVDb25uZWN0aW9uVG9XZWJQcm9jZXNzUGx1Z0luOildKSB7Ci0gICAgICAgIFJldGFpblB0
cjxpZD4gaW5pdGlhbGl6YXRpb25Vc2VyRGF0YSA9IFtwcm9jZXNzR3JvdXAuZGVsZWdhdGUgcHJv
Y2Vzc0dyb3VwV2lsbENyZWF0ZUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NQbHVnSW46cHJvY2Vzc0dy
b3VwXTsKLSAgICAgICAgUmVmUHRyPFdlYktpdDo6T2JqQ09iamVjdEdyYXBoPiB3a01lc3NhZ2VC
b2R5ID0gV2ViS2l0OjpPYmpDT2JqZWN0R3JhcGg6OmNyZWF0ZShpbml0aWFsaXphdGlvblVzZXJE
YXRhLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIChXS1R5cGVSZWYpd2tNZXNzYWdlQm9keS5yZWxl
YXNlKCkubGVha1JlZigpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9p
ZCBzZXRVcEluZWN0ZWRCdW5kbGVDbGllbnQoV0tQcm9jZXNzR3JvdXAgKnByb2Nlc3NHcm91cCwg
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgV0tDb250ZXh0SW5qZWN0ZWRCdW5kbGVD
bGllbnQgaW5qZWN0ZWRCdW5kbGVDbGllbnQ7Ci0gICAgbWVtc2V0KCZpbmplY3RlZEJ1bmRsZUNs
aWVudCwgMCwgc2l6ZW9mKGluamVjdGVkQnVuZGxlQ2xpZW50KSk7Ci0KLSAgICBpbmplY3RlZEJ1
bmRsZUNsaWVudC52ZXJzaW9uID0ga1dLQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50Q3VycmVu
dFZlcnNpb247Ci0gICAgaW5qZWN0ZWRCdW5kbGVDbGllbnQuY2xpZW50SW5mbyA9IHByb2Nlc3NH
cm91cDsKLSAgICBpbmplY3RlZEJ1bmRsZUNsaWVudC5nZXRJbmplY3RlZEJ1bmRsZUluaXRpYWxp
emF0aW9uVXNlckRhdGEgPSBnZXRJbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGE7
Ci0KLSAgICBXS0NvbnRleHRTZXRJbmplY3RlZEJ1bmRsZUNsaWVudChjb250ZXh0UmVmLCAmaW5q
ZWN0ZWRCdW5kbGVDbGllbnQpOwotfQotCi1zdGF0aWMgdm9pZCBkaWROYXZpZ2F0ZVdpdGhOYXZp
Z2F0aW9uRGF0YShXS0NvbnRleHRSZWYsIFdLUGFnZVJlZiBwYWdlUmVmLCBXS05hdmlnYXRpb25E
YXRhUmVmIG5hdmlnYXRpb25EYXRhUmVmLCBXS0ZyYW1lUmVmIGZyYW1lUmVmLCBjb25zdCB2b2lk
KikKLXsKLSAgICBpZiAoIXRvSW1wbChmcmFtZVJlZiktPmlzTWFpbkZyYW1lKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqY29udHJvbGxlciA9
IFtXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgX2Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJG
b3JQYWdlUmVmOnBhZ2VSZWZdOwotICAgIGlmIChbY29udHJvbGxlci5oaXN0b3J5RGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihicm93c2luZ0NvbnRleHRDb250cm9sbGVyOmRp
ZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhOildKQotICAgICAgICBbY29udHJvbGxlci5oaXN0
b3J5RGVsZWdhdGUgYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjpjb250cm9sbGVyIGRpZE5hdmln
YXRlV2l0aE5hdmlnYXRpb25EYXRhOndyYXBwZXIoKnRvSW1wbChuYXZpZ2F0aW9uRGF0YVJlZikp
XTsKLX0KLQotc3RhdGljIHZvaWQgZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KFdLQ29udGV4dFJl
ZiwgV0tQYWdlUmVmIHBhZ2VSZWYsIFdLVVJMUmVmIHNvdXJjZVVSTFJlZiwgV0tVUkxSZWYgZGVz
dGluYXRpb25VUkxSZWYsIFdLRnJhbWVSZWYgZnJhbWVSZWYsIGNvbnN0IHZvaWQqKQotewotICAg
IGlmICghdG9JbXBsKGZyYW1lUmVmKS0+aXNNYWluRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpjb250cm9sbGVyID0gW1dLQnJvd3Np
bmdDb250ZXh0Q29udHJvbGxlciBfYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckZvclBhZ2VSZWY6
cGFnZVJlZl07Ci0gICAgaWYgKFtjb250cm9sbGVyLmhpc3RvcnlEZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXI6ZGlkUGVyZm9ybUNs
aWVudFJlZGlyZWN0RnJvbVVSTDp0b1VSTDopXSkKLSAgICAgICAgW2NvbnRyb2xsZXIuaGlzdG9y
eURlbGVnYXRlIGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXI6Y29udHJvbGxlciBkaWRQZXJmb3Jt
Q2xpZW50UmVkaXJlY3RGcm9tVVJMOndyYXBwZXIoKnRvSW1wbChzb3VyY2VVUkxSZWYpKSB0b1VS
TDp3cmFwcGVyKCp0b0ltcGwoZGVzdGluYXRpb25VUkxSZWYpKV07Ci19Ci0KLXN0YXRpYyB2b2lk
IGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdChXS0NvbnRleHRSZWYsIFdLUGFnZVJlZiBwYWdlUmVm
LCBXS1VSTFJlZiBzb3VyY2VVUkxSZWYsIFdLVVJMUmVmIGRlc3RpbmF0aW9uVVJMUmVmLCBXS0Zy
YW1lUmVmIGZyYW1lUmVmLCBjb25zdCB2b2lkKikKLXsKLSAgICBpZiAoIXRvSW1wbChmcmFtZVJl
ZiktPmlzTWFpbkZyYW1lKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdLQnJvd3NpbmdDb250
ZXh0Q29udHJvbGxlciAqY29udHJvbGxlciA9IFtXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIg
X2Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJGb3JQYWdlUmVmOnBhZ2VSZWZdOwotICAgIGlmIChb
Y29udHJvbGxlci5oaXN0b3J5RGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihi
cm93c2luZ0NvbnRleHRDb250cm9sbGVyOmRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdEZyb21VUkw6
dG9VUkw6KV0pCi0gICAgICAgIFtjb250cm9sbGVyLmhpc3RvcnlEZWxlZ2F0ZSBicm93c2luZ0Nv
bnRleHRDb250cm9sbGVyOmNvbnRyb2xsZXIgZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0RnJvbVVS
TDp3cmFwcGVyKCp0b0ltcGwoc291cmNlVVJMUmVmKSkgdG9VUkw6d3JhcHBlcigqdG9JbXBsKGRl
c3RpbmF0aW9uVVJMUmVmKSldOwotfQotCi1zdGF0aWMgdm9pZCBkaWRVcGRhdGVIaXN0b3J5VGl0
bGUoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZVJlZiwgV0tTdHJpbmdSZWYgdGl0bGVSZWYs
IFdLVVJMUmVmIHVybFJlZiwgV0tGcmFtZVJlZiBmcmFtZVJlZiwgY29uc3Qgdm9pZCopCi17Ci0g
ICAgaWYgKCF0b0ltcGwoZnJhbWVSZWYpLT5pc01haW5GcmFtZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmNvbnRyb2xsZXIgPSBbV0tCcm93
c2luZ0NvbnRleHRDb250cm9sbGVyIF9icm93c2luZ0NvbnRleHRDb250cm9sbGVyRm9yUGFnZVJl
ZjpwYWdlUmVmXTsKLSAgICBpZiAoW2NvbnRyb2xsZXIuaGlzdG9yeURlbGVnYXRlIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IoYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjpkaWRVcGRhdGVI
aXN0b3J5VGl0bGU6Zm9yVVJMOildKQotICAgICAgICBbY29udHJvbGxlci5oaXN0b3J5RGVsZWdh
dGUgYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjpjb250cm9sbGVyIGRpZFVwZGF0ZUhpc3RvcnlU
aXRsZTp3cmFwcGVyKCp0b0ltcGwodGl0bGVSZWYpKSBmb3JVUkw6d3JhcHBlcigqdG9JbXBsKHVy
bFJlZikpXTsKLX0KLQotc3RhdGljIHZvaWQgc2V0VXBIaXN0b3J5Q2xpZW50KFdLUHJvY2Vzc0dy
b3VwICpwcm9jZXNzR3JvdXAsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQotewotICAgIFdLQ29u
dGV4dEhpc3RvcnlDbGllbnQgaGlzdG9yeUNsaWVudDsKLSAgICBtZW1zZXQoJmhpc3RvcnlDbGll
bnQsIDAsIHNpemVvZihoaXN0b3J5Q2xpZW50KSk7Ci0KLSAgICBoaXN0b3J5Q2xpZW50LnZlcnNp
b24gPSBrV0tDb250ZXh0SGlzdG9yeUNsaWVudEN1cnJlbnRWZXJzaW9uOwotICAgIGhpc3RvcnlD
bGllbnQuY2xpZW50SW5mbyA9IHByb2Nlc3NHcm91cDsKLSAgICBoaXN0b3J5Q2xpZW50LmRpZE5h
dmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhID0gZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGE7
Ci0gICAgaGlzdG9yeUNsaWVudC5kaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QgPSBkaWRQZXJmb3Jt
Q2xpZW50UmVkaXJlY3Q7Ci0gICAgaGlzdG9yeUNsaWVudC5kaWRQZXJmb3JtU2VydmVyUmVkaXJl
Y3QgPSBkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3Q7Ci0gICAgaGlzdG9yeUNsaWVudC5kaWRVcGRh
dGVIaXN0b3J5VGl0bGUgPSBkaWRVcGRhdGVIaXN0b3J5VGl0bGU7Ci0KLSAgICBXS0NvbnRleHRT
ZXRIaXN0b3J5Q2xpZW50KGNvbnRleHRSZWYsICZoaXN0b3J5Q2xpZW50KTsKLX0KLQotLSAoaWQp
aW5pdAotewotICAgIHJldHVybiBbc2VsZiBpbml0V2l0aEluamVjdGVkQnVuZGxlVVJMOm5pbF07
Ci19Ci0KLS0gKGlkKWluaXRXaXRoSW5qZWN0ZWRCdW5kbGVVUkw6KE5TVVJMICopYnVuZGxlVVJM
Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgLy8gRklYTUU6IFJlbW92ZSBvbmNl
IDxyZGFyOi8vcHJvYmxlbS8xNTI1NjU3Mj4gaXMgZml4ZWQuCi0gICAgSW5pdFdlYkNvcmVUaHJl
YWRTeXN0ZW1JbnRlcmZhY2UoKTsKLSNlbmRpZgotCi0gICAgQVBJOjpPYmplY3Q6OmNvbnN0cnVj
dEluV3JhcHBlcjxXZWJDb250ZXh0PihzZWxmLCBidW5kbGVVUkwgPyBTdHJpbmcoW2J1bmRsZVVS
TCBwYXRoXSkgOiBTdHJpbmcoKSk7Ci0KLSAgICBzZXRVcENvbm5lY3Rpb25DbGllbnQoc2VsZiwg
dG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJDb250ZXh0Kj4oJl9jb250ZXh0KSkpOwotICAgIHNl
dFVwSW5lY3RlZEJ1bmRsZUNsaWVudChzZWxmLCB0b0FQSShyZWludGVycHJldF9jYXN0PFdlYkNv
bnRleHQqPigmX2NvbnRleHQpKSk7Ci0gICAgc2V0VXBIaXN0b3J5Q2xpZW50KHNlbGYsIHRvQVBJ
KHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29udGV4dCo+KCZfY29udGV4dCkpKTsKLQotICAgIHJldHVy
biBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICByZWludGVycHJldF9jYXN0PFdl
YkNvbnRleHQqPigmX2NvbnRleHQpLT5+V2ViQ29udGV4dCgpOwotCi0gICAgW3N1cGVyIGRlYWxs
b2NdOwotfQotCi0jcHJhZ21hIG1hcmsgV0tPYmplY3QgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24K
LQotLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKLXsKLSAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QVBJOjpPYmplY3QqPigmX2NvbnRleHQpOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRh
dGlvbiBXS1Byb2Nlc3NHcm91cCAoUHJpdmF0ZSkKLQotLSAoV0tDb250ZXh0UmVmKV9jb250ZXh0
UmVmCi17Ci0gICAgcmV0dXJuIHRvQVBJKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29udGV4dCo+KCZf
Y29udGV4dCkpOwotfQotCi0jaWYgUExBVEZPUk0oSU9TKQotLSAoV0tHZW9sb2NhdGlvblByb3Zp
ZGVySU9TICopX2dlb2xvY2F0aW9uUHJvdmlkZXIKLXsKLSAgICBpZiAoIV9nZW9sb2NhdGlvblBy
b3ZpZGVyKQotICAgICAgICBfZ2VvbG9jYXRpb25Qcm92aWRlciA9IGFkb3B0TlMoW1tXS0dlb2xv
Y2F0aW9uUHJvdmlkZXJJT1MgYWxsb2NdIGluaXRXaXRoQ29udGV4dDpyZWludGVycHJldF9jYXN0
PFdlYkNvbnRleHQqPigmX2NvbnRleHQpXSk7Ci0gICAgcmV0dXJuIF9nZW9sb2NhdGlvblByb3Zp
ZGVyLmdldCgpOwotfQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKLQotQGVuZAotCi0jZW5kaWYg
Ly8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1dLUHJvY2Vzc0dyb3VwSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9XS1Byb2Nlc3NHcm91cEludGVybmFsLmgJKHJldmlzaW9uIDE1OTg3
MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJvY2Vzc0dyb3VwSW50
ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lt
cG9ydCAiV0tQcm9jZXNzR3JvdXBQcml2YXRlLmgiCi0KLSNpZiBXS19BUElfRU5BQkxFRAotCi0j
aW1wb3J0ICJXS09iamVjdC5oIgotI2ltcG9ydCAiV2ViQ29udGV4dC5oIgotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotaW5saW5lIFdLUHJvY2Vzc0dyb3VwICp3cmFwcGVyKFdlYkNvbnRleHQmIGNv
bnRleHQpCi17Ci0gICAgQVNTRVJUKFtjb250ZXh0LndyYXBwZXIoKSBpc0tpbmRPZkNsYXNzOltX
S1Byb2Nlc3NHcm91cCBjbGFzc11dKTsKLSAgICByZXR1cm4gKFdLUHJvY2Vzc0dyb3VwICopY29u
dGV4dC53cmFwcGVyKCk7Ci19Ci0KLX0KLQotQGludGVyZmFjZSBXS1Byb2Nlc3NHcm91cCAoKSA8
V0tPYmplY3Q+Ci1AZW5kCi0KLSNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcm9jZXNzR3JvdXBQcml2YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcm9jZXNzR3JvdXBQ
cml2YXRlLmgJKHJldmlzaW9uIDE1OTg3MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1dLUHJvY2Vzc0dyb3VwUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0IDxXZWJLaXQyL1dLUHJvY2Vzc0dyb3VwLmg+Ci0K
LSNpZiBXS19BUElfRU5BQkxFRAotCi0jaW1wb3J0IDxXZWJLaXQyL1dLQmFzZS5oPgotCi0jaWYg
VEFSR0VUX09TX0lQSE9ORQotQGNsYXNzIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUzsKLSNlbmRp
ZgotCi1AaW50ZXJmYWNlIFdLUHJvY2Vzc0dyb3VwIChQcml2YXRlKQotCi1AcHJvcGVydHkocmVh
ZG9ubHkpIFdLQ29udGV4dFJlZiBfY29udGV4dFJlZjsKLSNpZiBUQVJHRVRfT1NfSVBIT05FCi1A
cHJvcGVydHkocmVhZG9ubHkpIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUyAqX2dlb2xvY2F0aW9u
UHJvdmlkZXI7Ci0jZW5kaWYKLQotQGVuZAotCi0jZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVHlwZVJlZldyYXBwZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1R5cGVSZWZX
cmFwcGVyLmgJKHJldmlzaW9uIDE1OTg3MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1dLVHlwZVJlZldyYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0MiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2ltcG9ydCA8V2ViS2l0Mi9XS0ZvdW5kYXRpb24uaD4KLQotI2lmIFdL
X0FQSV9FTkFCTEVECi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotI2ltcG9y
dCA8V2ViS2l0Mi9XS0Jhc2UuaD4KLQotV0tfQVBJX0NMQVNTCi1AaW50ZXJmYWNlIFdLVHlwZVJl
ZldyYXBwZXIgOiBOU09iamVjdAotCi0tIChpZClpbml0V2l0aE9iamVjdDooV0tUeXBlUmVmKW9i
amVjdDsKLQotQHByb3BlcnR5KHJlYWRvbmx5KSBXS1R5cGVSZWYgb2JqZWN0OwotCi1AZW5kCi0K
LSNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvV0tUeXBlUmVmV3JhcHBlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1R5cGVSZWZXcmFwcGVyLm1tCShyZXZpc2lvbiAxNTk4NzMp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1R5cGVSZWZXcmFwcGVyLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIldLVHlwZVJlZldyYXBwZXIuaCIKLQotI2lmIFdLX0FQSV9FTkFC
TEVECi0KLSNpbXBvcnQgIldLUmV0YWluUHRyLmgiCi0KLUBpbnRlcmZhY2UgV0tUeXBlUmVmV3Jh
cHBlciAoKSB7Ci0gICAgLy8gVW5kZXJseWluZyBXS1R5cGVSZWYuCi0gICAgV0tSZXRhaW5QdHI8
V0tUeXBlUmVmPiBfb2JqZWN0OwotfQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tUeXBlUmVm
V3JhcHBlcgotCi0tIChpZClpbml0V2l0aE9iamVjdDooV0tUeXBlUmVmKW9iamVjdAotewotICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmls
OwotCi0gICAgX29iamVjdCA9IG9iamVjdDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChX
S1R5cGVSZWYpb2JqZWN0Ci17Ci0gICAgcmV0dXJuIF9vYmplY3QuZ2V0KCk7Ci19Ci0KLUBlbmQK
LQotI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL21hYy9XS1ZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL21hYy9XS1ZpZXcuaAkocmV2aXNpb24gMTU5ODczKQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbXBvcnQgPFdlYktpdDIvV0tGb3VuZGF0aW9uLmg+Ci0KLSNpZiBU
QVJHRVRfT1NfSVBIT05FCi0jaW1wb3J0IDxVSUtpdC9VSUtpdC5oPgotI2Vsc2UKLSNpbXBvcnQg
PENvY29hL0NvY29hLmg+Ci0jZW5kaWYKLSNpbXBvcnQgPFdlYktpdDIvV0tEZWNsYXJhdGlvblNw
ZWNpZmllcnMuaD4KLQotQGNsYXNzIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjsKLUBjbGFz
cyBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwOwotQGNsYXNzIFdLUHJvY2Vzc0dyb3VwOwotQGNsYXNz
IFdLVmlld0RhdGE7Ci0KLSNpZiBUQVJHRVRfT1NfSVBIT05FCi1XS19FWFBPUlQKLUBpbnRlcmZh
Y2UgV0tWaWV3IDogVUlWaWV3IHsKLSNlbHNlCi1XS19FWFBPUlQKLUBpbnRlcmZhY2UgV0tWaWV3
IDogTlNWaWV3IDxOU1RleHRJbnB1dENsaWVudD4gewotI2VuZGlmCi1AcHJpdmF0ZQotICAgIFdL
Vmlld0RhdGEgKl9kYXRhOwotICAgIHVuc2lnbmVkIF91bnVzZWQ7Ci19Ci0KLSNpZiBXS19BUElf
RU5BQkxFRAotCi0jaWYgVEFSR0VUX09TX0lQSE9ORQotLSAoaWQpaW5pdFdpdGhGcmFtZTooQ0dS
ZWN0KWZyYW1lIHByb2Nlc3NHcm91cDooV0tQcm9jZXNzR3JvdXAgKilwcm9jZXNzR3JvdXAgYnJv
d3NpbmdDb250ZXh0R3JvdXA6KFdLQnJvd3NpbmdDb250ZXh0R3JvdXAgKilicm93c2luZ0NvbnRl
eHRHcm91cDsKLS0gKGlkKWluaXRXaXRoRnJhbWU6KENHUmVjdClmcmFtZSBwcm9jZXNzR3JvdXA6
KFdLUHJvY2Vzc0dyb3VwICopcHJvY2Vzc0dyb3VwIGJyb3dzaW5nQ29udGV4dEdyb3VwOihXS0Jy
b3dzaW5nQ29udGV4dEdyb3VwICopYnJvd3NpbmdDb250ZXh0R3JvdXAgcmVsYXRlZFRvVmlldzoo
V0tWaWV3ICopcmVsYXRlZFZpZXc7Ci0jZWxzZQotLSAoaWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0
KWZyYW1lIHByb2Nlc3NHcm91cDooV0tQcm9jZXNzR3JvdXAgKilwcm9jZXNzR3JvdXAgYnJvd3Np
bmdDb250ZXh0R3JvdXA6KFdLQnJvd3NpbmdDb250ZXh0R3JvdXAgKilicm93c2luZ0NvbnRleHRH
cm91cDsKLS0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBwcm9jZXNzR3JvdXA6KFdL
UHJvY2Vzc0dyb3VwICopcHJvY2Vzc0dyb3VwIGJyb3dzaW5nQ29udGV4dEdyb3VwOihXS0Jyb3dz
aW5nQ29udGV4dEdyb3VwICopYnJvd3NpbmdDb250ZXh0R3JvdXAgcmVsYXRlZFRvVmlldzooV0tW
aWV3ICopcmVsYXRlZFZpZXc7Ci0jZW5kaWYKLQotQHByb3BlcnR5KHJlYWRvbmx5KSBXS0Jyb3dz
aW5nQ29udGV4dENvbnRyb2xsZXIgKmJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXI7Ci0KLSNlbmRp
ZiAvLyBXS19BUElfRU5BQkxFRAotCi1AcHJvcGVydHkgQk9PTCBkcmF3c0JhY2tncm91bmQ7Ci1A
cHJvcGVydHkgQk9PTCBkcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZDsKLQotQGVuZApJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3UHJpdmF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld1ByaXZhdGUuaAko
cmV2aXNpb24gMTU5ODczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tW
aWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW1wb3J0IDxXZWJLaXQyL1dLQmFzZS5oPgotI2ltcG9ydCA8V2ViS2l0Mi9XS1ZpZXcuaD4K
LQotI2lmICFUQVJHRVRfT1NfSVBIT05FCi0KLXR5cGVkZWYgZW51bSB7Ci0gICAgV0tDb250ZW50
QW5jaG9yVG9wTGVmdCwKLSAgICBXS0NvbnRlbnRBbmNob3JUb3BSaWdodCwKLSAgICBXS0NvbnRl
bnRBbmNob3JCb3R0b21MZWZ0LAotICAgIFdLQ29udGVudEFuY2hvckJvdHRvbVJpZ2h0LAotfSBX
S0NvbnRlbnRBbmNob3I7Ci0KLSNlbmRpZgotCi1AaW50ZXJmYWNlIFdLVmlldyAoUHJpdmF0ZSkK
LQotLyogQyBTUEkgc3VwcG9ydC4gKi8KLQotQHByb3BlcnR5IChyZWFkb25seSkgV0tQYWdlUmVm
IHBhZ2VSZWY7Ci0KLSNpZiBUQVJHRVRfT1NfSVBIT05FCi0tIChpZClpbml0V2l0aEZyYW1lOihD
R1JlY3QpZnJhbWUgY29udGV4dFJlZjooV0tDb250ZXh0UmVmKWNvbnRleHRSZWYgcGFnZUdyb3Vw
UmVmOihXS1BhZ2VHcm91cFJlZilwYWdlR3JvdXBSZWY7Ci0tIChpZClpbml0V2l0aEZyYW1lOihD
R1JlY3QpZnJhbWUgY29udGV4dFJlZjooV0tDb250ZXh0UmVmKWNvbnRleHRSZWYgcGFnZUdyb3Vw
UmVmOihXS1BhZ2VHcm91cFJlZilwYWdlR3JvdXBSZWYgcmVsYXRlZFRvUGFnZTooV0tQYWdlUmVm
KXJlbGF0ZWRQYWdlOwotI2Vsc2UKLS0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBj
b250ZXh0UmVmOihXS0NvbnRleHRSZWYpY29udGV4dFJlZiBwYWdlR3JvdXBSZWY6KFdLUGFnZUdy
b3VwUmVmKXBhZ2VHcm91cFJlZjsKLS0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBj
b250ZXh0UmVmOihXS0NvbnRleHRSZWYpY29udGV4dFJlZiBwYWdlR3JvdXBSZWY6KFdLUGFnZUdy
b3VwUmVmKXBhZ2VHcm91cFJlZiByZWxhdGVkVG9QYWdlOihXS1BhZ2VSZWYpcmVsYXRlZFBhZ2U7
Ci0jZW5kaWYKLQotI2lmICFUQVJHRVRfT1NfSVBIT05FCi0KLUBwcm9wZXJ0eSBXS0NvbnRlbnRB
bmNob3IgY29udGVudEFuY2hvcjsKLQotLSAoTlNQcmludE9wZXJhdGlvbiAqKXByaW50T3BlcmF0
aW9uV2l0aFByaW50SW5mbzooTlNQcmludEluZm8gKilwcmludEluZm8gZm9yRnJhbWU6KFdLRnJh
bWVSZWYpZnJhbWVSZWY7Ci0tIChCT09MKWNhbkNoYW5nZUZyYW1lTGF5b3V0OihXS0ZyYW1lUmVm
KWZyYW1lUmVmOwotCi0tICh2b2lkKXNldEZyYW1lOihOU1JlY3QpcmVjdCBhbmRTY3JvbGxCeToo
TlNTaXplKW9mZnNldDsKLQotLy8gU3RvcHMgdXBkYXRpbmcgdGhlIHNpemUgb2YgdGhlIHBhZ2Ug
YXMgdGhlIFdLVmlldyBmcmFtZSBzaXplIHVwZGF0ZXMuCi0vLyBUaGlzIHNob3VsZCBhbHdheXMg
YmUgZm9sbG93ZWQgYnkgZW5hYmxlRnJhbWVTaXplVXBkYXRlcy4gQ2FsbHMgY2FuIGJlIG5lc3Rl
ZC4KLS0gKHZvaWQpZGlzYWJsZUZyYW1lU2l6ZVVwZGF0ZXM7Ci0vLyBJbW1lZGlhdGVseSB1cGRh
dGVzIHRoZSBzaXplIG9mIHRoZSBwYWdlIHRvIG1hdGNoIFdLVmlldydzIGZyYW1lIHNpemUKLS8v
IGFuZCBhbGxvd3Mgc3Vic2VxdWVudCB1cGRhdGVzIGFzIHRoZSBmcmFtZSBzaXplIGlzIHNldC4g
Q2FsbHMgY2FuIGJlIG5lc3RlZC4KLS0gKHZvaWQpZW5hYmxlRnJhbWVTaXplVXBkYXRlczsKLS0g
KEJPT0wpZnJhbWVTaXplVXBkYXRlc0Rpc2FibGVkOwotCi0tICh2b2lkKXBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwQXRDdXJyZW50TW91c2VMb2NhdGlvbjsKLSsgKHZvaWQpaGlkZVdvcmREZWZpbml0
aW9uV2luZG93OwotCi1AcHJvcGVydHkgKHJlYWR3cml0ZSkgQ0dGbG9hdCBtaW5pbXVtTGF5b3V0
V2lkdGg7Ci1AcHJvcGVydHkgKHJlYWR3cml0ZSkgQ0dGbG9hdCBtaW5pbXVtV2lkdGhGb3JBdXRv
TGF5b3V0OwotQHByb3BlcnR5IChyZWFkd3JpdGUpIE5TU2l6ZSBtaW5pbXVtU2l6ZUZvckF1dG9M
YXlvdXQ7Ci1AcHJvcGVydHkgKHJlYWR3cml0ZSkgQk9PTCBzaG91bGRDbGlwVG9WaXNpYmxlUmVj
dDsKLUBwcm9wZXJ0eSAocmVhZHdyaXRlKSBCT09MIHNob3VsZEV4cGFuZFRvVmlld0hlaWdodEZv
ckF1dG9MYXlvdXQ7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBnZXR0ZXI9aXNVc2luZ1VJU2lkZUNv
bXBvc2l0aW5nKSBCT09MIHVzaW5nVUlTaWRlQ29tcG9zaXRpbmc7Ci0KLUBwcm9wZXJ0eShjb3B5
LCBub25hdG9taWMpIE5TQ29sb3IgKnVuZGVybGF5Q29sb3I7Ci0KLS0gKE5TVmlldyopZnVsbFNj
cmVlblBsYWNlaG9sZGVyVmlldzsKLS0gKE5TV2luZG93KiljcmVhdGVGdWxsU2NyZWVuV2luZG93
OwotCi0tICh2b2lkKWJlZ2luRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlczsKLS0gKHZvaWQp
ZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlczsKLS0gKHZvaWQpZW5kRGVmZXJyaW5nVmll
d0luV2luZG93Q2hhbmdlc1N5bmM7Ci0tIChCT09MKWlzRGVmZXJyaW5nVmlld0luV2luZG93Q2hh
bmdlczsKLQotLSAoQk9PTCl3aW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkOwotLSAodm9p
ZClzZXRXaW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkOihCT09MKWZsYWc7Ci0KLS0gKHZv
aWQpZm9yY2VBc3luY0RyYXdpbmdBcmVhU2l6ZVVwZGF0ZTooTlNTaXplKXNpemU7Ci0tICh2b2lk
KXdhaXRGb3JBc3luY0RyYXdpbmdBcmVhU2l6ZVVwZGF0ZTsKLQotI2VuZGlmCi0KLUBlbmQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dlYktpdDIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XZWJLaXQyLmgJKHJldmlzaW9u
IDE1OTg3MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dlYktpdDIuaAko
d29ya2luZyBjb3B5KQpAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCA8V2Vi
S2l0Mi9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPFdlYktpdDIvV0tC
cm93c2luZ0NvbnRleHRHcm91cC5oPgotI2ltcG9ydCA8V2ViS2l0Mi9XS0Jyb3dzaW5nQ29udGV4
dExvYWREZWxlZ2F0ZS5oPgotI2ltcG9ydCA8V2ViS2l0Mi9XS0Jyb3dzaW5nQ29udGV4dFBvbGlj
eURlbGVnYXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQyL1dLQ29ubmVjdGlvbi5oPgotI2ltcG9ydCA8
V2ViS2l0Mi9XS0ZvdW5kYXRpb24uaD4KLSNpbXBvcnQgPFdlYktpdDIvV0tQcm9jZXNzR3JvdXAu
aD4KLSNpbXBvcnQgPFdlYktpdDIvV0tWaWV3Lmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTk4NzMpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTQzMyw3ICs0MzMsNiBAQAogCQkzNzdFQUQ0NTE3RTJDNTFBMDAyRDE5M0Qg
LyogV0tEZWNsYXJhdGlvblNwZWNpZmllcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDM3N0VBRDQ0MTdFMkM1MUEwMDJEMTkzRCAvKiBXS0RlY2xhcmF0
aW9uU3BlY2lmaWVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsg
fTsgfTsKIAkJMzc3RUFENDgxN0UyQzc3QjAwMkQxOTNEIC8qIFdLVXNlckNvbnRlbnRJbmplY3Rl
ZEZyYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Mzc3RUFENDYxN0UyQzc3QjAwMkQxOTNEIC8qIFdLVXNlckNvbnRlbnRJbmplY3RlZEZyYW1lcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJMzc3RUFE
NDkxN0UyQzc3QjAwMkQxOTNEIC8qIFdLVXNlclNjcmlwdEluamVjdGlvblRpbWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3N0VBRDQ3MTdFMkM3N0Iw
MDJEMTkzRCAvKiBXS1VzZXJTY3JpcHRJbmplY3Rpb25UaW1lLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwotCQkzNzg4QTA1QzE0NzQzQzkwMDA2MzE5RTUg
LyogV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc4OEEwNUIxNDc0M0M5MDAwNjMxOUU1IC8q
IFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlclByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzNzhFMUEzRDE4MUVENkZGMDAzMTAwN0Eg
LyogQVBJT2JqZWN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzc4RTFBM0IxODFFRDZGRjAwMzEwMDdBIC8qIEFQSU9iamVjdC5tbSAqLzsgfTsKIAkJ
Mzc4RTFBNDAxODFFREEwMTAwMzEwMDdBIC8qIFdLT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzhFMUEzRjE4MUVEQTAxMDAzMTAwN0EgLyog
V0tPYmplY3QuaCAqLzsgfTsKIAkJMzc4RTFBNDkxODIwOENENjAwMzEwMDdBIC8qIFdLTlNTdHJp
bmcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzhF
MUE0NzE4MjA4Q0Q2MDAzMTAwN0EgLyogV0tOU1N0cmluZy5tbSAqLzsgfTsKQEAgLTY4NywxMyAr
Njg2LDMyIEBACiAJCTdDMTM1QUE4MTczQjBCQ0EwMDU4NkFFMiAvKiBXS1BsdWdpbkluZm9ybWF0
aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
MTM1QUE2MTczQjBCQ0EwMDU4NkFFMiAvKiBXS1BsdWdpbkluZm9ybWF0aW9uLmNwcCAqLzsgfTsK
IAkJN0MxMzVBQTkxNzNCMEJDQTAwNTg2QUUyIC8qIFdLUGx1Z2luSW5mb3JtYXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTM1QUE3MTczQjBC
Q0EwMDU4NkFFMiAvKiBXS1BsdWdpbkluZm9ybWF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MxMzVBQUMxNzNCMENGRjAwNTg2QUUyIC8q
IFBsdWdpbkluZm9ybWF0aW9uTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0MxMzVBQUExNzNCMENGRjAwNTg2QUUyIC8qIFBsdWdpbkluZm9ybWF0
aW9uTWFjLm1tICovOyB9OwotCQk3QzFGQjNDMDE4NDZBRUZDMDAxQTAzRDggLyogV0tQcm9jZXNz
R3JvdXBJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0MxRkIzQkYxODQ2QUVGQzAwMUEwM0Q4IC8qIFdLUHJvY2Vzc0dyb3VwSW50ZXJuYWwu
aCAqLzsgfTsKKwkJN0MxRkIzRTUxODQ5MUI4MjAwMUEwM0Q4IC8qIFdlYktpdDIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMUZCM0NGMTg0OTFCODIw
MDFBMDNEOCAvKiBXZWJLaXQyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGlj
LCApOyB9OyB9OworCQk3QzFGQjNFNjE4NDkxQjgyMDAxQTAzRDggLyogV0tCcm93c2luZ0NvbnRl
eHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3QzFGQjNEMDE4NDkxQjgyMDAxQTAzRDggLyogV0tCcm93c2luZ0NvbnRleHRDb250cm9s
bGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQk3
QzFGQjNFNzE4NDkxQjgyMDAxQTAzRDggLyogV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MxRkIzRDEx
ODQ5MUI4MjAwMUEwM0Q4IC8qIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5tbSAqLzsgfTsK
KwkJN0MxRkIzRTgxODQ5MUI4MjAwMUEwM0Q4IC8qIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxl
ckludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QzFGQjNEMjE4NDkxQjgyMDAxQTAzRDggLyogV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVy
SW50ZXJuYWwuaCAqLzsgfTsKKwkJN0MxRkIzRTkxODQ5MUI4MjAwMUEwM0Q4IC8qIFdLQnJvd3Np
bmdDb250ZXh0Q29udHJvbGxlclByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdDMUZCM0QzMTg0OTFCODIwMDFBMDNEOCAvKiBXS0Jyb3dzaW5n
Q29udGV4dENvbnRyb2xsZXJQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0MxRkIzRUExODQ5MUI4MjAwMUEwM0Q4IC8qIFdLQnJvd3Np
bmdDb250ZXh0R3JvdXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDMUZCM0Q0MTg0OTFCODIwMDFBMDNEOCAvKiBXS0Jyb3dzaW5nQ29udGV4dEdyb3Vw
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQk3QzFG
QjNFQjE4NDkxQjgyMDAxQTAzRDggLyogV0tCcm93c2luZ0NvbnRleHRHcm91cC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMUZCM0Q1MTg0OTFCODIw
MDFBMDNEOCAvKiBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwLm1tICovOyB9OworCQk3QzFGQjNFQzE4
NDkxQjgyMDAxQTAzRDggLyogV0tCcm93c2luZ0NvbnRleHRHcm91cEludGVybmFsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzFGQjNENjE4NDkxQjgy
MDAxQTAzRDggLyogV0tCcm93c2luZ0NvbnRleHRHcm91cEludGVybmFsLmggKi87IH07CisJCTdD
MUZCM0VEMTg0OTFCODIwMDFBMDNEOCAvKiBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MxRkIzRDcx
ODQ5MUI4MjAwMUEwM0Q4IC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXBQcml2YXRlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0MxRkIzRUUxODQ5
MUI4MjAwMUEwM0Q4IC8qIFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzFGQjNEODE4NDkxQjgyMDAx
QTAzRDggLyogV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTdDMUZCM0VGMTg0OTFCODIwMDFBMDNE
OCAvKiBXS0Jyb3dzaW5nQ29udGV4dFBvbGljeURlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzFGQjNEOTE4NDkxQjgyMDAxQTAzRDggLyog
V0tCcm93c2luZ0NvbnRleHRQb2xpY3lEZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJN0MxRkIzRjAxODQ5MUI4MjAwMUEwM0Q4IC8qIFdL
Q29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0MxRkIzREExODQ5MUI4MjAwMUEwM0Q4IC8qIFdLQ29ubmVjdGlvbi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJN0MxRkIzRjExODQ5MUI4MjAw
MUEwM0Q4IC8qIFdLQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDMUZCM0RCMTg0OTFCODIwMDFBMDNEOCAvKiBXS0Nvbm5lY3Rpb24u
bW0gKi87IH07CisJCTdDMUZCM0YyMTg0OTFCODIwMDFBMDNEOCAvKiBXS0Nvbm5lY3Rpb25JbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0Mx
RkIzREMxODQ5MUI4MjAwMUEwM0Q4IC8qIFdLQ29ubmVjdGlvbkludGVybmFsLmggKi87IH07CisJ
CTdDMUZCM0YzMTg0OTFCODIwMDFBMDNEOCAvKiBXS1Byb2Nlc3NHcm91cC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MxRkIzREQxODQ5MUI4MjAwMUEw
M0Q4IC8qIFdLUHJvY2Vzc0dyb3VwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVi
bGljLCApOyB9OyB9OworCQk3QzFGQjNGNDE4NDkxQjgyMDAxQTAzRDggLyogV0tQcm9jZXNzR3Jv
dXAubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzFG
QjNERTE4NDkxQjgyMDAxQTAzRDggLyogV0tQcm9jZXNzR3JvdXAubW0gKi87IH07CisJCTdDMUZC
M0Y1MTg0OTFCODIwMDFBMDNEOCAvKiBXS1Byb2Nlc3NHcm91cEludGVybmFsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzFGQjNERjE4NDkxQjgyMDAx
QTAzRDggLyogV0tQcm9jZXNzR3JvdXBJbnRlcm5hbC5oICovOyB9OworCQk3QzFGQjNGNjE4NDkx
QjgyMDAxQTAzRDggLyogV0tQcm9jZXNzR3JvdXBQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzFGQjNFMDE4NDkxQjgyMDAxQTAzRDggLyog
V0tQcm9jZXNzR3JvdXBQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJN0MxRkIzRjcxODQ5MUI4MjAwMUEwM0Q4IC8qIFdLVHlwZVJlZldy
YXBwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
MUZCM0UxMTg0OTFCODIwMDFBMDNEOCAvKiBXS1R5cGVSZWZXcmFwcGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0MxRkIzRjgxODQ5MUI4MjAw
MUEwM0Q4IC8qIFdLVHlwZVJlZldyYXBwZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QzFGQjNFMjE4NDkxQjgyMDAxQTAzRDggLyogV0tUeXBlUmVm
V3JhcHBlci5tbSAqLzsgfTsKKwkJN0MxRkIzRjkxODQ5MUI4MjAwMUEwM0Q4IC8qIFdLVmlldy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MxRkIzRTMx
ODQ5MUI4MjAwMUEwM0Q4IC8qIFdLVmlldy5oICovOyB9OworCQk3QzFGQjNGQTE4NDkxQjgyMDAx
QTAzRDggLyogV0tWaWV3UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0MxRkIzRTQxODQ5MUI4MjAwMUEwM0Q4IC8qIFdLVmlld1ByaXZhdGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzM4
NzQzNDE3MkY1NjE1MDAxQkQ4OEEgLyogUGFnZUJhbm5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzM4NzQzMzE3MkY1NjE1MDAxQkQ4OEEgLyog
UGFnZUJhbm5lci5jcHAgKi87IH07CiAJCTdDM0Y4QzkwMTczQUY1MkQwMDdCN0YzOSAvKiBQbHVn
aW5JbmZvcm1hdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QzNGOEM4RTE3M0FGNTJEMDA3QjdGMzkgLyogUGx1Z2luSW5mb3JtYXRpb24uY3Bw
ICovOyB9OwogCQk3QzNGOEM5MTE3M0FGNTJEMDA3QjdGMzkgLyogUGx1Z2luSW5mb3JtYXRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDM0Y4QzhG
MTczQUY1MkQwMDdCN0YzOSAvKiBQbHVnaW5JbmZvcm1hdGlvbi5oICovOyB9OwogCQk3QzZEMzdG
QzE3MkY1NTVGMDA5RDI4NDcgLyogUGFnZUJhbm5lck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNkQzN0ZBMTcyRjU1NUYwMDlEMjg0NyAvKiBQ
YWdlQmFubmVyTWFjLm1tICovOyB9OwotCQk3QzlEMTUzNzE4NDU4NERBMDA5RDM5MTggLyogV0tC
cm93c2luZ0NvbnRleHRHcm91cEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QzlEMTUzNjE4NDU4NERBMDA5RDM5MTggLyogV0tCcm93c2lu
Z0NvbnRleHRHcm91cEludGVybmFsLmggKi87IH07Ci0JCTdDQTI1NEVCMTgyOTkzQ0UwMEZDOEE0
MSAvKiBXS0Jyb3dzaW5nQ29udGV4dFBvbGljeURlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0EyNTRFQTE4Mjk5M0NFMDBGQzhBNDEgLyog
V0tCcm93c2luZ0NvbnRleHRQb2xpY3lEZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJN0NCMTZGRUYxNzI0QkEyMzAwN0EwQTk1IC8qIGNv
bS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0LndlYnBsdWdpbi5zYiBpbiBDb3B5IFBsdWctaW4g
U2FuZGJveCBQcm9maWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0Ix
NkZFMjE3MjRCOUI1MDA3QTBBOTUgLyogY29tLmFwcGxlLmlzdC5kcy5hcHBsZWNvbm5lY3Qud2Vi
cGx1Z2luLnNiICovOyB9OwogCQk3Q0IxNkZGMDE3MjRCQTI0MDA3QTBBOTUgLyogY29tLmFwcGxl
LlF1aWNrVGltZSBQbHVnaW4ucGx1Z2luLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2Zp
bGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQjE2RkUzMTcyNEI5QjUw
MDdBMEE5NSAvKiBjb20uYXBwbGUuUXVpY2tUaW1lIFBsdWdpbi5wbHVnaW4uc2IgKi87IH07CiAJ
CTdDQjE2RkYxMTcyNEJBMjYwMDdBMEE5NSAvKiBjb20uYXBwbGUuV2ViS2l0LnBsdWdpbi1jb21t
b24uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0NCMTZGRTQxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5hcHBsZS5X
ZWJLaXQucGx1Z2luLWNvbW1vbi5zYiAqLzsgfTsKQEAgLTcwMyw4ICs3MjEsNiBAQAogCQk3Q0Q1
RUJCODE3NDZBMTVCMDAwQzFDNDUgLyogV0tPYmpDVHlwZVdyYXBwZXJSZWYubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0Q1RUJCNjE3NDZBMTVCMDAw
QzFDNDUgLyogV0tPYmpDVHlwZVdyYXBwZXJSZWYubW0gKi87IH07CiAJCTdDRDVFQkI5MTc0NkEx
NUIwMDBDMUM0NSAvKiBXS09iakNUeXBlV3JhcHBlclJlZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NENUVCQjcxNzQ2QTE1QjAwMEMxQzQ1IC8qIFdL
T2JqQ1R5cGVXcmFwcGVyUmVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJN0NENUVCQkIxNzQ2QTgzRTAwMEMxQzQ1IC8qIFdLQmFzZU1hYy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NENUVCQkExNzQ2
QTgzRTAwMEMxQzQ1IC8qIFdLQmFzZU1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTdDRDVFQkJFMTc0NkIwNEMwMDBDMUM0NSAvKiBXS1R5cGVS
ZWZXcmFwcGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0NENUVCQkMxNzQ2QjA0QzAwMEMxQzQ1IC8qIFdLVHlwZVJlZldyYXBwZXIubW0gKi87IH07
Ci0JCTdDRDVFQkJGMTc0NkIwNEMwMDBDMUM0NSAvKiBXS1R5cGVSZWZXcmFwcGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0Q1RUJCRDE3NDZCMDRD
MDAwQzFDNDUgLyogV0tUeXBlUmVmV3JhcHBlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDRDYyMjc3MTczOUQ4NjMwMDVCRDdGRiAvKiBQbHVn
aW5TYW5kYm94UHJvZmlsZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDRDYyMjc1MTczOUQ4NjMwMDVCRDdGRiAvKiBQbHVnaW5TYW5kYm94UHJvZmls
ZS5tbSAqLzsgfTsKIAkJN0NENjIyNzgxNzM5RDg2MzAwNUJEN0ZGIC8qIFBsdWdpblNhbmRib3hQ
cm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
Q0Q2MjI3NjE3MzlEODYzMDA1QkQ3RkYgLyogUGx1Z2luU2FuZGJveFByb2ZpbGUuaCAqLzsgfTsK
IAkJN0NGNDdGRjYxNzI3NUI3MTAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0Y0N0ZGNDE3Mjc1
QjcxMDA4QUNCOTEgLyogV0tCdW5kbGVQYWdlQmFubmVyLmNwcCAqLzsgfTsKQEAgLTkyOSw5ICs5
NDUsNyBAQAogCQlCQzU3NTA5ODEyNjhGM0M2MDA2RjBGMTIgLyogV2ViUG9wdXBNZW51UHJveHlN
YWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzU3
NTA5NjEyNjhGM0M2MDA2RjBGMTIgLyogV2ViUG9wdXBNZW51UHJveHlNYWMubW0gKi87IH07CiAJ
CUJDNTc1NjEzMTI2RTAxMzgwMDZGMEYxMiAvKiBXZWJFcnJvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzU3NTYxMjEyNkUwMTM4MDA2RjBGMTIg
LyogV2ViRXJyb3IuY3BwICovOyB9OwogCQlCQzU5NTM0MjEwRkMwNDUyMDA5OEY4MkQgLyogV2Vi
TG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzU5NTM0MDEwRkMwNDUyMDA5OEY4MkQgLyogV2ViTG9hZGVyQ2xpZW50LmggKi87IH07
Ci0JCUJDNTk1NDg5MTVDNzg2ODUwMEZEMUUzRSAvKiBXZWJLaXQyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzU5NTQ4ODE1Qzc4Njg1MDBGRDFFM0Ug
LyogV2ViS2l0Mi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsg
fTsKIAkJQkM1OTcwNzUxMTY1OTFEMDAwNTUxRkNBIC8qIFByb2Nlc3NNb2RlbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1OTcwNzQxMTY1OTFEMDAw
NTUxRkNBIC8qIFByb2Nlc3NNb2RlbC5oICovOyB9OwotCQlCQzVDNzVDODE0OTU0REE2MDBCQzQ3
NzUgLyogV0tDb25uZWN0aW9uSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDNUM3NUM2MTQ5NTREQTYwMEJDNDc3NSAvKiBXS0Nvbm5lY3Rp
b25JbnRlcm5hbC5oICovOyB9OwogCQlCQzVEMjRBMTE2Q0MzQjlFMDA3RDU0NjEgLyogQ2hpbGRQ
cm9jZXNzTWFpbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDNUQyNDlGMTZDQzNCOUUwMDdENTQ2MSAvKiBDaGlsZFByb2Nlc3NNYWluLm1tICovOyB9
OwogCQlCQzVEMjRBMjE2Q0MzQjlFMDA3RDU0NjEgLyogQ2hpbGRQcm9jZXNzTWFpbi5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNUQyNDlGMTZDQzNC
OUUwMDdENTQ2MSAvKiBDaGlsZFByb2Nlc3NNYWluLm1tICovOyB9OwogCQlCQzVEMjRBMzE2Q0Mz
QjlFMDA3RDU0NjEgLyogQ2hpbGRQcm9jZXNzTWFpbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNUQyNDlGMTZDQzNCOUUwMDdENTQ2MSAvKiBDaGls
ZFByb2Nlc3NNYWluLm1tICovOyB9OwpAQCAtOTk5LDcgKzEwMTMsNiBAQAogCQlCQzg1N0ZFNjEy
Qjg0M0Q4MDBFREVCMkUgLyogV0tPcGVuUGFuZWxQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzg1N0ZFNDEyQjg0M0Q4MDBFREVCMkUg
LyogV0tPcGVuUGFuZWxQYXJhbWV0ZXJzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkM4NTgwNjIxMkI4NTA1NzAwRURFQjJFIC8qIFdLT3BlblBh
bmVsUmVzdWx0TGlzdGVuZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkMxREZFOEUxMkIzMUNBODAwNURGNzMwIC8qIFdLT3BlblBhbmVsUmVzdWx0
TGlzdGVuZXIuY3BwICovOyB9OwogCQlCQzg1ODA2MzEyQjg1MDU3MDBFREVCMkUgLyogV0tPcGVu
UGFuZWxQYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDODU3RkU1MTJCODQzRDgwMEVERUIyRSAvKiBXS09wZW5QYW5lbFBhcmFtZXRl
cnMuY3BwICovOyB9OwotCQlCQzg2OTlCNTExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzg2OTlCMjExNkFB
REFBMDAyQTkyNUIgLyogV0tWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVi
bGljLCApOyB9OyB9OwogCQlCQzg2OTlCNjExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3Lm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM4Njk5QjMxMTZB
QURBQTAwMkE5MjVCIC8qIFdLVmlldy5tbSAqLzsgfTsKIAkJQkM4Njk5QjcxMTZBQURBQTAwMkE5
MjVCIC8qIFdLVmlld0ludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzg2OTlCNDExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3SW50ZXJuYWwu
aCAqLzsgfTsKIAkJQkM4NzgwRkMxMTYxQzJCODAwQ0MyNzY4IC8qIFBsYXRmb3JtUHJvY2Vzc0lk
ZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDODc4MEZCMTE2MUMyQjgwMENDMjc2OCAvKiBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgg
Ki87IH07CkBAIC0xMDI4LDggKzEwNDEsNiBAQAogCQlCQ0EwRUY4MDEyMzMxRTc4MDA3RDNDRkIg
LyogV2ViVW5kb1N0ZXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkNBMEVGN0UxMjMzMUU3ODAwN0QzQ0ZCIC8qIFdlYlVuZG9TdGVwLmNwcCAqLzsg
fTsKIAkJQkNBMEVGOUYxMjMzMjY0MjAwN0QzQ0ZCIC8qIFdlYkVkaXRDb21tYW5kUHJveHkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTBFRjlEMTIz
MzI2NDIwMDdEM0NGQiAvKiBXZWJFZGl0Q29tbWFuZFByb3h5LmggKi87IH07CiAJCUJDQTBFRkEw
MTIzMzI2NDIwMDdEM0NGQiAvKiBXZWJFZGl0Q29tbWFuZFByb3h5LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTBFRjlFMTIzMzI2NDIwMDdEM0NG
QiAvKiBXZWJFZGl0Q29tbWFuZFByb3h5LmNwcCAqLzsgfTsKLQkJQkNBMjg0RDYxNDkyRjJDNzAw
MUY5MDQyIC8qIFdLQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDQTI4NEQ0MTQ5MkYyQzcwMDFGOTA0MiAvKiBXS0Nvbm5lY3Rpb24u
bW0gKi87IH07Ci0JCUJDQTI4NEQ3MTQ5MkYyQzcwMDFGOTA0MiAvKiBXS0Nvbm5lY3Rpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTI4NEQ1MTQ5
MkYyQzcwMDFGOTA0MiAvKiBXS0Nvbm5lY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQdWJsaWMsICk7IH07IH07CiAJCUJDQThDNkE4MTFFM0JBNUYwMDgxMkZCNyAvKiBJbmpl
Y3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBOEM2QTYxMUUzQkE1RjAwODEyRkI3IC8qIEluamVjdGVk
QnVuZGxlUGFnZUxvYWRlckNsaWVudC5jcHAgKi87IH07CiAJCUJDQThDNkE5MTFFM0JBNUYwMDgx
MkZCNyAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQThDNkE3MTFFM0JBNUYwMDgxMkZCNyAv
KiBJbmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQuaCAqLzsgfTsKIAkJQkNBOEM2QUYxMUUz
QzA4NzAwODEyRkI3IC8qIEluamVjdGVkQnVuZGxlUGFnZVVJQ2xpZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQThDNkFEMTFFM0MwODcwMDgx
MkZCNyAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VVSUNsaWVudC5jcHAgKi87IH07CkBAIC0xMDU4LDE2
ICsxMDY5LDYgQEAKIAkJQkNCOUY2QTYxMTIzREQwRDAwQTEzN0UwIC8qIFdLRnJhbWVQb2xpY3lM
aXN0ZW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0I5RjZBNDExMjNERDBEMDBBMTM3RTAgLyogV0tGcmFtZVBvbGljeUxpc3RlbmVyLmNwcCAq
LzsgfTsKIAkJQkNCOUY4QUYxMTI0RTA3NzAwQTEzN0UwIC8qIFdlYlBvbGljeUNsaWVudC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0I5RjhBRDEx
MjRFMDc3MDBBMTM3RTAgLyogV2ViUG9saWN5Q2xpZW50LmNwcCAqLzsgfTsKIAkJQkNCOUY4QjAx
MTI0RTA3NzAwQTEzN0UwIC8qIFdlYlBvbGljeUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCOUY4QUUxMTI0RTA3NzAwQTEzN0UwIC8qIFdl
YlBvbGljeUNsaWVudC5oICovOyB9OwotCQlCQ0JBQUM3MjE0NEU2MTk5MDA1M0Y4MkYgLyogV0tC
cm93c2luZ0NvbnRleHRDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNCQUFDNkQxNDRFNjE5MjAwNTNGODJGIC8qIFdLQnJvd3NpbmdD
b250ZXh0Q29udHJvbGxlci5tbSAqLzsgfTsKLQkJQkNCQUFDNzMxNDRFNjE5RTAwNTNGODJGIC8q
IFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCQUFDNkMxNDRFNjE5MTAwNTNGODJGIC8qIFdLQnJvd3Np
bmdDb250ZXh0Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1Ymxp
YywgKTsgfTsgfTsKLQkJQkNCQUFDNzQxNDRFNjFBNTAwNTNGODJGIC8qIFdLQnJvd3NpbmdDb250
ZXh0Q29udHJvbGxlckludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQ0JBQUM2RTE0NEU2MTkyMDA1M0Y4MkYgLyogV0tCcm93c2luZ0NvbnRl
eHRDb250cm9sbGVySW50ZXJuYWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9
OyB9OwotCQlCQ0JBQUNFQjE0NTIyNUUzMDA1M0Y4MkYgLyogV0tQcm9jZXNzR3JvdXAuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQkFBQ0U1MTQ1MjI1
QzkwMDUzRjgyRiAvKiBXS1Byb2Nlc3NHcm91cC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFB1YmxpYywgKTsgfTsgfTsKLQkJQkNCQUFDRUMxNDUyMjVFMzAwNTNGODJGIC8qIFdLUHJv
Y2Vzc0dyb3VwLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNCQUFDRTYxNDUyMjVDQTAwNTNGODJGIC8qIFdLUHJvY2Vzc0dyb3VwLm1tICovOyB9Owot
CQlCQ0JBQUNFRDE0NTIyNUUzMDA1M0Y4MkYgLyogV0tQcm9jZXNzR3JvdXBQcml2YXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0JBQUNFNzE0NTIy
NUNCMDA1M0Y4MkYgLyogV0tQcm9jZXNzR3JvdXBQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQkNCQUFDRjQxNDUyMzI0RjAwNTNGODJG
IC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDQkFBQ0VFMTQ1MjMyNDMwMDUzRjgyRiAvKiBXS0Jyb3dzaW5n
Q29udGV4dEdyb3VwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9
OyB9OwotCQlCQ0JBQUNGNTE0NTIzMjRGMDA1M0Y4MkYgLyogV0tCcm93c2luZ0NvbnRleHRHcm91
cC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQkFB
Q0VGMTQ1MjMyNDQwMDUzRjgyRiAvKiBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwLm1tICovOyB9Owot
CQlCQ0JBQUNGNjE0NTIzMjRGMDA1M0Y4MkYgLyogV0tCcm93c2luZ0NvbnRleHRHcm91cFByaXZh
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQkFB
Q0YwMTQ1MjMyNDgwMDUzRjgyRiAvKiBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwUHJpdmF0ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUJDQkFBRDBC
MTQ1NjBBNDMwMDUzRjgyRiAvKiBXS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCQUFEMEExNDU2MEE0
MzAwNTNGODJGIC8qIFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQlCQ0JDQjBDQjEyMTVFMzIxMDBE
RTU5Q0EgLyogSW1tdXRhYmxlRGljdGlvbmFyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCQ0IwQ0ExMjE1RTMyMTAwREU1OUNBIC8qIEltbXV0YWJs
ZURpY3Rpb25hcnkuaCAqLzsgfTsKIAkJQkNCQ0IwQ0QxMjE1RTMzQTAwREU1OUNBIC8qIEltbXV0
YWJsZURpY3Rpb25hcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkNCQ0IwQ0MxMjE1RTMzQTAwREU1OUNBIC8qIEltbXV0YWJsZURpY3Rpb25hcnku
Y3BwICovOyB9OwogCQlCQ0JEMzkxNDEyNUJCMUE4MDBEMkMyOUYgLyogV2ViUGFnZVByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDQkQzOTEyMTI1QkIxQTgwMEQyQzI5RiAvKiBXZWJQYWdlUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwICovOyB9OwpAQCAtMTE1OSw3ICsxMTYwLDYgQEAKIAkJQkNGNjlGQUExMTc2RDFD
QjAwNDcxQTUyIC8qIFdLTmF2aWdhdGlvbkRhdGFSZWYuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGNjlGQTgxMTc2RDFDQjAwNDcxQTUyIC8qIFdL
TmF2aWdhdGlvbkRhdGFSZWYuY3BwICovOyB9OwogCQlCQ0ZENTQ4QjEzMkQ4MjY4MDA1NUQ4MTYg
LyogV0tFcnJvckNGLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDRkQ1NDg5MTMyRDgyNjgwMDU1RDgxNiAvKiBXS0Vycm9yQ0YuY3BwICovOyB9Owog
CQlCQ0ZENTQ4QzEzMkQ4MjY4MDA1NUQ4MTYgLyogV0tFcnJvckNGLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZENTQ4QTEzMkQ4MjY4MDA1NUQ4MTYg
LyogV0tFcnJvckNGLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJQkZBNjE3OUYxMkYwQjk5RDAwMzNFMENBIC8qIFdLVmlld1ByaXZhdGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJGQTYxNzlFMTJGMEI5
OUQwMDMzRTBDQSAvKiBXS1ZpZXdQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzAxQTI2MDExMjY2MkYyMTAwQzlFRDU1IC8qIFNoYXJl
YWJsZUJpdG1hcENHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEMwMUEyNjAwMTI2NjJGMjEwMEM5RUQ1NSAvKiBTaGFyZWFibGVCaXRtYXBDRy5jcHAg
Ki87IH07CiAJCUMwMkJGRjFFMTI1MTUwMkUwMDlDQ0JFQSAvKiBOYXRpdmVXZWJLZXlib2FyZEV2
ZW50TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzAyQkZGMUQxMjUxNTAyRTAwOUNDQkVBIC8qIE5hdGl2ZVdlYktleWJvYXJkRXZlbnRNYWMubW0g
Ki87IH07CiAJCUMwMzM3REFFMTI3QTI0RkUwMDhGRjRGNCAvKiBXZWJFdmVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMDMzN0RBRDEyN0EyNEZF
MDA4RkY0RjQgLyogV2ViRXZlbnQuY3BwICovOyB9OwpAQCAtMTk1OCw3ICsxOTU4LDYgQEAKIAkJ
Mzc3RUFENDQxN0UyQzUxQTAwMkQxOTNEIC8qIFdLRGVjbGFyYXRpb25TcGVjaWZpZXJzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLRGVjbGFyYXRpb25TcGVjaWZpZXJzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3N0VBRDQ2MTdFMkM3N0IwMDJEMTkzRCAv
KiBXS1VzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0tVc2VyQ29udGVudEluamVjdGVkRnJhbWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTM3N0VBRDQ3MTdFMkM3N0IwMDJEMTkzRCAvKiBXS1VzZXJTY3JpcHRJbmpl
Y3Rpb25UaW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLVXNlclNjcmlw
dEluamVjdGlvblRpbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzc4OEEwNUIx
NDc0M0M5MDAwNjMxOUU1IC8qIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlclByaXZhdGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCcm93c2luZ0NvbnRleHRDb250cm9s
bGVyUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzhFMUEzQjE4MUVE
NkZGMDAzMTAwN0EgLyogQVBJT2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gQVBJT2JqZWN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
NzhFMUEzRjE4MUVEQTAxMDAzMTAwN0EgLyogV0tPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0tPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Mzc4RTFBNDcxODIwOENENjAwMzEwMDdBIC8qIFdLTlNTdHJpbmcubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS05TU3RyaW5nLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjIzOSwxMyArMjIzOCwzMiBAQAogCQk3QzEzNUFBNjE3M0IwQkNBMDA1
ODZBRTIgLyogV0tQbHVnaW5JbmZvcm1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXS1BsdWdpbkluZm9ybWF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0MxMzVBQTcxNzNCMEJDQTAwNTg2QUUyIC8qIFdLUGx1Z2luSW5mb3JtYXRp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tQbHVnaW5JbmZvcm1hdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzEzNUFBQTE3M0IwQ0ZGMDA1ODZB
RTIgLyogUGx1Z2luSW5mb3JtYXRpb25NYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBQbHVnaW5JbmZvcm1hdGlvbk1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJN0MxRkIzQkYxODQ2QUVGQzAwMUEwM0Q4IC8qIFdLUHJvY2Vzc0dyb3VwSW50
ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tQcm9jZXNzR3JvdXBJ
bnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzFGQjNDRjE4NDkxQjgy
MDAxQTAzRDggLyogV2ViS2l0Mi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJLaXQyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDMUZCM0QwMTg0OTFCODIw
MDFBMDNEOCAvKiBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDMUZCM0QxMTg0OTFCODIwMDFBMDNEOCAvKiBXS0Jyb3dz
aW5nQ29udGV4dENvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTdDMUZCM0QyMTg0OTFCODIwMDFBMDNEOCAvKiBXS0Jyb3dzaW5nQ29udGV4
dENvbnRyb2xsZXJJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
S0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3QzFGQjNEMzE4NDkxQjgyMDAxQTAzRDggLyogV0tCcm93c2luZ0NvbnRleHRD
b250cm9sbGVyUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Jy
b3dzaW5nQ29udGV4dENvbnRyb2xsZXJQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTdDMUZCM0Q0MTg0OTFCODIwMDFBMDNEOCAvKiBXS0Jyb3dzaW5nQ29udGV4dEdyb3Vw
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnJvd3NpbmdDb250ZXh0R3Jv
dXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MxRkIzRDUxODQ5MUI4MjAwMUEw
M0Q4IC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXAubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3QzFGQjNENjE4NDkxQjgyMDAxQTAzRDggLyogV0tCcm93c2luZ0Nv
bnRleHRHcm91cEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdL
QnJvd3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3QzFGQjNENzE4NDkxQjgyMDAxQTAzRDggLyogV0tCcm93c2luZ0NvbnRleHRHcm91cFBy
aXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCcm93c2luZ0NvbnRl
eHRHcm91cFByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MxRkIzRDgx
ODQ5MUI4MjAwMUEwM0Q4IC8qIFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDMUZCM0Q5MTg0OTFCODIwMDFBMDNE
OCAvKiBXS0Jyb3dzaW5nQ29udGV4dFBvbGljeURlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdLQnJvd3NpbmdDb250ZXh0UG9saWN5RGVsZWdhdGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MxRkIzREExODQ5MUI4MjAwMUEwM0Q4IC8qIFdLQ29u
bmVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Nvbm5lY3Rpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MxRkIzREIxODQ5MUI4MjAwMUEwM0Q4
IC8qIFdLQ29ubmVjdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdLQ29ubmVjdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MxRkIz
REMxODQ5MUI4MjAwMUEwM0Q4IC8qIFdLQ29ubmVjdGlvbkludGVybmFsLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQ29ubmVjdGlvbkludGVybmFsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTdDMUZCM0REMTg0OTFCODIwMDFBMDNEOCAvKiBXS1Byb2Nlc3NH
cm91cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1Byb2Nlc3NHcm91cC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzFGQjNERTE4NDkxQjgyMDAxQTAzRDgg
LyogV0tQcm9jZXNzR3JvdXAubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXS1Byb2Nlc3NHcm91cC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0Mx
RkIzREYxODQ5MUI4MjAwMUEwM0Q4IC8qIFdLUHJvY2Vzc0dyb3VwSW50ZXJuYWwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tQcm9jZXNzR3JvdXBJbnRlcm5hbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzFGQjNFMDE4NDkxQjgyMDAxQTAzRDggLyogV0tQ
cm9jZXNzR3JvdXBQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdL
UHJvY2Vzc0dyb3VwUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzFG
QjNFMTE4NDkxQjgyMDAxQTAzRDggLyogV0tUeXBlUmVmV3JhcHBlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXS1R5cGVSZWZXcmFwcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTdDMUZCM0UyMTg0OTFCODIwMDFBMDNEOCAvKiBXS1R5cGVSZWZXcmFwcGVy
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tUeXBlUmVmV3Jh
cHBlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MxRkIzRTMxODQ5MUI4MjAw
MUEwM0Q4IC8qIFdLVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1Zp
ZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MxRkIzRTQxODQ5MUI4MjAwMUEw
M0Q4IC8qIFdLVmlld1ByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0tWaWV3UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzM4NzQzMzE3
MkY1NjE1MDAxQkQ4OEEgLyogUGFnZUJhbm5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQYWdlQmFubmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0MzRjhDOEUxNzNBRjUyRDAwN0I3RjM5IC8qIFBsdWdpbkluZm9ybWF0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsdWdpbkluZm9ybWF0aW9uLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzRjhDOEYxNzNBRjUyRDAwN0I3RjM5IC8q
IFBsdWdpbkluZm9ybWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBs
dWdpbkluZm9ybWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNkQzN0ZB
MTcyRjU1NUYwMDlEMjg0NyAvKiBQYWdlQmFubmVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gUGFnZUJhbm5lck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJN0M5RDE1MzYxODQ1ODREQTAwOUQzOTE4IC8qIFdLQnJvd3NpbmdDb250ZXh0
R3JvdXBJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Jyb3dz
aW5nQ29udGV4dEdyb3VwSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
N0NBMjU0RUExODI5OTNDRTAwRkM4QTQxIC8qIFdLQnJvd3NpbmdDb250ZXh0UG9saWN5RGVsZWdh
dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCcm93c2luZ0NvbnRleHRQ
b2xpY3lEZWxlZ2F0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0IxNkZFMjE3
MjRCOUI1MDA3QTBBOTUgLyogY29tLmFwcGxlLmlzdC5kcy5hcHBsZWNvbm5lY3Qud2VicGx1Z2lu
LnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGNvbS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0
LndlYnBsdWdpbi5zYjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NCMTZGRTMxNzI0
QjlCNTAwN0EwQTk1IC8qIGNvbS5hcHBsZS5RdWlja1RpbWUgUGx1Z2luLnBsdWdpbi5zYiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSAiY29tLmFwcGxlLlF1aWNrVGltZSBQbHVnaW4ucGx1Z2luLnNi
Ijsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NCMTZGRTQxNzI0QjlCNTAwN0EwQTk1
IC8qIGNvbS5hcHBsZS5XZWJLaXQucGx1Z2luLWNvbW1vbi5zYiAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSAiY29tLmFwcGxlLldlYktpdC5wbHVnaW4tY29tbW9uLnNiIjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTIyNTUsOCArMjI3Myw2IEBACiAJCTdDRDVFQkI2MTc0NkExNUIwMDBD
MUM0NSAvKiBXS09iakNUeXBlV3JhcHBlclJlZi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFdLT2JqQ1R5cGVXcmFwcGVyUmVmLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3Q0Q1RUJCNzE3NDZBMTVCMDAwQzFDNDUgLyogV0tPYmpDVHlwZVdyYXBw
ZXJSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tPYmpDVHlwZVdyYXBw
ZXJSZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NENUVCQkExNzQ2QTgzRTAw
MEMxQzQ1IC8qIFdLQmFzZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
S0Jhc2VNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0NENUVCQkMxNzQ2QjA0
QzAwMEMxQzQ1IC8qIFdLVHlwZVJlZldyYXBwZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXS1R5cGVSZWZXcmFwcGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk3Q0Q1RUJCRDE3NDZCMDRDMDAwQzFDNDUgLyogV0tUeXBlUmVmV3JhcHBlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1R5cGVSZWZXcmFwcGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRDYyMjc1MTczOUQ4NjMwMDVCRDdGRiAvKiBQ
bHVnaW5TYW5kYm94UHJvZmlsZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFBsdWdpblNhbmRib3hQcm9maWxlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3Q0Q2MjI3NjE3MzlEODYzMDA1QkQ3RkYgLyogUGx1Z2luU2FuZGJveFByb2ZpbGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luU2FuZGJveFByb2ZpbGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NGNDdGRjQxNzI3NUI3MTAwOEFDQjkxIC8q
IFdLQnVuZGxlUGFnZUJhbm5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXS0J1bmRsZVBhZ2VCYW5uZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjUwMCw5ICsyNTE2LDcgQEAKIAkJQkM1NzUwOTYxMjY4RjNDNjAwNkYwRjEyIC8qIFdlYlBv
cHVwTWVudVByb3h5TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gV2ViUG9wdXBNZW51UHJveHlNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDNTc1NjEyMTI2RTAxMzgwMDZGMEYxMiAvKiBXZWJFcnJvci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJFcnJvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDNTk1MzQwMTBGQzA0NTIwMDk4RjgyRCAvKiBXZWJMb2FkZXJDbGllbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViTG9hZGVyQ2xpZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDNTk1NDg4MTVDNzg2ODUwMEZEMUUzRSAvKiBXZWJL
aXQyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdDIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM1OTcwNzQxMTY1OTFEMDAwNTUxRkNBIC8qIFByb2Nl
c3NNb2RlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9jZXNzTW9kZWwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkM1Qzc1QzYxNDk1NERBNjAwQkM0Nzc1
IC8qIFdLQ29ubmVjdGlvbkludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdLQ29ubmVjdGlvbkludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDNUQyNDlGMTZDQzNCOUUwMDdENTQ2MSAvKiBDaGlsZFByb2Nlc3NNYWluLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ2hpbGRQcm9jZXNzTWFpbi5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM1RDI0QjgxNkNDNDBCQjAwN0Q1NDYxIC8qIEJh
c2VMZWdhY3lQcm9jZXNzLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEJhc2VMZWdhY3lQcm9jZXNz
LnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzVEMjRDMTE2Q0Q3MDZE
MDA3RDU0NjEgLyogV0tET01Ob2RlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXS0RPTU5vZGVQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yNTcxLDcgKzI1ODUsNiBAQAogCQlCQzg1N0ZCNDEyQjgzMEU2MDBFREVCMkUgLyogV2ViT3Bl
blBhbmVsUGFyYW1ldGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXZWJPcGVuUGFuZWxQYXJhbWV0ZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQkM4NTdGRTQxMkI4NDNEODAwRURFQjJFIC8qIFdLT3BlblBhbmVsUGFyYW1ldGVycy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS09wZW5QYW5lbFBhcmFtZXRlcnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4NTdGRTUxMkI4NDNEODAwRURFQjJFIC8q
IFdLT3BlblBhbmVsUGFyYW1ldGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXS09wZW5QYW5lbFBhcmFtZXRlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlCQzg2OTlCMjExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQzg2OTlCMzExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3Lm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQzg2OTlCNDExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3SW50ZXJuYWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tWaWV3SW50ZXJuYWwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4NzgwRkIxMTYxQzJCODAwQ0MyNzY4IC8qIFBsYXRm
b3JtUHJvY2Vzc0lkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjYwMCw4ICsyNjEzLDYgQEAKIAkJQkNBMEVGN0UxMjMzMUU3ODAwN0QzQ0ZCIC8qIFdlYlVu
ZG9TdGVwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlVuZG9T
dGVwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBMEVGOUQxMjMzMjY0MjAw
N0QzQ0ZCIC8qIFdlYkVkaXRDb21tYW5kUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViRWRpdENvbW1hbmRQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQ0EwRUY5RTEyMzMyNjQyMDA3RDNDRkIgLyogV2ViRWRpdENvbW1hbmRQcm94eS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJFZGl0Q29tbWFuZFByb3h5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkNBMjg0RDQxNDkyRjJDNzAwMUY5
MDQyIC8qIFdLQ29ubmVjdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFdLQ29ubmVjdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkNB
Mjg0RDUxNDkyRjJDNzAwMUY5MDQyIC8qIFdLQ29ubmVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXS0Nvbm5lY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkNBOEM2QTYxMUUzQkE1RjAwODEyRkI3IC8qIEluamVjdGVkQnVuZGxlUGFnZUxvYWRl
ckNsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3Rl
ZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQ0E4QzZBNzExRTNCQTVGMDA4MTJGQjcgLyogSW5qZWN0ZWRCdW5kbGVQYWdlTG9hZGVyQ2xp
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluamVjdGVkQnVuZGxlUGFn
ZUxvYWRlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0E4QzZBRDEx
RTNDMDg3MDA4MTJGQjcgLyogSW5qZWN0ZWRCdW5kbGVQYWdlVUlDbGllbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVQYWdlVUlDbGllbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjYzMiwxNiArMjY0Myw2IEBACiAJ
CUJDQjlGNkE0MTEyM0REMEQwMEExMzdFMCAvKiBXS0ZyYW1lUG9saWN5TGlzdGVuZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tGcmFtZVBvbGljeUxpc3RlbmVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNCOUY4QUQxMTI0RTA3NzAwQTEz
N0UwIC8qIFdlYlBvbGljeUNsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWJQb2xpY3lDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQ0I5RjhBRTExMjRFMDc3MDBBMTM3RTAgLyogV2ViUG9saWN5Q2xpZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBvbGljeUNsaWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlCQ0JBQUM2QzE0NEU2MTkxMDA1M0Y4MkYgLyogV0tCcm93c2luZ0Nv
bnRleHRDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnJv
d3NpbmdDb250ZXh0Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlC
Q0JBQUM2RDE0NEU2MTkyMDA1M0Y4MkYgLyogV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tCcm93c2luZ0NvbnRl
eHRDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQ0JBQUM2RTE0
NEU2MTkyMDA1M0Y4MkYgLyogV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVySW50ZXJuYWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCcm93c2luZ0NvbnRleHRDb250cm9s
bGVySW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkNCQUFDRTUxNDUy
MjVDOTAwNTNGODJGIC8qIFdLUHJvY2Vzc0dyb3VwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdLUHJvY2Vzc0dyb3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUJDQkFBQ0U2MTQ1MjI1Q0EwMDUzRjgyRiAvKiBXS1Byb2Nlc3NHcm91cC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLUHJvY2Vzc0dyb3VwLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCQ0JBQUNFNzE0NTIyNUNCMDA1M0Y4MkYgLyogV0tQcm9j
ZXNzR3JvdXBQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUHJv
Y2Vzc0dyb3VwUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQ0JBQUNF
RTE0NTIzMjQzMDA1M0Y4MkYgLyogV0tCcm93c2luZ0NvbnRleHRHcm91cC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDQkFBQ0VGMTQ1MjMyNDQwMDUzRjgyRiAvKiBXS0Jyb3dz
aW5nQ29udGV4dEdyb3VwLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gV0tCcm93c2luZ0NvbnRleHRHcm91cC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQkNCQUFDRjAxNDUyMzI0ODAwNTNGODJGIC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXBQcml2
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnJvd3NpbmdDb250ZXh0
R3JvdXBQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDQkFBRDBBMTQ1
NjBBNDMwMDUzRjgyRiAvKiBXS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0JDQjBDQTEyMTVFMzIxMDBERTU5Q0Eg
LyogSW1tdXRhYmxlRGljdGlvbmFyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbW11dGFibGVEaWN0aW9uYXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJD
QkNCMENDMTIxNUUzM0EwMERFNTlDQSAvKiBJbW11dGFibGVEaWN0aW9uYXJ5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltbXV0YWJsZURpY3Rpb25hcnkuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0JEMzhGQTEyNUJBQjlBMDBEMkMyOUYgLyog
V2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlBhZ2VQ
cm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3NDMsNyAr
Mjc0NCw2IEBACiAJCUJDRkNBODk1MTZERTk2Q0IwMDA3NDA2OSAvKiBQbHVnaW5TZXJ2aWNlLjMy
LTY0LkluZm8ucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnBsaXN0LnhtbDsgbmFtZSA9ICJQbHVnaW5TZXJ2aWNlLjMyLTY0LkluZm8u
cGxpc3QiOyBwYXRoID0gIlBsdWdpblByb2Nlc3MvRW50cnlQb2ludC9tYWMvWFBDU2VydmljZS9Q
bHVnaW5TZXJ2aWNlLjMyLTY0LkluZm8ucGxpc3QiOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7
IH07CiAJCUJDRkQ1NDg5MTMyRDgyNjgwMDU1RDgxNiAvKiBXS0Vycm9yQ0YuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tFcnJvckNGLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQkNGRDU0OEExMzJEODI2ODAwNTVEODE2IC8qIFdLRXJyb3JDRi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Vycm9yQ0YuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkZBNjE3OUUxMkYwQjk5RDAwMzNFMENBIC8qIFdLVmlld1By
aXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tWaWV3UHJpdmF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMDFBMjYwMDEyNjYyRjIxMDBDOUVENTUg
LyogU2hhcmVhYmxlQml0bWFwQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU2hhcmVhYmxlQml0bWFwQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDMDJCRkYxNTEyNTE0RkQ4MDA5Q0NCRUEgLyogTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXRpdmVXZWJLZXlib2FyZEV2ZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMwMkJGRjFEMTI1MTUwMkUwMDlDQ0JFQSAv
KiBOYXRpdmVXZWJLZXlib2FyZEV2ZW50TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gTmF0aXZlV2ViS2V5Ym9hcmRFdmVudE1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTM3MzcsMTYgKzM3MzcsMzggQEAKIAkJMzdDNEMwODMxODE0OUMy
QTAwMzY4OEI5IC8qIENvY29hICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQk3QzFGQjNDRjE4NDkxQjgyMDAxQTAzRDggLyogV2ViS2l0Mi5oICovLAogCQkJ
CTM3QzRDMDhCMTgxNEFDNUMwMDM2ODhCOSAvKiBXS0JhY2tGb3J3YXJkTGlzdC5oICovLAogCQkJ
CTM3QzRDMDhBMTgxNEFDNUMwMDM2ODhCOSAvKiBXS0JhY2tGb3J3YXJkTGlzdC5tbSAqLywKIAkJ
CQkzN0M0QzA4RTE4MTRBRjNBMDAzNjg4QjkgLyogV0tCYWNrRm9yd2FyZExpc3RJbnRlcm5hbC5o
ICovLAogCQkJCTM3QzRDMDg1MTgxNDlDNUIwMDM2ODhCOSAvKiBXS0JhY2tGb3J3YXJkTGlzdEl0
ZW0uaCAqLywKIAkJCQkzN0M0QzA4NDE4MTQ5QzVCMDAzNjg4QjkgLyogV0tCYWNrRm9yd2FyZExp
c3RJdGVtLm1tICovLAogCQkJCTM3QzRDMDg4MTgxNDlGMjMwMDM2ODhCOSAvKiBXS0JhY2tGb3J3
YXJkTGlzdEl0ZW1JbnRlcm5hbC5oICovLAorCQkJCTdDMUZCM0QwMTg0OTFCODIwMDFBMDNEOCAv
KiBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIuaCAqLywKKwkJCQk3QzFGQjNEMTE4NDkxQjgy
MDAxQTAzRDggLyogV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyLm1tICovLAorCQkJCTdDMUZC
M0QyMTg0OTFCODIwMDFBMDNEOCAvKiBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJJbnRlcm5h
bC5oICovLAorCQkJCTdDMUZCM0QzMTg0OTFCODIwMDFBMDNEOCAvKiBXS0Jyb3dzaW5nQ29udGV4
dENvbnRyb2xsZXJQcml2YXRlLmggKi8sCisJCQkJN0MxRkIzRDQxODQ5MUI4MjAwMUEwM0Q4IC8q
IFdLQnJvd3NpbmdDb250ZXh0R3JvdXAuaCAqLywKKwkJCQk3QzFGQjNENTE4NDkxQjgyMDAxQTAz
RDggLyogV0tCcm93c2luZ0NvbnRleHRHcm91cC5tbSAqLywKKwkJCQk3QzFGQjNENjE4NDkxQjgy
MDAxQTAzRDggLyogV0tCcm93c2luZ0NvbnRleHRHcm91cEludGVybmFsLmggKi8sCisJCQkJN0Mx
RkIzRDcxODQ5MUI4MjAwMUEwM0Q4IC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXBQcml2YXRlLmgg
Ki8sCiAJCQkJMzcwRjM0QTYxODI5Q0ZGMzAwOTAyN0M4IC8qIFdLQnJvd3NpbmdDb250ZXh0SGlz
dG9yeURlbGVnYXRlLmggKi8sCisJCQkJN0MxRkIzRDgxODQ5MUI4MjAwMUEwM0Q4IC8qIFdLQnJv
d3NpbmdDb250ZXh0TG9hZERlbGVnYXRlLmggKi8sCisJCQkJN0MxRkIzRDkxODQ5MUI4MjAwMUEw
M0Q4IC8qIFdLQnJvd3NpbmdDb250ZXh0UG9saWN5RGVsZWdhdGUuaCAqLywKKwkJCQk3QzFGQjNE
QTE4NDkxQjgyMDAxQTAzRDggLyogV0tDb25uZWN0aW9uLmggKi8sCisJCQkJN0MxRkIzREIxODQ5
MUI4MjAwMUEwM0Q4IC8qIFdLQ29ubmVjdGlvbi5tbSAqLywKKwkJCQk3QzFGQjNEQzE4NDkxQjgy
MDAxQTAzRDggLyogV0tDb25uZWN0aW9uSW50ZXJuYWwuaCAqLywKIAkJCQkzNzBGMzRBMTE4MjlC
RTFFMDA5MDI3QzggLyogV0tOYXZpZ2F0aW9uRGF0YS5oICovLAogCQkJCTM3MEYzNEEwMTgyOUJF
MUUwMDkwMjdDOCAvKiBXS05hdmlnYXRpb25EYXRhLm1tICovLAogCQkJCTM3MEYzNEE0MTgyOUJF
QTMwMDkwMjdDOCAvKiBXS05hdmlnYXRpb25EYXRhSW50ZXJuYWwuaCAqLywKKwkJCQk3QzFGQjNE
RDE4NDkxQjgyMDAxQTAzRDggLyogV0tQcm9jZXNzR3JvdXAuaCAqLywKKwkJCQk3QzFGQjNERTE4
NDkxQjgyMDAxQTAzRDggLyogV0tQcm9jZXNzR3JvdXAubW0gKi8sCisJCQkJN0MxRkIzREYxODQ5
MUI4MjAwMUEwM0Q4IC8qIFdLUHJvY2Vzc0dyb3VwSW50ZXJuYWwuaCAqLywKKwkJCQk3QzFGQjNF
MDE4NDkxQjgyMDAxQTAzRDggLyogV0tQcm9jZXNzR3JvdXBQcml2YXRlLmggKi8sCisJCQkJN0Mx
RkIzRTExODQ5MUI4MjAwMUEwM0Q4IC8qIFdLVHlwZVJlZldyYXBwZXIuaCAqLywKKwkJCQk3QzFG
QjNFMjE4NDkxQjgyMDAxQTAzRDggLyogV0tUeXBlUmVmV3JhcHBlci5tbSAqLywKKwkJCQk3QzFG
QjNFMzE4NDkxQjgyMDAxQTAzRDggLyogV0tWaWV3LmggKi8sCisJCQkJN0MxRkIzRTQxODQ5MUI4
MjAwMUEwM0Q4IC8qIFdLVmlld1ByaXZhdGUuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gQ29jb2E7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNDYzNywzMCArNDY1OSw4IEBACiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUJDQkFBQzU4MTQ0RTM4QjkwMDUz
RjgyRiAvKiBXS1ZpZXcgRGV0YWlscyAqLywKLQkJCQlCQzU5NTQ4ODE1Qzc4Njg1MDBGRDFFM0Ug
LyogV2ViS2l0Mi5oICovLAotCQkJCUJDQkFBQzZDMTQ0RTYxOTEwMDUzRjgyRiAvKiBXS0Jyb3dz
aW5nQ29udGV4dENvbnRyb2xsZXIuaCAqLywKLQkJCQlCQ0JBQUM2RDE0NEU2MTkyMDA1M0Y4MkYg
LyogV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyLm1tICovLAotCQkJCUJDQkFBQzZFMTQ0RTYx
OTIwMDUzRjgyRiAvKiBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJJbnRlcm5hbC5oICovLAot
CQkJCTM3ODhBMDVCMTQ3NDNDOTAwMDYzMTlFNSAvKiBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xs
ZXJQcml2YXRlLmggKi8sCi0JCQkJQkNCQUFDRUUxNDUyMzI0MzAwNTNGODJGIC8qIFdLQnJvd3Np
bmdDb250ZXh0R3JvdXAuaCAqLywKLQkJCQlCQ0JBQUNFRjE0NTIzMjQ0MDA1M0Y4MkYgLyogV0tC
cm93c2luZ0NvbnRleHRHcm91cC5tbSAqLywKLQkJCQk3QzlEMTUzNjE4NDU4NERBMDA5RDM5MTgg
LyogV0tCcm93c2luZ0NvbnRleHRHcm91cEludGVybmFsLmggKi8sCi0JCQkJQkNCQUFDRjAxNDUy
MzI0ODAwNTNGODJGIC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXBQcml2YXRlLmggKi8sCi0JCQkJ
QkNCQUFEMEExNDU2MEE0MzAwNTNGODJGIC8qIFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRl
LmggKi8sCi0JCQkJN0NBMjU0RUExODI5OTNDRTAwRkM4QTQxIC8qIFdLQnJvd3NpbmdDb250ZXh0
UG9saWN5RGVsZWdhdGUuaCAqLywKLQkJCQlCQ0EyODRENTE0OTJGMkM3MDAxRjkwNDIgLyogV0tD
b25uZWN0aW9uLmggKi8sCi0JCQkJQkNBMjg0RDQxNDkyRjJDNzAwMUY5MDQyIC8qIFdLQ29ubmVj
dGlvbi5tbSAqLywKLQkJCQlCQzVDNzVDNjE0OTU0REE2MDBCQzQ3NzUgLyogV0tDb25uZWN0aW9u
SW50ZXJuYWwuaCAqLywKLQkJCQlCQ0JBQUNFNTE0NTIyNUM5MDA1M0Y4MkYgLyogV0tQcm9jZXNz
R3JvdXAuaCAqLywKLQkJCQlCQ0JBQUNFNjE0NTIyNUNBMDA1M0Y4MkYgLyogV0tQcm9jZXNzR3Jv
dXAubW0gKi8sCi0JCQkJN0MxRkIzQkYxODQ2QUVGQzAwMUEwM0Q4IC8qIFdLUHJvY2Vzc0dyb3Vw
SW50ZXJuYWwuaCAqLywKLQkJCQlCQ0JBQUNFNzE0NTIyNUNCMDA1M0Y4MkYgLyogV0tQcm9jZXNz
R3JvdXBQcml2YXRlLmggKi8sCi0JCQkJN0NENUVCQkQxNzQ2QjA0QzAwMEMxQzQ1IC8qIFdLVHlw
ZVJlZldyYXBwZXIuaCAqLywKLQkJCQk3Q0Q1RUJCQzE3NDZCMDRDMDAwQzFDNDUgLyogV0tUeXBl
UmVmV3JhcHBlci5tbSAqLywKLQkJCQlCQzg2OTlCMjExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3
LmggKi8sCiAJCQkJQkM4Njk5QjMxMTZBQURBQTAwMkE5MjVCIC8qIFdLVmlldy5tbSAqLywKIAkJ
CQlCQzg2OTlCNDExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3SW50ZXJuYWwuaCAqLywKLQkJCQlC
RkE2MTc5RTEyRjBCOTlEMDAzM0UwQ0EgLyogV0tWaWV3UHJpdmF0ZS5oICovLAogCQkJKTsKIAkJ
CXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNTU0OCw2ICs1NTQ4
LDcgQEAKIAkJCQkxQTJEOTU2RjEyODQ4NTY0MDAxRUI5NjIgLyogQ2hpbGRQcm9jZXNzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzgyODM3QTE2QjM2QTRGMDBBMjc4RkUgLyogQ2hpbGRQcm9jZXNz
RW50cnlQb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE1MTNDNjcxNjZFQUJCMjAwMTQ5RkNC
IC8qIENoaWxkUHJvY2Vzc1Byb3h5LmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzFGQjNFRTE4NDkx
QjgyMDAxQTAzRDggLyogV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTI5MEY0MjcyMTcyQTBDNzQwMDkzOUZGMCAvKiBDaGlsZFByb2Nlc3NTdXBwbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTZGOUY5MDExRTEzRUZDMDBEQjEzNzEgLyogQ29t
bWFuZExpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3QzRFOUY2MTMxQzZFN0UwMDI5QkQ1QSAv
KiBjb25maWcuaCBpbiBIZWFkZXJzICovLApAQCAtNTU4Myw3ICs1NTg0LDYgQEAKIAkJCQk5M0ZD
NjdDMDEyRDNDQ0YyMDBBNjA2MTAgLyogRW5jb2RlckFkYXB0ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUxQjE1QTg1MTM4NDNBMzkwMDMyMUFEOCAvKiBFbnZpcm9ubWVudFV0aWxpdGllcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUE3QzZDREIxMzc4OTUwODAwQjlDMDREIC8qIEVudmlyb25tZW50
VmFyaWFibGVzLmggaW4gSGVhZGVycyAqLywKLQkJCQk3Q0EyNTRFQjE4Mjk5M0NFMDBGQzhBNDEg
LyogV0tCcm93c2luZ0NvbnRleHRQb2xpY3lEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUFBNTc1RkIxNDk2QjUyNjAwQTRFRTA2IC8qIEV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUE5MEMxRjQxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTkxMDA3MTEyNjY3NUM0MDAxODQyRjUgLyogRmluZEluZGljYXRv
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC01NjA3LDYgKzU2MDcsNyBAQAogCQkJCUJDRUU3REM1MTI4
QjY0NUQwMDk4MjdEQSAvKiBJbmplY3RlZEJ1bmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkM0OTg2MTgxMjREMTBFMjAwRDgzNEUxIC8qIEluamVjdGVkQnVuZGxlSGl0VGVzdFJlc3Vs
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ0Nzc4NTMxNzZGQ0MwODAwQ0RDN0JCIC8qIEluamVj
dGVkQnVuZGxlSGl0VGVzdFJlc3VsdE1lZGlhVHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0Mx
RkIzRjkxODQ5MUI4MjAwMUEwM0Q4IC8qIFdLVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4
MTQ3RDUxMkY2NkQzMTAwN0IyQzMyIC8qIEluamVjdGVkQnVuZGxlTmF2aWdhdGlvbkFjdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkM0QkVFQUIxMjBBMEE1RjAwRkJBMEM3IC8qIEluamVjdGVk
QnVuZGxlTm9kZUhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc4RTFBNEUxODIwOEQ3MDAw
MzEwMDdBIC8qIFdLTlNVUkwuaCBpbiBIZWFkZXJzICovLApAQCAtNTYxNiw2ICs1NjE3LDcgQEAK
IAkJCQlDRDVDNjZBMTEzNEI5RDM4MDA0RkUyQTggLyogSW5qZWN0ZWRCdW5kbGVQYWdlRnVsbFNj
cmVlbkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBOEM2QTkxMUUzQkE1RjAwODEyRkI3
IC8qIEluamVjdGVkQnVuZGxlUGFnZUxvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkM4MTQ3QTkxMkY2NENEQTAwN0IyQzMyIC8qIEluamVjdGVkQnVuZGxlUGFnZVBvbGljeUNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0MxRkIzRTYxODQ5MUI4MjAwMUEwM0Q4IC8qIFdLQnJv
d3NpbmdDb250ZXh0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBOEM2QjAxMUUz
QzA4NzAwODEyRkI3IC8qIEluamVjdGVkQnVuZGxlUGFnZVVJQ2xpZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQTlFMzI4OTE4MjE2MzY5MDBGNUQwNEMgLyogV0tSZW1vdGVPYmplY3RSZWdpc3Ry
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMzM0UwRDExMjQwOEU4NjAwMzYwRjNGIC8qIEluamVj
dGVkQnVuZGxlUmFuZ2VIYW5kbGUuaCBpbiBIZWFkZXJzICovLApAQCAtNTYyMyw2ICs1NjI1LDcg
QEAKIAkJCQlCQ0IwQjBERTEyMzA1QThDMDBCMTM0MUUgLyogSW5qZWN0ZWRCdW5kbGVVc2VyTWVz
c2FnZUNvZGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFNDlBNDkxMUZGQThDRTAwNDhCNDY0
IC8qIEpTTlBNZXRob2QuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTQ5ODc4MTFGRjdGQUEwMDQ4
QjQ2NCAvKiBKU05QT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzFGQjNGNjE4NDkxQjgy
MDAxQTAzRDggLyogV0tQcm9jZXNzR3JvdXBQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0UwOTM3ODE0RkIxMjhDMDAxMTM4RDkgLyogTGF5ZXJIb3N0aW5nQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUE5MkRDMTExMkY4QkE0NjAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBMTg2RUVBMTJFRjc2MTgwMDhFNUYzNyAvKiBMYXllclRy
ZWVIb3N0LmggaW4gSGVhZGVycyAqLywKQEAgLTU2MzYsNiArNTYzOSw3IEBACiAJCQkJMUEyMzI4
RkYxNjJDODY2QTAwRDgyRjdBIC8qIE1lc3NhZ2VFbmNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQUM0QzgyOTE2Qjg3NkE5MDA2OURDQ0QgLyogTWVzc2FnZUZsYWdzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQUUwMEQ2QzE4MzI3QzEyMDAwODdERDcgLyogU3RyaW5nUmVmZXJlbmNlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3QzFGQjNFRjE4NDkxQjgyMDAxQTAzRDggLyogV0tCcm93c2luZ0Nv
bnRleHRQb2xpY3lEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzRUVEMTIxNjFBNTNE
NjAwQUVCNEY1IC8qIE1lc3NhZ2VSZWNlaXZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzRUVE
MEYxNjFBNTM1NDAwQUVCNEY1IC8qIE1lc3NhZ2VSZWNlaXZlck1hcC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUExMTlBOTUxMjdCNzk2MjAwQTlFQ0IxIC8qIE1lc3NhZ2VTZW5kZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtNTY1NSw2ICs1NjU5LDcgQEAKIAkJCQk1MTYzMTk5NTE2Mjg5QTYzMDBFMjJG
MDAgLyogTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE0QTk1
NEExNkUwMTZBNDAwNjhERTgyIC8qIE5ldHdvcmtQcm9jZXNzUGxhdGZvcm1TdHJhdGVnaWVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTc5NTU2RTE2Mjg3N0IzMDBGQTQzQjYgLyogTmV0d29ya1By
b2Nlc3NQcm94eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0MxRkIzRUExODQ5MUI4MjAwMUEwM0Q4
IC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxM0ExNjNE
MTYzMDg4RjYwMDVEN0QyMiAvKiBOZXR3b3JrUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDRjRERTIzMTY4RTRCRDUwMEM5NEFGQyAvKiBOZXR3b3JrUHJvY2Vzc1N1
cHBsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRkQxOEI2MTY1MUZCQUQwMERCRTFDRSAv
KiBOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNTcyNiw2ICs1NzMx
LDcgQEAKIAkJCQkxQUIxNkFFMjE2NDg2NTZEMDAyOTBENjIgLyogUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWFQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBM0Q3NUMxNjUxQjQ0RjAwODcx
M0QwIC8qIFJlbW90ZUxheWVyVHJlZUhvc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQTNENzYy
MTY1MUI3RDMwMDg3MTNEMCAvKiBSZW1vdGVMYXllclRyZWVIb3N0TWVzc2FnZXMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTdDMUZCM0ZBMTg0OTFCODIwMDFBMDNEOCAvKiBXS1ZpZXdQcml2YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQUYxQUM2QzE2NTE3NTlFMDBDMTdEN0YgLyogUmVtb3RlTGF5
ZXJUcmVlVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQjc4NDcxMTYzRjI0Njkw
MDA3QjY5MiAvKiBSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUEzMDA2NkUxMTEwRjRGNzAwMzE5MzdDIC8qIFJlc3BvbnNpdmVuZXNzVGltZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtNTczNyw4ICs1NzQzLDEwIEBACiAJCQkJNTFEMTMwNTQxMzgyRUFDMDAwMzUx
RUREIC8qIFNlY0l0ZW1SZXF1ZXN0RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFEMTMwNTYx
MzgyRUFDMDAwMzUxRUREIC8qIFNlY0l0ZW1SZXNwb25zZURhdGEuaCBpbiBIZWFkZXJzICovLAog
CQkJCUUxNzkwODhGMTY5QkFBNkEwMDY5MDRDNyAvKiBTZWNJdGVtU2hpbS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJN0MxRkIzRjAxODQ5MUI4MjAwMUEwM0Q4IC8qIFdLQ29ubmVjdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTExRjhBN0IxMzhCNDYwOTAwQTk1RjQ0IC8qIFNlY0l0ZW1TaGltTGli
cmFyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE3OTA4OTExNjlCQUE4MjAwNjkwNEM3IC8qIFNl
Y0l0ZW1TaGltTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDMUZCM0YyMTg0OTFCODIw
MDFBMDNEOCAvKiBXS0Nvbm5lY3Rpb25JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE4
RTY5MEMxNjlCNTYzRjAwOUI2NjcwIC8qIFNlY0l0ZW1TaGltUHJveHkuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUxOEU2OTE4MTY5QjY2N0IwMDlCNjY3MCAvKiBTZWNJdGVtU2hpbVByb3h5TWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTMzMTUyOTc2MTMwRDBDQjIwMEVEMjQ4MyAvKiBTZWN1
cml0eU9yaWdpbkRhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtNTg0NSw2ICs1ODUzLDcgQEAKIAkJ
CQlCQzBFNjA3MzEyRDZCQzIwMDAxMkE3MkEgLyogV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxQkUxRjIxMkQ1NERCRDAwMDRBMjI4IC8qIFdlYkdlb2xvY2F0
aW9uUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTc0QUEzMTQyQTRDQjcwMDM5MjUw
RiAvKiBXZWJHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0MxRkIzRUMxODQ5MUI4MjAw
MUEwM0Q4IC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkNGNjlGODcxMTc2Q0Q2RjAwNDcxQTUyIC8qIFdlYkhpc3RvcnlDbGllbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTc4MDFDMDlBMTQyMjkwQzQwMEZBRjlBRiAvKiBXZWJIaXRUZXN0UmVz
dWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTFCMjRBQjEzMkUwOTcyMDAwNjVBMEMgLyogV2Vi
SWNvbkRhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTU4NTYsMTkgKzU4NjUsMjAgQEAKIAkJ
CQkxQzhFMjgyMDEyNzVEMTU0MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzAzMkQ4MjEwRjQzNzhEMDA1OEMxNUEgLyogV2ViSW5zcGVjdG9yQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQzhFMjVBOTEyNzBFM0JDMDBCQzdCRDAgLyogV2ViSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDMUZCM0YzMTg0OTFCODIw
MDFBMDNEOCAvKiBXS1Byb2Nlc3NHcm91cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUM4RTJBMzYx
Mjc3ODUyNDAwQkM3QkQwIC8qIFdlYkluc3BlY3Rvck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQzhFMjgzNDEyNzVENzM4MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yUHJveHkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFDQThCOTQ2MTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JQ
cm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTAzMkYxRTE4MEY3OTE3MDA5NjFC
QjcgLyogRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxQTlFMTA2MTMxNUNDRkMwMDlFNzAzMSAvKiBXZWJLZXlWYWx1ZVN0b3JhZ2VN
YW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUwMEQ2MTE4MzE3OTIxMDAwODdERDcgLyog
RnJhbWVMb2FkU3RhdGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDNTk1NDg5MTVDNzg2ODUwMEZE
MUUzRSAvKiBXZWJLaXQyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0I2MzQ3ODExNkJGMTA2MDA2
MDMyMTUgLyogV2ViS2l0Ml9DLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzlCQTUwNTE2OTdDNDUz
MDBFNDQ2MTYgLyogV2ViS2l0MkluaXRpYWxpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTk1
MzQyMTBGQzA0NTIwMDk4RjgyRCAvKiBXZWJMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTMzRDNBM0MyMTMzOTYwQjAwMDcwOUJFNCAvKiBXZWJNZWRpYUNhY2hlTWFuYWdlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzNEM0EzQzkxMzM5NjE3OTAwNzA5QkU0IC8qIFdlYk1lZGlhQ2Fj
aGVNYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3QzRDMDhEMTgxNEFDNUMw
MDM2ODhCOSAvKiBXS0JhY2tGb3J3YXJkTGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0MxRkIz
RTUxODQ5MUI4MjAwMUEwM0Q4IC8qIFdlYktpdDIuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3MUEx
OTQyMTgyNEQyOTMwMEYzMkE1RSAvKiBXS05TRGljdGlvbmFyeS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzNEM0EzQkIxMzM5NjA2MjAwNzA5QkU0IC8qIFdlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHku
aCBpbiBIZWFkZXJzICovLAogCQkJCTMzRDNBM0NCMTMzOTYxNzkwMDcwOUJFNCAvKiBXZWJNZWRp
YUNhY2hlTWFuYWdlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNTg5Myw2ICs1
OTAzLDcgQEAKIAkJCQkyOUQ1NURGMjE2MUJGOUYxMDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJv
eHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzBDRTcyQTExMjQ3RTcxRDAwQkMwRUM0
IC8qIFdlYlBhZ2VNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCOEExRjgxODQwMEJC
ODAwRTlBRTY5IC8qIFdLUGFnZUNvbnRleHRNZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJ
CQk3QzFGQjNFODE4NDkxQjgyMDAxQTAzRDggLyogV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVy
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDMyREQxMTBGNDM4OUYwMDU4QzE1QSAv
KiBXZWJQYWdlUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQkQzOTE1MTI1QkIxQTgwMEQy
QzI5RiAvKiBXZWJQYWdlUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzRTcz
NjExMUNDMjY1OTAwN0JENTM5IC8qIFdlYlBsYXRmb3JtU3RyYXRlZ2llcy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC01OTQyLDIwICs1OTUzLDE2IEBACiAJCQkJQkM0MDc1RjQxMjRGRjAyNzAwNjhGMjBB
IC8qIFdLQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkY1OEY2MTJBODhBNTQwMDYyOTUz
MCAvKiBXS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJG
NThGODEyQTg4QTU0MDA2Mjk1MzAgLyogV0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTdDMUZCM0U5MTg0OTFCODIwMDFBMDNEOCAvKiBXS0Jyb3dz
aW5nQ29udGV4dENvbnRyb2xsZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJBOTc2
QTE4MEUwOUI4MDAzOUExNDkgLyogRGF0YWJhc2VQcm9jZXNzUHJveHlNZXNzYWdlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM2NDZDMUIxMUREMzk5RjAwNjQ1NUIwIC8qIFdLQmFja0ZvcndhcmRM
aXN0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkzN0M0QzA5NTE4MTRCOUU2MDAzNjg4QjkgLyog
V0tCYWNrRm9yd2FyZExpc3RJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2NDZDMUQx
MUREMzk5RjAwNjQ1NUIwIC8qIFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNEREIzMTcxMjRFQkQxMzAwNDhEMTNDIC8qIFdLQmFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJN0NENUVCQkIxNzQ2QTgzRTAwMEMxQzQ1IC8qIFdLQmFzZU1hYy5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQkNCQUFDNzMxNDRFNjE5RTAwNTNGODJGIC8qIFdLQnJvd3NpbmdDb250ZXh0
Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkNCQUFDNzQxNDRFNjFBNTAwNTNGODJG
IC8qIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckludGVybmFsLmggaW4gSGVhZGVycyAqLywK
LQkJCQkzNzg4QTA1QzE0NzQzQzkwMDA2MzE5RTUgLyogV0tCcm93c2luZ0NvbnRleHRDb250cm9s
bGVyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkNCQUFDRjQxNDUyMzI0RjAwNTNGODJG
IC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENDdCNTZE
MTgxMDcxNEUwMDNBM0FFRSAvKiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQkNCQUFDRjYxNDUyMzI0RjAwNTNGODJGIC8qIFdLQnJvd3NpbmdDb250ZXh0R3Jv
dXBQcml2YXRlLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQ0JBQUQwQjE0NTYwQTQzMDA1M0Y4MkYg
LyogV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MjA0RUVGMTFDODNFQzgwMDhGMzM3NSAvKiBXS0J1bmRsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
N0MxRkIzRjUxODQ5MUI4MjAwMUEwM0Q4IC8qIFdLUHJvY2Vzc0dyb3VwSW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMjA0RUYwMTFDODNFQzgwMDhGMzM3NSAvKiBXS0J1bmRsZUFQSUNh
c3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUVFQjlGMTI3NzYxQUMwMDMzMjJCOCAvKiBXS0J1
bmRsZUJhY2tGb3J3YXJkTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3REQ1QkYxODBEQTdE
MzAwODE2NjBCIC8qIERhdGFiYXNlUHJvY2Vzc1Byb3h5LmggaW4gSGVhZGVycyAqLywKQEAgLTU5
ODQsOCArNTk5MSw2IEBACiAJCQkJQkM0MDc2MjcxMjRGRjA0MDAwNjhGMjBBIC8qIFdLQ2VydGlm
aWNhdGVJbmZvTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQlGMDM2OTc4NjE1RjRCRTZCMDBDM0E4
MEUgLyogV0tDb2xvclBpY2tlclJlc3VsdExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
NzJDQUYwQjE4MzNGRDkxMDA0MEFDMjcgLyogV0tOU0Vycm9yLmggaW4gSGVhZGVycyAqLywKLQkJ
CQlCQ0EyODRENzE0OTJGMkM3MDAxRjkwNDIgLyogV0tDb25uZWN0aW9uLmggaW4gSGVhZGVycyAq
LywKLQkJCQlCQzVDNzVDODE0OTU0REE2MDBCQzQ3NzUgLyogV0tDb25uZWN0aW9uSW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDNEE2Mjk3MTQ3MzEzQTAwMDZDNjgxQSAvKiBXS0Nvbm5l
Y3Rpb25SZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQjlFMjRCMTEyMEUxNUMwMEExMzdFMCAv
KiBXS0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQTU1NUY2MTI4QzZDNDcwMDlBQkNF
QyAvKiBXS0NvbnRleHRNZW51SXRlbS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDIyLDYgKzYwMjcs
NyBAQAogCQkJCTM3RjYyM0I4MTJBNTdCNjIwMEUzRkRGNiAvKiBXS0ZpbmRPcHRpb25zLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0U0Njk1QTEyMTRFREY0MDAwQjk4RUIgLyogV0tGb3JtU3VibWlz
c2lvbkxpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QwMTM5QjExMEZBNDIwMDAzQjhB
NjcgLyogV0tGcmFtZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0MxRkIzRUQxODQ5MUI4MjAwMUEw
M0Q4IC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXBQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0I5RjZBNTExMjNERDBEMDBBMTM3RTAgLyogV0tGcmFtZVBvbGljeUxpc3RlbmVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFMUFFQTIyRjE0Njg3QkRCMDA4MDQ1NjkgLyogV0tGdWxsS2V5Ym9h
cmRBY2Nlc3NXYXRjaGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRENBODVDOTEzMkFCQTRFMDBF
OTYxREYgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCkBA
IC02MDI5LDYgKzYwMzUsNyBAQAogCQkJCUJDNTRDQzEyMTJENjc0RUUwMDVDNjdCMCAvKiBXS0dl
b2xvY2F0aW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwNkY0NEUxMkRCREYzRjAw
MkQ3OERFIC8qIFdLR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMwRTYxOTgxMkQ2Q0QxMjAwMTJBNzJBIC8qIFdLR2VvbG9jYXRpb25Qb3NpdGlvbi5o
IGluIEhlYWRlcnMgKi8sCisJCQkJN0MxRkIzRjcxODQ5MUI4MjAwMUEwM0Q4IC8qIFdLVHlwZVJl
ZldyYXBwZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQzhCMzc0MTI1RkI2OTAwMERFNDZBNCAv
KiBXS0dlb21ldHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCNjJFNzMxMjE0MzA0N0IwMDA2OUVD
MzUgLyogV0tIaXRUZXN0UmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTEwQUUwRDEzM0Mx
NkNCMDA3MjcxN0EgLyogV0tJY29uRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtNjA3MSw5
ICs2MDc4LDYgQEAKIAkJCQkzN0M0QzA4OTE4MTQ5RjIzMDAzNjg4QjkgLyogV0tCYWNrRm9yd2Fy
ZExpc3RJdGVtSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRDBENDM3MTgzQjM1M0Qw
MDk3MDQxRCAvKiBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUxMzRGMDE3MTJFQTVEMzMwMDRFQzU4RCAvKiBXS1ByaW50aW5nVmlldy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJN0MxRkIzQzAxODQ2QUVGQzAwMUEwM0Q4IC8qIFdLUHJvY2Vz
c0dyb3VwSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDQkFBQ0VCMTQ1MjI1RTMwMDUz
RjgyRiAvKiBXS1Byb2Nlc3NHcm91cC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkNCQUFDRUQxNDUy
MjVFMzAwNTNGODJGIC8qIFdLUHJvY2Vzc0dyb3VwUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTEyRjU4RkMxMkE4OEE1NDAwNjI5NTMwIC8qIFdLUHJvdGVjdGlvblNwYWNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MThBQ0FFQTEyQUVFNkJCMDBCMDRCODMgLyogV0tQcm90ZWN0aW9uU3Bh
Y2VUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc5NDg0MDkxNTBDNEI5NzAwRTUyQ0U5IC8q
IFdLUmVuZGVyTGF5ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjA4NSwxNCArNjA4OSwxMiBAQAog
CQkJCUY2N0REN0JBMTI1RTQwRDkwMDdCRENCOCAvKiBXS1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZVBy
aXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRERCMzJCMTI0RUMyQUIwMDQ4RDEzQyAvKiBX
S1NoYXJlZEFQSUNhc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNDA3NjA2MTI0RkYwMjcwMDY4
RjIwQSAvKiBXS1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0M5RDE1MzcxODQ1ODREQTAw
OUQzOTE4IC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkM0MDc2MUExMjRGRjAzNzAwNjhGMjBBIC8qIFdLU3RyaW5nQ0YuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTc1OUNDRDU5MTgwOEYxNjkwMDc4RThBOCAvKiBXZWJPcmlnaW5EYXRhTWFuYWdl
clByb3h5Q2hhbmdlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzkwOTk4MDEyNTZBOTgy
MDAwODM3NTYgLyogV0tTdHJpbmdQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzdFQUQ0
ODE3RTJDNzdCMDAyRDE5M0QgLyogV0tVc2VyQ29udGVudEluamVjdGVkRnJhbWVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQTRBOUFBODEyQjdFNzk2MDA4RkU5ODQgLyogV0tUZXh0SW5wdXRXaW5k
b3dDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzQwNzYwODEyNEZGMDI3MDA2OEYy
MEEgLyogV0tUeXBlLmggaW4gSGVhZGVycyAqLywKLQkJCQk3Q0Q1RUJCRjE3NDZCMDRDMDAwQzFD
NDUgLyogV0tUeXBlUmVmV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM0MDc2MEExMjRG
RjAyNzAwNjhGMjBBIC8qIFdLVVJMLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzQwNzYxQzEyNEZG
MDM3MDA2OEYyMEEgLyogV0tVUkxDRi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM0MDc2MEMxMjRG
RjAyNzAwNjhGMjBBIC8qIFdLVVJMUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTAxLDkg
KzYxMDMsNyBAQAogCQkJCTc1OUNDRDVBMTgwOEY2MTYwMDc4RThBOCAvKiBXZWJPcmlnaW5EYXRh
TWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzQwNzYyQjEyNEZGMDQwMDA2OEYy
MEEgLyogV0tVUkxSZXNwb25zZU5TLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNjExM0UyOTEyNkNF
MTlCMDA1N0QwQTcgLyogV0tVc2VyQ29udGVudFVSTFBhdHRlcm4uaCBpbiBIZWFkZXJzICovLAot
CQkJCUJDODY5OUI1MTE2QUFEQUEwMDJBOTI1QiAvKiBXS1ZpZXcuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDODY5OUI3MTE2QUFEQUEwMDJBOTI1QiAvKiBXS1ZpZXdJbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQkZBNjE3OUYxMkYwQjk5RDAwMzNFMENBIC8qIFdLVmlld1ByaXZhdGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTc1NTQyMkNDMTgwNzczQ0UwMDQ2RjZBOCAvKiBXZWJPcmlnaW5E
YXRhTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzVFMUFGRTkxNkIyMEI3NTAwNkNDMUYy
IC8qIFdLV2ViQXJjaGl2ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzVFMUFGRUIxNkIyMEI3RTAw
NkNDMUYyIC8qIFdLV2ViQXJjaGl2ZVJlc291cmNlLmggaW4gSGVhZGVycyAqLywKQEAgLTcwMDAs
NiArNzAwMCw4IEBACiAJCQkJQkM4QUNBMTYxNjY3MEQ4OTAwNEMxOTQxIC8qIE9iakNPYmplY3RH
cmFwaENvZGVycy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0Y2NzMzMTJDN0YxNUMwMDhGOUMz
NSAvKiBPcmlnaW5BbmREYXRhYmFzZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFFMzUxRjUx
ODBGNUM3NTAwRTUzQkU5IC8qIFdlYklEQkZhY3RvcnlCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTdDMUZCM0Y0MTg0OTFCODIwMDFBMDNEOCAvKiBXS1Byb2Nlc3NHcm91cC5tbSBpbiBT
b3VyY2VzICovLAorCQkJCTdDMUZCM0YxMTg0OTFCODIwMDFBMDNEOCAvKiBXS0Nvbm5lY3Rpb24u
bW0gaW4gU291cmNlcyAqLywKIAkJCQk3QzM4NzQzNDE3MkY1NjE1MDAxQkQ4OEEgLyogUGFnZUJh
bm5lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzZEMzdGQzE3MkY1NTVGMDA5RDI4NDcgLyog
UGFnZUJhbm5lck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDMTExQjUxMTEyRjYxOTIwMDMz
N0JBQiAvKiBQYWdlQ2xpZW50SW1wbC5tbSBpbiBTb3VyY2VzICovLApAQCAtNzAzMSw2ICs3MDMz
LDcgQEAKIAkJCQkxQTJCQjZEMDE0MTE3QjREMDAwRjM1RDQgLyogUGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEyRDkwRDMxMjgx
Qzk2NjAwMUVCOTYyIC8qIFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUFBNDc5MjMxMkE1OUZEOTAwODIzNkMzIC8qIFBsdWdpblByb2Nlc3NN
YWMubW0gaW4gU291cmNlcyAqLywKKwkJCQk3QzFGQjNFNzE4NDkxQjgyMDAxQTAzRDggLyogV0tC
cm93c2luZ0NvbnRleHRDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM4MjgzOEMx
NkI0NUYwNzAwQTI3OEZFIC8qIFBsdWdpblByb2Nlc3NNYWluLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUEwRUM2MDQxMjRBOUYyQzAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NNYW5hZ2VyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTlGNTRGODk1MTY0OEFFMEYwMDdERjgxQSAvKiBQbHVnaW5Qcm9j
ZXNzTWFuYWdlck1hYy5tbSBpbiBTb3VyY2VzICovLApAQCAtNzA0MSw2ICs3MDQ0LDcgQEAKIAkJ
CQkxQTA0M0RDMjEyNEZGODc1MDBGRkJGQjUgLyogUGx1Z2luUHJveHkuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUEyRDkyMjExMjgxREMxQjAwMUVCOTYyIC8qIFBsdWdpblByb3h5TWFjLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNzU1NDIyQzQxODA2MkJGOTAwNDZGNkE4IC8qIFdlYk9yaWdpbkRh
dGFNYW5hZ2VyUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0MxRkIzRjgxODQ5MUI4MjAw
MUEwM0Q4IC8qIFdLVHlwZVJlZldyYXBwZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQThFRkE3
MDEyNTJCODQxMDBGNzA2N0YgLyogUGx1Z2luUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzcxQTE5NDExODI0RDI5MzAwRjMyQTVFIC8qIFdLTlNEaWN0aW9uYXJ5
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NENjIyNzcxNzM5RDg2MzAwNUJEN0ZGIC8qIFBsdWdp
blNhbmRib3hQcm9maWxlLm1tIGluIFNvdXJjZXMgKi8sCkBAIC03Mjg2LDYgKzcyOTAsNyBAQAog
CQkJCTUxRkNCMTg1MTdCQkZFMDMwMDM5NENEOCAvKiBBc3luY2hyb25vdXNOZXR3b3JrTG9hZGVy
Q2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI5Q0Q1NUFCMTI4RTI5NEYwMDEzM0M4NSAv
KiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFD
NzUzN0YxODNCRTUwRjAwNzJDQjE1IC8qIERhdGFSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJN0MxRkIzRUIxODQ5MUI4MjAwMUEwM0Q4IC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXAu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTJFMzRFNDEzMEI0RDA1MDBBQkQxOUEgLyogV0tBcHBs
aWNhdGlvbkNhY2hlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUM5NjExODE4M0Qy
OTQ3MDBEMjAwMkUgLyogV2ViSURCU2VydmVyQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzQwNzVGMzEyNEZGMDI3MDA2OEYyMEEgLyogV0tBcnJheS5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTcyOTQsOCArNzI5OSw2IEBACiAJCQkJNTEyRjU4RjcxMkE4
OEE1NDAwNjI5NTMwIC8qIFdLQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDNjQ2QzFBMTFERDM5OUYwMDY0NTVCMCAvKiBXS0JhY2tGb3J3YXJk
TGlzdFJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzY0NkMxQzExREQzOTlGMDA2NDU1QjAg
LyogV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUJDQkFB
QzcyMTQ0RTYxOTkwMDUzRjgyRiAvKiBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIubW0gaW4g
U291cmNlcyAqLywKLQkJCQlCQ0JBQUNGNTE0NTIzMjRGMDA1M0Y4MkYgLyogV0tCcm93c2luZ0Nv
bnRleHRHcm91cC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxMjkwOTkyMTgzQUNFQUYwMDU1MjJB
NiAvKiBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMjA0
RUVFMTFDODNFQzgwMDhGMzM3NSAvKiBXS0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
MzVFRUI5RTEyNzc2MUFDMDAzMzIyQjggLyogV0tCdW5kbGVCYWNrRm9yd2FyZExpc3QuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC03MzE4LDcgKzczMjEsNiBAQAogCQkJCUJDNDA3NjI4MTI0RkYwNDAw
MDY4RjIwQSAvKiBXS0NlcnRpZmljYXRlSW5mb01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUx
NUU3NzI3MTgzREQ2RjYwMDA3MjAzRiAvKiBBc3luY1JlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRjAzNjk3ODUxNUY0QkU2QjAwQzNBODBFIC8qIFdLQ29sb3JQaWNrZXJSZXN1bHRMaXN0
ZW5lci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCQ0EyODRENjE0OTJGMkM3MDAxRjkwNDIgLyog
V0tDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0QTYyOTYxNDczMTNBMDAwNkM2
ODFBIC8qIFdLQ29ubmVjdGlvblJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDg3MTAxNjE4
Mjg0MTVEMDAxOEZBMDEgLyogUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDQjlFMjRDMTEyMEUxNUMwMEExMzdFMCAvKiBXS0NvbnRleHQuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC03Mzc5LDcgKzczODEsNiBAQAogCQkJCTFBQzg2RkYzMTMwQjQ2RDMw
MDJDMTI1NyAvKiBXS1BsdWdpblNpdGVEYXRhTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQ0Q1OTdEMTExMkI1NkFDMDBFQzhDMjMgLyogV0tQcmVmZXJlbmNlcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFMTM0RjAxQTEyRUE1RDk5MDA0RUM1OEQgLyogV0tQcmludGluZ1ZpZXcubW0g
aW4gU291cmNlcyAqLywKLQkJCQlCQ0JBQUNFQzE0NTIyNUUzMDA1M0Y4MkYgLyogV0tQcm9jZXNz
R3JvdXAubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTJGNThGQjEyQTg4QTU0MDA2Mjk1MzAgLyog
V0tQcm90ZWN0aW9uU3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzc5NDg0MDgxNTBDNEI5
NzAwRTUyQ0U5IC8qIFdLUmVuZGVyTGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzc2MDg4
MjIxNTA0MTRGNzAwRkM4MkM3IC8qIFdLUmVuZGVyT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLApA
QCAtNzM5MSw3ICs3MzkyLDYgQEAKIAkJCQkxQTRBOUFBOTEyQjdFNzk2MDA4RkU5ODQgLyogV0tU
ZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFDNzUzN0Ix
ODNBOUZEQjAwNzJDQjE1IC8qIFBhZ2VMb2FkU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkM0MDc2MDcxMjRGRjAyNzAwNjhGMjBBIC8qIFdLVHlwZS5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk3Q0Q1RUJCRTE3NDZCMDRDMDAwQzFDNDUgLyogV0tUeXBlUmVmV3JhcHBlci5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDNDA3NjA5MTI0RkYwMjcwMDY4RjIwQSAvKiBXS1VSTC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQzQwNzYxQjEyNEZGMDM3MDA2OEYyMEEgLyogV0tVUkxDRi5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUJDNDA3NjBCMTI0RkYwMjcwMDY4RjIwQSAvKiBXS1VSTFJlcXVlc3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218076</attachid>
            <date>2013-11-29 12:09:36 -0800</date>
            <delta_ts>2013-11-29 12:47:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125017-20131129120936.patch</filename>
            <type>text/plain</type>
            <size>201530</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTg3MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDEzLTExLTI5ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBBUEkgZmlsZXMgc2hhcmVkIGJl
dHdlZW4gTWFjIGFuZCBpT1MgdG8gdGhlIENvY29hIGRpcmVjdG9yeQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1MDE3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dL
QnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIuaC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5tbTogQ29w
aWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2luZ0NvbnRl
eHRDb250cm9sbGVyLm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tCcm93c2lu
Z0NvbnRleHRDb250cm9sbGVySW50ZXJuYWwuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVySW50ZXJuYWwuaC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxl
clByaXZhdGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
V0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyUHJpdmF0ZS5oLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRHcm91cC5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dEdyb3VwLmguCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4dEdyb3VwLm1tOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4
dEdyb3VwLm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRl
eHRHcm91cEludGVybmFsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5oLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRHcm91cFByaXZhdGUuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2luZ0NvbnRleHRHcm91
cFByaXZhdGUuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250
ZXh0TG9hZERlbGVnYXRlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlLmguCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4dFBvbGljeURlbGVnYXRlLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0UG9s
aWN5RGVsZWdhdGUuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29ubmVjdGlv
bi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Nvbm5l
Y3Rpb24uaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29ubmVjdGlvbi5tbTog
Q29waWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tDb25uZWN0aW9u
Lm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb25uZWN0aW9uSW50ZXJuYWwu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tDb25uZWN0
aW9uSW50ZXJuYWwuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc0dy
b3VwLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJv
Y2Vzc0dyb3VwLmguCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91
cC5tbTogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcm9j
ZXNzR3JvdXAubW0uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91
cEludGVybmFsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1dLUHJvY2Vzc0dyb3VwSW50ZXJuYWwuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L1dLUHJvY2Vzc0dyb3VwUHJpdmF0ZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL21hYy9XS1Byb2Nlc3NHcm91cFByaXZhdGUuaC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL1dLVHlwZVJlZldyYXBwZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tUeXBlUmVmV3JhcHBlci5oLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tUeXBlUmVmV3JhcHBlci5tbTogQ29waWVkIGZyb20gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tUeXBlUmVmV3JhcHBlci5tbS4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLVmlldy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L1dLVmlld1ByaXZhdGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9tYWMvV0tWaWV3UHJpdmF0ZS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV2Vi
S2l0Mi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XZWJL
aXQyLmguCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2luZ0NvbnRleHRDb250
cm9sbGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2lu
Z0NvbnRleHRDb250cm9sbGVyLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
bWFjL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckludGVybmFsLmg6IFJlbW92ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyUHJpdmF0
ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250
ZXh0R3JvdXAuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dz
aW5nQ29udGV4dEdyb3VwLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFj
L1dLQnJvd3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0R3JvdXBQcml2YXRlLmg6IFJlbW92ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdh
dGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29u
dGV4dFBvbGljeURlbGVnYXRlLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9t
YWMvV0tDb25uZWN0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMv
V0tDb25uZWN0aW9uLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dL
Q29ubmVjdGlvbkludGVybmFsLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9t
YWMvV0tQcm9jZXNzR3JvdXAuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21h
Yy9XS1Byb2Nlc3NHcm91cC5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21h
Yy9XS1Byb2Nlc3NHcm91cEludGVybmFsLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9tYWMvV0tQcm9jZXNzR3JvdXBQcml2YXRlLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9tYWMvV0tUeXBlUmVmV3JhcHBlci5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvbWFjL1dLVHlwZVJlZldyYXBwZXIubW06IFJlbW92ZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9tYWMvV0tWaWV3UHJpdmF0ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvbWFjL1dlYktpdDIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisKIDIwMTMtMTEtMjkgIEh1bnNlb3AgSmVvbmcgIDxoczg1Lmplb25n
QHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIHZpZXdwb3J0IG11c3QgYmUgc2FtZSB3aXRo
IHRoZSBzaXplIG9mIHdlYnZpZXcKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIu
aAkocmV2aXNpb24gMTU5ODczKQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIuaDoxNTk4NzMpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxXZWJLaXQyL1dLQnJvd3NpbmdDb250ZXh0R3Jv
dXAuaD4KKyNpbXBvcnQgPFdlYktpdDIvV0tGb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxXZWJLaXQy
L1dLUHJvY2Vzc0dyb3VwLmg+CisKKyNpZiBXS19BUElfRU5BQkxFRAorCitAY2xhc3MgV0tCYWNr
Rm9yd2FyZExpc3Q7CitAY2xhc3MgV0tCYWNrRm9yd2FyZExpc3RJdGVtOworQHByb3RvY29sIFdL
QnJvd3NpbmdDb250ZXh0SGlzdG9yeURlbGVnYXRlOworQHByb3RvY29sIFdLQnJvd3NpbmdDb250
ZXh0TG9hZERlbGVnYXRlOworQHByb3RvY29sIFdLQnJvd3NpbmdDb250ZXh0UG9saWN5RGVsZWdh
dGU7CisKK1dLX0FQSV9DTEFTUworQGludGVyZmFjZSBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xs
ZXIgOiBOU09iamVjdAorCitAcHJvcGVydHkgKHJlYWRvbmx5KSBXS1Byb2Nlc3NHcm91cCAqcHJv
Y2Vzc0dyb3VwOworQHByb3BlcnR5IChyZWFkb25seSkgV0tCcm93c2luZ0NvbnRleHRHcm91cCAq
YnJvd3NpbmdDb250ZXh0R3JvdXA7CisKKyNwcmFnbWEgbWFyayBEZWxlZ2F0ZXMKKworQHByb3Bl
cnR5IChhc3NpZ24pIGlkIDxXS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZT4gbG9hZERlbGVn
YXRlOworQHByb3BlcnR5IChhc3NpZ24pIGlkIDxXS0Jyb3dzaW5nQ29udGV4dFBvbGljeURlbGVn
YXRlPiBwb2xpY3lEZWxlZ2F0ZTsKK0Bwcm9wZXJ0eSAoYXNzaWduKSBpZCA8V0tCcm93c2luZ0Nv
bnRleHRIaXN0b3J5RGVsZWdhdGU+IGhpc3RvcnlEZWxlZ2F0ZTsKKworI3ByYWdtYSBtYXJrIExv
YWRpbmcKKworKyAodm9pZClyZWdpc3RlclNjaGVtZUZvckN1c3RvbVByb3RvY29sOihOU1N0cmlu
ZyAqKXNjaGVtZTsKKysgKHZvaWQpdW5yZWdpc3RlclNjaGVtZUZvckN1c3RvbVByb3RvY29sOihO
U1N0cmluZyAqKXNjaGVtZTsKKworLyogTG9hZCBhIHJlcXVlc3QuIFRoaXMgaXMgb25seSB2YWxp
ZCBmb3IgcmVxdWVzdHMgb2Ygbm9uLWZpbGU6IFVSTHMuIFBhc3NpbmcgYQorICAgZmlsZTogVVJM
IHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uLiAqLworLSAodm9pZClsb2FkUmVxdWVzdDooTlNVUkxS
ZXF1ZXN0ICopcmVxdWVzdDsKKy0gKHZvaWQpbG9hZFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJl
cXVlc3QgdXNlckRhdGE6KGlkKXVzZXJEYXRhOworCisvKiBMb2FkIGEgZmlsZTogVVJMLiBPcGVu
cyB0aGUgc2FuZGJveCBvbmx5IGZvciBmaWxlcyB3aXRoaW4gYWxsb3dlZERpcmVjdG9yeS4KKyAg
ICAtIFBhc3NpbmcgYSBub24tZmlsZTogVVJMIHRvIGVpdGhlciBwYXJhbWV0ZXIgd2lsbCB5aWVs
ZCBhbiBleGNlcHRpb24uCisgICAgLSBQYXNzaW5nIG5pbCBhcyB0aGUgYWxsb3dlZERpcmVjdG9y
eSB3aWxsIG9wZW4gdGhlIGVudGlyZSBmaWxlLXN5c3RlbSBmb3IKKyAgICAgIHJlYWRpbmcuCisq
LworLSAodm9pZClsb2FkRmlsZVVSTDooTlNVUkwgKilVUkwgcmVzdHJpY3RUb0ZpbGVzV2l0aGlu
OihOU1VSTCAqKWFsbG93ZWREaXJlY3Rvcnk7CistICh2b2lkKWxvYWRGaWxlVVJMOihOU1VSTCAq
KVVSTCByZXN0cmljdFRvRmlsZXNXaXRoaW46KE5TVVJMICopYWxsb3dlZERpcmVjdG9yeSB1c2Vy
RGF0YTooaWQpdXNlckRhdGE7CisKKy8qIExvYWQgYSBwYWdlIHVzaW5nIHRoZSBwYXNzZWQgaW4g
c3RyaW5nIGFzIGl0cyBjb250ZW50cy4gKi8KKy0gKHZvaWQpbG9hZEhUTUxTdHJpbmc6KE5TU3Ry
aW5nICopSFRNTFN0cmluZyBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkw7CistICh2b2lkKWxvYWRI
VE1MU3RyaW5nOihOU1N0cmluZyAqKUhUTUxTdHJpbmcgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJM
IHVzZXJEYXRhOihpZCl1c2VyRGF0YTsKKworLyogTG9hZCBhIHBhZ2UgdXNpbmcgdGhlIHBhc3Nl
ZCBpbiBkYXRhIGFzIGl0cyBjb250ZW50cy4gKi8KKy0gKHZvaWQpbG9hZERhdGE6KE5TRGF0YSAq
KWRhdGEgTUlNRVR5cGU6KE5TU3RyaW5nICopTUlNRVR5cGUgdGV4dEVuY29kaW5nTmFtZTooTlNT
dHJpbmcgKillbmNvZGluZ05hbWUgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMOworLSAodm9pZCls
b2FkRGF0YTooTlNEYXRhICopZGF0YSBNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZSB0ZXh0
RW5jb2RpbmdOYW1lOihOU1N0cmluZyAqKWVuY29kaW5nTmFtZSBiYXNlVVJMOihOU1VSTCAqKWJh
c2VVUkwgdXNlckRhdGE6KGlkKXVzZXJEYXRhOworCisvKiBTdG9wcyB0aGUgbG9hZCBhc3NvY2lh
dGVkIHdpdGggdGhlIGFjdGl2ZSBVUkwuICovCistICh2b2lkKXN0b3BMb2FkaW5nOworCisvKiBS
ZWxvYWQgdGhlIGN1cnJlbnRseSBhY3RpdmUgVVJMLiAqLworLSAodm9pZClyZWxvYWQ7CisKKy8q
IFJlbG9hZCB0aGUgY3VycmVudGx5IGFjdGl2ZSBVUkwsIGJ5cGFzc2luZyBjYWNoZXMuICovCist
ICh2b2lkKXJlbG9hZEZyb21PcmlnaW47CisKKworI3ByYWdtYSBtYXJrIEJhY2svRm9yd2FyZAor
CisvKiBHbyB0byB0aGUgbmV4dCBwYWdlIGluIHRoZSBiYWNrL2ZvcndhcmQgbGlzdC4gKi8KKy0g
KHZvaWQpZ29Gb3J3YXJkOworCisvKiBXaGV0aGVyIHRoZXJlIGlzIGEgbmV4dCBwYWdlIGluIHRo
ZSBiYWNrL2ZvcndhcmQgbGlzdC4gKi8KK0Bwcm9wZXJ0eShyZWFkb25seSkgQk9PTCBjYW5Hb0Zv
cndhcmQ7CisKKy8qIEdvIHRvIHRoZSBwcmV2aW91cyBwYWdlIGluIHRoZSBiYWNrL2ZvcndhcmQg
bGlzdC4gKi8KKy0gKHZvaWQpZ29CYWNrOworCisvKiBXaGV0aGVyIHRoZXJlIGlzIGEgcHJldmlv
dXMgcGFnZSBpbiB0aGUgYmFjay9mb3J3YXJkIGxpc3QuICovCitAcHJvcGVydHkocmVhZG9ubHkp
IEJPT0wgY2FuR29CYWNrOworCistICh2b2lkKWdvVG9CYWNrRm9yd2FyZExpc3RJdGVtOihXS0Jh
Y2tGb3J3YXJkTGlzdEl0ZW0gKilpdGVtOworCitAcHJvcGVydHkocmVhZG9ubHkpIFdLQmFja0Zv
cndhcmRMaXN0ICpiYWNrRm9yd2FyZExpc3Q7CisKKyNwcmFnbWEgbWFyayBBY3RpdmUgTG9hZCBJ
bnRyb3NwZWN0aW9uCisKKy8qIFVSTCBmb3IgdGhlIGFjdGl2ZSBsb2FkLiBUaGlzIGlzIHRoZSBV
UkwgdGhhdCBzaG91bGQgYmUgc2hvd24gaW4gdXNlciBpbnRlcmZhY2UuICovCitAcHJvcGVydHko
cmVhZG9ubHkpIE5TVVJMICphY3RpdmVVUkw7CisKKy8qIFVSTCBmb3IgYSByZXF1ZXN0IHRoYXQg
aGFzIGJlZW4gc2VudCwgYnV0IG5vIHJlc3BvbnNlIGhhcyBiZWVuIHJlY2VpdmVkIHlldC4gKi8K
K0Bwcm9wZXJ0eShyZWFkb25seSkgTlNVUkwgKnByb3Zpc2lvbmFsVVJMOworCisvKiBVUkwgZm9y
IGEgcmVxdWVzdCB0aGF0IGhhcyBiZWVuIHJlY2VpdmVkLCBhbmQgaXMgbm93IGJlaW5nIHVzZWQu
ICovCitAcHJvcGVydHkocmVhZG9ubHkpIE5TVVJMICpjb21taXR0ZWRVUkw7CisKK0Bwcm9wZXJ0
eShyZWFkb25seSkgTlNVUkwgKnVucmVhY2hhYmxlVVJMOworCitAcHJvcGVydHkocmVhZG9ubHkp
IGRvdWJsZSBlc3RpbWF0ZWRQcm9ncmVzczsKKworI3ByYWdtYSBtYXJrIEFjdGl2ZSBEb2N1bWVu
dCBJbnRyb3NwZWN0aW9uCisKKy8qIFRpdGxlIG9mIHRoZSBkb2N1bWVudCBhc3NvY2lhdGVkIHdp
dGggdGhlIGFjdGl2ZSBsb2FkLiAqLworQHByb3BlcnR5KHJlYWRvbmx5KSBOU1N0cmluZyAqdGl0
bGU7CisKKworI3ByYWdtYSBtYXJrIFpvb20KKworLyogU2V0cyB0aGUgdGV4dCB6b29tIGZvciB0
aGUgYWN0aXZlIFVSTC4gKi8KK0Bwcm9wZXJ0eSBDR0Zsb2F0IHRleHRab29tOworCisvKiBTZXRz
IHRoZSB0ZXh0IHpvb20gZm9yIHRoZSBhY3RpdmUgVVJMLiAqLworQHByb3BlcnR5IENHRmxvYXQg
cGFnZVpvb207CisKK0BlbmQKKworI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxl
ci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
QnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5tbQkocmV2aXNpb24gMTU5ODczKQkoZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIu
bW06MTU5ODczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Jyb3dz
aW5nQ29udGV4dENvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldLQnJvd3NpbmdDb250
ZXh0Q29udHJvbGxlckludGVybmFsLmgiCisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0
ICJPYmpDT2JqZWN0R3JhcGguaCIKKyNpbXBvcnQgIldLQmFja0ZvcndhcmRMaXN0SW50ZXJuYWwu
aCIKKyNpbXBvcnQgIldLQmFja0ZvcndhcmRMaXN0SXRlbUludGVybmFsLmgiCisjaW1wb3J0ICJX
S0Vycm9yQ0YuaCIKKyNpbXBvcnQgIldLRnJhbWUuaCIKKyNpbXBvcnQgIldLRnJhbWVQb2xpY3lM
aXN0ZW5lci5oIgorI2ltcG9ydCAiV0tOU0FycmF5LmgiCisjaW1wb3J0ICJXS05TVVJMRXh0cmFz
LmgiCisjaW1wb3J0ICJXS1BhZ2VQcml2YXRlLmgiCisjaW1wb3J0ICJXS1JldGFpblB0ci5oIgor
I2ltcG9ydCAiV0tTdHJpbmdDRi5oIgorI2ltcG9ydCAiV0tVUkxDRi5oIgorI2ltcG9ydCAiV0tV
UkxSZXF1ZXN0LmgiCisjaW1wb3J0ICJXS1VSTFJlcXVlc3ROUy5oIgorI2ltcG9ydCAiV0tVUkxS
ZXNwb25zZS5oIgorI2ltcG9ydCAiV0tVUkxSZXNwb25zZU5TLmgiCisjaW1wb3J0ICJXZWJDb250
ZXh0LmgiCisjaW1wb3J0ICJXZWJEYXRhLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNp
bXBvcnQgPHd0Zi9PYmpjUnVudGltZUV4dHJhcy5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5o
PgorCisjaW1wb3J0ICJXS0Jyb3dzaW5nQ29udGV4dEdyb3VwSW50ZXJuYWwuaCIKKyNpbXBvcnQg
IldLQnJvd3NpbmdDb250ZXh0SGFuZGxlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLQnJvd3NpbmdD
b250ZXh0TG9hZERlbGVnYXRlLmgiCisjaW1wb3J0ICJXS0Jyb3dzaW5nQ29udGV4dFBvbGljeURl
bGVnYXRlLmgiCisjaW1wb3J0ICJXS1Byb2Nlc3NHcm91cEludGVybmFsLmgiCisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7CisKK2NsYXNzIFBhZ2VMb2FkU3RhdGVPYnNlcnZlciA6IHB1YmxpYyBQ
YWdlTG9hZFN0YXRlOjpPYnNlcnZlciB7CitwdWJsaWM6CisgICAgUGFnZUxvYWRTdGF0ZU9ic2Vy
dmVyKFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqY29udHJvbGxlcikKKyAgICAgICAgOiBt
X2NvbnRyb2xsZXIoY29udHJvbGxlcikKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIHZp
cnR1YWwgdm9pZCB3aWxsQ2hhbmdlVGl0bGUoKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgW21f
Y29udHJvbGxlciB3aWxsQ2hhbmdlVmFsdWVGb3JLZXk6QCJ0aXRsZSJdOworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VUaXRsZSgpIE9WRVJSSURFCisgICAgeworICAgICAgICBb
bV9jb250cm9sbGVyIGRpZENoYW5nZVZhbHVlRm9yS2V5OkAidGl0bGUiXTsKKyAgICB9CisKKyAg
ICBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKm1fY29udHJvbGxlcjsKK307CisKK3N0YXRp
YyBpbmxpbmUgTlNTdHJpbmcgKmF1dG9yZWxlYXNlZChXS1N0cmluZ1JlZiBzdHJpbmcpCit7Cisg
ICAgcmV0dXJuIHN0cmluZyA/IENGQnJpZGdpbmdSZWxlYXNlKFdLU3RyaW5nQ29weUNGU3RyaW5n
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGFkb3B0V0soc3RyaW5nKS5nZXQoKSkpIDogbmlsOworfQor
CitzdGF0aWMgaW5saW5lIE5TVVJMICphdXRvcmVsZWFzZWQoV0tVUkxSZWYgdXJsKQoreworICAg
IHJldHVybiB1cmwgPyBDRkJyaWRnaW5nUmVsZWFzZShXS1VSTENvcHlDRlVSTChrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBhZG9wdFdLKHVybCkuZ2V0KCkpKSA6IG5pbDsKK30KKworTlNTdHJpbmcgKiBj
b25zdCBXS0FjdGlvbklzTWFpbkZyYW1lS2V5ID0gQCJXS0FjdGlvbklzTWFpbkZyYW1lS2V5IjsK
K05TU3RyaW5nICogY29uc3QgV0tBY3Rpb25OYXZpZ2F0aW9uVHlwZUtleSA9IEAiV0tBY3Rpb25O
YXZpZ2F0aW9uVHlwZUtleSI7CitOU1N0cmluZyAqIGNvbnN0IFdLQWN0aW9uTW91c2VCdXR0b25L
ZXkgPSBAIldLQWN0aW9uTW91c2VCdXR0b25LZXkiOworTlNTdHJpbmcgKiBjb25zdCBXS0FjdGlv
bk1vZGlmaWVyRmxhZ3NLZXkgPSBAIldLQWN0aW9uTW9kaWZpZXJGbGFnc0tleSI7CitOU1N0cmlu
ZyAqIGNvbnN0IFdLQWN0aW9uVVJMUmVxdWVzdEtleSA9IEAiV0tBY3Rpb25VUkxSZXF1ZXN0S2V5
IjsKK05TU3RyaW5nICogY29uc3QgV0tBY3Rpb25VUkxSZXNwb25zZUtleSA9IEAiV0tBY3Rpb25V
UkxSZXNwb25zZUtleSI7CitOU1N0cmluZyAqIGNvbnN0IFdLQWN0aW9uRnJhbWVOYW1lS2V5ID0g
QCJXS0FjdGlvbkZyYW1lTmFtZUtleSI7CitOU1N0cmluZyAqIGNvbnN0IFdLQWN0aW9uT3JpZ2lu
YXRpbmdGcmFtZVVSTEtleSA9IEAiV0tBY3Rpb25PcmlnaW5hdGluZ0ZyYW1lVVJMS2V5IjsKK05T
U3RyaW5nICogY29uc3QgV0tBY3Rpb25DYW5TaG93TUlNRVR5cGVLZXkgPSBAIldLQWN0aW9uQ2Fu
U2hvd01JTUVUeXBlS2V5IjsKKworQGltcGxlbWVudGF0aW9uIFdLQnJvd3NpbmdDb250ZXh0Q29u
dHJvbGxlciB7CisgICAgLy8gVW5kZXJseWluZyBXS1BhZ2VSZWYuCisgICAgV0tSZXRhaW5QdHI8
V0tQYWdlUmVmPiBfcGFnZVJlZjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxQYWdlTG9hZFN0YXRl
T2JzZXJ2ZXI+IF9wYWdlTG9hZFN0YXRlT2JzZXJ2ZXI7Cit9CisKKy0gKHZvaWQpZGVhbGxvYwor
eworICAgIHRvSW1wbChfcGFnZVJlZi5nZXQoKSktPnBhZ2VMb2FkU3RhdGUoKS5yZW1vdmVPYnNl
cnZlcigqX3BhZ2VMb2FkU3RhdGVPYnNlcnZlcik7CisgICAgV0tQYWdlU2V0UGFnZUxvYWRlckNs
aWVudChfcGFnZVJlZi5nZXQoKSwgbnVsbHB0cik7CisgICAgV0tQYWdlU2V0UGFnZVBvbGljeUNs
aWVudChfcGFnZVJlZi5nZXQoKSwgbnVsbHB0cik7CisKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9
CisKKy0gKFdLUHJvY2Vzc0dyb3VwICopcHJvY2Vzc0dyb3VwCit7CisgICAgV2ViQ29udGV4dCog
Y29udGV4dCA9IHRvSW1wbChfcGFnZVJlZi5nZXQoKSktPnByb2Nlc3MoKS0+Y29udGV4dCgpOwor
ICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gd3JhcHBl
cigqY29udGV4dCk7Cit9CisKKy0gKFdLQnJvd3NpbmdDb250ZXh0R3JvdXAgKilicm93c2luZ0Nv
bnRleHRHcm91cAoreworICAgIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwID0gdG9JbXBsKF9wYWdl
UmVmLmdldCgpKS0+cGFnZUdyb3VwKCk7CisgICAgaWYgKCFwYWdlR3JvdXApCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgcmV0dXJuIHdyYXBwZXIoKnBhZ2VHcm91cCk7Cit9CisKKy0gKFdLUGFn
ZVJlZilfcGFnZVJlZgoreworICAgIHJldHVybiBfcGFnZVJlZi5nZXQoKTsKK30KKworI3ByYWdt
YSBtYXJrIExvYWRpbmcKKworKyAodm9pZClyZWdpc3RlclNjaGVtZUZvckN1c3RvbVByb3RvY29s
OihOU1N0cmluZyAqKXNjaGVtZQoreworICAgIGlmICghc2NoZW1lKQorICAgICAgICByZXR1cm47
CisKKyAgICBOU1N0cmluZyAqbG93ZXJjYXNlU2NoZW1lID0gW3NjaGVtZSBsb3dlcmNhc2VTdHJp
bmddOworICAgIFtbV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyIGN1c3RvbVNjaGVtZXNdIGFk
ZE9iamVjdDpsb3dlcmNhc2VTY2hlbWVdOworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl0gcG9zdE5vdGlmaWNhdGlvbk5hbWU6U2NoZW1lRm9yQ3VzdG9tUHJvdG9jb2xS
ZWdpc3RlcmVkTm90aWZpY2F0aW9uTmFtZSBvYmplY3Q6bG93ZXJjYXNlU2NoZW1lXTsKK30KKwor
KyAodm9pZCl1bnJlZ2lzdGVyU2NoZW1lRm9yQ3VzdG9tUHJvdG9jb2w6KE5TU3RyaW5nICopc2No
ZW1lCit7CisgICAgaWYgKCFzY2hlbWUpCisgICAgICAgIHJldHVybjsKKworICAgIE5TU3RyaW5n
ICpsb3dlcmNhc2VTY2hlbWUgPSBbc2NoZW1lIGxvd2VyY2FzZVN0cmluZ107CisgICAgW1tXS0Jy
b3dzaW5nQ29udGV4dENvbnRyb2xsZXIgY3VzdG9tU2NoZW1lc10gcmVtb3ZlT2JqZWN0Omxvd2Vy
Y2FzZVNjaGVtZV07CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBw
b3N0Tm90aWZpY2F0aW9uTmFtZTpTY2hlbWVGb3JDdXN0b21Qcm90b2NvbFVucmVnaXN0ZXJlZE5v
dGlmaWNhdGlvbk5hbWUgb2JqZWN0Omxvd2VyY2FzZVNjaGVtZV07Cit9CisKKy0gKHZvaWQpbG9h
ZFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QKK3sKKyAgICBbc2VsZiBsb2FkUmVxdWVz
dDpyZXF1ZXN0IHVzZXJEYXRhOm5pbF07Cit9CisKKy0gKHZvaWQpbG9hZFJlcXVlc3Q6KE5TVVJM
UmVxdWVzdCAqKXJlcXVlc3QgdXNlckRhdGE6KGlkKXVzZXJEYXRhCit7CisgICAgV0tSZXRhaW5Q
dHI8V0tVUkxSZXF1ZXN0UmVmPiB3a1JlcXVlc3QgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENyZWF0
ZVdpdGhOU1VSTFJlcXVlc3QocmVxdWVzdCkpOworCisgICAgUmVmUHRyPE9iakNPYmplY3RHcmFw
aD4gd2tVc2VyRGF0YTsKKyAgICBpZiAodXNlckRhdGEpCisgICAgICAgIHdrVXNlckRhdGEgPSBP
YmpDT2JqZWN0R3JhcGg6OmNyZWF0ZSh1c2VyRGF0YSk7CisKKyAgICBXS1BhZ2VMb2FkVVJMUmVx
dWVzdFdpdGhVc2VyRGF0YShfcGFnZVJlZi5nZXQoKSwgd2tSZXF1ZXN0LmdldCgpLCAoV0tUeXBl
UmVmKXdrVXNlckRhdGEuZ2V0KCkpOworfQorCistICh2b2lkKWxvYWRGaWxlVVJMOihOU1VSTCAq
KVVSTCByZXN0cmljdFRvRmlsZXNXaXRoaW46KE5TVVJMICopYWxsb3dlZERpcmVjdG9yeQorewor
ICAgIFtzZWxmIGxvYWRGaWxlVVJMOlVSTCByZXN0cmljdFRvRmlsZXNXaXRoaW46YWxsb3dlZERp
cmVjdG9yeSB1c2VyRGF0YTpuaWxdOworfQorCistICh2b2lkKWxvYWRGaWxlVVJMOihOU1VSTCAq
KVVSTCByZXN0cmljdFRvRmlsZXNXaXRoaW46KE5TVVJMICopYWxsb3dlZERpcmVjdG9yeSB1c2Vy
RGF0YTooaWQpdXNlckRhdGEKK3sKKyAgICBpZiAoIVtVUkwgaXNGaWxlVVJMXSB8fCAoYWxsb3dl
ZERpcmVjdG9yeSAmJiAhW2FsbG93ZWREaXJlY3RvcnkgaXNGaWxlVVJMXSkpCisgICAgICAgIFtO
U0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJBdHRl
bXB0ZWQgdG8gbG9hZCBhIG5vbi1maWxlIFVSTCJdOworCisgICAgV0tSZXRhaW5QdHI8V0tVUkxS
ZWY+IHdrVVJMID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhDRlVSTCgoQ0ZVUkxSZWYpVVJMKSk7
CisgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrQWxsb3dlZERpcmVjdG9yeSA9IGFkb3B0V0so
V0tVUkxDcmVhdGVXaXRoQ0ZVUkwoKENGVVJMUmVmKWFsbG93ZWREaXJlY3RvcnkpKTsKKyAgICAK
KyAgICBSZWZQdHI8T2JqQ09iamVjdEdyYXBoPiB3a1VzZXJEYXRhOworICAgIGlmICh1c2VyRGF0
YSkKKyAgICAgICAgd2tVc2VyRGF0YSA9IE9iakNPYmplY3RHcmFwaDo6Y3JlYXRlKHVzZXJEYXRh
KTsKKworICAgIFdLUGFnZUxvYWRGaWxlV2l0aFVzZXJEYXRhKF9wYWdlUmVmLmdldCgpLCB3a1VS
TC5nZXQoKSwgd2tBbGxvd2VkRGlyZWN0b3J5LmdldCgpLCAoV0tUeXBlUmVmKXdrVXNlckRhdGEu
Z2V0KCkpOworfQorCistICh2b2lkKWxvYWRIVE1MU3RyaW5nOihOU1N0cmluZyAqKUhUTUxTdHJp
bmcgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMCit7CisgICAgW3NlbGYgbG9hZEhUTUxTdHJpbmc6
SFRNTFN0cmluZyBiYXNlVVJMOmJhc2VVUkwgdXNlckRhdGE6bmlsXTsKK30KKworLSAodm9pZCls
b2FkSFRNTFN0cmluZzooTlNTdHJpbmcgKilIVE1MU3RyaW5nIGJhc2VVUkw6KE5TVVJMICopYmFz
ZVVSTCB1c2VyRGF0YTooaWQpdXNlckRhdGEKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gd2tIVE1MU3RyaW5nOworICAgIGlmIChIVE1MU3RyaW5nKQorICAgICAgICB3a0hUTUxTdHJp
bmcgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilIVE1M
U3RyaW5nKSk7CisKKyAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tCYXNlVVJMOworICAgIGlm
IChiYXNlVVJMKQorICAgICAgICB3a0Jhc2VVUkwgPSBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aENG
VVJMKChDRlVSTFJlZiliYXNlVVJMKSk7CisKKyAgICBSZWZQdHI8T2JqQ09iamVjdEdyYXBoPiB3
a1VzZXJEYXRhOworICAgIGlmICh1c2VyRGF0YSkKKyAgICAgICAgd2tVc2VyRGF0YSA9IE9iakNP
YmplY3RHcmFwaDo6Y3JlYXRlKHVzZXJEYXRhKTsKKworICAgIFdLUGFnZUxvYWRIVE1MU3RyaW5n
V2l0aFVzZXJEYXRhKF9wYWdlUmVmLmdldCgpLCB3a0hUTUxTdHJpbmcuZ2V0KCksIHdrQmFzZVVS
TC5nZXQoKSwgKFdLVHlwZVJlZil3a1VzZXJEYXRhLmdldCgpKTsKK30KKworLSAodm9pZClsb2Fk
RGF0YTooTlNEYXRhICopZGF0YSBNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZSB0ZXh0RW5j
b2RpbmdOYW1lOihOU1N0cmluZyAqKWVuY29kaW5nTmFtZSBiYXNlVVJMOihOU1VSTCAqKWJhc2VV
UkwKK3sKKyAgICBbc2VsZiBsb2FkRGF0YTpkYXRhIE1JTUVUeXBlOk1JTUVUeXBlIHRleHRFbmNv
ZGluZ05hbWU6ZW5jb2RpbmdOYW1lIGJhc2VVUkw6YmFzZVVSTCB1c2VyRGF0YTpuaWxdOworfQor
CitzdGF0aWMgdm9pZCByZWxlYXNlTlNEYXRhKHVuc2lnbmVkIGNoYXIqLCBjb25zdCB2b2lkKiBk
YXRhKQoreworICAgIFsoTlNEYXRhICopZGF0YSByZWxlYXNlXTsKK30KKworLSAodm9pZClsb2Fk
RGF0YTooTlNEYXRhICopZGF0YSBNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZSB0ZXh0RW5j
b2RpbmdOYW1lOihOU1N0cmluZyAqKWVuY29kaW5nTmFtZSBiYXNlVVJMOihOU1VSTCAqKWJhc2VV
UkwgdXNlckRhdGE6KGlkKXVzZXJEYXRhCit7CisgICAgUmVmUHRyPFdlYkRhdGE+IHdrRGF0YTsK
KyAgICBpZiAoZGF0YSkgeworICAgICAgICBbZGF0YSByZXRhaW5dOworICAgICAgICB3a0RhdGEg
PSBXZWJEYXRhOjpjcmVhdGVXaXRob3V0Q29weWluZygoY29uc3QgdW5zaWduZWQgY2hhciopW2Rh
dGEgYnl0ZXNdLCBbZGF0YSBsZW5ndGhdLCByZWxlYXNlTlNEYXRhLCBkYXRhKTsKKyAgICB9CisK
KyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tNSU1FVHlwZTsKKyAgICBpZiAoTUlNRVR5
cGUpCisgICAgICAgIHdrTUlNRVR5cGUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aENGU3Ry
aW5nKChDRlN0cmluZ1JlZilNSU1FVHlwZSkpOworCisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHdrRW5jb2RpbmdOYW1lOworICAgIGlmIChlbmNvZGluZ05hbWUpCisgICAgICAgIHdrRW5j
b2RpbmdOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdS
ZWYpZW5jb2RpbmdOYW1lKSk7CisKKyAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tCYXNlVVJM
OworICAgIGlmIChiYXNlVVJMKQorICAgICAgICB3a0Jhc2VVUkwgPSBhZG9wdFdLKFdLVVJMQ3Jl
YXRlV2l0aENGVVJMKChDRlVSTFJlZiliYXNlVVJMKSk7CisKKyAgICBSZWZQdHI8T2JqQ09iamVj
dEdyYXBoPiB3a1VzZXJEYXRhOworICAgIGlmICh1c2VyRGF0YSkKKyAgICAgICAgd2tVc2VyRGF0
YSA9IE9iakNPYmplY3RHcmFwaDo6Y3JlYXRlKHVzZXJEYXRhKTsKKworICAgIFdLUGFnZUxvYWRE
YXRhV2l0aFVzZXJEYXRhKF9wYWdlUmVmLmdldCgpLCB0b0FQSSh3a0RhdGEuZ2V0KCkpLCB3a01J
TUVUeXBlLmdldCgpLCB3a0VuY29kaW5nTmFtZS5nZXQoKSwgd2tCYXNlVVJMLmdldCgpLCAoV0tU
eXBlUmVmKXdrVXNlckRhdGEuZ2V0KCkpOworfQorCistICh2b2lkKXN0b3BMb2FkaW5nCit7Cisg
ICAgV0tQYWdlU3RvcExvYWRpbmcoX3BhZ2VSZWYuZ2V0KCkpOworfQorCistICh2b2lkKXJlbG9h
ZAoreworICAgIFdLUGFnZVJlbG9hZChfcGFnZVJlZi5nZXQoKSk7Cit9CisKKy0gKHZvaWQpcmVs
b2FkRnJvbU9yaWdpbgoreworICAgIFdLUGFnZVJlbG9hZEZyb21PcmlnaW4oX3BhZ2VSZWYuZ2V0
KCkpOworfQorCisjcHJhZ21hIG1hcmsgQmFjay9Gb3J3YXJkCisKKy0gKHZvaWQpZ29Gb3J3YXJk
Cit7CisgICAgV0tQYWdlR29Gb3J3YXJkKF9wYWdlUmVmLmdldCgpKTsKK30KKworLSAoQk9PTClj
YW5Hb0ZvcndhcmQKK3sKKyAgICByZXR1cm4gV0tQYWdlQ2FuR29Gb3J3YXJkKF9wYWdlUmVmLmdl
dCgpKTsKK30KKworLSAodm9pZClnb0JhY2sKK3sKKyAgICBXS1BhZ2VHb0JhY2soX3BhZ2VSZWYu
Z2V0KCkpOworfQorCistIChCT09MKWNhbkdvQmFjaworeworICAgIHJldHVybiBXS1BhZ2VDYW5H
b0JhY2soX3BhZ2VSZWYuZ2V0KCkpOworfQorCistICh2b2lkKWdvVG9CYWNrRm9yd2FyZExpc3RJ
dGVtOihXS0JhY2tGb3J3YXJkTGlzdEl0ZW0gKilpdGVtCit7CisgICAgdG9JbXBsKF9wYWdlUmVm
LmdldCgpKS0+Z29Ub0JhY2tGb3J3YXJkSXRlbSgmaXRlbS5faXRlbSk7Cit9CisKKy0gKFdLQmFj
a0ZvcndhcmRMaXN0ICopYmFja0ZvcndhcmRMaXN0Cit7CisgICAgV2ViQmFja0ZvcndhcmRMaXN0
KiBsaXN0ID0gdG9JbXBsKF9wYWdlUmVmLmdldCgpKS0+YmFja0ZvcndhcmRMaXN0KCk7CisgICAg
aWYgKCFsaXN0KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHdyYXBwZXIoKmxp
c3QpOworfQorCisjcHJhZ21hIG1hcmsgQWN0aXZlIExvYWQgSW50cm9zcGVjdGlvbgorCistIChO
U1VSTCAqKWFjdGl2ZVVSTAoreworICAgIHJldHVybiBhdXRvcmVsZWFzZWQoV0tQYWdlQ29weUFj
dGl2ZVVSTChfcGFnZVJlZi5nZXQoKSkpOworfQorCistIChOU1VSTCAqKXByb3Zpc2lvbmFsVVJM
Cit7CisgICAgcmV0dXJuIGF1dG9yZWxlYXNlZChXS1BhZ2VDb3B5UHJvdmlzaW9uYWxVUkwoX3Bh
Z2VSZWYuZ2V0KCkpKTsKK30KKworLSAoTlNVUkwgKiljb21taXR0ZWRVUkwKK3sKKyAgICByZXR1
cm4gYXV0b3JlbGVhc2VkKFdLUGFnZUNvcHlDb21taXR0ZWRVUkwoX3BhZ2VSZWYuZ2V0KCkpKTsK
K30KKworLSAoTlNVUkwgKil1bnJlYWNoYWJsZVVSTAoreworICAgIHJldHVybiBbTlNVUkwgX3dl
Yl9VUkxXaXRoV1RGU3RyaW5nOnRvSW1wbChfcGFnZVJlZi5nZXQoKSktPnBhZ2VMb2FkU3RhdGUo
KS51bnJlYWNoYWJsZVVSTCgpIHJlbGF0aXZlVG9VUkw6bmlsXTsKK30KKworLSAoZG91YmxlKWVz
dGltYXRlZFByb2dyZXNzCit7CisgICAgcmV0dXJuIHRvSW1wbChfcGFnZVJlZi5nZXQoKSktPmVz
dGltYXRlZFByb2dyZXNzKCk7Cit9CisKKyNwcmFnbWEgbWFyayBBY3RpdmUgRG9jdW1lbnQgSW50
cm9zcGVjdGlvbgorCistIChOU1N0cmluZyAqKXRpdGxlCit7CisgICAgcmV0dXJuIGF1dG9yZWxl
YXNlZChXS1BhZ2VDb3B5VGl0bGUoX3BhZ2VSZWYuZ2V0KCkpKTsKK30KKworI3ByYWdtYSBtYXJr
IFpvb20KKworLSAoQ0dGbG9hdCl0ZXh0Wm9vbQoreworICAgIHJldHVybiBXS1BhZ2VHZXRUZXh0
Wm9vbUZhY3RvcihfcGFnZVJlZi5nZXQoKSk7Cit9CisKKy0gKHZvaWQpc2V0VGV4dFpvb206KENH
RmxvYXQpdGV4dFpvb20KK3sKKyAgICByZXR1cm4gV0tQYWdlU2V0VGV4dFpvb21GYWN0b3IoX3Bh
Z2VSZWYuZ2V0KCksIHRleHRab29tKTsKK30KKworLSAoQ0dGbG9hdClwYWdlWm9vbQoreworICAg
IHJldHVybiBXS1BhZ2VHZXRQYWdlWm9vbUZhY3RvcihfcGFnZVJlZi5nZXQoKSk7Cit9CisKKy0g
KHZvaWQpc2V0UGFnZVpvb206KENHRmxvYXQpcGFnZVpvb20KK3sKKyAgICByZXR1cm4gV0tQYWdl
U2V0UGFnZVpvb21GYWN0b3IoX3BhZ2VSZWYuZ2V0KCksIHBhZ2Vab29tKTsKK30KKworc3RhdGlj
IHZvaWQgZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tG
cmFtZVJlZiBmcmFtZSwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQoreworICAgIGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93c2luZ0NvbnRleHQgPSAo
V0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopY2xpZW50SW5mbzsKKyAgICBpZiAoW2Jyb3dz
aW5nQ29udGV4dC5sb2FkRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihicm93
c2luZ0NvbnRleHRDb250cm9sbGVyRGlkU3RhcnRQcm92aXNpb25hbExvYWQ6KV0pCisgICAgICAg
IFticm93c2luZ0NvbnRleHQubG9hZERlbGVnYXRlIGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJE
aWRTdGFydFByb3Zpc2lvbmFsTG9hZDpicm93c2luZ0NvbnRleHRdOworfQorCitzdGF0aWMgdm9p
ZCBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS1Bh
Z2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQoreworICAgIGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93
c2luZ0NvbnRleHQgPSAoV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopY2xpZW50SW5mbzsK
KyAgICBpZiAoW2Jyb3dzaW5nQ29udGV4dC5sb2FkRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3Rvcihicm93c2luZ0NvbnRleHRDb250cm9sbGVyRGlkUmVjZWl2ZVNlcnZlclJlZGly
ZWN0Rm9yUHJvdmlzaW9uYWxMb2FkOildKQorICAgICAgICBbYnJvd3NpbmdDb250ZXh0LmxvYWRE
ZWxlZ2F0ZSBicm93c2luZ0NvbnRleHRDb250cm9sbGVyRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0
Rm9yUHJvdmlzaW9uYWxMb2FkOmJyb3dzaW5nQ29udGV4dF07Cit9CisKK3N0YXRpYyB2b2lkIGRp
ZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tG
cmFtZVJlZiBmcmFtZSwgV0tFcnJvclJlZiBlcnJvciwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1l
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpi
cm93c2luZ0NvbnRleHQgPSAoV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopY2xpZW50SW5m
bzsKKyAgICBpZiAoW2Jyb3dzaW5nQ29udGV4dC5sb2FkRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcihicm93c2luZ0NvbnRleHRDb250cm9sbGVyRGlkRmFpbFByb3Zpc2lvbmFs
TG9hZDp3aXRoRXJyb3I6KV0pIHsKKyAgICAgICAgUmV0YWluUHRyPENGRXJyb3JSZWY+IGNmRXJy
b3IgPSBhZG9wdENGKFdLRXJyb3JDb3B5Q0ZFcnJvcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBlcnJv
cikpOworICAgICAgICBbYnJvd3NpbmdDb250ZXh0LmxvYWREZWxlZ2F0ZSBicm93c2luZ0NvbnRl
eHRDb250cm9sbGVyRGlkRmFpbFByb3Zpc2lvbmFsTG9hZDpicm93c2luZ0NvbnRleHQgd2l0aEVy
cm9yOihOU0Vycm9yICopY2ZFcnJvci5nZXQoKV07CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBk
aWRDb21taXRMb2FkRm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdL
VHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBpZiAoIVdL
RnJhbWVJc01haW5GcmFtZShmcmFtZSkpCisgICAgICAgIHJldHVybjsKKworICAgIFdLQnJvd3Np
bmdDb250ZXh0Q29udHJvbGxlciAqYnJvd3NpbmdDb250ZXh0ID0gKFdLQnJvd3NpbmdDb250ZXh0
Q29udHJvbGxlciAqKWNsaWVudEluZm87CisgICAgaWYgKFticm93c2luZ0NvbnRleHQubG9hZERl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoYnJvd3NpbmdDb250ZXh0Q29udHJv
bGxlckRpZENvbW1pdExvYWQ6KV0pCisgICAgICAgIFticm93c2luZ0NvbnRleHQubG9hZERlbGVn
YXRlIGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJEaWRDb21taXRMb2FkOmJyb3dzaW5nQ29udGV4
dF07Cit9CisKK3N0YXRpYyB2b2lkIGRpZEZpbmlzaExvYWRGb3JGcmFtZShXS1BhZ2VSZWYgcGFn
ZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQoreworICAgIGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93c2luZ0NvbnRl
eHQgPSAoV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopY2xpZW50SW5mbzsKKyAgICBpZiAo
W2Jyb3dzaW5nQ29udGV4dC5sb2FkRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihicm93c2luZ0NvbnRleHRDb250cm9sbGVyRGlkRmluaXNoTG9hZDopXSkKKyAgICAgICAgW2Jy
b3dzaW5nQ29udGV4dC5sb2FkRGVsZWdhdGUgYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckRpZEZp
bmlzaExvYWQ6YnJvd3NpbmdDb250ZXh0XTsKK30KKworc3RhdGljIHZvaWQgZGlkRmFpbExvYWRX
aXRoRXJyb3JGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tFcnJv
clJlZiBlcnJvciwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQor
eworICAgIGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93c2luZ0NvbnRleHQgPSAoV0tC
cm93c2luZ0NvbnRleHRDb250cm9sbGVyICopY2xpZW50SW5mbzsKKyAgICBpZiAoW2Jyb3dzaW5n
Q29udGV4dC5sb2FkRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihicm93c2lu
Z0NvbnRleHRDb250cm9sbGVyRGlkRmFpbExvYWQ6d2l0aEVycm9yOildKSB7CisgICAgICAgIFJl
dGFpblB0cjxDRkVycm9yUmVmPiBjZkVycm9yID0gYWRvcHRDRihXS0Vycm9yQ29weUNGRXJyb3Io
a0NGQWxsb2NhdG9yRGVmYXVsdCwgZXJyb3IpKTsKKyAgICAgICAgW2Jyb3dzaW5nQ29udGV4dC5s
b2FkRGVsZWdhdGUgYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckRpZEZhaWxMb2FkOmJyb3dzaW5n
Q29udGV4dCB3aXRoRXJyb3I6KE5TRXJyb3IgKiljZkVycm9yLmdldCgpXTsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIGRpZFN0YXJ0UHJvZ3Jlc3MoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCit7CisgICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93c2lu
Z0NvbnRleHQgPSAoV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopY2xpZW50SW5mbzsKKyAg
ICBpZiAoW2Jyb3dzaW5nQ29udGV4dC5sb2FkRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcihicm93c2luZ0NvbnRleHRDb250cm9sbGVyRGlkU3RhcnRQcm9ncmVzczopXSkKKyAg
ICAgICAgW2Jyb3dzaW5nQ29udGV4dC5sb2FkRGVsZWdhdGUgYnJvd3NpbmdDb250ZXh0Q29udHJv
bGxlckRpZFN0YXJ0UHJvZ3Jlc3M6YnJvd3NpbmdDb250ZXh0XTsKK30KKworc3RhdGljIHZvaWQg
ZGlkQ2hhbmdlUHJvZ3Jlc3MoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Cit7CisgICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93c2luZ0NvbnRleHQgPSAo
V0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopY2xpZW50SW5mbzsKKyAgICBpZiAoW2Jyb3dz
aW5nQ29udGV4dC5sb2FkRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihicm93
c2luZ0NvbnRleHRDb250cm9sbGVyOmVzdGltYXRlZFByb2dyZXNzQ2hhbmdlZFRvOildKQorICAg
ICAgICBbYnJvd3NpbmdDb250ZXh0LmxvYWREZWxlZ2F0ZSBicm93c2luZ0NvbnRleHRDb250cm9s
bGVyOmJyb3dzaW5nQ29udGV4dCBlc3RpbWF0ZWRQcm9ncmVzc0NoYW5nZWRUbzp0b0ltcGwocGFn
ZSktPmVzdGltYXRlZFByb2dyZXNzKCldOworfQorCitzdGF0aWMgdm9pZCBkaWRGaW5pc2hQcm9n
cmVzcyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBXS0Jy
b3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmJyb3dzaW5nQ29udGV4dCA9IChXS0Jyb3dzaW5nQ29u
dGV4dENvbnRyb2xsZXIgKiljbGllbnRJbmZvOworICAgIGlmIChbYnJvd3NpbmdDb250ZXh0Lmxv
YWREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGJyb3dzaW5nQ29udGV4dENv
bnRyb2xsZXJEaWRGaW5pc2hQcm9ncmVzczopXSkKKyAgICAgICAgW2Jyb3dzaW5nQ29udGV4dC5s
b2FkRGVsZWdhdGUgYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckRpZEZpbmlzaFByb2dyZXNzOmJy
b3dzaW5nQ29udGV4dF07Cit9CisKK3N0YXRpYyB2b2lkIGRpZENoYW5nZUJhY2tGb3J3YXJkTGlz
dChXS1BhZ2VSZWYgcGFnZSwgV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGFkZGVkSXRlbSwgV0tB
cnJheVJlZiByZW1vdmVkSXRlbXMsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7CisgICAgV0tC
cm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93c2luZ0NvbnRleHQgPSAoV0tCcm93c2luZ0Nv
bnRleHRDb250cm9sbGVyICopY2xpZW50SW5mbzsKKyAgICBpZiAoIVticm93c2luZ0NvbnRleHQu
bG9hZERlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoYnJvd3NpbmdDb250ZXh0
Q29udHJvbGxlckRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdDphZGRlZEl0ZW06cmVtb3ZlZEl0ZW1z
OildKQorICAgICAgICByZXR1cm47CisKKyAgICBXS0JhY2tGb3J3YXJkTGlzdEl0ZW0gKmFkZGVk
ID0gYWRkZWRJdGVtID8gd3JhcHBlcigqdG9JbXBsKGFkZGVkSXRlbSkpIDogbmlsOworICAgIE5T
QXJyYXkgKnJlbW92ZWQgPSByZW1vdmVkSXRlbXMgPyB3cmFwcGVyKCp0b0ltcGwocmVtb3ZlZEl0
ZW1zKSkgOiBuaWw7CisgICAgW2Jyb3dzaW5nQ29udGV4dC5sb2FkRGVsZWdhdGUgYnJvd3NpbmdD
b250ZXh0Q29udHJvbGxlckRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdDpicm93c2luZ0NvbnRleHQg
YWRkZWRJdGVtOmFkZGVkIHJlbW92ZWRJdGVtczpyZW1vdmVkXTsKK30KKworc3RhdGljIHZvaWQg
c2V0VXBQYWdlTG9hZGVyQ2xpZW50KFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqYnJvd3Np
bmdDb250ZXh0LCBXS1BhZ2VSZWYgcGFnZVJlZikKK3sKKyAgICBXS1BhZ2VMb2FkZXJDbGllbnQg
bG9hZGVyQ2xpZW50OworICAgIG1lbXNldCgmbG9hZGVyQ2xpZW50LCAwLCBzaXplb2YobG9hZGVy
Q2xpZW50KSk7CisKKyAgICBsb2FkZXJDbGllbnQudmVyc2lvbiA9IGtXS1BhZ2VMb2FkZXJDbGll
bnRDdXJyZW50VmVyc2lvbjsKKyAgICBsb2FkZXJDbGllbnQuY2xpZW50SW5mbyA9IGJyb3dzaW5n
Q29udGV4dDsKKyAgICBsb2FkZXJDbGllbnQuZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFt
ZSA9IGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWU7CisgICAgbG9hZGVyQ2xpZW50LmRp
ZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lID0gZGlkUmVj
ZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWU7CisgICAgbG9hZGVy
Q2xpZW50LmRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZSA9IGRpZEZhaWxQ
cm92aXNpb25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZTsKKyAgICBsb2FkZXJDbGllbnQuZGlkQ29t
bWl0TG9hZEZvckZyYW1lID0gZGlkQ29tbWl0TG9hZEZvckZyYW1lOworICAgIGxvYWRlckNsaWVu
dC5kaWRGaW5pc2hMb2FkRm9yRnJhbWUgPSBkaWRGaW5pc2hMb2FkRm9yRnJhbWU7CisgICAgbG9h
ZGVyQ2xpZW50LmRpZEZhaWxMb2FkV2l0aEVycm9yRm9yRnJhbWUgPSBkaWRGYWlsTG9hZFdpdGhF
cnJvckZvckZyYW1lOworCisgICAgbG9hZGVyQ2xpZW50LmRpZFN0YXJ0UHJvZ3Jlc3MgPSBkaWRT
dGFydFByb2dyZXNzOworICAgIGxvYWRlckNsaWVudC5kaWRDaGFuZ2VQcm9ncmVzcyA9IGRpZENo
YW5nZVByb2dyZXNzOworICAgIGxvYWRlckNsaWVudC5kaWRGaW5pc2hQcm9ncmVzcyA9IGRpZEZp
bmlzaFByb2dyZXNzOworICAgIGxvYWRlckNsaWVudC5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3Qg
PSBkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3Q7CisKKyAgICBXS1BhZ2VTZXRQYWdlTG9hZGVyQ2xp
ZW50KHBhZ2VSZWYsICZsb2FkZXJDbGllbnQpOworfQorCitzdGF0aWMgV0tQb2xpY3lEZWNpc2lv
bkhhbmRsZXIgbWFrZVBvbGljeURlY2lzaW9uQmxvY2soV0tGcmFtZVBvbGljeUxpc3RlbmVyUmVm
IGxpc3RlbmVyKQoreworICAgIFdLUmV0YWluKGxpc3RlbmVyKTsgLy8gUmVsZWFzZWQgaW4gdGhl
IGRlY2lzaW9uIGhhbmRsZXIgYmVsb3cuCisKKyAgICByZXR1cm4gW1teKFdLUG9saWN5RGVjaXNp
b24gZGVjaXNpb24pIHsKKyAgICAgICAgc3dpdGNoIChkZWNpc2lvbikgeworICAgICAgICBjYXNl
IFdLUG9saWN5RGVjaXNpb25DYW5jZWw6CisgICAgICAgICAgICBXS0ZyYW1lUG9saWN5TGlzdGVu
ZXJJZ25vcmUobGlzdGVuZXIpOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgCisgICAgICAgIGNhc2UgV0tQb2xpY3lEZWNpc2lvbkFsbG93OgorICAgICAg
ICAgICAgV0tGcmFtZVBvbGljeUxpc3RlbmVyVXNlKGxpc3RlbmVyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAKKyAgICAgICAgY2FzZSBXS1BvbGljeURlY2lzaW9uQmVjb21lRG93bmxv
YWQ6CisgICAgICAgICAgICBXS0ZyYW1lUG9saWN5TGlzdGVuZXJEb3dubG9hZChsaXN0ZW5lcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfTsKKworICAgICAgICBXS1JlbGVhc2UobGlz
dGVuZXIpOyAvLyBSZXRhaW5lZCBpbiB0aGUgY29udGV4dCBhYm92ZS4KKyAgICB9IGNvcHldIGF1
dG9yZWxlYXNlXTsKK30KKworc3RhdGljIHZvaWQgc2V0VXBQYWdlUG9saWN5Q2xpZW50KFdLQnJv
d3NpbmdDb250ZXh0Q29udHJvbGxlciAqYnJvd3NpbmdDb250ZXh0LCBXS1BhZ2VSZWYgcGFnZVJl
ZikKK3sKKyAgICBXS1BhZ2VQb2xpY3lDbGllbnQgcG9saWN5Q2xpZW50OworICAgIG1lbXNldCgm
cG9saWN5Q2xpZW50LCAwLCBzaXplb2YocG9saWN5Q2xpZW50KSk7CisKKyAgICBwb2xpY3lDbGll
bnQudmVyc2lvbiA9IGtXS1BhZ2VQb2xpY3lDbGllbnRDdXJyZW50VmVyc2lvbjsKKyAgICBwb2xp
Y3lDbGllbnQuY2xpZW50SW5mbyA9IGJyb3dzaW5nQ29udGV4dDsKKworICAgIHBvbGljeUNsaWVu
dC5kZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uID0gW10oV0tQYWdlUmVmIHBhZ2UsIFdL
RnJhbWVSZWYgZnJhbWUsIFdLRnJhbWVOYXZpZ2F0aW9uVHlwZSBuYXZpZ2F0aW9uVHlwZSwgV0tF
dmVudE1vZGlmaWVycyBtb2RpZmllcnMsIFdLRXZlbnRNb3VzZUJ1dHRvbiBtb3VzZUJ1dHRvbiwg
V0tGcmFtZVJlZiBvcmlnaW5hdGluZ0ZyYW1lLCBXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgV0tG
cmFtZVBvbGljeUxpc3RlbmVyUmVmIGxpc3RlbmVyLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCisgICAgeworICAgICAgICBXS0Jyb3dzaW5nQ29udGV4dENvbnRy
b2xsZXIgKmJyb3dzaW5nQ29udGV4dCA9IChXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKilj
bGllbnRJbmZvOworICAgICAgICBpZiAoW2Jyb3dzaW5nQ29udGV4dC5wb2xpY3lEZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXI6ZGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjpkZWNpc2lvbkhhbmRsZXI6KV0pIHsKKyAgICAg
ICAgICAgIE5TRGljdGlvbmFyeSAqYWN0aW9uRGljdGlvbmFyeSA9IEB7CisgICAgICAgICAgICAg
ICAgV0tBY3Rpb25Jc01haW5GcmFtZUtleTogQChXS0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKSwK
KyAgICAgICAgICAgICAgICBXS0FjdGlvbk5hdmlnYXRpb25UeXBlS2V5OiBAKG5hdmlnYXRpb25U
eXBlKSwKKyAgICAgICAgICAgICAgICBXS0FjdGlvbk1vZGlmaWVyRmxhZ3NLZXk6IEAobW9kaWZp
ZXJzKSwKKyAgICAgICAgICAgICAgICBXS0FjdGlvbk1vdXNlQnV0dG9uS2V5OiBAKG1vdXNlQnV0
dG9uKSwKKyAgICAgICAgICAgICAgICBXS0FjdGlvblVSTFJlcXVlc3RLZXk6IGFkb3B0TlMoV0tV
UkxSZXF1ZXN0Q29weU5TVVJMUmVxdWVzdChyZXF1ZXN0KSkuZ2V0KCkKKyAgICAgICAgICAgIH07
CisKKyAgICAgICAgICAgIGlmIChvcmlnaW5hdGluZ0ZyYW1lKSB7CisgICAgICAgICAgICAgICAg
YWN0aW9uRGljdGlvbmFyeSA9IFtbYWN0aW9uRGljdGlvbmFyeSBtdXRhYmxlQ29weV0gYXV0b3Jl
bGVhc2VdOworICAgICAgICAgICAgICAgIFsoTlNNdXRhYmxlRGljdGlvbmFyeSAqKWFjdGlvbkRp
Y3Rpb25hcnkgc2V0T2JqZWN0OltOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6dG9JbXBsKG9y
aWdpbmF0aW5nRnJhbWUpLT51cmwoKSByZWxhdGl2ZVRvVVJMOm5pbF0gZm9yS2V5OldLQWN0aW9u
T3JpZ2luYXRpbmdGcmFtZVVSTEtleV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIFticm93c2luZ0NvbnRleHQucG9saWN5RGVsZWdhdGUgYnJvd3NpbmdDb250ZXh0
Q29udHJvbGxlcjpicm93c2luZ0NvbnRleHQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
bjphY3Rpb25EaWN0aW9uYXJ5IGRlY2lzaW9uSGFuZGxlcjptYWtlUG9saWN5RGVjaXNpb25CbG9j
ayhsaXN0ZW5lcildOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFdLRnJhbWVQb2xpY3lM
aXN0ZW5lclVzZShsaXN0ZW5lcik7CisgICAgfTsKKworICAgIHBvbGljeUNsaWVudC5kZWNpZGVQ
b2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24gPSBbXShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBm
cmFtZSwgV0tGcmFtZU5hdmlnYXRpb25UeXBlIG5hdmlnYXRpb25UeXBlLCBXS0V2ZW50TW9kaWZp
ZXJzIG1vZGlmaWVycywgV0tFdmVudE1vdXNlQnV0dG9uIG1vdXNlQnV0dG9uLCBXS1VSTFJlcXVl
c3RSZWYgcmVxdWVzdCwgV0tTdHJpbmdSZWYgZnJhbWVOYW1lLCBXS0ZyYW1lUG9saWN5TGlzdGVu
ZXJSZWYgbGlzdGVuZXIsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5m
bykKKyAgICB7CisgICAgICAgIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqYnJvd3NpbmdD
b250ZXh0ID0gKFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqKWNsaWVudEluZm87CisgICAg
ICAgIGlmIChbYnJvd3NpbmdDb250ZXh0LnBvbGljeURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3IoYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjpkZWNpZGVQb2xpY3lGb3JOZXdX
aW5kb3dBY3Rpb246ZGVjaXNpb25IYW5kbGVyOildKSB7CisgICAgICAgICAgICBOU0RpY3Rpb25h
cnkgKmFjdGlvbkRpY3Rpb25hcnkgPSBAeworICAgICAgICAgICAgICAgIFdLQWN0aW9uSXNNYWlu
RnJhbWVLZXk6IEAoV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSksCisgICAgICAgICAgICAgICAg
V0tBY3Rpb25OYXZpZ2F0aW9uVHlwZUtleTogQChuYXZpZ2F0aW9uVHlwZSksCisgICAgICAgICAg
ICAgICAgV0tBY3Rpb25Nb2RpZmllckZsYWdzS2V5OiBAKG1vZGlmaWVycyksCisgICAgICAgICAg
ICAgICAgV0tBY3Rpb25Nb3VzZUJ1dHRvbktleTogQChtb3VzZUJ1dHRvbiksCisgICAgICAgICAg
ICAgICAgV0tBY3Rpb25VUkxSZXF1ZXN0S2V5OiBhZG9wdE5TKFdLVVJMUmVxdWVzdENvcHlOU1VS
TFJlcXVlc3QocmVxdWVzdCkpLmdldCgpLAorICAgICAgICAgICAgICAgIFdLQWN0aW9uRnJhbWVO
YW1lS2V5OiB0b0ltcGwoZnJhbWVOYW1lKS0+d3JhcHBlcigpCisgICAgICAgICAgICB9OworICAg
ICAgICAgICAgCisgICAgICAgICAgICBbYnJvd3NpbmdDb250ZXh0LnBvbGljeURlbGVnYXRlIGJy
b3dzaW5nQ29udGV4dENvbnRyb2xsZXI6YnJvd3NpbmdDb250ZXh0IGRlY2lkZVBvbGljeUZvck5l
d1dpbmRvd0FjdGlvbjphY3Rpb25EaWN0aW9uYXJ5IGRlY2lzaW9uSGFuZGxlcjptYWtlUG9saWN5
RGVjaXNpb25CbG9jayhsaXN0ZW5lcildOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFdL
RnJhbWVQb2xpY3lMaXN0ZW5lclVzZShsaXN0ZW5lcik7CisgICAgfTsKKworICAgIHBvbGljeUNs
aWVudC5kZWNpZGVQb2xpY3lGb3JSZXNwb25zZSA9IFtdKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1l
UmVmIGZyYW1lLCBXS1VSTFJlc3BvbnNlUmVmIHJlc3BvbnNlLCBXS1VSTFJlcXVlc3RSZWYgcmVx
dWVzdCwgYm9vbCBjYW5TaG93TUlNRVR5cGUsIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclJlZiBsaXN0
ZW5lciwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorICAgIHsK
KyAgICAgICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93c2luZ0NvbnRleHQgPSAo
V0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopY2xpZW50SW5mbzsKKyAgICAgICAgaWYgKFti
cm93c2luZ0NvbnRleHQucG9saWN5RGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihicm93c2luZ0NvbnRleHRDb250cm9sbGVyOmRlY2lkZVBvbGljeUZvclJlc3BvbnNlQWN0aW9u
OmRlY2lzaW9uSGFuZGxlcjopXSkgeworICAgICAgICAgICAgTlNEaWN0aW9uYXJ5ICphY3Rpb25E
aWN0aW9uYXJ5ID0gQHsKKyAgICAgICAgICAgICAgICBXS0FjdGlvbklzTWFpbkZyYW1lS2V5OiBA
KFdLRnJhbWVJc01haW5GcmFtZShmcmFtZSkpLAorICAgICAgICAgICAgICAgIFdLQWN0aW9uVVJM
UmVxdWVzdEtleTogYWRvcHROUyhXS1VSTFJlcXVlc3RDb3B5TlNVUkxSZXF1ZXN0KHJlcXVlc3Qp
KS5nZXQoKSwKKyAgICAgICAgICAgICAgICBXS0FjdGlvblVSTFJlc3BvbnNlS2V5OiBhZG9wdE5T
KFdLVVJMUmVzcG9uc2VDb3B5TlNVUkxSZXNwb25zZShyZXNwb25zZSkpLmdldCgpLAorICAgICAg
ICAgICAgICAgIFdLQWN0aW9uQ2FuU2hvd01JTUVUeXBlS2V5OiBAKGNhblNob3dNSU1FVHlwZSks
CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBbYnJvd3NpbmdDb250ZXh0LnBvbGljeURl
bGVnYXRlIGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXI6YnJvd3NpbmdDb250ZXh0IGRlY2lkZVBv
bGljeUZvclJlc3BvbnNlQWN0aW9uOmFjdGlvbkRpY3Rpb25hcnkgZGVjaXNpb25IYW5kbGVyOm1h
a2VQb2xpY3lEZWNpc2lvbkJsb2NrKGxpc3RlbmVyKV07CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgV0tGcmFtZVBvbGljeUxpc3RlbmVyVXNlKGxpc3RlbmVyKTsKKyAgICB9OworCisgICAg
V0tQYWdlU2V0UGFnZVBvbGljeUNsaWVudChwYWdlUmVmLCAmcG9saWN5Q2xpZW50KTsKK30KKwor
LyogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSBhc3NvY2lhdGUgdmlldy4gKi8KKwor
LSAoaWQpX2luaXRXaXRoUGFnZVJlZjooV0tQYWdlUmVmKXBhZ2VSZWYKK3sKKyAgICBzZWxmID0g
W3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IF9wYWdlUmVmID0gcGFnZVJlZjsKKworICAgIF9wYWdlTG9hZFN0YXRlT2JzZXJ2ZXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPFBhZ2VMb2FkU3RhdGVPYnNlcnZlcj4oc2VsZik7CisgICAgdG9JbXBsKF9w
YWdlUmVmLmdldCgpKS0+cGFnZUxvYWRTdGF0ZSgpLmFkZE9ic2VydmVyKCpfcGFnZUxvYWRTdGF0
ZU9ic2VydmVyKTsKKworICAgIHNldFVwUGFnZUxvYWRlckNsaWVudChzZWxmLCBwYWdlUmVmKTsK
KyAgICBzZXRVcFBhZ2VQb2xpY3lDbGllbnQoc2VsZiwgcGFnZVJlZik7CisKKyAgICByZXR1cm4g
c2VsZjsKK30KKworKyAoV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopX2Jyb3dzaW5nQ29u
dGV4dENvbnRyb2xsZXJGb3JQYWdlUmVmOihXS1BhZ2VSZWYpcGFnZVJlZgoreworICAgIHJldHVy
biAoV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopV2ViS2l0Ojp0b0ltcGwocGFnZVJlZikt
PmxvYWRlckNsaWVudCgpLmNsaWVudCgpLmNsaWVudEluZm87Cit9CisKKysgKE5TTXV0YWJsZVNl
dCAqKWN1c3RvbVNjaGVtZXMKK3sKKyAgICBzdGF0aWMgTlNNdXRhYmxlU2V0ICpjdXN0b21TY2hl
bWVzID0gW1tOU011dGFibGVTZXQgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBjdXN0b21TY2hl
bWVzOworfQorIAorQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tCcm93c2luZ0NvbnRleHRDb250
cm9sbGVyIChQcml2YXRlKQorCistICh2b2lkKXNldFBhZ2luYXRpb25Nb2RlOihXS0Jyb3dzaW5n
Q29udGV4dFBhZ2luYXRpb25Nb2RlKXBhZ2luYXRpb25Nb2RlCit7CisgICAgV0tQYWdpbmF0aW9u
TW9kZSBtb2RlOworICAgIHN3aXRjaCAocGFnaW5hdGlvbk1vZGUpIHsKKyAgICBjYXNlIFdLUGFn
aW5hdGlvbk1vZGVVbnBhZ2luYXRlZDoKKyAgICAgICAgbW9kZSA9IGtXS1BhZ2luYXRpb25Nb2Rl
VW5wYWdpbmF0ZWQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0tQYWdpbmF0aW9uTW9kZUxl
ZnRUb1JpZ2h0OgorICAgICAgICBtb2RlID0ga1dLUGFnaW5hdGlvbk1vZGVMZWZ0VG9SaWdodDsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXS1BhZ2luYXRpb25Nb2RlUmlnaHRUb0xlZnQ6Cisg
ICAgICAgIG1vZGUgPSBrV0tQYWdpbmF0aW9uTW9kZVJpZ2h0VG9MZWZ0OworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFdLUGFnaW5hdGlvbk1vZGVUb3BUb0JvdHRvbToKKyAgICAgICAgbW9kZSA9
IGtXS1BhZ2luYXRpb25Nb2RlVG9wVG9Cb3R0b207CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
V0tQYWdpbmF0aW9uTW9kZUJvdHRvbVRvVG9wOgorICAgICAgICBtb2RlID0ga1dLUGFnaW5hdGlv
bk1vZGVCb3R0b21Ub1RvcDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFdLUGFnZVNldFBhZ2luYXRpb25Nb2RlKF9wYWdlUmVmLmdl
dCgpLCBtb2RlKTsKK30KKworLSAoV0tCcm93c2luZ0NvbnRleHRQYWdpbmF0aW9uTW9kZSlwYWdp
bmF0aW9uTW9kZQoreworICAgIHN3aXRjaCAoV0tQYWdlR2V0UGFnaW5hdGlvbk1vZGUoX3BhZ2VS
ZWYuZ2V0KCkpKSB7CisgICAgY2FzZSBrV0tQYWdpbmF0aW9uTW9kZVVucGFnaW5hdGVkOgorICAg
ICAgICByZXR1cm4gV0tQYWdpbmF0aW9uTW9kZVVucGFnaW5hdGVkOworICAgIGNhc2Uga1dLUGFn
aW5hdGlvbk1vZGVMZWZ0VG9SaWdodDoKKyAgICAgICAgcmV0dXJuIFdLUGFnaW5hdGlvbk1vZGVM
ZWZ0VG9SaWdodDsKKyAgICBjYXNlIGtXS1BhZ2luYXRpb25Nb2RlUmlnaHRUb0xlZnQ6CisgICAg
ICAgIHJldHVybiBXS1BhZ2luYXRpb25Nb2RlUmlnaHRUb0xlZnQ7CisgICAgY2FzZSBrV0tQYWdp
bmF0aW9uTW9kZVRvcFRvQm90dG9tOgorICAgICAgICByZXR1cm4gV0tQYWdpbmF0aW9uTW9kZVRv
cFRvQm90dG9tOworICAgIGNhc2Uga1dLUGFnaW5hdGlvbk1vZGVCb3R0b21Ub1RvcDoKKyAgICAg
ICAgcmV0dXJuIFdLUGFnaW5hdGlvbk1vZGVCb3R0b21Ub1RvcDsKKyAgICB9CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gV0tQYWdpbmF0aW9uTW9kZVVucGFnaW5hdGVk
OworfQorCistICh2b2lkKXNldFBhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnM6KEJPT0wpYmVo
YXZlc0xpa2VDb2x1bW5zCit7CisgICAgV0tQYWdlU2V0UGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29s
dW1ucyhfcGFnZVJlZi5nZXQoKSwgYmVoYXZlc0xpa2VDb2x1bW5zKTsKK30KKworLSAoQk9PTClw
YWdpbmF0aW9uQmVoYXZlc0xpa2VDb2x1bW5zCit7CisgICAgcmV0dXJuIFdLUGFnZUdldFBhZ2lu
YXRpb25CZWhhdmVzTGlrZUNvbHVtbnMoX3BhZ2VSZWYuZ2V0KCkpOworfQorCistICh2b2lkKXNl
dFBhZ2VMZW5ndGg6KENHRmxvYXQpcGFnZUxlbmd0aAoreworICAgIFdLUGFnZVNldFBhZ2VMZW5n
dGgoX3BhZ2VSZWYuZ2V0KCksIHBhZ2VMZW5ndGgpOworfQorCistIChDR0Zsb2F0KXBhZ2VMZW5n
dGgKK3sKKyAgICByZXR1cm4gV0tQYWdlR2V0UGFnZUxlbmd0aChfcGFnZVJlZi5nZXQoKSk7Cit9
CisKKy0gKHZvaWQpc2V0R2FwQmV0d2VlblBhZ2VzOihDR0Zsb2F0KWdhcEJldHdlZW5QYWdlcwor
eworICAgIFdLUGFnZVNldEdhcEJldHdlZW5QYWdlcyhfcGFnZVJlZi5nZXQoKSwgZ2FwQmV0d2Vl
blBhZ2VzKTsKK30KKworLSAoQ0dGbG9hdClnYXBCZXR3ZWVuUGFnZXMKK3sKKyAgICByZXR1cm4g
V0tQYWdlR2V0R2FwQmV0d2VlblBhZ2VzKF9wYWdlUmVmLmdldCgpKTsKK30KKworLSAoTlNVSW50
ZWdlcilwYWdlQ291bnQKK3sKKyAgICByZXR1cm4gV0tQYWdlR2V0UGFnZUNvdW50KF9wYWdlUmVm
LmdldCgpKTsKK30KKworLSAoV0tCcm93c2luZ0NvbnRleHRIYW5kbGUgKiloYW5kbGUKK3sKKyAg
ICByZXR1cm4gW1tbV0tCcm93c2luZ0NvbnRleHRIYW5kbGUgYWxsb2NdIF9pbml0V2l0aFBhZ2VJ
RDp0b0ltcGwoX3BhZ2VSZWYuZ2V0KCkpLT5wYWdlSUQoKV0gYXV0b3JlbGVhc2VdOworfQorCitA
ZW5kCisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJJbnRlcm5hbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tCcm93c2lu
Z0NvbnRleHRDb250cm9sbGVySW50ZXJuYWwuaAkocmV2aXNpb24gMTU5ODczKQkoZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJJ
bnRlcm5hbC5oOjE1OTg3MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVySW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiV0tCcm93c2luZ0NvbnRleHRDb250
cm9sbGVyUHJpdmF0ZS5oIgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworQGludGVyZmFjZSBXS0Jy
b3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKCkKKworLyogVGhpcyBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZnJvbSBhc3NvY2lhdGUgdmlldy4gKi8KKy0gKGlkKV9pbml0V2l0aFBhZ2VSZWY6KFdLUGFn
ZVJlZilwYWdlUmVmOworCisvKiBSZXR1cm5zIGEgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVy
IGFzc29jaWF0ZWQgd2l0aCB0aGUgV0tQYWdlUmVmLiAqLworKyAoV0tCcm93c2luZ0NvbnRleHRD
b250cm9sbGVyICopX2Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJGb3JQYWdlUmVmOihXS1BhZ2VS
ZWYpcGFnZVJlZjsKKworKyAoTlNNdXRhYmxlU2V0ICopY3VzdG9tU2NoZW1lczsKKworQGVuZAor
CisjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyUHJpdmF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRl
eHRDb250cm9sbGVyUHJpdmF0ZS5oCShyZXZpc2lvbiAxNTk4NzMpCShmcm9tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlclByaXZhdGUu
aDoxNTk4NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3Np
bmdDb250ZXh0Q29udHJvbGxlclByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0Mi9XS0Jyb3dzaW5nQ29udGV4dENvbnRy
b2xsZXIuaD4KKworI2lmIFdLX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgPFdlYktpdDIvV0tCYXNl
Lmg+CisKK3R5cGVkZWYgTlNfRU5VTShOU1VJbnRlZ2VyLCBXS0Jyb3dzaW5nQ29udGV4dFBhZ2lu
YXRpb25Nb2RlKSB7CisgICAgV0tQYWdpbmF0aW9uTW9kZVVucGFnaW5hdGVkLAorICAgIFdLUGFn
aW5hdGlvbk1vZGVMZWZ0VG9SaWdodCwKKyAgICBXS1BhZ2luYXRpb25Nb2RlUmlnaHRUb0xlZnQs
CisgICAgV0tQYWdpbmF0aW9uTW9kZVRvcFRvQm90dG9tLAorICAgIFdLUGFnaW5hdGlvbk1vZGVC
b3R0b21Ub1RvcCwKK307CisKK0BjbGFzcyBXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZTsKKworQGlu
dGVyZmFjZSBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKFByaXZhdGUpCisKK0Bwcm9wZXJ0
eSAocmVhZG9ubHkpIFdLUGFnZVJlZiBfcGFnZVJlZjsKKworQHByb3BlcnR5IFdLQnJvd3NpbmdD
b250ZXh0UGFnaW5hdGlvbk1vZGUgcGFnaW5hdGlvbk1vZGU7CisKKy8vIFdoZXRoZXIgdGhlIGNv
bHVtbi1icmVhay17YmVmb3JlLGFmdGVyfSBwcm9wZXJ0aWVzIGFyZSByZXNwZWN0ZWQgaW5zdGVh
ZCBvZiB0aGUKKy8vIHBhZ2UtYnJlYWste2JlZm9yZSxhZnRlcn0gcHJvcGVydGllcy4KK0Bwcm9w
ZXJ0eSBCT09MIHBhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnM7CisKKy8vIFNldCB0byAwIHRv
IGhhdmUgdGhlIHBhZ2UgbGVuZ3RoIGVxdWFsIHRoZSB2aWV3IGxlbmd0aC4KK0Bwcm9wZXJ0eSBD
R0Zsb2F0IHBhZ2VMZW5ndGg7CitAcHJvcGVydHkgQ0dGbG9hdCBnYXBCZXR3ZWVuUGFnZXM7CisK
K0Bwcm9wZXJ0eSAocmVhZG9ubHkpIE5TVUludGVnZXIgcGFnZUNvdW50OworCitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIFdLQnJvd3NpbmdDb250ZXh0SGFuZGxlICpoYW5kbGU7CisK
K0BlbmQKKworI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0R3JvdXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0R3Jv
dXAuaAkocmV2aXNpb24gMTU5ODczKQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L21hYy9XS0Jyb3dzaW5nQ29udGV4dEdyb3VwLmg6MTU5ODczKQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4dEdyb3VwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktpdDIvV0tGb3Vu
ZGF0aW9uLmg+CisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0Zv
dW5kYXRpb24uaD4KKyNpbXBvcnQgPFdlYktpdDIvV0tVc2VyU2NyaXB0SW5qZWN0aW9uVGltZS5o
PgorCitXS19BUElfQ0xBU1MKK0BpbnRlcmZhY2UgV0tCcm93c2luZ0NvbnRleHRHcm91cCA6IE5T
T2JqZWN0CisKKy0gKGlkKWluaXRXaXRoSWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVy
OworCisvKiBVc2VyIENvbnRlbnQgKi8KKworLSAodm9pZClhZGRVc2VyU3R5bGVTaGVldDooTlNT
dHJpbmcgKilzb3VyY2UgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMIHdoaXRlbGlzdGVkVVJMUGF0
dGVybnM6KE5TQXJyYXkgKil3aGl0ZWxpc3QgYmxhY2tsaXN0ZWRVUkxQYXR0ZXJuczooTlNBcnJh
eSAqKWJsYWNrbGlzdCBtYWluRnJhbWVPbmx5OihCT09MKW1haW5GcmFtZU9ubHk7CistICh2b2lk
KXJlbW92ZUFsbFVzZXJTdHlsZVNoZWV0czsKKworLSAodm9pZClhZGRVc2VyU2NyaXB0OihOU1N0
cmluZyAqKXNvdXJjZSBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwgd2hpdGVsaXN0ZWRVUkxQYXR0
ZXJuczooTlNBcnJheSAqKXdoaXRlbGlzdCBibGFja2xpc3RlZFVSTFBhdHRlcm5zOihOU0FycmF5
ICopYmxhY2tsaXN0IGluamVjdGlvblRpbWU6KFdLVXNlclNjcmlwdEluamVjdGlvblRpbWUpaW5q
ZWN0aW9uVGltZSBtYWluRnJhbWVPbmx5OihCT09MKW1haW5GcmFtZU9ubHk7CistICh2b2lkKXJl
bW92ZUFsbFVzZXJTY3JpcHRzOworCisKKy8qIFNldHRpbmdzICovCisKKy8qIFNldHRpbmcgdG8g
Y29udHJvbCB3aGV0aGVyIEphdmFTY3JpcHQgcmVmZXJlbmNlZCBieSBhIHBhZ2UgaXMgZW5hYmxl
ZC4KKyAgIERlZmF1bHQ6IFlFUworKi8KK0Bwcm9wZXJ0eSBCT09MIGFsbG93c0phdmFTY3JpcHQ7
CisKKy8qIFNldHRpbmcgdG8gY29udHJvbCB3aGV0aGVyIHBsdWctaW5zIGFyZSBlbmFibGVkLgor
ICAgRGVmYXVsdDogWUVTCisqLworQHByb3BlcnR5IEJPT0wgYWxsb3dzUGx1Z0luczsKKworQGVu
ZAorCisjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRHcm91cC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0R3JvdXAu
bW0JKHJldmlzaW9uIDE1OTg3MykJKGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9t
YWMvV0tCcm93c2luZ0NvbnRleHRHcm91cC5tbToxNTk4NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0R3JvdXAubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIldLQnJvd3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tCcm93
c2luZ0NvbnRleHRHcm91cFByaXZhdGUuaCIKKworI2lmIFdLX0FQSV9FTkFCTEVECisKKyNpbXBv
cnQgIkFQSUFycmF5LmgiCisjaW1wb3J0ICJXS0FycmF5LmgiCisjaW1wb3J0ICJXS1BhZ2VHcm91
cC5oIgorI2ltcG9ydCAiV0tQcmVmZXJlbmNlcy5oIgorI2ltcG9ydCAiV0tSZXRhaW5QdHIuaCIK
KyNpbXBvcnQgIldLU2hhcmVkQVBJQ2FzdC5oIgorI2ltcG9ydCAiV0tTdHJpbmdDRi5oIgorI2lt
cG9ydCAiV0tVUkwuaCIKKyNpbXBvcnQgIldLVVJMQ0YuaCIKKyNpbXBvcnQgIldlYlN0cmluZy5o
IgorI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitA
aW1wbGVtZW50YXRpb24gV0tCcm93c2luZ0NvbnRleHRHcm91cCB7CisgICAgc3RkOjphbGlnbmVk
X3N0b3JhZ2U8c2l6ZW9mKFdlYlBhZ2VHcm91cCksIHN0ZDo6YWxpZ25tZW50X29mPFdlYlBhZ2VH
cm91cD46OnZhbHVlPjo6dHlwZSBfcGFnZUdyb3VwOworfQorCistICh2b2lkKWRlYWxsb2MKK3sK
KyAgICByZWludGVycHJldF9jYXN0PFdlYlBhZ2VHcm91cCo+KCZfcGFnZUdyb3VwKS0+fldlYlBh
Z2VHcm91cCgpOworCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChpZClpbml0V2l0aElk
ZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgQVBJOjpPYmpl
Y3Q6OmNvbnN0cnVjdEluV3JhcHBlcjxXZWJQYWdlR3JvdXA+KHNlbGYsIGlkZW50aWZpZXIpOwor
CisgICAgLy8gR2l2ZSB0aGUgV0tCcm93c2luZ0NvbnRleHRHcm91cCBhIGlkZW50aWZpZXItbGVz
cyBwcmVmZXJlbmNlcywgc28gdGhhdCB0aGV5CisgICAgLy8gZG9uJ3QgZ2V0IGF1dG9tYXRpY2Fs
bHkgd3JpdHRlbiB0byB0aGUgZGlzay4gVGhlIGF1dG9tYXRpYyB3cml0aW5nIGhhcyBwcm92ZW4K
KyAgICAvLyBjb25mdXNpbmcgdG8gdXNlcnMgb2YgdGhlIEFQSS4KKyAgICBXS1JldGFpblB0cjxX
S1ByZWZlcmVuY2VzUmVmPiBwcmVmZXJlbmNlcyA9IGFkb3B0V0soV0tQcmVmZXJlbmNlc0NyZWF0
ZSgpKTsKKyAgICBXS1BhZ2VHcm91cFNldFByZWZlcmVuY2VzKHRvQVBJKHJlaW50ZXJwcmV0X2Nh
c3Q8V2ViUGFnZUdyb3VwKj4oJl9wYWdlR3JvdXApKSwgcHJlZmVyZW5jZXMuZ2V0KCkpOworCisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKEJPT0wpYWxsb3dzSmF2YVNjcmlwdAoreworICAgIHJl
dHVybiBXS1ByZWZlcmVuY2VzR2V0SmF2YVNjcmlwdEVuYWJsZWQoV0tQYWdlR3JvdXBHZXRQcmVm
ZXJlbmNlcyh0b0FQSShyZWludGVycHJldF9jYXN0PFdlYlBhZ2VHcm91cCo+KCZfcGFnZUdyb3Vw
KSkpKTsKK30KKworLSAodm9pZClzZXRBbGxvd3NKYXZhU2NyaXB0OihCT09MKWFsbG93c0phdmFT
Y3JpcHQKK3sKKyAgICBXS1ByZWZlcmVuY2VzU2V0SmF2YVNjcmlwdEVuYWJsZWQoV0tQYWdlR3Jv
dXBHZXRQcmVmZXJlbmNlcyh0b0FQSShyZWludGVycHJldF9jYXN0PFdlYlBhZ2VHcm91cCo+KCZf
cGFnZUdyb3VwKSkpLCBhbGxvd3NKYXZhU2NyaXB0KTsKK30KKworLSAoQk9PTClhbGxvd3NKYXZh
U2NyaXB0TWFya3VwCit7CisgICAgcmV0dXJuIFdLUHJlZmVyZW5jZXNHZXRKYXZhU2NyaXB0TWFy
a3VwRW5hYmxlZChXS1BhZ2VHcm91cEdldFByZWZlcmVuY2VzKHRvQVBJKHJlaW50ZXJwcmV0X2Nh
c3Q8V2ViUGFnZUdyb3VwKj4oJl9wYWdlR3JvdXApKSkpOworfQorCistICh2b2lkKXNldEFsbG93
c0phdmFTY3JpcHRNYXJrdXA6KEJPT0wpYWxsb3dzSmF2YVNjcmlwdE1hcmt1cAoreworICAgIFdL
UHJlZmVyZW5jZXNTZXRKYXZhU2NyaXB0TWFya3VwRW5hYmxlZChXS1BhZ2VHcm91cEdldFByZWZl
cmVuY2VzKHRvQVBJKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZUdyb3VwKj4oJl9wYWdlR3JvdXAp
KSksIGFsbG93c0phdmFTY3JpcHRNYXJrdXApOworfQorCistIChCT09MKWFsbG93c1BsdWdJbnMK
K3sKKyAgICByZXR1cm4gV0tQcmVmZXJlbmNlc0dldFBsdWdpbnNFbmFibGVkKFdLUGFnZUdyb3Vw
R2V0UHJlZmVyZW5jZXModG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlR3JvdXAqPigmX3Bh
Z2VHcm91cCkpKSk7Cit9CisKKy0gKHZvaWQpc2V0QWxsb3dzUGx1Z0luczooQk9PTClhbGxvd3NQ
bHVnSW5zCit7CisgICAgV0tQcmVmZXJlbmNlc1NldFBsdWdpbnNFbmFibGVkKFdLUGFnZUdyb3Vw
R2V0UHJlZmVyZW5jZXModG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlR3JvdXAqPigmX3Bh
Z2VHcm91cCkpKSwgYWxsb3dzUGx1Z0lucyk7Cit9CisKK3N0YXRpYyBXS1JldGFpblB0cjxXS0Fy
cmF5UmVmPiBjcmVhdGVXS0FycmF5KE5TQXJyYXkgKmFycmF5KQoreworICAgIE5TVUludGVnZXIg
Y291bnQgPSBbYXJyYXkgY291bnRdOworCisgICAgaWYgKCFjb3VudCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4gc3RyaW5nczsKKyAg
ICBzdHJpbmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY291bnQpOworCisgICAgZm9yIChpZCBl
bnRyeSBpbiBhcnJheSkgeworICAgICAgICBpZiAoW2VudHJ5IGlzS2luZE9mQ2xhc3M6W05TU3Ry
aW5nIGNsYXNzXV0pCisgICAgICAgICAgICBzdHJpbmdzLnVuY2hlY2tlZEFwcGVuZChhZG9wdFJl
Zih0b0ltcGwoV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKWVudHJ5KSkp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9BUEkoQVBJOjpBcnJheTo6Y3JlYXRlKHN0ZDo6bW92
ZShzdHJpbmdzKSkubGVha1JlZigpKTsKK30KKworLSh2b2lkKWFkZFVzZXJTdHlsZVNoZWV0OihO
U1N0cmluZyAqKXNvdXJjZSBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwgd2hpdGVsaXN0ZWRVUkxQ
YXR0ZXJuczooTlNBcnJheSAqKXdoaXRlbGlzdCBibGFja2xpc3RlZFVSTFBhdHRlcm5zOihOU0Fy
cmF5ICopYmxhY2tsaXN0IG1haW5GcmFtZU9ubHk6KEJPT0wpbWFpbkZyYW1lT25seQoreworICAg
IGlmICghc291cmNlKQorICAgICAgICBDUkFTSCgpOworCisgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHdrU291cmNlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZT
dHJpbmdSZWYpc291cmNlKSk7CisgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrQmFzZVVSTCA9
IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQ0ZVUkwoKENGVVJMUmVmKWJhc2VVUkwpKTsKKyAgICBh
dXRvIHdrV2hpdGVsaXN0ID0gY3JlYXRlV0tBcnJheSh3aGl0ZWxpc3QpOworICAgIGF1dG8gd2tC
bGFja2xpc3QgPSBjcmVhdGVXS0FycmF5KGJsYWNrbGlzdCk7CisgICAgV0tVc2VyQ29udGVudElu
amVjdGVkRnJhbWVzIGluamVjdGVkRnJhbWVzID0gbWFpbkZyYW1lT25seSA/IGtXS0luamVjdElu
VG9wRnJhbWVPbmx5IDoga1dLSW5qZWN0SW5BbGxGcmFtZXM7CisKKyAgICBXS1BhZ2VHcm91cEFk
ZFVzZXJTdHlsZVNoZWV0KHRvQVBJKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZUdyb3VwKj4oJl9w
YWdlR3JvdXApKSwgd2tTb3VyY2UuZ2V0KCksIHdrQmFzZVVSTC5nZXQoKSwgd2tXaGl0ZWxpc3Qu
Z2V0KCksIHdrQmxhY2tsaXN0LmdldCgpLCBpbmplY3RlZEZyYW1lcyk7Cit9CisKKy0gKHZvaWQp
cmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzCit7CisgICAgV0tQYWdlR3JvdXBSZW1vdmVBbGxVc2Vy
U3R5bGVTaGVldHModG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlR3JvdXAqPigmX3BhZ2VH
cm91cCkpKTsKK30KKworLSAodm9pZClhZGRVc2VyU2NyaXB0OihOU1N0cmluZyAqKXNvdXJjZSBi
YXNlVVJMOihOU1VSTCAqKWJhc2VVUkwgd2hpdGVsaXN0ZWRVUkxQYXR0ZXJuczooTlNBcnJheSAq
KXdoaXRlbGlzdCBibGFja2xpc3RlZFVSTFBhdHRlcm5zOihOU0FycmF5ICopYmxhY2tsaXN0IGlu
amVjdGlvblRpbWU6KFdLVXNlclNjcmlwdEluamVjdGlvblRpbWUpaW5qZWN0aW9uVGltZSBtYWlu
RnJhbWVPbmx5OihCT09MKW1haW5GcmFtZU9ubHkKK3sKKyAgICBpZiAoIXNvdXJjZSkKKyAgICAg
ICAgQ1JBU0goKTsKKworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a1NvdXJjZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKXNvdXJjZSkpOwor
ICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a0Jhc2VVUkwgPSBhZG9wdFdLKFdLVVJMQ3JlYXRl
V2l0aENGVVJMKChDRlVSTFJlZiliYXNlVVJMKSk7CisgICAgYXV0byB3a1doaXRlbGlzdCA9IGNy
ZWF0ZVdLQXJyYXkod2hpdGVsaXN0KTsKKyAgICBhdXRvIHdrQmxhY2tsaXN0ID0gY3JlYXRlV0tB
cnJheShibGFja2xpc3QpOworICAgIFdLVXNlckNvbnRlbnRJbmplY3RlZEZyYW1lcyBpbmplY3Rl
ZEZyYW1lcyA9IG1haW5GcmFtZU9ubHkgPyBrV0tJbmplY3RJblRvcEZyYW1lT25seSA6IGtXS0lu
amVjdEluQWxsRnJhbWVzOworCisgICAgV0tQYWdlR3JvdXBBZGRVc2VyU2NyaXB0KHRvQVBJKHJl
aW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZUdyb3VwKj4oJl9wYWdlR3JvdXApKSwgd2tTb3VyY2UuZ2V0
KCksIHdrQmFzZVVSTC5nZXQoKSwgd2tXaGl0ZWxpc3QuZ2V0KCksIHdrQmxhY2tsaXN0LmdldCgp
LCBpbmplY3RlZEZyYW1lcywgaW5qZWN0aW9uVGltZSk7Cit9CisKKy0gKHZvaWQpcmVtb3ZlQWxs
VXNlclNjcmlwdHMKK3sKKyAgICBXS1BhZ2VHcm91cFJlbW92ZUFsbFVzZXJTY3JpcHRzKHRvQVBJ
KHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZUdyb3VwKj4oJl9wYWdlR3JvdXApKSk7Cit9CisKKyNw
cmFnbWEgbWFyayBXS09iamVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgorCistIChBUEk6Ok9i
amVjdCYpX2FwaU9iamVjdAoreworICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxBUEk6Ok9i
amVjdCo+KCZfcGFnZUdyb3VwKTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tCcm93
c2luZ0NvbnRleHRHcm91cCAoUHJpdmF0ZSkKKworLSAoV0tQYWdlR3JvdXBSZWYpX3BhZ2VHcm91
cFJlZgoreworICAgIHJldHVybiB0b0FQSShyZWludGVycHJldF9jYXN0PFdlYlBhZ2VHcm91cCo+
KCZfcGFnZUdyb3VwKSk7Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0
R3JvdXBJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRHcm91cEludGVybmFsLmgJKHJldmlzaW9uIDE1OTg3
MykJKGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2luZ0NvbnRl
eHRHcm91cEludGVybmFsLmg6MTU5ODczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4dEdyb3VwSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiV0tCcm93c2luZ0NvbnRleHRH
cm91cC5oIgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCAiV0tPYmplY3QuaCIKKyNp
bXBvcnQgIldlYlBhZ2VHcm91cC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworaW5saW5lIFdL
QnJvd3NpbmdDb250ZXh0R3JvdXAgKndyYXBwZXIoV2ViUGFnZUdyb3VwJiBwYWdlR3JvdXApCit7
CisgICAgQVNTRVJUKFtwYWdlR3JvdXAud3JhcHBlcigpIGlzS2luZE9mQ2xhc3M6W1dLQnJvd3Np
bmdDb250ZXh0R3JvdXAgY2xhc3NdXSk7CisgICAgcmV0dXJuIChXS0Jyb3dzaW5nQ29udGV4dEdy
b3VwICopcGFnZUdyb3VwLndyYXBwZXIoKTsKK30KKworfQorCitAaW50ZXJmYWNlIFdLQnJvd3Np
bmdDb250ZXh0R3JvdXAgKCkgPFdLT2JqZWN0PgorQGVuZAorCisjZW5kaWYgLy8gV0tfQVBJX0VO
QUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tCcm93c2lu
Z0NvbnRleHRHcm91cFByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0R3JvdXBQcml2YXRlLmgJKHJldmlzaW9u
IDE1OTg3MykJKGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2lu
Z0NvbnRleHRHcm91cFByaXZhdGUuaDoxNTk4NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0R3JvdXBQcml2YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktpdDIvV0tCcm93
c2luZ0NvbnRleHRHcm91cC5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCA8V2Vi
S2l0Mi9XS0Jhc2UuaD4KKworQGludGVyZmFjZSBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwIChQcml2
YXRlKQorCitAcHJvcGVydHkocmVhZG9ubHkpIFdLUGFnZUdyb3VwUmVmIF9wYWdlR3JvdXBSZWY7
CisKK0BlbmQKKworI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Jyb3dzaW5n
Q29udGV4dExvYWREZWxlZ2F0ZS5oCShyZXZpc2lvbiAxNTk4NzMpCShmcm9tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlLmg6MTU5
ODczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29u
dGV4dExvYWREZWxlZ2F0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworQGNsYXNzIFdLQnJv
d3NpbmdDb250ZXh0Q29udHJvbGxlcjsKK0BjbGFzcyBXS0JhY2tGb3J3YXJkTGlzdEl0ZW07CisK
K0Bwcm90b2NvbCBXS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZSA8TlNPYmplY3Q+CitAb3B0
aW9uYWwKKworLyogU2VudCB3aGVuIHRoZSBwcm92aXNpb25hbCBsb2FkIGJlZ2lucy4gKi8KKy0g
KHZvaWQpYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkOihX
S0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKilzZW5kZXI7CisKKy8qIFNlbnQgaWYgYSBzZXJ2
ZXItc2lkZSByZWRpcmVjdCB3YXMgcmVjaWV2ZWQuICovCistICh2b2lkKWJyb3dzaW5nQ29udGV4
dENvbnRyb2xsZXJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWQ6KFdL
QnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqKXNlbmRlcjsKKworLyogU2VudCBpZiB0aGUgcHJv
dmlvbmFsIGxvYWQgZmFpbHMuICovCistICh2b2lkKWJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJE
aWRGYWlsUHJvdmlzaW9uYWxMb2FkOihXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKilzZW5k
ZXIgd2l0aEVycm9yOihOU0Vycm9yICopZXJyb3I7CisKKy8qIFNlbnQgd2hlbiB0aGUgbG9hZCBn
ZXRzIGNvbW1pdHRlZC4gKi8KKy0gKHZvaWQpYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckRpZENv
bW1pdExvYWQ6KFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqKXNlbmRlcjsKKworLyogU2Vu
dCB3aGVuIHRoZSBsb2FkIGNvbXBsZXRlcy4gKi8KKy0gKHZvaWQpYnJvd3NpbmdDb250ZXh0Q29u
dHJvbGxlckRpZEZpbmlzaExvYWQ6KFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqKXNlbmRl
cjsKKworLyogU2VudCBpZiB0aGUgY29tbWl0ZWQgbG9hZCBmYWlscy4gKi8KKy0gKHZvaWQpYnJv
d3NpbmdDb250ZXh0Q29udHJvbGxlckRpZEZhaWxMb2FkOihXS0Jyb3dzaW5nQ29udGV4dENvbnRy
b2xsZXIgKilzZW5kZXIgd2l0aEVycm9yOihOU0Vycm9yICopZXJyb3I7CisKKy0gKHZvaWQpYnJv
d3NpbmdDb250ZXh0Q29udHJvbGxlckRpZFN0YXJ0UHJvZ3Jlc3M6KFdLQnJvd3NpbmdDb250ZXh0
Q29udHJvbGxlciAqKXNlbmRlcjsKKy0gKHZvaWQpYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjoo
V0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopc2VuZGVyIGVzdGltYXRlZFByb2dyZXNzQ2hh
bmdlZFRvOihkb3VibGUpZXN0aW1hdGVkUHJvZ3Jlc3M7CistICh2b2lkKWJyb3dzaW5nQ29udGV4
dENvbnRyb2xsZXJEaWRGaW5pc2hQcm9ncmVzczooV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVy
ICopc2VuZGVyOworCistICh2b2lkKWJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJEaWRDaGFuZ2VC
YWNrRm9yd2FyZExpc3Q6KFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqKXNlbmRlciBhZGRl
ZEl0ZW06KFdLQmFja0ZvcndhcmRMaXN0SXRlbSAqKWFkZGVkSXRlbSByZW1vdmVkSXRlbXM6KE5T
QXJyYXkgKilyZW1vdmVkSXRlbXM7CisKK0BlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRQb2xpY3lEZWxlZ2F0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRl
eHRQb2xpY3lEZWxlZ2F0ZS5oCShyZXZpc2lvbiAxNTk4NzMpCShmcm9tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0UG9saWN5RGVsZWdhdGUuaDoxNTk4
NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250
ZXh0UG9saWN5RGVsZWdhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxXZWJL
aXQyL1dLRGVjbGFyYXRpb25TcGVjaWZpZXJzLmg+CisKK0BjbGFzcyBXS0Jyb3dzaW5nQ29udGV4
dENvbnRyb2xsZXI7CisKKy8qIENvbnN0YW50cyBmb3IgcG9saWN5IGFjdGlvbiBkaWN0aW9uYXJp
ZXMgKi8KK1dLX0VYUE9SVCBleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBXS0FjdGlvbklzTWFpbkZy
YW1lS2V5OyAgICAgICAgIC8vIE5TTnVtYmVyIChCT09MKQorV0tfRVhQT1JUIGV4dGVybiBOU1N0
cmluZyAqIGNvbnN0IFdLQWN0aW9uTmF2aWdhdGlvblR5cGVLZXk7ICAgICAgLy8gTlNOdW1iZXIg
KFdLTmF2aWdhdGlvblR5cGUpCitXS19FWFBPUlQgZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgV0tB
Y3Rpb25Nb3VzZUJ1dHRvbktleTsgICAgICAgICAvLyBOU051bWJlciAoMCBmb3IgbGVmdCBidXR0
b24sIDEgZm9yIG1pZGRsZSBidXR0b24sIDIgZm9yIHJpZ2h0IGJ1dHRvbikKK1dLX0VYUE9SVCBl
eHRlcm4gTlNTdHJpbmcgKiBjb25zdCBXS0FjdGlvbk1vZGlmaWVyRmxhZ3NLZXk7ICAgICAgIC8v
IE5TTnVtYmVyICh1bnNpZ25lZCkKK1dLX0VYUE9SVCBleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBX
S0FjdGlvblVSTFJlcXVlc3RLZXk7ICAgICAgICAgIC8vIE5TVVJMUmVxdWVzdAorV0tfRVhQT1JU
IGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IFdLQWN0aW9uVVJMUmVzcG9uc2VLZXk7ICAgICAgICAg
Ly8gTlNVUkxSZXNwb25zZQorV0tfRVhQT1JUIGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IFdLQWN0
aW9uRnJhbWVOYW1lS2V5OyAgICAgICAgICAgLy8gTlNTdHJpbmcKK1dLX0VYUE9SVCBleHRlcm4g
TlNTdHJpbmcgKiBjb25zdCBXS0FjdGlvbk9yaWdpbmF0aW5nRnJhbWVVUkxLZXk7IC8vIE5TVVJM
CitXS19FWFBPUlQgZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgV0tBY3Rpb25DYW5TaG93TUlNRVR5
cGVLZXk7ICAgICAvLyBOU051bWJlciAoQk9PTCkKKwordHlwZWRlZiBOU19FTlVNKE5TVUludGVn
ZXIsIFdLTmF2aWdhdGlvblR5cGUpIHsKKyAgICBXS05hdmlnYXRpb25UeXBlTGlua0NsaWNrZWQs
CisgICAgV0tOYXZpZ2F0aW9uVHlwZUZvcm1TdWJtaXR0ZWQsCisgICAgV0tOYXZpZ2F0aW9uVHlw
ZUJhY2tGb3J3YXJkLAorICAgIFdLTmF2aWdhdGlvblR5cGVSZWxvYWQsCisgICAgV0tOYXZpZ2F0
aW9uVHlwZUZvcm1SZXN1Ym1pdHRlZCwKKyAgICBXS05hdmlnYXRpb25UeXBlT3RoZXIKK307CisK
K3R5cGVkZWYgTlNfRU5VTShOU1VJbnRlZ2VyLCBXS1BvbGljeURlY2lzaW9uKSB7CisgICAgV0tQ
b2xpY3lEZWNpc2lvbkNhbmNlbCwKKyAgICBXS1BvbGljeURlY2lzaW9uQWxsb3csCisgICAgV0tQ
b2xpY3lEZWNpc2lvbkJlY29tZURvd25sb2FkCit9OworCit0eXBlZGVmIHZvaWQgKF5XS1BvbGlj
eURlY2lzaW9uSGFuZGxlcikoV0tQb2xpY3lEZWNpc2lvbik7CisKK0Bwcm90b2NvbCBXS0Jyb3dz
aW5nQ29udGV4dFBvbGljeURlbGVnYXRlIDxOU09iamVjdD4KK0BvcHRpb25hbAorCistICh2b2lk
KWJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXI6KFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAq
KXNlbmRlciBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOihOU0RpY3Rpb25hcnkgKilh
Y3Rpb25JbmZvcm1hdGlvbiBkZWNpc2lvbkhhbmRsZXI6KFdLUG9saWN5RGVjaXNpb25IYW5kbGVy
KWRlY2lzaW9uSGFuZGxlcjsKKy0gKHZvaWQpYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjooV0tC
cm93c2luZ0NvbnRleHRDb250cm9sbGVyICopc2VuZGVyIGRlY2lkZVBvbGljeUZvck5ld1dpbmRv
d0FjdGlvbjooTlNEaWN0aW9uYXJ5ICopYWN0aW9uSW5mb3JtYXRpb24gZGVjaXNpb25IYW5kbGVy
OihXS1BvbGljeURlY2lzaW9uSGFuZGxlcilkZWNpc2lvbkhhbmRsZXI7CistICh2b2lkKWJyb3dz
aW5nQ29udGV4dENvbnRyb2xsZXI6KFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqKXNlbmRl
ciBkZWNpZGVQb2xpY3lGb3JSZXNwb25zZUFjdGlvbjooTlNEaWN0aW9uYXJ5ICopYWN0aW9uSW5m
b3JtYXRpb24gZGVjaXNpb25IYW5kbGVyOihXS1BvbGljeURlY2lzaW9uSGFuZGxlcilkZWNpc2lv
bkhhbmRsZXI7CisKK0BlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tDb25uZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS0Nvbm5lY3Rpb24uaAkocmV2aXNpb24gMTU5ODczKQkoZnJvbSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Nvbm5lY3Rpb24uaDoxNTk4NzMpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29ubmVjdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQyL1dLRm91
bmRhdGlvbi5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9G
b3VuZGF0aW9uLmg+CisKK0BjbGFzcyBXS0Nvbm5lY3Rpb247CitAY2xhc3MgV0tSZW1vdGVPYmpl
Y3RSZWdpc3RyeTsKKworQHByb3RvY29sIFdLQ29ubmVjdGlvbkRlbGVnYXRlIDxOU09iamVjdD4K
KworLSAodm9pZCljb25uZWN0aW9uOihXS0Nvbm5lY3Rpb24gKiljb25uZWN0aW9uIGRpZFJlY2Vp
dmVNZXNzYWdlV2l0aE5hbWU6KE5TU3RyaW5nICopbWVzc2FnZU5hbWUgYm9keTooaWQpbWVzc2Fn
ZUJvZHk7CistICh2b2lkKWNvbm5lY3Rpb25EaWRDbG9zZTooV0tDb25uZWN0aW9uICopY29ubmVj
dGlvbjsKKworQGVuZAorCitXS19BUElfQ0xBU1MKK0BpbnRlcmZhY2UgV0tDb25uZWN0aW9uIDog
TlNPYmplY3QKKworLSAodm9pZClzZW5kTWVzc2FnZVdpdGhOYW1lOihOU1N0cmluZyAqKW1lc3Nh
Z2VOYW1lIGJvZHk6KGlkKW1lc3NhZ2VCb2R5OworCitAcHJvcGVydHkgKGFzc2lnbikgaWQgPFdL
Q29ubmVjdGlvbkRlbGVnYXRlPiBkZWxlZ2F0ZTsKKworQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBXS1JlbW90ZU9iamVjdFJlZ2lzdHJ5ICpyZW1vdGVPYmplY3RSZWdpc3RyeTsKKwor
QGVuZAorCisjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tDb25uZWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb25uZWN0aW9uLm1tCShyZXZpc2lvbiAxNTk4
NzMpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQ29ubmVjdGlvbi5t
bToxNTk4NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29ubmVj
dGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV0tDb25uZWN0aW9uSW50ZXJuYWwuaCIKKworI2lm
IFdLX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIk9iakNPYmplY3RHcmFwaC5oIgorI2ltcG9ydCAi
V0tDb25uZWN0aW9uUmVmLmgiCisjaW1wb3J0ICJXS0RhdGEuaCIKKyNpbXBvcnQgIldLUmV0YWlu
UHRyLmgiCisjaW1wb3J0ICJXS1N0cmluZ0NGLmgiCisjaW1wb3J0ICJXS1JlbW90ZU9iamVjdFJl
Z2lzdHJ5SW50ZXJuYWwuaCIKKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKKworQGltcGxlbWVudGF0aW9uIFdLQ29ubmVjdGlvbiB7CisgICAgLy8g
VW5kZXJseWluZyBjb25uZWN0aW9uIG9iamVjdC4KKyAgICBXS1JldGFpblB0cjxXS0Nvbm5lY3Rp
b25SZWY+IF9jb25uZWN0aW9uUmVmOworCisgICAgUmV0YWluUHRyPFdLUmVtb3RlT2JqZWN0UmVn
aXN0cnk+IF9yZW1vdGVPYmplY3RSZWdpc3RyeTsKK30KKworLSAodm9pZClkZWFsbG9jCit7Cisg
ICAgV0tDb25uZWN0aW9uU2V0Q29ubmVjdGlvbkNsaWVudChfY29ubmVjdGlvblJlZi5nZXQoKSwg
MCk7CisKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2VuZE1lc3NhZ2VXaXRo
TmFtZTooTlNTdHJpbmcgKiltZXNzYWdlTmFtZSBib2R5OihpZCltZXNzYWdlQm9keQoreworICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a01lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpbWVzc2FnZU5hbWUpKTsKKyAgICBSZWZQ
dHI8T2JqQ09iamVjdEdyYXBoPiB3a01lc3NhZ2VCb2R5ID0gT2JqQ09iamVjdEdyYXBoOjpjcmVh
dGUobWVzc2FnZUJvZHkpOworCisgICAgV0tDb25uZWN0aW9uUG9zdE1lc3NhZ2UoX2Nvbm5lY3Rp
b25SZWYuZ2V0KCksIHdrTWVzc2FnZU5hbWUuZ2V0KCksIChXS1R5cGVSZWYpd2tNZXNzYWdlQm9k
eS5nZXQoKSk7Cit9CisKKy0gKFdLUmVtb3RlT2JqZWN0UmVnaXN0cnkgKilyZW1vdGVPYmplY3RS
ZWdpc3RyeQoreworICAgIGlmICghX3JlbW90ZU9iamVjdFJlZ2lzdHJ5KQorICAgICAgICBfcmVt
b3RlT2JqZWN0UmVnaXN0cnkgPSBhZG9wdE5TKFtbV0tSZW1vdGVPYmplY3RSZWdpc3RyeSBhbGxv
Y10gX2luaXRXaXRoQ29ubmVjdGlvblJlZjpfY29ubmVjdGlvblJlZi5nZXQoKV0pOworCisgICAg
cmV0dXJuIF9yZW1vdGVPYmplY3RSZWdpc3RyeS5nZXQoKTsKK30KKworc3RhdGljIHZvaWQgZGlk
UmVjZWl2ZU1lc3NhZ2UoV0tDb25uZWN0aW9uUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwg
V0tUeXBlUmVmIG1lc3NhZ2VCb2R5LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIFdL
Q29ubmVjdGlvbiAqY29ubmVjdGlvbiA9IChXS0Nvbm5lY3Rpb24gKiljbGllbnRJbmZvOworCisg
ICAgaWYgKFtjb25uZWN0aW9uLT5fcmVtb3RlT2JqZWN0UmVnaXN0cnkgX2hhbmRsZU1lc3NhZ2VX
aXRoTmFtZTptZXNzYWdlTmFtZSBib2R5Om1lc3NhZ2VCb2R5XSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKFtjb25uZWN0aW9uLmRlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IoY29ubmVjdGlvbjpkaWRSZWNlaXZlTWVzc2FnZVdpdGhOYW1lOmJvZHk6KV0pIHsKKyAgICAg
ICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBuc01lc3NhZ2VOYW1lID0gYWRvcHRDRihXS1N0cmlu
Z0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBtZXNzYWdlTmFtZSkpOworICAgICAg
ICBSZXRhaW5QdHI8aWQ+IG5zTWVzc2FnZUJvZHkgPSAoKE9iakNPYmplY3RHcmFwaCopbWVzc2Fn
ZUJvZHkpLT5yb290T2JqZWN0KCk7CisKKyAgICAgICAgW2Nvbm5lY3Rpb24uZGVsZWdhdGUgY29u
bmVjdGlvbjpjb25uZWN0aW9uIGRpZFJlY2VpdmVNZXNzYWdlV2l0aE5hbWU6KE5TU3RyaW5nICop
bnNNZXNzYWdlTmFtZS5nZXQoKSBib2R5Om5zTWVzc2FnZUJvZHkuZ2V0KCldOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgZGlkQ2xvc2UoV0tDb25uZWN0aW9uUmVmLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQoreworICAgIFdLQ29ubmVjdGlvbiAqY29ubmVjdGlvbiA9IChXS0Nvbm5lY3Rpb24g
KiljbGllbnRJbmZvOworICAgIGlmIChbY29ubmVjdGlvbi5kZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKGNvbm5lY3Rpb25EaWRDbG9zZTopXSkgeworICAgICAgICBbY29ubmVj
dGlvbi5kZWxlZ2F0ZSBjb25uZWN0aW9uRGlkQ2xvc2U6Y29ubmVjdGlvbl07CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCBzZXRVcENsaWVudChXS0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIFdLQ29u
bmVjdGlvblJlZiBjb25uZWN0aW9uUmVmKQoreworICAgIFdLQ29ubmVjdGlvbkNsaWVudCBjbGll
bnQ7CisgICAgbWVtc2V0KCZjbGllbnQsIDAsIHNpemVvZihjbGllbnQpKTsKKworICAgIGNsaWVu
dC52ZXJzaW9uID0gV0tDb25uZWN0aW9uQ2xpZW50Q3VycmVudFZlcnNpb247CisgICAgY2xpZW50
LmNsaWVudEluZm8gPSBjb25uZWN0aW9uOworICAgIGNsaWVudC5kaWRSZWNlaXZlTWVzc2FnZSA9
IGRpZFJlY2VpdmVNZXNzYWdlOworICAgIGNsaWVudC5kaWRDbG9zZSA9IGRpZENsb3NlOworCisg
ICAgV0tDb25uZWN0aW9uU2V0Q29ubmVjdGlvbkNsaWVudChjb25uZWN0aW9uUmVmLCAmY2xpZW50
KTsKK30KKworLSAoaWQpX2luaXRXaXRoQ29ubmVjdGlvblJlZjooV0tDb25uZWN0aW9uUmVmKWNv
bm5lY3Rpb25SZWYKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9jb25uZWN0aW9uUmVmID0gY29ubmVjdGlvblJl
ZjsKKworICAgIHNldFVwQ2xpZW50KHNlbGYsIF9jb25uZWN0aW9uUmVmLmdldCgpKTsKKworICAg
IHJldHVybiBzZWxmOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Nvbm5lY3Rpb25JbnRlcm5h
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tD
b25uZWN0aW9uSW50ZXJuYWwuaAkocmV2aXNpb24gMTU5ODczKQkoZnJvbSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Nvbm5lY3Rpb25JbnRlcm5hbC5oOjE1OTg3MykKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb25uZWN0aW9uSW50ZXJuYWwuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiV0tD
b25uZWN0aW9uLmgiCisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0IDxXZWJLaXQyL1dL
QmFzZS5oPgorCitAaW50ZXJmYWNlIFdLQ29ubmVjdGlvbiAoKQorCistIChpZClfaW5pdFdpdGhD
b25uZWN0aW9uUmVmOihXS0Nvbm5lY3Rpb25SZWYpY29ubmVjdGlvblJlZjsKKworQGVuZAorCisj
ZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc0dyb3VwLmgJKHJldmlzaW9uIDE1OTg3MykJKGZy
b20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcm9jZXNzR3JvdXAuaDoxNTk4
NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc0dyb3Vw
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQg
PFdlYktpdDIvV0tGb3VuZGF0aW9uLmg+CisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0
IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPFdlYktpdDIvV0tDb25uZWN0aW9u
Lmg+CisKK0BjbGFzcyBXS1Byb2Nlc3NHcm91cDsKKworQHByb3RvY29sIFdLUHJvY2Vzc0dyb3Vw
RGVsZWdhdGUgPE5TT2JqZWN0PgorQG9wdGlvbmFsCisKKy0gKGlkKXByb2Nlc3NHcm91cFdpbGxD
cmVhdGVDb25uZWN0aW9uVG9XZWJQcm9jZXNzUGx1Z0luOihXS1Byb2Nlc3NHcm91cCAqKXByb2Nl
c3NHcm91cDsKKworQHJlcXVpcmVkCisKKy0gKHZvaWQpcHJvY2Vzc0dyb3VwOihXS1Byb2Nlc3NH
cm91cCAqKXByb2Nlc3NHcm91cCBkaWRDcmVhdGVDb25uZWN0aW9uVG9XZWJQcm9jZXNzUGx1Z0lu
OihXS0Nvbm5lY3Rpb24gKiljb25uZWN0aW9uOworCitAZW5kCisKK1dLX0FQSV9DTEFTUworQGlu
dGVyZmFjZSBXS1Byb2Nlc3NHcm91cCA6IE5TT2JqZWN0CisKKy0gKGlkKWluaXRXaXRoSW5qZWN0
ZWRCdW5kbGVVUkw6KE5TVVJMICopYnVuZGxlVVJMOworCisKKyNwcmFnbWEgbWFyayBEZWxlZ2F0
ZXMKKworQHByb3BlcnR5IChhc3NpZ24pIGlkIDxXS1Byb2Nlc3NHcm91cERlbGVnYXRlPiBkZWxl
Z2F0ZTsKKworQGVuZAorCisjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91cC5tbQko
cmV2aXNpb24gMTU5ODczKQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9X
S1Byb2Nlc3NHcm91cC5tbToxNTk4NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLUHJvY2Vzc0dyb3VwLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS1Byb2Nlc3NHcm91
cEludGVybmFsLmgiCisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJBUElOYXZpZ2F0
aW9uRGF0YS5oIgorI2ltcG9ydCAiT2JqQ09iamVjdEdyYXBoLmgiCisjaW1wb3J0ICJXS0FQSUNh
c3QuaCIKKyNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckludGVybmFsLmgiCisj
aW1wb3J0ICJXS0Jyb3dzaW5nQ29udGV4dEhpc3RvcnlEZWxlZ2F0ZS5oIgorI2ltcG9ydCAiV0tD
b25uZWN0aW9uSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLQ29udGV4dC5oIgorI2ltcG9ydCAiV0tO
U1N0cmluZy5oIgorI2ltcG9ydCAiV0tOU1VSTC5oIgorI2ltcG9ydCAiV0tOYXZpZ2F0aW9uRGF0
YUludGVybmFsLmgiCisjaW1wb3J0ICJXS1JldGFpblB0ci5oIgorI2ltcG9ydCAiV0tTdHJpbmdD
Ri5oIgorI2ltcG9ydCAiV2ViRnJhbWVQcm94eS5oIgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5o
PgorCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9ydCAiV0tBUElDYXN0LmgiCisjaW1wb3J0ICJX
S0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MuaCIKKyNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVRocmVh
ZFN5c3RlbUludGVyZmFjZS5oPgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisK
K0BpbXBsZW1lbnRhdGlvbiBXS1Byb2Nlc3NHcm91cCB7CisgICAgc3RkOjphbGlnbmVkX3N0b3Jh
Z2U8c2l6ZW9mKFdlYkNvbnRleHQpLCBzdGQ6OmFsaWdubWVudF9vZjxXZWJDb250ZXh0Pjo6dmFs
dWU+Ojp0eXBlIF9jb250ZXh0OworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIFJldGFpblB0cjxX
S0dlb2xvY2F0aW9uUHJvdmlkZXJJT1M+IF9nZW9sb2NhdGlvblByb3ZpZGVyOworI2VuZGlmIC8v
IFBMQVRGT1JNKElPUykKK30KKworc3RhdGljIHZvaWQgZGlkQ3JlYXRlQ29ubmVjdGlvbihXS0Nv
bnRleHRSZWYsIFdLQ29ubmVjdGlvblJlZiBjb25uZWN0aW9uUmVmLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQoreworICAgIFdLUHJvY2Vzc0dyb3VwICpwcm9jZXNzR3JvdXAgPSAoV0tQcm9jZXNz
R3JvdXAgKiljbGllbnRJbmZvOworICAgIGlmIChbcHJvY2Vzc0dyb3VwLmRlbGVnYXRlIHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocHJvY2Vzc0dyb3VwOmRpZENyZWF0ZUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3NQbHVnSW46KV0pIHsKKyAgICAgICAgUmV0YWluUHRyPFdLQ29ubmVjdGlvbj4g
Y29ubmVjdGlvbiA9IGFkb3B0TlMoW1tXS0Nvbm5lY3Rpb24gYWxsb2NdIF9pbml0V2l0aENvbm5l
Y3Rpb25SZWY6Y29ubmVjdGlvblJlZl0pOworICAgICAgICBbcHJvY2Vzc0dyb3VwLmRlbGVnYXRl
IHByb2Nlc3NHcm91cDpwcm9jZXNzR3JvdXAgZGlkQ3JlYXRlQ29ubmVjdGlvblRvV2ViUHJvY2Vz
c1BsdWdJbjpjb25uZWN0aW9uLmdldCgpXTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNldFVw
Q29ubmVjdGlvbkNsaWVudChXS1Byb2Nlc3NHcm91cCAqcHJvY2Vzc0dyb3VwLCBXS0NvbnRleHRS
ZWYgY29udGV4dFJlZikKK3sKKyAgICBXS0NvbnRleHRDb25uZWN0aW9uQ2xpZW50IGNvbm5lY3Rp
b25DbGllbnQ7CisgICAgbWVtc2V0KCZjb25uZWN0aW9uQ2xpZW50LCAwLCBzaXplb2YoY29ubmVj
dGlvbkNsaWVudCkpOworCisgICAgY29ubmVjdGlvbkNsaWVudC52ZXJzaW9uID0ga1dLQ29udGV4
dENvbm5lY3Rpb25DbGllbnRDdXJyZW50VmVyc2lvbjsKKyAgICBjb25uZWN0aW9uQ2xpZW50LmNs
aWVudEluZm8gPSBwcm9jZXNzR3JvdXA7CisgICAgY29ubmVjdGlvbkNsaWVudC5kaWRDcmVhdGVD
b25uZWN0aW9uID0gZGlkQ3JlYXRlQ29ubmVjdGlvbjsKKworICAgIFdLQ29udGV4dFNldENvbm5l
Y3Rpb25DbGllbnQoY29udGV4dFJlZiwgJmNvbm5lY3Rpb25DbGllbnQpOworfQorCitzdGF0aWMg
V0tUeXBlUmVmIGdldEluamVjdGVkQnVuZGxlSW5pdGlhbGl6YXRpb25Vc2VyRGF0YShXS0NvbnRl
eHRSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgV0tQcm9jZXNzR3JvdXAgKnBy
b2Nlc3NHcm91cCA9IChXS1Byb2Nlc3NHcm91cCAqKWNsaWVudEluZm87CisgICAgaWYgKFtwcm9j
ZXNzR3JvdXAuZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihwcm9jZXNzR3Jv
dXBXaWxsQ3JlYXRlQ29ubmVjdGlvblRvV2ViUHJvY2Vzc1BsdWdJbjopXSkgeworICAgICAgICBS
ZXRhaW5QdHI8aWQ+IGluaXRpYWxpemF0aW9uVXNlckRhdGEgPSBbcHJvY2Vzc0dyb3VwLmRlbGVn
YXRlIHByb2Nlc3NHcm91cFdpbGxDcmVhdGVDb25uZWN0aW9uVG9XZWJQcm9jZXNzUGx1Z0luOnBy
b2Nlc3NHcm91cF07CisgICAgICAgIFJlZlB0cjxXZWJLaXQ6Ok9iakNPYmplY3RHcmFwaD4gd2tN
ZXNzYWdlQm9keSA9IFdlYktpdDo6T2JqQ09iamVjdEdyYXBoOjpjcmVhdGUoaW5pdGlhbGl6YXRp
b25Vc2VyRGF0YS5nZXQoKSk7CisgICAgICAgIHJldHVybiAoV0tUeXBlUmVmKXdrTWVzc2FnZUJv
ZHkucmVsZWFzZSgpLmxlYWtSZWYoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3Rh
dGljIHZvaWQgc2V0VXBJbmVjdGVkQnVuZGxlQ2xpZW50KFdLUHJvY2Vzc0dyb3VwICpwcm9jZXNz
R3JvdXAsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQoreworICAgIFdLQ29udGV4dEluamVjdGVk
QnVuZGxlQ2xpZW50IGluamVjdGVkQnVuZGxlQ2xpZW50OworICAgIG1lbXNldCgmaW5qZWN0ZWRC
dW5kbGVDbGllbnQsIDAsIHNpemVvZihpbmplY3RlZEJ1bmRsZUNsaWVudCkpOworCisgICAgaW5q
ZWN0ZWRCdW5kbGVDbGllbnQudmVyc2lvbiA9IGtXS0NvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVu
dEN1cnJlbnRWZXJzaW9uOworICAgIGluamVjdGVkQnVuZGxlQ2xpZW50LmNsaWVudEluZm8gPSBw
cm9jZXNzR3JvdXA7CisgICAgaW5qZWN0ZWRCdW5kbGVDbGllbnQuZ2V0SW5qZWN0ZWRCdW5kbGVJ
bml0aWFsaXphdGlvblVzZXJEYXRhID0gZ2V0SW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVz
ZXJEYXRhOworCisgICAgV0tDb250ZXh0U2V0SW5qZWN0ZWRCdW5kbGVDbGllbnQoY29udGV4dFJl
ZiwgJmluamVjdGVkQnVuZGxlQ2xpZW50KTsKK30KKworc3RhdGljIHZvaWQgZGlkTmF2aWdhdGVX
aXRoTmF2aWdhdGlvbkRhdGEoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZVJlZiwgV0tOYXZp
Z2F0aW9uRGF0YVJlZiBuYXZpZ2F0aW9uRGF0YVJlZiwgV0tGcmFtZVJlZiBmcmFtZVJlZiwgY29u
c3Qgdm9pZCopCit7CisgICAgaWYgKCF0b0ltcGwoZnJhbWVSZWYpLT5pc01haW5GcmFtZSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmNvbnRy
b2xsZXIgPSBbV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyIF9icm93c2luZ0NvbnRleHRDb250
cm9sbGVyRm9yUGFnZVJlZjpwYWdlUmVmXTsKKyAgICBpZiAoW2NvbnRyb2xsZXIuaGlzdG9yeURl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoYnJvd3NpbmdDb250ZXh0Q29udHJv
bGxlcjpkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YTopXSkKKyAgICAgICAgW2NvbnRyb2xs
ZXIuaGlzdG9yeURlbGVnYXRlIGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXI6Y29udHJvbGxlciBk
aWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YTp3cmFwcGVyKCp0b0ltcGwobmF2aWdhdGlvbkRh
dGFSZWYpKV07Cit9CisKK3N0YXRpYyB2b2lkIGRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdChXS0Nv
bnRleHRSZWYsIFdLUGFnZVJlZiBwYWdlUmVmLCBXS1VSTFJlZiBzb3VyY2VVUkxSZWYsIFdLVVJM
UmVmIGRlc3RpbmF0aW9uVVJMUmVmLCBXS0ZyYW1lUmVmIGZyYW1lUmVmLCBjb25zdCB2b2lkKikK
K3sKKyAgICBpZiAoIXRvSW1wbChmcmFtZVJlZiktPmlzTWFpbkZyYW1lKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqY29udHJvbGxlciA9IFtX
S0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgX2Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJGb3JQ
YWdlUmVmOnBhZ2VSZWZdOworICAgIGlmIChbY29udHJvbGxlci5oaXN0b3J5RGVsZWdhdGUgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihicm93c2luZ0NvbnRleHRDb250cm9sbGVyOmRpZFBl
cmZvcm1DbGllbnRSZWRpcmVjdEZyb21VUkw6dG9VUkw6KV0pCisgICAgICAgIFtjb250cm9sbGVy
Lmhpc3RvcnlEZWxlZ2F0ZSBicm93c2luZ0NvbnRleHRDb250cm9sbGVyOmNvbnRyb2xsZXIgZGlk
UGVyZm9ybUNsaWVudFJlZGlyZWN0RnJvbVVSTDp3cmFwcGVyKCp0b0ltcGwoc291cmNlVVJMUmVm
KSkgdG9VUkw6d3JhcHBlcigqdG9JbXBsKGRlc3RpbmF0aW9uVVJMUmVmKSldOworfQorCitzdGF0
aWMgdm9pZCBkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYg
cGFnZVJlZiwgV0tVUkxSZWYgc291cmNlVVJMUmVmLCBXS1VSTFJlZiBkZXN0aW5hdGlvblVSTFJl
ZiwgV0tGcmFtZVJlZiBmcmFtZVJlZiwgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKCF0b0ltcGwo
ZnJhbWVSZWYpLT5pc01haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBXS0Jyb3dz
aW5nQ29udGV4dENvbnRyb2xsZXIgKmNvbnRyb2xsZXIgPSBbV0tCcm93c2luZ0NvbnRleHRDb250
cm9sbGVyIF9icm93c2luZ0NvbnRleHRDb250cm9sbGVyRm9yUGFnZVJlZjpwYWdlUmVmXTsKKyAg
ICBpZiAoW2NvbnRyb2xsZXIuaGlzdG9yeURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IoYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjpkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3RG
cm9tVVJMOnRvVVJMOildKQorICAgICAgICBbY29udHJvbGxlci5oaXN0b3J5RGVsZWdhdGUgYnJv
d3NpbmdDb250ZXh0Q29udHJvbGxlcjpjb250cm9sbGVyIGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVj
dEZyb21VUkw6d3JhcHBlcigqdG9JbXBsKHNvdXJjZVVSTFJlZikpIHRvVVJMOndyYXBwZXIoKnRv
SW1wbChkZXN0aW5hdGlvblVSTFJlZikpXTsKK30KKworc3RhdGljIHZvaWQgZGlkVXBkYXRlSGlz
dG9yeVRpdGxlKFdLQ29udGV4dFJlZiwgV0tQYWdlUmVmIHBhZ2VSZWYsIFdLU3RyaW5nUmVmIHRp
dGxlUmVmLCBXS1VSTFJlZiB1cmxSZWYsIFdLRnJhbWVSZWYgZnJhbWVSZWYsIGNvbnN0IHZvaWQq
KQoreworICAgIGlmICghdG9JbXBsKGZyYW1lUmVmKS0+aXNNYWluRnJhbWUoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpjb250cm9sbGVyID0g
W1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciBfYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckZv
clBhZ2VSZWY6cGFnZVJlZl07CisgICAgaWYgKFtjb250cm9sbGVyLmhpc3RvcnlEZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXI6ZGlk
VXBkYXRlSGlzdG9yeVRpdGxlOmZvclVSTDopXSkKKyAgICAgICAgW2NvbnRyb2xsZXIuaGlzdG9y
eURlbGVnYXRlIGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXI6Y29udHJvbGxlciBkaWRVcGRhdGVI
aXN0b3J5VGl0bGU6d3JhcHBlcigqdG9JbXBsKHRpdGxlUmVmKSkgZm9yVVJMOndyYXBwZXIoKnRv
SW1wbCh1cmxSZWYpKV07Cit9CisKK3N0YXRpYyB2b2lkIHNldFVwSGlzdG9yeUNsaWVudChXS1By
b2Nlc3NHcm91cCAqcHJvY2Vzc0dyb3VwLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZikKK3sKKyAg
ICBXS0NvbnRleHRIaXN0b3J5Q2xpZW50IGhpc3RvcnlDbGllbnQ7CisgICAgbWVtc2V0KCZoaXN0
b3J5Q2xpZW50LCAwLCBzaXplb2YoaGlzdG9yeUNsaWVudCkpOworCisgICAgaGlzdG9yeUNsaWVu
dC52ZXJzaW9uID0ga1dLQ29udGV4dEhpc3RvcnlDbGllbnRDdXJyZW50VmVyc2lvbjsKKyAgICBo
aXN0b3J5Q2xpZW50LmNsaWVudEluZm8gPSBwcm9jZXNzR3JvdXA7CisgICAgaGlzdG9yeUNsaWVu
dC5kaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSA9IGRpZE5hdmlnYXRlV2l0aE5hdmlnYXRp
b25EYXRhOworICAgIGhpc3RvcnlDbGllbnQuZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0ID0gZGlk
UGVyZm9ybUNsaWVudFJlZGlyZWN0OworICAgIGhpc3RvcnlDbGllbnQuZGlkUGVyZm9ybVNlcnZl
clJlZGlyZWN0ID0gZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0OworICAgIGhpc3RvcnlDbGllbnQu
ZGlkVXBkYXRlSGlzdG9yeVRpdGxlID0gZGlkVXBkYXRlSGlzdG9yeVRpdGxlOworCisgICAgV0tD
b250ZXh0U2V0SGlzdG9yeUNsaWVudChjb250ZXh0UmVmLCAmaGlzdG9yeUNsaWVudCk7Cit9CisK
Ky0gKGlkKWluaXQKK3sKKyAgICByZXR1cm4gW3NlbGYgaW5pdFdpdGhJbmplY3RlZEJ1bmRsZVVS
TDpuaWxdOworfQorCistIChpZClpbml0V2l0aEluamVjdGVkQnVuZGxlVVJMOihOU1VSTCAqKWJ1
bmRsZVVSTAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAg
ICAgICByZXR1cm4gbmlsOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBSZW1v
dmUgb25jZSA8cmRhcjovL3Byb2JsZW0vMTUyNTY1NzI+IGlzIGZpeGVkLgorICAgIEluaXRXZWJD
b3JlVGhyZWFkU3lzdGVtSW50ZXJmYWNlKCk7CisjZW5kaWYKKworICAgIEFQSTo6T2JqZWN0Ojpj
b25zdHJ1Y3RJbldyYXBwZXI8V2ViQ29udGV4dD4oc2VsZiwgYnVuZGxlVVJMID8gU3RyaW5nKFti
dW5kbGVVUkwgcGF0aF0pIDogU3RyaW5nKCkpOworCisgICAgc2V0VXBDb25uZWN0aW9uQ2xpZW50
KHNlbGYsIHRvQVBJKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29udGV4dCo+KCZfY29udGV4dCkpKTsK
KyAgICBzZXRVcEluZWN0ZWRCdW5kbGVDbGllbnQoc2VsZiwgdG9BUEkocmVpbnRlcnByZXRfY2Fz
dDxXZWJDb250ZXh0Kj4oJl9jb250ZXh0KSkpOworICAgIHNldFVwSGlzdG9yeUNsaWVudChzZWxm
LCB0b0FQSShyZWludGVycHJldF9jYXN0PFdlYkNvbnRleHQqPigmX2NvbnRleHQpKSk7CisKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgcmVpbnRlcnByZXRf
Y2FzdDxXZWJDb250ZXh0Kj4oJl9jb250ZXh0KS0+fldlYkNvbnRleHQoKTsKKworICAgIFtzdXBl
ciBkZWFsbG9jXTsKK30KKworI3ByYWdtYSBtYXJrIFdLT2JqZWN0IHByb3RvY29sIGltcGxlbWVu
dGF0aW9uCisKKy0gKEFQSTo6T2JqZWN0JilfYXBpT2JqZWN0Cit7CisgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEFQSTo6T2JqZWN0Kj4oJl9jb250ZXh0KTsKK30KKworQGVuZAorCitAaW1w
bGVtZW50YXRpb24gV0tQcm9jZXNzR3JvdXAgKFByaXZhdGUpCisKKy0gKFdLQ29udGV4dFJlZilf
Y29udGV4dFJlZgoreworICAgIHJldHVybiB0b0FQSShyZWludGVycHJldF9jYXN0PFdlYkNvbnRl
eHQqPigmX2NvbnRleHQpKTsKK30KKworI2lmIFBMQVRGT1JNKElPUykKKy0gKFdLR2VvbG9jYXRp
b25Qcm92aWRlcklPUyAqKV9nZW9sb2NhdGlvblByb3ZpZGVyCit7CisgICAgaWYgKCFfZ2VvbG9j
YXRpb25Qcm92aWRlcikKKyAgICAgICAgX2dlb2xvY2F0aW9uUHJvdmlkZXIgPSBhZG9wdE5TKFtb
V0tHZW9sb2NhdGlvblByb3ZpZGVySU9TIGFsbG9jXSBpbml0V2l0aENvbnRleHQ6cmVpbnRlcnBy
ZXRfY2FzdDxXZWJDb250ZXh0Kj4oJl9jb250ZXh0KV0pOworICAgIHJldHVybiBfZ2VvbG9jYXRp
b25Qcm92aWRlci5nZXQoKTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKK0BlbmQKKwor
I2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLUHJvY2Vzc0dyb3VwSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc0dyb3VwSW50ZXJuYWwuaAkocmV2
aXNpb24gMTU5ODczKQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1By
b2Nlc3NHcm91cEludGVybmFsLmg6MTU5ODczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91cEludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIldLUHJvY2Vzc0dyb3VwUHJpdmF0ZS5o
IgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCAiV0tPYmplY3QuaCIKKyNpbXBvcnQg
IldlYkNvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2lubGluZSBXS1Byb2Nlc3NH
cm91cCAqd3JhcHBlcihXZWJDb250ZXh0JiBjb250ZXh0KQoreworICAgIEFTU0VSVChbY29udGV4
dC53cmFwcGVyKCkgaXNLaW5kT2ZDbGFzczpbV0tQcm9jZXNzR3JvdXAgY2xhc3NdXSk7CisgICAg
cmV0dXJuIChXS1Byb2Nlc3NHcm91cCAqKWNvbnRleHQud3JhcHBlcigpOworfQorCit9CisKK0Bp
bnRlcmZhY2UgV0tQcm9jZXNzR3JvdXAgKCkgPFdLT2JqZWN0PgorQGVuZAorCisjZW5kaWYgLy8g
V0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tQcm9jZXNzR3JvdXBQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91cFByaXZhdGUuaAkocmV2aXNpb24gMTU5ODcz
KQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1Byb2Nlc3NHcm91cFBy
aXZhdGUuaDoxNTk4NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
UHJvY2Vzc0dyb3VwUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQyL1dLUHJvY2Vzc0dyb3VwLmg+CisKKyNpZiBXS19B
UElfRU5BQkxFRAorCisjaW1wb3J0IDxXZWJLaXQyL1dLQmFzZS5oPgorCisjaWYgVEFSR0VUX09T
X0lQSE9ORQorQGNsYXNzIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUzsKKyNlbmRpZgorCitAaW50
ZXJmYWNlIFdLUHJvY2Vzc0dyb3VwIChQcml2YXRlKQorCitAcHJvcGVydHkocmVhZG9ubHkpIFdL
Q29udGV4dFJlZiBfY29udGV4dFJlZjsKKyNpZiBUQVJHRVRfT1NfSVBIT05FCitAcHJvcGVydHko
cmVhZG9ubHkpIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUyAqX2dlb2xvY2F0aW9uUHJvdmlkZXI7
CisjZW5kaWYKKworQGVuZAorCisjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tUeXBlUmVmV3JhcHBlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tUeXBlUmVmV3JhcHBl
ci5oCShyZXZpc2lvbiAxNTk4NzMpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
bWFjL1dLVHlwZVJlZldyYXBwZXIuaDoxNTk4NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLVHlwZVJlZldyYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0Mi9XS0ZvdW5kYXRpb24uaD4KKwor
I2lmIFdLX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgor
I2ltcG9ydCA8V2ViS2l0Mi9XS0Jhc2UuaD4KKworV0tfQVBJX0NMQVNTCitAaW50ZXJmYWNlIFdL
VHlwZVJlZldyYXBwZXIgOiBOU09iamVjdAorCistIChpZClpbml0V2l0aE9iamVjdDooV0tUeXBl
UmVmKW9iamVjdDsKKworQHByb3BlcnR5KHJlYWRvbmx5KSBXS1R5cGVSZWYgb2JqZWN0OworCitA
ZW5kCisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1R5cGVSZWZXcmFwcGVyLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tUeXBlUmVmV3JhcHBlci5tbQkocmV2aXNp
b24gMTU5ODczKQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1R5cGVS
ZWZXcmFwcGVyLm1tOjE1OTg3MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tUeXBlUmVmV3JhcHBlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS1R5cGVSZWZXcmFwcGVy
LmgiCisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJXS1JldGFpblB0ci5oIgorCitA
aW50ZXJmYWNlIFdLVHlwZVJlZldyYXBwZXIgKCkgeworICAgIC8vIFVuZGVybHlpbmcgV0tUeXBl
UmVmLgorICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gX29iamVjdDsKK30KK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFdLVHlwZVJlZldyYXBwZXIKKworLSAoaWQpaW5pdFdpdGhPYmplY3Q6KFdL
VHlwZVJlZilvYmplY3QKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2Vs
ZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9vYmplY3QgPSBvYmplY3Q7CisKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAoV0tUeXBlUmVmKW9iamVjdAoreworICAgIHJldHVybiBfb2Jq
ZWN0LmdldCgpOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ZpZXcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVmlldy5oCShyZXZpc2lvbiAx
NTk4NzMpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5oOjE1
OTg3MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tWaWV3LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktp
dDIvV0tGb3VuZGF0aW9uLmg+CisKKyNpZiBUQVJHRVRfT1NfSVBIT05FCisjaW1wb3J0IDxVSUtp
dC9VSUtpdC5oPgorI2Vsc2UKKyNpbXBvcnQgPENvY29hL0NvY29hLmg+CisjZW5kaWYKKyNpbXBv
cnQgPFdlYktpdDIvV0tEZWNsYXJhdGlvblNwZWNpZmllcnMuaD4KKworQGNsYXNzIFdLQnJvd3Np
bmdDb250ZXh0Q29udHJvbGxlcjsKK0BjbGFzcyBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwOworQGNs
YXNzIFdLUHJvY2Vzc0dyb3VwOworQGNsYXNzIFdLVmlld0RhdGE7CisKKyNpZiBUQVJHRVRfT1Nf
SVBIT05FCitXS19FWFBPUlQKK0BpbnRlcmZhY2UgV0tWaWV3IDogVUlWaWV3IHsKKyNlbHNlCitX
S19FWFBPUlQKK0BpbnRlcmZhY2UgV0tWaWV3IDogTlNWaWV3IDxOU1RleHRJbnB1dENsaWVudD4g
eworI2VuZGlmCitAcHJpdmF0ZQorICAgIFdLVmlld0RhdGEgKl9kYXRhOworICAgIHVuc2lnbmVk
IF91bnVzZWQ7Cit9CisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaWYgVEFSR0VUX09TX0lQSE9O
RQorLSAoaWQpaW5pdFdpdGhGcmFtZTooQ0dSZWN0KWZyYW1lIHByb2Nlc3NHcm91cDooV0tQcm9j
ZXNzR3JvdXAgKilwcm9jZXNzR3JvdXAgYnJvd3NpbmdDb250ZXh0R3JvdXA6KFdLQnJvd3NpbmdD
b250ZXh0R3JvdXAgKilicm93c2luZ0NvbnRleHRHcm91cDsKKy0gKGlkKWluaXRXaXRoRnJhbWU6
KENHUmVjdClmcmFtZSBwcm9jZXNzR3JvdXA6KFdLUHJvY2Vzc0dyb3VwICopcHJvY2Vzc0dyb3Vw
IGJyb3dzaW5nQ29udGV4dEdyb3VwOihXS0Jyb3dzaW5nQ29udGV4dEdyb3VwICopYnJvd3NpbmdD
b250ZXh0R3JvdXAgcmVsYXRlZFRvVmlldzooV0tWaWV3ICopcmVsYXRlZFZpZXc7CisjZWxzZQor
LSAoaWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIHByb2Nlc3NHcm91cDooV0tQcm9jZXNz
R3JvdXAgKilwcm9jZXNzR3JvdXAgYnJvd3NpbmdDb250ZXh0R3JvdXA6KFdLQnJvd3NpbmdDb250
ZXh0R3JvdXAgKilicm93c2luZ0NvbnRleHRHcm91cDsKKy0gKGlkKWluaXRXaXRoRnJhbWU6KE5T
UmVjdClmcmFtZSBwcm9jZXNzR3JvdXA6KFdLUHJvY2Vzc0dyb3VwICopcHJvY2Vzc0dyb3VwIGJy
b3dzaW5nQ29udGV4dEdyb3VwOihXS0Jyb3dzaW5nQ29udGV4dEdyb3VwICopYnJvd3NpbmdDb250
ZXh0R3JvdXAgcmVsYXRlZFRvVmlldzooV0tWaWV3ICopcmVsYXRlZFZpZXc7CisjZW5kaWYKKwor
QHByb3BlcnR5KHJlYWRvbmx5KSBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmJyb3dzaW5n
Q29udGV4dENvbnRyb2xsZXI7CisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxFRAorCitAcHJvcGVy
dHkgQk9PTCBkcmF3c0JhY2tncm91bmQ7CitAcHJvcGVydHkgQk9PTCBkcmF3c1RyYW5zcGFyZW50
QmFja2dyb3VuZDsKKworQGVuZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1ZpZXdQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1ZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDE1OTg3MykJKGZyb20gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3UHJpdmF0ZS5oOjE1OTg3MykKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tWaWV3UHJpdmF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQy
L1dLQmFzZS5oPgorI2ltcG9ydCA8V2ViS2l0Mi9XS1ZpZXcuaD4KKworI2lmICFUQVJHRVRfT1Nf
SVBIT05FCisKK3R5cGVkZWYgZW51bSB7CisgICAgV0tDb250ZW50QW5jaG9yVG9wTGVmdCwKKyAg
ICBXS0NvbnRlbnRBbmNob3JUb3BSaWdodCwKKyAgICBXS0NvbnRlbnRBbmNob3JCb3R0b21MZWZ0
LAorICAgIFdLQ29udGVudEFuY2hvckJvdHRvbVJpZ2h0LAorfSBXS0NvbnRlbnRBbmNob3I7CisK
KyNlbmRpZgorCitAaW50ZXJmYWNlIFdLVmlldyAoUHJpdmF0ZSkKKworLyogQyBTUEkgc3VwcG9y
dC4gKi8KKworQHByb3BlcnR5IChyZWFkb25seSkgV0tQYWdlUmVmIHBhZ2VSZWY7CisKKyNpZiBU
QVJHRVRfT1NfSVBIT05FCistIChpZClpbml0V2l0aEZyYW1lOihDR1JlY3QpZnJhbWUgY29udGV4
dFJlZjooV0tDb250ZXh0UmVmKWNvbnRleHRSZWYgcGFnZUdyb3VwUmVmOihXS1BhZ2VHcm91cFJl
ZilwYWdlR3JvdXBSZWY7CistIChpZClpbml0V2l0aEZyYW1lOihDR1JlY3QpZnJhbWUgY29udGV4
dFJlZjooV0tDb250ZXh0UmVmKWNvbnRleHRSZWYgcGFnZUdyb3VwUmVmOihXS1BhZ2VHcm91cFJl
ZilwYWdlR3JvdXBSZWYgcmVsYXRlZFRvUGFnZTooV0tQYWdlUmVmKXJlbGF0ZWRQYWdlOworI2Vs
c2UKKy0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBjb250ZXh0UmVmOihXS0NvbnRl
eHRSZWYpY29udGV4dFJlZiBwYWdlR3JvdXBSZWY6KFdLUGFnZUdyb3VwUmVmKXBhZ2VHcm91cFJl
ZjsKKy0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBjb250ZXh0UmVmOihXS0NvbnRl
eHRSZWYpY29udGV4dFJlZiBwYWdlR3JvdXBSZWY6KFdLUGFnZUdyb3VwUmVmKXBhZ2VHcm91cFJl
ZiByZWxhdGVkVG9QYWdlOihXS1BhZ2VSZWYpcmVsYXRlZFBhZ2U7CisjZW5kaWYKKworI2lmICFU
QVJHRVRfT1NfSVBIT05FCisKK0Bwcm9wZXJ0eSBXS0NvbnRlbnRBbmNob3IgY29udGVudEFuY2hv
cjsKKworLSAoTlNQcmludE9wZXJhdGlvbiAqKXByaW50T3BlcmF0aW9uV2l0aFByaW50SW5mbzoo
TlNQcmludEluZm8gKilwcmludEluZm8gZm9yRnJhbWU6KFdLRnJhbWVSZWYpZnJhbWVSZWY7Cist
IChCT09MKWNhbkNoYW5nZUZyYW1lTGF5b3V0OihXS0ZyYW1lUmVmKWZyYW1lUmVmOworCistICh2
b2lkKXNldEZyYW1lOihOU1JlY3QpcmVjdCBhbmRTY3JvbGxCeTooTlNTaXplKW9mZnNldDsKKwor
Ly8gU3RvcHMgdXBkYXRpbmcgdGhlIHNpemUgb2YgdGhlIHBhZ2UgYXMgdGhlIFdLVmlldyBmcmFt
ZSBzaXplIHVwZGF0ZXMuCisvLyBUaGlzIHNob3VsZCBhbHdheXMgYmUgZm9sbG93ZWQgYnkgZW5h
YmxlRnJhbWVTaXplVXBkYXRlcy4gQ2FsbHMgY2FuIGJlIG5lc3RlZC4KKy0gKHZvaWQpZGlzYWJs
ZUZyYW1lU2l6ZVVwZGF0ZXM7CisvLyBJbW1lZGlhdGVseSB1cGRhdGVzIHRoZSBzaXplIG9mIHRo
ZSBwYWdlIHRvIG1hdGNoIFdLVmlldydzIGZyYW1lIHNpemUKKy8vIGFuZCBhbGxvd3Mgc3Vic2Vx
dWVudCB1cGRhdGVzIGFzIHRoZSBmcmFtZSBzaXplIGlzIHNldC4gQ2FsbHMgY2FuIGJlIG5lc3Rl
ZC4KKy0gKHZvaWQpZW5hYmxlRnJhbWVTaXplVXBkYXRlczsKKy0gKEJPT0wpZnJhbWVTaXplVXBk
YXRlc0Rpc2FibGVkOworCistICh2b2lkKXBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRDdXJyZW50
TW91c2VMb2NhdGlvbjsKKysgKHZvaWQpaGlkZVdvcmREZWZpbml0aW9uV2luZG93OworCitAcHJv
cGVydHkgKHJlYWR3cml0ZSkgQ0dGbG9hdCBtaW5pbXVtTGF5b3V0V2lkdGg7CitAcHJvcGVydHkg
KHJlYWR3cml0ZSkgQ0dGbG9hdCBtaW5pbXVtV2lkdGhGb3JBdXRvTGF5b3V0OworQHByb3BlcnR5
IChyZWFkd3JpdGUpIE5TU2l6ZSBtaW5pbXVtU2l6ZUZvckF1dG9MYXlvdXQ7CitAcHJvcGVydHkg
KHJlYWR3cml0ZSkgQk9PTCBzaG91bGRDbGlwVG9WaXNpYmxlUmVjdDsKK0Bwcm9wZXJ0eSAocmVh
ZHdyaXRlKSBCT09MIHNob3VsZEV4cGFuZFRvVmlld0hlaWdodEZvckF1dG9MYXlvdXQ7CitAcHJv
cGVydHkgKHJlYWRvbmx5LCBnZXR0ZXI9aXNVc2luZ1VJU2lkZUNvbXBvc2l0aW5nKSBCT09MIHVz
aW5nVUlTaWRlQ29tcG9zaXRpbmc7CisKK0Bwcm9wZXJ0eShjb3B5LCBub25hdG9taWMpIE5TQ29s
b3IgKnVuZGVybGF5Q29sb3I7CisKKy0gKE5TVmlldyopZnVsbFNjcmVlblBsYWNlaG9sZGVyVmll
dzsKKy0gKE5TV2luZG93KiljcmVhdGVGdWxsU2NyZWVuV2luZG93OworCistICh2b2lkKWJlZ2lu
RGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlczsKKy0gKHZvaWQpZW5kRGVmZXJyaW5nVmlld0lu
V2luZG93Q2hhbmdlczsKKy0gKHZvaWQpZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlc1N5
bmM7CistIChCT09MKWlzRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlczsKKworLSAoQk9PTCl3
aW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkOworLSAodm9pZClzZXRXaW5kb3dPY2NsdXNp
b25EZXRlY3Rpb25FbmFibGVkOihCT09MKWZsYWc7CisKKy0gKHZvaWQpZm9yY2VBc3luY0RyYXdp
bmdBcmVhU2l6ZVVwZGF0ZTooTlNTaXplKXNpemU7CistICh2b2lkKXdhaXRGb3JBc3luY0RyYXdp
bmdBcmVhU2l6ZVVwZGF0ZTsKKworI2VuZGlmCisKK0BlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV2ViS2l0Mi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV2ViS2l0Mi5oCShyZXZpc2lvbiAxNTk4NzMpCShmcm9t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dlYktpdDIuaDoxNTk4NzMpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dlYktpdDIuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0Mi9XS0Jyb3dz
aW5nQ29udGV4dENvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYktpdDIvV0tCcm93c2luZ0NvbnRl
eHRHcm91cC5oPgorI2ltcG9ydCA8V2ViS2l0Mi9XS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0
ZS5oPgorI2ltcG9ydCA8V2ViS2l0Mi9XS0Jyb3dzaW5nQ29udGV4dFBvbGljeURlbGVnYXRlLmg+
CisjaW1wb3J0IDxXZWJLaXQyL1dLQ29ubmVjdGlvbi5oPgorI2ltcG9ydCA8V2ViS2l0Mi9XS0Zv
dW5kYXRpb24uaD4KKyNpbXBvcnQgPFdlYktpdDIvV0tQcm9jZXNzR3JvdXAuaD4KKyNpbXBvcnQg
PFdlYktpdDIvV0tWaWV3Lmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIuaAkocmV2
aXNpb24gMTU5ODczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93
c2luZ0NvbnRleHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTM2ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLSNpbXBvcnQg
PFdlYktpdDIvV0tCcm93c2luZ0NvbnRleHRHcm91cC5oPgotI2ltcG9ydCA8V2ViS2l0Mi9XS0Zv
dW5kYXRpb24uaD4KLSNpbXBvcnQgPFdlYktpdDIvV0tQcm9jZXNzR3JvdXAuaD4KLQotI2lmIFdL
X0FQSV9FTkFCTEVECi0KLUBjbGFzcyBXS0JhY2tGb3J3YXJkTGlzdDsKLUBjbGFzcyBXS0JhY2tG
b3J3YXJkTGlzdEl0ZW07Ci1AcHJvdG9jb2wgV0tCcm93c2luZ0NvbnRleHRIaXN0b3J5RGVsZWdh
dGU7Ci1AcHJvdG9jb2wgV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGU7Ci1AcHJvdG9jb2wg
V0tCcm93c2luZ0NvbnRleHRQb2xpY3lEZWxlZ2F0ZTsKLQotV0tfQVBJX0NMQVNTCi1AaW50ZXJm
YWNlIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciA6IE5TT2JqZWN0Ci0KLUBwcm9wZXJ0eSAo
cmVhZG9ubHkpIFdLUHJvY2Vzc0dyb3VwICpwcm9jZXNzR3JvdXA7Ci1AcHJvcGVydHkgKHJlYWRv
bmx5KSBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwICpicm93c2luZ0NvbnRleHRHcm91cDsKLQotI3By
YWdtYSBtYXJrIERlbGVnYXRlcwotCi1AcHJvcGVydHkgKGFzc2lnbikgaWQgPFdLQnJvd3NpbmdD
b250ZXh0TG9hZERlbGVnYXRlPiBsb2FkRGVsZWdhdGU7Ci1AcHJvcGVydHkgKGFzc2lnbikgaWQg
PFdLQnJvd3NpbmdDb250ZXh0UG9saWN5RGVsZWdhdGU+IHBvbGljeURlbGVnYXRlOwotQHByb3Bl
cnR5IChhc3NpZ24pIGlkIDxXS0Jyb3dzaW5nQ29udGV4dEhpc3RvcnlEZWxlZ2F0ZT4gaGlzdG9y
eURlbGVnYXRlOwotCi0jcHJhZ21hIG1hcmsgTG9hZGluZwotCi0rICh2b2lkKXJlZ2lzdGVyU2No
ZW1lRm9yQ3VzdG9tUHJvdG9jb2w6KE5TU3RyaW5nICopc2NoZW1lOwotKyAodm9pZCl1bnJlZ2lz
dGVyU2NoZW1lRm9yQ3VzdG9tUHJvdG9jb2w6KE5TU3RyaW5nICopc2NoZW1lOwotCi0vKiBMb2Fk
IGEgcmVxdWVzdC4gVGhpcyBpcyBvbmx5IHZhbGlkIGZvciByZXF1ZXN0cyBvZiBub24tZmlsZTog
VVJMcy4gUGFzc2luZyBhCi0gICBmaWxlOiBVUkwgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24uICov
Ci0tICh2b2lkKWxvYWRSZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1ZXN0OwotLSAodm9pZCls
b2FkUmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdCB1c2VyRGF0YTooaWQpdXNlckRhdGE7
Ci0KLS8qIExvYWQgYSBmaWxlOiBVUkwuIE9wZW5zIHRoZSBzYW5kYm94IG9ubHkgZm9yIGZpbGVz
IHdpdGhpbiBhbGxvd2VkRGlyZWN0b3J5LgotICAgIC0gUGFzc2luZyBhIG5vbi1maWxlOiBVUkwg
dG8gZWl0aGVyIHBhcmFtZXRlciB3aWxsIHlpZWxkIGFuIGV4Y2VwdGlvbi4KLSAgICAtIFBhc3Np
bmcgbmlsIGFzIHRoZSBhbGxvd2VkRGlyZWN0b3J5IHdpbGwgb3BlbiB0aGUgZW50aXJlIGZpbGUt
c3lzdGVtIGZvcgotICAgICAgcmVhZGluZy4KLSovCi0tICh2b2lkKWxvYWRGaWxlVVJMOihOU1VS
TCAqKVVSTCByZXN0cmljdFRvRmlsZXNXaXRoaW46KE5TVVJMICopYWxsb3dlZERpcmVjdG9yeTsK
LS0gKHZvaWQpbG9hZEZpbGVVUkw6KE5TVVJMICopVVJMIHJlc3RyaWN0VG9GaWxlc1dpdGhpbjoo
TlNVUkwgKilhbGxvd2VkRGlyZWN0b3J5IHVzZXJEYXRhOihpZCl1c2VyRGF0YTsKLQotLyogTG9h
ZCBhIHBhZ2UgdXNpbmcgdGhlIHBhc3NlZCBpbiBzdHJpbmcgYXMgaXRzIGNvbnRlbnRzLiAqLwot
LSAodm9pZClsb2FkSFRNTFN0cmluZzooTlNTdHJpbmcgKilIVE1MU3RyaW5nIGJhc2VVUkw6KE5T
VVJMICopYmFzZVVSTDsKLS0gKHZvaWQpbG9hZEhUTUxTdHJpbmc6KE5TU3RyaW5nICopSFRNTFN0
cmluZyBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwgdXNlckRhdGE6KGlkKXVzZXJEYXRhOwotCi0v
KiBMb2FkIGEgcGFnZSB1c2luZyB0aGUgcGFzc2VkIGluIGRhdGEgYXMgaXRzIGNvbnRlbnRzLiAq
LwotLSAodm9pZClsb2FkRGF0YTooTlNEYXRhICopZGF0YSBNSU1FVHlwZTooTlNTdHJpbmcgKilN
SU1FVHlwZSB0ZXh0RW5jb2RpbmdOYW1lOihOU1N0cmluZyAqKWVuY29kaW5nTmFtZSBiYXNlVVJM
OihOU1VSTCAqKWJhc2VVUkw7Ci0tICh2b2lkKWxvYWREYXRhOihOU0RhdGEgKilkYXRhIE1JTUVU
eXBlOihOU1N0cmluZyAqKU1JTUVUeXBlIHRleHRFbmNvZGluZ05hbWU6KE5TU3RyaW5nICopZW5j
b2RpbmdOYW1lIGJhc2VVUkw6KE5TVVJMICopYmFzZVVSTCB1c2VyRGF0YTooaWQpdXNlckRhdGE7
Ci0KLS8qIFN0b3BzIHRoZSBsb2FkIGFzc29jaWF0ZWQgd2l0aCB0aGUgYWN0aXZlIFVSTC4gKi8K
LS0gKHZvaWQpc3RvcExvYWRpbmc7Ci0KLS8qIFJlbG9hZCB0aGUgY3VycmVudGx5IGFjdGl2ZSBV
UkwuICovCi0tICh2b2lkKXJlbG9hZDsKLQotLyogUmVsb2FkIHRoZSBjdXJyZW50bHkgYWN0aXZl
IFVSTCwgYnlwYXNzaW5nIGNhY2hlcy4gKi8KLS0gKHZvaWQpcmVsb2FkRnJvbU9yaWdpbjsKLQot
Ci0jcHJhZ21hIG1hcmsgQmFjay9Gb3J3YXJkCi0KLS8qIEdvIHRvIHRoZSBuZXh0IHBhZ2UgaW4g
dGhlIGJhY2svZm9yd2FyZCBsaXN0LiAqLwotLSAodm9pZClnb0ZvcndhcmQ7Ci0KLS8qIFdoZXRo
ZXIgdGhlcmUgaXMgYSBuZXh0IHBhZ2UgaW4gdGhlIGJhY2svZm9yd2FyZCBsaXN0LiAqLwotQHBy
b3BlcnR5KHJlYWRvbmx5KSBCT09MIGNhbkdvRm9yd2FyZDsKLQotLyogR28gdG8gdGhlIHByZXZp
b3VzIHBhZ2UgaW4gdGhlIGJhY2svZm9yd2FyZCBsaXN0LiAqLwotLSAodm9pZClnb0JhY2s7Ci0K
LS8qIFdoZXRoZXIgdGhlcmUgaXMgYSBwcmV2aW91cyBwYWdlIGluIHRoZSBiYWNrL2ZvcndhcmQg
bGlzdC4gKi8KLUBwcm9wZXJ0eShyZWFkb25seSkgQk9PTCBjYW5Hb0JhY2s7Ci0KLS0gKHZvaWQp
Z29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW06KFdLQmFja0ZvcndhcmRMaXN0SXRlbSAqKWl0ZW07Ci0K
LUBwcm9wZXJ0eShyZWFkb25seSkgV0tCYWNrRm9yd2FyZExpc3QgKmJhY2tGb3J3YXJkTGlzdDsK
LQotI3ByYWdtYSBtYXJrIEFjdGl2ZSBMb2FkIEludHJvc3BlY3Rpb24KLQotLyogVVJMIGZvciB0
aGUgYWN0aXZlIGxvYWQuIFRoaXMgaXMgdGhlIFVSTCB0aGF0IHNob3VsZCBiZSBzaG93biBpbiB1
c2VyIGludGVyZmFjZS4gKi8KLUBwcm9wZXJ0eShyZWFkb25seSkgTlNVUkwgKmFjdGl2ZVVSTDsK
LQotLyogVVJMIGZvciBhIHJlcXVlc3QgdGhhdCBoYXMgYmVlbiBzZW50LCBidXQgbm8gcmVzcG9u
c2UgaGFzIGJlZW4gcmVjZWl2ZWQgeWV0LiAqLwotQHByb3BlcnR5KHJlYWRvbmx5KSBOU1VSTCAq
cHJvdmlzaW9uYWxVUkw7Ci0KLS8qIFVSTCBmb3IgYSByZXF1ZXN0IHRoYXQgaGFzIGJlZW4gcmVj
ZWl2ZWQsIGFuZCBpcyBub3cgYmVpbmcgdXNlZC4gKi8KLUBwcm9wZXJ0eShyZWFkb25seSkgTlNV
UkwgKmNvbW1pdHRlZFVSTDsKLQotQHByb3BlcnR5KHJlYWRvbmx5KSBOU1VSTCAqdW5yZWFjaGFi
bGVVUkw7Ci0KLUBwcm9wZXJ0eShyZWFkb25seSkgZG91YmxlIGVzdGltYXRlZFByb2dyZXNzOwot
Ci0jcHJhZ21hIG1hcmsgQWN0aXZlIERvY3VtZW50IEludHJvc3BlY3Rpb24KLQotLyogVGl0bGUg
b2YgdGhlIGRvY3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgYWN0aXZlIGxvYWQuICovCi1AcHJv
cGVydHkocmVhZG9ubHkpIE5TU3RyaW5nICp0aXRsZTsKLQotCi0jcHJhZ21hIG1hcmsgWm9vbQot
Ci0vKiBTZXRzIHRoZSB0ZXh0IHpvb20gZm9yIHRoZSBhY3RpdmUgVVJMLiAqLwotQHByb3BlcnR5
IENHRmxvYXQgdGV4dFpvb207Ci0KLS8qIFNldHMgdGhlIHRleHQgem9vbSBmb3IgdGhlIGFjdGl2
ZSBVUkwuICovCi1AcHJvcGVydHkgQ0dGbG9hdCBwYWdlWm9vbTsKLQotQGVuZAotCi0jZW5kaWYg
Ly8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIubW0JKHJl
dmlzaW9uIDE1OTg3MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJv
d3NpbmdDb250ZXh0Q29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw2OTIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV0tCcm93c2luZ0Nv
bnRleHRDb250cm9sbGVySW50ZXJuYWwuaCIKLQotI2lmIFdLX0FQSV9FTkFCTEVECi0KLSNpbXBv
cnQgIk9iakNPYmplY3RHcmFwaC5oIgotI2ltcG9ydCAiV0tCYWNrRm9yd2FyZExpc3RJbnRlcm5h
bC5oIgotI2ltcG9ydCAiV0tCYWNrRm9yd2FyZExpc3RJdGVtSW50ZXJuYWwuaCIKLSNpbXBvcnQg
IldLRXJyb3JDRi5oIgotI2ltcG9ydCAiV0tGcmFtZS5oIgotI2ltcG9ydCAiV0tGcmFtZVBvbGlj
eUxpc3RlbmVyLmgiCi0jaW1wb3J0ICJXS05TQXJyYXkuaCIKLSNpbXBvcnQgIldLTlNVUkxFeHRy
YXMuaCIKLSNpbXBvcnQgIldLUGFnZVByaXZhdGUuaCIKLSNpbXBvcnQgIldLUmV0YWluUHRyLmgi
Ci0jaW1wb3J0ICJXS1N0cmluZ0NGLmgiCi0jaW1wb3J0ICJXS1VSTENGLmgiCi0jaW1wb3J0ICJX
S1VSTFJlcXVlc3QuaCIKLSNpbXBvcnQgIldLVVJMUmVxdWVzdE5TLmgiCi0jaW1wb3J0ICJXS1VS
TFJlc3BvbnNlLmgiCi0jaW1wb3J0ICJXS1VSTFJlc3BvbnNlTlMuaCIKLSNpbXBvcnQgIldlYkNv
bnRleHQuaCIKLSNpbXBvcnQgIldlYkRhdGEuaCIKLSNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgot
I2ltcG9ydCA8d3RmL09iamNSdW50aW1lRXh0cmFzLmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRy
Lmg+Ci0KLSNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5oIgotI2ltcG9y
dCAiV0tCcm93c2luZ0NvbnRleHRIYW5kbGVJbnRlcm5hbC5oIgotI2ltcG9ydCAiV0tCcm93c2lu
Z0NvbnRleHRMb2FkRGVsZWdhdGUuaCIKLSNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0UG9saWN5
RGVsZWdhdGUuaCIKLSNpbXBvcnQgIldLUHJvY2Vzc0dyb3VwSW50ZXJuYWwuaCIKLQotdXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKLQotY2xhc3MgUGFnZUxvYWRTdGF0ZU9ic2VydmVyIDogcHVibGlj
IFBhZ2VMb2FkU3RhdGU6Ok9ic2VydmVyIHsKLXB1YmxpYzoKLSAgICBQYWdlTG9hZFN0YXRlT2Jz
ZXJ2ZXIoV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpjb250cm9sbGVyKQotICAgICAgICA6
IG1fY29udHJvbGxlcihjb250cm9sbGVyKQotICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
dmlydHVhbCB2b2lkIHdpbGxDaGFuZ2VUaXRsZSgpIE9WRVJSSURFCi0gICAgewotICAgICAgICBb
bV9jb250cm9sbGVyIHdpbGxDaGFuZ2VWYWx1ZUZvcktleTpAInRpdGxlIl07Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVRpdGxlKCkgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAg
IFttX2NvbnRyb2xsZXIgZGlkQ2hhbmdlVmFsdWVGb3JLZXk6QCJ0aXRsZSJdOwotICAgIH0KLQot
ICAgIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqbV9jb250cm9sbGVyOwotfTsKLQotc3Rh
dGljIGlubGluZSBOU1N0cmluZyAqYXV0b3JlbGVhc2VkKFdLU3RyaW5nUmVmIHN0cmluZykKLXsK
LSAgICByZXR1cm4gc3RyaW5nID8gQ0ZCcmlkZ2luZ1JlbGVhc2UoV0tTdHJpbmdDb3B5Q0ZTdHJp
bmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYWRvcHRXSyhzdHJpbmcpLmdldCgpKSkgOiBuaWw7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgTlNVUkwgKmF1dG9yZWxlYXNlZChXS1VSTFJlZiB1cmwpCi17Ci0g
ICAgcmV0dXJuIHVybCA/IENGQnJpZGdpbmdSZWxlYXNlKFdLVVJMQ29weUNGVVJMKGtDRkFsbG9j
YXRvckRlZmF1bHQsIGFkb3B0V0sodXJsKS5nZXQoKSkpIDogbmlsOwotfQotCi1OU1N0cmluZyAq
IGNvbnN0IFdLQWN0aW9uSXNNYWluRnJhbWVLZXkgPSBAIldLQWN0aW9uSXNNYWluRnJhbWVLZXki
OwotTlNTdHJpbmcgKiBjb25zdCBXS0FjdGlvbk5hdmlnYXRpb25UeXBlS2V5ID0gQCJXS0FjdGlv
bk5hdmlnYXRpb25UeXBlS2V5IjsKLU5TU3RyaW5nICogY29uc3QgV0tBY3Rpb25Nb3VzZUJ1dHRv
bktleSA9IEAiV0tBY3Rpb25Nb3VzZUJ1dHRvbktleSI7Ci1OU1N0cmluZyAqIGNvbnN0IFdLQWN0
aW9uTW9kaWZpZXJGbGFnc0tleSA9IEAiV0tBY3Rpb25Nb2RpZmllckZsYWdzS2V5IjsKLU5TU3Ry
aW5nICogY29uc3QgV0tBY3Rpb25VUkxSZXF1ZXN0S2V5ID0gQCJXS0FjdGlvblVSTFJlcXVlc3RL
ZXkiOwotTlNTdHJpbmcgKiBjb25zdCBXS0FjdGlvblVSTFJlc3BvbnNlS2V5ID0gQCJXS0FjdGlv
blVSTFJlc3BvbnNlS2V5IjsKLU5TU3RyaW5nICogY29uc3QgV0tBY3Rpb25GcmFtZU5hbWVLZXkg
PSBAIldLQWN0aW9uRnJhbWVOYW1lS2V5IjsKLU5TU3RyaW5nICogY29uc3QgV0tBY3Rpb25Pcmln
aW5hdGluZ0ZyYW1lVVJMS2V5ID0gQCJXS0FjdGlvbk9yaWdpbmF0aW5nRnJhbWVVUkxLZXkiOwot
TlNTdHJpbmcgKiBjb25zdCBXS0FjdGlvbkNhblNob3dNSU1FVHlwZUtleSA9IEAiV0tBY3Rpb25D
YW5TaG93TUlNRVR5cGVLZXkiOwotCi1AaW1wbGVtZW50YXRpb24gV0tCcm93c2luZ0NvbnRleHRD
b250cm9sbGVyIHsKLSAgICAvLyBVbmRlcmx5aW5nIFdLUGFnZVJlZi4KLSAgICBXS1JldGFpblB0
cjxXS1BhZ2VSZWY+IF9wYWdlUmVmOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFBhZ2VMb2FkU3Rh
dGVPYnNlcnZlcj4gX3BhZ2VMb2FkU3RhdGVPYnNlcnZlcjsKLX0KLQotLSAodm9pZClkZWFsbG9j
Ci17Ci0gICAgdG9JbXBsKF9wYWdlUmVmLmdldCgpKS0+cGFnZUxvYWRTdGF0ZSgpLnJlbW92ZU9i
c2VydmVyKCpfcGFnZUxvYWRTdGF0ZU9ic2VydmVyKTsKLSAgICBXS1BhZ2VTZXRQYWdlTG9hZGVy
Q2xpZW50KF9wYWdlUmVmLmdldCgpLCBudWxscHRyKTsKLSAgICBXS1BhZ2VTZXRQYWdlUG9saWN5
Q2xpZW50KF9wYWdlUmVmLmdldCgpLCBudWxscHRyKTsKLQotICAgIFtzdXBlciBkZWFsbG9jXTsK
LX0KLQotLSAoV0tQcm9jZXNzR3JvdXAgKilwcm9jZXNzR3JvdXAKLXsKLSAgICBXZWJDb250ZXh0
KiBjb250ZXh0ID0gdG9JbXBsKF9wYWdlUmVmLmdldCgpKS0+cHJvY2VzcygpLT5jb250ZXh0KCk7
Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiB3cmFw
cGVyKCpjb250ZXh0KTsKLX0KLQotLSAoV0tCcm93c2luZ0NvbnRleHRHcm91cCAqKWJyb3dzaW5n
Q29udGV4dEdyb3VwCi17Ci0gICAgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXAgPSB0b0ltcGwoX3Bh
Z2VSZWYuZ2V0KCkpLT5wYWdlR3JvdXAoKTsKLSAgICBpZiAoIXBhZ2VHcm91cCkKLSAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICByZXR1cm4gd3JhcHBlcigqcGFnZUdyb3VwKTsKLX0KLQotLSAoV0tQ
YWdlUmVmKV9wYWdlUmVmCi17Ci0gICAgcmV0dXJuIF9wYWdlUmVmLmdldCgpOwotfQotCi0jcHJh
Z21hIG1hcmsgTG9hZGluZwotCi0rICh2b2lkKXJlZ2lzdGVyU2NoZW1lRm9yQ3VzdG9tUHJvdG9j
b2w6KE5TU3RyaW5nICopc2NoZW1lCi17Ci0gICAgaWYgKCFzY2hlbWUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIE5TU3RyaW5nICpsb3dlcmNhc2VTY2hlbWUgPSBbc2NoZW1lIGxvd2VyY2FzZVN0
cmluZ107Ci0gICAgW1tXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgY3VzdG9tU2NoZW1lc10g
YWRkT2JqZWN0Omxvd2VyY2FzZVNjaGVtZV07Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBk
ZWZhdWx0Q2VudGVyXSBwb3N0Tm90aWZpY2F0aW9uTmFtZTpTY2hlbWVGb3JDdXN0b21Qcm90b2Nv
bFJlZ2lzdGVyZWROb3RpZmljYXRpb25OYW1lIG9iamVjdDpsb3dlcmNhc2VTY2hlbWVdOwotfQot
Ci0rICh2b2lkKXVucmVnaXN0ZXJTY2hlbWVGb3JDdXN0b21Qcm90b2NvbDooTlNTdHJpbmcgKilz
Y2hlbWUKLXsKLSAgICBpZiAoIXNjaGVtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNTdHJp
bmcgKmxvd2VyY2FzZVNjaGVtZSA9IFtzY2hlbWUgbG93ZXJjYXNlU3RyaW5nXTsKLSAgICBbW1dL
QnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciBjdXN0b21TY2hlbWVzXSByZW1vdmVPYmplY3Q6bG93
ZXJjYXNlU2NoZW1lXTsKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJd
IHBvc3ROb3RpZmljYXRpb25OYW1lOlNjaGVtZUZvckN1c3RvbVByb3RvY29sVW5yZWdpc3RlcmVk
Tm90aWZpY2F0aW9uTmFtZSBvYmplY3Q6bG93ZXJjYXNlU2NoZW1lXTsKLX0KLQotLSAodm9pZCls
b2FkUmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdAotewotICAgIFtzZWxmIGxvYWRSZXF1
ZXN0OnJlcXVlc3QgdXNlckRhdGE6bmlsXTsKLX0KLQotLSAodm9pZClsb2FkUmVxdWVzdDooTlNV
UkxSZXF1ZXN0ICopcmVxdWVzdCB1c2VyRGF0YTooaWQpdXNlckRhdGEKLXsKLSAgICBXS1JldGFp
blB0cjxXS1VSTFJlcXVlc3RSZWY+IHdrUmVxdWVzdCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q3Jl
YXRlV2l0aE5TVVJMUmVxdWVzdChyZXF1ZXN0KSk7Ci0KLSAgICBSZWZQdHI8T2JqQ09iamVjdEdy
YXBoPiB3a1VzZXJEYXRhOwotICAgIGlmICh1c2VyRGF0YSkKLSAgICAgICAgd2tVc2VyRGF0YSA9
IE9iakNPYmplY3RHcmFwaDo6Y3JlYXRlKHVzZXJEYXRhKTsKLQotICAgIFdLUGFnZUxvYWRVUkxS
ZXF1ZXN0V2l0aFVzZXJEYXRhKF9wYWdlUmVmLmdldCgpLCB3a1JlcXVlc3QuZ2V0KCksIChXS1R5
cGVSZWYpd2tVc2VyRGF0YS5nZXQoKSk7Ci19Ci0KLS0gKHZvaWQpbG9hZEZpbGVVUkw6KE5TVVJM
ICopVVJMIHJlc3RyaWN0VG9GaWxlc1dpdGhpbjooTlNVUkwgKilhbGxvd2VkRGlyZWN0b3J5Ci17
Ci0gICAgW3NlbGYgbG9hZEZpbGVVUkw6VVJMIHJlc3RyaWN0VG9GaWxlc1dpdGhpbjphbGxvd2Vk
RGlyZWN0b3J5IHVzZXJEYXRhOm5pbF07Ci19Ci0KLS0gKHZvaWQpbG9hZEZpbGVVUkw6KE5TVVJM
ICopVVJMIHJlc3RyaWN0VG9GaWxlc1dpdGhpbjooTlNVUkwgKilhbGxvd2VkRGlyZWN0b3J5IHVz
ZXJEYXRhOihpZCl1c2VyRGF0YQotewotICAgIGlmICghW1VSTCBpc0ZpbGVVUkxdIHx8IChhbGxv
d2VkRGlyZWN0b3J5ICYmICFbYWxsb3dlZERpcmVjdG9yeSBpc0ZpbGVVUkxdKSkKLSAgICAgICAg
W05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIkF0
dGVtcHRlZCB0byBsb2FkIGEgbm9uLWZpbGUgVVJMIl07Ci0KLSAgICBXS1JldGFpblB0cjxXS1VS
TFJlZj4gd2tVUkwgPSBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aENGVVJMKChDRlVSTFJlZilVUkwp
KTsKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tBbGxvd2VkRGlyZWN0b3J5ID0gYWRvcHRX
SyhXS1VSTENyZWF0ZVdpdGhDRlVSTCgoQ0ZVUkxSZWYpYWxsb3dlZERpcmVjdG9yeSkpOwotICAg
IAotICAgIFJlZlB0cjxPYmpDT2JqZWN0R3JhcGg+IHdrVXNlckRhdGE7Ci0gICAgaWYgKHVzZXJE
YXRhKQotICAgICAgICB3a1VzZXJEYXRhID0gT2JqQ09iamVjdEdyYXBoOjpjcmVhdGUodXNlckRh
dGEpOwotCi0gICAgV0tQYWdlTG9hZEZpbGVXaXRoVXNlckRhdGEoX3BhZ2VSZWYuZ2V0KCksIHdr
VVJMLmdldCgpLCB3a0FsbG93ZWREaXJlY3RvcnkuZ2V0KCksIChXS1R5cGVSZWYpd2tVc2VyRGF0
YS5nZXQoKSk7Ci19Ci0KLS0gKHZvaWQpbG9hZEhUTUxTdHJpbmc6KE5TU3RyaW5nICopSFRNTFN0
cmluZyBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwKLXsKLSAgICBbc2VsZiBsb2FkSFRNTFN0cmlu
ZzpIVE1MU3RyaW5nIGJhc2VVUkw6YmFzZVVSTCB1c2VyRGF0YTpuaWxdOwotfQotCi0tICh2b2lk
KWxvYWRIVE1MU3RyaW5nOihOU1N0cmluZyAqKUhUTUxTdHJpbmcgYmFzZVVSTDooTlNVUkwgKili
YXNlVVJMIHVzZXJEYXRhOihpZCl1c2VyRGF0YQotewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB3a0hUTUxTdHJpbmc7Ci0gICAgaWYgKEhUTUxTdHJpbmcpCi0gICAgICAgIHdrSFRNTFN0
cmluZyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKUhU
TUxTdHJpbmcpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a0Jhc2VVUkw7Ci0gICAg
aWYgKGJhc2VVUkwpCi0gICAgICAgIHdrQmFzZVVSTCA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRo
Q0ZVUkwoKENGVVJMUmVmKWJhc2VVUkwpKTsKLQotICAgIFJlZlB0cjxPYmpDT2JqZWN0R3JhcGg+
IHdrVXNlckRhdGE7Ci0gICAgaWYgKHVzZXJEYXRhKQotICAgICAgICB3a1VzZXJEYXRhID0gT2Jq
Q09iamVjdEdyYXBoOjpjcmVhdGUodXNlckRhdGEpOwotCi0gICAgV0tQYWdlTG9hZEhUTUxTdHJp
bmdXaXRoVXNlckRhdGEoX3BhZ2VSZWYuZ2V0KCksIHdrSFRNTFN0cmluZy5nZXQoKSwgd2tCYXNl
VVJMLmdldCgpLCAoV0tUeXBlUmVmKXdrVXNlckRhdGEuZ2V0KCkpOwotfQotCi0tICh2b2lkKWxv
YWREYXRhOihOU0RhdGEgKilkYXRhIE1JTUVUeXBlOihOU1N0cmluZyAqKU1JTUVUeXBlIHRleHRF
bmNvZGluZ05hbWU6KE5TU3RyaW5nICopZW5jb2RpbmdOYW1lIGJhc2VVUkw6KE5TVVJMICopYmFz
ZVVSTAotewotICAgIFtzZWxmIGxvYWREYXRhOmRhdGEgTUlNRVR5cGU6TUlNRVR5cGUgdGV4dEVu
Y29kaW5nTmFtZTplbmNvZGluZ05hbWUgYmFzZVVSTDpiYXNlVVJMIHVzZXJEYXRhOm5pbF07Ci19
Ci0KLXN0YXRpYyB2b2lkIHJlbGVhc2VOU0RhdGEodW5zaWduZWQgY2hhciosIGNvbnN0IHZvaWQq
IGRhdGEpCi17Ci0gICAgWyhOU0RhdGEgKilkYXRhIHJlbGVhc2VdOwotfQotCi0tICh2b2lkKWxv
YWREYXRhOihOU0RhdGEgKilkYXRhIE1JTUVUeXBlOihOU1N0cmluZyAqKU1JTUVUeXBlIHRleHRF
bmNvZGluZ05hbWU6KE5TU3RyaW5nICopZW5jb2RpbmdOYW1lIGJhc2VVUkw6KE5TVVJMICopYmFz
ZVVSTCB1c2VyRGF0YTooaWQpdXNlckRhdGEKLXsKLSAgICBSZWZQdHI8V2ViRGF0YT4gd2tEYXRh
OwotICAgIGlmIChkYXRhKSB7Ci0gICAgICAgIFtkYXRhIHJldGFpbl07Ci0gICAgICAgIHdrRGF0
YSA9IFdlYkRhdGE6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKChjb25zdCB1bnNpZ25lZCBjaGFyKilb
ZGF0YSBieXRlc10sIFtkYXRhIGxlbmd0aF0sIHJlbGVhc2VOU0RhdGEsIGRhdGEpOwotICAgIH0K
LQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a01JTUVUeXBlOwotICAgIGlmIChNSU1F
VHlwZSkKLSAgICAgICAgd2tNSU1FVHlwZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoQ0ZT
dHJpbmcoKENGU3RyaW5nUmVmKU1JTUVUeXBlKSk7Ci0KLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gd2tFbmNvZGluZ05hbWU7Ci0gICAgaWYgKGVuY29kaW5nTmFtZSkKLSAgICAgICAgd2tF
bmNvZGluZ05hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmlu
Z1JlZillbmNvZGluZ05hbWUpKTsKLQotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a0Jhc2VV
Ukw7Ci0gICAgaWYgKGJhc2VVUkwpCi0gICAgICAgIHdrQmFzZVVSTCA9IGFkb3B0V0soV0tVUkxD
cmVhdGVXaXRoQ0ZVUkwoKENGVVJMUmVmKWJhc2VVUkwpKTsKLQotICAgIFJlZlB0cjxPYmpDT2Jq
ZWN0R3JhcGg+IHdrVXNlckRhdGE7Ci0gICAgaWYgKHVzZXJEYXRhKQotICAgICAgICB3a1VzZXJE
YXRhID0gT2JqQ09iamVjdEdyYXBoOjpjcmVhdGUodXNlckRhdGEpOwotCi0gICAgV0tQYWdlTG9h
ZERhdGFXaXRoVXNlckRhdGEoX3BhZ2VSZWYuZ2V0KCksIHRvQVBJKHdrRGF0YS5nZXQoKSksIHdr
TUlNRVR5cGUuZ2V0KCksIHdrRW5jb2RpbmdOYW1lLmdldCgpLCB3a0Jhc2VVUkwuZ2V0KCksIChX
S1R5cGVSZWYpd2tVc2VyRGF0YS5nZXQoKSk7Ci19Ci0KLS0gKHZvaWQpc3RvcExvYWRpbmcKLXsK
LSAgICBXS1BhZ2VTdG9wTG9hZGluZyhfcGFnZVJlZi5nZXQoKSk7Ci19Ci0KLS0gKHZvaWQpcmVs
b2FkCi17Ci0gICAgV0tQYWdlUmVsb2FkKF9wYWdlUmVmLmdldCgpKTsKLX0KLQotLSAodm9pZCly
ZWxvYWRGcm9tT3JpZ2luCi17Ci0gICAgV0tQYWdlUmVsb2FkRnJvbU9yaWdpbihfcGFnZVJlZi5n
ZXQoKSk7Ci19Ci0KLSNwcmFnbWEgbWFyayBCYWNrL0ZvcndhcmQKLQotLSAodm9pZClnb0Zvcndh
cmQKLXsKLSAgICBXS1BhZ2VHb0ZvcndhcmQoX3BhZ2VSZWYuZ2V0KCkpOwotfQotCi0tIChCT09M
KWNhbkdvRm9yd2FyZAotewotICAgIHJldHVybiBXS1BhZ2VDYW5Hb0ZvcndhcmQoX3BhZ2VSZWYu
Z2V0KCkpOwotfQotCi0tICh2b2lkKWdvQmFjawotewotICAgIFdLUGFnZUdvQmFjayhfcGFnZVJl
Zi5nZXQoKSk7Ci19Ci0KLS0gKEJPT0wpY2FuR29CYWNrCi17Ci0gICAgcmV0dXJuIFdLUGFnZUNh
bkdvQmFjayhfcGFnZVJlZi5nZXQoKSk7Ci19Ci0KLS0gKHZvaWQpZ29Ub0JhY2tGb3J3YXJkTGlz
dEl0ZW06KFdLQmFja0ZvcndhcmRMaXN0SXRlbSAqKWl0ZW0KLXsKLSAgICB0b0ltcGwoX3BhZ2VS
ZWYuZ2V0KCkpLT5nb1RvQmFja0ZvcndhcmRJdGVtKCZpdGVtLl9pdGVtKTsKLX0KLQotLSAoV0tC
YWNrRm9yd2FyZExpc3QgKiliYWNrRm9yd2FyZExpc3QKLXsKLSAgICBXZWJCYWNrRm9yd2FyZExp
c3QqIGxpc3QgPSB0b0ltcGwoX3BhZ2VSZWYuZ2V0KCkpLT5iYWNrRm9yd2FyZExpc3QoKTsKLSAg
ICBpZiAoIWxpc3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gd3JhcHBlcigq
bGlzdCk7Ci19Ci0KLSNwcmFnbWEgbWFyayBBY3RpdmUgTG9hZCBJbnRyb3NwZWN0aW9uCi0KLS0g
KE5TVVJMICopYWN0aXZlVVJMCi17Ci0gICAgcmV0dXJuIGF1dG9yZWxlYXNlZChXS1BhZ2VDb3B5
QWN0aXZlVVJMKF9wYWdlUmVmLmdldCgpKSk7Ci19Ci0KLS0gKE5TVVJMICopcHJvdmlzaW9uYWxV
UkwKLXsKLSAgICByZXR1cm4gYXV0b3JlbGVhc2VkKFdLUGFnZUNvcHlQcm92aXNpb25hbFVSTChf
cGFnZVJlZi5nZXQoKSkpOwotfQotCi0tIChOU1VSTCAqKWNvbW1pdHRlZFVSTAotewotICAgIHJl
dHVybiBhdXRvcmVsZWFzZWQoV0tQYWdlQ29weUNvbW1pdHRlZFVSTChfcGFnZVJlZi5nZXQoKSkp
OwotfQotCi0tIChOU1VSTCAqKXVucmVhY2hhYmxlVVJMCi17Ci0gICAgcmV0dXJuIFtOU1VSTCBf
d2ViX1VSTFdpdGhXVEZTdHJpbmc6dG9JbXBsKF9wYWdlUmVmLmdldCgpKS0+cGFnZUxvYWRTdGF0
ZSgpLnVucmVhY2hhYmxlVVJMKCkgcmVsYXRpdmVUb1VSTDpuaWxdOwotfQotCi0tIChkb3VibGUp
ZXN0aW1hdGVkUHJvZ3Jlc3MKLXsKLSAgICByZXR1cm4gdG9JbXBsKF9wYWdlUmVmLmdldCgpKS0+
ZXN0aW1hdGVkUHJvZ3Jlc3MoKTsKLX0KLQotI3ByYWdtYSBtYXJrIEFjdGl2ZSBEb2N1bWVudCBJ
bnRyb3NwZWN0aW9uCi0KLS0gKE5TU3RyaW5nICopdGl0bGUKLXsKLSAgICByZXR1cm4gYXV0b3Jl
bGVhc2VkKFdLUGFnZUNvcHlUaXRsZShfcGFnZVJlZi5nZXQoKSkpOwotfQotCi0jcHJhZ21hIG1h
cmsgWm9vbQotCi0tIChDR0Zsb2F0KXRleHRab29tCi17Ci0gICAgcmV0dXJuIFdLUGFnZUdldFRl
eHRab29tRmFjdG9yKF9wYWdlUmVmLmdldCgpKTsKLX0KLQotLSAodm9pZClzZXRUZXh0Wm9vbToo
Q0dGbG9hdCl0ZXh0Wm9vbQotewotICAgIHJldHVybiBXS1BhZ2VTZXRUZXh0Wm9vbUZhY3Rvcihf
cGFnZVJlZi5nZXQoKSwgdGV4dFpvb20pOwotfQotCi0tIChDR0Zsb2F0KXBhZ2Vab29tCi17Ci0g
ICAgcmV0dXJuIFdLUGFnZUdldFBhZ2Vab29tRmFjdG9yKF9wYWdlUmVmLmdldCgpKTsKLX0KLQot
LSAodm9pZClzZXRQYWdlWm9vbTooQ0dGbG9hdClwYWdlWm9vbQotewotICAgIHJldHVybiBXS1Bh
Z2VTZXRQYWdlWm9vbUZhY3RvcihfcGFnZVJlZi5nZXQoKSwgcGFnZVpvb20pOwotfQotCi1zdGF0
aWMgdm9pZCBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBX
S0ZyYW1lUmVmIGZyYW1lLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCi17Ci0gICAgaWYgKCFXS0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmJyb3dzaW5nQ29udGV4dCA9
IChXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKiljbGllbnRJbmZvOwotICAgIGlmIChbYnJv
d3NpbmdDb250ZXh0LmxvYWREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGJy
b3dzaW5nQ29udGV4dENvbnRyb2xsZXJEaWRTdGFydFByb3Zpc2lvbmFsTG9hZDopXSkKLSAgICAg
ICAgW2Jyb3dzaW5nQ29udGV4dC5sb2FkRGVsZWdhdGUgYnJvd3NpbmdDb250ZXh0Q29udHJvbGxl
ckRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkOmJyb3dzaW5nQ29udGV4dF07Ci19Ci0KLXN0YXRpYyB2
b2lkIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdL
UGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgaWYgKCFXS0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmJy
b3dzaW5nQ29udGV4dCA9IChXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKiljbGllbnRJbmZv
OwotICAgIGlmIChbYnJvd3NpbmdDb250ZXh0LmxvYWREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJEaWRSZWNlaXZlU2VydmVyUmVk
aXJlY3RGb3JQcm92aXNpb25hbExvYWQ6KV0pCi0gICAgICAgIFticm93c2luZ0NvbnRleHQubG9h
ZERlbGVnYXRlIGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJEaWRSZWNlaXZlU2VydmVyUmVkaXJl
Y3RGb3JQcm92aXNpb25hbExvYWQ6YnJvd3NpbmdDb250ZXh0XTsKLX0KLQotc3RhdGljIHZvaWQg
ZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBX
S0ZyYW1lUmVmIGZyYW1lLCBXS0Vycm9yUmVmIGVycm9yLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgaWYgKCFXS0ZyYW1lSXNNYWluRnJhbWUoZnJh
bWUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIg
KmJyb3dzaW5nQ29udGV4dCA9IChXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKiljbGllbnRJ
bmZvOwotICAgIGlmIChbYnJvd3NpbmdDb250ZXh0LmxvYWREZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJEaWRGYWlsUHJvdmlzaW9u
YWxMb2FkOndpdGhFcnJvcjopXSkgewotICAgICAgICBSZXRhaW5QdHI8Q0ZFcnJvclJlZj4gY2ZF
cnJvciA9IGFkb3B0Q0YoV0tFcnJvckNvcHlDRkVycm9yKGtDRkFsbG9jYXRvckRlZmF1bHQsIGVy
cm9yKSk7Ci0gICAgICAgIFticm93c2luZ0NvbnRleHQubG9hZERlbGVnYXRlIGJyb3dzaW5nQ29u
dGV4dENvbnRyb2xsZXJEaWRGYWlsUHJvdmlzaW9uYWxMb2FkOmJyb3dzaW5nQ29udGV4dCB3aXRo
RXJyb3I6KE5TRXJyb3IgKiljZkVycm9yLmdldCgpXTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lk
IGRpZENvbW1pdExvYWRGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwg
V0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIGlmICgh
V0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV0tCcm93
c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93c2luZ0NvbnRleHQgPSAoV0tCcm93c2luZ0NvbnRl
eHRDb250cm9sbGVyICopY2xpZW50SW5mbzsKLSAgICBpZiAoW2Jyb3dzaW5nQ29udGV4dC5sb2Fk
RGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihicm93c2luZ0NvbnRleHRDb250
cm9sbGVyRGlkQ29tbWl0TG9hZDopXSkKLSAgICAgICAgW2Jyb3dzaW5nQ29udGV4dC5sb2FkRGVs
ZWdhdGUgYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckRpZENvbW1pdExvYWQ6YnJvd3NpbmdDb250
ZXh0XTsKLX0KLQotc3RhdGljIHZvaWQgZGlkRmluaXNoTG9hZEZvckZyYW1lKFdLUGFnZVJlZiBw
YWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pCi17Ci0gICAgaWYgKCFXS0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmJyb3dzaW5nQ29u
dGV4dCA9IChXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKiljbGllbnRJbmZvOwotICAgIGlm
IChbYnJvd3NpbmdDb250ZXh0LmxvYWREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJEaWRGaW5pc2hMb2FkOildKQotICAgICAgICBb
YnJvd3NpbmdDb250ZXh0LmxvYWREZWxlZ2F0ZSBicm93c2luZ0NvbnRleHRDb250cm9sbGVyRGlk
RmluaXNoTG9hZDpicm93c2luZ0NvbnRleHRdOwotfQotCi1zdGF0aWMgdm9pZCBkaWRGYWlsTG9h
ZFdpdGhFcnJvckZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS0Vy
cm9yUmVmIGVycm9yLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Ci17Ci0gICAgaWYgKCFXS0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmJyb3dzaW5nQ29udGV4dCA9IChX
S0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKiljbGllbnRJbmZvOwotICAgIGlmIChbYnJvd3Np
bmdDb250ZXh0LmxvYWREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGJyb3dz
aW5nQ29udGV4dENvbnRyb2xsZXJEaWRGYWlsTG9hZDp3aXRoRXJyb3I6KV0pIHsKLSAgICAgICAg
UmV0YWluUHRyPENGRXJyb3JSZWY+IGNmRXJyb3IgPSBhZG9wdENGKFdLRXJyb3JDb3B5Q0ZFcnJv
cihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBlcnJvcikpOwotICAgICAgICBbYnJvd3NpbmdDb250ZXh0
LmxvYWREZWxlZ2F0ZSBicm93c2luZ0NvbnRleHRDb250cm9sbGVyRGlkRmFpbExvYWQ6YnJvd3Np
bmdDb250ZXh0IHdpdGhFcnJvcjooTlNFcnJvciAqKWNmRXJyb3IuZ2V0KCldOwotICAgIH0KLX0K
LQotc3RhdGljIHZvaWQgZGlkU3RhcnRQcm9ncmVzcyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKLXsKLSAgICBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmJyb3dz
aW5nQ29udGV4dCA9IChXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKiljbGllbnRJbmZvOwot
ICAgIGlmIChbYnJvd3NpbmdDb250ZXh0LmxvYWREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJEaWRTdGFydFByb2dyZXNzOildKQot
ICAgICAgICBbYnJvd3NpbmdDb250ZXh0LmxvYWREZWxlZ2F0ZSBicm93c2luZ0NvbnRleHRDb250
cm9sbGVyRGlkU3RhcnRQcm9ncmVzczpicm93c2luZ0NvbnRleHRdOwotfQotCi1zdGF0aWMgdm9p
ZCBkaWRDaGFuZ2VQcm9ncmVzcyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5m
bykKLXsKLSAgICBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmJyb3dzaW5nQ29udGV4dCA9
IChXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKiljbGllbnRJbmZvOwotICAgIGlmIChbYnJv
d3NpbmdDb250ZXh0LmxvYWREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGJy
b3dzaW5nQ29udGV4dENvbnRyb2xsZXI6ZXN0aW1hdGVkUHJvZ3Jlc3NDaGFuZ2VkVG86KV0pCi0g
ICAgICAgIFticm93c2luZ0NvbnRleHQubG9hZERlbGVnYXRlIGJyb3dzaW5nQ29udGV4dENvbnRy
b2xsZXI6YnJvd3NpbmdDb250ZXh0IGVzdGltYXRlZFByb2dyZXNzQ2hhbmdlZFRvOnRvSW1wbChw
YWdlKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKV07Ci19Ci0KLXN0YXRpYyB2b2lkIGRpZEZpbmlzaFBy
b2dyZXNzKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIFdL
QnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqYnJvd3NpbmdDb250ZXh0ID0gKFdLQnJvd3NpbmdD
b250ZXh0Q29udHJvbGxlciAqKWNsaWVudEluZm87Ci0gICAgaWYgKFticm93c2luZ0NvbnRleHQu
bG9hZERlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoYnJvd3NpbmdDb250ZXh0
Q29udHJvbGxlckRpZEZpbmlzaFByb2dyZXNzOildKQotICAgICAgICBbYnJvd3NpbmdDb250ZXh0
LmxvYWREZWxlZ2F0ZSBicm93c2luZ0NvbnRleHRDb250cm9sbGVyRGlkRmluaXNoUHJvZ3Jlc3M6
YnJvd3NpbmdDb250ZXh0XTsKLX0KLQotc3RhdGljIHZvaWQgZGlkQ2hhbmdlQmFja0ZvcndhcmRM
aXN0KFdLUGFnZVJlZiBwYWdlLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgYWRkZWRJdGVtLCBX
S0FycmF5UmVmIHJlbW92ZWRJdGVtcywgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKLXsKLSAgICBX
S0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmJyb3dzaW5nQ29udGV4dCA9IChXS0Jyb3dzaW5n
Q29udGV4dENvbnRyb2xsZXIgKiljbGllbnRJbmZvOwotICAgIGlmICghW2Jyb3dzaW5nQ29udGV4
dC5sb2FkRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihicm93c2luZ0NvbnRl
eHRDb250cm9sbGVyRGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0OmFkZGVkSXRlbTpyZW1vdmVkSXRl
bXM6KV0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFdLQmFja0ZvcndhcmRMaXN0SXRlbSAqYWRk
ZWQgPSBhZGRlZEl0ZW0gPyB3cmFwcGVyKCp0b0ltcGwoYWRkZWRJdGVtKSkgOiBuaWw7Ci0gICAg
TlNBcnJheSAqcmVtb3ZlZCA9IHJlbW92ZWRJdGVtcyA/IHdyYXBwZXIoKnRvSW1wbChyZW1vdmVk
SXRlbXMpKSA6IG5pbDsKLSAgICBbYnJvd3NpbmdDb250ZXh0LmxvYWREZWxlZ2F0ZSBicm93c2lu
Z0NvbnRleHRDb250cm9sbGVyRGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0OmJyb3dzaW5nQ29udGV4
dCBhZGRlZEl0ZW06YWRkZWQgcmVtb3ZlZEl0ZW1zOnJlbW92ZWRdOwotfQotCi1zdGF0aWMgdm9p
ZCBzZXRVcFBhZ2VMb2FkZXJDbGllbnQoV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93
c2luZ0NvbnRleHQsIFdLUGFnZVJlZiBwYWdlUmVmKQotewotICAgIFdLUGFnZUxvYWRlckNsaWVu
dCBsb2FkZXJDbGllbnQ7Ci0gICAgbWVtc2V0KCZsb2FkZXJDbGllbnQsIDAsIHNpemVvZihsb2Fk
ZXJDbGllbnQpKTsKLQotICAgIGxvYWRlckNsaWVudC52ZXJzaW9uID0ga1dLUGFnZUxvYWRlckNs
aWVudEN1cnJlbnRWZXJzaW9uOwotICAgIGxvYWRlckNsaWVudC5jbGllbnRJbmZvID0gYnJvd3Np
bmdDb250ZXh0OwotICAgIGxvYWRlckNsaWVudC5kaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZy
YW1lID0gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZTsKLSAgICBsb2FkZXJDbGllbnQu
ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUgPSBkaWRS
ZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZTsKLSAgICBsb2Fk
ZXJDbGllbnQuZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lID0gZGlkRmFp
bFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lOwotICAgIGxvYWRlckNsaWVudC5kaWRD
b21taXRMb2FkRm9yRnJhbWUgPSBkaWRDb21taXRMb2FkRm9yRnJhbWU7Ci0gICAgbG9hZGVyQ2xp
ZW50LmRpZEZpbmlzaExvYWRGb3JGcmFtZSA9IGRpZEZpbmlzaExvYWRGb3JGcmFtZTsKLSAgICBs
b2FkZXJDbGllbnQuZGlkRmFpbExvYWRXaXRoRXJyb3JGb3JGcmFtZSA9IGRpZEZhaWxMb2FkV2l0
aEVycm9yRm9yRnJhbWU7Ci0KLSAgICBsb2FkZXJDbGllbnQuZGlkU3RhcnRQcm9ncmVzcyA9IGRp
ZFN0YXJ0UHJvZ3Jlc3M7Ci0gICAgbG9hZGVyQ2xpZW50LmRpZENoYW5nZVByb2dyZXNzID0gZGlk
Q2hhbmdlUHJvZ3Jlc3M7Ci0gICAgbG9hZGVyQ2xpZW50LmRpZEZpbmlzaFByb2dyZXNzID0gZGlk
RmluaXNoUHJvZ3Jlc3M7Ci0gICAgbG9hZGVyQ2xpZW50LmRpZENoYW5nZUJhY2tGb3J3YXJkTGlz
dCA9IGRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdDsKLQotICAgIFdLUGFnZVNldFBhZ2VMb2FkZXJD
bGllbnQocGFnZVJlZiwgJmxvYWRlckNsaWVudCk7Ci19Ci0KLXN0YXRpYyBXS1BvbGljeURlY2lz
aW9uSGFuZGxlciBtYWtlUG9saWN5RGVjaXNpb25CbG9jayhXS0ZyYW1lUG9saWN5TGlzdGVuZXJS
ZWYgbGlzdGVuZXIpCi17Ci0gICAgV0tSZXRhaW4obGlzdGVuZXIpOyAvLyBSZWxlYXNlZCBpbiB0
aGUgZGVjaXNpb24gaGFuZGxlciBiZWxvdy4KLQotICAgIHJldHVybiBbW14oV0tQb2xpY3lEZWNp
c2lvbiBkZWNpc2lvbikgewotICAgICAgICBzd2l0Y2ggKGRlY2lzaW9uKSB7Ci0gICAgICAgIGNh
c2UgV0tQb2xpY3lEZWNpc2lvbkNhbmNlbDoKLSAgICAgICAgICAgIFdLRnJhbWVQb2xpY3lMaXN0
ZW5lcklnbm9yZShsaXN0ZW5lcik7ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAKLSAgICAgICAgY2FzZSBXS1BvbGljeURlY2lzaW9uQWxsb3c6Ci0gICAg
ICAgICAgICBXS0ZyYW1lUG9saWN5TGlzdGVuZXJVc2UobGlzdGVuZXIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIAotICAgICAgICBjYXNlIFdLUG9saWN5RGVjaXNpb25CZWNvbWVEb3du
bG9hZDoKLSAgICAgICAgICAgIFdLRnJhbWVQb2xpY3lMaXN0ZW5lckRvd25sb2FkKGxpc3RlbmVy
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9OwotCi0gICAgICAgIFdLUmVsZWFzZShs
aXN0ZW5lcik7IC8vIFJldGFpbmVkIGluIHRoZSBjb250ZXh0IGFib3ZlLgotICAgIH0gY29weV0g
YXV0b3JlbGVhc2VdOwotfQotCi1zdGF0aWMgdm9pZCBzZXRVcFBhZ2VQb2xpY3lDbGllbnQoV0tC
cm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93c2luZ0NvbnRleHQsIFdLUGFnZVJlZiBwYWdl
UmVmKQotewotICAgIFdLUGFnZVBvbGljeUNsaWVudCBwb2xpY3lDbGllbnQ7Ci0gICAgbWVtc2V0
KCZwb2xpY3lDbGllbnQsIDAsIHNpemVvZihwb2xpY3lDbGllbnQpKTsKLQotICAgIHBvbGljeUNs
aWVudC52ZXJzaW9uID0ga1dLUGFnZVBvbGljeUNsaWVudEN1cnJlbnRWZXJzaW9uOwotICAgIHBv
bGljeUNsaWVudC5jbGllbnRJbmZvID0gYnJvd3NpbmdDb250ZXh0OwotCi0gICAgcG9saWN5Q2xp
ZW50LmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24gPSBbXShXS1BhZ2VSZWYgcGFnZSwg
V0tGcmFtZVJlZiBmcmFtZSwgV0tGcmFtZU5hdmlnYXRpb25UeXBlIG5hdmlnYXRpb25UeXBlLCBX
S0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgV0tFdmVudE1vdXNlQnV0dG9uIG1vdXNlQnV0dG9u
LCBXS0ZyYW1lUmVmIG9yaWdpbmF0aW5nRnJhbWUsIFdLVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBX
S0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYgbGlzdGVuZXIsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKLSAgICB7Ci0gICAgICAgIFdLQnJvd3NpbmdDb250ZXh0Q29u
dHJvbGxlciAqYnJvd3NpbmdDb250ZXh0ID0gKFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAq
KWNsaWVudEluZm87Ci0gICAgICAgIGlmIChbYnJvd3NpbmdDb250ZXh0LnBvbGljeURlbGVnYXRl
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjpk
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOmRlY2lzaW9uSGFuZGxlcjopXSkgewotICAg
ICAgICAgICAgTlNEaWN0aW9uYXJ5ICphY3Rpb25EaWN0aW9uYXJ5ID0gQHsKLSAgICAgICAgICAg
ICAgICBXS0FjdGlvbklzTWFpbkZyYW1lS2V5OiBAKFdLRnJhbWVJc01haW5GcmFtZShmcmFtZSkp
LAotICAgICAgICAgICAgICAgIFdLQWN0aW9uTmF2aWdhdGlvblR5cGVLZXk6IEAobmF2aWdhdGlv
blR5cGUpLAotICAgICAgICAgICAgICAgIFdLQWN0aW9uTW9kaWZpZXJGbGFnc0tleTogQChtb2Rp
ZmllcnMpLAotICAgICAgICAgICAgICAgIFdLQWN0aW9uTW91c2VCdXR0b25LZXk6IEAobW91c2VC
dXR0b24pLAotICAgICAgICAgICAgICAgIFdLQWN0aW9uVVJMUmVxdWVzdEtleTogYWRvcHROUyhX
S1VSTFJlcXVlc3RDb3B5TlNVUkxSZXF1ZXN0KHJlcXVlc3QpKS5nZXQoKQotICAgICAgICAgICAg
fTsKLQotICAgICAgICAgICAgaWYgKG9yaWdpbmF0aW5nRnJhbWUpIHsKLSAgICAgICAgICAgICAg
ICBhY3Rpb25EaWN0aW9uYXJ5ID0gW1thY3Rpb25EaWN0aW9uYXJ5IG11dGFibGVDb3B5XSBhdXRv
cmVsZWFzZV07Ci0gICAgICAgICAgICAgICAgWyhOU011dGFibGVEaWN0aW9uYXJ5ICopYWN0aW9u
RGljdGlvbmFyeSBzZXRPYmplY3Q6W05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzp0b0ltcGwo
b3JpZ2luYXRpbmdGcmFtZSktPnVybCgpIHJlbGF0aXZlVG9VUkw6bmlsXSBmb3JLZXk6V0tBY3Rp
b25PcmlnaW5hdGluZ0ZyYW1lVVJMS2V5XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgW2Jyb3dzaW5nQ29udGV4dC5wb2xpY3lEZWxlZ2F0ZSBicm93c2luZ0NvbnRl
eHRDb250cm9sbGVyOmJyb3dzaW5nQ29udGV4dCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0
aW9uOmFjdGlvbkRpY3Rpb25hcnkgZGVjaXNpb25IYW5kbGVyOm1ha2VQb2xpY3lEZWNpc2lvbkJs
b2NrKGxpc3RlbmVyKV07Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgV0tGcmFtZVBvbGlj
eUxpc3RlbmVyVXNlKGxpc3RlbmVyKTsKLSAgICB9OwotCi0gICAgcG9saWN5Q2xpZW50LmRlY2lk
ZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbiA9IFtdKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVm
IGZyYW1lLCBXS0ZyYW1lTmF2aWdhdGlvblR5cGUgbmF2aWdhdGlvblR5cGUsIFdLRXZlbnRNb2Rp
ZmllcnMgbW9kaWZpZXJzLCBXS0V2ZW50TW91c2VCdXR0b24gbW91c2VCdXR0b24sIFdLVVJMUmVx
dWVzdFJlZiByZXF1ZXN0LCBXS1N0cmluZ1JlZiBmcmFtZU5hbWUsIFdLRnJhbWVQb2xpY3lMaXN0
ZW5lclJlZiBsaXN0ZW5lciwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQotICAgIHsKLSAgICAgICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93c2lu
Z0NvbnRleHQgPSAoV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopY2xpZW50SW5mbzsKLSAg
ICAgICAgaWYgKFticm93c2luZ0NvbnRleHQucG9saWN5RGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcihicm93c2luZ0NvbnRleHRDb250cm9sbGVyOmRlY2lkZVBvbGljeUZvck5l
d1dpbmRvd0FjdGlvbjpkZWNpc2lvbkhhbmRsZXI6KV0pIHsKLSAgICAgICAgICAgIE5TRGljdGlv
bmFyeSAqYWN0aW9uRGljdGlvbmFyeSA9IEB7Ci0gICAgICAgICAgICAgICAgV0tBY3Rpb25Jc01h
aW5GcmFtZUtleTogQChXS0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKSwKLSAgICAgICAgICAgICAg
ICBXS0FjdGlvbk5hdmlnYXRpb25UeXBlS2V5OiBAKG5hdmlnYXRpb25UeXBlKSwKLSAgICAgICAg
ICAgICAgICBXS0FjdGlvbk1vZGlmaWVyRmxhZ3NLZXk6IEAobW9kaWZpZXJzKSwKLSAgICAgICAg
ICAgICAgICBXS0FjdGlvbk1vdXNlQnV0dG9uS2V5OiBAKG1vdXNlQnV0dG9uKSwKLSAgICAgICAg
ICAgICAgICBXS0FjdGlvblVSTFJlcXVlc3RLZXk6IGFkb3B0TlMoV0tVUkxSZXF1ZXN0Q29weU5T
VVJMUmVxdWVzdChyZXF1ZXN0KSkuZ2V0KCksCi0gICAgICAgICAgICAgICAgV0tBY3Rpb25GcmFt
ZU5hbWVLZXk6IHRvSW1wbChmcmFtZU5hbWUpLT53cmFwcGVyKCkKLSAgICAgICAgICAgIH07Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIFticm93c2luZ0NvbnRleHQucG9saWN5RGVsZWdhdGUg
YnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjpicm93c2luZ0NvbnRleHQgZGVjaWRlUG9saWN5Rm9y
TmV3V2luZG93QWN0aW9uOmFjdGlvbkRpY3Rpb25hcnkgZGVjaXNpb25IYW5kbGVyOm1ha2VQb2xp
Y3lEZWNpc2lvbkJsb2NrKGxpc3RlbmVyKV07Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
V0tGcmFtZVBvbGljeUxpc3RlbmVyVXNlKGxpc3RlbmVyKTsKLSAgICB9OwotCi0gICAgcG9saWN5
Q2xpZW50LmRlY2lkZVBvbGljeUZvclJlc3BvbnNlID0gW10oV0tQYWdlUmVmIHBhZ2UsIFdLRnJh
bWVSZWYgZnJhbWUsIFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UsIFdLVVJMUmVxdWVzdFJlZiBy
ZXF1ZXN0LCBib29sIGNhblNob3dNSU1FVHlwZSwgV0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmIGxp
c3RlbmVyLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi0gICAg
ewotICAgICAgICBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmJyb3dzaW5nQ29udGV4dCA9
IChXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKiljbGllbnRJbmZvOwotICAgICAgICBpZiAo
W2Jyb3dzaW5nQ29udGV4dC5wb2xpY3lEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXI6ZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2VBY3Rp
b246ZGVjaXNpb25IYW5kbGVyOildKSB7Ci0gICAgICAgICAgICBOU0RpY3Rpb25hcnkgKmFjdGlv
bkRpY3Rpb25hcnkgPSBAewotICAgICAgICAgICAgICAgIFdLQWN0aW9uSXNNYWluRnJhbWVLZXk6
IEAoV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSksCi0gICAgICAgICAgICAgICAgV0tBY3Rpb25V
UkxSZXF1ZXN0S2V5OiBhZG9wdE5TKFdLVVJMUmVxdWVzdENvcHlOU1VSTFJlcXVlc3QocmVxdWVz
dCkpLmdldCgpLAotICAgICAgICAgICAgICAgIFdLQWN0aW9uVVJMUmVzcG9uc2VLZXk6IGFkb3B0
TlMoV0tVUkxSZXNwb25zZUNvcHlOU1VSTFJlc3BvbnNlKHJlc3BvbnNlKSkuZ2V0KCksCi0gICAg
ICAgICAgICAgICAgV0tBY3Rpb25DYW5TaG93TUlNRVR5cGVLZXk6IEAoY2FuU2hvd01JTUVUeXBl
KSwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIFticm93c2luZ0NvbnRleHQucG9saWN5
RGVsZWdhdGUgYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjpicm93c2luZ0NvbnRleHQgZGVjaWRl
UG9saWN5Rm9yUmVzcG9uc2VBY3Rpb246YWN0aW9uRGljdGlvbmFyeSBkZWNpc2lvbkhhbmRsZXI6
bWFrZVBvbGljeURlY2lzaW9uQmxvY2sobGlzdGVuZXIpXTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBXS0ZyYW1lUG9saWN5TGlzdGVuZXJVc2UobGlzdGVuZXIpOwotICAgIH07Ci0KLSAg
ICBXS1BhZ2VTZXRQYWdlUG9saWN5Q2xpZW50KHBhZ2VSZWYsICZwb2xpY3lDbGllbnQpOwotfQot
Ci0vKiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIGFzc29jaWF0ZSB2aWV3LiAqLwot
Ci0tIChpZClfaW5pdFdpdGhQYWdlUmVmOihXS1BhZ2VSZWYpcGFnZVJlZgotewotICAgIHNlbGYg
PSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotCi0g
ICAgX3BhZ2VSZWYgPSBwYWdlUmVmOwotCi0gICAgX3BhZ2VMb2FkU3RhdGVPYnNlcnZlciA9IHN0
ZDo6bWFrZV91bmlxdWU8UGFnZUxvYWRTdGF0ZU9ic2VydmVyPihzZWxmKTsKLSAgICB0b0ltcGwo
X3BhZ2VSZWYuZ2V0KCkpLT5wYWdlTG9hZFN0YXRlKCkuYWRkT2JzZXJ2ZXIoKl9wYWdlTG9hZFN0
YXRlT2JzZXJ2ZXIpOwotCi0gICAgc2V0VXBQYWdlTG9hZGVyQ2xpZW50KHNlbGYsIHBhZ2VSZWYp
OwotICAgIHNldFVwUGFnZVBvbGljeUNsaWVudChzZWxmLCBwYWdlUmVmKTsKLQotICAgIHJldHVy
biBzZWxmOwotfQotCi0rIChXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKilfYnJvd3NpbmdD
b250ZXh0Q29udHJvbGxlckZvclBhZ2VSZWY6KFdLUGFnZVJlZilwYWdlUmVmCi17Ci0gICAgcmV0
dXJuIChXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKilXZWJLaXQ6OnRvSW1wbChwYWdlUmVm
KS0+bG9hZGVyQ2xpZW50KCkuY2xpZW50KCkuY2xpZW50SW5mbzsKLX0KLQotKyAoTlNNdXRhYmxl
U2V0ICopY3VzdG9tU2NoZW1lcwotewotICAgIHN0YXRpYyBOU011dGFibGVTZXQgKmN1c3RvbVNj
aGVtZXMgPSBbW05TTXV0YWJsZVNldCBhbGxvY10gaW5pdF07Ci0gICAgcmV0dXJuIGN1c3RvbVNj
aGVtZXM7Ci19Ci0gCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS0Jyb3dzaW5nQ29udGV4dENv
bnRyb2xsZXIgKFByaXZhdGUpCi0KLS0gKHZvaWQpc2V0UGFnaW5hdGlvbk1vZGU6KFdLQnJvd3Np
bmdDb250ZXh0UGFnaW5hdGlvbk1vZGUpcGFnaW5hdGlvbk1vZGUKLXsKLSAgICBXS1BhZ2luYXRp
b25Nb2RlIG1vZGU7Ci0gICAgc3dpdGNoIChwYWdpbmF0aW9uTW9kZSkgewotICAgIGNhc2UgV0tQ
YWdpbmF0aW9uTW9kZVVucGFnaW5hdGVkOgotICAgICAgICBtb2RlID0ga1dLUGFnaW5hdGlvbk1v
ZGVVbnBhZ2luYXRlZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXS1BhZ2luYXRpb25Nb2Rl
TGVmdFRvUmlnaHQ6Ci0gICAgICAgIG1vZGUgPSBrV0tQYWdpbmF0aW9uTW9kZUxlZnRUb1JpZ2h0
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdLUGFnaW5hdGlvbk1vZGVSaWdodFRvTGVmdDoK
LSAgICAgICAgbW9kZSA9IGtXS1BhZ2luYXRpb25Nb2RlUmlnaHRUb0xlZnQ7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgV0tQYWdpbmF0aW9uTW9kZVRvcFRvQm90dG9tOgotICAgICAgICBtb2Rl
ID0ga1dLUGFnaW5hdGlvbk1vZGVUb3BUb0JvdHRvbTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBXS1BhZ2luYXRpb25Nb2RlQm90dG9tVG9Ub3A6Ci0gICAgICAgIG1vZGUgPSBrV0tQYWdpbmF0
aW9uTW9kZUJvdHRvbVRvVG9wOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgV0tQYWdlU2V0UGFnaW5hdGlvbk1vZGUoX3BhZ2VSZWYu
Z2V0KCksIG1vZGUpOwotfQotCi0tIChXS0Jyb3dzaW5nQ29udGV4dFBhZ2luYXRpb25Nb2RlKXBh
Z2luYXRpb25Nb2RlCi17Ci0gICAgc3dpdGNoIChXS1BhZ2VHZXRQYWdpbmF0aW9uTW9kZShfcGFn
ZVJlZi5nZXQoKSkpIHsKLSAgICBjYXNlIGtXS1BhZ2luYXRpb25Nb2RlVW5wYWdpbmF0ZWQ6Ci0g
ICAgICAgIHJldHVybiBXS1BhZ2luYXRpb25Nb2RlVW5wYWdpbmF0ZWQ7Ci0gICAgY2FzZSBrV0tQ
YWdpbmF0aW9uTW9kZUxlZnRUb1JpZ2h0OgotICAgICAgICByZXR1cm4gV0tQYWdpbmF0aW9uTW9k
ZUxlZnRUb1JpZ2h0OwotICAgIGNhc2Uga1dLUGFnaW5hdGlvbk1vZGVSaWdodFRvTGVmdDoKLSAg
ICAgICAgcmV0dXJuIFdLUGFnaW5hdGlvbk1vZGVSaWdodFRvTGVmdDsKLSAgICBjYXNlIGtXS1Bh
Z2luYXRpb25Nb2RlVG9wVG9Cb3R0b206Ci0gICAgICAgIHJldHVybiBXS1BhZ2luYXRpb25Nb2Rl
VG9wVG9Cb3R0b207Ci0gICAgY2FzZSBrV0tQYWdpbmF0aW9uTW9kZUJvdHRvbVRvVG9wOgotICAg
ICAgICByZXR1cm4gV0tQYWdpbmF0aW9uTW9kZUJvdHRvbVRvVG9wOwotICAgIH0KLQotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBXS1BhZ2luYXRpb25Nb2RlVW5wYWdpbmF0
ZWQ7Ci19Ci0KLS0gKHZvaWQpc2V0UGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1uczooQk9PTCli
ZWhhdmVzTGlrZUNvbHVtbnMKLXsKLSAgICBXS1BhZ2VTZXRQYWdpbmF0aW9uQmVoYXZlc0xpa2VD
b2x1bW5zKF9wYWdlUmVmLmdldCgpLCBiZWhhdmVzTGlrZUNvbHVtbnMpOwotfQotCi0tIChCT09M
KXBhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnMKLXsKLSAgICByZXR1cm4gV0tQYWdlR2V0UGFn
aW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1ucyhfcGFnZVJlZi5nZXQoKSk7Ci19Ci0KLS0gKHZvaWQp
c2V0UGFnZUxlbmd0aDooQ0dGbG9hdClwYWdlTGVuZ3RoCi17Ci0gICAgV0tQYWdlU2V0UGFnZUxl
bmd0aChfcGFnZVJlZi5nZXQoKSwgcGFnZUxlbmd0aCk7Ci19Ci0KLS0gKENHRmxvYXQpcGFnZUxl
bmd0aAotewotICAgIHJldHVybiBXS1BhZ2VHZXRQYWdlTGVuZ3RoKF9wYWdlUmVmLmdldCgpKTsK
LX0KLQotLSAodm9pZClzZXRHYXBCZXR3ZWVuUGFnZXM6KENHRmxvYXQpZ2FwQmV0d2VlblBhZ2Vz
Ci17Ci0gICAgV0tQYWdlU2V0R2FwQmV0d2VlblBhZ2VzKF9wYWdlUmVmLmdldCgpLCBnYXBCZXR3
ZWVuUGFnZXMpOwotfQotCi0tIChDR0Zsb2F0KWdhcEJldHdlZW5QYWdlcwotewotICAgIHJldHVy
biBXS1BhZ2VHZXRHYXBCZXR3ZWVuUGFnZXMoX3BhZ2VSZWYuZ2V0KCkpOwotfQotCi0tIChOU1VJ
bnRlZ2VyKXBhZ2VDb3VudAotewotICAgIHJldHVybiBXS1BhZ2VHZXRQYWdlQ291bnQoX3BhZ2VS
ZWYuZ2V0KCkpOwotfQotCi0tIChXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZSAqKWhhbmRsZQotewot
ICAgIHJldHVybiBbW1tXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZSBhbGxvY10gX2luaXRXaXRoUGFn
ZUlEOnRvSW1wbChfcGFnZVJlZi5nZXQoKSktPnBhZ2VJRCgpXSBhdXRvcmVsZWFzZV07Ci19Ci0K
LUBlbmQKLQotI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJJbnRlcm5hbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdD
b250ZXh0Q29udHJvbGxlckludGVybmFsLmgJKHJldmlzaW9uIDE1OTg3MykKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckludGVy
bmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBv
cnQgIldLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlclByaXZhdGUuaCIKLQotI2lmIFdLX0FQSV9F
TkFCTEVECi0KLUBpbnRlcmZhY2UgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICgpCi0KLS8q
IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gYXNzb2NpYXRlIHZpZXcuICovCi0tIChp
ZClfaW5pdFdpdGhQYWdlUmVmOihXS1BhZ2VSZWYpcGFnZVJlZjsKLQotLyogUmV0dXJucyBhIFdL
QnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciBhc3NvY2lhdGVkIHdpdGggdGhlIFdLUGFnZVJlZi4g
Ki8KLSsgKFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqKV9icm93c2luZ0NvbnRleHRDb250
cm9sbGVyRm9yUGFnZVJlZjooV0tQYWdlUmVmKXBhZ2VSZWY7Ci0KLSsgKE5TTXV0YWJsZVNldCAq
KWN1c3RvbVNjaGVtZXM7Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dENvbnRy
b2xsZXJQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9tYWMvV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyUHJpdmF0ZS5oCShyZXZpc2lvbiAxNTk4
NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4
dENvbnRyb2xsZXJQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjIgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbXBvcnQgPFdlYktpdDIvV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyLmg+
Ci0KLSNpZiBXS19BUElfRU5BQkxFRAotCi0jaW1wb3J0IDxXZWJLaXQyL1dLQmFzZS5oPgotCi10
eXBlZGVmIE5TX0VOVU0oTlNVSW50ZWdlciwgV0tCcm93c2luZ0NvbnRleHRQYWdpbmF0aW9uTW9k
ZSkgewotICAgIFdLUGFnaW5hdGlvbk1vZGVVbnBhZ2luYXRlZCwKLSAgICBXS1BhZ2luYXRpb25N
b2RlTGVmdFRvUmlnaHQsCi0gICAgV0tQYWdpbmF0aW9uTW9kZVJpZ2h0VG9MZWZ0LAotICAgIFdL
UGFnaW5hdGlvbk1vZGVUb3BUb0JvdHRvbSwKLSAgICBXS1BhZ2luYXRpb25Nb2RlQm90dG9tVG9U
b3AsCi19OwotCi1AY2xhc3MgV0tCcm93c2luZ0NvbnRleHRIYW5kbGU7Ci0KLUBpbnRlcmZhY2Ug
V0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyIChQcml2YXRlKQotCi1AcHJvcGVydHkgKHJlYWRv
bmx5KSBXS1BhZ2VSZWYgX3BhZ2VSZWY7Ci0KLUBwcm9wZXJ0eSBXS0Jyb3dzaW5nQ29udGV4dFBh
Z2luYXRpb25Nb2RlIHBhZ2luYXRpb25Nb2RlOwotCi0vLyBXaGV0aGVyIHRoZSBjb2x1bW4tYnJl
YWste2JlZm9yZSxhZnRlcn0gcHJvcGVydGllcyBhcmUgcmVzcGVjdGVkIGluc3RlYWQgb2YgdGhl
Ci0vLyBwYWdlLWJyZWFrLXtiZWZvcmUsYWZ0ZXJ9IHByb3BlcnRpZXMuCi1AcHJvcGVydHkgQk9P
TCBwYWdpbmF0aW9uQmVoYXZlc0xpa2VDb2x1bW5zOwotCi0vLyBTZXQgdG8gMCB0byBoYXZlIHRo
ZSBwYWdlIGxlbmd0aCBlcXVhbCB0aGUgdmlldyBsZW5ndGguCi1AcHJvcGVydHkgQ0dGbG9hdCBw
YWdlTGVuZ3RoOwotQHByb3BlcnR5IENHRmxvYXQgZ2FwQmV0d2VlblBhZ2VzOwotCi1AcHJvcGVy
dHkgKHJlYWRvbmx5KSBOU1VJbnRlZ2VyIHBhZ2VDb3VudDsKLQotQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZSAqaGFuZGxlOwotCi1AZW5kCi0K
LSNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvV0tCcm93c2luZ0NvbnRleHRHcm91cC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0R3JvdXAuaAkocmV2aXNp
b24gMTU5ODczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2lu
Z0NvbnRleHRHcm91cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW1wb3J0IDxXZWJLaXQyL1dLRm91bmRhdGlvbi5oPgotCi0jaWYgV0tfQVBJX0VOQUJM
RUQKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0jaW1wb3J0IDxXZWJLaXQy
L1dLVXNlclNjcmlwdEluamVjdGlvblRpbWUuaD4KLQotV0tfQVBJX0NMQVNTCi1AaW50ZXJmYWNl
IFdLQnJvd3NpbmdDb250ZXh0R3JvdXAgOiBOU09iamVjdAotCi0tIChpZClpbml0V2l0aElkZW50
aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcjsKLQotLyogVXNlciBDb250ZW50ICovCi0KLS0g
KHZvaWQpYWRkVXNlclN0eWxlU2hlZXQ6KE5TU3RyaW5nICopc291cmNlIGJhc2VVUkw6KE5TVVJM
ICopYmFzZVVSTCB3aGl0ZWxpc3RlZFVSTFBhdHRlcm5zOihOU0FycmF5ICopd2hpdGVsaXN0IGJs
YWNrbGlzdGVkVVJMUGF0dGVybnM6KE5TQXJyYXkgKilibGFja2xpc3QgbWFpbkZyYW1lT25seToo
Qk9PTCltYWluRnJhbWVPbmx5OwotLSAodm9pZClyZW1vdmVBbGxVc2VyU3R5bGVTaGVldHM7Ci0K
LS0gKHZvaWQpYWRkVXNlclNjcmlwdDooTlNTdHJpbmcgKilzb3VyY2UgYmFzZVVSTDooTlNVUkwg
KiliYXNlVVJMIHdoaXRlbGlzdGVkVVJMUGF0dGVybnM6KE5TQXJyYXkgKil3aGl0ZWxpc3QgYmxh
Y2tsaXN0ZWRVUkxQYXR0ZXJuczooTlNBcnJheSAqKWJsYWNrbGlzdCBpbmplY3Rpb25UaW1lOihX
S1VzZXJTY3JpcHRJbmplY3Rpb25UaW1lKWluamVjdGlvblRpbWUgbWFpbkZyYW1lT25seTooQk9P
TCltYWluRnJhbWVPbmx5OwotLSAodm9pZClyZW1vdmVBbGxVc2VyU2NyaXB0czsKLQotCi0vKiBT
ZXR0aW5ncyAqLwotCi0vKiBTZXR0aW5nIHRvIGNvbnRyb2wgd2hldGhlciBKYXZhU2NyaXB0IHJl
ZmVyZW5jZWQgYnkgYSBwYWdlIGlzIGVuYWJsZWQuCi0gICBEZWZhdWx0OiBZRVMKLSovCi1AcHJv
cGVydHkgQk9PTCBhbGxvd3NKYXZhU2NyaXB0OwotCi0vKiBTZXR0aW5nIHRvIGNvbnRyb2wgd2hl
dGhlciBwbHVnLWlucyBhcmUgZW5hYmxlZC4KLSAgIERlZmF1bHQ6IFlFUwotKi8KLUBwcm9wZXJ0
eSBCT09MIGFsbG93c1BsdWdJbnM7Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVE
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4
dEdyb3VwLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1dLQnJvd3NpbmdDb250ZXh0R3JvdXAubW0JKHJldmlzaW9uIDE1OTg3MykKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0R3JvdXAubW0JKHdvcmtp
bmcgY29weSkKQEAgLTEsMTc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcu
aCIKLSNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5oIgotI2ltcG9ydCAi
V0tCcm93c2luZ0NvbnRleHRHcm91cFByaXZhdGUuaCIKLQotI2lmIFdLX0FQSV9FTkFCTEVECi0K
LSNpbXBvcnQgIkFQSUFycmF5LmgiCi0jaW1wb3J0ICJXS0FycmF5LmgiCi0jaW1wb3J0ICJXS1Bh
Z2VHcm91cC5oIgotI2ltcG9ydCAiV0tQcmVmZXJlbmNlcy5oIgotI2ltcG9ydCAiV0tSZXRhaW5Q
dHIuaCIKLSNpbXBvcnQgIldLU2hhcmVkQVBJQ2FzdC5oIgotI2ltcG9ydCAiV0tTdHJpbmdDRi5o
IgotI2ltcG9ydCAiV0tVUkwuaCIKLSNpbXBvcnQgIldLVVJMQ0YuaCIKLSNpbXBvcnQgIldlYlN0
cmluZy5oIgotI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0
OwotCi1AaW1wbGVtZW50YXRpb24gV0tCcm93c2luZ0NvbnRleHRHcm91cCB7Ci0gICAgc3RkOjph
bGlnbmVkX3N0b3JhZ2U8c2l6ZW9mKFdlYlBhZ2VHcm91cCksIHN0ZDo6YWxpZ25tZW50X29mPFdl
YlBhZ2VHcm91cD46OnZhbHVlPjo6dHlwZSBfcGFnZUdyb3VwOwotfQotCi0tICh2b2lkKWRlYWxs
b2MKLXsKLSAgICByZWludGVycHJldF9jYXN0PFdlYlBhZ2VHcm91cCo+KCZfcGFnZUdyb3VwKS0+
fldlYlBhZ2VHcm91cCgpOwotCi0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tIChpZClpbml0
V2l0aElkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgotewotICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgQVBJ
OjpPYmplY3Q6OmNvbnN0cnVjdEluV3JhcHBlcjxXZWJQYWdlR3JvdXA+KHNlbGYsIGlkZW50aWZp
ZXIpOwotCi0gICAgLy8gR2l2ZSB0aGUgV0tCcm93c2luZ0NvbnRleHRHcm91cCBhIGlkZW50aWZp
ZXItbGVzcyBwcmVmZXJlbmNlcywgc28gdGhhdCB0aGV5Ci0gICAgLy8gZG9uJ3QgZ2V0IGF1dG9t
YXRpY2FsbHkgd3JpdHRlbiB0byB0aGUgZGlzay4gVGhlIGF1dG9tYXRpYyB3cml0aW5nIGhhcyBw
cm92ZW4KLSAgICAvLyBjb25mdXNpbmcgdG8gdXNlcnMgb2YgdGhlIEFQSS4KLSAgICBXS1JldGFp
blB0cjxXS1ByZWZlcmVuY2VzUmVmPiBwcmVmZXJlbmNlcyA9IGFkb3B0V0soV0tQcmVmZXJlbmNl
c0NyZWF0ZSgpKTsKLSAgICBXS1BhZ2VHcm91cFNldFByZWZlcmVuY2VzKHRvQVBJKHJlaW50ZXJw
cmV0X2Nhc3Q8V2ViUGFnZUdyb3VwKj4oJl9wYWdlR3JvdXApKSwgcHJlZmVyZW5jZXMuZ2V0KCkp
OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKEJPT0wpYWxsb3dzSmF2YVNjcmlwdAotewot
ICAgIHJldHVybiBXS1ByZWZlcmVuY2VzR2V0SmF2YVNjcmlwdEVuYWJsZWQoV0tQYWdlR3JvdXBH
ZXRQcmVmZXJlbmNlcyh0b0FQSShyZWludGVycHJldF9jYXN0PFdlYlBhZ2VHcm91cCo+KCZfcGFn
ZUdyb3VwKSkpKTsKLX0KLQotLSAodm9pZClzZXRBbGxvd3NKYXZhU2NyaXB0OihCT09MKWFsbG93
c0phdmFTY3JpcHQKLXsKLSAgICBXS1ByZWZlcmVuY2VzU2V0SmF2YVNjcmlwdEVuYWJsZWQoV0tQ
YWdlR3JvdXBHZXRQcmVmZXJlbmNlcyh0b0FQSShyZWludGVycHJldF9jYXN0PFdlYlBhZ2VHcm91
cCo+KCZfcGFnZUdyb3VwKSkpLCBhbGxvd3NKYXZhU2NyaXB0KTsKLX0KLQotLSAoQk9PTClhbGxv
d3NKYXZhU2NyaXB0TWFya3VwCi17Ci0gICAgcmV0dXJuIFdLUHJlZmVyZW5jZXNHZXRKYXZhU2Ny
aXB0TWFya3VwRW5hYmxlZChXS1BhZ2VHcm91cEdldFByZWZlcmVuY2VzKHRvQVBJKHJlaW50ZXJw
cmV0X2Nhc3Q8V2ViUGFnZUdyb3VwKj4oJl9wYWdlR3JvdXApKSkpOwotfQotCi0tICh2b2lkKXNl
dEFsbG93c0phdmFTY3JpcHRNYXJrdXA6KEJPT0wpYWxsb3dzSmF2YVNjcmlwdE1hcmt1cAotewot
ICAgIFdLUHJlZmVyZW5jZXNTZXRKYXZhU2NyaXB0TWFya3VwRW5hYmxlZChXS1BhZ2VHcm91cEdl
dFByZWZlcmVuY2VzKHRvQVBJKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZUdyb3VwKj4oJl9wYWdl
R3JvdXApKSksIGFsbG93c0phdmFTY3JpcHRNYXJrdXApOwotfQotCi0tIChCT09MKWFsbG93c1Bs
dWdJbnMKLXsKLSAgICByZXR1cm4gV0tQcmVmZXJlbmNlc0dldFBsdWdpbnNFbmFibGVkKFdLUGFn
ZUdyb3VwR2V0UHJlZmVyZW5jZXModG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlR3JvdXAq
PigmX3BhZ2VHcm91cCkpKSk7Ci19Ci0KLS0gKHZvaWQpc2V0QWxsb3dzUGx1Z0luczooQk9PTClh
bGxvd3NQbHVnSW5zCi17Ci0gICAgV0tQcmVmZXJlbmNlc1NldFBsdWdpbnNFbmFibGVkKFdLUGFn
ZUdyb3VwR2V0UHJlZmVyZW5jZXModG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlR3JvdXAq
PigmX3BhZ2VHcm91cCkpKSwgYWxsb3dzUGx1Z0lucyk7Ci19Ci0KLXN0YXRpYyBXS1JldGFpblB0
cjxXS0FycmF5UmVmPiBjcmVhdGVXS0FycmF5KE5TQXJyYXkgKmFycmF5KQotewotICAgIE5TVUlu
dGVnZXIgY291bnQgPSBbYXJyYXkgY291bnRdOwotCi0gICAgaWYgKCFjb3VudCkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4gc3RyaW5n
czsKLSAgICBzdHJpbmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY291bnQpOwotCi0gICAgZm9y
IChpZCBlbnRyeSBpbiBhcnJheSkgewotICAgICAgICBpZiAoW2VudHJ5IGlzS2luZE9mQ2xhc3M6
W05TU3RyaW5nIGNsYXNzXV0pCi0gICAgICAgICAgICBzdHJpbmdzLnVuY2hlY2tlZEFwcGVuZChh
ZG9wdFJlZih0b0ltcGwoV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKWVu
dHJ5KSkpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9BUEkoQVBJOjpBcnJheTo6Y3JlYXRlKHN0
ZDo6bW92ZShzdHJpbmdzKSkubGVha1JlZigpKTsKLX0KLQotLSh2b2lkKWFkZFVzZXJTdHlsZVNo
ZWV0OihOU1N0cmluZyAqKXNvdXJjZSBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwgd2hpdGVsaXN0
ZWRVUkxQYXR0ZXJuczooTlNBcnJheSAqKXdoaXRlbGlzdCBibGFja2xpc3RlZFVSTFBhdHRlcm5z
OihOU0FycmF5ICopYmxhY2tsaXN0IG1haW5GcmFtZU9ubHk6KEJPT0wpbWFpbkZyYW1lT25seQot
ewotICAgIGlmICghc291cmNlKQotICAgICAgICBDUkFTSCgpOwotCi0gICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHdrU291cmNlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmlu
ZygoQ0ZTdHJpbmdSZWYpc291cmNlKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrQmFz
ZVVSTCA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQ0ZVUkwoKENGVVJMUmVmKWJhc2VVUkwpKTsK
LSAgICBhdXRvIHdrV2hpdGVsaXN0ID0gY3JlYXRlV0tBcnJheSh3aGl0ZWxpc3QpOwotICAgIGF1
dG8gd2tCbGFja2xpc3QgPSBjcmVhdGVXS0FycmF5KGJsYWNrbGlzdCk7Ci0gICAgV0tVc2VyQ29u
dGVudEluamVjdGVkRnJhbWVzIGluamVjdGVkRnJhbWVzID0gbWFpbkZyYW1lT25seSA/IGtXS0lu
amVjdEluVG9wRnJhbWVPbmx5IDoga1dLSW5qZWN0SW5BbGxGcmFtZXM7Ci0KLSAgICBXS1BhZ2VH
cm91cEFkZFVzZXJTdHlsZVNoZWV0KHRvQVBJKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZUdyb3Vw
Kj4oJl9wYWdlR3JvdXApKSwgd2tTb3VyY2UuZ2V0KCksIHdrQmFzZVVSTC5nZXQoKSwgd2tXaGl0
ZWxpc3QuZ2V0KCksIHdrQmxhY2tsaXN0LmdldCgpLCBpbmplY3RlZEZyYW1lcyk7Ci19Ci0KLS0g
KHZvaWQpcmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzCi17Ci0gICAgV0tQYWdlR3JvdXBSZW1vdmVB
bGxVc2VyU3R5bGVTaGVldHModG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlR3JvdXAqPigm
X3BhZ2VHcm91cCkpKTsKLX0KLQotLSAodm9pZClhZGRVc2VyU2NyaXB0OihOU1N0cmluZyAqKXNv
dXJjZSBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwgd2hpdGVsaXN0ZWRVUkxQYXR0ZXJuczooTlNB
cnJheSAqKXdoaXRlbGlzdCBibGFja2xpc3RlZFVSTFBhdHRlcm5zOihOU0FycmF5ICopYmxhY2ts
aXN0IGluamVjdGlvblRpbWU6KFdLVXNlclNjcmlwdEluamVjdGlvblRpbWUpaW5qZWN0aW9uVGlt
ZSBtYWluRnJhbWVPbmx5OihCT09MKW1haW5GcmFtZU9ubHkKLXsKLSAgICBpZiAoIXNvdXJjZSkK
LSAgICAgICAgQ1JBU0goKTsKLQotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a1NvdXJj
ZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKXNvdXJj
ZSkpOwotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a0Jhc2VVUkwgPSBhZG9wdFdLKFdLVVJM
Q3JlYXRlV2l0aENGVVJMKChDRlVSTFJlZiliYXNlVVJMKSk7Ci0gICAgYXV0byB3a1doaXRlbGlz
dCA9IGNyZWF0ZVdLQXJyYXkod2hpdGVsaXN0KTsKLSAgICBhdXRvIHdrQmxhY2tsaXN0ID0gY3Jl
YXRlV0tBcnJheShibGFja2xpc3QpOwotICAgIFdLVXNlckNvbnRlbnRJbmplY3RlZEZyYW1lcyBp
bmplY3RlZEZyYW1lcyA9IG1haW5GcmFtZU9ubHkgPyBrV0tJbmplY3RJblRvcEZyYW1lT25seSA6
IGtXS0luamVjdEluQWxsRnJhbWVzOwotCi0gICAgV0tQYWdlR3JvdXBBZGRVc2VyU2NyaXB0KHRv
QVBJKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZUdyb3VwKj4oJl9wYWdlR3JvdXApKSwgd2tTb3Vy
Y2UuZ2V0KCksIHdrQmFzZVVSTC5nZXQoKSwgd2tXaGl0ZWxpc3QuZ2V0KCksIHdrQmxhY2tsaXN0
LmdldCgpLCBpbmplY3RlZEZyYW1lcywgaW5qZWN0aW9uVGltZSk7Ci19Ci0KLS0gKHZvaWQpcmVt
b3ZlQWxsVXNlclNjcmlwdHMKLXsKLSAgICBXS1BhZ2VHcm91cFJlbW92ZUFsbFVzZXJTY3JpcHRz
KHRvQVBJKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZUdyb3VwKj4oJl9wYWdlR3JvdXApKSk7Ci19
Ci0KLSNwcmFnbWEgbWFyayBXS09iamVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgotCi0tIChB
UEk6Ok9iamVjdCYpX2FwaU9iamVjdAotewotICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxB
UEk6Ok9iamVjdCo+KCZfcGFnZUdyb3VwKTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24g
V0tCcm93c2luZ0NvbnRleHRHcm91cCAoUHJpdmF0ZSkKLQotLSAoV0tQYWdlR3JvdXBSZWYpX3Bh
Z2VHcm91cFJlZgotewotICAgIHJldHVybiB0b0FQSShyZWludGVycHJldF9jYXN0PFdlYlBhZ2VH
cm91cCo+KCZfcGFnZUdyb3VwKSk7Ci19Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFdLX0FQSV9FTkFC
TEVECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29u
dGV4dEdyb3VwSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dEdyb3VwSW50ZXJuYWwuaAkocmV2aXNpb24gMTU5
ODczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2luZ0NvbnRl
eHRHcm91cEludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0R3JvdXAuaCIKLQotI2lmIFdLX0FQSV9F
TkFCTEVECi0KLSNpbXBvcnQgIldLT2JqZWN0LmgiCi0jaW1wb3J0ICJXZWJQYWdlR3JvdXAuaCIK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWlubGluZSBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwICp3
cmFwcGVyKFdlYlBhZ2VHcm91cCYgcGFnZUdyb3VwKQotewotICAgIEFTU0VSVChbcGFnZUdyb3Vw
LndyYXBwZXIoKSBpc0tpbmRPZkNsYXNzOltXS0Jyb3dzaW5nQ29udGV4dEdyb3VwIGNsYXNzXV0p
OwotICAgIHJldHVybiAoV0tCcm93c2luZ0NvbnRleHRHcm91cCAqKXBhZ2VHcm91cC53cmFwcGVy
KCk7Ci19Ci0KLX0KLQotQGludGVyZmFjZSBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwICgpIDxXS09i
amVjdD4KLUBlbmQKLQotI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dEdyb3VwUHJpdmF0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdD
b250ZXh0R3JvdXBQcml2YXRlLmgJKHJldmlzaW9uIDE1OTg3MykKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0R3JvdXBQcml2YXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgPFdlYktpdDIv
V0tCcm93c2luZ0NvbnRleHRHcm91cC5oPgotCi0jaWYgV0tfQVBJX0VOQUJMRUQKLQotI2ltcG9y
dCA8V2ViS2l0Mi9XS0Jhc2UuaD4KLQotQGludGVyZmFjZSBXS0Jyb3dzaW5nQ29udGV4dEdyb3Vw
IChQcml2YXRlKQotCi1AcHJvcGVydHkocmVhZG9ubHkpIFdLUGFnZUdyb3VwUmVmIF9wYWdlR3Jv
dXBSZWY7Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3Np
bmdDb250ZXh0TG9hZERlbGVnYXRlLmgJKHJldmlzaW9uIDE1OTg3MykKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgotCi1AY2xhc3MgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVy
OwotQGNsYXNzIFdLQmFja0ZvcndhcmRMaXN0SXRlbTsKLQotQHByb3RvY29sIFdLQnJvd3NpbmdD
b250ZXh0TG9hZERlbGVnYXRlIDxOU09iamVjdD4KLUBvcHRpb25hbAotCi0vKiBTZW50IHdoZW4g
dGhlIHByb3Zpc2lvbmFsIGxvYWQgYmVnaW5zLiAqLwotLSAodm9pZClicm93c2luZ0NvbnRleHRD
b250cm9sbGVyRGlkU3RhcnRQcm92aXNpb25hbExvYWQ6KFdLQnJvd3NpbmdDb250ZXh0Q29udHJv
bGxlciAqKXNlbmRlcjsKLQotLyogU2VudCBpZiBhIHNlcnZlci1zaWRlIHJlZGlyZWN0IHdhcyBy
ZWNpZXZlZC4gKi8KLS0gKHZvaWQpYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckRpZFJlY2VpdmVT
ZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZDooV0tCcm93c2luZ0NvbnRleHRDb250cm9s
bGVyICopc2VuZGVyOwotCi0vKiBTZW50IGlmIHRoZSBwcm92aW9uYWwgbG9hZCBmYWlscy4gKi8K
LS0gKHZvaWQpYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckRpZEZhaWxQcm92aXNpb25hbExvYWQ6
KFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqKXNlbmRlciB3aXRoRXJyb3I6KE5TRXJyb3Ig
KillcnJvcjsKLQotLyogU2VudCB3aGVuIHRoZSBsb2FkIGdldHMgY29tbWl0dGVkLiAqLwotLSAo
dm9pZClicm93c2luZ0NvbnRleHRDb250cm9sbGVyRGlkQ29tbWl0TG9hZDooV0tCcm93c2luZ0Nv
bnRleHRDb250cm9sbGVyICopc2VuZGVyOwotCi0vKiBTZW50IHdoZW4gdGhlIGxvYWQgY29tcGxl
dGVzLiAqLwotLSAodm9pZClicm93c2luZ0NvbnRleHRDb250cm9sbGVyRGlkRmluaXNoTG9hZDoo
V0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopc2VuZGVyOwotCi0vKiBTZW50IGlmIHRoZSBj
b21taXRlZCBsb2FkIGZhaWxzLiAqLwotLSAodm9pZClicm93c2luZ0NvbnRleHRDb250cm9sbGVy
RGlkRmFpbExvYWQ6KFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqKXNlbmRlciB3aXRoRXJy
b3I6KE5TRXJyb3IgKillcnJvcjsKLQotLSAodm9pZClicm93c2luZ0NvbnRleHRDb250cm9sbGVy
RGlkU3RhcnRQcm9ncmVzczooV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopc2VuZGVyOwot
LSAodm9pZClicm93c2luZ0NvbnRleHRDb250cm9sbGVyOihXS0Jyb3dzaW5nQ29udGV4dENvbnRy
b2xsZXIgKilzZW5kZXIgZXN0aW1hdGVkUHJvZ3Jlc3NDaGFuZ2VkVG86KGRvdWJsZSllc3RpbWF0
ZWRQcm9ncmVzczsKLS0gKHZvaWQpYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckRpZEZpbmlzaFBy
b2dyZXNzOihXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKilzZW5kZXI7Ci0KLS0gKHZvaWQp
YnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdDooV0tCcm93
c2luZ0NvbnRleHRDb250cm9sbGVyICopc2VuZGVyIGFkZGVkSXRlbTooV0tCYWNrRm9yd2FyZExp
c3RJdGVtICopYWRkZWRJdGVtIHJlbW92ZWRJdGVtczooTlNBcnJheSAqKXJlbW92ZWRJdGVtczsK
LQotQGVuZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2lu
Z0NvbnRleHRQb2xpY3lEZWxlZ2F0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0UG9saWN5RGVsZWdhdGUuaAkocmV2aXNp
b24gMTU5ODczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2lu
Z0NvbnRleHRQb2xpY3lEZWxlZ2F0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY2ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLSNpbXBvcnQg
PFdlYktpdDIvV0tEZWNsYXJhdGlvblNwZWNpZmllcnMuaD4KLQotQGNsYXNzIFdLQnJvd3NpbmdD
b250ZXh0Q29udHJvbGxlcjsKLQotLyogQ29uc3RhbnRzIGZvciBwb2xpY3kgYWN0aW9uIGRpY3Rp
b25hcmllcyAqLwotV0tfRVhQT1JUIGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IFdLQWN0aW9uSXNN
YWluRnJhbWVLZXk7ICAgICAgICAgLy8gTlNOdW1iZXIgKEJPT0wpCi1XS19FWFBPUlQgZXh0ZXJu
IE5TU3RyaW5nICogY29uc3QgV0tBY3Rpb25OYXZpZ2F0aW9uVHlwZUtleTsgICAgICAvLyBOU051
bWJlciAoV0tOYXZpZ2F0aW9uVHlwZSkKLVdLX0VYUE9SVCBleHRlcm4gTlNTdHJpbmcgKiBjb25z
dCBXS0FjdGlvbk1vdXNlQnV0dG9uS2V5OyAgICAgICAgIC8vIE5TTnVtYmVyICgwIGZvciBsZWZ0
IGJ1dHRvbiwgMSBmb3IgbWlkZGxlIGJ1dHRvbiwgMiBmb3IgcmlnaHQgYnV0dG9uKQotV0tfRVhQ
T1JUIGV4dGVybiBOU1N0cmluZyAqIGNvbnN0IFdLQWN0aW9uTW9kaWZpZXJGbGFnc0tleTsgICAg
ICAgLy8gTlNOdW1iZXIgKHVuc2lnbmVkKQotV0tfRVhQT1JUIGV4dGVybiBOU1N0cmluZyAqIGNv
bnN0IFdLQWN0aW9uVVJMUmVxdWVzdEtleTsgICAgICAgICAgLy8gTlNVUkxSZXF1ZXN0Ci1XS19F
WFBPUlQgZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgV0tBY3Rpb25VUkxSZXNwb25zZUtleTsgICAg
ICAgICAvLyBOU1VSTFJlc3BvbnNlCi1XS19FWFBPUlQgZXh0ZXJuIE5TU3RyaW5nICogY29uc3Qg
V0tBY3Rpb25GcmFtZU5hbWVLZXk7ICAgICAgICAgICAvLyBOU1N0cmluZwotV0tfRVhQT1JUIGV4
dGVybiBOU1N0cmluZyAqIGNvbnN0IFdLQWN0aW9uT3JpZ2luYXRpbmdGcmFtZVVSTEtleTsgLy8g
TlNVUkwKLVdLX0VYUE9SVCBleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBXS0FjdGlvbkNhblNob3dN
SU1FVHlwZUtleTsgICAgIC8vIE5TTnVtYmVyIChCT09MKQotCi10eXBlZGVmIE5TX0VOVU0oTlNV
SW50ZWdlciwgV0tOYXZpZ2F0aW9uVHlwZSkgewotICAgIFdLTmF2aWdhdGlvblR5cGVMaW5rQ2xp
Y2tlZCwKLSAgICBXS05hdmlnYXRpb25UeXBlRm9ybVN1Ym1pdHRlZCwKLSAgICBXS05hdmlnYXRp
b25UeXBlQmFja0ZvcndhcmQsCi0gICAgV0tOYXZpZ2F0aW9uVHlwZVJlbG9hZCwKLSAgICBXS05h
dmlnYXRpb25UeXBlRm9ybVJlc3VibWl0dGVkLAotICAgIFdLTmF2aWdhdGlvblR5cGVPdGhlcgot
fTsKLQotdHlwZWRlZiBOU19FTlVNKE5TVUludGVnZXIsIFdLUG9saWN5RGVjaXNpb24pIHsKLSAg
ICBXS1BvbGljeURlY2lzaW9uQ2FuY2VsLAotICAgIFdLUG9saWN5RGVjaXNpb25BbGxvdywKLSAg
ICBXS1BvbGljeURlY2lzaW9uQmVjb21lRG93bmxvYWQKLX07Ci0KLXR5cGVkZWYgdm9pZCAoXldL
UG9saWN5RGVjaXNpb25IYW5kbGVyKShXS1BvbGljeURlY2lzaW9uKTsKLQotQHByb3RvY29sIFdL
QnJvd3NpbmdDb250ZXh0UG9saWN5RGVsZWdhdGUgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0KLS0g
KHZvaWQpYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjooV0tCcm93c2luZ0NvbnRleHRDb250cm9s
bGVyICopc2VuZGVyIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246KE5TRGljdGlvbmFy
eSAqKWFjdGlvbkluZm9ybWF0aW9uIGRlY2lzaW9uSGFuZGxlcjooV0tQb2xpY3lEZWNpc2lvbkhh
bmRsZXIpZGVjaXNpb25IYW5kbGVyOwotLSAodm9pZClicm93c2luZ0NvbnRleHRDb250cm9sbGVy
OihXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKilzZW5kZXIgZGVjaWRlUG9saWN5Rm9yTmV3
V2luZG93QWN0aW9uOihOU0RpY3Rpb25hcnkgKilhY3Rpb25JbmZvcm1hdGlvbiBkZWNpc2lvbkhh
bmRsZXI6KFdLUG9saWN5RGVjaXNpb25IYW5kbGVyKWRlY2lzaW9uSGFuZGxlcjsKLS0gKHZvaWQp
YnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjooV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICop
c2VuZGVyIGRlY2lkZVBvbGljeUZvclJlc3BvbnNlQWN0aW9uOihOU0RpY3Rpb25hcnkgKilhY3Rp
b25JbmZvcm1hdGlvbiBkZWNpc2lvbkhhbmRsZXI6KFdLUG9saWN5RGVjaXNpb25IYW5kbGVyKWRl
Y2lzaW9uSGFuZGxlcjsKLQotQGVuZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9tYWMvV0tDb25uZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9tYWMvV0tDb25uZWN0aW9uLmgJKHJldmlzaW9uIDE1OTg3MykKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQ29ubmVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0IDxXZWJLaXQyL1dLRm91bmRhdGlv
bi5oPgotCi0jaWYgV0tfQVBJX0VOQUJMRUQKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+Ci0KLUBjbGFzcyBXS0Nvbm5lY3Rpb247Ci1AY2xhc3MgV0tSZW1vdGVPYmplY3RSZWdp
c3RyeTsKLQotQHByb3RvY29sIFdLQ29ubmVjdGlvbkRlbGVnYXRlIDxOU09iamVjdD4KLQotLSAo
dm9pZCljb25uZWN0aW9uOihXS0Nvbm5lY3Rpb24gKiljb25uZWN0aW9uIGRpZFJlY2VpdmVNZXNz
YWdlV2l0aE5hbWU6KE5TU3RyaW5nICopbWVzc2FnZU5hbWUgYm9keTooaWQpbWVzc2FnZUJvZHk7
Ci0tICh2b2lkKWNvbm5lY3Rpb25EaWRDbG9zZTooV0tDb25uZWN0aW9uICopY29ubmVjdGlvbjsK
LQotQGVuZAotCi1XS19BUElfQ0xBU1MKLUBpbnRlcmZhY2UgV0tDb25uZWN0aW9uIDogTlNPYmpl
Y3QKLQotLSAodm9pZClzZW5kTWVzc2FnZVdpdGhOYW1lOihOU1N0cmluZyAqKW1lc3NhZ2VOYW1l
IGJvZHk6KGlkKW1lc3NhZ2VCb2R5OwotCi1AcHJvcGVydHkgKGFzc2lnbikgaWQgPFdLQ29ubmVj
dGlvbkRlbGVnYXRlPiBkZWxlZ2F0ZTsKLQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBXS1JlbW90ZU9iamVjdFJlZ2lzdHJ5ICpyZW1vdGVPYmplY3RSZWdpc3RyeTsKLQotQGVuZAot
Ci0jZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvbWFjL1dLQ29ubmVjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9XS0Nvbm5lY3Rpb24ubW0JKHJldmlzaW9uIDE1OTg3MykKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQ29ubmVjdGlvbi5tbQkod29ya2luZyBj
b3B5KQpAQCAtMSwxMjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiV0tDb25uZWN0aW9uSW50ZXJuYWwuaCIKLQotI2lmIFdLX0FQSV9FTkFCTEVECi0K
LSNpbXBvcnQgIk9iakNPYmplY3RHcmFwaC5oIgotI2ltcG9ydCAiV0tDb25uZWN0aW9uUmVmLmgi
Ci0jaW1wb3J0ICJXS0RhdGEuaCIKLSNpbXBvcnQgIldLUmV0YWluUHRyLmgiCi0jaW1wb3J0ICJX
S1N0cmluZ0NGLmgiCi0jaW1wb3J0ICJXS1JlbW90ZU9iamVjdFJlZ2lzdHJ5SW50ZXJuYWwuaCIK
LSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQot
QGltcGxlbWVudGF0aW9uIFdLQ29ubmVjdGlvbiB7Ci0gICAgLy8gVW5kZXJseWluZyBjb25uZWN0
aW9uIG9iamVjdC4KLSAgICBXS1JldGFpblB0cjxXS0Nvbm5lY3Rpb25SZWY+IF9jb25uZWN0aW9u
UmVmOwotCi0gICAgUmV0YWluUHRyPFdLUmVtb3RlT2JqZWN0UmVnaXN0cnk+IF9yZW1vdGVPYmpl
Y3RSZWdpc3RyeTsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgV0tDb25uZWN0aW9uU2V0
Q29ubmVjdGlvbkNsaWVudChfY29ubmVjdGlvblJlZi5nZXQoKSwgMCk7Ci0KLSAgICBbc3VwZXIg
ZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2VuZE1lc3NhZ2VXaXRoTmFtZTooTlNTdHJpbmcgKilt
ZXNzYWdlTmFtZSBib2R5OihpZCltZXNzYWdlQm9keQotewotICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB3a01lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmlu
ZygoQ0ZTdHJpbmdSZWYpbWVzc2FnZU5hbWUpKTsKLSAgICBSZWZQdHI8T2JqQ09iamVjdEdyYXBo
PiB3a01lc3NhZ2VCb2R5ID0gT2JqQ09iamVjdEdyYXBoOjpjcmVhdGUobWVzc2FnZUJvZHkpOwot
Ci0gICAgV0tDb25uZWN0aW9uUG9zdE1lc3NhZ2UoX2Nvbm5lY3Rpb25SZWYuZ2V0KCksIHdrTWVz
c2FnZU5hbWUuZ2V0KCksIChXS1R5cGVSZWYpd2tNZXNzYWdlQm9keS5nZXQoKSk7Ci19Ci0KLS0g
KFdLUmVtb3RlT2JqZWN0UmVnaXN0cnkgKilyZW1vdGVPYmplY3RSZWdpc3RyeQotewotICAgIGlm
ICghX3JlbW90ZU9iamVjdFJlZ2lzdHJ5KQotICAgICAgICBfcmVtb3RlT2JqZWN0UmVnaXN0cnkg
PSBhZG9wdE5TKFtbV0tSZW1vdGVPYmplY3RSZWdpc3RyeSBhbGxvY10gX2luaXRXaXRoQ29ubmVj
dGlvblJlZjpfY29ubmVjdGlvblJlZi5nZXQoKV0pOwotCi0gICAgcmV0dXJuIF9yZW1vdGVPYmpl
Y3RSZWdpc3RyeS5nZXQoKTsKLX0KLQotc3RhdGljIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoV0tD
b25uZWN0aW9uUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VC
b2R5LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIFdLQ29ubmVjdGlvbiAqY29ubmVj
dGlvbiA9IChXS0Nvbm5lY3Rpb24gKiljbGllbnRJbmZvOwotCi0gICAgaWYgKFtjb25uZWN0aW9u
LT5fcmVtb3RlT2JqZWN0UmVnaXN0cnkgX2hhbmRsZU1lc3NhZ2VXaXRoTmFtZTptZXNzYWdlTmFt
ZSBib2R5Om1lc3NhZ2VCb2R5XSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFtjb25uZWN0
aW9uLmRlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoY29ubmVjdGlvbjpkaWRS
ZWNlaXZlTWVzc2FnZVdpdGhOYW1lOmJvZHk6KV0pIHsKLSAgICAgICAgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiBuc01lc3NhZ2VOYW1lID0gYWRvcHRDRihXS1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBtZXNzYWdlTmFtZSkpOwotICAgICAgICBSZXRhaW5QdHI8aWQ+IG5z
TWVzc2FnZUJvZHkgPSAoKE9iakNPYmplY3RHcmFwaCopbWVzc2FnZUJvZHkpLT5yb290T2JqZWN0
KCk7Ci0KLSAgICAgICAgW2Nvbm5lY3Rpb24uZGVsZWdhdGUgY29ubmVjdGlvbjpjb25uZWN0aW9u
IGRpZFJlY2VpdmVNZXNzYWdlV2l0aE5hbWU6KE5TU3RyaW5nICopbnNNZXNzYWdlTmFtZS5nZXQo
KSBib2R5Om5zTWVzc2FnZUJvZHkuZ2V0KCldOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgZGlk
Q2xvc2UoV0tDb25uZWN0aW9uUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIFdL
Q29ubmVjdGlvbiAqY29ubmVjdGlvbiA9IChXS0Nvbm5lY3Rpb24gKiljbGllbnRJbmZvOwotICAg
IGlmIChbY29ubmVjdGlvbi5kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNv
bm5lY3Rpb25EaWRDbG9zZTopXSkgewotICAgICAgICBbY29ubmVjdGlvbi5kZWxlZ2F0ZSBjb25u
ZWN0aW9uRGlkQ2xvc2U6Y29ubmVjdGlvbl07Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBzZXRV
cENsaWVudChXS0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIFdLQ29ubmVjdGlvblJlZiBjb25uZWN0
aW9uUmVmKQotewotICAgIFdLQ29ubmVjdGlvbkNsaWVudCBjbGllbnQ7Ci0gICAgbWVtc2V0KCZj
bGllbnQsIDAsIHNpemVvZihjbGllbnQpKTsKLQotICAgIGNsaWVudC52ZXJzaW9uID0gV0tDb25u
ZWN0aW9uQ2xpZW50Q3VycmVudFZlcnNpb247Ci0gICAgY2xpZW50LmNsaWVudEluZm8gPSBjb25u
ZWN0aW9uOwotICAgIGNsaWVudC5kaWRSZWNlaXZlTWVzc2FnZSA9IGRpZFJlY2VpdmVNZXNzYWdl
OwotICAgIGNsaWVudC5kaWRDbG9zZSA9IGRpZENsb3NlOwotCi0gICAgV0tDb25uZWN0aW9uU2V0
Q29ubmVjdGlvbkNsaWVudChjb25uZWN0aW9uUmVmLCAmY2xpZW50KTsKLX0KLQotLSAoaWQpX2lu
aXRXaXRoQ29ubmVjdGlvblJlZjooV0tDb25uZWN0aW9uUmVmKWNvbm5lY3Rpb25SZWYKLXsKLSAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5p
bDsKLQotICAgIF9jb25uZWN0aW9uUmVmID0gY29ubmVjdGlvblJlZjsKLQotICAgIHNldFVwQ2xp
ZW50KHNlbGYsIF9jb25uZWN0aW9uUmVmLmdldCgpKTsKLQotICAgIHJldHVybiBzZWxmOwotfQot
Ci1AZW5kCi0KLSNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9tYWMvV0tDb25uZWN0aW9uSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Nvbm5lY3Rpb25JbnRlcm5hbC5oCShy
ZXZpc2lvbiAxNTk4NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Nv
bm5lY3Rpb25JbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW1wb3J0ICJXS0Nvbm5lY3Rpb24uaCIKLQotI2lmIFdLX0FQSV9FTkFCTEVECi0K
LSNpbXBvcnQgPFdlYktpdDIvV0tCYXNlLmg+Ci0KLUBpbnRlcmZhY2UgV0tDb25uZWN0aW9uICgp
Ci0KLS0gKGlkKV9pbml0V2l0aENvbm5lY3Rpb25SZWY6KFdLQ29ubmVjdGlvblJlZiljb25uZWN0
aW9uUmVmOwotCi1AZW5kCi0KLSNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcm9jZXNzR3JvdXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1Byb2Nlc3NHcm91cC5oCShyZXZp
c2lvbiAxNTk4NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1Byb2Nl
c3NHcm91cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW1wb3J0IDxXZWJLaXQyL1dLRm91bmRhdGlvbi5oPgotCi0jaWYgV0tfQVBJX0VOQUJMRUQKLQot
I2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0jaW1wb3J0IDxXZWJLaXQyL1dLQ29u
bmVjdGlvbi5oPgotCi1AY2xhc3MgV0tQcm9jZXNzR3JvdXA7Ci0KLUBwcm90b2NvbCBXS1Byb2Nl
c3NHcm91cERlbGVnYXRlIDxOU09iamVjdD4KLUBvcHRpb25hbAotCi0tIChpZClwcm9jZXNzR3Jv
dXBXaWxsQ3JlYXRlQ29ubmVjdGlvblRvV2ViUHJvY2Vzc1BsdWdJbjooV0tQcm9jZXNzR3JvdXAg
Kilwcm9jZXNzR3JvdXA7Ci0KLUByZXF1aXJlZAotCi0tICh2b2lkKXByb2Nlc3NHcm91cDooV0tQ
cm9jZXNzR3JvdXAgKilwcm9jZXNzR3JvdXAgZGlkQ3JlYXRlQ29ubmVjdGlvblRvV2ViUHJvY2Vz
c1BsdWdJbjooV0tDb25uZWN0aW9uICopY29ubmVjdGlvbjsKLQotQGVuZAotCi1XS19BUElfQ0xB
U1MKLUBpbnRlcmZhY2UgV0tQcm9jZXNzR3JvdXAgOiBOU09iamVjdAotCi0tIChpZClpbml0V2l0
aEluamVjdGVkQnVuZGxlVVJMOihOU1VSTCAqKWJ1bmRsZVVSTDsKLQotCi0jcHJhZ21hIG1hcmsg
RGVsZWdhdGVzCi0KLUBwcm9wZXJ0eSAoYXNzaWduKSBpZCA8V0tQcm9jZXNzR3JvdXBEZWxlZ2F0
ZT4gZGVsZWdhdGU7Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1Byb2Nlc3NHcm91cC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1Byb2Nlc3NHcm91cC5t
bQkocmV2aXNpb24gMTU5ODczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
V0tQcm9jZXNzR3JvdXAubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsMjIxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldLUHJvY2Vzc0dyb3VwSW50ZXJu
YWwuaCIKLQotI2lmIFdLX0FQSV9FTkFCTEVECi0KLSNpbXBvcnQgIkFQSU5hdmlnYXRpb25EYXRh
LmgiCi0jaW1wb3J0ICJPYmpDT2JqZWN0R3JhcGguaCIKLSNpbXBvcnQgIldLQVBJQ2FzdC5oIgot
I2ltcG9ydCAiV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVySW50ZXJuYWwuaCIKLSNpbXBvcnQg
IldLQnJvd3NpbmdDb250ZXh0SGlzdG9yeURlbGVnYXRlLmgiCi0jaW1wb3J0ICJXS0Nvbm5lY3Rp
b25JbnRlcm5hbC5oIgotI2ltcG9ydCAiV0tDb250ZXh0LmgiCi0jaW1wb3J0ICJXS05TU3RyaW5n
LmgiCi0jaW1wb3J0ICJXS05TVVJMLmgiCi0jaW1wb3J0ICJXS05hdmlnYXRpb25EYXRhSW50ZXJu
YWwuaCIKLSNpbXBvcnQgIldLUmV0YWluUHRyLmgiCi0jaW1wb3J0ICJXS1N0cmluZ0NGLmgiCi0j
aW1wb3J0ICJXZWJGcmFtZVByb3h5LmgiCi0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0KLSNp
ZiBQTEFURk9STShJT1MpCi0jaW1wb3J0ICJXS0FQSUNhc3QuaCIKLSNpbXBvcnQgIldLR2VvbG9j
YXRpb25Qcm92aWRlcklPUy5oIgotI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVGhyZWFkU3lzdGVt
SW50ZXJmYWNlLmg+Ci0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQotQGltcGxl
bWVudGF0aW9uIFdLUHJvY2Vzc0dyb3VwIHsKLSAgICBzdGQ6OmFsaWduZWRfc3RvcmFnZTxzaXpl
b2YoV2ViQ29udGV4dCksIHN0ZDo6YWxpZ25tZW50X29mPFdlYkNvbnRleHQ+Ojp2YWx1ZT46OnR5
cGUgX2NvbnRleHQ7Ci0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgUmV0YWluUHRyPFdLR2VvbG9j
YXRpb25Qcm92aWRlcklPUz4gX2dlb2xvY2F0aW9uUHJvdmlkZXI7Ci0jZW5kaWYgLy8gUExBVEZP
Uk0oSU9TKQotfQotCi1zdGF0aWMgdm9pZCBkaWRDcmVhdGVDb25uZWN0aW9uKFdLQ29udGV4dFJl
ZiwgV0tDb25uZWN0aW9uUmVmIGNvbm5lY3Rpb25SZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Ci17Ci0gICAgV0tQcm9jZXNzR3JvdXAgKnByb2Nlc3NHcm91cCA9IChXS1Byb2Nlc3NHcm91cCAq
KWNsaWVudEluZm87Ci0gICAgaWYgKFtwcm9jZXNzR3JvdXAuZGVsZWdhdGUgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3Rvcihwcm9jZXNzR3JvdXA6ZGlkQ3JlYXRlQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzc1BsdWdJbjopXSkgewotICAgICAgICBSZXRhaW5QdHI8V0tDb25uZWN0aW9uPiBjb25uZWN0
aW9uID0gYWRvcHROUyhbW1dLQ29ubmVjdGlvbiBhbGxvY10gX2luaXRXaXRoQ29ubmVjdGlvblJl
Zjpjb25uZWN0aW9uUmVmXSk7Ci0gICAgICAgIFtwcm9jZXNzR3JvdXAuZGVsZWdhdGUgcHJvY2Vz
c0dyb3VwOnByb2Nlc3NHcm91cCBkaWRDcmVhdGVDb25uZWN0aW9uVG9XZWJQcm9jZXNzUGx1Z0lu
OmNvbm5lY3Rpb24uZ2V0KCldOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgc2V0VXBDb25uZWN0
aW9uQ2xpZW50KFdLUHJvY2Vzc0dyb3VwICpwcm9jZXNzR3JvdXAsIFdLQ29udGV4dFJlZiBjb250
ZXh0UmVmKQotewotICAgIFdLQ29udGV4dENvbm5lY3Rpb25DbGllbnQgY29ubmVjdGlvbkNsaWVu
dDsKLSAgICBtZW1zZXQoJmNvbm5lY3Rpb25DbGllbnQsIDAsIHNpemVvZihjb25uZWN0aW9uQ2xp
ZW50KSk7Ci0KLSAgICBjb25uZWN0aW9uQ2xpZW50LnZlcnNpb24gPSBrV0tDb250ZXh0Q29ubmVj
dGlvbkNsaWVudEN1cnJlbnRWZXJzaW9uOwotICAgIGNvbm5lY3Rpb25DbGllbnQuY2xpZW50SW5m
byA9IHByb2Nlc3NHcm91cDsKLSAgICBjb25uZWN0aW9uQ2xpZW50LmRpZENyZWF0ZUNvbm5lY3Rp
b24gPSBkaWRDcmVhdGVDb25uZWN0aW9uOwotCi0gICAgV0tDb250ZXh0U2V0Q29ubmVjdGlvbkNs
aWVudChjb250ZXh0UmVmLCAmY29ubmVjdGlvbkNsaWVudCk7Ci19Ci0KLXN0YXRpYyBXS1R5cGVS
ZWYgZ2V0SW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhKFdLQ29udGV4dFJlZiwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICBXS1Byb2Nlc3NHcm91cCAqcHJvY2Vzc0dy
b3VwID0gKFdLUHJvY2Vzc0dyb3VwICopY2xpZW50SW5mbzsKLSAgICBpZiAoW3Byb2Nlc3NHcm91
cC5kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHByb2Nlc3NHcm91cFdpbGxD
cmVhdGVDb25uZWN0aW9uVG9XZWJQcm9jZXNzUGx1Z0luOildKSB7Ci0gICAgICAgIFJldGFpblB0
cjxpZD4gaW5pdGlhbGl6YXRpb25Vc2VyRGF0YSA9IFtwcm9jZXNzR3JvdXAuZGVsZWdhdGUgcHJv
Y2Vzc0dyb3VwV2lsbENyZWF0ZUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NQbHVnSW46cHJvY2Vzc0dy
b3VwXTsKLSAgICAgICAgUmVmUHRyPFdlYktpdDo6T2JqQ09iamVjdEdyYXBoPiB3a01lc3NhZ2VC
b2R5ID0gV2ViS2l0OjpPYmpDT2JqZWN0R3JhcGg6OmNyZWF0ZShpbml0aWFsaXphdGlvblVzZXJE
YXRhLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIChXS1R5cGVSZWYpd2tNZXNzYWdlQm9keS5yZWxl
YXNlKCkubGVha1JlZigpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9p
ZCBzZXRVcEluZWN0ZWRCdW5kbGVDbGllbnQoV0tQcm9jZXNzR3JvdXAgKnByb2Nlc3NHcm91cCwg
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCi17Ci0gICAgV0tDb250ZXh0SW5qZWN0ZWRCdW5kbGVD
bGllbnQgaW5qZWN0ZWRCdW5kbGVDbGllbnQ7Ci0gICAgbWVtc2V0KCZpbmplY3RlZEJ1bmRsZUNs
aWVudCwgMCwgc2l6ZW9mKGluamVjdGVkQnVuZGxlQ2xpZW50KSk7Ci0KLSAgICBpbmplY3RlZEJ1
bmRsZUNsaWVudC52ZXJzaW9uID0ga1dLQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50Q3VycmVu
dFZlcnNpb247Ci0gICAgaW5qZWN0ZWRCdW5kbGVDbGllbnQuY2xpZW50SW5mbyA9IHByb2Nlc3NH
cm91cDsKLSAgICBpbmplY3RlZEJ1bmRsZUNsaWVudC5nZXRJbmplY3RlZEJ1bmRsZUluaXRpYWxp
emF0aW9uVXNlckRhdGEgPSBnZXRJbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGE7
Ci0KLSAgICBXS0NvbnRleHRTZXRJbmplY3RlZEJ1bmRsZUNsaWVudChjb250ZXh0UmVmLCAmaW5q
ZWN0ZWRCdW5kbGVDbGllbnQpOwotfQotCi1zdGF0aWMgdm9pZCBkaWROYXZpZ2F0ZVdpdGhOYXZp
Z2F0aW9uRGF0YShXS0NvbnRleHRSZWYsIFdLUGFnZVJlZiBwYWdlUmVmLCBXS05hdmlnYXRpb25E
YXRhUmVmIG5hdmlnYXRpb25EYXRhUmVmLCBXS0ZyYW1lUmVmIGZyYW1lUmVmLCBjb25zdCB2b2lk
KikKLXsKLSAgICBpZiAoIXRvSW1wbChmcmFtZVJlZiktPmlzTWFpbkZyYW1lKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqY29udHJvbGxlciA9
IFtXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgX2Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJG
b3JQYWdlUmVmOnBhZ2VSZWZdOwotICAgIGlmIChbY29udHJvbGxlci5oaXN0b3J5RGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihicm93c2luZ0NvbnRleHRDb250cm9sbGVyOmRp
ZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhOildKQotICAgICAgICBbY29udHJvbGxlci5oaXN0
b3J5RGVsZWdhdGUgYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjpjb250cm9sbGVyIGRpZE5hdmln
YXRlV2l0aE5hdmlnYXRpb25EYXRhOndyYXBwZXIoKnRvSW1wbChuYXZpZ2F0aW9uRGF0YVJlZikp
XTsKLX0KLQotc3RhdGljIHZvaWQgZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KFdLQ29udGV4dFJl
ZiwgV0tQYWdlUmVmIHBhZ2VSZWYsIFdLVVJMUmVmIHNvdXJjZVVSTFJlZiwgV0tVUkxSZWYgZGVz
dGluYXRpb25VUkxSZWYsIFdLRnJhbWVSZWYgZnJhbWVSZWYsIGNvbnN0IHZvaWQqKQotewotICAg
IGlmICghdG9JbXBsKGZyYW1lUmVmKS0+aXNNYWluRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpjb250cm9sbGVyID0gW1dLQnJvd3Np
bmdDb250ZXh0Q29udHJvbGxlciBfYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckZvclBhZ2VSZWY6
cGFnZVJlZl07Ci0gICAgaWYgKFtjb250cm9sbGVyLmhpc3RvcnlEZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXI6ZGlkUGVyZm9ybUNs
aWVudFJlZGlyZWN0RnJvbVVSTDp0b1VSTDopXSkKLSAgICAgICAgW2NvbnRyb2xsZXIuaGlzdG9y
eURlbGVnYXRlIGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXI6Y29udHJvbGxlciBkaWRQZXJmb3Jt
Q2xpZW50UmVkaXJlY3RGcm9tVVJMOndyYXBwZXIoKnRvSW1wbChzb3VyY2VVUkxSZWYpKSB0b1VS
TDp3cmFwcGVyKCp0b0ltcGwoZGVzdGluYXRpb25VUkxSZWYpKV07Ci19Ci0KLXN0YXRpYyB2b2lk
IGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdChXS0NvbnRleHRSZWYsIFdLUGFnZVJlZiBwYWdlUmVm
LCBXS1VSTFJlZiBzb3VyY2VVUkxSZWYsIFdLVVJMUmVmIGRlc3RpbmF0aW9uVVJMUmVmLCBXS0Zy
YW1lUmVmIGZyYW1lUmVmLCBjb25zdCB2b2lkKikKLXsKLSAgICBpZiAoIXRvSW1wbChmcmFtZVJl
ZiktPmlzTWFpbkZyYW1lKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdLQnJvd3NpbmdDb250
ZXh0Q29udHJvbGxlciAqY29udHJvbGxlciA9IFtXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIg
X2Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJGb3JQYWdlUmVmOnBhZ2VSZWZdOwotICAgIGlmIChb
Y29udHJvbGxlci5oaXN0b3J5RGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihi
cm93c2luZ0NvbnRleHRDb250cm9sbGVyOmRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdEZyb21VUkw6
dG9VUkw6KV0pCi0gICAgICAgIFtjb250cm9sbGVyLmhpc3RvcnlEZWxlZ2F0ZSBicm93c2luZ0Nv
bnRleHRDb250cm9sbGVyOmNvbnRyb2xsZXIgZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0RnJvbVVS
TDp3cmFwcGVyKCp0b0ltcGwoc291cmNlVVJMUmVmKSkgdG9VUkw6d3JhcHBlcigqdG9JbXBsKGRl
c3RpbmF0aW9uVVJMUmVmKSldOwotfQotCi1zdGF0aWMgdm9pZCBkaWRVcGRhdGVIaXN0b3J5VGl0
bGUoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZVJlZiwgV0tTdHJpbmdSZWYgdGl0bGVSZWYs
IFdLVVJMUmVmIHVybFJlZiwgV0tGcmFtZVJlZiBmcmFtZVJlZiwgY29uc3Qgdm9pZCopCi17Ci0g
ICAgaWYgKCF0b0ltcGwoZnJhbWVSZWYpLT5pc01haW5GcmFtZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmNvbnRyb2xsZXIgPSBbV0tCcm93
c2luZ0NvbnRleHRDb250cm9sbGVyIF9icm93c2luZ0NvbnRleHRDb250cm9sbGVyRm9yUGFnZVJl
ZjpwYWdlUmVmXTsKLSAgICBpZiAoW2NvbnRyb2xsZXIuaGlzdG9yeURlbGVnYXRlIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IoYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjpkaWRVcGRhdGVI
aXN0b3J5VGl0bGU6Zm9yVVJMOildKQotICAgICAgICBbY29udHJvbGxlci5oaXN0b3J5RGVsZWdh
dGUgYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjpjb250cm9sbGVyIGRpZFVwZGF0ZUhpc3RvcnlU
aXRsZTp3cmFwcGVyKCp0b0ltcGwodGl0bGVSZWYpKSBmb3JVUkw6d3JhcHBlcigqdG9JbXBsKHVy
bFJlZikpXTsKLX0KLQotc3RhdGljIHZvaWQgc2V0VXBIaXN0b3J5Q2xpZW50KFdLUHJvY2Vzc0dy
b3VwICpwcm9jZXNzR3JvdXAsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQotewotICAgIFdLQ29u
dGV4dEhpc3RvcnlDbGllbnQgaGlzdG9yeUNsaWVudDsKLSAgICBtZW1zZXQoJmhpc3RvcnlDbGll
bnQsIDAsIHNpemVvZihoaXN0b3J5Q2xpZW50KSk7Ci0KLSAgICBoaXN0b3J5Q2xpZW50LnZlcnNp
b24gPSBrV0tDb250ZXh0SGlzdG9yeUNsaWVudEN1cnJlbnRWZXJzaW9uOwotICAgIGhpc3RvcnlD
bGllbnQuY2xpZW50SW5mbyA9IHByb2Nlc3NHcm91cDsKLSAgICBoaXN0b3J5Q2xpZW50LmRpZE5h
dmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhID0gZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGE7
Ci0gICAgaGlzdG9yeUNsaWVudC5kaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QgPSBkaWRQZXJmb3Jt
Q2xpZW50UmVkaXJlY3Q7Ci0gICAgaGlzdG9yeUNsaWVudC5kaWRQZXJmb3JtU2VydmVyUmVkaXJl
Y3QgPSBkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3Q7Ci0gICAgaGlzdG9yeUNsaWVudC5kaWRVcGRh
dGVIaXN0b3J5VGl0bGUgPSBkaWRVcGRhdGVIaXN0b3J5VGl0bGU7Ci0KLSAgICBXS0NvbnRleHRT
ZXRIaXN0b3J5Q2xpZW50KGNvbnRleHRSZWYsICZoaXN0b3J5Q2xpZW50KTsKLX0KLQotLSAoaWQp
aW5pdAotewotICAgIHJldHVybiBbc2VsZiBpbml0V2l0aEluamVjdGVkQnVuZGxlVVJMOm5pbF07
Ci19Ci0KLS0gKGlkKWluaXRXaXRoSW5qZWN0ZWRCdW5kbGVVUkw6KE5TVVJMICopYnVuZGxlVVJM
Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgLy8gRklYTUU6IFJlbW92ZSBvbmNl
IDxyZGFyOi8vcHJvYmxlbS8xNTI1NjU3Mj4gaXMgZml4ZWQuCi0gICAgSW5pdFdlYkNvcmVUaHJl
YWRTeXN0ZW1JbnRlcmZhY2UoKTsKLSNlbmRpZgotCi0gICAgQVBJOjpPYmplY3Q6OmNvbnN0cnVj
dEluV3JhcHBlcjxXZWJDb250ZXh0PihzZWxmLCBidW5kbGVVUkwgPyBTdHJpbmcoW2J1bmRsZVVS
TCBwYXRoXSkgOiBTdHJpbmcoKSk7Ci0KLSAgICBzZXRVcENvbm5lY3Rpb25DbGllbnQoc2VsZiwg
dG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJDb250ZXh0Kj4oJl9jb250ZXh0KSkpOwotICAgIHNl
dFVwSW5lY3RlZEJ1bmRsZUNsaWVudChzZWxmLCB0b0FQSShyZWludGVycHJldF9jYXN0PFdlYkNv
bnRleHQqPigmX2NvbnRleHQpKSk7Ci0gICAgc2V0VXBIaXN0b3J5Q2xpZW50KHNlbGYsIHRvQVBJ
KHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29udGV4dCo+KCZfY29udGV4dCkpKTsKLQotICAgIHJldHVy
biBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICByZWludGVycHJldF9jYXN0PFdl
YkNvbnRleHQqPigmX2NvbnRleHQpLT5+V2ViQ29udGV4dCgpOwotCi0gICAgW3N1cGVyIGRlYWxs
b2NdOwotfQotCi0jcHJhZ21hIG1hcmsgV0tPYmplY3QgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24K
LQotLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKLXsKLSAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QVBJOjpPYmplY3QqPigmX2NvbnRleHQpOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRh
dGlvbiBXS1Byb2Nlc3NHcm91cCAoUHJpdmF0ZSkKLQotLSAoV0tDb250ZXh0UmVmKV9jb250ZXh0
UmVmCi17Ci0gICAgcmV0dXJuIHRvQVBJKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29udGV4dCo+KCZf
Y29udGV4dCkpOwotfQotCi0jaWYgUExBVEZPUk0oSU9TKQotLSAoV0tHZW9sb2NhdGlvblByb3Zp
ZGVySU9TICopX2dlb2xvY2F0aW9uUHJvdmlkZXIKLXsKLSAgICBpZiAoIV9nZW9sb2NhdGlvblBy
b3ZpZGVyKQotICAgICAgICBfZ2VvbG9jYXRpb25Qcm92aWRlciA9IGFkb3B0TlMoW1tXS0dlb2xv
Y2F0aW9uUHJvdmlkZXJJT1MgYWxsb2NdIGluaXRXaXRoQ29udGV4dDpyZWludGVycHJldF9jYXN0
PFdlYkNvbnRleHQqPigmX2NvbnRleHQpXSk7Ci0gICAgcmV0dXJuIF9nZW9sb2NhdGlvblByb3Zp
ZGVyLmdldCgpOwotfQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKLQotQGVuZAotCi0jZW5kaWYg
Ly8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1dLUHJvY2Vzc0dyb3VwSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9XS1Byb2Nlc3NHcm91cEludGVybmFsLmgJKHJldmlzaW9uIDE1OTg3
MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJvY2Vzc0dyb3VwSW50
ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lt
cG9ydCAiV0tQcm9jZXNzR3JvdXBQcml2YXRlLmgiCi0KLSNpZiBXS19BUElfRU5BQkxFRAotCi0j
aW1wb3J0ICJXS09iamVjdC5oIgotI2ltcG9ydCAiV2ViQ29udGV4dC5oIgotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotaW5saW5lIFdLUHJvY2Vzc0dyb3VwICp3cmFwcGVyKFdlYkNvbnRleHQmIGNv
bnRleHQpCi17Ci0gICAgQVNTRVJUKFtjb250ZXh0LndyYXBwZXIoKSBpc0tpbmRPZkNsYXNzOltX
S1Byb2Nlc3NHcm91cCBjbGFzc11dKTsKLSAgICByZXR1cm4gKFdLUHJvY2Vzc0dyb3VwICopY29u
dGV4dC53cmFwcGVyKCk7Ci19Ci0KLX0KLQotQGludGVyZmFjZSBXS1Byb2Nlc3NHcm91cCAoKSA8
V0tPYmplY3Q+Ci1AZW5kCi0KLSNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcm9jZXNzR3JvdXBQcml2YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcm9jZXNzR3JvdXBQ
cml2YXRlLmgJKHJldmlzaW9uIDE1OTg3MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1dLUHJvY2Vzc0dyb3VwUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0IDxXZWJLaXQyL1dLUHJvY2Vzc0dyb3VwLmg+Ci0K
LSNpZiBXS19BUElfRU5BQkxFRAotCi0jaW1wb3J0IDxXZWJLaXQyL1dLQmFzZS5oPgotCi0jaWYg
VEFSR0VUX09TX0lQSE9ORQotQGNsYXNzIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUzsKLSNlbmRp
ZgotCi1AaW50ZXJmYWNlIFdLUHJvY2Vzc0dyb3VwIChQcml2YXRlKQotCi1AcHJvcGVydHkocmVh
ZG9ubHkpIFdLQ29udGV4dFJlZiBfY29udGV4dFJlZjsKLSNpZiBUQVJHRVRfT1NfSVBIT05FCi1A
cHJvcGVydHkocmVhZG9ubHkpIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUyAqX2dlb2xvY2F0aW9u
UHJvdmlkZXI7Ci0jZW5kaWYKLQotQGVuZAotCi0jZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVHlwZVJlZldyYXBwZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1R5cGVSZWZX
cmFwcGVyLmgJKHJldmlzaW9uIDE1OTg3MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1dLVHlwZVJlZldyYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0MiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2ltcG9ydCA8V2ViS2l0Mi9XS0ZvdW5kYXRpb24uaD4KLQotI2lmIFdL
X0FQSV9FTkFCTEVECi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotI2ltcG9y
dCA8V2ViS2l0Mi9XS0Jhc2UuaD4KLQotV0tfQVBJX0NMQVNTCi1AaW50ZXJmYWNlIFdLVHlwZVJl
ZldyYXBwZXIgOiBOU09iamVjdAotCi0tIChpZClpbml0V2l0aE9iamVjdDooV0tUeXBlUmVmKW9i
amVjdDsKLQotQHByb3BlcnR5KHJlYWRvbmx5KSBXS1R5cGVSZWYgb2JqZWN0OwotCi1AZW5kCi0K
LSNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvV0tUeXBlUmVmV3JhcHBlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1R5cGVSZWZXcmFwcGVyLm1tCShyZXZpc2lvbiAxNTk4NzMp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1R5cGVSZWZXcmFwcGVyLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIldLVHlwZVJlZldyYXBwZXIuaCIKLQotI2lmIFdLX0FQSV9FTkFC
TEVECi0KLSNpbXBvcnQgIldLUmV0YWluUHRyLmgiCi0KLUBpbnRlcmZhY2UgV0tUeXBlUmVmV3Jh
cHBlciAoKSB7Ci0gICAgLy8gVW5kZXJseWluZyBXS1R5cGVSZWYuCi0gICAgV0tSZXRhaW5QdHI8
V0tUeXBlUmVmPiBfb2JqZWN0OwotfQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tUeXBlUmVm
V3JhcHBlcgotCi0tIChpZClpbml0V2l0aE9iamVjdDooV0tUeXBlUmVmKW9iamVjdAotewotICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmls
OwotCi0gICAgX29iamVjdCA9IG9iamVjdDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChX
S1R5cGVSZWYpb2JqZWN0Ci17Ci0gICAgcmV0dXJuIF9vYmplY3QuZ2V0KCk7Ci19Ci0KLUBlbmQK
LQotI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL21hYy9XS1ZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL21hYy9XS1ZpZXcuaAkocmV2aXNpb24gMTU5ODczKQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbXBvcnQgPFdlYktpdDIvV0tGb3VuZGF0aW9uLmg+Ci0KLSNpZiBU
QVJHRVRfT1NfSVBIT05FCi0jaW1wb3J0IDxVSUtpdC9VSUtpdC5oPgotI2Vsc2UKLSNpbXBvcnQg
PENvY29hL0NvY29hLmg+Ci0jZW5kaWYKLSNpbXBvcnQgPFdlYktpdDIvV0tEZWNsYXJhdGlvblNw
ZWNpZmllcnMuaD4KLQotQGNsYXNzIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjsKLUBjbGFz
cyBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwOwotQGNsYXNzIFdLUHJvY2Vzc0dyb3VwOwotQGNsYXNz
IFdLVmlld0RhdGE7Ci0KLSNpZiBUQVJHRVRfT1NfSVBIT05FCi1XS19FWFBPUlQKLUBpbnRlcmZh
Y2UgV0tWaWV3IDogVUlWaWV3IHsKLSNlbHNlCi1XS19FWFBPUlQKLUBpbnRlcmZhY2UgV0tWaWV3
IDogTlNWaWV3IDxOU1RleHRJbnB1dENsaWVudD4gewotI2VuZGlmCi1AcHJpdmF0ZQotICAgIFdL
Vmlld0RhdGEgKl9kYXRhOwotICAgIHVuc2lnbmVkIF91bnVzZWQ7Ci19Ci0KLSNpZiBXS19BUElf
RU5BQkxFRAotCi0jaWYgVEFSR0VUX09TX0lQSE9ORQotLSAoaWQpaW5pdFdpdGhGcmFtZTooQ0dS
ZWN0KWZyYW1lIHByb2Nlc3NHcm91cDooV0tQcm9jZXNzR3JvdXAgKilwcm9jZXNzR3JvdXAgYnJv
d3NpbmdDb250ZXh0R3JvdXA6KFdLQnJvd3NpbmdDb250ZXh0R3JvdXAgKilicm93c2luZ0NvbnRl
eHRHcm91cDsKLS0gKGlkKWluaXRXaXRoRnJhbWU6KENHUmVjdClmcmFtZSBwcm9jZXNzR3JvdXA6
KFdLUHJvY2Vzc0dyb3VwICopcHJvY2Vzc0dyb3VwIGJyb3dzaW5nQ29udGV4dEdyb3VwOihXS0Jy
b3dzaW5nQ29udGV4dEdyb3VwICopYnJvd3NpbmdDb250ZXh0R3JvdXAgcmVsYXRlZFRvVmlldzoo
V0tWaWV3ICopcmVsYXRlZFZpZXc7Ci0jZWxzZQotLSAoaWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0
KWZyYW1lIHByb2Nlc3NHcm91cDooV0tQcm9jZXNzR3JvdXAgKilwcm9jZXNzR3JvdXAgYnJvd3Np
bmdDb250ZXh0R3JvdXA6KFdLQnJvd3NpbmdDb250ZXh0R3JvdXAgKilicm93c2luZ0NvbnRleHRH
cm91cDsKLS0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBwcm9jZXNzR3JvdXA6KFdL
UHJvY2Vzc0dyb3VwICopcHJvY2Vzc0dyb3VwIGJyb3dzaW5nQ29udGV4dEdyb3VwOihXS0Jyb3dz
aW5nQ29udGV4dEdyb3VwICopYnJvd3NpbmdDb250ZXh0R3JvdXAgcmVsYXRlZFRvVmlldzooV0tW
aWV3ICopcmVsYXRlZFZpZXc7Ci0jZW5kaWYKLQotQHByb3BlcnR5KHJlYWRvbmx5KSBXS0Jyb3dz
aW5nQ29udGV4dENvbnRyb2xsZXIgKmJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXI7Ci0KLSNlbmRp
ZiAvLyBXS19BUElfRU5BQkxFRAotCi1AcHJvcGVydHkgQk9PTCBkcmF3c0JhY2tncm91bmQ7Ci1A
cHJvcGVydHkgQk9PTCBkcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZDsKLQotQGVuZApJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3UHJpdmF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld1ByaXZhdGUuaAko
cmV2aXNpb24gMTU5ODczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tW
aWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW1wb3J0IDxXZWJLaXQyL1dLQmFzZS5oPgotI2ltcG9ydCA8V2ViS2l0Mi9XS1ZpZXcuaD4K
LQotI2lmICFUQVJHRVRfT1NfSVBIT05FCi0KLXR5cGVkZWYgZW51bSB7Ci0gICAgV0tDb250ZW50
QW5jaG9yVG9wTGVmdCwKLSAgICBXS0NvbnRlbnRBbmNob3JUb3BSaWdodCwKLSAgICBXS0NvbnRl
bnRBbmNob3JCb3R0b21MZWZ0LAotICAgIFdLQ29udGVudEFuY2hvckJvdHRvbVJpZ2h0LAotfSBX
S0NvbnRlbnRBbmNob3I7Ci0KLSNlbmRpZgotCi1AaW50ZXJmYWNlIFdLVmlldyAoUHJpdmF0ZSkK
LQotLyogQyBTUEkgc3VwcG9ydC4gKi8KLQotQHByb3BlcnR5IChyZWFkb25seSkgV0tQYWdlUmVm
IHBhZ2VSZWY7Ci0KLSNpZiBUQVJHRVRfT1NfSVBIT05FCi0tIChpZClpbml0V2l0aEZyYW1lOihD
R1JlY3QpZnJhbWUgY29udGV4dFJlZjooV0tDb250ZXh0UmVmKWNvbnRleHRSZWYgcGFnZUdyb3Vw
UmVmOihXS1BhZ2VHcm91cFJlZilwYWdlR3JvdXBSZWY7Ci0tIChpZClpbml0V2l0aEZyYW1lOihD
R1JlY3QpZnJhbWUgY29udGV4dFJlZjooV0tDb250ZXh0UmVmKWNvbnRleHRSZWYgcGFnZUdyb3Vw
UmVmOihXS1BhZ2VHcm91cFJlZilwYWdlR3JvdXBSZWYgcmVsYXRlZFRvUGFnZTooV0tQYWdlUmVm
KXJlbGF0ZWRQYWdlOwotI2Vsc2UKLS0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBj
b250ZXh0UmVmOihXS0NvbnRleHRSZWYpY29udGV4dFJlZiBwYWdlR3JvdXBSZWY6KFdLUGFnZUdy
b3VwUmVmKXBhZ2VHcm91cFJlZjsKLS0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBj
b250ZXh0UmVmOihXS0NvbnRleHRSZWYpY29udGV4dFJlZiBwYWdlR3JvdXBSZWY6KFdLUGFnZUdy
b3VwUmVmKXBhZ2VHcm91cFJlZiByZWxhdGVkVG9QYWdlOihXS1BhZ2VSZWYpcmVsYXRlZFBhZ2U7
Ci0jZW5kaWYKLQotI2lmICFUQVJHRVRfT1NfSVBIT05FCi0KLUBwcm9wZXJ0eSBXS0NvbnRlbnRB
bmNob3IgY29udGVudEFuY2hvcjsKLQotLSAoTlNQcmludE9wZXJhdGlvbiAqKXByaW50T3BlcmF0
aW9uV2l0aFByaW50SW5mbzooTlNQcmludEluZm8gKilwcmludEluZm8gZm9yRnJhbWU6KFdLRnJh
bWVSZWYpZnJhbWVSZWY7Ci0tIChCT09MKWNhbkNoYW5nZUZyYW1lTGF5b3V0OihXS0ZyYW1lUmVm
KWZyYW1lUmVmOwotCi0tICh2b2lkKXNldEZyYW1lOihOU1JlY3QpcmVjdCBhbmRTY3JvbGxCeToo
TlNTaXplKW9mZnNldDsKLQotLy8gU3RvcHMgdXBkYXRpbmcgdGhlIHNpemUgb2YgdGhlIHBhZ2Ug
YXMgdGhlIFdLVmlldyBmcmFtZSBzaXplIHVwZGF0ZXMuCi0vLyBUaGlzIHNob3VsZCBhbHdheXMg
YmUgZm9sbG93ZWQgYnkgZW5hYmxlRnJhbWVTaXplVXBkYXRlcy4gQ2FsbHMgY2FuIGJlIG5lc3Rl
ZC4KLS0gKHZvaWQpZGlzYWJsZUZyYW1lU2l6ZVVwZGF0ZXM7Ci0vLyBJbW1lZGlhdGVseSB1cGRh
dGVzIHRoZSBzaXplIG9mIHRoZSBwYWdlIHRvIG1hdGNoIFdLVmlldydzIGZyYW1lIHNpemUKLS8v
IGFuZCBhbGxvd3Mgc3Vic2VxdWVudCB1cGRhdGVzIGFzIHRoZSBmcmFtZSBzaXplIGlzIHNldC4g
Q2FsbHMgY2FuIGJlIG5lc3RlZC4KLS0gKHZvaWQpZW5hYmxlRnJhbWVTaXplVXBkYXRlczsKLS0g
KEJPT0wpZnJhbWVTaXplVXBkYXRlc0Rpc2FibGVkOwotCi0tICh2b2lkKXBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwQXRDdXJyZW50TW91c2VMb2NhdGlvbjsKLSsgKHZvaWQpaGlkZVdvcmREZWZpbml0
aW9uV2luZG93OwotCi1AcHJvcGVydHkgKHJlYWR3cml0ZSkgQ0dGbG9hdCBtaW5pbXVtTGF5b3V0
V2lkdGg7Ci1AcHJvcGVydHkgKHJlYWR3cml0ZSkgQ0dGbG9hdCBtaW5pbXVtV2lkdGhGb3JBdXRv
TGF5b3V0OwotQHByb3BlcnR5IChyZWFkd3JpdGUpIE5TU2l6ZSBtaW5pbXVtU2l6ZUZvckF1dG9M
YXlvdXQ7Ci1AcHJvcGVydHkgKHJlYWR3cml0ZSkgQk9PTCBzaG91bGRDbGlwVG9WaXNpYmxlUmVj
dDsKLUBwcm9wZXJ0eSAocmVhZHdyaXRlKSBCT09MIHNob3VsZEV4cGFuZFRvVmlld0hlaWdodEZv
ckF1dG9MYXlvdXQ7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBnZXR0ZXI9aXNVc2luZ1VJU2lkZUNv
bXBvc2l0aW5nKSBCT09MIHVzaW5nVUlTaWRlQ29tcG9zaXRpbmc7Ci0KLUBwcm9wZXJ0eShjb3B5
LCBub25hdG9taWMpIE5TQ29sb3IgKnVuZGVybGF5Q29sb3I7Ci0KLS0gKE5TVmlldyopZnVsbFNj
cmVlblBsYWNlaG9sZGVyVmlldzsKLS0gKE5TV2luZG93KiljcmVhdGVGdWxsU2NyZWVuV2luZG93
OwotCi0tICh2b2lkKWJlZ2luRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlczsKLS0gKHZvaWQp
ZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlczsKLS0gKHZvaWQpZW5kRGVmZXJyaW5nVmll
d0luV2luZG93Q2hhbmdlc1N5bmM7Ci0tIChCT09MKWlzRGVmZXJyaW5nVmlld0luV2luZG93Q2hh
bmdlczsKLQotLSAoQk9PTCl3aW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkOwotLSAodm9p
ZClzZXRXaW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkOihCT09MKWZsYWc7Ci0KLS0gKHZv
aWQpZm9yY2VBc3luY0RyYXdpbmdBcmVhU2l6ZVVwZGF0ZTooTlNTaXplKXNpemU7Ci0tICh2b2lk
KXdhaXRGb3JBc3luY0RyYXdpbmdBcmVhU2l6ZVVwZGF0ZTsKLQotI2VuZGlmCi0KLUBlbmQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dlYktpdDIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XZWJLaXQyLmgJKHJldmlzaW9u
IDE1OTg3MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dlYktpdDIuaAko
d29ya2luZyBjb3B5KQpAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCA8V2Vi
S2l0Mi9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPFdlYktpdDIvV0tC
cm93c2luZ0NvbnRleHRHcm91cC5oPgotI2ltcG9ydCA8V2ViS2l0Mi9XS0Jyb3dzaW5nQ29udGV4
dExvYWREZWxlZ2F0ZS5oPgotI2ltcG9ydCA8V2ViS2l0Mi9XS0Jyb3dzaW5nQ29udGV4dFBvbGlj
eURlbGVnYXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQyL1dLQ29ubmVjdGlvbi5oPgotI2ltcG9ydCA8
V2ViS2l0Mi9XS0ZvdW5kYXRpb24uaD4KLSNpbXBvcnQgPFdlYktpdDIvV0tQcm9jZXNzR3JvdXAu
aD4KLSNpbXBvcnQgPFdlYktpdDIvV0tWaWV3Lmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTk4NzMpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTM3MzcsMTYgKzM3MzcsMzggQEAKIAkJMzdDNEMwODMxODE0OUMyQTAwMzY4
OEI5IC8qIENvY29hICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQlCQzU5NTQ4ODE1Qzc4Njg1MDBGRDFFM0UgLyogV2ViS2l0Mi5oICovLAogCQkJCTM3QzRD
MDhCMTgxNEFDNUMwMDM2ODhCOSAvKiBXS0JhY2tGb3J3YXJkTGlzdC5oICovLAogCQkJCTM3QzRD
MDhBMTgxNEFDNUMwMDM2ODhCOSAvKiBXS0JhY2tGb3J3YXJkTGlzdC5tbSAqLywKIAkJCQkzN0M0
QzA4RTE4MTRBRjNBMDAzNjg4QjkgLyogV0tCYWNrRm9yd2FyZExpc3RJbnRlcm5hbC5oICovLAog
CQkJCTM3QzRDMDg1MTgxNDlDNUIwMDM2ODhCOSAvKiBXS0JhY2tGb3J3YXJkTGlzdEl0ZW0uaCAq
LywKIAkJCQkzN0M0QzA4NDE4MTQ5QzVCMDAzNjg4QjkgLyogV0tCYWNrRm9yd2FyZExpc3RJdGVt
Lm1tICovLAogCQkJCTM3QzRDMDg4MTgxNDlGMjMwMDM2ODhCOSAvKiBXS0JhY2tGb3J3YXJkTGlz
dEl0ZW1JbnRlcm5hbC5oICovLAorCQkJCUJDQkFBQzZDMTQ0RTYxOTEwMDUzRjgyRiAvKiBXS0Jy
b3dzaW5nQ29udGV4dENvbnRyb2xsZXIuaCAqLywKKwkJCQlCQ0JBQUM2RDE0NEU2MTkyMDA1M0Y4
MkYgLyogV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyLm1tICovLAorCQkJCUJDQkFBQzZFMTQ0
RTYxOTIwMDUzRjgyRiAvKiBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJJbnRlcm5hbC5oICov
LAorCQkJCTM3ODhBMDVCMTQ3NDNDOTAwMDYzMTlFNSAvKiBXS0Jyb3dzaW5nQ29udGV4dENvbnRy
b2xsZXJQcml2YXRlLmggKi8sCisJCQkJQkNCQUFDRUUxNDUyMzI0MzAwNTNGODJGIC8qIFdLQnJv
d3NpbmdDb250ZXh0R3JvdXAuaCAqLywKKwkJCQlCQ0JBQUNFRjE0NTIzMjQ0MDA1M0Y4MkYgLyog
V0tCcm93c2luZ0NvbnRleHRHcm91cC5tbSAqLywKKwkJCQk3QzlEMTUzNjE4NDU4NERBMDA5RDM5
MTggLyogV0tCcm93c2luZ0NvbnRleHRHcm91cEludGVybmFsLmggKi8sCisJCQkJQkNCQUFDRjAx
NDUyMzI0ODAwNTNGODJGIC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXBQcml2YXRlLmggKi8sCiAJ
CQkJMzcwRjM0QTYxODI5Q0ZGMzAwOTAyN0M4IC8qIFdLQnJvd3NpbmdDb250ZXh0SGlzdG9yeURl
bGVnYXRlLmggKi8sCisJCQkJQkNCQUFEMEExNDU2MEE0MzAwNTNGODJGIC8qIFdLQnJvd3NpbmdD
b250ZXh0TG9hZERlbGVnYXRlLmggKi8sCisJCQkJN0NBMjU0RUExODI5OTNDRTAwRkM4QTQxIC8q
IFdLQnJvd3NpbmdDb250ZXh0UG9saWN5RGVsZWdhdGUuaCAqLywKKwkJCQlCQ0EyODRENTE0OTJG
MkM3MDAxRjkwNDIgLyogV0tDb25uZWN0aW9uLmggKi8sCisJCQkJQkNBMjg0RDQxNDkyRjJDNzAw
MUY5MDQyIC8qIFdLQ29ubmVjdGlvbi5tbSAqLywKKwkJCQlCQzVDNzVDNjE0OTU0REE2MDBCQzQ3
NzUgLyogV0tDb25uZWN0aW9uSW50ZXJuYWwuaCAqLywKIAkJCQkzNzBGMzRBMTE4MjlCRTFFMDA5
MDI3QzggLyogV0tOYXZpZ2F0aW9uRGF0YS5oICovLAogCQkJCTM3MEYzNEEwMTgyOUJFMUUwMDkw
MjdDOCAvKiBXS05hdmlnYXRpb25EYXRhLm1tICovLAogCQkJCTM3MEYzNEE0MTgyOUJFQTMwMDkw
MjdDOCAvKiBXS05hdmlnYXRpb25EYXRhSW50ZXJuYWwuaCAqLywKKwkJCQlCQ0JBQUNFNTE0NTIy
NUM5MDA1M0Y4MkYgLyogV0tQcm9jZXNzR3JvdXAuaCAqLywKKwkJCQlCQ0JBQUNFNjE0NTIyNUNB
MDA1M0Y4MkYgLyogV0tQcm9jZXNzR3JvdXAubW0gKi8sCisJCQkJN0MxRkIzQkYxODQ2QUVGQzAw
MUEwM0Q4IC8qIFdLUHJvY2Vzc0dyb3VwSW50ZXJuYWwuaCAqLywKKwkJCQlCQ0JBQUNFNzE0NTIy
NUNCMDA1M0Y4MkYgLyogV0tQcm9jZXNzR3JvdXBQcml2YXRlLmggKi8sCisJCQkJN0NENUVCQkQx
NzQ2QjA0QzAwMEMxQzQ1IC8qIFdLVHlwZVJlZldyYXBwZXIuaCAqLywKKwkJCQk3Q0Q1RUJCQzE3
NDZCMDRDMDAwQzFDNDUgLyogV0tUeXBlUmVmV3JhcHBlci5tbSAqLywKKwkJCQlCQzg2OTlCMjEx
NkFBREFBMDAyQTkyNUIgLyogV0tWaWV3LmggKi8sCisJCQkJQkZBNjE3OUUxMkYwQjk5RDAwMzNF
MENBIC8qIFdLVmlld1ByaXZhdGUuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gQ29jb2E7CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNDYzNywzMCArNDY1OSw4IEBACiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUJDQkFBQzU4MTQ0RTM4QjkwMDUzRjgyRiAv
KiBXS1ZpZXcgRGV0YWlscyAqLywKLQkJCQlCQzU5NTQ4ODE1Qzc4Njg1MDBGRDFFM0UgLyogV2Vi
S2l0Mi5oICovLAotCQkJCUJDQkFBQzZDMTQ0RTYxOTEwMDUzRjgyRiAvKiBXS0Jyb3dzaW5nQ29u
dGV4dENvbnRyb2xsZXIuaCAqLywKLQkJCQlCQ0JBQUM2RDE0NEU2MTkyMDA1M0Y4MkYgLyogV0tC
cm93c2luZ0NvbnRleHRDb250cm9sbGVyLm1tICovLAotCQkJCUJDQkFBQzZFMTQ0RTYxOTIwMDUz
RjgyRiAvKiBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJJbnRlcm5hbC5oICovLAotCQkJCTM3
ODhBMDVCMTQ3NDNDOTAwMDYzMTlFNSAvKiBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJQcml2
YXRlLmggKi8sCi0JCQkJQkNCQUFDRUUxNDUyMzI0MzAwNTNGODJGIC8qIFdLQnJvd3NpbmdDb250
ZXh0R3JvdXAuaCAqLywKLQkJCQlCQ0JBQUNFRjE0NTIzMjQ0MDA1M0Y4MkYgLyogV0tCcm93c2lu
Z0NvbnRleHRHcm91cC5tbSAqLywKLQkJCQk3QzlEMTUzNjE4NDU4NERBMDA5RDM5MTggLyogV0tC
cm93c2luZ0NvbnRleHRHcm91cEludGVybmFsLmggKi8sCi0JCQkJQkNCQUFDRjAxNDUyMzI0ODAw
NTNGODJGIC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXBQcml2YXRlLmggKi8sCi0JCQkJQkNCQUFE
MEExNDU2MEE0MzAwNTNGODJGIC8qIFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlLmggKi8s
Ci0JCQkJN0NBMjU0RUExODI5OTNDRTAwRkM4QTQxIC8qIFdLQnJvd3NpbmdDb250ZXh0UG9saWN5
RGVsZWdhdGUuaCAqLywKLQkJCQlCQ0EyODRENTE0OTJGMkM3MDAxRjkwNDIgLyogV0tDb25uZWN0
aW9uLmggKi8sCi0JCQkJQkNBMjg0RDQxNDkyRjJDNzAwMUY5MDQyIC8qIFdLQ29ubmVjdGlvbi5t
bSAqLywKLQkJCQlCQzVDNzVDNjE0OTU0REE2MDBCQzQ3NzUgLyogV0tDb25uZWN0aW9uSW50ZXJu
YWwuaCAqLywKLQkJCQlCQ0JBQUNFNTE0NTIyNUM5MDA1M0Y4MkYgLyogV0tQcm9jZXNzR3JvdXAu
aCAqLywKLQkJCQlCQ0JBQUNFNjE0NTIyNUNBMDA1M0Y4MkYgLyogV0tQcm9jZXNzR3JvdXAubW0g
Ki8sCi0JCQkJN0MxRkIzQkYxODQ2QUVGQzAwMUEwM0Q4IC8qIFdLUHJvY2Vzc0dyb3VwSW50ZXJu
YWwuaCAqLywKLQkJCQlCQ0JBQUNFNzE0NTIyNUNCMDA1M0Y4MkYgLyogV0tQcm9jZXNzR3JvdXBQ
cml2YXRlLmggKi8sCi0JCQkJN0NENUVCQkQxNzQ2QjA0QzAwMEMxQzQ1IC8qIFdLVHlwZVJlZldy
YXBwZXIuaCAqLywKLQkJCQk3Q0Q1RUJCQzE3NDZCMDRDMDAwQzFDNDUgLyogV0tUeXBlUmVmV3Jh
cHBlci5tbSAqLywKLQkJCQlCQzg2OTlCMjExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3LmggKi8s
CiAJCQkJQkM4Njk5QjMxMTZBQURBQTAwMkE5MjVCIC8qIFdLVmlldy5tbSAqLywKIAkJCQlCQzg2
OTlCNDExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3SW50ZXJuYWwuaCAqLywKLQkJCQlCRkE2MTc5
RTEyRjBCOTlEMDAzM0UwQ0EgLyogV0tWaWV3UHJpdmF0ZS5oICovLAogCQkJKTsKIAkJCXBhdGgg
PSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwo=
</data>
<flag name="review"
          id="241389"
          type_id="1"
          status="+"
          setter="mitz"
    />
    <flag name="commit-queue"
          id="241390"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>